<?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>MAS_AuthHub</name>
	<version>1.0.5</version>
    <mincmsversion>2.2.10</mincmsversion>
	<help><![CDATA[PHN0eWxlPgoubWFzLWRvYy10YWJzIHsgbWFyZ2luOiAyMHB4IDAgMDsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNkZGQ7IH0KLm1hcy1kb2MtdGFicyBhIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nOiAxMHB4IDIwcHg7IG1hcmdpbi1yaWdodDogNXB4OyBiYWNrZ3JvdW5kOiAjZjVmNWY1OyBib3JkZXI6IDFweCBzb2xpZCAjZGRkOyBib3JkZXItYm90dG9tOiBub25lOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGNvbG9yOiAjMzMzOyB9Ci5tYXMtZG9jLXRhYnMgYS5hY3RpdmUgeyBiYWNrZ3JvdW5kOiAjZmZmOyBib3JkZXItYm90dG9tOiAycHggc29saWQgI2ZmZjsgbWFyZ2luLWJvdHRvbTogLTJweDsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KLm1hcy1kb2MtdGFicyBhOmhvdmVyIHsgYmFja2dyb3VuZDogI2U5ZTllOTsgfQoubWFzLWRvYy1jb250ZW50IHsgcGFkZGluZzogMjBweDsgYm9yZGVyOiAxcHggc29saWQgI2RkZDsgYm9yZGVyLXRvcDogbm9uZTsgYmFja2dyb3VuZDogI2ZmZjsgfQoubWFzLWRvYy1zZWN0aW9uIHsgZGlzcGxheTogbm9uZTsgfQoubWFzLWRvYy1zZWN0aW9uLmFjdGl2ZSB7IGRpc3BsYXk6IGJsb2NrOyB9Cjwvc3R5bGU+Cgo8ZGl2IGNsYXNzPSJtYXMtZG9jLXRhYnMgbWFzLWRvYy10YWJzLWhlbHAiPgogIDxhIGhyZWY9IiNNQVNfQXV0aEh1Yi1oZWxwLWdlbmVyYWwiIGNsYXNzPSJtYXMtZG9jLXRhYiBhY3RpdmUiIGRhdGEtdGFiPSJNQVNfQXV0aEh1Yi1oZWxwLWdlbmVyYWwiPkdlbmVyYWw8L2E+CiAgPGEgaHJlZj0iI01BU19BdXRoSHViLWhlbHAtY29uZmlndXJhdGlvbiIgY2xhc3M9Im1hcy1kb2MtdGFiIiBkYXRhLXRhYj0iTUFTX0F1dGhIdWItaGVscC1jb25maWd1cmF0aW9uIj5Db25maWd1cmF0aW9uPC9hPgogIDxhIGhyZWY9IiNNQVNfQXV0aEh1Yi1oZWxwLXByb3RvY29scyIgY2xhc3M9Im1hcy1kb2MtdGFiIiBkYXRhLXRhYj0iTUFTX0F1dGhIdWItaGVscC1wcm90b2NvbHMiPlByb3RvY29sczwvYT4KICA8YSBocmVmPSIjTUFTX0F1dGhIdWItaGVscC1zZWN1cml0eSIgY2xhc3M9Im1hcy1kb2MtdGFiIiBkYXRhLXRhYj0iTUFTX0F1dGhIdWItaGVscC1zZWN1cml0eSI+U2VjdXJpdHk8L2E+CiAgPGEgaHJlZj0iI01BU19BdXRoSHViLWhlbHAtdHJvdWJsZXNob290aW5nIiBjbGFzcz0ibWFzLWRvYy10YWIiIGRhdGEtdGFiPSJNQVNfQXV0aEh1Yi1oZWxwLXRyb3VibGVzaG9vdGluZyI+VHJvdWJsZXNob290aW5nPC9hPgo8L2Rpdj4KCjxkaXYgY2xhc3M9Im1hcy1kb2MtY29udGVudCBtYXMtZG9jLWNvbnRlbnQtaGVscCI+CiAgPGRpdiBpZD0iTUFTX0F1dGhIdWItaGVscC1nZW5lcmFsIiBjbGFzcz0ibWFzLWRvYy1zZWN0aW9uIGFjdGl2ZSI+CiAgICA8aDM+R2VuZXJhbDwvaDM+Cgo8aDQ+T3ZlcnZpZXc8L2g0Pgo8cD5NQVMgQXV0aEh1YiBjZW50cmFsaXplcyBzaWduLWluIGZvciBDTVMgTWFkZSBTaW1wbGUgYWRtaW4gYW5kIE1BTVMgZnJvbnRlbmQgdXNlcnMuIEl0IHN1cHBvcnRzIE9BdXRoMiwgT3BlbklEIENvbm5lY3QsIFNBTUwgc2VydmljZSBwcm92aWRlciBmbG93cywgV2ViQXV0aG4gcGFzc2tleXMsIGFuZCBvcHRpb25hbCBPQXV0aCBhdXRob3JpemF0aW9uIHNlcnZlciBlbmRwb2ludHMgZm9yIHlvdXIgb3duIGNsaWVudHMuPC9wPgoKPGg0PlF1aWNrIHN0YXJ0PC9oND4KPG9sPgogIDxsaT5BZGQgc2VjcmV0cyB0byBzaXRlIGNvbmZpZy5waHAgdW5kZXIgdGhlIG1hc19hdXRoaHViIGFycmF5IChzZWUgQ29uZmlndXJhdGlvbiB0YWIpLjwvbGk+CiAgPGxpPk9wZW4gRXh0ZW5zaW9ucywgdGhlbiBNQVMgQXV0aEh1YiwgYW5kIGdyYW50IE1hbmFnZSAvIFVzZSBwZXJtaXNzaW9ucyB0byB0aGUgcmlnaHQgYWRtaW4gZ3JvdXBzLjwvbGk+CiAgPGxpPk9uIHRoZSBJZGVudGl0eSBwcm92aWRlcnMgdGFiLCBhZGQgYW5kIGVuYWJsZSBhdCBsZWFzdCBvbmUgcHJvdmlkZXIgKEF6dXJlIEFELCBHb29nbGUsIFNBTUwgSWRQLCBhbmQgc28gb24pLjwvbGk+CiAgPGxpPkluIE1BTVMgbW9kdWxlIHByZWZlcmVuY2VzLCBzZXQgQXV0aGVudGljYXRpb24gbW9kdWxlIHRvIE1BU19BdXRoSHViIHdoZW4gdXNpbmcgZnJvbnRlbmQgU1NPLjwvbGk+CiAgPGxpPkVuYWJsZSBDTVNNUyBhZG1pbiBTU08gYW5kL29yIE1BTVMgZnJvbnRlbmQgU1NPIG9uIHRoZSBTZXR0aW5ncyB0YWIsIHRoZW4gdGVzdCBzaWduLWluIGFuZCByZXZpZXcgdGhlIEF1ZGl0IGxvZy48L2xpPgo8L29sPgoKPGg0PlN5c3RlbSByZXF1aXJlbWVudHM8L2g0Pgo8dWw+CiAgPGxpPkNNUyBNYWRlIFNpbXBsZSAyLjIuMTA8L2xpPgogIDxsaT5QSFAgNy40LjA8L2xpPgogIDxsaT5NQU1TIDEuMCsgYW5kIENNU01TRXh0IDEuMCsgKG1vZHVsZSBkZXBlbmRlbmNpZXMpPC9saT4KICA8bGk+SFRUUFMgb24gdGhlIHB1YmxpYyBzaXRlIGZvciBPQXV0aCwgU0FNTCwgYW5kIFdlYkF1dGhuIGNhbGxiYWNrczwvbGk+CjwvdWw+Cgo8aDQ+Q3JlZGl0czwvaDQ+CjxwPkRldmVsb3BlZCBieSA8YSBocmVmPSJodHRwcyUzQSUyRiUyRm5ld3N0YXJnZXRlZC5jb20lMkZjb250YWN0JTJGIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj5tYXN0ZXIzMzk1PC9hPiB8IDxhIGhyZWY9Im1haWx0bzppbmZvJTQwbmV3c3RhcmdldGVkLmNvbSI+aW5mb0BuZXdzdGFyZ2V0ZWQuY29tPC9hPjwvcD4KICA8L2Rpdj4KICA8ZGl2IGlkPSJNQVNfQXV0aEh1Yi1oZWxwLWNvbmZpZ3VyYXRpb24iIGNsYXNzPSJtYXMtZG9jLXNlY3Rpb24iPgogICAgPGgzPkNvbmZpZ3VyYXRpb248L2gzPgoKPGg0PlNlY3JldHMgaW4gY29uZmlnLnBocDwvaDQ+CjxwPk5ldmVyIHN0b3JlIGNsaWVudCBzZWNyZXRzIG9yIHNpZ25pbmcga2V5cyBpbiB0aGUgZGF0YWJhc2UuIFVzZSB0aGUgc2l0ZSByb290IGNvbmZpZy5waHAgYXJyYXkgbWFzX2F1dGhodWIuIFNlZSB0by1kby9jb25maWcubWFzX2F1dGhodWIuZXhhbXBsZS5waHAgaW4gdGhlIG1vZHVsZSBmb2xkZXIgZm9yIGEgc2FtcGxlIHNoYXBlLjwvcD4KPHVsPgogIDxsaT48Y29kZT5lbmNyeXB0aW9uX2tleTwvY29kZT46IDMyLWJ5dGUgcmFuZG9tIHZhbHVlIGZvciBlbmNyeXB0aW5nIHN0b3JlZCB0b2tlbnM8L2xpPgogIDxsaT48Y29kZT5zaWduaW5nX2tleTwvY29kZT46IFNlY3JldCBmb3IgSldUIC8gaHViIHNlc3Npb24gc2lnbmluZzwvbGk+CiAgPGxpPjxjb2RlPnByb3ZpZGVyczwvY29kZT46IFBlci1wcm92aWRlciBvdmVycmlkZXMgKGZvciBleGFtcGxlIGNsaWVudF9zZWNyZXQgZm9yIEF6dXJlIEFEKTwvbGk+CjwvdWw+Cgo8aDQ+U2V0dGluZ3MgdGFiPC9oND4KPHVsPgogIDxsaT48c3Ryb25nPkVuYWJsZSBDTVNNUyBhZG1pbiBTU088L3N0cm9uZz46IEFsbG93cyBleHRlcm5hbCBpZGVudGl0eSBwcm92aWRlcnMgdG8gc2lnbiB1c2VycyBpbnRvIHRoZSBDTVNNUyBhZG1pbiB3aGVuIGxpbmtlZCBhY2NvdW50cyBleGlzdC48L2xpPgogIDxsaT48c3Ryb25nPkVuYWJsZSBNQU1TIGZyb250ZW5kIFNTTzwvc3Ryb25nPjogRW5hYmxlcyBNQU1TIGZyb250ZW5kIGxvZ2luIHZpYSBjb25maWd1cmVkIHByb3ZpZGVycy48L2xpPgogIDxsaT48c3Ryb25nPkF1dG8tbGluayBhY2NvdW50cyBieSB2ZXJpZmllZCBlbWFpbDwvc3Ryb25nPjogTGlua3MgbmV3IGxvZ2lucyB0byBleGlzdGluZyBDTVMgb3IgTUFNUyB1c2VycyB3aGVuIGVtYWlsIGlzIHZlcmlmaWVkIGJ5IHRoZSBJZFAuPC9saT4KICA8bGk+PHN0cm9uZz5IdWIgc2Vzc2lvbiBUVEwgKHNlY29uZHMpPC9zdHJvbmc+OiBMaWZldGltZSBvZiBodWIgc2Vzc2lvbiByZWNvcmRzIGJlZm9yZSByZS1hdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZC48L2xpPgogIDxsaT48c3Ryb25nPlJhdGUgbGltaXQgKHJlcXVlc3RzIHBlciBob3VyIHBlciBJUCk8L3N0cm9uZz46IEJhc2ljIHBlci1JUCB0aHJvdHRsaW5nIG9uIHNlbnNpdGl2ZSBmcm9udGVuZCBhY3Rpb25zLjwvbGk+CjwvdWw+Cgo8aDQ+T3RoZXIgYWRtaW4gdGFiczwvaDQ+Cjx1bD4KICA8bGk+PHN0cm9uZz5JZGVudGl0eSBwcm92aWRlcnM8L3N0cm9uZz46IEFkZCBPQXV0aC9PSURDL1NBTUwvV2ViQXV0aG4gZHJpdmVycywgY2xpZW50IElEcywgcmVkaXJlY3QgVVJJcywgYW5kIG1ldGFkYXRhLjwvbGk+CiAgPGxpPjxzdHJvbmc+TUFNUyBjb21wYXRpYmlsaXR5PC9zdHJvbmc+OiBKSVQgdXNlciBjcmVhdGlvbiwgZHVwbGljYXRlLWVtYWlsIHBvbGljeSwgYW5kIE1BTVMgaW50ZWdyYXRpb24gc3RhdHVzLjwvbGk+CiAgPGxpPjxzdHJvbmc+T0F1dGggY2xpZW50czwvc3Ryb25nPjogUmVnaXN0ZXIgY29uZmlkZW50aWFsIGNsaWVudHMgdGhhdCBtYXkgdXNlIHRoaXMgaHViIGFzIGFuIE9BdXRoMiBhdXRob3JpemF0aW9uIHNlcnZlci48L2xpPgogIDxsaT48c3Ryb25nPlNlc3Npb25zIGFuZCB0b2tlbnM8L3N0cm9uZz46IFZpZXcgYW5kIHJldm9rZSBhY3RpdmUgaHViIHNlc3Npb25zIGFuZCByZWZyZXNoIHRva2Vucy48L2xpPgogIDxsaT48c3Ryb25nPkF1ZGl0IGxvZzwvc3Ryb25nPjogU2VjdXJpdHkgYW5kIHNpZ24taW4gZXZlbnRzIHdpdGggQ1NWIGV4cG9ydC48L2xpPgo8L3VsPgogIDwvZGl2PgogIDxkaXYgaWQ9Ik1BU19BdXRoSHViLWhlbHAtcHJvdG9jb2xzIiBjbGFzcz0ibWFzLWRvYy1zZWN0aW9uIj4KICAgIDxoMz5Qcm90b2NvbHM8L2gzPgoKPGg0Pk9BdXRoMiAvIE9JREM8L2g0Pgo8cD5TdGFuZGFyZCBhdXRob3JpemF0aW9uLWNvZGUgZmxvdyBmb3Igc29jaWFsIGFuZCBlbnRlcnByaXNlIElkUHMuPC9wPgo8dWw+CiAgPGxpPjxjb2RlPm9hdXRoX3N0YXJ0PC9jb2RlPiwgPGNvZGU+b2F1dGhfY2FsbGJhY2s8L2NvZGU+PC9saT4KICA8bGk+PGNvZGU+b2F1dGhfYXV0aG9yaXplPC9jb2RlPiwgPGNvZGU+b2F1dGhfdG9rZW48L2NvZGU+ICh3aGVuIGVuYWJsZWQgZm9yIHJlZ2lzdGVyZWQgY2xpZW50cyk8L2xpPgogIDxsaT48Y29kZT5vaWRjX2Rpc2NvdmVyeTwvY29kZT4gKHdlbGwta25vd24gT3BlbklEIGNvbmZpZ3VyYXRpb24gZm9yIHJlbHlpbmcgcGFydGllcyk8L2xpPgo8L3VsPgoKPGg0PlNBTUw8L2g0Pgo8cD5TZXJ2aWNlLXByb3ZpZGVyIGVuZHBvaW50cyBmb3IgU0FNTCAyLjAgSWRQcy48L3A+Cjx1bD4KICA8bGk+PGNvZGU+c2FtbF9hY3M8L2NvZGU+OiBBc3NlcnRpb24gQ29uc3VtZXIgU2VydmljZSAoUE9TVCBiaW5kaW5nKTwvbGk+CiAgPGxpPjxjb2RlPnNhbWxfbWV0YWRhdGE8L2NvZGU+OiBTUCBtZXRhZGF0YSBYTUwgZm9yIElkUCBjb25maWd1cmF0aW9uPC9saT4KPC91bD4KCjxoND5XZWJBdXRobjwvaDQ+CjxwPlBhc3N3b3JkbGVzcyBwYXNza2V5cyBmb3IgbGlua2VkIHVzZXJzIChyZXF1aXJlcyBIVFRQUyBhbmQgY29tcGF0aWJsZSBicm93c2VycykuPC9wPgo8dWw+CiAgPGxpPjxjb2RlPndlYmF1dGhuPC9jb2RlPjogcmVnaXN0cmF0aW9uIGFuZCBhdXRoZW50aWNhdGlvbiBjZXJlbW9uaWVzPC9saT4KPC91bD4KCjxoND5NQU1TPC9oND4KPHA+TUFNUyBjYWxscyB0aGlzIG1vZHVsZSB3aGVuIGF1dGhfbW9kdWxlIGlzIHNldCB0byBNQVNfQXV0aEh1Yi48L3A+Cjx1bD4KICA8bGk+PGNvZGU+bWFtc19sb2dpbjwvY29kZT46IGZyb250ZW5kIFNTTyBlbnRyeSBmcm9tIE1BTVMgdGVtcGxhdGVzPC9saT4KPC91bD4KPHAgY2xhc3M9ImluZm9ybWF0aW9uIj5NQU1TUmVnaXN0cmF0aW9uIGlzIGluc3RhbGxlZDogZHVwbGljYXRlLWVtYWlsIGFuZCBKSVQgcG9saWNpZXMgb24gdGhlIE1BTVMgdGFiIGFwcGx5LjwvcD4KICA8L2Rpdj4KICA8ZGl2IGlkPSJNQVNfQXV0aEh1Yi1oZWxwLXNlY3VyaXR5IiBjbGFzcz0ibWFzLWRvYy1zZWN0aW9uIj4KICAgIDxoMz5TZWN1cml0eTwvaDM+Cgo8aDQ+UHJvdGVjdCBzZWNyZXRzPC9oND4KPHA+RGVueSBIVFRQIGFjY2VzcyB0byBjb25maWcucGhwIHZpYSBzZXJ2ZXIgcnVsZXMuIFJvdGF0ZSBlbmNyeXB0aW9uX2tleSBhbmQgc2lnbmluZ19rZXkgaWYgY29tcHJvbWlzZSBpcyBzdXNwZWN0ZWQgKHVzZXJzIG11c3Qgc2lnbiBpbiBhZ2FpbikuPC9wPgoKPGg0PkF1ZGl0IGxvZzwvaDQ+CjxwPlJldmlldyBmYWlsZWQgbG9naW5zLCBwcm92aWRlciBlcnJvcnMsIGFuZCBhY2NvdW50IGxpbmtpbmcgZXZlbnRzIHJlZ3VsYXJseS4gRXhwb3J0IENTViBmb3IgbG9uZy10ZXJtIHJldGVudGlvbi48L3A+Cgo8aDQ+U2Vzc2lvbnM8L2g0Pgo8cD5SZXZva2Ugc2Vzc2lvbnMgd2hlbiBzdGFmZiBsZWF2ZSBvciBkZXZpY2VzIGFyZSBsb3N0LiBTaG9ydGVyIFRUTCByZWR1Y2VzIGV4cG9zdXJlLjwvcD4KCjxoND5QZXJtaXNzaW9uczwvaDQ+Cjx1bD4KICA8bGk+PHN0cm9uZz5NYW5hZ2UgTUFTX0F1dGhIdWI6IGZ1bGwgYWRtaW4gdGFicywgcHJvdmlkZXJzLCBjbGllbnRzLCBhdWRpdCBleHBvcnQuPC9zdHJvbmc+PC9saT4KICA8bGk+PHN0cm9uZz5Vc2UgTUFTX0F1dGhIdWI6IHJlcXVpcmVkIGZvciBzb21lIGF1dG9tYXRlZCBvcGVyYXRpb25zIGFuZCBBUEktc3R5bGUgdXNlLjwvc3Ryb25nPjwvbGk+CjwvdWw+CiAgPC9kaXY+CiAgPGRpdiBpZD0iTUFTX0F1dGhIdWItaGVscC10cm91Ymxlc2hvb3RpbmciIGNsYXNzPSJtYXMtZG9jLXNlY3Rpb24iPgogICAgPGgzPlRyb3VibGVzaG9vdGluZzwvaDM+Cgo8aDQ+U1NPIGRvZXMgbm90IHdvcms8L2g0Pgo8dWw+CiAgPGxpPkNvbmZpcm0gdGhlIHByb3ZpZGVyIGlzIGVuYWJsZWQgYW5kIHJlZGlyZWN0IFVSSXMgbWF0Y2ggZXhhY3RseSAoc2NoZW1lLCBob3N0LCBwYXRoKS48L2xpPgogIDxsaT5DaGVjayB0aGF0IHRoZSBDTVMgb3IgTUFNUyB1c2VyIGlzIGxpbmtlZCAob3IgYXV0by1saW5rIGJ5IGVtYWlsIGlzIGVuYWJsZWQgYW5kIGVtYWlsIGlzIHZlcmlmaWVkKS48L2xpPgogIDxsaT5JbnNwZWN0IHRoZSBBdWRpdCBsb2cgYW5kIFBIUCBlcnJvciBsb2cgZm9yIHByb3ZpZGVyLXNwZWNpZmljIGVycm9ycy48L2xpPgo8L3VsPgoKPGg0Pk9BdXRoIC8gT0lEQyBlcnJvcnM8L2g0Pgo8dWw+CiAgPGxpPlZlcmlmeSBjbGllbnRfaWQgYW5kIGNsaWVudF9zZWNyZXQgaW4gY29uZmlnLnBocCBtYXRjaCB0aGUgSWRQIHBvcnRhbC48L2xpPgogIDxsaT5FbnN1cmUgc2VydmVyIHRpbWUgaXMgY29ycmVjdCAoc2tldyBicmVha3MgdG9rZW4gdmFsaWRhdGlvbikuPC9saT4KICA8bGk+Rm9yIGF1dGhvcml6YXRpb24tc2VydmVyIG1vZGUsIGNvbmZpcm0gdGhlIE9BdXRoIGNsaWVudCByZWRpcmVjdCBVUklzIGFyZSByZWdpc3RlcmVkIGluIEF1dGhIdWIuPC9saT4KPC91bD4KCjxoND5NQU1TIGludGVncmF0aW9uPC9oND4KPHVsPgogIDxsaT5NQU1TIHByZWZlcmVuY2VzIG11c3QgbGlzdCBNQVNfQXV0aEh1YiBhcyB0aGUgYXV0aGVudGljYXRpb24gbW9kdWxlLjwvbGk+CiAgPGxpPkNsZWFyIE1BTVMgYW5kIENNUyBjYWNoZXMgYWZ0ZXIgY2hhbmdpbmcgcHJvdmlkZXJzIG9yIGh1YiBzZXR0aW5ncy48L2xpPgo8L3VsPgoKPGg0PlN1cHBvcnQ8L2g0Pgo8cD5Gb3Igc2l0ZS1zcGVjaWZpYyBpc3N1ZXMgY29udGFjdCA8YSBocmVmPSJodHRwczovL25ld3N0YXJnZXRlZC5jb20vY29udGFjdC8iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiPm5ld3N0YXJnZXRlZC5jb20vY29udGFjdDwvYT48L3A+CiAgPC9kaXY+CjwvZGl2PgoKPHNjcmlwdD4KKGZ1bmN0aW9uKCkgewogIHZhciByb290ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1hcy1kb2MtdGFicy1oZWxwJyk7CiAgaWYgKCFyb290IHx8ICFyb290LnBhcmVudE5vZGUpIHsgcmV0dXJuOyB9CiAgdmFyIGNvbnRhaW5lciA9IHJvb3QucGFyZW50Tm9kZTsKICB2YXIgdGFicyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcubWFzLWRvYy10YWInKTsKICB2YXIgc2VjdGlvbnMgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLm1hcy1kb2Mtc2VjdGlvbicpOwogIHRhYnMuZm9yRWFjaChmdW5jdGlvbih0YWIpIHsKICAgIHRhYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB2YXIgdGFyZ2V0ID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGFiJyk7CiAgICAgIHRhYnMuZm9yRWFjaChmdW5jdGlvbih0KSB7IHQuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7IH0pOwogICAgICBzZWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHMpIHsgcy5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTsgfSk7CiAgICAgIHRoaXMuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7CiAgICAgIHZhciBwYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhcmdldCk7CiAgICAgIGlmIChwYW5lbCkgeyBwYW5lbC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsgfQogICAgfSk7CiAgfSk7Cn0pKCk7Cjwvc2NyaXB0Pgo8aDM+RGVwZW5kZW5jaWVzPC9oMz48dWw+PGxpPkNNU01TRXh0ID0mZ3Q7IDEuMDwvbGk+PGxpPk1BTVMgPSZndDsgMS4wPC9saT48L3VsPjxoMz5QYXJhbWV0ZXJzPC9oMz48dWw+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gYWN0aW9uPSJkZWZhdWx0YWRtaW4iIC0gQWN0aW9uOiBvYXV0aF9zdGFydCwgb2F1dGhfY2FsbGJhY2ssIG1hbXNfbG9naW4sIHdlYmF1dGhuLCBzYW1sX2Fjcywgb2F1dGhfYXV0aG9yaXplLCBvYXV0aF90b2tlbiwgb2lkY19kaXNjb3Zlcnk8L2xpPjwvdWw+]]></help>
	<about><![CDATA[PHN0eWxlPgoubWFzLWRvYy10YWJzIHsgbWFyZ2luOiAyMHB4IDAgMDsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNkZGQ7IH0KLm1hcy1kb2MtdGFicyBhIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nOiAxMHB4IDIwcHg7IG1hcmdpbi1yaWdodDogNXB4OyBiYWNrZ3JvdW5kOiAjZjVmNWY1OyBib3JkZXI6IDFweCBzb2xpZCAjZGRkOyBib3JkZXItYm90dG9tOiBub25lOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGNvbG9yOiAjMzMzOyB9Ci5tYXMtZG9jLXRhYnMgYS5hY3RpdmUgeyBiYWNrZ3JvdW5kOiAjZmZmOyBib3JkZXItYm90dG9tOiAycHggc29saWQgI2ZmZjsgbWFyZ2luLWJvdHRvbTogLTJweDsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KLm1hcy1kb2MtdGFicyBhOmhvdmVyIHsgYmFja2dyb3VuZDogI2U5ZTllOTsgfQoubWFzLWRvYy1jb250ZW50IHsgcGFkZGluZzogMjBweDsgYm9yZGVyOiAxcHggc29saWQgI2RkZDsgYm9yZGVyLXRvcDogbm9uZTsgYmFja2dyb3VuZDogI2ZmZjsgfQoubWFzLWRvYy1zZWN0aW9uIHsgZGlzcGxheTogbm9uZTsgfQoubWFzLWRvYy1zZWN0aW9uLmFjdGl2ZSB7IGRpc3BsYXk6IGJsb2NrOyB9Cjwvc3R5bGU+Cgo8ZGl2IGNsYXNzPSJtYXMtZG9jLXRhYnMgbWFzLWRvYy10YWJzLWFib3V0Ij4KICA8YSBocmVmPSIjTUFTX0F1dGhIdWItYWJvdXQtbW9kdWxlIiBjbGFzcz0ibWFzLWRvYy10YWIgYWN0aXZlIiBkYXRhLXRhYj0iTUFTX0F1dGhIdWItYWJvdXQtbW9kdWxlIj5Nb2R1bGU8L2E+CiAgPGEgaHJlZj0iI01BU19BdXRoSHViLWFib3V0LWNvbXBhdCIgY2xhc3M9Im1hcy1kb2MtdGFiIiBkYXRhLXRhYj0iTUFTX0F1dGhIdWItYWJvdXQtY29tcGF0Ij5Db21wYXRpYmlsaXR5PC9hPgogIDxhIGhyZWY9IiNNQVNfQXV0aEh1Yi1hYm91dC1zdW1tYXJ5IiBjbGFzcz0ibWFzLWRvYy10YWIiIGRhdGEtdGFiPSJNQVNfQXV0aEh1Yi1hYm91dC1zdW1tYXJ5Ij5TdW1tYXJ5PC9hPgogIDxhIGhyZWY9IiNNQVNfQXV0aEh1Yi1hYm91dC1jaGFuZ2Vsb2ciIGNsYXNzPSJtYXMtZG9jLXRhYiIgZGF0YS10YWI9Ik1BU19BdXRoSHViLWFib3V0LWNoYW5nZWxvZyI+Q2hhbmdlIGxvZzwvYT4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJtYXMtZG9jLWNvbnRlbnQgbWFzLWRvYy1jb250ZW50LWFib3V0Ij4KICA8ZGl2IGlkPSJNQVNfQXV0aEh1Yi1hYm91dC1tb2R1bGUiIGNsYXNzPSJtYXMtZG9jLXNlY3Rpb24gYWN0aXZlIj4KICAgIDxoMz5Nb2R1bGU8L2gzPgoKPHA+PHN0cm9uZz5OYW1lPC9zdHJvbmc+IE1BUyBBdXRoSHViPC9wPgo8cD48c3Ryb25nPlZlcnNpb248L3N0cm9uZz4gMS4wLjU8L3A+CjxwPjxzdHJvbmc+QXV0aG9yPC9zdHJvbmc+IG1hc3RlcjMzOTU8L3A+CjxwPjxzdHJvbmc+RW1haWw8L3N0cm9uZz4gPGEgaHJlZj0ibWFpbHRvOmluZm8lNDBuZXdzdGFyZ2V0ZWQuY29tIj5pbmZvQG5ld3N0YXJnZXRlZC5jb208L2E+PC9wPgo8cD48c3Ryb25nPldlYnNpdGU8L3N0cm9uZz4gPGEgaHJlZj0iaHR0cHMlM0ElMkYlMkZuZXdzdGFyZ2V0ZWQuY29tJTJGY29udGFjdCUyRiIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI+aHR0cHM6Ly9uZXdzdGFyZ2V0ZWQuY29tL2NvbnRhY3QvPC9hPjwvcD4KPHA+PHN0cm9uZz5MaWNlbnNlPC9zdHJvbmc+IE1JVDwvcD4KICA8L2Rpdj4KICA8ZGl2IGlkPSJNQVNfQXV0aEh1Yi1hYm91dC1jb21wYXQiIGNsYXNzPSJtYXMtZG9jLXNlY3Rpb24iPgogICAgPGgzPkNvbXBhdGliaWxpdHk8L2gzPgoKPHA+PHN0cm9uZz5NaW5pbXVtIENNUyBNYWRlIFNpbXBsZTwvc3Ryb25nPiAyLjIuMTA8L3A+CjxwPjxzdHJvbmc+TWluaW11bSBQSFA8L3N0cm9uZz4gNy40LjA8L3A+Cgo8aDQ+TW9kdWxlIGRlcGVuZGVuY2llczwvaDQ+Cjx1bD4KICA8bGk+PHN0cm9uZz5DTVNNU0V4dDwvc3Ryb25nPiAmZ3Q7PSAxLjA8L2xpPgogIDxsaT48c3Ryb25nPk1BTVM8L3N0cm9uZz4gJmd0Oz0gMS4wPC9saT4KPC91bD4KPHAgY2xhc3M9ImluZm9ybWF0aW9uIj5NQU1TUmVnaXN0cmF0aW9uIGlzIGluc3RhbGxlZCBhbmQgY2FuIGludGVyb3BlcmF0ZSB3aXRoIEF1dGhIdWIgZW1haWwtbGluayBwb2xpY2llcy48L3A+CiAgPC9kaXY+CiAgPGRpdiBpZD0iTUFTX0F1dGhIdWItYWJvdXQtc3VtbWFyeSIgY2xhc3M9Im1hcy1kb2Mtc2VjdGlvbiI+CiAgICA8aDM+U3VtbWFyeTwvaDM+Cgo8cD5DZW50cmFsaXplZCBpZGVudGl0eSBhbmQgYWNjZXNzIG1hbmFnZW1lbnQ6IE9BdXRoMiwgT0lEQywgU0FNTCwgV2ViQXV0aG4sIENNU01TIGFkbWluIFNTTywgYW5kIE1BTVMgaW50ZWdyYXRpb24uPC9wPgoKPGg0PktleSBmZWF0dXJlczwvaDQ+Cjx1bD4KICA8bGk+T0F1dGgyIGFuZCBPcGVuSUQgQ29ubmVjdCBpZGVudGl0eSBwcm92aWRlcnM8L2xpPgogIDxsaT5TQU1MIDIuMCBzZXJ2aWNlIHByb3ZpZGVyPC9saT4KICA8bGk+V2ViQXV0aG4gcGFzc2tleXM8L2xpPgogIDxsaT5NQU1TIGZyb250ZW5kIFNTTyBhbmQgQ01TTVMgYWRtaW4gU1NPPC9saT4KICA8bGk+QXVkaXQgbG9nLCBzZXNzaW9ucywgYW5kIE9BdXRoIGNsaWVudCByZWdpc3RyeTwvbGk+CjwvdWw+CiAgPC9kaXY+CiAgPGRpdiBpZD0iTUFTX0F1dGhIdWItYWJvdXQtY2hhbmdlbG9nIiBjbGFzcz0ibWFzLWRvYy1zZWN0aW9uIj4KICAgIDxoMz5DaGFuZ2UgbG9nPC9oMz4KCiAgPHA+U2VlIENIQU5HRUxPRy5tZCBpbiB0aGUgbW9kdWxlIGRpcmVjdG9yeS48L3A+CiAgPC9kaXY+CjwvZGl2PgoKPHNjcmlwdD4KKGZ1bmN0aW9uKCkgewogIHZhciByb290ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1hcy1kb2MtdGFicy1hYm91dCcpOwogIGlmICghcm9vdCB8fCAhcm9vdC5wYXJlbnROb2RlKSB7IHJldHVybjsgfQogIHZhciBjb250YWluZXIgPSByb290LnBhcmVudE5vZGU7CiAgdmFyIHRhYnMgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLm1hcy1kb2MtdGFiJyk7CiAgdmFyIHNlY3Rpb25zID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5tYXMtZG9jLXNlY3Rpb24nKTsKICB0YWJzLmZvckVhY2goZnVuY3Rpb24odGFiKSB7CiAgICB0YWIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgdmFyIHRhcmdldCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdkYXRhLXRhYicpOwogICAgICB0YWJzLmZvckVhY2goZnVuY3Rpb24odCkgeyB0LmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOyB9KTsKICAgICAgc2VjdGlvbnMuZm9yRWFjaChmdW5jdGlvbihzKSB7IHMuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7IH0pOwogICAgICB0aGlzLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogICAgICB2YXIgcGFuZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YXJnZXQpOwogICAgICBpZiAocGFuZWwpIHsgcGFuZWwuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7IH0KICAgIH0pOwogIH0pOwp9KSgpOwo8L3NjcmlwdD4K]]></about>
	<description><![CDATA[Centralized identity and access management: OAuth2, OIDC, SAML, WebAuthn, CMSMS admin SSO, and MAMS integration.]]></description>
	<requires>
	  <requiredname>CMSMSExt</requiredname>
	  <requiredversion>1.0</requiredversion>
	</requires>
	<requires>
	  <requiredname>MAMS</requiredname>
	  <requiredversion>1.0</requiredversion>
	</requires>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.admin_settings_save.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2Ntc21zJykpIHsKICAgIGV4aXQ7Cn0KaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKE1BU19BdXRoSHViOjpQRVJNX01BTkFHRSkpIHsKICAgIHJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKfQokc2VjdGlvbiA9IGlzc2V0KCRwYXJhbXNbJ2FkbWluc2VjdGlvbiddKSA/IChzdHJpbmcpICRwYXJhbXNbJ2FkbWluc2VjdGlvbiddIDogJ2V4dGVuc2lvbnMnOwokYWxsb3dlZCA9IGFycmF5KCdleHRlbnNpb25zJywgJ2NvbnRlbnQnLCAnc2l0ZWFkbWluJywgJ3VzZXJzZ3JvdXBzJywgJ2xheW91dCcsICdlY29tbWVyY2UnKTsKaWYgKCFpbl9hcnJheSgkc2VjdGlvbiwgJGFsbG93ZWQsIHRydWUpKSB7CiAgICAkc2VjdGlvbiA9ICdleHRlbnNpb25zJzsKfQokdGhpcy0+U2V0UHJlZmVyZW5jZShNQVNfQXV0aEh1Yjo6UFJFRl9BRE1JTl9TRUNUSU9OLCAkc2VjdGlvbik7CmlmICghZW1wdHkoJHBhcmFtc1snc2hvd2RvbmF0aW9uc3RhYiddKSkgewogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2hpZGVkb25hdGlvbnN0YWInLCAnJyk7Cn0gZWxzZSB7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnaGlkZWRvbmF0aW9uc3RhYicsICR0aGlzLT5HZXRWZXJzaW9uKCkpOwp9CiR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIGFycmF5KCdhY3RpdmV0YWInID0+ICdhZG1pbnNldHRpbmdzJywgJ21zZycgPT4gJ3ByZWZzdXBkYXRlZCcpKTsK]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2Ntc21zJykpIHsKICAgIGV4aXQ7Cn0KaW5jbHVkZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvYWN0aW9uLm1hbXNfbG9naW4ucGhwJzsK]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2Ntc21zJykpIHsKICAgIGV4aXQ7Cn0KaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKE1BU19BdXRoSHViOjpQRVJNX01BTkFHRSkpIHsKICAgIHJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKfQpyZXF1aXJlX29uY2UgZGlybmFtZShfX0RJUl9fKSAuICcvTUFTX0NvbW1vbi9saWIvbWFzX2FkbWluX3VpLnBocCc7Ck1hc19BZG1pbl9VaTo6ZW5zdXJlSWNvbkdpZigkdGhpcyk7Ck1hc19BZG1pbl9VaTo6ZW5zdXJlQmFubmVyKCR0aGlzKTsKTWFzX0FkbWluX1VpOjphc3NpZ25CcmFuZGluZygkdGhpcywgY21zbXMoKS0+R2V0U21hcnR5KCkpOwpNYXNfQWRtaW5fVWk6OmVjaG9TZXR0aW5nc0Jhbm5lcigkdGhpcyk7CiRhY3Rpb25pZCA9ICRpZDsKaWYgKGlzc2V0KCRwYXJhbXNbJ2hpZGVkb25hdGlvbnNzdWJtaXQnXSkpIHsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdoaWRlZG9uYXRpb25zdGFiJywgJHRoaXMtPkdldFZlcnNpb24oKSk7Cn0KaWYgKCFlbXB0eSgkcGFyYW1zWydtc2cnXSkpIHsKICAgIGVjaG8gJHRoaXMtPlNob3dNZXNzYWdlKCR0aGlzLT5MYW5nKCRwYXJhbXNbJ21zZyddKSk7Cn0KJGFjdGl2ZXRhYiA9IGlzc2V0KCRwYXJhbXNbJ2FjdGl2ZXRhYiddKSA/IChzdHJpbmcpICRwYXJhbXNbJ2FjdGl2ZXRhYiddIDogJ3NldHRpbmdzJzsKZWNobyAkdGhpcy0+U3RhcnRUYWJIZWFkZXJzKCk7CmVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignc2V0dGluZ3MnLCAkdGhpcy0+TGFuZygnc2V0dGluZ3MnKSwgJGFjdGl2ZXRhYiA9PT0gJ3NldHRpbmdzJyk7CmVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcigncHJvdmlkZXJzJywgJHRoaXMtPkxhbmcoJ3RhYl9wcm92aWRlcnMnKSwgJGFjdGl2ZXRhYiA9PT0gJ3Byb3ZpZGVycycpOwplY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ21hbXMnLCAkdGhpcy0+TGFuZygndGFiX21hbXMnKSwgJGFjdGl2ZXRhYiA9PT0gJ21hbXMnKTsKZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdvYXV0aF9jbGllbnRzJywgJHRoaXMtPkxhbmcoJ3RhYl9vYXV0aF9jbGllbnRzJyksICRhY3RpdmV0YWIgPT09ICdvYXV0aF9jbGllbnRzJyk7CmVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignc2Vzc2lvbnMnLCAkdGhpcy0+TGFuZygndGFiX3Nlc3Npb25zJyksICRhY3RpdmV0YWIgPT09ICdzZXNzaW9ucycpOwplY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ2F1ZGl0JywgJHRoaXMtPkxhbmcoJ3RhYl9hdWRpdCcpLCAkYWN0aXZldGFiID09PSAnYXVkaXQnKTsKZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdhZG1pbnNldHRpbmdzJywgJHRoaXMtPkxhbmcoJ3RhYl9hZG1pbnNldHRpbmdzJyksICRhY3RpdmV0YWIgPT09ICdhZG1pbnNldHRpbmdzJyk7CmlmICgkdGhpcy0+U2hvd0RvbmF0aW9uc1RhYigpKSB7CiAgICBlY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ2RvbmF0aW9ucycsICR0aGlzLT5MYW5nKCdkb25hdGlvbnN0YWInKSwgJGFjdGl2ZXRhYiA9PT0gJ2RvbmF0aW9ucycpOwp9CmVjaG8gJHRoaXMtPkVuZFRhYkhlYWRlcnMoKTsKZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7CmVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdzZXR0aW5ncycpOwppbmNsdWRlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9mdW5jdGlvbi5zZXR0aW5ncy5waHAnOwplY2hvICR0aGlzLT5FbmRUYWIoKTsKZWNobyAkdGhpcy0+U3RhcnRUYWIoJ3Byb3ZpZGVycycpOwppbmNsdWRlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9mdW5jdGlvbi5wcm92aWRlcnMucGhwJzsKZWNobyAkdGhpcy0+RW5kVGFiKCk7CmVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdtYW1zJyk7CmluY2x1ZGUgZGlybmFtZShfX0ZJTEVfXykgLiAnL2Z1bmN0aW9uLm1hbXNfcG9saWN5LnBocCc7CmVjaG8gJHRoaXMtPkVuZFRhYigpOwplY2hvICR0aGlzLT5TdGFydFRhYignb2F1dGhfY2xpZW50cycpOwppbmNsdWRlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9mdW5jdGlvbi5vYXV0aF9jbGllbnRzLnBocCc7CmVjaG8gJHRoaXMtPkVuZFRhYigpOwplY2hvICR0aGlzLT5TdGFydFRhYignc2Vzc2lvbnMnKTsKaW5jbHVkZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvZnVuY3Rpb24uc2Vzc2lvbnMucGhwJzsKZWNobyAkdGhpcy0+RW5kVGFiKCk7CmVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdhdWRpdCcpOwppbmNsdWRlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9mdW5jdGlvbi5hdWRpdC5waHAnOwplY2hvICR0aGlzLT5FbmRUYWIoKTsKZWNobyAkdGhpcy0+U3RhcnRUYWIoJ2FkbWluc2V0dGluZ3MnKTsKaW5jbHVkZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvZnVuY3Rpb24uYWRtaW5fc2V0dGluZ3MucGhwJzsKZWNobyAkdGhpcy0+RW5kVGFiKCk7CmlmICgkdGhpcy0+U2hvd0RvbmF0aW9uc1RhYigpKSB7CiAgICBlY2hvICR0aGlzLT5TdGFydFRhYignZG9uYXRpb25zJyk7CiAgICBpbmNsdWRlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9mdW5jdGlvbi5kb25hdGlvbnMucGhwJzsKICAgIGVjaG8gJHRoaXMtPkVuZFRhYigpOwp9CmVjaG8gJHRoaXMtPkVuZFRhYkNvbnRlbnQoKTsK]]></data>
	</file>
	<file>
	  <filename>/action.mams_login.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2Ntc21zJykpIHsKICAgIGV4aXQ7Cn0KJHByb3ZpZGVycyA9IE1hc19BaF9Ecml2ZXJSZWdpc3RyeTo6bGlzdFByb3ZpZGVycygkdGhpcywgdHJ1ZSk7CiRsaW5rcyA9IGFycmF5KCk7CmZvcmVhY2ggKCRwcm92aWRlcnMgYXMgJHApIHsKICAgICRsaW5rc1tdID0gYXJyYXkoCiAgICAgICAgJ25hbWUnID0+ICRwWyduYW1lJ10sCiAgICAgICAgJ3VybCcgPT4gTWFzX0FoX0NvbmZpZzo6bW9kdWxlQWN0aW9uVXJsKCR0aGlzLCAnb2F1dGhfc3RhcnQnLCBhcnJheSgKICAgICAgICAgICAgJ3Byb3ZpZGVyX2lkJyA9PiAoaW50KSAkcFsnaWQnXSwKICAgICAgICAgICAgJ3JldHVybl90eXBlJyA9PiAnbWFtcycsCiAgICAgICAgKSksCiAgICApOwp9CiRzbWFydHkgPSBjbXNfdXRpbHM6OmdldF9zbWFydHkoKTsKJHNtYXJ0eS0+YXNzaWduKCdtb2QnLCAkdGhpcyk7CiRzbWFydHktPmFzc2lnbignbWFzX2FoX3Byb3ZpZGVycycsICRsaW5rcyk7CiRzbWFydHktPmFzc2lnbignbWFzX2FoX3dlYmF1dGhuX3VybCcsIE1hc19BaF9Db25maWc6Om1vZHVsZUFjdGlvblVybCgkdGhpcywgJ3dlYmF1dGhuJywgYXJyYXkoJ21vZGUnID0+ICdsb2dpbicsICdyZXR1cm5fdHlwZScgPT4gJ21hbXMnKSkpOwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ21hbXNfYWx0X2xvZ2luLnRwbCcpOwo=]]></data>
	</file>
	<file>
	  <filename>/action.oauth_authorize.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2Ntc21zJykpIHsKICAgIGV4aXQ7Cn0KJGNsaWVudElkID0gaXNzZXQoJHBhcmFtc1snY2xpZW50X2lkJ10pID8gKHN0cmluZykgJHBhcmFtc1snY2xpZW50X2lkJ10gOiAoaXNzZXQoJF9HRVRbJ2NsaWVudF9pZCddKSA/IChzdHJpbmcpICRfR0VUWydjbGllbnRfaWQnXSA6ICcnKTsKJHJlZGlyZWN0VXJpID0gaXNzZXQoJHBhcmFtc1sncmVkaXJlY3RfdXJpJ10pID8gKHN0cmluZykgJHBhcmFtc1sncmVkaXJlY3RfdXJpJ10gOiAoaXNzZXQoJF9HRVRbJ3JlZGlyZWN0X3VyaSddKSA/IChzdHJpbmcpICRfR0VUWydyZWRpcmVjdF91cmknXSA6ICcnKTsKJHNjb3BlID0gaXNzZXQoJHBhcmFtc1snc2NvcGUnXSkgPyAoc3RyaW5nKSAkcGFyYW1zWydzY29wZSddIDogKGlzc2V0KCRfR0VUWydzY29wZSddKSA/IChzdHJpbmcpICRfR0VUWydzY29wZSddIDogJ29wZW5pZCcpOwokc3RhdGUgPSBpc3NldCgkcGFyYW1zWydzdGF0ZSddKSA/IChzdHJpbmcpICRwYXJhbXNbJ3N0YXRlJ10gOiAoaXNzZXQoJF9HRVRbJ3N0YXRlJ10pID8gKHN0cmluZykgJF9HRVRbJ3N0YXRlJ10gOiAnJyk7CiRjbGllbnQgPSBNYXNfQWhfT2F1dGhTZXJ2ZXI6OmdldENsaWVudCgkdGhpcywgJGNsaWVudElkKTsKaWYgKCEkY2xpZW50KSB7CiAgICBoZWFkZXIoJ0hUVFAvMS4xIDQwMCBCYWQgUmVxdWVzdCcpOwogICAgZWNobyAnaW52YWxpZF9jbGllbnQnOwogICAgZXhpdDsKfQokdWlkID0gaXNzZXQoJF9TRVNTSU9OWydjbXNfdXNlcmlkJ10pID8gKGludCkgJF9TRVNTSU9OWydjbXNfdXNlcmlkJ10gOiAwOwppZiAoJHVpZCA8IDEpIHsKICAgICRjb25maWcgPSBjbXNfdXRpbHM6OmdldF9jb25maWcoKTsKICAgIHJlZGlyZWN0KCRjb25maWdbJ2FkbWluX3VybCddIC4gJy9sb2dpbi5waHAnKTsKfQokY29kZSA9IE1hc19BaF9PYXV0aFNlcnZlcjo6Y3JlYXRlQXV0aENvZGUoJHRoaXMsIGFycmF5KAogICAgJ2NsaWVudF9pZCcgPT4gJGNsaWVudElkLAogICAgJ3VzZXJfaWQnID0+ICR1aWQsCiAgICAnc2NvcGVzJyA9PiAkc2NvcGUsCiAgICAncmVkaXJlY3RfdXJpJyA9PiAkcmVkaXJlY3RVcmksCikpOwokc2VwID0gc3RycG9zKCRyZWRpcmVjdFVyaSwgJz8nKSA9PT0gZmFsc2UgPyAnPycgOiAnJic7CnJlZGlyZWN0KCRyZWRpcmVjdFVyaSAuICRzZXAgLiBodHRwX2J1aWxkX3F1ZXJ5KGFycmF5KCdjb2RlJyA9PiAkY29kZSwgJ3N0YXRlJyA9PiAkc3RhdGUpKSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/action.oauth_callback.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2Ntc21zJykpIHsKICAgIGV4aXQ7Cn0KJHByb3ZpZGVySWQgPSAoaW50KSAoJHBhcmFtc1sncHJvdmlkZXJfaWQnXSA/PyAwKTsKJHByb3ZpZGVyID0gTWFzX0FoX0RyaXZlclJlZ2lzdHJ5OjpnZXRQcm92aWRlcigkdGhpcywgJHByb3ZpZGVySWQpOwppZiAoISRwcm92aWRlcikgewogICAgZWNobyAnPHA+JyAuIGNtc19odG1sZW50aXRpZXMoJHRoaXMtPkxhbmcoJ2Vycm9yX2dlbmVyaWMnKSkgLiAnPC9wPic7CiAgICByZXR1cm47Cn0KJGRyaXZlciA9IE1hc19BaF9Ecml2ZXJSZWdpc3RyeTo6Z2V0KChzdHJpbmcpICRwcm92aWRlclsnZHJpdmVyJ10pOwppZiAoISRkcml2ZXIpIHsKICAgIGVjaG8gJzxwPicgLiBjbXNfaHRtbGVudGl0aWVzKCR0aGlzLT5MYW5nKCdlcnJvcl9nZW5lcmljJykpIC4gJzwvcD4nOwogICAgcmV0dXJuOwp9CiRvaWRjID0gKChzdHJpbmcpICRwcm92aWRlclsnZHJpdmVyJ10gPT09ICdvaWRjJyk7CiRyZXN1bHQgPSBNYXNfQWhfUm91dGVyOjpoYW5kbGVPQXV0aENhbGxiYWNrKCR0aGlzLCAkcHJvdmlkZXIsICRwYXJhbXMsIGFycmF5KCksICRvaWRjKTsKaWYgKCFlbXB0eSgkcmVzdWx0WydyZWRpcmVjdF9hZG1pbiddKSkgewogICAgTWFzX0FoX0Ntc0xvZ2luQnJpZGdlOjpyZWRpcmVjdEFmdGVyTG9naW4oKTsKICAgIHJldHVybjsKfQppZiAoIWVtcHR5KCRyZXN1bHRbJ3N1Y2Nlc3MnXSkgJiYgKCRyZXN1bHRbJ3R5cGUnXSA/PyAnJykgPT09ICdtYW1zJykgewogICAgJGNvbmZpZyA9IGNtc191dGlsczo6Z2V0X2NvbmZpZygpOwogICAgJHVybCA9IGlzc2V0KCRwYXJhbXNbJ3JlZGlyZWN0J10pID8gKHN0cmluZykgJHBhcmFtc1sncmVkaXJlY3QnXSA6ICRjb25maWdbJ3Jvb3RfdXJsJ107CiAgICByZWRpcmVjdCgkdXJsKTsKICAgIHJldHVybjsKfQplY2hvICc8cD4nIC4gY21zX2h0bWxlbnRpdGllcygkdGhpcy0+TGFuZygnZXJyb3JfZ2VuZXJpYycpKSAuICc8L3A+JzsK]]></data>
	</file>
	<file>
	  <filename>/action.oauth_start.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2Ntc21zJykpIHsKICAgIGV4aXQ7Cn0KJHByb3ZpZGVySWQgPSAoaW50KSAoJHBhcmFtc1sncHJvdmlkZXJfaWQnXSA/PyAwKTsKJHJldHVyblR5cGUgPSBpc3NldCgkcGFyYW1zWydyZXR1cm5fdHlwZSddKSA/IChzdHJpbmcpICRwYXJhbXNbJ3JldHVybl90eXBlJ10gOiAnbWFtcyc7CiRyZXN1bHQgPSBNYXNfQWhfUm91dGVyOjpzdGFydE9BdXRoKCR0aGlzLCAkcHJvdmlkZXJJZCwgJHJldHVyblR5cGUpOwppZiAoIWVtcHR5KCRyZXN1bHRbJ3JlZGlyZWN0J10pKSB7CiAgICByZWRpcmVjdCgkcmVzdWx0WydyZWRpcmVjdCddLCB0cnVlKTsKfQplY2hvICc8cD4nIC4gY21zX2h0bWxlbnRpdGllcygkdGhpcy0+TGFuZygnZXJyb3JfZ2VuZXJpYycpKSAuICc8L3A+JzsK]]></data>
	</file>
	<file>
	  <filename>/action.oauth_token.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2Ntc21zJykpIHsKICAgIGV4aXQ7Cn0KaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnKTsKaWYgKCFNYXNfQWhfUG9saWN5OjpyYXRlTGltaXRBbGxvdygkdGhpcywgJ29hdXRoX3Rva2VuXycgLiBjbXNfdXRpbHM6OmdldF9yZWFsX2lwKCkpKSB7CiAgICBodHRwX3Jlc3BvbnNlX2NvZGUoNDI5KTsKICAgIGVjaG8ganNvbl9lbmNvZGUoYXJyYXkoJ2Vycm9yJyA9PiAncmF0ZV9saW1pdGVkJyksIEpTT05fVU5FU0NBUEVEX1NMQVNIRVMgfCBKU09OX1VORVNDQVBFRF9VTklDT0RFKTsKICAgIGV4aXQ7Cn0KJGlucHV0ID0gJF9QT1NUOwppZiAoZW1wdHkoJGlucHV0KSkgewogICAgJHJhdyA9IGZpbGVfZ2V0X2NvbnRlbnRzKCdwaHA6Ly9pbnB1dCcpOwogICAgcGFyc2Vfc3RyKCRyYXcsICRpbnB1dCk7Cn0KJGdyYW50ID0gaXNzZXQoJGlucHV0WydncmFudF90eXBlJ10pID8gKHN0cmluZykgJGlucHV0WydncmFudF90eXBlJ10gOiAnJzsKJGNsaWVudElkID0gaXNzZXQoJGlucHV0WydjbGllbnRfaWQnXSkgPyAoc3RyaW5nKSAkaW5wdXRbJ2NsaWVudF9pZCddIDogJyc7CiRjbGllbnQgPSBNYXNfQWhfT2F1dGhTZXJ2ZXI6OmdldENsaWVudCgkdGhpcywgJGNsaWVudElkKTsKaWYgKCEkY2xpZW50IHx8ICFNYXNfQWhfT2F1dGhTZXJ2ZXI6OnZlcmlmeUNsaWVudFNlY3JldCgkY2xpZW50LCAoc3RyaW5nKSAoJGlucHV0WydjbGllbnRfc2VjcmV0J10gPz8gJycpKSkgewogICAgaHR0cF9yZXNwb25zZV9jb2RlKDQwMSk7CiAgICBlY2hvIGpzb25fZW5jb2RlKGFycmF5KCdlcnJvcicgPT4gJ2ludmFsaWRfY2xpZW50JyksIEpTT05fVU5FU0NBUEVEX1NMQVNIRVMgfCBKU09OX1VORVNDQVBFRF9VTklDT0RFKTsKICAgIGV4aXQ7Cn0KaWYgKCRncmFudCA9PT0gJ2F1dGhvcml6YXRpb25fY29kZScpIHsKICAgICR0b2tlbnMgPSBNYXNfQWhfT2F1dGhTZXJ2ZXI6OmV4Y2hhbmdlQ29kZSgKICAgICAgICAkdGhpcywKICAgICAgICAoc3RyaW5nKSAoJGlucHV0Wydjb2RlJ10gPz8gJycpLAogICAgICAgICRjbGllbnRJZCwKICAgICAgICAoc3RyaW5nKSAoJGlucHV0WydyZWRpcmVjdF91cmknXSA/PyAnJykKICAgICk7CiAgICBpZiAoISR0b2tlbnMpIHsKICAgICAgICBodHRwX3Jlc3BvbnNlX2NvZGUoNDAwKTsKICAgICAgICBlY2hvIGpzb25fZW5jb2RlKGFycmF5KCdlcnJvcicgPT4gJ2ludmFsaWRfZ3JhbnQnKSwgSlNPTl9VTkVTQ0FQRURfU0xBU0hFUyB8IEpTT05fVU5FU0NBUEVEX1VOSUNPREUpOwogICAgICAgIGV4aXQ7CiAgICB9CiAgICBlY2hvIGpzb25fZW5jb2RlKCR0b2tlbnMsIEpTT05fUFJFVFRZX1BSSU5UIHwgSlNPTl9VTkVTQ0FQRURfU0xBU0hFUyB8IEpTT05fVU5FU0NBUEVEX1VOSUNPREUpOwogICAgZXhpdDsKfQpodHRwX3Jlc3BvbnNlX2NvZGUoNDAwKTsKZWNobyBqc29uX2VuY29kZShhcnJheSgnZXJyb3InID0+ICd1bnN1cHBvcnRlZF9ncmFudF90eXBlJyksIEpTT05fVU5FU0NBUEVEX1NMQVNIRVMgfCBKU09OX1VORVNDQVBFRF9VTklDT0RFKTsK]]></data>
	</file>
	<file>
	  <filename>/action.oidc_discovery.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2Ntc21zJykpIHsKICAgIGV4aXQ7Cn0KaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnKTsKJGRvYyA9IE1hc19BaF9PaWRjRGlzY292ZXJ5Ojpkb2N1bWVudCgkdGhpcyk7CmVjaG8ganNvbl9lbmNvZGUoJGRvYywgSlNPTl9QUkVUVFlfUFJJTlQgfCBKU09OX1VORVNDQVBFRF9TTEFTSEVTIHwgSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/action.saml_acs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2Ntc21zJykpIHsKICAgIGV4aXQ7Cn0KJHByb3ZpZGVySWQgPSAoaW50KSAoJHBhcmFtc1sncHJvdmlkZXJfaWQnXSA/PyAwKTsKaWYgKCRwcm92aWRlcklkIDwgMSAmJiBzZXNzaW9uX3N0YXR1cygpID09PSBQSFBfU0VTU0lPTl9BQ1RJVkUgJiYgaXNzZXQoJF9TRVNTSU9OWydtYXNfYWhfc2FtbF9wcm92aWRlciddKSkgewogICAgJHByb3ZpZGVySWQgPSAoaW50KSAkX1NFU1NJT05bJ21hc19haF9zYW1sX3Byb3ZpZGVyJ107Cn0KJHByb3ZpZGVyID0gTWFzX0FoX0RyaXZlclJlZ2lzdHJ5OjpnZXRQcm92aWRlcigkdGhpcywgJHByb3ZpZGVySWQpOwppZiAoISRwcm92aWRlcikgewogICAgZWNobyAnPHA+JyAuIGNtc19odG1sZW50aXRpZXMoJHRoaXMtPkxhbmcoJ2Vycm9yX2dlbmVyaWMnKSkgLiAnPC9wPic7CiAgICByZXR1cm47Cn0KJHJlc3VsdCA9IE1hc19BaF9Sb3V0ZXI6OmhhbmRsZVNhbWxBY3MoJHRoaXMsICRwcm92aWRlciwgJF9QT1NULCBhcnJheSgpKTsKaWYgKCFlbXB0eSgkcmVzdWx0WydyZWRpcmVjdF9hZG1pbiddKSkgewogICAgTWFzX0FoX0Ntc0xvZ2luQnJpZGdlOjpyZWRpcmVjdEFmdGVyTG9naW4oKTsKICAgIHJldHVybjsKfQppZiAoIWVtcHR5KCRyZXN1bHRbJ3N1Y2Nlc3MnXSkpIHsKICAgICRjb25maWcgPSBjbXNfdXRpbHM6OmdldF9jb25maWcoKTsKICAgIHJlZGlyZWN0KCRjb25maWdbJ3Jvb3RfdXJsJ10pOwogICAgcmV0dXJuOwp9CmVjaG8gJzxwPicgLiBjbXNfaHRtbGVudGl0aWVzKCR0aGlzLT5MYW5nKCdlcnJvcl9nZW5lcmljJykpIC4gJzwvcD4nOwo=]]></data>
	</file>
	<file>
	  <filename>/action.saml_metadata.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2Ntc21zJykpIHsKICAgIGV4aXQ7Cn0KJHByb3ZpZGVySWQgPSAoaW50KSAoJHBhcmFtc1sncHJvdmlkZXJfaWQnXSA/PyAwKTsKJHByb3ZpZGVyID0gTWFzX0FoX0RyaXZlclJlZ2lzdHJ5OjpnZXRQcm92aWRlcigkdGhpcywgJHByb3ZpZGVySWQpOwppZiAoISRwcm92aWRlcikgewogICAgaGVhZGVyKCdIVFRQLzEuMSA0MDQgTm90IEZvdW5kJyk7CiAgICBleGl0Owp9CiRhdXRvbG9hZCA9IGRpcm5hbWUoX19GSUxFX18pIC4gJy92ZW5kb3IvYXV0b2xvYWQucGhwJzsKaWYgKCFpc19yZWFkYWJsZSgkYXV0b2xvYWQpKSB7CiAgICBoZWFkZXIoJ0hUVFAvMS4xIDUwMyBTZXJ2aWNlIFVuYXZhaWxhYmxlJyk7CiAgICBlY2hvICdTQU1MIGxpYnJhcnkgbm90IGluc3RhbGxlZC4gUnVuIGNvbXBvc2VyIGluc3RhbGwgaW4gbW9kdWxlcy9NQVNfQXV0aEh1Yi4nOwogICAgZXhpdDsKfQpyZXF1aXJlX29uY2UgJGF1dG9sb2FkOwokY2ZnID0gJHByb3ZpZGVyWydjb25maWcnXSA/PyBhcnJheSgpOwokcGtleSA9IGlzc2V0KCRwcm92aWRlclsncHJvdmlkZXJfa2V5J10pID8gJHByb3ZpZGVyWydwcm92aWRlcl9rZXknXSA6ICgncHJvdmlkZXJfJyAuICRwcm92aWRlclsnaWQnXSk7CiRzZXR0aW5ncyA9IE1hc19BaF9Sb3V0ZXI6OmJ1aWxkU2FtbFNldHRpbmdzKCR0aGlzLCAkcHJvdmlkZXIsICRjZmcsICRwa2V5KTsKdHJ5IHsKICAgICRtZXRhID0gbmV3IE9uZUxvZ2luXFNhbWwyXFNldHRpbmdzKCRzZXR0aW5ncywgdHJ1ZSk7CiAgICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogdGV4dC94bWw7IGNoYXJzZXQ9dXRmLTgnKTsKICAgIGVjaG8gJG1ldGEtPmdldFNQTWV0YWRhdGEoKTsKfSBjYXRjaCAoVGhyb3dhYmxlICRlKSB7CiAgICBoZWFkZXIoJ0hUVFAvMS4xIDUwMCBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InKTsKICAgIGVjaG8gJ01ldGFkYXRhIGVycm9yLic7Cn0K]]></data>
	</file>
	<file>
	  <filename>/action.save_settings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2Ntc21zJykpIHsKICAgIGV4aXQ7Cn0KaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKE1BU19BdXRoSHViOjpQRVJNX01BTkFHRSkpIHsKICAgIHJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKfQokdGhpcy0+U2V0UHJlZmVyZW5jZSgnbWFzX2FoX2VuYWJsZV9hZG1pbl9zc28nLCAhZW1wdHkoJHBhcmFtc1snZW5hYmxlX2FkbWluX3NzbyddKSA/ICcxJyA6ICcwJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtYXNfYWhfZW5hYmxlX21hbXNfc3NvJywgIWVtcHR5KCRwYXJhbXNbJ2VuYWJsZV9tYW1zX3NzbyddKSA/ICcxJyA6ICcwJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtYXNfYWhfYXV0b19saW5rX2VtYWlsJywgIWVtcHR5KCRwYXJhbXNbJ2F1dG9fbGlua19lbWFpbCddKSA/ICcxJyA6ICcwJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtYXNfYWhfc2Vzc2lvbl90dGwnLCBtYXgoMzAwLCAoaW50KSAoJHBhcmFtc1snc2Vzc2lvbl90dGwnXSA/PyAzNjAwKSkpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnbWFzX2FoX3JhdGVfcGVyX2hvdXInLCBtYXgoMSwgKGludCkgKCRwYXJhbXNbJ3JhdGVfcGVyX2hvdXInXSA/PyA2MCkpKTsKJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgYXJyYXkoJ2FjdGl2ZXRhYicgPT4gJ3NldHRpbmdzJywgJ21zZycgPT4gJ3ByZWZzdXBkYXRlZCcpKTsK]]></data>
	</file>
	<file>
	  <filename>/action.webauthn.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2Ntc21zJykpIHsKICAgIGV4aXQ7Cn0KaWYgKCgkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXSA/PyAnJykgPT09ICdQT1NUJyAmJiBzdHJwb3MoJF9TRVJWRVJbJ0NPTlRFTlRfVFlQRSddID8/ICcnLCAnYXBwbGljYXRpb24vanNvbicpICE9PSBmYWxzZSkgewogICAgaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnKTsKICAgICRyZXN1bHQgPSBNYXNfQWhfV2ViYXV0aG46OmhhbmRsZVJlcXVlc3QoJHRoaXMsICRwYXJhbXMpOwogICAgZWNobyBqc29uX2VuY29kZSgkcmVzdWx0LCBKU09OX1BSRVRUWV9QUklOVCB8IEpTT05fVU5FU0NBUEVEX1NMQVNIRVMgfCBKU09OX1VORVNDQVBFRF9VTklDT0RFKTsKICAgIHJldHVybjsKfQokcmV0dXJuVHlwZSA9IGlzc2V0KCRwYXJhbXNbJ3JldHVybl90eXBlJ10pID8gKHN0cmluZykgJHBhcmFtc1sncmV0dXJuX3R5cGUnXSA6ICdtYW1zJzsKJHNtYXJ0eSA9IGNtc191dGlsczo6Z2V0X3NtYXJ0eSgpOwokc21hcnR5LT5hc3NpZ24oJ21vZCcsICR0aGlzKTsKJHNtYXJ0eS0+YXNzaWduKCdtYXNfYWhfcmV0dXJuX3R5cGUnLCAkcmV0dXJuVHlwZSk7CiRzbWFydHktPmFzc2lnbignbWFzX2FoX3dlYmF1dGhuX3Bvc3QnLCBNYXNfQWhfQ29uZmlnOjptb2R1bGVBY3Rpb25VcmwoJHRoaXMsICd3ZWJhdXRobicsIGFycmF5KCdtb2RlJyA9PiAnbG9naW4nLCAncmV0dXJuX3R5cGUnID0+ICRyZXR1cm5UeXBlKSkpOwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ3dlYmF1dGhuX2xvZ2luLnRwbCcpOwo=]]></data>
	</file>
	<file>
	  <filename>/CHANGELOG.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBDaGFuZ2Vsb2cKCiMjIDEuMC41IC0gMTkvMDUvMjAyNgoKIyMjIENoYW5nZWQKCi0gKipIZWxwIGFuZCBBYm91dDoqKiBUYWJiZWQgZG9jdW1lbnRhdGlvbiBtYXRjaGluZyBMb2dXYXRjaCBzdHlsZSAoYHRlbXBsYXRlcy9oZWxwLnRwbGAsIGB0ZW1wbGF0ZXMvYWJvdXQudHBsYCwgYW5kIHBlci10YWIgaW5jbHVkZXMpLiBgR2V0SGVscCgpYCBhbmQgYEdldEFib3V0KClgIHJlbmRlciBTbWFydHkgdGVtcGxhdGVzIGluc3RlYWQgb2YgYSBzaW5nbGUgbGFuZyBzdHJpbmcuCi0gKipBZG1pbiBicmFuZGluZzoqKiBSZWZyZXNoZWQgYGltYWdlcy9iYW5uZXIucG5nYCAoNjAweDEyMCksIGBpbWFnZXMvaWNvbi0xOTIucG5nYCwgYGltYWdlcy9pY29uLTUxMi5wbmdgLCBhbmQgYGltYWdlcy9pY29uLmdpZmAgKDMyeDMyKSB3aXRoIGluZGlnbyBpZGVudGl0eSBzdHlsaW5nIGFuZCBhIHNoaWVsZC9rZXkgbW90aWYuIFJlZ2VuZXJhdGUgdmlhIGBUZXN0L2dlbmVyYXRlX2JyYW5kX2Fzc2V0cy5weWAuCi0gKipDRE4gY2FjaGU6KiogTW9kdWxlIGltYWdlIFVSTHMgbm93IGFwcGVuZCBgP3Y9ZmlsZW10aW1lYCB2aWEgYE1hc19BZG1pbl9VaTo6dmVyc2lvbmVkQXNzZXRVcmwoKWAgYW5kIE9uZUVsZXZlbiBhZG1pbiB0aGVtZSBtb2R1bGUgaGVhZGVyIGljb24sIHNvIENsb3VkZmxhcmUgbm8gbG9uZ2VyIHNlcnZlcyBzdGFsZSBEaXNxdXMgY29waWVzIGNhY2hlZCB1bmRlciBgL21vZHVsZXMvTUFTX0F1dGhIdWIvaW1hZ2VzL2AuIEhhcmQtcmVmcmVzaCBhZG1pbiBvbmNlIGFmdGVyIHVwZ3JhZGUgaWYgbmVlZGVkLgoKIyMjIEZpeGVkCgotIGB3ZWJhdXRobl9sb2dpbi50cGxgOiBpbnZhbGlkIGNsb3NpbmcgdGFnIGNvcnJlY3RlZCB0byBhIHByb3BlciBgZGl2YCBlbmQgdGFnLgoKIyMgMS4wLjQgLSAxOS8wNS8yMDI2CgojIyMgRml4ZWQKCi0gQ29ycmVjdCBgQ3JlYXRlTGluaygpYCAvIGBtb2R1bGVBY3Rpb25VcmwoKWAgYXJndW1lbnQgb3JkZXIgKGZpeGVzIG1vZGZvcm0gZm9yZWFjaCB3YXJuaW5ncywgT0lEQyBkaXNjb3Zlcnkgc2hvd2luZyAiQXJyYXkiLCBhbmQgYnJva2VuIGZyb250ZW5kIGFjdGlvbiBVUkxzKS4KLSBBZG1pbiBleHBvcnQgYW5kIHJldm9rZSBsaW5rcyBidWlsdCBpbiBQSFAgaW5zdGVhZCBvZiBpbmNvcnJlY3QgU21hcnR5IGBDcmVhdGVMaW5rYCBjYWxscy4KLSBEb25hdGlvbnMgdGFiOiBhZGRlZCBgZG9uYXRpb25zdGV4dGAgYW5kIGBzcG9uc29yc2AgbGFuZ3VhZ2Ugc3RyaW5ncy4KCiMjIyBDaGFuZ2VkCgotIFJlcGxhY2VkIERpc3F1cy1jb3BpZWQgYGltYWdlcy9iYW5uZXIucG5nYCBhbmQgYGltYWdlcy9pY29uLmdpZmAgd2l0aCBNQVMgQXV0aEh1YiBicmFuZGluZyAoYmx1ZSBpZGVudGl0eSB0aGVtZSkuCgojIyAxLjAuMyAtIDE5LzA1LzIwMjYKCiMjIyBGaXhlZAoKLSBBZG1pbiBkZWZhdWx0YWRtaW46IGBDcmVhdGVGb3JtU3RhcnQoKWAgYXJndW1lbnQgb3JkZXIgKGAkcGFyYW1zYCB3YXMgcGFzc2VkIGFzIGAkZXh0cmFgLCBjYXVzaW5nIG1vZGZvcm0gd2FybmluZ3MpLgotIGBNYXNfQWhfQ29uZmlnOjptb2R1bGVBY3Rpb25VcmwoKWAgdHJlYXRzIGBHZXREZWZhdWx0Q29udGVudCgpYCBhcyBwYWdlIElEIChpbnQpLCBub3QgYSBjb250ZW50IG9iamVjdCAoZmF0YWwgb24gT0F1dGggY2xpZW50cyB0YWIpLgotIFNldCBgJGFjdGlvbmlkID0gJGlkYCBmb3IgaW5jbHVkZWQgYWRtaW4gdGFiIHNjcmlwdHM7IE9BdXRoIGNsaWVudHMgZm9ybSB1c2VzIENNU01TIGZvcm0gaGVscGVycy4KCiMjIDEuMC4yIC0gMTkvMDUvMjAyNgoKIyMjIEZpeGVkCgotIGBEb0V2ZW50KClgIHNpZ25hdHVyZSB1c2VzIGAmJHBhcmFtc2AgdG8gbWF0Y2ggYENNU01vZHVsZTo6RG9FdmVudCgpYCAoTW9kdWxlIE1hbmFnZXIgZmF0YWwgZXJyb3IpLgotIEluc3RhbGwgc2NoZW1hIHVzZXMgYGlkIEkgS0VZIE5PVE5VTExgIChDTVNNUyBBRE9EQiBjb252ZW50aW9uKS4KLSBNQU1TIGNvbnN1bWVyIGNsYXNzIGxvYWRzIG9ubHkgZnJvbSBgR2V0TUFNU0F1dGhDb25zdW1lcigpYCBzbyBtb2R1bGUgbGlzdCBkb2VzIG5vdCByZXF1aXJlIE1BTVMgaW50ZXJmYWNlIGF0IGJvb3RzdHJhcC4KCiMjIDEuMC4xIC0gMTkvMDUvMjAyNgoKIyMjIEZpeGVkCgotIFJlbmFtZWQgcHVibGljIHN0YXRpYyBgYXVkaXQoKWAgdG8gYGxvZ0F1ZGl0KClgIHNvIHRoZSBtb2R1bGUgY2xhc3MgZG9lcyBub3QgY29uZmxpY3Qgd2l0aCBmaW5hbCBgQ01TTW9kdWxlOjphdWRpdCgpYCAoZmF0YWwgZXJyb3IgaW4gTW9kdWxlIE1hbmFnZXIpLgoKIyMgMS4wLjAgLSAxOS8wNS8yMDI2CgojIyMgQWRkZWQKCi0gTUFTX0F1dGhIdWIgQ01TTVMgbW9kdWxlOiBPQXV0aDIvT0lEQyBjbGllbnQsIE9BdXRoMi9PSURDIGF1dGhvcml6YXRpb24gc2VydmVyLCBTQU1MIDIuMCBTUCwgV2ViQXV0aG4gcGFzc2tleXMuCi0gQ01TTVMgYWRtaW4gU1NPIGFuZCBNQU1TIGBHZXRNQU1TQXV0aENvbnN1bWVyKClgIGludGVncmF0aW9uIHdpdGhvdXQgbW9kaWZ5aW5nIHRoaXJkLXBhcnR5IE1BTVMgbW9kdWxlcy4KLSBIeWJyaWQgc2VjcmV0cyB2aWEgc2l0ZSBgY29uZmlnLnBocGAgYG1hc19hdXRoaHViYCBibG9jayBhbmQgZW5jcnlwdGVkIG1vZHVsZSBwcmVmZXJlbmNlcy4KLSBBdWRpdCBsb2csIHNlc3Npb24gYW5kIHRva2VuIG1hbmFnZW1lbnQsIHVzZXIgaWRlbnRpdHkgbGlua3MgKENNUyArIE1BTVMpLgotIE1BTVNSZWdpc3RyYXRpb24gaG9vayBsaXN0ZW5lcnMgKGJlZm9yZU5ld1VzZXIsIG9uTmV3VXNlciwgb25Vc2VyUmVnaXN0ZXJlZCkgZnJvbSBBdXRoSHViIG9ubHkuCgojIyMgT3BlcmF0b3Igbm90ZXMKCi0gU2V0IE1BTVMgUHJlZmVyZW5jZXMsIEF1dGhlbnRpY2F0aW9uIE1vZHVsZSwgdG8gYE1BU19BdXRoSHViYCBmb3IgYWx0IGxvZ2luIG9uIE1BTVMgZm9ybXMuCi0gQWRkIGBtYXNfYXV0aGh1YmAgZW5jcnlwdGlvbiBhbmQgcHJvdmlkZXIgc2VjcmV0cyB0byBgY29uZmlnLnBocGAgYmVmb3JlIHByb2R1Y3Rpb24gdXNlLgotIFJ1biBgY29tcG9zZXIgaW5zdGFsbGAgaW4gdGhlIG1vZHVsZSBkaXJlY3RvcnkgZm9yIFNBTUwgYW5kIEpXVCBsaWJyYXJpZXMuCg==]]></data>
	</file>
	<file>
	  <filename>/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAibWFzdGVyMzM5NS9tYXMtYXV0aGh1YiIsCiAgICAiZGVzY3JpcHRpb24iOiAiTUFTIEF1dGhIdWIgaWRlbnRpdHkgbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUiLAogICAgInJlcXVpcmUiOiB7CiAgICAgICAgInBocCI6ICI+PTcuNCIsCiAgICAgICAgImxlYWd1ZS9vYXV0aDItY2xpZW50IjogIl4yLjciLAogICAgICAgICJmaXJlYmFzZS9waHAtand0IjogIl41LjZ8XjYuNCIsCiAgICAgICAgIm9uZWxvZ2luL3BocC1zYW1sIjogIl40LjIiLAogICAgICAgICJ3ZWItYXV0aC93ZWJhdXRobi1saWIiOiAiXjMuMyIsCiAgICAgICAgIndlYi1hdXRoL2Nvc2UtbGliIjogIl4zLjMiCiAgICB9LAogICAgImNvbmZpZyI6IHsKICAgICAgICAic29ydC1wYWNrYWdlcyI6IHRydWUsCiAgICAgICAgImF1ZGl0IjogewogICAgICAgICAgICAiYmxvY2staW5zZWN1cmUiOiBmYWxzZQogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/composer.lock</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIl9yZWFkbWUiOiBbCiAgICAgICAgIlRoaXMgZmlsZSBsb2NrcyB0aGUgZGVwZW5kZW5jaWVzIG9mIHlvdXIgcHJvamVjdCB0byBhIGtub3duIHN0YXRlIiwKICAgICAgICAiUmVhZCBtb3JlIGFib3V0IGl0IGF0IGh0dHBzOi8vZ2V0Y29tcG9zZXIub3JnL2RvYy8wMS1iYXNpYy11c2FnZS5tZCNpbnN0YWxsaW5nLWRlcGVuZGVuY2llcyIsCiAgICAgICAgIlRoaXMgZmlsZSBpcyBAZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkiCiAgICBdLAogICAgImNvbnRlbnQtaGFzaCI6ICJmMjYzNDhkYjFlNjI2NTAwNDQ2MWZjMTk1NzQ1MGNkYyIsCiAgICAicGFja2FnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJiZWJlcmxlaS9hc3NlcnQiLAogICAgICAgICAgICAidmVyc2lvbiI6ICJ2My4zLjMiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2JlYmVybGVpL2Fzc2VydC5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJiNWZkOGVhY2Q4OTE1YTFiNjI3YjhiZmMwMjc4MDNmMTkzOTczNGRkIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYmViZXJsZWkvYXNzZXJ0L3ppcGJhbGwvYjVmZDhlYWNkODkxNWExYjYyN2I4YmZjMDI3ODAzZjE5Mzk3MzRkZCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImI1ZmQ4ZWFjZDg5MTVhMWI2MjdiOGJmYzAyNzgwM2YxOTM5NzM0ZGQiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgImV4dC1jdHlwZSI6ICIqIiwKICAgICAgICAgICAgICAgICJleHQtanNvbiI6ICIqIiwKICAgICAgICAgICAgICAgICJleHQtbWJzdHJpbmciOiAiKiIsCiAgICAgICAgICAgICAgICAiZXh0LXNpbXBsZXhtbCI6ICIqIiwKICAgICAgICAgICAgICAgICJwaHAiOiAiXjcuMSB8fCBeOC4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAiZnJpZW5kc29mcGhwL3BocC1jcy1maXhlciI6ICIqIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4iOiAiKiIsCiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIj49Ni4wLjAiLAogICAgICAgICAgICAgICAgInlvYXN0L3BocHVuaXQtcG9seWZpbGxzIjogIl4wLjEuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN1Z2dlc3QiOiB7CiAgICAgICAgICAgICAgICAiZXh0LWludGwiOiAiTmVlZGVkIHRvIGFsbG93IEFzc2VydGlvbjo6Y291bnQoKSwgQXNzZXJ0aW9uOjppc0NvdW50YWJsZSgpLCBBc3NlcnRpb246Om1pbkNvdW50KCksIGFuZCBBc3NlcnRpb246Om1heENvdW50KCkgdG8gb3BlcmF0ZSBvbiBSZXNvdXJjZUJ1bmRsZXMiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICAgICAgICAgImxpYi9Bc3NlcnQvZnVuY3Rpb25zLnBocCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkFzc2VydFxcIjogImxpYi9Bc3NlcnQiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiQlNELTItQ2xhdXNlIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJCZW5qYW1pbiBFYmVybGVpIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAia29udGFrdEBiZWJlcmxlaS5kZSIsCiAgICAgICAgICAgICAgICAgICAgInJvbGUiOiAiTGVhZCBEZXZlbG9wZXIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlJpY2hhcmQgUXVhZGxpbmciLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJycXVhZGxpbmdAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAicm9sZSI6ICJDb2xsYWJvcmF0b3IiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGluIGFzc2VydGlvbiBsaWJyYXJ5IGZvciBpbnB1dCB2YWxpZGF0aW9uIGluIGJ1c2luZXNzIG1vZGVscy4iLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiYXNzZXJ0IiwKICAgICAgICAgICAgICAgICJhc3NlcnRpb24iLAogICAgICAgICAgICAgICAgInZhbGlkYXRpb24iCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vYmViZXJsZWkvYXNzZXJ0L2lzc3VlcyIsCiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9iZWJlcmxlaS9hc3NlcnQvdHJlZS92My4zLjMiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjQtMDctMTVUMTM6MTg6MzUrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogImJyaWNrL21hdGgiLAogICAgICAgICAgICAidmVyc2lvbiI6ICIwLjkuMyIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJjYTU3ZDE4ZjAyOGY4NGY3NzdiMjE2OGNkMTkxMWIwZGVlMjM0M2FlIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYnJpY2svbWF0aC96aXBiYWxsL2NhNTdkMThmMDI4Zjg0Zjc3N2IyMTY4Y2QxOTExYjBkZWUyMzQzYWUiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJjYTU3ZDE4ZjAyOGY4NGY3NzdiMjE2OGNkMTkxMWIwZGVlMjM0M2FlIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJleHQtanNvbiI6ICIqIiwKICAgICAgICAgICAgICAgICJwaHAiOiAiXjcuMSB8fCBeOC4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAicGhwLWNvdmVyYWxscy9waHAtY292ZXJhbGxzIjogIl4yLjIiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNy41LjE1IHx8IF44LjUgfHwgXjkuMCIsCiAgICAgICAgICAgICAgICAidmltZW8vcHNhbG0iOiAiNC45LjIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkJyaWNrXFxNYXRoXFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBcmJpdHJhcnktcHJlY2lzaW9uIGFyaXRobWV0aWMgbGlicmFyeSIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJBcmJpdHJhcnktcHJlY2lzaW9uIiwKICAgICAgICAgICAgICAgICJCaWdJbnRlZ2VyIiwKICAgICAgICAgICAgICAgICJCaWdSYXRpb25hbCIsCiAgICAgICAgICAgICAgICAiYXJpdGhtZXRpYyIsCiAgICAgICAgICAgICAgICAiYmlnZGVjaW1hbCIsCiAgICAgICAgICAgICAgICAiYmlnbnVtIiwKICAgICAgICAgICAgICAgICJicmljayIsCiAgICAgICAgICAgICAgICAibWF0aCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiaXNzdWVzIjogImh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL2lzc3VlcyIsCiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3RyZWUvMC45LjMiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmdW5kaW5nIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL0Jlbk1vcmVsIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly90aWRlbGlmdC5jb20vZnVuZGluZy9naXRodWIvcGFja2FnaXN0L2JyaWNrL21hdGgiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInRpZGVsaWZ0IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAidGltZSI6ICIyMDIxLTA4LTE1VDIwOjUwOjE4KzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJmZ3Jvc3NlL3BocGFzbjEiLAogICAgICAgICAgICAidmVyc2lvbiI6ICJ2Mi41LjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2Zncm9zc2UvUEhQQVNOMS5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI0MjA2MGVkNDUzNDQ3ODlmYjlmMjFmOWYxODY0ZmM0N2I5ZTM1MDdiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvZmdyb3NzZS9QSFBBU04xL3ppcGJhbGwvNDIwNjBlZDQ1MzQ0Nzg5ZmI5ZjIxZjlmMTg2NGZjNDdiOWUzNTA3YiIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjQyMDYwZWQ0NTM0NDc4OWZiOWYyMWY5ZjE4NjRmYzQ3YjllMzUwN2IiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICJeNy4xIHx8IF44LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJwaHAtY292ZXJhbGxzL3BocC1jb3ZlcmFsbHMiOiAifjIuMCIsCiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl43LjAgfHwgXjguMCB8fCBeOS4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAic3VnZ2VzdCI6IHsKICAgICAgICAgICAgICAgICJleHQtYmNtYXRoIjogIkJDbWF0aCBpcyB0aGUgZmFsbGJhY2sgZXh0ZW5zaW9uIGZvciBiaWcgaW50ZWdlciBjYWxjdWxhdGlvbnMiLAogICAgICAgICAgICAgICAgImV4dC1jdXJsIjogIkZvciBsb2FkaW5nIE9JRCBpbmZvcm1hdGlvbiBmcm9tIHRoZSB3ZWIgaWYgdGhleSBoYXZlIG5vdCBiZWUgZGVmaW5lZCBzdGF0aWNhbGx5IiwKICAgICAgICAgICAgICAgICJleHQtZ21wIjogIkdNUCBpcyB0aGUgcHJlZmVycmVkIGV4dGVuc2lvbiBmb3IgYmlnIGludGVnZXIgY2FsY3VsYXRpb25zIiwKICAgICAgICAgICAgICAgICJwaHBzZWNsaWIvYmNtYXRoX2NvbXBhdCI6ICJCQ21hdGggcG9seWZpbGwgZm9yIHNlcnZlcnMgd2hlcmUgbmVpdGhlciBHTVAgbm9yIEJDbWF0aCBpcyBhdmFpbGFibGUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjIuMC54LWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJGR1xcIjogImxpYi8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJGcmllZHJpY2ggR3Jvw59lIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAiZnJpZWRyaWNoLmdyb3NzZUBnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vRkdyb3NzZSIsCiAgICAgICAgICAgICAgICAgICAgInJvbGUiOiAiQXV0aG9yIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJBbGwgY29udHJpYnV0b3JzIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL0ZHcm9zc2UvUEhQQVNOMS9jb250cmlidXRvcnMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIFBIUCBGcmFtZXdvcmsgdGhhdCBhbGxvd3MgeW91IHRvIGVuY29kZSBhbmQgZGVjb2RlIGFyYml0cmFyeSBBU04uMSBzdHJ1Y3R1cmVzIHVzaW5nIHRoZSBJVFUtVCBYLjY5MCBFbmNvZGluZyBSdWxlcy4iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL0ZHcm9zc2UvUEhQQVNOMSIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJERVIiLAogICAgICAgICAgICAgICAgImFzbi4xIiwKICAgICAgICAgICAgICAgICJhc24xIiwKICAgICAgICAgICAgICAgICJiZXIiLAogICAgICAgICAgICAgICAgImJpbmFyeSIsCiAgICAgICAgICAgICAgICAiZGVjb2RpbmciLAogICAgICAgICAgICAgICAgImVuY29kaW5nIiwKICAgICAgICAgICAgICAgICJ4LjUwOSIsCiAgICAgICAgICAgICAgICAieC42OTAiLAogICAgICAgICAgICAgICAgIng1MDkiLAogICAgICAgICAgICAgICAgIng2OTAiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vZmdyb3NzZS9QSFBBU04xL2lzc3VlcyIsCiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9mZ3Jvc3NlL1BIUEFTTjEvdHJlZS92Mi41LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhYmFuZG9uZWQiOiB0cnVlLAogICAgICAgICAgICAidGltZSI6ICIyMDIyLTEyLTE5VDExOjA4OjI2KzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJmaXJlYmFzZS9waHAtand0IiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjYuMTAuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlYXBpcy9waHAtand0LmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImE0OWRiNmYwYTUwMzNhZWY1MTQzMjk1MzQyZjFjOTU1MjFiMDc1ZmYiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9nb29nbGVhcGlzL3BocC1qd3QvemlwYmFsbC9hNDlkYjZmMGE1MDMzYWVmNTE0MzI5NTM0MmYxYzk1NTIxYjA3NWZmIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYTQ5ZGI2ZjBhNTAzM2FlZjUxNDMyOTUzNDJmMWM5NTUyMWIwNzVmZiIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIl43LjR8fF44LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJndXp6bGVodHRwL2d1enpsZSI6ICJeNi41fHxeNy40IiwKICAgICAgICAgICAgICAgICJwaHBzcGVjL3Byb3BoZWN5LXBocHVuaXQiOiAiXjIuMCIsCiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl45LjUiLAogICAgICAgICAgICAgICAgInBzci9jYWNoZSI6ICJeMS4wfHxeMi4wIiwKICAgICAgICAgICAgICAgICJwc3IvaHR0cC1jbGllbnQiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAicHNyL2h0dHAtZmFjdG9yeSI6ICJeMS4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAic3VnZ2VzdCI6IHsKICAgICAgICAgICAgICAgICJleHQtc29kaXVtIjogIlN1cHBvcnQgRWREU0EgKEVkMjU1MTkpIHNpZ25hdHVyZXMiLAogICAgICAgICAgICAgICAgInBhcmFnb25pZS9zb2RpdW1fY29tcGF0IjogIlN1cHBvcnQgRWREU0EgKEVkMjU1MTkpIHNpZ25hdHVyZXMgd2hlbiBsaWJzb2RpdW0gaXMgbm90IHByZXNlbnQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkZpcmViYXNlXFxKV1RcXCI6ICJzcmMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiQlNELTMtQ2xhdXNlIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJOZXVtYW4gVm9uZyIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogIm5ldW1hbitwZWFyQHR3aWxpby5jb20iLAogICAgICAgICAgICAgICAgICAgICJyb2xlIjogIkRldmVsb3BlciIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQW5hbnQgTmFyYXlhbmFuIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAiYW5hbnRAcGhwLm5ldCIsCiAgICAgICAgICAgICAgICAgICAgInJvbGUiOiAiRGV2ZWxvcGVyIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSBzaW1wbGUgbGlicmFyeSB0byBlbmNvZGUgYW5kIGRlY29kZSBKU09OIFdlYiBUb2tlbnMgKEpXVCkgaW4gUEhQLiBTaG91bGQgY29uZm9ybSB0byB0aGUgY3VycmVudCBzcGVjLiIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dCIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJqd3QiLAogICAgICAgICAgICAgICAgInBocCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiaXNzdWVzIjogImh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGVhcGlzL3BocC1qd3QvaXNzdWVzIiwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZWFwaXMvcGhwLWp3dC90cmVlL3Y2LjEwLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjMtMTItMDFUMTY6MjY6MzkrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogImd1enpsZWh0dHAvZ3V6emxlIiwKICAgICAgICAgICAgInZlcnNpb24iOiAiNy4xMC4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImI1MWFjNzA3Y2ZhNDIwYjdiZmQ0ZTRkNWU1MTBiYTgwMDhlODIyYjQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9ndXp6bGUvZ3V6emxlL3ppcGJhbGwvYjUxYWM3MDdjZmE0MjBiN2JmZDRlNGQ1ZTUxMGJhODAwOGU4MjJiNCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImI1MWFjNzA3Y2ZhNDIwYjdiZmQ0ZTRkNWU1MTBiYTgwMDhlODIyYjQiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgImV4dC1qc29uIjogIioiLAogICAgICAgICAgICAgICAgImd1enpsZWh0dHAvcHJvbWlzZXMiOiAiXjIuMyIsCiAgICAgICAgICAgICAgICAiZ3V6emxlaHR0cC9wc3I3IjogIl4yLjgiLAogICAgICAgICAgICAgICAgInBocCI6ICJeNy4yLjUgfHwgXjguMCIsCiAgICAgICAgICAgICAgICAicHNyL2h0dHAtY2xpZW50IjogIl4xLjAiLAogICAgICAgICAgICAgICAgInN5bWZvbnkvZGVwcmVjYXRpb24tY29udHJhY3RzIjogIl4yLjIgfHwgXjMuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInByb3ZpZGUiOiB7CiAgICAgICAgICAgICAgICAicHNyL2h0dHAtY2xpZW50LWltcGxlbWVudGF0aW9uIjogIjEuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgImJhbWFybmkvY29tcG9zZXItYmluLXBsdWdpbiI6ICJeMS44LjIiLAogICAgICAgICAgICAgICAgImV4dC1jdXJsIjogIioiLAogICAgICAgICAgICAgICAgImd1enpsZS9jbGllbnQtaW50ZWdyYXRpb24tdGVzdHMiOiAiMy4wLjIiLAogICAgICAgICAgICAgICAgInBocC1odHRwL21lc3NhZ2UtZmFjdG9yeSI6ICJeMS4xIiwKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjguNS4zOSB8fCBeOS42LjIwIiwKICAgICAgICAgICAgICAgICJwc3IvbG9nIjogIl4xLjEgfHwgXjIuMCB8fCBeMy4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAic3VnZ2VzdCI6IHsKICAgICAgICAgICAgICAgICJleHQtY3VybCI6ICJSZXF1aXJlZCBmb3IgQ1VSTCBoYW5kbGVyIHN1cHBvcnQiLAogICAgICAgICAgICAgICAgImV4dC1pbnRsIjogIlJlcXVpcmVkIGZvciBJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZSAoSUROKSBzdXBwb3J0IiwKICAgICAgICAgICAgICAgICJwc3IvbG9nIjogIlJlcXVpcmVkIGZvciB1c2luZyB0aGUgTG9nIG1pZGRsZXdhcmUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYmFtYXJuaS1iaW4iOiB7CiAgICAgICAgICAgICAgICAgICAgImJpbi1saW5rcyI6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgImZvcndhcmQtY29tbWFuZCI6IGZhbHNlCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgICAgICAgICAic3JjL2Z1bmN0aW9uc19pbmNsdWRlLnBocCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkd1enpsZUh0dHBcXCI6ICJzcmMvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiR3JhaGFtIENhbXBiZWxsIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAiaGVsbG9AZ2pjYW1wYmVsbC5jby51ayIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9HcmFoYW1DYW1wYmVsbCIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiTWljaGFlbCBEb3dsaW5nIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAibXRkb3dsaW5nQGdtYWlsLmNvbSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9tdGRvd2xpbmciCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkplcmVteSBMaW5kYmxvbSIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogImplcmVtZWFtaWFAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL2plcmVtZWFtaWEiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkdlb3JnZSBNcG9ub3MiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJnbXBvbm9zQGdtYWlsLmNvbSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9nbXBvbm9zIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJUb2JpYXMgTnlob2xtIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAidG9iaWFzLm55aG9sbUBnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vTnlob2xtIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJNw6FyayBTw6FnaS1LYXrDoXIiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJtYXJrLnNhZ2lrYXphckBnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vc2FnaWthemFybWFyayIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiVG9iaWFzIFNjaHVsdHplIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAid2VibWFzdGVyQHR1Ym8td29ybGQuZGUiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vVG9iaW9uIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiR3V6emxlIGlzIGEgUEhQIEhUVFAgY2xpZW50IGxpYnJhcnkiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiY2xpZW50IiwKICAgICAgICAgICAgICAgICJjdXJsIiwKICAgICAgICAgICAgICAgICJmcmFtZXdvcmsiLAogICAgICAgICAgICAgICAgImh0dHAiLAogICAgICAgICAgICAgICAgImh0dHAgY2xpZW50IiwKICAgICAgICAgICAgICAgICJwc3ItMTgiLAogICAgICAgICAgICAgICAgInBzci03IiwKICAgICAgICAgICAgICAgICJyZXN0IiwKICAgICAgICAgICAgICAgICJ3ZWIgc2VydmljZSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiaXNzdWVzIjogImh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2lzc3VlcyIsCiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3RyZWUvNy4xMC4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9HcmFoYW1DYW1wYmVsbCIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9OeWhvbG0iLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3RpZGVsaWZ0LmNvbS9mdW5kaW5nL2dpdGh1Yi9wYWNrYWdpc3QvZ3V6emxlaHR0cC9ndXp6bGUiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInRpZGVsaWZ0IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAidGltZSI6ICIyMDI1LTA4LTIzVDIyOjM2OjAxKzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJndXp6bGVodHRwL3Byb21pc2VzIiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMi4zLjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wcm9taXNlcy5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI0ODE1NTdiMTMwZWYzNzkwY2Y4MmI3MTM2NjdiNDMwMzBkYzljOTU3IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvZ3V6emxlL3Byb21pc2VzL3ppcGJhbGwvNDgxNTU3YjEzMGVmMzc5MGNmODJiNzEzNjY3YjQzMDMwZGM5Yzk1NyIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjQ4MTU1N2IxMzBlZjM3OTBjZjgyYjcxMzY2N2I0MzAzMGRjOWM5NTciLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICJeNy4yLjUgfHwgXjguMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgImJhbWFybmkvY29tcG9zZXItYmluLXBsdWdpbiI6ICJeMS44LjIiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeOC41LjQ0IHx8IF45LjYuMjUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYmFtYXJuaS1iaW4iOiB7CiAgICAgICAgICAgICAgICAgICAgImJpbi1saW5rcyI6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgImZvcndhcmQtY29tbWFuZCI6IGZhbHNlCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiR3V6emxlSHR0cFxcUHJvbWlzZVxcIjogInNyYy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJHcmFoYW0gQ2FtcGJlbGwiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJoZWxsb0BnamNhbXBiZWxsLmNvLnVrIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL0dyYWhhbUNhbXBiZWxsIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJNaWNoYWVsIERvd2xpbmciLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJtdGRvd2xpbmdAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL210ZG93bGluZyIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiVG9iaWFzIE55aG9sbSIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogInRvYmlhcy5ueWhvbG1AZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL055aG9sbSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiVG9iaWFzIFNjaHVsdHplIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAid2VibWFzdGVyQHR1Ym8td29ybGQuZGUiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vVG9iaW9uIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiR3V6emxlIHByb21pc2VzIGxpYnJhcnkiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAicHJvbWlzZSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiaXNzdWVzIjogImh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHJvbWlzZXMvaXNzdWVzIiwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wcm9taXNlcy90cmVlLzIuMy4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9HcmFoYW1DYW1wYmVsbCIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9OeWhvbG0iLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3RpZGVsaWZ0LmNvbS9mdW5kaW5nL2dpdGh1Yi9wYWNrYWdpc3QvZ3V6emxlaHR0cC9wcm9taXNlcyIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAidGlkZWxpZnQiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjUtMDgtMjJUMTQ6MzQ6MDgrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogImd1enpsZWh0dHAvcHNyNyIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjIuOS4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHNyNy5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI3ZDBlZDQyZjI4ZTQyZDYxMzUyYTdhNzlkZTY4MmU1ZTY3ZmVjODg0IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvZ3V6emxlL3BzcjcvemlwYmFsbC83ZDBlZDQyZjI4ZTQyZDYxMzUyYTdhNzlkZTY4MmU1ZTY3ZmVjODg0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiN2QwZWQ0MmYyOGU0MmQ2MTM1MmE3YTc5ZGU2ODJlNWU2N2ZlYzg4NCIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIl43LjIuNSB8fCBeOC4wIiwKICAgICAgICAgICAgICAgICJwc3IvaHR0cC1mYWN0b3J5IjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBzci9odHRwLW1lc3NhZ2UiOiAiXjEuMSB8fCBeMi4wIiwKICAgICAgICAgICAgICAgICJyYWxvdXBoaWUvZ2V0YWxsaGVhZGVycyI6ICJeMy4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicHJvdmlkZSI6IHsKICAgICAgICAgICAgICAgICJwc3IvaHR0cC1mYWN0b3J5LWltcGxlbWVudGF0aW9uIjogIjEuMCIsCiAgICAgICAgICAgICAgICAicHNyL2h0dHAtbWVzc2FnZS1pbXBsZW1lbnRhdGlvbiI6ICIxLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJiYW1hcm5pL2NvbXBvc2VyLWJpbi1wbHVnaW4iOiAiXjEuOC4yIiwKICAgICAgICAgICAgICAgICJodHRwLWludGVyb3AvaHR0cC1mYWN0b3J5LXRlc3RzIjogIjAuOS4wIiwKICAgICAgICAgICAgICAgICJqc2h0dHAvbWltZS1kYiI6ICIxLjU0LjAuMSIsCiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl44LjUuNDQgfHwgXjkuNi4yNSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN1Z2dlc3QiOiB7CiAgICAgICAgICAgICAgICAibGFtaW5hcy9sYW1pbmFzLWh0dHBoYW5kbGVycnVubmVyIjogIkVtaXQgUFNSLTcgcmVzcG9uc2VzIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJhbWFybmktYmluIjogewogICAgICAgICAgICAgICAgICAgICJiaW4tbGlua3MiOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICJmb3J3YXJkLWNvbW1hbmQiOiBmYWxzZQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkd1enpsZUh0dHBcXFBzcjdcXCI6ICJzcmMvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiR3JhaGFtIENhbXBiZWxsIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAiaGVsbG9AZ2pjYW1wYmVsbC5jby51ayIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9HcmFoYW1DYW1wYmVsbCIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiTWljaGFlbCBEb3dsaW5nIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAibXRkb3dsaW5nQGdtYWlsLmNvbSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9tdGRvd2xpbmciCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkdlb3JnZSBNcG9ub3MiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJnbXBvbm9zQGdtYWlsLmNvbSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9nbXBvbm9zIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJUb2JpYXMgTnlob2xtIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAidG9iaWFzLm55aG9sbUBnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vTnlob2xtIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJNw6FyayBTw6FnaS1LYXrDoXIiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJtYXJrLnNhZ2lrYXphckBnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vc2FnaWthemFybWFyayIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiVG9iaWFzIFNjaHVsdHplIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAid2VibWFzdGVyQHR1Ym8td29ybGQuZGUiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vVG9iaW9uIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJNw6FyayBTw6FnaS1LYXrDoXIiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJtYXJrLnNhZ2lrYXphckBnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3NhZ2lrYXphcm1hcmsuaHUiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJQU1ItNyBtZXNzYWdlIGltcGxlbWVudGF0aW9uIHRoYXQgYWxzbyBwcm92aWRlcyBjb21tb24gdXRpbGl0eSBtZXRob2RzIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImh0dHAiLAogICAgICAgICAgICAgICAgIm1lc3NhZ2UiLAogICAgICAgICAgICAgICAgInBzci03IiwKICAgICAgICAgICAgICAgICJyZXF1ZXN0IiwKICAgICAgICAgICAgICAgICJyZXNwb25zZSIsCiAgICAgICAgICAgICAgICAic3RyZWFtIiwKICAgICAgICAgICAgICAgICJ1cmkiLAogICAgICAgICAgICAgICAgInVybCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiaXNzdWVzIjogImh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHNyNy9pc3N1ZXMiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3BzcjcvdHJlZS8yLjkuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZ1bmRpbmciOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vR3JhaGFtQ2FtcGJlbGwiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vTnlob2xtIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly90aWRlbGlmdC5jb20vZnVuZGluZy9naXRodWIvcGFja2FnaXN0L2d1enpsZWh0dHAvcHNyNyIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAidGlkZWxpZnQiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjYtMDMtMTBUMTY6NDE6MDIrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogImxlYWd1ZS9vYXV0aDItY2xpZW50IiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMi45LjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50LmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjI2ZThjNWRhNGYzZDc4Y2VkZTcwMjFlMDliMTMzMGEwZmMwOTNkNWUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy90aGVwaHBsZWFndWUvb2F1dGgyLWNsaWVudC96aXBiYWxsLzI2ZThjNWRhNGYzZDc4Y2VkZTcwMjFlMDliMTMzMGEwZmMwOTNkNWUiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIyNmU4YzVkYTRmM2Q3OGNlZGU3MDIxZTA5YjEzMzBhMGZjMDkzZDVlIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJleHQtanNvbiI6ICIqIiwKICAgICAgICAgICAgICAgICJndXp6bGVodHRwL2d1enpsZSI6ICJeNi41LjggfHwgXjcuNC41IiwKICAgICAgICAgICAgICAgICJwaHAiOiAiXjcuMSB8fCA+PTguMC4wIDw4LjYuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgIm1vY2tlcnkvbW9ja2VyeSI6ICJeMS4zLjUiLAogICAgICAgICAgICAgICAgInBocC1wYXJhbGxlbC1saW50L3BocC1wYXJhbGxlbC1saW50IjogIl4xLjQiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNyB8fCBeOCB8fCBeOSB8fCBeMTAgfHwgXjExIiwKICAgICAgICAgICAgICAgICJzcXVpemxhYnMvcGhwX2NvZGVzbmlmZmVyIjogIl4zLjExIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJMZWFndWVcXE9BdXRoMlxcQ2xpZW50XFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkFsZXggQmlsYmllIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAiaGVsbG9AYWxleGJpbGJpZS5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwOi8vd3d3LmFsZXhiaWxiaWUuY29tIiwKICAgICAgICAgICAgICAgICAgICAicm9sZSI6ICJEZXZlbG9wZXIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIldvb2R5IEdpbGsiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vc2hhZG93aGFuZCIsCiAgICAgICAgICAgICAgICAgICAgInJvbGUiOiAiQ29udHJpYnV0b3IiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPQXV0aCAyLjAgQ2xpZW50IExpYnJhcnkiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiQXV0aGVudGljYXRpb24iLAogICAgICAgICAgICAgICAgIlNTTyIsCiAgICAgICAgICAgICAgICAiYXV0aG9yaXphdGlvbiIsCiAgICAgICAgICAgICAgICAiaWRlbnRpdHkiLAogICAgICAgICAgICAgICAgImlkcCIsCiAgICAgICAgICAgICAgICAib2F1dGgiLAogICAgICAgICAgICAgICAgIm9hdXRoMiIsCiAgICAgICAgICAgICAgICAic2luZ2xlIHNpZ24gb24iCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vdGhlcGhwbGVhZ3VlL29hdXRoMi1jbGllbnQvaXNzdWVzIiwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50L3RyZWUvMi45LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjUtMTEtMjVUMjI6MTc6MTcrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogImxlYWd1ZS91cmkiLAogICAgICAgICAgICAidmVyc2lvbiI6ICI2LjcuMiIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vdGhlcGhwbGVhZ3VlL3VyaS5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJkM2I1MDgxMmRkNTFmM2ZiZjE3NjM0NGNjMjk4MWRiMDNkMTBmZTA2IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvdGhlcGhwbGVhZ3VlL3VyaS96aXBiYWxsL2QzYjUwODEyZGQ1MWYzZmJmMTc2MzQ0Y2MyOTgxZGIwM2QxMGZlMDYiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJkM2I1MDgxMmRkNTFmM2ZiZjE3NjM0NGNjMjk4MWRiMDNkMTBmZTA2IiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJleHQtanNvbiI6ICIqIiwKICAgICAgICAgICAgICAgICJsZWFndWUvdXJpLWludGVyZmFjZXMiOiAiXjIuMyIsCiAgICAgICAgICAgICAgICAicGhwIjogIl43LjQgfHwgXjguMCIsCiAgICAgICAgICAgICAgICAicHNyL2h0dHAtbWVzc2FnZSI6ICJeMS4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiY29uZmxpY3QiOiB7CiAgICAgICAgICAgICAgICAibGVhZ3VlL3VyaS1zY2hlbWVzIjogIl4xLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJmcmllbmRzb2ZwaHAvcGhwLWNzLWZpeGVyIjogIl52My4zLjIiLAogICAgICAgICAgICAgICAgIm55aG9sbS9wc3I3IjogIl4xLjUiLAogICAgICAgICAgICAgICAgInBocC1odHRwL3BzcjctaW50ZWdyYXRpb24tdGVzdHMiOiAiXjEuMSIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9waHBzdGFuIjogIl4xLjIuMCIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9waHBzdGFuLWRlcHJlY2F0aW9uLXJ1bGVzIjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1waHB1bml0IjogIl4xLjAuMCIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9waHBzdGFuLXN0cmljdC1ydWxlcyI6ICJeMS4xLjAiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeOS41LjEwIiwKICAgICAgICAgICAgICAgICJwc3IvaHR0cC1mYWN0b3J5IjogIl4xLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzdWdnZXN0IjogewogICAgICAgICAgICAgICAgImV4dC1maWxlaW5mbyI6ICJOZWVkZWQgdG8gY3JlYXRlIERhdGEgVVJJIGZyb20gYSBmaWxlcGF0aCIsCiAgICAgICAgICAgICAgICAiZXh0LWludGwiOiAiTmVlZGVkIHRvIGltcHJvdmUgaG9zdCB2YWxpZGF0aW9uIiwKICAgICAgICAgICAgICAgICJsZWFndWUvdXJpLWNvbXBvbmVudHMiOiAiTmVlZGVkIHRvIGVhc2lseSBtYW5pcHVsYXRlIFVSSSBvYmplY3RzIiwKICAgICAgICAgICAgICAgICJwc3IvaHR0cC1mYWN0b3J5IjogIk5lZWRlZCB0byB1c2UgdGhlIFVSSSBmYWN0b3J5IgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICI2LngtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkxlYWd1ZVxcVXJpXFwiOiAic3JjIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJueWFtc3Byb2RAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9ueWFtc3Byb2QuY29tIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVVJJIG1hbmlwdWxhdGlvbiBsaWJyYXJ5IiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vdXJpLnRoZXBocGxlYWd1ZS5jb20iLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiZGF0YS11cmkiLAogICAgICAgICAgICAgICAgImZpbGUtdXJpIiwKICAgICAgICAgICAgICAgICJmdHAiLAogICAgICAgICAgICAgICAgImhvc3RuYW1lIiwKICAgICAgICAgICAgICAgICJodHRwIiwKICAgICAgICAgICAgICAgICJodHRwcyIsCiAgICAgICAgICAgICAgICAibWlkZGxld2FyZSIsCiAgICAgICAgICAgICAgICAicGFyc2Vfc3RyIiwKICAgICAgICAgICAgICAgICJwYXJzZV91cmwiLAogICAgICAgICAgICAgICAgInBzci03IiwKICAgICAgICAgICAgICAgICJxdWVyeS1zdHJpbmciLAogICAgICAgICAgICAgICAgInF1ZXJ5c3RyaW5nIiwKICAgICAgICAgICAgICAgICJyZmMzOTg2IiwKICAgICAgICAgICAgICAgICJyZmMzOTg3IiwKICAgICAgICAgICAgICAgICJyZmM2NTcwIiwKICAgICAgICAgICAgICAgICJ1cmkiLAogICAgICAgICAgICAgICAgInVyaS10ZW1wbGF0ZSIsCiAgICAgICAgICAgICAgICAidXJsIiwKICAgICAgICAgICAgICAgICJ3cyIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiZG9jcyI6ICJodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tIiwKICAgICAgICAgICAgICAgICJmb3J1bSI6ICJodHRwczovL3RoZXBocGxlYWd1ZS5zbGFjay5jb20iLAogICAgICAgICAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vdGhlcGhwbGVhZ3VlL3VyaS9pc3N1ZXMiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vdGhlcGhwbGVhZ3VlL3VyaS90cmVlLzYuNy4yIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9ueWFtc3Byb2QiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyMi0wOS0xM1QxOTo1MDo0MiswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAibGVhZ3VlL3VyaS1pbnRlcmZhY2VzIiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMi4zLjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS91cmktaW50ZXJmYWNlcy5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIwMGU3ZTI5NDNmNzZkOGNiNTBjN2RmZGMyZjZkZWUzNTZlMTVlMzgzIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvdGhlcGhwbGVhZ3VlL3VyaS1pbnRlcmZhY2VzL3ppcGJhbGwvMDBlN2UyOTQzZjc2ZDhjYjUwYzdkZmRjMmY2ZGVlMzU2ZTE1ZTM4MyIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjAwZTdlMjk0M2Y3NmQ4Y2I1MGM3ZGZkYzJmNmRlZTM1NmUxNWUzODMiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgImV4dC1qc29uIjogIioiLAogICAgICAgICAgICAgICAgInBocCI6ICJeNy4yIHx8IF44LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJmcmllbmRzb2ZwaHAvcGhwLWNzLWZpeGVyIjogIl4yLjE5IiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4iOiAiXjAuMTIuOTAiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1waHB1bml0IjogIl4wLjEyLjE5IiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tc3RyaWN0LXJ1bGVzIjogIl4wLjEyLjkiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeOC41LjE1IHx8IF45LjUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzdWdnZXN0IjogewogICAgICAgICAgICAgICAgImV4dC1pbnRsIjogInRvIHVzZSB0aGUgSUROQSBmZWF0dXJlIiwKICAgICAgICAgICAgICAgICJzeW1mb255L2ludGwiOiAidG8gdXNlIHRoZSBJRE5BIGZlYXR1cmUgdmlhIFN5bWZvbnkgUG9seWZpbGwiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjIueC1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiTGVhZ3VlXFxVcmlcXCI6ICJzcmMvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJueWFtc3Byb2RAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9ueWFtc3Byb2QuY29tIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ29tbW9uIGludGVyZmFjZSBmb3IgVVJJIHJlcHJlc2VudGF0aW9uIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHA6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS91cmktaW50ZXJmYWNlcyIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJyZmMzOTg2IiwKICAgICAgICAgICAgICAgICJyZmMzOTg3IiwKICAgICAgICAgICAgICAgICJ1cmkiLAogICAgICAgICAgICAgICAgInVybCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiaXNzdWVzIjogImh0dHBzOi8vZ2l0aHViLmNvbS90aGVwaHBsZWFndWUvdXJpLWludGVyZmFjZXMvaXNzdWVzIiwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS91cmktaW50ZXJmYWNlcy90cmVlLzIuMy4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9ueWFtc3Byb2QiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyMS0wNi0yOFQwNDoyNzoyMSswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAib25lbG9naW4vcGhwLXNhbWwiLAogICAgICAgICAgICAidmVyc2lvbiI6ICI0LjMuMiIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIyNmIzYTQ3MzQ5NDE1ZTViN2FhMzAwYmE0YWI3ZmMzMTZjNjVmMTllIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvU0FNTC1Ub29sa2l0cy9waHAtc2FtbC96aXBiYWxsLzI2YjNhNDczNDk0MTVlNWI3YWEzMDBiYTRhYjdmYzMxNmM2NWYxOWUiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIyNmIzYTQ3MzQ5NDE1ZTViN2FhMzAwYmE0YWI3ZmMzMTZjNjVmMTllIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj03LjMiLAogICAgICAgICAgICAgICAgInJvYnJpY2hhcmRzL3htbHNlY2xpYnMiOiAiXjMuMS41IgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAicGRlcGVuZC9wZGVwZW5kIjogIl4yLjguMCIsCiAgICAgICAgICAgICAgICAicGhwLWNvdmVyYWxscy9waHAtY292ZXJhbGxzIjogIl4yLjAiLAogICAgICAgICAgICAgICAgInBocGxvYy9waHBsb2MiOiAiXjQuMCB8fCBeNS4wIHx8IF42LjAgfHwgXjcuMCIsCiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl45LjUiLAogICAgICAgICAgICAgICAgInNlYmFzdGlhbi9waHBjcGQiOiAiXjQuMCB8fCBeNS4wIHx8IF42LjAgIiwKICAgICAgICAgICAgICAgICJzcXVpemxhYnMvcGhwX2NvZGVzbmlmZmVyIjogIl4zLjUuOCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN1Z2dlc3QiOiB7CiAgICAgICAgICAgICAgICAiZXh0LWN1cmwiOiAiSW5zdGFsbCBjdXJsIGxpYiB0byBiZSBhYmxlIHRvIHVzZSB0aGUgSWRQTWV0YWRhdGFQYXJzZXIgZm9yIHBhcnNpbmcgcmVtb3RlIFhNTHMiLAogICAgICAgICAgICAgICAgImV4dC1kb20iOiAiSW5zdGFsbCB4bWwgbGliIiwKICAgICAgICAgICAgICAgICJleHQtb3BlbnNzbCI6ICJJbnN0YWxsIG9wZW5zc2wgbGliIGluIG9yZGVyIHRvIGhhbmRsZSB3aXRoIHg1MDkgY2VydHMgKHJlcXVpcmUgdG8gc3VwcG9ydCBzaWduIGFuZCBlbmNyeXB0aW9uKSIsCiAgICAgICAgICAgICAgICAiZXh0LXpsaWIiOiAiSW5zdGFsbCB6bGliIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJPbmVMb2dpblxcIjogInNyYy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUEhQIFNBTUwgVG9vbGtpdCIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbCIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJGZWRlcmF0aW9uIiwKICAgICAgICAgICAgICAgICJTQU1MMiIsCiAgICAgICAgICAgICAgICAiU1NPIiwKICAgICAgICAgICAgICAgICJpZGVudGl0eSIsCiAgICAgICAgICAgICAgICAic2FtbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiZW1haWwiOiAic2l4dG8ubWFydGluLmdhcmNpYUBnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vb25lbG9naW4vU0FNTC1Ub29sa2l0cy9pc3N1ZXMiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vb25lbG9naW4vU0FNTC1Ub29sa2l0cy8iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmdW5kaW5nIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyNi0wNS0wN1QyMjozODowNCswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAicHNyL2h0dHAtY2xpZW50IiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMS4wLjMiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvaHR0cC1jbGllbnQuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYmI1OTA2ZWRjMWMzMjRjOWEwNWFhMDg3M2Q0MDExNzk0MWU1ZmE5MCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3BocC1maWcvaHR0cC1jbGllbnQvemlwYmFsbC9iYjU5MDZlZGMxYzMyNGM5YTA1YWEwODczZDQwMTE3OTQxZTVmYTkwIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYmI1OTA2ZWRjMWMzMjRjOWEwNWFhMDg3M2Q0MDExNzk0MWU1ZmE5MCIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIl43LjAgfHwgXjguMCIsCiAgICAgICAgICAgICAgICAicHNyL2h0dHAtbWVzc2FnZSI6ICJeMS4wIHx8IF4yLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuMC54LWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJQc3JcXEh0dHBcXENsaWVudFxcIjogInNyYy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJQSFAtRklHIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly93d3cucGhwLWZpZy5vcmcvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ29tbW9uIGludGVyZmFjZSBmb3IgSFRUUCBjbGllbnRzIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9waHAtZmlnL2h0dHAtY2xpZW50IiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImh0dHAiLAogICAgICAgICAgICAgICAgImh0dHAtY2xpZW50IiwKICAgICAgICAgICAgICAgICJwc3IiLAogICAgICAgICAgICAgICAgInBzci0xOCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9waHAtZmlnL2h0dHAtY2xpZW50IgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDIzLTA5LTIzVDE0OjE3OjUwKzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJwc3IvaHR0cC1mYWN0b3J5IiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMS4xLjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvaHR0cC1mYWN0b3J5LmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjJiNDc2NWZkZGZlM2I1MDhhYzYyZjgyOWU4NTJiMTUwMWQzZjZlOGEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9waHAtZmlnL2h0dHAtZmFjdG9yeS96aXBiYWxsLzJiNDc2NWZkZGZlM2I1MDhhYzYyZjgyOWU4NTJiMTUwMWQzZjZlOGEiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIyYjQ3NjVmZGRmZTNiNTA4YWM2MmY4MjllODUyYjE1MDFkM2Y2ZThhIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj03LjEiLAogICAgICAgICAgICAgICAgInBzci9odHRwLW1lc3NhZ2UiOiAiXjEuMCB8fCBeMi4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjAueC1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiUHNyXFxIdHRwXFxNZXNzYWdlXFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlBIUC1GSUciLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3d3dy5waHAtZmlnLm9yZy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJQU1ItMTc6IENvbW1vbiBpbnRlcmZhY2VzIGZvciBQU1ItNyBIVFRQIG1lc3NhZ2UgZmFjdG9yaWVzIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImZhY3RvcnkiLAogICAgICAgICAgICAgICAgImh0dHAiLAogICAgICAgICAgICAgICAgIm1lc3NhZ2UiLAogICAgICAgICAgICAgICAgInBzciIsCiAgICAgICAgICAgICAgICAicHNyLTE3IiwKICAgICAgICAgICAgICAgICJwc3ItNyIsCiAgICAgICAgICAgICAgICAicmVxdWVzdCIsCiAgICAgICAgICAgICAgICAicmVzcG9uc2UiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9odHRwLWZhY3RvcnkiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjQtMDQtMTVUMTI6MDY6MTQrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInBzci9odHRwLW1lc3NhZ2UiLAogICAgICAgICAgICAidmVyc2lvbiI6ICIxLjEiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvaHR0cC1tZXNzYWdlLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImNiNmNlNDg0NWNlMzRhOGFkOWU2ODExN2MxMGVlOTBhMjk5MTllYmEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9waHAtZmlnL2h0dHAtbWVzc2FnZS96aXBiYWxsL2NiNmNlNDg0NWNlMzRhOGFkOWU2ODExN2MxMGVlOTBhMjk5MTllYmEiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJjYjZjZTQ4NDVjZTM0YThhZDllNjgxMTdjMTBlZTkwYTI5OTE5ZWJhIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiXjcuMiB8fCBeOC4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjEueC1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiUHNyXFxIdHRwXFxNZXNzYWdlXFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlBIUC1GSUciLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwOi8vd3d3LnBocC1maWcub3JnLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkNvbW1vbiBpbnRlcmZhY2UgZm9yIEhUVFAgbWVzc2FnZXMiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvaHR0cC1tZXNzYWdlIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImh0dHAiLAogICAgICAgICAgICAgICAgImh0dHAtbWVzc2FnZSIsCiAgICAgICAgICAgICAgICAicHNyIiwKICAgICAgICAgICAgICAgICJwc3ItNyIsCiAgICAgICAgICAgICAgICAicmVxdWVzdCIsCiAgICAgICAgICAgICAgICAicmVzcG9uc2UiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9odHRwLW1lc3NhZ2UvdHJlZS8xLjEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjMtMDQtMDRUMDk6NTA6NTIrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInBzci9sb2ciLAogICAgICAgICAgICAidmVyc2lvbiI6ICIxLjEuNCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9sb2cuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiZDQ5Njk1YjkwOWMzYjc2MjhiNjI4OWRiNTQ3OWExYzIwNDYwMWYxMSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3BocC1maWcvbG9nL3ppcGJhbGwvZDQ5Njk1YjkwOWMzYjc2MjhiNjI4OWRiNTQ3OWExYzIwNDYwMWYxMSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImQ0OTY5NWI5MDljM2I3NjI4YjYyODlkYjU0NzlhMWMyMDQ2MDFmMTEiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICI+PTUuMy4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjEueC1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiUHNyXFxMb2dcXCI6ICJQc3IvTG9nLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlBIUC1GSUciLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3d3dy5waHAtZmlnLm9yZy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDb21tb24gaW50ZXJmYWNlIGZvciBsb2dnaW5nIGxpYnJhcmllcyIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9sb2ciLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAibG9nIiwKICAgICAgICAgICAgICAgICJwc3IiLAogICAgICAgICAgICAgICAgInBzci0zIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvbG9nL3RyZWUvMS4xLjQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjEtMDUtMDNUMTE6MjA6MjcrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInJhbG91cGhpZS9nZXRhbGxoZWFkZXJzIiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMy4wLjMiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JhbG91cGhpZS9nZXRhbGxoZWFkZXJzLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjEyMGI2MDVkZmViOTk2ODA4YzMxYjY0NzcyOTBhNzE0ZDM1NmU4MjIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9yYWxvdXBoaWUvZ2V0YWxsaGVhZGVycy96aXBiYWxsLzEyMGI2MDVkZmViOTk2ODA4YzMxYjY0NzcyOTBhNzE0ZDM1NmU4MjIiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIxMjBiNjA1ZGZlYjk5NjgwOGMzMWI2NDc3MjkwYTcxNGQzNTZlODIyIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj01LjYiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJwaHAtY292ZXJhbGxzL3BocC1jb3ZlcmFsbHMiOiAiXjIuMSIsCiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl41IHx8IF42LjUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICAgICAgICAgInNyYy9nZXRhbGxoZWFkZXJzLnBocCIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlJhbHBoIEtoYXR0YXIiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJyYWxwaC5raGF0dGFyQGdtYWlsLmNvbSIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgcG9seWZpbGwgZm9yIGdldGFsbGhlYWRlcnMuIiwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiaXNzdWVzIjogImh0dHBzOi8vZ2l0aHViLmNvbS9yYWxvdXBoaWUvZ2V0YWxsaGVhZGVycy9pc3N1ZXMiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vcmFsb3VwaGllL2dldGFsbGhlYWRlcnMvdHJlZS9kZXZlbG9wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDE5LTAzLTA4VDA4OjU1OjM3KzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJyYW1zZXkvY29sbGVjdGlvbiIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMy4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9yYW1zZXkvY29sbGVjdGlvbi5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJhZDc0NzVkMWM5ZTcwYjE5MGVjZmZjNThmMmQ5ODk0MTZhZjMzOWI0IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvcmFtc2V5L2NvbGxlY3Rpb24vemlwYmFsbC9hZDc0NzVkMWM5ZTcwYjE5MGVjZmZjNThmMmQ5ODk0MTZhZjMzOWI0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYWQ3NDc1ZDFjOWU3MGIxOTBlY2ZmYzU4ZjJkOTg5NDE2YWYzMzliNCIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIl43LjQgfHwgXjguMCIsCiAgICAgICAgICAgICAgICAic3ltZm9ueS9wb2x5ZmlsbC1waHA4MSI6ICJeMS4yMyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgImNhcHRhaW5ob29rL3BsdWdpbi1jb21wb3NlciI6ICJeNS4zIiwKICAgICAgICAgICAgICAgICJlcmdlYm5pcy9jb21wb3Nlci1ub3JtYWxpemUiOiAiXjIuMjguMyIsCiAgICAgICAgICAgICAgICAiZmFrZXJwaHAvZmFrZXIiOiAiXjEuMjEiLAogICAgICAgICAgICAgICAgImhhbWNyZXN0L2hhbWNyZXN0LXBocCI6ICJeMi4wIiwKICAgICAgICAgICAgICAgICJqYW5ncmVnb3IvcGhwc3Rhbi1wcm9waGVjeSI6ICJeMS4wIiwKICAgICAgICAgICAgICAgICJtb2NrZXJ5L21vY2tlcnkiOiAiXjEuNSIsCiAgICAgICAgICAgICAgICAicGhwLXBhcmFsbGVsLWxpbnQvcGhwLWNvbnNvbGUtaGlnaGxpZ2h0ZXIiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAicGhwLXBhcmFsbGVsLWxpbnQvcGhwLXBhcmFsbGVsLWxpbnQiOiAiXjEuMyIsCiAgICAgICAgICAgICAgICAicGhwY3NzdGFuZGFyZHMvcGhwY3N1dGlscyI6ICJeMS4wLjAtcmMxIiwKICAgICAgICAgICAgICAgICJwaHBzcGVjL3Byb3BoZWN5LXBocHVuaXQiOiAiXjIuMCIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9leHRlbnNpb24taW5zdGFsbGVyIjogIl4xLjIiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3RhbiI6ICJeMS45IiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tbW9ja2VyeSI6ICJeMS4xIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tcGhwdW5pdCI6ICJeMS4zIiwKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjkuNSIsCiAgICAgICAgICAgICAgICAicHNhbG0vcGx1Z2luLW1vY2tlcnkiOiAiXjEuMSIsCiAgICAgICAgICAgICAgICAicHNhbG0vcGx1Z2luLXBocHVuaXQiOiAiXjAuMTguNCIsCiAgICAgICAgICAgICAgICAicmFtc2V5L2NvZGluZy1zdGFuZGFyZCI6ICJeMi4wLjMiLAogICAgICAgICAgICAgICAgInJhbXNleS9jb252ZW50aW9uYWwtY29tbWl0cyI6ICJeMS4zIiwKICAgICAgICAgICAgICAgICJ2aW1lby9wc2FsbSI6ICJeNS40IgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImNhcHRhaW5ob29rIjogewogICAgICAgICAgICAgICAgICAgICJmb3JjZS1pbnN0YWxsIjogdHJ1ZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJyYW1zZXkvY29udmVudGlvbmFsLWNvbW1pdHMiOiB7CiAgICAgICAgICAgICAgICAgICAgImNvbmZpZ0ZpbGUiOiAiY29udmVudGlvbmFsLWNvbW1pdHMuanNvbiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJSYW1zZXlcXENvbGxlY3Rpb25cXCI6ICJzcmMvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQmVuIFJhbXNleSIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogImJlbkBiZW5yYW1zZXkuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9iZW5yYW1zZXkuY29tIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSBQSFAgbGlicmFyeSBmb3IgcmVwcmVzZW50aW5nIGFuZCBtYW5pcHVsYXRpbmcgY29sbGVjdGlvbnMuIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICJjb2xsZWN0aW9uIiwKICAgICAgICAgICAgICAgICJoYXNoIiwKICAgICAgICAgICAgICAgICJtYXAiLAogICAgICAgICAgICAgICAgInF1ZXVlIiwKICAgICAgICAgICAgICAgICJzZXQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vcmFtc2V5L2NvbGxlY3Rpb24vaXNzdWVzIiwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JhbXNleS9jb2xsZWN0aW9uL3RyZWUvMS4zLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmdW5kaW5nIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JhbXNleSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlkZWxpZnQuY29tL2Z1bmRpbmcvZ2l0aHViL3BhY2thZ2lzdC9yYW1zZXkvY29sbGVjdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAidGlkZWxpZnQiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjItMTItMjdUMTk6MTI6MjQrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInJhbXNleS91dWlkIiwKICAgICAgICAgICAgInZlcnNpb24iOiAiNC4yLjMiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JhbXNleS91dWlkLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImZjOWJiN2ZiNTM4ODY5MWZkNzM3M2NkNDRkY2I0ZDYzYmJjZjI0ZGYiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9yYW1zZXkvdXVpZC96aXBiYWxsL2ZjOWJiN2ZiNTM4ODY5MWZkNzM3M2NkNDRkY2I0ZDYzYmJjZjI0ZGYiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJmYzliYjdmYjUzODg2OTFmZDczNzNjZDQ0ZGNiNGQ2M2JiY2YyNGRmIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJicmljay9tYXRoIjogIl4wLjggfHwgXjAuOSIsCiAgICAgICAgICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgICAgICAgICAicGhwIjogIl43LjIgfHwgXjguMCIsCiAgICAgICAgICAgICAgICAicmFtc2V5L2NvbGxlY3Rpb24iOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAic3ltZm9ueS9wb2x5ZmlsbC1jdHlwZSI6ICJeMS44IiwKICAgICAgICAgICAgICAgICJzeW1mb255L3BvbHlmaWxsLXBocDgwIjogIl4xLjE0IgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVwbGFjZSI6IHsKICAgICAgICAgICAgICAgICJyaHVtc2FhL3V1aWQiOiAic2VsZi52ZXJzaW9uIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAiY2FwdGFpbmhvb2svY2FwdGFpbmhvb2siOiAiXjUuMTAiLAogICAgICAgICAgICAgICAgImNhcHRhaW5ob29rL3BsdWdpbi1jb21wb3NlciI6ICJeNS4zIiwKICAgICAgICAgICAgICAgICJkZWFsZXJkaXJlY3QvcGhwY29kZXNuaWZmZXItY29tcG9zZXItaW5zdGFsbGVyIjogIl4wLjcuMCIsCiAgICAgICAgICAgICAgICAiZG9jdHJpbmUvYW5ub3RhdGlvbnMiOiAiXjEuOCIsCiAgICAgICAgICAgICAgICAiZXJnZWJuaXMvY29tcG9zZXItbm9ybWFsaXplIjogIl4yLjE1IiwKICAgICAgICAgICAgICAgICJtb2NrZXJ5L21vY2tlcnkiOiAiXjEuMyIsCiAgICAgICAgICAgICAgICAibW9vbnRvYXN0L21hdGgiOiAiXjEuMSIsCiAgICAgICAgICAgICAgICAicGFyYWdvbmllL3JhbmRvbS1saWIiOiAiXjIiLAogICAgICAgICAgICAgICAgInBocC1tb2NrL3BocC1tb2NrIjogIl4yLjIiLAogICAgICAgICAgICAgICAgInBocC1tb2NrL3BocC1tb2NrLW1vY2tlcnkiOiAiXjEuMyIsCiAgICAgICAgICAgICAgICAicGhwLXBhcmFsbGVsLWxpbnQvcGhwLXBhcmFsbGVsLWxpbnQiOiAiXjEuMSIsCiAgICAgICAgICAgICAgICAicGhwYmVuY2gvcGhwYmVuY2giOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9leHRlbnNpb24taW5zdGFsbGVyIjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3RhbiI6ICJeMC4xMiIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9waHBzdGFuLW1vY2tlcnkiOiAiXjAuMTIiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1waHB1bml0IjogIl4wLjEyIiwKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjguNSB8fCBeOSIsCiAgICAgICAgICAgICAgICAic2xldm9tYXQvY29kaW5nLXN0YW5kYXJkIjogIl43LjAiLAogICAgICAgICAgICAgICAgInNxdWl6bGFicy9waHBfY29kZXNuaWZmZXIiOiAiXjMuNSIsCiAgICAgICAgICAgICAgICAidmltZW8vcHNhbG0iOiAiXjQuOSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN1Z2dlc3QiOiB7CiAgICAgICAgICAgICAgICAiZXh0LWJjbWF0aCI6ICJFbmFibGVzIGZhc3RlciBtYXRoIHdpdGggYXJiaXRyYXJ5LXByZWNpc2lvbiBpbnRlZ2VycyB1c2luZyBCQ01hdGguIiwKICAgICAgICAgICAgICAgICJleHQtY3R5cGUiOiAiRW5hYmxlcyBmYXN0ZXIgcHJvY2Vzc2luZyBvZiBjaGFyYWN0ZXIgY2xhc3NpZmljYXRpb24gdXNpbmcgY3R5cGUgZnVuY3Rpb25zLiIsCiAgICAgICAgICAgICAgICAiZXh0LWdtcCI6ICJFbmFibGVzIGZhc3RlciBtYXRoIHdpdGggYXJiaXRyYXJ5LXByZWNpc2lvbiBpbnRlZ2VycyB1c2luZyBHTVAuIiwKICAgICAgICAgICAgICAgICJleHQtdXVpZCI6ICJFbmFibGVzIHRoZSB1c2Ugb2YgUGVjbFV1aWRUaW1lR2VuZXJhdG9yIGFuZCBQZWNsVXVpZFJhbmRvbUdlbmVyYXRvci4iLAogICAgICAgICAgICAgICAgInBhcmFnb25pZS9yYW5kb20tbGliIjogIlByb3ZpZGVzIFJhbmRvbUxpYiBmb3IgdXNlIHdpdGggdGhlIFJhbmRvbUxpYkFkYXB0ZXIiLAogICAgICAgICAgICAgICAgInJhbXNleS91dWlkLWRvY3RyaW5lIjogIkFsbG93cyB0aGUgdXNlIG9mIFJhbXNleVxcVXVpZFxcVXVpZCBhcyBEb2N0cmluZSBmaWVsZCB0eXBlLiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJjYXB0YWluaG9vayI6IHsKICAgICAgICAgICAgICAgICAgICAiZm9yY2UtaW5zdGFsbCI6IHRydWUKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFpbiI6ICI0LngtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICAgICAgICAgInNyYy9mdW5jdGlvbnMucGhwIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiUmFtc2V5XFxVdWlkXFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIFBIUCBsaWJyYXJ5IGZvciBnZW5lcmF0aW5nIGFuZCB3b3JraW5nIHdpdGggdW5pdmVyc2FsbHkgdW5pcXVlIGlkZW50aWZpZXJzIChVVUlEcykuIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImd1aWQiLAogICAgICAgICAgICAgICAgImlkZW50aWZpZXIiLAogICAgICAgICAgICAgICAgInV1aWQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vcmFtc2V5L3V1aWQvaXNzdWVzIiwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JhbXNleS91dWlkL3RyZWUvNC4yLjMiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmdW5kaW5nIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JhbXNleSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlkZWxpZnQuY29tL2Z1bmRpbmcvZ2l0aHViL3BhY2thZ2lzdC9yYW1zZXkvdXVpZCIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAidGlkZWxpZnQiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjEtMDktMjVUMjM6MTA6MzgrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInJvYnJpY2hhcmRzL3htbHNlY2xpYnMiLAogICAgICAgICAgICAidmVyc2lvbiI6ICIzLjEuNSIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vcm9icmljaGFyZHMveG1sc2VjbGlicy5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIwMzA2MmJlNzgxNzhjYmI1ZThmNjA1Y2QyNTVkYzMyYTE0OTgxZjkyIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvcm9icmljaGFyZHMveG1sc2VjbGlicy96aXBiYWxsLzAzMDYyYmU3ODE3OGNiYjVlOGY2MDVjZDI1NWRjMzJhMTQ5ODFmOTIiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIwMzA2MmJlNzgxNzhjYmI1ZThmNjA1Y2QyNTVkYzMyYTE0OTgxZjkyIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJleHQtb3BlbnNzbCI6ICIqIiwKICAgICAgICAgICAgICAgICJwaHAiOiAiPj0gNS40IgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJSb2JSaWNoYXJkc1xcWE1MU2VjTGlic1xcIjogInNyYyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJCU0QtMy1DbGF1c2UiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIFBIUCBsaWJyYXJ5IGZvciBYTUwgU2VjdXJpdHkiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JvYnJpY2hhcmRzL3htbHNlY2xpYnMiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAic2VjdXJpdHkiLAogICAgICAgICAgICAgICAgInNpZ25hdHVyZSIsCiAgICAgICAgICAgICAgICAieG1sIiwKICAgICAgICAgICAgICAgICJ4bWxkc2lnIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJpc3N1ZXMiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JvYnJpY2hhcmRzL3htbHNlY2xpYnMvaXNzdWVzIiwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JvYnJpY2hhcmRzL3htbHNlY2xpYnMvdHJlZS8zLjEuNSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyNi0wMy0xM1QxMDozMTo1NiswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic3BvbWt5LWxhYnMvYmFzZTY0dXJsIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjIuMC40IiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3ktTGFicy9iYXNlNjR1cmwuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiNzc1MmNlOTMxZWMyODVkYTRlZDFmNGM1YWEyN2U0NWUwOTdiZTYxZCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL1Nwb21reS1MYWJzL2Jhc2U2NHVybC96aXBiYWxsLzc3NTJjZTkzMWVjMjg1ZGE0ZWQxZjRjNWFhMjdlNDVlMDk3YmU2MWQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI3NzUyY2U5MzFlYzI4NWRhNGVkMWY0YzVhYTI3ZTQ1ZTA5N2JlNjFkIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj03LjEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJwaHBzdGFuL2V4dGVuc2lvbi1pbnN0YWxsZXIiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9waHBzdGFuIjogIl4wLjExfF4wLjEyIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tYmViZXJsZWktYXNzZXJ0IjogIl4wLjExfF4wLjEyIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tZGVwcmVjYXRpb24tcnVsZXMiOiAiXjAuMTF8XjAuMTIiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1waHB1bml0IjogIl4wLjExfF4wLjEyIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tc3RyaWN0LXJ1bGVzIjogIl4wLjExfF4wLjEyIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJCYXNlNjRVcmxcXCI6ICJzcmMvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiRmxvcmVudCBNb3JzZWxsaSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3ktTGFicy9iYXNlNjR1cmwvY29udHJpYnV0b3JzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQmFzZSA2NCBVUkwgU2FmZSBFbmNvZGluZy9EZWNvZGluZyBQSFAgTGlicmFyeSIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5LUxhYnMvYmFzZTY0dXJsIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImJhc2U2NCIsCiAgICAgICAgICAgICAgICAicmZjNDY0OCIsCiAgICAgICAgICAgICAgICAic2FmZSIsCiAgICAgICAgICAgICAgICAidXJsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJpc3N1ZXMiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reS1MYWJzL2Jhc2U2NHVybC9pc3N1ZXMiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5LUxhYnMvYmFzZTY0dXJsL3RyZWUvdjIuMC40IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3kiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3d3dy5wYXRyZW9uLmNvbS9GbG9yZW50TW9yc2VsbGkiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInBhdHJlb24iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjAtMTEtMDNUMDk6MTA6MjUrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInNwb21reS1sYWJzL2Nib3ItcGhwIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjIuMS4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3ktTGFicy9jYm9yLXBocC5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIyOGUyNzEyY2ZjMGI0OGZhZTY2MWE0OGZmYzY4OTZkN2FiZTgzNjg0IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvU3BvbWt5LUxhYnMvY2Jvci1waHAvemlwYmFsbC8yOGUyNzEyY2ZjMGI0OGZhZTY2MWE0OGZmYzY4OTZkN2FiZTgzNjg0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMjhlMjcxMmNmYzBiNDhmYWU2NjFhNDhmZmM2ODk2ZDdhYmU4MzY4NCIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAiYnJpY2svbWF0aCI6ICJeMC44LjE1fF4wLjkuMCIsCiAgICAgICAgICAgICAgICAiZXh0LW1ic3RyaW5nIjogIioiLAogICAgICAgICAgICAgICAgInBocCI6ICI+PTcuMyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgImVraW5vL3BocHN0YW4tYmFubmVkLWNvZGUiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgICAgICAgICAiaW5mZWN0aW9uL2luZmVjdGlvbiI6ICJeMC4xOHxeMC4yNSIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9leHRlbnNpb24taW5zdGFsbGVyIjogIl4xLjEiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3RhbiI6ICJeMS4wIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tYmViZXJsZWktYXNzZXJ0IjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1kZXByZWNhdGlvbi1ydWxlcyI6ICJeMS4wIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tcGhwdW5pdCI6ICJeMS4wIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tc3RyaWN0LXJ1bGVzIjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeOS41IiwKICAgICAgICAgICAgICAgICJyZWN0b3IvcmVjdG9yIjogIl4wLjEyIiwKICAgICAgICAgICAgICAgICJyb2F2ZS9zZWN1cml0eS1hZHZpc29yaWVzIjogImRldi1sYXRlc3QiLAogICAgICAgICAgICAgICAgInN5bXBsaWZ5L2Vhc3ktY29kaW5nLXN0YW5kYXJkIjogIl4xMC4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAic3VnZ2VzdCI6IHsKICAgICAgICAgICAgICAgICJleHQtYmNtYXRoIjogIkdNUCBvciBCQ01hdGggZXh0ZW5zaW9ucyB3aWxsIGRyYXN0aWNhbGx5IGltcHJvdmUgdGhlIGxpYnJhcnkgcGVyZm9ybWFuY2UuIEJDTWF0aCBleHRlbnNpb24gbmVlZGVkIHRvIGhhbmRsZSB0aGUgQmlnIEZsb2F0IGFuZCBEZWNpbWFsIEZyYWN0aW9uIFRhZ3MiLAogICAgICAgICAgICAgICAgImV4dC1nbXAiOiAiR01QIG9yIEJDTWF0aCBleHRlbnNpb25zIHdpbGwgZHJhc3RpY2FsbHkgaW1wcm92ZSB0aGUgbGlicmFyeSBwZXJmb3JtYW5jZSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiQ0JPUlxcIjogInNyYy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJGbG9yZW50IE1vcnNlbGxpIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQWxsIGNvbnRyaWJ1dG9ycyIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3ktTGFicy9jYm9yLXBocC9jb250cmlidXRvcnMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDQk9SIEVuY29kZXIvRGVjb2RlciBmb3IgUEhQIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgIkNvbmNpc2UgQmluYXJ5IE9iamVjdCBSZXByZXNlbnRhdGlvbiIsCiAgICAgICAgICAgICAgICAiUkZDNzA0OSIsCiAgICAgICAgICAgICAgICAiY2JvciIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiaXNzdWVzIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3ktTGFicy9jYm9yLXBocC9pc3N1ZXMiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5LUxhYnMvY2Jvci1waHAvdHJlZS92Mi4xLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmdW5kaW5nIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vd3d3LnBhdHJlb24uY29tL0Zsb3JlbnRNb3JzZWxsaSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAicGF0cmVvbiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyMS0xMi0xM1QxMjo0NjoyNiswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic3ltZm9ueS9kZXByZWNhdGlvbi1jb250cmFjdHMiLAogICAgICAgICAgICAidmVyc2lvbiI6ICJ2Mi41LjQiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvZGVwcmVjYXRpb24tY29udHJhY3RzLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjYwNTM4OWYyYTdlNTYyNWYyNzNiNTM5NjBkYzQ2YWVhZjljNjI5MTgiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9zeW1mb255L2RlcHJlY2F0aW9uLWNvbnRyYWN0cy96aXBiYWxsLzYwNTM4OWYyYTdlNTYyNWYyNzNiNTM5NjBkYzQ2YWVhZjljNjI5MTgiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI2MDUzODlmMmE3ZTU2MjVmMjczYjUzOTYwZGM0NmFlYWY5YzYyOTE4IiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj03LjEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAidGhhbmtzIjogewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvY29udHJhY3RzIiwKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJzeW1mb255L2NvbnRyYWN0cyIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFpbiI6ICIyLjUtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICAgICAgICAgImZ1bmN0aW9uLnBocCIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk5pY29sYXMgR3Jla2FzIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAicEB0Y2h3b3JrLmNvbSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU3ltZm9ueSBDb21tdW5pdHkiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3N5bWZvbnkuY29tL2NvbnRyaWJ1dG9ycyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgZ2VuZXJpYyBmdW5jdGlvbiBhbmQgY29udmVudGlvbiB0byB0cmlnZ2VyIGRlcHJlY2F0aW9uIG5vdGljZXMiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbSIsCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9kZXByZWNhdGlvbi1jb250cmFjdHMvdHJlZS92Mi41LjQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmdW5kaW5nIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9zcG9uc29yIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJjdXN0b20iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2ZhYnBvdCIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlkZWxpZnQuY29tL2Z1bmRpbmcvZ2l0aHViL3BhY2thZ2lzdC9zeW1mb255L3N5bWZvbnkiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInRpZGVsaWZ0IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAidGltZSI6ICIyMDI0LTA5LTI1VDE0OjExOjEzKzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJzeW1mb255L3BvbHlmaWxsLWN0eXBlIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjEuMzcuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9wb2x5ZmlsbC1jdHlwZS5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIxNDEwNDZhOGY5NDc3OTQ4ZmYyODRmYTY1YmUyMDk1YmFhZmI5NGYyIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvc3ltZm9ueS9wb2x5ZmlsbC1jdHlwZS96aXBiYWxsLzE0MTA0NmE4Zjk0Nzc5NDhmZjI4NGZhNjViZTIwOTViYWFmYjk0ZjIiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIxNDEwNDZhOGY5NDc3OTQ4ZmYyODRmYTY1YmUyMDk1YmFhZmI5NGYyIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj03LjIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJwcm92aWRlIjogewogICAgICAgICAgICAgICAgImV4dC1jdHlwZSI6ICIqIgogICAgICAgICAgICB9LAogICAgICAgICAgICAic3VnZ2VzdCI6IHsKICAgICAgICAgICAgICAgICJleHQtY3R5cGUiOiAiRm9yIGJlc3QgcGVyZm9ybWFuY2UiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAidGhhbmtzIjogewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvcG9seWZpbGwiLAogICAgICAgICAgICAgICAgICAgICJuYW1lIjogInN5bWZvbnkvcG9seWZpbGwiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgICAgICAgICAiYm9vdHN0cmFwLnBocCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIlN5bWZvbnlcXFBvbHlmaWxsXFxDdHlwZVxcIjogIiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkdlcnQgZGUgUGFndGVyIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAiQmFja0VuZFRlYUBnbWFpbC5jb20iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlN5bWZvbnkgQ29tbXVuaXR5IiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9jb250cmlidXRvcnMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTeW1mb255IHBvbHlmaWxsIGZvciBjdHlwZSBmdW5jdGlvbnMiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbSIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJjb21wYXRpYmlsaXR5IiwKICAgICAgICAgICAgICAgICJjdHlwZSIsCiAgICAgICAgICAgICAgICAicG9seWZpbGwiLAogICAgICAgICAgICAgICAgInBvcnRhYmxlIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvcG9seWZpbGwtY3R5cGUvdHJlZS92MS4zNy4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vc3ltZm9ueS5jb20vc3BvbnNvciIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiY3VzdG9tIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9mYWJwb3QiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vbmljb2xhcy1ncmVrYXMiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3RpZGVsaWZ0LmNvbS9mdW5kaW5nL2dpdGh1Yi9wYWNrYWdpc3Qvc3ltZm9ueS9zeW1mb255IiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJ0aWRlbGlmdCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyNi0wNC0xMFQxNjoxOToyMiswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic3ltZm9ueS9wb2x5ZmlsbC1waHA4MCIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogInYxLjM3LjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvcG9seWZpbGwtcGhwODAuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiZGZiNTU3MjZjM2E3NmVhM2I2NDU5ZmNmZGExZWMyZDgwYTY4MjQxMSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3N5bWZvbnkvcG9seWZpbGwtcGhwODAvemlwYmFsbC9kZmI1NTcyNmMzYTc2ZWEzYjY0NTlmY2ZkYTFlYzJkODBhNjgyNDExIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiZGZiNTU3MjZjM2E3NmVhM2I2NDU5ZmNmZGExZWMyZDgwYTY4MjQxMSIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIj49Ny4yIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgInRoYW5rcyI6IHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zeW1mb255L3BvbHlmaWxsIiwKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJzeW1mb255L3BvbHlmaWxsIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICAgICAgICAgImJvb3RzdHJhcC5waHAiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJTeW1mb255XFxQb2x5ZmlsbFxcUGhwODBcXCI6ICIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImNsYXNzbWFwIjogWwogICAgICAgICAgICAgICAgICAgICJSZXNvdXJjZXMvc3R1YnMiCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJJb24gQmF6YW4iLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJpb24uYmF6YW5AZ21haWwuY29tIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJOaWNvbGFzIEdyZWthcyIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogInBAdGNod29yay5jb20iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlN5bWZvbnkgQ29tbXVuaXR5IiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9jb250cmlidXRvcnMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTeW1mb255IHBvbHlmaWxsIGJhY2twb3J0aW5nIHNvbWUgUEhQIDguMCsgZmVhdHVyZXMgdG8gbG93ZXIgUEhQIHZlcnNpb25zIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vc3ltZm9ueS5jb20iLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiY29tcGF0aWJpbGl0eSIsCiAgICAgICAgICAgICAgICAicG9seWZpbGwiLAogICAgICAgICAgICAgICAgInBvcnRhYmxlIiwKICAgICAgICAgICAgICAgICJzaGltIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvcG9seWZpbGwtcGhwODAvdHJlZS92MS4zNy4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vc3ltZm9ueS5jb20vc3BvbnNvciIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiY3VzdG9tIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9mYWJwb3QiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vbmljb2xhcy1ncmVrYXMiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3RpZGVsaWZ0LmNvbS9mdW5kaW5nL2dpdGh1Yi9wYWNrYWdpc3Qvc3ltZm9ueS9zeW1mb255IiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJ0aWRlbGlmdCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyNi0wNC0xMFQxNjoxOToyMiswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic3ltZm9ueS9wb2x5ZmlsbC1waHA4MSIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogInYxLjM3LjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvcG9seWZpbGwtcGhwODEuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiNGE0Y2ZjMmQyNTNjMjFhNWFkMGU1MzA3MWRmMjQ4ZWQ0OGM2Y2U1YyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3N5bWZvbnkvcG9seWZpbGwtcGhwODEvemlwYmFsbC80YTRjZmMyZDI1M2MyMWE1YWQwZTUzMDcxZGYyNDhlZDQ4YzZjZTVjIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiNGE0Y2ZjMmQyNTNjMjFhNWFkMGU1MzA3MWRmMjQ4ZWQ0OGM2Y2U1YyIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIj49Ny4yIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgInRoYW5rcyI6IHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zeW1mb255L3BvbHlmaWxsIiwKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJzeW1mb255L3BvbHlmaWxsIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICAgICAgICAgImJvb3RzdHJhcC5waHAiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJTeW1mb255XFxQb2x5ZmlsbFxcUGhwODFcXCI6ICIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImNsYXNzbWFwIjogWwogICAgICAgICAgICAgICAgICAgICJSZXNvdXJjZXMvc3R1YnMiCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJOaWNvbGFzIEdyZWthcyIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogInBAdGNod29yay5jb20iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlN5bWZvbnkgQ29tbXVuaXR5IiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9jb250cmlidXRvcnMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTeW1mb255IHBvbHlmaWxsIGJhY2twb3J0aW5nIHNvbWUgUEhQIDguMSsgZmVhdHVyZXMgdG8gbG93ZXIgUEhQIHZlcnNpb25zIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vc3ltZm9ueS5jb20iLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiY29tcGF0aWJpbGl0eSIsCiAgICAgICAgICAgICAgICAicG9seWZpbGwiLAogICAgICAgICAgICAgICAgInBvcnRhYmxlIiwKICAgICAgICAgICAgICAgICJzaGltIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvcG9seWZpbGwtcGhwODEvdHJlZS92MS4zNy4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vc3ltZm9ueS5jb20vc3BvbnNvciIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiY3VzdG9tIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9mYWJwb3QiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vbmljb2xhcy1ncmVrYXMiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3RpZGVsaWZ0LmNvbS9mdW5kaW5nL2dpdGh1Yi9wYWNrYWdpc3Qvc3ltZm9ueS9zeW1mb255IiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJ0aWRlbGlmdCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyNC0wOS0wOVQxMTo0NToxMCswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic3ltZm9ueS9wcm9jZXNzIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjUuNC41MSIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9wcm9jZXNzLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjQ2N2JmYzU2ZjE4ZjVlZjZkNWNjYjA5MzI0ZDdlOTg4YzFjMGE5OGYiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9zeW1mb255L3Byb2Nlc3MvemlwYmFsbC80NjdiZmM1NmYxOGY1ZWY2ZDVjY2IwOTMyNGQ3ZTk4OGMxYzBhOThmIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiNDY3YmZjNTZmMThmNWVmNmQ1Y2NiMDkzMjRkN2U5ODhjMWMwYTk4ZiIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIj49Ny4yLjUiLAogICAgICAgICAgICAgICAgInN5bWZvbnkvcG9seWZpbGwtcGhwODAiOiAiXjEuMTYiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIlN5bWZvbnlcXENvbXBvbmVudFxcUHJvY2Vzc1xcIjogIiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAiZXhjbHVkZS1mcm9tLWNsYXNzbWFwIjogWwogICAgICAgICAgICAgICAgICAgICIvVGVzdHMvIgogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiRmFiaWVuIFBvdGVuY2llciIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogImZhYmllbkBzeW1mb255LmNvbSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU3ltZm9ueSBDb21tdW5pdHkiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3N5bWZvbnkuY29tL2NvbnRyaWJ1dG9ycyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkV4ZWN1dGVzIGNvbW1hbmRzIGluIHN1Yi1wcm9jZXNzZXMiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbSIsCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9wcm9jZXNzL3RyZWUvdjUuNC41MSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZ1bmRpbmciOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3N5bWZvbnkuY29tL3Nwb25zb3IiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImN1c3RvbSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vZmFicG90IiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL25pY29sYXMtZ3Jla2FzIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly90aWRlbGlmdC5jb20vZnVuZGluZy9naXRodWIvcGFja2FnaXN0L3N5bWZvbnkvc3ltZm9ueSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAidGlkZWxpZnQiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjYtMDEtMjZUMTU6NTM6MzcrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInRoZWNvZGluZ21hY2hpbmUvc2FmZSIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogInYxLjMuMyIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vdGhlY29kaW5nbWFjaGluZS9zYWZlLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImE4YWIwODc2MzA1YTRjZGFlZjMxYjIzNTBmY2I5ODExYjU2MDhkYmMiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvemlwYmFsbC9hOGFiMDg3NjMwNWE0Y2RhZWYzMWIyMzUwZmNiOTgxMWI1NjA4ZGJjIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYThhYjA4NzYzMDVhNGNkYWVmMzFiMjM1MGZjYjk4MTFiNTYwOGRiYyIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIj49Ny4yIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAicGhwc3Rhbi9waHBzdGFuIjogIl4wLjEyIiwKICAgICAgICAgICAgICAgICJzcXVpemxhYnMvcGhwX2NvZGVzbmlmZmVyIjogIl4zLjIiLAogICAgICAgICAgICAgICAgInRoZWNvZGluZ21hY2hpbmUvcGhwc3Rhbi1zdHJpY3QtcnVsZXMiOiAiXjAuMTIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjAuMS1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgICAgICAgICAiZGVwcmVjYXRlZC9hcGMucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZGVwcmVjYXRlZC9saWJldmVudC5waHAiLAogICAgICAgICAgICAgICAgICAgICJkZXByZWNhdGVkL21zc3FsLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImRlcHJlY2F0ZWQvc3RhdHMucGhwIiwKICAgICAgICAgICAgICAgICAgICAibGliL3NwZWNpYWxfY2FzZXMucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2FwYWNoZS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvYXBjdS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvYXJyYXkucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2J6aXAyLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9jYWxlbmRhci5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvY2xhc3NvYmoucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2NvbS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvY3VicmlkLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9jdXJsLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9kYXRldGltZS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvZGlyLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9laW8ucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2Vycm9yZnVuYy5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvZXhlYy5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvZmlsZWluZm8ucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2ZpbGVzeXN0ZW0ucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2ZpbHRlci5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvZnBtLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9mdHAucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2Z1bmNoYW5kLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9nbXAucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2dudXBnLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9oYXNoLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9pYmFzZS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvaWJtRGIyLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9pY29udi5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvaW1hZ2UucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2ltYXAucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2luZm8ucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2luZ3Jlcy1paS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvaW5vdGlmeS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvanNvbi5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvbGRhcC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvbGlieG1sLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9semYucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL21haWxwYXJzZS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvbWJzdHJpbmcucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL21pc2MucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL21zcWwucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL215c3FsLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9teXNxbGkucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL215c3FsbmRNcy5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvbXlzcWxuZFFjLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9uZXR3b3JrLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9vY2k4LnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9vcGNhY2hlLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9vcGVuc3NsLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9vdXRjb250cm9sLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9wYXNzd29yZC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvcGNudGwucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3BjcmUucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3BkZi5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvcGdzcWwucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3Bvc2l4LnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9wcy5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvcHNwZWxsLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9yZWFkbGluZS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvcnBtaW5mby5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvcnJkLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9zZW0ucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3Nlc3Npb24ucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3NobW9wLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9zaW1wbGV4bWwucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3NvY2tldHMucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3NvZGl1bS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvc29sci5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvc3BsLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9zcWxzcnYucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3NzZGVlcC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvc3NoMi5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvc3RyZWFtLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9zdHJpbmdzLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9zd29vbGUucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3VvZGJjLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC91b3B6LnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC91cmwucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3Zhci5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQveGRpZmYucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3htbC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQveG1scnBjLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC95YW1sLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC95YXoucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3ppcC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvemxpYi5waHAiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJTYWZlXFwiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICJsaWIvIiwKICAgICAgICAgICAgICAgICAgICAgICAgImRlcHJlY2F0ZWQvIiwKICAgICAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC8iCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlBIUCBjb3JlIGZ1bmN0aW9ucyB0aGF0IHRocm93IGV4Y2VwdGlvbnMgaW5zdGVhZCBvZiByZXR1cm5pbmcgRkFMU0Ugb24gZXJyb3IiLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJpc3N1ZXMiOiAiaHR0cHM6Ly9naXRodWIuY29tL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9pc3N1ZXMiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vdGhlY29kaW5nbWFjaGluZS9zYWZlL3RyZWUvdjEuMy4zIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDIwLTEwLTI4VDE3OjUxOjM0KzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJ3ZWItYXV0aC9jb3NlLWxpYiIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogInYzLjMuMTIiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi1hdXRoL2Nvc2UtbGliLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImVmYTZlYzJiYTRlODQwYmMxMzE2YTQ5Mzk3M2M5OTE2MDI4YWZlZWIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy93ZWItYXV0aC9jb3NlLWxpYi96aXBiYWxsL2VmYTZlYzJiYTRlODQwYmMxMzE2YTQ5Mzk3M2M5OTE2MDI4YWZlZWIiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJlZmE2ZWMyYmE0ZTg0MGJjMTMxNmE0OTM5NzNjOTkxNjAyOGFmZWViIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJiZWJlcmxlaS9hc3NlcnQiOiAiXjMuMiIsCiAgICAgICAgICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgICAgICAgICAiZXh0LW1ic3RyaW5nIjogIioiLAogICAgICAgICAgICAgICAgImV4dC1vcGVuc3NsIjogIioiLAogICAgICAgICAgICAgICAgImZncm9zc2UvcGhwYXNuMSI6ICJeMi4xIiwKICAgICAgICAgICAgICAgICJwaHAiOiAiPj03LjIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkNvc2VcXCI6ICJzcmMvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiRmxvcmVudCBNb3JzZWxsaSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3kiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkFsbCBjb250cmlidXRvcnMiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLWF1dGgvY29zZS9jb250cmlidXRvcnMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDQk9SIE9iamVjdCBTaWduaW5nIGFuZCBFbmNyeXB0aW9uIChDT1NFKSBGb3IgUEhQIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItYXV0aCIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJDT1NFIiwKICAgICAgICAgICAgICAgICJSRkM4MTUyIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi1hdXRoL2Nvc2UtbGliL3RyZWUvdjMuMy4xMiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZ1bmRpbmciOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5IiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly93d3cucGF0cmVvbi5jb20vRmxvcmVudE1vcnNlbGxpIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJwYXRyZW9uIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAidGltZSI6ICIyMDIxLTEyLTA0VDEyOjEzOjM1KzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJ3ZWItYXV0aC9tZXRhZGF0YS1zZXJ2aWNlIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjMuMy4xMiIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLWF1dGgvd2ViYXV0aG4tbWV0YWRhdGEtc2VydmljZS5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJlZjQwZDJiN2I2OGM0OTY0MjQ3ZDEzZmFiNTJlMmZhOGRiZDY1MjQ2IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvd2ViLWF1dGgvd2ViYXV0aG4tbWV0YWRhdGEtc2VydmljZS96aXBiYWxsL2VmNDBkMmI3YjY4YzQ5NjQyNDdkMTNmYWI1MmUyZmE4ZGJkNjUyNDYiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJlZjQwZDJiN2I2OGM0OTY0MjQ3ZDEzZmFiNTJlMmZhOGRiZDY1MjQ2IiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJiZWJlcmxlaS9hc3NlcnQiOiAiXjMuMiIsCiAgICAgICAgICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgICAgICAgICAibGVhZ3VlL3VyaSI6ICJeNi4wIiwKICAgICAgICAgICAgICAgICJwaHAiOiAiPj03LjIiLAogICAgICAgICAgICAgICAgInBzci9odHRwLWNsaWVudCI6ICJeMS4wIiwKICAgICAgICAgICAgICAgICJwc3IvaHR0cC1mYWN0b3J5IjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBzci9sb2ciOiAiXjEuMSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN1Z2dlc3QiOiB7CiAgICAgICAgICAgICAgICAid2ViLXRva2VuL2p3dC1rZXktbWdtdCI6ICJNYW5kYXRvcnkgZm9yIGZldGNoaW5nIE1ldGFkYXRhIFN0YXRlbWVudCBmcm9tIGRpc3RhbnQgc291cmNlcyIsCiAgICAgICAgICAgICAgICAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLWVjZHNhIjogIk1hbmRhdG9yeSBmb3IgZmV0Y2hpbmcgTWV0YWRhdGEgU3RhdGVtZW50IGZyb20gZGlzdGFudCBzb3VyY2VzIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJXZWJhdXRoblxcTWV0YWRhdGFTZXJ2aWNlXFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkZsb3JlbnQgTW9yc2VsbGkiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5IgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJBbGwgY29udHJpYnV0b3JzIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi1hdXRoL21ldGFkYXRhLXNlcnZpY2UvY29udHJpYnV0b3JzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTWV0YWRhdGEgU2VydmljZSBmb3IgRklETzIvV2ViYXV0aG4iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi1hdXRoIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgIkZJRE8yIiwKICAgICAgICAgICAgICAgICJmaWRvIiwKICAgICAgICAgICAgICAgICJ3ZWJhdXRobiIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItYXV0aC93ZWJhdXRobi1tZXRhZGF0YS1zZXJ2aWNlL3RyZWUvdjMuMy4xMiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZ1bmRpbmciOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5IiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly93d3cucGF0cmVvbi5jb20vRmxvcmVudE1vcnNlbGxpIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJwYXRyZW9uIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiYWJhbmRvbmVkIjogIndlYi1hdXRoL3dlYmF1dGhuLWxpYiIsCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjEtMTEtMjFUMTE6MTQ6MzErMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIndlYi1hdXRoL3dlYmF1dGhuLWxpYiIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogInYzLjMuMTIiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi1hdXRoL3dlYmF1dGhuLWxpYi5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI1ZWY5YjIxYzhlOWY4YTgxN2U1MjRhYzkzMjkwZDA4YTlmMDY1YjMzIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvd2ViLWF1dGgvd2ViYXV0aG4tbGliL3ppcGJhbGwvNWVmOWIyMWM4ZTlmOGE4MTdlNTI0YWM5MzI5MGQwOGE5ZjA2NWIzMyIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjVlZjliMjFjOGU5ZjhhODE3ZTUyNGFjOTMyOTBkMDhhOWYwNjViMzMiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgImJlYmVybGVpL2Fzc2VydCI6ICJeMy4yIiwKICAgICAgICAgICAgICAgICJleHQtanNvbiI6ICIqIiwKICAgICAgICAgICAgICAgICJleHQtbWJzdHJpbmciOiAiKiIsCiAgICAgICAgICAgICAgICAiZXh0LW9wZW5zc2wiOiAiKiIsCiAgICAgICAgICAgICAgICAiZmdyb3NzZS9waHBhc24xIjogIl4yLjEiLAogICAgICAgICAgICAgICAgInBocCI6ICI+PTcuMiIsCiAgICAgICAgICAgICAgICAicHNyL2h0dHAtY2xpZW50IjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBzci9odHRwLWZhY3RvcnkiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAicHNyL2h0dHAtbWVzc2FnZSI6ICJeMS4wIiwKICAgICAgICAgICAgICAgICJwc3IvbG9nIjogIl4xLjEiLAogICAgICAgICAgICAgICAgInJhbXNleS91dWlkIjogIl4zLjh8XjQuMCIsCiAgICAgICAgICAgICAgICAic3BvbWt5LWxhYnMvYmFzZTY0dXJsIjogIl4yLjAiLAogICAgICAgICAgICAgICAgInNwb21reS1sYWJzL2Nib3ItcGhwIjogIl4xLjB8XjIuMCIsCiAgICAgICAgICAgICAgICAic3ltZm9ueS9wcm9jZXNzIjogIl4zLjB8XjQuMHxeNS4wIiwKICAgICAgICAgICAgICAgICJ0aGVjb2RpbmdtYWNoaW5lL3NhZmUiOiAiXjEuMSIsCiAgICAgICAgICAgICAgICAid2ViLWF1dGgvY29zZS1saWIiOiAic2VsZi52ZXJzaW9uIiwKICAgICAgICAgICAgICAgICJ3ZWItYXV0aC9tZXRhZGF0YS1zZXJ2aWNlIjogInNlbGYudmVyc2lvbiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN1Z2dlc3QiOiB7CiAgICAgICAgICAgICAgICAicHNyL2xvZy1pbXBsZW1lbnRhdGlvbiI6ICJSZWNvbW1lbmRlZCB0byByZWNlaXZlIGxvZ3MgZnJvbSB0aGUgbGlicmFyeSIsCiAgICAgICAgICAgICAgICAid2ViLXRva2VuL2p3dC1rZXktbWdtdCI6ICJNYW5kYXRvcnkgZm9yIHRoZSBBbmRyb2lkU2FmZXR5TmV0IEF0dGVzdGF0aW9uIFN0YXRlbWVudCBzdXBwb3J0IiwKICAgICAgICAgICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tZWNkc2EiOiAiUmVjb21tZW5kZWQgZm9yIHRoZSBBbmRyb2lkU2FmZXR5TmV0IEF0dGVzdGF0aW9uIFN0YXRlbWVudCBzdXBwb3J0IiwKICAgICAgICAgICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tZWRkc2EiOiAiUmVjb21tZW5kZWQgZm9yIHRoZSBBbmRyb2lkU2FmZXR5TmV0IEF0dGVzdGF0aW9uIFN0YXRlbWVudCBzdXBwb3J0IiwKICAgICAgICAgICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tcnNhIjogIk1hbmRhdG9yeSBmb3IgdGhlIEFuZHJvaWRTYWZldHlOZXQgQXR0ZXN0YXRpb24gU3RhdGVtZW50IHN1cHBvcnQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIldlYmF1dGhuXFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkZsb3JlbnQgTW9yc2VsbGkiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5IgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJBbGwgY29udHJpYnV0b3JzIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi1hdXRoL3dlYmF1dGhuLWxpYnJhcnkvY29udHJpYnV0b3JzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRklETzIvV2ViYXV0aG4gU3VwcG9ydCBGb3IgUEhQIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItYXV0aCIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJGSURPMiIsCiAgICAgICAgICAgICAgICAiZmlkbyIsCiAgICAgICAgICAgICAgICAid2ViYXV0aG4iCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLWF1dGgvd2ViYXV0aG4tbGliL3RyZWUvdjMuMy4xMiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZ1bmRpbmciOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5IiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly93d3cucGF0cmVvbi5jb20vRmxvcmVudE1vcnNlbGxpIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJwYXRyZW9uIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAidGltZSI6ICIyMDIyLTAyLTE4VDA3OjEzOjQ0KzAwOjAwIgogICAgICAgIH0KICAgIF0sCiAgICAicGFja2FnZXMtZGV2IjogW10sCiAgICAiYWxpYXNlcyI6IFtdLAogICAgIm1pbmltdW0tc3RhYmlsaXR5IjogInN0YWJsZSIsCiAgICAic3RhYmlsaXR5LWZsYWdzIjoge30sCiAgICAicHJlZmVyLXN0YWJsZSI6IGZhbHNlLAogICAgInByZWZlci1sb3dlc3QiOiBmYWxzZSwKICAgICJwbGF0Zm9ybSI6IHsKICAgICAgICAicGhwIjogIj49Ny40IgogICAgfSwKICAgICJwbGF0Zm9ybS1kZXYiOiB7fSwKICAgICJwbHVnaW4tYXBpLXZlcnNpb24iOiAiMi45LjAiCn0K]]></data>
	</file>
	<file>
	  <filename>/function.admin_settings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2Ntc21zJykpIHsKICAgIGV4aXQ7Cn0KcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19ESVJfXykgLiAnL01BU19Db21tb24vbGliL21hc19hZG1pbl91aS5waHAnOwokc21hcnR5LT5hc3NpZ24oJ21vZCcsICR0aGlzKTsKTWFzX0FkbWluX1VpOjphc3NpZ25CcmFuZGluZygkdGhpcywgJHNtYXJ0eSk7CiRkb25hdGlvbnNIaWRkZW4gPSAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2hpZGVkb25hdGlvbnN0YWInKSA9PSAkdGhpcy0+R2V0VmVyc2lvbigpKTsKJGFkbWluc2VjdGlvbnMgPSBhcnJheSgKICAgICR0aGlzLT5MYW5nKCdleHRlbnNpb25zJykgPT4gJ2V4dGVuc2lvbnMnLAogICAgJ2NvbnRlbnQnID0+ICdjb250ZW50JywKICAgICdzaXRlYWRtaW4nID0+ICdzaXRlYWRtaW4nLAogICAgJ3VzZXJzZ3JvdXBzJyA9PiAndXNlcnNncm91cHMnLAogICAgJ2xheW91dCcgPT4gJ2xheW91dCcsCiAgICAnZWNvbW1lcmNlJyA9PiAnZWNvbW1lcmNlJywKKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3Jtc3RhcnQnLCAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgJ2FkbWluX3NldHRpbmdzX3NhdmUnLCAkcmV0dXJuaWQpKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3JtZW5kJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiRzbWFydHktPmFzc2lnbignYWRtaW5zZWN0aW9uX2Ryb3Bkb3duJywgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCAnYWRtaW5zZWN0aW9uJywgJGFkbWluc2VjdGlvbnMsIC0xLCAkdGhpcy0+R2V0UHJlZmVyZW5jZShNQVNfQXV0aEh1Yjo6UFJFRl9BRE1JTl9TRUNUSU9OLCAnZXh0ZW5zaW9ucycpKSk7CiRzbWFydHktPmFzc2lnbignc2hvd2RvbmF0aW9uc3RhYl9jaGVja2JveCcsICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ3Nob3dkb25hdGlvbnN0YWInLCAnMScsICEkZG9uYXRpb25zSGlkZGVuKSk7CiRzbWFydHktPmFzc2lnbignc3VibWl0JywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3N1Ym1pdCcsICR0aGlzLT5MYW5nKCdzdWJtaXQnKSkpOwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluX3NldHRpbmdzLnRwbCcpOwo=]]></data>
	</file>
	<file>
	  <filename>/function.audit.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2Ntc21zJykpIHsKICAgIGV4aXQ7Cn0KJGRiID0gJHRoaXMtPkdldERiKCk7CmlmIChpc3NldCgkcGFyYW1zWydleHBvcnRfYXVkaXQnXSkgJiYgJHRoaXMtPkNoZWNrUGVybWlzc2lvbihNQVNfQXV0aEh1Yjo6UEVSTV9NQU5BR0UpKSB7CiAgICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogdGV4dC9jc3Y7IGNoYXJzZXQ9dXRmLTgnKTsKICAgIGhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9bWFzX2F1dGhodWJfYXVkaXQuY3N2Jyk7CiAgICAkb3V0ID0gZm9wZW4oJ3BocDovL291dHB1dCcsICd3Jyk7CiAgICBmcHV0Y3N2KCRvdXQsIGFycmF5KCdpZCcsICdjcmVhdGVkJywgJ2V2ZW50JywgJ3NldmVyaXR5JywgJ3VzZXJfaWQnLCAncHJvdmlkZXJfaWQnKSk7CiAgICAkcm93cyA9ICRkYi0+R2V0QXJyYXkoJ1NFTEVDVCBpZCwgY3JlYXRlZCwgZXZlbnQsIHNldmVyaXR5LCB1c2VyX2lkLCBwcm92aWRlcl9pZCBGUk9NICcgLiBNYXNfQWhfVGFibGVzOjphdWRpdExvZygpIC4gJyBPUkRFUiBCWSBpZCBERVNDIExJTUlUIDUwMDAnKTsKICAgIGlmIChpc19hcnJheSgkcm93cykpIHsKICAgICAgICBmb3JlYWNoICgkcm93cyBhcyAkcikgewogICAgICAgICAgICBmcHV0Y3N2KCRvdXQsICRyKTsKICAgICAgICB9CiAgICB9CiAgICBmY2xvc2UoJG91dCk7CiAgICBleGl0Owp9CiRyb3dzID0gJGRiLT5HZXRBcnJheSgnU0VMRUNUICogRlJPTSAnIC4gTWFzX0FoX1RhYmxlczo6YXVkaXRMb2coKSAuICcgT1JERVIgQlkgaWQgREVTQyBMSU1JVCAyMDAnKTsKJHNtYXJ0eS0+YXNzaWduKCdtb2QnLCAkdGhpcyk7CiRzbWFydHktPmFzc2lnbignaWQnLCAkaWQpOwokc21hcnR5LT5hc3NpZ24oJ3JldHVybmlkJywgJHJldHVybmlkKTsKJHNtYXJ0eS0+YXNzaWduKCdyb3dzJywgaXNfYXJyYXkoJHJvd3MpID8gJHJvd3MgOiBhcnJheSgpKTsKJHNtYXJ0eS0+YXNzaWduKCdleHBvcnRfdXJsJywgJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAnJywgYXJyYXkoJ2FjdGl2ZXRhYicgPT4gJ2F1ZGl0JywgJ2V4cG9ydF9hdWRpdCcgPT4gMSksICcnLCB0cnVlKSk7CmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYXVkaXQudHBsJyk7Cg==]]></data>
	</file>
	<file>
	  <filename>/function.donations.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2Ntc21zJykpIHsKICAgIGV4aXQ7Cn0KcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19ESVJfXykgLiAnL01BU19Db21tb24vbGliL21hc19hZG1pbl91aS5waHAnOwpNYXNfQWRtaW5fVWk6OnJlbmRlckRvbmF0aW9uc1RhYigkdGhpcywgJGlkLCAkcmV0dXJuaWQsICdkZWZhdWx0YWRtaW4nLCAnYWRtaW5fc2V0dGluZ3Nfc2F2ZScpOwo=]]></data>
	</file>
	<file>
	  <filename>/function.mams_policy.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2Ntc21zJykpIHsKICAgIGV4aXQ7Cn0KJG1hbXMgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ01BTVMnKTsKJGF1dGhNb2QgPSAnJzsKJG1hbXNPayA9ICRtYW1zID8gJ3llcycgOiAnbm8nOwokcmVnT2sgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ01BTVNSZWdpc3RyYXRpb24nKSA/ICd5ZXMnIDogJ25vJzsKaWYgKCRtYW1zKSB7CiAgICAkYXV0aE1vZCA9IChzdHJpbmcpICRtYW1zLT5HZXRQcmVmZXJlbmNlKCdhdXRoX21vZHVsZScsICcnKTsKfQppZiAoaXNzZXQoJHBhcmFtc1snc3VibWl0X21hbXNfcG9saWN5J10pICYmICR0aGlzLT5DaGVja1Blcm1pc3Npb24oTUFTX0F1dGhIdWI6OlBFUk1fTUFOQUdFKSkgewogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ21hc19haF9tYW1zX2ppdF9jcmVhdGUnLCAhZW1wdHkoJHBhcmFtc1snbWFtc19qaXRfY3JlYXRlJ10pID8gJzEnIDogJzAnKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtYXNfYWhfYmxvY2tfZHVwbGljYXRlX2VtYWlsX3NpZ251cCcsICFlbXB0eSgkcGFyYW1zWydibG9ja19kdXBsaWNhdGVfZW1haWxfc2lnbnVwJ10pID8gJzEnIDogJzAnKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtYXNfYWhfbWFtc19kZWZhdWx0X2dyb3VwcycsIHRyaW0oKHN0cmluZykgKCRwYXJhbXNbJ21hbXNfZGVmYXVsdF9ncm91cHMnXSA/PyAnJykpKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtYXNfYWhfZGVmYXVsdF9jb25uZWN0aW5nX3Byb3BlcnR5JywgdHJpbSgoc3RyaW5nKSAoJHBhcmFtc1snZGVmYXVsdF9jb25uZWN0aW5nX3Byb3BlcnR5J10gPz8gJ2F1dGhodWJfc3ViJykpKTsKICAgIGVjaG8gJHRoaXMtPlNob3dNZXNzYWdlKCR0aGlzLT5MYW5nKCdwcmVmc3VwZGF0ZWQnKSk7Cn0KJHNtYXJ0eS0+YXNzaWduKCdtb2QnLCAkdGhpcyk7CiRzbWFydHktPmFzc2lnbignaWQnLCAkaWQpOwokc21hcnR5LT5hc3NpZ24oJ3JldHVybmlkJywgJHJldHVybmlkKTsKJHNtYXJ0eS0+YXNzaWduKCdhY3Rpb25pZCcsICRhY3Rpb25pZCk7CiRzbWFydHktPmFzc2lnbignbWFtc19vaycsICRtYW1zT2spOwokc21hcnR5LT5hc3NpZ24oJ21hbXNfYXV0aF9tb2R1bGUnLCAkYXV0aE1vZCAhPT0gJycgPyAkYXV0aE1vZCA6ICcoYnVpbHQtaW4pJyk7CiRzbWFydHktPmFzc2lnbignbWFtc19yZWdpc3RyYXRpb24nLCAkcmVnT2spOwokc21hcnR5LT5hc3NpZ24oJ2F1dGhodWJfYWN0aXZlJywgKCRhdXRoTW9kID09PSAnTUFTX0F1dGhIdWInKSA/ICd5ZXMnIDogJ25vJyk7CiRzbWFydHktPmFzc2lnbignZm9ybXN0YXJ0JywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICdwb3N0JywgJycsIGZhbHNlLCAnJywgYXJyYXkoJ2FjdGl2ZXRhYicgPT4gJ21hbXMnKSkpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm1lbmQnLCAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJHNtYXJ0eS0+YXNzaWduKCdtYW1zX2ppdF9jcmVhdGUnLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICdtYW1zX2ppdF9jcmVhdGUnLCAnMScsIChpbnQpICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtYXNfYWhfbWFtc19qaXRfY3JlYXRlJywgJzEnKSkpOwokc21hcnR5LT5hc3NpZ24oJ2Jsb2NrX2R1cGxpY2F0ZV9lbWFpbF9zaWdudXAnLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICdibG9ja19kdXBsaWNhdGVfZW1haWxfc2lnbnVwJywgJzEnLCAoaW50KSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWFzX2FoX2Jsb2NrX2R1cGxpY2F0ZV9lbWFpbF9zaWdudXAnLCAnMCcpKSk7CiRzbWFydHktPmFzc2lnbignbWFtc19kZWZhdWx0X2dyb3VwcycsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnbWFtc19kZWZhdWx0X2dyb3VwcycsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtYXNfYWhfbWFtc19kZWZhdWx0X2dyb3VwcycsICcnKSwgNDAsIDgwKSk7CiRzbWFydHktPmFzc2lnbignZGVmYXVsdF9jb25uZWN0aW5nX3Byb3BlcnR5JywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdkZWZhdWx0X2Nvbm5lY3RpbmdfcHJvcGVydHknLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWFzX2FoX2RlZmF1bHRfY29ubmVjdGluZ19wcm9wZXJ0eScsICdhdXRoaHViX3N1YicpLCAzMCwgNjQpKTsKJHNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0X21hbXNfcG9saWN5JywgJHRoaXMtPkxhbmcoJ3N1Ym1pdCcpKSk7CmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnbWFtc19wb2xpY3kudHBsJyk7Cg==]]></data>
	</file>
	<file>
	  <filename>/function.oauth_clients.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2Ntc21zJykpIHsKICAgIGV4aXQ7Cn0KJGRiID0gJHRoaXMtPkdldERiKCk7CmlmIChpc3NldCgkcGFyYW1zWydzdWJtaXRfb2F1dGhfY2xpZW50J10pICYmICR0aGlzLT5DaGVja1Blcm1pc3Npb24oTUFTX0F1dGhIdWI6OlBFUk1fTUFOQUdFKSkgewogICAgJGNsaWVudElkID0gdHJpbSgoc3RyaW5nKSAoJHBhcmFtc1snb2F1dGhfY2xpZW50X2lkJ10gPz8gJycpKTsKICAgIGlmICgkY2xpZW50SWQgPT09ICcnKSB7CiAgICAgICAgJGNsaWVudElkID0gJ2FoXycgLiBiaW4yaGV4KHJhbmRvbV9ieXRlcyg4KSk7CiAgICB9CiAgICAkc2VjcmV0ID0gKHN0cmluZykgKCRwYXJhbXNbJ29hdXRoX2NsaWVudF9zZWNyZXQnXSA/PyAnJyk7CiAgICAkaGFzaCA9ICRzZWNyZXQgIT09ICcnID8gcGFzc3dvcmRfaGFzaCgkc2VjcmV0LCBQQVNTV09SRF9ERUZBVUxUKSA6ICcnOwogICAgJHVyaXMgPSBhcnJheV9maWx0ZXIoYXJyYXlfbWFwKCd0cmltJywgZXhwbG9kZSgiXG4iLCAoc3RyaW5nKSAoJHBhcmFtc1sncmVkaXJlY3RfdXJpcyddID8/ICcnKSkpKTsKICAgICRkYi0+RXhlY3V0ZSgKICAgICAgICAnSU5TRVJUIElOVE8gJyAuIE1hc19BaF9UYWJsZXM6Om9hdXRoQ2xpZW50cygpIC4gJyAoY2xpZW50X2lkLCBzZWNyZXRfaGFzaCwgbmFtZSwgcmVkaXJlY3RfdXJpcywgZ3JhbnRzLCBzY29wZXMsIGVuYWJsZWQsIGNyZWF0ZWQpIFZBTFVFUyAoPyw/LD8sPyw/LD8sMSw/KScsCiAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICRjbGllbnRJZCwKICAgICAgICAgICAgJGhhc2gsCiAgICAgICAgICAgIHRyaW0oKHN0cmluZykgKCRwYXJhbXNbJ29hdXRoX2NsaWVudF9uYW1lJ10gPz8gJ0NsaWVudCcpKSwKICAgICAgICAgICAganNvbl9lbmNvZGUoJHVyaXMsIEpTT05fVU5FU0NBUEVEX1NMQVNIRVMgfCBKU09OX1VORVNDQVBFRF9VTklDT0RFKSwKICAgICAgICAgICAgJ2F1dGhvcml6YXRpb25fY29kZSByZWZyZXNoX3Rva2VuJywKICAgICAgICAgICAgdHJpbSgoc3RyaW5nKSAoJHBhcmFtc1snb2F1dGhfc2NvcGVzJ10gPz8gJ29wZW5pZCBwcm9maWxlIGVtYWlsJykpLAogICAgICAgICAgICB0aW1lKCksCiAgICAgICAgKQogICAgKTsKICAgIGVjaG8gJHRoaXMtPlNob3dNZXNzYWdlKCR0aGlzLT5MYW5nKCdwcmVmc3VwZGF0ZWQnKSk7Cn0KJGNsaWVudHMgPSAkZGItPkdldEFycmF5KCdTRUxFQ1QgaWQsIGNsaWVudF9pZCwgbmFtZSwgZW5hYmxlZCwgY3JlYXRlZCBGUk9NICcgLiBNYXNfQWhfVGFibGVzOjpvYXV0aENsaWVudHMoKSAuICcgT1JERVIgQlkgaWQgREVTQycpOwokc21hcnR5LT5hc3NpZ24oJ21vZCcsICR0aGlzKTsKJHNtYXJ0eS0+YXNzaWduKCdpZCcsICRpZCk7CiRzbWFydHktPmFzc2lnbigncmV0dXJuaWQnLCAkcmV0dXJuaWQpOwokc21hcnR5LT5hc3NpZ24oJ2FjdGlvbmlkJywgJGFjdGlvbmlkKTsKJHNtYXJ0eS0+YXNzaWduKCdjbGllbnRzJywgaXNfYXJyYXkoJGNsaWVudHMpID8gJGNsaWVudHMgOiBhcnJheSgpKTsKJHNtYXJ0eS0+YXNzaWduKCdkaXNjb3ZlcnlfdXJsJywgTWFzX0FoX0NvbmZpZzo6bW9kdWxlQWN0aW9uVXJsKCR0aGlzLCAnb2lkY19kaXNjb3ZlcnknLCBhcnJheSgpKSk7CiRzbWFydHktPmFzc2lnbignZm9ybXN0YXJ0JywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICdwb3N0JywgJycsIGZhbHNlLCAnJywgYXJyYXkoJ2FjdGl2ZXRhYicgPT4gJ29hdXRoX2NsaWVudHMnKSkpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm1lbmQnLCAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJHNtYXJ0eS0+YXNzaWduKCdvYXV0aF9jbGllbnRfbmFtZScsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnb2F1dGhfY2xpZW50X25hbWUnLCAnJywgNDAsIDEyMCkpOwokc21hcnR5LT5hc3NpZ24oJ29hdXRoX2NsaWVudF9pZCcsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnb2F1dGhfY2xpZW50X2lkJywgJycsIDQwLCAxMjApKTsKJHNtYXJ0eS0+YXNzaWduKCdvYXV0aF9jbGllbnRfc2VjcmV0JywgJHRoaXMtPkNyZWF0ZUlucHV0UGFzc3dvcmQoJGlkLCAnb2F1dGhfY2xpZW50X3NlY3JldCcsICcnLCA0MCwgMTIwKSk7CiRzbWFydHktPmFzc2lnbigncmVkaXJlY3RfdXJpcycsICR0aGlzLT5DcmVhdGVUZXh0QXJlYShmYWxzZSwgJGlkLCAnJywgJ3JlZGlyZWN0X3VyaXMnLCAnJywgJycsICcnLCAnJywgMywgNjApKTsKJHNtYXJ0eS0+YXNzaWduKCdvYXV0aF9zY29wZXMnLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ29hdXRoX3Njb3BlcycsICdvcGVuaWQgcHJvZmlsZSBlbWFpbCcsIDQwLCAxMjApKTsKJHNtYXJ0eS0+YXNzaWduKCdzdWJtaXRfY2xpZW50JywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3N1Ym1pdF9vYXV0aF9jbGllbnQnLCAkdGhpcy0+TGFuZygnb2F1dGhfY2xpZW50X2FkZCcpKSk7CmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnb2F1dGhfY2xpZW50cy50cGwnKTsK]]></data>
	</file>
	<file>
	  <filename>/function.providers.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2Ntc21zJykpIHsKICAgIGV4aXQ7Cn0KJGRyaXZlcnMgPSBNYXNfQWhfRHJpdmVyUmVnaXN0cnk6Omxpc3RLZXlzKCk7CiRyb3dzID0gTWFzX0FoX0RyaXZlclJlZ2lzdHJ5OjpsaXN0UHJvdmlkZXJzKCR0aGlzLCBmYWxzZSk7CmlmIChpc3NldCgkcGFyYW1zWydkZWxldGVfcHJvdmlkZXInXSkgJiYgJHRoaXMtPkNoZWNrUGVybWlzc2lvbihNQVNfQXV0aEh1Yjo6UEVSTV9NQU5BR0UpKSB7CiAgICAkcGlkID0gKGludCkgJHBhcmFtc1snZGVsZXRlX3Byb3ZpZGVyJ107CiAgICAkdGhpcy0+R2V0RGIoKS0+RXhlY3V0ZSgnREVMRVRFIEZST00gJyAuIE1hc19BaF9UYWJsZXM6OnByb3ZpZGVycygpIC4gJyBXSEVSRSBpZCA9ID8nLCBhcnJheSgkcGlkKSk7CiAgICBlY2hvICR0aGlzLT5TaG93TWVzc2FnZSgnUHJvdmlkZXIgZGVsZXRlZC4nKTsKICAgICRyb3dzID0gTWFzX0FoX0RyaXZlclJlZ2lzdHJ5OjpsaXN0UHJvdmlkZXJzKCR0aGlzLCBmYWxzZSk7Cn0KaWYgKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdF9wcm92aWRlciddKSAmJiAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKE1BU19BdXRoSHViOjpQRVJNX01BTkFHRSkpIHsKICAgICRjZmcgPSBhcnJheSgKICAgICAgICAncHJvdmlkZXJfa2V5JyA9PiBwcmVnX3JlcGxhY2UoJy9bXmEtejAtOV9cLV0vaScsICcnLCAoc3RyaW5nKSAoJHBhcmFtc1sncHJvdmlkZXJfa2V5J10gPz8gJ3AnIC4gdGltZSgpKSksCiAgICAgICAgJ2NsaWVudF9pZCcgPT4gdHJpbSgoc3RyaW5nKSAoJHBhcmFtc1snY2xpZW50X2lkJ10gPz8gJycpKSwKICAgICAgICAnYXV0aG9yaXplX3VybCcgPT4gdHJpbSgoc3RyaW5nKSAoJHBhcmFtc1snYXV0aG9yaXplX3VybCddID8/ICcnKSksCiAgICAgICAgJ3Rva2VuX3VybCcgPT4gdHJpbSgoc3RyaW5nKSAoJHBhcmFtc1sndG9rZW5fdXJsJ10gPz8gJycpKSwKICAgICAgICAndXNlcmluZm9fdXJsJyA9PiB0cmltKChzdHJpbmcpICgkcGFyYW1zWyd1c2VyaW5mb191cmwnXSA/PyAnJykpLAogICAgICAgICdzY29wZScgPT4gdHJpbSgoc3RyaW5nKSAoJHBhcmFtc1snc2NvcGUnXSA/PyAnb3BlbmlkIHByb2ZpbGUgZW1haWwnKSksCiAgICAgICAgJ2lkcF9lbnRpdHlfaWQnID0+IHRyaW0oKHN0cmluZykgKCRwYXJhbXNbJ2lkcF9lbnRpdHlfaWQnXSA/PyAnJykpLAogICAgICAgICdpZHBfc3NvX3VybCcgPT4gdHJpbSgoc3RyaW5nKSAoJHBhcmFtc1snaWRwX3Nzb191cmwnXSA/PyAnJykpLAogICAgICAgICdtYW1zX2Nvbm5lY3RpbmdfcHJvcGVydHknID0+IHRyaW0oKHN0cmluZykgKCRwYXJhbXNbJ21hbXNfY29ubmVjdGluZ19wcm9wZXJ0eSddID8/ICcnKSksCiAgICApOwogICAgJHNlY3JldCA9IHRyaW0oKHN0cmluZykgKCRwYXJhbXNbJ2NsaWVudF9zZWNyZXQnXSA/PyAnJykpOwogICAgaWYgKCRzZWNyZXQgIT09ICcnKSB7CiAgICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ21hc19haF9zZWNyZXRfJyAuICRjZmdbJ3Byb3ZpZGVyX2tleSddIC4gJ19jbGllbnRfc2VjcmV0JywgTWFzX0FoX0NyeXB0bzo6ZW5jcnlwdFByZWYoJHRoaXMsICRzZWNyZXQpKTsKICAgIH0KICAgICRub3cgPSB0aW1lKCk7CiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKICAgICRlZGl0SWQgPSAoaW50KSAoJHBhcmFtc1sncHJvdmlkZXJfaWQnXSA/PyAwKTsKICAgIGlmICgkZWRpdElkID4gMCkgewogICAgICAgICRkYi0+RXhlY3V0ZSgKICAgICAgICAgICAgJ1VQREFURSAnIC4gTWFzX0FoX1RhYmxlczo6cHJvdmlkZXJzKCkgLiAnIFNFVCBkcml2ZXI9PywgbmFtZT0/LCBlbmFibGVkPT8sIGNvbmZpZ19qc29uPT8sIHNvcnRfb3JkZXI9PywgdXBkYXRlZD0/IFdIRVJFIGlkPT8nLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIChzdHJpbmcpICgkcGFyYW1zWydkcml2ZXInXSA/PyAnb2F1dGgyJyksCiAgICAgICAgICAgICAgICB0cmltKChzdHJpbmcpICgkcGFyYW1zWyduYW1lJ10gPz8gJ1Byb3ZpZGVyJykpLAogICAgICAgICAgICAgICAgIWVtcHR5KCRwYXJhbXNbJ2VuYWJsZWQnXSkgPyAxIDogMCwKICAgICAgICAgICAgICAgIGpzb25fZW5jb2RlKCRjZmcsIEpTT05fVU5FU0NBUEVEX1NMQVNIRVMgfCBKU09OX1VORVNDQVBFRF9VTklDT0RFKSwKICAgICAgICAgICAgICAgIChpbnQpICgkcGFyYW1zWydzb3J0X29yZGVyJ10gPz8gMCksCiAgICAgICAgICAgICAgICAkbm93LAogICAgICAgICAgICAgICAgJGVkaXRJZCwKICAgICAgICAgICAgKQogICAgICAgICk7CiAgICB9IGVsc2UgewogICAgICAgICRkYi0+RXhlY3V0ZSgKICAgICAgICAgICAgJ0lOU0VSVCBJTlRPICcgLiBNYXNfQWhfVGFibGVzOjpwcm92aWRlcnMoKSAuICcgKGRyaXZlcixuYW1lLGVuYWJsZWQsY29uZmlnX2pzb24sc29ydF9vcmRlcixjcmVhdGVkLHVwZGF0ZWQpIFZBTFVFUyAoPyw/LD8sPyw/LD8sPyknLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIChzdHJpbmcpICgkcGFyYW1zWydkcml2ZXInXSA/PyAnb2F1dGgyJyksCiAgICAgICAgICAgICAgICB0cmltKChzdHJpbmcpICgkcGFyYW1zWyduYW1lJ10gPz8gJ1Byb3ZpZGVyJykpLAogICAgICAgICAgICAgICAgIWVtcHR5KCRwYXJhbXNbJ2VuYWJsZWQnXSkgPyAxIDogMCwKICAgICAgICAgICAgICAgIGpzb25fZW5jb2RlKCRjZmcsIEpTT05fVU5FU0NBUEVEX1NMQVNIRVMgfCBKU09OX1VORVNDQVBFRF9VTklDT0RFKSwKICAgICAgICAgICAgICAgIChpbnQpICgkcGFyYW1zWydzb3J0X29yZGVyJ10gPz8gMCksCiAgICAgICAgICAgICAgICAkbm93LAogICAgICAgICAgICAgICAgJG5vdywKICAgICAgICAgICAgKQogICAgICAgICk7CiAgICB9CiAgICBlY2hvICR0aGlzLT5TaG93TWVzc2FnZSgkdGhpcy0+TGFuZygncHJlZnN1cGRhdGVkJykpOwogICAgJHJvd3MgPSBNYXNfQWhfRHJpdmVyUmVnaXN0cnk6Omxpc3RQcm92aWRlcnMoJHRoaXMsIGZhbHNlKTsKfQokc21hcnR5LT5hc3NpZ24oJ21vZCcsICR0aGlzKTsKJHNtYXJ0eS0+YXNzaWduKCdpZCcsICRpZCk7CiRzbWFydHktPmFzc2lnbigncmV0dXJuaWQnLCAkcmV0dXJuaWQpOwokc21hcnR5LT5hc3NpZ24oJ2FjdGlvbmlkJywgJGFjdGlvbmlkKTsKJHNtYXJ0eS0+YXNzaWduKCdkcml2ZXJzJywgJGRyaXZlcnMpOwpmb3JlYWNoICgkcm93cyBhcyAkaWR4ID0+ICRyb3cpIHsKICAgICRyb3dzWyRpZHhdWydkZWxldGVfdXJsJ10gPSAkdGhpcy0+Q3JlYXRlTGluaygKICAgICAgICAkaWQsCiAgICAgICAgJ2RlZmF1bHRhZG1pbicsCiAgICAgICAgJHJldHVybmlkLAogICAgICAgICcnLAogICAgICAgIGFycmF5KCdhY3RpdmV0YWInID0+ICdwcm92aWRlcnMnLCAnZGVsZXRlX3Byb3ZpZGVyJyA9PiAoaW50KSAkcm93WydpZCddKSwKICAgICAgICAnJywKICAgICAgICB0cnVlCiAgICApOwp9CiRzbWFydHktPmFzc2lnbigncHJvdmlkZXJzJywgJHJvd3MpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm1zdGFydCcsICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAncG9zdCcsICcnLCBmYWxzZSwgJycsIGFycmF5KCdhY3RpdmV0YWInID0+ICdwcm92aWRlcnMnLCAnc3VibWl0X3Byb3ZpZGVyJyA9PiAnMScpKSk7CiRzbWFydHktPmFzc2lnbignZm9ybWVuZCcsICR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ3Byb3ZpZGVycy50cGwnKTsK]]></data>
	</file>
	<file>
	  <filename>/function.sessions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2Ntc21zJykpIHsKICAgIGV4aXQ7Cn0KaWYgKGlzc2V0KCRwYXJhbXNbJ3Jldm9rZV9zaWQnXSkgJiYgJHRoaXMtPkNoZWNrUGVybWlzc2lvbihNQVNfQXV0aEh1Yjo6UEVSTV9NQU5BR0UpKSB7CiAgICBNYXNfQWhfU2Vzc2lvbjo6cmV2b2tlKCR0aGlzLCAoc3RyaW5nKSAkcGFyYW1zWydyZXZva2Vfc2lkJ10pOwogICAgZWNobyAkdGhpcy0+U2hvd01lc3NhZ2UoJ1Nlc3Npb24gcmV2b2tlZC4nKTsKfQppZiAoaXNzZXQoJHBhcmFtc1sncmV2b2tlX3Rva2VuJ10pICYmICR0aGlzLT5DaGVja1Blcm1pc3Npb24oTUFTX0F1dGhIdWI6OlBFUk1fTUFOQUdFKSkgewogICAgTWFzX0FoX1Rva2VuU3RvcmU6OnJldm9rZSgkdGhpcywgKGludCkgJHBhcmFtc1sncmV2b2tlX3Rva2VuJ10pOwogICAgZWNobyAkdGhpcy0+U2hvd01lc3NhZ2UoJ1Rva2VuIHJldm9rZWQuJyk7Cn0KJHNlc3Npb25zID0gTWFzX0FoX1Nlc3Npb246Omxpc3RBY3RpdmUoJHRoaXMsIDEwMCk7CiR0b2tlbnMgPSBNYXNfQWhfVG9rZW5TdG9yZTo6bGlzdEZvclVzZXIoJHRoaXMsIDAsIDAsIDUwKTsKaWYgKGlzX2FycmF5KCRzZXNzaW9ucykpIHsKICAgIGZvcmVhY2ggKCRzZXNzaW9ucyBhcyAkaWR4ID0+ICRyb3cpIHsKICAgICAgICAkc2Vzc2lvbnNbJGlkeF1bJ3Jldm9rZV91cmwnXSA9ICR0aGlzLT5DcmVhdGVMaW5rKAogICAgICAgICAgICAkaWQsCiAgICAgICAgICAgICdkZWZhdWx0YWRtaW4nLAogICAgICAgICAgICAkcmV0dXJuaWQsCiAgICAgICAgICAgICcnLAogICAgICAgICAgICBhcnJheSgnYWN0aXZldGFiJyA9PiAnc2Vzc2lvbnMnLCAncmV2b2tlX3NpZCcgPT4gKHN0cmluZykgJHJvd1snc2Vzc2lvbl9pZCddKSwKICAgICAgICAgICAgJycsCiAgICAgICAgICAgIHRydWUKICAgICAgICApOwogICAgfQp9CmlmIChpc19hcnJheSgkdG9rZW5zKSkgewogICAgZm9yZWFjaCAoJHRva2VucyBhcyAkaWR4ID0+ICRyb3cpIHsKICAgICAgICAkdG9rZW5zWyRpZHhdWydyZXZva2VfdXJsJ10gPSAkdGhpcy0+Q3JlYXRlTGluaygKICAgICAgICAgICAgJGlkLAogICAgICAgICAgICAnZGVmYXVsdGFkbWluJywKICAgICAgICAgICAgJHJldHVybmlkLAogICAgICAgICAgICAnJywKICAgICAgICAgICAgYXJyYXkoJ2FjdGl2ZXRhYicgPT4gJ3Nlc3Npb25zJywgJ3Jldm9rZV90b2tlbicgPT4gKGludCkgJHJvd1snaWQnXSksCiAgICAgICAgICAgICcnLAogICAgICAgICAgICB0cnVlCiAgICAgICAgKTsKICAgIH0KfQokc21hcnR5LT5hc3NpZ24oJ21vZCcsICR0aGlzKTsKJHNtYXJ0eS0+YXNzaWduKCdpZCcsICRpZCk7CiRzbWFydHktPmFzc2lnbigncmV0dXJuaWQnLCAkcmV0dXJuaWQpOwokc21hcnR5LT5hc3NpZ24oJ3Nlc3Npb25zJywgJHNlc3Npb25zKTsKJHNtYXJ0eS0+YXNzaWduKCd0b2tlbnMnLCAkdG9rZW5zKTsKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdzZXNzaW9ucy50cGwnKTsK]]></data>
	</file>
	<file>
	  <filename>/function.settings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2Ntc21zJykpIHsKICAgIGV4aXQ7Cn0KcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19ESVJfXykgLiAnL01BU19Db21tb24vbGliL21hc19hZG1pbl91aS5waHAnOwokc21hcnR5LT5hc3NpZ24oJ21vZCcsICR0aGlzKTsKJHNtYXJ0eS0+YXNzaWduKCdpZCcsICRpZCk7CiRzbWFydHktPmFzc2lnbigncmV0dXJuaWQnLCAkcmV0dXJuaWQpOwpNYXNfQWRtaW5fVWk6OmFzc2lnbkJyYW5kaW5nKCR0aGlzLCAkc21hcnR5KTsKJHNtYXJ0eS0+YXNzaWduKCdzdGFydF9mb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdzYXZlX3NldHRpbmdzJywgJHJldHVybmlkKSk7CiRzbWFydHktPmFzc2lnbignZW5hYmxlX2FkbWluX3NzbycsICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ2VuYWJsZV9hZG1pbl9zc28nLCAnMScsIChpbnQpICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtYXNfYWhfZW5hYmxlX2FkbWluX3NzbycsICcxJykpKTsKJHNtYXJ0eS0+YXNzaWduKCdlbmFibGVfbWFtc19zc28nLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICdlbmFibGVfbWFtc19zc28nLCAnMScsIChpbnQpICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtYXNfYWhfZW5hYmxlX21hbXNfc3NvJywgJzEnKSkpOwokc21hcnR5LT5hc3NpZ24oJ2F1dG9fbGlua19lbWFpbCcsICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ2F1dG9fbGlua19lbWFpbCcsICcxJywgKGludCkgJHRoaXMtPkdldFByZWZlcmVuY2UoJ21hc19haF9hdXRvX2xpbmtfZW1haWwnLCAnMScpKSk7CiRzbWFydHktPmFzc2lnbignc2Vzc2lvbl90dGwnLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ3Nlc3Npb25fdHRsJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ21hc19haF9zZXNzaW9uX3R0bCcsICczNjAwJyksIDEwLCAxMCkpOwokc21hcnR5LT5hc3NpZ24oJ3JhdGVfcGVyX2hvdXInLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ3JhdGVfcGVyX2hvdXInLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWFzX2FoX3JhdGVfcGVyX2hvdXInLCAnNjAnKSwgNiwgNikpOwokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCAkdGhpcy0+TGFuZygnc3VibWl0JykpKTsKJHNtYXJ0eS0+YXNzaWduKCdlbmRfZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ3NldHRpbmdzLnRwbCcpOwo=]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/banner.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAlgAAAB4CAYAAAAuVYzDAAAqT0lEQVR4nO3dd0AUV+IH8O/usktfehFBkCIgAlFEBVQQjKgUTUzUGE1iLJd2ubRLcsnd75JLLvXSe2JM0RgTE8+Gioqxi12w0O2igvRedvf3x8LCurOwC2s5+X7+ct+8efNmGWe/++bNrGho2KsqCBIJF3dTrrtUpGcVw9oX6SnXqaGzWLi+qIf7pVuli/3tafsARCLh8p62L7i/op63b/D+ikz89xUqF9w107xvmv018Ljq1fEscFwZ2r7B+2vgcdWr41nguOrV31eo1MDjytBynq94vlIX83wlVM7zVc/bF4lEEOupTUREREQ9xIBFREREZGIMWEREREQmxoBFREREZGIMWEREREQmxoBFREREZGIMWEREREQmxoBFREREZGIMWEREREQmxoBFREREZGIMWEREREQmxoBFREREZGIMWEREREQmxoBFREREZGIMWEREREQmxoBFREREZGIMWEREREQmxoBFREREZGIMWEREREQmxoBFREREZGIMWEREREQmxoBFREREZGIMWEREREQmxoBFREREZGIMWEREREQmxoBFREREZGIMWEREREQmxoBFREREZGIMWEREREQmxoBFREREZGJmN7sD1Lf987U4JE701yp74pH1OHzo0k3q0Y31j1ejMGGij1bZk49txZHDJTenQ0REZBI3LGDNmDkcz784QXDZ559ux7eL9nS5/quvJSEpZYjgsicfX4E9e05324f5C6LwyGOjBZfde9d3OHOmvNs22olEwKgoH0yYMAjBg93h6mYDa2sZWlsVqK1pRklJLc6fr0RBfimOHbuMY1mX0NysMLj97sybH4mFj44UXDZj2jKcOVNhsm0ZKniwCxb/eJdW2e5d5/Dc0+k3rA/Tpgfjmee035fTpyoxe+ZqvetMvXsQ/vriKK2yixdqMP3uVdeji0RE1AfcEiNY02dG4Mcf9qGlRTiAODlbY8LE4F5vJzlVOKCpl4Xg0493GtSOq5st3ngzCeF3eOgsk8nM4OhkBkcnKwQFu+LOCYMAANlZlzB/7q8967iAySlBepclpQThs0/2mmxbREREZJxbYg6Ws7MNJiTqD1D3Th8GqVTSq20MG+YJT097vcuTUkIgFou6bcfSUoovv75XMFx1RSzpvm1DDR3mAU9PO73LJycHGbQvREREdH3cEgELAGbdHylYLjM3w7R7h/a6/ZQpoV0ud3a2RlS0T7ft3D87Al5e9r3uT28kp3Y9mufsbIVRUQNuUG+IiIjoWrfEJUIACAp2x7AILxw+dEGrfHJSCBwcrHrVtpWVDAnjB2mVlZbUwsXVRqssZcoQ7N7V9VyucfEBOmW7d53Gkh8O4lRRGWprmyG3s0DAIBeMGOGFiZOCdLbTG5ZWUiQkaE8KLy2pg4urtVZZSmow9uw+a7LtEhERkeFuasAqLa2Fi0tH+Jh1/widgHXtyNa16xhi/J2BsLKSaZUt++kQ4hMCEBrWcalvbKwf5HYWqK5q1NtW/2suzVVVNeK5p9dAoVC2lYhQXlaPfXvPYt/es/jsk92ITwhAdIyPUX3WJ2G8PyytpFplPy87inHxfggNc9eUjYn1gVxugZrqJr1tLVk2HQGDnLTKUicvQUlJnVZZbNxAvP2fRK2y3349gffe2QUA+McrcZicrB1g28WMHoC9BxZolR05fAmP/SlNb7/aBQxywqw5oRgW0Q/29haoqmzEsewSLFt6DCeOX+12/evh+6VJ8A9w0Cq7O2UlSkoatMrGxHrhzXfGapWt/C0fH7x70OBthYW7YMZ9gQgZ4gS5nTmuljZg/77LWLY0F8UXa3u+E0REdN3d1EuE2/7IR2lpxwdFbFwA+ve317weFTUQvn7OmtfZWReRl3vF6O1cO7ldqVRh4/qTWLf2hFa5VCrBxEldX367dmZTfV1zp3ClS6lUYcvmfPzrlc1G9Vmf5BTt/imVKqRvyEfaulytcqlUgsRJuqNt3VH1qnemM+WuICz6PhWJE/3g4mIFqVQMZxcrjEvwwVffJmNysn/3jdwgquvwps2aE4xPvojH2DhPODlbQioVo5+HNabc5YclP09EXLyX6TdKREQmc1MDVmuLAr/+ckjzWiwWYeasCM3r+2drj14tW2r4t/92np72GDrUU6ssc+8ZXL1ah83puTqPTkhJDemyvaJTZVqv+3nI8Y9XJtyQeVmenna4Y6j25PrMvedw9WodtmwqFNgX4++8vB5hwVjjEnzw/N9iIJUKH55isQjP/y0azi69u3RsKioTv2l3Jnrj0cfD9d6oIJNJ8OrrUQi/w8Wk2yUiItO56XOwfl9xBPMXxMDcXN2VqVPD8eXnu+DqaoOoaF9NvUuXqrE1I6/LRy0ISUkdAtE1n1PtI1c1NU3YuaNIa35WULAbAgJcUFBQKtjemlXHERra75pthCAlNQSXLlWjsOAqzpwux8mTV5B1pBhXr9YJttMTSSnBOvuyvm3kqqamCbt2nEH8eD/NssAgF/gHOKGwQDsUdqkHYeG1V7bhtVe2GfgcrO7vbpx272BkHb2C99/dizNnqhAa6orX3xwHewcLTR2ZTILEiX74acmxbtsb6GuP3fsfNHh/jGXqTJoyxQ8H9l/GJx8ewYXzNfD0ssUTfxmKESM7LgGLxSK8+HIkZs/YCKXyFkjFRESk5abfRVhV1YB1azs+JK2sZZgyNQyzZkdqhYlffj5k9AeJWCxCUor2iFRtbRO2/1GoeZ12zWVCAEiZon8Ua/WqY9i4IVdwWb9+cowZ64s5Dw7Hm28nIS19Ab79fgbG3yk8P8kYYrEIk5O1n31VW9uM7dtOaV5fe5kQAJJT9T8vS8itMIJVU92E555KR0F+GVqaFTh86BK++uKQTr2gYCeBtW88U79nly/V4cXnduL0qSq0tChx+lQV/vbXXbh8WTuse3rZYmSUu55WiIjoZrrpAQsAlv10QOtD6v45kUhK7hipqq9vxqqVWUa3GznCG+7ucq2yzel5aG5u1bzes/s0ysvrtepMnDwYZmbCb41KBfzj5fV4/V+bUXyxqsvti0RAaFg/vPH2ZLz7fkqvnuU1PNIT7u62WmVbNhVoXRbcu+ccKsq1J1tPnDRI774IUd4CCWv1qjzU1bVolZ05XalTTy43v0E96prKxCNI69NO61zubW5WIH2D7l2hwyPdTLptIiIyjVsiYJ05XYa9ezpGYtzd5ZpLhgCwdvUx1NbqvxtOnxSBy4lp67RHrBQKJdI35GiVOThYYvQYX3Rl9arjmJq6GAse/gVff7kXu3eeRskV/Xd2xcb5Yv7CEUb0Xlty6mCdsvXXjFgpFEqkb8zXKrN3sETMaG+Dt2PqsNATRYW6P/NTX9+iU2ZMcLyeTB1KCwsqBcuLCnXLPb1sdSsSEdFNd9PnYLX7ael+RMfohhqlUoXly4yf3G5jYy74zKpF391n0PopU4ZgW6dLiUJUKiDraDGyjhZrypycbDAyagAemhsJn4GOWvWnTB2CLz4z/idsbGxkiBun+958vXiaQesnpwZj+7buf6tRnxv9VPirV+t1yhSKnoeYrn+LUCT4W4S9JenFeyYUJgHojOoBgLWNVKAmERHdbLfGEACAzL2nceqU7rONdu0oxPnzxv9w8YSJQVqjYMaKGT0Qjk7G36VWVlaH9ety8MRjK3WWOTpZwbYHl7XuTBzUq32JHj0Ajo6G7YtEontI3Oi79W6FUTRjCL9nlj1uz8pKODRZW+uW19UKhzEiIrq5bpmABQDLlh7QKftJoMwQqald/zROdyQSMSZP1r0s9+bbybjr7jBYWHQdeFpalIKTn1X6H5mlV08et9CZRCLGxMm6E+2Fnt9lJfAh7ufnqFPWVwmNpFlZ6R4Lvn72Pd6Gf4Dwun7+uuUXztf0eDtERHT93FIBKy3tOCorOyZp5+eX4NDBc0a34+PjhCHXPEqhJ5IFnonl7e2Al/4+HpsyHsEbb01G6tQh8A9whq3cAhKJGPb2loiO8cGHH0/ReaRCTU2T0XPJfHwcEDKk93eKJQncTVgl8MR6P3/tMGXvYCkYzoRcOzEbEB51+V9WVaX79/Pz136yu72DOSZM9OnxNiZNHgiZTPuGCJlMgsRJunPpDh0s6fF2iIjo+rll5mABQHNTKxLiPtIq68lMltQpupPbl/98GP95JwMivS2KsG7DQrh1ulPPz98ZwYPdkHNS9+nxlpZS3DkhEHdOCDS4Xzu3n+q+0jWEJrf/sjwL77+785pS7f1as/5BuLl1/KSQn58jgge7Iudkxwdybk4pRo7SfiL4U8/EoOxqA/JyS+Hv74S/vjim29G6dmUCc6cGh7hi6LB+OH68BC0CAex/TV5uGUaM1A7vTz4VgfKyRuTllsPP3x7PPh9p8HsmpJ+HNd58dww+/Uj9HKz+njb481PD4O6u/XuTFy7UInPPpR5vh4iIrp9bKmCZgvp5UbojTxlb8rpd94+tBZg5a5hWWeqUIYIBy1i1tU346stMo9YRi0WYlKQb4LZuKep23W1bizDjvnCtsuTUIK2AlbY2D3MeHKo1id3d3QbfLJ6qea1UqrDy95O4e5pu0LtWZWUjigrLtUbBZDIJPv8qWaveC3/djB3b/jd/iHr9ulO4f06I1nvm5m6NL76ZoHmtVKqwamUBpt5t/E8VAcC6NUVITvXDj8sm6a2jVKrw9r/38yGjRES3qFvqEqEpRMf4wtlZ+8egy8rqkHX0Yrfrbs0o0CmbMDFQ63LN1q0FKC/THanpytkzFXhs4UpcKq42ar2oaG84O2uPWpSV1SM7q/tRi60ZuqNlExIDIO20L+fOVeKD93brfVBmc7MCr/7fVuzbe97gPn/x6e39oX/+XDU+/uBgl+/Za6/swb7Mno8sbdp4Fl99nqV3Gy0tSvzrn5k4ekT41waIiHojLcO4B1STsNtuBCt1iu7k9q0Z+QZ96GcdvYiysjo4OXWEGrncArHj/LE5XT0CtujrTCxetA9DQj0wfLgXBg92g9cAezg7W8PKWgZA/QPQV67UoCD/KnZsL8KO7afQ2mp86EgRuDz4x9Yig/YlO+sSysrq4dTpTkhbuTli4wZiy+aOx0+s+OUYCgvKMHNWGELD3CGXm6OivAEHDlzETz8eRVFROWLjBhrc5927zmHhw6sxY1YoQkPd4ORkqRXqbge//ZqHwsJKzJgZhJBQF8jlMlRUNOLQgctYtjQHp4oqMSa2dz/GvPTHHBw/VoYZ9wVicIgTbOUylJU1YH/mZSxbkouLF/U/c42IqCc6B6v2fycnCP9yCXVPNDTsVT2f1vrnKnVVrrtUpGcVw9oX6SnXqaGzWLh+V3Owui0X6ZYL7m9P2wc6TYzvXTsdpQLlop63b/D+XjvDX099g/++QuWCu2aa902zvwYeV706ngWOK0PbN3h/DTyuenU8CxxXvfr7CpUaeFwZWs7zFc9X6uK+fb5Ky+j+TvXkhDyBVXm+0lcuEoluvxEsIiIi6p4hwardugz1fODk8d3PZya1224OFhEREemXlhFsVLjqbN0Ww++c7+s4gkVERNQHpGV0fze4IdpDVvL4/G5q9m0MWERERLcxY4PV1MRirEr36Lbeui3qh1AzaAljwCIiIroN9SRYXftvBq2eY8AiIiK6jaRl6D5suyudg5XQMkNCFtA5aOk+U7Iv4iR3IiKiPqqrcNW5jiH1SBtHsIiIiPqYngQmYy4bEkewiIiI+gxTjEZxNMswHMEiIiK6zZk6FHE0q3scwSIiIiIyMQYsIiIiIhNjwCIiIiIyMc7BIiIiIp35VJzM3jscwSIiIurjhCarcwJ77zBgEREREZlYnwxYX33zGJb/+hzGjDHNL4tT3/XxZ/fgh6WzER0z8Kb246NPU/HdkumIivG+qf3oLRtbGb79IRXf/pACXz+Hm90doj6hq5EqjmL13A2bg+Xv74EpU6MQFOQJGxtL1NU1Ii/3AlavzkR+/kWd+o89noS4uFAAwP59eXjvP6uM3uYLL07DsGG+SE8/gsXfbjFqXV8/NyQlRSA0zAcWFlJcLa3GH9uOY93aQ1CpVEb3xc/fHalTIhAU6AFrGwvU1TUhP68Ya9YcRkH+JU29N9+eBW9vZ+zelYfPPt3UVnYfvL2dAQAKhRKNjS0ouVKFw4fPYMP6o6ivb9baVj8Pe6SkDMOQUE84OFijpVmB8opa7NyRhzWrDhvcZxsbC9w7PRJDh3rD3sEKilYlamobcSz7AhZ9vV2r7sJH4jA2Vv07VAf2n8ZHH2q/32+8eTcGeDsBANauycIvyw9ols2dNxrxCUEAgBPHi/HWGxsAAP9+8y4M8HbEnt1F+OIz7e0Zaspd4Zh2z1BcuVKDvz6zEgDg7GyD9z+aBgD4dflhrFt7HABwz/ShSJ0SinNny/H3l9J6tL2uzF84CmPG+gIADh04j08+2mV0G08/Owbhd3ggY0sBlvxg+N/ydvPP18bCy0sOANiQVojfV+Rpls15MBSx4wYAAHJOluG9d/ZprTt3fhhiRnsCAA4fuoIvPtF+H//vXzHw8rJta/sUVv7W8QO2sx8cjNg4L03b7797CABgYyPFlLv9ERbmAjt7cygUStTWtuDk8TL8+N1JvfthbSPF1Lv8EBrmfM165fjx+xxNnSl3+SI0zElTp662FSeOl2PJ97matnwGyjFx8gD4B9jB2kaKurpWFBVWIX3DOZwqqjHi3SUiU7ghAWvkqCA89dRUtLYq8Pln65CVdQohQ3zw5z+nIGJ4AD75ZA127+o4CVlayhAVFaR5HTE8AHZ2Vqiqqr8R3QUAzJg5GhvXH8a3i7aiXz8HvPT3abj//rEwM5Pgvyv3dd9AJyNG+uPJv0xGa6sSX36+CdnZ5zA4xBOPP5GIYRG++OzTdOzZ3f2vkO/elYcvv8iAh4cDps8YhWn3jMCYsUF49Z+/o6JC/d4MGeKJ555PglQqwW8r9mPbVvVJOjCoH3z9XI3q9yOPjsPQYd5Y8et+rF9/DLa2Fggd4ongwf206llYSjFylK/m9bAIb8jllqiubhBsN2F8MNasPoqGhhbY2VlizNgAo/pljNyTlwEAbm62cHS0Qnl5PYIHu2uWBwW7aQJWcLC6PCfnisn7YWEhxYiRAzSv7xjWH3K5BaqrG02+rb4mLt4H69cVoaGhFXK5OaLbwpMQCwszDI/sOH7D73CFrVyGmupmwfpx8QOwIe0UGhoUkMtliI7pL1hv7vwhCAt3waqVhdiSfhY2tjIED3ZCYFDXo3Bz54UgLNwZq1YWYcum87CxlSJ4sCMCAzvWe2heMMLCnbF65SmtOoMC7TV1hkW4YMGjIWhtVeL7b3Nx8ngFAoPt8fCCYISFO2Hxolwc2FfSZV+IyLSue8CSycywcOFESCRipKXtx9696g/8A/vzsW7dftxzz2jMn5+IQwcL0dioPsmNHj0Y5uZS1NQ0oLGxGS4udoiNDcWaNR3B5udfnodYLMLbb/6Ow4eL4ORki8+/eBQA8MzT3+KZZ6bA00s96pOYOBSJiUNRU9OABfM+07Th6eWEl16+BwGDPFBf34SVv2UiIyMbAPDmv39vqyVCUdFlZGedQVR0ICIj/Y0KWDKZGeYvSIBEIsb6tCPIzFT/yvjBA0VIW3cY0+4ZiXnzxuHwodNobGzptj2FQonz58vw4Qcb8O57s+Dubo8HHhyDjz5Mh5mZBI8+Ph4ymRl27szDf1cehAgiAMC+zCLsyywyuN8SiRhh4epv6gX5V9Dc1Iqyplps35aL7dtytepGR/vD3NwMNTWNaGxsgYuLLcaMDUDaumyddisq6uHgYIXx4wdj7dosTJw8BFKpRFNuakVFpWhuVkAmkyBosDv27DqFoGA3qFRA8cVKDAp0hVgsgpmZBL5+6hG23Bx1KLO2lmHq3WG4Y6gnHBwscfVqHbb/UYhN6blQKrVHMb0G2OOF2AQMHOiEiop6/Lr8KI4cvqBZHhXt3fYeNaGpsRXOLtaIGTMQG9JyNHUW/zATYrEIH7y3A1lHi+HoaIX3P0oFAPzthQ144slo9O9vBwBIGB+AhPEBqK1txp8fXaVpo39/Ozz7/Fj4+Tuhob4Fa1bnYPsfpzTLP/okGXI7C6Sty4W3jwP8/BzR0NCCNatysX3baYPf11dfj4fXAHVfFAolSkvrsX3bGaRvKNTU+fDjSZDbmWP9unx4+9jDt21ba1fnYce2swAAV1drPDA3HAN97XG1tB47tp81uA8AUFnZCHt7C8TFe2NDWhHuTBwIqVSsKb/WyCgPmJtLUFvTjMYmBZydLREd0x/pG3T3vbKyCfb25ogdNwAb15/GnYk+bW2ry9uJxSKEDFGfa04VVqK5WYHyskbs3nkRu3fqjs5rr6c+5k4VVbWtp8DuncXYvbO4mzqXsHuneuRbKhPj/gcDIRaLsG1rMQ4dKAUAHD1yFZvTzyM51QezZgcg+2gZmpsURr2/1DdMTSzWeymQdxL23HWfgxUwqD9sbdUfnMeytU9iWVnq19bWFggK6vjWGZ9wBwAgc28u9uxWfwCNSwgTbF8F4ct1zz77HQ4fVn+wpKcfwYzp72L+vE+16kSOCMBXX6Zj0Teb4eRki3kLxsPOTvdDXiwWwdvbBQBQW2vciENAQD/Y2loCAI4fO6e17Fi2+rWVtTkCg4y7zq1QKHHwgHr/hkUMhEQihn+AGxwcrAEAmXsLu1rdoPabmloBAM/+dRKe+HMC7rwzBG7udjp1x8WrRxv37zuFzL3qEBc3LkinHgDs3VOEqqoGTJw0BHK5JeITglFSUoMjh84J1u+t1lYlCgvU39zbR6iCg91x4UIFDh44CwsLKXwGOmFQoAskEjFUKiAvtwQSiRgv/SMRiRODcWDfWTz5xG84VXQV990fgfvnDNfZTkSEF775ai8+fH8b3NzkePKpsfD0stcsjx3nDwA4uP8c9mWqQ0RsnK9OOwCg7wr0yy9uRNZR9ckuY0sBHprzi1a4AoCI4f3x3bcH8eP3h+HoZIUHHhoGuZ1u0IiI6I/vFh3Cj98fgaOjFR54aCjkduY69fT559+34uEH/ot5D/4XL72wBSqlCjNmDkHEcN3jeFiEB77/9iiW/JAFR0dLzHkwHHI7c0gkYjz17EgED3bGpo1FePuN3UbPu9qfWYzq6iaMnzAQtnIZ4uK9UVpaj6NHhEchx4xVf2k4ePAyDuxTB5TRsV562r6E6upmjJ/gDVu5DLHjvFBa2oCsI9ojQUqlCs3N6uDy+F+GYsEjYYiL94Kra9dfGLTWezIcC/40BHHxnnB1tRSs89iTYZj/pxDExffXquPrawcbGykAIOdEhdY2Tra9trIyg3+A7v9dImOteOMOrHjjjpvdjf8J1z1g2dlZa/5dXaN9yaim0yWk9nre3q7w81N/EO7enaMJWB4ejggK1h36VymNnw/VbmtGNsrKanD0iDroicUiuLnZ69SbPWcsPPo7QqFQ4rcVe43ahtyu40RYU6Mdzmo6vR92cuNHbyoq6gAAUqkE1tbmsLfvaKOqsveXU39augcKhRLm5maIivbHQw+PxnsfzMSjj8dDJFKPjA0Y4IiBvurwmbmnCJl71AGrXz87BAa567TZ0qJA+sYTsLO3xPMvToSVlQzr12VDqVT2ur/65LSNSAUHu8PJyRrOLjbIPXlZcykwKNgNQW3h68L5CtTWNiE0zANeXvZQKJRYvSobDfUt2LJJPc9nXPwgWFpKtbaxY0cRysvqkZtTgry8KxCLRYiN8wOgHt0aONARALAv86wmYLn3k2NQoItOf3syx6/d9m2nUF5Wj2NZ6n0Wi0VwdbEWqHca5eX1OJbduZ6N0dtTqYDSkjocP6YOHUOH9dOps2P7GZSXN+BY9hXNtlxcrBEY7AQ3d/U20zcUob6+BekbDB9lBdTHU8bm07CzM8fTz46EpaUZ0jecgkrgcPL0soXPQHXIOLDvEva3BSx3d2sEDNINduq2z8DOzhxPPRMBS0szbNpwWmf0EgB+XZ4HhUIFc3MJIke6Y9acILz+dgweXjhE839FyIrl+Z3Wc8Os2YF4/a1oPLwgRLPeiuWFWnXumx2I194ahYcXDIZIJIKtvONYrK3VHgXv/LpzPep7upusbshIVedgteKNOzgBvhvX/RJhdXXHB73c1lJrma2843VVlTosJIwPBwBUVNQiJ+c8oFLh4sUy9O/vhISEcOTmXICptIcQhaJj2Fws1j4ZTp8Rg8lJEWhubsUHH6xDfr5xw6Wd5yHZ2mqPJNh2ej+qqo0PRO2jVS0tCtTVNaGyU6iys+/95bZtf+TixPGLGB45EKGhXgge3A8ymRliRgdg964CZGedx7j4YADqS3+5uZehUqlQXFwJDw97jBsXhLzcyzrtbtl8EqlTwuHj44Tq6gbs2J6PWfeP7HV/9Wmfh+XqZouY0epRo5ycKyjIL0FriwLBwe6wspKp67aFLmdn9XsrkYjxzeJZWu1JJCI4OVnjwoVKTVlVZUd4rq5S/9vJSd1GXNvoVWVFA/JyS6FSqXCpuBr9POSIHeeH/PxSk+1rVdu2WxUdCUMk1v2AN7SeEJEImJQ0CNExA+DkZAlzi47TiIOD7mhZdVUTAECh6AgmYrEIjo7q47+5WYHGxlatusb4I+MsJiX5Y4C3HDXVzdi98zymz9S9Q3hsrHoOXGVlI/LzKqBSqXD5Uh3c+1ljTKwXCvIrdNbZtvU8JiX5drS96yLunRGoU2/XjovIOVmOYcNcMTjECYFBjpDKxBgV1Q/79l7CiWNlgn3ftbMYOTkVGDrMFYND1HOv1Ou5Y1/mZZw8Vo7dO4uRm1OOocNcENypzsgoN+zLvIzamo4Q1T6SJfS6prr7KQh0e1uV7tHjS35Co1Yth1whjeDcPn2ue8DKz7uAmpoG2NpaIjRsoOayIACEh6tvba+ra0Ru7gVIpWYYMyYEAODgYINffn1Bq61RUUH4bvEW1Nc3QalUQiyWwMxMAkB7pEyjFyMBAHDPvVG4e9pINDe34p23V+H4ceMvYxXkX0JtTSNsbC0wJHQAsrM72ggNU5/w6+uakJdr3EEvkYgRGakeITl86DQUCiUKC66goqIODg7WGDnSD0cOnzG6v9cqLa3BhvXZ2LD+GJycbPDhx7MgFotgaSmDVCpB9Gh1eHBwsMKSZQu01h0xciB+/GGPzl2O9fXN2JqRi8lJodi08QRaWq7vvJDO87AmTg5puwx4GS0tChQVXUVgkCukUvVx1D7aVVamDvzNzQo8smA5FJogIhxC7DrN92m/JFdWVgepVIKoaB8AgL2DJb5bcp/WepEjBmDpkkNoqG+BUqlqmw8m1mqns14e0iYRfkc/3DM9BE2NrXj91e0oLq7G7AfuwLiEgTpfULpSXq7+8iGTSWBhYYbGxlajLlO2q69vwY5t5zBhoi+2bD6Nlhbd4SupVIxRUepv2/b2Fvjmu4lay4dHuuPnpSfR0KB9LKrbvoAJE32QseWsYNvtyq42YMums9iy6SwcHS3xxruj2/6vdH2aVa93Dls2nYOjowXeeCdavV6n4Fp2tRFbNp3Hlk3n4eBogTfeidLUycq6irraFljbSBEc4oCTJ8o16w0OcWjbj1YUFlR12Q+6fSQlnEBaRojgst6ELEMkj8+HvvNkX3PdLxE2N7di0TcboVSqkJgYgaioYFhamiMyMgDJySOgUqmwePFmNDY2Y9SoQFhbW6ChoRmz7nsX0+99CzPufQszp7+Fyso6yGRmGD1a/c30UrH6JBIW7gMrK3OkpETqbLt9VMjFxQ4SiXG7OvWukbjn3mi0tCjwn3dX68yfavf0M8n4+ZensfBPd+rd/28XZUCpVGFCYjhGjQqApaUMw4f7Iil5GFQqFb77brtBE9wBdbDy9HTEU09Pgpu7HUpKqrHkx50AgNZWBb76IgMtLQqMGRuIqXcNh52dFeRySwyP9MV9s6IAAH95OhE//fwoFiyM63Jbr/zrLowZOwiurnJIpRL07+8AkUiEhoZm5OddxoiRvrC2NkdjQwsemrMIs+/7GrPv+xpzZn2Nqsp6yGRmiI72F2x72U/7MHvWIqxeddSg/Rby5F/GYclPczF/QUyX9TrPw7KxMcfFi5WoqVGPlOScvAILC2mn+VfqEazsrGJcuFAJmUyC6TOHwtJSCkdHK0TFDMSTT8XqbGPsWD84OlkhMMgVgYFuUKlU2Ln9FIaP8IK1tQyNjS2Y99ByPDR7GR6avQxz5/yMqqpGyGQSREX5AAAuX1bfSj8k1B2WVlJMmqw7j62mWt1vZ2drSCTX5yT2+J9HYfGP0zB3XoTg8vYAqFSq0KpQwqO/HMNHGH+pIC+nDCVX1EE2cZIfrKykSJzk16M+/7o8B/MfSkPaWuG5hxHD3WFlLUVjYysemb8R8x/agPkPbcDCuRtQVdUEqUyCkVHC+7Dil1wsmJuOtLWnBJcDwIsvj0BUjAdcXCxhZiZGPw9riEQiNDa0ojC/sov1IhEV3U94vQL1ei+8HIFR0e5wbqvj4WHVqU4VWpqV+GlJPpRKFeLiPRAR6QILSzOED3XGnYleUKlUWL6sEE2c4N6nJCWc0LusJ5f27n3pqE7ZtaNX6nBF7W7IYxr27s3B1bJqTJ0ShXnzE2FtbYH6+iYcP34Wa1ZnIjdXfdkvPl59efDo0VNobe04GahUwOFDhYhPCEd8Qjg2bTqCr79Ox4IFiRgXH4agIE9s3ZqN6Jhgre2uW3cQPj6uCA31xrKfn0VW1ulOdwd2bdo96jAilUrw0svTNOU1NY1YMP/zjopt8yS6mkOUmVmAsrJfkTplOObOGwdra3PU1zfhxPHzWLv2sMGjVzGjAxEdMwgN9c0oLa3Byt8PYH3akbYRInU/srPP46UXf0FK6jDEJwzGtHsioWhVoqKiDju2q+/+a7+zUNHN/LWqynpMvSsCdnaWkMnMUFfXhGPHzuO/vx1CRUUdYuPUASAr6zxaWzv2X6UCjhw5h7hxQYgbF4gtW/Q/B8gQ0TF+iI7p+OCtrW3CowuXaeaodL70pE/OycsYHNJP8+/O5VPvVt9A0Tl4KRRK/Ptf6UidEoqhEZ6ITwhEVVUDcnOu4PffsnTaP3zoAh55NAbePg4ouVKDFb8exblzFZg1Wx1SsrMuobVVqflep1IBR49cRGycH2Lj/LA1owDfL96PB+dGYsxYXwwa5ILt24owctQAre1s3JCHAd72CBnijm+/n47jxy7jvXd2GPhOGqitkwo9x/Shg8XYnF6I6NED8PL/xSI/rwwnjpVgVLTwZHF9FAolPnwvEw/MDUfiRD8Mj/TA9m1nMSpK/2MWemp02+T248dK245V9U6qVED20RKMifXCmFgvbNt6vkftV1c1IznFF3K5DDJzCepqW3DyRBnWri5CZaX+y55VVU1IShkosN5pVFY2QQQRqqqakZTic02dcqxbfUbT9qEDJagob0TiJG/cN3sQrK3NUF/fitycCmzaeB6FBdU92i/635aUcBJpGcIP1O7JSJY0ogQth1w1/+6M4UqXaGjYq3o+nfR9O+66XHepSM8qhrUv0lOuU0NnsXB9UQ/3S7eK+sWnn86DrdwKL724FMXFFYa100V5x3zY3rXTUapb/tGncyC3tcRLL63ApeJKo9oX/PsKVjfx31eg/IOP74VcboG/v7QGly5VtZWa5n3T7K+Bx1WvjmeB48rQ9g3eXwOPKxGAd9+fBFu5OV75RwYuX6o1vD8i3fLe/H0FSw08rgwt72vnK4P//95C5yuh48rQ9m+l85Xwrt2Y85W+kAVoT24XGtnqbjkgFK5u3PnKkO3ejPOVSCTqmz+VYyqenk5wdpFjyY/b2sLVrc/T0xHOzrZYsmS3QLj639Hf0x7OzjZYumS/JlxR7/XvL4eTsxV+/ikLly/x6d9Et4OkBP1XEQy9XGh4uKJ2HMEypj/8RshvhL39+wqVCxxXhrbfl74RAuAIljH94fmK56tr6hs6knUt48MVz1ccwSIiIuojejKSpT9c5QmWUwcGLCIioj7CmJDFcNU7DFhERER9SFJCjt5l7aGKT2nvPQYsIiKiPsaQkCWEo1eGY8AiIiLqg7oKWUKSExiujMGARURE1EcZGrIYrozHgEVERNSHdReyGK56hgGLiIioj9MXspITcm9wT24fDFhERESEpGvCFMNV7zBgEREREYCOkHVt2CLjMWARERGRBsOVaTBgEREREZkYAxYRERGRiTFgEREREZkYAxYRERGRiTFgEREREZkYAxYRERGRiTFgEREREZkYAxYRERGRiTFgEREREZkYAxYRERGRiTFgEREREZkYAxYRERGRiTFgEREREZkYAxYRERGRiTFgEREREZkYAxYRERGRiTFgEREREZkYAxYRERGRiTFgEREREZkYAxYRERGRiTFgEREREZkYAxYRERGRiTFgEREREZkYAxYRERGRiTFgEREREZkYAxYRERGRiTFgEREREZnY/wO6b/acvuHtywAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/icon-192.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAH00lEQVR4nO3dSXLbRhTG8dcp+xI+hCsuLzSRkkXSceYolTjOdJLsvMlJMo/O4FkzNXmXU3jhSygLCjKIiWigB5Dv/6tyScLQ3QTfhwYFJTA3rt+XCZP7akRETMny5OfMejPVjrlYnNkn3ZYpXn65V259ef+FfZiicaX6MMay/0xbpmS5Vf8VfZh8m/X6f72+rO/J8bfpP72m6vjb9F+yPPf6Sl5jjfe/vPaMvCGAYgQAqhEAqEYAoBoBgGoEAKoRAKhGAKAaAYBqBACqXYk9gBrOYw8ArZnZm8TRxQBQ8Isn+552JhBdCQBFr0v6/Y4ahpgBoOghEjkMsT4EU/woErwuQs8AFD5mSWokyGwQcgag+GEjSL2EmAEofDTlfTbwPQNQ/HDBWx35DADFD5e81JOvAFD88MF5XfkIAMUPn5zWl+sAUPwIwVmduQwAxY+QnNQbfw4N1VwFgLM/Ymhddy4CQPEjplb1xyUQVGsbAM7+6ILGddgmABQ/uqRRPXIJBNUIAFRrGgAuf9BF1nXJDADVCABUaxIALn/QZVb1yQwA1QgAVCMAUM02AFz/Yx7UrlNmAKhGAKAaAYBqBACqEQCoRgCgGgGAagQAqhEAqEYAoBoBgGoEAKoRAKhGACLbO34/9hBU68qT4tXZP/ng8vskBJtrD2MNRy0CENj+yYel6/aO3xMRkc21R6GGox4BCGT/5KPa2+4dvysiIoO1x76GgwsEwLODk63G++4evyMiIoPeE0ejQRYB8OTg9GNnbe0evS0iIoPeM2dtYoIAOHZw+om3tneP3hIRkWHvubc+tCEAjhyefhqsr52j2yIiMuxtB+tzURGAlg5P70bre+doJMM+IWiDADR0ePZZ7CGIiMjOeCQiIsP+TuSRzCcCYGl8di/2EArtjIciIjLq70YeyXwhADWNzz6PPYRatscDEREZ9fcij2Q+EIAZxmdfeG1/685LefD0mvN2t8ebIiIyWt933vYiMTeu30++zX01IiJmavn55fJku+n1l2snP5uLxZl90n2Y4uWXe+XWl/df2IcpGleqD2MK+z968aX4tHXnZW6ZjyAkbq8fSPHxrzj2Irn3t97xT+1jyo991ftvUvun28y1Vf7+J29wRe0ZApANwNGLr8S3ouJP+AyBiMjt9UMhAK9fOwG4CMDRi6/Ft6rCz/IfhLEQAMN/DxDC1p2XVsWf7AP/CIBnbQq5SXBghwB44rJ4CYE//BrUMV/FmrTr+7OBNswADoU4U3NZ5BYBcCBGURICN7gEaiF2EXJZ1B4zQEOxiz+tS2OZN8wAlrpabMwGzTADQDUCANUIAFQjAFCNAEA1AgDVCABU4z5AJNnf13f1/sKiIwCBld2oSpYThLC4BAqozl1a7uSGRQACsSlsQhAOAYBqBCCAJmd0ZoEwCABUIwBQjQBANQIQQJPf7XM/IAwCANUIQCA2Z3TO/uHwpxAB1XkWwKzi//XbN6d+vvvNfy1HpRszwBzJFn/ZMtRHACzFukFVVejJOm6e2SMADYQutDpneWaCZgjAhd7Sd1bbz/PZdvJwDIgQgCm9pe+ttp/HEEwekYQEAchY5BBQ/HkEoEBv6Qer7X2HoM6vOq/efFW5fvKUSGQRgBLzFAKKvzkCUKG/9KPV9jFCMKv4eVB2NQIwQ3+5OyF48PSaXL35aupflVF/39tYFgUBqKG//JPV9j5CYNvmqL/nfAyLiADU1IUQ1EXx10cALPSXf7ba3lUIbNoZ9Xed9KmFuXH9fvJt7uvkKfVTy89zj6SfXp95lP3rR92XP66+ePnlXrn15f0X9mGKxpXqwxjL/kXGZ/fERps/b25W/KnxmvLXPjn+Fa9dJPf+1jv+Nv2XLE/tn24z11b5+5+8wRW1Z5gBmlhf/sVq+6Yzgc1+w/5Ooz60IwAN+Q4BxR8GAWhhfflXq+3rFrVd8W9bjQHTCEBL6ytuQ2BV/D2Kvy0C4MD6ym9W28/6P0QjHALgSNsQ2Bb/sPfcansUIwAObaz8brV9UvQUfzwEwLGmIahr0HtmtT2qEQAPNlb+8NIuxe8eAfBkY+VPp+0Nek+dtocJAuCRqxAMek+ctIM8AuDZxuqDVvtT/H4RgACahmCw9tjtQJBDAAK5tfqX1fYUfxgEIKC6Idhce+R5JEgQgMBurf5duZ7iD4sARFAWgs21h4FHAgIQya3Vf6Z+pvjjIAARJSHYXPs38kj0IgCRUfxxEQCoRgCgGgGAagQAqhEAqEYAoBoBgGoEAKoRAKhGAKAaAYBqBACqEQCoRgCgGgGAagQAqhEAqEYAoBoBgGoEAKrZBsDM3gSIrnadMgNANQIA1QgAVGsSAD4HoMus6pMZAKoRAKjWNABcBqGLrOuSGQCqEQCo1iYAXAahSxrVY9sZgBCgCxrXIZdAUM1FAJgFEFOr+nM1AxACxNC67rgEgmouA8AsgJCc1JvrGYAQIARndebjEogQwCen9eXrMwAhgA/O68rnh2BCAJe81JPv3wIRArjgrY6u+Go4JRn8eYC+sFi8n0BD3gdgNoCNIPUSYgZIYzbALEFPlLHuBDMboEjwugg9A6SlXywzgl5RT4YxA5BGGHTpzBVAVwKQlj04BGL+dabgs7oYgKzOHjzMP/4cGqoRAKhGAKAaAYBqBACqEQCoRgCgGgGAagQAqv0PS8tfmKNr84EAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/images/icon-512.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAVG0lEQVR4nO3dyZbc5nmA4b986FvIghehEx0vRIrsljiFmcMMiuMkV+KdNrmSJE7iJGYST7TFsSmJWuQcXYUWvoUslIXc6iIKVQWgAPzD9zyrJogG/mpU1fc2uiVu3n3n49RvM2rbprttZ9fjx+s70lv7bXq27ew5bt19x+xb1eDjXf5pM+Zz+7fvPJZRxxz4WDanXJcD595Z+rSv41srOHr9hz6WrY8mHPPoY9n0bOv85aTnWOf693009pibAdf/2Lbjr/3jxxz0WI5cq0nPsc616jvq2GNuNsP2O7TttNd+7xH69z1y/Sc9xya/9vcfc3eZE65L334jr1X/Yxl3zEnPsYVe+9/p2RMAaJwAAICABAAABCQAACAgAQAAAQkAAAhIAABAQAIAAAISAAAQkAAAgIAEAAAEJAAAICABAAABCQAACEgAAEBAAgAAAhIAABCQAACAgAQAAAQkAAAgIAEAAAEJAAAISAAAQEACAAACEgAAEJAAAICABAAABCQAACAgAQAAAV3LvQBm8XXuBQAhbXIvgOkEQD0MeaA0h96XxEHhBECZDHugdn3vY6KgIAKgDAY+EEH3vU4QZCQA8jH0gei23wfFwMoEwLoMfYB+YmBlAmAdBj/AcJfvmUJgQQJgOYY+wGncFViQAJifwQ8wP3cFZiYA5mPwAyxPCMxEAJzO4AdYnxA4kQCYzuAHyE8ITCQAxjP4AcojBEbyrwGOY/gDlM379EDuAAzjCQVQD3cDBhAAhxn8APUSAgf4EcB+hj9AG7yf9xAA/TxZANrifb3DjwDe5gkC0C4/EtjiDsAVwx8gBu/3SQBc8mQAiCX8+370HwGEfwIABBb6RwKR7wAY/gCkFHQeRA2AkBcbgL3CzYWIARDuIgMwSKj5EC0AQl1cAEYLMyciBUCYiwrASULMiygBEOJiAjCb5udGhABo/iICsIim50frAdD0xQNgcc3OkZYDoNmLBsCqmpwnrQZAkxcLgGyamystBkBzFwmAIjQ1X1oLgKYuDgDFaWbOtBYAAMAALQVAM1UGQNGamDetBEATFwOAalQ/d1oIgOovAgBVqnr+tBAAAMBItQdA1fUFQPWqnUM1B0C1X3QAmlLlPKo1AKr8YgPQrOrmUq0BAACcoMYAqK6yAAihqvlUYwAAACeqLQCqqisAwqlmTtUUANV8UQEIrYp5VVMAAAAzqSUAqqgpAPit4udWLQEAAMyohgAovqIAoEfR86uGAAAAZlZ6ABRdTwBwRLFzrPQAAAAWUHIAFFtNADBCkfOs5AAAABZSagAUWUsAMFFxc63UAAAAFiQAACCgEgOguNskADCDouZbiQEAACystAAoqo4AYGbFzLnSAgAAWIEAAICASgqAYm6LAMCCiph3JQUAALASAQAAAZUSAEXcDgGAlWSfe6UEAACwIgEAAAEJAAAIqIQAyP5zEADIIOv8KyEAAICVCQAACEgAAEBAAgAAAsodAH4BEIDIss3B3AEAAGQgAAAgIAEAAAEJAAAISAAAQEACAAACyhkA/hNAAMg0D90BAICABAAABCQAACAgAQAAAQkAAAhIAABAQAIAAAISAAAQkAAAgIAEAAAEJAAAICABAAABCQAACEgAAEBAAgAAAhIAABCQAACAgAQAAAQkAAAgIAEAAAEJAAAISAAAQEACAAACEgAAEJAAAICABAAABCQAACAgAQAAAQkAAAhIAABAQAIAAAISAAAQkACAwJ5/+se5lwBkci33AoD1vfjsT779+DIC7tz6aa7lABkIAAhke/B3XYXAz9ZaDpCRAIAAXnz2p4P3ff7pH6WUhAC0TgBAw8YM/i4hAG0TANCgUwZ/11UI/Hy2YwL5CQBoyIvP/myxYz//9A9TSkIAWiEAoAFLDv6uqxD4xWrnBOYnAKBiLz57lO3czz/9g5RSSneFAFRJAECFXmYc/F3PhABUyf8JECpT0vDfdhkCQB3cAYBKvPzsz3Mv4ahnn/5+Simlu7d/mXklwDECAAr38vPyB3/Xs9dCAEonAKBQNQ7+rqsQeJJ5JUCXAIDCvPz8L3IvYXbPXj9MKQkBKIkAgEK0OPi7hACUQwBAZhEGf9dVCPwq80ogLgEAmbz8/C9zLyG7Z69/L6WU0j0hAKsTALCyVwb/jqffhsCvM68E4hAAsJJXn/9V7iUU7+nrByklIQBrEACwMIN/PCEAyxMAsBCD/3RXIfBJ5pVAewQAzOzV5x/lXkJznr6+n1JK6d6ZEIC5CACYyas3Bv/Snl5chsDTzCuB+gkAONGrN3+dewnhPL24l1ISAnAKAQATGfz5CQGYTgDASAZ/eS5D4P7Zs8wrgXoIABjo4s33cy+BIz65uJtSEgIwhACAIwz++lyFwPPMK4FyCQDY4+LN3+ReAif65OJOSkkIQJ/v5F4AlMjwb8tlCABX3AGALQZ/u67uBrzIuxAohACAlNLFmx/kXkIWjx5+lR4/uZ57Gav65OLDlJIQgM2773y8769Gbdt0t+3surPh657POnzeTc+2nT3HrbvvmH2rGny8yz9txnxu//adxzLqmAMfy2bAY9l7jgPn3ln6tK/jWys4ev2HPparjy6+iDv4u6KFwKX75y/S/mf5+OfZ1fN0+nP+tNd+7xH69z3y+u/76PC5T3nt7z/m7jInXJe+/UZeq/7HMu6YB65L30G2/njidelu2WwEgACIGQAXX/xtz74x9A3/S1EjIKWU7p+/FACd/QTAzkp69ht3TAHwDQFwZLsA6KxghgB4bfAPEjkEHpy/3PqTANh/HgHQu68AEAACoLslbwAY/NMIAQGw/zwCoHdfASAABEB3S54AeP3F3/XsF8Mpg78rdgi86mwRAAe3CYCDxxQA3xAAR7YLgM4KRgRA5MGf0rzD/1LkCEhpOwQEwMFtAuDgMQXANwTAke0CoLOCAQFg8M8/+LuEwEXPVgHw7TYBcPCYAuAbAuDIdgHQWcGB6//6i7/fs74Y1hj8XUJgOwQEwLfbBMDBY5YUAP5HQFCxHIO/e+7oIQC18m8BQKVyDv9tpawDGMcdAKhMiQPX3QCojwCASpQ4+LuEANRDAEDhahj8XUIAyud3AKBgNQ7/bbWvH1rmDgAUqKXB6W4AlEkAQEFaGvxdQgDK4kcAUIiWh/+2KI8TSucOAGQWcSC6GwD5CQDIJOLg7xICkI8AgJUZ/LuEAKzP7wDAigz/w3x9YD3uAMAKDLbh3A2AdQgAWJDBP50QgGUJAFiAwT8fIQDL8DsAMDPDfxm+rjAvdwBgJgbU8twNgPkIADiRwb8+IQCnEwAwkcGfnxCA6fwOAExg+JfF9YDx3AGAEQyacrkbAOO4AwAAAQkAAAhIAABAQAIAAAISAAAQkAAAgIAEAAAEJAAAICABAAABCQAACEgAAEBAAgAAAhIAABCQAACAgAQAAAQkAAAgIAEAAAEJAAAISAAAQEACAAACEgAAENC13AsA1vP4yfWj+zx6+NUKKwFyEwDQuCFDf9/+YgDaJQCgUWMH/6FjCAFoj98BgAbNMfyXPB6QnwCAxiw1rEUAtEUAQEOWHtIiANohAKARaw1nEQBtEADQgLWHsgiA+gkAqFyuYSwCoG4CACqWewjnPj8wnQAAgIAEAFSqlO++S1kHMI4AAICABAAABCQAoEKl3XYvbT3AcQIAAAISAAAQkAAAgIAEAAAEJAAAICABAAABCQAACEgAAEBAAgAq9OjhV7mX8JbS1gMcJwAAICABAAABCQCoVCm33UtZBzCOAACAgAQAVCz3d9+5zw9MJwCgcrmGsOEPdRMA0IC1h7HhD/UTANCItYay4Q9tuJZ7AcB8Hj38Kj1+cn3R4y/lx//wu3v/7qMffrnYeSEqAQCNWSoClhr+hwZ/dx8hAPMRAEAWQwb/vs8RAnA6vwMAIyx5ez2SKcN/yOe7PjCcAICRDJnTnDr89x3HdYFxBABMYNhMM9fw7x7P9YDxBABMZOiUwXWAaQQAnMDwGW7u7/4v/d///s4ix4XWCQA4kQgAaiQAYAYi4LClvvu/5C4AjCcAaMLt9/4x9xJEQCAPzi9yLwFOJgBoxu33/in3EkRAAIY/rRAANEUEsKQH569yLwFmIwBojghgCYY/rREANEkEMCfDnxYJAJolApiD4U+rBABNu/3eP+deAmn5f73vu9/7zSLHNfxpmQCgebkjwF2AOj04f5l7CbAoAUAIIiC/pe4CLPHdv+FPBAKAMEQAQxj+RCEACOVMBGQ1912Aub/7N/yJRAAQjgjIa64ImHv43zf8CUYAENLZez/Ken4R8OVJn2/4w+kEAGGJgLw++uGXo0Pgu9/7zQLD/8Wsx4NaCABCO7shAnJ6/OT6oKG+xOBPyfAntmu5FwC5nd34Ubp484Ns53/85Hp69PCrbOfPpRs/S/3PfPa5f/Yipc2qp4SiuAMAyZ2AteV+vPfPXmQ9P5RAAMBvnd34l6znzz0U15L7cRr+8A0BAFtEwLJyP777Z8+znh9KIgCgQwQsI/fjMvzhbQIACpR7WM6ttccDLRAA0CP3XYCU2hmaJTwO3/3DLgEAe4iA05WwfsMf+gkAOODsxr/mXkIRQ3SKEtZt+MN+AgCOEAHjlbDe+2fPci8BiiYAYAARMFwJ6zT84TgBAAOJgONKWJ/hD8Ns3n3n431/NWrbprttZ9edDV/3fNbh8256tu3sOW7dfcfsW9Xg413+aTPmc/u37zyWUccc+Fg2Ax7L3nMcOPfO0qd9Hd9awdHrP/SxbH004ZgXb77fs9+6Svy3A8oc/keu6ebtD/pehQc/v2fbZjNsv0PbTnvt9x6hf98jr/++jw6f+5TX/v5j7i5zwnXp22/ktep/LOOOeeC69B1k648nXpfuls3GHQAY6/zGv+VeQhHDdlsJ6/GdP4wjAGACEXClhHXcO3uaewlQHQEAE4mA/OdPyfCHqQQAnCByBBj+UDcBACeKGAGGP9RPAMAMzm/8OPcSQjH84XQCAGaSOwLW+q4893f/984+yXp+aIUAgBm1HgGGP7RDAMDMzm+2GQGGP7RFAMACWouA7MP/tuEPcxMAsJDzm/+e9fxzDW3DH9okAGBBtUdA/uH/66znh5YJAFhYrRFg+EPbBACsoLYIMPyhfQIAVlJLBBj+EIMAgBWd3/yPrOc/NtwNf4hDAMDKSo2A/MP/V1nPD9EIAMjgg8IiwPCHeAQAZFJKBOQe/ncNf8hCAEBGpURALoY/5CMAILMPbv5n7iVkYfhDXgIAChAtAu7efpJ7CRCeAIBCRIkAwx/KIACgIK1HgOEP5RAAUJhWI8Dwh7IIACjQBzd/knsJszL8oTwCAArVSgTcvf3L3EsAeggAKFjtEWD4Q7kEABSu1ggw/KFsAgAqUFsEGP5QPgEAlfjg/ToiwPCHOggAqMgH7z/OvYSD7t4y/KEWAgAAAhIAUJlS7wLcvfWL3EsARhAAUKHSIsDwh/oIAKjUh4VEgOEPdRIAULHcEXDH8IdqCQCo3Ifv/1eW8xr+UDcBAA1YOwLu3Pr5qucD5icAoBFrRYDhD20QANCQpSPA8Id2CABozFIRYPhDWwQANOjD9/971uMZ/tAeAQCNmisC7tz62SzHAcoiAKBhp0aA4Q/tEgDQuKkRYPhD2wQABDA2Agx/aJ8AgCA+fP9/Bu1n+EMMAgACORYBd279dKWVALkJAAhmXwQY/hCLAICAuhFg+EM8AgCCuowAwx9iEgAQmOEPcQkAAAhIAABAQAIAAAISAAAQkAAAgIAEAAAEJAAAICABAAABCQAACEgAAEBAAgAAAhIAABCQAACAgAQAAAQkAAAgIAEAAAEJAAAISAAAQEACAAACEgAAEJAAAICABAAABCQAACAgAQAAAQkAAAhIAABAQAIAAAISAAAQkAAAgIAEAAAEJAAAICABAAABCQAACEgAAEBAAgAAAhIAABCQAACAgAQAAAQkAAAgIAEAAAEJAAAISAAAQEACAAACEgAAEJAAAICABAAABCQAACCgnAGwyXhuAChFlnnoDgAABCQAACAgAQAAAQkAAAhIAABAQAIAAALKHQD+U0AAIss2B3MHAACQgQAAgIAEAAAEJAAAIKASAsAvAgIQUdb5V0IAAAArEwAAEJAAAICASgkAvwcAQCTZ514pAQAArEgAAEBAJQVA9tshALCCIuZdSQEAAKxEAABAQKUFQBG3RQBgIcXMudICAABYQYkBUEwdAcCMippvJQYAALAwAQAAAZUaAEXdJgGAExU310oNAABgQSUHQHG1BAATFDnPSg4AAGAhpQdAkdUEAAMVO8dKDwAAYAE1BECx9QQABxQ9v2oIAABgZrUEQNEVBQAdxc+tWgIAAJhRTQFQfE0BQKpkXtUUAClV8kUFIKxq5lRtAQAAzKDGAKimrgAIpar5VGMAAAAnqjUAqqosAJpX3VyqNQBSqvCLDUCTqpxHNQdASpV+0QFoRrVzqPYAAAAmaCEAqq0vAKpW9fxpIQBSqvwiAFCd6udOKwGQUgMXA4AqNDFvWgoAAGCg1gKgiSoDoFjNzJnWAiClhi4OAEVpar60GAApNXaRAMiuubnSagCk1ODFAiCLJudJywGQUqMXDYDVNDtHWg+AlBq+eAAsqun5ESEAUmr8IgIwu+bnRpQASCnAxQRgFiHmRaQASCnIRQVgsjBzIloApBTo4gIwSqj5EDEAUgp2kQE4KtxciBoAKQW82AD0CjkPruVeQGaXF/3rrKsAIIeQg/9S5DsA20I/CQACCv++LwCuhH8yAATh/T75EUCXHwkAtMvg3+IOQD9PEoC2eF/vEAD7ebIAtMH7eQ8/AjjMjwQA6mXwHyAAhhECAPUw+AfwI4BxPKkAyuZ9eiB3AMZzNwCgPAb/SAJgOiEAkJ/BP5EAOJ0QAFifwX8iATAfIQCwPIN/JgJgfkIAYH4G/8wEwHK2n6xiAGA8Q39BAmAd7goADGfwr0AArMtdAYB+hv7KBEA+YgCIztDPSACUofsiEARAiwz8ggiAMvW9SEQBUBPDvnACoB6HXkziAMjBkK+YAGiDFyEAo/jXAAEgIAEAAAEJAAAISAAAQEACAAACEgAAEJAAAICABAAABCQAACAgAQAAAQkAAAhIAABAQAIAAAISAAAQkAAAgIAEAAAEJAAAICABAAABCQAACEgAAEBAAgAAAhIAABCQAACAgAQAAAQkAAAgIAEAAAEJAAAISAAAQED/D/c1esJvRSD3AAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/images/icon.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODdhIAAgAIUAAP////rMFU9G5U5F4U1E3kxD20tC2EpC1ElB0UhAzkc/y0Y/x0U+xEQ9wUM8vkI7u0E7t0A6tD85sT44rj04qjw3pzs2pDo1oTk0njg0mjczlzYylDUxkTQxjTMwijIvhzEuhDEugQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAIAAgAEAI/wBDgPjgoQOHDRoyYLhgoQKFCRIiQHjgoAGDBQoSIDhgoACBAQIEEjSIUCFDhxAlUrSIUSNHjyBFFjyYcCEAATgBAAjAE8DFjBs7fgw5cGbJhQ0fRpxY8adLoTGLkqx5UqnKpi2DwiQ6kqZJnTdxCgDrVOtQmVNNJp0AdmXZl2elekWKcqnbrHCjdj1aNSVTlkDzcjVKda1drIGhDk5LlwJYnYifbkU790LYsZd94lVMmW/Dx2Mjm9VLWG3dq4Alx91b+PTft5zlenZ9N/Fk2a2tvt58m7Vp3bVVk2bc93Dq0YsrG0YNu3fpxhAB7La9+rll0I+bVyd+WWxO7cMrhzUFPRZ8cs/jd/I8Lrhzbp2YRbfH/Tv6dOHnc/sNjtx9fePm+QcdgLxtpxxt8sXm24DMFQhSQAA7]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ01BUyBBdXRoSHViJzsKJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnQ2VudHJhbGl6ZWQgaWRlbnRpdHkgYW5kIGFjY2VzcyBtYW5hZ2VtZW50OiBPQXV0aDIsIE9JREMsIFNBTUwsIFdlYkF1dGhuLCBDTVNNUyBhZG1pbiBTU08sIGFuZCBNQU1TIGludGVncmF0aW9uLic7CiRsYW5nWydoZWxwJ10gPSAnT3BlbiB0aGUgSGVscCB0YWIgaW4gdGhlIG1vZHVsZSBtYW5hZ2VyIGZvciBmdWxsIGRvY3VtZW50YXRpb24gKEdlbmVyYWwsIENvbmZpZ3VyYXRpb24sIFByb3RvY29scywgU2VjdXJpdHksIFRyb3VibGVzaG9vdGluZykuJzsKJGxhbmdbJ2hlbHBfZ2VuZXJhbCddID0gJ0dlbmVyYWwnOwokbGFuZ1snaGVscF9jb25maWd1cmF0aW9uJ10gPSAnQ29uZmlndXJhdGlvbic7CiRsYW5nWydoZWxwX3Byb3RvY29scyddID0gJ1Byb3RvY29scyc7CiRsYW5nWydoZWxwX3NlY3VyaXR5J10gPSAnU2VjdXJpdHknOwokbGFuZ1snaGVscF90cm91Ymxlc2hvb3RpbmcnXSA9ICdUcm91Ymxlc2hvb3RpbmcnOwokbGFuZ1snaGVscF9vdmVydmlld19oZWFkaW5nJ10gPSAnT3ZlcnZpZXcnOwokbGFuZ1snaGVscF9vdmVydmlld19ib2R5J10gPSAnTUFTIEF1dGhIdWIgY2VudHJhbGl6ZXMgc2lnbi1pbiBmb3IgQ01TIE1hZGUgU2ltcGxlIGFkbWluIGFuZCBNQU1TIGZyb250ZW5kIHVzZXJzLiBJdCBzdXBwb3J0cyBPQXV0aDIsIE9wZW5JRCBDb25uZWN0LCBTQU1MIHNlcnZpY2UgcHJvdmlkZXIgZmxvd3MsIFdlYkF1dGhuIHBhc3NrZXlzLCBhbmQgb3B0aW9uYWwgT0F1dGggYXV0aG9yaXphdGlvbiBzZXJ2ZXIgZW5kcG9pbnRzIGZvciB5b3VyIG93biBjbGllbnRzLic7CiRsYW5nWydoZWxwX3F1aWNrc3RhcnRfaGVhZGluZyddID0gJ1F1aWNrIHN0YXJ0JzsKJGxhbmdbJ2hlbHBfcXVpY2tzdGFydF8xJ10gPSAnQWRkIHNlY3JldHMgdG8gc2l0ZSBjb25maWcucGhwIHVuZGVyIHRoZSBtYXNfYXV0aGh1YiBhcnJheSAoc2VlIENvbmZpZ3VyYXRpb24gdGFiKS4nOwokbGFuZ1snaGVscF9xdWlja3N0YXJ0XzInXSA9ICdPcGVuIEV4dGVuc2lvbnMsIHRoZW4gTUFTIEF1dGhIdWIsIGFuZCBncmFudCBNYW5hZ2UgLyBVc2UgcGVybWlzc2lvbnMgdG8gdGhlIHJpZ2h0IGFkbWluIGdyb3Vwcy4nOwokbGFuZ1snaGVscF9xdWlja3N0YXJ0XzMnXSA9ICdPbiB0aGUgSWRlbnRpdHkgcHJvdmlkZXJzIHRhYiwgYWRkIGFuZCBlbmFibGUgYXQgbGVhc3Qgb25lIHByb3ZpZGVyIChBenVyZSBBRCwgR29vZ2xlLCBTQU1MIElkUCwgYW5kIHNvIG9uKS4nOwokbGFuZ1snaGVscF9xdWlja3N0YXJ0XzQnXSA9ICdJbiBNQU1TIG1vZHVsZSBwcmVmZXJlbmNlcywgc2V0IEF1dGhlbnRpY2F0aW9uIG1vZHVsZSB0byBNQVNfQXV0aEh1YiB3aGVuIHVzaW5nIGZyb250ZW5kIFNTTy4nOwokbGFuZ1snaGVscF9xdWlja3N0YXJ0XzUnXSA9ICdFbmFibGUgQ01TTVMgYWRtaW4gU1NPIGFuZC9vciBNQU1TIGZyb250ZW5kIFNTTyBvbiB0aGUgU2V0dGluZ3MgdGFiLCB0aGVuIHRlc3Qgc2lnbi1pbiBhbmQgcmV2aWV3IHRoZSBBdWRpdCBsb2cuJzsKJGxhbmdbJ2hlbHBfcmVxdWlyZW1lbnRzX2hlYWRpbmcnXSA9ICdTeXN0ZW0gcmVxdWlyZW1lbnRzJzsKJGxhbmdbJ2hlbHBfcmVxdWlyZW1lbnRzX2NtcyddID0gJ0NNUyBNYWRlIFNpbXBsZSc7CiRsYW5nWydoZWxwX3JlcXVpcmVtZW50c19waHAnXSA9ICdQSFAnOwokbGFuZ1snaGVscF9yZXF1aXJlbWVudHNfbWFtcyddID0gJ01BTVMgMS4wKyBhbmQgQ01TTVNFeHQgMS4wKyAobW9kdWxlIGRlcGVuZGVuY2llcyknOwokbGFuZ1snaGVscF9yZXF1aXJlbWVudHNfaHR0cHMnXSA9ICdIVFRQUyBvbiB0aGUgcHVibGljIHNpdGUgZm9yIE9BdXRoLCBTQU1MLCBhbmQgV2ViQXV0aG4gY2FsbGJhY2tzJzsKJGxhbmdbJ2hlbHBfY3JlZGl0c19oZWFkaW5nJ10gPSAnQ3JlZGl0cyc7CiRsYW5nWydoZWxwX2NyZWRpdHNfYm9keSddID0gJ0RldmVsb3BlZCBieSc7CiRsYW5nWydoZWxwX2NvbmZpZ19zZWNyZXRzX2hlYWRpbmcnXSA9ICdTZWNyZXRzIGluIGNvbmZpZy5waHAnOwokbGFuZ1snaGVscF9jb25maWdfc2VjcmV0c19ib2R5J10gPSAnTmV2ZXIgc3RvcmUgY2xpZW50IHNlY3JldHMgb3Igc2lnbmluZyBrZXlzIGluIHRoZSBkYXRhYmFzZS4gVXNlIHRoZSBzaXRlIHJvb3QgY29uZmlnLnBocCBhcnJheSBtYXNfYXV0aGh1Yi4gU2VlIHRvLWRvL2NvbmZpZy5tYXNfYXV0aGh1Yi5leGFtcGxlLnBocCBpbiB0aGUgbW9kdWxlIGZvbGRlciBmb3IgYSBzYW1wbGUgc2hhcGUuJzsKJGxhbmdbJ2hlbHBfY29uZmlnX2VuY3J5cHRpb25fa2V5J10gPSAnMzItYnl0ZSByYW5kb20gdmFsdWUgZm9yIGVuY3J5cHRpbmcgc3RvcmVkIHRva2Vucyc7CiRsYW5nWydoZWxwX2NvbmZpZ19zaWduaW5nX2tleSddID0gJ1NlY3JldCBmb3IgSldUIC8gaHViIHNlc3Npb24gc2lnbmluZyc7CiRsYW5nWydoZWxwX2NvbmZpZ19wcm92aWRlcnMnXSA9ICdQZXItcHJvdmlkZXIgb3ZlcnJpZGVzIChmb3IgZXhhbXBsZSBjbGllbnRfc2VjcmV0IGZvciBBenVyZSBBRCknOwokbGFuZ1snaGVscF9jb25maWdfc2V0dGluZ3NfaGVhZGluZyddID0gJ1NldHRpbmdzIHRhYic7CiRsYW5nWydoZWxwX2NvbmZpZ19hZG1pbl9zc28nXSA9ICdBbGxvd3MgZXh0ZXJuYWwgaWRlbnRpdHkgcHJvdmlkZXJzIHRvIHNpZ24gdXNlcnMgaW50byB0aGUgQ01TTVMgYWRtaW4gd2hlbiBsaW5rZWQgYWNjb3VudHMgZXhpc3QuJzsKJGxhbmdbJ2hlbHBfY29uZmlnX21hbXNfc3NvJ10gPSAnRW5hYmxlcyBNQU1TIGZyb250ZW5kIGxvZ2luIHZpYSBjb25maWd1cmVkIHByb3ZpZGVycy4nOwokbGFuZ1snaGVscF9jb25maWdfYXV0b19saW5rJ10gPSAnTGlua3MgbmV3IGxvZ2lucyB0byBleGlzdGluZyBDTVMgb3IgTUFNUyB1c2VycyB3aGVuIGVtYWlsIGlzIHZlcmlmaWVkIGJ5IHRoZSBJZFAuJzsKJGxhbmdbJ2hlbHBfY29uZmlnX3Nlc3Npb25fdHRsJ10gPSAnTGlmZXRpbWUgb2YgaHViIHNlc3Npb24gcmVjb3JkcyBiZWZvcmUgcmUtYXV0aGVudGljYXRpb24gaXMgcmVxdWlyZWQuJzsKJGxhbmdbJ2hlbHBfY29uZmlnX3JhdGUnXSA9ICdCYXNpYyBwZXItSVAgdGhyb3R0bGluZyBvbiBzZW5zaXRpdmUgZnJvbnRlbmQgYWN0aW9ucy4nOwokbGFuZ1snaGVscF9jb25maWdfdGFic19oZWFkaW5nJ10gPSAnT3RoZXIgYWRtaW4gdGFicyc7CiRsYW5nWydoZWxwX2NvbmZpZ190YWJfcHJvdmlkZXJzJ10gPSAnQWRkIE9BdXRoL09JREMvU0FNTC9XZWJBdXRobiBkcml2ZXJzLCBjbGllbnQgSURzLCByZWRpcmVjdCBVUklzLCBhbmQgbWV0YWRhdGEuJzsKJGxhbmdbJ2hlbHBfY29uZmlnX3RhYl9tYW1zJ10gPSAnSklUIHVzZXIgY3JlYXRpb24sIGR1cGxpY2F0ZS1lbWFpbCBwb2xpY3ksIGFuZCBNQU1TIGludGVncmF0aW9uIHN0YXR1cy4nOwokbGFuZ1snaGVscF9jb25maWdfdGFiX29hdXRoJ10gPSAnUmVnaXN0ZXIgY29uZmlkZW50aWFsIGNsaWVudHMgdGhhdCBtYXkgdXNlIHRoaXMgaHViIGFzIGFuIE9BdXRoMiBhdXRob3JpemF0aW9uIHNlcnZlci4nOwokbGFuZ1snaGVscF9jb25maWdfdGFiX3Nlc3Npb25zJ10gPSAnVmlldyBhbmQgcmV2b2tlIGFjdGl2ZSBodWIgc2Vzc2lvbnMgYW5kIHJlZnJlc2ggdG9rZW5zLic7CiRsYW5nWydoZWxwX2NvbmZpZ190YWJfYXVkaXQnXSA9ICdTZWN1cml0eSBhbmQgc2lnbi1pbiBldmVudHMgd2l0aCBDU1YgZXhwb3J0Lic7CiRsYW5nWydoZWxwX3Byb3RvY29sc19vYXV0aF9ib2R5J10gPSAnU3RhbmRhcmQgYXV0aG9yaXphdGlvbi1jb2RlIGZsb3cgZm9yIHNvY2lhbCBhbmQgZW50ZXJwcmlzZSBJZFBzLic7CiRsYW5nWydoZWxwX3Byb3RvY29sc19vYXV0aF9zZXJ2ZXInXSA9ICd3aGVuIGVuYWJsZWQgZm9yIHJlZ2lzdGVyZWQgY2xpZW50cyc7CiRsYW5nWydoZWxwX3Byb3RvY29sc19vaWRjX2Rpc2NvdmVyeSddID0gJ3dlbGwta25vd24gT3BlbklEIGNvbmZpZ3VyYXRpb24gZm9yIHJlbHlpbmcgcGFydGllcyc7CiRsYW5nWydoZWxwX3Byb3RvY29sc19zYW1sX2JvZHknXSA9ICdTZXJ2aWNlLXByb3ZpZGVyIGVuZHBvaW50cyBmb3IgU0FNTCAyLjAgSWRQcy4nOwokbGFuZ1snaGVscF9wcm90b2NvbHNfc2FtbF9hY3MnXSA9ICdBc3NlcnRpb24gQ29uc3VtZXIgU2VydmljZSAoUE9TVCBiaW5kaW5nKSc7CiRsYW5nWydoZWxwX3Byb3RvY29sc19zYW1sX21ldGFkYXRhJ10gPSAnU1AgbWV0YWRhdGEgWE1MIGZvciBJZFAgY29uZmlndXJhdGlvbic7CiRsYW5nWydoZWxwX3Byb3RvY29sc193ZWJhdXRobl9ib2R5J10gPSAnUGFzc3dvcmRsZXNzIHBhc3NrZXlzIGZvciBsaW5rZWQgdXNlcnMgKHJlcXVpcmVzIEhUVFBTIGFuZCBjb21wYXRpYmxlIGJyb3dzZXJzKS4nOwokbGFuZ1snaGVscF9wcm90b2NvbHNfd2ViYXV0aG5fYWN0aW9uJ10gPSAncmVnaXN0cmF0aW9uIGFuZCBhdXRoZW50aWNhdGlvbiBjZXJlbW9uaWVzJzsKJGxhbmdbJ2hlbHBfcHJvdG9jb2xzX21hbXNfYm9keSddID0gJ01BTVMgY2FsbHMgdGhpcyBtb2R1bGUgd2hlbiBhdXRoX21vZHVsZSBpcyBzZXQgdG8gTUFTX0F1dGhIdWIuJzsKJGxhbmdbJ2hlbHBfcHJvdG9jb2xzX21hbXNfbG9naW4nXSA9ICdmcm9udGVuZCBTU08gZW50cnkgZnJvbSBNQU1TIHRlbXBsYXRlcyc7CiRsYW5nWydoZWxwX3Byb3RvY29sc19tYW1zX3JlZyddID0gJ01BTVNSZWdpc3RyYXRpb24gaXMgaW5zdGFsbGVkOiBkdXBsaWNhdGUtZW1haWwgYW5kIEpJVCBwb2xpY2llcyBvbiB0aGUgTUFNUyB0YWIgYXBwbHkuJzsKJGxhbmdbJ2hlbHBfc2VjdXJpdHlfc2VjcmV0c19oZWFkaW5nJ10gPSAnUHJvdGVjdCBzZWNyZXRzJzsKJGxhbmdbJ2hlbHBfc2VjdXJpdHlfc2VjcmV0c19ib2R5J10gPSAnRGVueSBIVFRQIGFjY2VzcyB0byBjb25maWcucGhwIHZpYSBzZXJ2ZXIgcnVsZXMuIFJvdGF0ZSBlbmNyeXB0aW9uX2tleSBhbmQgc2lnbmluZ19rZXkgaWYgY29tcHJvbWlzZSBpcyBzdXNwZWN0ZWQgKHVzZXJzIG11c3Qgc2lnbiBpbiBhZ2FpbikuJzsKJGxhbmdbJ2hlbHBfc2VjdXJpdHlfYXVkaXRfaGVhZGluZyddID0gJ0F1ZGl0IGxvZyc7CiRsYW5nWydoZWxwX3NlY3VyaXR5X2F1ZGl0X2JvZHknXSA9ICdSZXZpZXcgZmFpbGVkIGxvZ2lucywgcHJvdmlkZXIgZXJyb3JzLCBhbmQgYWNjb3VudCBsaW5raW5nIGV2ZW50cyByZWd1bGFybHkuIEV4cG9ydCBDU1YgZm9yIGxvbmctdGVybSByZXRlbnRpb24uJzsKJGxhbmdbJ2hlbHBfc2VjdXJpdHlfc2Vzc2lvbnNfaGVhZGluZyddID0gJ1Nlc3Npb25zJzsKJGxhbmdbJ2hlbHBfc2VjdXJpdHlfc2Vzc2lvbnNfYm9keSddID0gJ1Jldm9rZSBzZXNzaW9ucyB3aGVuIHN0YWZmIGxlYXZlIG9yIGRldmljZXMgYXJlIGxvc3QuIFNob3J0ZXIgVFRMIHJlZHVjZXMgZXhwb3N1cmUuJzsKJGxhbmdbJ2hlbHBfc2VjdXJpdHlfcGVybWlzc2lvbnNfaGVhZGluZyddID0gJ1Blcm1pc3Npb25zJzsKJGxhbmdbJ2hlbHBfc2VjdXJpdHlfcGVybV9tYW5hZ2UnXSA9ICdNYW5hZ2UgTUFTX0F1dGhIdWI6IGZ1bGwgYWRtaW4gdGFicywgcHJvdmlkZXJzLCBjbGllbnRzLCBhdWRpdCBleHBvcnQuJzsKJGxhbmdbJ2hlbHBfc2VjdXJpdHlfcGVybV91c2UnXSA9ICdVc2UgTUFTX0F1dGhIdWI6IHJlcXVpcmVkIGZvciBzb21lIGF1dG9tYXRlZCBvcGVyYXRpb25zIGFuZCBBUEktc3R5bGUgdXNlLic7CiRsYW5nWydoZWxwX3RzX3Nzb19oZWFkaW5nJ10gPSAnU1NPIGRvZXMgbm90IHdvcmsnOwokbGFuZ1snaGVscF90c19zc29fMSddID0gJ0NvbmZpcm0gdGhlIHByb3ZpZGVyIGlzIGVuYWJsZWQgYW5kIHJlZGlyZWN0IFVSSXMgbWF0Y2ggZXhhY3RseSAoc2NoZW1lLCBob3N0LCBwYXRoKS4nOwokbGFuZ1snaGVscF90c19zc29fMiddID0gJ0NoZWNrIHRoYXQgdGhlIENNUyBvciBNQU1TIHVzZXIgaXMgbGlua2VkIChvciBhdXRvLWxpbmsgYnkgZW1haWwgaXMgZW5hYmxlZCBhbmQgZW1haWwgaXMgdmVyaWZpZWQpLic7CiRsYW5nWydoZWxwX3RzX3Nzb18zJ10gPSAnSW5zcGVjdCB0aGUgQXVkaXQgbG9nIGFuZCBQSFAgZXJyb3IgbG9nIGZvciBwcm92aWRlci1zcGVjaWZpYyBlcnJvcnMuJzsKJGxhbmdbJ2hlbHBfdHNfb2F1dGhfaGVhZGluZyddID0gJ09BdXRoIC8gT0lEQyBlcnJvcnMnOwokbGFuZ1snaGVscF90c19vYXV0aF8xJ10gPSAnVmVyaWZ5IGNsaWVudF9pZCBhbmQgY2xpZW50X3NlY3JldCBpbiBjb25maWcucGhwIG1hdGNoIHRoZSBJZFAgcG9ydGFsLic7CiRsYW5nWydoZWxwX3RzX29hdXRoXzInXSA9ICdFbnN1cmUgc2VydmVyIHRpbWUgaXMgY29ycmVjdCAoc2tldyBicmVha3MgdG9rZW4gdmFsaWRhdGlvbikuJzsKJGxhbmdbJ2hlbHBfdHNfb2F1dGhfMyddID0gJ0ZvciBhdXRob3JpemF0aW9uLXNlcnZlciBtb2RlLCBjb25maXJtIHRoZSBPQXV0aCBjbGllbnQgcmVkaXJlY3QgVVJJcyBhcmUgcmVnaXN0ZXJlZCBpbiBBdXRoSHViLic7CiRsYW5nWydoZWxwX3RzX21hbXNfaGVhZGluZyddID0gJ01BTVMgaW50ZWdyYXRpb24nOwokbGFuZ1snaGVscF90c19tYW1zXzEnXSA9ICdNQU1TIHByZWZlcmVuY2VzIG11c3QgbGlzdCBNQVNfQXV0aEh1YiBhcyB0aGUgYXV0aGVudGljYXRpb24gbW9kdWxlLic7CiRsYW5nWydoZWxwX3RzX21hbXNfMiddID0gJ0NsZWFyIE1BTVMgYW5kIENNUyBjYWNoZXMgYWZ0ZXIgY2hhbmdpbmcgcHJvdmlkZXJzIG9yIGh1YiBzZXR0aW5ncy4nOwokbGFuZ1snaGVscF90c19zdXBwb3J0X2hlYWRpbmcnXSA9ICdTdXBwb3J0JzsKJGxhbmdbJ2hlbHBfdHNfc3VwcG9ydF9ib2R5J10gPSAnRm9yIHNpdGUtc3BlY2lmaWMgaXNzdWVzIGNvbnRhY3QnOwokbGFuZ1snYWJvdXRfdGFiX21vZHVsZSddID0gJ01vZHVsZSc7CiRsYW5nWydhYm91dF90YWJfY29tcGF0J10gPSAnQ29tcGF0aWJpbGl0eSc7CiRsYW5nWydhYm91dF90YWJfc3VtbWFyeSddID0gJ1N1bW1hcnknOwokbGFuZ1snYWJvdXRfdGFiX2NoYW5nZWxvZyddID0gJ0NoYW5nZSBsb2cnOwokbGFuZ1snYWJvdXRfbGFiZWxfbmFtZSddID0gJ05hbWUnOwokbGFuZ1snYWJvdXRfbGFiZWxfdmVyc2lvbiddID0gJ1ZlcnNpb24nOwokbGFuZ1snYWJvdXRfbGFiZWxfYXV0aG9yJ10gPSAnQXV0aG9yJzsKJGxhbmdbJ2Fib3V0X2xhYmVsX2VtYWlsJ10gPSAnRW1haWwnOwokbGFuZ1snYWJvdXRfbGFiZWxfdXJsJ10gPSAnV2Vic2l0ZSc7CiRsYW5nWydhYm91dF9sYWJlbF9saWNlbnNlJ10gPSAnTGljZW5zZSc7CiRsYW5nWydhYm91dF9saWNlbnNlX3ZhbHVlJ10gPSAnTUlUJzsKJGxhbmdbJ2Fib3V0X21pbl9jbXMnXSA9ICdNaW5pbXVtIENNUyBNYWRlIFNpbXBsZSc7CiRsYW5nWydhYm91dF9taW5fcGhwJ10gPSAnTWluaW11bSBQSFAnOwokbGFuZ1snYWJvdXRfZGVwZW5kZW5jaWVzX2hlYWRpbmcnXSA9ICdNb2R1bGUgZGVwZW5kZW5jaWVzJzsKJGxhbmdbJ2Fib3V0X21hbXNfcmVnaXN0cmF0aW9uX25vdGUnXSA9ICdNQU1TUmVnaXN0cmF0aW9uIGlzIGluc3RhbGxlZCBhbmQgY2FuIGludGVyb3BlcmF0ZSB3aXRoIEF1dGhIdWIgZW1haWwtbGluayBwb2xpY2llcy4nOwokbGFuZ1snYWJvdXRfZmVhdHVyZXNfaGVhZGluZyddID0gJ0tleSBmZWF0dXJlcyc7CiRsYW5nWydhYm91dF9mZWF0dXJlX29hdXRoJ10gPSAnT0F1dGgyIGFuZCBPcGVuSUQgQ29ubmVjdCBpZGVudGl0eSBwcm92aWRlcnMnOwokbGFuZ1snYWJvdXRfZmVhdHVyZV9zYW1sJ10gPSAnU0FNTCAyLjAgc2VydmljZSBwcm92aWRlcic7CiRsYW5nWydhYm91dF9mZWF0dXJlX3dlYmF1dGhuJ10gPSAnV2ViQXV0aG4gcGFzc2tleXMnOwokbGFuZ1snYWJvdXRfZmVhdHVyZV9tYW1zJ10gPSAnTUFNUyBmcm9udGVuZCBTU08gYW5kIENNU01TIGFkbWluIFNTTyc7CiRsYW5nWydhYm91dF9mZWF0dXJlX2F1ZGl0J10gPSAnQXVkaXQgbG9nLCBzZXNzaW9ucywgYW5kIE9BdXRoIGNsaWVudCByZWdpc3RyeSc7CiRsYW5nWydjaGFuZ2Vsb2cnXSA9ICdTZWUgQ0hBTkdFTE9HLm1kIGluIHRoZSBtb2R1bGUgZGlyZWN0b3J5Lic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ01BUyBBdXRoSHViIGluc3RhbGxlZC4gR3JhbnQgcGVybWlzc2lvbnMgYW5kIGFkZCBzZWNyZXRzIHRvIGNvbmZpZy5waHAuJzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdNQVMgQXV0aEh1YiByZW1vdmVkLic7CiRsYW5nWydyZWFsbHlfdW5pbnN0YWxsJ10gPSAnVW5pbnN0YWxsIE1BUyBBdXRoSHViPyBBbGwgcHJvdmlkZXIgbGlua3MsIHNlc3Npb25zLCBhbmQgYXVkaXQgZGF0YSB3aWxsIGJlIGRlbGV0ZWQuJzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ01BUyBBdXRoSHViIHZlcnNpb24gJXMgaW5zdGFsbGVkLic7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01BUyBBdXRoSHViIHVwZ3JhZGVkIHRvIHZlcnNpb24gJXMuJzsKJGxhbmdbJ3VuaW5zdGFsbGVkJ10gPSAnTUFTIEF1dGhIdWIgdW5pbnN0YWxsZWQuJzsKJGxhbmdbJ2FjY2Vzc2RlbmllZCddID0gJ0FjY2VzcyBkZW5pZWQuJzsKJGxhbmdbJ3N1Ym1pdCddID0gJ1NhdmUnOwokbGFuZ1snY2FuY2VsJ10gPSAnQ2FuY2VsJzsKJGxhbmdbJ3NldHRpbmdzJ10gPSAnU2V0dGluZ3MnOwokbGFuZ1sndGFiX3Byb3ZpZGVycyddID0gJ0lkZW50aXR5IHByb3ZpZGVycyc7CiRsYW5nWyd0YWJfbWFtcyddID0gJ01BTVMgY29tcGF0aWJpbGl0eSc7CiRsYW5nWyd0YWJfb2F1dGhfY2xpZW50cyddID0gJ09BdXRoIGNsaWVudHMnOwokbGFuZ1sndGFiX3Nlc3Npb25zJ10gPSAnU2Vzc2lvbnMgYW5kIHRva2Vucyc7CiRsYW5nWyd0YWJfYXVkaXQnXSA9ICdBdWRpdCBsb2cnOwokbGFuZ1sndGFiX2FkbWluc2V0dGluZ3MnXSA9ICdBZG1pbiBzZXR0aW5ncyc7CiRsYW5nWydkb25hdGlvbnN0YWInXSA9ICdEb25hdGlvbnMnOwokbGFuZ1snZG9uYXRpb25zX3RhYiddID0gJ0RvbmF0aW9ucyc7CiRsYW5nWyd0YWJfZG9uYXRpb25zJ10gPSAnRG9uYXRpb25zJzsKJGxhbmdbJ2RvbmF0ZV9idG4nXSA9ICdEb25hdGUnOwokbGFuZ1snZG9uYXRpb25zdGV4dCddID0gJ0EgbG90IG9mIHRpbWUgYW5kIGVmZm9ydCBoYXMgYmVlbiBwdXQgaW50byBNQVMgQXV0aEh1Yi4gSWYgaXQgaGVscHMgeW91ciBzaXRlLCBjb25zaWRlciBhIHNtYWxsIGRvbmF0aW9uIHRvIHN1cHBvcnQgY29udGludWVkIGRldmVsb3BtZW50Lic7CiRsYW5nWydzcG9uc29ycyddID0gJ0N1cnJlbnQgc3BvbnNvcnMsIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISc7CiRsYW5nWydzaG93X2RvbmF0aW9uc190YWJfZW5hYmxlJ10gPSAnU2hvdyBEb25hdGlvbnMgdGFiJzsKJGxhbmdbJ2RvbmF0aW9uc19zcG9uc29yX2xvZ29fYWx0J10gPSAnTmV3cyBUYXJnZXRlZCBsb2dvJzsKJGxhbmdbJ2RvbmF0aW9uc19zcG9uc29yX2xpbmsnXSA9ICdWaXNpdCBOZXdzVGFyZ2V0ZWQnOwokbGFuZ1snc2hvd19kb25hdGlvbnNfdGFiJ10gPSAnU2hvdyBEb25hdGlvbnMgdGFiJzsKJGxhbmdbJ3Nob3dfZG9uYXRpb25zX3RhYl9oZWxwJ10gPSAnV2hlbiBvZmYsIHRoZSBEb25hdGlvbnMgdGFiIHN0YXlzIGhpZGRlbiB1bnRpbCBlbmFibGVkIGhlcmUuJzsKJGxhbmdbJ2RvbmF0aW9uc190YWJfaGlkZGVuJ10gPSAnRG9uYXRpb25zIHRhYiBoaWRkZW4uIEVuYWJsZSBpdCBpbiBBZG1pbiBzZXR0aW5ncy4nOwokbGFuZ1snYWRtaW5zZWN0aW9uJ10gPSAnQWRtaW4gbWVudSBzZWN0aW9uJzsKJGxhbmdbJ2FkbWluc2VjdGlvbmhlbHAnXSA9ICdXaGVyZSBNQVMgQXV0aEh1YiBhcHBlYXJzIGluIHRoZSBDTVNNUyBhZG1pbiBtZW51Lic7CiRsYW5nWydzaG93ZG9uYXRpb25zdGFiJ10gPSAnU2hvdyBkb25hdGlvbnMgdGFiJzsKJGxhbmdbJ2hpZGVkb25hdGlvbnNzdWJtaXQnXSA9ICdIaWRlIGRvbmF0aW9ucyB0YWInOwokbGFuZ1sncHJlZnN1cGRhdGVkJ10gPSAnUHJlZmVyZW5jZXMgc2F2ZWQuJzsKJGxhbmdbJ2VuYWJsZV9hZG1pbl9zc28nXSA9ICdFbmFibGUgQ01TTVMgYWRtaW4gU1NPJzsKJGxhbmdbJ2VuYWJsZV9tYW1zX3NzbyddID0gJ0VuYWJsZSBNQU1TIGZyb250ZW5kIFNTTyc7CiRsYW5nWydhdXRvX2xpbmtfZW1haWwnXSA9ICdBdXRvLWxpbmsgYWNjb3VudHMgYnkgdmVyaWZpZWQgZW1haWwnOwokbGFuZ1snc2Vzc2lvbl90dGwnXSA9ICdIdWIgc2Vzc2lvbiBUVEwgKHNlY29uZHMpJzsKJGxhbmdbJ3JhdGVfcGVyX2hvdXInXSA9ICdSYXRlIGxpbWl0IChyZXF1ZXN0cyBwZXIgaG91ciBwZXIgSVApJzsKJGxhbmdbJ21hbXNfaml0X2NyZWF0ZSddID0gJ0pJVC1jcmVhdGUgTUFNUyB1c2VycyBvbiBmaXJzdCBTU08nOwokbGFuZ1snYmxvY2tfZHVwbGljYXRlX2VtYWlsX3NpZ251cCddID0gJ0Jsb2NrIE1BTVNSZWdpc3RyYXRpb24gd2hlbiBlbWFpbCBpcyBTU08tbGlua2VkJzsKJGxhbmdbJ3Byb3ZpZGVyX25hbWUnXSA9ICdOYW1lJzsKJGxhbmdbJ3Byb3ZpZGVyX2RyaXZlciddID0gJ0RyaXZlcic7CiRsYW5nWydwcm92aWRlcl9lbmFibGVkJ10gPSAnRW5hYmxlZCc7CiRsYW5nWydwcm92aWRlcl9hZGQnXSA9ICdBZGQgcHJvdmlkZXInOwokbGFuZ1sncHJvdmlkZXJfZWRpdCddID0gJ0VkaXQgcHJvdmlkZXInOwokbGFuZ1sncHJvdmlkZXJfZGVsZXRlJ10gPSAnRGVsZXRlJzsKJGxhbmdbJ29hdXRoX2NsaWVudF9hZGQnXSA9ICdBZGQgT0F1dGggY2xpZW50JzsKJGxhbmdbJ2NsaWVudF9pZCddID0gJ0NsaWVudCBJRCc7CiRsYW5nWydjbGllbnRfc2VjcmV0J10gPSAnQ2xpZW50IHNlY3JldCAoc3RvcmVkIGhhc2hlZCknOwokbGFuZ1sncmVkaXJlY3RfdXJpcyddID0gJ1JlZGlyZWN0IFVSSXMgKG9uZSBwZXIgbGluZSknOwokbGFuZ1sncmV2b2tlX3Nlc3Npb24nXSA9ICdSZXZva2UnOwokbGFuZ1snYXVkaXRfZXhwb3J0J10gPSAnRXhwb3J0IENTVic7CiRsYW5nWydtYW1zX3N0YXR1cyddID0gJ01BTVMgc3RhdHVzJzsKJGxhbmdbJ21hbXNfYXV0aF9tb2R1bGUnXSA9ICdNQU1TIGF1dGhfbW9kdWxlIHByZWZlcmVuY2UnOwokbGFuZ1snbWFtc19yZWdpc3RyYXRpb25faW5zdGFsbGVkJ10gPSAnTUFNU1JlZ2lzdHJhdGlvbiBpbnN0YWxsZWQnOwokbGFuZ1snZXJyb3JfZW1haWxfc3NvX2xpbmtlZCddID0gJ1RoaXMgZW1haWwgaXMgYWxyZWFkeSBsaW5rZWQgdG8gU1NPIHNpZ24taW4uIFVzZSBTU08gb3IgY29udGFjdCBhbiBhZG1pbmlzdHJhdG9yLic7CiRsYW5nWydlcnJvcl9nZW5lcmljJ10gPSAnQXV0aGVudGljYXRpb24gZmFpbGVkLiBQbGVhc2UgdHJ5IGFnYWluLic7CiRsYW5nWydzc29fbG9naW5fd2l0aCddID0gJ1NpZ24gaW4gd2l0aCc7CiRsYW5nWydoZWxwX2FjdGlvbiddID0gJ0FjdGlvbjogb2F1dGhfc3RhcnQsIG9hdXRoX2NhbGxiYWNrLCBtYW1zX2xvZ2luLCB3ZWJhdXRobiwgc2FtbF9hY3MsIG9hdXRoX2F1dGhvcml6ZSwgb2F1dGhfdG9rZW4sIG9pZGNfZGlzY292ZXJ5JzsKJGxhbmdbJ2V4dGVuc2lvbnMnXSA9ICdFeHRlbnNpb25zJzsK]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/.htaccess</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PElmTW9kdWxlIG1vZF9hdXRoel9jb3JlLmM+CiAgICBSZXF1aXJlIGFsbCBkZW5pZWQKPC9JZk1vZHVsZT4KPElmTW9kdWxlICFtb2RfYXV0aHpfY29yZS5jPgogICAgT3JkZXIgZGVueSxhbGxvdwogICAgRGVueSBmcm9tIGFsbAo8L0lmTW9kdWxlPgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.mas_ah_mams_consumer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpyZXF1aXJlX29uY2UgZGlybmFtZShfX0RJUl9fKSAuICcvLi4vTUFNUy9saWIvaW50ZXJmYWNlLm1hbXNfYXV0aF9jb25zdW1lci5waHAnOwoKZmluYWwgY2xhc3MgTWFzX0FoX01hbXNDb25zdW1lciBpbXBsZW1lbnRzIG1hbXNfYXV0aF9jb25zdW1lcgp7CiAgICAvKiogQHZhciBDTVNNb2R1bGUgKi8KICAgIHByaXZhdGUgJG1vZDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoQ01TTW9kdWxlICRtb2QpCiAgICB7CiAgICAgICAgJHRoaXMtPm1vZCA9ICRtb2Q7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzX2F1dGhlbnRpY2F0ZWQoKQogICAgewogICAgICAgICRtYW1zID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdNQU1TJyk7CiAgICAgICAgaWYgKCEkbWFtcykgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHJldHVybiAoaW50KSAkbWFtcy0+TG9nZ2VkSW5JZCgpID4gMDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2NhcGFiaWxpdGllcygpCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5KAogICAgICAgICAgICBtYW1zX2F1dGhfY29uc3VtZXI6OkNBUEFCSUxJVFlfQUxUTE9HSU4sCiAgICAgICAgICAgIG1hbXNfYXV0aF9jb25zdW1lcjo6Q0FQQUJJTElUWV9MT0dPVVQsCiAgICAgICAgKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzX2NhcGFiaWxpdHkoJGZsYWcpCiAgICB7CiAgICAgICAgaWYgKCFpc19hcnJheSgkZmxhZykpIHsKICAgICAgICAgICAgJGZsYWcgPSBhcnJheSgkZmxhZyk7CiAgICAgICAgfQogICAgICAgIGZvcmVhY2ggKCRmbGFnIGFzICRvbmUpIHsKICAgICAgICAgICAgaWYgKGluX2FycmF5KCRvbmUsICR0aGlzLT5nZXRfY2FwYWJpbGl0aWVzKCksIHRydWUpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF9sb2dpbl9kaXNwbGF5KCRpZCwgJHJldHVybmlkLCAkcGFyYW1zKQogICAgewogICAgICAgIGlmICghTWFzX0FoX1BvbGljeTo6YWxsb3dNYW1zU3NvKCR0aGlzLT5tb2QpKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CiAgICAgICAgJHNtYXJ0eSA9IGNtc191dGlsczo6Z2V0X3NtYXJ0eSgpOwogICAgICAgIGlmICghJHNtYXJ0eSkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQogICAgICAgICRwcm92aWRlcnMgPSBNYXNfQWhfRHJpdmVyUmVnaXN0cnk6Omxpc3RQcm92aWRlcnMoJHRoaXMtPm1vZCwgdHJ1ZSk7CiAgICAgICAgJGxpbmtzID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoICgkcHJvdmlkZXJzIGFzICRwKSB7CiAgICAgICAgICAgIGlmICghaW5fYXJyYXkoKHN0cmluZykgJHBbJ2RyaXZlciddLCBhcnJheSgnb2F1dGgyJywgJ29pZGMnLCAnc2FtbCcsICd3ZWJhdXRobicpLCB0cnVlKSkgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGxpbmtzW10gPSBhcnJheSgKICAgICAgICAgICAgICAgICduYW1lJyA9PiAkcFsnbmFtZSddLAogICAgICAgICAgICAgICAgJ3VybCcgPT4gTWFzX0FoX0NvbmZpZzo6bW9kdWxlQWN0aW9uVXJsKCR0aGlzLT5tb2QsICdvYXV0aF9zdGFydCcsIGFycmF5KAogICAgICAgICAgICAgICAgICAgICdwcm92aWRlcl9pZCcgPT4gKGludCkgJHBbJ2lkJ10sCiAgICAgICAgICAgICAgICAgICAgJ3JldHVybl90eXBlJyA9PiAnbWFtcycsCiAgICAgICAgICAgICAgICApKSwKICAgICAgICAgICAgICAgICdkcml2ZXInID0+ICRwWydkcml2ZXInXSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdtYXNfYWhfcHJvdmlkZXJzJywgJGxpbmtzKTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ21hc19haF93ZWJhdXRobl91cmwnLCBNYXNfQWhfQ29uZmlnOjptb2R1bGVBY3Rpb25VcmwoJHRoaXMtPm1vZCwgJ3dlYmF1dGhuJywgYXJyYXkoCiAgICAgICAgICAgICdtb2RlJyA9PiAnbG9naW4nLAogICAgICAgICAgICAncmV0dXJuX3R5cGUnID0+ICdtYW1zJywKICAgICAgICApKSk7CiAgICAgICAgcmV0dXJuICR0aGlzLT5tb2QtPlByb2Nlc3NUZW1wbGF0ZSgnbWFtc19hbHRfbG9naW4udHBsJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF9sb2dvdXRfZGlzcGxheSgkaWQsICRyZXR1cm5pZCwgJHBhcmFtcykKICAgIHsKICAgICAgICByZXR1cm4gJyc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF9jaGFuZ2VzZXR0aW5nc19kaXNwbGF5KCRpZCwgJHJldHVybmlkLCAkcGFyYW1zKQogICAgewogICAgICAgIHJldHVybiAnJzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X3VzZXJfaW5mbygpCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5KCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF9jb25uZWN0aW5nX3Byb3BlcnR5X25hbWUoKQogICAgewogICAgICAgIHJldHVybiAoc3RyaW5nKSAkdGhpcy0+bW9kLT5HZXRQcmVmZXJlbmNlKCdtYXNfYWhfZGVmYXVsdF9jb25uZWN0aW5nX3Byb3BlcnR5JywgJ2F1dGhodWJfc3ViJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF91bmlxdWVfaWRlbnRpZmllcigpCiAgICB7CiAgICAgICAgcmV0dXJuICcnOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZ3JvdXBfbGlzdCgkd2l0aF9jb3VudCA9IGZhbHNlKQogICAgewogICAgICAgIHJldHVybiBhcnJheSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZ3JvdXBfbWVtYmVyc2hpcCgkdXNlcmlkKQogICAgewogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZGVmYXVsdF9ncm91cHMoKQogICAgewogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfdXNlcm5hbWVfcHJvbXB0KCkKICAgIHsKICAgICAgICAkbWFtcyA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnTUFNUycpOwogICAgICAgIHJldHVybiAkbWFtcyA/ICRtYW1zLT5MYW5nKCdwcm9tcHRfdXNlcm5hbWUnKSA6ICdVc2VybmFtZSc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHZhbGlkYXRlX3VzZXJuYW1lKCR1c2VybmFtZSwgJGNoZWNrX2VtYWlsX2FkZHIgPSBmYWxzZSwgJHVpZCA9IC0xKQogICAgewogICAgICAgICRtYW1zID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdNQU1TJyk7CiAgICAgICAgaWYgKCRtYW1zICYmIG1ldGhvZF9leGlzdHMoJG1hbXMsICdJc1ZhbGlkVXNlcm5hbWUnKSkgewogICAgICAgICAgICByZXR1cm4gKGJvb2wpICRtYW1zLT5Jc1ZhbGlkVXNlcm5hbWUoJHVzZXJuYW1lLCAkY2hlY2tfZW1haWxfYWRkciwgJHVpZCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/drivers/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/drivers/Mas_Ah_DriverInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgppbnRlcmZhY2UgTWFzX0FoX0RyaXZlckludGVyZmFjZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RHJpdmVyS2V5KCk7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXk8c3RyaW5nLG1peGVkPiAkcHJvdmlkZXIgUm93IGZyb20gcHJvdmlkZXJzIHRhYmxlICsgbWVyZ2VkIGNvbmZpZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXV0aG9yaXphdGlvblVybChDTVNNb2R1bGUgJG1vZCwgYXJyYXkgJHByb3ZpZGVyLCBhcnJheSAkY29udGV4dCk7CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5PHN0cmluZyxtaXhlZD58bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFuZGxlQ2FsbGJhY2soQ01TTW9kdWxlICRtb2QsIGFycmF5ICRwcm92aWRlciwgYXJyYXkgJHBhcmFtcywgYXJyYXkgJGNvbnRleHQpOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/drivers/Mas_Ah_DriverRegistry.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfRHJpdmVyUmVnaXN0cnkKewogICAgLyoqIEB2YXIgYXJyYXk8c3RyaW5nLE1hc19BaF9Ecml2ZXJJbnRlcmZhY2U+ICovCiAgICBwcml2YXRlIHN0YXRpYyAkZHJpdmVycyA9IGFycmF5KCk7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWdpc3RlcihNYXNfQWhfRHJpdmVySW50ZXJmYWNlICRkcml2ZXIpCiAgICB7CiAgICAgICAgc2VsZjo6JGRyaXZlcnNbJGRyaXZlci0+Z2V0RHJpdmVyS2V5KCldID0gJGRyaXZlcjsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJvb3QoKQogICAgewogICAgICAgIGlmIChjb3VudChzZWxmOjokZHJpdmVycykgPiAwKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgc2VsZjo6cmVnaXN0ZXIobmV3IE1hc19BaF9PQXV0aDJDbGllbnREcml2ZXIoKSk7CiAgICAgICAgc2VsZjo6cmVnaXN0ZXIobmV3IE1hc19BaF9PaWRjRHJpdmVyKCkpOwogICAgICAgIHNlbGY6OnJlZ2lzdGVyKG5ldyBNYXNfQWhfU2FtbFNwRHJpdmVyKCkpOwogICAgICAgIHNlbGY6OnJlZ2lzdGVyKG5ldyBNYXNfQWhfV2ViQXV0aG5Ecml2ZXIoKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIE1hc19BaF9Ecml2ZXJJbnRlcmZhY2V8bnVsbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldCgka2V5KQogICAgewogICAgICAgIHNlbGY6OmJvb3QoKTsKICAgICAgICAka2V5ID0gc3RydG9sb3dlcigoc3RyaW5nKSAka2V5KTsKICAgICAgICByZXR1cm4gaXNzZXQoc2VsZjo6JGRyaXZlcnNbJGtleV0pID8gc2VsZjo6JGRyaXZlcnNbJGtleV0gOiBudWxsOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbGlzdEtleXMoKQogICAgewogICAgICAgIHNlbGY6OmJvb3QoKTsKICAgICAgICByZXR1cm4gYXJyYXlfa2V5cyhzZWxmOjokZHJpdmVycyk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRQcm92aWRlcihDTVNNb2R1bGUgJG1vZCwgJHByb3ZpZGVySWQpCiAgICB7CiAgICAgICAgJGRiID0gJG1vZC0+R2V0RGIoKTsKICAgICAgICAkcm93ID0gJGRiLT5HZXRSb3coCiAgICAgICAgICAgICdTRUxFQ1QgKiBGUk9NICcgLiBNYXNfQWhfVGFibGVzOjpwcm92aWRlcnMoKSAuICcgV0hFUkUgaWQgPSA/IExJTUlUIDEnLAogICAgICAgICAgICBhcnJheSgoaW50KSAkcHJvdmlkZXJJZCkKICAgICAgICApOwogICAgICAgIGlmICghaXNfYXJyYXkoJHJvdykpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgICRjZmcgPSBqc29uX2RlY29kZSgoc3RyaW5nKSAoJHJvd1snY29uZmlnX2pzb24nXSA/PyAne30nKSwgdHJ1ZSk7CiAgICAgICAgaWYgKCFpc19hcnJheSgkY2ZnKSkgewogICAgICAgICAgICAkY2ZnID0gYXJyYXkoKTsKICAgICAgICB9CiAgICAgICAgJHJvd1snY29uZmlnJ10gPSAkY2ZnOwogICAgICAgICRyb3dbJ3Byb3ZpZGVyX2tleSddID0gaXNzZXQoJGNmZ1sncHJvdmlkZXJfa2V5J10pID8gKHN0cmluZykgJGNmZ1sncHJvdmlkZXJfa2V5J10gOiAncHJvdmlkZXJfJyAuICRyb3dbJ2lkJ107CiAgICAgICAgcmV0dXJuICRyb3c7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsaXN0UHJvdmlkZXJzKENNU01vZHVsZSAkbW9kLCAkZW5hYmxlZE9ubHkgPSBmYWxzZSkKICAgIHsKICAgICAgICAkc3FsID0gJ1NFTEVDVCAqIEZST00gJyAuIE1hc19BaF9UYWJsZXM6OnByb3ZpZGVycygpIC4gJyBPUkRFUiBCWSBzb3J0X29yZGVyIEFTQywgbmFtZSBBU0MnOwogICAgICAgIGlmICgkZW5hYmxlZE9ubHkpIHsKICAgICAgICAgICAgJHNxbCA9ICdTRUxFQ1QgKiBGUk9NICcgLiBNYXNfQWhfVGFibGVzOjpwcm92aWRlcnMoKSAuICcgV0hFUkUgZW5hYmxlZCA9IDEgT1JERVIgQlkgc29ydF9vcmRlciBBU0MsIG5hbWUgQVNDJzsKICAgICAgICB9CiAgICAgICAgJHJvd3MgPSAkbW9kLT5HZXREYigpLT5HZXRBcnJheSgkc3FsKTsKICAgICAgICByZXR1cm4gaXNfYXJyYXkoJHJvd3MpID8gJHJvd3MgOiBhcnJheSgpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/drivers/Mas_Ah_OAuth2ClientDriver.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfT0F1dGgyQ2xpZW50RHJpdmVyIGltcGxlbWVudHMgTWFzX0FoX0RyaXZlckludGVyZmFjZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RHJpdmVyS2V5KCkKICAgIHsKICAgICAgICByZXR1cm4gJ29hdXRoMic7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEF1dGhvcml6YXRpb25VcmwoQ01TTW9kdWxlICRtb2QsIGFycmF5ICRwcm92aWRlciwgYXJyYXkgJGNvbnRleHQpCiAgICB7CiAgICAgICAgcmV0dXJuIE1hc19BaF9Sb3V0ZXI6OmJ1aWxkT0F1dGhBdXRob3JpemVVcmwoJG1vZCwgJHByb3ZpZGVyLCAkY29udGV4dCwgZmFsc2UpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYW5kbGVDYWxsYmFjayhDTVNNb2R1bGUgJG1vZCwgYXJyYXkgJHByb3ZpZGVyLCBhcnJheSAkcGFyYW1zLCBhcnJheSAkY29udGV4dCkKICAgIHsKICAgICAgICByZXR1cm4gTWFzX0FoX1JvdXRlcjo6aGFuZGxlT0F1dGhDYWxsYmFjaygkbW9kLCAkcHJvdmlkZXIsICRwYXJhbXMsICRjb250ZXh0LCBmYWxzZSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/drivers/Mas_Ah_OidcDriver.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfT2lkY0RyaXZlciBpbXBsZW1lbnRzIE1hc19BaF9Ecml2ZXJJbnRlcmZhY2UKewogICAgcHVibGljIGZ1bmN0aW9uIGdldERyaXZlcktleSgpCiAgICB7CiAgICAgICAgcmV0dXJuICdvaWRjJzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXV0aG9yaXphdGlvblVybChDTVNNb2R1bGUgJG1vZCwgYXJyYXkgJHByb3ZpZGVyLCBhcnJheSAkY29udGV4dCkKICAgIHsKICAgICAgICByZXR1cm4gTWFzX0FoX1JvdXRlcjo6YnVpbGRPQXV0aEF1dGhvcml6ZVVybCgkbW9kLCAkcHJvdmlkZXIsICRjb250ZXh0LCB0cnVlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFuZGxlQ2FsbGJhY2soQ01TTW9kdWxlICRtb2QsIGFycmF5ICRwcm92aWRlciwgYXJyYXkgJHBhcmFtcywgYXJyYXkgJGNvbnRleHQpCiAgICB7CiAgICAgICAgcmV0dXJuIE1hc19BaF9Sb3V0ZXI6OmhhbmRsZU9BdXRoQ2FsbGJhY2soJG1vZCwgJHByb3ZpZGVyLCAkcGFyYW1zLCAkY29udGV4dCwgdHJ1ZSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/drivers/Mas_Ah_SamlSpDriver.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfU2FtbFNwRHJpdmVyIGltcGxlbWVudHMgTWFzX0FoX0RyaXZlckludGVyZmFjZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RHJpdmVyS2V5KCkKICAgIHsKICAgICAgICByZXR1cm4gJ3NhbWwnOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdXRob3JpemF0aW9uVXJsKENNU01vZHVsZSAkbW9kLCBhcnJheSAkcHJvdmlkZXIsIGFycmF5ICRjb250ZXh0KQogICAgewogICAgICAgICRjZmcgPSAkcHJvdmlkZXJbJ2NvbmZpZyddID8/IGFycmF5KCk7CiAgICAgICAgJGlkcFNzbyA9IGlzc2V0KCRjZmdbJ2lkcF9zc29fdXJsJ10pID8gKHN0cmluZykgJGNmZ1snaWRwX3Nzb191cmwnXSA6ICcnOwogICAgICAgIGlmICgkaWRwU3NvID09PSAnJykgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQogICAgICAgIGlmIChzZXNzaW9uX3N0YXR1cygpICE9PSBQSFBfU0VTU0lPTl9BQ1RJVkUpIHsKICAgICAgICAgICAgQHNlc3Npb25fc3RhcnQoKTsKICAgICAgICB9CiAgICAgICAgJF9TRVNTSU9OWydtYXNfYWhfc2FtbF9wcm92aWRlciddID0gKGludCkgJHByb3ZpZGVyWydpZCddOwogICAgICAgICRfU0VTU0lPTlsnbWFzX2FoX3JldHVybl90eXBlJ10gPSBpc3NldCgkY29udGV4dFsncmV0dXJuX3R5cGUnXSkgPyAoc3RyaW5nKSAkY29udGV4dFsncmV0dXJuX3R5cGUnXSA6ICdtYW1zJzsKICAgICAgICAkcmVsYXkgPSBiaW4yaGV4KHJhbmRvbV9ieXRlcygxNikpOwogICAgICAgICRfU0VTU0lPTlsnbWFzX2FoX3NhbWxfcmVsYXknXSA9ICRyZWxheTsKICAgICAgICAkYWNzID0gTWFzX0FoX0NvbmZpZzo6bW9kdWxlQWN0aW9uVXJsKCRtb2QsICdzYW1sX2FjcycsIGFycmF5KCdwcm92aWRlcl9pZCcgPT4gKGludCkgJHByb3ZpZGVyWydpZCddKSk7CiAgICAgICAgJHFzID0gaHR0cF9idWlsZF9xdWVyeShhcnJheSgKICAgICAgICAgICAgJ1NBTUxSZXF1ZXN0JyA9PiAnJywgLy8gU1AtaW5pdGlhdGVkIHZpYSByZWRpcmVjdCB0byBJZFAgbG9naW4gVVJMIHdoZW4gdXNpbmcgc2ltcGxlIHJlZGlyZWN0IG1vZGUKICAgICAgICAgICAgJ1JlbGF5U3RhdGUnID0+ICRyZWxheSwKICAgICAgICApKTsKICAgICAgICByZXR1cm4gJGlkcFNzbyAuIChzdHJwb3MoJGlkcFNzbywgJz8nKSA9PT0gZmFsc2UgPyAnPycgOiAnJicpIC4gJHFzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYW5kbGVDYWxsYmFjayhDTVNNb2R1bGUgJG1vZCwgYXJyYXkgJHByb3ZpZGVyLCBhcnJheSAkcGFyYW1zLCBhcnJheSAkY29udGV4dCkKICAgIHsKICAgICAgICByZXR1cm4gTWFzX0FoX1JvdXRlcjo6aGFuZGxlU2FtbEFjcygkbW9kLCAkcHJvdmlkZXIsICRwYXJhbXMsICRjb250ZXh0KTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/drivers/Mas_Ah_WebAuthnDriver.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfV2ViQXV0aG5Ecml2ZXIgaW1wbGVtZW50cyBNYXNfQWhfRHJpdmVySW50ZXJmYWNlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREcml2ZXJLZXkoKQogICAgewogICAgICAgIHJldHVybiAnd2ViYXV0aG4nOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdXRob3JpemF0aW9uVXJsKENNU01vZHVsZSAkbW9kLCBhcnJheSAkcHJvdmlkZXIsIGFycmF5ICRjb250ZXh0KQogICAgewogICAgICAgIHJldHVybiBNYXNfQWhfQ29uZmlnOjptb2R1bGVBY3Rpb25VcmwoJG1vZCwgJ3dlYmF1dGhuJywgYXJyYXkoCiAgICAgICAgICAgICdtb2RlJyA9PiAnbG9naW4nLAogICAgICAgICAgICAncmV0dXJuX3R5cGUnID0+IGlzc2V0KCRjb250ZXh0WydyZXR1cm5fdHlwZSddKSA/ICRjb250ZXh0WydyZXR1cm5fdHlwZSddIDogJ21hbXMnLAogICAgICAgICkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYW5kbGVDYWxsYmFjayhDTVNNb2R1bGUgJG1vZCwgYXJyYXkgJHByb3ZpZGVyLCBhcnJheSAkcGFyYW1zLCBhcnJheSAkY29udGV4dCkKICAgIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_audit.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfQXVkaXQKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2coQ01TTW9kdWxlICRtb2QsICRldmVudCwgJHNldmVyaXR5LCBhcnJheSAkY29udGV4dCA9IGFycmF5KCksICR1c2VySWQgPSAwLCAkcHJvdmlkZXJJZCA9IDApCiAgICB7CiAgICAgICAgJHNldmVyaXR5ID0gaW5fYXJyYXkoJHNldmVyaXR5LCBhcnJheSgnaW5mbycsICd3YXJuaW5nJywgJ2Vycm9yJyksIHRydWUpID8gJHNldmVyaXR5IDogJ2luZm8nOwogICAgICAgICRldmVudCA9IHN1YnN0cihwcmVnX3JlcGxhY2UoJy9bXmEtejAtOV9cLlw6XS9pJywgJycsIChzdHJpbmcpICRldmVudCksIDAsIDEyOCk7CiAgICAgICAgJGpzb24gPSBqc29uX2VuY29kZSgkY29udGV4dCwgSlNPTl9VTkVTQ0FQRURfU0xBU0hFUyB8IEpTT05fVU5FU0NBUEVEX1VOSUNPREUpOwogICAgICAgIGlmICgkanNvbiA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgJGpzb24gPSAne30nOwogICAgICAgIH0KICAgICAgICAkaXAgPSAnJzsKICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdjbXNfdXRpbHM6OmdldF9yZWFsX2lwJykpIHsKICAgICAgICAgICAgJGlwID0gKHN0cmluZykgY21zX3V0aWxzOjpnZXRfcmVhbF9pcCgpOwogICAgICAgIH0KICAgICAgICAkZGIgPSAkbW9kLT5HZXREYigpOwogICAgICAgICRzcWwgPSAnSU5TRVJUIElOVE8gJyAuIE1hc19BaF9UYWJsZXM6OmF1ZGl0TG9nKCkKICAgICAgICAgICAgLiAnIChjcmVhdGVkLCBldmVudCwgc2V2ZXJpdHksIHVzZXJfaWQsIHByb3ZpZGVyX2lkLCBpcF9oYXNoLCBjb250ZXh0X2pzb24pJwogICAgICAgICAgICAuICcgVkFMVUVTICg/LD8sPyw/LD8sPyw/KSc7CiAgICAgICAgJGRiLT5FeGVjdXRlKCRzcWwsIGFycmF5KAogICAgICAgICAgICB0aW1lKCksCiAgICAgICAgICAgICRldmVudCwKICAgICAgICAgICAgJHNldmVyaXR5LAogICAgICAgICAgICAoaW50KSAkdXNlcklkLAogICAgICAgICAgICAoaW50KSAkcHJvdmlkZXJJZCwKICAgICAgICAgICAgTWFzX0FoX0NyeXB0bzo6aGFzaElwKCRpcCksCiAgICAgICAgICAgICRqc29uLAogICAgICAgICkpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_cms_login.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfQ21zTG9naW5CcmlkZ2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2dpbkNtc1VzZXIoJHVzZXIpCiAgICB7CiAgICAgICAgaWYgKCEkdXNlciB8fCBlbXB0eSgkdXNlci0+aWQpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgQ01TIHVzZXInKTsKICAgICAgICB9CiAgICAgICAgaWYgKGVtcHR5KCR1c2VyLT5hY3RpdmUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdVc2VyIGFjY291bnQgaXMgbm90IGFjdGl2ZScpOwogICAgICAgIH0KICAgICAgICAkbG9naW5PcHMgPSBcQ01TTVNcTG9naW5PcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKTsKICAgICAgICAkbG9naW5PcHMtPmluaXRpYWxpemVfYXV0aGVudGljYXRpb24oJHVzZXIpOwogICAgICAgICRrZXkgPSAkbG9naW5PcHMtPmZpbmFsaXplX2F1dGhlbnRpY2F0aW9uKCR1c2VyKTsKICAgICAgICBhdWRpdCgkdXNlci0+aWQsICdBZG1pbiBVc2VybmFtZTogJyAuICR1c2VyLT51c2VybmFtZSwgJ0xvZ2dlZCBJbiB2aWEgTUFTX0F1dGhIdWInKTsKICAgICAgICByZXR1cm4gJGtleTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlZGlyZWN0QWZ0ZXJMb2dpbigpCiAgICB7CiAgICAgICAgJGNvbmZpZyA9IGNtc191dGlsczo6Z2V0X2NvbmZpZygpOwogICAgICAgIGlmIChpc3NldCgkX1NFU1NJT05bJ2xvZ2luX3JlZGlyZWN0X3RvJ10pKSB7CiAgICAgICAgICAgICR1cmxfb2IgPSBuZXcgXGNtc191cmwoJF9TRVNTSU9OWydsb2dpbl9yZWRpcmVjdF90byddKTsKICAgICAgICAgICAgdW5zZXQoJF9TRVNTSU9OWydsb2dpbl9yZWRpcmVjdF90byddKTsKICAgICAgICAgICAgJHVybF9vYi0+ZXJhc2VfcXVlcnl2YXIoJ19zXycpOwogICAgICAgICAgICAkdXJsX29iLT5lcmFzZV9xdWVyeXZhcignc3BfJyk7CiAgICAgICAgICAgICR1cmxfb2ItPnNldF9xdWVyeXZhcihDTVNfU0VDVVJFX1BBUkFNX05BTUUsICRfU0VTU0lPTltDTVNfVVNFUl9LRVldKTsKICAgICAgICAgICAgcmVkaXJlY3QoKHN0cmluZykgJHVybF9vYik7CiAgICAgICAgfQogICAgICAgICRob21lcGFnZSA9IFxjbXNfdXNlcnByZWZzOjpnZXRfZm9yX3VzZXIoJF9TRVNTSU9OWydjbXNfdXNlcmlkJ10sICdob21lcGFnZScpOwogICAgICAgIGlmICghJGhvbWVwYWdlKSB7CiAgICAgICAgICAgICRob21lcGFnZSA9ICRjb25maWdbJ2FkbWluX3VybCddOwogICAgICAgIH0KICAgICAgICAkaG9tZXBhZ2UgPSBcQ21zQWRtaW5VdGlsczo6Z2V0X3Nlc3Npb25fdXJsKCRob21lcGFnZSk7CiAgICAgICAgcmVkaXJlY3QoaHRtbF9lbnRpdHlfZGVjb2RlKCRob21lcGFnZSkpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_config.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIEh5YnJpZCBjb25maWc6IHNpdGUgY29uZmlnLnBocCBtYXNfYXV0aGh1YiBibG9jayArIG1vZHVsZSBwcmVmZXJlbmNlcy4KICovCmlmICghZGVmaW5lZCgnQ01TX1ZFUlNJT04nKSkgewogICAgZXhpdDsKfQoKZmluYWwgY2xhc3MgTWFzX0FoX0NvbmZpZwp7CiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXk8c3RyaW5nLG1peGVkPgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNpdGVCbG9jaygpCiAgICB7CiAgICAgICAgc3RhdGljICRibG9jayA9IG51bGw7CiAgICAgICAgaWYgKCRibG9jayAhPT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gJGJsb2NrOwogICAgICAgIH0KICAgICAgICAkYmxvY2sgPSBhcnJheSgpOwogICAgICAgICRjb25maWcgPSBjbXNfdXRpbHM6OmdldF9jb25maWcoKTsKICAgICAgICBpZiAoaXNzZXQoJGNvbmZpZ1snbWFzX2F1dGhodWInXSkgJiYgaXNfYXJyYXkoJGNvbmZpZ1snbWFzX2F1dGhodWInXSkpIHsKICAgICAgICAgICAgJGJsb2NrID0gJGNvbmZpZ1snbWFzX2F1dGhodWInXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRibG9jazsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVuY3J5cHRpb25LZXkoQ01TTW9kdWxlICRtb2QpCiAgICB7CiAgICAgICAgJGJsb2NrID0gc2VsZjo6c2l0ZUJsb2NrKCk7CiAgICAgICAgaWYgKCFlbXB0eSgkYmxvY2tbJ2VuY3J5cHRpb25fa2V5J10pICYmIGlzX3N0cmluZygkYmxvY2tbJ2VuY3J5cHRpb25fa2V5J10pKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSAkYmxvY2tbJ2VuY3J5cHRpb25fa2V5J107CiAgICAgICAgfQogICAgICAgICRwcmVmID0gKHN0cmluZykgJG1vZC0+R2V0UHJlZmVyZW5jZSgnbWFzX2FoX2VuY3J5cHRpb25fa2V5X2hpbnQnLCAnJyk7CiAgICAgICAgaWYgKCRwcmVmICE9PSAnJykgewogICAgICAgICAgICByZXR1cm4gJHByZWY7CiAgICAgICAgfQogICAgICAgIHJldHVybiAnJzsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNpZ25pbmdLZXkoQ01TTW9kdWxlICRtb2QpCiAgICB7CiAgICAgICAgJGJsb2NrID0gc2VsZjo6c2l0ZUJsb2NrKCk7CiAgICAgICAgaWYgKCFlbXB0eSgkYmxvY2tbJ3NpZ25pbmdfa2V5J10pKSB7CiAgICAgICAgICAgIHJldHVybiBpc19zdHJpbmcoJGJsb2NrWydzaWduaW5nX2tleSddKSA/ICRibG9ja1snc2lnbmluZ19rZXknXSA6ICcnOwogICAgICAgIH0KICAgICAgICByZXR1cm4gKHN0cmluZykgJG1vZC0+R2V0UHJlZmVyZW5jZSgnbWFzX2FoX3NpZ25pbmdfa2V5X3BhdGgnLCAnJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UHJvdmlkZXJTZWNyZXQoQ01TTW9kdWxlICRtb2QsICRwcm92aWRlcktleSwgJHNlY3JldE5hbWUpCiAgICB7CiAgICAgICAgJHByb3ZpZGVyS2V5ID0gcHJlZ19yZXBsYWNlKCcvW15hLXowLTlfXC1dL2knLCAnJywgKHN0cmluZykgJHByb3ZpZGVyS2V5KTsKICAgICAgICAkc2VjcmV0TmFtZSA9IHByZWdfcmVwbGFjZSgnL1teYS16MC05X1wtXS9pJywgJycsIChzdHJpbmcpICRzZWNyZXROYW1lKTsKICAgICAgICAkYmxvY2sgPSBzZWxmOjpzaXRlQmxvY2soKTsKICAgICAgICBpZiAoaXNzZXQoJGJsb2NrWydwcm92aWRlcnMnXVskcHJvdmlkZXJLZXldWyRzZWNyZXROYW1lXSkpIHsKICAgICAgICAgICAgcmV0dXJuICRibG9ja1sncHJvdmlkZXJzJ11bJHByb3ZpZGVyS2V5XVskc2VjcmV0TmFtZV07CiAgICAgICAgfQogICAgICAgICRwcmVmS2V5ID0gJ21hc19haF9zZWNyZXRfJyAuICRwcm92aWRlcktleSAuICdfJyAuICRzZWNyZXROYW1lOwogICAgICAgICRlbmMgPSAoc3RyaW5nKSAkbW9kLT5HZXRQcmVmZXJlbmNlKCRwcmVmS2V5LCAnJyk7CiAgICAgICAgaWYgKCRlbmMgPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIE1hc19BaF9DcnlwdG86OmRlY3J5cHRQcmVmKCRtb2QsICRlbmMpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FsbGJhY2tCYXNlVXJsKENNU01vZHVsZSAkbW9kKQogICAgewogICAgICAgICRjdXN0b20gPSB0cmltKChzdHJpbmcpICRtb2QtPkdldFByZWZlcmVuY2UoJ21hc19haF9jYWxsYmFja19iYXNlJywgJycpKTsKICAgICAgICBpZiAoJGN1c3RvbSAhPT0gJycpIHsKICAgICAgICAgICAgcmV0dXJuIHJ0cmltKCRjdXN0b20sICcvJyk7CiAgICAgICAgfQogICAgICAgICRjb25maWcgPSBjbXNfdXRpbHM6OmdldF9jb25maWcoKTsKICAgICAgICByZXR1cm4gcnRyaW0oKHN0cmluZykgJGNvbmZpZ1sncm9vdF91cmwnXSwgJy8nKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1vZHVsZUFjdGlvblVybChDTVNNb2R1bGUgJG1vZCwgJGFjdGlvbiwgYXJyYXkgJGV4dHJhID0gYXJyYXkoKSkKICAgIHsKICAgICAgICAkcmV0dXJuaWQgPSAoaW50KSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdtYXNfYWhfZnJvbnRlbmRfcmV0dXJuaWQnLCAnMCcpOwogICAgICAgIGlmICgkcmV0dXJuaWQgPCAxKSB7CiAgICAgICAgICAgICRyZXR1cm5pZCA9IChpbnQpIGNtc21zKCktPkdldENvbnRlbnRPcGVyYXRpb25zKCktPkdldERlZmF1bHRDb250ZW50KCk7CiAgICAgICAgfQogICAgICAgICRsaW5rSWQgPSAnY250bnQwMSc7CiAgICAgICAgaWYgKCRyZXR1cm5pZCA+IDApIHsKICAgICAgICAgICAgcmV0dXJuICRtb2QtPkNyZWF0ZUxpbmsoJGxpbmtJZCwgJGFjdGlvbiwgJHJldHVybmlkLCAnJywgJGV4dHJhLCAnJywgdHJ1ZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkbW9kLT5DcmVhdGVMaW5rKCRsaW5rSWQsICRhY3Rpb24sICcnLCAnJywgJGV4dHJhLCAnJywgdHJ1ZSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_crypto.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIEFFUy0yNTYtR0NNIGVuY3J5cHRpb24gZm9yIHRva2VucyBhbmQgZW5jcnlwdGVkIHByZWZlcmVuY2VzLgogKi8KaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfQ3J5cHRvCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZW5jcnlwdChDTVNNb2R1bGUgJG1vZCwgJHBsYWludGV4dCkKICAgIHsKICAgICAgICAkcGxhaW50ZXh0ID0gKHN0cmluZykgJHBsYWludGV4dDsKICAgICAgICBpZiAoJHBsYWludGV4dCA9PT0gJycpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KICAgICAgICAka2V5ID0gc2VsZjo6ZGVyaXZlS2V5KCRtb2QpOwogICAgICAgIGlmICgka2V5ID09PSAnJykgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQogICAgICAgICRpdiA9IHJhbmRvbV9ieXRlcygxMik7CiAgICAgICAgJHRhZyA9ICcnOwogICAgICAgICRjaXBoZXIgPSBvcGVuc3NsX2VuY3J5cHQoJHBsYWludGV4dCwgJ2Flcy0yNTYtZ2NtJywgJGtleSwgT1BFTlNTTF9SQVdfREFUQSwgJGl2LCAkdGFnKTsKICAgICAgICBpZiAoJGNpcGhlciA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYmFzZTY0X2VuY29kZSgkaXYgLiAkdGFnIC4gJGNpcGhlcik7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWNyeXB0KENNU01vZHVsZSAkbW9kLCAkcGF5bG9hZCkKICAgIHsKICAgICAgICAkcGF5bG9hZCA9IChzdHJpbmcpICRwYXlsb2FkOwogICAgICAgIGlmICgkcGF5bG9hZCA9PT0gJycpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KICAgICAgICAka2V5ID0gc2VsZjo6ZGVyaXZlS2V5KCRtb2QpOwogICAgICAgIGlmICgka2V5ID09PSAnJykgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQogICAgICAgICRyYXcgPSBiYXNlNjRfZGVjb2RlKCRwYXlsb2FkLCB0cnVlKTsKICAgICAgICBpZiAoJHJhdyA9PT0gZmFsc2UgfHwgc3RybGVuKCRyYXcpIDwgMjgpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KICAgICAgICAkaXYgPSBzdWJzdHIoJHJhdywgMCwgMTIpOwogICAgICAgICR0YWcgPSBzdWJzdHIoJHJhdywgMTIsIDE2KTsKICAgICAgICAkY2lwaGVyID0gc3Vic3RyKCRyYXcsIDI4KTsKICAgICAgICAkcGxhaW4gPSBvcGVuc3NsX2RlY3J5cHQoJGNpcGhlciwgJ2Flcy0yNTYtZ2NtJywgJGtleSwgT1BFTlNTTF9SQVdfREFUQSwgJGl2LCAkdGFnKTsKICAgICAgICByZXR1cm4gJHBsYWluID09PSBmYWxzZSA/ICcnIDogJHBsYWluOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZW5jcnlwdFByZWYoQ01TTW9kdWxlICRtb2QsICRwbGFpbnRleHQpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmVuY3J5cHQoJG1vZCwgJHBsYWludGV4dCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWNyeXB0UHJlZihDTVNNb2R1bGUgJG1vZCwgJHBheWxvYWQpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmRlY3J5cHQoJG1vZCwgJHBheWxvYWQpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGFzaElwKCRpcCkKICAgIHsKICAgICAgICByZXR1cm4gaGFzaCgnc2hhMjU2JywgKHN0cmluZykgJGlwIC4gJ3xtYXNfYWgnKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBkZXJpdmVLZXkoQ01TTW9kdWxlICRtb2QpCiAgICB7CiAgICAgICAgJG1hdGVyaWFsID0gTWFzX0FoX0NvbmZpZzo6ZW5jcnlwdGlvbktleSgkbW9kKTsKICAgICAgICBpZiAoJG1hdGVyaWFsID09PSAnJykgewogICAgICAgICAgICAkbWF0ZXJpYWwgPSAoc3RyaW5nKSBjbXNfc2l0ZXByZWZzOjpnZXQoJ01BU19BdXRoSHViX2ZhbGxiYWNrX2tleScpOwogICAgICAgICAgICBpZiAoJG1hdGVyaWFsID09PSAnJykgewogICAgICAgICAgICAgICAgJG1hdGVyaWFsID0gYmluMmhleChyYW5kb21fYnl0ZXMoMTYpKTsKICAgICAgICAgICAgICAgIGNtc19zaXRlcHJlZnM6OnNldCgnTUFTX0F1dGhIdWJfZmFsbGJhY2tfa2V5JywgJG1hdGVyaWFsKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gaGFzaCgnc2hhMjU2JywgJG1hdGVyaWFsLCB0cnVlKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_loader.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIEF1dG9sb2FkIEF1dGhIdWIgbGlicmFyeSBjbGFzc2VzIChubyBDb21wb3NlciByZXF1aXJlZCBmb3IgY29yZSkuCiAqLwppZiAoIWRlZmluZWQoJ0NNU19WRVJTSU9OJykpIHsKICAgIGV4aXQ7Cn0KCmlmIChkZWZpbmVkKCdNQVNfQUhfTE9BREVSX0RPTkUnKSkgewogICAgcmV0dXJuOwp9CmRlZmluZSgnTUFTX0FIX0xPQURFUl9ET05FJywgdHJ1ZSk7CgokYmFzZSA9IGRpcm5hbWUoX19GSUxFX18pOwokZmlsZXMgPSBhcnJheSgKICAgICdtYXNfYWhfdGFibGVzLnBocCcsCiAgICAnbWFzX2FoX2NvbmZpZy5waHAnLAogICAgJ21hc19haF9jcnlwdG8ucGhwJywKICAgICdtYXNfYWhfYXVkaXQucGhwJywKICAgICdtYXNfYWhfdXNlcl9saW5rLnBocCcsCiAgICAnbWFzX2FoX3Nlc3Npb24ucGhwJywKICAgICdtYXNfYWhfdG9rZW5fc3RvcmUucGhwJywKICAgICdtYXNfYWhfcG9saWN5LnBocCcsCiAgICAnbWFzX2FoX2Ntc19sb2dpbi5waHAnLAogICAgJ2RyaXZlcnMvTWFzX0FoX0RyaXZlckludGVyZmFjZS5waHAnLAogICAgJ2RyaXZlcnMvTWFzX0FoX0RyaXZlclJlZ2lzdHJ5LnBocCcsCiAgICAnZHJpdmVycy9NYXNfQWhfT0F1dGgyQ2xpZW50RHJpdmVyLnBocCcsCiAgICAnZHJpdmVycy9NYXNfQWhfT2lkY0RyaXZlci5waHAnLAogICAgJ2RyaXZlcnMvTWFzX0FoX1NhbWxTcERyaXZlci5waHAnLAogICAgJ2RyaXZlcnMvTWFzX0FoX1dlYkF1dGhuRHJpdmVyLnBocCcsCiAgICAnc2VydmVyL21hc19haF9qd3QucGhwJywKICAgICdzZXJ2ZXIvbWFzX2FoX29hdXRoX3NlcnZlci5waHAnLAogICAgJ3NlcnZlci9tYXNfYWhfb2lkY19kaXNjb3ZlcnkucGhwJywKICAgICdtYXNfYWhfd2ViYXV0aG4ucGhwJywKICAgICdtYXNfYWhfcm91dGVyLnBocCcsCiAgICAnbWFzX2FoX21hbXNfcHJvdmlzaW9uZXIucGhwJywKICAgICdtYXNfYWhfbWFtc19ldmVudHMucGhwJywKICAgICdtYXNfYWhfbWFtc19yZWdpc3RyYXRpb24ucGhwJywKKTsKCmZvcmVhY2ggKCRmaWxlcyBhcyAkZikgewogICAgJHBhdGggPSAkYmFzZSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkZjsKICAgIGlmIChpc19yZWFkYWJsZSgkcGF0aCkpIHsKICAgICAgICByZXF1aXJlX29uY2UgJHBhdGg7CiAgICB9Cn0KCiR2ZW5kb3IgPSBkaXJuYW1lKCRiYXNlKSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAndmVuZG9yJyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnYXV0b2xvYWQucGhwJzsKaWYgKGlzX3JlYWRhYmxlKCR2ZW5kb3IpKSB7CiAgICByZXF1aXJlX29uY2UgJHZlbmRvcjsKfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_mams_events.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfTWFtc0V2ZW50cwp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlZ2lzdGVyKENNU01vZHVsZSAkbW9kKQogICAgewogICAgICAgICRtb2QtPkFkZEV2ZW50SGFuZGxlcignTUFNUycsICdPbkxvZ2luRmFpbGVkJywgZmFsc2UpOwogICAgICAgICRtb2QtPkFkZEV2ZW50SGFuZGxlcignTUFNUycsICdPbkxvZ2luJywgZmFsc2UpOwogICAgICAgICRtb2QtPkFkZEV2ZW50SGFuZGxlcignTUFNUycsICdPbkxvZ291dCcsIGZhbHNlKTsKICAgICAgICAkbW9kLT5BZGRFdmVudEhhbmRsZXIoJ01BTVMnLCAnT25DcmVhdGVVc2VyJywgZmFsc2UpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGFuZGxlKENNU01vZHVsZSAkbW9kLCAkb3JpZ2luYXRvciwgJGV2ZW50bmFtZSwgYXJyYXkgJHBhcmFtcykKICAgIHsKICAgICAgICBpZiAoJG9yaWdpbmF0b3IgIT09ICdNQU1TJykgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHN3aXRjaCAoJGV2ZW50bmFtZSkgewogICAgICAgICAgICBjYXNlICdPbkxvZ2luRmFpbGVkJzoKICAgICAgICAgICAgICAgIE1hc19BaF9BdWRpdDo6bG9nKCRtb2QsICdtYW1zLmxvZ2luX2ZhaWxlZCcsICd3YXJuaW5nJywgJHBhcmFtcywgMCwgMCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnT25Mb2dpbic6CiAgICAgICAgICAgICAgICAkdWlkID0gaXNzZXQoJHBhcmFtc1snaWQnXSkgPyAoaW50KSAkcGFyYW1zWydpZCddIDogMDsKICAgICAgICAgICAgICAgIE1hc19BaF9BdWRpdDo6bG9nKCRtb2QsICdtYW1zLmxvZ2luJywgJ2luZm8nLCAkcGFyYW1zLCAkdWlkLCAwKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdPbkxvZ291dCc6CiAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbl9zdGF0dXMoKSA9PT0gUEhQX1NFU1NJT05fQUNUSVZFICYmIGlzc2V0KCRfU0VTU0lPTlsnbWFzX2FoX3NpZCddKSkgewogICAgICAgICAgICAgICAgICAgIE1hc19BaF9TZXNzaW9uOjpyZXZva2UoJG1vZCwgKHN0cmluZykgJF9TRVNTSU9OWydtYXNfYWhfc2lkJ10pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgXENNU01TXEhvb2tNYW5hZ2VyOjpkb19ob29rKCdNQVNfQXV0aEh1Yjo6T25NYW1zTG9nb3V0JywgJHBhcmFtcyk7CiAgICAgICAgICAgICAgICBNYXNfQWhfQXVkaXQ6OmxvZygkbW9kLCAnbWFtcy5sb2dvdXQnLCAnaW5mbycsICRwYXJhbXMsIDAsIDApOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ09uQ3JlYXRlVXNlcic6CiAgICAgICAgICAgICAgICBNYXNfQWhfQXVkaXQ6OmxvZygkbW9kLCAnbWFtcy51c2VyX2NyZWF0ZWQnLCAnaW5mbycsICRwYXJhbXMsIGlzc2V0KCRwYXJhbXNbJ2lkJ10pID8gKGludCkgJHBhcmFtc1snaWQnXSA6IDAsIDApOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_mams_provisioner.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfTWFtc1Byb3Zpc2lvbmVyCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWFtc01vZHVsZSgpCiAgICB7CiAgICAgICAgJG0gPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ01BTVMnKTsKICAgICAgICByZXR1cm4gJG0gPyAkbSA6IG51bGw7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwcm92aXNpb25PckxpbmsoQ01TTW9kdWxlICRtb2QsIGFycmF5ICRwcm92aWRlciwgYXJyYXkgJHByb2ZpbGUsICRzdWIsICRlbWFpbCkKICAgIHsKICAgICAgICAkbWFtcyA9IHNlbGY6Om1hbXNNb2R1bGUoKTsKICAgICAgICBpZiAoISRtYW1zKSB7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICAkcHJvcE5hbWUgPSBzZWxmOjpjb25uZWN0aW5nUHJvcGVydHkoJHByb3ZpZGVyKTsKICAgICAgICAkZXhpc3RpbmcgPSBzZWxmOjpmaW5kTWFtc1VzZXJCeVByb3BlcnR5KCRtYW1zLCAkcHJvcE5hbWUsICRzdWIpOwogICAgICAgIGlmICgkZXhpc3RpbmcgPiAwKSB7CiAgICAgICAgICAgIHJldHVybiAkZXhpc3Rpbmc7CiAgICAgICAgfQogICAgICAgIGlmICgkZW1haWwgIT09ICcnKSB7CiAgICAgICAgICAgICRieUVtYWlsID0gc2VsZjo6ZmluZE1hbXNVc2VyQnlFbWFpbCgkbWFtcywgJGVtYWlsKTsKICAgICAgICAgICAgaWYgKCRieUVtYWlsID4gMCkgewogICAgICAgICAgICAgICAgc2VsZjo6c2V0Q29ubmVjdGluZ1Byb3BlcnR5KCRtYW1zLCAkYnlFbWFpbCwgJHByb3BOYW1lLCAkc3ViKTsKICAgICAgICAgICAgICAgIHJldHVybiAkYnlFbWFpbDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkaml0ID0gKGludCkgJG1vZC0+R2V0UHJlZmVyZW5jZSgnbWFzX2FoX21hbXNfaml0X2NyZWF0ZScsICcxJyk7CiAgICAgICAgaWYgKCRqaXQgIT09IDEpIHsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmOjpqaXRDcmVhdGUoJG1vZCwgJG1hbXMsICRwcm92aWRlciwgJHByb2ZpbGUsICRzdWIsICRlbWFpbCwgJHByb3BOYW1lKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZpbmFsaXplTWFtc0xvZ2luKENNU01vZHVsZSAkbW9kLCAkbWFtc1VpZCwgYXJyYXkgJHByb3ZpZGVyLCAkc3ViKQogICAgewogICAgICAgICRtYW1zID0gc2VsZjo6bWFtc01vZHVsZSgpOwogICAgICAgIGlmICghJG1hbXMpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAkcHJvcE5hbWUgPSBzZWxmOjpjb25uZWN0aW5nUHJvcGVydHkoJHByb3ZpZGVyKTsKICAgICAgICBzZWxmOjpzZXRDb25uZWN0aW5nUHJvcGVydHkoJG1hbXMsICRtYW1zVWlkLCAkcHJvcE5hbWUsICRzdWIpOwogICAgICAgIGlmIChtZXRob2RfZXhpc3RzKCRtYW1zLCAnU2V0U2Vzc2lvblVzZXInKSkgewogICAgICAgICAgICAkbWFtcy0+U2V0U2Vzc2lvblVzZXIoJG1hbXNVaWQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBjb25uZWN0aW5nUHJvcGVydHkoYXJyYXkgJHByb3ZpZGVyKQogICAgewogICAgICAgICRjZmcgPSAkcHJvdmlkZXJbJ2NvbmZpZyddID8/IGFycmF5KCk7CiAgICAgICAgaWYgKCFlbXB0eSgkY2ZnWydtYW1zX2Nvbm5lY3RpbmdfcHJvcGVydHknXSkpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpICRjZmdbJ21hbXNfY29ubmVjdGluZ19wcm9wZXJ0eSddOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJ2F1dGhodWJfJyAuIHByZWdfcmVwbGFjZSgnL1teYS16MC05X10vaScsICdfJywgKHN0cmluZykgKCRwcm92aWRlclsnbmFtZSddID8/ICdwcm92aWRlcicpKSAuICdfc3ViJzsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBmaW5kTWFtc1VzZXJCeVByb3BlcnR5KCRtYW1zLCAkcHJvcE5hbWUsICRzdWIpCiAgICB7CiAgICAgICAgaWYgKCFtZXRob2RfZXhpc3RzKCRtYW1zLCAnR2V0VXNlcklERnJvbVByb3BlcnR5JykpIHsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgICAgICR1aWQgPSAkbWFtcy0+R2V0VXNlcklERnJvbVByb3BlcnR5KCRwcm9wTmFtZSwgJHN1Yik7CiAgICAgICAgcmV0dXJuICR1aWQgPyAoaW50KSAkdWlkIDogMDsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBmaW5kTWFtc1VzZXJCeUVtYWlsKCRtYW1zLCAkZW1haWwpCiAgICB7CiAgICAgICAgaWYgKCFtZXRob2RfZXhpc3RzKCRtYW1zLCAnR2V0VXNlcklERnJvbVByb3BlcnR5JykpIHsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgICAgICR1aWQgPSAkbWFtcy0+R2V0VXNlcklERnJvbVByb3BlcnR5KCdlbWFpbCcsICRlbWFpbCk7CiAgICAgICAgaWYgKCR1aWQpIHsKICAgICAgICAgICAgcmV0dXJuIChpbnQpICR1aWQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHNldENvbm5lY3RpbmdQcm9wZXJ0eSgkbWFtcywgJHVpZCwgJHByb3BOYW1lLCAkc3ViKQogICAgewogICAgICAgIGlmIChtZXRob2RfZXhpc3RzKCRtYW1zLCAnU2V0VXNlclByb3BlcnR5RnVsbCcpKSB7CiAgICAgICAgICAgICRtYW1zLT5TZXRVc2VyUHJvcGVydHlGdWxsKCR1aWQsICRwcm9wTmFtZSwgJHN1Yik7CiAgICAgICAgfQogICAgICAgIGlmIChtZXRob2RfZXhpc3RzKCRtYW1zLCAnU2V0VXNlclByb3BlcnR5JykpIHsKICAgICAgICAgICAgJG1hbXMtPlNldFVzZXJQcm9wZXJ0eSgkdWlkLCAkcHJvcE5hbWUsICRzdWIpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBqaXRDcmVhdGUoQ01TTW9kdWxlICRtb2QsICRtYW1zLCBhcnJheSAkcHJvdmlkZXIsIGFycmF5ICRwcm9maWxlLCAkc3ViLCAkZW1haWwsICRwcm9wTmFtZSkKICAgIHsKICAgICAgICAkdXNlcm5hbWUgPSBzZWxmOjp1bmlxdWVVc2VybmFtZSgkbWFtcywgJGVtYWlsLCAkc3ViKTsKICAgICAgICAkcGFzc3dvcmQgPSBiaW4yaGV4KHJhbmRvbV9ieXRlcygxNikpOwogICAgICAgICR1aWQgPSAwOwogICAgICAgIGlmIChtZXRob2RfZXhpc3RzKCRtYW1zLCAnQWRkVXNlcicpKSB7CiAgICAgICAgICAgICR1aWQgPSAoaW50KSAkbWFtcy0+QWRkVXNlcigkdXNlcm5hbWUsICRwYXNzd29yZCwgJGVtYWlsKTsKICAgICAgICB9CiAgICAgICAgaWYgKCR1aWQgPCAxKSB7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICAkZ3JvdXBzID0gc2VsZjo6ZGVmYXVsdEdyb3VwcygkbW9kLCAkcHJvdmlkZXIpOwogICAgICAgIGZvcmVhY2ggKCRncm91cHMgYXMgJGdpZCkgewogICAgICAgICAgICBpZiAobWV0aG9kX2V4aXN0cygkbWFtcywgJ0Fzc2lnblVzZXJUb0dyb3VwJykpIHsKICAgICAgICAgICAgICAgICRtYW1zLT5Bc3NpZ25Vc2VyVG9Hcm91cCgkdWlkLCAkZ2lkKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzZWxmOjpzZXRDb25uZWN0aW5nUHJvcGVydHkoJG1hbXMsICR1aWQsICRwcm9wTmFtZSwgJHN1Yik7CiAgICAgICAgJG5hbWUgPSBpc3NldCgkcHJvZmlsZVsnbmFtZSddKSA/IChzdHJpbmcpICRwcm9maWxlWyduYW1lJ10gOiAkdXNlcm5hbWU7CiAgICAgICAgaWYgKG1ldGhvZF9leGlzdHMoJG1hbXMsICdTZXRVc2VyUHJvcGVydHlGdWxsJykpIHsKICAgICAgICAgICAgJG1hbXMtPlNldFVzZXJQcm9wZXJ0eUZ1bGwoJHVpZCwgJ2Rpc3BsYXlfbmFtZScsICRuYW1lKTsKICAgICAgICAgICAgaWYgKCRlbWFpbCAhPT0gJycpIHsKICAgICAgICAgICAgICAgICRtYW1zLT5TZXRVc2VyUHJvcGVydHlGdWxsKCR1aWQsICdlbWFpbCcsICRlbWFpbCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJG1hbXMtPlNldFVzZXJQcm9wZXJ0eUZ1bGwoJHVpZCwgJ2F1dGhodWJfcHJvdmlkZXInLCAoc3RyaW5nKSAoJHByb3ZpZGVyWyduYW1lJ10gPz8gJycpKTsKICAgICAgICB9CiAgICAgICAgXENNU01TXEhvb2tNYW5hZ2VyOjpkb19ob29rKCdNQVNfQXV0aEh1Yjo6T25NYW1zVXNlclByb3Zpc2lvbmVkJywgYXJyYXkoCiAgICAgICAgICAgICdtYW1zX3VpZCcgPT4gJHVpZCwKICAgICAgICAgICAgJ3Byb3ZpZGVyX2lkJyA9PiAoaW50KSAkcHJvdmlkZXJbJ2lkJ10sCiAgICAgICAgICAgICdjcmVhdGVkJyA9PiB0cnVlLAogICAgICAgICkpOwogICAgICAgIE1hc19BaF9BdWRpdDo6bG9nKCRtb2QsICdtYW1zLmppdF9jcmVhdGVkJywgJ2luZm8nLCBhcnJheSgndXNlcm5hbWUnID0+ICR1c2VybmFtZSksICR1aWQsIChpbnQpICRwcm92aWRlclsnaWQnXSk7CiAgICAgICAgcmV0dXJuICR1aWQ7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gdW5pcXVlVXNlcm5hbWUoJG1hbXMsICRlbWFpbCwgJHN1YikKICAgIHsKICAgICAgICAkYmFzZSA9ICd1c2VyJzsKICAgICAgICBpZiAoJGVtYWlsICE9PSAnJyAmJiBzdHJwb3MoJGVtYWlsLCAnQCcpICE9PSBmYWxzZSkgewogICAgICAgICAgICAkYmFzZSA9IHByZWdfcmVwbGFjZSgnL1teYS16MC05X10vaScsICdfJywgc3Ryc3RyKCRlbWFpbCwgJ0AnLCB0cnVlKSk7CiAgICAgICAgfQogICAgICAgIGlmICgkYmFzZSA9PT0gJycpIHsKICAgICAgICAgICAgJGJhc2UgPSAnYXV0aGh1Yic7CiAgICAgICAgfQogICAgICAgICRjYW5kaWRhdGUgPSBzdWJzdHIoJGJhc2UsIDAsIDQwKTsKICAgICAgICAkbiA9IDA7CiAgICAgICAgd2hpbGUgKCRuIDwgMTAwKSB7CiAgICAgICAgICAgICR0cnkgPSAkY2FuZGlkYXRlIC4gKCRuID4gMCA/IChzdHJpbmcpICRuIDogJycpOwogICAgICAgICAgICBpZiAobWV0aG9kX2V4aXN0cygkbWFtcywgJ0lzVmFsaWRVc2VybmFtZScpICYmICRtYW1zLT5Jc1ZhbGlkVXNlcm5hbWUoJHRyeSkpIHsKICAgICAgICAgICAgICAgIGlmIChtZXRob2RfZXhpc3RzKCRtYW1zLCAnR2V0VXNlcklEJykgJiYgISRtYW1zLT5HZXRVc2VySUQoJHRyeSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRyeTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkbisrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJ2F1dGhodWJfJyAuIHN1YnN0cigkc3ViLCAwLCAxMik7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZGVmYXVsdEdyb3VwcyhDTVNNb2R1bGUgJG1vZCwgYXJyYXkgJHByb3ZpZGVyKQogICAgewogICAgICAgICRjZmcgPSAkcHJvdmlkZXJbJ2NvbmZpZyddID8/IGFycmF5KCk7CiAgICAgICAgaWYgKCFlbXB0eSgkY2ZnWydtYW1zX2RlZmF1bHRfZ3JvdXBzJ10pICYmIGlzX2FycmF5KCRjZmdbJ21hbXNfZGVmYXVsdF9ncm91cHMnXSkpIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5X21hcCgnaW50dmFsJywgJGNmZ1snbWFtc19kZWZhdWx0X2dyb3VwcyddKTsKICAgICAgICB9CiAgICAgICAgJHJhdyA9IHRyaW0oKHN0cmluZykgJG1vZC0+R2V0UHJlZmVyZW5jZSgnbWFzX2FoX21hbXNfZGVmYXVsdF9ncm91cHMnLCAnJykpOwogICAgICAgIGlmICgkcmF3ID09PSAnJykgewogICAgICAgICAgICByZXR1cm4gYXJyYXkoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFycmF5X2ZpbHRlcihhcnJheV9tYXAoJ2ludHZhbCcsIGV4cGxvZGUoJywnLCAkcmF3KSkpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_mams_registration.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfTWFtc1JlZ2lzdHJhdGlvbgp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlZ2lzdGVyKENNU01vZHVsZSAkbW9kKQogICAgewogICAgICAgIGlmICghY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdNQU1TUmVnaXN0cmF0aW9uJykpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAkbW9kLT5BZGRFdmVudEhhbmRsZXIoJ01BTVNSZWdpc3RyYXRpb24nLCAnYmVmb3JlTmV3VXNlcicsIGZhbHNlKTsKICAgICAgICAkbW9kLT5BZGRFdmVudEhhbmRsZXIoJ01BTVNSZWdpc3RyYXRpb24nLCAnb25OZXdVc2VyJywgZmFsc2UpOwogICAgICAgICRtb2QtPkFkZEV2ZW50SGFuZGxlcignTUFNU1JlZ2lzdHJhdGlvbicsICdvblVzZXJSZWdpc3RlcmVkJywgZmFsc2UpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGFuZGxlKENNU01vZHVsZSAkbW9kLCAkb3JpZ2luYXRvciwgJGV2ZW50bmFtZSwgJiRwYXJhbXMpCiAgICB7CiAgICAgICAgaWYgKCRvcmlnaW5hdG9yICE9PSAnTUFNU1JlZ2lzdHJhdGlvbicpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBzd2l0Y2ggKCRldmVudG5hbWUpIHsKICAgICAgICAgICAgY2FzZSAnYmVmb3JlTmV3VXNlcic6CiAgICAgICAgICAgICAgICBzZWxmOjpiZWZvcmVOZXdVc2VyKCRtb2QsICRwYXJhbXMpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ29uTmV3VXNlcic6CiAgICAgICAgICAgICAgICBNYXNfQWhfQXVkaXQ6OmxvZygkbW9kLCAnbWFtc3JlZy50ZW1wX3VzZXInLCAnaW5mbycsICRwYXJhbXMsIDAsIDApOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ29uVXNlclJlZ2lzdGVyZWQnOgogICAgICAgICAgICAgICAgTWFzX0FoX0F1ZGl0Ojpsb2coJG1vZCwgJ21hbXNyZWcucmVnaXN0ZXJlZCcsICdpbmZvJywgJHBhcmFtcywgaXNzZXQoJHBhcmFtc1snaWQnXSkgPyAoaW50KSAkcGFyYW1zWydpZCddIDogMCwgMCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gYmVmb3JlTmV3VXNlcihDTVNNb2R1bGUgJG1vZCwgYXJyYXkgJiRwYXJhbXMpCiAgICB7CiAgICAgICAgaWYgKChpbnQpICRtb2QtPkdldFByZWZlcmVuY2UoJ21hc19haF9ibG9ja19kdXBsaWNhdGVfZW1haWxfc2lnbnVwJywgJzAnKSAhPT0gMSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgICRlbWFpbCA9IGlzc2V0KCRwYXJhbXNbJ2VtYWlsJ10pID8gc3RydG9sb3dlcih0cmltKChzdHJpbmcpICRwYXJhbXNbJ2VtYWlsJ10pKSA6ICcnOwogICAgICAgIGlmICgkZW1haWwgPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgJGxpbmsgPSBNYXNfQWhfVXNlckxpbms6OmZpbmRCeUVtYWlsKCRtb2QsICRlbWFpbCwgMCk7CiAgICAgICAgaWYgKCRsaW5rICYmICgoaW50KSAoJGxpbmtbJ21hbXNfdXNlcl9pZCddID8/IDApID4gMCkpIHsKICAgICAgICAgICAgJG1zZyA9ICRtb2QtPkxhbmcoJ2Vycm9yX2VtYWlsX3Nzb19saW5rZWQnKTsKICAgICAgICAgICAgaWYgKGNsYXNzX2V4aXN0cygnTUFNU1JFR1ZhbGlkYXRpb25FcnJvcicpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTUFNU1JFR1ZhbGlkYXRpb25FcnJvcigkbXNnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcGFyYW1zWydtZXNzYWdlJ10gPSAkbXNnOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_policy.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfUG9saWN5CnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYWxsb3dBZG1pblNzbyhDTVNNb2R1bGUgJG1vZCkKICAgIHsKICAgICAgICByZXR1cm4gKGludCkgJG1vZC0+R2V0UHJlZmVyZW5jZSgnbWFzX2FoX2VuYWJsZV9hZG1pbl9zc28nLCAnMScpID09PSAxOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYWxsb3dNYW1zU3NvKENNU01vZHVsZSAkbW9kKQogICAgewogICAgICAgIHJldHVybiAoaW50KSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdtYXNfYWhfZW5hYmxlX21hbXNfc3NvJywgJzEnKSA9PT0gMTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGF1dG9MaW5rQnlFbWFpbChDTVNNb2R1bGUgJG1vZCkKICAgIHsKICAgICAgICByZXR1cm4gKGludCkgJG1vZC0+R2V0UHJlZmVyZW5jZSgnbWFzX2FoX2F1dG9fbGlua19lbWFpbCcsICcxJykgPT09IDE7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByYXRlTGltaXRBbGxvdyhDTVNNb2R1bGUgJG1vZCwgJGJ1Y2tldCkKICAgIHsKICAgICAgICAkbWF4ID0gKGludCkgJG1vZC0+R2V0UHJlZmVyZW5jZSgnbWFzX2FoX3JhdGVfcGVyX2hvdXInLCAnNjAnKTsKICAgICAgICBpZiAoJG1heCA8IDEpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgICRrZXkgPSAnbWFzX2FoX3JsXycgLiBtZDUoKHN0cmluZykgJGJ1Y2tldCk7CiAgICAgICAgJHJhdyA9IChzdHJpbmcpICRtb2QtPkdldFByZWZlcmVuY2UoJGtleSwgJycpOwogICAgICAgICRub3cgPSB0aW1lKCk7CiAgICAgICAgJHdpbmRvdyA9IDM2MDA7CiAgICAgICAgJGRhdGEgPSBhcnJheSgndCcgPT4gJG5vdywgJ2MnID0+IDApOwogICAgICAgIGlmICgkcmF3ICE9PSAnJykgewogICAgICAgICAgICAkZGVjb2RlZCA9IGpzb25fZGVjb2RlKCRyYXcsIHRydWUpOwogICAgICAgICAgICBpZiAoaXNfYXJyYXkoJGRlY29kZWQpKSB7CiAgICAgICAgICAgICAgICAkZGF0YSA9ICRkZWNvZGVkOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghaXNzZXQoJGRhdGFbJ3QnXSkgfHwgKCRub3cgLSAoaW50KSAkZGF0YVsndCddKSA+ICR3aW5kb3cpIHsKICAgICAgICAgICAgJGRhdGEgPSBhcnJheSgndCcgPT4gJG5vdywgJ2MnID0+IDApOwogICAgICAgIH0KICAgICAgICAkZGF0YVsnYyddID0gKGludCkgKCRkYXRhWydjJ10gPz8gMCkgKyAxOwogICAgICAgICRtb2QtPlNldFByZWZlcmVuY2UoJGtleSwganNvbl9lbmNvZGUoJGRhdGEpKTsKICAgICAgICByZXR1cm4gJGRhdGFbJ2MnXSA8PSAkbWF4OwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY21zVXNlckFsbG93ZWQoQ01TTW9kdWxlICRtb2QsICR1c2VyKQogICAgewogICAgICAgIGlmICghJHVzZXIgfHwgZW1wdHkoJHVzZXItPmlkKSB8fCBlbXB0eSgkdXNlci0+YWN0aXZlKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgICRhbGxvd2VkID0gdHJpbSgoc3RyaW5nKSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdtYXNfYWhfYWRtaW5fYWxsb3dlZF9ncm91cHMnLCAnJykpOwogICAgICAgIGlmICgkYWxsb3dlZCA9PT0gJycpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgICRpZHMgPSBhcnJheV9maWx0ZXIoYXJyYXlfbWFwKCdpbnR2YWwnLCBleHBsb2RlKCcsJywgJGFsbG93ZWQpKSk7CiAgICAgICAgaWYgKGNvdW50KCRpZHMpID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICAkZ3JvdXBzID0gJHVzZXItPmdyb3VwcyA/PyBhcnJheSgpOwogICAgICAgIGZvcmVhY2ggKCRpZHMgYXMgJGdpZCkgewogICAgICAgICAgICBpZiAoaW5fYXJyYXkoJGdpZCwgJGdyb3VwcywgdHJ1ZSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_router.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfUm91dGVyCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RhcnRPQXV0aChDTVNNb2R1bGUgJG1vZCwgJHByb3ZpZGVySWQsICRyZXR1cm5UeXBlID0gJ21hbXMnKQogICAgewogICAgICAgIGlmICghTWFzX0FoX1BvbGljeTo6cmF0ZUxpbWl0QWxsb3coJG1vZCwgJ29hdXRoX3N0YXJ0XycgLiBjbXNfdXRpbHM6OmdldF9yZWFsX2lwKCkpKSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgnZXJyb3InID0+ICdyYXRlX2xpbWl0ZWQnKTsKICAgICAgICB9CiAgICAgICAgJHByb3ZpZGVyID0gTWFzX0FoX0RyaXZlclJlZ2lzdHJ5OjpnZXRQcm92aWRlcigkbW9kLCAkcHJvdmlkZXJJZCk7CiAgICAgICAgaWYgKCEkcHJvdmlkZXIgfHwgIShpbnQpICRwcm92aWRlclsnZW5hYmxlZCddKSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgnZXJyb3InID0+ICdpbnZhbGlkX3Byb3ZpZGVyJyk7CiAgICAgICAgfQogICAgICAgICRkcml2ZXIgPSBNYXNfQWhfRHJpdmVyUmVnaXN0cnk6OmdldCgoc3RyaW5nKSAkcHJvdmlkZXJbJ2RyaXZlciddKTsKICAgICAgICBpZiAoISRkcml2ZXIpIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCdlcnJvcicgPT4gJ2ludmFsaWRfZHJpdmVyJyk7CiAgICAgICAgfQogICAgICAgIGlmIChzZXNzaW9uX3N0YXR1cygpICE9PSBQSFBfU0VTU0lPTl9BQ1RJVkUpIHsKICAgICAgICAgICAgQHNlc3Npb25fc3RhcnQoKTsKICAgICAgICB9CiAgICAgICAgJHJldHVyblR5cGUgPSBpbl9hcnJheSgkcmV0dXJuVHlwZSwgYXJyYXkoJ2FkbWluJywgJ21hbXMnKSwgdHJ1ZSkgPyAkcmV0dXJuVHlwZSA6ICdtYW1zJzsKICAgICAgICBpZiAoJHJldHVyblR5cGUgPT09ICdhZG1pbicgJiYgIU1hc19BaF9Qb2xpY3k6OmFsbG93QWRtaW5Tc28oJG1vZCkpIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCdlcnJvcicgPT4gJ2FkbWluX3Nzb19kaXNhYmxlZCcpOwogICAgICAgIH0KICAgICAgICBpZiAoJHJldHVyblR5cGUgPT09ICdtYW1zJyAmJiAhTWFzX0FoX1BvbGljeTo6YWxsb3dNYW1zU3NvKCRtb2QpKSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgnZXJyb3InID0+ICdtYW1zX3Nzb19kaXNhYmxlZCcpOwogICAgICAgIH0KICAgICAgICAkX1NFU1NJT05bJ21hc19haF9yZXR1cm5fdHlwZSddID0gJHJldHVyblR5cGU7CiAgICAgICAgJHVybCA9ICRkcml2ZXItPmdldEF1dGhvcml6YXRpb25VcmwoJG1vZCwgJHByb3ZpZGVyLCBhcnJheSgncmV0dXJuX3R5cGUnID0+ICRyZXR1cm5UeXBlKSk7CiAgICAgICAgaWYgKCR1cmwgPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgnZXJyb3InID0+ICdhdXRob3JpemVfdXJsX2ZhaWxlZCcpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYXJyYXkoJ3JlZGlyZWN0JyA9PiAkdXJsKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJ1aWxkT0F1dGhBdXRob3JpemVVcmwoQ01TTW9kdWxlICRtb2QsIGFycmF5ICRwcm92aWRlciwgYXJyYXkgJGNvbnRleHQsICRvaWRjKQogICAgewogICAgICAgICRjZmcgPSAkcHJvdmlkZXJbJ2NvbmZpZyddID8/IGFycmF5KCk7CiAgICAgICAgJGF1dGhVcmwgPSBpc3NldCgkY2ZnWydhdXRob3JpemVfdXJsJ10pID8gKHN0cmluZykgJGNmZ1snYXV0aG9yaXplX3VybCddIDogJyc7CiAgICAgICAgJGNsaWVudElkID0gaXNzZXQoJGNmZ1snY2xpZW50X2lkJ10pID8gKHN0cmluZykgJGNmZ1snY2xpZW50X2lkJ10gOiAnJzsKICAgICAgICBpZiAoJGF1dGhVcmwgPT09ICcnIHx8ICRjbGllbnRJZCA9PT0gJycpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KICAgICAgICBpZiAoc2Vzc2lvbl9zdGF0dXMoKSAhPT0gUEhQX1NFU1NJT05fQUNUSVZFKSB7CiAgICAgICAgICAgIEBzZXNzaW9uX3N0YXJ0KCk7CiAgICAgICAgfQogICAgICAgICRzdGF0ZSA9IGJpbjJoZXgocmFuZG9tX2J5dGVzKDE2KSk7CiAgICAgICAgJHZlcmlmaWVyID0gYmluMmhleChyYW5kb21fYnl0ZXMoMzIpKTsKICAgICAgICAkY2hhbGxlbmdlID0gcnRyaW0oc3RydHIoYmFzZTY0X2VuY29kZShoYXNoKCdzaGEyNTYnLCAkdmVyaWZpZXIsIHRydWUpKSwgJysvJywgJy1fJyksICc9Jyk7CiAgICAgICAgJF9TRVNTSU9OWydtYXNfYWhfb2F1dGhfc3RhdGUnXSA9ICRzdGF0ZTsKICAgICAgICAkX1NFU1NJT05bJ21hc19haF9vYXV0aF9wa2NlJ10gPSAkdmVyaWZpZXI7CiAgICAgICAgJF9TRVNTSU9OWydtYXNfYWhfb2F1dGhfcHJvdmlkZXInXSA9IChpbnQpICRwcm92aWRlclsnaWQnXTsKICAgICAgICAkX1NFU1NJT05bJ21hc19haF9yZXR1cm5fdHlwZSddID0gaXNzZXQoJGNvbnRleHRbJ3JldHVybl90eXBlJ10pID8gKHN0cmluZykgJGNvbnRleHRbJ3JldHVybl90eXBlJ10gOiAnbWFtcyc7CiAgICAgICAgJHJlZGlyZWN0VXJpID0gTWFzX0FoX0NvbmZpZzo6bW9kdWxlQWN0aW9uVXJsKCRtb2QsICdvYXV0aF9jYWxsYmFjaycsIGFycmF5KAogICAgICAgICAgICAncHJvdmlkZXJfaWQnID0+IChpbnQpICRwcm92aWRlclsnaWQnXSwKICAgICAgICApKTsKICAgICAgICAkc2NvcGUgPSBpc3NldCgkY2ZnWydzY29wZSddKSA/IChzdHJpbmcpICRjZmdbJ3Njb3BlJ10gOiAoJG9pZGMgPyAnb3BlbmlkIHByb2ZpbGUgZW1haWwnIDogJ3Byb2ZpbGUgZW1haWwnKTsKICAgICAgICAkcGFyYW1zID0gYXJyYXkoCiAgICAgICAgICAgICdjbGllbnRfaWQnID0+ICRjbGllbnRJZCwKICAgICAgICAgICAgJ3Jlc3BvbnNlX3R5cGUnID0+ICdjb2RlJywKICAgICAgICAgICAgJ3JlZGlyZWN0X3VyaScgPT4gJHJlZGlyZWN0VXJpLAogICAgICAgICAgICAnc2NvcGUnID0+ICRzY29wZSwKICAgICAgICAgICAgJ3N0YXRlJyA9PiAkc3RhdGUsCiAgICAgICAgICAgICdjb2RlX2NoYWxsZW5nZScgPT4gJGNoYWxsZW5nZSwKICAgICAgICAgICAgJ2NvZGVfY2hhbGxlbmdlX21ldGhvZCcgPT4gJ1MyNTYnLAogICAgICAgICk7CiAgICAgICAgaWYgKCRvaWRjICYmICFlbXB0eSgkY2ZnWydub25jZSddKSkgewogICAgICAgICAgICAkcGFyYW1zWydub25jZSddID0gYmluMmhleChyYW5kb21fYnl0ZXMoOCkpOwogICAgICAgICAgICAkX1NFU1NJT05bJ21hc19haF9vYXV0aF9ub25jZSddID0gJHBhcmFtc1snbm9uY2UnXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRhdXRoVXJsIC4gKHN0cnBvcygkYXV0aFVybCwgJz8nKSA9PT0gZmFsc2UgPyAnPycgOiAnJicpIC4gaHR0cF9idWlsZF9xdWVyeSgkcGFyYW1zKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhhbmRsZU9BdXRoQ2FsbGJhY2soQ01TTW9kdWxlICRtb2QsIGFycmF5ICRwcm92aWRlciwgYXJyYXkgJHBhcmFtcywgYXJyYXkgJGNvbnRleHQsICRvaWRjKQogICAgewogICAgICAgIGlmICghTWFzX0FoX1BvbGljeTo6cmF0ZUxpbWl0QWxsb3coJG1vZCwgJ29hdXRoX2NiXycgLiBjbXNfdXRpbHM6OmdldF9yZWFsX2lwKCkpKSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgnZXJyb3InID0+ICdyYXRlX2xpbWl0ZWQnKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlc3Npb25fc3RhdHVzKCkgIT09IFBIUF9TRVNTSU9OX0FDVElWRSkgewogICAgICAgICAgICBAc2Vzc2lvbl9zdGFydCgpOwogICAgICAgIH0KICAgICAgICAkc3RhdGUgPSBpc3NldCgkcGFyYW1zWydzdGF0ZSddKSA/IChzdHJpbmcpICRwYXJhbXNbJ3N0YXRlJ10gOiAnJzsKICAgICAgICBpZiAoJHN0YXRlID09PSAnJyB8fCAhaXNzZXQoJF9TRVNTSU9OWydtYXNfYWhfb2F1dGhfc3RhdGUnXSkgfHwgIWhhc2hfZXF1YWxzKCRfU0VTU0lPTlsnbWFzX2FoX29hdXRoX3N0YXRlJ10sICRzdGF0ZSkpIHsKICAgICAgICAgICAgTWFzX0FoX0F1ZGl0Ojpsb2coJG1vZCwgJ29hdXRoLnN0YXRlX21pc21hdGNoJywgJ2Vycm9yJywgYXJyYXkoKSwgMCwgKGludCkgJHByb3ZpZGVyWydpZCddKTsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCdlcnJvcicgPT4gJ2ludmFsaWRfc3RhdGUnKTsKICAgICAgICB9CiAgICAgICAgJGNvZGUgPSBpc3NldCgkcGFyYW1zWydjb2RlJ10pID8gKHN0cmluZykgJHBhcmFtc1snY29kZSddIDogJyc7CiAgICAgICAgaWYgKCRjb2RlID09PSAnJykgewogICAgICAgICAgICByZXR1cm4gYXJyYXkoJ2Vycm9yJyA9PiAnbWlzc2luZ19jb2RlJyk7CiAgICAgICAgfQogICAgICAgICRjZmcgPSAkcHJvdmlkZXJbJ2NvbmZpZyddID8/IGFycmF5KCk7CiAgICAgICAgJHRva2VuVXJsID0gaXNzZXQoJGNmZ1sndG9rZW5fdXJsJ10pID8gKHN0cmluZykgJGNmZ1sndG9rZW5fdXJsJ10gOiAnJzsKICAgICAgICAkY2xpZW50SWQgPSBpc3NldCgkY2ZnWydjbGllbnRfaWQnXSkgPyAoc3RyaW5nKSAkY2ZnWydjbGllbnRfaWQnXSA6ICcnOwogICAgICAgICRwa2V5ID0gaXNzZXQoJHByb3ZpZGVyWydwcm92aWRlcl9rZXknXSkgPyAkcHJvdmlkZXJbJ3Byb3ZpZGVyX2tleSddIDogKCdwcm92aWRlcl8nIC4gJHByb3ZpZGVyWydpZCddKTsKICAgICAgICAkY2xpZW50U2VjcmV0ID0gKHN0cmluZykgTWFzX0FoX0NvbmZpZzo6Z2V0UHJvdmlkZXJTZWNyZXQoJG1vZCwgJHBrZXksICdjbGllbnRfc2VjcmV0Jyk7CiAgICAgICAgJHZlcmlmaWVyID0gaXNzZXQoJF9TRVNTSU9OWydtYXNfYWhfb2F1dGhfcGtjZSddKSA/IChzdHJpbmcpICRfU0VTU0lPTlsnbWFzX2FoX29hdXRoX3BrY2UnXSA6ICcnOwogICAgICAgICRyZWRpcmVjdFVyaSA9IE1hc19BaF9Db25maWc6Om1vZHVsZUFjdGlvblVybCgkbW9kLCAnb2F1dGhfY2FsbGJhY2snLCBhcnJheSgncHJvdmlkZXJfaWQnID0+IChpbnQpICRwcm92aWRlclsnaWQnXSkpOwogICAgICAgICR0b2tlbkJvZHkgPSBzZWxmOjpodHRwUG9zdEZvcm0oJHRva2VuVXJsLCBhcnJheSgKICAgICAgICAgICAgJ2dyYW50X3R5cGUnID0+ICdhdXRob3JpemF0aW9uX2NvZGUnLAogICAgICAgICAgICAnY29kZScgPT4gJGNvZGUsCiAgICAgICAgICAgICdyZWRpcmVjdF91cmknID0+ICRyZWRpcmVjdFVyaSwKICAgICAgICAgICAgJ2NsaWVudF9pZCcgPT4gJGNsaWVudElkLAogICAgICAgICAgICAnY2xpZW50X3NlY3JldCcgPT4gJGNsaWVudFNlY3JldCwKICAgICAgICAgICAgJ2NvZGVfdmVyaWZpZXInID0+ICR2ZXJpZmllciwKICAgICAgICApKTsKICAgICAgICBpZiAoIWlzX2FycmF5KCR0b2tlbkJvZHkpIHx8IGVtcHR5KCR0b2tlbkJvZHlbJ2FjY2Vzc190b2tlbiddKSkgewogICAgICAgICAgICBNYXNfQWhfQXVkaXQ6OmxvZygkbW9kLCAnb2F1dGgudG9rZW5fZmFpbGVkJywgJ2Vycm9yJywgYXJyYXkoJ2h0dHAnID0+IGlzX2FycmF5KCR0b2tlbkJvZHkpID8gJ2VtcHR5JyA6ICdmYWlsJyksIDAsIChpbnQpICRwcm92aWRlclsnaWQnXSk7CiAgICAgICAgICAgIE1hc19BaF9TZXNzaW9uOjpjbGVhck9BdXRoU3RhdGUoKTsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCdlcnJvcicgPT4gJ3Rva2VuX2V4Y2hhbmdlX2ZhaWxlZCcpOwogICAgICAgIH0KICAgICAgICAkcHJvZmlsZSA9IHNlbGY6OmZldGNoVXNlclByb2ZpbGUoJGNmZywgJHRva2VuQm9keSwgJG9pZGMpOwogICAgICAgIE1hc19BaF9TZXNzaW9uOjpjbGVhck9BdXRoU3RhdGUoKTsKICAgICAgICByZXR1cm4gc2VsZjo6ZmluYWxpemVGZWRlcmF0ZWRMb2dpbigkbW9kLCAkcHJvdmlkZXIsICRwcm9maWxlLCAkX1NFU1NJT05bJ21hc19haF9yZXR1cm5fdHlwZSddID8/ICdtYW1zJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5PHN0cmluZyxtaXhlZD4KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZmV0Y2hVc2VyUHJvZmlsZShhcnJheSAkY2ZnLCBhcnJheSAkdG9rZW5Cb2R5LCAkb2lkYykKICAgIHsKICAgICAgICAkc3ViID0gJyc7CiAgICAgICAgJGVtYWlsID0gJyc7CiAgICAgICAgJG5hbWUgPSAnJzsKICAgICAgICBpZiAoJG9pZGMgJiYgIWVtcHR5KCR0b2tlbkJvZHlbJ2lkX3Rva2VuJ10pKSB7CiAgICAgICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoJy4nLCAoc3RyaW5nKSAkdG9rZW5Cb2R5WydpZF90b2tlbiddKTsKICAgICAgICAgICAgaWYgKGNvdW50KCRwYXJ0cykgPj0gMikgewogICAgICAgICAgICAgICAgJHBheWxvYWQgPSBqc29uX2RlY29kZShiYXNlNjRfZGVjb2RlKHN0cnRyKCRwYXJ0c1sxXSwgJy1fJywgJysvJykpLCB0cnVlKTsKICAgICAgICAgICAgICAgIGlmIChpc19hcnJheSgkcGF5bG9hZCkpIHsKICAgICAgICAgICAgICAgICAgICAkc3ViID0gaXNzZXQoJHBheWxvYWRbJ3N1YiddKSA/IChzdHJpbmcpICRwYXlsb2FkWydzdWInXSA6ICcnOwogICAgICAgICAgICAgICAgICAgICRlbWFpbCA9IGlzc2V0KCRwYXlsb2FkWydlbWFpbCddKSA/IChzdHJpbmcpICRwYXlsb2FkWydlbWFpbCddIDogJyc7CiAgICAgICAgICAgICAgICAgICAgJG5hbWUgPSBpc3NldCgkcGF5bG9hZFsnbmFtZSddKSA/IChzdHJpbmcpICRwYXlsb2FkWyduYW1lJ10gOiAnJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoJHN1YiA9PT0gJycgJiYgIWVtcHR5KCRjZmdbJ3VzZXJpbmZvX3VybCddKSkgewogICAgICAgICAgICAkaW5mbyA9IHNlbGY6Omh0dHBHZXRKc29uKChzdHJpbmcpICRjZmdbJ3VzZXJpbmZvX3VybCddLCAoc3RyaW5nKSAkdG9rZW5Cb2R5WydhY2Nlc3NfdG9rZW4nXSk7CiAgICAgICAgICAgIGlmIChpc19hcnJheSgkaW5mbykpIHsKICAgICAgICAgICAgICAgICRzdWIgPSBpc3NldCgkaW5mb1snc3ViJ10pID8gKHN0cmluZykgJGluZm9bJ3N1YiddIDogKGlzc2V0KCRpbmZvWydpZCddKSA/IChzdHJpbmcpICRpbmZvWydpZCddIDogJycpOwogICAgICAgICAgICAgICAgaWYgKCRlbWFpbCA9PT0gJycgJiYgaXNzZXQoJGluZm9bJ2VtYWlsJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgJGVtYWlsID0gKHN0cmluZykgJGluZm9bJ2VtYWlsJ107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoJG5hbWUgPT09ICcnICYmIGlzc2V0KCRpbmZvWyduYW1lJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgJG5hbWUgPSAoc3RyaW5nKSAkaW5mb1snbmFtZSddOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICgkc3ViID09PSAnJykgewogICAgICAgICAgICAkc3ViID0gaGFzaCgnc2hhMjU2JywgKHN0cmluZykgJHRva2VuQm9keVsnYWNjZXNzX3Rva2VuJ10pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYXJyYXkoJ3N1YicgPT4gJHN1YiwgJ2VtYWlsJyA9PiAkZW1haWwsICduYW1lJyA9PiAkbmFtZSwgJ3Rva2VuJyA9PiAkdG9rZW5Cb2R5KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZpbmFsaXplRmVkZXJhdGVkTG9naW4oQ01TTW9kdWxlICRtb2QsIGFycmF5ICRwcm92aWRlciwgYXJyYXkgJHByb2ZpbGUsICRyZXR1cm5UeXBlKQogICAgewogICAgICAgICRyZXR1cm5UeXBlID0gaW5fYXJyYXkoJHJldHVyblR5cGUsIGFycmF5KCdhZG1pbicsICdtYW1zJyksIHRydWUpID8gJHJldHVyblR5cGUgOiAnbWFtcyc7CiAgICAgICAgJHN1YiA9IChzdHJpbmcpICgkcHJvZmlsZVsnc3ViJ10gPz8gJycpOwogICAgICAgICRlbWFpbCA9IHN0cnRvbG93ZXIodHJpbSgoc3RyaW5nKSAoJHByb2ZpbGVbJ2VtYWlsJ10gPz8gJycpKSk7CiAgICAgICAgJGxpbmsgPSBNYXNfQWhfVXNlckxpbms6OmZpbmRCeUV4dGVybmFsKCRtb2QsIChpbnQpICRwcm92aWRlclsnaWQnXSwgJHN1Yik7CiAgICAgICAgaWYgKCEkbGluayAmJiAkZW1haWwgIT09ICcnICYmIE1hc19BaF9Qb2xpY3k6OmF1dG9MaW5rQnlFbWFpbCgkbW9kKSkgewogICAgICAgICAgICAkbGluayA9IE1hc19BaF9Vc2VyTGluazo6ZmluZEJ5RW1haWwoJG1vZCwgJGVtYWlsLCAoaW50KSAkcHJvdmlkZXJbJ2lkJ10pOwogICAgICAgIH0KICAgICAgICBpZiAoJHJldHVyblR5cGUgPT09ICdhZG1pbicpIHsKICAgICAgICAgICAgcmV0dXJuIHNlbGY6OmZpbmFsaXplQWRtaW4oJG1vZCwgJHByb3ZpZGVyLCAkcHJvZmlsZSwgJGxpbmssICRzdWIsICRlbWFpbCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmOjpmaW5hbGl6ZU1hbXMoJG1vZCwgJHByb3ZpZGVyLCAkcHJvZmlsZSwgJGxpbmssICRzdWIsICRlbWFpbCk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZmluYWxpemVBZG1pbihDTVNNb2R1bGUgJG1vZCwgYXJyYXkgJHByb3ZpZGVyLCBhcnJheSAkcHJvZmlsZSwgJGxpbmssICRzdWIsICRlbWFpbCkKICAgIHsKICAgICAgICAkY21zVXNlcklkID0gJGxpbmsgPyAoaW50KSAoJGxpbmtbJ2Ntc191c2VyX2lkJ10gPz8gMCkgOiAwOwogICAgICAgIGlmICgkY21zVXNlcklkIDwgMSAmJiAkZW1haWwgIT09ICcnKSB7CiAgICAgICAgICAgICR1c2Vyb3BzID0gVXNlck9wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpOwogICAgICAgICAgICAkdSA9ICR1c2Vyb3BzLT5Mb2FkVXNlckJ5VXNlcm5hbWUoJGVtYWlsKTsKICAgICAgICAgICAgaWYgKCR1ICYmICR1LT5pZCkgewogICAgICAgICAgICAgICAgJGNtc1VzZXJJZCA9IChpbnQpICR1LT5pZDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoJGNtc1VzZXJJZCA8IDEpIHsKICAgICAgICAgICAgTWFzX0FoX0F1ZGl0Ojpsb2coJG1vZCwgJ2FkbWluLmxvZ2luX25vX2xpbmsnLCAnd2FybmluZycsIGFycmF5KCdzdWInID0+ICRzdWIpLCAwLCAoaW50KSAkcHJvdmlkZXJbJ2lkJ10pOwogICAgICAgICAgICByZXR1cm4gYXJyYXkoJ2Vycm9yJyA9PiAnbm9fYWRtaW5fYWNjb3VudCcpOwogICAgICAgIH0KICAgICAgICAkdXNlcm9wcyA9IFVzZXJPcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKTsKICAgICAgICAkdXNlciA9ICR1c2Vyb3BzLT5Mb2FkVXNlckJ5SUQoJGNtc1VzZXJJZCk7CiAgICAgICAgaWYgKCEkdXNlciB8fCAhTWFzX0FoX1BvbGljeTo6Y21zVXNlckFsbG93ZWQoJG1vZCwgJHVzZXIpKSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgnZXJyb3InID0+ICdhY2Nlc3NfZGVuaWVkJyk7CiAgICAgICAgfQogICAgICAgIE1hc19BaF9Vc2VyTGluazo6dXBzZXJ0KCRtb2QsIGFycmF5KAogICAgICAgICAgICAncHJvdmlkZXJfaWQnID0+IChpbnQpICRwcm92aWRlclsnaWQnXSwKICAgICAgICAgICAgJ2V4dGVybmFsX3N1YicgPT4gJHN1YiwKICAgICAgICAgICAgJ2Ntc191c2VyX2lkJyA9PiAkY21zVXNlcklkLAogICAgICAgICAgICAnZW1haWwnID0+ICRlbWFpbCwKICAgICAgICAgICAgJ2F0dHJzX2pzb24nID0+ICRwcm9maWxlLAogICAgICAgICkpOwogICAgICAgIE1hc19BaF9DbXNMb2dpbkJyaWRnZTo6bG9naW5DbXNVc2VyKCR1c2VyKTsKICAgICAgICBNYXNfQWhfU2Vzc2lvbjo6c3RhcnRIdWJTZXNzaW9uKCRtb2QsIGFycmF5KCdjbXNfdXNlcl9pZCcgPT4gJGNtc1VzZXJJZCwgJ3Byb3ZpZGVyX2lkJyA9PiAoaW50KSAkcHJvdmlkZXJbJ2lkJ10pKTsKICAgICAgICBNYXNfQWhfQXVkaXQ6OmxvZygkbW9kLCAnYWRtaW4uc3NvX3N1Y2Nlc3MnLCAnaW5mbycsIGFycmF5KCksICRjbXNVc2VySWQsIChpbnQpICRwcm92aWRlclsnaWQnXSk7CiAgICAgICAgcmV0dXJuIGFycmF5KCdzdWNjZXNzJyA9PiB0cnVlLCAndHlwZScgPT4gJ2FkbWluJywgJ3JlZGlyZWN0X2FkbWluJyA9PiB0cnVlKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBmaW5hbGl6ZU1hbXMoQ01TTW9kdWxlICRtb2QsIGFycmF5ICRwcm92aWRlciwgYXJyYXkgJHByb2ZpbGUsICRsaW5rLCAkc3ViLCAkZW1haWwpCiAgICB7CiAgICAgICAgJG1hbXNVaWQgPSAkbGluayA/IChpbnQpICgkbGlua1snbWFtc191c2VyX2lkJ10gPz8gMCkgOiAwOwogICAgICAgIGlmICgkbWFtc1VpZCA8IDEpIHsKICAgICAgICAgICAgJG1hbXNVaWQgPSBNYXNfQWhfTWFtc1Byb3Zpc2lvbmVyOjpwcm92aXNpb25PckxpbmsoJG1vZCwgJHByb3ZpZGVyLCAkcHJvZmlsZSwgJHN1YiwgJGVtYWlsKTsKICAgICAgICB9CiAgICAgICAgaWYgKCRtYW1zVWlkIDwgMSkgewogICAgICAgICAgICBNYXNfQWhfQXVkaXQ6OmxvZygkbW9kLCAnbWFtcy5sb2dpbl9ub191c2VyJywgJ3dhcm5pbmcnLCBhcnJheSgnc3ViJyA9PiAkc3ViKSwgMCwgKGludCkgJHByb3ZpZGVyWydpZCddKTsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCdlcnJvcicgPT4gJ25vX21hbXNfYWNjb3VudCcpOwogICAgICAgIH0KICAgICAgICBNYXNfQWhfVXNlckxpbms6OnVwc2VydCgkbW9kLCBhcnJheSgKICAgICAgICAgICAgJ3Byb3ZpZGVyX2lkJyA9PiAoaW50KSAkcHJvdmlkZXJbJ2lkJ10sCiAgICAgICAgICAgICdleHRlcm5hbF9zdWInID0+ICRzdWIsCiAgICAgICAgICAgICdtYW1zX3VzZXJfaWQnID0+ICRtYW1zVWlkLAogICAgICAgICAgICAnZW1haWwnID0+ICRlbWFpbCwKICAgICAgICAgICAgJ2F0dHJzX2pzb24nID0+ICRwcm9maWxlLAogICAgICAgICkpOwogICAgICAgIE1hc19BaF9NYW1zUHJvdmlzaW9uZXI6OmZpbmFsaXplTWFtc0xvZ2luKCRtb2QsICRtYW1zVWlkLCAkcHJvdmlkZXIsICRzdWIpOwogICAgICAgIE1hc19BaF9TZXNzaW9uOjpzdGFydEh1YlNlc3Npb24oJG1vZCwgYXJyYXkoJ21hbXNfdXNlcl9pZCcgPT4gJG1hbXNVaWQsICdwcm92aWRlcl9pZCcgPT4gKGludCkgJHByb3ZpZGVyWydpZCddKSk7CiAgICAgICAgXENNU01TXEhvb2tNYW5hZ2VyOjpkb19ob29rKCdNQVNfQXV0aEh1Yjo6T25NYW1zTG9naW4nLCBhcnJheSgKICAgICAgICAgICAgJ21hbXNfdWlkJyA9PiAkbWFtc1VpZCwKICAgICAgICAgICAgJ3Byb3ZpZGVyX2lkJyA9PiAoaW50KSAkcHJvdmlkZXJbJ2lkJ10sCiAgICAgICAgICAgICdzdWInID0+ICRzdWIsCiAgICAgICAgKSk7CiAgICAgICAgTWFzX0FoX0F1ZGl0Ojpsb2coJG1vZCwgJ21hbXMuc3NvX3N1Y2Nlc3MnLCAnaW5mbycsIGFycmF5KCksICRtYW1zVWlkLCAoaW50KSAkcHJvdmlkZXJbJ2lkJ10pOwogICAgICAgIHJldHVybiBhcnJheSgnc3VjY2VzcycgPT4gdHJ1ZSwgJ3R5cGUnID0+ICdtYW1zJyk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoYW5kbGVTYW1sQWNzKENNU01vZHVsZSAkbW9kLCBhcnJheSAkcHJvdmlkZXIsIGFycmF5ICRwYXJhbXMsIGFycmF5ICRjb250ZXh0KQogICAgewogICAgICAgICRjZmcgPSAkcHJvdmlkZXJbJ2NvbmZpZyddID8/IGFycmF5KCk7CiAgICAgICAgJHBrZXkgPSBpc3NldCgkcHJvdmlkZXJbJ3Byb3ZpZGVyX2tleSddKSA/ICRwcm92aWRlclsncHJvdmlkZXJfa2V5J10gOiAoJ3Byb3ZpZGVyXycgLiAkcHJvdmlkZXJbJ2lkJ10pOwogICAgICAgICRhdXRvbG9hZCA9IGRpcm5hbWUoX19ESVJfXykgLiAnL3ZlbmRvci9hdXRvbG9hZC5waHAnOwogICAgICAgIGlmICghaXNfcmVhZGFibGUoJGF1dG9sb2FkKSkgewogICAgICAgICAgICBNYXNfQWhfQXVkaXQ6OmxvZygkbW9kLCAnc2FtbC52ZW5kb3JfbWlzc2luZycsICdlcnJvcicsIGFycmF5KCksIDAsIChpbnQpICRwcm92aWRlclsnaWQnXSk7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgnZXJyb3InID0+ICdzYW1sX25vdF9jb25maWd1cmVkJyk7CiAgICAgICAgfQogICAgICAgIHJlcXVpcmVfb25jZSAkYXV0b2xvYWQ7CiAgICAgICAgaWYgKCFjbGFzc19leGlzdHMoJ09uZUxvZ2luXFxTYW1sMlxcQXV0aCcpKSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgnZXJyb3InID0+ICdzYW1sX25vdF9jb25maWd1cmVkJyk7CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRzZXR0aW5ncyA9IHNlbGY6OmJ1aWxkU2FtbFNldHRpbmdzKCRtb2QsICRwcm92aWRlciwgJGNmZywgJHBrZXkpOwogICAgICAgICAgICAkYXV0aCA9IG5ldyBPbmVMb2dpblxTYW1sMlxBdXRoKCRzZXR0aW5ncyk7CiAgICAgICAgICAgICRhdXRoLT5wcm9jZXNzUmVzcG9uc2UoKTsKICAgICAgICAgICAgaWYgKCEkYXV0aC0+aXNBdXRoZW50aWNhdGVkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBhcnJheSgnZXJyb3InID0+ICdzYW1sX2F1dGhfZmFpbGVkJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGF0dHJzID0gJGF1dGgtPmdldEF0dHJpYnV0ZXMoKTsKICAgICAgICAgICAgJGVtYWlsID0gJyc7CiAgICAgICAgICAgIGlmIChpc3NldCgkYXR0cnNbJ2VtYWlsJ11bMF0pKSB7CiAgICAgICAgICAgICAgICAkZW1haWwgPSAoc3RyaW5nKSAkYXR0cnNbJ2VtYWlsJ11bMF07CiAgICAgICAgICAgIH0gZWxzZWlmIChpc3NldCgkYXR0cnNbJ2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL2VtYWlsYWRkcmVzcyddWzBdKSkgewogICAgICAgICAgICAgICAgJGVtYWlsID0gKHN0cmluZykgJGF0dHJzWydodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9lbWFpbGFkZHJlc3MnXVswXTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkc3ViID0gKHN0cmluZykgJGF1dGgtPmdldE5hbWVJZCgpOwogICAgICAgICAgICAkcHJvZmlsZSA9IGFycmF5KCdzdWInID0+ICRzdWIsICdlbWFpbCcgPT4gJGVtYWlsLCAnbmFtZScgPT4gJHN1YiwgJ3NhbWwnID0+ICRhdHRycyk7CiAgICAgICAgICAgICRyZXR1cm5UeXBlID0gaXNzZXQoJF9TRVNTSU9OWydtYXNfYWhfcmV0dXJuX3R5cGUnXSkgPyAoc3RyaW5nKSAkX1NFU1NJT05bJ21hc19haF9yZXR1cm5fdHlwZSddIDogJ21hbXMnOwogICAgICAgICAgICByZXR1cm4gc2VsZjo6ZmluYWxpemVGZWRlcmF0ZWRMb2dpbigkbW9kLCAkcHJvdmlkZXIsICRwcm9maWxlLCAkcmV0dXJuVHlwZSk7CiAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgIE1hc19BaF9BdWRpdDo6bG9nKCRtb2QsICdzYW1sLmV4Y2VwdGlvbicsICdlcnJvcicsIGFycmF5KCdtc2cnID0+ICRlLT5nZXRNZXNzYWdlKCkpLCAwLCAoaW50KSAkcHJvdmlkZXJbJ2lkJ10pOwogICAgICAgICAgICByZXR1cm4gYXJyYXkoJ2Vycm9yJyA9PiAnc2FtbF9lcnJvcicpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJ1aWxkU2FtbFNldHRpbmdzKENNU01vZHVsZSAkbW9kLCBhcnJheSAkcHJvdmlkZXIsIGFycmF5ICRjZmcsICRwa2V5KQogICAgewogICAgICAgICRiYXNlID0gTWFzX0FoX0NvbmZpZzo6Y2FsbGJhY2tCYXNlVXJsKCRtb2QpOwogICAgICAgICRzcEVudGl0eUlkID0gaXNzZXQoJGNmZ1snc3BfZW50aXR5X2lkJ10pID8gKHN0cmluZykgJGNmZ1snc3BfZW50aXR5X2lkJ10gOiAkYmFzZSAuICcvbWFzLWF1dGhodWItc3AnOwogICAgICAgICRhY3MgPSBNYXNfQWhfQ29uZmlnOjptb2R1bGVBY3Rpb25VcmwoJG1vZCwgJ3NhbWxfYWNzJywgYXJyYXkoJ3Byb3ZpZGVyX2lkJyA9PiAoaW50KSAkcHJvdmlkZXJbJ2lkJ10pKTsKICAgICAgICByZXR1cm4gYXJyYXkoCiAgICAgICAgICAgICdzdHJpY3QnID0+IHRydWUsCiAgICAgICAgICAgICdkZWJ1ZycgPT4gZmFsc2UsCiAgICAgICAgICAgICdzcCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAnZW50aXR5SWQnID0+ICRzcEVudGl0eUlkLAogICAgICAgICAgICAgICAgJ2Fzc2VydGlvbkNvbnN1bWVyU2VydmljZScgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJ3VybCcgPT4gJGFjcywKICAgICAgICAgICAgICAgICAgICAnYmluZGluZycgPT4gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpiaW5kaW5nczpIVFRQLVBPU1QnLAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgJ2lkcCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAnZW50aXR5SWQnID0+IGlzc2V0KCRjZmdbJ2lkcF9lbnRpdHlfaWQnXSkgPyAoc3RyaW5nKSAkY2ZnWydpZHBfZW50aXR5X2lkJ10gOiAnJywKICAgICAgICAgICAgICAgICdzaW5nbGVTaWduT25TZXJ2aWNlJyA9PiBhcnJheSgKICAgICAgICAgICAgICAgICAgICAndXJsJyA9PiBpc3NldCgkY2ZnWydpZHBfc3NvX3VybCddKSA/IChzdHJpbmcpICRjZmdbJ2lkcF9zc29fdXJsJ10gOiAnJywKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAneDUwOWNlcnQnID0+IGlzc2V0KCRjZmdbJ2lkcF9jZXJ0J10pID8gKHN0cmluZykgJGNmZ1snaWRwX2NlcnQnXSA6ICcnLAogICAgICAgICAgICApLAogICAgICAgICAgICAnc2VjdXJpdHknID0+IGFycmF5KAogICAgICAgICAgICAgICAgJ3dhbnRBc3NlcnRpb25zU2lnbmVkJyA9PiB0cnVlLAogICAgICAgICAgICApLAogICAgICAgICk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gaHR0cFBvc3RGb3JtKCR1cmwsIGFycmF5ICRmaWVsZHMpCiAgICB7CiAgICAgICAgaWYgKCR1cmwgPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICAkY2ggPSBjdXJsX2luaXQoJHVybCk7CiAgICAgICAgY3VybF9zZXRvcHRfYXJyYXkoJGNoLCBhcnJheSgKICAgICAgICAgICAgQ1VSTE9QVF9QT1NUID0+IHRydWUsCiAgICAgICAgICAgIENVUkxPUFRfUE9TVEZJRUxEUyA9PiBodHRwX2J1aWxkX3F1ZXJ5KCRmaWVsZHMpLAogICAgICAgICAgICBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSID0+IHRydWUsCiAgICAgICAgICAgIENVUkxPUFRfVElNRU9VVCA9PiAzMCwKICAgICAgICAgICAgQ1VSTE9QVF9IVFRQSEVBREVSID0+IGFycmF5KCdBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24nKSwKICAgICAgICApKTsKICAgICAgICAkYm9keSA9IGN1cmxfZXhlYygkY2gpOwogICAgICAgIGN1cmxfY2xvc2UoJGNoKTsKICAgICAgICBpZiAoJGJvZHkgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICAkZGVjb2RlZCA9IGpzb25fZGVjb2RlKCRib2R5LCB0cnVlKTsKICAgICAgICByZXR1cm4gaXNfYXJyYXkoJGRlY29kZWQpID8gJGRlY29kZWQgOiBudWxsOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGh0dHBHZXRKc29uKCR1cmwsICRhY2Nlc3NUb2tlbikKICAgIHsKICAgICAgICBpZiAoJHVybCA9PT0gJycpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgICRjaCA9IGN1cmxfaW5pdCgkdXJsKTsKICAgICAgICBjdXJsX3NldG9wdF9hcnJheSgkY2gsIGFycmF5KAogICAgICAgICAgICBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSID0+IHRydWUsCiAgICAgICAgICAgIENVUkxPUFRfVElNRU9VVCA9PiAzMCwKICAgICAgICAgICAgQ1VSTE9QVF9IVFRQSEVBREVSID0+IGFycmF5KAogICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb246IEJlYXJlciAnIC4gJGFjY2Vzc1Rva2VuLAogICAgICAgICAgICAgICAgJ0FjY2VwdDogYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgICAgICksCiAgICAgICAgKSk7CiAgICAgICAgJGJvZHkgPSBjdXJsX2V4ZWMoJGNoKTsKICAgICAgICBjdXJsX2Nsb3NlKCRjaCk7CiAgICAgICAgaWYgKCRib2R5ID09PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgJGRlY29kZWQgPSBqc29uX2RlY29kZSgkYm9keSwgdHJ1ZSk7CiAgICAgICAgcmV0dXJuIGlzX2FycmF5KCRkZWNvZGVkKSA/ICRkZWNvZGVkIDogbnVsbDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_session.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfU2Vzc2lvbgp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN0YXJ0SHViU2Vzc2lvbihDTVNNb2R1bGUgJG1vZCwgYXJyYXkgJGRhdGEpCiAgICB7CiAgICAgICAgaWYgKHNlc3Npb25fc3RhdHVzKCkgIT09IFBIUF9TRVNTSU9OX0FDVElWRSkgewogICAgICAgICAgICBAc2Vzc2lvbl9zdGFydCgpOwogICAgICAgIH0KICAgICAgICAkc2lkID0gYmluMmhleChyYW5kb21fYnl0ZXMoMjQpKTsKICAgICAgICAkZXhwaXJlcyA9IHRpbWUoKSArIChpbnQpICRtb2QtPkdldFByZWZlcmVuY2UoJ21hc19haF9zZXNzaW9uX3R0bCcsICczNjAwJyk7CiAgICAgICAgJGlwID0gZnVuY3Rpb25fZXhpc3RzKCdjbXNfdXRpbHM6OmdldF9yZWFsX2lwJykgPyBjbXNfdXRpbHM6OmdldF9yZWFsX2lwKCkgOiAnJzsKICAgICAgICAkdWEgPSBpc3NldCgkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pID8gKHN0cmluZykgJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddIDogJyc7CiAgICAgICAgJGRiID0gJG1vZC0+R2V0RGIoKTsKICAgICAgICAkZGItPkV4ZWN1dGUoCiAgICAgICAgICAgICdJTlNFUlQgSU5UTyAnIC4gTWFzX0FoX1RhYmxlczo6c2Vzc2lvbnMoKQogICAgICAgICAgICAuICcgKHNlc3Npb25faWQsIGNtc191c2VyX2lkLCBtYW1zX3VzZXJfaWQsIHByb3ZpZGVyX2lkLCBpcF9oYXNoLCB1YV9oYXNoLCBleHBpcmVzX2F0LCByZXZva2VkLCBjcmVhdGVkKScKICAgICAgICAgICAgLiAnIFZBTFVFUyAoPyw/LD8sPyw/LD8sPywwLD8pJywKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAkc2lkLAogICAgICAgICAgICAgICAgKGludCkgKCRkYXRhWydjbXNfdXNlcl9pZCddID8/IDApLAogICAgICAgICAgICAgICAgKGludCkgKCRkYXRhWydtYW1zX3VzZXJfaWQnXSA/PyAwKSwKICAgICAgICAgICAgICAgIChpbnQpICgkZGF0YVsncHJvdmlkZXJfaWQnXSA/PyAwKSwKICAgICAgICAgICAgICAgIE1hc19BaF9DcnlwdG86Omhhc2hJcCgkaXApLAogICAgICAgICAgICAgICAgaGFzaCgnc2hhMjU2JywgJHVhKSwKICAgICAgICAgICAgICAgICRleHBpcmVzLAogICAgICAgICAgICAgICAgdGltZSgpLAogICAgICAgICAgICApCiAgICAgICAgKTsKICAgICAgICAkX1NFU1NJT05bJ21hc19haF9zaWQnXSA9ICRzaWQ7CiAgICAgICAgcmV0dXJuICRzaWQ7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXZva2UoQ01TTW9kdWxlICRtb2QsICRzZXNzaW9uSWQpCiAgICB7CiAgICAgICAgJG1vZC0+R2V0RGIoKS0+RXhlY3V0ZSgKICAgICAgICAgICAgJ1VQREFURSAnIC4gTWFzX0FoX1RhYmxlczo6c2Vzc2lvbnMoKSAuICcgU0VUIHJldm9rZWQgPSAxIFdIRVJFIHNlc3Npb25faWQgPSA/JywKICAgICAgICAgICAgYXJyYXkoKHN0cmluZykgJHNlc3Npb25JZCkKICAgICAgICApOwogICAgICAgIGlmIChpc3NldCgkX1NFU1NJT05bJ21hc19haF9zaWQnXSkgJiYgJF9TRVNTSU9OWydtYXNfYWhfc2lkJ10gPT09ICRzZXNzaW9uSWQpIHsKICAgICAgICAgICAgdW5zZXQoJF9TRVNTSU9OWydtYXNfYWhfc2lkJ10pOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJldm9rZUFsbEZvclVzZXIoQ01TTW9kdWxlICRtb2QsICRjbXNVc2VySWQgPSAwLCAkbWFtc1VzZXJJZCA9IDApCiAgICB7CiAgICAgICAgaWYgKCRjbXNVc2VySWQgPiAwKSB7CiAgICAgICAgICAgICRtb2QtPkdldERiKCktPkV4ZWN1dGUoCiAgICAgICAgICAgICAgICAnVVBEQVRFICcgLiBNYXNfQWhfVGFibGVzOjpzZXNzaW9ucygpIC4gJyBTRVQgcmV2b2tlZCA9IDEgV0hFUkUgY21zX3VzZXJfaWQgPSA/JywKICAgICAgICAgICAgICAgIGFycmF5KChpbnQpICRjbXNVc2VySWQpCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGlmICgkbWFtc1VzZXJJZCA+IDApIHsKICAgICAgICAgICAgJG1vZC0+R2V0RGIoKS0+RXhlY3V0ZSgKICAgICAgICAgICAgICAgICdVUERBVEUgJyAuIE1hc19BaF9UYWJsZXM6OnNlc3Npb25zKCkgLiAnIFNFVCByZXZva2VkID0gMSBXSEVSRSBtYW1zX3VzZXJfaWQgPSA/JywKICAgICAgICAgICAgICAgIGFycmF5KChpbnQpICRtYW1zVXNlcklkKQogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxpc3RBY3RpdmUoQ01TTW9kdWxlICRtb2QsICRsaW1pdCA9IDEwMCkKICAgIHsKICAgICAgICAkbGltaXQgPSBtYXgoMSwgbWluKDUwMCwgKGludCkgJGxpbWl0KSk7CiAgICAgICAgJG5vdyA9IHRpbWUoKTsKICAgICAgICAkc3FsID0gJ1NFTEVDVCAqIEZST00gJyAuIE1hc19BaF9UYWJsZXM6OnNlc3Npb25zKCkKICAgICAgICAgICAgLiAnIFdIRVJFIHJldm9rZWQgPSAwIEFORCBleHBpcmVzX2F0ID4gJyAuIChpbnQpICRub3cKICAgICAgICAgICAgLiAnIE9SREVSIEJZIGNyZWF0ZWQgREVTQyBMSU1JVCAnIC4gJGxpbWl0OwogICAgICAgIHJldHVybiAkbW9kLT5HZXREYigpLT5HZXRBcnJheSgkc3FsKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNsZWFyT0F1dGhTdGF0ZSgpCiAgICB7CiAgICAgICAgaWYgKHNlc3Npb25fc3RhdHVzKCkgIT09IFBIUF9TRVNTSU9OX0FDVElWRSkgewogICAgICAgICAgICBAc2Vzc2lvbl9zdGFydCgpOwogICAgICAgIH0KICAgICAgICB1bnNldCgKICAgICAgICAgICAgJF9TRVNTSU9OWydtYXNfYWhfb2F1dGhfc3RhdGUnXSwKICAgICAgICAgICAgJF9TRVNTSU9OWydtYXNfYWhfb2F1dGhfcGtjZSddLAogICAgICAgICAgICAkX1NFU1NJT05bJ21hc19haF9vYXV0aF9wcm92aWRlciddLAogICAgICAgICAgICAkX1NFU1NJT05bJ21hc19haF9yZXR1cm5fdHlwZSddCiAgICAgICAgKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_tables.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRhYmxlIG5hbWUgaGVscGVycyBmb3IgTUFTX0F1dGhIdWIuCiAqLwppZiAoIWRlZmluZWQoJ0NNU19WRVJTSU9OJykpIHsKICAgIGV4aXQ7Cn0KCmZpbmFsIGNsYXNzIE1hc19BaF9UYWJsZXMKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwcmVmaXgoKQogICAgewogICAgICAgIHJldHVybiBDTVNfREJfUFJFRklYIC4gJ21vZF9tYXNfYWhfJzsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHByb3ZpZGVycygpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OnByZWZpeCgpIC4gJ3Byb3ZpZGVycyc7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1c2VyTGlua3MoKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjpwcmVmaXgoKSAuICd1c2VyX2xpbmtzJzsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNlc3Npb25zKCkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6cHJlZml4KCkgLiAnc2Vzc2lvbnMnOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdG9rZW5zKCkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6cHJlZml4KCkgLiAndG9rZW5zJzsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9hdXRoQ2xpZW50cygpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OnByZWZpeCgpIC4gJ29hdXRoX2NsaWVudHMnOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gb2F1dGhBdXRoQ29kZXMoKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjpwcmVmaXgoKSAuICdvYXV0aF9hdXRoX2NvZGVzJzsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHdlYmF1dGhuQ3JlZGVudGlhbHMoKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjpwcmVmaXgoKSAuICd3ZWJhdXRobl9jcmVkZW50aWFscyc7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhdWRpdExvZygpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OnByZWZpeCgpIC4gJ2F1ZGl0X2xvZyc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_token_store.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfVG9rZW5TdG9yZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN0b3JlKENNU01vZHVsZSAkbW9kLCBhcnJheSAkcm93KQogICAgewogICAgICAgICRlbmMgPSBNYXNfQWhfQ3J5cHRvOjplbmNyeXB0KCRtb2QsIChzdHJpbmcpICgkcm93Wyd0b2tlbiddID8/ICcnKSk7CiAgICAgICAgaWYgKCRlbmMgPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICAkZGIgPSAkbW9kLT5HZXREYigpOwogICAgICAgICRkYi0+RXhlY3V0ZSgKICAgICAgICAgICAgJ0lOU0VSVCBJTlRPICcgLiBNYXNfQWhfVGFibGVzOjp0b2tlbnMoKQogICAgICAgICAgICAuICcgKHRva2VuX3R5cGUsIHRva2VuX2VuYywgc2NvcGVzLCBleHBpcmVzX2F0LCBwcm92aWRlcl9pZCwgY21zX3VzZXJfaWQsIG1hbXNfdXNlcl9pZCwgY3JlYXRlZCknCiAgICAgICAgICAgIC4gJyBWQUxVRVMgKD8sPyw/LD8sPyw/LD8sPyknLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIHN1YnN0cigoc3RyaW5nKSAoJHJvd1sndG9rZW5fdHlwZSddID8/ICdhY2Nlc3MnKSwgMCwgMTYpLAogICAgICAgICAgICAgICAgJGVuYywKICAgICAgICAgICAgICAgIHN1YnN0cigoc3RyaW5nKSAoJHJvd1snc2NvcGVzJ10gPz8gJycpLCAwLCAyNTUpLAogICAgICAgICAgICAgICAgKGludCkgKCRyb3dbJ2V4cGlyZXNfYXQnXSA/PyAwKSwKICAgICAgICAgICAgICAgIChpbnQpICgkcm93Wydwcm92aWRlcl9pZCddID8/IDApLAogICAgICAgICAgICAgICAgKGludCkgKCRyb3dbJ2Ntc191c2VyX2lkJ10gPz8gMCksCiAgICAgICAgICAgICAgICAoaW50KSAoJHJvd1snbWFtc191c2VyX2lkJ10gPz8gMCksCiAgICAgICAgICAgICAgICB0aW1lKCksCiAgICAgICAgICAgICkKICAgICAgICApOwogICAgICAgIHJldHVybiAoaW50KSAkZGItPkluc2VydF9JRCgpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmV2b2tlKENNU01vZHVsZSAkbW9kLCAkdG9rZW5JZCkKICAgIHsKICAgICAgICAkbW9kLT5HZXREYigpLT5FeGVjdXRlKAogICAgICAgICAgICAnREVMRVRFIEZST00gJyAuIE1hc19BaF9UYWJsZXM6OnRva2VucygpIC4gJyBXSEVSRSBpZCA9ID8nLAogICAgICAgICAgICBhcnJheSgoaW50KSAkdG9rZW5JZCkKICAgICAgICApOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbGlzdEZvclVzZXIoQ01TTW9kdWxlICRtb2QsICRjbXNVc2VySWQgPSAwLCAkbWFtc1VzZXJJZCA9IDAsICRsaW1pdCA9IDUwKQogICAgewogICAgICAgICRsaW1pdCA9IG1heCgxLCBtaW4oMjAwLCAoaW50KSAkbGltaXQpKTsKICAgICAgICAkZGIgPSAkbW9kLT5HZXREYigpOwogICAgICAgIGlmICgkY21zVXNlcklkID4gMCkgewogICAgICAgICAgICAkc3FsID0gJ1NFTEVDVCBpZCwgdG9rZW5fdHlwZSwgc2NvcGVzLCBleHBpcmVzX2F0LCBwcm92aWRlcl9pZCwgY3JlYXRlZCBGUk9NICcKICAgICAgICAgICAgICAgIC4gTWFzX0FoX1RhYmxlczo6dG9rZW5zKCkgLiAnIFdIRVJFIGNtc191c2VyX2lkID0gPyBPUkRFUiBCWSBpZCBERVNDIExJTUlUICcgLiAkbGltaXQ7CiAgICAgICAgICAgIHJldHVybiAkZGItPkdldEFycmF5KCRzcWwsIGFycmF5KChpbnQpICRjbXNVc2VySWQpKTsKICAgICAgICB9CiAgICAgICAgaWYgKCRtYW1zVXNlcklkID4gMCkgewogICAgICAgICAgICAkc3FsID0gJ1NFTEVDVCBpZCwgdG9rZW5fdHlwZSwgc2NvcGVzLCBleHBpcmVzX2F0LCBwcm92aWRlcl9pZCwgY3JlYXRlZCBGUk9NICcKICAgICAgICAgICAgICAgIC4gTWFzX0FoX1RhYmxlczo6dG9rZW5zKCkgLiAnIFdIRVJFIG1hbXNfdXNlcl9pZCA9ID8gT1JERVIgQlkgaWQgREVTQyBMSU1JVCAnIC4gJGxpbWl0OwogICAgICAgICAgICByZXR1cm4gJGRiLT5HZXRBcnJheSgkc3FsLCBhcnJheSgoaW50KSAkbWFtc1VzZXJJZCkpOwogICAgICAgIH0KICAgICAgICAkc3FsID0gJ1NFTEVDVCBpZCwgdG9rZW5fdHlwZSwgc2NvcGVzLCBleHBpcmVzX2F0LCBwcm92aWRlcl9pZCwgY21zX3VzZXJfaWQsIG1hbXNfdXNlcl9pZCwgY3JlYXRlZCBGUk9NICcKICAgICAgICAgICAgLiBNYXNfQWhfVGFibGVzOjp0b2tlbnMoKSAuICcgT1JERVIgQlkgaWQgREVTQyBMSU1JVCAnIC4gJGxpbWl0OwogICAgICAgIHJldHVybiAkZGItPkdldEFycmF5KCRzcWwpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_user_link.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfVXNlckxpbmsKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmaW5kQnlFeHRlcm5hbChDTVNNb2R1bGUgJG1vZCwgJHByb3ZpZGVySWQsICRleHRlcm5hbFN1YikKICAgIHsKICAgICAgICAkZGIgPSAkbW9kLT5HZXREYigpOwogICAgICAgICRzcWwgPSAnU0VMRUNUICogRlJPTSAnIC4gTWFzX0FoX1RhYmxlczo6dXNlckxpbmtzKCkKICAgICAgICAgICAgLiAnIFdIRVJFIHByb3ZpZGVyX2lkID0gPyBBTkQgZXh0ZXJuYWxfc3ViID0gPyBMSU1JVCAxJzsKICAgICAgICAkcm93ID0gJGRiLT5HZXRSb3coJHNxbCwgYXJyYXkoKGludCkgJHByb3ZpZGVySWQsIChzdHJpbmcpICRleHRlcm5hbFN1YikpOwogICAgICAgIHJldHVybiBpc19hcnJheSgkcm93KSA/ICRyb3cgOiBudWxsOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmluZEJ5RW1haWwoQ01TTW9kdWxlICRtb2QsICRlbWFpbCwgJHByb3ZpZGVySWQgPSAwKQogICAgewogICAgICAgICRlbWFpbCA9IHN0cnRvbG93ZXIodHJpbSgoc3RyaW5nKSAkZW1haWwpKTsKICAgICAgICBpZiAoJGVtYWlsID09PSAnJykgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgJGRiID0gJG1vZC0+R2V0RGIoKTsKICAgICAgICBpZiAoJHByb3ZpZGVySWQgPiAwKSB7CiAgICAgICAgICAgICRzcWwgPSAnU0VMRUNUICogRlJPTSAnIC4gTWFzX0FoX1RhYmxlczo6dXNlckxpbmtzKCkgLiAnIFdIRVJFIGVtYWlsID0gPyBBTkQgcHJvdmlkZXJfaWQgPSA/IExJTUlUIDEnOwogICAgICAgICAgICAkcm93ID0gJGRiLT5HZXRSb3coJHNxbCwgYXJyYXkoJGVtYWlsLCAoaW50KSAkcHJvdmlkZXJJZCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRzcWwgPSAnU0VMRUNUICogRlJPTSAnIC4gTWFzX0FoX1RhYmxlczo6dXNlckxpbmtzKCkgLiAnIFdIRVJFIGVtYWlsID0gPyBMSU1JVCAxJzsKICAgICAgICAgICAgJHJvdyA9ICRkYi0+R2V0Um93KCRzcWwsIGFycmF5KCRlbWFpbCkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaXNfYXJyYXkoJHJvdykgPyAkcm93IDogbnVsbDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVwc2VydChDTVNNb2R1bGUgJG1vZCwgYXJyYXkgJGRhdGEpCiAgICB7CiAgICAgICAgJHByb3ZpZGVySWQgPSAoaW50KSAoJGRhdGFbJ3Byb3ZpZGVyX2lkJ10gPz8gMCk7CiAgICAgICAgJGV4dGVybmFsU3ViID0gKHN0cmluZykgKCRkYXRhWydleHRlcm5hbF9zdWInXSA/PyAnJyk7CiAgICAgICAgJGNtc1VzZXJJZCA9IGlzc2V0KCRkYXRhWydjbXNfdXNlcl9pZCddKSA/IChpbnQpICRkYXRhWydjbXNfdXNlcl9pZCddIDogbnVsbDsKICAgICAgICAkbWFtc1VzZXJJZCA9IGlzc2V0KCRkYXRhWydtYW1zX3VzZXJfaWQnXSkgPyAoaW50KSAkZGF0YVsnbWFtc191c2VyX2lkJ10gOiBudWxsOwogICAgICAgIGlmICgkY21zVXNlcklkID09PSBudWxsICYmICRtYW1zVXNlcklkID09PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgJGVtYWlsID0gc3RydG9sb3dlcih0cmltKChzdHJpbmcpICgkZGF0YVsnZW1haWwnXSA/PyAnJykpKTsKICAgICAgICAkYXR0cnMgPSBpc3NldCgkZGF0YVsnYXR0cnNfanNvbiddKSA/ICRkYXRhWydhdHRyc19qc29uJ10gOiBhcnJheSgpOwogICAgICAgIGlmICghaXNfc3RyaW5nKCRhdHRycykpIHsKICAgICAgICAgICAgJGF0dHJzID0ganNvbl9lbmNvZGUoJGF0dHJzLCBKU09OX1VORVNDQVBFRF9TTEFTSEVTIHwgSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7CiAgICAgICAgfQogICAgICAgICRleGlzdGluZyA9IHNlbGY6OmZpbmRCeUV4dGVybmFsKCRtb2QsICRwcm92aWRlcklkLCAkZXh0ZXJuYWxTdWIpOwogICAgICAgICRkYiA9ICRtb2QtPkdldERiKCk7CiAgICAgICAgJG5vdyA9IHRpbWUoKTsKICAgICAgICBpZiAoJGV4aXN0aW5nKSB7CiAgICAgICAgICAgICRzcWwgPSAnVVBEQVRFICcgLiBNYXNfQWhfVGFibGVzOjp1c2VyTGlua3MoKQogICAgICAgICAgICAgICAgLiAnIFNFVCBjbXNfdXNlcl9pZCA9IENPQUxFU0NFKD8sIGNtc191c2VyX2lkKSwgbWFtc191c2VyX2lkID0gQ09BTEVTQ0UoPywgbWFtc191c2VyX2lkKSwnCiAgICAgICAgICAgICAgICAuICcgZW1haWwgPSA/LCBhdHRyc19qc29uID0gPywgdXBkYXRlZCA9ID8gV0hFUkUgaWQgPSA/JzsKICAgICAgICAgICAgJGRiLT5FeGVjdXRlKCRzcWwsIGFycmF5KAogICAgICAgICAgICAgICAgJGNtc1VzZXJJZCwKICAgICAgICAgICAgICAgICRtYW1zVXNlcklkLAogICAgICAgICAgICAgICAgJGVtYWlsLAogICAgICAgICAgICAgICAgJGF0dHJzLAogICAgICAgICAgICAgICAgJG5vdywKICAgICAgICAgICAgICAgIChpbnQpICRleGlzdGluZ1snaWQnXSwKICAgICAgICAgICAgKSk7CiAgICAgICAgICAgIHJldHVybiAoaW50KSAkZXhpc3RpbmdbJ2lkJ107CiAgICAgICAgfQogICAgICAgICRzcWwgPSAnSU5TRVJUIElOVE8gJyAuIE1hc19BaF9UYWJsZXM6OnVzZXJMaW5rcygpCiAgICAgICAgICAgIC4gJyAocHJvdmlkZXJfaWQsIGV4dGVybmFsX3N1YiwgY21zX3VzZXJfaWQsIG1hbXNfdXNlcl9pZCwgZW1haWwsIGF0dHJzX2pzb24sIGNyZWF0ZWQsIHVwZGF0ZWQpJwogICAgICAgICAgICAuICcgVkFMVUVTICg/LD8sPyw/LD8sPyw/LD8pJzsKICAgICAgICAkZGItPkV4ZWN1dGUoJHNxbCwgYXJyYXkoCiAgICAgICAgICAgICRwcm92aWRlcklkLAogICAgICAgICAgICAkZXh0ZXJuYWxTdWIsCiAgICAgICAgICAgICRjbXNVc2VySWQsCiAgICAgICAgICAgICRtYW1zVXNlcklkLAogICAgICAgICAgICAkZW1haWwsCiAgICAgICAgICAgICRhdHRycywKICAgICAgICAgICAgJG5vdywKICAgICAgICAgICAgJG5vdywKICAgICAgICApKTsKICAgICAgICByZXR1cm4gKGludCkgJGRiLT5JbnNlcnRfSUQoKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxpc3RSZWNlbnQoQ01TTW9kdWxlICRtb2QsICRsaW1pdCA9IDUwKQogICAgewogICAgICAgICRsaW1pdCA9IG1heCgxLCBtaW4oNTAwLCAoaW50KSAkbGltaXQpKTsKICAgICAgICAkZGIgPSAkbW9kLT5HZXREYigpOwogICAgICAgICRzcWwgPSAnU0VMRUNUIHVsLiosIHAubmFtZSBBUyBwcm92aWRlcl9uYW1lIEZST00gJyAuIE1hc19BaF9UYWJsZXM6OnVzZXJMaW5rcygpIC4gJyB1bCcKICAgICAgICAgICAgLiAnIExFRlQgSk9JTiAnIC4gTWFzX0FoX1RhYmxlczo6cHJvdmlkZXJzKCkgLiAnIHAgT04gcC5pZCA9IHVsLnByb3ZpZGVyX2lkJwogICAgICAgICAgICAuICcgT1JERVIgQlkgdWwudXBkYXRlZCBERVNDIExJTUlUICcgLiAkbGltaXQ7CiAgICAgICAgcmV0dXJuICRkYi0+R2V0QXJyYXkoJHNxbCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_webauthn.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfV2ViYXV0aG4KewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBycElkKENNU01vZHVsZSAkbW9kKQogICAgewogICAgICAgICRjdXN0b20gPSB0cmltKChzdHJpbmcpICRtb2QtPkdldFByZWZlcmVuY2UoJ21hc19haF93ZWJhdXRobl9ycF9pZCcsICcnKSk7CiAgICAgICAgaWYgKCRjdXN0b20gIT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybiAkY3VzdG9tOwogICAgICAgIH0KICAgICAgICAkY29uZmlnID0gY21zX3V0aWxzOjpnZXRfY29uZmlnKCk7CiAgICAgICAgJGhvc3QgPSBwYXJzZV91cmwoKHN0cmluZykgJGNvbmZpZ1sncm9vdF91cmwnXSwgUEhQX1VSTF9IT1NUKTsKICAgICAgICByZXR1cm4gJGhvc3QgPyAoc3RyaW5nKSAkaG9zdCA6ICdsb2NhbGhvc3QnOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdChDTVNNb2R1bGUgJG1vZCwgYXJyYXkgJHBhcmFtcykKICAgIHsKICAgICAgICAkYXV0b2xvYWQgPSBkaXJuYW1lKF9fRElSX18pIC4gJy92ZW5kb3IvYXV0b2xvYWQucGhwJzsKICAgICAgICBpZiAoIWlzX3JlYWRhYmxlKCRhdXRvbG9hZCkpIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCdlcnJvcicgPT4gJ3dlYmF1dGhuX3ZlbmRvcl9taXNzaW5nJyk7CiAgICAgICAgfQogICAgICAgIHJlcXVpcmVfb25jZSAkYXV0b2xvYWQ7CiAgICAgICAgaWYgKCFjbGFzc19leGlzdHMoJ1dlYmF1dGhuXFxQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHknKSkgewogICAgICAgICAgICByZXR1cm4gYXJyYXkoJ2Vycm9yJyA9PiAnd2ViYXV0aG5fbm90X2F2YWlsYWJsZScpOwogICAgICAgIH0KICAgICAgICAkbW9kZSA9IGlzc2V0KCRwYXJhbXNbJ21vZGUnXSkgPyAoc3RyaW5nKSAkcGFyYW1zWydtb2RlJ10gOiAnbG9naW4nOwogICAgICAgICRqc29uSW4gPSBmaWxlX2dldF9jb250ZW50cygncGhwOi8vaW5wdXQnKTsKICAgICAgICAkYm9keSA9ICRqc29uSW4gPyBqc29uX2RlY29kZSgkanNvbkluLCB0cnVlKSA6IGFycmF5KCk7CiAgICAgICAgaWYgKCFpc19hcnJheSgkYm9keSkpIHsKICAgICAgICAgICAgJGJvZHkgPSBhcnJheSgpOwogICAgICAgIH0KICAgICAgICBpZiAoJG1vZGUgPT09ICdsb2dpbicgJiYgKCRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddID8/ICcnKSA9PT0gJ1BPU1QnICYmICFlbXB0eSgkYm9keVsnYWN0aW9uJ10pKSB7CiAgICAgICAgICAgIHJldHVybiBzZWxmOjphc3NlcnRMb2dpbigkbW9kLCAkYm9keSwgJHBhcmFtcyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhcnJheSgnZXJyb3InID0+ICdpbnZhbGlkX21vZGUnKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBhc3NlcnRMb2dpbihDTVNNb2R1bGUgJG1vZCwgYXJyYXkgJGJvZHksIGFycmF5ICRwYXJhbXMpCiAgICB7CiAgICAgICAgJGNyZWRJZCA9IGlzc2V0KCRib2R5WydjcmVkZW50aWFsX2lkJ10pID8gKHN0cmluZykgJGJvZHlbJ2NyZWRlbnRpYWxfaWQnXSA6ICcnOwogICAgICAgIGlmICgkY3JlZElkID09PSAnJykgewogICAgICAgICAgICByZXR1cm4gYXJyYXkoJ2Vycm9yJyA9PiAnbWlzc2luZ19jcmVkZW50aWFsJyk7CiAgICAgICAgfQogICAgICAgICRkYiA9ICRtb2QtPkdldERiKCk7CiAgICAgICAgJHJvdyA9ICRkYi0+R2V0Um93KAogICAgICAgICAgICAnU0VMRUNUICogRlJPTSAnIC4gTWFzX0FoX1RhYmxlczo6d2ViYXV0aG5DcmVkZW50aWFscygpIC4gJyBXSEVSRSBjcmVkZW50aWFsX2lkID0gPyBMSU1JVCAxJywKICAgICAgICAgICAgYXJyYXkoJGNyZWRJZCkKICAgICAgICApOwogICAgICAgIGlmICghaXNfYXJyYXkoJHJvdykpIHsKICAgICAgICAgICAgTWFzX0FoX0F1ZGl0Ojpsb2coJG1vZCwgJ3dlYmF1dGhuLnVua25vd25fY3JlZGVudGlhbCcsICd3YXJuaW5nJywgYXJyYXkoKSwgMCwgMCk7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgnZXJyb3InID0+ICd1bmtub3duX2NyZWRlbnRpYWwnKTsKICAgICAgICB9CiAgICAgICAgJHJldHVyblR5cGUgPSBpc3NldCgkcGFyYW1zWydyZXR1cm5fdHlwZSddKSA/IChzdHJpbmcpICRwYXJhbXNbJ3JldHVybl90eXBlJ10gOiAnbWFtcyc7CiAgICAgICAgaWYgKCRyZXR1cm5UeXBlID09PSAnYWRtaW4nICYmIChpbnQpICRyb3dbJ2Ntc191c2VyX2lkJ10gPiAwKSB7CiAgICAgICAgICAgICR1c2Vyb3BzID0gVXNlck9wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpOwogICAgICAgICAgICAkdXNlciA9ICR1c2Vyb3BzLT5Mb2FkVXNlckJ5SUQoKGludCkgJHJvd1snY21zX3VzZXJfaWQnXSk7CiAgICAgICAgICAgIGlmICgkdXNlciAmJiBNYXNfQWhfUG9saWN5OjpjbXNVc2VyQWxsb3dlZCgkbW9kLCAkdXNlcikpIHsKICAgICAgICAgICAgICAgIE1hc19BaF9DbXNMb2dpbkJyaWRnZTo6bG9naW5DbXNVc2VyKCR1c2VyKTsKICAgICAgICAgICAgICAgIHJldHVybiBhcnJheSgnb2snID0+IHRydWUsICdyZWRpcmVjdCcgPT4gJ2FkbWluJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKChpbnQpICRyb3dbJ21hbXNfdXNlcl9pZCddID4gMCkgewogICAgICAgICAgICBNYXNfQWhfTWFtc1Byb3Zpc2lvbmVyOjpmaW5hbGl6ZU1hbXNMb2dpbigkbW9kLCAoaW50KSAkcm93WydtYW1zX3VzZXJfaWQnXSwgYXJyYXkoJ2lkJyA9PiAwLCAnbmFtZScgPT4gJ3dlYmF1dGhuJywgJ2NvbmZpZycgPT4gYXJyYXkoKSksICRjcmVkSWQpOwogICAgICAgICAgICByZXR1cm4gYXJyYXkoJ29rJyA9PiB0cnVlLCAncmVkaXJlY3QnID0+ICdtYW1zJyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhcnJheSgnZXJyb3InID0+ICdub191c2VyJyk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWdpc3RlckNyZWRlbnRpYWwoQ01TTW9kdWxlICRtb2QsICRjcmVkZW50aWFsSWQsICRwdWJsaWNLZXksICRjbXNVc2VySWQgPSAwLCAkbWFtc1VzZXJJZCA9IDAsICRsYWJlbCA9ICcnKQogICAgewogICAgICAgIGlmICgkY21zVXNlcklkIDwgMSAmJiAkbWFtc1VzZXJJZCA8IDEpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAkbW9kLT5HZXREYigpLT5FeGVjdXRlKAogICAgICAgICAgICAnSU5TRVJUIElOVE8gJyAuIE1hc19BaF9UYWJsZXM6OndlYmF1dGhuQ3JlZGVudGlhbHMoKQogICAgICAgICAgICAuICcgKGNyZWRlbnRpYWxfaWQsIHB1YmxpY19rZXksIHNpZ25fY291bnQsIGFhZ3VpZCwgbGFiZWwsIGNtc191c2VyX2lkLCBtYW1zX3VzZXJfaWQsIGNyZWF0ZWQpIFZBTFVFUyAoPyw/LDAsXCdcJyw/LD8sPyw/KScsCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgKHN0cmluZykgJGNyZWRlbnRpYWxJZCwKICAgICAgICAgICAgICAgIChzdHJpbmcpICRwdWJsaWNLZXksCiAgICAgICAgICAgICAgICBzdWJzdHIoKHN0cmluZykgJGxhYmVsLCAwLCAxMjgpLAogICAgICAgICAgICAgICAgKGludCkgJGNtc1VzZXJJZCwKICAgICAgICAgICAgICAgIChpbnQpICRtYW1zVXNlcklkLAogICAgICAgICAgICAgICAgdGltZSgpLAogICAgICAgICAgICApCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/server/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/server/mas_ah_jwt.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfSnd0CnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZW5jb2RlKENNU01vZHVsZSAkbW9kLCBhcnJheSAkcGF5bG9hZCwgJHR0bCA9IDM2MDApCiAgICB7CiAgICAgICAgJGF1dG9sb2FkID0gZGlybmFtZShfX0RJUl9fLCAyKSAuICcvdmVuZG9yL2F1dG9sb2FkLnBocCc7CiAgICAgICAgaWYgKCFpc19yZWFkYWJsZSgkYXV0b2xvYWQpKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CiAgICAgICAgcmVxdWlyZV9vbmNlICRhdXRvbG9hZDsKICAgICAgICBpZiAoIWNsYXNzX2V4aXN0cygnRmlyZWJhc2VcXEpXVFxcSldUJykpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KICAgICAgICAka2V5ID0gTWFzX0FoX0NvbmZpZzo6c2lnbmluZ0tleSgkbW9kKTsKICAgICAgICBpZiAoJGtleSA9PT0gJycpIHsKICAgICAgICAgICAgJGtleSA9IE1hc19BaF9Db25maWc6OmVuY3J5cHRpb25LZXkoJG1vZCk7CiAgICAgICAgfQogICAgICAgIGlmICgka2V5ID09PSAnJykgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQogICAgICAgICRwYXlsb2FkWydpYXQnXSA9IHRpbWUoKTsKICAgICAgICAkcGF5bG9hZFsnZXhwJ10gPSB0aW1lKCkgKyAoaW50KSAkdHRsOwogICAgICAgICRwYXlsb2FkWydpc3MnXSA9IE1hc19BaF9Db25maWc6OmNhbGxiYWNrQmFzZVVybCgkbW9kKTsKICAgICAgICByZXR1cm4gRmlyZWJhc2VcSldUXEpXVDo6ZW5jb2RlKCRwYXlsb2FkLCAka2V5LCAnSFMyNTYnKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlY29kZShDTVNNb2R1bGUgJG1vZCwgJGp3dCkKICAgIHsKICAgICAgICAkYXV0b2xvYWQgPSBkaXJuYW1lKF9fRElSX18sIDIpIC4gJy92ZW5kb3IvYXV0b2xvYWQucGhwJzsKICAgICAgICBpZiAoIWlzX3JlYWRhYmxlKCRhdXRvbG9hZCkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIHJlcXVpcmVfb25jZSAkYXV0b2xvYWQ7CiAgICAgICAgaWYgKCFjbGFzc19leGlzdHMoJ0ZpcmViYXNlXFxKV1RcXEpXVCcpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICAka2V5ID0gTWFzX0FoX0NvbmZpZzo6c2lnbmluZ0tleSgkbW9kKTsKICAgICAgICBpZiAoJGtleSA9PT0gJycpIHsKICAgICAgICAgICAgJGtleSA9IE1hc19BaF9Db25maWc6OmVuY3J5cHRpb25LZXkoJG1vZCk7CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmIChjbGFzc19leGlzdHMoJ0ZpcmViYXNlXFxKV1RcXEtleScpKSB7CiAgICAgICAgICAgICAgICAkZGVjb2RlZCA9IEZpcmViYXNlXEpXVFxKV1Q6OmRlY29kZSgkand0LCBuZXcgRmlyZWJhc2VcSldUXEtleSgka2V5LCAnSFMyNTYnKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkZGVjb2RlZCA9IEZpcmViYXNlXEpXVFxKV1Q6OmRlY29kZSgkand0LCAka2V5LCBhcnJheSgnSFMyNTYnKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGpzb25fZGVjb2RlKGpzb25fZW5jb2RlKCRkZWNvZGVkKSwgdHJ1ZSk7CiAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/server/mas_ah_oauth_server.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfT2F1dGhTZXJ2ZXIKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRDbGllbnQoQ01TTW9kdWxlICRtb2QsICRjbGllbnRJZCkKICAgIHsKICAgICAgICAkZGIgPSAkbW9kLT5HZXREYigpOwogICAgICAgIHJldHVybiAkZGItPkdldFJvdygKICAgICAgICAgICAgJ1NFTEVDVCAqIEZST00gJyAuIE1hc19BaF9UYWJsZXM6Om9hdXRoQ2xpZW50cygpIC4gJyBXSEVSRSBjbGllbnRfaWQgPSA/IEFORCBlbmFibGVkID0gMSBMSU1JVCAxJywKICAgICAgICAgICAgYXJyYXkoKHN0cmluZykgJGNsaWVudElkKQogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB2ZXJpZnlDbGllbnRTZWNyZXQoYXJyYXkgJGNsaWVudCwgJHNlY3JldCkKICAgIHsKICAgICAgICBpZiAoZW1wdHkoJGNsaWVudFsnc2VjcmV0X2hhc2gnXSkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcGFzc3dvcmRfdmVyaWZ5KChzdHJpbmcpICRzZWNyZXQsIChzdHJpbmcpICRjbGllbnRbJ3NlY3JldF9oYXNoJ10pOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlQXV0aENvZGUoQ01TTW9kdWxlICRtb2QsIGFycmF5ICRkYXRhKQogICAgewogICAgICAgICRjb2RlID0gYmluMmhleChyYW5kb21fYnl0ZXMoMjQpKTsKICAgICAgICAkZXhwaXJlcyA9IHRpbWUoKSArIDMwMDsKICAgICAgICAkbW9kLT5HZXREYigpLT5FeGVjdXRlKAogICAgICAgICAgICAnSU5TRVJUIElOVE8gJyAuIE1hc19BaF9UYWJsZXM6Om9hdXRoQXV0aENvZGVzKCkKICAgICAgICAgICAgLiAnIChjb2RlLCBjbGllbnRfaWQsIHVzZXJfaWQsIHNjb3BlcywgcmVkaXJlY3RfdXJpLCBleHBpcmVzX2F0LCB1c2VkLCBjcmVhdGVkKScKICAgICAgICAgICAgLiAnIFZBTFVFUyAoPyw/LD8sPyw/LD8sMCw/KScsCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgJGNvZGUsCiAgICAgICAgICAgICAgICAoc3RyaW5nKSAoJGRhdGFbJ2NsaWVudF9pZCddID8/ICcnKSwKICAgICAgICAgICAgICAgIChpbnQpICgkZGF0YVsndXNlcl9pZCddID8/IDApLAogICAgICAgICAgICAgICAgKHN0cmluZykgKCRkYXRhWydzY29wZXMnXSA/PyAnb3BlbmlkJyksCiAgICAgICAgICAgICAgICAoc3RyaW5nKSAoJGRhdGFbJ3JlZGlyZWN0X3VyaSddID8/ICcnKSwKICAgICAgICAgICAgICAgICRleHBpcmVzLAogICAgICAgICAgICAgICAgdGltZSgpLAogICAgICAgICAgICApCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJGNvZGU7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBleGNoYW5nZUNvZGUoQ01TTW9kdWxlICRtb2QsICRjb2RlLCAkY2xpZW50SWQsICRyZWRpcmVjdFVyaSkKICAgIHsKICAgICAgICAkZGIgPSAkbW9kLT5HZXREYigpOwogICAgICAgICRyb3cgPSAkZGItPkdldFJvdygKICAgICAgICAgICAgJ1NFTEVDVCAqIEZST00gJyAuIE1hc19BaF9UYWJsZXM6Om9hdXRoQXV0aENvZGVzKCkKICAgICAgICAgICAgLiAnIFdIRVJFIGNvZGUgPSA/IEFORCBjbGllbnRfaWQgPSA/IExJTUlUIDEnLAogICAgICAgICAgICBhcnJheSgoc3RyaW5nKSAkY29kZSwgKHN0cmluZykgJGNsaWVudElkKQogICAgICAgICk7CiAgICAgICAgaWYgKCFpc19hcnJheSgkcm93KSB8fCAoaW50KSAkcm93Wyd1c2VkJ10gPT09IDEgfHwgKGludCkgJHJvd1snZXhwaXJlc19hdCddIDwgdGltZSgpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAoJHJlZGlyZWN0VXJpICE9PSAnJyAmJiAoc3RyaW5nKSAkcm93WydyZWRpcmVjdF91cmknXSAhPT0gJHJlZGlyZWN0VXJpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICAkZGItPkV4ZWN1dGUoCiAgICAgICAgICAgICdVUERBVEUgJyAuIE1hc19BaF9UYWJsZXM6Om9hdXRoQXV0aENvZGVzKCkgLiAnIFNFVCB1c2VkID0gMSBXSEVSRSBpZCA9ID8nLAogICAgICAgICAgICBhcnJheSgoaW50KSAkcm93WydpZCddKQogICAgICAgICk7CiAgICAgICAgJGFjY2VzcyA9IGJpbjJoZXgocmFuZG9tX2J5dGVzKDMyKSk7CiAgICAgICAgJHJlZnJlc2ggPSBiaW4yaGV4KHJhbmRvbV9ieXRlcygzMikpOwogICAgICAgICR1aWQgPSAoaW50KSAkcm93Wyd1c2VyX2lkJ107CiAgICAgICAgTWFzX0FoX1Rva2VuU3RvcmU6OnN0b3JlKCRtb2QsIGFycmF5KAogICAgICAgICAgICAndG9rZW5fdHlwZScgPT4gJ2FjY2VzcycsCiAgICAgICAgICAgICd0b2tlbicgPT4gJGFjY2VzcywKICAgICAgICAgICAgJ3Njb3BlcycgPT4gKHN0cmluZykgJHJvd1snc2NvcGVzJ10sCiAgICAgICAgICAgICdleHBpcmVzX2F0JyA9PiB0aW1lKCkgKyAzNjAwLAogICAgICAgICAgICAncHJvdmlkZXJfaWQnID0+IDAsCiAgICAgICAgICAgICdjbXNfdXNlcl9pZCcgPT4gJHVpZCwKICAgICAgICAgICAgJ21hbXNfdXNlcl9pZCcgPT4gMCwKICAgICAgICApKTsKICAgICAgICBNYXNfQWhfVG9rZW5TdG9yZTo6c3RvcmUoJG1vZCwgYXJyYXkoCiAgICAgICAgICAgICd0b2tlbl90eXBlJyA9PiAncmVmcmVzaCcsCiAgICAgICAgICAgICd0b2tlbicgPT4gJHJlZnJlc2gsCiAgICAgICAgICAgICdzY29wZXMnID0+IChzdHJpbmcpICRyb3dbJ3Njb3BlcyddLAogICAgICAgICAgICAnZXhwaXJlc19hdCcgPT4gdGltZSgpICsgKGludCkgJG1vZC0+R2V0UHJlZmVyZW5jZSgnbWFzX2FoX3JlZnJlc2hfdHRsJywgJzI1OTIwMDAnKSwKICAgICAgICAgICAgJ3Byb3ZpZGVyX2lkJyA9PiAwLAogICAgICAgICAgICAnY21zX3VzZXJfaWQnID0+ICR1aWQsCiAgICAgICAgICAgICdtYW1zX3VzZXJfaWQnID0+IDAsCiAgICAgICAgKSk7CiAgICAgICAgJGlkVG9rZW4gPSBNYXNfQWhfSnd0OjplbmNvZGUoJG1vZCwgYXJyYXkoCiAgICAgICAgICAgICdzdWInID0+IChzdHJpbmcpICR1aWQsCiAgICAgICAgICAgICdzY29wZScgPT4gKHN0cmluZykgJHJvd1snc2NvcGVzJ10sCiAgICAgICAgKSk7CiAgICAgICAgcmV0dXJuIGFycmF5KAogICAgICAgICAgICAnYWNjZXNzX3Rva2VuJyA9PiAkYWNjZXNzLAogICAgICAgICAgICAndG9rZW5fdHlwZScgPT4gJ0JlYXJlcicsCiAgICAgICAgICAgICdleHBpcmVzX2luJyA9PiAzNjAwLAogICAgICAgICAgICAncmVmcmVzaF90b2tlbicgPT4gJHJlZnJlc2gsCiAgICAgICAgICAgICdpZF90b2tlbicgPT4gJGlkVG9rZW4sCiAgICAgICAgKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/server/mas_ah_oidc_discovery.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfT2lkY0Rpc2NvdmVyeQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRvY3VtZW50KENNU01vZHVsZSAkbW9kKQogICAgewogICAgICAgICRiYXNlID0gTWFzX0FoX0NvbmZpZzo6Y2FsbGJhY2tCYXNlVXJsKCRtb2QpOwogICAgICAgICRyZXR1cm5pZCA9IChpbnQpICRtb2QtPkdldFByZWZlcmVuY2UoJ21hc19haF9mcm9udGVuZF9yZXR1cm5pZCcsICcwJyk7CiAgICAgICAgaWYgKCRyZXR1cm5pZCA8IDEpIHsKICAgICAgICAgICAgJHJldHVybmlkID0gKGludCkgY21zbXMoKS0+R2V0Q29udGVudE9wZXJhdGlvbnMoKS0+R2V0RGVmYXVsdENvbnRlbnQoKTsKICAgICAgICB9CiAgICAgICAgJGxpbmtJZCA9ICdjbnRudDAxJzsKICAgICAgICAkYXV0aG9yaXplID0gJG1vZC0+Q3JlYXRlTGluaygkbGlua0lkLCAnb2F1dGhfYXV0aG9yaXplJywgJHJldHVybmlkLCAnJywgYXJyYXkoKSwgJycsIHRydWUpOwogICAgICAgICR0b2tlbiA9ICRtb2QtPkNyZWF0ZUxpbmsoJGxpbmtJZCwgJ29hdXRoX3Rva2VuJywgJHJldHVybmlkLCAnJywgYXJyYXkoKSwgJycsIHRydWUpOwogICAgICAgICRqd2tzID0gJGJhc2UgLiAnL21vZHVsZXMvTUFTX0F1dGhIdWIvb2lkYy9qd2tzLmpzb24nOwogICAgICAgIHJldHVybiBhcnJheSgKICAgICAgICAgICAgJ2lzc3VlcicgPT4gJGJhc2UsCiAgICAgICAgICAgICdhdXRob3JpemF0aW9uX2VuZHBvaW50JyA9PiAkYXV0aG9yaXplLAogICAgICAgICAgICAndG9rZW5fZW5kcG9pbnQnID0+ICR0b2tlbiwKICAgICAgICAgICAgJ2p3a3NfdXJpJyA9PiAkandrcywKICAgICAgICAgICAgJ3Jlc3BvbnNlX3R5cGVzX3N1cHBvcnRlZCcgPT4gYXJyYXkoJ2NvZGUnKSwKICAgICAgICAgICAgJ3N1YmplY3RfdHlwZXNfc3VwcG9ydGVkJyA9PiBhcnJheSgncHVibGljJyksCiAgICAgICAgICAgICdpZF90b2tlbl9zaWduaW5nX2FsZ192YWx1ZXNfc3VwcG9ydGVkJyA9PiBhcnJheSgnSFMyNTYnKSwKICAgICAgICAgICAgJ3Njb3Blc19zdXBwb3J0ZWQnID0+IGFycmF5KCdvcGVuaWQnLCAncHJvZmlsZScsICdlbWFpbCcsICdjbXNtcy5hZG1pbicpLAogICAgICAgICAgICAndG9rZW5fZW5kcG9pbnRfYXV0aF9tZXRob2RzX3N1cHBvcnRlZCcgPT4gYXJyYXkoJ2NsaWVudF9zZWNyZXRfcG9zdCcpLAogICAgICAgICk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[TUlUIExpY2Vuc2UKCkNvcHlyaWdodCAoYykgMjAyNiBNYXN0ZXIzMzk1CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgo=]]></data>
	</file>
	<file>
	  <filename>/MAS_AuthHub.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIE1BU19BdXRoSHViOiBjZW50cmFsaXplZCBpZGVudGl0eSBhbmQgYWNjZXNzIG1hbmFnZW1lbnQgZm9yIENNUyBNYWRlIFNpbXBsZS4KICoKICogQGF1dGhvciBtYXN0ZXIzMzk1CiAqLwppZiAoIWRlZmluZWQoJ0NNU19WRVJTSU9OJykpIHsKICAgIGV4aXQ7Cn0KCnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9saWIvbWFzX2FoX2xvYWRlci5waHAnOwoKZmluYWwgY2xhc3MgTUFTX0F1dGhIdWIgZXh0ZW5kcyBDTVNNb2R1bGUKewogICAgcHVibGljIGNvbnN0IFBFUk1fTUFOQUdFID0gJ01hbmFnZSBNQVNfQXV0aEh1Yic7CiAgICBwdWJsaWMgY29uc3QgUEVSTV9VU0UgPSAnVXNlIE1BU19BdXRoSHViJzsKICAgIHB1YmxpYyBjb25zdCBQUkVGX0FETUlOX1NFQ1RJT04gPSAnbWFzX2FoX2FkbWluX3NlY3Rpb24nOwoKICAgIC8qKgogICAgICogUHJvZ3JhbW1hdGljIGF1ZGl0IEFQSSAoZG8gbm90IG5hbWUgImF1ZGl0IjogQ01TTW9kdWxlOjphdWRpdCgpIGlzIGZpbmFsKS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2dBdWRpdCgkZXZlbnQsIGFycmF5ICRjb250ZXh0ID0gYXJyYXkoKSwgJHNldmVyaXR5ID0gJ2luZm8nLCAkdXNlcklkID0gMCwgJHByb3ZpZGVySWQgPSAwKQogICAgewogICAgICAgICRtID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdNQVNfQXV0aEh1YicpOwogICAgICAgIGlmICgkbSBpbnN0YW5jZW9mIHNlbGYpIHsKICAgICAgICAgICAgTWFzX0FoX0F1ZGl0Ojpsb2coJG0sICRldmVudCwgJHNldmVyaXR5LCAkY29udGV4dCwgJHVzZXJJZCwgJHByb3ZpZGVySWQpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxpbmtVc2VyKCRwcm92aWRlcklkLCAkZXh0ZXJuYWxTdWIsICRjbXNVc2VySWQgPSBudWxsLCAkbWFtc1VzZXJJZCA9IG51bGwsICRlbWFpbCA9ICcnKQogICAgewogICAgICAgICRtID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdNQVNfQXV0aEh1YicpOwogICAgICAgIGlmICghJG0gaW5zdGFuY2VvZiBzZWxmKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIE1hc19BaF9Vc2VyTGluazo6dXBzZXJ0KCRtLCBhcnJheSgKICAgICAgICAgICAgJ3Byb3ZpZGVyX2lkJyA9PiAoaW50KSAkcHJvdmlkZXJJZCwKICAgICAgICAgICAgJ2V4dGVybmFsX3N1YicgPT4gKHN0cmluZykgJGV4dGVybmFsU3ViLAogICAgICAgICAgICAnY21zX3VzZXJfaWQnID0+ICRjbXNVc2VySWQsCiAgICAgICAgICAgICdtYW1zX3VzZXJfaWQnID0+ICRtYW1zVXNlcklkLAogICAgICAgICAgICAnZW1haWwnID0+ICRlbWFpbCwKICAgICAgICApKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0TmFtZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICdNQVNfQXV0aEh1Yic7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0VmVyc2lvbigpCiAgICB7CiAgICAgICAgcmV0dXJuICcxLjAuNSc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEdldEF1dGhvcigpCiAgICB7CiAgICAgICAgcmV0dXJuICdtYXN0ZXIzMzk1JzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0QXV0aG9yRW1haWwoKQogICAgewogICAgICAgIHJldHVybiAnaW5mb0BuZXdzdGFyZ2V0ZWQuY29tJzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0QXV0aG9yVXJsKCkKICAgIHsKICAgICAgICByZXR1cm4gJ2h0dHBzOi8vbmV3c3RhcmdldGVkLmNvbS9jb250YWN0Lyc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEdldEhlbHAoKQogICAgewogICAgICAgIHJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRElSX18pIC4gJy9NQVNfQ29tbW9uL2xpYi9tYXNfYWRtaW5fdWkucGhwJzsKICAgICAgICAkbW9kcyA9IE1vZHVsZU9wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpLT5HZXRJbnN0YWxsZWRNb2R1bGVzKCk7CiAgICAgICAgJGV4dHJhID0gYXJyYXkoCiAgICAgICAgICAgICdtYXNfYWhfaGF2ZV9tYW1zX3JlZ2lzdHJhdGlvbicgPT4gaW5fYXJyYXkoJ01BTVNSZWdpc3RyYXRpb24nLCAkbW9kcywgdHJ1ZSkgPyAnMScgOiAnMCcsCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gTWFzX0FkbWluX1VpOjpmZXRjaFRhYmJlZEhlbHAoJHRoaXMsIGFycmF5KAogICAgICAgICAgICBhcnJheSgnaWQnID0+ICdnZW5lcmFsJywgJ2xhbmcnID0+ICdoZWxwX2dlbmVyYWwnKSwKICAgICAgICAgICAgYXJyYXkoJ2lkJyA9PiAnY29uZmlndXJhdGlvbicsICdsYW5nJyA9PiAnaGVscF9jb25maWd1cmF0aW9uJyksCiAgICAgICAgICAgIGFycmF5KCdpZCcgPT4gJ3Byb3RvY29scycsICdsYW5nJyA9PiAnaGVscF9wcm90b2NvbHMnKSwKICAgICAgICAgICAgYXJyYXkoJ2lkJyA9PiAnc2VjdXJpdHknLCAnbGFuZycgPT4gJ2hlbHBfc2VjdXJpdHknKSwKICAgICAgICAgICAgYXJyYXkoJ2lkJyA9PiAndHJvdWJsZXNob290aW5nJywgJ2xhbmcnID0+ICdoZWxwX3Ryb3VibGVzaG9vdGluZycpLAogICAgICAgICksICRleHRyYSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEdldEFib3V0KCkKICAgIHsKICAgICAgICByZXF1aXJlX29uY2UgZGlybmFtZShfX0RJUl9fKSAuICcvTUFTX0NvbW1vbi9saWIvbWFzX2FkbWluX3VpLnBocCc7CiAgICAgICAgJG1vZHMgPSBNb2R1bGVPcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKS0+R2V0SW5zdGFsbGVkTW9kdWxlcygpOwogICAgICAgIHJldHVybiBNYXNfQWRtaW5fVWk6OmZldGNoVGFiYmVkQWJvdXQoJHRoaXMsIG51bGwsIGFycmF5KAogICAgICAgICAgICAnbWFzX2FoX2hhdmVfbWFtc19yZWdpc3RyYXRpb24nID0+IGluX2FycmF5KCdNQU1TUmVnaXN0cmF0aW9uJywgJG1vZHMsIHRydWUpID8gJzEnIDogJzAnLAogICAgICAgICkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKQogICAgewogICAgICAgICRiYXNlRGlyID0gcmVhbHBhdGgoJHRoaXMtPkdldE1vZHVsZVBhdGgoKSk7CiAgICAgICAgJGZpbGUgPSByZWFscGF0aCgkdGhpcy0+R2V0TW9kdWxlUGF0aCgpIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdDSEFOR0VMT0cubWQnKTsKICAgICAgICBpZiAoISRiYXNlRGlyIHx8ICEkZmlsZSB8fCAhaXNfZmlsZSgkZmlsZSkgfHwgc3RycG9zKCRmaWxlLCAkYmFzZURpcikgIT09IDApIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5MYW5nKCdjaGFuZ2Vsb2cnKTsKICAgICAgICB9CiAgICAgICAgJG1hcmtkb3duID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlKTsKICAgICAgICBpZiAoJG1hcmtkb3duID09PSBmYWxzZSB8fCAkbWFya2Rvd24gPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+TGFuZygnY2hhbmdlbG9nJyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0ibWFzX2FoX2NoYW5nZWxvZyI+JyAuIG5sMmJyKGNtc19odG1sZW50aXRpZXMoJG1hcmtkb3duKSkgLiAnPC9kaXY+JzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0QWRtaW5EZXNjcmlwdGlvbigpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5MYW5nKCdtb2RkZXNjcmlwdGlvbicpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBIYXNBZG1pbigpCiAgICB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIElzUGx1Z2luTW9kdWxlKCkKICAgIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0QWRtaW5TZWN0aW9uKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPkdldFByZWZlcmVuY2Uoc2VsZjo6UFJFRl9BRE1JTl9TRUNUSU9OLCAnZXh0ZW5zaW9ucycpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKHNlbGY6OlBFUk1fTUFOQUdFKSB8fCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKHNlbGY6OlBFUk1fVVNFKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0RGVwZW5kZW5jaWVzKCkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXkoCiAgICAgICAgICAgICdDTVNNU0V4dCcgPT4gJzEuMCcsCiAgICAgICAgICAgICdNQU1TJyA9PiAnMS4wJywKICAgICAgICApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBNaW5pbXVtQ01TVmVyc2lvbigpCiAgICB7CiAgICAgICAgcmV0dXJuICcyLjIuMTAnOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRNaW5pbXVtUEhQVmVyc2lvbigpCiAgICB7CiAgICAgICAgcmV0dXJuICc3LjQuMCc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEdldE1BTVNBdXRoQ29uc3VtZXIoKQogICAgewogICAgICAgICRpZmFjZSA9IGRpcm5hbWUoX19ESVJfXykgLiAnL01BTVMvbGliL2ludGVyZmFjZS5tYW1zX2F1dGhfY29uc3VtZXIucGhwJzsKICAgICAgICBpZiAoIWlzX3JlYWRhYmxlKCRpZmFjZSkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIHJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvbGliL2NsYXNzLm1hc19haF9tYW1zX2NvbnN1bWVyLnBocCc7CiAgICAgICAgcmV0dXJuIG5ldyBNYXNfQWhfTWFtc0NvbnN1bWVyKCR0aGlzKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gU2hvd0RvbmF0aW9uc1RhYigpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdoaWRlZG9uYXRpb25zdGFiJykgIT0gJHRoaXMtPkdldFZlcnNpb24oKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gSW5zdGFsbFBvc3RNZXNzYWdlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3RpbnN0YWxsJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIFVuaW5zdGFsbFBvc3RNZXNzYWdlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3R1bmluc3RhbGwnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gVW5pbnN0YWxsUHJlTWVzc2FnZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5MYW5nKCdyZWFsbHlfdW5pbnN0YWxsJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEluaXRpYWxpemVGcm9udGVuZCgpCiAgICB7CiAgICAgICAgJHRoaXMtPlJlc3RyaWN0VW5rbm93blBhcmFtcygpOwogICAgICAgICR0aGlzLT5SZWdpc3Rlck1vZHVsZVBsdWdpbih0cnVlLCBmYWxzZSk7CiAgICAgICAgJHR5cGVzID0gYXJyYXkoQ0xFQU5fU1RSSU5HLCBDTEVBTl9JTlQsIENMRUFOX0ZMT0FUKTsKICAgICAgICBmb3JlYWNoIChhcnJheSgKICAgICAgICAgICAgJ2FjdGlvbicsICdwcm92aWRlcl9pZCcsICdyZXR1cm5fdHlwZScsICdtb2RlJywgJ2NvZGUnLCAnc3RhdGUnLAogICAgICAgICAgICAnY2xpZW50X2lkJywgJ3Jlc3BvbnNlX3R5cGUnLCAnc2NvcGUnLCAncmVkaXJlY3RfdXJpJywKICAgICAgICApIGFzICRwKSB7CiAgICAgICAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCRwLCBDTEVBTl9TVFJJTkcpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgncHJvdmlkZXJfaWQnLCBDTEVBTl9JTlQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBJbml0aWFsaXplQWRtaW4oKQogICAgewogICAgICAgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2FjdGlvbicsICdkZWZhdWx0YWRtaW4nLCAkdGhpcy0+TGFuZygnaGVscF9hY3Rpb24nKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIFJlZ2lzdGVyRXZlbnRzKCkKICAgIHsKICAgICAgICAkdGhpcy0+Q3JlYXRlRXZlbnQoJ09uUHJvdmlkZXJMaW5rZWQnKTsKICAgICAgICAkdGhpcy0+Q3JlYXRlRXZlbnQoJ09uTWFtc0xvZ2luJyk7CiAgICAgICAgJHRoaXMtPkNyZWF0ZUV2ZW50KCdPbk1hbXNMb2dvdXQnKTsKICAgICAgICAkdGhpcy0+Q3JlYXRlRXZlbnQoJ09uTWFtc1VzZXJQcm92aXNpb25lZCcpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBEb0V2ZW50KCRvcmlnaW5hdG9yLCAkZXZlbnRuYW1lLCAmJHBhcmFtcykKICAgIHsKICAgICAgICBpZiAoJG9yaWdpbmF0b3IgPT09ICdDb3JlJykgewogICAgICAgICAgICAkdGhpcy0+aGFuZGxlQ29yZUV2ZW50KCRldmVudG5hbWUsICRwYXJhbXMpOwogICAgICAgIH0KICAgICAgICBpZiAoJG9yaWdpbmF0b3IgPT09ICdNQU1TJykgewogICAgICAgICAgICBNYXNfQWhfTWFtc0V2ZW50czo6aGFuZGxlKCR0aGlzLCAkb3JpZ2luYXRvciwgJGV2ZW50bmFtZSwgJHBhcmFtcyk7CiAgICAgICAgfQogICAgICAgIGlmICgkb3JpZ2luYXRvciA9PT0gJ01BTVNSZWdpc3RyYXRpb24nKSB7CiAgICAgICAgICAgIE1hc19BaF9NYW1zUmVnaXN0cmF0aW9uOjpoYW5kbGUoJHRoaXMsICRvcmlnaW5hdG9yLCAkZXZlbnRuYW1lLCAkcGFyYW1zKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBoYW5kbGVDb3JlRXZlbnQoJGV2ZW50bmFtZSwgJiRwYXJhbXMpCiAgICB7CiAgICAgICAgc3dpdGNoICgkZXZlbnRuYW1lKSB7CiAgICAgICAgICAgIGNhc2UgJ0xvZ2luRmFpbGVkJzoKICAgICAgICAgICAgICAgIE1hc19BaF9BdWRpdDo6bG9nKCR0aGlzLCAnY29yZS5sb2dpbl9mYWlsZWQnLCAnd2FybmluZycsICRwYXJhbXMsIDAsIDApOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ0xvZ2luUG9zdCc6CiAgICAgICAgICAgICAgICAkdWlkID0gaXNzZXQoJHBhcmFtc1sndXNlciddLT5pZCkgPyAoaW50KSAkcGFyYW1zWyd1c2VyJ10tPmlkIDogMDsKICAgICAgICAgICAgICAgIE1hc19BaF9BdWRpdDo6bG9nKCR0aGlzLCAnY29yZS5sb2dpbl9wb3N0JywgJ2luZm8nLCBhcnJheSgpLCAkdWlkLCAwKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdMb2dvdXRQb3N0JzoKICAgICAgICAgICAgICAgIE1hc19BaF9BdWRpdDo6bG9nKCR0aGlzLCAnY29yZS5sb2dvdXRfcG9zdCcsICdpbmZvJywgJHBhcmFtcywgaXNzZXQoJHBhcmFtc1sndWlkJ10pID8gKGludCkgJHBhcmFtc1sndWlkJ10gOiAwLCAwKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpyZXF1aXJlX29uY2UgZGlybmFtZShfX0ZJTEVfXykgLiAnL2xpYi9tYXNfYWhfdGFibGVzLnBocCc7CnJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvbGliL21hc19haF9tYW1zX2V2ZW50cy5waHAnOwpyZXF1aXJlX29uY2UgZGlybmFtZShfX0ZJTEVfXykgLiAnL2xpYi9tYXNfYWhfbWFtc19yZWdpc3RyYXRpb24ucGhwJzsKCiRkYiA9ICR0aGlzLT5HZXREYigpOwokZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CiR0YWJvcHQgPSBhcnJheSgnbXlzcWwnID0+ICdUWVBFPUlubm9EQicpOwoKJGZsZHMgPSAnCiAgICBpZCBJIEtFWSBOT1ROVUxMLAogICAgZHJpdmVyIEMoMzIpIE5PVE5VTEwsCiAgICBuYW1lIEMoMTI4KSBOT1ROVUxMLAogICAgZW5hYmxlZCBJMSBOT1ROVUxMIERFRkFVTFQgMSwKICAgIGNvbmZpZ19qc29uIFgyLAogICAgc29ydF9vcmRlciBJIE5PVE5VTEwgREVGQVVMVCAwLAogICAgY3JlYXRlZCBJIE5PVE5VTEwsCiAgICB1cGRhdGVkIEkgTk9UTlVMTAonOwokc3FsID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKE1hc19BaF9UYWJsZXM6OnByb3ZpZGVycygpLCAkZmxkcywgJHRhYm9wdCk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCk7CgokZmxkcyA9ICcKICAgIGlkIEkgS0VZIE5PVE5VTEwsCiAgICBwcm92aWRlcl9pZCBJIE5PVE5VTEwsCiAgICBleHRlcm5hbF9zdWIgQygyNTUpIE5PVE5VTEwsCiAgICBjbXNfdXNlcl9pZCBJLAogICAgbWFtc191c2VyX2lkIEksCiAgICBlbWFpbCBDKDI1NSksCiAgICBhdHRyc19qc29uIFgyLAogICAgY3JlYXRlZCBJIE5PVE5VTEwsCiAgICB1cGRhdGVkIEkgTk9UTlVMTAonOwokc3FsID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKE1hc19BaF9UYWJsZXM6OnVzZXJMaW5rcygpLCAkZmxkcywgJHRhYm9wdCk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCk7CiRkYi0+RXhlY3V0ZSgnQ1JFQVRFIFVOSVFVRSBJTkRFWCBpZHhfbWFzX2FoX3VsX3Byb3ZpZGVyX3N1YiBPTiAnIC4gTWFzX0FoX1RhYmxlczo6dXNlckxpbmtzKCkgLiAnIChwcm92aWRlcl9pZCwgZXh0ZXJuYWxfc3ViKScpOwoKJGZsZHMgPSAnCiAgICBpZCBJIEtFWSBOT1ROVUxMLAogICAgc2Vzc2lvbl9pZCBDKDY0KSBOT1ROVUxMLAogICAgY21zX3VzZXJfaWQgSSBOT1ROVUxMIERFRkFVTFQgMCwKICAgIG1hbXNfdXNlcl9pZCBJIE5PVE5VTEwgREVGQVVMVCAwLAogICAgcHJvdmlkZXJfaWQgSSBOT1ROVUxMIERFRkFVTFQgMCwKICAgIGlwX2hhc2ggQyg2NCksCiAgICB1YV9oYXNoIEMoNjQpLAogICAgZXhwaXJlc19hdCBJIE5PVE5VTEwsCiAgICByZXZva2VkIEkxIE5PVE5VTEwgREVGQVVMVCAwLAogICAgY3JlYXRlZCBJIE5PVE5VTEwKJzsKJHNxbCA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChNYXNfQWhfVGFibGVzOjpzZXNzaW9ucygpLCAkZmxkcywgJHRhYm9wdCk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCk7CgokZmxkcyA9ICcKICAgIGlkIEkgS0VZIE5PVE5VTEwsCiAgICB0b2tlbl90eXBlIEMoMTYpIE5PVE5VTEwsCiAgICB0b2tlbl9lbmMgWCBOT1ROVUxMLAogICAgc2NvcGVzIEMoMjU1KSwKICAgIGV4cGlyZXNfYXQgSSBOT1ROVUxMLAogICAgcHJvdmlkZXJfaWQgSSBOT1ROVUxMIERFRkFVTFQgMCwKICAgIGNtc191c2VyX2lkIEkgTk9UTlVMTCBERUZBVUxUIDAsCiAgICBtYW1zX3VzZXJfaWQgSSBOT1ROVUxMIERFRkFVTFQgMCwKICAgIGNyZWF0ZWQgSSBOT1ROVUxMCic7CiRzcWwgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoTWFzX0FoX1RhYmxlczo6dG9rZW5zKCksICRmbGRzLCAkdGFib3B0KTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsKTsKCiRmbGRzID0gJwogICAgaWQgSSBLRVkgTk9UTlVMTCwKICAgIGNsaWVudF9pZCBDKDY0KSBOT1ROVUxMLAogICAgc2VjcmV0X2hhc2ggQygyNTUpLAogICAgbmFtZSBDKDEyOCkgTk9UTlVMTCwKICAgIHJlZGlyZWN0X3VyaXMgWDIsCiAgICBncmFudHMgQygyNTUpLAogICAgc2NvcGVzIEMoMjU1KSwKICAgIGVuYWJsZWQgSTEgTk9UTlVMTCBERUZBVUxUIDEsCiAgICBjcmVhdGVkIEkgTk9UTlVMTAonOwokc3FsID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKE1hc19BaF9UYWJsZXM6Om9hdXRoQ2xpZW50cygpLCAkZmxkcywgJHRhYm9wdCk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCk7CgokZmxkcyA9ICcKICAgIGlkIEkgS0VZIE5PVE5VTEwsCiAgICBjb2RlIEMoNjQpIE5PVE5VTEwsCiAgICBjbGllbnRfaWQgQyg2NCkgTk9UTlVMTCwKICAgIHVzZXJfaWQgSSBOT1ROVUxMLAogICAgc2NvcGVzIEMoMjU1KSwKICAgIHJlZGlyZWN0X3VyaSBDKDUxMiksCiAgICBleHBpcmVzX2F0IEkgTk9UTlVMTCwKICAgIHVzZWQgSTEgTk9UTlVMTCBERUZBVUxUIDAsCiAgICBjcmVhdGVkIEkgTk9UTlVMTAonOwokc3FsID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKE1hc19BaF9UYWJsZXM6Om9hdXRoQXV0aENvZGVzKCksICRmbGRzLCAkdGFib3B0KTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsKTsKCiRmbGRzID0gJwogICAgaWQgSSBLRVkgTk9UTlVMTCwKICAgIGNyZWRlbnRpYWxfaWQgQygyNTUpIE5PVE5VTEwsCiAgICBwdWJsaWNfa2V5IFggTk9UTlVMTCwKICAgIHNpZ25fY291bnQgSSBOT1ROVUxMIERFRkFVTFQgMCwKICAgIGFhZ3VpZCBDKDY0KSwKICAgIGxhYmVsIEMoMTI4KSwKICAgIGNtc191c2VyX2lkIEkgTk9UTlVMTCBERUZBVUxUIDAsCiAgICBtYW1zX3VzZXJfaWQgSSBOT1ROVUxMIERFRkFVTFQgMCwKICAgIGNyZWF0ZWQgSSBOT1ROVUxMCic7CiRzcWwgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoTWFzX0FoX1RhYmxlczo6d2ViYXV0aG5DcmVkZW50aWFscygpLCAkZmxkcywgJHRhYm9wdCk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCk7CgokZmxkcyA9ICcKICAgIGlkIEkgS0VZIE5PVE5VTEwsCiAgICBjcmVhdGVkIEkgTk9UTlVMTCwKICAgIGV2ZW50IEMoMTI4KSBOT1ROVUxMLAogICAgc2V2ZXJpdHkgQygxNikgTk9UTlVMTCwKICAgIHVzZXJfaWQgSSBOT1ROVUxMIERFRkFVTFQgMCwKICAgIHByb3ZpZGVyX2lkIEkgTk9UTlVMTCBERUZBVUxUIDAsCiAgICBpcF9oYXNoIEMoNjQpLAogICAgY29udGV4dF9qc29uIFgyCic7CiRzcWwgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoTWFzX0FoX1RhYmxlczo6YXVkaXRMb2coKSwgJGZsZHMsICR0YWJvcHQpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWwpOwoKJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oJ01hbmFnZSBNQVNfQXV0aEh1YicsICdDb25maWd1cmUgTUFTIEF1dGhIdWIgaWRlbnRpdHkgcHJvdmlkZXJzLCBPQXV0aCBzZXJ2ZXIsIGFuZCBwb2xpY2llcycpOwokdGhpcy0+Q3JlYXRlUGVybWlzc2lvbignVXNlIE1BU19BdXRoSHViJywgJ1VzZSBNQVMgQXV0aEh1YiBTU08gbG9naW4nKTsKCiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtYXNfYWhfYWRtaW5fc2VjdGlvbicsICdleHRlbnNpb25zJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtYXNfYWhfZW5hYmxlX2FkbWluX3NzbycsICcxJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtYXNfYWhfZW5hYmxlX21hbXNfc3NvJywgJzEnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ21hc19haF9hdXRvX2xpbmtfZW1haWwnLCAnMScpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnbWFzX2FoX3Nlc3Npb25fdHRsJywgJzM2MDAnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ21hc19haF9yYXRlX3Blcl9ob3VyJywgJzYwJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtYXNfYWhfbWFtc19qaXRfY3JlYXRlJywgJzEnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ21hc19haF9hbGxvd19sb2NhbF9zaWdudXBfd2hlbl9zc28nLCAnMScpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnbWFzX2FoX2Jsb2NrX2R1cGxpY2F0ZV9lbWFpbF9zaWdudXAnLCAnMCcpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnaGlkZWRvbmF0aW9uc3RhYicsICcnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ21hc19haF9kZWZhdWx0X2Nvbm5lY3RpbmdfcHJvcGVydHknLCAnYXV0aGh1Yl9zdWInKTsKCiR0aGlzLT5SZWdpc3RlckV2ZW50cygpOwpNYXNfQWhfTWFtc0V2ZW50czo6cmVnaXN0ZXIoJHRoaXMpOwpNYXNfQWhfTWFtc1JlZ2lzdHJhdGlvbjo6cmVnaXN0ZXIoJHRoaXMpOwoKJHRoaXMtPkFkZEV2ZW50SGFuZGxlcignQ29yZScsICdMb2dpbkZhaWxlZCcsIGZhbHNlKTsKJHRoaXMtPkFkZEV2ZW50SGFuZGxlcignQ29yZScsICdMb2dpblBvc3QnLCBmYWxzZSk7CiR0aGlzLT5BZGRFdmVudEhhbmRsZXIoJ0NvcmUnLCAnTG9nb3V0UG9zdCcsIGZhbHNlKTsKCnJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRElSX18pIC4gJy9NQVNfQ29tbW9uL2xpYi9tYXNfYWRtaW5fdWkucGhwJzsKTWFzX0FkbWluX1VpOjplbnN1cmVJY29uR2lmKCR0aGlzKTsKTWFzX0FkbWluX1VpOjplbnN1cmVCYW5uZXIoJHRoaXMpOwoKJHRoaXMtPkF1ZGl0KDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgJHRoaXMtPkxhbmcoJ2luc3RhbGxlZCcsICR0aGlzLT5HZXRWZXJzaW9uKCkpKTsK]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpyZXF1aXJlX29uY2UgZGlybmFtZShfX0ZJTEVfXykgLiAnL2xpYi9tYXNfYWhfdGFibGVzLnBocCc7CgokZGIgPSAkdGhpcy0+R2V0RGIoKTsKJHRhYmxlcyA9IGFycmF5KAogICAgTWFzX0FoX1RhYmxlczo6YXVkaXRMb2coKSwKICAgIE1hc19BaF9UYWJsZXM6OndlYmF1dGhuQ3JlZGVudGlhbHMoKSwKICAgIE1hc19BaF9UYWJsZXM6Om9hdXRoQXV0aENvZGVzKCksCiAgICBNYXNfQWhfVGFibGVzOjpvYXV0aENsaWVudHMoKSwKICAgIE1hc19BaF9UYWJsZXM6OnRva2VucygpLAogICAgTWFzX0FoX1RhYmxlczo6c2Vzc2lvbnMoKSwKICAgIE1hc19BaF9UYWJsZXM6OnVzZXJMaW5rcygpLAogICAgTWFzX0FoX1RhYmxlczo6cHJvdmlkZXJzKCksCik7CmZvcmVhY2ggKCR0YWJsZXMgYXMgJHQpIHsKICAgICRkYi0+RXhlY3V0ZSgnRFJPUCBUQUJMRSBJRiBFWElTVFMgJyAuICR0KTsKfQoKJHRoaXMtPlJlbW92ZVBlcm1pc3Npb24oJ01hbmFnZSBNQVNfQXV0aEh1YicpOwokdGhpcy0+UmVtb3ZlUGVybWlzc2lvbignVXNlIE1BU19BdXRoSHViJyk7CgokdGhpcy0+QXVkaXQoMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAkdGhpcy0+TGFuZygndW5pbnN0YWxsZWQnKSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9Cgokb2xkID0gaXNzZXQoJG9sZHZlcnNpb24pID8gJG9sZHZlcnNpb24gOiAnMCc7CmlmICh2ZXJzaW9uX2NvbXBhcmUoJG9sZCwgJzEuMC4wJywgJzwnKSkgewogICAgTWFzX0FoX01hbXNFdmVudHM6OnJlZ2lzdGVyKCR0aGlzKTsKICAgIE1hc19BaF9NYW1zUmVnaXN0cmF0aW9uOjpyZWdpc3RlcigkdGhpcyk7Cn0KcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19ESVJfXykgLiAnL01BU19Db21tb24vbGliL21hc19hZG1pbl91aS5waHAnOwpNYXNfQWRtaW5fVWk6OmVuc3VyZUljb25HaWYoJHRoaXMpOwpNYXNfQWRtaW5fVWk6OmVuc3VyZUJhbm5lcigkdGhpcyk7CiR0aGlzLT5BdWRpdCgwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCd1cGdyYWRlZCcsICR0aGlzLT5HZXRWZXJzaW9uKCkpKTsK]]></data>
	</file>
	<file>
	  <filename>/moduleinfo.ini</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[W21vZHVsZV0KbmFtZSA9ICJNQVNfQXV0aEh1YiIKdmVyc2lvbiA9ICIxLjAuNSIKYXV0aG9yID0gIm1hc3RlcjMzOTUiCmF1dGhvcmVtYWlsID0gImluZm9AbmV3c3RhcmdldGVkLmNvbSIKbWluY21zdmVyc2lvbiA9ICIyLjIuMTAiCmxhenlsb2FkYWRtaW4gPSAwCmxhenlsb2FkZnJvbnRlbmQgPSAwCltkZXBlbmRzXQpDTVNNU0V4dCA9IDEuMApNQU1TID0gMS4wCg==]]></data>
	</file>
	<file>
	  <filename>/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBNQVNfQXV0aEh1YgoKQ2VudHJhbGl6ZWQgaWRlbnRpdHkgYW5kIGFjY2VzcyBtYW5hZ2VtZW50IGZvciBbQ01TIE1hZGUgU2ltcGxlXShodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLmNvbSk6IE9BdXRoMiwgT0lEQywgU0FNTCwgV2ViQXV0aG4sIENNU01TIGFkbWluIFNTTywgYW5kIE1BTVMgaW50ZWdyYXRpb24uCgojIyBSZXF1aXJlbWVudHMKCi0gQ01TIE1hZGUgU2ltcGxlIDIuMi4xMCsKLSBQSFAgNy40KwotIENNU01TRXh0IDEuMCsKLSBNQU1TIDEuMCsKCiMjIENvbmZpZ3VyYXRpb24KClN0b3JlIHNlY3JldHMgaW4gdGhlIHNpdGUgcm9vdCBgY29uZmlnLnBocGAgdW5kZXIgdGhlIGBtYXNfYXV0aGh1YmAgYXJyYXkuIFNlZSBgdG8tZG8vY29uZmlnLm1hc19hdXRoaHViLmV4YW1wbGUucGhwYCBmb3Igc2hhcGUgKGRvIG5vdCBjb21taXQgcmVhbCBzZWNyZXRzKS4KCiMjIEluc3RhbGwKCkNvcHkgaW50byBgbW9kdWxlcy9NQVNfQXV0aEh1Yi9gLCBydW4gQ29tcG9zZXIgaWYgbmVlZGVkIChgY29tcG9zZXIgaW5zdGFsbGAgaW4gdGhlIG1vZHVsZSBkaXJlY3RvcnkpLCB0aGVuIGluc3RhbGwgdmlhIEV4dGVuc2lvbnMgaW4gdGhlIENNU01TIGFkbWluLgoKIyMgQXV0aG9yCgptYXN0ZXIzMzk1IHwgaHR0cHM6Ly9uZXdzdGFyZ2V0ZWQuY29tL2NvbnRhY3QvCg==]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/about.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHN0eWxlPgoubWFzLWFoLWFib3V0LXRhYnMgeyBtYXJnaW46IDIwcHggMCAwOyBib3JkZXItYm90dG9tOiAycHggc29saWQgI2RkZDsgfQoubWFzLWFoLWFib3V0LXRhYnMgYSB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZzogMTBweCAyMHB4OyBtYXJnaW4tcmlnaHQ6IDVweDsgYmFja2dyb3VuZDogI2Y1ZjVmNTsgYm9yZGVyOiAxcHggc29saWQgI2RkZDsgYm9yZGVyLWJvdHRvbTogbm9uZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBjb2xvcjogIzMzMzsgfQoubWFzLWFoLWFib3V0LXRhYnMgYS5hY3RpdmUgeyBiYWNrZ3JvdW5kOiAjZmZmOyBib3JkZXItYm90dG9tOiAycHggc29saWQgI2ZmZjsgbWFyZ2luLWJvdHRvbTogLTJweDsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KLm1hcy1haC1hYm91dC10YWJzIGE6aG92ZXIgeyBiYWNrZ3JvdW5kOiAjZTllOWU5OyB9Ci5tYXMtYWgtYWJvdXQtY29udGVudCB7IHBhZGRpbmc6IDIwcHg7IGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7IGJvcmRlci10b3A6IG5vbmU7IGJhY2tncm91bmQ6ICNmZmY7IH0KLm1hcy1haC1hYm91dC1zZWN0aW9uIHsgZGlzcGxheTogbm9uZTsgfQoubWFzLWFoLWFib3V0LXNlY3Rpb24uYWN0aXZlIHsgZGlzcGxheTogYmxvY2s7IH0KPC9zdHlsZT4KCjxkaXYgY2xhc3M9Im1hcy1haC1hYm91dC10YWJzIj4KICA8YSBocmVmPSIjbWFzLWFoLWFib3V0LW1vZHVsZSIgY2xhc3M9Im1hcy1haC1hYm91dC10YWIgYWN0aXZlIiBkYXRhLXRhYj0ibWFzLWFoLWFib3V0LW1vZHVsZSI+eyRtb2QtPkxhbmcoJ2Fib3V0X3RhYl9tb2R1bGUnKXxlc2NhcGU6J2h0bWwnfTwvYT4KICA8YSBocmVmPSIjbWFzLWFoLWFib3V0LWNvbXBhdCIgY2xhc3M9Im1hcy1haC1hYm91dC10YWIiIGRhdGEtdGFiPSJtYXMtYWgtYWJvdXQtY29tcGF0Ij57JG1vZC0+TGFuZygnYWJvdXRfdGFiX2NvbXBhdCcpfGVzY2FwZTonaHRtbCd9PC9hPgogIDxhIGhyZWY9IiNtYXMtYWgtYWJvdXQtc3VtbWFyeSIgY2xhc3M9Im1hcy1haC1hYm91dC10YWIiIGRhdGEtdGFiPSJtYXMtYWgtYWJvdXQtc3VtbWFyeSI+eyRtb2QtPkxhbmcoJ2Fib3V0X3RhYl9zdW1tYXJ5Jyl8ZXNjYXBlOidodG1sJ308L2E+CiAgPGEgaHJlZj0iI21hcy1haC1hYm91dC1jaGFuZ2Vsb2ciIGNsYXNzPSJtYXMtYWgtYWJvdXQtdGFiIiBkYXRhLXRhYj0ibWFzLWFoLWFib3V0LWNoYW5nZWxvZyI+eyRtb2QtPkxhbmcoJ2Fib3V0X3RhYl9jaGFuZ2Vsb2cnKXxlc2NhcGU6J2h0bWwnfTwvYT4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJtYXMtYWgtYWJvdXQtY29udGVudCI+CiAgPG1vdGlvbiBpZD0ibWFzLWFoLWFib3V0LW1vZHVsZSIgY2xhc3M9Im1hcy1haC1hYm91dC1zZWN0aW9uIGFjdGl2ZSI+CiAgICB7aW5jbHVkZSBmaWxlPSdtb2R1bGVfZmlsZV90cGw6TUFTX0F1dGhIdWI7YWJvdXRfbW9kdWxlX3RhYi50cGwnfQogIDwvbW90aW9uPgoKICA8bW90aW9uIGlkPSJtYXMtYWgtYWJvdXQtY29tcGF0IiBjbGFzcz0ibWFzLWFoLWFib3V0LXNlY3Rpb24iPgogICAge2luY2x1ZGUgZmlsZT0nbW9kdWxlX2ZpbGVfdHBsOk1BU19BdXRoSHViO2Fib3V0X2NvbXBhdF90YWIudHBsJ30KICA8L21vdGlvbj4KCiAgPG1vdGlvbiBpZD0ibWFzLWFoLWFib3V0LXN1bW1hcnkiIGNsYXNzPSJtYXMtYWgtYWJvdXQtc2VjdGlvbiI+CiAgICB7aW5jbHVkZSBmaWxlPSdtb2R1bGVfZmlsZV90cGw6TUFTX0F1dGhIdWI7YWJvdXRfc3VtbWFyeV90YWIudHBsJ30KICA8L21vdGlvbj4KCiAgPG1vdGlvbiBpZD0ibWFzLWFoLWFib3V0LWNoYW5nZWxvZyIgY2xhc3M9Im1hcy1haC1hYm91dC1zZWN0aW9uIj4KICAgIHtpbmNsdWRlIGZpbGU9J21vZHVsZV9maWxlX3RwbDpNQVNfQXV0aEh1YjthYm91dF9jaGFuZ2Vsb2dfdGFiLnRwbCd9CiAgPC9tb3Rpb24+CjwvbW90aW9uPgoKPHNjcmlwdD4KKGZ1bmN0aW9uKCkgewogIHZhciB3cmFwID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1hcy1haC1hYm91dC10YWJzJyk7CiAgaWYgKCF3cmFwKSB7IHJldHVybjsgfQogIHZhciB0YWJzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm1hcy1haC1hYm91dC10YWInKTsKICB2YXIgc2VjdGlvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubWFzLWFoLWFib3V0LXNlY3Rpb24nKTsKICB0YWJzLmZvckVhY2goZnVuY3Rpb24odGFiKSB7CiAgICB0YWIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgdmFyIHRhcmdldCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdkYXRhLXRhYicpOwogICAgICB0YWJzLmZvckVhY2goZnVuY3Rpb24odCkgeyB0LmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOyB9KTsKICAgICAgc2VjdGlvbnMuZm9yRWFjaChmdW5jdGlvbihzKSB7IHMuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7IH0pOwogICAgICB0aGlzLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogICAgICB2YXIgcGFuZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YXJnZXQpOwogICAgICBpZiAocGFuZWwpIHsgcGFuZWwuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7IH0KICAgIH0pOwogIH0pOwp9KSgpOwo8L3NjcmlwdD4K]]></data>
	</file>
	<file>
	  <filename>/templates/about_changelog_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdhYm91dF90YWJfY2hhbmdlbG9nJyl8ZXNjYXBlOidodG1sJ308L2gzPgoKe2lmICRtYXNfYWhfY2hhbmdlbG9nX2h0bWx8ZGVmYXVsdDonJyAhPSAnJ30KICB7JG1hc19haF9jaGFuZ2Vsb2dfaHRtbCBub2ZpbHRlcn0Ke2Vsc2V9CiAgPHA+eyRtb2QtPkxhbmcoJ2NoYW5nZWxvZycpfGVzY2FwZTonaHRtbCd9PC9wPgp7L2lmfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/about_compat_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdhYm91dF90YWJfY29tcGF0Jyl8ZXNjYXBlOidodG1sJ308L2gzPgoKPHA+PHN0cm9uZz57JG1vZC0+TGFuZygnYWJvdXRfbWluX2NtcycpfGVzY2FwZTonaHRtbCd9PC9zdHJvbmc+IHskbW9kLT5NaW5pbXVtQ01TVmVyc2lvbigpfGVzY2FwZTonaHRtbCd9PC9wPgo8cD48c3Ryb25nPnskbW9kLT5MYW5nKCdhYm91dF9taW5fcGhwJyl8ZXNjYXBlOidodG1sJ308L3N0cm9uZz4geyRtb2QtPkdldE1pbmltdW1QSFBWZXJzaW9uKCl8ZXNjYXBlOidodG1sJ308L3A+Cgo8aDQ+eyRtb2QtPkxhbmcoJ2Fib3V0X2RlcGVuZGVuY2llc19oZWFkaW5nJyl8ZXNjYXBlOidodG1sJ308L2g0Pgo8dWw+CiAgPGxpPjxzdHJvbmc+Q01TTVNFeHQ8L3N0cm9uZz4gJmd0Oz0gMS4wPC9saT4KICA8bGk+PHN0cm9uZz5NQU1TPC9zdHJvbmc+ICZndDs9IDEuMDwvbGk+CjwvdWw+CntpZiAkbWFzX2FoX2hhdmVfbWFtc19yZWdpc3RyYXRpb258ZGVmYXVsdDonMCcgPT0gJzEnfQo8cCBjbGFzcz0iaW5mb3JtYXRpb24iPnskbW9kLT5MYW5nKCdhYm91dF9tYW1zX3JlZ2lzdHJhdGlvbl9ub3RlJyl8ZXNjYXBlOidodG1sJ308L3A+CnsvaWZ9Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/about_module_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdhYm91dF90YWJfbW9kdWxlJyl8ZXNjYXBlOidodG1sJ308L2gzPgoKPHA+PHN0cm9uZz57JG1vZC0+TGFuZygnYWJvdXRfbGFiZWxfbmFtZScpfGVzY2FwZTonaHRtbCd9PC9zdHJvbmc+IHskbW9kLT5HZXRGcmllbmRseU5hbWUoKXxlc2NhcGU6J2h0bWwnfTwvcD4KPHA+PHN0cm9uZz57JG1vZC0+TGFuZygnYWJvdXRfbGFiZWxfdmVyc2lvbicpfGVzY2FwZTonaHRtbCd9PC9zdHJvbmc+IHskbW9kLT5HZXRWZXJzaW9uKCl8ZXNjYXBlOidodG1sJ308L3A+CjxwPjxzdHJvbmc+eyRtb2QtPkxhbmcoJ2Fib3V0X2xhYmVsX2F1dGhvcicpfGVzY2FwZTonaHRtbCd9PC9zdHJvbmc+IHskbW9kLT5HZXRBdXRob3IoKXxlc2NhcGU6J2h0bWwnfTwvcD4KPHA+PHN0cm9uZz57JG1vZC0+TGFuZygnYWJvdXRfbGFiZWxfZW1haWwnKXxlc2NhcGU6J2h0bWwnfTwvc3Ryb25nPiA8YSBocmVmPSJtYWlsdG86eyRtb2QtPkdldEF1dGhvckVtYWlsKCl8ZXNjYXBlOid1cmwnfSI+eyRtb2QtPkdldEF1dGhvckVtYWlsKCl8ZXNjYXBlOidodG1sJ308L2E+PC9wPgo8cD48c3Ryb25nPnskbW9kLT5MYW5nKCdhYm91dF9sYWJlbF91cmwnKXxlc2NhcGU6J2h0bWwnfTwvc3Ryb25nPiA8YSBocmVmPSJ7JG1vZC0+R2V0QXV0aG9yVXJsKCl8ZXNjYXBlOid1cmwnfSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI+eyRtb2QtPkdldEF1dGhvclVybCgpfGVzY2FwZTonaHRtbCd9PC9hPjwvcD4KPHA+PHN0cm9uZz57JG1vZC0+TGFuZygnYWJvdXRfbGFiZWxfbGljZW5zZScpfGVzY2FwZTonaHRtbCd9PC9zdHJvbmc+IHskbW9kLT5MYW5nKCdhYm91dF9saWNlbnNlX3ZhbHVlJyl8ZXNjYXBlOidodG1sJ308L3A+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/about_summary_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdhYm91dF90YWJfc3VtbWFyeScpfGVzY2FwZTonaHRtbCd9PC9oMz4KCjxwPnskbW9kLT5MYW5nKCdtb2RkZXNjcmlwdGlvbicpfGVzY2FwZTonaHRtbCd9PC9wPgoKPGg0PnskbW9kLT5MYW5nKCdhYm91dF9mZWF0dXJlc19oZWFkaW5nJyl8ZXNjYXBlOidodG1sJ308L2g0Pgo8dWw+CiAgPGxpPnskbW9kLT5MYW5nKCdhYm91dF9mZWF0dXJlX29hdXRoJyl8ZXNjYXBlOidodG1sJ308L2xpPgogIDxsaT57JG1vZC0+TGFuZygnYWJvdXRfZmVhdHVyZV9zYW1sJyl8ZXNjYXBlOidodG1sJ308L2xpPgogIDxsaT57JG1vZC0+TGFuZygnYWJvdXRfZmVhdHVyZV93ZWJhdXRobicpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+eyRtb2QtPkxhbmcoJ2Fib3V0X2ZlYXR1cmVfbWFtcycpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+eyRtb2QtPkxhbmcoJ2Fib3V0X2ZlYXR1cmVfYXVkaXQnKXxlc2NhcGU6J2h0bWwnfTwvbGk+CjwvdWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/admin_settings.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCd0YWJfYWRtaW5zZXR0aW5ncycpfGVzY2FwZTonaHRtbCd9PC9oMz4KeyRmb3Jtc3RhcnR9CjxwPnskbW9kLT5MYW5nKCdhZG1pbnNlY3Rpb24nKXxlc2NhcGU6J2h0bWwnfTogeyRhZG1pbnNlY3Rpb25fZHJvcGRvd259PC9wPgo8cD57JHNob3dkb25hdGlvbnN0YWJfY2hlY2tib3h9IHskbW9kLT5MYW5nKCdzaG93ZG9uYXRpb25zdGFiJyl8ZXNjYXBlOidodG1sJ308L3A+CjxwPnskc3VibWl0fTwvcD4KeyRmb3JtZW5kfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/audit.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCd0YWJfYXVkaXQnKXxlc2NhcGU6J2h0bWwnfTwvaDM+CjxwPjxhIGhyZWY9InskZXhwb3J0X3VybHxlc2NhcGU6J2h0bWwnfSI+eyRtb2QtPkxhbmcoJ2F1ZGl0X2V4cG9ydCcpfGVzY2FwZTonaHRtbCd9PC9hPjwvcD4KPHRhYmxlIGNsYXNzPSJwYWdldGFibGUiIHN0eWxlPSJ3aWR0aDoxMDAlOyI+PHRoZWFkPjx0cj48dGg+SUQ8L3RoPjx0aD5UaW1lPC90aD48dGg+RXZlbnQ8L3RoPjx0aD5TZXZlcml0eTwvdGg+PHRoPlVzZXI8L3RoPjwvdHI+PC90aGVhZD4KPHRib2R5Pntmb3JlYWNoIGZyb209JHJvd3MgaXRlbT1yfQo8dHI+PHRkPnskci5pZH08L3RkPjx0ZD57JHIuY3JlYXRlZH08L3RkPjx0ZD57JHIuZXZlbnR8ZXNjYXBlOidodG1sJ308L3RkPjx0ZD57JHIuc2V2ZXJpdHl8ZXNjYXBlOidodG1sJ308L3RkPjx0ZD57JHIudXNlcl9pZH08L3RkPjwvdHI+CnsvZm9yZWFjaH08L3Rib2R5PjwvdGFibGU+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/help.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHN0eWxlPgoubWFzLWFoLWhlbHAtdGFicyB7IG1hcmdpbjogMjBweCAwIDA7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZGRkOyB9Ci5tYXMtYWgtaGVscC10YWJzIGEgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmc6IDEwcHggMjBweDsgbWFyZ2luLXJpZ2h0OiA1cHg7IGJhY2tncm91bmQ6ICNmNWY1ZjU7IGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7IGJvcmRlci1ib3R0b206IG5vbmU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgY29sb3I6ICMzMzM7IH0KLm1hcy1haC1oZWxwLXRhYnMgYS5hY3RpdmUgeyBiYWNrZ3JvdW5kOiAjZmZmOyBib3JkZXItYm90dG9tOiAycHggc29saWQgI2ZmZjsgbWFyZ2luLWJvdHRvbTogLTJweDsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KLm1hcy1haC1oZWxwLXRhYnMgYTpob3ZlciB7IGJhY2tncm91bmQ6ICNlOWU5ZTk7IH0KLm1hcy1haC1oZWxwLWNvbnRlbnQgeyBwYWRkaW5nOiAyMHB4OyBib3JkZXI6IDFweCBzb2xpZCAjZGRkOyBib3JkZXItdG9wOiBub25lOyBiYWNrZ3JvdW5kOiAjZmZmOyB9Ci5tYXMtYWgtaGVscC1zZWN0aW9uIHsgZGlzcGxheTogbm9uZTsgfQoubWFzLWFoLWhlbHAtc2VjdGlvbi5hY3RpdmUgeyBkaXNwbGF5OiBibG9jazsgfQo8L3N0eWxlPgoKPGRpdiBjbGFzcz0ibWFzLWFoLWhlbHAtdGFicyI+CiAgPGEgaHJlZj0iI21hcy1haC1oZWxwLWdlbmVyYWwiIGNsYXNzPSJtYXMtYWgtaGVscC10YWIgYWN0aXZlIiBkYXRhLXRhYj0ibWFzLWFoLWhlbHAtZ2VuZXJhbCI+eyRtb2QtPkxhbmcoJ2hlbHBfZ2VuZXJhbCcpfGVzY2FwZTonaHRtbCd9PC9hPgogIDxhIGhyZWY9IiNtYXMtYWgtaGVscC1jb25maWd1cmF0aW9uIiBjbGFzcz0ibWFzLWFoLWhlbHAtdGFiIiBkYXRhLXRhYj0ibWFzLWFoLWhlbHAtY29uZmlndXJhdGlvbiI+eyRtb2QtPkxhbmcoJ2hlbHBfY29uZmlndXJhdGlvbicpfGVzY2FwZTonaHRtbCd9PC9hPgogIDxhIGhyZWY9IiNtYXMtYWgtaGVscC1wcm90b2NvbHMiIGNsYXNzPSJtYXMtYWgtaGVscC10YWIiIGRhdGEtdGFiPSJtYXMtYWgtaGVscC1wcm90b2NvbHMiPnskbW9kLT5MYW5nKCdoZWxwX3Byb3RvY29scycpfGVzY2FwZTonaHRtbCd9PC9hPgogIDxhIGhyZWY9IiNtYXMtYWgtaGVscC1zZWN1cml0eSIgY2xhc3M9Im1hcy1haC1oZWxwLXRhYiIgZGF0YS10YWI9Im1hcy1haC1oZWxwLXNlY3VyaXR5Ij57JG1vZC0+TGFuZygnaGVscF9zZWN1cml0eScpfGVzY2FwZTonaHRtbCd9PC9hPgogIDxhIGhyZWY9IiNtYXMtYWgtaGVscC10cm91Ymxlc2hvb3RpbmciIGNsYXNzPSJtYXMtYWgtaGVscC10YWIiIGRhdGEtdGFiPSJtYXMtYWgtaGVscC10cm91Ymxlc2hvb3RpbmciPnskbW9kLT5MYW5nKCdoZWxwX3Ryb3VibGVzaG9vdGluZycpfGVzY2FwZTonaHRtbCd9PC9hPgo8L2Rpdj4KCjxkaXYgY2xhc3M9Im1hcy1haC1oZWxwLWNvbnRlbnQiPgogIDxkaXYgaWQ9Im1hcy1haC1oZWxwLWdlbmVyYWwiIGNsYXNzPSJtYXMtYWgtaGVscC1zZWN0aW9uIGFjdGl2ZSI+CiAgICB7aW5jbHVkZSBmaWxlPSdtb2R1bGVfZmlsZV90cGw6TUFTX0F1dGhIdWI7aGVscF9nZW5lcmFsX3RhYi50cGwnfQogIDwvZGl2PgoKICA8ZGl2IGlkPSJtYXMtYWgtaGVscC1jb25maWd1cmF0aW9uIiBjbGFzcz0ibWFzLWFoLWhlbHAtc2VjdGlvbiI+CiAgICB7aW5jbHVkZSBmaWxlPSdtb2R1bGVfZmlsZV90cGw6TUFTX0F1dGhIdWI7aGVscF9jb25maWd1cmF0aW9uX3RhYi50cGwnfQogIDwvZGl2PgoKICA8ZGl2IGlkPSJtYXMtYWgtaGVscC1wcm90b2NvbHMiIGNsYXNzPSJtYXMtYWgtaGVscC1zZWN0aW9uIj4KICAgIHtpbmNsdWRlIGZpbGU9J21vZHVsZV9maWxlX3RwbDpNQVNfQXV0aEh1YjtoZWxwX3Byb3RvY29sc190YWIudHBsJ30KICA8L2Rpdj4KCiAgPGRpdiBpZD0ibWFzLWFoLWhlbHAtc2VjdXJpdHkiIGNsYXNzPSJtYXMtYWgtaGVscC1zZWN0aW9uIj4KICAgIHtpbmNsdWRlIGZpbGU9J21vZHVsZV9maWxlX3RwbDpNQVNfQXV0aEh1YjtoZWxwX3NlY3VyaXR5X3RhYi50cGwnfQogIDwvZGl2PgoKICA8ZGl2IGlkPSJtYXMtYWgtaGVscC10cm91Ymxlc2hvb3RpbmciIGNsYXNzPSJtYXMtYWgtaGVscC1zZWN0aW9uIj4KICAgIHtpbmNsdWRlIGZpbGU9J21vZHVsZV9maWxlX3RwbDpNQVNfQXV0aEh1YjtoZWxwX3Ryb3VibGVzaG9vdGluZ190YWIudHBsJ30KICA8L2Rpdj4KPC9kaXY+Cgo8c2NyaXB0PgooZnVuY3Rpb24oKSB7CiAgdmFyIHdyYXAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWFzLWFoLWhlbHAtdGFicycpOwogIGlmICghd3JhcCkgeyByZXR1cm47IH0KICB2YXIgdGFicyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5tYXMtYWgtaGVscC10YWInKTsKICB2YXIgc2VjdGlvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubWFzLWFoLWhlbHAtc2VjdGlvbicpOwogIHRhYnMuZm9yRWFjaChmdW5jdGlvbih0YWIpIHsKICAgIHRhYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB2YXIgdGFyZ2V0ID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGFiJyk7CiAgICAgIHRhYnMuZm9yRWFjaChmdW5jdGlvbih0KSB7IHQuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7IH0pOwogICAgICBzZWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHMpIHsgcy5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTsgfSk7CiAgICAgIHRoaXMuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7CiAgICAgIHZhciBwYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhcmdldCk7CiAgICAgIGlmIChwYW5lbCkgeyBwYW5lbC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsgfQogICAgfSk7CiAgfSk7Cn0pKCk7Cjwvc2NyaXB0Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/help_configuration_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdoZWxwX2NvbmZpZ3VyYXRpb24nKXxlc2NhcGU6J2h0bWwnfTwvaDM+Cgo8aDQ+eyRtb2QtPkxhbmcoJ2hlbHBfY29uZmlnX3NlY3JldHNfaGVhZGluZycpfGVzY2FwZTonaHRtbCd9PC9oND4KPHA+eyRtb2QtPkxhbmcoJ2hlbHBfY29uZmlnX3NlY3JldHNfYm9keScpfGVzY2FwZTonaHRtbCd9PC9wPgo8dWw+CiAgPGxpPjxjb2RlPmVuY3J5cHRpb25fa2V5PC9jb2RlPjogeyRtb2QtPkxhbmcoJ2hlbHBfY29uZmlnX2VuY3J5cHRpb25fa2V5Jyl8ZXNjYXBlOidodG1sJ308L2xpPgogIDxsaT48Y29kZT5zaWduaW5nX2tleTwvY29kZT46IHskbW9kLT5MYW5nKCdoZWxwX2NvbmZpZ19zaWduaW5nX2tleScpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+PGNvZGU+cHJvdmlkZXJzPC9jb2RlPjogeyRtb2QtPkxhbmcoJ2hlbHBfY29uZmlnX3Byb3ZpZGVycycpfGVzY2FwZTonaHRtbCd9PC9saT4KPC91bD4KCjxoND57JG1vZC0+TGFuZygnaGVscF9jb25maWdfc2V0dGluZ3NfaGVhZGluZycpfGVzY2FwZTonaHRtbCd9PC9oND4KPHVsPgogIDxsaT48c3Ryb25nPnskbW9kLT5MYW5nKCdlbmFibGVfYWRtaW5fc3NvJyl8ZXNjYXBlOidodG1sJ308L3N0cm9uZz46IHskbW9kLT5MYW5nKCdoZWxwX2NvbmZpZ19hZG1pbl9zc28nKXxlc2NhcGU6J2h0bWwnfTwvbGk+CiAgPGxpPjxzdHJvbmc+eyRtb2QtPkxhbmcoJ2VuYWJsZV9tYW1zX3NzbycpfGVzY2FwZTonaHRtbCd9PC9zdHJvbmc+OiB7JG1vZC0+TGFuZygnaGVscF9jb25maWdfbWFtc19zc28nKXxlc2NhcGU6J2h0bWwnfTwvbGk+CiAgPGxpPjxzdHJvbmc+eyRtb2QtPkxhbmcoJ2F1dG9fbGlua19lbWFpbCcpfGVzY2FwZTonaHRtbCd9PC9zdHJvbmc+OiB7JG1vZC0+TGFuZygnaGVscF9jb25maWdfYXV0b19saW5rJyl8ZXNjYXBlOidodG1sJ308L2xpPgogIDxsaT48c3Ryb25nPnskbW9kLT5MYW5nKCdzZXNzaW9uX3R0bCcpfGVzY2FwZTonaHRtbCd9PC9zdHJvbmc+OiB7JG1vZC0+TGFuZygnaGVscF9jb25maWdfc2Vzc2lvbl90dGwnKXxlc2NhcGU6J2h0bWwnfTwvbGk+CiAgPGxpPjxzdHJvbmc+eyRtb2QtPkxhbmcoJ3JhdGVfcGVyX2hvdXInKXxlc2NhcGU6J2h0bWwnfTwvc3Ryb25nPjogeyRtb2QtPkxhbmcoJ2hlbHBfY29uZmlnX3JhdGUnKXxlc2NhcGU6J2h0bWwnfTwvbGk+CjwvdWw+Cgo8aDQ+eyRtb2QtPkxhbmcoJ2hlbHBfY29uZmlnX3RhYnNfaGVhZGluZycpfGVzY2FwZTonaHRtbCd9PC9oND4KPHVsPgogIDxsaT48c3Ryb25nPnskbW9kLT5MYW5nKCd0YWJfcHJvdmlkZXJzJyl8ZXNjYXBlOidodG1sJ308L3N0cm9uZz46IHskbW9kLT5MYW5nKCdoZWxwX2NvbmZpZ190YWJfcHJvdmlkZXJzJyl8ZXNjYXBlOidodG1sJ308L2xpPgogIDxsaT48c3Ryb25nPnskbW9kLT5MYW5nKCd0YWJfbWFtcycpfGVzY2FwZTonaHRtbCd9PC9zdHJvbmc+OiB7JG1vZC0+TGFuZygnaGVscF9jb25maWdfdGFiX21hbXMnKXxlc2NhcGU6J2h0bWwnfTwvbGk+CiAgPGxpPjxzdHJvbmc+eyRtb2QtPkxhbmcoJ3RhYl9vYXV0aF9jbGllbnRzJyl8ZXNjYXBlOidodG1sJ308L3N0cm9uZz46IHskbW9kLT5MYW5nKCdoZWxwX2NvbmZpZ190YWJfb2F1dGgnKXxlc2NhcGU6J2h0bWwnfTwvbGk+CiAgPGxpPjxzdHJvbmc+eyRtb2QtPkxhbmcoJ3RhYl9zZXNzaW9ucycpfGVzY2FwZTonaHRtbCd9PC9zdHJvbmc+OiB7JG1vZC0+TGFuZygnaGVscF9jb25maWdfdGFiX3Nlc3Npb25zJyl8ZXNjYXBlOidodG1sJ308L2xpPgogIDxsaT48c3Ryb25nPnskbW9kLT5MYW5nKCd0YWJfYXVkaXQnKXxlc2NhcGU6J2h0bWwnfTwvc3Ryb25nPjogeyRtb2QtPkxhbmcoJ2hlbHBfY29uZmlnX3RhYl9hdWRpdCcpfGVzY2FwZTonaHRtbCd9PC9saT4KPC91bD4K]]></data>
	</file>
	<file>
	  <filename>/templates/help_general_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdoZWxwX2dlbmVyYWwnKXxlc2NhcGU6J2h0bWwnfTwvaDM+Cgo8aDQ+eyRtb2QtPkxhbmcoJ2hlbHBfb3ZlcnZpZXdfaGVhZGluZycpfGVzY2FwZTonaHRtbCd9PC9oND4KPHA+eyRtb2QtPkxhbmcoJ2hlbHBfb3ZlcnZpZXdfYm9keScpfGVzY2FwZTonaHRtbCd9PC9wPgoKPGg0PnskbW9kLT5MYW5nKCdoZWxwX3F1aWNrc3RhcnRfaGVhZGluZycpfGVzY2FwZTonaHRtbCd9PC9oND4KPG9sPgogIDxsaT57JG1vZC0+TGFuZygnaGVscF9xdWlja3N0YXJ0XzEnKXxlc2NhcGU6J2h0bWwnfTwvbGk+CiAgPGxpPnskbW9kLT5MYW5nKCdoZWxwX3F1aWNrc3RhcnRfMicpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+eyRtb2QtPkxhbmcoJ2hlbHBfcXVpY2tzdGFydF8zJyl8ZXNjYXBlOidodG1sJ308L2xpPgogIDxsaT57JG1vZC0+TGFuZygnaGVscF9xdWlja3N0YXJ0XzQnKXxlc2NhcGU6J2h0bWwnfTwvbGk+CiAgPGxpPnskbW9kLT5MYW5nKCdoZWxwX3F1aWNrc3RhcnRfNScpfGVzY2FwZTonaHRtbCd9PC9saT4KPC9vbD4KCjxoND57JG1vZC0+TGFuZygnaGVscF9yZXF1aXJlbWVudHNfaGVhZGluZycpfGVzY2FwZTonaHRtbCd9PC9oND4KPHVsPgogIDxsaT57JG1vZC0+TGFuZygnaGVscF9yZXF1aXJlbWVudHNfY21zJyl8ZXNjYXBlOidodG1sJ30geyRtb2QtPk1pbmltdW1DTVNWZXJzaW9uKCl8ZXNjYXBlOidodG1sJ308L2xpPgogIDxsaT57JG1vZC0+TGFuZygnaGVscF9yZXF1aXJlbWVudHNfcGhwJyl8ZXNjYXBlOidodG1sJ30geyRtb2QtPkdldE1pbmltdW1QSFBWZXJzaW9uKCl8ZXNjYXBlOidodG1sJ308L2xpPgogIDxsaT57JG1vZC0+TGFuZygnaGVscF9yZXF1aXJlbWVudHNfbWFtcycpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+eyRtb2QtPkxhbmcoJ2hlbHBfcmVxdWlyZW1lbnRzX2h0dHBzJyl8ZXNjYXBlOidodG1sJ308L2xpPgo8L3VsPgoKPGg0PnskbW9kLT5MYW5nKCdoZWxwX2NyZWRpdHNfaGVhZGluZycpfGVzY2FwZTonaHRtbCd9PC9oND4KPHA+eyRtb2QtPkxhbmcoJ2hlbHBfY3JlZGl0c19ib2R5Jyl8ZXNjYXBlOidodG1sJ30gPGEgaHJlZj0ieyRtb2QtPkdldEF1dGhvclVybCgpfGVzY2FwZTondXJsJ30iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiPnskbW9kLT5HZXRBdXRob3IoKXxlc2NhcGU6J2h0bWwnfTwvYT4gfCA8YSBocmVmPSJtYWlsdG86eyRtb2QtPkdldEF1dGhvckVtYWlsKCl8ZXNjYXBlOid1cmwnfSI+eyRtb2QtPkdldEF1dGhvckVtYWlsKCl8ZXNjYXBlOidodG1sJ308L2E+PC9wPgo=]]></data>
	</file>
	<file>
	  <filename>/templates/help_protocols_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdoZWxwX3Byb3RvY29scycpfGVzY2FwZTonaHRtbCd9PC9oMz4KCjxoND5PQXV0aDIgLyBPSURDPC9oND4KPHA+eyRtb2QtPkxhbmcoJ2hlbHBfcHJvdG9jb2xzX29hdXRoX2JvZHknKXxlc2NhcGU6J2h0bWwnfTwvcD4KPHVsPgogIDxsaT48Y29kZT5vYXV0aF9zdGFydDwvY29kZT4sIDxjb2RlPm9hdXRoX2NhbGxiYWNrPC9jb2RlPjwvbGk+CiAgPGxpPjxjb2RlPm9hdXRoX2F1dGhvcml6ZTwvY29kZT4sIDxjb2RlPm9hdXRoX3Rva2VuPC9jb2RlPiAoeyRtb2QtPkxhbmcoJ2hlbHBfcHJvdG9jb2xzX29hdXRoX3NlcnZlcicpfGVzY2FwZTonaHRtbCd9KTwvbGk+CiAgPGxpPjxjb2RlPm9pZGNfZGlzY292ZXJ5PC9jb2RlPiAoeyRtb2QtPkxhbmcoJ2hlbHBfcHJvdG9jb2xzX29pZGNfZGlzY292ZXJ5Jyl8ZXNjYXBlOidodG1sJ30pPC9saT4KPC91bD4KCjxoND5TQU1MPC9oND4KPHA+eyRtb2QtPkxhbmcoJ2hlbHBfcHJvdG9jb2xzX3NhbWxfYm9keScpfGVzY2FwZTonaHRtbCd9PC9wPgo8dWw+CiAgPGxpPjxjb2RlPnNhbWxfYWNzPC9jb2RlPjogeyRtb2QtPkxhbmcoJ2hlbHBfcHJvdG9jb2xzX3NhbWxfYWNzJyl8ZXNjYXBlOidodG1sJ308L2xpPgogIDxsaT48Y29kZT5zYW1sX21ldGFkYXRhPC9jb2RlPjogeyRtb2QtPkxhbmcoJ2hlbHBfcHJvdG9jb2xzX3NhbWxfbWV0YWRhdGEnKXxlc2NhcGU6J2h0bWwnfTwvbGk+CjwvdWw+Cgo8aDQ+V2ViQXV0aG48L2g0Pgo8cD57JG1vZC0+TGFuZygnaGVscF9wcm90b2NvbHNfd2ViYXV0aG5fYm9keScpfGVzY2FwZTonaHRtbCd9PC9wPgo8dWw+CiAgPGxpPjxjb2RlPndlYmF1dGhuPC9jb2RlPjogeyRtb2QtPkxhbmcoJ2hlbHBfcHJvdG9jb2xzX3dlYmF1dGhuX2FjdGlvbicpfGVzY2FwZTonaHRtbCd9PC9saT4KPC91bD4KCjxoND5NQU1TPC9oND4KPHA+eyRtb2QtPkxhbmcoJ2hlbHBfcHJvdG9jb2xzX21hbXNfYm9keScpfGVzY2FwZTonaHRtbCd9PC9wPgo8dWw+CiAgPGxpPjxjb2RlPm1hbXNfbG9naW48L2NvZGU+OiB7JG1vZC0+TGFuZygnaGVscF9wcm90b2NvbHNfbWFtc19sb2dpbicpfGVzY2FwZTonaHRtbCd9PC9saT4KPC91bD4Ke2lmICRtYXNfYWhfaGF2ZV9tYW1zX3JlZ2lzdHJhdGlvbnxkZWZhdWx0OicwJyA9PSAnMSd9CjxwIGNsYXNzPSJpbmZvcm1hdGlvbiI+eyRtb2QtPkxhbmcoJ2hlbHBfcHJvdG9jb2xzX21hbXNfcmVnJyl8ZXNjYXBlOidodG1sJ308L3A+CnsvaWZ9Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/help_security_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdoZWxwX3NlY3VyaXR5Jyl8ZXNjYXBlOidodG1sJ308L2gzPgoKPGg0PnskbW9kLT5MYW5nKCdoZWxwX3NlY3VyaXR5X3NlY3JldHNfaGVhZGluZycpfGVzY2FwZTonaHRtbCd9PC9oND4KPHA+eyRtb2QtPkxhbmcoJ2hlbHBfc2VjdXJpdHlfc2VjcmV0c19ib2R5Jyl8ZXNjYXBlOidodG1sJ308L3A+Cgo8aDQ+eyRtb2QtPkxhbmcoJ2hlbHBfc2VjdXJpdHlfYXVkaXRfaGVhZGluZycpfGVzY2FwZTonaHRtbCd9PC9oND4KPHA+eyRtb2QtPkxhbmcoJ2hlbHBfc2VjdXJpdHlfYXVkaXRfYm9keScpfGVzY2FwZTonaHRtbCd9PC9wPgoKPGg0PnskbW9kLT5MYW5nKCdoZWxwX3NlY3VyaXR5X3Nlc3Npb25zX2hlYWRpbmcnKXxlc2NhcGU6J2h0bWwnfTwvaDQ+CjxwPnskbW9kLT5MYW5nKCdoZWxwX3NlY3VyaXR5X3Nlc3Npb25zX2JvZHknKXxlc2NhcGU6J2h0bWwnfTwvcD4KCjxoND57JG1vZC0+TGFuZygnaGVscF9zZWN1cml0eV9wZXJtaXNzaW9uc19oZWFkaW5nJyl8ZXNjYXBlOidodG1sJ308L2g0Pgo8dWw+CiAgPGxpPjxzdHJvbmc+eyRtb2QtPkxhbmcoJ2hlbHBfc2VjdXJpdHlfcGVybV9tYW5hZ2UnKXxlc2NhcGU6J2h0bWwnfTwvc3Ryb25nPjwvbGk+CiAgPGxpPjxzdHJvbmc+eyRtb2QtPkxhbmcoJ2hlbHBfc2VjdXJpdHlfcGVybV91c2UnKXxlc2NhcGU6J2h0bWwnfTwvc3Ryb25nPjwvbGk+CjwvdWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/help_troubleshooting_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdoZWxwX3Ryb3VibGVzaG9vdGluZycpfGVzY2FwZTonaHRtbCd9PC9oMz4KCjxoND57JG1vZC0+TGFuZygnaGVscF90c19zc29faGVhZGluZycpfGVzY2FwZTonaHRtbCd9PC9oND4KPHVsPgogIDxsaT57JG1vZC0+TGFuZygnaGVscF90c19zc29fMScpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+eyRtb2QtPkxhbmcoJ2hlbHBfdHNfc3NvXzInKXxlc2NhcGU6J2h0bWwnfTwvbGk+CiAgPGxpPnskbW9kLT5MYW5nKCdoZWxwX3RzX3Nzb18zJyl8ZXNjYXBlOidodG1sJ308L2xpPgo8L3VsPgoKPGg0PnskbW9kLT5MYW5nKCdoZWxwX3RzX29hdXRoX2hlYWRpbmcnKXxlc2NhcGU6J2h0bWwnfTwvaDQ+Cjx1bD4KICA8bGk+eyRtb2QtPkxhbmcoJ2hlbHBfdHNfb2F1dGhfMScpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+eyRtb2QtPkxhbmcoJ2hlbHBfdHNfb2F1dGhfMicpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+eyRtb2QtPkxhbmcoJ2hlbHBfdHNfb2F1dGhfMycpfGVzY2FwZTonaHRtbCd9PC9saT4KPC91bD4KCjxoND57JG1vZC0+TGFuZygnaGVscF90c19tYW1zX2hlYWRpbmcnKXxlc2NhcGU6J2h0bWwnfTwvaDQ+Cjx1bD4KICA8bGk+eyRtb2QtPkxhbmcoJ2hlbHBfdHNfbWFtc18xJyl8ZXNjYXBlOidodG1sJ308L2xpPgogIDxsaT57JG1vZC0+TGFuZygnaGVscF90c19tYW1zXzInKXxlc2NhcGU6J2h0bWwnfTwvbGk+CjwvdWw+Cgo8aDQ+eyRtb2QtPkxhbmcoJ2hlbHBfdHNfc3VwcG9ydF9oZWFkaW5nJyl8ZXNjYXBlOidodG1sJ308L2g0Pgo8cD57JG1vZC0+TGFuZygnaGVscF90c19zdXBwb3J0X2JvZHknKXxlc2NhcGU6J2h0bWwnfSA8YSBocmVmPSJodHRwczovL25ld3N0YXJnZXRlZC5jb20vY29udGFjdC8iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiPm5ld3N0YXJnZXRlZC5jb20vY29udGFjdDwvYT48L3A+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/mams_alt_login.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0ibWFzLWF1dGhodWItYWx0LWxvZ2luIiBzdHlsZT0ibWFyZ2luOjFlbSAwO3BhZGRpbmc6MWVtO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjZweDsiPgo8cD48c3Ryb25nPnskbW9kLT5MYW5nKCdzc29fbG9naW5fd2l0aCcpfGRlZmF1bHQ6J1NpZ24gaW4gd2l0aCd8ZXNjYXBlOidodG1sJ306PC9zdHJvbmc+PC9wPgo8dWwgc3R5bGU9Imxpc3Qtc3R5bGU6bm9uZTtwYWRkaW5nOjA7Ij4Ke2ZvcmVhY2ggZnJvbT0kbWFzX2FoX3Byb3ZpZGVycyBpdGVtPXByfQo8bGkgc3R5bGU9Im1hcmdpbjowLjVlbSAwOyI+PGEgY2xhc3M9Im1hcy1hdXRoaHViLXNzby1idG4iIGhyZWY9InskcHIudXJsfGVzY2FwZTonaHRtbCd9Ij57JHByLm5hbWV8ZXNjYXBlOidodG1sJ308L2E+PC9saT4Key9mb3JlYWNofQo8L3VsPgp7aWYgJG1hc19haF93ZWJhdXRobl91cmx8ZGVmYXVsdDonJyAhPSAnJ30KPHA+PGEgaHJlZj0ieyRtYXNfYWhfd2ViYXV0aG5fdXJsfGVzY2FwZTonaHRtbCd9Ij5QYXNza2V5IGxvZ2luPC9hPjwvcD4Key9pZn0KPC9tb3Rpb24+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/mams_policy.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCd0YWJfbWFtcycpfGVzY2FwZTonaHRtbCd9PC9oMz4KPHA+PHN0cm9uZz57JG1vZC0+TGFuZygnbWFtc19zdGF0dXMnKXxlc2NhcGU6J2h0bWwnfTo8L3N0cm9uZz4gTUFNUyBpbnN0YWxsZWQ6IHskbWFtc19va3xlc2NhcGU6J2h0bWwnfTsgTUFNU1JlZ2lzdHJhdGlvbjogeyRtYW1zX3JlZ2lzdHJhdGlvbnxlc2NhcGU6J2h0bWwnfTwvcD4KPHA+PHN0cm9uZz57JG1vZC0+TGFuZygnbWFtc19hdXRoX21vZHVsZScpfGVzY2FwZTonaHRtbCd9Ojwvc3Ryb25nPiB7JG1hbXNfYXV0aF9tb2R1bGV8ZXNjYXBlOidodG1sJ30ge2lmICRhdXRoaHViX2FjdGl2ZSA9PSAneWVzJ30oQXV0aEh1YiBhY3RpdmUpe2Vsc2V9KHNldCB0byBNQVNfQXV0aEh1YiBpbiBNQU1TIGFkbWluIHByZWZlcmVuY2VzKXsvaWZ9PC9wPgo8cD5EbyBub3QgZWRpdCBNQU1TIG1vZHVsZSBmaWxlcy4gQ2hhbmdlIGF1dGhlbnRpY2F0aW9uIG1vZHVsZSBvbmx5IGluIE1BTVMgUHJlZmVyZW5jZXMuPC9wPgp7JGZvcm1zdGFydH0KPHA+PGxhYmVsPnskbW9kLT5MYW5nKCdtYW1zX2ppdF9jcmVhdGUnKXxlc2NhcGU6J2h0bWwnfTwvbGFiZWw+IHskbWFtc19qaXRfY3JlYXRlfTwvcD4KPHA+PGxhYmVsPnskbW9kLT5MYW5nKCdibG9ja19kdXBsaWNhdGVfZW1haWxfc2lnbnVwJyl8ZXNjYXBlOidodG1sJ308L2xhYmVsPiB7JGJsb2NrX2R1cGxpY2F0ZV9lbWFpbF9zaWdudXB9PC9wPgo8cD5EZWZhdWx0IE1BTVMgZ3JvdXAgSURzIChjb21tYS1zZXBhcmF0ZWQpIHskbWFtc19kZWZhdWx0X2dyb3Vwc308L3A+CjxwPkRlZmF1bHQgY29ubmVjdGluZyBwcm9wZXJ0eSB7JGRlZmF1bHRfY29ubmVjdGluZ19wcm9wZXJ0eX08L3A+CjxwPnskc3VibWl0fTwvcD4KeyRmb3JtZW5kfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/oauth_clients.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCd0YWJfb2F1dGhfY2xpZW50cycpfGVzY2FwZTonaHRtbCd9PC9oMz4KPHA+T0lEQyBkaXNjb3Zlcnk6IDxjb2RlPnskZGlzY292ZXJ5X3VybHxlc2NhcGU6J2h0bWwnfTwvY29kZT48L3A+Cjx0YWJsZSBjbGFzcz0icGFnZXRhYmxlIj48dGhlYWQ+PHRyPjx0aD5JRDwvdGg+PHRoPnskbW9kLT5MYW5nKCdjbGllbnRfaWQnKXxlc2NhcGU6J2h0bWwnfTwvdGg+PHRoPk5hbWU8L3RoPjwvdHI+PC90aGVhZD4KPHRib2R5Pntmb3JlYWNoIGZyb209JGNsaWVudHMgaXRlbT1jfTx0cj48dGQ+eyRjLmlkfTwvdGQ+PHRkPnskYy5jbGllbnRfaWR8ZXNjYXBlOidodG1sJ308L3RkPjx0ZD57JGMubmFtZXxlc2NhcGU6J2h0bWwnfTwvdGQ+PC90cj57L2ZvcmVhY2h9PC90Ym9keT48L3RhYmxlPgo8aDQ+eyRtb2QtPkxhbmcoJ29hdXRoX2NsaWVudF9hZGQnKXxlc2NhcGU6J2h0bWwnfTwvaDQ+CnskZm9ybXN0YXJ0fQo8cD5OYW1lIHskb2F1dGhfY2xpZW50X25hbWV9PC9wPgo8cD5DbGllbnQgSUQgeyRvYXV0aF9jbGllbnRfaWR9PC9wPgo8cD5TZWNyZXQgeyRvYXV0aF9jbGllbnRfc2VjcmV0fTwvcD4KPHA+UmVkaXJlY3QgVVJJcyB7JHJlZGlyZWN0X3VyaXN9PC9wPgo8cD5TY29wZXMgeyRvYXV0aF9zY29wZXN9PC9wPgo8cD57JHN1Ym1pdF9jbGllbnR9PC9wPgp7JGZvcm1lbmR9Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/providers.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCd0YWJfcHJvdmlkZXJzJyl8ZXNjYXBlOidodG1sJ308L2gzPgo8dGFibGUgY2xhc3M9InBhZ2V0YWJsZSIgc3R5bGU9IndpZHRoOjEwMCU7Ij4KPHRoZWFkPjx0cj48dGg+SUQ8L3RoPjx0aD57JG1vZC0+TGFuZygncHJvdmlkZXJfbmFtZScpfGVzY2FwZTonaHRtbCd9PC90aD48dGg+eyRtb2QtPkxhbmcoJ3Byb3ZpZGVyX2RyaXZlcicpfGVzY2FwZTonaHRtbCd9PC90aD48dGg+eyRtb2QtPkxhbmcoJ3Byb3ZpZGVyX2VuYWJsZWQnKXxlc2NhcGU6J2h0bWwnfTwvdGg+PHRoPjwvdGg+PC90cj48L3RoZWFkPgo8dGJvZHk+Cntmb3JlYWNoIGZyb209JHByb3ZpZGVycyBpdGVtPXB9Cjx0cj4KPHRkPnskcC5pZHxlc2NhcGV9PC90ZD4KPHRkPnskcC5uYW1lfGVzY2FwZTonaHRtbCd9PC90ZD4KPHRkPnskcC5kcml2ZXJ8ZXNjYXBlOidodG1sJ308L3RkPgo8dGQ+e2lmICRwLmVuYWJsZWR9eWVze2Vsc2V9bm97L2lmfTwvdGQ+Cjx0ZD48YSBocmVmPSJ7JHAuZGVsZXRlX3VybHxlc2NhcGU6J2h0bWwnfSI+eyRtb2QtPkxhbmcoJ3Byb3ZpZGVyX2RlbGV0ZScpfGVzY2FwZTonaHRtbCd9PC9hPjwvdGQ+CjwvdHI+CnsvZm9yZWFjaH0KPC90Ym9keT4KPC90YWJsZT4KPGg0PnskbW9kLT5MYW5nKCdwcm92aWRlcl9hZGQnKXxlc2NhcGU6J2h0bWwnfTwvaDQ+CnskZm9ybXN0YXJ0fQo8cD5OYW1lIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfW5hbWUiIHZhbHVlPSIiPjwvcD4KPHA+RHJpdmVyIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH1kcml2ZXIiPntmb3JlYWNoIGZyb209JGRyaXZlcnMgaXRlbT1kfTxvcHRpb24gdmFsdWU9InskZHxlc2NhcGU6J2h0bWwnfSI+eyRkfGVzY2FwZTonaHRtbCd9PC9vcHRpb24+ey9mb3JlYWNofTwvc2VsZWN0PjwvcD4KPHA+UHJvdmlkZXIga2V5IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfXByb3ZpZGVyX2tleSIgdmFsdWU9IiI+PC9wPgo8cD5DbGllbnQgSUQgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9Y2xpZW50X2lkIiB2YWx1ZT0iIiBzdHlsZT0id2lkdGg6NjAlOyI+PC9wPgo8cD5DbGllbnQgc2VjcmV0IDxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0ieyRhY3Rpb25pZH1jbGllbnRfc2VjcmV0IiB2YWx1ZT0iIiBhdXRvY29tcGxldGU9Im5ldy1wYXNzd29yZCI+PC9wPgo8cD5BdXRob3JpemUgVVJMIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfWF1dGhvcml6ZV91cmwiIHZhbHVlPSIiIHN0eWxlPSJ3aWR0aDo4MCU7Ij48L3A+CjxwPlRva2VuIFVSTCA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH10b2tlbl91cmwiIHZhbHVlPSIiIHN0eWxlPSJ3aWR0aDo4MCU7Ij48L3A+CjxwPlVzZXJpbmZvIFVSTCA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH11c2VyaW5mb191cmwiIHZhbHVlPSIiIHN0eWxlPSJ3aWR0aDo4MCU7Ij48L3A+CjxwPklkUCBTU08gVVJMIChTQU1MKSA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1pZHBfc3NvX3VybCIgdmFsdWU9IiIgc3R5bGU9IndpZHRoOjgwJTsiPjwvcD4KPHA+RW5hYmxlZCA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InskYWN0aW9uaWR9ZW5hYmxlZCIgdmFsdWU9IjEiIGNoZWNrZWQ+PC9wPgo8cD48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0ieyRtb2QtPkxhbmcoJ3N1Ym1pdCcpfGVzY2FwZTonaHRtbCd9Ij48L3A+CnskZm9ybWVuZH0K]]></data>
	</file>
	<file>
	  <filename>/templates/sessions.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCd0YWJfc2Vzc2lvbnMnKXxlc2NhcGU6J2h0bWwnfTwvaDM+CjxoND5TZXNzaW9uczwvaDQ+Cjx0YWJsZSBjbGFzcz0icGFnZXRhYmxlIj48dGhlYWQ+PHRyPjx0aD5TZXNzaW9uPC90aD48dGg+Q01TIHVzZXI8L3RoPjx0aD5NQU1TIHVzZXI8L3RoPjx0aD5FeHBpcmVzPC90aD48dGg+PC90aD48L3RyPjwvdGhlYWQ+Cjx0Ym9keT57Zm9yZWFjaCBmcm9tPSRzZXNzaW9ucyBpdGVtPXN9Cjx0cj4KPHRkPnskcy5zZXNzaW9uX2lkfGVzY2FwZTonaHRtbCd8dHJ1bmNhdGU6MTZ9PC90ZD4KPHRkPnskcy5jbXNfdXNlcl9pZH08L3RkPgo8dGQ+eyRzLm1hbXNfdXNlcl9pZH08L3RkPgo8dGQ+eyRzLmV4cGlyZXNfYXR9PC90ZD4KPHRkPjxhIGhyZWY9Inskcy5yZXZva2VfdXJsfGVzY2FwZTonaHRtbCd9Ij57JG1vZC0+TGFuZygncmV2b2tlX3Nlc3Npb24nKXxlc2NhcGU6J2h0bWwnfTwvYT48L3RkPgo8L3RyPgp7L2ZvcmVhY2h9PC90Ym9keT48L3RhYmxlPgo8aDQ+VG9rZW5zPC9oND4KPHRhYmxlIGNsYXNzPSJwYWdldGFibGUiPjx0aGVhZD48dHI+PHRoPklEPC90aD48dGg+VHlwZTwvdGg+PHRoPkV4cGlyZXM8L3RoPjx0aD48L3RoPjwvdHI+PC90aGVhZD4KPHRib2R5Pntmb3JlYWNoIGZyb209JHRva2VucyBpdGVtPXR9Cjx0cj48dGQ+eyR0LmlkfTwvdGQ+PHRkPnskdC50b2tlbl90eXBlfGVzY2FwZTonaHRtbCd9PC90ZD48dGQ+eyR0LmV4cGlyZXNfYXR9PC90ZD4KPHRkPjxhIGhyZWY9InskdC5yZXZva2VfdXJsfGVzY2FwZTonaHRtbCd9Ij57JG1vZC0+TGFuZygncmV2b2tlX3Nlc3Npb24nKXxlc2NhcGU6J2h0bWwnfTwvYT48L3RkPjwvdHI+CnsvZm9yZWFjaH08L3Rib2R5PjwvdGFibGU+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/settings.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdzZXR0aW5ncycpfGVzY2FwZTonaHRtbCd9PC9oMz4KeyRzdGFydF9mb3JtfQo8cD48bGFiZWw+eyRtb2QtPkxhbmcoJ2VuYWJsZV9hZG1pbl9zc28nKXxlc2NhcGU6J2h0bWwnfTwvbGFiZWw+IHskZW5hYmxlX2FkbWluX3Nzb308L3A+CjxwPjxsYWJlbD57JG1vZC0+TGFuZygnZW5hYmxlX21hbXNfc3NvJyl8ZXNjYXBlOidodG1sJ308L2xhYmVsPiB7JGVuYWJsZV9tYW1zX3Nzb308L3A+CjxwPjxsYWJlbD57JG1vZC0+TGFuZygnYXV0b19saW5rX2VtYWlsJyl8ZXNjYXBlOidodG1sJ308L2xhYmVsPiB7JGF1dG9fbGlua19lbWFpbH08L3A+CjxwPjxsYWJlbD57JG1vZC0+TGFuZygnc2Vzc2lvbl90dGwnKXxlc2NhcGU6J2h0bWwnfTwvbGFiZWw+IHskc2Vzc2lvbl90dGx9PC9wPgo8cD48bGFiZWw+eyRtb2QtPkxhbmcoJ3JhdGVfcGVyX2hvdXInKXxlc2NhcGU6J2h0bWwnfTwvbGFiZWw+IHskcmF0ZV9wZXJfaG91cn08L3A+CjxwPnskc3VibWl0fTwvcD4KeyRlbmRfZm9ybX0K]]></data>
	</file>
	<file>
	  <filename>/templates/webauthn_login.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uICgpIHsKICAndXNlIHN0cmljdCc7CiAgdmFyIGNmZyA9IHdpbmRvdy5NQVNfQVVUSEhVQl9XRUJBVVRITiB8fCB7fTsKICB2YXIgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcy1haC13YS1sb2dpbicpOwogIHZhciBzdGF0dXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzLWFoLXdhLXN0YXR1cycpOwogIGlmICghYnRuIHx8ICFjZmcucG9zdFVybCkgewogICAgcmV0dXJuOwogIH0KICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICBpZiAoc3RhdHVzKSB7CiAgICAgIHN0YXR1cy50ZXh0Q29udGVudCA9ICdQYXNza2V5IGxvZ2luIHJlcXVpcmVzIGEgcmVnaXN0ZXJlZCBjcmVkZW50aWFsLiBVc2UgT0F1dGggU1NPIG9yIHJlZ2lzdGVyIGEgcGFzc2tleSBmcm9tIGFkbWluLic7CiAgICB9CiAgfSk7Cn0pKCk7Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/webauthn_login.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0ibWFzLWF1dGhodWItd2ViYXV0aG4iPgo8cD5QYXNza2V5IGxvZ2luIChXZWJBdXRobikuIFJlZ2lzdHJhdGlvbiBpcyBhdmFpbGFibGUgZnJvbSBBdXRoSHViIGFkbWluIHdoZW4gbG9nZ2VkIGluLjwvcD4KPHAgaWQ9Im1hcy1haC13YS1zdGF0dXMiPjwvcD4KPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJtYXMtYWgtd2EtbG9naW4iPlVzZSBwYXNza2V5PC9idXR0b24+CjwvbW90aW9uPgo8c2NyaXB0IHNyYz0ieyRtb2QtPkdldE1vZHVsZVVSTFBhdGgoKXxjYXQ6Jy90ZW1wbGF0ZXMvd2ViYXV0aG5fbG9naW4uanMnfGVzY2FwZTonaHRtbCd9Ij48L3NjcmlwdD4KPHNjcmlwdD4Kd2luZG93Lk1BU19BVVRISFVCX1dFQkFVVEhOID0gewogIHBvc3RVcmw6IHskbWFzX2FoX3dlYmF1dGhuX3Bvc3R8QGpzb25fZW5jb2RlfSwKICByZXR1cm5UeXBlOiB7JG1hc19haF9yZXR1cm5fdHlwZXxAanNvbl9lbmNvZGV9Cn07Cjwvc2NyaXB0Pgo=]]></data>
	</file>
	<file>
	  <filename>/Test/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/Test/generate_brand_assets.py</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoiIiJSZWdlbmVyYXRlIE1BU19BdXRoSHViIGJhbm5lciBhbmQgaWNvbnMuIFJlcXVpcmVzIFBpbGxvdy4iIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYW5ub3RhdGlvbnMKCmltcG9ydCBvcwppbXBvcnQgc3lzCgpmcm9tIFBJTCBpbXBvcnQgSW1hZ2UsIEltYWdlRHJhdywgSW1hZ2VGb250CgpBQ0NFTlQgPSAoNzksIDcwLCAyMjksIDI1NSkKQUNDRU5UX0RBUksgPSAoNDksIDQ2LCAxMjksIDI1NSkKV0hJVEUgPSAoMjU1LCAyNTUsIDI1NSwgMjU1KQpHT0xEID0gKDI1MCwgMjA0LCAyMSwgMjU1KQoKCmRlZiBsZXJwKGE6IGZsb2F0LCBiOiBmbG9hdCwgdDogZmxvYXQpIC0+IGZsb2F0OgogICAgcmV0dXJuIGEgKyAoYiAtIGEpICogdAoKCmRlZiBob3Jpem9udGFsX2dyYWRpZW50KHNpemU6IHR1cGxlW2ludCwgaW50XSwgbGVmdDogdHVwbGUsIHJpZ2h0OiB0dXBsZSkgLT4gSW1hZ2UuSW1hZ2U6CiAgICB3LCBoID0gc2l6ZQogICAgaW1nID0gSW1hZ2UubmV3KCJSR0JBIiwgc2l6ZSkKICAgIHBpeCA9IGltZy5sb2FkKCkKICAgIGZvciB4IGluIHJhbmdlKHcpOgogICAgICAgIHQgPSB4IC8gbWF4KHcgLSAxLCAxKQogICAgICAgIHIgPSBpbnQobGVycChsZWZ0WzBdLCByaWdodFswXSwgdCkpCiAgICAgICAgZyA9IGludChsZXJwKGxlZnRbMV0sIHJpZ2h0WzFdLCB0KSkKICAgICAgICBiID0gaW50KGxlcnAobGVmdFsyXSwgcmlnaHRbMl0sIHQpKQogICAgICAgIGFsID0gaW50KGxlcnAobGVmdFszXSwgcmlnaHRbM10sIHQpKQogICAgICAgIGZvciB5IGluIHJhbmdlKGgpOgogICAgICAgICAgICBwaXhbeCwgeV0gPSAociwgZywgYiwgYWwpCiAgICByZXR1cm4gaW1nCgoKZGVmIGxvYWRfZm9udChzaXplOiBpbnQpIC0+IEltYWdlRm9udC5GcmVlVHlwZUZvbnQgfCBJbWFnZUZvbnQuSW1hZ2VGb250OgogICAgZm9yIHAgaW4gKAogICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL2RlamF2dS1zYW5zLWZvbnRzL0RlamFWdVNhbnMtQm9sZC50dGYiLAogICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL2RlamF2dS9EZWphVnVTYW5zLUJvbGQudHRmIiwKICAgICk6CiAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUocCk6CiAgICAgICAgICAgIHJldHVybiBJbWFnZUZvbnQudHJ1ZXR5cGUocCwgc2l6ZSkKICAgIHJldHVybiBJbWFnZUZvbnQubG9hZF9kZWZhdWx0KCkKCgpkZWYgZHJhd19zaGllbGRfa2V5KGltZzogSW1hZ2UuSW1hZ2UsIGN4OiBmbG9hdCwgY3k6IGZsb2F0LCBzY2FsZTogZmxvYXQpIC0+IE5vbmU6CiAgICBkciA9IEltYWdlRHJhdy5EcmF3KGltZykKICAgIHMgPSBzY2FsZQogICAgc2hpZWxkID0gWwogICAgICAgIChjeCwgY3kgLSAxMTAgKiBzKSwKICAgICAgICAoY3ggKyA3OCAqIHMsIGN5IC0gNzAgKiBzKSwKICAgICAgICAoY3ggKyA3OCAqIHMsIGN5ICsgMTUgKiBzKSwKICAgICAgICAoY3gsIGN5ICsgOTUgKiBzKSwKICAgICAgICAoY3ggLSA3OCAqIHMsIGN5ICsgMTUgKiBzKSwKICAgICAgICAoY3ggLSA3OCAqIHMsIGN5IC0gNzAgKiBzKSwKICAgIF0KICAgIGRyLnBvbHlnb24oc2hpZWxkLCBmaWxsPVdISVRFKQogICAgaW5uZXIgPSBbCiAgICAgICAgKGN4LCBjeSAtIDc4ICogcyksCiAgICAgICAgKGN4ICsgNTIgKiBzLCBjeSAtIDQ4ICogcyksCiAgICAgICAgKGN4ICsgNTIgKiBzLCBjeSArIDggKiBzKSwKICAgICAgICAoY3gsIGN5ICsgNjIgKiBzKSwKICAgICAgICAoY3ggLSA1MiAqIHMsIGN5ICsgOCAqIHMpLAogICAgICAgIChjeCAtIDUyICogcywgY3kgLSA0OCAqIHMpLAogICAgXQogICAgZHIucG9seWdvbihpbm5lciwgZmlsbD1BQ0NFTlQpCiAgICBrciA9IDE4ICogcwogICAgZHIuZWxsaXBzZShbY3ggLSBrciwgY3kgLSA4ICogcyAtIGtyLCBjeCArIGtyLCBjeSAtIDggKiBzICsga3JdLCBmaWxsPVdISVRFKQogICAgc2xvdF93ID0gMTAgKiBzCiAgICBkci5yZWN0YW5nbGUoW2N4IC0gc2xvdF93LCBjeSArIDIgKiBzLCBjeCArIHNsb3RfdywgY3kgKyA0MiAqIHNdLCBmaWxsPVdISVRFKQogICAgZHIuZWxsaXBzZSgKICAgICAgICBbY3ggKyAzOCAqIHMgLSAxMiAqIHMsIGN5ICsgMTggKiBzIC0gMTIgKiBzLCBjeCArIDM4ICogcyArIDEyICogcywgY3kgKyAxOCAqIHMgKyAxMiAqIHNdLAogICAgICAgIGZpbGw9R09MRCwKICAgICkKCgpkZWYgbWFrZV9iYW5uZXIob3V0X3BhdGg6IHN0cikgLT4gTm9uZToKICAgIHcsIGggPSA2MDAsIDEyMAogICAgYmFzZSA9IGhvcml6b250YWxfZ3JhZGllbnQoKHcsIGgpLCBBQ0NFTlRfREFSSywgQUNDRU5UKQogICAgZHIgPSBJbWFnZURyYXcuRHJhdyhiYXNlKQogICAgZHIudGV4dCgoMjQsIDI2KSwgIk1BUyBBdXRoSHViIiwgZm9udD1sb2FkX2ZvbnQoMjgpLCBmaWxsPVdISVRFKQogICAgZHIudGV4dCgKICAgICAgICAoMjQsIDY2KSwKICAgICAgICAiT0F1dGgyLCBPSURDLCBTQU1MLCBXZWJBdXRobiwgYW5kIE1BTVMgU1NPIiwKICAgICAgICBmb250PWxvYWRfZm9udCgxMyksCiAgICAgICAgZmlsbD0oMjIwLCAyMTgsIDI1NSwgMjU1KSwKICAgICkKICAgIG92ZXJsYXkgPSBJbWFnZS5uZXcoIlJHQkEiLCAodywgaCksICgwLCAwLCAwLCAwKSkKICAgIGRyYXdfc2hpZWxkX2tleShvdmVybGF5LCA1MTgsIDcyLCAwLjIwKQogICAgSW1hZ2UuYWxwaGFfY29tcG9zaXRlKGJhc2UsIG92ZXJsYXkpLnNhdmUob3V0X3BhdGgsICJQTkciKQoKCmRlZiBtYWtlX2ljb24oc2l6ZTogaW50LCBvdXRfcGF0aDogc3RyKSAtPiBOb25lOgogICAgbWFyZ2luID0gaW50KHNpemUgKiAwLjA2KQogICAgZ3JhZCA9IGhvcml6b250YWxfZ3JhZGllbnQoKHNpemUsIHNpemUpLCBBQ0NFTlRfREFSSywgQUNDRU5UKQogICAgbWFzayA9IEltYWdlLm5ldygiTCIsIChzaXplLCBzaXplKSwgMCkKICAgIG1kciA9IEltYWdlRHJhdy5EcmF3KG1hc2spCiAgICBtZHIucm91bmRlZF9yZWN0YW5nbGUoCiAgICAgICAgW21hcmdpbiwgbWFyZ2luLCBzaXplIC0gbWFyZ2luLCBzaXplIC0gbWFyZ2luXSwKICAgICAgICByYWRpdXM9aW50KHNpemUgKiAwLjE4KSwKICAgICAgICBmaWxsPTI1NSwKICAgICkKICAgIGltZyA9IEltYWdlLm5ldygiUkdCQSIsIChzaXplLCBzaXplKSwgKDAsIDAsIDAsIDApKQogICAgaW1nLnBhc3RlKGdyYWQsICgwLCAwKSkKICAgIGltZy5wdXRhbHBoYShtYXNrKQogICAgbGF5ZXIgPSBJbWFnZS5uZXcoIlJHQkEiLCAoc2l6ZSwgc2l6ZSksICgwLCAwLCAwLCAwKSkKICAgIGRyYXdfc2hpZWxkX2tleShsYXllciwgc2l6ZSAvIDIsIHNpemUgLyAyLCBzaXplIC8gNTEyKQogICAgaW1nID0gSW1hZ2UuYWxwaGFfY29tcG9zaXRlKGltZywgbGF5ZXIpCiAgICBvdXQgPSBJbWFnZS5uZXcoIlJHQkEiLCAoc2l6ZSwgc2l6ZSksICgwLCAwLCAwLCAwKSkKICAgIG91dC5wYXN0ZShpbWcsICgwLCAwKSkKICAgIG91dC5wdXRhbHBoYShtYXNrKQogICAgb3V0LnNhdmUob3V0X3BhdGgsICJQTkciKQoKCmRlZiBtYWtlX2ljb25fZ2lmKG91dF9wYXRoOiBzdHIsIHNpemU6IGludCA9IDMyKSAtPiBOb25lOgogICAgaW1nID0gSW1hZ2UubmV3KCJSR0JBIiwgKHNpemUsIHNpemUpLCAoMCwgMCwgMCwgMCkpCiAgICBncmFkID0gaG9yaXpvbnRhbF9ncmFkaWVudCgoc2l6ZSwgc2l6ZSksIEFDQ0VOVF9EQVJLLCBBQ0NFTlQpCiAgICBpbWcucGFzdGUoZ3JhZCwgKDAsIDApKQogICAgbGF5ZXIgPSBJbWFnZS5uZXcoIlJHQkEiLCAoc2l6ZSwgc2l6ZSksICgwLCAwLCAwLCAwKSkKICAgIGRyYXdfc2hpZWxkX2tleShsYXllciwgc2l6ZSAvIDIsIHNpemUgLyAyLCBzaXplIC8gNTEyKQogICAgaW1nID0gSW1hZ2UuYWxwaGFfY29tcG9zaXRlKGltZywgbGF5ZXIpCiAgICByZ2IgPSBJbWFnZS5uZXcoIlJHQiIsIGltZy5zaXplLCAoMjU1LCAyNTUsIDI1NSkpCiAgICByZ2IucGFzdGUoaW1nLCBtYXNrPWltZy5zcGxpdCgpWzNdKQogICAgcmdiLnNhdmUob3V0X3BhdGgsICJHSUYiKQoKCmRlZiBtYWluKCkgLT4gaW50OgogICAgcm9vdCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKQogICAgaW1hZ2VzID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4ocm9vdCwgIi4uIiwgImltYWdlcyIpKQogICAgaWYgbm90IG9zLnBhdGguaXNkaXIoaW1hZ2VzKToKICAgICAgICBwcmludCgiTWlzc2luZyBpbWFnZXMgZGlyZWN0b3J5OiIsIGltYWdlcywgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgIHJldHVybiAxCiAgICBtYWtlX2Jhbm5lcihvcy5wYXRoLmpvaW4oaW1hZ2VzLCAiYmFubmVyLnBuZyIpKQogICAgbWFrZV9pY29uKDE5Miwgb3MucGF0aC5qb2luKGltYWdlcywgImljb24tMTkyLnBuZyIpKQogICAgbWFrZV9pY29uKDUxMiwgb3MucGF0aC5qb2luKGltYWdlcywgImljb24tNTEyLnBuZyIpKQogICAgbWFrZV9pY29uX2dpZihvcy5wYXRoLmpvaW4oaW1hZ2VzLCAiaWNvbi5naWYiKSwgMzIpCiAgICBwcmludCgiT0sgLT4iLCBpbWFnZXMpCiAgICByZXR1cm4gMAoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICByYWlzZSBTeXN0ZW1FeGl0KG1haW4oKSkK]]></data>
	</file>
	<file>
	  <filename>/to-do/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/to-do/config.mas_authhub.example.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIEV4YW1wbGUgc25pcHBldCBmb3Igc2l0ZSBjb25maWcucGhwIChkbyBub3QgaW5jbHVkZSB0aGlzIGZpbGUgZGlyZWN0bHkpLgogKi8KcmV0dXJuIGFycmF5KAogICAgJ21hc19hdXRoaHViJyA9PiBhcnJheSgKICAgICAgICAnZW5jcnlwdGlvbl9rZXknID0+ICdyZXBsYWNlLXdpdGgtMzItYnl0ZS1yYW5kb20tc2VjcmV0JywKICAgICAgICAnc2lnbmluZ19rZXknID0+ICdyZXBsYWNlLXdpdGgtand0LWhzMjU2LXNlY3JldCcsCiAgICAgICAgJ3Byb3ZpZGVycycgPT4gYXJyYXkoCiAgICAgICAgICAgICdhenVyZV9hZCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAnY2xpZW50X3NlY3JldCcgPT4gJ2Zyb20tYXp1cmUtcG9ydGFsJywKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgKSwKKTsK]]></data>
	</file>
	<file>
	  <filename>/vendor/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/autoload.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIGF1dG9sb2FkLnBocCBAZ2VuZXJhdGVkIGJ5IENvbXBvc2VyCgppZiAoUEhQX1ZFUlNJT05fSUQgPCA1MDYwMCkgewogICAgaWYgKCFoZWFkZXJzX3NlbnQoKSkgewogICAgICAgIGhlYWRlcignSFRUUC8xLjEgNTAwIEludGVybmFsIFNlcnZlciBFcnJvcicpOwogICAgfQogICAgJGVyciA9ICdDb21wb3NlciAyLjMuMCBkcm9wcGVkIHN1cHBvcnQgZm9yIGF1dG9sb2FkaW5nIG9uIFBIUCA8NS42IGFuZCB5b3UgYXJlIHJ1bm5pbmcgJy5QSFBfVkVSU0lPTi4nLCBwbGVhc2UgdXBncmFkZSBQSFAgb3IgdXNlIENvbXBvc2VyIDIuMiBMVFMgdmlhICJjb21wb3NlciBzZWxmLXVwZGF0ZSAtLTIuMiIuIEFib3J0aW5nLicuUEhQX0VPTDsKICAgIGlmICghaW5pX2dldCgnZGlzcGxheV9lcnJvcnMnKSkgewogICAgICAgIGlmIChQSFBfU0FQSSA9PT0gJ2NsaScgfHwgUEhQX1NBUEkgPT09ICdwaHBkYmcnKSB7CiAgICAgICAgICAgIGZ3cml0ZShTVERFUlIsICRlcnIpOwogICAgICAgIH0gZWxzZWlmICghaGVhZGVyc19zZW50KCkpIHsKICAgICAgICAgICAgZWNobyAkZXJyOwogICAgICAgIH0KICAgIH0KICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCRlcnIpOwp9CgpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvY29tcG9zZXIvYXV0b2xvYWRfcmVhbC5waHAnOwoKcmV0dXJuIENvbXBvc2VyQXV0b2xvYWRlckluaXRmMjYzNDhkYjFlNjI2NTAwNDQ2MWZjMTk1NzQ1MGNkYzo6Z2V0TG9hZGVyKCk7Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/beberlei/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/beberlei/assert/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/beberlei/assert/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICJuYW1lIjogImJlYmVybGVpL2Fzc2VydCIsCiAgImRlc2NyaXB0aW9uIjogIlRoaW4gYXNzZXJ0aW9uIGxpYnJhcnkgZm9yIGlucHV0IHZhbGlkYXRpb24gaW4gYnVzaW5lc3MgbW9kZWxzLiIsCiAgImF1dGhvcnMiOiBbCiAgICB7CiAgICAgICJuYW1lIjogIkJlbmphbWluIEViZXJsZWkiLAogICAgICAiZW1haWwiOiAia29udGFrdEBiZWJlcmxlaS5kZSIsCiAgICAgICJyb2xlIjogIkxlYWQgRGV2ZWxvcGVyIgogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiUmljaGFyZCBRdWFkbGluZyIsCiAgICAgICJlbWFpbCI6ICJycXVhZGxpbmdAZ21haWwuY29tIiwKICAgICAgInJvbGUiOiAiQ29sbGFib3JhdG9yIgogICAgfQogIF0sCiAgImxpY2Vuc2UiOiAiQlNELTItQ2xhdXNlIiwKICAia2V5d29yZHMiOiBbCiAgICAiYXNzZXJ0IiwKICAgICJhc3NlcnRpb24iLAogICAgInZhbGlkYXRpb24iCiAgXSwKICAiY29uZmlnIjogewogICAgInNvcnQtcGFja2FnZXMiOiB0cnVlCiAgfSwKICAicmVxdWlyZSI6IHsKICAgICJwaHAiOiAiXjcuMSB8fCBeOC4wIiwKICAgICJleHQtc2ltcGxleG1sIjogIioiLAogICAgImV4dC1tYnN0cmluZyI6ICIqIiwKICAgICJleHQtY3R5cGUiOiAiKiIsCiAgICAiZXh0LWpzb24iOiAiKiIKICB9LAogICJyZXF1aXJlLWRldiI6IHsKICAgICJmcmllbmRzb2ZwaHAvcGhwLWNzLWZpeGVyIjogIioiLAogICAgInBocHN0YW4vcGhwc3RhbiI6ICIqIiwKICAgICJwaHB1bml0L3BocHVuaXQiOiAiPj02LjAuMCIsCiAgICAieW9hc3QvcGhwdW5pdC1wb2x5ZmlsbHMiOiAiXjAuMS4wIgogIH0sCiAgImF1dG9sb2FkIjogewogICAgInBzci00IjogewogICAgICAiQXNzZXJ0XFwiOiAibGliL0Fzc2VydCIKICAgIH0sCiAgICAiZmlsZXMiOiBbCiAgICAgICJsaWIvQXNzZXJ0L2Z1bmN0aW9ucy5waHAiCiAgICBdCiAgfSwKICAiYXV0b2xvYWQtZGV2IjogewogICAgInBzci00IjogewogICAgICAiQXNzZXJ0XFxUZXN0c1xcIjogInRlc3RzL0Fzc2VydC9UZXN0cyIKICAgIH0sCiAgICAiZmlsZXMiOiBbCiAgICAgICJ0ZXN0cy9Bc3NlcnQvVGVzdHMvRml4dHVyZXMvZnVuY3Rpb25zLnBocCIKICAgIF0KICB9LAogICJzY3JpcHRzIjogewogICAgImFzc2VydDpnZW5lcmF0ZS1kb2NzIjogInBocCBiaW4vZ2VuZXJhdGVfbWV0aG9kX2RvY3MucGhwIiwKICAgICJhc3NlcnQ6Y3MtbGludCI6ICJwaHAtY3MtZml4ZXIgZml4IC0tZGlmZiAtdnZ2IC0tZHJ5LXJ1biIsCiAgICAiYXNzZXJ0OmNzLWZpeCI6ICJwaHAtY3MtZml4ZXIgZml4IC4gLXZ2diB8fCB0cnVlIiwKICAgICJhc3NlcnQ6c2EtY29kZSI6ICJ2ZW5kb3IvYmluL3BocHN0YW4gYW5hbHlzZSAtLWNvbmZpZ3VyYXRpb249cGhwc3Rhbi1jb2RlLm5lb24gLS1uby1wcm9ncmVzcyAtLWFuc2kgLWwgNyBiaW4gbGliIiwKICAgICJhc3NlcnQ6c2EtdGVzdHMiOiAidmVuZG9yL2Jpbi9waHBzdGFuIGFuYWx5c2UgLS1jb25maWd1cmF0aW9uPXBocHN0YW4tdGVzdHMubmVvbiAtLW5vLXByb2dyZXNzIC0tYW5zaSAtbCA3IHRlc3RzIgogIH0sCiAgInN1Z2dlc3QiOiB7CiAgICAiZXh0LWludGwiOiAiTmVlZGVkIHRvIGFsbG93IEFzc2VydGlvbjo6Y291bnQoKSwgQXNzZXJ0aW9uOjppc0NvdW50YWJsZSgpLCBBc3NlcnRpb246Om1pbkNvdW50KCksIGFuZCBBc3NlcnRpb246Om1heENvdW50KCkgdG8gb3BlcmF0ZSBvbiBSZXNvdXJjZUJ1bmRsZXMiCiAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/beberlei/assert/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/beberlei/assert/lib/Assert/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/beberlei/assert/lib/Assert/Assert.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBc3NlcnQKICoKICogTElDRU5TRQogKgogKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE1JVCBsaWNlbnNlIHRoYXQgaXMgYnVuZGxlZAogKiB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLnR4dC4KICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8KICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbAogKiB0byBrb250YWt0QGJlYmVybGVpLmRlIHNvIEkgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS4KICovCgpuYW1lc3BhY2UgQXNzZXJ0OwoKLyoqCiAqIEFzc2VydGlvbkNoYWluIGZhY3RvcnkuCiAqLwphYnN0cmFjdCBjbGFzcyBBc3NlcnQKewogICAgLyoqIEB2YXIgc3RyaW5nICovCiAgICBwcm90ZWN0ZWQgc3RhdGljICRsYXp5QXNzZXJ0aW9uRXhjZXB0aW9uQ2xhc3MgPSBMYXp5QXNzZXJ0aW9uRXhjZXB0aW9uOjpjbGFzczsKCiAgICAvKiogQHZhciBzdHJpbmcgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgJGFzc2VydGlvbkNsYXNzID0gQXNzZXJ0aW9uOjpjbGFzczsKCiAgICAvKioKICAgICAqIFN0YXJ0IHZhbGlkYXRpb24gb24gYSB2YWx1ZSwgcmV0dXJucyB7QGxpbmsgQXNzZXJ0aW9uQ2hhaW59LgogICAgICoKICAgICAqIFRoZSBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHN0YXJ0cyBhbiBhc3NlcnRpb24gY2hhaW4KICAgICAqIHRoYXQgaXMgaGFwcGVuaW5nIG9uIHRoZSBwYXNzZWQgdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRkZWZhdWx0TWVzc2FnZQogICAgICoKICAgICAqIEBleGFtcGxlCiAgICAgKgogICAgICogIEFzc2VydDo6dGhhdCgkdmFsdWUpLT5ub3RFbXB0eSgpLT5pbnRlZ2VyKCk7CiAgICAgKiAgQXNzZXJ0Ojp0aGF0KCR2YWx1ZSktPm51bGxPcigpLT5zdHJpbmcoKS0+c3RhcnRzV2l0aCgiRm9vIik7CiAgICAgKgogICAgICogVGhlIGFzc2VydGlvbiBjaGFpbiBjYW4gYmUgc3RhdGVmdWwsIHRoYXQgbWVhbnMgYmUgY2FyZWZ1bCB3aGVuIHlvdSByZXVzZQogICAgICogaXQuIFlvdSBzaG91bGQgbmV2ZXIgcGFzcyBhcm91bmQgdGhlIGNoYWluLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRoYXQoJHZhbHVlLCAkZGVmYXVsdE1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRkZWZhdWx0UHJvcGVydHlQYXRoID0gbnVsbCk6IEFzc2VydGlvbkNoYWluCiAgICB7CiAgICAgICAgJGFzc2VydGlvbkNoYWluID0gbmV3IEFzc2VydGlvbkNoYWluKCR2YWx1ZSwgJGRlZmF1bHRNZXNzYWdlLCAkZGVmYXVsdFByb3BlcnR5UGF0aCk7CgogICAgICAgIHJldHVybiAkYXNzZXJ0aW9uQ2hhaW4tPnNldEFzc2VydGlvbkNsYXNzTmFtZShzdGF0aWM6OiRhc3NlcnRpb25DbGFzcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTdGFydCB2YWxpZGF0aW9uIG9uIGEgc2V0IG9mIHZhbHVlcywgcmV0dXJucyB7QGxpbmsgQXNzZXJ0aW9uQ2hhaW59LgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWVzCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJGRlZmF1bHRNZXNzYWdlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdGhhdEFsbCgkdmFsdWVzLCAkZGVmYXVsdE1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRkZWZhdWx0UHJvcGVydHlQYXRoID0gbnVsbCk6IEFzc2VydGlvbkNoYWluCiAgICB7CiAgICAgICAgcmV0dXJuIHN0YXRpYzo6dGhhdCgkdmFsdWVzLCAkZGVmYXVsdE1lc3NhZ2UsICRkZWZhdWx0UHJvcGVydHlQYXRoKS0+YWxsKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTdGFydCB2YWxpZGF0aW9uIGFuZCBhbGxvdyBOVUxMLCByZXR1cm5zIHtAbGluayBBc3NlcnRpb25DaGFpbn0uCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRkZWZhdWx0TWVzc2FnZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRoYXROdWxsT3IoJHZhbHVlLCAkZGVmYXVsdE1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRkZWZhdWx0UHJvcGVydHlQYXRoID0gbnVsbCk6IEFzc2VydGlvbkNoYWluCiAgICB7CiAgICAgICAgcmV0dXJuIHN0YXRpYzo6dGhhdCgkdmFsdWUsICRkZWZhdWx0TWVzc2FnZSwgJGRlZmF1bHRQcm9wZXJ0eVBhdGgpLT5udWxsT3IoKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhIGxhenkgYXNzZXJ0aW9uIG9iamVjdC4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsYXp5KCk6IExhenlBc3NlcnRpb24KICAgIHsKICAgICAgICAkbGF6eUFzc2VydGlvbiA9IG5ldyBMYXp5QXNzZXJ0aW9uKCk7CgogICAgICAgIHJldHVybiAkbGF6eUFzc2VydGlvbgogICAgICAgICAgICAtPnNldEFzc2VydENsYXNzKFxnZXRfY2FsbGVkX2NsYXNzKCkpCiAgICAgICAgICAgIC0+c2V0RXhjZXB0aW9uQ2xhc3Moc3RhdGljOjokbGF6eUFzc2VydGlvbkV4Y2VwdGlvbkNsYXNzKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/beberlei/assert/lib/Assert/Assertion.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBc3NlcnQKICoKICogTElDRU5TRQogKgogKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE1JVCBsaWNlbnNlIHRoYXQgaXMgYnVuZGxlZAogKiB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLnR4dC4KICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8KICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbAogKiB0byBrb250YWt0QGJlYmVybGVpLmRlIHNvIEkgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS4KICovCgpuYW1lc3BhY2UgQXNzZXJ0OwoKdXNlIEFycmF5QWNjZXNzOwp1c2UgQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbjsKdXNlIENvdW50YWJsZTsKdXNlIERhdGVUaW1lOwp1c2UgUmVmbGVjdGlvbkNsYXNzOwp1c2UgUmVmbGVjdGlvbkV4Y2VwdGlvbjsKdXNlIFJlc291cmNlQnVuZGxlOwp1c2UgU2ltcGxlWE1MRWxlbWVudDsKdXNlIFRocm93YWJsZTsKdXNlIFRyYXZlcnNhYmxlOwoKLyoqCiAqIEFzc2VydCBsaWJyYXJ5LgogKgogKiBAYXV0aG9yIEJlbmphbWluIEViZXJsZWkgPGtvbnRha3RAYmViZXJsZWkuZGU+CiAqCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsQWxudW0obWl4ZWRbXSAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYWxwaGFudW1lcmljIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbEJhc2U2NChzdHJpbmdbXSAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgYSBjb25zdGFudCBpcyBkZWZpbmVkIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbEJldHdlZW4obWl4ZWRbXSAkdmFsdWUsIG1peGVkICRsb3dlckxpbWl0LCBtaXhlZCAkdXBwZXJMaW1pdCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBhIHZhbHVlIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiBhIGxvd2VyIGxpbWl0LCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGFuIHVwcGVyIGxpbWl0IGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbEJldHdlZW5FeGNsdXNpdmUobWl4ZWRbXSAkdmFsdWUsIG1peGVkICRsb3dlckxpbWl0LCBtaXhlZCAkdXBwZXJMaW1pdCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBhIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBhIGxvd2VyIGxpbWl0LCBhbmQgbGVzcyB0aGFuIGFuIHVwcGVyIGxpbWl0IGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbEJldHdlZW5MZW5ndGgobWl4ZWRbXSAkdmFsdWUsIGludCAkbWluTGVuZ3RoLCBpbnQgJG1heExlbmd0aCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsLCBzdHJpbmcgJGVuY29kaW5nID0gJ3V0ZjgnKSBBc3NlcnQgdGhhdCBzdHJpbmcgbGVuZ3RoIGlzIGJldHdlZW4gbWluIGFuZCBtYXggbGVuZ3RocyBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxCb29sZWFuKG1peGVkW10gJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIHBocCBib29sZWFuIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbENob2ljZShtaXhlZFtdICR2YWx1ZSwgYXJyYXkgJGNob2ljZXMsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgaW4gYXJyYXkgb2YgY2hvaWNlcyBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxDaG9pY2VzTm90RW1wdHkoYXJyYXlbXSAkdmFsdWVzLCBhcnJheSAkY2hvaWNlcywgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBEZXRlcm1pbmVzIGlmIHRoZSB2YWx1ZXMgYXJyYXkgaGFzIGV2ZXJ5IGNob2ljZSBhcyBrZXkgYW5kIHRoYXQgdGhpcyBjaG9pY2UgaGFzIGNvbnRlbnQgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsQ2xhc3NFeGlzdHMobWl4ZWRbXSAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIGNsYXNzIGV4aXN0cyBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxDb250YWlucyhtaXhlZFtdICRzdHJpbmcsIHN0cmluZyAkbmVlZGxlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwsIHN0cmluZyAkZW5jb2RpbmcgPSAndXRmOCcpIEFzc2VydCB0aGF0IHN0cmluZyBjb250YWlucyBhIHNlcXVlbmNlIG9mIGNoYXJzIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbENvdW50KGFycmF5W118Q291bnRhYmxlW118UmVzb3VyY2VCdW5kbGVbXXxTaW1wbGVYTUxFbGVtZW50W10gJGNvdW50YWJsZSwgaW50ICRjb3VudCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgY291bnQgb2YgY291bnRhYmxlIGlzIGVxdWFsIHRvIGNvdW50IGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbERhdGUoc3RyaW5nW10gJHZhbHVlLCBzdHJpbmcgJGZvcm1hdCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBkYXRlIGlzIHZhbGlkIGFuZCBjb3JyZXNwb25kcyB0byB0aGUgZ2l2ZW4gZm9ybWF0IGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbERlZmluZWQobWl4ZWRbXSAkY29uc3RhbnQsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgYSBjb25zdGFudCBpcyBkZWZpbmVkIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbERpZ2l0KG1peGVkW10gJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIFZhbGlkYXRlcyBpZiBhbiBpbnRlZ2VyIG9yIGludGVnZXJpc2ggaXMgYSBkaWdpdCBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxEaXJlY3Rvcnkoc3RyaW5nW10gJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGEgZGlyZWN0b3J5IGV4aXN0cyBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxFMTY0KHN0cmluZ1tdICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgdmFsaWQgRTE2NCBQaG9uZSBOdW1iZXIgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsRW1haWwobWl4ZWRbXSAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYW4gZW1haWwgYWRkcmVzcyAodXNpbmcgaW5wdXRfZmlsdGVyL0ZJTFRFUl9WQUxJREFURV9FTUFJTCkgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsRW5kc1dpdGgobWl4ZWRbXSAkc3RyaW5nLCBzdHJpbmcgJG5lZWRsZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsLCBzdHJpbmcgJGVuY29kaW5nID0gJ3V0ZjgnKSBBc3NlcnQgdGhhdCBzdHJpbmcgZW5kcyB3aXRoIGEgc2VxdWVuY2Ugb2YgY2hhcnMgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsRXEobWl4ZWRbXSAkdmFsdWUsIG1peGVkICR2YWx1ZTIsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdHdvIHZhbHVlcyBhcmUgZXF1YWwgKHVzaW5nID09KSBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxFcUFycmF5U3Vic2V0KG1peGVkW10gJHZhbHVlLCBtaXhlZCAkdmFsdWUyLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBhcnJheSBjb250YWlucyB0aGUgc3Vic2V0IGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbEV4dGVuc2lvbkxvYWRlZChtaXhlZFtdICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBleHRlbnNpb24gaXMgbG9hZGVkIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbEV4dGVuc2lvblZlcnNpb24oc3RyaW5nW10gJGV4dGVuc2lvbiwgc3RyaW5nICRvcGVyYXRvciwgbWl4ZWQgJHZlcnNpb24sIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgZXh0ZW5zaW9uIGlzIGxvYWRlZCBhbmQgYSBzcGVjaWZpYyB2ZXJzaW9uIGlzIGluc3RhbGxlZCBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxGYWxzZShtaXhlZFtdICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgdmFsdWUgaXMgYm9vbGVhbiBGYWxzZSBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxGaWxlKHN0cmluZ1tdICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBhIGZpbGUgZXhpc3RzIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbEZsb2F0KG1peGVkW10gJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGEgcGhwIGZsb2F0IGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbEdyZWF0ZXJPckVxdWFsVGhhbihtaXhlZFtdICR2YWx1ZSwgbWl4ZWQgJGxpbWl0LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIERldGVybWluZXMgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiBnaXZlbiBsaW1pdCBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxHcmVhdGVyVGhhbihtaXhlZFtdICR2YWx1ZSwgbWl4ZWQgJGxpbWl0LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIERldGVybWluZXMgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBnaXZlbiBsaW1pdCBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxJbXBsZW1lbnRzSW50ZXJmYWNlKG1peGVkW10gJGNsYXNzLCBzdHJpbmcgJGludGVyZmFjZU5hbWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIGNsYXNzIGltcGxlbWVudHMgdGhlIGludGVyZmFjZSBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxJbkFycmF5KG1peGVkW10gJHZhbHVlLCBhcnJheSAkY2hvaWNlcywgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBpbiBhcnJheSBvZiBjaG9pY2VzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIEFzc2VydGlvbjo6Y2hvaWNlKCkgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsSW50ZWdlcihtaXhlZFtdICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhIHBocCBpbnRlZ2VyIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbEludGVnZXJpc2gobWl4ZWRbXSAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYSBwaHAgaW50ZWdlcidpc2ggZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsSW50ZXJmYWNlRXhpc3RzKG1peGVkW10gJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBpbnRlcmZhY2UgZXhpc3RzIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbElwKHN0cmluZ1tdICR2YWx1ZSwgaW50ICRmbGFnID0gbnVsbCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBJUHY0IG9yIElQdjYgYWRkcmVzcyBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxJcHY0KHN0cmluZ1tdICR2YWx1ZSwgaW50ICRmbGFnID0gbnVsbCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBJUHY0IGFkZHJlc3MgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsSXB2NihzdHJpbmdbXSAkdmFsdWUsIGludCAkZmxhZyA9IG51bGwsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYW4gSVB2NiBhZGRyZXNzIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbElzQXJyYXkobWl4ZWRbXSAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYW4gYXJyYXkgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsSXNBcnJheUFjY2Vzc2libGUobWl4ZWRbXSAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYW4gYXJyYXkgb3IgYW4gYXJyYXktYWNjZXNzaWJsZSBvYmplY3QgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsSXNDYWxsYWJsZShtaXhlZFtdICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBEZXRlcm1pbmVzIHRoYXQgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIGNhbGxhYmxlIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbElzQ291bnRhYmxlKGFycmF5W118Q291bnRhYmxlW118UmVzb3VyY2VCdW5kbGVbXXxTaW1wbGVYTUxFbGVtZW50W10gJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGNvdW50YWJsZSBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxJc0luc3RhbmNlT2YobWl4ZWRbXSAkdmFsdWUsIHN0cmluZyAkY2xhc3NOYW1lLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGluc3RhbmNlIG9mIGdpdmVuIGNsYXNzLW5hbWUgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsSXNKc29uU3RyaW5nKG1peGVkW10gJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBnaXZlbiBzdHJpbmcgaXMgYSB2YWxpZCBqc29uIHN0cmluZyBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxJc09iamVjdChtaXhlZFtdICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBEZXRlcm1pbmVzIHRoYXQgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIGFuIG9iamVjdCBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxJc1Jlc291cmNlKG1peGVkW10gJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGEgcmVzb3VyY2UgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsSXNUcmF2ZXJzYWJsZShtaXhlZFtdICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBhcnJheSBvciBhIHRyYXZlcnNhYmxlIG9iamVjdCBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxLZXlFeGlzdHMobWl4ZWRbXSAkdmFsdWUsIHN0cmluZ3xpbnQgJGtleSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBrZXkgZXhpc3RzIGluIGFuIGFycmF5IGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbEtleUlzc2V0KG1peGVkW10gJHZhbHVlLCBzdHJpbmd8aW50ICRrZXksIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQga2V5IGV4aXN0cyBpbiBhbiBhcnJheS9hcnJheS1hY2Nlc3NpYmxlIG9iamVjdCB1c2luZyBpc3NldCgpIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbEtleU5vdEV4aXN0cyhtaXhlZFtdICR2YWx1ZSwgc3RyaW5nfGludCAka2V5LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGtleSBkb2VzIG5vdCBleGlzdCBpbiBhbiBhcnJheSBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxMZW5ndGgobWl4ZWRbXSAkdmFsdWUsIGludCAkbGVuZ3RoLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwsIHN0cmluZyAkZW5jb2RpbmcgPSAndXRmOCcpIEFzc2VydCB0aGF0IHN0cmluZyBoYXMgYSBnaXZlbiBsZW5ndGggZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsTGVzc09yRXF1YWxUaGFuKG1peGVkW10gJHZhbHVlLCBtaXhlZCAkbGltaXQsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgRGV0ZXJtaW5lcyBpZiB0aGUgdmFsdWUgaXMgbGVzcyBvciBlcXVhbCB0aGFuIGdpdmVuIGxpbWl0IGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbExlc3NUaGFuKG1peGVkW10gJHZhbHVlLCBtaXhlZCAkbGltaXQsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgRGV0ZXJtaW5lcyBpZiB0aGUgdmFsdWUgaXMgbGVzcyB0aGFuIGdpdmVuIGxpbWl0IGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbE1heChtaXhlZFtdICR2YWx1ZSwgbWl4ZWQgJG1heFZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGEgbnVtYmVyIGlzIHNtYWxsZXIgYXMgYSBnaXZlbiBsaW1pdCBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxNYXhDb3VudChhcnJheVtdfENvdW50YWJsZVtdfFJlc291cmNlQnVuZGxlW118U2ltcGxlWE1MRWxlbWVudFtdICRjb3VudGFibGUsIGludCAkY291bnQsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIGNvdW50YWJsZSBoYXZlIGF0IG1vc3QgJGNvdW50IGVsZW1lbnRzIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbE1heExlbmd0aChtaXhlZFtdICR2YWx1ZSwgaW50ICRtYXhMZW5ndGgsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgc3RyaW5nICRlbmNvZGluZyA9ICd1dGY4JykgQXNzZXJ0IHRoYXQgc3RyaW5nIHZhbHVlIGlzIG5vdCBsb25nZXIgdGhhbiAkbWF4TGVuZ3RoIGNoYXJzIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbE1ldGhvZEV4aXN0cyhzdHJpbmdbXSAkdmFsdWUsIG1peGVkICRvYmplY3QsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgRGV0ZXJtaW5lcyB0aGF0IHRoZSBuYW1lZCBtZXRob2QgaXMgZGVmaW5lZCBpbiB0aGUgcHJvdmlkZWQgb2JqZWN0IGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbE1pbihtaXhlZFtdICR2YWx1ZSwgbWl4ZWQgJG1pblZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGEgdmFsdWUgaXMgYXQgbGVhc3QgYXMgYmlnIGFzIGEgZ2l2ZW4gbGltaXQgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsTWluQ291bnQoYXJyYXlbXXxDb3VudGFibGVbXXxSZXNvdXJjZUJ1bmRsZVtdfFNpbXBsZVhNTEVsZW1lbnRbXSAkY291bnRhYmxlLCBpbnQgJGNvdW50LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBjb3VudGFibGUgaGF2ZSBhdCBsZWFzdCAkY291bnQgZWxlbWVudHMgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsTWluTGVuZ3RoKG1peGVkW10gJHZhbHVlLCBpbnQgJG1pbkxlbmd0aCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsLCBzdHJpbmcgJGVuY29kaW5nID0gJ3V0ZjgnKSBBc3NlcnQgdGhhdCBhIHN0cmluZyBpcyBhdCBsZWFzdCAkbWluTGVuZ3RoIGNoYXJzIGxvbmcgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsTm9Db250ZW50KG1peGVkW10gJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGVtcHR5IGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbE5vdEJsYW5rKG1peGVkW10gJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIG5vdCBibGFuayBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxOb3RDb250YWlucyhtaXhlZFtdICRzdHJpbmcsIHN0cmluZyAkbmVlZGxlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwsIHN0cmluZyAkZW5jb2RpbmcgPSAndXRmOCcpIEFzc2VydCB0aGF0IHN0cmluZyBkb2VzIG5vdCBjb250YWlucyBhIHNlcXVlbmNlIG9mIGNoYXJzIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbE5vdEVtcHR5KG1peGVkW10gJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIG5vdCBlbXB0eSBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxOb3RFbXB0eUtleShtaXhlZFtdICR2YWx1ZSwgc3RyaW5nfGludCAka2V5LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGtleSBleGlzdHMgaW4gYW4gYXJyYXkvYXJyYXktYWNjZXNzaWJsZSBvYmplY3QgYW5kIGl0cyB2YWx1ZSBpcyBub3QgZW1wdHkgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsTm90RXEobWl4ZWRbXSAkdmFsdWUxLCBtaXhlZCAkdmFsdWUyLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHR3byB2YWx1ZXMgYXJlIG5vdCBlcXVhbCAodXNpbmcgPT0pIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbE5vdEluQXJyYXkobWl4ZWRbXSAkdmFsdWUsIGFycmF5ICRjaG9pY2VzLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIG5vdCBpbiBhcnJheSBvZiBjaG9pY2VzIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbE5vdElzSW5zdGFuY2VPZihtaXhlZFtdICR2YWx1ZSwgc3RyaW5nICRjbGFzc05hbWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgbm90IGluc3RhbmNlIG9mIGdpdmVuIGNsYXNzLW5hbWUgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsTm90TnVsbChtaXhlZFtdICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBub3QgbnVsbCBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxOb3RSZWdleChtaXhlZFtdICR2YWx1ZSwgc3RyaW5nICRwYXR0ZXJuLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGRvZXMgbm90IG1hdGNoIGEgcmVnZXggZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsTm90U2FtZShtaXhlZFtdICR2YWx1ZTEsIG1peGVkICR2YWx1ZTIsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdHdvIHZhbHVlcyBhcmUgbm90IHRoZSBzYW1lICh1c2luZyA9PT0pIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbE51bGwobWl4ZWRbXSAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgbnVsbCBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxOdW1lcmljKG1peGVkW10gJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIG51bWVyaWMgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsT2JqZWN0T3JDbGFzcyhtaXhlZFtdICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LCBvciBhIGNsYXNzIHRoYXQgZXhpc3RzIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbFBocFZlcnNpb24oc3RyaW5nW10gJG9wZXJhdG9yLCBtaXhlZCAkdmVyc2lvbiwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgb24gUEhQIHZlcnNpb24gZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsUHJvcGVydGllc0V4aXN0KG1peGVkW10gJHZhbHVlLCBhcnJheSAkcHJvcGVydGllcywgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0IG9yIGNsYXNzLCBhbmQgdGhhdCB0aGUgcHJvcGVydGllcyBhbGwgZXhpc3QgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsUHJvcGVydHlFeGlzdHMobWl4ZWRbXSAkdmFsdWUsIHN0cmluZyAkcHJvcGVydHksIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCBvciBjbGFzcywgYW5kIHRoYXQgdGhlIHByb3BlcnR5IGV4aXN0cyBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxSYW5nZShtaXhlZFtdICR2YWx1ZSwgbWl4ZWQgJG1pblZhbHVlLCBtaXhlZCAkbWF4VmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgaW4gcmFuZ2Ugb2YgbnVtYmVycyBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxSZWFkYWJsZShzdHJpbmdbXSAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIHZhbHVlIGlzIHNvbWV0aGluZyByZWFkYWJsZSBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxSZWdleChtaXhlZFtdICR2YWx1ZSwgc3RyaW5nICRwYXR0ZXJuLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIG1hdGNoZXMgYSByZWdleCBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxTYW1lKG1peGVkW10gJHZhbHVlLCBtaXhlZCAkdmFsdWUyLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHR3byB2YWx1ZXMgYXJlIHRoZSBzYW1lICh1c2luZyA9PT0pIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbFNhdGlzZnkobWl4ZWRbXSAkdmFsdWUsIGNhbGxhYmxlICRjYWxsYmFjaywgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgdmFsaWQgYWNjb3JkaW5nIHRvIGEgY2FsbGJhY2sgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsU2NhbGFyKG1peGVkW10gJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGEgUEhQIHNjYWxhciBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxTdGFydHNXaXRoKG1peGVkW10gJHN0cmluZywgc3RyaW5nICRuZWVkbGUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgc3RyaW5nICRlbmNvZGluZyA9ICd1dGY4JykgQXNzZXJ0IHRoYXQgc3RyaW5nIHN0YXJ0cyB3aXRoIGEgc2VxdWVuY2Ugb2YgY2hhcnMgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsU3RyaW5nKG1peGVkW10gJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGEgc3RyaW5nIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbFN1YmNsYXNzT2YobWl4ZWRbXSAkdmFsdWUsIHN0cmluZyAkY2xhc3NOYW1lLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIHN1YmNsYXNzIG9mIGdpdmVuIGNsYXNzLW5hbWUgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsVHJ1ZShtaXhlZFtdICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgdmFsdWUgaXMgYm9vbGVhbiBUcnVlIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbFVuaXF1ZVZhbHVlcyhhcnJheVtdICR2YWx1ZXMsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWVzIGluIGFycmF5IGFyZSB1bmlxdWUgKHVzaW5nIHN0cmljdCBlcXVhbGl0eSkgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsVXJsKG1peGVkW10gJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFuIFVSTCBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxVdWlkKHN0cmluZ1tdICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgdmFsaWQgVVVJRCBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxWZXJzaW9uKHN0cmluZ1tdICR2ZXJzaW9uMSwgc3RyaW5nICRvcGVyYXRvciwgc3RyaW5nICR2ZXJzaW9uMiwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgY29tcGFyaXNvbiBvZiB0d28gdmVyc2lvbnMgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsV3JpdGVhYmxlKHN0cmluZ1tdICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgdmFsdWUgaXMgc29tZXRoaW5nIHdyaXRlYWJsZSBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JBbG51bShtaXhlZHxudWxsICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbHBoYW51bWVyaWMgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JCYXNlNjQoc3RyaW5nfG51bGwgJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGEgY29uc3RhbnQgaXMgZGVmaW5lZCBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPckJldHdlZW4obWl4ZWR8bnVsbCAkdmFsdWUsIG1peGVkICRsb3dlckxpbWl0LCBtaXhlZCAkdXBwZXJMaW1pdCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBhIHZhbHVlIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiBhIGxvd2VyIGxpbWl0LCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGFuIHVwcGVyIGxpbWl0IG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yQmV0d2VlbkV4Y2x1c2l2ZShtaXhlZHxudWxsICR2YWx1ZSwgbWl4ZWQgJGxvd2VyTGltaXQsIG1peGVkICR1cHBlckxpbWl0LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGEgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIGEgbG93ZXIgbGltaXQsIGFuZCBsZXNzIHRoYW4gYW4gdXBwZXIgbGltaXQgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JCZXR3ZWVuTGVuZ3RoKG1peGVkfG51bGwgJHZhbHVlLCBpbnQgJG1pbkxlbmd0aCwgaW50ICRtYXhMZW5ndGgsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgc3RyaW5nICRlbmNvZGluZyA9ICd1dGY4JykgQXNzZXJ0IHRoYXQgc3RyaW5nIGxlbmd0aCBpcyBiZXR3ZWVuIG1pbiBhbmQgbWF4IGxlbmd0aHMgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JCb29sZWFuKG1peGVkfG51bGwgJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIHBocCBib29sZWFuIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yQ2hvaWNlKG1peGVkfG51bGwgJHZhbHVlLCBhcnJheSAkY2hvaWNlcywgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBpbiBhcnJheSBvZiBjaG9pY2VzIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yQ2hvaWNlc05vdEVtcHR5KGFycmF5fG51bGwgJHZhbHVlcywgYXJyYXkgJGNob2ljZXMsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgRGV0ZXJtaW5lcyBpZiB0aGUgdmFsdWVzIGFycmF5IGhhcyBldmVyeSBjaG9pY2UgYXMga2V5IGFuZCB0aGF0IHRoaXMgY2hvaWNlIGhhcyBjb250ZW50IG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yQ2xhc3NFeGlzdHMobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIGNsYXNzIGV4aXN0cyBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPckNvbnRhaW5zKG1peGVkfG51bGwgJHN0cmluZywgc3RyaW5nICRuZWVkbGUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgc3RyaW5nICRlbmNvZGluZyA9ICd1dGY4JykgQXNzZXJ0IHRoYXQgc3RyaW5nIGNvbnRhaW5zIGEgc2VxdWVuY2Ugb2YgY2hhcnMgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JDb3VudChhcnJheXxDb3VudGFibGV8UmVzb3VyY2VCdW5kbGV8U2ltcGxlWE1MRWxlbWVudHxudWxsICRjb3VudGFibGUsIGludCAkY291bnQsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIGNvdW50IG9mIGNvdW50YWJsZSBpcyBlcXVhbCB0byBjb3VudCBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPckRhdGUoc3RyaW5nfG51bGwgJHZhbHVlLCBzdHJpbmcgJGZvcm1hdCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBkYXRlIGlzIHZhbGlkIGFuZCBjb3JyZXNwb25kcyB0byB0aGUgZ2l2ZW4gZm9ybWF0IG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yRGVmaW5lZChtaXhlZHxudWxsICRjb25zdGFudCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBhIGNvbnN0YW50IGlzIGRlZmluZWQgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JEaWdpdChtaXhlZHxudWxsICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBWYWxpZGF0ZXMgaWYgYW4gaW50ZWdlciBvciBpbnRlZ2VyaXNoIGlzIGEgZGlnaXQgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JEaXJlY3Rvcnkoc3RyaW5nfG51bGwgJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGEgZGlyZWN0b3J5IGV4aXN0cyBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPckUxNjQoc3RyaW5nfG51bGwgJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBnaXZlbiBzdHJpbmcgaXMgYSB2YWxpZCBFMTY0IFBob25lIE51bWJlciBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPckVtYWlsKG1peGVkfG51bGwgJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFuIGVtYWlsIGFkZHJlc3MgKHVzaW5nIGlucHV0X2ZpbHRlci9GSUxURVJfVkFMSURBVEVfRU1BSUwpIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yRW5kc1dpdGgobWl4ZWR8bnVsbCAkc3RyaW5nLCBzdHJpbmcgJG5lZWRsZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsLCBzdHJpbmcgJGVuY29kaW5nID0gJ3V0ZjgnKSBBc3NlcnQgdGhhdCBzdHJpbmcgZW5kcyB3aXRoIGEgc2VxdWVuY2Ugb2YgY2hhcnMgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JFcShtaXhlZHxudWxsICR2YWx1ZSwgbWl4ZWQgJHZhbHVlMiwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0d28gdmFsdWVzIGFyZSBlcXVhbCAodXNpbmcgPT0pIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yRXFBcnJheVN1YnNldChtaXhlZHxudWxsICR2YWx1ZSwgbWl4ZWQgJHZhbHVlMiwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgYXJyYXkgY29udGFpbnMgdGhlIHN1YnNldCBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPckV4dGVuc2lvbkxvYWRlZChtaXhlZHxudWxsICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBleHRlbnNpb24gaXMgbG9hZGVkIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yRXh0ZW5zaW9uVmVyc2lvbihzdHJpbmd8bnVsbCAkZXh0ZW5zaW9uLCBzdHJpbmcgJG9wZXJhdG9yLCBtaXhlZCAkdmVyc2lvbiwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBleHRlbnNpb24gaXMgbG9hZGVkIGFuZCBhIHNwZWNpZmljIHZlcnNpb24gaXMgaW5zdGFsbGVkIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yRmFsc2UobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIHZhbHVlIGlzIGJvb2xlYW4gRmFsc2Ugb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JGaWxlKHN0cmluZ3xudWxsICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBhIGZpbGUgZXhpc3RzIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yRmxvYXQobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYSBwaHAgZmxvYXQgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JHcmVhdGVyT3JFcXVhbFRoYW4obWl4ZWR8bnVsbCAkdmFsdWUsIG1peGVkICRsaW1pdCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBEZXRlcm1pbmVzIGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIG9yIGVxdWFsIHRoYW4gZ2l2ZW4gbGltaXQgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JHcmVhdGVyVGhhbihtaXhlZHxudWxsICR2YWx1ZSwgbWl4ZWQgJGxpbWl0LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIERldGVybWluZXMgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBnaXZlbiBsaW1pdCBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPckltcGxlbWVudHNJbnRlcmZhY2UobWl4ZWR8bnVsbCAkY2xhc3MsIHN0cmluZyAkaW50ZXJmYWNlTmFtZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgY2xhc3MgaW1wbGVtZW50cyB0aGUgaW50ZXJmYWNlIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9ySW5BcnJheShtaXhlZHxudWxsICR2YWx1ZSwgYXJyYXkgJGNob2ljZXMsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgaW4gYXJyYXkgb2YgY2hvaWNlcy4gVGhpcyBpcyBhbiBhbGlhcyBvZiBBc3NlcnRpb246OmNob2ljZSgpIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9ySW50ZWdlcihtaXhlZHxudWxsICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhIHBocCBpbnRlZ2VyIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9ySW50ZWdlcmlzaChtaXhlZHxudWxsICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhIHBocCBpbnRlZ2VyJ2lzaCBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPckludGVyZmFjZUV4aXN0cyhtaXhlZHxudWxsICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgaW50ZXJmYWNlIGV4aXN0cyBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPcklwKHN0cmluZ3xudWxsICR2YWx1ZSwgaW50ICRmbGFnID0gbnVsbCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBJUHY0IG9yIElQdjYgYWRkcmVzcyBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPcklwdjQoc3RyaW5nfG51bGwgJHZhbHVlLCBpbnQgJGZsYWcgPSBudWxsLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFuIElQdjQgYWRkcmVzcyBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPcklwdjYoc3RyaW5nfG51bGwgJHZhbHVlLCBpbnQgJGZsYWcgPSBudWxsLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFuIElQdjYgYWRkcmVzcyBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPcklzQXJyYXkobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYW4gYXJyYXkgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JJc0FycmF5QWNjZXNzaWJsZShtaXhlZHxudWxsICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBhcnJheSBvciBhbiBhcnJheS1hY2Nlc3NpYmxlIG9iamVjdCBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPcklzQ2FsbGFibGUobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgRGV0ZXJtaW5lcyB0aGF0IHRoZSBwcm92aWRlZCB2YWx1ZSBpcyBjYWxsYWJsZSBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPcklzQ291bnRhYmxlKGFycmF5fENvdW50YWJsZXxSZXNvdXJjZUJ1bmRsZXxTaW1wbGVYTUxFbGVtZW50fG51bGwgJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGNvdW50YWJsZSBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPcklzSW5zdGFuY2VPZihtaXhlZHxudWxsICR2YWx1ZSwgc3RyaW5nICRjbGFzc05hbWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgaW5zdGFuY2Ugb2YgZ2l2ZW4gY2xhc3MtbmFtZSBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPcklzSnNvblN0cmluZyhtaXhlZHxudWxsICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgdmFsaWQganNvbiBzdHJpbmcgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JJc09iamVjdChtaXhlZHxudWxsICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBEZXRlcm1pbmVzIHRoYXQgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIGFuIG9iamVjdCBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPcklzUmVzb3VyY2UobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYSByZXNvdXJjZSBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPcklzVHJhdmVyc2FibGUobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYW4gYXJyYXkgb3IgYSB0cmF2ZXJzYWJsZSBvYmplY3Qgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JLZXlFeGlzdHMobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xpbnQgJGtleSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBrZXkgZXhpc3RzIGluIGFuIGFycmF5IG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yS2V5SXNzZXQobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xpbnQgJGtleSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBrZXkgZXhpc3RzIGluIGFuIGFycmF5L2FycmF5LWFjY2Vzc2libGUgb2JqZWN0IHVzaW5nIGlzc2V0KCkgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JLZXlOb3RFeGlzdHMobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xpbnQgJGtleSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBrZXkgZG9lcyBub3QgZXhpc3QgaW4gYW4gYXJyYXkgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JMZW5ndGgobWl4ZWR8bnVsbCAkdmFsdWUsIGludCAkbGVuZ3RoLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwsIHN0cmluZyAkZW5jb2RpbmcgPSAndXRmOCcpIEFzc2VydCB0aGF0IHN0cmluZyBoYXMgYSBnaXZlbiBsZW5ndGggb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JMZXNzT3JFcXVhbFRoYW4obWl4ZWR8bnVsbCAkdmFsdWUsIG1peGVkICRsaW1pdCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBEZXRlcm1pbmVzIGlmIHRoZSB2YWx1ZSBpcyBsZXNzIG9yIGVxdWFsIHRoYW4gZ2l2ZW4gbGltaXQgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JMZXNzVGhhbihtaXhlZHxudWxsICR2YWx1ZSwgbWl4ZWQgJGxpbWl0LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIERldGVybWluZXMgaWYgdGhlIHZhbHVlIGlzIGxlc3MgdGhhbiBnaXZlbiBsaW1pdCBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPck1heChtaXhlZHxudWxsICR2YWx1ZSwgbWl4ZWQgJG1heFZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGEgbnVtYmVyIGlzIHNtYWxsZXIgYXMgYSBnaXZlbiBsaW1pdCBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPck1heENvdW50KGFycmF5fENvdW50YWJsZXxSZXNvdXJjZUJ1bmRsZXxTaW1wbGVYTUxFbGVtZW50fG51bGwgJGNvdW50YWJsZSwgaW50ICRjb3VudCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgY291bnRhYmxlIGhhdmUgYXQgbW9zdCAkY291bnQgZWxlbWVudHMgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JNYXhMZW5ndGgobWl4ZWR8bnVsbCAkdmFsdWUsIGludCAkbWF4TGVuZ3RoLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwsIHN0cmluZyAkZW5jb2RpbmcgPSAndXRmOCcpIEFzc2VydCB0aGF0IHN0cmluZyB2YWx1ZSBpcyBub3QgbG9uZ2VyIHRoYW4gJG1heExlbmd0aCBjaGFycyBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPck1ldGhvZEV4aXN0cyhzdHJpbmd8bnVsbCAkdmFsdWUsIG1peGVkICRvYmplY3QsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgRGV0ZXJtaW5lcyB0aGF0IHRoZSBuYW1lZCBtZXRob2QgaXMgZGVmaW5lZCBpbiB0aGUgcHJvdmlkZWQgb2JqZWN0IG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yTWluKG1peGVkfG51bGwgJHZhbHVlLCBtaXhlZCAkbWluVmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgYSB2YWx1ZSBpcyBhdCBsZWFzdCBhcyBiaWcgYXMgYSBnaXZlbiBsaW1pdCBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPck1pbkNvdW50KGFycmF5fENvdW50YWJsZXxSZXNvdXJjZUJ1bmRsZXxTaW1wbGVYTUxFbGVtZW50fG51bGwgJGNvdW50YWJsZSwgaW50ICRjb3VudCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgY291bnRhYmxlIGhhdmUgYXQgbGVhc3QgJGNvdW50IGVsZW1lbnRzIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yTWluTGVuZ3RoKG1peGVkfG51bGwgJHZhbHVlLCBpbnQgJG1pbkxlbmd0aCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsLCBzdHJpbmcgJGVuY29kaW5nID0gJ3V0ZjgnKSBBc3NlcnQgdGhhdCBhIHN0cmluZyBpcyBhdCBsZWFzdCAkbWluTGVuZ3RoIGNoYXJzIGxvbmcgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JOb0NvbnRlbnQobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgZW1wdHkgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JOb3RCbGFuayhtaXhlZHxudWxsICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBub3QgYmxhbmsgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JOb3RDb250YWlucyhtaXhlZHxudWxsICRzdHJpbmcsIHN0cmluZyAkbmVlZGxlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwsIHN0cmluZyAkZW5jb2RpbmcgPSAndXRmOCcpIEFzc2VydCB0aGF0IHN0cmluZyBkb2VzIG5vdCBjb250YWlucyBhIHNlcXVlbmNlIG9mIGNoYXJzIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yTm90RW1wdHkobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgbm90IGVtcHR5IG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yTm90RW1wdHlLZXkobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xpbnQgJGtleSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBrZXkgZXhpc3RzIGluIGFuIGFycmF5L2FycmF5LWFjY2Vzc2libGUgb2JqZWN0IGFuZCBpdHMgdmFsdWUgaXMgbm90IGVtcHR5IG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yTm90RXEobWl4ZWR8bnVsbCAkdmFsdWUxLCBtaXhlZCAkdmFsdWUyLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHR3byB2YWx1ZXMgYXJlIG5vdCBlcXVhbCAodXNpbmcgPT0pIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yTm90SW5BcnJheShtaXhlZHxudWxsICR2YWx1ZSwgYXJyYXkgJGNob2ljZXMsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgbm90IGluIGFycmF5IG9mIGNob2ljZXMgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JOb3RJc0luc3RhbmNlT2YobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZyAkY2xhc3NOYW1lLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIG5vdCBpbnN0YW5jZSBvZiBnaXZlbiBjbGFzcy1uYW1lIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yTm90TnVsbChtaXhlZHxudWxsICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBub3QgbnVsbCBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPck5vdFJlZ2V4KG1peGVkfG51bGwgJHZhbHVlLCBzdHJpbmcgJHBhdHRlcm4sIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgZG9lcyBub3QgbWF0Y2ggYSByZWdleCBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPck5vdFNhbWUobWl4ZWR8bnVsbCAkdmFsdWUxLCBtaXhlZCAkdmFsdWUyLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHR3byB2YWx1ZXMgYXJlIG5vdCB0aGUgc2FtZSAodXNpbmcgPT09KSBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPck51bGwobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgbnVsbCBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPck51bWVyaWMobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgbnVtZXJpYyBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPck9iamVjdE9yQ2xhc3MobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCwgb3IgYSBjbGFzcyB0aGF0IGV4aXN0cyBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPclBocFZlcnNpb24oc3RyaW5nfG51bGwgJG9wZXJhdG9yLCBtaXhlZCAkdmVyc2lvbiwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgb24gUEhQIHZlcnNpb24gb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JQcm9wZXJ0aWVzRXhpc3QobWl4ZWR8bnVsbCAkdmFsdWUsIGFycmF5ICRwcm9wZXJ0aWVzLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3Qgb3IgY2xhc3MsIGFuZCB0aGF0IHRoZSBwcm9wZXJ0aWVzIGFsbCBleGlzdCBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPclByb3BlcnR5RXhpc3RzKG1peGVkfG51bGwgJHZhbHVlLCBzdHJpbmcgJHByb3BlcnR5LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3Qgb3IgY2xhc3MsIGFuZCB0aGF0IHRoZSBwcm9wZXJ0eSBleGlzdHMgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JSYW5nZShtaXhlZHxudWxsICR2YWx1ZSwgbWl4ZWQgJG1pblZhbHVlLCBtaXhlZCAkbWF4VmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgaW4gcmFuZ2Ugb2YgbnVtYmVycyBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPclJlYWRhYmxlKHN0cmluZ3xudWxsICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgdmFsdWUgaXMgc29tZXRoaW5nIHJlYWRhYmxlIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yUmVnZXgobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZyAkcGF0dGVybiwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBtYXRjaGVzIGEgcmVnZXggb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JTYW1lKG1peGVkfG51bGwgJHZhbHVlLCBtaXhlZCAkdmFsdWUyLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHR3byB2YWx1ZXMgYXJlIHRoZSBzYW1lICh1c2luZyA9PT0pIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yU2F0aXNmeShtaXhlZHxudWxsICR2YWx1ZSwgY2FsbGFibGUgJGNhbGxiYWNrLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBwcm92aWRlZCB2YWx1ZSBpcyB2YWxpZCBhY2NvcmRpbmcgdG8gYSBjYWxsYmFjayBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPclNjYWxhcihtaXhlZHxudWxsICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhIFBIUCBzY2FsYXIgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JTdGFydHNXaXRoKG1peGVkfG51bGwgJHN0cmluZywgc3RyaW5nICRuZWVkbGUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgc3RyaW5nICRlbmNvZGluZyA9ICd1dGY4JykgQXNzZXJ0IHRoYXQgc3RyaW5nIHN0YXJ0cyB3aXRoIGEgc2VxdWVuY2Ugb2YgY2hhcnMgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JTdHJpbmcobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYSBzdHJpbmcgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JTdWJjbGFzc09mKG1peGVkfG51bGwgJHZhbHVlLCBzdHJpbmcgJGNsYXNzTmFtZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBzdWJjbGFzcyBvZiBnaXZlbiBjbGFzcy1uYW1lIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yVHJ1ZShtaXhlZHxudWxsICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgdmFsdWUgaXMgYm9vbGVhbiBUcnVlIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yVW5pcXVlVmFsdWVzKGFycmF5fG51bGwgJHZhbHVlcywgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZXMgaW4gYXJyYXkgYXJlIHVuaXF1ZSAodXNpbmcgc3RyaWN0IGVxdWFsaXR5KSBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPclVybChtaXhlZHxudWxsICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBVUkwgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JVdWlkKHN0cmluZ3xudWxsICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgdmFsaWQgVVVJRCBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPclZlcnNpb24oc3RyaW5nfG51bGwgJHZlcnNpb24xLCBzdHJpbmcgJG9wZXJhdG9yLCBzdHJpbmcgJHZlcnNpb24yLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCBjb21wYXJpc29uIG9mIHR3byB2ZXJzaW9ucyBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPcldyaXRlYWJsZShzdHJpbmd8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIHZhbHVlIGlzIHNvbWV0aGluZyB3cml0ZWFibGUgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICovCmNsYXNzIEFzc2VydGlvbgp7CiAgICBjb25zdCBJTlZBTElEX0ZMT0FUID0gOTsKICAgIGNvbnN0IElOVkFMSURfSU5URUdFUiA9IDEwOwogICAgY29uc3QgSU5WQUxJRF9ESUdJVCA9IDExOwogICAgY29uc3QgSU5WQUxJRF9JTlRFR0VSSVNIID0gMTI7CiAgICBjb25zdCBJTlZBTElEX0JPT0xFQU4gPSAxMzsKICAgIGNvbnN0IFZBTFVFX0VNUFRZID0gMTQ7CiAgICBjb25zdCBWQUxVRV9OVUxMID0gMTU7CiAgICBjb25zdCBWQUxVRV9OT1RfTlVMTCA9IDI1OwogICAgY29uc3QgSU5WQUxJRF9TVFJJTkcgPSAxNjsKICAgIGNvbnN0IElOVkFMSURfUkVHRVggPSAxNzsKICAgIGNvbnN0IElOVkFMSURfTUlOX0xFTkdUSCA9IDE4OwogICAgY29uc3QgSU5WQUxJRF9NQVhfTEVOR1RIID0gMTk7CiAgICBjb25zdCBJTlZBTElEX1NUUklOR19TVEFSVCA9IDIwOwogICAgY29uc3QgSU5WQUxJRF9TVFJJTkdfQ09OVEFJTlMgPSAyMTsKICAgIGNvbnN0IElOVkFMSURfQ0hPSUNFID0gMjI7CiAgICBjb25zdCBJTlZBTElEX05VTUVSSUMgPSAyMzsKICAgIGNvbnN0IElOVkFMSURfQVJSQVkgPSAyNDsKICAgIGNvbnN0IElOVkFMSURfS0VZX0VYSVNUUyA9IDI2OwogICAgY29uc3QgSU5WQUxJRF9OT1RfQkxBTksgPSAyNzsKICAgIGNvbnN0IElOVkFMSURfSU5TVEFOQ0VfT0YgPSAyODsKICAgIGNvbnN0IElOVkFMSURfU1VCQ0xBU1NfT0YgPSAyOTsKICAgIGNvbnN0IElOVkFMSURfUkFOR0UgPSAzMDsKICAgIGNvbnN0IElOVkFMSURfQUxOVU0gPSAzMTsKICAgIGNvbnN0IElOVkFMSURfVFJVRSA9IDMyOwogICAgY29uc3QgSU5WQUxJRF9FUSA9IDMzOwogICAgY29uc3QgSU5WQUxJRF9TQU1FID0gMzQ7CiAgICBjb25zdCBJTlZBTElEX01JTiA9IDM1OwogICAgY29uc3QgSU5WQUxJRF9NQVggPSAzNjsKICAgIGNvbnN0IElOVkFMSURfTEVOR1RIID0gMzc7CiAgICBjb25zdCBJTlZBTElEX0ZBTFNFID0gMzg7CiAgICBjb25zdCBJTlZBTElEX1NUUklOR19FTkQgPSAzOTsKICAgIGNvbnN0IElOVkFMSURfVVVJRCA9IDQwOwogICAgY29uc3QgSU5WQUxJRF9DT1VOVCA9IDQxOwogICAgY29uc3QgSU5WQUxJRF9OT1RfRVEgPSA0MjsKICAgIGNvbnN0IElOVkFMSURfTk9UX1NBTUUgPSA0MzsKICAgIGNvbnN0IElOVkFMSURfVFJBVkVSU0FCTEUgPSA0NDsKICAgIGNvbnN0IElOVkFMSURfQVJSQVlfQUNDRVNTSUJMRSA9IDQ1OwogICAgY29uc3QgSU5WQUxJRF9LRVlfSVNTRVQgPSA0NjsKICAgIGNvbnN0IElOVkFMSURfVkFMVUVfSU5fQVJSQVkgPSA0NzsKICAgIGNvbnN0IElOVkFMSURfRTE2NCA9IDQ4OwogICAgY29uc3QgSU5WQUxJRF9CQVNFNjQgPSA0OTsKICAgIGNvbnN0IElOVkFMSURfTk9UX1JFR0VYID0gNTA7CiAgICBjb25zdCBJTlZBTElEX0RJUkVDVE9SWSA9IDEwMTsKICAgIGNvbnN0IElOVkFMSURfRklMRSA9IDEwMjsKICAgIGNvbnN0IElOVkFMSURfUkVBREFCTEUgPSAxMDM7CiAgICBjb25zdCBJTlZBTElEX1dSSVRFQUJMRSA9IDEwNDsKICAgIGNvbnN0IElOVkFMSURfQ0xBU1MgPSAxMDU7CiAgICBjb25zdCBJTlZBTElEX0lOVEVSRkFDRSA9IDEwNjsKICAgIGNvbnN0IElOVkFMSURfRklMRV9OT1RfRVhJU1RTID0gMTA3OwogICAgY29uc3QgSU5WQUxJRF9FTUFJTCA9IDIwMTsKICAgIGNvbnN0IElOVEVSRkFDRV9OT1RfSU1QTEVNRU5URUQgPSAyMDI7CiAgICBjb25zdCBJTlZBTElEX1VSTCA9IDIwMzsKICAgIGNvbnN0IElOVkFMSURfTk9UX0lOU1RBTkNFX09GID0gMjA0OwogICAgY29uc3QgVkFMVUVfTk9UX0VNUFRZID0gMjA1OwogICAgY29uc3QgSU5WQUxJRF9KU09OX1NUUklORyA9IDIwNjsKICAgIGNvbnN0IElOVkFMSURfT0JKRUNUID0gMjA3OwogICAgY29uc3QgSU5WQUxJRF9NRVRIT0QgPSAyMDg7CiAgICBjb25zdCBJTlZBTElEX1NDQUxBUiA9IDIwOTsKICAgIGNvbnN0IElOVkFMSURfTEVTUyA9IDIxMDsKICAgIGNvbnN0IElOVkFMSURfTEVTU19PUl9FUVVBTCA9IDIxMTsKICAgIGNvbnN0IElOVkFMSURfR1JFQVRFUiA9IDIxMjsKICAgIGNvbnN0IElOVkFMSURfR1JFQVRFUl9PUl9FUVVBTCA9IDIxMzsKICAgIGNvbnN0IElOVkFMSURfREFURSA9IDIxNDsKICAgIGNvbnN0IElOVkFMSURfQ0FMTEFCTEUgPSAyMTU7CiAgICBjb25zdCBJTlZBTElEX0tFWV9OT1RfRVhJU1RTID0gMjE2OwogICAgY29uc3QgSU5WQUxJRF9TQVRJU0ZZID0gMjE3OwogICAgY29uc3QgSU5WQUxJRF9JUCA9IDIxODsKICAgIGNvbnN0IElOVkFMSURfQkVUV0VFTiA9IDIxOTsKICAgIGNvbnN0IElOVkFMSURfQkVUV0VFTl9FWENMVVNJVkUgPSAyMjA7CiAgICBjb25zdCBJTlZBTElEX0VYVEVOU0lPTiA9IDIyMjsKICAgIGNvbnN0IElOVkFMSURfQ09OU1RBTlQgPSAyMjE7CiAgICBjb25zdCBJTlZBTElEX1ZFUlNJT04gPSAyMjM7CiAgICBjb25zdCBJTlZBTElEX1BST1BFUlRZID0gMjI0OwogICAgY29uc3QgSU5WQUxJRF9SRVNPVVJDRSA9IDIyNTsKICAgIGNvbnN0IElOVkFMSURfQ09VTlRBQkxFID0gMjI2OwogICAgY29uc3QgSU5WQUxJRF9NSU5fQ09VTlQgPSAyMjc7CiAgICBjb25zdCBJTlZBTElEX01BWF9DT1VOVCA9IDIyODsKICAgIGNvbnN0IElOVkFMSURfU1RSSU5HX05PVF9DT05UQUlOUyA9IDIyOTsKICAgIGNvbnN0IElOVkFMSURfVU5JUVVFX1ZBTFVFUyA9IDIzMDsKCiAgICAvKioKICAgICAqIEV4Y2VwdGlvbiB0byB0aHJvdyB3aGVuIGFuIGFzc2VydGlvbiBmYWlsZWQuCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyAkZXhjZXB0aW9uQ2xhc3MgPSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb246OmNsYXNzOwoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdHdvIHZhbHVlcyBhcmUgZXF1YWwgKHVzaW5nID09KS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlMgogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBlcSgkdmFsdWUsICR2YWx1ZTIsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoJHZhbHVlICE9ICR2YWx1ZTIpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIGRvZXMgbm90IGVxdWFsIGV4cGVjdGVkIHZhbHVlICIlcyIuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlMikKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9FUSwgJHByb3BlcnR5UGF0aCwgWydleHBlY3RlZCcgPT4gJHZhbHVlMl0pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB0aGUgYXJyYXkgY29udGFpbnMgdGhlIHN1YnNldC4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlMgogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBlcUFycmF5U3Vic2V0KCR2YWx1ZSwgJHZhbHVlMiwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIHN0YXRpYzo6aXNBcnJheSgkdmFsdWUsICRtZXNzYWdlLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICBzdGF0aWM6OmlzQXJyYXkoJHZhbHVlMiwgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgpOwoKICAgICAgICAkcGF0Y2hlZCA9IFxhcnJheV9yZXBsYWNlX3JlY3Vyc2l2ZSgkdmFsdWUsICR2YWx1ZTIpOwogICAgICAgIHN0YXRpYzo6ZXEoJHBhdGNoZWQsICR2YWx1ZSwgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgpOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHR3byB2YWx1ZXMgYXJlIHRoZSBzYW1lICh1c2luZyA9PT0pLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUyCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLXRlbXBsYXRlIEV4cGVjdGVkVHlwZQogICAgICogQHBzYWxtLXBhcmFtIEV4cGVjdGVkVHlwZSAkdmFsdWUyCiAgICAgKiBAcHNhbG0tYXNzZXJ0ID1FeHBlY3RlZFR5cGUgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzYW1lKCR2YWx1ZSwgJHZhbHVlMiwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmICgkdmFsdWUgIT09ICR2YWx1ZTIpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIGlzIG5vdCB0aGUgc2FtZSBhcyBleHBlY3RlZCB2YWx1ZSAiJXMiLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZTIpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfU0FNRSwgJHByb3BlcnR5UGF0aCwgWydleHBlY3RlZCcgPT4gJHZhbHVlMl0pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB0d28gdmFsdWVzIGFyZSBub3QgZXF1YWwgKHVzaW5nID09KS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlMQogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZTIKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbm90RXEoJHZhbHVlMSwgJHZhbHVlMiwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmICgkdmFsdWUxID09ICR2YWx1ZTIpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIHdhcyBub3QgZXhwZWN0ZWQgdG8gYmUgZXF1YWwgdG8gdmFsdWUgIiVzIi4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZTEpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlMikKICAgICAgICAgICAgKTsKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlMSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9OT1RfRVEsICRwcm9wZXJ0eVBhdGgsIFsnZXhwZWN0ZWQnID0+ICR2YWx1ZTJdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdHdvIHZhbHVlcyBhcmUgbm90IHRoZSBzYW1lICh1c2luZyA9PT0pLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUxCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlMgogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByb3BlcnR5UGF0aAogICAgICoKICAgICAqIEBwc2FsbS10ZW1wbGF0ZSBFeHBlY3RlZFR5cGUKICAgICAqIEBwc2FsbS1wYXJhbSBFeHBlY3RlZFR5cGUgJHZhbHVlMgogICAgICogQHBzYWxtLWFzc2VydCAhPUV4cGVjdGVkVHlwZSAkdmFsdWUxCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBub3RTYW1lKCR2YWx1ZTEsICR2YWx1ZTIsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoJHZhbHVlMSA9PT0gJHZhbHVlMikgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgd2FzIG5vdCBleHBlY3RlZCB0byBiZSB0aGUgc2FtZSBhcyB2YWx1ZSAiJXMiLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlMSksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUyKQogICAgICAgICAgICApOwogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUxLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX05PVF9TQU1FLCAkcHJvcGVydHlQYXRoLCBbJ2V4cGVjdGVkJyA9PiAkdmFsdWUyXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHZhbHVlIGlzIG5vdCBpbiBhcnJheSBvZiBjaG9pY2VzLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbm90SW5BcnJheSgkdmFsdWUsIGFycmF5ICRjaG9pY2VzLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKHRydWUgPT09IFxpbl9hcnJheSgkdmFsdWUsICRjaG9pY2VzKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgd2FzIG5vdCBleHBlY3RlZCB0byBiZSBhbiBlbGVtZW50IG9mIHRoZSB2YWx1ZXM6ICVzJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJGNob2ljZXMpCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9WQUxVRV9JTl9BUlJBWSwgJHByb3BlcnR5UGF0aCwgWydjaG9pY2VzJyA9PiAkY2hvaWNlc10pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhIHBocCBpbnRlZ2VyLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwcm9wZXJ0eVBhdGgKICAgICAqCiAgICAgKiBAcHNhbG0tYXNzZXJ0IGludCAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGludGVnZXIoJHZhbHVlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCFcaXNfaW50KCR2YWx1ZSkpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIGlzIG5vdCBhbiBpbnRlZ2VyLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0lOVEVHRVIsICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhIHBocCBmbG9hdC4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCBmbG9hdCAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZsb2F0KCR2YWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmICghXGlzX2Zsb2F0KCR2YWx1ZSkpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIGlzIG5vdCBhIGZsb2F0LicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0ZMT0FULCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogVmFsaWRhdGVzIGlmIGFuIGludGVnZXIgb3IgaW50ZWdlcmlzaCBpcyBhIGRpZ2l0LgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwcm9wZXJ0eVBhdGgKICAgICAqCiAgICAgKiBAcHNhbG0tYXNzZXJ0ID1udW1lcmljICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGlnaXQoJHZhbHVlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCFcY3R5cGVfZGlnaXQoKHN0cmluZykkdmFsdWUpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBpcyBub3QgYSBkaWdpdC4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9ESUdJVCwgJHByb3BlcnR5UGF0aCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHZhbHVlIGlzIGEgcGhwIGludGVnZXInaXNoLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaW50ZWdlcmlzaCgkdmFsdWUsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoCiAgICAgICAgICAgIFxpc19yZXNvdXJjZSgkdmFsdWUpIHx8CiAgICAgICAgICAgIFxpc19vYmplY3QoJHZhbHVlKSB8fAogICAgICAgICAgICBcaXNfYm9vbCgkdmFsdWUpIHx8CiAgICAgICAgICAgIFxpc19udWxsKCR2YWx1ZSkgfHwKICAgICAgICAgICAgXGlzX2FycmF5KCR2YWx1ZSkgfHwKICAgICAgICAgICAgKFxpc19zdHJpbmcoJHZhbHVlKSAmJiAnJyA9PSAkdmFsdWUpIHx8CiAgICAgICAgICAgICgKICAgICAgICAgICAgICAgIFxzdHJ2YWwoXGludHZhbCgkdmFsdWUpKSAhPT0gXHN0cnZhbCgkdmFsdWUpICYmCiAgICAgICAgICAgICAgICBcc3RydmFsKFxpbnR2YWwoJHZhbHVlKSkgIT09IFxzdHJ2YWwoXGx0cmltKCR2YWx1ZSwgJzAnKSkgJiYKICAgICAgICAgICAgICAgICcnICE9PSBcc3RydmFsKFxpbnR2YWwoJHZhbHVlKSkgJiYKICAgICAgICAgICAgICAgICcnICE9PSBcc3RydmFsKFxsdHJpbSgkdmFsdWUsICcwJykpCiAgICAgICAgICAgICkKICAgICAgICApIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIGlzIG5vdCBhbiBpbnRlZ2VyIG9yIGEgbnVtYmVyIGNhc3RhYmxlIHRvIGludGVnZXIuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfSU5URUdFUklTSCwgJHByb3BlcnR5UGF0aCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHZhbHVlIGlzIHBocCBib29sZWFuLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwcm9wZXJ0eVBhdGgKICAgICAqCiAgICAgKiBAcHNhbG0tYXNzZXJ0IGJvb2wgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBib29sZWFuKCR2YWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmICghXGlzX2Jvb2woJHZhbHVlKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgaXMgbm90IGEgYm9vbGVhbi4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9CT09MRUFOLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYSBQSFAgc2NhbGFyLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwcm9wZXJ0eVBhdGgKICAgICAqCiAgICAgKiBAcHNhbG0tYXNzZXJ0IHNjYWxhciAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNjYWxhcigkdmFsdWUsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoIVxpc19zY2FsYXIoJHZhbHVlKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgaXMgbm90IGEgc2NhbGFyLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX1NDQUxBUiwgJHByb3BlcnR5UGF0aCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHZhbHVlIGlzIG5vdCBlbXB0eS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCAhZW1wdHkgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBub3RFbXB0eSgkdmFsdWUsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoZW1wdHkoJHZhbHVlKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgaXMgZW1wdHksIGJ1dCBub24gZW1wdHkgdmFsdWUgd2FzIGV4cGVjdGVkLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpWQUxVRV9FTVBUWSwgJHByb3BlcnR5UGF0aCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHZhbHVlIGlzIGVtcHR5LgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwcm9wZXJ0eVBhdGgKICAgICAqCiAgICAgKiBAcHNhbG0tYXNzZXJ0IGVtcHR5ICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbm9Db250ZW50KCR2YWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmICghZW1wdHkoJHZhbHVlKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgaXMgbm90IGVtcHR5LCBidXQgZW1wdHkgdmFsdWUgd2FzIGV4cGVjdGVkLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpWQUxVRV9OT1RfRU1QVFksICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBudWxsLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwcm9wZXJ0eVBhdGgKICAgICAqCiAgICAgKiBAcHNhbG0tYXNzZXJ0IG51bGwgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbnVsbCgkdmFsdWUsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAobnVsbCAhPT0gJHZhbHVlKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBpcyBub3QgbnVsbCwgYnV0IG51bGwgdmFsdWUgd2FzIGV4cGVjdGVkLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpWQUxVRV9OT1RfTlVMTCwgJHByb3BlcnR5UGF0aCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHZhbHVlIGlzIG5vdCBudWxsLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwcm9wZXJ0eVBhdGgKICAgICAqCiAgICAgKiBAcHNhbG0tYXNzZXJ0ICFudWxsICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbm90TnVsbCgkdmFsdWUsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJHZhbHVlKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBpcyBudWxsLCBidXQgbm9uIG51bGwgdmFsdWUgd2FzIGV4cGVjdGVkLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpWQUxVRV9OVUxMLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYSBzdHJpbmcuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByb3BlcnR5UGF0aAogICAgICoKICAgICAqIEBwc2FsbS1hc3NlcnQgc3RyaW5nICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RyaW5nKCR2YWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKQogICAgewogICAgICAgIGlmICghXGlzX3N0cmluZygkdmFsdWUpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBleHBlY3RlZCB0byBiZSBzdHJpbmcsIHR5cGUgJXMgZ2l2ZW4uJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpLAogICAgICAgICAgICAgICAgXGdldHR5cGUoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX1NUUklORywgJHByb3BlcnR5UGF0aCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHZhbHVlIG1hdGNoZXMgYSByZWdleC4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXR0ZXJuCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCA9c3RyaW5nICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVnZXgoJHZhbHVlLCAkcGF0dGVybiwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIHN0YXRpYzo6c3RyaW5nKCR2YWx1ZSwgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgpOwoKICAgICAgICBpZiAoIVxwcmVnX21hdGNoKCRwYXR0ZXJuLCAkdmFsdWUpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBkb2VzIG5vdCBtYXRjaCBleHByZXNzaW9uLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX1JFR0VYLCAkcHJvcGVydHlQYXRoLCBbJ3BhdHRlcm4nID0+ICRwYXR0ZXJuXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHZhbHVlIGRvZXMgbm90IG1hdGNoIGEgcmVnZXguCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZyAkcGF0dGVybgogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByb3BlcnR5UGF0aAogICAgICoKICAgICAqIEBwc2FsbS1hc3NlcnQgIT1zdHJpbmcgJHZhbHVlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBub3RSZWdleCgkdmFsdWUsICRwYXR0ZXJuLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgc3RhdGljOjpzdHJpbmcoJHZhbHVlLCAkbWVzc2FnZSwgJHByb3BlcnR5UGF0aCk7CgogICAgICAgIGlmIChccHJlZ19tYXRjaCgkcGF0dGVybiwgJHZhbHVlKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgbWF0Y2hlcyBleHByZXNzaW9uLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX05PVF9SRUdFWCwgJHByb3BlcnR5UGF0aCwgWydwYXR0ZXJuJyA9PiAkcGF0dGVybl0pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCBzdHJpbmcgaGFzIGEgZ2l2ZW4gbGVuZ3RoLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBpbnQgJGxlbmd0aAogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByb3BlcnR5UGF0aAogICAgICogQHBhcmFtIHN0cmluZyAkZW5jb2RpbmcKICAgICAqCiAgICAgKiBAcHNhbG0tYXNzZXJ0ID1zdHJpbmcgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsZW5ndGgoJHZhbHVlLCAkbGVuZ3RoLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwsICRlbmNvZGluZyA9ICd1dGY4Jyk6IGJvb2wKICAgIHsKICAgICAgICBzdGF0aWM6OnN0cmluZygkdmFsdWUsICRtZXNzYWdlLCAkcHJvcGVydHlQYXRoKTsKCiAgICAgICAgaWYgKFxtYl9zdHJsZW4oJHZhbHVlLCAkZW5jb2RpbmcpICE9PSAkbGVuZ3RoKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBoYXMgdG8gYmUgJWQgZXhhY3RseSBjaGFyYWN0ZXJzIGxvbmcsIGJ1dCBsZW5ndGggaXMgJWQuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpLAogICAgICAgICAgICAgICAgJGxlbmd0aCwKICAgICAgICAgICAgICAgIFxtYl9zdHJsZW4oJHZhbHVlLCAkZW5jb2RpbmcpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfTEVOR1RILCAkcHJvcGVydHlQYXRoLCBbJ2xlbmd0aCcgPT4gJGxlbmd0aCwgJ2VuY29kaW5nJyA9PiAkZW5jb2RpbmddKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgYSBzdHJpbmcgaXMgYXQgbGVhc3QgJG1pbkxlbmd0aCBjaGFycyBsb25nLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBpbnQgJG1pbkxlbmd0aAogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByb3BlcnR5UGF0aAogICAgICogQHBhcmFtIHN0cmluZyAkZW5jb2RpbmcKICAgICAqCiAgICAgKiBAcHNhbG0tYXNzZXJ0ID1zdHJpbmcgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtaW5MZW5ndGgoJHZhbHVlLCAkbWluTGVuZ3RoLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwsICRlbmNvZGluZyA9ICd1dGY4Jyk6IGJvb2wKICAgIHsKICAgICAgICBzdGF0aWM6OnN0cmluZygkdmFsdWUsICRtZXNzYWdlLCAkcHJvcGVydHlQYXRoKTsKCiAgICAgICAgaWYgKFxtYl9zdHJsZW4oJHZhbHVlLCAkZW5jb2RpbmcpIDwgJG1pbkxlbmd0aCkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgaXMgdG9vIHNob3J0LCBpdCBzaG91bGQgaGF2ZSBhdCBsZWFzdCAlZCBjaGFyYWN0ZXJzLCBidXQgb25seSBoYXMgJWQgY2hhcmFjdGVycy4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSksCiAgICAgICAgICAgICAgICAkbWluTGVuZ3RoLAogICAgICAgICAgICAgICAgXG1iX3N0cmxlbigkdmFsdWUsICRlbmNvZGluZykKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9NSU5fTEVOR1RILCAkcHJvcGVydHlQYXRoLCBbJ21pbl9sZW5ndGgnID0+ICRtaW5MZW5ndGgsICdlbmNvZGluZycgPT4gJGVuY29kaW5nXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHN0cmluZyB2YWx1ZSBpcyBub3QgbG9uZ2VyIHRoYW4gJG1heExlbmd0aCBjaGFycy4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gaW50ICRtYXhMZW5ndGgKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwcm9wZXJ0eVBhdGgKICAgICAqIEBwYXJhbSBzdHJpbmcgJGVuY29kaW5nCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCA9c3RyaW5nICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWF4TGVuZ3RoKCR2YWx1ZSwgJG1heExlbmd0aCwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsLCAkZW5jb2RpbmcgPSAndXRmOCcpOiBib29sCiAgICB7CiAgICAgICAgc3RhdGljOjpzdHJpbmcoJHZhbHVlLCAkbWVzc2FnZSwgJHByb3BlcnR5UGF0aCk7CgogICAgICAgIGlmIChcbWJfc3RybGVuKCR2YWx1ZSwgJGVuY29kaW5nKSA+ICRtYXhMZW5ndGgpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIGlzIHRvbyBsb25nLCBpdCBzaG91bGQgaGF2ZSBubyBtb3JlIHRoYW4gJWQgY2hhcmFjdGVycywgYnV0IGhhcyAlZCBjaGFyYWN0ZXJzLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKSwKICAgICAgICAgICAgICAgICRtYXhMZW5ndGgsCiAgICAgICAgICAgICAgICBcbWJfc3RybGVuKCR2YWx1ZSwgJGVuY29kaW5nKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX01BWF9MRU5HVEgsICRwcm9wZXJ0eVBhdGgsIFsnbWF4X2xlbmd0aCcgPT4gJG1heExlbmd0aCwgJ2VuY29kaW5nJyA9PiAkZW5jb2RpbmddKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgc3RyaW5nIGxlbmd0aCBpcyBiZXR3ZWVuIG1pbiBhbmQgbWF4IGxlbmd0aHMuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIGludCAkbWluTGVuZ3RoCiAgICAgKiBAcGFyYW0gaW50ICRtYXhMZW5ndGgKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwcm9wZXJ0eVBhdGgKICAgICAqIEBwYXJhbSBzdHJpbmcgJGVuY29kaW5nCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCA9c3RyaW5nICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYmV0d2Vlbkxlbmd0aCgkdmFsdWUsICRtaW5MZW5ndGgsICRtYXhMZW5ndGgsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgJGVuY29kaW5nID0gJ3V0ZjgnKTogYm9vbAogICAgewogICAgICAgIHN0YXRpYzo6c3RyaW5nKCR2YWx1ZSwgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIHN0YXRpYzo6bWluTGVuZ3RoKCR2YWx1ZSwgJG1pbkxlbmd0aCwgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgsICRlbmNvZGluZyk7CiAgICAgICAgc3RhdGljOjptYXhMZW5ndGgoJHZhbHVlLCAkbWF4TGVuZ3RoLCAkbWVzc2FnZSwgJHByb3BlcnR5UGF0aCwgJGVuY29kaW5nKTsKCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCBzdHJpbmcgc3RhcnRzIHdpdGggYSBzZXF1ZW5jZSBvZiBjaGFycy4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHN0cmluZwogICAgICogQHBhcmFtIHN0cmluZyAkbmVlZGxlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKiBAcGFyYW0gc3RyaW5nICRlbmNvZGluZwogICAgICoKICAgICAqIEBwc2FsbS1hc3NlcnQgPXN0cmluZyAkc3RyaW5nCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdGFydHNXaXRoKCRzdHJpbmcsICRuZWVkbGUsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgJGVuY29kaW5nID0gJ3V0ZjgnKTogYm9vbAogICAgewogICAgICAgIHN0YXRpYzo6c3RyaW5nKCRzdHJpbmcsICRtZXNzYWdlLCAkcHJvcGVydHlQYXRoKTsKCiAgICAgICAgaWYgKDAgIT09IFxtYl9zdHJwb3MoJHN0cmluZywgJG5lZWRsZSwgMCwgJGVuY29kaW5nKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgZG9lcyBub3Qgc3RhcnQgd2l0aCAiJXMiLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHN0cmluZyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkbmVlZGxlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHN0cmluZywgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9TVFJJTkdfU1RBUlQsICRwcm9wZXJ0eVBhdGgsIFsnbmVlZGxlJyA9PiAkbmVlZGxlLCAnZW5jb2RpbmcnID0+ICRlbmNvZGluZ10pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCBzdHJpbmcgZW5kcyB3aXRoIGEgc2VxdWVuY2Ugb2YgY2hhcnMuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRzdHJpbmcKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5lZWRsZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByb3BlcnR5UGF0aAogICAgICogQHBhcmFtIHN0cmluZyAkZW5jb2RpbmcKICAgICAqCiAgICAgKiBAcHNhbG0tYXNzZXJ0ID1zdHJpbmcgJHN0cmluZwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZW5kc1dpdGgoJHN0cmluZywgJG5lZWRsZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsLCAkZW5jb2RpbmcgPSAndXRmOCcpOiBib29sCiAgICB7CiAgICAgICAgc3RhdGljOjpzdHJpbmcoJHN0cmluZywgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgpOwoKICAgICAgICAkc3RyaW5nUG9zaXRpb24gPSBcbWJfc3RybGVuKCRzdHJpbmcsICRlbmNvZGluZykgLSBcbWJfc3RybGVuKCRuZWVkbGUsICRlbmNvZGluZyk7CgogICAgICAgIGlmIChcbWJfc3Rycmlwb3MoJHN0cmluZywgJG5lZWRsZSwgMCwgJGVuY29kaW5nKSAhPT0gJHN0cmluZ1Bvc2l0aW9uKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBkb2VzIG5vdCBlbmQgd2l0aCAiJXMiLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHN0cmluZyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkbmVlZGxlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHN0cmluZywgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9TVFJJTkdfRU5ELCAkcHJvcGVydHlQYXRoLCBbJ25lZWRsZScgPT4gJG5lZWRsZSwgJ2VuY29kaW5nJyA9PiAkZW5jb2RpbmddKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgc3RyaW5nIGNvbnRhaW5zIGEgc2VxdWVuY2Ugb2YgY2hhcnMuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRzdHJpbmcKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5lZWRsZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByb3BlcnR5UGF0aAogICAgICogQHBhcmFtIHN0cmluZyAkZW5jb2RpbmcKICAgICAqCiAgICAgKiBAcHNhbG0tYXNzZXJ0ID1zdHJpbmcgJHN0cmluZwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29udGFpbnMoJHN0cmluZywgJG5lZWRsZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsLCAkZW5jb2RpbmcgPSAndXRmOCcpOiBib29sCiAgICB7CiAgICAgICAgc3RhdGljOjpzdHJpbmcoJHN0cmluZywgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgpOwoKICAgICAgICBpZiAoZmFsc2UgPT09IFxtYl9zdHJwb3MoJHN0cmluZywgJG5lZWRsZSwgMCwgJGVuY29kaW5nKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgZG9lcyBub3QgY29udGFpbiAiJXMiLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHN0cmluZyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkbmVlZGxlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHN0cmluZywgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9TVFJJTkdfQ09OVEFJTlMsICRwcm9wZXJ0eVBhdGgsIFsnbmVlZGxlJyA9PiAkbmVlZGxlLCAnZW5jb2RpbmcnID0+ICRlbmNvZGluZ10pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCBzdHJpbmcgZG9lcyBub3QgY29udGFpbnMgYSBzZXF1ZW5jZSBvZiBjaGFycy4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHN0cmluZwogICAgICogQHBhcmFtIHN0cmluZyAkbmVlZGxlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKiBAcGFyYW0gc3RyaW5nICRlbmNvZGluZwogICAgICoKICAgICAqIEBwc2FsbS1hc3NlcnQgPXN0cmluZyAkc3RyaW5nCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBub3RDb250YWlucygkc3RyaW5nLCAkbmVlZGxlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwsICRlbmNvZGluZyA9ICd1dGY4Jyk6IGJvb2wKICAgIHsKICAgICAgICBzdGF0aWM6OnN0cmluZygkc3RyaW5nLCAkbWVzc2FnZSwgJHByb3BlcnR5UGF0aCk7CgogICAgICAgIGlmIChmYWxzZSAhPT0gXG1iX3N0cnBvcygkc3RyaW5nLCAkbmVlZGxlLCAwLCAkZW5jb2RpbmcpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBjb250YWlucyAiJXMiLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHN0cmluZyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkbmVlZGxlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHN0cmluZywgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9TVFJJTkdfTk9UX0NPTlRBSU5TLCAkcHJvcGVydHlQYXRoLCBbJ25lZWRsZScgPT4gJG5lZWRsZSwgJ2VuY29kaW5nJyA9PiAkZW5jb2RpbmddKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdmFsdWUgaXMgaW4gYXJyYXkgb2YgY2hvaWNlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNob2ljZSgkdmFsdWUsIGFycmF5ICRjaG9pY2VzLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCFcaW5fYXJyYXkoJHZhbHVlLCAkY2hvaWNlcywgdHJ1ZSkpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIGlzIG5vdCBhbiBlbGVtZW50IG9mIHRoZSB2YWxpZCB2YWx1ZXM6ICVzJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpLAogICAgICAgICAgICAgICAgXGltcGxvZGUoJywgJywgXGFycmF5X21hcChbXGdldF9jYWxsZWRfY2xhc3MoKSwgJ3N0cmluZ2lmeSddLCAkY2hvaWNlcykpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfQ0hPSUNFLCAkcHJvcGVydHlQYXRoLCBbJ2Nob2ljZXMnID0+ICRjaG9pY2VzXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHZhbHVlIGlzIGluIGFycmF5IG9mIGNob2ljZXMuCiAgICAgKgogICAgICogVGhpcyBpcyBhbiBhbGlhcyBvZiB7QHNlZSBjaG9pY2UoKX0uCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpbkFycmF5KCR2YWx1ZSwgYXJyYXkgJGNob2ljZXMsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gc3RhdGljOjpjaG9pY2UoJHZhbHVlLCAkY2hvaWNlcywgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgpOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdmFsdWUgaXMgbnVtZXJpYy4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCBudW1lcmljICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbnVtZXJpYygkdmFsdWUsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoIVxpc19udW1lcmljKCR2YWx1ZSkpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIGlzIG5vdCBudW1lcmljLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX05VTUVSSUMsICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhIHJlc291cmNlLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwcm9wZXJ0eVBhdGgKICAgICAqCiAgICAgKiBAcHNhbG0tYXNzZXJ0IHJlc291cmNlICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzUmVzb3VyY2UoJHZhbHVlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCFcaXNfcmVzb3VyY2UoJHZhbHVlKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgaXMgbm90IGEgcmVzb3VyY2UuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfUkVTT1VSQ0UsICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBhcnJheS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCBhcnJheSAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzQXJyYXkoJHZhbHVlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCFcaXNfYXJyYXkoJHZhbHVlKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgaXMgbm90IGFuIGFycmF5LicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0FSUkFZLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYW4gYXJyYXkgb3IgYSB0cmF2ZXJzYWJsZSBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByb3BlcnR5UGF0aAogICAgICoKICAgICAqIEBwc2FsbS1hc3NlcnQgaXRlcmFibGUgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc1RyYXZlcnNhYmxlKCR2YWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmICghXGlzX2FycmF5KCR2YWx1ZSkgJiYgISR2YWx1ZSBpbnN0YW5jZW9mIFRyYXZlcnNhYmxlKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBpcyBub3QgYW4gYXJyYXkgYW5kIGRvZXMgbm90IGltcGxlbWVudCBUcmF2ZXJzYWJsZS4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9UUkFWRVJTQUJMRSwgJHByb3BlcnR5UGF0aCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFuIGFycmF5IG9yIGFuIGFycmF5LWFjY2Vzc2libGUgb2JqZWN0LgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNBcnJheUFjY2Vzc2libGUoJHZhbHVlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCFcaXNfYXJyYXkoJHZhbHVlKSAmJiAhJHZhbHVlIGluc3RhbmNlb2YgQXJyYXlBY2Nlc3MpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIGlzIG5vdCBhbiBhcnJheSBhbmQgZG9lcyBub3QgaW1wbGVtZW50IEFycmF5QWNjZXNzLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0FSUkFZX0FDQ0VTU0lCTEUsICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBjb3VudGFibGUuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByb3BlcnR5UGF0aAogICAgICoKICAgICAqIEBwc2FsbS1hc3NlcnQgY291bnRhYmxlICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNDb3VudGFibGUoJHZhbHVlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKFxmdW5jdGlvbl9leGlzdHMoJ2lzX2NvdW50YWJsZScpKSB7CiAgICAgICAgICAgICRhc3NlcnQgPSBcaXNfY291bnRhYmxlKCR2YWx1ZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGFzc2VydCA9IFxpc19hcnJheSgkdmFsdWUpIHx8ICR2YWx1ZSBpbnN0YW5jZW9mIENvdW50YWJsZSB8fCAkdmFsdWUgaW5zdGFuY2VvZiBSZXNvdXJjZUJ1bmRsZSB8fCAkdmFsdWUgaW5zdGFuY2VvZiBTaW1wbGVYTUxFbGVtZW50OwogICAgICAgIH0KCiAgICAgICAgaWYgKCEkYXNzZXJ0KSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBpcyBub3QgYW4gYXJyYXkgYW5kIGRvZXMgbm90IGltcGxlbWVudCBDb3VudGFibGUuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfQ09VTlRBQkxFLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQga2V5IGV4aXN0cyBpbiBhbiBhcnJheS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGludCAka2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGtleUV4aXN0cygkdmFsdWUsICRrZXksICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBzdGF0aWM6OmlzQXJyYXkoJHZhbHVlLCAkbWVzc2FnZSwgJHByb3BlcnR5UGF0aCk7CgogICAgICAgIGlmICghXGFycmF5X2tleV9leGlzdHMoJGtleSwgJHZhbHVlKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ0FycmF5IGRvZXMgbm90IGNvbnRhaW4gYW4gZWxlbWVudCB3aXRoIGtleSAiJXMiJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgka2V5KQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0tFWV9FWElTVFMsICRwcm9wZXJ0eVBhdGgsIFsna2V5JyA9PiAka2V5XSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IGtleSBkb2VzIG5vdCBleGlzdCBpbiBhbiBhcnJheS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGludCAka2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGtleU5vdEV4aXN0cygkdmFsdWUsICRrZXksICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBzdGF0aWM6OmlzQXJyYXkoJHZhbHVlLCAkbWVzc2FnZSwgJHByb3BlcnR5UGF0aCk7CgogICAgICAgIGlmIChcYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkdmFsdWUpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnQXJyYXkgY29udGFpbnMgYW4gZWxlbWVudCB3aXRoIGtleSAiJXMiJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgka2V5KQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0tFWV9OT1RfRVhJU1RTLCAkcHJvcGVydHlQYXRoLCBbJ2tleScgPT4gJGtleV0pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB2YWx1ZXMgaW4gYXJyYXkgYXJlIHVuaXF1ZSAodXNpbmcgc3RyaWN0IGVxdWFsaXR5KS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkdmFsdWVzCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVuaXF1ZVZhbHVlcyhhcnJheSAkdmFsdWVzLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJHZhbHVlcyBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICBpZiAoXGFycmF5X3NlYXJjaCgkdmFsdWUsICR2YWx1ZXMsIHRydWUpICE9PSAka2V5KSB7CiAgICAgICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIG9jY3VycyBtb3JlIHRoYW4gb25jZSBpbiBhcnJheScpLAogICAgICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSkKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX1VOSVFVRV9WQUxVRVMsICRwcm9wZXJ0eVBhdGgsIFsndmFsdWUnID0+ICR2YWx1ZV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IGtleSBleGlzdHMgaW4gYW4gYXJyYXkvYXJyYXktYWNjZXNzaWJsZSBvYmplY3QgdXNpbmcgaXNzZXQoKS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGludCAka2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGtleUlzc2V0KCR2YWx1ZSwgJGtleSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIHN0YXRpYzo6aXNBcnJheUFjY2Vzc2libGUoJHZhbHVlLCAkbWVzc2FnZSwgJHByb3BlcnR5UGF0aCk7CgogICAgICAgIGlmICghaXNzZXQoJHZhbHVlWyRrZXldKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1RoZSBlbGVtZW50IHdpdGgga2V5ICIlcyIgd2FzIG5vdCBmb3VuZCcpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJGtleSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9LRVlfSVNTRVQsICRwcm9wZXJ0eVBhdGgsIFsna2V5JyA9PiAka2V5XSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IGtleSBleGlzdHMgaW4gYW4gYXJyYXkvYXJyYXktYWNjZXNzaWJsZSBvYmplY3QgYW5kIGl0cyB2YWx1ZSBpcyBub3QgZW1wdHkuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xpbnQgJGtleQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBub3RFbXB0eUtleSgkdmFsdWUsICRrZXksICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBzdGF0aWM6OmtleUlzc2V0KCR2YWx1ZSwgJGtleSwgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIHN0YXRpYzo6bm90RW1wdHkoJHZhbHVlWyRrZXldLCAkbWVzc2FnZSwgJHByb3BlcnR5UGF0aCk7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdmFsdWUgaXMgbm90IGJsYW5rLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbm90QmxhbmsoJHZhbHVlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKGZhbHNlID09PSAkdmFsdWUgfHwgKGVtcHR5KCR2YWx1ZSkgJiYgJzAnICE9ICR2YWx1ZSkgfHwgKFxpc19zdHJpbmcoJHZhbHVlKSAmJiAnJyA9PT0gXHRyaW0oJHZhbHVlKSkpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIGlzIGJsYW5rLCBidXQgd2FzIGV4cGVjdGVkIHRvIGNvbnRhaW4gYSB2YWx1ZS4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9OT1RfQkxBTkssICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBpbnN0YW5jZSBvZiBnaXZlbiBjbGFzcy1uYW1lLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzTmFtZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByb3BlcnR5UGF0aAogICAgICoKICAgICAqIEBwc2FsbS10ZW1wbGF0ZSBFeHBlY3RlZFR5cGUgb2Ygb2JqZWN0CiAgICAgKiBAcHNhbG0tcGFyYW0gY2xhc3Mtc3RyaW5nPEV4cGVjdGVkVHlwZT4gJGNsYXNzTmFtZQogICAgICogQHBzYWxtLWFzc2VydCBFeHBlY3RlZFR5cGUgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0luc3RhbmNlT2YoJHZhbHVlLCAkY2xhc3NOYW1lLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCEoJHZhbHVlIGluc3RhbmNlb2YgJGNsYXNzTmFtZSkpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdDbGFzcyAiJXMiIHdhcyBleHBlY3RlZCB0byBiZSBpbnN0YW5jZW9mIG9mICIlcyIgYnV0IGlzIG5vdC4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSksCiAgICAgICAgICAgICAgICAkY2xhc3NOYW1lCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfSU5TVEFOQ0VfT0YsICRwcm9wZXJ0eVBhdGgsIFsnY2xhc3MnID0+ICRjbGFzc05hbWVdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdmFsdWUgaXMgbm90IGluc3RhbmNlIG9mIGdpdmVuIGNsYXNzLW5hbWUuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZyAkY2xhc3NOYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLXRlbXBsYXRlIEV4cGVjdGVkVHlwZSBvZiBvYmplY3QKICAgICAqIEBwc2FsbS1wYXJhbSBjbGFzcy1zdHJpbmc8RXhwZWN0ZWRUeXBlPiAkY2xhc3NOYW1lCiAgICAgKiBAcHNhbG0tYXNzZXJ0ICFFeHBlY3RlZFR5cGUgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBub3RJc0luc3RhbmNlT2YoJHZhbHVlLCAkY2xhc3NOYW1lLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCR2YWx1ZSBpbnN0YW5jZW9mICRjbGFzc05hbWUpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdDbGFzcyAiJXMiIHdhcyBub3QgZXhwZWN0ZWQgdG8gYmUgaW5zdGFuY2VvZiBvZiAiJXMiLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKSwKICAgICAgICAgICAgICAgICRjbGFzc05hbWUKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9OT1RfSU5TVEFOQ0VfT0YsICRwcm9wZXJ0eVBhdGgsIFsnY2xhc3MnID0+ICRjbGFzc05hbWVdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdmFsdWUgaXMgc3ViY2xhc3Mgb2YgZ2l2ZW4gY2xhc3MtbmFtZS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjbGFzc05hbWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3ViY2xhc3NPZigkdmFsdWUsICRjbGFzc05hbWUsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoIVxpc19zdWJjbGFzc19vZigkdmFsdWUsICRjbGFzc05hbWUpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnQ2xhc3MgIiVzIiB3YXMgZXhwZWN0ZWQgdG8gYmUgc3ViY2xhc3Mgb2YgIiVzIi4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSksCiAgICAgICAgICAgICAgICAkY2xhc3NOYW1lCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfU1VCQ0xBU1NfT0YsICRwcm9wZXJ0eVBhdGgsIFsnY2xhc3MnID0+ICRjbGFzc05hbWVdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdmFsdWUgaXMgaW4gcmFuZ2Ugb2YgbnVtYmVycy4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG1pblZhbHVlCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG1heFZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCA9bnVtZXJpYyAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJhbmdlKCR2YWx1ZSwgJG1pblZhbHVlLCAkbWF4VmFsdWUsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBzdGF0aWM6Om51bWVyaWMoJHZhbHVlLCAkbWVzc2FnZSwgJHByb3BlcnR5UGF0aCk7CgogICAgICAgIGlmICgkdmFsdWUgPCAkbWluVmFsdWUgfHwgJHZhbHVlID4gJG1heFZhbHVlKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnTnVtYmVyICIlcyIgd2FzIGV4cGVjdGVkIHRvIGJlIGF0IGxlYXN0ICIlZCIgYW5kIGF0IG1vc3QgIiVkIi4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkbWluVmFsdWUpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJG1heFZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX1JBTkdFLCAkcHJvcGVydHlQYXRoLCBbJ21pbicgPT4gJG1pblZhbHVlLCAnbWF4JyA9PiAkbWF4VmFsdWVdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgYSB2YWx1ZSBpcyBhdCBsZWFzdCBhcyBiaWcgYXMgYSBnaXZlbiBsaW1pdC4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG1pblZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCA9bnVtZXJpYyAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1pbigkdmFsdWUsICRtaW5WYWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIHN0YXRpYzo6bnVtZXJpYygkdmFsdWUsICRtZXNzYWdlLCAkcHJvcGVydHlQYXRoKTsKCiAgICAgICAgaWYgKCR2YWx1ZSA8ICRtaW5WYWx1ZSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ051bWJlciAiJXMiIHdhcyBleHBlY3RlZCB0byBiZSBhdCBsZWFzdCAiJXMiLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCRtaW5WYWx1ZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9NSU4sICRwcm9wZXJ0eVBhdGgsIFsnbWluJyA9PiAkbWluVmFsdWVdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgYSBudW1iZXIgaXMgc21hbGxlciBhcyBhIGdpdmVuIGxpbWl0LgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBtaXhlZCAkbWF4VmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwcm9wZXJ0eVBhdGgKICAgICAqCiAgICAgKiBAcHNhbG0tYXNzZXJ0ID1udW1lcmljICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWF4KCR2YWx1ZSwgJG1heFZhbHVlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgc3RhdGljOjpudW1lcmljKCR2YWx1ZSwgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgpOwoKICAgICAgICBpZiAoJHZhbHVlID4gJG1heFZhbHVlKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnTnVtYmVyICIlcyIgd2FzIGV4cGVjdGVkIHRvIGJlIGF0IG1vc3QgIiVzIi4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkbWF4VmFsdWUpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfTUFYLCAkcHJvcGVydHlQYXRoLCBbJ21heCcgPT4gJG1heFZhbHVlXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IGEgZmlsZSBleGlzdHMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmlsZSgkdmFsdWUsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBzdGF0aWM6OnN0cmluZygkdmFsdWUsICRtZXNzYWdlLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICBzdGF0aWM6Om5vdEVtcHR5KCR2YWx1ZSwgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgpOwoKICAgICAgICBpZiAoIVxpc19maWxlKCR2YWx1ZSkpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdGaWxlICIlcyIgd2FzIGV4cGVjdGVkIHRvIGV4aXN0LicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0ZJTEUsICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCBhIGRpcmVjdG9yeSBleGlzdHMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGlyZWN0b3J5KCR2YWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIHN0YXRpYzo6c3RyaW5nKCR2YWx1ZSwgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgpOwoKICAgICAgICBpZiAoIVxpc19kaXIoJHZhbHVlKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1BhdGggIiVzIiB3YXMgZXhwZWN0ZWQgdG8gYmUgYSBkaXJlY3RvcnkuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfRElSRUNUT1JZLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlIGlzIHNvbWV0aGluZyByZWFkYWJsZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWFkYWJsZSgkdmFsdWUsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBzdGF0aWM6OnN0cmluZygkdmFsdWUsICRtZXNzYWdlLCAkcHJvcGVydHlQYXRoKTsKCiAgICAgICAgaWYgKCFcaXNfcmVhZGFibGUoJHZhbHVlKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1BhdGggIiVzIiB3YXMgZXhwZWN0ZWQgdG8gYmUgcmVhZGFibGUuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfUkVBREFCTEUsICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB0aGUgdmFsdWUgaXMgc29tZXRoaW5nIHdyaXRlYWJsZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB3cml0ZWFibGUoJHZhbHVlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgc3RhdGljOjpzdHJpbmcoJHZhbHVlLCAkbWVzc2FnZSwgJHByb3BlcnR5UGF0aCk7CgogICAgICAgIGlmICghXGlzX3dyaXRhYmxlKCR2YWx1ZSkpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdQYXRoICIlcyIgd2FzIGV4cGVjdGVkIHRvIGJlIHdyaXRlYWJsZS4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9XUklURUFCTEUsICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBlbWFpbCBhZGRyZXNzICh1c2luZyBpbnB1dF9maWx0ZXIvRklMVEVSX1ZBTElEQVRFX0VNQUlMKS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCA9c3RyaW5nICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZW1haWwoJHZhbHVlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgc3RhdGljOjpzdHJpbmcoJHZhbHVlLCAkbWVzc2FnZSwgJHByb3BlcnR5UGF0aCk7CgogICAgICAgIGlmICghXGZpbHRlcl92YXIoJHZhbHVlLCBGSUxURVJfVkFMSURBVEVfRU1BSUwpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiB3YXMgZXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBlLW1haWwgYWRkcmVzcy4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9FTUFJTCwgJHByb3BlcnR5UGF0aCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFuIFVSTC4KICAgICAqCiAgICAgKiBUaGlzIGNvZGUgc25pcHBlZCB3YXMgdGFrZW4gZnJvbSB0aGUgU3ltZm9ueSBwcm9qZWN0IGFuZCBtb2RpZmllZCB0byB0aGUgc3BlY2lhbCBkZW1hbmRzIG9mIHRoaXMgbWV0aG9kLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwcm9wZXJ0eVBhdGgKICAgICAqCiAgICAgKiBAcHNhbG0tYXNzZXJ0ID1zdHJpbmcgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zeW1mb255L1ZhbGlkYXRvci9ibG9iL21hc3Rlci9Db25zdHJhaW50cy9VcmxWYWxpZGF0b3IucGhwCiAgICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zeW1mb255L1ZhbGlkYXRvci9ibG9iL21hc3Rlci9Db25zdHJhaW50cy9VcmwucGhwCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXJsKCR2YWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIHN0YXRpYzo6c3RyaW5nKCR2YWx1ZSwgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgpOwoKICAgICAgICAkcHJvdG9jb2xzID0gWydodHRwJywgJ2h0dHBzJ107CgogICAgICAgICRwYXR0ZXJuID0gJ35eCiAgICAgICAgICAgICglcyk6Ly8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwcm90b2NvbAogICAgICAgICAgICAoKFtcLlxwTFxwTi1dKzopPyhbXC5ccExccE4tXSspQCk/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYmFzaWMgYXV0aAogICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAoW1xwTFxwTlxwU1wtXC5dKSsoXC4/KFtccExccE5dfHhuXC1cLVtccExccE4tXSspK1wuPykgICAgICAgICAgIyBhIGRvbWFpbiBuYW1lCiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcgogICAgICAgICAgICAgICAgXGR7MSwzfVwuXGR7MSwzfVwuXGR7MSwzfVwuXGR7MSwzfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYW4gSVAgYWRkcmVzcwogICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3IKICAgICAgICAgICAgICAgIFxbCiAgICAgICAgICAgICAgICAgICAgKD86KD86KD86KD86KD86KD86KD86WzAtOWEtZl17MSw0fSkpOil7Nn0pKD86KD86KD86KD86KD86WzAtOWEtZl17MSw0fSkpOig/Oig/OlswLTlhLWZdezEsNH0pKSl8KD86KD86KD86KD86KD86MjVbMC01XXwoPzpbMS05XXwxWzAtOV18MlswLTRdKT9bMC05XSkpXC4pezN9KD86KD86MjVbMC01XXwoPzpbMS05XXwxWzAtOV18MlswLTRdKT9bMC05XSkpKSkpKSl8KD86KD86OjooPzooPzooPzpbMC05YS1mXXsxLDR9KSk6KXs1fSkoPzooPzooPzooPzooPzpbMC05YS1mXXsxLDR9KSk6KD86KD86WzAtOWEtZl17MSw0fSkpKXwoPzooPzooPzooPzooPzoyNVswLTVdfCg/OlsxLTldfDFbMC05XXwyWzAtNF0pP1swLTldKSlcLil7M30oPzooPzoyNVswLTVdfCg/OlsxLTldfDFbMC05XXwyWzAtNF0pP1swLTldKSkpKSkpKXwoPzooPzooPzooPzooPzpbMC05YS1mXXsxLDR9KSkpPzo6KD86KD86KD86WzAtOWEtZl17MSw0fSkpOil7NH0pKD86KD86KD86KD86KD86WzAtOWEtZl17MSw0fSkpOig/Oig/OlswLTlhLWZdezEsNH0pKSl8KD86KD86KD86KD86KD86MjVbMC01XXwoPzpbMS05XXwxWzAtOV18MlswLTRdKT9bMC05XSkpXC4pezN9KD86KD86MjVbMC01XXwoPzpbMS05XXwxWzAtOV18MlswLTRdKT9bMC05XSkpKSkpKSl8KD86KD86KD86KD86KD86KD86WzAtOWEtZl17MSw0fSkpOil7MCwxfSg/Oig/OlswLTlhLWZdezEsNH0pKSk/OjooPzooPzooPzpbMC05YS1mXXsxLDR9KSk6KXszfSkoPzooPzooPzooPzooPzpbMC05YS1mXXsxLDR9KSk6KD86KD86WzAtOWEtZl17MSw0fSkpKXwoPzooPzooPzooPzooPzoyNVswLTVdfCg/OlsxLTldfDFbMC05XXwyWzAtNF0pP1swLTldKSlcLil7M30oPzooPzoyNVswLTVdfCg/OlsxLTldfDFbMC05XXwyWzAtNF0pP1swLTldKSkpKSkpKXwoPzooPzooPzooPzooPzooPzpbMC05YS1mXXsxLDR9KSk6KXswLDJ9KD86KD86WzAtOWEtZl17MSw0fSkpKT86Oig/Oig/Oig/OlswLTlhLWZdezEsNH0pKTopezJ9KSg/Oig/Oig/Oig/Oig/OlswLTlhLWZdezEsNH0pKTooPzooPzpbMC05YS1mXXsxLDR9KSkpfCg/Oig/Oig/Oig/Oig/OjI1WzAtNV18KD86WzEtOV18MVswLTldfDJbMC00XSk/WzAtOV0pKVwuKXszfSg/Oig/OjI1WzAtNV18KD86WzEtOV18MVswLTldfDJbMC00XSk/WzAtOV0pKSkpKSkpfCg/Oig/Oig/Oig/Oig/Oig/OlswLTlhLWZdezEsNH0pKTopezAsM30oPzooPzpbMC05YS1mXXsxLDR9KSkpPzo6KD86KD86WzAtOWEtZl17MSw0fSkpOikoPzooPzooPzooPzooPzpbMC05YS1mXXsxLDR9KSk6KD86KD86WzAtOWEtZl17MSw0fSkpKXwoPzooPzooPzooPzooPzoyNVswLTVdfCg/OlsxLTldfDFbMC05XXwyWzAtNF0pP1swLTldKSlcLil7M30oPzooPzoyNVswLTVdfCg/OlsxLTldfDFbMC05XXwyWzAtNF0pP1swLTldKSkpKSkpKXwoPzooPzooPzooPzooPzooPzpbMC05YS1mXXsxLDR9KSk6KXswLDR9KD86KD86WzAtOWEtZl17MSw0fSkpKT86OikoPzooPzooPzooPzooPzpbMC05YS1mXXsxLDR9KSk6KD86KD86WzAtOWEtZl17MSw0fSkpKXwoPzooPzooPzooPzooPzoyNVswLTVdfCg/OlsxLTldfDFbMC05XXwyWzAtNF0pP1swLTldKSlcLil7M30oPzooPzoyNVswLTVdfCg/OlsxLTldfDFbMC05XXwyWzAtNF0pP1swLTldKSkpKSkpKXwoPzooPzooPzooPzooPzooPzpbMC05YS1mXXsxLDR9KSk6KXswLDV9KD86KD86WzAtOWEtZl17MSw0fSkpKT86OikoPzooPzpbMC05YS1mXXsxLDR9KSkpfCg/Oig/Oig/Oig/Oig/Oig/OlswLTlhLWZdezEsNH0pKTopezAsNn0oPzooPzpbMC05YS1mXXsxLDR9KSkpPzo6KSkpKQogICAgICAgICAgICAgICAgXF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYW4gSVB2NiBhZGRyZXNzCiAgICAgICAgICAgICkKICAgICAgICAgICAgKDpbMC05XSspPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGEgcG9ydCAob3B0aW9uYWwpCiAgICAgICAgICAgICg/Oi8gKD86W1xwTFxwTlwtLl9cfiEkJlwnKCkqKyw7PTpAXXwlJVswLTlBLUZhLWZdezJ9KSogKSogICAgICAgICAgIyBhIHBhdGgKICAgICAgICAgICAgKD86XD8gKD86W1xwTFxwTlwtLl9cfiEkJlwnXFtcXSgpKissOz06QC8/XXwlJVswLTlBLUZhLWZdezJ9KSogKT8gICAjIGEgcXVlcnkgKG9wdGlvbmFsKQogICAgICAgICAgICAoPzpcIyAoPzpbXHBMXHBOXC0uX1x+ISQmXCcoKSorLDs9OkAvP118JSVbMC05QS1GYS1mXXsyfSkqICk/ICAgICAgICMgYSBmcmFnbWVudCAob3B0aW9uYWwpCiAgICAgICAgJH5peHUnOwoKICAgICAgICAkcGF0dGVybiA9IFxzcHJpbnRmKCRwYXR0ZXJuLCBcaW1wbG9kZSgnfCcsICRwcm90b2NvbHMpKTsKCiAgICAgICAgaWYgKCFccHJlZ19tYXRjaCgkcGF0dGVybiwgJHZhbHVlKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgd2FzIGV4cGVjdGVkIHRvIGJlIGEgdmFsaWQgVVJMIHN0YXJ0aW5nIHdpdGggaHR0cCBvciBodHRwcycpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX1VSTCwgJHByb3BlcnR5UGF0aCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFscGhhbnVtZXJpYy4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFsbnVtKCR2YWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHN0YXRpYzo6cmVnZXgoJHZhbHVlLCAnKF4oW2EtekEtWl17MX1bYS16QS1aMC05XSopJCknLCAkbWVzc2FnZSwgJHByb3BlcnR5UGF0aCk7CiAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBpcyBub3QgYWxwaGFudW1lcmljLCBzdGFydGluZyB3aXRoIGxldHRlcnMgYW5kIGNvbnRhaW5pbmcgb25seSBsZXR0ZXJzIGFuZCBudW1iZXJzLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0FMTlVNLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlIGlzIGJvb2xlYW4gVHJ1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCB0cnVlICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdHJ1ZSgkdmFsdWUsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAodHJ1ZSAhPT0gJHZhbHVlKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBpcyBub3QgVFJVRS4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9UUlVFLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlIGlzIGJvb2xlYW4gRmFsc2UuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByb3BlcnR5UGF0aAogICAgICoKICAgICAqIEBwc2FsbS1hc3NlcnQgZmFsc2UgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmYWxzZSgkdmFsdWUsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoZmFsc2UgIT09ICR2YWx1ZSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgaXMgbm90IEZBTFNFLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0ZBTFNFLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdGhlIGNsYXNzIGV4aXN0cy4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCBjbGFzcy1zdHJpbmcgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjbGFzc0V4aXN0cygkdmFsdWUsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoIVxjbGFzc19leGlzdHMoJHZhbHVlKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ0NsYXNzICIlcyIgZG9lcyBub3QgZXhpc3QuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfQ0xBU1MsICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB0aGUgaW50ZXJmYWNlIGV4aXN0cy4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCBjbGFzcy1zdHJpbmcgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpbnRlcmZhY2VFeGlzdHMoJHZhbHVlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCFcaW50ZXJmYWNlX2V4aXN0cygkdmFsdWUpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnSW50ZXJmYWNlICIlcyIgZG9lcyBub3QgZXhpc3QuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfSU5URVJGQUNFLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdGhlIGNsYXNzIGltcGxlbWVudHMgdGhlIGludGVyZmFjZS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGNsYXNzCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbnRlcmZhY2VOYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGltcGxlbWVudHNJbnRlcmZhY2UoJGNsYXNzLCAkaW50ZXJmYWNlTmFtZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRyZWZsZWN0aW9uID0gbmV3IFJlZmxlY3Rpb25DbGFzcygkY2xhc3MpOwogICAgICAgICAgICBpZiAoISRyZWZsZWN0aW9uLT5pbXBsZW1lbnRzSW50ZXJmYWNlKCRpbnRlcmZhY2VOYW1lKSkgewogICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnQ2xhc3MgIiVzIiBkb2VzIG5vdCBpbXBsZW1lbnQgaW50ZXJmYWNlICIlcyIuJyksCiAgICAgICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJGNsYXNzKSwKICAgICAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkaW50ZXJmYWNlTmFtZSkKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJGNsYXNzLCAkbWVzc2FnZSwgc3RhdGljOjpJTlRFUkZBQ0VfTk9UX0lNUExFTUVOVEVELCAkcHJvcGVydHlQYXRoLCBbJ2ludGVyZmFjZScgPT4gJGludGVyZmFjZU5hbWVdKTsKICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKFJlZmxlY3Rpb25FeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdDbGFzcyAiJXMiIGZhaWxlZCByZWZsZWN0aW9uLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJGNsYXNzKQogICAgICAgICAgICApOwogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkY2xhc3MsICRtZXNzYWdlLCBzdGF0aWM6OklOVEVSRkFDRV9OT1RfSU1QTEVNRU5URUQsICRwcm9wZXJ0eVBhdGgsIFsnaW50ZXJmYWNlJyA9PiAkaW50ZXJmYWNlTmFtZV0pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgdmFsaWQganNvbiBzdHJpbmcuCiAgICAgKgogICAgICogTk9USUNFOgogICAgICogU2luY2UgdGhpcyBkb2VzIGEganNvbl9kZWNvZGUgdG8gZGV0ZXJtaW5lIGl0cyB2YWxpZGl0eQogICAgICogeW91IHByb2JhYmx5IHNob3VsZCBjb25zaWRlciwgd2hlbiB1c2luZyB0aGUgdmFyaWFibGUKICAgICAqIGNvbnRlbnQgYWZ0ZXJ3YXJkcywganVzdCB0byBkZWNvZGUgYW5kIGNoZWNrIGZvciB5b3Vyc2VsZiBpbnN0ZWFkCiAgICAgKiBvZiB1c2luZyB0aGlzIGFzc2VydGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCA9c3RyaW5nICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNKc29uU3RyaW5nKCR2YWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmIChudWxsID09PSBcanNvbl9kZWNvZGUoJHZhbHVlKSAmJiBKU09OX0VSUk9SX05PTkUgIT09IFxqc29uX2xhc3RfZXJyb3IoKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgaXMgbm90IGEgdmFsaWQgSlNPTiBzdHJpbmcuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfSlNPTl9TVFJJTkcsICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgdmFsaWQgVVVJRC4KICAgICAqCiAgICAgKiBVc2VzIGNvZGUgZnJvbSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3JhbXNleS91dWlkfSB0aGF0IGlzIE1JVCBsaWNlbnNlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1dWlkKCR2YWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgICR2YWx1ZSA9IFxzdHJfcmVwbGFjZShbJ3VybjonLCAndXVpZDonLCAneycsICd9J10sICcnLCAkdmFsdWUpOwoKICAgICAgICBpZiAoJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCcgPT09ICR2YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIGlmICghXHByZWdfbWF0Y2goJy9eWzAtOUEtRmEtZl17OH0tWzAtOUEtRmEtZl17NH0tWzAtOUEtRmEtZl17NH0tWzAtOUEtRmEtZl17NH0tWzAtOUEtRmEtZl17MTJ9JC8nLCAkdmFsdWUpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBpcyBub3QgYSB2YWxpZCBVVUlELicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX1VVSUQsICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgdmFsaWQgRTE2NCBQaG9uZSBOdW1iZXIuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FLjE2NAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGUxNjQoJHZhbHVlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCFccHJlZ19tYXRjaCgnL15cKz9bMS05XVxkezEsMTR9JC8nLCAkdmFsdWUpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBpcyBub3QgYSB2YWxpZCBFMTY0LicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0UxNjQsICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB0aGUgY291bnQgb2YgY291bnRhYmxlIGlzIGVxdWFsIHRvIGNvdW50LgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheXxDb3VudGFibGV8UmVzb3VyY2VCdW5kbGV8U2ltcGxlWE1MRWxlbWVudCAkY291bnRhYmxlCiAgICAgKiBAcGFyYW0gaW50ICRjb3VudAogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByb3BlcnR5UGF0aAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY291bnQoJGNvdW50YWJsZSwgJGNvdW50LCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCRjb3VudCAhPT0gXGNvdW50KCRjb3VudGFibGUpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnTGlzdCBkb2VzIG5vdCBjb250YWluIGV4YWN0bHkgJWQgZWxlbWVudHMgKCVkIGdpdmVuKS4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCRjb3VudCksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeShcY291bnQoJGNvdW50YWJsZSkpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkY291bnRhYmxlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0NPVU5ULCAkcHJvcGVydHlQYXRoLCBbJ2NvdW50JyA9PiAkY291bnRdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdGhlIGNvdW50YWJsZSBoYXZlIGF0IGxlYXN0ICRjb3VudCBlbGVtZW50cy4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXl8Q291bnRhYmxlfFJlc291cmNlQnVuZGxlfFNpbXBsZVhNTEVsZW1lbnQgJGNvdW50YWJsZQogICAgICogQHBhcmFtIGludCAkY291bnQKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWluQ291bnQoJGNvdW50YWJsZSwgJGNvdW50LCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCRjb3VudCA+IFxjb3VudCgkY291bnRhYmxlKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ0xpc3Qgc2hvdWxkIGhhdmUgYXQgbGVhc3QgJWQgZWxlbWVudHMsIGJ1dCBoYXMgJWQgZWxlbWVudHMuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkY291bnQpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoXGNvdW50KCRjb3VudGFibGUpKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJGNvdW50YWJsZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9NSU5fQ09VTlQsICRwcm9wZXJ0eVBhdGgsIFsnY291bnQnID0+ICRjb3VudF0pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB0aGUgY291bnRhYmxlIGhhdmUgYXQgbW9zdCAkY291bnQgZWxlbWVudHMuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5fENvdW50YWJsZXxSZXNvdXJjZUJ1bmRsZXxTaW1wbGVYTUxFbGVtZW50ICRjb3VudGFibGUKICAgICAqIEBwYXJhbSBpbnQgJGNvdW50CiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1heENvdW50KCRjb3VudGFibGUsICRjb3VudCwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmICgkY291bnQgPCBcY291bnQoJGNvdW50YWJsZSkpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdMaXN0IHNob3VsZCBoYXZlIGF0IG1vc3QgJWQgZWxlbWVudHMsIGJ1dCBoYXMgJWQgZWxlbWVudHMuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkY291bnQpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoXGNvdW50KCRjb3VudGFibGUpKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJGNvdW50YWJsZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9NQVhfQ09VTlQsICRwcm9wZXJ0eVBhdGgsIFsnY291bnQnID0+ICRjb3VudF0pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBzdGF0aWMgY2FsbCBoYW5kbGVyIHRvIGltcGxlbWVudDoKICAgICAqICAtICJudWxsIG9yIGFzc2VydGlvbiIgZGVsZWdhdGlvbgogICAgICogIC0gImFsbCIgZGVsZWdhdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXRob2QKICAgICAqIEBwYXJhbSBhcnJheSAkYXJncwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbHxtaXhlZAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gX19jYWxsU3RhdGljKCRtZXRob2QsICRhcmdzKQogICAgewogICAgICAgIGlmICgwID09PSBcc3RycG9zKCRtZXRob2QsICdudWxsT3InKSkgewogICAgICAgICAgICBpZiAoIVxhcnJheV9rZXlfZXhpc3RzKDAsICRhcmdzKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEJhZE1ldGhvZENhbGxFeGNlcHRpb24oJ01pc3NpbmcgdGhlIGZpcnN0IGFyZ3VtZW50LicpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAobnVsbCA9PT0gJGFyZ3NbMF0pIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkbWV0aG9kID0gXHN1YnN0cigkbWV0aG9kLCA2KTsKCiAgICAgICAgICAgIHJldHVybiBcY2FsbF91c2VyX2Z1bmNfYXJyYXkoW1xnZXRfY2FsbGVkX2NsYXNzKCksICRtZXRob2RdLCAkYXJncyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoMCA9PT0gXHN0cnBvcygkbWV0aG9kLCAnYWxsJykpIHsKICAgICAgICAgICAgaWYgKCFcYXJyYXlfa2V5X2V4aXN0cygwLCAkYXJncykpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBCYWRNZXRob2RDYWxsRXhjZXB0aW9uKCdNaXNzaW5nIHRoZSBmaXJzdCBhcmd1bWVudC4nKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgc3RhdGljOjppc1RyYXZlcnNhYmxlKCRhcmdzWzBdKTsKCiAgICAgICAgICAgICRtZXRob2QgPSBcc3Vic3RyKCRtZXRob2QsIDMpOwogICAgICAgICAgICAkdmFsdWVzID0gXGFycmF5X3NoaWZ0KCRhcmdzKTsKICAgICAgICAgICAgJGNhbGxlZENsYXNzID0gXGdldF9jYWxsZWRfY2xhc3MoKTsKCiAgICAgICAgICAgIGZvcmVhY2ggKCR2YWx1ZXMgYXMgJHZhbHVlKSB7CiAgICAgICAgICAgICAgICBcY2FsbF91c2VyX2Z1bmNfYXJyYXkoWyRjYWxsZWRDbGFzcywgJG1ldGhvZF0sIFxhcnJheV9tZXJnZShbJHZhbHVlXSwgJGFyZ3MpKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbignTm8gYXNzZXJ0aW9uIEFzc2VydGlvbiMnLiRtZXRob2QuJyBleGlzdHMuJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSB2YWx1ZXMgYXJyYXkgaGFzIGV2ZXJ5IGNob2ljZSBhcyBrZXkgYW5kIHRoYXQgdGhpcyBjaG9pY2UgaGFzIGNvbnRlbnQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaG9pY2VzTm90RW1wdHkoYXJyYXkgJHZhbHVlcywgYXJyYXkgJGNob2ljZXMsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBzdGF0aWM6Om5vdEVtcHR5KCR2YWx1ZXMsICRtZXNzYWdlLCAkcHJvcGVydHlQYXRoKTsKCiAgICAgICAgZm9yZWFjaCAoJGNob2ljZXMgYXMgJGNob2ljZSkgewogICAgICAgICAgICBzdGF0aWM6Om5vdEVtcHR5S2V5KCR2YWx1ZXMsICRjaG9pY2UsICRtZXNzYWdlLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogRGV0ZXJtaW5lcyB0aGF0IHRoZSBuYW1lZCBtZXRob2QgaXMgZGVmaW5lZCBpbiB0aGUgcHJvdmlkZWQgb2JqZWN0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG9iamVjdAogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtZXRob2RFeGlzdHMoJHZhbHVlLCAkb2JqZWN0LCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgc3RhdGljOjppc09iamVjdCgkb2JqZWN0LCAkbWVzc2FnZSwgJHByb3BlcnR5UGF0aCk7CgogICAgICAgIGlmICghXG1ldGhvZF9leGlzdHMoJG9iamVjdCwgJHZhbHVlKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ0V4cGVjdGVkICIlcyIgZG9lcyBub3QgZXhpc3QgaW4gcHJvdmlkZWQgb2JqZWN0LicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX01FVEhPRCwgJHByb3BlcnR5UGF0aCwgWydvYmplY3QnID0+IFxnZXRfY2xhc3MoJG9iamVjdCldKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogRGV0ZXJtaW5lcyB0aGF0IHRoZSBwcm92aWRlZCB2YWx1ZSBpcyBhbiBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByb3BlcnR5UGF0aAogICAgICoKICAgICAqIEBwc2FsbS1hc3NlcnQgb2JqZWN0ICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNPYmplY3QoJHZhbHVlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCFcaXNfb2JqZWN0KCR2YWx1ZSkpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdQcm92aWRlZCAiJXMiIGlzIG5vdCBhIHZhbGlkIG9iamVjdC4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9PQkpFQ1QsICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSB2YWx1ZSBpcyBsZXNzIHRoYW4gZ2l2ZW4gbGltaXQuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIG1peGVkICRsaW1pdAogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsZXNzVGhhbigkdmFsdWUsICRsaW1pdCwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmICgkdmFsdWUgPj0gJGxpbWl0KSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnUHJvdmlkZWQgIiVzIiBpcyBub3QgbGVzcyB0aGFuICIlcyIuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJGxpbWl0KQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0xFU1MsICRwcm9wZXJ0eVBhdGgsIFsnbGltaXQnID0+ICRsaW1pdF0pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSB2YWx1ZSBpcyBsZXNzIG9yIGVxdWFsIHRoYW4gZ2l2ZW4gbGltaXQuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIG1peGVkICRsaW1pdAogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsZXNzT3JFcXVhbFRoYW4oJHZhbHVlLCAkbGltaXQsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoJHZhbHVlID4gJGxpbWl0KSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnUHJvdmlkZWQgIiVzIiBpcyBub3QgbGVzcyBvciBlcXVhbCB0aGFuICIlcyIuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJGxpbWl0KQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0xFU1NfT1JfRVFVQUwsICRwcm9wZXJ0eVBhdGgsIFsnbGltaXQnID0+ICRsaW1pdF0pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gZ2l2ZW4gbGltaXQuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIG1peGVkICRsaW1pdAogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBncmVhdGVyVGhhbigkdmFsdWUsICRsaW1pdCwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmICgkdmFsdWUgPD0gJGxpbWl0KSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnUHJvdmlkZWQgIiVzIiBpcyBub3QgZ3JlYXRlciB0aGFuICIlcyIuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJGxpbWl0KQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0dSRUFURVIsICRwcm9wZXJ0eVBhdGgsIFsnbGltaXQnID0+ICRsaW1pdF0pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIG9yIGVxdWFsIHRoYW4gZ2l2ZW4gbGltaXQuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIG1peGVkICRsaW1pdAogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBncmVhdGVyT3JFcXVhbFRoYW4oJHZhbHVlLCAkbGltaXQsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoJHZhbHVlIDwgJGxpbWl0KSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnUHJvdmlkZWQgIiVzIiBpcyBub3QgZ3JlYXRlciBvciBlcXVhbCB0aGFuICIlcyIuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJGxpbWl0KQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0dSRUFURVJfT1JfRVFVQUwsICRwcm9wZXJ0eVBhdGgsIFsnbGltaXQnID0+ICRsaW1pdF0pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCBhIHZhbHVlIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiBhIGxvd2VyIGxpbWl0LCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGFuIHVwcGVyIGxpbWl0LgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBtaXhlZCAkbG93ZXJMaW1pdAogICAgICogQHBhcmFtIG1peGVkICR1cHBlckxpbWl0CiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJHByb3BlcnR5UGF0aAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYmV0d2VlbigkdmFsdWUsICRsb3dlckxpbWl0LCAkdXBwZXJMaW1pdCwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmICgkbG93ZXJMaW1pdCA+ICR2YWx1ZSB8fCAkdmFsdWUgPiAkdXBwZXJMaW1pdCkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1Byb3ZpZGVkICIlcyIgaXMgbmVpdGhlciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gIiVzIiBub3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICIlcyIuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJGxvd2VyTGltaXQpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHVwcGVyTGltaXQpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfQkVUV0VFTiwgJHByb3BlcnR5UGF0aCwgWydsb3dlcicgPT4gJGxvd2VyTGltaXQsICd1cHBlcicgPT4gJHVwcGVyTGltaXRdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgYSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gYSBsb3dlciBsaW1pdCwgYW5kIGxlc3MgdGhhbiBhbiB1cHBlciBsaW1pdC4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGxvd2VyTGltaXQKICAgICAqIEBwYXJhbSBtaXhlZCAkdXBwZXJMaW1pdAogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwcm9wZXJ0eVBhdGgKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJldHdlZW5FeGNsdXNpdmUoJHZhbHVlLCAkbG93ZXJMaW1pdCwgJHVwcGVyTGltaXQsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoJGxvd2VyTGltaXQgPj0gJHZhbHVlIHx8ICR2YWx1ZSA+PSAkdXBwZXJMaW1pdCkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1Byb3ZpZGVkICIlcyIgaXMgbmVpdGhlciBncmVhdGVyIHRoYW4gIiVzIiBub3IgbGVzcyB0aGFuICIlcyIuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJGxvd2VyTGltaXQpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHVwcGVyTGltaXQpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfQkVUV0VFTl9FWENMVVNJVkUsICRwcm9wZXJ0eVBhdGgsIFsnbG93ZXInID0+ICRsb3dlckxpbWl0LCAndXBwZXInID0+ICR1cHBlckxpbWl0XSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IGV4dGVuc2lvbiBpcyBsb2FkZWQuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBleHRlbnNpb25Mb2FkZWQoJHZhbHVlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCFcZXh0ZW5zaW9uX2xvYWRlZCgkdmFsdWUpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnRXh0ZW5zaW9uICIlcyIgaXMgcmVxdWlyZWQuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfRVhURU5TSU9OLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgZGF0ZSBpcyB2YWxpZCBhbmQgY29ycmVzcG9uZHMgdG8gdGhlIGdpdmVuIGZvcm1hdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZyAkZm9ybWF0IHN1cHBvcnRzIGFsbCBvZiB0aGUgb3B0aW9ucyBkYXRlKCksIGV4Y2VwdCBmb3IgdGhlIGZvbGxvd2luZzoKICAgICAqICAgICAgICAgICAgICAgICAgICAgICBOLCB3LCBXLCB0LCBMLCBvLCBCLCBhLCBBLCBnLCBoLCBJLCBPLCBQLCBaLCBjLCByCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICoKICAgICAqIEBzZWUgaHR0cDovL3BocC5uZXQvbWFudWFsL2Z1bmN0aW9uLmRhdGUucGhwI3JlZnNlY3QxLWZ1bmN0aW9uLmRhdGUtcGFyYW1ldGVycwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRhdGUoJHZhbHVlLCAkZm9ybWF0LCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgc3RhdGljOjpzdHJpbmcoJHZhbHVlLCAkbWVzc2FnZSwgJHByb3BlcnR5UGF0aCk7CiAgICAgICAgc3RhdGljOjpzdHJpbmcoJGZvcm1hdCwgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgpOwoKICAgICAgICAkZGF0ZVRpbWUgPSBEYXRlVGltZTo6Y3JlYXRlRnJvbUZvcm1hdCgnIScuJGZvcm1hdCwgJHZhbHVlKTsKCiAgICAgICAgaWYgKGZhbHNlID09PSAkZGF0ZVRpbWUgfHwgJHZhbHVlICE9PSAkZGF0ZVRpbWUtPmZvcm1hdCgkZm9ybWF0KSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ0RhdGUgIiVzIiBpcyBpbnZhbGlkIG9yIGRvZXMgbm90IG1hdGNoIGZvcm1hdCAiJXMiLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCRmb3JtYXQpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfREFURSwgJHByb3BlcnR5UGF0aCwgWydmb3JtYXQnID0+ICRmb3JtYXRdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCwgb3IgYSBjbGFzcyB0aGF0IGV4aXN0cy4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9iamVjdE9yQ2xhc3MoJHZhbHVlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCFcaXNfb2JqZWN0KCR2YWx1ZSkpIHsKICAgICAgICAgICAgc3RhdGljOjpjbGFzc0V4aXN0cygkdmFsdWUsICRtZXNzYWdlLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCBvciBjbGFzcywgYW5kIHRoYXQgdGhlIHByb3BlcnR5IGV4aXN0cy4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwcm9wZXJ0eQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwcm9wZXJ0eUV4aXN0cygkdmFsdWUsICRwcm9wZXJ0eSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIHN0YXRpYzo6b2JqZWN0T3JDbGFzcygkdmFsdWUpOwoKICAgICAgICBpZiAoIVxwcm9wZXJ0eV9leGlzdHMoJHZhbHVlLCAkcHJvcGVydHkpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnQ2xhc3MgIiVzIiBkb2VzIG5vdCBoYXZlIHByb3BlcnR5ICIlcyIuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHByb3BlcnR5KQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX1BST1BFUlRZLCAkcHJvcGVydHlQYXRoLCBbJ3Byb3BlcnR5JyA9PiAkcHJvcGVydHldKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCBvciBjbGFzcywgYW5kIHRoYXQgdGhlIHByb3BlcnRpZXMgYWxsIGV4aXN0LgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcHJvcGVydGllc0V4aXN0KCR2YWx1ZSwgYXJyYXkgJHByb3BlcnRpZXMsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBzdGF0aWM6Om9iamVjdE9yQ2xhc3MoJHZhbHVlKTsKICAgICAgICBzdGF0aWM6OmFsbFN0cmluZygkcHJvcGVydGllcywgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgpOwoKICAgICAgICAkaW52YWxpZFByb3BlcnRpZXMgPSBbXTsKICAgICAgICBmb3JlYWNoICgkcHJvcGVydGllcyBhcyAkcHJvcGVydHkpIHsKICAgICAgICAgICAgaWYgKCFccHJvcGVydHlfZXhpc3RzKCR2YWx1ZSwgJHByb3BlcnR5KSkgewogICAgICAgICAgICAgICAgJGludmFsaWRQcm9wZXJ0aWVzW10gPSAkcHJvcGVydHk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgkaW52YWxpZFByb3BlcnRpZXMpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdDbGFzcyAiJXMiIGRvZXMgbm90IGhhdmUgdGhlc2UgcHJvcGVydGllczogJXMuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoXGltcGxvZGUoJywgJywgJGludmFsaWRQcm9wZXJ0aWVzKSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9QUk9QRVJUWSwgJHByb3BlcnR5UGF0aCwgWydwcm9wZXJ0aWVzJyA9PiAkcHJvcGVydGllc10pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgY29tcGFyaXNvbiBvZiB0d28gdmVyc2lvbnMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdmVyc2lvbjEKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wZXJhdG9yCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2ZXJzaW9uMgogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB2ZXJzaW9uKCR2ZXJzaW9uMSwgJG9wZXJhdG9yLCAkdmVyc2lvbjIsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBzdGF0aWM6Om5vdEVtcHR5KCRvcGVyYXRvciwgJ3ZlcnNpb25Db21wYXJlIG9wZXJhdG9yIGlzIHJlcXVpcmVkIGFuZCBjYW5ub3QgYmUgZW1wdHkuJyk7CgogICAgICAgIGlmICh0cnVlICE9PSBcdmVyc2lvbl9jb21wYXJlKCR2ZXJzaW9uMSwgJHZlcnNpb24yLCAkb3BlcmF0b3IpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmVyc2lvbiAiJXMiIGlzIG5vdCAiJXMiIHZlcnNpb24gIiVzIi4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2ZXJzaW9uMSksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkb3BlcmF0b3IpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZlcnNpb24yKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZlcnNpb24xLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX1ZFUlNJT04sICRwcm9wZXJ0eVBhdGgsIFsnb3BlcmF0b3InID0+ICRvcGVyYXRvciwgJ3ZlcnNpb24nID0+ICR2ZXJzaW9uMl0pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgb24gUEhQIHZlcnNpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkb3BlcmF0b3IKICAgICAqIEBwYXJhbSBtaXhlZCAkdmVyc2lvbgogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwaHBWZXJzaW9uKCRvcGVyYXRvciwgJHZlcnNpb24sICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBzdGF0aWM6OmRlZmluZWQoJ1BIUF9WRVJTSU9OJyk7CgogICAgICAgIHJldHVybiBzdGF0aWM6OnZlcnNpb24oUEhQX1ZFUlNJT04sICRvcGVyYXRvciwgJHZlcnNpb24sICRtZXNzYWdlLCAkcHJvcGVydHlQYXRoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IGV4dGVuc2lvbiBpcyBsb2FkZWQgYW5kIGEgc3BlY2lmaWMgdmVyc2lvbiBpcyBpbnN0YWxsZWQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZXh0ZW5zaW9uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcGVyYXRvcgogICAgICogQHBhcmFtIG1peGVkICR2ZXJzaW9uCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGV4dGVuc2lvblZlcnNpb24oJGV4dGVuc2lvbiwgJG9wZXJhdG9yLCAkdmVyc2lvbiwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIHN0YXRpYzo6ZXh0ZW5zaW9uTG9hZGVkKCRleHRlbnNpb24sICRtZXNzYWdlLCAkcHJvcGVydHlQYXRoKTsKCiAgICAgICAgcmV0dXJuIHN0YXRpYzo6dmVyc2lvbihccGhwdmVyc2lvbigkZXh0ZW5zaW9uKSwgJG9wZXJhdG9yLCAkdmVyc2lvbiwgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgpOwogICAgfQoKICAgIC8qKgogICAgICogRGV0ZXJtaW5lcyB0aGF0IHRoZSBwcm92aWRlZCB2YWx1ZSBpcyBjYWxsYWJsZS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCBjYWxsYWJsZSAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzQ2FsbGFibGUoJHZhbHVlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCFcaXNfY2FsbGFibGUoJHZhbHVlKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1Byb3ZpZGVkICIlcyIgaXMgbm90IGEgY2FsbGFibGUuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfQ0FMTEFCTEUsICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgdmFsaWQgYWNjb3JkaW5nIHRvIGEgY2FsbGJhY2suCiAgICAgKgogICAgICogSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgYGZhbHNlYCB0aGUgYXNzZXJ0aW9uIHdpbGwgZmFpbC4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNhdGlzZnkoJHZhbHVlLCAkY2FsbGJhY2ssICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBzdGF0aWM6OmlzQ2FsbGFibGUoJGNhbGxiYWNrKTsKCiAgICAgICAgaWYgKGZhbHNlID09PSBcY2FsbF91c2VyX2Z1bmMoJGNhbGxiYWNrLCAkdmFsdWUpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnUHJvdmlkZWQgIiVzIiBpcyBpbnZhbGlkIGFjY29yZGluZyB0byBjdXN0b20gcnVsZS4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9TQVRJU0ZZLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYW4gSVB2NCBvciBJUHY2IGFkZHJlc3MKICAgICAqICh1c2luZyBpbnB1dF9maWx0ZXIvRklMVEVSX1ZBTElEQVRFX0lQKS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQogICAgICogQHBhcmFtIGludHxudWxsICRmbGFnCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICoKICAgICAqIEBzZWUgaHR0cDovL3BocC5uZXQvbWFudWFsL2ZpbHRlci5maWx0ZXJzLmZsYWdzLnBocAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlwKCR2YWx1ZSwgJGZsYWcgPSBudWxsLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgc3RhdGljOjpzdHJpbmcoJHZhbHVlLCAkbWVzc2FnZSwgJHByb3BlcnR5UGF0aCk7CiAgICAgICAgaWYgKCRmbGFnID09PSBudWxsKSB7CiAgICAgICAgICAgICRmaWx0ZXJWYXJSZXN1bHQgPSBcZmlsdGVyX3ZhcigkdmFsdWUsIEZJTFRFUl9WQUxJREFURV9JUCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGZpbHRlclZhclJlc3VsdCA9IFxmaWx0ZXJfdmFyKCR2YWx1ZSwgRklMVEVSX1ZBTElEQVRFX0lQLCAkZmxhZyk7CiAgICAgICAgfQogICAgICAgIGlmICghJGZpbHRlclZhclJlc3VsdCkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgd2FzIGV4cGVjdGVkIHRvIGJlIGEgdmFsaWQgSVAgYWRkcmVzcy4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSkKICAgICAgICAgICAgKTsKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0lQLCAkcHJvcGVydHlQYXRoLCBbJ2ZsYWcnID0+ICRmbGFnXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFuIElQdjQgYWRkcmVzcwogICAgICogKHVzaW5nIGlucHV0X2ZpbHRlci9GSUxURVJfVkFMSURBVEVfSVApLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlCiAgICAgKiBAcGFyYW0gaW50fG51bGwgJGZsYWcKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vcGhwLm5ldC9tYW51YWwvZmlsdGVyLmZpbHRlcnMuZmxhZ3MucGhwCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXB2NCgkdmFsdWUsICRmbGFnID0gbnVsbCwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIHN0YXRpYzo6aXAoJHZhbHVlLCAkZmxhZyB8IEZJTFRFUl9GTEFHX0lQVjQsIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIHdhcyBleHBlY3RlZCB0byBiZSBhIHZhbGlkIElQdjQgYWRkcmVzcy4nKSwgJHByb3BlcnR5UGF0aCk7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYW4gSVB2NiBhZGRyZXNzCiAgICAgKiAodXNpbmcgaW5wdXRfZmlsdGVyL0ZJTFRFUl9WQUxJREFURV9JUCkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICAgICAqIEBwYXJhbSBpbnR8bnVsbCAkZmxhZwogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqCiAgICAgKiBAc2VlIGh0dHA6Ly9waHAubmV0L21hbnVhbC9maWx0ZXIuZmlsdGVycy5mbGFncy5waHAKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpcHY2KCR2YWx1ZSwgJGZsYWcgPSBudWxsLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgc3RhdGljOjppcCgkdmFsdWUsICRmbGFnIHwgRklMVEVSX0ZMQUdfSVBWNiwgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgd2FzIGV4cGVjdGVkIHRvIGJlIGEgdmFsaWQgSVB2NiBhZGRyZXNzLicpLCAkcHJvcGVydHlQYXRoKTsKCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCBhIGNvbnN0YW50IGlzIGRlZmluZWQuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRjb25zdGFudAogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGVmaW5lZCgkY29uc3RhbnQsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoIVxkZWZpbmVkKCRjb25zdGFudCkpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZihzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBleHBlY3RlZCB0byBiZSBhIGRlZmluZWQgY29uc3RhbnQuJyksICRjb25zdGFudCk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkY29uc3RhbnQsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfQ09OU1RBTlQsICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCBhIGNvbnN0YW50IGlzIGRlZmluZWQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYmFzZTY0KCR2YWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmIChmYWxzZSA9PT0gXGJhc2U2NF9kZWNvZGUoJHZhbHVlLCB0cnVlKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIGlzIG5vdCBhIHZhbGlkIGJhc2U2NCBzdHJpbmcuJyksICR2YWx1ZSk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfQkFTRTY0LCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogSGVscGVyIG1ldGhvZCB0aGF0IGhhbmRsZXMgYnVpbGRpbmcgdGhlIGFzc2VydGlvbiBmYWlsdXJlIGV4Y2VwdGlvbnMuCiAgICAgKiBUaGV5IGFyZSByZXR1cm5lZCBmcm9tIHRoaXMgbWV0aG9kIHNvIHRoYXQgdGhlIHN0YWNrIHRyYWNlIHN0aWxsIHNob3dzCiAgICAgKiB0aGUgYXNzZXJ0aW9ucyBtZXRob2QuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gaW50ICRjb2RlCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCAkY29kZSwgJHByb3BlcnR5UGF0aCA9IG51bGwsIGFycmF5ICRjb25zdHJhaW50cyA9IFtdKQogICAgewogICAgICAgICRleGNlcHRpb25DbGFzcyA9IHN0YXRpYzo6JGV4Y2VwdGlvbkNsYXNzOwoKICAgICAgICByZXR1cm4gbmV3ICRleGNlcHRpb25DbGFzcygkbWVzc2FnZSwgJGNvZGUsICRwcm9wZXJ0eVBhdGgsICR2YWx1ZSwgJGNvbnN0cmFpbnRzKTsKICAgIH0KCiAgICAvKioKICAgICAqIE1ha2UgYSBzdHJpbmcgdmVyc2lvbiBvZiBhIHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzdHJpbmdpZnkoJHZhbHVlKTogc3RyaW5nCiAgICB7CiAgICAgICAgJHJlc3VsdCA9IFxnZXR0eXBlKCR2YWx1ZSk7CgogICAgICAgIGlmIChcaXNfYm9vbCgkdmFsdWUpKSB7CiAgICAgICAgICAgICRyZXN1bHQgPSAkdmFsdWUgPyAnPFRSVUU+JyA6ICc8RkFMU0U+JzsKICAgICAgICB9IGVsc2VpZiAoXGlzX3NjYWxhcigkdmFsdWUpKSB7CiAgICAgICAgICAgICR2YWwgPSAoc3RyaW5nKSR2YWx1ZTsKCiAgICAgICAgICAgIGlmIChcbWJfc3RybGVuKCR2YWwpID4gMTAwKSB7CiAgICAgICAgICAgICAgICAkdmFsID0gXG1iX3N1YnN0cigkdmFsLCAwLCA5NykuJy4uLic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRyZXN1bHQgPSAkdmFsOwogICAgICAgIH0gZWxzZWlmIChcaXNfYXJyYXkoJHZhbHVlKSkgewogICAgICAgICAgICAkcmVzdWx0ID0gJzxBUlJBWT4nOwogICAgICAgIH0gZWxzZWlmIChcaXNfb2JqZWN0KCR2YWx1ZSkpIHsKICAgICAgICAgICAgJHJlc3VsdCA9IFxnZXRfY2xhc3MoJHZhbHVlKTsKICAgICAgICB9IGVsc2VpZiAoXGlzX3Jlc291cmNlKCR2YWx1ZSkpIHsKICAgICAgICAgICAgJHJlc3VsdCA9IFxnZXRfcmVzb3VyY2VfdHlwZSgkdmFsdWUpOwogICAgICAgIH0gZWxzZWlmIChudWxsID09PSAkdmFsdWUpIHsKICAgICAgICAgICAgJHJlc3VsdCA9ICc8TlVMTD4nOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZW5lcmF0ZSB0aGUgbWVzc2FnZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoXGlzX2NhbGxhYmxlKCRtZXNzYWdlKSkgewogICAgICAgICAgICAkdHJhY2VzID0gXGRlYnVnX2JhY2t0cmFjZSgwKTsKCiAgICAgICAgICAgICRwYXJhbWV0ZXJzID0gW107CgogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgJHJlZmxlY3Rpb24gPSBuZXcgUmVmbGVjdGlvbkNsYXNzKCR0cmFjZXNbMV1bJ2NsYXNzJ10pOwogICAgICAgICAgICAgICAgJG1ldGhvZCA9ICRyZWZsZWN0aW9uLT5nZXRNZXRob2QoJHRyYWNlc1sxXVsnZnVuY3Rpb24nXSk7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkbWV0aG9kLT5nZXRQYXJhbWV0ZXJzKCkgYXMgJGluZGV4ID0+ICRwYXJhbWV0ZXIpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJ21lc3NhZ2UnICE9PSAkcGFyYW1ldGVyLT5nZXROYW1lKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHBhcmFtZXRlcnNbJHBhcmFtZXRlci0+Z2V0TmFtZSgpXSA9IFxhcnJheV9rZXlfZXhpc3RzKCRpbmRleCwgJHRyYWNlc1sxXVsnYXJncyddKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAkdHJhY2VzWzFdWydhcmdzJ11bJGluZGV4XQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkcGFyYW1ldGVyLT5nZXREZWZhdWx0VmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHBhcmFtZXRlcnNbJzo6YXNzZXJ0aW9uJ10gPSBcc3ByaW50ZignJXMlcyVzJywgJHRyYWNlc1sxXVsnY2xhc3MnXSwgJHRyYWNlc1sxXVsndHlwZSddLCAkdHJhY2VzWzFdWydmdW5jdGlvbiddKTsKCiAgICAgICAgICAgICAgICAkbWVzc2FnZSA9IFxjYWxsX3VzZXJfZnVuY19hcnJheSgkbWVzc2FnZSwgWyRwYXJhbWV0ZXJzXSk7CiAgICAgICAgICAgIH0gLy8gQGNvZGVDb3ZlcmFnZUlnbm9yZVN0YXJ0CiAgICAgICAgICAgIGNhdGNoIChUaHJvd2FibGUgJGV4Y2VwdGlvbikgewogICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZignVW5hYmxlIHRvIGdlbmVyYXRlIG1lc3NhZ2UgOiAlcycsICRleGNlcHRpb24tPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgIH0gLy8gQGNvZGVDb3ZlcmFnZUlnbm9yZUVuZAogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIChzdHJpbmcpJG1lc3NhZ2U7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/beberlei/assert/lib/Assert/AssertionChain.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBc3NlcnQKICoKICogTElDRU5TRQogKgogKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE1JVCBsaWNlbnNlIHRoYXQgaXMgYnVuZGxlZAogKiB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLnR4dC4KICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8KICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbAogKiB0byBrb250YWt0QGJlYmVybGVpLmRlIHNvIEkgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS4KICovCgpuYW1lc3BhY2UgQXNzZXJ0OwoKdXNlIExvZ2ljRXhjZXB0aW9uOwoKLyoqCiAqIENoYWluaW5nIGJ1aWxkZXIgZm9yIGFzc2VydGlvbnMuCiAqCiAqIEBhdXRob3IgQmVuamFtaW4gRWJlcmxlaSA8a29udGFrdEBiZWJlcmxlaS5kZT4KICoKICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBhbG51bShzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFscGhhbnVtZXJpYy4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBiYXNlNjQoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBhIGNvbnN0YW50IGlzIGRlZmluZWQuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gYmV0d2VlbihtaXhlZCAkbG93ZXJMaW1pdCwgbWl4ZWQgJHVwcGVyTGltaXQsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgYSB2YWx1ZSBpcyBncmVhdGVyIG9yIGVxdWFsIHRoYW4gYSBsb3dlciBsaW1pdCwgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBhbiB1cHBlciBsaW1pdC4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBiZXR3ZWVuRXhjbHVzaXZlKG1peGVkICRsb3dlckxpbWl0LCBtaXhlZCAkdXBwZXJMaW1pdCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBhIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBhIGxvd2VyIGxpbWl0LCBhbmQgbGVzcyB0aGFuIGFuIHVwcGVyIGxpbWl0LgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGJldHdlZW5MZW5ndGgoaW50ICRtaW5MZW5ndGgsIGludCAkbWF4TGVuZ3RoLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwsIHN0cmluZyAkZW5jb2RpbmcgPSAndXRmOCcpIEFzc2VydCB0aGF0IHN0cmluZyBsZW5ndGggaXMgYmV0d2VlbiBtaW4gYW5kIG1heCBsZW5ndGhzLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGJvb2xlYW4oc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBwaHAgYm9vbGVhbi4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBjaG9pY2UoYXJyYXkgJGNob2ljZXMsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgaW4gYXJyYXkgb2YgY2hvaWNlcy4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBjaG9pY2VzTm90RW1wdHkoYXJyYXkgJGNob2ljZXMsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgRGV0ZXJtaW5lcyBpZiB0aGUgdmFsdWVzIGFycmF5IGhhcyBldmVyeSBjaG9pY2UgYXMga2V5IGFuZCB0aGF0IHRoaXMgY2hvaWNlIGhhcyBjb250ZW50LgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGNsYXNzRXhpc3RzKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIGNsYXNzIGV4aXN0cy4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBjb250YWlucyhzdHJpbmcgJG5lZWRsZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsLCBzdHJpbmcgJGVuY29kaW5nID0gJ3V0ZjgnKSBBc3NlcnQgdGhhdCBzdHJpbmcgY29udGFpbnMgYSBzZXF1ZW5jZSBvZiBjaGFycy4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBjb3VudChpbnQgJGNvdW50LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBjb3VudCBvZiBjb3VudGFibGUgaXMgZXF1YWwgdG8gY291bnQuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gZGF0ZShzdHJpbmcgJGZvcm1hdCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBkYXRlIGlzIHZhbGlkIGFuZCBjb3JyZXNwb25kcyB0byB0aGUgZ2l2ZW4gZm9ybWF0LgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGRlZmluZWQoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBhIGNvbnN0YW50IGlzIGRlZmluZWQuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gZGlnaXQoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBWYWxpZGF0ZXMgaWYgYW4gaW50ZWdlciBvciBpbnRlZ2VyaXNoIGlzIGEgZGlnaXQuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gZGlyZWN0b3J5KHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgYSBkaXJlY3RvcnkgZXhpc3RzLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGUxNjQoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgdmFsaWQgRTE2NCBQaG9uZSBOdW1iZXIuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gZW1haWwoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBlbWFpbCBhZGRyZXNzICh1c2luZyBpbnB1dF9maWx0ZXIvRklMVEVSX1ZBTElEQVRFX0VNQUlMKS4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBlbmRzV2l0aChzdHJpbmcgJG5lZWRsZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsLCBzdHJpbmcgJGVuY29kaW5nID0gJ3V0ZjgnKSBBc3NlcnQgdGhhdCBzdHJpbmcgZW5kcyB3aXRoIGEgc2VxdWVuY2Ugb2YgY2hhcnMuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gZXEobWl4ZWQgJHZhbHVlMiwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0d28gdmFsdWVzIGFyZSBlcXVhbCAodXNpbmcgPT0pLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGVxQXJyYXlTdWJzZXQobWl4ZWQgJHZhbHVlMiwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgYXJyYXkgY29udGFpbnMgdGhlIHN1YnNldC4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBleHRlbnNpb25Mb2FkZWQoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBleHRlbnNpb24gaXMgbG9hZGVkLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGV4dGVuc2lvblZlcnNpb24oc3RyaW5nICRvcGVyYXRvciwgbWl4ZWQgJHZlcnNpb24sIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgZXh0ZW5zaW9uIGlzIGxvYWRlZCBhbmQgYSBzcGVjaWZpYyB2ZXJzaW9uIGlzIGluc3RhbGxlZC4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBmYWxzZShzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSB2YWx1ZSBpcyBib29sZWFuIEZhbHNlLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGZpbGUoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBhIGZpbGUgZXhpc3RzLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGZsb2F0KHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYSBwaHAgZmxvYXQuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gZ3JlYXRlck9yRXF1YWxUaGFuKG1peGVkICRsaW1pdCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBEZXRlcm1pbmVzIGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIG9yIGVxdWFsIHRoYW4gZ2l2ZW4gbGltaXQuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gZ3JlYXRlclRoYW4obWl4ZWQgJGxpbWl0LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIERldGVybWluZXMgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBnaXZlbiBsaW1pdC4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBpbXBsZW1lbnRzSW50ZXJmYWNlKHN0cmluZyAkaW50ZXJmYWNlTmFtZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgY2xhc3MgaW1wbGVtZW50cyB0aGUgaW50ZXJmYWNlLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGluQXJyYXkoYXJyYXkgJGNob2ljZXMsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgaW4gYXJyYXkgb2YgY2hvaWNlcy4gVGhpcyBpcyBhbiBhbGlhcyBvZiBBc3NlcnRpb246OmNob2ljZSgpLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGludGVnZXIoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhIHBocCBpbnRlZ2VyLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGludGVnZXJpc2goc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhIHBocCBpbnRlZ2VyJ2lzaC4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBpbnRlcmZhY2VFeGlzdHMoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgaW50ZXJmYWNlIGV4aXN0cy4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBpcChpbnQgJGZsYWcgPSBudWxsLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFuIElQdjQgb3IgSVB2NiBhZGRyZXNzLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGlwdjQoaW50ICRmbGFnID0gbnVsbCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBJUHY0IGFkZHJlc3MuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gaXB2NihpbnQgJGZsYWcgPSBudWxsLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFuIElQdjYgYWRkcmVzcy4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBpc0FycmF5KHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYW4gYXJyYXkuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gaXNBcnJheUFjY2Vzc2libGUoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBhcnJheSBvciBhbiBhcnJheS1hY2Nlc3NpYmxlIG9iamVjdC4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBpc0NhbGxhYmxlKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgRGV0ZXJtaW5lcyB0aGF0IHRoZSBwcm92aWRlZCB2YWx1ZSBpcyBjYWxsYWJsZS4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBpc0NvdW50YWJsZShzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGNvdW50YWJsZS4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBpc0luc3RhbmNlT2Yoc3RyaW5nICRjbGFzc05hbWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgaW5zdGFuY2Ugb2YgZ2l2ZW4gY2xhc3MtbmFtZS4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBpc0pzb25TdHJpbmcoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgdmFsaWQganNvbiBzdHJpbmcuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gaXNPYmplY3Qoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBEZXRlcm1pbmVzIHRoYXQgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIGFuIG9iamVjdC4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBpc1Jlc291cmNlKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYSByZXNvdXJjZS4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBpc1RyYXZlcnNhYmxlKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYW4gYXJyYXkgb3IgYSB0cmF2ZXJzYWJsZSBvYmplY3QuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4ga2V5RXhpc3RzKHN0cmluZ3xpbnQgJGtleSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBrZXkgZXhpc3RzIGluIGFuIGFycmF5LgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGtleUlzc2V0KHN0cmluZ3xpbnQgJGtleSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBrZXkgZXhpc3RzIGluIGFuIGFycmF5L2FycmF5LWFjY2Vzc2libGUgb2JqZWN0IHVzaW5nIGlzc2V0KCkuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4ga2V5Tm90RXhpc3RzKHN0cmluZ3xpbnQgJGtleSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBrZXkgZG9lcyBub3QgZXhpc3QgaW4gYW4gYXJyYXkuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gbGVuZ3RoKGludCAkbGVuZ3RoLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwsIHN0cmluZyAkZW5jb2RpbmcgPSAndXRmOCcpIEFzc2VydCB0aGF0IHN0cmluZyBoYXMgYSBnaXZlbiBsZW5ndGguCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gbGVzc09yRXF1YWxUaGFuKG1peGVkICRsaW1pdCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBEZXRlcm1pbmVzIGlmIHRoZSB2YWx1ZSBpcyBsZXNzIG9yIGVxdWFsIHRoYW4gZ2l2ZW4gbGltaXQuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gbGVzc1RoYW4obWl4ZWQgJGxpbWl0LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIERldGVybWluZXMgaWYgdGhlIHZhbHVlIGlzIGxlc3MgdGhhbiBnaXZlbiBsaW1pdC4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBtYXgobWl4ZWQgJG1heFZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGEgbnVtYmVyIGlzIHNtYWxsZXIgYXMgYSBnaXZlbiBsaW1pdC4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBtYXhDb3VudChpbnQgJGNvdW50LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBjb3VudGFibGUgaGF2ZSBhdCBtb3N0ICRjb3VudCBlbGVtZW50cy4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBtYXhMZW5ndGgoaW50ICRtYXhMZW5ndGgsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgc3RyaW5nICRlbmNvZGluZyA9ICd1dGY4JykgQXNzZXJ0IHRoYXQgc3RyaW5nIHZhbHVlIGlzIG5vdCBsb25nZXIgdGhhbiAkbWF4TGVuZ3RoIGNoYXJzLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIG1ldGhvZEV4aXN0cyhtaXhlZCAkb2JqZWN0LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIERldGVybWluZXMgdGhhdCB0aGUgbmFtZWQgbWV0aG9kIGlzIGRlZmluZWQgaW4gdGhlIHByb3ZpZGVkIG9iamVjdC4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBtaW4obWl4ZWQgJG1pblZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGEgdmFsdWUgaXMgYXQgbGVhc3QgYXMgYmlnIGFzIGEgZ2l2ZW4gbGltaXQuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gbWluQ291bnQoaW50ICRjb3VudCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgY291bnRhYmxlIGhhdmUgYXQgbGVhc3QgJGNvdW50IGVsZW1lbnRzLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIG1pbkxlbmd0aChpbnQgJG1pbkxlbmd0aCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsLCBzdHJpbmcgJGVuY29kaW5nID0gJ3V0ZjgnKSBBc3NlcnQgdGhhdCBhIHN0cmluZyBpcyBhdCBsZWFzdCAkbWluTGVuZ3RoIGNoYXJzIGxvbmcuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gbm9Db250ZW50KHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgZW1wdHkuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gbm90Qmxhbmsoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBub3QgYmxhbmsuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gbm90Q29udGFpbnMoc3RyaW5nICRuZWVkbGUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgc3RyaW5nICRlbmNvZGluZyA9ICd1dGY4JykgQXNzZXJ0IHRoYXQgc3RyaW5nIGRvZXMgbm90IGNvbnRhaW5zIGEgc2VxdWVuY2Ugb2YgY2hhcnMuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gbm90RW1wdHkoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBub3QgZW1wdHkuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gbm90RW1wdHlLZXkoc3RyaW5nfGludCAka2V5LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGtleSBleGlzdHMgaW4gYW4gYXJyYXkvYXJyYXktYWNjZXNzaWJsZSBvYmplY3QgYW5kIGl0cyB2YWx1ZSBpcyBub3QgZW1wdHkuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gbm90RXEobWl4ZWQgJHZhbHVlMiwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0d28gdmFsdWVzIGFyZSBub3QgZXF1YWwgKHVzaW5nID09KS4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBub3RJbkFycmF5KGFycmF5ICRjaG9pY2VzLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIG5vdCBpbiBhcnJheSBvZiBjaG9pY2VzLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIG5vdElzSW5zdGFuY2VPZihzdHJpbmcgJGNsYXNzTmFtZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBub3QgaW5zdGFuY2Ugb2YgZ2l2ZW4gY2xhc3MtbmFtZS4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBub3ROdWxsKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgbm90IG51bGwuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gbm90UmVnZXgoc3RyaW5nICRwYXR0ZXJuLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGRvZXMgbm90IG1hdGNoIGEgcmVnZXguCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gbm90U2FtZShtaXhlZCAkdmFsdWUyLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHR3byB2YWx1ZXMgYXJlIG5vdCB0aGUgc2FtZSAodXNpbmcgPT09KS4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBudWxsKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBudW1lcmljKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgbnVtZXJpYy4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBvYmplY3RPckNsYXNzKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCwgb3IgYSBjbGFzcyB0aGF0IGV4aXN0cy4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBwaHBWZXJzaW9uKG1peGVkICR2ZXJzaW9uLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCBvbiBQSFAgdmVyc2lvbi4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBwcm9wZXJ0aWVzRXhpc3QoYXJyYXkgJHByb3BlcnRpZXMsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCBvciBjbGFzcywgYW5kIHRoYXQgdGhlIHByb3BlcnRpZXMgYWxsIGV4aXN0LgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIHByb3BlcnR5RXhpc3RzKHN0cmluZyAkcHJvcGVydHksIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCBvciBjbGFzcywgYW5kIHRoYXQgdGhlIHByb3BlcnR5IGV4aXN0cy4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiByYW5nZShtaXhlZCAkbWluVmFsdWUsIG1peGVkICRtYXhWYWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBpbiByYW5nZSBvZiBudW1iZXJzLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIHJlYWRhYmxlKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIHZhbHVlIGlzIHNvbWV0aGluZyByZWFkYWJsZS4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiByZWdleChzdHJpbmcgJHBhdHRlcm4sIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgbWF0Y2hlcyBhIHJlZ2V4LgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIHNhbWUobWl4ZWQgJHZhbHVlMiwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0d28gdmFsdWVzIGFyZSB0aGUgc2FtZSAodXNpbmcgPT09KS4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBzYXRpc2Z5KGNhbGxhYmxlICRjYWxsYmFjaywgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgdmFsaWQgYWNjb3JkaW5nIHRvIGEgY2FsbGJhY2suCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gc2NhbGFyKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYSBQSFAgc2NhbGFyLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIHN0YXJ0c1dpdGgoc3RyaW5nICRuZWVkbGUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgc3RyaW5nICRlbmNvZGluZyA9ICd1dGY4JykgQXNzZXJ0IHRoYXQgc3RyaW5nIHN0YXJ0cyB3aXRoIGEgc2VxdWVuY2Ugb2YgY2hhcnMuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gc3RyaW5nKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYSBzdHJpbmcuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gc3ViY2xhc3NPZihzdHJpbmcgJGNsYXNzTmFtZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBzdWJjbGFzcyBvZiBnaXZlbiBjbGFzcy1uYW1lLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIHRydWUoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgdmFsdWUgaXMgYm9vbGVhbiBUcnVlLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIHVuaXF1ZVZhbHVlcyhzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlcyBpbiBhcnJheSBhcmUgdW5pcXVlICh1c2luZyBzdHJpY3QgZXF1YWxpdHkpLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIHVybChzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFuIFVSTC4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiB1dWlkKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIGdpdmVuIHN0cmluZyBpcyBhIHZhbGlkIFVVSUQuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gdmVyc2lvbihzdHJpbmcgJG9wZXJhdG9yLCBzdHJpbmcgJHZlcnNpb24yLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCBjb21wYXJpc29uIG9mIHR3byB2ZXJzaW9ucy4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiB3cml0ZWFibGUoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgdmFsdWUgaXMgc29tZXRoaW5nIHdyaXRlYWJsZS4KICovCmNsYXNzIEFzc2VydGlvbkNoYWluCnsKICAgIC8qKgogICAgICogQHZhciBtaXhlZAogICAgICovCiAgICBwcml2YXRlICR2YWx1ZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfGNhbGxhYmxlfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkZGVmYXVsdE1lc3NhZ2U7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGRlZmF1bHRQcm9wZXJ0eVBhdGg7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gZWFjaCBhc3NlcnRpb24gYXMgYWx3YXlzIHZhbGlkLgogICAgICoKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICBwcml2YXRlICRhbHdheXNWYWxpZCA9IGZhbHNlOwoKICAgIC8qKgogICAgICogUGVyZm9ybSBhc3NlcnRpb24gb24gZXZlcnkgZWxlbWVudCBvZiBhcnJheSBvciB0cmF2ZXJzYWJsZS4KICAgICAqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSAkYWxsID0gZmFsc2U7CgogICAgLyoqIEB2YXIgc3RyaW5nfEFzc2VydGlvbiBDbGFzcyB0byB1c2UgZm9yIGFzc2VydGlvbiBjYWxscyAqLwogICAgcHJpdmF0ZSAkYXNzZXJ0aW9uQ2xhc3NOYW1lID0gJ0Fzc2VydFxBc3NlcnRpb24nOwoKICAgIC8qKgogICAgICogQXNzZXJ0aW9uQ2hhaW4gY29uc3RydWN0b3IuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRkZWZhdWx0TWVzc2FnZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHZhbHVlLCAkZGVmYXVsdE1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRkZWZhdWx0UHJvcGVydHlQYXRoID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkdmFsdWU7CiAgICAgICAgJHRoaXMtPmRlZmF1bHRNZXNzYWdlID0gJGRlZmF1bHRNZXNzYWdlOwogICAgICAgICR0aGlzLT5kZWZhdWx0UHJvcGVydHlQYXRoID0gJGRlZmF1bHRQcm9wZXJ0eVBhdGg7CiAgICB9CgogICAgLyoqCiAgICAgKiBDYWxsIGFzc2VydGlvbiBvbiB0aGUgY3VycmVudCB2YWx1ZSBpbiB0aGUgY2hhaW4uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWV0aG9kTmFtZQogICAgICogQHBhcmFtIGFycmF5ICRhcmdzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NhbGwoJG1ldGhvZE5hbWUsICRhcmdzKTogQXNzZXJ0aW9uQ2hhaW4KICAgIHsKICAgICAgICBpZiAodHJ1ZSA9PT0gJHRoaXMtPmFsd2F5c1ZhbGlkKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRtZXRob2QgPSBuZXcgXFJlZmxlY3Rpb25NZXRob2QoJHRoaXMtPmFzc2VydGlvbkNsYXNzTmFtZSwgJG1ldGhvZE5hbWUpOwogICAgICAgIH0gY2F0Y2ggKFxSZWZsZWN0aW9uRXhjZXB0aW9uICRleGNlcHRpb24pIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCJBc3NlcnRpb24gJyIuJG1ldGhvZE5hbWUuIicgZG9lcyBub3QgZXhpc3QuIik7CiAgICAgICAgfQoKICAgICAgICBcYXJyYXlfdW5zaGlmdCgkYXJncywgJHRoaXMtPnZhbHVlKTsKICAgICAgICAkcGFyYW1zID0gJG1ldGhvZC0+Z2V0UGFyYW1ldGVycygpOwoKICAgICAgICBmb3JlYWNoICgkcGFyYW1zIGFzICRpZHggPT4gJHBhcmFtKSB7CiAgICAgICAgICAgIGlmIChpc3NldCgkYXJnc1skaWR4XSkpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBzd2l0Y2ggKCRwYXJhbS0+Z2V0TmFtZSgpKSB7CiAgICAgICAgICAgICAgICBjYXNlICdtZXNzYWdlJzoKICAgICAgICAgICAgICAgICAgICAkYXJnc1skaWR4XSA9ICR0aGlzLT5kZWZhdWx0TWVzc2FnZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3Byb3BlcnR5UGF0aCc6CiAgICAgICAgICAgICAgICAgICAgJGFyZ3NbJGlkeF0gPSAkdGhpcy0+ZGVmYXVsdFByb3BlcnR5UGF0aDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT5hbGwpIHsKICAgICAgICAgICAgJG1ldGhvZE5hbWUgPSAnYWxsJy4kbWV0aG9kTmFtZTsKICAgICAgICB9CgogICAgICAgIFxjYWxsX3VzZXJfZnVuY19hcnJheShbJHRoaXMtPmFzc2VydGlvbkNsYXNzTmFtZSwgJG1ldGhvZE5hbWVdLCAkYXJncyk7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIFN3aXRjaCBjaGFpbiBpbnRvIHZhbGlkYXRpb24gbW9kZSBmb3IgYW4gYXJyYXkgb2YgdmFsdWVzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWxsKCk6IEFzc2VydGlvbkNoYWluCiAgICB7CiAgICAgICAgJHRoaXMtPmFsbCA9IHRydWU7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIFN3aXRjaCBjaGFpbiBpbnRvIG1vZGUgYWxsb3dpbmcgbnVsbHMsIGlnbm9yaW5nIGZ1cnRoZXIgYXNzZXJ0aW9ucy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG51bGxPcigpOiBBc3NlcnRpb25DaGFpbgogICAgewogICAgICAgIGlmIChudWxsID09PSAkdGhpcy0+dmFsdWUpIHsKICAgICAgICAgICAgJHRoaXMtPmFsd2F5c1ZhbGlkID0gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzTmFtZQogICAgICoKICAgICAqIEByZXR1cm4gJHRoaXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEFzc2VydGlvbkNsYXNzTmFtZSgkY2xhc3NOYW1lKTogQXNzZXJ0aW9uQ2hhaW4KICAgIHsKICAgICAgICBpZiAoIVxpc19zdHJpbmcoJGNsYXNzTmFtZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IExvZ2ljRXhjZXB0aW9uKCdFeGNlcHRpb24gY2xhc3MgbmFtZSBtdXN0IGJlIHBhc3NlZCBhcyBhIHN0cmluZycpOwogICAgICAgIH0KCiAgICAgICAgaWYgKEFzc2VydGlvbjo6Y2xhc3MgIT09ICRjbGFzc05hbWUgJiYgIVxpc19zdWJjbGFzc19vZigkY2xhc3NOYW1lLCBBc3NlcnRpb246OmNsYXNzKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgTG9naWNFeGNlcHRpb24oJGNsYXNzTmFtZS4nIGlzIG5vdCAoYSBzdWJjbGFzcyBvZikgJy5Bc3NlcnRpb246OmNsYXNzKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5hc3NlcnRpb25DbGFzc05hbWUgPSAkY2xhc3NOYW1lOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/beberlei/assert/lib/Assert/AssertionFailedException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBc3NlcnQKICoKICogTElDRU5TRQogKgogKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE1JVCBsaWNlbnNlIHRoYXQgaXMgYnVuZGxlZAogKiB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLnR4dC4KICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8KICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbAogKiB0byBrb250YWt0QGJlYmVybGVpLmRlIHNvIEkgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS4KICovCgpuYW1lc3BhY2UgQXNzZXJ0OwoKdXNlIFRocm93YWJsZTsKCmludGVyZmFjZSBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24gZXh0ZW5kcyBUaHJvd2FibGUKewogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQcm9wZXJ0eVBhdGgoKTsKCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFZhbHVlKCk7CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnN0cmFpbnRzKCk6IGFycmF5Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/beberlei/assert/lib/Assert/functions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBc3NlcnQKICoKICogTElDRU5TRQogKgogKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE1JVCBsaWNlbnNlIHRoYXQgaXMgYnVuZGxlZAogKiB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLnR4dC4KICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8KICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbAogKiB0byBrb250YWt0QGJlYmVybGVpLmRlIHNvIEkgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS4KICovCgpuYW1lc3BhY2UgQXNzZXJ0OwoKLyoqCiAqIFN0YXJ0IHZhbGlkYXRpb24gb24gYSB2YWx1ZSwgcmV0dXJucyB7QGxpbmsgQXNzZXJ0aW9uQ2hhaW59LgogKgogKiBUaGUgaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCBzdGFydHMgYW4gYXNzZXJ0aW9uIGNoYWluCiAqIHRoYXQgaXMgaGFwcGVuaW5nIG9uIHRoZSBwYXNzZWQgdmFsdWUuCiAqCiAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRkZWZhdWx0TWVzc2FnZQogKiBAcGFyYW0gc3RyaW5nICRkZWZhdWx0UHJvcGVydHlQYXRoCiAqCiAqIEBleGFtcGxlCiAqCiAqICBcQXNzZXJ0XHRoYXQoJHZhbHVlKS0+bm90RW1wdHkoKS0+aW50ZWdlcigpOwogKiAgXEFzc2VydFx0aGF0KCR2YWx1ZSktPm51bGxPcigpLT5zdHJpbmcoKS0+c3RhcnRzV2l0aCgiRm9vIik7CiAqCiAqIFRoZSBhc3NlcnRpb24gY2hhaW4gY2FuIGJlIHN0YXRlZnVsLCB0aGF0IG1lYW5zIGJlIGNhcmVmdWwgd2hlbiB5b3UgcmV1c2UKICogaXQuIFlvdSBzaG91bGQgbmV2ZXIgcGFzcyBhcm91bmQgdGhlIGNoYWluLgogKi8KZnVuY3Rpb24gdGhhdCgkdmFsdWUsICRkZWZhdWx0TWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJGRlZmF1bHRQcm9wZXJ0eVBhdGggPSBudWxsKTogQXNzZXJ0aW9uQ2hhaW4KewogICAgcmV0dXJuIEFzc2VydDo6dGhhdCgkdmFsdWUsICRkZWZhdWx0TWVzc2FnZSwgJGRlZmF1bHRQcm9wZXJ0eVBhdGgpOwp9CgovKioKICogU3RhcnQgdmFsaWRhdGlvbiBvbiBhIHNldCBvZiB2YWx1ZXMsIHJldHVybnMge0BsaW5rIEFzc2VydGlvbkNoYWlufS4KICoKICogQHBhcmFtIG1peGVkICR2YWx1ZXMKICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRkZWZhdWx0TWVzc2FnZQogKiBAcGFyYW0gc3RyaW5nICRkZWZhdWx0UHJvcGVydHlQYXRoCiAqLwpmdW5jdGlvbiB0aGF0QWxsKCR2YWx1ZXMsICRkZWZhdWx0TWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJGRlZmF1bHRQcm9wZXJ0eVBhdGggPSBudWxsKTogQXNzZXJ0aW9uQ2hhaW4KewogICAgcmV0dXJuIEFzc2VydDo6dGhhdEFsbCgkdmFsdWVzLCAkZGVmYXVsdE1lc3NhZ2UsICRkZWZhdWx0UHJvcGVydHlQYXRoKTsKfQoKLyoqCiAqIFN0YXJ0IHZhbGlkYXRpb24gYW5kIGFsbG93IE5VTEwsIHJldHVybnMge0BsaW5rIEFzc2VydGlvbkNoYWlufS4KICoKICogQHBhcmFtIG1peGVkICR2YWx1ZQogKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJGRlZmF1bHRNZXNzYWdlCiAqIEBwYXJhbSBzdHJpbmcgJGRlZmF1bHRQcm9wZXJ0eVBhdGgKICoKICogQGRlcHJlY2F0ZWQgSW4gZmF2b3VyIG9mIEFzc2VydDo6dGhhdE51bGxPcigkdmFsdWUsICRkZWZhdWx0TWVzc2FnZSA9IG51bGwsICRkZWZhdWx0UHJvcGVydHlQYXRoID0gbnVsbCkKICovCmZ1bmN0aW9uIHRoYXROdWxsT3IoJHZhbHVlLCAkZGVmYXVsdE1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRkZWZhdWx0UHJvcGVydHlQYXRoID0gbnVsbCk6IEFzc2VydGlvbkNoYWluCnsKICAgIHJldHVybiBBc3NlcnQ6OnRoYXROdWxsT3IoJHZhbHVlLCAkZGVmYXVsdE1lc3NhZ2UsICRkZWZhdWx0UHJvcGVydHlQYXRoKTsKfQoKLyoqCiAqIENyZWF0ZSBhIGxhenkgYXNzZXJ0aW9uIG9iamVjdC4KICovCmZ1bmN0aW9uIGxhenkoKTogTGF6eUFzc2VydGlvbgp7CiAgICByZXR1cm4gQXNzZXJ0OjpsYXp5KCk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/beberlei/assert/lib/Assert/InvalidArgumentException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBc3NlcnQKICoKICogTElDRU5TRQogKgogKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE1JVCBsaWNlbnNlIHRoYXQgaXMgYnVuZGxlZAogKiB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLnR4dC4KICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8KICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbAogKiB0byBrb250YWt0QGJlYmVybGVpLmRlIHNvIEkgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS4KICovCgpuYW1lc3BhY2UgQXNzZXJ0OwoKY2xhc3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGV4dGVuZHMgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpbXBsZW1lbnRzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkcHJvcGVydHlQYXRoOwoKICAgIC8qKgogICAgICogQHZhciBtaXhlZAogICAgICovCiAgICBwcml2YXRlICR2YWx1ZTsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSAkY29uc3RyYWludHM7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRtZXNzYWdlLCAkY29kZSwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgJHZhbHVlID0gbnVsbCwgYXJyYXkgJGNvbnN0cmFpbnRzID0gW10pCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkbWVzc2FnZSwgJGNvZGUpOwoKICAgICAgICAkdGhpcy0+cHJvcGVydHlQYXRoID0gJHByb3BlcnR5UGF0aDsKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkdmFsdWU7CiAgICAgICAgJHRoaXMtPmNvbnN0cmFpbnRzID0gJGNvbnN0cmFpbnRzOwogICAgfQoKICAgIC8qKgogICAgICogVXNlciBjb250cm9sbGVkIHdheSB0byBkZWZpbmUgYSBzdWItcHJvcGVydHkgY2F1c2luZwogICAgICogdGhlIGZhaWx1cmUgb2YgYSBjdXJyZW50bHkgYXNzZXJ0ZWQgb2JqZWN0cy4KICAgICAqCiAgICAgKiBVc2VmdWwgdG8gdHJhbnNwb3J0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBuYXR1cmUgb2YgdGhlIGVycm9yCiAgICAgKiBiYWNrIHRvIGhpZ2hlciBsYXllcnMuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UHJvcGVydHlQYXRoKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnByb3BlcnR5UGF0aDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgdmFsdWUgdGhhdCBjYXVzZWQgdGhlIGFzc2VydGlvbiB0byBmYWlsLgogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFZhbHVlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBjb25zdHJhaW50cyB0aGF0IGFwcGxpZWQgdG8gdGhlIGZhaWxlZCBhc3NlcnRpb24uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb25zdHJhaW50cygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y29uc3RyYWludHM7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/beberlei/assert/lib/Assert/LazyAssertion.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBc3NlcnQKICoKICogTElDRU5TRQogKgogKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE1JVCBsaWNlbnNlIHRoYXQgaXMgYnVuZGxlZAogKiB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLnR4dC4KICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8KICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbAogKiB0byBrb250YWt0QGJlYmVybGVpLmRlIHNvIEkgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS4KICovCgpuYW1lc3BhY2UgQXNzZXJ0OwoKdXNlIExvZ2ljRXhjZXB0aW9uOwoKLyoqCiAqIENoYWluaW5nIGJ1aWxkZXIgZm9yIGxhenkgYXNzZXJ0aW9ucy4KICoKICogQGF1dGhvciBCZW5qYW1pbiBFYmVybGVpIDxrb250YWt0QGJlYmVybGVpLmRlPgogKgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gYWxudW0oc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbHBoYW51bWVyaWMuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBiYXNlNjQoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBhIGNvbnN0YW50IGlzIGRlZmluZWQuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBiZXR3ZWVuKG1peGVkICRsb3dlckxpbWl0LCBtaXhlZCAkdXBwZXJMaW1pdCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBhIHZhbHVlIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiBhIGxvd2VyIGxpbWl0LCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGFuIHVwcGVyIGxpbWl0LgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gYmV0d2VlbkV4Y2x1c2l2ZShtaXhlZCAkbG93ZXJMaW1pdCwgbWl4ZWQgJHVwcGVyTGltaXQsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgYSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gYSBsb3dlciBsaW1pdCwgYW5kIGxlc3MgdGhhbiBhbiB1cHBlciBsaW1pdC4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGJldHdlZW5MZW5ndGgoaW50ICRtaW5MZW5ndGgsIGludCAkbWF4TGVuZ3RoLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwsIHN0cmluZyAkZW5jb2RpbmcgPSAndXRmOCcpIEFzc2VydCB0aGF0IHN0cmluZyBsZW5ndGggaXMgYmV0d2VlbiBtaW4gYW5kIG1heCBsZW5ndGhzLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gYm9vbGVhbihzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIHBocCBib29sZWFuLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gY2hvaWNlKGFycmF5ICRjaG9pY2VzLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGluIGFycmF5IG9mIGNob2ljZXMuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBjaG9pY2VzTm90RW1wdHkoYXJyYXkgJGNob2ljZXMsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgRGV0ZXJtaW5lcyBpZiB0aGUgdmFsdWVzIGFycmF5IGhhcyBldmVyeSBjaG9pY2UgYXMga2V5IGFuZCB0aGF0IHRoaXMgY2hvaWNlIGhhcyBjb250ZW50LgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gY2xhc3NFeGlzdHMoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgY2xhc3MgZXhpc3RzLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gY29udGFpbnMoc3RyaW5nICRuZWVkbGUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgc3RyaW5nICRlbmNvZGluZyA9ICd1dGY4JykgQXNzZXJ0IHRoYXQgc3RyaW5nIGNvbnRhaW5zIGEgc2VxdWVuY2Ugb2YgY2hhcnMuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBjb3VudChpbnQgJGNvdW50LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBjb3VudCBvZiBjb3VudGFibGUgaXMgZXF1YWwgdG8gY291bnQuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBkYXRlKHN0cmluZyAkZm9ybWF0LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGRhdGUgaXMgdmFsaWQgYW5kIGNvcnJlc3BvbmRzIHRvIHRoZSBnaXZlbiBmb3JtYXQuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBkZWZpbmVkKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgYSBjb25zdGFudCBpcyBkZWZpbmVkLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gZGlnaXQoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBWYWxpZGF0ZXMgaWYgYW4gaW50ZWdlciBvciBpbnRlZ2VyaXNoIGlzIGEgZGlnaXQuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBkaXJlY3Rvcnkoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBhIGRpcmVjdG9yeSBleGlzdHMuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBlMTY0KHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIGdpdmVuIHN0cmluZyBpcyBhIHZhbGlkIEUxNjQgUGhvbmUgTnVtYmVyLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gZW1haWwoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBlbWFpbCBhZGRyZXNzICh1c2luZyBpbnB1dF9maWx0ZXIvRklMVEVSX1ZBTElEQVRFX0VNQUlMKS4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGVuZHNXaXRoKHN0cmluZyAkbmVlZGxlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwsIHN0cmluZyAkZW5jb2RpbmcgPSAndXRmOCcpIEFzc2VydCB0aGF0IHN0cmluZyBlbmRzIHdpdGggYSBzZXF1ZW5jZSBvZiBjaGFycy4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGVxKG1peGVkICR2YWx1ZTIsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdHdvIHZhbHVlcyBhcmUgZXF1YWwgKHVzaW5nID09KS4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGVxQXJyYXlTdWJzZXQobWl4ZWQgJHZhbHVlMiwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgYXJyYXkgY29udGFpbnMgdGhlIHN1YnNldC4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGV4dGVuc2lvbkxvYWRlZChzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGV4dGVuc2lvbiBpcyBsb2FkZWQuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBleHRlbnNpb25WZXJzaW9uKHN0cmluZyAkb3BlcmF0b3IsIG1peGVkICR2ZXJzaW9uLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGV4dGVuc2lvbiBpcyBsb2FkZWQgYW5kIGEgc3BlY2lmaWMgdmVyc2lvbiBpcyBpbnN0YWxsZWQuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBmYWxzZShzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSB2YWx1ZSBpcyBib29sZWFuIEZhbHNlLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gZmlsZShzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGEgZmlsZSBleGlzdHMuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBmbG9hdChzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGEgcGhwIGZsb2F0LgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gZ3JlYXRlck9yRXF1YWxUaGFuKG1peGVkICRsaW1pdCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBEZXRlcm1pbmVzIGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIG9yIGVxdWFsIHRoYW4gZ2l2ZW4gbGltaXQuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBncmVhdGVyVGhhbihtaXhlZCAkbGltaXQsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgRGV0ZXJtaW5lcyBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIGdpdmVuIGxpbWl0LgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gaW1wbGVtZW50c0ludGVyZmFjZShzdHJpbmcgJGludGVyZmFjZU5hbWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIGNsYXNzIGltcGxlbWVudHMgdGhlIGludGVyZmFjZS4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGluQXJyYXkoYXJyYXkgJGNob2ljZXMsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgaW4gYXJyYXkgb2YgY2hvaWNlcy4gVGhpcyBpcyBhbiBhbGlhcyBvZiBBc3NlcnRpb246OmNob2ljZSgpLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gaW50ZWdlcihzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGEgcGhwIGludGVnZXIuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBpbnRlZ2VyaXNoKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYSBwaHAgaW50ZWdlcidpc2guCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBpbnRlcmZhY2VFeGlzdHMoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgaW50ZXJmYWNlIGV4aXN0cy4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGlwKGludCAkZmxhZyA9IG51bGwsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYW4gSVB2NCBvciBJUHY2IGFkZHJlc3MuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBpcHY0KGludCAkZmxhZyA9IG51bGwsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYW4gSVB2NCBhZGRyZXNzLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gaXB2NihpbnQgJGZsYWcgPSBudWxsLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFuIElQdjYgYWRkcmVzcy4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGlzQXJyYXkoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBhcnJheS4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGlzQXJyYXlBY2Nlc3NpYmxlKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYW4gYXJyYXkgb3IgYW4gYXJyYXktYWNjZXNzaWJsZSBvYmplY3QuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBpc0NhbGxhYmxlKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgRGV0ZXJtaW5lcyB0aGF0IHRoZSBwcm92aWRlZCB2YWx1ZSBpcyBjYWxsYWJsZS4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGlzQ291bnRhYmxlKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgY291bnRhYmxlLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gaXNJbnN0YW5jZU9mKHN0cmluZyAkY2xhc3NOYW1lLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGluc3RhbmNlIG9mIGdpdmVuIGNsYXNzLW5hbWUuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBpc0pzb25TdHJpbmcoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgdmFsaWQganNvbiBzdHJpbmcuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBpc09iamVjdChzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIERldGVybWluZXMgdGhhdCB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgYW4gb2JqZWN0LgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gaXNSZXNvdXJjZShzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGEgcmVzb3VyY2UuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBpc1RyYXZlcnNhYmxlKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYW4gYXJyYXkgb3IgYSB0cmF2ZXJzYWJsZSBvYmplY3QuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBrZXlFeGlzdHMoc3RyaW5nfGludCAka2V5LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGtleSBleGlzdHMgaW4gYW4gYXJyYXkuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBrZXlJc3NldChzdHJpbmd8aW50ICRrZXksIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQga2V5IGV4aXN0cyBpbiBhbiBhcnJheS9hcnJheS1hY2Nlc3NpYmxlIG9iamVjdCB1c2luZyBpc3NldCgpLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24ga2V5Tm90RXhpc3RzKHN0cmluZ3xpbnQgJGtleSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBrZXkgZG9lcyBub3QgZXhpc3QgaW4gYW4gYXJyYXkuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBsZW5ndGgoaW50ICRsZW5ndGgsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgc3RyaW5nICRlbmNvZGluZyA9ICd1dGY4JykgQXNzZXJ0IHRoYXQgc3RyaW5nIGhhcyBhIGdpdmVuIGxlbmd0aC4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGxlc3NPckVxdWFsVGhhbihtaXhlZCAkbGltaXQsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgRGV0ZXJtaW5lcyBpZiB0aGUgdmFsdWUgaXMgbGVzcyBvciBlcXVhbCB0aGFuIGdpdmVuIGxpbWl0LgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gbGVzc1RoYW4obWl4ZWQgJGxpbWl0LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIERldGVybWluZXMgaWYgdGhlIHZhbHVlIGlzIGxlc3MgdGhhbiBnaXZlbiBsaW1pdC4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIG1heChtaXhlZCAkbWF4VmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgYSBudW1iZXIgaXMgc21hbGxlciBhcyBhIGdpdmVuIGxpbWl0LgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gbWF4Q291bnQoaW50ICRjb3VudCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgY291bnRhYmxlIGhhdmUgYXQgbW9zdCAkY291bnQgZWxlbWVudHMuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBtYXhMZW5ndGgoaW50ICRtYXhMZW5ndGgsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgc3RyaW5nICRlbmNvZGluZyA9ICd1dGY4JykgQXNzZXJ0IHRoYXQgc3RyaW5nIHZhbHVlIGlzIG5vdCBsb25nZXIgdGhhbiAkbWF4TGVuZ3RoIGNoYXJzLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gbWV0aG9kRXhpc3RzKG1peGVkICRvYmplY3QsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgRGV0ZXJtaW5lcyB0aGF0IHRoZSBuYW1lZCBtZXRob2QgaXMgZGVmaW5lZCBpbiB0aGUgcHJvdmlkZWQgb2JqZWN0LgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gbWluKG1peGVkICRtaW5WYWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBhIHZhbHVlIGlzIGF0IGxlYXN0IGFzIGJpZyBhcyBhIGdpdmVuIGxpbWl0LgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gbWluQ291bnQoaW50ICRjb3VudCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgY291bnRhYmxlIGhhdmUgYXQgbGVhc3QgJGNvdW50IGVsZW1lbnRzLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gbWluTGVuZ3RoKGludCAkbWluTGVuZ3RoLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwsIHN0cmluZyAkZW5jb2RpbmcgPSAndXRmOCcpIEFzc2VydCB0aGF0IGEgc3RyaW5nIGlzIGF0IGxlYXN0ICRtaW5MZW5ndGggY2hhcnMgbG9uZy4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIG5vQ29udGVudChzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGVtcHR5LgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gbm90Qmxhbmsoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBub3QgYmxhbmsuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBub3RDb250YWlucyhzdHJpbmcgJG5lZWRsZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsLCBzdHJpbmcgJGVuY29kaW5nID0gJ3V0ZjgnKSBBc3NlcnQgdGhhdCBzdHJpbmcgZG9lcyBub3QgY29udGFpbnMgYSBzZXF1ZW5jZSBvZiBjaGFycy4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIG5vdEVtcHR5KHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgbm90IGVtcHR5LgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gbm90RW1wdHlLZXkoc3RyaW5nfGludCAka2V5LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGtleSBleGlzdHMgaW4gYW4gYXJyYXkvYXJyYXktYWNjZXNzaWJsZSBvYmplY3QgYW5kIGl0cyB2YWx1ZSBpcyBub3QgZW1wdHkuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBub3RFcShtaXhlZCAkdmFsdWUyLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHR3byB2YWx1ZXMgYXJlIG5vdCBlcXVhbCAodXNpbmcgPT0pLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gbm90SW5BcnJheShhcnJheSAkY2hvaWNlcywgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBub3QgaW4gYXJyYXkgb2YgY2hvaWNlcy4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIG5vdElzSW5zdGFuY2VPZihzdHJpbmcgJGNsYXNzTmFtZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBub3QgaW5zdGFuY2Ugb2YgZ2l2ZW4gY2xhc3MtbmFtZS4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIG5vdE51bGwoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBub3QgbnVsbC4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIG5vdFJlZ2V4KHN0cmluZyAkcGF0dGVybiwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBkb2VzIG5vdCBtYXRjaCBhIHJlZ2V4LgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gbm90U2FtZShtaXhlZCAkdmFsdWUyLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHR3byB2YWx1ZXMgYXJlIG5vdCB0aGUgc2FtZSAodXNpbmcgPT09KS4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIG51bGwoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gbnVtZXJpYyhzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIG51bWVyaWMuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBvYmplY3RPckNsYXNzKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCwgb3IgYSBjbGFzcyB0aGF0IGV4aXN0cy4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIHBocFZlcnNpb24obWl4ZWQgJHZlcnNpb24sIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IG9uIFBIUCB2ZXJzaW9uLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gcHJvcGVydGllc0V4aXN0KGFycmF5ICRwcm9wZXJ0aWVzLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3Qgb3IgY2xhc3MsIGFuZCB0aGF0IHRoZSBwcm9wZXJ0aWVzIGFsbCBleGlzdC4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIHByb3BlcnR5RXhpc3RzKHN0cmluZyAkcHJvcGVydHksIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCBvciBjbGFzcywgYW5kIHRoYXQgdGhlIHByb3BlcnR5IGV4aXN0cy4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIHJhbmdlKG1peGVkICRtaW5WYWx1ZSwgbWl4ZWQgJG1heFZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGluIHJhbmdlIG9mIG51bWJlcnMuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiByZWFkYWJsZShzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSB2YWx1ZSBpcyBzb21ldGhpbmcgcmVhZGFibGUuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiByZWdleChzdHJpbmcgJHBhdHRlcm4sIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgbWF0Y2hlcyBhIHJlZ2V4LgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gc2FtZShtaXhlZCAkdmFsdWUyLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHR3byB2YWx1ZXMgYXJlIHRoZSBzYW1lICh1c2luZyA9PT0pLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gc2F0aXNmeShjYWxsYWJsZSAkY2FsbGJhY2ssIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIHZhbGlkIGFjY29yZGluZyB0byBhIGNhbGxiYWNrLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gc2NhbGFyKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYSBQSFAgc2NhbGFyLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gc3RhcnRzV2l0aChzdHJpbmcgJG5lZWRsZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsLCBzdHJpbmcgJGVuY29kaW5nID0gJ3V0ZjgnKSBBc3NlcnQgdGhhdCBzdHJpbmcgc3RhcnRzIHdpdGggYSBzZXF1ZW5jZSBvZiBjaGFycy4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIHN0cmluZyhzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGEgc3RyaW5nLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gc3ViY2xhc3NPZihzdHJpbmcgJGNsYXNzTmFtZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBzdWJjbGFzcyBvZiBnaXZlbiBjbGFzcy1uYW1lLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gdHJ1ZShzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSB2YWx1ZSBpcyBib29sZWFuIFRydWUuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiB1bmlxdWVWYWx1ZXMoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZXMgaW4gYXJyYXkgYXJlIHVuaXF1ZSAodXNpbmcgc3RyaWN0IGVxdWFsaXR5KS4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIHVybChzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFuIFVSTC4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIHV1aWQoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgdmFsaWQgVVVJRC4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIHZlcnNpb24oc3RyaW5nICRvcGVyYXRvciwgc3RyaW5nICR2ZXJzaW9uMiwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgY29tcGFyaXNvbiBvZiB0d28gdmVyc2lvbnMuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiB3cml0ZWFibGUoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgdmFsdWUgaXMgc29tZXRoaW5nIHdyaXRlYWJsZS4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGFsbCgpIFN3aXRjaCBjaGFpbiBpbnRvIHZhbGlkYXRpb24gbW9kZSBmb3IgYW4gYXJyYXkgb2YgdmFsdWVzLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gbnVsbE9yKCkgU3dpdGNoIGNoYWluIGludG8gbW9kZSBhbGxvd2luZyBudWxscywgaWdub3JpbmcgZnVydGhlciBhc3NlcnRpb25zLgogKi8KY2xhc3MgTGF6eUFzc2VydGlvbgp7CiAgICBwcml2YXRlICRjdXJyZW50Q2hhaW5GYWlsZWQgPSBmYWxzZTsKICAgIHByaXZhdGUgJGFsd2F5c1RyeUFsbCA9IGZhbHNlOwogICAgcHJpdmF0ZSAkdGhpc0NoYWluVHJ5QWxsID0gZmFsc2U7CiAgICBwcml2YXRlICRjdXJyZW50Q2hhaW47CiAgICBwcml2YXRlICRlcnJvcnMgPSBbXTsKCiAgICAvKiogQHZhciBzdHJpbmcgVGhlIGNsYXNzIHRvIHVzZSBhcyBBc3NlcnRpb25DaGFpbiBmYWN0b3J5ICovCiAgICBwcml2YXRlICRhc3NlcnRDbGFzcyA9IEFzc2VydDo6Y2xhc3M7CgogICAgLyoqIEB2YXIgc3RyaW5nfExhenlBc3NlcnRpb25FeGNlcHRpb24gVGhlIGNsYXNzIHRvIHVzZSBmb3IgZXhjZXB0aW9ucyAqLwogICAgcHJpdmF0ZSAkZXhjZXB0aW9uQ2xhc3MgPSBMYXp5QXNzZXJ0aW9uRXhjZXB0aW9uOjpjbGFzczsKCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkZGVmYXVsdE1lc3NhZ2UKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGhhdCgkdmFsdWUsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwsICRkZWZhdWx0TWVzc2FnZSA9IG51bGwpCiAgICB7CiAgICAgICAgJHRoaXMtPmN1cnJlbnRDaGFpbkZhaWxlZCA9IGZhbHNlOwogICAgICAgICR0aGlzLT50aGlzQ2hhaW5UcnlBbGwgPSBmYWxzZTsKICAgICAgICAkYXNzZXJ0Q2xhc3MgPSAkdGhpcy0+YXNzZXJ0Q2xhc3M7CiAgICAgICAgJHRoaXMtPmN1cnJlbnRDaGFpbiA9ICRhc3NlcnRDbGFzczo6dGhhdCgkdmFsdWUsICRkZWZhdWx0TWVzc2FnZSwgJHByb3BlcnR5UGF0aCk7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0cnlBbGwoKQogICAgewogICAgICAgIGlmICghJHRoaXMtPmN1cnJlbnRDaGFpbikgewogICAgICAgICAgICAkdGhpcy0+YWx3YXlzVHJ5QWxsID0gdHJ1ZTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT50aGlzQ2hhaW5UcnlBbGwgPSB0cnVlOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXRob2QKICAgICAqIEBwYXJhbSBhcnJheSAkYXJncwogICAgICoKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NhbGwoJG1ldGhvZCwgJGFyZ3MpCiAgICB7CiAgICAgICAgaWYgKGZhbHNlID09PSAkdGhpcy0+YWx3YXlzVHJ5QWxsCiAgICAgICAgICAgICYmIGZhbHNlID09PSAkdGhpcy0+dGhpc0NoYWluVHJ5QWxsCiAgICAgICAgICAgICYmIHRydWUgPT09ICR0aGlzLT5jdXJyZW50Q2hhaW5GYWlsZWQKICAgICAgICApIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgXGNhbGxfdXNlcl9mdW5jX2FycmF5KFskdGhpcy0+Y3VycmVudENoYWluLCAkbWV0aG9kXSwgJGFyZ3MpOwogICAgICAgIH0gY2F0Y2ggKEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAkdGhpcy0+ZXJyb3JzW10gPSAkZTsKICAgICAgICAgICAgJHRoaXMtPmN1cnJlbnRDaGFpbkZhaWxlZCA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGhyb3dzIExhenlBc3NlcnRpb25FeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHZlcmlmeU5vdygpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5lcnJvcnMpIHsKICAgICAgICAgICAgdGhyb3cgXGNhbGxfdXNlcl9mdW5jKFskdGhpcy0+ZXhjZXB0aW9uQ2xhc3MsICdmcm9tRXJyb3JzJ10sICR0aGlzLT5lcnJvcnMpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjbGFzc05hbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0QXNzZXJ0Q2xhc3Moc3RyaW5nICRjbGFzc05hbWUpOiBMYXp5QXNzZXJ0aW9uCiAgICB7CiAgICAgICAgaWYgKEFzc2VydDo6Y2xhc3MgIT09ICRjbGFzc05hbWUgJiYgIVxpc19zdWJjbGFzc19vZigkY2xhc3NOYW1lLCBBc3NlcnQ6OmNsYXNzKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgTG9naWNFeGNlcHRpb24oJGNsYXNzTmFtZS4nIGlzIG5vdCAoYSBzdWJjbGFzcyBvZikgJy5Bc3NlcnQ6OmNsYXNzKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5hc3NlcnRDbGFzcyA9ICRjbGFzc05hbWU7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzTmFtZQogICAgICoKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRFeGNlcHRpb25DbGFzcyhzdHJpbmcgJGNsYXNzTmFtZSk6IExhenlBc3NlcnRpb24KICAgIHsKICAgICAgICBpZiAoTGF6eUFzc2VydGlvbkV4Y2VwdGlvbjo6Y2xhc3MgIT09ICRjbGFzc05hbWUgJiYgIVxpc19zdWJjbGFzc19vZigkY2xhc3NOYW1lLCBMYXp5QXNzZXJ0aW9uRXhjZXB0aW9uOjpjbGFzcykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IExvZ2ljRXhjZXB0aW9uKCRjbGFzc05hbWUuJyBpcyBub3QgKGEgc3ViY2xhc3Mgb2YpICcuTGF6eUFzc2VydGlvbkV4Y2VwdGlvbjo6Y2xhc3MpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmV4Y2VwdGlvbkNsYXNzID0gJGNsYXNzTmFtZTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/beberlei/assert/lib/Assert/LazyAssertionException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBc3NlcnQKICoKICogTElDRU5TRQogKgogKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE1JVCBsaWNlbnNlIHRoYXQgaXMgYnVuZGxlZAogKiB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLnR4dC4KICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8KICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbAogKiB0byBrb250YWt0QGJlYmVybGVpLmRlIHNvIEkgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS4KICovCgpuYW1lc3BhY2UgQXNzZXJ0OwoKY2xhc3MgTGF6eUFzc2VydGlvbkV4Y2VwdGlvbiBleHRlbmRzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgp7CiAgICAvKioKICAgICAqIEB2YXIgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uW10KICAgICAqLwogICAgcHJpdmF0ZSAkZXJyb3JzID0gW107CgogICAgLyoqCiAgICAgKiBAcGFyYW0gSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uW10gJGVycm9ycwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21FcnJvcnMoYXJyYXkgJGVycm9ycyk6IHNlbGYKICAgIHsKICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKCdUaGUgZm9sbG93aW5nICVkIGFzc2VydGlvbnMgZmFpbGVkOicsIFxjb3VudCgkZXJyb3JzKSkuIlxuIjsKCiAgICAgICAgJGkgPSAxOwogICAgICAgIGZvcmVhY2ggKCRlcnJvcnMgYXMgJGVycm9yKSB7CiAgICAgICAgICAgICRtZXNzYWdlIC49IFxzcHJpbnRmKCIlZCkgJXM6ICVzXG4iLCAkaSsrLCAkZXJyb3ItPmdldFByb3BlcnR5UGF0aCgpLCAkZXJyb3ItPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHN0YXRpYygkbWVzc2FnZSwgJGVycm9ycyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRtZXNzYWdlLCBhcnJheSAkZXJyb3JzKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJG1lc3NhZ2UsIDAsIG51bGwsIG51bGwpOwoKICAgICAgICAkdGhpcy0+ZXJyb3JzID0gJGVycm9yczsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEVycm9yRXhjZXB0aW9ucygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZXJyb3JzOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/beberlei/assert/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDExLTIwMTMsIEJlbmphbWluIEViZXJsZWkKQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAptb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKCi0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAogIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/brick/math/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/brick/math/CHANGELOG.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBDaGFuZ2Vsb2cKCkFsbCBub3RhYmxlIGNoYW5nZXMgdG8gdGhpcyBwcm9qZWN0IHdpbGwgYmUgZG9jdW1lbnRlZCBpbiB0aGlzIGZpbGUuCgojIyBbMC45LjNdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjkuMykgLSAyMDIxLTA4LTE1Cgrwn5qAICoqQ29tcGF0aWJpbGl0eSB3aXRoIFBIUCA4LjEqKgoKLSBTdXBwb3J0IGZvciBjdXN0b20gb2JqZWN0IHNlcmlhbGl6YXRpb247IHRoaXMgcmVtb3ZlcyBhIHdhcm5pbmcgb24gUEhQIDguMSBkdWUgdG8gdGhlIGBTZXJpYWxpemFibGVgIGludGVyZmFjZSBiZWluZyBkZXByZWNhdGVkICh0aGFua3MgQFRSb3dib3RoYW0pCgojIyBbMC45LjJdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjkuMikgLSAyMDIxLTAxLTIwCgrwn5CbICoqQnVnIGZpeCoqCgotIEluY29ycmVjdCByZXN1bHRzIGNvdWxkIGJlIHJldHVybmVkIHdoZW4gdXNpbmcgdGhlIEJDTWF0aCBjYWxjdWxhdG9yLCB3aXRoIGEgZGVmYXVsdCBzY2FsZSBzZXQgd2l0aCBgYmNzY2FsZSgpYCwgb24gUEhQID49IDcuMiAoIzU1KS4KCiMjIFswLjkuMV0oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuOS4xKSAtIDIwMjAtMDgtMTkKCuKcqCBOZXcgZmVhdHVyZXMKCi0gYEJpZ0ludGVnZXI6Om5vdCgpYCByZXR1cm5zIHRoZSBiaXR3aXNlIGBOT1RgIHZhbHVlCgrwn5CbICoqQnVnIGZpeGVzKioKCi0gYEJpZ0ludGVnZXI6OnRvQnl0ZXMoKWAgY291bGQgcmV0dXJuIGFuIGluY29ycmVjdCBiaW5hcnkgcmVwcmVzZW50YXRpb24gZm9yIHNvbWUgbnVtYmVycwotIFRoZSBiaXR3aXNlIG9wZXJhdGlvbnMgYGFuZCgpYCwgYG9yKClgLCBgeG9yKClgIG9uIGBCaWdJbnRlZ2VyYCBjb3VsZCByZXR1cm4gYW4gaW5jb3JyZWN0IHJlc3VsdCB3aGVuIHRoZSBHTVAgZXh0ZW5zaW9uIGlzIG5vdCBhdmFpbGFibGUKCiMjIFswLjkuMF0oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuOS4wKSAtIDIwMjAtMDgtMTgKCvCfkYwgKipJbXByb3ZlbWVudHMqKgoKLSBgQmlnTnVtYmVyOjpvZigpYCBub3cgYWNjZXB0cyBgLjEyM2AgYW5kIGAxMjMuYCBmb3JtYXRzLCBib3RoIG9mIHdoaWNoIHJldHVybiBhIGBCaWdEZWNpbWFsYAoK8J+SpSAqKkJyZWFraW5nIGNoYW5nZXMqKgoKLSBEZXByZWNhdGVkIG1ldGhvZCBgQmlnSW50ZWdlcjo6cG93ZXJNb2QoKWAgaGFzIGJlZW4gcmVtb3ZlZCAtIHVzZSBgbW9kUG93KClgIGluc3RlYWQKLSBEZXByZWNhdGVkIG1ldGhvZCBgQmlnSW50ZWdlcjo6cGFyc2UoKWAgaGFzIGJlZW4gcmVtb3ZlZCAtIHVzZSBgZnJvbUJhc2UoKWAgaW5zdGVhZAoKIyMgWzAuOC4xN10oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuOC4xNykgLSAyMDIwLTA4LTE5Cgrwn5CbICoqQnVnIGZpeCoqCgotIGBCaWdJbnRlZ2VyOjp0b0J5dGVzKClgIGNvdWxkIHJldHVybiBhbiBpbmNvcnJlY3QgYmluYXJ5IHJlcHJlc2VudGF0aW9uIGZvciBzb21lIG51bWJlcnMKLSBUaGUgYml0d2lzZSBvcGVyYXRpb25zIGBhbmQoKWAsIGBvcigpYCwgYHhvcigpYCBvbiBgQmlnSW50ZWdlcmAgY291bGQgcmV0dXJuIGFuIGluY29ycmVjdCByZXN1bHQgd2hlbiB0aGUgR01QIGV4dGVuc2lvbiBpcyBub3QgYXZhaWxhYmxlCgojIyBbMC44LjE2XShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC44LjE2KSAtIDIwMjAtMDgtMTgKCvCfmpEgKipDcml0aWNhbCBmaXgqKgoKLSBUaGlzIHZlcnNpb24gcmVpbnRyb2R1Y2VzIHRoZSBkZXByZWNhdGVkIGBCaWdJbnRlZ2VyOjpwYXJzZSgpYCBtZXRob2QsIHRoYXQgaGFzIGJlZW4gcmVtb3ZlZCBieSBtaXN0YWtlIGluIHZlcnNpb24gYDAuOC45YCBhbmQgc2hvdWxkIGhhdmUgbGFzdGVkIGZvciB0aGUgd2hvbGUgYDAuOGAgcmVsZWFzZSBjeWNsZS4KCuKcqCAqKk5ldyBmZWF0dXJlcyoqCgotIGBCaWdJbnRlZ2VyOjptb2RJbnZlcnNlKClgIGNhbGN1bGF0ZXMgYSBtb2R1bGFyIG11bHRpcGxpY2F0aXZlIGludmVyc2UKLSBgQmlnSW50ZWdlcjo6ZnJvbUJ5dGVzKClgIGNyZWF0ZXMgYSBgQmlnSW50ZWdlcmAgZnJvbSBhIGJ5dGUgc3RyaW5nCi0gYEJpZ0ludGVnZXI6OnRvQnl0ZXMoKWAgY29udmVydHMgYSBgQmlnSW50ZWdlcmAgdG8gYSBieXRlIHN0cmluZwotIGBCaWdJbnRlZ2VyOjpyYW5kb21CaXRzKClgIGNyZWF0ZXMgYSBwc2V1ZG8tcmFuZG9tIGBCaWdJbnRlZ2VyYCBvZiBhIGdpdmVuIGJpdCBsZW5ndGgKLSBgQmlnSW50ZWdlcjo6cmFuZG9tUmFuZ2UoKWAgY3JlYXRlcyBhIHBzZXVkby1yYW5kb20gYEJpZ0ludGVnZXJgIGJldHdlZW4gdHdvIGJvdW5kcwoK8J+SqSAqKkRlcHJlY2F0aW9ucyoqCgotIGBCaWdJbnRlZ2VyOjpwb3dlck1vZCgpYCBpcyBub3cgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgYG1vZFBvdygpYAoKIyMgWzAuOC4xNV0oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuOC4xNSkgLSAyMDIwLTA0LTE1Cgrwn5CbICoqRml4ZXMqKgoKLSBhZGRlZCBtaXNzaW5nIGBleHQtanNvbmAgcmVxdWlyZW1lbnQsIGR1ZSB0byBgQmlnTnVtYmVyYCBpbXBsZW1lbnRpbmcgYEpzb25TZXJpYWxpemFibGVgCgrimqHvuI8gKipPcHRpbWl6YXRpb25zKioKCi0gYWRkaXRpb25hbCBvcHRpbWl6YXRpb24gaW4gYEJpZ0ludGVnZXI6OnJlbWFpbmRlcigpYAoKIyMgWzAuOC4xNF0oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuOC4xNCkgLSAyMDIwLTAyLTE4CgrinKggKipOZXcgZmVhdHVyZXMqKgoKLSBgQmlnSW50ZWdlcjo6Z2V0TG93ZXN0U2V0Qml0KClgIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSByaWdodG1vc3Qgb25lIGJpdAoKIyMgWzAuOC4xM10oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuOC4xMykgLSAyMDIwLTAyLTE2CgrinKggKipOZXcgZmVhdHVyZXMqKgoKLSBgQmlnSW50ZWdlcjo6aXNFdmVuKClgIHRlc3RzIHdoZXRoZXIgdGhlIG51bWJlciBpcyBldmVuCi0gYEJpZ0ludGVnZXI6OmlzT2RkKClgIHRlc3RzIHdoZXRoZXIgdGhlIG51bWJlciBpcyBvZGQKLSBgQmlnSW50ZWdlcjo6dGVzdEJpdCgpYCB0ZXN0cyBpZiBhIGJpdCBpcyBzZXQKLSBgQmlnSW50ZWdlcjo6Z2V0Qml0TGVuZ3RoKClgIHJldHVybnMgdGhlIG51bWJlciBvZiBiaXRzIGluIHRoZSBtaW5pbWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBudW1iZXIKCiMjIFswLjguMTJdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjguMTIpIC0gMjAyMC0wMi0wMwoK8J+boO+4jyAqKk1haW50ZW5hbmNlIHJlbGVhc2UqKgoKQ2xhc3NlcyBhcmUgbm93IGFubm90YXRlZCBmb3IgYmV0dGVyIHN0YXRpYyBhbmFseXNpcyB3aXRoIFtwc2FsbV0oaHR0cHM6Ly9wc2FsbS5kZXYvKS4KClRoaXMgaXMgYSBtYWludGVuYW5jZSByZWxlYXNlOiBubyBidWcgZml4ZXMsIG5vIG5ldyBmZWF0dXJlcywgbm8gYnJlYWtpbmcgY2hhbmdlcy4KCiMjIFswLjguMTFdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjguMTEpIC0gMjAyMC0wMS0yMwoK4pyoICoqTmV3IGZlYXR1cmUqKgoKYEJpZ0ludGVnZXI6OnBvd2VyTW9kKClgIHBlcmZvcm1zIGEgcG93ZXItd2l0aC1tb2R1bG8gb3BlcmF0aW9uLiBVc2VmdWwgZm9yIGNyeXB0by4KCiMjIFswLjguMTBdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjguMTApIC0gMjAyMC0wMS0yMQoK4pyoICoqTmV3IGZlYXR1cmUqKgoKYEJpZ0ludGVnZXI6Om1vZCgpYCByZXR1cm5zIHRoZSAqKm1vZHVsbyoqIG9mIHR3byBudW1iZXJzLiBUaGUgKm1vZHVsbyogZGlmZmVycyBmcm9tIHRoZSAqcmVtYWluZGVyKiB3aGVuIHRoZSBzaWducyBvZiB0aGUgb3BlcmFuZHMgYXJlIGRpZmZlcmVudC4KCiMjIFswLjguOV0oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuOC45KSAtIDIwMjAtMDEtMDgKCuKaoe+4jyAqKlBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyoqCgpBIGZldyBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gYEJpZ0ludGVnZXJgIGFuZCBgQmlnRGVjaW1hbGAgd2hlbiBvbmUgb2YgdGhlIG9wZXJhbmRzIGNhbiBiZSByZXR1cm5lZCBhcyBpcy4gVGhhbmtzIHRvIEB0b210b21zZW4gaW4gIzI0LgoKIyMgWzAuOC44XShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC44LjgpIC0gMjAxOS0wNC0yNQoK8J+QmyAqKkJ1ZyBmaXhlcyoqCgotIGBCaWdJbnRlZ2VyOjp0b0Jhc2UoKWAgY291bGQgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBmb3IgemVybyB2YWx1ZXMgKEJDTWF0aCAmIE5hdGl2ZSBjYWxjdWxhdG9ycyBvbmx5LCBHTVAgY2FsY3VsYXRvciB1bmFmZmVjdGVkKQoK4pyoICoqTmV3IGZlYXR1cmVzKioKCi0gYEJpZ0ludGVnZXI6OnRvQXJiaXRyYXJ5QmFzZSgpYCBjb252ZXJ0cyBhIG51bWJlciB0byBhbiBhcmJpdHJhcnkgYmFzZSwgdXNpbmcgYSBjdXN0b20gYWxwaGFiZXQKLSBgQmlnSW50ZWdlcjo6ZnJvbUFyYml0cmFyeUJhc2UoKWAgY29udmVydHMgYSBzdHJpbmcgaW4gYW4gYXJiaXRyYXJ5IGJhc2UsIHVzaW5nIGEgY3VzdG9tIGFscGhhYmV0LCBiYWNrIHRvIGEgbnVtYmVyCgpUaGVzZSBtZXRob2RzIGNhbiBiZSB1c2VkIGFzIHRoZSBmb3VuZGF0aW9uIHRvIGNvbnZlcnQgc3RyaW5ncyBiZXR3ZWVuIGRpZmZlcmVudCBiYXNlcy9hbHBoYWJldHMsIHVzaW5nIEJpZ0ludGVnZXIgYXMgYW4gaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uLgoK8J+SqSAqKkRlcHJlY2F0aW9ucyoqCgotIGBCaWdJbnRlZ2VyOjpwYXJzZSgpYCBpcyBub3cgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgYGZyb21CYXNlKClgCgpgQmlnSW50ZWdlcjo6ZnJvbUJhc2UoKWAgd29ya3MgdGhlIHNhbWUgd2F5IGFzIGBwYXJzZSgpYCwgd2l0aCAyIG1pbm9yIGRpZmZlcmVuY2VzOgoKLSB0aGUgYCRiYXNlYCBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQsIGl0IGRvZXMgbm90IGRlZmF1bHQgdG8gYDEwYAotIGl0IHRocm93cyBhIGBOdW1iZXJGb3JtYXRFeGNlcHRpb25gIGluc3RlYWQgb2YgYW4gYEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbmAgd2hlbiB0aGUgbnVtYmVyIGlzIG1hbGZvcm1lZAoKIyMgWzAuOC43XShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC44LjcpIC0gMjAxOS0wNC0yMAoKKipJbXByb3ZlbWVudHMqKgoKLSBTYWZlciBjb252ZXJzaW9uIGZyb20gYGZsb2F0YCB3aGVuIHVzaW5nIGN1c3RvbSBsb2NhbGVzCi0gKipNdWNoIGZhc3RlcioqIGBOYXRpdmVDYWxjdWxhdG9yYCBpbXBsZW1lbnRhdGlvbiDwn5qACgpZb3UgY2FuIGV4cGVjdCAqKmF0IGxlYXN0IGEgM3ggcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQqKiBmb3IgY29tbW9uIGFyaXRobWV0aWMgb3BlcmF0aW9ucyB3aGVuIHVzaW5nIHRoZSBsaWJyYXJ5IG9uIHN5c3RlbXMgd2l0aG91dCBHTVAgb3IgQkNNYXRoOyBpdCBnZXRzIGV4cG9uZW50aWFsbHkgZmFzdGVyIG9uIG11bHRpcGxpY2F0aW9ucyB3aXRoIGEgaGlnaCBudW1iZXIgb2YgZGlnaXRzLiBUaGlzIGlzIGR1ZSB0byBjYWxjdWxhdGlvbnMgbm93IGJlaW5nIHBlcmZvcm1lZCBvbiB3aG9sZSBibG9ja3Mgb2YgZGlnaXRzICh0aGUgYmxvY2sgc2l6ZSBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLCAzMi1iaXQgb3IgNjQtYml0KSBpbnN0ZWFkIG9mIGRpZ2l0LWJ5LWRpZ2l0IGFzIGJlZm9yZS4KCiMjIFswLjguNl0oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuOC42KSAtIDIwMTktMDQtMTEKCioqTmV3IG1ldGhvZCoqCgpgQmlnTnVtYmVyOjpzdW0oKWAgcmV0dXJucyB0aGUgc3VtIG9mIG9uZSBvciBtb3JlIG51bWJlcnMuCgojIyBbMC44LjVdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjguNSkgLSAyMDE5LTAyLTEyCgoqKkJ1ZyBmaXgqKjogYG9mKClgIGZhY3RvcnkgbWV0aG9kcyBjb3VsZCBmYWlsIHdoZW4gcGFzc2luZyBhIGBmbG9hdGAgaW4gZW52aXJvbm1lbnRzIHVzaW5nIGEgYExDX05VTUVSSUNgIGxvY2FsZSB3aXRoIGEgZGVjaW1hbCBzZXBhcmF0b3Igb3RoZXIgdGhhbiBgJy4nYCAoIzIwKS4KClRoYW5rcyBAbWFub3dhcmsg8J+RjQoKIyMgWzAuOC40XShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC44LjQpIC0gMjAxOC0xMi0wNwoKKipOZXcgbWV0aG9kKioKCmBCaWdEZWNpbWFsOjpzcXJ0KClgIGNhbGN1bGF0ZXMgdGhlIHNxdWFyZSByb290IG9mIGEgZGVjaW1hbCBudW1iZXIsIHRvIGEgZ2l2ZW4gc2NhbGUuCgojIyBbMC44LjNdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjguMykgLSAyMDE4LTEyLTA2CgoqKk5ldyBtZXRob2QqKgoKYEJpZ0ludGVnZXI6OnNxcnQoKWAgY2FsY3VsYXRlcyB0aGUgc3F1YXJlIHJvb3Qgb2YgYSBudW1iZXIgKHRoYW5rcyBAcGV0ZXIyNzlrKS4KCioqTmV3IGV4Y2VwdGlvbioqCgpgTmVnYXRpdmVOdW1iZXJFeGNlcHRpb25gIGlzIHRocm93biB3aGVuIGNhbGxpbmcgYHNxcnQoKWAgb24gYSBuZWdhdGl2ZSBudW1iZXIuCgojIyBbMC44LjJdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjguMikgLSAyMDE4LTExLTA4CgoqKlBlcmZvcm1hbmNlIHVwZGF0ZSoqCgotIEZ1cnRoZXIgaW1wcm92ZW1lbnQgb2YgYHRvSW50KClgIHBlcmZvcm1hbmNlCi0gYE5hdGl2ZUNhbGN1bGF0b3JgIGNhbiBub3cgcGVyZm9ybSBzb21lIG11bHRpcGxpY2F0aW9ucyBtb3JlIGVmZmljaWVudGx5CgojIyBbMC44LjFdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjguMSkgLSAyMDE4LTExLTA3CgpQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gb2YgYHRvSW50KClgIG1ldGhvZHMuCgojIyBbMC44LjBdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjguMCkgLSAyMDE4LTEwLTEzCgoqKkJyZWFraW5nIGNoYW5nZXMqKgoKVGhlIGZvbGxvd2luZyBkZXByZWNhdGVkIG1ldGhvZHMgaGF2ZSBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgbmV3IG1ldGhvZCBuYW1lIGluc3RlYWQ6Cgp8IE1ldGhvZCByZW1vdmVkIHwgUmVwbGFjZW1lbnQgbWV0aG9kIHwKfCAtLS0gfCAtLS0gfAp8IGBCaWdEZWNpbWFsOjpnZXRJbnRlZ3JhbCgpYCB8IGBCaWdEZWNpbWFsOjpnZXRJbnRlZ3JhbFBhcnQoKWAgfAp8IGBCaWdEZWNpbWFsOjpnZXRGcmFjdGlvbigpYCB8IGBCaWdEZWNpbWFsOjpnZXRGcmFjdGlvbmFsUGFydCgpYCB8CgotLS0KCioqTmV3IGZlYXR1cmVzKioKCmBCaWdJbnRlZ2VyYCBoYXMgYmVlbiBhdWdtZW50ZWQgd2l0aCA1IG5ldyBtZXRob2RzIGZvciBiaXR3aXNlIG9wZXJhdGlvbnM6Cgp8IE5ldyBtZXRob2QgfCBEZXNjcmlwdGlvbiB8CnwgLS0tIHwgLS0tIHwKfCBgYW5kKClgIHwgcGVyZm9ybXMgYSBiaXR3aXNlIGBBTkRgIG9wZXJhdGlvbiBvbiB0d28gbnVtYmVycyB8CnwgYG9yKClgIHwgcGVyZm9ybXMgYSBiaXR3aXNlIGBPUmAgb3BlcmF0aW9uIG9uIHR3byBudW1iZXJzIHwKfCBgeG9yKClgIHwgcGVyZm9ybXMgYSBiaXR3aXNlIGBYT1JgIG9wZXJhdGlvbiBvbiB0d28gbnVtYmVycyB8CnwgYHNoaWZ0ZWRMZWZ0KClgIHwgcmV0dXJucyB0aGUgbnVtYmVyIHNoaWZ0ZWQgbGVmdCBieSBhIG51bWJlciBvZiBiaXRzIHwKfCBgc2hpZnRlZFJpZ2h0KClgIHwgcmV0dXJucyB0aGUgbnVtYmVyIHNoaWZ0ZWQgcmlnaHQgYnkgYSBudW1iZXIgb2YgYml0cyB8CgpUaGFua3MgdG8gQERBU1BSaUQg8J+RjQoKIyMgWzAuNy4zXShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC43LjMpIC0gMjAxOC0wOC0yMAoKKipOZXcgbWV0aG9kOioqIGBCaWdEZWNpbWFsOjpoYXNOb25aZXJvRnJhY3Rpb25hbFBhcnQoKWAKCioqUmVuYW1lZC9kZXByZWNhdGVkIG1ldGhvZHM6KioKCi0gYEJpZ0RlY2ltYWw6OmdldEludGVncmFsKClgIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGdldEludGVncmFsUGFydCgpYCBhbmQgaXMgbm93IGRlcHJlY2F0ZWQKLSBgQmlnRGVjaW1hbDo6Z2V0RnJhY3Rpb24oKWAgaGFzIGJlZW4gcmVuYW1lZCB0byBgZ2V0RnJhY3Rpb25hbFBhcnQoKWAgYW5kIGlzIG5vdyBkZXByZWNhdGVkCgojIyBbMC43LjJdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjcuMikgLSAyMDE4LTA3LTIxCgoqKlBlcmZvcm1hbmNlIHVwZGF0ZSoqCgpgQmlnSW50ZWdlcjo6cGFyc2UoKWAgYW5kIGB0b0Jhc2UoKWAgbm93IHVzZSBHTVAncyBidWlsdC1pbiBiYXNlIGNvbnZlcnNpb24gZmVhdHVyZXMgd2hlbiBhdmFpbGFibGUuCgojIyBbMC43LjFdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjcuMSkgLSAyMDE4LTAzLTAxCgpUaGlzIGlzIGEgbWFpbnRlbmFuY2UgcmVsZWFzZSwgbm8gY29kZSBoYXMgYmVlbiBjaGFuZ2VkLgoKLSBXaGVuIGluc3RhbGxlZCB3aXRoIGAtLW5vLWRldmAsIHRoZSBhdXRvbG9hZGVyIGRvZXMgbm90IGF1dG9sb2FkIHRlc3RzIGFueW1vcmUKLSBUZXN0cyBhbmQgb3RoZXIgZmlsZXMgdW5uZWNlc3NhcnkgZm9yIHByb2R1Y3Rpb24gYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIGRpc3QgcGFja2FnZQoKVGhpcyB3aWxsIGhlbHAgbWFrZSBpbnN0YWxsYXRpb25zIG1vcmUgY29tcGFjdC4KCiMjIFswLjcuMF0oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuNy4wKSAtIDIwMTctMTAtMDIKCk1ldGhvZHMgcmVuYW1lZDoKCi0gYEJpZ051bWJlcjpzaWduKClgIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGdldFNpZ24oKWAKLSBgQmlnRGVjaW1hbDo6dW5zY2FsZWRWYWx1ZSgpYCBoYXMgYmVlbiByZW5hbWVkIHRvIGBnZXRVbnNjYWxlZFZhbHVlKClgCi0gYEJpZ0RlY2ltYWw6OnNjYWxlKClgIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGdldFNjYWxlKClgCi0gYEJpZ0RlY2ltYWw6OmludGVncmFsKClgIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGdldEludGVncmFsKClgCi0gYEJpZ0RlY2ltYWw6OmZyYWN0aW9uKClgIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGdldEZyYWN0aW9uKClgCi0gYEJpZ1JhdGlvbmFsOjpudW1lcmF0b3IoKWAgaGFzIGJlZW4gcmVuYW1lZCB0byBgZ2V0TnVtZXJhdG9yKClgCi0gYEJpZ1JhdGlvbmFsOjpkZW5vbWluYXRvcigpYCBoYXMgYmVlbiByZW5hbWVkIHRvIGBnZXREZW5vbWluYXRvcigpYAoKQ2xhc3NlcyByZW5hbWVkOgoKLSBgQXJpdGhtZXRpY0V4Y2VwdGlvbmAgaGFzIGJlZW4gcmVuYW1lZCB0byBgTWF0aEV4Y2VwdGlvbmAKCiMjIFswLjYuMl0oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuNi4yKSAtIDIwMTctMTAtMDIKClRoZSBiYXNlIGNsYXNzIGZvciBhbGwgZXhjZXB0aW9ucyBpcyBub3cgYE1hdGhFeGNlcHRpb25gLgpgQXJpdGhtZXRpY0V4Y2VwdGlvbmAgaGFzIGJlZW4gZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAwLjcuMC4KCiMjIFswLjYuMV0oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuNi4xKSAtIDIwMTctMTAtMDIKCkEgbnVtYmVyIG9mIG1ldGhvZHMgaGF2ZSBiZWVuIHJlbmFtZWQ6CgotIGBCaWdOdW1iZXI6c2lnbigpYCBpcyBkZXByZWNhdGVkOyB1c2UgYGdldFNpZ24oKWAgaW5zdGVhZAotIGBCaWdEZWNpbWFsOjp1bnNjYWxlZFZhbHVlKClgIGlzIGRlcHJlY2F0ZWQ7IHVzZSBgZ2V0VW5zY2FsZWRWYWx1ZSgpYCBpbnN0ZWFkCi0gYEJpZ0RlY2ltYWw6OnNjYWxlKClgIGlzIGRlcHJlY2F0ZWQ7IHVzZSBgZ2V0U2NhbGUoKWAgaW5zdGVhZAotIGBCaWdEZWNpbWFsOjppbnRlZ3JhbCgpYCBpcyBkZXByZWNhdGVkOyB1c2UgYGdldEludGVncmFsKClgIGluc3RlYWQKLSBgQmlnRGVjaW1hbDo6ZnJhY3Rpb24oKWAgaXMgZGVwcmVjYXRlZDsgdXNlIGBnZXRGcmFjdGlvbigpYCBpbnN0ZWFkCi0gYEJpZ1JhdGlvbmFsOjpudW1lcmF0b3IoKWAgaXMgZGVwcmVjYXRlZDsgdXNlIGBnZXROdW1lcmF0b3IoKWAgaW5zdGVhZAotIGBCaWdSYXRpb25hbDo6ZGVub21pbmF0b3IoKWAgaXMgZGVwcmVjYXRlZDsgdXNlIGBnZXREZW5vbWluYXRvcigpYCBpbnN0ZWFkCgpUaGUgb2xkIG1ldGhvZHMgd2lsbCBiZSByZW1vdmVkIGluIHZlcnNpb24gMC43LjAuCgojIyBbMC42LjBdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjYuMCkgLSAyMDE3LTA4LTI1CgotIE1pbmltdW0gUEhQIHZlcnNpb24gaXMgbm93IFs3LjFdKGh0dHBzOi8vZ29waHA3MS5vcmcvKTsgZm9yIFBIUCA1LjYgYW5kIFBIUCA3LjAgc3VwcG9ydCwgdXNlIHZlcnNpb24gYDAuNWAKLSBEZXByZWNhdGVkIG1ldGhvZCBgQmlnRGVjaW1hbDo6d2l0aFNjYWxlKClgIGhhcyBiZWVuIHJlbW92ZWQ7IHVzZSBgdG9TY2FsZSgpYCBpbnN0ZWFkCi0gTWV0aG9kIGBCaWdOdW1iZXI6OnRvSW50ZWdlcigpYCBoYXMgYmVlbiByZW5hbWVkIHRvIGB0b0ludCgpYAoKIyMgWzAuNS40XShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC41LjQpIC0gMjAxNi0xMC0xNwoKYEJpZ051bWJlcmAgY2xhc3NlcyBub3cgaW1wbGVtZW50IFtKc29uU2VyaWFsaXphYmxlXShodHRwOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuanNvbnNlcmlhbGl6YWJsZS5waHApLgpUaGUgSlNPTiBvdXRwdXQgaXMgYWx3YXlzIGEgc3RyaW5nLgoKIyMgWzAuNS4zXShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC41LjMpIC0gMjAxNi0wMy0zMQoKVGhpcyBpcyBhIGJ1Z2ZpeCByZWxlYXNlLiBEaXZpZGluZyBieSBhIG5lZ2F0aXZlIHBvd2VyIG9mIDEgd2l0aCB0aGUgc2FtZSBzY2FsZSBhcyB0aGUgZGl2aWRlbmQgY291bGQgdHJpZ2dlciBhbiBpbmNvcnJlY3Qgb3B0aW1pemF0aW9uIHdoaWNoIHJlc3VsdGVkIGluIGEgd3JvbmcgcmVzdWx0LiBTZWUgIzYuCgojIyBbMC41LjJdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjUuMikgLSAyMDE1LTA4LTA2CgpUaGUgYCRzY2FsZWAgcGFyYW1ldGVyIG9mIGBCaWdEZWNpbWFsOjpkaXZpZGVkQnkoKWAgaXMgbm93IG9wdGlvbmFsIGFnYWluLgoKIyMgWzAuNS4xXShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC41LjEpIC0gMjAxNS0wNy0wNQoKKipOZXcgbWV0aG9kOiBgQmlnTnVtYmVyOjp0b1NjYWxlKClgKioKClRoaXMgYWxsb3dzIHRvIGNvbnZlcnQgYW55IGBCaWdOdW1iZXJgIHRvIGEgYEJpZ0RlY2ltYWxgIHdpdGggYSBnaXZlbiBzY2FsZSwgdXNpbmcgcm91bmRpbmcgaWYgbmVjZXNzYXJ5LgoKIyMgWzAuNS4wXShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC41LjApIC0gMjAxNS0wNy0wNAoKKipOZXcgZmVhdHVyZXMqKgotIENvbW1vbiBgQmlnTnVtYmVyYCBpbnRlcmZhY2UgZm9yIGFsbCBjbGFzc2VzLCB3aXRoIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKICAtIGBzaWduKClgIGFuZCBkZXJpdmVkIG1ldGhvZHMgKGBpc1plcm8oKWAsIGBpc1Bvc2l0aXZlKClgLCAuLi4pCiAgLSBgY29tcGFyZVRvKClgIGFuZCBkZXJpdmVkIG1ldGhvZHMgKGBpc0VxdWFsVG8oKWAsIGBpc0dyZWF0ZXJUaGFuKClgLCAuLi4pIHRoYXQgd29yayBhY3Jvc3MgZGlmZmVyZW50IGBCaWdOdW1iZXJgIHR5cGVzCiAgLSBgdG9CaWdJbnRlZ2VyKClgLCBgdG9CaWdEZWNpbWFsKClgLCBgdG9CaWdSYXRpb25hbGAoKSBjb252ZXJzaW9uIG1ldGhvZHMKICAtIGB0b0ludGVnZXIoKWAgYW5kIGB0b0Zsb2F0KClgIGNvbnZlcnNpb24gbWV0aG9kcyB0byBuYXRpdmUgdHlwZXMKLSBVbmlmaWVkIGBvZigpYCBiZWhhdmlvdXI6IGV2ZXJ5IGNsYXNzIG5vdyBhY2NlcHRzIGFueSB0eXBlIG9mIG51bWJlciwgcHJvdmlkZWQgdGhhdCBpdCBjYW4gYmUgc2FmZWx5IGNvbnZlcnRlZCB0byB0aGUgY3VycmVudCB0eXBlCi0gTmV3IG1ldGhvZDogYEJpZ0RlY2ltYWw6OmV4YWN0bHlEaXZpZGVkQnkoKWA7IHRoaXMgbWV0aG9kIGF1dG9tYXRpY2FsbHkgY29tcHV0ZXMgdGhlIHNjYWxlIG9mIHRoZSByZXN1bHQsIHByb3ZpZGVkIHRoYXQgdGhlIGRpdmlzaW9uIHlpZWxkcyBhIGZpbml0ZSBudW1iZXIgb2YgZGlnaXRzCi0gTmV3IG1ldGhvZHM6IGBCaWdSYXRpb25hbDo6cXVvdGllbnQoKWAgYW5kIGByZW1haW5kZXIoKWAKLSBGaW5lLWdyYWluZWQgZXhjZXB0aW9uczogYERpdmlzaW9uQnlaZXJvRXhjZXB0aW9uYCwgYFJvdW5kaW5nTmVjZXNzYXJ5RXhjZXB0aW9uYCwgYE51bWJlckZvcm1hdEV4Y2VwdGlvbmAKLSBGYWN0b3J5IG1ldGhvZHMgYHplcm8oKWAsIGBvbmUoKWAgYW5kIGB0ZW4oKWAgYXZhaWxhYmxlIGluIGFsbCBjbGFzc2VzCi0gUm91bmRpbmcgbW9kZSByZWludHJvZHVjZWQgaW4gYEJpZ0ludGVnZXI6OmRpdmlkZWRCeSgpYAoKVGhpcyByZWxlYXNlIGFsc28gY29tZXMgd2l0aCBtYW55IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cy4KCi0tLQoKKipCcmVha2luZyBjaGFuZ2VzKioKLSBgQmlnSW50ZWdlcmA6CiAgLSBgZ2V0U2lnbigpYCBpcyByZW5hbWVkIHRvIGBzaWduKClgCiAgLSBgdG9TdHJpbmcoKWAgaXMgcmVuYW1lZCB0byBgdG9CYXNlKClgCiAgLSBgQmlnSW50ZWdlcjo6ZGl2aWRlZEJ5KClgIG5vdyB0aHJvd3MgYW4gZXhjZXB0aW9uIGJ5IGRlZmF1bHQgaWYgdGhlIHJlbWFpbmRlciBpcyBub3QgemVybzsgdXNlIGBxdW90aWVudCgpYCB0byBnZXQgdGhlIHByZXZpb3VzIGJlaGF2aW91cgotIGBCaWdEZWNpbWFsYDoKICAtIGBnZXRTaWduKClgIGlzIHJlbmFtZWQgdG8gYHNpZ24oKWAKICAtIGBnZXRVbnNjYWxlZFZhbHVlKClgIGlzIHJlbmFtZWQgdG8gYHVuc2NhbGVkVmFsdWUoKWAKICAtIGBnZXRTY2FsZSgpYCBpcyByZW5hbWVkIHRvIGBzY2FsZSgpYAogIC0gYGdldEludGVncmFsKClgIGlzIHJlbmFtZWQgdG8gYGludGVncmFsKClgCiAgLSBgZ2V0RnJhY3Rpb24oKWAgaXMgcmVuYW1lZCB0byBgZnJhY3Rpb24oKWAKICAtIGBkaXZpZGVBbmRSZW1haW5kZXIoKWAgaXMgcmVuYW1lZCB0byBgcXVvdGllbnRBbmRSZW1haW5kZXIoKWAKICAtIGBkaXZpZGVkQnkoKWAgbm93IHRha2VzIGEgKiptYW5kYXRvcnkqKiBgJHNjYWxlYCBwYXJhbWV0ZXIgKipiZWZvcmUqKiB0aGUgcm91bmRpbmcgbW9kZQogIC0gYHRvQmlnSW50ZWdlcigpYCBkb2VzIG5vdCBhY2NlcHQgYSBgJHJvdW5kaW5nTW9kZWAgcGFyYW1ldGVyIGFueSBtb3JlCiAgLSBgdG9CaWdSYXRpb25hbCgpYCBkb2VzIG5vdCBzaW1wbGlmeSB0aGUgZnJhY3Rpb24gYW55IG1vcmU7IGV4cGxpY2l0bHkgYWRkIGAtPnNpbXBsaWZpZWQoKWAgdG8gZ2V0IHRoZSBwcmV2aW91cyBiZWhhdmlvdXIKLSBgQmlnUmF0aW9uYWxgOgogIC0gYGdldFNpZ24oKWAgaXMgcmVuYW1lZCB0byBgc2lnbigpYAogIC0gYGdldE51bWVyYXRvcigpYCBpcyByZW5hbWVkIHRvICBgbnVtZXJhdG9yKClgCiAgLSBgZ2V0RGVub21pbmF0b3IoKWAgaXMgcmVuYW1lZCB0byAgYGRlbm9taW5hdG9yKClgCiAgLSBgb2YoKWAgaXMgcmVuYW1lZCB0byBgbmQoKWAsIHdoaWxlIGBwYXJzZSgpYCBpcyByZW5hbWVkIHRvIGBvZigpYAotIE1pc2NlbGxhbmVvdXM6CiAgLSBgQXJpdGhtZXRpY0V4Y2VwdGlvbmAgaXMgbW92ZWQgdG8gYW4gYEV4Y2VwdGlvblxgIHN1Yi1uYW1lc3BhY2UKICAtIGBvZigpYCBmYWN0b3J5IG1ldGhvZHMgbm93IHRocm93IGBOdW1iZXJGb3JtYXRFeGNlcHRpb25gIGluc3RlYWQgb2YgYEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbmAKCiMjIFswLjQuM10oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuNC4zKSAtIDIwMTYtMDMtMzEKCkJhY2twb3J0IG9mIHR3byBidWcgZml4ZXMgZnJvbSB0aGUgMC41IGJyYW5jaDoKLSBgQmlnSW50ZWdlcjo6cGFyc2UoKWAgZGlkIG5vdCBhbHdheXMgdGhyb3cgYEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbmAgYXMgZXhwZWN0ZWQKLSBEaXZpZGluZyBieSBhIG5lZ2F0aXZlIHBvd2VyIG9mIDEgd2l0aCB0aGUgc2FtZSBzY2FsZSBhcyB0aGUgZGl2aWRlbmQgY291bGQgdHJpZ2dlciBhbiBpbmNvcnJlY3Qgb3B0aW1pemF0aW9uIHdoaWNoIHJlc3VsdGVkIGluIGEgd3JvbmcgcmVzdWx0LiBTZWUgIzYuCgojIyBbMC40LjJdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjQuMikgLSAyMDE1LTA2LTE2CgpOZXcgbWV0aG9kOiBgQmlnRGVjaW1hbDo6c3RyaXBUcmFpbGluZ1plcm9zKClgCgojIyBbMC40LjFdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjQuMSkgLSAyMDE1LTA2LTEyCgpJbnRyb2R1Y2luZyBhIGBCaWdSYXRpb25hbGAgY2xhc3MsIHRvIHBlcmZvcm0gY2FsY3VsYXRpb25zIG9uIGZyYWN0aW9ucyBvZiBhbnkgc2l6ZS4KCiMjIFswLjQuMF0oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuNC4wKSAtIDIwMTUtMDYtMTIKClJvdW5kaW5nIG1vZGVzIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gYEJpZ0ludGVnZXJgLCBhbmQgYXJlIG5vdyBhIGNvbmNlcHQgc3BlY2lmaWMgdG8gYEJpZ0RlY2ltYWxgLgoKYEJpZ0ludGVnZXI6OmRpdmlkZWRCeSgpYCBub3cgYWx3YXlzIHJldHVybnMgdGhlIHF1b3RpZW50IG9mIHRoZSBkaXZpc2lvbi4KCiMjIFswLjMuNV0oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuMy41KSAtIDIwMTYtMDMtMzEKCkJhY2twb3J0IG9mIHR3byBidWcgZml4ZXMgZnJvbSB0aGUgMC41IGJyYW5jaDoKCi0gYEJpZ0ludGVnZXI6OnBhcnNlKClgIGRpZCBub3QgYWx3YXlzIHRocm93IGBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb25gIGFzIGV4cGVjdGVkCi0gRGl2aWRpbmcgYnkgYSBuZWdhdGl2ZSBwb3dlciBvZiAxIHdpdGggdGhlIHNhbWUgc2NhbGUgYXMgdGhlIGRpdmlkZW5kIGNvdWxkIHRyaWdnZXIgYW4gaW5jb3JyZWN0IG9wdGltaXphdGlvbiB3aGljaCByZXN1bHRlZCBpbiBhIHdyb25nIHJlc3VsdC4gU2VlICM2LgoKIyMgWzAuMy40XShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC4zLjQpIC0gMjAxNS0wNi0xMQoKTmV3IG1ldGhvZHM6Ci0gYEJpZ0ludGVnZXI6OnJlbWFpbmRlcigpYCByZXR1cm5zIHRoZSByZW1haW5kZXIgb2YgYSBkaXZpc2lvbiBvbmx5Ci0gYEJpZ0ludGVnZXI6OmdjZCgpYCByZXR1cm5zIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiB0d28gbnVtYmVycwoKIyMgWzAuMy4zXShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC4zLjMpIC0gMjAxNS0wNi0wNwoKRml4IGB0b1N0cmluZygpYCBub3QgaGFuZGxpbmcgbmVnYXRpdmUgbnVtYmVycy4KCiMjIFswLjMuMl0oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuMy4yKSAtIDIwMTUtMDYtMDcKCmBCaWdJbnRlZ2VyYCBhbmQgYEJpZ0RlY2ltYWxgIG5vdyBoYXZlIGEgYGdldFNpZ24oKWAgbWV0aG9kIHRoYXQgcmV0dXJuczoKLSBgLTFgIGlmIHRoZSBudW1iZXIgaXMgbmVnYXRpdmUKLSBgMGAgaWYgdGhlIG51bWJlciBpcyB6ZXJvCi0gYDFgIGlmIHRoZSBudW1iZXIgaXMgcG9zaXRpdmUKCiMjIFswLjMuMV0oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuMy4xKSAtIDIwMTUtMDYtMDUKCk1pbm9yIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cwoKIyMgWzAuMy4wXShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC4zLjApIC0gMjAxNS0wNi0wNAoKVGhlIGAkcm91bmRpbmdNb2RlYCBhbmQgYCRzY2FsZWAgcGFyYW1ldGVycyBoYXZlIGJlZW4gc3dhcHBlZCBpbiBgQmlnRGVjaW1hbDo6ZGl2aWRlZEJ5KClgLgoKIyMgWzAuMi4yXShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC4yLjIpIC0gMjAxNS0wNi0wNAoKU3Ryb25nZXIgaW1tdXRhYmlsaXR5IGd1YXJhbnRlZSBmb3IgYEJpZ0ludGVnZXJgIGFuZCBgQmlnRGVjaW1hbGAuCgpTbyBmYXIsIGl0IHdvdWxkIGhhdmUgYmVlbiBwb3NzaWJsZSB0byBicmVhayBpbW11dGFiaWxpdHkgb2YgdGhlc2UgY2xhc3NlcyBieSBjYWxsaW5nIHRoZSBgdW5zZXJpYWxpemUoKWAgaW50ZXJuYWwgZnVuY3Rpb24uIFRoaXMgcmVsZWFzZSBmaXhlcyB0aGF0LgoKIyMgWzAuMi4xXShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC4yLjEpIC0gMjAxNS0wNi0wMgoKQWRkZWQgYEJpZ0RlY2ltYWw6OmRpdmlkZUFuZFJlbWFpbmRlcigpYAoKIyMgWzAuMi4wXShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC4yLjApIC0gMjAxNS0wNS0yMgoKLSBgbWluKClgIGFuZCBgbWF4KClgIGRvIG5vdCBhY2NlcHQgYW4gYGFycmF5YCBhbnkgbW9yZSwgYnV0IGEgdmFyaWFibGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMKLSAqKm1pbmltdW0gUEhQIHZlcnNpb24gaXMgbm93IDUuNioqCi0gY29udGludW91cyBpbnRlZ3JhdGlvbiB3aXRoIFBIUCA3CgojIyBbMC4xLjFdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjEuMSkgLSAyMDE0LTA5LTAxCgotIEFkZGVkIGBCaWdJbnRlZ2VyOjpwb3dlcigpYAotIEFkZGVkIEhIVk0gc3VwcG9ydAoKIyMgWzAuMS4wXShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC4xLjApIC0gMjAxNC0wOC0zMQoKRmlyc3QgYmV0YSByZWxlYXNlLgoK]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAiYnJpY2svbWF0aCIsCiAgICAiZGVzY3JpcHRpb24iOiAiQXJiaXRyYXJ5LXByZWNpc2lvbiBhcml0aG1ldGljIGxpYnJhcnkiLAogICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAia2V5d29yZHMiOiBbCiAgICAgICAgIkJyaWNrIiwKICAgICAgICAiTWF0aCIsCiAgICAgICAgIkFyYml0cmFyeS1wcmVjaXNpb24iLAogICAgICAgICJBcml0aG1ldGljIiwKICAgICAgICAiQmlnSW50ZWdlciIsCiAgICAgICAgIkJpZ0RlY2ltYWwiLAogICAgICAgICJCaWdSYXRpb25hbCIsCiAgICAgICAgIkJpZ251bSIKICAgIF0sCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgInJlcXVpcmUiOiB7CiAgICAgICAgInBocCI6ICJeNy4xIHx8IF44LjAiLAogICAgICAgICJleHQtanNvbiI6ICIqIgogICAgfSwKICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl43LjUuMTUgfHwgXjguNSB8fCBeOS4wIiwKICAgICAgICAicGhwLWNvdmVyYWxscy9waHAtY292ZXJhbGxzIjogIl4yLjIiLAogICAgICAgICJ2aW1lby9wc2FsbSI6ICI0LjkuMiIKICAgIH0sCiAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiQnJpY2tcXE1hdGhcXCI6ICJzcmMvIgogICAgICAgIH0KICAgIH0sCiAgICAiYXV0b2xvYWQtZGV2IjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIkJyaWNrXFxNYXRoXFxUZXN0c1xcIjogInRlc3RzLyIKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCBCZW5qYW1pbiBNb3JlbAoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgp0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgp0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCnVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mCnRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywKc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTCkZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUgpDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIKSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/SECURITY.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBTZWN1cml0eSBQb2xpY3kKCiMjIFN1cHBvcnRlZCBWZXJzaW9ucwoKT25seSB0aGUgbGFzdCB0d28gcmVsZWFzZSBzdHJlYW1zIGFyZSBzdXBwb3J0ZWQuCgp8IFZlcnNpb24gfCBTdXBwb3J0ZWQgICAgICAgICAgfAp8IC0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0gfAp8IDAuOS54ICAgfCA6d2hpdGVfY2hlY2tfbWFyazogfAp8IDAuOC54ICAgfCA6d2hpdGVfY2hlY2tfbWFyazogfAp8IDwgMC44ICAgfCA6eDogICAgICAgICAgICAgICAgfAoKIyMgUmVwb3J0aW5nIGEgVnVsbmVyYWJpbGl0eQoKVG8gcmVwb3J0IGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSwgcGxlYXNlIHVzZSB0aGUKW1RpZGVsaWZ0IHNlY3VyaXR5IGNvbnRhY3RdKGh0dHBzOi8vdGlkZWxpZnQuY29tL3NlY3VyaXR5KS4KVGlkZWxpZnQgd2lsbCBjb29yZGluYXRlIHRoZSBmaXggYW5kIGRpc2Nsb3N1cmUuCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/BigDecimal.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGg7Cgp1c2UgQnJpY2tcTWF0aFxFeGNlcHRpb25cRGl2aXNpb25CeVplcm9FeGNlcHRpb247CnVzZSBCcmlja1xNYXRoXEV4Y2VwdGlvblxNYXRoRXhjZXB0aW9uOwp1c2UgQnJpY2tcTWF0aFxFeGNlcHRpb25cTmVnYXRpdmVOdW1iZXJFeGNlcHRpb247CnVzZSBCcmlja1xNYXRoXEludGVybmFsXENhbGN1bGF0b3I7CgovKioKICogSW1tdXRhYmxlLCBhcmJpdHJhcnktcHJlY2lzaW9uIHNpZ25lZCBkZWNpbWFsIG51bWJlcnMuCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmZpbmFsIGNsYXNzIEJpZ0RlY2ltYWwgZXh0ZW5kcyBCaWdOdW1iZXIKewogICAgLyoqCiAgICAgKiBUaGUgdW5zY2FsZWQgdmFsdWUgb2YgdGhpcyBkZWNpbWFsIG51bWJlci4KICAgICAqCiAgICAgKiBUaGlzIGlzIGEgc3RyaW5nIG9mIGRpZ2l0cyB3aXRoIGFuIG9wdGlvbmFsIGxlYWRpbmcgbWludXMgc2lnbi4KICAgICAqIE5vIGxlYWRpbmcgemVybyBtdXN0IGJlIHByZXNlbnQuCiAgICAgKiBObyBsZWFkaW5nIG1pbnVzIHNpZ24gbXVzdCBiZSBwcmVzZW50IGlmIHRoZSB2YWx1ZSBpcyAwLgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJHZhbHVlOwoKICAgIC8qKgogICAgICogVGhlIHNjYWxlIChudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50KSBvZiB0aGlzIGRlY2ltYWwgbnVtYmVyLgogICAgICoKICAgICAqIFRoaXMgbXVzdCBiZSB6ZXJvIG9yIG1vcmUuCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkc2NhbGU7CgogICAgLyoqCiAgICAgKiBQcm90ZWN0ZWQgY29uc3RydWN0b3IuIFVzZSBhIGZhY3RvcnkgbWV0aG9kIHRvIG9idGFpbiBhbiBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZSBUaGUgdW5zY2FsZWQgdmFsdWUsIHZhbGlkYXRlZC4KICAgICAqIEBwYXJhbSBpbnQgICAgJHNjYWxlIFRoZSBzY2FsZSwgdmFsaWRhdGVkLgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICR2YWx1ZSwgaW50ICRzY2FsZSA9IDApCiAgICB7CiAgICAgICAgJHRoaXMtPnZhbHVlID0gJHZhbHVlOwogICAgICAgICR0aGlzLT5zY2FsZSA9ICRzY2FsZTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBCaWdEZWNpbWFsIG9mIHRoZSBnaXZlbiB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnTnVtYmVyfGludHxmbG9hdHxzdHJpbmcgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBCaWdEZWNpbWFsCiAgICAgKgogICAgICogQHRocm93cyBNYXRoRXhjZXB0aW9uIElmIHRoZSB2YWx1ZSBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgQmlnRGVjaW1hbC4KICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9mKCR2YWx1ZSkgOiBCaWdOdW1iZXIKICAgIHsKICAgICAgICByZXR1cm4gcGFyZW50OjpvZigkdmFsdWUpLT50b0JpZ0RlY2ltYWwoKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBCaWdEZWNpbWFsIGZyb20gYW4gdW5zY2FsZWQgdmFsdWUgYW5kIGEgc2NhbGUuCiAgICAgKgogICAgICogRXhhbXBsZTogYCgxMjM0NSwgMylgIHdpbGwgcmVzdWx0IGluIHRoZSBCaWdEZWNpbWFsIGAxMi4zNDVgLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkdmFsdWUgVGhlIHVuc2NhbGVkIHZhbHVlLiBNdXN0IGJlIGNvbnZlcnRpYmxlIHRvIGEgQmlnSW50ZWdlci4KICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAkc2NhbGUgVGhlIHNjYWxlIG9mIHRoZSBudW1iZXIsIHBvc2l0aXZlIG9yIHplcm8uCiAgICAgKgogICAgICogQHJldHVybiBCaWdEZWNpbWFsCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIElmIHRoZSBzY2FsZSBpcyBuZWdhdGl2ZS4KICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9mVW5zY2FsZWRWYWx1ZSgkdmFsdWUsIGludCAkc2NhbGUgPSAwKSA6IEJpZ0RlY2ltYWwKICAgIHsKICAgICAgICBpZiAoJHNjYWxlIDwgMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVGhlIHNjYWxlIGNhbm5vdCBiZSBuZWdhdGl2ZS4nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgQmlnRGVjaW1hbCgoc3RyaW5nKSBCaWdJbnRlZ2VyOjpvZigkdmFsdWUpLCAkc2NhbGUpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIEJpZ0RlY2ltYWwgcmVwcmVzZW50aW5nIHplcm8sIHdpdGggYSBzY2FsZSBvZiB6ZXJvLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnRGVjaW1hbAogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gemVybygpIDogQmlnRGVjaW1hbAogICAgewogICAgICAgIC8qKgogICAgICAgICAqIEBwc2FsbS1zdXBwcmVzcyBJbXB1cmVTdGF0aWNWYXJpYWJsZQogICAgICAgICAqIEB2YXIgQmlnRGVjaW1hbHxudWxsICR6ZXJvCiAgICAgICAgICovCiAgICAgICAgc3RhdGljICR6ZXJvOwoKICAgICAgICBpZiAoJHplcm8gPT09IG51bGwpIHsKICAgICAgICAgICAgJHplcm8gPSBuZXcgQmlnRGVjaW1hbCgnMCcpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR6ZXJvOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIEJpZ0RlY2ltYWwgcmVwcmVzZW50aW5nIG9uZSwgd2l0aCBhIHNjYWxlIG9mIHplcm8uCiAgICAgKgogICAgICogQHJldHVybiBCaWdEZWNpbWFsCiAgICAgKgogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBvbmUoKSA6IEJpZ0RlY2ltYWwKICAgIHsKICAgICAgICAvKioKICAgICAgICAgKiBAcHNhbG0tc3VwcHJlc3MgSW1wdXJlU3RhdGljVmFyaWFibGUKICAgICAgICAgKiBAdmFyIEJpZ0RlY2ltYWx8bnVsbCAkb25lCiAgICAgICAgICovCiAgICAgICAgc3RhdGljICRvbmU7CgogICAgICAgIGlmICgkb25lID09PSBudWxsKSB7CiAgICAgICAgICAgICRvbmUgPSBuZXcgQmlnRGVjaW1hbCgnMScpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRvbmU7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgQmlnRGVjaW1hbCByZXByZXNlbnRpbmcgdGVuLCB3aXRoIGEgc2NhbGUgb2YgemVyby4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0RlY2ltYWwKICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRlbigpIDogQmlnRGVjaW1hbAogICAgewogICAgICAgIC8qKgogICAgICAgICAqIEBwc2FsbS1zdXBwcmVzcyBJbXB1cmVTdGF0aWNWYXJpYWJsZQogICAgICAgICAqIEB2YXIgQmlnRGVjaW1hbHxudWxsICR0ZW4KICAgICAgICAgKi8KICAgICAgICBzdGF0aWMgJHRlbjsKCiAgICAgICAgaWYgKCR0ZW4gPT09IG51bGwpIHsKICAgICAgICAgICAgJHRlbiA9IG5ldyBCaWdEZWNpbWFsKCcxMCcpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0ZW47CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzdW0gb2YgdGhpcyBudW1iZXIgYW5kIHRoZSBnaXZlbiBvbmUuCiAgICAgKgogICAgICogVGhlIHJlc3VsdCBoYXMgYSBzY2FsZSBvZiBgbWF4KCR0aGlzLT5zY2FsZSwgJHRoYXQtPnNjYWxlKWAuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICR0aGF0IFRoZSBudW1iZXIgdG8gYWRkLiBNdXN0IGJlIGNvbnZlcnRpYmxlIHRvIGEgQmlnRGVjaW1hbC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0RlY2ltYWwgVGhlIHJlc3VsdC4KICAgICAqCiAgICAgKiBAdGhyb3dzIE1hdGhFeGNlcHRpb24gSWYgdGhlIG51bWJlciBpcyBub3QgdmFsaWQsIG9yIGlzIG5vdCBjb252ZXJ0aWJsZSB0byBhIEJpZ0RlY2ltYWwuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwbHVzKCR0aGF0KSA6IEJpZ0RlY2ltYWwKICAgIHsKICAgICAgICAkdGhhdCA9IEJpZ0RlY2ltYWw6Om9mKCR0aGF0KTsKCiAgICAgICAgaWYgKCR0aGF0LT52YWx1ZSA9PT0gJzAnICYmICR0aGF0LT5zY2FsZSA8PSAkdGhpcy0+c2NhbGUpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT52YWx1ZSA9PT0gJzAnICYmICR0aGlzLT5zY2FsZSA8PSAkdGhhdC0+c2NhbGUpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGF0OwogICAgICAgIH0KCiAgICAgICAgWyRhLCAkYl0gPSAkdGhpcy0+c2NhbGVWYWx1ZXMoJHRoaXMsICR0aGF0KTsKCiAgICAgICAgJHZhbHVlID0gQ2FsY3VsYXRvcjo6Z2V0KCktPmFkZCgkYSwgJGIpOwogICAgICAgICRzY2FsZSA9ICR0aGlzLT5zY2FsZSA+ICR0aGF0LT5zY2FsZSA/ICR0aGlzLT5zY2FsZSA6ICR0aGF0LT5zY2FsZTsKCiAgICAgICAgcmV0dXJuIG5ldyBCaWdEZWNpbWFsKCR2YWx1ZSwgJHNjYWxlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGRpZmZlcmVuY2Ugb2YgdGhpcyBudW1iZXIgYW5kIHRoZSBnaXZlbiBvbmUuCiAgICAgKgogICAgICogVGhlIHJlc3VsdCBoYXMgYSBzY2FsZSBvZiBgbWF4KCR0aGlzLT5zY2FsZSwgJHRoYXQtPnNjYWxlKWAuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICR0aGF0IFRoZSBudW1iZXIgdG8gc3VidHJhY3QuIE11c3QgYmUgY29udmVydGlibGUgdG8gYSBCaWdEZWNpbWFsLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnRGVjaW1hbCBUaGUgcmVzdWx0LgogICAgICoKICAgICAqIEB0aHJvd3MgTWF0aEV4Y2VwdGlvbiBJZiB0aGUgbnVtYmVyIGlzIG5vdCB2YWxpZCwgb3IgaXMgbm90IGNvbnZlcnRpYmxlIHRvIGEgQmlnRGVjaW1hbC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1pbnVzKCR0aGF0KSA6IEJpZ0RlY2ltYWwKICAgIHsKICAgICAgICAkdGhhdCA9IEJpZ0RlY2ltYWw6Om9mKCR0aGF0KTsKCiAgICAgICAgaWYgKCR0aGF0LT52YWx1ZSA9PT0gJzAnICYmICR0aGF0LT5zY2FsZSA8PSAkdGhpcy0+c2NhbGUpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgWyRhLCAkYl0gPSAkdGhpcy0+c2NhbGVWYWx1ZXMoJHRoaXMsICR0aGF0KTsKCiAgICAgICAgJHZhbHVlID0gQ2FsY3VsYXRvcjo6Z2V0KCktPnN1YigkYSwgJGIpOwogICAgICAgICRzY2FsZSA9ICR0aGlzLT5zY2FsZSA+ICR0aGF0LT5zY2FsZSA/ICR0aGlzLT5zY2FsZSA6ICR0aGF0LT5zY2FsZTsKCiAgICAgICAgcmV0dXJuIG5ldyBCaWdEZWNpbWFsKCR2YWx1ZSwgJHNjYWxlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHByb2R1Y3Qgb2YgdGhpcyBudW1iZXIgYW5kIHRoZSBnaXZlbiBvbmUuCiAgICAgKgogICAgICogVGhlIHJlc3VsdCBoYXMgYSBzY2FsZSBvZiBgJHRoaXMtPnNjYWxlICsgJHRoYXQtPnNjYWxlYC4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnTnVtYmVyfGludHxmbG9hdHxzdHJpbmcgJHRoYXQgVGhlIG11bHRpcGxpZXIuIE11c3QgYmUgY29udmVydGlibGUgdG8gYSBCaWdEZWNpbWFsLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnRGVjaW1hbCBUaGUgcmVzdWx0LgogICAgICoKICAgICAqIEB0aHJvd3MgTWF0aEV4Y2VwdGlvbiBJZiB0aGUgbXVsdGlwbGllciBpcyBub3QgYSB2YWxpZCBudW1iZXIsIG9yIGlzIG5vdCBjb252ZXJ0aWJsZSB0byBhIEJpZ0RlY2ltYWwuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtdWx0aXBsaWVkQnkoJHRoYXQpIDogQmlnRGVjaW1hbAogICAgewogICAgICAgICR0aGF0ID0gQmlnRGVjaW1hbDo6b2YoJHRoYXQpOwoKICAgICAgICBpZiAoJHRoYXQtPnZhbHVlID09PSAnMScgJiYgJHRoYXQtPnNjYWxlID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+dmFsdWUgPT09ICcxJyAmJiAkdGhpcy0+c2NhbGUgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuICR0aGF0OwogICAgICAgIH0KCiAgICAgICAgJHZhbHVlID0gQ2FsY3VsYXRvcjo6Z2V0KCktPm11bCgkdGhpcy0+dmFsdWUsICR0aGF0LT52YWx1ZSk7CiAgICAgICAgJHNjYWxlID0gJHRoaXMtPnNjYWxlICsgJHRoYXQtPnNjYWxlOwoKICAgICAgICByZXR1cm4gbmV3IEJpZ0RlY2ltYWwoJHZhbHVlLCAkc2NhbGUpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBkaXZpc2lvbiBvZiB0aGlzIG51bWJlciBieSB0aGUgZ2l2ZW4gb25lLCBhdCB0aGUgZ2l2ZW4gc2NhbGUuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICR0aGF0ICAgICAgICAgVGhlIGRpdmlzb3IuCiAgICAgKiBAcGFyYW0gaW50fG51bGwgICAgICAgICAgICAgICAgICAgJHNjYWxlICAgICAgICBUaGUgZGVzaXJlZCBzY2FsZSwgb3IgbnVsbCB0byB1c2UgdGhlIHNjYWxlIG9mIHRoaXMgbnVtYmVyLgogICAgICogQHBhcmFtIGludCAgICAgICAgICAgICAgICAgICAgICAgICRyb3VuZGluZ01vZGUgQW4gb3B0aW9uYWwgcm91bmRpbmcgbW9kZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0RlY2ltYWwKICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gSWYgdGhlIHNjYWxlIG9yIHJvdW5kaW5nIG1vZGUgaXMgaW52YWxpZC4KICAgICAqIEB0aHJvd3MgTWF0aEV4Y2VwdGlvbiAgICAgICAgICAgICBJZiB0aGUgbnVtYmVyIGlzIGludmFsaWQsIGlzIHplcm8sIG9yIHJvdW5kaW5nIHdhcyBuZWNlc3NhcnkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaXZpZGVkQnkoJHRoYXQsID9pbnQgJHNjYWxlID0gbnVsbCwgaW50ICRyb3VuZGluZ01vZGUgPSBSb3VuZGluZ01vZGU6OlVOTkVDRVNTQVJZKSA6IEJpZ0RlY2ltYWwKICAgIHsKICAgICAgICAkdGhhdCA9IEJpZ0RlY2ltYWw6Om9mKCR0aGF0KTsKCiAgICAgICAgaWYgKCR0aGF0LT5pc1plcm8oKSkgewogICAgICAgICAgICB0aHJvdyBEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbjo6ZGl2aXNpb25CeVplcm8oKTsKICAgICAgICB9CgogICAgICAgIGlmICgkc2NhbGUgPT09IG51bGwpIHsKICAgICAgICAgICAgJHNjYWxlID0gJHRoaXMtPnNjYWxlOwogICAgICAgIH0gZWxzZWlmICgkc2NhbGUgPCAwKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdTY2FsZSBjYW5ub3QgYmUgbmVnYXRpdmUuJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoYXQtPnZhbHVlID09PSAnMScgJiYgJHRoYXQtPnNjYWxlID09PSAwICYmICRzY2FsZSA9PT0gJHRoaXMtPnNjYWxlKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgICRwID0gJHRoaXMtPnZhbHVlV2l0aE1pblNjYWxlKCR0aGF0LT5zY2FsZSArICRzY2FsZSk7CiAgICAgICAgJHEgPSAkdGhhdC0+dmFsdWVXaXRoTWluU2NhbGUoJHRoaXMtPnNjYWxlIC0gJHNjYWxlKTsKCiAgICAgICAgJHJlc3VsdCA9IENhbGN1bGF0b3I6OmdldCgpLT5kaXZSb3VuZCgkcCwgJHEsICRyb3VuZGluZ01vZGUpOwoKICAgICAgICByZXR1cm4gbmV3IEJpZ0RlY2ltYWwoJHJlc3VsdCwgJHNjYWxlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGV4YWN0IHJlc3VsdCBvZiB0aGUgZGl2aXNpb24gb2YgdGhpcyBudW1iZXIgYnkgdGhlIGdpdmVuIG9uZS4KICAgICAqCiAgICAgKiBUaGUgc2NhbGUgb2YgdGhlIHJlc3VsdCBpcyBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZWQgdG8gZml0IGFsbCB0aGUgZnJhY3Rpb24gZGlnaXRzLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkdGhhdCBUaGUgZGl2aXNvci4gTXVzdCBiZSBjb252ZXJ0aWJsZSB0byBhIEJpZ0RlY2ltYWwuCiAgICAgKgogICAgICogQHJldHVybiBCaWdEZWNpbWFsIFRoZSByZXN1bHQuCiAgICAgKgogICAgICogQHRocm93cyBNYXRoRXhjZXB0aW9uIElmIHRoZSBkaXZpc29yIGlzIG5vdCBhIHZhbGlkIG51bWJlciwgaXMgbm90IGNvbnZlcnRpYmxlIHRvIGEgQmlnRGVjaW1hbCwgaXMgemVybywKICAgICAqICAgICAgICAgICAgICAgICAgICAgICBvciB0aGUgcmVzdWx0IHlpZWxkcyBhbiBpbmZpbml0ZSBudW1iZXIgb2YgZGlnaXRzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhhY3RseURpdmlkZWRCeSgkdGhhdCkgOiBCaWdEZWNpbWFsCiAgICB7CiAgICAgICAgJHRoYXQgPSBCaWdEZWNpbWFsOjpvZigkdGhhdCk7CgogICAgICAgIGlmICgkdGhhdC0+dmFsdWUgPT09ICcwJykgewogICAgICAgICAgICB0aHJvdyBEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbjo6ZGl2aXNpb25CeVplcm8oKTsKICAgICAgICB9CgogICAgICAgIFssICRiXSA9ICR0aGlzLT5zY2FsZVZhbHVlcygkdGhpcywgJHRoYXQpOwoKICAgICAgICAkZCA9IFxydHJpbSgkYiwgJzAnKTsKICAgICAgICAkc2NhbGUgPSBcc3RybGVuKCRiKSAtIFxzdHJsZW4oJGQpOwoKICAgICAgICAkY2FsY3VsYXRvciA9IENhbGN1bGF0b3I6OmdldCgpOwoKICAgICAgICBmb3JlYWNoIChbNSwgMl0gYXMgJHByaW1lKSB7CiAgICAgICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgICAgICRsYXN0RGlnaXQgPSAoaW50KSAkZFstMV07CgogICAgICAgICAgICAgICAgaWYgKCRsYXN0RGlnaXQgJSAkcHJpbWUgIT09IDApIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkZCA9ICRjYWxjdWxhdG9yLT5kaXZRKCRkLCAoc3RyaW5nKSAkcHJpbWUpOwogICAgICAgICAgICAgICAgJHNjYWxlKys7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+ZGl2aWRlZEJ5KCR0aGF0LCAkc2NhbGUpLT5zdHJpcFRyYWlsaW5nWmVyb3MoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhpcyBudW1iZXIgZXhwb25lbnRpYXRlZCB0byB0aGUgZ2l2ZW4gdmFsdWUuCiAgICAgKgogICAgICogVGhlIHJlc3VsdCBoYXMgYSBzY2FsZSBvZiBgJHRoaXMtPnNjYWxlICogJGV4cG9uZW50YC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRleHBvbmVudCBUaGUgZXhwb25lbnQuCiAgICAgKgogICAgICogQHJldHVybiBCaWdEZWNpbWFsIFRoZSByZXN1bHQuCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIElmIHRoZSBleHBvbmVudCBpcyBub3QgaW4gdGhlIHJhbmdlIDAgdG8gMSwwMDAsMDAwLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcG93ZXIoaW50ICRleHBvbmVudCkgOiBCaWdEZWNpbWFsCiAgICB7CiAgICAgICAgaWYgKCRleHBvbmVudCA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gQmlnRGVjaW1hbDo6b25lKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGV4cG9uZW50ID09PSAxKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIGlmICgkZXhwb25lbnQgPCAwIHx8ICRleHBvbmVudCA+IENhbGN1bGF0b3I6Ok1BWF9QT1dFUikgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihcc3ByaW50ZigKICAgICAgICAgICAgICAgICdUaGUgZXhwb25lbnQgJWQgaXMgbm90IGluIHRoZSByYW5nZSAwIHRvICVkLicsCiAgICAgICAgICAgICAgICAkZXhwb25lbnQsCiAgICAgICAgICAgICAgICBDYWxjdWxhdG9yOjpNQVhfUE9XRVIKICAgICAgICAgICAgKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IEJpZ0RlY2ltYWwoQ2FsY3VsYXRvcjo6Z2V0KCktPnBvdygkdGhpcy0+dmFsdWUsICRleHBvbmVudCksICR0aGlzLT5zY2FsZSAqICRleHBvbmVudCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBxdW90aWVudCBvZiB0aGUgZGl2aXNpb24gb2YgdGhpcyBudW1iZXIgYnkgdGhpcyBnaXZlbiBvbmUuCiAgICAgKgogICAgICogVGhlIHF1b3RpZW50IGhhcyBhIHNjYWxlIG9mIGAwYC4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnTnVtYmVyfGludHxmbG9hdHxzdHJpbmcgJHRoYXQgVGhlIGRpdmlzb3IuIE11c3QgYmUgY29udmVydGlibGUgdG8gYSBCaWdEZWNpbWFsLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnRGVjaW1hbCBUaGUgcXVvdGllbnQuCiAgICAgKgogICAgICogQHRocm93cyBNYXRoRXhjZXB0aW9uIElmIHRoZSBkaXZpc29yIGlzIG5vdCBhIHZhbGlkIGRlY2ltYWwgbnVtYmVyLCBvciBpcyB6ZXJvLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcXVvdGllbnQoJHRoYXQpIDogQmlnRGVjaW1hbAogICAgewogICAgICAgICR0aGF0ID0gQmlnRGVjaW1hbDo6b2YoJHRoYXQpOwoKICAgICAgICBpZiAoJHRoYXQtPmlzWmVybygpKSB7CiAgICAgICAgICAgIHRocm93IERpdmlzaW9uQnlaZXJvRXhjZXB0aW9uOjpkaXZpc2lvbkJ5WmVybygpOwogICAgICAgIH0KCiAgICAgICAgJHAgPSAkdGhpcy0+dmFsdWVXaXRoTWluU2NhbGUoJHRoYXQtPnNjYWxlKTsKICAgICAgICAkcSA9ICR0aGF0LT52YWx1ZVdpdGhNaW5TY2FsZSgkdGhpcy0+c2NhbGUpOwoKICAgICAgICAkcXVvdGllbnQgPSBDYWxjdWxhdG9yOjpnZXQoKS0+ZGl2USgkcCwgJHEpOwoKICAgICAgICByZXR1cm4gbmV3IEJpZ0RlY2ltYWwoJHF1b3RpZW50LCAwKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHJlbWFpbmRlciBvZiB0aGUgZGl2aXNpb24gb2YgdGhpcyBudW1iZXIgYnkgdGhpcyBnaXZlbiBvbmUuCiAgICAgKgogICAgICogVGhlIHJlbWFpbmRlciBoYXMgYSBzY2FsZSBvZiBgbWF4KCR0aGlzLT5zY2FsZSwgJHRoYXQtPnNjYWxlKWAuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICR0aGF0IFRoZSBkaXZpc29yLiBNdXN0IGJlIGNvbnZlcnRpYmxlIHRvIGEgQmlnRGVjaW1hbC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0RlY2ltYWwgVGhlIHJlbWFpbmRlci4KICAgICAqCiAgICAgKiBAdGhyb3dzIE1hdGhFeGNlcHRpb24gSWYgdGhlIGRpdmlzb3IgaXMgbm90IGEgdmFsaWQgZGVjaW1hbCBudW1iZXIsIG9yIGlzIHplcm8uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZW1haW5kZXIoJHRoYXQpIDogQmlnRGVjaW1hbAogICAgewogICAgICAgICR0aGF0ID0gQmlnRGVjaW1hbDo6b2YoJHRoYXQpOwoKICAgICAgICBpZiAoJHRoYXQtPmlzWmVybygpKSB7CiAgICAgICAgICAgIHRocm93IERpdmlzaW9uQnlaZXJvRXhjZXB0aW9uOjpkaXZpc2lvbkJ5WmVybygpOwogICAgICAgIH0KCiAgICAgICAgJHAgPSAkdGhpcy0+dmFsdWVXaXRoTWluU2NhbGUoJHRoYXQtPnNjYWxlKTsKICAgICAgICAkcSA9ICR0aGF0LT52YWx1ZVdpdGhNaW5TY2FsZSgkdGhpcy0+c2NhbGUpOwoKICAgICAgICAkcmVtYWluZGVyID0gQ2FsY3VsYXRvcjo6Z2V0KCktPmRpdlIoJHAsICRxKTsKCiAgICAgICAgJHNjYWxlID0gJHRoaXMtPnNjYWxlID4gJHRoYXQtPnNjYWxlID8gJHRoaXMtPnNjYWxlIDogJHRoYXQtPnNjYWxlOwoKICAgICAgICByZXR1cm4gbmV3IEJpZ0RlY2ltYWwoJHJlbWFpbmRlciwgJHNjYWxlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHF1b3RpZW50IGFuZCByZW1haW5kZXIgb2YgdGhlIGRpdmlzaW9uIG9mIHRoaXMgbnVtYmVyIGJ5IHRoZSBnaXZlbiBvbmUuCiAgICAgKgogICAgICogVGhlIHF1b3RpZW50IGhhcyBhIHNjYWxlIG9mIGAwYCwgYW5kIHRoZSByZW1haW5kZXIgaGFzIGEgc2NhbGUgb2YgYG1heCgkdGhpcy0+c2NhbGUsICR0aGF0LT5zY2FsZSlgLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkdGhhdCBUaGUgZGl2aXNvci4gTXVzdCBiZSBjb252ZXJ0aWJsZSB0byBhIEJpZ0RlY2ltYWwuCiAgICAgKgogICAgICogQHJldHVybiBCaWdEZWNpbWFsW10gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgcXVvdGllbnQgYW5kIHRoZSByZW1haW5kZXIuCiAgICAgKgogICAgICogQHRocm93cyBNYXRoRXhjZXB0aW9uIElmIHRoZSBkaXZpc29yIGlzIG5vdCBhIHZhbGlkIGRlY2ltYWwgbnVtYmVyLCBvciBpcyB6ZXJvLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcXVvdGllbnRBbmRSZW1haW5kZXIoJHRoYXQpIDogYXJyYXkKICAgIHsKICAgICAgICAkdGhhdCA9IEJpZ0RlY2ltYWw6Om9mKCR0aGF0KTsKCiAgICAgICAgaWYgKCR0aGF0LT5pc1plcm8oKSkgewogICAgICAgICAgICB0aHJvdyBEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbjo6ZGl2aXNpb25CeVplcm8oKTsKICAgICAgICB9CgogICAgICAgICRwID0gJHRoaXMtPnZhbHVlV2l0aE1pblNjYWxlKCR0aGF0LT5zY2FsZSk7CiAgICAgICAgJHEgPSAkdGhhdC0+dmFsdWVXaXRoTWluU2NhbGUoJHRoaXMtPnNjYWxlKTsKCiAgICAgICAgWyRxdW90aWVudCwgJHJlbWFpbmRlcl0gPSBDYWxjdWxhdG9yOjpnZXQoKS0+ZGl2UVIoJHAsICRxKTsKCiAgICAgICAgJHNjYWxlID0gJHRoaXMtPnNjYWxlID4gJHRoYXQtPnNjYWxlID8gJHRoaXMtPnNjYWxlIDogJHRoYXQtPnNjYWxlOwoKICAgICAgICAkcXVvdGllbnQgPSBuZXcgQmlnRGVjaW1hbCgkcXVvdGllbnQsIDApOwogICAgICAgICRyZW1haW5kZXIgPSBuZXcgQmlnRGVjaW1hbCgkcmVtYWluZGVyLCAkc2NhbGUpOwoKICAgICAgICByZXR1cm4gWyRxdW90aWVudCwgJHJlbWFpbmRlcl07CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGlzIG51bWJlciwgcm91bmRlZCBkb3duIHRvIHRoZSBnaXZlbiBudW1iZXIgb2YgZGVjaW1hbHMuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkc2NhbGUKICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0RlY2ltYWwKICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gSWYgdGhlIHNjYWxlIGlzIG5lZ2F0aXZlLgogICAgICogQHRocm93cyBOZWdhdGl2ZU51bWJlckV4Y2VwdGlvbiBJZiB0aGlzIG51bWJlciBpcyBuZWdhdGl2ZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNxcnQoaW50ICRzY2FsZSkgOiBCaWdEZWNpbWFsCiAgICB7CiAgICAgICAgaWYgKCRzY2FsZSA8IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1NjYWxlIGNhbm5vdCBiZSBuZWdhdGl2ZS4nKTsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+dmFsdWUgPT09ICcwJykgewogICAgICAgICAgICByZXR1cm4gbmV3IEJpZ0RlY2ltYWwoJzAnLCAkc2NhbGUpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT52YWx1ZVswXSA9PT0gJy0nKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBOZWdhdGl2ZU51bWJlckV4Y2VwdGlvbignQ2Fubm90IGNhbGN1bGF0ZSB0aGUgc3F1YXJlIHJvb3Qgb2YgYSBuZWdhdGl2ZSBudW1iZXIuJyk7CiAgICAgICAgfQoKICAgICAgICAkdmFsdWUgPSAkdGhpcy0+dmFsdWU7CiAgICAgICAgJGFkZERpZ2l0cyA9IDIgKiAkc2NhbGUgLSAkdGhpcy0+c2NhbGU7CgogICAgICAgIGlmICgkYWRkRGlnaXRzID4gMCkgewogICAgICAgICAgICAvLyBhZGQgemVyb3MKICAgICAgICAgICAgJHZhbHVlIC49IFxzdHJfcmVwZWF0KCcwJywgJGFkZERpZ2l0cyk7CiAgICAgICAgfSBlbHNlaWYgKCRhZGREaWdpdHMgPCAwKSB7CiAgICAgICAgICAgIC8vIHRyaW0gZGlnaXRzCiAgICAgICAgICAgIGlmICgtJGFkZERpZ2l0cyA+PSBcc3RybGVuKCR0aGlzLT52YWx1ZSkpIHsKICAgICAgICAgICAgICAgIC8vIHJlcXVlc3RpbmcgYSBzY2FsZSB0b28gbG93LCB3aWxsIGFsd2F5cyB5aWVsZCBhIHplcm8gcmVzdWx0CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJpZ0RlY2ltYWwoJzAnLCAkc2NhbGUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdmFsdWUgPSBcc3Vic3RyKCR2YWx1ZSwgMCwgJGFkZERpZ2l0cyk7CiAgICAgICAgfQoKICAgICAgICAkdmFsdWUgPSBDYWxjdWxhdG9yOjpnZXQoKS0+c3FydCgkdmFsdWUpOwoKICAgICAgICByZXR1cm4gbmV3IEJpZ0RlY2ltYWwoJHZhbHVlLCAkc2NhbGUpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIGNvcHkgb2YgdGhpcyBCaWdEZWNpbWFsIHdpdGggdGhlIGRlY2ltYWwgcG9pbnQgbW92ZWQgJG4gcGxhY2VzIHRvIHRoZSBsZWZ0LgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJG4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0RlY2ltYWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhQb2ludE1vdmVkTGVmdChpbnQgJG4pIDogQmlnRGVjaW1hbAogICAgewogICAgICAgIGlmICgkbiA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICBpZiAoJG4gPCAwKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+d2l0aFBvaW50TW92ZWRSaWdodCgtJG4pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBCaWdEZWNpbWFsKCR0aGlzLT52YWx1ZSwgJHRoaXMtPnNjYWxlICsgJG4pOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIGNvcHkgb2YgdGhpcyBCaWdEZWNpbWFsIHdpdGggdGhlIGRlY2ltYWwgcG9pbnQgbW92ZWQgJG4gcGxhY2VzIHRvIHRoZSByaWdodC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRuCiAgICAgKgogICAgICogQHJldHVybiBCaWdEZWNpbWFsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUG9pbnRNb3ZlZFJpZ2h0KGludCAkbikgOiBCaWdEZWNpbWFsCiAgICB7CiAgICAgICAgaWYgKCRuID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIGlmICgkbiA8IDApIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT53aXRoUG9pbnRNb3ZlZExlZnQoLSRuKTsKICAgICAgICB9CgogICAgICAgICR2YWx1ZSA9ICR0aGlzLT52YWx1ZTsKICAgICAgICAkc2NhbGUgPSAkdGhpcy0+c2NhbGUgLSAkbjsKCiAgICAgICAgaWYgKCRzY2FsZSA8IDApIHsKICAgICAgICAgICAgaWYgKCR2YWx1ZSAhPT0gJzAnKSB7CiAgICAgICAgICAgICAgICAkdmFsdWUgLj0gXHN0cl9yZXBlYXQoJzAnLCAtJHNjYWxlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkc2NhbGUgPSAwOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBCaWdEZWNpbWFsKCR2YWx1ZSwgJHNjYWxlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBjb3B5IG9mIHRoaXMgQmlnRGVjaW1hbCB3aXRoIGFueSB0cmFpbGluZyB6ZXJvcyByZW1vdmVkIGZyb20gdGhlIGZyYWN0aW9uYWwgcGFydC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0RlY2ltYWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN0cmlwVHJhaWxpbmdaZXJvcygpIDogQmlnRGVjaW1hbAogICAgewogICAgICAgIGlmICgkdGhpcy0+c2NhbGUgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJHRyaW1tZWRWYWx1ZSA9IFxydHJpbSgkdGhpcy0+dmFsdWUsICcwJyk7CgogICAgICAgIGlmICgkdHJpbW1lZFZhbHVlID09PSAnJykgewogICAgICAgICAgICByZXR1cm4gQmlnRGVjaW1hbDo6emVybygpOwogICAgICAgIH0KCiAgICAgICAgJHRyaW1tYWJsZVplcm9zID0gXHN0cmxlbigkdGhpcy0+dmFsdWUpIC0gXHN0cmxlbigkdHJpbW1lZFZhbHVlKTsKCiAgICAgICAgaWYgKCR0cmltbWFibGVaZXJvcyA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRyaW1tYWJsZVplcm9zID4gJHRoaXMtPnNjYWxlKSB7CiAgICAgICAgICAgICR0cmltbWFibGVaZXJvcyA9ICR0aGlzLT5zY2FsZTsKICAgICAgICB9CgogICAgICAgICR2YWx1ZSA9IFxzdWJzdHIoJHRoaXMtPnZhbHVlLCAwLCAtJHRyaW1tYWJsZVplcm9zKTsKICAgICAgICAkc2NhbGUgPSAkdGhpcy0+c2NhbGUgLSAkdHJpbW1hYmxlWmVyb3M7CgogICAgICAgIHJldHVybiBuZXcgQmlnRGVjaW1hbCgkdmFsdWUsICRzY2FsZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGlzIG51bWJlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0RlY2ltYWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFicygpIDogQmlnRGVjaW1hbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aXNOZWdhdGl2ZSgpID8gJHRoaXMtPm5lZ2F0ZWQoKSA6ICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbmVnYXRlZCB2YWx1ZSBvZiB0aGlzIG51bWJlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0RlY2ltYWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5lZ2F0ZWQoKSA6IEJpZ0RlY2ltYWwKICAgIHsKICAgICAgICByZXR1cm4gbmV3IEJpZ0RlY2ltYWwoQ2FsY3VsYXRvcjo6Z2V0KCktPm5lZygkdGhpcy0+dmFsdWUpLCAkdGhpcy0+c2NhbGUpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcGFyZVRvKCR0aGF0KSA6IGludAogICAgewogICAgICAgICR0aGF0ID0gQmlnTnVtYmVyOjpvZigkdGhhdCk7CgogICAgICAgIGlmICgkdGhhdCBpbnN0YW5jZW9mIEJpZ0ludGVnZXIpIHsKICAgICAgICAgICAgJHRoYXQgPSAkdGhhdC0+dG9CaWdEZWNpbWFsKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoYXQgaW5zdGFuY2VvZiBCaWdEZWNpbWFsKSB7CiAgICAgICAgICAgIFskYSwgJGJdID0gJHRoaXMtPnNjYWxlVmFsdWVzKCR0aGlzLCAkdGhhdCk7CgogICAgICAgICAgICByZXR1cm4gQ2FsY3VsYXRvcjo6Z2V0KCktPmNtcCgkYSwgJGIpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIC0gJHRoYXQtPmNvbXBhcmVUbygkdGhpcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaWduKCkgOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gKCR0aGlzLT52YWx1ZSA9PT0gJzAnKSA/IDAgOiAoKCR0aGlzLT52YWx1ZVswXSA9PT0gJy0nKSA/IC0xIDogMSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFVuc2NhbGVkVmFsdWUoKSA6IEJpZ0ludGVnZXIKICAgIHsKICAgICAgICByZXR1cm4gQmlnSW50ZWdlcjo6Y3JlYXRlKCR0aGlzLT52YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2NhbGUoKSA6IGludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c2NhbGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgaW50ZWdyYWwgcGFydCBvZiB0aGlzIGRlY2ltYWwgbnVtYmVyLgogICAgICoKICAgICAqIEV4YW1wbGU6IGAtMTIzLjQ1NmAgPT4gYC0xMjNgLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbnRlZ3JhbFBhcnQoKSA6IHN0cmluZwogICAgewogICAgICAgIGlmICgkdGhpcy0+c2NhbGUgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZTsKICAgICAgICB9CgogICAgICAgICR2YWx1ZSA9ICR0aGlzLT5nZXRVbnNjYWxlZFZhbHVlV2l0aExlYWRpbmdaZXJvcygpOwoKICAgICAgICByZXR1cm4gXHN1YnN0cigkdmFsdWUsIDAsIC0kdGhpcy0+c2NhbGUpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGZyYWN0aW9uYWwgcGFydCBvZiB0aGlzIGRlY2ltYWwgbnVtYmVyLgogICAgICoKICAgICAqIElmIHRoZSBzY2FsZSBpcyB6ZXJvLCBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuCiAgICAgKgogICAgICogRXhhbXBsZXM6IGAtMTIzLjQ1NmAgPT4gJzQ1NicsIGAxMjNgID0+ICcnLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGcmFjdGlvbmFsUGFydCgpIDogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5zY2FsZSA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQoKICAgICAgICAkdmFsdWUgPSAkdGhpcy0+Z2V0VW5zY2FsZWRWYWx1ZVdpdGhMZWFkaW5nWmVyb3MoKTsKCiAgICAgICAgcmV0dXJuIFxzdWJzdHIoJHZhbHVlLCAtJHRoaXMtPnNjYWxlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgd2hldGhlciB0aGlzIGRlY2ltYWwgbnVtYmVyIGhhcyBhIG5vbi16ZXJvIGZyYWN0aW9uYWwgcGFydC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhc05vblplcm9GcmFjdGlvbmFsUGFydCgpIDogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0RnJhY3Rpb25hbFBhcnQoKSAhPT0gXHN0cl9yZXBlYXQoJzAnLCAkdGhpcy0+c2NhbGUpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9CaWdJbnRlZ2VyKCkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgJHplcm9TY2FsZURlY2ltYWwgPSAkdGhpcy0+c2NhbGUgPT09IDAgPyAkdGhpcyA6ICR0aGlzLT5kaXZpZGVkQnkoMSwgMCk7CgogICAgICAgIHJldHVybiBCaWdJbnRlZ2VyOjpjcmVhdGUoJHplcm9TY2FsZURlY2ltYWwtPnZhbHVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQmlnRGVjaW1hbCgpIDogQmlnRGVjaW1hbAogICAgewogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQmlnUmF0aW9uYWwoKSA6IEJpZ1JhdGlvbmFsCiAgICB7CiAgICAgICAgJG51bWVyYXRvciA9IEJpZ0ludGVnZXI6OmNyZWF0ZSgkdGhpcy0+dmFsdWUpOwogICAgICAgICRkZW5vbWluYXRvciA9IEJpZ0ludGVnZXI6OmNyZWF0ZSgnMScgLiBcc3RyX3JlcGVhdCgnMCcsICR0aGlzLT5zY2FsZSkpOwoKICAgICAgICByZXR1cm4gQmlnUmF0aW9uYWw6OmNyZWF0ZSgkbnVtZXJhdG9yLCAkZGVub21pbmF0b3IsIGZhbHNlKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvU2NhbGUoaW50ICRzY2FsZSwgaW50ICRyb3VuZGluZ01vZGUgPSBSb3VuZGluZ01vZGU6OlVOTkVDRVNTQVJZKSA6IEJpZ0RlY2ltYWwKICAgIHsKICAgICAgICBpZiAoJHNjYWxlID09PSAkdGhpcy0+c2NhbGUpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5kaXZpZGVkQnkoQmlnRGVjaW1hbDo6b25lKCksICRzY2FsZSwgJHJvdW5kaW5nTW9kZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b0ludCgpIDogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50b0JpZ0ludGVnZXIoKS0+dG9JbnQoKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvRmxvYXQoKSA6IGZsb2F0CiAgICB7CiAgICAgICAgcmV0dXJuIChmbG9hdCkgKHN0cmluZykgJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkgOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPnNjYWxlID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWU7CiAgICAgICAgfQoKICAgICAgICAkdmFsdWUgPSAkdGhpcy0+Z2V0VW5zY2FsZWRWYWx1ZVdpdGhMZWFkaW5nWmVyb3MoKTsKCiAgICAgICAgcmV0dXJuIFxzdWJzdHIoJHZhbHVlLCAwLCAtJHRoaXMtPnNjYWxlKSAuICcuJyAuIFxzdWJzdHIoJHZhbHVlLCAtJHRoaXMtPnNjYWxlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoaXMgbWV0aG9kIGlzIHJlcXVpcmVkIGZvciBzZXJpYWxpemluZyB0aGUgb2JqZWN0IGFuZCBTSE9VTEQgTk9UIGJlIGFjY2Vzc2VkIGRpcmVjdGx5LgogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl7dmFsdWU6IHN0cmluZywgc2NhbGU6IGludH0KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fc2VyaWFsaXplKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFsndmFsdWUnID0+ICR0aGlzLT52YWx1ZSwgJ3NjYWxlJyA9PiAkdGhpcy0+c2NhbGVdOwogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBtZXRob2QgaXMgb25seSBoZXJlIHRvIGFsbG93IHVuc2VyaWFsaXppbmcgdGhlIG9iamVjdCBhbmQgY2Fubm90IGJlIGFjY2Vzc2VkIGRpcmVjdGx5LgogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICogQHBzYWxtLXN1cHByZXNzIFJlZHVuZGFudFByb3BlcnR5SW5pdGlhbGl6YXRpb25DaGVjawogICAgICoKICAgICAqIEBwYXJhbSBhcnJheXt2YWx1ZTogc3RyaW5nLCBzY2FsZTogaW50fSAkZGF0YQogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICoKICAgICAqIEB0aHJvd3MgXExvZ2ljRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3Vuc2VyaWFsaXplKGFycmF5ICRkYXRhKTogdm9pZAogICAgewogICAgICAgIGlmIChpc3NldCgkdGhpcy0+dmFsdWUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ19fdW5zZXJpYWxpemUoKSBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgaXQgbXVzdCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LicpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnZhbHVlID0gJGRhdGFbJ3ZhbHVlJ107CiAgICAgICAgJHRoaXMtPnNjYWxlID0gJGRhdGFbJ3NjYWxlJ107CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGlzIG1ldGhvZCBpcyByZXF1aXJlZCBieSBpbnRlcmZhY2UgU2VyaWFsaXphYmxlIGFuZCBTSE9VTEQgTk9UIGJlIGFjY2Vzc2VkIGRpcmVjdGx5LgogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXJpYWxpemUoKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWUgLiAnOicgLiAkdGhpcy0+c2NhbGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGlzIG1ldGhvZCBpcyBvbmx5IGhlcmUgdG8gaW1wbGVtZW50IGludGVyZmFjZSBTZXJpYWxpemFibGUgYW5kIGNhbm5vdCBiZSBhY2Nlc3NlZCBkaXJlY3RseS4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBSZWR1bmRhbnRQcm9wZXJ0eUluaXRpYWxpemF0aW9uQ2hlY2sKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICoKICAgICAqIEB0aHJvd3MgXExvZ2ljRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bnNlcmlhbGl6ZSgkdmFsdWUpIDogdm9pZAogICAgewogICAgICAgIGlmIChpc3NldCgkdGhpcy0+dmFsdWUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ3Vuc2VyaWFsaXplKCkgaXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24sIGl0IG11c3Qgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4nKTsKICAgICAgICB9CgogICAgICAgIFskdmFsdWUsICRzY2FsZV0gPSBcZXhwbG9kZSgnOicsICR2YWx1ZSk7CgogICAgICAgICR0aGlzLT52YWx1ZSA9ICR2YWx1ZTsKICAgICAgICAkdGhpcy0+c2NhbGUgPSAoaW50KSAkc2NhbGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBQdXRzIHRoZSBpbnRlcm5hbCB2YWx1ZXMgb2YgdGhlIGdpdmVuIGRlY2ltYWwgbnVtYmVycyBvbiB0aGUgc2FtZSBzY2FsZS4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnRGVjaW1hbCAkeCBUaGUgZmlyc3QgZGVjaW1hbCBudW1iZXIuCiAgICAgKiBAcGFyYW0gQmlnRGVjaW1hbCAkeSBUaGUgc2Vjb25kIGRlY2ltYWwgbnVtYmVyLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl7c3RyaW5nLCBzdHJpbmd9IFRoZSBzY2FsZWQgaW50ZWdlciB2YWx1ZXMgb2YgJHggYW5kICR5LgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHNjYWxlVmFsdWVzKEJpZ0RlY2ltYWwgJHgsIEJpZ0RlY2ltYWwgJHkpIDogYXJyYXkKICAgIHsKICAgICAgICAkYSA9ICR4LT52YWx1ZTsKICAgICAgICAkYiA9ICR5LT52YWx1ZTsKCiAgICAgICAgaWYgKCRiICE9PSAnMCcgJiYgJHgtPnNjYWxlID4gJHktPnNjYWxlKSB7CiAgICAgICAgICAgICRiIC49IFxzdHJfcmVwZWF0KCcwJywgJHgtPnNjYWxlIC0gJHktPnNjYWxlKTsKICAgICAgICB9IGVsc2VpZiAoJGEgIT09ICcwJyAmJiAkeC0+c2NhbGUgPCAkeS0+c2NhbGUpIHsKICAgICAgICAgICAgJGEgLj0gXHN0cl9yZXBlYXQoJzAnLCAkeS0+c2NhbGUgLSAkeC0+c2NhbGUpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFskYSwgJGJdOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkc2NhbGUKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHZhbHVlV2l0aE1pblNjYWxlKGludCAkc2NhbGUpIDogc3RyaW5nCiAgICB7CiAgICAgICAgJHZhbHVlID0gJHRoaXMtPnZhbHVlOwoKICAgICAgICBpZiAoJHRoaXMtPnZhbHVlICE9PSAnMCcgJiYgJHNjYWxlID4gJHRoaXMtPnNjYWxlKSB7CiAgICAgICAgICAgICR2YWx1ZSAuPSBcc3RyX3JlcGVhdCgnMCcsICRzY2FsZSAtICR0aGlzLT5zY2FsZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogQWRkcyBsZWFkaW5nIHplcm9zIGlmIG5lY2Vzc2FyeSB0byB0aGUgdW5zY2FsZWQgdmFsdWUgdG8gcmVwcmVzZW50IHRoZSBmdWxsIGRlY2ltYWwgbnVtYmVyLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0VW5zY2FsZWRWYWx1ZVdpdGhMZWFkaW5nWmVyb3MoKSA6IHN0cmluZwogICAgewogICAgICAgICR2YWx1ZSA9ICR0aGlzLT52YWx1ZTsKICAgICAgICAkdGFyZ2V0TGVuZ3RoID0gJHRoaXMtPnNjYWxlICsgMTsKICAgICAgICAkbmVnYXRpdmUgPSAoJHZhbHVlWzBdID09PSAnLScpOwogICAgICAgICRsZW5ndGggPSBcc3RybGVuKCR2YWx1ZSk7CgogICAgICAgIGlmICgkbmVnYXRpdmUpIHsKICAgICAgICAgICAgJGxlbmd0aC0tOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRsZW5ndGggPj0gJHRhcmdldExlbmd0aCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnZhbHVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRuZWdhdGl2ZSkgewogICAgICAgICAgICAkdmFsdWUgPSBcc3Vic3RyKCR2YWx1ZSwgMSk7CiAgICAgICAgfQoKICAgICAgICAkdmFsdWUgPSBcc3RyX3BhZCgkdmFsdWUsICR0YXJnZXRMZW5ndGgsICcwJywgU1RSX1BBRF9MRUZUKTsKCiAgICAgICAgaWYgKCRuZWdhdGl2ZSkgewogICAgICAgICAgICAkdmFsdWUgPSAnLScgLiAkdmFsdWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/BigInteger.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGg7Cgp1c2UgQnJpY2tcTWF0aFxFeGNlcHRpb25cRGl2aXNpb25CeVplcm9FeGNlcHRpb247CnVzZSBCcmlja1xNYXRoXEV4Y2VwdGlvblxJbnRlZ2VyT3ZlcmZsb3dFeGNlcHRpb247CnVzZSBCcmlja1xNYXRoXEV4Y2VwdGlvblxNYXRoRXhjZXB0aW9uOwp1c2UgQnJpY2tcTWF0aFxFeGNlcHRpb25cTmVnYXRpdmVOdW1iZXJFeGNlcHRpb247CnVzZSBCcmlja1xNYXRoXEV4Y2VwdGlvblxOdW1iZXJGb3JtYXRFeGNlcHRpb247CnVzZSBCcmlja1xNYXRoXEludGVybmFsXENhbGN1bGF0b3I7CgovKioKICogQW4gYXJiaXRyYXJ5LXNpemUgaW50ZWdlci4KICoKICogQWxsIG1ldGhvZHMgYWNjZXB0aW5nIGEgbnVtYmVyIGFzIGEgcGFyYW1ldGVyIGFjY2VwdCBlaXRoZXIgYSBCaWdJbnRlZ2VyIGluc3RhbmNlLAogKiBhbiBpbnRlZ2VyLCBvciBhIHN0cmluZyByZXByZXNlbnRpbmcgYW4gYXJiaXRyYXJ5IHNpemUgaW50ZWdlci4KICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KZmluYWwgY2xhc3MgQmlnSW50ZWdlciBleHRlbmRzIEJpZ051bWJlcgp7CiAgICAvKioKICAgICAqIFRoZSB2YWx1ZSwgYXMgYSBzdHJpbmcgb2YgZGlnaXRzIHdpdGggb3B0aW9uYWwgbGVhZGluZyBtaW51cyBzaWduLgogICAgICoKICAgICAqIE5vIGxlYWRpbmcgemVyb3MgbXVzdCBiZSBwcmVzZW50LgogICAgICogTm8gbGVhZGluZyBtaW51cyBzaWduIG11c3QgYmUgcHJlc2VudCBpZiB0aGUgbnVtYmVyIGlzIHplcm8uCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkdmFsdWU7CgogICAgLyoqCiAgICAgKiBQcm90ZWN0ZWQgY29uc3RydWN0b3IuIFVzZSBhIGZhY3RvcnkgbWV0aG9kIHRvIG9idGFpbiBhbiBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZSBBIHN0cmluZyBvZiBkaWdpdHMsIHdpdGggb3B0aW9uYWwgbGVhZGluZyBtaW51cyBzaWduLgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICR2YWx1ZSkKICAgIHsKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkdmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgQmlnSW50ZWdlciBvZiB0aGUgZ2l2ZW4gdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICoKICAgICAqIEB0aHJvd3MgTWF0aEV4Y2VwdGlvbiBJZiB0aGUgdmFsdWUgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIEJpZ0ludGVnZXIuCiAgICAgKgogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBvZigkdmFsdWUpIDogQmlnTnVtYmVyCiAgICB7CiAgICAgICAgcmV0dXJuIHBhcmVudDo6b2YoJHZhbHVlKS0+dG9CaWdJbnRlZ2VyKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgbnVtYmVyIGZyb20gYSBzdHJpbmcgaW4gYSBnaXZlbiBiYXNlLgogICAgICoKICAgICAqIFRoZSBzdHJpbmcgY2FuIG9wdGlvbmFsbHkgYmUgcHJlZml4ZWQgd2l0aCB0aGUgYCtgIG9yIGAtYCBzaWduLgogICAgICoKICAgICAqIEJhc2VzIGdyZWF0ZXIgdGhhbiAzNiBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzIG1ldGhvZCwgYXMgdGhlcmUgaXMgbm8gY2xlYXIgY29uc2Vuc3VzIG9uIHdoaWNoIG9mIHRoZSBsb3dlcmNhc2UKICAgICAqIG9yIHVwcGVyY2FzZSBjaGFyYWN0ZXJzIHNob3VsZCBjb21lIGZpcnN0LiBJbnN0ZWFkLCB0aGlzIG1ldGhvZCBhY2NlcHRzIGFueSBiYXNlIHVwIHRvIDM2LCBhbmQgZG9lcyBub3QKICAgICAqIGRpZmZlcmVudGlhdGUgbG93ZXJjYXNlIGFuZCB1cHBlcmNhc2UgY2hhcmFjdGVycywgd2hpY2ggYXJlIGNvbnNpZGVyZWQgZXF1YWwuCiAgICAgKgogICAgICogRm9yIGJhc2VzIGdyZWF0ZXIgdGhhbiAzNiwgYW5kL29yIGN1c3RvbSBhbHBoYWJldHMsIHVzZSB0aGUgZnJvbUFyYml0cmFyeUJhc2UoKSBtZXRob2QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbnVtYmVyIFRoZSBudW1iZXIgdG8gY29udmVydCwgaW4gdGhlIGdpdmVuIGJhc2UuCiAgICAgKiBAcGFyYW0gaW50ICAgICRiYXNlICAgVGhlIGJhc2Ugb2YgdGhlIG51bWJlciwgYmV0d2VlbiAyIGFuZCAzNi4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqCiAgICAgKiBAdGhyb3dzIE51bWJlckZvcm1hdEV4Y2VwdGlvbiAgICAgSWYgdGhlIG51bWJlciBpcyBlbXB0eSwgb3IgY29udGFpbnMgaW52YWxpZCBjaGFycyBmb3IgdGhlIGdpdmVuIGJhc2UuCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gSWYgdGhlIGJhc2UgaXMgb3V0IG9mIHJhbmdlLgogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUJhc2Uoc3RyaW5nICRudW1iZXIsIGludCAkYmFzZSkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgaWYgKCRudW1iZXIgPT09ICcnKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBOdW1iZXJGb3JtYXRFeGNlcHRpb24oJ1RoZSBudW1iZXIgY2Fubm90IGJlIGVtcHR5LicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRiYXNlIDwgMiB8fCAkYmFzZSA+IDM2KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKFxzcHJpbnRmKCdCYXNlICVkIGlzIG5vdCBpbiByYW5nZSAyIHRvIDM2LicsICRiYXNlKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJG51bWJlclswXSA9PT0gJy0nKSB7CiAgICAgICAgICAgICRzaWduID0gJy0nOwogICAgICAgICAgICAkbnVtYmVyID0gXHN1YnN0cigkbnVtYmVyLCAxKTsKICAgICAgICB9IGVsc2VpZiAoJG51bWJlclswXSA9PT0gJysnKSB7CiAgICAgICAgICAgICRzaWduID0gJyc7CiAgICAgICAgICAgICRudW1iZXIgPSBcc3Vic3RyKCRudW1iZXIsIDEpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRzaWduID0gJyc7CiAgICAgICAgfQoKICAgICAgICBpZiAoJG51bWJlciA9PT0gJycpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IE51bWJlckZvcm1hdEV4Y2VwdGlvbignVGhlIG51bWJlciBjYW5ub3QgYmUgZW1wdHkuJyk7CiAgICAgICAgfQoKICAgICAgICAkbnVtYmVyID0gXGx0cmltKCRudW1iZXIsICcwJyk7CgogICAgICAgIGlmICgkbnVtYmVyID09PSAnJykgewogICAgICAgICAgICAvLyBUaGUgcmVzdWx0IHdpbGwgYmUgdGhlIHNhbWUgaW4gYW55IGJhc2UsIGF2b2lkIGZ1cnRoZXIgY2FsY3VsYXRpb24uCiAgICAgICAgICAgIHJldHVybiBCaWdJbnRlZ2VyOjp6ZXJvKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJG51bWJlciA9PT0gJzEnKSB7CiAgICAgICAgICAgIC8vIFRoZSByZXN1bHQgd2lsbCBiZSB0aGUgc2FtZSBpbiBhbnkgYmFzZSwgYXZvaWQgZnVydGhlciBjYWxjdWxhdGlvbi4KICAgICAgICAgICAgcmV0dXJuIG5ldyBCaWdJbnRlZ2VyKCRzaWduIC4gJzEnKTsKICAgICAgICB9CgogICAgICAgICRwYXR0ZXJuID0gJy9bXicgLiBcc3Vic3RyKENhbGN1bGF0b3I6OkFMUEhBQkVULCAwLCAkYmFzZSkgLiAnXS8nOwoKICAgICAgICBpZiAoXHByZWdfbWF0Y2goJHBhdHRlcm4sIFxzdHJ0b2xvd2VyKCRudW1iZXIpLCAkbWF0Y2hlcykgPT09IDEpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IE51bWJlckZvcm1hdEV4Y2VwdGlvbihcc3ByaW50ZignIiVzIiBpcyBub3QgYSB2YWxpZCBjaGFyYWN0ZXIgaW4gYmFzZSAlZC4nLCAkbWF0Y2hlc1swXSwgJGJhc2UpKTsKICAgICAgICB9CgogICAgICAgIGlmICgkYmFzZSA9PT0gMTApIHsKICAgICAgICAgICAgLy8gVGhlIG51bWJlciBpcyB1c2FibGUgYXMgaXMsIGF2b2lkIGZ1cnRoZXIgY2FsY3VsYXRpb24uCiAgICAgICAgICAgIHJldHVybiBuZXcgQmlnSW50ZWdlcigkc2lnbiAuICRudW1iZXIpOwogICAgICAgIH0KCiAgICAgICAgJHJlc3VsdCA9IENhbGN1bGF0b3I6OmdldCgpLT5mcm9tQmFzZSgkbnVtYmVyLCAkYmFzZSk7CgogICAgICAgIHJldHVybiBuZXcgQmlnSW50ZWdlcigkc2lnbiAuICRyZXN1bHQpOwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2VzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYW4gaW50ZWdlciBpbiBhbiBhcmJpdHJhcnkgYmFzZSwgdXNpbmcgYSBjdXN0b20gYWxwaGFiZXQuCiAgICAgKgogICAgICogQmVjYXVzZSB0aGlzIG1ldGhvZCBhY2NlcHRzIGFuIGFscGhhYmV0IHdpdGggYW55IGNoYXJhY3RlciwgaW5jbHVkaW5nIGRhc2gsIGl0IGRvZXMgbm90IGhhbmRsZSBuZWdhdGl2ZSBudW1iZXJzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG51bWJlciAgIFRoZSBudW1iZXIgdG8gcGFyc2UuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhbHBoYWJldCBUaGUgYWxwaGFiZXQsIGZvciBleGFtcGxlICcwMScgZm9yIGJhc2UgMiwgb3IgJzAxMjM0NTY3JyBmb3IgYmFzZSA4LgogICAgICoKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICoKICAgICAqIEB0aHJvd3MgTnVtYmVyRm9ybWF0RXhjZXB0aW9uICAgICBJZiB0aGUgZ2l2ZW4gbnVtYmVyIGlzIGVtcHR5IG9yIGNvbnRhaW5zIGludmFsaWQgY2hhcnMgZm9yIHRoZSBnaXZlbiBhbHBoYWJldC4KICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiB0aGUgYWxwaGFiZXQgZG9lcyBub3QgY29udGFpbiBhdCBsZWFzdCAyIGNoYXJzLgogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUFyYml0cmFyeUJhc2Uoc3RyaW5nICRudW1iZXIsIHN0cmluZyAkYWxwaGFiZXQpIDogQmlnSW50ZWdlcgogICAgewogICAgICAgIGlmICgkbnVtYmVyID09PSAnJykgewogICAgICAgICAgICB0aHJvdyBuZXcgTnVtYmVyRm9ybWF0RXhjZXB0aW9uKCdUaGUgbnVtYmVyIGNhbm5vdCBiZSBlbXB0eS4nKTsKICAgICAgICB9CgogICAgICAgICRiYXNlID0gXHN0cmxlbigkYWxwaGFiZXQpOwoKICAgICAgICBpZiAoJGJhc2UgPCAyKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGUgYWxwaGFiZXQgbXVzdCBjb250YWluIGF0IGxlYXN0IDIgY2hhcnMuJyk7CiAgICAgICAgfQoKICAgICAgICAkcGF0dGVybiA9ICcvW14nIC4gXHByZWdfcXVvdGUoJGFscGhhYmV0LCAnLycpIC4gJ10vJzsKCiAgICAgICAgaWYgKFxwcmVnX21hdGNoKCRwYXR0ZXJuLCAkbnVtYmVyLCAkbWF0Y2hlcykgPT09IDEpIHsKICAgICAgICAgICAgdGhyb3cgTnVtYmVyRm9ybWF0RXhjZXB0aW9uOjpjaGFyTm90SW5BbHBoYWJldCgkbWF0Y2hlc1swXSk7CiAgICAgICAgfQoKICAgICAgICAkbnVtYmVyID0gQ2FsY3VsYXRvcjo6Z2V0KCktPmZyb21BcmJpdHJhcnlCYXNlKCRudW1iZXIsICRhbHBoYWJldCwgJGJhc2UpOwoKICAgICAgICByZXR1cm4gbmV3IEJpZ0ludGVnZXIoJG51bWJlcik7CiAgICB9CgogICAgLyoqCiAgICAgKiBUcmFuc2xhdGVzIGEgc3RyaW5nIG9mIGJ5dGVzIGNvbnRhaW5pbmcgdGhlIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiBhIEJpZ0ludGVnZXIgaW50byBhIEJpZ0ludGVnZXIuCiAgICAgKgogICAgICogVGhlIGlucHV0IHN0cmluZyBpcyBhc3N1bWVkIHRvIGJlIGluIGJpZy1lbmRpYW4gYnl0ZS1vcmRlcjogdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBpcyBpbiB0aGUgemVyb3RoIGVsZW1lbnQuCiAgICAgKgogICAgICogSWYgYCRzaWduZWRgIGlzIHRydWUsIHRoZSBpbnB1dCBpcyBhc3N1bWVkIHRvIGJlIGluIHR3bydzLWNvbXBsZW1lbnQgcmVwcmVzZW50YXRpb24sIGFuZCB0aGUgbGVhZGluZyBiaXQgaXMKICAgICAqIGludGVycHJldGVkIGFzIGEgc2lnbiBiaXQuIElmIGAkc2lnbmVkYCBpcyBmYWxzZSwgdGhlIGlucHV0IGlzIGludGVycHJldGVkIGFzIGFuIHVuc2lnbmVkIG51bWJlciwgYW5kIHRoZQogICAgICogcmVzdWx0aW5nIEJpZ0ludGVnZXIgd2lsbCBhbHdheXMgYmUgcG9zaXRpdmUgb3IgemVyby4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byByZXRyaWV2ZSBhIG51bWJlciBleHBvcnRlZCBieSBgdG9CeXRlcygpYCwgYXMgbG9uZyBhcyB0aGUgYCRzaWduZWRgIGZsYWdzIG1hdGNoLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlICBUaGUgYnl0ZSBzdHJpbmcuCiAgICAgKiBAcGFyYW0gYm9vbCAgICRzaWduZWQgV2hldGhlciB0byBpbnRlcnByZXQgYXMgYSBzaWduZWQgbnVtYmVyIGluIHR3bydzLWNvbXBsZW1lbnQgcmVwcmVzZW50YXRpb24gd2l0aCBhIGxlYWRpbmcKICAgICAqICAgICAgICAgICAgICAgICAgICAgICBzaWduIGJpdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqCiAgICAgKiBAdGhyb3dzIE51bWJlckZvcm1hdEV4Y2VwdGlvbiBJZiB0aGUgc3RyaW5nIGlzIGVtcHR5LgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CeXRlcyhzdHJpbmcgJHZhbHVlLCBib29sICRzaWduZWQgPSB0cnVlKSA6IEJpZ0ludGVnZXIKICAgIHsKICAgICAgICBpZiAoJHZhbHVlID09PSAnJykgewogICAgICAgICAgICB0aHJvdyBuZXcgTnVtYmVyRm9ybWF0RXhjZXB0aW9uKCdUaGUgYnl0ZSBzdHJpbmcgbXVzdCBub3QgYmUgZW1wdHkuJyk7CiAgICAgICAgfQoKICAgICAgICAkdHdvc0NvbXBsZW1lbnQgPSBmYWxzZTsKCiAgICAgICAgaWYgKCRzaWduZWQpIHsKICAgICAgICAgICAgJHggPSBcb3JkKCR2YWx1ZVswXSk7CgogICAgICAgICAgICBpZiAoKCR0d29zQ29tcGxlbWVudCA9ICgkeCA+PSAweDgwKSkpIHsKICAgICAgICAgICAgICAgICR2YWx1ZSA9IH4kdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRudW1iZXIgPSBzZWxmOjpmcm9tQmFzZShcYmluMmhleCgkdmFsdWUpLCAxNik7CgogICAgICAgIGlmICgkdHdvc0NvbXBsZW1lbnQpIHsKICAgICAgICAgICAgcmV0dXJuICRudW1iZXItPnBsdXMoMSktPm5lZ2F0ZWQoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbnVtYmVyOwogICAgfQoKICAgIC8qKgogICAgICogR2VuZXJhdGVzIGEgcHNldWRvLXJhbmRvbSBudW1iZXIgaW4gdGhlIHJhbmdlIDAgdG8gMl5udW1CaXRzIC0gMS4KICAgICAqCiAgICAgKiBVc2luZyB0aGUgZGVmYXVsdCByYW5kb20gYnl0ZXMgZ2VuZXJhdG9yLCB0aGlzIG1ldGhvZCBpcyBzdWl0YWJsZSBmb3IgY3J5cHRvZ3JhcGhpYyB1c2UuCiAgICAgKgogICAgICogQHBzYWxtLXBhcmFtIGNhbGxhYmxlKGludCk6IHN0cmluZyAkcmFuZG9tQnl0ZXNHZW5lcmF0b3IKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICAgICAgICAgICAkbnVtQml0cyAgICAgICAgICAgICAgVGhlIG51bWJlciBvZiBiaXRzLgogICAgICogQHBhcmFtIGNhbGxhYmxlfG51bGwgJHJhbmRvbUJ5dGVzR2VuZXJhdG9yIEEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIGEgbnVtYmVyIG9mIGJ5dGVzIGFzIGFuIGludGVnZXIsIGFuZCByZXR1cm5zIGEKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgb2YgcmFuZG9tIGJ5dGVzIG9mIHRoZSBnaXZlbiBsZW5ndGguIERlZmF1bHRzIHRvIHRoZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGByYW5kb21fYnl0ZXMoKWAgZnVuY3Rpb24uCiAgICAgKgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIElmICRudW1CaXRzIGlzIG5lZ2F0aXZlLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJhbmRvbUJpdHMoaW50ICRudW1CaXRzLCA/Y2FsbGFibGUgJHJhbmRvbUJ5dGVzR2VuZXJhdG9yID0gbnVsbCkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgaWYgKCRudW1CaXRzIDwgMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVGhlIG51bWJlciBvZiBiaXRzIGNhbm5vdCBiZSBuZWdhdGl2ZS4nKTsKICAgICAgICB9CgogICAgICAgIGlmICgkbnVtQml0cyA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gQmlnSW50ZWdlcjo6emVybygpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRyYW5kb21CeXRlc0dlbmVyYXRvciA9PT0gbnVsbCkgewogICAgICAgICAgICAkcmFuZG9tQnl0ZXNHZW5lcmF0b3IgPSAncmFuZG9tX2J5dGVzJzsKICAgICAgICB9CgogICAgICAgICRieXRlTGVuZ3RoID0gXGludGRpdigkbnVtQml0cyAtIDEsIDgpICsgMTsKCiAgICAgICAgJGV4dHJhQml0cyA9ICgkYnl0ZUxlbmd0aCAqIDggLSAkbnVtQml0cyk7CiAgICAgICAgJGJpdG1hc2sgICA9IFxjaHIoMHhGRiA+PiAkZXh0cmFCaXRzKTsKCiAgICAgICAgJHJhbmRvbUJ5dGVzICAgID0gJHJhbmRvbUJ5dGVzR2VuZXJhdG9yKCRieXRlTGVuZ3RoKTsKICAgICAgICAkcmFuZG9tQnl0ZXNbMF0gPSAkcmFuZG9tQnl0ZXNbMF0gJiAkYml0bWFzazsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmZyb21CeXRlcygkcmFuZG9tQnl0ZXMsIGZhbHNlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdlbmVyYXRlcyBhIHBzZXVkby1yYW5kb20gbnVtYmVyIGJldHdlZW4gYCRtaW5gIGFuZCBgJG1heGAuCiAgICAgKgogICAgICogVXNpbmcgdGhlIGRlZmF1bHQgcmFuZG9tIGJ5dGVzIGdlbmVyYXRvciwgdGhpcyBtZXRob2QgaXMgc3VpdGFibGUgZm9yIGNyeXB0b2dyYXBoaWMgdXNlLgogICAgICoKICAgICAqIEBwc2FsbS1wYXJhbSAoY2FsbGFibGUoaW50KTogc3RyaW5nKXxudWxsICRyYW5kb21CeXRlc0dlbmVyYXRvcgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkbWluICAgICAgICAgICAgICAgICAgVGhlIGxvd2VyIGJvdW5kLiBNdXN0IGJlIGNvbnZlcnRpYmxlIHRvIGEgQmlnSW50ZWdlci4KICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkbWF4ICAgICAgICAgICAgICAgICAgVGhlIHVwcGVyIGJvdW5kLiBNdXN0IGJlIGNvbnZlcnRpYmxlIHRvIGEgQmlnSW50ZWdlci4KICAgICAqIEBwYXJhbSBjYWxsYWJsZXxudWxsICAgICAgICAgICAgICAkcmFuZG9tQnl0ZXNHZW5lcmF0b3IgQSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgYSBudW1iZXIgb2YgYnl0ZXMgYXMgYW4gaW50ZWdlciwKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHJldHVybnMgYSBzdHJpbmcgb2YgcmFuZG9tIGJ5dGVzIG9mIHRoZSBnaXZlbiBsZW5ndGguCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIHRoZSBgcmFuZG9tX2J5dGVzKClgIGZ1bmN0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICoKICAgICAqIEB0aHJvd3MgTWF0aEV4Y2VwdGlvbiBJZiBvbmUgb2YgdGhlIHBhcmFtZXRlcnMgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIEJpZ0ludGVnZXIsCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgb3IgYCRtaW5gIGlzIGdyZWF0ZXIgdGhhbiBgJG1heGAuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmFuZG9tUmFuZ2UoJG1pbiwgJG1heCwgP2NhbGxhYmxlICRyYW5kb21CeXRlc0dlbmVyYXRvciA9IG51bGwpIDogQmlnSW50ZWdlcgogICAgewogICAgICAgICRtaW4gPSBCaWdJbnRlZ2VyOjpvZigkbWluKTsKICAgICAgICAkbWF4ID0gQmlnSW50ZWdlcjo6b2YoJG1heCk7CgogICAgICAgIGlmICgkbWluLT5pc0dyZWF0ZXJUaGFuKCRtYXgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBNYXRoRXhjZXB0aW9uKCckbWluIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gJG1heC4nKTsKICAgICAgICB9CgogICAgICAgIGlmICgkbWluLT5pc0VxdWFsVG8oJG1heCkpIHsKICAgICAgICAgICAgcmV0dXJuICRtaW47CiAgICAgICAgfQoKICAgICAgICAkZGlmZiAgICAgID0gJG1heC0+bWludXMoJG1pbik7CiAgICAgICAgJGJpdExlbmd0aCA9ICRkaWZmLT5nZXRCaXRMZW5ndGgoKTsKCiAgICAgICAgLy8gdHJ5IHVudGlsIHRoZSBudW1iZXIgaXMgaW4gcmFuZ2UgKDUwJSB0byAxMDAlIGNoYW5jZSBvZiBzdWNjZXNzKQogICAgICAgIGRvIHsKICAgICAgICAgICAgJHJhbmRvbU51bWJlciA9IHNlbGY6OnJhbmRvbUJpdHMoJGJpdExlbmd0aCwgJHJhbmRvbUJ5dGVzR2VuZXJhdG9yKTsKICAgICAgICB9IHdoaWxlICgkcmFuZG9tTnVtYmVyLT5pc0dyZWF0ZXJUaGFuKCRkaWZmKSk7CgogICAgICAgIHJldHVybiAkcmFuZG9tTnVtYmVyLT5wbHVzKCRtaW4pOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIEJpZ0ludGVnZXIgcmVwcmVzZW50aW5nIHplcm8uCiAgICAgKgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyCiAgICAgKgogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB6ZXJvKCkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgLyoqCiAgICAgICAgICogQHBzYWxtLXN1cHByZXNzIEltcHVyZVN0YXRpY1ZhcmlhYmxlCiAgICAgICAgICogQHZhciBCaWdJbnRlZ2VyfG51bGwgJHplcm8KICAgICAgICAgKi8KICAgICAgICBzdGF0aWMgJHplcm87CgogICAgICAgIGlmICgkemVybyA9PT0gbnVsbCkgewogICAgICAgICAgICAkemVybyA9IG5ldyBCaWdJbnRlZ2VyKCcwJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHplcm87CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgQmlnSW50ZWdlciByZXByZXNlbnRpbmcgb25lLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gb25lKCkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgLyoqCiAgICAgICAgICogQHBzYWxtLXN1cHByZXNzIEltcHVyZVN0YXRpY1ZhcmlhYmxlCiAgICAgICAgICogQHZhciBCaWdJbnRlZ2VyfG51bGwgJG9uZQogICAgICAgICAqLwogICAgICAgIHN0YXRpYyAkb25lOwoKICAgICAgICBpZiAoJG9uZSA9PT0gbnVsbCkgewogICAgICAgICAgICAkb25lID0gbmV3IEJpZ0ludGVnZXIoJzEnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkb25lOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIEJpZ0ludGVnZXIgcmVwcmVzZW50aW5nIHRlbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRlbigpIDogQmlnSW50ZWdlcgogICAgewogICAgICAgIC8qKgogICAgICAgICAqIEBwc2FsbS1zdXBwcmVzcyBJbXB1cmVTdGF0aWNWYXJpYWJsZQogICAgICAgICAqIEB2YXIgQmlnSW50ZWdlcnxudWxsICR0ZW4KICAgICAgICAgKi8KICAgICAgICBzdGF0aWMgJHRlbjsKCiAgICAgICAgaWYgKCR0ZW4gPT09IG51bGwpIHsKICAgICAgICAgICAgJHRlbiA9IG5ldyBCaWdJbnRlZ2VyKCcxMCcpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0ZW47CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzdW0gb2YgdGhpcyBudW1iZXIgYW5kIHRoZSBnaXZlbiBvbmUuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICR0aGF0IFRoZSBudW1iZXIgdG8gYWRkLiBNdXN0IGJlIGNvbnZlcnRpYmxlIHRvIGEgQmlnSW50ZWdlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIgVGhlIHJlc3VsdC4KICAgICAqCiAgICAgKiBAdGhyb3dzIE1hdGhFeGNlcHRpb24gSWYgdGhlIG51bWJlciBpcyBub3QgdmFsaWQsIG9yIGlzIG5vdCBjb252ZXJ0aWJsZSB0byBhIEJpZ0ludGVnZXIuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwbHVzKCR0aGF0KSA6IEJpZ0ludGVnZXIKICAgIHsKICAgICAgICAkdGhhdCA9IEJpZ0ludGVnZXI6Om9mKCR0aGF0KTsKCiAgICAgICAgaWYgKCR0aGF0LT52YWx1ZSA9PT0gJzAnKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+dmFsdWUgPT09ICcwJykgewogICAgICAgICAgICByZXR1cm4gJHRoYXQ7CiAgICAgICAgfQoKICAgICAgICAkdmFsdWUgPSBDYWxjdWxhdG9yOjpnZXQoKS0+YWRkKCR0aGlzLT52YWx1ZSwgJHRoYXQtPnZhbHVlKTsKCiAgICAgICAgcmV0dXJuIG5ldyBCaWdJbnRlZ2VyKCR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBkaWZmZXJlbmNlIG9mIHRoaXMgbnVtYmVyIGFuZCB0aGUgZ2l2ZW4gb25lLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkdGhhdCBUaGUgbnVtYmVyIHRvIHN1YnRyYWN0LiBNdXN0IGJlIGNvbnZlcnRpYmxlIHRvIGEgQmlnSW50ZWdlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIgVGhlIHJlc3VsdC4KICAgICAqCiAgICAgKiBAdGhyb3dzIE1hdGhFeGNlcHRpb24gSWYgdGhlIG51bWJlciBpcyBub3QgdmFsaWQsIG9yIGlzIG5vdCBjb252ZXJ0aWJsZSB0byBhIEJpZ0ludGVnZXIuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtaW51cygkdGhhdCkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgJHRoYXQgPSBCaWdJbnRlZ2VyOjpvZigkdGhhdCk7CgogICAgICAgIGlmICgkdGhhdC0+dmFsdWUgPT09ICcwJykgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkdmFsdWUgPSBDYWxjdWxhdG9yOjpnZXQoKS0+c3ViKCR0aGlzLT52YWx1ZSwgJHRoYXQtPnZhbHVlKTsKCiAgICAgICAgcmV0dXJuIG5ldyBCaWdJbnRlZ2VyKCR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBwcm9kdWN0IG9mIHRoaXMgbnVtYmVyIGFuZCB0aGUgZ2l2ZW4gb25lLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkdGhhdCBUaGUgbXVsdGlwbGllci4gTXVzdCBiZSBjb252ZXJ0aWJsZSB0byBhIEJpZ0ludGVnZXIuCiAgICAgKgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyIFRoZSByZXN1bHQuCiAgICAgKgogICAgICogQHRocm93cyBNYXRoRXhjZXB0aW9uIElmIHRoZSBtdWx0aXBsaWVyIGlzIG5vdCBhIHZhbGlkIG51bWJlciwgb3IgaXMgbm90IGNvbnZlcnRpYmxlIHRvIGEgQmlnSW50ZWdlci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG11bHRpcGxpZWRCeSgkdGhhdCkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgJHRoYXQgPSBCaWdJbnRlZ2VyOjpvZigkdGhhdCk7CgogICAgICAgIGlmICgkdGhhdC0+dmFsdWUgPT09ICcxJykgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoaXMtPnZhbHVlID09PSAnMScpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGF0OwogICAgICAgIH0KCiAgICAgICAgJHZhbHVlID0gQ2FsY3VsYXRvcjo6Z2V0KCktPm11bCgkdGhpcy0+dmFsdWUsICR0aGF0LT52YWx1ZSk7CgogICAgICAgIHJldHVybiBuZXcgQmlnSW50ZWdlcigkdmFsdWUpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBkaXZpc2lvbiBvZiB0aGlzIG51bWJlciBieSB0aGUgZ2l2ZW4gb25lLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkdGhhdCAgICAgICAgIFRoZSBkaXZpc29yLiBNdXN0IGJlIGNvbnZlcnRpYmxlIHRvIGEgQmlnSW50ZWdlci4KICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAkcm91bmRpbmdNb2RlIEFuIG9wdGlvbmFsIHJvdW5kaW5nIG1vZGUuCiAgICAgKgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyIFRoZSByZXN1bHQuCiAgICAgKgogICAgICogQHRocm93cyBNYXRoRXhjZXB0aW9uIElmIHRoZSBkaXZpc29yIGlzIG5vdCBhIHZhbGlkIG51bWJlciwgaXMgbm90IGNvbnZlcnRpYmxlIHRvIGEgQmlnSW50ZWdlciwgaXMgemVybywKICAgICAqICAgICAgICAgICAgICAgICAgICAgICBvciBSb3VuZGluZ01vZGU6OlVOTkVDRVNTQVJZIGlzIHVzZWQgYW5kIHRoZSByZW1haW5kZXIgaXMgbm90IHplcm8uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaXZpZGVkQnkoJHRoYXQsIGludCAkcm91bmRpbmdNb2RlID0gUm91bmRpbmdNb2RlOjpVTk5FQ0VTU0FSWSkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgJHRoYXQgPSBCaWdJbnRlZ2VyOjpvZigkdGhhdCk7CgogICAgICAgIGlmICgkdGhhdC0+dmFsdWUgPT09ICcxJykgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoYXQtPnZhbHVlID09PSAnMCcpIHsKICAgICAgICAgICAgdGhyb3cgRGl2aXNpb25CeVplcm9FeGNlcHRpb246OmRpdmlzaW9uQnlaZXJvKCk7CiAgICAgICAgfQoKICAgICAgICAkcmVzdWx0ID0gQ2FsY3VsYXRvcjo6Z2V0KCktPmRpdlJvdW5kKCR0aGlzLT52YWx1ZSwgJHRoYXQtPnZhbHVlLCAkcm91bmRpbmdNb2RlKTsKCiAgICAgICAgcmV0dXJuIG5ldyBCaWdJbnRlZ2VyKCRyZXN1bHQpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGlzIG51bWJlciBleHBvbmVudGlhdGVkIHRvIHRoZSBnaXZlbiB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRleHBvbmVudCBUaGUgZXhwb25lbnQuCiAgICAgKgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyIFRoZSByZXN1bHQuCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIElmIHRoZSBleHBvbmVudCBpcyBub3QgaW4gdGhlIHJhbmdlIDAgdG8gMSwwMDAsMDAwLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcG93ZXIoaW50ICRleHBvbmVudCkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgaWYgKCRleHBvbmVudCA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gQmlnSW50ZWdlcjo6b25lKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGV4cG9uZW50ID09PSAxKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIGlmICgkZXhwb25lbnQgPCAwIHx8ICRleHBvbmVudCA+IENhbGN1bGF0b3I6Ok1BWF9QT1dFUikgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihcc3ByaW50ZigKICAgICAgICAgICAgICAgICdUaGUgZXhwb25lbnQgJWQgaXMgbm90IGluIHRoZSByYW5nZSAwIHRvICVkLicsCiAgICAgICAgICAgICAgICAkZXhwb25lbnQsCiAgICAgICAgICAgICAgICBDYWxjdWxhdG9yOjpNQVhfUE9XRVIKICAgICAgICAgICAgKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IEJpZ0ludGVnZXIoQ2FsY3VsYXRvcjo6Z2V0KCktPnBvdygkdGhpcy0+dmFsdWUsICRleHBvbmVudCkpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcXVvdGllbnQgb2YgdGhlIGRpdmlzaW9uIG9mIHRoaXMgbnVtYmVyIGJ5IHRoZSBnaXZlbiBvbmUuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICR0aGF0IFRoZSBkaXZpc29yLiBNdXN0IGJlIGNvbnZlcnRpYmxlIHRvIGEgQmlnSW50ZWdlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqCiAgICAgKiBAdGhyb3dzIERpdmlzaW9uQnlaZXJvRXhjZXB0aW9uIElmIHRoZSBkaXZpc29yIGlzIHplcm8uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBxdW90aWVudCgkdGhhdCkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgJHRoYXQgPSBCaWdJbnRlZ2VyOjpvZigkdGhhdCk7CgogICAgICAgIGlmICgkdGhhdC0+dmFsdWUgPT09ICcxJykgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoYXQtPnZhbHVlID09PSAnMCcpIHsKICAgICAgICAgICAgdGhyb3cgRGl2aXNpb25CeVplcm9FeGNlcHRpb246OmRpdmlzaW9uQnlaZXJvKCk7CiAgICAgICAgfQoKICAgICAgICAkcXVvdGllbnQgPSBDYWxjdWxhdG9yOjpnZXQoKS0+ZGl2USgkdGhpcy0+dmFsdWUsICR0aGF0LT52YWx1ZSk7CgogICAgICAgIHJldHVybiBuZXcgQmlnSW50ZWdlcigkcXVvdGllbnQpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmVtYWluZGVyIG9mIHRoZSBkaXZpc2lvbiBvZiB0aGlzIG51bWJlciBieSB0aGUgZ2l2ZW4gb25lLgogICAgICoKICAgICAqIFRoZSByZW1haW5kZXIsIHdoZW4gbm9uLXplcm8sIGhhcyB0aGUgc2FtZSBzaWduIGFzIHRoZSBkaXZpZGVuZC4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnTnVtYmVyfGludHxmbG9hdHxzdHJpbmcgJHRoYXQgVGhlIGRpdmlzb3IuIE11c3QgYmUgY29udmVydGlibGUgdG8gYSBCaWdJbnRlZ2VyLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICoKICAgICAqIEB0aHJvd3MgRGl2aXNpb25CeVplcm9FeGNlcHRpb24gSWYgdGhlIGRpdmlzb3IgaXMgemVyby4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbWFpbmRlcigkdGhhdCkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgJHRoYXQgPSBCaWdJbnRlZ2VyOjpvZigkdGhhdCk7CgogICAgICAgIGlmICgkdGhhdC0+dmFsdWUgPT09ICcxJykgewogICAgICAgICAgICByZXR1cm4gQmlnSW50ZWdlcjo6emVybygpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGF0LT52YWx1ZSA9PT0gJzAnKSB7CiAgICAgICAgICAgIHRocm93IERpdmlzaW9uQnlaZXJvRXhjZXB0aW9uOjpkaXZpc2lvbkJ5WmVybygpOwogICAgICAgIH0KCiAgICAgICAgJHJlbWFpbmRlciA9IENhbGN1bGF0b3I6OmdldCgpLT5kaXZSKCR0aGlzLT52YWx1ZSwgJHRoYXQtPnZhbHVlKTsKCiAgICAgICAgcmV0dXJuIG5ldyBCaWdJbnRlZ2VyKCRyZW1haW5kZXIpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcXVvdGllbnQgYW5kIHJlbWFpbmRlciBvZiB0aGUgZGl2aXNpb24gb2YgdGhpcyBudW1iZXIgYnkgdGhlIGdpdmVuIG9uZS4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnTnVtYmVyfGludHxmbG9hdHxzdHJpbmcgJHRoYXQgVGhlIGRpdmlzb3IuIE11c3QgYmUgY29udmVydGlibGUgdG8gYSBCaWdJbnRlZ2VyLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcltdIEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHF1b3RpZW50IGFuZCB0aGUgcmVtYWluZGVyLgogICAgICoKICAgICAqIEB0aHJvd3MgRGl2aXNpb25CeVplcm9FeGNlcHRpb24gSWYgdGhlIGRpdmlzb3IgaXMgemVyby4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHF1b3RpZW50QW5kUmVtYWluZGVyKCR0aGF0KSA6IGFycmF5CiAgICB7CiAgICAgICAgJHRoYXQgPSBCaWdJbnRlZ2VyOjpvZigkdGhhdCk7CgogICAgICAgIGlmICgkdGhhdC0+dmFsdWUgPT09ICcwJykgewogICAgICAgICAgICB0aHJvdyBEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbjo6ZGl2aXNpb25CeVplcm8oKTsKICAgICAgICB9CgogICAgICAgIFskcXVvdGllbnQsICRyZW1haW5kZXJdID0gQ2FsY3VsYXRvcjo6Z2V0KCktPmRpdlFSKCR0aGlzLT52YWx1ZSwgJHRoYXQtPnZhbHVlKTsKCiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgbmV3IEJpZ0ludGVnZXIoJHF1b3RpZW50KSwKICAgICAgICAgICAgbmV3IEJpZ0ludGVnZXIoJHJlbWFpbmRlcikKICAgICAgICBdOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbW9kdWxvIG9mIHRoaXMgbnVtYmVyIGFuZCB0aGUgZ2l2ZW4gb25lLgogICAgICoKICAgICAqIFRoZSBtb2R1bG8gb3BlcmF0aW9uIHlpZWxkcyB0aGUgc2FtZSByZXN1bHQgYXMgdGhlIHJlbWFpbmRlciBvcGVyYXRpb24gd2hlbiBib3RoIG9wZXJhbmRzIGFyZSBvZiB0aGUgc2FtZSBzaWduLAogICAgICogYW5kIG1heSBkaWZmZXIgd2hlbiBzaWducyBhcmUgZGlmZmVyZW50LgogICAgICoKICAgICAqIFRoZSByZXN1bHQgb2YgdGhlIG1vZHVsbyBvcGVyYXRpb24sIHdoZW4gbm9uLXplcm8sIGhhcyB0aGUgc2FtZSBzaWduIGFzIHRoZSBkaXZpc29yLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkdGhhdCBUaGUgZGl2aXNvci4gTXVzdCBiZSBjb252ZXJ0aWJsZSB0byBhIEJpZ0ludGVnZXIuCiAgICAgKgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyCiAgICAgKgogICAgICogQHRocm93cyBEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbiBJZiB0aGUgZGl2aXNvciBpcyB6ZXJvLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbW9kKCR0aGF0KSA6IEJpZ0ludGVnZXIKICAgIHsKICAgICAgICAkdGhhdCA9IEJpZ0ludGVnZXI6Om9mKCR0aGF0KTsKCiAgICAgICAgaWYgKCR0aGF0LT52YWx1ZSA9PT0gJzAnKSB7CiAgICAgICAgICAgIHRocm93IERpdmlzaW9uQnlaZXJvRXhjZXB0aW9uOjptb2R1bHVzTXVzdE5vdEJlWmVybygpOwogICAgICAgIH0KCiAgICAgICAgJHZhbHVlID0gQ2FsY3VsYXRvcjo6Z2V0KCktPm1vZCgkdGhpcy0+dmFsdWUsICR0aGF0LT52YWx1ZSk7CgogICAgICAgIHJldHVybiBuZXcgQmlnSW50ZWdlcigkdmFsdWUpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbW9kdWxhciBtdWx0aXBsaWNhdGl2ZSBpbnZlcnNlIG9mIHRoaXMgQmlnSW50ZWdlciBtb2R1bG8gJG0uCiAgICAgKgogICAgICogQHBhcmFtIEJpZ0ludGVnZXIgJG0KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqCiAgICAgKiBAdGhyb3dzIERpdmlzaW9uQnlaZXJvRXhjZXB0aW9uIElmICRtIGlzIHplcm8uCiAgICAgKiBAdGhyb3dzIE5lZ2F0aXZlTnVtYmVyRXhjZXB0aW9uIElmICRtIGlzIG5lZ2F0aXZlLgogICAgICogQHRocm93cyBNYXRoRXhjZXB0aW9uICAgICAgICAgICBJZiB0aGlzIEJpZ0ludGVnZXIgaGFzIG5vIG11bHRpcGxpY2F0aXZlIGludmVyc2UgbW9kIG0gKHRoYXQgaXMsIHRoaXMgQmlnSW50ZWdlcgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgcmVsYXRpdmVseSBwcmltZSB0byBtKS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1vZEludmVyc2UoQmlnSW50ZWdlciAkbSkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgaWYgKCRtLT52YWx1ZSA9PT0gJzAnKSB7CiAgICAgICAgICAgIHRocm93IERpdmlzaW9uQnlaZXJvRXhjZXB0aW9uOjptb2R1bHVzTXVzdE5vdEJlWmVybygpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRtLT5pc05lZ2F0aXZlKCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IE5lZ2F0aXZlTnVtYmVyRXhjZXB0aW9uKCdNb2R1bHVzIG11c3Qgbm90IGJlIG5lZ2F0aXZlLicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRtLT52YWx1ZSA9PT0gJzEnKSB7CiAgICAgICAgICAgIHJldHVybiBCaWdJbnRlZ2VyOjp6ZXJvKCk7CiAgICAgICAgfQoKICAgICAgICAkdmFsdWUgPSBDYWxjdWxhdG9yOjpnZXQoKS0+bW9kSW52ZXJzZSgkdGhpcy0+dmFsdWUsICRtLT52YWx1ZSk7CgogICAgICAgIGlmICgkdmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IE1hdGhFeGNlcHRpb24oJ1VuYWJsZSB0byBjb21wdXRlIHRoZSBtb2RJbnZlcnNlIGZvciB0aGUgZ2l2ZW4gbW9kdWx1cy4nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgQmlnSW50ZWdlcigkdmFsdWUpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGlzIG51bWJlciByYWlzZWQgaW50byBwb3dlciB3aXRoIG1vZHVsby4KICAgICAqCiAgICAgKiBUaGlzIG9wZXJhdGlvbiBvbmx5IHdvcmtzIG9uIHBvc2l0aXZlIG51bWJlcnMuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICRleHAgVGhlIGV4cG9uZW50LiBNdXN0IGJlIHBvc2l0aXZlIG9yIHplcm8uCiAgICAgKiBAcGFyYW0gQmlnTnVtYmVyfGludHxmbG9hdHxzdHJpbmcgJG1vZCBUaGUgbW9kdWx1cy4gTXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqCiAgICAgKiBAdGhyb3dzIE5lZ2F0aXZlTnVtYmVyRXhjZXB0aW9uIElmIGFueSBvZiB0aGUgb3BlcmFuZHMgaXMgbmVnYXRpdmUuCiAgICAgKiBAdGhyb3dzIERpdmlzaW9uQnlaZXJvRXhjZXB0aW9uIElmIHRoZSBtb2R1bHVzIGlzIHplcm8uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtb2RQb3coJGV4cCwgJG1vZCkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgJGV4cCA9IEJpZ0ludGVnZXI6Om9mKCRleHApOwogICAgICAgICRtb2QgPSBCaWdJbnRlZ2VyOjpvZigkbW9kKTsKCiAgICAgICAgaWYgKCR0aGlzLT5pc05lZ2F0aXZlKCkgfHwgJGV4cC0+aXNOZWdhdGl2ZSgpIHx8ICRtb2QtPmlzTmVnYXRpdmUoKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgTmVnYXRpdmVOdW1iZXJFeGNlcHRpb24oJ1RoZSBvcGVyYW5kcyBjYW5ub3QgYmUgbmVnYXRpdmUuJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJG1vZC0+aXNaZXJvKCkpIHsKICAgICAgICAgICAgdGhyb3cgRGl2aXNpb25CeVplcm9FeGNlcHRpb246Om1vZHVsdXNNdXN0Tm90QmVaZXJvKCk7CiAgICAgICAgfQoKICAgICAgICAkcmVzdWx0ID0gQ2FsY3VsYXRvcjo6Z2V0KCktPm1vZFBvdygkdGhpcy0+dmFsdWUsICRleHAtPnZhbHVlLCAkbW9kLT52YWx1ZSk7CgogICAgICAgIHJldHVybiBuZXcgQmlnSW50ZWdlcigkcmVzdWx0KTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIG9mIHRoaXMgbnVtYmVyIGFuZCB0aGUgZ2l2ZW4gb25lLgogICAgICoKICAgICAqIFRoZSBHQ0QgaXMgYWx3YXlzIHBvc2l0aXZlLCB1bmxlc3MgYm90aCBvcGVyYW5kcyBhcmUgemVybywgaW4gd2hpY2ggY2FzZSBpdCBpcyB6ZXJvLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkdGhhdCBUaGUgb3BlcmFuZC4gTXVzdCBiZSBjb252ZXJ0aWJsZSB0byBhbiBpbnRlZ2VyIG51bWJlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdjZCgkdGhhdCkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgJHRoYXQgPSBCaWdJbnRlZ2VyOjpvZigkdGhhdCk7CgogICAgICAgIGlmICgkdGhhdC0+dmFsdWUgPT09ICcwJyAmJiAkdGhpcy0+dmFsdWVbMF0gIT09ICctJykgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoaXMtPnZhbHVlID09PSAnMCcgJiYgJHRoYXQtPnZhbHVlWzBdICE9PSAnLScpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGF0OwogICAgICAgIH0KCiAgICAgICAgJHZhbHVlID0gQ2FsY3VsYXRvcjo6Z2V0KCktPmdjZCgkdGhpcy0+dmFsdWUsICR0aGF0LT52YWx1ZSk7CgogICAgICAgIHJldHVybiBuZXcgQmlnSW50ZWdlcigkdmFsdWUpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgaW50ZWdlciBzcXVhcmUgcm9vdCBudW1iZXIgb2YgdGhpcyBudW1iZXIsIHJvdW5kZWQgZG93bi4KICAgICAqCiAgICAgKiBUaGUgcmVzdWx0IGlzIHRoZSBsYXJnZXN0IHggc3VjaCB0aGF0IHjCsiDiiaQgbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqCiAgICAgKiBAdGhyb3dzIE5lZ2F0aXZlTnVtYmVyRXhjZXB0aW9uIElmIHRoaXMgbnVtYmVyIGlzIG5lZ2F0aXZlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3FydCgpIDogQmlnSW50ZWdlcgogICAgewogICAgICAgIGlmICgkdGhpcy0+dmFsdWVbMF0gPT09ICctJykgewogICAgICAgICAgICB0aHJvdyBuZXcgTmVnYXRpdmVOdW1iZXJFeGNlcHRpb24oJ0Nhbm5vdCBjYWxjdWxhdGUgdGhlIHNxdWFyZSByb290IG9mIGEgbmVnYXRpdmUgbnVtYmVyLicpOwogICAgICAgIH0KCiAgICAgICAgJHZhbHVlID0gQ2FsY3VsYXRvcjo6Z2V0KCktPnNxcnQoJHRoaXMtPnZhbHVlKTsKCiAgICAgICAgcmV0dXJuIG5ldyBCaWdJbnRlZ2VyKCR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGlzIG51bWJlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFicygpIDogQmlnSW50ZWdlcgogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aXNOZWdhdGl2ZSgpID8gJHRoaXMtPm5lZ2F0ZWQoKSA6ICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGlzIG51bWJlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5lZ2F0ZWQoKSA6IEJpZ0ludGVnZXIKICAgIHsKICAgICAgICByZXR1cm4gbmV3IEJpZ0ludGVnZXIoQ2FsY3VsYXRvcjo6Z2V0KCktPm5lZygkdGhpcy0+dmFsdWUpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGludGVnZXIgYml0d2lzZS1hbmQgY29tYmluZWQgd2l0aCBhbm90aGVyIGludGVnZXIuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIG5lZ2F0aXZlIEJpZ0ludGVnZXIgaWYgYW5kIG9ubHkgaWYgYm90aCBvcGVyYW5kcyBhcmUgbmVnYXRpdmUuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICR0aGF0IFRoZSBvcGVyYW5kLiBNdXN0IGJlIGNvbnZlcnRpYmxlIHRvIGFuIGludGVnZXIgbnVtYmVyLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYW5kKCR0aGF0KSA6IEJpZ0ludGVnZXIKICAgIHsKICAgICAgICAkdGhhdCA9IEJpZ0ludGVnZXI6Om9mKCR0aGF0KTsKCiAgICAgICAgcmV0dXJuIG5ldyBCaWdJbnRlZ2VyKENhbGN1bGF0b3I6OmdldCgpLT5hbmQoJHRoaXMtPnZhbHVlLCAkdGhhdC0+dmFsdWUpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGludGVnZXIgYml0d2lzZS1vciBjb21iaW5lZCB3aXRoIGFub3RoZXIgaW50ZWdlci4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmVnYXRpdmUgQmlnSW50ZWdlciBpZiBhbmQgb25seSBpZiBlaXRoZXIgb2YgdGhlIG9wZXJhbmRzIGlzIG5lZ2F0aXZlLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkdGhhdCBUaGUgb3BlcmFuZC4gTXVzdCBiZSBjb252ZXJ0aWJsZSB0byBhbiBpbnRlZ2VyIG51bWJlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9yKCR0aGF0KSA6IEJpZ0ludGVnZXIKICAgIHsKICAgICAgICAkdGhhdCA9IEJpZ0ludGVnZXI6Om9mKCR0aGF0KTsKCiAgICAgICAgcmV0dXJuIG5ldyBCaWdJbnRlZ2VyKENhbGN1bGF0b3I6OmdldCgpLT5vcigkdGhpcy0+dmFsdWUsICR0aGF0LT52YWx1ZSkpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgaW50ZWdlciBiaXR3aXNlLXhvciBjb21iaW5lZCB3aXRoIGFub3RoZXIgaW50ZWdlci4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmVnYXRpdmUgQmlnSW50ZWdlciBpZiBhbmQgb25seSBpZiBleGFjdGx5IG9uZSBvZiB0aGUgb3BlcmFuZHMgaXMgbmVnYXRpdmUuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICR0aGF0IFRoZSBvcGVyYW5kLiBNdXN0IGJlIGNvbnZlcnRpYmxlIHRvIGFuIGludGVnZXIgbnVtYmVyLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24geG9yKCR0aGF0KSA6IEJpZ0ludGVnZXIKICAgIHsKICAgICAgICAkdGhhdCA9IEJpZ0ludGVnZXI6Om9mKCR0aGF0KTsKCiAgICAgICAgcmV0dXJuIG5ldyBCaWdJbnRlZ2VyKENhbGN1bGF0b3I6OmdldCgpLT54b3IoJHRoaXMtPnZhbHVlLCAkdGhhdC0+dmFsdWUpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGJpdHdpc2Utbm90IG9mIHRoaXMgQmlnSW50ZWdlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5vdCgpIDogQmlnSW50ZWdlcgogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bmVnYXRlZCgpLT5taW51cygxKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGludGVnZXIgbGVmdCBzaGlmdGVkIGJ5IGEgZ2l2ZW4gbnVtYmVyIG9mIGJpdHMuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkZGlzdGFuY2UgVGhlIGRpc3RhbmNlIHRvIHNoaWZ0LgogICAgICoKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2hpZnRlZExlZnQoaW50ICRkaXN0YW5jZSkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgaWYgKCRkaXN0YW5jZSA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGRpc3RhbmNlIDwgMCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnNoaWZ0ZWRSaWdodCgtICRkaXN0YW5jZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPm11bHRpcGxpZWRCeShCaWdJbnRlZ2VyOjpvZigyKS0+cG93ZXIoJGRpc3RhbmNlKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBpbnRlZ2VyIHJpZ2h0IHNoaWZ0ZWQgYnkgYSBnaXZlbiBudW1iZXIgb2YgYml0cy4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRkaXN0YW5jZSBUaGUgZGlzdGFuY2UgdG8gc2hpZnQuCiAgICAgKgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaGlmdGVkUmlnaHQoaW50ICRkaXN0YW5jZSkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgaWYgKCRkaXN0YW5jZSA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGRpc3RhbmNlIDwgMCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnNoaWZ0ZWRMZWZ0KC0gJGRpc3RhbmNlKTsKICAgICAgICB9CgogICAgICAgICRvcGVyYW5kID0gQmlnSW50ZWdlcjo6b2YoMiktPnBvd2VyKCRkaXN0YW5jZSk7CgogICAgICAgIGlmICgkdGhpcy0+aXNQb3NpdGl2ZU9yWmVybygpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cXVvdGllbnQoJG9wZXJhbmQpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5kaXZpZGVkQnkoJG9wZXJhbmQsIFJvdW5kaW5nTW9kZTo6VVApOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gdGhlIG1pbmltYWwgdHdvJ3MtY29tcGxlbWVudCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIEJpZ0ludGVnZXIsIGV4Y2x1ZGluZyBhIHNpZ24gYml0LgogICAgICoKICAgICAqIEZvciBwb3NpdGl2ZSBCaWdJbnRlZ2VycywgdGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0aGUgb3JkaW5hcnkgYmluYXJ5IHJlcHJlc2VudGF0aW9uLgogICAgICogQ29tcHV0ZXMgKGNlaWwobG9nMih0aGlzIDwgMCA/IC10aGlzIDogdGhpcysxKSkpLgogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCaXRMZW5ndGgoKSA6IGludAogICAgewogICAgICAgIGlmICgkdGhpcy0+dmFsdWUgPT09ICcwJykgewogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+aXNOZWdhdGl2ZSgpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+YWJzKCktPm1pbnVzKDEpLT5nZXRCaXRMZW5ndGgoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBcc3RybGVuKCR0aGlzLT50b0Jhc2UoMikpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHJpZ2h0bW9zdCAobG93ZXN0LW9yZGVyKSBvbmUgYml0IGluIHRoaXMgQmlnSW50ZWdlci4KICAgICAqCiAgICAgKiBSZXR1cm5zIC0xIGlmIHRoaXMgQmlnSW50ZWdlciBjb250YWlucyBubyBvbmUgYml0cy4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TG93ZXN0U2V0Qml0KCkgOiBpbnQKICAgIHsKICAgICAgICAkbiA9ICR0aGlzOwogICAgICAgICRiaXRMZW5ndGggPSAkdGhpcy0+Z2V0Qml0TGVuZ3RoKCk7CgogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8PSAkYml0TGVuZ3RoOyAkaSsrKSB7CiAgICAgICAgICAgIGlmICgkbi0+aXNPZGQoKSkgewogICAgICAgICAgICAgICAgcmV0dXJuICRpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkbiA9ICRuLT5zaGlmdGVkUmlnaHQoMSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gLTE7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBudW1iZXIgaXMgZXZlbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzRXZlbigpIDogYm9vbAogICAgewogICAgICAgIHJldHVybiBcaW5fYXJyYXkoJHRoaXMtPnZhbHVlWy0xXSwgWycwJywgJzInLCAnNCcsICc2JywgJzgnXSwgdHJ1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBudW1iZXIgaXMgb2RkLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNPZGQoKSA6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gXGluX2FycmF5KCR0aGlzLT52YWx1ZVstMV0sIFsnMScsICczJywgJzUnLCAnNycsICc5J10sIHRydWUpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoZSBkZXNpZ25hdGVkIGJpdCBpcyBzZXQuCiAgICAgKgogICAgICogQ29tcHV0ZXMgKCh0aGlzICYgKDE8PG4pKSAhPSAwKS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRuIFRoZSBiaXQgdG8gdGVzdCwgMC1iYXNlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gSWYgdGhlIGJpdCB0byB0ZXN0IGlzIG5lZ2F0aXZlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEJpdChpbnQgJG4pIDogYm9vbAogICAgewogICAgICAgIGlmICgkbiA8IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSBiaXQgdG8gdGVzdCBjYW5ub3QgYmUgbmVnYXRpdmUuJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPnNoaWZ0ZWRSaWdodCgkbiktPmlzT2RkKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21wYXJlVG8oJHRoYXQpIDogaW50CiAgICB7CiAgICAgICAgJHRoYXQgPSBCaWdOdW1iZXI6Om9mKCR0aGF0KTsKCiAgICAgICAgaWYgKCR0aGF0IGluc3RhbmNlb2YgQmlnSW50ZWdlcikgewogICAgICAgICAgICByZXR1cm4gQ2FsY3VsYXRvcjo6Z2V0KCktPmNtcCgkdGhpcy0+dmFsdWUsICR0aGF0LT52YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gLSAkdGhhdC0+Y29tcGFyZVRvKCR0aGlzKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNpZ24oKSA6IGludAogICAgewogICAgICAgIHJldHVybiAoJHRoaXMtPnZhbHVlID09PSAnMCcpID8gMCA6ICgoJHRoaXMtPnZhbHVlWzBdID09PSAnLScpID8gLTEgOiAxKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQmlnSW50ZWdlcigpIDogQmlnSW50ZWdlcgogICAgewogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQmlnRGVjaW1hbCgpIDogQmlnRGVjaW1hbAogICAgewogICAgICAgIHJldHVybiBCaWdEZWNpbWFsOjpjcmVhdGUoJHRoaXMtPnZhbHVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQmlnUmF0aW9uYWwoKSA6IEJpZ1JhdGlvbmFsCiAgICB7CiAgICAgICAgcmV0dXJuIEJpZ1JhdGlvbmFsOjpjcmVhdGUoJHRoaXMsIEJpZ0ludGVnZXI6Om9uZSgpLCBmYWxzZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b1NjYWxlKGludCAkc2NhbGUsIGludCAkcm91bmRpbmdNb2RlID0gUm91bmRpbmdNb2RlOjpVTk5FQ0VTU0FSWSkgOiBCaWdEZWNpbWFsCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50b0JpZ0RlY2ltYWwoKS0+dG9TY2FsZSgkc2NhbGUsICRyb3VuZGluZ01vZGUpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9JbnQoKSA6IGludAogICAgewogICAgICAgICRpbnRWYWx1ZSA9IChpbnQpICR0aGlzLT52YWx1ZTsKCiAgICAgICAgaWYgKCR0aGlzLT52YWx1ZSAhPT0gKHN0cmluZykgJGludFZhbHVlKSB7CiAgICAgICAgICAgIHRocm93IEludGVnZXJPdmVyZmxvd0V4Y2VwdGlvbjo6dG9JbnRPdmVyZmxvdygkdGhpcyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGludFZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9GbG9hdCgpIDogZmxvYXQKICAgIHsKICAgICAgICByZXR1cm4gKGZsb2F0KSAkdGhpcy0+dmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgbnVtYmVyIGluIHRoZSBnaXZlbiBiYXNlLgogICAgICoKICAgICAqIFRoZSBvdXRwdXQgd2lsbCBhbHdheXMgYmUgbG93ZXJjYXNlIGZvciBiYXNlcyBncmVhdGVyIHRoYW4gMTAuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkYmFzZQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIElmIHRoZSBiYXNlIGlzIG91dCBvZiByYW5nZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQmFzZShpbnQgJGJhc2UpIDogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCRiYXNlID09PSAxMCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnZhbHVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRiYXNlIDwgMiB8fCAkYmFzZSA+IDM2KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKFxzcHJpbnRmKCdCYXNlICVkIGlzIG91dCBvZiByYW5nZSBbMiwgMzZdJywgJGJhc2UpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBDYWxjdWxhdG9yOjpnZXQoKS0+dG9CYXNlKCR0aGlzLT52YWx1ZSwgJGJhc2UpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG51bWJlciBpbiBhbiBhcmJpdHJhcnkgYmFzZSB3aXRoIGEgY3VzdG9tIGFscGhhYmV0LgogICAgICoKICAgICAqIEJlY2F1c2UgdGhpcyBtZXRob2QgYWNjZXB0cyBhbiBhbHBoYWJldCB3aXRoIGFueSBjaGFyYWN0ZXIsIGluY2x1ZGluZyBkYXNoLCBpdCBkb2VzIG5vdCBoYW5kbGUgbmVnYXRpdmUgbnVtYmVyczsKICAgICAqIGEgTmVnYXRpdmVOdW1iZXJFeGNlcHRpb24gd2lsbCBiZSB0aHJvd24gd2hlbiBhdHRlbXB0aW5nIHRvIGNhbGwgdGhpcyBtZXRob2Qgb24gYSBuZWdhdGl2ZSBudW1iZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYWxwaGFiZXQgVGhlIGFscGhhYmV0LCBmb3IgZXhhbXBsZSAnMDEnIGZvciBiYXNlIDIsIG9yICcwMTIzNDU2NycgZm9yIGJhc2UgOC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICoKICAgICAqIEB0aHJvd3MgTmVnYXRpdmVOdW1iZXJFeGNlcHRpb24gICBJZiB0aGlzIG51bWJlciBpcyBuZWdhdGl2ZS4KICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiB0aGUgZ2l2ZW4gYWxwaGFiZXQgZG9lcyBub3QgY29udGFpbiBhdCBsZWFzdCAyIGNoYXJzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9BcmJpdHJhcnlCYXNlKHN0cmluZyAkYWxwaGFiZXQpIDogc3RyaW5nCiAgICB7CiAgICAgICAgJGJhc2UgPSBcc3RybGVuKCRhbHBoYWJldCk7CgogICAgICAgIGlmICgkYmFzZSA8IDIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSBhbHBoYWJldCBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgMiBjaGFycy4nKTsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+dmFsdWVbMF0gPT09ICctJykgewogICAgICAgICAgICB0aHJvdyBuZXcgTmVnYXRpdmVOdW1iZXJFeGNlcHRpb24oX19GVU5DVElPTl9fIC4gJygpIGRvZXMgbm90IHN1cHBvcnQgbmVnYXRpdmUgbnVtYmVycy4nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBDYWxjdWxhdG9yOjpnZXQoKS0+dG9BcmJpdHJhcnlCYXNlKCR0aGlzLT52YWx1ZSwgJGFscGhhYmV0LCAkYmFzZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIG9mIGJ5dGVzIGNvbnRhaW5pbmcgdGhlIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIEJpZ0ludGVnZXIuCiAgICAgKgogICAgICogVGhlIHN0cmluZyBpcyBpbiBiaWctZW5kaWFuIGJ5dGUtb3JkZXI6IHRoZSBtb3N0IHNpZ25pZmljYW50IGJ5dGUgaXMgaW4gdGhlIHplcm90aCBlbGVtZW50LgogICAgICoKICAgICAqIElmIGAkc2lnbmVkYCBpcyB0cnVlLCB0aGUgb3V0cHV0IHdpbGwgYmUgaW4gdHdvJ3MtY29tcGxlbWVudCByZXByZXNlbnRhdGlvbiwgYW5kIGEgc2lnbiBiaXQgd2lsbCBiZSBwcmVwZW5kZWQgdG8KICAgICAqIHRoZSBvdXRwdXQuIElmIGAkc2lnbmVkYCBpcyBmYWxzZSwgbm8gc2lnbiBiaXQgd2lsbCBiZSBwcmVwZW5kZWQsIGFuZCB0aGlzIG1ldGhvZCB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiB0aGUKICAgICAqIG51bWJlciBpcyBuZWdhdGl2ZS4KICAgICAqCiAgICAgKiBUaGUgc3RyaW5nIHdpbGwgY29udGFpbiB0aGUgbWluaW11bSBudW1iZXIgb2YgYnl0ZXMgcmVxdWlyZWQgdG8gcmVwcmVzZW50IHRoaXMgQmlnSW50ZWdlciwgaW5jbHVkaW5nIGEgc2lnbiBiaXQKICAgICAqIGlmIGAkc2lnbmVkYCBpcyB0cnVlLgogICAgICoKICAgICAqIFRoaXMgcmVwcmVzZW50YXRpb24gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBgZnJvbUJ5dGVzKClgIGZhY3RvcnkgbWV0aG9kLCBhcyBsb25nIGFzIHRoZSBgJHNpZ25lZGAgZmxhZ3MgbWF0Y2guCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJHNpZ25lZCBXaGV0aGVyIHRvIG91dHB1dCBhIHNpZ25lZCBudW1iZXIgaW4gdHdvJ3MtY29tcGxlbWVudCByZXByZXNlbnRhdGlvbiB3aXRoIGEgbGVhZGluZyBzaWduIGJpdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICoKICAgICAqIEB0aHJvd3MgTmVnYXRpdmVOdW1iZXJFeGNlcHRpb24gSWYgJHNpZ25lZCBpcyBmYWxzZSwgYW5kIHRoZSBudW1iZXIgaXMgbmVnYXRpdmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b0J5dGVzKGJvb2wgJHNpZ25lZCA9IHRydWUpIDogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCEgJHNpZ25lZCAmJiAkdGhpcy0+aXNOZWdhdGl2ZSgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBOZWdhdGl2ZU51bWJlckV4Y2VwdGlvbignQ2Fubm90IGNvbnZlcnQgYSBuZWdhdGl2ZSBudW1iZXIgdG8gYSBieXRlIHN0cmluZyB3aGVuICRzaWduZWQgaXMgZmFsc2UuJyk7CiAgICAgICAgfQoKICAgICAgICAkaGV4ID0gJHRoaXMtPmFicygpLT50b0Jhc2UoMTYpOwoKICAgICAgICBpZiAoXHN0cmxlbigkaGV4KSAlIDIgIT09IDApIHsKICAgICAgICAgICAgJGhleCA9ICcwJyAuICRoZXg7CiAgICAgICAgfQoKICAgICAgICAkYmFzZUhleExlbmd0aCA9IFxzdHJsZW4oJGhleCk7CgogICAgICAgIGlmICgkc2lnbmVkKSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+aXNOZWdhdGl2ZSgpKSB7CiAgICAgICAgICAgICAgICAkYmluID0gXGhleDJiaW4oJGhleCk7CiAgICAgICAgICAgICAgICBhc3NlcnQoJGJpbiAhPT0gZmFsc2UpOwoKICAgICAgICAgICAgICAgICRoZXggPSBcYmluMmhleCh+JGJpbik7CiAgICAgICAgICAgICAgICAkaGV4ID0gc2VsZjo6ZnJvbUJhc2UoJGhleCwgMTYpLT5wbHVzKDEpLT50b0Jhc2UoMTYpOwoKICAgICAgICAgICAgICAgICRoZXhMZW5ndGggPSBcc3RybGVuKCRoZXgpOwoKICAgICAgICAgICAgICAgIGlmICgkaGV4TGVuZ3RoIDwgJGJhc2VIZXhMZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAkaGV4ID0gXHN0cl9yZXBlYXQoJzAnLCAkYmFzZUhleExlbmd0aCAtICRoZXhMZW5ndGgpIC4gJGhleDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJGhleFswXSA8ICc4JykgewogICAgICAgICAgICAgICAgICAgICRoZXggPSAnRkYnIC4gJGhleDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmICgkaGV4WzBdID49ICc4JykgewogICAgICAgICAgICAgICAgICAgICRoZXggPSAnMDAnIC4gJGhleDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFxoZXgyYmluKCRoZXgpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoaXMgbWV0aG9kIGlzIHJlcXVpcmVkIGZvciBzZXJpYWxpemluZyB0aGUgb2JqZWN0IGFuZCBTSE9VTEQgTk9UIGJlIGFjY2Vzc2VkIGRpcmVjdGx5LgogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl7dmFsdWU6IHN0cmluZ30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fc2VyaWFsaXplKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFsndmFsdWUnID0+ICR0aGlzLT52YWx1ZV07CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGlzIG1ldGhvZCBpcyBvbmx5IGhlcmUgdG8gYWxsb3cgdW5zZXJpYWxpemluZyB0aGUgb2JqZWN0IGFuZCBjYW5ub3QgYmUgYWNjZXNzZWQgZGlyZWN0bHkuCiAgICAgKgogICAgICogQGludGVybmFsCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgUmVkdW5kYW50UHJvcGVydHlJbml0aWFsaXphdGlvbkNoZWNrCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5e3ZhbHVlOiBzdHJpbmd9ICRkYXRhCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKgogICAgICogQHRocm93cyBcTG9naWNFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdW5zZXJpYWxpemUoYXJyYXkgJGRhdGEpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT52YWx1ZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignX191bnNlcmlhbGl6ZSgpIGlzIGFuIGludGVybmFsIGZ1bmN0aW9uLCBpdCBtdXN0IG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuJyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkZGF0YVsndmFsdWUnXTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoaXMgbWV0aG9kIGlzIHJlcXVpcmVkIGJ5IGludGVyZmFjZSBTZXJpYWxpemFibGUgYW5kIFNIT1VMRCBOT1QgYmUgYWNjZXNzZWQgZGlyZWN0bHkuCiAgICAgKgogICAgICogQGludGVybmFsCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlcmlhbGl6ZSgpIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoaXMgbWV0aG9kIGlzIG9ubHkgaGVyZSB0byBpbXBsZW1lbnQgaW50ZXJmYWNlIFNlcmlhbGl6YWJsZSBhbmQgY2Fubm90IGJlIGFjY2Vzc2VkIGRpcmVjdGx5LgogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICogQHBzYWxtLXN1cHByZXNzIFJlZHVuZGFudFByb3BlcnR5SW5pdGlhbGl6YXRpb25DaGVjawogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKgogICAgICogQHRocm93cyBcTG9naWNFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVuc2VyaWFsaXplKCR2YWx1ZSkgOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT52YWx1ZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigndW5zZXJpYWxpemUoKSBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgaXQgbXVzdCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LicpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnZhbHVlID0gJHZhbHVlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/BigNumber.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGg7Cgp1c2UgQnJpY2tcTWF0aFxFeGNlcHRpb25cRGl2aXNpb25CeVplcm9FeGNlcHRpb247CnVzZSBCcmlja1xNYXRoXEV4Y2VwdGlvblxNYXRoRXhjZXB0aW9uOwp1c2UgQnJpY2tcTWF0aFxFeGNlcHRpb25cTnVtYmVyRm9ybWF0RXhjZXB0aW9uOwp1c2UgQnJpY2tcTWF0aFxFeGNlcHRpb25cUm91bmRpbmdOZWNlc3NhcnlFeGNlcHRpb247CgovKioKICogQ29tbW9uIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5LXByZWNpc2lvbiByYXRpb25hbCBudW1iZXJzLgogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwphYnN0cmFjdCBjbGFzcyBCaWdOdW1iZXIgaW1wbGVtZW50cyBcU2VyaWFsaXphYmxlLCBcSnNvblNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdXNlZCB0byBwYXJzZSBpbnRlZ2VyLCBkZWNpbWFsIGFuZCByYXRpb25hbCBudW1iZXJzLgogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFBBUlNFX1JFR0VYUCA9CiAgICAgICAgJy9eJyAuCiAgICAgICAgICAgICcoPzxzaWduPltcLVwrXSk/JyAuCiAgICAgICAgICAgICcoPzonIC4KICAgICAgICAgICAgICAgICcoPzonIC4KICAgICAgICAgICAgICAgICAgICAnKD88aW50ZWdyYWw+WzAtOV0rKT8nIC4KICAgICAgICAgICAgICAgICAgICAnKD88cG9pbnQ+XC4pPycgLgogICAgICAgICAgICAgICAgICAgICcoPzxmcmFjdGlvbmFsPlswLTldKyk/JyAuCiAgICAgICAgICAgICAgICAgICAgJyg/OltlRV0oPzxleHBvbmVudD5bXC1cK10/WzAtOV0rKSk/JyAuCiAgICAgICAgICAgICAgICAnKXwoPzonIC4KICAgICAgICAgICAgICAgICAgICAnKD88bnVtZXJhdG9yPlswLTldKyknIC4KICAgICAgICAgICAgICAgICAgICAnXC8/JyAuCiAgICAgICAgICAgICAgICAgICAgJyg/PGRlbm9taW5hdG9yPlswLTldKyknIC4KICAgICAgICAgICAgICAgICcpJyAuCiAgICAgICAgICAgICcpJyAuCiAgICAgICAgJyQvJzsKCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBCaWdOdW1iZXIgb2YgdGhlIGdpdmVuIHZhbHVlLgogICAgICoKICAgICAqIFRoZSBjb25jcmV0ZSByZXR1cm4gdHlwZSBpcyBkZXBlbmRlbnQgb24gdGhlIGdpdmVuIHZhbHVlLCB3aXRoIHRoZSBmb2xsb3dpbmcgcnVsZXM6CiAgICAgKgogICAgICogLSBCaWdOdW1iZXIgaW5zdGFuY2VzIGFyZSByZXR1cm5lZCBhcyBpcwogICAgICogLSBpbnRlZ2VyIG51bWJlcnMgYXJlIHJldHVybmVkIGFzIEJpZ0ludGVnZXIKICAgICAqIC0gZmxvYXRpbmcgcG9pbnQgbnVtYmVycyBhcmUgY29udmVydGVkIHRvIGEgc3RyaW5nIHRoZW4gcGFyc2VkIGFzIHN1Y2gKICAgICAqIC0gc3RyaW5ncyBjb250YWluaW5nIGEgYC9gIGNoYXJhY3RlciBhcmUgcmV0dXJuZWQgYXMgQmlnUmF0aW9uYWwKICAgICAqIC0gc3RyaW5ncyBjb250YWluaW5nIGEgYC5gIGNoYXJhY3RlciBvciB1c2luZyBhbiBleHBvbmVudGlhbCBub3RhdGlvbiBhcmUgcmV0dXJuZWQgYXMgQmlnRGVjaW1hbAogICAgICogLSBzdHJpbmdzIGNvbnRhaW5pbmcgb25seSBkaWdpdHMgd2l0aCBhbiBvcHRpb25hbCBsZWFkaW5nIGArYCBvciBgLWAgc2lnbiBhcmUgcmV0dXJuZWQgYXMgQmlnSW50ZWdlcgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ051bWJlcgogICAgICoKICAgICAqIEB0aHJvd3MgTnVtYmVyRm9ybWF0RXhjZXB0aW9uICAgSWYgdGhlIGZvcm1hdCBvZiB0aGUgbnVtYmVyIGlzIG5vdCB2YWxpZC4KICAgICAqIEB0aHJvd3MgRGl2aXNpb25CeVplcm9FeGNlcHRpb24gSWYgdGhlIHZhbHVlIHJlcHJlc2VudHMgYSByYXRpb25hbCBudW1iZXIgd2l0aCBhIGRlbm9taW5hdG9yIG9mIHplcm8uCiAgICAgKgogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBvZigkdmFsdWUpIDogQmlnTnVtYmVyCiAgICB7CiAgICAgICAgaWYgKCR2YWx1ZSBpbnN0YW5jZW9mIEJpZ051bWJlcikgewogICAgICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKFxpc19pbnQoJHZhbHVlKSkgewogICAgICAgICAgICByZXR1cm4gbmV3IEJpZ0ludGVnZXIoKHN0cmluZykgJHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIC8qKiBAcHNhbG0tc3VwcHJlc3MgUmVkdW5kYW50Q2FzdEdpdmVuRG9jYmxvY2tUeXBlIFdlIGNhbm5vdCB0cnVzdCB0aGUgdW50eXBlZCAkdmFsdWUgaGVyZSEgKi8KICAgICAgICAkdmFsdWUgPSBcaXNfZmxvYXQoJHZhbHVlKSA/IHNlbGY6OmZsb2F0VG9TdHJpbmcoJHZhbHVlKSA6IChzdHJpbmcpICR2YWx1ZTsKCiAgICAgICAgJHRocm93ID0gc3RhdGljIGZ1bmN0aW9uKCkgdXNlICgkdmFsdWUpIDogdm9pZCB7CiAgICAgICAgICAgIHRocm93IG5ldyBOdW1iZXJGb3JtYXRFeGNlcHRpb24oXHNwcmludGYoCiAgICAgICAgICAgICAgICAnVGhlIGdpdmVuIHZhbHVlICIlcyIgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsaWQgbnVtYmVyLicsCiAgICAgICAgICAgICAgICAkdmFsdWUKICAgICAgICAgICAgKSk7CiAgICAgICAgfTsKCiAgICAgICAgaWYgKFxwcmVnX21hdGNoKHNlbGY6OlBBUlNFX1JFR0VYUCwgJHZhbHVlLCAkbWF0Y2hlcykgIT09IDEpIHsKICAgICAgICAgICAgJHRocm93KCk7CiAgICAgICAgfQoKICAgICAgICAkZ2V0TWF0Y2ggPSBzdGF0aWMgZnVuY3Rpb24oc3RyaW5nICR2YWx1ZSkgdXNlICgkbWF0Y2hlcykgOiA/c3RyaW5nIHsKICAgICAgICAgICAgcmV0dXJuIGlzc2V0KCRtYXRjaGVzWyR2YWx1ZV0pICYmICRtYXRjaGVzWyR2YWx1ZV0gIT09ICcnID8gJG1hdGNoZXNbJHZhbHVlXSA6IG51bGw7CiAgICAgICAgfTsKCiAgICAgICAgJHNpZ24gICAgICAgID0gJGdldE1hdGNoKCdzaWduJyk7CiAgICAgICAgJG51bWVyYXRvciAgID0gJGdldE1hdGNoKCdudW1lcmF0b3InKTsKICAgICAgICAkZGVub21pbmF0b3IgPSAkZ2V0TWF0Y2goJ2Rlbm9taW5hdG9yJyk7CgogICAgICAgIGlmICgkbnVtZXJhdG9yICE9PSBudWxsKSB7CiAgICAgICAgICAgIGFzc2VydCgkZGVub21pbmF0b3IgIT09IG51bGwpOwoKICAgICAgICAgICAgaWYgKCRzaWduICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAkbnVtZXJhdG9yID0gJHNpZ24gLiAkbnVtZXJhdG9yOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkbnVtZXJhdG9yICAgPSBzZWxmOjpjbGVhblVwKCRudW1lcmF0b3IpOwogICAgICAgICAgICAkZGVub21pbmF0b3IgPSBzZWxmOjpjbGVhblVwKCRkZW5vbWluYXRvcik7CgogICAgICAgICAgICBpZiAoJGRlbm9taW5hdG9yID09PSAnMCcpIHsKICAgICAgICAgICAgICAgIHRocm93IERpdmlzaW9uQnlaZXJvRXhjZXB0aW9uOjpkZW5vbWluYXRvck11c3ROb3RCZVplcm8oKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIG5ldyBCaWdSYXRpb25hbCgKICAgICAgICAgICAgICAgIG5ldyBCaWdJbnRlZ2VyKCRudW1lcmF0b3IpLAogICAgICAgICAgICAgICAgbmV3IEJpZ0ludGVnZXIoJGRlbm9taW5hdG9yKSwKICAgICAgICAgICAgICAgIGZhbHNlCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkcG9pbnQgICAgICA9ICRnZXRNYXRjaCgncG9pbnQnKTsKICAgICAgICAkaW50ZWdyYWwgICA9ICRnZXRNYXRjaCgnaW50ZWdyYWwnKTsKICAgICAgICAkZnJhY3Rpb25hbCA9ICRnZXRNYXRjaCgnZnJhY3Rpb25hbCcpOwogICAgICAgICRleHBvbmVudCAgID0gJGdldE1hdGNoKCdleHBvbmVudCcpOwoKICAgICAgICBpZiAoJGludGVncmFsID09PSBudWxsICYmICRmcmFjdGlvbmFsID09PSBudWxsKSB7CiAgICAgICAgICAgICR0aHJvdygpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRpbnRlZ3JhbCA9PT0gbnVsbCkgewogICAgICAgICAgICAkaW50ZWdyYWwgPSAnMCc7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHBvaW50ICE9PSBudWxsIHx8ICRleHBvbmVudCAhPT0gbnVsbCkgewogICAgICAgICAgICAkZnJhY3Rpb25hbCA9ICgkZnJhY3Rpb25hbCA/PyAnJyk7CiAgICAgICAgICAgICRleHBvbmVudCA9ICgkZXhwb25lbnQgIT09IG51bGwpID8gKGludCkgJGV4cG9uZW50IDogMDsKCiAgICAgICAgICAgIGlmICgkZXhwb25lbnQgPT09IFBIUF9JTlRfTUlOIHx8ICRleHBvbmVudCA9PT0gUEhQX0lOVF9NQVgpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBOdW1iZXJGb3JtYXRFeGNlcHRpb24oJ0V4cG9uZW50IHRvbyBsYXJnZS4nKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHVuc2NhbGVkVmFsdWUgPSBzZWxmOjpjbGVhblVwKCgkc2lnbiA/PyAnJykuICRpbnRlZ3JhbCAuICRmcmFjdGlvbmFsKTsKCiAgICAgICAgICAgICRzY2FsZSA9IFxzdHJsZW4oJGZyYWN0aW9uYWwpIC0gJGV4cG9uZW50OwoKICAgICAgICAgICAgaWYgKCRzY2FsZSA8IDApIHsKICAgICAgICAgICAgICAgIGlmICgkdW5zY2FsZWRWYWx1ZSAhPT0gJzAnKSB7CiAgICAgICAgICAgICAgICAgICAgJHVuc2NhbGVkVmFsdWUgLj0gXHN0cl9yZXBlYXQoJzAnLCAtICRzY2FsZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkc2NhbGUgPSAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gbmV3IEJpZ0RlY2ltYWwoJHVuc2NhbGVkVmFsdWUsICRzY2FsZSk7CiAgICAgICAgfQoKICAgICAgICAkaW50ZWdyYWwgPSBzZWxmOjpjbGVhblVwKCgkc2lnbiA/PyAnJykgLiAkaW50ZWdyYWwpOwoKICAgICAgICByZXR1cm4gbmV3IEJpZ0ludGVnZXIoJGludGVncmFsKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNhZmVseSBjb252ZXJ0cyBmbG9hdCB0byBzdHJpbmcsIGF2b2lkaW5nIGxvY2FsZS1kZXBlbmRlbnQgaXNzdWVzLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcHVsbC8yMAogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkZmxvYXQKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgSW1wdXJlRnVuY3Rpb25DYWxsCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGZsb2F0VG9TdHJpbmcoZmxvYXQgJGZsb2F0KSA6IHN0cmluZwogICAgewogICAgICAgICRjdXJyZW50TG9jYWxlID0gXHNldGxvY2FsZShMQ19OVU1FUklDLCAnMCcpOwogICAgICAgIFxzZXRsb2NhbGUoTENfTlVNRVJJQywgJ0MnKTsKCiAgICAgICAgJHJlc3VsdCA9IChzdHJpbmcpICRmbG9hdDsKCiAgICAgICAgXHNldGxvY2FsZShMQ19OVU1FUklDLCAkY3VycmVudExvY2FsZSk7CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIC8qKgogICAgICogUHJveHkgbWV0aG9kIHRvIGFjY2VzcyBwcm90ZWN0ZWQgY29uc3RydWN0b3JzIGZyb20gc2libGluZyBjbGFzc2VzLgogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAuLi4kYXJncyBUaGUgYXJndW1lbnRzIHRvIHRoZSBjb25zdHJ1Y3Rvci4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgVG9vTWFueUFyZ3VtZW50cwogICAgICogQHBzYWxtLXN1cHByZXNzIFVuc2FmZUluc3RhbnRpYXRpb24KICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoLi4uICRhcmdzKSA6IEJpZ051bWJlcgogICAgewogICAgICAgIHJldHVybiBuZXcgc3RhdGljKC4uLiAkYXJncyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBtaW5pbXVtIG9mIHRoZSBnaXZlbiB2YWx1ZXMuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nIC4uLiR2YWx1ZXMgVGhlIG51bWJlcnMgdG8gY29tcGFyZS4gQWxsIHRoZSBudW1iZXJzIG5lZWQgdG8gYmUgY29udmVydGlibGUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcyB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgb24uCiAgICAgKgogICAgICogQHJldHVybiBzdGF0aWMgVGhlIG1pbmltdW0gdmFsdWUuCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIElmIG5vIHZhbHVlcyBhcmUgZ2l2ZW4uCiAgICAgKiBAdGhyb3dzIE1hdGhFeGNlcHRpb24gICAgICAgICAgICAgSWYgYW4gYXJndW1lbnQgaXMgbm90IHZhbGlkLgogICAgICoKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBMZXNzU3BlY2lmaWNSZXR1cm5TdGF0ZW1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNb3JlU3BlY2lmaWNSZXR1cm5UeXBlCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1pbiguLi4kdmFsdWVzKSA6IEJpZ051bWJlcgogICAgewogICAgICAgICRtaW4gPSBudWxsOwoKICAgICAgICBmb3JlYWNoICgkdmFsdWVzIGFzICR2YWx1ZSkgewogICAgICAgICAgICAkdmFsdWUgPSBzdGF0aWM6Om9mKCR2YWx1ZSk7CgogICAgICAgICAgICBpZiAoJG1pbiA9PT0gbnVsbCB8fCAkdmFsdWUtPmlzTGVzc1RoYW4oJG1pbikpIHsKICAgICAgICAgICAgICAgICRtaW4gPSAkdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgkbWluID09PSBudWxsKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKF9fTUVUSE9EX18gLiAnKCkgZXhwZWN0cyBhdCBsZWFzdCBvbmUgdmFsdWUuJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG1pbjsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG1heGltdW0gb2YgdGhlIGdpdmVuIHZhbHVlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnTnVtYmVyfGludHxmbG9hdHxzdHJpbmcgLi4uJHZhbHVlcyBUaGUgbnVtYmVycyB0byBjb21wYXJlLiBBbGwgdGhlIG51bWJlcnMgbmVlZCB0byBiZSBjb252ZXJ0aWJsZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0YXRpYyBUaGUgbWF4aW11bSB2YWx1ZS4KICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gSWYgbm8gdmFsdWVzIGFyZSBnaXZlbi4KICAgICAqIEB0aHJvd3MgTWF0aEV4Y2VwdGlvbiAgICAgICAgICAgICBJZiBhbiBhcmd1bWVudCBpcyBub3QgdmFsaWQuCiAgICAgKgogICAgICogQHBzYWxtLXN1cHByZXNzIExlc3NTcGVjaWZpY1JldHVyblN0YXRlbWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1vcmVTcGVjaWZpY1JldHVyblR5cGUKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWF4KC4uLiR2YWx1ZXMpIDogQmlnTnVtYmVyCiAgICB7CiAgICAgICAgJG1heCA9IG51bGw7CgogICAgICAgIGZvcmVhY2ggKCR2YWx1ZXMgYXMgJHZhbHVlKSB7CiAgICAgICAgICAgICR2YWx1ZSA9IHN0YXRpYzo6b2YoJHZhbHVlKTsKCiAgICAgICAgICAgIGlmICgkbWF4ID09PSBudWxsIHx8ICR2YWx1ZS0+aXNHcmVhdGVyVGhhbigkbWF4KSkgewogICAgICAgICAgICAgICAgJG1heCA9ICR2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCRtYXggPT09IG51bGwpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oX19NRVRIT0RfXyAuICcoKSBleHBlY3RzIGF0IGxlYXN0IG9uZSB2YWx1ZS4nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbWF4OwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc3VtIG9mIHRoZSBnaXZlbiB2YWx1ZXMuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nIC4uLiR2YWx1ZXMgVGhlIG51bWJlcnMgdG8gYWRkLiBBbGwgdGhlIG51bWJlcnMgbmVlZCB0byBiZSBjb252ZXJ0aWJsZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0YXRpYyBUaGUgc3VtLgogICAgICoKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiBubyB2YWx1ZXMgYXJlIGdpdmVuLgogICAgICogQHRocm93cyBNYXRoRXhjZXB0aW9uICAgICAgICAgICAgIElmIGFuIGFyZ3VtZW50IGlzIG5vdCB2YWxpZC4KICAgICAqCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTGVzc1NwZWNpZmljUmV0dXJuU3RhdGVtZW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTW9yZVNwZWNpZmljUmV0dXJuVHlwZQogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdW0oLi4uJHZhbHVlcykgOiBCaWdOdW1iZXIKICAgIHsKICAgICAgICAvKiogQHZhciBCaWdOdW1iZXJ8bnVsbCAkc3VtICovCiAgICAgICAgJHN1bSA9IG51bGw7CgogICAgICAgIGZvcmVhY2ggKCR2YWx1ZXMgYXMgJHZhbHVlKSB7CiAgICAgICAgICAgICR2YWx1ZSA9IHN0YXRpYzo6b2YoJHZhbHVlKTsKCiAgICAgICAgICAgICRzdW0gPSAkc3VtID09PSBudWxsID8gJHZhbHVlIDogc2VsZjo6YWRkKCRzdW0sICR2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHN1bSA9PT0gbnVsbCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihfX01FVEhPRF9fIC4gJygpIGV4cGVjdHMgYXQgbGVhc3Qgb25lIHZhbHVlLicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRzdW07CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGRzIHR3byBCaWdOdW1iZXIgaW5zdGFuY2VzIGluIHRoZSBjb3JyZWN0IG9yZGVyIHRvIGF2b2lkIGEgUm91bmRpbmdOZWNlc3NhcnlFeGNlcHRpb24uCiAgICAgKgogICAgICogQHRvZG8gVGhpcyBjb3VsZCBiZSBiZXR0ZXIgcmVzb2x2ZWQgYnkgY3JlYXRpbmcgYW4gYWJzdHJhY3QgcHJvdGVjdGVkIG1ldGhvZCBpbiBCaWdOdW1iZXIsIGFuZCBsZWF2aW5nIHRvCiAgICAgKiAgICAgICBjb25jcmV0ZSBjbGFzc2VzIHRoZSByZXNwb25zaWJpbGl0eSB0byBwZXJmb3JtIHRoZSBhZGRpdGlvbiB0aGVtc2VsdmVzIG9yIGRlbGVnYXRlIGl0IHRvIHRoZSBnaXZlbiBudW1iZXIsCiAgICAgKiAgICAgICBkZXBlbmRpbmcgb24gdGhlaXIgYWJpbGl0eSB0byBwZXJmb3JtIHRoZSBvcGVyYXRpb24uIFRoaXMgd2lsbCBhbHNvIHJlcXVpcmUgYSB2ZXJzaW9uIGJ1bXAgYmVjYXVzZSB3ZSdyZQogICAgICogICAgICAgcG90ZW50aWFsbHkgYnJlYWtpbmcgY3VzdG9tIEJpZ051bWJlciBpbXBsZW1lbnRhdGlvbnMgKGlmIGFueS4uLikKICAgICAqCiAgICAgKiBAcGFyYW0gQmlnTnVtYmVyICRhCiAgICAgKiBAcGFyYW0gQmlnTnVtYmVyICRiCiAgICAgKgogICAgICogQHJldHVybiBCaWdOdW1iZXIKICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBhZGQoQmlnTnVtYmVyICRhLCBCaWdOdW1iZXIgJGIpIDogQmlnTnVtYmVyCiAgICB7CiAgICAgICAgaWYgKCRhIGluc3RhbmNlb2YgQmlnUmF0aW9uYWwpIHsKICAgICAgICAgICAgcmV0dXJuICRhLT5wbHVzKCRiKTsKICAgICAgICB9CgogICAgICAgIGlmICgkYiBpbnN0YW5jZW9mIEJpZ1JhdGlvbmFsKSB7CiAgICAgICAgICAgIHJldHVybiAkYi0+cGx1cygkYSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGEgaW5zdGFuY2VvZiBCaWdEZWNpbWFsKSB7CiAgICAgICAgICAgIHJldHVybiAkYS0+cGx1cygkYik7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGIgaW5zdGFuY2VvZiBCaWdEZWNpbWFsKSB7CiAgICAgICAgICAgIHJldHVybiAkYi0+cGx1cygkYSk7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBCaWdJbnRlZ2VyICRhICovCgogICAgICAgIHJldHVybiAkYS0+cGx1cygkYik7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZW1vdmVzIG9wdGlvbmFsIGxlYWRpbmcgemVyb3MgYW5kICsgc2lnbiBmcm9tIHRoZSBnaXZlbiBudW1iZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbnVtYmVyIFRoZSBudW1iZXIsIHZhbGlkYXRlZCBhcyBhIG5vbi1lbXB0eSBzdHJpbmcgb2YgZGlnaXRzIHdpdGggb3B0aW9uYWwgbGVhZGluZyBzaWduLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKgogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY2xlYW5VcChzdHJpbmcgJG51bWJlcikgOiBzdHJpbmcKICAgIHsKICAgICAgICAkZmlyc3RDaGFyID0gJG51bWJlclswXTsKCiAgICAgICAgaWYgKCRmaXJzdENoYXIgPT09ICcrJyB8fCAkZmlyc3RDaGFyID09PSAnLScpIHsKICAgICAgICAgICAgJG51bWJlciA9IFxzdWJzdHIoJG51bWJlciwgMSk7CiAgICAgICAgfQoKICAgICAgICAkbnVtYmVyID0gXGx0cmltKCRudW1iZXIsICcwJyk7CgogICAgICAgIGlmICgkbnVtYmVyID09PSAnJykgewogICAgICAgICAgICByZXR1cm4gJzAnOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRmaXJzdENoYXIgPT09ICctJykgewogICAgICAgICAgICByZXR1cm4gJy0nIC4gJG51bWJlcjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbnVtYmVyOwogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2tzIGlmIHRoaXMgbnVtYmVyIGlzIGVxdWFsIHRvIHRoZSBnaXZlbiBvbmUuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICR0aGF0CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0VxdWFsVG8oJHRoYXQpIDogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y29tcGFyZVRvKCR0aGF0KSA9PT0gMDsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrcyBpZiB0aGlzIG51bWJlciBpcyBzdHJpY3RseSBsb3dlciB0aGFuIHRoZSBnaXZlbiBvbmUuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICR0aGF0CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0xlc3NUaGFuKCR0aGF0KSA6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNvbXBhcmVUbygkdGhhdCkgPCAwOwogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2tzIGlmIHRoaXMgbnVtYmVyIGlzIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIG9uZS4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnTnVtYmVyfGludHxmbG9hdHxzdHJpbmcgJHRoYXQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzTGVzc1RoYW5PckVxdWFsVG8oJHRoYXQpIDogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y29tcGFyZVRvKCR0aGF0KSA8PSAwOwogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2tzIGlmIHRoaXMgbnVtYmVyIGlzIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiB0aGUgZ2l2ZW4gb25lLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkdGhhdAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNHcmVhdGVyVGhhbigkdGhhdCkgOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jb21wYXJlVG8oJHRoYXQpID4gMDsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrcyBpZiB0aGlzIG51bWJlciBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIG9uZS4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnTnVtYmVyfGludHxmbG9hdHxzdHJpbmcgJHRoYXQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzR3JlYXRlclRoYW5PckVxdWFsVG8oJHRoYXQpIDogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y29tcGFyZVRvKCR0aGF0KSA+PSAwOwogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2tzIGlmIHRoaXMgbnVtYmVyIGVxdWFscyB6ZXJvLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNaZXJvKCkgOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRTaWduKCkgPT09IDA7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgdGhpcyBudW1iZXIgaXMgc3RyaWN0bHkgbmVnYXRpdmUuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc05lZ2F0aXZlKCkgOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRTaWduKCkgPCAwOwogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2tzIGlmIHRoaXMgbnVtYmVyIGlzIG5lZ2F0aXZlIG9yIHplcm8uCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc05lZ2F0aXZlT3JaZXJvKCkgOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRTaWduKCkgPD0gMDsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrcyBpZiB0aGlzIG51bWJlciBpcyBzdHJpY3RseSBwb3NpdGl2ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzUG9zaXRpdmUoKSA6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldFNpZ24oKSA+IDA7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgdGhpcyBudW1iZXIgaXMgcG9zaXRpdmUgb3IgemVyby4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzUG9zaXRpdmVPclplcm8oKSA6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldFNpZ24oKSA+PSAwOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc2lnbiBvZiB0aGlzIG51bWJlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludCAtMSBpZiB0aGUgbnVtYmVyIGlzIG5lZ2F0aXZlLCAwIGlmIHplcm8sIDEgaWYgcG9zaXRpdmUuCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBnZXRTaWduKCkgOiBpbnQ7CgogICAgLyoqCiAgICAgKiBDb21wYXJlcyB0aGlzIG51bWJlciB0byB0aGUgZ2l2ZW4gb25lLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkdGhhdAogICAgICoKICAgICAqIEByZXR1cm4gaW50IFstMSwwLDFdIElmIGAkdGhpc2AgaXMgbG93ZXIgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiBgJHRoYXRgLgogICAgICoKICAgICAqIEB0aHJvd3MgTWF0aEV4Y2VwdGlvbiBJZiB0aGUgbnVtYmVyIGlzIG5vdCB2YWxpZC4KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGNvbXBhcmVUbygkdGhhdCkgOiBpbnQ7CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyB0aGlzIG51bWJlciB0byBhIEJpZ0ludGVnZXIuCiAgICAgKgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyIFRoZSBjb252ZXJ0ZWQgbnVtYmVyLgogICAgICoKICAgICAqIEB0aHJvd3MgUm91bmRpbmdOZWNlc3NhcnlFeGNlcHRpb24gSWYgdGhpcyBudW1iZXIgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIEJpZ0ludGVnZXIgd2l0aG91dCByb3VuZGluZy4KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIHRvQmlnSW50ZWdlcigpIDogQmlnSW50ZWdlcjsKCiAgICAvKioKICAgICAqIENvbnZlcnRzIHRoaXMgbnVtYmVyIHRvIGEgQmlnRGVjaW1hbC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0RlY2ltYWwgVGhlIGNvbnZlcnRlZCBudW1iZXIuCiAgICAgKgogICAgICogQHRocm93cyBSb3VuZGluZ05lY2Vzc2FyeUV4Y2VwdGlvbiBJZiB0aGlzIG51bWJlciBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgQmlnRGVjaW1hbCB3aXRob3V0IHJvdW5kaW5nLgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gdG9CaWdEZWNpbWFsKCkgOiBCaWdEZWNpbWFsOwoKICAgIC8qKgogICAgICogQ29udmVydHMgdGhpcyBudW1iZXIgdG8gYSBCaWdSYXRpb25hbC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ1JhdGlvbmFsIFRoZSBjb252ZXJ0ZWQgbnVtYmVyLgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gdG9CaWdSYXRpb25hbCgpIDogQmlnUmF0aW9uYWw7CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyB0aGlzIG51bWJlciB0byBhIEJpZ0RlY2ltYWwgd2l0aCB0aGUgZ2l2ZW4gc2NhbGUsIHVzaW5nIHJvdW5kaW5nIGlmIG5lY2Vzc2FyeS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRzY2FsZSAgICAgICAgVGhlIHNjYWxlIG9mIHRoZSByZXN1bHRpbmcgYEJpZ0RlY2ltYWxgLgogICAgICogQHBhcmFtIGludCAkcm91bmRpbmdNb2RlIEEgYFJvdW5kaW5nTW9kZWAgY29uc3RhbnQuCiAgICAgKgogICAgICogQHJldHVybiBCaWdEZWNpbWFsCiAgICAgKgogICAgICogQHRocm93cyBSb3VuZGluZ05lY2Vzc2FyeUV4Y2VwdGlvbiBJZiB0aGlzIG51bWJlciBjYW5ub3QgYmUgY29udmVydGVkIHRvIHRoZSBnaXZlbiBzY2FsZSB3aXRob3V0IHJvdW5kaW5nLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG9ubHkgYXBwbGllcyB3aGVuIFJvdW5kaW5nTW9kZTo6VU5ORUNFU1NBUlkgaXMgdXNlZC4KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIHRvU2NhbGUoaW50ICRzY2FsZSwgaW50ICRyb3VuZGluZ01vZGUgPSBSb3VuZGluZ01vZGU6OlVOTkVDRVNTQVJZKSA6IEJpZ0RlY2ltYWw7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBleGFjdCB2YWx1ZSBvZiB0aGlzIG51bWJlciBhcyBhIG5hdGl2ZSBpbnRlZ2VyLgogICAgICoKICAgICAqIElmIHRoaXMgbnVtYmVyIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBuYXRpdmUgaW50ZWdlciB3aXRob3V0IGxvc2luZyBwcmVjaXNpb24sIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgICAgKiBOb3RlIHRoYXQgdGhlIGFjY2VwdGFibGUgcmFuZ2UgZm9yIGFuIGludGVnZXIgZGVwZW5kcyBvbiB0aGUgcGxhdGZvcm0gYW5kIGRpZmZlcnMgZm9yIDMyLWJpdCBhbmQgNjQtYml0LgogICAgICoKICAgICAqIEByZXR1cm4gaW50IFRoZSBjb252ZXJ0ZWQgdmFsdWUuCiAgICAgKgogICAgICogQHRocm93cyBNYXRoRXhjZXB0aW9uIElmIHRoaXMgbnVtYmVyIGNhbm5vdCBiZSBleGFjdGx5IGNvbnZlcnRlZCB0byBhIG5hdGl2ZSBpbnRlZ2VyLgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gdG9JbnQoKSA6IGludDsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gYXBwcm94aW1hdGlvbiBvZiB0aGlzIG51bWJlciBhcyBhIGZsb2F0aW5nLXBvaW50IHZhbHVlLgogICAgICoKICAgICAqIE5vdGUgdGhhdCB0aGlzIG1ldGhvZCBjYW4gZGlzY2FyZCBpbmZvcm1hdGlvbiBhcyB0aGUgcHJlY2lzaW9uIG9mIGEgZmxvYXRpbmctcG9pbnQgdmFsdWUKICAgICAqIGlzIGluaGVyZW50bHkgbGltaXRlZC4KICAgICAqCiAgICAgKiBJZiB0aGUgbnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGFyZ2VzdCByZXByZXNlbnRhYmxlIGZsb2F0aW5nIHBvaW50IG51bWJlciwgcG9zaXRpdmUgaW5maW5pdHkgaXMgcmV0dXJuZWQuCiAgICAgKiBJZiB0aGUgbnVtYmVyIGlzIGxlc3MgdGhhbiB0aGUgc21hbGxlc3QgcmVwcmVzZW50YWJsZSBmbG9hdGluZyBwb2ludCBudW1iZXIsIG5lZ2F0aXZlIGluZmluaXR5IGlzIHJldHVybmVkLgogICAgICoKICAgICAqIEByZXR1cm4gZmxvYXQgVGhlIGNvbnZlcnRlZCB2YWx1ZS4KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIHRvRmxvYXQoKSA6IGZsb2F0OwoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG51bWJlci4KICAgICAqCiAgICAgKiBUaGUgb3V0cHV0IG9mIHRoaXMgbWV0aG9kIGNhbiBiZSBwYXJzZWQgYnkgdGhlIGBvZigpYCBmYWN0b3J5IG1ldGhvZDsKICAgICAqIHRoaXMgd2lsbCB5aWVsZCBhbiBvYmplY3QgZXF1YWwgdG8gdGhpcyBvbmUsIHdpdGhvdXQgYW55IGluZm9ybWF0aW9uIGxvc3MuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKSA6IHN0cmluZzsKCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X190b1N0cmluZygpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/BigRational.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGg7Cgp1c2UgQnJpY2tcTWF0aFxFeGNlcHRpb25cRGl2aXNpb25CeVplcm9FeGNlcHRpb247CnVzZSBCcmlja1xNYXRoXEV4Y2VwdGlvblxNYXRoRXhjZXB0aW9uOwp1c2UgQnJpY2tcTWF0aFxFeGNlcHRpb25cTnVtYmVyRm9ybWF0RXhjZXB0aW9uOwp1c2UgQnJpY2tcTWF0aFxFeGNlcHRpb25cUm91bmRpbmdOZWNlc3NhcnlFeGNlcHRpb247CgovKioKICogQW4gYXJiaXRyYXJpbHkgbGFyZ2UgcmF0aW9uYWwgbnVtYmVyLgogKgogKiBUaGlzIGNsYXNzIGlzIGltbXV0YWJsZS4KICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KZmluYWwgY2xhc3MgQmlnUmF0aW9uYWwgZXh0ZW5kcyBCaWdOdW1iZXIKewogICAgLyoqCiAgICAgKiBUaGUgbnVtZXJhdG9yLgogICAgICoKICAgICAqIEB2YXIgQmlnSW50ZWdlcgogICAgICovCiAgICBwcml2YXRlICRudW1lcmF0b3I7CgogICAgLyoqCiAgICAgKiBUaGUgZGVub21pbmF0b3IuIEFsd2F5cyBzdHJpY3RseSBwb3NpdGl2ZS4KICAgICAqCiAgICAgKiBAdmFyIEJpZ0ludGVnZXIKICAgICAqLwogICAgcHJpdmF0ZSAkZGVub21pbmF0b3I7CgogICAgLyoqCiAgICAgKiBQcm90ZWN0ZWQgY29uc3RydWN0b3IuIFVzZSBhIGZhY3RvcnkgbWV0aG9kIHRvIG9idGFpbiBhbiBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnSW50ZWdlciAkbnVtZXJhdG9yICAgICAgICBUaGUgbnVtZXJhdG9yLgogICAgICogQHBhcmFtIEJpZ0ludGVnZXIgJGRlbm9taW5hdG9yICAgICAgVGhlIGRlbm9taW5hdG9yLgogICAgICogQHBhcmFtIGJvb2wgICAgICAgJGNoZWNrRGVub21pbmF0b3IgV2hldGhlciB0byBjaGVjayB0aGUgZGVub21pbmF0b3IgZm9yIG5lZ2F0aXZlIGFuZCB6ZXJvLgogICAgICoKICAgICAqIEB0aHJvd3MgRGl2aXNpb25CeVplcm9FeGNlcHRpb24gSWYgdGhlIGRlbm9taW5hdG9yIGlzIHplcm8uCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfX2NvbnN0cnVjdChCaWdJbnRlZ2VyICRudW1lcmF0b3IsIEJpZ0ludGVnZXIgJGRlbm9taW5hdG9yLCBib29sICRjaGVja0Rlbm9taW5hdG9yKQogICAgewogICAgICAgIGlmICgkY2hlY2tEZW5vbWluYXRvcikgewogICAgICAgICAgICBpZiAoJGRlbm9taW5hdG9yLT5pc1plcm8oKSkgewogICAgICAgICAgICAgICAgdGhyb3cgRGl2aXNpb25CeVplcm9FeGNlcHRpb246OmRlbm9taW5hdG9yTXVzdE5vdEJlWmVybygpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJGRlbm9taW5hdG9yLT5pc05lZ2F0aXZlKCkpIHsKICAgICAgICAgICAgICAgICRudW1lcmF0b3IgICA9ICRudW1lcmF0b3ItPm5lZ2F0ZWQoKTsKICAgICAgICAgICAgICAgICRkZW5vbWluYXRvciA9ICRkZW5vbWluYXRvci0+bmVnYXRlZCgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+bnVtZXJhdG9yICAgPSAkbnVtZXJhdG9yOwogICAgICAgICR0aGlzLT5kZW5vbWluYXRvciA9ICRkZW5vbWluYXRvcjsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBCaWdSYXRpb25hbCBvZiB0aGUgZ2l2ZW4gdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gQmlnUmF0aW9uYWwKICAgICAqCiAgICAgKiBAdGhyb3dzIE1hdGhFeGNlcHRpb24gSWYgdGhlIHZhbHVlIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBCaWdSYXRpb25hbC4KICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9mKCR2YWx1ZSkgOiBCaWdOdW1iZXIKICAgIHsKICAgICAgICByZXR1cm4gcGFyZW50OjpvZigkdmFsdWUpLT50b0JpZ1JhdGlvbmFsKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgQmlnUmF0aW9uYWwgb3V0IG9mIGEgbnVtZXJhdG9yIGFuZCBhIGRlbm9taW5hdG9yLgogICAgICoKICAgICAqIElmIHRoZSBkZW5vbWluYXRvciBpcyBuZWdhdGl2ZSwgdGhlIHNpZ25zIG9mIGJvdGggdGhlIG51bWVyYXRvciBhbmQgdGhlIGRlbm9taW5hdG9yCiAgICAgKiB3aWxsIGJlIGludmVydGVkIHRvIGVuc3VyZSB0aGF0IHRoZSBkZW5vbWluYXRvciBpcyBhbHdheXMgcG9zaXRpdmUuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICRudW1lcmF0b3IgICBUaGUgbnVtZXJhdG9yLiBNdXN0IGJlIGNvbnZlcnRpYmxlIHRvIGEgQmlnSW50ZWdlci4KICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkZGVub21pbmF0b3IgVGhlIGRlbm9taW5hdG9yLiBNdXN0IGJlIGNvbnZlcnRpYmxlIHRvIGEgQmlnSW50ZWdlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ1JhdGlvbmFsCiAgICAgKgogICAgICogQHRocm93cyBOdW1iZXJGb3JtYXRFeGNlcHRpb24gICAgICBJZiBhbiBhcmd1bWVudCBkb2VzIG5vdCByZXByZXNlbnQgYSB2YWxpZCBudW1iZXIuCiAgICAgKiBAdGhyb3dzIFJvdW5kaW5nTmVjZXNzYXJ5RXhjZXB0aW9uIElmIGFuIGFyZ3VtZW50IHJlcHJlc2VudHMgYSBub24taW50ZWdlciBudW1iZXIuCiAgICAgKiBAdGhyb3dzIERpdmlzaW9uQnlaZXJvRXhjZXB0aW9uICAgIElmIHRoZSBkZW5vbWluYXRvciBpcyB6ZXJvLgogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbmQoJG51bWVyYXRvciwgJGRlbm9taW5hdG9yKSA6IEJpZ1JhdGlvbmFsCiAgICB7CiAgICAgICAgJG51bWVyYXRvciAgID0gQmlnSW50ZWdlcjo6b2YoJG51bWVyYXRvcik7CiAgICAgICAgJGRlbm9taW5hdG9yID0gQmlnSW50ZWdlcjo6b2YoJGRlbm9taW5hdG9yKTsKCiAgICAgICAgcmV0dXJuIG5ldyBCaWdSYXRpb25hbCgkbnVtZXJhdG9yLCAkZGVub21pbmF0b3IsIHRydWUpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIEJpZ1JhdGlvbmFsIHJlcHJlc2VudGluZyB6ZXJvLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnUmF0aW9uYWwKICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHplcm8oKSA6IEJpZ1JhdGlvbmFsCiAgICB7CiAgICAgICAgLyoqCiAgICAgICAgICogQHBzYWxtLXN1cHByZXNzIEltcHVyZVN0YXRpY1ZhcmlhYmxlCiAgICAgICAgICogQHZhciBCaWdSYXRpb25hbHxudWxsICR6ZXJvCiAgICAgICAgICovCiAgICAgICAgc3RhdGljICR6ZXJvOwoKICAgICAgICBpZiAoJHplcm8gPT09IG51bGwpIHsKICAgICAgICAgICAgJHplcm8gPSBuZXcgQmlnUmF0aW9uYWwoQmlnSW50ZWdlcjo6emVybygpLCBCaWdJbnRlZ2VyOjpvbmUoKSwgZmFsc2UpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR6ZXJvOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIEJpZ1JhdGlvbmFsIHJlcHJlc2VudGluZyBvbmUuCiAgICAgKgogICAgICogQHJldHVybiBCaWdSYXRpb25hbAogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gb25lKCkgOiBCaWdSYXRpb25hbAogICAgewogICAgICAgIC8qKgogICAgICAgICAqIEBwc2FsbS1zdXBwcmVzcyBJbXB1cmVTdGF0aWNWYXJpYWJsZQogICAgICAgICAqIEB2YXIgQmlnUmF0aW9uYWx8bnVsbCAkb25lCiAgICAgICAgICovCiAgICAgICAgc3RhdGljICRvbmU7CgogICAgICAgIGlmICgkb25lID09PSBudWxsKSB7CiAgICAgICAgICAgICRvbmUgPSBuZXcgQmlnUmF0aW9uYWwoQmlnSW50ZWdlcjo6b25lKCksIEJpZ0ludGVnZXI6Om9uZSgpLCBmYWxzZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG9uZTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBCaWdSYXRpb25hbCByZXByZXNlbnRpbmcgdGVuLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnUmF0aW9uYWwKICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRlbigpIDogQmlnUmF0aW9uYWwKICAgIHsKICAgICAgICAvKioKICAgICAgICAgKiBAcHNhbG0tc3VwcHJlc3MgSW1wdXJlU3RhdGljVmFyaWFibGUKICAgICAgICAgKiBAdmFyIEJpZ1JhdGlvbmFsfG51bGwgJHRlbgogICAgICAgICAqLwogICAgICAgIHN0YXRpYyAkdGVuOwoKICAgICAgICBpZiAoJHRlbiA9PT0gbnVsbCkgewogICAgICAgICAgICAkdGVuID0gbmV3IEJpZ1JhdGlvbmFsKEJpZ0ludGVnZXI6OnRlbigpLCBCaWdJbnRlZ2VyOjpvbmUoKSwgZmFsc2UpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0ZW47CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE51bWVyYXRvcigpIDogQmlnSW50ZWdlcgogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bnVtZXJhdG9yOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREZW5vbWluYXRvcigpIDogQmlnSW50ZWdlcgogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGVub21pbmF0b3I7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBxdW90aWVudCBvZiB0aGUgZGl2aXNpb24gb2YgdGhlIG51bWVyYXRvciBieSB0aGUgZGVub21pbmF0b3IuCiAgICAgKgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBxdW90aWVudCgpIDogQmlnSW50ZWdlcgogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bnVtZXJhdG9yLT5xdW90aWVudCgkdGhpcy0+ZGVub21pbmF0b3IpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmVtYWluZGVyIG9mIHRoZSBkaXZpc2lvbiBvZiB0aGUgbnVtZXJhdG9yIGJ5IHRoZSBkZW5vbWluYXRvci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbWFpbmRlcigpIDogQmlnSW50ZWdlcgogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bnVtZXJhdG9yLT5yZW1haW5kZXIoJHRoaXMtPmRlbm9taW5hdG9yKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHF1b3RpZW50IGFuZCByZW1haW5kZXIgb2YgdGhlIGRpdmlzaW9uIG9mIHRoZSBudW1lcmF0b3IgYnkgdGhlIGRlbm9taW5hdG9yLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcltdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBxdW90aWVudEFuZFJlbWFpbmRlcigpIDogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm51bWVyYXRvci0+cXVvdGllbnRBbmRSZW1haW5kZXIoJHRoaXMtPmRlbm9taW5hdG9yKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHN1bSBvZiB0aGlzIG51bWJlciBhbmQgdGhlIGdpdmVuIG9uZS4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnTnVtYmVyfGludHxmbG9hdHxzdHJpbmcgJHRoYXQgVGhlIG51bWJlciB0byBhZGQuCiAgICAgKgogICAgICogQHJldHVybiBCaWdSYXRpb25hbCBUaGUgcmVzdWx0LgogICAgICoKICAgICAqIEB0aHJvd3MgTWF0aEV4Y2VwdGlvbiBJZiB0aGUgbnVtYmVyIGlzIG5vdCB2YWxpZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBsdXMoJHRoYXQpIDogQmlnUmF0aW9uYWwKICAgIHsKICAgICAgICAkdGhhdCA9IEJpZ1JhdGlvbmFsOjpvZigkdGhhdCk7CgogICAgICAgICRudW1lcmF0b3IgICA9ICR0aGlzLT5udW1lcmF0b3ItPm11bHRpcGxpZWRCeSgkdGhhdC0+ZGVub21pbmF0b3IpOwogICAgICAgICRudW1lcmF0b3IgICA9ICRudW1lcmF0b3ItPnBsdXMoJHRoYXQtPm51bWVyYXRvci0+bXVsdGlwbGllZEJ5KCR0aGlzLT5kZW5vbWluYXRvcikpOwogICAgICAgICRkZW5vbWluYXRvciA9ICR0aGlzLT5kZW5vbWluYXRvci0+bXVsdGlwbGllZEJ5KCR0aGF0LT5kZW5vbWluYXRvcik7CgogICAgICAgIHJldHVybiBuZXcgQmlnUmF0aW9uYWwoJG51bWVyYXRvciwgJGRlbm9taW5hdG9yLCBmYWxzZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBkaWZmZXJlbmNlIG9mIHRoaXMgbnVtYmVyIGFuZCB0aGUgZ2l2ZW4gb25lLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkdGhhdCBUaGUgbnVtYmVyIHRvIHN1YnRyYWN0LgogICAgICoKICAgICAqIEByZXR1cm4gQmlnUmF0aW9uYWwgVGhlIHJlc3VsdC4KICAgICAqCiAgICAgKiBAdGhyb3dzIE1hdGhFeGNlcHRpb24gSWYgdGhlIG51bWJlciBpcyBub3QgdmFsaWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtaW51cygkdGhhdCkgOiBCaWdSYXRpb25hbAogICAgewogICAgICAgICR0aGF0ID0gQmlnUmF0aW9uYWw6Om9mKCR0aGF0KTsKCiAgICAgICAgJG51bWVyYXRvciAgID0gJHRoaXMtPm51bWVyYXRvci0+bXVsdGlwbGllZEJ5KCR0aGF0LT5kZW5vbWluYXRvcik7CiAgICAgICAgJG51bWVyYXRvciAgID0gJG51bWVyYXRvci0+bWludXMoJHRoYXQtPm51bWVyYXRvci0+bXVsdGlwbGllZEJ5KCR0aGlzLT5kZW5vbWluYXRvcikpOwogICAgICAgICRkZW5vbWluYXRvciA9ICR0aGlzLT5kZW5vbWluYXRvci0+bXVsdGlwbGllZEJ5KCR0aGF0LT5kZW5vbWluYXRvcik7CgogICAgICAgIHJldHVybiBuZXcgQmlnUmF0aW9uYWwoJG51bWVyYXRvciwgJGRlbm9taW5hdG9yLCBmYWxzZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBwcm9kdWN0IG9mIHRoaXMgbnVtYmVyIGFuZCB0aGUgZ2l2ZW4gb25lLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkdGhhdCBUaGUgbXVsdGlwbGllci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ1JhdGlvbmFsIFRoZSByZXN1bHQuCiAgICAgKgogICAgICogQHRocm93cyBNYXRoRXhjZXB0aW9uIElmIHRoZSBtdWx0aXBsaWVyIGlzIG5vdCBhIHZhbGlkIG51bWJlci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG11bHRpcGxpZWRCeSgkdGhhdCkgOiBCaWdSYXRpb25hbAogICAgewogICAgICAgICR0aGF0ID0gQmlnUmF0aW9uYWw6Om9mKCR0aGF0KTsKCiAgICAgICAgJG51bWVyYXRvciAgID0gJHRoaXMtPm51bWVyYXRvci0+bXVsdGlwbGllZEJ5KCR0aGF0LT5udW1lcmF0b3IpOwogICAgICAgICRkZW5vbWluYXRvciA9ICR0aGlzLT5kZW5vbWluYXRvci0+bXVsdGlwbGllZEJ5KCR0aGF0LT5kZW5vbWluYXRvcik7CgogICAgICAgIHJldHVybiBuZXcgQmlnUmF0aW9uYWwoJG51bWVyYXRvciwgJGRlbm9taW5hdG9yLCBmYWxzZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGRpdmlzaW9uIG9mIHRoaXMgbnVtYmVyIGJ5IHRoZSBnaXZlbiBvbmUuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICR0aGF0IFRoZSBkaXZpc29yLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnUmF0aW9uYWwgVGhlIHJlc3VsdC4KICAgICAqCiAgICAgKiBAdGhyb3dzIE1hdGhFeGNlcHRpb24gSWYgdGhlIGRpdmlzb3IgaXMgbm90IGEgdmFsaWQgbnVtYmVyLCBvciBpcyB6ZXJvLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGl2aWRlZEJ5KCR0aGF0KSA6IEJpZ1JhdGlvbmFsCiAgICB7CiAgICAgICAgJHRoYXQgPSBCaWdSYXRpb25hbDo6b2YoJHRoYXQpOwoKICAgICAgICAkbnVtZXJhdG9yICAgPSAkdGhpcy0+bnVtZXJhdG9yLT5tdWx0aXBsaWVkQnkoJHRoYXQtPmRlbm9taW5hdG9yKTsKICAgICAgICAkZGVub21pbmF0b3IgPSAkdGhpcy0+ZGVub21pbmF0b3ItPm11bHRpcGxpZWRCeSgkdGhhdC0+bnVtZXJhdG9yKTsKCiAgICAgICAgcmV0dXJuIG5ldyBCaWdSYXRpb25hbCgkbnVtZXJhdG9yLCAkZGVub21pbmF0b3IsIHRydWUpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGlzIG51bWJlciBleHBvbmVudGlhdGVkIHRvIHRoZSBnaXZlbiB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRleHBvbmVudCBUaGUgZXhwb25lbnQuCiAgICAgKgogICAgICogQHJldHVybiBCaWdSYXRpb25hbCBUaGUgcmVzdWx0LgogICAgICoKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiB0aGUgZXhwb25lbnQgaXMgbm90IGluIHRoZSByYW5nZSAwIHRvIDEsMDAwLDAwMC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBvd2VyKGludCAkZXhwb25lbnQpIDogQmlnUmF0aW9uYWwKICAgIHsKICAgICAgICBpZiAoJGV4cG9uZW50ID09PSAwKSB7CiAgICAgICAgICAgICRvbmUgPSBCaWdJbnRlZ2VyOjpvbmUoKTsKCiAgICAgICAgICAgIHJldHVybiBuZXcgQmlnUmF0aW9uYWwoJG9uZSwgJG9uZSwgZmFsc2UpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRleHBvbmVudCA9PT0gMSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IEJpZ1JhdGlvbmFsKAogICAgICAgICAgICAkdGhpcy0+bnVtZXJhdG9yLT5wb3dlcigkZXhwb25lbnQpLAogICAgICAgICAgICAkdGhpcy0+ZGVub21pbmF0b3ItPnBvd2VyKCRleHBvbmVudCksCiAgICAgICAgICAgIGZhbHNlCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHJlY2lwcm9jYWwgb2YgdGhpcyBCaWdSYXRpb25hbC4KICAgICAqCiAgICAgKiBUaGUgcmVjaXByb2NhbCBoYXMgdGhlIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3Igc3dhcHBlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ1JhdGlvbmFsCiAgICAgKgogICAgICogQHRocm93cyBEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbiBJZiB0aGUgbnVtZXJhdG9yIGlzIHplcm8uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZWNpcHJvY2FsKCkgOiBCaWdSYXRpb25hbAogICAgewogICAgICAgIHJldHVybiBuZXcgQmlnUmF0aW9uYWwoJHRoaXMtPmRlbm9taW5hdG9yLCAkdGhpcy0+bnVtZXJhdG9yLCB0cnVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoaXMgQmlnUmF0aW9uYWwuCiAgICAgKgogICAgICogQHJldHVybiBCaWdSYXRpb25hbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWJzKCkgOiBCaWdSYXRpb25hbAogICAgewogICAgICAgIHJldHVybiBuZXcgQmlnUmF0aW9uYWwoJHRoaXMtPm51bWVyYXRvci0+YWJzKCksICR0aGlzLT5kZW5vbWluYXRvciwgZmFsc2UpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbmVnYXRlZCB2YWx1ZSBvZiB0aGlzIEJpZ1JhdGlvbmFsLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnUmF0aW9uYWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5lZ2F0ZWQoKSA6IEJpZ1JhdGlvbmFsCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBCaWdSYXRpb25hbCgkdGhpcy0+bnVtZXJhdG9yLT5uZWdhdGVkKCksICR0aGlzLT5kZW5vbWluYXRvciwgZmFsc2UpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc2ltcGxpZmllZCB2YWx1ZSBvZiB0aGlzIEJpZ1JhdGlvbmFsLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnUmF0aW9uYWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNpbXBsaWZpZWQoKSA6IEJpZ1JhdGlvbmFsCiAgICB7CiAgICAgICAgJGdjZCA9ICR0aGlzLT5udW1lcmF0b3ItPmdjZCgkdGhpcy0+ZGVub21pbmF0b3IpOwoKICAgICAgICAkbnVtZXJhdG9yID0gJHRoaXMtPm51bWVyYXRvci0+cXVvdGllbnQoJGdjZCk7CiAgICAgICAgJGRlbm9taW5hdG9yID0gJHRoaXMtPmRlbm9taW5hdG9yLT5xdW90aWVudCgkZ2NkKTsKCiAgICAgICAgcmV0dXJuIG5ldyBCaWdSYXRpb25hbCgkbnVtZXJhdG9yLCAkZGVub21pbmF0b3IsIGZhbHNlKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbXBhcmVUbygkdGhhdCkgOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm1pbnVzKCR0aGF0KS0+Z2V0U2lnbigpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2lnbigpIDogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5udW1lcmF0b3ItPmdldFNpZ24oKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQmlnSW50ZWdlcigpIDogQmlnSW50ZWdlcgogICAgewogICAgICAgICRzaW1wbGlmaWVkID0gJHRoaXMtPnNpbXBsaWZpZWQoKTsKCiAgICAgICAgaWYgKCEgJHNpbXBsaWZpZWQtPmRlbm9taW5hdG9yLT5pc0VxdWFsVG8oMSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJvdW5kaW5nTmVjZXNzYXJ5RXhjZXB0aW9uKCdUaGlzIHJhdGlvbmFsIG51bWJlciBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYXMgYW4gaW50ZWdlciB2YWx1ZSB3aXRob3V0IHJvdW5kaW5nLicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRzaW1wbGlmaWVkLT5udW1lcmF0b3I7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b0JpZ0RlY2ltYWwoKSA6IEJpZ0RlY2ltYWwKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm51bWVyYXRvci0+dG9CaWdEZWNpbWFsKCktPmV4YWN0bHlEaXZpZGVkQnkoJHRoaXMtPmRlbm9taW5hdG9yKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQmlnUmF0aW9uYWwoKSA6IEJpZ1JhdGlvbmFsCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9TY2FsZShpbnQgJHNjYWxlLCBpbnQgJHJvdW5kaW5nTW9kZSA9IFJvdW5kaW5nTW9kZTo6VU5ORUNFU1NBUlkpIDogQmlnRGVjaW1hbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bnVtZXJhdG9yLT50b0JpZ0RlY2ltYWwoKS0+ZGl2aWRlZEJ5KCR0aGlzLT5kZW5vbWluYXRvciwgJHNjYWxlLCAkcm91bmRpbmdNb2RlKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvSW50KCkgOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRvQmlnSW50ZWdlcigpLT50b0ludCgpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9GbG9hdCgpIDogZmxvYXQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm51bWVyYXRvci0+dG9GbG9hdCgpIC8gJHRoaXMtPmRlbm9taW5hdG9yLT50b0Zsb2F0KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkgOiBzdHJpbmcKICAgIHsKICAgICAgICAkbnVtZXJhdG9yICAgPSAoc3RyaW5nKSAkdGhpcy0+bnVtZXJhdG9yOwogICAgICAgICRkZW5vbWluYXRvciA9IChzdHJpbmcpICR0aGlzLT5kZW5vbWluYXRvcjsKCiAgICAgICAgaWYgKCRkZW5vbWluYXRvciA9PT0gJzEnKSB7CiAgICAgICAgICAgIHJldHVybiAkbnVtZXJhdG9yOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5udW1lcmF0b3IgLiAnLycgLiAkdGhpcy0+ZGVub21pbmF0b3I7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGlzIG1ldGhvZCBpcyByZXF1aXJlZCBmb3Igc2VyaWFsaXppbmcgdGhlIG9iamVjdCBhbmQgU0hPVUxEIE5PVCBiZSBhY2Nlc3NlZCBkaXJlY3RseS4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5e251bWVyYXRvcjogQmlnSW50ZWdlciwgZGVub21pbmF0b3I6IEJpZ0ludGVnZXJ9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3NlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbJ251bWVyYXRvcicgPT4gJHRoaXMtPm51bWVyYXRvciwgJ2Rlbm9taW5hdG9yJyA9PiAkdGhpcy0+ZGVub21pbmF0b3JdOwogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBtZXRob2QgaXMgb25seSBoZXJlIHRvIGFsbG93IHVuc2VyaWFsaXppbmcgdGhlIG9iamVjdCBhbmQgY2Fubm90IGJlIGFjY2Vzc2VkIGRpcmVjdGx5LgogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICogQHBzYWxtLXN1cHByZXNzIFJlZHVuZGFudFByb3BlcnR5SW5pdGlhbGl6YXRpb25DaGVjawogICAgICoKICAgICAqIEBwYXJhbSBhcnJheXtudW1lcmF0b3I6IEJpZ0ludGVnZXIsIGRlbm9taW5hdG9yOiBCaWdJbnRlZ2VyfSAkZGF0YQogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICoKICAgICAqIEB0aHJvd3MgXExvZ2ljRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3Vuc2VyaWFsaXplKGFycmF5ICRkYXRhKTogdm9pZAogICAgewogICAgICAgIGlmIChpc3NldCgkdGhpcy0+bnVtZXJhdG9yKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdfX3Vuc2VyaWFsaXplKCkgaXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24sIGl0IG11c3Qgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4nKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5udW1lcmF0b3IgPSAkZGF0YVsnbnVtZXJhdG9yJ107CiAgICAgICAgJHRoaXMtPmRlbm9taW5hdG9yID0gJGRhdGFbJ2Rlbm9taW5hdG9yJ107CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGlzIG1ldGhvZCBpcyByZXF1aXJlZCBieSBpbnRlcmZhY2UgU2VyaWFsaXphYmxlIGFuZCBTSE9VTEQgTk9UIGJlIGFjY2Vzc2VkIGRpcmVjdGx5LgogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXJpYWxpemUoKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bnVtZXJhdG9yIC4gJy8nIC4gJHRoaXMtPmRlbm9taW5hdG9yOwogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBtZXRob2QgaXMgb25seSBoZXJlIHRvIGltcGxlbWVudCBpbnRlcmZhY2UgU2VyaWFsaXphYmxlIGFuZCBjYW5ub3QgYmUgYWNjZXNzZWQgZGlyZWN0bHkuCiAgICAgKgogICAgICogQGludGVybmFsCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgUmVkdW5kYW50UHJvcGVydHlJbml0aWFsaXphdGlvbkNoZWNrCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqCiAgICAgKiBAdGhyb3dzIFxMb2dpY0V4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5zZXJpYWxpemUoJHZhbHVlKSA6IHZvaWQKICAgIHsKICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPm51bWVyYXRvcikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigndW5zZXJpYWxpemUoKSBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgaXQgbXVzdCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LicpOwogICAgICAgIH0KCiAgICAgICAgWyRudW1lcmF0b3IsICRkZW5vbWluYXRvcl0gPSBcZXhwbG9kZSgnLycsICR2YWx1ZSk7CgogICAgICAgICR0aGlzLT5udW1lcmF0b3IgICA9IEJpZ0ludGVnZXI6Om9mKCRudW1lcmF0b3IpOwogICAgICAgICR0aGlzLT5kZW5vbWluYXRvciA9IEJpZ0ludGVnZXI6Om9mKCRkZW5vbWluYXRvcik7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/Exception/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/Exception/DivisionByZeroException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGhcRXhjZXB0aW9uOwoKLyoqCiAqIEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBhIGRpdmlzaW9uIGJ5IHplcm8gb2NjdXJzLgogKi8KY2xhc3MgRGl2aXNpb25CeVplcm9FeGNlcHRpb24gZXh0ZW5kcyBNYXRoRXhjZXB0aW9uCnsKICAgIC8qKgogICAgICogQHJldHVybiBEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbgogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGl2aXNpb25CeVplcm8oKSA6IERpdmlzaW9uQnlaZXJvRXhjZXB0aW9uCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCdEaXZpc2lvbiBieSB6ZXJvLicpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbgogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbW9kdWx1c011c3ROb3RCZVplcm8oKSA6IERpdmlzaW9uQnlaZXJvRXhjZXB0aW9uCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCdUaGUgbW9kdWx1cyBtdXN0IG5vdCBiZSB6ZXJvLicpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbgogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGVub21pbmF0b3JNdXN0Tm90QmVaZXJvKCkgOiBEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZignVGhlIGRlbm9taW5hdG9yIG9mIGEgcmF0aW9uYWwgbnVtYmVyIGNhbm5vdCBiZSB6ZXJvLicpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/Exception/IntegerOverflowException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGhcRXhjZXB0aW9uOwoKdXNlIEJyaWNrXE1hdGhcQmlnSW50ZWdlcjsKCi8qKgogKiBFeGNlcHRpb24gdGhyb3duIHdoZW4gYW4gaW50ZWdlciBvdmVyZmxvdyBvY2N1cnMuCiAqLwpjbGFzcyBJbnRlZ2VyT3ZlcmZsb3dFeGNlcHRpb24gZXh0ZW5kcyBNYXRoRXhjZXB0aW9uCnsKICAgIC8qKgogICAgICogQHBhcmFtIEJpZ0ludGVnZXIgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBJbnRlZ2VyT3ZlcmZsb3dFeGNlcHRpb24KICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRvSW50T3ZlcmZsb3coQmlnSW50ZWdlciAkdmFsdWUpIDogSW50ZWdlck92ZXJmbG93RXhjZXB0aW9uCiAgICB7CiAgICAgICAgJG1lc3NhZ2UgPSAnJXMgaXMgb3V0IG9mIHJhbmdlICVkIHRvICVkIGFuZCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYXMgYW4gaW50ZWdlci4nOwoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoXHNwcmludGYoJG1lc3NhZ2UsIChzdHJpbmcpICR2YWx1ZSwgUEhQX0lOVF9NSU4sIFBIUF9JTlRfTUFYKSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/Exception/MathException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGhcRXhjZXB0aW9uOwoKLyoqCiAqIEJhc2UgY2xhc3MgZm9yIGFsbCBtYXRoIGV4Y2VwdGlvbnMuCiAqCiAqIFRoaXMgY2xhc3MgaXMgYWJzdHJhY3QgdG8gZW5zdXJlIHRoYXQgb25seSBmaW5lLWdyYWluZWQgZXhjZXB0aW9ucyBhcmUgdGhyb3duIHRocm91Z2hvdXQgdGhlIGNvZGUuCiAqLwpjbGFzcyBNYXRoRXhjZXB0aW9uIGV4dGVuZHMgXFJ1bnRpbWVFeGNlcHRpb24Kewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/Exception/NegativeNumberException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGhcRXhjZXB0aW9uOwoKLyoqCiAqIEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBhdHRlbXB0aW5nIHRvIHBlcmZvcm0gYW4gdW5zdXBwb3J0ZWQgb3BlcmF0aW9uLCBzdWNoIGFzIGEgc3F1YXJlIHJvb3QsIG9uIGEgbmVnYXRpdmUgbnVtYmVyLgogKi8KY2xhc3MgTmVnYXRpdmVOdW1iZXJFeGNlcHRpb24gZXh0ZW5kcyBNYXRoRXhjZXB0aW9uCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/Exception/NumberFormatException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGhcRXhjZXB0aW9uOwoKLyoqCiAqIEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBhdHRlbXB0aW5nIHRvIGNyZWF0ZSBhIG51bWJlciBmcm9tIGEgc3RyaW5nIHdpdGggYW4gaW52YWxpZCBmb3JtYXQuCiAqLwpjbGFzcyBOdW1iZXJGb3JtYXRFeGNlcHRpb24gZXh0ZW5kcyBNYXRoRXhjZXB0aW9uCnsKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkY2hhciBUaGUgZmFpbGluZyBjaGFyYWN0ZXIuCiAgICAgKgogICAgICogQHJldHVybiBOdW1iZXJGb3JtYXRFeGNlcHRpb24KICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoYXJOb3RJbkFscGhhYmV0KHN0cmluZyAkY2hhcikgOiBzZWxmCiAgICB7CiAgICAgICAgJG9yZCA9IFxvcmQoJGNoYXIpOwoKICAgICAgICBpZiAoJG9yZCA8IDMyIHx8ICRvcmQgPiAxMjYpIHsKICAgICAgICAgICAgJGNoYXIgPSBcc3RydG91cHBlcihcZGVjaGV4KCRvcmQpKTsKCiAgICAgICAgICAgIGlmICgkb3JkIDwgMTApIHsKICAgICAgICAgICAgICAgICRjaGFyID0gJzAnIC4gJGNoYXI7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkY2hhciA9ICciJyAuICRjaGFyIC4gJyInOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKHNwcmludGYoJ0NoYXIgJXMgaXMgbm90IGEgdmFsaWQgY2hhcmFjdGVyIGluIHRoZSBnaXZlbiBhbHBoYWJldC4nLCAkY2hhcikpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/Exception/RoundingNecessaryException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGhcRXhjZXB0aW9uOwoKLyoqCiAqIEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBhIG51bWJlciBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYXQgdGhlIHJlcXVlc3RlZCBzY2FsZSB3aXRob3V0IHJvdW5kaW5nLgogKi8KY2xhc3MgUm91bmRpbmdOZWNlc3NhcnlFeGNlcHRpb24gZXh0ZW5kcyBNYXRoRXhjZXB0aW9uCnsKICAgIC8qKgogICAgICogQHJldHVybiBSb3VuZGluZ05lY2Vzc2FyeUV4Y2VwdGlvbgogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcm91bmRpbmdOZWNlc3NhcnkoKSA6IFJvdW5kaW5nTmVjZXNzYXJ5RXhjZXB0aW9uCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCdSb3VuZGluZyBpcyBuZWNlc3NhcnkgdG8gcmVwcmVzZW50IHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbiBhdCB0aGlzIHNjYWxlLicpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/Internal/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/Internal/Calculator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGhcSW50ZXJuYWw7Cgp1c2UgQnJpY2tcTWF0aFxFeGNlcHRpb25cUm91bmRpbmdOZWNlc3NhcnlFeGNlcHRpb247CnVzZSBCcmlja1xNYXRoXFJvdW5kaW5nTW9kZTsKCi8qKgogKiBQZXJmb3JtcyBiYXNpYyBvcGVyYXRpb25zIG9uIGFyYml0cmFyeSBzaXplIGludGVnZXJzLgogKgogKiBVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCwgYWxsIHBhcmFtZXRlcnMgbXVzdCBiZSB2YWxpZGF0ZWQgYXMgbm9uLWVtcHR5IHN0cmluZ3Mgb2YgZGlnaXRzLAogKiB3aXRob3V0IGxlYWRpbmcgemVybywgYW5kIHdpdGggYW4gb3B0aW9uYWwgbGVhZGluZyBtaW51cyBzaWduIGlmIHRoZSBudW1iZXIgaXMgbm90IHplcm8uCiAqCiAqIEFueSBvdGhlciBwYXJhbWV0ZXIgZm9ybWF0IHdpbGwgbGVhZCB0byB1bmRlZmluZWQgYmVoYXZpb3VyLgogKiBBbGwgbWV0aG9kcyBtdXN0IHJldHVybiBzdHJpbmdzIHJlc3BlY3RpbmcgdGhpcyBmb3JtYXQsIHVubGVzcyBzcGVjaWZpZWQgb3RoZXJ3aXNlLgogKgogKiBAaW50ZXJuYWwKICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KYWJzdHJhY3QgY2xhc3MgQ2FsY3VsYXRvcgp7CiAgICAvKioKICAgICAqIFRoZSBtYXhpbXVtIGV4cG9uZW50IHZhbHVlIGFsbG93ZWQgZm9yIHRoZSBwb3coKSBtZXRob2QuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBNQVhfUE9XRVIgPSAxMDAwMDAwOwoKICAgIC8qKgogICAgICogVGhlIGFscGhhYmV0IGZvciBjb252ZXJ0aW5nIGZyb20gYW5kIHRvIGJhc2UgMiB0byAzNiwgbG93ZXJjYXNlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQUxQSEFCRVQgPSAnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JzsKCiAgICAvKioKICAgICAqIFRoZSBDYWxjdWxhdG9yIGluc3RhbmNlIGluIHVzZS4KICAgICAqCiAgICAgKiBAdmFyIENhbGN1bGF0b3J8bnVsbAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkaW5zdGFuY2U7CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBDYWxjdWxhdG9yIGluc3RhbmNlIHRvIHVzZS4KICAgICAqCiAgICAgKiBBbiBpbnN0YW5jZSBpcyB0eXBpY2FsbHkgc2V0IG9ubHkgaW4gdW5pdCB0ZXN0czogdGhlIGF1dG9kZXRlY3QgaXMgdXN1YWxseSB0aGUgYmVzdCBvcHRpb24uCiAgICAgKgogICAgICogQHBhcmFtIENhbGN1bGF0b3J8bnVsbCAkY2FsY3VsYXRvciBUaGUgY2FsY3VsYXRvciBpbnN0YW5jZSwgb3IgTlVMTCB0byByZXZlcnQgdG8gYXV0b2RldGVjdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgZmluYWwgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXQoP0NhbGN1bGF0b3IgJGNhbGN1bGF0b3IpIDogdm9pZAogICAgewogICAgICAgIHNlbGY6OiRpbnN0YW5jZSA9ICRjYWxjdWxhdG9yOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgQ2FsY3VsYXRvciBpbnN0YW5jZSB0byB1c2UuCiAgICAgKgogICAgICogSWYgbm9uZSBoYXMgYmVlbiBleHBsaWNpdGx5IHNldCwgdGhlIGZhc3Rlc3QgYXZhaWxhYmxlIGltcGxlbWVudGF0aW9uIHdpbGwgYmUgcmV0dXJuZWQuCiAgICAgKgogICAgICogQHJldHVybiBDYWxjdWxhdG9yCiAgICAgKgogICAgICogQHBzYWxtLXB1cmUKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBJbXB1cmVTdGF0aWNQcm9wZXJ0eQogICAgICovCiAgICBmaW5hbCBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldCgpIDogQ2FsY3VsYXRvcgogICAgewogICAgICAgIGlmIChzZWxmOjokaW5zdGFuY2UgPT09IG51bGwpIHsKICAgICAgICAgICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBJbXB1cmVNZXRob2RDYWxsICovCiAgICAgICAgICAgIHNlbGY6OiRpbnN0YW5jZSA9IHNlbGY6OmRldGVjdCgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHNlbGY6OiRpbnN0YW5jZTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGZhc3Rlc3QgYXZhaWxhYmxlIENhbGN1bGF0b3IgaW1wbGVtZW50YXRpb24uCiAgICAgKgogICAgICogQGNvZGVDb3ZlcmFnZUlnbm9yZQogICAgICoKICAgICAqIEByZXR1cm4gQ2FsY3VsYXRvcgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBkZXRlY3QoKSA6IENhbGN1bGF0b3IKICAgIHsKICAgICAgICBpZiAoXGV4dGVuc2lvbl9sb2FkZWQoJ2dtcCcpKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgQ2FsY3VsYXRvclxHbXBDYWxjdWxhdG9yKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoXGV4dGVuc2lvbl9sb2FkZWQoJ2JjbWF0aCcpKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgQ2FsY3VsYXRvclxCY01hdGhDYWxjdWxhdG9yKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IENhbGN1bGF0b3JcTmF0aXZlQ2FsY3VsYXRvcigpOwogICAgfQoKICAgIC8qKgogICAgICogRXh0cmFjdHMgdGhlIHNpZ24gJiBkaWdpdHMgb2YgdGhlIG9wZXJhbmRzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGEgVGhlIGZpcnN0IG9wZXJhbmQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiIFRoZSBzZWNvbmQgb3BlcmFuZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5e2Jvb2wsIGJvb2wsIHN0cmluZywgc3RyaW5nfSBXaGV0aGVyICRhIGFuZCAkYiBhcmUgbmVnYXRpdmUsIGZvbGxvd2VkIGJ5IHRoZWlyIGRpZ2l0cy4KICAgICAqLwogICAgZmluYWwgcHJvdGVjdGVkIGZ1bmN0aW9uIGluaXQoc3RyaW5nICRhLCBzdHJpbmcgJGIpIDogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAkYU5lZyA9ICgkYVswXSA9PT0gJy0nKSwKICAgICAgICAgICAgJGJOZWcgPSAoJGJbMF0gPT09ICctJyksCgogICAgICAgICAgICAkYU5lZyA/IFxzdWJzdHIoJGEsIDEpIDogJGEsCiAgICAgICAgICAgICRiTmVnID8gXHN1YnN0cigkYiwgMSkgOiAkYiwKICAgICAgICBdOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYSBudW1iZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbiBUaGUgbnVtYmVyLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBhYnNvbHV0ZSB2YWx1ZS4KICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGFicyhzdHJpbmcgJG4pIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICgkblswXSA9PT0gJy0nKSA/IFxzdWJzdHIoJG4sIDEpIDogJG47CiAgICB9CgogICAgLyoqCiAgICAgKiBOZWdhdGVzIGEgbnVtYmVyLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG4gVGhlIG51bWJlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgbmVnYXRlZCB2YWx1ZS4KICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIG5lZyhzdHJpbmcgJG4pIDogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCRuID09PSAnMCcpIHsKICAgICAgICAgICAgcmV0dXJuICcwJzsKICAgICAgICB9CgogICAgICAgIGlmICgkblswXSA9PT0gJy0nKSB7CiAgICAgICAgICAgIHJldHVybiBcc3Vic3RyKCRuLCAxKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAnLScgLiAkbjsKICAgIH0KCiAgICAvKioKICAgICAqIENvbXBhcmVzIHR3byBudW1iZXJzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGEgVGhlIGZpcnN0IG51bWJlci4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGIgVGhlIHNlY29uZCBudW1iZXIuCiAgICAgKgogICAgICogQHJldHVybiBpbnQgWy0xLCAwLCAxXSBJZiB0aGUgZmlyc3QgbnVtYmVyIGlzIGxlc3MgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiB0aGUgc2Vjb25kIG51bWJlci4KICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGNtcChzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBpbnQKICAgIHsKICAgICAgICBbJGFOZWcsICRiTmVnLCAkYURpZywgJGJEaWddID0gJHRoaXMtPmluaXQoJGEsICRiKTsKCiAgICAgICAgaWYgKCRhTmVnICYmICEgJGJOZWcpIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRiTmVnICYmICEgJGFOZWcpIHsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQoKICAgICAgICAkYUxlbiA9IFxzdHJsZW4oJGFEaWcpOwogICAgICAgICRiTGVuID0gXHN0cmxlbigkYkRpZyk7CgogICAgICAgIGlmICgkYUxlbiA8ICRiTGVuKSB7CiAgICAgICAgICAgICRyZXN1bHQgPSAtMTsKICAgICAgICB9IGVsc2VpZiAoJGFMZW4gPiAkYkxlbikgewogICAgICAgICAgICAkcmVzdWx0ID0gMTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcmVzdWx0ID0gJGFEaWcgPD0+ICRiRGlnOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRhTmVnID8gLSRyZXN1bHQgOiAkcmVzdWx0OwogICAgfQoKICAgIC8qKgogICAgICogQWRkcyB0d28gbnVtYmVycy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhIFRoZSBhdWdlbmQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiIFRoZSBhZGRlbmQuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIHN1bS4KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGFkZChzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBTdWJ0cmFjdHMgdHdvIG51bWJlcnMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYSBUaGUgbWludWVuZC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGIgVGhlIHN1YnRyYWhlbmQuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIGRpZmZlcmVuY2UuCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBzdWIoc3RyaW5nICRhLCBzdHJpbmcgJGIpIDogc3RyaW5nOwoKICAgIC8qKgogICAgICogTXVsdGlwbGllcyB0d28gbnVtYmVycy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhIFRoZSBtdWx0aXBsaWNhbmQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiIFRoZSBtdWx0aXBsaWVyLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBwcm9kdWN0LgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gbXVsKHN0cmluZyAkYSwgc3RyaW5nICRiKSA6IHN0cmluZzsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHF1b3RpZW50IG9mIHRoZSBkaXZpc2lvbiBvZiB0d28gbnVtYmVycy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhIFRoZSBkaXZpZGVuZC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGIgVGhlIGRpdmlzb3IsIG11c3Qgbm90IGJlIHplcm8uCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIHF1b3RpZW50LgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZGl2UShzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSByZW1haW5kZXIgb2YgdGhlIGRpdmlzaW9uIG9mIHR3byBudW1iZXJzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGEgVGhlIGRpdmlkZW5kLgogICAgICogQHBhcmFtIHN0cmluZyAkYiBUaGUgZGl2aXNvciwgbXVzdCBub3QgYmUgemVyby4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgcmVtYWluZGVyLgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZGl2UihzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBxdW90aWVudCBhbmQgcmVtYWluZGVyIG9mIHRoZSBkaXZpc2lvbiBvZiB0d28gbnVtYmVycy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhIFRoZSBkaXZpZGVuZC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGIgVGhlIGRpdmlzb3IsIG11c3Qgbm90IGJlIHplcm8uCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmdbXSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBxdW90aWVudCBhbmQgcmVtYWluZGVyLgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZGl2UVIoc3RyaW5nICRhLCBzdHJpbmcgJGIpIDogYXJyYXk7CgogICAgLyoqCiAgICAgKiBFeHBvbmVudGlhdGVzIGEgbnVtYmVyLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGEgVGhlIGJhc2UgbnVtYmVyLgogICAgICogQHBhcmFtIGludCAgICAkZSBUaGUgZXhwb25lbnQsIHZhbGlkYXRlZCBhcyBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgTUFYX1BPV0VSLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBwb3dlci4KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIHBvdyhzdHJpbmcgJGEsIGludCAkZSkgOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiIFRoZSBtb2R1bHVzOyBtdXN0IG5vdCBiZSB6ZXJvLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtb2Qoc3RyaW5nICRhLCBzdHJpbmcgJGIpIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kaXZSKCR0aGlzLT5hZGQoJHRoaXMtPmRpdlIoJGEsICRiKSwgJGIpLCAkYik7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBtb2R1bGFyIG11bHRpcGxpY2F0aXZlIGludmVyc2Ugb2YgJHggbW9kdWxvICRtLgogICAgICoKICAgICAqIElmICR4IGhhcyBubyBtdWx0aXBsaWNhdGl2ZSBpbnZlcnNlIG1vZCBtLCB0aGlzIG1ldGhvZCBtdXN0IHJldHVybiBudWxsLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBpZiB0aGUgdW5kZXJseWluZyBsaWJyYXJ5IGhhcyBidWlsdC1pbiBzdXBwb3J0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHgKICAgICAqIEBwYXJhbSBzdHJpbmcgJG0gVGhlIG1vZHVsdXM7IG11c3Qgbm90IGJlIG5lZ2F0aXZlIG9yIHplcm8uCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbW9kSW52ZXJzZShzdHJpbmcgJHgsIHN0cmluZyAkbSkgOiA/c3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCRtID09PSAnMScpIHsKICAgICAgICAgICAgcmV0dXJuICcwJzsKICAgICAgICB9CgogICAgICAgICRtb2RWYWwgPSAkeDsKCiAgICAgICAgaWYgKCR4WzBdID09PSAnLScgfHwgKCR0aGlzLT5jbXAoJHRoaXMtPmFicygkeCksICRtKSA+PSAwKSkgewogICAgICAgICAgICAkbW9kVmFsID0gJHRoaXMtPm1vZCgkeCwgJG0pOwogICAgICAgIH0KCiAgICAgICAgJHggPSAnMCc7CiAgICAgICAgJHkgPSAnMCc7CiAgICAgICAgJGcgPSAkdGhpcy0+Z2NkRXh0ZW5kZWQoJG1vZFZhbCwgJG0sICR4LCAkeSk7CgogICAgICAgIGlmICgkZyAhPT0gJzEnKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5tb2QoJHRoaXMtPmFkZCgkdGhpcy0+bW9kKCR4LCAkbSksICRtKSwgJG0pOwogICAgfQoKICAgIC8qKgogICAgICogUmFpc2VzIGEgbnVtYmVyIGludG8gcG93ZXIgd2l0aCBtb2R1bG8uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYmFzZSBUaGUgYmFzZSBudW1iZXI7IG11c3QgYmUgcG9zaXRpdmUgb3IgemVyby4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGV4cCAgVGhlIGV4cG9uZW50OyBtdXN0IGJlIHBvc2l0aXZlIG9yIHplcm8uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtb2QgIFRoZSBtb2R1bHVzOyBtdXN0IGJlIHN0cmljdGx5IHBvc2l0aXZlLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBwb3dlci4KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIG1vZFBvdyhzdHJpbmcgJGJhc2UsIHN0cmluZyAkZXhwLCBzdHJpbmcgJG1vZCkgOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiB0aGUgdHdvIG51bWJlcnMuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIGlmIHRoZSB1bmRlcmx5aW5nIGxpYnJhcnkKICAgICAqIGhhcyBidWlsdC1pbiBzdXBwb3J0IGZvciBHQ0QgY2FsY3VsYXRpb25zLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGEgVGhlIGZpcnN0IG51bWJlci4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGIgVGhlIHNlY29uZCBudW1iZXIuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIEdDRCwgYWx3YXlzIHBvc2l0aXZlLCBvciB6ZXJvIGlmIGJvdGggYXJndW1lbnRzIGFyZSB6ZXJvLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2NkKHN0cmluZyAkYSwgc3RyaW5nICRiKSA6IHN0cmluZwogICAgewogICAgICAgIGlmICgkYSA9PT0gJzAnKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+YWJzKCRiKTsKICAgICAgICB9CgogICAgICAgIGlmICgkYiA9PT0gJzAnKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+YWJzKCRhKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+Z2NkKCRiLCAkdGhpcy0+ZGl2UigkYSwgJGIpKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdjZEV4dGVuZGVkKHN0cmluZyAkYSwgc3RyaW5nICRiLCBzdHJpbmcgJiR4LCBzdHJpbmcgJiR5KSA6IHN0cmluZwogICAgewogICAgICAgIGlmICgkYSA9PT0gJzAnKSB7CiAgICAgICAgICAgICR4ID0gJzAnOwogICAgICAgICAgICAkeSA9ICcxJzsKCiAgICAgICAgICAgIHJldHVybiAkYjsKICAgICAgICB9CgogICAgICAgICR4MSA9ICcwJzsKICAgICAgICAkeTEgPSAnMCc7CgogICAgICAgICRnY2QgPSAkdGhpcy0+Z2NkRXh0ZW5kZWQoJHRoaXMtPm1vZCgkYiwgJGEpLCAkYSwgJHgxLCAkeTEpOwoKICAgICAgICAkeCA9ICR0aGlzLT5zdWIoJHkxLCAkdGhpcy0+bXVsKCR0aGlzLT5kaXZRKCRiLCAkYSksICR4MSkpOwogICAgICAgICR5ID0gJHgxOwoKICAgICAgICByZXR1cm4gJGdjZDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHNxdWFyZSByb290IG9mIHRoZSBnaXZlbiBudW1iZXIsIHJvdW5kZWQgZG93bi4KICAgICAqCiAgICAgKiBUaGUgcmVzdWx0IGlzIHRoZSBsYXJnZXN0IHggc3VjaCB0aGF0IHjCsiDiiaQgbi4KICAgICAqIFRoZSBpbnB1dCBNVVNUIE5PVCBiZSBuZWdhdGl2ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuIFRoZSBudW1iZXIuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIHNxdWFyZSByb290LgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gc3FydChzdHJpbmcgJG4pIDogc3RyaW5nOwoKICAgIC8qKgogICAgICogQ29udmVydHMgYSBudW1iZXIgZnJvbSBhbiBhcmJpdHJhcnkgYmFzZS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgY29uY3JldGUgaW1wbGVtZW50YXRpb24gaWYgdGhlIHVuZGVybHlpbmcgbGlicmFyeQogICAgICogaGFzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIGJhc2UgY29udmVyc2lvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRudW1iZXIgVGhlIG51bWJlciwgcG9zaXRpdmUgb3IgemVybywgbm9uLWVtcHR5LCBjYXNlLWluc2Vuc2l0aXZlbHkgdmFsaWRhdGVkIGZvciB0aGUgZ2l2ZW4gYmFzZS4KICAgICAqIEBwYXJhbSBpbnQgICAgJGJhc2UgICBUaGUgYmFzZSBvZiB0aGUgbnVtYmVyLCB2YWxpZGF0ZWQgZnJvbSAyIHRvIDM2LgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBjb252ZXJ0ZWQgbnVtYmVyLCBmb2xsb3dpbmcgdGhlIENhbGN1bGF0b3IgY29udmVudGlvbnMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmcm9tQmFzZShzdHJpbmcgJG51bWJlciwgaW50ICRiYXNlKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZnJvbUFyYml0cmFyeUJhc2UoXHN0cnRvbG93ZXIoJG51bWJlciksIHNlbGY6OkFMUEhBQkVULCAkYmFzZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyBhIG51bWJlciB0byBhbiBhcmJpdHJhcnkgYmFzZS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgY29uY3JldGUgaW1wbGVtZW50YXRpb24gaWYgdGhlIHVuZGVybHlpbmcgbGlicmFyeQogICAgICogaGFzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIGJhc2UgY29udmVyc2lvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRudW1iZXIgVGhlIG51bWJlciB0byBjb252ZXJ0LCBmb2xsb3dpbmcgdGhlIENhbGN1bGF0b3IgY29udmVudGlvbnMuCiAgICAgKiBAcGFyYW0gaW50ICAgICRiYXNlICAgVGhlIGJhc2UgdG8gY29udmVydCB0bywgdmFsaWRhdGVkIGZyb20gMiB0byAzNi4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgY29udmVydGVkIG51bWJlciwgbG93ZXJjYXNlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9CYXNlKHN0cmluZyAkbnVtYmVyLCBpbnQgJGJhc2UpIDogc3RyaW5nCiAgICB7CiAgICAgICAgJG5lZ2F0aXZlID0gKCRudW1iZXJbMF0gPT09ICctJyk7CgogICAgICAgIGlmICgkbmVnYXRpdmUpIHsKICAgICAgICAgICAgJG51bWJlciA9IFxzdWJzdHIoJG51bWJlciwgMSk7CiAgICAgICAgfQoKICAgICAgICAkbnVtYmVyID0gJHRoaXMtPnRvQXJiaXRyYXJ5QmFzZSgkbnVtYmVyLCBzZWxmOjpBTFBIQUJFVCwgJGJhc2UpOwoKICAgICAgICBpZiAoJG5lZ2F0aXZlKSB7CiAgICAgICAgICAgIHJldHVybiAnLScgLiAkbnVtYmVyOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRudW1iZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyBhIG5vbi1uZWdhdGl2ZSBudW1iZXIgaW4gYW4gYXJiaXRyYXJ5IGJhc2UgdXNpbmcgYSBjdXN0b20gYWxwaGFiZXQsIHRvIGJhc2UgMTAuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbnVtYmVyICAgVGhlIG51bWJlciB0byBjb252ZXJ0LCB2YWxpZGF0ZWQgYXMgYSBub24tZW1wdHkgc3RyaW5nLAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZyBvbmx5IGNoYXJzIGluIHRoZSBnaXZlbiBhbHBoYWJldC9iYXNlLgogICAgICogQHBhcmFtIHN0cmluZyAkYWxwaGFiZXQgVGhlIGFscGhhYmV0IHRoYXQgY29udGFpbnMgZXZlcnkgZGlnaXQsIHZhbGlkYXRlZCBhcyAyIGNoYXJzIG1pbmltdW0uCiAgICAgKiBAcGFyYW0gaW50ICAgICRiYXNlICAgICBUaGUgYmFzZSBvZiB0aGUgbnVtYmVyLCB2YWxpZGF0ZWQgZnJvbSAyIHRvIGFscGhhYmV0IGxlbmd0aC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgbnVtYmVyIGluIGJhc2UgMTAsIGZvbGxvd2luZyB0aGUgQ2FsY3VsYXRvciBjb252ZW50aW9ucy4KICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGZyb21BcmJpdHJhcnlCYXNlKHN0cmluZyAkbnVtYmVyLCBzdHJpbmcgJGFscGhhYmV0LCBpbnQgJGJhc2UpIDogc3RyaW5nCiAgICB7CiAgICAgICAgLy8gcmVtb3ZlIGxlYWRpbmcgInplcm9zIgogICAgICAgICRudW1iZXIgPSBcbHRyaW0oJG51bWJlciwgJGFscGhhYmV0WzBdKTsKCiAgICAgICAgaWYgKCRudW1iZXIgPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybiAnMCc7CiAgICAgICAgfQoKICAgICAgICAvLyBvcHRpbWl6ZSBmb3IgIm9uZSIKICAgICAgICBpZiAoJG51bWJlciA9PT0gJGFscGhhYmV0WzFdKSB7CiAgICAgICAgICAgIHJldHVybiAnMSc7CiAgICAgICAgfQoKICAgICAgICAkcmVzdWx0ID0gJzAnOwogICAgICAgICRwb3dlciA9ICcxJzsKCiAgICAgICAgJGJhc2UgPSAoc3RyaW5nKSAkYmFzZTsKCiAgICAgICAgZm9yICgkaSA9IFxzdHJsZW4oJG51bWJlcikgLSAxOyAkaSA+PSAwOyAkaS0tKSB7CiAgICAgICAgICAgICRpbmRleCA9IFxzdHJwb3MoJGFscGhhYmV0LCAkbnVtYmVyWyRpXSk7CgogICAgICAgICAgICBpZiAoJGluZGV4ICE9PSAwKSB7CiAgICAgICAgICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPmFkZCgkcmVzdWx0LCAoJGluZGV4ID09PSAxKQogICAgICAgICAgICAgICAgICAgID8gJHBvd2VyCiAgICAgICAgICAgICAgICAgICAgOiAkdGhpcy0+bXVsKCRwb3dlciwgKHN0cmluZykgJGluZGV4KQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRpICE9PSAwKSB7CiAgICAgICAgICAgICAgICAkcG93ZXIgPSAkdGhpcy0+bXVsKCRwb3dlciwgJGJhc2UpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnZlcnRzIGEgbm9uLW5lZ2F0aXZlIG51bWJlciB0byBhbiBhcmJpdHJhcnkgYmFzZSB1c2luZyBhIGN1c3RvbSBhbHBoYWJldC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRudW1iZXIgICBUaGUgbnVtYmVyIHRvIGNvbnZlcnQsIHBvc2l0aXZlIG9yIHplcm8sIGZvbGxvd2luZyB0aGUgQ2FsY3VsYXRvciBjb252ZW50aW9ucy4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGFscGhhYmV0IFRoZSBhbHBoYWJldCB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGRpZ2l0LCB2YWxpZGF0ZWQgYXMgMiBjaGFycyBtaW5pbXVtLgogICAgICogQHBhcmFtIGludCAgICAkYmFzZSAgICAgVGhlIGJhc2UgdG8gY29udmVydCB0bywgdmFsaWRhdGVkIGZyb20gMiB0byBhbHBoYWJldCBsZW5ndGguCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIGNvbnZlcnRlZCBudW1iZXIgaW4gdGhlIGdpdmVuIGFscGhhYmV0LgogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gdG9BcmJpdHJhcnlCYXNlKHN0cmluZyAkbnVtYmVyLCBzdHJpbmcgJGFscGhhYmV0LCBpbnQgJGJhc2UpIDogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCRudW1iZXIgPT09ICcwJykgewogICAgICAgICAgICByZXR1cm4gJGFscGhhYmV0WzBdOwogICAgICAgIH0KCiAgICAgICAgJGJhc2UgPSAoc3RyaW5nKSAkYmFzZTsKICAgICAgICAkcmVzdWx0ID0gJyc7CgogICAgICAgIHdoaWxlICgkbnVtYmVyICE9PSAnMCcpIHsKICAgICAgICAgICAgWyRudW1iZXIsICRyZW1haW5kZXJdID0gJHRoaXMtPmRpdlFSKCRudW1iZXIsICRiYXNlKTsKICAgICAgICAgICAgJHJlbWFpbmRlciA9IChpbnQpICRyZW1haW5kZXI7CgogICAgICAgICAgICAkcmVzdWx0IC49ICRhbHBoYWJldFskcmVtYWluZGVyXTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBcc3RycmV2KCRyZXN1bHQpOwogICAgfQoKICAgIC8qKgogICAgICogUGVyZm9ybXMgYSByb3VuZGVkIGRpdmlzaW9uLgogICAgICoKICAgICAqIFJvdW5kaW5nIGlzIHBlcmZvcm1lZCB3aGVuIHRoZSByZW1haW5kZXIgb2YgdGhlIGRpdmlzaW9uIGlzIG5vdCB6ZXJvLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGEgICAgICAgICAgICBUaGUgZGl2aWRlbmQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiICAgICAgICAgICAgVGhlIGRpdmlzb3IsIG11c3Qgbm90IGJlIHplcm8uCiAgICAgKiBAcGFyYW0gaW50ICAgICRyb3VuZGluZ01vZGUgVGhlIHJvdW5kaW5nIG1vZGUuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gIElmIHRoZSByb3VuZGluZyBtb2RlIGlzIGludmFsaWQuCiAgICAgKiBAdGhyb3dzIFJvdW5kaW5nTmVjZXNzYXJ5RXhjZXB0aW9uIElmIFJvdW5kaW5nTW9kZTo6VU5ORUNFU1NBUlkgaXMgcHJvdmlkZWQgYnV0IHJvdW5kaW5nIGlzIG5lY2Vzc2FyeS4KICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGRpdlJvdW5kKHN0cmluZyAkYSwgc3RyaW5nICRiLCBpbnQgJHJvdW5kaW5nTW9kZSkgOiBzdHJpbmcKICAgIHsKICAgICAgICBbJHF1b3RpZW50LCAkcmVtYWluZGVyXSA9ICR0aGlzLT5kaXZRUigkYSwgJGIpOwoKICAgICAgICAkaGFzRGlzY2FyZGVkRnJhY3Rpb24gPSAoJHJlbWFpbmRlciAhPT0gJzAnKTsKICAgICAgICAkaXNQb3NpdGl2ZU9yWmVybyA9ICgkYVswXSA9PT0gJy0nKSA9PT0gKCRiWzBdID09PSAnLScpOwoKICAgICAgICAkZGlzY2FyZGVkRnJhY3Rpb25TaWduID0gZnVuY3Rpb24oKSB1c2UgKCRyZW1haW5kZXIsICRiKSA6IGludCB7CiAgICAgICAgICAgICRyID0gJHRoaXMtPmFicygkdGhpcy0+bXVsKCRyZW1haW5kZXIsICcyJykpOwogICAgICAgICAgICAkYiA9ICR0aGlzLT5hYnMoJGIpOwoKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5jbXAoJHIsICRiKTsKICAgICAgICB9OwoKICAgICAgICAkaW5jcmVtZW50ID0gZmFsc2U7CgogICAgICAgIHN3aXRjaCAoJHJvdW5kaW5nTW9kZSkgewogICAgICAgICAgICBjYXNlIFJvdW5kaW5nTW9kZTo6VU5ORUNFU1NBUlk6CiAgICAgICAgICAgICAgICBpZiAoJGhhc0Rpc2NhcmRlZEZyYWN0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgUm91bmRpbmdOZWNlc3NhcnlFeGNlcHRpb246OnJvdW5kaW5nTmVjZXNzYXJ5KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUm91bmRpbmdNb2RlOjpVUDoKICAgICAgICAgICAgICAgICRpbmNyZW1lbnQgPSAkaGFzRGlzY2FyZGVkRnJhY3Rpb247CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUm91bmRpbmdNb2RlOjpET1dOOgogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFJvdW5kaW5nTW9kZTo6Q0VJTElORzoKICAgICAgICAgICAgICAgICRpbmNyZW1lbnQgPSAkaGFzRGlzY2FyZGVkRnJhY3Rpb24gJiYgJGlzUG9zaXRpdmVPclplcm87CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUm91bmRpbmdNb2RlOjpGTE9PUjoKICAgICAgICAgICAgICAgICRpbmNyZW1lbnQgPSAkaGFzRGlzY2FyZGVkRnJhY3Rpb24gJiYgISAkaXNQb3NpdGl2ZU9yWmVybzsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBSb3VuZGluZ01vZGU6OkhBTEZfVVA6CiAgICAgICAgICAgICAgICAkaW5jcmVtZW50ID0gJGRpc2NhcmRlZEZyYWN0aW9uU2lnbigpID49IDA7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUm91bmRpbmdNb2RlOjpIQUxGX0RPV046CiAgICAgICAgICAgICAgICAkaW5jcmVtZW50ID0gJGRpc2NhcmRlZEZyYWN0aW9uU2lnbigpID4gMDsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBSb3VuZGluZ01vZGU6OkhBTEZfQ0VJTElORzoKICAgICAgICAgICAgICAgICRpbmNyZW1lbnQgPSAkaXNQb3NpdGl2ZU9yWmVybyA/ICRkaXNjYXJkZWRGcmFjdGlvblNpZ24oKSA+PSAwIDogJGRpc2NhcmRlZEZyYWN0aW9uU2lnbigpID4gMDsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBSb3VuZGluZ01vZGU6OkhBTEZfRkxPT1I6CiAgICAgICAgICAgICAgICAkaW5jcmVtZW50ID0gJGlzUG9zaXRpdmVPclplcm8gPyAkZGlzY2FyZGVkRnJhY3Rpb25TaWduKCkgPiAwIDogJGRpc2NhcmRlZEZyYWN0aW9uU2lnbigpID49IDA7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUm91bmRpbmdNb2RlOjpIQUxGX0VWRU46CiAgICAgICAgICAgICAgICAkbGFzdERpZ2l0ID0gKGludCkgJHF1b3RpZW50Wy0xXTsKICAgICAgICAgICAgICAgICRsYXN0RGlnaXRJc0V2ZW4gPSAoJGxhc3REaWdpdCAlIDIgPT09IDApOwogICAgICAgICAgICAgICAgJGluY3JlbWVudCA9ICRsYXN0RGlnaXRJc0V2ZW4gPyAkZGlzY2FyZGVkRnJhY3Rpb25TaWduKCkgPiAwIDogJGRpc2NhcmRlZEZyYWN0aW9uU2lnbigpID49IDA7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCByb3VuZGluZyBtb2RlLicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRpbmNyZW1lbnQpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5hZGQoJHF1b3RpZW50LCAkaXNQb3NpdGl2ZU9yWmVybyA/ICcxJyA6ICctMScpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRxdW90aWVudDsKICAgIH0KCiAgICAvKioKICAgICAqIENhbGN1bGF0ZXMgYml0d2lzZSBBTkQgb2YgdHdvIG51bWJlcnMuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIGlmIHRoZSB1bmRlcmx5aW5nIGxpYnJhcnkKICAgICAqIGhhcyBidWlsdC1pbiBzdXBwb3J0IGZvciBiaXR3aXNlIG9wZXJhdGlvbnMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYQogICAgICogQHBhcmFtIHN0cmluZyAkYgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhbmQoc3RyaW5nICRhLCBzdHJpbmcgJGIpIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5iaXR3aXNlKCdhbmQnLCAkYSwgJGIpOwogICAgfQoKICAgIC8qKgogICAgICogQ2FsY3VsYXRlcyBiaXR3aXNlIE9SIG9mIHR3byBudW1iZXJzLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBpZiB0aGUgdW5kZXJseWluZyBsaWJyYXJ5CiAgICAgKiBoYXMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgYml0d2lzZSBvcGVyYXRpb25zLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGEKICAgICAqIEBwYXJhbSBzdHJpbmcgJGIKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb3Ioc3RyaW5nICRhLCBzdHJpbmcgJGIpIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5iaXR3aXNlKCdvcicsICRhLCAkYik7CiAgICB9CgogICAgLyoqCiAgICAgKiBDYWxjdWxhdGVzIGJpdHdpc2UgWE9SIG9mIHR3byBudW1iZXJzLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBpZiB0aGUgdW5kZXJseWluZyBsaWJyYXJ5CiAgICAgKiBoYXMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgYml0d2lzZSBvcGVyYXRpb25zLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGEKICAgICAqIEBwYXJhbSBzdHJpbmcgJGIKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24geG9yKHN0cmluZyAkYSwgc3RyaW5nICRiKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Yml0d2lzZSgneG9yJywgJGEsICRiKTsKICAgIH0KCiAgICAvKioKICAgICAqIFBlcmZvcm1zIGEgYml0d2lzZSBvcGVyYXRpb24gb24gYSBkZWNpbWFsIG51bWJlci4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcGVyYXRvciBUaGUgb3BlcmF0b3IgdG8gdXNlLCBtdXN0IGJlICJhbmQiLCAib3IiIG9yICJ4b3IiLgogICAgICogQHBhcmFtIHN0cmluZyAkYSAgICAgICAgVGhlIGxlZnQgb3BlcmFuZC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGIgICAgICAgIFRoZSByaWdodCBvcGVyYW5kLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gYml0d2lzZShzdHJpbmcgJG9wZXJhdG9yLCBzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBzdHJpbmcKICAgIHsKICAgICAgICBbJGFOZWcsICRiTmVnLCAkYURpZywgJGJEaWddID0gJHRoaXMtPmluaXQoJGEsICRiKTsKCiAgICAgICAgJGFCaW4gPSAkdGhpcy0+dG9CaW5hcnkoJGFEaWcpOwogICAgICAgICRiQmluID0gJHRoaXMtPnRvQmluYXJ5KCRiRGlnKTsKCiAgICAgICAgJGFMZW4gPSBcc3RybGVuKCRhQmluKTsKICAgICAgICAkYkxlbiA9IFxzdHJsZW4oJGJCaW4pOwoKICAgICAgICBpZiAoJGFMZW4gPiAkYkxlbikgewogICAgICAgICAgICAkYkJpbiA9IFxzdHJfcmVwZWF0KCJceDAwIiwgJGFMZW4gLSAkYkxlbikgLiAkYkJpbjsKICAgICAgICB9IGVsc2VpZiAoJGJMZW4gPiAkYUxlbikgewogICAgICAgICAgICAkYUJpbiA9IFxzdHJfcmVwZWF0KCJceDAwIiwgJGJMZW4gLSAkYUxlbikgLiAkYUJpbjsKICAgICAgICB9CgogICAgICAgIGlmICgkYU5lZykgewogICAgICAgICAgICAkYUJpbiA9ICR0aGlzLT50d29zQ29tcGxlbWVudCgkYUJpbik7CiAgICAgICAgfQogICAgICAgIGlmICgkYk5lZykgewogICAgICAgICAgICAkYkJpbiA9ICR0aGlzLT50d29zQ29tcGxlbWVudCgkYkJpbik7CiAgICAgICAgfQoKICAgICAgICBzd2l0Y2ggKCRvcGVyYXRvcikgewogICAgICAgICAgICBjYXNlICdhbmQnOgogICAgICAgICAgICAgICAgJHZhbHVlID0gJGFCaW4gJiAkYkJpbjsKICAgICAgICAgICAgICAgICRuZWdhdGl2ZSA9ICgkYU5lZyBhbmQgJGJOZWcpOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlICdvcic6CiAgICAgICAgICAgICAgICAkdmFsdWUgPSAkYUJpbiB8ICRiQmluOwogICAgICAgICAgICAgICAgJG5lZ2F0aXZlID0gKCRhTmVnIG9yICRiTmVnKTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSAneG9yJzoKICAgICAgICAgICAgICAgICR2YWx1ZSA9ICRhQmluIF4gJGJCaW47CiAgICAgICAgICAgICAgICAkbmVnYXRpdmUgPSAoJGFOZWcgeG9yICRiTmVnKTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgLy8gQGNvZGVDb3ZlcmFnZUlnbm9yZVN0YXJ0CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBiaXR3aXNlIG9wZXJhdG9yLicpOwogICAgICAgICAgICAvLyBAY29kZUNvdmVyYWdlSWdub3JlRW5kCiAgICAgICAgfQoKICAgICAgICBpZiAoJG5lZ2F0aXZlKSB7CiAgICAgICAgICAgICR2YWx1ZSA9ICR0aGlzLT50d29zQ29tcGxlbWVudCgkdmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT50b0RlY2ltYWwoJHZhbHVlKTsKCiAgICAgICAgcmV0dXJuICRuZWdhdGl2ZSA/ICR0aGlzLT5uZWcoJHJlc3VsdCkgOiAkcmVzdWx0OwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkbnVtYmVyIEEgcG9zaXRpdmUsIGJpbmFyeSBudW1iZXIuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiB0d29zQ29tcGxlbWVudChzdHJpbmcgJG51bWJlcikgOiBzdHJpbmcKICAgIHsKICAgICAgICAkeG9yID0gXHN0cl9yZXBlYXQoIlx4ZmYiLCBcc3RybGVuKCRudW1iZXIpKTsKCiAgICAgICAgJG51bWJlciBePSAkeG9yOwoKICAgICAgICBmb3IgKCRpID0gXHN0cmxlbigkbnVtYmVyKSAtIDE7ICRpID49IDA7ICRpLS0pIHsKICAgICAgICAgICAgJGJ5dGUgPSBcb3JkKCRudW1iZXJbJGldKTsKCiAgICAgICAgICAgIGlmICgrKyRieXRlICE9PSAyNTYpIHsKICAgICAgICAgICAgICAgICRudW1iZXJbJGldID0gXGNocigkYnl0ZSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJG51bWJlclskaV0gPSAiXHgwMCI7CgogICAgICAgICAgICBpZiAoJGkgPT09IDApIHsKICAgICAgICAgICAgICAgICRudW1iZXIgPSAiXHgwMSIgLiAkbnVtYmVyOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG51bWJlcjsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnZlcnRzIGEgZGVjaW1hbCBudW1iZXIgdG8gYSBiaW5hcnkgc3RyaW5nLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG51bWJlciBUaGUgbnVtYmVyIHRvIGNvbnZlcnQsIHBvc2l0aXZlIG9yIHplcm8sIG9ubHkgZGlnaXRzLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gdG9CaW5hcnkoc3RyaW5nICRudW1iZXIpIDogc3RyaW5nCiAgICB7CiAgICAgICAgJHJlc3VsdCA9ICcnOwoKICAgICAgICB3aGlsZSAoJG51bWJlciAhPT0gJzAnKSB7CiAgICAgICAgICAgIFskbnVtYmVyLCAkcmVtYWluZGVyXSA9ICR0aGlzLT5kaXZRUigkbnVtYmVyLCAnMjU2Jyk7CiAgICAgICAgICAgICRyZXN1bHQgLj0gXGNocigoaW50KSAkcmVtYWluZGVyKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBcc3RycmV2KCRyZXN1bHQpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcG9zaXRpdmUgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBhIGJpbmFyeSBudW1iZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYnl0ZXMgVGhlIGJ5dGVzIHJlcHJlc2VudGluZyB0aGUgbnVtYmVyLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gdG9EZWNpbWFsKHN0cmluZyAkYnl0ZXMpIDogc3RyaW5nCiAgICB7CiAgICAgICAgJHJlc3VsdCA9ICcwJzsKICAgICAgICAkcG93ZXIgPSAnMSc7CgogICAgICAgIGZvciAoJGkgPSBcc3RybGVuKCRieXRlcykgLSAxOyAkaSA+PSAwOyAkaS0tKSB7CiAgICAgICAgICAgICRpbmRleCA9IFxvcmQoJGJ5dGVzWyRpXSk7CgogICAgICAgICAgICBpZiAoJGluZGV4ICE9PSAwKSB7CiAgICAgICAgICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPmFkZCgkcmVzdWx0LCAoJGluZGV4ID09PSAxKQogICAgICAgICAgICAgICAgICAgID8gJHBvd2VyCiAgICAgICAgICAgICAgICAgICAgOiAkdGhpcy0+bXVsKCRwb3dlciwgKHN0cmluZykgJGluZGV4KQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRpICE9PSAwKSB7CiAgICAgICAgICAgICAgICAkcG93ZXIgPSAkdGhpcy0+bXVsKCRwb3dlciwgJzI1NicpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/Internal/Calculator/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGhcSW50ZXJuYWxcQ2FsY3VsYXRvcjsKCnVzZSBCcmlja1xNYXRoXEludGVybmFsXENhbGN1bGF0b3I7CgovKioKICogQ2FsY3VsYXRvciBpbXBsZW1lbnRhdGlvbiBidWlsdCBhcm91bmQgdGhlIGJjbWF0aCBsaWJyYXJ5LgogKgogKiBAaW50ZXJuYWwKICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KY2xhc3MgQmNNYXRoQ2FsY3VsYXRvciBleHRlbmRzIENhbGN1bGF0b3IKewogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoc3RyaW5nICRhLCBzdHJpbmcgJGIpIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIFxiY2FkZCgkYSwgJGIsIDApOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3ViKHN0cmluZyAkYSwgc3RyaW5nICRiKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBcYmNzdWIoJGEsICRiLCAwKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG11bChzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gXGJjbXVsKCRhLCAkYiwgMCk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKgogICAgICogQHBzYWxtLXN1cHByZXNzIEludmFsaWROdWxsYWJsZVJldHVyblR5cGUKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBOdWxsYWJsZVJldHVyblN0YXRlbWVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGl2UShzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gXGJjZGl2KCRhLCAkYiwgMCk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKgogICAgICogQHBzYWxtLXN1cHByZXNzIEludmFsaWROdWxsYWJsZVJldHVyblR5cGUKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBOdWxsYWJsZVJldHVyblN0YXRlbWVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGl2UihzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAodmVyc2lvbl9jb21wYXJlKFBIUF9WRVJTSU9OLCAnNy4yJykgPj0gMCkgewogICAgICAgICAgICByZXR1cm4gXGJjbW9kKCRhLCAkYiwgMCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gXGJjbW9kKCRhLCAkYik7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaXZRUihzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBhcnJheQogICAgewogICAgICAgICRxID0gXGJjZGl2KCRhLCAkYiwgMCk7CgogICAgICAgIGlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc3LjInKSA+PSAwKSB7CiAgICAgICAgICAgICRyID0gXGJjbW9kKCRhLCAkYiwgMCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHIgPSBcYmNtb2QoJGEsICRiKTsKICAgICAgICB9CgogICAgICAgIGFzc2VydCgkcSAhPT0gbnVsbCk7CiAgICAgICAgYXNzZXJ0KCRyICE9PSBudWxsKTsKCiAgICAgICAgcmV0dXJuIFskcSwgJHJdOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcG93KHN0cmluZyAkYSwgaW50ICRlKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBcYmNwb3coJGEsIChzdHJpbmcpICRlLCAwKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgSW52YWxpZE51bGxhYmxlUmV0dXJuVHlwZQogICAgICogQHBzYWxtLXN1cHByZXNzIE51bGxhYmxlUmV0dXJuU3RhdGVtZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtb2RQb3coc3RyaW5nICRiYXNlLCBzdHJpbmcgJGV4cCwgc3RyaW5nICRtb2QpIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIFxiY3Bvd21vZCgkYmFzZSwgJGV4cCwgJG1vZCwgMCk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKgogICAgICogQHBzYWxtLXN1cHByZXNzIE51bGxhYmxlUmV0dXJuU3RhdGVtZW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgSW52YWxpZE51bGxhYmxlUmV0dXJuVHlwZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3FydChzdHJpbmcgJG4pIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIFxiY3NxcnQoJG4sIDApOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/Internal/Calculator/GmpCalculator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGhcSW50ZXJuYWxcQ2FsY3VsYXRvcjsKCnVzZSBCcmlja1xNYXRoXEludGVybmFsXENhbGN1bGF0b3I7CgovKioKICogQ2FsY3VsYXRvciBpbXBsZW1lbnRhdGlvbiBidWlsdCBhcm91bmQgdGhlIEdNUCBsaWJyYXJ5LgogKgogKiBAaW50ZXJuYWwKICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KY2xhc3MgR21wQ2FsY3VsYXRvciBleHRlbmRzIENhbGN1bGF0b3IKewogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoc3RyaW5nICRhLCBzdHJpbmcgJGIpIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIFxnbXBfc3RydmFsKFxnbXBfYWRkKCRhLCAkYikpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3ViKHN0cmluZyAkYSwgc3RyaW5nICRiKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBcZ21wX3N0cnZhbChcZ21wX3N1YigkYSwgJGIpKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG11bChzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gXGdtcF9zdHJ2YWwoXGdtcF9tdWwoJGEsICRiKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaXZRKHN0cmluZyAkYSwgc3RyaW5nICRiKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBcZ21wX3N0cnZhbChcZ21wX2Rpdl9xKCRhLCAkYikpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGl2UihzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gXGdtcF9zdHJ2YWwoXGdtcF9kaXZfcigkYSwgJGIpKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpdlFSKHN0cmluZyAkYSwgc3RyaW5nICRiKSA6IGFycmF5CiAgICB7CiAgICAgICAgWyRxLCAkcl0gPSBcZ21wX2Rpdl9xcigkYSwgJGIpOwoKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICBcZ21wX3N0cnZhbCgkcSksCiAgICAgICAgICAgIFxnbXBfc3RydmFsKCRyKQogICAgICAgIF07CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwb3coc3RyaW5nICRhLCBpbnQgJGUpIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIFxnbXBfc3RydmFsKFxnbXBfcG93KCRhLCAkZSkpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbW9kSW52ZXJzZShzdHJpbmcgJHgsIHN0cmluZyAkbSkgOiA/c3RyaW5nCiAgICB7CiAgICAgICAgJHJlc3VsdCA9IFxnbXBfaW52ZXJ0KCR4LCAkbSk7CgogICAgICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIHJldHVybiBcZ21wX3N0cnZhbCgkcmVzdWx0KTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1vZFBvdyhzdHJpbmcgJGJhc2UsIHN0cmluZyAkZXhwLCBzdHJpbmcgJG1vZCkgOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gXGdtcF9zdHJ2YWwoXGdtcF9wb3dtKCRiYXNlLCAkZXhwLCAkbW9kKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnY2Qoc3RyaW5nICRhLCBzdHJpbmcgJGIpIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIFxnbXBfc3RydmFsKFxnbXBfZ2NkKCRhLCAkYikpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZnJvbUJhc2Uoc3RyaW5nICRudW1iZXIsIGludCAkYmFzZSkgOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gXGdtcF9zdHJ2YWwoXGdtcF9pbml0KCRudW1iZXIsICRiYXNlKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b0Jhc2Uoc3RyaW5nICRudW1iZXIsIGludCAkYmFzZSkgOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gXGdtcF9zdHJ2YWwoJG51bWJlciwgJGJhc2UpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYW5kKHN0cmluZyAkYSwgc3RyaW5nICRiKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBcZ21wX3N0cnZhbChcZ21wX2FuZCgkYSwgJGIpKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9yKHN0cmluZyAkYSwgc3RyaW5nICRiKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBcZ21wX3N0cnZhbChcZ21wX29yKCRhLCAkYikpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24geG9yKHN0cmluZyAkYSwgc3RyaW5nICRiKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBcZ21wX3N0cnZhbChcZ21wX3hvcigkYSwgJGIpKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNxcnQoc3RyaW5nICRuKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBcZ21wX3N0cnZhbChcZ21wX3NxcnQoJG4pKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/Internal/Calculator/NativeCalculator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGhcSW50ZXJuYWxcQ2FsY3VsYXRvcjsKCnVzZSBCcmlja1xNYXRoXEludGVybmFsXENhbGN1bGF0b3I7CgovKioKICogQ2FsY3VsYXRvciBpbXBsZW1lbnRhdGlvbiB1c2luZyBvbmx5IG5hdGl2ZSBQSFAgY29kZS4KICoKICogQGludGVybmFsCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmNsYXNzIE5hdGl2ZUNhbGN1bGF0b3IgZXh0ZW5kcyBDYWxjdWxhdG9yCnsKICAgIC8qKgogICAgICogVGhlIG1heCBudW1iZXIgb2YgZGlnaXRzIHRoZSBwbGF0Zm9ybSBjYW4gbmF0aXZlbHkgYWRkLCBzdWJ0cmFjdCwgbXVsdGlwbHkgb3IgZGl2aWRlIHdpdGhvdXQgb3ZlcmZsb3cuCiAgICAgKiBGb3IgbXVsdGlwbGljYXRpb24sIHRoaXMgcmVwcmVzZW50cyB0aGUgbWF4IHN1bSBvZiB0aGUgbGVuZ3RocyBvZiBib3RoIG9wZXJhbmRzLgogICAgICoKICAgICAqIEZvciBhZGRpdGlvbiwgaXQgaXMgYXNzdW1lZCB0aGF0IGFuIGV4dHJhIGRpZ2l0IGNhbiBob2xkIGEgY2FycnkgKDEpIHdpdGhvdXQgb3ZlcmZsb3dpbmcuCiAgICAgKiBFeGFtcGxlOiAzMi1iaXQ6IG1heCBudW1iZXIgMSw5OTksOTk5LDk5OSAoOSBkaWdpdHMgKyBjYXJyeSkKICAgICAqICAgICAgICAgIDY0LWJpdDogbWF4IG51bWJlciAxLDk5OSw5OTksOTk5LDk5OSw5OTksOTk5ICgxOCBkaWdpdHMgKyBjYXJyeSkKICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcml2YXRlICRtYXhEaWdpdHM7CgogICAgLyoqCiAgICAgKiBDbGFzcyBjb25zdHJ1Y3Rvci4KICAgICAqCiAgICAgKiBAY29kZUNvdmVyYWdlSWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICAgICAgc3dpdGNoIChQSFBfSU5UX1NJWkUpIHsKICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgICAgJHRoaXMtPm1heERpZ2l0cyA9IDk7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgODoKICAgICAgICAgICAgICAgICR0aGlzLT5tYXhEaWdpdHMgPSAxODsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVGhlIHBsYXRmb3JtIGlzIG5vdCAzMi1iaXQgb3IgNjQtYml0IGFzIGV4cGVjdGVkLicpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZChzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBzdHJpbmcKICAgIHsKICAgICAgICAvKioKICAgICAgICAgKiBAcHNhbG0tdmFyIG51bWVyaWMtc3RyaW5nICRhCiAgICAgICAgICogQHBzYWxtLXZhciBudW1lcmljLXN0cmluZyAkYgogICAgICAgICAqLwogICAgICAgICRyZXN1bHQgPSAkYSArICRiOwoKICAgICAgICBpZiAoaXNfaW50KCRyZXN1bHQpKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSAkcmVzdWx0OwogICAgICAgIH0KCiAgICAgICAgaWYgKCRhID09PSAnMCcpIHsKICAgICAgICAgICAgcmV0dXJuICRiOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRiID09PSAnMCcpIHsKICAgICAgICAgICAgcmV0dXJuICRhOwogICAgICAgIH0KCiAgICAgICAgWyRhTmVnLCAkYk5lZywgJGFEaWcsICRiRGlnXSA9ICR0aGlzLT5pbml0KCRhLCAkYik7CgogICAgICAgICRyZXN1bHQgPSAkYU5lZyA9PT0gJGJOZWcgPyAkdGhpcy0+ZG9BZGQoJGFEaWcsICRiRGlnKSA6ICR0aGlzLT5kb1N1YigkYURpZywgJGJEaWcpOwoKICAgICAgICBpZiAoJGFOZWcpIHsKICAgICAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5uZWcoJHJlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN1YihzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmFkZCgkYSwgJHRoaXMtPm5lZygkYikpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbXVsKHN0cmluZyAkYSwgc3RyaW5nICRiKSA6IHN0cmluZwogICAgewogICAgICAgIC8qKgogICAgICAgICAqIEBwc2FsbS12YXIgbnVtZXJpYy1zdHJpbmcgJGEKICAgICAgICAgKiBAcHNhbG0tdmFyIG51bWVyaWMtc3RyaW5nICRiCiAgICAgICAgICovCiAgICAgICAgJHJlc3VsdCA9ICRhICogJGI7CgogICAgICAgIGlmIChpc19pbnQoJHJlc3VsdCkpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpICRyZXN1bHQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGEgPT09ICcwJyB8fCAkYiA9PT0gJzAnKSB7CiAgICAgICAgICAgIHJldHVybiAnMCc7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGEgPT09ICcxJykgewogICAgICAgICAgICByZXR1cm4gJGI7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGIgPT09ICcxJykgewogICAgICAgICAgICByZXR1cm4gJGE7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGEgPT09ICctMScpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5uZWcoJGIpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRiID09PSAnLTEnKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+bmVnKCRhKTsKICAgICAgICB9CgogICAgICAgIFskYU5lZywgJGJOZWcsICRhRGlnLCAkYkRpZ10gPSAkdGhpcy0+aW5pdCgkYSwgJGIpOwoKICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPmRvTXVsKCRhRGlnLCAkYkRpZyk7CgogICAgICAgIGlmICgkYU5lZyAhPT0gJGJOZWcpIHsKICAgICAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5uZWcoJHJlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpdlEoc3RyaW5nICRhLCBzdHJpbmcgJGIpIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kaXZRUigkYSwgJGIpWzBdOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGl2UihzdHJpbmcgJGEsIHN0cmluZyAkYik6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGl2UVIoJGEsICRiKVsxXTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpdlFSKHN0cmluZyAkYSwgc3RyaW5nICRiKSA6IGFycmF5CiAgICB7CiAgICAgICAgaWYgKCRhID09PSAnMCcpIHsKICAgICAgICAgICAgcmV0dXJuIFsnMCcsICcwJ107CiAgICAgICAgfQoKICAgICAgICBpZiAoJGEgPT09ICRiKSB7CiAgICAgICAgICAgIHJldHVybiBbJzEnLCAnMCddOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRiID09PSAnMScpIHsKICAgICAgICAgICAgcmV0dXJuIFskYSwgJzAnXTsKICAgICAgICB9CgogICAgICAgIGlmICgkYiA9PT0gJy0xJykgewogICAgICAgICAgICByZXR1cm4gWyR0aGlzLT5uZWcoJGEpLCAnMCddOwogICAgICAgIH0KCiAgICAgICAgLyoqIEBwc2FsbS12YXIgbnVtZXJpYy1zdHJpbmcgJGEgKi8KICAgICAgICAkbmEgPSAkYSAqIDE7IC8vIGNhc3QgdG8gbnVtYmVyCgogICAgICAgIGlmIChpc19pbnQoJG5hKSkgewogICAgICAgICAgICAvKiogQHBzYWxtLXZhciBudW1lcmljLXN0cmluZyAkYiAqLwogICAgICAgICAgICAkbmIgPSAkYiAqIDE7CgogICAgICAgICAgICBpZiAoaXNfaW50KCRuYikpIHsKICAgICAgICAgICAgICAgIC8vIHRoZSBvbmx5IGRpdmlzaW9uIHRoYXQgbWF5IG92ZXJmbG93IGlzIFBIUF9JTlRfTUlOIC8gLTEsCiAgICAgICAgICAgICAgICAvLyB3aGljaCBjYW5ub3QgaGFwcGVuIGhlcmUgYXMgd2UndmUgYWxyZWFkeSBoYW5kbGVkIGEgZGl2aXNvciBvZiAtMSBhYm92ZS4KICAgICAgICAgICAgICAgICRyID0gJG5hICUgJG5iOwogICAgICAgICAgICAgICAgJHEgPSAoJG5hIC0gJHIpIC8gJG5iOwoKICAgICAgICAgICAgICAgIGFzc2VydChpc19pbnQoJHEpKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgICAgIChzdHJpbmcpICRxLAogICAgICAgICAgICAgICAgICAgIChzdHJpbmcpICRyCiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBbJGFOZWcsICRiTmVnLCAkYURpZywgJGJEaWddID0gJHRoaXMtPmluaXQoJGEsICRiKTsKCiAgICAgICAgWyRxLCAkcl0gPSAkdGhpcy0+ZG9EaXYoJGFEaWcsICRiRGlnKTsKCiAgICAgICAgaWYgKCRhTmVnICE9PSAkYk5lZykgewogICAgICAgICAgICAkcSA9ICR0aGlzLT5uZWcoJHEpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRhTmVnKSB7CiAgICAgICAgICAgICRyID0gJHRoaXMtPm5lZygkcik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gWyRxLCAkcl07CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwb3coc3RyaW5nICRhLCBpbnQgJGUpIDogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCRlID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiAnMSc7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGUgPT09IDEpIHsKICAgICAgICAgICAgcmV0dXJuICRhOwogICAgICAgIH0KCiAgICAgICAgJG9kZCA9ICRlICUgMjsKICAgICAgICAkZSAtPSAkb2RkOwoKICAgICAgICAkYWEgPSAkdGhpcy0+bXVsKCRhLCAkYSk7CgogICAgICAgIC8qKiBAcHNhbG0tc3VwcHJlc3MgUG9zc2libHlJbnZhbGlkQXJndW1lbnQgV2UncmUgc3VyZSB0aGF0ICRlIC8gMiBpcyBhbiBpbnQgbm93ICovCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wb3coJGFhLCAkZSAvIDIpOwoKICAgICAgICBpZiAoJG9kZCA9PT0gMSkgewogICAgICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPm11bCgkcmVzdWx0LCAkYSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICAvKioKICAgICAqIEFsZ29yaXRobSBmcm9tOiBodHRwczovL3d3dy5nZWVrc2ZvcmdlZWtzLm9yZy9tb2R1bGFyLWV4cG9uZW50aWF0aW9uLXBvd2VyLWluLW1vZHVsYXItYXJpdGhtZXRpYy8KICAgICAqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtb2RQb3coc3RyaW5nICRiYXNlLCBzdHJpbmcgJGV4cCwgc3RyaW5nICRtb2QpIDogc3RyaW5nCiAgICB7CiAgICAgICAgLy8gc3BlY2lhbCBjYXNlOiB0aGUgYWxnb3JpdGhtIGJlbG93IGZhaWxzIHdpdGggMCBwb3dlciAwIG1vZCAxIChyZXR1cm5zIDEgaW5zdGVhZCBvZiAwKQogICAgICAgIGlmICgkYmFzZSA9PT0gJzAnICYmICRleHAgPT09ICcwJyAmJiAkbW9kID09PSAnMScpIHsKICAgICAgICAgICAgcmV0dXJuICcwJzsKICAgICAgICB9CgogICAgICAgIC8vIHNwZWNpYWwgY2FzZTogdGhlIGFsZ29yaXRobSBiZWxvdyBmYWlscyB3aXRoIHBvd2VyIDAgbW9kIDEgKHJldHVybnMgMSBpbnN0ZWFkIG9mIDApCiAgICAgICAgaWYgKCRleHAgPT09ICcwJyAmJiAkbW9kID09PSAnMScpIHsKICAgICAgICAgICAgcmV0dXJuICcwJzsKICAgICAgICB9CgogICAgICAgICR4ID0gJGJhc2U7CgogICAgICAgICRyZXMgPSAnMSc7CgogICAgICAgIC8vIG51bWJlcnMgYXJlIHBvc2l0aXZlLCBzbyB3ZSBjYW4gdXNlIHJlbWFpbmRlciBpbnN0ZWFkIG9mIG1vZHVsbwogICAgICAgICR4ID0gJHRoaXMtPmRpdlIoJHgsICRtb2QpOwoKICAgICAgICB3aGlsZSAoJGV4cCAhPT0gJzAnKSB7CiAgICAgICAgICAgIGlmIChpbl9hcnJheSgkZXhwWy0xXSwgWycxJywgJzMnLCAnNScsICc3JywgJzknXSkpIHsgLy8gb2RkCiAgICAgICAgICAgICAgICAkcmVzID0gJHRoaXMtPmRpdlIoJHRoaXMtPm11bCgkcmVzLCAkeCksICRtb2QpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkZXhwID0gJHRoaXMtPmRpdlEoJGV4cCwgJzInKTsKICAgICAgICAgICAgJHggPSAkdGhpcy0+ZGl2UigkdGhpcy0+bXVsKCR4LCAkeCksICRtb2QpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGFwdGVkIGZyb20gaHR0cHM6Ly9jcC1hbGdvcml0aG1zLmNvbS9udW1fbWV0aG9kcy9yb290c19uZXd0b24uaHRtbAogICAgICoKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNxcnQoc3RyaW5nICRuKSA6IHN0cmluZwogICAgewogICAgICAgIGlmICgkbiA9PT0gJzAnKSB7CiAgICAgICAgICAgIHJldHVybiAnMCc7CiAgICAgICAgfQoKICAgICAgICAvLyBpbml0aWFsIGFwcHJveGltYXRpb24KICAgICAgICAkeCA9IFxzdHJfcmVwZWF0KCc5JywgXGludGRpdihcc3RybGVuKCRuKSwgMikgPzogMSk7CgogICAgICAgICRkZWNyZWFzZWQgPSBmYWxzZTsKCiAgICAgICAgZm9yICg7OykgewogICAgICAgICAgICAkbnggPSAkdGhpcy0+ZGl2USgkdGhpcy0+YWRkKCR4LCAkdGhpcy0+ZGl2USgkbiwgJHgpKSwgJzInKTsKCiAgICAgICAgICAgIGlmICgkeCA9PT0gJG54IHx8ICR0aGlzLT5jbXAoJG54LCAkeCkgPiAwICYmICRkZWNyZWFzZWQpIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkZGVjcmVhc2VkID0gJHRoaXMtPmNtcCgkbngsICR4KSA8IDA7CiAgICAgICAgICAgICR4ID0gJG54OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR4OwogICAgfQoKICAgIC8qKgogICAgICogUGVyZm9ybXMgdGhlIGFkZGl0aW9uIG9mIHR3byBub24tc2lnbmVkIGxhcmdlIGludGVnZXJzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGEgVGhlIGZpcnN0IG9wZXJhbmQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiIFRoZSBzZWNvbmQgb3BlcmFuZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGRvQWRkKHN0cmluZyAkYSwgc3RyaW5nICRiKSA6IHN0cmluZwogICAgewogICAgICAgIFskYSwgJGIsICRsZW5ndGhdID0gJHRoaXMtPnBhZCgkYSwgJGIpOwoKICAgICAgICAkY2FycnkgPSAwOwogICAgICAgICRyZXN1bHQgPSAnJzsKCiAgICAgICAgZm9yICgkaSA9ICRsZW5ndGggLSAkdGhpcy0+bWF4RGlnaXRzOzsgJGkgLT0gJHRoaXMtPm1heERpZ2l0cykgewogICAgICAgICAgICAkYmxvY2tMZW5ndGggPSAkdGhpcy0+bWF4RGlnaXRzOwoKICAgICAgICAgICAgaWYgKCRpIDwgMCkgewogICAgICAgICAgICAgICAgJGJsb2NrTGVuZ3RoICs9ICRpOwogICAgICAgICAgICAgICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBMb29wSW52YWxpZGF0aW9uICovCiAgICAgICAgICAgICAgICAkaSA9IDA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qKiBAcHNhbG0tdmFyIG51bWVyaWMtc3RyaW5nICRibG9ja0EgKi8KICAgICAgICAgICAgJGJsb2NrQSA9IFxzdWJzdHIoJGEsICRpLCAkYmxvY2tMZW5ndGgpOwoKICAgICAgICAgICAgLyoqIEBwc2FsbS12YXIgbnVtZXJpYy1zdHJpbmcgJGJsb2NrQiAqLwogICAgICAgICAgICAkYmxvY2tCID0gXHN1YnN0cigkYiwgJGksICRibG9ja0xlbmd0aCk7CgogICAgICAgICAgICAkc3VtID0gKHN0cmluZykgKCRibG9ja0EgKyAkYmxvY2tCICsgJGNhcnJ5KTsKICAgICAgICAgICAgJHN1bUxlbmd0aCA9IFxzdHJsZW4oJHN1bSk7CgogICAgICAgICAgICBpZiAoJHN1bUxlbmd0aCA+ICRibG9ja0xlbmd0aCkgewogICAgICAgICAgICAgICAgJHN1bSA9IFxzdWJzdHIoJHN1bSwgMSk7CiAgICAgICAgICAgICAgICAkY2FycnkgPSAxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCRzdW1MZW5ndGggPCAkYmxvY2tMZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAkc3VtID0gXHN0cl9yZXBlYXQoJzAnLCAkYmxvY2tMZW5ndGggLSAkc3VtTGVuZ3RoKSAuICRzdW07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkY2FycnkgPSAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkcmVzdWx0ID0gJHN1bSAuICRyZXN1bHQ7CgogICAgICAgICAgICBpZiAoJGkgPT09IDApIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoJGNhcnJ5ID09PSAxKSB7CiAgICAgICAgICAgICRyZXN1bHQgPSAnMScgLiAkcmVzdWx0OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBQZXJmb3JtcyB0aGUgc3VidHJhY3Rpb24gb2YgdHdvIG5vbi1zaWduZWQgbGFyZ2UgaW50ZWdlcnMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYSBUaGUgZmlyc3Qgb3BlcmFuZC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGIgVGhlIHNlY29uZCBvcGVyYW5kLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZG9TdWIoc3RyaW5nICRhLCBzdHJpbmcgJGIpIDogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCRhID09PSAkYikgewogICAgICAgICAgICByZXR1cm4gJzAnOwogICAgICAgIH0KCiAgICAgICAgLy8gRW5zdXJlIHRoYXQgd2UgYWx3YXlzIHN1YnRyYWN0IHRvIGEgcG9zaXRpdmUgcmVzdWx0OiBiaWdnZXN0IG1pbnVzIHNtYWxsZXN0LgogICAgICAgICRjbXAgPSAkdGhpcy0+ZG9DbXAoJGEsICRiKTsKCiAgICAgICAgJGludmVydCA9ICgkY21wID09PSAtMSk7CgogICAgICAgIGlmICgkaW52ZXJ0KSB7CiAgICAgICAgICAgICRjID0gJGE7CiAgICAgICAgICAgICRhID0gJGI7CiAgICAgICAgICAgICRiID0gJGM7CiAgICAgICAgfQoKICAgICAgICBbJGEsICRiLCAkbGVuZ3RoXSA9ICR0aGlzLT5wYWQoJGEsICRiKTsKCiAgICAgICAgJGNhcnJ5ID0gMDsKICAgICAgICAkcmVzdWx0ID0gJyc7CgogICAgICAgICRjb21wbGVtZW50ID0gMTAgKiogJHRoaXMtPm1heERpZ2l0czsKCiAgICAgICAgZm9yICgkaSA9ICRsZW5ndGggLSAkdGhpcy0+bWF4RGlnaXRzOzsgJGkgLT0gJHRoaXMtPm1heERpZ2l0cykgewogICAgICAgICAgICAkYmxvY2tMZW5ndGggPSAkdGhpcy0+bWF4RGlnaXRzOwoKICAgICAgICAgICAgaWYgKCRpIDwgMCkgewogICAgICAgICAgICAgICAgJGJsb2NrTGVuZ3RoICs9ICRpOwogICAgICAgICAgICAgICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBMb29wSW52YWxpZGF0aW9uICovCiAgICAgICAgICAgICAgICAkaSA9IDA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qKiBAcHNhbG0tdmFyIG51bWVyaWMtc3RyaW5nICRibG9ja0EgKi8KICAgICAgICAgICAgJGJsb2NrQSA9IFxzdWJzdHIoJGEsICRpLCAkYmxvY2tMZW5ndGgpOwoKICAgICAgICAgICAgLyoqIEBwc2FsbS12YXIgbnVtZXJpYy1zdHJpbmcgJGJsb2NrQiAqLwogICAgICAgICAgICAkYmxvY2tCID0gXHN1YnN0cigkYiwgJGksICRibG9ja0xlbmd0aCk7CgogICAgICAgICAgICAkc3VtID0gJGJsb2NrQSAtICRibG9ja0IgLSAkY2Fycnk7CgogICAgICAgICAgICBpZiAoJHN1bSA8IDApIHsKICAgICAgICAgICAgICAgICRzdW0gKz0gJGNvbXBsZW1lbnQ7CiAgICAgICAgICAgICAgICAkY2FycnkgPSAxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGNhcnJ5ID0gMDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHN1bSA9IChzdHJpbmcpICRzdW07CiAgICAgICAgICAgICRzdW1MZW5ndGggPSBcc3RybGVuKCRzdW0pOwoKICAgICAgICAgICAgaWYgKCRzdW1MZW5ndGggPCAkYmxvY2tMZW5ndGgpIHsKICAgICAgICAgICAgICAgICRzdW0gPSBcc3RyX3JlcGVhdCgnMCcsICRibG9ja0xlbmd0aCAtICRzdW1MZW5ndGgpIC4gJHN1bTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHJlc3VsdCA9ICRzdW0gLiAkcmVzdWx0OwoKICAgICAgICAgICAgaWYgKCRpID09PSAwKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gQ2FycnkgY2Fubm90IGJlIDEgd2hlbiB0aGUgbG9vcCBlbmRzLCBhcyBhID4gYgogICAgICAgIGFzc2VydCgkY2FycnkgPT09IDApOwoKICAgICAgICAkcmVzdWx0ID0gXGx0cmltKCRyZXN1bHQsICcwJyk7CgogICAgICAgIGlmICgkaW52ZXJ0KSB7CiAgICAgICAgICAgICRyZXN1bHQgPSAkdGhpcy0+bmVnKCRyZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBQZXJmb3JtcyB0aGUgbXVsdGlwbGljYXRpb24gb2YgdHdvIG5vbi1zaWduZWQgbGFyZ2UgaW50ZWdlcnMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYSBUaGUgZmlyc3Qgb3BlcmFuZC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGIgVGhlIHNlY29uZCBvcGVyYW5kLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZG9NdWwoc3RyaW5nICRhLCBzdHJpbmcgJGIpIDogc3RyaW5nCiAgICB7CiAgICAgICAgJHggPSBcc3RybGVuKCRhKTsKICAgICAgICAkeSA9IFxzdHJsZW4oJGIpOwoKICAgICAgICAkbWF4RGlnaXRzID0gXGludGRpdigkdGhpcy0+bWF4RGlnaXRzLCAyKTsKICAgICAgICAkY29tcGxlbWVudCA9IDEwICoqICRtYXhEaWdpdHM7CgogICAgICAgICRyZXN1bHQgPSAnMCc7CgogICAgICAgIGZvciAoJGkgPSAkeCAtICRtYXhEaWdpdHM7OyAkaSAtPSAkbWF4RGlnaXRzKSB7CiAgICAgICAgICAgICRibG9ja0FMZW5ndGggPSAkbWF4RGlnaXRzOwoKICAgICAgICAgICAgaWYgKCRpIDwgMCkgewogICAgICAgICAgICAgICAgJGJsb2NrQUxlbmd0aCArPSAkaTsKICAgICAgICAgICAgICAgIC8qKiBAcHNhbG0tc3VwcHJlc3MgTG9vcEludmFsaWRhdGlvbiAqLwogICAgICAgICAgICAgICAgJGkgPSAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkYmxvY2tBID0gKGludCkgXHN1YnN0cigkYSwgJGksICRibG9ja0FMZW5ndGgpOwoKICAgICAgICAgICAgJGxpbmUgPSAnJzsKICAgICAgICAgICAgJGNhcnJ5ID0gMDsKCiAgICAgICAgICAgIGZvciAoJGogPSAkeSAtICRtYXhEaWdpdHM7OyAkaiAtPSAkbWF4RGlnaXRzKSB7CiAgICAgICAgICAgICAgICAkYmxvY2tCTGVuZ3RoID0gJG1heERpZ2l0czsKCiAgICAgICAgICAgICAgICBpZiAoJGogPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgJGJsb2NrQkxlbmd0aCArPSAkajsKICAgICAgICAgICAgICAgICAgICAvKiogQHBzYWxtLXN1cHByZXNzIExvb3BJbnZhbGlkYXRpb24gKi8KICAgICAgICAgICAgICAgICAgICAkaiA9IDA7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGJsb2NrQiA9IChpbnQpIFxzdWJzdHIoJGIsICRqLCAkYmxvY2tCTGVuZ3RoKTsKCiAgICAgICAgICAgICAgICAkbXVsID0gJGJsb2NrQSAqICRibG9ja0IgKyAkY2Fycnk7CiAgICAgICAgICAgICAgICAkdmFsdWUgPSAkbXVsICUgJGNvbXBsZW1lbnQ7CiAgICAgICAgICAgICAgICAkY2FycnkgPSAoJG11bCAtICR2YWx1ZSkgLyAkY29tcGxlbWVudDsKCiAgICAgICAgICAgICAgICAkdmFsdWUgPSAoc3RyaW5nKSAkdmFsdWU7CiAgICAgICAgICAgICAgICAkdmFsdWUgPSBcc3RyX3BhZCgkdmFsdWUsICRtYXhEaWdpdHMsICcwJywgU1RSX1BBRF9MRUZUKTsKCiAgICAgICAgICAgICAgICAkbGluZSA9ICR2YWx1ZSAuICRsaW5lOwoKICAgICAgICAgICAgICAgIGlmICgkaiA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJGNhcnJ5ICE9PSAwKSB7CiAgICAgICAgICAgICAgICAkbGluZSA9ICRjYXJyeSAuICRsaW5lOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkbGluZSA9IFxsdHJpbSgkbGluZSwgJzAnKTsKCiAgICAgICAgICAgIGlmICgkbGluZSAhPT0gJycpIHsKICAgICAgICAgICAgICAgICRsaW5lIC49IFxzdHJfcmVwZWF0KCcwJywgJHggLSAkYmxvY2tBTGVuZ3RoIC0gJGkpOwogICAgICAgICAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5hZGQoJHJlc3VsdCwgJGxpbmUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJGkgPT09IDApIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICAvKioKICAgICAqIFBlcmZvcm1zIHRoZSBkaXZpc2lvbiBvZiB0d28gbm9uLXNpZ25lZCBsYXJnZSBpbnRlZ2Vycy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhIFRoZSBmaXJzdCBvcGVyYW5kLgogICAgICogQHBhcmFtIHN0cmluZyAkYiBUaGUgc2Vjb25kIG9wZXJhbmQuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmdbXSBUaGUgcXVvdGllbnQgYW5kIHJlbWFpbmRlci4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBkb0RpdihzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBhcnJheQogICAgewogICAgICAgICRjbXAgPSAkdGhpcy0+ZG9DbXAoJGEsICRiKTsKCiAgICAgICAgaWYgKCRjbXAgPT09IC0xKSB7CiAgICAgICAgICAgIHJldHVybiBbJzAnLCAkYV07CiAgICAgICAgfQoKICAgICAgICAkeCA9IFxzdHJsZW4oJGEpOwogICAgICAgICR5ID0gXHN0cmxlbigkYik7CgogICAgICAgIC8vIHdlIG5vdyBrbm93IHRoYXQgYSA+PSBiICYmIHggPj0geQoKICAgICAgICAkcSA9ICcwJzsgLy8gcXVvdGllbnQKICAgICAgICAkciA9ICRhOyAvLyByZW1haW5kZXIKICAgICAgICAkeiA9ICR5OyAvLyBmb2N1cyBsZW5ndGgsIGFsd2F5cyAkeSBvciAkeSsxCgogICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgJGZvY3VzID0gXHN1YnN0cigkYSwgMCwgJHopOwoKICAgICAgICAgICAgJGNtcCA9ICR0aGlzLT5kb0NtcCgkZm9jdXMsICRiKTsKCiAgICAgICAgICAgIGlmICgkY21wID09PSAtMSkgewogICAgICAgICAgICAgICAgaWYgKCR6ID09PSAkeCkgeyAvLyByZW1haW5kZXIgPCBkaXZpZGVuZAogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICR6Kys7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR6ZXJvcyA9IFxzdHJfcmVwZWF0KCcwJywgJHggLSAkeik7CgogICAgICAgICAgICAkcSA9ICR0aGlzLT5hZGQoJHEsICcxJyAuICR6ZXJvcyk7CiAgICAgICAgICAgICRhID0gJHRoaXMtPnN1YigkYSwgJGIgLiAkemVyb3MpOwoKICAgICAgICAgICAgJHIgPSAkYTsKCiAgICAgICAgICAgIGlmICgkciA9PT0gJzAnKSB7IC8vIHJlbWFpbmRlciA9PSAwCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHggPSBcc3RybGVuKCRhKTsKCiAgICAgICAgICAgIGlmICgkeCA8ICR5KSB7IC8vIHJlbWFpbmRlciA8IGRpdmlkZW5kCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHogPSAkeTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBbJHEsICRyXTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbXBhcmVzIHR3byBub24tc2lnbmVkIGxhcmdlIG51bWJlcnMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYSBUaGUgZmlyc3Qgb3BlcmFuZC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGIgVGhlIHNlY29uZCBvcGVyYW5kLgogICAgICoKICAgICAqIEByZXR1cm4gaW50IFstMSwgMCwgMV0KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBkb0NtcChzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBpbnQKICAgIHsKICAgICAgICAkeCA9IFxzdHJsZW4oJGEpOwogICAgICAgICR5ID0gXHN0cmxlbigkYik7CgogICAgICAgICRjbXAgPSAkeCA8PT4gJHk7CgogICAgICAgIGlmICgkY21wICE9PSAwKSB7CiAgICAgICAgICAgIHJldHVybiAkY21wOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFxzdHJjbXAoJGEsICRiKSA8PT4gMDsgLy8gZW5mb3JjZSBbLTEsIDAsIDFdCiAgICB9CgogICAgLyoqCiAgICAgKiBQYWRzIHRoZSBsZWZ0IG9mIG9uZSBvZiB0aGUgZ2l2ZW4gbnVtYmVycyB3aXRoIHplcm9zIGlmIG5lY2Vzc2FyeSB0byBtYWtlIGJvdGggbnVtYmVycyB0aGUgc2FtZSBsZW5ndGguCiAgICAgKgogICAgICogVGhlIG51bWJlcnMgbXVzdCBvbmx5IGNvbnNpc3Qgb2YgZGlnaXRzLCB3aXRob3V0IGxlYWRpbmcgbWludXMgc2lnbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhIFRoZSBmaXJzdCBvcGVyYW5kLgogICAgICogQHBhcmFtIHN0cmluZyAkYiBUaGUgc2Vjb25kIG9wZXJhbmQuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheXtzdHJpbmcsIHN0cmluZywgaW50fQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHBhZChzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBhcnJheQogICAgewogICAgICAgICR4ID0gXHN0cmxlbigkYSk7CiAgICAgICAgJHkgPSBcc3RybGVuKCRiKTsKCiAgICAgICAgaWYgKCR4ID4gJHkpIHsKICAgICAgICAgICAgJGIgPSBcc3RyX3JlcGVhdCgnMCcsICR4IC0gJHkpIC4gJGI7CgogICAgICAgICAgICByZXR1cm4gWyRhLCAkYiwgJHhdOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR4IDwgJHkpIHsKICAgICAgICAgICAgJGEgPSBcc3RyX3JlcGVhdCgnMCcsICR5IC0gJHgpIC4gJGE7CgogICAgICAgICAgICByZXR1cm4gWyRhLCAkYiwgJHldOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFskYSwgJGIsICR4XTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/RoundingMode.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGg7CgovKioKICogU3BlY2lmaWVzIGEgcm91bmRpbmcgYmVoYXZpb3IgZm9yIG51bWVyaWNhbCBvcGVyYXRpb25zIGNhcGFibGUgb2YgZGlzY2FyZGluZyBwcmVjaXNpb24uCiAqCiAqIEVhY2ggcm91bmRpbmcgbW9kZSBpbmRpY2F0ZXMgaG93IHRoZSBsZWFzdCBzaWduaWZpY2FudCByZXR1cm5lZCBkaWdpdCBvZiBhIHJvdW5kZWQgcmVzdWx0CiAqIGlzIHRvIGJlIGNhbGN1bGF0ZWQuIElmIGZld2VyIGRpZ2l0cyBhcmUgcmV0dXJuZWQgdGhhbiB0aGUgZGlnaXRzIG5lZWRlZCB0byByZXByZXNlbnQgdGhlCiAqIGV4YWN0IG51bWVyaWNhbCByZXN1bHQsIHRoZSBkaXNjYXJkZWQgZGlnaXRzIHdpbGwgYmUgcmVmZXJyZWQgdG8gYXMgdGhlIGRpc2NhcmRlZCBmcmFjdGlvbgogKiByZWdhcmRsZXNzIHRoZSBkaWdpdHMnIGNvbnRyaWJ1dGlvbiB0byB0aGUgdmFsdWUgb2YgdGhlIG51bWJlci4gSW4gb3RoZXIgd29yZHMsIGNvbnNpZGVyZWQKICogYXMgYSBudW1lcmljYWwgdmFsdWUsIHRoZSBkaXNjYXJkZWQgZnJhY3Rpb24gY291bGQgaGF2ZSBhbiBhYnNvbHV0ZSB2YWx1ZSBncmVhdGVyIHRoYW4gb25lLgogKi8KZmluYWwgY2xhc3MgUm91bmRpbmdNb2RlCnsKICAgIC8qKgogICAgICogUHJpdmF0ZSBjb25zdHJ1Y3Rvci4gVGhpcyBjbGFzcyBpcyBub3QgaW5zdGFudGlhYmxlLgogICAgICoKICAgICAqIEBjb2RlQ292ZXJhZ2VJZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnRzIHRoYXQgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gaGFzIGFuIGV4YWN0IHJlc3VsdCwgaGVuY2Ugbm8gcm91bmRpbmcgaXMgbmVjZXNzYXJ5LgogICAgICoKICAgICAqIElmIHRoaXMgcm91bmRpbmcgbW9kZSBpcyBzcGVjaWZpZWQgb24gYW4gb3BlcmF0aW9uIHRoYXQgeWllbGRzIGEgcmVzdWx0IHRoYXQKICAgICAqIGNhbm5vdCBiZSByZXByZXNlbnRlZCBhdCB0aGUgcmVxdWVzdGVkIHNjYWxlLCBhIFJvdW5kaW5nTmVjZXNzYXJ5RXhjZXB0aW9uIGlzIHRocm93bi4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFVOTkVDRVNTQVJZID0gMDsKCiAgICAvKioKICAgICAqIFJvdW5kcyBhd2F5IGZyb20gemVyby4KICAgICAqCiAgICAgKiBBbHdheXMgaW5jcmVtZW50cyB0aGUgZGlnaXQgcHJpb3IgdG8gYSBub256ZXJvIGRpc2NhcmRlZCBmcmFjdGlvbi4KICAgICAqIE5vdGUgdGhhdCB0aGlzIHJvdW5kaW5nIG1vZGUgbmV2ZXIgZGVjcmVhc2VzIHRoZSBtYWduaXR1ZGUgb2YgdGhlIGNhbGN1bGF0ZWQgdmFsdWUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBVUCA9IDE7CgogICAgLyoqCiAgICAgKiBSb3VuZHMgdG93YXJkcyB6ZXJvLgogICAgICoKICAgICAqIE5ldmVyIGluY3JlbWVudHMgdGhlIGRpZ2l0IHByaW9yIHRvIGEgZGlzY2FyZGVkIGZyYWN0aW9uIChpLmUuLCB0cnVuY2F0ZXMpLgogICAgICogTm90ZSB0aGF0IHRoaXMgcm91bmRpbmcgbW9kZSBuZXZlciBpbmNyZWFzZXMgdGhlIG1hZ25pdHVkZSBvZiB0aGUgY2FsY3VsYXRlZCB2YWx1ZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IERPV04gPSAyOwoKICAgIC8qKgogICAgICogUm91bmRzIHRvd2FyZHMgcG9zaXRpdmUgaW5maW5pdHkuCiAgICAgKgogICAgICogSWYgdGhlIHJlc3VsdCBpcyBwb3NpdGl2ZSwgYmVoYXZlcyBhcyBmb3IgVVA7IGlmIG5lZ2F0aXZlLCBiZWhhdmVzIGFzIGZvciBET1dOLgogICAgICogTm90ZSB0aGF0IHRoaXMgcm91bmRpbmcgbW9kZSBuZXZlciBkZWNyZWFzZXMgdGhlIGNhbGN1bGF0ZWQgdmFsdWUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDRUlMSU5HID0gMzsKCiAgICAvKioKICAgICAqIFJvdW5kcyB0b3dhcmRzIG5lZ2F0aXZlIGluZmluaXR5LgogICAgICoKICAgICAqIElmIHRoZSByZXN1bHQgaXMgcG9zaXRpdmUsIGJlaGF2ZSBhcyBmb3IgRE9XTjsgaWYgbmVnYXRpdmUsIGJlaGF2ZSBhcyBmb3IgVVAuCiAgICAgKiBOb3RlIHRoYXQgdGhpcyByb3VuZGluZyBtb2RlIG5ldmVyIGluY3JlYXNlcyB0aGUgY2FsY3VsYXRlZCB2YWx1ZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEZMT09SID0gNDsKCiAgICAvKioKICAgICAqIFJvdW5kcyB0b3dhcmRzICJuZWFyZXN0IG5laWdoYm9yIiB1bmxlc3MgYm90aCBuZWlnaGJvcnMgYXJlIGVxdWlkaXN0YW50LCBpbiB3aGljaCBjYXNlIHJvdW5kIHVwLgogICAgICoKICAgICAqIEJlaGF2ZXMgYXMgZm9yIFVQIGlmIHRoZSBkaXNjYXJkZWQgZnJhY3Rpb24gaXMgPj0gMC41OyBvdGhlcndpc2UsIGJlaGF2ZXMgYXMgZm9yIERPV04uCiAgICAgKiBOb3RlIHRoYXQgdGhpcyBpcyB0aGUgcm91bmRpbmcgbW9kZSBjb21tb25seSB0YXVnaHQgYXQgc2Nob29sLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgSEFMRl9VUCA9IDU7CgogICAgLyoqCiAgICAgKiBSb3VuZHMgdG93YXJkcyAibmVhcmVzdCBuZWlnaGJvciIgdW5sZXNzIGJvdGggbmVpZ2hib3JzIGFyZSBlcXVpZGlzdGFudCwgaW4gd2hpY2ggY2FzZSByb3VuZCBkb3duLgogICAgICoKICAgICAqIEJlaGF2ZXMgYXMgZm9yIFVQIGlmIHRoZSBkaXNjYXJkZWQgZnJhY3Rpb24gaXMgPiAwLjU7IG90aGVyd2lzZSwgYmVoYXZlcyBhcyBmb3IgRE9XTi4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEhBTEZfRE9XTiA9IDY7CgogICAgLyoqCiAgICAgKiBSb3VuZHMgdG93YXJkcyAibmVhcmVzdCBuZWlnaGJvciIgdW5sZXNzIGJvdGggbmVpZ2hib3JzIGFyZSBlcXVpZGlzdGFudCwgaW4gd2hpY2ggY2FzZSByb3VuZCB0b3dhcmRzIHBvc2l0aXZlIGluZmluaXR5LgogICAgICoKICAgICAqIElmIHRoZSByZXN1bHQgaXMgcG9zaXRpdmUsIGJlaGF2ZXMgYXMgZm9yIEhBTEZfVVA7IGlmIG5lZ2F0aXZlLCBiZWhhdmVzIGFzIGZvciBIQUxGX0RPV04uCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBIQUxGX0NFSUxJTkcgPSA3OwoKICAgIC8qKgogICAgICogUm91bmRzIHRvd2FyZHMgIm5lYXJlc3QgbmVpZ2hib3IiIHVubGVzcyBib3RoIG5laWdoYm9ycyBhcmUgZXF1aWRpc3RhbnQsIGluIHdoaWNoIGNhc2Ugcm91bmQgdG93YXJkcyBuZWdhdGl2ZSBpbmZpbml0eS4KICAgICAqCiAgICAgKiBJZiB0aGUgcmVzdWx0IGlzIHBvc2l0aXZlLCBiZWhhdmVzIGFzIGZvciBIQUxGX0RPV047IGlmIG5lZ2F0aXZlLCBiZWhhdmVzIGFzIGZvciBIQUxGX1VQLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgSEFMRl9GTE9PUiA9IDg7CgogICAgLyoqCiAgICAgKiBSb3VuZHMgdG93YXJkcyB0aGUgIm5lYXJlc3QgbmVpZ2hib3IiIHVubGVzcyBib3RoIG5laWdoYm9ycyBhcmUgZXF1aWRpc3RhbnQsIGluIHdoaWNoIGNhc2Ugcm91bmRzIHRvd2FyZHMgdGhlIGV2ZW4gbmVpZ2hib3IuCiAgICAgKgogICAgICogQmVoYXZlcyBhcyBmb3IgSEFMRl9VUCBpZiB0aGUgZGlnaXQgdG8gdGhlIGxlZnQgb2YgdGhlIGRpc2NhcmRlZCBmcmFjdGlvbiBpcyBvZGQ7CiAgICAgKiBiZWhhdmVzIGFzIGZvciBIQUxGX0RPV04gaWYgaXQncyBldmVuLgogICAgICoKICAgICAqIE5vdGUgdGhhdCB0aGlzIGlzIHRoZSByb3VuZGluZyBtb2RlIHRoYXQgc3RhdGlzdGljYWxseSBtaW5pbWl6ZXMKICAgICAqIGN1bXVsYXRpdmUgZXJyb3Igd2hlbiBhcHBsaWVkIHJlcGVhdGVkbHkgb3ZlciBhIHNlcXVlbmNlIG9mIGNhbGN1bGF0aW9ucy4KICAgICAqIEl0IGlzIHNvbWV0aW1lcyBrbm93biBhcyAiQmFua2VyJ3Mgcm91bmRpbmciLCBhbmQgaXMgY2hpZWZseSB1c2VkIGluIHRoZSBVU0EuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBIQUxGX0VWRU4gPSA5Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/composer/autoload_classmap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIGF1dG9sb2FkX2NsYXNzbWFwLnBocCBAZ2VuZXJhdGVkIGJ5IENvbXBvc2VyCgokdmVuZG9yRGlyID0gZGlybmFtZShfX0RJUl9fKTsKJGJhc2VEaXIgPSBkaXJuYW1lKCR2ZW5kb3JEaXIpOwoKcmV0dXJuIGFycmF5KAogICAgJ0F0dHJpYnV0ZScgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MC9SZXNvdXJjZXMvc3R1YnMvQXR0cmlidXRlLnBocCcsCiAgICAnQ1VSTFN0cmluZ0ZpbGUnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvcG9seWZpbGwtcGhwODEvUmVzb3VyY2VzL3N0dWJzL0NVUkxTdHJpbmdGaWxlLnBocCcsCiAgICAnQ29tcG9zZXJcXEluc3RhbGxlZFZlcnNpb25zJyA9PiAkdmVuZG9yRGlyIC4gJy9jb21wb3Nlci9JbnN0YWxsZWRWZXJzaW9ucy5waHAnLAogICAgJ1BocFRva2VuJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgwL1Jlc291cmNlcy9zdHVicy9QaHBUb2tlbi5waHAnLAogICAgJ1JldHVyblR5cGVXaWxsQ2hhbmdlJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgxL1Jlc291cmNlcy9zdHVicy9SZXR1cm5UeXBlV2lsbENoYW5nZS5waHAnLAogICAgJ1N0cmluZ2FibGUnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvcG9seWZpbGwtcGhwODAvUmVzb3VyY2VzL3N0dWJzL1N0cmluZ2FibGUucGhwJywKICAgICdVbmhhbmRsZWRNYXRjaEVycm9yJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgwL1Jlc291cmNlcy9zdHVicy9VbmhhbmRsZWRNYXRjaEVycm9yLnBocCcsCiAgICAnVmFsdWVFcnJvcicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MC9SZXNvdXJjZXMvc3R1YnMvVmFsdWVFcnJvci5waHAnLAopOwo=]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/autoload_files.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIGF1dG9sb2FkX2ZpbGVzLnBocCBAZ2VuZXJhdGVkIGJ5IENvbXBvc2VyCgokdmVuZG9yRGlyID0gZGlybmFtZShfX0RJUl9fKTsKJGJhc2VEaXIgPSBkaXJuYW1lKCR2ZW5kb3JEaXIpOwoKcmV0dXJuIGFycmF5KAogICAgJ2E0ZWNhZWFmYjhjZmIwMDlhZDBlMDUyYzkwMzU1ZTk4JyA9PiAkdmVuZG9yRGlyIC4gJy9iZWJlcmxlaS9hc3NlcnQvbGliL0Fzc2VydC9mdW5jdGlvbnMucGhwJywKICAgICdhNGExMTlhNTZlNTBmYmIyOTMyODFkOWE0ODAwN2UwZScgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MC9ib290c3RyYXAucGhwJywKICAgICc3YjExYzRkYzQyYjNiMzAyMzA3M2NiMTRlNTE5NjgzYycgPT4gJHZlbmRvckRpciAuICcvcmFsb3VwaGllL2dldGFsbGhlYWRlcnMvc3JjL2dldGFsbGhlYWRlcnMucGhwJywKICAgICcyM2MxODA0NmY1MmJlZjNlZWEwMzQ2NTdiYWZkYTUwZicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MS9ib290c3RyYXAucGhwJywKICAgICc2ZTNmYWUyOTYzMWVmMjgwNjYwYjNjZGFkMDZmMjVhOCcgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9kZXByZWNhdGlvbi1jb250cmFjdHMvZnVuY3Rpb24ucGhwJywKICAgICczMjBjZGUyMmY2NmRkNGY1ZDNmZDYyMWQzZTg4Yjk4ZicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1jdHlwZS9ib290c3RyYXAucGhwJywKICAgICczN2EzZGM1MTExZmU4ZjcwN2FiNGMxMzJlZjFkYmM2MicgPT4gJHZlbmRvckRpciAuICcvZ3V6emxlaHR0cC9ndXp6bGUvc3JjL2Z1bmN0aW9uc19pbmNsdWRlLnBocCcsCiAgICAnZTM5YThiMjNjNDJkNGUxNDUyMjM0ZDc2MmIwMzgzNWEnID0+ICR2ZW5kb3JEaXIgLiAnL3JhbXNleS91dWlkL3NyYy9mdW5jdGlvbnMucGhwJywKICAgICc1MWZjZjRlMDZjMDdjYzAwYzkyMGI0NGJjZDkwMGU3YScgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2RlcHJlY2F0ZWQvYXBjLnBocCcsCiAgICAnNDdmNjE5ZDkxOTdiMzZjZjVhYjcwNzM4ZDc3NDNmZTInID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9kZXByZWNhdGVkL2xpYmV2ZW50LnBocCcsCiAgICAnZWE2YmI4YTEyZWY5YjY4ZjZhZGE5OTA1OGU1MzA3NjAnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9kZXByZWNhdGVkL21zc3FsLnBocCcsCiAgICAnOWEyOTA4OWViM2NlNDFhNDQ2NzQ0YzY4YTAwZjExOGMnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9kZXByZWNhdGVkL3N0YXRzLnBocCcsCiAgICAnNzIyNDNlNTUzNmI2M2UyOThhY2I2NDc2ZjAxZjFhZmYnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9saWIvc3BlY2lhbF9jYXNlcy5waHAnLAogICAgJzNmNjQ4ODg5ZTY4N2YzMWM1MmY5NDliYThhOWQwODczJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2FwYWNoZS5waHAnLAogICAgJ2VlYjQ1ODFkOTU4NDIxYTQyNDRhYWE0MTY3YzZhNTc1JyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2FwY3UucGhwJywKICAgICcwNGNiMGIzYzFkYWM1YjVkZGIyM2MxNGUzZDY2ZGJlOScgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9hcnJheS5waHAnLAogICAgJzQ1MGIzMzJhNzRhOWEyMWUwNDNjNWU5NTM0ODVhNzkxJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2J6aXAyLnBocCcsCiAgICAnNmU5Yjc5NTRlY2ZkN2NiYjljYTIzOTMxOWQxYWNkYjYnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvY2FsZW5kYXIucGhwJywKICAgICcyYzZkN2U4YmQyZGU5YTI3MmE5ZDRkNDNiMGE0MzA0YScgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9jbGFzc29iai5waHAnLAogICAgJzBiODIzMWMxYWQwODY1NDQ3Yzk4OGE0YzE2YjQwMDFmJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2NvbS5waHAnLAogICAgJzc2NDNhNzFmZTFjMzI1NjA1OGM4ZmVlMjM0Y2I4NmU1JyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2N1YnJpZC5waHAnLAogICAgJzY4ZTEzNjU3MTA1NzU5NDJlZmMxZDU1MDAwMDMyY2VlJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2N1cmwucGhwJywKICAgICcwMmZkMjZiY2E4MDMxMDZjNWI5NDJhNzE5N2MzYWQ4YicgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9kYXRldGltZS5waHAnLAogICAgJ2Y0ODE3ZGNiZDk1NmNkMjIxYjFjMzFmNmZiZDU3NDljJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2Rpci5waHAnLAogICAgJzUxYzNmMmQxMGNhNjFhNzBkYmNlYTBlMzhkOGU5MDJkJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2Vpby5waHAnLAogICAgJzFkMzRmMzQzMjdjYTNlODE1MzU5NjMwMTZlM2JlMmMzJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2Vycm9yZnVuYy5waHAnLAogICAgJzRmZDBiYTJkMzcxN2IwNDI0ZDQ3NGJlYmZkYWZhMmI0JyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2V4ZWMucGhwJywKICAgICc5OGY0ZGFlMDU0YmM3ZmIxOWMxM2JlMTQ5MzVjYmRkMycgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9maWxlaW5mby5waHAnLAogICAgJzU1MzBhZTA2M2JhODgzMjNlYWYwYTA3OTA0ZWZkZjg1JyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2ZpbGVzeXN0ZW0ucGhwJywKICAgICc2MzNmNGYxMzQ5NzVkNzBlOTdiZGRhZDgzMzQ4ZTkxYScgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9maWx0ZXIucGhwJywKICAgICdmYmQxNjNmYzY4YzVmYWY3M2Q1ZWQ0MDAyZmZkODM2ZCcgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9mcG0ucGhwJywKICAgICcyMWI1MTE5OTlkNjE0MTFmYWIwNjkyZmY4Nzk1YmJlZCcgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9mdHAucGhwJywKICAgICc4NWZiZDczZmM5MjM2NWNkOTA1MjZiMGVhMDNjYWUzYScgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9mdW5jaGFuZC5waHAnLAogICAgJzUxZGY5YzE0NmUwYjdkY2JkZjM1OGQ4YWJkMjRkYmRjJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2dtcC5waHAnLAogICAgJzkzYmI3ZmU2NzhkN2RjZmIxMzIyZjhlMzQ3NWE0OGIwJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2dudXBnLnBocCcsCiAgICAnYzE3MWJhOTljZjMxNjM3OWZmNjY0NjgzOTJiZjQ5NTAnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvaGFzaC5waHAnLAogICAgJzVhYjRhYWQ0YzI4ZTQ2ODIwOWZiZmNjZWIyZTVlNmE1JyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2liYXNlLnBocCcsCiAgICAnNGQ1NzQwOWM1ZThlNTc2YjBjNjRjMDhkOWQ3MzFjZmInID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvaWJtRGIyLnBocCcsCiAgICAnZWViMjQ2ZDU0MDM5NzJhOWQ2MjEwNmU0YTQ4ODM0OTYnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvaWNvbnYucGhwJywKICAgICdjMjhhMDVmNDk4YzAxYjgxMGE3MTRmNzIxNGI3YThkYScgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9pbWFnZS5waHAnLAogICAgJzgwNjNjZDkyYWNkZjAwZmQ5NzhiNTU5OWViN2NjMTQyJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2ltYXAucGhwJywKICAgICc4YmQyNmRiZTc2OGU5Yzk1OTllZGFkN2IxOThlNTQ0NicgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9pbmZvLnBocCcsCiAgICAnMGM1NzdmZTYwM2IwMjlkNGI2NWM4NDM3NmIxNWRiZDUnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvaW5ncmVzLWlpLnBocCcsCiAgICAnZDQzNjI5MTBiZGU0M2MwZjk1NmI1MjUyN2VmZmQ3ZDQnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvaW5vdGlmeS5waHAnLAogICAgJzY5NmJhNDkxOTdkOWI1NWYwNDI4YTEyYmI1YTgxOGUxJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2pzb24ucGhwJywKICAgICc5ODE4YWFhOTljODY0N2M2M2Y4ZWY2MmI3YTM2ODE2MCcgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9sZGFwLnBocCcsCiAgICAnYmNmNTIzZmYyYTE5NWViMDhlMGZiYjY2OGVkNzg0ZDAnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvbGlieG1sLnBocCcsCiAgICAnNjhiZTY4YTlhOGI5NWJiNTZjYWI2MTA5ZmYwM2JjODgnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvbHpmLnBocCcsCiAgICAnYmRjYTgwNGJiMDkwNGVhOWY1M2YzMjhkZmMwYmI4YTUnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvbWFpbHBhcnNlLnBocCcsCiAgICAnYjBhM2ZjYWMzZWFmNTU0NDU3OTZkNmFmMjZiODkzNjYnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvbWJzdHJpbmcucGhwJywKICAgICc5OGRlMTZiOGRiMDNlYjBjYjRkMzE4YjQ0MDIyMTVhNicgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9taXNjLnBocCcsCiAgICAnYzExMjQ0MDAwM2I1NmUyNDNiMTkyYzExZmE5ZDgzNmUnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvbXNxbC5waHAnLAogICAgJzdjZWZkODE2MDdjZDIxYjhiM2ExNTY1NmViNjQ2NWY1JyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL215c3FsLnBocCcsCiAgICAnYWFmNDM4YjA4MDA4OWM2ZDA2ODY2NzljZDM0YWE3MmUnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvbXlzcWxpLnBocCcsCiAgICAnZGYwZWY4OTBlOWFmYmY5NWYzOTI0ZmViMWM3YTg5ZjMnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvbXlzcWxuZE1zLnBocCcsCiAgICAnZGI1OTVmZWU1OTcyODY3ZTQ1YzUzMjcwMTBkNzg3MzUnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvbXlzcWxuZFFjLnBocCcsCiAgICAnY2JhYzk1NjgzNmI3MjQ4M2RjZmYxYWMzOWQ1YzBhMGYnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvbmV0d29yay5waHAnLAogICAgJzZjOGY4OWRmYmRjMTE3ZDc4NzFmNTcyMjY5MzYzZjI1JyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL29jaTgucGhwJywKICAgICcxNjlhNjY5OTY2YTQ1YzA2YmY1NWVkMDI5MTIyNzI5YicgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9vcGNhY2hlLnBocCcsCiAgICAnZGVmNjFiZjRmZWNkNGQ0YmNhNzM1NDkxOWNkNjkzMDInID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvb3BlbnNzbC5waHAnLAogICAgJzI2YmIwMTA2NDlhNmQzMmQ0MTIwMTgxNDU4YWE2ZWYyJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL291dGNvbnRyb2wucGhwJywKICAgICcxMjEyYzIwMWZlNDNjNzQ5MmEwODViMmM3MTUwNWUwZicgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9wYXNzd29yZC5waHAnLAogICAgJzAwMmViY2I4NDJlMmMwZDViN2Y2N2ZlNjRjYzkzMTU4JyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3BjbnRsLnBocCcsCiAgICAnODZkZjM4NjEyOTgyZGFkZTcyYzcwODVjZTdlY2E4MWYnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvcGNyZS5waHAnLAogICAgJzFjYWNjM2U2NWY4MmE0NzNmYmQ1NTA3YzdjZTQzODVkJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3BkZi5waHAnLAogICAgJzFmYzIyZjQ0NWM2OWVhODcwNmU4MmZjZTMwMWMwODMxJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3Bnc3FsLnBocCcsCiAgICAnYzcwYjQyNTYxNTg0ZjcxNDRiZmYzOGNkNjNjNGVlZjMnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvcG9zaXgucGhwJywKICAgICc5OTIzMjE0NjM5YzMyY2E1MTczZGIwM2ExNzdkM2I2MycgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9wcy5waHAnLAogICAgJzdlOWMzZjhlYWUyYjViZjQyMjA1YzRmMTI5NWNiN2E3JyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3BzcGVsbC5waHAnLAogICAgJzkxYWE5MWY2MjQ1YzM0OWMyZTJlODhiZDAwMjVmMTk5JyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3JlYWRsaW5lLnBocCcsCiAgICAnZDQzNzczY2FjYjllNWU4ZTg5N2FhMjU1ZTMyMDA3ZDEnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvcnBtaW5mby5waHAnLAogICAgJ2YwNTNhMzg0OWU5ZTgzODM3NjJiMzRiOTFkYjAzMjBiJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3JyZC5waHAnLAogICAgJzc3NWI5NjRmNzJmODI3YTFiZjg3YzY1YWI1YjEwODAwJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3NlbS5waHAnLAogICAgJzgxNjQyOGJkNjljMjlhYjVlMWVkNjIyYWY1ZGNhMGNkJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3Nlc3Npb24ucGhwJywKICAgICc1MDkzZTIzM2JlZGJlZmFlZjBkZjI2MmJmYmFiMGE1YycgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9zaG1vcC5waHAnLAogICAgJzAxMzUyOTIwYjAxNTFmMTdlNjcxMjY2ZTQ0YjUyNTM2JyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3NpbXBsZXhtbC5waHAnLAogICAgJ2IwODA2MTdiMWQ5NDk2ODNjMmUzN2Y4ZjAxZGMwZTE1JyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3NvY2tldHMucGhwJywKICAgICcyNzA4YWExODJkZGNmZTZjZTI3Yzk2YWNhYWE0MGY2OScgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9zb2RpdW0ucGhwJywKICAgICdmMWI5NmNiMjYwYTViYWVlYTlhNzI4NWNkYTgyYTFlYycgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9zb2xyLnBocCcsCiAgICAnM2ZkODg1Mzc1N2QwZmUzNTU3YzE3OWVmYjgwN2FmZWInID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvc3BsLnBocCcsCiAgICAnOTMxMmNlOTZhNTFjODQ2OTEzZmNkYTVmMTg2ZDU4ZGQnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvc3Fsc3J2LnBocCcsCiAgICAnZDNlYjM4M2FkMGI4Yjk2MmIyOWRjNGFmZDI5ZDY3MTUnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvc3NkZWVwLnBocCcsCiAgICAnNDJhMDliYzQ0OGY0NDFhMGI5ZjkzNjdlYTk3NWMwYmYnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvc3NoMi5waHAnLAogICAgJ2VmNzExMDc3ZDM1NmQxYjMzY2EwYjEwYjY3YjBiZThmJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3N0cmVhbS5waHAnLAogICAgJzc2NGIwOWY2ZGYwODFjYmIyODA3Yjk3YzZhY2UzODY2JyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3N0cmluZ3MucGhwJywKICAgICdlZjI0MTY3ODc2OWZlZTRhNDRhYWEyODhmM2I3OGFhMScgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9zd29vbGUucGhwJywKICAgICcwZWZjOGY2Nzc4Y2JhOTMyYjllMmE4OWUyOGRlMjQ1MicgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC91b2RiYy5waHAnLAogICAgJ2QzODNkMzI5MDdiOThhZjUzZWU5MjA4YzYyMjA0ZmQwJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3VvcHoucGhwJywKICAgICcyZmQyZTQwNjBmN2ZlNzcyNjYwZjAwMmNlMzhmMGI3MScgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC91cmwucGhwJywKICAgICc3ODIyNDllMDNkZWViZWFmNTdiOTk5MWZmNTQ5M2FhMCcgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC92YXIucGhwJywKICAgICczNDQ0NDBjZDFjZDcyMDBmZGI0ZjEyYWYwZDNjNTg3ZicgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC94ZGlmZi5waHAnLAogICAgJzM1OTlmMzY5MjE5YzY1OGE1ZmI2YzRmZTY2ODMyZjYyJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3htbC5waHAnLAogICAgJzdmY2QzMTNkYTlmYWUzMzcwNTFiMDkxYjM0OTJjMjFiJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3htbHJwYy5waHAnLAogICAgJ2Q2NjhjNzRjZmE5MmQ4OTNiNTgyMzU2NzMzZDlhODBlJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3lhbWwucGhwJywKICAgICc0YWYxZGNhNmRiOGM1MjdjNmVlZDI3YmZmODVmZjBlNScgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC95YXoucGhwJywKICAgICdmZTQzY2EwNjQ5OWFjMzdiYzJkZWRkODIzYWY3MWViNScgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC96aXAucGhwJywKICAgICczNTY3MzZkYjk4YTY4MzRmMGE4ODZiOGQ1MDliMGVjZCcgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC96bGliLnBocCcsCik7Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/autoload_namespaces.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIGF1dG9sb2FkX25hbWVzcGFjZXMucGhwIEBnZW5lcmF0ZWQgYnkgQ29tcG9zZXIKCiR2ZW5kb3JEaXIgPSBkaXJuYW1lKF9fRElSX18pOwokYmFzZURpciA9IGRpcm5hbWUoJHZlbmRvckRpcik7CgpyZXR1cm4gYXJyYXkoCik7Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/autoload_psr4.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIGF1dG9sb2FkX3BzcjQucGhwIEBnZW5lcmF0ZWQgYnkgQ29tcG9zZXIKCiR2ZW5kb3JEaXIgPSBkaXJuYW1lKF9fRElSX18pOwokYmFzZURpciA9IGRpcm5hbWUoJHZlbmRvckRpcik7CgpyZXR1cm4gYXJyYXkoCiAgICAnV2ViYXV0aG5cXE1ldGFkYXRhU2VydmljZVxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy93ZWItYXV0aC9tZXRhZGF0YS1zZXJ2aWNlL3NyYycpLAogICAgJ1dlYmF1dGhuXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL3dlYi1hdXRoL3dlYmF1dGhuLWxpYi9zcmMnKSwKICAgICdTeW1mb255XFxQb2x5ZmlsbFxcUGhwODFcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MScpLAogICAgJ1N5bWZvbnlcXFBvbHlmaWxsXFxQaHA4MFxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgwJyksCiAgICAnU3ltZm9ueVxcUG9seWZpbGxcXEN0eXBlXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvcG9seWZpbGwtY3R5cGUnKSwKICAgICdTeW1mb255XFxDb21wb25lbnRcXFByb2Nlc3NcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvc3ltZm9ueS9wcm9jZXNzJyksCiAgICAnU2FmZVxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvbGliJywgJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2RlcHJlY2F0ZWQnLCAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkJyksCiAgICAnUm9iUmljaGFyZHNcXFhNTFNlY0xpYnNcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvcm9icmljaGFyZHMveG1sc2VjbGlicy9zcmMnKSwKICAgICdSYW1zZXlcXFV1aWRcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvcmFtc2V5L3V1aWQvc3JjJyksCiAgICAnUmFtc2V5XFxDb2xsZWN0aW9uXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL3JhbXNleS9jb2xsZWN0aW9uL3NyYycpLAogICAgJ1BzclxcTG9nXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL3Bzci9sb2cvUHNyL0xvZycpLAogICAgJ1BzclxcSHR0cFxcTWVzc2FnZVxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9wc3IvaHR0cC1mYWN0b3J5L3NyYycsICR2ZW5kb3JEaXIgLiAnL3Bzci9odHRwLW1lc3NhZ2Uvc3JjJyksCiAgICAnUHNyXFxIdHRwXFxDbGllbnRcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvcHNyL2h0dHAtY2xpZW50L3NyYycpLAogICAgJ09uZUxvZ2luXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL29uZWxvZ2luL3BocC1zYW1sL3NyYycpLAogICAgJ0xlYWd1ZVxcVXJpXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL2xlYWd1ZS91cmkvc3JjJywgJHZlbmRvckRpciAuICcvbGVhZ3VlL3VyaS1pbnRlcmZhY2VzL3NyYycpLAogICAgJ0xlYWd1ZVxcT0F1dGgyXFxDbGllbnRcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvbGVhZ3VlL29hdXRoMi1jbGllbnQvc3JjJyksCiAgICAnR3V6emxlSHR0cFxcUHNyN1xcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9ndXp6bGVodHRwL3Bzcjcvc3JjJyksCiAgICAnR3V6emxlSHR0cFxcUHJvbWlzZVxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9ndXp6bGVodHRwL3Byb21pc2VzL3NyYycpLAogICAgJ0d1enpsZUh0dHBcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvZ3V6emxlaHR0cC9ndXp6bGUvc3JjJyksCiAgICAnRmlyZWJhc2VcXEpXVFxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9maXJlYmFzZS9waHAtand0L3NyYycpLAogICAgJ0ZHXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL2Zncm9zc2UvcGhwYXNuMS9saWInKSwKICAgICdDb3NlXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL3dlYi1hdXRoL2Nvc2UtbGliL3NyYycpLAogICAgJ0NCT1JcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvc3BvbWt5LWxhYnMvY2Jvci1waHAvc3JjJyksCiAgICAnQnJpY2tcXE1hdGhcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvYnJpY2svbWF0aC9zcmMnKSwKICAgICdCYXNlNjRVcmxcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvc3BvbWt5LWxhYnMvYmFzZTY0dXJsL3NyYycpLAogICAgJ0Fzc2VydFxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9iZWJlcmxlaS9hc3NlcnQvbGliL0Fzc2VydCcpLAopOwo=]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/autoload_real.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIGF1dG9sb2FkX3JlYWwucGhwIEBnZW5lcmF0ZWQgYnkgQ29tcG9zZXIKCmNsYXNzIENvbXBvc2VyQXV0b2xvYWRlckluaXRmMjYzNDhkYjFlNjI2NTAwNDQ2MWZjMTk1NzQ1MGNkYwp7CiAgICBwcml2YXRlIHN0YXRpYyAkbG9hZGVyOwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZENsYXNzTG9hZGVyKCRjbGFzcykKICAgIHsKICAgICAgICBpZiAoJ0NvbXBvc2VyXEF1dG9sb2FkXENsYXNzTG9hZGVyJyA9PT0gJGNsYXNzKSB7CiAgICAgICAgICAgIHJlcXVpcmUgX19ESVJfXyAuICcvQ2xhc3NMb2FkZXIucGhwJzsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIFxDb21wb3NlclxBdXRvbG9hZFxDbGFzc0xvYWRlcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldExvYWRlcigpCiAgICB7CiAgICAgICAgaWYgKG51bGwgIT09IHNlbGY6OiRsb2FkZXIpIHsKICAgICAgICAgICAgcmV0dXJuIHNlbGY6OiRsb2FkZXI7CiAgICAgICAgfQoKICAgICAgICByZXF1aXJlIF9fRElSX18gLiAnL3BsYXRmb3JtX2NoZWNrLnBocCc7CgogICAgICAgIHNwbF9hdXRvbG9hZF9yZWdpc3RlcihhcnJheSgnQ29tcG9zZXJBdXRvbG9hZGVySW5pdGYyNjM0OGRiMWU2MjY1MDA0NDYxZmMxOTU3NDUwY2RjJywgJ2xvYWRDbGFzc0xvYWRlcicpLCB0cnVlLCB0cnVlKTsKICAgICAgICBzZWxmOjokbG9hZGVyID0gJGxvYWRlciA9IG5ldyBcQ29tcG9zZXJcQXV0b2xvYWRcQ2xhc3NMb2FkZXIoXGRpcm5hbWUoX19ESVJfXykpOwogICAgICAgIHNwbF9hdXRvbG9hZF91bnJlZ2lzdGVyKGFycmF5KCdDb21wb3NlckF1dG9sb2FkZXJJbml0ZjI2MzQ4ZGIxZTYyNjUwMDQ0NjFmYzE5NTc0NTBjZGMnLCAnbG9hZENsYXNzTG9hZGVyJykpOwoKICAgICAgICByZXF1aXJlIF9fRElSX18gLiAnL2F1dG9sb2FkX3N0YXRpYy5waHAnOwogICAgICAgIGNhbGxfdXNlcl9mdW5jKFxDb21wb3NlclxBdXRvbG9hZFxDb21wb3NlclN0YXRpY0luaXRmMjYzNDhkYjFlNjI2NTAwNDQ2MWZjMTk1NzQ1MGNkYzo6Z2V0SW5pdGlhbGl6ZXIoJGxvYWRlcikpOwoKICAgICAgICAkbG9hZGVyLT5yZWdpc3Rlcih0cnVlKTsKCiAgICAgICAgJGZpbGVzVG9Mb2FkID0gXENvbXBvc2VyXEF1dG9sb2FkXENvbXBvc2VyU3RhdGljSW5pdGYyNjM0OGRiMWU2MjY1MDA0NDYxZmMxOTU3NDUwY2RjOjokZmlsZXM7CiAgICAgICAgJHJlcXVpcmVGaWxlID0gXENsb3N1cmU6OmJpbmQoc3RhdGljIGZ1bmN0aW9uICgkZmlsZUlkZW50aWZpZXIsICRmaWxlKSB7CiAgICAgICAgICAgIGlmIChlbXB0eSgkR0xPQkFMU1snX19jb21wb3Nlcl9hdXRvbG9hZF9maWxlcyddWyRmaWxlSWRlbnRpZmllcl0pKSB7CiAgICAgICAgICAgICAgICAkR0xPQkFMU1snX19jb21wb3Nlcl9hdXRvbG9hZF9maWxlcyddWyRmaWxlSWRlbnRpZmllcl0gPSB0cnVlOwoKICAgICAgICAgICAgICAgIHJlcXVpcmUgJGZpbGU7CiAgICAgICAgICAgIH0KICAgICAgICB9LCBudWxsLCBudWxsKTsKICAgICAgICBmb3JlYWNoICgkZmlsZXNUb0xvYWQgYXMgJGZpbGVJZGVudGlmaWVyID0+ICRmaWxlKSB7CiAgICAgICAgICAgICRyZXF1aXJlRmlsZSgkZmlsZUlkZW50aWZpZXIsICRmaWxlKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbG9hZGVyOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/autoload_static.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIGF1dG9sb2FkX3N0YXRpYy5waHAgQGdlbmVyYXRlZCBieSBDb21wb3NlcgoKbmFtZXNwYWNlIENvbXBvc2VyXEF1dG9sb2FkOwoKY2xhc3MgQ29tcG9zZXJTdGF0aWNJbml0ZjI2MzQ4ZGIxZTYyNjUwMDQ0NjFmYzE5NTc0NTBjZGMKewogICAgcHVibGljIHN0YXRpYyAkZmlsZXMgPSBhcnJheSAoCiAgICAgICAgJ2E0ZWNhZWFmYjhjZmIwMDlhZDBlMDUyYzkwMzU1ZTk4JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2JlYmVybGVpL2Fzc2VydC9saWIvQXNzZXJ0L2Z1bmN0aW9ucy5waHAnLAogICAgICAgICdhNGExMTlhNTZlNTBmYmIyOTMyODFkOWE0ODAwN2UwZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgwL2Jvb3RzdHJhcC5waHAnLAogICAgICAgICc3YjExYzRkYzQyYjNiMzAyMzA3M2NiMTRlNTE5NjgzYycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yYWxvdXBoaWUvZ2V0YWxsaGVhZGVycy9zcmMvZ2V0YWxsaGVhZGVycy5waHAnLAogICAgICAgICcyM2MxODA0NmY1MmJlZjNlZWEwMzQ2NTdiYWZkYTUwZicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgxL2Jvb3RzdHJhcC5waHAnLAogICAgICAgICc2ZTNmYWUyOTYzMWVmMjgwNjYwYjNjZGFkMDZmMjVhOCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2RlcHJlY2F0aW9uLWNvbnRyYWN0cy9mdW5jdGlvbi5waHAnLAogICAgICAgICczMjBjZGUyMmY2NmRkNGY1ZDNmZDYyMWQzZTg4Yjk4ZicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3BvbHlmaWxsLWN0eXBlL2Jvb3RzdHJhcC5waHAnLAogICAgICAgICczN2EzZGM1MTExZmU4ZjcwN2FiNGMxMzJlZjFkYmM2MicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ndXp6bGVodHRwL2d1enpsZS9zcmMvZnVuY3Rpb25zX2luY2x1ZGUucGhwJywKICAgICAgICAnZTM5YThiMjNjNDJkNGUxNDUyMjM0ZDc2MmIwMzgzNWEnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmFtc2V5L3V1aWQvc3JjL2Z1bmN0aW9ucy5waHAnLAogICAgICAgICc1MWZjZjRlMDZjMDdjYzAwYzkyMGI0NGJjZDkwMGU3YScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZGVwcmVjYXRlZC9hcGMucGhwJywKICAgICAgICAnNDdmNjE5ZDkxOTdiMzZjZjVhYjcwNzM4ZDc3NDNmZTInID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2RlcHJlY2F0ZWQvbGliZXZlbnQucGhwJywKICAgICAgICAnZWE2YmI4YTEyZWY5YjY4ZjZhZGE5OTA1OGU1MzA3NjAnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2RlcHJlY2F0ZWQvbXNzcWwucGhwJywKICAgICAgICAnOWEyOTA4OWViM2NlNDFhNDQ2NzQ0YzY4YTAwZjExOGMnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2RlcHJlY2F0ZWQvc3RhdHMucGhwJywKICAgICAgICAnNzIyNDNlNTUzNmI2M2UyOThhY2I2NDc2ZjAxZjFhZmYnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2xpYi9zcGVjaWFsX2Nhc2VzLnBocCcsCiAgICAgICAgJzNmNjQ4ODg5ZTY4N2YzMWM1MmY5NDliYThhOWQwODczJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvYXBhY2hlLnBocCcsCiAgICAgICAgJ2VlYjQ1ODFkOTU4NDIxYTQyNDRhYWE0MTY3YzZhNTc1JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvYXBjdS5waHAnLAogICAgICAgICcwNGNiMGIzYzFkYWM1YjVkZGIyM2MxNGUzZDY2ZGJlOScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2FycmF5LnBocCcsCiAgICAgICAgJzQ1MGIzMzJhNzRhOWEyMWUwNDNjNWU5NTM0ODVhNzkxJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvYnppcDIucGhwJywKICAgICAgICAnNmU5Yjc5NTRlY2ZkN2NiYjljYTIzOTMxOWQxYWNkYjYnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9jYWxlbmRhci5waHAnLAogICAgICAgICcyYzZkN2U4YmQyZGU5YTI3MmE5ZDRkNDNiMGE0MzA0YScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2NsYXNzb2JqLnBocCcsCiAgICAgICAgJzBiODIzMWMxYWQwODY1NDQ3Yzk4OGE0YzE2YjQwMDFmJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvY29tLnBocCcsCiAgICAgICAgJzc2NDNhNzFmZTFjMzI1NjA1OGM4ZmVlMjM0Y2I4NmU1JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvY3VicmlkLnBocCcsCiAgICAgICAgJzY4ZTEzNjU3MTA1NzU5NDJlZmMxZDU1MDAwMDMyY2VlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvY3VybC5waHAnLAogICAgICAgICcwMmZkMjZiY2E4MDMxMDZjNWI5NDJhNzE5N2MzYWQ4YicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2RhdGV0aW1lLnBocCcsCiAgICAgICAgJ2Y0ODE3ZGNiZDk1NmNkMjIxYjFjMzFmNmZiZDU3NDljJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvZGlyLnBocCcsCiAgICAgICAgJzUxYzNmMmQxMGNhNjFhNzBkYmNlYTBlMzhkOGU5MDJkJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvZWlvLnBocCcsCiAgICAgICAgJzFkMzRmMzQzMjdjYTNlODE1MzU5NjMwMTZlM2JlMmMzJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvZXJyb3JmdW5jLnBocCcsCiAgICAgICAgJzRmZDBiYTJkMzcxN2IwNDI0ZDQ3NGJlYmZkYWZhMmI0JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvZXhlYy5waHAnLAogICAgICAgICc5OGY0ZGFlMDU0YmM3ZmIxOWMxM2JlMTQ5MzVjYmRkMycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2ZpbGVpbmZvLnBocCcsCiAgICAgICAgJzU1MzBhZTA2M2JhODgzMjNlYWYwYTA3OTA0ZWZkZjg1JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvZmlsZXN5c3RlbS5waHAnLAogICAgICAgICc2MzNmNGYxMzQ5NzVkNzBlOTdiZGRhZDgzMzQ4ZTkxYScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2ZpbHRlci5waHAnLAogICAgICAgICdmYmQxNjNmYzY4YzVmYWY3M2Q1ZWQ0MDAyZmZkODM2ZCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2ZwbS5waHAnLAogICAgICAgICcyMWI1MTE5OTlkNjE0MTFmYWIwNjkyZmY4Nzk1YmJlZCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2Z0cC5waHAnLAogICAgICAgICc4NWZiZDczZmM5MjM2NWNkOTA1MjZiMGVhMDNjYWUzYScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2Z1bmNoYW5kLnBocCcsCiAgICAgICAgJzUxZGY5YzE0NmUwYjdkY2JkZjM1OGQ4YWJkMjRkYmRjJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvZ21wLnBocCcsCiAgICAgICAgJzkzYmI3ZmU2NzhkN2RjZmIxMzIyZjhlMzQ3NWE0OGIwJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvZ251cGcucGhwJywKICAgICAgICAnYzE3MWJhOTljZjMxNjM3OWZmNjY0NjgzOTJiZjQ5NTAnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9oYXNoLnBocCcsCiAgICAgICAgJzVhYjRhYWQ0YzI4ZTQ2ODIwOWZiZmNjZWIyZTVlNmE1JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvaWJhc2UucGhwJywKICAgICAgICAnNGQ1NzQwOWM1ZThlNTc2YjBjNjRjMDhkOWQ3MzFjZmInID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9pYm1EYjIucGhwJywKICAgICAgICAnZWViMjQ2ZDU0MDM5NzJhOWQ2MjEwNmU0YTQ4ODM0OTYnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9pY29udi5waHAnLAogICAgICAgICdjMjhhMDVmNDk4YzAxYjgxMGE3MTRmNzIxNGI3YThkYScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2ltYWdlLnBocCcsCiAgICAgICAgJzgwNjNjZDkyYWNkZjAwZmQ5NzhiNTU5OWViN2NjMTQyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvaW1hcC5waHAnLAogICAgICAgICc4YmQyNmRiZTc2OGU5Yzk1OTllZGFkN2IxOThlNTQ0NicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2luZm8ucGhwJywKICAgICAgICAnMGM1NzdmZTYwM2IwMjlkNGI2NWM4NDM3NmIxNWRiZDUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9pbmdyZXMtaWkucGhwJywKICAgICAgICAnZDQzNjI5MTBiZGU0M2MwZjk1NmI1MjUyN2VmZmQ3ZDQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9pbm90aWZ5LnBocCcsCiAgICAgICAgJzY5NmJhNDkxOTdkOWI1NWYwNDI4YTEyYmI1YTgxOGUxJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvanNvbi5waHAnLAogICAgICAgICc5ODE4YWFhOTljODY0N2M2M2Y4ZWY2MmI3YTM2ODE2MCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2xkYXAucGhwJywKICAgICAgICAnYmNmNTIzZmYyYTE5NWViMDhlMGZiYjY2OGVkNzg0ZDAnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9saWJ4bWwucGhwJywKICAgICAgICAnNjhiZTY4YTlhOGI5NWJiNTZjYWI2MTA5ZmYwM2JjODgnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9semYucGhwJywKICAgICAgICAnYmRjYTgwNGJiMDkwNGVhOWY1M2YzMjhkZmMwYmI4YTUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9tYWlscGFyc2UucGhwJywKICAgICAgICAnYjBhM2ZjYWMzZWFmNTU0NDU3OTZkNmFmMjZiODkzNjYnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9tYnN0cmluZy5waHAnLAogICAgICAgICc5OGRlMTZiOGRiMDNlYjBjYjRkMzE4YjQ0MDIyMTVhNicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL21pc2MucGhwJywKICAgICAgICAnYzExMjQ0MDAwM2I1NmUyNDNiMTkyYzExZmE5ZDgzNmUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9tc3FsLnBocCcsCiAgICAgICAgJzdjZWZkODE2MDdjZDIxYjhiM2ExNTY1NmViNjQ2NWY1JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvbXlzcWwucGhwJywKICAgICAgICAnYWFmNDM4YjA4MDA4OWM2ZDA2ODY2NzljZDM0YWE3MmUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9teXNxbGkucGhwJywKICAgICAgICAnZGYwZWY4OTBlOWFmYmY5NWYzOTI0ZmViMWM3YTg5ZjMnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9teXNxbG5kTXMucGhwJywKICAgICAgICAnZGI1OTVmZWU1OTcyODY3ZTQ1YzUzMjcwMTBkNzg3MzUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9teXNxbG5kUWMucGhwJywKICAgICAgICAnY2JhYzk1NjgzNmI3MjQ4M2RjZmYxYWMzOWQ1YzBhMGYnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9uZXR3b3JrLnBocCcsCiAgICAgICAgJzZjOGY4OWRmYmRjMTE3ZDc4NzFmNTcyMjY5MzYzZjI1JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvb2NpOC5waHAnLAogICAgICAgICcxNjlhNjY5OTY2YTQ1YzA2YmY1NWVkMDI5MTIyNzI5YicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL29wY2FjaGUucGhwJywKICAgICAgICAnZGVmNjFiZjRmZWNkNGQ0YmNhNzM1NDkxOWNkNjkzMDInID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9vcGVuc3NsLnBocCcsCiAgICAgICAgJzI2YmIwMTA2NDlhNmQzMmQ0MTIwMTgxNDU4YWE2ZWYyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvb3V0Y29udHJvbC5waHAnLAogICAgICAgICcxMjEyYzIwMWZlNDNjNzQ5MmEwODViMmM3MTUwNWUwZicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3Bhc3N3b3JkLnBocCcsCiAgICAgICAgJzAwMmViY2I4NDJlMmMwZDViN2Y2N2ZlNjRjYzkzMTU4JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvcGNudGwucGhwJywKICAgICAgICAnODZkZjM4NjEyOTgyZGFkZTcyYzcwODVjZTdlY2E4MWYnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9wY3JlLnBocCcsCiAgICAgICAgJzFjYWNjM2U2NWY4MmE0NzNmYmQ1NTA3YzdjZTQzODVkJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvcGRmLnBocCcsCiAgICAgICAgJzFmYzIyZjQ0NWM2OWVhODcwNmU4MmZjZTMwMWMwODMxJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvcGdzcWwucGhwJywKICAgICAgICAnYzcwYjQyNTYxNTg0ZjcxNDRiZmYzOGNkNjNjNGVlZjMnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9wb3NpeC5waHAnLAogICAgICAgICc5OTIzMjE0NjM5YzMyY2E1MTczZGIwM2ExNzdkM2I2MycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3BzLnBocCcsCiAgICAgICAgJzdlOWMzZjhlYWUyYjViZjQyMjA1YzRmMTI5NWNiN2E3JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvcHNwZWxsLnBocCcsCiAgICAgICAgJzkxYWE5MWY2MjQ1YzM0OWMyZTJlODhiZDAwMjVmMTk5JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvcmVhZGxpbmUucGhwJywKICAgICAgICAnZDQzNzczY2FjYjllNWU4ZTg5N2FhMjU1ZTMyMDA3ZDEnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9ycG1pbmZvLnBocCcsCiAgICAgICAgJ2YwNTNhMzg0OWU5ZTgzODM3NjJiMzRiOTFkYjAzMjBiJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvcnJkLnBocCcsCiAgICAgICAgJzc3NWI5NjRmNzJmODI3YTFiZjg3YzY1YWI1YjEwODAwJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvc2VtLnBocCcsCiAgICAgICAgJzgxNjQyOGJkNjljMjlhYjVlMWVkNjIyYWY1ZGNhMGNkJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvc2Vzc2lvbi5waHAnLAogICAgICAgICc1MDkzZTIzM2JlZGJlZmFlZjBkZjI2MmJmYmFiMGE1YycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3NobW9wLnBocCcsCiAgICAgICAgJzAxMzUyOTIwYjAxNTFmMTdlNjcxMjY2ZTQ0YjUyNTM2JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvc2ltcGxleG1sLnBocCcsCiAgICAgICAgJ2IwODA2MTdiMWQ5NDk2ODNjMmUzN2Y4ZjAxZGMwZTE1JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvc29ja2V0cy5waHAnLAogICAgICAgICcyNzA4YWExODJkZGNmZTZjZTI3Yzk2YWNhYWE0MGY2OScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3NvZGl1bS5waHAnLAogICAgICAgICdmMWI5NmNiMjYwYTViYWVlYTlhNzI4NWNkYTgyYTFlYycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3NvbHIucGhwJywKICAgICAgICAnM2ZkODg1Mzc1N2QwZmUzNTU3YzE3OWVmYjgwN2FmZWInID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9zcGwucGhwJywKICAgICAgICAnOTMxMmNlOTZhNTFjODQ2OTEzZmNkYTVmMTg2ZDU4ZGQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9zcWxzcnYucGhwJywKICAgICAgICAnZDNlYjM4M2FkMGI4Yjk2MmIyOWRjNGFmZDI5ZDY3MTUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9zc2RlZXAucGhwJywKICAgICAgICAnNDJhMDliYzQ0OGY0NDFhMGI5ZjkzNjdlYTk3NWMwYmYnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9zc2gyLnBocCcsCiAgICAgICAgJ2VmNzExMDc3ZDM1NmQxYjMzY2EwYjEwYjY3YjBiZThmJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvc3RyZWFtLnBocCcsCiAgICAgICAgJzc2NGIwOWY2ZGYwODFjYmIyODA3Yjk3YzZhY2UzODY2JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvc3RyaW5ncy5waHAnLAogICAgICAgICdlZjI0MTY3ODc2OWZlZTRhNDRhYWEyODhmM2I3OGFhMScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3N3b29sZS5waHAnLAogICAgICAgICcwZWZjOGY2Nzc4Y2JhOTMyYjllMmE4OWUyOGRlMjQ1MicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3VvZGJjLnBocCcsCiAgICAgICAgJ2QzODNkMzI5MDdiOThhZjUzZWU5MjA4YzYyMjA0ZmQwJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvdW9wei5waHAnLAogICAgICAgICcyZmQyZTQwNjBmN2ZlNzcyNjYwZjAwMmNlMzhmMGI3MScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3VybC5waHAnLAogICAgICAgICc3ODIyNDllMDNkZWViZWFmNTdiOTk5MWZmNTQ5M2FhMCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3Zhci5waHAnLAogICAgICAgICczNDQ0NDBjZDFjZDcyMDBmZGI0ZjEyYWYwZDNjNTg3ZicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3hkaWZmLnBocCcsCiAgICAgICAgJzM1OTlmMzY5MjE5YzY1OGE1ZmI2YzRmZTY2ODMyZjYyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQveG1sLnBocCcsCiAgICAgICAgJzdmY2QzMTNkYTlmYWUzMzcwNTFiMDkxYjM0OTJjMjFiJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQveG1scnBjLnBocCcsCiAgICAgICAgJ2Q2NjhjNzRjZmE5MmQ4OTNiNTgyMzU2NzMzZDlhODBlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQveWFtbC5waHAnLAogICAgICAgICc0YWYxZGNhNmRiOGM1MjdjNmVlZDI3YmZmODVmZjBlNScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3lhei5waHAnLAogICAgICAgICdmZTQzY2EwNjQ5OWFjMzdiYzJkZWRkODIzYWY3MWViNScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3ppcC5waHAnLAogICAgICAgICczNTY3MzZkYjk4YTY4MzRmMGE4ODZiOGQ1MDliMGVjZCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3psaWIucGhwJywKICAgICk7CgogICAgcHVibGljIHN0YXRpYyAkcHJlZml4TGVuZ3Roc1BzcjQgPSBhcnJheSAoCiAgICAgICAgJ1cnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAnV2ViYXV0aG5cXE1ldGFkYXRhU2VydmljZVxcJyA9PiAyNSwKICAgICAgICAgICAgJ1dlYmF1dGhuXFwnID0+IDksCiAgICAgICAgKSwKICAgICAgICAnUycgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgICdTeW1mb255XFxQb2x5ZmlsbFxcUGhwODFcXCcgPT4gMjMsCiAgICAgICAgICAgICdTeW1mb255XFxQb2x5ZmlsbFxcUGhwODBcXCcgPT4gMjMsCiAgICAgICAgICAgICdTeW1mb255XFxQb2x5ZmlsbFxcQ3R5cGVcXCcgPT4gMjMsCiAgICAgICAgICAgICdTeW1mb255XFxDb21wb25lbnRcXFByb2Nlc3NcXCcgPT4gMjYsCiAgICAgICAgICAgICdTYWZlXFwnID0+IDUsCiAgICAgICAgKSwKICAgICAgICAnUicgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgICdSb2JSaWNoYXJkc1xcWE1MU2VjTGlic1xcJyA9PiAyMywKICAgICAgICAgICAgJ1JhbXNleVxcVXVpZFxcJyA9PiAxMiwKICAgICAgICAgICAgJ1JhbXNleVxcQ29sbGVjdGlvblxcJyA9PiAxOCwKICAgICAgICApLAogICAgICAgICdQJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgJ1BzclxcTG9nXFwnID0+IDgsCiAgICAgICAgICAgICdQc3JcXEh0dHBcXE1lc3NhZ2VcXCcgPT4gMTcsCiAgICAgICAgICAgICdQc3JcXEh0dHBcXENsaWVudFxcJyA9PiAxNiwKICAgICAgICApLAogICAgICAgICdPJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgJ09uZUxvZ2luXFwnID0+IDksCiAgICAgICAgKSwKICAgICAgICAnTCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgICdMZWFndWVcXFVyaVxcJyA9PiAxMSwKICAgICAgICAgICAgJ0xlYWd1ZVxcT0F1dGgyXFxDbGllbnRcXCcgPT4gMjEsCiAgICAgICAgKSwKICAgICAgICAnRycgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgICdHdXp6bGVIdHRwXFxQc3I3XFwnID0+IDE2LAogICAgICAgICAgICAnR3V6emxlSHR0cFxcUHJvbWlzZVxcJyA9PiAxOSwKICAgICAgICAgICAgJ0d1enpsZUh0dHBcXCcgPT4gMTEsCiAgICAgICAgKSwKICAgICAgICAnRicgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgICdGaXJlYmFzZVxcSldUXFwnID0+IDEzLAogICAgICAgICAgICAnRkdcXCcgPT4gMywKICAgICAgICApLAogICAgICAgICdDJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgJ0Nvc2VcXCcgPT4gNSwKICAgICAgICAgICAgJ0NCT1JcXCcgPT4gNSwKICAgICAgICApLAogICAgICAgICdCJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgJ0JyaWNrXFxNYXRoXFwnID0+IDExLAogICAgICAgICAgICAnQmFzZTY0VXJsXFwnID0+IDEwLAogICAgICAgICksCiAgICAgICAgJ0EnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAnQXNzZXJ0XFwnID0+IDcsCiAgICAgICAgKSwKICAgICk7CgogICAgcHVibGljIHN0YXRpYyAkcHJlZml4RGlyc1BzcjQgPSBhcnJheSAoCiAgICAgICAgJ1dlYmF1dGhuXFxNZXRhZGF0YVNlcnZpY2VcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy93ZWItYXV0aC9tZXRhZGF0YS1zZXJ2aWNlL3NyYycsCiAgICAgICAgKSwKICAgICAgICAnV2ViYXV0aG5cXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy93ZWItYXV0aC93ZWJhdXRobi1saWIvc3JjJywKICAgICAgICApLAogICAgICAgICdTeW1mb255XFxQb2x5ZmlsbFxcUGhwODFcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgxJywKICAgICAgICApLAogICAgICAgICdTeW1mb255XFxQb2x5ZmlsbFxcUGhwODBcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgwJywKICAgICAgICApLAogICAgICAgICdTeW1mb255XFxQb2x5ZmlsbFxcQ3R5cGVcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3BvbHlmaWxsLWN0eXBlJywKICAgICAgICApLAogICAgICAgICdTeW1mb255XFxDb21wb25lbnRcXFByb2Nlc3NcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3Byb2Nlc3MnLAogICAgICAgICksCiAgICAgICAgJ1NhZmVcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvbGliJywKICAgICAgICAgICAgMSA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9kZXByZWNhdGVkJywKICAgICAgICAgICAgMiA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQnLAogICAgICAgICksCiAgICAgICAgJ1JvYlJpY2hhcmRzXFxYTUxTZWNMaWJzXFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvcm9icmljaGFyZHMveG1sc2VjbGlicy9zcmMnLAogICAgICAgICksCiAgICAgICAgJ1JhbXNleVxcVXVpZFxcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JhbXNleS91dWlkL3NyYycsCiAgICAgICAgKSwKICAgICAgICAnUmFtc2V5XFxDb2xsZWN0aW9uXFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmFtc2V5L2NvbGxlY3Rpb24vc3JjJywKICAgICAgICApLAogICAgICAgICdQc3JcXExvZ1xcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3Bzci9sb2cvUHNyL0xvZycsCiAgICAgICAgKSwKICAgICAgICAnUHNyXFxIdHRwXFxNZXNzYWdlXFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvcHNyL2h0dHAtZmFjdG9yeS9zcmMnLAogICAgICAgICAgICAxID0+IF9fRElSX18gLiAnLy4uJyAuICcvcHNyL2h0dHAtbWVzc2FnZS9zcmMnLAogICAgICAgICksCiAgICAgICAgJ1BzclxcSHR0cFxcQ2xpZW50XFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvcHNyL2h0dHAtY2xpZW50L3NyYycsCiAgICAgICAgKSwKICAgICAgICAnT25lTG9naW5cXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmVsb2dpbi9waHAtc2FtbC9zcmMnLAogICAgICAgICksCiAgICAgICAgJ0xlYWd1ZVxcVXJpXFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvbGVhZ3VlL3VyaS9zcmMnLAogICAgICAgICAgICAxID0+IF9fRElSX18gLiAnLy4uJyAuICcvbGVhZ3VlL3VyaS1pbnRlcmZhY2VzL3NyYycsCiAgICAgICAgKSwKICAgICAgICAnTGVhZ3VlXFxPQXV0aDJcXENsaWVudFxcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2xlYWd1ZS9vYXV0aDItY2xpZW50L3NyYycsCiAgICAgICAgKSwKICAgICAgICAnR3V6emxlSHR0cFxcUHNyN1xcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2d1enpsZWh0dHAvcHNyNy9zcmMnLAogICAgICAgICksCiAgICAgICAgJ0d1enpsZUh0dHBcXFByb21pc2VcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ndXp6bGVodHRwL3Byb21pc2VzL3NyYycsCiAgICAgICAgKSwKICAgICAgICAnR3V6emxlSHR0cFxcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2d1enpsZWh0dHAvZ3V6emxlL3NyYycsCiAgICAgICAgKSwKICAgICAgICAnRmlyZWJhc2VcXEpXVFxcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2ZpcmViYXNlL3BocC1qd3Qvc3JjJywKICAgICAgICApLAogICAgICAgICdGR1xcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2Zncm9zc2UvcGhwYXNuMS9saWInLAogICAgICAgICksCiAgICAgICAgJ0Nvc2VcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy93ZWItYXV0aC9jb3NlLWxpYi9zcmMnLAogICAgICAgICksCiAgICAgICAgJ0NCT1JcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zcG9ta3ktbGFicy9jYm9yLXBocC9zcmMnLAogICAgICAgICksCiAgICAgICAgJ0JyaWNrXFxNYXRoXFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvYnJpY2svbWF0aC9zcmMnLAogICAgICAgICksCiAgICAgICAgJ0Jhc2U2NFVybFxcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3Nwb21reS1sYWJzL2Jhc2U2NHVybC9zcmMnLAogICAgICAgICksCiAgICAgICAgJ0Fzc2VydFxcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2JlYmVybGVpL2Fzc2VydC9saWIvQXNzZXJ0JywKICAgICAgICApLAogICAgKTsKCiAgICBwdWJsaWMgc3RhdGljICRjbGFzc01hcCA9IGFycmF5ICgKICAgICAgICAnQXR0cmlidXRlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvcG9seWZpbGwtcGhwODAvUmVzb3VyY2VzL3N0dWJzL0F0dHJpYnV0ZS5waHAnLAogICAgICAgICdDVVJMU3RyaW5nRmlsZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgxL1Jlc291cmNlcy9zdHVicy9DVVJMU3RyaW5nRmlsZS5waHAnLAogICAgICAgICdDb21wb3NlclxcSW5zdGFsbGVkVmVyc2lvbnMnID0+IF9fRElSX18gLiAnLy4uJyAuICcvY29tcG9zZXIvSW5zdGFsbGVkVmVyc2lvbnMucGhwJywKICAgICAgICAnUGhwVG9rZW4nID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MC9SZXNvdXJjZXMvc3R1YnMvUGhwVG9rZW4ucGhwJywKICAgICAgICAnUmV0dXJuVHlwZVdpbGxDaGFuZ2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MS9SZXNvdXJjZXMvc3R1YnMvUmV0dXJuVHlwZVdpbGxDaGFuZ2UucGhwJywKICAgICAgICAnU3RyaW5nYWJsZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgwL1Jlc291cmNlcy9zdHVicy9TdHJpbmdhYmxlLnBocCcsCiAgICAgICAgJ1VuaGFuZGxlZE1hdGNoRXJyb3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MC9SZXNvdXJjZXMvc3R1YnMvVW5oYW5kbGVkTWF0Y2hFcnJvci5waHAnLAogICAgICAgICdWYWx1ZUVycm9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvcG9seWZpbGwtcGhwODAvUmVzb3VyY2VzL3N0dWJzL1ZhbHVlRXJyb3IucGhwJywKICAgICk7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRJbml0aWFsaXplcihDbGFzc0xvYWRlciAkbG9hZGVyKQogICAgewogICAgICAgIHJldHVybiBcQ2xvc3VyZTo6YmluZChmdW5jdGlvbiAoKSB1c2UgKCRsb2FkZXIpIHsKICAgICAgICAgICAgJGxvYWRlci0+cHJlZml4TGVuZ3Roc1BzcjQgPSBDb21wb3NlclN0YXRpY0luaXRmMjYzNDhkYjFlNjI2NTAwNDQ2MWZjMTk1NzQ1MGNkYzo6JHByZWZpeExlbmd0aHNQc3I0OwogICAgICAgICAgICAkbG9hZGVyLT5wcmVmaXhEaXJzUHNyNCA9IENvbXBvc2VyU3RhdGljSW5pdGYyNjM0OGRiMWU2MjY1MDA0NDYxZmMxOTU3NDUwY2RjOjokcHJlZml4RGlyc1BzcjQ7CiAgICAgICAgICAgICRsb2FkZXItPmNsYXNzTWFwID0gQ29tcG9zZXJTdGF0aWNJbml0ZjI2MzQ4ZGIxZTYyNjUwMDQ0NjFmYzE5NTc0NTBjZGM6OiRjbGFzc01hcDsKCiAgICAgICAgfSwgbnVsbCwgQ2xhc3NMb2FkZXI6OmNsYXNzKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/ClassLoader.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENvbXBvc2VyLgogKgogKiAoYykgTmlscyBBZGVybWFubiA8bmFkZXJtYW5AbmFkZXJtYW4uZGU+CiAqICAgICBKb3JkaSBCb2dnaWFubyA8ai5ib2dnaWFub0BzZWxkLmJlPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgQ29tcG9zZXJcQXV0b2xvYWQ7CgovKioKICogQ2xhc3NMb2FkZXIgaW1wbGVtZW50cyBhIFBTUi0wLCBQU1ItNCBhbmQgY2xhc3NtYXAgY2xhc3MgbG9hZGVyLgogKgogKiAgICAgJGxvYWRlciA9IG5ldyBcQ29tcG9zZXJcQXV0b2xvYWRcQ2xhc3NMb2FkZXIoKTsKICoKICogICAgIC8vIHJlZ2lzdGVyIGNsYXNzZXMgd2l0aCBuYW1lc3BhY2VzCiAqICAgICAkbG9hZGVyLT5hZGQoJ1N5bWZvbnlcQ29tcG9uZW50JywgX19ESVJfXy4nL2NvbXBvbmVudCcpOwogKiAgICAgJGxvYWRlci0+YWRkKCdTeW1mb255JywgICAgICAgICAgIF9fRElSX18uJy9mcmFtZXdvcmsnKTsKICoKICogICAgIC8vIGFjdGl2YXRlIHRoZSBhdXRvbG9hZGVyCiAqICAgICAkbG9hZGVyLT5yZWdpc3RlcigpOwogKgogKiAgICAgLy8gdG8gZW5hYmxlIHNlYXJjaGluZyB0aGUgaW5jbHVkZSBwYXRoIChlZy4gZm9yIFBFQVIgcGFja2FnZXMpCiAqICAgICAkbG9hZGVyLT5zZXRVc2VJbmNsdWRlUGF0aCh0cnVlKTsKICoKICogSW4gdGhpcyBleGFtcGxlLCBpZiB5b3UgdHJ5IHRvIHVzZSBhIGNsYXNzIGluIHRoZSBTeW1mb255XENvbXBvbmVudAogKiBuYW1lc3BhY2Ugb3Igb25lIG9mIGl0cyBjaGlsZHJlbiAoU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZSBmb3IgaW5zdGFuY2UpLAogKiB0aGUgYXV0b2xvYWRlciB3aWxsIGZpcnN0IGxvb2sgZm9yIHRoZSBjbGFzcyB1bmRlciB0aGUgY29tcG9uZW50LwogKiBkaXJlY3RvcnksIGFuZCBpdCB3aWxsIHRoZW4gZmFsbGJhY2sgdG8gdGhlIGZyYW1ld29yay8gZGlyZWN0b3J5IGlmIG5vdAogKiBmb3VuZCBiZWZvcmUgZ2l2aW5nIHVwLgogKgogKiBUaGlzIGNsYXNzIGlzIGxvb3NlbHkgYmFzZWQgb24gdGhlIFN5bWZvbnkgVW5pdmVyc2FsQ2xhc3NMb2FkZXIuCiAqCiAqIEBhdXRob3IgRmFiaWVuIFBvdGVuY2llciA8ZmFiaWVuQHN5bWZvbnkuY29tPgogKiBAYXV0aG9yIEpvcmRpIEJvZ2dpYW5vIDxqLmJvZ2dpYW5vQHNlbGQuYmU+CiAqIEBzZWUgICAgaHR0cHM6Ly93d3cucGhwLWZpZy5vcmcvcHNyL3Bzci0wLwogKiBAc2VlICAgIGh0dHBzOi8vd3d3LnBocC1maWcub3JnL3Bzci9wc3ItNC8KICovCmNsYXNzIENsYXNzTG9hZGVyCnsKICAgIC8qKiBAdmFyIFxDbG9zdXJlKHN0cmluZyk6dm9pZCAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJGluY2x1ZGVGaWxlOwoKICAgIC8qKiBAdmFyIHN0cmluZ3xudWxsICovCiAgICBwcml2YXRlICR2ZW5kb3JEaXI7CgogICAgLy8gUFNSLTQKICAgIC8qKgogICAgICogQHZhciBhcnJheTxzdHJpbmcsIGFycmF5PHN0cmluZywgaW50Pj4KICAgICAqLwogICAgcHJpdmF0ZSAkcHJlZml4TGVuZ3Roc1BzcjQgPSBhcnJheSgpOwogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5PHN0cmluZywgbGlzdDxzdHJpbmc+PgogICAgICovCiAgICBwcml2YXRlICRwcmVmaXhEaXJzUHNyNCA9IGFycmF5KCk7CiAgICAvKioKICAgICAqIEB2YXIgbGlzdDxzdHJpbmc+CiAgICAgKi8KICAgIHByaXZhdGUgJGZhbGxiYWNrRGlyc1BzcjQgPSBhcnJheSgpOwoKICAgIC8vIFBTUi0wCiAgICAvKioKICAgICAqIExpc3Qgb2YgUFNSLTAgcHJlZml4ZXMKICAgICAqCiAgICAgKiBTdHJ1Y3R1cmVkIGFzIGFycmF5KCdGIChmaXJzdCBsZXR0ZXIpJyA9PiBhcnJheSgnRm9vXEJhciAoZnVsbCBwcmVmaXgpJyA9PiBhcnJheSgncGF0aCcsICdwYXRoMicpKSkKICAgICAqCiAgICAgKiBAdmFyIGFycmF5PHN0cmluZywgYXJyYXk8c3RyaW5nLCBsaXN0PHN0cmluZz4+PgogICAgICovCiAgICBwcml2YXRlICRwcmVmaXhlc1BzcjAgPSBhcnJheSgpOwogICAgLyoqCiAgICAgKiBAdmFyIGxpc3Q8c3RyaW5nPgogICAgICovCiAgICBwcml2YXRlICRmYWxsYmFja0RpcnNQc3IwID0gYXJyYXkoKTsKCiAgICAvKiogQHZhciBib29sICovCiAgICBwcml2YXRlICR1c2VJbmNsdWRlUGF0aCA9IGZhbHNlOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheTxzdHJpbmcsIHN0cmluZz4KICAgICAqLwogICAgcHJpdmF0ZSAkY2xhc3NNYXAgPSBhcnJheSgpOwoKICAgIC8qKiBAdmFyIGJvb2wgKi8KICAgIHByaXZhdGUgJGNsYXNzTWFwQXV0aG9yaXRhdGl2ZSA9IGZhbHNlOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheTxzdHJpbmcsIGJvb2w+CiAgICAgKi8KICAgIHByaXZhdGUgJG1pc3NpbmdDbGFzc2VzID0gYXJyYXkoKTsKCiAgICAvKiogQHZhciBzdHJpbmd8bnVsbCAqLwogICAgcHJpdmF0ZSAkYXBjdVByZWZpeDsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXk8c3RyaW5nLCBzZWxmPgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkcmVnaXN0ZXJlZExvYWRlcnMgPSBhcnJheSgpOwoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICR2ZW5kb3JEaXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCR2ZW5kb3JEaXIgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT52ZW5kb3JEaXIgPSAkdmVuZG9yRGlyOwogICAgICAgIHNlbGY6OmluaXRpYWxpemVJbmNsdWRlQ2xvc3VyZSgpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheTxzdHJpbmcsIGxpc3Q8c3RyaW5nPj4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFByZWZpeGVzKCkKICAgIHsKICAgICAgICBpZiAoIWVtcHR5KCR0aGlzLT5wcmVmaXhlc1BzcjApKSB7CiAgICAgICAgICAgIHJldHVybiBjYWxsX3VzZXJfZnVuY19hcnJheSgnYXJyYXlfbWVyZ2UnLCBhcnJheV92YWx1ZXMoJHRoaXMtPnByZWZpeGVzUHNyMCkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGFycmF5KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5PHN0cmluZywgbGlzdDxzdHJpbmc+PgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UHJlZml4ZXNQc3I0KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnByZWZpeERpcnNQc3I0OwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBsaXN0PHN0cmluZz4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZhbGxiYWNrRGlycygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5mYWxsYmFja0RpcnNQc3IwOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBsaXN0PHN0cmluZz4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZhbGxiYWNrRGlyc1BzcjQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyNDsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXk8c3RyaW5nLCBzdHJpbmc+IEFycmF5IG9mIGNsYXNzbmFtZSA9PiBwYXRoCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbGFzc01hcCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jbGFzc01hcDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheTxzdHJpbmcsIHN0cmluZz4gJGNsYXNzTWFwIENsYXNzIHRvIGZpbGVuYW1lIG1hcAogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkQ2xhc3NNYXAoYXJyYXkgJGNsYXNzTWFwKQogICAgewogICAgICAgIGlmICgkdGhpcy0+Y2xhc3NNYXApIHsKICAgICAgICAgICAgJHRoaXMtPmNsYXNzTWFwID0gYXJyYXlfbWVyZ2UoJHRoaXMtPmNsYXNzTWFwLCAkY2xhc3NNYXApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5jbGFzc01hcCA9ICRjbGFzc01hcDsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZWdpc3RlcnMgYSBzZXQgb2YgUFNSLTAgZGlyZWN0b3JpZXMgZm9yIGEgZ2l2ZW4gcHJlZml4LCBlaXRoZXIKICAgICAqIGFwcGVuZGluZyBvciBwcmVwZW5kaW5nIHRvIHRoZSBvbmVzIHByZXZpb3VzbHkgc2V0IGZvciB0aGlzIHByZWZpeC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAkcHJlZml4ICBUaGUgcHJlZml4CiAgICAgKiBAcGFyYW0gbGlzdDxzdHJpbmc+fHN0cmluZyAkcGF0aHMgICBUaGUgUFNSLTAgcm9vdCBkaXJlY3RvcmllcwogICAgICogQHBhcmFtIGJvb2wgICAgICAgICAgICAgICAgJHByZXBlbmQgV2hldGhlciB0byBwcmVwZW5kIHRoZSBkaXJlY3RvcmllcwogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKCRwcmVmaXgsICRwYXRocywgJHByZXBlbmQgPSBmYWxzZSkKICAgIHsKICAgICAgICAkcGF0aHMgPSAoYXJyYXkpICRwYXRoczsKICAgICAgICBpZiAoISRwcmVmaXgpIHsKICAgICAgICAgICAgaWYgKCRwcmVwZW5kKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyMCA9IGFycmF5X21lcmdlKAogICAgICAgICAgICAgICAgICAgICRwYXRocywKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyMAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0aGlzLT5mYWxsYmFja0RpcnNQc3IwID0gYXJyYXlfbWVyZ2UoCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjAsCiAgICAgICAgICAgICAgICAgICAgJHBhdGhzCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkZmlyc3QgPSAkcHJlZml4WzBdOwogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPnByZWZpeGVzUHNyMFskZmlyc3RdWyRwcmVmaXhdKSkgewogICAgICAgICAgICAkdGhpcy0+cHJlZml4ZXNQc3IwWyRmaXJzdF1bJHByZWZpeF0gPSAkcGF0aHM7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmICgkcHJlcGVuZCkgewogICAgICAgICAgICAkdGhpcy0+cHJlZml4ZXNQc3IwWyRmaXJzdF1bJHByZWZpeF0gPSBhcnJheV9tZXJnZSgKICAgICAgICAgICAgICAgICRwYXRocywKICAgICAgICAgICAgICAgICR0aGlzLT5wcmVmaXhlc1BzcjBbJGZpcnN0XVskcHJlZml4XQogICAgICAgICAgICApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5wcmVmaXhlc1BzcjBbJGZpcnN0XVskcHJlZml4XSA9IGFycmF5X21lcmdlKAogICAgICAgICAgICAgICAgJHRoaXMtPnByZWZpeGVzUHNyMFskZmlyc3RdWyRwcmVmaXhdLAogICAgICAgICAgICAgICAgJHBhdGhzCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmVnaXN0ZXJzIGEgc2V0IG9mIFBTUi00IGRpcmVjdG9yaWVzIGZvciBhIGdpdmVuIG5hbWVzcGFjZSwgZWl0aGVyCiAgICAgKiBhcHBlbmRpbmcgb3IgcHJlcGVuZGluZyB0byB0aGUgb25lcyBwcmV2aW91c2x5IHNldCBmb3IgdGhpcyBuYW1lc3BhY2UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgJHByZWZpeCAgVGhlIHByZWZpeC9uYW1lc3BhY2UsIHdpdGggdHJhaWxpbmcgJ1xcJwogICAgICogQHBhcmFtIGxpc3Q8c3RyaW5nPnxzdHJpbmcgJHBhdGhzICAgVGhlIFBTUi00IGJhc2UgZGlyZWN0b3JpZXMKICAgICAqIEBwYXJhbSBib29sICAgICAgICAgICAgICAgICRwcmVwZW5kIFdoZXRoZXIgdG8gcHJlcGVuZCB0aGUgZGlyZWN0b3JpZXMKICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZFBzcjQoJHByZWZpeCwgJHBhdGhzLCAkcHJlcGVuZCA9IGZhbHNlKQogICAgewogICAgICAgICRwYXRocyA9IChhcnJheSkgJHBhdGhzOwogICAgICAgIGlmICghJHByZWZpeCkgewogICAgICAgICAgICAvLyBSZWdpc3RlciBkaXJlY3RvcmllcyBmb3IgdGhlIHJvb3QgbmFtZXNwYWNlLgogICAgICAgICAgICBpZiAoJHByZXBlbmQpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5mYWxsYmFja0RpcnNQc3I0ID0gYXJyYXlfbWVyZ2UoCiAgICAgICAgICAgICAgICAgICAgJHBhdGhzLAogICAgICAgICAgICAgICAgICAgICR0aGlzLT5mYWxsYmFja0RpcnNQc3I0CiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjQgPSBhcnJheV9tZXJnZSgKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyNCwKICAgICAgICAgICAgICAgICAgICAkcGF0aHMKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2VpZiAoIWlzc2V0KCR0aGlzLT5wcmVmaXhEaXJzUHNyNFskcHJlZml4XSkpIHsKICAgICAgICAgICAgLy8gUmVnaXN0ZXIgZGlyZWN0b3JpZXMgZm9yIGEgbmV3IG5hbWVzcGFjZS4KICAgICAgICAgICAgJGxlbmd0aCA9IHN0cmxlbigkcHJlZml4KTsKICAgICAgICAgICAgaWYgKCdcXCcgIT09ICRwcmVmaXhbJGxlbmd0aCAtIDFdKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiQSBub24tZW1wdHkgUFNSLTQgcHJlZml4IG11c3QgZW5kIHdpdGggYSBuYW1lc3BhY2Ugc2VwYXJhdG9yLiIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR0aGlzLT5wcmVmaXhMZW5ndGhzUHNyNFskcHJlZml4WzBdXVskcHJlZml4XSA9ICRsZW5ndGg7CiAgICAgICAgICAgICR0aGlzLT5wcmVmaXhEaXJzUHNyNFskcHJlZml4XSA9ICRwYXRoczsKICAgICAgICB9IGVsc2VpZiAoJHByZXBlbmQpIHsKICAgICAgICAgICAgLy8gUHJlcGVuZCBkaXJlY3RvcmllcyBmb3IgYW4gYWxyZWFkeSByZWdpc3RlcmVkIG5hbWVzcGFjZS4KICAgICAgICAgICAgJHRoaXMtPnByZWZpeERpcnNQc3I0WyRwcmVmaXhdID0gYXJyYXlfbWVyZ2UoCiAgICAgICAgICAgICAgICAkcGF0aHMsCiAgICAgICAgICAgICAgICAkdGhpcy0+cHJlZml4RGlyc1BzcjRbJHByZWZpeF0KICAgICAgICAgICAgKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBBcHBlbmQgZGlyZWN0b3JpZXMgZm9yIGFuIGFscmVhZHkgcmVnaXN0ZXJlZCBuYW1lc3BhY2UuCiAgICAgICAgICAgICR0aGlzLT5wcmVmaXhEaXJzUHNyNFskcHJlZml4XSA9IGFycmF5X21lcmdlKAogICAgICAgICAgICAgICAgJHRoaXMtPnByZWZpeERpcnNQc3I0WyRwcmVmaXhdLAogICAgICAgICAgICAgICAgJHBhdGhzCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmVnaXN0ZXJzIGEgc2V0IG9mIFBTUi0wIGRpcmVjdG9yaWVzIGZvciBhIGdpdmVuIHByZWZpeCwKICAgICAqIHJlcGxhY2luZyBhbnkgb3RoZXJzIHByZXZpb3VzbHkgc2V0IGZvciB0aGlzIHByZWZpeC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAkcHJlZml4IFRoZSBwcmVmaXgKICAgICAqIEBwYXJhbSBsaXN0PHN0cmluZz58c3RyaW5nICRwYXRocyAgVGhlIFBTUi0wIGJhc2UgZGlyZWN0b3JpZXMKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldCgkcHJlZml4LCAkcGF0aHMpCiAgICB7CiAgICAgICAgaWYgKCEkcHJlZml4KSB7CiAgICAgICAgICAgICR0aGlzLT5mYWxsYmFja0RpcnNQc3IwID0gKGFycmF5KSAkcGF0aHM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPnByZWZpeGVzUHNyMFskcHJlZml4WzBdXVskcHJlZml4XSA9IChhcnJheSkgJHBhdGhzOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJlZ2lzdGVycyBhIHNldCBvZiBQU1ItNCBkaXJlY3RvcmllcyBmb3IgYSBnaXZlbiBuYW1lc3BhY2UsCiAgICAgKiByZXBsYWNpbmcgYW55IG90aGVycyBwcmV2aW91c2x5IHNldCBmb3IgdGhpcyBuYW1lc3BhY2UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgJHByZWZpeCBUaGUgcHJlZml4L25hbWVzcGFjZSwgd2l0aCB0cmFpbGluZyAnXFwnCiAgICAgKiBAcGFyYW0gbGlzdDxzdHJpbmc+fHN0cmluZyAkcGF0aHMgIFRoZSBQU1ItNCBiYXNlIGRpcmVjdG9yaWVzCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQc3I0KCRwcmVmaXgsICRwYXRocykKICAgIHsKICAgICAgICBpZiAoISRwcmVmaXgpIHsKICAgICAgICAgICAgJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjQgPSAoYXJyYXkpICRwYXRoczsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkbGVuZ3RoID0gc3RybGVuKCRwcmVmaXgpOwogICAgICAgICAgICBpZiAoJ1xcJyAhPT0gJHByZWZpeFskbGVuZ3RoIC0gMV0pIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCJBIG5vbi1lbXB0eSBQU1ItNCBwcmVmaXggbXVzdCBlbmQgd2l0aCBhIG5hbWVzcGFjZSBzZXBhcmF0b3IuIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPnByZWZpeExlbmd0aHNQc3I0WyRwcmVmaXhbMF1dWyRwcmVmaXhdID0gJGxlbmd0aDsKICAgICAgICAgICAgJHRoaXMtPnByZWZpeERpcnNQc3I0WyRwcmVmaXhdID0gKGFycmF5KSAkcGF0aHM7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogVHVybnMgb24gc2VhcmNoaW5nIHRoZSBpbmNsdWRlIHBhdGggZm9yIGNsYXNzIGZpbGVzLgogICAgICoKICAgICAqIEBwYXJhbSBib29sICR1c2VJbmNsdWRlUGF0aAogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VXNlSW5jbHVkZVBhdGgoJHVzZUluY2x1ZGVQYXRoKQogICAgewogICAgICAgICR0aGlzLT51c2VJbmNsdWRlUGF0aCA9ICR1c2VJbmNsdWRlUGF0aDsKICAgIH0KCiAgICAvKioKICAgICAqIENhbiBiZSB1c2VkIHRvIGNoZWNrIGlmIHRoZSBhdXRvbG9hZGVyIHVzZXMgdGhlIGluY2x1ZGUgcGF0aCB0byBjaGVjawogICAgICogZm9yIGNsYXNzZXMuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVc2VJbmNsdWRlUGF0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51c2VJbmNsdWRlUGF0aDsKICAgIH0KCiAgICAvKioKICAgICAqIFR1cm5zIG9mZiBzZWFyY2hpbmcgdGhlIHByZWZpeCBhbmQgZmFsbGJhY2sgZGlyZWN0b3JpZXMgZm9yIGNsYXNzZXMKICAgICAqIHRoYXQgaGF2ZSBub3QgYmVlbiByZWdpc3RlcmVkIHdpdGggdGhlIGNsYXNzIG1hcC4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkY2xhc3NNYXBBdXRob3JpdGF0aXZlCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDbGFzc01hcEF1dGhvcml0YXRpdmUoJGNsYXNzTWFwQXV0aG9yaXRhdGl2ZSkKICAgIHsKICAgICAgICAkdGhpcy0+Y2xhc3NNYXBBdXRob3JpdGF0aXZlID0gJGNsYXNzTWFwQXV0aG9yaXRhdGl2ZTsKICAgIH0KCiAgICAvKioKICAgICAqIFNob3VsZCBjbGFzcyBsb29rdXAgZmFpbCBpZiBub3QgZm91bmQgaW4gdGhlIGN1cnJlbnQgY2xhc3MgbWFwPwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNDbGFzc01hcEF1dGhvcml0YXRpdmUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2xhc3NNYXBBdXRob3JpdGF0aXZlOwogICAgfQoKICAgIC8qKgogICAgICogQVBDdSBwcmVmaXggdG8gdXNlIHRvIGNhY2hlIGZvdW5kL25vdC1mb3VuZCBjbGFzc2VzLCBpZiB0aGUgZXh0ZW5zaW9uIGlzIGVuYWJsZWQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRhcGN1UHJlZml4CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRBcGN1UHJlZml4KCRhcGN1UHJlZml4KQogICAgewogICAgICAgICR0aGlzLT5hcGN1UHJlZml4ID0gZnVuY3Rpb25fZXhpc3RzKCdhcGN1X2ZldGNoJykgJiYgZmlsdGVyX3ZhcihpbmlfZ2V0KCdhcGMuZW5hYmxlZCcpLCBGSUxURVJfVkFMSURBVEVfQk9PTEVBTikgPyAkYXBjdVByZWZpeCA6IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGUgQVBDdSBwcmVmaXggaW4gdXNlLCBvciBudWxsIGlmIEFQQ3UgY2FjaGluZyBpcyBub3QgZW5hYmxlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBcGN1UHJlZml4KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmFwY3VQcmVmaXg7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZWdpc3RlcnMgdGhpcyBpbnN0YW5jZSBhcyBhbiBhdXRvbG9hZGVyLgogICAgICoKICAgICAqIEBwYXJhbSBib29sICRwcmVwZW5kIFdoZXRoZXIgdG8gcHJlcGVuZCB0aGUgYXV0b2xvYWRlciBvciBub3QKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlZ2lzdGVyKCRwcmVwZW5kID0gZmFsc2UpCiAgICB7CiAgICAgICAgc3BsX2F1dG9sb2FkX3JlZ2lzdGVyKGFycmF5KCR0aGlzLCAnbG9hZENsYXNzJyksIHRydWUsICRwcmVwZW5kKTsKCiAgICAgICAgaWYgKG51bGwgPT09ICR0aGlzLT52ZW5kb3JEaXIpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRwcmVwZW5kKSB7CiAgICAgICAgICAgIHNlbGY6OiRyZWdpc3RlcmVkTG9hZGVycyA9IGFycmF5KCR0aGlzLT52ZW5kb3JEaXIgPT4gJHRoaXMpICsgc2VsZjo6JHJlZ2lzdGVyZWRMb2FkZXJzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHVuc2V0KHNlbGY6OiRyZWdpc3RlcmVkTG9hZGVyc1skdGhpcy0+dmVuZG9yRGlyXSk7CiAgICAgICAgICAgIHNlbGY6OiRyZWdpc3RlcmVkTG9hZGVyc1skdGhpcy0+dmVuZG9yRGlyXSA9ICR0aGlzOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFVucmVnaXN0ZXJzIHRoaXMgaW5zdGFuY2UgYXMgYW4gYXV0b2xvYWRlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVucmVnaXN0ZXIoKQogICAgewogICAgICAgIHNwbF9hdXRvbG9hZF91bnJlZ2lzdGVyKGFycmF5KCR0aGlzLCAnbG9hZENsYXNzJykpOwoKICAgICAgICBpZiAobnVsbCAhPT0gJHRoaXMtPnZlbmRvckRpcikgewogICAgICAgICAgICB1bnNldChzZWxmOjokcmVnaXN0ZXJlZExvYWRlcnNbJHRoaXMtPnZlbmRvckRpcl0pOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIExvYWRzIHRoZSBnaXZlbiBjbGFzcyBvciBpbnRlcmZhY2UuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICAgJGNsYXNzIFRoZSBuYW1lIG9mIHRoZSBjbGFzcwogICAgICogQHJldHVybiB0cnVlfG51bGwgVHJ1ZSBpZiBsb2FkZWQsIG51bGwgb3RoZXJ3aXNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkQ2xhc3MoJGNsYXNzKQogICAgewogICAgICAgIGlmICgkZmlsZSA9ICR0aGlzLT5maW5kRmlsZSgkY2xhc3MpKSB7CiAgICAgICAgICAgICRpbmNsdWRlRmlsZSA9IHNlbGY6OiRpbmNsdWRlRmlsZTsKICAgICAgICAgICAgJGluY2x1ZGVGaWxlKCRmaWxlKTsKCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBGaW5kcyB0aGUgcGF0aCB0byB0aGUgZmlsZSB3aGVyZSB0aGUgY2xhc3MgaXMgZGVmaW5lZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjbGFzcyBUaGUgbmFtZSBvZiB0aGUgY2xhc3MKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBUaGUgcGF0aCBpZiBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaW5kRmlsZSgkY2xhc3MpCiAgICB7CiAgICAgICAgLy8gY2xhc3MgbWFwIGxvb2t1cAogICAgICAgIGlmIChpc3NldCgkdGhpcy0+Y2xhc3NNYXBbJGNsYXNzXSkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5jbGFzc01hcFskY2xhc3NdOwogICAgICAgIH0KICAgICAgICBpZiAoJHRoaXMtPmNsYXNzTWFwQXV0aG9yaXRhdGl2ZSB8fCBpc3NldCgkdGhpcy0+bWlzc2luZ0NsYXNzZXNbJGNsYXNzXSkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAobnVsbCAhPT0gJHRoaXMtPmFwY3VQcmVmaXgpIHsKICAgICAgICAgICAgJGZpbGUgPSBhcGN1X2ZldGNoKCR0aGlzLT5hcGN1UHJlZml4LiRjbGFzcywgJGhpdCk7CiAgICAgICAgICAgIGlmICgkaGl0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGZpbGU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRmaWxlID0gJHRoaXMtPmZpbmRGaWxlV2l0aEV4dGVuc2lvbigkY2xhc3MsICcucGhwJyk7CgogICAgICAgIC8vIFNlYXJjaCBmb3IgSGFjayBmaWxlcyBpZiB3ZSBhcmUgcnVubmluZyBvbiBISFZNCiAgICAgICAgaWYgKGZhbHNlID09PSAkZmlsZSAmJiBkZWZpbmVkKCdISFZNX1ZFUlNJT04nKSkgewogICAgICAgICAgICAkZmlsZSA9ICR0aGlzLT5maW5kRmlsZVdpdGhFeHRlbnNpb24oJGNsYXNzLCAnLmhoJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAobnVsbCAhPT0gJHRoaXMtPmFwY3VQcmVmaXgpIHsKICAgICAgICAgICAgYXBjdV9hZGQoJHRoaXMtPmFwY3VQcmVmaXguJGNsYXNzLCAkZmlsZSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZmFsc2UgPT09ICRmaWxlKSB7CiAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoYXQgdGhpcyBjbGFzcyBkb2VzIG5vdCBleGlzdC4KICAgICAgICAgICAgJHRoaXMtPm1pc3NpbmdDbGFzc2VzWyRjbGFzc10gPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRmaWxlOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgY3VycmVudGx5IHJlZ2lzdGVyZWQgbG9hZGVycyBrZXllZCBieSB0aGVpciBjb3JyZXNwb25kaW5nIHZlbmRvciBkaXJlY3Rvcmllcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5PHN0cmluZywgc2VsZj4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRSZWdpc3RlcmVkTG9hZGVycygpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OiRyZWdpc3RlcmVkTG9hZGVyczsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSAgc3RyaW5nICAgICAgICRjbGFzcwogICAgICogQHBhcmFtICBzdHJpbmcgICAgICAgJGV4dAogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBmaW5kRmlsZVdpdGhFeHRlbnNpb24oJGNsYXNzLCAkZXh0KQogICAgewogICAgICAgIC8vIFBTUi00IGxvb2t1cAogICAgICAgICRsb2dpY2FsUGF0aFBzcjQgPSBzdHJ0cigkY2xhc3MsICdcXCcsIERJUkVDVE9SWV9TRVBBUkFUT1IpIC4gJGV4dDsKCiAgICAgICAgJGZpcnN0ID0gJGNsYXNzWzBdOwogICAgICAgIGlmIChpc3NldCgkdGhpcy0+cHJlZml4TGVuZ3Roc1BzcjRbJGZpcnN0XSkpIHsKICAgICAgICAgICAgJHN1YlBhdGggPSAkY2xhc3M7CiAgICAgICAgICAgIHdoaWxlIChmYWxzZSAhPT0gJGxhc3RQb3MgPSBzdHJycG9zKCRzdWJQYXRoLCAnXFwnKSkgewogICAgICAgICAgICAgICAgJHN1YlBhdGggPSBzdWJzdHIoJHN1YlBhdGgsIDAsICRsYXN0UG9zKTsKICAgICAgICAgICAgICAgICRzZWFyY2ggPSAkc3ViUGF0aCAuICdcXCc7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPnByZWZpeERpcnNQc3I0WyRzZWFyY2hdKSkgewogICAgICAgICAgICAgICAgICAgICRwYXRoRW5kID0gRElSRUNUT1JZX1NFUEFSQVRPUiAuIHN1YnN0cigkbG9naWNhbFBhdGhQc3I0LCAkbGFzdFBvcyArIDEpOwogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR0aGlzLT5wcmVmaXhEaXJzUHNyNFskc2VhcmNoXSBhcyAkZGlyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZmlsZSA9ICRkaXIgLiAkcGF0aEVuZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkZmlsZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gUFNSLTQgZmFsbGJhY2sgZGlycwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5mYWxsYmFja0RpcnNQc3I0IGFzICRkaXIpIHsKICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRmaWxlID0gJGRpciAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkbG9naWNhbFBhdGhQc3I0KSkgewogICAgICAgICAgICAgICAgcmV0dXJuICRmaWxlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBQU1ItMCBsb29rdXAKICAgICAgICBpZiAoZmFsc2UgIT09ICRwb3MgPSBzdHJycG9zKCRjbGFzcywgJ1xcJykpIHsKICAgICAgICAgICAgLy8gbmFtZXNwYWNlZCBjbGFzcyBuYW1lCiAgICAgICAgICAgICRsb2dpY2FsUGF0aFBzcjAgPSBzdWJzdHIoJGxvZ2ljYWxQYXRoUHNyNCwgMCwgJHBvcyArIDEpCiAgICAgICAgICAgICAgICAuIHN0cnRyKHN1YnN0cigkbG9naWNhbFBhdGhQc3I0LCAkcG9zICsgMSksICdfJywgRElSRUNUT1JZX1NFUEFSQVRPUik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gUEVBUi1saWtlIGNsYXNzIG5hbWUKICAgICAgICAgICAgJGxvZ2ljYWxQYXRoUHNyMCA9IHN0cnRyKCRjbGFzcywgJ18nLCBESVJFQ1RPUllfU0VQQVJBVE9SKSAuICRleHQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPnByZWZpeGVzUHNyMFskZmlyc3RdKSkgewogICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+cHJlZml4ZXNQc3IwWyRmaXJzdF0gYXMgJHByZWZpeCA9PiAkZGlycykgewogICAgICAgICAgICAgICAgaWYgKDAgPT09IHN0cnBvcygkY2xhc3MsICRwcmVmaXgpKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGRpcnMgYXMgJGRpcikgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGZpbGUgPSAkZGlyIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRsb2dpY2FsUGF0aFBzcjApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGZpbGU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFBTUi0wIGZhbGxiYWNrIGRpcnMKICAgICAgICBmb3JlYWNoICgkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyMCBhcyAkZGlyKSB7CiAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZmlsZSA9ICRkaXIgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGxvZ2ljYWxQYXRoUHNyMCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkZmlsZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gUFNSLTAgaW5jbHVkZSBwYXRocy4KICAgICAgICBpZiAoJHRoaXMtPnVzZUluY2x1ZGVQYXRoICYmICRmaWxlID0gc3RyZWFtX3Jlc29sdmVfaW5jbHVkZV9wYXRoKCRsb2dpY2FsUGF0aFBzcjApKSB7CiAgICAgICAgICAgIHJldHVybiAkZmlsZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBpbml0aWFsaXplSW5jbHVkZUNsb3N1cmUoKQogICAgewogICAgICAgIGlmIChzZWxmOjokaW5jbHVkZUZpbGUgIT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogU2NvcGUgaXNvbGF0ZWQgaW5jbHVkZS4KICAgICAgICAgKgogICAgICAgICAqIFByZXZlbnRzIGFjY2VzcyB0byAkdGhpcy9zZWxmIGZyb20gaW5jbHVkZWQgZmlsZXMuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0gIHN0cmluZyAkZmlsZQogICAgICAgICAqIEByZXR1cm4gdm9pZAogICAgICAgICAqLwogICAgICAgIHNlbGY6OiRpbmNsdWRlRmlsZSA9IFxDbG9zdXJlOjpiaW5kKHN0YXRpYyBmdW5jdGlvbigkZmlsZSkgewogICAgICAgICAgICBpbmNsdWRlICRmaWxlOwogICAgICAgIH0sIG51bGwsIG51bGwpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/installed.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgInBhY2thZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiYmViZXJsZWkvYXNzZXJ0IiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjMuMy4zIiwKICAgICAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICIzLjMuMy4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9iZWJlcmxlaS9hc3NlcnQuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYjVmZDhlYWNkODkxNWExYjYyN2I4YmZjMDI3ODAzZjE5Mzk3MzRkZCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2JlYmVybGVpL2Fzc2VydC96aXBiYWxsL2I1ZmQ4ZWFjZDg5MTVhMWI2MjdiOGJmYzAyNzgwM2YxOTM5NzM0ZGQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJiNWZkOGVhY2Q4OTE1YTFiNjI3YjhiZmMwMjc4MDNmMTkzOTczNGRkIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJleHQtY3R5cGUiOiAiKiIsCiAgICAgICAgICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgICAgICAgICAiZXh0LW1ic3RyaW5nIjogIioiLAogICAgICAgICAgICAgICAgImV4dC1zaW1wbGV4bWwiOiAiKiIsCiAgICAgICAgICAgICAgICAicGhwIjogIl43LjEgfHwgXjguMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgImZyaWVuZHNvZnBocC9waHAtY3MtZml4ZXIiOiAiKiIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9waHBzdGFuIjogIioiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICI+PTYuMC4wIiwKICAgICAgICAgICAgICAgICJ5b2FzdC9waHB1bml0LXBvbHlmaWxscyI6ICJeMC4xLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzdWdnZXN0IjogewogICAgICAgICAgICAgICAgImV4dC1pbnRsIjogIk5lZWRlZCB0byBhbGxvdyBBc3NlcnRpb246OmNvdW50KCksIEFzc2VydGlvbjo6aXNDb3VudGFibGUoKSwgQXNzZXJ0aW9uOjptaW5Db3VudCgpLCBhbmQgQXNzZXJ0aW9uOjptYXhDb3VudCgpIHRvIG9wZXJhdGUgb24gUmVzb3VyY2VCdW5kbGVzIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDI0LTA3LTE1VDEzOjE4OjM1KzAwOjAwIiwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICAgICAgICAgImxpYi9Bc3NlcnQvZnVuY3Rpb25zLnBocCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkFzc2VydFxcIjogImxpYi9Bc3NlcnQiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiQlNELTItQ2xhdXNlIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJCZW5qYW1pbiBFYmVybGVpIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAia29udGFrdEBiZWJlcmxlaS5kZSIsCiAgICAgICAgICAgICAgICAgICAgInJvbGUiOiAiTGVhZCBEZXZlbG9wZXIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlJpY2hhcmQgUXVhZGxpbmciLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJycXVhZGxpbmdAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAicm9sZSI6ICJDb2xsYWJvcmF0b3IiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGluIGFzc2VydGlvbiBsaWJyYXJ5IGZvciBpbnB1dCB2YWxpZGF0aW9uIGluIGJ1c2luZXNzIG1vZGVscy4iLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiYXNzZXJ0IiwKICAgICAgICAgICAgICAgICJhc3NlcnRpb24iLAogICAgICAgICAgICAgICAgInZhbGlkYXRpb24iCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vYmViZXJsZWkvYXNzZXJ0L2lzc3VlcyIsCiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9iZWJlcmxlaS9hc3NlcnQvdHJlZS92My4zLjMiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJpbnN0YWxsLXBhdGgiOiAiLi4vYmViZXJsZWkvYXNzZXJ0IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJicmljay9tYXRoIiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMC45LjMiLAogICAgICAgICAgICAidmVyc2lvbl9ub3JtYWxpemVkIjogIjAuOS4zLjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGguZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiY2E1N2QxOGYwMjhmODRmNzc3YjIxNjhjZDE5MTFiMGRlZTIzNDNhZSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2JyaWNrL21hdGgvemlwYmFsbC9jYTU3ZDE4ZjAyOGY4NGY3NzdiMjE2OGNkMTkxMWIwZGVlMjM0M2FlIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiY2E1N2QxOGYwMjhmODRmNzc3YjIxNjhjZDE5MTFiMGRlZTIzNDNhZSIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgICAgICAgICAicGhwIjogIl43LjEgfHwgXjguMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgInBocC1jb3ZlcmFsbHMvcGhwLWNvdmVyYWxscyI6ICJeMi4yIiwKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjcuNS4xNSB8fCBeOC41IHx8IF45LjAiLAogICAgICAgICAgICAgICAgInZpbWVvL3BzYWxtIjogIjQuOS4yIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDIxLTA4LTE1VDIwOjUwOjE4KzAwOjAwIiwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkJyaWNrXFxNYXRoXFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBcmJpdHJhcnktcHJlY2lzaW9uIGFyaXRobWV0aWMgbGlicmFyeSIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJBcmJpdHJhcnktcHJlY2lzaW9uIiwKICAgICAgICAgICAgICAgICJCaWdJbnRlZ2VyIiwKICAgICAgICAgICAgICAgICJCaWdSYXRpb25hbCIsCiAgICAgICAgICAgICAgICAiYXJpdGhtZXRpYyIsCiAgICAgICAgICAgICAgICAiYmlnZGVjaW1hbCIsCiAgICAgICAgICAgICAgICAiYmlnbnVtIiwKICAgICAgICAgICAgICAgICJicmljayIsCiAgICAgICAgICAgICAgICAibWF0aCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiaXNzdWVzIjogImh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL2lzc3VlcyIsCiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3RyZWUvMC45LjMiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmdW5kaW5nIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL0Jlbk1vcmVsIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly90aWRlbGlmdC5jb20vZnVuZGluZy9naXRodWIvcGFja2FnaXN0L2JyaWNrL21hdGgiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInRpZGVsaWZ0IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiaW5zdGFsbC1wYXRoIjogIi4uL2JyaWNrL21hdGgiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogImZncm9zc2UvcGhwYXNuMSIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogInYyLjUuMCIsCiAgICAgICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiMi41LjAuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vZmdyb3NzZS9QSFBBU04xLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjQyMDYwZWQ0NTM0NDc4OWZiOWYyMWY5ZjE4NjRmYzQ3YjllMzUwN2IiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9mZ3Jvc3NlL1BIUEFTTjEvemlwYmFsbC80MjA2MGVkNDUzNDQ3ODlmYjlmMjFmOWYxODY0ZmM0N2I5ZTM1MDdiIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiNDIwNjBlZDQ1MzQ0Nzg5ZmI5ZjIxZjlmMTg2NGZjNDdiOWUzNTA3YiIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIl43LjEgfHwgXjguMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgInBocC1jb3ZlcmFsbHMvcGhwLWNvdmVyYWxscyI6ICJ+Mi4wIiwKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjcuMCB8fCBeOC4wIHx8IF45LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzdWdnZXN0IjogewogICAgICAgICAgICAgICAgImV4dC1iY21hdGgiOiAiQkNtYXRoIGlzIHRoZSBmYWxsYmFjayBleHRlbnNpb24gZm9yIGJpZyBpbnRlZ2VyIGNhbGN1bGF0aW9ucyIsCiAgICAgICAgICAgICAgICAiZXh0LWN1cmwiOiAiRm9yIGxvYWRpbmcgT0lEIGluZm9ybWF0aW9uIGZyb20gdGhlIHdlYiBpZiB0aGV5IGhhdmUgbm90IGJlZSBkZWZpbmVkIHN0YXRpY2FsbHkiLAogICAgICAgICAgICAgICAgImV4dC1nbXAiOiAiR01QIGlzIHRoZSBwcmVmZXJyZWQgZXh0ZW5zaW9uIGZvciBiaWcgaW50ZWdlciBjYWxjdWxhdGlvbnMiLAogICAgICAgICAgICAgICAgInBocHNlY2xpYi9iY21hdGhfY29tcGF0IjogIkJDbWF0aCBwb2x5ZmlsbCBmb3Igc2VydmVycyB3aGVyZSBuZWl0aGVyIEdNUCBub3IgQkNtYXRoIGlzIGF2YWlsYWJsZSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyMi0xMi0xOVQxMTowODoyNiswMDowMCIsCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjIuMC54LWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiRkdcXCI6ICJsaWIvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiRnJpZWRyaWNoIEdyb8OfZSIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogImZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL0ZHcm9zc2UiLAogICAgICAgICAgICAgICAgICAgICJyb2xlIjogIkF1dGhvciIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQWxsIGNvbnRyaWJ1dG9ycyIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9GR3Jvc3NlL1BIUEFTTjEvY29udHJpYnV0b3JzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSBQSFAgRnJhbWV3b3JrIHRoYXQgYWxsb3dzIHlvdSB0byBlbmNvZGUgYW5kIGRlY29kZSBhcmJpdHJhcnkgQVNOLjEgc3RydWN0dXJlcyB1c2luZyB0aGUgSVRVLVQgWC42OTAgRW5jb2RpbmcgUnVsZXMuIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9GR3Jvc3NlL1BIUEFTTjEiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiREVSIiwKICAgICAgICAgICAgICAgICJhc24uMSIsCiAgICAgICAgICAgICAgICAiYXNuMSIsCiAgICAgICAgICAgICAgICAiYmVyIiwKICAgICAgICAgICAgICAgICJiaW5hcnkiLAogICAgICAgICAgICAgICAgImRlY29kaW5nIiwKICAgICAgICAgICAgICAgICJlbmNvZGluZyIsCiAgICAgICAgICAgICAgICAieC41MDkiLAogICAgICAgICAgICAgICAgInguNjkwIiwKICAgICAgICAgICAgICAgICJ4NTA5IiwKICAgICAgICAgICAgICAgICJ4NjkwIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJpc3N1ZXMiOiAiaHR0cHM6Ly9naXRodWIuY29tL2Zncm9zc2UvUEhQQVNOMS9pc3N1ZXMiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vZmdyb3NzZS9QSFBBU04xL3RyZWUvdjIuNS4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiYWJhbmRvbmVkIjogdHJ1ZSwKICAgICAgICAgICAgImluc3RhbGwtcGF0aCI6ICIuLi9mZ3Jvc3NlL3BocGFzbjEiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogImZpcmViYXNlL3BocC1qd3QiLAogICAgICAgICAgICAidmVyc2lvbiI6ICJ2Ni4xMC4wIiwKICAgICAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICI2LjEwLjAuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlYXBpcy9waHAtand0LmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImE0OWRiNmYwYTUwMzNhZWY1MTQzMjk1MzQyZjFjOTU1MjFiMDc1ZmYiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9nb29nbGVhcGlzL3BocC1qd3QvemlwYmFsbC9hNDlkYjZmMGE1MDMzYWVmNTE0MzI5NTM0MmYxYzk1NTIxYjA3NWZmIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYTQ5ZGI2ZjBhNTAzM2FlZjUxNDMyOTUzNDJmMWM5NTUyMWIwNzVmZiIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIl43LjR8fF44LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJndXp6bGVodHRwL2d1enpsZSI6ICJeNi41fHxeNy40IiwKICAgICAgICAgICAgICAgICJwaHBzcGVjL3Byb3BoZWN5LXBocHVuaXQiOiAiXjIuMCIsCiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl45LjUiLAogICAgICAgICAgICAgICAgInBzci9jYWNoZSI6ICJeMS4wfHxeMi4wIiwKICAgICAgICAgICAgICAgICJwc3IvaHR0cC1jbGllbnQiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAicHNyL2h0dHAtZmFjdG9yeSI6ICJeMS4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAic3VnZ2VzdCI6IHsKICAgICAgICAgICAgICAgICJleHQtc29kaXVtIjogIlN1cHBvcnQgRWREU0EgKEVkMjU1MTkpIHNpZ25hdHVyZXMiLAogICAgICAgICAgICAgICAgInBhcmFnb25pZS9zb2RpdW1fY29tcGF0IjogIlN1cHBvcnQgRWREU0EgKEVkMjU1MTkpIHNpZ25hdHVyZXMgd2hlbiBsaWJzb2RpdW0gaXMgbm90IHByZXNlbnQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjMtMTItMDFUMTY6MjY6MzkrMDA6MDAiLAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiRmlyZWJhc2VcXEpXVFxcIjogInNyYyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJCU0QtMy1DbGF1c2UiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk5ldW1hbiBWb25nIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAibmV1bWFuK3BlYXJAdHdpbGlvLmNvbSIsCiAgICAgICAgICAgICAgICAgICAgInJvbGUiOiAiRGV2ZWxvcGVyIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJBbmFudCBOYXJheWFuYW4iLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJhbmFudEBwaHAubmV0IiwKICAgICAgICAgICAgICAgICAgICAicm9sZSI6ICJEZXZlbG9wZXIiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIHNpbXBsZSBsaWJyYXJ5IHRvIGVuY29kZSBhbmQgZGVjb2RlIEpTT04gV2ViIFRva2VucyAoSldUKSBpbiBQSFAuIFNob3VsZCBjb25mb3JtIHRvIHRoZSBjdXJyZW50IHNwZWMuIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0IiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImp3dCIsCiAgICAgICAgICAgICAgICAicGhwIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJpc3N1ZXMiOiAiaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZWFwaXMvcGhwLWp3dC9pc3N1ZXMiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlYXBpcy9waHAtand0L3RyZWUvdjYuMTAuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImluc3RhbGwtcGF0aCI6ICIuLi9maXJlYmFzZS9waHAtand0IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJndXp6bGVodHRwL2d1enpsZSIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjcuMTAuMCIsCiAgICAgICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiNy4xMC4wLjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYjUxYWM3MDdjZmE0MjBiN2JmZDRlNGQ1ZTUxMGJhODAwOGU4MjJiNCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2d1enpsZS9ndXp6bGUvemlwYmFsbC9iNTFhYzcwN2NmYTQyMGI3YmZkNGU0ZDVlNTEwYmE4MDA4ZTgyMmI0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYjUxYWM3MDdjZmE0MjBiN2JmZDRlNGQ1ZTUxMGJhODAwOGU4MjJiNCIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgICAgICAgICAiZ3V6emxlaHR0cC9wcm9taXNlcyI6ICJeMi4zIiwKICAgICAgICAgICAgICAgICJndXp6bGVodHRwL3BzcjciOiAiXjIuOCIsCiAgICAgICAgICAgICAgICAicGhwIjogIl43LjIuNSB8fCBeOC4wIiwKICAgICAgICAgICAgICAgICJwc3IvaHR0cC1jbGllbnQiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAic3ltZm9ueS9kZXByZWNhdGlvbi1jb250cmFjdHMiOiAiXjIuMiB8fCBeMy4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicHJvdmlkZSI6IHsKICAgICAgICAgICAgICAgICJwc3IvaHR0cC1jbGllbnQtaW1wbGVtZW50YXRpb24iOiAiMS4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAiYmFtYXJuaS9jb21wb3Nlci1iaW4tcGx1Z2luIjogIl4xLjguMiIsCiAgICAgICAgICAgICAgICAiZXh0LWN1cmwiOiAiKiIsCiAgICAgICAgICAgICAgICAiZ3V6emxlL2NsaWVudC1pbnRlZ3JhdGlvbi10ZXN0cyI6ICIzLjAuMiIsCiAgICAgICAgICAgICAgICAicGhwLWh0dHAvbWVzc2FnZS1mYWN0b3J5IjogIl4xLjEiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeOC41LjM5IHx8IF45LjYuMjAiLAogICAgICAgICAgICAgICAgInBzci9sb2ciOiAiXjEuMSB8fCBeMi4wIHx8IF4zLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzdWdnZXN0IjogewogICAgICAgICAgICAgICAgImV4dC1jdXJsIjogIlJlcXVpcmVkIGZvciBDVVJMIGhhbmRsZXIgc3VwcG9ydCIsCiAgICAgICAgICAgICAgICAiZXh0LWludGwiOiAiUmVxdWlyZWQgZm9yIEludGVybmF0aW9uYWxpemVkIERvbWFpbiBOYW1lIChJRE4pIHN1cHBvcnQiLAogICAgICAgICAgICAgICAgInBzci9sb2ciOiAiUmVxdWlyZWQgZm9yIHVzaW5nIHRoZSBMb2cgbWlkZGxld2FyZSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyNS0wOC0yM1QyMjozNjowMSswMDowMCIsCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYmFtYXJuaS1iaW4iOiB7CiAgICAgICAgICAgICAgICAgICAgImJpbi1saW5rcyI6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgImZvcndhcmQtY29tbWFuZCI6IGZhbHNlCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICAgICAgICAgInNyYy9mdW5jdGlvbnNfaW5jbHVkZS5waHAiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJHdXp6bGVIdHRwXFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkdyYWhhbSBDYW1wYmVsbCIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogImhlbGxvQGdqY2FtcGJlbGwuY28udWsiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vR3JhaGFtQ2FtcGJlbGwiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk1pY2hhZWwgRG93bGluZyIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogIm10ZG93bGluZ0BnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vbXRkb3dsaW5nIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJKZXJlbXkgTGluZGJsb20iLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJqZXJlbWVhbWlhQGdtYWlsLmNvbSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9qZXJlbWVhbWlhIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJHZW9yZ2UgTXBvbm9zIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAiZ21wb25vc0BnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vZ21wb25vcyIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiVG9iaWFzIE55aG9sbSIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogInRvYmlhcy5ueWhvbG1AZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL055aG9sbSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiTcOhcmsgU8OhZ2ktS2F6w6FyIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAibWFyay5zYWdpa2F6YXJAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3NhZ2lrYXphcm1hcmsiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlRvYmlhcyBTY2h1bHR6ZSIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogIndlYm1hc3RlckB0dWJvLXdvcmxkLmRlIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL1RvYmlvbiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkd1enpsZSBpcyBhIFBIUCBIVFRQIGNsaWVudCBsaWJyYXJ5IiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImNsaWVudCIsCiAgICAgICAgICAgICAgICAiY3VybCIsCiAgICAgICAgICAgICAgICAiZnJhbWV3b3JrIiwKICAgICAgICAgICAgICAgICJodHRwIiwKICAgICAgICAgICAgICAgICJodHRwIGNsaWVudCIsCiAgICAgICAgICAgICAgICAicHNyLTE4IiwKICAgICAgICAgICAgICAgICJwc3ItNyIsCiAgICAgICAgICAgICAgICAicmVzdCIsCiAgICAgICAgICAgICAgICAid2ViIHNlcnZpY2UiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9pc3N1ZXMiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS90cmVlLzcuMTAuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZ1bmRpbmciOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vR3JhaGFtQ2FtcGJlbGwiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vTnlob2xtIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly90aWRlbGlmdC5jb20vZnVuZGluZy9naXRodWIvcGFja2FnaXN0L2d1enpsZWh0dHAvZ3V6emxlIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJ0aWRlbGlmdCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImluc3RhbGwtcGF0aCI6ICIuLi9ndXp6bGVodHRwL2d1enpsZSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiZ3V6emxlaHR0cC9wcm9taXNlcyIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMy4wIiwKICAgICAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICIyLjMuMC4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHJvbWlzZXMuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiNDgxNTU3YjEzMGVmMzc5MGNmODJiNzEzNjY3YjQzMDMwZGM5Yzk1NyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2d1enpsZS9wcm9taXNlcy96aXBiYWxsLzQ4MTU1N2IxMzBlZjM3OTBjZjgyYjcxMzY2N2I0MzAzMGRjOWM5NTciLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI0ODE1NTdiMTMwZWYzNzkwY2Y4MmI3MTM2NjdiNDMwMzBkYzljOTU3IiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiXjcuMi41IHx8IF44LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJiYW1hcm5pL2NvbXBvc2VyLWJpbi1wbHVnaW4iOiAiXjEuOC4yIiwKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjguNS40NCB8fCBeOS42LjI1IgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDI1LTA4LTIyVDE0OjM0OjA4KzAwOjAwIiwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJiYW1hcm5pLWJpbiI6IHsKICAgICAgICAgICAgICAgICAgICAiYmluLWxpbmtzIjogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAiZm9yd2FyZC1jb21tYW5kIjogZmFsc2UKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiR3V6emxlSHR0cFxcUHJvbWlzZVxcIjogInNyYy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJHcmFoYW0gQ2FtcGJlbGwiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJoZWxsb0BnamNhbXBiZWxsLmNvLnVrIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL0dyYWhhbUNhbXBiZWxsIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJNaWNoYWVsIERvd2xpbmciLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJtdGRvd2xpbmdAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL210ZG93bGluZyIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiVG9iaWFzIE55aG9sbSIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogInRvYmlhcy5ueWhvbG1AZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL055aG9sbSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiVG9iaWFzIFNjaHVsdHplIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAid2VibWFzdGVyQHR1Ym8td29ybGQuZGUiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vVG9iaW9uIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiR3V6emxlIHByb21pc2VzIGxpYnJhcnkiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAicHJvbWlzZSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiaXNzdWVzIjogImh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHJvbWlzZXMvaXNzdWVzIiwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wcm9taXNlcy90cmVlLzIuMy4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9HcmFoYW1DYW1wYmVsbCIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9OeWhvbG0iLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3RpZGVsaWZ0LmNvbS9mdW5kaW5nL2dpdGh1Yi9wYWNrYWdpc3QvZ3V6emxlaHR0cC9wcm9taXNlcyIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAidGlkZWxpZnQiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJpbnN0YWxsLXBhdGgiOiAiLi4vZ3V6emxlaHR0cC9wcm9taXNlcyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiZ3V6emxlaHR0cC9wc3I3IiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMi45LjAiLAogICAgICAgICAgICAidmVyc2lvbl9ub3JtYWxpemVkIjogIjIuOS4wLjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wc3I3LmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjdkMGVkNDJmMjhlNDJkNjEzNTJhN2E3OWRlNjgyZTVlNjdmZWM4ODQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9ndXp6bGUvcHNyNy96aXBiYWxsLzdkMGVkNDJmMjhlNDJkNjEzNTJhN2E3OWRlNjgyZTVlNjdmZWM4ODQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI3ZDBlZDQyZjI4ZTQyZDYxMzUyYTdhNzlkZTY4MmU1ZTY3ZmVjODg0IiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiXjcuMi41IHx8IF44LjAiLAogICAgICAgICAgICAgICAgInBzci9odHRwLWZhY3RvcnkiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAicHNyL2h0dHAtbWVzc2FnZSI6ICJeMS4xIHx8IF4yLjAiLAogICAgICAgICAgICAgICAgInJhbG91cGhpZS9nZXRhbGxoZWFkZXJzIjogIl4zLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJwcm92aWRlIjogewogICAgICAgICAgICAgICAgInBzci9odHRwLWZhY3RvcnktaW1wbGVtZW50YXRpb24iOiAiMS4wIiwKICAgICAgICAgICAgICAgICJwc3IvaHR0cC1tZXNzYWdlLWltcGxlbWVudGF0aW9uIjogIjEuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgImJhbWFybmkvY29tcG9zZXItYmluLXBsdWdpbiI6ICJeMS44LjIiLAogICAgICAgICAgICAgICAgImh0dHAtaW50ZXJvcC9odHRwLWZhY3RvcnktdGVzdHMiOiAiMC45LjAiLAogICAgICAgICAgICAgICAgImpzaHR0cC9taW1lLWRiIjogIjEuNTQuMC4xIiwKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjguNS40NCB8fCBeOS42LjI1IgogICAgICAgICAgICB9LAogICAgICAgICAgICAic3VnZ2VzdCI6IHsKICAgICAgICAgICAgICAgICJsYW1pbmFzL2xhbWluYXMtaHR0cGhhbmRsZXJydW5uZXIiOiAiRW1pdCBQU1ItNyByZXNwb25zZXMiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjYtMDMtMTBUMTY6NDE6MDIrMDA6MDAiLAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJhbWFybmktYmluIjogewogICAgICAgICAgICAgICAgICAgICJiaW4tbGlua3MiOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICJmb3J3YXJkLWNvbW1hbmQiOiBmYWxzZQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiaW5zdGFsbGF0aW9uLXNvdXJjZSI6ICJkaXN0IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJHdXp6bGVIdHRwXFxQc3I3XFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkdyYWhhbSBDYW1wYmVsbCIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogImhlbGxvQGdqY2FtcGJlbGwuY28udWsiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vR3JhaGFtQ2FtcGJlbGwiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk1pY2hhZWwgRG93bGluZyIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogIm10ZG93bGluZ0BnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vbXRkb3dsaW5nIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJHZW9yZ2UgTXBvbm9zIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAiZ21wb25vc0BnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vZ21wb25vcyIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiVG9iaWFzIE55aG9sbSIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogInRvYmlhcy5ueWhvbG1AZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL055aG9sbSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiTcOhcmsgU8OhZ2ktS2F6w6FyIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAibWFyay5zYWdpa2F6YXJAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3NhZ2lrYXphcm1hcmsiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlRvYmlhcyBTY2h1bHR6ZSIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogIndlYm1hc3RlckB0dWJvLXdvcmxkLmRlIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL1RvYmlvbiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiTcOhcmsgU8OhZ2ktS2F6w6FyIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAibWFyay5zYWdpa2F6YXJAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zYWdpa2F6YXJtYXJrLmh1IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUFNSLTcgbWVzc2FnZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGFsc28gcHJvdmlkZXMgY29tbW9uIHV0aWxpdHkgbWV0aG9kcyIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJodHRwIiwKICAgICAgICAgICAgICAgICJtZXNzYWdlIiwKICAgICAgICAgICAgICAgICJwc3ItNyIsCiAgICAgICAgICAgICAgICAicmVxdWVzdCIsCiAgICAgICAgICAgICAgICAicmVzcG9uc2UiLAogICAgICAgICAgICAgICAgInN0cmVhbSIsCiAgICAgICAgICAgICAgICAidXJpIiwKICAgICAgICAgICAgICAgICJ1cmwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3BzcjcvaXNzdWVzIiwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wc3I3L3RyZWUvMi45LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmdW5kaW5nIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL0dyYWhhbUNhbXBiZWxsIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL055aG9sbSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlkZWxpZnQuY29tL2Z1bmRpbmcvZ2l0aHViL3BhY2thZ2lzdC9ndXp6bGVodHRwL3BzcjciLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInRpZGVsaWZ0IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiaW5zdGFsbC1wYXRoIjogIi4uL2d1enpsZWh0dHAvcHNyNyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAibGVhZ3VlL29hdXRoMi1jbGllbnQiLAogICAgICAgICAgICAidmVyc2lvbiI6ICIyLjkuMCIsCiAgICAgICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiMi45LjAuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vdGhlcGhwbGVhZ3VlL29hdXRoMi1jbGllbnQuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMjZlOGM1ZGE0ZjNkNzhjZWRlNzAyMWUwOWIxMzMwYTBmYzA5M2Q1ZSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50L3ppcGJhbGwvMjZlOGM1ZGE0ZjNkNzhjZWRlNzAyMWUwOWIxMzMwYTBmYzA5M2Q1ZSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjI2ZThjNWRhNGYzZDc4Y2VkZTcwMjFlMDliMTMzMGEwZmMwOTNkNWUiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgImV4dC1qc29uIjogIioiLAogICAgICAgICAgICAgICAgImd1enpsZWh0dHAvZ3V6emxlIjogIl42LjUuOCB8fCBeNy40LjUiLAogICAgICAgICAgICAgICAgInBocCI6ICJeNy4xIHx8ID49OC4wLjAgPDguNi4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAibW9ja2VyeS9tb2NrZXJ5IjogIl4xLjMuNSIsCiAgICAgICAgICAgICAgICAicGhwLXBhcmFsbGVsLWxpbnQvcGhwLXBhcmFsbGVsLWxpbnQiOiAiXjEuNCIsCiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl43IHx8IF44IHx8IF45IHx8IF4xMCB8fCBeMTEiLAogICAgICAgICAgICAgICAgInNxdWl6bGFicy9waHBfY29kZXNuaWZmZXIiOiAiXjMuMTEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjUtMTEtMjVUMjI6MTc6MTcrMDA6MDAiLAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiTGVhZ3VlXFxPQXV0aDJcXENsaWVudFxcIjogInNyYy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJBbGV4IEJpbGJpZSIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogImhlbGxvQGFsZXhiaWxiaWUuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cDovL3d3dy5hbGV4YmlsYmllLmNvbSIsCiAgICAgICAgICAgICAgICAgICAgInJvbGUiOiAiRGV2ZWxvcGVyIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJXb29keSBHaWxrIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3NoYWRvd2hhbmQiLAogICAgICAgICAgICAgICAgICAgICJyb2xlIjogIkNvbnRyaWJ1dG9yIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT0F1dGggMi4wIENsaWVudCBMaWJyYXJ5IiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgIkF1dGhlbnRpY2F0aW9uIiwKICAgICAgICAgICAgICAgICJTU08iLAogICAgICAgICAgICAgICAgImF1dGhvcml6YXRpb24iLAogICAgICAgICAgICAgICAgImlkZW50aXR5IiwKICAgICAgICAgICAgICAgICJpZHAiLAogICAgICAgICAgICAgICAgIm9hdXRoIiwKICAgICAgICAgICAgICAgICJvYXV0aDIiLAogICAgICAgICAgICAgICAgInNpbmdsZSBzaWduIG9uIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJpc3N1ZXMiOiAiaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50L2lzc3VlcyIsCiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS90aGVwaHBsZWFndWUvb2F1dGgyLWNsaWVudC90cmVlLzIuOS4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiaW5zdGFsbC1wYXRoIjogIi4uL2xlYWd1ZS9vYXV0aDItY2xpZW50IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJsZWFndWUvdXJpIiwKICAgICAgICAgICAgInZlcnNpb24iOiAiNi43LjIiLAogICAgICAgICAgICAidmVyc2lvbl9ub3JtYWxpemVkIjogIjYuNy4yLjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS91cmkuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiZDNiNTA4MTJkZDUxZjNmYmYxNzYzNDRjYzI5ODFkYjAzZDEwZmUwNiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3RoZXBocGxlYWd1ZS91cmkvemlwYmFsbC9kM2I1MDgxMmRkNTFmM2ZiZjE3NjM0NGNjMjk4MWRiMDNkMTBmZTA2IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiZDNiNTA4MTJkZDUxZjNmYmYxNzYzNDRjYzI5ODFkYjAzZDEwZmUwNiIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgICAgICAgICAibGVhZ3VlL3VyaS1pbnRlcmZhY2VzIjogIl4yLjMiLAogICAgICAgICAgICAgICAgInBocCI6ICJeNy40IHx8IF44LjAiLAogICAgICAgICAgICAgICAgInBzci9odHRwLW1lc3NhZ2UiOiAiXjEuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImNvbmZsaWN0IjogewogICAgICAgICAgICAgICAgImxlYWd1ZS91cmktc2NoZW1lcyI6ICJeMS4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAiZnJpZW5kc29mcGhwL3BocC1jcy1maXhlciI6ICJedjMuMy4yIiwKICAgICAgICAgICAgICAgICJueWhvbG0vcHNyNyI6ICJeMS41IiwKICAgICAgICAgICAgICAgICJwaHAtaHR0cC9wc3I3LWludGVncmF0aW9uLXRlc3RzIjogIl4xLjEiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3RhbiI6ICJeMS4yLjAiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1kZXByZWNhdGlvbi1ydWxlcyI6ICJeMS4wIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tcGhwdW5pdCI6ICJeMS4wLjAiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1zdHJpY3QtcnVsZXMiOiAiXjEuMS4wIiwKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjkuNS4xMCIsCiAgICAgICAgICAgICAgICAicHNyL2h0dHAtZmFjdG9yeSI6ICJeMS4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAic3VnZ2VzdCI6IHsKICAgICAgICAgICAgICAgICJleHQtZmlsZWluZm8iOiAiTmVlZGVkIHRvIGNyZWF0ZSBEYXRhIFVSSSBmcm9tIGEgZmlsZXBhdGgiLAogICAgICAgICAgICAgICAgImV4dC1pbnRsIjogIk5lZWRlZCB0byBpbXByb3ZlIGhvc3QgdmFsaWRhdGlvbiIsCiAgICAgICAgICAgICAgICAibGVhZ3VlL3VyaS1jb21wb25lbnRzIjogIk5lZWRlZCB0byBlYXNpbHkgbWFuaXB1bGF0ZSBVUkkgb2JqZWN0cyIsCiAgICAgICAgICAgICAgICAicHNyL2h0dHAtZmFjdG9yeSI6ICJOZWVkZWQgdG8gdXNlIHRoZSBVUkkgZmFjdG9yeSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyMi0wOS0xM1QxOTo1MDo0MiswMDowMCIsCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjYueC1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkxlYWd1ZVxcVXJpXFwiOiAic3JjIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJueWFtc3Byb2RAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9ueWFtc3Byb2QuY29tIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVVJJIG1hbmlwdWxhdGlvbiBsaWJyYXJ5IiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vdXJpLnRoZXBocGxlYWd1ZS5jb20iLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiZGF0YS11cmkiLAogICAgICAgICAgICAgICAgImZpbGUtdXJpIiwKICAgICAgICAgICAgICAgICJmdHAiLAogICAgICAgICAgICAgICAgImhvc3RuYW1lIiwKICAgICAgICAgICAgICAgICJodHRwIiwKICAgICAgICAgICAgICAgICJodHRwcyIsCiAgICAgICAgICAgICAgICAibWlkZGxld2FyZSIsCiAgICAgICAgICAgICAgICAicGFyc2Vfc3RyIiwKICAgICAgICAgICAgICAgICJwYXJzZV91cmwiLAogICAgICAgICAgICAgICAgInBzci03IiwKICAgICAgICAgICAgICAgICJxdWVyeS1zdHJpbmciLAogICAgICAgICAgICAgICAgInF1ZXJ5c3RyaW5nIiwKICAgICAgICAgICAgICAgICJyZmMzOTg2IiwKICAgICAgICAgICAgICAgICJyZmMzOTg3IiwKICAgICAgICAgICAgICAgICJyZmM2NTcwIiwKICAgICAgICAgICAgICAgICJ1cmkiLAogICAgICAgICAgICAgICAgInVyaS10ZW1wbGF0ZSIsCiAgICAgICAgICAgICAgICAidXJsIiwKICAgICAgICAgICAgICAgICJ3cyIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiZG9jcyI6ICJodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tIiwKICAgICAgICAgICAgICAgICJmb3J1bSI6ICJodHRwczovL3RoZXBocGxlYWd1ZS5zbGFjay5jb20iLAogICAgICAgICAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vdGhlcGhwbGVhZ3VlL3VyaS9pc3N1ZXMiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vdGhlcGhwbGVhZ3VlL3VyaS90cmVlLzYuNy4yIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9ueWFtc3Byb2QiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImluc3RhbGwtcGF0aCI6ICIuLi9sZWFndWUvdXJpIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJsZWFndWUvdXJpLWludGVyZmFjZXMiLAogICAgICAgICAgICAidmVyc2lvbiI6ICIyLjMuMCIsCiAgICAgICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiMi4zLjAuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vdGhlcGhwbGVhZ3VlL3VyaS1pbnRlcmZhY2VzLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjAwZTdlMjk0M2Y3NmQ4Y2I1MGM3ZGZkYzJmNmRlZTM1NmUxNWUzODMiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy90aGVwaHBsZWFndWUvdXJpLWludGVyZmFjZXMvemlwYmFsbC8wMGU3ZTI5NDNmNzZkOGNiNTBjN2RmZGMyZjZkZWUzNTZlMTVlMzgzIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMDBlN2UyOTQzZjc2ZDhjYjUwYzdkZmRjMmY2ZGVlMzU2ZTE1ZTM4MyIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgICAgICAgICAicGhwIjogIl43LjIgfHwgXjguMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgImZyaWVuZHNvZnBocC9waHAtY3MtZml4ZXIiOiAiXjIuMTkiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3RhbiI6ICJeMC4xMi45MCIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9waHBzdGFuLXBocHVuaXQiOiAiXjAuMTIuMTkiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1zdHJpY3QtcnVsZXMiOiAiXjAuMTIuOSIsCiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl44LjUuMTUgfHwgXjkuNSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN1Z2dlc3QiOiB7CiAgICAgICAgICAgICAgICAiZXh0LWludGwiOiAidG8gdXNlIHRoZSBJRE5BIGZlYXR1cmUiLAogICAgICAgICAgICAgICAgInN5bWZvbnkvaW50bCI6ICJ0byB1c2UgdGhlIElETkEgZmVhdHVyZSB2aWEgU3ltZm9ueSBQb2x5ZmlsbCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyMS0wNi0yOFQwNDoyNzoyMSswMDowMCIsCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjIueC1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkxlYWd1ZVxcVXJpXFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIklnbmFjZSBOeWFtYWdhbmEgQnV0ZXJhIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAibnlhbXNwcm9kQGdtYWlsLmNvbSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vbnlhbXNwcm9kLmNvbSIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkNvbW1vbiBpbnRlcmZhY2UgZm9yIFVSSSByZXByZXNlbnRhdGlvbiIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwOi8vZ2l0aHViLmNvbS90aGVwaHBsZWFndWUvdXJpLWludGVyZmFjZXMiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAicmZjMzk4NiIsCiAgICAgICAgICAgICAgICAicmZjMzk4NyIsCiAgICAgICAgICAgICAgICAidXJpIiwKICAgICAgICAgICAgICAgICJ1cmwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vdGhlcGhwbGVhZ3VlL3VyaS1pbnRlcmZhY2VzL2lzc3VlcyIsCiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS90aGVwaHBsZWFndWUvdXJpLWludGVyZmFjZXMvdHJlZS8yLjMuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZ1bmRpbmciOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbnlhbXNwcm9kIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJpbnN0YWxsLXBhdGgiOiAiLi4vbGVhZ3VlL3VyaS1pbnRlcmZhY2VzIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJvbmVsb2dpbi9waHAtc2FtbCIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjQuMy4yIiwKICAgICAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICI0LjMuMi4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjI2YjNhNDczNDk0MTVlNWI3YWEzMDBiYTRhYjdmYzMxNmM2NWYxOWUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9TQU1MLVRvb2xraXRzL3BocC1zYW1sL3ppcGJhbGwvMjZiM2E0NzM0OTQxNWU1YjdhYTMwMGJhNGFiN2ZjMzE2YzY1ZjE5ZSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjI2YjNhNDczNDk0MTVlNWI3YWEzMDBiYTRhYjdmYzMxNmM2NWYxOWUiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICI+PTcuMyIsCiAgICAgICAgICAgICAgICAicm9icmljaGFyZHMveG1sc2VjbGlicyI6ICJeMy4xLjUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJwZGVwZW5kL3BkZXBlbmQiOiAiXjIuOC4wIiwKICAgICAgICAgICAgICAgICJwaHAtY292ZXJhbGxzL3BocC1jb3ZlcmFsbHMiOiAiXjIuMCIsCiAgICAgICAgICAgICAgICAicGhwbG9jL3BocGxvYyI6ICJeNC4wIHx8IF41LjAgfHwgXjYuMCB8fCBeNy4wIiwKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjkuNSIsCiAgICAgICAgICAgICAgICAic2ViYXN0aWFuL3BocGNwZCI6ICJeNC4wIHx8IF41LjAgfHwgXjYuMCAiLAogICAgICAgICAgICAgICAgInNxdWl6bGFicy9waHBfY29kZXNuaWZmZXIiOiAiXjMuNS44IgogICAgICAgICAgICB9LAogICAgICAgICAgICAic3VnZ2VzdCI6IHsKICAgICAgICAgICAgICAgICJleHQtY3VybCI6ICJJbnN0YWxsIGN1cmwgbGliIHRvIGJlIGFibGUgdG8gdXNlIHRoZSBJZFBNZXRhZGF0YVBhcnNlciBmb3IgcGFyc2luZyByZW1vdGUgWE1McyIsCiAgICAgICAgICAgICAgICAiZXh0LWRvbSI6ICJJbnN0YWxsIHhtbCBsaWIiLAogICAgICAgICAgICAgICAgImV4dC1vcGVuc3NsIjogIkluc3RhbGwgb3BlbnNzbCBsaWIgaW4gb3JkZXIgdG8gaGFuZGxlIHdpdGggeDUwOSBjZXJ0cyAocmVxdWlyZSB0byBzdXBwb3J0IHNpZ24gYW5kIGVuY3J5cHRpb24pIiwKICAgICAgICAgICAgICAgICJleHQtemxpYiI6ICJJbnN0YWxsIHpsaWIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjYtMDUtMDdUMjI6Mzg6MDQrMDA6MDAiLAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiT25lTG9naW5cXCI6ICJzcmMvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlBIUCBTQU1MIFRvb2xraXQiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiRmVkZXJhdGlvbiIsCiAgICAgICAgICAgICAgICAiU0FNTDIiLAogICAgICAgICAgICAgICAgIlNTTyIsCiAgICAgICAgICAgICAgICAiaWRlbnRpdHkiLAogICAgICAgICAgICAgICAgInNhbWwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgImVtYWlsIjogInNpeHRvLm1hcnRpbi5nYXJjaWFAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICJpc3N1ZXMiOiAiaHR0cHM6Ly9naXRodWIuY29tL29uZWxvZ2luL1NBTUwtVG9vbGtpdHMvaXNzdWVzIiwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL29uZWxvZ2luL1NBTUwtVG9vbGtpdHMvIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJpbnN0YWxsLXBhdGgiOiAiLi4vb25lbG9naW4vcGhwLXNhbWwiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInBzci9odHRwLWNsaWVudCIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMC4zIiwKICAgICAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICIxLjAuMy4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9waHAtZmlnL2h0dHAtY2xpZW50LmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImJiNTkwNmVkYzFjMzI0YzlhMDVhYTA4NzNkNDAxMTc5NDFlNWZhOTAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9waHAtZmlnL2h0dHAtY2xpZW50L3ppcGJhbGwvYmI1OTA2ZWRjMWMzMjRjOWEwNWFhMDg3M2Q0MDExNzk0MWU1ZmE5MCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImJiNTkwNmVkYzFjMzI0YzlhMDVhYTA4NzNkNDAxMTc5NDFlNWZhOTAiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICJeNy4wIHx8IF44LjAiLAogICAgICAgICAgICAgICAgInBzci9odHRwLW1lc3NhZ2UiOiAiXjEuMCB8fCBeMi4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDIzLTA5LTIzVDE0OjE3OjUwKzAwOjAwIiwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMS4wLngtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiaW5zdGFsbGF0aW9uLXNvdXJjZSI6ICJkaXN0IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJQc3JcXEh0dHBcXENsaWVudFxcIjogInNyYy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJQSFAtRklHIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly93d3cucGhwLWZpZy5vcmcvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ29tbW9uIGludGVyZmFjZSBmb3IgSFRUUCBjbGllbnRzIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9waHAtZmlnL2h0dHAtY2xpZW50IiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImh0dHAiLAogICAgICAgICAgICAgICAgImh0dHAtY2xpZW50IiwKICAgICAgICAgICAgICAgICJwc3IiLAogICAgICAgICAgICAgICAgInBzci0xOCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9waHAtZmlnL2h0dHAtY2xpZW50IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiaW5zdGFsbC1wYXRoIjogIi4uL3Bzci9odHRwLWNsaWVudCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAicHNyL2h0dHAtZmFjdG9yeSIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKICAgICAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICIxLjEuMC4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9waHAtZmlnL2h0dHAtZmFjdG9yeS5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIyYjQ3NjVmZGRmZTNiNTA4YWM2MmY4MjllODUyYjE1MDFkM2Y2ZThhIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvcGhwLWZpZy9odHRwLWZhY3RvcnkvemlwYmFsbC8yYjQ3NjVmZGRmZTNiNTA4YWM2MmY4MjllODUyYjE1MDFkM2Y2ZThhIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMmI0NzY1ZmRkZmUzYjUwOGFjNjJmODI5ZTg1MmIxNTAxZDNmNmU4YSIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIj49Ny4xIiwKICAgICAgICAgICAgICAgICJwc3IvaHR0cC1tZXNzYWdlIjogIl4xLjAgfHwgXjIuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyNC0wNC0xNVQxMjowNjoxNCswMDowMCIsCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuMC54LWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiUHNyXFxIdHRwXFxNZXNzYWdlXFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlBIUC1GSUciLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3d3dy5waHAtZmlnLm9yZy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJQU1ItMTc6IENvbW1vbiBpbnRlcmZhY2VzIGZvciBQU1ItNyBIVFRQIG1lc3NhZ2UgZmFjdG9yaWVzIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImZhY3RvcnkiLAogICAgICAgICAgICAgICAgImh0dHAiLAogICAgICAgICAgICAgICAgIm1lc3NhZ2UiLAogICAgICAgICAgICAgICAgInBzciIsCiAgICAgICAgICAgICAgICAicHNyLTE3IiwKICAgICAgICAgICAgICAgICJwc3ItNyIsCiAgICAgICAgICAgICAgICAicmVxdWVzdCIsCiAgICAgICAgICAgICAgICAicmVzcG9uc2UiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9odHRwLWZhY3RvcnkiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJpbnN0YWxsLXBhdGgiOiAiLi4vcHNyL2h0dHAtZmFjdG9yeSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAicHNyL2h0dHAtbWVzc2FnZSIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMSIsCiAgICAgICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiMS4xLjAuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9odHRwLW1lc3NhZ2UuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiY2I2Y2U0ODQ1Y2UzNGE4YWQ5ZTY4MTE3YzEwZWU5MGEyOTkxOWViYSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3BocC1maWcvaHR0cC1tZXNzYWdlL3ppcGJhbGwvY2I2Y2U0ODQ1Y2UzNGE4YWQ5ZTY4MTE3YzEwZWU5MGEyOTkxOWViYSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImNiNmNlNDg0NWNlMzRhOGFkOWU2ODExN2MxMGVlOTBhMjk5MTllYmEiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICJeNy4yIHx8IF44LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjMtMDQtMDRUMDk6NTA6NTIrMDA6MDAiLAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjEueC1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIlBzclxcSHR0cFxcTWVzc2FnZVxcIjogInNyYy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJQSFAtRklHIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cDovL3d3dy5waHAtZmlnLm9yZy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDb21tb24gaW50ZXJmYWNlIGZvciBIVFRQIG1lc3NhZ2VzIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9waHAtZmlnL2h0dHAtbWVzc2FnZSIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJodHRwIiwKICAgICAgICAgICAgICAgICJodHRwLW1lc3NhZ2UiLAogICAgICAgICAgICAgICAgInBzciIsCiAgICAgICAgICAgICAgICAicHNyLTciLAogICAgICAgICAgICAgICAgInJlcXVlc3QiLAogICAgICAgICAgICAgICAgInJlc3BvbnNlIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvaHR0cC1tZXNzYWdlL3RyZWUvMS4xIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiaW5zdGFsbC1wYXRoIjogIi4uL3Bzci9odHRwLW1lc3NhZ2UiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInBzci9sb2ciLAogICAgICAgICAgICAidmVyc2lvbiI6ICIxLjEuNCIsCiAgICAgICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiMS4xLjQuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9sb2cuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiZDQ5Njk1YjkwOWMzYjc2MjhiNjI4OWRiNTQ3OWExYzIwNDYwMWYxMSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3BocC1maWcvbG9nL3ppcGJhbGwvZDQ5Njk1YjkwOWMzYjc2MjhiNjI4OWRiNTQ3OWExYzIwNDYwMWYxMSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImQ0OTY5NWI5MDljM2I3NjI4YjYyODlkYjU0NzlhMWMyMDQ2MDFmMTEiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICI+PTUuMy4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDIxLTA1LTAzVDExOjIwOjI3KzAwOjAwIiwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMS4xLngtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiaW5zdGFsbGF0aW9uLXNvdXJjZSI6ICJkaXN0IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJQc3JcXExvZ1xcIjogIlBzci9Mb2cvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiUEhQLUZJRyIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vd3d3LnBocC1maWcub3JnLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkNvbW1vbiBpbnRlcmZhY2UgZm9yIGxvZ2dpbmcgbGlicmFyaWVzIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9waHAtZmlnL2xvZyIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJsb2ciLAogICAgICAgICAgICAgICAgInBzciIsCiAgICAgICAgICAgICAgICAicHNyLTMiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9sb2cvdHJlZS8xLjEuNCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImluc3RhbGwtcGF0aCI6ICIuLi9wc3IvbG9nIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJyYWxvdXBoaWUvZ2V0YWxsaGVhZGVycyIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMC4zIiwKICAgICAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICIzLjAuMy4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9yYWxvdXBoaWUvZ2V0YWxsaGVhZGVycy5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIxMjBiNjA1ZGZlYjk5NjgwOGMzMWI2NDc3MjkwYTcxNGQzNTZlODIyIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvcmFsb3VwaGllL2dldGFsbGhlYWRlcnMvemlwYmFsbC8xMjBiNjA1ZGZlYjk5NjgwOGMzMWI2NDc3MjkwYTcxNGQzNTZlODIyIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMTIwYjYwNWRmZWI5OTY4MDhjMzFiNjQ3NzI5MGE3MTRkMzU2ZTgyMiIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIj49NS42IgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAicGhwLWNvdmVyYWxscy9waHAtY292ZXJhbGxzIjogIl4yLjEiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNSB8fCBeNi41IgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDE5LTAzLTA4VDA4OjU1OjM3KzAwOjAwIiwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICAgICAgICAgInNyYy9nZXRhbGxoZWFkZXJzLnBocCIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlJhbHBoIEtoYXR0YXIiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJyYWxwaC5raGF0dGFyQGdtYWlsLmNvbSIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgcG9seWZpbGwgZm9yIGdldGFsbGhlYWRlcnMuIiwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiaXNzdWVzIjogImh0dHBzOi8vZ2l0aHViLmNvbS9yYWxvdXBoaWUvZ2V0YWxsaGVhZGVycy9pc3N1ZXMiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vcmFsb3VwaGllL2dldGFsbGhlYWRlcnMvdHJlZS9kZXZlbG9wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiaW5zdGFsbC1wYXRoIjogIi4uL3JhbG91cGhpZS9nZXRhbGxoZWFkZXJzIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJyYW1zZXkvY29sbGVjdGlvbiIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMy4wIiwKICAgICAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICIxLjMuMC4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9yYW1zZXkvY29sbGVjdGlvbi5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJhZDc0NzVkMWM5ZTcwYjE5MGVjZmZjNThmMmQ5ODk0MTZhZjMzOWI0IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvcmFtc2V5L2NvbGxlY3Rpb24vemlwYmFsbC9hZDc0NzVkMWM5ZTcwYjE5MGVjZmZjNThmMmQ5ODk0MTZhZjMzOWI0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYWQ3NDc1ZDFjOWU3MGIxOTBlY2ZmYzU4ZjJkOTg5NDE2YWYzMzliNCIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIl43LjQgfHwgXjguMCIsCiAgICAgICAgICAgICAgICAic3ltZm9ueS9wb2x5ZmlsbC1waHA4MSI6ICJeMS4yMyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgImNhcHRhaW5ob29rL3BsdWdpbi1jb21wb3NlciI6ICJeNS4zIiwKICAgICAgICAgICAgICAgICJlcmdlYm5pcy9jb21wb3Nlci1ub3JtYWxpemUiOiAiXjIuMjguMyIsCiAgICAgICAgICAgICAgICAiZmFrZXJwaHAvZmFrZXIiOiAiXjEuMjEiLAogICAgICAgICAgICAgICAgImhhbWNyZXN0L2hhbWNyZXN0LXBocCI6ICJeMi4wIiwKICAgICAgICAgICAgICAgICJqYW5ncmVnb3IvcGhwc3Rhbi1wcm9waGVjeSI6ICJeMS4wIiwKICAgICAgICAgICAgICAgICJtb2NrZXJ5L21vY2tlcnkiOiAiXjEuNSIsCiAgICAgICAgICAgICAgICAicGhwLXBhcmFsbGVsLWxpbnQvcGhwLWNvbnNvbGUtaGlnaGxpZ2h0ZXIiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAicGhwLXBhcmFsbGVsLWxpbnQvcGhwLXBhcmFsbGVsLWxpbnQiOiAiXjEuMyIsCiAgICAgICAgICAgICAgICAicGhwY3NzdGFuZGFyZHMvcGhwY3N1dGlscyI6ICJeMS4wLjAtcmMxIiwKICAgICAgICAgICAgICAgICJwaHBzcGVjL3Byb3BoZWN5LXBocHVuaXQiOiAiXjIuMCIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9leHRlbnNpb24taW5zdGFsbGVyIjogIl4xLjIiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3RhbiI6ICJeMS45IiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tbW9ja2VyeSI6ICJeMS4xIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tcGhwdW5pdCI6ICJeMS4zIiwKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjkuNSIsCiAgICAgICAgICAgICAgICAicHNhbG0vcGx1Z2luLW1vY2tlcnkiOiAiXjEuMSIsCiAgICAgICAgICAgICAgICAicHNhbG0vcGx1Z2luLXBocHVuaXQiOiAiXjAuMTguNCIsCiAgICAgICAgICAgICAgICAicmFtc2V5L2NvZGluZy1zdGFuZGFyZCI6ICJeMi4wLjMiLAogICAgICAgICAgICAgICAgInJhbXNleS9jb252ZW50aW9uYWwtY29tbWl0cyI6ICJeMS4zIiwKICAgICAgICAgICAgICAgICJ2aW1lby9wc2FsbSI6ICJeNS40IgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDIyLTEyLTI3VDE5OjEyOjI0KzAwOjAwIiwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJjYXB0YWluaG9vayI6IHsKICAgICAgICAgICAgICAgICAgICAiZm9yY2UtaW5zdGFsbCI6IHRydWUKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAicmFtc2V5L2NvbnZlbnRpb25hbC1jb21taXRzIjogewogICAgICAgICAgICAgICAgICAgICJjb25maWdGaWxlIjogImNvbnZlbnRpb25hbC1jb21taXRzLmpzb24iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIlJhbXNleVxcQ29sbGVjdGlvblxcIjogInNyYy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJCZW4gUmFtc2V5IiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAiYmVuQGJlbnJhbXNleS5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2JlbnJhbXNleS5jb20iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIFBIUCBsaWJyYXJ5IGZvciByZXByZXNlbnRpbmcgYW5kIG1hbmlwdWxhdGluZyBjb2xsZWN0aW9ucy4iLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgImNvbGxlY3Rpb24iLAogICAgICAgICAgICAgICAgImhhc2giLAogICAgICAgICAgICAgICAgIm1hcCIsCiAgICAgICAgICAgICAgICAicXVldWUiLAogICAgICAgICAgICAgICAgInNldCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiaXNzdWVzIjogImh0dHBzOi8vZ2l0aHViLmNvbS9yYW1zZXkvY29sbGVjdGlvbi9pc3N1ZXMiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vcmFtc2V5L2NvbGxlY3Rpb24vdHJlZS8xLjMuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZ1bmRpbmciOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vcmFtc2V5IiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly90aWRlbGlmdC5jb20vZnVuZGluZy9naXRodWIvcGFja2FnaXN0L3JhbXNleS9jb2xsZWN0aW9uIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJ0aWRlbGlmdCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImluc3RhbGwtcGF0aCI6ICIuLi9yYW1zZXkvY29sbGVjdGlvbiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAicmFtc2V5L3V1aWQiLAogICAgICAgICAgICAidmVyc2lvbiI6ICI0LjIuMyIsCiAgICAgICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiNC4yLjMuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vcmFtc2V5L3V1aWQuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiZmM5YmI3ZmI1Mzg4NjkxZmQ3MzczY2Q0NGRjYjRkNjNiYmNmMjRkZiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3JhbXNleS91dWlkL3ppcGJhbGwvZmM5YmI3ZmI1Mzg4NjkxZmQ3MzczY2Q0NGRjYjRkNjNiYmNmMjRkZiIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImZjOWJiN2ZiNTM4ODY5MWZkNzM3M2NkNDRkY2I0ZDYzYmJjZjI0ZGYiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgImJyaWNrL21hdGgiOiAiXjAuOCB8fCBeMC45IiwKICAgICAgICAgICAgICAgICJleHQtanNvbiI6ICIqIiwKICAgICAgICAgICAgICAgICJwaHAiOiAiXjcuMiB8fCBeOC4wIiwKICAgICAgICAgICAgICAgICJyYW1zZXkvY29sbGVjdGlvbiI6ICJeMS4wIiwKICAgICAgICAgICAgICAgICJzeW1mb255L3BvbHlmaWxsLWN0eXBlIjogIl4xLjgiLAogICAgICAgICAgICAgICAgInN5bWZvbnkvcG9seWZpbGwtcGhwODAiOiAiXjEuMTQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXBsYWNlIjogewogICAgICAgICAgICAgICAgInJodW1zYWEvdXVpZCI6ICJzZWxmLnZlcnNpb24iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJjYXB0YWluaG9vay9jYXB0YWluaG9vayI6ICJeNS4xMCIsCiAgICAgICAgICAgICAgICAiY2FwdGFpbmhvb2svcGx1Z2luLWNvbXBvc2VyIjogIl41LjMiLAogICAgICAgICAgICAgICAgImRlYWxlcmRpcmVjdC9waHBjb2Rlc25pZmZlci1jb21wb3Nlci1pbnN0YWxsZXIiOiAiXjAuNy4wIiwKICAgICAgICAgICAgICAgICJkb2N0cmluZS9hbm5vdGF0aW9ucyI6ICJeMS44IiwKICAgICAgICAgICAgICAgICJlcmdlYm5pcy9jb21wb3Nlci1ub3JtYWxpemUiOiAiXjIuMTUiLAogICAgICAgICAgICAgICAgIm1vY2tlcnkvbW9ja2VyeSI6ICJeMS4zIiwKICAgICAgICAgICAgICAgICJtb29udG9hc3QvbWF0aCI6ICJeMS4xIiwKICAgICAgICAgICAgICAgICJwYXJhZ29uaWUvcmFuZG9tLWxpYiI6ICJeMiIsCiAgICAgICAgICAgICAgICAicGhwLW1vY2svcGhwLW1vY2siOiAiXjIuMiIsCiAgICAgICAgICAgICAgICAicGhwLW1vY2svcGhwLW1vY2stbW9ja2VyeSI6ICJeMS4zIiwKICAgICAgICAgICAgICAgICJwaHAtcGFyYWxsZWwtbGludC9waHAtcGFyYWxsZWwtbGludCI6ICJeMS4xIiwKICAgICAgICAgICAgICAgICJwaHBiZW5jaC9waHBiZW5jaCI6ICJeMS4wIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL2V4dGVuc2lvbi1pbnN0YWxsZXIiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9waHBzdGFuIjogIl4wLjEyIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tbW9ja2VyeSI6ICJeMC4xMiIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9waHBzdGFuLXBocHVuaXQiOiAiXjAuMTIiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeOC41IHx8IF45IiwKICAgICAgICAgICAgICAgICJzbGV2b21hdC9jb2Rpbmctc3RhbmRhcmQiOiAiXjcuMCIsCiAgICAgICAgICAgICAgICAic3F1aXpsYWJzL3BocF9jb2Rlc25pZmZlciI6ICJeMy41IiwKICAgICAgICAgICAgICAgICJ2aW1lby9wc2FsbSI6ICJeNC45IgogICAgICAgICAgICB9LAogICAgICAgICAgICAic3VnZ2VzdCI6IHsKICAgICAgICAgICAgICAgICJleHQtYmNtYXRoIjogIkVuYWJsZXMgZmFzdGVyIG1hdGggd2l0aCBhcmJpdHJhcnktcHJlY2lzaW9uIGludGVnZXJzIHVzaW5nIEJDTWF0aC4iLAogICAgICAgICAgICAgICAgImV4dC1jdHlwZSI6ICJFbmFibGVzIGZhc3RlciBwcm9jZXNzaW5nIG9mIGNoYXJhY3RlciBjbGFzc2lmaWNhdGlvbiB1c2luZyBjdHlwZSBmdW5jdGlvbnMuIiwKICAgICAgICAgICAgICAgICJleHQtZ21wIjogIkVuYWJsZXMgZmFzdGVyIG1hdGggd2l0aCBhcmJpdHJhcnktcHJlY2lzaW9uIGludGVnZXJzIHVzaW5nIEdNUC4iLAogICAgICAgICAgICAgICAgImV4dC11dWlkIjogIkVuYWJsZXMgdGhlIHVzZSBvZiBQZWNsVXVpZFRpbWVHZW5lcmF0b3IgYW5kIFBlY2xVdWlkUmFuZG9tR2VuZXJhdG9yLiIsCiAgICAgICAgICAgICAgICAicGFyYWdvbmllL3JhbmRvbS1saWIiOiAiUHJvdmlkZXMgUmFuZG9tTGliIGZvciB1c2Ugd2l0aCB0aGUgUmFuZG9tTGliQWRhcHRlciIsCiAgICAgICAgICAgICAgICAicmFtc2V5L3V1aWQtZG9jdHJpbmUiOiAiQWxsb3dzIHRoZSB1c2Ugb2YgUmFtc2V5XFxVdWlkXFxVdWlkIGFzIERvY3RyaW5lIGZpZWxkIHR5cGUuIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDIxLTA5LTI1VDIzOjEwOjM4KzAwOjAwIiwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJjYXB0YWluaG9vayI6IHsKICAgICAgICAgICAgICAgICAgICAiZm9yY2UtaW5zdGFsbCI6IHRydWUKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFpbiI6ICI0LngtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiaW5zdGFsbGF0aW9uLXNvdXJjZSI6ICJkaXN0IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgImZpbGVzIjogWwogICAgICAgICAgICAgICAgICAgICJzcmMvZnVuY3Rpb25zLnBocCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIlJhbXNleVxcVXVpZFxcIjogInNyYy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSBQSFAgbGlicmFyeSBmb3IgZ2VuZXJhdGluZyBhbmQgd29ya2luZyB3aXRoIHVuaXZlcnNhbGx5IHVuaXF1ZSBpZGVudGlmaWVycyAoVVVJRHMpLiIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJndWlkIiwKICAgICAgICAgICAgICAgICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgICJ1dWlkIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJpc3N1ZXMiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JhbXNleS91dWlkL2lzc3VlcyIsCiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9yYW1zZXkvdXVpZC90cmVlLzQuMi4zIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9yYW1zZXkiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3RpZGVsaWZ0LmNvbS9mdW5kaW5nL2dpdGh1Yi9wYWNrYWdpc3QvcmFtc2V5L3V1aWQiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInRpZGVsaWZ0IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiaW5zdGFsbC1wYXRoIjogIi4uL3JhbXNleS91dWlkIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJyb2JyaWNoYXJkcy94bWxzZWNsaWJzIiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMy4xLjUiLAogICAgICAgICAgICAidmVyc2lvbl9ub3JtYWxpemVkIjogIjMuMS41LjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JvYnJpY2hhcmRzL3htbHNlY2xpYnMuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMDMwNjJiZTc4MTc4Y2JiNWU4ZjYwNWNkMjU1ZGMzMmExNDk4MWY5MiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3JvYnJpY2hhcmRzL3htbHNlY2xpYnMvemlwYmFsbC8wMzA2MmJlNzgxNzhjYmI1ZThmNjA1Y2QyNTVkYzMyYTE0OTgxZjkyIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMDMwNjJiZTc4MTc4Y2JiNWU4ZjYwNWNkMjU1ZGMzMmExNDk4MWY5MiIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAiZXh0LW9wZW5zc2wiOiAiKiIsCiAgICAgICAgICAgICAgICAicGhwIjogIj49IDUuNCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyNi0wMy0xM1QxMDozMTo1NiswMDowMCIsCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiaW5zdGFsbGF0aW9uLXNvdXJjZSI6ICJkaXN0IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJSb2JSaWNoYXJkc1xcWE1MU2VjTGlic1xcIjogInNyYyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJCU0QtMy1DbGF1c2UiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIFBIUCBsaWJyYXJ5IGZvciBYTUwgU2VjdXJpdHkiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JvYnJpY2hhcmRzL3htbHNlY2xpYnMiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAic2VjdXJpdHkiLAogICAgICAgICAgICAgICAgInNpZ25hdHVyZSIsCiAgICAgICAgICAgICAgICAieG1sIiwKICAgICAgICAgICAgICAgICJ4bWxkc2lnIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJpc3N1ZXMiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JvYnJpY2hhcmRzL3htbHNlY2xpYnMvaXNzdWVzIiwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JvYnJpY2hhcmRzL3htbHNlY2xpYnMvdHJlZS8zLjEuNSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImluc3RhbGwtcGF0aCI6ICIuLi9yb2JyaWNoYXJkcy94bWxzZWNsaWJzIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJzcG9ta3ktbGFicy9iYXNlNjR1cmwiLAogICAgICAgICAgICAidmVyc2lvbiI6ICJ2Mi4wLjQiLAogICAgICAgICAgICAidmVyc2lvbl9ub3JtYWxpemVkIjogIjIuMC40LjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reS1MYWJzL2Jhc2U2NHVybC5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI3NzUyY2U5MzFlYzI4NWRhNGVkMWY0YzVhYTI3ZTQ1ZTA5N2JlNjFkIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvU3BvbWt5LUxhYnMvYmFzZTY0dXJsL3ppcGJhbGwvNzc1MmNlOTMxZWMyODVkYTRlZDFmNGM1YWEyN2U0NWUwOTdiZTYxZCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjc3NTJjZTkzMWVjMjg1ZGE0ZWQxZjRjNWFhMjdlNDVlMDk3YmU2MWQiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICI+PTcuMSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgInBocHN0YW4vZXh0ZW5zaW9uLWluc3RhbGxlciI6ICJeMS4wIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4iOiAiXjAuMTF8XjAuMTIiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1iZWJlcmxlaS1hc3NlcnQiOiAiXjAuMTF8XjAuMTIiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1kZXByZWNhdGlvbi1ydWxlcyI6ICJeMC4xMXxeMC4xMiIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9waHBzdGFuLXBocHVuaXQiOiAiXjAuMTF8XjAuMTIiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1zdHJpY3QtcnVsZXMiOiAiXjAuMTF8XjAuMTIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjAtMTEtMDNUMDk6MTA6MjUrMDA6MDAiLAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiQmFzZTY0VXJsXFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkZsb3JlbnQgTW9yc2VsbGkiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5LUxhYnMvYmFzZTY0dXJsL2NvbnRyaWJ1dG9ycyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkJhc2UgNjQgVVJMIFNhZmUgRW5jb2RpbmcvRGVjb2RpbmcgUEhQIExpYnJhcnkiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reS1MYWJzL2Jhc2U2NHVybCIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJiYXNlNjQiLAogICAgICAgICAgICAgICAgInJmYzQ2NDgiLAogICAgICAgICAgICAgICAgInNhZmUiLAogICAgICAgICAgICAgICAgInVybCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiaXNzdWVzIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3ktTGFicy9iYXNlNjR1cmwvaXNzdWVzIiwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reS1MYWJzL2Jhc2U2NHVybC90cmVlL3YyLjAuNCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZ1bmRpbmciOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5IiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly93d3cucGF0cmVvbi5jb20vRmxvcmVudE1vcnNlbGxpIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJwYXRyZW9uIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiaW5zdGFsbC1wYXRoIjogIi4uL3Nwb21reS1sYWJzL2Jhc2U2NHVybCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic3BvbWt5LWxhYnMvY2Jvci1waHAiLAogICAgICAgICAgICAidmVyc2lvbiI6ICJ2Mi4xLjAiLAogICAgICAgICAgICAidmVyc2lvbl9ub3JtYWxpemVkIjogIjIuMS4wLjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reS1MYWJzL2Nib3ItcGhwLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjI4ZTI3MTJjZmMwYjQ4ZmFlNjYxYTQ4ZmZjNjg5NmQ3YWJlODM2ODQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9TcG9ta3ktTGFicy9jYm9yLXBocC96aXBiYWxsLzI4ZTI3MTJjZmMwYjQ4ZmFlNjYxYTQ4ZmZjNjg5NmQ3YWJlODM2ODQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIyOGUyNzEyY2ZjMGI0OGZhZTY2MWE0OGZmYzY4OTZkN2FiZTgzNjg0IiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJicmljay9tYXRoIjogIl4wLjguMTV8XjAuOS4wIiwKICAgICAgICAgICAgICAgICJleHQtbWJzdHJpbmciOiAiKiIsCiAgICAgICAgICAgICAgICAicGhwIjogIj49Ny4zIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAiZWtpbm8vcGhwc3Rhbi1iYW5uZWQtY29kZSI6ICJeMS4wIiwKICAgICAgICAgICAgICAgICJleHQtanNvbiI6ICIqIiwKICAgICAgICAgICAgICAgICJpbmZlY3Rpb24vaW5mZWN0aW9uIjogIl4wLjE4fF4wLjI1IiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL2V4dGVuc2lvbi1pbnN0YWxsZXIiOiAiXjEuMSIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9waHBzdGFuIjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1iZWJlcmxlaS1hc3NlcnQiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9waHBzdGFuLWRlcHJlY2F0aW9uLXJ1bGVzIjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1waHB1bml0IjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1zdHJpY3QtcnVsZXMiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl45LjUiLAogICAgICAgICAgICAgICAgInJlY3Rvci9yZWN0b3IiOiAiXjAuMTIiLAogICAgICAgICAgICAgICAgInJvYXZlL3NlY3VyaXR5LWFkdmlzb3JpZXMiOiAiZGV2LWxhdGVzdCIsCiAgICAgICAgICAgICAgICAic3ltcGxpZnkvZWFzeS1jb2Rpbmctc3RhbmRhcmQiOiAiXjEwLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzdWdnZXN0IjogewogICAgICAgICAgICAgICAgImV4dC1iY21hdGgiOiAiR01QIG9yIEJDTWF0aCBleHRlbnNpb25zIHdpbGwgZHJhc3RpY2FsbHkgaW1wcm92ZSB0aGUgbGlicmFyeSBwZXJmb3JtYW5jZS4gQkNNYXRoIGV4dGVuc2lvbiBuZWVkZWQgdG8gaGFuZGxlIHRoZSBCaWcgRmxvYXQgYW5kIERlY2ltYWwgRnJhY3Rpb24gVGFncyIsCiAgICAgICAgICAgICAgICAiZXh0LWdtcCI6ICJHTVAgb3IgQkNNYXRoIGV4dGVuc2lvbnMgd2lsbCBkcmFzdGljYWxseSBpbXByb3ZlIHRoZSBsaWJyYXJ5IHBlcmZvcm1hbmNlIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDIxLTEyLTEzVDEyOjQ2OjI2KzAwOjAwIiwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkNCT1JcXCI6ICJzcmMvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiRmxvcmVudCBNb3JzZWxsaSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3kiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkFsbCBjb250cmlidXRvcnMiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5LUxhYnMvY2Jvci1waHAvY29udHJpYnV0b3JzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ0JPUiBFbmNvZGVyL0RlY29kZXIgZm9yIFBIUCIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJDb25jaXNlIEJpbmFyeSBPYmplY3QgUmVwcmVzZW50YXRpb24iLAogICAgICAgICAgICAgICAgIlJGQzcwNDkiLAogICAgICAgICAgICAgICAgImNib3IiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5LUxhYnMvY2Jvci1waHAvaXNzdWVzIiwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reS1MYWJzL2Nib3ItcGhwL3RyZWUvdjIuMS4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3kiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3d3dy5wYXRyZW9uLmNvbS9GbG9yZW50TW9yc2VsbGkiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInBhdHJlb24iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJpbnN0YWxsLXBhdGgiOiAiLi4vc3BvbWt5LWxhYnMvY2Jvci1waHAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInN5bWZvbnkvZGVwcmVjYXRpb24tY29udHJhY3RzIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjIuNS40IiwKICAgICAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICIyLjUuNC4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zeW1mb255L2RlcHJlY2F0aW9uLWNvbnRyYWN0cy5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI2MDUzODlmMmE3ZTU2MjVmMjczYjUzOTYwZGM0NmFlYWY5YzYyOTE4IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvc3ltZm9ueS9kZXByZWNhdGlvbi1jb250cmFjdHMvemlwYmFsbC82MDUzODlmMmE3ZTU2MjVmMjczYjUzOTYwZGM0NmFlYWY5YzYyOTE4IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiNjA1Mzg5ZjJhN2U1NjI1ZjI3M2I1Mzk2MGRjNDZhZWFmOWM2MjkxOCIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIj49Ny4xIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDI0LTA5LTI1VDE0OjExOjEzKzAwOjAwIiwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJ0aGFua3MiOiB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9jb250cmFjdHMiLAogICAgICAgICAgICAgICAgICAgICJuYW1lIjogInN5bWZvbnkvY29udHJhY3RzIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAgICAgImRldi1tYWluIjogIjIuNS1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICAgICAgICAgImZ1bmN0aW9uLnBocCIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk5pY29sYXMgR3Jla2FzIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAicEB0Y2h3b3JrLmNvbSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU3ltZm9ueSBDb21tdW5pdHkiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3N5bWZvbnkuY29tL2NvbnRyaWJ1dG9ycyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgZ2VuZXJpYyBmdW5jdGlvbiBhbmQgY29udmVudGlvbiB0byB0cmlnZ2VyIGRlcHJlY2F0aW9uIG5vdGljZXMiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbSIsCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9kZXByZWNhdGlvbi1jb250cmFjdHMvdHJlZS92Mi41LjQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmdW5kaW5nIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9zcG9uc29yIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJjdXN0b20iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2ZhYnBvdCIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlkZWxpZnQuY29tL2Z1bmRpbmcvZ2l0aHViL3BhY2thZ2lzdC9zeW1mb255L3N5bWZvbnkiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInRpZGVsaWZ0IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiaW5zdGFsbC1wYXRoIjogIi4uL3N5bWZvbnkvZGVwcmVjYXRpb24tY29udHJhY3RzIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJzeW1mb255L3BvbHlmaWxsLWN0eXBlIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjEuMzcuMCIsCiAgICAgICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiMS4zNy4wLjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvcG9seWZpbGwtY3R5cGUuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMTQxMDQ2YThmOTQ3Nzk0OGZmMjg0ZmE2NWJlMjA5NWJhYWZiOTRmMiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3N5bWZvbnkvcG9seWZpbGwtY3R5cGUvemlwYmFsbC8xNDEwNDZhOGY5NDc3OTQ4ZmYyODRmYTY1YmUyMDk1YmFhZmI5NGYyIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMTQxMDQ2YThmOTQ3Nzk0OGZmMjg0ZmE2NWJlMjA5NWJhYWZiOTRmMiIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIj49Ny4yIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicHJvdmlkZSI6IHsKICAgICAgICAgICAgICAgICJleHQtY3R5cGUiOiAiKiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN1Z2dlc3QiOiB7CiAgICAgICAgICAgICAgICAiZXh0LWN0eXBlIjogIkZvciBiZXN0IHBlcmZvcm1hbmNlIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDI2LTA0LTEwVDE2OjE5OjIyKzAwOjAwIiwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJ0aGFua3MiOiB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9wb2x5ZmlsbCIsCiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAic3ltZm9ueS9wb2x5ZmlsbCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgICAgICAgICAiYm9vdHN0cmFwLnBocCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIlN5bWZvbnlcXFBvbHlmaWxsXFxDdHlwZVxcIjogIiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkdlcnQgZGUgUGFndGVyIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAiQmFja0VuZFRlYUBnbWFpbC5jb20iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlN5bWZvbnkgQ29tbXVuaXR5IiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9jb250cmlidXRvcnMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTeW1mb255IHBvbHlmaWxsIGZvciBjdHlwZSBmdW5jdGlvbnMiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbSIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJjb21wYXRpYmlsaXR5IiwKICAgICAgICAgICAgICAgICJjdHlwZSIsCiAgICAgICAgICAgICAgICAicG9seWZpbGwiLAogICAgICAgICAgICAgICAgInBvcnRhYmxlIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvcG9seWZpbGwtY3R5cGUvdHJlZS92MS4zNy4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vc3ltZm9ueS5jb20vc3BvbnNvciIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiY3VzdG9tIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9mYWJwb3QiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vbmljb2xhcy1ncmVrYXMiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3RpZGVsaWZ0LmNvbS9mdW5kaW5nL2dpdGh1Yi9wYWNrYWdpc3Qvc3ltZm9ueS9zeW1mb255IiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJ0aWRlbGlmdCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImluc3RhbGwtcGF0aCI6ICIuLi9zeW1mb255L3BvbHlmaWxsLWN0eXBlIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJzeW1mb255L3BvbHlmaWxsLXBocDgwIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjEuMzcuMCIsCiAgICAgICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiMS4zNy4wLjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvcG9seWZpbGwtcGhwODAuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiZGZiNTU3MjZjM2E3NmVhM2I2NDU5ZmNmZGExZWMyZDgwYTY4MjQxMSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3N5bWZvbnkvcG9seWZpbGwtcGhwODAvemlwYmFsbC9kZmI1NTcyNmMzYTc2ZWEzYjY0NTlmY2ZkYTFlYzJkODBhNjgyNDExIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiZGZiNTU3MjZjM2E3NmVhM2I2NDU5ZmNmZGExZWMyZDgwYTY4MjQxMSIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIj49Ny4yIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDI2LTA0LTEwVDE2OjE5OjIyKzAwOjAwIiwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJ0aGFua3MiOiB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9wb2x5ZmlsbCIsCiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAic3ltZm9ueS9wb2x5ZmlsbCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgICAgICAgICAiYm9vdHN0cmFwLnBocCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIlN5bWZvbnlcXFBvbHlmaWxsXFxQaHA4MFxcIjogIiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAiY2xhc3NtYXAiOiBbCiAgICAgICAgICAgICAgICAgICAgIlJlc291cmNlcy9zdHVicyIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIklvbiBCYXphbiIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogImlvbi5iYXphbkBnbWFpbC5jb20iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk5pY29sYXMgR3Jla2FzIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAicEB0Y2h3b3JrLmNvbSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU3ltZm9ueSBDb21tdW5pdHkiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3N5bWZvbnkuY29tL2NvbnRyaWJ1dG9ycyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlN5bWZvbnkgcG9seWZpbGwgYmFja3BvcnRpbmcgc29tZSBQSFAgOC4wKyBmZWF0dXJlcyB0byBsb3dlciBQSFAgdmVyc2lvbnMiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbSIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJjb21wYXRpYmlsaXR5IiwKICAgICAgICAgICAgICAgICJwb2x5ZmlsbCIsCiAgICAgICAgICAgICAgICAicG9ydGFibGUiLAogICAgICAgICAgICAgICAgInNoaW0iCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9wb2x5ZmlsbC1waHA4MC90cmVlL3YxLjM3LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmdW5kaW5nIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9zcG9uc29yIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJjdXN0b20iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2ZhYnBvdCIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9uaWNvbGFzLWdyZWthcyIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlkZWxpZnQuY29tL2Z1bmRpbmcvZ2l0aHViL3BhY2thZ2lzdC9zeW1mb255L3N5bWZvbnkiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInRpZGVsaWZ0IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiaW5zdGFsbC1wYXRoIjogIi4uL3N5bWZvbnkvcG9seWZpbGwtcGhwODAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInN5bWZvbnkvcG9seWZpbGwtcGhwODEiLAogICAgICAgICAgICAidmVyc2lvbiI6ICJ2MS4zNy4wIiwKICAgICAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICIxLjM3LjAuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9wb2x5ZmlsbC1waHA4MS5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI0YTRjZmMyZDI1M2MyMWE1YWQwZTUzMDcxZGYyNDhlZDQ4YzZjZTVjIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MS96aXBiYWxsLzRhNGNmYzJkMjUzYzIxYTVhZDBlNTMwNzFkZjI0OGVkNDhjNmNlNWMiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI0YTRjZmMyZDI1M2MyMWE1YWQwZTUzMDcxZGYyNDhlZDQ4YzZjZTVjIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj03LjIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjQtMDktMDlUMTE6NDU6MTArMDA6MDAiLAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgInRoYW5rcyI6IHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zeW1mb255L3BvbHlmaWxsIiwKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJzeW1mb255L3BvbHlmaWxsIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiaW5zdGFsbGF0aW9uLXNvdXJjZSI6ICJkaXN0IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgImZpbGVzIjogWwogICAgICAgICAgICAgICAgICAgICJib290c3RyYXAucGhwIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiU3ltZm9ueVxcUG9seWZpbGxcXFBocDgxXFwiOiAiIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJjbGFzc21hcCI6IFsKICAgICAgICAgICAgICAgICAgICAiUmVzb3VyY2VzL3N0dWJzIgogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiTmljb2xhcyBHcmVrYXMiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJwQHRjaHdvcmsuY29tIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTeW1mb255IENvbW11bml0eSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vc3ltZm9ueS5jb20vY29udHJpYnV0b3JzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiU3ltZm9ueSBwb2x5ZmlsbCBiYWNrcG9ydGluZyBzb21lIFBIUCA4LjErIGZlYXR1cmVzIHRvIGxvd2VyIFBIUCB2ZXJzaW9ucyIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3N5bWZvbnkuY29tIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImNvbXBhdGliaWxpdHkiLAogICAgICAgICAgICAgICAgInBvbHlmaWxsIiwKICAgICAgICAgICAgICAgICJwb3J0YWJsZSIsCiAgICAgICAgICAgICAgICAic2hpbSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zeW1mb255L3BvbHlmaWxsLXBocDgxL3RyZWUvdjEuMzcuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZ1bmRpbmciOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3N5bWZvbnkuY29tL3Nwb25zb3IiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImN1c3RvbSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vZmFicG90IiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL25pY29sYXMtZ3Jla2FzIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly90aWRlbGlmdC5jb20vZnVuZGluZy9naXRodWIvcGFja2FnaXN0L3N5bWZvbnkvc3ltZm9ueSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAidGlkZWxpZnQiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJpbnN0YWxsLXBhdGgiOiAiLi4vc3ltZm9ueS9wb2x5ZmlsbC1waHA4MSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic3ltZm9ueS9wcm9jZXNzIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjUuNC41MSIsCiAgICAgICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiNS40LjUxLjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvcHJvY2Vzcy5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI0NjdiZmM1NmYxOGY1ZWY2ZDVjY2IwOTMyNGQ3ZTk4OGMxYzBhOThmIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvc3ltZm9ueS9wcm9jZXNzL3ppcGJhbGwvNDY3YmZjNTZmMThmNWVmNmQ1Y2NiMDkzMjRkN2U5ODhjMWMwYTk4ZiIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjQ2N2JmYzU2ZjE4ZjVlZjZkNWNjYjA5MzI0ZDdlOTg4YzFjMGE5OGYiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICI+PTcuMi41IiwKICAgICAgICAgICAgICAgICJzeW1mb255L3BvbHlmaWxsLXBocDgwIjogIl4xLjE2IgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDI2LTAxLTI2VDE1OjUzOjM3KzAwOjAwIiwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIlN5bWZvbnlcXENvbXBvbmVudFxcUHJvY2Vzc1xcIjogIiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAiZXhjbHVkZS1mcm9tLWNsYXNzbWFwIjogWwogICAgICAgICAgICAgICAgICAgICIvVGVzdHMvIgogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiRmFiaWVuIFBvdGVuY2llciIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogImZhYmllbkBzeW1mb255LmNvbSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU3ltZm9ueSBDb21tdW5pdHkiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3N5bWZvbnkuY29tL2NvbnRyaWJ1dG9ycyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkV4ZWN1dGVzIGNvbW1hbmRzIGluIHN1Yi1wcm9jZXNzZXMiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbSIsCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9wcm9jZXNzL3RyZWUvdjUuNC41MSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZ1bmRpbmciOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3N5bWZvbnkuY29tL3Nwb25zb3IiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImN1c3RvbSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vZmFicG90IiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL25pY29sYXMtZ3Jla2FzIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly90aWRlbGlmdC5jb20vZnVuZGluZy9naXRodWIvcGFja2FnaXN0L3N5bWZvbnkvc3ltZm9ueSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAidGlkZWxpZnQiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJpbnN0YWxsLXBhdGgiOiAiLi4vc3ltZm9ueS9wcm9jZXNzIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJ0aGVjb2RpbmdtYWNoaW5lL3NhZmUiLAogICAgICAgICAgICAidmVyc2lvbiI6ICJ2MS4zLjMiLAogICAgICAgICAgICAidmVyc2lvbl9ub3JtYWxpemVkIjogIjEuMy4zLjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3RoZWNvZGluZ21hY2hpbmUvc2FmZS5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJhOGFiMDg3NjMwNWE0Y2RhZWYzMWIyMzUwZmNiOTgxMWI1NjA4ZGJjIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvdGhlY29kaW5nbWFjaGluZS9zYWZlL3ppcGJhbGwvYThhYjA4NzYzMDVhNGNkYWVmMzFiMjM1MGZjYjk4MTFiNTYwOGRiYyIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImE4YWIwODc2MzA1YTRjZGFlZjMxYjIzNTBmY2I5ODExYjU2MDhkYmMiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICI+PTcuMiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3RhbiI6ICJeMC4xMiIsCiAgICAgICAgICAgICAgICAic3F1aXpsYWJzL3BocF9jb2Rlc25pZmZlciI6ICJeMy4yIiwKICAgICAgICAgICAgICAgICJ0aGVjb2RpbmdtYWNoaW5lL3BocHN0YW4tc3RyaWN0LXJ1bGVzIjogIl4wLjEyIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDIwLTEwLTI4VDE3OjUxOjM0KzAwOjAwIiwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMC4xLWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgICAgICAgICAiZGVwcmVjYXRlZC9hcGMucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZGVwcmVjYXRlZC9saWJldmVudC5waHAiLAogICAgICAgICAgICAgICAgICAgICJkZXByZWNhdGVkL21zc3FsLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImRlcHJlY2F0ZWQvc3RhdHMucGhwIiwKICAgICAgICAgICAgICAgICAgICAibGliL3NwZWNpYWxfY2FzZXMucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2FwYWNoZS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvYXBjdS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvYXJyYXkucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2J6aXAyLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9jYWxlbmRhci5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvY2xhc3NvYmoucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2NvbS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvY3VicmlkLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9jdXJsLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9kYXRldGltZS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvZGlyLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9laW8ucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2Vycm9yZnVuYy5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvZXhlYy5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvZmlsZWluZm8ucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2ZpbGVzeXN0ZW0ucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2ZpbHRlci5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvZnBtLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9mdHAucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2Z1bmNoYW5kLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9nbXAucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2dudXBnLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9oYXNoLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9pYmFzZS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvaWJtRGIyLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9pY29udi5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvaW1hZ2UucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2ltYXAucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2luZm8ucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2luZ3Jlcy1paS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvaW5vdGlmeS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvanNvbi5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvbGRhcC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvbGlieG1sLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9semYucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL21haWxwYXJzZS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvbWJzdHJpbmcucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL21pc2MucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL21zcWwucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL215c3FsLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9teXNxbGkucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL215c3FsbmRNcy5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvbXlzcWxuZFFjLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9uZXR3b3JrLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9vY2k4LnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9vcGNhY2hlLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9vcGVuc3NsLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9vdXRjb250cm9sLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9wYXNzd29yZC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvcGNudGwucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3BjcmUucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3BkZi5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvcGdzcWwucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3Bvc2l4LnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9wcy5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvcHNwZWxsLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9yZWFkbGluZS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvcnBtaW5mby5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvcnJkLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9zZW0ucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3Nlc3Npb24ucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3NobW9wLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9zaW1wbGV4bWwucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3NvY2tldHMucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3NvZGl1bS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvc29sci5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvc3BsLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9zcWxzcnYucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3NzZGVlcC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvc3NoMi5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvc3RyZWFtLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9zdHJpbmdzLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9zd29vbGUucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3VvZGJjLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC91b3B6LnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC91cmwucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3Zhci5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQveGRpZmYucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3htbC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQveG1scnBjLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC95YW1sLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC95YXoucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3ppcC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvemxpYi5waHAiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJTYWZlXFwiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICJsaWIvIiwKICAgICAgICAgICAgICAgICAgICAgICAgImRlcHJlY2F0ZWQvIiwKICAgICAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC8iCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlBIUCBjb3JlIGZ1bmN0aW9ucyB0aGF0IHRocm93IGV4Y2VwdGlvbnMgaW5zdGVhZCBvZiByZXR1cm5pbmcgRkFMU0Ugb24gZXJyb3IiLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJpc3N1ZXMiOiAiaHR0cHM6Ly9naXRodWIuY29tL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9pc3N1ZXMiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vdGhlY29kaW5nbWFjaGluZS9zYWZlL3RyZWUvdjEuMy4zIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiaW5zdGFsbC1wYXRoIjogIi4uL3RoZWNvZGluZ21hY2hpbmUvc2FmZSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAid2ViLWF1dGgvY29zZS1saWIiLAogICAgICAgICAgICAidmVyc2lvbiI6ICJ2My4zLjEyIiwKICAgICAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICIzLjMuMTIuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLWF1dGgvY29zZS1saWIuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiZWZhNmVjMmJhNGU4NDBiYzEzMTZhNDkzOTczYzk5MTYwMjhhZmVlYiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3dlYi1hdXRoL2Nvc2UtbGliL3ppcGJhbGwvZWZhNmVjMmJhNGU4NDBiYzEzMTZhNDkzOTczYzk5MTYwMjhhZmVlYiIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImVmYTZlYzJiYTRlODQwYmMxMzE2YTQ5Mzk3M2M5OTE2MDI4YWZlZWIiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgImJlYmVybGVpL2Fzc2VydCI6ICJeMy4yIiwKICAgICAgICAgICAgICAgICJleHQtanNvbiI6ICIqIiwKICAgICAgICAgICAgICAgICJleHQtbWJzdHJpbmciOiAiKiIsCiAgICAgICAgICAgICAgICAiZXh0LW9wZW5zc2wiOiAiKiIsCiAgICAgICAgICAgICAgICAiZmdyb3NzZS9waHBhc24xIjogIl4yLjEiLAogICAgICAgICAgICAgICAgInBocCI6ICI+PTcuMiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyMS0xMi0wNFQxMjoxMzozNSswMDowMCIsCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiaW5zdGFsbGF0aW9uLXNvdXJjZSI6ICJkaXN0IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJDb3NlXFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkZsb3JlbnQgTW9yc2VsbGkiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5IgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJBbGwgY29udHJpYnV0b3JzIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi1hdXRoL2Nvc2UvY29udHJpYnV0b3JzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ0JPUiBPYmplY3QgU2lnbmluZyBhbmQgRW5jcnlwdGlvbiAoQ09TRSkgRm9yIFBIUCIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLWF1dGgiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiQ09TRSIsCiAgICAgICAgICAgICAgICAiUkZDODE1MiIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItYXV0aC9jb3NlLWxpYi90cmVlL3YzLjMuMTIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmdW5kaW5nIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vd3d3LnBhdHJlb24uY29tL0Zsb3JlbnRNb3JzZWxsaSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAicGF0cmVvbiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImluc3RhbGwtcGF0aCI6ICIuLi93ZWItYXV0aC9jb3NlLWxpYiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAid2ViLWF1dGgvbWV0YWRhdGEtc2VydmljZSIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogInYzLjMuMTIiLAogICAgICAgICAgICAidmVyc2lvbl9ub3JtYWxpemVkIjogIjMuMy4xMi4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItYXV0aC93ZWJhdXRobi1tZXRhZGF0YS1zZXJ2aWNlLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImVmNDBkMmI3YjY4YzQ5NjQyNDdkMTNmYWI1MmUyZmE4ZGJkNjUyNDYiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy93ZWItYXV0aC93ZWJhdXRobi1tZXRhZGF0YS1zZXJ2aWNlL3ppcGJhbGwvZWY0MGQyYjdiNjhjNDk2NDI0N2QxM2ZhYjUyZTJmYThkYmQ2NTI0NiIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImVmNDBkMmI3YjY4YzQ5NjQyNDdkMTNmYWI1MmUyZmE4ZGJkNjUyNDYiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgImJlYmVybGVpL2Fzc2VydCI6ICJeMy4yIiwKICAgICAgICAgICAgICAgICJleHQtanNvbiI6ICIqIiwKICAgICAgICAgICAgICAgICJsZWFndWUvdXJpIjogIl42LjAiLAogICAgICAgICAgICAgICAgInBocCI6ICI+PTcuMiIsCiAgICAgICAgICAgICAgICAicHNyL2h0dHAtY2xpZW50IjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBzci9odHRwLWZhY3RvcnkiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAicHNyL2xvZyI6ICJeMS4xIgogICAgICAgICAgICB9LAogICAgICAgICAgICAic3VnZ2VzdCI6IHsKICAgICAgICAgICAgICAgICJ3ZWItdG9rZW4vand0LWtleS1tZ210IjogIk1hbmRhdG9yeSBmb3IgZmV0Y2hpbmcgTWV0YWRhdGEgU3RhdGVtZW50IGZyb20gZGlzdGFudCBzb3VyY2VzIiwKICAgICAgICAgICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tZWNkc2EiOiAiTWFuZGF0b3J5IGZvciBmZXRjaGluZyBNZXRhZGF0YSBTdGF0ZW1lbnQgZnJvbSBkaXN0YW50IHNvdXJjZXMiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjEtMTEtMjFUMTE6MTQ6MzErMDA6MDAiLAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiV2ViYXV0aG5cXE1ldGFkYXRhU2VydmljZVxcIjogInNyYy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJGbG9yZW50IE1vcnNlbGxpIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQWxsIGNvbnRyaWJ1dG9ycyIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItYXV0aC9tZXRhZGF0YS1zZXJ2aWNlL2NvbnRyaWJ1dG9ycyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk1ldGFkYXRhIFNlcnZpY2UgZm9yIEZJRE8yL1dlYmF1dGhuIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItYXV0aCIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJGSURPMiIsCiAgICAgICAgICAgICAgICAiZmlkbyIsCiAgICAgICAgICAgICAgICAid2ViYXV0aG4iCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLWF1dGgvd2ViYXV0aG4tbWV0YWRhdGEtc2VydmljZS90cmVlL3YzLjMuMTIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmdW5kaW5nIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vd3d3LnBhdHJlb24uY29tL0Zsb3JlbnRNb3JzZWxsaSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAicGF0cmVvbiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImFiYW5kb25lZCI6ICJ3ZWItYXV0aC93ZWJhdXRobi1saWIiLAogICAgICAgICAgICAiaW5zdGFsbC1wYXRoIjogIi4uL3dlYi1hdXRoL21ldGFkYXRhLXNlcnZpY2UiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIndlYi1hdXRoL3dlYmF1dGhuLWxpYiIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogInYzLjMuMTIiLAogICAgICAgICAgICAidmVyc2lvbl9ub3JtYWxpemVkIjogIjMuMy4xMi4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItYXV0aC93ZWJhdXRobi1saWIuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiNWVmOWIyMWM4ZTlmOGE4MTdlNTI0YWM5MzI5MGQwOGE5ZjA2NWIzMyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3dlYi1hdXRoL3dlYmF1dGhuLWxpYi96aXBiYWxsLzVlZjliMjFjOGU5ZjhhODE3ZTUyNGFjOTMyOTBkMDhhOWYwNjViMzMiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI1ZWY5YjIxYzhlOWY4YTgxN2U1MjRhYzkzMjkwZDA4YTlmMDY1YjMzIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJiZWJlcmxlaS9hc3NlcnQiOiAiXjMuMiIsCiAgICAgICAgICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgICAgICAgICAiZXh0LW1ic3RyaW5nIjogIioiLAogICAgICAgICAgICAgICAgImV4dC1vcGVuc3NsIjogIioiLAogICAgICAgICAgICAgICAgImZncm9zc2UvcGhwYXNuMSI6ICJeMi4xIiwKICAgICAgICAgICAgICAgICJwaHAiOiAiPj03LjIiLAogICAgICAgICAgICAgICAgInBzci9odHRwLWNsaWVudCI6ICJeMS4wIiwKICAgICAgICAgICAgICAgICJwc3IvaHR0cC1mYWN0b3J5IjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBzci9odHRwLW1lc3NhZ2UiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAicHNyL2xvZyI6ICJeMS4xIiwKICAgICAgICAgICAgICAgICJyYW1zZXkvdXVpZCI6ICJeMy44fF40LjAiLAogICAgICAgICAgICAgICAgInNwb21reS1sYWJzL2Jhc2U2NHVybCI6ICJeMi4wIiwKICAgICAgICAgICAgICAgICJzcG9ta3ktbGFicy9jYm9yLXBocCI6ICJeMS4wfF4yLjAiLAogICAgICAgICAgICAgICAgInN5bWZvbnkvcHJvY2VzcyI6ICJeMy4wfF40LjB8XjUuMCIsCiAgICAgICAgICAgICAgICAidGhlY29kaW5nbWFjaGluZS9zYWZlIjogIl4xLjEiLAogICAgICAgICAgICAgICAgIndlYi1hdXRoL2Nvc2UtbGliIjogInNlbGYudmVyc2lvbiIsCiAgICAgICAgICAgICAgICAid2ViLWF1dGgvbWV0YWRhdGEtc2VydmljZSI6ICJzZWxmLnZlcnNpb24iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzdWdnZXN0IjogewogICAgICAgICAgICAgICAgInBzci9sb2ctaW1wbGVtZW50YXRpb24iOiAiUmVjb21tZW5kZWQgdG8gcmVjZWl2ZSBsb2dzIGZyb20gdGhlIGxpYnJhcnkiLAogICAgICAgICAgICAgICAgIndlYi10b2tlbi9qd3Qta2V5LW1nbXQiOiAiTWFuZGF0b3J5IGZvciB0aGUgQW5kcm9pZFNhZmV0eU5ldCBBdHRlc3RhdGlvbiBTdGF0ZW1lbnQgc3VwcG9ydCIsCiAgICAgICAgICAgICAgICAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLWVjZHNhIjogIlJlY29tbWVuZGVkIGZvciB0aGUgQW5kcm9pZFNhZmV0eU5ldCBBdHRlc3RhdGlvbiBTdGF0ZW1lbnQgc3VwcG9ydCIsCiAgICAgICAgICAgICAgICAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLWVkZHNhIjogIlJlY29tbWVuZGVkIGZvciB0aGUgQW5kcm9pZFNhZmV0eU5ldCBBdHRlc3RhdGlvbiBTdGF0ZW1lbnQgc3VwcG9ydCIsCiAgICAgICAgICAgICAgICAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLXJzYSI6ICJNYW5kYXRvcnkgZm9yIHRoZSBBbmRyb2lkU2FmZXR5TmV0IEF0dGVzdGF0aW9uIFN0YXRlbWVudCBzdXBwb3J0IgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDIyLTAyLTE4VDA3OjEzOjQ0KzAwOjAwIiwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIldlYmF1dGhuXFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkZsb3JlbnQgTW9yc2VsbGkiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5IgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJBbGwgY29udHJpYnV0b3JzIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi1hdXRoL3dlYmF1dGhuLWxpYnJhcnkvY29udHJpYnV0b3JzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRklETzIvV2ViYXV0aG4gU3VwcG9ydCBGb3IgUEhQIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItYXV0aCIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJGSURPMiIsCiAgICAgICAgICAgICAgICAiZmlkbyIsCiAgICAgICAgICAgICAgICAid2ViYXV0aG4iCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLWF1dGgvd2ViYXV0aG4tbGliL3RyZWUvdjMuMy4xMiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZ1bmRpbmciOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5IiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly93d3cucGF0cmVvbi5jb20vRmxvcmVudE1vcnNlbGxpIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJwYXRyZW9uIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiaW5zdGFsbC1wYXRoIjogIi4uL3dlYi1hdXRoL3dlYmF1dGhuLWxpYiIKICAgICAgICB9CiAgICBdLAogICAgImRldiI6IGZhbHNlLAogICAgImRldi1wYWNrYWdlLW5hbWVzIjogW10KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/installed.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgcmV0dXJuIGFycmF5KAogICAgJ3Jvb3QnID0+IGFycmF5KAogICAgICAgICduYW1lJyA9PiAnbWFzdGVyMzM5NS9tYXMtYXV0aGh1YicsCiAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnZGV2LW1hc3RlcicsCiAgICAgICAgJ3ZlcnNpb24nID0+ICdkZXYtbWFzdGVyJywKICAgICAgICAncmVmZXJlbmNlJyA9PiAnZmU0NjE4MmY2YWZjNGZjMDdlMDcyNWFjOWU1YmNkZjVmMWUxNzhmOScsCiAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi8uLi8nLAogICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICdkZXYnID0+IGZhbHNlLAogICAgKSwKICAgICd2ZXJzaW9ucycgPT4gYXJyYXkoCiAgICAgICAgJ2JlYmVybGVpL2Fzc2VydCcgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJ3YzLjMuMycsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMy4zLjMuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICdiNWZkOGVhY2Q4OTE1YTFiNjI3YjhiZmMwMjc4MDNmMTkzOTczNGRkJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vYmViZXJsZWkvYXNzZXJ0JywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ2JyaWNrL21hdGgnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICcwLjkuMycsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMC45LjMuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICdjYTU3ZDE4ZjAyOGY4NGY3NzdiMjE2OGNkMTkxMWIwZGVlMjM0M2FlJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vYnJpY2svbWF0aCcsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdmZ3Jvc3NlL3BocGFzbjEnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICd2Mi41LjAnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzIuNS4wLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnNDIwNjBlZDQ1MzQ0Nzg5ZmI5ZjIxZjlmMTg2NGZjNDdiOWUzNTA3YicsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL2Zncm9zc2UvcGhwYXNuMScsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdmaXJlYmFzZS9waHAtand0JyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAndjYuMTAuMCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnNi4xMC4wLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnYTQ5ZGI2ZjBhNTAzM2FlZjUxNDMyOTUzNDJmMWM5NTUyMWIwNzVmZicsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL2ZpcmViYXNlL3BocC1qd3QnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnZ3V6emxlaHR0cC9ndXp6bGUnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICc3LjEwLjAnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzcuMTAuMC4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJ2I1MWFjNzA3Y2ZhNDIwYjdiZmQ0ZTRkNWU1MTBiYTgwMDhlODIyYjQnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9ndXp6bGVodHRwL2d1enpsZScsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdndXp6bGVodHRwL3Byb21pc2VzJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnMi4zLjAnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzIuMy4wLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnNDgxNTU3YjEzMGVmMzc5MGNmODJiNzEzNjY3YjQzMDMwZGM5Yzk1NycsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL2d1enpsZWh0dHAvcHJvbWlzZXMnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnZ3V6emxlaHR0cC9wc3I3JyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnMi45LjAnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzIuOS4wLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnN2QwZWQ0MmYyOGU0MmQ2MTM1MmE3YTc5ZGU2ODJlNWU2N2ZlYzg4NCcsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL2d1enpsZWh0dHAvcHNyNycsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdsZWFndWUvb2F1dGgyLWNsaWVudCcgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJzIuOS4wJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICcyLjkuMC4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJzI2ZThjNWRhNGYzZDc4Y2VkZTcwMjFlMDliMTMzMGEwZmMwOTNkNWUnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9sZWFndWUvb2F1dGgyLWNsaWVudCcsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdsZWFndWUvdXJpJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnNi43LjInLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzYuNy4yLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnZDNiNTA4MTJkZDUxZjNmYmYxNzYzNDRjYzI5ODFkYjAzZDEwZmUwNicsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL2xlYWd1ZS91cmknLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnbGVhZ3VlL3VyaS1pbnRlcmZhY2VzJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnMi4zLjAnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzIuMy4wLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnMDBlN2UyOTQzZjc2ZDhjYjUwYzdkZmRjMmY2ZGVlMzU2ZTE1ZTM4MycsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL2xlYWd1ZS91cmktaW50ZXJmYWNlcycsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdtYXN0ZXIzMzk1L21hcy1hdXRoaHViJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnZGV2LW1hc3RlcicsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnZGV2LW1hc3RlcicsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICdmZTQ2MTgyZjZhZmM0ZmMwN2UwNzI1YWM5ZTViY2RmNWYxZTE3OGY5JywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vLi4vJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ29uZWxvZ2luL3BocC1zYW1sJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnNC4zLjInLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzQuMy4yLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnMjZiM2E0NzM0OTQxNWU1YjdhYTMwMGJhNGFiN2ZjMzE2YzY1ZjE5ZScsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL29uZWxvZ2luL3BocC1zYW1sJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ3Bzci9odHRwLWNsaWVudCcgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJzEuMC4zJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICcxLjAuMy4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJ2JiNTkwNmVkYzFjMzI0YzlhMDVhYTA4NzNkNDAxMTc5NDFlNWZhOTAnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9wc3IvaHR0cC1jbGllbnQnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAncHNyL2h0dHAtY2xpZW50LWltcGxlbWVudGF0aW9uJyA9PiBhcnJheSgKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgICAgICdwcm92aWRlZCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAwID0+ICcxLjAnLAogICAgICAgICAgICApLAogICAgICAgICksCiAgICAgICAgJ3Bzci9odHRwLWZhY3RvcnknID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICcxLjEuMCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMS4xLjAuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICcyYjQ3NjVmZGRmZTNiNTA4YWM2MmY4MjllODUyYjE1MDFkM2Y2ZThhJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vcHNyL2h0dHAtZmFjdG9yeScsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdwc3IvaHR0cC1mYWN0b3J5LWltcGxlbWVudGF0aW9uJyA9PiBhcnJheSgKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgICAgICdwcm92aWRlZCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAwID0+ICcxLjAnLAogICAgICAgICAgICApLAogICAgICAgICksCiAgICAgICAgJ3Bzci9odHRwLW1lc3NhZ2UnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICcxLjEnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzEuMS4wLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnY2I2Y2U0ODQ1Y2UzNGE4YWQ5ZTY4MTE3YzEwZWU5MGEyOTkxOWViYScsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3Bzci9odHRwLW1lc3NhZ2UnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAncHNyL2h0dHAtbWVzc2FnZS1pbXBsZW1lbnRhdGlvbicgPT4gYXJyYXkoCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICAgICAncHJvdmlkZWQnID0+IGFycmF5KAogICAgICAgICAgICAgICAgMCA9PiAnMS4wJywKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgICAgICdwc3IvbG9nJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnMS4xLjQnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzEuMS40LjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnZDQ5Njk1YjkwOWMzYjc2MjhiNjI4OWRiNTQ3OWExYzIwNDYwMWYxMScsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3Bzci9sb2cnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAncmFsb3VwaGllL2dldGFsbGhlYWRlcnMnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICczLjAuMycsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMy4wLjMuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICcxMjBiNjA1ZGZlYjk5NjgwOGMzMWI2NDc3MjkwYTcxNGQzNTZlODIyJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vcmFsb3VwaGllL2dldGFsbGhlYWRlcnMnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAncmFtc2V5L2NvbGxlY3Rpb24nID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICcxLjMuMCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMS4zLjAuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICdhZDc0NzVkMWM5ZTcwYjE5MGVjZmZjNThmMmQ5ODk0MTZhZjMzOWI0JywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vcmFtc2V5L2NvbGxlY3Rpb24nLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAncmFtc2V5L3V1aWQnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICc0LjIuMycsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnNC4yLjMuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICdmYzliYjdmYjUzODg2OTFmZDczNzNjZDQ0ZGNiNGQ2M2JiY2YyNGRmJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vcmFtc2V5L3V1aWQnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAncmh1bXNhYS91dWlkJyA9PiBhcnJheSgKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgICAgICdyZXBsYWNlZCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAwID0+ICc0LjIuMycsCiAgICAgICAgICAgICksCiAgICAgICAgKSwKICAgICAgICAncm9icmljaGFyZHMveG1sc2VjbGlicycgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJzMuMS41JywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICczLjEuNS4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJzAzMDYyYmU3ODE3OGNiYjVlOGY2MDVjZDI1NWRjMzJhMTQ5ODFmOTInLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9yb2JyaWNoYXJkcy94bWxzZWNsaWJzJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ3Nwb21reS1sYWJzL2Jhc2U2NHVybCcgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJ3YyLjAuNCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMi4wLjQuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICc3NzUyY2U5MzFlYzI4NWRhNGVkMWY0YzVhYTI3ZTQ1ZTA5N2JlNjFkJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vc3BvbWt5LWxhYnMvYmFzZTY0dXJsJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ3Nwb21reS1sYWJzL2Nib3ItcGhwJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAndjIuMS4wJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICcyLjEuMC4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJzI4ZTI3MTJjZmMwYjQ4ZmFlNjYxYTQ4ZmZjNjg5NmQ3YWJlODM2ODQnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9zcG9ta3ktbGFicy9jYm9yLXBocCcsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdzeW1mb255L2RlcHJlY2F0aW9uLWNvbnRyYWN0cycgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJ3YyLjUuNCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMi41LjQuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICc2MDUzODlmMmE3ZTU2MjVmMjczYjUzOTYwZGM0NmFlYWY5YzYyOTE4JywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vc3ltZm9ueS9kZXByZWNhdGlvbi1jb250cmFjdHMnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnc3ltZm9ueS9wb2x5ZmlsbC1jdHlwZScgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJ3YxLjM3LjAnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzEuMzcuMC4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJzE0MTA0NmE4Zjk0Nzc5NDhmZjI4NGZhNjViZTIwOTViYWFmYjk0ZjInLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9zeW1mb255L3BvbHlmaWxsLWN0eXBlJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ3N5bWZvbnkvcG9seWZpbGwtcGhwODAnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICd2MS4zNy4wJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICcxLjM3LjAuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICdkZmI1NTcyNmMzYTc2ZWEzYjY0NTlmY2ZkYTFlYzJkODBhNjgyNDExJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vc3ltZm9ueS9wb2x5ZmlsbC1waHA4MCcsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdzeW1mb255L3BvbHlmaWxsLXBocDgxJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAndjEuMzcuMCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMS4zNy4wLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnNGE0Y2ZjMmQyNTNjMjFhNWFkMGU1MzA3MWRmMjQ4ZWQ0OGM2Y2U1YycsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3N5bWZvbnkvcG9seWZpbGwtcGhwODEnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnc3ltZm9ueS9wcm9jZXNzJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAndjUuNC41MScsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnNS40LjUxLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnNDY3YmZjNTZmMThmNWVmNmQ1Y2NiMDkzMjRkN2U5ODhjMWMwYTk4ZicsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3N5bWZvbnkvcHJvY2VzcycsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICd0aGVjb2RpbmdtYWNoaW5lL3NhZmUnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICd2MS4zLjMnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzEuMy4zLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnYThhYjA4NzYzMDVhNGNkYWVmMzFiMjM1MGZjYjk4MTFiNTYwOGRiYycsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3RoZWNvZGluZ21hY2hpbmUvc2FmZScsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICd3ZWItYXV0aC9jb3NlLWxpYicgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJ3YzLjMuMTInLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzMuMy4xMi4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJ2VmYTZlYzJiYTRlODQwYmMxMzE2YTQ5Mzk3M2M5OTE2MDI4YWZlZWInLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi93ZWItYXV0aC9jb3NlLWxpYicsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICd3ZWItYXV0aC9tZXRhZGF0YS1zZXJ2aWNlJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAndjMuMy4xMicsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMy4zLjEyLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnZWY0MGQyYjdiNjhjNDk2NDI0N2QxM2ZhYjUyZTJmYThkYmQ2NTI0NicsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3dlYi1hdXRoL21ldGFkYXRhLXNlcnZpY2UnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnd2ViLWF1dGgvd2ViYXV0aG4tbGliJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAndjMuMy4xMicsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMy4zLjEyLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnNWVmOWIyMWM4ZTlmOGE4MTdlNTI0YWM5MzI5MGQwOGE5ZjA2NWIzMycsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3dlYi1hdXRoL3dlYmF1dGhuLWxpYicsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgKSwKKTsK]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/InstalledVersions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENvbXBvc2VyLgogKgogKiAoYykgTmlscyBBZGVybWFubiA8bmFkZXJtYW5AbmFkZXJtYW4uZGU+CiAqICAgICBKb3JkaSBCb2dnaWFubyA8ai5ib2dnaWFub0BzZWxkLmJlPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgQ29tcG9zZXI7Cgp1c2UgQ29tcG9zZXJcQXV0b2xvYWRcQ2xhc3NMb2FkZXI7CnVzZSBDb21wb3NlclxTZW12ZXJcVmVyc2lvblBhcnNlcjsKCi8qKgogKiBUaGlzIGNsYXNzIGlzIGNvcGllZCBpbiBldmVyeSBDb21wb3NlciBpbnN0YWxsZWQgcHJvamVjdCBhbmQgYXZhaWxhYmxlIHRvIGFsbAogKgogKiBTZWUgYWxzbyBodHRwczovL2dldGNvbXBvc2VyLm9yZy9kb2MvMDctcnVudGltZS5tZCNpbnN0YWxsZWQtdmVyc2lvbnMKICoKICogVG8gcmVxdWlyZSBpdHMgcHJlc2VuY2UsIHlvdSBjYW4gcmVxdWlyZSBgY29tcG9zZXItcnVudGltZS1hcGkgXjIuMGAKICoKICogQGZpbmFsCiAqLwpjbGFzcyBJbnN0YWxsZWRWZXJzaW9ucwp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwgaWYgc2V0IChieSByZWZsZWN0aW9uIGJ5IENvbXBvc2VyKSwgdGhpcyBzaG91bGQgYmUgc2V0IHRvIHRoZSBwYXRoIHdoZXJlIHRoaXMgY2xhc3MgaXMgYmVpbmcgY29waWVkIHRvCiAgICAgKiBAaW50ZXJuYWwKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJHNlbGZEaXIgPSBudWxsOwoKICAgIC8qKgogICAgICogQHZhciBtaXhlZFtdfG51bGwKICAgICAqIEBwc2FsbS12YXIgYXJyYXl7cm9vdDogYXJyYXl7bmFtZTogc3RyaW5nLCBwcmV0dHlfdmVyc2lvbjogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcsIHJlZmVyZW5jZTogc3RyaW5nfG51bGwsIHR5cGU6IHN0cmluZywgaW5zdGFsbF9wYXRoOiBzdHJpbmcsIGFsaWFzZXM6IHN0cmluZ1tdLCBkZXY6IGJvb2x9LCB2ZXJzaW9uczogYXJyYXk8c3RyaW5nLCBhcnJheXtwcmV0dHlfdmVyc2lvbj86IHN0cmluZywgdmVyc2lvbj86IHN0cmluZywgcmVmZXJlbmNlPzogc3RyaW5nfG51bGwsIHR5cGU/OiBzdHJpbmcsIGluc3RhbGxfcGF0aD86IHN0cmluZywgYWxpYXNlcz86IHN0cmluZ1tdLCBkZXZfcmVxdWlyZW1lbnQ6IGJvb2wsIHJlcGxhY2VkPzogc3RyaW5nW10sIHByb3ZpZGVkPzogc3RyaW5nW119Pn18YXJyYXl7fXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljICRpbnN0YWxsZWQ7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJGluc3RhbGxlZElzTG9jYWxEaXI7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2x8bnVsbAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkY2FuR2V0VmVuZG9yczsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXlbXQogICAgICogQHBzYWxtLXZhciBhcnJheTxzdHJpbmcsIGFycmF5e3Jvb3Q6IGFycmF5e25hbWU6IHN0cmluZywgcHJldHR5X3ZlcnNpb246IHN0cmluZywgdmVyc2lvbjogc3RyaW5nLCByZWZlcmVuY2U6IHN0cmluZ3xudWxsLCB0eXBlOiBzdHJpbmcsIGluc3RhbGxfcGF0aDogc3RyaW5nLCBhbGlhc2VzOiBzdHJpbmdbXSwgZGV2OiBib29sfSwgdmVyc2lvbnM6IGFycmF5PHN0cmluZywgYXJyYXl7cHJldHR5X3ZlcnNpb24/OiBzdHJpbmcsIHZlcnNpb24/OiBzdHJpbmcsIHJlZmVyZW5jZT86IHN0cmluZ3xudWxsLCB0eXBlPzogc3RyaW5nLCBpbnN0YWxsX3BhdGg/OiBzdHJpbmcsIGFsaWFzZXM/OiBzdHJpbmdbXSwgZGV2X3JlcXVpcmVtZW50OiBib29sLCByZXBsYWNlZD86IHN0cmluZ1tdLCBwcm92aWRlZD86IHN0cmluZ1tdfT59PgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkaW5zdGFsbGVkQnlWZW5kb3IgPSBhcnJheSgpOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHBhY2thZ2UgbmFtZXMgd2hpY2ggYXJlIHByZXNlbnQsIGVpdGhlciBieSBiZWluZyBpbnN0YWxsZWQsIHJlcGxhY2VkIG9yIHByb3ZpZGVkCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICogQHBzYWxtLXJldHVybiBsaXN0PHN0cmluZz4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRJbnN0YWxsZWRQYWNrYWdlcygpCiAgICB7CiAgICAgICAgJHBhY2thZ2VzID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoIChzZWxmOjpnZXRJbnN0YWxsZWQoKSBhcyAkaW5zdGFsbGVkKSB7CiAgICAgICAgICAgICRwYWNrYWdlc1tdID0gYXJyYXlfa2V5cygkaW5zdGFsbGVkWyd2ZXJzaW9ucyddKTsKICAgICAgICB9CgogICAgICAgIGlmICgxID09PSBcY291bnQoJHBhY2thZ2VzKSkgewogICAgICAgICAgICByZXR1cm4gJHBhY2thZ2VzWzBdOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGFycmF5X2tleXMoYXJyYXlfZmxpcChcY2FsbF91c2VyX2Z1bmNfYXJyYXkoJ2FycmF5X21lcmdlJywgJHBhY2thZ2VzKSkpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHBhY2thZ2UgbmFtZXMgd2l0aCBhIHNwZWNpZmljIHR5cGUgZS5nLiAnbGlicmFyeScKICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgICR0eXBlCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKiBAcHNhbG0tcmV0dXJuIGxpc3Q8c3RyaW5nPgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEluc3RhbGxlZFBhY2thZ2VzQnlUeXBlKCR0eXBlKQogICAgewogICAgICAgICRwYWNrYWdlc0J5VHlwZSA9IGFycmF5KCk7CgogICAgICAgIGZvcmVhY2ggKHNlbGY6OmdldEluc3RhbGxlZCgpIGFzICRpbnN0YWxsZWQpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJGluc3RhbGxlZFsndmVyc2lvbnMnXSBhcyAkbmFtZSA9PiAkcGFja2FnZSkgewogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRwYWNrYWdlWyd0eXBlJ10pICYmICRwYWNrYWdlWyd0eXBlJ10gPT09ICR0eXBlKSB7CiAgICAgICAgICAgICAgICAgICAgJHBhY2thZ2VzQnlUeXBlW10gPSAkbmFtZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRwYWNrYWdlc0J5VHlwZTsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBwYWNrYWdlIGlzIGluc3RhbGxlZAogICAgICoKICAgICAqIFRoaXMgYWxzbyByZXR1cm5zIHRydWUgaWYgdGhlIHBhY2thZ2UgbmFtZSBpcyBwcm92aWRlZCBvciByZXBsYWNlZCBieSBhbm90aGVyIHBhY2thZ2UKICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAkcGFja2FnZU5hbWUKICAgICAqIEBwYXJhbSAgYm9vbCAgICRpbmNsdWRlRGV2UmVxdWlyZW1lbnRzCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0luc3RhbGxlZCgkcGFja2FnZU5hbWUsICRpbmNsdWRlRGV2UmVxdWlyZW1lbnRzID0gdHJ1ZSkKICAgIHsKICAgICAgICBmb3JlYWNoIChzZWxmOjpnZXRJbnN0YWxsZWQoKSBhcyAkaW5zdGFsbGVkKSB7CiAgICAgICAgICAgIGlmIChpc3NldCgkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGluY2x1ZGVEZXZSZXF1aXJlbWVudHMgfHwgIWlzc2V0KCRpbnN0YWxsZWRbJ3ZlcnNpb25zJ11bJHBhY2thZ2VOYW1lXVsnZGV2X3JlcXVpcmVtZW50J10pIHx8ICRpbnN0YWxsZWRbJ3ZlcnNpb25zJ11bJHBhY2thZ2VOYW1lXVsnZGV2X3JlcXVpcmVtZW50J10gPT09IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gcGFja2FnZSBzYXRpc2ZpZXMgYSB2ZXJzaW9uIGNvbnN0cmFpbnQKICAgICAqCiAgICAgKiBlLmcuIElmIHlvdSB3YW50IHRvIGtub3cgd2hldGhlciB2ZXJzaW9uIDIuMysgb2YgcGFja2FnZSBmb28vYmFyIGlzIGluc3RhbGxlZCwgeW91IHdvdWxkIGNhbGw6CiAgICAgKgogICAgICogICBDb21wb3NlclxJbnN0YWxsZWRWZXJzaW9uczo6c2F0aXNmaWVzKG5ldyBWZXJzaW9uUGFyc2VyLCAnZm9vL2JhcicsICdeMi4zJykKICAgICAqCiAgICAgKiBAcGFyYW0gIFZlcnNpb25QYXJzZXIgJHBhcnNlciAgICAgIEluc3RhbGwgY29tcG9zZXIvc2VtdmVyIHRvIGhhdmUgYWNjZXNzIHRvIHRoaXMgY2xhc3MgYW5kIGZ1bmN0aW9uYWxpdHkKICAgICAqIEBwYXJhbSAgc3RyaW5nICAgICAgICAkcGFja2FnZU5hbWUKICAgICAqIEBwYXJhbSAgc3RyaW5nfG51bGwgICAkY29uc3RyYWludCAgQSB2ZXJzaW9uIGNvbnN0cmFpbnQgdG8gY2hlY2sgZm9yLCBpZiB5b3UgcGFzcyBvbmUgeW91IGhhdmUgdG8gbWFrZSBzdXJlIGNvbXBvc2VyL3NlbXZlciBpcyByZXF1aXJlZCBieSB5b3VyIHBhY2thZ2UKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNhdGlzZmllcyhWZXJzaW9uUGFyc2VyICRwYXJzZXIsICRwYWNrYWdlTmFtZSwgJGNvbnN0cmFpbnQpCiAgICB7CiAgICAgICAgJGNvbnN0cmFpbnQgPSAkcGFyc2VyLT5wYXJzZUNvbnN0cmFpbnRzKChzdHJpbmcpICRjb25zdHJhaW50KTsKICAgICAgICAkcHJvdmlkZWQgPSAkcGFyc2VyLT5wYXJzZUNvbnN0cmFpbnRzKHNlbGY6OmdldFZlcnNpb25SYW5nZXMoJHBhY2thZ2VOYW1lKSk7CgogICAgICAgIHJldHVybiAkcHJvdmlkZWQtPm1hdGNoZXMoJGNvbnN0cmFpbnQpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHZlcnNpb24gY29uc3RyYWludCByZXByZXNlbnRpbmcgYWxsIHRoZSByYW5nZShzKSB3aGljaCBhcmUgaW5zdGFsbGVkIGZvciBhIGdpdmVuIHBhY2thZ2UKICAgICAqCiAgICAgKiBJdCBpcyBlYXNpZXIgdG8gdXNlIHRoaXMgdmlhIGlzSW5zdGFsbGVkKCkgd2l0aCB0aGUgJGNvbnN0cmFpbnQgYXJndW1lbnQgaWYgeW91IG5lZWQgdG8gY2hlY2sKICAgICAqIHdoZXRoZXIgYSBnaXZlbiB2ZXJzaW9uIG9mIGEgcGFja2FnZSBpcyBpbnN0YWxsZWQsIGFuZCBub3QganVzdCB3aGV0aGVyIGl0IGV4aXN0cwogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICRwYWNrYWdlTmFtZQogICAgICogQHJldHVybiBzdHJpbmcgVmVyc2lvbiBjb25zdHJhaW50IHVzYWJsZSB3aXRoIGNvbXBvc2VyL3NlbXZlcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFZlcnNpb25SYW5nZXMoJHBhY2thZ2VOYW1lKQogICAgewogICAgICAgIGZvcmVhY2ggKHNlbGY6OmdldEluc3RhbGxlZCgpIGFzICRpbnN0YWxsZWQpIHsKICAgICAgICAgICAgaWYgKCFpc3NldCgkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHJhbmdlcyA9IGFycmF5KCk7CiAgICAgICAgICAgIGlmIChpc3NldCgkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV1bJ3ByZXR0eV92ZXJzaW9uJ10pKSB7CiAgICAgICAgICAgICAgICAkcmFuZ2VzW10gPSAkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV1bJ3ByZXR0eV92ZXJzaW9uJ107CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ2FsaWFzZXMnLCAkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICAkcmFuZ2VzID0gYXJyYXlfbWVyZ2UoJHJhbmdlcywgJGluc3RhbGxlZFsndmVyc2lvbnMnXVskcGFja2FnZU5hbWVdWydhbGlhc2VzJ10pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdyZXBsYWNlZCcsICRpbnN0YWxsZWRbJ3ZlcnNpb25zJ11bJHBhY2thZ2VOYW1lXSkpIHsKICAgICAgICAgICAgICAgICRyYW5nZXMgPSBhcnJheV9tZXJnZSgkcmFuZ2VzLCAkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV1bJ3JlcGxhY2VkJ10pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdwcm92aWRlZCcsICRpbnN0YWxsZWRbJ3ZlcnNpb25zJ11bJHBhY2thZ2VOYW1lXSkpIHsKICAgICAgICAgICAgICAgICRyYW5nZXMgPSBhcnJheV9tZXJnZSgkcmFuZ2VzLCAkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV1bJ3Byb3ZpZGVkJ10pOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gaW1wbG9kZSgnIHx8ICcsICRyYW5nZXMpOwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IFxPdXRPZkJvdW5kc0V4Y2VwdGlvbignUGFja2FnZSAiJyAuICRwYWNrYWdlTmFtZSAuICciIGlzIG5vdCBpbnN0YWxsZWQnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSAgc3RyaW5nICAgICAgJHBhY2thZ2VOYW1lCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIElmIHRoZSBwYWNrYWdlIGlzIGJlaW5nIHJlcGxhY2VkIG9yIHByb3ZpZGVkIGJ1dCBpcyBub3QgcmVhbGx5IGluc3RhbGxlZCwgbnVsbCB3aWxsIGJlIHJldHVybmVkIGFzIHZlcnNpb24sIHVzZSBzYXRpc2ZpZXMgb3IgZ2V0VmVyc2lvblJhbmdlcyBpZiB5b3UgbmVlZCB0byBrbm93IGlmIGEgZ2l2ZW4gdmVyc2lvbiBpcyBwcmVzZW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VmVyc2lvbigkcGFja2FnZU5hbWUpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoc2VsZjo6Z2V0SW5zdGFsbGVkKCkgYXMgJGluc3RhbGxlZCkgewogICAgICAgICAgICBpZiAoIWlzc2V0KCRpbnN0YWxsZWRbJ3ZlcnNpb25zJ11bJHBhY2thZ2VOYW1lXSkpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIWlzc2V0KCRpbnN0YWxsZWRbJ3ZlcnNpb25zJ11bJHBhY2thZ2VOYW1lXVsndmVyc2lvbiddKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV1bJ3ZlcnNpb24nXTsKICAgICAgICB9CgogICAgICAgIHRocm93IG5ldyBcT3V0T2ZCb3VuZHNFeGNlcHRpb24oJ1BhY2thZ2UgIicgLiAkcGFja2FnZU5hbWUgLiAnIiBpcyBub3QgaW5zdGFsbGVkJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgICAgICRwYWNrYWdlTmFtZQogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBJZiB0aGUgcGFja2FnZSBpcyBiZWluZyByZXBsYWNlZCBvciBwcm92aWRlZCBidXQgaXMgbm90IHJlYWxseSBpbnN0YWxsZWQsIG51bGwgd2lsbCBiZSByZXR1cm5lZCBhcyB2ZXJzaW9uLCB1c2Ugc2F0aXNmaWVzIG9yIGdldFZlcnNpb25SYW5nZXMgaWYgeW91IG5lZWQgdG8ga25vdyBpZiBhIGdpdmVuIHZlcnNpb24gaXMgcHJlc2VudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFByZXR0eVZlcnNpb24oJHBhY2thZ2VOYW1lKQogICAgewogICAgICAgIGZvcmVhY2ggKHNlbGY6OmdldEluc3RhbGxlZCgpIGFzICRpbnN0YWxsZWQpIHsKICAgICAgICAgICAgaWYgKCFpc3NldCgkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCFpc3NldCgkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV1bJ3ByZXR0eV92ZXJzaW9uJ10pKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICRpbnN0YWxsZWRbJ3ZlcnNpb25zJ11bJHBhY2thZ2VOYW1lXVsncHJldHR5X3ZlcnNpb24nXTsKICAgICAgICB9CgogICAgICAgIHRocm93IG5ldyBcT3V0T2ZCb3VuZHNFeGNlcHRpb24oJ1BhY2thZ2UgIicgLiAkcGFja2FnZU5hbWUgLiAnIiBpcyBub3QgaW5zdGFsbGVkJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgICAgICRwYWNrYWdlTmFtZQogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBJZiB0aGUgcGFja2FnZSBpcyBiZWluZyByZXBsYWNlZCBvciBwcm92aWRlZCBidXQgaXMgbm90IHJlYWxseSBpbnN0YWxsZWQsIG51bGwgd2lsbCBiZSByZXR1cm5lZCBhcyByZWZlcmVuY2UKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRSZWZlcmVuY2UoJHBhY2thZ2VOYW1lKQogICAgewogICAgICAgIGZvcmVhY2ggKHNlbGY6OmdldEluc3RhbGxlZCgpIGFzICRpbnN0YWxsZWQpIHsKICAgICAgICAgICAgaWYgKCFpc3NldCgkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCFpc3NldCgkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV1bJ3JlZmVyZW5jZSddKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV1bJ3JlZmVyZW5jZSddOwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IFxPdXRPZkJvdW5kc0V4Y2VwdGlvbignUGFja2FnZSAiJyAuICRwYWNrYWdlTmFtZSAuICciIGlzIG5vdCBpbnN0YWxsZWQnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSAgc3RyaW5nICAgICAgJHBhY2thZ2VOYW1lCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIElmIHRoZSBwYWNrYWdlIGlzIGJlaW5nIHJlcGxhY2VkIG9yIHByb3ZpZGVkIGJ1dCBpcyBub3QgcmVhbGx5IGluc3RhbGxlZCwgbnVsbCB3aWxsIGJlIHJldHVybmVkIGFzIGluc3RhbGwgcGF0aC4gUGFja2FnZXMgb2YgdHlwZSBtZXRhcGFja2FnZXMgYWxzbyBoYXZlIGEgbnVsbCBpbnN0YWxsIHBhdGguCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0SW5zdGFsbFBhdGgoJHBhY2thZ2VOYW1lKQogICAgewogICAgICAgIGZvcmVhY2ggKHNlbGY6OmdldEluc3RhbGxlZCgpIGFzICRpbnN0YWxsZWQpIHsKICAgICAgICAgICAgaWYgKCFpc3NldCgkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIGlzc2V0KCRpbnN0YWxsZWRbJ3ZlcnNpb25zJ11bJHBhY2thZ2VOYW1lXVsnaW5zdGFsbF9wYXRoJ10pID8gJGluc3RhbGxlZFsndmVyc2lvbnMnXVskcGFja2FnZU5hbWVdWydpbnN0YWxsX3BhdGgnXSA6IG51bGw7CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgXE91dE9mQm91bmRzRXhjZXB0aW9uKCdQYWNrYWdlICInIC4gJHBhY2thZ2VOYW1lIC4gJyIgaXMgbm90IGluc3RhbGxlZCcpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheQogICAgICogQHBzYWxtLXJldHVybiBhcnJheXtuYW1lOiBzdHJpbmcsIHByZXR0eV92ZXJzaW9uOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgcmVmZXJlbmNlOiBzdHJpbmd8bnVsbCwgdHlwZTogc3RyaW5nLCBpbnN0YWxsX3BhdGg6IHN0cmluZywgYWxpYXNlczogc3RyaW5nW10sIGRldjogYm9vbH0KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRSb290UGFja2FnZSgpCiAgICB7CiAgICAgICAgJGluc3RhbGxlZCA9IHNlbGY6OmdldEluc3RhbGxlZCgpOwoKICAgICAgICByZXR1cm4gJGluc3RhbGxlZFswXVsncm9vdCddOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmF3IGluc3RhbGxlZC5waHAgZGF0YSBmb3IgY3VzdG9tIGltcGxlbWVudGF0aW9ucwogICAgICoKICAgICAqIEBkZXByZWNhdGVkIFVzZSBnZXRBbGxSYXdEYXRhKCkgaW5zdGVhZCB3aGljaCByZXR1cm5zIGFsbCBkYXRhc2V0cyBmb3IgYWxsIGF1dG9sb2FkZXJzIHByZXNlbnQgaW4gdGhlIHByb2Nlc3MuIGdldFJhd0RhdGEgb25seSByZXR1cm5zIHRoZSBmaXJzdCBkYXRhc2V0IGxvYWRlZCwgd2hpY2ggbWF5IG5vdCBiZSB3aGF0IHlvdSBleHBlY3QuCiAgICAgKiBAcmV0dXJuIGFycmF5W10KICAgICAqIEBwc2FsbS1yZXR1cm4gYXJyYXl7cm9vdDogYXJyYXl7bmFtZTogc3RyaW5nLCBwcmV0dHlfdmVyc2lvbjogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcsIHJlZmVyZW5jZTogc3RyaW5nfG51bGwsIHR5cGU6IHN0cmluZywgaW5zdGFsbF9wYXRoOiBzdHJpbmcsIGFsaWFzZXM6IHN0cmluZ1tdLCBkZXY6IGJvb2x9LCB2ZXJzaW9uczogYXJyYXk8c3RyaW5nLCBhcnJheXtwcmV0dHlfdmVyc2lvbj86IHN0cmluZywgdmVyc2lvbj86IHN0cmluZywgcmVmZXJlbmNlPzogc3RyaW5nfG51bGwsIHR5cGU/OiBzdHJpbmcsIGluc3RhbGxfcGF0aD86IHN0cmluZywgYWxpYXNlcz86IHN0cmluZ1tdLCBkZXZfcmVxdWlyZW1lbnQ6IGJvb2wsIHJlcGxhY2VkPzogc3RyaW5nW10sIHByb3ZpZGVkPzogc3RyaW5nW119Pn0KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRSYXdEYXRhKCkKICAgIHsKICAgICAgICBAdHJpZ2dlcl9lcnJvcignZ2V0UmF3RGF0YSBvbmx5IHJldHVybnMgdGhlIGZpcnN0IGRhdGFzZXQgbG9hZGVkLCB3aGljaCBtYXkgbm90IGJlIHdoYXQgeW91IGV4cGVjdC4gVXNlIGdldEFsbFJhd0RhdGEoKSBpbnN0ZWFkIHdoaWNoIHJldHVybnMgYWxsIGRhdGFzZXRzIGZvciBhbGwgYXV0b2xvYWRlcnMgcHJlc2VudCBpbiB0aGUgcHJvY2Vzcy4nLCBFX1VTRVJfREVQUkVDQVRFRCk7CgogICAgICAgIGlmIChudWxsID09PSBzZWxmOjokaW5zdGFsbGVkKSB7CiAgICAgICAgICAgIC8vIG9ubHkgcmVxdWlyZSB0aGUgaW5zdGFsbGVkLnBocCBmaWxlIGlmIHRoaXMgZmlsZSBpcyBsb2FkZWQgZnJvbSBpdHMgZHVtcGVkIGxvY2F0aW9uLAogICAgICAgICAgICAvLyBhbmQgbm90IGZyb20gaXRzIHNvdXJjZSBsb2NhdGlvbiBpbiB0aGUgY29tcG9zZXIvY29tcG9zZXIgcGFja2FnZSwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb21wb3Nlci9jb21wb3Nlci9pc3N1ZXMvOTkzNwogICAgICAgICAgICBpZiAoc3Vic3RyKF9fRElSX18sIC04LCAxKSAhPT0gJ0MnKSB7CiAgICAgICAgICAgICAgICBzZWxmOjokaW5zdGFsbGVkID0gaW5jbHVkZSBfX0RJUl9fIC4gJy9pbnN0YWxsZWQucGhwJzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHNlbGY6OiRpbnN0YWxsZWQgPSBhcnJheSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc2VsZjo6JGluc3RhbGxlZDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHJhdyBkYXRhIG9mIGFsbCBpbnN0YWxsZWQucGhwIHdoaWNoIGFyZSBjdXJyZW50bHkgbG9hZGVkIGZvciBjdXN0b20gaW1wbGVtZW50YXRpb25zCiAgICAgKgogICAgICogQHJldHVybiBhcnJheVtdCiAgICAgKiBAcHNhbG0tcmV0dXJuIGxpc3Q8YXJyYXl7cm9vdDogYXJyYXl7bmFtZTogc3RyaW5nLCBwcmV0dHlfdmVyc2lvbjogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcsIHJlZmVyZW5jZTogc3RyaW5nfG51bGwsIHR5cGU6IHN0cmluZywgaW5zdGFsbF9wYXRoOiBzdHJpbmcsIGFsaWFzZXM6IHN0cmluZ1tdLCBkZXY6IGJvb2x9LCB2ZXJzaW9uczogYXJyYXk8c3RyaW5nLCBhcnJheXtwcmV0dHlfdmVyc2lvbj86IHN0cmluZywgdmVyc2lvbj86IHN0cmluZywgcmVmZXJlbmNlPzogc3RyaW5nfG51bGwsIHR5cGU/OiBzdHJpbmcsIGluc3RhbGxfcGF0aD86IHN0cmluZywgYWxpYXNlcz86IHN0cmluZ1tdLCBkZXZfcmVxdWlyZW1lbnQ6IGJvb2wsIHJlcGxhY2VkPzogc3RyaW5nW10sIHByb3ZpZGVkPzogc3RyaW5nW119Pn0+CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0QWxsUmF3RGF0YSgpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmdldEluc3RhbGxlZCgpOwogICAgfQoKICAgIC8qKgogICAgICogTGV0cyB5b3UgcmVsb2FkIHRoZSBzdGF0aWMgYXJyYXkgZnJvbSBhbm90aGVyIGZpbGUKICAgICAqCiAgICAgKiBUaGlzIGlzIG9ubHkgdXNlZnVsIGZvciBjb21wbGV4IGludGVncmF0aW9ucyBpbiB3aGljaCBhIHByb2plY3QgbmVlZHMgdG8gdXNlCiAgICAgKiB0aGlzIGNsYXNzIGJ1dCB0aGVuIGFsc28gbmVlZHMgdG8gZXhlY3V0ZSBhbm90aGVyIHByb2plY3QncyBhdXRvbG9hZGVyIGluIHByb2Nlc3MsCiAgICAgKiBhbmQgd2FudHMgdG8gZW5zdXJlIGJvdGggcHJvamVjdHMgaGF2ZSBhY2Nlc3MgdG8gdGhlaXIgdmVyc2lvbiBvZiBpbnN0YWxsZWQucGhwLgogICAgICoKICAgICAqIEEgdHlwaWNhbCBjYXNlIHdvdWxkIGJlIFBIUFVuaXQsIHdoZXJlIGl0IHdvdWxkIG5lZWQgdG8gbWFrZSBzdXJlIGl0IHJlYWRzIGFsbAogICAgICogdGhlIGRhdGEgaXQgbmVlZHMgZnJvbSB0aGlzIGNsYXNzLCB0aGVuIGNhbGwgcmVsb2FkKCkgd2l0aAogICAgICogYHJlcXVpcmUgJENXRC92ZW5kb3IvY29tcG9zZXIvaW5zdGFsbGVkLnBocGAgKG9yIHNpbWlsYXIpIGFzIGlucHV0IHRvIG1ha2Ugc3VyZQogICAgICogdGhlIHByb2plY3QgaW4gd2hpY2ggaXQgcnVucyBjYW4gdGhlbiBhbHNvIHVzZSB0aGlzIGNsYXNzIHNhZmVseSwgd2l0aG91dAogICAgICogaW50ZXJmZXJlbmNlIGJldHdlZW4gUEhQVW5pdCdzIGRlcGVuZGVuY2llcyBhbmQgdGhlIHByb2plY3QncyBkZXBlbmRlbmNpZXMuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheVtdICRkYXRhIEEgdmVuZG9yL2NvbXBvc2VyL2luc3RhbGxlZC5waHAgZGF0YSBzZXQKICAgICAqIEByZXR1cm4gdm9pZAogICAgICoKICAgICAqIEBwc2FsbS1wYXJhbSBhcnJheXtyb290OiBhcnJheXtuYW1lOiBzdHJpbmcsIHByZXR0eV92ZXJzaW9uOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgcmVmZXJlbmNlOiBzdHJpbmd8bnVsbCwgdHlwZTogc3RyaW5nLCBpbnN0YWxsX3BhdGg6IHN0cmluZywgYWxpYXNlczogc3RyaW5nW10sIGRldjogYm9vbH0sIHZlcnNpb25zOiBhcnJheTxzdHJpbmcsIGFycmF5e3ByZXR0eV92ZXJzaW9uPzogc3RyaW5nLCB2ZXJzaW9uPzogc3RyaW5nLCByZWZlcmVuY2U/OiBzdHJpbmd8bnVsbCwgdHlwZT86IHN0cmluZywgaW5zdGFsbF9wYXRoPzogc3RyaW5nLCBhbGlhc2VzPzogc3RyaW5nW10sIGRldl9yZXF1aXJlbWVudDogYm9vbCwgcmVwbGFjZWQ/OiBzdHJpbmdbXSwgcHJvdmlkZWQ/OiBzdHJpbmdbXX0+fSAkZGF0YQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlbG9hZCgkZGF0YSkKICAgIHsKICAgICAgICBzZWxmOjokaW5zdGFsbGVkID0gJGRhdGE7CiAgICAgICAgc2VsZjo6JGluc3RhbGxlZEJ5VmVuZG9yID0gYXJyYXkoKTsKCiAgICAgICAgLy8gd2hlbiB1c2luZyByZWxvYWQsIHdlIGRpc2FibGUgdGhlIGR1cGxpY2F0ZSBwcm90ZWN0aW9uIHRvIGVuc3VyZSB0aGF0IHNlbGY6OiRpbnN0YWxsZWQgZGF0YSBpcwogICAgICAgIC8vIGFsd2F5cyByZXR1cm5lZCwgYnV0IHdlIGNhbm5vdCBrbm93IHdoZXRoZXIgaXQgY29tZXMgZnJvbSB0aGUgaW5zdGFsbGVkLnBocCBpbiBfX0RJUl9fIG9yIG5vdCwKICAgICAgICAvLyBzbyB3ZSBoYXZlIHRvIGFzc3VtZSBpdCBkb2VzIG5vdCwgYW5kIHRoYXQgbWF5IHJlc3VsdCBpbiBkdXBsaWNhdGUgZGF0YSBiZWluZyByZXR1cm5lZCB3aGVuIGxpc3RpbmcKICAgICAgICAvLyBhbGwgaW5zdGFsbGVkIHBhY2thZ2VzIGZvciBleGFtcGxlCiAgICAgICAgc2VsZjo6JGluc3RhbGxlZElzTG9jYWxEaXIgPSBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGdldFNlbGZEaXIoKQogICAgewogICAgICAgIGlmIChzZWxmOjokc2VsZkRpciA9PT0gbnVsbCkgewogICAgICAgICAgICBzZWxmOjokc2VsZkRpciA9IHN0cnRyKF9fRElSX18sICdcXCcsICcvJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc2VsZjo6JHNlbGZEaXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5W10KICAgICAqIEBwc2FsbS1yZXR1cm4gbGlzdDxhcnJheXtyb290OiBhcnJheXtuYW1lOiBzdHJpbmcsIHByZXR0eV92ZXJzaW9uOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgcmVmZXJlbmNlOiBzdHJpbmd8bnVsbCwgdHlwZTogc3RyaW5nLCBpbnN0YWxsX3BhdGg6IHN0cmluZywgYWxpYXNlczogc3RyaW5nW10sIGRldjogYm9vbH0sIHZlcnNpb25zOiBhcnJheTxzdHJpbmcsIGFycmF5e3ByZXR0eV92ZXJzaW9uPzogc3RyaW5nLCB2ZXJzaW9uPzogc3RyaW5nLCByZWZlcmVuY2U/OiBzdHJpbmd8bnVsbCwgdHlwZT86IHN0cmluZywgaW5zdGFsbF9wYXRoPzogc3RyaW5nLCBhbGlhc2VzPzogc3RyaW5nW10sIGRldl9yZXF1aXJlbWVudDogYm9vbCwgcmVwbGFjZWQ/OiBzdHJpbmdbXSwgcHJvdmlkZWQ/OiBzdHJpbmdbXX0+fT4KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZ2V0SW5zdGFsbGVkKCkKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gc2VsZjo6JGNhbkdldFZlbmRvcnMpIHsKICAgICAgICAgICAgc2VsZjo6JGNhbkdldFZlbmRvcnMgPSBtZXRob2RfZXhpc3RzKCdDb21wb3NlclxBdXRvbG9hZFxDbGFzc0xvYWRlcicsICdnZXRSZWdpc3RlcmVkTG9hZGVycycpOwogICAgICAgIH0KCiAgICAgICAgJGluc3RhbGxlZCA9IGFycmF5KCk7CiAgICAgICAgJGNvcGllZExvY2FsRGlyID0gZmFsc2U7CgogICAgICAgIGlmIChzZWxmOjokY2FuR2V0VmVuZG9ycykgewogICAgICAgICAgICAkc2VsZkRpciA9IHNlbGY6OmdldFNlbGZEaXIoKTsKICAgICAgICAgICAgZm9yZWFjaCAoQ2xhc3NMb2FkZXI6OmdldFJlZ2lzdGVyZWRMb2FkZXJzKCkgYXMgJHZlbmRvckRpciA9PiAkbG9hZGVyKSB7CiAgICAgICAgICAgICAgICAkdmVuZG9yRGlyID0gc3RydHIoJHZlbmRvckRpciwgJ1xcJywgJy8nKTsKICAgICAgICAgICAgICAgIGlmIChpc3NldChzZWxmOjokaW5zdGFsbGVkQnlWZW5kb3JbJHZlbmRvckRpcl0pKSB7CiAgICAgICAgICAgICAgICAgICAgJGluc3RhbGxlZFtdID0gc2VsZjo6JGluc3RhbGxlZEJ5VmVuZG9yWyR2ZW5kb3JEaXJdOwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHZlbmRvckRpci4nL2NvbXBvc2VyL2luc3RhbGxlZC5waHAnKSkgewogICAgICAgICAgICAgICAgICAgIC8qKiBAdmFyIGFycmF5e3Jvb3Q6IGFycmF5e25hbWU6IHN0cmluZywgcHJldHR5X3ZlcnNpb246IHN0cmluZywgdmVyc2lvbjogc3RyaW5nLCByZWZlcmVuY2U6IHN0cmluZ3xudWxsLCB0eXBlOiBzdHJpbmcsIGluc3RhbGxfcGF0aDogc3RyaW5nLCBhbGlhc2VzOiBzdHJpbmdbXSwgZGV2OiBib29sfSwgdmVyc2lvbnM6IGFycmF5PHN0cmluZywgYXJyYXl7cHJldHR5X3ZlcnNpb24/OiBzdHJpbmcsIHZlcnNpb24/OiBzdHJpbmcsIHJlZmVyZW5jZT86IHN0cmluZ3xudWxsLCB0eXBlPzogc3RyaW5nLCBpbnN0YWxsX3BhdGg/OiBzdHJpbmcsIGFsaWFzZXM/OiBzdHJpbmdbXSwgZGV2X3JlcXVpcmVtZW50OiBib29sLCByZXBsYWNlZD86IHN0cmluZ1tdLCBwcm92aWRlZD86IHN0cmluZ1tdfT59ICRyZXF1aXJlZCAqLwogICAgICAgICAgICAgICAgICAgICRyZXF1aXJlZCA9IHJlcXVpcmUgJHZlbmRvckRpci4nL2NvbXBvc2VyL2luc3RhbGxlZC5waHAnOwogICAgICAgICAgICAgICAgICAgIHNlbGY6OiRpbnN0YWxsZWRCeVZlbmRvclskdmVuZG9yRGlyXSA9ICRyZXF1aXJlZDsKICAgICAgICAgICAgICAgICAgICAkaW5zdGFsbGVkW10gPSAkcmVxdWlyZWQ7CiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGY6OiRpbnN0YWxsZWQgPT09IG51bGwgJiYgJHZlbmRvckRpci4nL2NvbXBvc2VyJyA9PT0gJHNlbGZEaXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6JGluc3RhbGxlZCA9ICRyZXF1aXJlZDsKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6JGluc3RhbGxlZElzTG9jYWxEaXIgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChzZWxmOjokaW5zdGFsbGVkSXNMb2NhbERpciAmJiAkdmVuZG9yRGlyLicvY29tcG9zZXInID09PSAkc2VsZkRpcikgewogICAgICAgICAgICAgICAgICAgICRjb3BpZWRMb2NhbERpciA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChudWxsID09PSBzZWxmOjokaW5zdGFsbGVkKSB7CiAgICAgICAgICAgIC8vIG9ubHkgcmVxdWlyZSB0aGUgaW5zdGFsbGVkLnBocCBmaWxlIGlmIHRoaXMgZmlsZSBpcyBsb2FkZWQgZnJvbSBpdHMgZHVtcGVkIGxvY2F0aW9uLAogICAgICAgICAgICAvLyBhbmQgbm90IGZyb20gaXRzIHNvdXJjZSBsb2NhdGlvbiBpbiB0aGUgY29tcG9zZXIvY29tcG9zZXIgcGFja2FnZSwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb21wb3Nlci9jb21wb3Nlci9pc3N1ZXMvOTkzNwogICAgICAgICAgICBpZiAoc3Vic3RyKF9fRElSX18sIC04LCAxKSAhPT0gJ0MnKSB7CiAgICAgICAgICAgICAgICAvKiogQHZhciBhcnJheXtyb290OiBhcnJheXtuYW1lOiBzdHJpbmcsIHByZXR0eV92ZXJzaW9uOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgcmVmZXJlbmNlOiBzdHJpbmd8bnVsbCwgdHlwZTogc3RyaW5nLCBpbnN0YWxsX3BhdGg6IHN0cmluZywgYWxpYXNlczogc3RyaW5nW10sIGRldjogYm9vbH0sIHZlcnNpb25zOiBhcnJheTxzdHJpbmcsIGFycmF5e3ByZXR0eV92ZXJzaW9uPzogc3RyaW5nLCB2ZXJzaW9uPzogc3RyaW5nLCByZWZlcmVuY2U/OiBzdHJpbmd8bnVsbCwgdHlwZT86IHN0cmluZywgaW5zdGFsbF9wYXRoPzogc3RyaW5nLCBhbGlhc2VzPzogc3RyaW5nW10sIGRldl9yZXF1aXJlbWVudDogYm9vbCwgcmVwbGFjZWQ/OiBzdHJpbmdbXSwgcHJvdmlkZWQ/OiBzdHJpbmdbXX0+fSAkcmVxdWlyZWQgKi8KICAgICAgICAgICAgICAgICRyZXF1aXJlZCA9IHJlcXVpcmUgX19ESVJfXyAuICcvaW5zdGFsbGVkLnBocCc7CiAgICAgICAgICAgICAgICBzZWxmOjokaW5zdGFsbGVkID0gJHJlcXVpcmVkOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgc2VsZjo6JGluc3RhbGxlZCA9IGFycmF5KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChzZWxmOjokaW5zdGFsbGVkICE9PSBhcnJheSgpICYmICEkY29waWVkTG9jYWxEaXIpIHsKICAgICAgICAgICAgJGluc3RhbGxlZFtdID0gc2VsZjo6JGluc3RhbGxlZDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkaW5zdGFsbGVkOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[CkNvcHlyaWdodCAoYykgTmlscyBBZGVybWFubiwgSm9yZGkgQm9nZ2lhbm8KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQKdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgpUSEUgU09GVFdBUkUuCgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/platform_check.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIHBsYXRmb3JtX2NoZWNrLnBocCBAZ2VuZXJhdGVkIGJ5IENvbXBvc2VyCgokaXNzdWVzID0gYXJyYXkoKTsKCmlmICghKFBIUF9WRVJTSU9OX0lEID49IDcwNDAwKSkgewogICAgJGlzc3Vlc1tdID0gJ1lvdXIgQ29tcG9zZXIgZGVwZW5kZW5jaWVzIHJlcXVpcmUgYSBQSFAgdmVyc2lvbiAiPj0gNy40LjAiLiBZb3UgYXJlIHJ1bm5pbmcgJyAuIFBIUF9WRVJTSU9OIC4gJy4nOwp9CgppZiAoJGlzc3VlcykgewogICAgaWYgKCFoZWFkZXJzX3NlbnQoKSkgewogICAgICAgIGhlYWRlcignSFRUUC8xLjEgNTAwIEludGVybmFsIFNlcnZlciBFcnJvcicpOwogICAgfQogICAgaWYgKCFpbmlfZ2V0KCdkaXNwbGF5X2Vycm9ycycpKSB7CiAgICAgICAgaWYgKFBIUF9TQVBJID09PSAnY2xpJyB8fCBQSFBfU0FQSSA9PT0gJ3BocGRiZycpIHsKICAgICAgICAgICAgZndyaXRlKFNUREVSUiwgJ0NvbXBvc2VyIGRldGVjdGVkIGlzc3VlcyBpbiB5b3VyIHBsYXRmb3JtOicgLiBQSFBfRU9MLlBIUF9FT0wgLiBpbXBsb2RlKFBIUF9FT0wsICRpc3N1ZXMpIC4gUEhQX0VPTC5QSFBfRU9MKTsKICAgICAgICB9IGVsc2VpZiAoIWhlYWRlcnNfc2VudCgpKSB7CiAgICAgICAgICAgIGVjaG8gJ0NvbXBvc2VyIGRldGVjdGVkIGlzc3VlcyBpbiB5b3VyIHBsYXRmb3JtOicgLiBQSFBfRU9MLlBIUF9FT0wgLiBzdHJfcmVwbGFjZSgnWW91IGFyZSBydW5uaW5nICcuUEhQX1ZFUlNJT04uJy4nLCAnJywgaW1wbG9kZShQSFBfRU9MLCAkaXNzdWVzKSkgLiBQSFBfRU9MLlBIUF9FT0w7CiAgICAgICAgfQogICAgfQogICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKAogICAgICAgICdDb21wb3NlciBkZXRlY3RlZCBpc3N1ZXMgaW4geW91ciBwbGF0Zm9ybTogJyAuIGltcGxvZGUoJyAnLCAkaXNzdWVzKQogICAgKTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/CHANGELOG.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyMjIyB2Mi41LjAgKDIwMjItMTIpCiogU3VwcG9ydCBQSFAgOC4yIFsjOTldKGh0dHBzOi8vZ2l0aHViLmNvbS9mZ3Jvc3NlL1BIUEFTTjEvcHVsbC85OSkKKiBQSFAgOCBjb21wYXRpYmlsaXR5IGZpeCBmb3IgRGF0ZVRpbWU6OmdldExhc3RFcnJvcnMgWyM5OF0oaHR0cHM6Ly9naXRodWIuY29tL2Zncm9zc2UvUEhQQVNOMS9wdWxsLzk4KQoqIFN1cHBvcnQgbW9yZSBPSURzIFsjOTVdKGh0dHBzOi8vZ2l0aHViLmNvbS9mZ3Jvc3NlL1BIUEFTTjEvcHVsbC85NSkKKiBGSU5BTCBSRUxFQVNFLiBMaWJyYXJ5IGlzIG5vdyBubyBsb25nZXIgYWN0aXZlbHkgbWFpbnRhaW5lZCBhbmQgbWFya2VkIGFzIGFyY2hpdmVkIG9uIEdpdEh1YgoKIyMjIyB2Mi40LjAgKDIwMjEtMTIpCiogRHJvcCBzdXBwb3J0IGZvciBQSFAgNy4wIFsjODldKGh0dHBzOi8vZ2l0aHViLmNvbS9mZ3Jvc3NlL1BIUEFTTjEvcHVsbC84OSkKCiMjIyMgdjIuMy4xICgyMDIxLTEyKQoqIEFkZCBgI1tcUmV0dXJuVHlwZVdpbGxDaGFuZ2VdYCBhdHRyaWJ1dGVzIGZvciBQSFAgOC4xIGNvbXBhdGliaWxpdHkgWyM4N10oaHR0cHM6Ly9naXRodWIuY29tL2Zncm9zc2UvUEhQQVNOMS9wdWxsLzg3KQoKIyMjIyB2Mi4zLjAgKDIwMjEtMDQpCiogQWxsb3cgY3JlYXRpbmcgYW4gdW5zaWduZWQgQ1NSIGFuZCBhZGRpbmcgdGhlIHNpZ25hdHVyZSBsYXRlciBbIzgyXShodHRwczovL2dpdGh1Yi5jb20vZmdyb3NzZS9QSFBBU04xL3B1bGwvODIpCgojIyMjIHYyLjIuMCAoMjAyMC0wOCkKKiBzdXBwb3J0IHBvbHlmaWxscyBmb3IgYmNtYXRoIGFuZCBnbXAsIGFuZCBhZGQgYSBjb21wb3Nlci5qc29uCiAgc3VnZ2VzdGlvbiBmb3IgdGhlIGBwaHBzZWNsaWIvYmNtYXRoX3BvbHlmaWxsYCBmb3Igc2VydmVycyB1bmFibGUKICB0byBpbnN0YWxsIFBIUCB0aGUgZ21wIG9yIGJjbWF0aCBleHRlbnNpb25zLgoKIyMjIyB2LjIuMS4xICYgJnYuMi4wLjIgKDIwMTgtMTIpCiogYWRkIHN0cmljdGVyIHZhbGlkYXRpb24gYXJvdW5kIHNvbWUgc3RydWN0dXJlcywgaGlnaGxpZ2hlZAogIGJ5IHd5Y2hlcHJvb2YgdGVzdCBzdWl0ZQoKIyMjIyB2LjIuMS4wICgyMDE4LTAzKQoqIGFkZCBzdXBwb3J0IGZvciBgYmNtYXRoYCBleHRlbnNpb24gKG1ha2luZyBgZ21wYCBvcHRpb25hbCkgWyM2OF0oaHR0cHM6Ly9naXRodWIuY29tL2Zncm9zc2UvUEhQQVNOMS9wdWxsLzY4KQoKIyMjIyB2LjIuMC4xICYgdi4xLjUuMyAoMjAxNy0xMikKKiBhZGQgLmdpdGF0dHJpYnV0ZXMgZmlsZSB0byBwcmV2ZW50IGV4YW1wbGVzIGFuZCB0ZXN0cyB0byBiZSBpbnN0YWxsZWQgdmlhIGNvbXBvc2VyIHdoZW4gLS1wcmVmZXItZGlzdCB3YXMgc2V0CgojIyMjIHYuMi4wLjAgKDIwMTctMDgpCiogcmVuYW1lIGBGR1xBU04xXE9iamVjdGAgdG8gYEZHXEFTTjFcQVNOT2JqZWN0YCBiZWNhdXNlIGBPYmplY3RgIGlzIGEgc3BlY2lhbCBjbGFzcyBuYW1lIGluIHRoZSBuZXh0IG1ham9yIFBIUCByZWxlYXNlCiAgLSB3aGVuIHlvdSB1cGdyYWRlIHlvdSBoYXZlIHRvIGFkYXB0IGFsbCBjb3JyZXNwb25kaW5nIGB1c2VgIGFuZCBgZXh0ZW5kc2Agc3RhdGVtZW50cyBhcyB3ZWxsIGFzIHR5cGUgaGludHMgYW5kIGFsbAogICAgdXNhZ2VzIG9mIGBPYmplY3Q6OmZyb21CaW5hcnko4oCmKWAuCiogIGdlbmVyYWxseSBkcm9wIFBIUCA1LjYgc3VwcG9ydAoKIyMjIyB2LjEuNS4yICgyMDE2LTEwLTI5KQoqIGFsbG93IGVtcHR5IG9jdGV0IHN0cmluZ3MKCiMjIyMgdi4xLjUuMSAoMjAxNS0xMC0wMikKKiBhZGQga2V5d29yZHMgdG8gY29tcG9zZXIuanNvbiAodGhpcyBpcyBhIHZlcnNpb24gb24gaXRzIG93biBzbyB0aGUga2V5d29yZHMgYXJlIGZvdW5kIG9uIGEgc3RhYmxlIHZlcnNpb24gYXQgcGFja2FnaXN0Lm9yZykKCiMjIyMgdi4xLjUuMCAoMjAxNS0xMC0zMCkKKiBmaXggYSBidWcgdGhhdCB3b3VsZCBwcmV2ZW50IHlvdSBmcm9tIGRlY29kaW5nIGNvbnRleHQgc3BlY2lmaWMgdGFncyBvbiBtdWx0aXBsZSBvYmplY3RzIFsjNTddKGh0dHBzOi8vZ2l0aHViLmNvbS9mZ3Jvc3NlL1BIUEFTTjEvaXNzdWVzLzU3KQogIC0gYEV4cGxpY2l0bHlUYWdnZWRPYmplY3Q6Ol9fY29uc3RydWN0YCBkb2VzIG5vdyBhY2NlcHQgbXVsdGlwbGUgb2JqZWN0cyB0byBiZSB0YWdnZWQgd2l0aCBhIHNpbmdsZSB0YWcKICAtIGBFeHBsaWNpdGx5VGFnZ2VkT2JqZWN0OjpnZXRDb250ZW50YCB3aWxsIG5vdyBhbHdheXMgcmV0dXJuIGFuIGFycmF5IChldmVuIGlmIG9ubHkgb25lIG9iamVjdCBpcyB0YWdnZWQpCgojIyMjIHYuMS40LjIgKDIwMTUtMDktMjkpCiogZml4IGEgYnVnIHRoYXQgd291bGQgcHJldmVudCB5b3UgZnJvbSBkZWNvZGluZyBlbXB0eSB0YWdnZWQgb2JqZWN0cyBbIzU3XShodHRwczovL2dpdGh1Yi5jb20vZmdyb3NzZS9QSFBBU04xL2lzc3Vlcy81NykKCiMjIyMgdi4xLjQuMQoqIGltcHJvdmUgZXhjZXB0aW9uIG1lc3NhZ2VzIGFuZCBnZW5lcmFsIGVycm9yIGhhbmRsaW5nIFsjNTVdKGh0dHBzIDovL2dpdGh1Yi5jb20vZmdyb3NzZS9QSFBBU04xL3B1bGwvNTUpCgojIyMjIHYuMS40LjAKKiAqKnJlcXVpcmUgUEhQIDUuNioqCiogc3VwcG9ydCBiaWcgaW50ZWdlcnMgKGNsb3NlcyAjMSBhbmQgIzM3KQoqIGVuZm9yY2Ugb25lIGNvZGUgc3R5bGUgdmlhIFtzdHlsZWNpLmlvXVs5XQoqIHRyYWNrIGNvZGUgY292ZXJhZ2UgdmlhIFtjb3ZlcmFsbHMuaW9dWzEwXQoqIHJlcGxhY2Ugb2Jzb2xldGUgYEZHXEFTTjFcRXhjZXB0aW9uXEdlbmVyYWxFeGNlcHRpb25gIHdpdGggYFxFeGNlcHRpb25gCiogYENvbnN0cnVjdGAgKGBTZXF1ZW5jZWAsIGBTZXRgKSBkb2VzIG5vdyBpbXBsZW1lbnQgYEFycmF5QWNjZXNzYCwgYENvdW50YWJsZWAgYW5kIGBJdGVyYXRvcmAgc28gaXRzIGVhc2llciB0byB1c2UKKiBhZGQgW2BUZW1wbGF0ZVBhcnNlcmBdWzExXQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAiZmdyb3NzZS9waHBhc24xIiwKICAgICJkZXNjcmlwdGlvbiI6ICJBIFBIUCBGcmFtZXdvcmsgdGhhdCBhbGxvd3MgeW91IHRvIGVuY29kZSBhbmQgZGVjb2RlIGFyYml0cmFyeSBBU04uMSBzdHJ1Y3R1cmVzIHVzaW5nIHRoZSBJVFUtVCBYLjY5MCBFbmNvZGluZyBSdWxlcy4iLAogICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL0ZHcm9zc2UvUEhQQVNOMSIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJGcmllZHJpY2ggR3Jvw59lIiwKICAgICAgICAgICAgImVtYWlsIjogImZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9GR3Jvc3NlIiwKICAgICAgICAgICAgInJvbGUiOiAiQXV0aG9yIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJBbGwgY29udHJpYnV0b3JzIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9GR3Jvc3NlL1BIUEFTTjEvY29udHJpYnV0b3JzIgogICAgICAgIH0KICAgIF0sCiAgICAia2V5d29yZHMiOiBbICJ4NjkwIiwgInguNjkwIiwgInguNTA5IiwgIng1MDkiLCAiYXNuMSIsICJhc24uMSIsICJiZXIiLCAiZGVyIiwgImJpbmFyeSIsICJlbmNvZGluZyIsICJkZWNvZGluZyIgXSwKCiAgICAicmVxdWlyZSI6IHsKICAgICAgICAicGhwIjogIl43LjEgfHwgXjguMCIKICAgIH0sCiAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNy4wIHx8IF44LjAgfHwgXjkuMCIsCiAgICAgICAgInBocC1jb3ZlcmFsbHMvcGhwLWNvdmVyYWxscyI6ICJ+Mi4wIgogICAgfSwKICAgICJzdWdnZXN0IjogewogICAgICAgICJleHQtZ21wIjogIkdNUCBpcyB0aGUgcHJlZmVycmVkIGV4dGVuc2lvbiBmb3IgYmlnIGludGVnZXIgY2FsY3VsYXRpb25zIiwKICAgICAgICAiZXh0LWJjbWF0aCI6ICJCQ21hdGggaXMgdGhlIGZhbGxiYWNrIGV4dGVuc2lvbiBmb3IgYmlnIGludGVnZXIgY2FsY3VsYXRpb25zIiwKICAgICAgICAicGhwc2VjbGliL2JjbWF0aF9jb21wYXQiOiAiQkNtYXRoIHBvbHlmaWxsIGZvciBzZXJ2ZXJzIHdoZXJlIG5laXRoZXIgR01QIG5vciBCQ21hdGggaXMgYXZhaWxhYmxlIiwKICAgICAgICAiZXh0LWN1cmwiOiAiRm9yIGxvYWRpbmcgT0lEIGluZm9ybWF0aW9uIGZyb20gdGhlIHdlYiBpZiB0aGV5IGhhdmUgbm90IGJlZSBkZWZpbmVkIHN0YXRpY2FsbHkiCiAgICB9LAogICAgImF1dG9sb2FkIjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIkZHXFwiOiAibGliLyIKICAgICAgICB9CiAgICB9LAogICAgImF1dG9sb2FkLWRldiI6IHsKICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICJGR1xcVGVzdFxcIjogInRlc3RzLyIKICAgICAgICB9CiAgICB9LAogICAgImV4dHJhIjogewogICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjIuMC54LWRldiIKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/AbstractString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCnVzZSBFeGNlcHRpb247CgphYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFN0cmluZyBleHRlbmRzIEFTTk9iamVjdCBpbXBsZW1lbnRzIFBhcnNhYmxlCnsKICAgIC8qKiBAdmFyIHN0cmluZyAqLwogICAgcHJvdGVjdGVkICR2YWx1ZTsKICAgIHByaXZhdGUgJGNoZWNrU3RyaW5nRm9ySWxsZWdhbENoYXJzID0gdHJ1ZTsKICAgIHByaXZhdGUgJGFsbG93ZWRDaGFyYWN0ZXJzID0gW107CgogICAgLyoqCiAgICAgKiBUaGUgYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgQVNOLjEgY2xhc3NlcyB3aGljaCByZXByZXNlbnQgc29tZSBzdHJpbmcgb2YgY2hhcmFjdGVyLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHN0cmluZykKICAgIHsKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkc3RyaW5nOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnZhbHVlOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBhbGxvd0NoYXJhY3RlcigkY2hhcmFjdGVyKQogICAgewogICAgICAgICR0aGlzLT5hbGxvd2VkQ2hhcmFjdGVyc1tdID0gJGNoYXJhY3RlcjsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYWxsb3dDaGFyYWN0ZXJzKC4uLiRjaGFyYWN0ZXJzKQogICAgewogICAgICAgIGZvcmVhY2ggKCRjaGFyYWN0ZXJzIGFzICRjaGFyYWN0ZXIpIHsKICAgICAgICAgICAgJHRoaXMtPmFsbG93ZWRDaGFyYWN0ZXJzW10gPSAkY2hhcmFjdGVyOwogICAgICAgIH0KICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYWxsb3dOdW1iZXJzKCkKICAgIHsKICAgICAgICBmb3JlYWNoIChyYW5nZSgnMCcsICc5JykgYXMgJGNoYXIpIHsKICAgICAgICAgICAgJHRoaXMtPmFsbG93ZWRDaGFyYWN0ZXJzW10gPSAoc3RyaW5nKSAkY2hhcjsKICAgICAgICB9CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGFsbG93QWxsTGV0dGVycygpCiAgICB7CiAgICAgICAgJHRoaXMtPmFsbG93U21hbGxMZXR0ZXJzKCk7CiAgICAgICAgJHRoaXMtPmFsbG93Q2FwaXRhbExldHRlcnMoKTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYWxsb3dTbWFsbExldHRlcnMoKQogICAgewogICAgICAgIGZvcmVhY2ggKHJhbmdlKCdhJywgJ3onKSBhcyAkY2hhcikgewogICAgICAgICAgICAkdGhpcy0+YWxsb3dlZENoYXJhY3RlcnNbXSA9ICRjaGFyOwogICAgICAgIH0KICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYWxsb3dDYXBpdGFsTGV0dGVycygpCiAgICB7CiAgICAgICAgZm9yZWFjaCAocmFuZ2UoJ0EnLCAnWicpIGFzICRjaGFyKSB7CiAgICAgICAgICAgICR0aGlzLT5hbGxvd2VkQ2hhcmFjdGVyc1tdID0gJGNoYXI7CiAgICAgICAgfQogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBhbGxvd1NwYWNlcygpCiAgICB7CiAgICAgICAgJHRoaXMtPmFsbG93ZWRDaGFyYWN0ZXJzW10gPSAnICc7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGFsbG93QWxsKCkKICAgIHsKICAgICAgICAkdGhpcy0+Y2hlY2tTdHJpbmdGb3JJbGxlZ2FsQ2hhcnMgPSBmYWxzZTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuIHN0cmxlbigkdGhpcy0+dmFsdWUpOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRFbmNvZGVkVmFsdWUoKQogICAgewogICAgICAgIGlmICgkdGhpcy0+Y2hlY2tTdHJpbmdGb3JJbGxlZ2FsQ2hhcnMpIHsKICAgICAgICAgICAgJHRoaXMtPmNoZWNrU3RyaW5nKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPnZhbHVlOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja1N0cmluZygpCiAgICB7CiAgICAgICAgJHN0cmluZ0xlbmd0aCA9ICR0aGlzLT5nZXRDb250ZW50TGVuZ3RoKCk7CiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJHN0cmluZ0xlbmd0aDsgJGkrKykgewogICAgICAgICAgICBpZiAoaW5fYXJyYXkoJHRoaXMtPnZhbHVlWyRpXSwgJHRoaXMtPmFsbG93ZWRDaGFyYWN0ZXJzKSA9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgJHR5cGVOYW1lID0gSWRlbnRpZmllcjo6Z2V0TmFtZSgkdGhpcy0+Z2V0VHlwZSgpKTsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkNvdWxkIG5vdCBjcmVhdGUgYSB7JHR5cGVOYW1lfSBmcm9tIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UgJ3skdGhpcy0+dmFsdWV9Jy4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gMCkKICAgIHsKICAgICAgICAkcGFyc2VkT2JqZWN0ID0gbmV3IHN0YXRpYygnJyk7CgogICAgICAgIHNlbGY6OnBhcnNlSWRlbnRpZmllcigkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdLCAkcGFyc2VkT2JqZWN0LT5nZXRUeXBlKCksICRvZmZzZXRJbmRleCsrKTsKICAgICAgICAkY29udGVudExlbmd0aCA9IHNlbGY6OnBhcnNlQ29udGVudExlbmd0aCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAkc3RyaW5nID0gc3Vic3RyKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgsICRjb250ZW50TGVuZ3RoKTsKICAgICAgICAkb2Zmc2V0SW5kZXggKz0gJGNvbnRlbnRMZW5ndGg7CgogICAgICAgICRwYXJzZWRPYmplY3QtPnZhbHVlID0gJHN0cmluZzsKICAgICAgICAkcGFyc2VkT2JqZWN0LT5zZXRDb250ZW50TGVuZ3RoKCRjb250ZW50TGVuZ3RoKTsKICAgICAgICByZXR1cm4gJHBhcnNlZE9iamVjdDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzVmFsaWQoJHN0cmluZykKICAgIHsKICAgICAgICAkdGVzdE9iamVjdCA9IG5ldyBzdGF0aWMoJHN0cmluZyk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHRlc3RPYmplY3QtPmNoZWNrU3RyaW5nKCk7CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGV4Y2VwdGlvbikgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/AbstractTime.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCnVzZSBEYXRlSW50ZXJ2YWw7CnVzZSBEYXRlVGltZTsKdXNlIERhdGVUaW1lWm9uZTsKdXNlIEV4Y2VwdGlvbjsKCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0VGltZSBleHRlbmRzIEFTTk9iamVjdAp7CiAgICAvKiogQHZhciBEYXRlVGltZSAqLwogICAgcHJvdGVjdGVkICR2YWx1ZTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGRhdGVUaW1lID0gbnVsbCwgJGRhdGVUaW1lWm9uZSA9ICdVVEMnKQogICAgewogICAgICAgIGlmICgkZGF0ZVRpbWUgPT0gbnVsbCB8fCBpc19zdHJpbmcoJGRhdGVUaW1lKSkgewogICAgICAgICAgICAkdGltZVpvbmUgPSBuZXcgRGF0ZVRpbWVab25lKCRkYXRlVGltZVpvbmUpOwogICAgICAgICAgICAkZGF0ZVRpbWVPYmplY3QgPSBuZXcgRGF0ZVRpbWUoJGRhdGVUaW1lLCAkdGltZVpvbmUpOwogICAgICAgICAgICBpZiAoJGRhdGVUaW1lT2JqZWN0ID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAkZXJyb3JNZXNzYWdlID0gJHRoaXMtPmdldExhc3REYXRlVGltZUVycm9ycygpOwogICAgICAgICAgICAgICAgJGNsYXNzTmFtZSA9IElkZW50aWZpZXI6OmdldE5hbWUoJHRoaXMtPmdldFR5cGUoKSk7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKHNwcmludGYoIkNvdWxkIG5vdCBjcmVhdGUgJXMgZnJvbSBkYXRlIHRpbWUgc3RyaW5nICclcyc6ICVzIiwgJGNsYXNzTmFtZSwgJGRhdGVUaW1lLCAkZXJyb3JNZXNzYWdlKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGRhdGVUaW1lID0gJGRhdGVUaW1lT2JqZWN0OwogICAgICAgIH0gZWxzZWlmICghJGRhdGVUaW1lIGluc3RhbmNlb2YgRGF0ZVRpbWUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignSW52YWxpZCBmaXJzdCBhcmd1bWVudCBmb3Igc29tZSBpbnN0YW5jZSBvZiBBYnN0cmFjdFRpbWUgY29uc3RydWN0b3InKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT52YWx1ZSA9ICRkYXRlVGltZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TGFzdERhdGVUaW1lRXJyb3JzKCkKICAgIHsKICAgICAgICAkbWVzc2FnZXMgPSAnJzsKICAgICAgICAkbGFzdEVycm9ycyA9IERhdGVUaW1lOjpnZXRMYXN0RXJyb3JzKCkgPzogWydlcnJvcnMnID0+IFtdXTsKICAgICAgICBmb3JlYWNoICgkbGFzdEVycm9yc1snZXJyb3JzJ10gYXMgJGVycm9yTWVzc2FnZSkgewogICAgICAgICAgICAkbWVzc2FnZXMgLj0gInskZXJyb3JNZXNzYWdlfSwgIjsKICAgICAgICB9CgogICAgICAgIHJldHVybiBzdWJzdHIoJG1lc3NhZ2VzLCAwLCAtMik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWUtPmZvcm1hdCgiWS1tLWRcdEg6aTpzIik7CiAgICB9CgogICAgcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBleHRyYWN0VGltZVpvbmVEYXRhKCYkYmluYXJ5RGF0YSwgJiRvZmZzZXRJbmRleCwgRGF0ZVRpbWUgJGRhdGVUaW1lKQogICAgewogICAgICAgICRzaWduID0gJGJpbmFyeURhdGFbJG9mZnNldEluZGV4KytdOwogICAgICAgICR0aW1lT2Zmc2V0SG91cnMgICA9IGludHZhbChzdWJzdHIoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCwgMikpOwogICAgICAgICR0aW1lT2Zmc2V0TWludXRlcyA9IGludHZhbChzdWJzdHIoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCArIDIsIDIpKTsKICAgICAgICAkb2Zmc2V0SW5kZXggKz0gNDsKCiAgICAgICAgJGludGVydmFsID0gbmV3IERhdGVJbnRlcnZhbCgiUFR7JHRpbWVPZmZzZXRIb3Vyc31IeyR0aW1lT2Zmc2V0TWludXRlc31NIik7CiAgICAgICAgaWYgKCRzaWduID09ICcrJykgewogICAgICAgICAgICAkZGF0ZVRpbWUtPnN1YigkaW50ZXJ2YWwpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRkYXRlVGltZS0+YWRkKCRpbnRlcnZhbCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGRhdGVUaW1lOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/ASNObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCnVzZSBGR1xBU04xXEV4Y2VwdGlvblxQYXJzZXJFeGNlcHRpb247CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxCaXRTdHJpbmc7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxCb29sZWFuOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcRW51bWVyYXRlZDsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXEdlbmVyYWxpemVkVGltZTsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXEludGVnZXI7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxOdWxsT2JqZWN0Owp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcT2JqZWN0SWRlbnRpZmllcjsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXFJlbGF0aXZlT2JqZWN0SWRlbnRpZmllcjsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXE9jdGV0U3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcU2VxdWVuY2U7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxTZXQ7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxVVENUaW1lOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcSUE1U3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcUHJpbnRhYmxlU3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcTnVtZXJpY1N0cmluZzsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXFVURjhTdHJpbmc7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxVbml2ZXJzYWxTdHJpbmc7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxDaGFyYWN0ZXJTdHJpbmc7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxHZW5lcmFsU3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcVmlzaWJsZVN0cmluZzsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXEdyYXBoaWNTdHJpbmc7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxCTVBTdHJpbmc7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxUNjFTdHJpbmc7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxPYmplY3REZXNjcmlwdG9yOwp1c2UgRkdcVXRpbGl0eVxCaWdJbnRlZ2VyOwp1c2UgTG9naWNFeGNlcHRpb247CgovKioKICogQ2xhc3MgQVNOT2JqZWN0IGlzIHRoZSBiYXNlIGNsYXNzIGZvciBhbGwgY29uY3JldGUgQVNOLjEgb2JqZWN0cy4KICovCmFic3RyYWN0IGNsYXNzIEFTTk9iamVjdCBpbXBsZW1lbnRzIFBhcnNhYmxlCnsKICAgIHByaXZhdGUgJGNvbnRlbnRMZW5ndGg7CiAgICBwcml2YXRlICRuck9mTGVuZ3RoT2N0ZXRzOwoKICAgIC8qKgogICAgICogTXVzdCByZXR1cm4gdGhlIG51bWJlciBvZiBvY3RldHMgb2YgdGhlIGNvbnRlbnQgcGFydC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpOwoKICAgIC8qKgogICAgICogRW5jb2RlIHRoZSBvYmplY3QgdXNpbmcgREVSIGVuY29kaW5nLgogICAgICoKICAgICAqIEBzZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9YLjY5MCNERVJfZW5jb2RpbmcKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyB0aGUgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdHMgdmFsdWUKICAgICAqLwogICAgYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEVuY29kZWRWYWx1ZSgpOwoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBjb250ZW50IG9mIHRoaXMgb2JqZWN0IGluIGEgbm9uIGVuY29kZWQgZm9ybS4KICAgICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJpbnQgdGhlIHZhbHVlIGluIGh1bWFuIHJlYWRhYmxlIGZvcm0uCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudCgpOwoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBvYmplY3QgdHlwZSBvY3RldC4KICAgICAqIFRoaXMgc2hvdWxkIHVzZSB0aGUgY2xhc3MgY29uc3RhbnRzIG9mIElkZW50aWZpZXIuCiAgICAgKgogICAgICogQHNlZSBJZGVudGlmaWVyCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgYWxsIGlkZW50aWZpZXIgb2N0ZXRzLiBJZiBhbiBpbmhlcml0aW5nIGNsYXNzIG1vZGVscyBhIHRhZyB3aXRoCiAgICAgKiB0aGUgbG9uZyBmb3JtIGlkZW50aWZpZXIgZm9ybWF0LCBpdCBNVVNUIHJlaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvCiAgICAgKiByZXR1cm4gYWxsIG9jdGV0cyBvZiB0aGUgaWRlbnRpZmllci4KICAgICAqCiAgICAgKiBAdGhyb3dzIExvZ2ljRXhjZXB0aW9uIElmIHRoZSBpZGVudGlmaWVyIGZvcm1hdCBpcyBsb25nIGZvcm0KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBJZGVudGlmaWVyIGFzIGEgc2V0IG9mIG9jdGV0cwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SWRlbnRpZmllcigpCiAgICB7CiAgICAgICAgJGZpcnN0T2N0ZXQgPSAkdGhpcy0+Z2V0VHlwZSgpOwoKICAgICAgICBpZiAoSWRlbnRpZmllcjo6aXNMb25nRm9ybSgkZmlyc3RPY3RldCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IExvZ2ljRXhjZXB0aW9uKHNwcmludGYoJ0lkZW50aWZpZXIgb2YgJXMgdXNlcyB0aGUgbG9uZyBmb3JtIGFuZCBtdXN0IHRoZXJlZm9yIG92ZXJyaWRlICJBU05PYmplY3Q6OmdldElkZW50aWZpZXIoKSIuJywgZ2V0X2NsYXNzKCR0aGlzKSkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGNocigkZmlyc3RPY3RldCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBFbmNvZGUgdGhpcyBvYmplY3QgdXNpbmcgREVSIGVuY29kaW5nLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIHRoZSBmdWxsIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tcGxldGUgb2JqZWN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCaW5hcnkoKQogICAgewogICAgICAgICRyZXN1bHQgID0gJHRoaXMtPmdldElkZW50aWZpZXIoKTsKICAgICAgICAkcmVzdWx0IC49ICR0aGlzLT5jcmVhdGVMZW5ndGhQYXJ0KCk7CiAgICAgICAgJHJlc3VsdCAuPSAkdGhpcy0+Z2V0RW5jb2RlZFZhbHVlKCk7CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gY3JlYXRlTGVuZ3RoUGFydCgpCiAgICB7CiAgICAgICAgJGNvbnRlbnRMZW5ndGggPSAkdGhpcy0+Z2V0Q29udGVudExlbmd0aCgpOwogICAgICAgICRuck9mTGVuZ3RoT2N0ZXRzID0gJHRoaXMtPmdldE51bWJlck9mTGVuZ3RoT2N0ZXRzKCRjb250ZW50TGVuZ3RoKTsKCiAgICAgICAgaWYgKCRuck9mTGVuZ3RoT2N0ZXRzID09IDEpIHsKICAgICAgICAgICAgcmV0dXJuIGNocigkY29udGVudExlbmd0aCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gdGhlIGZpcnN0IGxlbmd0aCBvY3RldCBkZXRlcm1pbmVzIHRoZSBudW1iZXIgc3Vic2VxdWVudCBsZW5ndGggb2N0ZXRzCiAgICAgICAgICAgICRsZW5ndGhPY3RldHMgPSBjaHIoMHg4MCB8ICgkbnJPZkxlbmd0aE9jdGV0cyAtIDEpKTsKICAgICAgICAgICAgZm9yICgkc2hpZnRMZW5ndGggPSA4ICogKCRuck9mTGVuZ3RoT2N0ZXRzIC0gMik7ICRzaGlmdExlbmd0aCA+PSAwOyAkc2hpZnRMZW5ndGggLT0gOCkgewogICAgICAgICAgICAgICAgJGxlbmd0aE9jdGV0cyAuPSBjaHIoJGNvbnRlbnRMZW5ndGggPj4gJHNoaWZ0TGVuZ3RoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICRsZW5ndGhPY3RldHM7CiAgICAgICAgfQogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXROdW1iZXJPZkxlbmd0aE9jdGV0cygkY29udGVudExlbmd0aCA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+bnJPZkxlbmd0aE9jdGV0cykpIHsKICAgICAgICAgICAgaWYgKCRjb250ZW50TGVuZ3RoID09IG51bGwpIHsKICAgICAgICAgICAgICAgICRjb250ZW50TGVuZ3RoID0gJHRoaXMtPmdldENvbnRlbnRMZW5ndGgoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRoaXMtPm5yT2ZMZW5ndGhPY3RldHMgPSAxOwogICAgICAgICAgICBpZiAoJGNvbnRlbnRMZW5ndGggPiAxMjcpIHsKICAgICAgICAgICAgICAgIGRvIHsgLy8gbG9uZyBmb3JtCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm5yT2ZMZW5ndGhPY3RldHMrKzsKICAgICAgICAgICAgICAgICAgICAkY29udGVudExlbmd0aCA9ICRjb250ZW50TGVuZ3RoID4+IDg7CiAgICAgICAgICAgICAgICB9IHdoaWxlICgkY29udGVudExlbmd0aCA+IDApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPm5yT2ZMZW5ndGhPY3RldHM7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldENvbnRlbnRMZW5ndGgoKQogICAgewogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmNvbnRlbnRMZW5ndGgpKSB7CiAgICAgICAgICAgICR0aGlzLT5jb250ZW50TGVuZ3RoID0gJHRoaXMtPmNhbGN1bGF0ZUNvbnRlbnRMZW5ndGgoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+Y29udGVudExlbmd0aDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0Q29udGVudExlbmd0aCgkbmV3Q29udGVudExlbmd0aCkKICAgIHsKICAgICAgICAkdGhpcy0+Y29udGVudExlbmd0aCA9ICRuZXdDb250ZW50TGVuZ3RoOwogICAgICAgICR0aGlzLT5nZXROdW1iZXJPZkxlbmd0aE9jdGV0cygkbmV3Q29udGVudExlbmd0aCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIHdob2xlIG9iamVjdCAoaW5jbHVkaW5nIHRoZSBpZGVudGlmaWVyIGFuZCBsZW5ndGggb2N0ZXRzKS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE9iamVjdExlbmd0aCgpCiAgICB7CiAgICAgICAgJG5yT2ZJZGVudGlmaWVyT2N0ZXRzID0gc3RybGVuKCR0aGlzLT5nZXRJZGVudGlmaWVyKCkpOwogICAgICAgICRjb250ZW50TGVuZ3RoID0gJHRoaXMtPmdldENvbnRlbnRMZW5ndGgoKTsKICAgICAgICAkbnJPZkxlbmd0aE9jdGV0cyA9ICR0aGlzLT5nZXROdW1iZXJPZkxlbmd0aE9jdGV0cygkY29udGVudExlbmd0aCk7CgogICAgICAgIHJldHVybiAkbnJPZklkZW50aWZpZXJPY3RldHMgKyAkbnJPZkxlbmd0aE9jdGV0cyArICRjb250ZW50TGVuZ3RoOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldENvbnRlbnQoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIEFTTi4xIFR5cGUgb2YgdGhpcyBvYmplY3QuCiAgICAgKgogICAgICogQHNlZSBJZGVudGlmaWVyOjpnZXROYW1lKCkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGVOYW1lKCkKICAgIHsKICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6Z2V0TmFtZSgkdGhpcy0+Z2V0VHlwZSgpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJpbmFyeURhdGEKICAgICAqIEBwYXJhbSBpbnQgJG9mZnNldEluZGV4CiAgICAgKgogICAgICogQHRocm93cyBQYXJzZXJFeGNlcHRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIFxGR1xBU04xXEFTTk9iamVjdAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gMCkKICAgIHsKICAgICAgICBpZiAoc3RybGVuKCRiaW5hcnlEYXRhKSA8PSAkb2Zmc2V0SW5kZXgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckV4Y2VwdGlvbignQ2FuIG5vdCBwYXJzZSBiaW5hcnkgZnJvbSBkYXRhOiBPZmZzZXQgaW5kZXggbGFyZ2VyIHRoYW4gaW5wdXQgc2l6ZScsICRvZmZzZXRJbmRleCk7CiAgICAgICAgfQoKICAgICAgICAkaWRlbnRpZmllck9jdGV0ID0gb3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleF0pOwogICAgICAgIGlmIChJZGVudGlmaWVyOjppc0NvbnRleHRTcGVjaWZpY0NsYXNzKCRpZGVudGlmaWVyT2N0ZXQpICYmIElkZW50aWZpZXI6OmlzQ29uc3RydWN0ZWQoJGlkZW50aWZpZXJPY3RldCkpIHsKICAgICAgICAgICAgcmV0dXJuIEV4cGxpY2l0bHlUYWdnZWRPYmplY3Q6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgfQoKICAgICAgICBzd2l0Y2ggKCRpZGVudGlmaWVyT2N0ZXQpIHsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpCSVRTVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gQml0U3RyaW5nOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICBjYXNlIElkZW50aWZpZXI6OkJPT0xFQU46CiAgICAgICAgICAgICAgICByZXR1cm4gQm9vbGVhbjo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpFTlVNRVJBVEVEOgogICAgICAgICAgICAgICAgcmV0dXJuIEVudW1lcmF0ZWQ6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgIGNhc2UgSWRlbnRpZmllcjo6SU5URUdFUjoKICAgICAgICAgICAgICAgIHJldHVybiBJbnRlZ2VyOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICBjYXNlIElkZW50aWZpZXI6Ok5VTEw6CiAgICAgICAgICAgICAgICByZXR1cm4gTnVsbE9iamVjdDo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpPQkpFQ1RfSURFTlRJRklFUjoKICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3RJZGVudGlmaWVyOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICBjYXNlIElkZW50aWZpZXI6OlJFTEFUSVZFX09JRDoKICAgICAgICAgICAgICAgIHJldHVybiBSZWxhdGl2ZU9iamVjdElkZW50aWZpZXI6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgIGNhc2UgSWRlbnRpZmllcjo6T0NURVRTVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gT2N0ZXRTdHJpbmc6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgIGNhc2UgSWRlbnRpZmllcjo6U0VRVUVOQ0U6CiAgICAgICAgICAgICAgICByZXR1cm4gU2VxdWVuY2U6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgIGNhc2UgSWRlbnRpZmllcjo6U0VUOgogICAgICAgICAgICAgICAgcmV0dXJuIFNldDo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpVVENfVElNRToKICAgICAgICAgICAgICAgIHJldHVybiBVVENUaW1lOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICBjYXNlIElkZW50aWZpZXI6OkdFTkVSQUxJWkVEX1RJTUU6CiAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJhbGl6ZWRUaW1lOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICBjYXNlIElkZW50aWZpZXI6OklBNV9TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gSUE1U3RyaW5nOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICBjYXNlIElkZW50aWZpZXI6OlBSSU5UQUJMRV9TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gUHJpbnRhYmxlU3RyaW5nOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICBjYXNlIElkZW50aWZpZXI6Ok5VTUVSSUNfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTdHJpbmc6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgIGNhc2UgSWRlbnRpZmllcjo6VVRGOF9TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gVVRGOFN0cmluZzo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpVTklWRVJTQUxfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuIFVuaXZlcnNhbFN0cmluZzo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpDSEFSQUNURVJfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuIENoYXJhY3RlclN0cmluZzo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpHRU5FUkFMX1NUUklORzoKICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmFsU3RyaW5nOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICBjYXNlIElkZW50aWZpZXI6OlZJU0lCTEVfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuIFZpc2libGVTdHJpbmc6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgIGNhc2UgSWRlbnRpZmllcjo6R1JBUEhJQ19TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gR3JhcGhpY1N0cmluZzo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpCTVBfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuIEJNUFN0cmluZzo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpUNjFfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuIFQ2MVN0cmluZzo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpPQkpFQ1RfREVTQ1JJUFRPUjoKICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3REZXNjcmlwdG9yOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgaWRlbnRpZmllciBtYXkgYmUgPjEgYnl0ZS4KICAgICAgICAgICAgICAgIGlmIChJZGVudGlmaWVyOjppc0NvbnN0cnVjdGVkKCRpZGVudGlmaWVyT2N0ZXQpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVbmtub3duQ29uc3RydWN0ZWRPYmplY3QoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRpZGVudGlmaWVyID0gc2VsZjo6cGFyc2VCaW5hcnlJZGVudGlmaWVyKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICAgICAgICAgICRsZW5ndGhPZlVua25vd25PYmplY3QgPSBzZWxmOjpwYXJzZUNvbnRlbnRMZW5ndGgoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgICAgICAgICAgJG9mZnNldEluZGV4ICs9ICRsZW5ndGhPZlVua25vd25PYmplY3Q7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVW5rbm93bk9iamVjdCgkaWRlbnRpZmllciwgJGxlbmd0aE9mVW5rbm93bk9iamVjdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcGFyc2VJZGVudGlmaWVyKCRpZGVudGlmaWVyT2N0ZXQsICRleHBlY3RlZElkZW50aWZpZXIsICRvZmZzZXRGb3JFeGNlcHRpb25IYW5kbGluZykKICAgIHsKICAgICAgICBpZiAoaXNfc3RyaW5nKCRpZGVudGlmaWVyT2N0ZXQpIHx8IGlzX251bWVyaWMoJGlkZW50aWZpZXJPY3RldCkgPT0gZmFsc2UpIHsKICAgICAgICAgICAgJGlkZW50aWZpZXJPY3RldCA9IG9yZCgkaWRlbnRpZmllck9jdGV0KTsKICAgICAgICB9CgogICAgICAgIGlmICgkaWRlbnRpZmllck9jdGV0ICE9ICRleHBlY3RlZElkZW50aWZpZXIpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSAnQ2FuIG5vdCBjcmVhdGUgYW4gJy5JZGVudGlmaWVyOjpnZXROYW1lKCRleHBlY3RlZElkZW50aWZpZXIpLicgZnJvbSBhbiAnLklkZW50aWZpZXI6OmdldE5hbWUoJGlkZW50aWZpZXJPY3RldCk7CiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oJG1lc3NhZ2UsICRvZmZzZXRGb3JFeGNlcHRpb25IYW5kbGluZyk7CiAgICAgICAgfQogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcGFyc2VCaW5hcnlJZGVudGlmaWVyKCRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4KQogICAgewogICAgICAgIGlmIChzdHJsZW4oJGJpbmFyeURhdGEpIDw9ICRvZmZzZXRJbmRleCkgewogICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VyRXhjZXB0aW9uKCdDYW4gbm90IHBhcnNlIGlkZW50aWZpZXIgZnJvbSBkYXRhOiBPZmZzZXQgaW5kZXggbGFyZ2VyIHRoYW4gaW5wdXQgc2l6ZScsICRvZmZzZXRJbmRleCk7CiAgICAgICAgfQoKICAgICAgICAkaWRlbnRpZmllciA9ICRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsrXTsKCiAgICAgICAgaWYgKElkZW50aWZpZXI6OmlzTG9uZ0Zvcm0ob3JkKCRpZGVudGlmaWVyKSkgPT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuICRpZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgaWYgKHN0cmxlbigkYmluYXJ5RGF0YSkgPD0gJG9mZnNldEluZGV4KSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VyRXhjZXB0aW9uKCdDYW4gbm90IHBhcnNlIGlkZW50aWZpZXIgKGxvbmcgZm9ybSkgZnJvbSBkYXRhOiBPZmZzZXQgaW5kZXggbGFyZ2VyIHRoYW4gaW5wdXQgc2l6ZScsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJG5leHRPY3RldCA9ICRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsrXTsKICAgICAgICAgICAgJGlkZW50aWZpZXIgLj0gJG5leHRPY3RldDsKCiAgICAgICAgICAgIGlmICgob3JkKCRuZXh0T2N0ZXQpICYgMHg4MCkgPT09IDApIHsKICAgICAgICAgICAgICAgIC8vIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBpcyAwIHRvIHdlIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBpZGVudGlmaWVyCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRpZGVudGlmaWVyOwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcGFyc2VDb250ZW50TGVuZ3RoKCYkYmluYXJ5RGF0YSwgJiRvZmZzZXRJbmRleCwgJG1pbmltdW1MZW5ndGggPSAwKQogICAgewogICAgICAgIGlmIChzdHJsZW4oJGJpbmFyeURhdGEpIDw9ICRvZmZzZXRJbmRleCkgewogICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VyRXhjZXB0aW9uKCdDYW4gbm90IHBhcnNlIGNvbnRlbnQgbGVuZ3RoIGZyb20gZGF0YTogT2Zmc2V0IGluZGV4IGxhcmdlciB0aGFuIGlucHV0IHNpemUnLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgIH0KCiAgICAgICAgJGNvbnRlbnRMZW5ndGggPSBvcmQoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4KytdKTsKICAgICAgICBpZiAoKCRjb250ZW50TGVuZ3RoICYgMHg4MCkgIT0gMCkgewogICAgICAgICAgICAvLyBiaXQgOCBpcyBzZXQgLT4gdGhpcyBpcyB0aGUgbG9uZyBmb3JtCiAgICAgICAgICAgICRuck9mTGVuZ3RoT2N0ZXRzID0gJGNvbnRlbnRMZW5ndGggJiAweDdGOwogICAgICAgICAgICAkY29udGVudExlbmd0aCA9IEJpZ0ludGVnZXI6OmNyZWF0ZSgweDAwKTsKICAgICAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJG5yT2ZMZW5ndGhPY3RldHM7ICRpKyspIHsKICAgICAgICAgICAgICAgIGlmIChzdHJsZW4oJGJpbmFyeURhdGEpIDw9ICRvZmZzZXRJbmRleCkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oJ0NhbiBub3QgcGFyc2UgY29udGVudCBsZW5ndGggKGxvbmcgZm9ybSkgZnJvbSBkYXRhOiBPZmZzZXQgaW5kZXggbGFyZ2VyIHRoYW4gaW5wdXQgc2l6ZScsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkY29udGVudExlbmd0aCA9ICRjb250ZW50TGVuZ3RoLT5zaGlmdExlZnQoOCktPmFkZChvcmQoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4KytdKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkY29udGVudExlbmd0aC0+Y29tcGFyZShQSFBfSU5UX01BWCkgPiAwKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VyRXhjZXB0aW9uKCJDYW4gbm90IHBhcnNlIGNvbnRlbnQgbGVuZ3RoIGZyb20gZGF0YTogbGVuZ3RoID4gbWF4aW11bSBpbnRlZ2VyIiwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGNvbnRlbnRMZW5ndGggPSAkY29udGVudExlbmd0aC0+dG9JbnRlZ2VyKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGNvbnRlbnRMZW5ndGggPCAkbWluaW11bUxlbmd0aCkgewogICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VyRXhjZXB0aW9uKCdBICcuZ2V0X2NhbGxlZF9jbGFzcygpLiIgc2hvdWxkIGhhdmUgYSBjb250ZW50IGxlbmd0aCBvZiBhdCBsZWFzdCB7JG1pbmltdW1MZW5ndGh9LiBFeHRyYWN0ZWQgbGVuZ3RoIHdhcyB7JGNvbnRlbnRMZW5ndGh9IiwgJG9mZnNldEluZGV4KTsKICAgICAgICB9CgogICAgICAgICRsZW5EYXRhUmVtYWluaW5nID0gc3RybGVuKCRiaW5hcnlEYXRhKSAtICRvZmZzZXRJbmRleDsKCiAgICAgICAgaWYgKCRsZW5EYXRhUmVtYWluaW5nIDwgJGNvbnRlbnRMZW5ndGgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckV4Y2VwdGlvbigiQ29udGVudCBsZW5ndGggeyRjb250ZW50TGVuZ3RofSBleGNlZWRzIHJlbWFpbmluZyBkYXRhIGxlbmd0aCB7JGxlbkRhdGFSZW1haW5pbmd9IiwgJG9mZnNldEluZGV4KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkY29udGVudExlbmd0aDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Base128.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBGR1xBU04xOwoKdXNlIEZHXFV0aWxpdHlcQmlnSW50ZWdlcjsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKCi8qKgogKiBBIGJhc2UtMTI4IGRlY29kZXIuCiAqLwpjbGFzcyBCYXNlMTI4CnsKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVuY29kZSgkdmFsdWUpCiAgICB7CiAgICAgICAgJHZhbHVlID0gQmlnSW50ZWdlcjo6Y3JlYXRlKCR2YWx1ZSk7CiAgICAgICAgJG9jdGV0cyA9IGNocigkdmFsdWUtPm1vZHVsdXMoMHg4MCktPnRvSW50ZWdlcigpKTsKCiAgICAgICAgJHZhbHVlID0gJHZhbHVlLT5zaGlmdFJpZ2h0KDcpOwogICAgICAgIHdoaWxlICgkdmFsdWUtPmNvbXBhcmUoMCkgPiAwKSB7CiAgICAgICAgICAgICRvY3RldHMgLj0gY2hyKDB4ODAgfCAkdmFsdWUtPm1vZHVsdXMoMHg4MCktPnRvSW50ZWdlcigpKTsKICAgICAgICAgICAgJHZhbHVlID0gJHZhbHVlLT5zaGlmdFJpZ2h0KDcpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHN0cnJldigkb2N0ZXRzKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9jdGV0cwogICAgICoKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBnaXZlbiBvY3RldHMgcmVwcmVzZW50IGEgbWFsZm9ybWVkIGJhc2UtMTI4IHZhbHVlIG9yIHRoZSBkZWNvZGVkIHZhbHVlIHdvdWxkIGV4Y2VlZCB0aGUgdGhlIG1heGltdW0gaW50ZWdlciBsZW5ndGgKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlY29kZSgkb2N0ZXRzKQogICAgewogICAgICAgICRiaXRzUGVyT2N0ZXQgPSA3OwogICAgICAgICR2YWx1ZSA9IEJpZ0ludGVnZXI6OmNyZWF0ZSgwKTsKICAgICAgICAkaSA9IDA7CgogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgIGlmICghaXNzZXQoJG9jdGV0c1skaV0pKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoJ01hbGZvcm1lZCBiYXNlLTEyOCBlbmNvZGVkIHZhbHVlICgweCVzKS4nLCBzdHJ0b3VwcGVyKGJpbjJoZXgoJG9jdGV0cykpID86ICcwJykpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkb2N0ZXQgPSBvcmQoJG9jdGV0c1skaSsrXSk7CgogICAgICAgICAgICAkbDEgPSAkdmFsdWUtPnNoaWZ0TGVmdCgkYml0c1Blck9jdGV0KTsKICAgICAgICAgICAgJHIxID0gJG9jdGV0ICYgMHg3ZjsKICAgICAgICAgICAgJHZhbHVlID0gJGwxLT5hZGQoJHIxKTsKCiAgICAgICAgICAgIGlmICgwID09PSAoJG9jdGV0ICYgMHg4MCkpIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gKHN0cmluZykkdmFsdWU7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Composite/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Composite/AttributeTypeAndValue.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxDb21wb3NpdGU7Cgp1c2UgRkdcQVNOMVxBU05PYmplY3Q7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxTZXF1ZW5jZTsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXE9iamVjdElkZW50aWZpZXI7CgpjbGFzcyBBdHRyaWJ1dGVUeXBlQW5kVmFsdWUgZXh0ZW5kcyBTZXF1ZW5jZQp7CiAgICAvKioKICAgICAqIEBwYXJhbSBPYmplY3RJZGVudGlmaWVyfHN0cmluZyAkb2JqSWRlbnRpZmllcgogICAgICogQHBhcmFtIFxGR1xBU04xXEFTTk9iamVjdCAkdmFsdWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRvYmpJZGVudGlmaWVyLCBBU05PYmplY3QgJHZhbHVlKQogICAgewogICAgICAgIGlmICgkb2JqSWRlbnRpZmllciBpbnN0YW5jZW9mIE9iamVjdElkZW50aWZpZXIgPT0gZmFsc2UpIHsKICAgICAgICAgICAgJG9iaklkZW50aWZpZXIgPSBuZXcgT2JqZWN0SWRlbnRpZmllcigkb2JqSWRlbnRpZmllcik7CiAgICAgICAgfQogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJG9iaklkZW50aWZpZXIsICR2YWx1ZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2hpbGRyZW5bMF0uJzogJy4kdGhpcy0+Y2hpbGRyZW5bMV07CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Composite/RDNString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxDb21wb3NpdGU7Cgp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcUHJpbnRhYmxlU3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcSUE1U3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcVVRGOFN0cmluZzsKCmNsYXNzIFJETlN0cmluZyBleHRlbmRzIFJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUKewogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nfFxGR1xBU04xXFVuaXZlcnNhbFxPYmplY3RJZGVudGlmaWVyICRvYmplY3RJZGVudGlmaWVyU3RyaW5nCiAgICAgKiBAcGFyYW0gc3RyaW5nfFxGR1xBU04xXEFTTk9iamVjdCAkdmFsdWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRvYmplY3RJZGVudGlmaWVyU3RyaW5nLCAkdmFsdWUpCiAgICB7CiAgICAgICAgaWYgKFByaW50YWJsZVN0cmluZzo6aXNWYWxpZCgkdmFsdWUpKSB7CiAgICAgICAgICAgICR2YWx1ZSA9IG5ldyBQcmludGFibGVTdHJpbmcoJHZhbHVlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoSUE1U3RyaW5nOjppc1ZhbGlkKCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICR2YWx1ZSA9IG5ldyBJQTVTdHJpbmcoJHZhbHVlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR2YWx1ZSA9IG5ldyBVVEY4U3RyaW5nKCR2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJG9iamVjdElkZW50aWZpZXJTdHJpbmcsICR2YWx1ZSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Composite/RelativeDistinguishedName.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxDb21wb3NpdGU7Cgp1c2UgRkdcQVNOMVxFeGNlcHRpb25cTm90SW1wbGVtZW50ZWRFeGNlcHRpb247CnVzZSBGR1xBU04xXEFTTk9iamVjdDsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXFNldDsKCmNsYXNzIFJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUgZXh0ZW5kcyBTZXQKewogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nfFxGR1xBU04xXFVuaXZlcnNhbFxPYmplY3RJZGVudGlmaWVyICRvYmpJZGVudGlmaWVyU3RyaW5nCiAgICAgKiBAcGFyYW0gXEZHXEFTTjFcQVNOT2JqZWN0ICR2YWx1ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG9iaklkZW50aWZpZXJTdHJpbmcsIEFTTk9iamVjdCAkdmFsdWUpCiAgICB7CiAgICAgICAgLy8gVE9ETzogVGhpcyBkb2VzIG9ubHkgc3VwcG9ydCBvbmUgZWxlbWVudCBpbiB0aGUgUmVsYXRpdmVEaXN0aW5ndWlzaGVkTmFtZSBTZXQgYnV0IGl0IGl0IGlzIGRlZmluZWQgYXMgZm9sbG93czoKICAgICAgICAvLyBSZWxhdGl2ZURpc3Rpbmd1aXNoZWROYW1lIDo6PSBTRVQgU0laRSAoMS4uTUFYKSBPRiBBdHRyaWJ1dGVUeXBlQW5kVmFsdWUKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KG5ldyBBdHRyaWJ1dGVUeXBlQW5kVmFsdWUoJG9iaklkZW50aWZpZXJTdHJpbmcsICR2YWx1ZSkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50KCkKICAgIHsKICAgICAgICAvKiogQHZhciBcRkdcQVNOMVxBU05PYmplY3QgJGZpcnN0T2JqZWN0ICovCiAgICAgICAgJGZpcnN0T2JqZWN0ID0gJHRoaXMtPmNoaWxkcmVuWzBdOwogICAgICAgIHJldHVybiAkZmlyc3RPYmplY3QtPl9fdG9TdHJpbmcoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEF0IHRoZSBjdXJyZW50IHZlcnNpb24gdGhpcyBjb2RlIGNhbiBub3Qgd29yayBzaW5jZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgQ29uc3RydWN0IHJlcXVpcmVzCiAgICAgKiB0aGUgY2xhc3MgdG8gc3VwcG9ydCBhIGNvbnN0cnVjdG9yIHdpdGhvdXQgYXJndW1lbnRzLgogICAgICoKICAgICAqIEBkZXByZWNhdGVkIHRoaXMgZnVuY3Rpb24gaXMgbm90IHlldCBpbXBsZW1lbnRlZCEgRmVlbCBmcmVlIHRvIHN1Ym1pdCBhIHB1bGwgcmVxdWVzdCBvbiBnaXRodWIKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJpbmFyeURhdGEKICAgICAqIEBwYXJhbSBpbnQgJG9mZnNldEluZGV4CiAgICAgKiBAdGhyb3dzIE5vdEltcGxlbWVudGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUJpbmFyeSgmJGJpbmFyeURhdGEsICYkb2Zmc2V0SW5kZXggPSAwKQogICAgewogICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Construct.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCnVzZSBBcnJheUFjY2VzczsKdXNlIEFycmF5SXRlcmF0b3I7CnVzZSBDb3VudGFibGU7CnVzZSBGR1xBU04xXEV4Y2VwdGlvblxQYXJzZXJFeGNlcHRpb247CnVzZSBJdGVyYXRvcjsKCmFic3RyYWN0IGNsYXNzIENvbnN0cnVjdCBleHRlbmRzIEFTTk9iamVjdCBpbXBsZW1lbnRzIENvdW50YWJsZSwgQXJyYXlBY2Nlc3MsIEl0ZXJhdG9yLCBQYXJzYWJsZQp7CiAgICAvKiogQHZhciBcRkdcQVNOMVxBU05PYmplY3RbXSAqLwogICAgcHJvdGVjdGVkICRjaGlsZHJlbjsKICAgIHByaXZhdGUgJGl0ZXJhdG9yUG9zaXRpb247CgogICAgLyoqCiAgICAgKiBAcGFyYW0gXEZHXEFTTjFcQVNOT2JqZWN0W10gJGNoaWxkcmVuIHRoZSB2YXJpYWRpYyB0eXBlIGhpbnQgaXMgY29tbWVudGVkIGR1ZSB0byBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svaGh2bS9pc3N1ZXMvNDg1OAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoLyogSEhfRklYTUVbNDg1OF06IHZhcmlhZGljICsgc3RyaWN0ICovIC4uLiRjaGlsZHJlbikKICAgIHsKICAgICAgICAkdGhpcy0+Y2hpbGRyZW4gPSAkY2hpbGRyZW47CiAgICAgICAgJHRoaXMtPml0ZXJhdG9yUG9zaXRpb24gPSAwOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNoaWxkcmVuOwogICAgfQoKICAgICNbXFJldHVyblR5cGVXaWxsQ2hhbmdlXQogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpCiAgICB7CiAgICAgICAgJHRoaXMtPml0ZXJhdG9yUG9zaXRpb24gPSAwOwogICAgfQoKICAgICNbXFJldHVyblR5cGVXaWxsQ2hhbmdlXQogICAgcHVibGljIGZ1bmN0aW9uIGN1cnJlbnQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2hpbGRyZW5bJHRoaXMtPml0ZXJhdG9yUG9zaXRpb25dOwogICAgfQoKICAgICNbXFJldHVyblR5cGVXaWxsQ2hhbmdlXQogICAgcHVibGljIGZ1bmN0aW9uIGtleSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5pdGVyYXRvclBvc2l0aW9uOwogICAgfQoKICAgICNbXFJldHVyblR5cGVXaWxsQ2hhbmdlXQogICAgcHVibGljIGZ1bmN0aW9uIG5leHQoKQogICAgewogICAgICAgICR0aGlzLT5pdGVyYXRvclBvc2l0aW9uKys7CiAgICB9CgogICAgI1tcUmV0dXJuVHlwZVdpbGxDaGFuZ2VdCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWQoKQogICAgewogICAgICAgIHJldHVybiBpc3NldCgkdGhpcy0+Y2hpbGRyZW5bJHRoaXMtPml0ZXJhdG9yUG9zaXRpb25dKTsKICAgIH0KCiAgICAjW1xSZXR1cm5UeXBlV2lsbENoYW5nZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRFeGlzdHMoJG9mZnNldCkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfa2V5X2V4aXN0cygkb2Zmc2V0LCAkdGhpcy0+Y2hpbGRyZW4pOwogICAgfQoKICAgICNbXFJldHVyblR5cGVXaWxsQ2hhbmdlXQogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldEdldCgkb2Zmc2V0KQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2hpbGRyZW5bJG9mZnNldF07CiAgICB9CgogICAgI1tcUmV0dXJuVHlwZVdpbGxDaGFuZ2VdCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0U2V0KCRvZmZzZXQsICR2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoJG9mZnNldCA9PT0gbnVsbCkgewogICAgICAgICAgICAkb2Zmc2V0ID0gY291bnQoJHRoaXMtPmNoaWxkcmVuKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5jaGlsZHJlblskb2Zmc2V0XSA9ICR2YWx1ZTsKICAgIH0KCiAgICAjW1xSZXR1cm5UeXBlV2lsbENoYW5nZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRVbnNldCgkb2Zmc2V0KQogICAgewogICAgICAgIHVuc2V0KCR0aGlzLT5jaGlsZHJlblskb2Zmc2V0XSk7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNhbGN1bGF0ZUNvbnRlbnRMZW5ndGgoKQogICAgewogICAgICAgICRsZW5ndGggPSAwOwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5jaGlsZHJlbiBhcyAkY29tcG9uZW50KSB7CiAgICAgICAgICAgICRsZW5ndGggKz0gJGNvbXBvbmVudC0+Z2V0T2JqZWN0TGVuZ3RoKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGxlbmd0aDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0RW5jb2RlZFZhbHVlKCkKICAgIHsKICAgICAgICAkcmVzdWx0ID0gJyc7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmNoaWxkcmVuIGFzICRjb21wb25lbnQpIHsKICAgICAgICAgICAgJHJlc3VsdCAuPSAkY29tcG9uZW50LT5nZXRCaW5hcnkoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRDaGlsZChBU05PYmplY3QgJGNoaWxkKQogICAgewogICAgICAgICR0aGlzLT5jaGlsZHJlbltdID0gJGNoaWxkOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRDaGlsZHJlbihhcnJheSAkY2hpbGRyZW4pCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJGNoaWxkcmVuIGFzICRjaGlsZCkgewogICAgICAgICAgICAkdGhpcy0+YWRkQ2hpbGQoJGNoaWxkKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgICRuck9mQ2hpbGRyZW4gPSAkdGhpcy0+Z2V0TnVtYmVyT2ZDaGlsZHJlbigpOwogICAgICAgICRjaGlsZFN0cmluZyA9ICRuck9mQ2hpbGRyZW4gPT0gMSA/ICdjaGlsZCcgOiAnY2hpbGRyZW4nOwoKICAgICAgICByZXR1cm4gIlt7JG5yT2ZDaGlsZHJlbn0geyRjaGlsZFN0cmluZ31dIjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TnVtYmVyT2ZDaGlsZHJlbigpCiAgICB7CiAgICAgICAgcmV0dXJuIGNvdW50KCR0aGlzLT5jaGlsZHJlbik7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIFxGR1xBU04xXEFTTk9iamVjdFtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDaGlsZHJlbigpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jaGlsZHJlbjsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gXEZHXEFTTjFcQVNOT2JqZWN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGaXJzdENoaWxkKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNoaWxkcmVuWzBdOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkYmluYXJ5RGF0YQogICAgICogQHBhcmFtIGludCAkb2Zmc2V0SW5kZXgKICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvblxQYXJzZXJFeGNlcHRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIENvbnN0cnVjdHxzdGF0aWMKICAgICAqLwogICAgI1tcUmV0dXJuVHlwZVdpbGxDaGFuZ2VdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gMCkKICAgIHsKICAgICAgICAkcGFyc2VkT2JqZWN0ID0gbmV3IHN0YXRpYygpOwogICAgICAgIHNlbGY6OnBhcnNlSWRlbnRpZmllcigkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdLCAkcGFyc2VkT2JqZWN0LT5nZXRUeXBlKCksICRvZmZzZXRJbmRleCsrKTsKICAgICAgICAkY29udGVudExlbmd0aCA9IHNlbGY6OnBhcnNlQ29udGVudExlbmd0aCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAkc3RhcnRJbmRleCA9ICRvZmZzZXRJbmRleDsKCiAgICAgICAgJGNoaWxkcmVuID0gW107CiAgICAgICAgJG9jdGV0c1RvUmVhZCA9ICRjb250ZW50TGVuZ3RoOwogICAgICAgIHdoaWxlICgkb2N0ZXRzVG9SZWFkID4gMCkgewogICAgICAgICAgICAkbmV3Q2hpbGQgPSBBU05PYmplY3Q6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgICRvY3RldHNUb1JlYWQgLT0gJG5ld0NoaWxkLT5nZXRPYmplY3RMZW5ndGgoKTsKICAgICAgICAgICAgJGNoaWxkcmVuW10gPSAkbmV3Q2hpbGQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoJG9jdGV0c1RvUmVhZCAhPT0gMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VyRXhjZXB0aW9uKCJTZXF1ZW5jZSBsZW5ndGggaW5jb3JyZWN0IiwgJHN0YXJ0SW5kZXgpOwogICAgICAgIH0KCiAgICAgICAgJHBhcnNlZE9iamVjdC0+YWRkQ2hpbGRyZW4oJGNoaWxkcmVuKTsKICAgICAgICAkcGFyc2VkT2JqZWN0LT5zZXRDb250ZW50TGVuZ3RoKCRjb250ZW50TGVuZ3RoKTsKCiAgICAgICAgcmV0dXJuICRwYXJzZWRPYmplY3Q7CiAgICB9CgogICAgI1tcUmV0dXJuVHlwZVdpbGxDaGFuZ2VdCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoJG1vZGUgPSBDT1VOVF9OT1JNQUwpCiAgICB7CiAgICAgICAgcmV0dXJuIGNvdW50KCR0aGlzLT5jaGlsZHJlbiwgJG1vZGUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJdGVyYXRvcigpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBBcnJheUl0ZXJhdG9yKCR0aGlzLT5jaGlsZHJlbik7CiAgICB9Cn0=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Exception/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Exception/NotImplementedException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxFeGNlcHRpb247CgpjbGFzcyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbiBleHRlbmRzIFxFeGNlcHRpb24Kewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Exception/ParserException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxFeGNlcHRpb247CgpjbGFzcyBQYXJzZXJFeGNlcHRpb24gZXh0ZW5kcyBcRXhjZXB0aW9uCnsKICAgIHByaXZhdGUgJGVycm9yTWVzc2FnZTsKICAgIHByaXZhdGUgJG9mZnNldDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGVycm9yTWVzc2FnZSwgJG9mZnNldCkKICAgIHsKICAgICAgICAkdGhpcy0+ZXJyb3JNZXNzYWdlID0gJGVycm9yTWVzc2FnZTsKICAgICAgICAkdGhpcy0+b2Zmc2V0ID0gJG9mZnNldDsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCJBU04uMSBQYXJzZXIgRXhjZXB0aW9uIGF0IG9mZnNldCB7JHRoaXMtPm9mZnNldH06IHskdGhpcy0+ZXJyb3JNZXNzYWdlfSIpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPZmZzZXQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+b2Zmc2V0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/ExplicitlyTaggedObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCnVzZSBGR1xBU04xXEV4Y2VwdGlvblxQYXJzZXJFeGNlcHRpb247CgovKioKICogQ2xhc3MgRXhwbGljaXRseVRhZ2dlZE9iamVjdCBkZWNvcmF0ZSBhbiBpbm5lciBvYmplY3Qgd2l0aCBhbiBhZGRpdGlvbmFsIHRhZyB0aGF0IGdpdmVzIGluZm9ybWF0aW9uIGFib3V0CiAqIGl0cyBjb250ZXh0IHNwZWNpZmljIG1lYW5pbmcuCiAqCiAqIEV4cGxhbmF0aW9uIHRha2VuIGZyb20gQSBMYXltYW4ncyBHdWlkZSB0byBhIFN1YnNldCBvZiBBU04uMSwgQkVSLCBhbmQgREVSOgogKiA+Pj4gQW4gUlNBIExhYm9yYXRvcmllcyBUZWNobmljYWwgTm90ZQogKiA+Pj4gQnVydG9uIFMuIEthbGlza2kgSnIuCiAqID4+PiBSZXZpc2VkIE5vdmVtYmVyIDEsIDE5OTMKICoKICogWy4uLl0KICogRXhwbGljaXRseSB0YWdnZWQgdHlwZXMgYXJlIGRlcml2ZWQgZnJvbSBvdGhlciB0eXBlcyBieSBhZGRpbmcgYW4gb3V0ZXIgdGFnIHRvIHRoZSB1bmRlcmx5aW5nIHR5cGUuCiAqIEluIGVmZmVjdCwgZXhwbGljaXRseSB0YWdnZWQgdHlwZXMgYXJlIHN0cnVjdHVyZWQgdHlwZXMgY29uc2lzdGluZyBvZiBvbmUgY29tcG9uZW50LCB0aGUgdW5kZXJseWluZyB0eXBlLgogKiBFeHBsaWNpdCB0YWdnaW5nIGlzIGRlbm90ZWQgYnkgdGhlIEFTTi4xIGtleXdvcmRzIFtjbGFzcyBudW1iZXJdIEVYUExJQ0lUIChzZWUgU2VjdGlvbiA1LjIpLgogKiBbLi4uXQogKgogKiBAc2VlIGh0dHA6Ly9sdWNhLm50b3Aub3JnL1RlYWNoaW5nL0FwcHVudGkvYXNuMS5odG1sCiAqLwpjbGFzcyBFeHBsaWNpdGx5VGFnZ2VkT2JqZWN0IGV4dGVuZHMgQVNOT2JqZWN0CnsKICAgIC8qKiBAdmFyIFxGR1xBU04xXEFTTk9iamVjdFtdICovCiAgICBwcml2YXRlICRkZWNvcmF0ZWRPYmplY3RzOwogICAgcHJpdmF0ZSAkdGFnOwoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkdGFnCiAgICAgKiBAcGFyYW0gXEZHXEFTTjFcQVNOT2JqZWN0ICRvYmplY3RzLC4uLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHRhZywgLyogSEhfRklYTUVbNDg1OF06IHZhcmlhZGljICsgc3RyaWN0ICovIC4uLiRvYmplY3RzKQogICAgewogICAgICAgICR0aGlzLT50YWcgPSAkdGFnOwogICAgICAgICR0aGlzLT5kZWNvcmF0ZWRPYmplY3RzID0gJG9iamVjdHM7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNhbGN1bGF0ZUNvbnRlbnRMZW5ndGgoKQogICAgewogICAgICAgICRsZW5ndGggPSAwOwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5kZWNvcmF0ZWRPYmplY3RzIGFzICRvYmplY3QpIHsKICAgICAgICAgICAgJGxlbmd0aCArPSAkb2JqZWN0LT5nZXRPYmplY3RMZW5ndGgoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbGVuZ3RoOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRFbmNvZGVkVmFsdWUoKQogICAgewogICAgICAgICRlbmNvZGVkID0gJyc7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmRlY29yYXRlZE9iamVjdHMgYXMgJG9iamVjdCkgewogICAgICAgICAgICAkZW5jb2RlZCAuPSAkb2JqZWN0LT5nZXRCaW5hcnkoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkZW5jb2RlZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kZWNvcmF0ZWRPYmplY3RzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICBzd2l0Y2ggKCRsZW5ndGggPSBjb3VudCgkdGhpcy0+ZGVjb3JhdGVkT2JqZWN0cykpIHsKICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgIHJldHVybiAiQ29udGV4dCBzcGVjaWZpYyBlbXB0eSBvYmplY3Qgd2l0aCB0YWcgW3skdGhpcy0+dGFnfV0iOwogICAgICAgIGNhc2UgMToKICAgICAgICAgICAgJGRlY29yYXRlZFR5cGUgPSBJZGVudGlmaWVyOjpnZXRTaG9ydE5hbWUoJHRoaXMtPmRlY29yYXRlZE9iamVjdHNbMF0tPmdldFR5cGUoKSk7CiAgICAgICAgICAgIHJldHVybiAiQ29udGV4dCBzcGVjaWZpYyAkZGVjb3JhdGVkVHlwZSB3aXRoIHRhZyBbeyR0aGlzLT50YWd9XSI7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuICIkbGVuZ3RoIGNvbnRleHQgc3BlY2lmaWMgb2JqZWN0cyB3aXRoIHRhZyBbeyR0aGlzLT50YWd9XSI7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gb3JkKCR0aGlzLT5nZXRJZGVudGlmaWVyKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJZGVudGlmaWVyKCkKICAgIHsKICAgICAgICAkaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmNyZWF0ZShJZGVudGlmaWVyOjpDTEFTU19DT05URVhUX1NQRUNJRklDLCB0cnVlLCAkdGhpcy0+dGFnKTsKCiAgICAgICAgcmV0dXJuIGlzX2ludCgkaWRlbnRpZmllcikgPyBjaHIoJGlkZW50aWZpZXIpIDogJGlkZW50aWZpZXI7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFRhZygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50YWc7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tQmluYXJ5KCYkYmluYXJ5RGF0YSwgJiRvZmZzZXRJbmRleCA9IDApCiAgICB7CiAgICAgICAgJGlkZW50aWZpZXIgPSBzZWxmOjpwYXJzZUJpbmFyeUlkZW50aWZpZXIoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgJGZpcnN0SWRlbnRpZmllck9jdGV0ID0gb3JkKCRpZGVudGlmaWVyKTsKICAgICAgICBhc3NlcnQoSWRlbnRpZmllcjo6aXNDb250ZXh0U3BlY2lmaWNDbGFzcygkZmlyc3RJZGVudGlmaWVyT2N0ZXQpLCAnaWRlbnRpZmllciBvY3RldCBzaG91bGQgaW5kaWNhdGUgY29udGV4dCBzcGVjaWZpYyBjbGFzcycpOwogICAgICAgIGFzc2VydChJZGVudGlmaWVyOjppc0NvbnN0cnVjdGVkKCRmaXJzdElkZW50aWZpZXJPY3RldCksICdpZGVudGlmaWVyIG9jdGV0IHNob3VsZCBpbmRpY2F0ZSBjb25zdHJ1Y3RlZCBvYmplY3QnKTsKICAgICAgICAkdGFnID0gSWRlbnRpZmllcjo6Z2V0VGFnTnVtYmVyKCRpZGVudGlmaWVyKTsKCiAgICAgICAgJHRvdGFsQ29udGVudExlbmd0aCA9IHNlbGY6OnBhcnNlQ29udGVudExlbmd0aCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAkcmVtYWluaW5nQ29udGVudExlbmd0aCA9ICR0b3RhbENvbnRlbnRMZW5ndGg7CgogICAgICAgICRvZmZzZXRJbmRleE9mRGVjb3JhdGVkT2JqZWN0ID0gJG9mZnNldEluZGV4OwogICAgICAgICRkZWNvcmF0ZWRPYmplY3RzID0gW107CgogICAgICAgIHdoaWxlICgkcmVtYWluaW5nQ29udGVudExlbmd0aCA+IDApIHsKICAgICAgICAgICAgJG5leHRPYmplY3QgPSBBU05PYmplY3Q6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgICRyZW1haW5pbmdDb250ZW50TGVuZ3RoIC09ICRuZXh0T2JqZWN0LT5nZXRPYmplY3RMZW5ndGgoKTsKICAgICAgICAgICAgJGRlY29yYXRlZE9iamVjdHNbXSA9ICRuZXh0T2JqZWN0OwogICAgICAgIH0KCiAgICAgICAgaWYgKCRyZW1haW5pbmdDb250ZW50TGVuZ3RoICE9IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckV4Y2VwdGlvbigiQ29udGV4dC1TcGVjaWZpYyBleHBsaWNpdGx5IHRhZ2dlZCBvYmplY3QgWyR0YWddIHN0YXJ0aW5nIGF0IG9mZnNldCAkb2Zmc2V0SW5kZXhPZkRlY29yYXRlZE9iamVjdCBzcGVjaWZpZXMgYSBsZW5ndGggb2YgJHRvdGFsQ29udGVudExlbmd0aCBvY3RldHMgYnV0ICRyZW1haW5pbmdDb250ZW50TGVuZ3RoIHJlbWFpbiBhZnRlciBwYXJzaW5nIHRoZSBjb250ZW50IiwgJG9mZnNldEluZGV4T2ZEZWNvcmF0ZWRPYmplY3QpOwogICAgICAgIH0KCiAgICAgICAgJHBhcnNlZE9iamVjdCA9IG5ldyBzZWxmKCR0YWcsIC4uLiRkZWNvcmF0ZWRPYmplY3RzKTsKICAgICAgICAkcGFyc2VkT2JqZWN0LT5zZXRDb250ZW50TGVuZ3RoKCR0b3RhbENvbnRlbnRMZW5ndGgpOwogICAgICAgIHJldHVybiAkcGFyc2VkT2JqZWN0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Identifier.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCnVzZSBFeGNlcHRpb247CgovKioKICogVGhlIElkZW50aWZpZXIgZW5jb2RlcyB0aGUgQVNOLjEgdGFnIChjbGFzcyBhbmQgbnVtYmVyKSBvZiB0aGUgdHlwZSBvZiBhIGRhdGEgdmFsdWUuCiAqCiAqIEV2ZXJ5IGlkZW50aWZpZXIgd2hvc2UgbnVtYmVyIGlzIGluIHRoZSByYW5nZSAwIHRvIDMwIGhhcyB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZToKICoKICogQml0czogICAgOCAgNyAgICA2ICAgIDUgIDQgIDMgIDIgIDEKICogICAgICAgfCBDbGFzcyB8IFAvQyB8ICAgVGFnIG51bWJlciAgfAogKiAgICAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAqCiAqIEJpdHMgOCBhbmQgNyBkZWZpbmUgdGhlIGNsYXNzIG9mIHRoaXMgdHlwZSAoIFVuaXZlcnNhbCwgQXBwbGljYXRpb24sIENvbnRleHQtc3BlY2lmaWMgb3IgUHJpdmF0ZSkuCiAqIEJpdCA2IGVuY29kZWQgd2hldGhlciB0aGlzIHR5cGUgaXMgcHJpbWl0aXZlIG9yIGNvbnN0cnVjdGVkCiAqIFRoZSByZW1haW5pbmcgYml0cyA1IC0gMSBlbmNvZGUgdGhlIHRhZyBudW1iZXIKICovCmNsYXNzIElkZW50aWZpZXIKewogICAgY29uc3QgQ0xBU1NfVU5JVkVSU0FMICAgICAgICA9IDB4MDA7CiAgICBjb25zdCBDTEFTU19BUFBMSUNBVElPTiAgICAgID0gMHgwMTsKICAgIGNvbnN0IENMQVNTX0NPTlRFWFRfU1BFQ0lGSUMgPSAweDAyOwogICAgY29uc3QgQ0xBU1NfUFJJVkFURSAgICAgICAgICA9IDB4MDM7CgogICAgY29uc3QgRU9DICAgICAgICAgICAgICAgPSAweDAwOyAvLyB1bnN1cHBvcnRlZCBmb3Igbm93CiAgICBjb25zdCBCT09MRUFOICAgICAgICAgICA9IDB4MDE7CiAgICBjb25zdCBJTlRFR0VSICAgICAgICAgICA9IDB4MDI7CiAgICBjb25zdCBCSVRTVFJJTkcgICAgICAgICA9IDB4MDM7CiAgICBjb25zdCBPQ1RFVFNUUklORyAgICAgICA9IDB4MDQ7CiAgICBjb25zdCBOVUxMICAgICAgICAgICAgICA9IDB4MDU7CiAgICBjb25zdCBPQkpFQ1RfSURFTlRJRklFUiA9IDB4MDY7CiAgICBjb25zdCBPQkpFQ1RfREVTQ1JJUFRPUiA9IDB4MDc7CiAgICBjb25zdCBFWFRFUk5BTCAgICAgICAgICA9IDB4MDg7IC8vIHVuc3VwcG9ydGVkIGZvciBub3cKICAgIGNvbnN0IFJFQUwgICAgICAgICAgICAgID0gMHgwOTsgLy8gdW5zdXBwb3J0ZWQgZm9yIG5vdwogICAgY29uc3QgRU5VTUVSQVRFRCAgICAgICAgPSAweDBBOwogICAgY29uc3QgRU1CRURERURfUERWICAgICAgPSAweDBCOyAvLyB1bnN1cHBvcnRlZCBmb3Igbm93CiAgICBjb25zdCBVVEY4X1NUUklORyAgICAgICA9IDB4MEM7CiAgICBjb25zdCBSRUxBVElWRV9PSUQgICAgICA9IDB4MEQ7CiAgICAvLyB2YWx1ZSAweDBFIGFuZCAweDBGIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQoKICAgIGNvbnN0IFNFUVVFTkNFICAgICAgICAgID0gMHgzMDsKICAgIGNvbnN0IFNFVCAgICAgICAgICAgICAgID0gMHgzMTsKICAgIGNvbnN0IE5VTUVSSUNfU1RSSU5HICAgID0gMHgxMjsKICAgIGNvbnN0IFBSSU5UQUJMRV9TVFJJTkcgID0gMHgxMzsKICAgIGNvbnN0IFQ2MV9TVFJJTkcgICAgICAgID0gMHgxNDsgLy8gc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzIFRlbGV0ZXh0U3RyaW5nCiAgICBjb25zdCBWSURFT1RFWFRfU1RSSU5HICA9IDB4MTU7CiAgICBjb25zdCBJQTVfU1RSSU5HICAgICAgICA9IDB4MTY7CiAgICBjb25zdCBVVENfVElNRSAgICAgICAgICA9IDB4MTc7CiAgICBjb25zdCBHRU5FUkFMSVpFRF9USU1FICA9IDB4MTg7CiAgICBjb25zdCBHUkFQSElDX1NUUklORyAgICA9IDB4MTk7CiAgICBjb25zdCBWSVNJQkxFX1NUUklORyAgICA9IDB4MUE7CiAgICBjb25zdCBHRU5FUkFMX1NUUklORyAgICA9IDB4MUI7CiAgICBjb25zdCBVTklWRVJTQUxfU1RSSU5HICA9IDB4MUM7CiAgICBjb25zdCBDSEFSQUNURVJfU1RSSU5HICA9IDB4MUQ7IC8vIFVucmVzdHJpY3RlZCBjaGFyYWN0ZXIgdHlwZQogICAgY29uc3QgQk1QX1NUUklORyAgICAgICAgPSAweDFFOwoKICAgIGNvbnN0IExPTkdfRk9STSAgICAgICAgID0gMHgxRjsKICAgIGNvbnN0IElTX0NPTlNUUlVDVEVEICAgID0gMHgyMDsKCiAgICAvKioKICAgICAqIENyZWF0ZXMgYW4gaWRlbnRpZmllci4gU2hvcnQgZm9ybSBpZGVudGlmaWVycyBhcmUgcmV0dXJuZWQgYXMgaW50ZWdlcnMKICAgICAqIGZvciBCQywgbG9uZyBmb3JtIGlkZW50aWZpZXJzIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBzdHJpbmcgb2Ygb2N0ZXRzLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGNsYXNzCiAgICAgKiBAcGFyYW0gYm9vbCAkaXNDb25zdHJ1Y3RlZAogICAgICogQHBhcmFtIGludCAkdGFnTnVtYmVyCiAgICAgKgogICAgICogQHRocm93cyBFeGNlcHRpb24gaWYgdGhlIGdpdmVuIGFyZ3VtZW50cyBhcmUgaW52YWxpZAogICAgICoKICAgICAqIEByZXR1cm4gaW50fHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZSgkY2xhc3MsICRpc0NvbnN0cnVjdGVkLCAkdGFnTnVtYmVyKQogICAgewogICAgICAgIGlmICghaXNfbnVtZXJpYygkY2xhc3MpIHx8ICRjbGFzcyA8IHNlbGY6OkNMQVNTX1VOSVZFUlNBTCB8fCAkY2xhc3MgPiBzZWxmOjpDTEFTU19QUklWQVRFKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oc3ByaW50ZignSW52YWxpZCBjbGFzcyAlZCBnaXZlbicsICRjbGFzcykpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFpc19ib29sKCRpc0NvbnN0cnVjdGVkKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJcJGlzQ29uc3RydWN0ZWQgbXVzdCBiZSBhIGJvb2xlYW4gdmFsdWUgKCRpc0NvbnN0cnVjdGVkIGdpdmVuKSIpOwogICAgICAgIH0KCiAgICAgICAgJHRhZ051bWJlciA9IHNlbGY6Om1ha2VOdW1lcmljKCR0YWdOdW1iZXIpOwogICAgICAgIGlmICgkdGFnTnVtYmVyIDwgMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKHNwcmludGYoJ0ludmFsaWQgJHRhZ051bWJlciAlZCBnaXZlbi4gWW91IGNhbiBvbmx5IHVzZSBwb3NpdGl2ZSBpbnRlZ2Vycy4nLCAkdGFnTnVtYmVyKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRhZ051bWJlciA8IHNlbGY6OkxPTkdfRk9STSkgewogICAgICAgICAgICByZXR1cm4gKCRjbGFzcyA8PCA2KSB8ICgkaXNDb25zdHJ1Y3RlZCA8PCA1KSB8ICR0YWdOdW1iZXI7CiAgICAgICAgfQoKICAgICAgICAkZmlyc3RPY3RldCA9ICgkY2xhc3MgPDwgNikgfCAoJGlzQ29uc3RydWN0ZWQgPDwgNSkgfCBzZWxmOjpMT05HX0ZPUk07CgogICAgICAgIC8vIFRhZyBudW1iZXJzIGZvcm1hdHRlZCBpbiBsb25nIGZvcm0gYXJlIGJhc2UtMTI4IGVuY29kZWQuIFNlZSBYLjYwOSM4LjEuMi40CiAgICAgICAgcmV0dXJuIGNocigkZmlyc3RPY3RldCkuQmFzZTEyODo6ZW5jb2RlKCR0YWdOdW1iZXIpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNDb25zdHJ1Y3RlZCgkaWRlbnRpZmllck9jdGV0KQogICAgewogICAgICAgIHJldHVybiAoJGlkZW50aWZpZXJPY3RldCAmIHNlbGY6OklTX0NPTlNUUlVDVEVEKSA9PT0gc2VsZjo6SVNfQ09OU1RSVUNURUQ7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0xvbmdGb3JtKCRpZGVudGlmaWVyT2N0ZXQpCiAgICB7CiAgICAgICAgcmV0dXJuICgkaWRlbnRpZmllck9jdGV0ICYgc2VsZjo6TE9OR19GT1JNKSA9PT0gc2VsZjo6TE9OR19GT1JNOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBtYXBwZWQgQVNOLjEgdHlwZSB3aXRoIGEgcHJlY2VkaW5nICJBU04uMSAiLgogICAgICoKICAgICAqIEV4YW1wbGU6IEFTTi4xIE9jdGV0IFN0cmluZwogICAgICoKICAgICAqIEBzZWUgSWRlbnRpZmllcjo6Z2V0U2hvcnROYW1lKCkKICAgICAqCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkaWRlbnRpZmllcgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0TmFtZSgkaWRlbnRpZmllcikKICAgIHsKICAgICAgICAkaWRlbnRpZmllck9jdGV0ID0gc2VsZjo6bWFrZU51bWVyaWMoJGlkZW50aWZpZXIpOwoKICAgICAgICAkdHlwZU5hbWUgPSBzdGF0aWM6OmdldFNob3J0TmFtZSgkaWRlbnRpZmllcik7CgogICAgICAgIGlmICgoJGlkZW50aWZpZXJPY3RldCAmIHNlbGY6OkxPTkdfRk9STSkgPCBzZWxmOjpMT05HX0ZPUk0pIHsKICAgICAgICAgICAgJHR5cGVOYW1lID0gIkFTTi4xIHskdHlwZU5hbWV9IjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdHlwZU5hbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIHNob3J0IHZlcnNpb24gb2YgdGhlIHR5cGUgbmFtZS4KICAgICAqCiAgICAgKiBJZiB0aGUgZ2l2ZW4gaWRlbnRpZmllciBvY3RldCBjYW4gYmUgbWFwcGVkIHRvIGEga25vd24gdW5pdmVyc2FsIHR5cGUgdGhpcyB3aWxsCiAgICAgKiByZXR1cm4gaXRzIG5hbWUuIEVsc2UgSWRlbnRpZmllcjo6Z2V0Q2xhc3NEZXNjcmlwdGlvbigpIGlzIHVzZWQgdG8gcmV0cmlldmUKICAgICAqIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpZGVudGlmaWVyLgogICAgICoKICAgICAqIEBzZWUgSWRlbnRpZmllcjo6Z2V0TmFtZSgpCiAgICAgKiBAc2VlIElkZW50aWZpZXI6OmdldENsYXNzRGVzY3JpcHRpb24oKQogICAgICoKICAgICAqIEBwYXJhbSBpbnR8c3RyaW5nICRpZGVudGlmaWVyCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRTaG9ydE5hbWUoJGlkZW50aWZpZXIpCiAgICB7CiAgICAgICAgJGlkZW50aWZpZXJPY3RldCA9IHNlbGY6Om1ha2VOdW1lcmljKCRpZGVudGlmaWVyKTsKCiAgICAgICAgc3dpdGNoICgkaWRlbnRpZmllck9jdGV0KSB7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6RU9DOgogICAgICAgICAgICAgICAgcmV0dXJuICdFbmQtb2YtY29udGVudHMgb2N0ZXQnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkJPT0xFQU46CiAgICAgICAgICAgICAgICByZXR1cm4gJ0Jvb2xlYW4nOwogICAgICAgICAgICBjYXNlIHNlbGY6OklOVEVHRVI6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0ludGVnZXInOwogICAgICAgICAgICBjYXNlIHNlbGY6OkJJVFNUUklORzoKICAgICAgICAgICAgICAgIHJldHVybiAnQml0IFN0cmluZyc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6T0NURVRTVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ09jdGV0IFN0cmluZyc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6TlVMTDoKICAgICAgICAgICAgICAgIHJldHVybiAnTlVMTCc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6T0JKRUNUX0lERU5USUZJRVI6CiAgICAgICAgICAgICAgICByZXR1cm4gJ09iamVjdCBJZGVudGlmaWVyJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpPQkpFQ1RfREVTQ1JJUFRPUjoKICAgICAgICAgICAgICAgIHJldHVybiAnT2JqZWN0IERlc2NyaXB0b3InOwogICAgICAgICAgICBjYXNlIHNlbGY6OkVYVEVSTkFMOgogICAgICAgICAgICAgICAgcmV0dXJuICdFeHRlcm5hbCBUeXBlJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpSRUFMOgogICAgICAgICAgICAgICAgcmV0dXJuICdSZWFsJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpFTlVNRVJBVEVEOgogICAgICAgICAgICAgICAgcmV0dXJuICdFbnVtZXJhdGVkJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpFTUJFRERFRF9QRFY6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0VtYmVkZGVkIFBEVic7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6VVRGOF9TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1VURjggU3RyaW5nJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpSRUxBVElWRV9PSUQ6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1JlbGF0aXZlIE9JRCc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6U0VRVUVOQ0U6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1NlcXVlbmNlJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpTRVQ6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1NldCc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6TlVNRVJJQ19TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ051bWVyaWMgU3RyaW5nJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpQUklOVEFCTEVfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuICdQcmludGFibGUgU3RyaW5nJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpUNjFfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuICdUNjEgU3RyaW5nJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpWSURFT1RFWFRfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuICdWaWRlb3RleHQgU3RyaW5nJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpJQTVfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuICdJQTUgU3RyaW5nJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpVVENfVElNRToKICAgICAgICAgICAgICAgIHJldHVybiAnVVRDIFRpbWUnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkdFTkVSQUxJWkVEX1RJTUU6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0dlbmVyYWxpemVkIFRpbWUnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkdSQVBISUNfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuICdHcmFwaGljIFN0cmluZyc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6VklTSUJMRV9TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1Zpc2libGUgU3RyaW5nJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpHRU5FUkFMX1NUUklORzoKICAgICAgICAgICAgICAgIHJldHVybiAnR2VuZXJhbCBTdHJpbmcnOwogICAgICAgICAgICBjYXNlIHNlbGY6OlVOSVZFUlNBTF9TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1VuaXZlcnNhbCBTdHJpbmcnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkNIQVJBQ1RFUl9TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0NoYXJhY3RlciBTdHJpbmcnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkJNUF9TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0JNUCBTdHJpbmcnOwoKICAgICAgICAgICAgY2FzZSAweDBFOgogICAgICAgICAgICAgICAgcmV0dXJuICdSRVNFUlZFRCAoMHgwRSknOwogICAgICAgICAgICBjYXNlIDB4MEY6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1JFU0VSVkVEICgweDBGKSc7CgogICAgICAgICAgICBjYXNlIHNlbGY6OkxPTkdfRk9STToKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICRjbGFzc0Rlc2NyaXB0aW9uID0gc2VsZjo6Z2V0Q2xhc3NEZXNjcmlwdGlvbigkaWRlbnRpZmllcik7CgogICAgICAgICAgICAgICAgaWYgKGlzX2ludCgkaWRlbnRpZmllcikpIHsKICAgICAgICAgICAgICAgICAgICAkaWRlbnRpZmllciA9IGNocigkaWRlbnRpZmllcik7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuICIkY2xhc3NEZXNjcmlwdGlvbiAoMHgiLnN0cnRvdXBwZXIoYmluMmhleCgkaWRlbnRpZmllcikpLicpJzsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgdGV4dHVhbCBkZXNjcmlwdGlvbiBvZiB0aGUgaW5mb3JtYXRpb24gZW5jb2RlZCBpbiBhIGdpdmVuIGlkZW50aWZpZXIgb2N0ZXQuCiAgICAgKgogICAgICogVGhlIGZpcnN0IHRocmVlIChtb3N0IHNpZ25pZmljYW50KSBieXRlcyBhcmUgZXZhbHVhdGVkIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGEKICAgICAqIGNvbnN0cnVjdGVkIG9yIHByaW1pdGl2ZSB0eXBlIGFuZCBpZiBpdCBpcyBlaXRoZXIgdW5pdmVyc2FsLCBhcHBsaWNhdGlvbiwgY29udGV4dC1zcGVjaWZpYyBvcgogICAgICogcHJpdmF0ZS4KICAgICAqCiAgICAgKiBFeGFtcGxlOgogICAgICogICAgIENvbnN0cnVjdGVkIGNvbnRleHQtc3BlY2lmaWMKICAgICAqICAgICBQcmltaXRpdmUgdW5pdmVyc2FsCiAgICAgKgogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGlkZW50aWZpZXIKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldENsYXNzRGVzY3JpcHRpb24oJGlkZW50aWZpZXIpCiAgICB7CiAgICAgICAgJGlkZW50aWZpZXJPY3RldCA9IHNlbGY6Om1ha2VOdW1lcmljKCRpZGVudGlmaWVyKTsKCiAgICAgICAgaWYgKHNlbGY6OmlzQ29uc3RydWN0ZWQoJGlkZW50aWZpZXJPY3RldCkpIHsKICAgICAgICAgICAgJGNsYXNzRGVzY3JpcHRpb24gPSAnQ29uc3RydWN0ZWQgJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkY2xhc3NEZXNjcmlwdGlvbiA9ICdQcmltaXRpdmUgJzsKICAgICAgICB9CiAgICAgICAgJGNsYXNzQml0cyA9ICRpZGVudGlmaWVyT2N0ZXQgPj4gNjsKICAgICAgICBzd2l0Y2ggKCRjbGFzc0JpdHMpIHsKICAgICAgICAgICAgY2FzZSBzZWxmOjpDTEFTU19VTklWRVJTQUw6CiAgICAgICAgICAgICAgICAkY2xhc3NEZXNjcmlwdGlvbiAuPSAndW5pdmVyc2FsJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIHNlbGY6OkNMQVNTX0FQUExJQ0FUSU9OOgogICAgICAgICAgICAgICAgJGNsYXNzRGVzY3JpcHRpb24gLj0gJ2FwcGxpY2F0aW9uJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIHNlbGY6OkNMQVNTX0NPTlRFWFRfU1BFQ0lGSUM6CiAgICAgICAgICAgICAgICAkdGFnTnVtYmVyID0gc2VsZjo6Z2V0VGFnTnVtYmVyKCRpZGVudGlmaWVyKTsKICAgICAgICAgICAgICAgICRjbGFzc0Rlc2NyaXB0aW9uID0gIlskdGFnTnVtYmVyXSBDb250ZXh0LXNwZWNpZmljIjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIHNlbGY6OkNMQVNTX1BSSVZBVEU6CiAgICAgICAgICAgICAgICAkY2xhc3NEZXNjcmlwdGlvbiAuPSAncHJpdmF0ZSc7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICByZXR1cm4gIklOVkFMSUQgSURFTlRJRklFUiBPQ1RFVDogeyRpZGVudGlmaWVyT2N0ZXR9IjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkY2xhc3NEZXNjcmlwdGlvbjsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnR8c3RyaW5nICRpZGVudGlmaWVyCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRUYWdOdW1iZXIoJGlkZW50aWZpZXIpCiAgICB7CiAgICAgICAgJGZpcnN0T2N0ZXQgPSBzZWxmOjptYWtlTnVtZXJpYygkaWRlbnRpZmllcik7CiAgICAgICAgJHRhZ051bWJlciA9ICRmaXJzdE9jdGV0ICYgc2VsZjo6TE9OR19GT1JNOwoKICAgICAgICBpZiAoJHRhZ051bWJlciA8IHNlbGY6OkxPTkdfRk9STSkgewogICAgICAgICAgICByZXR1cm4gJHRhZ051bWJlcjsKICAgICAgICB9CgogICAgICAgIGlmIChpc19udW1lcmljKCRpZGVudGlmaWVyKSkgewogICAgICAgICAgICAkaWRlbnRpZmllciA9IGNocigkaWRlbnRpZmllcik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBCYXNlMTI4OjpkZWNvZGUoc3Vic3RyKCRpZGVudGlmaWVyLCAxKSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc1VuaXZlcnNhbENsYXNzKCRpZGVudGlmaWVyKQogICAgewogICAgICAgICRpZGVudGlmaWVyID0gc2VsZjo6bWFrZU51bWVyaWMoJGlkZW50aWZpZXIpOwoKICAgICAgICByZXR1cm4gJGlkZW50aWZpZXIgPj4gNiA9PSBzZWxmOjpDTEFTU19VTklWRVJTQUw7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0FwcGxpY2F0aW9uQ2xhc3MoJGlkZW50aWZpZXIpCiAgICB7CiAgICAgICAgJGlkZW50aWZpZXIgPSBzZWxmOjptYWtlTnVtZXJpYygkaWRlbnRpZmllcik7CgogICAgICAgIHJldHVybiAkaWRlbnRpZmllciA+PiA2ID09IHNlbGY6OkNMQVNTX0FQUExJQ0FUSU9OOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNDb250ZXh0U3BlY2lmaWNDbGFzcygkaWRlbnRpZmllcikKICAgIHsKICAgICAgICAkaWRlbnRpZmllciA9IHNlbGY6Om1ha2VOdW1lcmljKCRpZGVudGlmaWVyKTsKCiAgICAgICAgcmV0dXJuICRpZGVudGlmaWVyID4+IDYgPT0gc2VsZjo6Q0xBU1NfQ09OVEVYVF9TUEVDSUZJQzsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzUHJpdmF0ZUNsYXNzKCRpZGVudGlmaWVyKQogICAgewogICAgICAgICRpZGVudGlmaWVyID0gc2VsZjo6bWFrZU51bWVyaWMoJGlkZW50aWZpZXIpOwoKICAgICAgICByZXR1cm4gJGlkZW50aWZpZXIgPj4gNiA9PSBzZWxmOjpDTEFTU19QUklWQVRFOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIG1ha2VOdW1lcmljKCRpZGVudGlmaWVyT2N0ZXQpCiAgICB7CiAgICAgICAgaWYgKCFpc19udW1lcmljKCRpZGVudGlmaWVyT2N0ZXQpKSB7CiAgICAgICAgICAgIHJldHVybiBvcmQoJGlkZW50aWZpZXJPY3RldCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICRpZGVudGlmaWVyT2N0ZXQ7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/OID.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCmNsYXNzIE9JRAp7CiAgICBjb25zdCBSU0FfRU5DUllQVElPTiAgICAgICAgICAgICAgICAgICAgPSAnMS4yLjg0MC4xMTM1NDkuMS4xLjEnOwogICAgY29uc3QgTUQ1X1dJVEhfUlNBX0VOQ1JZUFRJT04gICAgICAgICAgID0gJzEuMi44NDAuMTEzNTQ5LjEuMS40JzsKICAgIGNvbnN0IFNIQTFfV0lUSF9SU0FfU0lHTkFUVVJFICAgICAgICAgICA9ICcxLjIuODQwLjExMzU0OS4xLjEuNSc7CiAgICBjb25zdCBTSEEyNTZfV0lUSF9SU0FfU0lHTkFUVVJFICAgICAgICAgPSAnMS4yLjg0MC4xMTM1NDkuMS4xLjExJzsKICAgIGNvbnN0IFBLQ1M5X0VNQUlMICAgICAgICAgICAgICAgICAgICAgICA9ICcxLjIuODQwLjExMzU0OS4xLjkuMSc7CiAgICBjb25zdCBQS0NTOV9VTlNUUlVDVFVSRURfTkFNRSAgICAgICAgICAgPSAnMS4yLjg0MC4xMTM1NDkuMS45LjInOwogICAgY29uc3QgUEtDUzlfQ09OVEVOVF9UWVBFICAgICAgICAgICAgICAgID0gJzEuMi44NDAuMTEzNTQ5LjEuOS4zJzsKICAgIGNvbnN0IFBLQ1M5X01FU1NBR0VfRElHRVNUICAgICAgICAgICAgICA9ICcxLjIuODQwLjExMzU0OS4xLjkuNCc7CiAgICBjb25zdCBQS0NTOV9TSUdOSU5HX1RJTUUgICAgICAgICAgICAgICAgPSAnMS4yLjg0MC4xMTM1NDkuMS45LjUnOwogICAgY29uc3QgUEtDUzlfRVhURU5TSU9OX1JFUVVFU1QgICAgICAgICAgID0gJzEuMi44NDAuMTEzNTQ5LjEuOS4xNCc7CgogICAgLy8gY2VydGlmaWNhdGUgZXh0ZW5zaW9uIGlkZW50aWZpZXIKICAgIGNvbnN0IENFUlRfRVhUX1NVQkpFQ1RfRElSRUNUT1JZX0FUVFIgICA9ICcyLjUuMjkuOSc7CiAgICBjb25zdCBDRVJUX0VYVF9TVUJKRUNUX0tFWV9JREVOVElGSUVSICAgPSAnMi41LjI5LjE0JzsKICAgIGNvbnN0IENFUlRfRVhUX0tFWV9VU0FHRSAgICAgICAgICAgICAgICA9ICcyLjUuMjkuMTUnOwogICAgY29uc3QgQ0VSVF9FWFRfUFJJVkFURV9LRVlfVVNBR0VfUEVSSU9EID0gJzIuNS4yOS4xNic7CiAgICBjb25zdCBDRVJUX0VYVF9TVUJKRUNUX0FMVF9OQU1FICAgICAgICAgPSAnMi41LjI5LjE3JzsKICAgIGNvbnN0IENFUlRfRVhUX0lTU1VFUl9BTFRfTkFNRSAgICAgICAgICA9ICcyLjUuMjkuMTgnOwogICAgY29uc3QgQ0VSVF9FWFRfQkFTSUNfQ09OU1RSQUlOVFMgICAgICAgID0gJzIuNS4yOS4xOSc7CiAgICBjb25zdCBDRVJUX0VYVF9DUkxfTlVNQkVSICAgICAgICAgICAgICAgPSAnMi41LjI5LjIwJzsKICAgIGNvbnN0IENFUlRfRVhUX1JFQVNPTl9DT0RFICAgICAgICAgICAgICA9ICcyLjUuMjkuMjEnOwogICAgY29uc3QgQ0VSVF9FWFRfSU5WQUxJRElUWV9EQVRFICAgICAgICAgID0gJzIuNS4yOS4yNCc7CiAgICBjb25zdCBDRVJUX0VYVF9ERUxUQV9DUkxfSU5ESUNBVE9SICAgICAgPSAnMi41LjI5LjI3JzsKICAgIGNvbnN0IENFUlRfRVhUX0lTU1VJTkdfRElTVF9QT0lOVCAgICAgICA9ICcyLjUuMjkuMjgnOwogICAgY29uc3QgQ0VSVF9FWFRfQ0VSVF9JU1NVRVIgICAgICAgICAgICAgID0gJzIuNS4yOS4yOSc7CiAgICBjb25zdCBDRVJUX0VYVF9OQU1FX0NPTlNUUkFJTlRTICAgICAgICAgPSAnMi41LjI5LjMwJzsKICAgIGNvbnN0IENFUlRfRVhUX0NSTF9ESVNUUklCVVRJT05fUE9JTlRTICA9ICcyLjUuMjkuMzEnOwogICAgY29uc3QgQ0VSVF9FWFRfQ0VSVF9QT0xJQ0lFUyAgICAgICAgICAgID0gJzIuNS4yOS4zMic7CiAgICBjb25zdCBDRVJUX0VYVF9BVVRIT1JJVFlfS0VZX0lERU5USUZJRVIgPSAnMi41LjI5LjM1JzsKICAgIGNvbnN0IENFUlRfRVhUX0VYVEVOREVEX0tFWV9VU0FHRSAgICAgICA9ICcyLjUuMjkuMzcnOwoKICAgIC8vIHN0YW5kYXJkIGNlcnRpZmljYXRlIGZpbGVzCiAgICBjb25zdCBDT01NT05fTkFNRSAgICAgICAgICAgICAgICAgICAgICAgPSAnMi41LjQuMyc7CiAgICBjb25zdCBTVVJOQU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnMi41LjQuNCc7CiAgICBjb25zdCBTRVJJQUxfTlVNQkVSICAgICAgICAgICAgICAgICAgICAgPSAnMi41LjQuNSc7CiAgICBjb25zdCBDT1VOVFJZX05BTUUgICAgICAgICAgICAgICAgICAgICAgPSAnMi41LjQuNic7CiAgICBjb25zdCBMT0NBTElUWV9OQU1FICAgICAgICAgICAgICAgICAgICAgPSAnMi41LjQuNyc7CiAgICBjb25zdCBTVEFURV9PUl9QUk9WSU5DRV9OQU1FICAgICAgICAgICAgPSAnMi41LjQuOCc7CiAgICBjb25zdCBTVFJFRVRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgPSAnMi41LjQuOSc7CiAgICBjb25zdCBPUkdBTklaQVRJT05fTkFNRSAgICAgICAgICAgICAgICAgPSAnMi41LjQuMTAnOwogICAgY29uc3QgT1VfTkFNRSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJzIuNS40LjExJzsKICAgIGNvbnN0IFRJVExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICcyLjUuNC4xMic7CiAgICBjb25zdCBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgICAgICAgPSAnMi41LjQuMTMnOwogICAgY29uc3QgUE9TVEFMX0FERFJFU1MgICAgICAgICAgICAgICAgICAgID0gJzIuNS40LjE2JzsKICAgIGNvbnN0IFBPU1RBTF9DT0RFICAgICAgICAgICAgICAgICAgICAgICA9ICcyLjUuNC4xNyc7CiAgICBjb25zdCBBVVRIT1JJVFlfUkVWT0NBVElPTl9MSVNUICAgICAgICAgPSAnMi41LjQuMzgnOwoKICAgIGNvbnN0IEFVVEhPUklUWV9JTkZPUk1BVElPTl9BQ0NFU1MgICAgICA9ICcxLjMuNi4xLjUuNS43LjEuMSc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBnaXZlbiBvYmplY3QgaWRlbnRpZmllci4KICAgICAqCiAgICAgKiBTb21lIE9JRHMgYXJlIHNhdmVkIGFzIGNsYXNzIGNvbnN0YW50cyBpbiB0aGlzIGNsYXNzLgogICAgICogSWYgdGhlIHdhbnRlZCBvaWRTdHJpbmcgaXMgbm90IGFtb25nIHRoZW0sIHRoaXMgbWV0aG9kIHdpbGwKICAgICAqIHF1ZXJ5IGh0dHA6Ly9vaWQtaW5mby5jb20gZm9yIHRoZSByaWdodCBuYW1lLgogICAgICogVGhpcyBiZWhhdmlvciBjYW4gYmUgc3VwcHJlc3NlZCBieSBzZXR0aW5nIHRoZSBzZWNvbmQgbWV0aG9kIHBhcmFtZXRlciB0byBmYWxzZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvaWRTdHJpbmcKICAgICAqIEBwYXJhbSBib29sICRsb2FkRnJvbVdlYgogICAgICoKICAgICAqIEBzZWUgc2VsZjo6bG9hZEZyb21XZWIoJG9pZFN0cmluZykKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldE5hbWUoJG9pZFN0cmluZywgJGxvYWRGcm9tV2ViID0gdHJ1ZSkKICAgIHsKICAgICAgICAkb2lkcyA9IFsKICAgICAgICAgICAgJzEuMicgPT4gJ0lTTyBNZW1iZXIgQm9keScsCiAgICAgICAgICAgICcxLjMnID0+ICdvcmcnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuOC4xLjEnID0+ICdobWFjLW1kNScsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS44LjEuMicgPT4gJ2htYWMtc2hhMScsCiAgICAgICAgICAgICcxLjMuMTMyJyA9PiAnY2VydGljb20tYXJjJywKICAgICAgICAgICAgJzIuMjMnID0+ICdJbnRlcm5hdGlvbmFsIE9yZ2FuaXphdGlvbnMnLAogICAgICAgICAgICAnMi4yMy40MycgPT4gJ3dhcCcsCiAgICAgICAgICAgICcyLjIzLjQzLjEnID0+ICd3YXAtd3NnJywKICAgICAgICAgICAgJzIuNS4xLjUnID0+ICdTZWxlY3RlZCBBdHRyaWJ1dGUgVHlwZXMnLAogICAgICAgICAgICAnMi41LjEuNS41NScgPT4gJ2NsZWFyYW5jZScsCiAgICAgICAgICAgICcxLjIuODQwJyA9PiAnSVNPIFVTIE1lbWJlciBCb2R5JywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDAnID0+ICdYOS41NycsCiAgICAgICAgICAgICcxLjIuODQwLjEwMDQwLjQnID0+ICdYOS41NyBDTSA/JywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDAuNC4xJyA9PiAnZHNhRW5jcnlwdGlvbicsCiAgICAgICAgICAgICcxLjIuODQwLjEwMDQwLjQuMycgPT4gJ2RzYVdpdGhTSEExJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUnID0+ICdBTlNJIFg5LjYyJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMScgPT4gJ1g5LTYyX2lkLWZpZWxkVHlwZScsCiAgICAgICAgICAgICcxLjIuODQwLjEwMDQ1LjEuMScgPT4gJ1g5LTYyX3ByaW1lLWZpZWxkJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMS4yJyA9PiAnWDktNjJfY2hhcmFjdGVyaXN0aWMtdHdvLWZpZWxkJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMS4yLjMnID0+ICdYOS02Ml9pZC1jaGFyYWN0ZXJpc3RpYy10d28tYmFzaXMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMDA0NS4xLjIuMy4xJyA9PiAnWDktNjJfb25CYXNpcycsCiAgICAgICAgICAgICcxLjIuODQwLjEwMDQ1LjEuMi4zLjInID0+ICdYOS02Ml90cEJhc2lzJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMS4yLjMuMycgPT4gJ1g5LTYyX3BwQmFzaXMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMDA0NS4yJyA9PiAnWDktNjJfaWQtcHVibGljS2V5VHlwZScsCiAgICAgICAgICAgICcxLjIuODQwLjEwMDQ1LjIuMScgPT4gJ1g5LTYyX2lkLWVjUHVibGljS2V5JywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMycgPT4gJ1g5LTYyX2VsbGlwdGljQ3VydmUnLAogICAgICAgICAgICAnMS4yLjg0MC4xMDA0NS4zLjAnID0+ICdYOS02Ml9jLVR3b0N1cnZlJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4wLjEnID0+ICdYOS02Ml9jMnBuYjE2M3YxJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4wLjInID0+ICdYOS02Ml9jMnBuYjE2M3YyJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4wLjMnID0+ICdYOS02Ml9jMnBuYjE2M3YzJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4wLjQnID0+ICdYOS02Ml9jMnBuYjE3NnYxJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4wLjUnID0+ICdYOS02Ml9jMnRuYjE5MXYxJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4wLjYnID0+ICdYOS02Ml9jMnRuYjE5MXYyJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4wLjcnID0+ICdYOS02Ml9jMnRuYjE5MXYzJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4wLjgnID0+ICdYOS02Ml9jMm9uYjE5MXY0JywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4wLjknID0+ICdYOS02Ml9jMm9uYjE5MXY1JywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4wLjEwJyA9PiAnWDktNjJfYzJwbmIyMDh3MScsCiAgICAgICAgICAgICcxLjIuODQwLjEwMDQ1LjMuMC4xMScgPT4gJ1g5LTYyX2MydG5iMjM5djEnLAogICAgICAgICAgICAnMS4yLjg0MC4xMDA0NS4zLjAuMTInID0+ICdYOS02Ml9jMnRuYjIzOXYyJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4wLjEzJyA9PiAnWDktNjJfYzJ0bmIyMzl2MycsCiAgICAgICAgICAgICcxLjIuODQwLjEwMDQ1LjMuMC4xNCcgPT4gJ1g5LTYyX2Myb25iMjM5djQnLAogICAgICAgICAgICAnMS4yLjg0MC4xMDA0NS4zLjAuMTUnID0+ICdYOS02Ml9jMm9uYjIzOXY1JywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4wLjE2JyA9PiAnWDktNjJfYzJwbmIyNzJ3MScsCiAgICAgICAgICAgICcxLjIuODQwLjEwMDQ1LjMuMC4xNycgPT4gJ1g5LTYyX2MycG5iMzA0dzEnLAogICAgICAgICAgICAnMS4yLjg0MC4xMDA0NS4zLjAuMTgnID0+ICdYOS02Ml9jMnRuYjM1OXYxJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4wLjE5JyA9PiAnWDktNjJfYzJwbmIzNjh3MScsCiAgICAgICAgICAgICcxLjIuODQwLjEwMDQ1LjMuMC4yMCcgPT4gJ1g5LTYyX2MydG5iNDMxcjEnLAogICAgICAgICAgICAnMS4yLjg0MC4xMDA0NS4zLjEnID0+ICdYOS02Ml9wcmltZUN1cnZlJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4xLjEnID0+ICdYOS02Ml9wcmltZTE5MnYxJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4xLjInID0+ICdYOS02Ml9wcmltZTE5MnYyJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4xLjMnID0+ICdYOS02Ml9wcmltZTE5MnYzJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4xLjQnID0+ICdYOS02Ml9wcmltZTIzOXYxJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4xLjUnID0+ICdYOS02Ml9wcmltZTIzOXYyJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4xLjYnID0+ICdYOS02Ml9wcmltZTIzOXYzJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4xLjcnID0+ICdYOS02Ml9wcmltZTI1NnYxJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuNCcgPT4gJ1g5LTYyX2lkLWVjU2lnVHlwZScsCiAgICAgICAgICAgICcxLjIuODQwLjEwMDQ1LjQuMScgPT4gJ2VjZHNhLXdpdGgtU0hBMScsCiAgICAgICAgICAgICcxLjIuODQwLjEwMDQ1LjQuMicgPT4gJ2VjZHNhLXdpdGgtUmVjb21tZW5kZWQnLAogICAgICAgICAgICAnMS4yLjg0MC4xMDA0NS40LjMnID0+ICdlY2RzYS13aXRoLVNwZWNpZmllZCcsCiAgICAgICAgICAgICcxLjIuODQwLjEwMDQ1LjQuMy4xJyA9PiAnZWNkc2Etd2l0aC1TSEEyMjQnLAogICAgICAgICAgICAnMS4yLjg0MC4xMDA0NS40LjMuMicgPT4gJ2VjZHNhLXdpdGgtU0hBMjU2JywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuNC4zLjMnID0+ICdlY2RzYS13aXRoLVNIQTM4NCcsCiAgICAgICAgICAgICcxLjIuODQwLjEwMDQ1LjQuMy40JyA9PiAnZWNkc2Etd2l0aC1TSEE1MTInLAogICAgICAgICAgICAnMS4zLjEzMi4wJyA9PiAnc2VjZ19lbGxpcHRpY0N1cnZlJywKICAgICAgICAgICAgJzIuMjMuNDMuMS40JyA9PiAnd2FwLXdzZy1pZG0tZWNpZCcsCiAgICAgICAgICAgICcyLjIzLjQzLjEuNC4xJyA9PiAnd2FwLXdzZy1pZG0tZWNpZC13dGxzMScsCiAgICAgICAgICAgICcyLjIzLjQzLjEuNC4zJyA9PiAnd2FwLXdzZy1pZG0tZWNpZC13dGxzMycsCiAgICAgICAgICAgICcyLjIzLjQzLjEuNC40JyA9PiAnd2FwLXdzZy1pZG0tZWNpZC13dGxzNCcsCiAgICAgICAgICAgICcyLjIzLjQzLjEuNC41JyA9PiAnd2FwLXdzZy1pZG0tZWNpZC13dGxzNScsCiAgICAgICAgICAgICcyLjIzLjQzLjEuNC42JyA9PiAnd2FwLXdzZy1pZG0tZWNpZC13dGxzNicsCiAgICAgICAgICAgICcyLjIzLjQzLjEuNC43JyA9PiAnd2FwLXdzZy1pZG0tZWNpZC13dGxzNycsCiAgICAgICAgICAgICcyLjIzLjQzLjEuNC44JyA9PiAnd2FwLXdzZy1pZG0tZWNpZC13dGxzOCcsCiAgICAgICAgICAgICcyLjIzLjQzLjEuNC45JyA9PiAnd2FwLXdzZy1pZG0tZWNpZC13dGxzOScsCiAgICAgICAgICAgICcyLjIzLjQzLjEuNC4xMCcgPT4gJ3dhcC13c2ctaWRtLWVjaWQtd3RsczEwJywKICAgICAgICAgICAgJzIuMjMuNDMuMS40LjExJyA9PiAnd2FwLXdzZy1pZG0tZWNpZC13dGxzMTEnLAogICAgICAgICAgICAnMi4yMy40My4xLjQuMTInID0+ICd3YXAtd3NnLWlkbS1lY2lkLXd0bHMxMicsCiAgICAgICAgICAgICcxLjIuODQwLjExMzUzMy43LjY2LjEwJyA9PiAnY2FzdDUtY2JjJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTMzLjcuNjYuMTInID0+ICdwYmVXaXRoTUQ1QW5kQ2FzdDVDQkMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1MzMuNy42Ni4xMycgPT4gJ3Bhc3N3b3JkIGJhc2VkIE1BQycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzUzMy43LjY2LjMwJyA9PiAnRGlmZmllLUhlbGxtYW4gYmFzZWQgTUFDJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5JyA9PiAnUlNBIERhdGEgU2VjdXJpdHksIEluYy4nLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMScgPT4gJ1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIFBLQ1MnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS4xJyA9PiAncGtjczEnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS4xLjEnID0+ICdyc2FFbmNyeXB0aW9uJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMS4yJyA9PiAnbWQyV2l0aFJTQUVuY3J5cHRpb24nLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS4xLjMnID0+ICdtZDRXaXRoUlNBRW5jcnlwdGlvbicsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjEuNCcgPT4gJ21kNVdpdGhSU0FFbmNyeXB0aW9uJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMS41JyA9PiAnc2hhMVdpdGhSU0FFbmNyeXB0aW9uJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMS43JyA9PiAncnNhZXNPYWVwJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMS44JyA9PiAnbWdmMScsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjEuOScgPT4gJ3BTcGVjaWZpZWQnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS4xLjEwJyA9PiAncnNhc3NhUHNzJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMS4xMScgPT4gJ3NoYTI1NldpdGhSU0FFbmNyeXB0aW9uJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMS4xMicgPT4gJ3NoYTM4NFdpdGhSU0FFbmNyeXB0aW9uJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMS4xMycgPT4gJ3NoYTUxMldpdGhSU0FFbmNyeXB0aW9uJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMS4xNCcgPT4gJ3NoYTIyNFdpdGhSU0FFbmNyeXB0aW9uJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMycgPT4gJ3BrY3MzJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMy4xJyA9PiAnZGhLZXlBZ3JlZW1lbnQnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS41JyA9PiAncGtjczUnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS41LjEnID0+ICdwYmVXaXRoTUQyQW5kREVTLUNCQycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjUuMycgPT4gJ3BiZVdpdGhNRDVBbmRERVMtQ0JDJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuNS40JyA9PiAncGJlV2l0aE1EMkFuZFJDMi1DQkMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS41LjYnID0+ICdwYmVXaXRoTUQ1QW5kUkMyLUNCQycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjUuMTAnID0+ICdwYmVXaXRoU0hBMUFuZERFUy1DQkMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS41LjExJyA9PiAncGJlV2l0aFNIQTFBbmRSQzItQ0JDJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuNS4xMicgPT4gJ1BCS0RGMicsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjUuMTMnID0+ICdQQkVTMicsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjUuMTQnID0+ICdQQk1BQzEnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS43JyA9PiAncGtjczcnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS43LjEnID0+ICdwa2NzNy1kYXRhJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuNy4yJyA9PiAncGtjczctc2lnbmVkRGF0YScsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjcuMycgPT4gJ3BrY3M3LWVudmVsb3BlZERhdGEnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS43LjQnID0+ICdwa2NzNy1zaWduZWRBbmRFbnZlbG9wZWREYXRhJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuNy41JyA9PiAncGtjczctZGlnZXN0RGF0YScsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjcuNicgPT4gJ3BrY3M3LWVuY3J5cHRlZERhdGEnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45JyA9PiAncGtjczknLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjEnID0+ICdlbWFpbEFkZHJlc3MnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjInID0+ICd1bnN0cnVjdHVyZWROYW1lJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4zJyA9PiAnY29udGVudFR5cGUnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjQnID0+ICdtZXNzYWdlRGlnZXN0JywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS41JyA9PiAnc2lnbmluZ1RpbWUnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjYnID0+ICdjb3VudGVyc2lnbmF0dXJlJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS43JyA9PiAnY2hhbGxlbmdlUGFzc3dvcmQnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjgnID0+ICd1bnN0cnVjdHVyZWRBZGRyZXNzJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS45JyA9PiAnZXh0ZW5kZWRDZXJ0aWZpY2F0ZUF0dHJpYnV0ZXMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE0JyA9PiAnRXh0ZW5zaW9uIFJlcXVlc3QnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE1JyA9PiAnUy9NSU1FIENhcGFiaWxpdGllcycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYnID0+ICdTL01JTUUnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjAnID0+ICdpZC1zbWltZS1tb2QnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjEnID0+ICdpZC1zbWltZS1jdCcsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMicgPT4gJ2lkLXNtaW1lLWFhJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4zJyA9PiAnaWQtc21pbWUtYWxnJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi40JyA9PiAnaWQtc21pbWUtY2QnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjUnID0+ICdpZC1zbWltZS1zcHEnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjYnID0+ICdpZC1zbWltZS1jdGknLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjAuMScgPT4gJ2lkLXNtaW1lLW1vZC1jbXMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjAuMicgPT4gJ2lkLXNtaW1lLW1vZC1lc3MnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjAuMycgPT4gJ2lkLXNtaW1lLW1vZC1vaWQnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjAuNCcgPT4gJ2lkLXNtaW1lLW1vZC1tc2ctdjMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjAuNScgPT4gJ2lkLXNtaW1lLW1vZC1ldHMtZVNpZ25hdHVyZS04OCcsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMC42JyA9PiAnaWQtc21pbWUtbW9kLWV0cy1lU2lnbmF0dXJlLTk3JywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4wLjcnID0+ICdpZC1zbWltZS1tb2QtZXRzLWVTaWdQb2xpY3ktODgnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjAuOCcgPT4gJ2lkLXNtaW1lLW1vZC1ldHMtZVNpZ1BvbGljeS05NycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMS4xJyA9PiAnaWQtc21pbWUtY3QtcmVjZWlwdCcsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMS4yJyA9PiAnaWQtc21pbWUtY3QtYXV0aERhdGEnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjEuMycgPT4gJ2lkLXNtaW1lLWN0LXB1Ymxpc2hDZXJ0JywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4xLjQnID0+ICdpZC1zbWltZS1jdC1UU1RJbmZvJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4xLjUnID0+ICdpZC1zbWltZS1jdC1URFRJbmZvJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4xLjYnID0+ICdpZC1zbWltZS1jdC1jb250ZW50SW5mbycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMS43JyA9PiAnaWQtc21pbWUtY3QtRFZDU1JlcXVlc3REYXRhJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4xLjgnID0+ICdpZC1zbWltZS1jdC1EVkNTUmVzcG9uc2VEYXRhJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4xLjknID0+ICdpZC1zbWltZS1jdC1jb21wcmVzc2VkRGF0YScsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMS4yNycgPT4gJ2lkLWN0LWFzY2lpVGV4dFdpdGhDUkxGJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4yLjEnID0+ICdpZC1zbWltZS1hYS1yZWNlaXB0UmVxdWVzdCcsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMi4yJyA9PiAnaWQtc21pbWUtYWEtc2VjdXJpdHlMYWJlbCcsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMi4zJyA9PiAnaWQtc21pbWUtYWEtbWxFeHBhbmRIaXN0b3J5JywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4yLjQnID0+ICdpZC1zbWltZS1hYS1jb250ZW50SGludCcsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMi41JyA9PiAnaWQtc21pbWUtYWEtbXNnU2lnRGlnZXN0JywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4yLjYnID0+ICdpZC1zbWltZS1hYS1lbmNhcENvbnRlbnRUeXBlJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4yLjcnID0+ICdpZC1zbWltZS1hYS1jb250ZW50SWRlbnRpZmllcicsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMi44JyA9PiAnaWQtc21pbWUtYWEtbWFjVmFsdWUnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjIuOScgPT4gJ2lkLXNtaW1lLWFhLWVxdWl2YWxlbnRMYWJlbHMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjIuMTAnID0+ICdpZC1zbWltZS1hYS1jb250ZW50UmVmZXJlbmNlJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4yLjExJyA9PiAnaWQtc21pbWUtYWEtZW5jcnlwS2V5UHJlZicsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMi4xMicgPT4gJ2lkLXNtaW1lLWFhLXNpZ25pbmdDZXJ0aWZpY2F0ZScsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMi4xMycgPT4gJ2lkLXNtaW1lLWFhLXNtaW1lRW5jcnlwdENlcnRzJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4yLjE0JyA9PiAnaWQtc21pbWUtYWEtdGltZVN0YW1wVG9rZW4nLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjIuMTUnID0+ICdpZC1zbWltZS1hYS1ldHMtc2lnUG9saWN5SWQnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjIuMTYnID0+ICdpZC1zbWltZS1hYS1ldHMtY29tbWl0bWVudFR5cGUnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjIuMTcnID0+ICdpZC1zbWltZS1hYS1ldHMtc2lnbmVyTG9jYXRpb24nLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjIuMTgnID0+ICdpZC1zbWltZS1hYS1ldHMtc2lnbmVyQXR0cicsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMi4xOScgPT4gJ2lkLXNtaW1lLWFhLWV0cy1vdGhlclNpZ0NlcnQnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjIuMjAnID0+ICdpZC1zbWltZS1hYS1ldHMtY29udGVudFRpbWVzdGFtcCcsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMi4yMScgPT4gJ2lkLXNtaW1lLWFhLWV0cy1DZXJ0aWZpY2F0ZVJlZnMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjIuMjInID0+ICdpZC1zbWltZS1hYS1ldHMtUmV2b2NhdGlvblJlZnMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjIuMjMnID0+ICdpZC1zbWltZS1hYS1ldHMtY2VydFZhbHVlcycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMi4yNCcgPT4gJ2lkLXNtaW1lLWFhLWV0cy1yZXZvY2F0aW9uVmFsdWVzJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4yLjI1JyA9PiAnaWQtc21pbWUtYWEtZXRzLWVzY1RpbWVTdGFtcCcsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMi4yNicgPT4gJ2lkLXNtaW1lLWFhLWV0cy1jZXJ0Q1JMVGltZXN0YW1wJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4yLjI3JyA9PiAnaWQtc21pbWUtYWEtZXRzLWFyY2hpdmVUaW1lU3RhbXAnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjIuMjgnID0+ICdpZC1zbWltZS1hYS1zaWduYXR1cmVUeXBlJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4yLjI5JyA9PiAnaWQtc21pbWUtYWEtZHZjcy1kdmMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjMuMScgPT4gJ2lkLXNtaW1lLWFsZy1FU0RId2l0aDNERVMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjMuMicgPT4gJ2lkLXNtaW1lLWFsZy1FU0RId2l0aFJDMicsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMy4zJyA9PiAnaWQtc21pbWUtYWxnLTNERVN3cmFwJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4zLjQnID0+ICdpZC1zbWltZS1hbGctUkMyd3JhcCcsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMy41JyA9PiAnaWQtc21pbWUtYWxnLUVTREgnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjMuNicgPT4gJ2lkLXNtaW1lLWFsZy1DTVMzREVTd3JhcCcsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMy43JyA9PiAnaWQtc21pbWUtYWxnLUNNU1JDMndyYXAnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjMuOScgPT4gJ2lkLWFsZy1QV1JJLUtFSycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuNC4xJyA9PiAnaWQtc21pbWUtY2QtbGRhcCcsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuNS4xJyA9PiAnaWQtc21pbWUtc3BxLWV0cy1zcXQtdXJpJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi41LjInID0+ICdpZC1zbWltZS1zcHEtZXRzLXNxdC11bm90aWNlJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi42LjEnID0+ICdpZC1zbWltZS1jdGktZXRzLXByb29mT2ZPcmlnaW4nLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjYuMicgPT4gJ2lkLXNtaW1lLWN0aS1ldHMtcHJvb2ZPZlJlY2VpcHQnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjYuMycgPT4gJ2lkLXNtaW1lLWN0aS1ldHMtcHJvb2ZPZkRlbGl2ZXJ5JywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi42LjQnID0+ICdpZC1zbWltZS1jdGktZXRzLXByb29mT2ZTZW5kZXInLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjYuNScgPT4gJ2lkLXNtaW1lLWN0aS1ldHMtcHJvb2ZPZkFwcHJvdmFsJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi42LjYnID0+ICdpZC1zbWltZS1jdGktZXRzLXByb29mT2ZDcmVhdGlvbicsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMjAnID0+ICdmcmllbmRseU5hbWUnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjIxJyA9PiAnbG9jYWxLZXlJRCcsCiAgICAgICAgICAgICcxLjMuNi4xLjQuMS4zMTEuMTcuMScgPT4gJ01pY3Jvc29mdCBDU1AgTmFtZScsCiAgICAgICAgICAgICcxLjMuNi4xLjQuMS4zMTEuMTcuMicgPT4gJ01pY3Jvc29mdCBMb2NhbCBLZXkgc2V0JywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4yMicgPT4gJ2NlcnRUeXBlcycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMjIuMScgPT4gJ3g1MDlDZXJ0aWZpY2F0ZScsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMjIuMicgPT4gJ3Nkc2lDZXJ0aWZpY2F0ZScsCgogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjIzJyA9PiAnY3JsVHlwZXMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjIzLjEnID0+ICd4NTA5Q3JsJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMTInID0+ICdwa2NzMTInLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS4xMi4xJyA9PiAncGtjczEyLXBiZWlkcycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjEyLjEuMScgPT4gJ3BiZVdpdGhTSEExQW5kMTI4Qml0UkM0JywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMTIuMS4yJyA9PiAncGJlV2l0aFNIQTFBbmQ0MEJpdFJDNCcsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjEyLjEuMycgPT4gJ3BiZVdpdGhTSEExQW5kMy1LZXlUcmlwbGVERVMtQ0JDJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMTIuMS40JyA9PiAncGJlV2l0aFNIQTFBbmQyLUtleVRyaXBsZURFUy1DQkMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS4xMi4xLjUnID0+ICdwYmVXaXRoU0hBMUFuZDEyOEJpdFJDMi1DQkMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS4xMi4xLjYnID0+ICdwYmVXaXRoU0hBMUFuZDQwQml0UkMyLUNCQycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjEyLjEwJyA9PiAncGtjczEyLVZlcnNpb24xJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMTIuMTAuMScgPT4gJ3BrY3MxMi1CYWdJZHMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS4xMi4xMC4xLjEnID0+ICdrZXlCYWcnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS4xMi4xMC4xLjInID0+ICdwa2NzOFNocm91ZGVkS2V5QmFnJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMTIuMTAuMS4zJyA9PiAnY2VydEJhZycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjEyLjEwLjEuNCcgPT4gJ2NybEJhZycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjEyLjEwLjEuNScgPT4gJ3NlY3JldEJhZycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjEyLjEwLjEuNicgPT4gJ3NhZmVDb250ZW50c0JhZycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4yLjInID0+ICdtZDInLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMi40JyA9PiAnbWQ0JywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjIuNScgPT4gJ21kNScsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4yLjYnID0+ICdobWFjV2l0aE1ENScsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4yLjcnID0+ICdobWFjV2l0aFNIQTEnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMi44JyA9PiAnaG1hY1dpdGhTSEEyMjQnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMi45JyA9PiAnaG1hY1dpdGhTSEEyNTYnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMi4xMCcgPT4gJ2htYWNXaXRoU0hBMzg0JywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjIuMTEnID0+ICdobWFjV2l0aFNIQTUxMicsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4zLjInID0+ICdyYzItY2JjJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjMuNCcgPT4gJ3JjNCcsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4zLjcnID0+ICdkZXMtZWRlMy1jYmMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMy44JyA9PiAncmM1LWNiYycsCiAgICAgICAgICAgICcxLjMuNi4xLjQuMS4zMTEuMi4xLjE0JyA9PiAnTWljcm9zb2Z0IEV4dGVuc2lvbiBSZXF1ZXN0JywKICAgICAgICAgICAgJzEuMy42LjEuNC4xLjMxMS4yLjEuMjEnID0+ICdNaWNyb3NvZnQgSW5kaXZpZHVhbCBDb2RlIFNpZ25pbmcnLAogICAgICAgICAgICAnMS4zLjYuMS40LjEuMzExLjIuMS4yMicgPT4gJ01pY3Jvc29mdCBDb21tZXJjaWFsIENvZGUgU2lnbmluZycsCiAgICAgICAgICAgICcxLjMuNi4xLjQuMS4zMTEuMTAuMy4xJyA9PiAnTWljcm9zb2Z0IFRydXN0IExpc3QgU2lnbmluZycsCiAgICAgICAgICAgICcxLjMuNi4xLjQuMS4zMTEuMTAuMy4zJyA9PiAnTWljcm9zb2Z0IFNlcnZlciBHYXRlZCBDcnlwdG8nLAogICAgICAgICAgICAnMS4zLjYuMS40LjEuMzExLjEwLjMuNCcgPT4gJ01pY3Jvc29mdCBFbmNyeXB0ZWQgRmlsZSBTeXN0ZW0nLAogICAgICAgICAgICAnMS4zLjYuMS40LjEuMzExLjIwLjIuMicgPT4gJ01pY3Jvc29mdCBTbWFydGNhcmRsb2dpbicsCiAgICAgICAgICAgICcxLjMuNi4xLjQuMS4zMTEuMjAuMi4zJyA9PiAnTWljcm9zb2Z0IFVuaXZlcnNhbCBQcmluY2lwYWwgTmFtZScsCiAgICAgICAgICAgICcxLjMuNi4xLjQuMS4xODguNy4xLjEuMicgPT4gJ2lkZWEtY2JjJywKICAgICAgICAgICAgJzEuMy42LjEuNC4xLjMwMjkuMS4yJyA9PiAnYmYtY2JjJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcnID0+ICdQS0lYJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMCcgPT4gJ2lkLXBraXgtbW9kJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMScgPT4gJ2lkLXBlJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMicgPT4gJ2lkLXF0JywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMycgPT4gJ2lkLWtwJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNCcgPT4gJ2lkLWl0JywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNScgPT4gJ2lkLXBraXAnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy42JyA9PiAnaWQtYWxnJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNycgPT4gJ2lkLWNtYycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjgnID0+ICdpZC1vbicsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjknID0+ICdpZC1wZGEnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4xMCcgPT4gJ2lkLWFjYScsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjExJyA9PiAnaWQtcWNzJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMTInID0+ICdpZC1jY3QnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4yMScgPT4gJ2lkLXBwbCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjQ4JyA9PiAnaWQtYWQnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4wLjEnID0+ICdpZC1wa2l4MS1leHBsaWNpdC04OCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjAuMicgPT4gJ2lkLXBraXgxLWltcGxpY2l0LTg4JywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMC4zJyA9PiAnaWQtcGtpeDEtZXhwbGljaXQtOTMnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4wLjQnID0+ICdpZC1wa2l4MS1pbXBsaWNpdC05MycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjAuNScgPT4gJ2lkLW1vZC1jcm1mJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMC42JyA9PiAnaWQtbW9kLWNtYycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjAuNycgPT4gJ2lkLW1vZC1rZWEtcHJvZmlsZS04OCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjAuOCcgPT4gJ2lkLW1vZC1rZWEtcHJvZmlsZS05MycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjAuOScgPT4gJ2lkLW1vZC1jbXAnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4wLjEwJyA9PiAnaWQtbW9kLXF1YWxpZmllZC1jZXJ0LTg4JywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMC4xMScgPT4gJ2lkLW1vZC1xdWFsaWZpZWQtY2VydC05MycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjAuMTInID0+ICdpZC1tb2QtYXR0cmlidXRlLWNlcnQnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4wLjEzJyA9PiAnaWQtbW9kLXRpbWVzdGFtcC1wcm90b2NvbCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjAuMTQnID0+ICdpZC1tb2Qtb2NzcCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjAuMTUnID0+ICdpZC1tb2QtZHZjcycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjAuMTYnID0+ICdpZC1tb2QtY21wMjAwMCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjEuMScgPT4gJ0F1dGhvcml0eSBJbmZvcm1hdGlvbiBBY2Nlc3MnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4xLjInID0+ICdCaW9tZXRyaWMgSW5mbycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjEuMycgPT4gJ3FjU3RhdGVtZW50cycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjEuNCcgPT4gJ2FjLWF1ZGl0RW50aXR5JywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMS41JyA9PiAnYWMtdGFyZ2V0aW5nJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMS42JyA9PiAnYWFDb250cm9scycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjEuNycgPT4gJ3NiZ3AtaXBBZGRyQmxvY2snLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4xLjgnID0+ICdzYmdwLWF1dG9ub21vdXNTeXNOdW0nLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4xLjknID0+ICdzYmdwLXJvdXRlcklkZW50aWZpZXInLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4xLjEwJyA9PiAnYWMtcHJveHlpbmcnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4xLjExJyA9PiAnU3ViamVjdCBJbmZvcm1hdGlvbiBBY2Nlc3MnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4xLjE0JyA9PiAnUHJveHkgQ2VydGlmaWNhdGUgSW5mb3JtYXRpb24nLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4yLjEnID0+ICdQb2xpY3kgUXVhbGlmaWVyIENQUycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjIuMicgPT4gJ1BvbGljeSBRdWFsaWZpZXIgVXNlciBOb3RpY2UnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4yLjMnID0+ICd0ZXh0Tm90aWNlJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMy4xJyA9PiAnVExTIFdlYiBTZXJ2ZXIgQXV0aGVudGljYXRpb24nLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4zLjInID0+ICdUTFMgV2ViIENsaWVudCBBdXRoZW50aWNhdGlvbicsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjMuMycgPT4gJ0NvZGUgU2lnbmluZycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjMuNCcgPT4gJ0UtbWFpbCBQcm90ZWN0aW9uJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMy41JyA9PiAnSVBTZWMgRW5kIFN5c3RlbScsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjMuNicgPT4gJ0lQU2VjIFR1bm5lbCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjMuNycgPT4gJ0lQU2VjIFVzZXInLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4zLjgnID0+ICdUaW1lIFN0YW1waW5nJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMy45JyA9PiAnT0NTUCBTaWduaW5nJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMy4xMCcgPT4gJ2R2Y3MnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy40LjEnID0+ICdpZC1pdC1jYVByb3RFbmNDZXJ0JywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNC4yJyA9PiAnaWQtaXQtc2lnbktleVBhaXJUeXBlcycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjQuMycgPT4gJ2lkLWl0LWVuY0tleVBhaXJUeXBlcycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjQuNCcgPT4gJ2lkLWl0LXByZWZlcnJlZFN5bW1BbGcnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy40LjUnID0+ICdpZC1pdC1jYUtleVVwZGF0ZUluZm8nLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy40LjYnID0+ICdpZC1pdC1jdXJyZW50Q1JMJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNC43JyA9PiAnaWQtaXQtdW5zdXBwb3J0ZWRPSURzJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNC44JyA9PiAnaWQtaXQtc3Vic2NyaXB0aW9uUmVxdWVzdCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjQuOScgPT4gJ2lkLWl0LXN1YnNjcmlwdGlvblJlc3BvbnNlJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNC4xMCcgPT4gJ2lkLWl0LWtleVBhaXJQYXJhbVJlcScsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjQuMTEnID0+ICdpZC1pdC1rZXlQYWlyUGFyYW1SZXAnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy40LjEyJyA9PiAnaWQtaXQtcmV2UGFzc3BocmFzZScsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjQuMTMnID0+ICdpZC1pdC1pbXBsaWNpdENvbmZpcm0nLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy40LjE0JyA9PiAnaWQtaXQtY29uZmlybVdhaXRUaW1lJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNC4xNScgPT4gJ2lkLWl0LW9yaWdQS0lNZXNzYWdlJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNC4xNicgPT4gJ2lkLWl0LXN1cHBMYW5nVGFncycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjUuMScgPT4gJ2lkLXJlZ0N0cmwnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy41LjInID0+ICdpZC1yZWdJbmZvJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNS4xLjEnID0+ICdpZC1yZWdDdHJsLXJlZ1Rva2VuJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNS4xLjInID0+ICdpZC1yZWdDdHJsLWF1dGhlbnRpY2F0b3InLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy41LjEuMycgPT4gJ2lkLXJlZ0N0cmwtcGtpUHVibGljYXRpb25JbmZvJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNS4xLjQnID0+ICdpZC1yZWdDdHJsLXBraUFyY2hpdmVPcHRpb25zJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNS4xLjUnID0+ICdpZC1yZWdDdHJsLW9sZENlcnRJRCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjUuMS42JyA9PiAnaWQtcmVnQ3RybC1wcm90b2NvbEVuY3JLZXknLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy41LjIuMScgPT4gJ2lkLXJlZ0luZm8tdXRmOFBhaXJzJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNS4yLjInID0+ICdpZC1yZWdJbmZvLWNlcnRSZXEnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy42LjEnID0+ICdpZC1hbGctZGVzNDAnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy42LjInID0+ICdpZC1hbGctbm9TaWduYXR1cmUnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy42LjMnID0+ICdpZC1hbGctZGgtc2lnLWhtYWMtc2hhMScsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjYuNCcgPT4gJ2lkLWFsZy1kaC1wb3AnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy43LjEnID0+ICdpZC1jbWMtc3RhdHVzSW5mbycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjcuMicgPT4gJ2lkLWNtYy1pZGVudGlmaWNhdGlvbicsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjcuMycgPT4gJ2lkLWNtYy1pZGVudGl0eVByb29mJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNy40JyA9PiAnaWQtY21jLWRhdGFSZXR1cm4nLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy43LjUnID0+ICdpZC1jbWMtdHJhbnNhY3Rpb25JZCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjcuNicgPT4gJ2lkLWNtYy1zZW5kZXJOb25jZScsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjcuNycgPT4gJ2lkLWNtYy1yZWNpcGllbnROb25jZScsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjcuOCcgPT4gJ2lkLWNtYy1hZGRFeHRlbnNpb25zJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNy45JyA9PiAnaWQtY21jLWVuY3J5cHRlZFBPUCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjcuMTAnID0+ICdpZC1jbWMtZGVjcnlwdGVkUE9QJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNy4xMScgPT4gJ2lkLWNtYy1scmFQT1BXaXRuZXNzJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNy4xNScgPT4gJ2lkLWNtYy1nZXRDZXJ0JywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNy4xNicgPT4gJ2lkLWNtYy1nZXRDUkwnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy43LjE3JyA9PiAnaWQtY21jLXJldm9rZVJlcXVlc3QnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy43LjE4JyA9PiAnaWQtY21jLXJlZ0luZm8nLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy43LjE5JyA9PiAnaWQtY21jLXJlc3BvbnNlSW5mbycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjcuMjEnID0+ICdpZC1jbWMtcXVlcnlQZW5kaW5nJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNy4yMicgPT4gJ2lkLWNtYy1wb3BMaW5rUmFuZG9tJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNy4yMycgPT4gJ2lkLWNtYy1wb3BMaW5rV2l0bmVzcycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjcuMjQnID0+ICdpZC1jbWMtY29uZmlybUNlcnRBY2NlcHRhbmNlJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuOC4xJyA9PiAnaWQtb24tcGVyc29uYWxEYXRhJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuOC4zJyA9PiAnUGVybWFuZW50IElkZW50aWZpZXInLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy45LjEnID0+ICdpZC1wZGEtZGF0ZU9mQmlydGgnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy45LjInID0+ICdpZC1wZGEtcGxhY2VPZkJpcnRoJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuOS4zJyA9PiAnaWQtcGRhLWdlbmRlcicsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjkuNCcgPT4gJ2lkLXBkYS1jb3VudHJ5T2ZDaXRpemVuc2hpcCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjkuNScgPT4gJ2lkLXBkYS1jb3VudHJ5T2ZSZXNpZGVuY2UnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4xMC4xJyA9PiAnaWQtYWNhLWF1dGhlbnRpY2F0aW9uSW5mbycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjEwLjInID0+ICdpZC1hY2EtYWNjZXNzSWRlbnRpdHknLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4xMC4zJyA9PiAnaWQtYWNhLWNoYXJnaW5nSWRlbnRpdHknLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4xMC40JyA9PiAnaWQtYWNhLWdyb3VwJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMTAuNScgPT4gJ2lkLWFjYS1yb2xlJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMTAuNicgPT4gJ2lkLWFjYS1lbmNBdHRycycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjExLjEnID0+ICdpZC1xY3MtcGtpeFFDU3ludGF4LXYxJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMTIuMScgPT4gJ2lkLWNjdC1jcnMnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4xMi4yJyA9PiAnaWQtY2N0LVBLSURhdGEnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4xMi4zJyA9PiAnaWQtY2N0LVBLSVJlc3BvbnNlJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMjEuMCcgPT4gJ0FueSBsYW5ndWFnZScsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjIxLjEnID0+ICdJbmhlcml0IGFsbCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjIxLjInID0+ICdJbmRlcGVuZGVudCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjQ4LjEnID0+ICdPQ1NQJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNDguMicgPT4gJ0NBIElzc3VlcnMnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy40OC4zJyA9PiAnQUQgVGltZSBTdGFtcGluZycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjQ4LjQnID0+ICdhZCBkdmNzJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNDguNScgPT4gJ0NBIFJlcG9zaXRvcnknLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy40OC4xLjEnID0+ICdCYXNpYyBPQ1NQIFJlc3BvbnNlJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNDguMS4yJyA9PiAnT0NTUCBOb25jZScsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjQ4LjEuMycgPT4gJ09DU1AgQ1JMIElEJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNDguMS40JyA9PiAnQWNjZXB0YWJsZSBPQ1NQIFJlc3BvbnNlcycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjQ4LjEuNScgPT4gJ09DU1AgTm8gQ2hlY2snLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy40OC4xLjYnID0+ICdPQ1NQIEFyY2hpdmUgQ3V0b2ZmJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNDguMS43JyA9PiAnT0NTUCBTZXJ2aWNlIExvY2F0b3InLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy40OC4xLjgnID0+ICdFeHRlbmRlZCBPQ1NQIFN0YXR1cycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjQ4LjEuOScgPT4gJ2lkLXBraXgtT0NTUF92YWxpZCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjQ4LjEuMTAnID0+ICdpZC1wa2l4LU9DU1BfcGF0aCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjQ4LjEuMTEnID0+ICdUcnVzdCBSb290JywKICAgICAgICAgICAgJzEuMy4xNC4zLjInID0+ICdhbGdvcml0aG0nLAogICAgICAgICAgICAnMS4zLjE0LjMuMi4zJyA9PiAnbWQ1V2l0aFJTQScsCiAgICAgICAgICAgICcxLjMuMTQuMy4yLjYnID0+ICdkZXMtZWNiJywKICAgICAgICAgICAgJzEuMy4xNC4zLjIuNycgPT4gJ2Rlcy1jYmMnLAogICAgICAgICAgICAnMS4zLjE0LjMuMi44JyA9PiAnZGVzLW9mYicsCiAgICAgICAgICAgICcxLjMuMTQuMy4yLjknID0+ICdkZXMtY2ZiJywKICAgICAgICAgICAgJzEuMy4xNC4zLjIuMTEnID0+ICdyc2FTaWduYXR1cmUnLAogICAgICAgICAgICAnMS4zLjE0LjMuMi4xMicgPT4gJ2RzYUVuY3J5cHRpb24tb2xkJywKICAgICAgICAgICAgJzEuMy4xNC4zLjIuMTMnID0+ICdkc2FXaXRoU0hBJywKICAgICAgICAgICAgJzEuMy4xNC4zLjIuMTUnID0+ICdzaGFXaXRoUlNBRW5jcnlwdGlvbicsCiAgICAgICAgICAgICcxLjMuMTQuMy4yLjE3JyA9PiAnZGVzLWVkZScsCiAgICAgICAgICAgICcxLjMuMTQuMy4yLjE4JyA9PiAnc2hhJywKICAgICAgICAgICAgJzEuMy4xNC4zLjIuMjYnID0+ICdzaGExJywKICAgICAgICAgICAgJzEuMy4xNC4zLjIuMjcnID0+ICdkc2FXaXRoU0hBMS1vbGQnLAogICAgICAgICAgICAnMS4zLjE0LjMuMi4yOScgPT4gJ3NoYTFXaXRoUlNBJywKICAgICAgICAgICAgJzEuMy4zNi4zLjIuMScgPT4gJ3JpcGVtZDE2MCcsCiAgICAgICAgICAgICcxLjMuMzYuMy4zLjEuMicgPT4gJ3JpcGVtZDE2MFdpdGhSU0EnLAogICAgICAgICAgICAnMS4zLjEwMS4xLjQuMScgPT4gJ1N0cm9uZyBFeHRyYW5ldCBJRCcsCiAgICAgICAgICAgICcyLjUnID0+ICdkaXJlY3Rvcnkgc2VydmljZXMgKFguNTAwKScsCiAgICAgICAgICAgICcyLjUuNCcgPT4gJ1g1MDknLAogICAgICAgICAgICAnMi41LjQuMycgPT4gJ2NvbW1vbk5hbWUnLAogICAgICAgICAgICAnMi41LjQuNCcgPT4gJ3N1cm5hbWUnLAogICAgICAgICAgICAnMi41LjQuNScgPT4gJ3NlcmlhbE51bWJlcicsCiAgICAgICAgICAgICcyLjUuNC42JyA9PiAnY291bnRyeU5hbWUnLAogICAgICAgICAgICAnMi41LjQuNycgPT4gJ2xvY2FsaXR5TmFtZScsCiAgICAgICAgICAgICcyLjUuNC44JyA9PiAnc3RhdGVPclByb3ZpbmNlTmFtZScsCiAgICAgICAgICAgICcyLjUuNC45JyA9PiAnc3RyZWV0QWRkcmVzcycsCiAgICAgICAgICAgICcyLjUuNC4xMCcgPT4gJ29yZ2FuaXphdGlvbk5hbWUnLAogICAgICAgICAgICAnMi41LjQuMTEnID0+ICdvcmdhbml6YXRpb25hbFVuaXROYW1lJywKICAgICAgICAgICAgJzIuNS40LjEyJyA9PiAndGl0bGUnLAogICAgICAgICAgICAnMi41LjQuMTMnID0+ICdkZXNjcmlwdGlvbicsCiAgICAgICAgICAgICcyLjUuNC4xNCcgPT4gJ3NlYXJjaEd1aWRlJywKICAgICAgICAgICAgJzIuNS40LjE1JyA9PiAnYnVzaW5lc3NDYXRlZ29yeScsCiAgICAgICAgICAgICcyLjUuNC4xNicgPT4gJ3Bvc3RhbEFkZHJlc3MnLAogICAgICAgICAgICAnMi41LjQuMTcnID0+ICdwb3N0YWxDb2RlJywKICAgICAgICAgICAgJzIuNS40LjE4JyA9PiAncG9zdE9mZmljZUJveCcsCiAgICAgICAgICAgICcyLjUuNC4xOScgPT4gJ3BoeXNpY2FsRGVsaXZlcnlPZmZpY2VOYW1lJywKICAgICAgICAgICAgJzIuNS40LjIwJyA9PiAndGVsZXBob25lTnVtYmVyJywKICAgICAgICAgICAgJzIuNS40LjIxJyA9PiAndGVsZXhOdW1iZXInLAogICAgICAgICAgICAnMi41LjQuMjInID0+ICd0ZWxldGV4VGVybWluYWxJZGVudGlmaWVyJywKICAgICAgICAgICAgJzIuNS40LjIzJyA9PiAnZmFjc2ltaWxlVGVsZXBob25lTnVtYmVyJywKICAgICAgICAgICAgJzIuNS40LjI0JyA9PiAneDEyMUFkZHJlc3MnLAogICAgICAgICAgICAnMi41LjQuMjUnID0+ICdpbnRlcm5hdGlvbmFsaVNETk51bWJlcicsCiAgICAgICAgICAgICcyLjUuNC4yNicgPT4gJ3JlZ2lzdGVyZWRBZGRyZXNzJywKICAgICAgICAgICAgJzIuNS40LjI3JyA9PiAnZGVzdGluYXRpb25JbmRpY2F0b3InLAogICAgICAgICAgICAnMi41LjQuMjgnID0+ICdwcmVmZXJyZWREZWxpdmVyeU1ldGhvZCcsCiAgICAgICAgICAgICcyLjUuNC4yOScgPT4gJ3ByZXNlbnRhdGlvbkFkZHJlc3MnLAogICAgICAgICAgICAnMi41LjQuMzAnID0+ICdzdXBwb3J0ZWRBcHBsaWNhdGlvbkNvbnRleHQnLAogICAgICAgICAgICAnMi41LjQuMzEnID0+ICdtZW1iZXInLAogICAgICAgICAgICAnMi41LjQuMzInID0+ICdvd25lcicsCiAgICAgICAgICAgICcyLjUuNC4zMycgPT4gJ3JvbGVPY2N1cGFudCcsCiAgICAgICAgICAgICcyLjUuNC4zNCcgPT4gJ3NlZUFsc28nLAogICAgICAgICAgICAnMi41LjQuMzUnID0+ICd1c2VyUGFzc3dvcmQnLAogICAgICAgICAgICAnMi41LjQuMzYnID0+ICd1c2VyQ2VydGlmaWNhdGUnLAogICAgICAgICAgICAnMi41LjQuMzcnID0+ICdjQUNlcnRpZmljYXRlJywKICAgICAgICAgICAgJzIuNS40LjM4JyA9PiAnYXV0aG9yaXR5UmV2b2NhdGlvbkxpc3QnLAogICAgICAgICAgICAnMi41LjQuMzknID0+ICdjZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0JywKICAgICAgICAgICAgJzIuNS40LjQwJyA9PiAnY3Jvc3NDZXJ0aWZpY2F0ZVBhaXInLAogICAgICAgICAgICAnMi41LjQuNDEnID0+ICduYW1lJywKICAgICAgICAgICAgJzIuNS40LjQyJyA9PiAnZ2l2ZW5OYW1lJywKICAgICAgICAgICAgJzIuNS40LjQzJyA9PiAnaW5pdGlhbHMnLAogICAgICAgICAgICAnMi41LjQuNDQnID0+ICdnZW5lcmF0aW9uUXVhbGlmaWVyJywKICAgICAgICAgICAgJzIuNS40LjQ1JyA9PiAneDUwMFVuaXF1ZUlkZW50aWZpZXInLAogICAgICAgICAgICAnMi41LjQuNDYnID0+ICdkblF1YWxpZmllcicsCiAgICAgICAgICAgICcyLjUuNC40NycgPT4gJ2VuaGFuY2VkU2VhcmNoR3VpZGUnLAogICAgICAgICAgICAnMi41LjQuNDgnID0+ICdwcm90b2NvbEluZm9ybWF0aW9uJywKICAgICAgICAgICAgJzIuNS40LjQ5JyA9PiAnZGlzdGluZ3Vpc2hlZE5hbWUnLAogICAgICAgICAgICAnMi41LjQuNTAnID0+ICd1bmlxdWVNZW1iZXInLAogICAgICAgICAgICAnMi41LjQuNTEnID0+ICdob3VzZUlkZW50aWZpZXInLAogICAgICAgICAgICAnMi41LjQuNTInID0+ICdzdXBwb3J0ZWRBbGdvcml0aG1zJywKICAgICAgICAgICAgJzIuNS40LjUzJyA9PiAnZGVsdGFSZXZvY2F0aW9uTGlzdCcsCiAgICAgICAgICAgICcyLjUuNC41NCcgPT4gJ2RtZE5hbWUnLAogICAgICAgICAgICAnMi41LjQuNjUnID0+ICdwc2V1ZG9ueW0nLAogICAgICAgICAgICAnMi41LjQuNzInID0+ICdyb2xlJywKICAgICAgICAgICAgJzIuNS44JyA9PiAnZGlyZWN0b3J5IHNlcnZpY2VzIC0gYWxnb3JpdGhtcycsCiAgICAgICAgICAgICcyLjUuOC4xLjEnID0+ICdyc2EnLAogICAgICAgICAgICAnMi41LjguMy4xMDAnID0+ICdtZGMyV2l0aFJTQScsCiAgICAgICAgICAgICcyLjUuOC4zLjEwMScgPT4gJ21kYzInLAogICAgICAgICAgICAnMi41LjI5JyA9PiAnaWQtY2UnLAogICAgICAgICAgICAnMi41LjI5LjknID0+ICdYNTA5djMgU3ViamVjdCBEaXJlY3RvcnkgQXR0cmlidXRlcycsCiAgICAgICAgICAgICcyLjUuMjkuMTQnID0+ICdYNTA5djMgU3ViamVjdCBLZXkgSWRlbnRpZmllcicsCiAgICAgICAgICAgICcyLjUuMjkuMTUnID0+ICdYNTA5djMgS2V5IFVzYWdlJywKICAgICAgICAgICAgJzIuNS4yOS4xNicgPT4gJ1g1MDl2MyBQcml2YXRlIEtleSBVc2FnZSBQZXJpb2QnLAogICAgICAgICAgICAnMi41LjI5LjE3JyA9PiAnWDUwOXYzIFN1YmplY3QgQWx0ZXJuYXRpdmUgTmFtZScsCiAgICAgICAgICAgICcyLjUuMjkuMTgnID0+ICdYNTA5djMgSXNzdWVyIEFsdGVybmF0aXZlIE5hbWUnLAogICAgICAgICAgICAnMi41LjI5LjE5JyA9PiAnWDUwOXYzIEJhc2ljIENvbnN0cmFpbnRzJywKICAgICAgICAgICAgJzIuNS4yOS4yMCcgPT4gJ1g1MDl2MyBDUkwgTnVtYmVyJywKICAgICAgICAgICAgJzIuNS4yOS4yMScgPT4gJ1g1MDl2MyBDUkwgUmVhc29uIENvZGUnLAogICAgICAgICAgICAnMi41LjI5LjI0JyA9PiAnSW52YWxpZGl0eSBEYXRlJywKICAgICAgICAgICAgJzIuNS4yOS4yNycgPT4gJ1g1MDl2MyBEZWx0YSBDUkwgSW5kaWNhdG9yJywKICAgICAgICAgICAgJzIuNS4yOS4yOCcgPT4gJ1g1MDl2MyBJc3N1aW5nIERpc3RyaWJ1dGlvbiBQb2ludCcsCiAgICAgICAgICAgICcyLjUuMjkuMjknID0+ICdYNTA5djMgQ2VydGlmaWNhdGUgSXNzdWVyJywKICAgICAgICAgICAgJzIuNS4yOS4zMCcgPT4gJ1g1MDl2MyBOYW1lIENvbnN0cmFpbnRzJywKICAgICAgICAgICAgJzIuNS4yOS4zMScgPT4gJ1g1MDl2MyBDUkwgRGlzdHJpYnV0aW9uIFBvaW50cycsCiAgICAgICAgICAgICcyLjUuMjkuMzInID0+ICdYNTA5djMgQ2VydGlmaWNhdGUgUG9saWNpZXMnLAogICAgICAgICAgICAnMi41LjI5LjMyLjAnID0+ICdYNTA5djMgQW55IFBvbGljeScsCiAgICAgICAgICAgICcyLjUuMjkuMzMnID0+ICdYNTA5djMgUG9saWN5IE1hcHBpbmdzJywKICAgICAgICAgICAgJzIuNS4yOS4zNScgPT4gJ1g1MDl2MyBBdXRob3JpdHkgS2V5IElkZW50aWZpZXInLAogICAgICAgICAgICAnMi41LjI5LjM2JyA9PiAnWDUwOXYzIFBvbGljeSBDb25zdHJhaW50cycsCiAgICAgICAgICAgICcyLjUuMjkuMzcnID0+ICdYNTA5djMgRXh0ZW5kZWQgS2V5IFVzYWdlJywKICAgICAgICAgICAgJzIuNS4yOS40NicgPT4gJ1g1MDl2MyBGcmVzaGVzdCBDUkwnLAogICAgICAgICAgICAnMi41LjI5LjU0JyA9PiAnWDUwOXYzIEluaGliaXQgQW55IFBvbGljeScsCiAgICAgICAgICAgICcyLjUuMjkuNTUnID0+ICdYNTA5djMgQUMgVGFyZ2V0aW5nJywKICAgICAgICAgICAgJzIuNS4yOS41NicgPT4gJ1g1MDl2MyBObyBSZXZvY2F0aW9uIEF2YWlsYWJsZScsCiAgICAgICAgICAgICcyLjUuMjkuMzcuMCcgPT4gJ0FueSBFeHRlbmRlZCBLZXkgVXNhZ2UnLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMTM3MzAnID0+ICdOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3JwLicsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjExMzczMC4xJyA9PiAnTmV0c2NhcGUgQ2VydGlmaWNhdGUgRXh0ZW5zaW9uJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTEzNzMwLjInID0+ICdOZXRzY2FwZSBEYXRhIFR5cGUnLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMTM3MzAuMS4xJyA9PiAnTmV0c2NhcGUgQ2VydCBUeXBlJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTEzNzMwLjEuMicgPT4gJ05ldHNjYXBlIEJhc2UgVXJsJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTEzNzMwLjEuMycgPT4gJ05ldHNjYXBlIFJldm9jYXRpb24gVXJsJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTEzNzMwLjEuNCcgPT4gJ05ldHNjYXBlIENBIFJldm9jYXRpb24gVXJsJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTEzNzMwLjEuNycgPT4gJ05ldHNjYXBlIFJlbmV3YWwgVXJsJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTEzNzMwLjEuOCcgPT4gJ05ldHNjYXBlIENBIFBvbGljeSBVcmwnLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMTM3MzAuMS4xMicgPT4gJ05ldHNjYXBlIFNTTCBTZXJ2ZXIgTmFtZScsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjExMzczMC4xLjEzJyA9PiAnTmV0c2NhcGUgQ29tbWVudCcsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjExMzczMC4yLjUnID0+ICdOZXRzY2FwZSBDZXJ0aWZpY2F0ZSBTZXF1ZW5jZScsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjExMzczMC40LjEnID0+ICdOZXRzY2FwZSBTZXJ2ZXIgR2F0ZWQgQ3J5cHRvJywKICAgICAgICAgICAgJzEuMy42JyA9PiAnZG9kJywKICAgICAgICAgICAgJzEuMy42LjEnID0+ICdpYW5hJywKICAgICAgICAgICAgJzEuMy42LjEuMScgPT4gJ0RpcmVjdG9yeScsCiAgICAgICAgICAgICcxLjMuNi4xLjInID0+ICdNYW5hZ2VtZW50JywKICAgICAgICAgICAgJzEuMy42LjEuMycgPT4gJ0V4cGVyaW1lbnRhbCcsCiAgICAgICAgICAgICcxLjMuNi4xLjQnID0+ICdQcml2YXRlJywKICAgICAgICAgICAgJzEuMy42LjEuNScgPT4gJ1NlY3VyaXR5JywKICAgICAgICAgICAgJzEuMy42LjEuNicgPT4gJ1NOTVB2MicsCiAgICAgICAgICAgICcxLjMuNi4xLjcnID0+ICdNYWlsJywKICAgICAgICAgICAgJzEuMy42LjEuNC4xJyA9PiAnRW50ZXJwcmlzZXMnLAogICAgICAgICAgICAnMS4zLjYuMS40LjEuMTQ2Ni4zNDQnID0+ICdkY09iamVjdCcsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMy44JyA9PiAnemxpYiBjb21wcmVzc2lvbicsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjEwMS4zJyA9PiAnY3NvcicsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjEwMS4zLjQnID0+ICduaXN0QWxnb3JpdGhtcycsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjEwMS4zLjQuMScgPT4gJ2FlcycsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjEwMS4zLjQuMS4xJyA9PiAnYWVzLTEyOC1lY2InLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMDEuMy40LjEuMicgPT4gJ2Flcy0xMjgtY2JjJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTAxLjMuNC4xLjMnID0+ICdhZXMtMTI4LW9mYicsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjEwMS4zLjQuMS40JyA9PiAnYWVzLTEyOC1jZmInLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMDEuMy40LjEuNScgPT4gJ2lkLWFlczEyOC13cmFwJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTAxLjMuNC4xLjYnID0+ICdhZXMtMTI4LWdjbScsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjEwMS4zLjQuMS43JyA9PiAnYWVzLTEyOC1jY20nLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMDEuMy40LjEuOCcgPT4gJ2lkLWFlczEyOC13cmFwLXBhZCcsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMScgPT4gJ2Flcy0xOTItZWNiJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTAxLjMuNC4xLjIyJyA9PiAnYWVzLTE5Mi1jYmMnLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMDEuMy40LjEuMjMnID0+ICdhZXMtMTkyLW9mYicsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yNCcgPT4gJ2Flcy0xOTItY2ZiJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTAxLjMuNC4xLjI1JyA9PiAnaWQtYWVzMTkyLXdyYXAnLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMDEuMy40LjEuMjYnID0+ICdhZXMtMTkyLWdjbScsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yNycgPT4gJ2Flcy0xOTItY2NtJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTAxLjMuNC4xLjI4JyA9PiAnaWQtYWVzMTkyLXdyYXAtcGFkJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTAxLjMuNC4xLjQxJyA9PiAnYWVzLTI1Ni1lY2InLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMDEuMy40LjEuNDInID0+ICdhZXMtMjU2LWNiYycsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MycgPT4gJ2Flcy0yNTYtb2ZiJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTAxLjMuNC4xLjQ0JyA9PiAnYWVzLTI1Ni1jZmInLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMDEuMy40LjEuNDUnID0+ICdpZC1hZXMyNTYtd3JhcCcsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjEwMS4zLjQuMS40NicgPT4gJ2Flcy0yNTYtZ2NtJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTAxLjMuNC4xLjQ3JyA9PiAnYWVzLTI1Ni1jY20nLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMDEuMy40LjEuNDgnID0+ICdpZC1hZXMyNTYtd3JhcC1wYWQnLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMDEuMy40LjInID0+ICduaXN0X2hhc2hhbGdzJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTAxLjMuNC4yLjEnID0+ICdzaGEyNTYnLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMDEuMy40LjIuMicgPT4gJ3NoYTM4NCcsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjEwMS4zLjQuMi4zJyA9PiAnc2hhNTEyJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTAxLjMuNC4yLjQnID0+ICdzaGEyMjQnLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMDEuMy40LjMnID0+ICdkc2Ffd2l0aF9zaGEyJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTAxLjMuNC4zLjEnID0+ICdkc2Ffd2l0aF9TSEEyMjQnLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMDEuMy40LjMuMicgPT4gJ2RzYV93aXRoX1NIQTI1NicsCiAgICAgICAgICAgICcyLjUuMjkuMjMnID0+ICdIb2xkIEluc3RydWN0aW9uIENvZGUnLAogICAgICAgICAgICAnMC45JyA9PiAnZGF0YScsCiAgICAgICAgICAgICcwLjkuMjM0MicgPT4gJ3BzcycsCiAgICAgICAgICAgICcwLjkuMjM0Mi4xOTIwMDMwMCcgPT4gJ3VjbCcsCiAgICAgICAgICAgICcwLjkuMjM0Mi4xOTIwMDMwMC4xMDAnID0+ICdwaWxvdCcsCiAgICAgICAgICAgICcwLjkuMjM0Mi4xOTIwMDMwMC4xMDAuMScgPT4gJ3BpbG90QXR0cmlidXRlVHlwZScsCiAgICAgICAgICAgICcwLjkuMjM0Mi4xOTIwMDMwMC4xMDAuMycgPT4gJ3BpbG90QXR0cmlidXRlU3ludGF4JywKICAgICAgICAgICAgJzAuOS4yMzQyLjE5MjAwMzAwLjEwMC40JyA9PiAncGlsb3RPYmplY3RDbGFzcycsCiAgICAgICAgICAgICcwLjkuMjM0Mi4xOTIwMDMwMC4xMDAuMTAnID0+ICdwaWxvdEdyb3VwcycsCiAgICAgICAgICAgICcyLjIzLjQyJyA9PiAnU2VjdXJlIEVsZWN0cm9uaWMgVHJhbnNhY3Rpb25zJywKICAgICAgICAgICAgJzIuMjMuNDIuMCcgPT4gJ2NvbnRlbnQgdHlwZXMnLAogICAgICAgICAgICAnMi4yMy40Mi4xJyA9PiAnbWVzc2FnZSBleHRlbnNpb25zJywKICAgICAgICAgICAgJzIuMjMuNDIuMycgPT4gJ3NldC1hdHRyJywKICAgICAgICAgICAgJzIuMjMuNDIuNScgPT4gJ3NldC1wb2xpY3knLAogICAgICAgICAgICAnMi4yMy40Mi43JyA9PiAnY2VydGlmaWNhdGUgZXh0ZW5zaW9ucycsCiAgICAgICAgICAgICcyLjIzLjQyLjgnID0+ICdzZXQtYnJhbmQnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjAnID0+ICdzZXRjdC1QQU5EYXRhJywKICAgICAgICAgICAgJzIuMjMuNDIuMC4xJyA9PiAnc2V0Y3QtUEFOVG9rZW4nLAogICAgICAgICAgICAnMi4yMy40Mi4wLjInID0+ICdzZXRjdC1QQU5Pbmx5JywKICAgICAgICAgICAgJzIuMjMuNDIuMC4zJyA9PiAnc2V0Y3QtT0lEYXRhJywKICAgICAgICAgICAgJzIuMjMuNDIuMC40JyA9PiAnc2V0Y3QtUEknLAogICAgICAgICAgICAnMi4yMy40Mi4wLjUnID0+ICdzZXRjdC1QSURhdGEnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjYnID0+ICdzZXRjdC1QSURhdGFVbnNpZ25lZCcsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNycgPT4gJ3NldGN0LUhPRElucHV0JywKICAgICAgICAgICAgJzIuMjMuNDIuMC44JyA9PiAnc2V0Y3QtQXV0aFJlc0JhZ2dhZ2UnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjknID0+ICdzZXRjdC1BdXRoUmV2UmVxQmFnZ2FnZScsCiAgICAgICAgICAgICcyLjIzLjQyLjAuMTAnID0+ICdzZXRjdC1BdXRoUmV2UmVzQmFnZ2FnZScsCiAgICAgICAgICAgICcyLjIzLjQyLjAuMTEnID0+ICdzZXRjdC1DYXBUb2tlblNlcScsCiAgICAgICAgICAgICcyLjIzLjQyLjAuMTInID0+ICdzZXRjdC1QSW5pdFJlc0RhdGEnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjEzJyA9PiAnc2V0Y3QtUEktVEJTJywKICAgICAgICAgICAgJzIuMjMuNDIuMC4xNCcgPT4gJ3NldGN0LVBSZXNEYXRhJywKICAgICAgICAgICAgJzIuMjMuNDIuMC4xNicgPT4gJ3NldGN0LUF1dGhSZXFUQlMnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjE3JyA9PiAnc2V0Y3QtQXV0aFJlc1RCUycsCiAgICAgICAgICAgICcyLjIzLjQyLjAuMTgnID0+ICdzZXRjdC1BdXRoUmVzVEJTWCcsCiAgICAgICAgICAgICcyLjIzLjQyLjAuMTknID0+ICdzZXRjdC1BdXRoVG9rZW5UQlMnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjIwJyA9PiAnc2V0Y3QtQ2FwVG9rZW5EYXRhJywKICAgICAgICAgICAgJzIuMjMuNDIuMC4yMScgPT4gJ3NldGN0LUNhcFRva2VuVEJTJywKICAgICAgICAgICAgJzIuMjMuNDIuMC4yMicgPT4gJ3NldGN0LUFjcUNhcmRDb2RlTXNnJywKICAgICAgICAgICAgJzIuMjMuNDIuMC4yMycgPT4gJ3NldGN0LUF1dGhSZXZSZXFUQlMnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjI0JyA9PiAnc2V0Y3QtQXV0aFJldlJlc0RhdGEnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjI1JyA9PiAnc2V0Y3QtQXV0aFJldlJlc1RCUycsCiAgICAgICAgICAgICcyLjIzLjQyLjAuMjYnID0+ICdzZXRjdC1DYXBSZXFUQlMnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjI3JyA9PiAnc2V0Y3QtQ2FwUmVxVEJTWCcsCiAgICAgICAgICAgICcyLjIzLjQyLjAuMjgnID0+ICdzZXRjdC1DYXBSZXNEYXRhJywKICAgICAgICAgICAgJzIuMjMuNDIuMC4yOScgPT4gJ3NldGN0LUNhcFJldlJlcVRCUycsCiAgICAgICAgICAgICcyLjIzLjQyLjAuMzAnID0+ICdzZXRjdC1DYXBSZXZSZXFUQlNYJywKICAgICAgICAgICAgJzIuMjMuNDIuMC4zMScgPT4gJ3NldGN0LUNhcFJldlJlc0RhdGEnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjMyJyA9PiAnc2V0Y3QtQ3JlZFJlcVRCUycsCiAgICAgICAgICAgICcyLjIzLjQyLjAuMzMnID0+ICdzZXRjdC1DcmVkUmVxVEJTWCcsCiAgICAgICAgICAgICcyLjIzLjQyLjAuMzQnID0+ICdzZXRjdC1DcmVkUmVzRGF0YScsCiAgICAgICAgICAgICcyLjIzLjQyLjAuMzUnID0+ICdzZXRjdC1DcmVkUmV2UmVxVEJTJywKICAgICAgICAgICAgJzIuMjMuNDIuMC4zNicgPT4gJ3NldGN0LUNyZWRSZXZSZXFUQlNYJywKICAgICAgICAgICAgJzIuMjMuNDIuMC4zNycgPT4gJ3NldGN0LUNyZWRSZXZSZXNEYXRhJywKICAgICAgICAgICAgJzIuMjMuNDIuMC4zOCcgPT4gJ3NldGN0LVBDZXJ0UmVxRGF0YScsCiAgICAgICAgICAgICcyLjIzLjQyLjAuMzknID0+ICdzZXRjdC1QQ2VydFJlc1RCUycsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNDAnID0+ICdzZXRjdC1CYXRjaEFkbWluUmVxRGF0YScsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNDEnID0+ICdzZXRjdC1CYXRjaEFkbWluUmVzRGF0YScsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNDInID0+ICdzZXRjdC1DYXJkQ0luaXRSZXNUQlMnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjQzJyA9PiAnc2V0Y3QtTWVBcUNJbml0UmVzVEJTJywKICAgICAgICAgICAgJzIuMjMuNDIuMC40NCcgPT4gJ3NldGN0LVJlZ0Zvcm1SZXNUQlMnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjQ1JyA9PiAnc2V0Y3QtQ2VydFJlcURhdGEnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjQ2JyA9PiAnc2V0Y3QtQ2VydFJlcVRCUycsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNDcnID0+ICdzZXRjdC1DZXJ0UmVzRGF0YScsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNDgnID0+ICdzZXRjdC1DZXJ0SW5xUmVxVEJTJywKICAgICAgICAgICAgJzIuMjMuNDIuMC40OScgPT4gJ3NldGN0LUVycm9yVEJTJywKICAgICAgICAgICAgJzIuMjMuNDIuMC41MCcgPT4gJ3NldGN0LVBJRHVhbFNpZ25lZFRCRScsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNTEnID0+ICdzZXRjdC1QSVVuc2lnbmVkVEJFJywKICAgICAgICAgICAgJzIuMjMuNDIuMC41MicgPT4gJ3NldGN0LUF1dGhSZXFUQkUnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjUzJyA9PiAnc2V0Y3QtQXV0aFJlc1RCRScsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNTQnID0+ICdzZXRjdC1BdXRoUmVzVEJFWCcsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNTUnID0+ICdzZXRjdC1BdXRoVG9rZW5UQkUnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjU2JyA9PiAnc2V0Y3QtQ2FwVG9rZW5UQkUnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjU3JyA9PiAnc2V0Y3QtQ2FwVG9rZW5UQkVYJywKICAgICAgICAgICAgJzIuMjMuNDIuMC41OCcgPT4gJ3NldGN0LUFjcUNhcmRDb2RlTXNnVEJFJywKICAgICAgICAgICAgJzIuMjMuNDIuMC41OScgPT4gJ3NldGN0LUF1dGhSZXZSZXFUQkUnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjYwJyA9PiAnc2V0Y3QtQXV0aFJldlJlc1RCRScsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNjEnID0+ICdzZXRjdC1BdXRoUmV2UmVzVEJFQicsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNjInID0+ICdzZXRjdC1DYXBSZXFUQkUnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjYzJyA9PiAnc2V0Y3QtQ2FwUmVxVEJFWCcsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNjQnID0+ICdzZXRjdC1DYXBSZXNUQkUnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjY1JyA9PiAnc2V0Y3QtQ2FwUmV2UmVxVEJFJywKICAgICAgICAgICAgJzIuMjMuNDIuMC42NicgPT4gJ3NldGN0LUNhcFJldlJlcVRCRVgnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjY3JyA9PiAnc2V0Y3QtQ2FwUmV2UmVzVEJFJywKICAgICAgICAgICAgJzIuMjMuNDIuMC42OCcgPT4gJ3NldGN0LUNyZWRSZXFUQkUnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjY5JyA9PiAnc2V0Y3QtQ3JlZFJlcVRCRVgnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjcwJyA9PiAnc2V0Y3QtQ3JlZFJlc1RCRScsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNzEnID0+ICdzZXRjdC1DcmVkUmV2UmVxVEJFJywKICAgICAgICAgICAgJzIuMjMuNDIuMC43MicgPT4gJ3NldGN0LUNyZWRSZXZSZXFUQkVYJywKICAgICAgICAgICAgJzIuMjMuNDIuMC43MycgPT4gJ3NldGN0LUNyZWRSZXZSZXNUQkUnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjc0JyA9PiAnc2V0Y3QtQmF0Y2hBZG1pblJlcVRCRScsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNzUnID0+ICdzZXRjdC1CYXRjaEFkbWluUmVzVEJFJywKICAgICAgICAgICAgJzIuMjMuNDIuMC43NicgPT4gJ3NldGN0LVJlZ0Zvcm1SZXFUQkUnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjc3JyA9PiAnc2V0Y3QtQ2VydFJlcVRCRScsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNzgnID0+ICdzZXRjdC1DZXJ0UmVxVEJFWCcsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNzknID0+ICdzZXRjdC1DZXJ0UmVzVEJFJywKICAgICAgICAgICAgJzIuMjMuNDIuMC44MCcgPT4gJ3NldGN0LUNSTE5vdGlmaWNhdGlvblRCUycsCiAgICAgICAgICAgICcyLjIzLjQyLjAuODEnID0+ICdzZXRjdC1DUkxOb3RpZmljYXRpb25SZXNUQlMnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjgyJyA9PiAnc2V0Y3QtQkNJRGlzdHJpYnV0aW9uVEJTJywKICAgICAgICAgICAgJzIuMjMuNDIuMS4xJyA9PiAnZ2VuZXJpYyBjcnlwdG9ncmFtJywKICAgICAgICAgICAgJzIuMjMuNDIuMS4zJyA9PiAnbWVyY2hhbnQgaW5pdGlhdGVkIGF1dGgnLAogICAgICAgICAgICAnMi4yMy40Mi4xLjQnID0+ICdzZXRleHQtcGluU2VjdXJlJywKICAgICAgICAgICAgJzIuMjMuNDIuMS41JyA9PiAnc2V0ZXh0LXBpbkFueScsCiAgICAgICAgICAgICcyLjIzLjQyLjEuNycgPT4gJ3NldGV4dC10cmFjazInLAogICAgICAgICAgICAnMi4yMy40Mi4xLjgnID0+ICdhZGRpdGlvbmFsIHZlcmlmaWNhdGlvbicsCiAgICAgICAgICAgICcyLjIzLjQyLjUuMCcgPT4gJ3NldC1wb2xpY3ktcm9vdCcsCiAgICAgICAgICAgICcyLjIzLjQyLjcuMCcgPT4gJ3NldENleHQtaGFzaGVkUm9vdCcsCiAgICAgICAgICAgICcyLjIzLjQyLjcuMScgPT4gJ3NldENleHQtY2VydFR5cGUnLAogICAgICAgICAgICAnMi4yMy40Mi43LjInID0+ICdzZXRDZXh0LW1lcmNoRGF0YScsCiAgICAgICAgICAgICcyLjIzLjQyLjcuMycgPT4gJ3NldENleHQtY0NlcnRSZXF1aXJlZCcsCiAgICAgICAgICAgICcyLjIzLjQyLjcuNCcgPT4gJ3NldENleHQtdHVubmVsaW5nJywKICAgICAgICAgICAgJzIuMjMuNDIuNy41JyA9PiAnc2V0Q2V4dC1zZXRFeHQnLAogICAgICAgICAgICAnMi4yMy40Mi43LjYnID0+ICdzZXRDZXh0LXNldFF1YWxmJywKICAgICAgICAgICAgJzIuMjMuNDIuNy43JyA9PiAnc2V0Q2V4dC1QR1dZY2FwYWJpbGl0aWVzJywKICAgICAgICAgICAgJzIuMjMuNDIuNy44JyA9PiAnc2V0Q2V4dC1Ub2tlbklkZW50aWZpZXInLAogICAgICAgICAgICAnMi4yMy40Mi43LjknID0+ICdzZXRDZXh0LVRyYWNrMkRhdGEnLAogICAgICAgICAgICAnMi4yMy40Mi43LjEwJyA9PiAnc2V0Q2V4dC1Ub2tlblR5cGUnLAogICAgICAgICAgICAnMi4yMy40Mi43LjExJyA9PiAnc2V0Q2V4dC1Jc3N1ZXJDYXBhYmlsaXRpZXMnLAogICAgICAgICAgICAnMi4yMy40Mi4zLjAnID0+ICdzZXRBdHRyLUNlcnQnLAogICAgICAgICAgICAnMi4yMy40Mi4zLjEnID0+ICdwYXltZW50IGdhdGV3YXkgY2FwYWJpbGl0aWVzJywKICAgICAgICAgICAgJzIuMjMuNDIuMy4yJyA9PiAnc2V0QXR0ci1Ub2tlblR5cGUnLAogICAgICAgICAgICAnMi4yMy40Mi4zLjMnID0+ICdpc3N1ZXIgY2FwYWJpbGl0aWVzJywKICAgICAgICAgICAgJzIuMjMuNDIuMy4wLjAnID0+ICdzZXQtcm9vdEtleVRodW1iJywKICAgICAgICAgICAgJzIuMjMuNDIuMy4wLjEnID0+ICdzZXQtYWRkUG9saWN5JywKICAgICAgICAgICAgJzIuMjMuNDIuMy4yLjEnID0+ICdzZXRBdHRyLVRva2VuLUVNVicsCiAgICAgICAgICAgICcyLjIzLjQyLjMuMi4yJyA9PiAnc2V0QXR0ci1Ub2tlbi1CMFByaW1lJywKICAgICAgICAgICAgJzIuMjMuNDIuMy4zLjMnID0+ICdzZXRBdHRyLUlzc0NhcC1DVk0nLAogICAgICAgICAgICAnMi4yMy40Mi4zLjMuNCcgPT4gJ3NldEF0dHItSXNzQ2FwLVQyJywKICAgICAgICAgICAgJzIuMjMuNDIuMy4zLjUnID0+ICdzZXRBdHRyLUlzc0NhcC1TaWcnLAogICAgICAgICAgICAnMi4yMy40Mi4zLjMuMy4xJyA9PiAnZ2VuZXJhdGUgY3J5cHRvZ3JhbScsCiAgICAgICAgICAgICcyLjIzLjQyLjMuMy40LjEnID0+ICdlbmNyeXB0ZWQgdHJhY2sgMicsCiAgICAgICAgICAgICcyLjIzLjQyLjMuMy40LjInID0+ICdjbGVhcnRleHQgdHJhY2sgMicsCiAgICAgICAgICAgICcyLjIzLjQyLjMuMy41LjEnID0+ICdJQ0Mgb3IgdG9rZW4gc2lnbmF0dXJlJywKICAgICAgICAgICAgJzIuMjMuNDIuMy4zLjUuMicgPT4gJ3NlY3VyZSBkZXZpY2Ugc2lnbmF0dXJlJywKICAgICAgICAgICAgJzIuMjMuNDIuOC4xJyA9PiAnc2V0LWJyYW5kLUlBVEEtQVRBJywKICAgICAgICAgICAgJzIuMjMuNDIuOC4zMCcgPT4gJ3NldC1icmFuZC1EaW5lcnMnLAogICAgICAgICAgICAnMi4yMy40Mi44LjM0JyA9PiAnc2V0LWJyYW5kLUFtZXJpY2FuRXhwcmVzcycsCiAgICAgICAgICAgICcyLjIzLjQyLjguMzUnID0+ICdzZXQtYnJhbmQtSkNCJywKICAgICAgICAgICAgJzIuMjMuNDIuOC40JyA9PiAnc2V0LWJyYW5kLVZpc2EnLAogICAgICAgICAgICAnMi4yMy40Mi44LjUnID0+ICdzZXQtYnJhbmQtTWFzdGVyQ2FyZCcsCiAgICAgICAgICAgICcyLjIzLjQyLjguNjAxMScgPT4gJ3NldC1icmFuZC1Ob3Z1cycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4zLjEwJyA9PiAnZGVzLWNkbWYnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS4xLjYnID0+ICdyc2FPQUVQRW5jcnlwdGlvblNFVCcsCiAgICAgICAgICAgICcxLjAuMTAxMTguMy4wLjU1JyA9PiAnd2hpcmxwb29sJywKICAgICAgICAgICAgJzEuMi42NDMuMi4yJyA9PiAnY3J5cHRvcHJvJywKICAgICAgICAgICAgJzEuMi42NDMuMi45JyA9PiAnY3J5cHRvY29tJywKICAgICAgICAgICAgJzEuMi42NDMuMi4yLjMnID0+ICdHT1NUIFIgMzQuMTEtOTQgd2l0aCBHT1NUIFIgMzQuMTAtMjAwMScsCiAgICAgICAgICAgICcxLjIuNjQzLjIuMi40JyA9PiAnR09TVCBSIDM0LjExLTk0IHdpdGggR09TVCBSIDM0LjEwLTk0JywKICAgICAgICAgICAgJzEuMi42NDMuMi4yLjknID0+ICdHT1NUIFIgMzQuMTEtOTQnLAogICAgICAgICAgICAnMS4yLjY0My4yLjIuMTAnID0+ICdITUFDIEdPU1QgMzQuMTEtOTQnLAogICAgICAgICAgICAnMS4yLjY0My4yLjIuMTknID0+ICdHT1NUIFIgMzQuMTAtMjAwMScsCiAgICAgICAgICAgICcxLjIuNjQzLjIuMi4yMCcgPT4gJ0dPU1QgUiAzNC4xMC05NCcsCiAgICAgICAgICAgICcxLjIuNjQzLjIuMi4yMScgPT4gJ0dPU1QgMjgxNDctODknLAogICAgICAgICAgICAnMS4yLjY0My4yLjIuMjInID0+ICdHT1NUIDI4MTQ3LTg5IE1BQycsCiAgICAgICAgICAgICcxLjIuNjQzLjIuMi4yMycgPT4gJ0dPU1QgUiAzNC4xMS05NCBQUkYnLAogICAgICAgICAgICAnMS4yLjY0My4yLjIuOTgnID0+ICdHT1NUIFIgMzQuMTAtMjAwMSBESCcsCiAgICAgICAgICAgICcxLjIuNjQzLjIuMi45OScgPT4gJ0dPU1QgUiAzNC4xMC05NCBESCcsCiAgICAgICAgICAgICcxLjIuNjQzLjIuMi4xNC4xJyA9PiAnaWQtR29zdDI4MTQ3LTg5LUNyeXB0b1Byby1LZXlNZXNoaW5nJywKICAgICAgICAgICAgJzEuMi42NDMuMi4yLjE0LjAnID0+ICdpZC1Hb3N0MjgxNDctODktTm9uZS1LZXlNZXNoaW5nJywKICAgICAgICAgICAgJzEuMi42NDMuMi4yLjMwLjAnID0+ICdpZC1Hb3N0UjM0MTEtOTQtVGVzdFBhcmFtU2V0JywKICAgICAgICAgICAgJzEuMi42NDMuMi4yLjMwLjEnID0+ICdpZC1Hb3N0UjM0MTEtOTQtQ3J5cHRvUHJvUGFyYW1TZXQnLAogICAgICAgICAgICAnMS4yLjY0My4yLjIuMzEuMCcgPT4gJ2lkLUdvc3QyODE0Ny04OS1UZXN0UGFyYW1TZXQnLAogICAgICAgICAgICAnMS4yLjY0My4yLjIuMzEuMScgPT4gJ2lkLUdvc3QyODE0Ny04OS1DcnlwdG9Qcm8tQS1QYXJhbVNldCcsCiAgICAgICAgICAgICcxLjIuNjQzLjIuMi4zMS4yJyA9PiAnaWQtR29zdDI4MTQ3LTg5LUNyeXB0b1Byby1CLVBhcmFtU2V0JywKICAgICAgICAgICAgJzEuMi42NDMuMi4yLjMxLjMnID0+ICdpZC1Hb3N0MjgxNDctODktQ3J5cHRvUHJvLUMtUGFyYW1TZXQnLAogICAgICAgICAgICAnMS4yLjY0My4yLjIuMzEuNCcgPT4gJ2lkLUdvc3QyODE0Ny04OS1DcnlwdG9Qcm8tRC1QYXJhbVNldCcsCiAgICAgICAgICAgICcxLjIuNjQzLjIuMi4zMS41JyA9PiAnaWQtR29zdDI4MTQ3LTg5LUNyeXB0b1Byby1Pc2Nhci0xLTEtUGFyYW1TZXQnLAogICAgICAgICAgICAnMS4yLjY0My4yLjIuMzEuNicgPT4gJ2lkLUdvc3QyODE0Ny04OS1DcnlwdG9Qcm8tT3NjYXItMS0wLVBhcmFtU2V0JywKICAgICAgICAgICAgJzEuMi42NDMuMi4yLjMxLjcnID0+ICdpZC1Hb3N0MjgxNDctODktQ3J5cHRvUHJvLVJJQy0xLVBhcmFtU2V0JywKICAgICAgICAgICAgJzEuMi42NDMuMi4yLjMyLjAnID0+ICdpZC1Hb3N0UjM0MTAtOTQtVGVzdFBhcmFtU2V0JywKICAgICAgICAgICAgJzEuMi42NDMuMi4yLjMyLjInID0+ICdpZC1Hb3N0UjM0MTAtOTQtQ3J5cHRvUHJvLUEtUGFyYW1TZXQnLAogICAgICAgICAgICAnMS4yLjY0My4yLjIuMzIuMycgPT4gJ2lkLUdvc3RSMzQxMC05NC1DcnlwdG9Qcm8tQi1QYXJhbVNldCcsCiAgICAgICAgICAgICcxLjIuNjQzLjIuMi4zMi40JyA9PiAnaWQtR29zdFIzNDEwLTk0LUNyeXB0b1Byby1DLVBhcmFtU2V0JywKICAgICAgICAgICAgJzEuMi42NDMuMi4yLjMyLjUnID0+ICdpZC1Hb3N0UjM0MTAtOTQtQ3J5cHRvUHJvLUQtUGFyYW1TZXQnLAogICAgICAgICAgICAnMS4yLjY0My4yLjIuMzMuMScgPT4gJ2lkLUdvc3RSMzQxMC05NC1DcnlwdG9Qcm8tWGNoQS1QYXJhbVNldCcsCiAgICAgICAgICAgICcxLjIuNjQzLjIuMi4zMy4yJyA9PiAnaWQtR29zdFIzNDEwLTk0LUNyeXB0b1Byby1YY2hCLVBhcmFtU2V0JywKICAgICAgICAgICAgJzEuMi42NDMuMi4yLjMzLjMnID0+ICdpZC1Hb3N0UjM0MTAtOTQtQ3J5cHRvUHJvLVhjaEMtUGFyYW1TZXQnLAogICAgICAgICAgICAnMS4yLjY0My4yLjIuMzUuMCcgPT4gJ2lkLUdvc3RSMzQxMC0yMDAxLVRlc3RQYXJhbVNldCcsCiAgICAgICAgICAgICcxLjIuNjQzLjIuMi4zNS4xJyA9PiAnaWQtR29zdFIzNDEwLTIwMDEtQ3J5cHRvUHJvLUEtUGFyYW1TZXQnLAogICAgICAgICAgICAnMS4yLjY0My4yLjIuMzUuMicgPT4gJ2lkLUdvc3RSMzQxMC0yMDAxLUNyeXB0b1Byby1CLVBhcmFtU2V0JywKICAgICAgICAgICAgJzEuMi42NDMuMi4yLjM1LjMnID0+ICdpZC1Hb3N0UjM0MTAtMjAwMS1DcnlwdG9Qcm8tQy1QYXJhbVNldCcsCiAgICAgICAgICAgICcxLjIuNjQzLjIuMi4zNi4wJyA9PiAnaWQtR29zdFIzNDEwLTIwMDEtQ3J5cHRvUHJvLVhjaEEtUGFyYW1TZXQnLAogICAgICAgICAgICAnMS4yLjY0My4yLjIuMzYuMScgPT4gJ2lkLUdvc3RSMzQxMC0yMDAxLUNyeXB0b1Byby1YY2hCLVBhcmFtU2V0JywKICAgICAgICAgICAgJzEuMi42NDMuMi4yLjIwLjEnID0+ICdpZC1Hb3N0UjM0MTAtOTQtYScsCiAgICAgICAgICAgICcxLjIuNjQzLjIuMi4yMC4yJyA9PiAnaWQtR29zdFIzNDEwLTk0LWFCaXMnLAogICAgICAgICAgICAnMS4yLjY0My4yLjIuMjAuMycgPT4gJ2lkLUdvc3RSMzQxMC05NC1iJywKICAgICAgICAgICAgJzEuMi42NDMuMi4yLjIwLjQnID0+ICdpZC1Hb3N0UjM0MTAtOTQtYkJpcycsCiAgICAgICAgICAgICcxLjIuNjQzLjIuOS4xLjYuMScgPT4gJ0dPU1QgMjgxNDctODkgQ3J5cHRvY29tIFBhcmFtU2V0JywKICAgICAgICAgICAgJzEuMi42NDMuMi45LjEuNS4zJyA9PiAnR09TVCAzNC4xMC05NCBDcnlwdG9jb20nLAogICAgICAgICAgICAnMS4yLjY0My4yLjkuMS41LjQnID0+ICdHT1NUIDM0LjEwLTIwMDEgQ3J5cHRvY29tJywKICAgICAgICAgICAgJzEuMi42NDMuMi45LjEuMy4zJyA9PiAnR09TVCBSIDM0LjExLTk0IHdpdGggR09TVCBSIDM0LjEwLTk0IENyeXB0b2NvbScsCiAgICAgICAgICAgICcxLjIuNjQzLjIuOS4xLjMuNCcgPT4gJ0dPU1QgUiAzNC4xMS05NCB3aXRoIEdPU1QgUiAzNC4xMC0yMDAxIENyeXB0b2NvbScsCiAgICAgICAgICAgICcxLjIuNjQzLjIuOS4xLjguMScgPT4gJ0dPU1QgUiAzNDEwLTIwMDEgUGFyYW1ldGVyIFNldCBDcnlwdG9jb20nLAogICAgICAgICAgICAnMS4yLjM5Mi4yMDAwMTEuNjEuMS4xLjEuMicgPT4gJ2NhbWVsbGlhLTEyOC1jYmMnLAogICAgICAgICAgICAnMS4yLjM5Mi4yMDAwMTEuNjEuMS4xLjEuMycgPT4gJ2NhbWVsbGlhLTE5Mi1jYmMnLAogICAgICAgICAgICAnMS4yLjM5Mi4yMDAwMTEuNjEuMS4xLjEuNCcgPT4gJ2NhbWVsbGlhLTI1Ni1jYmMnLAogICAgICAgICAgICAnMS4yLjM5Mi4yMDAwMTEuNjEuMS4xLjMuMicgPT4gJ2lkLWNhbWVsbGlhMTI4LXdyYXAnLAogICAgICAgICAgICAnMS4yLjM5Mi4yMDAwMTEuNjEuMS4xLjMuMycgPT4gJ2lkLWNhbWVsbGlhMTkyLXdyYXAnLAogICAgICAgICAgICAnMS4yLjM5Mi4yMDAwMTEuNjEuMS4xLjMuNCcgPT4gJ2lkLWNhbWVsbGlhMjU2LXdyYXAnLAogICAgICAgICAgICAnMC4zLjQ0MDEuNScgPT4gJ250dC1kcycsCiAgICAgICAgICAgICcwLjMuNDQwMS41LjMuMS45JyA9PiAnY2FtZWxsaWEnLAogICAgICAgICAgICAnMC4zLjQ0MDEuNS4zLjEuOS4xJyA9PiAnY2FtZWxsaWEtMTI4LWVjYicsCiAgICAgICAgICAgICcwLjMuNDQwMS41LjMuMS45LjMnID0+ICdjYW1lbGxpYS0xMjgtb2ZiJywKICAgICAgICAgICAgJzAuMy40NDAxLjUuMy4xLjkuNCcgPT4gJ2NhbWVsbGlhLTEyOC1jZmInLAogICAgICAgICAgICAnMC4zLjQ0MDEuNS4zLjEuOS42JyA9PiAnY2FtZWxsaWEtMTI4LWdjbScsCiAgICAgICAgICAgICcwLjMuNDQwMS41LjMuMS45LjcnID0+ICdjYW1lbGxpYS0xMjgtY2NtJywKICAgICAgICAgICAgJzAuMy40NDAxLjUuMy4xLjkuOScgPT4gJ2NhbWVsbGlhLTEyOC1jdHInLAogICAgICAgICAgICAnMC4zLjQ0MDEuNS4zLjEuOS4xMCcgPT4gJ2NhbWVsbGlhLTEyOC1jbWFjJywKICAgICAgICAgICAgJzAuMy40NDAxLjUuMy4xLjkuMjEnID0+ICdjYW1lbGxpYS0xOTItZWNiJywKICAgICAgICAgICAgJzAuMy40NDAxLjUuMy4xLjkuMjMnID0+ICdjYW1lbGxpYS0xOTItb2ZiJywKICAgICAgICAgICAgJzAuMy40NDAxLjUuMy4xLjkuMjQnID0+ICdjYW1lbGxpYS0xOTItY2ZiJywKICAgICAgICAgICAgJzAuMy40NDAxLjUuMy4xLjkuMjYnID0+ICdjYW1lbGxpYS0xOTItZ2NtJywKICAgICAgICAgICAgJzAuMy40NDAxLjUuMy4xLjkuMjcnID0+ICdjYW1lbGxpYS0xOTItY2NtJywKICAgICAgICAgICAgJzAuMy40NDAxLjUuMy4xLjkuMjknID0+ICdjYW1lbGxpYS0xOTItY3RyJywKICAgICAgICAgICAgJzAuMy40NDAxLjUuMy4xLjkuMzAnID0+ICdjYW1lbGxpYS0xOTItY21hYycsCiAgICAgICAgICAgICcwLjMuNDQwMS41LjMuMS45LjQxJyA9PiAnY2FtZWxsaWEtMjU2LWVjYicsCiAgICAgICAgICAgICcwLjMuNDQwMS41LjMuMS45LjQzJyA9PiAnY2FtZWxsaWEtMjU2LW9mYicsCiAgICAgICAgICAgICcwLjMuNDQwMS41LjMuMS45LjQ0JyA9PiAnY2FtZWxsaWEtMjU2LWNmYicsCiAgICAgICAgICAgICcwLjMuNDQwMS41LjMuMS45LjQ2JyA9PiAnY2FtZWxsaWEtMjU2LWdjbScsCiAgICAgICAgICAgICcwLjMuNDQwMS41LjMuMS45LjQ3JyA9PiAnY2FtZWxsaWEtMjU2LWNjbScsCiAgICAgICAgICAgICcwLjMuNDQwMS41LjMuMS45LjQ5JyA9PiAnY2FtZWxsaWEtMjU2LWN0cicsCiAgICAgICAgICAgICcwLjMuNDQwMS41LjMuMS45LjUwJyA9PiAnY2FtZWxsaWEtMjU2LWNtYWMnLAogICAgICAgICAgICAnMS4yLjQxMC4yMDAwMDQnID0+ICdraXNhJywKICAgICAgICAgICAgJzEuMi40MTAuMjAwMDA0LjEuMycgPT4gJ3NlZWQtZWNiJywKICAgICAgICAgICAgJzEuMi40MTAuMjAwMDA0LjEuNCcgPT4gJ3NlZWQtY2JjJywKICAgICAgICAgICAgJzEuMi40MTAuMjAwMDA0LjEuNScgPT4gJ3NlZWQtY2ZiJywKICAgICAgICAgICAgJzEuMi40MTAuMjAwMDA0LjEuNicgPT4gJ3NlZWQtb2ZiJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDYuMi4xJyA9PiAnWDkuNDIgREgnLAogICAgICAgICAgICAnMS4zLjM2LjMuMy4yLjguMS4xLjEnID0+ICdicmFpbnBvb2xQMTYwcjEnLAogICAgICAgICAgICAnMS4zLjM2LjMuMy4yLjguMS4xLjInID0+ICdicmFpbnBvb2xQMTYwdDEnLAogICAgICAgICAgICAnMS4zLjM2LjMuMy4yLjguMS4xLjMnID0+ICdicmFpbnBvb2xQMTkycjEnLAogICAgICAgICAgICAnMS4zLjM2LjMuMy4yLjguMS4xLjQnID0+ICdicmFpbnBvb2xQMTkydDEnLAogICAgICAgICAgICAnMS4zLjM2LjMuMy4yLjguMS4xLjUnID0+ICdicmFpbnBvb2xQMjI0cjEnLAogICAgICAgICAgICAnMS4zLjM2LjMuMy4yLjguMS4xLjYnID0+ICdicmFpbnBvb2xQMjI0dDEnLAogICAgICAgICAgICAnMS4zLjM2LjMuMy4yLjguMS4xLjcnID0+ICdicmFpbnBvb2xQMjU2cjEnLAogICAgICAgICAgICAnMS4zLjM2LjMuMy4yLjguMS4xLjgnID0+ICdicmFpbnBvb2xQMjU2dDEnLAogICAgICAgICAgICAnMS4zLjM2LjMuMy4yLjguMS4xLjknID0+ICdicmFpbnBvb2xQMzIwcjEnLAogICAgICAgICAgICAnMS4zLjM2LjMuMy4yLjguMS4xLjEwJyA9PiAnYnJhaW5wb29sUDMyMHQxJywKICAgICAgICAgICAgJzEuMy4zNi4zLjMuMi44LjEuMS4xMScgPT4gJ2JyYWlucG9vbFAzODRyMScsCiAgICAgICAgICAgICcxLjMuMzYuMy4zLjIuOC4xLjEuMTInID0+ICdicmFpbnBvb2xQMzg0dDEnLAogICAgICAgICAgICAnMS4zLjM2LjMuMy4yLjguMS4xLjEzJyA9PiAnYnJhaW5wb29sUDUxMnIxJywKICAgICAgICAgICAgJzEuMy4zNi4zLjMuMi44LjEuMS4xNCcgPT4gJ2JyYWlucG9vbFA1MTJ0MScsCiAgICAgICAgICAgICcxLjMuMTMzLjE2Ljg0MC42My4wJyA9PiAneDktNjMtc2NoZW1lJywKICAgICAgICAgICAgJzEuMy4xMzIuMScgPT4gJ3NlY2ctc2NoZW1lJywKICAgICAgICAgICAgJzEuMy4xMzMuMTYuODQwLjYzLjAuMicgPT4gJ2RoU2luZ2xlUGFzcy1zdGRESC1zaGExa2RmLXNjaGVtZScsCiAgICAgICAgICAgICcxLjMuMTMyLjEuMTEuMCcgPT4gJ2RoU2luZ2xlUGFzcy1zdGRESC1zaGEyMjRrZGYtc2NoZW1lJywKICAgICAgICAgICAgJzEuMy4xMzIuMS4xMS4xJyA9PiAnZGhTaW5nbGVQYXNzLXN0ZERILXNoYTI1NmtkZi1zY2hlbWUnLAogICAgICAgICAgICAnMS4zLjEzMi4xLjExLjInID0+ICdkaFNpbmdsZVBhc3Mtc3RkREgtc2hhMzg0a2RmLXNjaGVtZScsCiAgICAgICAgICAgICcxLjMuMTMyLjEuMTEuMycgPT4gJ2RoU2luZ2xlUGFzcy1zdGRESC1zaGE1MTJrZGYtc2NoZW1lJywKICAgICAgICAgICAgJzEuMy4xMzMuMTYuODQwLjYzLjAuMycgPT4gJ2RoU2luZ2xlUGFzcy1jb2ZhY3RvckRILXNoYTFrZGYtc2NoZW1lJywKICAgICAgICAgICAgJzEuMy4xMzIuMS4xNC4wJyA9PiAnZGhTaW5nbGVQYXNzLWNvZmFjdG9yREgtc2hhMjI0a2RmLXNjaGVtZScsCiAgICAgICAgICAgICcxLjMuMTMyLjEuMTQuMScgPT4gJ2RoU2luZ2xlUGFzcy1jb2ZhY3RvckRILXNoYTI1NmtkZi1zY2hlbWUnLAogICAgICAgICAgICAnMS4zLjEzMi4xLjE0LjInID0+ICdkaFNpbmdsZVBhc3MtY29mYWN0b3JESC1zaGEzODRrZGYtc2NoZW1lJywKICAgICAgICAgICAgJzEuMy4xMzIuMS4xNC4zJyA9PiAnZGhTaW5nbGVQYXNzLWNvZmFjdG9yREgtc2hhNTEya2RmLXNjaGVtZScsCiAgICAgICAgICAgICcxLjMuNi4xLjQuMS4xMTEyOS4yLjQuMicgPT4gJ0NUIFByZWNlcnRpZmljYXRlIFNDVHMnLAogICAgICAgICAgICAnMS4zLjYuMS40LjEuMTExMjkuMi40LjMnID0+ICdDVCBQcmVjZXJ0aWZpY2F0ZSBQb2lzb24nLAogICAgICAgICAgICAnMS4zLjYuMS40LjEuMTExMjkuMi40LjQnID0+ICdDVCBQcmVjZXJ0aWZpY2F0ZSBTaWduZXInLAogICAgICAgICAgICAnMS4zLjYuMS40LjEuMTExMjkuMi40LjUnID0+ICdDVCBDZXJ0aWZpY2F0ZSBTQ1RzJywKICAgICAgICAgICAgJzEuMy42LjEuNC4xLjMxMS42MC4yLjEuMScgPT4gJ2p1cmlzZGljdGlvbkxvY2FsaXR5TmFtZScsCiAgICAgICAgICAgICcxLjMuNi4xLjQuMS4zMTEuNjAuMi4xLjInID0+ICdqdXJpc2RpY3Rpb25TdGF0ZU9yUHJvdmluY2VOYW1lJywKICAgICAgICAgICAgJzEuMy42LjEuNC4xLjMxMS42MC4yLjEuMycgPT4gJ2p1cmlzZGljdGlvbkNvdW50cnlOYW1lJywKICAgICAgICAgICAgJzEuMy42LjEuNC4xLjExNTkxLjQuMTEnID0+ICdpZC1zY3J5cHQnLAogICAgICAgIF07CgogICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCRvaWRTdHJpbmcsICRvaWRzKSkgewogICAgICAgICAgICByZXR1cm4gJG9pZHNbJG9pZFN0cmluZ107CiAgICAgICAgfQoKICAgICAgICBzd2l0Y2ggKCRvaWRTdHJpbmcpIHsKICAgICAgICAgICAgY2FzZSBzZWxmOjpSU0FfRU5DUllQVElPTjoKICAgICAgICAgICAgICAgIHJldHVybiAnUlNBIEVuY3J5cHRpb24nOwogICAgICAgICAgICBjYXNlIHNlbGY6Ok1ENV9XSVRIX1JTQV9FTkNSWVBUSU9OOgogICAgICAgICAgICAgICAgcmV0dXJuICdNRDUgd2l0aCBSU0EgRW5jcnlwdGlvbic7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6U0hBMV9XSVRIX1JTQV9TSUdOQVRVUkU6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1NIQS0xIHdpdGggUlNBIFNpZ25hdHVyZSc7CgogICAgICAgICAgICBjYXNlIHNlbGY6OlBLQ1M5X0VNQUlMOgogICAgICAgICAgICAgICAgcmV0dXJuICdQS0NTICM5IEVtYWlsIEFkZHJlc3MnOwogICAgICAgICAgICBjYXNlIHNlbGY6OlBLQ1M5X1VOU1RSVUNUVVJFRF9OQU1FOgogICAgICAgICAgICAgICAgcmV0dXJuICdQS0NTICM5IFVuc3RydWN0dXJlZCBOYW1lJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpQS0NTOV9DT05URU5UX1RZUEU6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1BLQ1MgIzkgQ29udGVudCBUeXBlJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpQS0NTOV9NRVNTQUdFX0RJR0VTVDoKICAgICAgICAgICAgICAgIHJldHVybiAnUEtDUyAjOSBNZXNzYWdlIERpZ2VzdCc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6UEtDUzlfU0lHTklOR19USU1FOgogICAgICAgICAgICAgICAgcmV0dXJuICdQS0NTICM5IFNpZ25pbmcgVGltZSc7CgogICAgICAgICAgICBjYXNlIHNlbGY6OkNPTU1PTl9OQU1FOgogICAgICAgICAgICAgICAgcmV0dXJuICdDb21tb24gTmFtZSc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6U1VSTkFNRToKICAgICAgICAgICAgICAgIHJldHVybiAnU3VybmFtZSc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6U0VSSUFMX05VTUJFUjoKICAgICAgICAgICAgICAgIHJldHVybiAnU2VyaWFsIE51bWJlcic7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6Q09VTlRSWV9OQU1FOgogICAgICAgICAgICAgICAgcmV0dXJuICdDb3VudHJ5IE5hbWUnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkxPQ0FMSVRZX05BTUU6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0xvY2FsaXR5IE5hbWUnOwogICAgICAgICAgICBjYXNlIHNlbGY6OlNUQVRFX09SX1BST1ZJTkNFX05BTUU6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1N0YXRlIG9yIFByb3ZpbmNlIE5hbWUnOwogICAgICAgICAgICBjYXNlIHNlbGY6OlNUUkVFVF9BRERSRVNTOgogICAgICAgICAgICAgICAgcmV0dXJuICdTdHJlZXQgQWRkcmVzcyc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6T1JHQU5JWkFUSU9OX05BTUU6CiAgICAgICAgICAgICAgICByZXR1cm4gJ09yZ2FuaXphdGlvbiBOYW1lJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpPVV9OQU1FOgogICAgICAgICAgICAgICAgcmV0dXJuICdPcmdhbml6YXRpb24gVW5pdCBOYW1lJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpUSVRMRToKICAgICAgICAgICAgICAgIHJldHVybiAnVGl0bGUnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkRFU0NSSVBUSU9OOgogICAgICAgICAgICAgICAgcmV0dXJuICdEZXNjcmlwdGlvbic7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6UE9TVEFMX0FERFJFU1M6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1Bvc3RhbCBBZGRyZXNzJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpQT1NUQUxfQ09ERToKICAgICAgICAgICAgICAgIHJldHVybiAnUG9zdGFsIENvZGUnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkFVVEhPUklUWV9SRVZPQ0FUSU9OX0xJU1Q6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0F1dGhvcml0eSBSZXZvY2F0aW9uIExpc3QnOwoKICAgICAgICAgICAgY2FzZSBzZWxmOjpDRVJUX0VYVF9TVUJKRUNUX0RJUkVDVE9SWV9BVFRSOgogICAgICAgICAgICAgICAgcmV0dXJuICdTdWJqZWN0IGRpcmVjdG9yeSBhdHRyaWJ1dGVzJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpDRVJUX0VYVF9TVUJKRUNUX0tFWV9JREVOVElGSUVSOgogICAgICAgICAgICAgICAgcmV0dXJuICdTdWJqZWN0IGtleSBpZGVudGlmaWVyJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpDRVJUX0VYVF9LRVlfVVNBR0U6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0tleSB1c2FnZSBjZXJ0aWZpY2F0ZSBleHRlbnNpb24nOwogICAgICAgICAgICBjYXNlIHNlbGY6OkNFUlRfRVhUX1BSSVZBVEVfS0VZX1VTQUdFX1BFUklPRDoKICAgICAgICAgICAgICAgIHJldHVybiAnUHJpdmF0ZSBrZXkgdXNhZ2UnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkNFUlRfRVhUX1NVQkpFQ1RfQUxUX05BTUU6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1N1YmplY3QgYWx0ZXJuYXRpdmUgbmFtZSAoU0FOKSc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6Q0VSVF9FWFRfSVNTVUVSX0FMVF9OQU1FOgogICAgICAgICAgICAgICAgcmV0dXJuICdJc3N1ZXIgYWx0ZXJuYXRpdmUgbmFtZSc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6Q0VSVF9FWFRfQkFTSUNfQ09OU1RSQUlOVFM6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0Jhc2ljIGNvbnN0cmFpbnRzJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpDRVJUX0VYVF9DUkxfTlVNQkVSOgogICAgICAgICAgICAgICAgcmV0dXJuICdDUkwgbnVtYmVyJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpDRVJUX0VYVF9SRUFTT05fQ09ERToKICAgICAgICAgICAgICAgIHJldHVybiAnUmVhc29uIGNvZGUnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkNFUlRfRVhUX0lOVkFMSURJVFlfREFURToKICAgICAgICAgICAgICAgIHJldHVybiAnSW52YWxpZGl0eSBjb2RlJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpDRVJUX0VYVF9ERUxUQV9DUkxfSU5ESUNBVE9SOgogICAgICAgICAgICAgICAgcmV0dXJuICdEZWx0YSBDUkwgaW5kaWNhdG9yJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpDRVJUX0VYVF9JU1NVSU5HX0RJU1RfUE9JTlQ6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0lzc3VpbmcgZGlzdHJpYnV0aW9uIHBvaW50JzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpDRVJUX0VYVF9DRVJUX0lTU1VFUjoKICAgICAgICAgICAgICAgIHJldHVybiAnQ2VydGlmaWNhdGUgaXNzdWVyJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpDRVJUX0VYVF9OQU1FX0NPTlNUUkFJTlRTOgogICAgICAgICAgICAgICAgcmV0dXJuICdOYW1lIGNvbnN0cmFpbnRzJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpDRVJUX0VYVF9DUkxfRElTVFJJQlVUSU9OX1BPSU5UUzoKICAgICAgICAgICAgICAgIHJldHVybiAnQ1JMIGRpc3RyaWJ1dGlvbiBwb2ludHMnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkNFUlRfRVhUX0NFUlRfUE9MSUNJRVM6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0NlcnRpZmljYXRlIHBvbGljaWVzICc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6Q0VSVF9FWFRfQVVUSE9SSVRZX0tFWV9JREVOVElGSUVSOgogICAgICAgICAgICAgICAgcmV0dXJuICdBdXRob3JpdHkga2V5IGlkZW50aWZpZXInOwogICAgICAgICAgICBjYXNlIHNlbGY6OkNFUlRfRVhUX0VYVEVOREVEX0tFWV9VU0FHRToKICAgICAgICAgICAgICAgIHJldHVybiAnRXh0ZW5kZWQga2V5IHVzYWdlJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpBVVRIT1JJVFlfSU5GT1JNQVRJT05fQUNDRVNTOgogICAgICAgICAgICAgICAgcmV0dXJuICdDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgSW5mb3JtYXRpb24gQWNjZXNzIChBSUEpJzsKCiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBpZiAoJGxvYWRGcm9tV2ViKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGY6OmxvYWRGcm9tV2ViKCRvaWRTdHJpbmcpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJG9pZFN0cmluZzsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkRnJvbVdlYigkb2lkU3RyaW5nKQogICAgewogICAgICAgICRjaCA9IGN1cmxfaW5pdCgiaHR0cDovL29pZC1pbmZvLmNvbS9nZXQveyRvaWRTdHJpbmd9Iik7CgogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7CiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0hFQURFUiwgMCk7CgogICAgICAgICRjb250ZW50cyA9IGN1cmxfZXhlYygkY2gpOwogICAgICAgIGN1cmxfY2xvc2UoJGNoKTsKCiAgICAgICAgLy8gVGhpcyBwYXR0ZXJuIG5lZWRzIHRvIGJlIHVwZGF0ZWQgYXMgc29vbiBhcyB0aGUgd2Vic2l0ZSBsYXlvdXQgb2Ygb2lkLWluZm8uY29tIGNoYW5nZXMKICAgICAgICBwcmVnX21hdGNoX2FsbCgnIzx0dD4oLispXChcZCtcKTwvdHQ+I3NpJywgJGNvbnRlbnRzLCAkb2lkTmFtZSk7CgogICAgICAgIGlmIChlbXB0eSgkb2lkTmFtZVsxXSkpIHsKICAgICAgICAgICAgcmV0dXJuICJ7JG9pZFN0cmluZ30gKHVua25vd24pIjsKICAgICAgICB9CgogICAgICAgICRvaWROYW1lID0gdWNmaXJzdChzdHJ0b2xvd2VyKHByZWdfcmVwbGFjZSgnLyhbQS1aXVthLXpdKS8nLCAnICQxJywgJG9pZE5hbWVbMV1bMF0pKSk7CiAgICAgICAgJG9pZE5hbWUgPSBzdHJfcmVwbGFjZSgnLScsICcgJywgJG9pZE5hbWUpOwoKICAgICAgICByZXR1cm4gInskb2lkTmFtZX0gKHskb2lkU3RyaW5nfSkiOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Parsable.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCnVzZSBGR1xBU04xXEV4Y2VwdGlvblxQYXJzZXJFeGNlcHRpb247CgovKioKICogVGhlIFBhcnNhYmxlIGludGVyZmFjZSBkZXNjcmliZXMgY2xhc3NlcyB0aGF0IGNhbiBiZSBwYXJzZWQgZnJvbSB0aGVpciBiaW5hcnkgREVSIHJlcHJlc2VudGF0aW9uLgogKi8KaW50ZXJmYWNlIFBhcnNhYmxlCnsKICAgIC8qKgogICAgICogUGFyc2UgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBmcm9tIGl0cyBiaW5hcnkgREVSIGVuY29kZWQgcmVwcmVzZW50YXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYmluYXJ5RGF0YQogICAgICogQHBhcmFtIGludCAkb2Zmc2V0SW5kZXggdGhlIG9mZnNldCBhdCB3aGljaCBwYXJzaW5nIG9mIHRoZSAkYmluYXJ5RGF0YSBpcyBzdGFydGVkLiBUaGlzIHBhcmFtZXRlciBpbGwgYmUgbW9kaWZpZWQKICAgICAqICAgICAgICAgICAgdG8gY29udGFpbiB0aGUgb2Zmc2V0IGluZGV4IG9mIHRoZSBuZXh0IG9iamVjdCBhZnRlciB0aGlzIG9iamVjdCBoYXMgYmVlbiBwYXJzZWQKICAgICAqCiAgICAgKiBAdGhyb3dzIFBhcnNlckV4Y2VwdGlvbiBpZiB0aGUgZ2l2ZW4gYmluYXJ5IGRhdGEgaXMgZWl0aGVyIGludmFsaWQgb3Igbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gbnVsbCk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/TemplateParser.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCnVzZSBFeGNlcHRpb247CnVzZSBGR1xBU04xXEV4Y2VwdGlvblxQYXJzZXJFeGNlcHRpb247CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxTZXF1ZW5jZTsKCmNsYXNzIFRlbXBsYXRlUGFyc2VyCnsKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YQogICAgICogQHBhcmFtIGFycmF5ICR0ZW1wbGF0ZQogICAgICogQHJldHVybiBcRkdcQVNOMVxBU05PYmplY3R8U2VxdWVuY2UKICAgICAqIEB0aHJvd3MgUGFyc2VyRXhjZXB0aW9uIGlmIHRoZXJlIHdhcyBhbiBpc3N1ZSBwYXJzaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwYXJzZUJhc2U2NCgkZGF0YSwgYXJyYXkgJHRlbXBsYXRlKQogICAgewogICAgICAgIC8vIFRPRE8gdGVzdCB3aXRoIGludmFsaWQgZGF0YQogICAgICAgIHJldHVybiAkdGhpcy0+cGFyc2VCaW5hcnkoYmFzZTY0X2RlY29kZSgkZGF0YSksICR0ZW1wbGF0ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiaW5hcnkKICAgICAqIEBwYXJhbSBhcnJheSAkdGVtcGxhdGUKICAgICAqIEByZXR1cm4gXEZHXEFTTjFcQVNOT2JqZWN0fFNlcXVlbmNlCiAgICAgKiBAdGhyb3dzIFBhcnNlckV4Y2VwdGlvbiBpZiB0aGVyZSB3YXMgYW4gaXNzdWUgcGFyc2luZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGFyc2VCaW5hcnkoJGJpbmFyeSwgYXJyYXkgJHRlbXBsYXRlKQogICAgewogICAgICAgICRwYXJzZWRPYmplY3QgPSBBU05PYmplY3Q6OmZyb21CaW5hcnkoJGJpbmFyeSk7CgogICAgICAgIGZvcmVhY2ggKCR0ZW1wbGF0ZSBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICAkdGhpcy0+dmFsaWRhdGUoJHBhcnNlZE9iamVjdCwgJGtleSwgJHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcGFyc2VkT2JqZWN0OwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gdmFsaWRhdGUoQVNOT2JqZWN0ICRvYmplY3QsICRrZXksICR2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoaXNfYXJyYXkoJHZhbHVlKSkgewogICAgICAgICAgICAkdGhpcy0+YXNzZXJ0VHlwZUlkKCRrZXksICRvYmplY3QpOwoKICAgICAgICAgICAgLyogQHZhciBDb25zdHJ1Y3QgJG9iamVjdCAqLwogICAgICAgICAgICBmb3JlYWNoICgkdmFsdWUgYXMgJGtleSA9PiAkY2hpbGQpIHsKICAgICAgICAgICAgICAgICR0aGlzLT52YWxpZGF0ZSgkb2JqZWN0LT5jdXJyZW50KCksICRrZXksICRjaGlsZCk7CiAgICAgICAgICAgICAgICAkb2JqZWN0LT5uZXh0KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+YXNzZXJ0VHlwZUlkKCR2YWx1ZSwgJG9iamVjdCk7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gYXNzZXJ0VHlwZUlkKCRleHBlY3RlZFR5cGVJZCwgQVNOT2JqZWN0ICRvYmplY3QpCiAgICB7CiAgICAgICAgJGFjdHVhbFR5cGUgPSAkb2JqZWN0LT5nZXRUeXBlKCk7CiAgICAgICAgaWYgKCRleHBlY3RlZFR5cGVJZCAhPSAkYWN0dWFsVHlwZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJFeHBlY3RlZCB0eXBlICgkZXhwZWN0ZWRUeXBlSWQpIGRvZXMgbm90IG1hdGNoIGFjdHVhbCB0eXBlICgkYWN0dWFsVHlwZSIpOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/BitString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRXhjZXB0aW9uOwp1c2UgRkdcQVNOMVxFeGNlcHRpb25cUGFyc2VyRXhjZXB0aW9uOwp1c2UgRkdcQVNOMVxQYXJzYWJsZTsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIEJpdFN0cmluZyBleHRlbmRzIE9jdGV0U3RyaW5nIGltcGxlbWVudHMgUGFyc2FibGUKewogICAgcHJpdmF0ZSAkbnJPZlVudXNlZEJpdHM7CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgbmV3IEFTTi4xIEJpdFN0cmluZyBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xpbnQgJHZhbHVlIEVpdGhlciB0aGUgaGV4YWRlY2ltYWwgdmFsdWUgYXMgYSBzdHJpbmcgKHNwYWNlcyBhcmUgYWxsb3dlZCAtIGxlYWRpbmcgMHggaXMgb3B0aW9uYWwpIG9yIGEgbnVtZXJpYyB2YWx1ZQogICAgICogQHBhcmFtIGludCAkbnJPZlVudXNlZEJpdHMgdGhlIG51bWJlciBvZiB1bnVzZWQgYml0cyBpbiB0aGUgbGFzdCBvY3RldCBbb3B0aW9uYWxdLgogICAgICoKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uIGlmIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIG5vIHBvc2l0aXZlIG51bWVyaWMgdmFsdWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCR2YWx1ZSwgJG5yT2ZVbnVzZWRCaXRzID0gMCkKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCR2YWx1ZSk7CgogICAgICAgIGlmICghaXNfbnVtZXJpYygkbnJPZlVudXNlZEJpdHMpIHx8ICRuck9mVW51c2VkQml0cyA8IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignQml0U3RyaW5nOiBzZWNvbmQgcGFyYW1ldGVyIG5lZWRzIHRvIGJlIGEgcG9zaXRpdmUgbnVtYmVyIChvciB6ZXJvKSEnKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5uck9mVW51c2VkQml0cyA9ICRuck9mVW51c2VkQml0czsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OkJJVFNUUklORzsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpCiAgICB7CiAgICAgICAgLy8gYWRkIG9uZSB0byB0aGUgbGVuZ3RoIGZvciB0aGUgZmlyc3Qgb2N0ZXQgd2hpY2ggZW5jb2RlcyB0aGUgbnVtYmVyIG9mIHVudXNlZCBiaXRzIGluIHRoZSBsYXN0IG9jdGV0CiAgICAgICAgcmV0dXJuIHBhcmVudDo6Y2FsY3VsYXRlQ29udGVudExlbmd0aCgpICsgMTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0RW5jb2RlZFZhbHVlKCkKICAgIHsKICAgICAgICAvLyB0aGUgZmlyc3Qgb2N0ZXQgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIHVudXNlZCBiaXRzCiAgICAgICAgJG5yT2ZVbnVzZWRCaXRzT2N0ZXQgPSBjaHIoJHRoaXMtPm5yT2ZVbnVzZWRCaXRzKTsKICAgICAgICAkYWN0dWFsQ29udGVudCA9IHBhcmVudDo6Z2V0RW5jb2RlZFZhbHVlKCk7CgogICAgICAgIHJldHVybiAkbnJPZlVudXNlZEJpdHNPY3RldC4kYWN0dWFsQ29udGVudDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TnVtYmVyT2ZVbnVzZWRCaXRzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm5yT2ZVbnVzZWRCaXRzOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUJpbmFyeSgmJGJpbmFyeURhdGEsICYkb2Zmc2V0SW5kZXggPSAwKQogICAgewogICAgICAgIHNlbGY6OnBhcnNlSWRlbnRpZmllcigkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdLCBJZGVudGlmaWVyOjpCSVRTVFJJTkcsICRvZmZzZXRJbmRleCsrKTsKICAgICAgICAkY29udGVudExlbmd0aCA9IHNlbGY6OnBhcnNlQ29udGVudExlbmd0aCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4LCAyKTsKCiAgICAgICAgJG5yT2ZVbnVzZWRCaXRzID0gb3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleF0pOwogICAgICAgICR2YWx1ZSA9IHN1YnN0cigkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4ICsgMSwgJGNvbnRlbnRMZW5ndGggLSAxKTsKCiAgICAgICAgaWYgKCRuck9mVW51c2VkQml0cyA+IDcgfHwgLy8gbm8gbGVzcyB0aGFuIDEgdXNlZCwgb3RoZXJ3aXNlIG5vbi1taW5pbWFsCiAgICAgICAgICAgICgkY29udGVudExlbmd0aCAtIDEpID09IDEgJiYgJG5yT2ZVbnVzZWRCaXRzID4gMCB8fCAvLyBjb250ZW50IGxlbmd0aCBvbmx5IDEsIG5vCiAgICAgICAgICAgIChvcmQoJHZhbHVlW3N0cmxlbigkdmFsdWUpLTFdKSYoKDE8PCRuck9mVW51c2VkQml0cyktMSkpICE9IDAgLy8gdW51c2VkIGJpdHMgc2V0CiAgICAgICAgKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oIkNhbiBub3QgcGFyc2UgYml0IHN0cmluZyB3aXRoIGludmFsaWQgcGFkZGluZyIsICRvZmZzZXRJbmRleCk7CiAgICAgICAgfQoKICAgICAgICAkb2Zmc2V0SW5kZXggKz0gJGNvbnRlbnRMZW5ndGg7CgogICAgICAgICRwYXJzZWRPYmplY3QgPSBuZXcgc2VsZihiaW4yaGV4KCR2YWx1ZSksICRuck9mVW51c2VkQml0cyk7CiAgICAgICAgJHBhcnNlZE9iamVjdC0+c2V0Q29udGVudExlbmd0aCgkY29udGVudExlbmd0aCk7CgogICAgICAgIHJldHVybiAkcGFyc2VkT2JqZWN0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/BMPString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIEJNUFN0cmluZyBleHRlbmRzIEFic3RyYWN0U3RyaW5nCnsKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5ldyBBU04uMSBCTVAgU3RyaW5nLgogICAgICoKICAgICAqIEJNUFN0cmluZyBpcyBhIHN1YnR5cGUgb2YgVW5pdmVyc2FsU3RyaW5nIHRoYXQgaGFzIGl0cyBvd24KICAgICAqIHVuaXF1ZSB0YWcgYW5kIGNvbnRhaW5zIG9ubHkgdGhlIGNoYXJhY3RlcnMgaW4gdGhlCiAgICAgKiBCYXNpYyBNdWx0aWxpbmd1YWwgUGxhbmUgKHRob3NlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpcnN0CiAgICAgKiA2NEstMiBjZWxscywgbGVzcyBjZWxscyB3aG9zZSBlbmNvZGluZyBpcyB1c2VkIHRvIGFkZHJlc3MKICAgICAqIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgQmFzaWMgTXVsdGlsaW5ndWFsIFBsYW5lKSBvZiBJU08vSUVDIDEwNjQ2LTEuCiAgICAgKgogICAgICogVE9ETyBUaGUgZW5jb2RhYmxlIGNoYXJhY3RlcnMgb2YgdGhpcyB0eXBlIGFyZSBub3QgeWV0IGNoZWNrZWQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc3RyaW5nKQogICAgewogICAgICAgICR0aGlzLT52YWx1ZSA9ICRzdHJpbmc7CiAgICAgICAgJHRoaXMtPmFsbG93QWxsKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpCTVBfU1RSSU5HOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/Boolean.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBU05PYmplY3Q7CnVzZSBGR1xBU04xXFBhcnNhYmxlOwp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwp1c2UgRkdcQVNOMVxFeGNlcHRpb25cUGFyc2VyRXhjZXB0aW9uOwoKY2xhc3MgQm9vbGVhbiBleHRlbmRzIEFTTk9iamVjdCBpbXBsZW1lbnRzIFBhcnNhYmxlCnsKICAgIHByaXZhdGUgJHZhbHVlOwoKICAgIC8qKgogICAgICogQHBhcmFtIGJvb2wgJHZhbHVlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdmFsdWUpCiAgICB7CiAgICAgICAgJHRoaXMtPnZhbHVlID0gJHZhbHVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6Qk9PTEVBTjsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEVuY29kZWRWYWx1ZSgpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT52YWx1ZSA9PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gY2hyKDB4MDApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBjaHIoMHhGRik7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50KCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPnZhbHVlID09IHRydWUpIHsKICAgICAgICAgICAgcmV0dXJuICdUUlVFJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gJ0ZBTFNFJzsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tQmluYXJ5KCYkYmluYXJ5RGF0YSwgJiRvZmZzZXRJbmRleCA9IDApCiAgICB7CiAgICAgICAgc2VsZjo6cGFyc2VJZGVudGlmaWVyKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleF0sIElkZW50aWZpZXI6OkJPT0xFQU4sICRvZmZzZXRJbmRleCsrKTsKICAgICAgICAkY29udGVudExlbmd0aCA9IHNlbGY6OnBhcnNlQ29udGVudExlbmd0aCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKCiAgICAgICAgaWYgKCRjb250ZW50TGVuZ3RoICE9IDEpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckV4Y2VwdGlvbigiQW4gQVNOLjEgQm9vbGVhbiBzaG91bGQgbm90IGhhdmUgYSBsZW5ndGggb3RoZXIgdGhhbiBvbmUuIEV4dHJhY3RlZCBsZW5ndGggd2FzIHskY29udGVudExlbmd0aH0iLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgIH0KCiAgICAgICAgJHZhbHVlID0gb3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsrXSk7CiAgICAgICAgJGJvb2xlYW5WYWx1ZSA9ICR2YWx1ZSA9PSAweEZGID8gdHJ1ZSA6IGZhbHNlOwoKICAgICAgICAkcGFyc2VkT2JqZWN0ID0gbmV3IHNlbGYoJGJvb2xlYW5WYWx1ZSk7CiAgICAgICAgJHBhcnNlZE9iamVjdC0+c2V0Q29udGVudExlbmd0aCgkY29udGVudExlbmd0aCk7CgogICAgICAgIHJldHVybiAkcGFyc2VkT2JqZWN0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/CharacterString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIENoYXJhY3RlclN0cmluZyBleHRlbmRzIEFic3RyYWN0U3RyaW5nCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc3RyaW5nKQogICAgewogICAgICAgICR0aGlzLT52YWx1ZSA9ICRzdHJpbmc7CiAgICAgICAgJHRoaXMtPmFsbG93QWxsKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpDSEFSQUNURVJfU1RSSU5HOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/Enumerated.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwoKY2xhc3MgRW51bWVyYXRlZCBleHRlbmRzIEludGVnZXIKewogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpFTlVNRVJBVEVEOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/GeneralizedTime.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFRpbWU7CnVzZSBGR1xBU04xXFBhcnNhYmxlOwp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwp1c2UgRkdcQVNOMVxFeGNlcHRpb25cUGFyc2VyRXhjZXB0aW9uOwoKLyoqCiAqIFRoaXMgQVNOLjEgdW5pdmVyc2FsIHR5cGUgY29udGFpbnMgZGF0ZSBhbmQgdGltZSBpbmZvcm1hdGlvbiBhY2NvcmRpbmcgdG8gSVNPIDg2MDEuCiAqCiAqIFRoZSB0eXBlIGNvbnNpc3RzIG9mIHZhbHVlcyByZXByZXNlbnRpbmc6CiAqIGEpIGEgY2FsZW5kYXIgZGF0ZSwgYXMgZGVmaW5lZCBpbiBJU08gODYwMTsgYW5kCiAqIGIpIGEgdGltZSBvZiBkYXksIHRvIGFueSBvZiB0aGUgcHJlY2lzaW9ucyBkZWZpbmVkIGluIElTTyA4NjAxLCBleGNlcHQgZm9yIHRoZSBob3VycyB2YWx1ZSAyNCB3aGljaCBzaGFsbCBub3QgYmUgdXNlZDsgYW5kCiAqIGMpIHRoZSBsb2NhbCB0aW1lIGRpZmZlcmVudGlhbCBmYWN0b3IgYXMgZGVmaW5lZCBpbiBJU08gODYwMS4KICoKICogRGVjb2Rpbmcgb2YgdGhpcyB0eXBlIHdpbGwgYWNjZXB0IHRoZSBCYXNpYyBFbmNvZGluZyBSdWxlcyAoQkVSKQogKiBUaGUgZW5jb2Rpbmcgd2lsbCBjb21wbHkgd2l0aCB0aGUgRGlzdGluZ3Vpc2hlZCBFbmNvZGluZyBSdWxlcyAoREVSKS4KICovCmNsYXNzIEdlbmVyYWxpemVkVGltZSBleHRlbmRzIEFic3RyYWN0VGltZSBpbXBsZW1lbnRzIFBhcnNhYmxlCnsKICAgIHByaXZhdGUgJG1pY3Jvc2Vjb25kczsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGRhdGVUaW1lID0gbnVsbCwgJGRhdGVUaW1lWm9uZSA9ICdVVEMnKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJGRhdGVUaW1lLCAkZGF0ZVRpbWVab25lKTsKICAgICAgICAkdGhpcy0+bWljcm9zZWNvbmRzID0gJHRoaXMtPnZhbHVlLT5mb3JtYXQoJ3UnKTsKICAgICAgICBpZiAoJHRoaXMtPmNvbnRhaW5zRnJhY3Rpb25hbFNlY29uZHNFbGVtZW50KCkpIHsKICAgICAgICAgICAgLy8gREVSIHJlcXVpcmVzIHVzIHRvIHJlbW92ZSB0cmFpbGluZyB6ZXJvcwogICAgICAgICAgICAkdGhpcy0+bWljcm9zZWNvbmRzID0gcHJlZ19yZXBsYWNlKCcvKFsxLTldKykwKyQvJywgJyQxJywgJHRoaXMtPm1pY3Jvc2Vjb25kcyk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6R0VORVJBTElaRURfVElNRTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpCiAgICB7CiAgICAgICAgJGNvbnRlbnRTaXplID0gMTU7IC8vIFlZWVlNTURESEhtbVNTWgoKICAgICAgICBpZiAoJHRoaXMtPmNvbnRhaW5zRnJhY3Rpb25hbFNlY29uZHNFbGVtZW50KCkpIHsKICAgICAgICAgICAgJGNvbnRlbnRTaXplICs9IDEgKyBzdHJsZW4oJHRoaXMtPm1pY3Jvc2Vjb25kcyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGNvbnRlbnRTaXplOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjb250YWluc0ZyYWN0aW9uYWxTZWNvbmRzRWxlbWVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuIGludHZhbCgkdGhpcy0+bWljcm9zZWNvbmRzKSA+IDA7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEVuY29kZWRWYWx1ZSgpCiAgICB7CiAgICAgICAgJGVuY29kZWRDb250ZW50ID0gJHRoaXMtPnZhbHVlLT5mb3JtYXQoJ1ltZEhpcycpOwogICAgICAgIGlmICgkdGhpcy0+Y29udGFpbnNGcmFjdGlvbmFsU2Vjb25kc0VsZW1lbnQoKSkgewogICAgICAgICAgICAkZW5jb2RlZENvbnRlbnQgLj0gIi57JHRoaXMtPm1pY3Jvc2Vjb25kc30iOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRlbmNvZGVkQ29udGVudC4nWic7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIGlmICgkdGhpcy0+Y29udGFpbnNGcmFjdGlvbmFsU2Vjb25kc0VsZW1lbnQoKSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnZhbHVlLT5mb3JtYXQoIlktbS1kXHRIOmk6cy51UCIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWUtPmZvcm1hdCgiWS1tLWRcdEg6aTpzUCIpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gMCkKICAgIHsKICAgICAgICBzZWxmOjpwYXJzZUlkZW50aWZpZXIoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4XSwgSWRlbnRpZmllcjo6R0VORVJBTElaRURfVElNRSwgJG9mZnNldEluZGV4KyspOwogICAgICAgICRsZW5ndGhPZk1pbmltdW1UaW1lU3RyaW5nID0gMTQ7IC8vIFlZWVlNTURESEhtbVNTCiAgICAgICAgJGNvbnRlbnRMZW5ndGggPSBzZWxmOjpwYXJzZUNvbnRlbnRMZW5ndGgoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCwgJGxlbmd0aE9mTWluaW11bVRpbWVTdHJpbmcpOwogICAgICAgICRtYXhpbXVtQnl0ZXNUb1JlYWQgPSAkY29udGVudExlbmd0aDsKCiAgICAgICAgJGZvcm1hdCA9ICdZbWRHaXMnOwogICAgICAgICRjb250ZW50ID0gc3Vic3RyKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgsICRjb250ZW50TGVuZ3RoKTsKICAgICAgICAkZGF0ZVRpbWVTdHJpbmcgPSBzdWJzdHIoJGNvbnRlbnQsIDAsICRsZW5ndGhPZk1pbmltdW1UaW1lU3RyaW5nKTsKICAgICAgICAkb2Zmc2V0SW5kZXggKz0gJGxlbmd0aE9mTWluaW11bVRpbWVTdHJpbmc7CiAgICAgICAgJG1heGltdW1CeXRlc1RvUmVhZCAtPSAkbGVuZ3RoT2ZNaW5pbXVtVGltZVN0cmluZzsKCiAgICAgICAgaWYgKCRjb250ZW50TGVuZ3RoID09ICRsZW5ndGhPZk1pbmltdW1UaW1lU3RyaW5nKSB7CiAgICAgICAgICAgICRsb2NhbFRpbWVab25lID0gbmV3IFxEYXRlVGltZVpvbmUoZGF0ZV9kZWZhdWx0X3RpbWV6b25lX2dldCgpKTsKICAgICAgICAgICAgJGRhdGVUaW1lID0gXERhdGVUaW1lOjpjcmVhdGVGcm9tRm9ybWF0KCRmb3JtYXQsICRkYXRlVGltZVN0cmluZywgJGxvY2FsVGltZVpvbmUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICgkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdID09ICcuJykgewogICAgICAgICAgICAgICAgJG1heGltdW1CeXRlc1RvUmVhZC0tOyAvLyBhY2NvdW50IGZvciB0aGUgJy4nCiAgICAgICAgICAgICAgICAkbnJPZkZyYWN0aW9uYWxTZWNvbmRFbGVtZW50cyA9IDE7IC8vIGFjY291bnQgZm9yIHRoZSAnLicKCiAgICAgICAgICAgICAgICB3aGlsZSAoJG1heGltdW1CeXRlc1RvUmVhZCA+IDAKICAgICAgICAgICAgICAgICAgICAgICYmICRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCArICRuck9mRnJhY3Rpb25hbFNlY29uZEVsZW1lbnRzXSAhPSAnKycKICAgICAgICAgICAgICAgICAgICAgICYmICRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCArICRuck9mRnJhY3Rpb25hbFNlY29uZEVsZW1lbnRzXSAhPSAnLScKICAgICAgICAgICAgICAgICAgICAgICYmICRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCArICRuck9mRnJhY3Rpb25hbFNlY29uZEVsZW1lbnRzXSAhPSAnWicpIHsKICAgICAgICAgICAgICAgICAgICAkbnJPZkZyYWN0aW9uYWxTZWNvbmRFbGVtZW50cysrOwogICAgICAgICAgICAgICAgICAgICRtYXhpbXVtQnl0ZXNUb1JlYWQtLTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkZGF0ZVRpbWVTdHJpbmcgLj0gc3Vic3RyKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgsICRuck9mRnJhY3Rpb25hbFNlY29uZEVsZW1lbnRzKTsKICAgICAgICAgICAgICAgICRvZmZzZXRJbmRleCArPSAkbnJPZkZyYWN0aW9uYWxTZWNvbmRFbGVtZW50czsKICAgICAgICAgICAgICAgICRmb3JtYXQgLj0gJy51JzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGRhdGVUaW1lID0gXERhdGVUaW1lOjpjcmVhdGVGcm9tRm9ybWF0KCRmb3JtYXQsICRkYXRlVGltZVN0cmluZywgbmV3IFxEYXRlVGltZVpvbmUoJ1VUQycpKTsKCiAgICAgICAgICAgIGlmICgkbWF4aW11bUJ5dGVzVG9SZWFkID4gMCkgewogICAgICAgICAgICAgICAgaWYgKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleF0gPT0gJysnCiAgICAgICAgICAgICAgICB8fCAkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdID09ICctJykgewogICAgICAgICAgICAgICAgICAgICRkYXRlVGltZSA9IHN0YXRpYzo6ZXh0cmFjdFRpbWVab25lRGF0YSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4LCAkZGF0ZVRpbWUpOwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsrXSAhPSAnWicpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VyRXhjZXB0aW9uKCdJbnZhbGlkIElTTyA4NjAxIFRpbWUgU3RyaW5nJywgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHBhcnNlZE9iamVjdCA9IG5ldyBzZWxmKCRkYXRlVGltZSk7CiAgICAgICAgJHBhcnNlZE9iamVjdC0+c2V0Q29udGVudExlbmd0aCgkY29udGVudExlbmd0aCk7CgogICAgICAgIHJldHVybiAkcGFyc2VkT2JqZWN0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/GeneralString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIEdlbmVyYWxTdHJpbmcgZXh0ZW5kcyBBYnN0cmFjdFN0cmluZwp7CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBuZXcgQVNOLjEgR2VuZXJhbFN0cmluZy4KICAgICAqIFRPRE8gVGhlIGVuY29kYWJsZSBjaGFyYWN0ZXJzIG9mIHRoaXMgdHlwZSBhcmUgbm90IHlldCBjaGVja2VkLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHN0cmluZykKICAgIHsKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkc3RyaW5nOwogICAgICAgICR0aGlzLT5hbGxvd0FsbCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6R0VORVJBTF9TVFJJTkc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/GraphicString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIEdyYXBoaWNTdHJpbmcgZXh0ZW5kcyBBYnN0cmFjdFN0cmluZwp7CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBuZXcgQVNOLjEgR3JhcGhpYyBTdHJpbmcuCiAgICAgKiBUT0RPIFRoZSBlbmNvZGFibGUgY2hhcmFjdGVycyBvZiB0aGlzIHR5cGUgYXJlIG5vdCB5ZXQgY2hlY2tlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRzdHJpbmcpCiAgICB7CiAgICAgICAgJHRoaXMtPnZhbHVlID0gJHN0cmluZzsKICAgICAgICAkdGhpcy0+YWxsb3dBbGwoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OkdSQVBISUNfU1RSSU5HOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/IA5String.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCi8qKgogKiBUaGUgSW50ZXJuYXRpb25hbCBBbHBoYWJldCBOby41IChJQTUpIHJlZmVyZW5jZXMgdGhlIGVuY29kaW5nIG9mIHRoZSBBU0NJSSBjaGFyYWN0ZXJzLgogKgogKiBFYWNoIGNoYXJhY3RlciBpbiB0aGUgZGF0YSBpcyBlbmNvZGVkIGFzIDEgYnl0ZS4KICovCmNsYXNzIElBNVN0cmluZyBleHRlbmRzIEFic3RyYWN0U3RyaW5nCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc3RyaW5nKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJHN0cmluZyk7CiAgICAgICAgZm9yICgkaSA9IDE7ICRpIDwgMTI4OyAkaSsrKSB7CiAgICAgICAgICAgICR0aGlzLT5hbGxvd0NoYXJhY3RlcihjaHIoJGkpKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpJQTVfU1RSSU5HOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/Integer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRXhjZXB0aW9uOwp1c2UgRkdcVXRpbGl0eVxCaWdJbnRlZ2VyOwp1c2UgRkdcQVNOMVxFeGNlcHRpb25cUGFyc2VyRXhjZXB0aW9uOwp1c2UgRkdcQVNOMVxBU05PYmplY3Q7CnVzZSBGR1xBU04xXFBhcnNhYmxlOwp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwoKY2xhc3MgSW50ZWdlciBleHRlbmRzIEFTTk9iamVjdCBpbXBsZW1lbnRzIFBhcnNhYmxlCnsKICAgIC8qKiBAdmFyIGludCAqLwogICAgcHJpdmF0ZSAkdmFsdWU7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICR2YWx1ZQogICAgICoKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uIGlmIHRoZSB2YWx1ZSBpcyBub3QgbnVtZXJpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHZhbHVlKQogICAgewogICAgICAgIGlmIChpc19udW1lcmljKCR2YWx1ZSkgPT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiSW52YWxpZCBWQUxVRSBbeyR2YWx1ZX1dIGZvciBBU04xX0lOVEVHRVIiKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPnZhbHVlID0gJHZhbHVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6SU5URUdFUjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuIHN0cmxlbigkdGhpcy0+Z2V0RW5jb2RlZFZhbHVlKCkpOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRFbmNvZGVkVmFsdWUoKQogICAgewogICAgICAgICR2YWx1ZSA9IEJpZ0ludGVnZXI6OmNyZWF0ZSgkdGhpcy0+dmFsdWUsIDEwKTsKICAgICAgICAkbmVnYXRpdmUgPSAkdmFsdWUtPmNvbXBhcmUoMCkgPCAwOwogICAgICAgIGlmICgkbmVnYXRpdmUpIHsKICAgICAgICAgICAgICR2YWx1ZSA9ICR2YWx1ZS0+YWJzb2x1dGVWYWx1ZSgpOwogICAgICAgICAgICAgJGxpbWl0ID0gMHg4MDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgJGxpbWl0ID0gMHg3ZjsKICAgICAgICB9CgogICAgICAgICRtb2QgPSAweGZmKzE7CiAgICAgICAgJHZhbHVlcyA9IFtdOwogICAgICAgIHdoaWxlKCR2YWx1ZS0+Y29tcGFyZSgkbGltaXQpID4gMCkgewogICAgICAgICAgICAkdmFsdWVzW10gPSAkdmFsdWUtPm1vZHVsdXMoJG1vZCktPnRvSW50ZWdlcigpOwogICAgICAgICAgICAkdmFsdWUgPSAkdmFsdWUtPnNoaWZ0UmlnaHQoOCk7CiAgICAgICAgfQoKICAgICAgICAkdmFsdWVzW10gPSAkdmFsdWUtPm1vZHVsdXMoJG1vZCktPnRvSW50ZWdlcigpOwogICAgICAgICRudW1WYWx1ZXMgPSBjb3VudCgkdmFsdWVzKTsKCiAgICAgICAgaWYgKCRuZWdhdGl2ZSkgewogICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkbnVtVmFsdWVzOyAkaSsrKSB7CiAgICAgICAgICAgICAgICAkdmFsdWVzWyRpXSA9IDB4ZmYgLSAkdmFsdWVzWyRpXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkbnVtVmFsdWVzOyAkaSsrKSB7CiAgICAgICAgICAgICAgICAkdmFsdWVzWyRpXSArPSAxOwogICAgICAgICAgICAgICAgaWYgKCR2YWx1ZXNbJGldIDw9IDB4ZmYpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGFzc2VydCgkaSAhPSAkbnVtVmFsdWVzIC0gMSk7CiAgICAgICAgICAgICAgICAkdmFsdWVzWyRpXSA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCR2YWx1ZXNbJG51bVZhbHVlcyAtIDFdID09IDB4N2YpIHsKICAgICAgICAgICAgICAgICR2YWx1ZXNbXSA9IDB4ZmY7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJHZhbHVlcyA9IGFycmF5X3JldmVyc2UoJHZhbHVlcyk7CiAgICAgICAgJHIgPSBwYWNrKCJDKiIsIC4uLiR2YWx1ZXMpOwogICAgICAgIHJldHVybiAkcjsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBlbnN1cmVNaW5pbWFsRW5jb2RpbmcoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCkKICAgIHsKICAgICAgICAvLyBBbGwgdGhlIGZpcnN0IG5pbmUgYml0cyBjYW5ub3QgZXF1YWwgMCBvciAxLCB3aGljaCB3b3VsZAogICAgICAgIC8vIGJlIG5vbi1taW5pbWFsIGVuY29kaW5nIGZvciBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgaW50ZWdlcnMgcmVzcGVjdGl2ZWx5CiAgICAgICAgaWYgKChvcmQoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4XSkgPT0gMHgwMCAmJiAob3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsxXSkgJiAweDgwKSA9PSAwKSB8fAogICAgICAgICAgICAob3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleF0pID09IDB4ZmYgJiYgKG9yZCgkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXgrMV0pICYgMHg4MCkgPT0gMHg4MCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckV4Y2VwdGlvbigiSW50ZWdlciBub3QgbWluaW1hbGx5IGVuY29kZWQiLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gMCkKICAgIHsKICAgICAgICAkcGFyc2VkT2JqZWN0ID0gbmV3IHN0YXRpYygwKTsKICAgICAgICBzZWxmOjpwYXJzZUlkZW50aWZpZXIoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4XSwgJHBhcnNlZE9iamVjdC0+Z2V0VHlwZSgpLCAkb2Zmc2V0SW5kZXgrKyk7CiAgICAgICAgJGNvbnRlbnRMZW5ndGggPSBzZWxmOjpwYXJzZUNvbnRlbnRMZW5ndGgoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCwgMSk7CgogICAgICAgIGlmICgkY29udGVudExlbmd0aCA+IDEpIHsKICAgICAgICAgICAgc2VsZjo6ZW5zdXJlTWluaW1hbEVuY29kaW5nKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgIH0KICAgICAgICAkaXNOZWdhdGl2ZSA9IChvcmQoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4XSkgJiAweDgwKSAhPSAweDAwOwogICAgICAgICRudW1iZXIgPSBCaWdJbnRlZ2VyOjpjcmVhdGUob3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsrXSkgJiAweDdGKTsKCiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJGNvbnRlbnRMZW5ndGggLSAxOyAkaSsrKSB7CiAgICAgICAgICAgICRudW1iZXIgPSAkbnVtYmVyLT5tdWx0aXBseSgweDEwMCktPmFkZChvcmQoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4KytdKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGlzTmVnYXRpdmUpIHsKICAgICAgICAgICAgJG51bWJlciA9ICRudW1iZXItPnN1YnRyYWN0KEJpZ0ludGVnZXI6OmNyZWF0ZSgyKS0+dG9Qb3dlcig4ICogJGNvbnRlbnRMZW5ndGggLSAxKSk7CiAgICAgICAgfQoKICAgICAgICAkcGFyc2VkT2JqZWN0ID0gbmV3IHN0YXRpYygoc3RyaW5nKSRudW1iZXIpOwogICAgICAgICRwYXJzZWRPYmplY3QtPnNldENvbnRlbnRMZW5ndGgoJGNvbnRlbnRMZW5ndGgpOwoKICAgICAgICByZXR1cm4gJHBhcnNlZE9iamVjdDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/NullObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBU05PYmplY3Q7CnVzZSBGR1xBU04xXFBhcnNhYmxlOwp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwp1c2UgRkdcQVNOMVxFeGNlcHRpb25cUGFyc2VyRXhjZXB0aW9uOwoKY2xhc3MgTnVsbE9iamVjdCBleHRlbmRzIEFTTk9iamVjdCBpbXBsZW1lbnRzIFBhcnNhYmxlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6TlVMTDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEVuY29kZWRWYWx1ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnQoKQogICAgewogICAgICAgIHJldHVybiAnTlVMTCc7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tQmluYXJ5KCYkYmluYXJ5RGF0YSwgJiRvZmZzZXRJbmRleCA9IDApCiAgICB7CiAgICAgICAgc2VsZjo6cGFyc2VJZGVudGlmaWVyKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleF0sIElkZW50aWZpZXI6Ok5VTEwsICRvZmZzZXRJbmRleCsrKTsKICAgICAgICAkY29udGVudExlbmd0aCA9IHNlbGY6OnBhcnNlQ29udGVudExlbmd0aCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKCiAgICAgICAgaWYgKCRjb250ZW50TGVuZ3RoICE9IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckV4Y2VwdGlvbigiQW4gQVNOLjEgTnVsbCBzaG91bGQgbm90IGhhdmUgYSBsZW5ndGggb3RoZXIgdGhhbiB6ZXJvLiBFeHRyYWN0ZWQgbGVuZ3RoIHdhcyB7JGNvbnRlbnRMZW5ndGh9IiwgJG9mZnNldEluZGV4KTsKICAgICAgICB9CgogICAgICAgICRwYXJzZWRPYmplY3QgPSBuZXcgc2VsZigpOwogICAgICAgICRwYXJzZWRPYmplY3QtPnNldENvbnRlbnRMZW5ndGgoMCk7CgogICAgICAgIHJldHVybiAkcGFyc2VkT2JqZWN0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/NumericString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIE51bWVyaWNTdHJpbmcgZXh0ZW5kcyBBYnN0cmFjdFN0cmluZwp7CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBuZXcgQVNOLjEgTnVtZXJpY1N0cmluZy4KICAgICAqCiAgICAgKiBUaGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgYXJlIHBlcm1pdHRlZDoKICAgICAqIERpZ2l0cyAgICAgICAgICAgICAgICAwLDEsIC4uLiA5CiAgICAgKiBTUEFDRSAgICAgICAgICAgICAgICAgKHNwYWNlKQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHN0cmluZykKICAgIHsKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkc3RyaW5nOwogICAgICAgICR0aGlzLT5hbGxvd051bWJlcnMoKTsKICAgICAgICAkdGhpcy0+YWxsb3dTcGFjZXMoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6Ok5VTUVSSUNfU1RSSU5HOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/ObjectDescriptor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwoKY2xhc3MgT2JqZWN0RGVzY3JpcHRvciBleHRlbmRzIEdyYXBoaWNTdHJpbmcKewogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRvYmplY3REZXNjcmlwdGlvbikKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRvYmplY3REZXNjcmlwdGlvbik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpPQkpFQ1RfREVTQ1JJUFRPUjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/ObjectIdentifier.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRXhjZXB0aW9uOwp1c2UgRkdcQVNOMVxCYXNlMTI4Owp1c2UgRkdcQVNOMVxPSUQ7CnVzZSBGR1xBU04xXEFTTk9iamVjdDsKdXNlIEZHXEFTTjFcUGFyc2FibGU7CnVzZSBGR1xBU04xXElkZW50aWZpZXI7CnVzZSBGR1xBU04xXEV4Y2VwdGlvblxQYXJzZXJFeGNlcHRpb247CgpjbGFzcyBPYmplY3RJZGVudGlmaWVyIGV4dGVuZHMgQVNOT2JqZWN0IGltcGxlbWVudHMgUGFyc2FibGUKewogICAgcHJvdGVjdGVkICRzdWJJZGVudGlmaWVyczsKICAgIHByb3RlY3RlZCAkdmFsdWU7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCR2YWx1ZSkKICAgIHsKICAgICAgICAkdGhpcy0+c3ViSWRlbnRpZmllcnMgPSBleHBsb2RlKCcuJywgJHZhbHVlKTsKICAgICAgICAkbnJPZlN1YklkZW50aWZpZXJzID0gY291bnQoJHRoaXMtPnN1YklkZW50aWZpZXJzKTsKCiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJG5yT2ZTdWJJZGVudGlmaWVyczsgJGkrKykgewogICAgICAgICAgICBpZiAoaXNfbnVtZXJpYygkdGhpcy0+c3ViSWRlbnRpZmllcnNbJGldKSkgewogICAgICAgICAgICAgICAgLy8gZW5mb3JjZSB0aGUgaW50ZWdlciB0eXBlCiAgICAgICAgICAgICAgICAkdGhpcy0+c3ViSWRlbnRpZmllcnNbJGldID0gaW50dmFsKCR0aGlzLT5zdWJJZGVudGlmaWVyc1skaV0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiW3skdmFsdWV9XSBpcyBubyB2YWxpZCBvYmplY3QgaWRlbnRpZmllciAoc3ViIGlkZW50aWZpZXIgIi4oJGkgKyAxKS4nIGlzIG5vdCBudW1lcmljKSEnKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gTWVyZ2UgdGhlIGZpcnN0IHRvIGFyY3Mgb2YgdGhlIE9JRCByZWdpc3RyYXRpb24gdHJlZSAocGVyIEFTTiBkZWZpbml0aW9uISkKICAgICAgICBpZiAoJG5yT2ZTdWJJZGVudGlmaWVycyA+PSAyKSB7CiAgICAgICAgICAgICR0aGlzLT5zdWJJZGVudGlmaWVyc1sxXSA9ICgkdGhpcy0+c3ViSWRlbnRpZmllcnNbMF0gKiA0MCkgKyAkdGhpcy0+c3ViSWRlbnRpZmllcnNbMV07CiAgICAgICAgICAgIHVuc2V0KCR0aGlzLT5zdWJJZGVudGlmaWVyc1swXSk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkdmFsdWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpPQkpFQ1RfSURFTlRJRklFUjsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpCiAgICB7CiAgICAgICAgJGxlbmd0aCA9IDA7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnN1YklkZW50aWZpZXJzIGFzICRzdWJJZGVudGlmaWVyKSB7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICRzdWJJZGVudGlmaWVyID0gJHN1YklkZW50aWZpZXIgPj4gNzsKICAgICAgICAgICAgICAgICRsZW5ndGgrKzsKICAgICAgICAgICAgfSB3aGlsZSAoJHN1YklkZW50aWZpZXIgPiAwKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbGVuZ3RoOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRFbmNvZGVkVmFsdWUoKQogICAgewogICAgICAgICRlbmNvZGVkVmFsdWUgPSAnJzsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+c3ViSWRlbnRpZmllcnMgYXMgJHN1YklkZW50aWZpZXIpIHsKICAgICAgICAgICAgJGVuY29kZWRWYWx1ZSAuPSBCYXNlMTI4OjplbmNvZGUoJHN1YklkZW50aWZpZXIpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRlbmNvZGVkVmFsdWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiBPSUQ6OmdldE5hbWUoJHRoaXMtPnZhbHVlKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gMCkKICAgIHsKICAgICAgICBzZWxmOjpwYXJzZUlkZW50aWZpZXIoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4XSwgSWRlbnRpZmllcjo6T0JKRUNUX0lERU5USUZJRVIsICRvZmZzZXRJbmRleCsrKTsKICAgICAgICAkY29udGVudExlbmd0aCA9IHNlbGY6OnBhcnNlQ29udGVudExlbmd0aCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4LCAxKTsKCiAgICAgICAgJGZpcnN0T2N0ZXQgPSBvcmQoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4KytdKTsKICAgICAgICAkb2lkU3RyaW5nID0gZmxvb3IoJGZpcnN0T2N0ZXQgLyA0MCkuJy4nLigkZmlyc3RPY3RldCAlIDQwKTsKICAgICAgICAkb2lkU3RyaW5nIC49ICcuJy5zZWxmOjpwYXJzZU9pZCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4LCAkY29udGVudExlbmd0aCAtIDEpOwoKICAgICAgICAkcGFyc2VkT2JqZWN0ID0gbmV3IHNlbGYoJG9pZFN0cmluZyk7CiAgICAgICAgJHBhcnNlZE9iamVjdC0+c2V0Q29udGVudExlbmd0aCgkY29udGVudExlbmd0aCk7CgogICAgICAgIHJldHVybiAkcGFyc2VkT2JqZWN0OwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2VzIGFuIG9iamVjdCBpZGVudGlmaWVyIGV4Y2VwdCBmb3IgdGhlIGZpcnN0IG9jdGV0LCB3aGljaCBpcyBwYXJzZWQKICAgICAqIGRpZmZlcmVudGx5LiBUaGlzIHdheSByZWxhdGl2ZSBvYmplY3QgaWRlbnRpZmllcnMgY2FuIGFsc28gYmUgcGFyc2VkCiAgICAgKiB1c2luZyB0aGlzLgogICAgICoKICAgICAqIEBwYXJhbSAkYmluYXJ5RGF0YQogICAgICogQHBhcmFtICRvZmZzZXRJbmRleAogICAgICogQHBhcmFtICRvY3RldHNUb1JlYWQKICAgICAqCiAgICAgKiBAdGhyb3dzIFBhcnNlckV4Y2VwdGlvbgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcGFyc2VPaWQoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4LCAkb2N0ZXRzVG9SZWFkKQogICAgewogICAgICAgICRvaWQgPSAnJzsKCiAgICAgICAgd2hpbGUgKCRvY3RldHNUb1JlYWQgPiAwKSB7CiAgICAgICAgICAgICRvY3RldHMgPSAnJzsKCiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgIGlmICgwID09PSAkb2N0ZXRzVG9SZWFkKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckV4Y2VwdGlvbignTWFsZm9ybWVkIEFTTi4xIE9iamVjdCBJZGVudGlmaWVyJywgJG9mZnNldEluZGV4IC0gMSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJG9jdGV0c1RvUmVhZC0tOwogICAgICAgICAgICAgICAgJG9jdGV0ID0gJGJpbmFyeURhdGFbJG9mZnNldEluZGV4KytdOwogICAgICAgICAgICAgICAgJG9jdGV0cyAuPSAkb2N0ZXQ7CiAgICAgICAgICAgIH0gd2hpbGUgKG9yZCgkb2N0ZXQpICYgMHg4MCk7CgogICAgICAgICAgICAkb2lkIC49IHNwcmludGYoJyVkLicsIEJhc2UxMjg6OmRlY29kZSgkb2N0ZXRzKSk7CiAgICAgICAgfQoKICAgICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgJy4nCiAgICAgICAgcmV0dXJuIHN1YnN0cigkb2lkLCAwLCAtMSkgPzogJyc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/OctetString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRXhjZXB0aW9uOwp1c2UgRkdcQVNOMVxBU05PYmplY3Q7CnVzZSBGR1xBU04xXFBhcnNhYmxlOwp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwoKY2xhc3MgT2N0ZXRTdHJpbmcgZXh0ZW5kcyBBU05PYmplY3QgaW1wbGVtZW50cyBQYXJzYWJsZQp7CiAgICBwcm90ZWN0ZWQgJHZhbHVlOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdmFsdWUpCiAgICB7CiAgICAgICAgaWYgKGlzX3N0cmluZygkdmFsdWUpKSB7CiAgICAgICAgICAgIC8vIHJlbW92ZSBnYXBzIGJldHdlZW4gaGV4IGRpZ2l0cwogICAgICAgICAgICAkdmFsdWUgPSBwcmVnX3JlcGxhY2UoJy9cc3wweC8nLCAnJywgJHZhbHVlKTsKICAgICAgICB9IGVsc2VpZiAoaXNfbnVtZXJpYygkdmFsdWUpKSB7CiAgICAgICAgICAgICR2YWx1ZSA9IGRlY2hleCgkdmFsdWUpOwogICAgICAgIH0gZWxzZWlmICgkdmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ09jdGV0U3RyaW5nOiB1bnJlY29nbml6ZWQgaW5wdXQgdHlwZSEnKTsKICAgICAgICB9CgogICAgICAgIGlmIChzdHJsZW4oJHZhbHVlKSAlIDIgIT0gMCkgewogICAgICAgICAgICAvLyB0cmFuc2Zvcm0gdmFsdWVzIGxpa2UgMUYyIHRvIDAxRjIKICAgICAgICAgICAgJHZhbHVlID0gJzAnLiR2YWx1ZTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT52YWx1ZSA9ICR2YWx1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6Ok9DVEVUU1RSSU5HOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjYWxjdWxhdGVDb250ZW50TGVuZ3RoKCkKICAgIHsKICAgICAgICByZXR1cm4gc3RybGVuKCR0aGlzLT52YWx1ZSkgLyAyOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRFbmNvZGVkVmFsdWUoKQogICAgewogICAgICAgICR2YWx1ZSA9ICR0aGlzLT52YWx1ZTsKICAgICAgICAkcmVzdWx0ID0gJyc7CgogICAgICAgIC8vQWN0dWFsIGNvbnRlbnQKICAgICAgICB3aGlsZSAoc3RybGVuKCR2YWx1ZSkgPj0gMikgewogICAgICAgICAgICAvLyBnZXQgdGhlIGhleCB2YWx1ZSBieXRlIGJ5IGJ5dGUgZnJvbSB0aGUgc3RyaW5nIGFuZCBhbmQgYWRkIGl0IHRvIGJpbmFyeSByZXN1bHQKICAgICAgICAgICAgJHJlc3VsdCAuPSBjaHIoaGV4ZGVjKHN1YnN0cigkdmFsdWUsIDAsIDIpKSk7CiAgICAgICAgICAgICR2YWx1ZSA9IHN1YnN0cigkdmFsdWUsIDIpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnQoKQogICAgewogICAgICAgIHJldHVybiBzdHJ0b3VwcGVyKCR0aGlzLT52YWx1ZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEJpbmFyeUNvbnRlbnQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0RW5jb2RlZFZhbHVlKCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tQmluYXJ5KCYkYmluYXJ5RGF0YSwgJiRvZmZzZXRJbmRleCA9IDApCiAgICB7CiAgICAgICAgc2VsZjo6cGFyc2VJZGVudGlmaWVyKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleF0sIElkZW50aWZpZXI6Ok9DVEVUU1RSSU5HLCAkb2Zmc2V0SW5kZXgrKyk7CiAgICAgICAgJGNvbnRlbnRMZW5ndGggPSBzZWxmOjpwYXJzZUNvbnRlbnRMZW5ndGgoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CgogICAgICAgICR2YWx1ZSA9IHN1YnN0cigkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4LCAkY29udGVudExlbmd0aCk7CiAgICAgICAgJG9mZnNldEluZGV4ICs9ICRjb250ZW50TGVuZ3RoOwoKICAgICAgICAkcGFyc2VkT2JqZWN0ID0gbmV3IHNlbGYoYmluMmhleCgkdmFsdWUpKTsKICAgICAgICAkcGFyc2VkT2JqZWN0LT5zZXRDb250ZW50TGVuZ3RoKCRjb250ZW50TGVuZ3RoKTsKCiAgICAgICAgcmV0dXJuICRwYXJzZWRPYmplY3Q7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/PrintableString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIFByaW50YWJsZVN0cmluZyBleHRlbmRzIEFic3RyYWN0U3RyaW5nCnsKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5ldyBBU04uMSBQcmludGFibGVTdHJpbmcuCiAgICAgKgogICAgICogVGhlIElUVS1UIFguNjgwIFRhYmxlIDggcGVybWl0cyB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6CiAgICAgKiBMYXRpbiBjYXBpdGFsIGxldHRlcnMgQSxCLCAuLi4gWgogICAgICogTGF0aW4gc21hbGwgbGV0dGVycyAgIGEsYiwgLi4uIHoKICAgICAqIERpZ2l0cyAgICAgICAgICAgICAgICAwLDEsIC4uLiA5CiAgICAgKiBTUEFDRSAgICAgICAgICAgICAgICAgKHNwYWNlKQogICAgICogQVBPU1RST1BIRSAgICAgICAgICAgICcKICAgICAqIExFRlQgUEFSRU5USEVTSVMgICAgICAoCiAgICAgKiBSSUdIVCBQQVJFTlRIRVNJUyAgICAgKQogICAgICogUExVUyBTSUdOICAgICAgICAgICAgICsKICAgICAqIENPTU1BICAgICAgICAgICAgICAgICAsCiAgICAgKiBIWVBIRU4tTUlOVVMgICAgICAgICAgLQogICAgICogRlVMTCBTVE9QICAgICAgICAgICAgIC4KICAgICAqIFNPTElEVVMgICAgICAgICAgICAgICAvCiAgICAgKiBDT0xPTiAgICAgICAgICAgICAgICAgOgogICAgICogRVFVQUxTIFNJR04gICAgICAgICAgID0KICAgICAqIFFVRVNUSU9OIE1BUksgICAgICAgICA/CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc3RyaW5nKQogICAgewogICAgICAgICR0aGlzLT52YWx1ZSA9ICRzdHJpbmc7CiAgICAgICAgJHRoaXMtPmFsbG93TnVtYmVycygpOwogICAgICAgICR0aGlzLT5hbGxvd0FsbExldHRlcnMoKTsKICAgICAgICAkdGhpcy0+YWxsb3dTcGFjZXMoKTsKICAgICAgICAkdGhpcy0+YWxsb3dDaGFyYWN0ZXJzKCInIiwgJygnLCAnKScsICcrJywgJy0nLCAnLicsICcsJywgJy8nLCAnOicsICc9JywgJz8nKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OlBSSU5UQUJMRV9TVFJJTkc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/RelativeObjectIdentifier.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRXhjZXB0aW9uOwp1c2UgRkdcQVNOMVxQYXJzYWJsZTsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKdXNlIEZHXEFTTjFcRXhjZXB0aW9uXFBhcnNlckV4Y2VwdGlvbjsKCmNsYXNzIFJlbGF0aXZlT2JqZWN0SWRlbnRpZmllciBleHRlbmRzIE9iamVjdElkZW50aWZpZXIgaW1wbGVtZW50cyBQYXJzYWJsZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHN1YklkZW50aWZpZXJzKQogICAgewogICAgICAgICR0aGlzLT52YWx1ZSA9ICRzdWJJZGVudGlmaWVyczsKICAgICAgICAkdGhpcy0+c3ViSWRlbnRpZmllcnMgPSBleHBsb2RlKCcuJywgJHN1YklkZW50aWZpZXJzKTsKICAgICAgICAkbnJPZlN1YklkZW50aWZpZXJzID0gY291bnQoJHRoaXMtPnN1YklkZW50aWZpZXJzKTsKCiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJG5yT2ZTdWJJZGVudGlmaWVyczsgJGkrKykgewogICAgICAgICAgICBpZiAoaXNfbnVtZXJpYygkdGhpcy0+c3ViSWRlbnRpZmllcnNbJGldKSkgewogICAgICAgICAgICAgICAgLy8gZW5mb3JjZSB0aGUgaW50ZWdlciB0eXBlCiAgICAgICAgICAgICAgICAkdGhpcy0+c3ViSWRlbnRpZmllcnNbJGldID0gaW50dmFsKCR0aGlzLT5zdWJJZGVudGlmaWVyc1skaV0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiW3skc3ViSWRlbnRpZmllcnN9XSBpcyBubyB2YWxpZCBvYmplY3QgaWRlbnRpZmllciAoc3ViIGlkZW50aWZpZXIgIi4oJGkgKyAxKS4nIGlzIG5vdCBudW1lcmljKSEnKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OlJFTEFUSVZFX09JRDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gMCkKICAgIHsKICAgICAgICBzZWxmOjpwYXJzZUlkZW50aWZpZXIoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4XSwgSWRlbnRpZmllcjo6UkVMQVRJVkVfT0lELCAkb2Zmc2V0SW5kZXgrKyk7CiAgICAgICAgJGNvbnRlbnRMZW5ndGggPSBzZWxmOjpwYXJzZUNvbnRlbnRMZW5ndGgoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCwgMSk7CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRvaWRTdHJpbmcgPSBzZWxmOjpwYXJzZU9pZCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4LCAkY29udGVudExlbmd0aCk7CiAgICAgICAgfSBjYXRjaCAoUGFyc2VyRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oJ01hbGZvcm1lZCBBU04uMSBSZWxhdGl2ZSBPYmplY3QgSWRlbnRpZmllcicsICRlLT5nZXRPZmZzZXQoKSk7CiAgICAgICAgfQoKICAgICAgICAkcGFyc2VkT2JqZWN0ID0gbmV3IHNlbGYoJG9pZFN0cmluZyk7CiAgICAgICAgJHBhcnNlZE9iamVjdC0+c2V0Q29udGVudExlbmd0aCgkY29udGVudExlbmd0aCk7CgogICAgICAgIHJldHVybiAkcGFyc2VkT2JqZWN0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/Sequence.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxDb25zdHJ1Y3Q7CnVzZSBGR1xBU04xXFBhcnNhYmxlOwp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwoKY2xhc3MgU2VxdWVuY2UgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBQYXJzYWJsZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OlNFUVVFTkNFOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/Set.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwoKY2xhc3MgU2V0IGV4dGVuZHMgU2VxdWVuY2UKewogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpTRVQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/T61String.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIFQ2MVN0cmluZyBleHRlbmRzIEFic3RyYWN0U3RyaW5nCnsKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5ldyBBU04uMSBUNjEgU3RyaW5nLgogICAgICogVE9ETyBUaGUgZW5jb2RhYmxlIGNoYXJhY3RlcnMgb2YgdGhpcyB0eXBlIGFyZSBub3QgeWV0IGNoZWNrZWQuCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lUVV9ULjYxCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc3RyaW5nKQogICAgewogICAgICAgICR0aGlzLT52YWx1ZSA9ICRzdHJpbmc7CiAgICAgICAgJHRoaXMtPmFsbG93QWxsKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpUNjFfU1RSSU5HOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/UniversalString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIFVuaXZlcnNhbFN0cmluZyBleHRlbmRzIEFic3RyYWN0U3RyaW5nCnsKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5ldyBBU04uMSBVbml2ZXJzYWwgU3RyaW5nLgogICAgICogVE9ETyBUaGUgZW5jb2RhYmxlIGNoYXJhY3RlcnMgb2YgdGhpcyB0eXBlIGFyZSBub3QgeWV0IGNoZWNrZWQuCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VuaXZlcnNhbF9DaGFyYWN0ZXJfU2V0CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc3RyaW5nKQogICAgewogICAgICAgICR0aGlzLT52YWx1ZSA9ICRzdHJpbmc7CiAgICAgICAgJHRoaXMtPmFsbG93QWxsKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpVTklWRVJTQUxfU1RSSU5HOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/UTCTime.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFRpbWU7CnVzZSBGR1xBU04xXFBhcnNhYmxlOwp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwp1c2UgRkdcQVNOMVxFeGNlcHRpb25cUGFyc2VyRXhjZXB0aW9uOwoKLyoqCiAqIFRoaXMgQVNOLjEgdW5pdmVyc2FsIHR5cGUgY29udGFpbnMgdGhlIGNhbGVuZGFyIGRhdGUgYW5kIHRpbWUuCiAqCiAqIFRoZSBwcmVjaXNpb24gaXMgb25lIG1pbnV0ZSBvciBvbmUgc2Vjb25kIGFuZCBvcHRpb25hbGx5IGEKICogbG9jYWwgdGltZSBkaWZmZXJlbnRpYWwgZnJvbSBjb29yZGluYXRlZCB1bml2ZXJzYWwgdGltZS4KICoKICogRGVjb2Rpbmcgb2YgdGhpcyB0eXBlIHdpbGwgYWNjZXB0IHRoZSBCYXNpYyBFbmNvZGluZyBSdWxlcyAoQkVSKQogKiBUaGUgZW5jb2Rpbmcgd2lsbCBjb21wbHkgd2l0aCB0aGUgRGlzdGluZ3Vpc2hlZCBFbmNvZGluZyBSdWxlcyAoREVSKS4KICovCmNsYXNzIFVUQ1RpbWUgZXh0ZW5kcyBBYnN0cmFjdFRpbWUgaW1wbGVtZW50cyBQYXJzYWJsZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OlVUQ19USU1FOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjYWxjdWxhdGVDb250ZW50TGVuZ3RoKCkKICAgIHsKICAgICAgICByZXR1cm4gMTM7IC8vIENvbnRlbnQgaXMgYSBzdHJpbmcgbyB0aGUgZm9sbG93aW5nIGZvcm1hdDogWVlNTUREaGhtbXNzWiAoMTMgb2N0ZXRzKQogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRFbmNvZGVkVmFsdWUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWUtPmZvcm1hdCgneW1kSGlzJykuJ1onOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUJpbmFyeSgmJGJpbmFyeURhdGEsICYkb2Zmc2V0SW5kZXggPSAwKQogICAgewogICAgICAgIHNlbGY6OnBhcnNlSWRlbnRpZmllcigkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdLCBJZGVudGlmaWVyOjpVVENfVElNRSwgJG9mZnNldEluZGV4KyspOwogICAgICAgICRjb250ZW50TGVuZ3RoID0gc2VsZjo6cGFyc2VDb250ZW50TGVuZ3RoKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgsIDExKTsKCiAgICAgICAgJGZvcm1hdCA9ICd5bWRHaSc7CiAgICAgICAgJGRhdGVUaW1lU3RyaW5nID0gc3Vic3RyKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgsIDEwKTsKICAgICAgICAkb2Zmc2V0SW5kZXggKz0gMTA7CgogICAgICAgIC8vIGV4dHJhY3Qgb3B0aW9uYWwgc2Vjb25kcyBwYXJ0CiAgICAgICAgaWYgKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleF0gIT0gJ1onCiAgICAgICAgJiYgJGJpbmFyeURhdGFbJG9mZnNldEluZGV4XSAhPSAnKycKICAgICAgICAmJiAkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdICE9ICctJykgewogICAgICAgICAgICAkZGF0ZVRpbWVTdHJpbmcgLj0gc3Vic3RyKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgsIDIpOwogICAgICAgICAgICAkb2Zmc2V0SW5kZXggKz0gMjsKICAgICAgICAgICAgJGZvcm1hdCAuPSAncyc7CiAgICAgICAgfQoKICAgICAgICAkZGF0ZVRpbWUgPSBcRGF0ZVRpbWU6OmNyZWF0ZUZyb21Gb3JtYXQoJGZvcm1hdCwgJGRhdGVUaW1lU3RyaW5nLCBuZXcgXERhdGVUaW1lWm9uZSgnVVRDJykpOwoKICAgICAgICAvLyBleHRyYWN0IHRpbWUgem9uZSBzZXR0aW5ncwogICAgICAgIGlmICgkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdID09ICcrJwogICAgICAgIHx8ICRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleF0gPT0gJy0nKSB7CiAgICAgICAgICAgICRkYXRlVGltZSA9IHN0YXRpYzo6ZXh0cmFjdFRpbWVab25lRGF0YSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4LCAkZGF0ZVRpbWUpOwogICAgICAgIH0gZWxzZWlmICgkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXgrK10gIT0gJ1onKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oJ0ludmFsaWQgVVRDIFN0cmluZycsICRvZmZzZXRJbmRleCk7CiAgICAgICAgfQoKICAgICAgICAkcGFyc2VkT2JqZWN0ID0gbmV3IHNlbGYoJGRhdGVUaW1lKTsKICAgICAgICAkcGFyc2VkT2JqZWN0LT5zZXRDb250ZW50TGVuZ3RoKCRjb250ZW50TGVuZ3RoKTsKCiAgICAgICAgcmV0dXJuICRwYXJzZWRPYmplY3Q7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/UTF8String.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIFVURjhTdHJpbmcgZXh0ZW5kcyBBYnN0cmFjdFN0cmluZwp7CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBuZXcgQVNOLjEgVW5pdmVyc2FsIFN0cmluZy4KICAgICAqIFRPRE8gVGhlIGVuY29kYWJsZSBjaGFyYWN0ZXJzIG9mIHRoaXMgdHlwZSBhcmUgbm90IHlldCBjaGVja2VkLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHN0cmluZykKICAgIHsKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkc3RyaW5nOwogICAgICAgICR0aGlzLT5hbGxvd0FsbCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6VVRGOF9TVFJJTkc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/VisibleString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIFZpc2libGVTdHJpbmcgZXh0ZW5kcyBBYnN0cmFjdFN0cmluZwp7CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBuZXcgQVNOLjEgVmlzaWJsZSBTdHJpbmcuCiAgICAgKiBUT0RPIFRoZSBlbmNvZGFibGUgY2hhcmFjdGVycyBvZiB0aGlzIHR5cGUgYXJlIG5vdCB5ZXQgY2hlY2tlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRzdHJpbmcpCiAgICB7CiAgICAgICAgJHRoaXMtPnZhbHVlID0gJHN0cmluZzsKICAgICAgICAkdGhpcy0+YWxsb3dBbGwoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OlZJU0lCTEVfU1RSSU5HOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/UnknownConstructedObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCmNsYXNzIFVua25vd25Db25zdHJ1Y3RlZE9iamVjdCBleHRlbmRzIENvbnN0cnVjdAp7CiAgICBwcml2YXRlICRpZGVudGlmaWVyOwogICAgcHJpdmF0ZSAkY29udGVudExlbmd0aDsKCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJpbmFyeURhdGEKICAgICAqIEBwYXJhbSBpbnQgJG9mZnNldEluZGV4CiAgICAgKgogICAgICogQHRocm93cyBcRkdcQVNOMVxFeGNlcHRpb25cUGFyc2VyRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkYmluYXJ5RGF0YSwgJiRvZmZzZXRJbmRleCkKICAgIHsKICAgICAgICAkdGhpcy0+aWRlbnRpZmllciA9IHNlbGY6OnBhcnNlQmluYXJ5SWRlbnRpZmllcigkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAkdGhpcy0+Y29udGVudExlbmd0aCA9IHNlbGY6OnBhcnNlQ29udGVudExlbmd0aCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKCiAgICAgICAgJGNoaWxkcmVuID0gW107CiAgICAgICAgJG9jdGV0c1RvUmVhZCA9ICR0aGlzLT5jb250ZW50TGVuZ3RoOwogICAgICAgIHdoaWxlICgkb2N0ZXRzVG9SZWFkID4gMCkgewogICAgICAgICAgICAkbmV3Q2hpbGQgPSBBU05PYmplY3Q6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgICRvY3RldHNUb1JlYWQgLT0gJG5ld0NoaWxkLT5nZXRPYmplY3RMZW5ndGgoKTsKICAgICAgICAgICAgJGNoaWxkcmVuW10gPSAkbmV3Q2hpbGQ7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KC4uLiRjaGlsZHJlbik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBvcmQoJHRoaXMtPmlkZW50aWZpZXIpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJZGVudGlmaWVyKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmlkZW50aWZpZXI7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNhbGN1bGF0ZUNvbnRlbnRMZW5ndGgoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y29udGVudExlbmd0aDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0RW5jb2RlZFZhbHVlKCkKICAgIHsKICAgICAgICByZXR1cm4gJyc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/UnknownObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCmNsYXNzIFVua25vd25PYmplY3QgZXh0ZW5kcyBBU05PYmplY3QKewogICAgLyoqIEB2YXIgc3RyaW5nICovCiAgICBwcml2YXRlICR2YWx1ZTsKCiAgICBwcml2YXRlICRpZGVudGlmaWVyOwoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZ3xpbnQgJGlkZW50aWZpZXIgRWl0aGVyIHRoZSBmaXJzdCBpZGVudGlmaWVyIG9jdGV0IGFzIGludCBvciBhbGwgaWRlbnRpZmllciBieXRlcyBhcyBhIHN0cmluZwogICAgICogQHBhcmFtIGludCAgICAgICAgJGNvbnRlbnRMZW5ndGgKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRpZGVudGlmaWVyLCAkY29udGVudExlbmd0aCkKICAgIHsKICAgICAgICBpZiAoaXNfaW50KCRpZGVudGlmaWVyKSkgewogICAgICAgICAgICAkaWRlbnRpZmllciA9IGNocigkaWRlbnRpZmllcik7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+aWRlbnRpZmllciA9ICRpZGVudGlmaWVyOwogICAgICAgICR0aGlzLT52YWx1ZSA9ICJVbnBhcnNhYmxlIE9iamVjdCAoeyRjb250ZW50TGVuZ3RofSBieXRlcykiOwogICAgICAgICR0aGlzLT5zZXRDb250ZW50TGVuZ3RoKCRjb250ZW50TGVuZ3RoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIG9yZCgkdGhpcy0+aWRlbnRpZmllclswXSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldElkZW50aWZpZXIoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aWRlbnRpZmllcjsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRDb250ZW50TGVuZ3RoKCk7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEVuY29kZWRWYWx1ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICcnOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/Utility/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/Utility/BigInteger.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0UKICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuCiAqLwoKbmFtZXNwYWNlIEZHXFV0aWxpdHk7CgovKioKICogQ2xhc3MgQmlnSW50ZWdlcgogKiBVdGlsaXR5IGNsYXNzIHRvIHJlbW92ZSBkZXBlbmRlbmNlIG9uIGEgc2luZ2xlIGxhcmdlIG51bWJlciBsaWJyYXJ5LiBOb3QgaW50ZW5kZWQgZm9yIGV4dGVybmFsIHVzZSwgdGhpcyBjbGFzcyBvbmx5CiAqIGltcGxlbWVudHMgdGhlIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIHRocm91Z2hvdXQgdGhpcyBwcm9qZWN0LgogKgogKiBJbnN0YW5jZXMgYXJlIGltbXV0YWJsZSwgYWxsIG9wZXJhdGlvbnMgcmV0dXJuIGEgbmV3IGluc3RhbmNlIHdpdGggdGhlIHJlc3VsdC4KICoKICogQHBhY2thZ2UgRkdcVXRpbGl0eQogKiBAaW50ZXJuYWwKICovCmFic3RyYWN0IGNsYXNzIEJpZ0ludGVnZXIKewogICAgLyoqCiAgICAgKiBGb3JjZSBhIHByZWZlcmVuY2Ugb24gdGhlIHVuZGVybHlpbmcgYmlnIG51bWJlciBpbXBsZW1lbnRhdGlvbiwgdXNlZnVsIGZvciB0ZXN0aW5nLgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkX3ByZWZlcjsKCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldFByZWZlcigkcHJlZmVyID0gbnVsbCkKICAgIHsKICAgICAgICBzZWxmOjokX3ByZWZlciA9ICRwcmVmZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBCaWdJbnRlZ2VyIGluc3RhbmNlIGJhc2VkIG9mZiB0aGUgYmFzZSAxMCBzdHJpbmcgb3IgYW4gaW50ZWdlci4KICAgICAqIEBwYXJhbSBzdHJpbmd8aW50ICR2YWwKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKCR2YWwpCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OiRfcHJlZmVyKSB7CiAgICAgICAgICAgIHN3aXRjaCAoc2VsZjo6JF9wcmVmZXIpIHsKICAgICAgICAgICAgICAgIGNhc2UgJ2dtcCc6CiAgICAgICAgICAgICAgICAgICAgJHJldCA9IG5ldyBCaWdJbnRlZ2VyR21wKCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdiY21hdGgnOgogICAgICAgICAgICAgICAgICAgICRyZXQgPSBuZXcgQmlnSW50ZWdlckJjbWF0aCgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbignVW5rbm93biBudW1iZXIgaW1wbGVtZW50YXRpb246ICcgLiBzZWxmOjokX3ByZWZlcik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIC8vIGF1dG9kZXRlY3QKICAgICAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnZ21wX2FkZCcpKSB7CiAgICAgICAgICAgICAgICAkcmV0ID0gbmV3IEJpZ0ludGVnZXJHbXAoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygnYmNhZGQnKSkgewogICAgICAgICAgICAgICAgJHJldCA9IG5ldyBCaWdJbnRlZ2VyQmNtYXRoKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1JlcXVpcmVzIEdNUCBvciBiY21hdGggZXh0ZW5zaW9uLicpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNfaW50KCR2YWwpKSB7CiAgICAgICAgICAgICRyZXQtPl9mcm9tSW50ZWdlcigkdmFsKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gc3RyaW5nLCBpZiBub3QgYWxyZWFkeSBvbmUKICAgICAgICAgICAgJHZhbCA9IChzdHJpbmcpJHZhbDsKCiAgICAgICAgICAgIC8vIHZhbGlkYXRlIHN0cmluZwogICAgICAgICAgICBpZiAoIXByZWdfbWF0Y2goJy9eLT9bMC05XSskLycsICR2YWwpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignRXhwZWN0cyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZXQtPl9mcm9tU3RyaW5nKCR2YWwpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBCaWdJbnRlZ2VyIGNvbnN0cnVjdG9yLgogICAgICogUHJldmVudCBkaXJlY3RseSBpbnN0YW50aWF0aW5nIG9iamVjdCwgdXNlIEJpZ0ludGVnZXI6OmNyZWF0ZSBpbnN0ZWFkLgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewoKICAgIH0KCiAgICAvKioKICAgICAqIFN1YmNsYXNzZXMgbXVzdCBwcm92aWRlIGNsb25lIGZ1bmN0aW9uYWxpdHkuCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIF9fY2xvbmUoKTsKCiAgICAvKioKICAgICAqIEFzc2lnbiB0aGUgaW5zdGFuY2UgdmFsdWUgZnJvbSBiYXNlIDEwIHN0cmluZy4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cgogICAgICovCiAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgZnVuY3Rpb24gX2Zyb21TdHJpbmcoJHN0cik7CgogICAgLyoqCiAgICAgKiBBc3NpZ24gdGhlIGluc3RhbmNlIHZhbHVlIGZyb20gYW4gaW50ZWdlciB0eXBlLgogICAgICogQHBhcmFtIGludCAkaW50ZWdlcgogICAgICovCiAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgZnVuY3Rpb24gX2Zyb21JbnRlZ2VyKCRpbnRlZ2VyKTsKCiAgICAvKioKICAgICAqIE11c3QgcHJvdmlkZSBzdHJpbmcgaW1wbGVtZW50YXRpb24gdGhhdCByZXR1cm5zIGJhc2UgMTAgbnVtYmVyLgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKTsKCiAgICAvKiBJTkZPUk1BVElPTkFMIEZVTkNUSU9OUyAqLwoKICAgIC8qKgogICAgICogUmV0dXJuIGludGVnZXIsIGlmIHBvc3NpYmxlLiBUaHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSBudW1iZXIgY2FuIG5vdCBiZSByZXByZXNlbnRlZCBhcyBhIG5hdGl2ZSBpbnRlZ2VyLgogICAgICogQHJldHVybiBpbnQKICAgICAqIEB0aHJvd3MgXE92ZXJmbG93RXhjZXB0aW9uCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiB0b0ludGVnZXIoKTsKCiAgICAvKioKICAgICAqIElzIHJlcHJlc2VudGVkIGludGVnZXIgbmVnYXRpdmU/CiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGlzTmVnYXRpdmUoKTsKCiAgICAvKioKICAgICAqIENvbXBhcmUgdGhlIGludGVnZXIgd2l0aCAkbnVtYmVyLCByZXR1cm5zIGEgbmVnYXRpdmUgaW50ZWdlciBpZiAkdGhpcyBpcyBsZXNzIHRoYW4gbnVtYmVyLCByZXR1cm5zIDAgaWYgJHRoaXMgaXMKICAgICAqIGVxdWFsIHRvIG51bWJlciBhbmQgcmV0dXJucyBhIHBvc2l0aXZlIGludGVnZXIgaWYgJHRoaXMgaXMgZ3JlYXRlciB0aGFuIG51bWJlci4KICAgICAqIEBwYXJhbSBCaWdJbnRlZ2VyfHN0cmluZ3xpbnQgJG51bWJlcgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGNvbXBhcmUoJG51bWJlcik7CgogICAgLyogTU9ESUZZICovCgogICAgLyoqCiAgICAgKiBBZGQgYW5vdGhlciBpbnRlZ2VyICRiIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuCiAgICAgKiBAcGFyYW0gQmlnSW50ZWdlcnxzdHJpbmd8aW50ICRiCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGFkZCgkYik7CgogICAgLyoqCiAgICAgKiBTdWJ0cmFjdCAkYiBmcm9tICR0aGlzIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuCiAgICAgKiBAcGFyYW0gQmlnSW50ZWdlcnxzdHJpbmd8aW50ICRiCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIHN1YnRyYWN0KCRiKTsKCiAgICAvKioKICAgICAqIE11bHRpcGx5IHZhbHVlLgogICAgICogQHBhcmFtIEJpZ0ludGVnZXJ8c3RyaW5nfGludCAkYgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBtdWx0aXBseSgkYik7CgogICAgLyoqCiAgICAgKiBUaGUgdmFsdWUgJHRoaXMgbW9kdWx1cyAkYi4KICAgICAqIEBwYXJhbSBCaWdJbnRlZ2VyfHN0cmluZ3xpbnQgJGIKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gbW9kdWx1cygkYik7CgogICAgLyoqCiAgICAgKiBSYWlzZSAkdGhpcyB0byB0aGUgcG93ZXIgb2YgJGIgYW5kIHJldHVybnMgdGhlIHJlc3VsdC4KICAgICAqIEBwYXJhbSBCaWdJbnRlZ2VyfHN0cmluZ3xpbnQgJGIKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gdG9Qb3dlcigkYik7CgogICAgLyoqCiAgICAgKiBTaGlmdCB0aGUgdmFsdWUgdG8gdGhlIHJpZ2h0IGJ5IGEgc2V0IG51bWJlciBvZiBiaXRzIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuCiAgICAgKiBAcGFyYW0gaW50ICRiaXRzCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIHNoaWZ0UmlnaHQoJGJpdHMgPSA4KTsKCiAgICAvKioKICAgICAqIFNoaWZ0IHRoZSB2YWx1ZSB0byB0aGUgbGVmdCBieSBhIHNldCBudW1iZXIgb2YgYml0cyBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LgogICAgICogQHBhcmFtIGludCAkYml0cwogICAgICogQHJldHVybiBCaWdJbnRlZ2VyCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBzaGlmdExlZnQoJGJpdHMgPSA4KTsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGFic29sdXRlIHZhbHVlLgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBhYnNvbHV0ZVZhbHVlKCk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/Utility/BigIntegerBcmath.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0UKICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuCiAqLwoKbmFtZXNwYWNlIEZHXFV0aWxpdHk7CgovKioKICogQ2xhc3MgQmlnSW50ZWdlckJjbWF0aAogKiBJbnRlZ2VyIHJlcHJlc2VudGF0aW9uIG9mIGJpZyBudW1iZXJzIHVzaW5nIHRoZSBiY21hdGggbGlicmFyeSB0byBwZXJmb3JtIGxhcmdlIG9wZXJhdGlvbnMuCiAqIEBwYWNrYWdlIEZHXFV0aWxpdHkKICogQGludGVybmFsCiAqLwpjbGFzcyBCaWdJbnRlZ2VyQmNtYXRoIGV4dGVuZHMgQmlnSW50ZWdlcgp7CiAgICBwcm90ZWN0ZWQgJF9zdHI7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY2xvbmUoKQogICAgewogICAgICAgIC8vIG5vdGhpbmcgbmVlZGVkIHRvIGNvcHkKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2Zyb21TdHJpbmcoJHN0cikKICAgIHsKICAgICAgICAkdGhpcy0+X3N0ciA9IChzdHJpbmcpJHN0cjsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2Zyb21JbnRlZ2VyKCRpbnRlZ2VyKQogICAgewogICAgICAgICR0aGlzLT5fc3RyID0gKHN0cmluZykkaW50ZWdlcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fc3RyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b0ludGVnZXIoKQogICAgewogICAgICAgIGlmICgkdGhpcy0+Y29tcGFyZShQSFBfSU5UX01BWCkgPiAwIHx8ICR0aGlzLT5jb21wYXJlKFBIUF9JTlRfTUlOKSA8IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxPdmVyZmxvd0V4Y2VwdGlvbihzcHJpbnRmKCdDYW4gbm90IHJlcHJlc2VudCAlcyBhcyBpbnRlZ2VyLicsICR0aGlzLT5fc3RyKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAoaW50KSR0aGlzLT5fc3RyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc05lZ2F0aXZlKCkKICAgIHsKICAgICAgICByZXR1cm4gYmNjb21wKCR0aGlzLT5fc3RyLCAnMCcsIDApIDwgMDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3Vud3JhcCgkbnVtYmVyKQogICAgewogICAgICAgIGlmICgkbnVtYmVyIGluc3RhbmNlb2Ygc2VsZikgewogICAgICAgICAgICByZXR1cm4gJG51bWJlci0+X3N0cjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRudW1iZXI7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNvbXBhcmUoJG51bWJlcikKICAgIHsKICAgICAgICByZXR1cm4gYmNjb21wKCR0aGlzLT5fc3RyLCAkdGhpcy0+X3Vud3JhcCgkbnVtYmVyKSwgMCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFkZCgkYikKICAgIHsKICAgICAgICAkcmV0ID0gbmV3IHNlbGYoKTsKICAgICAgICAkcmV0LT5fc3RyID0gYmNhZGQoJHRoaXMtPl9zdHIsICR0aGlzLT5fdW53cmFwKCRiKSwgMCk7CiAgICAgICAgcmV0dXJuICRyZXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHN1YnRyYWN0KCRiKQogICAgewogICAgICAgICRyZXQgPSBuZXcgc2VsZigpOwogICAgICAgICRyZXQtPl9zdHIgPSBiY3N1YigkdGhpcy0+X3N0ciwgJHRoaXMtPl91bndyYXAoJGIpLCAwKTsKICAgICAgICByZXR1cm4gJHJldDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbXVsdGlwbHkoJGIpCiAgICB7CiAgICAgICAgJHJldCA9IG5ldyBzZWxmKCk7CiAgICAgICAgJHJldC0+X3N0ciA9IGJjbXVsKCR0aGlzLT5fc3RyLCAkdGhpcy0+X3Vud3JhcCgkYiksIDApOwogICAgICAgIHJldHVybiAkcmV0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBtb2R1bHVzKCRiKQogICAgewogICAgICAgICRyZXQgPSBuZXcgc2VsZigpOwogICAgICAgIGlmICgkdGhpcy0+aXNOZWdhdGl2ZSgpKSB7CiAgICAgICAgICAgIC8vIGJjbW9kIGhhbmRsZXMgbmVnYXRpdmUgbnVtYmVycyBkaWZmZXJlbnRseQogICAgICAgICAgICAkYiA9ICR0aGlzLT5fdW53cmFwKCRiKTsKICAgICAgICAgICAgJHJldC0+X3N0ciA9IGJjc3ViKCRiLCBiY21vZChiY3N1YignMCcsICR0aGlzLT5fc3RyLCAwKSwgJGIpLCAwKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRyZXQtPl9zdHIgPSBiY21vZCgkdGhpcy0+X3N0ciwgJHRoaXMtPl91bndyYXAoJGIpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyZXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRvUG93ZXIoJGIpCiAgICB7CiAgICAgICAgJHJldCA9IG5ldyBzZWxmKCk7CiAgICAgICAgJHJldC0+X3N0ciA9IGJjcG93KCR0aGlzLT5fc3RyLCAkdGhpcy0+X3Vud3JhcCgkYiksIDApOwogICAgICAgIHJldHVybiAkcmV0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzaGlmdFJpZ2h0KCRiaXRzID0gOCkKICAgIHsKICAgICAgICAkcmV0ID0gbmV3IHNlbGYoKTsKICAgICAgICAkcmV0LT5fc3RyID0gYmNkaXYoJHRoaXMtPl9zdHIsIGJjcG93KCcyJywgJGJpdHMpKTsKICAgICAgICByZXR1cm4gJHJldDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2hpZnRMZWZ0KCRiaXRzID0gOCkgewogICAgICAgICRyZXQgPSBuZXcgc2VsZigpOwogICAgICAgICRyZXQtPl9zdHIgPSBiY211bCgkdGhpcy0+X3N0ciwgYmNwb3coJzInLCAkYml0cykpOwogICAgICAgIHJldHVybiAkcmV0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhYnNvbHV0ZVZhbHVlKCkKICAgIHsKICAgICAgICAkcmV0ID0gbmV3IHNlbGYoKTsKICAgICAgICBpZiAoLTEgPT09IGJjY29tcCgkdGhpcy0+X3N0ciwgJzAnLCAwKSkgewogICAgICAgICAgICAkcmV0LT5fc3RyID0gYmNzdWIoJzAnLCAkdGhpcy0+X3N0ciwgMCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkcmV0LT5fc3RyID0gJHRoaXMtPl9zdHI7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmV0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/Utility/BigIntegerGmp.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0UKICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuCiAqLwoKbmFtZXNwYWNlIEZHXFV0aWxpdHk7CgovKioKICogQ2xhc3MgQmlnSW50ZWdlckdtcAogKiBJbnRlZ2VyIHJlcHJlc2VudGF0aW9uIG9mIGJpZyBudW1iZXJzIHVzaW5nIHRoZSBHTVAgZXh0ZW5zaW9uIHRvIHBlcmZvcm0gb3BlcmF0aW9ucy4KICogQHBhY2thZ2UgRkdcVXRpbGl0eQogKiBAaW50ZXJuYWwKICovCmNsYXNzIEJpZ0ludGVnZXJHbXAgZXh0ZW5kcyBCaWdJbnRlZ2VyCnsKICAgIC8qKgogICAgICogUmVzb3VyY2UgaGFuZGxlLgogICAgICogQHZhciBcR01QCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX3JoOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2Nsb25lKCkKICAgIHsKICAgICAgICAkdGhpcy0+X3JoID0gZ21wX2FkZCgkdGhpcy0+X3JoLCAwKTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2Zyb21TdHJpbmcoJHN0cikKICAgIHsKICAgICAgICAkdGhpcy0+X3JoID0gZ21wX2luaXQoJHN0ciwgMTApOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfZnJvbUludGVnZXIoJGludGVnZXIpCiAgICB7CiAgICAgICAgJHRoaXMtPl9yaCA9IGdtcF9pbml0KCRpbnRlZ2VyLCAxMCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiBnbXBfc3RydmFsKCR0aGlzLT5fcmgsIDEwKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9JbnRlZ2VyKCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmNvbXBhcmUoUEhQX0lOVF9NQVgpID4gMCB8fCAkdGhpcy0+Y29tcGFyZShQSFBfSU5UX01JTikgPCAwKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcT3ZlcmZsb3dFeGNlcHRpb24oc3ByaW50ZignQ2FuIG5vdCByZXByZXNlbnQgJXMgYXMgaW50ZWdlci4nLCAkdGhpcykpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZ21wX2ludHZhbCgkdGhpcy0+X3JoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNOZWdhdGl2ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIGdtcF9zaWduKCR0aGlzLT5fcmgpID09PSAtMTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3Vud3JhcCgkbnVtYmVyKQogICAgewogICAgICAgIGlmICgkbnVtYmVyIGluc3RhbmNlb2Ygc2VsZikgewogICAgICAgICAgICByZXR1cm4gJG51bWJlci0+X3JoOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG51bWJlcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcGFyZSgkbnVtYmVyKQogICAgewogICAgICAgIHJldHVybiBnbXBfY21wKCR0aGlzLT5fcmgsICR0aGlzLT5fdW53cmFwKCRudW1iZXIpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKCRiKQogICAgewogICAgICAgICRyZXQgPSBuZXcgc2VsZigpOwogICAgICAgICRyZXQtPl9yaCA9IGdtcF9hZGQoJHRoaXMtPl9yaCwgJHRoaXMtPl91bndyYXAoJGIpKTsKICAgICAgICByZXR1cm4gJHJldDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc3VidHJhY3QoJGIpCiAgICB7CiAgICAgICAgJHJldCA9IG5ldyBzZWxmKCk7CiAgICAgICAgJHJldC0+X3JoID0gZ21wX3N1YigkdGhpcy0+X3JoLCAkdGhpcy0+X3Vud3JhcCgkYikpOwogICAgICAgIHJldHVybiAkcmV0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBtdWx0aXBseSgkYikKICAgIHsKICAgICAgICAkcmV0ID0gbmV3IHNlbGYoKTsKICAgICAgICAkcmV0LT5fcmggPSBnbXBfbXVsKCR0aGlzLT5fcmgsICR0aGlzLT5fdW53cmFwKCRiKSk7CiAgICAgICAgcmV0dXJuICRyZXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG1vZHVsdXMoJGIpCiAgICB7CiAgICAgICAgJHJldCA9IG5ldyBzZWxmKCk7CiAgICAgICAgJHJldC0+X3JoID0gZ21wX21vZCgkdGhpcy0+X3JoLCAkdGhpcy0+X3Vud3JhcCgkYikpOwogICAgICAgIHJldHVybiAkcmV0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b1Bvd2VyKCRiKQogICAgewogICAgICAgIGlmICgkYiBpbnN0YW5jZW9mIHNlbGYpIHsKICAgICAgICAgICAgLy8gZ21wX3BvdyBhY2NlcHRzIGp1c3QgYW4gaW50ZWdlcgogICAgICAgICAgICBpZiAoJGItPmNvbXBhcmUoUEhQX0lOVF9NQVgpID4gMCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24oJ1VuYWJsZSB0byByYWlzZSB0byBwb3dlciBncmVhdGVyIHRoYW4gUEhQX0lOVF9NQVguJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGIgPSBnbXBfaW50dmFsKCRiLT5fcmgpOwogICAgICAgIH0KICAgICAgICAkcmV0ID0gbmV3IHNlbGYoKTsKICAgICAgICAkcmV0LT5fcmggPSBnbXBfcG93KCR0aGlzLT5fcmgsICRiKTsKICAgICAgICByZXR1cm4gJHJldDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2hpZnRSaWdodCgkYml0cz04KQogICAgewogICAgICAgICRyZXQgPSBuZXcgc2VsZigpOwogICAgICAgICRyZXQtPl9yaCA9IGdtcF9kaXYoJHRoaXMtPl9yaCwgZ21wX3BvdygyLCAkYml0cykpOwogICAgICAgIHJldHVybiAkcmV0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzaGlmdExlZnQoJGJpdHM9OCkKICAgIHsKICAgICAgICAkcmV0ID0gbmV3IHNlbGYoKTsKICAgICAgICAkcmV0LT5fcmggPSBnbXBfbXVsKCR0aGlzLT5fcmgsIGdtcF9wb3coMiwgJGJpdHMpKTsKICAgICAgICByZXR1cm4gJHJldDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWJzb2x1dGVWYWx1ZSgpCiAgICB7CiAgICAgICAgJHJldCA9IG5ldyBzZWxmKCk7CiAgICAgICAgJHJldC0+X3JoID0gZ21wX2FicygkdGhpcy0+X3JoKTsKICAgICAgICByZXR1cm4gJHJldDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/AlgorithmIdentifier.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOTsKCnVzZSBGR1xBU04xXFVuaXZlcnNhbFxOdWxsT2JqZWN0Owp1c2UgRkdcQVNOMVxDb21wb3NpdGVcQXR0cmlidXRlVHlwZUFuZFZhbHVlOwoKY2xhc3MgQWxnb3JpdGhtSWRlbnRpZmllciBleHRlbmRzIEF0dHJpYnV0ZVR5cGVBbmRWYWx1ZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG9iamVjdElkZW50aWZpZXJTdHJpbmcpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkb2JqZWN0SWRlbnRpZmllclN0cmluZywgbmV3IE51bGxPYmplY3QoKSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/CertificateExtensions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOTsKCnVzZSBGR1xBU04xXEV4Y2VwdGlvblxQYXJzZXJFeGNlcHRpb247CnVzZSBGR1xBU04xXE9JRDsKdXNlIEZHXEFTTjFcQVNOT2JqZWN0Owp1c2UgRkdcQVNOMVxQYXJzYWJsZTsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXE9jdGV0U3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcU2V0Owp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcU2VxdWVuY2U7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxPYmplY3RJZGVudGlmaWVyOwp1c2UgRkdcWDUwOVxTQU5cU3ViamVjdEFsdGVybmF0aXZlTmFtZXM7CgpjbGFzcyBDZXJ0aWZpY2F0ZUV4dGVuc2lvbnMgZXh0ZW5kcyBTZXQgaW1wbGVtZW50cyBQYXJzYWJsZQp7CiAgICBwcml2YXRlICRpbm5lclNlcXVlbmNlOwogICAgcHJpdmF0ZSAkZXh0ZW5zaW9ucyA9IFtdOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICAgICAgJHRoaXMtPmlubmVyU2VxdWVuY2UgPSBuZXcgU2VxdWVuY2UoKTsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCR0aGlzLT5pbm5lclNlcXVlbmNlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkU3ViamVjdEFsdGVybmF0aXZlTmFtZXMoU3ViamVjdEFsdGVybmF0aXZlTmFtZXMgJHNhbnMpCiAgICB7CiAgICAgICAgJHRoaXMtPmFkZEV4dGVuc2lvbihPSUQ6OkNFUlRfRVhUX1NVQkpFQ1RfQUxUX05BTUUsICRzYW5zKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZEV4dGVuc2lvbigkb2lkU3RyaW5nLCBBU05PYmplY3QgJGV4dGVuc2lvbikKICAgIHsKICAgICAgICAkc2VxdWVuY2UgPSBuZXcgU2VxdWVuY2UoKTsKICAgICAgICAkc2VxdWVuY2UtPmFkZENoaWxkKG5ldyBPYmplY3RJZGVudGlmaWVyKCRvaWRTdHJpbmcpKTsKICAgICAgICAkc2VxdWVuY2UtPmFkZENoaWxkKCRleHRlbnNpb24pOwoKICAgICAgICAkdGhpcy0+aW5uZXJTZXF1ZW5jZS0+YWRkQ2hpbGQoJHNlcXVlbmNlKTsKICAgICAgICAkdGhpcy0+ZXh0ZW5zaW9uc1tdID0gJGV4dGVuc2lvbjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5leHRlbnNpb25zOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUJpbmFyeSgmJGJpbmFyeURhdGEsICYkb2Zmc2V0SW5kZXggPSAwKQogICAgewogICAgICAgIHNlbGY6OnBhcnNlSWRlbnRpZmllcigkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdLCBJZGVudGlmaWVyOjpTRVQsICRvZmZzZXRJbmRleCsrKTsKICAgICAgICBzZWxmOjpwYXJzZUNvbnRlbnRMZW5ndGgoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CgogICAgICAgICR0bXBPZmZzZXQgPSAkb2Zmc2V0SW5kZXg7CiAgICAgICAgJGV4dGVuc2lvbnMgPSBTZXF1ZW5jZTo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAkdG1wT2Zmc2V0ICs9IDEgKyAkZXh0ZW5zaW9ucy0+Z2V0TnVtYmVyT2ZMZW5ndGhPY3RldHMoKTsKCiAgICAgICAgJHBhcnNlZE9iamVjdCA9IG5ldyBzZWxmKCk7CiAgICAgICAgZm9yZWFjaCAoJGV4dGVuc2lvbnMgYXMgJGV4dGVuc2lvbikgewogICAgICAgICAgICBpZiAoJGV4dGVuc2lvbi0+Z2V0VHlwZSgpICE9IElkZW50aWZpZXI6OlNFUVVFTkNFKSB7CiAgICAgICAgICAgICAgICAvL0ZJWE1FIHdyb25nIG9mZnNldCBpbmRleAogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckV4Y2VwdGlvbignQ291bGQgbm90IHBhcnNlIENlcnRpZmljYXRlIEV4dGVuc2lvbnM6IEV4cGVjdGVkIEFTTi4xIFNlcXVlbmNlIGJ1dCBnb3QgJy4kZXh0ZW5zaW9uLT5nZXRUeXBlTmFtZSgpLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdG1wT2Zmc2V0ICs9IDEgKyAkZXh0ZW5zaW9uLT5nZXROdW1iZXJPZkxlbmd0aE9jdGV0cygpOwogICAgICAgICAgICAkY2hpbGRyZW4gPSAkZXh0ZW5zaW9uLT5nZXRDaGlsZHJlbigpOwogICAgICAgICAgICBpZiAoY291bnQoJGNoaWxkcmVuKSA8IDIpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oJ0NvdWxkIG5vdCBwYXJzZSBDZXJ0aWZpY2F0ZSBFeHRlbnNpb25zOiBOZWVkcyBhdCBsZWFzdCB0d28gY2hpbGQgZWxlbWVudHMgcGVyIGV4dGVuc2lvbiBzZXF1ZW5jZSAob2JqZWN0IGlkZW50aWZpZXIgYW5kIG9jdGV0IHN0cmluZyknLCAkdG1wT2Zmc2V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvKiogQHZhciBcRkdcQVNOMVxBU05PYmplY3QgJG9iamVjdElkZW50aWZpZXIgKi8KICAgICAgICAgICAgJG9iamVjdElkZW50aWZpZXIgPSAkY2hpbGRyZW5bMF07CgogICAgICAgICAgICAvKiogQHZhciBPY3RldFN0cmluZyAkb2N0ZXRTdHJpbmcgKi8KICAgICAgICAgICAgJG9jdGV0U3RyaW5nID0gJGNoaWxkcmVuWzFdOwoKICAgICAgICAgICAgaWYgKCRvYmplY3RJZGVudGlmaWVyLT5nZXRUeXBlKCkgIT0gSWRlbnRpZmllcjo6T0JKRUNUX0lERU5USUZJRVIpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oJ0NvdWxkIG5vdCBwYXJzZSBDZXJ0aWZpY2F0ZSBFeHRlbnNpb25zOiBFeHBlY3RlZCBBU04uMSBPYmplY3QgSWRlbnRpZmllciBidXQgZ290ICcuJGV4dGVuc2lvbi0+Z2V0VHlwZU5hbWUoKSwgJHRtcE9mZnNldCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0bXBPZmZzZXQgKz0gJG9iamVjdElkZW50aWZpZXItPmdldE9iamVjdExlbmd0aCgpOwoKICAgICAgICAgICAgaWYgKCRvYmplY3RJZGVudGlmaWVyLT5nZXRDb250ZW50KCkgPT0gT0lEOjpDRVJUX0VYVF9TVUJKRUNUX0FMVF9OQU1FKSB7CiAgICAgICAgICAgICAgICAkc2FucyA9IFN1YmplY3RBbHRlcm5hdGl2ZU5hbWVzOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkdG1wT2Zmc2V0KTsKICAgICAgICAgICAgICAgICRwYXJzZWRPYmplY3QtPmFkZFN1YmplY3RBbHRlcm5hdGl2ZU5hbWVzKCRzYW5zKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIGNhbiBub3cgb25seSBwYXJzZSBTQU5zLiBUaGVyZSBtaWdodCBiZSBtb3JlIGluIHRoZSBmdXR1cmUKICAgICAgICAgICAgICAgICR0bXBPZmZzZXQgKz0gJG9jdGV0U3RyaW5nLT5nZXRPYmplY3RMZW5ndGgoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHBhcnNlZE9iamVjdC0+Z2V0QmluYXJ5KCk7IC8vIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGNvbnRlbnQgb2N0ZXRzIGFuZCBvYmplY3Qgc2l6ZXMgb25jZSAoanVzdCB0byBsZXQgdGhlIGVxdWFsaXR5IHVuaXQgdGVzdHMgcGFzcyA6LyApCiAgICAgICAgcmV0dXJuICRwYXJzZWRPYmplY3Q7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/CertificateSubject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOTsKCnVzZSBGR1xBU04xXENvbXBvc2l0ZVxSZWxhdGl2ZURpc3Rpbmd1aXNoZWROYW1lOwp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwp1c2UgRkdcQVNOMVxPSUQ7CnVzZSBGR1xBU04xXFBhcnNhYmxlOwp1c2UgRkdcQVNOMVxDb21wb3NpdGVcUkROU3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcU2VxdWVuY2U7CgpjbGFzcyBDZXJ0aWZpY2F0ZVN1YmplY3QgZXh0ZW5kcyBTZXF1ZW5jZSBpbXBsZW1lbnRzIFBhcnNhYmxlCnsKICAgIHByaXZhdGUgJGNvbW1vbk5hbWU7CiAgICBwcml2YXRlICRlbWFpbDsKICAgIHByaXZhdGUgJG9yZ2FuaXphdGlvbjsKICAgIHByaXZhdGUgJGxvY2FsaXR5OwogICAgcHJpdmF0ZSAkc3RhdGU7CiAgICBwcml2YXRlICRjb3VudHJ5OwogICAgcHJpdmF0ZSAkb3JnYW5pemF0aW9uYWxVbml0OwoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkY29tbW9uTmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkZW1haWwKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9yZ2FuaXphdGlvbgogICAgICogQHBhcmFtIHN0cmluZyAkbG9jYWxpdHkKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0YXRlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb3VudHJ5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcmdhbml6YXRpb25hbFVuaXQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRjb21tb25OYW1lLCAkZW1haWwsICRvcmdhbml6YXRpb24sICRsb2NhbGl0eSwgJHN0YXRlLCAkY291bnRyeSwgJG9yZ2FuaXphdGlvbmFsVW5pdCkKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KAogICAgICAgICAgICBuZXcgUkROU3RyaW5nKE9JRDo6Q09VTlRSWV9OQU1FLCAkY291bnRyeSksCiAgICAgICAgICAgIG5ldyBSRE5TdHJpbmcoT0lEOjpTVEFURV9PUl9QUk9WSU5DRV9OQU1FLCAkc3RhdGUpLAogICAgICAgICAgICBuZXcgUkROU3RyaW5nKE9JRDo6TE9DQUxJVFlfTkFNRSwgJGxvY2FsaXR5KSwKICAgICAgICAgICAgbmV3IFJETlN0cmluZyhPSUQ6Ok9SR0FOSVpBVElPTl9OQU1FLCAkb3JnYW5pemF0aW9uKSwKICAgICAgICAgICAgbmV3IFJETlN0cmluZyhPSUQ6Ok9VX05BTUUsICRvcmdhbml6YXRpb25hbFVuaXQpLAogICAgICAgICAgICBuZXcgUkROU3RyaW5nKE9JRDo6Q09NTU9OX05BTUUsICRjb21tb25OYW1lKSwKICAgICAgICAgICAgbmV3IFJETlN0cmluZyhPSUQ6OlBLQ1M5X0VNQUlMLCAkZW1haWwpCiAgICAgICAgKTsKCiAgICAgICAgJHRoaXMtPmNvbW1vbk5hbWUgPSAkY29tbW9uTmFtZTsKICAgICAgICAkdGhpcy0+ZW1haWwgPSAkZW1haWw7CiAgICAgICAgJHRoaXMtPm9yZ2FuaXphdGlvbiA9ICRvcmdhbml6YXRpb247CiAgICAgICAgJHRoaXMtPmxvY2FsaXR5ID0gJGxvY2FsaXR5OwogICAgICAgICR0aGlzLT5zdGF0ZSA9ICRzdGF0ZTsKICAgICAgICAkdGhpcy0+Y291bnRyeSA9ICRjb3VudHJ5OwogICAgICAgICR0aGlzLT5vcmdhbml6YXRpb25hbFVuaXQgPSAkb3JnYW5pemF0aW9uYWxVbml0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb21tb25OYW1lKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNvbW1vbk5hbWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEVtYWlsKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmVtYWlsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPcmdhbml6YXRpb24oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+b3JnYW5pemF0aW9uOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMb2NhbGl0eSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5sb2NhbGl0eTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3RhdGUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c3RhdGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvdW50cnkoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y291bnRyeTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0T3JnYW5pemF0aW9uYWxVbml0KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm9yZ2FuaXphdGlvbmFsVW5pdDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gMCkKICAgIHsKICAgICAgICBzZWxmOjpwYXJzZUlkZW50aWZpZXIoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4XSwgSWRlbnRpZmllcjo6U0VRVUVOQ0UsICRvZmZzZXRJbmRleCsrKTsKICAgICAgICAkY29udGVudExlbmd0aCA9IHNlbGY6OnBhcnNlQ29udGVudExlbmd0aCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKCiAgICAgICAgJG5hbWVzID0gW107CiAgICAgICAgJG9jdGV0c1RvUmVhZCA9ICRjb250ZW50TGVuZ3RoOwogICAgICAgIHdoaWxlICgkb2N0ZXRzVG9SZWFkID4gMCkgewogICAgICAgICAgICAkcmVsYXRpdmVEaXN0aW5ndWlzaGVkTmFtZSA9IFJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWU6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgICRvY3RldHNUb1JlYWQgLT0gJHJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUtPmdldE9iamVjdExlbmd0aCgpOwogICAgICAgICAgICAkbmFtZXNbXSA9ICRyZWxhdGl2ZURpc3Rpbmd1aXNoZWROYW1lOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/CSR/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/CSR/Attributes.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOVxDU1I7Cgp1c2UgRkdcQVNOMVxBU05PYmplY3Q7CnVzZSBGR1xYNTA5XENlcnRpZmljYXRlRXh0ZW5zaW9uczsKdXNlIEZHXEFTTjFcT0lEOwp1c2UgRkdcQVNOMVxQYXJzYWJsZTsKdXNlIEZHXEFTTjFcQ29uc3RydWN0Owp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcU2V0Owp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcU2VxdWVuY2U7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxPYmplY3RJZGVudGlmaWVyOwoKY2xhc3MgQXR0cmlidXRlcyBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIFBhcnNhYmxlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gMHhBMDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkQXR0cmlidXRlKCRvYmplY3RJZGVudGlmaWVyLCBTZXQgJGF0dHJpYnV0ZSkKICAgIHsKICAgICAgICBpZiAoaXNfc3RyaW5nKCRvYmplY3RJZGVudGlmaWVyKSkgewogICAgICAgICAgICAkb2JqZWN0SWRlbnRpZmllciA9IG5ldyBPYmplY3RJZGVudGlmaWVyKCRvYmplY3RJZGVudGlmaWVyKTsKICAgICAgICB9CiAgICAgICAgJGF0dHJpYnV0ZVNlcXVlbmNlID0gbmV3IFNlcXVlbmNlKCRvYmplY3RJZGVudGlmaWVyLCAkYXR0cmlidXRlKTsKICAgICAgICAkYXR0cmlidXRlU2VxdWVuY2UtPmdldE51bWJlck9mTGVuZ3RoT2N0ZXRzKCk7ICAvLyBsZW5ndGggYW5kIG51bWJlciBvZiBsZW5ndGggb2N0ZXRzIGlzIGNhbGN1bGF0ZWQKICAgICAgICAkdGhpcy0+YWRkQ2hpbGQoJGF0dHJpYnV0ZVNlcXVlbmNlKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gMCkKICAgIHsKICAgICAgICBzZWxmOjpwYXJzZUlkZW50aWZpZXIoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4XSwgMHhBMCwgJG9mZnNldEluZGV4KyspOwogICAgICAgICRjb250ZW50TGVuZ3RoID0gc2VsZjo6cGFyc2VDb250ZW50TGVuZ3RoKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICRvY3RldHNUb1JlYWQgPSAkY29udGVudExlbmd0aDsKCiAgICAgICAgJHBhcnNlZE9iamVjdCA9IG5ldyBzZWxmKCk7CiAgICAgICAgd2hpbGUgKCRvY3RldHNUb1JlYWQgPiAwKSB7CiAgICAgICAgICAgICRpbml0aWFsT2Zmc2V0ID0gJG9mZnNldEluZGV4OyAvLyB1c2VkIHRvIGNhbGN1bGF0ZSBob3cgbXVjaCBiaXRzIGhhdmUgYmVlbiByZWFkCiAgICAgICAgICAgIHNlbGY6OnBhcnNlSWRlbnRpZmllcigkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdLCBJZGVudGlmaWVyOjpTRVFVRU5DRSwgJG9mZnNldEluZGV4KyspOwogICAgICAgICAgICBzZWxmOjpwYXJzZUNvbnRlbnRMZW5ndGgoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CgogICAgICAgICAgICAkb2JqZWN0SWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgICRvaWRTdHJpbmcgPSAkb2JqZWN0SWRlbnRpZmllci0+Z2V0Q29udGVudCgpOwogICAgICAgICAgICBpZiAoJG9pZFN0cmluZyA9PSBPSUQ6OlBLQ1M5X0VYVEVOU0lPTl9SRVFVRVNUKSB7CiAgICAgICAgICAgICAgICAkYXR0cmlidXRlID0gQ2VydGlmaWNhdGVFeHRlbnNpb25zOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGF0dHJpYnV0ZSA9IEFTTk9iamVjdDo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHBhcnNlZE9iamVjdC0+YWRkQXR0cmlidXRlKCRvYmplY3RJZGVudGlmaWVyLCAkYXR0cmlidXRlKTsKICAgICAgICAgICAgJG9jdGV0c1RvUmVhZCAtPSAoJG9mZnNldEluZGV4IC0gJGluaXRpYWxPZmZzZXQpOwogICAgICAgIH0KCiAgICAgICAgJHBhcnNlZE9iamVjdC0+c2V0Q29udGVudExlbmd0aCgkY29udGVudExlbmd0aCk7CgogICAgICAgIHJldHVybiAkcGFyc2VkT2JqZWN0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/CSR/CSR.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOVxDU1I7Cgp1c2UgRkdcQVNOMVxPSUQ7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxJbnRlZ2VyOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcQml0U3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcU2VxdWVuY2U7CnVzZSBGR1xYNTA5XENlcnRpZmljYXRlU3ViamVjdDsKdXNlIEZHXFg1MDlcQWxnb3JpdGhtSWRlbnRpZmllcjsKdXNlIEZHXFg1MDlcUHVibGljS2V5OwoKY2xhc3MgQ1NSIGV4dGVuZHMgU2VxdWVuY2UKewogICAgY29uc3QgQ1NSX1ZFUlNJT05fTlIgPSAwOwoKICAgIHByb3RlY3RlZCAkc3ViamVjdDsKICAgIHByb3RlY3RlZCAkcHVibGljS2V5OwogICAgcHJvdGVjdGVkICRzaWduYXR1cmU7CiAgICBwcm90ZWN0ZWQgJHNpZ25hdHVyZUFsZ29yaXRobTsKCiAgICBwcm90ZWN0ZWQgJHN0YXJ0U2VxdWVuY2U7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb21tb25OYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICRlbWFpbAogICAgICogQHBhcmFtIHN0cmluZyAkb3JnYW5pemF0aW9uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb2NhbGl0eQogICAgICogQHBhcmFtIHN0cmluZyAkc3RhdGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvdW50cnkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9yZ2FuaXphdGlvbmFsVW5pdAogICAgICogQHBhcmFtIHN0cmluZyAkcHVibGljS2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRzaWduYXR1cmUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNpZ25hdHVyZUFsZ29yaXRobQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGNvbW1vbk5hbWUsICRlbWFpbCwgJG9yZ2FuaXphdGlvbiwgJGxvY2FsaXR5LCAkc3RhdGUsICRjb3VudHJ5LCAkb3JnYW5pemF0aW9uYWxVbml0LCAkcHVibGljS2V5LCAkc2lnbmF0dXJlID0gbnVsbCwgJHNpZ25hdHVyZUFsZ29yaXRobSA9IE9JRDo6U0hBMV9XSVRIX1JTQV9TSUdOQVRVUkUpCiAgICB7CiAgICAgICAgJHRoaXMtPnN1YmplY3QgPSBuZXcgQ2VydGlmaWNhdGVTdWJqZWN0KAogICAgICAgICAgICAkY29tbW9uTmFtZSwKICAgICAgICAgICAgJGVtYWlsLAogICAgICAgICAgICAkb3JnYW5pemF0aW9uLAogICAgICAgICAgICAkbG9jYWxpdHksCiAgICAgICAgICAgICRzdGF0ZSwKICAgICAgICAgICAgJGNvdW50cnksCiAgICAgICAgICAgICRvcmdhbml6YXRpb25hbFVuaXQKICAgICAgICApOwogICAgICAgICR0aGlzLT5wdWJsaWNLZXkgPSAkcHVibGljS2V5OwogICAgICAgICR0aGlzLT5zaWduYXR1cmUgPSAkc2lnbmF0dXJlOwogICAgICAgICR0aGlzLT5zaWduYXR1cmVBbGdvcml0aG0gPSAkc2lnbmF0dXJlQWxnb3JpdGhtOwoKICAgICAgICBpZiAoaXNzZXQoJHNpZ25hdHVyZSkpIHsKICAgICAgICAgICAgJHRoaXMtPmNyZWF0ZUNTUlNlcXVlbmNlKCk7CiAgICAgICAgfQogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjcmVhdGVDU1JTZXF1ZW5jZSgpCiAgICB7CiAgICAgICAgJHZlcnNpb25OciAgICAgICAgICAgID0gbmV3IEludGVnZXIoc2VsZjo6Q1NSX1ZFUlNJT05fTlIpOwogICAgICAgICRwdWJsaWNLZXkgICAgICAgICAgICA9IG5ldyBQdWJsaWNLZXkoJHRoaXMtPnB1YmxpY0tleSk7CiAgICAgICAgJHNpZ25hdHVyZSAgICAgICAgICAgID0gbmV3IEJpdFN0cmluZygkdGhpcy0+c2lnbmF0dXJlKTsKICAgICAgICAkc2lnbmF0dXJlQWxnb3JpdGhtICAgID0gbmV3IEFsZ29yaXRobUlkZW50aWZpZXIoJHRoaXMtPnNpZ25hdHVyZUFsZ29yaXRobSk7CgogICAgICAgICRjZXJ0UmVxdWVzdEluZm8gID0gbmV3IFNlcXVlbmNlKCR2ZXJzaW9uTnIsICR0aGlzLT5zdWJqZWN0LCAkcHVibGljS2V5KTsKCiAgICAgICAgLy8gQ2xlYXIgdGhlIHVuZGVybHlpbmcgQ29uc3RydWN0CiAgICAgICAgJHRoaXMtPnJld2luZCgpOwogICAgICAgICR0aGlzLT5jaGlsZHJlbiA9IFtdOwogICAgICAgICR0aGlzLT5hZGRDaGlsZCgkY2VydFJlcXVlc3RJbmZvKTsKICAgICAgICAkdGhpcy0+YWRkQ2hpbGQoJHNpZ25hdHVyZUFsZ29yaXRobSk7CiAgICAgICAgJHRoaXMtPmFkZENoaWxkKCRzaWduYXR1cmUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaWduYXR1cmVTdWJqZWN0KCkKICAgIHsKICAgICAgICAkdmVyc2lvbk5yICAgICAgICAgICAgPSBuZXcgSW50ZWdlcihzZWxmOjpDU1JfVkVSU0lPTl9OUik7CiAgICAgICAgJHB1YmxpY0tleSAgICAgICAgICAgID0gbmV3IFB1YmxpY0tleSgkdGhpcy0+cHVibGljS2V5KTsKCiAgICAgICAgJGNlcnRSZXF1ZXN0SW5mbyAgPSBuZXcgU2VxdWVuY2UoJHZlcnNpb25OciwgJHRoaXMtPnN1YmplY3QsICRwdWJsaWNLZXkpOwogICAgICAgIHJldHVybiAkY2VydFJlcXVlc3RJbmZvLT5nZXRCaW5hcnkoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0U2lnbmF0dXJlKCRzaWduYXR1cmUsICRzaWduYXR1cmVBbGdvcml0aG0gPSBPSUQ6OlNIQTFfV0lUSF9SU0FfU0lHTkFUVVJFKQogICAgewogICAgICAgICR0aGlzLT5zaWduYXR1cmUgPSAkc2lnbmF0dXJlOwogICAgICAgICR0aGlzLT5zaWduYXR1cmVBbGdvcml0aG0gPSAkc2lnbmF0dXJlQWxnb3JpdGhtOwoKICAgICAgICAkdGhpcy0+Y3JlYXRlQ1NSU2VxdWVuY2UoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCiAgICB7CiAgICAgICAgJHRtcCA9IGJhc2U2NF9lbmNvZGUoJHRoaXMtPmdldEJpbmFyeSgpKTsKCiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgc3RybGVuKCR0bXApOyAkaSsrKSB7CiAgICAgICAgICAgIGlmICgoJGkgKyAyKSAlIDY1ID09IDApIHsKICAgICAgICAgICAgICAgICR0bXAgPSBzdWJzdHIoJHRtcCwgMCwgJGkgKyAxKS4iXG4iLnN1YnN0cigkdG1wLCAkaSArIDEpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkcmVzdWx0ID0gJy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tJy5QSFBfRU9MOwogICAgICAgICRyZXN1bHQgLj0gJHRtcC5QSFBfRU9MOwogICAgICAgICRyZXN1bHQgLj0gJy0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLSc7CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWZXJzaW9uKCkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6Q1NSX1ZFUlNJT05fTlI7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE9yZ2FuaXphdGlvbk5hbWUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c3ViamVjdC0+Z2V0T3JnYW5pemF0aW9uKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldExvY2FsTmFtZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdWJqZWN0LT5nZXRMb2NhbGl0eSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdGF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdWJqZWN0LT5nZXRTdGF0ZSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb3VudHJ5KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN1YmplY3QtPmdldENvdW50cnkoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0T3JnYW5pemF0aW9uYWxVbml0KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN1YmplY3QtPmdldE9yZ2FuaXphdGlvbmFsVW5pdCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQdWJsaWNLZXkoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cHVibGljS2V5OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaWduYXR1cmUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c2lnbmF0dXJlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaWduYXR1cmVBbGdvcml0aG0oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c2lnbmF0dXJlQWxnb3JpdGhtOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/PrivateKey.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOTsKCnVzZSBGR1xBU04xXE9JRDsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXE51bGxPYmplY3Q7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxTZXF1ZW5jZTsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXEJpdFN0cmluZzsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXE9iamVjdElkZW50aWZpZXI7CgpjbGFzcyBQcml2YXRlS2V5IGV4dGVuZHMgU2VxdWVuY2UKewogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRoZXhLZXkKICAgICAqIEBwYXJhbSBcRkdcQVNOMVxBU05PYmplY3R8c3RyaW5nICRhbGdvcml0aG1JZGVudGlmaWVyU3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkaGV4S2V5LCAkYWxnb3JpdGhtSWRlbnRpZmllclN0cmluZyA9IE9JRDo6UlNBX0VOQ1JZUFRJT04pCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgKICAgICAgICAgICAgbmV3IFNlcXVlbmNlKAogICAgICAgICAgICAgICAgbmV3IE9iamVjdElkZW50aWZpZXIoJGFsZ29yaXRobUlkZW50aWZpZXJTdHJpbmcpLAogICAgICAgICAgICAgICAgbmV3IE51bGxPYmplY3QoKQogICAgICAgICAgICApLAogICAgICAgICAgICBuZXcgQml0U3RyaW5nKCRoZXhLZXkpCiAgICAgICAgKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/PublicKey.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOTsKCnVzZSBGR1xBU04xXE9JRDsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXE51bGxPYmplY3Q7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxTZXF1ZW5jZTsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXEJpdFN0cmluZzsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXE9iamVjdElkZW50aWZpZXI7CgpjbGFzcyBQdWJsaWNLZXkgZXh0ZW5kcyBTZXF1ZW5jZQp7CiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGhleEtleQogICAgICogQHBhcmFtIFxGR1xBU04xXEFTTk9iamVjdHxzdHJpbmcgJGFsZ29yaXRobUlkZW50aWZpZXJTdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRoZXhLZXksICRhbGdvcml0aG1JZGVudGlmaWVyU3RyaW5nID0gT0lEOjpSU0FfRU5DUllQVElPTikKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KAogICAgICAgICAgICBuZXcgU2VxdWVuY2UoCiAgICAgICAgICAgICAgICBuZXcgT2JqZWN0SWRlbnRpZmllcigkYWxnb3JpdGhtSWRlbnRpZmllclN0cmluZyksCiAgICAgICAgICAgICAgICBuZXcgTnVsbE9iamVjdCgpCiAgICAgICAgICAgICksCiAgICAgICAgICAgIG5ldyBCaXRTdHJpbmcoJGhleEtleSkKICAgICAgICApOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/SAN/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/SAN/DNSName.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOVxTQU47Cgp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcR2VuZXJhbFN0cmluZzsKCmNsYXNzIEROU05hbWUgZXh0ZW5kcyBHZW5lcmFsU3RyaW5nCnsKICAgIGNvbnN0IElERU5USUZJRVIgPSAweDgyOyAvLyBub3Qgc3VyZSB5ZXQgd2h5IHRoaXMgaXMgdGhlIGlkZW50aWZpZXIgdXNlZCBpbiBTQU4gZXh0ZW5zaW9ucwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkZG5zTmFtZVN0cmluZykKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRkbnNOYW1lU3RyaW5nKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OklERU5USUZJRVI7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/SAN/IPAddress.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOVxTQU47Cgp1c2UgRkdcQVNOMVxBU05PYmplY3Q7CnVzZSBGR1xBU04xXFBhcnNhYmxlOwp1c2UgRkdcQVNOMVxFeGNlcHRpb25cUGFyc2VyRXhjZXB0aW9uOwoKY2xhc3MgSVBBZGRyZXNzIGV4dGVuZHMgQVNOT2JqZWN0IGltcGxlbWVudHMgUGFyc2FibGUKewogICAgY29uc3QgSURFTlRJRklFUiA9IDB4ODc7IC8vIG5vdCBzdXJlIHlldCB3aHkgdGhpcyBpcyB0aGUgaWRlbnRpZmllciB1c2VkIGluIFNBTiBleHRlbnNpb25zCgogICAgLyoqIEB2YXIgc3RyaW5nICovCiAgICBwcml2YXRlICR2YWx1ZTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGlwQWRkcmVzc1N0cmluZykKICAgIHsKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkaXBBZGRyZXNzU3RyaW5nOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6SURFTlRJRklFUjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuIDQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEVuY29kZWRWYWx1ZSgpCiAgICB7CiAgICAgICAgJGlwUGFydHMgPSBleHBsb2RlKCcuJywgJHRoaXMtPnZhbHVlKTsKICAgICAgICAkYmluYXJ5ICA9IGNocigkaXBQYXJ0c1swXSk7CiAgICAgICAgJGJpbmFyeSAuPSBjaHIoJGlwUGFydHNbMV0pOwogICAgICAgICRiaW5hcnkgLj0gY2hyKCRpcFBhcnRzWzJdKTsKICAgICAgICAkYmluYXJ5IC49IGNocigkaXBQYXJ0c1szXSk7CgogICAgICAgIHJldHVybiAkYmluYXJ5OwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUJpbmFyeSgmJGJpbmFyeURhdGEsICYkb2Zmc2V0SW5kZXggPSAwKQogICAgewogICAgICAgIHNlbGY6OnBhcnNlSWRlbnRpZmllcigkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdLCBzZWxmOjpJREVOVElGSUVSLCAkb2Zmc2V0SW5kZXgrKyk7CiAgICAgICAgJGNvbnRlbnRMZW5ndGggPSBzZWxmOjpwYXJzZUNvbnRlbnRMZW5ndGgoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgaWYgKCRjb250ZW50TGVuZ3RoICE9IDQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckV4Y2VwdGlvbigiQSBGR1xcWDUwOVxTQU5cSVBBZGRyZXNzIHNob3VsZCBoYXZlIGEgY29udGVudCBsZW5ndGggb2YgNC4gRXh0cmFjdGVkIGxlbmd0aCB3YXMgeyRjb250ZW50TGVuZ3RofSIsICRvZmZzZXRJbmRleCk7CiAgICAgICAgfQoKICAgICAgICAkaXBBZGRyZXNzU3RyaW5nID0gb3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsrXSkuJy4nOwogICAgICAgICRpcEFkZHJlc3NTdHJpbmcgLj0gb3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsrXSkuJy4nOwogICAgICAgICRpcEFkZHJlc3NTdHJpbmcgLj0gb3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsrXSkuJy4nOwogICAgICAgICRpcEFkZHJlc3NTdHJpbmcgLj0gb3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsrXSk7CgogICAgICAgICRwYXJzZWRPYmplY3QgPSBuZXcgc2VsZigkaXBBZGRyZXNzU3RyaW5nKTsKICAgICAgICAkcGFyc2VkT2JqZWN0LT5nZXRPYmplY3RMZW5ndGgoKTsKCiAgICAgICAgcmV0dXJuICRwYXJzZWRPYmplY3Q7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/SAN/SubjectAlternativeNames.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOVxTQU47Cgp1c2UgRkdcQVNOMVxFeGNlcHRpb25cUGFyc2VyRXhjZXB0aW9uOwp1c2UgRkdcQVNOMVxBU05PYmplY3Q7CnVzZSBGR1xBU04xXE9JRDsKdXNlIEZHXEFTTjFcUGFyc2FibGU7CnVzZSBGR1xBU04xXElkZW50aWZpZXI7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxTZXF1ZW5jZTsKCi8qKgogKiBTZWUgc2VjdGlvbiA4LjMuMi4xIG9mIElUVS1UIFguNTA5LgogKi8KY2xhc3MgU3ViamVjdEFsdGVybmF0aXZlTmFtZXMgZXh0ZW5kcyBBU05PYmplY3QgaW1wbGVtZW50cyBQYXJzYWJsZQp7CiAgICBwcml2YXRlICRhbHRlcm5hdGl2ZU5hbWVzU2VxdWVuY2U7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgIHsKICAgICAgICAkdGhpcy0+YWx0ZXJuYXRpdmVOYW1lc1NlcXVlbmNlID0gbmV3IFNlcXVlbmNlKCk7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNhbGN1bGF0ZUNvbnRlbnRMZW5ndGgoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YWx0ZXJuYXRpdmVOYW1lc1NlcXVlbmNlLT5nZXRPYmplY3RMZW5ndGgoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6Ok9DVEVUU1RSSU5HOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGREb21haW5OYW1lKEROU05hbWUgJGRvbWFpbk5hbWUpCiAgICB7CiAgICAgICAgJHRoaXMtPmFsdGVybmF0aXZlTmFtZXNTZXF1ZW5jZS0+YWRkQ2hpbGQoJGRvbWFpbk5hbWUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRJUChJUEFkZHJlc3MgJGlwKQogICAgewogICAgICAgICR0aGlzLT5hbHRlcm5hdGl2ZU5hbWVzU2VxdWVuY2UtPmFkZENoaWxkKCRpcCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YWx0ZXJuYXRpdmVOYW1lc1NlcXVlbmNlLT5nZXRDb250ZW50KCk7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEVuY29kZWRWYWx1ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hbHRlcm5hdGl2ZU5hbWVzU2VxdWVuY2UtPmdldEJpbmFyeSgpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUJpbmFyeSgmJGJpbmFyeURhdGEsICYkb2Zmc2V0SW5kZXggPSAwKQogICAgewogICAgICAgIHNlbGY6OnBhcnNlSWRlbnRpZmllcigkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdLCBJZGVudGlmaWVyOjpPQ1RFVFNUUklORywgJG9mZnNldEluZGV4KyspOwogICAgICAgICRjb250ZW50TGVuZ3RoID0gc2VsZjo6cGFyc2VDb250ZW50TGVuZ3RoKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwoKICAgICAgICBpZiAoJGNvbnRlbnRMZW5ndGggPCAyKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oJ0NhbiBub3QgcGFyc2UgU3ViamVjdCBBbHRlcm5hdGl2ZSBOYW1lczogVGhlIFNlcXVlbmNlIHdpdGhpbiB0aGUgb2N0ZXQgc3RyaW5nIGFmdGVyIHRoZSBPYmplY3QgaWRlbnRpZmllciAnLk9JRDo6Q0VSVF9FWFRfU1VCSkVDVF9BTFRfTkFNRS4iIGlzIHRvbyBzaG9ydCAoeyRjb250ZW50TGVuZ3RofSBvY3RldHMpIiwgJG9mZnNldEluZGV4KTsKICAgICAgICB9CgogICAgICAgICRvZmZzZXRPZlNlcXVlbmNlID0gJG9mZnNldEluZGV4OwogICAgICAgICRzZXF1ZW5jZSA9IFNlcXVlbmNlOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICRvZmZzZXRPZlNlcXVlbmNlICs9ICRzZXF1ZW5jZS0+Z2V0TnVtYmVyT2ZMZW5ndGhPY3RldHMoKSArIDE7CgogICAgICAgIGlmICgkc2VxdWVuY2UtPmdldE9iamVjdExlbmd0aCgpICE9ICRjb250ZW50TGVuZ3RoKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oJ0NhbiBub3QgcGFyc2UgU3ViamVjdCBBbHRlcm5hdGl2ZSBOYW1lczogVGhlIFNlcXVlbmNlIGxlbmd0aCBkb2VzIG5vdCBtYXRjaCB0aGUgbGVuZ3RoIG9mIHRoZSBzdXJyb3VuZGluZyBvY3RldCBzdHJpbmcnLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgIH0KCiAgICAgICAgJHBhcnNlZE9iamVjdCA9IG5ldyBzZWxmKCk7CiAgICAgICAgLyoqIEB2YXIgXEZHXEFTTjFcQVNOT2JqZWN0ICRvYmplY3QgKi8KICAgICAgICBmb3JlYWNoICgkc2VxdWVuY2UgYXMgJG9iamVjdCkgewogICAgICAgICAgICBpZiAoJG9iamVjdC0+Z2V0VHlwZSgpID09IEROU05hbWU6OklERU5USUZJRVIpIHsKICAgICAgICAgICAgICAgICRkb21haW5OYW1lID0gRE5TTmFtZTo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldE9mU2VxdWVuY2UpOwogICAgICAgICAgICAgICAgJHBhcnNlZE9iamVjdC0+YWRkRG9tYWluTmFtZSgkZG9tYWluTmFtZSk7CiAgICAgICAgICAgIH0gZWxzZWlmICgkb2JqZWN0LT5nZXRUeXBlKCkgPT0gSVBBZGRyZXNzOjpJREVOVElGSUVSKSB7CiAgICAgICAgICAgICAgICAkaXAgPSBJUEFkZHJlc3M6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRPZlNlcXVlbmNlKTsKICAgICAgICAgICAgICAgICRwYXJzZWRPYmplY3QtPmFkZElQKCRpcCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VyRXhjZXB0aW9uKCdDb3VsZCBub3QgcGFyc2UgU3ViamVjdCBBbHRlcm5hdGl2ZSBOYW1lOiBPbmx5IEROU05hbWUgYW5kIElQIFNBTnMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQnLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkcGFyc2VkT2JqZWN0LT5nZXRCaW5hcnkoKTsgLy8gRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgY29udGVudCBvY3RldHMgYW5kIG9iamVjdCBzaXplcyBvbmNlIChqdXN0IHRvIGxldCB0aGUgZXF1YWxpdHkgdW5pdCB0ZXN0cyBwYXNzIDovICkKICAgICAgICByZXR1cm4gJHBhcnNlZE9iamVjdDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDEyLTIwMTUgRnJpZWRyaWNoIEdyb8OfZSA8ZnJpZWRyaWNoLmdyb3NzZUBnbWFpbC5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[UEhQQVNOMQo9PT09PT09CgpbIVtCdWlsZCBTdGF0dXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9mZ3Jvc3NlL1BIUEFTTjEvYWN0aW9ucy93b3JrZmxvd3MvcGhwdW5pdC55bWwvYmFkZ2Uuc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL2Zncm9zc2UvUEhQQVNOMS9hY3Rpb25zL3dvcmtmbG93cy9waHB1bml0LnltbCkKWyFbUEhQIDcgcmVhZHldKGh0dHA6Ly9waHA3cmVhZHkudGltZXNwbGludGVyLmNoL2Zncm9zc2UvUEhQQVNOMS9iYWRnZS5zdmcpXShodHRwczovL3RyYXZpcy1jaS5vcmcvZmdyb3NzZS9QSFBBU04xKQpbIVtDb3ZlcmFnZSBTdGF0dXNdKGh0dHBzOi8vY292ZXJhbGxzLmlvL3JlcG9zL2Zncm9zc2UvUEhQQVNOMS9iYWRnZS5zdmc/YnJhbmNoPW1hc3RlciZzZXJ2aWNlPWdpdGh1YildKGh0dHBzOi8vY292ZXJhbGxzLmlvL2dpdGh1Yi9mZ3Jvc3NlL1BIUEFTTjE/YnJhbmNoPW1hc3RlcikKClshW0xhdGVzdCBTdGFibGUgVmVyc2lvbl0oaHR0cHM6Ly9wb3Nlci5wdWd4Lm9yZy9mZ3Jvc3NlL3BocGFzbjEvdi9zdGFibGUucG5nKV0oaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzL2Zncm9zc2UvcGhwYXNuMSkKWyFbVG90YWwgRG93bmxvYWRzXShodHRwczovL3Bvc2VyLnB1Z3gub3JnL2Zncm9zc2UvcGhwYXNuMS9kb3dubG9hZHMucG5nKV0oaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzL2Zncm9zc2UvcGhwYXNuMSkKWyFbTGF0ZXN0IFVuc3RhYmxlIFZlcnNpb25dKGh0dHBzOi8vcG9zZXIucHVneC5vcmcvZmdyb3NzZS9waHBhc24xL3YvdW5zdGFibGUucG5nKV0oaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzL2Zncm9zc2UvcGhwYXNuMSkKWyFbTGljZW5zZV0oaHR0cHM6Ly9wb3Nlci5wdWd4Lm9yZy9mZ3Jvc3NlL3BocGFzbjEvbGljZW5zZS5wbmcpXShodHRwczovL3BhY2thZ2lzdC5vcmcvcGFja2FnZXMvZmdyb3NzZS9waHBhc24xKQoKLS0tCgo8aDI+PHNwYW4gc3R5bGU9ImNvbG9yOnJlZCI+Tm90aWNlOiBUaGlzIGxpYnJhcnkgaXMgbm8gbG9uZ2VyIGFjdGl2ZWx5IG1haW50YWluZWQhPC9zcGFuPjwvaDI+CklmIHlvdSBhcmUgY3VycmVudGx5IHVzaW5nIFBIUEFTTjEsIHRoaXMgbWlnaHQgbm90IGJlIGFuIGltbWVkaWF0ZSBwcm9ibGVtIGZvciB5b3UsIHNpbmNlIHRoaXMgbGlicmFyeSB3YXMgYWx3YXlzIHJhdGhlciBzdGFibGUuCgpIb3dldmVyLCB5b3UgYXJlIGFkdmlzZWQgdG8gbWlncmF0ZSB0byBhbHRlcm5hdGl2ZSBwYWNrYWdlcyB0byBlbnN1cmUgdGhhdCB5b3VyIGFwcGxpY2F0aW9ucyByZW1haW4gZnVuY3Rpb25hbCBhbHNvIHdpdGggbmV3ZXIgUEhQIHZlcnNpb25zLgoKLS0tCgpBIFBIUCBGcmFtZXdvcmsgdGhhdCBhbGxvd3MgeW91IHRvIGVuY29kZSBhbmQgZGVjb2RlIGFyYml0cmFyeSBbQVNOLjFdWzNdIHN0cnVjdHVyZXMKdXNpbmcgdGhlIFtJVFUtVCBYLjY5MCBFbmNvZGluZyBSdWxlc11bNF0uClRoaXMgZW5jb2RpbmcgaXMgdmVyeSBmcmVxdWVudGx5IHVzZWQgaW4gW1guNTA5IFBLSSBlbnZpcm9ubWVudHNdWzVdIG9yIHRoZSBjb21tdW5pY2F0aW9uIGJldHdlZW4gaGV0ZXJvZ2VuZW91cyBjb21wdXRlciBzeXN0ZW1zLgoKVGhlIEFQSSBhbGxvd3MgeW91IHRvIGVuY29kZSBBU04uMSBzdHJ1Y3R1cmVzIHRvIGNyZWF0ZSBiaW5hcnkgZGF0YSBzdWNoIGFzIGNlcnRpZmljYXRlCnNpZ25pbmcgcmVxdWVzdHMgKENTUiksIFguNTA5IGNlcnRpZmljYXRlcyBvciBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIGxpc3RzIChDUkwpLgpQSFBBU04xIGNhbiBhbHNvIHJlYWQgW0JFUiBlbmNvZGVkXVs2XSBiaW5hcnkgZGF0YSBpbnRvIHNlcGFyYXRlIFBIUCBvYmplY3RzIHRoYXQgY2FuIGJlIG1hbmlwdWxhdGVkIGJ5IHRoZSB1c2VyIGFuZCByZWVuY29kZWQgYWZ0ZXJ3YXJkcy4KClRoZSAqKmNoYW5nZWxvZyoqIGNhbiBub3cgYmUgZm91bmQgYXQgW0NIQU5HRUxPRy5tZF0oQ0hBTkdFTE9HLm1kKS4KCiMjIERlcGVuZGVuY2llcwoKUEhQQVNOMSByZXF1aXJlcyBhdCBsZWFzdCBgUEhQIDcuMGAgYW5kIGVpdGhlciB0aGUgYGdtcGAgb3IgYGJjbWF0aGAgZXh0ZW5zaW9uLgpTdXBwb3J0IGZvciBvbGRlciBQSFAgdmVyc2lvbnMgKGkuZS4gUEhQIDUuNikgd2FzIGRyb3BwZWQgc3RhcnRpbmcgd2l0aCBgdjIuMGAuCklmIHlvdSBtdXN0IHVzZSBhbiBvdXRkYXRlZCBQSFAgdmVyc2lvbiBjb25zaWRlciB1c2luZyBbUEhQQVNOIHYxLjVdWzEzXS4KCkZvciB0aGUgbG9hZGluZyBvZiBvYmplY3QgaWRlbnRpZmllciBuYW1lcyBkaXJlY3RseSBmcm9tIHRoZSB3ZWIgW2N1cmxdWzddIGlzIHVzZWQuCgojIyBJbnN0YWxsYXRpb24KClRoZSBwcmVmZXJyZWQgd2F5IHRvIGluc3RhbGwgdGhpcyBsaWJyYXJ5IGlzIHRvIHJlbHkgb24gW0NvbXBvc2VyXVsyXToKCmBgYGJhc2gKJCBjb21wb3NlciByZXF1aXJlIGZncm9zc2UvcGhwYXNuMQpgYGAKCiMjIFVzYWdlCgojIyMgRW5jb2RpbmcgQVNOLjEgU3RydWN0dXJlcwoKUEhQQVNOMSBvZmZlcnMgeW91IGEgY2xhc3MgZm9yIGVhY2ggb2YgdGhlIGltcGxlbWVudGVkIEFTTi4xIHVuaXZlcnNhbCB0eXBlcy4KVGhlIGNvbnN0cnVjdG9ycyBzaG91bGQgYmUgcHJldHR5IHNlbGYgZXhwbGFuYXRvcnkgc28geW91IHNob3VsZCBoYXZlIG5vIGJpZyB0cm91YmxlIGdldHRpbmcgc3RhcnRlZC4KQWxsIGRhdGEgd2lsbCBiZSBlbmNvZGVkIHVzaW5nIFtERVIgZW5jb2RpbmddWzhdCgpgYGBwaHAKdXNlIEZHXEFTTjFcT0lEOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcSW50ZWdlcjsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXEJvb2xlYW47CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxFbnVtZXJhdGVkOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcSUE1U3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcT2JqZWN0SWRlbnRpZmllcjsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXFByaW50YWJsZVN0cmluZzsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXFNlcXVlbmNlOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcU2V0Owp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcTnVsbE9iamVjdDsKCiRpbnRlZ2VyID0gbmV3IEludGVnZXIoMTIzNDU2KTsgICAgICAgIAokYm9vbGVhbiA9IG5ldyBCb29sZWFuKHRydWUpOwokZW51bSA9IG5ldyBFbnVtZXJhdGVkKDEpOwokaWE1U3RyaW5nID0gbmV3IElBNVN0cmluZygnSGVsbG8gd29ybGQnKTsKCiRhc25OdWxsID0gbmV3IE51bGxPYmplY3QoKTsKJG9iamVjdElkZW50aWZpZXIxID0gbmV3IE9iamVjdElkZW50aWZpZXIoJzEuMi4yNTAuMS4xNi45Jyk7CiRvYmplY3RJZGVudGlmaWVyMiA9IG5ldyBPYmplY3RJZGVudGlmaWVyKE9JRDo6UlNBX0VOQ1JZUFRJT04pOwokcHJpbnRhYmxlU3RyaW5nID0gbmV3IFByaW50YWJsZVN0cmluZygnRm9vIGJhcicpOwoKJHNlcXVlbmNlID0gbmV3IFNlcXVlbmNlKCRpbnRlZ2VyLCAkYm9vbGVhbiwgJGVudW0sICRpYTVTdHJpbmcpOwokc2V0ID0gbmV3IFNldCgkc2VxdWVuY2UsICRhc25OdWxsLCAkb2JqZWN0SWRlbnRpZmllcjEsICRvYmplY3RJZGVudGlmaWVyMiwgJHByaW50YWJsZVN0cmluZyk7CgokbXlCaW5hcnkgID0gJHNlcXVlbmNlLT5nZXRCaW5hcnkoKTsKJG15QmluYXJ5IC49ICRzZXQtPmdldEJpbmFyeSgpOwoKZWNobyBiYXNlNjRfZW5jb2RlKCRteUJpbmFyeSk7CmBgYAoKCiMjIyBEZWNvZGluZyBiaW5hcnkgZGF0YQoKRGVjb2RpbmcgQkVSIGVuY29kZWQgYmluYXJ5IGRhdGEgaXMganVzdCBhcyBlYXN5IGFzIGVuY29kaW5nIGl0OgoKYGBgcGhwCnVzZSBGR1xBU04xXEFTTk9iamVjdDsKCiRiYXNlNjRTdHJpbmcgPSAuLi4KJGJpbmFyeURhdGEgPSBiYXNlNjRfZGVjb2RlKCRiYXNlNjRTdHJpbmcpOyAgICAgICAgCiRhc25PYmplY3QgPSBBU05PYmplY3Q6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEpOwoKCi8vIGRvIHN0dWZmCmBgYAoKSWYgeW91IGFscmVhZHkga25vdyBleGFjdGx5IGhvdyB5b3VyIGV4cGVjdGVkIGRhdGEgc2hvdWxkIGxvb2sgbGlrZSB5b3UgY2FuIHVzZSB0aGUgYEZHXEFTTjFcVGVtcGxhdGVQYXJzZXJgOgoKYGBgcGhwCnVzZSBGR1xBU04xXFRlbXBsYXRlUGFyc2VyOwoKLy8gZmlyc3QgZGVmaW5lIHlvdXIgdGVtcGxhdGUKJHRlbXBsYXRlID0gWwogICAgSWRlbnRpZmllcjo6U0VRVUVOQ0UgPT4gWwogICAgICAgIElkZW50aWZpZXI6OlNFVCA9PiBbCiAgICAgICAgICAgIElkZW50aWZpZXI6Ok9CSkVDVF9JREVOVElGSUVSLAogICAgICAgICAgICBJZGVudGlmaWVyOjpTRVFVRU5DRSA9PiBbCiAgICAgICAgICAgICAgICBJZGVudGlmaWVyOjpJTlRFR0VSLAogICAgICAgICAgICAgICAgSWRlbnRpZmllcjo6QklUU1RSSU5HLAogICAgICAgICAgICBdCiAgICAgICAgXQogICAgXQpdOwoKLy8gaWYgeW91ciBiaW5hcnkgZGF0YSBpcyBub3QgbWF0Y2hpbmcgdGhlIHRlbXBsYXRlIHlvdSBwcm92aWRlZCB0aGlzIHdpbGwgdGhyb3cgYW4gYFxFeGNlcHRpb25gOgokcGFyc2VyID0gbmV3IFRlbXBsYXRlUGFyc2VyKCk7CiRvYmplY3QgPSAkcGFyc2VyLT5wYXJzZUJpbmFyeSgkZGF0YSwgJHRlbXBsYXRlKTsKCi8vIHRoZXJlIGlzIGFsc28gYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBpZiB5b3UgcGFyc2UgYmluYXJ5IGRhdGEgZnJvbSBiYXNlNjQ6CiRvYmplY3QgPSAkcGFyc2VyLT5wYXJzZUJhc2U2NCgkZGF0YSwgJHRlbXBsYXRlKTsKYGBgCgpZb3UgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIG1ha2Ugc3VyZSB5b3VyIGRhdGEgaGFzIGV4YWN0bHkgdGhlIGZvcm1hdCB5b3UgYXJlIGV4cGVjdGluZy4KCiMjIyBOYXZpZ2F0aW5nIGRlY29kZWQgZGF0YQoKQWxsIGNvbnN0cnVjdGVkIGNsYXNzZXMgKGkuZS4gYFNlcXVlbmNlYCBhbmQgYFNldGApIGNhbiBiZSBuYXZpZ2F0ZWQgYnkgYXJyYXkgYWNjZXNzIG9yIHVzaW5nIGFuIGl0ZXJhdG9yLgpZb3UgY2FuIGZpbmQgZXhhbXBsZXMKW2hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9mZ3Jvc3NlL1BIUEFTTjEvYmxvYi9mNjQ0MmNhZGRhOWQzNmYzNTE4YzczN2UzMmYyODMwMGE1ODhiNzc3L3Rlc3RzL0FTTjEvVW5pdmVyc2FsL1NlcXVlbmNlVGVzdC5waHAjTDE0OC0xNDgpLApbaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL2Zncm9zc2UvUEhQQVNOMS9ibG9iL2Y2NDQyY2FkZGE5ZDM2ZjM1MThjNzM3ZTMyZjI4MzAwYTU4OGI3NzcvdGVzdHMvQVNOMS9Vbml2ZXJzYWwvU2VxdWVuY2VUZXN0LnBocCNMMTIxKSBhbmQgCltoZXJlXShodHRwczovL2dpdGh1Yi5jb20vZmdyb3NzZS9QSFBBU04xL2Jsb2IvZjY0NDJjYWRkYTlkMzZmMzUxOGM3MzdlMzJmMjgzMDBhNTg4Yjc3Ny90ZXN0cy9BU04xL1RlbXBsYXRlUGFyc2VyVGVzdC5waHAjTDQ1KS4KCgojIyMgR2l2ZSBtZSBtb3JlIGV4YW1wbGVzIQoKVG8gc2VlIHNvbWUgZXhhbXBsZSB1c2FnZSBvZiB0aGUgQVBJIGNsYXNzZXMgb3Igc29tZSBnZW5lcmF0ZWQgb3V0cHV0IGNoZWNrIG91dCB0aGUgW2V4YW1wbGVzXShodHRwczovL2dpdGh1Yi5jb20vZmdyb3NzZS9QSFBBU04xL3RyZWUvbWFzdGVyL2V4YW1wbGVzKS4KCgojIyMgSG93IGRvIEkgY29udHJpYnV0ZT8KClRoaXMgcHJvamVjdCBpcyBubyBsb25nZXIgbWFpbnRhaW5lZCBhbmQgdGh1cyBkb2VzIG5vdCBhY2NlcHQgYW55IG5ldyBjb250cmlidXRpb25zLgoKIyMjIFRoYW5rcwoKVG8gW2FsbCBjb250cmlidXRvcnNdWzFdIHNvIGZhciEKCiMjIExpY2Vuc2UKClRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgW01JVCBMaWNlbnNlXShMSUNFTlNFKS4KClsxXTogaHR0cHM6Ly9naXRodWIuY29tL2Zncm9zc2UvUEhQQVNOMS9ncmFwaHMvY29udHJpYnV0b3JzClsyXTogaHR0cHM6Ly9nZXRjb21wb3Nlci5vcmcvClszXTogaHR0cDovL3d3dy5pdHUuaW50L0lUVS1UL2FzbjEvCls0XTogaHR0cDovL3d3dy5pdHUuaW50L0lUVS1UL3JlY29tbWVuZGF0aW9ucy9yZWMuYXNweD9yZWM9eC42OTAKWzVdOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1guNTA5Cls2XTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9YLjY5MCNCRVJfZW5jb2RpbmcKWzddOiBodHRwOi8vcGhwLm5ldC9tYW51YWwvZW4vYm9vay5jdXJsLnBocApbOF06IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvWC42OTAjREVSX2VuY29kaW5nCls5XTogaHR0cHM6Ly9zdHlsZWNpLmlvClsxMF06IGh0dHBzOi8vY292ZXJhbGxzLmlvL2dpdGh1Yi9mZ3Jvc3NlL1BIUEFTTjEKWzExXTogaHR0cHM6Ly9naXRodWIuY29tL2Zncm9zc2UvUEhQQVNOMS9ibG9iL21hc3Rlci90ZXN0cy9BU04xL1RlbXBsYXRlUGFyc2VyVGVzdC5waHAjTDE2ClsxMl06IGh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZC9mb3J1bS9waHBhc24xClsxM106IGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9mZ3Jvc3NlL3BocGFzbjEjMS41LjIK]]></data>
	</file>
	<file>
	  <filename>/vendor/firebase/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/firebase/php-jwt/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/firebase/php-jwt/CHANGELOG.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBDaGFuZ2Vsb2cKCiMjIFs2LjEwLjBdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2NvbXBhcmUvdjYuOS4wLi4udjYuMTAuMCkgKDIwMjMtMTEtMjgpCgoKIyMjIEZlYXR1cmVzCgoqIGFsbG93IHR5cCBoZWFkZXIgb3ZlcnJpZGUgKFsjNTQ2XShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9pc3N1ZXMvNTQ2KSkgKFs3OWNiMzBiXShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9jb21taXQvNzljYjMwYjcyOWEyMjkzMWIyZmJkNmI1M2YyMDYyOWE4MzAzMWJhOSkpCgojIyBbNi45LjBdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2NvbXBhcmUvdjYuOC4xLi4udjYuOS4wKSAoMjAyMy0xMC0wNCkKCgojIyMgRmVhdHVyZXMKCiogYWRkIHBheWxvYWQgdG8gand0IGV4Y2VwdGlvbiAoWyM1MjFdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2lzc3Vlcy81MjEpKSAoWzE3NWVkZjldKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2NvbW1pdC8xNzVlZGY5NThiYjYxOTIyZWMxMzViMjMzM2FjZjU2MjJmMjIzOGEyKSkKCiMjIFs2LjguMV0oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvY29tcGFyZS92Ni44LjAuLi52Ni44LjEpICgyMDIzLTA3LTE0KQoKCiMjIyBCdWcgRml4ZXMKCiogYWNjZXB0IGZsb2F0IGNsYWltcyBidXQgcm91bmQgZG93biB0byBpZ25vcmUgdGhlbSAoWyM0OTJdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2lzc3Vlcy80OTIpKSAoWzM5MzY4NDJdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2NvbW1pdC8zOTM2ODQyM2JlZWFhY2IzMDAyYWZhN2RjYjc1YmFlYmYyMDRmZTdlKSkKKiBkaWZmZXJlbnQgQmVmb3JlVmFsaWRFeGNlcHRpb24gbWVzc2FnZXMgZm9yIG5iZiBhbmQgaWF0IChbIzUyNl0oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvaXNzdWVzLzUyNikpIChbMGE1M2NmMl0oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvY29tbWl0LzBhNTNjZjI5ODZlNDVjMmJjYmYxYTI2OWYzMTNlYmY1NmExNTRlZTQpKQoKIyMgWzYuOC4wXShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9jb21wYXJlL3Y2LjcuMC4uLnY2LjguMCkgKDIwMjMtMDYtMTQpCgoKIyMjIEZlYXR1cmVzCgoqIGFkZCBzdXBwb3J0IGZvciBQLTM4NCBjdXJ2ZSAoWyM1MTVdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2lzc3Vlcy81MTUpKSAoWzVkZTQzMjNdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2NvbW1pdC81ZGU0MzIzZjRiYWY0ZDcwYmNhODY2M2JkODc2ODJhNjljNjU2YzNkKSkKCgojIyMgQnVnIEZpeGVzCgoqIGhhbmRsZSBpbnZhbGlkIGh0dHAgcmVzcG9uc2VzIChbIzUwOF0oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvaXNzdWVzLzUwOCkpIChbOTFjMzljN10oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvY29tbWl0LzkxYzM5YzcyYjIyZmMzZTExOTFlNTc0MDg5NTUyYzFmMjA0MWM3MTgpKQoKIyMgWzYuNy4wXShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9jb21wYXJlL3Y2LjYuMC4uLnY2LjcuMCkgKDIwMjMtMDYtMTQpCgoKIyMjIEZlYXR1cmVzCgoqIGFkZCBlZDI1NTE5IHN1cHBvcnQgdG8gSldLIChwdWJsaWMga2V5cykgKFsjNDUyXShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9pc3N1ZXMvNDUyKSkgKFtlNTM5NzlhXShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9jb21taXQvZTUzOTc5YWJhZTkyN2RlOTE2YTc1YjlkMjM5Y2ZkYThjZTMyYmUyYSkpCgojIyBbNi42LjBdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2NvbXBhcmUvdjYuNS4wLi4udjYuNi4wKSAoMjAyMy0wNi0xMykKCgojIyMgRmVhdHVyZXMKCiogYWxsb3cgZ2V0IGhlYWRlcnMgd2hlbiBkZWNvZGluZyB0b2tlbiAoWyM0NDJdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2lzc3Vlcy80NDIpKSAoW2ZiODVmNDddKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2NvbW1pdC9mYjg1ZjQ3Y2ZhZWZmZGQ5NGZhZjhkZWZkZjA3MTY0YWJjZGFkNmMzKSkKCgojIyMgQnVnIEZpeGVzCgoqIG9ubHkgY2hlY2sgaWF0IGlmIG5iZiBpcyBub3QgdXNlZCAoWyM0OTNdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2lzc3Vlcy80OTMpKSAoWzM5OGNjZDJdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2NvbW1pdC8zOThjY2QyNWVhMTJmYTg0YjllNGYxMDg1ZDVmZjQ0OGMyMWVjNzk3KSkKCiMjIFs2LjUuMF0oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvY29tcGFyZS92Ni40LjAuLi52Ni41LjApICgyMDIzLTA1LTEyKQoKCiMjIyBCdWcgRml4ZXMKCiogYWxsb3cgS0lEIG9mICcwJyAoWyM1MDVdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2lzc3Vlcy81MDUpKSAoWzlkYzQ2YTldKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2NvbW1pdC85ZGM0NmE5YzNlNTgwMTI5NDI0OWNmZDI1NTRjNTM2M2M5ZjkzMjZhKSkKCgojIyMgTWlzY2VsbGFuZW91cyBDaG9yZXMKCiogZHJvcCBzdXBwb3J0IGZvciBQSFAgNy4zIChbIzQ5NV0oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvaXNzdWVzLzQ5NSkpCgojIyBbNi40LjBdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2NvbXBhcmUvdjYuMy4yLi4udjYuNC4wKSAoMjAyMy0wMi0wOCkKCgojIyMgRmVhdHVyZXMKCiogYWRkIHN1cHBvcnQgZm9yIFczQyBFUzI1NksgKFsjNDYyXShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9pc3N1ZXMvNDYyKSkgKFsyMTM5MjRmXShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9jb21taXQvMjEzOTI0ZjUxOTM2MjkxZmJiY2E5OTE1OGIxMWJkNGFlNTZjMmM5NSkpCiogaW1wcm92ZSBjYWNoaW5nIGJ5IG9ubHkgZGVjb2RpbmcgandrcyB3aGVuIG5lY2Vzc2FyeSAoWyM0ODZdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2lzc3Vlcy80ODYpKSAoWzc4ZDNlZDFdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2NvbW1pdC83OGQzZWQxMDczNTUzZjdkMGJiZmZhNmMyMDEwMDA5YTBkNDgzZDVjKSkKCiMjIFs2LjMuMl0oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvY29tcGFyZS92Ni4zLjEuLi52Ni4zLjIpICgyMDIyLTExLTAxKQoKCiMjIyBCdWcgRml4ZXMKCiogY2hlY2sga2lkIGJlZm9yZSB1c2luZyBhcyBhcnJheSBpbmRleCAoW2JhZDFiMDRdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2NvbW1pdC9iYWQxYjA0MGQwYzczNmJiZjg2ODE0YzZiNWFlNjE0ZjUxN2NmN2JkKSkKCiMjIFs2LjMuMV0oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvY29tcGFyZS92Ni4zLjAuLi52Ni4zLjEpICgyMDIyLTExLTAxKQoKCiMjIyBCdWcgRml4ZXMKCiogY2FzaW5nIG9mIEdFVCBmb3IgUFNSIGNvbXBhdCAoWyM0NTFdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2lzc3Vlcy80NTEpKSAoWzYwYjUyYjddKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2NvbW1pdC82MGI1MmI3MTk3ODc5MGVhZmNmM2I5NWNmYmQ4M2RiMDQzOWU4ZDIyKSkKKiBzdHJpbmcgaW50ZXJwb2xhdGlvbiBmb3JtYXQgZm9yIHBocCA4LjIgKFsjNDQ2XShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9pc3N1ZXMvNDQ2KSkgKFsyZTA3ZDhhXShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9jb21taXQvMmUwN2Q4YTE1MjRkMTJiNjliMTEwYWQ2NDlmMTc0NjFkMDY4YjhmMikpCgojIyA2LjMuMCAvIDIwMjItMDctMTUKCiAtIEFkZGVkIEVTMjU2IHN1cHBvcnQgdG8gSldLIHBhcnNpbmcgKFsjMzk5XShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9wdWxsLzM5OSkpCiAtIEZpeGVkIHBvdGVudGlhbCBjYWNoaW5nIGVycm9yIGluIGBDYWNoZWRLZXlTZXRgIGJ5IGNhY2hpbmcgandrcyBhcyBzdHJpbmdzIChbIzQzNV0oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvcHVsbC80MzUpKQoKIyMgNi4yLjAgLyAyMDIyLTA1LTE0CgogLSBBZGRlZCBgQ2FjaGVkS2V5U2V0YCAoWyMzOTddKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L3B1bGwvMzk3KSkKIC0gQWRkZWQgYCRkZWZhdWx0QWxnYCBwYXJhbWV0ZXIgdG8gYEpXVDo6cGFyc2VLZXlgIGFuZCBgSldUOjpwYXJzZUtleVNldGAgKFsjNDI2XShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9wdWxsLzQyNikpLgoKIyMgNi4xLjAgLyAyMDIyLTAzLTIzCgogLSBEcm9wIHN1cHBvcnQgZm9yIFBIUCA1LjMsIDUuNCwgNS41LCA1LjYsIGFuZCA3LjAKIC0gQWRkIHBhcmFtZXRlciB0eXBpbmcgYW5kIHJldHVybiB0eXBlcyB3aGVyZSBwb3NzaWJsZQoKIyMgNi4wLjAgLyAyMDIyLTAxLTI0CgogLSAqKkJhY2t3YXJkcy1Db21wYXRpYmlsaXR5IEJyZWFraW5nIENoYW5nZXMqKjogU2VlIHRoZSBbUmVsZWFzZSBOb3Rlc10oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvcmVsZWFzZXMvdGFnL3Y2LjAuMCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAtIE5ldyBLZXkgb2JqZWN0IHRvIHByZXZlbnQga2V5L2FsZ29yaXRobSB0eXBlIGNvbmZ1c2lvbiAoIzM2NSkKIC0gQWRkIEpXSyBzdXBwb3J0ICgjMjczKQogLSBBZGQgRVMyNTYgc3VwcG9ydCAoIzI1NikKIC0gQWRkIEVTMzg0IHN1cHBvcnQgKCMzMjQpCiAtIEFkZCBFZDI1NTE5IHN1cHBvcnQgKCMzNDMpCgojIyA1LjAuMCAvIDIwMTctMDYtMjYKLSBTdXBwb3J0IFJTMzg0IGFuZCBSUzUxMi4KICBTZWUgWyMxMTddKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L3B1bGwvMTE3KS4gVGhhbmtzIFtAam9vc3RmYWFzc2VuXShodHRwczovL2dpdGh1Yi5jb20vam9vc3RmYWFzc2VuKSEKLSBBZGQgYW4gZXhhbXBsZSBmb3IgUlMyNTYgb3BlbnNzbC4KICBTZWUgWyMxMjVdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L3B1bGwvMTI1KS4gVGhhbmtzIFtAYWtlZW1hbl0oaHR0cHM6Ly9naXRodWIuY29tL2FrZWVtYW4pIQotIERldGVjdCBpbnZhbGlkIEJhc2U2NCBlbmNvZGluZyBpbiBzaWduYXR1cmUuCiAgU2VlIFsjMTYyXShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9wdWxsLzE2MikuIFRoYW5rcyBbQHBzaWdub3JldF0oaHR0cHM6Ly9naXRodWIuY29tL3BzaWdub3JldCkhCi0gVXBkYXRlIGBKV1Q6OnZlcmlmeWAgdG8gaGFuZGxlIE9wZW5TU0wgZXJyb3JzLgogIFNlZSBbIzE1OV0oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvcHVsbC8xNTkpLiBUaGFua3MgW0Bic2hhZmZlcl0oaHR0cHM6Ly9naXRodWIuY29tL2JzaGFmZmVyKSEKLSBBZGQgYGFycmF5YCB0eXBlIGhpbnRpbmcgdG8gYGRlY29kZWAgbWV0aG9kCiAgU2VlIFsjMTAxXShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9wdWxsLzEwMSkuIFRoYW5rcyBbQGh5d2FrXShodHRwczovL2dpdGh1Yi5jb20vaHl3YWspIQotIEFkZCBhbGwgSlNPTiBlcnJvciB0eXBlcy4KICBTZWUgWyMxMTBdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L3B1bGwvMTEwKS4gVGhhbmtzIFtAZ2JhbGR1enppXShodHRwczovL2dpdGh1Yi5jb20vZ2JhbGR1enppKSEKLSBCdWdmaXggJ2tpZCcgbm90IGluIGdpdmVuIGtleSBsaXN0LgogIFNlZSBbIzEyOV0oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvcHVsbC8xMjkpLiBUaGFua3MgW0BzdGFtcHljb2RlXShodHRwczovL2dpdGh1Yi5jb20vc3RhbXB5Y29kZSkhCi0gTWlzY2VsbGFuZW91cyBjbGVhbnVwLCBkb2N1bWVudGF0aW9uIGFuZCB0ZXN0IGZpeGVzLgogIFNlZSBbIzEwN10oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvcHVsbC8xMDcpLCBbIzExNV0oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvcHVsbC8xMTUpLAogIFsjMTYwXShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9wdWxsLzE2MCksIFsjMTYxXShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9wdWxsLzE2MSksIGFuZAogIFsjMTY1XShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9wdWxsLzE2NSkuIFRoYW5rcyBbQGFrZWVtYW5dKGh0dHBzOi8vZ2l0aHViLmNvbS9ha2VlbWFuKSwKICBbQGNoaW5lZHVmbl0oaHR0cHM6Ly9naXRodWIuY29tL2NoaW5lZHVmbiksIGFuZCBbQGJzaGFmZmVyXShodHRwczovL2dpdGh1Yi5jb20vYnNoYWZmZXIpIQoKIyMgNC4wLjAgLyAyMDE2LTA3LTE3Ci0gQWRkIHN1cHBvcnQgZm9yIGxhdGUgc3RhdGljIGJpbmRpbmcuIFNlZSBbIzg4XShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9wdWxsLzg4KSBmb3IgZGV0YWlscy4gVGhhbmtzIHRvIFtAY2hhcHB5ODRdKGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFwcHk4NCkhCi0gVXNlIHN0YXRpYyBgJHRpbWVzdGFtcGAgaW5zdGVhZCBvZiBgdGltZSgpYCB0byBpbXByb3ZlIHVuaXQgdGVzdGluZy4gU2VlIFsjOTNdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L3B1bGwvOTMpIGZvciBkZXRhaWxzLiBUaGFua3MgdG8gW0Bqb3NlcGhtY2Rlcm1vdHRdKGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NlcGhtY2Rlcm1vdHQpIQotIEZpeGVzIHRvIGV4Y2VwdGlvbnMgY2xhc3Nlcy4gU2VlIFsjODFdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L3B1bGwvODEpIGZvciBkZXRhaWxzLiBUaGFua3MgdG8gW0BNYWtzM3ddKGh0dHBzOi8vZ2l0aHViLmNvbS9NYWtzM3cpIQotIEZpeGVzIHRvIFBIUERvYy4gU2VlIFsjNzZdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L3B1bGwvNzYpIGZvciBkZXRhaWxzLiBUaGFua3MgdG8gW0Bha2VlbWFuXShodHRwczovL2dpdGh1Yi5jb20vYWtlZW1hbikhCgojIyAzLjAuMCAvIDIwMTUtMDctMjIKLSBNaW5pbXVtIFBIUCB2ZXJzaW9uIHVwZGF0ZWQgZnJvbSBgNS4yLjBgIHRvIGA1LjMuMGAuCi0gQWRkIGBcRmlyZWJhc2VcSldUYCBuYW1lc3BhY2UuIFNlZQpbIzU5XShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9wdWxsLzU5KSBmb3IgZGV0YWlscy4gVGhhbmtzIHRvCltARGFzaHJvbl0oaHR0cHM6Ly9naXRodWIuY29tL0Rhc2hyb24pIQotIFJlcXVpcmUgYSBub24tZW1wdHkga2V5IHRvIGRlY29kZSBhbmQgdmVyaWZ5IGEgSldULiBTZWUKWyM2MF0oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvcHVsbC82MCkgZm9yIGRldGFpbHMuIFRoYW5rcyB0bwpbQHNqb25lczYwOF0oaHR0cHM6Ly9naXRodWIuY29tL3Nqb25lczYwOCkhCi0gQ2xlYW5lciBkb2N1bWVudGF0aW9uIGJsb2NrcyBpbiB0aGUgY29kZS4gU2VlClsjNjJdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L3B1bGwvNjIpIGZvciBkZXRhaWxzLiBUaGFua3MgdG8KW0Bqb2hhbmRlcnVpanRlcl0oaHR0cHM6Ly9naXRodWIuY29tL2pvaGFuZGVydWlqdGVyKSEKCiMjIDIuMi4wIC8gMjAxNS0wNi0yMgotIEFkZCBzdXBwb3J0IGZvciBhZGRpbmcgY3VzdG9tLCBvcHRpb25hbCBKV1QgaGVhZGVycyB0byBgSldUOjplbmNvZGUoKWAuIFNlZQpbIzUzXShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9wdWxsLzUzL2ZpbGVzKSBmb3IgZGV0YWlscy4gVGhhbmtzIHRvCltAbWNvY2Fyb10oaHR0cHM6Ly9naXRodWIuY29tL21jb2Nhcm8pIQoKIyMgMi4xLjAgLyAyMDE1LTA1LTIwCi0gQWRkIHN1cHBvcnQgZm9yIGFkZGluZyBhIGxlZXdheSB0byBgSldUOmRlY29kZSgpYCB0aGF0IGFjY291bnRzIGZvciBjbG9jayBza2V3CmJldHdlZW4gc2lnbmluZyBhbmQgdmVyaWZ5aW5nIGVudGl0aWVzLiBUaGFua3MgdG8gW0BsY2FicmFsXShodHRwczovL2dpdGh1Yi5jb20vbGNhYnJhbCkhCi0gQWRkIHN1cHBvcnQgZm9yIHBhc3NpbmcgYW4gb2JqZWN0IGltcGxlbWVudGluZyB0aGUgYEFycmF5QWNjZXNzYCBpbnRlcmZhY2UgZm9yCmAka2V5c2AgYXJndW1lbnQgaW4gYEpXVDo6ZGVjb2RlKClgLiBUaGFua3MgdG8gW0BhenRlY2gtZGV2XShodHRwczovL2dpdGh1Yi5jb20vYXp0ZWNoLWRldikhCgojIyAyLjAuMCAvIDIwMTUtMDQtMDEKLSAqKk5vdGUqKjogSXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgdXBkYXRlIHRvID4gdjIuMC4wIHRvIGFkZHJlc3MKICBrbm93biBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgaW4gcHJpb3IgdmVyc2lvbnMgd2hlbiBib3RoIHN5bW1ldHJpYyBhbmQKICBhc3ltbWV0cmljIGtleXMgYXJlIHVzZWQgdG9nZXRoZXIuCi0gVXBkYXRlIHNpZ25hdHVyZSBmb3IgYEpXVDo6ZGVjb2RlKC4uLilgIHRvIHJlcXVpcmUgYW4gYXJyYXkgb2Ygc3VwcG9ydGVkCiAgYWxnb3JpdGhtcyB0byB1c2Ugd2hlbiB2ZXJpZnlpbmcgdG9rZW4gc2lnbmF0dXJlcy4K]]></data>
	</file>
	<file>
	  <filename>/vendor/firebase/php-jwt/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAiZmlyZWJhc2UvcGhwLWp3dCIsCiAgICAiZGVzY3JpcHRpb24iOiAiQSBzaW1wbGUgbGlicmFyeSB0byBlbmNvZGUgYW5kIGRlY29kZSBKU09OIFdlYiBUb2tlbnMgKEpXVCkgaW4gUEhQLiBTaG91bGQgY29uZm9ybSB0byB0aGUgY3VycmVudCBzcGVjLiIsCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QiLAogICAgImtleXdvcmRzIjogWwogICAgICAgICJwaHAiLAogICAgICAgICJqd3QiCiAgICBdLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJOZXVtYW4gVm9uZyIsCiAgICAgICAgICAgICJlbWFpbCI6ICJuZXVtYW4rcGVhckB0d2lsaW8uY29tIiwKICAgICAgICAgICAgInJvbGUiOiAiRGV2ZWxvcGVyIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJBbmFudCBOYXJheWFuYW4iLAogICAgICAgICAgICAiZW1haWwiOiAiYW5hbnRAcGhwLm5ldCIsCiAgICAgICAgICAgICJyb2xlIjogIkRldmVsb3BlciIKICAgICAgICB9CiAgICBdLAogICAgImxpY2Vuc2UiOiAiQlNELTMtQ2xhdXNlIiwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiOiAiXjcuNHx8XjguMCIKICAgIH0sCiAgICAic3VnZ2VzdCI6IHsKICAgICAgICAicGFyYWdvbmllL3NvZGl1bV9jb21wYXQiOiAiU3VwcG9ydCBFZERTQSAoRWQyNTUxOSkgc2lnbmF0dXJlcyB3aGVuIGxpYnNvZGl1bSBpcyBub3QgcHJlc2VudCIsCiAgICAgICAgImV4dC1zb2RpdW0iOiAiU3VwcG9ydCBFZERTQSAoRWQyNTUxOSkgc2lnbmF0dXJlcyIKICAgIH0sCiAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiRmlyZWJhc2VcXEpXVFxcIjogInNyYyIKICAgICAgICB9CiAgICB9LAogICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICJndXp6bGVodHRwL2d1enpsZSI6ICJeNi41fHxeNy40IiwKICAgICAgICAicGhwc3BlYy9wcm9waGVjeS1waHB1bml0IjogIl4yLjAiLAogICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjkuNSIsCiAgICAgICAgInBzci9jYWNoZSI6ICJeMS4wfHxeMi4wIiwKICAgICAgICAicHNyL2h0dHAtY2xpZW50IjogIl4xLjAiLAogICAgICAgICJwc3IvaHR0cC1mYWN0b3J5IjogIl4xLjAiCiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/firebase/php-jwt/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDExLCBOZXVtYW4gVm9uZwoKQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAptb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKCiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KCiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCiAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KCiAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBvdGhlcgogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoKVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwoiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVApMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsClNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQpUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQpPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/firebase/php-jwt/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IVtCdWlsZCBTdGF0dXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2FjdGlvbnMvd29ya2Zsb3dzL3Rlc3RzLnltbC9iYWRnZS5zdmcpClshW0xhdGVzdCBTdGFibGUgVmVyc2lvbl0oaHR0cHM6Ly9wb3Nlci5wdWd4Lm9yZy9maXJlYmFzZS9waHAtand0L3Yvc3RhYmxlKV0oaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzL2ZpcmViYXNlL3BocC1qd3QpClshW1RvdGFsIERvd25sb2Fkc10oaHR0cHM6Ly9wb3Nlci5wdWd4Lm9yZy9maXJlYmFzZS9waHAtand0L2Rvd25sb2FkcyldKGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9maXJlYmFzZS9waHAtand0KQpbIVtMaWNlbnNlXShodHRwczovL3Bvc2VyLnB1Z3gub3JnL2ZpcmViYXNlL3BocC1qd3QvbGljZW5zZSldKGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9maXJlYmFzZS9waHAtand0KQoKUEhQLUpXVAo9PT09PT09CkEgc2ltcGxlIGxpYnJhcnkgdG8gZW5jb2RlIGFuZCBkZWNvZGUgSlNPTiBXZWIgVG9rZW5zIChKV1QpIGluIFBIUCwgY29uZm9ybWluZyB0byBbUkZDIDc1MTldKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTE5KS4KCkluc3RhbGxhdGlvbgotLS0tLS0tLS0tLS0KClVzZSBjb21wb3NlciB0byBtYW5hZ2UgeW91ciBkZXBlbmRlbmNpZXMgYW5kIGRvd25sb2FkIFBIUC1KV1Q6CgpgYGBiYXNoCmNvbXBvc2VyIHJlcXVpcmUgZmlyZWJhc2UvcGhwLWp3dApgYGAKCk9wdGlvbmFsbHksIGluc3RhbGwgdGhlIGBwYXJhZ29uaWUvc29kaXVtX2NvbXBhdGAgcGFja2FnZSBmcm9tIGNvbXBvc2VyIGlmIHlvdXIKcGhwIGlzIDwgNy4yIG9yIGRvZXMgbm90IGhhdmUgbGlic29kaXVtIGluc3RhbGxlZDoKCmBgYGJhc2gKY29tcG9zZXIgcmVxdWlyZSBwYXJhZ29uaWUvc29kaXVtX2NvbXBhdApgYGAKCkV4YW1wbGUKLS0tLS0tLQpgYGBwaHAKdXNlIEZpcmViYXNlXEpXVFxKV1Q7CnVzZSBGaXJlYmFzZVxKV1RcS2V5OwoKJGtleSA9ICdleGFtcGxlX2tleSc7CiRwYXlsb2FkID0gWwogICAgJ2lzcycgPT4gJ2h0dHA6Ly9leGFtcGxlLm9yZycsCiAgICAnYXVkJyA9PiAnaHR0cDovL2V4YW1wbGUuY29tJywKICAgICdpYXQnID0+IDEzNTY5OTk1MjQsCiAgICAnbmJmJyA9PiAxMzU3MDAwMDAwCl07CgovKioKICogSU1QT1JUQU5UOgogKiBZb3UgbXVzdCBzcGVjaWZ5IHN1cHBvcnRlZCBhbGdvcml0aG1zIGZvciB5b3VyIGFwcGxpY2F0aW9uLiBTZWUKICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtam9zZS1qc29uLXdlYi1hbGdvcml0aG1zLTQwCiAqIGZvciBhIGxpc3Qgb2Ygc3BlYy1jb21wbGlhbnQgYWxnb3JpdGhtcy4KICovCiRqd3QgPSBKV1Q6OmVuY29kZSgkcGF5bG9hZCwgJGtleSwgJ0hTMjU2Jyk7CiRkZWNvZGVkID0gSldUOjpkZWNvZGUoJGp3dCwgbmV3IEtleSgka2V5LCAnSFMyNTYnKSk7CnByaW50X3IoJGRlY29kZWQpOwoKLy8gUGFzcyBhIHN0ZENsYXNzIGluIGFzIHRoZSB0aGlyZCBwYXJhbWV0ZXIgdG8gZ2V0IHRoZSBkZWNvZGVkIGhlYWRlciB2YWx1ZXMKJGRlY29kZWQgPSBKV1Q6OmRlY29kZSgkand0LCBuZXcgS2V5KCRrZXksICdIUzI1NicpLCAkaGVhZGVycyA9IG5ldyBzdGRDbGFzcygpKTsKcHJpbnRfcigkaGVhZGVycyk7CgovKgogTk9URTogVGhpcyB3aWxsIG5vdyBiZSBhbiBvYmplY3QgaW5zdGVhZCBvZiBhbiBhc3NvY2lhdGl2ZSBhcnJheS4gVG8gZ2V0CiBhbiBhc3NvY2lhdGl2ZSBhcnJheSwgeW91IHdpbGwgbmVlZCB0byBjYXN0IGl0IGFzIHN1Y2g6CiovCgokZGVjb2RlZF9hcnJheSA9IChhcnJheSkgJGRlY29kZWQ7CgovKioKICogWW91IGNhbiBhZGQgYSBsZWV3YXkgdG8gYWNjb3VudCBmb3Igd2hlbiB0aGVyZSBpcyBhIGNsb2NrIHNrZXcgdGltZXMgYmV0d2VlbgogKiB0aGUgc2lnbmluZyBhbmQgdmVyaWZ5aW5nIHNlcnZlcnMuIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBsZWV3YXkgc2hvdWxkCiAqIG5vdCBiZSBiaWdnZXIgdGhhbiBhIGZldyBtaW51dGVzLgogKgogKiBTb3VyY2U6IGh0dHA6Ly9zZWxmLWlzc3VlZC5pbmZvL2RvY3MvZHJhZnQtaWV0Zi1vYXV0aC1qc29uLXdlYi10b2tlbi5odG1sI25iZkRlZgogKi8KSldUOjokbGVld2F5ID0gNjA7IC8vICRsZWV3YXkgaW4gc2Vjb25kcwokZGVjb2RlZCA9IEpXVDo6ZGVjb2RlKCRqd3QsIG5ldyBLZXkoJGtleSwgJ0hTMjU2JykpOwpgYGAKRXhhbXBsZSBlbmNvZGUvZGVjb2RlIGhlYWRlcnMKLS0tLS0tLQpEZWNvZGluZyB0aGUgSldUIGhlYWRlcnMgd2l0aG91dCB2ZXJpZnlpbmcgdGhlIEpXVCBmaXJzdCBpcyBOT1QgcmVjb21tZW5kZWQsIGFuZCBpcyBub3Qgc3VwcG9ydGVkIGJ5CnRoaXMgbGlicmFyeS4gVGhpcyBpcyBiZWNhdXNlIHdpdGhvdXQgdmVyaWZ5aW5nIHRoZSBKV1QsIHRoZSBoZWFkZXIgdmFsdWVzIGNvdWxkIGhhdmUgYmVlbiB0YW1wZXJlZCB3aXRoLgpBbnkgdmFsdWUgcHVsbGVkIGZyb20gYW4gdW52ZXJpZmllZCBoZWFkZXIgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgaWYgaXQgY291bGQgYmUgYW55IHN0cmluZyBzZW50IGluIGZyb20gYW4KYXR0YWNrZXIuICBJZiB0aGlzIGlzIHNvbWV0aGluZyB5b3Ugc3RpbGwgd2FudCB0byBkbyBpbiB5b3VyIGFwcGxpY2F0aW9uIGZvciB3aGF0ZXZlciByZWFzb24sIGl0J3MgcG9zc2libGUgdG8KZGVjb2RlIHRoZSBoZWFkZXIgdmFsdWVzIG1hbnVhbGx5IHNpbXBseSBieSBjYWxsaW5nIGBqc29uX2RlY29kZWAgYW5kIGBiYXNlNjRfZGVjb2RlYCBvbiB0aGUgSldUCmhlYWRlciBwYXJ0OgpgYGBwaHAKdXNlIEZpcmViYXNlXEpXVFxKV1Q7Cgoka2V5ID0gJ2V4YW1wbGVfa2V5JzsKJHBheWxvYWQgPSBbCiAgICAnaXNzJyA9PiAnaHR0cDovL2V4YW1wbGUub3JnJywKICAgICdhdWQnID0+ICdodHRwOi8vZXhhbXBsZS5jb20nLAogICAgJ2lhdCcgPT4gMTM1Njk5OTUyNCwKICAgICduYmYnID0+IDEzNTcwMDAwMDAKXTsKCiRoZWFkZXJzID0gWwogICAgJ3gtZm9yd2FyZGVkLWZvcicgPT4gJ3d3dy5nb29nbGUuY29tJwpdOwoKLy8gRW5jb2RlIGhlYWRlcnMgaW4gdGhlIEpXVCBzdHJpbmcKJGp3dCA9IEpXVDo6ZW5jb2RlKCRwYXlsb2FkLCAka2V5LCAnSFMyNTYnLCBudWxsLCAkaGVhZGVycyk7CgovLyBEZWNvZGUgaGVhZGVycyBmcm9tIHRoZSBKV1Qgc3RyaW5nIFdJVEhPVVQgdmFsaWRhdGlvbgovLyAqKklNUE9SVEFOVCoqOiBUaGlzIG9wZXJhdGlvbiBpcyB2dWxuZXJhYmxlIHRvIGF0dGFja3MsIGFzIHRoZSBKV1QgaGFzIG5vdCB5ZXQgYmVlbiB2ZXJpZmllZC4KLy8gVGhlc2UgaGVhZGVycyBjb3VsZCBiZSBhbnkgdmFsdWUgc2VudCBieSBhbiBhdHRhY2tlci4KbGlzdCgkaGVhZGVyc0I2NCwgJHBheWxvYWRCNjQsICRzaWcpID0gZXhwbG9kZSgnLicsICRqd3QpOwokZGVjb2RlZCA9IGpzb25fZGVjb2RlKGJhc2U2NF9kZWNvZGUoJGhlYWRlcnNCNjQpLCB0cnVlKTsKCnByaW50X3IoJGRlY29kZWQpOwpgYGAKRXhhbXBsZSB3aXRoIFJTMjU2IChvcGVuc3NsKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmBgYHBocAp1c2UgRmlyZWJhc2VcSldUXEpXVDsKdXNlIEZpcmViYXNlXEpXVFxLZXk7CgokcHJpdmF0ZUtleSA9IDw8PEVPRAotLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tCk1JSUVvd0lCQUFLQ0FRRUF1eldITk01ZithbUNqUXp0YzVRVGZKZnpDQzVKNG51VytML2FPeFo0ZjhKM0ZyZXcKTTJjL2R1ZnJubWVkc0FwYjBCeTdXaGFIbGNxQ2gvU2NBUHlKaHprUFlMYWU3YlRWcm8zaG9rMHpESVRSOEY2UwpKR0w0MkpBRVVrK0lMa1BJK0RPTk0wKzN2ems2S3ZmZTU0OHR1NGN6Q3VxVThCR1ZPbG5wNklxQkhoQXN3Tk1NCjc4cG9zLzJ6MENqUE00dGJlWHFTVFRiTmtYUmJveGpVMjl2U29wY1Q1MWtvV09naVRmM0M3bkpVb01XWkhaSTUKSHFuSWhQQUc5eXY4SEFnTms2Q01rMkNhZFZIRG80SXhqeFR6VFRxbzFTQ1NIMnBvb0psOU84YXQ2a2tSWXNyWgpXd3NLbE9GRTJMVWNlN09iblhzWWloU3RCVURvZUJRbEdHL0J3UUlEQVFBQkFvSUJBRnRHYU9xTktHd2dnbjlrCjZ5enI2R2haNld0MnJoMVhwcThYVXo1MTRVQmhQeEQ3ZEZSTHBiekNyTFZwelk4MExibVZHSjkrMXBKb3p5V2MKVktlQ2VVZE53YnFrcjI0ME9lN0dURm1HakRveFUrNS9IWC9TSllQcEM4Slo5b3FnRUE4N2l6K1dRWDloVm9QMgpvRjZFQjRja0R2WG1rOEZNd1ZaVzJsMi9rZDVtckVWYkRhWEt4aHZVRGY1MmlWRCtzR0lsVGlmN21CZ1I5OS9iCmMzcWlDbnhDTW1mWVVuVDJlaDdWdjJMaENSL0c5UzZDM1I0bEE3MXJFeWlVM0tnc0dmZzBkODIvWFdYYmVnSlcKaDNRYldOdFFMeFR1SXZMcTVhQXJ5VjNQZmFIbFBnZGdLMGZ0Nm9jVTJkZTJGYWdGa2EzbmZWRXlDN0lVc05USwpicTZuaEFFQ2dZRUE3ZC8wRFBPSWFJdGwvOEJXS3lDdUFITXNzNDdqMHdsR2JCU0hkSklpUzU1YWtNdm5BRzBNCjM5eTIyUXFmemgxYXQ5a0JGZVllRklJVTgyWkxGM3hPY0UzejZwSlo0RHl2eDRCWWRYSDc3b2RvOXVWSzlzMWwKM1QzQmxNY3FkMWh2WkxNUzdkdml5SDc5alpvNENYU0hpS3pjN3BRMllmSzVlS3hLcU9OZVh1RUNnWUVBeVhsRwp2b25hdXMvWVRiMUlCZWk5SHdhY2NuUS8xSFJuNk12ZkRqYjdKSkRJQmhOQ2xHUHQ2eFJsekJiU1o3M2MyUUVDCjZGdTloMzZLL0haMnFjTGQyYlhpTnloSVY3YjZ0VktrKzBQc29qMGRMOUViaHNEMU9zbUUxblRQeUFjOVhaYmIKT1BZeHkrZHBCQ1VBOC8xVTkrdWlGb0NhN21JYldjU1ErMzlnSHVFQ2dZQXo4MnBRZmN0MzBhSDRKaUJya05xUApuSmZScTA1VVk3MHVrNWsxdTBpa0xUUm9WUy9oSnUvZDRFMUt2NGhCTXFZQ2F2RlN3QXdudkhVbzUxbFZDci95CnhRT1ZZbHNnbndCZzJNWDQrR2ptSWtxcFNWQ0M4RDdqLzczTWFXYjc0Nk9JWVplcnZROGRiS2FoaTJIYnBzaUcKOEFIY1ZTQS9hZ3hacjM4cXZXVjU0UUtCZ0NENVRsREU4eDE4QXVUR1E5Rmp4QUFkN3VEMGtiWE56MnZVWWc5TApoRkw1dHlMM2FBQXRVclVVdzR4aGQ5SXV5c1JoVy81M2RVK0ZzRzJkWGRKdTZDeEhqbHlFcFVKbDJpWnUvajE1ClluTXpHV0hJRVg4K2VXUkRzdy8rVWp0a28vQjdUaW5HY1dQejNjWWw0RUFPaUNlRFV5WG5xbk8xYnRDRVVVNDQKREoxQkFvR0JBSnVQRDI3RXJUU1Z0SWQ5MCtNNHpGUE5pYkZQNTBLcHJWZGM4Q1IzN0JFN3I4dnVHZ05ZWG1uSQpSTG5HUDlwM3BWZ0ZDa3RPUnVZUzJKLzZ0ODRJMytBMTduRW9CNHh2aFRMZUFpbkFXL3VUUU9VbU5pY09QNEVrCjJNc0xMMmtIZ0w4YkxUbXZYVjRGWCtQWHBockRLZzFYeHpPWW4wb3R1b3FkQVFya0s0b2cKLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KRU9EOwoKJHB1YmxpY0tleSA9IDw8PEVPRAotLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLQpNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXV6V0hOTTVmK2FtQ2pRenRjNVFUCmZKZnpDQzVKNG51VytML2FPeFo0ZjhKM0ZyZXdNMmMvZHVmcm5tZWRzQXBiMEJ5N1doYUhsY3FDaC9TY0FQeUoKaHprUFlMYWU3YlRWcm8zaG9rMHpESVRSOEY2U0pHTDQySkFFVWsrSUxrUEkrRE9OTTArM3Z6azZLdmZlNTQ4dAp1NGN6Q3VxVThCR1ZPbG5wNklxQkhoQXN3Tk1NNzhwb3MvMnowQ2pQTTR0YmVYcVNUVGJOa1hSYm94alUyOXZTCm9wY1Q1MWtvV09naVRmM0M3bkpVb01XWkhaSTVIcW5JaFBBRzl5djhIQWdOazZDTWsyQ2FkVkhEbzRJeGp4VHoKVFRxbzFTQ1NIMnBvb0psOU84YXQ2a2tSWXNyWld3c0tsT0ZFMkxVY2U3T2JuWHNZaWhTdEJVRG9lQlFsR0cvQgp3UUlEQVFBQgotLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0KRU9EOwoKJHBheWxvYWQgPSBbCiAgICAnaXNzJyA9PiAnZXhhbXBsZS5vcmcnLAogICAgJ2F1ZCcgPT4gJ2V4YW1wbGUuY29tJywKICAgICdpYXQnID0+IDEzNTY5OTk1MjQsCiAgICAnbmJmJyA9PiAxMzU3MDAwMDAwCl07Cgokand0ID0gSldUOjplbmNvZGUoJHBheWxvYWQsICRwcml2YXRlS2V5LCAnUlMyNTYnKTsKZWNobyAiRW5jb2RlOlxuIiAuIHByaW50X3IoJGp3dCwgdHJ1ZSkgLiAiXG4iOwoKJGRlY29kZWQgPSBKV1Q6OmRlY29kZSgkand0LCBuZXcgS2V5KCRwdWJsaWNLZXksICdSUzI1NicpKTsKCi8qCiBOT1RFOiBUaGlzIHdpbGwgbm93IGJlIGFuIG9iamVjdCBpbnN0ZWFkIG9mIGFuIGFzc29jaWF0aXZlIGFycmF5LiBUbyBnZXQKIGFuIGFzc29jaWF0aXZlIGFycmF5LCB5b3Ugd2lsbCBuZWVkIHRvIGNhc3QgaXQgYXMgc3VjaDoKKi8KCiRkZWNvZGVkX2FycmF5ID0gKGFycmF5KSAkZGVjb2RlZDsKZWNobyAiRGVjb2RlOlxuIiAuIHByaW50X3IoJGRlY29kZWRfYXJyYXksIHRydWUpIC4gIlxuIjsKYGBgCgpFeGFtcGxlIHdpdGggYSBwYXNzcGhyYXNlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmBgYHBocAp1c2UgRmlyZWJhc2VcSldUXEpXVDsKdXNlIEZpcmViYXNlXEpXVFxLZXk7CgovLyBZb3VyIHBhc3NwaHJhc2UKJHBhc3NwaHJhc2UgPSAnW1lPVVJfUEFTU1BIUkFTRV0nOwoKLy8gWW91ciBwcml2YXRlIGtleSBmaWxlIHdpdGggcGFzc3BocmFzZQovLyBDYW4gYmUgZ2VuZXJhdGVkIHdpdGggInNzaC1rZXlnZW4gLXQgcnNhIC1tIHBlbSIKJHByaXZhdGVLZXlGaWxlID0gJy9wYXRoL3RvL2tleS13aXRoLXBhc3NwaHJhc2UucGVtJzsKCi8vIENyZWF0ZSBhIHByaXZhdGUga2V5IG9mIHR5cGUgInJlc291cmNlIgokcHJpdmF0ZUtleSA9IG9wZW5zc2xfcGtleV9nZXRfcHJpdmF0ZSgKICAgIGZpbGVfZ2V0X2NvbnRlbnRzKCRwcml2YXRlS2V5RmlsZSksCiAgICAkcGFzc3BocmFzZQopOwoKJHBheWxvYWQgPSBbCiAgICAnaXNzJyA9PiAnZXhhbXBsZS5vcmcnLAogICAgJ2F1ZCcgPT4gJ2V4YW1wbGUuY29tJywKICAgICdpYXQnID0+IDEzNTY5OTk1MjQsCiAgICAnbmJmJyA9PiAxMzU3MDAwMDAwCl07Cgokand0ID0gSldUOjplbmNvZGUoJHBheWxvYWQsICRwcml2YXRlS2V5LCAnUlMyNTYnKTsKZWNobyAiRW5jb2RlOlxuIiAuIHByaW50X3IoJGp3dCwgdHJ1ZSkgLiAiXG4iOwoKLy8gR2V0IHB1YmxpYyBrZXkgZnJvbSB0aGUgcHJpdmF0ZSBrZXksIG9yIHB1bGwgZnJvbSBmcm9tIGEgZmlsZS4KJHB1YmxpY0tleSA9IG9wZW5zc2xfcGtleV9nZXRfZGV0YWlscygkcHJpdmF0ZUtleSlbJ2tleSddOwoKJGRlY29kZWQgPSBKV1Q6OmRlY29kZSgkand0LCBuZXcgS2V5KCRwdWJsaWNLZXksICdSUzI1NicpKTsKZWNobyAiRGVjb2RlOlxuIiAuIHByaW50X3IoKGFycmF5KSAkZGVjb2RlZCwgdHJ1ZSkgLiAiXG4iOwpgYGAKCkV4YW1wbGUgd2l0aCBFZERTQSAobGlic29kaXVtIGFuZCBFZDI1NTE5IHNpZ25hdHVyZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpgYGBwaHAKdXNlIEZpcmViYXNlXEpXVFxKV1Q7CnVzZSBGaXJlYmFzZVxKV1RcS2V5OwoKLy8gUHVibGljIGFuZCBwcml2YXRlIGtleXMgYXJlIGV4cGVjdGVkIHRvIGJlIEJhc2U2NCBlbmNvZGVkLiBUaGUgbGFzdAovLyBub24tZW1wdHkgbGluZSBpcyB1c2VkIHNvIHRoYXQga2V5cyBjYW4gYmUgZ2VuZXJhdGVkIHdpdGgKLy8gc29kaXVtX2NyeXB0b19zaWduX2tleXBhaXIoKS4gVGhlIHNlY3JldCBrZXlzIGdlbmVyYXRlZCBieSBvdGhlciB0b29scyBtYXkKLy8gbmVlZCB0byBiZSBhZGp1c3RlZCB0byBtYXRjaCB0aGUgaW5wdXQgZXhwZWN0ZWQgYnkgbGlic29kaXVtLgoKJGtleVBhaXIgPSBzb2RpdW1fY3J5cHRvX3NpZ25fa2V5cGFpcigpOwoKJHByaXZhdGVLZXkgPSBiYXNlNjRfZW5jb2RlKHNvZGl1bV9jcnlwdG9fc2lnbl9zZWNyZXRrZXkoJGtleVBhaXIpKTsKCiRwdWJsaWNLZXkgPSBiYXNlNjRfZW5jb2RlKHNvZGl1bV9jcnlwdG9fc2lnbl9wdWJsaWNrZXkoJGtleVBhaXIpKTsKCiRwYXlsb2FkID0gWwogICAgJ2lzcycgPT4gJ2V4YW1wbGUub3JnJywKICAgICdhdWQnID0+ICdleGFtcGxlLmNvbScsCiAgICAnaWF0JyA9PiAxMzU2OTk5NTI0LAogICAgJ25iZicgPT4gMTM1NzAwMDAwMApdOwoKJGp3dCA9IEpXVDo6ZW5jb2RlKCRwYXlsb2FkLCAkcHJpdmF0ZUtleSwgJ0VkRFNBJyk7CmVjaG8gIkVuY29kZTpcbiIgLiBwcmludF9yKCRqd3QsIHRydWUpIC4gIlxuIjsKCiRkZWNvZGVkID0gSldUOjpkZWNvZGUoJGp3dCwgbmV3IEtleSgkcHVibGljS2V5LCAnRWREU0EnKSk7CmVjaG8gIkRlY29kZTpcbiIgLiBwcmludF9yKChhcnJheSkgJGRlY29kZWQsIHRydWUpIC4gIlxuIjsKYGBgYAoKRXhhbXBsZSB3aXRoIG11bHRpcGxlIGtleXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KYGBgcGhwCnVzZSBGaXJlYmFzZVxKV1RcSldUOwp1c2UgRmlyZWJhc2VcSldUXEtleTsKCi8vIEV4YW1wbGUgUlNBIGtleXMgZnJvbSBwcmV2aW91cyBleGFtcGxlCi8vICRwcml2YXRlS2V5MSA9ICcuLi4nOwovLyAkcHVibGljS2V5MSA9ICcuLi4nOwoKLy8gRXhhbXBsZSBFZERTQSBrZXlzIGZyb20gcHJldmlvdXMgZXhhbXBsZQovLyAkcHJpdmF0ZUtleTIgPSAnLi4uJzsKLy8gJHB1YmxpY0tleTIgPSAnLi4uJzsKCiRwYXlsb2FkID0gWwogICAgJ2lzcycgPT4gJ2V4YW1wbGUub3JnJywKICAgICdhdWQnID0+ICdleGFtcGxlLmNvbScsCiAgICAnaWF0JyA9PiAxMzU2OTk5NTI0LAogICAgJ25iZicgPT4gMTM1NzAwMDAwMApdOwoKJGp3dDEgPSBKV1Q6OmVuY29kZSgkcGF5bG9hZCwgJHByaXZhdGVLZXkxLCAnUlMyNTYnLCAna2lkMScpOwokand0MiA9IEpXVDo6ZW5jb2RlKCRwYXlsb2FkLCAkcHJpdmF0ZUtleTIsICdFZERTQScsICdraWQyJyk7CmVjaG8gIkVuY29kZSAxOlxuIiAuIHByaW50X3IoJGp3dDEsIHRydWUpIC4gIlxuIjsKZWNobyAiRW5jb2RlIDI6XG4iIC4gcHJpbnRfcigkand0MiwgdHJ1ZSkgLiAiXG4iOwoKJGtleXMgPSBbCiAgICAna2lkMScgPT4gbmV3IEtleSgkcHVibGljS2V5MSwgJ1JTMjU2JyksCiAgICAna2lkMicgPT4gbmV3IEtleSgkcHVibGljS2V5MiwgJ0VkRFNBJyksCl07CgokZGVjb2RlZDEgPSBKV1Q6OmRlY29kZSgkand0MSwgJGtleXMpOwokZGVjb2RlZDIgPSBKV1Q6OmRlY29kZSgkand0MiwgJGtleXMpOwoKZWNobyAiRGVjb2RlIDE6XG4iIC4gcHJpbnRfcigoYXJyYXkpICRkZWNvZGVkMSwgdHJ1ZSkgLiAiXG4iOwplY2hvICJEZWNvZGUgMjpcbiIgLiBwcmludF9yKChhcnJheSkgJGRlY29kZWQyLCB0cnVlKSAuICJcbiI7CmBgYAoKVXNpbmcgSldLcwotLS0tLS0tLS0tCgpgYGBwaHAKdXNlIEZpcmViYXNlXEpXVFxKV0s7CnVzZSBGaXJlYmFzZVxKV1RcSldUOwoKLy8gU2V0IG9mIGtleXMuIFRoZSAia2V5cyIga2V5IGlzIHJlcXVpcmVkLiBGb3IgZXhhbXBsZSwgdGhlIEpTT04gcmVzcG9uc2UgdG8KLy8gdGhpcyBlbmRwb2ludDogaHR0cHM6Ly93d3cuZ3N0YXRpYy5jb20vaWFwL3ZlcmlmeS9wdWJsaWNfa2V5LWp3awokandrcyA9IFsna2V5cycgPT4gW11dOwoKLy8gSldLOjpwYXJzZUtleVNldCgkandrcykgcmV0dXJucyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiAqKmtpZCoqIHRvIEZpcmViYXNlXEpXVFxLZXkKLy8gb2JqZWN0cy4gUGFzcyB0aGlzIGFzIHRoZSBzZWNvbmQgcGFyYW1ldGVyIHRvIEpXVDo6ZGVjb2RlLgpKV1Q6OmRlY29kZSgkcGF5bG9hZCwgSldLOjpwYXJzZUtleVNldCgkandrcykpOwpgYGAKClVzaW5nIENhY2hlZCBLZXkgU2V0cwotLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoZSBgQ2FjaGVkS2V5U2V0YCBjbGFzcyBjYW4gYmUgdXNlZCB0byBmZXRjaCBhbmQgY2FjaGUgSldLUyAoSlNPTiBXZWIgS2V5IFNldHMpIGZyb20gYSBwdWJsaWMgVVJJLgpUaGlzIGhhcyB0aGUgZm9sbG93aW5nIGFkdmFudGFnZXM6CgoxLiBUaGUgcmVzdWx0cyBhcmUgY2FjaGVkIGZvciBwZXJmb3JtYW5jZS4KMi4gSWYgYW4gdW5yZWNvZ25pemVkIGtleSBpcyByZXF1ZXN0ZWQsIHRoZSBjYWNoZSBpcyByZWZyZXNoZWQsIHRvIGFjY29tb2RhdGUgZm9yIGtleSByb3RhdGlvbi4KMy4gSWYgcmF0ZSBsaW1pdGluZyBpcyBlbmFibGVkLCB0aGUgSldLUyBVUkkgd2lsbCBub3QgbWFrZSBtb3JlIHRoYW4gMTAgcmVxdWVzdHMgYSBzZWNvbmQuCgpgYGBwaHAKdXNlIEZpcmViYXNlXEpXVFxDYWNoZWRLZXlTZXQ7CnVzZSBGaXJlYmFzZVxKV1RcSldUOwoKLy8gVGhlIFVSSSBmb3IgdGhlIEpXS1MgeW91IHdpc2ggdG8gY2FjaGUgdGhlIHJlc3VsdHMgZnJvbQokandrc1VyaSA9ICdodHRwczovL3d3dy5nc3RhdGljLmNvbS9pYXAvdmVyaWZ5L3B1YmxpY19rZXktandrJzsKCi8vIENyZWF0ZSBhbiBIVFRQIGNsaWVudCAoY2FuIGJlIGFueSBQU1ItNyBjb21wYXRpYmxlIEhUVFAgY2xpZW50KQokaHR0cENsaWVudCA9IG5ldyBHdXp6bGVIdHRwXENsaWVudCgpOwoKLy8gQ3JlYXRlIGFuIEhUVFAgcmVxdWVzdCBmYWN0b3J5IChjYW4gYmUgYW55IFBTUi0xNyBjb21wYXRpYmxlIEhUVFAgcmVxdWVzdCBmYWN0b3J5KQokaHR0cEZhY3RvcnkgPSBuZXcgR3V6emxlSHR0cFxQc3JcSHR0cEZhY3RvcnkoKTsKCi8vIENyZWF0ZSBhIGNhY2hlIGl0ZW0gcG9vbCAoY2FuIGJlIGFueSBQU1ItNiBjb21wYXRpYmxlIGNhY2hlIGl0ZW0gcG9vbCkKJGNhY2hlSXRlbVBvb2wgPSBQaHBmYXN0Y2FjaGVcQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgnZmlsZXMnKTsKCiRrZXlTZXQgPSBuZXcgQ2FjaGVkS2V5U2V0KAogICAgJGp3a3NVcmksCiAgICAkaHR0cENsaWVudCwKICAgICRodHRwRmFjdG9yeSwKICAgICRjYWNoZUl0ZW1Qb29sLAogICAgbnVsbCwgLy8gJGV4cGlyZXNBZnRlciBpbnQgc2Vjb25kcyB0byBzZXQgdGhlIEpXS1MgdG8gZXhwaXJlCiAgICB0cnVlICAvLyAkcmF0ZUxpbWl0ICAgIHRydWUgdG8gZW5hYmxlIHJhdGUgbGltaXQgb2YgMTAgUlBTIG9uIGxvb2t1cCBvZiBpbnZhbGlkIGtleXMKKTsKCiRqd3QgPSAnZXlKaGJHY2kuLi4nOyAvLyBTb21lIEpXVCBzaWduZWQgYnkgYSBrZXkgZnJvbSB0aGUgJGp3a1VyaSBhYm92ZQokZGVjb2RlZCA9IEpXVDo6ZGVjb2RlKCRqd3QsICRrZXlTZXQpOwpgYGAKCk1pc2NlbGxhbmVvdXMKLS0tLS0tLS0tLS0tLQoKIyMjIyBFeGNlcHRpb24gSGFuZGxpbmcKCldoZW4gYSBjYWxsIHRvIGBKV1Q6OmRlY29kZWAgaXMgaW52YWxpZCwgaXQgd2lsbCB0aHJvdyBvbmUgb2YgdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOgoKYGBgcGhwCnVzZSBGaXJlYmFzZVxKV1RcSldUOwp1c2UgRmlyZWJhc2VcSldUXFNpZ25hdHVyZUludmFsaWRFeGNlcHRpb247CnVzZSBGaXJlYmFzZVxKV1RcQmVmb3JlVmFsaWRFeGNlcHRpb247CnVzZSBGaXJlYmFzZVxKV1RcRXhwaXJlZEV4Y2VwdGlvbjsKdXNlIERvbWFpbkV4Y2VwdGlvbjsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbjsKCnRyeSB7CiAgICAkZGVjb2RlZCA9IEpXVDo6ZGVjb2RlKCRwYXlsb2FkLCAka2V5cyk7Cn0gY2F0Y2ggKEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiAkZSkgewogICAgLy8gcHJvdmlkZWQga2V5L2tleS1hcnJheSBpcyBlbXB0eSBvciBtYWxmb3JtZWQuCn0gY2F0Y2ggKERvbWFpbkV4Y2VwdGlvbiAkZSkgewogICAgLy8gcHJvdmlkZWQgYWxnb3JpdGhtIGlzIHVuc3VwcG9ydGVkIE9SCiAgICAvLyBwcm92aWRlZCBrZXkgaXMgaW52YWxpZCBPUgogICAgLy8gdW5rbm93biBlcnJvciB0aHJvd24gaW4gb3BlblNTTCBvciBsaWJzb2RpdW0gT1IKICAgIC8vIGxpYnNvZGl1bSBpcyByZXF1aXJlZCBidXQgbm90IGF2YWlsYWJsZS4KfSBjYXRjaCAoU2lnbmF0dXJlSW52YWxpZEV4Y2VwdGlvbiAkZSkgewogICAgLy8gcHJvdmlkZWQgSldUIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkLgp9IGNhdGNoIChCZWZvcmVWYWxpZEV4Y2VwdGlvbiAkZSkgewogICAgLy8gcHJvdmlkZWQgSldUIGlzIHRyeWluZyB0byBiZSB1c2VkIGJlZm9yZSAibmJmIiBjbGFpbSBPUgogICAgLy8gcHJvdmlkZWQgSldUIGlzIHRyeWluZyB0byBiZSB1c2VkIGJlZm9yZSAiaWF0IiBjbGFpbS4KfSBjYXRjaCAoRXhwaXJlZEV4Y2VwdGlvbiAkZSkgewogICAgLy8gcHJvdmlkZWQgSldUIGlzIHRyeWluZyB0byBiZSB1c2VkIGFmdGVyICJleHAiIGNsYWltLgp9IGNhdGNoIChVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24gJGUpIHsKICAgIC8vIHByb3ZpZGVkIEpXVCBpcyBtYWxmb3JtZWQgT1IKICAgIC8vIHByb3ZpZGVkIEpXVCBpcyBtaXNzaW5nIGFuIGFsZ29yaXRobSAvIHVzaW5nIGFuIHVuc3VwcG9ydGVkIGFsZ29yaXRobSBPUgogICAgLy8gcHJvdmlkZWQgSldUIGFsZ29yaXRobSBkb2VzIG5vdCBtYXRjaCBwcm92aWRlZCBrZXkgT1IKICAgIC8vIHByb3ZpZGVkIGtleSBJRCBpbiBrZXkva2V5LWFycmF5IGlzIGVtcHR5IG9yIGludmFsaWQuCn0KYGBgCgpBbGwgZXhjZXB0aW9ucyBpbiB0aGUgYEZpcmViYXNlXEpXVGAgbmFtZXNwYWNlIGV4dGVuZCBgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uYCwgYW5kIGNhbiBiZSBzaW1wbGlmaWVkCmxpa2UgdGhpczoKCmBgYHBocAp1c2UgRmlyZWJhc2VcSldUXEpXVDsKdXNlIFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbjsKdHJ5IHsKICAgICRkZWNvZGVkID0gSldUOjpkZWNvZGUoJHBheWxvYWQsICRrZXlzKTsKfSBjYXRjaCAoTG9naWNFeGNlcHRpb24gJGUpIHsKICAgIC8vIGVycm9ycyBoYXZpbmcgdG8gZG8gd2l0aCBlbnZpcm9ubWVudGFsIHNldHVwIG9yIG1hbGZvcm1lZCBKV1QgS2V5cwp9IGNhdGNoIChVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24gJGUpIHsKICAgIC8vIGVycm9ycyBoYXZpbmcgdG8gZG8gd2l0aCBKV1Qgc2lnbmF0dXJlIGFuZCBjbGFpbXMKfQpgYGAKCiMjIyMgQ2FzdGluZyB0byBhcnJheQoKVGhlIHJldHVybiB2YWx1ZSBvZiBgSldUOjpkZWNvZGVgIGlzIHRoZSBnZW5lcmljIFBIUCBvYmplY3QgYHN0ZENsYXNzYC4gSWYgeW91J2QgbGlrZSB0byBoYW5kbGUgd2l0aCBhcnJheXMKaW5zdGVhZCwgeW91IGNhbiBkbyB0aGUgZm9sbG93aW5nOgoKYGBgcGhwCi8vIHJldHVybiB0eXBlIGlzIHN0ZENsYXNzCiRkZWNvZGVkID0gSldUOjpkZWNvZGUoJHBheWxvYWQsICRrZXlzKTsKCi8vIGNhc3QgdG8gYXJyYXkKJGRlY29kZWQgPSBqc29uX2RlY29kZShqc29uX2VuY29kZSgkZGVjb2RlZCksIHRydWUpOwpgYGAKClRlc3RzCi0tLS0tClJ1biB0aGUgdGVzdHMgdXNpbmcgcGhwdW5pdDoKCmBgYGJhc2gKJCBwZWFyIGluc3RhbGwgUEhQVW5pdAokIHBocHVuaXQgLS1jb25maWd1cmF0aW9uIHBocHVuaXQueG1sLmRpc3QKUEhQVW5pdCAzLjcuMTAgYnkgU2ViYXN0aWFuIEJlcmdtYW5uLgouLi4uLgpUaW1lOiAwIHNlY29uZHMsIE1lbW9yeTogMi41ME1iCk9LICg1IHRlc3RzLCA1IGFzc2VydGlvbnMpCmBgYAoKTmV3IExpbmVzIGluIHByaXZhdGUga2V5cwotLS0tLQoKSWYgeW91ciBwcml2YXRlIGtleSBjb250YWlucyBgXG5gIGNoYXJhY3RlcnMsIGJlIHN1cmUgdG8gd3JhcCBpdCBpbiBkb3VibGUgcXVvdGVzIGAiImAKYW5kIG5vdCBzaW5nbGUgcXVvdGVzIGAnJ2AgaW4gb3JkZXIgdG8gcHJvcGVybHkgaW50ZXJwcmV0IHRoZSBlc2NhcGVkIGNoYXJhY3RlcnMuCgpMaWNlbnNlCi0tLS0tLS0KWzMtQ2xhdXNlIEJTRF0oaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZSkuCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/firebase/php-jwt/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/firebase/php-jwt/src/BeforeValidException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBGaXJlYmFzZVxKV1Q7CgpjbGFzcyBCZWZvcmVWYWxpZEV4Y2VwdGlvbiBleHRlbmRzIFxVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24gaW1wbGVtZW50cyBKV1RFeGNlcHRpb25XaXRoUGF5bG9hZEludGVyZmFjZQp7CiAgICBwcml2YXRlIG9iamVjdCAkcGF5bG9hZDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UGF5bG9hZChvYmplY3QgJHBheWxvYWQpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPnBheWxvYWQgPSAkcGF5bG9hZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGF5bG9hZCgpOiBvYmplY3QKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnBheWxvYWQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/firebase/php-jwt/src/CachedKeySet.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBGaXJlYmFzZVxKV1Q7Cgp1c2UgQXJyYXlBY2Nlc3M7CnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBMb2dpY0V4Y2VwdGlvbjsKdXNlIE91dE9mQm91bmRzRXhjZXB0aW9uOwp1c2UgUHNyXENhY2hlXENhY2hlSXRlbUludGVyZmFjZTsKdXNlIFBzclxDYWNoZVxDYWNoZUl0ZW1Qb29sSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcQ2xpZW50XENsaWVudEludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEZhY3RvcnlJbnRlcmZhY2U7CnVzZSBSdW50aW1lRXhjZXB0aW9uOwp1c2UgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uOwoKLyoqCiAqIEBpbXBsZW1lbnRzIEFycmF5QWNjZXNzPHN0cmluZywgS2V5PgogKi8KY2xhc3MgQ2FjaGVkS2V5U2V0IGltcGxlbWVudHMgQXJyYXlBY2Nlc3MKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRqd2tzVXJpOwogICAgLyoqCiAgICAgKiBAdmFyIENsaWVudEludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRodHRwQ2xpZW50OwogICAgLyoqCiAgICAgKiBAdmFyIFJlcXVlc3RGYWN0b3J5SW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJGh0dHBGYWN0b3J5OwogICAgLyoqCiAgICAgKiBAdmFyIENhY2hlSXRlbVBvb2xJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkY2FjaGU7CiAgICAvKioKICAgICAqIEB2YXIgP2ludAogICAgICovCiAgICBwcml2YXRlICRleHBpcmVzQWZ0ZXI7CiAgICAvKioKICAgICAqIEB2YXIgP0NhY2hlSXRlbUludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRjYWNoZUl0ZW07CiAgICAvKioKICAgICAqIEB2YXIgYXJyYXk8c3RyaW5nLCBhcnJheTxtaXhlZD4+CiAgICAgKi8KICAgIHByaXZhdGUgJGtleVNldDsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkY2FjaGVLZXk7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJGNhY2hlS2V5UHJlZml4ID0gJ2p3a3MnOwogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcml2YXRlICRtYXhLZXlMZW5ndGggPSA2NDsKICAgIC8qKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHByaXZhdGUgJHJhdGVMaW1pdDsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkcmF0ZUxpbWl0Q2FjaGVLZXk7CiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByaXZhdGUgJG1heENhbGxzUGVyTWludXRlID0gMTA7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkZGVmYXVsdEFsZzsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgc3RyaW5nICRqd2tzVXJpLAogICAgICAgIENsaWVudEludGVyZmFjZSAkaHR0cENsaWVudCwKICAgICAgICBSZXF1ZXN0RmFjdG9yeUludGVyZmFjZSAkaHR0cEZhY3RvcnksCiAgICAgICAgQ2FjaGVJdGVtUG9vbEludGVyZmFjZSAkY2FjaGUsCiAgICAgICAgaW50ICRleHBpcmVzQWZ0ZXIgPSBudWxsLAogICAgICAgIGJvb2wgJHJhdGVMaW1pdCA9IGZhbHNlLAogICAgICAgIHN0cmluZyAkZGVmYXVsdEFsZyA9IG51bGwKICAgICkgewogICAgICAgICR0aGlzLT5qd2tzVXJpID0gJGp3a3NVcmk7CiAgICAgICAgJHRoaXMtPmh0dHBDbGllbnQgPSAkaHR0cENsaWVudDsKICAgICAgICAkdGhpcy0+aHR0cEZhY3RvcnkgPSAkaHR0cEZhY3Rvcnk7CiAgICAgICAgJHRoaXMtPmNhY2hlID0gJGNhY2hlOwogICAgICAgICR0aGlzLT5leHBpcmVzQWZ0ZXIgPSAkZXhwaXJlc0FmdGVyOwogICAgICAgICR0aGlzLT5yYXRlTGltaXQgPSAkcmF0ZUxpbWl0OwogICAgICAgICR0aGlzLT5kZWZhdWx0QWxnID0gJGRlZmF1bHRBbGc7CiAgICAgICAgJHRoaXMtPnNldENhY2hlS2V5cygpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5SWQKICAgICAqIEByZXR1cm4gS2V5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRHZXQoJGtleUlkKTogS2V5CiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+a2V5SWRFeGlzdHMoJGtleUlkKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgT3V0T2ZCb3VuZHNFeGNlcHRpb24oJ0tleSBJRCBub3QgZm91bmQnKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIEpXSzo6cGFyc2VLZXkoJHRoaXMtPmtleVNldFska2V5SWRdLCAkdGhpcy0+ZGVmYXVsdEFsZyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXlJZAogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRFeGlzdHMoJGtleUlkKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+a2V5SWRFeGlzdHMoJGtleUlkKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9mZnNldAogICAgICogQHBhcmFtIEtleSAkdmFsdWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFNldCgkb2Zmc2V0LCAkdmFsdWUpOiB2b2lkCiAgICB7CiAgICAgICAgdGhyb3cgbmV3IExvZ2ljRXhjZXB0aW9uKCdNZXRob2Qgbm90IGltcGxlbWVudGVkJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvZmZzZXQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFVuc2V0KCRvZmZzZXQpOiB2b2lkCiAgICB7CiAgICAgICAgdGhyb3cgbmV3IExvZ2ljRXhjZXB0aW9uKCdNZXRob2Qgbm90IGltcGxlbWVudGVkJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5PG1peGVkPgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZvcm1hdEp3a3NGb3JDYWNoZShzdHJpbmcgJGp3a3MpOiBhcnJheQogICAgewogICAgICAgICRqd2tzID0ganNvbl9kZWNvZGUoJGp3a3MsIHRydWUpOwoKICAgICAgICBpZiAoIWlzc2V0KCRqd2tzWydrZXlzJ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24oJyJrZXlzIiBtZW1iZXIgbXVzdCBleGlzdCBpbiB0aGUgSldLIFNldCcpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGVtcHR5KCRqd2tzWydrZXlzJ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0pXSyBTZXQgZGlkIG5vdCBjb250YWluIGFueSBrZXlzJyk7CiAgICAgICAgfQoKICAgICAgICAka2V5cyA9IFtdOwogICAgICAgIGZvcmVhY2ggKCRqd2tzWydrZXlzJ10gYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgJGtpZCA9IGlzc2V0KCR2WydraWQnXSkgPyAkdlsna2lkJ10gOiAkazsKICAgICAgICAgICAgJGtleXNbKHN0cmluZykgJGtpZF0gPSAkdjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAka2V5czsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGtleUlkRXhpc3RzKHN0cmluZyAka2V5SWQpOiBib29sCiAgICB7CiAgICAgICAgaWYgKG51bGwgPT09ICR0aGlzLT5rZXlTZXQpIHsKICAgICAgICAgICAgJGl0ZW0gPSAkdGhpcy0+Z2V0Q2FjaGVJdGVtKCk7CiAgICAgICAgICAgIC8vIFRyeSB0byBsb2FkIGtleXMgZnJvbSBjYWNoZQogICAgICAgICAgICBpZiAoJGl0ZW0tPmlzSGl0KCkpIHsKICAgICAgICAgICAgICAgIC8vIGl0ZW0gZm91bmQhIHJldHJpZXZlIGl0CiAgICAgICAgICAgICAgICAkdGhpcy0+a2V5U2V0ID0gJGl0ZW0tPmdldCgpOwogICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNhY2hlZCBpdGVtIGlzIGEgc3RyaW5nLCB0aGUgSldLUyByZXNwb25zZSB3YXMgY2FjaGVkIChwcmV2aW91cyBiZWhhdmlvcikuCiAgICAgICAgICAgICAgICAvLyBQYXJzZSB0aGlzIGludG8gZXhwZWN0ZWQgZm9ybWF0IGFycmF5PGtpZCwgandrPiBpbnN0ZWFkLgogICAgICAgICAgICAgICAgaWYgKFxpc19zdHJpbmcoJHRoaXMtPmtleVNldCkpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+a2V5U2V0ID0gJHRoaXMtPmZvcm1hdEp3a3NGb3JDYWNoZSgkdGhpcy0+a2V5U2V0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+a2V5U2V0WyRrZXlJZF0pKSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+cmF0ZUxpbWl0RXhjZWVkZWQoKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZXF1ZXN0ID0gJHRoaXMtPmh0dHBGYWN0b3J5LT5jcmVhdGVSZXF1ZXN0KCdHRVQnLCAkdGhpcy0+andrc1VyaSk7CiAgICAgICAgICAgICRqd2tzUmVzcG9uc2UgPSAkdGhpcy0+aHR0cENsaWVudC0+c2VuZFJlcXVlc3QoJHJlcXVlc3QpOwogICAgICAgICAgICBpZiAoJGp3a3NSZXNwb25zZS0+Z2V0U3RhdHVzQ29kZSgpICE9PSAyMDApIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgc3ByaW50ZignSFRUUCBFcnJvcjogJWQgJXMgZm9yIFVSSSAiJXMiJywKICAgICAgICAgICAgICAgICAgICAgICAgJGp3a3NSZXNwb25zZS0+Z2V0U3RhdHVzQ29kZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAkandrc1Jlc3BvbnNlLT5nZXRSZWFzb25QaHJhc2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmp3a3NVcmksCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAkandrc1Jlc3BvbnNlLT5nZXRTdGF0dXNDb2RlKCkKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPmtleVNldCA9ICR0aGlzLT5mb3JtYXRKd2tzRm9yQ2FjaGUoKHN0cmluZykgJGp3a3NSZXNwb25zZS0+Z2V0Qm9keSgpKTsKCiAgICAgICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmtleVNldFska2V5SWRdKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkaXRlbSA9ICR0aGlzLT5nZXRDYWNoZUl0ZW0oKTsKICAgICAgICAgICAgJGl0ZW0tPnNldCgkdGhpcy0+a2V5U2V0KTsKICAgICAgICAgICAgaWYgKCR0aGlzLT5leHBpcmVzQWZ0ZXIpIHsKICAgICAgICAgICAgICAgICRpdGVtLT5leHBpcmVzQWZ0ZXIoJHRoaXMtPmV4cGlyZXNBZnRlcik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPmNhY2hlLT5zYXZlKCRpdGVtKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcmF0ZUxpbWl0RXhjZWVkZWQoKTogYm9vbAogICAgewogICAgICAgIGlmICghJHRoaXMtPnJhdGVMaW1pdCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAkY2FjaGVJdGVtID0gJHRoaXMtPmNhY2hlLT5nZXRJdGVtKCR0aGlzLT5yYXRlTGltaXRDYWNoZUtleSk7CiAgICAgICAgaWYgKCEkY2FjaGVJdGVtLT5pc0hpdCgpKSB7CiAgICAgICAgICAgICRjYWNoZUl0ZW0tPmV4cGlyZXNBZnRlcigxKTsgLy8gIyBvZiBjYWxscyBhcmUgY2FjaGVkIGVhY2ggbWludXRlCiAgICAgICAgfQoKICAgICAgICAkY2FsbHNQZXJNaW51dGUgPSAoaW50KSAkY2FjaGVJdGVtLT5nZXQoKTsKICAgICAgICBpZiAoKyskY2FsbHNQZXJNaW51dGUgPiAkdGhpcy0+bWF4Q2FsbHNQZXJNaW51dGUpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgICRjYWNoZUl0ZW0tPnNldCgkY2FsbHNQZXJNaW51dGUpOwogICAgICAgICR0aGlzLT5jYWNoZS0+c2F2ZSgkY2FjaGVJdGVtKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRDYWNoZUl0ZW0oKTogQ2FjaGVJdGVtSW50ZXJmYWNlCiAgICB7CiAgICAgICAgaWYgKFxpc19udWxsKCR0aGlzLT5jYWNoZUl0ZW0pKSB7CiAgICAgICAgICAgICR0aGlzLT5jYWNoZUl0ZW0gPSAkdGhpcy0+Y2FjaGUtPmdldEl0ZW0oJHRoaXMtPmNhY2hlS2V5KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+Y2FjaGVJdGVtOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gc2V0Q2FjaGVLZXlzKCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoZW1wdHkoJHRoaXMtPmp3a3NVcmkpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdKV0tTIFVSSSBpcyBlbXB0eScpOwogICAgICAgIH0KCiAgICAgICAgLy8gZW5zdXJlIHdlIGRvIG5vdCBoYXZlIGlsbGVnYWwgY2hhcmFjdGVycwogICAgICAgICRrZXkgPSBwcmVnX3JlcGxhY2UoJ3xbXmEtekEtWjAtOV9cLiFdfCcsICcnLCAkdGhpcy0+andrc1VyaSk7CgogICAgICAgIC8vIGFkZCBwcmVmaXgKICAgICAgICAka2V5ID0gJHRoaXMtPmNhY2hlS2V5UHJlZml4IC4gJGtleTsKCiAgICAgICAgLy8gSGFzaCBrZXlzIGlmIHRoZXkgZXhjZWVkICRtYXhLZXlMZW5ndGggb2YgNjQKICAgICAgICBpZiAoXHN0cmxlbigka2V5KSA+ICR0aGlzLT5tYXhLZXlMZW5ndGgpIHsKICAgICAgICAgICAgJGtleSA9IHN1YnN0cihoYXNoKCdzaGEyNTYnLCAka2V5KSwgMCwgJHRoaXMtPm1heEtleUxlbmd0aCk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+Y2FjaGVLZXkgPSAka2V5OwoKICAgICAgICBpZiAoJHRoaXMtPnJhdGVMaW1pdCkgewogICAgICAgICAgICAvLyBhZGQgcHJlZml4CiAgICAgICAgICAgICRyYXRlTGltaXRLZXkgPSAkdGhpcy0+Y2FjaGVLZXlQcmVmaXggLiAncmF0ZWxpbWl0JyAuICRrZXk7CgogICAgICAgICAgICAvLyBIYXNoIGtleXMgaWYgdGhleSBleGNlZWQgJG1heEtleUxlbmd0aCBvZiA2NAogICAgICAgICAgICBpZiAoXHN0cmxlbigkcmF0ZUxpbWl0S2V5KSA+ICR0aGlzLT5tYXhLZXlMZW5ndGgpIHsKICAgICAgICAgICAgICAgICRyYXRlTGltaXRLZXkgPSBzdWJzdHIoaGFzaCgnc2hhMjU2JywgJHJhdGVMaW1pdEtleSksIDAsICR0aGlzLT5tYXhLZXlMZW5ndGgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdGhpcy0+cmF0ZUxpbWl0Q2FjaGVLZXkgPSAkcmF0ZUxpbWl0S2V5OwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/firebase/php-jwt/src/ExpiredException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBGaXJlYmFzZVxKV1Q7CgpjbGFzcyBFeHBpcmVkRXhjZXB0aW9uIGV4dGVuZHMgXFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbiBpbXBsZW1lbnRzIEpXVEV4Y2VwdGlvbldpdGhQYXlsb2FkSW50ZXJmYWNlCnsKICAgIHByaXZhdGUgb2JqZWN0ICRwYXlsb2FkOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQYXlsb2FkKG9iamVjdCAkcGF5bG9hZCk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+cGF5bG9hZCA9ICRwYXlsb2FkOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQYXlsb2FkKCk6IG9iamVjdAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cGF5bG9hZDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/firebase/php-jwt/src/JWK.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBGaXJlYmFzZVxKV1Q7Cgp1c2UgRG9tYWluRXhjZXB0aW9uOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uOwoKLyoqCiAqIEpTT04gV2ViIEtleSBpbXBsZW1lbnRhdGlvbiwgYmFzZWQgb24gdGhpcyBzcGVjOgogKiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0Zi1qb3NlLWpzb24td2ViLWtleS00MQogKgogKiBQSFAgdmVyc2lvbiA1CiAqCiAqIEBjYXRlZ29yeSBBdXRoZW50aWNhdGlvbgogKiBAcGFja2FnZSAgQXV0aGVudGljYXRpb25fSldUCiAqIEBhdXRob3IgICBCdWkgU3kgTmd1eWVuIDxuZ3V5ZW5ic0BnbWFpbC5jb20+CiAqIEBsaWNlbnNlICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlIDMtY2xhdXNlIEJTRAogKiBAbGluayAgICAgaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QKICovCmNsYXNzIEpXSwp7CiAgICBwcml2YXRlIGNvbnN0IE9JRCA9ICcxLjIuODQwLjEwMDQ1LjIuMSc7CiAgICBwcml2YXRlIGNvbnN0IEFTTjFfT0JKRUNUX0lERU5USUZJRVIgPSAweDA2OwogICAgcHJpdmF0ZSBjb25zdCBBU04xX1NFUVVFTkNFID0gMHgxMDsgLy8gYWxzbyBkZWZpbmVkIGluIEpXVAogICAgcHJpdmF0ZSBjb25zdCBBU04xX0JJVF9TVFJJTkcgPSAweDAzOwogICAgcHJpdmF0ZSBjb25zdCBFQ19DVVJWRVMgPSBbCiAgICAgICAgJ1AtMjU2JyA9PiAnMS4yLjg0MC4xMDA0NS4zLjEuNycsIC8vIExlbjogNjQKICAgICAgICAnc2VjcDI1NmsxJyA9PiAnMS4zLjEzMi4wLjEwJywgLy8gTGVuOiA2NAogICAgICAgICdQLTM4NCcgPT4gJzEuMy4xMzIuMC4zNCcsIC8vIExlbjogOTYKICAgICAgICAvLyAnUC01MjEnID0+ICcxLjMuMTMyLjAuMzUnLCAvLyBMZW46IDEzMiAobm90IHN1cHBvcnRlZCkKICAgIF07CgogICAgLy8gRm9yIGtleXMgd2l0aCAia3R5IiBlcXVhbCB0byAiT0tQIiAoT2N0ZXQgS2V5IFBhaXIpLCB0aGUgImNydiIgcGFyYW1ldGVyIG11c3QgY29udGFpbiB0aGUga2V5IHN1YnR5cGUuCiAgICAvLyBUaGlzIGxpYnJhcnkgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBzdWJ0eXBlczoKICAgIHByaXZhdGUgY29uc3QgT0tQX1NVQlRZUEVTID0gWwogICAgICAgICdFZDI1NTE5JyA9PiB0cnVlLCAvLyBSRkMgODAzNwogICAgXTsKCiAgICAvKioKICAgICAqIFBhcnNlIGEgc2V0IG9mIEpXSyBrZXlzCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5PG1peGVkPiAkandrcyBUaGUgSlNPTiBXZWIgS2V5IFNldCBhcyBhbiBhc3NvY2lhdGl2ZSBhcnJheQogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAkZGVmYXVsdEFsZyBUaGUgYWxnb3JpdGhtIGZvciB0aGUgS2V5IG9iamVjdCBpZiAiYWxnIiBpcyBub3Qgc2V0IGluIHRoZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OIFdlYiBLZXkgU2V0CiAgICAgKgogICAgICogQHJldHVybiBhcnJheTxzdHJpbmcsIEtleT4gQW4gYXNzb2NpYXRpdmUgYXJyYXkgb2Yga2V5IElEcyAoa2lkKSB0byBLZXkgb2JqZWN0cwogICAgICoKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uICAgICBQcm92aWRlZCBKV0sgU2V0IGlzIGVtcHR5CiAgICAgKiBAdGhyb3dzIFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbiAgICAgUHJvdmlkZWQgSldLIFNldCB3YXMgaW52YWxpZAogICAgICogQHRocm93cyBEb21haW5FeGNlcHRpb24gICAgICAgICAgICAgIE9wZW5TU0wgZmFpbHVyZQogICAgICoKICAgICAqIEB1c2VzIHBhcnNlS2V5CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcGFyc2VLZXlTZXQoYXJyYXkgJGp3a3MsIHN0cmluZyAkZGVmYXVsdEFsZyA9IG51bGwpOiBhcnJheQogICAgewogICAgICAgICRrZXlzID0gW107CgogICAgICAgIGlmICghaXNzZXQoJGp3a3NbJ2tleXMnXSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbignImtleXMiIG1lbWJlciBtdXN0IGV4aXN0IGluIHRoZSBKV0sgU2V0Jyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW1wdHkoJGp3a3NbJ2tleXMnXSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSldLIFNldCBkaWQgbm90IGNvbnRhaW4gYW55IGtleXMnKTsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCRqd2tzWydrZXlzJ10gYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgJGtpZCA9IGlzc2V0KCR2WydraWQnXSkgPyAkdlsna2lkJ10gOiAkazsKICAgICAgICAgICAgaWYgKCRrZXkgPSBzZWxmOjpwYXJzZUtleSgkdiwgJGRlZmF1bHRBbGcpKSB7CiAgICAgICAgICAgICAgICAka2V5c1soc3RyaW5nKSAka2lkXSA9ICRrZXk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgwID09PSBcY291bnQoJGtleXMpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24oJ05vIHN1cHBvcnRlZCBhbGdvcml0aG1zIGZvdW5kIGluIEpXSyBTZXQnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAka2V5czsKICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlIGEgSldLIGtleQogICAgICoKICAgICAqIEBwYXJhbSBhcnJheTxtaXhlZD4gJGp3ayBBbiBpbmRpdmlkdWFsIEpXSwogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAkZGVmYXVsdEFsZyBUaGUgYWxnb3JpdGhtIGZvciB0aGUgS2V5IG9iamVjdCBpZiAiYWxnIiBpcyBub3Qgc2V0IGluIHRoZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OIFdlYiBLZXkgU2V0CiAgICAgKgogICAgICogQHJldHVybiBLZXkgVGhlIGtleSBvYmplY3QgZm9yIHRoZSBKV0sKICAgICAqCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiAgICAgUHJvdmlkZWQgSldLIGlzIGVtcHR5CiAgICAgKiBAdGhyb3dzIFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbiAgICAgUHJvdmlkZWQgSldLIHdhcyBpbnZhbGlkCiAgICAgKiBAdGhyb3dzIERvbWFpbkV4Y2VwdGlvbiAgICAgICAgICAgICAgT3BlblNTTCBmYWlsdXJlCiAgICAgKgogICAgICogQHVzZXMgY3JlYXRlUGVtRnJvbU1vZHVsdXNBbmRFeHBvbmVudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBhcnNlS2V5KGFycmF5ICRqd2ssIHN0cmluZyAkZGVmYXVsdEFsZyA9IG51bGwpOiA/S2V5CiAgICB7CiAgICAgICAgaWYgKGVtcHR5KCRqd2spKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0pXSyBtdXN0IG5vdCBiZSBlbXB0eScpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFpc3NldCgkandrWydrdHknXSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbignSldLIG11c3QgY29udGFpbiBhICJrdHkiIHBhcmFtZXRlcicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFpc3NldCgkandrWydhbGcnXSkpIHsKICAgICAgICAgICAgaWYgKFxpc19udWxsKCRkZWZhdWx0QWxnKSkgewogICAgICAgICAgICAgICAgLy8gVGhlICJhbGciIHBhcmFtZXRlciBpcyBvcHRpb25hbCBpbiBhIEtUWSwgYnV0IGFuIGFsZ29yaXRobSBpcyByZXF1aXJlZAogICAgICAgICAgICAgICAgLy8gZm9yIHBhcnNpbmcgaW4gdGhpcyBsaWJyYXJ5LiBVc2UgdGhlICRkZWZhdWx0QWxnIHBhcmFtZXRlciB3aGVuIHBhcnNpbmcgdGhlCiAgICAgICAgICAgICAgICAvLyBrZXkgc2V0IGluIG9yZGVyIHRvIHByZXZlbnQgdGhpcyBlcnJvci4KICAgICAgICAgICAgICAgIC8vIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM3NTE3I3NlY3Rpb24tNC40CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCdKV0sgbXVzdCBjb250YWluIGFuICJhbGciIHBhcmFtZXRlcicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRqd2tbJ2FsZyddID0gJGRlZmF1bHRBbGc7CiAgICAgICAgfQoKICAgICAgICBzd2l0Y2ggKCRqd2tbJ2t0eSddKSB7CiAgICAgICAgICAgIGNhc2UgJ1JTQSc6CiAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRqd2tbJ2QnXSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCdSU0EgcHJpdmF0ZSBrZXlzIGFyZSBub3Qgc3VwcG9ydGVkJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIWlzc2V0KCRqd2tbJ24nXSkgfHwgIWlzc2V0KCRqd2tbJ2UnXSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCdSU0Ega2V5cyBtdXN0IGNvbnRhaW4gdmFsdWVzIGZvciBib3RoICJuIiBhbmQgImUiJyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHBlbSA9IHNlbGY6OmNyZWF0ZVBlbUZyb21Nb2R1bHVzQW5kRXhwb25lbnQoJGp3a1snbiddLCAkandrWydlJ10pOwogICAgICAgICAgICAgICAgJHB1YmxpY0tleSA9IFxvcGVuc3NsX3BrZXlfZ2V0X3B1YmxpYygkcGVtKTsKICAgICAgICAgICAgICAgIGlmIChmYWxzZSA9PT0gJHB1YmxpY0tleSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBEb21haW5FeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICdPcGVuU1NMIGVycm9yOiAnIC4gXG9wZW5zc2xfZXJyb3Jfc3RyaW5nKCkKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBLZXkoJHB1YmxpY0tleSwgJGp3a1snYWxnJ10pOwogICAgICAgICAgICBjYXNlICdFQyc6CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGp3a1snZCddKSkgewogICAgICAgICAgICAgICAgICAgIC8vIFRoZSBrZXkgaXMgYWN0dWFsbHkgYSBwcml2YXRlIGtleQogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24oJ0tleSBkYXRhIG11c3QgYmUgZm9yIGEgcHVibGljIGtleScpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkandrWydjcnYnXSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCdjcnYgbm90IHNldCcpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghaXNzZXQoc2VsZjo6RUNfQ1VSVkVTWyRqd2tbJ2NydiddXSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRG9tYWluRXhjZXB0aW9uKCdVbnJlY29nbmlzZWQgb3IgdW5zdXBwb3J0ZWQgRUMgY3VydmUnKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJGp3a1sneCddKSB8fCBlbXB0eSgkandrWyd5J10pKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbigneCBhbmQgeSBub3Qgc2V0Jyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHB1YmxpY0tleSA9IHNlbGY6OmNyZWF0ZVBlbUZyb21DcnZBbmRYWUNvb3JkaW5hdGVzKCRqd2tbJ2NydiddLCAkandrWyd4J10sICRqd2tbJ3knXSk7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEtleSgkcHVibGljS2V5LCAkandrWydhbGcnXSk7CiAgICAgICAgICAgIGNhc2UgJ09LUCc6CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGp3a1snZCddKSkgewogICAgICAgICAgICAgICAgICAgIC8vIFRoZSBrZXkgaXMgYWN0dWFsbHkgYSBwcml2YXRlIGtleQogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24oJ0tleSBkYXRhIG11c3QgYmUgZm9yIGEgcHVibGljIGtleScpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghaXNzZXQoJGp3a1snY3J2J10pKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbignY3J2IG5vdCBzZXQnKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoZW1wdHkoc2VsZjo6T0tQX1NVQlRZUEVTWyRqd2tbJ2NydiddXSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRG9tYWluRXhjZXB0aW9uKCdVbnJlY29nbmlzZWQgb3IgdW5zdXBwb3J0ZWQgT0tQIGtleSBzdWJ0eXBlJyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRqd2tbJ3gnXSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCd4IG5vdCBzZXQnKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBUaGlzIGxpYnJhcnkgd29ya3MgaW50ZXJuYWxseSB3aXRoIEVkRFNBIGtleXMgKEVkMjU1MTkpIGVuY29kZWQgaW4gc3RhbmRhcmQgYmFzZTY0LgogICAgICAgICAgICAgICAgJHB1YmxpY0tleSA9IEpXVDo6Y29udmVydEJhc2U2NHVybFRvQmFzZTY0KCRqd2tbJ3gnXSk7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEtleSgkcHVibGljS2V5LCAkandrWydhbGcnXSk7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydHMgdGhlIEVDIEpXSyB2YWx1ZXMgdG8gcGVtIGZvcm1hdC4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgICRjcnYgVGhlIEVDIGN1cnZlIChvbmx5IFAtMjU2ICYgUC0zODQgaXMgc3VwcG9ydGVkKQogICAgICogQHBhcmFtICAgc3RyaW5nICAkeCAgIFRoZSBFQyB4LWNvb3JkaW5hdGUKICAgICAqIEBwYXJhbSAgIHN0cmluZyAgJHkgICBUaGUgRUMgeS1jb29yZGluYXRlCiAgICAgKgogICAgICogQHJldHVybiAgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZVBlbUZyb21DcnZBbmRYWUNvb3JkaW5hdGVzKHN0cmluZyAkY3J2LCBzdHJpbmcgJHgsIHN0cmluZyAkeSk6IHN0cmluZwogICAgewogICAgICAgICRwZW0gPQogICAgICAgICAgICBzZWxmOjplbmNvZGVERVIoCiAgICAgICAgICAgICAgICBzZWxmOjpBU04xX1NFUVVFTkNFLAogICAgICAgICAgICAgICAgc2VsZjo6ZW5jb2RlREVSKAogICAgICAgICAgICAgICAgICAgIHNlbGY6OkFTTjFfU0VRVUVOQ0UsCiAgICAgICAgICAgICAgICAgICAgc2VsZjo6ZW5jb2RlREVSKAogICAgICAgICAgICAgICAgICAgICAgICBzZWxmOjpBU04xX09CSkVDVF9JREVOVElGSUVSLAogICAgICAgICAgICAgICAgICAgICAgICBzZWxmOjplbmNvZGVPSUQoc2VsZjo6T0lEKQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAuIHNlbGY6OmVuY29kZURFUigKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6QVNOMV9PQkpFQ1RfSURFTlRJRklFUiwKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6ZW5jb2RlT0lEKHNlbGY6OkVDX0NVUlZFU1skY3J2XSkKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApIC4KICAgICAgICAgICAgICAgIHNlbGY6OmVuY29kZURFUigKICAgICAgICAgICAgICAgICAgICBzZWxmOjpBU04xX0JJVF9TVFJJTkcsCiAgICAgICAgICAgICAgICAgICAgXGNocigweDAwKSAuIFxjaHIoMHgwNCkKICAgICAgICAgICAgICAgICAgICAuIEpXVDo6dXJsc2FmZUI2NERlY29kZSgkeCkKICAgICAgICAgICAgICAgICAgICAuIEpXVDo6dXJsc2FmZUI2NERlY29kZSgkeSkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIHNwcmludGYoCiAgICAgICAgICAgICItLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxuJXNcbi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLVxuIiwKICAgICAgICAgICAgd29yZHdyYXAoYmFzZTY0X2VuY29kZSgkcGVtKSwgNjQsICJcbiIsIHRydWUpCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhIHB1YmxpYyBrZXkgcmVwcmVzZW50ZWQgaW4gUEVNIGZvcm1hdCBmcm9tIFJTQSBtb2R1bHVzIGFuZCBleHBvbmVudCBpbmZvcm1hdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG4gVGhlIFJTQSBtb2R1bHVzIGVuY29kZWQgaW4gQmFzZTY0CiAgICAgKiBAcGFyYW0gc3RyaW5nICRlIFRoZSBSU0EgZXhwb25lbnQgZW5jb2RlZCBpbiBCYXNlNjQKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgUlNBIHB1YmxpYyBrZXkgcmVwcmVzZW50ZWQgaW4gUEVNIGZvcm1hdAogICAgICoKICAgICAqIEB1c2VzIGVuY29kZUxlbmd0aAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVQZW1Gcm9tTW9kdWx1c0FuZEV4cG9uZW50KAogICAgICAgIHN0cmluZyAkbiwKICAgICAgICBzdHJpbmcgJGUKICAgICk6IHN0cmluZyB7CiAgICAgICAgJG1vZCA9IEpXVDo6dXJsc2FmZUI2NERlY29kZSgkbik7CiAgICAgICAgJGV4cCA9IEpXVDo6dXJsc2FmZUI2NERlY29kZSgkZSk7CgogICAgICAgICRtb2R1bHVzID0gXHBhY2soJ0NhKmEqJywgMiwgc2VsZjo6ZW5jb2RlTGVuZ3RoKFxzdHJsZW4oJG1vZCkpLCAkbW9kKTsKICAgICAgICAkcHVibGljRXhwb25lbnQgPSBccGFjaygnQ2EqYSonLCAyLCBzZWxmOjplbmNvZGVMZW5ndGgoXHN0cmxlbigkZXhwKSksICRleHApOwoKICAgICAgICAkcnNhUHVibGljS2V5ID0gXHBhY2soCiAgICAgICAgICAgICdDYSphKmEqJywKICAgICAgICAgICAgNDgsCiAgICAgICAgICAgIHNlbGY6OmVuY29kZUxlbmd0aChcc3RybGVuKCRtb2R1bHVzKSArIFxzdHJsZW4oJHB1YmxpY0V4cG9uZW50KSksCiAgICAgICAgICAgICRtb2R1bHVzLAogICAgICAgICAgICAkcHVibGljRXhwb25lbnQKICAgICAgICApOwoKICAgICAgICAvLyBzZXF1ZW5jZShvaWQoMS4yLjg0MC4xMTM1NDkuMS4xLjEpLCBudWxsKSkgPSByc2FFbmNyeXB0aW9uLgogICAgICAgICRyc2FPSUQgPSBccGFjaygnSConLCAnMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDEwNTAwJyk7IC8vIGhleCB2ZXJzaW9uIG9mIE1BMEdDU3FHU0liM0RRRUJBUVVBCiAgICAgICAgJHJzYVB1YmxpY0tleSA9IFxjaHIoMCkgLiAkcnNhUHVibGljS2V5OwogICAgICAgICRyc2FQdWJsaWNLZXkgPSBcY2hyKDMpIC4gc2VsZjo6ZW5jb2RlTGVuZ3RoKFxzdHJsZW4oJHJzYVB1YmxpY0tleSkpIC4gJHJzYVB1YmxpY0tleTsKCiAgICAgICAgJHJzYVB1YmxpY0tleSA9IFxwYWNrKAogICAgICAgICAgICAnQ2EqYSonLAogICAgICAgICAgICA0OCwKICAgICAgICAgICAgc2VsZjo6ZW5jb2RlTGVuZ3RoKFxzdHJsZW4oJHJzYU9JRCAuICRyc2FQdWJsaWNLZXkpKSwKICAgICAgICAgICAgJHJzYU9JRCAuICRyc2FQdWJsaWNLZXkKICAgICAgICApOwoKICAgICAgICByZXR1cm4gIi0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXHJcbiIgLgogICAgICAgICAgICBcY2h1bmtfc3BsaXQoXGJhc2U2NF9lbmNvZGUoJHJzYVB1YmxpY0tleSksIDY0KSAuCiAgICAgICAgICAgICctLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0nOwogICAgfQoKICAgIC8qKgogICAgICogREVSLWVuY29kZSB0aGUgbGVuZ3RoCiAgICAgKgogICAgICogREVSIHN1cHBvcnRzIGxlbmd0aHMgdXAgdG8gKDIqKjgpKioxMjcsIGhvd2V2ZXIsIHdlJ2xsIG9ubHkgc3VwcG9ydCBsZW5ndGhzIHVwIHRvICgyKio4KSoqNC4gIFNlZQogICAgICoge0BsaW5rIGh0dHA6Ly9pdHUuaW50L0lUVS1UL3N0dWR5Z3JvdXBzL2NvbTE3L2xhbmd1YWdlcy9YLjY5MC0wMjA3LnBkZiNwPTEzIFguNjkwIHBhcmFncmFwaCA4LjEuM30gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIGludCAkbGVuZ3RoCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBlbmNvZGVMZW5ndGgoaW50ICRsZW5ndGgpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoJGxlbmd0aCA8PSAweDdGKSB7CiAgICAgICAgICAgIHJldHVybiBcY2hyKCRsZW5ndGgpOwogICAgICAgIH0KCiAgICAgICAgJHRlbXAgPSBcbHRyaW0oXHBhY2soJ04nLCAkbGVuZ3RoKSwgXGNocigwKSk7CgogICAgICAgIHJldHVybiBccGFjaygnQ2EqJywgMHg4MCB8IFxzdHJsZW4oJHRlbXApLCAkdGVtcCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBFbmNvZGVzIGEgdmFsdWUgaW50byBhIERFUiBvYmplY3QuCiAgICAgKiBBbHNvIGRlZmluZWQgaW4gRmlyZWJhc2VcSldUXEpXVAogICAgICoKICAgICAqIEBwYXJhbSAgIGludCAgICAgJHR5cGUgREVSIHRhZwogICAgICogQHBhcmFtICAgc3RyaW5nICAkdmFsdWUgdGhlIHZhbHVlIHRvIGVuY29kZQogICAgICogQHJldHVybiAgc3RyaW5nICB0aGUgZW5jb2RlZCBvYmplY3QKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZW5jb2RlREVSKGludCAkdHlwZSwgc3RyaW5nICR2YWx1ZSk6IHN0cmluZwogICAgewogICAgICAgICR0YWdfaGVhZGVyID0gMDsKICAgICAgICBpZiAoJHR5cGUgPT09IHNlbGY6OkFTTjFfU0VRVUVOQ0UpIHsKICAgICAgICAgICAgJHRhZ19oZWFkZXIgfD0gMHgyMDsKICAgICAgICB9CgogICAgICAgIC8vIFR5cGUKICAgICAgICAkZGVyID0gXGNocigkdGFnX2hlYWRlciB8ICR0eXBlKTsKCiAgICAgICAgLy8gTGVuZ3RoCiAgICAgICAgJGRlciAuPSBcY2hyKFxzdHJsZW4oJHZhbHVlKSk7CgogICAgICAgIHJldHVybiAkZGVyIC4gJHZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogRW5jb2RlcyBhIHN0cmluZyBpbnRvIGEgREVSLWVuY29kZWQgT0lELgogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAkb2lkIHRoZSBPSUQgc3RyaW5nCiAgICAgKiBAcmV0dXJuICBzdHJpbmcgdGhlIGJpbmFyeSBERVItZW5jb2RlZCBPSUQKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZW5jb2RlT0lEKHN0cmluZyAkb2lkKTogc3RyaW5nCiAgICB7CiAgICAgICAgJG9jdGV0cyA9IGV4cGxvZGUoJy4nLCAkb2lkKTsKCiAgICAgICAgLy8gR2V0IHRoZSBmaXJzdCBvY3RldAogICAgICAgICRmaXJzdCA9IChpbnQpIGFycmF5X3NoaWZ0KCRvY3RldHMpOwogICAgICAgICRzZWNvbmQgPSAoaW50KSBhcnJheV9zaGlmdCgkb2N0ZXRzKTsKICAgICAgICAkb2lkID0gXGNocigkZmlyc3QgKiA0MCArICRzZWNvbmQpOwoKICAgICAgICAvLyBJdGVyYXRlIG92ZXIgc3Vic2VxdWVudCBvY3RldHMKICAgICAgICBmb3JlYWNoICgkb2N0ZXRzIGFzICRvY3RldCkgewogICAgICAgICAgICBpZiAoJG9jdGV0ID09IDApIHsKICAgICAgICAgICAgICAgICRvaWQgLj0gXGNocigweDAwKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRiaW4gPSAnJzsKCiAgICAgICAgICAgIHdoaWxlICgkb2N0ZXQpIHsKICAgICAgICAgICAgICAgICRiaW4gLj0gXGNocigweDgwIHwgKCRvY3RldCAmIDB4N2YpKTsKICAgICAgICAgICAgICAgICRvY3RldCA+Pj0gNzsKICAgICAgICAgICAgfQogICAgICAgICAgICAkYmluWzBdID0gJGJpblswXSAmIFxjaHIoMHg3Zik7CgogICAgICAgICAgICAvLyBDb252ZXJ0IHRvIGJpZyBlbmRpYW4gaWYgbmVjZXNzYXJ5CiAgICAgICAgICAgIGlmIChwYWNrKCdWJywgNjU1MzQpID09IHBhY2soJ0wnLCA2NTUzNCkpIHsKICAgICAgICAgICAgICAgICRvaWQgLj0gc3RycmV2KCRiaW4pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJG9pZCAuPSAkYmluOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG9pZDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/firebase/php-jwt/src/JWT.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBGaXJlYmFzZVxKV1Q7Cgp1c2UgQXJyYXlBY2Nlc3M7CnVzZSBEYXRlVGltZTsKdXNlIERvbWFpbkV4Y2VwdGlvbjsKdXNlIEV4Y2VwdGlvbjsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIE9wZW5TU0xBc3ltbWV0cmljS2V5Owp1c2UgT3BlblNTTENlcnRpZmljYXRlOwp1c2Ugc3RkQ2xhc3M7CnVzZSBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb247CgovKioKICogSlNPTiBXZWIgVG9rZW4gaW1wbGVtZW50YXRpb24sIGJhc2VkIG9uIHRoaXMgc3BlYzoKICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MTkKICoKICogUEhQIHZlcnNpb24gNQogKgogKiBAY2F0ZWdvcnkgQXV0aGVudGljYXRpb24KICogQHBhY2thZ2UgIEF1dGhlbnRpY2F0aW9uX0pXVAogKiBAYXV0aG9yICAgTmV1bWFuIFZvbmcgPG5ldW1hbkB0d2lsaW8uY29tPgogKiBAYXV0aG9yICAgQW5hbnQgTmFyYXlhbmFuIDxhbmFudEBwaHAubmV0PgogKiBAbGljZW5zZSAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZSAzLWNsYXVzZSBCU0QKICogQGxpbmsgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0CiAqLwpjbGFzcyBKV1QKewogICAgcHJpdmF0ZSBjb25zdCBBU04xX0lOVEVHRVIgPSAweDAyOwogICAgcHJpdmF0ZSBjb25zdCBBU04xX1NFUVVFTkNFID0gMHgxMDsKICAgIHByaXZhdGUgY29uc3QgQVNOMV9CSVRfU1RSSU5HID0gMHgwMzsKCiAgICAvKioKICAgICAqIFdoZW4gY2hlY2tpbmcgbmJmLCBpYXQgb3IgZXhwaXJhdGlvbiB0aW1lcywKICAgICAqIHdlIHdhbnQgdG8gcHJvdmlkZSBzb21lIGV4dHJhIGxlZXdheSB0aW1lIHRvCiAgICAgKiBhY2NvdW50IGZvciBjbG9jayBza2V3LgogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgJGxlZXdheSA9IDA7CgogICAgLyoqCiAgICAgKiBBbGxvdyB0aGUgY3VycmVudCB0aW1lc3RhbXAgdG8gYmUgc3BlY2lmaWVkLgogICAgICogVXNlZnVsIGZvciBmaXhpbmcgYSB2YWx1ZSB3aXRoaW4gdW5pdCB0ZXN0aW5nLgogICAgICogV2lsbCBkZWZhdWx0IHRvIFBIUCB0aW1lKCkgdmFsdWUgaWYgbnVsbC4KICAgICAqCiAgICAgKiBAdmFyID9pbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyAkdGltZXN0YW1wID0gbnVsbDsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXk8c3RyaW5nLCBzdHJpbmdbXT4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyAkc3VwcG9ydGVkX2FsZ3MgPSBbCiAgICAgICAgJ0VTMzg0JyA9PiBbJ29wZW5zc2wnLCAnU0hBMzg0J10sCiAgICAgICAgJ0VTMjU2JyA9PiBbJ29wZW5zc2wnLCAnU0hBMjU2J10sCiAgICAgICAgJ0VTMjU2SycgPT4gWydvcGVuc3NsJywgJ1NIQTI1NiddLAogICAgICAgICdIUzI1NicgPT4gWydoYXNoX2htYWMnLCAnU0hBMjU2J10sCiAgICAgICAgJ0hTMzg0JyA9PiBbJ2hhc2hfaG1hYycsICdTSEEzODQnXSwKICAgICAgICAnSFM1MTInID0+IFsnaGFzaF9obWFjJywgJ1NIQTUxMiddLAogICAgICAgICdSUzI1NicgPT4gWydvcGVuc3NsJywgJ1NIQTI1NiddLAogICAgICAgICdSUzM4NCcgPT4gWydvcGVuc3NsJywgJ1NIQTM4NCddLAogICAgICAgICdSUzUxMicgPT4gWydvcGVuc3NsJywgJ1NIQTUxMiddLAogICAgICAgICdFZERTQScgPT4gWydzb2RpdW1fY3J5cHRvJywgJ0VkRFNBJ10sCiAgICBdOwoKICAgIC8qKgogICAgICogRGVjb2RlcyBhIEpXVCBzdHJpbmcgaW50byBhIFBIUCBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgJGp3dCAgICAgICAgICAgIFRoZSBKV1QKICAgICAqIEBwYXJhbSBLZXl8QXJyYXlBY2Nlc3M8c3RyaW5nLEtleT58YXJyYXk8c3RyaW5nLEtleT4gJGtleU9yS2V5QXJyYXkgIFRoZSBLZXkgb3IgYXNzb2NpYXRpdmUgYXJyYXkgb2Yga2V5IElEcwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtpZCkgdG8gS2V5IG9iamVjdHMuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgYWxnb3JpdGhtIHVzZWQgaXMgYXN5bW1ldHJpYywgdGhpcyBpcwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHB1YmxpYyBrZXkuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIEtleSBvYmplY3QgY29udGFpbnMgYW4gYWxnb3JpdGhtIGFuZAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmcga2V5LgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydGVkIGFsZ29yaXRobXMgYXJlICdFUzM4NCcsJ0VTMjU2JywKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdIUzI1NicsICdIUzM4NCcsICdIUzUxMicsICdSUzI1NicsICdSUzM4NCcKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCAnUlM1MTInLgogICAgICogQHBhcmFtIHN0ZENsYXNzICAgICAgICAgICAgICAgJGhlYWRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWwuIFBvcHVsYXRlcyBzdGRDbGFzcyB3aXRoIGhlYWRlcnMuCiAgICAgKgogICAgICogQHJldHVybiBzdGRDbGFzcyBUaGUgSldUJ3MgcGF5bG9hZCBhcyBhIFBIUCBvYmplY3QKICAgICAqCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiAgICAgUHJvdmlkZWQga2V5L2tleS1hcnJheSB3YXMgZW1wdHkgb3IgbWFsZm9ybWVkCiAgICAgKiBAdGhyb3dzIERvbWFpbkV4Y2VwdGlvbiAgICAgICAgICAgICAgUHJvdmlkZWQgSldUIGlzIG1hbGZvcm1lZAogICAgICogQHRocm93cyBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24gICAgIFByb3ZpZGVkIEpXVCB3YXMgaW52YWxpZAogICAgICogQHRocm93cyBTaWduYXR1cmVJbnZhbGlkRXhjZXB0aW9uICAgIFByb3ZpZGVkIEpXVCB3YXMgaW52YWxpZCBiZWNhdXNlIHRoZSBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZAogICAgICogQHRocm93cyBCZWZvcmVWYWxpZEV4Y2VwdGlvbiAgICAgICAgIFByb3ZpZGVkIEpXVCBpcyB0cnlpbmcgdG8gYmUgdXNlZCBiZWZvcmUgaXQncyBlbGlnaWJsZSBhcyBkZWZpbmVkIGJ5ICduYmYnCiAgICAgKiBAdGhyb3dzIEJlZm9yZVZhbGlkRXhjZXB0aW9uICAgICAgICAgUHJvdmlkZWQgSldUIGlzIHRyeWluZyB0byBiZSB1c2VkIGJlZm9yZSBpdCdzIGJlZW4gY3JlYXRlZCBhcyBkZWZpbmVkIGJ5ICdpYXQnCiAgICAgKiBAdGhyb3dzIEV4cGlyZWRFeGNlcHRpb24gICAgICAgICAgICAgUHJvdmlkZWQgSldUIGhhcyBzaW5jZSBleHBpcmVkLCBhcyBkZWZpbmVkIGJ5IHRoZSAnZXhwJyBjbGFpbQogICAgICoKICAgICAqIEB1c2VzIGpzb25EZWNvZGUKICAgICAqIEB1c2VzIHVybHNhZmVCNjREZWNvZGUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWNvZGUoCiAgICAgICAgc3RyaW5nICRqd3QsCiAgICAgICAgJGtleU9yS2V5QXJyYXksCiAgICAgICAgc3RkQ2xhc3MgJiRoZWFkZXJzID0gbnVsbAogICAgKTogc3RkQ2xhc3MgewogICAgICAgIC8vIFZhbGlkYXRlIEpXVAogICAgICAgICR0aW1lc3RhbXAgPSBcaXNfbnVsbChzdGF0aWM6OiR0aW1lc3RhbXApID8gXHRpbWUoKSA6IHN0YXRpYzo6JHRpbWVzdGFtcDsKCiAgICAgICAgaWYgKGVtcHR5KCRrZXlPcktleUFycmF5KSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdLZXkgbWF5IG5vdCBiZSBlbXB0eScpOwogICAgICAgIH0KICAgICAgICAkdGtzID0gXGV4cGxvZGUoJy4nLCAkand0KTsKICAgICAgICBpZiAoXGNvdW50KCR0a3MpICE9PSAzKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24oJ1dyb25nIG51bWJlciBvZiBzZWdtZW50cycpOwogICAgICAgIH0KICAgICAgICBsaXN0KCRoZWFkYjY0LCAkYm9keWI2NCwgJGNyeXB0b2I2NCkgPSAkdGtzOwogICAgICAgICRoZWFkZXJSYXcgPSBzdGF0aWM6OnVybHNhZmVCNjREZWNvZGUoJGhlYWRiNjQpOwogICAgICAgIGlmIChudWxsID09PSAoJGhlYWRlciA9IHN0YXRpYzo6anNvbkRlY29kZSgkaGVhZGVyUmF3KSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbignSW52YWxpZCBoZWFkZXIgZW5jb2RpbmcnKTsKICAgICAgICB9CiAgICAgICAgaWYgKCRoZWFkZXJzICE9PSBudWxsKSB7CiAgICAgICAgICAgICRoZWFkZXJzID0gJGhlYWRlcjsKICAgICAgICB9CiAgICAgICAgJHBheWxvYWRSYXcgPSBzdGF0aWM6OnVybHNhZmVCNjREZWNvZGUoJGJvZHliNjQpOwogICAgICAgIGlmIChudWxsID09PSAoJHBheWxvYWQgPSBzdGF0aWM6Ompzb25EZWNvZGUoJHBheWxvYWRSYXcpKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCdJbnZhbGlkIGNsYWltcyBlbmNvZGluZycpOwogICAgICAgIH0KICAgICAgICBpZiAoXGlzX2FycmF5KCRwYXlsb2FkKSkgewogICAgICAgICAgICAvLyBwcmV2ZW50IFBIUCBGYXRhbCBFcnJvciBpbiBlZGdlLWNhc2VzIHdoZW4gcGF5bG9hZCBpcyBlbXB0eSBhcnJheQogICAgICAgICAgICAkcGF5bG9hZCA9IChvYmplY3QpICRwYXlsb2FkOwogICAgICAgIH0KICAgICAgICBpZiAoISRwYXlsb2FkIGluc3RhbmNlb2Ygc3RkQ2xhc3MpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbignUGF5bG9hZCBtdXN0IGJlIGEgSlNPTiBvYmplY3QnKTsKICAgICAgICB9CiAgICAgICAgJHNpZyA9IHN0YXRpYzo6dXJsc2FmZUI2NERlY29kZSgkY3J5cHRvYjY0KTsKICAgICAgICBpZiAoZW1wdHkoJGhlYWRlci0+YWxnKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCdFbXB0eSBhbGdvcml0aG0nKTsKICAgICAgICB9CiAgICAgICAgaWYgKGVtcHR5KHN0YXRpYzo6JHN1cHBvcnRlZF9hbGdzWyRoZWFkZXItPmFsZ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24oJ0FsZ29yaXRobSBub3Qgc3VwcG9ydGVkJyk7CiAgICAgICAgfQoKICAgICAgICAka2V5ID0gc2VsZjo6Z2V0S2V5KCRrZXlPcktleUFycmF5LCBwcm9wZXJ0eV9leGlzdHMoJGhlYWRlciwgJ2tpZCcpID8gJGhlYWRlci0+a2lkIDogbnVsbCk7CgogICAgICAgIC8vIENoZWNrIHRoZSBhbGdvcml0aG0KICAgICAgICBpZiAoIXNlbGY6OmNvbnN0YW50VGltZUVxdWFscygka2V5LT5nZXRBbGdvcml0aG0oKSwgJGhlYWRlci0+YWxnKSkgewogICAgICAgICAgICAvLyBTZWUgaXNzdWUgIzM1MQogICAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCdJbmNvcnJlY3Qga2V5IGZvciB0aGlzIGFsZ29yaXRobScpOwogICAgICAgIH0KICAgICAgICBpZiAoXGluX2FycmF5KCRoZWFkZXItPmFsZywgWydFUzI1NicsICdFUzI1NksnLCAnRVMzODQnXSwgdHJ1ZSkpIHsKICAgICAgICAgICAgLy8gT3BlblNTTCBleHBlY3RzIGFuIEFTTi4xIERFUiBzZXF1ZW5jZSBmb3IgRVMyNTYvRVMyNTZLL0VTMzg0IHNpZ25hdHVyZXMKICAgICAgICAgICAgJHNpZyA9IHNlbGY6OnNpZ25hdHVyZVRvREVSKCRzaWcpOwogICAgICAgIH0KICAgICAgICBpZiAoIXNlbGY6OnZlcmlmeSgieyRoZWFkYjY0fS57JGJvZHliNjR9IiwgJHNpZywgJGtleS0+Z2V0S2V5TWF0ZXJpYWwoKSwgJGhlYWRlci0+YWxnKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU2lnbmF0dXJlSW52YWxpZEV4Y2VwdGlvbignU2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlsZWQnKTsKICAgICAgICB9CgogICAgICAgIC8vIENoZWNrIHRoZSBuYmYgaWYgaXQgaXMgZGVmaW5lZC4gVGhpcyBpcyB0aGUgdGltZSB0aGF0IHRoZQogICAgICAgIC8vIHRva2VuIGNhbiBhY3R1YWxseSBiZSB1c2VkLiBJZiBpdCdzIG5vdCB5ZXQgdGhhdCB0aW1lLCBhYm9ydC4KICAgICAgICBpZiAoaXNzZXQoJHBheWxvYWQtPm5iZikgJiYgZmxvb3IoJHBheWxvYWQtPm5iZikgPiAoJHRpbWVzdGFtcCArIHN0YXRpYzo6JGxlZXdheSkpIHsKICAgICAgICAgICAgJGV4ID0gbmV3IEJlZm9yZVZhbGlkRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0Nhbm5vdCBoYW5kbGUgdG9rZW4gd2l0aCBuYmYgcHJpb3IgdG8gJyAuIFxkYXRlKERhdGVUaW1lOjpJU084NjAxLCAoaW50KSAkcGF5bG9hZC0+bmJmKQogICAgICAgICAgICApOwogICAgICAgICAgICAkZXgtPnNldFBheWxvYWQoJHBheWxvYWQpOwogICAgICAgICAgICB0aHJvdyAkZXg7CiAgICAgICAgfQoKICAgICAgICAvLyBDaGVjayB0aGF0IHRoaXMgdG9rZW4gaGFzIGJlZW4gY3JlYXRlZCBiZWZvcmUgJ25vdycuIFRoaXMgcHJldmVudHMKICAgICAgICAvLyB1c2luZyB0b2tlbnMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZCBmb3IgbGF0ZXIgdXNlIChhbmQgaGF2ZW4ndAogICAgICAgIC8vIGNvcnJlY3RseSB1c2VkIHRoZSBuYmYgY2xhaW0pLgogICAgICAgIGlmICghaXNzZXQoJHBheWxvYWQtPm5iZikgJiYgaXNzZXQoJHBheWxvYWQtPmlhdCkgJiYgZmxvb3IoJHBheWxvYWQtPmlhdCkgPiAoJHRpbWVzdGFtcCArIHN0YXRpYzo6JGxlZXdheSkpIHsKICAgICAgICAgICAgJGV4ID0gbmV3IEJlZm9yZVZhbGlkRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0Nhbm5vdCBoYW5kbGUgdG9rZW4gd2l0aCBpYXQgcHJpb3IgdG8gJyAuIFxkYXRlKERhdGVUaW1lOjpJU084NjAxLCAoaW50KSAkcGF5bG9hZC0+aWF0KQogICAgICAgICAgICApOwogICAgICAgICAgICAkZXgtPnNldFBheWxvYWQoJHBheWxvYWQpOwogICAgICAgICAgICB0aHJvdyAkZXg7CiAgICAgICAgfQoKICAgICAgICAvLyBDaGVjayBpZiB0aGlzIHRva2VuIGhhcyBleHBpcmVkLgogICAgICAgIGlmIChpc3NldCgkcGF5bG9hZC0+ZXhwKSAmJiAoJHRpbWVzdGFtcCAtIHN0YXRpYzo6JGxlZXdheSkgPj0gJHBheWxvYWQtPmV4cCkgewogICAgICAgICAgICAkZXggPSBuZXcgRXhwaXJlZEV4Y2VwdGlvbignRXhwaXJlZCB0b2tlbicpOwogICAgICAgICAgICAkZXgtPnNldFBheWxvYWQoJHBheWxvYWQpOwogICAgICAgICAgICB0aHJvdyAkZXg7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHBheWxvYWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyBhbmQgc2lnbnMgYSBQSFAgYXJyYXkgaW50byBhIEpXVCBzdHJpbmcuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5PG1peGVkPiAgICAgICAgICAkcGF5bG9hZCBQSFAgYXJyYXkKICAgICAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2V8T3BlblNTTEFzeW1tZXRyaWNLZXl8T3BlblNTTENlcnRpZmljYXRlICRrZXkgVGhlIHNlY3JldCBrZXkuCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAgICRhbGcgICAgIFN1cHBvcnRlZCBhbGdvcml0aG1zIGFyZSAnRVMzODQnLCdFUzI1NicsICdFUzI1NksnLCAnSFMyNTYnLAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSFMzODQnLCAnSFM1MTInLCAnUlMyNTYnLCAnUlMzODQnLCBhbmQgJ1JTNTEyJwogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAka2V5SWQKICAgICAqIEBwYXJhbSBhcnJheTxzdHJpbmcsIHN0cmluZz4gJGhlYWQgICAgQW4gYXJyYXkgd2l0aCBoZWFkZXIgZWxlbWVudHMgdG8gYXR0YWNoCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgQSBzaWduZWQgSldUCiAgICAgKgogICAgICogQHVzZXMganNvbkVuY29kZQogICAgICogQHVzZXMgdXJsc2FmZUI2NEVuY29kZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVuY29kZSgKICAgICAgICBhcnJheSAkcGF5bG9hZCwKICAgICAgICAka2V5LAogICAgICAgIHN0cmluZyAkYWxnLAogICAgICAgIHN0cmluZyAka2V5SWQgPSBudWxsLAogICAgICAgIGFycmF5ICRoZWFkID0gbnVsbAogICAgKTogc3RyaW5nIHsKICAgICAgICAkaGVhZGVyID0gWyd0eXAnID0+ICdKV1QnXTsKICAgICAgICBpZiAoaXNzZXQoJGhlYWQpICYmIFxpc19hcnJheSgkaGVhZCkpIHsKICAgICAgICAgICAgJGhlYWRlciA9IFxhcnJheV9tZXJnZSgkaGVhZGVyLCAkaGVhZCk7CiAgICAgICAgfQogICAgICAgICRoZWFkZXJbJ2FsZyddID0gJGFsZzsKICAgICAgICBpZiAoJGtleUlkICE9PSBudWxsKSB7CiAgICAgICAgICAgICRoZWFkZXJbJ2tpZCddID0gJGtleUlkOwogICAgICAgIH0KICAgICAgICAkc2VnbWVudHMgPSBbXTsKICAgICAgICAkc2VnbWVudHNbXSA9IHN0YXRpYzo6dXJsc2FmZUI2NEVuY29kZSgoc3RyaW5nKSBzdGF0aWM6Ompzb25FbmNvZGUoJGhlYWRlcikpOwogICAgICAgICRzZWdtZW50c1tdID0gc3RhdGljOjp1cmxzYWZlQjY0RW5jb2RlKChzdHJpbmcpIHN0YXRpYzo6anNvbkVuY29kZSgkcGF5bG9hZCkpOwogICAgICAgICRzaWduaW5nX2lucHV0ID0gXGltcGxvZGUoJy4nLCAkc2VnbWVudHMpOwoKICAgICAgICAkc2lnbmF0dXJlID0gc3RhdGljOjpzaWduKCRzaWduaW5nX2lucHV0LCAka2V5LCAkYWxnKTsKICAgICAgICAkc2VnbWVudHNbXSA9IHN0YXRpYzo6dXJsc2FmZUI2NEVuY29kZSgkc2lnbmF0dXJlKTsKCiAgICAgICAgcmV0dXJuIFxpbXBsb2RlKCcuJywgJHNlZ21lbnRzKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNpZ24gYSBzdHJpbmcgd2l0aCBhIGdpdmVuIGtleSBhbmQgYWxnb3JpdGhtLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1zZyAgVGhlIG1lc3NhZ2UgdG8gc2lnbgogICAgICogQHBhcmFtIHN0cmluZ3xyZXNvdXJjZXxPcGVuU1NMQXN5bW1ldHJpY0tleXxPcGVuU1NMQ2VydGlmaWNhdGUgICRrZXkgIFRoZSBzZWNyZXQga2V5LgogICAgICogQHBhcmFtIHN0cmluZyAkYWxnICBTdXBwb3J0ZWQgYWxnb3JpdGhtcyBhcmUgJ0VkRFNBJywgJ0VTMzg0JywgJ0VTMjU2JywgJ0VTMjU2SycsICdIUzI1NicsCiAgICAgKiAgICAgICAgICAgICAgICAgICAgJ0hTMzg0JywgJ0hTNTEyJywgJ1JTMjU2JywgJ1JTMzg0JywgYW5kICdSUzUxMicKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBBbiBlbmNyeXB0ZWQgbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgRG9tYWluRXhjZXB0aW9uIFVuc3VwcG9ydGVkIGFsZ29yaXRobSBvciBiYWQga2V5IHdhcyBzcGVjaWZpZWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzaWduKAogICAgICAgIHN0cmluZyAkbXNnLAogICAgICAgICRrZXksCiAgICAgICAgc3RyaW5nICRhbGcKICAgICk6IHN0cmluZyB7CiAgICAgICAgaWYgKGVtcHR5KHN0YXRpYzo6JHN1cHBvcnRlZF9hbGdzWyRhbGddKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRG9tYWluRXhjZXB0aW9uKCdBbGdvcml0aG0gbm90IHN1cHBvcnRlZCcpOwogICAgICAgIH0KICAgICAgICBsaXN0KCRmdW5jdGlvbiwgJGFsZ29yaXRobSkgPSBzdGF0aWM6OiRzdXBwb3J0ZWRfYWxnc1skYWxnXTsKICAgICAgICBzd2l0Y2ggKCRmdW5jdGlvbikgewogICAgICAgICAgICBjYXNlICdoYXNoX2htYWMnOgogICAgICAgICAgICAgICAgaWYgKCFcaXNfc3RyaW5nKCRrZXkpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigna2V5IG11c3QgYmUgYSBzdHJpbmcgd2hlbiB1c2luZyBobWFjJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gXGhhc2hfaG1hYygkYWxnb3JpdGhtLCAkbXNnLCAka2V5LCB0cnVlKTsKICAgICAgICAgICAgY2FzZSAnb3BlbnNzbCc6CiAgICAgICAgICAgICAgICAkc2lnbmF0dXJlID0gJyc7CiAgICAgICAgICAgICAgICAkc3VjY2VzcyA9IFxvcGVuc3NsX3NpZ24oJG1zZywgJHNpZ25hdHVyZSwgJGtleSwgJGFsZ29yaXRobSk7IC8vIEBwaHBzdGFuLWlnbm9yZS1saW5lCiAgICAgICAgICAgICAgICBpZiAoISRzdWNjZXNzKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IERvbWFpbkV4Y2VwdGlvbignT3BlblNTTCB1bmFibGUgdG8gc2lnbiBkYXRhJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoJGFsZyA9PT0gJ0VTMjU2JyB8fCAkYWxnID09PSAnRVMyNTZLJykgewogICAgICAgICAgICAgICAgICAgICRzaWduYXR1cmUgPSBzZWxmOjpzaWduYXR1cmVGcm9tREVSKCRzaWduYXR1cmUsIDI1Nik7CiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGFsZyA9PT0gJ0VTMzg0JykgewogICAgICAgICAgICAgICAgICAgICRzaWduYXR1cmUgPSBzZWxmOjpzaWduYXR1cmVGcm9tREVSKCRzaWduYXR1cmUsIDM4NCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gJHNpZ25hdHVyZTsKICAgICAgICAgICAgY2FzZSAnc29kaXVtX2NyeXB0byc6CiAgICAgICAgICAgICAgICBpZiAoIVxmdW5jdGlvbl9leGlzdHMoJ3NvZGl1bV9jcnlwdG9fc2lnbl9kZXRhY2hlZCcpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IERvbWFpbkV4Y2VwdGlvbignbGlic29kaXVtIGlzIG5vdCBhdmFpbGFibGUnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghXGlzX3N0cmluZygka2V5KSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ2tleSBtdXN0IGJlIGEgc3RyaW5nIHdoZW4gdXNpbmcgRWREU0EnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGxhc3Qgbm9uLWVtcHR5IGxpbmUgaXMgdXNlZCBhcyB0aGUga2V5LgogICAgICAgICAgICAgICAgICAgICRsaW5lcyA9IGFycmF5X2ZpbHRlcihleHBsb2RlKCJcbiIsICRrZXkpKTsKICAgICAgICAgICAgICAgICAgICAka2V5ID0gYmFzZTY0X2RlY29kZSgoc3RyaW5nKSBlbmQoJGxpbmVzKSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKFxzdHJsZW4oJGtleSkgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IERvbWFpbkV4Y2VwdGlvbignS2V5IGNhbm5vdCBiZSBlbXB0eSBzdHJpbmcnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNvZGl1bV9jcnlwdG9fc2lnbl9kZXRhY2hlZCgkbXNnLCAka2V5KTsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBEb21haW5FeGNlcHRpb24oJGUtPmdldE1lc3NhZ2UoKSwgMCwgJGUpOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IERvbWFpbkV4Y2VwdGlvbignQWxnb3JpdGhtIG5vdCBzdXBwb3J0ZWQnKTsKICAgIH0KCiAgICAvKioKICAgICAqIFZlcmlmeSBhIHNpZ25hdHVyZSB3aXRoIHRoZSBtZXNzYWdlLCBrZXkgYW5kIG1ldGhvZC4gTm90IGFsbCBtZXRob2RzCiAgICAgKiBhcmUgc3ltbWV0cmljLCBzbyB3ZSBtdXN0IGhhdmUgYSBzZXBhcmF0ZSB2ZXJpZnkgYW5kIHNpZ24gbWV0aG9kLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1zZyAgICAgICAgIFRoZSBvcmlnaW5hbCBtZXNzYWdlIChoZWFkZXIgYW5kIGJvZHkpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzaWduYXR1cmUgICBUaGUgb3JpZ2luYWwgc2lnbmF0dXJlCiAgICAgKiBAcGFyYW0gc3RyaW5nfHJlc291cmNlfE9wZW5TU0xBc3ltbWV0cmljS2V5fE9wZW5TU0xDZXJ0aWZpY2F0ZSAgJGtleU1hdGVyaWFsIEZvciBFZCosIEVTKiwgSFMqLCBhIHN0cmluZyBrZXkgd29ya3MuIGZvciBSUyosIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgT3BlblNTTEFzeW1tZXRyaWNLZXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFsZyAgICAgICAgIFRoZSBhbGdvcml0aG0KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIERvbWFpbkV4Y2VwdGlvbiBJbnZhbGlkIEFsZ29yaXRobSwgYmFkIGtleSwgb3IgT3BlblNTTCBmYWlsdXJlCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHZlcmlmeSgKICAgICAgICBzdHJpbmcgJG1zZywKICAgICAgICBzdHJpbmcgJHNpZ25hdHVyZSwKICAgICAgICAka2V5TWF0ZXJpYWwsCiAgICAgICAgc3RyaW5nICRhbGcKICAgICk6IGJvb2wgewogICAgICAgIGlmIChlbXB0eShzdGF0aWM6OiRzdXBwb3J0ZWRfYWxnc1skYWxnXSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IERvbWFpbkV4Y2VwdGlvbignQWxnb3JpdGhtIG5vdCBzdXBwb3J0ZWQnKTsKICAgICAgICB9CgogICAgICAgIGxpc3QoJGZ1bmN0aW9uLCAkYWxnb3JpdGhtKSA9IHN0YXRpYzo6JHN1cHBvcnRlZF9hbGdzWyRhbGddOwogICAgICAgIHN3aXRjaCAoJGZ1bmN0aW9uKSB7CiAgICAgICAgICAgIGNhc2UgJ29wZW5zc2wnOgogICAgICAgICAgICAgICAgJHN1Y2Nlc3MgPSBcb3BlbnNzbF92ZXJpZnkoJG1zZywgJHNpZ25hdHVyZSwgJGtleU1hdGVyaWFsLCAkYWxnb3JpdGhtKTsgLy8gQHBocHN0YW4taWdub3JlLWxpbmUKICAgICAgICAgICAgICAgIGlmICgkc3VjY2VzcyA9PT0gMSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCRzdWNjZXNzID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxIG9uIHN1Y2Nlc3MsIDAgb24gZmFpbHVyZSwgLTEgb24gZXJyb3IuCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRG9tYWluRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICdPcGVuU1NMIGVycm9yOiAnIC4gXG9wZW5zc2xfZXJyb3Jfc3RyaW5nKCkKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIGNhc2UgJ3NvZGl1bV9jcnlwdG8nOgogICAgICAgICAgICAgICAgaWYgKCFcZnVuY3Rpb25fZXhpc3RzKCdzb2RpdW1fY3J5cHRvX3NpZ25fdmVyaWZ5X2RldGFjaGVkJykpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRG9tYWluRXhjZXB0aW9uKCdsaWJzb2RpdW0gaXMgbm90IGF2YWlsYWJsZScpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCFcaXNfc3RyaW5nKCRrZXlNYXRlcmlhbCkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdrZXkgbXVzdCBiZSBhIHN0cmluZyB3aGVuIHVzaW5nIEVkRFNBJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgIC8vIFRoZSBsYXN0IG5vbi1lbXB0eSBsaW5lIGlzIHVzZWQgYXMgdGhlIGtleS4KICAgICAgICAgICAgICAgICAgICAkbGluZXMgPSBhcnJheV9maWx0ZXIoZXhwbG9kZSgiXG4iLCAka2V5TWF0ZXJpYWwpKTsKICAgICAgICAgICAgICAgICAgICAka2V5ID0gYmFzZTY0X2RlY29kZSgoc3RyaW5nKSBlbmQoJGxpbmVzKSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKFxzdHJsZW4oJGtleSkgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IERvbWFpbkV4Y2VwdGlvbignS2V5IGNhbm5vdCBiZSBlbXB0eSBzdHJpbmcnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKFxzdHJsZW4oJHNpZ25hdHVyZSkgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IERvbWFpbkV4Y2VwdGlvbignU2lnbmF0dXJlIGNhbm5vdCBiZSBlbXB0eSBzdHJpbmcnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNvZGl1bV9jcnlwdG9fc2lnbl92ZXJpZnlfZGV0YWNoZWQoJHNpZ25hdHVyZSwgJG1zZywgJGtleSk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRG9tYWluRXhjZXB0aW9uKCRlLT5nZXRNZXNzYWdlKCksIDAsICRlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgY2FzZSAnaGFzaF9obWFjJzoKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIGlmICghXGlzX3N0cmluZygka2V5TWF0ZXJpYWwpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigna2V5IG11c3QgYmUgYSBzdHJpbmcgd2hlbiB1c2luZyBobWFjJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkaGFzaCA9IFxoYXNoX2htYWMoJGFsZ29yaXRobSwgJG1zZywgJGtleU1hdGVyaWFsLCB0cnVlKTsKICAgICAgICAgICAgICAgIHJldHVybiBzZWxmOjpjb25zdGFudFRpbWVFcXVhbHMoJGhhc2gsICRzaWduYXR1cmUpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIERlY29kZSBhIEpTT04gc3RyaW5nIGludG8gYSBQSFAgb2JqZWN0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGlucHV0IEpTT04gc3RyaW5nCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZCBUaGUgZGVjb2RlZCBKU09OIHN0cmluZwogICAgICoKICAgICAqIEB0aHJvd3MgRG9tYWluRXhjZXB0aW9uIFByb3ZpZGVkIHN0cmluZyB3YXMgaW52YWxpZCBKU09OCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24ganNvbkRlY29kZShzdHJpbmcgJGlucHV0KQogICAgewogICAgICAgICRvYmogPSBcanNvbl9kZWNvZGUoJGlucHV0LCBmYWxzZSwgNTEyLCBKU09OX0JJR0lOVF9BU19TVFJJTkcpOwoKICAgICAgICBpZiAoJGVycm5vID0gXGpzb25fbGFzdF9lcnJvcigpKSB7CiAgICAgICAgICAgIHNlbGY6OmhhbmRsZUpzb25FcnJvcigkZXJybm8pOwogICAgICAgIH0gZWxzZWlmICgkb2JqID09PSBudWxsICYmICRpbnB1dCAhPT0gJ251bGwnKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBEb21haW5FeGNlcHRpb24oJ051bGwgcmVzdWx0IHdpdGggbm9uLW51bGwgaW5wdXQnKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvYmo7CiAgICB9CgogICAgLyoqCiAgICAgKiBFbmNvZGUgYSBQSFAgYXJyYXkgaW50byBhIEpTT04gc3RyaW5nLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheTxtaXhlZD4gJGlucHV0IEEgUEhQIGFycmF5CiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgUEhQIGFycmF5CiAgICAgKgogICAgICogQHRocm93cyBEb21haW5FeGNlcHRpb24gUHJvdmlkZWQgb2JqZWN0IGNvdWxkIG5vdCBiZSBlbmNvZGVkIHRvIHZhbGlkIEpTT04KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBqc29uRW5jb2RlKGFycmF5ICRpbnB1dCk6IHN0cmluZwogICAgewogICAgICAgIGlmIChQSFBfVkVSU0lPTl9JRCA+PSA1MDQwMCkgewogICAgICAgICAgICAkanNvbiA9IFxqc29uX2VuY29kZSgkaW5wdXQsIFxKU09OX1VORVNDQVBFRF9TTEFTSEVTKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBQSFAgNS4zIG9ubHkKICAgICAgICAgICAgJGpzb24gPSBcanNvbl9lbmNvZGUoJGlucHV0KTsKICAgICAgICB9CiAgICAgICAgaWYgKCRlcnJubyA9IFxqc29uX2xhc3RfZXJyb3IoKSkgewogICAgICAgICAgICBzZWxmOjpoYW5kbGVKc29uRXJyb3IoJGVycm5vKTsKICAgICAgICB9IGVsc2VpZiAoJGpzb24gPT09ICdudWxsJykgewogICAgICAgICAgICB0aHJvdyBuZXcgRG9tYWluRXhjZXB0aW9uKCdOdWxsIHJlc3VsdCB3aXRoIG5vbi1udWxsIGlucHV0Jyk7CiAgICAgICAgfQogICAgICAgIGlmICgkanNvbiA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IERvbWFpbkV4Y2VwdGlvbignUHJvdmlkZWQgb2JqZWN0IGNvdWxkIG5vdCBiZSBlbmNvZGVkIHRvIHZhbGlkIEpTT04nKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRqc29uOwogICAgfQoKICAgIC8qKgogICAgICogRGVjb2RlIGEgc3RyaW5nIHdpdGggVVJMLXNhZmUgQmFzZTY0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGlucHV0IEEgQmFzZTY0IGVuY29kZWQgc3RyaW5nCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgQSBkZWNvZGVkIHN0cmluZwogICAgICoKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGludmFsaWQgYmFzZTY0IGNoYXJhY3RlcnMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1cmxzYWZlQjY0RGVjb2RlKHN0cmluZyAkaW5wdXQpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gXGJhc2U2NF9kZWNvZGUoc2VsZjo6Y29udmVydEJhc2U2NFVybFRvQmFzZTY0KCRpbnB1dCkpOwogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydCBhIHN0cmluZyBpbiB0aGUgYmFzZTY0dXJsIChVUkwtc2FmZSBCYXNlNjQpIGVuY29kaW5nIHRvIHN0YW5kYXJkIGJhc2U2NC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbnB1dCBBIEJhc2U2NCBlbmNvZGVkIHN0cmluZyB3aXRoIFVSTC1zYWZlIGNoYXJhY3RlcnMgKC1fIGFuZCBubyBwYWRkaW5nKQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIEEgQmFzZTY0IGVuY29kZWQgc3RyaW5nIHdpdGggc3RhbmRhcmQgY2hhcmFjdGVycyAoKy8pIGFuZCBwYWRkaW5nICg9KSwgd2hlbgogICAgICogbmVlZGVkLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzQ2NDgKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb252ZXJ0QmFzZTY0VXJsVG9CYXNlNjQoc3RyaW5nICRpbnB1dCk6IHN0cmluZwogICAgewogICAgICAgICRyZW1haW5kZXIgPSBcc3RybGVuKCRpbnB1dCkgJSA0OwogICAgICAgIGlmICgkcmVtYWluZGVyKSB7CiAgICAgICAgICAgICRwYWRsZW4gPSA0IC0gJHJlbWFpbmRlcjsKICAgICAgICAgICAgJGlucHV0IC49IFxzdHJfcmVwZWF0KCc9JywgJHBhZGxlbik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBcc3RydHIoJGlucHV0LCAnLV8nLCAnKy8nKTsKICAgIH0KCiAgICAvKioKICAgICAqIEVuY29kZSBhIHN0cmluZyB3aXRoIFVSTC1zYWZlIEJhc2U2NC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbnB1dCBUaGUgc3RyaW5nIHlvdSB3YW50IGVuY29kZWQKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgYmFzZTY0IGVuY29kZSBvZiB3aGF0IHlvdSBwYXNzZWQgaW4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1cmxzYWZlQjY0RW5jb2RlKHN0cmluZyAkaW5wdXQpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gXHN0cl9yZXBsYWNlKCc9JywgJycsIFxzdHJ0cihcYmFzZTY0X2VuY29kZSgkaW5wdXQpLCAnKy8nLCAnLV8nKSk7CiAgICB9CgoKICAgIC8qKgogICAgICogRGV0ZXJtaW5lIGlmIGFuIGFsZ29yaXRobSBoYXMgYmVlbiBwcm92aWRlZCBmb3IgZWFjaCBLZXkKICAgICAqCiAgICAgKiBAcGFyYW0gS2V5fEFycmF5QWNjZXNzPHN0cmluZyxLZXk+fGFycmF5PHN0cmluZyxLZXk+ICRrZXlPcktleUFycmF5CiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgICAgICAgICAgICAka2lkCiAgICAgKgogICAgICogQHRocm93cyBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIEtleQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBnZXRLZXkoCiAgICAgICAgJGtleU9yS2V5QXJyYXksCiAgICAgICAgP3N0cmluZyAka2lkCiAgICApOiBLZXkgewogICAgICAgIGlmICgka2V5T3JLZXlBcnJheSBpbnN0YW5jZW9mIEtleSkgewogICAgICAgICAgICByZXR1cm4gJGtleU9yS2V5QXJyYXk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW1wdHkoJGtpZCkgJiYgJGtpZCAhPT0gJzAnKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24oJyJraWQiIGVtcHR5LCB1bmFibGUgdG8gbG9va3VwIGNvcnJlY3Qga2V5Jyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGtleU9yS2V5QXJyYXkgaW5zdGFuY2VvZiBDYWNoZWRLZXlTZXQpIHsKICAgICAgICAgICAgLy8gU2tpcCAiaXNzZXQiIGNoZWNrLCBhcyB0aGlzIHdpbGwgYXV0b21hdGljYWxseSByZWZyZXNoIGlmIG5vdCBzZXQKICAgICAgICAgICAgcmV0dXJuICRrZXlPcktleUFycmF5WyRraWRdOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFpc3NldCgka2V5T3JLZXlBcnJheVska2lkXSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbignImtpZCIgaW52YWxpZCwgdW5hYmxlIHRvIGxvb2t1cCBjb3JyZWN0IGtleScpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRrZXlPcktleUFycmF5WyRraWRdOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkbGVmdCAgVGhlIHN0cmluZyBvZiBrbm93biBsZW5ndGggdG8gY29tcGFyZSBhZ2FpbnN0CiAgICAgKiBAcGFyYW0gc3RyaW5nICRyaWdodCBUaGUgdXNlci1zdXBwbGllZCBzdHJpbmcKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbnN0YW50VGltZUVxdWFscyhzdHJpbmcgJGxlZnQsIHN0cmluZyAkcmlnaHQpOiBib29sCiAgICB7CiAgICAgICAgaWYgKFxmdW5jdGlvbl9leGlzdHMoJ2hhc2hfZXF1YWxzJykpIHsKICAgICAgICAgICAgcmV0dXJuIFxoYXNoX2VxdWFscygkbGVmdCwgJHJpZ2h0KTsKICAgICAgICB9CiAgICAgICAgJGxlbiA9IFxtaW4oc2VsZjo6c2FmZVN0cmxlbigkbGVmdCksIHNlbGY6OnNhZmVTdHJsZW4oJHJpZ2h0KSk7CgogICAgICAgICRzdGF0dXMgPSAwOwogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRsZW47ICRpKyspIHsKICAgICAgICAgICAgJHN0YXR1cyB8PSAoXG9yZCgkbGVmdFskaV0pIF4gXG9yZCgkcmlnaHRbJGldKSk7CiAgICAgICAgfQogICAgICAgICRzdGF0dXMgfD0gKHNlbGY6OnNhZmVTdHJsZW4oJGxlZnQpIF4gc2VsZjo6c2FmZVN0cmxlbigkcmlnaHQpKTsKCiAgICAgICAgcmV0dXJuICgkc3RhdHVzID09PSAwKTsKICAgIH0KCiAgICAvKioKICAgICAqIEhlbHBlciBtZXRob2QgdG8gY3JlYXRlIGEgSlNPTiBlcnJvci4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRlcnJubyBBbiBlcnJvciBudW1iZXIgZnJvbSBqc29uX2xhc3RfZXJyb3IoKQogICAgICoKICAgICAqIEB0aHJvd3MgRG9tYWluRXhjZXB0aW9uCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGhhbmRsZUpzb25FcnJvcihpbnQgJGVycm5vKTogdm9pZAogICAgewogICAgICAgICRtZXNzYWdlcyA9IFsKICAgICAgICAgICAgSlNPTl9FUlJPUl9ERVBUSCA9PiAnTWF4aW11bSBzdGFjayBkZXB0aCBleGNlZWRlZCcsCiAgICAgICAgICAgIEpTT05fRVJST1JfU1RBVEVfTUlTTUFUQ0ggPT4gJ0ludmFsaWQgb3IgbWFsZm9ybWVkIEpTT04nLAogICAgICAgICAgICBKU09OX0VSUk9SX0NUUkxfQ0hBUiA9PiAnVW5leHBlY3RlZCBjb250cm9sIGNoYXJhY3RlciBmb3VuZCcsCiAgICAgICAgICAgIEpTT05fRVJST1JfU1lOVEFYID0+ICdTeW50YXggZXJyb3IsIG1hbGZvcm1lZCBKU09OJywKICAgICAgICAgICAgSlNPTl9FUlJPUl9VVEY4ID0+ICdNYWxmb3JtZWQgVVRGLTggY2hhcmFjdGVycycgLy9QSFAgPj0gNS4zLjMKICAgICAgICBdOwogICAgICAgIHRocm93IG5ldyBEb21haW5FeGNlcHRpb24oCiAgICAgICAgICAgIGlzc2V0KCRtZXNzYWdlc1skZXJybm9dKQogICAgICAgICAgICA/ICRtZXNzYWdlc1skZXJybm9dCiAgICAgICAgICAgIDogJ1Vua25vd24gSlNPTiBlcnJvcjogJyAuICRlcnJubwogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIG51bWJlciBvZiBieXRlcyBpbiBjcnlwdG9ncmFwaGljIHN0cmluZ3MuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gc2FmZVN0cmxlbihzdHJpbmcgJHN0cik6IGludAogICAgewogICAgICAgIGlmIChcZnVuY3Rpb25fZXhpc3RzKCdtYl9zdHJsZW4nKSkgewogICAgICAgICAgICByZXR1cm4gXG1iX3N0cmxlbigkc3RyLCAnOGJpdCcpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gXHN0cmxlbigkc3RyKTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnZlcnQgYW4gRUNEU0Egc2lnbmF0dXJlIHRvIGFuIEFTTi4xIERFUiBzZXF1ZW5jZQogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAkc2lnIFRoZSBFQ0RTQSBzaWduYXR1cmUgdG8gY29udmVydAogICAgICogQHJldHVybiAgc3RyaW5nIFRoZSBlbmNvZGVkIERFUiBvYmplY3QKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gc2lnbmF0dXJlVG9ERVIoc3RyaW5nICRzaWcpOiBzdHJpbmcKICAgIHsKICAgICAgICAvLyBTZXBhcmF0ZSB0aGUgc2lnbmF0dXJlIGludG8gci12YWx1ZSBhbmQgcy12YWx1ZQogICAgICAgICRsZW5ndGggPSBtYXgoMSwgKGludCkgKFxzdHJsZW4oJHNpZykgLyAyKSk7CiAgICAgICAgbGlzdCgkciwgJHMpID0gXHN0cl9zcGxpdCgkc2lnLCAkbGVuZ3RoKTsKCiAgICAgICAgLy8gVHJpbSBsZWFkaW5nIHplcm9zCiAgICAgICAgJHIgPSBcbHRyaW0oJHIsICJceDAwIik7CiAgICAgICAgJHMgPSBcbHRyaW0oJHMsICJceDAwIik7CgogICAgICAgIC8vIENvbnZlcnQgci12YWx1ZSBhbmQgcy12YWx1ZSBmcm9tIHVuc2lnbmVkIGJpZy1lbmRpYW4gaW50ZWdlcnMgdG8KICAgICAgICAvLyBzaWduZWQgdHdvJ3MgY29tcGxlbWVudAogICAgICAgIGlmIChcb3JkKCRyWzBdKSA+IDB4N2YpIHsKICAgICAgICAgICAgJHIgPSAiXHgwMCIgLiAkcjsKICAgICAgICB9CiAgICAgICAgaWYgKFxvcmQoJHNbMF0pID4gMHg3ZikgewogICAgICAgICAgICAkcyA9ICJceDAwIiAuICRzOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHNlbGY6OmVuY29kZURFUigKICAgICAgICAgICAgc2VsZjo6QVNOMV9TRVFVRU5DRSwKICAgICAgICAgICAgc2VsZjo6ZW5jb2RlREVSKHNlbGY6OkFTTjFfSU5URUdFUiwgJHIpIC4KICAgICAgICAgICAgc2VsZjo6ZW5jb2RlREVSKHNlbGY6OkFTTjFfSU5URUdFUiwgJHMpCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEVuY29kZXMgYSB2YWx1ZSBpbnRvIGEgREVSIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gICBpbnQgICAgICR0eXBlIERFUiB0YWcKICAgICAqIEBwYXJhbSAgIHN0cmluZyAgJHZhbHVlIHRoZSB2YWx1ZSB0byBlbmNvZGUKICAgICAqCiAgICAgKiBAcmV0dXJuICBzdHJpbmcgIHRoZSBlbmNvZGVkIG9iamVjdAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBlbmNvZGVERVIoaW50ICR0eXBlLCBzdHJpbmcgJHZhbHVlKTogc3RyaW5nCiAgICB7CiAgICAgICAgJHRhZ19oZWFkZXIgPSAwOwogICAgICAgIGlmICgkdHlwZSA9PT0gc2VsZjo6QVNOMV9TRVFVRU5DRSkgewogICAgICAgICAgICAkdGFnX2hlYWRlciB8PSAweDIwOwogICAgICAgIH0KCiAgICAgICAgLy8gVHlwZQogICAgICAgICRkZXIgPSBcY2hyKCR0YWdfaGVhZGVyIHwgJHR5cGUpOwoKICAgICAgICAvLyBMZW5ndGgKICAgICAgICAkZGVyIC49IFxjaHIoXHN0cmxlbigkdmFsdWUpKTsKCiAgICAgICAgcmV0dXJuICRkZXIgLiAkdmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBFbmNvZGVzIHNpZ25hdHVyZSBmcm9tIGEgREVSIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgICRkZXIgYmluYXJ5IHNpZ25hdHVyZSBpbiBERVIgZm9ybWF0CiAgICAgKiBAcGFyYW0gICBpbnQgICAgICRrZXlTaXplIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0aGUga2V5CiAgICAgKgogICAgICogQHJldHVybiAgc3RyaW5nICB0aGUgc2lnbmF0dXJlCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21ERVIoc3RyaW5nICRkZXIsIGludCAka2V5U2l6ZSk6IHN0cmluZwogICAgewogICAgICAgIC8vIE9wZW5TU0wgcmV0dXJucyB0aGUgRUNEU0Egc2lnbmF0dXJlcyBhcyBhIGJpbmFyeSBBU04uMSBERVIgU0VRVUVOQ0UKICAgICAgICBsaXN0KCRvZmZzZXQsICRfKSA9IHNlbGY6OnJlYWRERVIoJGRlcik7CiAgICAgICAgbGlzdCgkb2Zmc2V0LCAkcikgPSBzZWxmOjpyZWFkREVSKCRkZXIsICRvZmZzZXQpOwogICAgICAgIGxpc3QoJG9mZnNldCwgJHMpID0gc2VsZjo6cmVhZERFUigkZGVyLCAkb2Zmc2V0KTsKCiAgICAgICAgLy8gQ29udmVydCByLXZhbHVlIGFuZCBzLXZhbHVlIGZyb20gc2lnbmVkIHR3bydzIGNvbXBsaW1lbnQgdG8gdW5zaWduZWQKICAgICAgICAvLyBiaWctZW5kaWFuIGludGVnZXJzCiAgICAgICAgJHIgPSBcbHRyaW0oJHIsICJceDAwIik7CiAgICAgICAgJHMgPSBcbHRyaW0oJHMsICJceDAwIik7CgogICAgICAgIC8vIFBhZCBvdXQgciBhbmQgcyBzbyB0aGF0IHRoZXkgYXJlICRrZXlTaXplIGJpdHMgbG9uZwogICAgICAgICRyID0gXHN0cl9wYWQoJHIsICRrZXlTaXplIC8gOCwgIlx4MDAiLCBTVFJfUEFEX0xFRlQpOwogICAgICAgICRzID0gXHN0cl9wYWQoJHMsICRrZXlTaXplIC8gOCwgIlx4MDAiLCBTVFJfUEFEX0xFRlQpOwoKICAgICAgICByZXR1cm4gJHIgLiAkczsKICAgIH0KCiAgICAvKioKICAgICAqIFJlYWRzIGJpbmFyeSBERVItZW5jb2RlZCBkYXRhIGFuZCBkZWNvZGVzIGludG8gYSBzaW5nbGUgb2JqZWN0CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZGVyIHRoZSBiaW5hcnkgZGF0YSBpbiBERVIgZm9ybWF0CiAgICAgKiBAcGFyYW0gaW50ICRvZmZzZXQgdGhlIG9mZnNldCBvZiB0aGUgZGF0YSBzdHJlYW0gY29udGFpbmluZyB0aGUgb2JqZWN0CiAgICAgKiB0byBkZWNvZGUKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5e2ludCwgc3RyaW5nfG51bGx9IHRoZSBuZXcgb2Zmc2V0IGFuZCB0aGUgZGVjb2RlZCBvYmplY3QKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gcmVhZERFUihzdHJpbmcgJGRlciwgaW50ICRvZmZzZXQgPSAwKTogYXJyYXkKICAgIHsKICAgICAgICAkcG9zID0gJG9mZnNldDsKICAgICAgICAkc2l6ZSA9IFxzdHJsZW4oJGRlcik7CiAgICAgICAgJGNvbnN0cnVjdGVkID0gKFxvcmQoJGRlclskcG9zXSkgPj4gNSkgJiAweDAxOwogICAgICAgICR0eXBlID0gXG9yZCgkZGVyWyRwb3MrK10pICYgMHgxZjsKCiAgICAgICAgLy8gTGVuZ3RoCiAgICAgICAgJGxlbiA9IFxvcmQoJGRlclskcG9zKytdKTsKICAgICAgICBpZiAoJGxlbiAmIDB4ODApIHsKICAgICAgICAgICAgJG4gPSAkbGVuICYgMHgxZjsKICAgICAgICAgICAgJGxlbiA9IDA7CiAgICAgICAgICAgIHdoaWxlICgkbi0tICYmICRwb3MgPCAkc2l6ZSkgewogICAgICAgICAgICAgICAgJGxlbiA9ICgkbGVuIDw8IDgpIHwgXG9yZCgkZGVyWyRwb3MrK10pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBWYWx1ZQogICAgICAgIGlmICgkdHlwZSA9PT0gc2VsZjo6QVNOMV9CSVRfU1RSSU5HKSB7CiAgICAgICAgICAgICRwb3MrKzsgLy8gU2tpcCB0aGUgZmlyc3QgY29udGVudHMgb2N0ZXQgKHBhZGRpbmcgaW5kaWNhdG9yKQogICAgICAgICAgICAkZGF0YSA9IFxzdWJzdHIoJGRlciwgJHBvcywgJGxlbiAtIDEpOwogICAgICAgICAgICAkcG9zICs9ICRsZW4gLSAxOwogICAgICAgIH0gZWxzZWlmICghJGNvbnN0cnVjdGVkKSB7CiAgICAgICAgICAgICRkYXRhID0gXHN1YnN0cigkZGVyLCAkcG9zLCAkbGVuKTsKICAgICAgICAgICAgJHBvcyArPSAkbGVuOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRkYXRhID0gbnVsbDsKICAgICAgICB9CgogICAgICAgIHJldHVybiBbJHBvcywgJGRhdGFdOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/firebase/php-jwt/src/JWTExceptionWithPayloadInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEZpcmViYXNlXEpXVDsKCmludGVyZmFjZSBKV1RFeGNlcHRpb25XaXRoUGF5bG9hZEludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEdldCB0aGUgcGF5bG9hZCB0aGF0IGNhdXNlZCB0aGlzIGV4Y2VwdGlvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIG9iamVjdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGF5bG9hZCgpOiBvYmplY3Q7CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHBheWxvYWQgdGhhdCBjYXVzZWQgdGhpcyBleGNlcHRpb24uCiAgICAgKgogICAgICogQHBhcmFtIG9iamVjdCAkcGF5bG9hZAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQYXlsb2FkKG9iamVjdCAkcGF5bG9hZCk6IHZvaWQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/firebase/php-jwt/src/Key.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBGaXJlYmFzZVxKV1Q7Cgp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgT3BlblNTTEFzeW1tZXRyaWNLZXk7CnVzZSBPcGVuU1NMQ2VydGlmaWNhdGU7CnVzZSBUeXBlRXJyb3I7CgpjbGFzcyBLZXkKewogICAgLyoqIEB2YXIgc3RyaW5nfHJlc291cmNlfE9wZW5TU0xBc3ltbWV0cmljS2V5fE9wZW5TU0xDZXJ0aWZpY2F0ZSAqLwogICAgcHJpdmF0ZSAka2V5TWF0ZXJpYWw7CiAgICAvKiogQHZhciBzdHJpbmcgKi8KICAgIHByaXZhdGUgJGFsZ29yaXRobTsKCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2V8T3BlblNTTEFzeW1tZXRyaWNLZXl8T3BlblNTTENlcnRpZmljYXRlICRrZXlNYXRlcmlhbAogICAgICogQHBhcmFtIHN0cmluZyAkYWxnb3JpdGhtCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICAka2V5TWF0ZXJpYWwsCiAgICAgICAgc3RyaW5nICRhbGdvcml0aG0KICAgICkgewogICAgICAgIGlmICgKICAgICAgICAgICAgIVxpc19zdHJpbmcoJGtleU1hdGVyaWFsKQogICAgICAgICAgICAmJiAhJGtleU1hdGVyaWFsIGluc3RhbmNlb2YgT3BlblNTTEFzeW1tZXRyaWNLZXkKICAgICAgICAgICAgJiYgISRrZXlNYXRlcmlhbCBpbnN0YW5jZW9mIE9wZW5TU0xDZXJ0aWZpY2F0ZQogICAgICAgICAgICAmJiAhXGlzX3Jlc291cmNlKCRrZXlNYXRlcmlhbCkKICAgICAgICApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignS2V5IG1hdGVyaWFsIG11c3QgYmUgYSBzdHJpbmcsIHJlc291cmNlLCBvciBPcGVuU1NMQXN5bW1ldHJpY0tleScpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGVtcHR5KCRrZXlNYXRlcmlhbCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignS2V5IG1hdGVyaWFsIG11c3Qgbm90IGJlIGVtcHR5Jyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW1wdHkoJGFsZ29yaXRobSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignQWxnb3JpdGhtIG11c3Qgbm90IGJlIGVtcHR5Jyk7CiAgICAgICAgfQoKICAgICAgICAvLyBUT0RPOiBSZW1vdmUgaW4gUEhQIDguMCBpbiBmYXZvciBvZiBjbGFzcyBjb25zdHJ1Y3RvciBwcm9wZXJ0eSBwcm9tb3Rpb24KICAgICAgICAkdGhpcy0+a2V5TWF0ZXJpYWwgPSAka2V5TWF0ZXJpYWw7CiAgICAgICAgJHRoaXMtPmFsZ29yaXRobSA9ICRhbGdvcml0aG07CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIGFsZ29yaXRobSB2YWxpZCBmb3IgdGhpcyBrZXkKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QWxnb3JpdGhtKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YWxnb3JpdGhtOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmd8cmVzb3VyY2V8T3BlblNTTEFzeW1tZXRyaWNLZXl8T3BlblNTTENlcnRpZmljYXRlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRLZXlNYXRlcmlhbCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5rZXlNYXRlcmlhbDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/firebase/php-jwt/src/SignatureInvalidException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBGaXJlYmFzZVxKV1Q7CgpjbGFzcyBTaWduYXR1cmVJbnZhbGlkRXhjZXB0aW9uIGV4dGVuZHMgXFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbgp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/CHANGELOG.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBDaGFuZ2UgTG9nCgpQbGVhc2UgcmVmZXIgdG8gW1VQR1JBRElOR10oVVBHUkFESU5HLm1kKSBndWlkZSBmb3IgdXBncmFkaW5nIHRvIGEgbWFqb3IgdmVyc2lvbi4KCiMjIDcuMTAuMCAtIDIwMjUtMDgtMjMKCiMjIyBBZGRlZAoKLSBTdXBwb3J0IGZvciBQSFAgOC41CgojIyMgQ2hhbmdlZAoKLSBBZGp1c3RlZCBgZ3V6emxlaHR0cC9wcm9taXNlc2AgdmVyc2lvbiBjb25zdHJhaW50IHRvIGBeMi4zYAotIEFkanVzdGVkIGBndXp6bGVodHRwL3BzcjdgIHZlcnNpb24gY29uc3RyYWludCB0byBgXjIuOGAKCgojIyA3LjkuMyAtIDIwMjUtMDMtMjcKCiMjIyBDaGFuZ2VkCgotIFJlbW92ZSBleHBsaWNpdCBjb250ZW50LWxlbmd0aCBoZWFkZXIgZm9yIEdFVCByZXF1ZXN0cwotIEltcHJvdmUgY29tcGF0aWJpbGl0eSB3aXRoIGJhZCBzZXJ2ZXJzIGZvciBib29sZWFuIGNvb2tpZSB2YWx1ZXMKCgojIyA3LjkuMiAtIDIwMjQtMDctMjQKCiMjIyBGaXhlZAoKLSBBZGp1c3RlZCBoYW5kbGVyIHNlbGVjdGlvbiB0byB1c2UgY1VSTCBpZiBpdHMgdmVyc2lvbiBpcyA3LjIxLjIgb3IgaGlnaGVyLCByYXRoZXIgdGhhbiA3LjM0LjAKCgojIyA3LjkuMSAtIDIwMjQtMDctMTkKCiMjIyBGaXhlZAoKLSBGaXggVExTIDEuMyBjaGVjayBmb3IgSFRUUC8yIHJlcXVlc3RzCgoKIyMgNy45LjAgLSAyMDI0LTA3LTE4CgojIyMgQ2hhbmdlZAoKLSBJbXByb3ZlIHByb3RvY29sIHZlcnNpb24gY2hlY2tzIHRvIHByb3ZpZGUgZmVlZGJhY2sgYXJvdW5kIHVuc3VwcG9ydGVkIHByb3RvY29scwotIE9ubHkgc2VsZWN0IHRoZSBjVVJMIGhhbmRsZXIgYnkgZGVmYXVsdCBpZiA3LjM0LjAgb3IgaGlnaGVyIGlzIGxpbmtlZAotIEltcHJvdmVkIGBDdXJsTXVsdGlIYW5kbGVyYCB0byBhdm9pZCBidXN5IHdhaXQgaWYgcG9zc2libGUKLSBEcm9wcGVkIHN1cHBvcnQgZm9yIEVPTCBgZ3V6emxlaHR0cC9wc3I3YCB2MQotIEltcHJvdmVkIFVSSSB1c2VyIGluZm8gcmVkYWN0aW9uIGluIGVycm9ycwoKIyMgNy44LjIgLSAyMDI0LTA3LTE4CgojIyMgQWRkZWQKCi0gU3VwcG9ydCBmb3IgUEhQIDguNAoKCiMjIDcuOC4xIC0gMjAyMy0xMi0wMwoKIyMjIENoYW5nZWQKCi0gVXBkYXRlZCBsaW5rcyBpbiBkb2NzIHRvIHRoZWlyIGNhbm9uaWNhbCB2ZXJzaW9ucwotIFJlcGxhY2VkIGBjYWxsX3VzZXJfZnVuYypgIHdpdGggbmF0aXZlIGNhbGxzCgoKIyMgNy44LjAgLSAyMDIzLTA4LTI3CgojIyMgQWRkZWQKCi0gU3VwcG9ydCBmb3IgUEhQIDguMwotIEFkZGVkIGF1dG9tYXRpYyBjbG9zaW5nIG9mIGhhbmRsZXMgb24gYEN1cmxGYWN0b3J5YCBvYmplY3QgZGVzdHJ1Y3Rpb24KCgojIyA3LjcuMSAtIDIwMjMtMDgtMjcKCiMjIyBDaGFuZ2VkCgotIFJlbW92ZSB0aGUgbmVlZCBmb3IgYEFsbG93RHluYW1pY1Byb3BlcnRpZXNgIGluIGBDdXJsTXVsdGlIYW5kbGVyYAoKCiMjIDcuNy4wIC0gMjAyMy0wNS0yMQoKIyMjIEFkZGVkCgotIFN1cHBvcnQgYGd1enpsZWh0dHAvcHJvbWlzZXNgIHYyCgoKIyMgNy42LjEgLSAyMDIzLTA1LTE1CgojIyMgRml4ZWQKCi0gRml4IGBTZXRDb29raWU6OmZyb21TdHJpbmdgIE1heEFnZSBkZXByZWNhdGlvbiB3YXJuaW5nIGFuZCBza2lwIGludmFsaWQgTWF4QWdlIHZhbHVlcwoKCiMjIDcuNi4wIC0gMjAyMy0wNS0xNAoKIyMjIEFkZGVkCgotIFN1cHBvcnQgZm9yIHNldHRpbmcgdGhlIG1pbmltdW0gVExTIHZlcnNpb24gaW4gYSB1bmlmaWVkIHdheQotIEFwcGx5IG9uIHJlcXVlc3QgdGhlIHZlcnNpb24gc2V0IGluIG9wdGlvbnMgcGFyYW1ldGVycwoKCiMjIDcuNS4yIC0gMjAyMy0wNS0xNAoKIyMjIEZpeGVkCgotIEZpeGVkIHNldCBjb29raWUgY29uc3RydWN0b3IgdmFsaWRhdGlvbgotIEZpeGVkIGhhbmRsaW5nIG9mIGZpbGVzIHdpdGggYCcwJ2AgYm9keQoKIyMjIENoYW5nZWQKCi0gQ29ycmVjdGVkIGRvY3MgYW5kIGRlZmF1bHQgY29ubmVjdCB0aW1lb3V0IHZhbHVlIHRvIDMwMCBzZWNvbmRzCgoKIyMgNy41LjEgLSAyMDIzLTA0LTE3CgojIyMgRml4ZWQKCi0gRml4ZWQgYE5PX1BST1hZYCBzZXR0aW5ncyBzbyB0aGF0IHNldHRpbmcgdGhlIGBwcm94eWAgb3B0aW9uIHRvIGBub2Agb3ZlcnJpZGVzIHRoZSBlbnYgdmFyaWFibGUKCiMjIyBDaGFuZ2VkCgotIEFkanVzdGVkIGBndXp6bGVodHRwL3BzcjdgIHZlcnNpb24gY29uc3RyYWludCB0byBgXjEuOS4xIHx8IF4yLjQuNWAKCgojIyA3LjUuMCAtIDIwMjItMDgtMjgKCiMjIyBBZGRlZAoKLSBTdXBwb3J0IFBIUCA4LjIKLSBBZGQgcmVxdWVzdCB0byBkZWxheSBjbG9zdXJlIHBhcmFtcwoKCiMjIDcuNC41IC0gMjAyMi0wNi0yMAoKIyMjIEZpeGVkCgoqIEZpeCBjaGFuZ2UgaW4gcG9ydCBzaG91bGQgYmUgY29uc2lkZXJlZCBhIGNoYW5nZSBpbiBvcmlnaW4KKiBGaXggYENVUkxPUFRfSFRUUEFVVEhgIG9wdGlvbiBub3QgY2xlYXJlZCBvbiBjaGFuZ2Ugb2Ygb3JpZ2luCgoKIyMgNy40LjQgLSAyMDIyLTA2LTA5CgojIyMgRml4ZWQKCiogRml4IGZhaWx1cmUgdG8gc3RyaXAgQXV0aG9yaXphdGlvbiBoZWFkZXIgb24gSFRUUCBkb3duZ3JhZGUKKiBGaXggZmFpbHVyZSB0byBzdHJpcCB0aGUgQ29va2llIGhlYWRlciBvbiBjaGFuZ2UgaW4gaG9zdCBvciBIVFRQIGRvd25ncmFkZQoKCiMjIDcuNC4zIC0gMjAyMi0wNS0yNQoKIyMjIEZpeGVkCgoqIEZpeCBjcm9zcy1kb21haW4gY29va2llIGxlYWthZ2UKCgojIyA3LjQuMiAtIDIwMjItMDMtMjAKCiMjIyBGaXhlZAoKLSBSZW1vdmUgY3VybCBhdXRoIG9uIGNyb3NzLWRvbWFpbiByZWRpcmVjdHMgdG8gYWxpZ24gd2l0aCB0aGUgQXV0aG9yaXphdGlvbiBIVFRQIGhlYWRlcgotIFJlamVjdCBub24tSFRUUCBzY2hlbWVzIGluIFN0cmVhbUhhbmRsZXIKLSBTZXQgYSBkZWZhdWx0IHNzbC5wZWVyX25hbWUgY29udGV4dCBpbiBTdHJlYW1IYW5kbGVyIHRvIGFsbG93IGBmb3JjZV9pcF9yZXNvbHZlYAoKCiMjIDcuNC4xIC0gMjAyMS0xMi0wNgoKIyMjIENoYW5nZWQKCi0gUmVwbGFjZWQgaW1wbGljaXQgVVJJIHRvIHN0cmluZyBjb2VyY2lvbiBbIzI5NDZdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjk0NikKLSBBbGxvdyBgc3ltZm9ueS9kZXByZWNhdGlvbi1jb250cmFjdHNgIHZlcnNpb24gMyBbIzI5NjFdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjk2MSkKCiMjIyBGaXhlZAoKLSBPbmx5IGNsb3NlIGN1cmwgaGFuZGxlIGlmIGl0J3MgZG9uZSBbIzI5NTBdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjk1MCkKCgojIyA3LjQuMCAtIDIwMjEtMTAtMTgKCiMjIyBBZGRlZAoKLSBTdXBwb3J0IFBIUCA4LjEgWyMyOTI5XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI5MjkpLCBbIzI5MzldKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjkzOSkKLSBTdXBwb3J0IGBwc3IvbG9nYCB2ZXJzaW9uIDIgYW5kIDMgWyMyOTQzXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI5NDMpCgojIyMgRml4ZWQKCi0gTWFrZSBzdXJlIHdlIGFsd2F5cyBjYWxsIGByZXN0b3JlX2Vycm9yX2hhbmRsZXIoKWAgWyMyOTE1XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI5MTUpCi0gRml4IHByb2dyZXNzIHBhcmFtZXRlciB0eXBlIGNvbXBhdGliaWxpdHkgYmV0d2VlbiB0aGUgY1VSTCBhbmQgc3RyZWFtIGhhbmRsZXJzIFsjMjkzNl0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yOTM2KQotIFRocm93IGBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb25gIHdoZW4gYW4gaW5jb3JyZWN0IGBoZWFkZXJzYCBhcnJheSBpcyBwcm92aWRlZCBbIzI5MTZdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjkxNiksIFsjMjk0Ml0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yOTQyKQoKIyMjIENoYW5nZWQKCi0gQmUgbW9yZSBzdHJpY3Qgd2l0aCB0eXBlcyBbIzI5MTRdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjkxNCksIFsjMjkxN10oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yOTE3KSwgWyMyOTE5XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI5MTkpLCBbIzI5NDVdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjk0NSkKCgojIyA3LjMuMCAtIDIwMjEtMDMtMjMKCiMjIyBBZGRlZAoKLSBTdXBwb3J0IGZvciBERVIgYW5kIFAxMiBjZXJ0aWZpY2F0ZXMgWyMyNDEzXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI0MTMpCi0gU3VwcG9ydCB0aGUgY1VSTCAoaHR0cDovLykgc2NoZW1lIGZvciBTdHJlYW1IYW5kbGVyIHByb3hpZXMgWyMyODUwXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI4NTApCi0gU3VwcG9ydCBmb3IgYGd1enpsZWh0dHAvcHNyNzpeMi4wYCBbIzI4NzhdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjg3OCkKCiMjIyBGaXhlZAoKLSBIYW5kbGUgZXhjZXB0aW9ucyBvbiBpbnZhbGlkIGhlYWRlciBjb25zaXN0ZW50bHkgYmV0d2VlbiBQSFAgdmVyc2lvbnMgYW5kIGhhbmRsZXJzIFsjMjg3Ml0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yODcyKQoKCiMjIDcuMi4wIC0gMjAyMC0xMC0xMAoKIyMjIEFkZGVkCgotIFN1cHBvcnQgZm9yIFBIUCA4IFsjMjcxMl0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yNzEyKSwgWyMyNzE1XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI3MTUpLCBbIzI3ODldKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjc4OSkKLSBTdXBwb3J0IHBhc3NpbmcgYSBib2R5IHN1bW1hcml6ZXIgdG8gdGhlIGh0dHAgZXJyb3JzIG1pZGRsZXdhcmUgWyMyNzk1XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI3OTUpCgojIyMgRml4ZWQKCi0gSGFuZGxlIGV4Y2VwdGlvbnMgZHVyaW5nIHJlc3BvbnNlIGNyZWF0aW9uIFsjMjU5MV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yNTkxKQotIEZpeCBDVVJMT1BUX0VOQ09ESU5HIG5vdCB0byBiZSBvdmVyd3JpdHRlbiBbIzI1OTVdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjU5NSkKLSBNYWtlIHN1cmUgdGhlIFJlcXVlc3QgYWx3YXlzIGhhcyBhIGJvZHkgb2JqZWN0IFsjMjgwNF0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yODA0KQoKIyMjIENoYW5nZWQKCi0gVGhlIGBUb29NYW55UmVkaXJlY3RzRXhjZXB0aW9uYCBoYXMgYSByZXNwb25zZSBbIzI2NjBdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjY2MCkKLSBBdm9pZCAiZnVuY3Rpb25zIiBmcm9tIGRlcGVuZGVuY2llcyBbIzI3MTJdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjcxMikKCiMjIyBEZXByZWNhdGVkCgotIFVzaW5nIGVudmlyb25tZW50IHZhcmlhYmxlIEdVWlpMRV9DVVJMX1NFTEVDVF9USU1FT1VUIFsjMjc4Nl0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yNzg2KQoKCiMjIDcuMS4xIC0gMjAyMC0wOS0zMAoKIyMjIEZpeGVkCgotIEluY29ycmVjdCBFT0YgZGV0ZWN0aW9uIGZvciByZXNwb25zZSBib2R5IHN0cmVhbXMgb24gV2luZG93cy4KCiMjIyBDaGFuZ2VkCgotIFdlIGRvbnQgY29ubmVjdCBjdXJsIGBzaW5rYCBvbiBIRUFEIHJlcXVlc3RzLgotIFJlbW92ZWQgc29tZSBQSFAgNSB3b3JrYXJvdW5kcwoKCiMjIDcuMS4wIC0gMjAyMC0wOS0yMgoKIyMjIEFkZGVkCgotIGBHdXp6bGVIdHRwXE1lc3NhZ2VGb3JtYXR0ZXJJbnRlcmZhY2VgCgojIyMgRml4ZWQKCi0gRml4ZWQgaXNzdWUgdGhhdCBjYXVzZWQgY29va2llcyB3aXRoIG5vIHZhbHVlIG5vdCB0byBiZSBzdG9yZWQuCi0gT24gcmVkaXJlY3RzLCB3ZSBhbGxvdyBhbGwgc2FmZSBtZXRob2RzIGxpa2UgR0VULCBIRUFEIGFuZCBPUFRJT05TLgotIEZpeGVkIGxvZ2dpbmcgb24gZW1wdHkgcmVzcG9uc2VzLgotIE1ha2Ugc3VyZSBNZXNzYWdlRm9ybWF0dGVyOjpmb3JtYXQgcmV0dXJucyBzdHJpbmcKCiMjIyBEZXByZWNhdGVkCgotIEFsbCBmdW5jdGlvbnMgaW4gYEd1enpsZUh0dHBgIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBzdGF0aWMgbWV0aG9kcyBvbiBgVXRpbHNgIGluc3RlYWQuCi0gYENsaWVudEludGVyZmFjZTo6Z2V0Q29uZmlnKClgCi0gYENsaWVudDo6Z2V0Q29uZmlnKClgCi0gYENsaWVudDo6X19jYWxsKClgCi0gYFV0aWxzOjpkZWZhdWx0Q2FCdW5kbGUoKWAKLSBgQ3VybEZhY3Rvcnk6OkxPV19DVVJMX1ZFUlNJT05fTlVNQkVSYAoKCiMjIDcuMC4xIC0gMjAyMC0wNi0yNwoKKiBGaXggbXVsdGlwbHkgZGVmaW5lZCBmdW5jdGlvbnMgZmF0YWwgZXJyb3IgWyMyNjk5XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI2OTkpCgoKIyMgNy4wLjAgLSAyMDIwLTA2LTI3CgpObyBjaGFuZ2VzIHNpbmNlIDcuMC4wLXJjMS4KCgojIyA3LjAuMC1yYzEgLSAyMDIwLTA2LTE1CgojIyMgQ2hhbmdlZAoKKiBVc2UgZXJyb3IgbGV2ZWwgZm9yIGxvZ2dpbmcgZXJyb3JzIGluIE1pZGRsZXdhcmUgWyMyNjI5XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI2MjkpCiogRGlzYWJsZWQgSUROIHN1cHBvcnQgYnkgZGVmYXVsdCBhbmQgcmVxdWlyZSBleHQtaW50bCB0byB1c2UgaXQgWyMyNjc1XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI2NzUpCgoKIyMgNy4wLjAtYmV0YTIgLSAyMDIwLTA1LTI1CgojIyMgQWRkZWQKCiogVXNpbmcgYFV0aWxzYCBjbGFzcyBpbnN0ZWFkIG9mIGZ1bmN0aW9ucyBpbiB0aGUgYEd1enpsZUh0dHBgIG5hbWVzcGFjZS4gWyMyNTQ2XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI1NDYpCiogYENsaWVudEludGVyZmFjZTo6TUFKT1JfVkVSU0lPTmAgWyMyNTgzXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI1ODMpCgojIyMgQ2hhbmdlZAoKKiBBdm9pZCB0aGUgYGdldGVudmAgZnVuY3Rpb24gd2hlbiB1bnNhZmUgWyMyNTMxXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI1MzEpCiogQWRkZWQgcmVhbCBjbGllbnQgbWV0aG9kcyBbIzI1MjldKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjUyOSkKKiBBdm9pZCBmdW5jdGlvbnMgZHVlIHRvIGdsb2JhbCBpbnN0YWxsIGNvbmZsaWN0cyBbIzI1NDZdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjU0NikKKiBVc2UgU3ltZm9ueSBpbnRsLWlkbiBwb2x5ZmlsbCBbIzI1NTBdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjU1MCkKKiBBZGRpbmcgbWV0aG9kcyBmb3IgSFRUUCB2ZXJicyBsaWtlIGBDbGllbnQ6OmdldCgpYCwgYENsaWVudDo6aGVhZCgpYCwgYENsaWVudDo6cGF0Y2goKWAgZXRjIFsjMjUyOV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yNTI5KQoqIGBDb25uZWN0RXhjZXB0aW9uYCBleHRlbmRzIGBUcmFuc2ZlckV4Y2VwdGlvbmAgWyMyNTQxXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI1NDEpCiogVXBkYXRlZCB0aGUgZGVmYXVsdCBVc2VyIEFnZW50IHRvICJHdXp6bGVIdHRwLzciIFsjMjY1NF0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yNjU0KQoKIyMjIEZpeGVkCgoqIFZhcmlvdXMgaW50bCBpY3UgaXNzdWVzIFsjMjYyNl0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yNjI2KQoKIyMjIFJlbW92ZWQKCiogUG9vbCBvcHRpb24gYHBvb2xfc2l6ZWAgWyMyNTI4XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI1MjgpCgoKIyMgNy4wLjAtYmV0YTEgLSAyMDE5LTEyLTMwCgpUaGUgZGlmZiBtaWdodCBsb29rIHZlcnkgYmlnIGJ1dCA5NSUgb2YgR3V6emxlIHVzZXJzIHdpbGwgYmUgYWJsZSB0byB1cGdyYWRlIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgpQbGVhc2Ugc2VlIFt0aGUgdXBncmFkZSBkb2N1bWVudF0oVVBHUkFESU5HLm1kKSB0aGF0IGRlc2NyaWJlcyBhbGwgQkMgYnJlYWtpbmcgY2hhbmdlcy4KCiMjIyBBZGRlZAoKKiBJbXBsZW1lbnQgUFNSLTE4IGFuZCBkcm9wcGVkIFBIUCA1IHN1cHBvcnQgWyMyNDIxXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI0MjEpIFsjMjQ3NF0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yNDc0KQoqIFBIUCA3IHR5cGVzIFsjMjQ0Ml0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yNDQyKSBbIzI0NDldKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjQ0OSkgWyMyNDY2XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI0NjYpIFsjMjQ5N10oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yNDk3KSBbIzI0OTldKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjQ5OSkKKiBJRE4gc3VwcG9ydCBmb3IgcmVkaXJlY3RzIFsyNDI0XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI0MjQpCgojIyMgQ2hhbmdlZAoKKiBEb250IGFsbG93IHBhc3NpbmcgbnVsbCBhcyB0aGlyZCBhcmd1bWVudCB0byBgQmFkUmVzcG9uc2VFeGNlcHRpb246Ol9fY29uc3RydWN0KClgIFsjMjQyN10oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yNDI3KQoqIFVzZSBTQVBJIGNvbnN0YW50IGluc3RlYWQgb2YgbWV0aG9kIGNhbGwgWyMyNDUwXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI0NTApCiogVXNlIG5hdGl2ZSBmdW5jdGlvbiBpbnZvY2F0aW9uIFsjMjQ0NF0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yNDQ0KQoqIEJldHRlciBkZWZhdWx0cyBmb3IgUEhQIGluc3RhbGxhdGlvbnMgd2l0aCBvbGQgSUNVIGxpYiBbMjQ1NF0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yNDU0KQoqIEFkZGVkIHZpc2liaWxpdHkgdG8gYWxsIGNvbnN0YW50cyBbIzI0NjJdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjQ2MikKKiBEb250IGFsbG93IHBhc3NpbmcgYG51bGxgIGFzIFVSSSB0byBgQ2xpZW50OjpyZXF1ZXN0KClgIGFuZCBgQ2xpZW50OjpyZXF1ZXN0QXN5bmMoKWAgWyMyNDYxXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI0NjEpCiogV2lkZW4gdGhlIGV4Y2VwdGlvbiBhcmd1bWVudCB0byB0aHJvd2FibGUgWyMyNDk1XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI0OTUpCgojIyMgRml4ZWQKCiogTG9nZ2luZyB3aGVuIFByb21pc2UgcmVqZWN0ZWQgd2l0aCBhIHN0cmluZyBbIzIzMTFdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjMxMSkKCiMjIyBSZW1vdmVkCgoqIENsYXNzIGBTZWVrRXhjZXB0aW9uYCBbIzIxNjJdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjE2MikKKiBgUmVxdWVzdEV4Y2VwdGlvbjo6Z2V0UmVzcG9uc2VCb2R5U3VtbWFyeSgpYCBbIzI0MjVdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjQyNSkKKiBgQ29va2llSmFyOjpnZXRDb29raWVWYWx1ZSgpYCBbIzI0MzNdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjQzMykKKiBgdXJpX3RlbXBsYXRlKClgIGFuZCBgVXJpVGVtcGxhdGVgIFsjMjQ0MF0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yNDQwKQoqIFJlcXVlc3Qgb3B0aW9ucyBgc2F2ZV90b2AgYW5kIGBleGNlcHRpb25zYCBbIzI0NjRdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjQ2NCkKCgojIyA2LjUuMiAtIDIwMTktMTItMjMKCiogaWRuX3RvX2FzY2lpKCkgZml4IGZvciBvbGQgUEhQIHZlcnNpb25zIFsjMjQ4OV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yNDg5KQoKCiMjIDYuNS4xIC0gMjAxOS0xMi0yMQoKKiBCZXR0ZXIgZGVmYXVsdHMgZm9yIFBIUCBpbnN0YWxsYXRpb25zIHdpdGggb2xkIElDVSBsaWIgWyMyNDU0XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI0NTQpCiogSUROIHN1cHBvcnQgZm9yIHJlZGlyZWN0cyBbIzI0MjRdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjQyNCkKCgojIyA2LjUuMCAtIDIwMTktMTItMDcKCiogSW1wcm92ZW1lbnQ6IEFkZGVkIHN1cHBvcnQgZm9yIHJlc2V0IGludGVybmFsIHF1ZXVlIGluIE1vY2tIYW5kbGVyLiBbIzIxNDNdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjE0MykKKiBJbXByb3ZlbWVudDogQWRkZWQgc3VwcG9ydCB0byBwYXNzIGFyYml0cmFyeSBvcHRpb25zIHRvIGBjdXJsX211bHRpX2luaXRgLiBbIzIyODddKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjI4NykKKiBGaXg6IEdyYWNlZnVsbHkgaGFuZGxlIHBhc3NpbmcgYG51bGxgIHRvIHRoZSBgaGVhZGVyYCBvcHRpb24uIFsjMjEzMl0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yMTMyKQoqIEZpeDogYFJldHJ5TWlkZGxld2FyZWAgZGlkIG5vdCBkbyBleHBvbmVudGlhbCBkZWxheSBiZXR3ZWVuIHJldGlyZXMgZHVlIHVuaXQgbWlzbWF0Y2guIFsjMjEzMl0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yMTMyKQoqIEZpeDogUHJldmVudCB1bmRlZmluZWQgb2Zmc2V0IHdoZW4gdXNpbmcgYXJyYXkgZm9yIHNzbF9rZXkgb3B0aW9ucy4gWyMyMzQ4XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzIzNDgpCiogRGVwcmVjYXRlZCBgQ2xpZW50SW50ZXJmYWNlOjpWRVJTSU9OYAoKCiMjIDYuNC4xIC0gMjAxOS0xMC0yMwoKKiBObyBgZ3V6emxlLnBoYXJgIHdhcyBjcmVhdGVkIGluIDYuNC4wIGR1ZSBleHBpcmVkIEFQSSB0b2tlbi4gVGhpcyByZWxlYXNlIHdpbGwgZml4IHRoYXQKKiBBZGRlZCBgcGFyZW50OjpfX2NvbnN0cnVjdCgpYCB0byBgRmlsZUNvb2tpZUphcmAgYW5kIGBTZXNzaW9uQ29va2llSmFyYAoKCiMjIDYuNC4wIC0gMjAxOS0xMC0yMwoKKiBJbXByb3ZlbWVudDogSW1wcm92ZWQgZXJyb3IgbWVzc2FnZXMgd2hlbiB1c2luZyBjdXJsIDwgNy4yMS4yIFsjMjEwOF0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yMTA4KQoqIEZpeDogVGVzdCBpZiByZXNwb25zZSBpcyByZWFkYWJsZSBiZWZvcmUgcmV0dXJuaW5nIGEgc3VtbWFyeSBpbiBgUmVxdWVzdEV4Y2VwdGlvbjo6Z2V0UmVzcG9uc2VCb2R5U3VtbWFyeSgpYCBbIzIwODFdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjA4MSkKKiBGaXg6IEFkZCBzdXBwb3J0IGZvciBHVVpaTEVfQ1VSTF9TRUxFQ1RfVElNRU9VVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBbIzIxNjFdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjE2MSkKKiBJbXByb3ZlbWVudDogQWRkZWQgYEd1enpsZUh0dHBcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbmAgWyMyMTYzXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzIxNjMpCiogSW1wcm92ZW1lbnQ6IEFkZGVkIGBHdXp6bGVIdHRwXF9jdXJyZW50X3RpbWUoKWAgdG8gdXNlIGBocnRpbWUoKWAgaWYgdGhhdCBmdW5jdGlvbiBleGlzdHMuIFsjMjI0Ml0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yMjQyKQoqIEltcHJvdmVtZW50OiBBZGRlZCBjdXJsJ3MgYGFwcGNvbm5lY3RfdGltZWAgaW4gYFRyYW5zZmVyU3RhdHNgIFsjMjI4NF0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yMjg0KQoqIEltcHJvdmVtZW50OiBNYWtlIEd1enpsZUV4Y2VwdGlvbiBleHRlbmQgVGhyb3dhYmxlIHdoZXJldmVyIGl0J3MgYXZhaWxhYmxlIFsjMjI3M10oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yMjczKQoqIEZpeDogUHJldmVudCBjb25jdXJyZW50IHdyaXRlcyB0byBmaWxlIHdoZW4gc2F2aW5nIGBDb29raWVKYXJgIFsjMjMzNV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yMzM1KQoqIEltcHJvdmVtZW50OiBVcGRhdGUgYE1vY2tIYW5kbGVyYCBzbyB3ZSBjYW4gdGVzdCB0cmFuc2ZlciB0aW1lIFsjMjM2Ml0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yMzYyKQoKCiMjIDYuMy4zIC0gMjAxOC0wNC0yMgoKKiBGaXg6IERlZmF1bHQgaGVhZGVycyB3aGVuIGRlY29kZV9jb250ZW50IGlzIHNwZWNpZmllZAoKCiMjIDYuMy4yIC0gMjAxOC0wMy0yNgoKKiBGaXg6IFJlbGVhc2UgcHJvY2VzcwoKCiMjIDYuMy4xIC0gMjAxOC0wMy0yNgoKKiBCdWcgZml4OiBQYXJzaW5nIDAgZXBvY2ggZXhwaXJ5IHRpbWVzIGluIGNvb2tpZXMgWyMyMDE0XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzIwMTQpCiogSW1wcm92ZW1lbnQ6IEJldHRlciBDb25uZWN0RXhjZXB0aW9uIGRldGVjdGlvbiBbIzIwMTJdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjAxMikKKiBCdWcgZml4OiBNYWxmb3JtZWQgZG9tYWluIHRoYXQgY29udGFpbnMgYSAiLyIgWyMxOTk5XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE5OTkpCiogQnVnIGZpeDogVW5kZWZpbmVkIG9mZnNldCB3aGVuIGEgY29va2llIGhhcyBubyBmaXJzdCBrZXktdmFsdWUgcGFpciBbIzE5OThdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTk5OCkKKiBJbXByb3ZlbWVudDogU3VwcG9ydCBQSFBVbml0IDYgWyMxOTUzXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE5NTMpCiogQnVnIGZpeDogU3VwcG9ydCBlbXB0eSBoZWFkZXJzIFsjMTkxNV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xOTE1KQoqIEJ1ZyBmaXg6IElnbm9yZSBjYXNlIGR1cmluZyBoZWFkZXIgbW9kaWZpY2F0aW9ucyBbIzE5MTZdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTkxNikKCisgTWlub3IgY29kZSBjbGVhbnVwcywgZG9jdW1lbnRhdGlvbiBmaXhlcyBhbmQgY2xhcmlmaWNhdGlvbnMuCgoKIyMgNi4zLjAgLSAyMDE3LTA2LTIyCgoqIEZlYXR1cmU6IGZvcmNlIElQIHJlc29sdXRpb24gKGlwdjQgb3IgaXB2NikgWyMxNjA4XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE2MDgpLCBbIzE2NTldKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTY1OSkKKiBJbXByb3ZlbWVudDogRG9uJ3QgaW5jbHVkZSBzdW1tYXJ5IGluIGV4Y2VwdGlvbiBtZXNzYWdlIHdoZW4gYm9keSBpcyBlbXB0eSBbIzE2MjFdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTYyMSkKKiBJbXByb3ZlbWVudDogSGFuZGxlIGBvbl9oZWFkZXJzYCBvcHRpb24gaW4gTW9ja0hhbmRsZXIgWyMxNTgwXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE1ODApCiogSW1wcm92ZW1lbnQ6IEFkZGVkIFNVU0UgTGludXggQ0EgcGF0aCBbIzE2MDldKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2lzc3Vlcy8xNjA5KQoqIEltcHJvdmVtZW50OiBVc2UgY2xhc3MgcmVmZXJlbmNlIGZvciBnZXR0aW5nIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyBpbnN0ZWFkIG9mIHVzaW5nIGhhcmRjb2RlZCBzdHJpbmdzIFsjMTY0MV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xNjQxKQoqIEZlYXR1cmU6IEFkZGVkIGByZWFkX3RpbWVvdXRgIG9wdGlvbiBbIzE2MTFdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTYxMSkKKiBCdWcgZml4OiBQSFAgNy54IGZpeGVzIFsjMTY4NV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xNjg1KSwgWyMxNjg2XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE2ODYpLCBbIzE4MTFdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTgxMSkKKiBEZXByZWNhdGlvbjogQmFkUmVzcG9uc2VFeGNlcHRpb24gaW5zdGFudGlhdGlvbiB3aXRob3V0IGEgcmVzcG9uc2UgWyMxNjQyXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE2NDIpCiogRmVhdHVyZTogQWRkZWQgTlRMTSBhdXRoIFsjMTU2OV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xNTY5KQoqIEZlYXR1cmU6IFRyYWNrIHJlZGlyZWN0IEhUVFAgc3RhdHVzIGNvZGVzIFsjMTcxMV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xNzExKQoqIEltcHJvdmVtZW50OiBDaGVjayBoYW5kbGVyIHR5cGUgZHVyaW5nIGNvbnN0cnVjdGlvbiBbIzE3NDVdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTc0NSkKKiBJbXByb3ZlbWVudDogQWx3YXlzIGluY2x1ZGUgdGhlIENvbnRlbnQtTGVuZ3RoIGlmIHRoZXJlJ3MgYSBib2R5IFsjMTcyMV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xNzIxKQoqIEZlYXR1cmU6IEFkZGVkIGNvbnZlbmllbmNlIG1ldGhvZCB0byBhY2Nlc3MgYSBjb29raWUgYnkgbmFtZSBbIzEzMThdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTMxOCkKKiBCdWcgZml4OiBGaWxsIGBDVVJMT1BUX0NBUEFUSGAgYW5kIGBDVVJMT1BUX0NBSU5GT2AgcHJvcGVybHkgWyMxNjg0XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE2ODQpCiogSW1wcm92ZW1lbnQ6ICAJVXNlIGBcR3V6emxlSHR0cFxQcm9taXNlXHJlamVjdGlvbl9mb3JgIGZ1bmN0aW9uIGluc3RlYWQgb2Ygb2JqZWN0IGluaXQgWyMxODI3XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE4MjcpCgorIE1pbm9yIGNvZGUgY2xlYW51cHMsIGRvY3VtZW50YXRpb24gZml4ZXMgYW5kIGNsYXJpZmljYXRpb25zLgoKCiMjIDYuMi4zIC0gMjAxNy0wMi0yOAoKKiBGaXggZGVwcmVjYXRpb25zIHdpdGggZ3V6emxlL3BzcjcgdmVyc2lvbiAxLjQKCgojIyA2LjIuMiAtIDIwMTYtMTAtMDgKCiogQWxsb3cgdG8gcGFzcyBudWxsYWJsZSBSZXNwb25zZSB0byBkZWxheSBjYWxsYWJsZQoqIE9ubHkgYWRkIHNjaGVtZSB3aGVuIGhvc3QgaXMgcHJlc2VudAoqIEZpeCBkcmFpbiBjYXNlIHdoZXJlIGNvbnRlbnQtbGVuZ3RoIGlzIHRoZSBsaXRlcmFsIHN0cmluZyB6ZXJvCiogT2JmdXNjYXRlIGluLVVSTCBjcmVkZW50aWFscyBpbiBleGNlcHRpb25zCgoKIyMgNi4yLjEgLSAyMDE2LTA3LTE4CgoqIEFkZHJlc3MgSFRUUF9QUk9YWSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LCBDVkUtMjAxNi01Mzg1OgogIGh0dHBzOi8vaHR0cG94eS5vcmcvCiogRml4aW5nIHRpbWVvdXQgYnVnIHdpdGggU3RyZWFtSGFuZGxlcjoKICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE0ODgKKiBPbmx5IHJlYWQgdXAgdG8gYENvbnRlbnQtTGVuZ3RoYCBpbiBQSFAgU3RyZWFtSGFuZGxlciB0byBhdm9pZCB0aW1lb3V0cyB3aGVuCiAgYSBzZXJ2ZXIgZG9lcyBub3QgaG9ub3IgYENvbm5lY3Rpb246IGNsb3NlYC4KKiBJZ25vcmUgVVJJIGZyYWdtZW50IHdoZW4gc2VuZGluZyByZXF1ZXN0cy4KCgojIyA2LjIuMCAtIDIwMTYtMDMtMjEKCiogRmVhdHVyZTogYWRkZWQgYEd1enpsZUh0dHBcanNvbl9lbmNvZGVgIGFuZCBgR3V6emxlSHR0cFxqc29uX2RlY29kZWAuCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xMzg5CiogQnVnIGZpeDogRml4IHNsZWVwIGNhbGN1bGF0aW9uIHdoZW4gd2FpdGluZyBmb3IgZGVsYXllZCByZXF1ZXN0cy4KICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzEzMjQKKiBGZWF0dXJlOiBNb3JlIGZsZXhpYmxlIGhpc3RvcnkgY29udGFpbmVycy4KICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzEzNzMKKiBCdWcgZml4OiBkZWZlciBzaW5rIHN0cmVhbSBvcGVuaW5nIGluIFN0cmVhbUhhbmRsZXIuCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xMzc3CiogQnVnIGZpeDogZG8gbm90IGF0dGVtcHQgdG8gZXNjYXBlIGNvb2tpZSB2YWx1ZXMuCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xNDA2CiogRmVhdHVyZTogcmVwb3J0IG9yaWdpbmFsIGNvbnRlbnQgZW5jb2RpbmcgYW5kIGxlbmd0aCBvbiBkZWNvZGVkIHJlc3BvbnNlcy4KICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE0MDkKKiBCdWcgZml4OiByZXdpbmQgc2Vla2FibGUgcmVxdWVzdCBib2RpZXMgYmVmb3JlIGRpc3BhdGNoaW5nIHRvIGNVUkwuCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xNDIyCiogQnVnIGZpeDogcHJvdmlkZSBhbiBlbXB0eSBzdHJpbmcgdG8gYGh0dHBfYnVpbGRfcXVlcnlgIGZvciBISFZNIHdvcmthcm91bmQuCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xMzY3CgoKIyMgNi4xLjEgLSAyMDE1LTExLTIyCgoqIEJ1ZyBmaXg6IFByb3h5Ojp3cmFwU3luYygpIG5vdyBjb3JyZWN0bHkgcHJveGllcyB0byB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlcgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2NvbW1pdC85MTFiY2JjOGI0MzRhZGNlNjRlMjIzYTZkMWQxNGU5YThmNjNlNGU0CiogRmVhdHVyZTogSGFuZGxlclN0YWNrIGlzIG5vdyBtb3JlIGdlbmVyaWMuCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvY29tbWl0L2YyMTAyOTQxMzMxY2RhNTQ0NzQ1ZWVkZDk3ZmM4ZmQ0NmUxZWUzM2UKKiBCdWcgZml4OiBzZXR0aW5nIHZlcmlmeSB0byBmYWxzZSBpbiB0aGUgU3RyZWFtSGFuZGxlciBub3cgZGlzYWJsZXMgcGVlcgogIHZlcmlmaWNhdGlvbi4gaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvaXNzdWVzLzEyNTYKKiBGZWF0dXJlOiBNaWRkbGV3YXJlIG5vdyB1c2VzIGFuIGV4Y2VwdGlvbiBmYWN0b3J5LCBpbmNsdWRpbmcgbW9yZSBlcnJvcgogIGNvbnRleHQuIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTI4MgoqIEZlYXR1cmU6IGJldHRlciBzdXBwb3J0IGZvciBkaXNhYmxlZCBmdW5jdGlvbnMuCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xMjg3CiogQnVnIGZpeDogZml4ZWQgcmVncmVzc2lvbiB3aGVyZSBNb2NrSGFuZGxlciB3YXMgbm90IHVzaW5nIGBzaW5rYC4KICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzEyOTIKCgojIyA2LjEuMCAtIDIwMTUtMDktMDgKCiogRmVhdHVyZTogQWRkZWQgdGhlIGBvbl9zdGF0c2AgcmVxdWVzdCBvcHRpb24gdG8gcHJvdmlkZSBhY2Nlc3MgdG8gdHJhbnNmZXIKICBzdGF0aXN0aWNzIGZvciByZXF1ZXN0cy4gaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xMjAyCiogRmVhdHVyZTogQWRkZWQgdGhlIGFiaWxpdHkgdG8gcGVyc2lzdCBzZXNzaW9uIGNvb2tpZXMgaW4gQ29va2llSmFycy4KICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzExOTUKKiBGZWF0dXJlOiBTb21lIGNvbXBhdGliaWxpdHkgdXBkYXRlcyBmb3IgR29vZ2xlIEFQUCBFbmdpbmUKICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzEyMTYKKiBGZWF0dXJlOiBBZGRlZCBzdXBwb3J0IGZvciBOT19QUk9YWSB0byBwcmV2ZW50IHRoZSB1c2Ugb2YgYSBwcm94eSBiYXNlZCBvbgogIGEgc2ltcGxlIHNldCBvZiBydWxlcy4gaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xMTk3CiogRmVhdHVyZTogQ29va2llcyBjYW4gbm93IGNvbnRhaW4gc3F1YXJlIGJyYWNrZXRzLgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTIzNwoqIEJ1ZyBmaXg6IE5vdyBjb3JyZWN0bHkgcGFyc2luZyBgPWAgaW5zaWRlIG9mIHF1b3RlcyBpbiBDb29raWVzLgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTIzMgoqIEJ1ZyBmaXg6IEN1c290bSBjVVJMIG9wdGlvbnMgbm93IGNvcnJlY3RseSBvdmVycmlkZSBjdXJsIG9wdGlvbnMgb2YgdGhlCiAgc2FtZSBuYW1lLiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzEyMjEKKiBCdWcgZml4OiBDb250ZW50LVR5cGUgaGVhZGVyIGlzIG5vdyBhZGRlZCB3aGVuIHVzaW5nIGFuIGV4cGxpY2l0bHkgcHJvdmlkZWQKICBtdWx0aXBhcnQgYm9keS4gaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xMjE4CiogQnVnIGZpeDogTm93IGlnbm9yaW5nIFNldC1Db29raWUgaGVhZGVycyB0aGF0IGhhdmUgbm8gbmFtZS4KKiBCdWcgZml4OiBSZWFzb24gcGhyYXNlIGlzIG5vIGxvbmdlciBjYXN0IHRvIGFuIGludCBpbiBzb21lIGNhc2VzIGluIHRoZQogIGNVUkwgaGFuZGxlci4gaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xMTg3CiogQnVnIGZpeDogUmVtb3ZlIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlciB3aGVuIHJlZGlyZWN0aW5nIGlmIHRoZSBIb3N0CiAgaGVhZGVyIGNoYW5nZXMuIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTIwNwoqIEJ1ZyBmaXg6IENvb2tpZSBwYXRoIG1hdGNoaW5nIGZpeGVzCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvaXNzdWVzLzExMjkKKiBCdWcgZml4OiBGaXhpbmcgdGhlIGNVUkwgYGJvZHlfYXNfc3RyaW5nYCBzZXR0aW5nCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xMjAxCiogQnVnIGZpeDogcXVvdGVzIGFyZSBubyBsb25nZXIgc3RyaXBwZWQgd2hlbiBwYXJzaW5nIGNvb2tpZXMuCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvaXNzdWVzLzExNzIKKiBCdWcgZml4OiBgZm9ybV9wYXJhbXNgIGFuZCBgcXVlcnlgIG5vdyBhbHdheXMgdXNlcyB0aGUgYCZgIHNlcGFyYXRvci4KICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzExNjMKKiBCdWcgZml4OiBBZGRpbmcgYSBDb250ZW50LUxlbmd0aCB0byBQSFAgc3RyZWFtIHdyYXBwZXIgcmVxdWVzdHMgaWYgbm90IHNldC4KICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzExODkKCgojIyA2LjAuMiAtIDIwMTUtMDctMDQKCiogRml4ZWQgYSBtZW1vcnkgbGVhayBpbiB0aGUgY3VybCBoYW5kbGVycyBpbiB3aGljaCByZWZlcmVuY2VzIHRvIGNhbGxiYWNrcwogIHdlcmUgbm90IGJlaW5nIHJlbW92ZWQgYnkgYGN1cmxfcmVzZXRgLgoqIENvb2tpZXMgYXJlIG5vdyBleHRyYWN0ZWQgcHJvcGVybHkgYmVmb3JlIHJlZGlyZWN0cy4KKiBDb29raWVzIG5vdyBhbGxvdyBtb3JlIGNoYXJhY3RlciByYW5nZXMuCiogRGVjb2RlZCBDb250ZW50LUVuY29kaW5nIHJlc3BvbnNlcyBhcmUgbm93IG1vZGlmaWVkIHRvIGNvcnJlY3RseSByZWZsZWN0CiAgdGhlaXIgc3RhdGUgaWYgdGhlIGVuY29kaW5nIHdhcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgYnkgYSBoYW5kbGVyLiBUaGlzCiAgbWVhbnMgdGhhdCB0aGUgYENvbnRlbnQtRW5jb2RpbmdgIGhlYWRlciBtYXkgYmUgcmVtb3ZlZCBhbiB0aGUKICBgQ29udGVudC1MZW5ndGhgIG1vZGlmaWVkIHRvIHJlZmxlY3QgdGhlIG1lc3NhZ2Ugc2l6ZSBhZnRlciByZW1vdmluZyB0aGUKICBlbmNvZGluZy4KKiBBZGRlZCBhIG1vcmUgZXhwbGljaXQgZXJyb3IgbWVzc2FnZSB3aGVuIHRyeWluZyB0byB1c2UgYGZvcm1fcGFyYW1zYCBhbmQKICBgbXVsdGlwYXJ0YCBpbiB0aGUgc2FtZSByZXF1ZXN0LgoqIFNldmVyYWwgZml4ZXMgZm9yIEhIVk0gc3VwcG9ydC4KKiBGdW5jdGlvbnMgYXJlIG5vdyBjb25kaXRpb25hbGx5IHJlcXVpcmVkIHVzaW5nIGFuIGFkZGl0aW9uYWwgbGV2ZWwgb2YKICBpbmRpcmVjdGlvbiB0byBoZWxwIHdpdGggZ2xvYmFsIENvbXBvc2VyIGluc3RhbGxhdGlvbnMuCgoKIyMgNi4wLjEgLSAyMDE1LTA1LTI3CgoqIEZpeGVkIGEgYnVnIHdpdGggc2VyaWFsaXppbmcgdGhlIGBxdWVyeWAgcmVxdWVzdCBvcHRpb24gd2hlcmUgdGhlIGAmYAogIHNlcGFyYXRvciB3YXMgbWlzc2luZy4KKiBBZGRlZCBhIGJldHRlciBlcnJvciBtZXNzYWdlIGZvciB3aGVuIGBib2R5YCBpcyBwcm92aWRlZCBhcyBhbiBhcnJheS4gUGxlYXNlCiAgdXNlIGBmb3JtX3BhcmFtc2Agb3IgYG11bHRpcGFydGAgaW5zdGVhZC4KKiBWYXJpb3VzIGRvYyBmaXhlcy4KCgojIyA2LjAuMCAtIDIwMTUtMDUtMjYKCiogU2VlIHRoZSBVUEdSQURJTkcubWQgZG9jdW1lbnQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiogQWRkZWQgYG11bHRpcGFydGAgYW5kIGBmb3JtX3BhcmFtc2AgcmVxdWVzdCBvcHRpb25zLgoqIEFkZGVkIGBzeW5jaHJvbm91c2AgcmVxdWVzdCBvcHRpb24uCiogQWRkZWQgdGhlIGBvbl9oZWFkZXJzYCByZXF1ZXN0IG9wdGlvbi4KKiBGaXhlZCBgZXhwZWN0YCBoYW5kbGluZy4KKiBObyBsb25nZXIgYWRkaW5nIGRlZmF1bHQgbWlkZGxld2FyZXMgaW4gdGhlIGNsaWVudCBjdG9yLiBUaGVzZSBuZWVkIHRvIGJlCiAgcHJlc2VudCBvbiB0aGUgcHJvdmlkZWQgaGFuZGxlciBpbiBvcmRlciB0byB3b3JrLgoqIFJlcXVlc3RzIGFyZSBubyBsb25nZXIgaW5pdGlhdGVkIHdoZW4gc2VuZGluZyBhc3luYyByZXF1ZXN0cyB3aXRoIHRoZQogIEN1cmxNdWx0aUhhbmRsZXIuIFRoaXMgcHJldmVudHMgdW5leHBlY3RlZCByZWN1cnNpb24gZnJvbSByZXF1ZXN0cyBjb21wbGV0aW5nCiAgd2hpbGUgdGlja2luZyB0aGUgY1VSTCBsb29wLgoqIFJlbW92ZWQgdGhlIHNlbWFudGljcyBvZiBzZXR0aW5nIGBkZWZhdWx0YCB0byBgdHJ1ZWAuIFRoaXMgaXMgbm8gbG9uZ2VyCiAgcmVxdWlyZWQgbm93IHRoYXQgdGhlIGNVUkwgbG9vcCBpcyBub3QgdGlja2VkIGZvciBhc3luYyByZXF1ZXN0cy4KKiBBZGRlZCByZXF1ZXN0IGFuZCByZXNwb25zZSBsb2dnaW5nIG1pZGRsZXdhcmUuCiogTm8gbG9uZ2VyIGFsbG93aW5nIHNlbGYgc2lnbmVkIGNlcnRpZmljYXRlcyB3aGVuIHVzaW5nIHRoZSBTdHJlYW1IYW5kbGVyLgoqIEVuc3VyaW5nIHRoYXQgYHNpbmtgIGlzIHZhbGlkIGlmIHNhdmluZyB0byBhIGZpbGUuCiogUmVxdWVzdCBleGNlcHRpb25zIG5vdyBpbmNsdWRlIGEgImhhbmRsZXIgY29udGV4dCIgd2hpY2ggcHJvdmlkZXMgaGFuZGxlcgogIHNwZWNpZmljIGNvbnRleHR1YWwgaW5mb3JtYXRpb24uCiogQWRkZWQgYEd1enpsZUh0dHBcUmVxdWVzdE9wdGlvbnNgIHRvIGFsbG93IHJlcXVlc3Qgb3B0aW9ucyB0byBiZSBhcHBsaWVkCiAgdXNpbmcgY29uc3RhbnRzLgoqIGAkbWF4SGFuZGxlc2AgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIEN1cmxNdWx0aUhhbmRsZXIuCiogYE11bHRpcGFydFBvc3RCb2R5YCBpcyBub3cgcGFydCBvZiB0aGUgYGd1enpsZWh0dHAvcHNyN2AgcGFja2FnZS4KCgojIyA1LjMuMCAtIDIwMTUtMDUtMTkKCiogTW9jayBub3cgc3VwcG9ydHMgYHNhdmVfdG9gCiogTWFya2VkIGBBYnN0cmFjdFJlcXVlc3RFdmVudDo6Z2V0VHJhbnNhY3Rpb24oKWAgYXMgcHVibGljLgoqIEZpeGVkIGEgYnVnIGluIHdoaWNoIG11bHRpcGxlIGhlYWRlcnMgdXNpbmcgZGlmZmVyZW50IGNhc2luZyB3b3VsZCBvdmVyd3JpdGUKICBwcmV2aW91cyBoZWFkZXJzIGluIHRoZSBhc3NvY2lhdGl2ZSBhcnJheS4KKiBBZGRlZCBgVXRpbHM6OmdldERlZmF1bHRIYW5kbGVyKClgCiogTWFya2VkIGBHdXp6bGVIdHRwXENsaWVudDo6Z2V0RGVmYXVsdFVzZXJBZ2VudGAgYXMgZGVwcmVjYXRlZC4KKiBVUkwgc2NoZW1lIGlzIG5vdyBhbHdheXMgbG93ZXJjYXNlZC4KCgojIyA2LjAuMC1iZXRhLjEKCiogUmVxdWlyZXMgUEhQID49IDUuNQoqIFVwZGF0ZWQgdG8gdXNlIFBTUi03CiAgKiBSZXF1aXJlcyBpbW11dGFibGUgbWVzc2FnZXMsIHdoaWNoIGJhc2ljYWxseSBtZWFucyBhbiBldmVudCBiYXNlZCBzeXN0ZW0KICAgIG93bmVkIGJ5IGEgcmVxdWVzdCBpbnN0YW5jZSBpcyBubyBsb25nZXIgcG9zc2libGUuCiAgKiBVdGlsaXppbmcgdGhlIFtHdXp6bGUgUFNSLTcgcGFja2FnZV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wc3I3KS4KICAqIFJlbW92ZWQgdGhlIGRlcGVuZGVuY3kgb24gYGd1enpsZWh0dHAvc3RyZWFtc2AuIFRoZXNlIHN0cmVhbSBhYnN0cmFjdGlvbnMKICAgIGFyZSBhdmFpbGFibGUgaW4gdGhlIGBndXp6bGVodHRwL3BzcjdgIHBhY2thZ2UgdW5kZXIgdGhlIGBHdXp6bGVIdHRwXFBzcjdgCiAgICBuYW1lc3BhY2UuCiogQWRkZWQgbWlkZGxld2FyZSBhbmQgaGFuZGxlciBzeXN0ZW0KICAqIFJlcGxhY2VkIHRoZSBHdXp6bGUgZXZlbnQgYW5kIHN1YnNjcmliZXIgc3lzdGVtIHdpdGggYSBtaWRkbGV3YXJlIHN5c3RlbS4KICAqIE5vIGxvbmdlciBkZXBlbmRzIG9uIFJpbmdQSFAsIGJ1dCByYXRoZXIgcGxhY2VzIHRoZSBIVFRQIGhhbmRsZXJzIGRpcmVjdGx5CiAgICBpbiBHdXp6bGUsIG9wZXJhdGluZyBvbiBQU1ItNyBtZXNzYWdlcy4KICAqIFJldHJ5IGxvZ2ljIGlzIG5vdyBlbmNhcHN1bGF0ZWQgaW4gYEd1enpsZUh0dHBcTWlkZGxld2FyZTo6cmV0cnlgLCB3aGljaAogICAgbWVhbnMgdGhlIGBndXp6bGVodHRwL3JldHJ5LXN1YnNjcmliZXJgIGlzIG5vdyBvYnNvbGV0ZS4KICAqIE1vY2tpbmcgcmVzcG9uc2VzIGlzIG5vdyBoYW5kbGVkIHVzaW5nIGBHdXp6bGVIdHRwXEhhbmRsZXJcTW9ja0hhbmRsZXJgLgoqIEFzeW5jaHJvbm91cyByZXNwb25zZXMKICAqIE5vIGxvbmdlciBzdXBwb3J0cyB0aGUgYGZ1dHVyZWAgcmVxdWVzdCBvcHRpb24gdG8gc2VuZCBhbiBhc3luYyByZXF1ZXN0LgogICAgSW5zdGVhZCwgdXNlIG9uZSBvZiB0aGUgYCpBc3luY2AgbWV0aG9kcyBvZiBhIGNsaWVudCAoZS5nLiwgYHJlcXVlc3RBc3luY2AsCiAgICBgZ2V0QXN5bmNgLCBldGMuKS4KICAqIFV0aWxpemluZyBgR3V6emxlSHR0cFxQcm9taXNlYCBpbnN0ZWFkIG9mIFJlYWN0J3MgcHJvbWlzZSBsaWJyYXJ5IHRvIGF2b2lkCiAgICByZWN1cnNpb24gcmVxdWlyZWQgYnkgY2hhaW5pbmcgYW5kIGZvcndhcmRpbmcgcmVhY3QgcHJvbWlzZXMuIFNlZQogICAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wcm9taXNlcwogICogQWRkZWQgYHJlcXVlc3RBc3luY2AgYW5kIGBzZW5kQXN5bmNgIHRvIHNlbmQgcmVxdWVzdCBhc3luY2hyb25vdXNseS4KICAqIEFkZGVkIG1hZ2ljIG1ldGhvZHMgZm9yIGBnZXRBc3luYygpYCwgYHBvc3RBc3luYygpYCwgZXRjLiB0byBzZW5kIHJlcXVlc3RzCiAgICBhc3luY2hyb25vdXNseS4KKiBSZXF1ZXN0IG9wdGlvbnMKICAqIFBPU1QgYW5kIGZvcm0gdXBkYXRlcwogICAgKiBBZGRlZCB0aGUgYGZvcm1fZmllbGRzYCBhbmQgYGZvcm1fZmlsZXNgIHJlcXVlc3Qgb3B0aW9ucy4KICAgICogUmVtb3ZlZCB0aGUgYEd1enpsZUh0dHBcUG9zdGAgbmFtZXNwYWNlLgogICAgKiBUaGUgYGJvZHlgIHJlcXVlc3Qgb3B0aW9uIG5vIGxvbmdlciBhY2NlcHRzIGFuIGFycmF5IGZvciBQT1NUIHJlcXVlc3RzLgogICogVGhlIGBleGNlcHRpb25zYCByZXF1ZXN0IG9wdGlvbiBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHRoZQogICAgYGh0dHBfZXJyb3JzYCByZXF1ZXN0IG9wdGlvbnMuCiAgKiBUaGUgYHNhdmVfdG9gIHJlcXVlc3Qgb3B0aW9uIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgYHNpbmtgIHJlcXVlc3QKICAgIG9wdGlvbi4KKiBDbGllbnRzIG5vIGxvbmdlciBhY2NlcHQgYW4gYXJyYXkgb2YgVVJJIHRlbXBsYXRlIHN0cmluZyBhbmQgdmFyaWFibGVzIGZvcgogIFVSSSB2YXJpYWJsZXMuIFlvdSB3aWxsIG5lZWQgdG8gZXhwYW5kIFVSSSB0ZW1wbGF0ZXMgYmVmb3JlIHBhc3NpbmcgdGhlbQogIGludG8gYSBjbGllbnQgY29uc3RydWN0b3Igb3IgcmVxdWVzdCBtZXRob2QuCiogQ2xpZW50IG1ldGhvZHMgYGdldCgpYCwgYHBvc3QoKWAsIGBwdXQoKWAsIGBwYXRjaCgpYCwgYG9wdGlvbnMoKWAsIGV0Yy4gYXJlCiAgbm93IG1hZ2ljIG1ldGhvZHMgdGhhdCB3aWxsIHNlbmQgc3luY2hyb25vdXMgcmVxdWVzdHMuCiogUmVwbGFjZWQgYFV0aWxzLnBocGAgd2l0aCBwbGFpbiBmdW5jdGlvbnMgaW4gYGZ1bmN0aW9ucy5waHBgLgoqIFJlbW92ZWQgYEd1enpsZUh0dHBcQ29sbGVjdGlvbmAuCiogUmVtb3ZlZCBgR3V6emxlSHR0cFxCYXRjaFJlc3VsdHNgLiBCYXRjaGVkIHBvb2wgcmVzdWx0cyBhcmUgbm93IHJldHVybmVkIGFzCiAgYW4gYXJyYXkuCiogUmVtb3ZlZCBgR3V6emxlSHR0cFxRdWVyeWAuIFF1ZXJ5IHN0cmluZyBoYW5kbGluZyBpcyBub3cgaGFuZGxlZCB1c2luZyBhbgogIGFzc29jaWF0aXZlIGFycmF5IHBhc3NlZCBpbnRvIHRoZSBgcXVlcnlgIHJlcXVlc3Qgb3B0aW9uLiBUaGUgcXVlcnkgc3RyaW5nCiAgaXMgc2VyaWFsaXplZCB1c2luZyBQSFAncyBgaHR0cF9idWlsZF9xdWVyeWAuIElmIHlvdSBuZWVkIG1vcmUgY29udHJvbCwgeW91CiAgY2FuIHBhc3MgdGhlIHF1ZXJ5IHN0cmluZyBpbiBhcyBhIHN0cmluZy4KKiBgR3V6emxlSHR0cFxRdWVyeVBhcnNlcmAgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCB0aGUKICBgR3V6emxlSHR0cFxQc3I3XHBhcnNlX3F1ZXJ5YC4KCgojIyA1LjIuMCAtIDIwMTUtMDEtMjcKCiogQWRkZWQgYEFwcGxpZXNIZWFkZXJzSW50ZXJmYWNlYCB0byBtYWtlIGFwcGx5aW5nIGhlYWRlcnMgdG8gYSByZXF1ZXN0IGJhc2VkCiAgb24gdGhlIGJvZHkgbW9yZSBnZW5lcmljIGFuZCBub3Qgc3BlY2lmaWMgdG8gYFBvc3RCb2R5SW50ZXJmYWNlYC4KKiBSZWR1Y2VkIHRoZSBudW1iZXIgb2Ygc3RhY2sgZnJhbWVzIG5lZWRlZCB0byBzZW5kIHJlcXVlc3RzLgoqIE5lc3RlZCBmdXR1cmVzIGFyZSBub3cgcmVzb2x2ZWQgaW4gdGhlIGNsaWVudCByYXRoZXIgdGhhbiB0aGUgUmVxdWVzdEZzbQoqIEZpbmlzaGluZyBzdGF0ZSB0cmFuc2l0aW9ucyBpcyBub3cgaGFuZGxlZCBpbiB0aGUgUmVxdWVzdEZzbSByYXRoZXIgdGhhbiB0aGUKICBSaW5nQnJpZGdlLgoqIEFkZGVkIGEgZ3VhcmQgaW4gdGhlIFBvb2wgY2xhc3MgdG8gbm90IHVzZSByZWN1cnNpb24gZm9yIHJlcXVlc3QgcmV0cmllcy4KCgojIyA1LjEuMCAtIDIwMTQtMTItMTkKCiogUG9vbCBjbGFzcyBubyBsb25nZXIgdXNlcyByZWN1cnNpb24gd2hlbiBhIHJlcXVlc3QgaXMgaW50ZXJjZXB0ZWQuCiogVGhlIHNpemUgb2YgYSBQb29sIGNhbiBub3cgYmUgZHluYW1pY2FsbHkgYWRqdXN0ZWQgdXNpbmcgYSBjYWxsYmFjay4KICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC85NDMuCiogU2V0dGluZyBhIHJlcXVlc3Qgb3B0aW9uIHRvIGBudWxsYCB3aGVuIGNyZWF0aW5nIGEgcmVxdWVzdCB3aXRoIGEgY2xpZW50IHdpbGwKICBlbnN1cmUgdGhhdCB0aGUgb3B0aW9uIGlzIG5vdCBzZXQuIFRoaXMgYWxsb3dzIHlvdSB0byBvdmVyd3JpdGUgZGVmYXVsdAogIHJlcXVlc3Qgb3B0aW9ucyBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzLgogIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzkzNy4KKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBsaW1pdCB3aGljaCBwcm90b2NvbHMgYXJlIGFsbG93ZWQgZm9yIHJlZGlyZWN0cyBieQogIHNwZWNpZnlpbmcgYSBgcHJvdG9jb2xzYCBhcnJheSBpbiB0aGUgYGFsbG93X3JlZGlyZWN0c2AgcmVxdWVzdCBvcHRpb24uCiogTmVzdGVkIGZ1dHVyZXMgZHVlIHRvIHJldHJpZXMgYXJlIG5vdyByZXNvbHZlZCB3aGVuIHdhaXRpbmcgZm9yIHN5bmNocm9ub3VzCiAgcmVzcG9uc2VzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC85NDcuCiogYCIwImAgaXMgbm93IGFuIGFsbG93ZWQgVVJJIHBhdGguIFNlZQogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvOTM1LgoqIGBRdWVyeWAgbm8gbG9uZ2VyIHR5cGVoaW50cyBvbiB0aGUgYCRxdWVyeWAgYXJndW1lbnQgaW4gdGhlIGNvbnN0cnVjdG9yLAogIGFsbG93aW5nIGZvciBzdHJpbmdzIGFuZCBhcnJheXMuCiogRXhjZXB0aW9ucyB0aHJvd24gaW4gdGhlIGBlbmRgIGV2ZW50IGFyZSBub3cgY29ycmVjdGx5IHdyYXBwZWQgd2l0aCBHdXp6bGUKICBzcGVjaWZpYyBleGNlcHRpb25zIGlmIG5lY2Vzc2FyeS4KCgojIyA1LjAuMyAtIDIwMTQtMTEtMDMKClRoaXMgY2hhbmdlIHVwZGF0ZXMgcXVlcnkgc3RyaW5ncyBzbyB0aGF0IHRoZXkgYXJlIHRyZWF0ZWQgYXMgdW4tZW5jb2RlZCB2YWx1ZXMKYnkgZGVmYXVsdCB3aGVyZSB0aGUgdmFsdWUgcmVwcmVzZW50cyBhbiB1bi1lbmNvZGVkIHZhbHVlIHRvIHNlbmQgb3ZlciB0aGUKd2lyZS4gQSBRdWVyeSBvYmplY3QgdGhlbiBlbmNvZGVzIHRoZSB2YWx1ZSBiZWZvcmUgc2VuZGluZyBvdmVyIHRoZSB3aXJlLiBUaGlzCm1lYW5zIHRoYXQgZXZlbiB2YWx1ZSBxdWVyeSBzdHJpbmcgdmFsdWVzIChlLmcuLCAiOiIpIGFyZSB1cmwgZW5jb2RlZC4gVGhpcwptYWtlcyB0aGUgUXVlcnkgY2xhc3MgbWF0Y2ggUEhQJ3MgaHR0cF9idWlsZF9xdWVyeSBmdW5jdGlvbi4gSG93ZXZlciwgaWYgeW91CndhbnQgdG8gc2VuZCByZXF1ZXN0cyBvdmVyIHRoZSB3aXJlIHVzaW5nIHZhbGlkIHF1ZXJ5IHN0cmluZyBjaGFyYWN0ZXJzIHRoYXQgZG8Kbm90IG5lZWQgdG8gYmUgZW5jb2RlZCwgdGhlbiB5b3UgY2FuIHByb3ZpZGUgYSBzdHJpbmcgdG8gVXJsOjpzZXRRdWVyeSgpIGFuZApwYXNzIHRydWUgYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBzcGVjaWZ5IHRoYXQgdGhlIHF1ZXJ5IHN0cmluZyBpcyBhIHJhdwpzdHJpbmcgdGhhdCBzaG91bGQgbm90IGJlIHBhcnNlZCBvciBlbmNvZGVkICh1bmxlc3MgYSBjYWxsIHRvIGdldFF1ZXJ5KCkgaXMKc3Vic2VxdWVudGx5IG1hZGUsIGZvcmNpbmcgdGhlIHF1ZXJ5LXN0cmluZyB0byBiZSBjb252ZXJ0ZWQgaW50byBhIFF1ZXJ5Cm9iamVjdCkuCgoKIyMgNS4wLjIgLSAyMDE0LTEwLTMwCgoqIEFkZGVkIGEgdHJhaWxpbmcgYFxyXG5gIHRvIG11bHRpcGFydC9mb3JtLWRhdGEgcGF5bG9hZHMuIFNlZQogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvODcxCiogQWRkZWQgYSBgR3V6emxlSHR0cFxQb29sOjpzZW5kKClgIGNvbnZlbmllbmNlIG1ldGhvZCB0byBtYXRjaCB0aGUgZG9jcy4KKiBTdGF0dXMgY29kZXMgYXJlIG5vdyByZXR1cm5lZCBhcyBpbnRlZ2Vycy4gU2VlCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvaXNzdWVzLzg4MQoqIE5vIGxvbmdlciBvdmVyd3JpdGluZyBhbiBleGlzdGluZyBgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkYCBoZWFkZXIKICB3aGVuIHNlbmRpbmcgUE9TVCByZXF1ZXN0cywgYWxsb3dpbmcgZm9yIGN1c3RvbWl6ZWQgaGVhZGVycy4gU2VlCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvaXNzdWVzLzg3NwoqIEltcHJvdmVkIHBhdGggVVJMIHNlcmlhbGl6YXRpb24uCgogICogTm8gbG9uZ2VyIGRvdWJsZSBwZXJjZW50LWVuY29kaW5nIGNoYXJhY3RlcnMgaW4gdGhlIHBhdGggb3IgcXVlcnkgc3RyaW5nIGlmCiAgICB0aGV5IGFyZSBhbHJlYWR5IGVuY29kZWQuCiAgKiBOb3cgcHJvcGVybHkgZW5jb2RpbmcgdGhlIHN1cHBsaWVkIHBhdGggdG8gYSBVUkwgb2JqZWN0LCBpbnN0ZWFkIG9mIG9ubHkKICAgIGVuY29kaW5nICcgJyBhbmQgJz8nLgogICogTm90ZTogVGhpcyBoYXMgYmVlbiBjaGFuZ2VkIGluIDUuMC4zIHRvIG5vdyBlbmNvZGUgcXVlcnkgc3RyaW5nIHZhbHVlcyBieQogICAgZGVmYXVsdCB1bmxlc3MgdGhlIGByYXdTdHJpbmdgIGFyZ3VtZW50IGlzIHByb3ZpZGVkIHdoZW4gc2V0dGluZyB0aGUgcXVlcnkKICAgIHN0cmluZyBvbiBhIFVSTDogTm93IGFsbG93aW5nIG1hbnkgbW9yZSBjaGFyYWN0ZXJzIHRvIGJlIHByZXNlbnQgaW4gdGhlCiAgICBxdWVyeSBzdHJpbmcgd2l0aG91dCBiZWluZyBwZXJjZW50IGVuY29kZWQuIFNlZQogICAgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzOTg2I2FwcGVuZGl4LUEKCgojIyA1LjAuMSAtIDIwMTQtMTAtMTYKCkJ1Z2ZpeCByZWxlYXNlLgoKKiBGaXhlZCBhbiBpc3N1ZSB3aGVyZSBjb25uZWN0aW9uIGVycm9ycyBzdGlsbCByZXR1cm5lZCByZXNwb25zZSBvYmplY3QgaW4KICBlcnJvciBhbmQgZW5kIGV2ZW50cyBldmVudCB0aG91Z2ggdGhlIHJlc3BvbnNlIGlzIHVudXNhYmxlLiBUaGlzIGhhcyBiZWVuCiAgY29ycmVjdGVkIHNvIHRoYXQgYSByZXNwb25zZSBpcyBub3QgcmV0dXJuZWQgaW4gdGhlIGBnZXRSZXNwb25zZWAgbWV0aG9kIG9mCiAgdGhlc2UgZXZlbnRzIGlmIHRoZSByZXNwb25zZSBkaWQgbm90IGNvbXBsZXRlLiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9pc3N1ZXMvODY3CiogRml4ZWQgYW4gaXNzdWUgd2hlcmUgdHJhbnNmZXIgc3RhdGlzdGljcyB3ZXJlIG5vdCBiZWluZyBwb3B1bGF0ZWQgaW4gdGhlCiAgUmluZ0JyaWRnZS4gaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvaXNzdWVzLzg2NgoKCiMjIDUuMC4wIC0gMjAxNC0xMC0xMgoKQWRkaW5nIHN1cHBvcnQgZm9yIG5vbi1ibG9ja2luZyByZXNwb25zZXMgYW5kIHNvbWUgbWlub3IgQVBJIGNsZWFudXAuCgojIyMgTmV3IEZlYXR1cmVzCgoqIEFkZGVkIHN1cHBvcnQgZm9yIG5vbi1ibG9ja2luZyByZXNwb25zZXMgYmFzZWQgb24gYGd1enpsZWh0dHAvZ3V6emxlLXJpbmdgLgoqIEFkZGVkIGEgcHVibGljIEFQSSBmb3IgY3JlYXRpbmcgYSBkZWZhdWx0IEhUVFAgYWRhcHRlci4KKiBVcGRhdGVkIHRoZSByZWRpcmVjdCBwbHVnaW4gdG8gYmUgbm9uLWJsb2NraW5nIHNvIHRoYXQgcmVkaXJlY3RzIGFyZSBzZW50CiAgY29uY3VycmVudGx5LiBPdGhlciBwbHVnaW5zIGxpa2UgdGhpcyBjYW4gbm93IGJlIHVwZGF0ZWQgdG8gYmUgbm9uLWJsb2NraW5nLgoqIEFkZGVkIGEgInByb2dyZXNzIiBldmVudCBzbyB0aGF0IHlvdSBjYW4gZ2V0IHVwbG9hZCBhbmQgZG93bmxvYWQgcHJvZ3Jlc3MKICBldmVudHMuCiogQWRkZWQgYEd1enpsZUh0dHBcUG9vbGAgd2hpY2ggaW1wbGVtZW50cyBGdXR1cmVJbnRlcmZhY2UgYW5kIHRyYW5zZmVycwogIHJlcXVlc3RzIGNvbmN1cnJlbnRseSB1c2luZyBhIGNhcHBlZCBwb29sIHNpemUgYXMgZWZmaWNpZW50bHkgYXMgcG9zc2libGUuCiogQWRkZWQgYGhhc0xpc3RlbmVycygpYCB0byBFbWl0dGVySW50ZXJmYWNlLgoqIFJlbW92ZWQgYEd1enpsZUh0dHBcQ2xpZW50SW50ZXJmYWNlOjpzZW5kQWxsYCBhbmQgbWFya2VkCiAgYEd1enpsZUh0dHBcQ2xpZW50OjpzZW5kQWxsYCBhcyBkZXByZWNhdGVkIChpdCdzIHN0aWxsIHRoZXJlLCBqdXN0IG5vdCB0aGUKICByZWNvbW1lbmRlZCB3YXkpLgoKIyMjIEJyZWFraW5nIGNoYW5nZXMKClRoZSBicmVha2luZyBjaGFuZ2VzIGluIHRoaXMgcmVsZWFzZSBhcmUgcmVsYXRpdmVseSBtaW5vci4gVGhlIGJpZ2dlc3QgdGhpbmcgdG8KbG9vayBvdXQgZm9yIGlzIHRoYXQgcmVxdWVzdCBhbmQgcmVzcG9uc2Ugb2JqZWN0cyBubyBsb25nZXIgaW1wbGVtZW50IGZsdWVudAppbnRlcmZhY2VzLgoKKiBSZW1vdmVkIHRoZSBmbHVlbnQgaW50ZXJmYWNlcyAoaS5lLiwgYHJldHVybiAkdGhpc2ApIGZyb20gcmVxdWVzdHMsCiAgcmVzcG9uc2VzLCBgR3V6emxlSHR0cFxDb2xsZWN0aW9uYCwgYEd1enpsZUh0dHBcVXJsYCwKICBgR3V6emxlSHR0cFxRdWVyeWAsIGBHdXp6bGVIdHRwXFBvc3RcUG9zdEJvZHlgLCBhbmQKICBgR3V6emxlSHR0cFxDb29raWVcU2V0Q29va2llYC4gVGhpcyBibG9nIHBvc3QgcHJvdmlkZXMgYSBnb29kIG91dGxpbmUgb2YKICB3aHkgSSBkaWQgdGhpczogaHR0cHM6Ly9vY3JhbWl1cy5naXRodWIuaW8vYmxvZy9mbHVlbnQtaW50ZXJmYWNlcy1hcmUtZXZpbC8uCiAgVGhpcyBhbHNvIG1ha2VzIHRoZSBHdXp6bGUgbWVzc2FnZSBpbnRlcmZhY2VzIGNvbXBhdGlibGUgd2l0aCB0aGUgY3VycmVudAogIFBTUi03IG1lc3NhZ2UgcHJvcG9zYWwuCiogUmVtb3ZlZCAiZnVuY3Rpb25zLnBocCIsIHNvIHRoYXQgR3V6emxlIGlzIHRydWx5IFBTUi00IGNvbXBsaWFudC4gRXhjZXB0CiAgZm9yIHRoZSBIVFRQIHJlcXVlc3QgZnVuY3Rpb25zIGZyb20gZnVuY3Rpb24ucGhwLCB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdwogIGltcGxlbWVudGVkIGluIGBHdXp6bGVIdHRwXFV0aWxzYCB1c2luZyBjYW1lbENhc2UuIGBHdXp6bGVIdHRwXGpzb25fZGVjb2RlYAogIG1vdmVkIHRvIGBHdXp6bGVIdHRwXFV0aWxzOjpqc29uRGVjb2RlYC4gYEd1enpsZUh0dHBcZ2V0X3BhdGhgIG1vdmVkIHRvCiAgYEd1enpsZUh0dHBcVXRpbHM6OmdldFBhdGhgLiBgR3V6emxlSHR0cFxzZXRfcGF0aGAgbW92ZWQgdG8KICBgR3V6emxlSHR0cFxVdGlsczo6c2V0UGF0aGAuIGBHdXp6bGVIdHRwXGJhdGNoYCBzaG91bGQgbm93IGJlCiAgYEd1enpsZUh0dHBcUG9vbDo6YmF0Y2hgLCB3aGljaCByZXR1cm5zIGFuIGBvYmplY3RTdG9yYWdlYC4gVXNpbmcgZnVuY3Rpb25zLnBocAogIGNhdXNlZCBwcm9ibGVtcyBmb3IgbWFueSB1c2VyczogdGhleSBhcmVuJ3QgUFNSLTQgY29tcGxpYW50LCByZXF1aXJlIGFuCiAgZXhwbGljaXQgaW5jbHVkZSwgYW5kIG5lZWRlZCBhbiBpZi1ndWFyZCB0byBlbnN1cmUgdGhhdCB0aGUgZnVuY3Rpb25zIGFyZSBub3QKICBkZWNsYXJlZCBtdWx0aXBsZSB0aW1lcy4KKiBSZXdyb3RlIGFkYXB0ZXIgbGF5ZXIuCiAgICAqIFJlbW92aW5nIGFsbCBjbGFzc2VzIGZyb20gYEd1enpsZUh0dHBcQWRhcHRlcmAsIHRoZXNlIGFyZSBub3cKICAgICAgaW1wbGVtZW50ZWQgYXMgY2FsbGFibGVzIHRoYXQgYXJlIHN0b3JlZCBpbiBgR3V6emxlSHR0cFxSaW5nXENsaWVudGAuCiAgICAqIFJlbW92ZWQgdGhlIGNvbmNlcHQgb2YgInBhcmFsbGVsIGFkYXB0ZXJzIi4gU2VuZGluZyByZXF1ZXN0cyBzZXJpYWxseSBvcgogICAgICBjb25jdXJyZW50bHkgaXMgbm93IGhhbmRsZWQgdXNpbmcgYSBzaW5nbGUgYWRhcHRlci4KICAgICogTW92ZWQgYEd1enpsZUh0dHBcQWRhcHRlclxUcmFuc2FjdGlvbmAgdG8gYEd1enpsZUh0dHBcVHJhbnNhY3Rpb25gLiBUaGUKICAgICAgVHJhbnNhY3Rpb24gb2JqZWN0IG5vdyBleHBvc2VzIHRoZSByZXF1ZXN0LCByZXNwb25zZSwgYW5kIGNsaWVudCBhcyBwdWJsaWMKICAgICAgcHJvcGVydGllcy4gVGhlIGdldHRlcnMgYW5kIHNldHRlcnMgaGF2ZSBiZWVuIHJlbW92ZWQuCiogUmVtb3ZlZCB0aGUgImhlYWRlcnMiIGV2ZW50LiBUaGlzIGV2ZW50IHdhcyBvbmx5IHVzZWZ1bCBmb3IgY2hhbmdpbmcgdGhlCiAgYm9keSBhIHJlc3BvbnNlIG9uY2UgdGhlIGhlYWRlcnMgb2YgdGhlIHJlc3BvbnNlIHdlcmUga25vd24uIFlvdSBjYW4gaW1wbGVtZW50CiAgYSBzaW1pbGFyIGJlaGF2aW9yIGluIGEgbnVtYmVyIG9mIHdheXMuIE9uZSBleGFtcGxlIG1pZ2h0IGJlIHRvIHVzZSBhCiAgRm5TdHJlYW0gdGhhdCBoYXMgYWNjZXNzIHRvIHRoZSB0cmFuc2FjdGlvbiBiZWluZyBzZW50LiBGb3IgZXhhbXBsZSwgd2hlbiB0aGUKICBmaXJzdCBieXRlIGlzIHdyaXR0ZW4sIHlvdSBjb3VsZCBjaGVjayBpZiB0aGUgcmVzcG9uc2UgaGVhZGVycyBtYXRjaCB5b3VyCiAgZXhwZWN0YXRpb25zLCBhbmQgaWYgc28sIGNoYW5nZSB0aGUgYWN0dWFsIHN0cmVhbSBib2R5IHRoYXQgaXMgYmVpbmcKICB3cml0dGVuIHRvLgoqIFJlbW92ZWQgdGhlIGBhc0FycmF5YCBwYXJhbWV0ZXIgZnJvbQogIGBHdXp6bGVIdHRwXE1lc3NhZ2VcTWVzc2FnZUludGVyZmFjZTo6Z2V0SGVhZGVyYC4gSWYgeW91IHdhbnQgdG8gZ2V0IGEgaGVhZGVyCiAgdmFsdWUgYXMgYW4gYXJyYXksIHRoZW4gdXNlIHRoZSBuZXdseSBhZGRlZCBgZ2V0SGVhZGVyQXNBcnJheSgpYCBtZXRob2Qgb2YKICBgTWVzc2FnZUludGVyZmFjZWAuIFRoaXMgY2hhbmdlIG1ha2VzIHRoZSBHdXp6bGUgaW50ZXJmYWNlcyBjb21wYXRpYmxlIHdpdGgKICB0aGUgUFNSLTcgaW50ZXJmYWNlcy4KKiBgR3V6emxlSHR0cFxNZXNzYWdlXE1lc3NhZ2VGYWN0b3J5YCBubyBsb25nZXIgYWxsb3dzIHN1YmNsYXNzZXMgdG8gYWRkCiAgY3VzdG9tIHJlcXVlc3Qgb3B0aW9ucyB1c2luZyBkb3VibGUtZGlzcGF0Y2ggKHRoaXMgd2FzIGFuIGltcGxlbWVudGF0aW9uCiAgZGV0YWlsKS4gSW5zdGVhZCwgeW91IHNob3VsZCBub3cgcHJvdmlkZSBhbiBhc3NvY2lhdGl2ZSBhcnJheSB0byB0aGUKICBjb25zdHJ1Y3RvciB3aGljaCBpcyBhIG1hcHBpbmcgb2YgdGhlIHJlcXVlc3Qgb3B0aW9uIG5hbWUgbWFwcGluZyB0byBhCiAgZnVuY3Rpb24gdGhhdCBhcHBsaWVzIHRoZSBvcHRpb24gdmFsdWUgdG8gYSByZXF1ZXN0LgoqIFJlbW92ZWQgdGhlIGNvbmNlcHQgb2YgInRocm93SW1tZWRpYXRlbHkiIGZyb20gZXhjZXB0aW9ucyBhbmQgZXJyb3IgZXZlbnRzLgogIFRoaXMgY29udHJvbCBtZWNoYW5pc20gd2FzIHVzZWQgdG8gc3RvcCBhIHRyYW5zZmVyIG9mIGNvbmN1cnJlbnQgcmVxdWVzdHMKICBmcm9tIGNvbXBsZXRpbmcuIFRoaXMgY2FuIG5vdyBiZSBoYW5kbGVkIGJ5IHRocm93aW5nIHRoZSBleGNlcHRpb24gb3IgYnkKICBjYW5jZWxsaW5nIGEgcG9vbCBvZiByZXF1ZXN0cyBvciBlYWNoIG91dHN0YW5kaW5nIGZ1dHVyZSByZXF1ZXN0IGluZGl2aWR1YWxseS4KKiBVcGRhdGVkIHRvICJHdXp6bGVIdHRwXFN0cmVhbXMiIDMuMC4KICAgICogYEd1enpsZUh0dHBcU3RyZWFtXFN0cmVhbUludGVyZmFjZTo6Z2V0Q29udGVudHMoKWAgbm8gbG9uZ2VyIGFjY2VwdHMgYQogICAgICBgbWF4TGVuYCBwYXJhbWV0ZXIuIFRoaXMgdXBkYXRlIG1ha2VzIHRoZSBHdXp6bGUgc3RyZWFtcyBwcm9qZWN0CiAgICAgIGNvbXBhdGlibGUgd2l0aCB0aGUgY3VycmVudCBQU1ItNyBwcm9wb3NhbC4KICAgICogYEd1enpsZUh0dHBcU3RyZWFtXFN0cmVhbTo6X19jb25zdHJ1Y3RgLAogICAgICBgR3V6emxlSHR0cFxTdHJlYW1cU3RyZWFtOjpmYWN0b3J5YCwgYW5kCiAgICAgIGBHdXp6bGVIdHRwXFN0cmVhbVxVdGlsczo6Y3JlYXRlYCBubyBsb25nZXIgYWNjZXB0IGEgc2l6ZSBpbiB0aGUgc2Vjb25kCiAgICAgIGFyZ3VtZW50LiBUaGV5IG5vdyBhY2NlcHQgYW4gYXNzb2NpYXRpdmUgYXJyYXkgb2Ygb3B0aW9ucywgaW5jbHVkaW5nIHRoZQogICAgICAic2l6ZSIga2V5IGFuZCAibWV0YWRhdGEiIGtleSB3aGljaCBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGN1c3RvbSBtZXRhZGF0YS4KCgojIyA0LjIuMiAtIDIwMTQtMDktMDgKCiogRml4ZWQgYSBtZW1vcnkgbGVhayBpbiB0aGUgQ3VybEFkYXB0ZXIgd2hlbiByZXVzaW5nIGNVUkwgaGFuZGxlcy4KKiBObyBsb25nZXIgdXNpbmcgYHJlcXVlc3RfZnVsbHVyaWAgaW4gc3RyZWFtIGFkYXB0ZXIgcHJveGllcy4KKiBSZWxhdGl2ZSByZWRpcmVjdHMgYXJlIG5vdyBiYXNlZCBvbiB0aGUgbGFzdCByZXNwb25zZSwgbm90IHRoZSBmaXJzdCByZXNwb25zZS4KCiMjIDQuMi4xIC0gMjAxNC0wOC0xOQoKKiBFbnN1cmluZyB0aGF0IHRoZSBTdHJlYW1BZGFwdGVyIGRvZXMgbm90IGFsd2F5cyBhZGQgYSBDb250ZW50LVR5cGUgaGVhZGVyCiogQWRkaW5nIGF1dG9tYXRlZCBnaXRodWIgcmVsZWFzZXMgd2l0aCBhIHBoYXIgYW5kIHppcAoKIyMgNC4yLjAgLSAyMDE0LTA4LTE3CgoqIE5vdyBtZXJnaW5nIGluIGRlZmF1bHQgb3B0aW9ucyB1c2luZyBhIGNhc2UtaW5zZW5zaXRpdmUgY29tcGFyaXNvbi4KICBDbG9zZXMgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvaXNzdWVzLzc2NwoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIGF1dG9tYXRpY2FsbHkgZGVjb2RlIGBDb250ZW50LUVuY29kaW5nYCByZXNwb25zZSBib2RpZXMKICB1c2luZyB0aGUgYGRlY29kZV9jb250ZW50YCByZXF1ZXN0IG9wdGlvbi4gVGhpcyBpcyBzZXQgdG8gYHRydWVgIGJ5IGRlZmF1bHQKICB0byBkZWNvZGUgdGhlIHJlc3BvbnNlIGJvZHkgaWYgaXQgY29tZXMgb3ZlciB0aGUgd2lyZSB3aXRoIGEKICBgQ29udGVudC1FbmNvZGluZ2AuIFNldCB0aGlzIHZhbHVlIHRvIGBmYWxzZWAgdG8gZGlzYWJsZSBkZWNvZGluZyB0aGUKICByZXNwb25zZSBjb250ZW50LCBhbmQgcGFzcyBhIHN0cmluZyB0byBwcm92aWRlIGEgcmVxdWVzdCBgQWNjZXB0LUVuY29kaW5nYAogIGhlYWRlciBhbmQgdHVybiBvbiBhdXRvbWF0aWMgcmVzcG9uc2UgZGVjb2RpbmcuIFRoaXMgZmVhdHVyZSBub3cgYWxsb3dzIHlvdQogIHRvIHBhc3MgYW4gYEFjY2VwdC1FbmNvZGluZ2AgaGVhZGVyIGluIHRoZSBoZWFkZXJzIG9mIGEgcmVxdWVzdCBidXQgc3RpbGwKICBkaXNhYmxlIGF1dG9tYXRpYyByZXNwb25zZSBkZWNvZGluZy4KICBDbG9zZXMgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvaXNzdWVzLzc2NAoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHRocm93IGFuIGV4Y2VwdGlvbiBpbW1lZGlhdGVseSB3aGVuIHRyYW5zZmVycmluZwogIHJlcXVlc3RzIGluIHBhcmFsbGVsLiBDbG9zZXMgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvaXNzdWVzLzc2MAoqIFVwZGF0aW5nIGd1enpsZWh0dHAvc3RyZWFtcyBkZXBlbmRlbmN5IHRvIH4yLjEKKiBObyBsb25nZXIgdXRpbGl6aW5nIHRoZSBub3cgZGVwcmVjYXRlZCBuYW1lc3BhY2VkIG1ldGhvZHMgZnJvbSB0aGUgc3RyZWFtCiAgcGFja2FnZS4KCiMjIDQuMS44IC0gMjAxNC0wOC0xNAoKKiBGaXhlZCBhbiBpc3N1ZSBpbiB0aGUgQ3VybEZhY3RvcnkgdGhhdCBjYXVzZWQgc2V0dGluZyB0aGUgYHN0cmVhbT1mYWxzZWAKICByZXF1ZXN0IG9wdGlvbiB0byB0aHJvdyBhbiBleGNlcHRpb24uCiAgU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9pc3N1ZXMvNzY5CiogVHJhbnNhY3Rpb25JdGVyYXRvciBub3cgY2FsbHMgcmV3aW5kIG9uIHRoZSBpbm5lciBpdGVyYXRvci4KICBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvNzY1CiogWW91IGNhbiBub3cgc2V0IHRoZSBgQ29udGVudC1UeXBlYCBoZWFkZXIgdG8gYG11bHRpcGFydC9mb3JtLWRhdGFgCiAgd2hlbiBjcmVhdGluZyBQT1NUIHJlcXVlc3RzIHRvIGZvcmNlIG11bHRpcGFydCBib2RpZXMuCiAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2lzc3Vlcy83NjgKCiMjIDQuMS43IC0gMjAxNC0wOC0wNwoKKiBGaXhlZCBhbiBlcnJvciBpbiB0aGUgSGlzdG9yeVBsdWdpbiB0aGF0IGNhdXNlZCB0aGUgc2FtZSByZXF1ZXN0IGFuZCByZXNwb25zZQogIHRvIGJlIGxvZ2dlZCBtdWx0aXBsZSB0aW1lcyB3aGVuIGFuIEhUVFAgcHJvdG9jb2wgZXJyb3Igb2NjdXJzLgoqIEVuc3VyaW5nIHRoYXQgY1VSTCBkb2VzIG5vdCBhZGQgYSBkZWZhdWx0IENvbnRlbnQtVHlwZSB3aGVuIG5vIENvbnRlbnQtVHlwZQogIGhhcyBiZWVuIHN1cHBsaWVkIGJ5IHRoZSB1c2VyLiBUaGlzIHByZXZlbnRzIHRoZSBhZGFwdGVyIGxheWVyIGZyb20gbW9kaWZ5aW5nCiAgdGhlIHJlcXVlc3QgdGhhdCBpcyBzZW50IG92ZXIgdGhlIHdpcmUgYWZ0ZXIgYW55IGxpc3RlbmVycyBtYXkgaGF2ZSBhbHJlYWR5CiAgcHV0IHRoZSByZXF1ZXN0IGluIGEgZGVzaXJlZCBzdGF0ZSAoZS5nLiwgc2lnbmVkIHRoZSByZXF1ZXN0KS4KKiBUaHJvd2luZyBhbiBleGNlcHRpb24gd2hlbiB5b3UgYXR0ZW1wdCB0byBzZW5kIHJlcXVlc3RzIHRoYXQgaGF2ZSB0aGUKICAic3RyZWFtIiBzZXQgdG8gdHJ1ZSBpbiBwYXJhbGxlbCB1c2luZyB0aGUgTXVsdGlBZGFwdGVyLgoqIE9ubHkgY2FsbGluZyBjdXJsX211bHRpX3NlbGVjdCB3aGVuIHRoZXJlIGFyZSBhY3RpdmUgY1VSTCBoYW5kbGVzLiBUaGlzIHdhcwogIHByZXZpb3VzbHkgY2hhbmdlZCBhbmQgY2F1c2VkIHBlcmZvcm1hbmNlIHByb2JsZW1zIG9uIHNvbWUgc3lzdGVtcyBkdWUgdG8gUEhQCiAgYWx3YXlzIHNlbGVjdGluZyB1bnRpbCB0aGUgbWF4aW11bSBzZWxlY3QgdGltZW91dC4KKiBGaXhlZCBhIGJ1ZyB3aGVyZSBtdWx0aXBhcnQvZm9ybS1kYXRhIFBPU1QgZmllbGRzIHdlcmUgbm90IGNvcnJlY3RseQogIGFnZ3JlZ2F0ZWQgKGUuZy4sIHZhbHVlcyB3aXRoICImIikuCgojIyA0LjEuNiAtIDIwMTQtMDgtMDMKCiogQWRkZWQgaGVscGVyIG1ldGhvZHMgdG8gbWFrZSBpdCBlYXNpZXIgdG8gcmVwcmVzZW50IG1lc3NhZ2VzIGFzIHN0cmluZ3MsCiAgaW5jbHVkaW5nIGdldHRpbmcgdGhlIHN0YXJ0IGxpbmUgYW5kIGdldHRpbmcgaGVhZGVycyBhcyBhIHN0cmluZy4KCiMjIDQuMS41IC0gMjAxNC0wOC0wMgoKKiBBdXRvbWF0aWNhbGx5IHJldHJ5aW5nIGNVUkwgIkNvbm5lY3Rpb24gZGllZCwgcmV0cnlpbmcgYSBmcmVzaCBjb25uZWN0IgogIGVycm9ycyB3aGVuIHBvc3NpYmxlLgoqIGNVUkwgaW1wbGVtZW50YXRpb24gY2xlYW51cAoqIEFsbG93aW5nIG11bHRpcGxlIGV2ZW50IHN1YnNjcmliZXIgbGlzdGVuZXJzIHRvIGJlIHJlZ2lzdGVyZWQgcGVyIGV2ZW50IGJ5CiAgcGFzc2luZyBhbiBhcnJheSBvZiBhcnJheXMgb2YgbGlzdGVuZXIgY29uZmlndXJhdGlvbi4KCiMjIDQuMS40IC0gMjAxNC0wNy0yMgoKKiBGaXhlZCBhIGJ1ZyB0aGF0IGNhdXNlZCBtdWx0aS1wYXJ0IFBPU1QgcmVxdWVzdHMgd2l0aCBtb3JlIHRoYW4gb25lIGZpZWxkIHRvCiAgc2VyaWFsaXplIGluY29ycmVjdGx5LgoqIFBhdGhzIGNhbiBub3cgYmUgc2V0IHRvICIwIgoqIGBSZXNwb25zZUludGVyZmFjZTo6eG1sYCBub3cgYWNjZXB0cyBhIGBsaWJ4bWxfb3B0aW9uc2Agb3B0aW9uIGFuZCBhZGRlZCBhCiAgbWlzc2luZyBkZWZhdWx0IGFyZ3VtZW50IHRoYXQgd2FzIHJlcXVpcmVkIHdoZW4gcGFyc2luZyBYTUwgcmVzcG9uc2UgYm9kaWVzLgoqIEEgYHNhdmVfdG9gIHN0cmVhbSBpcyBub3cgY3JlYXRlZCBsYXppbHksIHdoaWNoIG1lYW5zIHRoYXQgZmlsZXMgYXJlIG5vdAogIGNyZWF0ZWQgb24gZGlzayB1bmxlc3MgYSByZXF1ZXN0IHN1Y2NlZWRzLgoKIyMgNC4xLjMgLSAyMDE0LTA3LTE1CgoqIFZhcmlvdXMgZml4ZXMgdG8gbXVsdGlwYXJ0L2Zvcm0tZGF0YSBQT1NUIHVwbG9hZHMKKiBXcmFwcGluZyBmdW5jdGlvbi5waHAgaW4gYW4gaWYtc3RhdGVtZW50IHRvIGVuc3VyZSBHdXp6bGUgY2FuIGJlIHVzZWQKICBnbG9iYWxseSBhbmQgaW4gYSBDb21wb3NlciBpbnN0YWxsCiogRml4ZWQgYW4gaXNzdWUgd2l0aCBnZW5lcmF0aW5nIGFuZCBtZXJnaW5nIGluIGV2ZW50cyB0byBhbiBldmVudCBhcnJheQoqIFBPU1QgaGVhZGVycyBhcmUgb25seSBhcHBsaWVkIGJlZm9yZSBzZW5kaW5nIGEgcmVxdWVzdCB0byBhbGxvdyB5b3UgdG8gY2hhbmdlCiAgdGhlIHF1ZXJ5IGFnZ3JlZ2F0b3IgdXNlZCBiZWZvcmUgdXBsb2FkaW5nCiogQWRkZWQgbXVjaCBtb3JlIHJvYnVzdCBxdWVyeSBzdHJpbmcgcGFyc2luZwoqIEZpeGVkIHZhcmlvdXMgcGFyc2luZyBhbmQgbm9ybWFsaXphdGlvbiBpc3N1ZXMgd2l0aCBVUkxzCiogRml4aW5nIGFuIGlzc3VlIHdoZXJlIG11bHRpLXZhbHVlZCBoZWFkZXJzIHdlcmUgbm90IGJlaW5nIHV0aWxpemVkIGNvcnJlY3RseQogIGluIHRoZSBTdHJlYW1BZGFwdGVyCgojIyA0LjEuMiAtIDIwMTQtMDYtMTgKCiogQWRkZWQgc3VwcG9ydCBmb3Igc2VuZGluZyBwYXlsb2FkcyB3aXRoIEdFVCByZXF1ZXN0cwoKIyMgNC4xLjEgLSAyMDE0LTA2LTA4CgoqIEZpeGVkIGFuIGlzc3VlIHJlbGF0ZWQgdG8gdXNpbmcgY3VzdG9tIG1lc3NhZ2UgZmFjdG9yeSBvcHRpb25zIGluIHN1YmNsYXNzZXMKKiBGaXhlZCBhbiBpc3N1ZSB3aXRoIG5lc3RlZCBmb3JtIGZpZWxkcyBpbiBhIG11bHRpLXBhcnQgUE9TVAoqIEZpeGVkIGFuIGlzc3VlIHdpdGggdXNpbmcgdGhlIGBqc29uYCByZXF1ZXN0IG9wdGlvbiBmb3IgUE9TVCByZXF1ZXN0cwoqIEFkZGVkIGBUb0FycmF5SW50ZXJmYWNlYCB0byBgR3V6emxlSHR0cFxDb29raWVcQ29va2llSmFyYAoKIyMgNC4xLjAgLSAyMDE0LTA1LTI3CgoqIEFkZGVkIGEgYGpzb25gIHJlcXVlc3Qgb3B0aW9uIHRvIGVhc2lseSBzZXJpYWxpemUgSlNPTiBwYXlsb2Fkcy4KKiBBZGRlZCBhIGBHdXp6bGVIdHRwXGpzb25fZGVjb2RlKClgIHdyYXBwZXIgdG8gc2FmZWx5IHBhcnNlIEpTT04uCiogQWRkZWQgYHNldFBvcnQoKWAgYW5kIGBnZXRQb3J0KClgIHRvIGBHdXp6bGVIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZWAuCiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gcHJvdmlkZSBhbiBlbWl0dGVyIHRvIGEgY2xpZW50IGluIHRoZSBjbGllbnQgY29uc3RydWN0b3IuCiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gcGVyc2lzdCBhIGNvb2tpZSBzZXNzaW9uIHVzaW5nICRfU0VTU0lPTi4KKiBBZGRlZCBhIHRyYWl0IHRoYXQgY2FuIGJlIHVzZWQgdG8gYWRkIGV2ZW50IGxpc3RlbmVycyB0byBhbiBpdGVyYXRvci4KKiBSZW1vdmVkIHJlcXVlc3QgbWV0aG9kIGNvbnN0YW50cyBmcm9tIFJlcXVlc3RJbnRlcmZhY2UuCiogRml4ZWQgd2FybmluZyB3aGVuIGludmFsaWQgcmVxdWVzdCBzdGFydC1saW5lcyBhcmUgcmVjZWl2ZWQuCiogVXBkYXRlZCBNZXNzYWdlRmFjdG9yeSB0byB3b3JrIHdpdGggY3VzdG9tIHJlcXVlc3Qgb3B0aW9uIG1ldGhvZHMuCiogVXBkYXRlZCBjYWNlcnQgYnVuZGxlIHRvIGxhdGVzdCBidWlsZC4KCjQuMC4yICgyMDE0LTA0LTE2KQotLS0tLS0tLS0tLS0tLS0tLS0KCiogUHJveHkgcmVxdWVzdHMgdXNpbmcgdGhlIFN0cmVhbUFkYXB0ZXIgbm93IHByb3Blcmx5IHVzZSByZXF1ZXN0X2Z1bGx1cmkgKCM2MzIpCiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gc2V0IHNjYWxhcnMgYXMgUE9TVCBmaWVsZHMgKCM2MjgpCgojIyA0LjAuMSAtIDIwMTQtMDQtMDQKCiogVGhlIEhUVFAgc3RhdHVzIGNvZGUgb2YgYSByZXNwb25zZSBpcyBub3cgc2V0IGFzIHRoZSBleGNlcHRpb24gY29kZSBvZgogIFJlcXVlc3RFeGNlcHRpb24gb2JqZWN0cy4KKiAzMDMgcmVkaXJlY3RzIHdpbGwgbm93IGNvcnJlY3RseSBzd2l0Y2ggZnJvbSBQT1NUIHRvIEdFVCByZXF1ZXN0cy4KKiBUaGUgZGVmYXVsdCBwYXJhbGxlbCBhZGFwdGVyIG9mIGEgY2xpZW50IG5vdyBjb3JyZWN0bHkgdXNlcyB0aGUgTXVsdGlBZGFwdGVyLgoqIEhhc0RhdGFUcmFpdCBub3cgaW5pdGlhbGl6ZXMgdGhlIGludGVybmFsIGRhdGEgYXJyYXkgYXMgYW4gZW1wdHkgYXJyYXkgc28KICB0aGF0IHRoZSB0b0FycmF5KCkgbWV0aG9kIGFsd2F5cyByZXR1cm5zIGFuIGFycmF5LgoKIyMgNC4wLjAgLSAyMDE0LTAzLTI5CgoqIEZvciBpbmZvcm1hdGlvbiBvbiBjaGFuZ2VzIGFuZCB1cGdyYWRpbmcsIHNlZToKICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9ibG9iL21hc3Rlci9VUEdSQURJTkcubWQjM3gtdG8tNDAKKiBBZGRlZCBgR3V6emxlSHR0cFxiYXRjaCgpYCBhcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBzZW5kaW5nIHJlcXVlc3RzIGluCiAgcGFyYWxsZWwgd2l0aG91dCBuZWVkaW5nIHRvIHdyaXRlIGFzeW5jaHJvbm91cyBjb2RlLgoqIFJlc3RydWN0dXJlZCBob3cgZXZlbnRzIGFyZSBhZGRlZCB0byBgR3V6emxlSHR0cFxDbGllbnRJbnRlcmZhY2U6OnNlbmRBbGwoKWAuCiAgWW91IGNhbiBub3cgcGFzcyBhIGNhbGxhYmxlIG9yIGFuIGFycmF5IG9mIGFzc29jaWF0aXZlIGFycmF5cyB3aGVyZSBlYWNoCiAgYXNzb2NpYXRpdmUgYXJyYXkgY29udGFpbnMgdGhlICJmbiIsICJwcmlvcml0eSIsIGFuZCAib25jZSIga2V5cy4KCiMjIDQuMC4wLnJjLTIgLSAyMDE0LTAzLTI1CgoqIFJlbW92ZWQgYGdldENvbmZpZygpYCBhbmQgYHNldENvbmZpZygpYCBmcm9tIGNsaWVudHMgdG8gYXZvaWQgY29uZnVzaW9uCiAgYXJvdW5kIHdoZXRoZXIgdGhpbmdzIGxpa2UgYmFzZV91cmwsIG1lc3NhZ2VfZmFjdG9yeSwgZXRjLiBzaG91bGQgYmUgYWJsZSB0bwogIGJlIHJldHJpZXZlZCBvciBtb2RpZmllZC4KKiBBZGRlZCBgZ2V0RGVmYXVsdE9wdGlvbigpYCBhbmQgYHNldERlZmF1bHRPcHRpb24oKWAgdG8gQ2xpZW50SW50ZXJmYWNlCiogZnVuY3Rpb25zLnBocCBmdW5jdGlvbnMgd2VyZSByZW5hbWVkIHVzaW5nIHNuYWtlX2Nhc2UgdG8gbWF0Y2ggUEhQIGlkaW9tcwoqIEFkZGVkIHN1cHBvcnQgZm9yIGBIVFRQX1BST1hZYCwgYEhUVFBTX1BST1hZYCwgYW5kCiAgYEdVWlpMRV9DVVJMX1NFTEVDVF9USU1FT1VUYCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBzcGVjaWZ5IGN1c3RvbSBgc2VuZEFsbCgpYCBldmVudCBwcmlvcml0aWVzCiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gc3BlY2lmeSBjdXN0b20gc3RyZWFtIGNvbnRleHQgb3B0aW9ucyB0byB0aGUgc3RyZWFtCiAgYWRhcHRlci4KKiBBZGRlZCBhIGZ1bmN0aW9ucy5waHAgZnVuY3Rpb24gZm9yIGBnZXRfcGF0aCgpYCBhbmQgYHNldF9wYXRoKClgCiogQ3VybEFkYXB0ZXIgYW5kIE11bHRpQWRhcHRlciBub3cgdXNlIGEgY2FsbGFibGUgdG8gZ2VuZXJhdGUgY3VybCByZXNvdXJjZXMKKiBNb2NrQWRhcHRlciBub3cgcHJvcGVybHkgcmVhZHMgYSBib2R5IGFuZCBlbWl0cyBhIGBoZWFkZXJzYCBldmVudAoqIFVwZGF0ZWQgVXJsIGNsYXNzIHRvIGNoZWNrIGlmIGEgc2NoZW1lIGFuZCBob3N0IGFyZSBzZXQgYmVmb3JlIGFkZGluZyAiOiIKICBhbmQgIi8vIi4gVGhpcyBhbGxvd3MgZW1wdHkgVXJsIChlLmcuLCAiIikgdG8gYmUgc2VyaWFsaXplZCBhcyAiIi4KKiBQYXJzaW5nIGludmFsaWQgWE1MIG5vIGxvbmdlciBlbWl0cyB3YXJuaW5ncwoqIEN1cmwgY2xhc3NlcyBub3cgcHJvcGVybHkgdGhyb3cgQWRhcHRlckV4Y2VwdGlvbnMKKiBWYXJpb3VzIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMKKiBTdHJlYW1zIGFyZSBjcmVhdGVkIHdpdGggdGhlIGZhc3RlciBgU3RyZWFtXGNyZWF0ZSgpYCBmdW5jdGlvbgoqIE1hcmtlZCBkZXByZWNhdGlvbl9wcm94eSgpIGFzIGludGVybmFsCiogVGVzdCBzZXJ2ZXIgaXMgbm93IGEgY29sbGVjdGlvbiBvZiBzdGF0aWMgbWV0aG9kcyBvbiBhIGNsYXNzCgojIyA0LjAuMC1yYy4xIC0gMjAxNC0wMy0xNQoKKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvYmxvYi9tYXN0ZXIvVVBHUkFESU5HLm1kIzN4LXRvLTQwCgojIyAzLjguMSAtIDIwMTQtMDEtMjgKCiogQnVnOiBBbHdheXMgdXNpbmcgR0VUIHJlcXVlc3RzIHdoZW4gcmVkaXJlY3RpbmcgZnJvbSBhIDMwMyByZXNwb25zZQoqIEJ1ZzogQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCBpcyBub3cgY29ycmVjdGx5IHNldCB0byBmYWxzZSB3aGVuIHNldHRpbmcgYCRjZXJ0aWZpY2F0ZUF1dGhvcml0eWAgdG8gZmFsc2UgaW4KICBgR3V6emxlXEh0dHBcQ2xpZW50SW50ZXJmYWNlOjpzZXRTc2xWZXJpZmljYXRpb24oKWAKKiBCdWc6IFJlZGlyZWN0UGx1Z2luIG5vdyB1c2VzIHN0cmljdCBSRkMgMzk4NiBjb21wbGlhbmNlIHdoZW4gY29tYmluaW5nIGEgYmFzZSBVUkwgd2l0aCBhIHJlbGF0aXZlIFVSTAoqIEJ1ZzogVGhlIGJvZHkgb2YgYSByZXF1ZXN0IGNhbiBub3cgYmUgc2V0IHRvIGAiMCJgCiogU2VuZGluZyBQSFAgc3RyZWFtIHJlcXVlc3RzIG5vIGxvbmdlciBmb3JjZXMgYEhUVFAvMS4wYAoqIEFkZGluZyBtb3JlIGluZm9ybWF0aW9uIHRvIEV4Y2VwdGlvbkNvbGxlY3Rpb24gZXhjZXB0aW9ucyBzbyB0aGF0IHVzZXJzIGhhdmUgbW9yZSBjb250ZXh0LCBpbmNsdWRpbmcgYSBzdGFjayB0cmFjZSBvZgogIGVhY2ggc3ViLWV4Y2VwdGlvbgoqIFVwZGF0ZWQgdGhlIGAkcmVmYCBhdHRyaWJ1dGUgaW4gc2VydmljZSBkZXNjcmlwdGlvbnMgdG8gbWVyZ2Ugb3ZlciBhbnkgZXhpc3RpbmcgcGFyYW1ldGVycyBvZiBhIHNjaGVtYSAocmF0aGVyIHRoYW4KICBjbG9iYmVyaW5nIGV2ZXJ5dGhpbmcpLgoqIE1lcmdpbmcgVVJMcyB3aWxsIG5vdyB1c2UgdGhlIHF1ZXJ5IHN0cmluZyBvYmplY3QgZnJvbSB0aGUgcmVsYXRpdmUgVVJMICh0aHVzIGFsbG93aW5nIGN1c3RvbSBxdWVyeSBhZ2dyZWdhdG9ycykKKiBRdWVyeSBzdHJpbmdzIGFyZSBub3cgcGFyc2VkIGluIGEgd2F5IHRoYXQgdGhleSBkbyBubyBjb252ZXJ0IGVtcHR5IGtleXMgd2l0aCBubyB2YWx1ZSB0byBoYXZlIGEgZGFuZ2xpbmcgYD1gLgogIEZvciBleGFtcGxlIGBmb28mYmFyPWJhemAgaXMgbm93IGNvcnJlY3RseSBwYXJzZWQgYW5kIHJlY29nbml6ZWQgYXMgYGZvbyZiYXI9YmF6YCByYXRoZXIgdGhhbiBgZm9vPSZiYXI9YmF6YC4KKiBOb3cgcHJvcGVybHkgZXNjYXBpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBkZWxpbWl0ZXIgd2hlbiBtYXRjaGluZyBDb29raWUgZG9tYWlucy4KKiBOZXR3b3JrIGFjY2VzcyBpcyBub3cgZGlzYWJsZWQgd2hlbiBsb2FkaW5nIFhNTCBkb2N1bWVudHMKCiMjIDMuOC4wIC0gMjAxMy0xMi0wNQoKKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBkZWZpbmUgYSBQT1NUIG5hbWUgZm9yIGEgZmlsZQoqIEpTT04gcmVzcG9uc2UgcGFyc2luZyBub3cgcHJvcGVybHkgd2Fsa3MgYWRkaXRpb25hbFByb3BlcnRpZXMKKiBjVVJMIGVycm9yIGNvZGUgMTggaXMgbm93IHJldHJpZWQgYXV0b21hdGljYWxseSBpbiB0aGUgQmFja29mZlBsdWdpbgoqIEZpeGVkIGEgY1VSTCBlcnJvciB3aGVuIFVSTHMgY29udGFpbiBmcmFnbWVudHMKKiBGaXhlZCBhbiBpc3N1ZSBpbiB0aGUgQmFja29mZlBsdWdpbiByZXRyeSBldmVudCB3aGVyZSBpdCB3YXMgdHJ5aW5nIHRvIGFjY2VzcyBhbGwgZXhjZXB0aW9ucyBhcyBpZiB0aGV5IHdlcmUKICBDdXJsRXhjZXB0aW9ucwoqIENVUkxPUFRfUFJPR1JFU1MgZnVuY3Rpb24gZml4IGZvciBQSFAgNS41ICg2OWZjYzFlKQoqIEFkZGVkIHRoZSBhYmlsaXR5IGZvciBHdXp6bGUgdG8gd29yayB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIGNVUkwgdGhhdCBkbyBub3Qgc3VwcG9ydCBgQ1VSTE9QVF9USU1FT1VUX01TYAoqIEZpeGVkIGEgYnVnIHRoYXQgd2FzIGVuY291bnRlcmVkIHdoZW4gcGFyc2luZyBlbXB0eSBoZWFkZXIgcGFyYW1ldGVycwoqIFVyaVRlbXBsYXRlIG5vdyBoYXMgYSBgc2V0UmVnZXgoKWAgbWV0aG9kIHRvIG1hdGNoIHRoZSBkb2NzCiogVGhlIGBkZWJ1Z2AgcmVxdWVzdCBwYXJhbWV0ZXIgbm93IGNoZWNrcyBpZiBpdCBpcyB0cnV0aHkgcmF0aGVyIHRoYW4gaWYgaXQgZXhpc3RzCiogU2V0dGluZyB0aGUgYGRlYnVnYCByZXF1ZXN0IHBhcmFtZXRlciB0byB0cnVlIHNob3dzIHZlcmJvc2UgY1VSTCBvdXRwdXQgaW5zdGVhZCBvZiB1c2luZyB0aGUgTG9nUGx1Z2luCiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gY29tYmluZSBVUkxzIHVzaW5nIHN0cmljdCBSRkMgMzk4NiBjb21wbGlhbmNlCiogQ29tbWFuZCBvYmplY3RzIGNhbiBub3cgcmV0dXJuIHRoZSB2YWxpZGF0aW9uIGVycm9ycyBlbmNvdW50ZXJlZCBieSB0aGUgY29tbWFuZAoqIFZhcmlvdXMgZml4ZXMgdG8gY2FjaGUgcmV2YWxpZGF0aW9uICgjNDM3IGFuZCAyOTc5N2U1KQoqIFZhcmlvdXMgZml4ZXMgdG8gdGhlIEFzeW5jUGx1Z2luCiogQ2xlYW5lZCB1cCBidWlsZCBzY3JpcHRzCgojIyAzLjcuNCAtIDIwMTMtMTAtMDIKCiogQnVnIGZpeDogMCBpcyBub3cgYW4gYWxsb3dlZCB2YWx1ZSBpbiBhIGRlc2NyaXB0aW9uIHBhcmFtZXRlciB0aGF0IGhhcyBhIGRlZmF1bHQgdmFsdWUgKCM0MzApCiogQnVnIGZpeDogU2NoZW1hRm9ybWF0dGVyIG5vdyByZXR1cm5zIGFuIGludGVnZXIgd2hlbiBmb3JtYXR0aW5nIHRvIGEgVW5peCB0aW1lc3RhbXAKICAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1waHAvaXNzdWVzLzE0NykKKiBCdWcgZml4OiBDbGVhbmVkIHVwIGFuZCBmaXhlZCBVUkwgZG90IHNlZ21lbnQgcmVtb3ZhbCB0byBwcm9wZXJseSByZXNvbHZlIGludGVybmFsIGRvdHMKKiBNaW5pbXVtIFBIUCB2ZXJzaW9uIGlzIG5vdyBwcm9wZXJseSBzcGVjaWZpZWQgYXMgNS4zLjMgKHVwIGZyb20gNS4zLjIpICgjNDIwKQoqIFVwZGF0ZWQgdGhlIGJ1bmRsZWQgY2FjZXJ0LnBlbSAoIzQxOSkKKiBPYXV0aFBsdWdpbiBub3cgc3VwcG9ydHMgYWRkaW5nIGF1dGhlbnRpY2F0aW9uIHRvIGhlYWRlcnMgb3IgcXVlcnkgc3RyaW5nICgjNDI1KQoKIyMgMy43LjMgLSAyMDEzLTA5LTA4CgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIGdldCB0aGUgZXhjZXB0aW9uIGFzc29jaWF0ZWQgd2l0aCBhIHJlcXVlc3QvY29tbWFuZCB3aGVuIHVzaW5nIGBNdWx0aVRyYW5zZmVyRXhjZXB0aW9uYCBhbmQKICBgQ29tbWFuZFRyYW5zZmVyRXhjZXB0aW9uYC4KKiBTZXR0aW5nIGBhZGRpdGlvbmFsUGFyYW1ldGVyc2Agb2YgYSByZXNwb25zZSB0byBmYWxzZSBpcyBub3cgaG9ub3JlZCB3aGVuIHBhcnNpbmcgcmVzcG9uc2VzIHdpdGggYSBzZXJ2aWNlIGRlc2NyaXB0aW9uCiogU2NoZW1hcyBhcmUgb25seSBpbmplY3RlZCBpbnRvIHJlc3BvbnNlIG1vZGVscyB3aGVuIGV4cGxpY2l0bHkgY29uZmlndXJlZC4KKiBObyBsb25nZXIgZ3Vlc3NpbmcgQ29udGVudC1UeXBlIGJhc2VkIG9uIHRoZSBwYXRoIG9mIGEgcmVxdWVzdC4gQ29udGVudC1UeXBlIGlzIG5vdyBvbmx5IGd1ZXNzZWQgYmFzZWQgb24gdGhlIHBhdGggb2YKICBhbiBFbnRpdHlCb2R5LgoqIEJ1ZyBmaXg6IENodW5rZWRJdGVyYXRvciBjYW4gbm93IHByb3Blcmx5IGNodW5rIGEgXFRyYXZlcnNhYmxlIGFzIHdlbGwgYXMgYW4gXEl0ZXJhdG9yLgoqIEJ1ZyBmaXg6IEZpbHRlckl0ZXJhdG9yIG5vdyByZWxpZXMgb24gYFxJdGVyYXRvcmAgaW5zdGVhZCBvZiBgXFRyYXZlcnNhYmxlYC4KKiBCdWcgZml4OiBHcmFjZWZ1bGx5IGhhbmRsaW5nIG1hbGZvcm1lZCByZXNwb25zZXMgaW4gUmVxdWVzdE1lZGlhdG9yOjp3cml0ZVJlc3BvbnNlQm9keSgpCiogQnVnIGZpeDogUmVwbGFjZWQgY2FsbCB0byBjYW5DYWNoZSB3aXRoIGNhbkNhY2hlUmVxdWVzdCBpbiB0aGUgQ2FsbGJhY2tDYW5DYWNoZVN0cmF0ZWd5IG9mIHRoZSBDYWNoZVBsdWdpbgoqIEJ1ZyBmaXg6IFZpc2l0aW5nIFhNTCBhdHRyaWJ1dGVzIGZpcnN0IGJlZm9yZSB2aXNpdGluZyBYTUwgY2hpbGRyZW4gd2hlbiBzZXJpYWxpemluZyByZXF1ZXN0cwoqIEJ1ZyBmaXg6IFByb3Blcmx5IHBhcnNpbmcgaGVhZGVycyB0aGF0IGNvbnRhaW4gY29tbWFzIGNvbnRhaW5lZCBpbiBxdW90ZXMKKiBCdWcgZml4OiBtaW1ldHlwZSBndWVzc2luZyBiYXNlZCBvbiBhIGZpbGVuYW1lIGlzIG5vdyBjYXNlLWluc2Vuc2l0aXZlCgojIyAzLjcuMiAtIDIwMTMtMDgtMDIKCiogQnVnIGZpeDogUHJvcGVybHkgVVJMIGVuY29kaW5nIHBhdGhzIHdoZW4gdXNpbmcgdGhlIFBIUC1vbmx5IHZlcnNpb24gb2YgdGhlIFVyaVRlbXBsYXRlIGV4cGFuZGVyCiAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2lzc3Vlcy8zNzEKKiBCdWcgZml4OiBDb29raWUgZG9tYWlucyBhcmUgbm93IG1hdGNoZWQgY29ycmVjdGx5IGFjY29yZGluZyB0byBSRkMgNjI2NQogIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9pc3N1ZXMvMzc3CiogQnVnIGZpeDogR0VUIHBhcmFtZXRlcnMgYXJlIG5vdyB1c2VkIHdoZW4gY2FsY3VsYXRpbmcgYW4gT0F1dGggc2lnbmF0dXJlCiogQnVnIGZpeDogRml4ZWQgYW4gaXNzdWUgd2l0aCBjYWNoZSByZXZhbGlkYXRpb24gd2hlcmUgdGhlIElmLU5vbmUtTWF0Y2ggaGVhZGVyIHdhcyBiZWluZyBkb3VibGUgcXVvdGVkCiogYEd1enpsZVxDb21tb25cQWJzdHJhY3RIYXNEaXNwYXRjaGVyOjpkaXNwYXRjaCgpYCBub3cgcmV0dXJucyB0aGUgZXZlbnQgdGhhdCB3YXMgZGlzcGF0Y2hlZAoqIGBHdXp6bGVcSHR0cFxRdWVyeVN0cmluZzo6ZmFjdG9yeSgpYCBub3cgZ3Vlc3NlcyB0aGUgbW9zdCBhcHByb3ByaWF0ZSBxdWVyeSBhZ2dyZWdhdG9yIHRvIHVzZWQgYmFzZWQgb24gdGhlIGlucHV0LgogIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9pc3N1ZXMvMzc5CiogQWRkZWQgYSB3YXkgdG8gYWRkIGN1c3RvbSBkb21haW4gb2JqZWN0cyB0byBzZXJ2aWNlIGRlc2NyaXB0aW9uIHBhcnNpbmcgdXNpbmcgdGhlIGBvcGVyYXRpb24ucGFyc2VfY2xhc3NgIGV2ZW50LiBTZWUKICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzM4MAoqIGNVUkwgbXVsdGkgY2xlYW51cCBhbmQgb3B0aW1pemF0aW9ucwoKIyMgMy43LjEgLSAyMDEzLTA3LTA1CgoqIEJ1ZyBmaXg6IFNldHRpbmcgZGVmYXVsdCBvcHRpb25zIG9uIGEgY2xpZW50IG5vdyB3b3JrcwoqIEJ1ZyBmaXg6IFNldHRpbmcgb3B0aW9ucyBvbiBIRUFEIHJlcXVlc3RzIG5vdyB3b3Jrcy4gU2VlICMzNTIKKiBCdWcgZml4OiBNb3Zpbmcgc3RyZWFtIGZhY3RvcnkgYmVmb3JlIHNlbmQgZXZlbnQgdG8gYmVmb3JlIGJ1aWxkaW5nIHRoZSBzdHJlYW0uIFNlZSAjMzUzCiogQnVnIGZpeDogQ29va2llcyBubyBsb25nZXIgbWF0Y2ggb24gSVAgYWRkcmVzc2VzIHBlciBSRkMgNjI2NQoqIEJ1ZyBmaXg6IENvcnJlY3RseSBwYXJzaW5nIGhlYWRlciBwYXJhbWV0ZXJzIHRoYXQgYXJlIGluIGA8PmAgYW5kIHF1b3RlcwoqIEFkZGVkIGBjZXJ0YCBhbmQgYHNzbF9rZXlgIGFzIHJlcXVlc3Qgb3B0aW9ucwoqIGBIb3N0YCBoZWFkZXIgY2FuIG5vdyBkaXZlcmdlIGZyb20gdGhlIGhvc3QgcGFydCBvZiBhIFVSTCBpZiB0aGUgaGVhZGVyIGlzIHNldCBtYW51YWxseQoqIGBHdXp6bGVcU2VydmljZVxDb21tYW5kXExvY2F0aW9uVmlzaXRvclxSZXF1ZXN0XFhtbFZpc2l0b3JgIHdhcyByZXdyaXR0ZW4gdG8gY2hhbmdlIGZyb20gdXNpbmcgU2ltcGxlWE1MIHRvIFhNTFdyaXRlcgoqIE9BdXRoIHBhcmFtZXRlcnMgYXJlIG9ubHkgYWRkZWQgdmlhIHRoZSBwbHVnaW4gaWYgdGhleSBhcmVuJ3QgYWxyZWFkeSBzZXQKKiBFeGNlcHRpb25zIGFyZSBub3cgdGhyb3duIHdoZW4gYSBVUkwgY2Fubm90IGJlIHBhcnNlZAoqIFJldHVybmluZyBgZmFsc2VgIGlmIGBHdXp6bGVcSHR0cFxFbnRpdHlCb2R5OjpnZXRDb250ZW50TWQ1KClgIGZhaWxzCiogTm90IHNldHRpbmcgYSBgQ29udGVudC1NRDVgIG9uIGEgY29tbWFuZCBpZiBjYWxjdWxhdGluZyB0aGUgQ29udGVudC1NRDUgZmFpbHMgdmlhIHRoZSBDb21tYW5kQ29udGVudE1kNVBsdWdpbgoKIyMgMy43LjAgLSAyMDEzLTA2LTEwCgoqIFNlZSBVUEdSQURJTkcubWQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIHVwZ3JhZGUuCiogUmVxdWVzdHMgbm93IHN1cHBvcnQgdGhlIGFiaWxpdHkgdG8gc3BlY2lmeSBhbiBhcnJheSBvZiAkb3B0aW9ucyB3aGVuIGNyZWF0aW5nIGEgcmVxdWVzdCB0byBtb3JlIGVhc2lseSBtb2RpZnkgYQogIHJlcXVlc3QuIFlvdSBjYW4gcGFzcyBhICdyZXF1ZXN0Lm9wdGlvbnMnIGNvbmZpZ3VyYXRpb24gc2V0dGluZyB0byBhIGNsaWVudCB0byBhcHBseSBkZWZhdWx0IHJlcXVlc3Qgb3B0aW9ucyB0bwogIGV2ZXJ5IHJlcXVlc3QgY3JlYXRlZCBieSBhIGNsaWVudCAoZS5nLiBkZWZhdWx0IHF1ZXJ5IHN0cmluZyB2YXJpYWJsZXMsIGhlYWRlcnMsIGN1cmwgb3B0aW9ucywgZXRjLikuCiogQWRkZWQgYSBzdGF0aWMgZmFjYWRlIGNsYXNzIHRoYXQgYWxsb3dzIHlvdSB0byB1c2UgR3V6emxlIHdpdGggc3RhdGljIG1ldGhvZHMgYW5kIG1vdW50IHRoZSBjbGFzcyB0byBgXEd1enpsZWAuCiAgU2VlIGBHdXp6bGVcSHR0cFxTdGF0aWNDbGllbnQ6Om1vdW50YC4KKiBBZGRlZCBgY29tbWFuZC5yZXF1ZXN0X29wdGlvbnNgIHRvIGBHdXp6bGVcU2VydmljZVxDb21tYW5kXEFic3RyYWN0Q29tbWFuZGAgdG8gcGFzcyByZXF1ZXN0IG9wdGlvbnMgdG8gcmVxdWVzdHMKICAgICAgY3JlYXRlZCBieSBhIGNvbW1hbmQgKGUuZy4gY3VzdG9tIGhlYWRlcnMsIHF1ZXJ5IHN0cmluZyB2YXJpYWJsZXMsIHRpbWVvdXQgc2V0dGluZ3MsIGV0Yy4pLgoqIFN0cmVhbSBzaXplIGluIGBHdXp6bGVcU3RyZWFtXFBocFN0cmVhbVJlcXVlc3RGYWN0b3J5YCB3aWxsIG5vdyBiZSBzZXQgaWYgQ29udGVudC1MZW5ndGggaXMgcmV0dXJuZWQgaW4gdGhlCiAgaGVhZGVycyBvZiBhIHJlc3BvbnNlCiogQWRkZWQgYEd1enpsZVxDb21tb25cQ29sbGVjdGlvbjo6c2V0UGF0aCgkcGF0aCwgJHZhbHVlKWAgdG8gc2V0IGEgdmFsdWUgaW50byBhbiBhcnJheSB1c2luZyBhIG5lc3RlZCBrZXkKICAoZS5nLiBgJGNvbGxlY3Rpb24tPnNldFBhdGgoJ2Zvby9iYXovYmFyJywgJ3Rlc3QnKTsgZWNobyAkY29sbGVjdGlvblsnZm9vJ11bJ2JhciddWydiYXInXTtgKQoqIFNlcnZpY2VCdWlsZGVycyBub3cgc3VwcG9ydCBzdG9yaW5nIGFuZCByZXRyaWV2aW5nIGFyYml0cmFyeSBkYXRhCiogQ2FjaGVQbHVnaW4gY2FuIG5vdyBwdXJnZSBhbGwgcmVzb3VyY2VzIGZvciBhIGdpdmVuIFVSSQoqIENhY2hlUGx1Z2luIGNhbiBhdXRvbWF0aWNhbGx5IHB1cmdlIG1hdGNoaW5nIGNhY2hlZCBpdGVtcyB3aGVuIGEgbm9uLWlkZW1wb3RlbnQgcmVxdWVzdCBpcyBzZW50IHRvIGEgcmVzb3VyY2UKKiBDYWNoZVBsdWdpbiBub3cgdXNlcyB0aGUgVmFyeSBoZWFkZXIgdG8gZGV0ZXJtaW5lIGlmIGEgcmVzb3VyY2UgaXMgYSBjYWNoZSBoaXQKKiBgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXNwb25zZWAgbm93IGltcGxlbWVudHMgYFxTZXJpYWxpemFibGVgCiogQWRkZWQgYEd1enpsZVxDYWNoZVxDYWNoZUFkYXB0ZXJGYWN0b3J5Ojpmcm9tQ2FjaGUoKWAgdG8gbW9yZSBlYXNpbHkgY3JlYXRlIGNhY2hlIGFkYXB0ZXJzCiogYEd1enpsZVxTZXJ2aWNlXENsaWVudEludGVyZmFjZTo6ZXhlY3V0ZSgpYCBub3cgYWNjZXB0cyBhbiBhcnJheSwgc2luZ2xlIGNvbW1hbmQsIG9yIFRyYXZlcnNhYmxlCiogRml4ZWQgYSBidWcgaW4gYEd1enpsZVxIdHRwXE1lc3NhZ2VcSGVhZGVyXExpbms6OmFkZExpbmsoKWAKKiBCZXR0ZXIgaGFuZGxpbmcgb2YgY2FsY3VsYXRpbmcgdGhlIHNpemUgb2YgYSBzdHJlYW0gaW4gYEd1enpsZVxTdHJlYW1cU3RyZWFtYCB1c2luZyBmc3RhdCgpIGFuZCBjYWNoaW5nIHRoZSBzaXplCiogYEd1enpsZVxDb21tb25cRXhjZXB0aW9uXEV4Y2VwdGlvbkNvbGxlY3Rpb25gIG5vdyBjcmVhdGVzIGEgbW9yZSByZWFkYWJsZSBleGNlcHRpb24gbWVzc2FnZQoqIEZpeGluZyBCQyBicmVhazogQWRkZWQgYmFjayB0aGUgTW9ub2xvZ0xvZ0FkYXB0ZXIgaW1wbGVtZW50YXRpb24gcmF0aGVyIHRoYW4gZXh0ZW5kaW5nIGZyb20gUHNyTG9nIHNvIHRoYXQgb2xkZXIKICBTeW1mb255IHVzZXJzIGNhbiBzdGlsbCB1c2UgdGhlIG9sZCB2ZXJzaW9uIG9mIE1vbm9sb2cuCiogRml4aW5nIEJDIGJyZWFrOiBBZGRlZCB0aGUgaW1wbGVtZW50YXRpb24gYmFjayBpbiBmb3IgYEd1enpsZVxIdHRwXE1lc3NhZ2VcQWJzdHJhY3RNZXNzYWdlOjpnZXRUb2tlbml6ZWRIZWFkZXIoKWAuCiAgTm93IHRyaWdnZXJpbmcgYW4gRV9VU0VSX0RFUFJFQ0FURUQgd2FybmluZyB3aGVuIHVzZWQuIFVzZSBgJG1lc3NhZ2UtPmdldEhlYWRlcigpLT5wYXJzZVBhcmFtcygpYC4KKiBTZXZlcmFsIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyB0byBgR3V6emxlXENvbW1vblxDb2xsZWN0aW9uYAoqIEFkZGVkIGFuIGAkb3B0aW9uc2AgYXJndW1lbnQgdG8gdGhlIGVuZCBvZiB0aGUgZm9sbG93aW5nIG1ldGhvZHMgb2YgYEd1enpsZVxIdHRwXENsaWVudEludGVyZmFjZWA6CiAgY3JlYXRlUmVxdWVzdCwgaGVhZCwgZGVsZXRlLCBwdXQsIHBhdGNoLCBwb3N0LCBvcHRpb25zLCBwcmVwYXJlUmVxdWVzdAoqIEFkZGVkIGFuIGAkb3B0aW9uc2AgYXJndW1lbnQgdG8gdGhlIGVuZCBvZiBgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXF1ZXN0XFJlcXVlc3RGYWN0b3J5SW50ZXJmYWNlOjpjcmVhdGVSZXF1ZXN0KClgCiogQWRkZWQgYW4gYGFwcGx5T3B0aW9ucygpYCBtZXRob2QgdG8gYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdFxSZXF1ZXN0RmFjdG9yeUludGVyZmFjZWAKKiBDaGFuZ2VkIGBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OmdldCgkdXJpID0gbnVsbCwgJGhlYWRlcnMgPSBudWxsLCAkYm9keSA9IG51bGwpYCB0bwogIGBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OmdldCgkdXJpID0gbnVsbCwgJGhlYWRlcnMgPSBudWxsLCAkb3B0aW9ucyA9IGFycmF5KCkpYC4gWW91IGNhbiBzdGlsbCBwYXNzIGluIGEKICByZXNvdXJjZSwgc3RyaW5nLCBvciBFbnRpdHlCb2R5IGludG8gdGhlICRvcHRpb25zIHBhcmFtZXRlciB0byBzcGVjaWZ5IHRoZSBkb3dubG9hZCBsb2NhdGlvbiBvZiB0aGUgcmVzcG9uc2UuCiogQ2hhbmdlZCBgR3V6emxlXENvbW1vblxDb2xsZWN0aW9uOjpfX2NvbnN0cnVjdCgkZGF0YSlgIHRvIG5vIGxvbmdlciBhY2NlcHRzIGEgbnVsbCB2YWx1ZSBmb3IgYCRkYXRhYCBidXQgYQogIGRlZmF1bHQgYGFycmF5KClgCiogQWRkZWQgYEd1enpsZVxTdHJlYW1cU3RyZWFtSW50ZXJmYWNlOjppc1JlcGVhdGFibGVgCiogUmVtb3ZlZCBgR3V6emxlXEh0dHBcQ2xpZW50SW50ZXJmYWNlOjpzZXREZWZhdWx0SGVhZGVycygpLiBVc2UKICAkY2xpZW50LT5nZXRDb25maWcoKS0+c2V0UGF0aCgncmVxdWVzdC5vcHRpb25zL2hlYWRlcnMve2hlYWRlcl9uYW1lfScsICd2YWx1ZScpYC4gb3IKICAkY2xpZW50LT5nZXRDb25maWcoKS0+c2V0UGF0aCgncmVxdWVzdC5vcHRpb25zL2hlYWRlcnMnLCBhcnJheSgnaGVhZGVyX25hbWUnID0+ICd2YWx1ZScpKWAuCiogUmVtb3ZlZCBgR3V6emxlXEh0dHBcQ2xpZW50SW50ZXJmYWNlOjpnZXREZWZhdWx0SGVhZGVycygpLiBVc2UgJGNsaWVudC0+Z2V0Q29uZmlnKCktPmdldFBhdGgoJ3JlcXVlc3Qub3B0aW9ucy9oZWFkZXJzJylgLgoqIFJlbW92ZWQgYEd1enpsZVxIdHRwXENsaWVudEludGVyZmFjZTo6ZXhwYW5kVGVtcGxhdGUoKWAKKiBSZW1vdmVkIGBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OnNldFJlcXVlc3RGYWN0b3J5KClgCiogUmVtb3ZlZCBgR3V6emxlXEh0dHBcQ2xpZW50SW50ZXJmYWNlOjpnZXRDdXJsTXVsdGkoKWAKKiBSZW1vdmVkIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U6OmNhbkNhY2hlYAoqIFJlbW92ZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTo6c2V0SXNSZWRpcmVjdGAKKiBSZW1vdmVkIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U6OmlzUmVkaXJlY3RgCiogTWFkZSBgR3V6emxlXEh0dHBcQ2xpZW50OjpleHBhbmRUZW1wbGF0ZWAgYW5kIGBnZXRVcmlUZW1wbGF0ZWAgcHJvdGVjdGVkIG1ldGhvZHMuCiogWW91IGNhbiBub3cgZW5hYmxlIEVfVVNFUl9ERVBSRUNBVEVEIHdhcm5pbmdzIHRvIHNlZSBpZiB5b3UgYXJlIHVzaW5nIGEgZGVwcmVjYXRlZCBtZXRob2QgYnkgc2V0dGluZwogIGBHdXp6bGVcQ29tbW9uXFZlcnNpb246OiRlbWl0V2FybmluZ3NgIHRvIHRydWUuCiogTWFya2VkIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3Q6OmlzUmVzcG9uc2VCb2R5UmVwZWF0YWJsZSgpYCBhcyBkZXByZWNhdGVkLiBVc2UKICAgICAgYCRyZXF1ZXN0LT5nZXRSZXNwb25zZUJvZHkoKS0+aXNSZXBlYXRhYmxlKClgIGluc3RlYWQuCiogTWFya2VkIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3Q6OmNhbkNhY2hlKClgIGFzIGRlcHJlY2F0ZWQuIFVzZQogIGBHdXp6bGVcUGx1Z2luXENhY2hlXERlZmF1bHRDYW5DYWNoZVN0cmF0ZWd5LT5jYW5DYWNoZVJlcXVlc3QoKWAgaW5zdGVhZC4KKiBNYXJrZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdDo6Y2FuQ2FjaGUoKWAgYXMgZGVwcmVjYXRlZC4gVXNlCiAgYEd1enpsZVxQbHVnaW5cQ2FjaGVcRGVmYXVsdENhbkNhY2hlU3RyYXRlZ3ktPmNhbkNhY2hlUmVxdWVzdCgpYCBpbnN0ZWFkLgoqIE1hcmtlZCBgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXF1ZXN0OjpzZXRJc1JlZGlyZWN0KClgIGFzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgSGlzdG9yeVBsdWdpbiBpbnN0ZWFkLgoqIE1hcmtlZCBgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXF1ZXN0Ojppc1JlZGlyZWN0KClgIGFzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgSGlzdG9yeVBsdWdpbiBpbnN0ZWFkLgoqIE1hcmtlZCBgR3V6emxlXENhY2hlXENhY2hlQWRhcHRlckZhY3Rvcnk6OmZhY3RvcnkoKWAgYXMgZGVwcmVjYXRlZAoqIE1hcmtlZCAnY29tbWFuZC5oZWFkZXJzJywgJ2NvbW1hbmQucmVzcG9uc2VfYm9keScgYW5kICdjb21tYW5kLm9uX2NvbXBsZXRlJyBhcyBkZXByZWNhdGVkIGZvciBBYnN0cmFjdENvbW1hbmQuCiAgVGhlc2Ugd2lsbCB3b3JrIHRocm91Z2ggR3V6emxlIDQuMAoqIE1hcmtlZCAncmVxdWVzdC5wYXJhbXMnIGZvciBgR3V6emxlXEh0dHBcQ2xpZW50YCBhcyBkZXByZWNhdGVkLiBVc2UgW3JlcXVlc3Qub3B0aW9uc11bcGFyYW1zXS4KKiBNYXJrZWQgYEd1enpsZVxTZXJ2aWNlXENsaWVudDo6ZW5hYmxlTWFnaWNNZXRob2RzKClgIGFzIGRlcHJlY2F0ZWQuIE1hZ2ljIG1ldGhvZHMgY2FuIG5vIGxvbmdlciBiZSBkaXNhYmxlZCBvbiBhIEd1enpsZVxTZXJ2aWNlXENsaWVudC4KKiBNYXJrZWQgYEd1enpsZVxTZXJ2aWNlXENsaWVudDo6Z2V0RGVmYXVsdEhlYWRlcnMoKWAgYXMgZGVwcmVjYXRlZC4gVXNlICRjbGllbnQtPmdldENvbmZpZygpLT5nZXRQYXRoKCdyZXF1ZXN0Lm9wdGlvbnMvaGVhZGVycycpYC4KKiBNYXJrZWQgYEd1enpsZVxTZXJ2aWNlXENsaWVudDo6c2V0RGVmYXVsdEhlYWRlcnMoKWAgYXMgZGVwcmVjYXRlZC4gVXNlICRjbGllbnQtPmdldENvbmZpZygpLT5zZXRQYXRoKCdyZXF1ZXN0Lm9wdGlvbnMvaGVhZGVycy97aGVhZGVyX25hbWV9JywgJ3ZhbHVlJylgLgoqIE1hcmtlZCBgR3V6emxlXFBhcnNlclxVcmxcVXJsUGFyc2VyYCBhcyBkZXByZWNhdGVkLiBKdXN0IHVzZSBQSFAncyBgcGFyc2VfdXJsKClgIGFuZCBwZXJjZW50IGVuY29kZSB5b3VyIFVURi04LgoqIE1hcmtlZCBgR3V6emxlXENvbW1vblxDb2xsZWN0aW9uOjppbmplY3QoKWAgYXMgZGVwcmVjYXRlZC4KKiBNYXJrZWQgYEd1enpsZVxQbHVnaW5cQ3VybEF1dGhcQ3VybEF1dGhQbHVnaW5gIGFzIGRlcHJlY2F0ZWQuIFVzZSBgJGNsaWVudC0+Z2V0Q29uZmlnKCktPnNldFBhdGgoJ3JlcXVlc3Qub3B0aW9ucy9hdXRoJywgYXJyYXkoJ3VzZXInLCAncGFzcycsICdCYXNpY3xEaWdlc3QnKTtgCiogQ2FjaGVLZXlQcm92aWRlckludGVyZmFjZSBhbmQgRGVmYXVsdENhY2hlS2V5UHJvdmlkZXIgYXJlIG5vIGxvbmdlciB1c2VkLiBBbGwgb2YgdGhpcyBsb2dpYyBpcyBoYW5kbGVkIGluIGEKICBDYWNoZVN0b3JhZ2VJbnRlcmZhY2UuIFRoZXNlIHR3byBvYmplY3RzIGFuZCBpbnRlcmZhY2Ugd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uCiogQWx3YXlzIHNldHRpbmcgWC1jYWNoZSBoZWFkZXJzIG9uIGNhY2hlZCByZXNwb25zZXMKKiBEZWZhdWx0IGNhY2hlIFRUTHMgYXJlIG5vdyBoYW5kbGVkIGJ5IHRoZSBDYWNoZVN0b3JhZ2VJbnRlcmZhY2Ugb2YgYSBDYWNoZVBsdWdpbgoqIGBDYWNoZVN0b3JhZ2VJbnRlcmZhY2U6OmNhY2hlKCRrZXksIFJlc3BvbnNlICRyZXNwb25zZSwgJHR0bCA9IG51bGwpYCBoYXMgY2hhbmdlZCB0byBgY2FjaGUoUmVxdWVzdEludGVyZmFjZQogICRyZXF1ZXN0LCBSZXNwb25zZSAkcmVzcG9uc2UpO2AKKiBgQ2FjaGVTdG9yYWdlSW50ZXJmYWNlOjpmZXRjaCgka2V5KWAgaGFzIGNoYW5nZWQgdG8gYGZldGNoKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QpO2AKKiBgQ2FjaGVTdG9yYWdlSW50ZXJmYWNlOjpkZWxldGUoJGtleSlgIGhhcyBjaGFuZ2VkIHRvIGBkZWxldGUoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCk7YAoqIEFkZGVkIGBDYWNoZVN0b3JhZ2VJbnRlcmZhY2U6OnB1cmdlKCR1cmwpYAoqIGBEZWZhdWx0UmV2YWxpZGF0aW9uOjpfX2NvbnN0cnVjdChDYWNoZUtleVByb3ZpZGVySW50ZXJmYWNlICRjYWNoZUtleSwgQ2FjaGVTdG9yYWdlSW50ZXJmYWNlICRjYWNoZSwgQ2FjaGVQbHVnaW4KICAkcGx1Z2luKWAgaGFzIGNoYW5nZWQgdG8gYERlZmF1bHRSZXZhbGlkYXRpb246Ol9fY29uc3RydWN0KENhY2hlU3RvcmFnZUludGVyZmFjZSAkY2FjaGUsCiAgQ2FuQ2FjaGVTdHJhdGVneUludGVyZmFjZSAkY2FuQ2FjaGUgPSBudWxsKWAKKiBBZGRlZCBgUmV2YWxpZGF0aW9uSW50ZXJmYWNlOjpzaG91bGRSZXZhbGlkYXRlKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIFJlc3BvbnNlICRyZXNwb25zZSlgCgojIyAzLjYuMCAtIDIwMTMtMDUtMjkKCiogU2VydmljZURlc2NyaXB0aW9uIG5vdyBpbXBsZW1lbnRzIFRvQXJyYXlJbnRlcmZhY2UKKiBBZGRlZCBjb21tYW5kLmhpZGRlbl9wYXJhbXMgdG8gYmxhY2tsaXN0IGNlcnRhaW4gaGVhZGVycyBmcm9tIGJlaW5nIHRyZWF0ZWQgYXMgYWRkaXRpb25hbFBhcmFtZXRlcnMKKiBHdXp6bGUgY2FuIG5vdyBjb3JyZWN0bHkgcGFyc2UgaW5jb21wbGV0ZSBVUkxzCiogTWl4ZWQgY2FzaW5nIG9mIGhlYWRlcnMgYXJlIG5vdyBmb3JjZWQgdG8gYmUgYSBzaW5nbGUgY29uc2lzdGVudCBjYXNpbmcgYWNyb3NzIGFsbCB2YWx1ZXMgZm9yIHRoYXQgaGVhZGVyLgoqIE1lc3NhZ2VzIGludGVybmFsbHkgdXNlIGEgSGVhZGVyQ29sbGVjdGlvbiBvYmplY3QgdG8gZGVsZWdhdGUgaGFuZGxpbmcgY2FzZS1pbnNlbnNpdGl2ZSBoZWFkZXIgcmVzb2x1dGlvbgoqIFJlbW92ZWQgdGhlIHdob2xlIGNoYW5nZWRIZWFkZXIoKSBmdW5jdGlvbiBzeXN0ZW0gb2YgbWVzc2FnZXMgYmVjYXVzZSBhbGwgaGVhZGVyIGNoYW5nZXMgbm93IGdvIHRocm91Z2ggYWRkSGVhZGVyKCkuCiogU3BlY2lmaWMgaGVhZGVyIGltcGxlbWVudGF0aW9ucyBjYW4gYmUgY3JlYXRlZCBmb3IgY29tcGxleCBoZWFkZXJzLiBXaGVuIGEgbWVzc2FnZSBjcmVhdGVzIGEgaGVhZGVyLCBpdCB1c2VzIGEKICBIZWFkZXJGYWN0b3J5IHdoaWNoIGNhbiBtYXAgc3BlY2lmaWMgaGVhZGVycyB0byBzcGVjaWZpYyBoZWFkZXIgY2xhc3Nlcy4gVGhlcmUgaXMgbm93IGEgTGluayBoZWFkZXIgYW5kCiAgQ2FjaGVDb250cm9sIGhlYWRlciBpbXBsZW1lbnRhdGlvbi4KKiBSZW1vdmVkIGZyb20gaW50ZXJmYWNlOiBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OnNldFVyaVRlbXBsYXRlCiogUmVtb3ZlZCBmcm9tIGludGVyZmFjZTogR3V6emxlXEh0dHBcQ2xpZW50SW50ZXJmYWNlOjpzZXRDdXJsTXVsdGkoKQoqIFJlbW92ZWQgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXF1ZXN0OjpyZWNlaXZlZFJlcXVlc3RIZWFkZXIoKSBhbmQgaW1wbGVtZW50ZWQgdGhpcyBmdW5jdGlvbmFsaXR5IGluCiAgR3V6emxlXEh0dHBcQ3VybFxSZXF1ZXN0TWVkaWF0b3IKKiBSZW1vdmVkIHRoZSBvcHRpb25hbCAkYXNTdHJpbmcgcGFyYW1ldGVyIGZyb20gTWVzc2FnZUludGVyZmFjZTo6Z2V0SGVhZGVyKCkuIEp1c3QgY2FzdCB0aGUgaGVhZGVyIHRvIGEgc3RyaW5nLgoqIFJlbW92ZWQgdGhlIG9wdGlvbmFsICR0cnlDaHVua2VkVHJhbnNmZXIgb3B0aW9uIGZyb20gR3V6emxlXEh0dHBcTWVzc2FnZVxFbnRpdHlFbmNsb3NpbmdSZXF1ZXN0SW50ZXJmYWNlCiogUmVtb3ZlZCB0aGUgJGFzT2JqZWN0cyBhcmd1bWVudCBmcm9tIEd1enpsZVxIdHRwXE1lc3NhZ2VcTWVzc2FnZUludGVyZmFjZTo6Z2V0SGVhZGVycygpCiogUmVtb3ZlZCBHdXp6bGVcUGFyc2VyXFBhcnNlclJlZ2lzdGVyOjpnZXQoKS4gVXNlIGdldFBhcnNlcigpCiogUmVtb3ZlZCBHdXp6bGVcUGFyc2VyXFBhcnNlclJlZ2lzdGVyOjpzZXQoKS4gVXNlIHJlZ2lzdGVyUGFyc2VyKCkuCiogQWxsIHJlc3BvbnNlIGhlYWRlciBoZWxwZXIgZnVuY3Rpb25zIHJldHVybiBhIHN0cmluZyByYXRoZXIgdGhhbiBtaXhpbmcgSGVhZGVyIG9iamVjdHMgYW5kIHN0cmluZ3MgaW5jb25zaXN0ZW50bHkKKiBSZW1vdmVkIGNVUkwgYmxhY2tsaXN0IHN1cHBvcnQuIFRoaXMgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSBub3cgdGhhdCBFeHBlY3QsIEFjY2VwdCwgZXRjLiBhcmUgbWFuYWdlZCBieSBHdXp6bGUKICBkaXJlY3RseSB2aWEgaW50ZXJmYWNlcwoqIFJlbW92ZWQgdGhlIGluamVjdGluZyBvZiBhIHJlcXVlc3Qgb2JqZWN0IG9udG8gYSByZXNwb25zZSBvYmplY3QuIFRoZSBtZXRob2RzIHRvIGdldCBhbmQgc2V0IGEgcmVxdWVzdCBzdGlsbCBleGlzdAogIGJ1dCBhcmUgYSBuby1vcCB1bnRpbCByZW1vdmVkLgoqIE1vc3QgY2xhc3NlcyB0aGF0IHVzZWQgdG8gcmVxdWlyZSBhIGBHdXp6bGVcU2VydmljZVxDb21tYW5kXENvbW1hbmRJbnRlcmZhY2VgIHR5cGVoaW50IG5vdyByZXF1ZXN0IGEKICBgR3V6emxlXFNlcnZpY2VcQ29tbWFuZFxBcnJheUNvbW1hbmRJbnRlcmZhY2VgLgoqIEFkZGVkIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U6OnN0YXJ0UmVzcG9uc2UoKWAgdG8gdGhlIFJlcXVlc3RJbnRlcmZhY2UgdG8gaGFuZGxlIGluamVjdGluZyBhIHJlc3BvbnNlCiAgb24gYSByZXF1ZXN0IHdoaWxlIHRoZSByZXF1ZXN0IGlzIHN0aWxsIGJlaW5nIHRyYW5zZmVycmVkCiogVGhlIGFiaWxpdHkgdG8gY2FzZS1pbnNlbnNpdGl2ZWx5IHNlYXJjaCBmb3IgaGVhZGVyIHZhbHVlcwoqIEd1enpsZVxIdHRwXE1lc3NhZ2VcSGVhZGVyOjpoYXNFeGFjdEhlYWRlcgoqIEd1enpsZVxIdHRwXE1lc3NhZ2VcSGVhZGVyOjpyYXcuIFVzZSBnZXRBbGwoKQoqIERlcHJlY2F0ZWQgY2FjaGUgY29udHJvbCBzcGVjaWZpYyBtZXRob2RzIG9uIEd1enpsZVxIdHRwXE1lc3NhZ2VcQWJzdHJhY3RNZXNzYWdlLiBVc2UgdGhlIENhY2hlQ29udHJvbCBoZWFkZXIgb2JqZWN0CiAgaW5zdGVhZC4KKiBgR3V6emxlXFNlcnZpY2VcQ29tbWFuZFxDb21tYW5kSW50ZXJmYWNlYCBub3cgZXh0ZW5kcyBmcm9tIFRvQXJyYXlJbnRlcmZhY2UgYW5kIEFycmF5QWNjZXNzCiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gY2FzdCBNb2RlbCBvYmplY3RzIHRvIGEgc3RyaW5nIHRvIHZpZXcgZGVidWcgaW5mb3JtYXRpb24uCgojIyAzLjUuMCAtIDIwMTMtMDUtMTMKCiogQnVnOiBGaXhlZCBhIHJlZ3Jlc3Npb24gc28gdGhhdCByZXF1ZXN0IHJlc3BvbnNlcyBhcmUgcGFyc2VkIG9ubHkgb25jZSBwZXIgb25jb21wbGV0ZSBldmVudCByYXRoZXIgdGhhbiBtdWx0aXBsZSB0aW1lcwoqIEJ1ZzogQmV0dGVyIGNsZWFudXAgb2Ygb25lLXRpbWUgZXZlbnRzIGFjcm9zcyB0aGUgYm9hcmQgKHdoZW4gYW4gZXZlbnQgaXMgbWVhbnQgdG8gZmlyZSBvbmNlLCBpdCB3aWxsIG5vdyByZW1vdmUKICBpdHNlbGYgZnJvbSB0aGUgRXZlbnREaXNwYXRjaGVyKQoqIEJ1ZzogYEd1enpsZVxMb2dcTWVzc2FnZUZvcm1hdHRlcmAgbm93IHByb3Blcmx5IHdyaXRlcyAidG90YWxfdGltZSIgYW5kICJjb25uZWN0X3RpbWUiIHZhbHVlcwoqIEJ1ZzogQ2xvbmluZyBhbiBFbnRpdHlFbmNsb3NpbmdSZXF1ZXN0IG5vdyBjbG9uZXMgdGhlIEVudGl0eUJvZHkgdG9vCiogQnVnOiBGaXhlZCBhbiB1bmRlZmluZWQgaW5kZXggZXJyb3Igd2hlbiBwYXJzaW5nIG5lc3RlZCBKU09OIHJlc3BvbnNlcyB3aXRoIGEgc2VudEFzIHBhcmFtZXRlciB0aGF0IHJlZmVyZW5jZSBhCiAgbm9uLWV4aXN0ZW50IGtleQoqIEJ1ZzogQWxsIF9fY2FsbCgpIG1ldGhvZCBhcmd1bWVudHMgYXJlIG5vdyByZXF1aXJlZCAoaGVscHMgd2l0aCBtb2NraW5nIGZyYW1ld29ya3MpCiogRGVwcmVjYXRpbmcgUmVzcG9uc2U6OmdldFJlcXVlc3QoKSBhbmQgbm93IHVzaW5nIGEgc2hhbGxvdyBjbG9uZSBvZiBhIHJlcXVlc3Qgb2JqZWN0IHRvIHJlbW92ZSBhIGNpcmN1bGFyIHJlZmVyZW5jZQogIHRvIGhlbHAgd2l0aCByZWZjb3VudCBiYXNlZCBnYXJiYWdlIGNvbGxlY3Rpb24gb2YgcmVzb3VyY2VzIGNyZWF0ZWQgYnkgc2VuZGluZyBhIHJlcXVlc3QKKiBEZXByZWNhdGluZyBaRjEgY2FjaGUgYW5kIGxvZyBhZGFwdGVycy4gVGhlc2Ugd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24uCiogRGVwcmVjYXRpbmcgYFJlc3BvbnNlOjpnZXRQcmV2aW91c1Jlc3BvbnNlKClgIChtZXRob2Qgc2lnbmF0dXJlIHN0aWxsIGV4aXN0cywgYnV0IGl0J3MgZGVwcmVjYXRlZCkuIFVzZSB0aGUKICBIaXN0b3J5UGx1Z2luIGZvciBhIGhpc3RvcnkuCiogQWRkZWQgYSBgcmVzcG9uc2VCb2R5YCBhbGlhcyBmb3IgdGhlIGByZXNwb25zZV9ib2R5YCBsb2NhdGlvbgoqIFJlZmFjdG9yZWQgaW50ZXJuYWxzIHRvIG5vIGxvbmdlciByZWx5IG9uIFJlc3BvbnNlOjpnZXRSZXF1ZXN0KCkKKiBIaXN0b3J5UGx1Z2luIGNhbiBub3cgYmUgY2FzdCB0byBhIHN0cmluZwoqIEhpc3RvcnlQbHVnaW4gbm93IGxvZ3MgdHJhbnNhY3Rpb25zIHJhdGhlciB0aGFuIHJlcXVlc3RzIGFuZCByZXNwb25zZXMgdG8gbW9yZSBhY2N1cmF0ZWx5IGtlZXAgdHJhY2sgb2YgdGhlIHJlcXVlc3RzCiAgYW5kIHJlc3BvbnNlcyB0aGF0IGFyZSBzZW50IG92ZXIgdGhlIHdpcmUKKiBBZGRlZCBgZ2V0RWZmZWN0aXZlVXJsKClgIGFuZCBgZ2V0UmVkaXJlY3RDb3VudCgpYCB0byBSZXNwb25zZSBvYmplY3RzCgojIyAzLjQuMyAtIDIwMTMtMDQtMzAKCiogQnVnIGZpeDogRml4aW5nIGJ1ZyBpbnRyb2R1Y2VkIGluIDMuNC4yIHdoZXJlIHJlZGlyZWN0IHJlc3BvbnNlcyBhcmUgZHVwbGljYXRlZCBvbiB0aGUgZmluYWwgcmVkaXJlY3RlZCByZXNwb25zZQoqIEFkZGVkIGEgY2hlY2sgdG8gcmUtZXh0cmFjdCB0aGUgdGVtcCBjYWNlcnQgYnVuZGxlIGZyb20gdGhlIHBoYXIgYmVmb3JlIHNlbmRpbmcgZWFjaCByZXF1ZXN0CgojIyAzLjQuMiAtIDIwMTMtMDQtMjkKCiogQnVnIGZpeDogU3RyZWFtIG9iamVjdHMgbm93IHdvcmsgY29ycmVjdGx5IHdpdGggImEiIGFuZCAiYSsiIG1vZGVzCiogQnVnIGZpeDogUmVtb3ZpbmcgYFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkYCBoZWFkZXIgd2hlbiBhIENvbnRlbnQtTGVuZ3RoIGlzIHByZXNlbnQKKiBCdWcgZml4OiBBc3luY1BsdWdpbiBubyBsb25nZXIgZm9yY2VzIEhFQUQgcmVxdWVzdHMKKiBCdWcgZml4OiBEYXRlVGltZSB0aW1lem9uZXMgYXJlIG5vdyBwcm9wZXJseSBoYW5kbGVkIHdoZW4gdXNpbmcgdGhlIHNlcnZpY2UgZGVzY3JpcHRpb24gc2NoZW1hIGZvcm1hdHRlcgoqIEJ1ZyBmaXg6IENhY2hlUGx1Z2luIG5vdyBwcm9wZXJseSBoYW5kbGVzIHN0YWxlLWlmLWVycm9yIGRpcmVjdGl2ZXMgd2hlbiBhIHJlcXVlc3QgdG8gdGhlIG9yaWdpbiBzZXJ2ZXIgZmFpbHMKKiBTZXR0aW5nIGEgcmVzcG9uc2Ugb24gYSByZXF1ZXN0IHdpbGwgd3JpdGUgdG8gdGhlIGN1c3RvbSByZXF1ZXN0IGJvZHkgZnJvbSB0aGUgcmVzcG9uc2UgYm9keSBpZiBvbmUgaXMgc3BlY2lmaWVkCiogTG9nUGx1Z2luIG5vdyB3cml0ZXMgdG8gcGhwOi8vb3V0cHV0IHdoZW4gU1RERVJSIGlzIHVuZGVmaW5lZAoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHNldCBtdWx0aXBsZSBQT1NUIGZpbGVzIGZvciB0aGUgc2FtZSBrZXkgaW4gYSBzaW5nbGUgY2FsbAoqIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBQT1NUcyBub3cgdXNlIHRoZSB1dGYtOCBjaGFyc2V0IGJ5IGRlZmF1bHQKKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBxdWV1ZSBDdXJsRXhjZXB0aW9ucyB0byB0aGUgTW9ja1BsdWdpbgoqIENsZWFuZWQgdXAgaG93IG1hbnVhbCByZXNwb25zZXMgYXJlIHF1ZXVlZCBvbiByZXF1ZXN0cyAocmVtb3ZlZCAicXVldWVkX3Jlc3BvbnNlIiBhbmQgbm93IHVzaW5nIHJlcXVlc3QuYmVmb3JlX3NlbmQpCiogQ29uZmlndXJhdGlvbiBsb2FkaW5nIG5vdyBhbGxvd3MgcmVtb3RlIGZpbGVzCgojIyAzLjQuMSAtIDIwMTMtMDQtMTYKCiogTGFyZ2UgcmVmYWN0b3JpbmcgdG8gaG93IEN1cmxNdWx0aSBoYW5kbGVzIHdvcmsuIFRoZXJlIGlzIG5vdyBhIHByb3h5IHRoYXQgc2l0cyBpbiBmcm9udCBvZiBhIHBvb2wgb2YgQ3VybE11bHRpCiAgaGFuZGxlcy4gVGhpcyBncmVhdGx5IHNpbXBsaWZpZXMgdGhlIGltcGxlbWVudGF0aW9uLCBmaXhlcyBhIGNvdXBsZSBidWdzLCBhbmQgcHJvdmlkZXMgYSBzbWFsbCBwZXJmb3JtYW5jZSBib29zdC4KKiBFeGNlcHRpb25zIGFyZSBub3cgcHJvcGVybHkgZ3JvdXBlZCB3aGVuIHNlbmRpbmcgcmVxdWVzdHMgaW4gcGFyYWxsZWwKKiBSZWRpcmVjdHMgYXJlIG5vdyBwcm9wZXJseSBhZ2dyZWdhdGVkIHdoZW4gYSBtdWx0aSB0cmFuc2FjdGlvbiBmYWlscwoqIFJlZGlyZWN0cyBub3cgc2V0IHRoZSByZXNwb25zZSBvbiB0aGUgb3JpZ2luYWwgb2JqZWN0IGV2ZW4gaW4gdGhlIGV2ZW50IG9mIGEgZmFpbHVyZQoqIEJ1ZyBmaXg6IE1vZGVsIG5hbWVzIGFyZSBub3cgcHJvcGVybHkgc2V0IGV2ZW4gd2hlbiB1c2luZyAkcmVmcwoqIEFkZGVkIHN1cHBvcnQgZm9yIFBIUCA1LjUncyBDdXJsRmlsZSB0byBwcmV2ZW50IHdhcm5pbmdzIHdpdGggdGhlIGRlcHJlY2F0ZWQgQCBzeW50YXgKKiBBZGRlZCBzdXBwb3J0IGZvciBvYXV0aF9jYWxsYmFjayBpbiBPQXV0aCBzaWduYXR1cmVzCiogQWRkZWQgc3VwcG9ydCBmb3Igb2F1dGhfdmVyaWZpZXIgaW4gT0F1dGggc2lnbmF0dXJlcwoqIEFkZGVkIHN1cHBvcnQgdG8gYXR0ZW1wdCB0byByZXRyaWV2ZSBhIGNvbW1hbmQgZmlyc3QgbGl0ZXJhbGx5LCB0aGVuIHVjZmlyc3QsIHRoZSB3aXRoIGluZmxlY3Rpb24KCiMjIDMuNC4wIC0gMjAxMy0wNC0xMQoKKiBCdWcgZml4OiBVUkxzIGFyZSBub3cgcmVzb2x2ZWQgY29ycmVjdGx5IGJhc2VkIG9uIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTUuMi4gIzI4OQoqIEJ1ZyBmaXg6IEFic29sdXRlIFVSTHMgd2l0aCBhIHBhdGggaW4gYSBzZXJ2aWNlIGRlc2NyaXB0aW9uIHdpbGwgbm93IHByb3Blcmx5IG92ZXJyaWRlIHRoZSBiYXNlIFVSTC4gIzI4OQoqIEJ1ZyBmaXg6IFBhcnNpbmcgYSBxdWVyeSBzdHJpbmcgd2l0aCBhIHNpbmdsZSBQSFAgYXJyYXkgdmFsdWUgd2lsbCBub3cgcmVzdWx0IGluIGFuIGFycmF5LiAjMjYzCiogQnVnIGZpeDogQmV0dGVyIG5vcm1hbGl6YXRpb24gb2YgdGhlIFVzZXItQWdlbnQgaGVhZGVyIHRvIHByZXZlbnQgZHVwbGljYXRlIGhlYWRlcnMuICMyNjQuCiogQnVnIGZpeDogQWRkZWQgYG51bWJlcmAgdHlwZSB0byBzZXJ2aWNlIGRlc2NyaXB0aW9ucy4KKiBCdWcgZml4OiBlbXB0eSBwYXJhbWV0ZXJzIGFyZSByZW1vdmVkIGZyb20gYW4gT0F1dGggc2lnbmF0dXJlCiogQnVnIGZpeDogUmV2YWxpZGF0aW5nIGEgY2FjaGUgZW50cnkgcHJlZmVycyB0aGUgTGFzdC1Nb2RpZmllZCBvdmVyIHRoZSBEYXRlIGhlYWRlcgoqIEJ1ZyBmaXg6IEZpeGVkICJhcnJheSB0byBzdHJpbmciIGVycm9yIHdoZW4gdmFsaWRhdGluZyBhIHVuaW9uIG9mIHR5cGVzIGluIGEgc2VydmljZSBkZXNjcmlwdGlvbgoqIEJ1ZyBmaXg6IFJlbW92ZWQgY29kZSB0aGF0IGF0dGVtcHRlZCB0byBkZXRlcm1pbmUgdGhlIHNpemUgb2YgYSBzdHJlYW0gd2hlbiBkYXRhIGlzIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbQoqIEJ1ZyBmaXg6IE5vdCBpbmNsdWRpbmcgYW4gYG9hdXRoX3Rva2VuYCBpZiB0aGUgdmFsdWUgaXMgbnVsbCBpbiB0aGUgT2F1dGhQbHVnaW4uCiogQnVnIGZpeDogTm93IGNvcnJlY3RseSBhZ2dyZWdhdGluZyBzdWNjZXNzZnVsIHJlcXVlc3RzIGFuZCBmYWlsZWQgcmVxdWVzdHMgaW4gQ3VybE11bHRpIHdoZW4gYSByZWRpcmVjdCBvY2N1cnMuCiogVGhlIG5ldyBkZWZhdWx0IENVUkxPUFRfVElNRU9VVCBzZXR0aW5nIGhhcyBiZWVuIGluY3JlYXNlZCB0byAxNTAgc2Vjb25kcyBzbyB0aGF0IEd1enpsZSB3b3JrcyBvbiBwb29yIGNvbm5lY3Rpb25zLgoqIEFkZGVkIGEgZmVhdHVyZSB0byBFbnRpdHlFbmNsb3NpbmdSZXF1ZXN0OjpzZXRCb2R5KCkgdGhhdCB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBDb250ZW50LVR5cGUgb2YgdGhlIHJlcXVlc3QgaWYKICB0aGUgQ29udGVudC1UeXBlIGNhbiBiZSBkZXRlcm1pbmVkIGJhc2VkIG9uIHRoZSBlbnRpdHkgYm9keSBvciB0aGUgcGF0aCBvZiB0aGUgcmVxdWVzdC4KKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBvdmVyd3JpdGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBpbiBhIGNsaWVudCB3aGVuIGdyYWJiaW5nIGEgdGhyb3dhd2F5IGNsaWVudCBmcm9tIGEgYnVpbGRlci4KKiBBZGRlZCBzdXBwb3J0IGZvciBhIFBTUi0zIExvZ0FkYXB0ZXIuCiogQWRkZWQgYSBgY29tbWFuZC5hZnRlcl9wcmVwYXJlYCBldmVudAoqIEFkZGVkIGBvYXV0aF9jYWxsYmFja2AgcGFyYW1ldGVyIHRvIHRoZSBPYXV0aFBsdWdpbgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBhIGN1c3RvbSBzdHJlYW0gY2xhc3Mgd2hlbiB1c2luZyBhIHN0cmVhbSBmYWN0b3J5CiogQWRkZWQgYSBDYWNoaW5nRW50aXR5Qm9keSBkZWNvcmF0b3IKKiBBZGRlZCBzdXBwb3J0IGZvciBgYWRkaXRpb25hbFBhcmFtZXRlcnNgIGluIHNlcnZpY2UgZGVzY3JpcHRpb25zIHRvIGRlZmluZSBob3cgY3VzdG9tIHBhcmFtZXRlcnMgYXJlIHNlcmlhbGl6ZWQuCiogVGhlIGJ1bmRsZWQgU1NMIGNlcnRpZmljYXRlIGlzIG5vdyBwcm92aWRlZCBpbiB0aGUgcGhhciBmaWxlIGFuZCBleHRyYWN0ZWQgd2hlbiBydW5uaW5nIEd1enpsZSBmcm9tIGEgcGhhci4KKiBZb3UgY2FuIG5vdyBzZW5kIGFueSBFbnRpdHlFbmNsb3NpbmdSZXF1ZXN0IHdpdGggUE9TVCBmaWVsZHMgb3IgUE9TVCBmaWxlcyBhbmQgY1VSTCB3aWxsIGhhbmRsZSBjcmVhdGluZyBib2RpZXMKKiBQT1NUIHJlcXVlc3RzIHVzaW5nIGEgY3VzdG9tIGVudGl0eSBib2R5IGFyZSBub3cgdHJlYXRlZCBleGFjdGx5IGxpa2UgUFVUIHJlcXVlc3RzIGJ1dCB3aXRoIGEgY3VzdG9tIGNVUkwgbWV0aG9kLiBUaGlzCiAgbWVhbnMgdGhhdCB0aGUgcmVkaXJlY3QgYmVoYXZpb3Igb2YgUE9TVCByZXF1ZXN0cyB3aXRoIGN1c3RvbSBib2RpZXMgd2lsbCBub3QgYmUgdGhlIHNhbWUgYXMgUE9TVCByZXF1ZXN0cyB0aGF0IHVzZQogIFBPU1QgZmllbGRzIG9yIGZpbGVzICh0aGUgbGF0dGVyIGlzIG9ubHkgdXNlZCB3aGVuIGVtdWxhdGluZyBhIGZvcm0gUE9TVCBpbiB0aGUgYnJvd3NlcikuCiogTG90cyBvZiBjbGVhbnVwIHRvIEN1cmxIYW5kbGU6OmZhY3RvcnkgYW5kIFJlcXVlc3RGYWN0b3J5OjpjcmVhdGVSZXF1ZXN0CgojIyAzLjMuMSAtIDIwMTMtMDMtMTAKCiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gY3JlYXRlIFBIUCBzdHJlYW1pbmcgcmVzcG9uc2VzIGZyb20gSFRUUCByZXF1ZXN0cwoqIEJ1ZyBmaXg6IFJ1bm5pbmcgYW55IGZpbHRlcnMgd2hlbiBwYXJzaW5nIHJlc3BvbnNlIGhlYWRlcnMgd2l0aCBzZXJ2aWNlIGRlc2NyaXB0aW9ucwoqIEJ1ZyBmaXg6IE9hdXRoUGx1Z2luIGZpeGVzIHRvIGFsbG93IGZvciBtdWx0aS1kaW1lbnNpb25hbCBhcnJheSBzaWduaW5nLCBhbmQgc29ydGluZyBwYXJhbWV0ZXJzIGJlZm9yZSBzaWduaW5nCiogQnVnIGZpeDogUmVtb3ZlZCB0aGUgYWRkaW5nIG9mIGRlZmF1bHQgZW1wdHkgYXJyYXlzIGFuZCBmYWxzZSBCb29sZWFucyB0byByZXNwb25zZXMgaW4gb3JkZXIgdG8gYmUgY29uc2lzdGVudCBhY3Jvc3MKICByZXNwb25zZSBsb2NhdGlvbiB2aXNpdG9ycy4KKiBCdWcgZml4OiBSZW1vdmVkIHRoZSBwb3NzaWJpbGl0eSBvZiBjcmVhdGluZyBjb25maWd1cmF0aW9uIGZpbGVzIHdpdGggY2lyY3VsYXIgZGVwZW5kZW5jaWVzCiogUmVxdWVzdEZhY3Rvcnk6OmNyZWF0ZSgpIG5vdyB1c2VzIHRoZSBrZXkgb2YgYSBQT1NUIGZpbGUgd2hlbiBzZXR0aW5nIHRoZSBQT1NUIGZpbGUgbmFtZQoqIEFkZGVkIHhtbEFsbG93RW1wdHkgdG8gc2VyaWFsaXplIGFuIFhNTCBib2R5IGV2ZW4gaWYgbm8gWE1MIHNwZWNpZmljIHBhcmFtZXRlcnMgYXJlIHNldAoKIyMgMy4zLjAgLSAyMDEzLTAzLTAzCgoqIEEgbGFyZ2UgbnVtYmVyIG9mIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgaGF2ZSBiZWVuIG1hZGUKKiBCdWcgZml4OiBBZGRlZCAnd2InIGFzIGEgdmFsaWQgd3JpdGUgbW9kZSBmb3Igc3RyZWFtcwoqIEJ1ZyBmaXg6IGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlc3BvbnNlOjpqc29uKClgIG5vdyBhbGxvd3Mgc2NhbGFyIHZhbHVlcyB0byBiZSByZXR1cm5lZAoqIEJ1ZyBmaXg6IEZpeGVkIGJ1ZyBpbiBgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXNwb25zZWAgd2hlcmUgd3JhcHBpbmcgcXVvdGVzIHdlcmUgc3RyaXBwZWQgZnJvbSBgZ2V0RXRhZygpYAoqIEJDOiBSZW1vdmVkIGBHdXp6bGVcSHR0cFxVdGlsc2AgY2xhc3MKKiBCQzogU2V0dGluZyBhIHNlcnZpY2UgZGVzY3JpcHRpb24gb24gYSBjbGllbnQgd2lsbCBubyBsb25nZXIgbW9kaWZ5IHRoZSBjbGllbnQncyBjb21tYW5kIGZhY3Rvcmllcy4KKiBCQzogRW1pdHRpbmcgSU8gZXZlbnRzIGZyb20gYSBSZXF1ZXN0TWVkaWF0b3IgaXMgbm93IGEgcGFyYW1ldGVyIHRoYXQgbXVzdCBiZSBzZXQgaW4gYSByZXF1ZXN0J3MgY3VybCBvcHRpb25zIHVzaW5nCiAgdGhlICdlbWl0X2lvJyBrZXkuIFRoaXMgd2FzIHByZXZpb3VzbHkgc2V0IHVuZGVyIGEgcmVxdWVzdCdzIHBhcmFtZXRlcnMgdXNpbmcgJ2N1cmwuZW1pdF9pbycKKiBCQzogYEd1enpsZVxTdHJlYW1cU3RyZWFtOjpnZXRXcmFwcGVyKClgIGFuZCBgR3V6emxlXFN0cmVhbVxTdHJlYW06OmdldFN0ZWFtVHlwZSgpYCBhcmUgbm8gbG9uZ2VyIGNvbnZlcnRlZCB0bwogIGxvd2VyY2FzZQoqIE9wZXJhdGlvbiBwYXJhbWV0ZXIgb2JqZWN0cyBhcmUgbm93IGxhenkgbG9hZGVkIGludGVybmFsbHkKKiBBZGRlZCBFcnJvclJlc3BvbnNlUGx1Z2luIHRoYXQgY2FuIHRocm93IGVycm9ycyBmb3IgcmVzcG9uc2VzIGRlZmluZWQgaW4gc2VydmljZSBkZXNjcmlwdGlvbiBvcGVyYXRpb25zJyBlcnJvclJlc3BvbnNlcwoqIEFkZGVkIHN1cHBvcnQgZm9yIGluc3RhbnRpYXRpbmcgcmVzcG9uc2VUeXBlPWNsYXNzIHJlc3BvbnNlQ2xhc3MgY2xhc3Nlcy4gQ2xhc3NlcyBtdXN0IGltcGxlbWVudAogIGBHdXp6bGVcU2VydmljZVxDb21tYW5kXFJlc3BvbnNlQ2xhc3NJbnRlcmZhY2VgCiogQWRkZWQgc3VwcG9ydCBmb3IgYWRkaXRpb25hbFByb3BlcnRpZXMgZm9yIHRvcC1sZXZlbCBwYXJhbWV0ZXJzIGluIHJlc3BvbnNlVHlwZT1tb2RlbCByZXNwb25zZUNsYXNzZXMuIFRoZXNlCiAgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGFsc28gc3VwcG9ydCBsb2NhdGlvbnMgYW5kIGNhbiBiZSB1c2VkIHRvIHBhcnNlIEpTT04gcmVzcG9uc2VzIHdoZXJlIHRoZSBvdXRlcm1vc3QgcGFydCBvZiB0aGUKICBKU09OIGlzIGFuIGFycmF5CiogQWRkZWQgc3VwcG9ydCBmb3IgbmVzdGVkIHJlbmFtaW5nIG9mIEpTT04gbW9kZWxzIChyZW5hbWUgc2VudEFzIHRvIG5hbWUpCiogQ2FjaGVQbHVnaW4KICAgICogQWRkZWQgc3VwcG9ydCBmb3Igc3RhbGUtaWYtZXJyb3Igc28gdGhhdCB0aGUgQ2FjaGVQbHVnaW4gY2FuIG5vdyBzZXJ2ZSBzdGFsZSBjb250ZW50IGZyb20gdGhlIGNhY2hlIG9uIGVycm9yCiAgICAqIERlYnVnIGhlYWRlcnMgY2FuIG5vdyBhZGRlZCB0byBjYWNoZWQgcmVzcG9uc2UgaW4gdGhlIENhY2hlUGx1Z2luCgojIyAzLjIuMCAtIDIwMTMtMDItMTQKCiogQ3VybE11bHRpIGlzIG5vIGxvbmdlciByZXVzZWQgZ2xvYmFsbHkuIEEgbmV3IG11bHRpIG9iamVjdCBpcyBjcmVhdGVkIHBlci1jbGllbnQuIFRoaXMgaGVscHMgdG8gaXNvbGF0ZSBjbGllbnRzLgoqIFVSTHMgd2l0aCBubyBwYXRoIG5vIGxvbmdlciBjb250YWluIGEgIi8iIGJ5IGRlZmF1bHQKKiBHdXp6bGVcSHR0cFxRdWVyeVN0cmluZyBkb2VzIG5vIGxvbmdlciBtYW5hZ2VzIHRoZSBsZWFkaW5nICI/Ii4gVGhpcyBpcyBub3cgaGFuZGxlZCBpbiBHdXp6bGVcSHR0cFxVcmwuCiogQmFkUmVzcG9uc2VFeGNlcHRpb24gbm8gbG9uZ2VyIGluY2x1ZGVzIHRoZSBmdWxsIHJlcXVlc3QgYW5kIHJlc3BvbnNlIG1lc3NhZ2UKKiBBZGRpbmcgc2V0RGF0YSgpIHRvIEd1enpsZVxTZXJ2aWNlXERlc2NyaXB0aW9uXFNlcnZpY2VEZXNjcmlwdGlvbkludGVyZmFjZQoqIEFkZGluZyBnZXRSZXNwb25zZUJvZHkoKSB0byBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2UKKiBWYXJpb3VzIHVwZGF0ZXMgdG8gY2xhc3NlcyB0byB1c2UgU2VydmljZURlc2NyaXB0aW9uSW50ZXJmYWNlIHR5cGUgaGludHMgcmF0aGVyIHRoYW4gU2VydmljZURlc2NyaXB0aW9uCiogSGVhZGVyIHZhbHVlcyBjYW4gbm93IGJlIG5vcm1hbGl6ZWQgaW50byBkaXN0aW5jdCB2YWx1ZXMgd2hlbiBtdWx0aXBsZSBoZWFkZXJzIGFyZSBjb21iaW5lZCB3aXRoIGEgY29tbWEgc2VwYXJhdGVkIGxpc3QKKiB4bWxFbmNvZGluZyBjYW4gbm93IGJlIGN1c3RvbWl6ZWQgZm9yIHRoZSBYTUwgZGVjbGFyYXRpb24gb2YgYSBYTUwgc2VydmljZSBkZXNjcmlwdGlvbiBvcGVyYXRpb24KKiBHdXp6bGVcSHR0cFxRdWVyeVN0cmluZyBub3cgdXNlcyBHdXp6bGVcSHR0cFxRdWVyeUFnZ3JlZ2F0b3JcUXVlcnlBZ2dyZWdhdG9ySW50ZXJmYWNlIG9iamVjdHMgdG8gYWRkIGN1c3RvbSB2YWx1ZQogIGFnZ3JlZ2F0aW9uIGFuZCBubyBsb25nZXIgdXNlcyBjYWxsYmFja3MKKiBUaGUgVVJMIGVuY29kaW5nIGltcGxlbWVudGF0aW9uIG9mIEd1enpsZVxIdHRwXFF1ZXJ5U3RyaW5nIGNhbiBub3cgYmUgY3VzdG9taXplZAoqIEJ1ZyBmaXg6IEZpbHRlcnMgd2VyZSBub3QgYWx3YXlzIGludm9rZWQgZm9yIGFycmF5IHNlcnZpY2UgZGVzY3JpcHRpb24gcGFyYW1ldGVycwoqIEJ1ZyBmaXg6IFJlZGlyZWN0cyBub3cgdXNlIGEgdGFyZ2V0IHJlc3BvbnNlIGJvZHkgcmF0aGVyIHRoYW4gYSB0ZW1wb3JhcnkgcmVzcG9uc2UgYm9keQoqIEJ1ZyBmaXg6IFRoZSBkZWZhdWx0IGV4cG9uZW50aWFsIGJhY2tvZmYgQmFja29mZlBsdWdpbiB3YXMgbm90IGdpdmluZyB3aGVuIHRoZSByZXF1ZXN0IHRocmVzaG9sZCB3YXMgZXhjZWVkZWQKKiBCdWcgZml4OiBHdXp6bGUgbm93IHRha2VzIHRoZSBmaXJzdCBmb3VuZCB2YWx1ZSB3aGVuIGdyYWJiaW5nIENhY2hlLUNvbnRyb2wgZGlyZWN0aXZlcwoKIyMgMy4xLjIgLSAyMDEzLTAxLTI3CgoqIFJlZmFjdG9yZWQgaG93IG9wZXJhdGlvbiByZXNwb25zZXMgYXJlIHBhcnNlZC4gVmlzaXRvcnMgbm93IGluY2x1ZGUgYSBiZWZvcmUoKSBtZXRob2QgcmVzcG9uc2libGUgZm9yIHBhcnNpbmcgdGhlCiAgcmVzcG9uc2UgYm9keS4gRm9yIGV4YW1wbGUsIHRoZSBYbWxWaXNpdG9yIG5vdyBwYXJzZXMgdGhlIFhNTCByZXNwb25zZSBpbnRvIGFuIGFycmF5IGluIHRoZSBiZWZvcmUoKSBtZXRob2QuCiogRml4ZWQgYW4gaXNzdWUgd2hlcmUgY1VSTCB3b3VsZCBub3QgYXV0b21hdGljYWxseSBkZWNvbXByZXNzIHJlc3BvbnNlcyB3aGVuIHRoZSBBY2NlcHQtRW5jb2RpbmcgaGVhZGVyIHdhcyBzZW50CiogQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCBpcyBuZXZlciBzZXQgdG8gMSBiZWNhdXNlIGl0IGlzIGRlcHJlY2F0ZWQgKHNlZSA1ZTBmZjJlZjIwZjgzOWUxOWQxZWViMjk4ZjkwYmEzNTk4Nzg0NDQ0KQoqIEZpeGVkIGEgYnVnIHdoZXJlIHJlZGlyZWN0IHJlc3BvbnNlcyB3ZXJlIG5vdCBjaGFpbmVkIGNvcnJlY3RseSB1c2luZyBnZXRQcmV2aW91c1Jlc3BvbnNlKCkKKiBTZXR0aW5nIGRlZmF1bHQgaGVhZGVycyBvbiBhIGNsaWVudCBhZnRlciBzZXR0aW5nIHRoZSB1c2VyLWFnZW50IHdpbGwgbm90IGVyYXNlIHRoZSB1c2VyLWFnZW50IHNldHRpbmcKCiMjIDMuMS4xIC0gMjAxMy0wMS0yMAoKKiBBZGRpbmcgd2lsZGNhcmQgc3VwcG9ydCB0byBHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb246OmdldFBhdGgoKQoqIEFkZGluZyBhbGlhcyBzdXBwb3J0IHRvIFNlcnZpY2VCdWlsZGVyIGNvbmZpZ3MKKiBBZGRpbmcgR3V6emxlXFNlcnZpY2VcUmVzb3VyY2VcQ29tcG9zaXRlUmVzb3VyY2VJdGVyYXRvckZhY3RvcnkgYW5kIGNsZWFuaW5nIHVwIGZhY3RvcnkgaW50ZXJmYWNlCgojIyAzLjEuMCAtIDIwMTMtMDEtMTIKCiogQkM6IEN1cmxFeGNlcHRpb24gbm93IGV4dGVuZHMgZnJvbSBSZXF1ZXN0RXhjZXB0aW9uIHJhdGhlciB0aGFuIEJhZFJlc3BvbnNlRXhjZXB0aW9uCiogQkM6IFJlbmFtZWQgR3V6emxlXFBsdWdpblxDYWNoZVxDYW5DYWNoZVN0cmF0ZWd5SW50ZXJmYWNlOjpjYW5DYWNoZSgpIHRvIGNhbkNhY2hlUmVxdWVzdCgpIGFuZCBhZGRlZCBDYW5DYWNoZVJlc3BvbnNlKCkKKiBBZGRlZCBnZXREYXRhIHRvIFNlcnZpY2VEZXNjcmlwdGlvbkludGVyZmFjZQoqIEFkZGVkIGNvbnRleHQgYXJyYXkgdG8gUmVxdWVzdEludGVyZmFjZTo6c2V0U3RhdGUoKQoqIEJ1ZzogUmVtb3ZpbmcgaGFyZCBkZXBlbmRlbmN5IG9uIHRoZSBCYWNrb2ZmUGx1Z2luIGZyb20gR3V6emxlXEh0dHAKKiBCdWc6IEFkZGluZyByZXF1aXJlZCBjb250ZW50LXR5cGUgd2hlbiBKU09OIHJlcXVlc3QgdmlzaXRvciBhZGRzIEpTT04gdG8gYSBjb21tYW5kCiogQnVnOiBGaXhpbmcgdGhlIHNlcmlhbGl6YXRpb24gb2YgYSBzZXJ2aWNlIGRlc2NyaXB0aW9uIHdpdGggY3VzdG9tIGRhdGEKKiBNYWRlIGl0IGVhc2llciB0byBkZWFsIHdpdGggZXhjZXB0aW9ucyB0aHJvd24gd2hlbiB0cmFuc2ZlcnJpbmcgY29tbWFuZHMgb3IgcmVxdWVzdHMgaW4gcGFyYWxsZWwgYnkgcHJvdmlkaW5nCiAgYW4gYXJyYXkgb2Ygc3VjY2Vzc2Z1bCBhbmQgZmFpbGVkIHJlc3BvbnNlcwoqIE1vdmVkIGdldFBhdGggZnJvbSBHdXp6bGVcU2VydmljZVxSZXNvdXJjZVxNb2RlbCB0byBHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb24KKiBBZGRlZCBHdXp6bGVcSHR0cFxJb0VtaXR0aW5nRW50aXR5Qm9keQoqIE1vdmVkIGNvbW1hbmQgZmlsdHJhdGlvbiBmcm9tIHZhbGlkYXRvcnMgdG8gbG9jYXRpb24gdmlzaXRvcnMKKiBBZGRlZCBgZXh0ZW5kc2AgYXR0cmlidXRlcyB0byBzZXJ2aWNlIGRlc2NyaXB0aW9uIHBhcmFtZXRlcnMKKiBBZGRlZCBnZXRNb2RlbHMgdG8gU2VydmljZURlc2NyaXB0aW9uSW50ZXJmYWNlCgojIyAzLjAuNyAtIDIwMTItMTItMTkKCiogRml4aW5nIHBoYXIgZGV0ZWN0aW9uIHdoZW4gZm9yY2luZyBhIGNhY2VydCB0byBzeXN0ZW0gaWYgbnVsbCBvciB0cnVlCiogQWxsb3dpbmcgZmlsZW5hbWUgdG8gYmUgcGFzc2VkIHRvIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3Q6OnNldFJlc3BvbnNlQm9keSgpYAoqIENsZWFuaW5nIHVwIGBHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb246OmluamVjdGAgbWV0aG9kCiogQWRkaW5nIGEgcmVzcG9uc2VfYm9keSBsb2NhdGlvbiB0byBzZXJ2aWNlIGRlc2NyaXB0aW9ucwoKIyMgMy4wLjYgLSAyMDEyLTEyLTA5CgoqIEN1cmxNdWx0aSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMKKiBBZGRpbmcgc2V0RXJyb3JSZXNwb25zZXMoKSB0byBPcGVyYXRpb24KKiBjb21wb3Nlci5qc29uIHR3ZWFrcwoKIyMgMy4wLjUgLSAyMDEyLTExLTE4CgoqIEJ1ZzogRml4aW5nIGFuIGluZmluaXRlIHJlY3Vyc2lvbiBidWcgY2F1c2VkIGZyb20gcmV2YWxpZGF0aW5nIHdpdGggdGhlIENhY2hlUGx1Z2luCiogQnVnOiBSZXNwb25zZSBib2R5IGNhbiBub3cgYmUgYSBzdHJpbmcgY29udGFpbmluZyAiMCIKKiBCdWc6IFVzaW5nIEd1enpsZSBpbnNpZGUgb2YgYSBwaGFyIHVzZXMgc3lzdGVtIGJ5IGRlZmF1bHQgYnV0IG5vdyBhbGxvd3MgZm9yIGEgY3VzdG9tIGNhY2VydAoqIEJ1ZzogUXVlcnlTdHJpbmc6OmZyb21TdHJpbmcgbm93IHByb3Blcmx5IHBhcnNlcyBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyB0aGF0IGNvbnRhaW4gZXF1YWwgc2lnbnMKKiBBZGRlZCBzdXBwb3J0IGZvciBYTUwgYXR0cmlidXRlcyBpbiBzZXJ2aWNlIGRlc2NyaXB0aW9uIHJlc3BvbnNlcwoqIERlZmF1bHRSZXF1ZXN0U2VyaWFsaXplciBub3cgc3VwcG9ydHMgYXJyYXkgVVJJIHBhcmFtZXRlciB2YWx1ZXMgZm9yIFVSSSB0ZW1wbGF0ZSBleHBhbnNpb24KKiBBZGRlZCBiZXR0ZXIgbWltZXR5cGUgZ3Vlc3NpbmcgdG8gcmVxdWVzdHMgYW5kIHBvc3QgZmlsZXMKCiMjIDMuMC40IC0gMjAxMi0xMS0xMQoKKiBCdWc6IEZpeGVkIGEgYnVnIHdoZW4gYWRkaW5nIG11bHRpcGxlIGNvb2tpZXMgdG8gYSByZXF1ZXN0IHRvIHVzZSB0aGUgY29ycmVjdCBnbHVlIHZhbHVlCiogQnVnOiBDb29raWVzIGNhbiBub3cgYmUgYWRkZWQgdGhhdCBoYXZlIGEgbmFtZSwgZG9tYWluLCBvciB2YWx1ZSBzZXQgdG8gIjAiCiogQnVnOiBVc2luZyB0aGUgc3lzdGVtIGNhY2VydCBidW5kbGUgd2hlbiB1c2luZyB0aGUgUGhhcgoqIEFkZGVkIGpzb24gYW5kIHhtbCBtZXRob2RzIHRvIFJlc3BvbnNlIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHBhcnNlIEpTT04gYW5kIFhNTCByZXNwb25zZSBkYXRhIGludG8gZGF0YSBzdHJ1Y3R1cmVzCiogRW5oYW5jZWQgY29va2llIGphciBkZS1kdXBsaWNhdGlvbgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIGVuYWJsZSBzdHJpY3QgY29va2llIGphcnMgdGhhdCB0aHJvdyBleGNlcHRpb25zIHdoZW4gaW52YWxpZCBjb29raWVzIGFyZSBhZGRlZAoqIEFkZGVkIHNldFN0cmVhbSB0byBTdHJlYW1JbnRlcmZhY2UgdG8gYWN0dWFsbHkgbWFrZSBpdCBwb3NzaWJsZSB0byBpbXBsZW1lbnQgY3VzdG9tIHJld2luZCBiZWhhdmlvciBmb3IgZW50aXR5IGJvZGllcwoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBhbnkgc29ydCBvZiBoYXNoIGZvciBhIHN0cmVhbSByYXRoZXIgdGhhbiBqdXN0IGFuIE1ENSBoYXNoCgojIyAzLjAuMyAtIDIwMTItMTEtMDQKCiogSW1wbGVtZW50aW5nIHJlZGlyZWN0cyBpbiBQSFAgcmF0aGVyIHRoYW4gY1VSTAoqIEFkZGVkIFBFQ0wgVVJJIHRlbXBsYXRlIGV4dGVuc2lvbiBhbmQgdXNpbmcgYXMgZGVmYXVsdCBwYXJzZXIgaWYgYXZhaWxhYmxlCiogQnVnOiBGaXhlZCBDb250ZW50LUxlbmd0aCBwYXJzaW5nIG9mIFJlc3BvbnNlIGZhY3RvcnkKKiBBZGRpbmcgcmV3aW5kKCkgbWV0aG9kIHRvIGVudGl0eSBib2RpZXMgYW5kIHN0cmVhbXMuIEFsbG93cyBmb3IgY3VzdG9tIHJld2luZGluZyBvZiBub24tcmVwZWF0YWJsZSBzdHJlYW1zLgoqIEFkZGluZyBUb0FycmF5SW50ZXJmYWNlIHRocm91Z2hvdXQgbGlicmFyeQoqIEZpeGluZyBPYXV0aFBsdWdpbiB0byBjcmVhdGUgdW5pcXVlIG5vbmNlIHZhbHVlcyBwZXIgcmVxdWVzdAoKIyMgMy4wLjIgLSAyMDEyLTEwLTI1CgoqIE1hZ2ljIG1ldGhvZHMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCBvbiBjbGllbnRzCiogTWFnaWMgbWV0aG9kcyByZXR1cm4gdGhlIHJlc3VsdCBvZiBhIGNvbW1hbmQKKiBTZXJ2aWNlIGNsaWVudHMgbm8gbG9uZ2VyIHJlcXVpcmUgYSBiYXNlX3VybCBvcHRpb24gaW4gdGhlIGZhY3RvcnkKKiBCdWc6IEZpeGVkIGFuIGlzc3VlIHdpdGggVVJJIHRlbXBsYXRlcyB3aGVyZSBudWxsIHRlbXBsYXRlIHZhcmlhYmxlcyB3ZXJlIGJlaW5nIGV4cGFuZGVkCgojIyAzLjAuMSAtIDIwMTItMTAtMjIKCiogTW9kZWxzIGNhbiBub3cgYmUgdXNlZCBsaWtlIHJlZ3VsYXIgY29sbGVjdGlvbiBvYmplY3RzIGJ5IGNhbGxpbmcgZmlsdGVyLCBtYXAsIGV0Yy4KKiBNb2RlbHMgbm8gbG9uZ2VyIHJlcXVpcmUgYSBQYXJhbWV0ZXIgc3RydWN0dXJlIG9yIGluaXRpYWwgZGF0YSBpbiB0aGUgY29uc3RydWN0b3IKKiBBZGRlZCBhIGN1c3RvbSBBcHBlbmRJdGVyYXRvciB0byBnZXQgYXJvdW5kIGEgUEhQIGJ1ZyB3aXRoIHRoZSBgXEFwcGVuZEl0ZXJhdG9yYAoKIyMgMy4wLjAgLSAyMDEyLTEwLTE1CgoqIFJld3JvdGUgc2VydmljZSBkZXNjcmlwdGlvbiBmb3JtYXQgdG8gYmUgYmFzZWQgb24gU3dhZ2dlcgogICAgKiBOb3cgYmFzZWQgb24gSlNPTiBzY2hlbWEKICAgICogQWRkZWQgbmVzdGVkIGlucHV0IHN0cnVjdHVyZXMgYW5kIG5lc3RlZCByZXNwb25zZSBtb2RlbHMKICAgICogU3VwcG9ydCBmb3IgSlNPTiBhbmQgWE1MIGlucHV0IGFuZCBvdXRwdXQgbW9kZWxzCiAgICAqIFJlbmFtZWQgYGNvbW1hbmRzYCB0byBgb3BlcmF0aW9uc2AKICAgICogUmVtb3ZlZCBkb3QgY2xhc3Mgbm90YXRpb24KICAgICogUmVtb3ZlZCBjdXN0b20gdHlwZXMKKiBCcm9rZSB0aGUgcHJvamVjdCBpbnRvIHNtYWxsZXIgdG9wLWxldmVsIG5hbWVzcGFjZXMgdG8gYmUgbW9yZSBjb21wb25lbnQgZnJpZW5kbHkKKiBSZW1vdmVkIHN1cHBvcnQgZm9yIFhNTCBjb25maWdzIGFuZCBkZXNjcmlwdGlvbnMuIFVzZSBhcnJheXMgb3IgSlNPTiBmaWxlcy4KKiBSZW1vdmVkIHRoZSBWYWxpZGF0aW9uIGNvbXBvbmVudCBhbmQgSW5zcGVjdG9yCiogTW92ZWQgYWxsIGNvb2tpZSBjb2RlIHRvIEd1enpsZVxQbHVnaW5cQ29va2llCiogTWFnaWMgbWV0aG9kcyBvbiBhIEd1enpsZVxTZXJ2aWNlXENsaWVudCBub3cgcmV0dXJuIHRoZSBjb21tYW5kIHVuLWV4ZWN1dGVkLgoqIENhbGxpbmcgZ2V0UmVzdWx0KCkgb3IgZ2V0UmVzcG9uc2UoKSBvbiBhIGNvbW1hbmQgd2lsbCBsYXppbHkgZXhlY3V0ZSB0aGUgY29tbWFuZCBpZiBuZWVkZWQuCiogTm93IHNoaXBwaW5nIHdpdGggY1VSTCdzIENBIGNlcnRzIGFuZCB1c2luZyBpdCBieSBkZWZhdWx0CiogQWRkZWQgcHJldmlvdXNSZXNwb25zZSgpIG1ldGhvZCB0byByZXNwb25zZSBvYmplY3RzCiogTm8gbG9uZ2VyIHNlbmRpbmcgQWNjZXB0IGFuZCBBY2NlcHQtRW5jb2RpbmcgaGVhZGVycyBvbiBldmVyeSByZXF1ZXN0CiogT25seSBzZW5kaW5nIGFuIEV4cGVjdCBoZWFkZXIgYnkgZGVmYXVsdCB3aGVuIGEgcGF5bG9hZCBpcyBncmVhdGVyIHRoYW4gMU1CCiogQWRkZWQvbW92ZWQgY2xpZW50IG9wdGlvbnM6CiAgICAqIGN1cmwuYmxhY2tsaXN0IHRvIGN1cmwub3B0aW9uLmJsYWNrbGlzdAogICAgKiBBZGRlZCBzc2wuY2VydGlmaWNhdGVfYXV0aG9yaXR5CiogQWRkZWQgYSBHdXp6bGVcSXRlcmF0b3IgY29tcG9uZW50CiogTW92ZWQgcGx1Z2lucyBmcm9tIEd1enpsZVxIdHRwXFBsdWdpbiB0byBHdXp6bGVcUGx1Z2luCiogQWRkZWQgYSBtb3JlIHJvYnVzdCBiYWNrb2ZmIHJldHJ5IHN0cmF0ZWd5IChyZXBsYWNlZCB0aGUgRXhwb25lbnRpYWxCYWNrb2ZmUGx1Z2luKQoqIEFkZGVkIGEgbW9yZSByb2J1c3QgY2FjaGluZyBwbHVnaW4KKiBBZGRlZCBzZXRCb2R5IHRvIHJlc3BvbnNlIG9iamVjdHMKKiBVcGRhdGluZyBMb2dQbHVnaW4gdG8gdXNlIGEgbW9yZSBmbGV4aWJsZSBNZXNzYWdlRm9ybWF0dGVyCiogQWRkZWQgYSBjb21wbGV0ZWx5IHJldmFtcGVkIGJ1aWxkIHByb2Nlc3MKKiBDbGVhbmluZyB1cCBDb2xsZWN0aW9uIGNsYXNzIGFuZCByZW1vdmluZyBkZWZhdWx0IHZhbHVlcyBmcm9tIHRoZSBnZXQgbWV0aG9kCiogRml4ZWQgWkYyIGNhY2hlIGFkYXB0ZXJzCgojIyAyLjguOCAtIDIwMTItMTAtMTUKCiogQnVnOiBGaXhlZCBhIGNvb2tpZSBpc3N1ZSB0aGF0IGNhdXNlZCBkb3QgcHJlZml4ZWQgZG9tYWlucyB0byBub3QgbWF0Y2ggd2hlcmUgcG9wdWxhciBicm93c2VycyBkaWQKCiMjIDIuOC43IC0gMjAxMi0wOS0zMAoKKiBCdWc6IEZpeGVkIGNvbmZpZyBmaWxlIGFsaWFzZXMgZm9yIEpTT04gaW5jbHVkZXMKKiBCdWc6IEZpeGVkIGNvb2tpZSBidWcgb24gYSByZXF1ZXN0IG9iamVjdCBieSB1c2luZyBDb29raWVQYXJzZXIgdG8gcGFyc2UgY29va2llcyBvbiByZXF1ZXN0cwoqIEJ1ZzogUmVtb3ZpbmcgdGhlIHBhdGggdG8gYSBmaWxlIHdoZW4gc2VuZGluZyBhIENvbnRlbnQtRGlzcG9zaXRpb24gaGVhZGVyIG9uIGEgUE9TVCB1cGxvYWQKKiBCdWc6IEhhcmRlbmluZyByZXF1ZXN0IGFuZCByZXNwb25zZSBwYXJzaW5nIHRvIGFjY291bnQgZm9yIG1pc3NpbmcgcGFydHMKKiBCdWc6IEZpeGVkIFBFQVIgcGFja2FnaW5nCiogQnVnOiBGaXhlZCBSZXF1ZXN0OjpnZXRJbmZvCiogQnVnOiBGaXhlZCBjYXNlcyB3aGVyZSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk0gcmV0dXJuIGNvZGVzIHdlcmUgY2F1c2luZyBjdXJsIHRyYW5zYWN0aW9ucyB0byBmYWlsCiogQWRkaW5nIHRoZSBhYmlsaXR5IGZvciB0aGUgbmFtZXNwYWNlIEl0ZXJhdG9yIGZhY3RvcnkgdG8gbG9vayBpbiBtdWx0aXBsZSBkaXJlY3RvcmllcwoqIEFkZGVkIG1vcmUgZ2V0dGVycy9zZXR0ZXJzL3JlbW92ZXJzIGZyb20gc2VydmljZSBkZXNjcmlwdGlvbnMKKiBBZGRlZCB0aGUgYWJpbGl0eSB0byByZW1vdmUgUE9TVCBmaWVsZHMgZnJvbSBPQXV0aCBzaWduYXR1cmVzCiogT0F1dGggcGx1Z2luIG5vdyBzdXBwb3J0cyAyLWxlZ2dlZCBPQXV0aAoKIyMgMi44LjYgLSAyMDEyLTA5LTA1CgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIG1vZGlmeSBhbmQgYnVpbGQgc2VydmljZSBkZXNjcmlwdGlvbnMKKiBBZGRlZCB0aGUgdXNlIG9mIHZpc2l0b3JzIHRvIGFwcGx5IHBhcmFtZXRlcnMgdG8gbG9jYXRpb25zIGluIHNlcnZpY2UgZGVzY3JpcHRpb25zIHVzaW5nIHRoZSBkeW5hbWljIGNvbW1hbmQKKiBBZGRlZCBhIGBqc29uYCBwYXJhbWV0ZXIgbG9jYXRpb24KKiBOb3cgYWxsb3dpbmcgZG90IG5vdGF0aW9uIGZvciBjbGFzc2VzIGluIHRoZSBDYWNoZUFkYXB0ZXJGYWN0b3J5CiogVXNpbmcgdGhlIHVuaW9uIG9mIHR3byBhcnJheXMgcmF0aGVyIHRoYW4gYW4gYXJyYXlfbWVyZ2Ugd2hlbiBleHRlbmRpbmcgc2VydmljZSBidWlsZGVyIHNlcnZpY2VzIGFuZCBzZXJ2aWNlIHBhcmFtcwoqIEVuc3VyaW5nIHRoYXQgYSBzZXJ2aWNlIGlzIGEgc3RyaW5nIGJlZm9yZSBkb2luZyBzdHJwb3MoKSBjaGVja3Mgb24gaXQgd2hlbiBzdWJzdGl0dXRpbmcgc2VydmljZXMgZm9yIHJlZmVyZW5jZXMKICBpbiBzZXJ2aWNlIGJ1aWxkZXIgY29uZmlnIGZpbGVzLgoqIFNlcnZpY2VzIGRlZmluZWQgaW4gdHdvIGRpZmZlcmVudCBjb25maWcgZmlsZXMgdGhhdCBpbmNsdWRlIG9uZSBhbm90aGVyIHdpbGwgYnkgZGVmYXVsdCByZXBsYWNlIHRoZSBwcmV2aW91c2x5CiAgZGVmaW5lZCBzZXJ2aWNlLCBidXQgeW91IGNhbiBub3cgY3JlYXRlIHNlcnZpY2VzIHRoYXQgZXh0ZW5kIHRoZW1zZWx2ZXMgYW5kIG1lcmdlIHRoZWlyIHNldHRpbmdzIG92ZXIgdGhlIHByZXZpb3VzCiogVGhlIEpzb25Mb2FkZXIgbm93IHN1cHBvcnRzIGFsaWFzaW5nIGZpbGVuYW1lcyB3aXRoIGRpZmZlcmVudCBmaWxlbmFtZXMuIFRoaXMgYWxsb3dzIHlvdSB0byBhbGlhcyBzb21ldGhpbmcgbGlrZQogICdfZGVmYXVsdCcgd2l0aCBhIGRlZmF1bHQgSlNPTiBjb25maWd1cmF0aW9uIGZpbGUuCgojIyAyLjguNSAtIDIwMTItMDgtMjkKCiogQnVnOiBTdXBwcmVzc2VkIGVtcHR5IGFycmF5cyBmcm9tIFVSSSB0ZW1wbGF0ZXMKKiBCdWc6IEFkZGVkIHRoZSBtaXNzaW5nICRvcHRpb25zIGFyZ3VtZW50IGZyb20gU2VydmljZURlc2NyaXB0aW9uOjpmYWN0b3J5IHRvIGVuYWJsZSBjYWNoaW5nCiogQWRkZWQgc3VwcG9ydCBmb3IgSFRUUCByZXNwb25zZXMgdGhhdCBkbyBub3QgY29udGFpbiBhIHJlYXNvbiBwaHJhc2UgaW4gdGhlIHN0YXJ0LWxpbmUKKiBBYnN0cmFjdENvbW1hbmQgY29tbWFuZHMgYXJlIG5vdyBpbnZva2FibGUKKiBBZGRlZCBhIHdheSB0byBnZXQgdGhlIGRhdGEgdXNlZCB3aGVuIHNpZ25pbmcgYW4gT2F1dGggcmVxdWVzdCBiZWZvcmUgYSByZXF1ZXN0IGlzIHNlbnQKCiMjIDIuOC40IC0gMjAxMi0wOC0xNQoKKiBCdWc6IEN1c3RvbSBkZWxheSB0aW1lIGNhbGN1bGF0aW9ucyBhcmUgbm8gbG9uZ2VyIGlnbm9yZWQgaW4gdGhlIEV4cG9uZW50aWFsQmFja29mZlBsdWdpbgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHRyYW5zZmVyIGVudGl0eSBib2RpZXMgYXMgYSBzdHJpbmcgcmF0aGVyIHRoYW4gc3RyZWFtZWQuIFRoaXMgZ2V0cyBhcm91bmQgY3VybCBlcnJvciA2NS4gU2V0IGBib2R5X2FzX3N0cmluZ2AgaW4gYSByZXF1ZXN0J3MgY3VybCBvcHRpb25zIHRvIGVuYWJsZS4KKiBBZGRlZCBhIFN0cmVhbUludGVyZmFjZSwgRW50aXR5Qm9keUludGVyZmFjZSwgYW5kIGFkZGVkIGZ0ZWxsKCkgdG8gR3V6emxlXENvbW1vblxTdHJlYW0KKiBBZGRlZCBhbiBBYnN0cmFjdEVudGl0eUJvZHlEZWNvcmF0b3IgYW5kIGEgUmVhZExpbWl0RW50aXR5Qm9keSBkZWNvcmF0b3IgdG8gdHJhbnNmZXIgb25seSBhIHN1YnNldCBvZiBhIGRlY29yYXRlZCBzdHJlYW0KKiBTdHJlYW0gYW5kIEVudGl0eUJvZHkgb2JqZWN0cyB3aWxsIG5vdyByZXR1cm4gdGhlIGZpbGUgcG9zaXRpb24gdG8gdGhlIHByZXZpb3VzIHBvc2l0aW9uIGFmdGVyIGEgcmVhZCByZXF1aXJlZCBvcGVyYXRpb24gKGUuZy4gZ2V0Q29udGVudE1kNSgpKQoqIEFkZGVkIGFkZGl0aW9uYWwgcmVzcG9uc2Ugc3RhdHVzIGNvZGVzCiogUmVtb3ZlZCBTU0wgaW5mb3JtYXRpb24gZnJvbSB0aGUgZGVmYXVsdCBVc2VyLUFnZW50IGhlYWRlcgoqIERFTEVURSByZXF1ZXN0cyBjYW4gbm93IHNlbmQgYW4gZW50aXR5IGJvZHkKKiBBZGRlZCBhbiBFdmVudERpc3BhdGNoZXIgdG8gdGhlIEV4cG9uZW50aWFsQmFja29mZlBsdWdpbiBhbmQgYWRkZWQgYW4gRXhwb25lbnRpYWxCYWNrb2ZmTG9nZ2VyIHRvIGxvZyBiYWNrb2ZmIHJldHJpZXMKKiBBZGRlZCB0aGUgYWJpbGl0eSBvZiB0aGUgTW9ja1BsdWdpbiB0byBjb25zdW1lIG1vY2tlZCByZXF1ZXN0IGJvZGllcwoqIExvZ1BsdWdpbiBub3cgZXhwb3NlcyByZXF1ZXN0IGFuZCByZXNwb25zZSBvYmplY3RzIGluIHRoZSBleHRyYXMgYXJyYXkKCiMjIDIuOC4zIC0gMjAxMi0wNy0zMAoKKiBCdWc6IEZpeGVkIGEgY2FzZSB3aGVyZSBlbXB0eSBQT1NUIHJlcXVlc3RzIHdlcmUgc2VudCBhcyBHRVQgcmVxdWVzdHMKKiBCdWc6IEZpeGVkIGEgYnVnIGluIEV4cG9uZW50aWFsQmFja29mZlBsdWdpbiB0aGF0IGNhdXNlZCBmYXRhbCBlcnJvcnMgd2hlbiByZXRyeWluZyBhbiBFbnRpdHlFbmNsb3NpbmdSZXF1ZXN0IHRoYXQgZG9lcyBub3QgaGF2ZSBhIGJvZHkKKiBCdWc6IFNldHRpbmcgdGhlIHJlc3BvbnNlIGJvZHkgb2YgYSByZXF1ZXN0IHRvIG51bGwgYWZ0ZXIgY29tcGxldGluZyBhIHJlcXVlc3QsIG5vdCB3aGVuIHNldHRpbmcgdGhlIHN0YXRlIG9mIGEgcmVxdWVzdCB0byBuZXcKKiBBZGRlZCBtdWx0aXBsZSBpbmhlcml0YW5jZSB0byBzZXJ2aWNlIGRlc2NyaXB0aW9uIGNvbW1hbmRzCiogQWRkZWQgYW4gQXBpQ29tbWFuZEludGVyZmFjZSBhbmQgYWRkZWQgYGdldFBhcmFtTmFtZXMoKWAgYW5kIGBoYXNQYXJhbSgpYAoqIFJlbW92ZWQgdGhlIGRlZmF1bHQgMm1iIHNpemUgY3V0b2ZmIGZyb20gdGhlIE1kNVZhbGlkYXRvclBsdWdpbiBzbyB0aGF0IGl0IG5vdyBkZWZhdWx0cyB0byB2YWxpZGF0aW5nIGV2ZXJ5dGhpbmcKKiBDaGFuZ2VkIEN1cmxNdWx0aTo6cGVyZm9ybSB0byBwYXNzIGEgc21hbGxlciB0aW1lb3V0IHRvIEN1cmxNdWx0aTo6ZXhlY3V0ZUhhbmRsZXMKCiMjIDIuOC4yIC0gMjAxMi0wNy0yNAoKKiBCdWc6IFF1ZXJ5IHN0cmluZyB2YWx1ZXMgc2V0IHRvIDAgYXJlIG5vIGxvbmdlciBkcm9wcGVkIGZyb20gdGhlIHF1ZXJ5IHN0cmluZwoqIEJ1ZzogQSBDb2xsZWN0aW9uIG9iamVjdCBpcyBubyBsb25nZXIgY3JlYXRlZCBlYWNoIHRpbWUgYSBjYWxsIGlzIG1hZGUgdG8gYEd1enpsZVxTZXJ2aWNlXENvbW1hbmRcQWJzdHJhY3RDb21tYW5kOjpnZXRSZXF1ZXN0SGVhZGVycygpYAoqIEJ1ZzogYCtgIGlzIG5vdyB0cmVhdGVkIGFzIGFuIGVuY29kZWQgc3BhY2Ugd2hlbiBwYXJzaW5nIHF1ZXJ5IHN0cmluZ3MKKiBRdWVyeVN0cmluZyBhbmQgQ29sbGVjdGlvbiBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMKKiBBbGxvd2luZyBkb3Qgbm90YXRpb24gZm9yIGNsYXNzIHBhdGhzIGluIGZpbHRlcnMgYXR0cmlidXRlIG9mIGEgc2VydmljZSBkZXNjcmlwdGlvbnMKCiMjIDIuOC4xIC0gMjAxMi0wNy0xNgoKKiBMb29zZW5pbmcgRXZlbnQgRGlzcGF0Y2hlciBkZXBlbmRlbmN5CiogUE9TVCByZWRpcmVjdHMgY2FuIG5vdyBiZSBjdXN0b21pemVkIHVzaW5nIENVUkxPUFRfUE9TVFJFRElSCgojIyAyLjguMCAtIDIwMTItMDctMTUKCiogQkM6IEd1enpsZVxIdHRwXFF1ZXJ5CiAgICAqIFF1ZXJ5IHN0cmluZ3Mgd2l0aCBlbXB0eSB2YXJpYWJsZXMgd2lsbCBhbHdheXMgc2hvdyBhbiBlcXVhbCBzaWduIHVubGVzcyB0aGUgdmFyaWFibGUgaXMgc2V0IHRvIFF1ZXJ5U3RyaW5nOjpCTEFOSyAoZS5nLiA/YWNsPSB2cyA/YWNsKQogICAgKiBDaGFuZ2VkIGlzRW5jb2RpbmdWYWx1ZXMoKSBhbmQgaXNFbmNvZGluZ0ZpZWxkcygpIHRvIGlzVXJsRW5jb2RpbmcoKQogICAgKiBDaGFuZ2VkIHNldEVuY29kZVZhbHVlcyhib29sKSBhbmQgc2V0RW5jb2RlRmllbGRzKGJvb2wpIHRvIHVzZVVybEVuY29kaW5nKGJvb2wpCiAgICAqIENoYW5nZWQgdGhlIGFnZ3JlZ2F0aW9uIGZ1bmN0aW9ucyBvZiBRdWVyeVN0cmluZyB0byBiZSBzdGF0aWMgbWV0aG9kcwogICAgKiBDYW4gbm93IHVzZSBmcm9tU3RyaW5nKCkgd2l0aCBxdWVyeXN0cmluZ3MgdGhhdCBoYXZlIGEgbGVhZGluZyA/CiogY1VSTCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgc3BlY2lmaWVkIGluIHNlcnZpY2UgZGVzY3JpcHRpb25zIHVzaW5nIGBjdXJsLmAgcHJlZml4ZWQgcGFyYW1ldGVycwoqIENvbnRlbnQtTGVuZ3RoIGlzIHNldCB0byAwIGJlZm9yZSBlbWl0dGluZyB0aGUgcmVxdWVzdC5iZWZvcmVfc2VuZCBldmVudCB3aGVuIHNlbmRpbmcgYW4gZW1wdHkgcmVxdWVzdCBib2R5CiogQ29va2llcyBhcmUgbm8gbG9uZ2VyIFVSTCBkZWNvZGVkIGJ5IGRlZmF1bHQKKiBCdWc6IFVSSSB0ZW1wbGF0ZSB2YXJpYWJsZXMgc2V0IHRvIG51bGwgYXJlIG5vIGxvbmdlciBleHBhbmRlZAoKIyMgMi43LjIgLSAyMDEyLTA3LTAyCgoqIEJDOiBNb3ZpbmcgdGhpbmdzIHRvIGdldCByZWFkeSBmb3Igc3VidHJlZSBzcGxpdHMuIE1vdmluZyBJbmZsZWN0aW9uIGludG8gQ29tbW9uLiBNb3ZpbmcgR3V6emxlXEh0dHBcUGFyc2VyIHRvIEd1enpsZVxQYXJzZXIuCiogQkM6IFJlbW92aW5nIEd1enpsZVxDb21tb25cQmF0Y2hcQmF0Y2g6OmNvdW50KCkgYW5kIHJlcGxhY2luZyBpdCB3aXRoIGlzRW1wdHkoKQoqIENhY2hlUGx1Z2luIG5vdyBhbGxvd3MgZm9yIGEgY3VzdG9tIHJlcXVlc3QgcGFyYW1ldGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGEgcmVxdWVzdCBjYW4gYmUgY2FjaGVkCiogQnVnIGZpeDogQ2FjaGVQbHVnaW4gbm93IG9ubHkgY2FjaGVzIEdFVCBhbmQgSEVBRCByZXF1ZXN0cyBieSBkZWZhdWx0CiogQnVnIGZpeDogVXNpbmcgaGVhZGVyIGdsdWUgd2hlbiB0cmFuc2ZlcnJpbmcgaGVhZGVycyBvdmVyIHRoZSB3aXJlCiogQWxsb3dpbmcgZGVlcGx5IG5lc3RlZCBhcnJheXMgZm9yIGNvbXBvc2l0ZSB2YXJpYWJsZXMgaW4gVVJJIHRlbXBsYXRlcwoqIEJhdGNoIGRpdmlzb3JzIGNhbiBub3cgcmV0dXJuIGl0ZXJhdG9ycyBvciBhcnJheXMKCiMjIDIuNy4xIC0gMjAxMi0wNi0yNgoKKiBNaW5vciBwYXRjaCB0byB1cGRhdGUgdmVyc2lvbiBudW1iZXIgaW4gVUEgc3RyaW5nCiogVXBkYXRpbmcgYnVpbGQgcHJvY2VzcwoKIyMgMi43LjAgLSAyMDEyLTA2LTI1CgoqIEJDOiBJbmZsZWN0aW9uIGNsYXNzZXMgbW92ZWQgdG8gR3V6emxlXEluZmxlY3Rpb24uIE5vIGxvbmdlciBzdGF0aWMgbWV0aG9kcy4gQ2FuIG5vdyBpbmplY3QgY3VzdG9tIGluZmxlY3RvcnMgaW50byBjbGFzc2VzLgoqIEJDOiBSZW1vdmVkIG1hZ2ljIHNldFggbWV0aG9kcyBmcm9tIGNvbW1hbmRzCiogQkM6IE1hZ2ljIG1ldGhvZHMgbWFwcGVkIHRvIHNlcnZpY2UgZGVzY3JpcHRpb24gY29tbWFuZHMgYXJlIG5vdyBpbmZsZWN0ZWQgaW4gdGhlIGNvbW1hbmQgZmFjdG9yeSByYXRoZXIgdGhhbiB0aGUgY2xpZW50IF9fY2FsbCgpIG1ldGhvZAoqIFZlcmJvc2UgY1VSTCBvcHRpb25zIGFyZSBubyBsb25nZXIgZW5hYmxlZCBieSBkZWZhdWx0LiBTZXQgY3VybC5kZWJ1ZyB0byB0cnVlIG9uIGEgY2xpZW50IHRvIGVuYWJsZS4KKiBCdWc6IE5vdyBhbGxvd2luZyBjb2xvbnMgaW4gYSByZXNwb25zZSBzdGFydC1saW5lIChlLmcuIEhUVFAvMS4xIDUwMyBTZXJ2aWNlIFVuYXZhaWxhYmxlOiBCYWNrLWVuZCBzZXJ2ZXIgaXMgYXQgY2FwYWNpdHkpCiogR3V6emxlXFNlcnZpY2VcUmVzb3VyY2VcUmVzb3VyY2VJdGVyYXRvckFwcGx5QmF0Y2hlZCBub3cgaW50ZXJuYWxseSB1c2VzIHRoZSBHdXp6bGVcQ29tbW9uXEJhdGNoIG5hbWVzcGFjZQoqIEFkZGVkIEd1enpsZVxTZXJ2aWNlXFBsdWdpbiBuYW1lc3BhY2UgYW5kIGEgUGx1Z2luQ29sbGVjdGlvblBsdWdpbgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHNldCBQT1NUIGZpZWxkcyBhbmQgZmlsZXMgaW4gYSBzZXJ2aWNlIGRlc2NyaXB0aW9uCiogR3V6emxlXEh0dHBcRW50aXR5Qm9keTo6ZmFjdG9yeSgpIG5vdyBhY2NlcHRzIG9iamVjdHMgd2l0aCBhIF9fdG9TdHJpbmcoKSBtZXRob2QKKiBBZGRpbmcgYSBjb21tYW5kLmJlZm9yZV9wcmVwYXJlIGV2ZW50IHRvIGNsaWVudHMKKiBBZGRlZCBCYXRjaENsb3N1cmVUcmFuc2ZlciBhbmQgQmF0Y2hDbG9zdXJlRGl2aXNvcgoqIEJhdGNoVHJhbnNmZXJFeGNlcHRpb24gbm93IGluY2x1ZGVzIHJlZmVyZW5jZXMgdG8gdGhlIGJhdGNoIGRpdmlzb3IgYW5kIHRyYW5zZmVyIHN0cmF0ZWdpZXMKKiBGaXhlZCBzb21lIHRlc3RzIHNvIHRoYXQgdGhleSBwYXNzIG1vcmUgcmVsaWFibHkKKiBBZGRlZCBHdXp6bGVcQ29tbW9uXExvZ1xBcnJheUxvZ0FkYXB0ZXIKCiMjIDIuNi42IC0gMjAxMi0wNi0xMAoKKiBCQzogUmVtb3ZpbmcgR3V6emxlXEh0dHBcUGx1Z2luXEJhdGNoUXVldWVQbHVnaW4KKiBCQzogUmVtb3ZpbmcgR3V6emxlXFNlcnZpY2VcQ29tbWFuZFxDb21tYW5kU2V0CiogQWRkaW5nIGdlbmVyaWMgYmF0Y2hpbmcgc3lzdGVtIChyZXBsYWNlcyB0aGUgYmF0Y2ggcXVldWUgcGx1Z2luIGFuZCBjb21tYW5kIHNldCkKKiBVcGRhdGluZyBaRiBjYWNoZSBhbmQgbG9nIGFkYXB0ZXJzIGFuZCBub3cgdXNpbmcgWkYncyBjb21wb3NlciByZXBvc2l0b3J5CiogQnVnOiBTZXR0aW5nIHRoZSBuYW1lIG9mIGVhY2ggQXBpUGFyYW0gd2hlbiBjcmVhdGluZyB0aHJvdWdoIGFuIEFwaUNvbW1hbmQKKiBBZGRpbmcgcmVzdWx0X3R5cGUsIHJlc3VsdF9kb2MsIGRlcHJlY2F0ZWQsIGFuZCBkb2NfdXJsIHRvIHNlcnZpY2UgZGVzY3JpcHRpb25zCiogQnVnOiBDaGFuZ2VkIHRoZSBkZWZhdWx0IGNvb2tpZSBoZWFkZXIgY2FzaW5nIGJhY2sgdG8gJ0Nvb2tpZScKCiMjIDIuNi41IC0gMjAxMi0wNi0wMwoKKiBCQzogUmVuYW1pbmcgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOjpnZXRSZXNvdXJjZVVyaSgpIHRvIGdldFJlc291cmNlKCkKKiBCQzogUmVtb3ZpbmcgdW51c2VkIEFVVEhfQkFTSUMgYW5kIEFVVEhfRElHRVNUIGNvbnN0YW50cyBmcm9tCiogQkM6IEd1enpsZVxIdHRwXENvb2tpZSBpcyBub3cgdXNlZCB0byBtYW5hZ2UgU2V0LUNvb2tpZSBkYXRhLCBub3QgQ29va2llIGRhdGEKKiBCQzogUmVuYW1pbmcgbWV0aG9kcyBpbiB0aGUgQ29va2llSmFySW50ZXJmYWNlCiogTW92aW5nIGFsbW9zdCBhbGwgY29va2llIGxvZ2ljIG91dCBvZiB0aGUgQ29va2llUGx1Z2luIGFuZCBpbnRvIHRoZSBDb29raWUgb3IgQ29va2llSmFyIGltcGxlbWVudGF0aW9ucwoqIE1ha2luZyB0aGUgZGVmYXVsdCBnbHVlIGZvciBIVFRQIGhlYWRlcnMgJzsnIGluc3RlYWQgb2YgJywnCiogQWRkaW5nIGEgcmVtb3ZlVmFsdWUgdG8gR3V6emxlXEh0dHBcTWVzc2FnZVxIZWFkZXIKKiBBZGRpbmcgZ2V0Q29va2llcygpIHRvIHJlcXVlc3QgaW50ZXJmYWNlLgoqIE1ha2luZyBpdCBlYXNpZXIgdG8gYWRkIGV2ZW50IHN1YnNjcmliZXJzIHRvIEhhc0Rpc3BhdGNoZXJJbnRlcmZhY2UgY2xhc3Nlcy4gQ2FuIG5vdyBkaXJlY3RseSBjYWxsIGFkZFN1YnNjcmliZXIoKQoKIyMgMi42LjQgLSAyMDEyLTA1LTMwCgoqIEJDOiBDbGVhbmluZyB1cCBob3cgUE9TVCBmaWxlcyBhcmUgc3RvcmVkIGluIEVudGl0eUVuY2xvc2luZ1JlcXVlc3Qgb2JqZWN0cy4gQWRkaW5nIFBvc3RGaWxlIGNsYXNzLgoqIEJDOiBNb3ZpbmcgQXBpQ29tbWFuZCBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IGZyb20gdGhlIEluc3BlY3RvciBhbmQgb24gdG8gdGhlIEFwaUNvbW1hbmQKKiBCdWc6IEZpeGluZyBtYWdpYyBtZXRob2QgY29tbWFuZCBjYWxscyBvbiBjbGllbnRzCiogQnVnOiBFbWFpbCBjb25zdHJhaW50IG9ubHkgdmFsaWRhdGVzIHN0cmluZ3MKKiBCdWc6IEFnZ3JlZ2F0ZSBQT1NUIGZpZWxkcyB3aGVuIFBPU1QgZmlsZXMgYXJlIHByZXNlbnQgaW4gY3VybCBoYW5kbGUKKiBCdWc6IEZpeGluZyBkZWZhdWx0IFVzZXItQWdlbnQgaGVhZGVyCiogQnVnOiBPbmx5IGFwcGVuZGluZyBvciBwcmVwZW5kaW5nIHBhcmFtZXRlcnMgaW4gY29tbWFuZHMgaWYgdGhleSBhcmUgc3BlY2lmaWVkCiogQnVnOiBOb3QgcmVxdWlyaW5nIHJlc3BvbnNlIHJlYXNvbiBwaHJhc2VzIG9yIHN0YXR1cyBjb2RlcyB0byBtYXRjaCBhIHByZWRlZmluZWQgbGlzdCBvZiBjb2RlcwoqIEFsbG93aW5nIHRoZSB1c2Ugb2YgZG90IG5vdGF0aW9uIGZvciBjbGFzcyBuYW1lc3BhY2VzIHdoZW4gdXNpbmcgaW5zdGFuY2Vfb2YgY29uc3RyYWludAoqIEFkZGVkIGFueV9tYXRjaCB2YWxpZGF0aW9uIGNvbnN0cmFpbnQKKiBBZGRlZCBhbiBBc3luY1BsdWdpbgoqIFBhc3NpbmcgcmVxdWVzdCBvYmplY3QgdG8gdGhlIGNhbGN1bGF0ZVdhaXQgbWV0aG9kIG9mIHRoZSBFeHBvbmVudGlhbEJhY2tvZmZQbHVnaW4KKiBBbGxvd2luZyB0aGUgcmVzdWx0IG9mIGEgY29tbWFuZCBvYmplY3QgdG8gYmUgY2hhbmdlZAoqIFBhcnNpbmcgbG9jYXRpb24gYW5kIHR5cGUgc3ViIHZhbHVlcyB3aGVuIGluc3RhbnRpYXRpbmcgYSBzZXJ2aWNlIGRlc2NyaXB0aW9uIHJhdGhlciB0aGFuIG92ZXIgYW5kIG92ZXIgYXQgcnVudGltZQoKIyMgMi42LjMgLSAyMDEyLTA1LTIzCgoqIFtCQ10gR3V6emxlXENvbW1vblxGcm9tQ29uZmlnSW50ZXJmYWNlIG5vIGxvbmdlciByZXF1aXJlcyBhbnkgY29uZmlnIG9wdGlvbnMuCiogW0JDXSBSZWZhY3RvcmluZyBob3cgUE9TVCBmaWxlcyBhcmUgc3RvcmVkIG9uIGFuIEVudGl0eUVuY2xvc2luZ1JlcXVlc3QuIFRoZXkgYXJlIG5vdyBzZXBhcmF0ZSBmcm9tIFBPU1QgZmllbGRzLgoqIFlvdSBjYW4gbm93IHVzZSBhbiBhcnJheSBvZiBkYXRhIHdoZW4gY3JlYXRpbmcgUFVUIHJlcXVlc3QgYm9kaWVzIGluIHRoZSByZXF1ZXN0IGZhY3RvcnkuCiogUmVtb3ZpbmcgdGhlIHJlcXVpcmVtZW50IHRoYXQgSFRUUFMgcmVxdWVzdHMgbmVlZGVkIGEgQ2FjaGUtQ29udHJvbDogcHVibGljIGRpcmVjdGl2ZSB0byBiZSBjYWNoZWFibGUuCiogW0h0dHBdIEFkZGluZyBzdXBwb3J0IGZvciBDb250ZW50LVR5cGUgaW4gbXVsdGlwYXJ0IFBPU1QgdXBsb2FkcyBwZXIgdXBsb2FkCiogW0h0dHBdIEFkZGVkIHN1cHBvcnQgZm9yIHVwbG9hZGluZyBtdWx0aXBsZSBmaWxlcyB1c2luZyB0aGUgc2FtZSBuYW1lIChmb29bMF0sIGZvb1sxXSkKKiBBZGRpbmcgbW9yZSBQT1NUIGRhdGEgb3BlcmF0aW9ucyBmb3IgZWFzaWVyIG1hbmlwdWxhdGlvbiBvZiBQT1NUIGRhdGEuCiogWW91IGNhbiBub3cgc2V0IGVtcHR5IFBPU1QgZmllbGRzLgoqIFRoZSBib2R5IG9mIGEgcmVxdWVzdCBpcyBvbmx5IHNob3duIG9uIEVudGl0eUVuY2xvc2luZ1JlcXVlc3Qgb2JqZWN0cyB0aGF0IGRvIG5vdCB1c2UgUE9TVCBmaWxlcy4KKiBTcGxpdCB0aGUgR3V6emxlXFNlcnZpY2VcSW5zcGVjdG9yOjp2YWxpZGF0ZUNvbmZpZyBtZXRob2QgaW50byB0d28gbWV0aG9kcy4gT25lIHRvIGluaXRpYWxpemUgd2hlbiBhIGNvbW1hbmQgaXMgY3JlYXRlZCwgYW5kIG9uZSB0byB2YWxpZGF0ZS4KKiBDUyB1cGRhdGVzCgojIyAyLjYuMiAtIDIwMTItMDUtMTkKCiogW0h0dHBdIEJldHRlciBoYW5kbGluZyBvZiBuZXN0ZWQgc2NvcGUgcmVxdWVzdHMgaW4gQ3VybE11bHRpLiAgUmVxdWVzdHMgYXJlIG5vdyBhbHdheXMgcHJlcGFyZXMgaW4gdGhlIHNlbmQoKSBtZXRob2QgcmF0aGVyIHRoYW4gdGhlIGFkZFJlcXVlc3QoKSBtZXRob2QuCgojIyAyLjYuMSAtIDIwMTItMDUtMTkKCiogW0JDXSBSZW1vdmluZyAncGF0aCcgc3VwcG9ydCBpbiBzZXJ2aWNlIGRlc2NyaXB0aW9ucy4gIFVzZSAndXJpJy4KKiBbQkNdIEd1enpsZVxTZXJ2aWNlXEluc3BlY3Rvcjo6cGFyc2VEb2NCbG9jayBpcyBub3cgcHJvdGVjdGVkLiBBZGRpbmcgZ2V0QXBpUGFyYW1zRm9yQ2xhc3MoKSB3aXRoIGNhY2hlLgoqIFtCQ10gUmVtb3ZpbmcgR3V6emxlXENvbW1vblxOdWxsT2JqZWN0LiAgVXNlIGh0dHBzOi8vZ2l0aHViLmNvbS9tdGRvd2xpbmcvTnVsbE9iamVjdCBpZiB5b3UgbmVlZCBpdC4KKiBbQkNdIFJlbW92aW5nIEd1enpsZVxDb21tb25cWG1sRWxlbWVudC4KKiBBbGwgY29tbWFuZHMsIGJvdGggZHluYW1pYyBhbmQgY29uY3JldGUsIGhhdmUgQXBpQ29tbWFuZCBvYmplY3RzLgoqIEFkZGluZyBhIGZpeCBmb3IgQ3VybE11bHRpIHNvIHRoYXQgaWYgYWxsIG9mIHRoZSBjb25uZWN0aW9ucyBlbmNvdW50ZXIgc29tZSBzb3J0IG9mIGN1cmwgZXJyb3IsIHRoZW4gdGhlIGxvb3AgZXhpdHMuCiogQWRkaW5nIGNoZWNrcyB0byBFbnRpdHlFbmNsb3NpbmdSZXF1ZXN0IHNvIHRoYXQgZW1wdHkgUE9TVCBmaWxlcyBhbmQgZmllbGRzIGFyZSBpZ25vcmVkLgoqIE1ha2luZyB0aGUgbWV0aG9kIHNpZ25hdHVyZSBvZiBHdXp6bGVcU2VydmljZVxCdWlsZGVyXFNlcnZpY2VCdWlsZGVyOjpmYWN0b3J5IG1vcmUgZmxleGlibGUuCgojIyAyLjYuMCAtIDIwMTItMDUtMTUKCiogW0JDXSBNb3ZpbmcgR3V6emxlXFNlcnZpY2VcQnVpbGRlciB0byBHdXp6bGVcU2VydmljZVxCdWlsZGVyXFNlcnZpY2VCdWlsZGVyCiogW0JDXSBFeGVjdXRpbmcgYSBDb21tYW5kIHJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgY29tbWFuZCByYXRoZXIgdGhhbiB0aGUgY29tbWFuZAoqIFtCQ10gTW92aW5nIGFsbCBIVFRQIHBhcnNpbmcgbG9naWMgdG8gR3V6emxlXEh0dHBcUGFyc2Vycy4gQWxsb3dzIGZvciBmYXN0ZXIgQyBpbXBsZW1lbnRhdGlvbnMgaWYgbmVlZGVkLgoqIFtCQ10gQ2hhbmdpbmcgdGhlIEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVzcG9uc2U6OnNldFByb3RvY29sKCkgbWV0aG9kIHRvIGFjY2VwdCBhIHByb3RvY29sIGFuZCB2ZXJzaW9uIGluIHNlcGFyYXRlIGFyZ3MuCiogW0JDXSBNb3ZpbmcgUmVzb3VyY2VJdGVyYXRvciogdG8gR3V6emxlXFNlcnZpY2VcUmVzb3VyY2UKKiBbQkNdIENvbXBsZXRlbHkgcmVmYWN0b3JlZCBSZXNvdXJjZUl0ZXJhdG9ycyB0byBpdGVyYXRlIG92ZXIgYSBjbG9uZWQgY29tbWFuZCBvYmplY3QKKiBbQkNdIE1vdmVkIEd1enpsZVxIdHRwXFVyaVRlbXBsYXRlIHRvIEd1enpsZVxIdHRwXFBhcnNlclxVcmlUZW1wbGF0ZVxVcmlUZW1wbGF0ZQoqIFtCQ10gR3V6emxlXEd1enpsZSBpcyBub3cgZGVwcmVjYXRlZAoqIE1vdmluZyBHdXp6bGVcQ29tbW9uXEd1enpsZTo6aW5qZWN0IHRvIEd1enpsZVxDb21tb25cQ29sbGVjdGlvbjo6aW5qZWN0CiogQWRkaW5nIEd1enpsZVxWZXJzaW9uIGNsYXNzIHRvIGdpdmUgdmVyc2lvbiBpbmZvcm1hdGlvbiBhYm91dCBHdXp6bGUKKiBBZGRpbmcgR3V6emxlXEh0dHBcVXRpbHMgY2xhc3MgdG8gcHJvdmlkZSBnZXREZWZhdWx0VXNlckFnZW50KCkgYW5kIGdldEh0dHBEYXRlKCkKKiBBZGRpbmcgR3V6emxlXEN1cmxcQ3VybFZlcnNpb24gdG8gbWFuYWdlIGNhY2hpbmcgY3VybF92ZXJzaW9uKCkgZGF0YQoqIFNlcnZpY2VEZXNjcmlwdGlvbiBhbmQgU2VydmljZUJ1aWxkZXIgYXJlIG5vdyBjYWNoZWFibGUgdXNpbmcgc2ltaWxhciBjb25maWdzCiogQ2hhbmdpbmcgdGhlIGZvcm1hdCBvZiBYTUwgYW5kIEpTT04gc2VydmljZSBidWlsZGVyIGNvbmZpZ3MuICBCYWNrd2FyZHMgY29tcGF0aWJsZS4KKiBDbGVhbmVkIHVwIENvb2tpZSBwYXJzaW5nCiogVHJpbW1pbmcgdGhlIGRlZmF1bHQgR3V6emxlIFVzZXItQWdlbnQgaGVhZGVyCiogQWRkaW5nIGEgc2V0T25Db21wbGV0ZSgpIG1ldGhvZCB0byBDb21tYW5kcyB0aGF0IGlzIGNhbGxlZCB3aGVuIGEgY29tbWFuZCBjb21wbGV0ZXMKKiBLZWVwaW5nIHRyYWNrIG9mIHJlcXVlc3RzIHRoYXQgd2VyZSBtb2NrZWQgaW4gdGhlIE1vY2tQbHVnaW4KKiBGaXhlZCBhIGNhY2hpbmcgYnVnIGluIHRoZSBDYWNoZUFkYXB0ZXJGYWN0b3J5CiogSW5zcGVjdG9yIG9iamVjdHMgY2FuIGJlIGluamVjdGVkIGludG8gYSBDb21tYW5kIG9iamVjdAoqIFJlZmFjdG9yaW5nIGEgbG90IG9mIGNvZGUgYW5kIHRlc3RzIHRvIGJlIGNhc2UgaW5zZW5zaXRpdmUgd2hlbiBkZWFsaW5nIHdpdGggaGVhZGVycwoqIEFkZGluZyBHdXp6bGVcSHR0cFxNZXNzYWdlXEhlYWRlckNvbXBhcmlzb24gZm9yIGVhc3kgY29tcGFyaXNvbiBvZiBIVFRQIGhlYWRlcnMgdXNpbmcgYSBEU0wKKiBBZGRpbmcgdGhlIGFiaWxpdHkgdG8gc2V0IGdsb2JhbCBvcHRpb24gb3ZlcnJpZGVzIHRvIHNlcnZpY2UgYnVpbGRlciBjb25maWdzCiogQWRkaW5nIHRoZSBhYmlsaXR5IHRvIGluY2x1ZGUgb3RoZXIgc2VydmljZSBidWlsZGVyIGNvbmZpZyBmaWxlcyBmcm9tIHdpdGhpbiBYTUwgYW5kIEpTT04gZmlsZXMKKiBNb3ZpbmcgdGhlIHBhcnNlUXVlcnkgbWV0aG9kIG91dCBvZiBVcmwgYW5kIG9uIHRvIFF1ZXJ5U3RyaW5nOjpmcm9tU3RyaW5nKCkgYXMgYSBzdGF0aWMgZmFjdG9yeSBtZXRob2QuCgojIyAyLjUuMCAtIDIwMTItMDUtMDgKCiogTWFqb3IgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzCiogW0JDXSBTaW1wbGlmeWluZyBHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb24uICBQbGVhc2UgY2hlY2sgdG8gc2VlIGlmIHlvdSBhcmUgdXNpbmcgZmVhdHVyZXMgdGhhdCBhcmUgbm93IGRlcHJlY2F0ZWQuCiogW0JDXSBVc2luZyBhIGN1c3RvbSB2YWxpZGF0aW9uIHN5c3RlbSB0aGF0IGFsbG93cyBhIGZseXdlaWdodCBpbXBsZW1lbnRhdGlvbiBmb3IgbXVjaCBmYXN0ZXIgdmFsaWRhdGlvbi4gTm8gbG9uZ2VyIHVzaW5nIFN5bWZvbnkyIFZhbGlkYXRpb24gY29tcG9uZW50LgoqIFtCQ10gTm8gbG9uZ2VyIHN1cHBvcnRpbmcgInt7IH19IiBmb3IgaW5qZWN0aW5nIGludG8gY29tbWFuZCBvciBVcmlUZW1wbGF0ZXMuICBVc2UgInt9IgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHBhc3NlZCBwYXJhbWV0ZXJzIHRvIGFsbCByZXF1ZXN0cyBjcmVhdGVkIGJ5IGEgY2xpZW50CiogQWRkZWQgY2FsbGJhY2sgZnVuY3Rpb25hbGl0eSB0byB0aGUgRXhwb25lbnRpYWxCYWNrb2ZmUGx1Z2luCiogVXNpbmcgbWljcm90aW1lIGluIEV4cG9uZW50aWFsQmFja29mZlBsdWdpbiB0byBhbGxvdyBtb3JlIGdyYW51bGFyIGJhY2tvZmYgc3RyYXRlZ2llcy4KKiBSZXdpbmRpbmcgcmVxdWVzdCBzdHJlYW0gYm9kaWVzIHdoZW4gcmV0cnlpbmcgcmVxdWVzdHMKKiBFeGNlcHRpb24gaXMgdGhyb3duIHdoZW4gSlNPTiByZXNwb25zZSBib2R5IGNhbm5vdCBiZSBkZWNvZGVkCiogQWRkZWQgY29uZmlndXJhYmxlIG1hZ2ljIG1ldGhvZCBjYWxscyB0byBjbGllbnRzIGFuZCBjb21tYW5kcy4gIFRoaXMgaXMgb2ZmIGJ5IGRlZmF1bHQuCiogRml4ZWQgYSBkZWZlY3QgdGhhdCBhZGRlZCBhIGhhc2ggdG8gZXZlcnkgcGFyc2VkIFVSTCBwYXJ0CiogRml4ZWQgZHVwbGljYXRlIG5vbmUgZ2VuZXJhdGlvbiBmb3IgT2F1dGhQbHVnaW4uCiogRW1pdHRpbmcgYW4gZXZlbnQgZWFjaCB0aW1lIGEgY2xpZW50IGlzIGdlbmVyYXRlZCBieSBhIFNlcnZpY2VCdWlsZGVyCiogVXNpbmcgYW4gQXBpUGFyYW1zIG9iamVjdCBpbnN0ZWFkIG9mIGEgQ29sbGVjdGlvbiBmb3IgcGFyYW1ldGVycyBvZiBhbiBBcGlDb21tYW5kCiogY2FjaGUuKiByZXF1ZXN0IHBhcmFtZXRlcnMgc2hvdWxkIGJlIHJlbmFtZWQgdG8gcGFyYW1zLmNhY2hlLioKKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBzZXQgYXJiaXRyYXJ5IGN1cmwgb3B0aW9ucyBvbiByZXF1ZXN0cyAoZGlzYWJsZV93aXJlLCBwcm9ncmVzcywgZXRjLikuIFNlZSBDdXJsSGFuZGxlLgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIGRpc2FibGUgdHlwZSB2YWxpZGF0aW9uIG9mIHNlcnZpY2UgZGVzY3JpcHRpb25zCiogU2VydmljZURlc2NyaXB0aW9ucyBhbmQgU2VydmljZUJ1aWxkZXJzIGFyZSBub3cgU2VyaWFsaXphYmxlCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAiZ3V6emxlaHR0cC9ndXp6bGUiLAogICAgImRlc2NyaXB0aW9uIjogIkd1enpsZSBpcyBhIFBIUCBIVFRQIGNsaWVudCBsaWJyYXJ5IiwKICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAiZnJhbWV3b3JrIiwKICAgICAgICAiaHR0cCIsCiAgICAgICAgInJlc3QiLAogICAgICAgICJ3ZWIgc2VydmljZSIsCiAgICAgICAgImN1cmwiLAogICAgICAgICJjbGllbnQiLAogICAgICAgICJIVFRQIGNsaWVudCIsCiAgICAgICAgIlBTUi03IiwKICAgICAgICAiUFNSLTE4IgogICAgXSwKICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAiYXV0aG9ycyI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIkdyYWhhbSBDYW1wYmVsbCIsCiAgICAgICAgICAgICJlbWFpbCI6ICJoZWxsb0BnamNhbXBiZWxsLmNvLnVrIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9HcmFoYW1DYW1wYmVsbCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiTWljaGFlbCBEb3dsaW5nIiwKICAgICAgICAgICAgImVtYWlsIjogIm10ZG93bGluZ0BnbWFpbC5jb20iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL210ZG93bGluZyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiSmVyZW15IExpbmRibG9tIiwKICAgICAgICAgICAgImVtYWlsIjogImplcmVtZWFtaWFAZ21haWwuY29tIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9qZXJlbWVhbWlhIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJHZW9yZ2UgTXBvbm9zIiwKICAgICAgICAgICAgImVtYWlsIjogImdtcG9ub3NAZ21haWwuY29tIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9nbXBvbm9zIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJUb2JpYXMgTnlob2xtIiwKICAgICAgICAgICAgImVtYWlsIjogInRvYmlhcy5ueWhvbG1AZ21haWwuY29tIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9OeWhvbG0iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIk3DoXJrIFPDoWdpLUthesOhciIsCiAgICAgICAgICAgICJlbWFpbCI6ICJtYXJrLnNhZ2lrYXphckBnbWFpbC5jb20iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3NhZ2lrYXphcm1hcmsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIlRvYmlhcyBTY2h1bHR6ZSIsCiAgICAgICAgICAgICJlbWFpbCI6ICJ3ZWJtYXN0ZXJAdHViby13b3JsZC5kZSIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vVG9iaW9uIgogICAgICAgIH0KICAgIF0sCiAgICAicmVwb3NpdG9yaWVzIjogWwogICAgICAgIHsKICAgICAgICAgICAgInR5cGUiOiAicGFja2FnZSIsCiAgICAgICAgICAgICJwYWNrYWdlIjogewogICAgICAgICAgICAgICAgIm5hbWUiOiAiZ3V6emxlL2NsaWVudC1pbnRlZ3JhdGlvbi10ZXN0cyIsCiAgICAgICAgICAgICAgICAidmVyc2lvbiI6ICJ2My4wLjIiLAogICAgICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2NvZGVsb2FkLmdpdGh1Yi5jb20vZ3V6emxlL2NsaWVudC1pbnRlZ3JhdGlvbi10ZXN0cy96aXAvMmMwMjU4NDg0MTdjMTEzNTAzMWZkZjljNzI4ZWU1M2QwYTdjZWFlZSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgICAgICJwaHAiOiAiXjcuMi41IHx8IF44LjAiLAogICAgICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjcuNS4yMCB8fCBeOC41LjggfHwgXjkuMy4xMSIsCiAgICAgICAgICAgICAgICAgICAgInBocC1odHRwL21lc3NhZ2UiOiAiXjEuMCB8fCBeMi4wIiwKICAgICAgICAgICAgICAgICAgICAiZ3V6emxlaHR0cC9wc3I3IjogIl4xLjcgfHwgXjIuMCIsCiAgICAgICAgICAgICAgICAgICAgInRoM24zcmQvY2FydGVzaWFuLXByb2R1Y3QiOiAiXjAuMyIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICAgICAiSHR0cFxcQ2xpZW50XFxUZXN0c1xcIjogInNyYy8iCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJiaW4iOiBbCiAgICAgICAgICAgICAgICAgICAgImJpbi9odHRwX3Rlc3Rfc2VydmVyIgogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgXSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiOiAiXjcuMi41IHx8IF44LjAiLAogICAgICAgICJleHQtanNvbiI6ICIqIiwKICAgICAgICAiZ3V6emxlaHR0cC9wcm9taXNlcyI6ICJeMi4zIiwKICAgICAgICAiZ3V6emxlaHR0cC9wc3I3IjogIl4yLjgiLAogICAgICAgICJwc3IvaHR0cC1jbGllbnQiOiAiXjEuMCIsCiAgICAgICAgInN5bWZvbnkvZGVwcmVjYXRpb24tY29udHJhY3RzIjogIl4yLjIgfHwgXjMuMCIKICAgIH0sCiAgICAicHJvdmlkZSI6IHsKICAgICAgICAicHNyL2h0dHAtY2xpZW50LWltcGxlbWVudGF0aW9uIjogIjEuMCIKICAgIH0sCiAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgImV4dC1jdXJsIjogIioiLAogICAgICAgICJiYW1hcm5pL2NvbXBvc2VyLWJpbi1wbHVnaW4iOiAiXjEuOC4yIiwKICAgICAgICAiZ3V6emxlL2NsaWVudC1pbnRlZ3JhdGlvbi10ZXN0cyI6ICIzLjAuMiIsCiAgICAgICAgInBocC1odHRwL21lc3NhZ2UtZmFjdG9yeSI6ICJeMS4xIiwKICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl44LjUuMzkgfHwgXjkuNi4yMCIsCiAgICAgICAgInBzci9sb2ciOiAiXjEuMSB8fCBeMi4wIHx8IF4zLjAiCiAgICB9LAogICAgInN1Z2dlc3QiOiB7CiAgICAgICAgImV4dC1jdXJsIjogIlJlcXVpcmVkIGZvciBDVVJMIGhhbmRsZXIgc3VwcG9ydCIsCiAgICAgICAgImV4dC1pbnRsIjogIlJlcXVpcmVkIGZvciBJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZSAoSUROKSBzdXBwb3J0IiwKICAgICAgICAicHNyL2xvZyI6ICJSZXF1aXJlZCBmb3IgdXNpbmcgdGhlIExvZyBtaWRkbGV3YXJlIgogICAgfSwKICAgICJjb25maWciOiB7CiAgICAgICAgImFsbG93LXBsdWdpbnMiOiB7CiAgICAgICAgICAgICJiYW1hcm5pL2NvbXBvc2VyLWJpbi1wbHVnaW4iOiB0cnVlCiAgICAgICAgfSwKICAgICAgICAicHJlZmVycmVkLWluc3RhbGwiOiAiZGlzdCIsCiAgICAgICAgInNvcnQtcGFja2FnZXMiOiB0cnVlCiAgICB9LAogICAgImV4dHJhIjogewogICAgICAgICJiYW1hcm5pLWJpbiI6IHsKICAgICAgICAgICAgImJpbi1saW5rcyI6IHRydWUsCiAgICAgICAgICAgICJmb3J3YXJkLWNvbW1hbmQiOiBmYWxzZQogICAgICAgIH0KICAgIH0sCiAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiR3V6emxlSHR0cFxcIjogInNyYy8iCiAgICAgICAgfSwKICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICJzcmMvZnVuY3Rpb25zX2luY2x1ZGUucGhwIgogICAgICAgIF0KICAgIH0sCiAgICAiYXV0b2xvYWQtZGV2IjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIkd1enpsZUh0dHBcXFRlc3RzXFwiOiAidGVzdHMvIgogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTEgTWljaGFlbCBEb3dsaW5nIDxtdGRvd2xpbmdAZ21haWwuY29tPgpDb3B5cmlnaHQgKGMpIDIwMTIgSmVyZW15IExpbmRibG9tIDxqZXJlbWVhbWlhQGdtYWlsLmNvbT4KQ29weXJpZ2h0IChjKSAyMDE0IEdyYWhhbSBDYW1wYmVsbCA8aGVsbG9AZ2pjYW1wYmVsbC5jby51az4KQ29weXJpZ2h0IChjKSAyMDE1IE3DoXJrIFPDoWdpLUthesOhciA8bWFyay5zYWdpa2F6YXJAZ21haWwuY29tPgpDb3B5cmlnaHQgKGMpIDIwMTUgVG9iaWFzIFNjaHVsdHplIDx3ZWJtYXN0ZXJAdHViby13b3JsZC5kZT4KQ29weXJpZ2h0IChjKSAyMDE2IFRvYmlhcyBOeWhvbG0gPHRvYmlhcy5ueWhvbG1AZ21haWwuY29tPgpDb3B5cmlnaHQgKGMpIDIwMTYgR2VvcmdlIE1wb25vcyA8Z21wb25vc0BnbWFpbC5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/package-lock.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICJuYW1lIjogImd1enpsZSIsCiAgImxvY2tmaWxlVmVyc2lvbiI6IDMsCiAgInJlcXVpcmVzIjogdHJ1ZSwKICAicGFja2FnZXMiOiB7fQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IVtHdXp6bGVdKC5naXRodWIvbG9nby5wbmc/cmF3PXRydWUpCgojIEd1enpsZSwgUEhQIEhUVFAgY2xpZW50CgpbIVtMYXRlc3QgVmVyc2lvbl0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9naXRodWIvcmVsZWFzZS9ndXp6bGUvZ3V6emxlLnN2Zz9zdHlsZT1mbGF0LXNxdWFyZSldKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3JlbGVhc2VzKQpbIVtCdWlsZCBTdGF0dXNdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL2FjdGlvbnMvd29ya2Zsb3cvc3RhdHVzL2d1enpsZS9ndXp6bGUvY2kueW1sP2xhYmVsPWNpJTIwYnVpbGQmc3R5bGU9ZmxhdC1zcXVhcmUpXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9hY3Rpb25zP3F1ZXJ5PXdvcmtmbG93JTNBQ0kpClshW1RvdGFsIERvd25sb2Fkc10oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9wYWNrYWdpc3QvZHQvZ3V6emxlaHR0cC9ndXp6bGUuc3ZnP3N0eWxlPWZsYXQtc3F1YXJlKV0oaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzL2d1enpsZWh0dHAvZ3V6emxlKQoKR3V6emxlIGlzIGEgUEhQIEhUVFAgY2xpZW50IHRoYXQgbWFrZXMgaXQgZWFzeSB0byBzZW5kIEhUVFAgcmVxdWVzdHMgYW5kCnRyaXZpYWwgdG8gaW50ZWdyYXRlIHdpdGggd2ViIHNlcnZpY2VzLgoKLSBTaW1wbGUgaW50ZXJmYWNlIGZvciBidWlsZGluZyBxdWVyeSBzdHJpbmdzLCBQT1NUIHJlcXVlc3RzLCBzdHJlYW1pbmcgbGFyZ2UKICB1cGxvYWRzLCBzdHJlYW1pbmcgbGFyZ2UgZG93bmxvYWRzLCB1c2luZyBIVFRQIGNvb2tpZXMsIHVwbG9hZGluZyBKU09OIGRhdGEsCiAgZXRjLi4uCi0gQ2FuIHNlbmQgYm90aCBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzIHJlcXVlc3RzIHVzaW5nIHRoZSBzYW1lIGludGVyZmFjZS4KLSBVc2VzIFBTUi03IGludGVyZmFjZXMgZm9yIHJlcXVlc3RzLCByZXNwb25zZXMsIGFuZCBzdHJlYW1zLiBUaGlzIGFsbG93cyB5b3UKICB0byB1dGlsaXplIG90aGVyIFBTUi03IGNvbXBhdGlibGUgbGlicmFyaWVzIHdpdGggR3V6emxlLgotIFN1cHBvcnRzIFBTUi0xOCBhbGxvd2luZyBpbnRlcm9wZXJhYmlsaXR5IGJldHdlZW4gb3RoZXIgUFNSLTE4IEhUVFAgQ2xpZW50cy4KLSBBYnN0cmFjdHMgYXdheSB0aGUgdW5kZXJseWluZyBIVFRQIHRyYW5zcG9ydCwgYWxsb3dpbmcgeW91IHRvIHdyaXRlCiAgZW52aXJvbm1lbnQgYW5kIHRyYW5zcG9ydCBhZ25vc3RpYyBjb2RlOyBpLmUuLCBubyBoYXJkIGRlcGVuZGVuY3kgb24gY1VSTCwKICBQSFAgc3RyZWFtcywgc29ja2V0cywgb3Igbm9uLWJsb2NraW5nIGV2ZW50IGxvb3BzLgotIE1pZGRsZXdhcmUgc3lzdGVtIGFsbG93cyB5b3UgdG8gYXVnbWVudCBhbmQgY29tcG9zZSBjbGllbnQgYmVoYXZpb3IuCgpgYGBwaHAKJGNsaWVudCA9IG5ldyBcR3V6emxlSHR0cFxDbGllbnQoKTsKJHJlc3BvbnNlID0gJGNsaWVudC0+cmVxdWVzdCgnR0VUJywgJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvZ3V6emxlL2d1enpsZScpOwoKZWNobyAkcmVzcG9uc2UtPmdldFN0YXR1c0NvZGUoKTsgLy8gMjAwCmVjaG8gJHJlc3BvbnNlLT5nZXRIZWFkZXJMaW5lKCdjb250ZW50LXR5cGUnKTsgLy8gJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmOCcKZWNobyAkcmVzcG9uc2UtPmdldEJvZHkoKTsgLy8gJ3siaWQiOiAxNDIwMDUzLCAibmFtZSI6ICJndXp6bGUiLCAuLi59JwoKLy8gU2VuZCBhbiBhc3luY2hyb25vdXMgcmVxdWVzdC4KJHJlcXVlc3QgPSBuZXcgXEd1enpsZUh0dHBcUHNyN1xSZXF1ZXN0KCdHRVQnLCAnaHR0cDovL2h0dHBiaW4ub3JnJyk7CiRwcm9taXNlID0gJGNsaWVudC0+c2VuZEFzeW5jKCRyZXF1ZXN0KS0+dGhlbihmdW5jdGlvbiAoJHJlc3BvbnNlKSB7CiAgICBlY2hvICdJIGNvbXBsZXRlZCEgJyAuICRyZXNwb25zZS0+Z2V0Qm9keSgpOwp9KTsKCiRwcm9taXNlLT53YWl0KCk7CmBgYAoKIyMgSGVscCBhbmQgZG9jcwoKV2UgdXNlIEdpdEh1YiBpc3N1ZXMgb25seSB0byBkaXNjdXNzIGJ1Z3MgYW5kIG5ldyBmZWF0dXJlcy4gRm9yIHN1cHBvcnQgcGxlYXNlIHJlZmVyIHRvOgoKLSBbRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kb2NzLmd1enpsZXBocC5vcmcpCi0gW1N0YWNrIE92ZXJmbG93XShodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy90YWdnZWQvZ3V6emxlKQotIFsjZ3V6emxlXShodHRwczovL2FwcC5zbGFjay5jb20vY2xpZW50L1QwRDJTOUpDVC9DRTZVQUFLTDQpIGNoYW5uZWwgb24gW1BIUC1IVFRQIFNsYWNrXShodHRwczovL3NsYWNrLmh0dHBsdWcuaW8vKQotIFtHaXR0ZXJdKGh0dHBzOi8vZ2l0dGVyLmltL2d1enpsZS9ndXp6bGUpCgoKIyMgSW5zdGFsbGluZyBHdXp6bGUKClRoZSByZWNvbW1lbmRlZCB3YXkgdG8gaW5zdGFsbCBHdXp6bGUgaXMgdGhyb3VnaApbQ29tcG9zZXJdKGh0dHBzOi8vZ2V0Y29tcG9zZXIub3JnLykuCgpgYGBiYXNoCmNvbXBvc2VyIHJlcXVpcmUgZ3V6emxlaHR0cC9ndXp6bGUKYGBgCgoKIyMgVmVyc2lvbiBHdWlkYW5jZQoKfCBWZXJzaW9uIHwgU3RhdHVzICAgICAgICAgICAgICB8IFBhY2thZ2lzdCAgICAgICAgICAgfCBOYW1lc3BhY2UgICAgfCBSZXBvICAgICAgICAgICAgICAgIHwgRG9jcyAgICAgICAgICAgICAgICB8IFBTUi03IHwgUEhQIFZlcnNpb24gIHwKfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwKfCAzLnggICAgIHwgRU9MICgyMDE2LTEwLTMxKSAgICB8IGBndXp6bGUvZ3V6emxlYCAgICAgfCBgR3V6emxlYCAgICAgfCBbdjNdW2d1enpsZS0zLXJlcG9dIHwgW3YzXVtndXp6bGUtMy1kb2NzXSB8IE5vICAgIHwgPj01LjMuMyw8Ny4wIHwKfCA0LnggICAgIHwgRU9MICgyMDE2LTEwLTMxKSAgICB8IGBndXp6bGVodHRwL2d1enpsZWAgfCBgR3V6emxlSHR0cGAgfCBbdjRdW2d1enpsZS00LXJlcG9dIHwgTi9BICAgICAgICAgICAgICAgICB8IE5vICAgIHwgPj01LjQsPDcuMCAgIHwKfCA1LnggICAgIHwgRU9MICgyMDE5LTEwLTMxKSAgICB8IGBndXp6bGVodHRwL2d1enpsZWAgfCBgR3V6emxlSHR0cGAgfCBbdjVdW2d1enpsZS01LXJlcG9dIHwgW3Y1XVtndXp6bGUtNS1kb2NzXSB8IE5vICAgIHwgPj01LjQsPDcuNCAgIHwKfCA2LnggICAgIHwgRU9MICgyMDIzLTEwLTMxKSAgICB8IGBndXp6bGVodHRwL2d1enpsZWAgfCBgR3V6emxlSHR0cGAgfCBbdjZdW2d1enpsZS02LXJlcG9dIHwgW3Y2XVtndXp6bGUtNi1kb2NzXSB8IFllcyAgIHwgPj01LjUsPDguMCAgIHwKfCA3LnggICAgIHwgTGF0ZXN0ICAgICAgICAgICAgICB8IGBndXp6bGVodHRwL2d1enpsZWAgfCBgR3V6emxlSHR0cGAgfCBbdjddW2d1enpsZS03LXJlcG9dIHwgW3Y3XVtndXp6bGUtNy1kb2NzXSB8IFllcyAgIHwgPj03LjIuNSw8OC41IHwKCltndXp6bGUtMy1yZXBvXTogaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUzCltndXp6bGUtNC1yZXBvXTogaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvdHJlZS80LngKW2d1enpsZS01LXJlcG9dOiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS90cmVlLzUuMwpbZ3V6emxlLTYtcmVwb106IGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3RyZWUvNi41CltndXp6bGUtNy1yZXBvXTogaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUKW2d1enpsZS0zLWRvY3NdOiBodHRwczovL2d1enpsZTMucmVhZHRoZWRvY3MuaW8vCltndXp6bGUtNS1kb2NzXTogaHR0cHM6Ly9kb2NzLmd1enpsZXBocC5vcmcvZW4vNS4zLwpbZ3V6emxlLTYtZG9jc106IGh0dHBzOi8vZG9jcy5ndXp6bGVwaHAub3JnL2VuLzYuNS8KW2d1enpsZS03LWRvY3NdOiBodHRwczovL2RvY3MuZ3V6emxlcGhwLm9yZy9lbi9sYXRlc3QvCgoKIyMgU2VjdXJpdHkKCklmIHlvdSBkaXNjb3ZlciBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgd2l0aGluIHRoaXMgcGFja2FnZSwgcGxlYXNlIHNlbmQgYW4gZW1haWwgdG8gc2VjdXJpdHlAdGlkZWxpZnQuY29tLiBBbGwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIHdpbGwgYmUgcHJvbXB0bHkgYWRkcmVzc2VkLiBQbGVhc2UgZG8gbm90IGRpc2Nsb3NlIHNlY3VyaXR5LXJlbGF0ZWQgaXNzdWVzIHB1YmxpY2x5IHVudGlsIGEgZml4IGhhcyBiZWVuIGFubm91bmNlZC4gUGxlYXNlIHNlZSBbU2VjdXJpdHkgUG9saWN5XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9zZWN1cml0eS9wb2xpY3kpIGZvciBtb3JlIGluZm9ybWF0aW9uLgoKIyMgTGljZW5zZQoKR3V6emxlIGlzIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKS4gUGxlYXNlIHNlZSBbTGljZW5zZSBGaWxlXShMSUNFTlNFKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCiMjIEZvciBFbnRlcnByaXNlCgpBdmFpbGFibGUgYXMgcGFydCBvZiB0aGUgVGlkZWxpZnQgU3Vic2NyaXB0aW9uCgpUaGUgbWFpbnRhaW5lcnMgb2YgR3V6emxlIGFuZCB0aG91c2FuZHMgb2Ygb3RoZXIgcGFja2FnZXMgYXJlIHdvcmtpbmcgd2l0aCBUaWRlbGlmdCB0byBkZWxpdmVyIGNvbW1lcmNpYWwgc3VwcG9ydCBhbmQgbWFpbnRlbmFuY2UgZm9yIHRoZSBvcGVuIHNvdXJjZSBkZXBlbmRlbmNpZXMgeW91IHVzZSB0byBidWlsZCB5b3VyIGFwcGxpY2F0aW9ucy4gU2F2ZSB0aW1lLCByZWR1Y2UgcmlzaywgYW5kIGltcHJvdmUgY29kZSBoZWFsdGgsIHdoaWxlIHBheWluZyB0aGUgbWFpbnRhaW5lcnMgb2YgdGhlIGV4YWN0IGRlcGVuZGVuY2llcyB5b3UgdXNlLiBbTGVhcm4gbW9yZS5dKGh0dHBzOi8vdGlkZWxpZnQuY29tL3N1YnNjcmlwdGlvbi9wa2cvcGFja2FnaXN0LWd1enpsZWh0dHAtZ3V6emxlP3V0bV9zb3VyY2U9cGFja2FnaXN0LWd1enpsZWh0dHAtZ3V6emxlJnV0bV9tZWRpdW09cmVmZXJyYWwmdXRtX2NhbXBhaWduPWVudGVycHJpc2UmdXRtX3Rlcm09cmVwbykK]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/BodySummarizer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIFBzclxIdHRwXE1lc3NhZ2VcTWVzc2FnZUludGVyZmFjZTsKCmZpbmFsIGNsYXNzIEJvZHlTdW1tYXJpemVyIGltcGxlbWVudHMgQm9keVN1bW1hcml6ZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAdmFyIGludHxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJHRydW5jYXRlQXQ7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KD9pbnQgJHRydW5jYXRlQXQgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT50cnVuY2F0ZUF0ID0gJHRydW5jYXRlQXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgc3VtbWFyaXplZCBtZXNzYWdlIGJvZHkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzdW1tYXJpemUoTWVzc2FnZUludGVyZmFjZSAkbWVzc2FnZSk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRydW5jYXRlQXQgPT09IG51bGwKICAgICAgICAgICAgPyBQc3I3XE1lc3NhZ2U6OmJvZHlTdW1tYXJ5KCRtZXNzYWdlKQogICAgICAgICAgICA6IFBzcjdcTWVzc2FnZTo6Ym9keVN1bW1hcnkoJG1lc3NhZ2UsICR0aGlzLT50cnVuY2F0ZUF0KTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/BodySummarizerInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIFBzclxIdHRwXE1lc3NhZ2VcTWVzc2FnZUludGVyZmFjZTsKCmludGVyZmFjZSBCb2R5U3VtbWFyaXplckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFJldHVybnMgYSBzdW1tYXJpemVkIG1lc3NhZ2UgYm9keS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN1bW1hcml6ZShNZXNzYWdlSW50ZXJmYWNlICRtZXNzYWdlKTogP3N0cmluZzsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Client.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIEd1enpsZUh0dHBcQ29va2llXENvb2tpZUphcjsKdXNlIEd1enpsZUh0dHBcRXhjZXB0aW9uXEd1enpsZUV4Y2VwdGlvbjsKdXNlIEd1enpsZUh0dHBcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIEd1enpsZUh0dHBcUHJvbWlzZSBhcyBQOwp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2VJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2U7CgovKioKICogQGZpbmFsCiAqLwpjbGFzcyBDbGllbnQgaW1wbGVtZW50cyBDbGllbnRJbnRlcmZhY2UsIFxQc3JcSHR0cFxDbGllbnRcQ2xpZW50SW50ZXJmYWNlCnsKICAgIHVzZSBDbGllbnRUcmFpdDsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkgRGVmYXVsdCByZXF1ZXN0IG9wdGlvbnMKICAgICAqLwogICAgcHJpdmF0ZSAkY29uZmlnOwoKICAgIC8qKgogICAgICogQ2xpZW50cyBhY2NlcHQgYW4gYXJyYXkgb2YgY29uc3RydWN0b3IgcGFyYW1ldGVycy4KICAgICAqCiAgICAgKiBIZXJlJ3MgYW4gZXhhbXBsZSBvZiBjcmVhdGluZyBhIGNsaWVudCB1c2luZyBhIGJhc2VfdXJpIGFuZCBhbiBhcnJheSBvZgogICAgICogZGVmYXVsdCByZXF1ZXN0IG9wdGlvbnMgdG8gYXBwbHkgdG8gZWFjaCByZXF1ZXN0OgogICAgICoKICAgICAqICAgICAkY2xpZW50ID0gbmV3IENsaWVudChbCiAgICAgKiAgICAgICAgICdiYXNlX3VyaScgICAgICAgID0+ICdodHRwOi8vd3d3LmZvby5jb20vMS4wLycsCiAgICAgKiAgICAgICAgICd0aW1lb3V0JyAgICAgICAgID0+IDAsCiAgICAgKiAgICAgICAgICdhbGxvd19yZWRpcmVjdHMnID0+IGZhbHNlLAogICAgICogICAgICAgICAncHJveHknICAgICAgICAgICA9PiAnMTkyLjE2OC4xNi4xOjEwJwogICAgICogICAgIF0pOwogICAgICoKICAgICAqIENsaWVudCBjb25maWd1cmF0aW9uIHNldHRpbmdzIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBvcHRpb25zOgogICAgICoKICAgICAqIC0gaGFuZGxlcjogKGNhbGxhYmxlKSBGdW5jdGlvbiB0aGF0IHRyYW5zZmVycyBIVFRQIHJlcXVlc3RzIG92ZXIgdGhlCiAgICAgKiAgIHdpcmUuIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIFBzcjdcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2UKICAgICAqICAgYW5kIGFycmF5IG9mIHRyYW5zZmVyIG9wdGlvbnMsIGFuZCBtdXN0IHJldHVybiBhCiAgICAgKiAgIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlSW50ZXJmYWNlIHRoYXQgaXMgZnVsZmlsbGVkIHdpdGggYQogICAgICogICBQc3I3XEh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZSBvbiBzdWNjZXNzLgogICAgICogICBJZiBubyBoYW5kbGVyIGlzIHByb3ZpZGVkLCBhIGRlZmF1bHQgaGFuZGxlciB3aWxsIGJlIGNyZWF0ZWQKICAgICAqICAgdGhhdCBlbmFibGVzIGFsbCBvZiB0aGUgcmVxdWVzdCBvcHRpb25zIGJlbG93IGJ5IGF0dGFjaGluZyBhbGwgb2YgdGhlCiAgICAgKiAgIGRlZmF1bHQgbWlkZGxld2FyZSB0byB0aGUgaGFuZGxlci4KICAgICAqIC0gYmFzZV91cmk6IChzdHJpbmd8VXJpSW50ZXJmYWNlKSBCYXNlIFVSSSBvZiB0aGUgY2xpZW50IHRoYXQgaXMgbWVyZ2VkCiAgICAgKiAgIGludG8gcmVsYXRpdmUgVVJJcy4gQ2FuIGJlIGEgc3RyaW5nIG9yIGluc3RhbmNlIG9mIFVyaUludGVyZmFjZS4KICAgICAqIC0gKio6IGFueSByZXF1ZXN0IG9wdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkY29uZmlnIENsaWVudCBjb25maWd1cmF0aW9uIHNldHRpbmdzLgogICAgICoKICAgICAqIEBzZWUgUmVxdWVzdE9wdGlvbnMgZm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcmVxdWVzdCBvcHRpb25zLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJGNvbmZpZyA9IFtdKQogICAgewogICAgICAgIGlmICghaXNzZXQoJGNvbmZpZ1snaGFuZGxlciddKSkgewogICAgICAgICAgICAkY29uZmlnWydoYW5kbGVyJ10gPSBIYW5kbGVyU3RhY2s6OmNyZWF0ZSgpOwogICAgICAgIH0gZWxzZWlmICghXGlzX2NhbGxhYmxlKCRjb25maWdbJ2hhbmRsZXInXSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignaGFuZGxlciBtdXN0IGJlIGEgY2FsbGFibGUnKTsKICAgICAgICB9CgogICAgICAgIC8vIENvbnZlcnQgdGhlIGJhc2VfdXJpIHRvIGEgVXJpSW50ZXJmYWNlCiAgICAgICAgaWYgKGlzc2V0KCRjb25maWdbJ2Jhc2VfdXJpJ10pKSB7CiAgICAgICAgICAgICRjb25maWdbJ2Jhc2VfdXJpJ10gPSBQc3I3XFV0aWxzOjp1cmlGb3IoJGNvbmZpZ1snYmFzZV91cmknXSk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+Y29uZmlndXJlRGVmYXVsdHMoJGNvbmZpZyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXRob2QKICAgICAqIEBwYXJhbSBhcnJheSAgJGFyZ3MKICAgICAqCiAgICAgKiBAcmV0dXJuIFByb21pc2VJbnRlcmZhY2V8UmVzcG9uc2VJbnRlcmZhY2UKICAgICAqCiAgICAgKiBAZGVwcmVjYXRlZCBDbGllbnQ6Ol9fY2FsbCB3aWxsIGJlIHJlbW92ZWQgaW4gZ3V6emxlaHR0cC9ndXp6bGU6OC4wLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jYWxsKCRtZXRob2QsICRhcmdzKQogICAgewogICAgICAgIGlmIChcY291bnQoJGFyZ3MpIDwgMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdNYWdpYyByZXF1ZXN0IG1ldGhvZHMgcmVxdWlyZSBhIFVSSSBhbmQgb3B0aW9uYWwgb3B0aW9ucyBhcnJheScpOwogICAgICAgIH0KCiAgICAgICAgJHVyaSA9ICRhcmdzWzBdOwogICAgICAgICRvcHRzID0gJGFyZ3NbMV0gPz8gW107CgogICAgICAgIHJldHVybiBcc3Vic3RyKCRtZXRob2QsIC01KSA9PT0gJ0FzeW5jJwogICAgICAgICAgICA/ICR0aGlzLT5yZXF1ZXN0QXN5bmMoXHN1YnN0cigkbWV0aG9kLCAwLCAtNSksICR1cmksICRvcHRzKQogICAgICAgICAgICA6ICR0aGlzLT5yZXF1ZXN0KCRtZXRob2QsICR1cmksICRvcHRzKTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzeW5jaHJvbm91c2x5IHNlbmQgYW4gSFRUUCByZXF1ZXN0LgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBSZXF1ZXN0IG9wdGlvbnMgdG8gYXBwbHkgdG8gdGhlIGdpdmVuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCBhbmQgdG8gdGhlIHRyYW5zZmVyLiBTZWUgXEd1enpsZUh0dHBcUmVxdWVzdE9wdGlvbnMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZW5kQXN5bmMoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMgPSBbXSk6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICAvLyBNZXJnZSB0aGUgYmFzZSBVUkkgaW50byB0aGUgcmVxdWVzdCBVUkkgaWYgbmVlZGVkLgogICAgICAgICRvcHRpb25zID0gJHRoaXMtPnByZXBhcmVEZWZhdWx0cygkb3B0aW9ucyk7CgogICAgICAgIHJldHVybiAkdGhpcy0+dHJhbnNmZXIoCiAgICAgICAgICAgICRyZXF1ZXN0LT53aXRoVXJpKCR0aGlzLT5idWlsZFVyaSgkcmVxdWVzdC0+Z2V0VXJpKCksICRvcHRpb25zKSwgJHJlcXVlc3QtPmhhc0hlYWRlcignSG9zdCcpKSwKICAgICAgICAgICAgJG9wdGlvbnMKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogU2VuZCBhbiBIVFRQIHJlcXVlc3QuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zIFJlcXVlc3Qgb3B0aW9ucyB0byBhcHBseSB0byB0aGUgZ2l2ZW4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0IGFuZCB0byB0aGUgdHJhbnNmZXIuIFNlZSBcR3V6emxlSHR0cFxSZXF1ZXN0T3B0aW9ucy4KICAgICAqCiAgICAgKiBAdGhyb3dzIEd1enpsZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VuZChSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAkb3B0aW9ucyA9IFtdKTogUmVzcG9uc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICAkb3B0aW9uc1tSZXF1ZXN0T3B0aW9uczo6U1lOQ0hST05PVVNdID0gdHJ1ZTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5zZW5kQXN5bmMoJHJlcXVlc3QsICRvcHRpb25zKS0+d2FpdCgpOwogICAgfQoKICAgIC8qKgogICAgICogVGhlIEh0dHBDbGllbnQgUFNSIChQU1ItMTgpIHNwZWNpZnkgdGhpcyBtZXRob2QuCiAgICAgKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VuZFJlcXVlc3QoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCk6IFJlc3BvbnNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJG9wdGlvbnNbUmVxdWVzdE9wdGlvbnM6OlNZTkNIUk9OT1VTXSA9IHRydWU7CiAgICAgICAgJG9wdGlvbnNbUmVxdWVzdE9wdGlvbnM6OkFMTE9XX1JFRElSRUNUU10gPSBmYWxzZTsKICAgICAgICAkb3B0aW9uc1tSZXF1ZXN0T3B0aW9uczo6SFRUUF9FUlJPUlNdID0gZmFsc2U7CgogICAgICAgIHJldHVybiAkdGhpcy0+c2VuZEFzeW5jKCRyZXF1ZXN0LCAkb3B0aW9ucyktPndhaXQoKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhbmQgc2VuZCBhbiBhc3luY2hyb25vdXMgSFRUUCByZXF1ZXN0LgogICAgICoKICAgICAqIFVzZSBhbiBhYnNvbHV0ZSBwYXRoIHRvIG92ZXJyaWRlIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudCwgb3IgYQogICAgICogcmVsYXRpdmUgcGF0aCB0byBhcHBlbmQgdG8gdGhlIGJhc2UgcGF0aCBvZiB0aGUgY2xpZW50LiBUaGUgVVJMIGNhbgogICAgICogY29udGFpbiB0aGUgcXVlcnkgc3RyaW5nIGFzIHdlbGwuIFVzZSBhbiBhcnJheSB0byBwcm92aWRlIGEgVVJMCiAgICAgKiB0ZW1wbGF0ZSBhbmQgYWRkaXRpb25hbCB2YXJpYWJsZXMgdG8gdXNlIGluIHRoZSBVUkwgdGVtcGxhdGUgZXhwYW5zaW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgICRtZXRob2QgIEhUVFAgbWV0aG9kCiAgICAgKiBAcGFyYW0gc3RyaW5nfFVyaUludGVyZmFjZSAkdXJpICAgICBVUkkgb2JqZWN0IG9yIHN0cmluZy4KICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICAgICRvcHRpb25zIFJlcXVlc3Qgb3B0aW9ucyB0byBhcHBseS4gU2VlIFxHdXp6bGVIdHRwXFJlcXVlc3RPcHRpb25zLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVxdWVzdEFzeW5jKHN0cmluZyAkbWV0aG9kLCAkdXJpID0gJycsIGFycmF5ICRvcHRpb25zID0gW10pOiBQcm9taXNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJG9wdGlvbnMgPSAkdGhpcy0+cHJlcGFyZURlZmF1bHRzKCRvcHRpb25zKTsKICAgICAgICAvLyBSZW1vdmUgcmVxdWVzdCBtb2RpZnlpbmcgcGFyYW1ldGVyIGJlY2F1c2UgaXQgY2FuIGJlIGRvbmUgdXAtZnJvbnQuCiAgICAgICAgJGhlYWRlcnMgPSAkb3B0aW9uc1snaGVhZGVycyddID8/IFtdOwogICAgICAgICRib2R5ID0gJG9wdGlvbnNbJ2JvZHknXSA/PyBudWxsOwogICAgICAgICR2ZXJzaW9uID0gJG9wdGlvbnNbJ3ZlcnNpb24nXSA/PyAnMS4xJzsKICAgICAgICAvLyBNZXJnZSB0aGUgVVJJIGludG8gdGhlIGJhc2UgVVJJLgogICAgICAgICR1cmkgPSAkdGhpcy0+YnVpbGRVcmkoUHNyN1xVdGlsczo6dXJpRm9yKCR1cmkpLCAkb3B0aW9ucyk7CiAgICAgICAgaWYgKFxpc19hcnJheSgkYm9keSkpIHsKICAgICAgICAgICAgdGhyb3cgJHRoaXMtPmludmFsaWRCb2R5KCk7CiAgICAgICAgfQogICAgICAgICRyZXF1ZXN0ID0gbmV3IFBzcjdcUmVxdWVzdCgkbWV0aG9kLCAkdXJpLCAkaGVhZGVycywgJGJvZHksICR2ZXJzaW9uKTsKICAgICAgICAvLyBSZW1vdmUgdGhlIG9wdGlvbiBzbyB0aGF0IHRoZXkgYXJlIG5vdCBkb3VibHktYXBwbGllZC4KICAgICAgICB1bnNldCgkb3B0aW9uc1snaGVhZGVycyddLCAkb3B0aW9uc1snYm9keSddLCAkb3B0aW9uc1sndmVyc2lvbiddKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT50cmFuc2ZlcigkcmVxdWVzdCwgJG9wdGlvbnMpOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGFuZCBzZW5kIGFuIEhUVFAgcmVxdWVzdC4KICAgICAqCiAgICAgKiBVc2UgYW4gYWJzb2x1dGUgcGF0aCB0byBvdmVycmlkZSB0aGUgYmFzZSBwYXRoIG9mIHRoZSBjbGllbnQsIG9yIGEKICAgICAqIHJlbGF0aXZlIHBhdGggdG8gYXBwZW5kIHRvIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudC4gVGhlIFVSTCBjYW4KICAgICAqIGNvbnRhaW4gdGhlIHF1ZXJ5IHN0cmluZyBhcyB3ZWxsLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgICRtZXRob2QgIEhUVFAgbWV0aG9kLgogICAgICogQHBhcmFtIHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSAgICAgVVJJIG9iamVjdCBvciBzdHJpbmcuCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgICAkb3B0aW9ucyBSZXF1ZXN0IG9wdGlvbnMgdG8gYXBwbHkuIFNlZSBcR3V6emxlSHR0cFxSZXF1ZXN0T3B0aW9ucy4KICAgICAqCiAgICAgKiBAdGhyb3dzIEd1enpsZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVxdWVzdChzdHJpbmcgJG1ldGhvZCwgJHVyaSA9ICcnLCBhcnJheSAkb3B0aW9ucyA9IFtdKTogUmVzcG9uc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICAkb3B0aW9uc1tSZXF1ZXN0T3B0aW9uczo6U1lOQ0hST05PVVNdID0gdHJ1ZTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXF1ZXN0QXN5bmMoJG1ldGhvZCwgJHVyaSwgJG9wdGlvbnMpLT53YWl0KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYSBjbGllbnQgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgKgogICAgICogVGhlc2Ugb3B0aW9ucyBpbmNsdWRlIGRlZmF1bHQgcmVxdWVzdCBvcHRpb25zIG9mIHRoZSBjbGllbnQsIGEgImhhbmRsZXIiCiAgICAgKiAoaWYgdXRpbGl6ZWQgYnkgdGhlIGNvbmNyZXRlIGNsaWVudCksIGFuZCBhICJiYXNlX3VyaSIgaWYgdXRpbGl6ZWQgYnkKICAgICAqIHRoZSBjb25jcmV0ZSBjbGllbnQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRvcHRpb24gVGhlIGNvbmZpZyBvcHRpb24gdG8gcmV0cmlldmUuCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICoKICAgICAqIEBkZXByZWNhdGVkIENsaWVudDo6Z2V0Q29uZmlnIHdpbGwgYmUgcmVtb3ZlZCBpbiBndXp6bGVodHRwL2d1enpsZTo4LjAuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb25maWcoP3N0cmluZyAkb3B0aW9uID0gbnVsbCkKICAgIHsKICAgICAgICByZXR1cm4gJG9wdGlvbiA9PT0gbnVsbAogICAgICAgICAgICA/ICR0aGlzLT5jb25maWcKICAgICAgICAgICAgOiAoJHRoaXMtPmNvbmZpZ1skb3B0aW9uXSA/PyBudWxsKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGJ1aWxkVXJpKFVyaUludGVyZmFjZSAkdXJpLCBhcnJheSAkY29uZmlnKTogVXJpSW50ZXJmYWNlCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCRjb25maWdbJ2Jhc2VfdXJpJ10pKSB7CiAgICAgICAgICAgICR1cmkgPSBQc3I3XFVyaVJlc29sdmVyOjpyZXNvbHZlKFBzcjdcVXRpbHM6OnVyaUZvcigkY29uZmlnWydiYXNlX3VyaSddKSwgJHVyaSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJGNvbmZpZ1snaWRuX2NvbnZlcnNpb24nXSkgJiYgKCRjb25maWdbJ2lkbl9jb252ZXJzaW9uJ10gIT09IGZhbHNlKSkgewogICAgICAgICAgICAkaWRuT3B0aW9ucyA9ICgkY29uZmlnWydpZG5fY29udmVyc2lvbiddID09PSB0cnVlKSA/IFxJRE5BX0RFRkFVTFQgOiAkY29uZmlnWydpZG5fY29udmVyc2lvbiddOwogICAgICAgICAgICAkdXJpID0gVXRpbHM6OmlkblVyaUNvbnZlcnQoJHVyaSwgJGlkbk9wdGlvbnMpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR1cmktPmdldFNjaGVtZSgpID09PSAnJyAmJiAkdXJpLT5nZXRIb3N0KCkgIT09ICcnID8gJHVyaS0+d2l0aFNjaGVtZSgnaHR0cCcpIDogJHVyaTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbmZpZ3VyZXMgdGhlIGRlZmF1bHQgb3B0aW9ucyBmb3IgYSBjbGllbnQuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gY29uZmlndXJlRGVmYXVsdHMoYXJyYXkgJGNvbmZpZyk6IHZvaWQKICAgIHsKICAgICAgICAkZGVmYXVsdHMgPSBbCiAgICAgICAgICAgICdhbGxvd19yZWRpcmVjdHMnID0+IFJlZGlyZWN0TWlkZGxld2FyZTo6JGRlZmF1bHRTZXR0aW5ncywKICAgICAgICAgICAgJ2h0dHBfZXJyb3JzJyA9PiB0cnVlLAogICAgICAgICAgICAnZGVjb2RlX2NvbnRlbnQnID0+IHRydWUsCiAgICAgICAgICAgICd2ZXJpZnknID0+IHRydWUsCiAgICAgICAgICAgICdjb29raWVzJyA9PiBmYWxzZSwKICAgICAgICAgICAgJ2lkbl9jb252ZXJzaW9uJyA9PiBmYWxzZSwKICAgICAgICBdOwoKICAgICAgICAvLyBVc2UgdGhlIHN0YW5kYXJkIExpbnV4IEhUVFBfUFJPWFkgYW5kIEhUVFBTX1BST1hZIGlmIHNldC4KCiAgICAgICAgLy8gV2UgY2FuIG9ubHkgdHJ1c3QgdGhlIEhUVFBfUFJPWFkgZW52aXJvbm1lbnQgdmFyaWFibGUgaW4gYSBDTEkKICAgICAgICAvLyBwcm9jZXNzIGR1ZSB0byB0aGUgZmFjdCB0aGF0IFBIUCBoYXMgbm8gcmVsaWFibGUgbWVjaGFuaXNtIHRvCiAgICAgICAgLy8gZ2V0IGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHN0YXJ0IHdpdGggIkhUVFBfIi4KICAgICAgICBpZiAoXFBIUF9TQVBJID09PSAnY2xpJyAmJiAoJHByb3h5ID0gVXRpbHM6OmdldGVudignSFRUUF9QUk9YWScpKSkgewogICAgICAgICAgICAkZGVmYXVsdHNbJ3Byb3h5J11bJ2h0dHAnXSA9ICRwcm94eTsKICAgICAgICB9CgogICAgICAgIGlmICgkcHJveHkgPSBVdGlsczo6Z2V0ZW52KCdIVFRQU19QUk9YWScpKSB7CiAgICAgICAgICAgICRkZWZhdWx0c1sncHJveHknXVsnaHR0cHMnXSA9ICRwcm94eTsKICAgICAgICB9CgogICAgICAgIGlmICgkbm9Qcm94eSA9IFV0aWxzOjpnZXRlbnYoJ05PX1BST1hZJykpIHsKICAgICAgICAgICAgJGNsZWFuZWROb1Byb3h5ID0gXHN0cl9yZXBsYWNlKCcgJywgJycsICRub1Byb3h5KTsKICAgICAgICAgICAgJGRlZmF1bHRzWydwcm94eSddWydubyddID0gXGV4cGxvZGUoJywnLCAkY2xlYW5lZE5vUHJveHkpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmNvbmZpZyA9ICRjb25maWcgKyAkZGVmYXVsdHM7CgogICAgICAgIGlmICghZW1wdHkoJGNvbmZpZ1snY29va2llcyddKSAmJiAkY29uZmlnWydjb29raWVzJ10gPT09IHRydWUpIHsKICAgICAgICAgICAgJHRoaXMtPmNvbmZpZ1snY29va2llcyddID0gbmV3IENvb2tpZUphcigpOwogICAgICAgIH0KCiAgICAgICAgLy8gQWRkIHRoZSBkZWZhdWx0IHVzZXItYWdlbnQgaGVhZGVyLgogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmNvbmZpZ1snaGVhZGVycyddKSkgewogICAgICAgICAgICAkdGhpcy0+Y29uZmlnWydoZWFkZXJzJ10gPSBbJ1VzZXItQWdlbnQnID0+IFV0aWxzOjpkZWZhdWx0VXNlckFnZW50KCldOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIEFkZCB0aGUgVXNlci1BZ2VudCBoZWFkZXIgaWYgb25lIHdhcyBub3QgYWxyZWFkeSBzZXQuCiAgICAgICAgICAgIGZvcmVhY2ggKFxhcnJheV9rZXlzKCR0aGlzLT5jb25maWdbJ2hlYWRlcnMnXSkgYXMgJG5hbWUpIHsKICAgICAgICAgICAgICAgIGlmIChcc3RydG9sb3dlcigkbmFtZSkgPT09ICd1c2VyLWFnZW50JykgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkdGhpcy0+Y29uZmlnWydoZWFkZXJzJ11bJ1VzZXItQWdlbnQnXSA9IFV0aWxzOjpkZWZhdWx0VXNlckFnZW50KCk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogTWVyZ2VzIGRlZmF1bHQgb3B0aW9ucyBpbnRvIHRoZSBhcnJheS4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgT3B0aW9ucyB0byBtb2RpZnkgYnkgcmVmZXJlbmNlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gcHJlcGFyZURlZmF1bHRzKGFycmF5ICRvcHRpb25zKTogYXJyYXkKICAgIHsKICAgICAgICAkZGVmYXVsdHMgPSAkdGhpcy0+Y29uZmlnOwoKICAgICAgICBpZiAoIWVtcHR5KCRkZWZhdWx0c1snaGVhZGVycyddKSkgewogICAgICAgICAgICAvLyBEZWZhdWx0IGhlYWRlcnMgYXJlIG9ubHkgYWRkZWQgaWYgdGhleSBhcmUgbm90IHByZXNlbnQuCiAgICAgICAgICAgICRkZWZhdWx0c1snX2NvbmRpdGlvbmFsJ10gPSAkZGVmYXVsdHNbJ2hlYWRlcnMnXTsKICAgICAgICAgICAgdW5zZXQoJGRlZmF1bHRzWydoZWFkZXJzJ10pOwogICAgICAgIH0KCiAgICAgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgaGVhZGVycyBpcyByZXF1aXJlZCBhcyB0aGV5IGFyZSBhZGRlZCBhcwogICAgICAgIC8vIGNvbmRpdGlvbmFsIGhlYWRlcnMgYW5kIGFzIGhlYWRlcnMgcGFzc2VkIHRvIGEgcmVxdWVzdCBjdG9yLgogICAgICAgIGlmIChcYXJyYXlfa2V5X2V4aXN0cygnaGVhZGVycycsICRvcHRpb25zKSkgewogICAgICAgICAgICAvLyBBbGxvd3MgZGVmYXVsdCBoZWFkZXJzIHRvIGJlIHVuc2V0LgogICAgICAgICAgICBpZiAoJG9wdGlvbnNbJ2hlYWRlcnMnXSA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgJGRlZmF1bHRzWydfY29uZGl0aW9uYWwnXSA9IFtdOwogICAgICAgICAgICAgICAgdW5zZXQoJG9wdGlvbnNbJ2hlYWRlcnMnXSk7CiAgICAgICAgICAgIH0gZWxzZWlmICghXGlzX2FycmF5KCRvcHRpb25zWydoZWFkZXJzJ10pKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdoZWFkZXJzIG11c3QgYmUgYW4gYXJyYXknKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gU2hhbGxvdyBtZXJnZSBkZWZhdWx0cyB1bmRlcm5lYXRoIG9wdGlvbnMuCiAgICAgICAgJHJlc3VsdCA9ICRvcHRpb25zICsgJGRlZmF1bHRzOwoKICAgICAgICAvLyBSZW1vdmUgbnVsbCB2YWx1ZXMuCiAgICAgICAgZm9yZWFjaCAoJHJlc3VsdCBhcyAkayA9PiAkdikgewogICAgICAgICAgICBpZiAoJHYgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHVuc2V0KCRyZXN1bHRbJGtdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBUcmFuc2ZlcnMgdGhlIGdpdmVuIHJlcXVlc3QgYW5kIGFwcGxpZXMgcmVxdWVzdCBvcHRpb25zLgogICAgICoKICAgICAqIFRoZSBVUkkgb2YgdGhlIHJlcXVlc3QgaXMgbm90IG1vZGlmaWVkIGFuZCB0aGUgcmVxdWVzdCBvcHRpb25zIGFyZSB1c2VkCiAgICAgKiBhcy1pcyB3aXRob3V0IG1lcmdpbmcgaW4gZGVmYXVsdCBvcHRpb25zLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBTZWUgXEd1enpsZUh0dHBcUmVxdWVzdE9wdGlvbnMuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gdHJhbnNmZXIoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpOiBQcm9taXNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJHJlcXVlc3QgPSAkdGhpcy0+YXBwbHlPcHRpb25zKCRyZXF1ZXN0LCAkb3B0aW9ucyk7CiAgICAgICAgLyoqIEB2YXIgSGFuZGxlclN0YWNrICRoYW5kbGVyICovCiAgICAgICAgJGhhbmRsZXIgPSAkb3B0aW9uc1snaGFuZGxlciddOwoKICAgICAgICB0cnkgewogICAgICAgICAgICByZXR1cm4gUFxDcmVhdGU6OnByb21pc2VGb3IoJGhhbmRsZXIoJHJlcXVlc3QsICRvcHRpb25zKSk7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICByZXR1cm4gUFxDcmVhdGU6OnJlamVjdGlvbkZvcigkZSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQXBwbGllcyB0aGUgYXJyYXkgb2YgcmVxdWVzdCBvcHRpb25zIHRvIGEgcmVxdWVzdC4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBhcHBseU9wdGlvbnMoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJiRvcHRpb25zKTogUmVxdWVzdEludGVyZmFjZQogICAgewogICAgICAgICRtb2RpZnkgPSBbCiAgICAgICAgICAgICdzZXRfaGVhZGVycycgPT4gW10sCiAgICAgICAgXTsKCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydoZWFkZXJzJ10pKSB7CiAgICAgICAgICAgIGlmIChhcnJheV9rZXlzKCRvcHRpb25zWydoZWFkZXJzJ10pID09PSByYW5nZSgwLCBjb3VudCgkb3B0aW9uc1snaGVhZGVycyddKSAtIDEpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGUgaGVhZGVycyBhcnJheSBtdXN0IGhhdmUgaGVhZGVyIG5hbWUgYXMga2V5cy4nKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkbW9kaWZ5WydzZXRfaGVhZGVycyddID0gJG9wdGlvbnNbJ2hlYWRlcnMnXTsKICAgICAgICAgICAgdW5zZXQoJG9wdGlvbnNbJ2hlYWRlcnMnXSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2Zvcm1fcGFyYW1zJ10pKSB7CiAgICAgICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snbXVsdGlwYXJ0J10pKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdZb3UgY2Fubm90IHVzZSAnCiAgICAgICAgICAgICAgICAgICAgLidmb3JtX3BhcmFtcyBhbmQgbXVsdGlwYXJ0IGF0IHRoZSBzYW1lIHRpbWUuIFVzZSB0aGUgJwogICAgICAgICAgICAgICAgICAgIC4nZm9ybV9wYXJhbXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHNlbmQgYXBwbGljYXRpb24vJwogICAgICAgICAgICAgICAgICAgIC4neC13d3ctZm9ybS11cmxlbmNvZGVkIHJlcXVlc3RzLCBhbmQgdGhlIG11bHRpcGFydCAnCiAgICAgICAgICAgICAgICAgICAgLidvcHRpb24gdG8gc2VuZCBtdWx0aXBhcnQvZm9ybS1kYXRhIHJlcXVlc3RzLicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRvcHRpb25zWydib2R5J10gPSBcaHR0cF9idWlsZF9xdWVyeSgkb3B0aW9uc1snZm9ybV9wYXJhbXMnXSwgJycsICcmJyk7CiAgICAgICAgICAgIHVuc2V0KCRvcHRpb25zWydmb3JtX3BhcmFtcyddKTsKICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0aGUgaGVhZGVyIGluIGRpZmZlcmVudCBjYXNlIGFuZCBzZXQgdGhlIG5ldyB2YWx1ZS4KICAgICAgICAgICAgJG9wdGlvbnNbJ19jb25kaXRpb25hbCddID0gUHNyN1xVdGlsczo6Y2FzZWxlc3NSZW1vdmUoWydDb250ZW50LVR5cGUnXSwgJG9wdGlvbnNbJ19jb25kaXRpb25hbCddKTsKICAgICAgICAgICAgJG9wdGlvbnNbJ19jb25kaXRpb25hbCddWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydtdWx0aXBhcnQnXSkpIHsKICAgICAgICAgICAgJG9wdGlvbnNbJ2JvZHknXSA9IG5ldyBQc3I3XE11bHRpcGFydFN0cmVhbSgkb3B0aW9uc1snbXVsdGlwYXJ0J10pOwogICAgICAgICAgICB1bnNldCgkb3B0aW9uc1snbXVsdGlwYXJ0J10pOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydqc29uJ10pKSB7CiAgICAgICAgICAgICRvcHRpb25zWydib2R5J10gPSBVdGlsczo6anNvbkVuY29kZSgkb3B0aW9uc1snanNvbiddKTsKICAgICAgICAgICAgdW5zZXQoJG9wdGlvbnNbJ2pzb24nXSk7CiAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHdlIGRvbid0IGhhdmUgdGhlIGhlYWRlciBpbiBkaWZmZXJlbnQgY2FzZSBhbmQgc2V0IHRoZSBuZXcgdmFsdWUuCiAgICAgICAgICAgICRvcHRpb25zWydfY29uZGl0aW9uYWwnXSA9IFBzcjdcVXRpbHM6OmNhc2VsZXNzUmVtb3ZlKFsnQ29udGVudC1UeXBlJ10sICRvcHRpb25zWydfY29uZGl0aW9uYWwnXSk7CiAgICAgICAgICAgICRvcHRpb25zWydfY29uZGl0aW9uYWwnXVsnQ29udGVudC1UeXBlJ10gPSAnYXBwbGljYXRpb24vanNvbic7CiAgICAgICAgfQoKICAgICAgICBpZiAoIWVtcHR5KCRvcHRpb25zWydkZWNvZGVfY29udGVudCddKQogICAgICAgICAgICAmJiAkb3B0aW9uc1snZGVjb2RlX2NvbnRlbnQnXSAhPT0gdHJ1ZQogICAgICAgICkgewogICAgICAgICAgICAvLyBFbnN1cmUgdGhhdCB3ZSBkb24ndCBoYXZlIHRoZSBoZWFkZXIgaW4gZGlmZmVyZW50IGNhc2UgYW5kIHNldCB0aGUgbmV3IHZhbHVlLgogICAgICAgICAgICAkb3B0aW9uc1snX2NvbmRpdGlvbmFsJ10gPSBQc3I3XFV0aWxzOjpjYXNlbGVzc1JlbW92ZShbJ0FjY2VwdC1FbmNvZGluZyddLCAkb3B0aW9uc1snX2NvbmRpdGlvbmFsJ10pOwogICAgICAgICAgICAkbW9kaWZ5WydzZXRfaGVhZGVycyddWydBY2NlcHQtRW5jb2RpbmcnXSA9ICRvcHRpb25zWydkZWNvZGVfY29udGVudCddOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydib2R5J10pKSB7CiAgICAgICAgICAgIGlmIChcaXNfYXJyYXkoJG9wdGlvbnNbJ2JvZHknXSkpIHsKICAgICAgICAgICAgICAgIHRocm93ICR0aGlzLT5pbnZhbGlkQm9keSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRtb2RpZnlbJ2JvZHknXSA9IFBzcjdcVXRpbHM6OnN0cmVhbUZvcigkb3B0aW9uc1snYm9keSddKTsKICAgICAgICAgICAgdW5zZXQoJG9wdGlvbnNbJ2JvZHknXSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIWVtcHR5KCRvcHRpb25zWydhdXRoJ10pICYmIFxpc19hcnJheSgkb3B0aW9uc1snYXV0aCddKSkgewogICAgICAgICAgICAkdmFsdWUgPSAkb3B0aW9uc1snYXV0aCddOwogICAgICAgICAgICAkdHlwZSA9IGlzc2V0KCR2YWx1ZVsyXSkgPyBcc3RydG9sb3dlcigkdmFsdWVbMl0pIDogJ2Jhc2ljJzsKICAgICAgICAgICAgc3dpdGNoICgkdHlwZSkgewogICAgICAgICAgICAgICAgY2FzZSAnYmFzaWMnOgogICAgICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHdlIGRvbid0IGhhdmUgdGhlIGhlYWRlciBpbiBkaWZmZXJlbnQgY2FzZSBhbmQgc2V0IHRoZSBuZXcgdmFsdWUuCiAgICAgICAgICAgICAgICAgICAgJG1vZGlmeVsnc2V0X2hlYWRlcnMnXSA9IFBzcjdcVXRpbHM6OmNhc2VsZXNzUmVtb3ZlKFsnQXV0aG9yaXphdGlvbiddLCAkbW9kaWZ5WydzZXRfaGVhZGVycyddKTsKICAgICAgICAgICAgICAgICAgICAkbW9kaWZ5WydzZXRfaGVhZGVycyddWydBdXRob3JpemF0aW9uJ10gPSAnQmFzaWMgJwogICAgICAgICAgICAgICAgICAgICAgICAuXGJhc2U2NF9lbmNvZGUoIiR2YWx1ZVswXTokdmFsdWVbMV0iKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2RpZ2VzdCc6CiAgICAgICAgICAgICAgICAgICAgLy8gQHRvZG86IERvIG5vdCByZWx5IG9uIGN1cmwKICAgICAgICAgICAgICAgICAgICAkb3B0aW9uc1snY3VybCddW1xDVVJMT1BUX0hUVFBBVVRIXSA9IFxDVVJMQVVUSF9ESUdFU1Q7CiAgICAgICAgICAgICAgICAgICAgJG9wdGlvbnNbJ2N1cmwnXVtcQ1VSTE9QVF9VU0VSUFdEXSA9ICIkdmFsdWVbMF06JHZhbHVlWzFdIjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ250bG0nOgogICAgICAgICAgICAgICAgICAgICRvcHRpb25zWydjdXJsJ11bXENVUkxPUFRfSFRUUEFVVEhdID0gXENVUkxBVVRIX05UTE07CiAgICAgICAgICAgICAgICAgICAgJG9wdGlvbnNbJ2N1cmwnXVtcQ1VSTE9QVF9VU0VSUFdEXSA9ICIkdmFsdWVbMF06JHZhbHVlWzFdIjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydxdWVyeSddKSkgewogICAgICAgICAgICAkdmFsdWUgPSAkb3B0aW9uc1sncXVlcnknXTsKICAgICAgICAgICAgaWYgKFxpc19hcnJheSgkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAkdmFsdWUgPSBcaHR0cF9idWlsZF9xdWVyeSgkdmFsdWUsICcnLCAnJicsIFxQSFBfUVVFUllfUkZDMzk4Nik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFcaXNfc3RyaW5nKCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ3F1ZXJ5IG11c3QgYmUgYSBzdHJpbmcgb3IgYXJyYXknKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkbW9kaWZ5WydxdWVyeSddID0gJHZhbHVlOwogICAgICAgICAgICB1bnNldCgkb3B0aW9uc1sncXVlcnknXSk7CiAgICAgICAgfQoKICAgICAgICAvLyBFbnN1cmUgdGhhdCBzaW5rIGlzIG5vdCBhbiBpbnZhbGlkIHZhbHVlLgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snc2luayddKSkgewogICAgICAgICAgICAvLyBUT0RPOiBBZGQgbW9yZSBzaW5rIHZhbGlkYXRpb24/CiAgICAgICAgICAgIGlmIChcaXNfYm9vbCgkb3B0aW9uc1snc2luayddKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignc2luayBtdXN0IG5vdCBiZSBhIGJvb2xlYW4nKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWyd2ZXJzaW9uJ10pKSB7CiAgICAgICAgICAgICRtb2RpZnlbJ3ZlcnNpb24nXSA9ICRvcHRpb25zWyd2ZXJzaW9uJ107CiAgICAgICAgfQoKICAgICAgICAkcmVxdWVzdCA9IFBzcjdcVXRpbHM6Om1vZGlmeVJlcXVlc3QoJHJlcXVlc3QsICRtb2RpZnkpOwogICAgICAgIGlmICgkcmVxdWVzdC0+Z2V0Qm9keSgpIGluc3RhbmNlb2YgUHNyN1xNdWx0aXBhcnRTdHJlYW0pIHsKICAgICAgICAgICAgLy8gVXNlIGEgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBQT1NUIGlmIGEgQ29udGVudC1UeXBlIGlzIG5vdCBzZXQuCiAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHdlIGRvbid0IGhhdmUgdGhlIGhlYWRlciBpbiBkaWZmZXJlbnQgY2FzZSBhbmQgc2V0IHRoZSBuZXcgdmFsdWUuCiAgICAgICAgICAgICRvcHRpb25zWydfY29uZGl0aW9uYWwnXSA9IFBzcjdcVXRpbHM6OmNhc2VsZXNzUmVtb3ZlKFsnQ29udGVudC1UeXBlJ10sICRvcHRpb25zWydfY29uZGl0aW9uYWwnXSk7CiAgICAgICAgICAgICRvcHRpb25zWydfY29uZGl0aW9uYWwnXVsnQ29udGVudC1UeXBlJ10gPSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JwogICAgICAgICAgICAgICAgLiRyZXF1ZXN0LT5nZXRCb2R5KCktPmdldEJvdW5kYXJ5KCk7CiAgICAgICAgfQoKICAgICAgICAvLyBNZXJnZSBpbiBjb25kaXRpb25hbCBoZWFkZXJzIGlmIHRoZXkgYXJlIG5vdCBwcmVzZW50LgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snX2NvbmRpdGlvbmFsJ10pKSB7CiAgICAgICAgICAgIC8vIEJ1aWxkIHVwIHRoZSBjaGFuZ2VzIHNvIGl0J3MgaW4gYSBzaW5nbGUgY2xvbmUgb2YgdGhlIG1lc3NhZ2UuCiAgICAgICAgICAgICRtb2RpZnkgPSBbXTsKICAgICAgICAgICAgZm9yZWFjaCAoJG9wdGlvbnNbJ19jb25kaXRpb25hbCddIGFzICRrID0+ICR2KSB7CiAgICAgICAgICAgICAgICBpZiAoISRyZXF1ZXN0LT5oYXNIZWFkZXIoJGspKSB7CiAgICAgICAgICAgICAgICAgICAgJG1vZGlmeVsnc2V0X2hlYWRlcnMnXVska10gPSAkdjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkcmVxdWVzdCA9IFBzcjdcVXRpbHM6Om1vZGlmeVJlcXVlc3QoJHJlcXVlc3QsICRtb2RpZnkpOwogICAgICAgICAgICAvLyBEb24ndCBwYXNzIHRoaXMgaW50ZXJuYWwgdmFsdWUgYWxvbmcgdG8gbWlkZGxld2FyZS9oYW5kbGVycy4KICAgICAgICAgICAgdW5zZXQoJG9wdGlvbnNbJ19jb25kaXRpb25hbCddKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVxdWVzdDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiBhbiBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gd2l0aCBwcmUtc2V0IG1lc3NhZ2UuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gaW52YWxpZEJvZHkoKTogSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1Bhc3NpbmcgaW4gdGhlICJib2R5IiByZXF1ZXN0ICcKICAgICAgICAgICAgLidvcHRpb24gYXMgYW4gYXJyYXkgdG8gc2VuZCBhIHJlcXVlc3QgaXMgbm90IHN1cHBvcnRlZC4gJwogICAgICAgICAgICAuJ1BsZWFzZSB1c2UgdGhlICJmb3JtX3BhcmFtcyIgcmVxdWVzdCBvcHRpb24gdG8gc2VuZCBhICcKICAgICAgICAgICAgLidhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgcmVxdWVzdCwgb3IgdGhlICJtdWx0aXBhcnQiICcKICAgICAgICAgICAgLidyZXF1ZXN0IG9wdGlvbiB0byBzZW5kIGEgbXVsdGlwYXJ0L2Zvcm0tZGF0YSByZXF1ZXN0LicpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/ClientInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIEd1enpsZUh0dHBcRXhjZXB0aW9uXEd1enpsZUV4Y2VwdGlvbjsKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlOwoKLyoqCiAqIENsaWVudCBpbnRlcmZhY2UgZm9yIHNlbmRpbmcgSFRUUCByZXF1ZXN0cy4KICovCmludGVyZmFjZSBDbGllbnRJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBUaGUgR3V6emxlIG1ham9yIHZlcnNpb24uCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBNQUpPUl9WRVJTSU9OID0gNzsKCiAgICAvKioKICAgICAqIFNlbmQgYW4gSFRUUCByZXF1ZXN0LgogICAgICoKICAgICAqIEBwYXJhbSBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0IFJlcXVlc3QgdG8gc2VuZAogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgJG9wdGlvbnMgUmVxdWVzdCBvcHRpb25zIHRvIGFwcGx5IHRvIHRoZSBnaXZlbgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCBhbmQgdG8gdGhlIHRyYW5zZmVyLgogICAgICoKICAgICAqIEB0aHJvd3MgR3V6emxlRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZW5kKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zID0gW10pOiBSZXNwb25zZUludGVyZmFjZTsKCiAgICAvKioKICAgICAqIEFzeW5jaHJvbm91c2x5IHNlbmQgYW4gSFRUUCByZXF1ZXN0LgogICAgICoKICAgICAqIEBwYXJhbSBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0IFJlcXVlc3QgdG8gc2VuZAogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgJG9wdGlvbnMgUmVxdWVzdCBvcHRpb25zIHRvIGFwcGx5IHRvIHRoZSBnaXZlbgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCBhbmQgdG8gdGhlIHRyYW5zZmVyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VuZEFzeW5jKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zID0gW10pOiBQcm9taXNlSW50ZXJmYWNlOwoKICAgIC8qKgogICAgICogQ3JlYXRlIGFuZCBzZW5kIGFuIEhUVFAgcmVxdWVzdC4KICAgICAqCiAgICAgKiBVc2UgYW4gYWJzb2x1dGUgcGF0aCB0byBvdmVycmlkZSB0aGUgYmFzZSBwYXRoIG9mIHRoZSBjbGllbnQsIG9yIGEKICAgICAqIHJlbGF0aXZlIHBhdGggdG8gYXBwZW5kIHRvIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudC4gVGhlIFVSTCBjYW4KICAgICAqIGNvbnRhaW4gdGhlIHF1ZXJ5IHN0cmluZyBhcyB3ZWxsLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgICRtZXRob2QgIEhUVFAgbWV0aG9kLgogICAgICogQHBhcmFtIHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSAgICAgVVJJIG9iamVjdCBvciBzdHJpbmcuCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgICAkb3B0aW9ucyBSZXF1ZXN0IG9wdGlvbnMgdG8gYXBwbHkuCiAgICAgKgogICAgICogQHRocm93cyBHdXp6bGVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlcXVlc3Qoc3RyaW5nICRtZXRob2QsICR1cmksIGFycmF5ICRvcHRpb25zID0gW10pOiBSZXNwb25zZUludGVyZmFjZTsKCiAgICAvKioKICAgICAqIENyZWF0ZSBhbmQgc2VuZCBhbiBhc3luY2hyb25vdXMgSFRUUCByZXF1ZXN0LgogICAgICoKICAgICAqIFVzZSBhbiBhYnNvbHV0ZSBwYXRoIHRvIG92ZXJyaWRlIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudCwgb3IgYQogICAgICogcmVsYXRpdmUgcGF0aCB0byBhcHBlbmQgdG8gdGhlIGJhc2UgcGF0aCBvZiB0aGUgY2xpZW50LiBUaGUgVVJMIGNhbgogICAgICogY29udGFpbiB0aGUgcXVlcnkgc3RyaW5nIGFzIHdlbGwuIFVzZSBhbiBhcnJheSB0byBwcm92aWRlIGEgVVJMCiAgICAgKiB0ZW1wbGF0ZSBhbmQgYWRkaXRpb25hbCB2YXJpYWJsZXMgdG8gdXNlIGluIHRoZSBVUkwgdGVtcGxhdGUgZXhwYW5zaW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgICRtZXRob2QgIEhUVFAgbWV0aG9kCiAgICAgKiBAcGFyYW0gc3RyaW5nfFVyaUludGVyZmFjZSAkdXJpICAgICBVUkkgb2JqZWN0IG9yIHN0cmluZy4KICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICAgICRvcHRpb25zIFJlcXVlc3Qgb3B0aW9ucyB0byBhcHBseS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlcXVlc3RBc3luYyhzdHJpbmcgJG1ldGhvZCwgJHVyaSwgYXJyYXkgJG9wdGlvbnMgPSBbXSk6IFByb21pc2VJbnRlcmZhY2U7CgogICAgLyoqCiAgICAgKiBHZXQgYSBjbGllbnQgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgKgogICAgICogVGhlc2Ugb3B0aW9ucyBpbmNsdWRlIGRlZmF1bHQgcmVxdWVzdCBvcHRpb25zIG9mIHRoZSBjbGllbnQsIGEgImhhbmRsZXIiCiAgICAgKiAoaWYgdXRpbGl6ZWQgYnkgdGhlIGNvbmNyZXRlIGNsaWVudCksIGFuZCBhICJiYXNlX3VyaSIgaWYgdXRpbGl6ZWQgYnkKICAgICAqIHRoZSBjb25jcmV0ZSBjbGllbnQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRvcHRpb24gVGhlIGNvbmZpZyBvcHRpb24gdG8gcmV0cmlldmUuCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICoKICAgICAqIEBkZXByZWNhdGVkIENsaWVudEludGVyZmFjZTo6Z2V0Q29uZmlnIHdpbGwgYmUgcmVtb3ZlZCBpbiBndXp6bGVodHRwL2d1enpsZTo4LjAuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb25maWcoP3N0cmluZyAkb3B0aW9uID0gbnVsbCk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/ClientTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIEd1enpsZUh0dHBcRXhjZXB0aW9uXEd1enpsZUV4Y2VwdGlvbjsKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlOwoKLyoqCiAqIENsaWVudCBpbnRlcmZhY2UgZm9yIHNlbmRpbmcgSFRUUCByZXF1ZXN0cy4KICovCnRyYWl0IENsaWVudFRyYWl0CnsKICAgIC8qKgogICAgICogQ3JlYXRlIGFuZCBzZW5kIGFuIEhUVFAgcmVxdWVzdC4KICAgICAqCiAgICAgKiBVc2UgYW4gYWJzb2x1dGUgcGF0aCB0byBvdmVycmlkZSB0aGUgYmFzZSBwYXRoIG9mIHRoZSBjbGllbnQsIG9yIGEKICAgICAqIHJlbGF0aXZlIHBhdGggdG8gYXBwZW5kIHRvIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudC4gVGhlIFVSTCBjYW4KICAgICAqIGNvbnRhaW4gdGhlIHF1ZXJ5IHN0cmluZyBhcyB3ZWxsLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgICRtZXRob2QgIEhUVFAgbWV0aG9kLgogICAgICogQHBhcmFtIHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSAgICAgVVJJIG9iamVjdCBvciBzdHJpbmcuCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgICAkb3B0aW9ucyBSZXF1ZXN0IG9wdGlvbnMgdG8gYXBwbHkuCiAgICAgKgogICAgICogQHRocm93cyBHdXp6bGVFeGNlcHRpb24KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIHJlcXVlc3Qoc3RyaW5nICRtZXRob2QsICR1cmksIGFycmF5ICRvcHRpb25zID0gW10pOiBSZXNwb25zZUludGVyZmFjZTsKCiAgICAvKioKICAgICAqIENyZWF0ZSBhbmQgc2VuZCBhbiBIVFRQIEdFVCByZXF1ZXN0LgogICAgICoKICAgICAqIFVzZSBhbiBhYnNvbHV0ZSBwYXRoIHRvIG92ZXJyaWRlIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudCwgb3IgYQogICAgICogcmVsYXRpdmUgcGF0aCB0byBhcHBlbmQgdG8gdGhlIGJhc2UgcGF0aCBvZiB0aGUgY2xpZW50LiBUaGUgVVJMIGNhbgogICAgICogY29udGFpbiB0aGUgcXVlcnkgc3RyaW5nIGFzIHdlbGwuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSAgICAgVVJJIG9iamVjdCBvciBzdHJpbmcuCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgICAkb3B0aW9ucyBSZXF1ZXN0IG9wdGlvbnMgdG8gYXBwbHkuCiAgICAgKgogICAgICogQHRocm93cyBHdXp6bGVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldCgkdXJpLCBhcnJheSAkb3B0aW9ucyA9IFtdKTogUmVzcG9uc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlcXVlc3QoJ0dFVCcsICR1cmksICRvcHRpb25zKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhbmQgc2VuZCBhbiBIVFRQIEhFQUQgcmVxdWVzdC4KICAgICAqCiAgICAgKiBVc2UgYW4gYWJzb2x1dGUgcGF0aCB0byBvdmVycmlkZSB0aGUgYmFzZSBwYXRoIG9mIHRoZSBjbGllbnQsIG9yIGEKICAgICAqIHJlbGF0aXZlIHBhdGggdG8gYXBwZW5kIHRvIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudC4gVGhlIFVSTCBjYW4KICAgICAqIGNvbnRhaW4gdGhlIHF1ZXJ5IHN0cmluZyBhcyB3ZWxsLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8VXJpSW50ZXJmYWNlICR1cmkgICAgIFVSSSBvYmplY3Qgb3Igc3RyaW5nLgogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgICAgJG9wdGlvbnMgUmVxdWVzdCBvcHRpb25zIHRvIGFwcGx5LgogICAgICoKICAgICAqIEB0aHJvd3MgR3V6emxlRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoZWFkKCR1cmksIGFycmF5ICRvcHRpb25zID0gW10pOiBSZXNwb25zZUludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVxdWVzdCgnSEVBRCcsICR1cmksICRvcHRpb25zKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhbmQgc2VuZCBhbiBIVFRQIFBVVCByZXF1ZXN0LgogICAgICoKICAgICAqIFVzZSBhbiBhYnNvbHV0ZSBwYXRoIHRvIG92ZXJyaWRlIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudCwgb3IgYQogICAgICogcmVsYXRpdmUgcGF0aCB0byBhcHBlbmQgdG8gdGhlIGJhc2UgcGF0aCBvZiB0aGUgY2xpZW50LiBUaGUgVVJMIGNhbgogICAgICogY29udGFpbiB0aGUgcXVlcnkgc3RyaW5nIGFzIHdlbGwuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSAgICAgVVJJIG9iamVjdCBvciBzdHJpbmcuCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgICAkb3B0aW9ucyBSZXF1ZXN0IG9wdGlvbnMgdG8gYXBwbHkuCiAgICAgKgogICAgICogQHRocm93cyBHdXp6bGVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHB1dCgkdXJpLCBhcnJheSAkb3B0aW9ucyA9IFtdKTogUmVzcG9uc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlcXVlc3QoJ1BVVCcsICR1cmksICRvcHRpb25zKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhbmQgc2VuZCBhbiBIVFRQIFBPU1QgcmVxdWVzdC4KICAgICAqCiAgICAgKiBVc2UgYW4gYWJzb2x1dGUgcGF0aCB0byBvdmVycmlkZSB0aGUgYmFzZSBwYXRoIG9mIHRoZSBjbGllbnQsIG9yIGEKICAgICAqIHJlbGF0aXZlIHBhdGggdG8gYXBwZW5kIHRvIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudC4gVGhlIFVSTCBjYW4KICAgICAqIGNvbnRhaW4gdGhlIHF1ZXJ5IHN0cmluZyBhcyB3ZWxsLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8VXJpSW50ZXJmYWNlICR1cmkgICAgIFVSSSBvYmplY3Qgb3Igc3RyaW5nLgogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgICAgJG9wdGlvbnMgUmVxdWVzdCBvcHRpb25zIHRvIGFwcGx5LgogICAgICoKICAgICAqIEB0aHJvd3MgR3V6emxlRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwb3N0KCR1cmksIGFycmF5ICRvcHRpb25zID0gW10pOiBSZXNwb25zZUludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVxdWVzdCgnUE9TVCcsICR1cmksICRvcHRpb25zKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhbmQgc2VuZCBhbiBIVFRQIFBBVENIIHJlcXVlc3QuCiAgICAgKgogICAgICogVXNlIGFuIGFic29sdXRlIHBhdGggdG8gb3ZlcnJpZGUgdGhlIGJhc2UgcGF0aCBvZiB0aGUgY2xpZW50LCBvciBhCiAgICAgKiByZWxhdGl2ZSBwYXRoIHRvIGFwcGVuZCB0byB0aGUgYmFzZSBwYXRoIG9mIHRoZSBjbGllbnQuIFRoZSBVUkwgY2FuCiAgICAgKiBjb250YWluIHRoZSBxdWVyeSBzdHJpbmcgYXMgd2VsbC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfFVyaUludGVyZmFjZSAkdXJpICAgICBVUkkgb2JqZWN0IG9yIHN0cmluZy4KICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICAgICRvcHRpb25zIFJlcXVlc3Qgb3B0aW9ucyB0byBhcHBseS4KICAgICAqCiAgICAgKiBAdGhyb3dzIEd1enpsZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGF0Y2goJHVyaSwgYXJyYXkgJG9wdGlvbnMgPSBbXSk6IFJlc3BvbnNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXF1ZXN0KCdQQVRDSCcsICR1cmksICRvcHRpb25zKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhbmQgc2VuZCBhbiBIVFRQIERFTEVURSByZXF1ZXN0LgogICAgICoKICAgICAqIFVzZSBhbiBhYnNvbHV0ZSBwYXRoIHRvIG92ZXJyaWRlIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudCwgb3IgYQogICAgICogcmVsYXRpdmUgcGF0aCB0byBhcHBlbmQgdG8gdGhlIGJhc2UgcGF0aCBvZiB0aGUgY2xpZW50LiBUaGUgVVJMIGNhbgogICAgICogY29udGFpbiB0aGUgcXVlcnkgc3RyaW5nIGFzIHdlbGwuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSAgICAgVVJJIG9iamVjdCBvciBzdHJpbmcuCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgICAkb3B0aW9ucyBSZXF1ZXN0IG9wdGlvbnMgdG8gYXBwbHkuCiAgICAgKgogICAgICogQHRocm93cyBHdXp6bGVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlbGV0ZSgkdXJpLCBhcnJheSAkb3B0aW9ucyA9IFtdKTogUmVzcG9uc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlcXVlc3QoJ0RFTEVURScsICR1cmksICRvcHRpb25zKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhbmQgc2VuZCBhbiBhc3luY2hyb25vdXMgSFRUUCByZXF1ZXN0LgogICAgICoKICAgICAqIFVzZSBhbiBhYnNvbHV0ZSBwYXRoIHRvIG92ZXJyaWRlIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudCwgb3IgYQogICAgICogcmVsYXRpdmUgcGF0aCB0byBhcHBlbmQgdG8gdGhlIGJhc2UgcGF0aCBvZiB0aGUgY2xpZW50LiBUaGUgVVJMIGNhbgogICAgICogY29udGFpbiB0aGUgcXVlcnkgc3RyaW5nIGFzIHdlbGwuIFVzZSBhbiBhcnJheSB0byBwcm92aWRlIGEgVVJMCiAgICAgKiB0ZW1wbGF0ZSBhbmQgYWRkaXRpb25hbCB2YXJpYWJsZXMgdG8gdXNlIGluIHRoZSBVUkwgdGVtcGxhdGUgZXhwYW5zaW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgICRtZXRob2QgIEhUVFAgbWV0aG9kCiAgICAgKiBAcGFyYW0gc3RyaW5nfFVyaUludGVyZmFjZSAkdXJpICAgICBVUkkgb2JqZWN0IG9yIHN0cmluZy4KICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICAgICRvcHRpb25zIFJlcXVlc3Qgb3B0aW9ucyB0byBhcHBseS4KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIHJlcXVlc3RBc3luYyhzdHJpbmcgJG1ldGhvZCwgJHVyaSwgYXJyYXkgJG9wdGlvbnMgPSBbXSk6IFByb21pc2VJbnRlcmZhY2U7CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYW5kIHNlbmQgYW4gYXN5bmNocm9ub3VzIEhUVFAgR0VUIHJlcXVlc3QuCiAgICAgKgogICAgICogVXNlIGFuIGFic29sdXRlIHBhdGggdG8gb3ZlcnJpZGUgdGhlIGJhc2UgcGF0aCBvZiB0aGUgY2xpZW50LCBvciBhCiAgICAgKiByZWxhdGl2ZSBwYXRoIHRvIGFwcGVuZCB0byB0aGUgYmFzZSBwYXRoIG9mIHRoZSBjbGllbnQuIFRoZSBVUkwgY2FuCiAgICAgKiBjb250YWluIHRoZSBxdWVyeSBzdHJpbmcgYXMgd2VsbC4gVXNlIGFuIGFycmF5IHRvIHByb3ZpZGUgYSBVUkwKICAgICAqIHRlbXBsYXRlIGFuZCBhZGRpdGlvbmFsIHZhcmlhYmxlcyB0byB1c2UgaW4gdGhlIFVSTCB0ZW1wbGF0ZSBleHBhbnNpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSAgICAgVVJJIG9iamVjdCBvciBzdHJpbmcuCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgICAkb3B0aW9ucyBSZXF1ZXN0IG9wdGlvbnMgdG8gYXBwbHkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBc3luYygkdXJpLCBhcnJheSAkb3B0aW9ucyA9IFtdKTogUHJvbWlzZUludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVxdWVzdEFzeW5jKCdHRVQnLCAkdXJpLCAkb3B0aW9ucyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYW5kIHNlbmQgYW4gYXN5bmNocm9ub3VzIEhUVFAgSEVBRCByZXF1ZXN0LgogICAgICoKICAgICAqIFVzZSBhbiBhYnNvbHV0ZSBwYXRoIHRvIG92ZXJyaWRlIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudCwgb3IgYQogICAgICogcmVsYXRpdmUgcGF0aCB0byBhcHBlbmQgdG8gdGhlIGJhc2UgcGF0aCBvZiB0aGUgY2xpZW50LiBUaGUgVVJMIGNhbgogICAgICogY29udGFpbiB0aGUgcXVlcnkgc3RyaW5nIGFzIHdlbGwuIFVzZSBhbiBhcnJheSB0byBwcm92aWRlIGEgVVJMCiAgICAgKiB0ZW1wbGF0ZSBhbmQgYWRkaXRpb25hbCB2YXJpYWJsZXMgdG8gdXNlIGluIHRoZSBVUkwgdGVtcGxhdGUgZXhwYW5zaW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8VXJpSW50ZXJmYWNlICR1cmkgICAgIFVSSSBvYmplY3Qgb3Igc3RyaW5nLgogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgICAgJG9wdGlvbnMgUmVxdWVzdCBvcHRpb25zIHRvIGFwcGx5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGVhZEFzeW5jKCR1cmksIGFycmF5ICRvcHRpb25zID0gW10pOiBQcm9taXNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXF1ZXN0QXN5bmMoJ0hFQUQnLCAkdXJpLCAkb3B0aW9ucyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYW5kIHNlbmQgYW4gYXN5bmNocm9ub3VzIEhUVFAgUFVUIHJlcXVlc3QuCiAgICAgKgogICAgICogVXNlIGFuIGFic29sdXRlIHBhdGggdG8gb3ZlcnJpZGUgdGhlIGJhc2UgcGF0aCBvZiB0aGUgY2xpZW50LCBvciBhCiAgICAgKiByZWxhdGl2ZSBwYXRoIHRvIGFwcGVuZCB0byB0aGUgYmFzZSBwYXRoIG9mIHRoZSBjbGllbnQuIFRoZSBVUkwgY2FuCiAgICAgKiBjb250YWluIHRoZSBxdWVyeSBzdHJpbmcgYXMgd2VsbC4gVXNlIGFuIGFycmF5IHRvIHByb3ZpZGUgYSBVUkwKICAgICAqIHRlbXBsYXRlIGFuZCBhZGRpdGlvbmFsIHZhcmlhYmxlcyB0byB1c2UgaW4gdGhlIFVSTCB0ZW1wbGF0ZSBleHBhbnNpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSAgICAgVVJJIG9iamVjdCBvciBzdHJpbmcuCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgICAkb3B0aW9ucyBSZXF1ZXN0IG9wdGlvbnMgdG8gYXBwbHkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwdXRBc3luYygkdXJpLCBhcnJheSAkb3B0aW9ucyA9IFtdKTogUHJvbWlzZUludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVxdWVzdEFzeW5jKCdQVVQnLCAkdXJpLCAkb3B0aW9ucyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYW5kIHNlbmQgYW4gYXN5bmNocm9ub3VzIEhUVFAgUE9TVCByZXF1ZXN0LgogICAgICoKICAgICAqIFVzZSBhbiBhYnNvbHV0ZSBwYXRoIHRvIG92ZXJyaWRlIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudCwgb3IgYQogICAgICogcmVsYXRpdmUgcGF0aCB0byBhcHBlbmQgdG8gdGhlIGJhc2UgcGF0aCBvZiB0aGUgY2xpZW50LiBUaGUgVVJMIGNhbgogICAgICogY29udGFpbiB0aGUgcXVlcnkgc3RyaW5nIGFzIHdlbGwuIFVzZSBhbiBhcnJheSB0byBwcm92aWRlIGEgVVJMCiAgICAgKiB0ZW1wbGF0ZSBhbmQgYWRkaXRpb25hbCB2YXJpYWJsZXMgdG8gdXNlIGluIHRoZSBVUkwgdGVtcGxhdGUgZXhwYW5zaW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8VXJpSW50ZXJmYWNlICR1cmkgICAgIFVSSSBvYmplY3Qgb3Igc3RyaW5nLgogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgICAgJG9wdGlvbnMgUmVxdWVzdCBvcHRpb25zIHRvIGFwcGx5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcG9zdEFzeW5jKCR1cmksIGFycmF5ICRvcHRpb25zID0gW10pOiBQcm9taXNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXF1ZXN0QXN5bmMoJ1BPU1QnLCAkdXJpLCAkb3B0aW9ucyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYW5kIHNlbmQgYW4gYXN5bmNocm9ub3VzIEhUVFAgUEFUQ0ggcmVxdWVzdC4KICAgICAqCiAgICAgKiBVc2UgYW4gYWJzb2x1dGUgcGF0aCB0byBvdmVycmlkZSB0aGUgYmFzZSBwYXRoIG9mIHRoZSBjbGllbnQsIG9yIGEKICAgICAqIHJlbGF0aXZlIHBhdGggdG8gYXBwZW5kIHRvIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudC4gVGhlIFVSTCBjYW4KICAgICAqIGNvbnRhaW4gdGhlIHF1ZXJ5IHN0cmluZyBhcyB3ZWxsLiBVc2UgYW4gYXJyYXkgdG8gcHJvdmlkZSBhIFVSTAogICAgICogdGVtcGxhdGUgYW5kIGFkZGl0aW9uYWwgdmFyaWFibGVzIHRvIHVzZSBpbiB0aGUgVVJMIHRlbXBsYXRlIGV4cGFuc2lvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfFVyaUludGVyZmFjZSAkdXJpICAgICBVUkkgb2JqZWN0IG9yIHN0cmluZy4KICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICAgICRvcHRpb25zIFJlcXVlc3Qgb3B0aW9ucyB0byBhcHBseS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBhdGNoQXN5bmMoJHVyaSwgYXJyYXkgJG9wdGlvbnMgPSBbXSk6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlcXVlc3RBc3luYygnUEFUQ0gnLCAkdXJpLCAkb3B0aW9ucyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYW5kIHNlbmQgYW4gYXN5bmNocm9ub3VzIEhUVFAgREVMRVRFIHJlcXVlc3QuCiAgICAgKgogICAgICogVXNlIGFuIGFic29sdXRlIHBhdGggdG8gb3ZlcnJpZGUgdGhlIGJhc2UgcGF0aCBvZiB0aGUgY2xpZW50LCBvciBhCiAgICAgKiByZWxhdGl2ZSBwYXRoIHRvIGFwcGVuZCB0byB0aGUgYmFzZSBwYXRoIG9mIHRoZSBjbGllbnQuIFRoZSBVUkwgY2FuCiAgICAgKiBjb250YWluIHRoZSBxdWVyeSBzdHJpbmcgYXMgd2VsbC4gVXNlIGFuIGFycmF5IHRvIHByb3ZpZGUgYSBVUkwKICAgICAqIHRlbXBsYXRlIGFuZCBhZGRpdGlvbmFsIHZhcmlhYmxlcyB0byB1c2UgaW4gdGhlIFVSTCB0ZW1wbGF0ZSBleHBhbnNpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSAgICAgVVJJIG9iamVjdCBvciBzdHJpbmcuCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgICAkb3B0aW9ucyBSZXF1ZXN0IG9wdGlvbnMgdG8gYXBwbHkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWxldGVBc3luYygkdXJpLCBhcnJheSAkb3B0aW9ucyA9IFtdKTogUHJvbWlzZUludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVxdWVzdEFzeW5jKCdERUxFVEUnLCAkdXJpLCAkb3B0aW9ucyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Cookie/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXENvb2tpZTsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwoKLyoqCiAqIENvb2tpZSBqYXIgdGhhdCBzdG9yZXMgY29va2llcyBhcyBhbiBhcnJheQogKi8KY2xhc3MgQ29va2llSmFyIGltcGxlbWVudHMgQ29va2llSmFySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHZhciBTZXRDb29raWVbXSBMb2FkZWQgY29va2llIGRhdGEKICAgICAqLwogICAgcHJpdmF0ZSAkY29va2llcyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHByaXZhdGUgJHN0cmljdE1vZGU7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYm9vbCAgJHN0cmljdE1vZGUgIFNldCB0byB0cnVlIHRvIHRocm93IGV4Y2VwdGlvbnMgd2hlbiBpbnZhbGlkCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tpZXMgYXJlIGFkZGVkIHRvIHRoZSBjb29raWUgamFyLgogICAgICogQHBhcmFtIGFycmF5ICRjb29raWVBcnJheSBBcnJheSBvZiBTZXRDb29raWUgb2JqZWN0cyBvciBhIGhhc2ggb2YKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCB0aGUgU2V0Q29va2llCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChib29sICRzdHJpY3RNb2RlID0gZmFsc2UsIGFycmF5ICRjb29raWVBcnJheSA9IFtdKQogICAgewogICAgICAgICR0aGlzLT5zdHJpY3RNb2RlID0gJHN0cmljdE1vZGU7CgogICAgICAgIGZvcmVhY2ggKCRjb29raWVBcnJheSBhcyAkY29va2llKSB7CiAgICAgICAgICAgIGlmICghKCRjb29raWUgaW5zdGFuY2VvZiBTZXRDb29raWUpKSB7CiAgICAgICAgICAgICAgICAkY29va2llID0gbmV3IFNldENvb2tpZSgkY29va2llKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdGhpcy0+c2V0Q29va2llKCRjb29raWUpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhIG5ldyBDb29raWUgamFyIGZyb20gYW4gYXNzb2NpYXRpdmUgYXJyYXkgYW5kIGRvbWFpbi4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgICRjb29raWVzIENvb2tpZXMgdG8gY3JlYXRlIHRoZSBqYXIgZnJvbQogICAgICogQHBhcmFtIHN0cmluZyAkZG9tYWluICBEb21haW4gdG8gc2V0IHRoZSBjb29raWVzIHRvCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUFycmF5KGFycmF5ICRjb29raWVzLCBzdHJpbmcgJGRvbWFpbik6IHNlbGYKICAgIHsKICAgICAgICAkY29va2llSmFyID0gbmV3IHNlbGYoKTsKICAgICAgICBmb3JlYWNoICgkY29va2llcyBhcyAkbmFtZSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgJGNvb2tpZUphci0+c2V0Q29va2llKG5ldyBTZXRDb29raWUoWwogICAgICAgICAgICAgICAgJ0RvbWFpbicgPT4gJGRvbWFpbiwKICAgICAgICAgICAgICAgICdOYW1lJyA9PiAkbmFtZSwKICAgICAgICAgICAgICAgICdWYWx1ZScgPT4gJHZhbHVlLAogICAgICAgICAgICAgICAgJ0Rpc2NhcmQnID0+IHRydWUsCiAgICAgICAgICAgIF0pKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkY29va2llSmFyOwogICAgfQoKICAgIC8qKgogICAgICogRXZhbHVhdGUgaWYgdGhpcyBjb29raWUgc2hvdWxkIGJlIHBlcnNpc3RlZCB0byBzdG9yYWdlCiAgICAgKiB0aGF0IHN1cnZpdmVzIGJldHdlZW4gcmVxdWVzdHMuCiAgICAgKgogICAgICogQHBhcmFtIFNldENvb2tpZSAkY29va2llICAgICAgICAgICAgICBCZWluZyBldmFsdWF0ZWQuCiAgICAgKiBAcGFyYW0gYm9vbCAgICAgICRhbGxvd1Nlc3Npb25Db29raWVzIElmIHdlIHNob3VsZCBwZXJzaXN0IHNlc3Npb24gY29va2llcwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNob3VsZFBlcnNpc3QoU2V0Q29va2llICRjb29raWUsIGJvb2wgJGFsbG93U2Vzc2lvbkNvb2tpZXMgPSBmYWxzZSk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoJGNvb2tpZS0+Z2V0RXhwaXJlcygpIHx8ICRhbGxvd1Nlc3Npb25Db29raWVzKSB7CiAgICAgICAgICAgIGlmICghJGNvb2tpZS0+Z2V0RGlzY2FyZCgpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogRmluZHMgYW5kIHJldHVybnMgdGhlIGNvb2tpZSBiYXNlZCBvbiB0aGUgbmFtZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgY29va2llIG5hbWUgdG8gc2VhcmNoIGZvcgogICAgICoKICAgICAqIEByZXR1cm4gU2V0Q29va2llfG51bGwgY29va2llIHRoYXQgd2FzIGZvdW5kIG9yIG51bGwgaWYgbm90IGZvdW5kCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb29raWVCeU5hbWUoc3RyaW5nICRuYW1lKTogP1NldENvb2tpZQogICAgewogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5jb29raWVzIGFzICRjb29raWUpIHsKICAgICAgICAgICAgaWYgKCRjb29raWUtPmdldE5hbWUoKSAhPT0gbnVsbCAmJiBcc3RyY2FzZWNtcCgkY29va2llLT5nZXROYW1lKCksICRuYW1lKSA9PT0gMCkgewogICAgICAgICAgICAgICAgcmV0dXJuICRjb29raWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b0FycmF5KCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFxhcnJheV9tYXAoc3RhdGljIGZ1bmN0aW9uIChTZXRDb29raWUgJGNvb2tpZSk6IGFycmF5IHsKICAgICAgICAgICAgcmV0dXJuICRjb29raWUtPnRvQXJyYXkoKTsKICAgICAgICB9LCAkdGhpcy0+Z2V0SXRlcmF0b3IoKS0+Z2V0QXJyYXlDb3B5KCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhcig/c3RyaW5nICRkb21haW4gPSBudWxsLCA/c3RyaW5nICRwYXRoID0gbnVsbCwgP3N0cmluZyAkbmFtZSA9IG51bGwpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCEkZG9tYWluKSB7CiAgICAgICAgICAgICR0aGlzLT5jb29raWVzID0gW107CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlaWYgKCEkcGF0aCkgewogICAgICAgICAgICAkdGhpcy0+Y29va2llcyA9IFxhcnJheV9maWx0ZXIoCiAgICAgICAgICAgICAgICAkdGhpcy0+Y29va2llcywKICAgICAgICAgICAgICAgIHN0YXRpYyBmdW5jdGlvbiAoU2V0Q29va2llICRjb29raWUpIHVzZSAoJGRvbWFpbik6IGJvb2wgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAhJGNvb2tpZS0+bWF0Y2hlc0RvbWFpbigkZG9tYWluKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKICAgICAgICB9IGVsc2VpZiAoISRuYW1lKSB7CiAgICAgICAgICAgICR0aGlzLT5jb29raWVzID0gXGFycmF5X2ZpbHRlcigKICAgICAgICAgICAgICAgICR0aGlzLT5jb29raWVzLAogICAgICAgICAgICAgICAgc3RhdGljIGZ1bmN0aW9uIChTZXRDb29raWUgJGNvb2tpZSkgdXNlICgkcGF0aCwgJGRvbWFpbik6IGJvb2wgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAhKCRjb29raWUtPm1hdGNoZXNQYXRoKCRwYXRoKQogICAgICAgICAgICAgICAgICAgICAgICAmJiAkY29va2llLT5tYXRjaGVzRG9tYWluKCRkb21haW4pKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+Y29va2llcyA9IFxhcnJheV9maWx0ZXIoCiAgICAgICAgICAgICAgICAkdGhpcy0+Y29va2llcywKICAgICAgICAgICAgICAgIHN0YXRpYyBmdW5jdGlvbiAoU2V0Q29va2llICRjb29raWUpIHVzZSAoJHBhdGgsICRkb21haW4sICRuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEoJGNvb2tpZS0+Z2V0TmFtZSgpID09ICRuYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRjb29raWUtPm1hdGNoZXNQYXRoKCRwYXRoKQogICAgICAgICAgICAgICAgICAgICAgICAmJiAkY29va2llLT5tYXRjaGVzRG9tYWluKCRkb21haW4pKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNsZWFyU2Vzc2lvbkNvb2tpZXMoKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5jb29raWVzID0gXGFycmF5X2ZpbHRlcigKICAgICAgICAgICAgJHRoaXMtPmNvb2tpZXMsCiAgICAgICAgICAgIHN0YXRpYyBmdW5jdGlvbiAoU2V0Q29va2llICRjb29raWUpOiBib29sIHsKICAgICAgICAgICAgICAgIHJldHVybiAhJGNvb2tpZS0+Z2V0RGlzY2FyZCgpICYmICRjb29raWUtPmdldEV4cGlyZXMoKTsKICAgICAgICAgICAgfQogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldENvb2tpZShTZXRDb29raWUgJGNvb2tpZSk6IGJvb2wKICAgIHsKICAgICAgICAvLyBJZiB0aGUgbmFtZSBzdHJpbmcgaXMgZW1wdHkgKGJ1dCBub3QgMCksIGlnbm9yZSB0aGUgc2V0LWNvb2tpZQogICAgICAgIC8vIHN0cmluZyBlbnRpcmVseS4KICAgICAgICAkbmFtZSA9ICRjb29raWUtPmdldE5hbWUoKTsKICAgICAgICBpZiAoISRuYW1lICYmICRuYW1lICE9PSAnMCcpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgLy8gT25seSBhbGxvdyBjb29raWVzIHdpdGggc2V0IGFuZCB2YWxpZCBkb21haW4sIG5hbWUsIHZhbHVlCiAgICAgICAgJHJlc3VsdCA9ICRjb29raWUtPnZhbGlkYXRlKCk7CiAgICAgICAgaWYgKCRyZXN1bHQgIT09IHRydWUpIHsKICAgICAgICAgICAgaWYgKCR0aGlzLT5zdHJpY3RNb2RlKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0ludmFsaWQgY29va2llOiAnLiRyZXN1bHQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR0aGlzLT5yZW1vdmVDb29raWVJZkVtcHR5KCRjb29raWUpOwoKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgLy8gUmVzb2x2ZSBjb25mbGljdHMgd2l0aCBwcmV2aW91c2x5IHNldCBjb29raWVzCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmNvb2tpZXMgYXMgJGkgPT4gJGMpIHsKICAgICAgICAgICAgLy8gVHdvIGNvb2tpZXMgYXJlIGlkZW50aWNhbCwgd2hlbiB0aGVpciBwYXRoLCBhbmQgZG9tYWluIGFyZQogICAgICAgICAgICAvLyBpZGVudGljYWwuCiAgICAgICAgICAgIGlmICgkYy0+Z2V0UGF0aCgpICE9ICRjb29raWUtPmdldFBhdGgoKQogICAgICAgICAgICAgICAgfHwgJGMtPmdldERvbWFpbigpICE9ICRjb29raWUtPmdldERvbWFpbigpCiAgICAgICAgICAgICAgICB8fCAkYy0+Z2V0TmFtZSgpICE9ICRjb29raWUtPmdldE5hbWUoKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBUaGUgcHJldmlvdXNseSBzZXQgY29va2llIGlzIGEgZGlzY2FyZCBjb29raWUgYW5kIHRoaXMgb25lIGlzCiAgICAgICAgICAgIC8vIG5vdCBzbyBhbGxvdyB0aGUgbmV3IGNvb2tpZSB0byBiZSBzZXQKICAgICAgICAgICAgaWYgKCEkY29va2llLT5nZXREaXNjYXJkKCkgJiYgJGMtPmdldERpc2NhcmQoKSkgewogICAgICAgICAgICAgICAgdW5zZXQoJHRoaXMtPmNvb2tpZXNbJGldKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBJZiB0aGUgbmV3IGNvb2tpZSdzIGV4cGlyYXRpb24gaXMgZnVydGhlciBpbnRvIHRoZSBmdXR1cmUsIHRoZW4KICAgICAgICAgICAgLy8gcmVwbGFjZSB0aGUgb2xkIGNvb2tpZQogICAgICAgICAgICBpZiAoJGNvb2tpZS0+Z2V0RXhwaXJlcygpID4gJGMtPmdldEV4cGlyZXMoKSkgewogICAgICAgICAgICAgICAgdW5zZXQoJHRoaXMtPmNvb2tpZXNbJGldKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBJZiB0aGUgdmFsdWUgaGFzIGNoYW5nZWQsIHdlIGJldHRlciBjaGFuZ2UgaXQKICAgICAgICAgICAgaWYgKCRjb29raWUtPmdldFZhbHVlKCkgIT09ICRjLT5nZXRWYWx1ZSgpKSB7CiAgICAgICAgICAgICAgICB1bnNldCgkdGhpcy0+Y29va2llc1skaV0pOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFRoZSBjb29raWUgZXhpc3RzLCBzbyBubyBuZWVkIHRvIGNvbnRpbnVlCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5jb29raWVzW10gPSAkY29va2llOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIFxjb3VudCgkdGhpcy0+Y29va2llcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIFxBcnJheUl0ZXJhdG9yPGludCwgU2V0Q29va2llPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SXRlcmF0b3IoKTogXEFycmF5SXRlcmF0b3IKICAgIHsKICAgICAgICByZXR1cm4gbmV3IFxBcnJheUl0ZXJhdG9yKFxhcnJheV92YWx1ZXMoJHRoaXMtPmNvb2tpZXMpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZXh0cmFjdENvb2tpZXMoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlKTogdm9pZAogICAgewogICAgICAgIGlmICgkY29va2llSGVhZGVyID0gJHJlc3BvbnNlLT5nZXRIZWFkZXIoJ1NldC1Db29raWUnKSkgewogICAgICAgICAgICBmb3JlYWNoICgkY29va2llSGVhZGVyIGFzICRjb29raWUpIHsKICAgICAgICAgICAgICAgICRzYyA9IFNldENvb2tpZTo6ZnJvbVN0cmluZygkY29va2llKTsKICAgICAgICAgICAgICAgIGlmICghJHNjLT5nZXREb21haW4oKSkgewogICAgICAgICAgICAgICAgICAgICRzYy0+c2V0RG9tYWluKCRyZXF1ZXN0LT5nZXRVcmkoKS0+Z2V0SG9zdCgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgwICE9PSBcc3RycG9zKCRzYy0+Z2V0UGF0aCgpLCAnLycpKSB7CiAgICAgICAgICAgICAgICAgICAgJHNjLT5zZXRQYXRoKCR0aGlzLT5nZXRDb29raWVQYXRoRnJvbVJlcXVlc3QoJHJlcXVlc3QpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghJHNjLT5tYXRjaGVzRG9tYWluKCRyZXF1ZXN0LT5nZXRVcmkoKS0+Z2V0SG9zdCgpKSkgewogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gTm90ZTogQXQgdGhpcyBwb2ludCBgJHNjLT5nZXREb21haW4oKWAgYmVpbmcgYSBwdWJsaWMgc3VmZml4IHNob3VsZAogICAgICAgICAgICAgICAgLy8gYmUgcmVqZWN0ZWQsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIHB1bGwgaW4gdGhlIGZ1bGwgUFNMIGRlcGVuZGVuY3kuCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0Q29va2llKCRzYyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBDb21wdXRlcyBjb29raWUgcGF0aCBmb2xsb3dpbmcgUkZDIDYyNjUgc2VjdGlvbiA1LjEuNAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2MjY1I3NlY3Rpb24tNS4xLjQKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRDb29raWVQYXRoRnJvbVJlcXVlc3QoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCk6IHN0cmluZwogICAgewogICAgICAgICR1cmlQYXRoID0gJHJlcXVlc3QtPmdldFVyaSgpLT5nZXRQYXRoKCk7CiAgICAgICAgaWYgKCcnID09PSAkdXJpUGF0aCkgewogICAgICAgICAgICByZXR1cm4gJy8nOwogICAgICAgIH0KICAgICAgICBpZiAoMCAhPT0gXHN0cnBvcygkdXJpUGF0aCwgJy8nKSkgewogICAgICAgICAgICByZXR1cm4gJy8nOwogICAgICAgIH0KICAgICAgICBpZiAoJy8nID09PSAkdXJpUGF0aCkgewogICAgICAgICAgICByZXR1cm4gJy8nOwogICAgICAgIH0KICAgICAgICAkbGFzdFNsYXNoUG9zID0gXHN0cnJwb3MoJHVyaVBhdGgsICcvJyk7CiAgICAgICAgaWYgKDAgPT09ICRsYXN0U2xhc2hQb3MgfHwgZmFsc2UgPT09ICRsYXN0U2xhc2hQb3MpIHsKICAgICAgICAgICAgcmV0dXJuICcvJzsKICAgICAgICB9CgogICAgICAgIHJldHVybiBcc3Vic3RyKCR1cmlQYXRoLCAwLCAkbGFzdFNsYXNoUG9zKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aENvb2tpZUhlYWRlcihSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0KTogUmVxdWVzdEludGVyZmFjZQogICAgewogICAgICAgICR2YWx1ZXMgPSBbXTsKICAgICAgICAkdXJpID0gJHJlcXVlc3QtPmdldFVyaSgpOwogICAgICAgICRzY2hlbWUgPSAkdXJpLT5nZXRTY2hlbWUoKTsKICAgICAgICAkaG9zdCA9ICR1cmktPmdldEhvc3QoKTsKICAgICAgICAkcGF0aCA9ICR1cmktPmdldFBhdGgoKSA/OiAnLyc7CgogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5jb29raWVzIGFzICRjb29raWUpIHsKICAgICAgICAgICAgaWYgKCRjb29raWUtPm1hdGNoZXNQYXRoKCRwYXRoKQogICAgICAgICAgICAgICAgJiYgJGNvb2tpZS0+bWF0Y2hlc0RvbWFpbigkaG9zdCkKICAgICAgICAgICAgICAgICYmICEkY29va2llLT5pc0V4cGlyZWQoKQogICAgICAgICAgICAgICAgJiYgKCEkY29va2llLT5nZXRTZWN1cmUoKSB8fCAkc2NoZW1lID09PSAnaHR0cHMnKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICR2YWx1ZXNbXSA9ICRjb29raWUtPmdldE5hbWUoKS4nPScKICAgICAgICAgICAgICAgICAgICAuJGNvb2tpZS0+Z2V0VmFsdWUoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR2YWx1ZXMKICAgICAgICAgICAgPyAkcmVxdWVzdC0+d2l0aEhlYWRlcignQ29va2llJywgXGltcGxvZGUoJzsgJywgJHZhbHVlcykpCiAgICAgICAgICAgIDogJHJlcXVlc3Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBJZiBhIGNvb2tpZSBhbHJlYWR5IGV4aXN0cyBhbmQgdGhlIHNlcnZlciBhc2tzIHRvIHNldCBpdCBhZ2FpbiB3aXRoIGEKICAgICAqIG51bGwgdmFsdWUsIHRoZSBjb29raWUgbXVzdCBiZSBkZWxldGVkLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlbW92ZUNvb2tpZUlmRW1wdHkoU2V0Q29va2llICRjb29raWUpOiB2b2lkCiAgICB7CiAgICAgICAgJGNvb2tpZVZhbHVlID0gJGNvb2tpZS0+Z2V0VmFsdWUoKTsKICAgICAgICBpZiAoJGNvb2tpZVZhbHVlID09PSBudWxsIHx8ICRjb29raWVWYWx1ZSA9PT0gJycpIHsKICAgICAgICAgICAgJHRoaXMtPmNsZWFyKAogICAgICAgICAgICAgICAgJGNvb2tpZS0+Z2V0RG9tYWluKCksCiAgICAgICAgICAgICAgICAkY29va2llLT5nZXRQYXRoKCksCiAgICAgICAgICAgICAgICAkY29va2llLT5nZXROYW1lKCkKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXENvb2tpZTsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwoKLyoqCiAqIFN0b3JlcyBIVFRQIGNvb2tpZXMuCiAqCiAqIEl0IGV4dHJhY3RzIGNvb2tpZXMgZnJvbSBIVFRQIHJlcXVlc3RzLCBhbmQgcmV0dXJucyB0aGVtIGluIEhUVFAgcmVzcG9uc2VzLgogKiBDb29raWVKYXJJbnRlcmZhY2UgaW5zdGFuY2VzIGF1dG9tYXRpY2FsbHkgZXhwaXJlIGNvbnRhaW5lZCBjb29raWVzIHdoZW4KICogbmVjZXNzYXJ5LiBTdWJjbGFzc2VzIGFyZSBhbHNvIHJlc3BvbnNpYmxlIGZvciBzdG9yaW5nIGFuZCByZXRyaWV2aW5nCiAqIGNvb2tpZXMgZnJvbSBhIGZpbGUsIGRhdGFiYXNlLCBldGMuCiAqCiAqIEBzZWUgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sIEluc3BpcmF0aW9uCiAqCiAqIEBleHRlbmRzIFxJdGVyYXRvckFnZ3JlZ2F0ZTxTZXRDb29raWU+CiAqLwppbnRlcmZhY2UgQ29va2llSmFySW50ZXJmYWNlIGV4dGVuZHMgXENvdW50YWJsZSwgXEl0ZXJhdG9yQWdncmVnYXRlCnsKICAgIC8qKgogICAgICogQ3JlYXRlIGEgcmVxdWVzdCB3aXRoIGFkZGVkIGNvb2tpZSBoZWFkZXJzLgogICAgICoKICAgICAqIElmIG5vIG1hdGNoaW5nIGNvb2tpZXMgYXJlIGZvdW5kIGluIHRoZSBjb29raWUgamFyLCB0aGVuIG5vIENvb2tpZQogICAgICogaGVhZGVyIGlzIGFkZGVkIHRvIHRoZSByZXF1ZXN0IGFuZCB0aGUgc2FtZSByZXF1ZXN0IGlzIHJldHVybmVkLgogICAgICoKICAgICAqIEBwYXJhbSBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0IFJlcXVlc3Qgb2JqZWN0IHRvIG1vZGlmeS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFJlcXVlc3RJbnRlcmZhY2UgcmV0dXJucyB0aGUgbW9kaWZpZWQgcmVxdWVzdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhDb29raWVIZWFkZXIoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCk6IFJlcXVlc3RJbnRlcmZhY2U7CgogICAgLyoqCiAgICAgKiBFeHRyYWN0IGNvb2tpZXMgZnJvbSBhbiBIVFRQIHJlc3BvbnNlIGFuZCBzdG9yZSB0aGVtIGluIHRoZSBDb29raWVKYXIuCiAgICAgKgogICAgICogQHBhcmFtIFJlcXVlc3RJbnRlcmZhY2UgICRyZXF1ZXN0ICBSZXF1ZXN0IHRoYXQgd2FzIHNlbnQKICAgICAqIEBwYXJhbSBSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UgUmVzcG9uc2UgdGhhdCB3YXMgcmVjZWl2ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4dHJhY3RDb29raWVzKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIFJlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZSk6IHZvaWQ7CgogICAgLyoqCiAgICAgKiBTZXRzIGEgY29va2llIGluIHRoZSBjb29raWUgamFyLgogICAgICoKICAgICAqIEBwYXJhbSBTZXRDb29raWUgJGNvb2tpZSBDb29raWUgdG8gc2V0LgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDb29raWUoU2V0Q29va2llICRjb29raWUpOiBib29sOwoKICAgIC8qKgogICAgICogUmVtb3ZlIGNvb2tpZXMgY3VycmVudGx5IGhlbGQgaW4gdGhlIGNvb2tpZSBqYXIuCiAgICAgKgogICAgICogSW52b2tpbmcgdGhpcyBtZXRob2Qgd2l0aG91dCBhcmd1bWVudHMgd2lsbCBlbXB0eSB0aGUgd2hvbGUgY29va2llIGphci4KICAgICAqIElmIGdpdmVuIGEgJGRvbWFpbiBhcmd1bWVudCBvbmx5IGNvb2tpZXMgYmVsb25naW5nIHRvIHRoYXQgZG9tYWluIHdpbGwKICAgICAqIGJlIHJlbW92ZWQuIElmIGdpdmVuIGEgJGRvbWFpbiBhbmQgJHBhdGggYXJndW1lbnQsIGNvb2tpZXMgYmVsb25naW5nIHRvCiAgICAgKiB0aGUgc3BlY2lmaWVkIHBhdGggd2l0aGluIHRoYXQgZG9tYWluIGFyZSByZW1vdmVkLiBJZiBnaXZlbiBhbGwgdGhyZWUKICAgICAqIGFyZ3VtZW50cywgdGhlbiB0aGUgY29va2llIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLCBwYXRoIGFuZCBkb21haW4gaXMKICAgICAqIHJlbW92ZWQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRkb21haW4gQ2xlYXJzIGNvb2tpZXMgbWF0Y2hpbmcgYSBkb21haW4KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcGF0aCAgIENsZWFycyBjb29raWVzIG1hdGNoaW5nIGEgZG9tYWluIGFuZCBwYXRoCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJG5hbWUgICBDbGVhcnMgY29va2llcyBtYXRjaGluZyBhIGRvbWFpbiwgcGF0aCwgYW5kIG5hbWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNsZWFyKD9zdHJpbmcgJGRvbWFpbiA9IG51bGwsID9zdHJpbmcgJHBhdGggPSBudWxsLCA/c3RyaW5nICRuYW1lID0gbnVsbCk6IHZvaWQ7CgogICAgLyoqCiAgICAgKiBEaXNjYXJkIGFsbCBzZXNzaW9ucyBjb29raWVzLgogICAgICoKICAgICAqIFJlbW92ZXMgY29va2llcyB0aGF0IGRvbid0IGhhdmUgYW4gZXhwaXJlIGZpZWxkIG9yIGEgaGF2ZSBhIGRpc2NhcmQKICAgICAqIGZpZWxkIHNldCB0byB0cnVlLiBUbyBiZSBjYWxsZWQgd2hlbiB0aGUgdXNlciBhZ2VudCBzaHV0cyBkb3duIGFjY29yZGluZwogICAgICogdG8gUkZDIDI5NjUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhclNlc3Npb25Db29raWVzKCk6IHZvaWQ7CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyB0aGUgY29va2llIGphciB0byBhbiBhcnJheS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQXJyYXkoKTogYXJyYXk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXENvb2tpZTsKCnVzZSBHdXp6bGVIdHRwXFV0aWxzOwoKLyoqCiAqIFBlcnNpc3RzIG5vbi1zZXNzaW9uIGNvb2tpZXMgdXNpbmcgYSBKU09OIGZvcm1hdHRlZCBmaWxlCiAqLwpjbGFzcyBGaWxlQ29va2llSmFyIGV4dGVuZHMgQ29va2llSmFyCnsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcgZmlsZW5hbWUKICAgICAqLwogICAgcHJpdmF0ZSAkZmlsZW5hbWU7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wgQ29udHJvbCB3aGV0aGVyIHRvIHBlcnNpc3Qgc2Vzc2lvbiBjb29raWVzIG9yIG5vdC4KICAgICAqLwogICAgcHJpdmF0ZSAkc3RvcmVTZXNzaW9uQ29va2llczsKCiAgICAvKioKICAgICAqIENyZWF0ZSBhIG5ldyBGaWxlQ29va2llSmFyIG9iamVjdAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvb2tpZUZpbGUgICAgICAgICAgRmlsZSB0byBzdG9yZSB0aGUgY29va2llIGRhdGEKICAgICAqIEBwYXJhbSBib29sICAgJHN0b3JlU2Vzc2lvbkNvb2tpZXMgU2V0IHRvIHRydWUgdG8gc3RvcmUgc2Vzc2lvbiBjb29raWVzCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBjb29raWUgamFyLgogICAgICoKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gaWYgdGhlIGZpbGUgY2Fubm90IGJlIGZvdW5kIG9yIGNyZWF0ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkY29va2llRmlsZSwgYm9vbCAkc3RvcmVTZXNzaW9uQ29va2llcyA9IGZhbHNlKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoKTsKICAgICAgICAkdGhpcy0+ZmlsZW5hbWUgPSAkY29va2llRmlsZTsKICAgICAgICAkdGhpcy0+c3RvcmVTZXNzaW9uQ29va2llcyA9ICRzdG9yZVNlc3Npb25Db29raWVzOwoKICAgICAgICBpZiAoXGZpbGVfZXhpc3RzKCRjb29raWVGaWxlKSkgewogICAgICAgICAgICAkdGhpcy0+bG9hZCgkY29va2llRmlsZSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogU2F2ZXMgdGhlIGZpbGUgd2hlbiBzaHV0dGluZyBkb3duCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2Rlc3RydWN0KCkKICAgIHsKICAgICAgICAkdGhpcy0+c2F2ZSgkdGhpcy0+ZmlsZW5hbWUpOwogICAgfQoKICAgIC8qKgogICAgICogU2F2ZXMgdGhlIGNvb2tpZXMgdG8gYSBmaWxlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIEZpbGUgdG8gc2F2ZQogICAgICoKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gaWYgdGhlIGZpbGUgY2Fubm90IGJlIGZvdW5kIG9yIGNyZWF0ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNhdmUoc3RyaW5nICRmaWxlbmFtZSk6IHZvaWQKICAgIHsKICAgICAgICAkanNvbiA9IFtdOwogICAgICAgIC8qKiBAdmFyIFNldENvb2tpZSAkY29va2llICovCiAgICAgICAgZm9yZWFjaCAoJHRoaXMgYXMgJGNvb2tpZSkgewogICAgICAgICAgICBpZiAoQ29va2llSmFyOjpzaG91bGRQZXJzaXN0KCRjb29raWUsICR0aGlzLT5zdG9yZVNlc3Npb25Db29raWVzKSkgewogICAgICAgICAgICAgICAgJGpzb25bXSA9ICRjb29raWUtPnRvQXJyYXkoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJGpzb25TdHIgPSBVdGlsczo6anNvbkVuY29kZSgkanNvbik7CiAgICAgICAgaWYgKGZhbHNlID09PSBcZmlsZV9wdXRfY29udGVudHMoJGZpbGVuYW1lLCAkanNvblN0ciwgXExPQ0tfRVgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiVW5hYmxlIHRvIHNhdmUgZmlsZSB7JGZpbGVuYW1lfSIpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIExvYWQgY29va2llcyBmcm9tIGEgSlNPTiBmb3JtYXR0ZWQgZmlsZS4KICAgICAqCiAgICAgKiBPbGQgY29va2llcyBhcmUga2VwdCB1bmxlc3Mgb3ZlcndyaXR0ZW4gYnkgbmV3bHkgbG9hZGVkIG9uZXMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgQ29va2llIGZpbGUgdG8gbG9hZC4KICAgICAqCiAgICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIGlmIHRoZSBmaWxlIGNhbm5vdCBiZSBsb2FkZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkKHN0cmluZyAkZmlsZW5hbWUpOiB2b2lkCiAgICB7CiAgICAgICAgJGpzb24gPSBcZmlsZV9nZXRfY29udGVudHMoJGZpbGVuYW1lKTsKICAgICAgICBpZiAoZmFsc2UgPT09ICRqc29uKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiVW5hYmxlIHRvIGxvYWQgZmlsZSB7JGZpbGVuYW1lfSIpOwogICAgICAgIH0KICAgICAgICBpZiAoJGpzb24gPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICRkYXRhID0gVXRpbHM6Ompzb25EZWNvZGUoJGpzb24sIHRydWUpOwogICAgICAgIGlmIChcaXNfYXJyYXkoJGRhdGEpKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRkYXRhIGFzICRjb29raWUpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5zZXRDb29raWUobmV3IFNldENvb2tpZSgkY29va2llKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2VpZiAoXGlzX3NjYWxhcigkZGF0YSkgJiYgIWVtcHR5KCRkYXRhKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIkludmFsaWQgY29va2llIGZpbGU6IHskZmlsZW5hbWV9Iik7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXENvb2tpZTsKCi8qKgogKiBQZXJzaXN0cyBjb29raWVzIGluIHRoZSBjbGllbnQgc2Vzc2lvbgogKi8KY2xhc3MgU2Vzc2lvbkNvb2tpZUphciBleHRlbmRzIENvb2tpZUphcgp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nIHNlc3Npb24ga2V5CiAgICAgKi8KICAgIHByaXZhdGUgJHNlc3Npb25LZXk7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wgQ29udHJvbCB3aGV0aGVyIHRvIHBlcnNpc3Qgc2Vzc2lvbiBjb29raWVzIG9yIG5vdC4KICAgICAqLwogICAgcHJpdmF0ZSAkc3RvcmVTZXNzaW9uQ29va2llczsKCiAgICAvKioKICAgICAqIENyZWF0ZSBhIG5ldyBTZXNzaW9uQ29va2llSmFyIG9iamVjdAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlc3Npb25LZXkgICAgICAgICAgU2Vzc2lvbiBrZXkgbmFtZSB0byBzdG9yZSB0aGUgY29va2llCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgaW4gc2Vzc2lvbgogICAgICogQHBhcmFtIGJvb2wgICAkc3RvcmVTZXNzaW9uQ29va2llcyBTZXQgdG8gdHJ1ZSB0byBzdG9yZSBzZXNzaW9uIGNvb2tpZXMKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGNvb2tpZSBqYXIuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJHNlc3Npb25LZXksIGJvb2wgJHN0b3JlU2Vzc2lvbkNvb2tpZXMgPSBmYWxzZSkKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCk7CiAgICAgICAgJHRoaXMtPnNlc3Npb25LZXkgPSAkc2Vzc2lvbktleTsKICAgICAgICAkdGhpcy0+c3RvcmVTZXNzaW9uQ29va2llcyA9ICRzdG9yZVNlc3Npb25Db29raWVzOwogICAgICAgICR0aGlzLT5sb2FkKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTYXZlcyBjb29raWVzIHRvIHNlc3Npb24gd2hlbiBzaHV0dGluZyBkb3duCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2Rlc3RydWN0KCkKICAgIHsKICAgICAgICAkdGhpcy0+c2F2ZSgpOwogICAgfQoKICAgIC8qKgogICAgICogU2F2ZSBjb29raWVzIHRvIHRoZSBjbGllbnQgc2Vzc2lvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2F2ZSgpOiB2b2lkCiAgICB7CiAgICAgICAgJGpzb24gPSBbXTsKICAgICAgICAvKiogQHZhciBTZXRDb29raWUgJGNvb2tpZSAqLwogICAgICAgIGZvcmVhY2ggKCR0aGlzIGFzICRjb29raWUpIHsKICAgICAgICAgICAgaWYgKENvb2tpZUphcjo6c2hvdWxkUGVyc2lzdCgkY29va2llLCAkdGhpcy0+c3RvcmVTZXNzaW9uQ29va2llcykpIHsKICAgICAgICAgICAgICAgICRqc29uW10gPSAkY29va2llLT50b0FycmF5KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRfU0VTU0lPTlskdGhpcy0+c2Vzc2lvbktleV0gPSBcanNvbl9lbmNvZGUoJGpzb24pOwogICAgfQoKICAgIC8qKgogICAgICogTG9hZCB0aGUgY29udGVudHMgb2YgdGhlIGNsaWVudCBzZXNzaW9uIGludG8gdGhlIGRhdGEgYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGxvYWQoKTogdm9pZAogICAgewogICAgICAgIGlmICghaXNzZXQoJF9TRVNTSU9OWyR0aGlzLT5zZXNzaW9uS2V5XSkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAkZGF0YSA9IFxqc29uX2RlY29kZSgkX1NFU1NJT05bJHRoaXMtPnNlc3Npb25LZXldLCB0cnVlKTsKICAgICAgICBpZiAoXGlzX2FycmF5KCRkYXRhKSkgewogICAgICAgICAgICBmb3JlYWNoICgkZGF0YSBhcyAkY29va2llKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0Q29va2llKG5ldyBTZXRDb29raWUoJGNvb2tpZSkpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlaWYgKFxzdHJsZW4oJGRhdGEpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignSW52YWxpZCBjb29raWUgZGF0YScpOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXENvb2tpZTsKCi8qKgogKiBTZXQtQ29va2llIG9iamVjdAogKi8KY2xhc3MgU2V0Q29va2llCnsKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkZGVmYXVsdHMgPSBbCiAgICAgICAgJ05hbWUnID0+IG51bGwsCiAgICAgICAgJ1ZhbHVlJyA9PiBudWxsLAogICAgICAgICdEb21haW4nID0+IG51bGwsCiAgICAgICAgJ1BhdGgnID0+ICcvJywKICAgICAgICAnTWF4LUFnZScgPT4gbnVsbCwKICAgICAgICAnRXhwaXJlcycgPT4gbnVsbCwKICAgICAgICAnU2VjdXJlJyA9PiBmYWxzZSwKICAgICAgICAnRGlzY2FyZCcgPT4gZmFsc2UsCiAgICAgICAgJ0h0dHBPbmx5JyA9PiBmYWxzZSwKICAgIF07CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5IENvb2tpZSBkYXRhCiAgICAgKi8KICAgIHByaXZhdGUgJGRhdGE7CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgU2V0Q29va2llIG9iamVjdCBmcm9tIGEgc3RyaW5nLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvb2tpZSBTZXQtQ29va2llIGhlYWRlciBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tU3RyaW5nKHN0cmluZyAkY29va2llKTogc2VsZgogICAgewogICAgICAgIC8vIENyZWF0ZSB0aGUgZGVmYXVsdCByZXR1cm4gYXJyYXkKICAgICAgICAkZGF0YSA9IHNlbGY6OiRkZWZhdWx0czsKICAgICAgICAvLyBFeHBsb2RlIHRoZSBjb29raWUgc3RyaW5nIHVzaW5nIGEgc2VyaWVzIG9mIHNlbWljb2xvbnMKICAgICAgICAkcGllY2VzID0gXGFycmF5X2ZpbHRlcihcYXJyYXlfbWFwKCd0cmltJywgXGV4cGxvZGUoJzsnLCAkY29va2llKSkpOwogICAgICAgIC8vIFRoZSBuYW1lIG9mIHRoZSBjb29raWUgKGZpcnN0IGt2cCkgbXVzdCBleGlzdCBhbmQgaW5jbHVkZSBhbiBlcXVhbCBzaWduLgogICAgICAgIGlmICghaXNzZXQoJHBpZWNlc1swXSkgfHwgXHN0cnBvcygkcGllY2VzWzBdLCAnPScpID09PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGRhdGEpOwogICAgICAgIH0KCiAgICAgICAgLy8gQWRkIHRoZSBjb29raWUgcGllY2VzIGludG8gdGhlIHBhcnNlZCBkYXRhIGFycmF5CiAgICAgICAgZm9yZWFjaCAoJHBpZWNlcyBhcyAkcGFydCkgewogICAgICAgICAgICAkY29va2llUGFydHMgPSBcZXhwbG9kZSgnPScsICRwYXJ0LCAyKTsKICAgICAgICAgICAgJGtleSA9IFx0cmltKCRjb29raWVQYXJ0c1swXSk7CiAgICAgICAgICAgICR2YWx1ZSA9IGlzc2V0KCRjb29raWVQYXJ0c1sxXSkKICAgICAgICAgICAgICAgID8gXHRyaW0oJGNvb2tpZVBhcnRzWzFdLCAiIFxuXHJcdFwwXHgwQiIpCiAgICAgICAgICAgICAgICA6IHRydWU7CgogICAgICAgICAgICAvLyBPbmx5IGNoZWNrIGZvciBub24tY29va2llcyB3aGVuIGNvb2tpZXMgaGF2ZSBiZWVuIGZvdW5kCiAgICAgICAgICAgIGlmICghaXNzZXQoJGRhdGFbJ05hbWUnXSkpIHsKICAgICAgICAgICAgICAgICRkYXRhWydOYW1lJ10gPSAka2V5OwogICAgICAgICAgICAgICAgJGRhdGFbJ1ZhbHVlJ10gPSAkdmFsdWU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBmb3JlYWNoIChcYXJyYXlfa2V5cyhzZWxmOjokZGVmYXVsdHMpIGFzICRzZWFyY2gpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIVxzdHJjYXNlY21wKCRzZWFyY2gsICRrZXkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkc2VhcmNoID09PSAnTWF4LUFnZScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19udW1lcmljKCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGF0YVskc2VhcmNoXSA9IChpbnQpICR2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRzZWFyY2ggPT09ICdTZWN1cmUnIHx8ICRzZWFyY2ggPT09ICdEaXNjYXJkJyB8fCAkc2VhcmNoID09PSAnSHR0cE9ubHknKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRhdGFbJHNlYXJjaF0gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRhdGFbJHNlYXJjaF0gPSAkdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgMjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkZGF0YVska2V5XSA9ICR2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRkYXRhKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheSAkZGF0YSBBcnJheSBvZiBjb29raWUgZGF0YSBwcm92aWRlZCBieSBhIENvb2tpZSBwYXJzZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRkYXRhID0gW10pCiAgICB7CiAgICAgICAgJHRoaXMtPmRhdGEgPSBzZWxmOjokZGVmYXVsdHM7CgogICAgICAgIGlmIChpc3NldCgkZGF0YVsnTmFtZSddKSkgewogICAgICAgICAgICAkdGhpcy0+c2V0TmFtZSgkZGF0YVsnTmFtZSddKTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkZGF0YVsnVmFsdWUnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPnNldFZhbHVlKCRkYXRhWydWYWx1ZSddKTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkZGF0YVsnRG9tYWluJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5zZXREb21haW4oJGRhdGFbJ0RvbWFpbiddKTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkZGF0YVsnUGF0aCddKSkgewogICAgICAgICAgICAkdGhpcy0+c2V0UGF0aCgkZGF0YVsnUGF0aCddKTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkZGF0YVsnTWF4LUFnZSddKSkgewogICAgICAgICAgICAkdGhpcy0+c2V0TWF4QWdlKCRkYXRhWydNYXgtQWdlJ10pOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRkYXRhWydFeHBpcmVzJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5zZXRFeHBpcmVzKCRkYXRhWydFeHBpcmVzJ10pOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRkYXRhWydTZWN1cmUnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPnNldFNlY3VyZSgkZGF0YVsnU2VjdXJlJ10pOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRkYXRhWydEaXNjYXJkJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5zZXREaXNjYXJkKCRkYXRhWydEaXNjYXJkJ10pOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRkYXRhWydIdHRwT25seSddKSkgewogICAgICAgICAgICAkdGhpcy0+c2V0SHR0cE9ubHkoJGRhdGFbJ0h0dHBPbmx5J10pOwogICAgICAgIH0KCiAgICAgICAgLy8gU2V0IHRoZSByZW1haW5pbmcgdmFsdWVzIHRoYXQgZG9uJ3QgaGF2ZSBleHRyYSB2YWxpZGF0aW9uIGxvZ2ljCiAgICAgICAgZm9yZWFjaCAoYXJyYXlfZGlmZihhcnJheV9rZXlzKCRkYXRhKSwgYXJyYXlfa2V5cyhzZWxmOjokZGVmYXVsdHMpKSBhcyAka2V5KSB7CiAgICAgICAgICAgICR0aGlzLT5kYXRhWyRrZXldID0gJGRhdGFbJGtleV07CiAgICAgICAgfQoKICAgICAgICAvLyBFeHRyYWN0IHRoZSBFeHBpcmVzIHZhbHVlIGFuZCB0dXJuIGl0IGludG8gYSBVTklYIHRpbWVzdGFtcCBpZiBuZWVkZWQKICAgICAgICBpZiAoISR0aGlzLT5nZXRFeHBpcmVzKCkgJiYgJHRoaXMtPmdldE1heEFnZSgpKSB7CiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgRXhwaXJlcyBkYXRlCiAgICAgICAgICAgICR0aGlzLT5zZXRFeHBpcmVzKFx0aW1lKCkgKyAkdGhpcy0+Z2V0TWF4QWdlKCkpOwogICAgICAgIH0gZWxzZWlmIChudWxsICE9PSAoJGV4cGlyZXMgPSAkdGhpcy0+Z2V0RXhwaXJlcygpKSAmJiAhXGlzX251bWVyaWMoJGV4cGlyZXMpKSB7CiAgICAgICAgICAgICR0aGlzLT5zZXRFeHBpcmVzKCRleHBpcmVzKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgICRzdHIgPSAkdGhpcy0+ZGF0YVsnTmFtZSddLic9Jy4oJHRoaXMtPmRhdGFbJ1ZhbHVlJ10gPz8gJycpLic7ICc7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmRhdGEgYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgaWYgKCRrICE9PSAnTmFtZScgJiYgJGsgIT09ICdWYWx1ZScgJiYgJHYgIT09IG51bGwgJiYgJHYgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICBpZiAoJGsgPT09ICdFeHBpcmVzJykgewogICAgICAgICAgICAgICAgICAgICRzdHIgLj0gJ0V4cGlyZXM9Jy5cZ21kYXRlKCdELCBkIE0gWSBIOmk6cyBcR1xNXFQnLCAkdikuJzsgJzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHN0ciAuPSAoJHYgPT09IHRydWUgPyAkayA6ICJ7JGt9PXskdn0iKS4nOyAnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gXHJ0cmltKCRzdHIsICc7ICcpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b0FycmF5KCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBjb29raWUgbmFtZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhWydOYW1lJ107CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGNvb2tpZSBuYW1lLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgQ29va2llIG5hbWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE5hbWUoJG5hbWUpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCFpc19zdHJpbmcoJG5hbWUpKSB7CiAgICAgICAgICAgIHRyaWdnZXJfZGVwcmVjYXRpb24oJ2d1enpsZWh0dHAvZ3V6emxlJywgJzcuNCcsICdOb3QgcGFzc2luZyBhIHN0cmluZyB0byAlczo6JXMoKSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGNhdXNlIGFuIGVycm9yIGluIDguMC4nLCBfX0NMQVNTX18sIF9fRlVOQ1RJT05fXyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+ZGF0YVsnTmFtZSddID0gKHN0cmluZykgJG5hbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGNvb2tpZSB2YWx1ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWYWx1ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhWydWYWx1ZSddOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBjb29raWUgdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUgQ29va2llIHZhbHVlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRWYWx1ZSgkdmFsdWUpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCFpc19zdHJpbmcoJHZhbHVlKSkgewogICAgICAgICAgICB0cmlnZ2VyX2RlcHJlY2F0aW9uKCdndXp6bGVodHRwL2d1enpsZScsICc3LjQnLCAnTm90IHBhc3NpbmcgYSBzdHJpbmcgdG8gJXM6OiVzKCkgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBjYXVzZSBhbiBlcnJvciBpbiA4LjAuJywgX19DTEFTU19fLCBfX0ZVTkNUSU9OX18pOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmRhdGFbJ1ZhbHVlJ10gPSAoc3RyaW5nKSAkdmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGRvbWFpbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREb21haW4oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YVsnRG9tYWluJ107CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGRvbWFpbiBvZiB0aGUgY29va2llLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkZG9tYWluCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXREb21haW4oJGRvbWFpbik6IHZvaWQKICAgIHsKICAgICAgICBpZiAoIWlzX3N0cmluZygkZG9tYWluKSAmJiBudWxsICE9PSAkZG9tYWluKSB7CiAgICAgICAgICAgIHRyaWdnZXJfZGVwcmVjYXRpb24oJ2d1enpsZWh0dHAvZ3V6emxlJywgJzcuNCcsICdOb3QgcGFzc2luZyBhIHN0cmluZyBvciBudWxsIHRvICVzOjolcygpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgY2F1c2UgYW4gZXJyb3IgaW4gOC4wLicsIF9fQ0xBU1NfXywgX19GVU5DVElPTl9fKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5kYXRhWydEb21haW4nXSA9IG51bGwgPT09ICRkb21haW4gPyBudWxsIDogKHN0cmluZykgJGRvbWFpbjsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgcGF0aC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGF0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhWydQYXRoJ107CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIHBhdGggb2YgdGhlIGNvb2tpZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoIFBhdGggb2YgdGhlIGNvb2tpZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UGF0aCgkcGF0aCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoIWlzX3N0cmluZygkcGF0aCkpIHsKICAgICAgICAgICAgdHJpZ2dlcl9kZXByZWNhdGlvbignZ3V6emxlaHR0cC9ndXp6bGUnLCAnNy40JywgJ05vdCBwYXNzaW5nIGEgc3RyaW5nIHRvICVzOjolcygpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgY2F1c2UgYW4gZXJyb3IgaW4gOC4wLicsIF9fQ0xBU1NfXywgX19GVU5DVElPTl9fKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5kYXRhWydQYXRoJ10gPSAoc3RyaW5nKSAkcGF0aDsKICAgIH0KCiAgICAvKioKICAgICAqIE1heGltdW0gbGlmZXRpbWUgb2YgdGhlIGNvb2tpZSBpbiBzZWNvbmRzLgogICAgICoKICAgICAqIEByZXR1cm4gaW50fG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1heEFnZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIG51bGwgPT09ICR0aGlzLT5kYXRhWydNYXgtQWdlJ10gPyBudWxsIDogKGludCkgJHRoaXMtPmRhdGFbJ01heC1BZ2UnXTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgbWF4LWFnZSBvZiB0aGUgY29va2llLgogICAgICoKICAgICAqIEBwYXJhbSBpbnR8bnVsbCAkbWF4QWdlIE1heCBhZ2Ugb2YgdGhlIGNvb2tpZSBpbiBzZWNvbmRzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRNYXhBZ2UoJG1heEFnZSk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoIWlzX2ludCgkbWF4QWdlKSAmJiBudWxsICE9PSAkbWF4QWdlKSB7CiAgICAgICAgICAgIHRyaWdnZXJfZGVwcmVjYXRpb24oJ2d1enpsZWh0dHAvZ3V6emxlJywgJzcuNCcsICdOb3QgcGFzc2luZyBhbiBpbnQgb3IgbnVsbCB0byAlczo6JXMoKSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGNhdXNlIGFuIGVycm9yIGluIDguMC4nLCBfX0NMQVNTX18sIF9fRlVOQ1RJT05fXyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+ZGF0YVsnTWF4LUFnZSddID0gJG1heEFnZSA9PT0gbnVsbCA/IG51bGwgOiAoaW50KSAkbWF4QWdlOwogICAgfQoKICAgIC8qKgogICAgICogVGhlIFVOSVggdGltZXN0YW1wIHdoZW4gdGhlIGNvb2tpZSBFeHBpcmVzLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfGludHxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFeHBpcmVzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmRhdGFbJ0V4cGlyZXMnXTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgdW5peCB0aW1lc3RhbXAgZm9yIHdoaWNoIHRoZSBjb29raWUgd2lsbCBleHBpcmUuCiAgICAgKgogICAgICogQHBhcmFtIGludHxzdHJpbmd8bnVsbCAkdGltZXN0YW1wIFVuaXggdGltZXN0YW1wIG9yIGFueSBFbmdsaXNoIHRleHR1YWwgZGF0ZXRpbWUgZGVzY3JpcHRpb24uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRFeHBpcmVzKCR0aW1lc3RhbXApOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCFpc19pbnQoJHRpbWVzdGFtcCkgJiYgIWlzX3N0cmluZygkdGltZXN0YW1wKSAmJiBudWxsICE9PSAkdGltZXN0YW1wKSB7CiAgICAgICAgICAgIHRyaWdnZXJfZGVwcmVjYXRpb24oJ2d1enpsZWh0dHAvZ3V6emxlJywgJzcuNCcsICdOb3QgcGFzc2luZyBhbiBpbnQsIHN0cmluZyBvciBudWxsIHRvICVzOjolcygpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgY2F1c2UgYW4gZXJyb3IgaW4gOC4wLicsIF9fQ0xBU1NfXywgX19GVU5DVElPTl9fKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5kYXRhWydFeHBpcmVzJ10gPSBudWxsID09PSAkdGltZXN0YW1wID8gbnVsbCA6IChcaXNfbnVtZXJpYygkdGltZXN0YW1wKSA/IChpbnQpICR0aW1lc3RhbXAgOiBcc3RydG90aW1lKChzdHJpbmcpICR0aW1lc3RhbXApKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB3aGV0aGVyIG9yIG5vdCB0aGlzIGlzIGEgc2VjdXJlIGNvb2tpZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNlY3VyZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhWydTZWN1cmUnXTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB3aGV0aGVyIG9yIG5vdCB0aGUgY29va2llIGlzIHNlY3VyZS4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkc2VjdXJlIFNldCB0byB0cnVlIG9yIGZhbHNlIGlmIHNlY3VyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0U2VjdXJlKCRzZWN1cmUpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCFpc19ib29sKCRzZWN1cmUpKSB7CiAgICAgICAgICAgIHRyaWdnZXJfZGVwcmVjYXRpb24oJ2d1enpsZWh0dHAvZ3V6emxlJywgJzcuNCcsICdOb3QgcGFzc2luZyBhIGJvb2wgdG8gJXM6OiVzKCkgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBjYXVzZSBhbiBlcnJvciBpbiA4LjAuJywgX19DTEFTU19fLCBfX0ZVTkNUSU9OX18pOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmRhdGFbJ1NlY3VyZSddID0gKGJvb2wpICRzZWN1cmU7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgd2hldGhlciBvciBub3QgdGhpcyBpcyBhIHNlc3Npb24gY29va2llLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbHxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREaXNjYXJkKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmRhdGFbJ0Rpc2NhcmQnXTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB3aGV0aGVyIG9yIG5vdCB0aGlzIGlzIGEgc2Vzc2lvbiBjb29raWUuCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJGRpc2NhcmQgU2V0IHRvIHRydWUgb3IgZmFsc2UgaWYgdGhpcyBpcyBhIHNlc3Npb24gY29va2llCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXREaXNjYXJkKCRkaXNjYXJkKTogdm9pZAogICAgewogICAgICAgIGlmICghaXNfYm9vbCgkZGlzY2FyZCkpIHsKICAgICAgICAgICAgdHJpZ2dlcl9kZXByZWNhdGlvbignZ3V6emxlaHR0cC9ndXp6bGUnLCAnNy40JywgJ05vdCBwYXNzaW5nIGEgYm9vbCB0byAlczo6JXMoKSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGNhdXNlIGFuIGVycm9yIGluIDguMC4nLCBfX0NMQVNTX18sIF9fRlVOQ1RJT05fXyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+ZGF0YVsnRGlzY2FyZCddID0gKGJvb2wpICRkaXNjYXJkOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHdoZXRoZXIgb3Igbm90IHRoaXMgaXMgYW4gSFRUUCBvbmx5IGNvb2tpZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEh0dHBPbmx5KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmRhdGFbJ0h0dHBPbmx5J107CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgd2hldGhlciBvciBub3QgdGhpcyBpcyBhbiBIVFRQIG9ubHkgY29va2llLgogICAgICoKICAgICAqIEBwYXJhbSBib29sICRodHRwT25seSBTZXQgdG8gdHJ1ZSBvciBmYWxzZSBpZiB0aGlzIGlzIEhUVFAgb25seQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SHR0cE9ubHkoJGh0dHBPbmx5KTogdm9pZAogICAgewogICAgICAgIGlmICghaXNfYm9vbCgkaHR0cE9ubHkpKSB7CiAgICAgICAgICAgIHRyaWdnZXJfZGVwcmVjYXRpb24oJ2d1enpsZWh0dHAvZ3V6emxlJywgJzcuNCcsICdOb3QgcGFzc2luZyBhIGJvb2wgdG8gJXM6OiVzKCkgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBjYXVzZSBhbiBlcnJvciBpbiA4LjAuJywgX19DTEFTU19fLCBfX0ZVTkNUSU9OX18pOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmRhdGFbJ0h0dHBPbmx5J10gPSAoYm9vbCkgJGh0dHBPbmx5OwogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2sgaWYgdGhlIGNvb2tpZSBtYXRjaGVzIGEgcGF0aCB2YWx1ZS4KICAgICAqCiAgICAgKiBBIHJlcXVlc3QtcGF0aCBwYXRoLW1hdGNoZXMgYSBnaXZlbiBjb29raWUtcGF0aCBpZiBhdCBsZWFzdCBvbmUgb2YKICAgICAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBob2xkczoKICAgICAqCiAgICAgKiAtIFRoZSBjb29raWUtcGF0aCBhbmQgdGhlIHJlcXVlc3QtcGF0aCBhcmUgaWRlbnRpY2FsLgogICAgICogLSBUaGUgY29va2llLXBhdGggaXMgYSBwcmVmaXggb2YgdGhlIHJlcXVlc3QtcGF0aCwgYW5kIHRoZSBsYXN0CiAgICAgKiAgIGNoYXJhY3RlciBvZiB0aGUgY29va2llLXBhdGggaXMgJXgyRiAoIi8iKS4KICAgICAqIC0gVGhlIGNvb2tpZS1wYXRoIGlzIGEgcHJlZml4IG9mIHRoZSByZXF1ZXN0LXBhdGgsIGFuZCB0aGUgZmlyc3QKICAgICAqICAgY2hhcmFjdGVyIG9mIHRoZSByZXF1ZXN0LXBhdGggdGhhdCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGNvb2tpZS0KICAgICAqICAgcGF0aCBpcyBhICV4MkYgKCIvIikgY2hhcmFjdGVyLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHJlcXVlc3RQYXRoIFBhdGggdG8gY2hlY2sgYWdhaW5zdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbWF0Y2hlc1BhdGgoc3RyaW5nICRyZXF1ZXN0UGF0aCk6IGJvb2wKICAgIHsKICAgICAgICAkY29va2llUGF0aCA9ICR0aGlzLT5nZXRQYXRoKCk7CgogICAgICAgIC8vIE1hdGNoIG9uIGV4YWN0IG1hdGNoZXMgb3Igd2hlbiBwYXRoIGlzIHRoZSBkZWZhdWx0IGVtcHR5ICIvIgogICAgICAgIGlmICgkY29va2llUGF0aCA9PT0gJy8nIHx8ICRjb29raWVQYXRoID09ICRyZXF1ZXN0UGF0aCkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBjb29raWUtcGF0aCBpcyBhIHByZWZpeCBvZiB0aGUgcmVxdWVzdCBwYXRoLgogICAgICAgIGlmICgwICE9PSBcc3RycG9zKCRyZXF1ZXN0UGF0aCwgJGNvb2tpZVBhdGgpKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIC8vIE1hdGNoIGlmIHRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUgY29va2llLXBhdGggaXMgIi8iCiAgICAgICAgaWYgKFxzdWJzdHIoJGNvb2tpZVBhdGgsIC0xLCAxKSA9PT0gJy8nKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgLy8gTWF0Y2ggaWYgdGhlIGZpcnN0IGNoYXJhY3RlciBub3QgaW5jbHVkZWQgaW4gY29va2llIHBhdGggaXMgIi8iCiAgICAgICAgcmV0dXJuIFxzdWJzdHIoJHJlcXVlc3RQYXRoLCBcc3RybGVuKCRjb29raWVQYXRoKSwgMSkgPT09ICcvJzsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrIGlmIHRoZSBjb29raWUgbWF0Y2hlcyBhIGRvbWFpbiB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkb21haW4gRG9tYWluIHRvIGNoZWNrIGFnYWluc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1hdGNoZXNEb21haW4oc3RyaW5nICRkb21haW4pOiBib29sCiAgICB7CiAgICAgICAgJGNvb2tpZURvbWFpbiA9ICR0aGlzLT5nZXREb21haW4oKTsKICAgICAgICBpZiAobnVsbCA9PT0gJGNvb2tpZURvbWFpbikgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIC8vIFJlbW92ZSB0aGUgbGVhZGluZyAnLicgYXMgcGVyIHNwZWMgaW4gUkZDIDYyNjUuCiAgICAgICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2MjY1I3NlY3Rpb24tNS4yLjMKICAgICAgICAkY29va2llRG9tYWluID0gXGx0cmltKFxzdHJ0b2xvd2VyKCRjb29raWVEb21haW4pLCAnLicpOwoKICAgICAgICAkZG9tYWluID0gXHN0cnRvbG93ZXIoJGRvbWFpbik7CgogICAgICAgIC8vIERvbWFpbiBub3Qgc2V0IG9yIGV4YWN0IG1hdGNoLgogICAgICAgIGlmICgnJyA9PT0gJGNvb2tpZURvbWFpbiB8fCAkZG9tYWluID09PSAkY29va2llRG9tYWluKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgLy8gTWF0Y2hpbmcgdGhlIHN1YmRvbWFpbiBhY2NvcmRpbmcgdG8gUkZDIDYyNjUuCiAgICAgICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2MjY1I3NlY3Rpb24tNS4xLjMKICAgICAgICBpZiAoXGZpbHRlcl92YXIoJGRvbWFpbiwgXEZJTFRFUl9WQUxJREFURV9JUCkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIChib29sKSBccHJlZ19tYXRjaCgnL1wuJy5ccHJlZ19xdW90ZSgkY29va2llRG9tYWluLCAnLycpLickLycsICRkb21haW4pOwogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2sgaWYgdGhlIGNvb2tpZSBpcyBleHBpcmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNFeHBpcmVkKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldEV4cGlyZXMoKSAhPT0gbnVsbCAmJiBcdGltZSgpID4gJHRoaXMtPmdldEV4cGlyZXMoKTsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrIGlmIHRoZSBjb29raWUgaXMgdmFsaWQgYWNjb3JkaW5nIHRvIFJGQyA2MjY1LgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbHxzdHJpbmcgUmV0dXJucyB0cnVlIGlmIHZhbGlkIG9yIGFuIGVycm9yIG1lc3NhZ2UgaWYgaW52YWxpZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWRhdGUoKQogICAgewogICAgICAgICRuYW1lID0gJHRoaXMtPmdldE5hbWUoKTsKICAgICAgICBpZiAoJG5hbWUgPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybiAnVGhlIGNvb2tpZSBuYW1lIG11c3Qgbm90IGJlIGVtcHR5JzsKICAgICAgICB9CgogICAgICAgIC8vIENoZWNrIGlmIGFueSBvZiB0aGUgaW52YWxpZCBjaGFyYWN0ZXJzIGFyZSBwcmVzZW50IGluIHRoZSBjb29raWUgbmFtZQogICAgICAgIGlmIChccHJlZ19tYXRjaCgKICAgICAgICAgICAgJy9bXHgwMC1ceDIwXHgyMlx4MjgtXHgyOVx4MmNceDJmXHgzYS1ceDQwXHg1Y1x4N2JceDdkXHg3Zl0vJywKICAgICAgICAgICAgJG5hbWUKICAgICAgICApKSB7CiAgICAgICAgICAgIHJldHVybiAnQ29va2llIG5hbWUgbXVzdCBub3QgY29udGFpbiBpbnZhbGlkIGNoYXJhY3RlcnM6IEFTQ0lJICcKICAgICAgICAgICAgICAgIC4nQ29udHJvbCBjaGFyYWN0ZXJzICgwLTMxOzEyNyksIHNwYWNlLCB0YWIgYW5kIHRoZSAnCiAgICAgICAgICAgICAgICAuJ2ZvbGxvd2luZyBjaGFyYWN0ZXJzOiAoKTw+QCw7OlwiLz89e30nOwogICAgICAgIH0KCiAgICAgICAgLy8gVmFsdWUgbXVzdCBub3QgYmUgbnVsbC4gMCBhbmQgZW1wdHkgc3RyaW5nIGFyZSB2YWxpZC4gRW1wdHkgc3RyaW5ncwogICAgICAgIC8vIGFyZSB0ZWNobmljYWxseSBhZ2FpbnN0IFJGQyA2MjY1LCBidXQga25vd24gdG8gaGFwcGVuIGluIHRoZSB3aWxkLgogICAgICAgICR2YWx1ZSA9ICR0aGlzLT5nZXRWYWx1ZSgpOwogICAgICAgIGlmICgkdmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuICdUaGUgY29va2llIHZhbHVlIG11c3Qgbm90IGJlIGVtcHR5JzsKICAgICAgICB9CgogICAgICAgIC8vIERvbWFpbnMgbXVzdCBub3QgYmUgZW1wdHksIGJ1dCBjYW4gYmUgMC4gIjAiIGlzIG5vdCBhIHZhbGlkIGludGVybmV0CiAgICAgICAgLy8gZG9tYWluLCBidXQgbWF5IGJlIHVzZWQgYXMgc2VydmVyIG5hbWUgaW4gYSBwcml2YXRlIG5ldHdvcmsuCiAgICAgICAgJGRvbWFpbiA9ICR0aGlzLT5nZXREb21haW4oKTsKICAgICAgICBpZiAoJGRvbWFpbiA9PT0gbnVsbCB8fCAkZG9tYWluID09PSAnJykgewogICAgICAgICAgICByZXR1cm4gJ1RoZSBjb29raWUgZG9tYWluIG11c3Qgbm90IGJlIGVtcHR5JzsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEV4Y2VwdGlvbjsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwoKLyoqCiAqIEV4Y2VwdGlvbiB3aGVuIGFuIEhUVFAgZXJyb3Igb2NjdXJzICg0eHggb3IgNXh4IGVycm9yKQogKi8KY2xhc3MgQmFkUmVzcG9uc2VFeGNlcHRpb24gZXh0ZW5kcyBSZXF1ZXN0RXhjZXB0aW9uCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBzdHJpbmcgJG1lc3NhZ2UsCiAgICAgICAgUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwKICAgICAgICBSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UsCiAgICAgICAgP1xUaHJvd2FibGUgJHByZXZpb3VzID0gbnVsbCwKICAgICAgICBhcnJheSAkaGFuZGxlckNvbnRleHQgPSBbXQogICAgKSB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkbWVzc2FnZSwgJHJlcXVlc3QsICRyZXNwb25zZSwgJHByZXZpb3VzLCAkaGFuZGxlckNvbnRleHQpOwogICAgfQoKICAgIC8qKgogICAgICogQ3VycmVudCBleGNlcHRpb24gYW5kIHRoZSBvbmVzIHRoYXQgZXh0ZW5kIGl0IHdpbGwgYWx3YXlzIGhhdmUgYSByZXNwb25zZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhc1Jlc3BvbnNlKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoaXMgZnVuY3Rpb24gbmFycm93cyB0aGUgcmV0dXJuIHR5cGUgZnJvbSB0aGUgcGFyZW50IGNsYXNzIGFuZCBkb2VzIG5vdCBhbGxvdyBpdCB0byBiZSBudWxsYWJsZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlc3BvbnNlKCk6IFJlc3BvbnNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgLyoqIEB2YXIgUmVzcG9uc2VJbnRlcmZhY2UgKi8KICAgICAgICByZXR1cm4gcGFyZW50OjpnZXRSZXNwb25zZSgpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEV4Y2VwdGlvbjsKCi8qKgogKiBFeGNlcHRpb24gd2hlbiBhIGNsaWVudCBlcnJvciBpcyBlbmNvdW50ZXJlZCAoNHh4IGNvZGVzKQogKi8KY2xhc3MgQ2xpZW50RXhjZXB0aW9uIGV4dGVuZHMgQmFkUmVzcG9uc2VFeGNlcHRpb24Kewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEV4Y2VwdGlvbjsKCnVzZSBQc3JcSHR0cFxDbGllbnRcTmV0d29ya0V4Y2VwdGlvbkludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTsKCi8qKgogKiBFeGNlcHRpb24gdGhyb3duIHdoZW4gYSBjb25uZWN0aW9uIGNhbm5vdCBiZSBlc3RhYmxpc2hlZC4KICoKICogTm90ZSB0aGF0IG5vIHJlc3BvbnNlIGlzIHByZXNlbnQgZm9yIGEgQ29ubmVjdEV4Y2VwdGlvbgogKi8KY2xhc3MgQ29ubmVjdEV4Y2VwdGlvbiBleHRlbmRzIFRyYW5zZmVyRXhjZXB0aW9uIGltcGxlbWVudHMgTmV0d29ya0V4Y2VwdGlvbkludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgUmVxdWVzdEludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRyZXF1ZXN0OwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICRoYW5kbGVyQ29udGV4dDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgc3RyaW5nICRtZXNzYWdlLAogICAgICAgIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsCiAgICAgICAgP1xUaHJvd2FibGUgJHByZXZpb3VzID0gbnVsbCwKICAgICAgICBhcnJheSAkaGFuZGxlckNvbnRleHQgPSBbXQogICAgKSB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkbWVzc2FnZSwgMCwgJHByZXZpb3VzKTsKICAgICAgICAkdGhpcy0+cmVxdWVzdCA9ICRyZXF1ZXN0OwogICAgICAgICR0aGlzLT5oYW5kbGVyQ29udGV4dCA9ICRoYW5kbGVyQ29udGV4dDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgcmVxdWVzdCB0aGF0IGNhdXNlZCB0aGUgZXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZXF1ZXN0KCk6IFJlcXVlc3RJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlcXVlc3Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgY29udGV4dHVhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXJyb3IgZnJvbSB0aGUgdW5kZXJseWluZyBoYW5kbGVyLgogICAgICoKICAgICAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGFycmF5IHdpbGwgdmFyeSBkZXBlbmRpbmcgb24gd2hpY2ggaGFuZGxlciB5b3UgYXJlCiAgICAgKiB1c2luZy4gSXQgbWF5IGFsc28gYmUganVzdCBhbiBlbXB0eSBhcnJheS4gUmVseWluZyBvbiB0aGlzIGRhdGEgd2lsbAogICAgICogY291cGxlIHlvdSB0byBhIHNwZWNpZmljIGhhbmRsZXIsIGJ1dCBjYW4gZ2l2ZSBtb3JlIGRlYnVnIGluZm9ybWF0aW9uCiAgICAgKiB3aGVuIG5lZWRlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEhhbmRsZXJDb250ZXh0KCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oYW5kbGVyQ29udGV4dDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEV4Y2VwdGlvbjsKCnVzZSBQc3JcSHR0cFxDbGllbnRcQ2xpZW50RXhjZXB0aW9uSW50ZXJmYWNlOwoKaW50ZXJmYWNlIEd1enpsZUV4Y2VwdGlvbiBleHRlbmRzIENsaWVudEV4Y2VwdGlvbkludGVyZmFjZQp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEV4Y2VwdGlvbjsKCmZpbmFsIGNsYXNzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBleHRlbmRzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaW1wbGVtZW50cyBHdXp6bGVFeGNlcHRpb24Kewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEV4Y2VwdGlvbjsKCnVzZSBHdXp6bGVIdHRwXEJvZHlTdW1tYXJpemVyOwp1c2UgR3V6emxlSHR0cFxCb2R5U3VtbWFyaXplckludGVyZmFjZTsKdXNlIFBzclxIdHRwXENsaWVudFxSZXF1ZXN0RXhjZXB0aW9uSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZTsKCi8qKgogKiBIVFRQIFJlcXVlc3QgZXhjZXB0aW9uCiAqLwpjbGFzcyBSZXF1ZXN0RXhjZXB0aW9uIGV4dGVuZHMgVHJhbnNmZXJFeGNlcHRpb24gaW1wbGVtZW50cyBSZXF1ZXN0RXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHZhciBSZXF1ZXN0SW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJHJlcXVlc3Q7CgogICAgLyoqCiAgICAgKiBAdmFyIFJlc3BvbnNlSW50ZXJmYWNlfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkcmVzcG9uc2U7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgJGhhbmRsZXJDb250ZXh0OwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBzdHJpbmcgJG1lc3NhZ2UsCiAgICAgICAgUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwKICAgICAgICA/UmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlID0gbnVsbCwKICAgICAgICA/XFRocm93YWJsZSAkcHJldmlvdXMgPSBudWxsLAogICAgICAgIGFycmF5ICRoYW5kbGVyQ29udGV4dCA9IFtdCiAgICApIHsKICAgICAgICAvLyBTZXQgdGhlIGNvZGUgb2YgdGhlIGV4Y2VwdGlvbiBpZiB0aGUgcmVzcG9uc2UgaXMgc2V0IGFuZCBub3QgZnV0dXJlLgogICAgICAgICRjb2RlID0gJHJlc3BvbnNlID8gJHJlc3BvbnNlLT5nZXRTdGF0dXNDb2RlKCkgOiAwOwogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJG1lc3NhZ2UsICRjb2RlLCAkcHJldmlvdXMpOwogICAgICAgICR0aGlzLT5yZXF1ZXN0ID0gJHJlcXVlc3Q7CiAgICAgICAgJHRoaXMtPnJlc3BvbnNlID0gJHJlc3BvbnNlOwogICAgICAgICR0aGlzLT5oYW5kbGVyQ29udGV4dCA9ICRoYW5kbGVyQ29udGV4dDsKICAgIH0KCiAgICAvKioKICAgICAqIFdyYXAgbm9uLVJlcXVlc3RFeGNlcHRpb25zIHdpdGggYSBSZXF1ZXN0RXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gd3JhcEV4Y2VwdGlvbihSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBcVGhyb3dhYmxlICRlKTogUmVxdWVzdEV4Y2VwdGlvbgogICAgewogICAgICAgIHJldHVybiAkZSBpbnN0YW5jZW9mIFJlcXVlc3RFeGNlcHRpb24gPyAkZSA6IG5ldyBSZXF1ZXN0RXhjZXB0aW9uKCRlLT5nZXRNZXNzYWdlKCksICRyZXF1ZXN0LCBudWxsLCAkZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBGYWN0b3J5IG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgZXhjZXB0aW9uIHdpdGggYSBub3JtYWxpemVkIGVycm9yIG1lc3NhZ2UKICAgICAqCiAgICAgKiBAcGFyYW0gUmVxdWVzdEludGVyZmFjZSAgICAgICAgICAgICAkcmVxdWVzdCAgICAgICAgUmVxdWVzdCBzZW50CiAgICAgKiBAcGFyYW0gUmVzcG9uc2VJbnRlcmZhY2UgICAgICAgICAgICAkcmVzcG9uc2UgICAgICAgUmVzcG9uc2UgcmVjZWl2ZWQKICAgICAqIEBwYXJhbSBcVGhyb3dhYmxlfG51bGwgICAgICAgICAgICAgICRwcmV2aW91cyAgICAgICBQcmV2aW91cyBleGNlcHRpb24KICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICAgICAgICAgICAgICRoYW5kbGVyQ29udGV4dCBPcHRpb25hbCBoYW5kbGVyIGNvbnRleHQKICAgICAqIEBwYXJhbSBCb2R5U3VtbWFyaXplckludGVyZmFjZXxudWxsICRib2R5U3VtbWFyaXplciBPcHRpb25hbCBib2R5IHN1bW1hcml6ZXIKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoCiAgICAgICAgUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwKICAgICAgICA/UmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlID0gbnVsbCwKICAgICAgICA/XFRocm93YWJsZSAkcHJldmlvdXMgPSBudWxsLAogICAgICAgIGFycmF5ICRoYW5kbGVyQ29udGV4dCA9IFtdLAogICAgICAgID9Cb2R5U3VtbWFyaXplckludGVyZmFjZSAkYm9keVN1bW1hcml6ZXIgPSBudWxsCiAgICApOiBzZWxmIHsKICAgICAgICBpZiAoISRyZXNwb25zZSkgewogICAgICAgICAgICByZXR1cm4gbmV3IHNlbGYoCiAgICAgICAgICAgICAgICAnRXJyb3IgY29tcGxldGluZyByZXF1ZXN0JywKICAgICAgICAgICAgICAgICRyZXF1ZXN0LAogICAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICAgICRwcmV2aW91cywKICAgICAgICAgICAgICAgICRoYW5kbGVyQ29udGV4dAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJGxldmVsID0gKGludCkgXGZsb29yKCRyZXNwb25zZS0+Z2V0U3RhdHVzQ29kZSgpIC8gMTAwKTsKICAgICAgICBpZiAoJGxldmVsID09PSA0KSB7CiAgICAgICAgICAgICRsYWJlbCA9ICdDbGllbnQgZXJyb3InOwogICAgICAgICAgICAkY2xhc3NOYW1lID0gQ2xpZW50RXhjZXB0aW9uOjpjbGFzczsKICAgICAgICB9IGVsc2VpZiAoJGxldmVsID09PSA1KSB7CiAgICAgICAgICAgICRsYWJlbCA9ICdTZXJ2ZXIgZXJyb3InOwogICAgICAgICAgICAkY2xhc3NOYW1lID0gU2VydmVyRXhjZXB0aW9uOjpjbGFzczsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkbGFiZWwgPSAnVW5zdWNjZXNzZnVsIHJlcXVlc3QnOwogICAgICAgICAgICAkY2xhc3NOYW1lID0gX19DTEFTU19fOwogICAgICAgIH0KCiAgICAgICAgJHVyaSA9IFxHdXp6bGVIdHRwXFBzcjdcVXRpbHM6OnJlZGFjdFVzZXJJbmZvKCRyZXF1ZXN0LT5nZXRVcmkoKSk7CgogICAgICAgIC8vIENsaWVudCBFcnJvcjogYEdFVCAvYCByZXN1bHRlZCBpbiBhIGA0MDQgTm90IEZvdW5kYCByZXNwb25zZToKICAgICAgICAvLyA8aHRtbD4gLi4uICh0cnVuY2F0ZWQpCiAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgJyVzOiBgJXMgJXNgIHJlc3VsdGVkIGluIGEgYCVzICVzYCByZXNwb25zZScsCiAgICAgICAgICAgICRsYWJlbCwKICAgICAgICAgICAgJHJlcXVlc3QtPmdldE1ldGhvZCgpLAogICAgICAgICAgICAkdXJpLT5fX3RvU3RyaW5nKCksCiAgICAgICAgICAgICRyZXNwb25zZS0+Z2V0U3RhdHVzQ29kZSgpLAogICAgICAgICAgICAkcmVzcG9uc2UtPmdldFJlYXNvblBocmFzZSgpCiAgICAgICAgKTsKCiAgICAgICAgJHN1bW1hcnkgPSAoJGJvZHlTdW1tYXJpemVyID8/IG5ldyBCb2R5U3VtbWFyaXplcigpKS0+c3VtbWFyaXplKCRyZXNwb25zZSk7CgogICAgICAgIGlmICgkc3VtbWFyeSAhPT0gbnVsbCkgewogICAgICAgICAgICAkbWVzc2FnZSAuPSAiOlxueyRzdW1tYXJ5fVxuIjsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgJGNsYXNzTmFtZSgkbWVzc2FnZSwgJHJlcXVlc3QsICRyZXNwb25zZSwgJHByZXZpb3VzLCAkaGFuZGxlckNvbnRleHQpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSByZXF1ZXN0IHRoYXQgY2F1c2VkIHRoZSBleGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlcXVlc3QoKTogUmVxdWVzdEludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVxdWVzdDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgYXNzb2NpYXRlZCByZXNwb25zZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzcG9uc2UoKTogP1Jlc3BvbnNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXNwb25zZTsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrIGlmIGEgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNSZXNwb25zZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXNwb25zZSAhPT0gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBjb250ZXh0dWFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBlcnJvciBmcm9tIHRoZSB1bmRlcmx5aW5nIGhhbmRsZXIuCiAgICAgKgogICAgICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgYXJyYXkgd2lsbCB2YXJ5IGRlcGVuZGluZyBvbiB3aGljaCBoYW5kbGVyIHlvdSBhcmUKICAgICAqIHVzaW5nLiBJdCBtYXkgYWxzbyBiZSBqdXN0IGFuIGVtcHR5IGFycmF5LiBSZWx5aW5nIG9uIHRoaXMgZGF0YSB3aWxsCiAgICAgKiBjb3VwbGUgeW91IHRvIGEgc3BlY2lmaWMgaGFuZGxlciwgYnV0IGNhbiBnaXZlIG1vcmUgZGVidWcgaW5mb3JtYXRpb24KICAgICAqIHdoZW4gbmVlZGVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGFuZGxlckNvbnRleHQoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmhhbmRsZXJDb250ZXh0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEV4Y2VwdGlvbjsKCi8qKgogKiBFeGNlcHRpb24gd2hlbiBhIHNlcnZlciBlcnJvciBpcyBlbmNvdW50ZXJlZCAoNXh4IGNvZGVzKQogKi8KY2xhc3MgU2VydmVyRXhjZXB0aW9uIGV4dGVuZHMgQmFkUmVzcG9uc2VFeGNlcHRpb24Kewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEV4Y2VwdGlvbjsKCmNsYXNzIFRvb01hbnlSZWRpcmVjdHNFeGNlcHRpb24gZXh0ZW5kcyBSZXF1ZXN0RXhjZXB0aW9uCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEV4Y2VwdGlvbjsKCmNsYXNzIFRyYW5zZmVyRXhjZXB0aW9uIGV4dGVuZHMgXFJ1bnRpbWVFeGNlcHRpb24gaW1wbGVtZW50cyBHdXp6bGVFeGNlcHRpb24Kewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/functions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKLyoqCiAqIERlYnVnIGZ1bmN0aW9uIHVzZWQgdG8gZGVzY3JpYmUgdGhlIHByb3ZpZGVkIHZhbHVlIHR5cGUgYW5kIGNsYXNzLgogKgogKiBAcGFyYW0gbWl4ZWQgJGlucHV0IEFueSB0eXBlIG9mIHZhcmlhYmxlIHRvIGRlc2NyaWJlIHRoZSB0eXBlIG9mLiBUaGlzCiAqICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIG1pc3NlcyBhIHR5cGVoaW50IGJlY2F1c2Ugb2YgdGhhdC4KICoKICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHRoZSB0eXBlIG9mIHRoZSB2YXJpYWJsZSBhbmQKICogICAgICAgICAgICAgICAgaWYgYSBjbGFzcyBpcyBwcm92aWRlZCwgdGhlIGNsYXNzIG5hbWUuCiAqCiAqIEBkZXByZWNhdGVkIGRlc2NyaWJlX3R5cGUgd2lsbCBiZSByZW1vdmVkIGluIGd1enpsZWh0dHAvZ3V6emxlOjguMC4gVXNlIFV0aWxzOjpkZXNjcmliZVR5cGUgaW5zdGVhZC4KICovCmZ1bmN0aW9uIGRlc2NyaWJlX3R5cGUoJGlucHV0KTogc3RyaW5nCnsKICAgIHJldHVybiBVdGlsczo6ZGVzY3JpYmVUeXBlKCRpbnB1dCk7Cn0KCi8qKgogKiBQYXJzZXMgYW4gYXJyYXkgb2YgaGVhZGVyIGxpbmVzIGludG8gYW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgaGVhZGVycy4KICoKICogQHBhcmFtIGl0ZXJhYmxlICRsaW5lcyBIZWFkZXIgbGluZXMgYXJyYXkgb2Ygc3RyaW5ncyBpbiB0aGUgZm9sbG93aW5nCiAqICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAiTmFtZTogVmFsdWUiCiAqCiAqIEBkZXByZWNhdGVkIGhlYWRlcnNfZnJvbV9saW5lcyB3aWxsIGJlIHJlbW92ZWQgaW4gZ3V6emxlaHR0cC9ndXp6bGU6OC4wLiBVc2UgVXRpbHM6OmhlYWRlcnNGcm9tTGluZXMgaW5zdGVhZC4KICovCmZ1bmN0aW9uIGhlYWRlcnNfZnJvbV9saW5lcyhpdGVyYWJsZSAkbGluZXMpOiBhcnJheQp7CiAgICByZXR1cm4gVXRpbHM6OmhlYWRlcnNGcm9tTGluZXMoJGxpbmVzKTsKfQoKLyoqCiAqIFJldHVybnMgYSBkZWJ1ZyBzdHJlYW0gYmFzZWQgb24gdGhlIHByb3ZpZGVkIHZhcmlhYmxlLgogKgogKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIE9wdGlvbmFsIHZhbHVlCiAqCiAqIEByZXR1cm4gcmVzb3VyY2UKICoKICogQGRlcHJlY2F0ZWQgZGVidWdfcmVzb3VyY2Ugd2lsbCBiZSByZW1vdmVkIGluIGd1enpsZWh0dHAvZ3V6emxlOjguMC4gVXNlIFV0aWxzOjpkZWJ1Z1Jlc291cmNlIGluc3RlYWQuCiAqLwpmdW5jdGlvbiBkZWJ1Z19yZXNvdXJjZSgkdmFsdWUgPSBudWxsKQp7CiAgICByZXR1cm4gVXRpbHM6OmRlYnVnUmVzb3VyY2UoJHZhbHVlKTsKfQoKLyoqCiAqIENob29zZXMgYW5kIGNyZWF0ZXMgYSBkZWZhdWx0IGhhbmRsZXIgdG8gdXNlIGJhc2VkIG9uIHRoZSBlbnZpcm9ubWVudC4KICoKICogVGhlIHJldHVybmVkIGhhbmRsZXIgaXMgbm90IHdyYXBwZWQgYnkgYW55IGRlZmF1bHQgbWlkZGxld2FyZXMuCiAqCiAqIEByZXR1cm4gY2FsbGFibGUoXFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZSwgYXJyYXkpOiBQcm9taXNlXFByb21pc2VJbnRlcmZhY2UgUmV0dXJucyB0aGUgYmVzdCBoYW5kbGVyIGZvciB0aGUgZ2l2ZW4gc3lzdGVtLgogKgogKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIGlmIG5vIHZpYWJsZSBIYW5kbGVyIGlzIGF2YWlsYWJsZS4KICoKICogQGRlcHJlY2F0ZWQgY2hvb3NlX2hhbmRsZXIgd2lsbCBiZSByZW1vdmVkIGluIGd1enpsZWh0dHAvZ3V6emxlOjguMC4gVXNlIFV0aWxzOjpjaG9vc2VIYW5kbGVyIGluc3RlYWQuCiAqLwpmdW5jdGlvbiBjaG9vc2VfaGFuZGxlcigpOiBjYWxsYWJsZQp7CiAgICByZXR1cm4gVXRpbHM6OmNob29zZUhhbmRsZXIoKTsKfQoKLyoqCiAqIEdldCB0aGUgZGVmYXVsdCBVc2VyLUFnZW50IHN0cmluZyB0byB1c2Ugd2l0aCBHdXp6bGUuCiAqCiAqIEBkZXByZWNhdGVkIGRlZmF1bHRfdXNlcl9hZ2VudCB3aWxsIGJlIHJlbW92ZWQgaW4gZ3V6emxlaHR0cC9ndXp6bGU6OC4wLiBVc2UgVXRpbHM6OmRlZmF1bHRVc2VyQWdlbnQgaW5zdGVhZC4KICovCmZ1bmN0aW9uIGRlZmF1bHRfdXNlcl9hZ2VudCgpOiBzdHJpbmcKewogICAgcmV0dXJuIFV0aWxzOjpkZWZhdWx0VXNlckFnZW50KCk7Cn0KCi8qKgogKiBSZXR1cm5zIHRoZSBkZWZhdWx0IGNhY2VydCBidW5kbGUgZm9yIHRoZSBjdXJyZW50IHN5c3RlbS4KICoKICogRmlyc3QsIHRoZSBvcGVuc3NsLmNhZmlsZSBhbmQgY3VybC5jYWluZm8gcGhwLmluaSBzZXR0aW5ncyBhcmUgY2hlY2tlZC4KICogSWYgdGhvc2Ugc2V0dGluZ3MgYXJlIG5vdCBjb25maWd1cmVkLCB0aGVuIHRoZSBjb21tb24gbG9jYXRpb25zIGZvcgogKiBidW5kbGVzIGZvdW5kIG9uIFJlZCBIYXQsIENlbnRPUywgRmVkb3JhLCBVYnVudHUsIERlYmlhbiwgRnJlZUJTRCwgT1MgWAogKiBhbmQgV2luZG93cyBhcmUgY2hlY2tlZC4gSWYgYW55IG9mIHRoZXNlIGZpbGUgbG9jYXRpb25zIGFyZSBmb3VuZCBvbgogKiBkaXNrLCB0aGV5IHdpbGwgYmUgdXRpbGl6ZWQuCiAqCiAqIE5vdGU6IHRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBpcyBjYWNoZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMuCiAqCiAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gaWYgbm8gYnVuZGxlIGNhbiBiZSBmb3VuZC4KICoKICogQGRlcHJlY2F0ZWQgZGVmYXVsdF9jYV9idW5kbGUgd2lsbCBiZSByZW1vdmVkIGluIGd1enpsZWh0dHAvZ3V6emxlOjguMC4gVGhpcyBmdW5jdGlvbiBpcyBub3QgbmVlZGVkIGluIFBIUCA1LjYrLgogKi8KZnVuY3Rpb24gZGVmYXVsdF9jYV9idW5kbGUoKTogc3RyaW5nCnsKICAgIHJldHVybiBVdGlsczo6ZGVmYXVsdENhQnVuZGxlKCk7Cn0KCi8qKgogKiBDcmVhdGVzIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIGxvd2VyY2FzZSBoZWFkZXIgbmFtZXMgdG8gdGhlIGFjdHVhbAogKiBoZWFkZXIgY2FzaW5nLgogKgogKiBAZGVwcmVjYXRlZCBub3JtYWxpemVfaGVhZGVyX2tleXMgd2lsbCBiZSByZW1vdmVkIGluIGd1enpsZWh0dHAvZ3V6emxlOjguMC4gVXNlIFV0aWxzOjpub3JtYWxpemVIZWFkZXJLZXlzIGluc3RlYWQuCiAqLwpmdW5jdGlvbiBub3JtYWxpemVfaGVhZGVyX2tleXMoYXJyYXkgJGhlYWRlcnMpOiBhcnJheQp7CiAgICByZXR1cm4gVXRpbHM6Om5vcm1hbGl6ZUhlYWRlcktleXMoJGhlYWRlcnMpOwp9CgovKioKICogUmV0dXJucyB0cnVlIGlmIHRoZSBwcm92aWRlZCBob3N0IG1hdGNoZXMgYW55IG9mIHRoZSBubyBwcm94eSBhcmVhcy4KICoKICogVGhpcyBtZXRob2Qgd2lsbCBzdHJpcCBhIHBvcnQgZnJvbSB0aGUgaG9zdCBpZiBpdCBpcyBwcmVzZW50LiBFYWNoIHBhdHRlcm4KICogY2FuIGJlIG1hdGNoZWQgd2l0aCBhbiBleGFjdCBtYXRjaCAoZS5nLiwgImZvby5jb20iID09ICJmb28uY29tIikgb3IgYQogKiBwYXJ0aWFsIG1hdGNoOiAoZS5nLiwgImZvby5jb20iID09ICJiYXouZm9vLmNvbSIgYW5kICIuZm9vLmNvbSIgPT0KICogImJhei5mb28uY29tIiwgYnV0ICIuZm9vLmNvbSIgIT0gImZvby5jb20iKS4KICoKICogQXJlYXMgYXJlIG1hdGNoZWQgaW4gdGhlIGZvbGxvd2luZyBjYXNlczoKICogMS4gIioiICh3aXRob3V0IHF1b3RlcykgYWx3YXlzIG1hdGNoZXMgYW55IGhvc3RzLgogKiAyLiBBbiBleGFjdCBtYXRjaC4KICogMy4gVGhlIGFyZWEgc3RhcnRzIHdpdGggIi4iIGFuZCB0aGUgYXJlYSBpcyB0aGUgbGFzdCBwYXJ0IG9mIHRoZSBob3N0LiBlLmcuCiAqICAgICcubWl0LmVkdScgd2lsbCBtYXRjaCBhbnkgaG9zdCB0aGF0IGVuZHMgd2l0aCAnLm1pdC5lZHUnLgogKgogKiBAcGFyYW0gc3RyaW5nICAgJGhvc3QgICAgICAgICBIb3N0IHRvIGNoZWNrIGFnYWluc3QgdGhlIHBhdHRlcm5zLgogKiBAcGFyYW0gc3RyaW5nW10gJG5vUHJveHlBcnJheSBBbiBhcnJheSBvZiBob3N0IHBhdHRlcm5zLgogKgogKiBAdGhyb3dzIEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICoKICogQGRlcHJlY2F0ZWQgaXNfaG9zdF9pbl9ub3Byb3h5IHdpbGwgYmUgcmVtb3ZlZCBpbiBndXp6bGVodHRwL2d1enpsZTo4LjAuIFVzZSBVdGlsczo6aXNIb3N0SW5Ob1Byb3h5IGluc3RlYWQuCiAqLwpmdW5jdGlvbiBpc19ob3N0X2luX25vcHJveHkoc3RyaW5nICRob3N0LCBhcnJheSAkbm9Qcm94eUFycmF5KTogYm9vbAp7CiAgICByZXR1cm4gVXRpbHM6OmlzSG9zdEluTm9Qcm94eSgkaG9zdCwgJG5vUHJveHlBcnJheSk7Cn0KCi8qKgogKiBXcmFwcGVyIGZvciBqc29uX2RlY29kZSB0aGF0IHRocm93cyB3aGVuIGFuIGVycm9yIG9jY3Vycy4KICoKICogQHBhcmFtIHN0cmluZyAkanNvbiAgICBKU09OIGRhdGEgdG8gcGFyc2UKICogQHBhcmFtIGJvb2wgICAkYXNzb2MgICBXaGVuIHRydWUsIHJldHVybmVkIG9iamVjdHMgd2lsbCBiZSBjb252ZXJ0ZWQKICogICAgICAgICAgICAgICAgICAgICAgICBpbnRvIGFzc29jaWF0aXZlIGFycmF5cy4KICogQHBhcmFtIGludCAgICAkZGVwdGggICBVc2VyIHNwZWNpZmllZCByZWN1cnNpb24gZGVwdGguCiAqIEBwYXJhbSBpbnQgICAgJG9wdGlvbnMgQml0bWFzayBvZiBKU09OIGRlY29kZSBvcHRpb25zLgogKgogKiBAcmV0dXJuIG9iamVjdHxhcnJheXxzdHJpbmd8aW50fGZsb2F0fGJvb2x8bnVsbAogKgogKiBAdGhyb3dzIEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIEpTT04gY2Fubm90IGJlIGRlY29kZWQuCiAqCiAqIEBzZWUgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uanNvbi1kZWNvZGUucGhwCiAqIEBkZXByZWNhdGVkIGpzb25fZGVjb2RlIHdpbGwgYmUgcmVtb3ZlZCBpbiBndXp6bGVodHRwL2d1enpsZTo4LjAuIFVzZSBVdGlsczo6anNvbkRlY29kZSBpbnN0ZWFkLgogKi8KZnVuY3Rpb24ganNvbl9kZWNvZGUoc3RyaW5nICRqc29uLCBib29sICRhc3NvYyA9IGZhbHNlLCBpbnQgJGRlcHRoID0gNTEyLCBpbnQgJG9wdGlvbnMgPSAwKQp7CiAgICByZXR1cm4gVXRpbHM6Ompzb25EZWNvZGUoJGpzb24sICRhc3NvYywgJGRlcHRoLCAkb3B0aW9ucyk7Cn0KCi8qKgogKiBXcmFwcGVyIGZvciBKU09OIGVuY29kaW5nIHRoYXQgdGhyb3dzIHdoZW4gYW4gZXJyb3Igb2NjdXJzLgogKgogKiBAcGFyYW0gbWl4ZWQgJHZhbHVlICAgVGhlIHZhbHVlIGJlaW5nIGVuY29kZWQKICogQHBhcmFtIGludCAgICRvcHRpb25zIEpTT04gZW5jb2RlIG9wdGlvbiBiaXRtYXNrCiAqIEBwYXJhbSBpbnQgICAkZGVwdGggICBTZXQgdGhlIG1heGltdW0gZGVwdGguIE11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uCiAqCiAqIEB0aHJvd3MgRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgSlNPTiBjYW5ub3QgYmUgZW5jb2RlZC4KICoKICogQHNlZSBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5qc29uLWVuY29kZS5waHAKICogQGRlcHJlY2F0ZWQganNvbl9lbmNvZGUgd2lsbCBiZSByZW1vdmVkIGluIGd1enpsZWh0dHAvZ3V6emxlOjguMC4gVXNlIFV0aWxzOjpqc29uRW5jb2RlIGluc3RlYWQuCiAqLwpmdW5jdGlvbiBqc29uX2VuY29kZSgkdmFsdWUsIGludCAkb3B0aW9ucyA9IDAsIGludCAkZGVwdGggPSA1MTIpOiBzdHJpbmcKewogICAgcmV0dXJuIFV0aWxzOjpqc29uRW5jb2RlKCR2YWx1ZSwgJG9wdGlvbnMsICRkZXB0aCk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/functions_include.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIERvbid0IHJlZGVmaW5lIHRoZSBmdW5jdGlvbnMgaWYgaW5jbHVkZWQgbXVsdGlwbGUgdGltZXMuCmlmICghXGZ1bmN0aW9uX2V4aXN0cygnR3V6emxlSHR0cFxkZXNjcmliZV90eXBlJykpIHsKICAgIHJlcXVpcmUgX19ESVJfXy4nL2Z1bmN0aW9ucy5waHAnOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEhhbmRsZXI7Cgp1c2UgR3V6emxlSHR0cFxFeGNlcHRpb25cQ29ubmVjdEV4Y2VwdGlvbjsKdXNlIEd1enpsZUh0dHBcRXhjZXB0aW9uXFJlcXVlc3RFeGNlcHRpb247CnVzZSBHdXp6bGVIdHRwXFByb21pc2UgYXMgUDsKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxGdWxmaWxsZWRQcm9taXNlOwp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2VJbnRlcmZhY2U7CnVzZSBHdXp6bGVIdHRwXFBzcjdcTGF6eU9wZW5TdHJlYW07CnVzZSBHdXp6bGVIdHRwXFRyYW5zZmVyU3RhdHM7CnVzZSBHdXp6bGVIdHRwXFV0aWxzOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2U7CgovKioKICogQ3JlYXRlcyBjdXJsIHJlc291cmNlcyBmcm9tIGEgcmVxdWVzdAogKgogKiBAZmluYWwKICovCmNsYXNzIEN1cmxGYWN0b3J5IGltcGxlbWVudHMgQ3VybEZhY3RvcnlJbnRlcmZhY2UKewogICAgcHVibGljIGNvbnN0IENVUkxfVkVSU0lPTl9TVFIgPSAnY3VybF92ZXJzaW9uJzsKCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBMT1dfQ1VSTF9WRVJTSU9OX05VTUJFUiA9ICc3LjIxLjInOwoKICAgIC8qKgogICAgICogQHZhciByZXNvdXJjZVtdfFxDdXJsSGFuZGxlW10KICAgICAqLwogICAgcHJpdmF0ZSAkaGFuZGxlcyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBpbnQgVG90YWwgbnVtYmVyIG9mIGlkbGUgaGFuZGxlcyB0byBrZWVwIGluIGNhY2hlCiAgICAgKi8KICAgIHByaXZhdGUgJG1heEhhbmRsZXM7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICRtYXhIYW5kbGVzIE1heGltdW0gbnVtYmVyIG9mIGlkbGUgaGFuZGxlcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGludCAkbWF4SGFuZGxlcykKICAgIHsKICAgICAgICAkdGhpcy0+bWF4SGFuZGxlcyA9ICRtYXhIYW5kbGVzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpOiBFYXN5SGFuZGxlCiAgICB7CiAgICAgICAgJHByb3RvY29sVmVyc2lvbiA9ICRyZXF1ZXN0LT5nZXRQcm90b2NvbFZlcnNpb24oKTsKCiAgICAgICAgaWYgKCcyJyA9PT0gJHByb3RvY29sVmVyc2lvbiB8fCAnMi4wJyA9PT0gJHByb3RvY29sVmVyc2lvbikgewogICAgICAgICAgICBpZiAoIXNlbGY6OnN1cHBvcnRzSHR0cDIoKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IENvbm5lY3RFeGNlcHRpb24oJ0hUVFAvMiBpcyBzdXBwb3J0ZWQgYnkgdGhlIGNVUkwgaGFuZGxlciwgaG93ZXZlciBsaWJjdXJsIGlzIGJ1aWx0IHdpdGhvdXQgSFRUUC8yIHN1cHBvcnQuJywgJHJlcXVlc3QpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlaWYgKCcxLjAnICE9PSAkcHJvdG9jb2xWZXJzaW9uICYmICcxLjEnICE9PSAkcHJvdG9jb2xWZXJzaW9uKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBDb25uZWN0RXhjZXB0aW9uKHNwcmludGYoJ0hUVFAvJXMgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgY1VSTCBoYW5kbGVyLicsICRwcm90b2NvbFZlcnNpb24pLCAkcmVxdWVzdCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2N1cmwnXVsnYm9keV9hc19zdHJpbmcnXSkpIHsKICAgICAgICAgICAgJG9wdGlvbnNbJ19ib2R5X2FzX3N0cmluZyddID0gJG9wdGlvbnNbJ2N1cmwnXVsnYm9keV9hc19zdHJpbmcnXTsKICAgICAgICAgICAgdW5zZXQoJG9wdGlvbnNbJ2N1cmwnXVsnYm9keV9hc19zdHJpbmcnXSk7CiAgICAgICAgfQoKICAgICAgICAkZWFzeSA9IG5ldyBFYXN5SGFuZGxlKCk7CiAgICAgICAgJGVhc3ktPnJlcXVlc3QgPSAkcmVxdWVzdDsKICAgICAgICAkZWFzeS0+b3B0aW9ucyA9ICRvcHRpb25zOwogICAgICAgICRjb25mID0gJHRoaXMtPmdldERlZmF1bHRDb25mKCRlYXN5KTsKICAgICAgICAkdGhpcy0+YXBwbHlNZXRob2QoJGVhc3ksICRjb25mKTsKICAgICAgICAkdGhpcy0+YXBwbHlIYW5kbGVyT3B0aW9ucygkZWFzeSwgJGNvbmYpOwogICAgICAgICR0aGlzLT5hcHBseUhlYWRlcnMoJGVhc3ksICRjb25mKTsKICAgICAgICB1bnNldCgkY29uZlsnX2hlYWRlcnMnXSk7CgogICAgICAgIC8vIEFkZCBoYW5kbGVyIG9wdGlvbnMgZnJvbSB0aGUgcmVxdWVzdCBjb25maWd1cmF0aW9uIG9wdGlvbnMKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2N1cmwnXSkpIHsKICAgICAgICAgICAgJGNvbmYgPSBcYXJyYXlfcmVwbGFjZSgkY29uZiwgJG9wdGlvbnNbJ2N1cmwnXSk7CiAgICAgICAgfQoKICAgICAgICAkY29uZltcQ1VSTE9QVF9IRUFERVJGVU5DVElPTl0gPSAkdGhpcy0+Y3JlYXRlSGVhZGVyRm4oJGVhc3kpOwogICAgICAgICRlYXN5LT5oYW5kbGUgPSAkdGhpcy0+aGFuZGxlcyA/IFxhcnJheV9wb3AoJHRoaXMtPmhhbmRsZXMpIDogXGN1cmxfaW5pdCgpOwogICAgICAgIGN1cmxfc2V0b3B0X2FycmF5KCRlYXN5LT5oYW5kbGUsICRjb25mKTsKCiAgICAgICAgcmV0dXJuICRlYXN5OwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHN1cHBvcnRzSHR0cDIoKTogYm9vbAogICAgewogICAgICAgIHN0YXRpYyAkc3VwcG9ydHNIdHRwMiA9IG51bGw7CgogICAgICAgIGlmIChudWxsID09PSAkc3VwcG9ydHNIdHRwMikgewogICAgICAgICAgICAkc3VwcG9ydHNIdHRwMiA9IHNlbGY6OnN1cHBvcnRzVGxzMTIoKQogICAgICAgICAgICAgICAgJiYgZGVmaW5lZCgnQ1VSTF9WRVJTSU9OX0hUVFAyJykKICAgICAgICAgICAgICAgICYmIChcQ1VSTF9WRVJTSU9OX0hUVFAyICYgXGN1cmxfdmVyc2lvbigpWydmZWF0dXJlcyddKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkc3VwcG9ydHNIdHRwMjsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBzdXBwb3J0c1RsczEyKCk6IGJvb2wKICAgIHsKICAgICAgICBzdGF0aWMgJHN1cHBvcnRzVGxzMTIgPSBudWxsOwoKICAgICAgICBpZiAobnVsbCA9PT0gJHN1cHBvcnRzVGxzMTIpIHsKICAgICAgICAgICAgJHN1cHBvcnRzVGxzMTIgPSBcQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzIgJiBcY3VybF92ZXJzaW9uKClbJ2ZlYXR1cmVzJ107CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHN1cHBvcnRzVGxzMTI7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gc3VwcG9ydHNUbHMxMygpOiBib29sCiAgICB7CiAgICAgICAgc3RhdGljICRzdXBwb3J0c1RsczEzID0gbnVsbDsKCiAgICAgICAgaWYgKG51bGwgPT09ICRzdXBwb3J0c1RsczEzKSB7CiAgICAgICAgICAgICRzdXBwb3J0c1RsczEzID0gZGVmaW5lZCgnQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzMnKQogICAgICAgICAgICAgICAgJiYgKFxDVVJMX1NTTFZFUlNJT05fVExTdjFfMyAmIFxjdXJsX3ZlcnNpb24oKVsnZmVhdHVyZXMnXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHN1cHBvcnRzVGxzMTM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlbGVhc2UoRWFzeUhhbmRsZSAkZWFzeSk6IHZvaWQKICAgIHsKICAgICAgICAkcmVzb3VyY2UgPSAkZWFzeS0+aGFuZGxlOwogICAgICAgIHVuc2V0KCRlYXN5LT5oYW5kbGUpOwoKICAgICAgICBpZiAoXGNvdW50KCR0aGlzLT5oYW5kbGVzKSA+PSAkdGhpcy0+bWF4SGFuZGxlcykgewogICAgICAgICAgICBpZiAoUEhQX1ZFUlNJT05fSUQgPCA4MDAwMCkgewogICAgICAgICAgICAgICAgXGN1cmxfY2xvc2UoJHJlc291cmNlKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFJlbW92ZSBhbGwgY2FsbGJhY2sgZnVuY3Rpb25zIGFzIHRoZXkgY2FuIGhvbGQgb250byByZWZlcmVuY2VzCiAgICAgICAgICAgIC8vIGFuZCBhcmUgbm90IGNsZWFuZWQgdXAgYnkgY3VybF9yZXNldC4gVXNpbmcgY3VybF9zZXRvcHRfYXJyYXkKICAgICAgICAgICAgLy8gZG9lcyBub3Qgd29yayBmb3Igc29tZSByZWFzb24sIHNvIHJlbW92aW5nIGVhY2ggb25lCiAgICAgICAgICAgIC8vIGluZGl2aWR1YWxseS4KICAgICAgICAgICAgXGN1cmxfc2V0b3B0KCRyZXNvdXJjZSwgXENVUkxPUFRfSEVBREVSRlVOQ1RJT04sIG51bGwpOwogICAgICAgICAgICBcY3VybF9zZXRvcHQoJHJlc291cmNlLCBcQ1VSTE9QVF9SRUFERlVOQ1RJT04sIG51bGwpOwogICAgICAgICAgICBcY3VybF9zZXRvcHQoJHJlc291cmNlLCBcQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBudWxsKTsKICAgICAgICAgICAgXGN1cmxfc2V0b3B0KCRyZXNvdXJjZSwgXENVUkxPUFRfUFJPR1JFU1NGVU5DVElPTiwgbnVsbCk7CiAgICAgICAgICAgIFxjdXJsX3Jlc2V0KCRyZXNvdXJjZSk7CiAgICAgICAgICAgICR0aGlzLT5oYW5kbGVzW10gPSAkcmVzb3VyY2U7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQ29tcGxldGVzIGEgY1VSTCB0cmFuc2FjdGlvbiwgZWl0aGVyIHJldHVybmluZyBhIHJlc3BvbnNlIHByb21pc2Ugb3IgYQogICAgICogcmVqZWN0ZWQgcHJvbWlzZS4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUoUmVxdWVzdEludGVyZmFjZSwgYXJyYXkpOiBQcm9taXNlSW50ZXJmYWNlICRoYW5kbGVyCiAgICAgKiBAcGFyYW0gQ3VybEZhY3RvcnlJbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmYWN0b3J5IERpY3RhdGVzIGhvdyB0aGUgaGFuZGxlIGlzIHJlbGVhc2VkCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmluaXNoKGNhbGxhYmxlICRoYW5kbGVyLCBFYXN5SGFuZGxlICRlYXN5LCBDdXJsRmFjdG9yeUludGVyZmFjZSAkZmFjdG9yeSk6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoaXNzZXQoJGVhc3ktPm9wdGlvbnNbJ29uX3N0YXRzJ10pKSB7CiAgICAgICAgICAgIHNlbGY6Omludm9rZVN0YXRzKCRlYXN5KTsKICAgICAgICB9CgogICAgICAgIGlmICghJGVhc3ktPnJlc3BvbnNlIHx8ICRlYXN5LT5lcnJubykgewogICAgICAgICAgICByZXR1cm4gc2VsZjo6ZmluaXNoRXJyb3IoJGhhbmRsZXIsICRlYXN5LCAkZmFjdG9yeSk7CiAgICAgICAgfQoKICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3BvbnNlIGlmIGl0IGlzIHByZXNlbnQgYW5kIHRoZXJlIGlzIG5vIGVycm9yLgogICAgICAgICRmYWN0b3J5LT5yZWxlYXNlKCRlYXN5KTsKCiAgICAgICAgLy8gUmV3aW5kIHRoZSBib2R5IG9mIHRoZSByZXNwb25zZSBpZiBwb3NzaWJsZS4KICAgICAgICAkYm9keSA9ICRlYXN5LT5yZXNwb25zZS0+Z2V0Qm9keSgpOwogICAgICAgIGlmICgkYm9keS0+aXNTZWVrYWJsZSgpKSB7CiAgICAgICAgICAgICRib2R5LT5yZXdpbmQoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgRnVsZmlsbGVkUHJvbWlzZSgkZWFzeS0+cmVzcG9uc2UpOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGludm9rZVN0YXRzKEVhc3lIYW5kbGUgJGVhc3kpOiB2b2lkCiAgICB7CiAgICAgICAgJGN1cmxTdGF0cyA9IFxjdXJsX2dldGluZm8oJGVhc3ktPmhhbmRsZSk7CiAgICAgICAgJGN1cmxTdGF0c1snYXBwY29ubmVjdF90aW1lJ10gPSBcY3VybF9nZXRpbmZvKCRlYXN5LT5oYW5kbGUsIFxDVVJMSU5GT19BUFBDT05ORUNUX1RJTUUpOwogICAgICAgICRzdGF0cyA9IG5ldyBUcmFuc2ZlclN0YXRzKAogICAgICAgICAgICAkZWFzeS0+cmVxdWVzdCwKICAgICAgICAgICAgJGVhc3ktPnJlc3BvbnNlLAogICAgICAgICAgICAkY3VybFN0YXRzWyd0b3RhbF90aW1lJ10sCiAgICAgICAgICAgICRlYXN5LT5lcnJubywKICAgICAgICAgICAgJGN1cmxTdGF0cwogICAgICAgICk7CiAgICAgICAgKCRlYXN5LT5vcHRpb25zWydvbl9zdGF0cyddKSgkc3RhdHMpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGNhbGxhYmxlKFJlcXVlc3RJbnRlcmZhY2UsIGFycmF5KTogUHJvbWlzZUludGVyZmFjZSAkaGFuZGxlcgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBmaW5pc2hFcnJvcihjYWxsYWJsZSAkaGFuZGxlciwgRWFzeUhhbmRsZSAkZWFzeSwgQ3VybEZhY3RvcnlJbnRlcmZhY2UgJGZhY3RvcnkpOiBQcm9taXNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgLy8gR2V0IGVycm9yIGluZm9ybWF0aW9uIGFuZCByZWxlYXNlIHRoZSBoYW5kbGUgdG8gdGhlIGZhY3RvcnkuCiAgICAgICAgJGN0eCA9IFsKICAgICAgICAgICAgJ2Vycm5vJyA9PiAkZWFzeS0+ZXJybm8sCiAgICAgICAgICAgICdlcnJvcicgPT4gXGN1cmxfZXJyb3IoJGVhc3ktPmhhbmRsZSksCiAgICAgICAgICAgICdhcHBjb25uZWN0X3RpbWUnID0+IFxjdXJsX2dldGluZm8oJGVhc3ktPmhhbmRsZSwgXENVUkxJTkZPX0FQUENPTk5FQ1RfVElNRSksCiAgICAgICAgXSArIFxjdXJsX2dldGluZm8oJGVhc3ktPmhhbmRsZSk7CiAgICAgICAgJGN0eFtzZWxmOjpDVVJMX1ZFUlNJT05fU1RSXSA9IHNlbGY6OmdldEN1cmxWZXJzaW9uKCk7CiAgICAgICAgJGZhY3RvcnktPnJlbGVhc2UoJGVhc3kpOwoKICAgICAgICAvLyBSZXRyeSB3aGVuIG5vdGhpbmcgaXMgcHJlc2VudCBvciB3aGVuIGN1cmwgZmFpbGVkIHRvIHJld2luZC4KICAgICAgICBpZiAoZW1wdHkoJGVhc3ktPm9wdGlvbnNbJ19lcnJfbWVzc2FnZSddKSAmJiAoISRlYXN5LT5lcnJubyB8fCAkZWFzeS0+ZXJybm8gPT0gNjUpKSB7CiAgICAgICAgICAgIHJldHVybiBzZWxmOjpyZXRyeUZhaWxlZFJld2luZCgkaGFuZGxlciwgJGVhc3ksICRjdHgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZVJlamVjdGlvbigkZWFzeSwgJGN0eCk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZ2V0Q3VybFZlcnNpb24oKTogc3RyaW5nCiAgICB7CiAgICAgICAgc3RhdGljICRjdXJsVmVyc2lvbiA9IG51bGw7CgogICAgICAgIGlmIChudWxsID09PSAkY3VybFZlcnNpb24pIHsKICAgICAgICAgICAgJGN1cmxWZXJzaW9uID0gXGN1cmxfdmVyc2lvbigpWyd2ZXJzaW9uJ107CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGN1cmxWZXJzaW9uOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZVJlamVjdGlvbihFYXN5SGFuZGxlICRlYXN5LCBhcnJheSAkY3R4KTogUHJvbWlzZUludGVyZmFjZQogICAgewogICAgICAgIHN0YXRpYyAkY29ubmVjdGlvbkVycm9ycyA9IFsKICAgICAgICAgICAgXENVUkxFX09QRVJBVElPTl9USU1FT1VURUQgPT4gdHJ1ZSwKICAgICAgICAgICAgXENVUkxFX0NPVUxETlRfUkVTT0xWRV9IT1NUID0+IHRydWUsCiAgICAgICAgICAgIFxDVVJMRV9DT1VMRE5UX0NPTk5FQ1QgPT4gdHJ1ZSwKICAgICAgICAgICAgXENVUkxFX1NTTF9DT05ORUNUX0VSUk9SID0+IHRydWUsCiAgICAgICAgICAgIFxDVVJMRV9HT1RfTk9USElORyA9PiB0cnVlLAogICAgICAgIF07CgogICAgICAgIGlmICgkZWFzeS0+Y3JlYXRlUmVzcG9uc2VFeGNlcHRpb24pIHsKICAgICAgICAgICAgcmV0dXJuIFBcQ3JlYXRlOjpyZWplY3Rpb25Gb3IoCiAgICAgICAgICAgICAgICBuZXcgUmVxdWVzdEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAnQW4gZXJyb3Igd2FzIGVuY291bnRlcmVkIHdoaWxlIGNyZWF0aW5nIHRoZSByZXNwb25zZScsCiAgICAgICAgICAgICAgICAgICAgJGVhc3ktPnJlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgJGVhc3ktPnJlc3BvbnNlLAogICAgICAgICAgICAgICAgICAgICRlYXN5LT5jcmVhdGVSZXNwb25zZUV4Y2VwdGlvbiwKICAgICAgICAgICAgICAgICAgICAkY3R4CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gd2FzIGVuY291bnRlcmVkIGR1cmluZyB0aGUgb25IZWFkZXJzIGV2ZW50LCB0aGVuCiAgICAgICAgLy8gcmV0dXJuIGEgcmVqZWN0ZWQgcHJvbWlzZSB0aGF0IHdyYXBzIHRoYXQgZXhjZXB0aW9uLgogICAgICAgIGlmICgkZWFzeS0+b25IZWFkZXJzRXhjZXB0aW9uKSB7CiAgICAgICAgICAgIHJldHVybiBQXENyZWF0ZTo6cmVqZWN0aW9uRm9yKAogICAgICAgICAgICAgICAgbmV3IFJlcXVlc3RFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgJ0FuIGVycm9yIHdhcyBlbmNvdW50ZXJlZCBkdXJpbmcgdGhlIG9uX2hlYWRlcnMgZXZlbnQnLAogICAgICAgICAgICAgICAgICAgICRlYXN5LT5yZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICRlYXN5LT5yZXNwb25zZSwKICAgICAgICAgICAgICAgICAgICAkZWFzeS0+b25IZWFkZXJzRXhjZXB0aW9uLAogICAgICAgICAgICAgICAgICAgICRjdHgKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICR1cmkgPSAkZWFzeS0+cmVxdWVzdC0+Z2V0VXJpKCk7CgogICAgICAgICRzYW5pdGl6ZWRFcnJvciA9IHNlbGY6OnNhbml0aXplQ3VybEVycm9yKCRjdHhbJ2Vycm9yJ10gPz8gJycsICR1cmkpOwoKICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAnY1VSTCBlcnJvciAlczogJXMgKCVzKScsCiAgICAgICAgICAgICRjdHhbJ2Vycm5vJ10sCiAgICAgICAgICAgICRzYW5pdGl6ZWRFcnJvciwKICAgICAgICAgICAgJ3NlZSBodHRwczovL2N1cmwuaGF4eC5zZS9saWJjdXJsL2MvbGliY3VybC1lcnJvcnMuaHRtbCcKICAgICAgICApOwoKICAgICAgICBpZiAoJycgIT09ICRzYW5pdGl6ZWRFcnJvcikgewogICAgICAgICAgICAkcmVkYWN0ZWRVcmlTdHJpbmcgPSBcR3V6emxlSHR0cFxQc3I3XFV0aWxzOjpyZWRhY3RVc2VySW5mbygkdXJpKS0+X190b1N0cmluZygpOwogICAgICAgICAgICBpZiAoJHJlZGFjdGVkVXJpU3RyaW5nICE9PSAnJyAmJiBmYWxzZSA9PT0gXHN0cnBvcygkc2FuaXRpemVkRXJyb3IsICRyZWRhY3RlZFVyaVN0cmluZykpIHsKICAgICAgICAgICAgICAgICRtZXNzYWdlIC49IFxzcHJpbnRmKCcgZm9yICVzJywgJHJlZGFjdGVkVXJpU3RyaW5nKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gQ3JlYXRlIGEgY29ubmVjdGlvbiBleGNlcHRpb24gaWYgaXQgd2FzIGEgc3BlY2lmaWMgZXJyb3IgY29kZS4KICAgICAgICAkZXJyb3IgPSBpc3NldCgkY29ubmVjdGlvbkVycm9yc1skZWFzeS0+ZXJybm9dKQogICAgICAgICAgICA/IG5ldyBDb25uZWN0RXhjZXB0aW9uKCRtZXNzYWdlLCAkZWFzeS0+cmVxdWVzdCwgbnVsbCwgJGN0eCkKICAgICAgICAgICAgOiBuZXcgUmVxdWVzdEV4Y2VwdGlvbigkbWVzc2FnZSwgJGVhc3ktPnJlcXVlc3QsICRlYXN5LT5yZXNwb25zZSwgbnVsbCwgJGN0eCk7CgogICAgICAgIHJldHVybiBQXENyZWF0ZTo6cmVqZWN0aW9uRm9yKCRlcnJvcik7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gc2FuaXRpemVDdXJsRXJyb3Ioc3RyaW5nICRlcnJvciwgVXJpSW50ZXJmYWNlICR1cmkpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoJycgPT09ICRlcnJvcikgewogICAgICAgICAgICByZXR1cm4gJGVycm9yOwogICAgICAgIH0KCiAgICAgICAgJGJhc2VVcmkgPSAkdXJpLT53aXRoUXVlcnkoJycpLT53aXRoRnJhZ21lbnQoJycpOwogICAgICAgICRiYXNlVXJpU3RyaW5nID0gJGJhc2VVcmktPl9fdG9TdHJpbmcoKTsKCiAgICAgICAgaWYgKCcnID09PSAkYmFzZVVyaVN0cmluZykgewogICAgICAgICAgICByZXR1cm4gJGVycm9yOwogICAgICAgIH0KCiAgICAgICAgJHJlZGFjdGVkVXJpU3RyaW5nID0gXEd1enpsZUh0dHBcUHNyN1xVdGlsczo6cmVkYWN0VXNlckluZm8oJGJhc2VVcmkpLT5fX3RvU3RyaW5nKCk7CgogICAgICAgIHJldHVybiBzdHJfcmVwbGFjZSgkYmFzZVVyaVN0cmluZywgJHJlZGFjdGVkVXJpU3RyaW5nLCAkZXJyb3IpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheTxpbnR8c3RyaW5nLCBtaXhlZD4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXREZWZhdWx0Q29uZihFYXN5SGFuZGxlICRlYXN5KTogYXJyYXkKICAgIHsKICAgICAgICAkY29uZiA9IFsKICAgICAgICAgICAgJ19oZWFkZXJzJyA9PiAkZWFzeS0+cmVxdWVzdC0+Z2V0SGVhZGVycygpLAogICAgICAgICAgICBcQ1VSTE9QVF9DVVNUT01SRVFVRVNUID0+ICRlYXN5LT5yZXF1ZXN0LT5nZXRNZXRob2QoKSwKICAgICAgICAgICAgXENVUkxPUFRfVVJMID0+IChzdHJpbmcpICRlYXN5LT5yZXF1ZXN0LT5nZXRVcmkoKS0+d2l0aEZyYWdtZW50KCcnKSwKICAgICAgICAgICAgXENVUkxPUFRfUkVUVVJOVFJBTlNGRVIgPT4gZmFsc2UsCiAgICAgICAgICAgIFxDVVJMT1BUX0hFQURFUiA9PiBmYWxzZSwKICAgICAgICAgICAgXENVUkxPUFRfQ09OTkVDVFRJTUVPVVQgPT4gMzAwLAogICAgICAgIF07CgogICAgICAgIGlmIChcZGVmaW5lZCgnQ1VSTE9QVF9QUk9UT0NPTFMnKSkgewogICAgICAgICAgICAkY29uZltcQ1VSTE9QVF9QUk9UT0NPTFNdID0gXENVUkxQUk9UT19IVFRQIHwgXENVUkxQUk9UT19IVFRQUzsKICAgICAgICB9CgogICAgICAgICR2ZXJzaW9uID0gJGVhc3ktPnJlcXVlc3QtPmdldFByb3RvY29sVmVyc2lvbigpOwoKICAgICAgICBpZiAoJzInID09PSAkdmVyc2lvbiB8fCAnMi4wJyA9PT0gJHZlcnNpb24pIHsKICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfSFRUUF9WRVJTSU9OXSA9IFxDVVJMX0hUVFBfVkVSU0lPTl8yXzA7CiAgICAgICAgfSBlbHNlaWYgKCcxLjEnID09PSAkdmVyc2lvbikgewogICAgICAgICAgICAkY29uZltcQ1VSTE9QVF9IVFRQX1ZFUlNJT05dID0gXENVUkxfSFRUUF9WRVJTSU9OXzFfMTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkY29uZltcQ1VSTE9QVF9IVFRQX1ZFUlNJT05dID0gXENVUkxfSFRUUF9WRVJTSU9OXzFfMDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkY29uZjsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFwcGx5TWV0aG9kKEVhc3lIYW5kbGUgJGVhc3ksIGFycmF5ICYkY29uZik6IHZvaWQKICAgIHsKICAgICAgICAkYm9keSA9ICRlYXN5LT5yZXF1ZXN0LT5nZXRCb2R5KCk7CiAgICAgICAgJHNpemUgPSAkYm9keS0+Z2V0U2l6ZSgpOwoKICAgICAgICBpZiAoJHNpemUgPT09IG51bGwgfHwgJHNpemUgPiAwKSB7CiAgICAgICAgICAgICR0aGlzLT5hcHBseUJvZHkoJGVhc3ktPnJlcXVlc3QsICRlYXN5LT5vcHRpb25zLCAkY29uZik7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkbWV0aG9kID0gJGVhc3ktPnJlcXVlc3QtPmdldE1ldGhvZCgpOwogICAgICAgIGlmICgkbWV0aG9kID09PSAnUFVUJyB8fCAkbWV0aG9kID09PSAnUE9TVCcpIHsKICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMy4yCiAgICAgICAgICAgIGlmICghJGVhc3ktPnJlcXVlc3QtPmhhc0hlYWRlcignQ29udGVudC1MZW5ndGgnKSkgewogICAgICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfSFRUUEhFQURFUl1bXSA9ICdDb250ZW50LUxlbmd0aDogMCc7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2VpZiAoJG1ldGhvZCA9PT0gJ0hFQUQnKSB7CiAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX05PQk9EWV0gPSB0cnVlOwogICAgICAgICAgICB1bnNldCgKICAgICAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX1dSSVRFRlVOQ1RJT05dLAogICAgICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfUkVBREZVTkNUSU9OXSwKICAgICAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX0ZJTEVdLAogICAgICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfSU5GSUxFXQogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFwcGx5Qm9keShSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAkb3B0aW9ucywgYXJyYXkgJiRjb25mKTogdm9pZAogICAgewogICAgICAgICRzaXplID0gJHJlcXVlc3QtPmhhc0hlYWRlcignQ29udGVudC1MZW5ndGgnKQogICAgICAgICAgICA/IChpbnQpICRyZXF1ZXN0LT5nZXRIZWFkZXJMaW5lKCdDb250ZW50LUxlbmd0aCcpCiAgICAgICAgICAgIDogbnVsbDsKCiAgICAgICAgLy8gU2VuZCB0aGUgYm9keSBhcyBhIHN0cmluZyBpZiB0aGUgc2l6ZSBpcyBsZXNzIHRoYW4gMU1CIE9SIGlmIHRoZQogICAgICAgIC8vIFtjdXJsXVtib2R5X2FzX3N0cmluZ10gcmVxdWVzdCB2YWx1ZSBpcyBzZXQuCiAgICAgICAgaWYgKCgkc2l6ZSAhPT0gbnVsbCAmJiAkc2l6ZSA8IDEwMDAwMDApIHx8ICFlbXB0eSgkb3B0aW9uc1snX2JvZHlfYXNfc3RyaW5nJ10pKSB7CiAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX1BPU1RGSUVMRFNdID0gKHN0cmluZykgJHJlcXVlc3QtPmdldEJvZHkoKTsKICAgICAgICAgICAgLy8gRG9uJ3QgZHVwbGljYXRlIHRoZSBDb250ZW50LUxlbmd0aCBoZWFkZXIKICAgICAgICAgICAgJHRoaXMtPnJlbW92ZUhlYWRlcignQ29udGVudC1MZW5ndGgnLCAkY29uZik7CiAgICAgICAgICAgICR0aGlzLT5yZW1vdmVIZWFkZXIoJ1RyYW5zZmVyLUVuY29kaW5nJywgJGNvbmYpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX1VQTE9BRF0gPSB0cnVlOwogICAgICAgICAgICBpZiAoJHNpemUgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX0lORklMRVNJWkVdID0gJHNpemU7CiAgICAgICAgICAgICAgICAkdGhpcy0+cmVtb3ZlSGVhZGVyKCdDb250ZW50LUxlbmd0aCcsICRjb25mKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkYm9keSA9ICRyZXF1ZXN0LT5nZXRCb2R5KCk7CiAgICAgICAgICAgIGlmICgkYm9keS0+aXNTZWVrYWJsZSgpKSB7CiAgICAgICAgICAgICAgICAkYm9keS0+cmV3aW5kKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfUkVBREZVTkNUSU9OXSA9IHN0YXRpYyBmdW5jdGlvbiAoJGNoLCAkZmQsICRsZW5ndGgpIHVzZSAoJGJvZHkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkYm9keS0+cmVhZCgkbGVuZ3RoKTsKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSBFeHBlY3QgaGVhZGVyIGlzIG5vdCBwcmVzZW50LCBwcmV2ZW50IGN1cmwgZnJvbSBhZGRpbmcgaXQKICAgICAgICBpZiAoISRyZXF1ZXN0LT5oYXNIZWFkZXIoJ0V4cGVjdCcpKSB7CiAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX0hUVFBIRUFERVJdW10gPSAnRXhwZWN0Oic7CiAgICAgICAgfQoKICAgICAgICAvLyBjVVJMIHNvbWV0aW1lcyBhZGRzIGEgY29udGVudC10eXBlIGJ5IGRlZmF1bHQuIFByZXZlbnQgdGhpcy4KICAgICAgICBpZiAoISRyZXF1ZXN0LT5oYXNIZWFkZXIoJ0NvbnRlbnQtVHlwZScpKSB7CiAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX0hUVFBIRUFERVJdW10gPSAnQ29udGVudC1UeXBlOic7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gYXBwbHlIZWFkZXJzKEVhc3lIYW5kbGUgJGVhc3ksIGFycmF5ICYkY29uZik6IHZvaWQKICAgIHsKICAgICAgICBmb3JlYWNoICgkY29uZlsnX2hlYWRlcnMnXSBhcyAkbmFtZSA9PiAkdmFsdWVzKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCR2YWx1ZXMgYXMgJHZhbHVlKSB7CiAgICAgICAgICAgICAgICAkdmFsdWUgPSAoc3RyaW5nKSAkdmFsdWU7CiAgICAgICAgICAgICAgICBpZiAoJHZhbHVlID09PSAnJykgewogICAgICAgICAgICAgICAgICAgIC8vIGNVUkwgcmVxdWlyZXMgYSBzcGVjaWFsIGZvcm1hdCBmb3IgZW1wdHkgaGVhZGVycy4KICAgICAgICAgICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvaXNzdWVzLzE4ODIgZm9yIG1vcmUgZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAkY29uZltcQ1VSTE9QVF9IVFRQSEVBREVSXVtdID0gIiRuYW1lOyI7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX0hUVFBIRUFERVJdW10gPSAiJG5hbWU6ICR2YWx1ZSI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFJlbW92ZSB0aGUgQWNjZXB0IGhlYWRlciBpZiBvbmUgd2FzIG5vdCBzZXQKICAgICAgICBpZiAoISRlYXN5LT5yZXF1ZXN0LT5oYXNIZWFkZXIoJ0FjY2VwdCcpKSB7CiAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX0hUVFBIRUFERVJdW10gPSAnQWNjZXB0Oic7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmVtb3ZlIGEgaGVhZGVyIGZyb20gdGhlIG9wdGlvbnMgYXJyYXkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSAgICBDYXNlLWluc2Vuc2l0aXZlIGhlYWRlciB0byByZW1vdmUKICAgICAqIEBwYXJhbSBhcnJheSAgJG9wdGlvbnMgQXJyYXkgb2Ygb3B0aW9ucyB0byBtb2RpZnkKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiByZW1vdmVIZWFkZXIoc3RyaW5nICRuYW1lLCBhcnJheSAmJG9wdGlvbnMpOiB2b2lkCiAgICB7CiAgICAgICAgZm9yZWFjaCAoXGFycmF5X2tleXMoJG9wdGlvbnNbJ19oZWFkZXJzJ10pIGFzICRrZXkpIHsKICAgICAgICAgICAgaWYgKCFcc3RyY2FzZWNtcCgka2V5LCAkbmFtZSkpIHsKICAgICAgICAgICAgICAgIHVuc2V0KCRvcHRpb25zWydfaGVhZGVycyddWyRrZXldKTsKCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBhcHBseUhhbmRsZXJPcHRpb25zKEVhc3lIYW5kbGUgJGVhc3ksIGFycmF5ICYkY29uZik6IHZvaWQKICAgIHsKICAgICAgICAkb3B0aW9ucyA9ICRlYXN5LT5vcHRpb25zOwogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1sndmVyaWZ5J10pKSB7CiAgICAgICAgICAgIGlmICgkb3B0aW9uc1sndmVyaWZ5J10gPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICB1bnNldCgkY29uZltcQ1VSTE9QVF9DQUlORk9dKTsKICAgICAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX1NTTF9WRVJJRllIT1NUXSA9IDA7CiAgICAgICAgICAgICAgICAkY29uZltcQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUl0gPSBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX1NTTF9WRVJJRllIT1NUXSA9IDI7CiAgICAgICAgICAgICAgICAkY29uZltcQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUl0gPSB0cnVlOwogICAgICAgICAgICAgICAgaWYgKFxpc19zdHJpbmcoJG9wdGlvbnNbJ3ZlcmlmeSddKSkgewogICAgICAgICAgICAgICAgICAgIC8vIFRocm93IGFuIGVycm9yIGlmIHRoZSBmaWxlL2ZvbGRlci9saW5rIHBhdGggaXMgbm90IHZhbGlkIG9yIGRvZXNuJ3QgZXhpc3QuCiAgICAgICAgICAgICAgICAgICAgaWYgKCFcZmlsZV9leGlzdHMoJG9wdGlvbnNbJ3ZlcmlmeSddKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiU1NMIENBIGJ1bmRsZSBub3QgZm91bmQ6IHskb3B0aW9uc1sndmVyaWZ5J119Iik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgYSBkaXJlY3Rvcnkgb3IgYSBsaW5rIHRvIGEgZGlyZWN0b3J5IHVzZSBDVVJMT1BUX0NBUEFUSC4KICAgICAgICAgICAgICAgICAgICAvLyBJZiBub3QsIGl0J3MgcHJvYmFibHkgYSBmaWxlLCBvciBhIGxpbmsgdG8gYSBmaWxlLCBzbyB1c2UgQ1VSTE9QVF9DQUlORk8uCiAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICBcaXNfZGlyKCRvcHRpb25zWyd2ZXJpZnknXSkKICAgICAgICAgICAgICAgICAgICAgICAgfHwgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXGlzX2xpbmsoJG9wdGlvbnNbJ3ZlcmlmeSddKSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCR2ZXJpZnlMaW5rID0gXHJlYWRsaW5rKCRvcHRpb25zWyd2ZXJpZnknXSkpICE9PSBmYWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgXGlzX2RpcigkdmVyaWZ5TGluaykKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICAkY29uZltcQ1VSTE9QVF9DQVBBVEhdID0gJG9wdGlvbnNbJ3ZlcmlmeSddOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX0NBSU5GT10gPSAkb3B0aW9uc1sndmVyaWZ5J107CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIWlzc2V0KCRvcHRpb25zWydjdXJsJ11bXENVUkxPUFRfRU5DT0RJTkddKSAmJiAhZW1wdHkoJG9wdGlvbnNbJ2RlY29kZV9jb250ZW50J10pKSB7CiAgICAgICAgICAgICRhY2NlcHQgPSAkZWFzeS0+cmVxdWVzdC0+Z2V0SGVhZGVyTGluZSgnQWNjZXB0LUVuY29kaW5nJyk7CiAgICAgICAgICAgIGlmICgkYWNjZXB0KSB7CiAgICAgICAgICAgICAgICAkY29uZltcQ1VSTE9QVF9FTkNPRElOR10gPSAkYWNjZXB0OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gVGhlIGVtcHR5IHN0cmluZyBlbmFibGVzIGFsbCBhdmFpbGFibGUgZGVjb2RlcnMgYW5kIGltcGxpY2l0bHkKICAgICAgICAgICAgICAgIC8vIHNldHMgYSBtYXRjaGluZyAnQWNjZXB0LUVuY29kaW5nJyBoZWFkZXIuCiAgICAgICAgICAgICAgICAkY29uZltcQ1VSTE9QVF9FTkNPRElOR10gPSAnJzsKICAgICAgICAgICAgICAgIC8vIEJ1dCBhcyB0aGUgdXNlciBkaWQgbm90IHNwZWNpZnkgYW55IGVuY29kaW5nIHByZWZlcmVuY2UsCiAgICAgICAgICAgICAgICAvLyBsZXQncyBsZWF2ZSBpdCB1cCB0byBzZXJ2ZXIgYnkgcHJldmVudGluZyBjdXJsIGZyb20gc2VuZGluZwogICAgICAgICAgICAgICAgLy8gdGhlIGhlYWRlciwgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcyAnQWNjZXB0LUVuY29kaW5nOiAqJy4KICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM5MTEwI2ZpZWxkLmFjY2VwdC1lbmNvZGluZwogICAgICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfSFRUUEhFQURFUl1bXSA9ICdBY2NlcHQtRW5jb2Rpbmc6JzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCFpc3NldCgkb3B0aW9uc1snc2luayddKSkgewogICAgICAgICAgICAvLyBVc2UgYSBkZWZhdWx0IHRlbXAgc3RyZWFtIGlmIG5vIHNpbmsgd2FzIHNldC4KICAgICAgICAgICAgJG9wdGlvbnNbJ3NpbmsnXSA9IFxHdXp6bGVIdHRwXFBzcjdcVXRpbHM6OnRyeUZvcGVuKCdwaHA6Ly90ZW1wJywgJ3crJyk7CiAgICAgICAgfQogICAgICAgICRzaW5rID0gJG9wdGlvbnNbJ3NpbmsnXTsKICAgICAgICBpZiAoIVxpc19zdHJpbmcoJHNpbmspKSB7CiAgICAgICAgICAgICRzaW5rID0gXEd1enpsZUh0dHBcUHNyN1xVdGlsczo6c3RyZWFtRm9yKCRzaW5rKTsKICAgICAgICB9IGVsc2VpZiAoIVxpc19kaXIoXGRpcm5hbWUoJHNpbmspKSkgewogICAgICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgZGlyZWN0b3J5IGV4aXN0cyBiZWZvcmUgZmFpbGluZyBpbiBjdXJsLgogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oXHNwcmludGYoJ0RpcmVjdG9yeSAlcyBkb2VzIG5vdCBleGlzdCBmb3Igc2luayB2YWx1ZSBvZiAlcycsIFxkaXJuYW1lKCRzaW5rKSwgJHNpbmspKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkc2luayA9IG5ldyBMYXp5T3BlblN0cmVhbSgkc2luaywgJ3crJyk7CiAgICAgICAgfQogICAgICAgICRlYXN5LT5zaW5rID0gJHNpbms7CiAgICAgICAgJGNvbmZbXENVUkxPUFRfV1JJVEVGVU5DVElPTl0gPSBzdGF0aWMgZnVuY3Rpb24gKCRjaCwgJHdyaXRlKSB1c2UgKCRzaW5rKTogaW50IHsKICAgICAgICAgICAgcmV0dXJuICRzaW5rLT53cml0ZSgkd3JpdGUpOwogICAgICAgIH07CgogICAgICAgICR0aW1lb3V0UmVxdWlyZXNOb1NpZ25hbCA9IGZhbHNlOwogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1sndGltZW91dCddKSkgewogICAgICAgICAgICAkdGltZW91dFJlcXVpcmVzTm9TaWduYWwgfD0gJG9wdGlvbnNbJ3RpbWVvdXQnXSA8IDE7CiAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX1RJTUVPVVRfTVNdID0gJG9wdGlvbnNbJ3RpbWVvdXQnXSAqIDEwMDA7CiAgICAgICAgfQoKICAgICAgICAvLyBDVVJMIGRlZmF1bHQgdmFsdWUgaXMgQ1VSTF9JUFJFU09MVkVfV0hBVEVWRVIKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2ZvcmNlX2lwX3Jlc29sdmUnXSkpIHsKICAgICAgICAgICAgaWYgKCd2NCcgPT09ICRvcHRpb25zWydmb3JjZV9pcF9yZXNvbHZlJ10pIHsKICAgICAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX0lQUkVTT0xWRV0gPSBcQ1VSTF9JUFJFU09MVkVfVjQ7CiAgICAgICAgICAgIH0gZWxzZWlmICgndjYnID09PSAkb3B0aW9uc1snZm9yY2VfaXBfcmVzb2x2ZSddKSB7CiAgICAgICAgICAgICAgICAkY29uZltcQ1VSTE9QVF9JUFJFU09MVkVdID0gXENVUkxfSVBSRVNPTFZFX1Y2OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2Nvbm5lY3RfdGltZW91dCddKSkgewogICAgICAgICAgICAkdGltZW91dFJlcXVpcmVzTm9TaWduYWwgfD0gJG9wdGlvbnNbJ2Nvbm5lY3RfdGltZW91dCddIDwgMTsKICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfQ09OTkVDVFRJTUVPVVRfTVNdID0gJG9wdGlvbnNbJ2Nvbm5lY3RfdGltZW91dCddICogMTAwMDsKICAgICAgICB9CgogICAgICAgIGlmICgkdGltZW91dFJlcXVpcmVzTm9TaWduYWwgJiYgXHN0cnRvdXBwZXIoXHN1YnN0cihcUEhQX09TLCAwLCAzKSkgIT09ICdXSU4nKSB7CiAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX05PU0lHTkFMXSA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ3Byb3h5J10pKSB7CiAgICAgICAgICAgIGlmICghXGlzX2FycmF5KCRvcHRpb25zWydwcm94eSddKSkgewogICAgICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfUFJPWFldID0gJG9wdGlvbnNbJ3Byb3h5J107CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkc2NoZW1lID0gJGVhc3ktPnJlcXVlc3QtPmdldFVyaSgpLT5nZXRTY2hlbWUoKTsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1sncHJveHknXVskc2NoZW1lXSkpIHsKICAgICAgICAgICAgICAgICAgICAkaG9zdCA9ICRlYXN5LT5yZXF1ZXN0LT5nZXRVcmkoKS0+Z2V0SG9zdCgpOwogICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1sncHJveHknXVsnbm8nXSkgJiYgVXRpbHM6OmlzSG9zdEluTm9Qcm94eSgkaG9zdCwgJG9wdGlvbnNbJ3Byb3h5J11bJ25vJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2V0KCRjb25mW1xDVVJMT1BUX1BST1hZXSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfUFJPWFldID0gJG9wdGlvbnNbJ3Byb3h5J11bJHNjaGVtZV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2NyeXB0b19tZXRob2QnXSkpIHsKICAgICAgICAgICAgJHByb3RvY29sVmVyc2lvbiA9ICRlYXN5LT5yZXF1ZXN0LT5nZXRQcm90b2NvbFZlcnNpb24oKTsKCiAgICAgICAgICAgIC8vIElmIEhUVFAvMiwgdXBncmFkZSBUTFMgMS4wIGFuZCAxLjEgdG8gMS4yCiAgICAgICAgICAgIGlmICgnMicgPT09ICRwcm90b2NvbFZlcnNpb24gfHwgJzIuMCcgPT09ICRwcm90b2NvbFZlcnNpb24pIHsKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICBcU1RSRUFNX0NSWVBUT19NRVRIT0RfVExTdjFfMF9DTElFTlQgPT09ICRvcHRpb25zWydjcnlwdG9fbWV0aG9kJ10KICAgICAgICAgICAgICAgICAgICB8fCBcU1RSRUFNX0NSWVBUT19NRVRIT0RfVExTdjFfMV9DTElFTlQgPT09ICRvcHRpb25zWydjcnlwdG9fbWV0aG9kJ10KICAgICAgICAgICAgICAgICAgICB8fCBcU1RSRUFNX0NSWVBUT19NRVRIT0RfVExTdjFfMl9DTElFTlQgPT09ICRvcHRpb25zWydjcnlwdG9fbWV0aG9kJ10KICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX1NTTFZFUlNJT05dID0gXENVUkxfU1NMVkVSU0lPTl9UTFN2MV8yOwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKGRlZmluZWQoJ1NUUkVBTV9DUllQVE9fTUVUSE9EX1RMU3YxXzNfQ0xJRU5UJykgJiYgXFNUUkVBTV9DUllQVE9fTUVUSE9EX1RMU3YxXzNfQ0xJRU5UID09PSAkb3B0aW9uc1snY3J5cHRvX21ldGhvZCddKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWxmOjpzdXBwb3J0c1RsczEzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgY3J5cHRvX21ldGhvZCByZXF1ZXN0IG9wdGlvbjogVExTIDEuMyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgdmVyc2lvbiBvZiBjVVJMJyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX1NTTFZFUlNJT05dID0gXENVUkxfU1NMVkVSU0lPTl9UTFN2MV8zOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBjcnlwdG9fbWV0aG9kIHJlcXVlc3Qgb3B0aW9uOiB1bmtub3duIHZlcnNpb24gcHJvdmlkZWQnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlaWYgKFxTVFJFQU1fQ1JZUFRPX01FVEhPRF9UTFN2MV8wX0NMSUVOVCA9PT0gJG9wdGlvbnNbJ2NyeXB0b19tZXRob2QnXSkgewogICAgICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfU1NMVkVSU0lPTl0gPSBcQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzA7CiAgICAgICAgICAgIH0gZWxzZWlmIChcU1RSRUFNX0NSWVBUT19NRVRIT0RfVExTdjFfMV9DTElFTlQgPT09ICRvcHRpb25zWydjcnlwdG9fbWV0aG9kJ10pIHsKICAgICAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX1NTTFZFUlNJT05dID0gXENVUkxfU1NMVkVSU0lPTl9UTFN2MV8xOwogICAgICAgICAgICB9IGVsc2VpZiAoXFNUUkVBTV9DUllQVE9fTUVUSE9EX1RMU3YxXzJfQ0xJRU5UID09PSAkb3B0aW9uc1snY3J5cHRvX21ldGhvZCddKSB7CiAgICAgICAgICAgICAgICBpZiAoIXNlbGY6OnN1cHBvcnRzVGxzMTIoKSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIGNyeXB0b19tZXRob2QgcmVxdWVzdCBvcHRpb246IFRMUyAxLjIgbm90IHN1cHBvcnRlZCBieSB5b3VyIHZlcnNpb24gb2YgY1VSTCcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfU1NMVkVSU0lPTl0gPSBcQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzI7CiAgICAgICAgICAgIH0gZWxzZWlmIChkZWZpbmVkKCdTVFJFQU1fQ1JZUFRPX01FVEhPRF9UTFN2MV8zX0NMSUVOVCcpICYmIFxTVFJFQU1fQ1JZUFRPX01FVEhPRF9UTFN2MV8zX0NMSUVOVCA9PT0gJG9wdGlvbnNbJ2NyeXB0b19tZXRob2QnXSkgewogICAgICAgICAgICAgICAgaWYgKCFzZWxmOjpzdXBwb3J0c1RsczEzKCkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBjcnlwdG9fbWV0aG9kIHJlcXVlc3Qgb3B0aW9uOiBUTFMgMS4zIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciB2ZXJzaW9uIG9mIGNVUkwnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX1NTTFZFUlNJT05dID0gXENVUkxfU1NMVkVSU0lPTl9UTFN2MV8zOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgY3J5cHRvX21ldGhvZCByZXF1ZXN0IG9wdGlvbjogdW5rbm93biB2ZXJzaW9uIHByb3ZpZGVkJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snY2VydCddKSkgewogICAgICAgICAgICAkY2VydCA9ICRvcHRpb25zWydjZXJ0J107CiAgICAgICAgICAgIGlmIChcaXNfYXJyYXkoJGNlcnQpKSB7CiAgICAgICAgICAgICAgICAkY29uZltcQ1VSTE9QVF9TU0xDRVJUUEFTU1dEXSA9ICRjZXJ0WzFdOwogICAgICAgICAgICAgICAgJGNlcnQgPSAkY2VydFswXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIVxmaWxlX2V4aXN0cygkY2VydCkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCJTU0wgY2VydGlmaWNhdGUgbm90IGZvdW5kOiB7JGNlcnR9Iik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gT3BlblNTTCAodmVyc2lvbnMgMC45LjMgYW5kIGxhdGVyKSBhbHNvIHN1cHBvcnQgIlAxMiIgZm9yIFBLQ1MjMTItZW5jb2RlZCBmaWxlcy4KICAgICAgICAgICAgLy8gc2VlIGh0dHBzOi8vY3VybC5zZS9saWJjdXJsL2MvQ1VSTE9QVF9TU0xDRVJUVFlQRS5odG1sCiAgICAgICAgICAgICRleHQgPSBwYXRoaW5mbygkY2VydCwgXFBBVEhJTkZPX0VYVEVOU0lPTik7CiAgICAgICAgICAgIGlmIChwcmVnX21hdGNoKCcjXihkZXJ8cDEyKSQjaScsICRleHQpKSB7CiAgICAgICAgICAgICAgICAkY29uZltcQ1VSTE9QVF9TU0xDRVJUVFlQRV0gPSBzdHJ0b3VwcGVyKCRleHQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX1NTTENFUlRdID0gJGNlcnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ3NzbF9rZXknXSkpIHsKICAgICAgICAgICAgaWYgKFxpc19hcnJheSgkb3B0aW9uc1snc3NsX2tleSddKSkgewogICAgICAgICAgICAgICAgaWYgKFxjb3VudCgkb3B0aW9uc1snc3NsX2tleSddKSA9PT0gMikgewogICAgICAgICAgICAgICAgICAgIFskc3NsS2V5LCAkY29uZltcQ1VSTE9QVF9TU0xLRVlQQVNTV0RdXSA9ICRvcHRpb25zWydzc2xfa2V5J107CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIFskc3NsS2V5XSA9ICRvcHRpb25zWydzc2xfa2V5J107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRzc2xLZXkgPSAkc3NsS2V5ID8/ICRvcHRpb25zWydzc2xfa2V5J107CgogICAgICAgICAgICBpZiAoIVxmaWxlX2V4aXN0cygkc3NsS2V5KSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oIlNTTCBwcml2YXRlIGtleSBub3QgZm91bmQ6IHskc3NsS2V5fSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX1NTTEtFWV0gPSAkc3NsS2V5OwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydwcm9ncmVzcyddKSkgewogICAgICAgICAgICAkcHJvZ3Jlc3MgPSAkb3B0aW9uc1sncHJvZ3Jlc3MnXTsKICAgICAgICAgICAgaWYgKCFcaXNfY2FsbGFibGUoJHByb2dyZXNzKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ3Byb2dyZXNzIGNsaWVudCBvcHRpb24gbXVzdCBiZSBjYWxsYWJsZScpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX05PUFJPR1JFU1NdID0gZmFsc2U7CiAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX1BST0dSRVNTRlVOQ1RJT05dID0gc3RhdGljIGZ1bmN0aW9uICgkcmVzb3VyY2UsIGludCAkZG93bmxvYWRTaXplLCBpbnQgJGRvd25sb2FkZWQsIGludCAkdXBsb2FkU2l6ZSwgaW50ICR1cGxvYWRlZCkgdXNlICgkcHJvZ3Jlc3MpIHsKICAgICAgICAgICAgICAgICRwcm9ncmVzcygkZG93bmxvYWRTaXplLCAkZG93bmxvYWRlZCwgJHVwbG9hZFNpemUsICR1cGxvYWRlZCk7CiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBpZiAoIWVtcHR5KCRvcHRpb25zWydkZWJ1ZyddKSkgewogICAgICAgICAgICAkY29uZltcQ1VSTE9QVF9TVERFUlJdID0gVXRpbHM6OmRlYnVnUmVzb3VyY2UoJG9wdGlvbnNbJ2RlYnVnJ10pOwogICAgICAgICAgICAkY29uZltcQ1VSTE9QVF9WRVJCT1NFXSA9IHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgYSByZXNwb25zZSB3YXMgc2V0IG9uIGEgdHJhbnNhY3Rpb24uIElmIG9uZQogICAgICogd2FzIG5vdCBzZXQsIHRoZW4gdGhlIHJlcXVlc3QgaXMgcmV0cmllZCBpZiBwb3NzaWJsZS4gVGhpcyBlcnJvcgogICAgICogdHlwaWNhbGx5IG1lYW5zIHlvdSBhcmUgc2VuZGluZyBhIHBheWxvYWQsIGN1cmwgZW5jb3VudGVyZWQgYQogICAgICogIkNvbm5lY3Rpb24gZGllZCwgcmV0cnlpbmcgYSBmcmVzaCBjb25uZWN0IiBlcnJvciwgdHJpZWQgdG8gcmV3aW5kIHRoZQogICAgICogc3RyZWFtLCBhbmQgdGhlbiBlbmNvdW50ZXJlZCBhICJuZWNlc3NhcnkgZGF0YSByZXdpbmQgd2Fzbid0IHBvc3NpYmxlIgogICAgICogZXJyb3IsIGNhdXNpbmcgdGhlIHJlcXVlc3QgdG8gYmUgc2VudCB0aHJvdWdoIGN1cmxfbXVsdGlfaW5mb19yZWFkKCkKICAgICAqIHdpdGhvdXQgYW4gZXJyb3Igc3RhdHVzLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZShSZXF1ZXN0SW50ZXJmYWNlLCBhcnJheSk6IFByb21pc2VJbnRlcmZhY2UgJGhhbmRsZXIKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gcmV0cnlGYWlsZWRSZXdpbmQoY2FsbGFibGUgJGhhbmRsZXIsIEVhc3lIYW5kbGUgJGVhc3ksIGFycmF5ICRjdHgpOiBQcm9taXNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgLy8gT25seSByZXdpbmQgaWYgdGhlIGJvZHkgaGFzIGJlZW4gcmVhZCBmcm9tLgogICAgICAgICAgICAkYm9keSA9ICRlYXN5LT5yZXF1ZXN0LT5nZXRCb2R5KCk7CiAgICAgICAgICAgIGlmICgkYm9keS0+dGVsbCgpID4gMCkgewogICAgICAgICAgICAgICAgJGJvZHktPnJld2luZCgpOwogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoXFJ1bnRpbWVFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgJGN0eFsnZXJyb3InXSA9ICdUaGUgY29ubmVjdGlvbiB1bmV4cGVjdGVkbHkgZmFpbGVkIHdpdGhvdXQgJwogICAgICAgICAgICAgICAgLidwcm92aWRpbmcgYW4gZXJyb3IuIFRoZSByZXF1ZXN0IHdvdWxkIGhhdmUgYmVlbiByZXRyaWVkLCAnCiAgICAgICAgICAgICAgICAuJ2J1dCBhdHRlbXB0aW5nIHRvIHJld2luZCB0aGUgcmVxdWVzdCBib2R5IGZhaWxlZC4gJwogICAgICAgICAgICAgICAgLidFeGNlcHRpb246ICcuJGU7CgogICAgICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlUmVqZWN0aW9uKCRlYXN5LCAkY3R4KTsKICAgICAgICB9CgogICAgICAgIC8vIFJldHJ5IG5vIG1vcmUgdGhhbiAzIHRpbWVzIGJlZm9yZSBnaXZpbmcgdXAuCiAgICAgICAgaWYgKCFpc3NldCgkZWFzeS0+b3B0aW9uc1snX2N1cmxfcmV0cmllcyddKSkgewogICAgICAgICAgICAkZWFzeS0+b3B0aW9uc1snX2N1cmxfcmV0cmllcyddID0gMTsKICAgICAgICB9IGVsc2VpZiAoJGVhc3ktPm9wdGlvbnNbJ19jdXJsX3JldHJpZXMnXSA9PSAyKSB7CiAgICAgICAgICAgICRjdHhbJ2Vycm9yJ10gPSAnVGhlIGNVUkwgcmVxdWVzdCB3YXMgcmV0cmllZCAzIHRpbWVzICcKICAgICAgICAgICAgICAgIC4nYW5kIGRpZCBub3Qgc3VjY2VlZC4gVGhlIG1vc3QgbGlrZWx5IHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUgJwogICAgICAgICAgICAgICAgLidpcyB0aGF0IGNVUkwgd2FzIHVuYWJsZSB0byByZXdpbmQgdGhlIGJvZHkgb2YgdGhlIHJlcXVlc3QgJwogICAgICAgICAgICAgICAgLidhbmQgc3Vic2VxdWVudCByZXRyaWVzIHJlc3VsdGVkIGluIHRoZSBzYW1lIGVycm9yLiBUdXJuIG9uICcKICAgICAgICAgICAgICAgIC4ndGhlIGRlYnVnIG9wdGlvbiB0byBzZWUgd2hhdCB3ZW50IHdyb25nLiBTZWUgJwogICAgICAgICAgICAgICAgLidodHRwczovL2J1Z3MucGhwLm5ldC9idWcucGhwP2lkPTQ3MjA0IGZvciBtb3JlIGluZm9ybWF0aW9uLic7CgogICAgICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlUmVqZWN0aW9uKCRlYXN5LCAkY3R4KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICArKyRlYXN5LT5vcHRpb25zWydfY3VybF9yZXRyaWVzJ107CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGhhbmRsZXIoJGVhc3ktPnJlcXVlc3QsICRlYXN5LT5vcHRpb25zKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNyZWF0ZUhlYWRlckZuKEVhc3lIYW5kbGUgJGVhc3kpOiBjYWxsYWJsZQogICAgewogICAgICAgIGlmIChpc3NldCgkZWFzeS0+b3B0aW9uc1snb25faGVhZGVycyddKSkgewogICAgICAgICAgICAkb25IZWFkZXJzID0gJGVhc3ktPm9wdGlvbnNbJ29uX2hlYWRlcnMnXTsKCiAgICAgICAgICAgIGlmICghXGlzX2NhbGxhYmxlKCRvbkhlYWRlcnMpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignb25faGVhZGVycyBtdXN0IGJlIGNhbGxhYmxlJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkb25IZWFkZXJzID0gbnVsbDsKICAgICAgICB9CgogICAgICAgIHJldHVybiBzdGF0aWMgZnVuY3Rpb24gKCRjaCwgJGgpIHVzZSAoCiAgICAgICAgICAgICRvbkhlYWRlcnMsCiAgICAgICAgICAgICRlYXN5LAogICAgICAgICAgICAmJHN0YXJ0aW5nUmVzcG9uc2UKICAgICAgICApIHsKICAgICAgICAgICAgJHZhbHVlID0gXHRyaW0oJGgpOwogICAgICAgICAgICBpZiAoJHZhbHVlID09PSAnJykgewogICAgICAgICAgICAgICAgJHN0YXJ0aW5nUmVzcG9uc2UgPSB0cnVlOwogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAkZWFzeS0+Y3JlYXRlUmVzcG9uc2UoKTsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgICAgICAkZWFzeS0+Y3JlYXRlUmVzcG9uc2VFeGNlcHRpb24gPSAkZTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCRvbkhlYWRlcnMgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAkb25IZWFkZXJzKCRlYXN5LT5yZXNwb25zZSk7CiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBBc3NvY2lhdGUgdGhlIGV4Y2VwdGlvbiB3aXRoIHRoZSBoYW5kbGUgYW5kIHRyaWdnZXIKICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBjdXJsIGhlYWRlciB3cml0ZSBlcnJvciBieSByZXR1cm5pbmcgMC4KICAgICAgICAgICAgICAgICAgICAgICAgJGVhc3ktPm9uSGVhZGVyc0V4Y2VwdGlvbiA9ICRlOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlaWYgKCRzdGFydGluZ1Jlc3BvbnNlKSB7CiAgICAgICAgICAgICAgICAkc3RhcnRpbmdSZXNwb25zZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgJGVhc3ktPmhlYWRlcnMgPSBbJHZhbHVlXTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRlYXN5LT5oZWFkZXJzW10gPSAkdmFsdWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBcc3RybGVuKCRoKTsKICAgICAgICB9OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2Rlc3RydWN0KCkKICAgIHsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+aGFuZGxlcyBhcyAkaWQgPT4gJGhhbmRsZSkgewogICAgICAgICAgICBpZiAoUEhQX1ZFUlNJT05fSUQgPCA4MDAwMCkgewogICAgICAgICAgICAgICAgXGN1cmxfY2xvc2UoJGhhbmRsZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHVuc2V0KCR0aGlzLT5oYW5kbGVzWyRpZF0pOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEhhbmRsZXI7Cgp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwoKaW50ZXJmYWNlIEN1cmxGYWN0b3J5SW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIGNVUkwgaGFuZGxlIHJlc291cmNlLgogICAgICoKICAgICAqIEBwYXJhbSBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0IFJlcXVlc3QKICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICRvcHRpb25zIFRyYW5zZmVyIG9wdGlvbnMKICAgICAqCiAgICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIHdoZW4gYW4gb3B0aW9uIGNhbm5vdCBiZSBhcHBsaWVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpOiBFYXN5SGFuZGxlOwoKICAgIC8qKgogICAgICogUmVsZWFzZSBhbiBlYXN5IGhhbmRsZSwgYWxsb3dpbmcgaXQgdG8gYmUgcmV1c2VkIG9yIGNsb3NlZC4KICAgICAqCiAgICAgKiBUaGlzIGZ1bmN0aW9uIG11c3QgY2FsbCB1bnNldCBvbiB0aGUgZWFzeSBoYW5kbGUncyAiaGFuZGxlIiBwcm9wZXJ0eS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbGVhc2UoRWFzeUhhbmRsZSAkZWFzeSk6IHZvaWQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEhhbmRsZXI7Cgp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2VJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CgovKioKICogSFRUUCBoYW5kbGVyIHRoYXQgdXNlcyBjVVJMIGVhc3kgaGFuZGxlcyBhcyBhIHRyYW5zcG9ydCBsYXllci4KICoKICogV2hlbiB1c2luZyB0aGUgQ3VybEhhbmRsZXIsIGN1c3RvbSBjdXJsIG9wdGlvbnMgY2FuIGJlIHNwZWNpZmllZCBhcyBhbgogKiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBjdXJsIG9wdGlvbiBjb25zdGFudHMgbWFwcGluZyB0byB2YWx1ZXMgaW4gdGhlCiAqICoqY3VybCoqIGtleSBvZiB0aGUgImNsaWVudCIga2V5IG9mIHRoZSByZXF1ZXN0LgogKgogKiBAZmluYWwKICovCmNsYXNzIEN1cmxIYW5kbGVyCnsKICAgIC8qKgogICAgICogQHZhciBDdXJsRmFjdG9yeUludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRmYWN0b3J5OwoKICAgIC8qKgogICAgICogQWNjZXB0cyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBvcHRpb25zOgogICAgICoKICAgICAqIC0gaGFuZGxlX2ZhY3Rvcnk6IE9wdGlvbmFsIGN1cmwgZmFjdG9yeSB1c2VkIHRvIGNyZWF0ZSBjVVJMIGhhbmRsZXMuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5e2hhbmRsZV9mYWN0b3J5PzogP0N1cmxGYWN0b3J5SW50ZXJmYWNlfSAkb3B0aW9ucyBBcnJheSBvZiBvcHRpb25zIHRvIHVzZSB3aXRoIHRoZSBoYW5kbGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkb3B0aW9ucyA9IFtdKQogICAgewogICAgICAgICR0aGlzLT5mYWN0b3J5ID0gJG9wdGlvbnNbJ2hhbmRsZV9mYWN0b3J5J10KICAgICAgICAgICAgPz8gbmV3IEN1cmxGYWN0b3J5KDMpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2ludm9rZShSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAkb3B0aW9ucyk6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2RlbGF5J10pKSB7CiAgICAgICAgICAgIFx1c2xlZXAoJG9wdGlvbnNbJ2RlbGF5J10gKiAxMDAwKTsKICAgICAgICB9CgogICAgICAgICRlYXN5ID0gJHRoaXMtPmZhY3RvcnktPmNyZWF0ZSgkcmVxdWVzdCwgJG9wdGlvbnMpOwogICAgICAgIFxjdXJsX2V4ZWMoJGVhc3ktPmhhbmRsZSk7CiAgICAgICAgJGVhc3ktPmVycm5vID0gXGN1cmxfZXJybm8oJGVhc3ktPmhhbmRsZSk7CgogICAgICAgIHJldHVybiBDdXJsRmFjdG9yeTo6ZmluaXNoKCR0aGlzLCAkZWFzeSwgJHRoaXMtPmZhY3RvcnkpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEhhbmRsZXI7Cgp1c2UgQ2xvc3VyZTsKdXNlIEd1enpsZUh0dHBcUHJvbWlzZSBhcyBQOwp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2U7CnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUHJvbWlzZUludGVyZmFjZTsKdXNlIEd1enpsZUh0dHBcVXRpbHM7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CgovKioKICogUmV0dXJucyBhbiBhc3luY2hyb25vdXMgcmVzcG9uc2UgdXNpbmcgY3VybF9tdWx0aV8qIGZ1bmN0aW9ucy4KICoKICogV2hlbiB1c2luZyB0aGUgQ3VybE11bHRpSGFuZGxlciwgY3VzdG9tIGN1cmwgb3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGFzIGFuCiAqIGFzc29jaWF0aXZlIGFycmF5IG9mIGN1cmwgb3B0aW9uIGNvbnN0YW50cyBtYXBwaW5nIHRvIHZhbHVlcyBpbiB0aGUKICogKipjdXJsKioga2V5IG9mIHRoZSBwcm92aWRlZCByZXF1ZXN0IG9wdGlvbnMuCiAqCiAqIEBmaW5hbAogKi8KY2xhc3MgQ3VybE11bHRpSGFuZGxlcgp7CiAgICAvKioKICAgICAqIEB2YXIgQ3VybEZhY3RvcnlJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkZmFjdG9yeTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByaXZhdGUgJHNlbGVjdFRpbWVvdXQ7CgogICAgLyoqCiAgICAgKiBAdmFyIGludCBXaWxsIGJlIGhpZ2hlciB0aGFuIDAgd2hlbiBgY3VybF9tdWx0aV9leGVjYCBpcyBzdGlsbCBydW5uaW5nLgogICAgICovCiAgICBwcml2YXRlICRhY3RpdmUgPSAwOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheSBSZXF1ZXN0IGVudHJ5IGhhbmRsZXMsIGluZGV4ZWQgYnkgaGFuZGxlIGlkIGluIGBhZGRSZXF1ZXN0YC4KICAgICAqCiAgICAgKiBAc2VlIEN1cmxNdWx0aUhhbmRsZXI6OmFkZFJlcXVlc3QKICAgICAqLwogICAgcHJpdmF0ZSAkaGFuZGxlcyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheTxpbnQsIGZsb2F0PiBBbiBhcnJheSBvZiBkZWxheSB0aW1lcywgaW5kZXhlZCBieSBoYW5kbGUgaWQgaW4gYGFkZFJlcXVlc3RgLgogICAgICoKICAgICAqIEBzZWUgQ3VybE11bHRpSGFuZGxlcjo6YWRkUmVxdWVzdAogICAgICovCiAgICBwcml2YXRlICRkZWxheXMgPSBbXTsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXk8bWl4ZWQ+IEFuIGFzc29jaWF0aXZlIGFycmF5IG9mIENVUkxNT1BUXyogb3B0aW9ucyBhbmQgY29ycmVzcG9uZGluZyB2YWx1ZXMgZm9yIGN1cmxfbXVsdGlfc2V0b3B0KCkKICAgICAqLwogICAgcHJpdmF0ZSAkb3B0aW9ucyA9IFtdOwoKICAgIC8qKiBAdmFyIHJlc291cmNlfFxDdXJsTXVsdGlIYW5kbGUgKi8KICAgIHByaXZhdGUgJF9taDsKCiAgICAvKioKICAgICAqIFRoaXMgaGFuZGxlciBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKICAgICAqCiAgICAgKiAtIGhhbmRsZV9mYWN0b3J5OiBBbiBvcHRpb25hbCBmYWN0b3J5ICB1c2VkIHRvIGNyZWF0ZSBjdXJsIGhhbmRsZXMKICAgICAqIC0gc2VsZWN0X3RpbWVvdXQ6IE9wdGlvbmFsIHRpbWVvdXQgKGluIHNlY29uZHMpIHRvIGJsb2NrIGJlZm9yZSB0aW1pbmcKICAgICAqICAgb3V0IHdoaWxlIHNlbGVjdGluZyBjdXJsIGhhbmRsZXMuIERlZmF1bHRzIHRvIDEgc2Vjb25kLgogICAgICogLSBvcHRpb25zOiBBbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBDVVJMTU9QVF8qIG9wdGlvbnMgYW5kCiAgICAgKiAgIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGZvciBjdXJsX211bHRpX3NldG9wdCgpCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkb3B0aW9ucyA9IFtdKQogICAgewogICAgICAgICR0aGlzLT5mYWN0b3J5ID0gJG9wdGlvbnNbJ2hhbmRsZV9mYWN0b3J5J10gPz8gbmV3IEN1cmxGYWN0b3J5KDUwKTsKCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydzZWxlY3RfdGltZW91dCddKSkgewogICAgICAgICAgICAkdGhpcy0+c2VsZWN0VGltZW91dCA9ICRvcHRpb25zWydzZWxlY3RfdGltZW91dCddOwogICAgICAgIH0gZWxzZWlmICgkc2VsZWN0VGltZW91dCA9IFV0aWxzOjpnZXRlbnYoJ0dVWlpMRV9DVVJMX1NFTEVDVF9USU1FT1VUJykpIHsKICAgICAgICAgICAgQHRyaWdnZXJfZXJyb3IoJ1NpbmNlIGd1enpsZWh0dHAvZ3V6emxlIDcuMi4wOiBVc2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZSBHVVpaTEVfQ1VSTF9TRUxFQ1RfVElNRU9VVCBpcyBkZXByZWNhdGVkLiBVc2Ugb3B0aW9uICJzZWxlY3RfdGltZW91dCIgaW5zdGVhZC4nLCBcRV9VU0VSX0RFUFJFQ0FURUQpOwogICAgICAgICAgICAkdGhpcy0+c2VsZWN0VGltZW91dCA9IChpbnQpICRzZWxlY3RUaW1lb3V0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5zZWxlY3RUaW1lb3V0ID0gMTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5vcHRpb25zID0gJG9wdGlvbnNbJ29wdGlvbnMnXSA/PyBbXTsKCiAgICAgICAgLy8gdW5zZXR0aW5nIHRoZSBwcm9wZXJ0eSBmb3JjZXMgdGhlIGZpcnN0IGFjY2VzcyB0byBnbyB0aHJvdWdoCiAgICAgICAgLy8gX19nZXQoKS4KICAgICAgICB1bnNldCgkdGhpcy0+X21oKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIHJlc291cmNlfFxDdXJsTXVsdGlIYW5kbGUKICAgICAqCiAgICAgKiBAdGhyb3dzIFxCYWRNZXRob2RDYWxsRXhjZXB0aW9uIHdoZW4gYW5vdGhlciBmaWVsZCBhcyBgX21oYCB3aWxsIGJlIGdvdHRlbgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiAgICAgICB3aGVuIGN1cmwgY2FuIG5vdCBpbml0aWFsaXplIGEgbXVsdGkgaGFuZGxlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgkbmFtZSkKICAgIHsKICAgICAgICBpZiAoJG5hbWUgIT09ICdfbWgnKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbigiQ2FuIG5vdCBnZXQgb3RoZXIgcHJvcGVydHkgYXMgJ19taCcuIik7CiAgICAgICAgfQoKICAgICAgICAkbXVsdGlIYW5kbGUgPSBcY3VybF9tdWx0aV9pbml0KCk7CgogICAgICAgIGlmIChmYWxzZSA9PT0gJG11bHRpSGFuZGxlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQ2FuIG5vdCBpbml0aWFsaXplIGN1cmwgbXVsdGkgaGFuZGxlLicpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPl9taCA9ICRtdWx0aUhhbmRsZTsKCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPm9wdGlvbnMgYXMgJG9wdGlvbiA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgLy8gQSB3YXJuaW5nIGlzIHJhaXNlZCBpbiBjYXNlIG9mIGEgd3Jvbmcgb3B0aW9uLgogICAgICAgICAgICBjdXJsX211bHRpX3NldG9wdCgkdGhpcy0+X21oLCAkb3B0aW9uLCAkdmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5fbWg7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fZGVzdHJ1Y3QoKQogICAgewogICAgICAgIGlmIChpc3NldCgkdGhpcy0+X21oKSkgewogICAgICAgICAgICBcY3VybF9tdWx0aV9jbG9zZSgkdGhpcy0+X21oKTsKICAgICAgICAgICAgdW5zZXQoJHRoaXMtPl9taCk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2ludm9rZShSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAkb3B0aW9ucyk6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICAkZWFzeSA9ICR0aGlzLT5mYWN0b3J5LT5jcmVhdGUoJHJlcXVlc3QsICRvcHRpb25zKTsKICAgICAgICAkaWQgPSAoaW50KSAkZWFzeS0+aGFuZGxlOwoKICAgICAgICAkcHJvbWlzZSA9IG5ldyBQcm9taXNlKAogICAgICAgICAgICBbJHRoaXMsICdleGVjdXRlJ10sCiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHVzZSAoJGlkKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPmNhbmNlbCgkaWQpOwogICAgICAgICAgICB9CiAgICAgICAgKTsKCiAgICAgICAgJHRoaXMtPmFkZFJlcXVlc3QoWydlYXN5JyA9PiAkZWFzeSwgJ2RlZmVycmVkJyA9PiAkcHJvbWlzZV0pOwoKICAgICAgICByZXR1cm4gJHByb21pc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaWNrcyB0aGUgY3VybCBldmVudCBsb29wLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGljaygpOiB2b2lkCiAgICB7CiAgICAgICAgLy8gQWRkIGFueSBkZWxheWVkIGhhbmRsZXMgaWYgbmVlZGVkLgogICAgICAgIGlmICgkdGhpcy0+ZGVsYXlzKSB7CiAgICAgICAgICAgICRjdXJyZW50VGltZSA9IFV0aWxzOjpjdXJyZW50VGltZSgpOwogICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+ZGVsYXlzIGFzICRpZCA9PiAkZGVsYXkpIHsKICAgICAgICAgICAgICAgIGlmICgkY3VycmVudFRpbWUgPj0gJGRlbGF5KSB7CiAgICAgICAgICAgICAgICAgICAgdW5zZXQoJHRoaXMtPmRlbGF5c1skaWRdKTsKICAgICAgICAgICAgICAgICAgICBcY3VybF9tdWx0aV9hZGRfaGFuZGxlKAogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+X21oLAogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+aGFuZGxlc1skaWRdWydlYXN5J10tPmhhbmRsZQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFJ1biBjdXJsX211bHRpX2V4ZWMgaW4gdGhlIHF1ZXVlIHRvIGVuYWJsZSBvdGhlciBhc3luYyB0YXNrcyB0byBydW4KICAgICAgICBQXFV0aWxzOjpxdWV1ZSgpLT5hZGQoQ2xvc3VyZTo6ZnJvbUNhbGxhYmxlKFskdGhpcywgJ3RpY2tJblF1ZXVlJ10pKTsKCiAgICAgICAgLy8gU3RlcCB0aHJvdWdoIHRoZSB0YXNrIHF1ZXVlIHdoaWNoIG1heSBhZGQgYWRkaXRpb25hbCByZXF1ZXN0cy4KICAgICAgICBQXFV0aWxzOjpxdWV1ZSgpLT5ydW4oKTsKCiAgICAgICAgaWYgKCR0aGlzLT5hY3RpdmUgJiYgXGN1cmxfbXVsdGlfc2VsZWN0KCR0aGlzLT5fbWgsICR0aGlzLT5zZWxlY3RUaW1lb3V0KSA9PT0gLTEpIHsKICAgICAgICAgICAgLy8gUGVyZm9ybSBhIHVzbGVlcCBpZiBhIHNlbGVjdCByZXR1cm5zIC0xLgogICAgICAgICAgICAvLyBTZWU6IGh0dHBzOi8vYnVncy5waHAubmV0L2J1Zy5waHA/aWQ9NjExNDEKICAgICAgICAgICAgXHVzbGVlcCgyNTApOwogICAgICAgIH0KCiAgICAgICAgd2hpbGUgKFxjdXJsX211bHRpX2V4ZWMoJHRoaXMtPl9taCwgJHRoaXMtPmFjdGl2ZSkgPT09IFxDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk0pIHsKICAgICAgICAgICAgLy8gUHJldmVudCBidXN5IGxvb3BpbmcgZm9yIHNsb3cgSFRUUCByZXF1ZXN0cy4KICAgICAgICAgICAgXGN1cmxfbXVsdGlfc2VsZWN0KCR0aGlzLT5fbWgsICR0aGlzLT5zZWxlY3RUaW1lb3V0KTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5wcm9jZXNzTWVzc2FnZXMoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJ1bnMgXGN1cmxfbXVsdGlfZXhlYygpIGluc2lkZSB0aGUgZXZlbnQgbG9vcCwgdG8gcHJldmVudCBidXN5IGxvb3BpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiB0aWNrSW5RdWV1ZSgpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKFxjdXJsX211bHRpX2V4ZWMoJHRoaXMtPl9taCwgJHRoaXMtPmFjdGl2ZSkgPT09IFxDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk0pIHsKICAgICAgICAgICAgXGN1cmxfbXVsdGlfc2VsZWN0KCR0aGlzLT5fbWgsIDApOwogICAgICAgICAgICBQXFV0aWxzOjpxdWV1ZSgpLT5hZGQoQ2xvc3VyZTo6ZnJvbUNhbGxhYmxlKFskdGhpcywgJ3RpY2tJblF1ZXVlJ10pKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSdW5zIHVudGlsIGFsbCBvdXRzdGFuZGluZyBjb25uZWN0aW9ucyBoYXZlIGNvbXBsZXRlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4ZWN1dGUoKTogdm9pZAogICAgewogICAgICAgICRxdWV1ZSA9IFBcVXRpbHM6OnF1ZXVlKCk7CgogICAgICAgIHdoaWxlICgkdGhpcy0+aGFuZGxlcyB8fCAhJHF1ZXVlLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIHRyYW5zZmVycywgdGhlbiBzbGVlcCBmb3IgdGhlIG5leHQgZGVsYXkKICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWN0aXZlICYmICR0aGlzLT5kZWxheXMpIHsKICAgICAgICAgICAgICAgIFx1c2xlZXAoJHRoaXMtPnRpbWVUb05leHQoKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPnRpY2soKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBhZGRSZXF1ZXN0KGFycmF5ICRlbnRyeSk6IHZvaWQKICAgIHsKICAgICAgICAkZWFzeSA9ICRlbnRyeVsnZWFzeSddOwogICAgICAgICRpZCA9IChpbnQpICRlYXN5LT5oYW5kbGU7CiAgICAgICAgJHRoaXMtPmhhbmRsZXNbJGlkXSA9ICRlbnRyeTsKICAgICAgICBpZiAoZW1wdHkoJGVhc3ktPm9wdGlvbnNbJ2RlbGF5J10pKSB7CiAgICAgICAgICAgIFxjdXJsX211bHRpX2FkZF9oYW5kbGUoJHRoaXMtPl9taCwgJGVhc3ktPmhhbmRsZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPmRlbGF5c1skaWRdID0gVXRpbHM6OmN1cnJlbnRUaW1lKCkgKyAoJGVhc3ktPm9wdGlvbnNbJ2RlbGF5J10gLyAxMDAwKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBDYW5jZWxzIGEgaGFuZGxlIGZyb20gc2VuZGluZyBhbmQgcmVtb3ZlcyByZWZlcmVuY2VzIHRvIGl0LgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGlkIEhhbmRsZSBJRCB0byBjYW5jZWwgYW5kIHJlbW92ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgVHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBmYWlsdXJlLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNhbmNlbCgkaWQpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCFpc19pbnQoJGlkKSkgewogICAgICAgICAgICB0cmlnZ2VyX2RlcHJlY2F0aW9uKCdndXp6bGVodHRwL2d1enpsZScsICc3LjQnLCAnTm90IHBhc3NpbmcgYW4gaW50ZWdlciB0byAlczo6JXMoKSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGNhdXNlIGFuIGVycm9yIGluIDguMC4nLCBfX0NMQVNTX18sIF9fRlVOQ1RJT05fXyk7CiAgICAgICAgfQoKICAgICAgICAvLyBDYW5ub3QgY2FuY2VsIGlmIGl0IGhhcyBiZWVuIHByb2Nlc3NlZC4KICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5oYW5kbGVzWyRpZF0pKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgICRoYW5kbGUgPSAkdGhpcy0+aGFuZGxlc1skaWRdWydlYXN5J10tPmhhbmRsZTsKICAgICAgICB1bnNldCgkdGhpcy0+ZGVsYXlzWyRpZF0sICR0aGlzLT5oYW5kbGVzWyRpZF0pOwogICAgICAgIFxjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoJHRoaXMtPl9taCwgJGhhbmRsZSk7CgogICAgICAgIGlmIChQSFBfVkVSU0lPTl9JRCA8IDgwMDAwKSB7CiAgICAgICAgICAgIFxjdXJsX2Nsb3NlKCRoYW5kbGUpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBwcm9jZXNzTWVzc2FnZXMoKTogdm9pZAogICAgewogICAgICAgIHdoaWxlICgkZG9uZSA9IFxjdXJsX211bHRpX2luZm9fcmVhZCgkdGhpcy0+X21oKSkgewogICAgICAgICAgICBpZiAoJGRvbmVbJ21zZyddICE9PSBcQ1VSTE1TR19ET05FKSB7CiAgICAgICAgICAgICAgICAvLyBpZiBpdCdzIG5vdCBkb25lLCB0aGVuIGl0IHdvdWxkIGJlIHByZW1hdHVyZSB0byByZW1vdmUgdGhlIGhhbmRsZS4gcmVmIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjg5MiNpc3N1ZWNvbW1lbnQtOTQ1MTUwMjE2CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkaWQgPSAoaW50KSAkZG9uZVsnaGFuZGxlJ107CiAgICAgICAgICAgIFxjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoJHRoaXMtPl9taCwgJGRvbmVbJ2hhbmRsZSddKTsKCiAgICAgICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmhhbmRsZXNbJGlkXSkpIHsKICAgICAgICAgICAgICAgIC8vIFByb2JhYmx5IHdhcyBjYW5jZWxsZWQuCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGVudHJ5ID0gJHRoaXMtPmhhbmRsZXNbJGlkXTsKICAgICAgICAgICAgdW5zZXQoJHRoaXMtPmhhbmRsZXNbJGlkXSwgJHRoaXMtPmRlbGF5c1skaWRdKTsKICAgICAgICAgICAgJGVudHJ5WydlYXN5J10tPmVycm5vID0gJGRvbmVbJ3Jlc3VsdCddOwogICAgICAgICAgICAkZW50cnlbJ2RlZmVycmVkJ10tPnJlc29sdmUoCiAgICAgICAgICAgICAgICBDdXJsRmFjdG9yeTo6ZmluaXNoKCR0aGlzLCAkZW50cnlbJ2Vhc3knXSwgJHRoaXMtPmZhY3RvcnkpCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gdGltZVRvTmV4dCgpOiBpbnQKICAgIHsKICAgICAgICAkY3VycmVudFRpbWUgPSBVdGlsczo6Y3VycmVudFRpbWUoKTsKICAgICAgICAkbmV4dFRpbWUgPSBcUEhQX0lOVF9NQVg7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmRlbGF5cyBhcyAkdGltZSkgewogICAgICAgICAgICBpZiAoJHRpbWUgPCAkbmV4dFRpbWUpIHsKICAgICAgICAgICAgICAgICRuZXh0VGltZSA9ICR0aW1lOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gKChpbnQpIFxtYXgoMCwgJG5leHRUaW1lIC0gJGN1cnJlbnRUaW1lKSkgKiAxMDAwMDAwOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEhhbmRsZXI7Cgp1c2UgR3V6emxlSHR0cFxQc3I3XFJlc3BvbnNlOwp1c2UgR3V6emxlSHR0cFxVdGlsczsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVzcG9uc2VJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBSZXByZXNlbnRzIGEgY1VSTCBlYXN5IGhhbmRsZSBhbmQgdGhlIGRhdGEgaXQgcG9wdWxhdGVzLgogKgogKiBAaW50ZXJuYWwKICovCmZpbmFsIGNsYXNzIEVhc3lIYW5kbGUKewogICAgLyoqCiAgICAgKiBAdmFyIHJlc291cmNlfFxDdXJsSGFuZGxlIGNVUkwgcmVzb3VyY2UKICAgICAqLwogICAgcHVibGljICRoYW5kbGU7CgogICAgLyoqCiAgICAgKiBAdmFyIFN0cmVhbUludGVyZmFjZSBXaGVyZSBkYXRhIGlzIGJlaW5nIHdyaXR0ZW4KICAgICAqLwogICAgcHVibGljICRzaW5rOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheSBSZWNlaXZlZCBIVFRQIGhlYWRlcnMgc28gZmFyCiAgICAgKi8KICAgIHB1YmxpYyAkaGVhZGVycyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBSZXNwb25zZUludGVyZmFjZXxudWxsIFJlY2VpdmVkIHJlc3BvbnNlIChpZiBhbnkpCiAgICAgKi8KICAgIHB1YmxpYyAkcmVzcG9uc2U7CgogICAgLyoqCiAgICAgKiBAdmFyIFJlcXVlc3RJbnRlcmZhY2UgUmVxdWVzdCBiZWluZyBzZW50CiAgICAgKi8KICAgIHB1YmxpYyAkcmVxdWVzdDsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkgUmVxdWVzdCBvcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyAkb3B0aW9ucyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBpbnQgY1VSTCBlcnJvciBudW1iZXIgKGlmIGFueSkKICAgICAqLwogICAgcHVibGljICRlcnJubyA9IDA7CgogICAgLyoqCiAgICAgKiBAdmFyIFxUaHJvd2FibGV8bnVsbCBFeGNlcHRpb24gZHVyaW5nIG9uX2hlYWRlcnMgKGlmIGFueSkKICAgICAqLwogICAgcHVibGljICRvbkhlYWRlcnNFeGNlcHRpb247CgogICAgLyoqCiAgICAgKiBAdmFyIFxFeGNlcHRpb258bnVsbCBFeGNlcHRpb24gZHVyaW5nIGNyZWF0ZVJlc3BvbnNlIChpZiBhbnkpCiAgICAgKi8KICAgIHB1YmxpYyAkY3JlYXRlUmVzcG9uc2VFeGNlcHRpb247CgogICAgLyoqCiAgICAgKiBBdHRhY2ggYSByZXNwb25zZSB0byB0aGUgZWFzeSBoYW5kbGUgYmFzZWQgb24gdGhlIHJlY2VpdmVkIGhlYWRlcnMuCiAgICAgKgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBpZiBubyBoZWFkZXJzIGhhdmUgYmVlbiByZWNlaXZlZCBvciB0aGUgZmlyc3QKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyIGxpbmUgaXMgaW52YWxpZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZVJlc3BvbnNlKCk6IHZvaWQKICAgIHsKICAgICAgICBbJHZlciwgJHN0YXR1cywgJHJlYXNvbiwgJGhlYWRlcnNdID0gSGVhZGVyUHJvY2Vzc29yOjpwYXJzZUhlYWRlcnMoJHRoaXMtPmhlYWRlcnMpOwoKICAgICAgICAkbm9ybWFsaXplZEtleXMgPSBVdGlsczo6bm9ybWFsaXplSGVhZGVyS2V5cygkaGVhZGVycyk7CgogICAgICAgIGlmICghZW1wdHkoJHRoaXMtPm9wdGlvbnNbJ2RlY29kZV9jb250ZW50J10pICYmIGlzc2V0KCRub3JtYWxpemVkS2V5c1snY29udGVudC1lbmNvZGluZyddKSkgewogICAgICAgICAgICAkaGVhZGVyc1sneC1lbmNvZGVkLWNvbnRlbnQtZW5jb2RpbmcnXSA9ICRoZWFkZXJzWyRub3JtYWxpemVkS2V5c1snY29udGVudC1lbmNvZGluZyddXTsKICAgICAgICAgICAgdW5zZXQoJGhlYWRlcnNbJG5vcm1hbGl6ZWRLZXlzWydjb250ZW50LWVuY29kaW5nJ11dKTsKICAgICAgICAgICAgaWYgKGlzc2V0KCRub3JtYWxpemVkS2V5c1snY29udGVudC1sZW5ndGgnXSkpIHsKICAgICAgICAgICAgICAgICRoZWFkZXJzWyd4LWVuY29kZWQtY29udGVudC1sZW5ndGgnXSA9ICRoZWFkZXJzWyRub3JtYWxpemVkS2V5c1snY29udGVudC1sZW5ndGgnXV07CgogICAgICAgICAgICAgICAgJGJvZHlMZW5ndGggPSAoaW50KSAkdGhpcy0+c2luay0+Z2V0U2l6ZSgpOwogICAgICAgICAgICAgICAgaWYgKCRib2R5TGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgJGhlYWRlcnNbJG5vcm1hbGl6ZWRLZXlzWydjb250ZW50LWxlbmd0aCddXSA9ICRib2R5TGVuZ3RoOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB1bnNldCgkaGVhZGVyc1skbm9ybWFsaXplZEtleXNbJ2NvbnRlbnQtbGVuZ3RoJ11dKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gQXR0YWNoIGEgcmVzcG9uc2UgdG8gdGhlIGVhc3kgaGFuZGxlIHdpdGggdGhlIHBhcnNlZCBoZWFkZXJzLgogICAgICAgICR0aGlzLT5yZXNwb25zZSA9IG5ldyBSZXNwb25zZSgKICAgICAgICAgICAgJHN0YXR1cywKICAgICAgICAgICAgJGhlYWRlcnMsCiAgICAgICAgICAgICR0aGlzLT5zaW5rLAogICAgICAgICAgICAkdmVyLAogICAgICAgICAgICAkcmVhc29uCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqCiAgICAgKiBAdGhyb3dzIFxCYWRNZXRob2RDYWxsRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgkbmFtZSkKICAgIHsKICAgICAgICAkbXNnID0gJG5hbWUgPT09ICdoYW5kbGUnID8gJ1RoZSBFYXN5SGFuZGxlIGhhcyBiZWVuIHJlbGVhc2VkJyA6ICdJbnZhbGlkIHByb3BlcnR5OiAnLiRuYW1lOwogICAgICAgIHRocm93IG5ldyBcQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbigkbXNnKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEhhbmRsZXI7Cgp1c2UgR3V6emxlSHR0cFxVdGlsczsKCi8qKgogKiBAaW50ZXJuYWwKICovCmZpbmFsIGNsYXNzIEhlYWRlclByb2Nlc3Nvcgp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIEhUVFAgdmVyc2lvbiwgc3RhdHVzIGNvZGUsIHJlYXNvbiBwaHJhc2UsIGFuZCBoZWFkZXJzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmdbXSAkaGVhZGVycwogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl7MDpzdHJpbmcsIDE6aW50LCAyOj9zdHJpbmcsIDM6YXJyYXl9CiAgICAgKgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBhcnNlSGVhZGVycyhhcnJheSAkaGVhZGVycyk6IGFycmF5CiAgICB7CiAgICAgICAgaWYgKCRoZWFkZXJzID09PSBbXSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0V4cGVjdGVkIGEgbm9uLWVtcHR5IGFycmF5IG9mIGhlYWRlciBkYXRhJyk7CiAgICAgICAgfQoKICAgICAgICAkcGFydHMgPSBcZXhwbG9kZSgnICcsIFxhcnJheV9zaGlmdCgkaGVhZGVycyksIDMpOwogICAgICAgICR2ZXJzaW9uID0gXGV4cGxvZGUoJy8nLCAkcGFydHNbMF0pWzFdID8/IG51bGw7CgogICAgICAgIGlmICgkdmVyc2lvbiA9PT0gbnVsbCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0hUVFAgdmVyc2lvbiBtaXNzaW5nIGZyb20gaGVhZGVyIGRhdGEnKTsKICAgICAgICB9CgogICAgICAgICRzdGF0dXMgPSAkcGFydHNbMV0gPz8gbnVsbDsKCiAgICAgICAgaWYgKCRzdGF0dXMgPT09IG51bGwpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdIVFRQIHN0YXR1cyBjb2RlIG1pc3NpbmcgZnJvbSBoZWFkZXIgZGF0YScpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFskdmVyc2lvbiwgKGludCkgJHN0YXR1cywgJHBhcnRzWzJdID8/IG51bGwsIFV0aWxzOjpoZWFkZXJzRnJvbUxpbmVzKCRoZWFkZXJzKV07CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEhhbmRsZXI7Cgp1c2UgR3V6emxlSHR0cFxFeGNlcHRpb25cUmVxdWVzdEV4Y2VwdGlvbjsKdXNlIEd1enpsZUh0dHBcSGFuZGxlclN0YWNrOwp1c2UgR3V6emxlSHR0cFxQcm9taXNlIGFzIFA7CnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUHJvbWlzZUludGVyZmFjZTsKdXNlIEd1enpsZUh0dHBcVHJhbnNmZXJTdGF0czsKdXNlIEd1enpsZUh0dHBcVXRpbHM7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxTdHJlYW1JbnRlcmZhY2U7CgovKioKICogSGFuZGxlciB0aGF0IHJldHVybnMgcmVzcG9uc2VzIG9yIHRocm93IGV4Y2VwdGlvbnMgZnJvbSBhIHF1ZXVlLgogKgogKiBAZmluYWwKICovCmNsYXNzIE1vY2tIYW5kbGVyIGltcGxlbWVudHMgXENvdW50YWJsZQp7CiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSAkcXVldWUgPSBbXTsKCiAgICAvKioKICAgICAqIEB2YXIgUmVxdWVzdEludGVyZmFjZXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGxhc3RSZXF1ZXN0OwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICRsYXN0T3B0aW9ucyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBjYWxsYWJsZXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJG9uRnVsZmlsbGVkOwoKICAgIC8qKgogICAgICogQHZhciBjYWxsYWJsZXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJG9uUmVqZWN0ZWQ7CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgbmV3IE1vY2tIYW5kbGVyIHRoYXQgdXNlcyB0aGUgZGVmYXVsdCBoYW5kbGVyIHN0YWNrIGxpc3Qgb2YKICAgICAqIG1pZGRsZXdhcmVzLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheXxudWxsICAgICRxdWV1ZSAgICAgICBBcnJheSBvZiByZXNwb25zZXMsIGNhbGxhYmxlcywgb3IgZXhjZXB0aW9ucy4KICAgICAqIEBwYXJhbSBjYWxsYWJsZXxudWxsICRvbkZ1bGZpbGxlZCBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgcmV0dXJuIHZhbHVlIGlzIGZ1bGZpbGxlZC4KICAgICAqIEBwYXJhbSBjYWxsYWJsZXxudWxsICRvblJlamVjdGVkICBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgcmV0dXJuIHZhbHVlIGlzIHJlamVjdGVkLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZVdpdGhNaWRkbGV3YXJlKD9hcnJheSAkcXVldWUgPSBudWxsLCA/Y2FsbGFibGUgJG9uRnVsZmlsbGVkID0gbnVsbCwgP2NhbGxhYmxlICRvblJlamVjdGVkID0gbnVsbCk6IEhhbmRsZXJTdGFjawogICAgewogICAgICAgIHJldHVybiBIYW5kbGVyU3RhY2s6OmNyZWF0ZShuZXcgc2VsZigkcXVldWUsICRvbkZ1bGZpbGxlZCwgJG9uUmVqZWN0ZWQpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoZSBwYXNzZWQgaW4gdmFsdWUgbXVzdCBiZSBhbiBhcnJheSBvZgogICAgICoge0BzZWUgUmVzcG9uc2VJbnRlcmZhY2V9IG9iamVjdHMsIEV4Y2VwdGlvbnMsCiAgICAgKiBjYWxsYWJsZXMsIG9yIFByb21pc2VzLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheTxpbnQsIG1peGVkPnxudWxsICRxdWV1ZSAgICAgICBUaGUgcGFyYW1ldGVycyB0byBiZSBwYXNzZWQgdG8gdGhlIGFwcGVuZCBmdW5jdGlvbiwgYXMgYW4gaW5kZXhlZCBhcnJheS4KICAgICAqIEBwYXJhbSBjYWxsYWJsZXxudWxsICAgICAgICAgICRvbkZ1bGZpbGxlZCBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgcmV0dXJuIHZhbHVlIGlzIGZ1bGZpbGxlZC4KICAgICAqIEBwYXJhbSBjYWxsYWJsZXxudWxsICAgICAgICAgICRvblJlamVjdGVkICBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgcmV0dXJuIHZhbHVlIGlzIHJlamVjdGVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoP2FycmF5ICRxdWV1ZSA9IG51bGwsID9jYWxsYWJsZSAkb25GdWxmaWxsZWQgPSBudWxsLCA/Y2FsbGFibGUgJG9uUmVqZWN0ZWQgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT5vbkZ1bGZpbGxlZCA9ICRvbkZ1bGZpbGxlZDsKICAgICAgICAkdGhpcy0+b25SZWplY3RlZCA9ICRvblJlamVjdGVkOwoKICAgICAgICBpZiAoJHF1ZXVlKSB7CiAgICAgICAgICAgIC8vIGFycmF5X3ZhbHVlcyBpbmNsdWRlZCBmb3IgQkMKICAgICAgICAgICAgJHRoaXMtPmFwcGVuZCguLi5hcnJheV92YWx1ZXMoJHF1ZXVlKSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2ludm9rZShSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAkb3B0aW9ucyk6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5xdWV1ZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXE91dE9mQm91bmRzRXhjZXB0aW9uKCdNb2NrIHF1ZXVlIGlzIGVtcHR5Jyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2RlbGF5J10pICYmIFxpc19udW1lcmljKCRvcHRpb25zWydkZWxheSddKSkgewogICAgICAgICAgICBcdXNsZWVwKChpbnQpICRvcHRpb25zWydkZWxheSddICogMTAwMCk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+bGFzdFJlcXVlc3QgPSAkcmVxdWVzdDsKICAgICAgICAkdGhpcy0+bGFzdE9wdGlvbnMgPSAkb3B0aW9uczsKICAgICAgICAkcmVzcG9uc2UgPSBcYXJyYXlfc2hpZnQoJHRoaXMtPnF1ZXVlKTsKCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydvbl9oZWFkZXJzJ10pKSB7CiAgICAgICAgICAgIGlmICghXGlzX2NhbGxhYmxlKCRvcHRpb25zWydvbl9oZWFkZXJzJ10pKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignb25faGVhZGVycyBtdXN0IGJlIGNhbGxhYmxlJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICRvcHRpb25zWydvbl9oZWFkZXJzJ10oJHJlc3BvbnNlKTsKICAgICAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgJG1zZyA9ICdBbiBlcnJvciB3YXMgZW5jb3VudGVyZWQgZHVyaW5nIHRoZSBvbl9oZWFkZXJzIGV2ZW50JzsKICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IG5ldyBSZXF1ZXN0RXhjZXB0aW9uKCRtc2csICRyZXF1ZXN0LCAkcmVzcG9uc2UsICRlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKFxpc19jYWxsYWJsZSgkcmVzcG9uc2UpKSB7CiAgICAgICAgICAgICRyZXNwb25zZSA9ICRyZXNwb25zZSgkcmVxdWVzdCwgJG9wdGlvbnMpOwogICAgICAgIH0KCiAgICAgICAgJHJlc3BvbnNlID0gJHJlc3BvbnNlIGluc3RhbmNlb2YgXFRocm93YWJsZQogICAgICAgICAgICA/IFBcQ3JlYXRlOjpyZWplY3Rpb25Gb3IoJHJlc3BvbnNlKQogICAgICAgICAgICA6IFBcQ3JlYXRlOjpwcm9taXNlRm9yKCRyZXNwb25zZSk7CgogICAgICAgIHJldHVybiAkcmVzcG9uc2UtPnRoZW4oCiAgICAgICAgICAgIGZ1bmN0aW9uICg/UmVzcG9uc2VJbnRlcmZhY2UgJHZhbHVlKSB1c2UgKCRyZXF1ZXN0LCAkb3B0aW9ucykgewogICAgICAgICAgICAgICAgJHRoaXMtPmludm9rZVN0YXRzKCRyZXF1ZXN0LCAkb3B0aW9ucywgJHZhbHVlKTsKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+b25GdWxmaWxsZWQpIHsKICAgICAgICAgICAgICAgICAgICAoJHRoaXMtPm9uRnVsZmlsbGVkKSgkdmFsdWUpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkdmFsdWUgIT09IG51bGwgJiYgaXNzZXQoJG9wdGlvbnNbJ3NpbmsnXSkpIHsKICAgICAgICAgICAgICAgICAgICAkY29udGVudHMgPSAoc3RyaW5nKSAkdmFsdWUtPmdldEJvZHkoKTsKICAgICAgICAgICAgICAgICAgICAkc2luayA9ICRvcHRpb25zWydzaW5rJ107CgogICAgICAgICAgICAgICAgICAgIGlmIChcaXNfcmVzb3VyY2UoJHNpbmspKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFxmd3JpdGUoJHNpbmssICRjb250ZW50cyk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKFxpc19zdHJpbmcoJHNpbmspKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFxmaWxlX3B1dF9jb250ZW50cygkc2luaywgJGNvbnRlbnRzKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJHNpbmsgaW5zdGFuY2VvZiBTdHJlYW1JbnRlcmZhY2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHNpbmstPndyaXRlKCRjb250ZW50cyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiAkdmFsdWU7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGZ1bmN0aW9uICgkcmVhc29uKSB1c2UgKCRyZXF1ZXN0LCAkb3B0aW9ucykgewogICAgICAgICAgICAgICAgJHRoaXMtPmludm9rZVN0YXRzKCRyZXF1ZXN0LCAkb3B0aW9ucywgbnVsbCwgJHJlYXNvbik7CiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPm9uUmVqZWN0ZWQpIHsKICAgICAgICAgICAgICAgICAgICAoJHRoaXMtPm9uUmVqZWN0ZWQpKCRyZWFzb24pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBQXENyZWF0ZTo6cmVqZWN0aW9uRm9yKCRyZWFzb24pOwogICAgICAgICAgICB9CiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZHMgb25lIG9yIG1vcmUgdmFyaWFkaWMgcmVxdWVzdHMsIGV4Y2VwdGlvbnMsIGNhbGxhYmxlcywgb3IgcHJvbWlzZXMKICAgICAqIHRvIHRoZSBxdWV1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgLi4uJHZhbHVlcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXBwZW5kKC4uLiR2YWx1ZXMpOiB2b2lkCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJHZhbHVlcyBhcyAkdmFsdWUpIHsKICAgICAgICAgICAgaWYgKCR2YWx1ZSBpbnN0YW5jZW9mIFJlc3BvbnNlSW50ZXJmYWNlCiAgICAgICAgICAgICAgICB8fCAkdmFsdWUgaW5zdGFuY2VvZiBcVGhyb3dhYmxlCiAgICAgICAgICAgICAgICB8fCAkdmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlSW50ZXJmYWNlCiAgICAgICAgICAgICAgICB8fCBcaXNfY2FsbGFibGUoJHZhbHVlKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICR0aGlzLT5xdWV1ZVtdID0gJHZhbHVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxUeXBlRXJyb3IoJ0V4cGVjdGVkIGEgUmVzcG9uc2UsIFByb21pc2UsIFRocm93YWJsZSBvciBjYWxsYWJsZS4gRm91bmQgJy5VdGlsczo6ZGVzY3JpYmVUeXBlKCR2YWx1ZSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBsYXN0IHJlY2VpdmVkIHJlcXVlc3QuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMYXN0UmVxdWVzdCgpOiA/UmVxdWVzdEludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bGFzdFJlcXVlc3Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGxhc3QgcmVjZWl2ZWQgcmVxdWVzdCBvcHRpb25zLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGFzdE9wdGlvbnMoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmxhc3RPcHRpb25zOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyBpdGVtcyBpbiB0aGUgcXVldWUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb3VudCgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gXGNvdW50KCR0aGlzLT5xdWV1ZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlc2V0KCk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+cXVldWUgPSBbXTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkcmVhc29uIFByb21pc2Ugb3IgcmVhc29uLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGludm9rZVN0YXRzKAogICAgICAgIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsCiAgICAgICAgYXJyYXkgJG9wdGlvbnMsCiAgICAgICAgP1Jlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZSA9IG51bGwsCiAgICAgICAgJHJlYXNvbiA9IG51bGwKICAgICk6IHZvaWQgewogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snb25fc3RhdHMnXSkpIHsKICAgICAgICAgICAgJHRyYW5zZmVyVGltZSA9ICRvcHRpb25zWyd0cmFuc2Zlcl90aW1lJ10gPz8gMDsKICAgICAgICAgICAgJHN0YXRzID0gbmV3IFRyYW5zZmVyU3RhdHMoJHJlcXVlc3QsICRyZXNwb25zZSwgJHRyYW5zZmVyVGltZSwgJHJlYXNvbik7CiAgICAgICAgICAgICgkb3B0aW9uc1snb25fc3RhdHMnXSkoJHN0YXRzKTsKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEhhbmRsZXI7Cgp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2VJbnRlcmZhY2U7CnVzZSBHdXp6bGVIdHRwXFJlcXVlc3RPcHRpb25zOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwoKLyoqCiAqIFByb3ZpZGVzIGJhc2ljIHByb3hpZXMgZm9yIGhhbmRsZXJzLgogKgogKiBAZmluYWwKICovCmNsYXNzIFByb3h5CnsKICAgIC8qKgogICAgICogU2VuZHMgc3luY2hyb25vdXMgcmVxdWVzdHMgdG8gYSBzcGVjaWZpYyBoYW5kbGVyIHdoaWxlIHNlbmRpbmcgYWxsIG90aGVyCiAgICAgKiByZXF1ZXN0cyB0byBhbm90aGVyIGhhbmRsZXIuCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlKFJlcXVlc3RJbnRlcmZhY2UsIGFycmF5KTogUHJvbWlzZUludGVyZmFjZSAkZGVmYXVsdCBIYW5kbGVyIHVzZWQgZm9yIG5vcm1hbCByZXNwb25zZXMKICAgICAqIEBwYXJhbSBjYWxsYWJsZShSZXF1ZXN0SW50ZXJmYWNlLCBhcnJheSk6IFByb21pc2VJbnRlcmZhY2UgJHN5bmMgICAgSGFuZGxlciB1c2VkIGZvciBzeW5jaHJvbm91cyByZXNwb25zZXMuCiAgICAgKgogICAgICogQHJldHVybiBjYWxsYWJsZShSZXF1ZXN0SW50ZXJmYWNlLCBhcnJheSk6IFByb21pc2VJbnRlcmZhY2UgUmV0dXJucyB0aGUgY29tcG9zZWQgaGFuZGxlci4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB3cmFwU3luYyhjYWxsYWJsZSAkZGVmYXVsdCwgY2FsbGFibGUgJHN5bmMpOiBjYWxsYWJsZQogICAgewogICAgICAgIHJldHVybiBzdGF0aWMgZnVuY3Rpb24gKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKSB1c2UgKCRkZWZhdWx0LCAkc3luYyk6IFByb21pc2VJbnRlcmZhY2UgewogICAgICAgICAgICByZXR1cm4gZW1wdHkoJG9wdGlvbnNbUmVxdWVzdE9wdGlvbnM6OlNZTkNIUk9OT1VTXSkgPyAkZGVmYXVsdCgkcmVxdWVzdCwgJG9wdGlvbnMpIDogJHN5bmMoJHJlcXVlc3QsICRvcHRpb25zKTsKICAgICAgICB9OwogICAgfQoKICAgIC8qKgogICAgICogU2VuZHMgc3RyZWFtaW5nIHJlcXVlc3RzIHRvIGEgc3RyZWFtaW5nIGNvbXBhdGlibGUgaGFuZGxlciB3aGlsZSBzZW5kaW5nCiAgICAgKiBhbGwgb3RoZXIgcmVxdWVzdHMgdG8gYSBkZWZhdWx0IGhhbmRsZXIuCiAgICAgKgogICAgICogVGhpcywgZm9yIGV4YW1wbGUsIGNvdWxkIGJlIHVzZWZ1bCBmb3IgdGFraW5nIGFkdmFudGFnZSBvZiB0aGUKICAgICAqIHBlcmZvcm1hbmNlIGJlbmVmaXRzIG9mIGN1cmwgd2hpbGUgc3RpbGwgc3VwcG9ydGluZyB0cnVlIHN0cmVhbWluZwogICAgICogdGhyb3VnaCB0aGUgU3RyZWFtSGFuZGxlci4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUoUmVxdWVzdEludGVyZmFjZSwgYXJyYXkpOiBQcm9taXNlSW50ZXJmYWNlICRkZWZhdWx0ICAgSGFuZGxlciB1c2VkIGZvciBub24tc3RyZWFtaW5nIHJlc3BvbnNlcwogICAgICogQHBhcmFtIGNhbGxhYmxlKFJlcXVlc3RJbnRlcmZhY2UsIGFycmF5KTogUHJvbWlzZUludGVyZmFjZSAkc3RyZWFtaW5nIEhhbmRsZXIgdXNlZCBmb3Igc3RyZWFtaW5nIHJlc3BvbnNlcwogICAgICoKICAgICAqIEByZXR1cm4gY2FsbGFibGUoUmVxdWVzdEludGVyZmFjZSwgYXJyYXkpOiBQcm9taXNlSW50ZXJmYWNlIFJldHVybnMgdGhlIGNvbXBvc2VkIGhhbmRsZXIuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gd3JhcFN0cmVhbWluZyhjYWxsYWJsZSAkZGVmYXVsdCwgY2FsbGFibGUgJHN0cmVhbWluZyk6IGNhbGxhYmxlCiAgICB7CiAgICAgICAgcmV0dXJuIHN0YXRpYyBmdW5jdGlvbiAoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpIHVzZSAoJGRlZmF1bHQsICRzdHJlYW1pbmcpOiBQcm9taXNlSW50ZXJmYWNlIHsKICAgICAgICAgICAgcmV0dXJuIGVtcHR5KCRvcHRpb25zWydzdHJlYW0nXSkgPyAkZGVmYXVsdCgkcmVxdWVzdCwgJG9wdGlvbnMpIDogJHN0cmVhbWluZygkcmVxdWVzdCwgJG9wdGlvbnMpOwogICAgICAgIH07CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEhhbmRsZXI7Cgp1c2UgR3V6emxlSHR0cFxFeGNlcHRpb25cQ29ubmVjdEV4Y2VwdGlvbjsKdXNlIEd1enpsZUh0dHBcRXhjZXB0aW9uXFJlcXVlc3RFeGNlcHRpb247CnVzZSBHdXp6bGVIdHRwXFByb21pc2UgYXMgUDsKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxGdWxmaWxsZWRQcm9taXNlOwp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2VJbnRlcmZhY2U7CnVzZSBHdXp6bGVIdHRwXFBzcjc7CnVzZSBHdXp6bGVIdHRwXFRyYW5zZmVyU3RhdHM7CnVzZSBHdXp6bGVIdHRwXFV0aWxzOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcU3RyZWFtSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2U7CgovKioKICogSFRUUCBoYW5kbGVyIHRoYXQgdXNlcyBQSFAncyBIVFRQIHN0cmVhbSB3cmFwcGVyLgogKgogKiBAZmluYWwKICovCmNsYXNzIFN0cmVhbUhhbmRsZXIKewogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgJGxhc3RIZWFkZXJzID0gW107CgogICAgLyoqCiAgICAgKiBTZW5kcyBhbiBIVFRQIHJlcXVlc3QuCiAgICAgKgogICAgICogQHBhcmFtIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QgUmVxdWVzdCB0byBzZW5kLgogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgJG9wdGlvbnMgUmVxdWVzdCB0cmFuc2ZlciBvcHRpb25zLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19pbnZva2UoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpOiBQcm9taXNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgLy8gU2xlZXAgaWYgdGhlcmUgaXMgYSBkZWxheSBzcGVjaWZpZWQuCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydkZWxheSddKSkgewogICAgICAgICAgICBcdXNsZWVwKCRvcHRpb25zWydkZWxheSddICogMTAwMCk7CiAgICAgICAgfQoKICAgICAgICAkcHJvdG9jb2xWZXJzaW9uID0gJHJlcXVlc3QtPmdldFByb3RvY29sVmVyc2lvbigpOwoKICAgICAgICBpZiAoJzEuMCcgIT09ICRwcm90b2NvbFZlcnNpb24gJiYgJzEuMScgIT09ICRwcm90b2NvbFZlcnNpb24pIHsKICAgICAgICAgICAgdGhyb3cgbmV3IENvbm5lY3RFeGNlcHRpb24oc3ByaW50ZignSFRUUC8lcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBzdHJlYW0gaGFuZGxlci4nLCAkcHJvdG9jb2xWZXJzaW9uKSwgJHJlcXVlc3QpOwogICAgICAgIH0KCiAgICAgICAgJHN0YXJ0VGltZSA9IGlzc2V0KCRvcHRpb25zWydvbl9zdGF0cyddKSA/IFV0aWxzOjpjdXJyZW50VGltZSgpIDogbnVsbDsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgLy8gRG9lcyBub3Qgc3VwcG9ydCB0aGUgZXhwZWN0IGhlYWRlci4KICAgICAgICAgICAgJHJlcXVlc3QgPSAkcmVxdWVzdC0+d2l0aG91dEhlYWRlcignRXhwZWN0Jyk7CgogICAgICAgICAgICAvLyBBcHBlbmQgYSBjb250ZW50LWxlbmd0aCBoZWFkZXIgaWYgYm9keSBzaXplIGlzIHplcm8gdG8gbWF0Y2gKICAgICAgICAgICAgLy8gdGhlIGJlaGF2aW9yIG9mIGBDdXJsSGFuZGxlcmAKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgIDAgPT09IFxzdHJjYXNlY21wKCdQVVQnLCAkcmVxdWVzdC0+Z2V0TWV0aG9kKCkpCiAgICAgICAgICAgICAgICAgICAgfHwgMCA9PT0gXHN0cmNhc2VjbXAoJ1BPU1QnLCAkcmVxdWVzdC0+Z2V0TWV0aG9kKCkpCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAmJiAwID09PSAkcmVxdWVzdC0+Z2V0Qm9keSgpLT5nZXRTaXplKCkKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkcmVxdWVzdCA9ICRyZXF1ZXN0LT53aXRoSGVhZGVyKCdDb250ZW50LUxlbmd0aCcsICcwJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+Y3JlYXRlUmVzcG9uc2UoCiAgICAgICAgICAgICAgICAkcmVxdWVzdCwKICAgICAgICAgICAgICAgICRvcHRpb25zLAogICAgICAgICAgICAgICAgJHRoaXMtPmNyZWF0ZVN0cmVhbSgkcmVxdWVzdCwgJG9wdGlvbnMpLAogICAgICAgICAgICAgICAgJHN0YXJ0VGltZQogICAgICAgICAgICApOwogICAgICAgIH0gY2F0Y2ggKFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgdGhyb3cgJGU7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIGVycm9yIHdhcyBhIG5ldHdvcmtpbmcgZXJyb3IuCiAgICAgICAgICAgICRtZXNzYWdlID0gJGUtPmdldE1lc3NhZ2UoKTsKICAgICAgICAgICAgLy8gVGhpcyBsaXN0IGNhbiBwcm9iYWJseSBnZXQgbW9yZSBjb21wcmVoZW5zaXZlLgogICAgICAgICAgICBpZiAoZmFsc2UgIT09IFxzdHJwb3MoJG1lc3NhZ2UsICdnZXRhZGRyaW5mbycpIC8vIEROUyBsb29rdXAgZmFpbGVkCiAgICAgICAgICAgICAgICB8fCBmYWxzZSAhPT0gXHN0cnBvcygkbWVzc2FnZSwgJ0Nvbm5lY3Rpb24gcmVmdXNlZCcpCiAgICAgICAgICAgICAgICB8fCBmYWxzZSAhPT0gXHN0cnBvcygkbWVzc2FnZSwgImNvdWxkbid0IGNvbm5lY3QgdG8gaG9zdCIpIC8vIGVycm9yIG9uIEhIVk0KICAgICAgICAgICAgICAgIHx8IGZhbHNlICE9PSBcc3RycG9zKCRtZXNzYWdlLCAnY29ubmVjdGlvbiBhdHRlbXB0IGZhaWxlZCcpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJGUgPSBuZXcgQ29ubmVjdEV4Y2VwdGlvbigkZS0+Z2V0TWVzc2FnZSgpLCAkcmVxdWVzdCwgJGUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGUgPSBSZXF1ZXN0RXhjZXB0aW9uOjp3cmFwRXhjZXB0aW9uKCRyZXF1ZXN0LCAkZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPmludm9rZVN0YXRzKCRvcHRpb25zLCAkcmVxdWVzdCwgJHN0YXJ0VGltZSwgbnVsbCwgJGUpOwoKICAgICAgICAgICAgcmV0dXJuIFBcQ3JlYXRlOjpyZWplY3Rpb25Gb3IoJGUpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGludm9rZVN0YXRzKAogICAgICAgIGFycmF5ICRvcHRpb25zLAogICAgICAgIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsCiAgICAgICAgP2Zsb2F0ICRzdGFydFRpbWUsCiAgICAgICAgP1Jlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZSA9IG51bGwsCiAgICAgICAgP1xUaHJvd2FibGUgJGVycm9yID0gbnVsbAogICAgKTogdm9pZCB7CiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydvbl9zdGF0cyddKSkgewogICAgICAgICAgICAkc3RhdHMgPSBuZXcgVHJhbnNmZXJTdGF0cygkcmVxdWVzdCwgJHJlc3BvbnNlLCBVdGlsczo6Y3VycmVudFRpbWUoKSAtICRzdGFydFRpbWUsICRlcnJvciwgW10pOwogICAgICAgICAgICAoJG9wdGlvbnNbJ29uX3N0YXRzJ10pKCRzdGF0cyk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHJlc291cmNlICRzdHJlYW0KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBjcmVhdGVSZXNwb25zZShSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAkb3B0aW9ucywgJHN0cmVhbSwgP2Zsb2F0ICRzdGFydFRpbWUpOiBQcm9taXNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJGhkcnMgPSAkdGhpcy0+bGFzdEhlYWRlcnM7CiAgICAgICAgJHRoaXMtPmxhc3RIZWFkZXJzID0gW107CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgIFskdmVyLCAkc3RhdHVzLCAkcmVhc29uLCAkaGVhZGVyc10gPSBIZWFkZXJQcm9jZXNzb3I6OnBhcnNlSGVhZGVycygkaGRycyk7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICByZXR1cm4gUFxDcmVhdGU6OnJlamVjdGlvbkZvcigKICAgICAgICAgICAgICAgIG5ldyBSZXF1ZXN0RXhjZXB0aW9uKCdBbiBlcnJvciB3YXMgZW5jb3VudGVyZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHJlc3BvbnNlJywgJHJlcXVlc3QsIG51bGwsICRlKQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgWyRzdHJlYW0sICRoZWFkZXJzXSA9ICR0aGlzLT5jaGVja0RlY29kZSgkb3B0aW9ucywgJGhlYWRlcnMsICRzdHJlYW0pOwogICAgICAgICRzdHJlYW0gPSBQc3I3XFV0aWxzOjpzdHJlYW1Gb3IoJHN0cmVhbSk7CiAgICAgICAgJHNpbmsgPSAkc3RyZWFtOwoKICAgICAgICBpZiAoXHN0cmNhc2VjbXAoJ0hFQUQnLCAkcmVxdWVzdC0+Z2V0TWV0aG9kKCkpKSB7CiAgICAgICAgICAgICRzaW5rID0gJHRoaXMtPmNyZWF0ZVNpbmsoJHN0cmVhbSwgJG9wdGlvbnMpOwogICAgICAgIH0KCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHJlc3BvbnNlID0gbmV3IFBzcjdcUmVzcG9uc2UoJHN0YXR1cywgJGhlYWRlcnMsICRzaW5rLCAkdmVyLCAkcmVhc29uKTsKICAgICAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIHJldHVybiBQXENyZWF0ZTo6cmVqZWN0aW9uRm9yKAogICAgICAgICAgICAgICAgbmV3IFJlcXVlc3RFeGNlcHRpb24oJ0FuIGVycm9yIHdhcyBlbmNvdW50ZXJlZCB3aGlsZSBjcmVhdGluZyB0aGUgcmVzcG9uc2UnLCAkcmVxdWVzdCwgbnVsbCwgJGUpCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ29uX2hlYWRlcnMnXSkpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICRvcHRpb25zWydvbl9oZWFkZXJzJ10oJHJlc3BvbnNlKTsKICAgICAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIFBcQ3JlYXRlOjpyZWplY3Rpb25Gb3IoCiAgICAgICAgICAgICAgICAgICAgbmV3IFJlcXVlc3RFeGNlcHRpb24oJ0FuIGVycm9yIHdhcyBlbmNvdW50ZXJlZCBkdXJpbmcgdGhlIG9uX2hlYWRlcnMgZXZlbnQnLCAkcmVxdWVzdCwgJHJlc3BvbnNlLCAkZSkKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIERvIG5vdCBkcmFpbiB3aGVuIHRoZSByZXF1ZXN0IGlzIGEgSEVBRCByZXF1ZXN0IGJlY2F1c2UgdGhleSBoYXZlCiAgICAgICAgLy8gbm8gYm9keS4KICAgICAgICBpZiAoJHNpbmsgIT09ICRzdHJlYW0pIHsKICAgICAgICAgICAgJHRoaXMtPmRyYWluKCRzdHJlYW0sICRzaW5rLCAkcmVzcG9uc2UtPmdldEhlYWRlckxpbmUoJ0NvbnRlbnQtTGVuZ3RoJykpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmludm9rZVN0YXRzKCRvcHRpb25zLCAkcmVxdWVzdCwgJHN0YXJ0VGltZSwgJHJlc3BvbnNlLCBudWxsKTsKCiAgICAgICAgcmV0dXJuIG5ldyBGdWxmaWxsZWRQcm9taXNlKCRyZXNwb25zZSk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjcmVhdGVTaW5rKFN0cmVhbUludGVyZmFjZSAkc3RyZWFtLCBhcnJheSAkb3B0aW9ucyk6IFN0cmVhbUludGVyZmFjZQogICAgewogICAgICAgIGlmICghZW1wdHkoJG9wdGlvbnNbJ3N0cmVhbSddKSkgewogICAgICAgICAgICByZXR1cm4gJHN0cmVhbTsKICAgICAgICB9CgogICAgICAgICRzaW5rID0gJG9wdGlvbnNbJ3NpbmsnXSA/PyBQc3I3XFV0aWxzOjp0cnlGb3BlbigncGhwOi8vdGVtcCcsICdyKycpOwoKICAgICAgICByZXR1cm4gXGlzX3N0cmluZygkc2luaykgPyBuZXcgUHNyN1xMYXp5T3BlblN0cmVhbSgkc2luaywgJ3crJykgOiBQc3I3XFV0aWxzOjpzdHJlYW1Gb3IoJHNpbmspOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHJlc291cmNlICRzdHJlYW0KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja0RlY29kZShhcnJheSAkb3B0aW9ucywgYXJyYXkgJGhlYWRlcnMsICRzdHJlYW0pOiBhcnJheQogICAgewogICAgICAgIC8vIEF1dG9tYXRpY2FsbHkgZGVjb2RlIHJlc3BvbnNlcyB3aGVuIGluc3RydWN0ZWQuCiAgICAgICAgaWYgKCFlbXB0eSgkb3B0aW9uc1snZGVjb2RlX2NvbnRlbnQnXSkpIHsKICAgICAgICAgICAgJG5vcm1hbGl6ZWRLZXlzID0gVXRpbHM6Om5vcm1hbGl6ZUhlYWRlcktleXMoJGhlYWRlcnMpOwogICAgICAgICAgICBpZiAoaXNzZXQoJG5vcm1hbGl6ZWRLZXlzWydjb250ZW50LWVuY29kaW5nJ10pKSB7CiAgICAgICAgICAgICAgICAkZW5jb2RpbmcgPSAkaGVhZGVyc1skbm9ybWFsaXplZEtleXNbJ2NvbnRlbnQtZW5jb2RpbmcnXV07CiAgICAgICAgICAgICAgICBpZiAoJGVuY29kaW5nWzBdID09PSAnZ3ppcCcgfHwgJGVuY29kaW5nWzBdID09PSAnZGVmbGF0ZScpIHsKICAgICAgICAgICAgICAgICAgICAkc3RyZWFtID0gbmV3IFBzcjdcSW5mbGF0ZVN0cmVhbShQc3I3XFV0aWxzOjpzdHJlYW1Gb3IoJHN0cmVhbSkpOwogICAgICAgICAgICAgICAgICAgICRoZWFkZXJzWyd4LWVuY29kZWQtY29udGVudC1lbmNvZGluZyddID0gJGhlYWRlcnNbJG5vcm1hbGl6ZWRLZXlzWydjb250ZW50LWVuY29kaW5nJ11dOwoKICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgY29udGVudC1lbmNvZGluZyBoZWFkZXIKICAgICAgICAgICAgICAgICAgICB1bnNldCgkaGVhZGVyc1skbm9ybWFsaXplZEtleXNbJ2NvbnRlbnQtZW5jb2RpbmcnXV0pOwoKICAgICAgICAgICAgICAgICAgICAvLyBGaXggY29udGVudC1sZW5ndGggaGVhZGVyCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRub3JtYWxpemVkS2V5c1snY29udGVudC1sZW5ndGgnXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGhlYWRlcnNbJ3gtZW5jb2RlZC1jb250ZW50LWxlbmd0aCddID0gJGhlYWRlcnNbJG5vcm1hbGl6ZWRLZXlzWydjb250ZW50LWxlbmd0aCddXTsKICAgICAgICAgICAgICAgICAgICAgICAgJGxlbmd0aCA9IChpbnQpICRzdHJlYW0tPmdldFNpemUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRsZW5ndGggPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2V0KCRoZWFkZXJzWyRub3JtYWxpemVkS2V5c1snY29udGVudC1sZW5ndGgnXV0pOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGhlYWRlcnNbJG5vcm1hbGl6ZWRLZXlzWydjb250ZW50LWxlbmd0aCddXSA9IFskbGVuZ3RoXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFskc3RyZWFtLCAkaGVhZGVyc107CiAgICB9CgogICAgLyoqCiAgICAgKiBEcmFpbnMgdGhlIHNvdXJjZSBzdHJlYW0gaW50byB0aGUgInNpbmsiIGNsaWVudCBvcHRpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY29udGVudExlbmd0aCBIZWFkZXIgc3BlY2lmeWluZyB0aGUgYW1vdW50IG9mCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgdG8gcmVhZC4KICAgICAqCiAgICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIHdoZW4gdGhlIHNpbmsgb3B0aW9uIGlzIGludmFsaWQuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZHJhaW4oU3RyZWFtSW50ZXJmYWNlICRzb3VyY2UsIFN0cmVhbUludGVyZmFjZSAkc2luaywgc3RyaW5nICRjb250ZW50TGVuZ3RoKTogU3RyZWFtSW50ZXJmYWNlCiAgICB7CiAgICAgICAgLy8gSWYgYSBjb250ZW50LWxlbmd0aCBoZWFkZXIgaXMgcHJvdmlkZWQsIHRoZW4gc3RvcCByZWFkaW5nIG9uY2UKICAgICAgICAvLyB0aGF0IG51bWJlciBvZiBieXRlcyBoYXMgYmVlbiByZWFkLiBUaGlzIGNhbiBwcmV2ZW50IGluZmluaXRlbHkKICAgICAgICAvLyByZWFkaW5nIGZyb20gYSBzdHJlYW0gd2hlbiBkZWFsaW5nIHdpdGggc2VydmVycyB0aGF0IGRvIG5vdCBob25vcgogICAgICAgIC8vIENvbm5lY3Rpb246IENsb3NlIGhlYWRlcnMuCiAgICAgICAgUHNyN1xVdGlsczo6Y29weVRvU3RyZWFtKAogICAgICAgICAgICAkc291cmNlLAogICAgICAgICAgICAkc2luaywKICAgICAgICAgICAgKFxzdHJsZW4oJGNvbnRlbnRMZW5ndGgpID4gMCAmJiAoaW50KSAkY29udGVudExlbmd0aCA+IDApID8gKGludCkgJGNvbnRlbnRMZW5ndGggOiAtMQogICAgICAgICk7CgogICAgICAgICRzaW5rLT5zZWVrKDApOwogICAgICAgICRzb3VyY2UtPmNsb3NlKCk7CgogICAgICAgIHJldHVybiAkc2luazsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhIHJlc291cmNlIGFuZCBjaGVjayB0byBlbnN1cmUgaXQgd2FzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5CiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjayBDYWxsYWJsZSB0aGF0IHJldHVybnMgc3RyZWFtIHJlc291cmNlCiAgICAgKgogICAgICogQHJldHVybiByZXNvdXJjZQogICAgICoKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gb24gZXJyb3IKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBjcmVhdGVSZXNvdXJjZShjYWxsYWJsZSAkY2FsbGJhY2spCiAgICB7CiAgICAgICAgJGVycm9ycyA9IFtdOwogICAgICAgIFxzZXRfZXJyb3JfaGFuZGxlcihzdGF0aWMgZnVuY3Rpb24gKCRfLCAkbXNnLCAkZmlsZSwgJGxpbmUpIHVzZSAoJiRlcnJvcnMpOiBib29sIHsKICAgICAgICAgICAgJGVycm9yc1tdID0gWwogICAgICAgICAgICAgICAgJ21lc3NhZ2UnID0+ICRtc2csCiAgICAgICAgICAgICAgICAnZmlsZScgPT4gJGZpbGUsCiAgICAgICAgICAgICAgICAnbGluZScgPT4gJGxpbmUsCiAgICAgICAgICAgIF07CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9KTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHJlc291cmNlID0gJGNhbGxiYWNrKCk7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgXHJlc3RvcmVfZXJyb3JfaGFuZGxlcigpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCEkcmVzb3VyY2UpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSAnRXJyb3IgY3JlYXRpbmcgcmVzb3VyY2U6ICc7CiAgICAgICAgICAgIGZvcmVhY2ggKCRlcnJvcnMgYXMgJGVycikgewogICAgICAgICAgICAgICAgZm9yZWFjaCAoJGVyciBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICRtZXNzYWdlIC49ICJbJGtleV0gJHZhbHVlIi5cUEhQX0VPTDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oXHRyaW0oJG1lc3NhZ2UpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzb3VyY2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHJlc291cmNlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gY3JlYXRlU3RyZWFtKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKQogICAgewogICAgICAgIHN0YXRpYyAkbWV0aG9kczsKICAgICAgICBpZiAoISRtZXRob2RzKSB7CiAgICAgICAgICAgICRtZXRob2RzID0gXGFycmF5X2ZsaXAoXGdldF9jbGFzc19tZXRob2RzKF9fQ0xBU1NfXykpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFcaW5fYXJyYXkoJHJlcXVlc3QtPmdldFVyaSgpLT5nZXRTY2hlbWUoKSwgWydodHRwJywgJ2h0dHBzJ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSZXF1ZXN0RXhjZXB0aW9uKFxzcHJpbnRmKCJUaGUgc2NoZW1lICclcycgaXMgbm90IHN1cHBvcnRlZC4iLCAkcmVxdWVzdC0+Z2V0VXJpKCktPmdldFNjaGVtZSgpKSwgJHJlcXVlc3QpOwogICAgICAgIH0KCiAgICAgICAgLy8gSFRUUC8xLjEgc3RyZWFtcyB1c2luZyB0aGUgUEhQIHN0cmVhbSB3cmFwcGVyIHJlcXVpcmUgYQogICAgICAgIC8vIENvbm5lY3Rpb246IGNsb3NlIGhlYWRlcgogICAgICAgIGlmICgkcmVxdWVzdC0+Z2V0UHJvdG9jb2xWZXJzaW9uKCkgPT09ICcxLjEnCiAgICAgICAgICAgICYmICEkcmVxdWVzdC0+aGFzSGVhZGVyKCdDb25uZWN0aW9uJykKICAgICAgICApIHsKICAgICAgICAgICAgJHJlcXVlc3QgPSAkcmVxdWVzdC0+d2l0aEhlYWRlcignQ29ubmVjdGlvbicsICdjbG9zZScpOwogICAgICAgIH0KCiAgICAgICAgLy8gRW5zdXJlIFNTTCBpcyB2ZXJpZmllZCBieSBkZWZhdWx0CiAgICAgICAgaWYgKCFpc3NldCgkb3B0aW9uc1sndmVyaWZ5J10pKSB7CiAgICAgICAgICAgICRvcHRpb25zWyd2ZXJpZnknXSA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICAkcGFyYW1zID0gW107CiAgICAgICAgJGNvbnRleHQgPSAkdGhpcy0+Z2V0RGVmYXVsdENvbnRleHQoJHJlcXVlc3QpOwoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ29uX2hlYWRlcnMnXSkgJiYgIVxpc19jYWxsYWJsZSgkb3B0aW9uc1snb25faGVhZGVycyddKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignb25faGVhZGVycyBtdXN0IGJlIGNhbGxhYmxlJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIWVtcHR5KCRvcHRpb25zKSkgewogICAgICAgICAgICBmb3JlYWNoICgkb3B0aW9ucyBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICAgICAgJG1ldGhvZCA9ICJhZGRfeyRrZXl9IjsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkbWV0aG9kc1skbWV0aG9kXSkpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+eyRtZXRob2R9KCRyZXF1ZXN0LCAkY29udGV4dCwgJHZhbHVlLCAkcGFyYW1zKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydzdHJlYW1fY29udGV4dCddKSkgewogICAgICAgICAgICBpZiAoIVxpc19hcnJheSgkb3B0aW9uc1snc3RyZWFtX2NvbnRleHQnXSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdzdHJlYW1fY29udGV4dCBtdXN0IGJlIGFuIGFycmF5Jyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGNvbnRleHQgPSBcYXJyYXlfcmVwbGFjZV9yZWN1cnNpdmUoJGNvbnRleHQsICRvcHRpb25zWydzdHJlYW1fY29udGV4dCddKTsKICAgICAgICB9CgogICAgICAgIC8vIE1pY3Jvc29mdCBOVExNIGF1dGhlbnRpY2F0aW9uIG9ubHkgc3VwcG9ydGVkIHdpdGggY3VybCBoYW5kbGVyCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydhdXRoJ11bMl0pICYmICdudGxtJyA9PT0gJG9wdGlvbnNbJ2F1dGgnXVsyXSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignTWljcm9zb2Z0IE5UTE0gYXV0aGVudGljYXRpb24gb25seSBzdXBwb3J0ZWQgd2l0aCBjdXJsIGhhbmRsZXInKTsKICAgICAgICB9CgogICAgICAgICR1cmkgPSAkdGhpcy0+cmVzb2x2ZUhvc3QoJHJlcXVlc3QsICRvcHRpb25zKTsKCiAgICAgICAgJGNvbnRleHRSZXNvdXJjZSA9ICR0aGlzLT5jcmVhdGVSZXNvdXJjZSgKICAgICAgICAgICAgc3RhdGljIGZ1bmN0aW9uICgpIHVzZSAoJGNvbnRleHQsICRwYXJhbXMpIHsKICAgICAgICAgICAgICAgIHJldHVybiBcc3RyZWFtX2NvbnRleHRfY3JlYXRlKCRjb250ZXh0LCAkcGFyYW1zKTsKICAgICAgICAgICAgfQogICAgICAgICk7CgogICAgICAgIHJldHVybiAkdGhpcy0+Y3JlYXRlUmVzb3VyY2UoCiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHVzZSAoJHVyaSwgJGNvbnRleHRSZXNvdXJjZSwgJGNvbnRleHQsICRvcHRpb25zLCAkcmVxdWVzdCkgewogICAgICAgICAgICAgICAgJHJlc291cmNlID0gQFxmb3Blbigoc3RyaW5nKSAkdXJpLCAncicsIGZhbHNlLCAkY29udGV4dFJlc291cmNlKTsKCiAgICAgICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly93aWtpLnBocC5uZXQvcmZjL2RlcHJlY2F0aW9uc19waHBfOF81I2RlcHJlY2F0ZV90aGVfaHR0cF9yZXNwb25zZV9oZWFkZXJfcHJlZGVmaW5lZF92YXJpYWJsZQogICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnaHR0cF9nZXRfbGFzdF9yZXNwb25zZV9oZWFkZXJzJykpIHsKICAgICAgICAgICAgICAgICAgICAvKiogQHZhciBhcnJheXxudWxsICovCiAgICAgICAgICAgICAgICAgICAgJGh0dHBfcmVzcG9uc2VfaGVhZGVyID0gXGh0dHBfZ2V0X2xhc3RfcmVzcG9uc2VfaGVhZGVycygpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICR0aGlzLT5sYXN0SGVhZGVycyA9ICRodHRwX3Jlc3BvbnNlX2hlYWRlciA/PyBbXTsKCiAgICAgICAgICAgICAgICBpZiAoZmFsc2UgPT09ICRyZXNvdXJjZSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb25uZWN0RXhjZXB0aW9uKHNwcmludGYoJ0Nvbm5lY3Rpb24gcmVmdXNlZCBmb3IgVVJJICVzJywgJHVyaSksICRyZXF1ZXN0LCBudWxsLCAkY29udGV4dCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydyZWFkX3RpbWVvdXQnXSkpIHsKICAgICAgICAgICAgICAgICAgICAkcmVhZFRpbWVvdXQgPSAkb3B0aW9uc1sncmVhZF90aW1lb3V0J107CiAgICAgICAgICAgICAgICAgICAgJHNlYyA9IChpbnQpICRyZWFkVGltZW91dDsKICAgICAgICAgICAgICAgICAgICAkdXNlYyA9ICgkcmVhZFRpbWVvdXQgLSAkc2VjKSAqIDEwMDAwMDsKICAgICAgICAgICAgICAgICAgICBcc3RyZWFtX3NldF90aW1lb3V0KCRyZXNvdXJjZSwgJHNlYywgJHVzZWMpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiAkcmVzb3VyY2U7CiAgICAgICAgICAgIH0KICAgICAgICApOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcmVzb2x2ZUhvc3QoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpOiBVcmlJbnRlcmZhY2UKICAgIHsKICAgICAgICAkdXJpID0gJHJlcXVlc3QtPmdldFVyaSgpOwoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2ZvcmNlX2lwX3Jlc29sdmUnXSkgJiYgIVxmaWx0ZXJfdmFyKCR1cmktPmdldEhvc3QoKSwgXEZJTFRFUl9WQUxJREFURV9JUCkpIHsKICAgICAgICAgICAgaWYgKCd2NCcgPT09ICRvcHRpb25zWydmb3JjZV9pcF9yZXNvbHZlJ10pIHsKICAgICAgICAgICAgICAgICRyZWNvcmRzID0gXGRuc19nZXRfcmVjb3JkKCR1cmktPmdldEhvc3QoKSwgXEROU19BKTsKICAgICAgICAgICAgICAgIGlmIChmYWxzZSA9PT0gJHJlY29yZHMgfHwgIWlzc2V0KCRyZWNvcmRzWzBdWydpcCddKSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb25uZWN0RXhjZXB0aW9uKFxzcHJpbnRmKCJDb3VsZCBub3QgcmVzb2x2ZSBJUHY0IGFkZHJlc3MgZm9yIGhvc3QgJyVzJyIsICR1cmktPmdldEhvc3QoKSksICRyZXF1ZXN0KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gJHVyaS0+d2l0aEhvc3QoJHJlY29yZHNbMF1bJ2lwJ10pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgndjYnID09PSAkb3B0aW9uc1snZm9yY2VfaXBfcmVzb2x2ZSddKSB7CiAgICAgICAgICAgICAgICAkcmVjb3JkcyA9IFxkbnNfZ2V0X3JlY29yZCgkdXJpLT5nZXRIb3N0KCksIFxETlNfQUFBQSk7CiAgICAgICAgICAgICAgICBpZiAoZmFsc2UgPT09ICRyZWNvcmRzIHx8ICFpc3NldCgkcmVjb3Jkc1swXVsnaXB2NiddKSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb25uZWN0RXhjZXB0aW9uKFxzcHJpbnRmKCJDb3VsZCBub3QgcmVzb2x2ZSBJUHY2IGFkZHJlc3MgZm9yIGhvc3QgJyVzJyIsICR1cmktPmdldEhvc3QoKSksICRyZXF1ZXN0KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gJHVyaS0+d2l0aEhvc3QoJ1snLiRyZWNvcmRzWzBdWydpcHY2J10uJ10nKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR1cmk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXREZWZhdWx0Q29udGV4dChSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0KTogYXJyYXkKICAgIHsKICAgICAgICAkaGVhZGVycyA9ICcnOwogICAgICAgIGZvcmVhY2ggKCRyZXF1ZXN0LT5nZXRIZWFkZXJzKCkgYXMgJG5hbWUgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCR2YWx1ZSBhcyAkdmFsKSB7CiAgICAgICAgICAgICAgICAkaGVhZGVycyAuPSAiJG5hbWU6ICR2YWxcclxuIjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJGNvbnRleHQgPSBbCiAgICAgICAgICAgICdodHRwJyA9PiBbCiAgICAgICAgICAgICAgICAnbWV0aG9kJyA9PiAkcmVxdWVzdC0+Z2V0TWV0aG9kKCksCiAgICAgICAgICAgICAgICAnaGVhZGVyJyA9PiAkaGVhZGVycywKICAgICAgICAgICAgICAgICdwcm90b2NvbF92ZXJzaW9uJyA9PiAkcmVxdWVzdC0+Z2V0UHJvdG9jb2xWZXJzaW9uKCksCiAgICAgICAgICAgICAgICAnaWdub3JlX2Vycm9ycycgPT4gdHJ1ZSwKICAgICAgICAgICAgICAgICdmb2xsb3dfbG9jYXRpb24nID0+IDAsCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICdzc2wnID0+IFsKICAgICAgICAgICAgICAgICdwZWVyX25hbWUnID0+ICRyZXF1ZXN0LT5nZXRVcmkoKS0+Z2V0SG9zdCgpLAogICAgICAgICAgICBdLAogICAgICAgIF07CgogICAgICAgICRib2R5ID0gKHN0cmluZykgJHJlcXVlc3QtPmdldEJvZHkoKTsKCiAgICAgICAgaWYgKCcnICE9PSAkYm9keSkgewogICAgICAgICAgICAkY29udGV4dFsnaHR0cCddWydjb250ZW50J10gPSAkYm9keTsKICAgICAgICAgICAgLy8gUHJldmVudCB0aGUgSFRUUCBoYW5kbGVyIGZyb20gYWRkaW5nIGEgQ29udGVudC1UeXBlIGhlYWRlci4KICAgICAgICAgICAgaWYgKCEkcmVxdWVzdC0+aGFzSGVhZGVyKCdDb250ZW50LVR5cGUnKSkgewogICAgICAgICAgICAgICAgJGNvbnRleHRbJ2h0dHAnXVsnaGVhZGVyJ10gLj0gIkNvbnRlbnQtVHlwZTpcclxuIjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJGNvbnRleHRbJ2h0dHAnXVsnaGVhZGVyJ10gPSBccnRyaW0oJGNvbnRleHRbJ2h0dHAnXVsnaGVhZGVyJ10pOwoKICAgICAgICByZXR1cm4gJGNvbnRleHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIGFzIHBhc3NlZCB2aWEgUmVxdWVzdCB0cmFuc2ZlciBvcHRpb25zLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZF9wcm94eShSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAmJG9wdGlvbnMsICR2YWx1ZSwgYXJyYXkgJiRwYXJhbXMpOiB2b2lkCiAgICB7CiAgICAgICAgJHVyaSA9IG51bGw7CgogICAgICAgIGlmICghXGlzX2FycmF5KCR2YWx1ZSkpIHsKICAgICAgICAgICAgJHVyaSA9ICR2YWx1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkc2NoZW1lID0gJHJlcXVlc3QtPmdldFVyaSgpLT5nZXRTY2hlbWUoKTsKICAgICAgICAgICAgaWYgKGlzc2V0KCR2YWx1ZVskc2NoZW1lXSkpIHsKICAgICAgICAgICAgICAgIGlmICghaXNzZXQoJHZhbHVlWydubyddKSB8fCAhVXRpbHM6OmlzSG9zdEluTm9Qcm94eSgkcmVxdWVzdC0+Z2V0VXJpKCktPmdldEhvc3QoKSwgJHZhbHVlWydubyddKSkgewogICAgICAgICAgICAgICAgICAgICR1cmkgPSAkdmFsdWVbJHNjaGVtZV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghJHVyaSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkcGFyc2VkID0gJHRoaXMtPnBhcnNlX3Byb3h5KCR1cmkpOwogICAgICAgICRvcHRpb25zWydodHRwJ11bJ3Byb3h5J10gPSAkcGFyc2VkWydwcm94eSddOwoKICAgICAgICBpZiAoJHBhcnNlZFsnYXV0aCddKSB7CiAgICAgICAgICAgIGlmICghaXNzZXQoJG9wdGlvbnNbJ2h0dHAnXVsnaGVhZGVyJ10pKSB7CiAgICAgICAgICAgICAgICAkb3B0aW9uc1snaHR0cCddWydoZWFkZXInXSA9IFtdOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRvcHRpb25zWydodHRwJ11bJ2hlYWRlciddIC49ICJcclxuUHJveHktQXV0aG9yaXphdGlvbjogeyRwYXJzZWRbJ2F1dGgnXX0iOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlcyB0aGUgZ2l2ZW4gcHJveHkgVVJMIHRvIG1ha2UgaXQgY29tcGF0aWJsZSB3aXRoIHRoZSBmb3JtYXQgUEhQJ3Mgc3RyZWFtIGNvbnRleHQgZXhwZWN0cy4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZV9wcm94eShzdHJpbmcgJHVybCk6IGFycmF5CiAgICB7CiAgICAgICAgJHBhcnNlZCA9IFxwYXJzZV91cmwoJHVybCk7CgogICAgICAgIGlmICgkcGFyc2VkICE9PSBmYWxzZSAmJiBpc3NldCgkcGFyc2VkWydzY2hlbWUnXSkgJiYgJHBhcnNlZFsnc2NoZW1lJ10gPT09ICdodHRwJykgewogICAgICAgICAgICBpZiAoaXNzZXQoJHBhcnNlZFsnaG9zdCddKSAmJiBpc3NldCgkcGFyc2VkWydwb3J0J10pKSB7CiAgICAgICAgICAgICAgICAkYXV0aCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHBhcnNlZFsndXNlciddKSAmJiBpc3NldCgkcGFyc2VkWydwYXNzJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgJGF1dGggPSBcYmFzZTY0X2VuY29kZSgieyRwYXJzZWRbJ3VzZXInXX06eyRwYXJzZWRbJ3Bhc3MnXX0iKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgICAgICdwcm94eScgPT4gInRjcDovL3skcGFyc2VkWydob3N0J119OnskcGFyc2VkWydwb3J0J119IiwKICAgICAgICAgICAgICAgICAgICAnYXV0aCcgPT4gJGF1dGggPyAiQmFzaWMgeyRhdXRofSIgOiBudWxsLAogICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gUmV0dXJuIHByb3h5IGFzLWlzLgogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdwcm94eScgPT4gJHVybCwKICAgICAgICAgICAgJ2F1dGgnID0+IG51bGwsCiAgICAgICAgXTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgYXMgcGFzc2VkIHZpYSBSZXF1ZXN0IHRyYW5zZmVyIG9wdGlvbnMuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkX3RpbWVvdXQoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJiRvcHRpb25zLCAkdmFsdWUsIGFycmF5ICYkcGFyYW1zKTogdm9pZAogICAgewogICAgICAgIGlmICgkdmFsdWUgPiAwKSB7CiAgICAgICAgICAgICRvcHRpb25zWydodHRwJ11bJ3RpbWVvdXQnXSA9ICR2YWx1ZTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIGFzIHBhc3NlZCB2aWEgUmVxdWVzdCB0cmFuc2ZlciBvcHRpb25zLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZF9jcnlwdG9fbWV0aG9kKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICYkb3B0aW9ucywgJHZhbHVlLCBhcnJheSAmJHBhcmFtcyk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoCiAgICAgICAgICAgICR2YWx1ZSA9PT0gXFNUUkVBTV9DUllQVE9fTUVUSE9EX1RMU3YxXzBfQ0xJRU5UCiAgICAgICAgICAgIHx8ICR2YWx1ZSA9PT0gXFNUUkVBTV9DUllQVE9fTUVUSE9EX1RMU3YxXzFfQ0xJRU5UCiAgICAgICAgICAgIHx8ICR2YWx1ZSA9PT0gXFNUUkVBTV9DUllQVE9fTUVUSE9EX1RMU3YxXzJfQ0xJRU5UCiAgICAgICAgICAgIHx8IChkZWZpbmVkKCdTVFJFQU1fQ1JZUFRPX01FVEhPRF9UTFN2MV8zX0NMSUVOVCcpICYmICR2YWx1ZSA9PT0gXFNUUkVBTV9DUllQVE9fTUVUSE9EX1RMU3YxXzNfQ0xJRU5UKQogICAgICAgICkgewogICAgICAgICAgICAkb3B0aW9uc1snaHR0cCddWydjcnlwdG9fbWV0aG9kJ10gPSAkdmFsdWU7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBjcnlwdG9fbWV0aG9kIHJlcXVlc3Qgb3B0aW9uOiB1bmtub3duIHZlcnNpb24gcHJvdmlkZWQnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgYXMgcGFzc2VkIHZpYSBSZXF1ZXN0IHRyYW5zZmVyIG9wdGlvbnMuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkX3ZlcmlmeShSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAmJG9wdGlvbnMsICR2YWx1ZSwgYXJyYXkgJiRwYXJhbXMpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCR2YWx1ZSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgJG9wdGlvbnNbJ3NzbCddWyd2ZXJpZnlfcGVlciddID0gZmFsc2U7CiAgICAgICAgICAgICRvcHRpb25zWydzc2wnXVsndmVyaWZ5X3BlZXJfbmFtZSddID0gZmFsc2U7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAoXGlzX3N0cmluZygkdmFsdWUpKSB7CiAgICAgICAgICAgICRvcHRpb25zWydzc2wnXVsnY2FmaWxlJ10gPSAkdmFsdWU7CiAgICAgICAgICAgIGlmICghXGZpbGVfZXhpc3RzKCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiU1NMIENBIGJ1bmRsZSBub3QgZm91bmQ6ICR2YWx1ZSIpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlaWYgKCR2YWx1ZSAhPT0gdHJ1ZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCB2ZXJpZnkgcmVxdWVzdCBvcHRpb24nKTsKICAgICAgICB9CgogICAgICAgICRvcHRpb25zWydzc2wnXVsndmVyaWZ5X3BlZXInXSA9IHRydWU7CiAgICAgICAgJG9wdGlvbnNbJ3NzbCddWyd2ZXJpZnlfcGVlcl9uYW1lJ10gPSB0cnVlOwogICAgICAgICRvcHRpb25zWydzc2wnXVsnYWxsb3dfc2VsZl9zaWduZWQnXSA9IGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSBhcyBwYXNzZWQgdmlhIFJlcXVlc3QgdHJhbnNmZXIgb3B0aW9ucy4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBhZGRfY2VydChSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAmJG9wdGlvbnMsICR2YWx1ZSwgYXJyYXkgJiRwYXJhbXMpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKFxpc19hcnJheSgkdmFsdWUpKSB7CiAgICAgICAgICAgICRvcHRpb25zWydzc2wnXVsncGFzc3BocmFzZSddID0gJHZhbHVlWzFdOwogICAgICAgICAgICAkdmFsdWUgPSAkdmFsdWVbMF07CiAgICAgICAgfQoKICAgICAgICBpZiAoIVxmaWxlX2V4aXN0cygkdmFsdWUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiU1NMIGNlcnRpZmljYXRlIG5vdCBmb3VuZDogeyR2YWx1ZX0iKTsKICAgICAgICB9CgogICAgICAgICRvcHRpb25zWydzc2wnXVsnbG9jYWxfY2VydCddID0gJHZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSBhcyBwYXNzZWQgdmlhIFJlcXVlc3QgdHJhbnNmZXIgb3B0aW9ucy4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBhZGRfcHJvZ3Jlc3MoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJiRvcHRpb25zLCAkdmFsdWUsIGFycmF5ICYkcGFyYW1zKTogdm9pZAogICAgewogICAgICAgIHNlbGY6OmFkZE5vdGlmaWNhdGlvbigKICAgICAgICAgICAgJHBhcmFtcywKICAgICAgICAgICAgc3RhdGljIGZ1bmN0aW9uICgkY29kZSwgJGEsICRiLCAkYywgJHRyYW5zZmVycmVkLCAkdG90YWwpIHVzZSAoJHZhbHVlKSB7CiAgICAgICAgICAgICAgICBpZiAoJGNvZGUgPT0gXFNUUkVBTV9OT1RJRllfUFJPR1JFU1MpIHsKICAgICAgICAgICAgICAgICAgICAvLyBUaGUgdXBsb2FkIHByb2dyZXNzIGNhbm5vdCBiZSBkZXRlcm1pbmVkLiBVc2UgMCBmb3IgY1VSTCBjb21wYXRpYmlsaXR5OgogICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vY3VybC5zZS9saWJjdXJsL2MvQ1VSTE9QVF9QUk9HUkVTU0ZVTkNUSU9OLmh0bWwKICAgICAgICAgICAgICAgICAgICAkdmFsdWUoJHRvdGFsLCAkdHJhbnNmZXJyZWQsIDAsIDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgYXMgcGFzc2VkIHZpYSBSZXF1ZXN0IHRyYW5zZmVyIG9wdGlvbnMuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkX2RlYnVnKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICYkb3B0aW9ucywgJHZhbHVlLCBhcnJheSAmJHBhcmFtcyk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoJHZhbHVlID09PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgJG1hcCA9IFsKICAgICAgICAgICAgXFNUUkVBTV9OT1RJRllfQ09OTkVDVCA9PiAnQ09OTkVDVCcsCiAgICAgICAgICAgIFxTVFJFQU1fTk9USUZZX0FVVEhfUkVRVUlSRUQgPT4gJ0FVVEhfUkVRVUlSRUQnLAogICAgICAgICAgICBcU1RSRUFNX05PVElGWV9BVVRIX1JFU1VMVCA9PiAnQVVUSF9SRVNVTFQnLAogICAgICAgICAgICBcU1RSRUFNX05PVElGWV9NSU1FX1RZUEVfSVMgPT4gJ01JTUVfVFlQRV9JUycsCiAgICAgICAgICAgIFxTVFJFQU1fTk9USUZZX0ZJTEVfU0laRV9JUyA9PiAnRklMRV9TSVpFX0lTJywKICAgICAgICAgICAgXFNUUkVBTV9OT1RJRllfUkVESVJFQ1RFRCA9PiAnUkVESVJFQ1RFRCcsCiAgICAgICAgICAgIFxTVFJFQU1fTk9USUZZX1BST0dSRVNTID0+ICdQUk9HUkVTUycsCiAgICAgICAgICAgIFxTVFJFQU1fTk9USUZZX0ZBSUxVUkUgPT4gJ0ZBSUxVUkUnLAogICAgICAgICAgICBcU1RSRUFNX05PVElGWV9DT01QTEVURUQgPT4gJ0NPTVBMRVRFRCcsCiAgICAgICAgICAgIFxTVFJFQU1fTk9USUZZX1JFU09MVkUgPT4gJ1JFU09MVkUnLAogICAgICAgIF07CiAgICAgICAgc3RhdGljICRhcmdzID0gWydzZXZlcml0eScsICdtZXNzYWdlJywgJ21lc3NhZ2VfY29kZScsICdieXRlc190cmFuc2ZlcnJlZCcsICdieXRlc19tYXgnXTsKCiAgICAgICAgJHZhbHVlID0gVXRpbHM6OmRlYnVnUmVzb3VyY2UoJHZhbHVlKTsKICAgICAgICAkaWRlbnQgPSAkcmVxdWVzdC0+Z2V0TWV0aG9kKCkuJyAnLiRyZXF1ZXN0LT5nZXRVcmkoKS0+d2l0aEZyYWdtZW50KCcnKTsKICAgICAgICBzZWxmOjphZGROb3RpZmljYXRpb24oCiAgICAgICAgICAgICRwYXJhbXMsCiAgICAgICAgICAgIHN0YXRpYyBmdW5jdGlvbiAoaW50ICRjb2RlLCAuLi4kcGFzc2VkKSB1c2UgKCRpZGVudCwgJHZhbHVlLCAkbWFwLCAkYXJncyk6IHZvaWQgewogICAgICAgICAgICAgICAgXGZwcmludGYoJHZhbHVlLCAnPCVzPiBbJXNdICcsICRpZGVudCwgJG1hcFskY29kZV0pOwogICAgICAgICAgICAgICAgZm9yZWFjaCAoXGFycmF5X2ZpbHRlcigkcGFzc2VkKSBhcyAkaSA9PiAkdikgewogICAgICAgICAgICAgICAgICAgIFxmd3JpdGUoJHZhbHVlLCAkYXJnc1skaV0uJzogIicuJHYuJyIgJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBcZndyaXRlKCR2YWx1ZSwgIlxuIik7CiAgICAgICAgICAgIH0KICAgICAgICApOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGFkZE5vdGlmaWNhdGlvbihhcnJheSAmJHBhcmFtcywgY2FsbGFibGUgJG5vdGlmeSk6IHZvaWQKICAgIHsKICAgICAgICAvLyBXcmFwIHRoZSBleGlzdGluZyBmdW5jdGlvbiBpZiBuZWVkZWQuCiAgICAgICAgaWYgKCFpc3NldCgkcGFyYW1zWydub3RpZmljYXRpb24nXSkpIHsKICAgICAgICAgICAgJHBhcmFtc1snbm90aWZpY2F0aW9uJ10gPSAkbm90aWZ5OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRwYXJhbXNbJ25vdGlmaWNhdGlvbiddID0gc2VsZjo6Y2FsbEFycmF5KFsKICAgICAgICAgICAgICAgICRwYXJhbXNbJ25vdGlmaWNhdGlvbiddLAogICAgICAgICAgICAgICAgJG5vdGlmeSwKICAgICAgICAgICAgXSk7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGNhbGxBcnJheShhcnJheSAkZnVuY3Rpb25zKTogY2FsbGFibGUKICAgIHsKICAgICAgICByZXR1cm4gc3RhdGljIGZ1bmN0aW9uICguLi4kYXJncykgdXNlICgkZnVuY3Rpb25zKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRmdW5jdGlvbnMgYXMgJGZuKSB7CiAgICAgICAgICAgICAgICAkZm4oLi4uJGFyZ3MpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/HandlerStack.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZTsKCi8qKgogKiBDcmVhdGVzIGEgY29tcG9zZWQgR3V6emxlIGhhbmRsZXIgZnVuY3Rpb24gYnkgc3RhY2tpbmcgbWlkZGxld2FyZXMgb24gdG9wIG9mCiAqIGFuIEhUVFAgaGFuZGxlciBmdW5jdGlvbi4KICoKICogQGZpbmFsCiAqLwpjbGFzcyBIYW5kbGVyU3RhY2sKewogICAgLyoqCiAgICAgKiBAdmFyIChjYWxsYWJsZShSZXF1ZXN0SW50ZXJmYWNlLCBhcnJheSk6IFByb21pc2VJbnRlcmZhY2UpfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkaGFuZGxlcjsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXl7KGNhbGxhYmxlKGNhbGxhYmxlKFJlcXVlc3RJbnRlcmZhY2UsIGFycmF5KTogUHJvbWlzZUludGVyZmFjZSk6IGNhbGxhYmxlKSwgKHN0cmluZ3xudWxsKX1bXQogICAgICovCiAgICBwcml2YXRlICRzdGFjayA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciAoY2FsbGFibGUoUmVxdWVzdEludGVyZmFjZSwgYXJyYXkpOiBQcm9taXNlSW50ZXJmYWNlKXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGNhY2hlZDsKCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBkZWZhdWx0IGhhbmRsZXIgc3RhY2sgdGhhdCBjYW4gYmUgdXNlZCBieSBjbGllbnRzLgogICAgICoKICAgICAqIFRoZSByZXR1cm5lZCBoYW5kbGVyIHdpbGwgd3JhcCB0aGUgcHJvdmlkZWQgaGFuZGxlciBvciB1c2UgdGhlIG1vc3QKICAgICAqIGFwcHJvcHJpYXRlIGRlZmF1bHQgaGFuZGxlciBmb3IgeW91ciBzeXN0ZW0uIFRoZSByZXR1cm5lZCBIYW5kbGVyU3RhY2sgaGFzCiAgICAgKiBzdXBwb3J0IGZvciBjb29raWVzLCByZWRpcmVjdHMsIEhUVFAgZXJyb3IgZXhjZXB0aW9ucywgYW5kIHByZXBhcmluZyBhIGJvZHkKICAgICAqIGJlZm9yZSBzZW5kaW5nLgogICAgICoKICAgICAqIFRoZSByZXR1cm5lZCBoYW5kbGVyIHN0YWNrIGNhbiBiZSBwYXNzZWQgdG8gYSBjbGllbnQgaW4gdGhlICJoYW5kbGVyIgogICAgICogb3B0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAoY2FsbGFibGUoUmVxdWVzdEludGVyZmFjZSwgYXJyYXkpOiBQcm9taXNlSW50ZXJmYWNlKXxudWxsICRoYW5kbGVyIEhUVFAgaGFuZGxlciBmdW5jdGlvbiB0byB1c2Ugd2l0aCB0aGUgc3RhY2suIElmIG5vCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyIGlzIHByb3ZpZGVkLCB0aGUgYmVzdCBoYW5kbGVyIGZvciB5b3VyCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gd2lsbCBiZSB1dGlsaXplZC4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoP2NhbGxhYmxlICRoYW5kbGVyID0gbnVsbCk6IHNlbGYKICAgIHsKICAgICAgICAkc3RhY2sgPSBuZXcgc2VsZigkaGFuZGxlciA/OiBVdGlsczo6Y2hvb3NlSGFuZGxlcigpKTsKICAgICAgICAkc3RhY2stPnB1c2goTWlkZGxld2FyZTo6aHR0cEVycm9ycygpLCAnaHR0cF9lcnJvcnMnKTsKICAgICAgICAkc3RhY2stPnB1c2goTWlkZGxld2FyZTo6cmVkaXJlY3QoKSwgJ2FsbG93X3JlZGlyZWN0cycpOwogICAgICAgICRzdGFjay0+cHVzaChNaWRkbGV3YXJlOjpjb29raWVzKCksICdjb29raWVzJyk7CiAgICAgICAgJHN0YWNrLT5wdXNoKE1pZGRsZXdhcmU6OnByZXBhcmVCb2R5KCksICdwcmVwYXJlX2JvZHknKTsKCiAgICAgICAgcmV0dXJuICRzdGFjazsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSAoY2FsbGFibGUoUmVxdWVzdEludGVyZmFjZSwgYXJyYXkpOiBQcm9taXNlSW50ZXJmYWNlKXxudWxsICRoYW5kbGVyIFVuZGVybHlpbmcgSFRUUCBoYW5kbGVyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoP2NhbGxhYmxlICRoYW5kbGVyID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+aGFuZGxlciA9ICRoYW5kbGVyOwogICAgfQoKICAgIC8qKgogICAgICogSW52b2tlcyB0aGUgaGFuZGxlciBzdGFjayBhcyBhIGNvbXBvc2VkIGhhbmRsZXIKICAgICAqCiAgICAgKiBAcmV0dXJuIFJlc3BvbnNlSW50ZXJmYWNlfFByb21pc2VJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9faW52b2tlKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKQogICAgewogICAgICAgICRoYW5kbGVyID0gJHRoaXMtPnJlc29sdmUoKTsKCiAgICAgICAgcmV0dXJuICRoYW5kbGVyKCRyZXF1ZXN0LCAkb3B0aW9ucyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBEdW1wcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RhY2suCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgICRkZXB0aCA9IDA7CiAgICAgICAgJHN0YWNrID0gW107CgogICAgICAgIGlmICgkdGhpcy0+aGFuZGxlciAhPT0gbnVsbCkgewogICAgICAgICAgICAkc3RhY2tbXSA9ICcwKSBIYW5kbGVyOiAnLiR0aGlzLT5kZWJ1Z0NhbGxhYmxlKCR0aGlzLT5oYW5kbGVyKTsKICAgICAgICB9CgogICAgICAgICRyZXN1bHQgPSAnJzsKICAgICAgICBmb3JlYWNoIChcYXJyYXlfcmV2ZXJzZSgkdGhpcy0+c3RhY2spIGFzICR0dXBsZSkgewogICAgICAgICAgICArKyRkZXB0aDsKICAgICAgICAgICAgJHN0ciA9ICJ7JGRlcHRofSkgTmFtZTogJ3skdHVwbGVbMV19JywgIjsKICAgICAgICAgICAgJHN0ciAuPSAnRnVuY3Rpb246ICcuJHRoaXMtPmRlYnVnQ2FsbGFibGUoJHR1cGxlWzBdKTsKICAgICAgICAgICAgJHJlc3VsdCA9ICI+IHskc3RyfVxueyRyZXN1bHR9IjsKICAgICAgICAgICAgJHN0YWNrW10gPSAkc3RyOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoXGFycmF5X2tleXMoJHN0YWNrKSBhcyAkaykgewogICAgICAgICAgICAkcmVzdWx0IC49ICI8IHskc3RhY2tbJGtdfVxuIjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBIVFRQIGhhbmRsZXIgdGhhdCBhY3R1YWxseSByZXR1cm5zIGEgcHJvbWlzZS4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUoUmVxdWVzdEludGVyZmFjZSwgYXJyYXkpOiBQcm9taXNlSW50ZXJmYWNlICRoYW5kbGVyIEFjY2VwdHMgYSByZXF1ZXN0IGFuZCBhcnJheSBvZiBvcHRpb25zIGFuZAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5zIGEgUHJvbWlzZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEhhbmRsZXIoY2FsbGFibGUgJGhhbmRsZXIpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmhhbmRsZXIgPSAkaGFuZGxlcjsKICAgICAgICAkdGhpcy0+Y2FjaGVkID0gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYnVpbGRlciBoYXMgYSBoYW5kbGVyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzSGFuZGxlcigpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oYW5kbGVyICE9PSBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogVW5zaGlmdCBhIG1pZGRsZXdhcmUgdG8gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlKGNhbGxhYmxlKTogY2FsbGFibGUgJG1pZGRsZXdhcmUgTWlkZGxld2FyZSBmdW5jdGlvbgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgJG5hbWUgICAgICAgTmFtZSB0byByZWdpc3RlciBmb3IgdGhpcyBtaWRkbGV3YXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5zaGlmdChjYWxsYWJsZSAkbWlkZGxld2FyZSwgP3N0cmluZyAkbmFtZSA9IG51bGwpOiB2b2lkCiAgICB7CiAgICAgICAgXGFycmF5X3Vuc2hpZnQoJHRoaXMtPnN0YWNrLCBbJG1pZGRsZXdhcmUsICRuYW1lXSk7CiAgICAgICAgJHRoaXMtPmNhY2hlZCA9IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBQdXNoIGEgbWlkZGxld2FyZSB0byB0aGUgdG9wIG9mIHRoZSBzdGFjay4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUoY2FsbGFibGUpOiBjYWxsYWJsZSAkbWlkZGxld2FyZSBNaWRkbGV3YXJlIGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAkbmFtZSAgICAgICBOYW1lIHRvIHJlZ2lzdGVyIGZvciB0aGlzIG1pZGRsZXdhcmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwdXNoKGNhbGxhYmxlICRtaWRkbGV3YXJlLCBzdHJpbmcgJG5hbWUgPSAnJyk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+c3RhY2tbXSA9IFskbWlkZGxld2FyZSwgJG5hbWVdOwogICAgICAgICR0aGlzLT5jYWNoZWQgPSBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogQWRkIGEgbWlkZGxld2FyZSBiZWZvcmUgYW5vdGhlciBtaWRkbGV3YXJlIGJ5IG5hbWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgJGZpbmROYW1lICAgTWlkZGxld2FyZSB0byBmaW5kCiAgICAgKiBAcGFyYW0gY2FsbGFibGUoY2FsbGFibGUpOiBjYWxsYWJsZSAkbWlkZGxld2FyZSBNaWRkbGV3YXJlIGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAkd2l0aE5hbWUgICBOYW1lIHRvIHJlZ2lzdGVyIGZvciB0aGlzIG1pZGRsZXdhcmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBiZWZvcmUoc3RyaW5nICRmaW5kTmFtZSwgY2FsbGFibGUgJG1pZGRsZXdhcmUsIHN0cmluZyAkd2l0aE5hbWUgPSAnJyk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+c3BsaWNlKCRmaW5kTmFtZSwgJHdpdGhOYW1lLCAkbWlkZGxld2FyZSwgdHJ1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGQgYSBtaWRkbGV3YXJlIGFmdGVyIGFub3RoZXIgbWlkZGxld2FyZSBieSBuYW1lLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICRmaW5kTmFtZSAgIE1pZGRsZXdhcmUgdG8gZmluZAogICAgICogQHBhcmFtIGNhbGxhYmxlKGNhbGxhYmxlKTogY2FsbGFibGUgJG1pZGRsZXdhcmUgTWlkZGxld2FyZSBmdW5jdGlvbgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgJHdpdGhOYW1lICAgTmFtZSB0byByZWdpc3RlciBmb3IgdGhpcyBtaWRkbGV3YXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWZ0ZXIoc3RyaW5nICRmaW5kTmFtZSwgY2FsbGFibGUgJG1pZGRsZXdhcmUsIHN0cmluZyAkd2l0aE5hbWUgPSAnJyk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+c3BsaWNlKCRmaW5kTmFtZSwgJHdpdGhOYW1lLCAkbWlkZGxld2FyZSwgZmFsc2UpOwogICAgfQoKICAgIC8qKgogICAgICogUmVtb3ZlIGEgbWlkZGxld2FyZSBieSBpbnN0YW5jZSBvciBuYW1lIGZyb20gdGhlIHN0YWNrLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZXxzdHJpbmcgJHJlbW92ZSBNaWRkbGV3YXJlIHRvIHJlbW92ZSBieSBpbnN0YW5jZSBvciBuYW1lLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlKCRyZW1vdmUpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCFpc19zdHJpbmcoJHJlbW92ZSkgJiYgIWlzX2NhbGxhYmxlKCRyZW1vdmUpKSB7CiAgICAgICAgICAgIHRyaWdnZXJfZGVwcmVjYXRpb24oJ2d1enpsZWh0dHAvZ3V6emxlJywgJzcuNCcsICdOb3QgcGFzc2luZyBhIGNhbGxhYmxlIG9yIHN0cmluZyB0byAlczo6JXMoKSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGNhdXNlIGFuIGVycm9yIGluIDguMC4nLCBfX0NMQVNTX18sIF9fRlVOQ1RJT05fXyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+Y2FjaGVkID0gbnVsbDsKICAgICAgICAkaWR4ID0gXGlzX2NhbGxhYmxlKCRyZW1vdmUpID8gMCA6IDE7CiAgICAgICAgJHRoaXMtPnN0YWNrID0gXGFycmF5X3ZhbHVlcyhcYXJyYXlfZmlsdGVyKAogICAgICAgICAgICAkdGhpcy0+c3RhY2ssCiAgICAgICAgICAgIHN0YXRpYyBmdW5jdGlvbiAoJHR1cGxlKSB1c2UgKCRpZHgsICRyZW1vdmUpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkdHVwbGVbJGlkeF0gIT09ICRyZW1vdmU7CiAgICAgICAgICAgIH0KICAgICAgICApKTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbXBvc2UgdGhlIG1pZGRsZXdhcmUgYW5kIGhhbmRsZXIgaW50byBhIHNpbmdsZSBjYWxsYWJsZSBmdW5jdGlvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIGNhbGxhYmxlKFJlcXVlc3RJbnRlcmZhY2UsIGFycmF5KTogUHJvbWlzZUludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzb2x2ZSgpOiBjYWxsYWJsZQogICAgewogICAgICAgIGlmICgkdGhpcy0+Y2FjaGVkID09PSBudWxsKSB7CiAgICAgICAgICAgIGlmICgoJHByZXYgPSAkdGhpcy0+aGFuZGxlcikgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ05vIGhhbmRsZXIgaGFzIGJlZW4gc3BlY2lmaWVkJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvcmVhY2ggKFxhcnJheV9yZXZlcnNlKCR0aGlzLT5zdGFjaykgYXMgJGZuKSB7CiAgICAgICAgICAgICAgICAvKiogQHZhciBjYWxsYWJsZShSZXF1ZXN0SW50ZXJmYWNlLCBhcnJheSk6IFByb21pc2VJbnRlcmZhY2UgJHByZXYgKi8KICAgICAgICAgICAgICAgICRwcmV2ID0gJGZuWzBdKCRwcmV2KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRoaXMtPmNhY2hlZCA9ICRwcmV2OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5jYWNoZWQ7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBmaW5kQnlOYW1lKHN0cmluZyAkbmFtZSk6IGludAogICAgewogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5zdGFjayBhcyAkayA9PiAkdikgewogICAgICAgICAgICBpZiAoJHZbMV0gPT09ICRuYW1lKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCJNaWRkbGV3YXJlIG5vdCBmb3VuZDogJG5hbWUiKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNwbGljZXMgYSBmdW5jdGlvbiBpbnRvIHRoZSBtaWRkbGV3YXJlIGxpc3QgYXQgYSBzcGVjaWZpYyBwb3NpdGlvbi4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBzcGxpY2Uoc3RyaW5nICRmaW5kTmFtZSwgc3RyaW5nICR3aXRoTmFtZSwgY2FsbGFibGUgJG1pZGRsZXdhcmUsIGJvb2wgJGJlZm9yZSk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+Y2FjaGVkID0gbnVsbDsKICAgICAgICAkaWR4ID0gJHRoaXMtPmZpbmRCeU5hbWUoJGZpbmROYW1lKTsKICAgICAgICAkdHVwbGUgPSBbJG1pZGRsZXdhcmUsICR3aXRoTmFtZV07CgogICAgICAgIGlmICgkYmVmb3JlKSB7CiAgICAgICAgICAgIGlmICgkaWR4ID09PSAwKSB7CiAgICAgICAgICAgICAgICBcYXJyYXlfdW5zaGlmdCgkdGhpcy0+c3RhY2ssICR0dXBsZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkcmVwbGFjZW1lbnQgPSBbJHR1cGxlLCAkdGhpcy0+c3RhY2tbJGlkeF1dOwogICAgICAgICAgICAgICAgXGFycmF5X3NwbGljZSgkdGhpcy0+c3RhY2ssICRpZHgsIDEsICRyZXBsYWNlbWVudCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2VpZiAoJGlkeCA9PT0gXGNvdW50KCR0aGlzLT5zdGFjaykgLSAxKSB7CiAgICAgICAgICAgICR0aGlzLT5zdGFja1tdID0gJHR1cGxlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRyZXBsYWNlbWVudCA9IFskdGhpcy0+c3RhY2tbJGlkeF0sICR0dXBsZV07CiAgICAgICAgICAgIFxhcnJheV9zcGxpY2UoJHRoaXMtPnN0YWNrLCAkaWR4LCAxLCAkcmVwbGFjZW1lbnQpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFByb3ZpZGVzIGEgZGVidWcgc3RyaW5nIGZvciBhIGdpdmVuIGNhbGxhYmxlLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZXxzdHJpbmcgJGZuIEZ1bmN0aW9uIHRvIHdyaXRlIGFzIGEgc3RyaW5nLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGRlYnVnQ2FsbGFibGUoJGZuKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKFxpc19zdHJpbmcoJGZuKSkgewogICAgICAgICAgICByZXR1cm4gImNhbGxhYmxlKHskZm59KSI7CiAgICAgICAgfQoKICAgICAgICBpZiAoXGlzX2FycmF5KCRmbikpIHsKICAgICAgICAgICAgcmV0dXJuIFxpc19zdHJpbmcoJGZuWzBdKQogICAgICAgICAgICAgICAgPyAiY2FsbGFibGUoeyRmblswXX06OnskZm5bMV19KSIKICAgICAgICAgICAgICAgIDogImNhbGxhYmxlKFsnIi5cZ2V0X2NsYXNzKCRmblswXSkuIicsICd7JGZuWzFdfSddKSI7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBvYmplY3QgJGZuICovCiAgICAgICAgcmV0dXJuICdjYWxsYWJsZSgnLlxzcGxfb2JqZWN0X2hhc2goJGZuKS4nKSc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/MessageFormatter.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIFBzclxIdHRwXE1lc3NhZ2VcTWVzc2FnZUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVzcG9uc2VJbnRlcmZhY2U7CgovKioKICogRm9ybWF0cyBsb2cgbWVzc2FnZXMgdXNpbmcgdmFyaWFibGUgc3Vic3RpdHV0aW9ucyBmb3IgcmVxdWVzdHMsIHJlc3BvbnNlcywKICogYW5kIG90aGVyIHRyYW5zYWN0aW9uYWwgZGF0YS4KICoKICogVGhlIGZvbGxvd2luZyB2YXJpYWJsZSBzdWJzdGl0dXRpb25zIGFyZSBzdXBwb3J0ZWQ6CiAqCiAqIC0ge3JlcXVlc3R9OiAgICAgICAgRnVsbCBIVFRQIHJlcXVlc3QgbWVzc2FnZQogKiAtIHtyZXNwb25zZX06ICAgICAgIEZ1bGwgSFRUUCByZXNwb25zZSBtZXNzYWdlCiAqIC0ge3RzfTogICAgICAgICAgICAgSVNPIDg2MDEgZGF0ZSBpbiBHTVQKICogLSB7ZGF0ZV9pc29fODYwMX0gICBJU08gODYwMSBkYXRlIGluIEdNVAogKiAtIHtkYXRlX2NvbW1vbl9sb2d9IEFwYWNoZSBjb21tb24gbG9nIGRhdGUgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgdGltZXpvbmUuCiAqIC0ge2hvc3R9OiAgICAgICAgICAgSG9zdCBvZiB0aGUgcmVxdWVzdAogKiAtIHttZXRob2R9OiAgICAgICAgIE1ldGhvZCBvZiB0aGUgcmVxdWVzdAogKiAtIHt1cml9OiAgICAgICAgICAgIFVSSSBvZiB0aGUgcmVxdWVzdAogKiAtIHt2ZXJzaW9ufTogICAgICAgIFByb3RvY29sIHZlcnNpb24KICogLSB7dGFyZ2V0fTogICAgICAgICBSZXF1ZXN0IHRhcmdldCBvZiB0aGUgcmVxdWVzdCAocGF0aCArIHF1ZXJ5ICsgZnJhZ21lbnQpCiAqIC0ge2hvc3RuYW1lfTogICAgICAgSG9zdG5hbWUgb2YgdGhlIG1hY2hpbmUgdGhhdCBzZW50IHRoZSByZXF1ZXN0CiAqIC0ge2NvZGV9OiAgICAgICAgICAgU3RhdHVzIGNvZGUgb2YgdGhlIHJlc3BvbnNlIChpZiBhdmFpbGFibGUpCiAqIC0ge3BocmFzZX06ICAgICAgICAgUmVhc29uIHBocmFzZSBvZiB0aGUgcmVzcG9uc2UgIChpZiBhdmFpbGFibGUpCiAqIC0ge2Vycm9yfTogICAgICAgICAgQW55IGVycm9yIG1lc3NhZ2VzIChpZiBhdmFpbGFibGUpCiAqIC0ge3JlcV9oZWFkZXJfKn06ICAgUmVwbGFjZSBgKmAgd2l0aCB0aGUgbG93ZXJjYXNlZCBuYW1lIG9mIGEgcmVxdWVzdCBoZWFkZXIgdG8gYWRkIHRvIHRoZSBtZXNzYWdlCiAqIC0ge3Jlc19oZWFkZXJfKn06ICAgUmVwbGFjZSBgKmAgd2l0aCB0aGUgbG93ZXJjYXNlZCBuYW1lIG9mIGEgcmVzcG9uc2UgaGVhZGVyIHRvIGFkZCB0byB0aGUgbWVzc2FnZQogKiAtIHtyZXFfaGVhZGVyc306ICAgIFJlcXVlc3QgaGVhZGVycwogKiAtIHtyZXNfaGVhZGVyc306ICAgIFJlc3BvbnNlIGhlYWRlcnMKICogLSB7cmVxX2JvZHl9OiAgICAgICBSZXF1ZXN0IGJvZHkKICogLSB7cmVzX2JvZHl9OiAgICAgICBSZXNwb25zZSBib2R5CiAqCiAqIEBmaW5hbAogKi8KY2xhc3MgTWVzc2FnZUZvcm1hdHRlciBpbXBsZW1lbnRzIE1lc3NhZ2VGb3JtYXR0ZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBBcGFjaGUgQ29tbW9uIExvZyBGb3JtYXQuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8yLjQvbG9ncy5odG1sI2NvbW1vbgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDTEYgPSAne2hvc3RuYW1lfSB7cmVxX2hlYWRlcl9Vc2VyLUFnZW50fSAtIFt7ZGF0ZV9jb21tb25fbG9nfV0gInttZXRob2R9IHt0YXJnZXR9IEhUVFAve3ZlcnNpb259IiB7Y29kZX0ge3Jlc19oZWFkZXJfQ29udGVudC1MZW5ndGh9JzsKICAgIHB1YmxpYyBjb25zdCBERUJVRyA9ICI+Pj4+Pj4+Plxue3JlcXVlc3R9XG48PDw8PDw8PFxue3Jlc3BvbnNlfVxuLS0tLS0tLS1cbntlcnJvcn0iOwogICAgcHVibGljIGNvbnN0IFNIT1JUID0gJ1t7dHN9XSAie21ldGhvZH0ge3RhcmdldH0gSFRUUC97dmVyc2lvbn0iIHtjb2RlfSc7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZyBUZW1wbGF0ZSB1c2VkIHRvIGZvcm1hdCBsb2cgbWVzc2FnZXMKICAgICAqLwogICAgcHJpdmF0ZSAkdGVtcGxhdGU7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0ZW1wbGF0ZSBMb2cgbWVzc2FnZSB0ZW1wbGF0ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoP3N0cmluZyAkdGVtcGxhdGUgPSBzZWxmOjpDTEYpCiAgICB7CiAgICAgICAgJHRoaXMtPnRlbXBsYXRlID0gJHRlbXBsYXRlID86IHNlbGY6OkNMRjsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBmb3JtYXR0ZWQgbWVzc2FnZSBzdHJpbmcuCiAgICAgKgogICAgICogQHBhcmFtIFJlcXVlc3RJbnRlcmZhY2UgICAgICAgJHJlcXVlc3QgIFJlcXVlc3QgdGhhdCB3YXMgc2VudAogICAgICogQHBhcmFtIFJlc3BvbnNlSW50ZXJmYWNlfG51bGwgJHJlc3BvbnNlIFJlc3BvbnNlIHRoYXQgd2FzIHJlY2VpdmVkCiAgICAgKiBAcGFyYW0gXFRocm93YWJsZXxudWxsICAgICAgICAkZXJyb3IgICAgRXhjZXB0aW9uIHRoYXQgd2FzIHJlY2VpdmVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmb3JtYXQoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgP1Jlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZSA9IG51bGwsID9cVGhyb3dhYmxlICRlcnJvciA9IG51bGwpOiBzdHJpbmcKICAgIHsKICAgICAgICAkY2FjaGUgPSBbXTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICovCiAgICAgICAgcmV0dXJuIFxwcmVnX3JlcGxhY2VfY2FsbGJhY2soCiAgICAgICAgICAgICcve1xzKihbQS1aYS16X1wtXC4wLTldKylccyp9LycsCiAgICAgICAgICAgIGZ1bmN0aW9uIChhcnJheSAkbWF0Y2hlcykgdXNlICgkcmVxdWVzdCwgJHJlc3BvbnNlLCAkZXJyb3IsICYkY2FjaGUpIHsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkY2FjaGVbJG1hdGNoZXNbMV1dKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkY2FjaGVbJG1hdGNoZXNbMV1dOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRyZXN1bHQgPSAnJzsKICAgICAgICAgICAgICAgIHN3aXRjaCAoJG1hdGNoZXNbMV0pIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICdyZXF1ZXN0JzoKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9IFBzcjdcTWVzc2FnZTo6dG9TdHJpbmcoJHJlcXVlc3QpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdyZXNwb25zZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkcmVzcG9uc2UgPyBQc3I3XE1lc3NhZ2U6OnRvU3RyaW5nKCRyZXNwb25zZSkgOiAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVxX2hlYWRlcnMnOgogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gXHRyaW0oJHJlcXVlc3QtPmdldE1ldGhvZCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLicgJy4kcmVxdWVzdC0+Z2V0UmVxdWVzdFRhcmdldCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLicgSFRUUC8nLiRyZXF1ZXN0LT5nZXRQcm90b2NvbFZlcnNpb24oKS4iXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4kdGhpcy0+aGVhZGVycygkcmVxdWVzdCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3Jlc19oZWFkZXJzJzoKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICRyZXNwb25zZSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcc3ByaW50ZigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSFRUUC8lcyAlZCAlcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlLT5nZXRQcm90b2NvbFZlcnNpb24oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UtPmdldFN0YXR1c0NvZGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UtPmdldFJlYXNvblBocmFzZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLiJcclxuIi4kdGhpcy0+aGVhZGVycygkcmVzcG9uc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdOVUxMJzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVxX2JvZHknOgogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gJHJlcXVlc3QtPmdldEJvZHkoKS0+X190b1N0cmluZygpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdyZXNfYm9keSc6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHJlc3BvbnNlIGluc3RhbmNlb2YgUmVzcG9uc2VJbnRlcmZhY2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAnTlVMTCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgJGJvZHkgPSAkcmVzcG9uc2UtPmdldEJvZHkoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJGJvZHktPmlzU2Vla2FibGUoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICdSRVNQT05TRV9OT1RfTE9HR0VBQkxFJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gJHJlc3BvbnNlLT5nZXRCb2R5KCktPl9fdG9TdHJpbmcoKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAndHMnOgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGVfaXNvXzg2MDEnOgogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gXGdtZGF0ZSgnYycpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdkYXRlX2NvbW1vbl9sb2cnOgogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gXGRhdGUoJ2QvTS9ZOkg6aTpzIE8nKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWV0aG9kJzoKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICRyZXF1ZXN0LT5nZXRNZXRob2QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAndmVyc2lvbic6CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkcmVxdWVzdC0+Z2V0UHJvdG9jb2xWZXJzaW9uKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3VyaSc6CiAgICAgICAgICAgICAgICAgICAgY2FzZSAndXJsJzoKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICRyZXF1ZXN0LT5nZXRVcmkoKS0+X190b1N0cmluZygpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICd0YXJnZXQnOgogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gJHJlcXVlc3QtPmdldFJlcXVlc3RUYXJnZXQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVxX3ZlcnNpb24nOgogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gJHJlcXVlc3QtPmdldFByb3RvY29sVmVyc2lvbigpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdyZXNfdmVyc2lvbic6CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkcmVzcG9uc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJHJlc3BvbnNlLT5nZXRQcm90b2NvbFZlcnNpb24oKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnTlVMTCc7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ2hvc3QnOgogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gJHJlcXVlc3QtPmdldEhlYWRlckxpbmUoJ0hvc3QnKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaG9zdG5hbWUnOgogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gXGdldGhvc3RuYW1lKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NvZGUnOgogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gJHJlc3BvbnNlID8gJHJlc3BvbnNlLT5nZXRTdGF0dXNDb2RlKCkgOiAnTlVMTCc7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3BocmFzZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkcmVzcG9uc2UgPyAkcmVzcG9uc2UtPmdldFJlYXNvblBocmFzZSgpIDogJ05VTEwnOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdlcnJvcic6CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkZXJyb3IgPyAkZXJyb3ItPmdldE1lc3NhZ2UoKSA6ICdOVUxMJzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIHByZWZpeGVkIGR5bmFtaWMgaGVhZGVycwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHN0cnBvcygkbWF0Y2hlc1sxXSwgJ3JlcV9oZWFkZXJfJykgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkcmVxdWVzdC0+Z2V0SGVhZGVyTGluZShcc3Vic3RyKCRtYXRjaGVzWzFdLCAxMSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoXHN0cnBvcygkbWF0Y2hlc1sxXSwgJ3Jlc19oZWFkZXJfJykgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkcmVzcG9uc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICRyZXNwb25zZS0+Z2V0SGVhZGVyTGluZShcc3Vic3RyKCRtYXRjaGVzWzFdLCAxMSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnTlVMTCc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkY2FjaGVbJG1hdGNoZXNbMV1dID0gJHJlc3VsdDsKCiAgICAgICAgICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgJHRoaXMtPnRlbXBsYXRlCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBoZWFkZXJzIGZyb20gbWVzc2FnZSBhcyBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBoZWFkZXJzKE1lc3NhZ2VJbnRlcmZhY2UgJG1lc3NhZ2UpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcmVzdWx0ID0gJyc7CiAgICAgICAgZm9yZWFjaCAoJG1lc3NhZ2UtPmdldEhlYWRlcnMoKSBhcyAkbmFtZSA9PiAkdmFsdWVzKSB7CiAgICAgICAgICAgICRyZXN1bHQgLj0gJG5hbWUuJzogJy5caW1wbG9kZSgnLCAnLCAkdmFsdWVzKS4iXHJcbiI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gXHRyaW0oJHJlc3VsdCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/MessageFormatterInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVzcG9uc2VJbnRlcmZhY2U7CgppbnRlcmZhY2UgTWVzc2FnZUZvcm1hdHRlckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFJldHVybnMgYSBmb3JtYXR0ZWQgbWVzc2FnZSBzdHJpbmcuCiAgICAgKgogICAgICogQHBhcmFtIFJlcXVlc3RJbnRlcmZhY2UgICAgICAgJHJlcXVlc3QgIFJlcXVlc3QgdGhhdCB3YXMgc2VudAogICAgICogQHBhcmFtIFJlc3BvbnNlSW50ZXJmYWNlfG51bGwgJHJlc3BvbnNlIFJlc3BvbnNlIHRoYXQgd2FzIHJlY2VpdmVkCiAgICAgKiBAcGFyYW0gXFRocm93YWJsZXxudWxsICAgICAgICAkZXJyb3IgICAgRXhjZXB0aW9uIHRoYXQgd2FzIHJlY2VpdmVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmb3JtYXQoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgP1Jlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZSA9IG51bGwsID9cVGhyb3dhYmxlICRlcnJvciA9IG51bGwpOiBzdHJpbmc7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Middleware.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIEd1enpsZUh0dHBcQ29va2llXENvb2tpZUphckludGVyZmFjZTsKdXNlIEd1enpsZUh0dHBcRXhjZXB0aW9uXFJlcXVlc3RFeGNlcHRpb247CnVzZSBHdXp6bGVIdHRwXFByb21pc2UgYXMgUDsKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZTsKdXNlIFBzclxMb2dcTG9nZ2VySW50ZXJmYWNlOwoKLyoqCiAqIEZ1bmN0aW9ucyB1c2VkIHRvIGNyZWF0ZSBhbmQgd3JhcCBoYW5kbGVycyB3aXRoIGhhbmRsZXIgbWlkZGxld2FyZS4KICovCmZpbmFsIGNsYXNzIE1pZGRsZXdhcmUKewogICAgLyoqCiAgICAgKiBNaWRkbGV3YXJlIHRoYXQgYWRkcyBjb29raWVzIHRvIHJlcXVlc3RzLgogICAgICoKICAgICAqIFRoZSBvcHRpb25zIGFycmF5IG11c3QgYmUgc2V0IHRvIGEgQ29va2llSmFySW50ZXJmYWNlIGluIG9yZGVyIHRvIHVzZQogICAgICogY29va2llcy4gVGhpcyBpcyB0eXBpY2FsbHkgaGFuZGxlZCBmb3IgeW91IGJ5IGEgY2xpZW50LgogICAgICoKICAgICAqIEByZXR1cm4gY2FsbGFibGUgUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgbmV4dCBoYW5kbGVyLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvb2tpZXMoKTogY2FsbGFibGUKICAgIHsKICAgICAgICByZXR1cm4gc3RhdGljIGZ1bmN0aW9uIChjYWxsYWJsZSAkaGFuZGxlcik6IGNhbGxhYmxlIHsKICAgICAgICAgICAgcmV0dXJuIHN0YXRpYyBmdW5jdGlvbiAoJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKSB1c2UgKCRoYW5kbGVyKSB7CiAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJG9wdGlvbnNbJ2Nvb2tpZXMnXSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGhhbmRsZXIoJHJlcXVlc3QsICRvcHRpb25zKTsKICAgICAgICAgICAgICAgIH0gZWxzZWlmICghKCRvcHRpb25zWydjb29raWVzJ10gaW5zdGFuY2VvZiBDb29raWVKYXJJbnRlcmZhY2UpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ2Nvb2tpZXMgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBHdXp6bGVIdHRwXENvb2tpZVxDb29raWVKYXJJbnRlcmZhY2UnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRjb29raWVKYXIgPSAkb3B0aW9uc1snY29va2llcyddOwogICAgICAgICAgICAgICAgJHJlcXVlc3QgPSAkY29va2llSmFyLT53aXRoQ29va2llSGVhZGVyKCRyZXF1ZXN0KTsKCiAgICAgICAgICAgICAgICByZXR1cm4gJGhhbmRsZXIoJHJlcXVlc3QsICRvcHRpb25zKQogICAgICAgICAgICAgICAgICAgIC0+dGhlbigKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljIGZ1bmN0aW9uIChSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UpIHVzZSAoJGNvb2tpZUphciwgJHJlcXVlc3QpOiBSZXNwb25zZUludGVyZmFjZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29va2llSmFyLT5leHRyYWN0Q29va2llcygkcmVxdWVzdCwgJHJlc3BvbnNlKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHJlc3BvbnNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfTsKICAgICAgICB9OwogICAgfQoKICAgIC8qKgogICAgICogTWlkZGxld2FyZSB0aGF0IHRocm93cyBleGNlcHRpb25zIGZvciA0eHggb3IgNXh4IHJlc3BvbnNlcyB3aGVuIHRoZQogICAgICogImh0dHBfZXJyb3JzIiByZXF1ZXN0IG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gQm9keVN1bW1hcml6ZXJJbnRlcmZhY2V8bnVsbCAkYm9keVN1bW1hcml6ZXIgVGhlIGJvZHkgc3VtbWFyaXplciB0byB1c2UgaW4gZXhjZXB0aW9uIG1lc3NhZ2VzLgogICAgICoKICAgICAqIEByZXR1cm4gY2FsbGFibGUoY2FsbGFibGUpOiBjYWxsYWJsZSBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHRoZSBuZXh0IGhhbmRsZXIuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaHR0cEVycm9ycyg/Qm9keVN1bW1hcml6ZXJJbnRlcmZhY2UgJGJvZHlTdW1tYXJpemVyID0gbnVsbCk6IGNhbGxhYmxlCiAgICB7CiAgICAgICAgcmV0dXJuIHN0YXRpYyBmdW5jdGlvbiAoY2FsbGFibGUgJGhhbmRsZXIpIHVzZSAoJGJvZHlTdW1tYXJpemVyKTogY2FsbGFibGUgewogICAgICAgICAgICByZXR1cm4gc3RhdGljIGZ1bmN0aW9uICgkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpIHVzZSAoJGhhbmRsZXIsICRib2R5U3VtbWFyaXplcikgewogICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRvcHRpb25zWydodHRwX2Vycm9ycyddKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkaGFuZGxlcigkcmVxdWVzdCwgJG9wdGlvbnMpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiAkaGFuZGxlcigkcmVxdWVzdCwgJG9wdGlvbnMpLT50aGVuKAogICAgICAgICAgICAgICAgICAgIHN0YXRpYyBmdW5jdGlvbiAoUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlKSB1c2UgKCRyZXF1ZXN0LCAkYm9keVN1bW1hcml6ZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvZGUgPSAkcmVzcG9uc2UtPmdldFN0YXR1c0NvZGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRjb2RlIDwgNDAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHJlc3BvbnNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFJlcXVlc3RFeGNlcHRpb246OmNyZWF0ZSgkcmVxdWVzdCwgJHJlc3BvbnNlLCBudWxsLCBbXSwgJGJvZHlTdW1tYXJpemVyKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9OwogICAgICAgIH07CiAgICB9CgogICAgLyoqCiAgICAgKiBNaWRkbGV3YXJlIHRoYXQgcHVzaGVzIGhpc3RvcnkgZGF0YSB0byBhbiBBcnJheUFjY2VzcyBjb250YWluZXIuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5fFxBcnJheUFjY2VzczxpbnQsIGFycmF5PiAkY29udGFpbmVyIENvbnRhaW5lciB0byBob2xkIHRoZSBoaXN0b3J5IChieSByZWZlcmVuY2UpLgogICAgICoKICAgICAqIEByZXR1cm4gY2FsbGFibGUoY2FsbGFibGUpOiBjYWxsYWJsZSBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHRoZSBuZXh0IGhhbmRsZXIuCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmIGNvbnRhaW5lciBpcyBub3QgYW4gYXJyYXkgb3IgQXJyYXlBY2Nlc3MuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGlzdG9yeSgmJGNvbnRhaW5lcik6IGNhbGxhYmxlCiAgICB7CiAgICAgICAgaWYgKCFcaXNfYXJyYXkoJGNvbnRhaW5lcikgJiYgISRjb250YWluZXIgaW5zdGFuY2VvZiBcQXJyYXlBY2Nlc3MpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ2hpc3RvcnkgY29udGFpbmVyIG11c3QgYmUgYW4gYXJyYXkgb3Igb2JqZWN0IGltcGxlbWVudGluZyBBcnJheUFjY2VzcycpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHN0YXRpYyBmdW5jdGlvbiAoY2FsbGFibGUgJGhhbmRsZXIpIHVzZSAoJiRjb250YWluZXIpOiBjYWxsYWJsZSB7CiAgICAgICAgICAgIHJldHVybiBzdGF0aWMgZnVuY3Rpb24gKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKSB1c2UgKCRoYW5kbGVyLCAmJGNvbnRhaW5lcikgewogICAgICAgICAgICAgICAgcmV0dXJuICRoYW5kbGVyKCRyZXF1ZXN0LCAkb3B0aW9ucyktPnRoZW4oCiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGZ1bmN0aW9uICgkdmFsdWUpIHVzZSAoJHJlcXVlc3QsICYkY29udGFpbmVyLCAkb3B0aW9ucykgewogICAgICAgICAgICAgICAgICAgICAgICAkY29udGFpbmVyW10gPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVxdWVzdCcgPT4gJHJlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVzcG9uc2UnID0+ICR2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvcicgPT4gbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcHRpb25zJyA9PiAkb3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZnVuY3Rpb24gKCRyZWFzb24pIHVzZSAoJHJlcXVlc3QsICYkY29udGFpbmVyLCAkb3B0aW9ucykgewogICAgICAgICAgICAgICAgICAgICAgICAkY29udGFpbmVyW10gPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVxdWVzdCcgPT4gJHJlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVzcG9uc2UnID0+IG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXJyb3InID0+ICRyZWFzb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3B0aW9ucycgPT4gJG9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgIF07CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUFxDcmVhdGU6OnJlamVjdGlvbkZvcigkcmVhc29uKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9OwogICAgICAgIH07CiAgICB9CgogICAgLyoqCiAgICAgKiBNaWRkbGV3YXJlIHRoYXQgaW52b2tlcyBhIGNhbGxiYWNrIGJlZm9yZSBhbmQgYWZ0ZXIgc2VuZGluZyBhIHJlcXVlc3QuCiAgICAgKgogICAgICogVGhlIHByb3ZpZGVkIGxpc3RlbmVyIGNhbm5vdCBtb2RpZnkgb3IgYWx0ZXIgdGhlIHJlc3BvbnNlLiBJdCBzaW1wbHkKICAgICAqICJ0YXBzIiBpbnRvIHRoZSBjaGFpbiB0byBiZSBub3RpZmllZCBiZWZvcmUgcmV0dXJuaW5nIHRoZSBwcm9taXNlLiBUaGUKICAgICAqIGJlZm9yZSBsaXN0ZW5lciBhY2NlcHRzIGEgcmVxdWVzdCBhbmQgb3B0aW9ucyBhcnJheSwgYW5kIHRoZSBhZnRlcgogICAgICogbGlzdGVuZXIgYWNjZXB0cyBhIHJlcXVlc3QsIG9wdGlvbnMgYXJyYXksIGFuZCByZXNwb25zZSBwcm9taXNlLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkYmVmb3JlIEZ1bmN0aW9uIHRvIGludm9rZSBiZWZvcmUgZm9yd2FyZGluZyB0aGUgcmVxdWVzdC4KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkYWZ0ZXIgIEZ1bmN0aW9uIGludm9rZWQgYWZ0ZXIgZm9yd2FyZGluZy4KICAgICAqCiAgICAgKiBAcmV0dXJuIGNhbGxhYmxlIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdGhlIG5leHQgaGFuZGxlci4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0YXAoP2NhbGxhYmxlICRiZWZvcmUgPSBudWxsLCA/Y2FsbGFibGUgJGFmdGVyID0gbnVsbCk6IGNhbGxhYmxlCiAgICB7CiAgICAgICAgcmV0dXJuIHN0YXRpYyBmdW5jdGlvbiAoY2FsbGFibGUgJGhhbmRsZXIpIHVzZSAoJGJlZm9yZSwgJGFmdGVyKTogY2FsbGFibGUgewogICAgICAgICAgICByZXR1cm4gc3RhdGljIGZ1bmN0aW9uIChSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAkb3B0aW9ucykgdXNlICgkaGFuZGxlciwgJGJlZm9yZSwgJGFmdGVyKSB7CiAgICAgICAgICAgICAgICBpZiAoJGJlZm9yZSkgewogICAgICAgICAgICAgICAgICAgICRiZWZvcmUoJHJlcXVlc3QsICRvcHRpb25zKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRyZXNwb25zZSA9ICRoYW5kbGVyKCRyZXF1ZXN0LCAkb3B0aW9ucyk7CiAgICAgICAgICAgICAgICBpZiAoJGFmdGVyKSB7CiAgICAgICAgICAgICAgICAgICAgJGFmdGVyKCRyZXF1ZXN0LCAkb3B0aW9ucywgJHJlc3BvbnNlKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gJHJlc3BvbnNlOwogICAgICAgICAgICB9OwogICAgICAgIH07CiAgICB9CgogICAgLyoqCiAgICAgKiBNaWRkbGV3YXJlIHRoYXQgaGFuZGxlcyByZXF1ZXN0IHJlZGlyZWN0cy4KICAgICAqCiAgICAgKiBAcmV0dXJuIGNhbGxhYmxlIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdGhlIG5leHQgaGFuZGxlci4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWRpcmVjdCgpOiBjYWxsYWJsZQogICAgewogICAgICAgIHJldHVybiBzdGF0aWMgZnVuY3Rpb24gKGNhbGxhYmxlICRoYW5kbGVyKTogUmVkaXJlY3RNaWRkbGV3YXJlIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWRpcmVjdE1pZGRsZXdhcmUoJGhhbmRsZXIpOwogICAgICAgIH07CiAgICB9CgogICAgLyoqCiAgICAgKiBNaWRkbGV3YXJlIHRoYXQgcmV0cmllcyByZXF1ZXN0cyBiYXNlZCBvbiB0aGUgYm9vbGVhbiByZXN1bHQgb2YKICAgICAqIGludm9raW5nIHRoZSBwcm92aWRlZCAiZGVjaWRlciIgZnVuY3Rpb24uCiAgICAgKgogICAgICogSWYgbm8gZGVsYXkgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIGEgc2ltcGxlIGltcGxlbWVudGF0aW9uIG9mIGV4cG9uZW50aWFsCiAgICAgKiBiYWNrb2ZmIHdpbGwgYmUgdXRpbGl6ZWQuCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRkZWNpZGVyIEZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgbnVtYmVyIG9mIHJldHJpZXMsCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYSByZXF1ZXN0LCBbcmVzcG9uc2VdLCBhbmQgW2V4Y2VwdGlvbl0gYW5kCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJucyB0cnVlIGlmIHRoZSByZXF1ZXN0IGlzIHRvIGJlIHJldHJpZWQuCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGRlbGF5ICAgRnVuY3Rpb24gdGhhdCBhY2NlcHRzIHRoZSBudW1iZXIgb2YgcmV0cmllcyBhbmQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5zIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5LgogICAgICoKICAgICAqIEByZXR1cm4gY2FsbGFibGUgUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgbmV4dCBoYW5kbGVyLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJldHJ5KGNhbGxhYmxlICRkZWNpZGVyLCA/Y2FsbGFibGUgJGRlbGF5ID0gbnVsbCk6IGNhbGxhYmxlCiAgICB7CiAgICAgICAgcmV0dXJuIHN0YXRpYyBmdW5jdGlvbiAoY2FsbGFibGUgJGhhbmRsZXIpIHVzZSAoJGRlY2lkZXIsICRkZWxheSk6IFJldHJ5TWlkZGxld2FyZSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmV0cnlNaWRkbGV3YXJlKCRkZWNpZGVyLCAkaGFuZGxlciwgJGRlbGF5KTsKICAgICAgICB9OwogICAgfQoKICAgIC8qKgogICAgICogTWlkZGxld2FyZSB0aGF0IGxvZ3MgcmVxdWVzdHMsIHJlc3BvbnNlcywgYW5kIGVycm9ycyB1c2luZyBhIG1lc3NhZ2UKICAgICAqIGZvcm1hdHRlci4KICAgICAqCiAgICAgKiBAcGFyYW0gTG9nZ2VySW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsb2dnZXIgICAgTG9ncyBtZXNzYWdlcy4KICAgICAqIEBwYXJhbSBNZXNzYWdlRm9ybWF0dGVySW50ZXJmYWNlfE1lc3NhZ2VGb3JtYXR0ZXIgJGZvcm1hdHRlciBGb3JtYXR0ZXIgdXNlZCB0byBjcmVhdGUgbWVzc2FnZSBzdHJpbmdzLgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9nTGV2ZWwgIExldmVsIGF0IHdoaWNoIHRvIGxvZyByZXF1ZXN0cy4KICAgICAqCiAgICAgKiBAcGhwc3Rhbi1wYXJhbSBcUHNyXExvZ1xMb2dMZXZlbDo6KiAkbG9nTGV2ZWwgTGV2ZWwgYXQgd2hpY2ggdG8gbG9nIHJlcXVlc3RzLgogICAgICoKICAgICAqIEByZXR1cm4gY2FsbGFibGUgUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgbmV4dCBoYW5kbGVyLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxvZyhMb2dnZXJJbnRlcmZhY2UgJGxvZ2dlciwgJGZvcm1hdHRlciwgc3RyaW5nICRsb2dMZXZlbCA9ICdpbmZvJyk6IGNhbGxhYmxlCiAgICB7CiAgICAgICAgLy8gVG8gYmUgY29tcGF0aWJsZSB3aXRoIEd1enpsZSA3LjEueCB3ZSBuZWVkIHRvIGFsbG93IHVzZXJzIHRvIHBhc3MgYSBNZXNzYWdlRm9ybWF0dGVyCiAgICAgICAgaWYgKCEkZm9ybWF0dGVyIGluc3RhbmNlb2YgTWVzc2FnZUZvcm1hdHRlciAmJiAhJGZvcm1hdHRlciBpbnN0YW5jZW9mIE1lc3NhZ2VGb3JtYXR0ZXJJbnRlcmZhY2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbihzcHJpbnRmKCdBcmd1bWVudCAyIHRvICVzOjpsb2coKSBtdXN0IGJlIG9mIHR5cGUgJXMnLCBzZWxmOjpjbGFzcywgTWVzc2FnZUZvcm1hdHRlckludGVyZmFjZTo6Y2xhc3MpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBzdGF0aWMgZnVuY3Rpb24gKGNhbGxhYmxlICRoYW5kbGVyKSB1c2UgKCRsb2dnZXIsICRmb3JtYXR0ZXIsICRsb2dMZXZlbCk6IGNhbGxhYmxlIHsKICAgICAgICAgICAgcmV0dXJuIHN0YXRpYyBmdW5jdGlvbiAoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMgPSBbXSkgdXNlICgkaGFuZGxlciwgJGxvZ2dlciwgJGZvcm1hdHRlciwgJGxvZ0xldmVsKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGhhbmRsZXIoJHJlcXVlc3QsICRvcHRpb25zKS0+dGhlbigKICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZnVuY3Rpb24gKCRyZXNwb25zZSkgdXNlICgkbG9nZ2VyLCAkcmVxdWVzdCwgJGZvcm1hdHRlciwgJGxvZ0xldmVsKTogUmVzcG9uc2VJbnRlcmZhY2UgewogICAgICAgICAgICAgICAgICAgICAgICAkbWVzc2FnZSA9ICRmb3JtYXR0ZXItPmZvcm1hdCgkcmVxdWVzdCwgJHJlc3BvbnNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGxvZ2dlci0+bG9nKCRsb2dMZXZlbCwgJG1lc3NhZ2UpOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRyZXNwb25zZTsKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHN0YXRpYyBmdW5jdGlvbiAoJHJlYXNvbikgdXNlICgkbG9nZ2VyLCAkcmVxdWVzdCwgJGZvcm1hdHRlcik6IFByb21pc2VJbnRlcmZhY2UgewogICAgICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSAkcmVhc29uIGluc3RhbmNlb2YgUmVxdWVzdEV4Y2VwdGlvbiA/ICRyZWFzb24tPmdldFJlc3BvbnNlKCkgOiBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAkbWVzc2FnZSA9ICRmb3JtYXR0ZXItPmZvcm1hdCgkcmVxdWVzdCwgJHJlc3BvbnNlLCBQXENyZWF0ZTo6ZXhjZXB0aW9uRm9yKCRyZWFzb24pKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGxvZ2dlci0+ZXJyb3IoJG1lc3NhZ2UpOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBcQ3JlYXRlOjpyZWplY3Rpb25Gb3IoJHJlYXNvbik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfTsKICAgICAgICB9OwogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBtaWRkbGV3YXJlIGFkZHMgYSBkZWZhdWx0IGNvbnRlbnQtdHlwZSBpZiBwb3NzaWJsZSwgYSBkZWZhdWx0CiAgICAgKiBjb250ZW50LWxlbmd0aCBvciB0cmFuc2Zlci1lbmNvZGluZyBoZWFkZXIsIGFuZCB0aGUgZXhwZWN0IGhlYWRlci4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwcmVwYXJlQm9keSgpOiBjYWxsYWJsZQogICAgewogICAgICAgIHJldHVybiBzdGF0aWMgZnVuY3Rpb24gKGNhbGxhYmxlICRoYW5kbGVyKTogUHJlcGFyZUJvZHlNaWRkbGV3YXJlIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBQcmVwYXJlQm9keU1pZGRsZXdhcmUoJGhhbmRsZXIpOwogICAgICAgIH07CiAgICB9CgogICAgLyoqCiAgICAgKiBNaWRkbGV3YXJlIHRoYXQgYXBwbGllcyBhIG1hcCBmdW5jdGlvbiB0byB0aGUgcmVxdWVzdCBiZWZvcmUgcGFzc2luZyB0bwogICAgICogdGhlIG5leHQgaGFuZGxlci4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGZuIEZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhIFJlcXVlc3RJbnRlcmZhY2UgYW5kIHJldHVybnMKICAgICAqICAgICAgICAgICAgICAgICAgICAgYSBSZXF1ZXN0SW50ZXJmYWNlLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1hcFJlcXVlc3QoY2FsbGFibGUgJGZuKTogY2FsbGFibGUKICAgIHsKICAgICAgICByZXR1cm4gc3RhdGljIGZ1bmN0aW9uIChjYWxsYWJsZSAkaGFuZGxlcikgdXNlICgkZm4pOiBjYWxsYWJsZSB7CiAgICAgICAgICAgIHJldHVybiBzdGF0aWMgZnVuY3Rpb24gKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKSB1c2UgKCRoYW5kbGVyLCAkZm4pIHsKICAgICAgICAgICAgICAgIHJldHVybiAkaGFuZGxlcigkZm4oJHJlcXVlc3QpLCAkb3B0aW9ucyk7CiAgICAgICAgICAgIH07CiAgICAgICAgfTsKICAgIH0KCiAgICAvKioKICAgICAqIE1pZGRsZXdhcmUgdGhhdCBhcHBsaWVzIGEgbWFwIGZ1bmN0aW9uIHRvIHRoZSByZXNvbHZlZCBwcm9taXNlJ3MKICAgICAqIHJlc3BvbnNlLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkZm4gRnVuY3Rpb24gdGhhdCBhY2NlcHRzIGEgUmVzcG9uc2VJbnRlcmZhY2UgYW5kCiAgICAgKiAgICAgICAgICAgICAgICAgICAgIHJldHVybnMgYSBSZXNwb25zZUludGVyZmFjZS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYXBSZXNwb25zZShjYWxsYWJsZSAkZm4pOiBjYWxsYWJsZQogICAgewogICAgICAgIHJldHVybiBzdGF0aWMgZnVuY3Rpb24gKGNhbGxhYmxlICRoYW5kbGVyKSB1c2UgKCRmbik6IGNhbGxhYmxlIHsKICAgICAgICAgICAgcmV0dXJuIHN0YXRpYyBmdW5jdGlvbiAoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpIHVzZSAoJGhhbmRsZXIsICRmbikgewogICAgICAgICAgICAgICAgcmV0dXJuICRoYW5kbGVyKCRyZXF1ZXN0LCAkb3B0aW9ucyktPnRoZW4oJGZuKTsKICAgICAgICAgICAgfTsKICAgICAgICB9OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Pool.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIEd1enpsZUh0dHBcUHJvbWlzZSBhcyBQOwp1c2UgR3V6emxlSHR0cFxQcm9taXNlXEVhY2hQcm9taXNlOwp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2VJbnRlcmZhY2U7CnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUHJvbWlzb3JJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CgovKioKICogU2VuZHMgYW4gaXRlcmF0b3Igb2YgcmVxdWVzdHMgY29uY3VycmVudGx5IHVzaW5nIGEgY2FwcGVkIHBvb2wgc2l6ZS4KICoKICogVGhlIHBvb2wgd2lsbCByZWFkIGZyb20gYW4gaXRlcmF0b3IgdW50aWwgaXQgaXMgY2FuY2VsbGVkIG9yIHVudGlsIHRoZQogKiBpdGVyYXRvciBpcyBjb25zdW1lZC4gV2hlbiBhIHJlcXVlc3QgaXMgeWllbGRlZCwgdGhlIHJlcXVlc3QgaXMgc2VudCBhZnRlcgogKiBhcHBseWluZyB0aGUgInJlcXVlc3Rfb3B0aW9ucyIgcmVxdWVzdCBvcHRpb25zIChpZiBwcm92aWRlZCBpbiB0aGUgY3RvcikuCiAqCiAqIFdoZW4gYSBmdW5jdGlvbiBpcyB5aWVsZGVkIGJ5IHRoZSBpdGVyYXRvciwgdGhlIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHRoZQogKiAicmVxdWVzdF9vcHRpb25zIiBhcnJheSB0aGF0IHNob3VsZCBiZSBtZXJnZWQgb24gdG9wIG9mIGFueSBleGlzdGluZwogKiBvcHRpb25zLCBhbmQgdGhlIGZ1bmN0aW9uIE1VU1QgdGhlbiByZXR1cm4gYSB3YWl0LWFibGUgcHJvbWlzZS4KICoKICogQGZpbmFsCiAqLwpjbGFzcyBQb29sIGltcGxlbWVudHMgUHJvbWlzb3JJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAdmFyIEVhY2hQcm9taXNlCiAgICAgKi8KICAgIHByaXZhdGUgJGVhY2g7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gQ2xpZW50SW50ZXJmYWNlICRjbGllbnQgICBDbGllbnQgdXNlZCB0byBzZW5kIHRoZSByZXF1ZXN0cy4KICAgICAqIEBwYXJhbSBhcnJheXxcSXRlcmF0b3IgJHJlcXVlc3RzIFJlcXVlc3RzIG9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMgdG8gc2VuZCBjb25jdXJyZW50bHkuCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICRjb25maWcgICBBc3NvY2lhdGl2ZSBhcnJheSBvZiBvcHRpb25zCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGNvbmN1cnJlbmN5OiAoaW50KSBNYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0cyB0byBzZW5kIGNvbmN1cnJlbnRseQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBvcHRpb25zOiBBcnJheSBvZiByZXF1ZXN0IG9wdGlvbnMgdG8gYXBwbHkgdG8gZWFjaCByZXF1ZXN0LgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBmdWxmaWxsZWQ6IChjYWxsYWJsZSkgRnVuY3Rpb24gdG8gaW52b2tlIHdoZW4gYSByZXF1ZXN0IGNvbXBsZXRlcy4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcmVqZWN0ZWQ6IChjYWxsYWJsZSkgRnVuY3Rpb24gdG8gaW52b2tlIHdoZW4gYSByZXF1ZXN0IGlzIHJlamVjdGVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoQ2xpZW50SW50ZXJmYWNlICRjbGllbnQsICRyZXF1ZXN0cywgYXJyYXkgJGNvbmZpZyA9IFtdKQogICAgewogICAgICAgIGlmICghaXNzZXQoJGNvbmZpZ1snY29uY3VycmVuY3knXSkpIHsKICAgICAgICAgICAgJGNvbmZpZ1snY29uY3VycmVuY3knXSA9IDI1OwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRjb25maWdbJ29wdGlvbnMnXSkpIHsKICAgICAgICAgICAgJG9wdHMgPSAkY29uZmlnWydvcHRpb25zJ107CiAgICAgICAgICAgIHVuc2V0KCRjb25maWdbJ29wdGlvbnMnXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG9wdHMgPSBbXTsKICAgICAgICB9CgogICAgICAgICRpdGVyYWJsZSA9IFBcQ3JlYXRlOjppdGVyRm9yKCRyZXF1ZXN0cyk7CiAgICAgICAgJHJlcXVlc3RzID0gc3RhdGljIGZ1bmN0aW9uICgpIHVzZSAoJGl0ZXJhYmxlLCAkY2xpZW50LCAkb3B0cykgewogICAgICAgICAgICBmb3JlYWNoICgkaXRlcmFibGUgYXMgJGtleSA9PiAkcmZuKSB7CiAgICAgICAgICAgICAgICBpZiAoJHJmbiBpbnN0YW5jZW9mIFJlcXVlc3RJbnRlcmZhY2UpIHsKICAgICAgICAgICAgICAgICAgICB5aWVsZCAka2V5ID0+ICRjbGllbnQtPnNlbmRBc3luYygkcmZuLCAkb3B0cyk7CiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoXGlzX2NhbGxhYmxlKCRyZm4pKSB7CiAgICAgICAgICAgICAgICAgICAgeWllbGQgJGtleSA9PiAkcmZuKCRvcHRzKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0VhY2ggdmFsdWUgeWllbGRlZCBieSB0aGUgaXRlcmF0b3IgbXVzdCBiZSBhIFBzcjdcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2Ugb3IgYSBjYWxsYWJsZSB0aGF0IHJldHVybnMgYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgd2l0aCBhIFBzcjdcTWVzc2FnZVxIdHRwXFJlc3BvbnNlSW50ZXJmYWNlIG9iamVjdC4nKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgICR0aGlzLT5lYWNoID0gbmV3IEVhY2hQcm9taXNlKCRyZXF1ZXN0cygpLCAkY29uZmlnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBwcm9taXNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcm9taXNlKCk6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmVhY2gtPnByb21pc2UoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNlbmRzIG11bHRpcGxlIHJlcXVlc3RzIGNvbmN1cnJlbnRseSBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiByZXNwb25zZXMKICAgICAqIGFuZCBleGNlcHRpb25zIHRoYXQgdXNlcyB0aGUgc2FtZSBvcmRlcmluZyBhcyB0aGUgcHJvdmlkZWQgcmVxdWVzdHMuCiAgICAgKgogICAgICogSU1QT1JUQU5UOiBUaGlzIG1ldGhvZCBrZWVwcyBldmVyeSByZXF1ZXN0IGFuZCByZXNwb25zZSBpbiBtZW1vcnksIGFuZAogICAgICogYXMgc3VjaCwgaXMgTk9UIHJlY29tbWVuZGVkIHdoZW4gc2VuZGluZyBhIGxhcmdlIG51bWJlciBvciBhbgogICAgICogaW5kZXRlcm1pbmF0ZSBudW1iZXIgb2YgcmVxdWVzdHMgY29uY3VycmVudGx5LgogICAgICoKICAgICAqIEBwYXJhbSBDbGllbnRJbnRlcmZhY2UgJGNsaWVudCAgIENsaWVudCB1c2VkIHRvIHNlbmQgdGhlIHJlcXVlc3RzCiAgICAgKiBAcGFyYW0gYXJyYXl8XEl0ZXJhdG9yICRyZXF1ZXN0cyBSZXF1ZXN0cyB0byBzZW5kIGNvbmN1cnJlbnRseS4KICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgJG9wdGlvbnMgIFBhc3NlcyB0aHJvdWdoIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBpbgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge0BzZWUgUG9vbDo6X19jb25zdHJ1Y3R9CiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHJlc3BvbnNlIG9yIGFuIGV4Y2VwdGlvbgogICAgICogICAgICAgICAgICAgICBpbiB0aGUgc2FtZSBvcmRlciB0aGF0IHRoZSByZXF1ZXN0cyB3ZXJlIHNlbnQuCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBldmVudCBmb3JtYXQgaXMgaW5jb3JyZWN0LgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJhdGNoKENsaWVudEludGVyZmFjZSAkY2xpZW50LCAkcmVxdWVzdHMsIGFycmF5ICRvcHRpb25zID0gW10pOiBhcnJheQogICAgewogICAgICAgICRyZXMgPSBbXTsKICAgICAgICBzZWxmOjpjbXBDYWxsYmFjaygkb3B0aW9ucywgJ2Z1bGZpbGxlZCcsICRyZXMpOwogICAgICAgIHNlbGY6OmNtcENhbGxiYWNrKCRvcHRpb25zLCAncmVqZWN0ZWQnLCAkcmVzKTsKICAgICAgICAkcG9vbCA9IG5ldyBzdGF0aWMoJGNsaWVudCwgJHJlcXVlc3RzLCAkb3B0aW9ucyk7CiAgICAgICAgJHBvb2wtPnByb21pc2UoKS0+d2FpdCgpOwogICAgICAgIFxrc29ydCgkcmVzKTsKCiAgICAgICAgcmV0dXJuICRyZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBFeGVjdXRlIGNhbGxiYWNrKHMpCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGNtcENhbGxiYWNrKGFycmF5ICYkb3B0aW9ucywgc3RyaW5nICRuYW1lLCBhcnJheSAmJHJlc3VsdHMpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCFpc3NldCgkb3B0aW9uc1skbmFtZV0pKSB7CiAgICAgICAgICAgICRvcHRpb25zWyRuYW1lXSA9IHN0YXRpYyBmdW5jdGlvbiAoJHYsICRrKSB1c2UgKCYkcmVzdWx0cykgewogICAgICAgICAgICAgICAgJHJlc3VsdHNbJGtdID0gJHY7CiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGN1cnJlbnRGbiA9ICRvcHRpb25zWyRuYW1lXTsKICAgICAgICAgICAgJG9wdGlvbnNbJG5hbWVdID0gc3RhdGljIGZ1bmN0aW9uICgkdiwgJGspIHVzZSAoJiRyZXN1bHRzLCAkY3VycmVudEZuKSB7CiAgICAgICAgICAgICAgICAkY3VycmVudEZuKCR2LCAkayk7CiAgICAgICAgICAgICAgICAkcmVzdWx0c1ska10gPSAkdjsKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwoKLyoqCiAqIFByZXBhcmVzIHJlcXVlc3RzIHRoYXQgY29udGFpbiBhIGJvZHksIGFkZGluZyB0aGUgQ29udGVudC1MZW5ndGgsCiAqIENvbnRlbnQtVHlwZSwgYW5kIEV4cGVjdCBoZWFkZXJzLgogKgogKiBAZmluYWwKICovCmNsYXNzIFByZXBhcmVCb2R5TWlkZGxld2FyZQp7CiAgICAvKioKICAgICAqIEB2YXIgY2FsbGFibGUoUmVxdWVzdEludGVyZmFjZSwgYXJyYXkpOiBQcm9taXNlSW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJG5leHRIYW5kbGVyOwoKICAgIC8qKgogICAgICogQHBhcmFtIGNhbGxhYmxlKFJlcXVlc3RJbnRlcmZhY2UsIGFycmF5KTogUHJvbWlzZUludGVyZmFjZSAkbmV4dEhhbmRsZXIgTmV4dCBoYW5kbGVyIHRvIGludm9rZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGNhbGxhYmxlICRuZXh0SGFuZGxlcikKICAgIHsKICAgICAgICAkdGhpcy0+bmV4dEhhbmRsZXIgPSAkbmV4dEhhbmRsZXI7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9faW52b2tlKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKTogUHJvbWlzZUludGVyZmFjZQogICAgewogICAgICAgICRmbiA9ICR0aGlzLT5uZXh0SGFuZGxlcjsKCiAgICAgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlIHJlcXVlc3QgaGFzIG5vIGJvZHkuCiAgICAgICAgaWYgKCRyZXF1ZXN0LT5nZXRCb2R5KCktPmdldFNpemUoKSA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gJGZuKCRyZXF1ZXN0LCAkb3B0aW9ucyk7CiAgICAgICAgfQoKICAgICAgICAkbW9kaWZ5ID0gW107CgogICAgICAgIC8vIEFkZCBhIGRlZmF1bHQgY29udGVudC10eXBlIGlmIHBvc3NpYmxlLgogICAgICAgIGlmICghJHJlcXVlc3QtPmhhc0hlYWRlcignQ29udGVudC1UeXBlJykpIHsKICAgICAgICAgICAgaWYgKCR1cmkgPSAkcmVxdWVzdC0+Z2V0Qm9keSgpLT5nZXRNZXRhZGF0YSgndXJpJykpIHsKICAgICAgICAgICAgICAgIGlmIChpc19zdHJpbmcoJHVyaSkgJiYgJHR5cGUgPSBQc3I3XE1pbWVUeXBlOjpmcm9tRmlsZW5hbWUoJHVyaSkpIHsKICAgICAgICAgICAgICAgICAgICAkbW9kaWZ5WydzZXRfaGVhZGVycyddWydDb250ZW50LVR5cGUnXSA9ICR0eXBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBBZGQgYSBkZWZhdWx0IGNvbnRlbnQtbGVuZ3RoIG9yIHRyYW5zZmVyLWVuY29kaW5nIGhlYWRlci4KICAgICAgICBpZiAoISRyZXF1ZXN0LT5oYXNIZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJykKICAgICAgICAgICAgJiYgISRyZXF1ZXN0LT5oYXNIZWFkZXIoJ1RyYW5zZmVyLUVuY29kaW5nJykKICAgICAgICApIHsKICAgICAgICAgICAgJHNpemUgPSAkcmVxdWVzdC0+Z2V0Qm9keSgpLT5nZXRTaXplKCk7CiAgICAgICAgICAgIGlmICgkc2l6ZSAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgJG1vZGlmeVsnc2V0X2hlYWRlcnMnXVsnQ29udGVudC1MZW5ndGgnXSA9ICRzaXplOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJG1vZGlmeVsnc2V0X2hlYWRlcnMnXVsnVHJhbnNmZXItRW5jb2RpbmcnXSA9ICdjaHVua2VkJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gQWRkIHRoZSBleHBlY3QgaGVhZGVyIGlmIG5lZWRlZC4KICAgICAgICAkdGhpcy0+YWRkRXhwZWN0SGVhZGVyKCRyZXF1ZXN0LCAkb3B0aW9ucywgJG1vZGlmeSk7CgogICAgICAgIHJldHVybiAkZm4oUHNyN1xVdGlsczo6bW9kaWZ5UmVxdWVzdCgkcmVxdWVzdCwgJG1vZGlmeSksICRvcHRpb25zKTsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZCBleHBlY3QgaGVhZGVyCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRXhwZWN0SGVhZGVyKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zLCBhcnJheSAmJG1vZGlmeSk6IHZvaWQKICAgIHsKICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIEV4cGVjdCBoZWFkZXIgc2hvdWxkIGJlIHVzZWQKICAgICAgICBpZiAoJHJlcXVlc3QtPmhhc0hlYWRlcignRXhwZWN0JykpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJGV4cGVjdCA9ICRvcHRpb25zWydleHBlY3QnXSA/PyBudWxsOwoKICAgICAgICAvLyBSZXR1cm4gaWYgZGlzYWJsZWQgb3IgdXNpbmcgSFRUUC8xLjAKICAgICAgICBpZiAoJGV4cGVjdCA9PT0gZmFsc2UgfHwgJHJlcXVlc3QtPmdldFByb3RvY29sVmVyc2lvbigpID09PSAnMS4wJykgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvLyBUaGUgZXhwZWN0IGhlYWRlciBpcyB1bmNvbmRpdGlvbmFsbHkgZW5hYmxlZAogICAgICAgIGlmICgkZXhwZWN0ID09PSB0cnVlKSB7CiAgICAgICAgICAgICRtb2RpZnlbJ3NldF9oZWFkZXJzJ11bJ0V4cGVjdCddID0gJzEwMC1Db250aW51ZSc7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvLyBCeSBkZWZhdWx0LCBzZW5kIHRoZSBleHBlY3QgaGVhZGVyIHdoZW4gdGhlIHBheWxvYWQgaXMgPiAxbWIKICAgICAgICBpZiAoJGV4cGVjdCA9PT0gbnVsbCkgewogICAgICAgICAgICAkZXhwZWN0ID0gMTA0ODU3NjsKICAgICAgICB9CgogICAgICAgIC8vIEFsd2F5cyBhZGQgaWYgdGhlIGJvZHkgY2Fubm90IGJlIHJld291bmQsIHRoZSBzaXplIGNhbm5vdCBiZQogICAgICAgIC8vIGRldGVybWluZWQsIG9yIHRoZSBzaXplIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY3V0b2ZmIHRocmVzaG9sZAogICAgICAgICRib2R5ID0gJHJlcXVlc3QtPmdldEJvZHkoKTsKICAgICAgICAkc2l6ZSA9ICRib2R5LT5nZXRTaXplKCk7CgogICAgICAgIGlmICgkc2l6ZSA9PT0gbnVsbCB8fCAkc2l6ZSA+PSAoaW50KSAkZXhwZWN0IHx8ICEkYm9keS0+aXNTZWVrYWJsZSgpKSB7CiAgICAgICAgICAgICRtb2RpZnlbJ3NldF9oZWFkZXJzJ11bJ0V4cGVjdCddID0gJzEwMC1Db250aW51ZSc7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIEd1enpsZUh0dHBcRXhjZXB0aW9uXEJhZFJlc3BvbnNlRXhjZXB0aW9uOwp1c2UgR3V6emxlSHR0cFxFeGNlcHRpb25cVG9vTWFueVJlZGlyZWN0c0V4Y2VwdGlvbjsKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlOwoKLyoqCiAqIFJlcXVlc3QgcmVkaXJlY3QgbWlkZGxld2FyZS4KICoKICogQXBwbHkgdGhpcyBtaWRkbGV3YXJlIGxpa2Ugb3RoZXIgbWlkZGxld2FyZSB1c2luZwogKiB7QHNlZSBcR3V6emxlSHR0cFxNaWRkbGV3YXJlOjpyZWRpcmVjdCgpfS4KICoKICogQGZpbmFsCiAqLwpjbGFzcyBSZWRpcmVjdE1pZGRsZXdhcmUKewogICAgcHVibGljIGNvbnN0IEhJU1RPUllfSEVBREVSID0gJ1gtR3V6emxlLVJlZGlyZWN0LUhpc3RvcnknOwoKICAgIHB1YmxpYyBjb25zdCBTVEFUVVNfSElTVE9SWV9IRUFERVIgPSAnWC1HdXp6bGUtUmVkaXJlY3QtU3RhdHVzLUhpc3RvcnknOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwdWJsaWMgc3RhdGljICRkZWZhdWx0U2V0dGluZ3MgPSBbCiAgICAgICAgJ21heCcgPT4gNSwKICAgICAgICAncHJvdG9jb2xzJyA9PiBbJ2h0dHAnLCAnaHR0cHMnXSwKICAgICAgICAnc3RyaWN0JyA9PiBmYWxzZSwKICAgICAgICAncmVmZXJlcicgPT4gZmFsc2UsCiAgICAgICAgJ3RyYWNrX3JlZGlyZWN0cycgPT4gZmFsc2UsCiAgICBdOwoKICAgIC8qKgogICAgICogQHZhciBjYWxsYWJsZShSZXF1ZXN0SW50ZXJmYWNlLCBhcnJheSk6IFByb21pc2VJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkbmV4dEhhbmRsZXI7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUoUmVxdWVzdEludGVyZmFjZSwgYXJyYXkpOiBQcm9taXNlSW50ZXJmYWNlICRuZXh0SGFuZGxlciBOZXh0IGhhbmRsZXIgdG8gaW52b2tlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoY2FsbGFibGUgJG5leHRIYW5kbGVyKQogICAgewogICAgICAgICR0aGlzLT5uZXh0SGFuZGxlciA9ICRuZXh0SGFuZGxlcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19pbnZva2UoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpOiBQcm9taXNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJGZuID0gJHRoaXMtPm5leHRIYW5kbGVyOwoKICAgICAgICBpZiAoZW1wdHkoJG9wdGlvbnNbJ2FsbG93X3JlZGlyZWN0cyddKSkgewogICAgICAgICAgICByZXR1cm4gJGZuKCRyZXF1ZXN0LCAkb3B0aW9ucyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJG9wdGlvbnNbJ2FsbG93X3JlZGlyZWN0cyddID09PSB0cnVlKSB7CiAgICAgICAgICAgICRvcHRpb25zWydhbGxvd19yZWRpcmVjdHMnXSA9IHNlbGY6OiRkZWZhdWx0U2V0dGluZ3M7CiAgICAgICAgfSBlbHNlaWYgKCFcaXNfYXJyYXkoJG9wdGlvbnNbJ2FsbG93X3JlZGlyZWN0cyddKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignYWxsb3dfcmVkaXJlY3RzIG11c3QgYmUgdHJ1ZSwgZmFsc2UsIG9yIGFycmF5Jyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIGRlZmF1bHQgc2V0dGluZ3Mgd2l0aCB0aGUgcHJvdmlkZWQgc2V0dGluZ3MKICAgICAgICAgICAgJG9wdGlvbnNbJ2FsbG93X3JlZGlyZWN0cyddICs9IHNlbGY6OiRkZWZhdWx0U2V0dGluZ3M7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW1wdHkoJG9wdGlvbnNbJ2FsbG93X3JlZGlyZWN0cyddWydtYXgnXSkpIHsKICAgICAgICAgICAgcmV0dXJuICRmbigkcmVxdWVzdCwgJG9wdGlvbnMpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRmbigkcmVxdWVzdCwgJG9wdGlvbnMpCiAgICAgICAgICAgIC0+dGhlbihmdW5jdGlvbiAoUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlKSB1c2UgKCRyZXF1ZXN0LCAkb3B0aW9ucykgewogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5jaGVja1JlZGlyZWN0KCRyZXF1ZXN0LCAkb3B0aW9ucywgJHJlc3BvbnNlKTsKICAgICAgICAgICAgfSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIFJlc3BvbnNlSW50ZXJmYWNlfFByb21pc2VJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNoZWNrUmVkaXJlY3QoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMsIFJlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZSkKICAgIHsKICAgICAgICBpZiAoXHN0cnBvcygoc3RyaW5nKSAkcmVzcG9uc2UtPmdldFN0YXR1c0NvZGUoKSwgJzMnKSAhPT0gMAogICAgICAgICAgICB8fCAhJHJlc3BvbnNlLT5oYXNIZWFkZXIoJ0xvY2F0aW9uJykKICAgICAgICApIHsKICAgICAgICAgICAgcmV0dXJuICRyZXNwb25zZTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5ndWFyZE1heCgkcmVxdWVzdCwgJHJlc3BvbnNlLCAkb3B0aW9ucyk7CiAgICAgICAgJG5leHRSZXF1ZXN0ID0gJHRoaXMtPm1vZGlmeVJlcXVlc3QoJHJlcXVlc3QsICRvcHRpb25zLCAkcmVzcG9uc2UpOwoKICAgICAgICAvLyBJZiBhdXRob3JpemF0aW9uIGlzIGhhbmRsZWQgYnkgY3VybCwgdW5zZXQgaXQgaWYgVVJJIGlzIGNyb3NzLW9yaWdpbi4KICAgICAgICBpZiAoUHNyN1xVcmlDb21wYXJhdG9yOjppc0Nyb3NzT3JpZ2luKCRyZXF1ZXN0LT5nZXRVcmkoKSwgJG5leHRSZXF1ZXN0LT5nZXRVcmkoKSkgJiYgZGVmaW5lZCgnXENVUkxPUFRfSFRUUEFVVEgnKSkgewogICAgICAgICAgICB1bnNldCgKICAgICAgICAgICAgICAgICRvcHRpb25zWydjdXJsJ11bXENVUkxPUFRfSFRUUEFVVEhdLAogICAgICAgICAgICAgICAgJG9wdGlvbnNbJ2N1cmwnXVtcQ1VSTE9QVF9VU0VSUFdEXQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydhbGxvd19yZWRpcmVjdHMnXVsnb25fcmVkaXJlY3QnXSkpIHsKICAgICAgICAgICAgKCRvcHRpb25zWydhbGxvd19yZWRpcmVjdHMnXVsnb25fcmVkaXJlY3QnXSkoCiAgICAgICAgICAgICAgICAkcmVxdWVzdCwKICAgICAgICAgICAgICAgICRyZXNwb25zZSwKICAgICAgICAgICAgICAgICRuZXh0UmVxdWVzdC0+Z2V0VXJpKCkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRwcm9taXNlID0gJHRoaXMoJG5leHRSZXF1ZXN0LCAkb3B0aW9ucyk7CgogICAgICAgIC8vIEFkZCBoZWFkZXJzIHRvIGJlIGFibGUgdG8gdHJhY2sgaGlzdG9yeSBvZiByZWRpcmVjdHMuCiAgICAgICAgaWYgKCFlbXB0eSgkb3B0aW9uc1snYWxsb3dfcmVkaXJlY3RzJ11bJ3RyYWNrX3JlZGlyZWN0cyddKSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPndpdGhUcmFja2luZygKICAgICAgICAgICAgICAgICRwcm9taXNlLAogICAgICAgICAgICAgICAgKHN0cmluZykgJG5leHRSZXF1ZXN0LT5nZXRVcmkoKSwKICAgICAgICAgICAgICAgICRyZXNwb25zZS0+Z2V0U3RhdHVzQ29kZSgpCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHByb21pc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBFbmFibGUgdHJhY2tpbmcgb24gcHJvbWlzZS4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiB3aXRoVHJhY2tpbmcoUHJvbWlzZUludGVyZmFjZSAkcHJvbWlzZSwgc3RyaW5nICR1cmksIGludCAkc3RhdHVzQ29kZSk6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHByb21pc2UtPnRoZW4oCiAgICAgICAgICAgIHN0YXRpYyBmdW5jdGlvbiAoUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlKSB1c2UgKCR1cmksICRzdGF0dXNDb2RlKSB7CiAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgYXJlIHB1c2hpbmcgdG8gdGhlIGZyb250IG9mIHRoZSBsaXN0IGFzIHRoaXMKICAgICAgICAgICAgICAgIC8vIHdvdWxkIGJlIGFuIGVhcmxpZXIgcmVzcG9uc2UgdGhhbiB3aGF0IGlzIGN1cnJlbnRseSBwcmVzZW50CiAgICAgICAgICAgICAgICAvLyBpbiB0aGUgaGlzdG9yeSBoZWFkZXIuCiAgICAgICAgICAgICAgICAkaGlzdG9yeUhlYWRlciA9ICRyZXNwb25zZS0+Z2V0SGVhZGVyKHNlbGY6OkhJU1RPUllfSEVBREVSKTsKICAgICAgICAgICAgICAgICRzdGF0dXNIZWFkZXIgPSAkcmVzcG9uc2UtPmdldEhlYWRlcihzZWxmOjpTVEFUVVNfSElTVE9SWV9IRUFERVIpOwogICAgICAgICAgICAgICAgXGFycmF5X3Vuc2hpZnQoJGhpc3RvcnlIZWFkZXIsICR1cmkpOwogICAgICAgICAgICAgICAgXGFycmF5X3Vuc2hpZnQoJHN0YXR1c0hlYWRlciwgKHN0cmluZykgJHN0YXR1c0NvZGUpOwoKICAgICAgICAgICAgICAgIHJldHVybiAkcmVzcG9uc2UtPndpdGhIZWFkZXIoc2VsZjo6SElTVE9SWV9IRUFERVIsICRoaXN0b3J5SGVhZGVyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+d2l0aEhlYWRlcihzZWxmOjpTVEFUVVNfSElTVE9SWV9IRUFERVIsICRzdGF0dXNIZWFkZXIpOwogICAgICAgICAgICB9CiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrIGZvciB0b28gbWFueSByZWRpcmVjdHMuCiAgICAgKgogICAgICogQHRocm93cyBUb29NYW55UmVkaXJlY3RzRXhjZXB0aW9uIFRvbyBtYW55IHJlZGlyZWN0cy4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBndWFyZE1heChSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UsIGFycmF5ICYkb3B0aW9ucyk6IHZvaWQKICAgIHsKICAgICAgICAkY3VycmVudCA9ICRvcHRpb25zWydfX3JlZGlyZWN0X2NvdW50J10KICAgICAgICAgICAgPz8gMDsKICAgICAgICAkb3B0aW9uc1snX19yZWRpcmVjdF9jb3VudCddID0gJGN1cnJlbnQgKyAxOwogICAgICAgICRtYXggPSAkb3B0aW9uc1snYWxsb3dfcmVkaXJlY3RzJ11bJ21heCddOwoKICAgICAgICBpZiAoJG9wdGlvbnNbJ19fcmVkaXJlY3RfY291bnQnXSA+ICRtYXgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFRvb01hbnlSZWRpcmVjdHNFeGNlcHRpb24oIldpbGwgbm90IGZvbGxvdyBtb3JlIHRoYW4geyRtYXh9IHJlZGlyZWN0cyIsICRyZXF1ZXN0LCAkcmVzcG9uc2UpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbW9kaWZ5UmVxdWVzdChSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAkb3B0aW9ucywgUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlKTogUmVxdWVzdEludGVyZmFjZQogICAgewogICAgICAgIC8vIFJlcXVlc3QgbW9kaWZpY2F0aW9ucyB0byBhcHBseS4KICAgICAgICAkbW9kaWZ5ID0gW107CiAgICAgICAgJHByb3RvY29scyA9ICRvcHRpb25zWydhbGxvd19yZWRpcmVjdHMnXVsncHJvdG9jb2xzJ107CgogICAgICAgIC8vIFVzZSBhIEdFVCByZXF1ZXN0IGlmIHRoaXMgaXMgYW4gZW50aXR5IGVuY2xvc2luZyByZXF1ZXN0IGFuZCB3ZSBhcmUKICAgICAgICAvLyBub3QgZm9yY2luZyBSRkMgY29tcGxpYW5jZSwgYnV0IHJhdGhlciBlbXVsYXRpbmcgd2hhdCBhbGwgYnJvd3NlcnMKICAgICAgICAvLyB3b3VsZCBkby4KICAgICAgICAkc3RhdHVzQ29kZSA9ICRyZXNwb25zZS0+Z2V0U3RhdHVzQ29kZSgpOwogICAgICAgIGlmICgkc3RhdHVzQ29kZSA9PSAzMDMKICAgICAgICAgICAgfHwgKCRzdGF0dXNDb2RlIDw9IDMwMiAmJiAhJG9wdGlvbnNbJ2FsbG93X3JlZGlyZWN0cyddWydzdHJpY3QnXSkKICAgICAgICApIHsKICAgICAgICAgICAgJHNhZmVNZXRob2RzID0gWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJ107CiAgICAgICAgICAgICRyZXF1ZXN0TWV0aG9kID0gJHJlcXVlc3QtPmdldE1ldGhvZCgpOwoKICAgICAgICAgICAgJG1vZGlmeVsnbWV0aG9kJ10gPSBpbl9hcnJheSgkcmVxdWVzdE1ldGhvZCwgJHNhZmVNZXRob2RzKSA/ICRyZXF1ZXN0TWV0aG9kIDogJ0dFVCc7CiAgICAgICAgICAgICRtb2RpZnlbJ2JvZHknXSA9ICcnOwogICAgICAgIH0KCiAgICAgICAgJHVyaSA9IHNlbGY6OnJlZGlyZWN0VXJpKCRyZXF1ZXN0LCAkcmVzcG9uc2UsICRwcm90b2NvbHMpOwogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snaWRuX2NvbnZlcnNpb24nXSkgJiYgKCRvcHRpb25zWydpZG5fY29udmVyc2lvbiddICE9PSBmYWxzZSkpIHsKICAgICAgICAgICAgJGlkbk9wdGlvbnMgPSAoJG9wdGlvbnNbJ2lkbl9jb252ZXJzaW9uJ10gPT09IHRydWUpID8gXElETkFfREVGQVVMVCA6ICRvcHRpb25zWydpZG5fY29udmVyc2lvbiddOwogICAgICAgICAgICAkdXJpID0gVXRpbHM6OmlkblVyaUNvbnZlcnQoJHVyaSwgJGlkbk9wdGlvbnMpOwogICAgICAgIH0KCiAgICAgICAgJG1vZGlmeVsndXJpJ10gPSAkdXJpOwogICAgICAgIFBzcjdcTWVzc2FnZTo6cmV3aW5kQm9keSgkcmVxdWVzdCk7CgogICAgICAgIC8vIEFkZCB0aGUgUmVmZXJlciBoZWFkZXIgaWYgaXQgaXMgdG9sZCB0byBkbyBzbyBhbmQgb25seQogICAgICAgIC8vIGFkZCB0aGUgaGVhZGVyIGlmIHdlIGFyZSBub3QgcmVkaXJlY3RpbmcgZnJvbSBodHRwcyB0byBodHRwLgogICAgICAgIGlmICgkb3B0aW9uc1snYWxsb3dfcmVkaXJlY3RzJ11bJ3JlZmVyZXInXQogICAgICAgICAgICAmJiAkbW9kaWZ5Wyd1cmknXS0+Z2V0U2NoZW1lKCkgPT09ICRyZXF1ZXN0LT5nZXRVcmkoKS0+Z2V0U2NoZW1lKCkKICAgICAgICApIHsKICAgICAgICAgICAgJHVyaSA9ICRyZXF1ZXN0LT5nZXRVcmkoKS0+d2l0aFVzZXJJbmZvKCcnKTsKICAgICAgICAgICAgJG1vZGlmeVsnc2V0X2hlYWRlcnMnXVsnUmVmZXJlciddID0gKHN0cmluZykgJHVyaTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkbW9kaWZ5WydyZW1vdmVfaGVhZGVycyddW10gPSAnUmVmZXJlcic7CiAgICAgICAgfQoKICAgICAgICAvLyBSZW1vdmUgQXV0aG9yaXphdGlvbiBhbmQgQ29va2llIGhlYWRlcnMgaWYgVVJJIGlzIGNyb3NzLW9yaWdpbi4KICAgICAgICBpZiAoUHNyN1xVcmlDb21wYXJhdG9yOjppc0Nyb3NzT3JpZ2luKCRyZXF1ZXN0LT5nZXRVcmkoKSwgJG1vZGlmeVsndXJpJ10pKSB7CiAgICAgICAgICAgICRtb2RpZnlbJ3JlbW92ZV9oZWFkZXJzJ11bXSA9ICdBdXRob3JpemF0aW9uJzsKICAgICAgICAgICAgJG1vZGlmeVsncmVtb3ZlX2hlYWRlcnMnXVtdID0gJ0Nvb2tpZSc7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gUHNyN1xVdGlsczo6bW9kaWZ5UmVxdWVzdCgkcmVxdWVzdCwgJG1vZGlmeSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGFwcHJvcHJpYXRlIFVSTCBvbiB0aGUgcmVxdWVzdCBiYXNlZCBvbiB0aGUgbG9jYXRpb24gaGVhZGVyLgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiByZWRpcmVjdFVyaSgKICAgICAgICBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LAogICAgICAgIFJlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZSwKICAgICAgICBhcnJheSAkcHJvdG9jb2xzCiAgICApOiBVcmlJbnRlcmZhY2UgewogICAgICAgICRsb2NhdGlvbiA9IFBzcjdcVXJpUmVzb2x2ZXI6OnJlc29sdmUoCiAgICAgICAgICAgICRyZXF1ZXN0LT5nZXRVcmkoKSwKICAgICAgICAgICAgbmV3IFBzcjdcVXJpKCRyZXNwb25zZS0+Z2V0SGVhZGVyTGluZSgnTG9jYXRpb24nKSkKICAgICAgICApOwoKICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgcmVkaXJlY3QgVVJJIGlzIGFsbG93ZWQgYmFzZWQgb24gdGhlIHByb3RvY29scy4KICAgICAgICBpZiAoIVxpbl9hcnJheSgkbG9jYXRpb24tPmdldFNjaGVtZSgpLCAkcHJvdG9jb2xzKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgQmFkUmVzcG9uc2VFeGNlcHRpb24oXHNwcmludGYoJ1JlZGlyZWN0IFVSSSwgJXMsIGRvZXMgbm90IHVzZSBvbmUgb2YgdGhlIGFsbG93ZWQgcmVkaXJlY3QgcHJvdG9jb2xzOiAlcycsICRsb2NhdGlvbiwgXGltcGxvZGUoJywgJywgJHByb3RvY29scykpLCAkcmVxdWVzdCwgJHJlc3BvbnNlKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbG9jYXRpb247CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/RequestOptions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKLyoqCiAqIFRoaXMgY2xhc3MgY29udGFpbnMgYSBsaXN0IG9mIGJ1aWx0LWluIEd1enpsZSByZXF1ZXN0IG9wdGlvbnMuCiAqCiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmd1enpsZXBocC5vcmcvZW4vbGF0ZXN0L3JlcXVlc3Qtb3B0aW9ucy5odG1sCiAqLwpmaW5hbCBjbGFzcyBSZXF1ZXN0T3B0aW9ucwp7CiAgICAvKioKICAgICAqIGFsbG93X3JlZGlyZWN0czogKGJvb2x8YXJyYXkpIENvbnRyb2xzIHJlZGlyZWN0IGJlaGF2aW9yLiBQYXNzIGZhbHNlCiAgICAgKiB0byBkaXNhYmxlIHJlZGlyZWN0cywgcGFzcyB0cnVlIHRvIGVuYWJsZSByZWRpcmVjdHMsIHBhc3MgYW4KICAgICAqIGFzc29jaWF0aXZlIHRvIHByb3ZpZGUgY3VzdG9tIHJlZGlyZWN0IHNldHRpbmdzLiBEZWZhdWx0cyB0byAiZmFsc2UiLgogICAgICogVGhpcyBvcHRpb24gb25seSB3b3JrcyBpZiB5b3VyIGhhbmRsZXIgaGFzIHRoZSBSZWRpcmVjdE1pZGRsZXdhcmUuIFdoZW4KICAgICAqIHBhc3NpbmcgYW4gYXNzb2NpYXRpdmUgYXJyYXksIHlvdSBjYW4gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGtleSB2YWx1ZQogICAgICogcGFpcnM6CiAgICAgKgogICAgICogLSBtYXg6IChpbnQsIGRlZmF1bHQ9NSkgbWF4aW11bSBudW1iZXIgb2YgYWxsb3dlZCByZWRpcmVjdHMuCiAgICAgKiAtIHN0cmljdDogKGJvb2wsIGRlZmF1bHQ9ZmFsc2UpIFNldCB0byB0cnVlIHRvIHVzZSBzdHJpY3QgcmVkaXJlY3RzCiAgICAgKiAgIG1lYW5pbmcgcmVkaXJlY3QgUE9TVCByZXF1ZXN0cyB3aXRoIFBPU1QgcmVxdWVzdHMgdnMuIGRvaW5nIHdoYXQgbW9zdAogICAgICogICBicm93c2VycyBkbyB3aGljaCBpcyByZWRpcmVjdCBQT1NUIHJlcXVlc3RzIHdpdGggR0VUIHJlcXVlc3RzCiAgICAgKiAtIHJlZmVyZXI6IChib29sLCBkZWZhdWx0PWZhbHNlKSBTZXQgdG8gdHJ1ZSB0byBlbmFibGUgdGhlIFJlZmVyZXIKICAgICAqICAgaGVhZGVyLgogICAgICogLSBwcm90b2NvbHM6IChhcnJheSwgZGVmYXVsdD1bJ2h0dHAnLCAnaHR0cHMnXSkgQWxsb3dlZCByZWRpcmVjdAogICAgICogICBwcm90b2NvbHMuCiAgICAgKiAtIG9uX3JlZGlyZWN0OiAoY2FsbGFibGUpIFBIUCBjYWxsYWJsZSB0aGF0IGlzIGludm9rZWQgd2hlbiBhIHJlZGlyZWN0CiAgICAgKiAgIGlzIGVuY291bnRlcmVkLiBUaGUgY2FsbGFibGUgaXMgaW52b2tlZCB3aXRoIHRoZSByZXF1ZXN0LCB0aGUgcmVkaXJlY3QKICAgICAqICAgcmVzcG9uc2UgdGhhdCB3YXMgcmVjZWl2ZWQsIGFuZCB0aGUgZWZmZWN0aXZlIFVSSS4gQW55IHJldHVybiB2YWx1ZQogICAgICogICBmcm9tIHRoZSBvbl9yZWRpcmVjdCBmdW5jdGlvbiBpcyBpZ25vcmVkLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQUxMT1dfUkVESVJFQ1RTID0gJ2FsbG93X3JlZGlyZWN0cyc7CgogICAgLyoqCiAgICAgKiBhdXRoOiAoYXJyYXkpIFBhc3MgYW4gYXJyYXkgb2YgSFRUUCBhdXRoZW50aWNhdGlvbiBwYXJhbWV0ZXJzIHRvIHVzZQogICAgICogd2l0aCB0aGUgcmVxdWVzdC4gVGhlIGFycmF5IG11c3QgY29udGFpbiB0aGUgdXNlcm5hbWUgaW4gaW5kZXggWzBdLAogICAgICogdGhlIHBhc3N3b3JkIGluIGluZGV4IFsxXSwgYW5kIHlvdSBjYW4gb3B0aW9uYWxseSBwcm92aWRlIGEgYnVpbHQtaW4KICAgICAqIGF1dGhlbnRpY2F0aW9uIHR5cGUgaW4gaW5kZXggWzJdLiBQYXNzIG51bGwgdG8gZGlzYWJsZSBhdXRoZW50aWNhdGlvbgogICAgICogZm9yIGEgcmVxdWVzdC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEFVVEggPSAnYXV0aCc7CgogICAgLyoqCiAgICAgKiBib2R5OiAocmVzb3VyY2V8c3RyaW5nfG51bGx8aW50fGZsb2F0fFN0cmVhbUludGVyZmFjZXxjYWxsYWJsZXxcSXRlcmF0b3IpCiAgICAgKiBCb2R5IHRvIHNlbmQgaW4gdGhlIHJlcXVlc3QuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBCT0RZID0gJ2JvZHknOwoKICAgIC8qKgogICAgICogY2VydDogKHN0cmluZ3xhcnJheSkgU2V0IHRvIGEgc3RyaW5nIHRvIHNwZWNpZnkgdGhlIHBhdGggdG8gYSBmaWxlCiAgICAgKiBjb250YWluaW5nIGEgUEVNIGZvcm1hdHRlZCBTU0wgY2xpZW50IHNpZGUgY2VydGlmaWNhdGUuIElmIGEgcGFzc3dvcmQKICAgICAqIGlzIHJlcXVpcmVkLCB0aGVuIHNldCBjZXJ0IHRvIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gdGhlIFBFTQogICAgICogZmlsZSBpbiB0aGUgZmlyc3QgYXJyYXkgZWxlbWVudCBmb2xsb3dlZCBieSB0aGUgY2VydGlmaWNhdGUgcGFzc3dvcmQKICAgICAqIGluIHRoZSBzZWNvbmQgYXJyYXkgZWxlbWVudC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IENFUlQgPSAnY2VydCc7CgogICAgLyoqCiAgICAgKiBjb29raWVzOiAoYm9vbHxHdXp6bGVIdHRwXENvb2tpZVxDb29raWVKYXJJbnRlcmZhY2UsIGRlZmF1bHQ9ZmFsc2UpCiAgICAgKiBTcGVjaWZpZXMgd2hldGhlciBvciBub3QgY29va2llcyBhcmUgdXNlZCBpbiBhIHJlcXVlc3Qgb3Igd2hhdCBjb29raWUKICAgICAqIGphciB0byB1c2Ugb3Igd2hhdCBjb29raWVzIHRvIHNlbmQuIFRoaXMgb3B0aW9uIG9ubHkgd29ya3MgaWYgeW91cgogICAgICogaGFuZGxlciBoYXMgdGhlIGBjb29raWVgIG1pZGRsZXdhcmUuIFZhbGlkIHZhbHVlcyBhcmUgYGZhbHNlYCBhbmQKICAgICAqIGFuIGluc3RhbmNlIG9mIHtAc2VlIENvb2tpZVxDb29raWVKYXJJbnRlcmZhY2V9LgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQ09PS0lFUyA9ICdjb29raWVzJzsKCiAgICAvKioKICAgICAqIGNvbm5lY3RfdGltZW91dDogKGZsb2F0LCBkZWZhdWx0PTApIEZsb2F0IGRlc2NyaWJpbmcgdGhlIG51bWJlciBvZgogICAgICogc2Vjb25kcyB0byB3YWl0IHdoaWxlIHRyeWluZyB0byBjb25uZWN0IHRvIGEgc2VydmVyLiBVc2UgMCB0byB3YWl0CiAgICAgKiAzMDAgc2Vjb25kcyAodGhlIGRlZmF1bHQgYmVoYXZpb3IpLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQ09OTkVDVF9USU1FT1VUID0gJ2Nvbm5lY3RfdGltZW91dCc7CgogICAgLyoqCiAgICAgKiBjcnlwdG9fbWV0aG9kOiAoaW50KSBBIHZhbHVlIGRlc2NyaWJpbmcgdGhlIG1pbmltdW0gVExTIHByb3RvY29sCiAgICAgKiB2ZXJzaW9uIHRvIHVzZS4KICAgICAqCiAgICAgKiBUaGlzIHNldHRpbmcgbXVzdCBiZSBzZXQgdG8gb25lIG9mIHRoZQogICAgICogYGBTVFJFQU1fQ1JZUFRPX01FVEhPRF9UTFMqX0NMSUVOVGBgIGNvbnN0YW50cy4gUEhQIDcuNCBvciBoaWdoZXIgaXMKICAgICAqIHJlcXVpcmVkIGluIG9yZGVyIHRvIHVzZSBUTFMgMS4zLCBhbmQgY1VSTCA3LjM0LjAgb3IgaGlnaGVyIGlzIHJlcXVpcmVkCiAgICAgKiBpbiBvcmRlciB0byBzcGVjaWZ5IGEgY3J5cHRvIG1ldGhvZCwgd2l0aCBjVVJMIDcuNTIuMCBvciBoaWdoZXIgYmVpbmcKICAgICAqIHJlcXVpcmVkIHRvIHVzZSBUTFMgMS4zLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQ1JZUFRPX01FVEhPRCA9ICdjcnlwdG9fbWV0aG9kJzsKCiAgICAvKioKICAgICAqIGRlYnVnOiAoYm9vbHxyZXNvdXJjZSkgU2V0IHRvIHRydWUgb3Igc2V0IHRvIGEgUEhQIHN0cmVhbSByZXR1cm5lZCBieQogICAgICogZm9wZW4oKSAgZW5hYmxlIGRlYnVnIG91dHB1dCB3aXRoIHRoZSBIVFRQIGhhbmRsZXIgdXNlZCB0byBzZW5kIGEKICAgICAqIHJlcXVlc3QuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBERUJVRyA9ICdkZWJ1Zyc7CgogICAgLyoqCiAgICAgKiBkZWNvZGVfY29udGVudDogKGJvb2wsIGRlZmF1bHQ9dHJ1ZSkgU3BlY2lmeSB3aGV0aGVyIG9yIG5vdAogICAgICogQ29udGVudC1FbmNvZGluZyByZXNwb25zZXMgKGd6aXAsIGRlZmxhdGUsIGV0Yy4pIGFyZSBhdXRvbWF0aWNhbGx5CiAgICAgKiBkZWNvZGVkLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgREVDT0RFX0NPTlRFTlQgPSAnZGVjb2RlX2NvbnRlbnQnOwoKICAgIC8qKgogICAgICogZGVsYXk6IChpbnQpIFRoZSBhbW91bnQgb2YgdGltZSB0byBkZWxheSBiZWZvcmUgc2VuZGluZyBpbiBtaWxsaXNlY29uZHMuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBERUxBWSA9ICdkZWxheSc7CgogICAgLyoqCiAgICAgKiBleHBlY3Q6IChib29sfGludGVnZXIpIENvbnRyb2xzIHRoZSBiZWhhdmlvciBvZiB0aGUKICAgICAqICJFeHBlY3Q6IDEwMC1Db250aW51ZSIgaGVhZGVyLgogICAgICoKICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gZW5hYmxlIHRoZSAiRXhwZWN0OiAxMDAtQ29udGludWUiIGhlYWRlciBmb3IgYWxsCiAgICAgKiByZXF1ZXN0cyB0aGF0IHNlbmRzIGEgYm9keS4gU2V0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZSB0aGUKICAgICAqICJFeHBlY3Q6IDEwMC1Db250aW51ZSIgaGVhZGVyIGZvciBhbGwgcmVxdWVzdHMuIFNldCB0byBhIG51bWJlciBzbyB0aGF0CiAgICAgKiB0aGUgc2l6ZSBvZiB0aGUgcGF5bG9hZCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIGluIG9yZGVyIHRvIHNlbmQKICAgICAqIHRoZSBFeHBlY3QgaGVhZGVyLiBTZXR0aW5nIHRvIGEgbnVtYmVyIHdpbGwgc2VuZCB0aGUgRXhwZWN0IGhlYWRlciBmb3IKICAgICAqIGFsbCByZXF1ZXN0cyBpbiB3aGljaCB0aGUgc2l6ZSBvZiB0aGUgcGF5bG9hZCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBvcgogICAgICogd2hlcmUgdGhlIGJvZHkgaXMgbm90IHJld2luZGFibGUuCiAgICAgKgogICAgICogQnkgZGVmYXVsdCwgR3V6emxlIHdpbGwgYWRkIHRoZSAiRXhwZWN0OiAxMDAtQ29udGludWUiIGhlYWRlciB3aGVuIHRoZQogICAgICogc2l6ZSBvZiB0aGUgYm9keSBvZiBhIHJlcXVlc3QgaXMgZ3JlYXRlciB0aGFuIDEgTUIgYW5kIGEgcmVxdWVzdCBpcwogICAgICogdXNpbmcgSFRUUC8xLjEuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBFWFBFQ1QgPSAnZXhwZWN0JzsKCiAgICAvKioKICAgICAqIGZvcm1fcGFyYW1zOiAoYXJyYXkpIEFzc29jaWF0aXZlIGFycmF5IG9mIGZvcm0gZmllbGQgbmFtZXMgdG8gdmFsdWVzCiAgICAgKiB3aGVyZSBlYWNoIHZhbHVlIGlzIGEgc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MuIFNldHMgdGhlIENvbnRlbnQtVHlwZQogICAgICogaGVhZGVyIHRvIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCB3aGVuIG5vIENvbnRlbnQtVHlwZSBoZWFkZXIKICAgICAqIGlzIGFscmVhZHkgcHJlc2VudC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEZPUk1fUEFSQU1TID0gJ2Zvcm1fcGFyYW1zJzsKCiAgICAvKioKICAgICAqIGhlYWRlcnM6IChhcnJheSkgQXNzb2NpYXRpdmUgYXJyYXkgb2YgSFRUUCBoZWFkZXJzLiBFYWNoIHZhbHVlIE1VU1QgYmUKICAgICAqIGEgc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBIRUFERVJTID0gJ2hlYWRlcnMnOwoKICAgIC8qKgogICAgICogaHR0cF9lcnJvcnM6IChib29sLCBkZWZhdWx0PXRydWUpIFNldCB0byBmYWxzZSB0byBkaXNhYmxlIGV4Y2VwdGlvbnMKICAgICAqIHdoZW4gYSBub24tIHN1Y2Nlc3NmdWwgSFRUUCByZXNwb25zZSBpcyByZWNlaXZlZC4gQnkgZGVmYXVsdCwKICAgICAqIGV4Y2VwdGlvbnMgd2lsbCBiZSB0aHJvd24gZm9yIDR4eCBhbmQgNXh4IHJlc3BvbnNlcy4gVGhpcyBvcHRpb24gb25seQogICAgICogd29ya3MgaWYgeW91ciBoYW5kbGVyIGhhcyB0aGUgYGh0dHBFcnJvcnNgIG1pZGRsZXdhcmUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBIVFRQX0VSUk9SUyA9ICdodHRwX2Vycm9ycyc7CgogICAgLyoqCiAgICAgKiBpZG46IChib29sfGludCwgZGVmYXVsdD10cnVlKSBBIGNvbWJpbmF0aW9uIG9mIElETkFfKiBjb25zdGFudHMgZm9yCiAgICAgKiBpZG5fdG9fYXNjaWkoKSBQSFAncyBmdW5jdGlvbiAoc2VlICJvcHRpb25zIiBwYXJhbWV0ZXIpLiBTZXQgdG8gZmFsc2UgdG8KICAgICAqIGRpc2FibGUgSUROIHN1cHBvcnQgY29tcGxldGVseSwgb3IgdG8gdHJ1ZSB0byB1c2UgdGhlIGRlZmF1bHQKICAgICAqIGNvbmZpZ3VyYXRpb24gKElETkFfREVGQVVMVCBjb25zdGFudCkuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBJRE5fQ09OVkVSU0lPTiA9ICdpZG5fY29udmVyc2lvbic7CgogICAgLyoqCiAgICAgKiBqc29uOiAobWl4ZWQpIEFkZHMgSlNPTiBkYXRhIHRvIGEgcmVxdWVzdC4gVGhlIHByb3ZpZGVkIHZhbHVlIGlzIEpTT04KICAgICAqIGVuY29kZWQgYW5kIGEgQ29udGVudC1UeXBlIGhlYWRlciBvZiBhcHBsaWNhdGlvbi9qc29uIHdpbGwgYmUgYWRkZWQgdG8KICAgICAqIHRoZSByZXF1ZXN0IGlmIG5vIENvbnRlbnQtVHlwZSBoZWFkZXIgaXMgYWxyZWFkeSBwcmVzZW50LgogICAgICovCiAgICBwdWJsaWMgY29uc3QgSlNPTiA9ICdqc29uJzsKCiAgICAvKioKICAgICAqIG11bHRpcGFydDogKGFycmF5KSBBcnJheSBvZiBhc3NvY2lhdGl2ZSBhcnJheXMsIGVhY2ggY29udGFpbmluZyBhCiAgICAgKiByZXF1aXJlZCAibmFtZSIga2V5IG1hcHBpbmcgdG8gdGhlIGZvcm0gZmllbGQsIG5hbWUsIGEgcmVxdWlyZWQKICAgICAqICJjb250ZW50cyIga2V5IG1hcHBpbmcgdG8gYSBTdHJlYW1JbnRlcmZhY2V8cmVzb3VyY2V8c3RyaW5nLCBhbgogICAgICogb3B0aW9uYWwgImhlYWRlcnMiIGFzc29jaWF0aXZlIGFycmF5IG9mIGN1c3RvbSBoZWFkZXJzLCBhbmQgYW4KICAgICAqIG9wdGlvbmFsICJmaWxlbmFtZSIga2V5IG1hcHBpbmcgdG8gYSBzdHJpbmcgdG8gc2VuZCBhcyB0aGUgZmlsZW5hbWUgaW4KICAgICAqIHRoZSBwYXJ0LiBJZiBubyAiZmlsZW5hbWUiIGtleSBpcyBwcmVzZW50LCB0aGVuIG5vICJmaWxlbmFtZSIgYXR0cmlidXRlCiAgICAgKiB3aWxsIGJlIGFkZGVkIHRvIHRoZSBwYXJ0LgogICAgICovCiAgICBwdWJsaWMgY29uc3QgTVVMVElQQVJUID0gJ211bHRpcGFydCc7CgogICAgLyoqCiAgICAgKiBvbl9oZWFkZXJzOiAoY2FsbGFibGUpIEEgY2FsbGFibGUgdGhhdCBpcyBpbnZva2VkIHdoZW4gdGhlIEhUVFAgaGVhZGVycwogICAgICogb2YgdGhlIHJlc3BvbnNlIGhhdmUgYmVlbiByZWNlaXZlZCBidXQgdGhlIGJvZHkgaGFzIG5vdCB5ZXQgYmVndW4gdG8KICAgICAqIGRvd25sb2FkLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgT05fSEVBREVSUyA9ICdvbl9oZWFkZXJzJzsKCiAgICAvKioKICAgICAqIG9uX3N0YXRzOiAoY2FsbGFibGUpIGFsbG93cyB5b3UgdG8gZ2V0IGFjY2VzcyB0byB0cmFuc2ZlciBzdGF0aXN0aWNzIG9mCiAgICAgKiBhIHJlcXVlc3QgYW5kIGFjY2VzcyB0aGUgbG93ZXIgbGV2ZWwgdHJhbnNmZXIgZGV0YWlscyBvZiB0aGUgaGFuZGxlcgogICAgICogYXNzb2NpYXRlZCB3aXRoIHlvdXIgY2xpZW50LiBgYG9uX3N0YXRzYGAgaXMgYSBjYWxsYWJsZSB0aGF0IGlzIGludm9rZWQKICAgICAqIHdoZW4gYSBoYW5kbGVyIGhhcyBmaW5pc2hlZCBzZW5kaW5nIGEgcmVxdWVzdC4gVGhlIGNhbGxiYWNrIGlzIGludm9rZWQKICAgICAqIHdpdGggdHJhbnNmZXIgc3RhdGlzdGljcyBhYm91dCB0aGUgcmVxdWVzdCwgdGhlIHJlc3BvbnNlIHJlY2VpdmVkLCBvcgogICAgICogdGhlIGVycm9yIGVuY291bnRlcmVkLiBJbmNsdWRlZCBpbiB0aGUgZGF0YSBpcyB0aGUgdG90YWwgYW1vdW50IG9mIHRpbWUKICAgICAqIHRha2VuIHRvIHNlbmQgdGhlIHJlcXVlc3QuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPTl9TVEFUUyA9ICdvbl9zdGF0cyc7CgogICAgLyoqCiAgICAgKiBwcm9ncmVzczogKGNhbGxhYmxlKSBEZWZpbmVzIGEgZnVuY3Rpb24gdG8gaW52b2tlIHdoZW4gdHJhbnNmZXIKICAgICAqIHByb2dyZXNzIGlzIG1hZGUuIFRoZSBmdW5jdGlvbiBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgcG9zaXRpb25hbAogICAgICogYXJndW1lbnRzOiB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGV4cGVjdGVkIHRvIGJlIGRvd25sb2FkZWQsIHRoZQogICAgICogbnVtYmVyIG9mIGJ5dGVzIGRvd25sb2FkZWQgc28gZmFyLCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGV4cGVjdGVkIHRvIGJlCiAgICAgKiB1cGxvYWRlZCwgdGhlIG51bWJlciBvZiBieXRlcyB1cGxvYWRlZCBzbyBmYXIuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBQUk9HUkVTUyA9ICdwcm9ncmVzcyc7CgogICAgLyoqCiAgICAgKiBwcm94eTogKHN0cmluZ3xhcnJheSkgUGFzcyBhIHN0cmluZyB0byBzcGVjaWZ5IGFuIEhUVFAgcHJveHksIG9yIGFuCiAgICAgKiBhcnJheSB0byBzcGVjaWZ5IGRpZmZlcmVudCBwcm94aWVzIGZvciBkaWZmZXJlbnQgcHJvdG9jb2xzICh3aGVyZSB0aGUKICAgICAqIGtleSBpcyB0aGUgcHJvdG9jb2wgYW5kIHRoZSB2YWx1ZSBpcyBhIHByb3h5IHN0cmluZykuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBQUk9YWSA9ICdwcm94eSc7CgogICAgLyoqCiAgICAgKiBxdWVyeTogKGFycmF5fHN0cmluZykgQXNzb2NpYXRpdmUgYXJyYXkgb2YgcXVlcnkgc3RyaW5nIHZhbHVlcyB0byBhZGQKICAgICAqIHRvIHRoZSByZXF1ZXN0LiBUaGlzIG9wdGlvbiB1c2VzIFBIUCdzIGh0dHBfYnVpbGRfcXVlcnkoKSB0byBjcmVhdGUKICAgICAqIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24uIFBhc3MgYSBzdHJpbmcgdmFsdWUgaWYgeW91IG5lZWQgbW9yZQogICAgICogY29udHJvbCB0aGFuIHdoYXQgdGhpcyBtZXRob2QgcHJvdmlkZXMKICAgICAqLwogICAgcHVibGljIGNvbnN0IFFVRVJZID0gJ3F1ZXJ5JzsKCiAgICAvKioKICAgICAqIHNpbms6IChyZXNvdXJjZXxzdHJpbmd8U3RyZWFtSW50ZXJmYWNlKSBXaGVyZSB0aGUgZGF0YSBvZiB0aGUKICAgICAqIHJlc3BvbnNlIGlzIHdyaXR0ZW4gdG8uIERlZmF1bHRzIHRvIGEgUEhQIHRlbXAgc3RyZWFtLiBQcm92aWRpbmcgYQogICAgICogc3RyaW5nIHdpbGwgd3JpdGUgZGF0YSB0byBhIGZpbGUgYnkgdGhlIGdpdmVuIG5hbWUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTSU5LID0gJ3NpbmsnOwoKICAgIC8qKgogICAgICogc3luY2hyb25vdXM6IChib29sKSBTZXQgdG8gdHJ1ZSB0byBpbmZvcm0gSFRUUCBoYW5kbGVycyB0aGF0IHlvdSBpbnRlbmQKICAgICAqIG9uIHdhaXRpbmcgb24gdGhlIHJlc3BvbnNlLiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIG9wdGltaXphdGlvbnMuIE5vdGUKICAgICAqIHRoYXQgYSBwcm9taXNlIGlzIHN0aWxsIHJldHVybmVkIGlmIHlvdSBhcmUgdXNpbmcgb25lIG9mIHRoZSBhc3luYwogICAgICogY2xpZW50IG1ldGhvZHMuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTWU5DSFJPTk9VUyA9ICdzeW5jaHJvbm91cyc7CgogICAgLyoqCiAgICAgKiBzc2xfa2V5OiAoYXJyYXl8c3RyaW5nKSBTcGVjaWZ5IHRoZSBwYXRoIHRvIGEgZmlsZSBjb250YWluaW5nIGEgcHJpdmF0ZQogICAgICogU1NMIGtleSBpbiBQRU0gZm9ybWF0LiBJZiBhIHBhc3N3b3JkIGlzIHJlcXVpcmVkLCB0aGVuIHNldCB0byBhbiBhcnJheQogICAgICogY29udGFpbmluZyB0aGUgcGF0aCB0byB0aGUgU1NMIGtleSBpbiB0aGUgZmlyc3QgYXJyYXkgZWxlbWVudCBmb2xsb3dlZAogICAgICogYnkgdGhlIHBhc3N3b3JkIHJlcXVpcmVkIGZvciB0aGUgY2VydGlmaWNhdGUgaW4gdGhlIHNlY29uZCBlbGVtZW50LgogICAgICovCiAgICBwdWJsaWMgY29uc3QgU1NMX0tFWSA9ICdzc2xfa2V5JzsKCiAgICAvKioKICAgICAqIHN0cmVhbTogU2V0IHRvIHRydWUgdG8gYXR0ZW1wdCB0byBzdHJlYW0gYSByZXNwb25zZSByYXRoZXIgdGhhbgogICAgICogZG93bmxvYWQgaXQgYWxsIHVwLWZyb250LgogICAgICovCiAgICBwdWJsaWMgY29uc3QgU1RSRUFNID0gJ3N0cmVhbSc7CgogICAgLyoqCiAgICAgKiB2ZXJpZnk6IChib29sfHN0cmluZywgZGVmYXVsdD10cnVlKSBEZXNjcmliZXMgdGhlIFNTTCBjZXJ0aWZpY2F0ZQogICAgICogdmVyaWZpY2F0aW9uIGJlaGF2aW9yIG9mIGEgcmVxdWVzdC4gU2V0IHRvIHRydWUgdG8gZW5hYmxlIFNTTAogICAgICogY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIHVzaW5nIHRoZSBzeXN0ZW0gQ0EgYnVuZGxlIHdoZW4gYXZhaWxhYmxlCiAgICAgKiAodGhlIGRlZmF1bHQpLiBTZXQgdG8gZmFsc2UgdG8gZGlzYWJsZSBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gKHRoaXMKICAgICAqIGlzIGluc2VjdXJlISkuIFNldCB0byBhIHN0cmluZyB0byBwcm92aWRlIHRoZSBwYXRoIHRvIGEgQ0EgYnVuZGxlIG9uCiAgICAgKiBkaXNrIHRvIGVuYWJsZSB2ZXJpZmljYXRpb24gdXNpbmcgYSBjdXN0b20gY2VydGlmaWNhdGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBWRVJJRlkgPSAndmVyaWZ5JzsKCiAgICAvKioKICAgICAqIHRpbWVvdXQ6IChmbG9hdCwgZGVmYXVsdD0wKSBGbG9hdCBkZXNjcmliaW5nIHRoZSB0aW1lb3V0IG9mIHRoZQogICAgICogcmVxdWVzdCBpbiBzZWNvbmRzLiBVc2UgMCB0byB3YWl0IGluZGVmaW5pdGVseSAodGhlIGRlZmF1bHQgYmVoYXZpb3IpLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgVElNRU9VVCA9ICd0aW1lb3V0JzsKCiAgICAvKioKICAgICAqIHJlYWRfdGltZW91dDogKGZsb2F0LCBkZWZhdWx0PWRlZmF1bHRfc29ja2V0X3RpbWVvdXQgaW5pIHNldHRpbmcpIEZsb2F0IGRlc2NyaWJpbmcKICAgICAqIHRoZSBib2R5IHJlYWQgdGltZW91dCwgZm9yIHN0cmVhbSByZXF1ZXN0cy4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFQURfVElNRU9VVCA9ICdyZWFkX3RpbWVvdXQnOwoKICAgIC8qKgogICAgICogdmVyc2lvbjogKGZsb2F0KSBTcGVjaWZpZXMgdGhlIEhUVFAgcHJvdG9jb2wgdmVyc2lvbiB0byBhdHRlbXB0IHRvIHVzZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFZFUlNJT04gPSAndmVyc2lvbic7CgogICAgLyoqCiAgICAgKiBmb3JjZV9pcF9yZXNvbHZlOiAoYm9vbCkgRm9yY2UgY2xpZW50IHRvIHVzZSBvbmx5IGlwdjQgb3IgaXB2NiBwcm90b2NvbAogICAgICovCiAgICBwdWJsaWMgY29uc3QgRk9SQ0VfSVBfUkVTT0xWRSA9ICdmb3JjZV9pcF9yZXNvbHZlJzsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIEd1enpsZUh0dHBcUHJvbWlzZSBhcyBQOwp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2VJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwoKLyoqCiAqIE1pZGRsZXdhcmUgdGhhdCByZXRyaWVzIHJlcXVlc3RzIGJhc2VkIG9uIHRoZSBib29sZWFuIHJlc3VsdCBvZgogKiBpbnZva2luZyB0aGUgcHJvdmlkZWQgImRlY2lkZXIiIGZ1bmN0aW9uLgogKgogKiBAZmluYWwKICovCmNsYXNzIFJldHJ5TWlkZGxld2FyZQp7CiAgICAvKioKICAgICAqIEB2YXIgY2FsbGFibGUoUmVxdWVzdEludGVyZmFjZSwgYXJyYXkpOiBQcm9taXNlSW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJG5leHRIYW5kbGVyOwoKICAgIC8qKgogICAgICogQHZhciBjYWxsYWJsZQogICAgICovCiAgICBwcml2YXRlICRkZWNpZGVyOwoKICAgIC8qKgogICAgICogQHZhciBjYWxsYWJsZShpbnQpCiAgICAgKi8KICAgIHByaXZhdGUgJGRlbGF5OwoKICAgIC8qKgogICAgICogQHBhcmFtIGNhbGxhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGVjaWRlciAgICAgRnVuY3Rpb24gdGhhdCBhY2NlcHRzIHRoZSBudW1iZXIgb2YgcmV0cmllcywKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgcmVxdWVzdCwgW3Jlc3BvbnNlXSwgYW5kIFtleGNlcHRpb25dIGFuZAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJucyB0cnVlIGlmIHRoZSByZXF1ZXN0IGlzIHRvIGJlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyaWVkLgogICAgICogQHBhcmFtIGNhbGxhYmxlKFJlcXVlc3RJbnRlcmZhY2UsIGFycmF5KTogUHJvbWlzZUludGVyZmFjZSAkbmV4dEhhbmRsZXIgTmV4dCBoYW5kbGVyIHRvIGludm9rZS4KICAgICAqIEBwYXJhbSAoY2FsbGFibGUoaW50KTogaW50KXxudWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRlbGF5ICAgICAgIEZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgbnVtYmVyIG9mIHJldHJpZXMKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kcyB0byBkZWxheS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGNhbGxhYmxlICRkZWNpZGVyLCBjYWxsYWJsZSAkbmV4dEhhbmRsZXIsID9jYWxsYWJsZSAkZGVsYXkgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT5kZWNpZGVyID0gJGRlY2lkZXI7CiAgICAgICAgJHRoaXMtPm5leHRIYW5kbGVyID0gJG5leHRIYW5kbGVyOwogICAgICAgICR0aGlzLT5kZWxheSA9ICRkZWxheSA/OiBfX0NMQVNTX18uJzo6ZXhwb25lbnRpYWxEZWxheSc7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZWZhdWx0IGV4cG9uZW50aWFsIGJhY2tvZmYgZGVsYXkgZnVuY3Rpb24uCiAgICAgKgogICAgICogQHJldHVybiBpbnQgbWlsbGlzZWNvbmRzLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGV4cG9uZW50aWFsRGVsYXkoaW50ICRyZXRyaWVzKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIChpbnQpIDIgKiogKCRyZXRyaWVzIC0gMSkgKiAxMDAwOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2ludm9rZShSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAkb3B0aW9ucyk6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoIWlzc2V0KCRvcHRpb25zWydyZXRyaWVzJ10pKSB7CiAgICAgICAgICAgICRvcHRpb25zWydyZXRyaWVzJ10gPSAwOwogICAgICAgIH0KCiAgICAgICAgJGZuID0gJHRoaXMtPm5leHRIYW5kbGVyOwoKICAgICAgICByZXR1cm4gJGZuKCRyZXF1ZXN0LCAkb3B0aW9ucykKICAgICAgICAgICAgLT50aGVuKAogICAgICAgICAgICAgICAgJHRoaXMtPm9uRnVsZmlsbGVkKCRyZXF1ZXN0LCAkb3B0aW9ucyksCiAgICAgICAgICAgICAgICAkdGhpcy0+b25SZWplY3RlZCgkcmVxdWVzdCwgJG9wdGlvbnMpCiAgICAgICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBFeGVjdXRlIGZ1bGZpbGxlZCBjbG9zdXJlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gb25GdWxmaWxsZWQoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpOiBjYWxsYWJsZQogICAgewogICAgICAgIHJldHVybiBmdW5jdGlvbiAoJHZhbHVlKSB1c2UgKCRyZXF1ZXN0LCAkb3B0aW9ucykgewogICAgICAgICAgICBpZiAoISgkdGhpcy0+ZGVjaWRlcikoCiAgICAgICAgICAgICAgICAkb3B0aW9uc1sncmV0cmllcyddLAogICAgICAgICAgICAgICAgJHJlcXVlc3QsCiAgICAgICAgICAgICAgICAkdmFsdWUsCiAgICAgICAgICAgICAgICBudWxsCiAgICAgICAgICAgICkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkdmFsdWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZG9SZXRyeSgkcmVxdWVzdCwgJG9wdGlvbnMsICR2YWx1ZSk7CiAgICAgICAgfTsKICAgIH0KCiAgICAvKioKICAgICAqIEV4ZWN1dGUgcmVqZWN0ZWQgY2xvc3VyZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIG9uUmVqZWN0ZWQoUmVxdWVzdEludGVyZmFjZSAkcmVxLCBhcnJheSAkb3B0aW9ucyk6IGNhbGxhYmxlCiAgICB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgkcmVhc29uKSB1c2UgKCRyZXEsICRvcHRpb25zKSB7CiAgICAgICAgICAgIGlmICghKCR0aGlzLT5kZWNpZGVyKSgKICAgICAgICAgICAgICAgICRvcHRpb25zWydyZXRyaWVzJ10sCiAgICAgICAgICAgICAgICAkcmVxLAogICAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICAgICRyZWFzb24KICAgICAgICAgICAgKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIFBcQ3JlYXRlOjpyZWplY3Rpb25Gb3IoJHJlYXNvbik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZG9SZXRyeSgkcmVxLCAkb3B0aW9ucyk7CiAgICAgICAgfTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGRvUmV0cnkoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMsID9SZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UgPSBudWxsKTogUHJvbWlzZUludGVyZmFjZQogICAgewogICAgICAgICRvcHRpb25zWydkZWxheSddID0gKCR0aGlzLT5kZWxheSkoKyskb3B0aW9uc1sncmV0cmllcyddLCAkcmVzcG9uc2UsICRyZXF1ZXN0KTsKCiAgICAgICAgcmV0dXJuICR0aGlzKCRyZXF1ZXN0LCAkb3B0aW9ucyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/TransferStats.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVzcG9uc2VJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZTsKCi8qKgogKiBSZXByZXNlbnRzIGRhdGEgYXQgdGhlIHBvaW50IGFmdGVyIGl0IHdhcyB0cmFuc2ZlcnJlZCBlaXRoZXIgc3VjY2Vzc2Z1bGx5CiAqIG9yIGFmdGVyIGEgbmV0d29yayBlcnJvci4KICovCmZpbmFsIGNsYXNzIFRyYW5zZmVyU3RhdHMKewogICAgLyoqCiAgICAgKiBAdmFyIFJlcXVlc3RJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkcmVxdWVzdDsKCiAgICAvKioKICAgICAqIEB2YXIgUmVzcG9uc2VJbnRlcmZhY2V8bnVsbAogICAgICovCiAgICBwcml2YXRlICRyZXNwb25zZTsKCiAgICAvKioKICAgICAqIEB2YXIgZmxvYXR8bnVsbAogICAgICovCiAgICBwcml2YXRlICR0cmFuc2ZlclRpbWU7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgJGhhbmRsZXJTdGF0czsKCiAgICAvKioKICAgICAqIEB2YXIgbWl4ZWR8bnVsbAogICAgICovCiAgICBwcml2YXRlICRoYW5kbGVyRXJyb3JEYXRhOwoKICAgIC8qKgogICAgICogQHBhcmFtIFJlcXVlc3RJbnRlcmZhY2UgICAgICAgJHJlcXVlc3QgICAgICAgICAgUmVxdWVzdCB0aGF0IHdhcyBzZW50LgogICAgICogQHBhcmFtIFJlc3BvbnNlSW50ZXJmYWNlfG51bGwgJHJlc3BvbnNlICAgICAgICAgUmVzcG9uc2UgcmVjZWl2ZWQgKGlmIGFueSkKICAgICAqIEBwYXJhbSBmbG9hdHxudWxsICAgICAgICAgICAgICR0cmFuc2ZlclRpbWUgICAgIFRvdGFsIGhhbmRsZXIgdHJhbnNmZXIgdGltZS4KICAgICAqIEBwYXJhbSBtaXhlZCAgICAgICAgICAgICAgICAgICRoYW5kbGVyRXJyb3JEYXRhIEhhbmRsZXIgZXJyb3IgZGF0YS4KICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICAgICAgICRoYW5kbGVyU3RhdHMgICAgIEhhbmRsZXIgc3BlY2lmaWMgc3RhdHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LAogICAgICAgID9SZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UgPSBudWxsLAogICAgICAgID9mbG9hdCAkdHJhbnNmZXJUaW1lID0gbnVsbCwKICAgICAgICAkaGFuZGxlckVycm9yRGF0YSA9IG51bGwsCiAgICAgICAgYXJyYXkgJGhhbmRsZXJTdGF0cyA9IFtdCiAgICApIHsKICAgICAgICAkdGhpcy0+cmVxdWVzdCA9ICRyZXF1ZXN0OwogICAgICAgICR0aGlzLT5yZXNwb25zZSA9ICRyZXNwb25zZTsKICAgICAgICAkdGhpcy0+dHJhbnNmZXJUaW1lID0gJHRyYW5zZmVyVGltZTsKICAgICAgICAkdGhpcy0+aGFuZGxlckVycm9yRGF0YSA9ICRoYW5kbGVyRXJyb3JEYXRhOwogICAgICAgICR0aGlzLT5oYW5kbGVyU3RhdHMgPSAkaGFuZGxlclN0YXRzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZXF1ZXN0KCk6IFJlcXVlc3RJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlcXVlc3Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSByZXNwb25zZSB0aGF0IHdhcyByZWNlaXZlZCAoaWYgYW55KS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlc3BvbnNlKCk6ID9SZXNwb25zZUludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVzcG9uc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgYSByZXNwb25zZSB3YXMgcmVjZWl2ZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNSZXNwb25zZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXNwb25zZSAhPT0gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldHMgaGFuZGxlciBzcGVjaWZpYyBlcnJvciBkYXRhLgogICAgICoKICAgICAqIFRoaXMgbWlnaHQgYmUgYW4gZXhjZXB0aW9uLCBhIGludGVnZXIgcmVwcmVzZW50aW5nIGFuIGVycm9yIGNvZGUsIG9yCiAgICAgKiBhbnl0aGluZyBlbHNlLiBSZWx5aW5nIG9uIHRoaXMgdmFsdWUgYXNzdW1lcyB0aGF0IHlvdSBrbm93IHdoYXQgaGFuZGxlcgogICAgICogeW91IGFyZSB1c2luZy4KICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIYW5kbGVyRXJyb3JEYXRhKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmhhbmRsZXJFcnJvckRhdGE7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGVmZmVjdGl2ZSBVUkkgdGhlIHJlcXVlc3Qgd2FzIHNlbnQgdG8uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFZmZlY3RpdmVVcmkoKTogVXJpSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXF1ZXN0LT5nZXRVcmkoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgZXN0aW1hdGVkIHRpbWUgdGhlIHJlcXVlc3Qgd2FzIGJlaW5nIHRyYW5zZmVycmVkIGJ5IHRoZSBoYW5kbGVyLgogICAgICoKICAgICAqIEByZXR1cm4gZmxvYXR8bnVsbCBUaW1lIGluIHNlY29uZHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUcmFuc2ZlclRpbWUoKTogP2Zsb2F0CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50cmFuc2ZlclRpbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXRzIGFuIGFycmF5IG9mIGFsbCBvZiB0aGUgaGFuZGxlciBzcGVjaWZpYyB0cmFuc2ZlciBkYXRhLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGFuZGxlclN0YXRzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oYW5kbGVyU3RhdHM7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYSBzcGVjaWZpYyBoYW5kbGVyIHN0YXRpc3RpYyBmcm9tIHRoZSBoYW5kbGVyIGJ5IG5hbWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RhdCBIYW5kbGVyIHNwZWNpZmljIHRyYW5zZmVyIHN0YXQgdG8gcmV0cmlldmUuCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZHxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIYW5kbGVyU3RhdChzdHJpbmcgJHN0YXQpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oYW5kbGVyU3RhdHNbJHN0YXRdID8/IG51bGw7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIEd1enpsZUh0dHBcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIEd1enpsZUh0dHBcSGFuZGxlclxDdXJsSGFuZGxlcjsKdXNlIEd1enpsZUh0dHBcSGFuZGxlclxDdXJsTXVsdGlIYW5kbGVyOwp1c2UgR3V6emxlSHR0cFxIYW5kbGVyXFByb3h5Owp1c2UgR3V6emxlSHR0cFxIYW5kbGVyXFN0cmVhbUhhbmRsZXI7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZTsKCmZpbmFsIGNsYXNzIFV0aWxzCnsKICAgIC8qKgogICAgICogRGVidWcgZnVuY3Rpb24gdXNlZCB0byBkZXNjcmliZSB0aGUgcHJvdmlkZWQgdmFsdWUgdHlwZSBhbmQgY2xhc3MuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRpbnB1dAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgdHlwZSBvZiB0aGUgdmFyaWFibGUgYW5kCiAgICAgKiAgICAgICAgICAgICAgICBpZiBhIGNsYXNzIGlzIHByb3ZpZGVkLCB0aGUgY2xhc3MgbmFtZS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZXNjcmliZVR5cGUoJGlucHV0KTogc3RyaW5nCiAgICB7CiAgICAgICAgc3dpdGNoIChcZ2V0dHlwZSgkaW5wdXQpKSB7CiAgICAgICAgICAgIGNhc2UgJ29iamVjdCc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ29iamVjdCgnLlxnZXRfY2xhc3MoJGlucHV0KS4nKSc7CiAgICAgICAgICAgIGNhc2UgJ2FycmF5JzoKICAgICAgICAgICAgICAgIHJldHVybiAnYXJyYXkoJy5cY291bnQoJGlucHV0KS4nKSc7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBcb2Jfc3RhcnQoKTsKICAgICAgICAgICAgICAgIFx2YXJfZHVtcCgkaW5wdXQpOwogICAgICAgICAgICAgICAgLy8gbm9ybWFsaXplIGZsb2F0IHZzIGRvdWJsZQogICAgICAgICAgICAgICAgLyoqIEB2YXIgc3RyaW5nICR2YXJEdW1wQ29udGVudCAqLwogICAgICAgICAgICAgICAgJHZhckR1bXBDb250ZW50ID0gXG9iX2dldF9jbGVhbigpOwoKICAgICAgICAgICAgICAgIHJldHVybiBcc3RyX3JlcGxhY2UoJ2RvdWJsZSgnLCAnZmxvYXQoJywgXHJ0cmltKCR2YXJEdW1wQ29udGVudCkpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlcyBhbiBhcnJheSBvZiBoZWFkZXIgbGluZXMgaW50byBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBoZWFkZXJzLgogICAgICoKICAgICAqIEBwYXJhbSBpdGVyYWJsZSAkbGluZXMgSGVhZGVyIGxpbmVzIGFycmF5IG9mIHN0cmluZ3MgaW4gdGhlIGZvbGxvd2luZwogICAgICogICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICJOYW1lOiBWYWx1ZSIKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoZWFkZXJzRnJvbUxpbmVzKGl0ZXJhYmxlICRsaW5lcyk6IGFycmF5CiAgICB7CiAgICAgICAgJGhlYWRlcnMgPSBbXTsKCiAgICAgICAgZm9yZWFjaCAoJGxpbmVzIGFzICRsaW5lKSB7CiAgICAgICAgICAgICRwYXJ0cyA9IFxleHBsb2RlKCc6JywgJGxpbmUsIDIpOwogICAgICAgICAgICAkaGVhZGVyc1tcdHJpbSgkcGFydHNbMF0pXVtdID0gaXNzZXQoJHBhcnRzWzFdKSA/IFx0cmltKCRwYXJ0c1sxXSkgOiBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRoZWFkZXJzOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIGRlYnVnIHN0cmVhbSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgdmFyaWFibGUuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSBPcHRpb25hbCB2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gcmVzb3VyY2UKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWJ1Z1Jlc291cmNlKCR2YWx1ZSA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKFxpc19yZXNvdXJjZSgkdmFsdWUpKSB7CiAgICAgICAgICAgIHJldHVybiAkdmFsdWU7CiAgICAgICAgfQogICAgICAgIGlmIChcZGVmaW5lZCgnU1RET1VUJykpIHsKICAgICAgICAgICAgcmV0dXJuIFxTVERPVVQ7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gUHNyN1xVdGlsczo6dHJ5Rm9wZW4oJ3BocDovL291dHB1dCcsICd3Jyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaG9vc2VzIGFuZCBjcmVhdGVzIGEgZGVmYXVsdCBoYW5kbGVyIHRvIHVzZSBiYXNlZCBvbiB0aGUgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogVGhlIHJldHVybmVkIGhhbmRsZXIgaXMgbm90IHdyYXBwZWQgYnkgYW55IGRlZmF1bHQgbWlkZGxld2FyZXMuCiAgICAgKgogICAgICogQHJldHVybiBjYWxsYWJsZShcUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlLCBhcnJheSk6IFByb21pc2VcUHJvbWlzZUludGVyZmFjZSBSZXR1cm5zIHRoZSBiZXN0IGhhbmRsZXIgZm9yIHRoZSBnaXZlbiBzeXN0ZW0uCiAgICAgKgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBpZiBubyB2aWFibGUgSGFuZGxlciBpcyBhdmFpbGFibGUuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hvb3NlSGFuZGxlcigpOiBjYWxsYWJsZQogICAgewogICAgICAgICRoYW5kbGVyID0gbnVsbDsKCiAgICAgICAgaWYgKFxkZWZpbmVkKCdDVVJMT1BUX0NVU1RPTVJFUVVFU1QnKSAmJiBcZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKSAmJiB2ZXJzaW9uX2NvbXBhcmUoY3VybF92ZXJzaW9uKClbJ3ZlcnNpb24nXSwgJzcuMjEuMicpID49IDApIHsKICAgICAgICAgICAgaWYgKFxmdW5jdGlvbl9leGlzdHMoJ2N1cmxfbXVsdGlfZXhlYycpICYmIFxmdW5jdGlvbl9leGlzdHMoJ2N1cmxfZXhlYycpKSB7CiAgICAgICAgICAgICAgICAkaGFuZGxlciA9IFByb3h5Ojp3cmFwU3luYyhuZXcgQ3VybE11bHRpSGFuZGxlcigpLCBuZXcgQ3VybEhhbmRsZXIoKSk7CiAgICAgICAgICAgIH0gZWxzZWlmIChcZnVuY3Rpb25fZXhpc3RzKCdjdXJsX2V4ZWMnKSkgewogICAgICAgICAgICAgICAgJGhhbmRsZXIgPSBuZXcgQ3VybEhhbmRsZXIoKTsKICAgICAgICAgICAgfSBlbHNlaWYgKFxmdW5jdGlvbl9leGlzdHMoJ2N1cmxfbXVsdGlfZXhlYycpKSB7CiAgICAgICAgICAgICAgICAkaGFuZGxlciA9IG5ldyBDdXJsTXVsdGlIYW5kbGVyKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChcaW5pX2dldCgnYWxsb3dfdXJsX2ZvcGVuJykpIHsKICAgICAgICAgICAgJGhhbmRsZXIgPSAkaGFuZGxlcgogICAgICAgICAgICAgICAgPyBQcm94eTo6d3JhcFN0cmVhbWluZygkaGFuZGxlciwgbmV3IFN0cmVhbUhhbmRsZXIoKSkKICAgICAgICAgICAgICAgIDogbmV3IFN0cmVhbUhhbmRsZXIoKTsKICAgICAgICB9IGVsc2VpZiAoISRoYW5kbGVyKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignR3V6emxlSHR0cCByZXF1aXJlcyBjVVJMLCB0aGUgYWxsb3dfdXJsX2ZvcGVuIGluaSBzZXR0aW5nLCBvciBhIGN1c3RvbSBIVFRQIGhhbmRsZXIuJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGhhbmRsZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGRlZmF1bHQgVXNlci1BZ2VudCBzdHJpbmcgdG8gdXNlIHdpdGggR3V6emxlLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlZmF1bHRVc2VyQWdlbnQoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIHNwcmludGYoJ0d1enpsZUh0dHAvJWQnLCBDbGllbnRJbnRlcmZhY2U6Ok1BSk9SX1ZFUlNJT04pOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgZGVmYXVsdCBjYWNlcnQgYnVuZGxlIGZvciB0aGUgY3VycmVudCBzeXN0ZW0uCiAgICAgKgogICAgICogRmlyc3QsIHRoZSBvcGVuc3NsLmNhZmlsZSBhbmQgY3VybC5jYWluZm8gcGhwLmluaSBzZXR0aW5ncyBhcmUgY2hlY2tlZC4KICAgICAqIElmIHRob3NlIHNldHRpbmdzIGFyZSBub3QgY29uZmlndXJlZCwgdGhlbiB0aGUgY29tbW9uIGxvY2F0aW9ucyBmb3IKICAgICAqIGJ1bmRsZXMgZm91bmQgb24gUmVkIEhhdCwgQ2VudE9TLCBGZWRvcmEsIFVidW50dSwgRGViaWFuLCBGcmVlQlNELCBPUyBYCiAgICAgKiBhbmQgV2luZG93cyBhcmUgY2hlY2tlZC4gSWYgYW55IG9mIHRoZXNlIGZpbGUgbG9jYXRpb25zIGFyZSBmb3VuZCBvbgogICAgICogZGlzaywgdGhleSB3aWxsIGJlIHV0aWxpemVkLgogICAgICoKICAgICAqIE5vdGU6IHRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBpcyBjYWNoZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMuCiAgICAgKgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBpZiBubyBidW5kbGUgY2FuIGJlIGZvdW5kLgogICAgICoKICAgICAqIEBkZXByZWNhdGVkIFV0aWxzOjpkZWZhdWx0Q2FCdW5kbGUgd2lsbCBiZSByZW1vdmVkIGluIGd1enpsZWh0dHAvZ3V6emxlOjguMC4gVGhpcyBtZXRob2QgaXMgbm90IG5lZWRlZCBpbiBQSFAgNS42Ky4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWZhdWx0Q2FCdW5kbGUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgc3RhdGljICRjYWNoZWQgPSBudWxsOwogICAgICAgIHN0YXRpYyAkY2FmaWxlcyA9IFsKICAgICAgICAgICAgLy8gUmVkIEhhdCwgQ2VudE9TLCBGZWRvcmEgKHByb3ZpZGVkIGJ5IHRoZSBjYS1jZXJ0aWZpY2F0ZXMgcGFja2FnZSkKICAgICAgICAgICAgJy9ldGMvcGtpL3Rscy9jZXJ0cy9jYS1idW5kbGUuY3J0JywKICAgICAgICAgICAgLy8gVWJ1bnR1LCBEZWJpYW4gKHByb3ZpZGVkIGJ5IHRoZSBjYS1jZXJ0aWZpY2F0ZXMgcGFja2FnZSkKICAgICAgICAgICAgJy9ldGMvc3NsL2NlcnRzL2NhLWNlcnRpZmljYXRlcy5jcnQnLAogICAgICAgICAgICAvLyBGcmVlQlNEIChwcm92aWRlZCBieSB0aGUgY2Ffcm9vdF9uc3MgcGFja2FnZSkKICAgICAgICAgICAgJy91c3IvbG9jYWwvc2hhcmUvY2VydHMvY2Etcm9vdC1uc3MuY3J0JywKICAgICAgICAgICAgLy8gU0xFUyAxMiAocHJvdmlkZWQgYnkgdGhlIGNhLWNlcnRpZmljYXRlcyBwYWNrYWdlKQogICAgICAgICAgICAnL3Zhci9saWIvY2EtY2VydGlmaWNhdGVzL2NhLWJ1bmRsZS5wZW0nLAogICAgICAgICAgICAvLyBPUyBYIHByb3ZpZGVkIGJ5IGhvbWVicmV3ICh1c2luZyB0aGUgZGVmYXVsdCBwYXRoKQogICAgICAgICAgICAnL3Vzci9sb2NhbC9ldGMvb3BlbnNzbC9jZXJ0LnBlbScsCiAgICAgICAgICAgIC8vIEdvb2dsZSBhcHAgZW5naW5lCiAgICAgICAgICAgICcvZXRjL2NhLWNlcnRpZmljYXRlcy5jcnQnLAogICAgICAgICAgICAvLyBXaW5kb3dzPwogICAgICAgICAgICAnQzpcXHdpbmRvd3NcXHN5c3RlbTMyXFxjdXJsLWNhLWJ1bmRsZS5jcnQnLAogICAgICAgICAgICAnQzpcXHdpbmRvd3NcXGN1cmwtY2EtYnVuZGxlLmNydCcsCiAgICAgICAgXTsKCiAgICAgICAgaWYgKCRjYWNoZWQpIHsKICAgICAgICAgICAgcmV0dXJuICRjYWNoZWQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGNhID0gXGluaV9nZXQoJ29wZW5zc2wuY2FmaWxlJykpIHsKICAgICAgICAgICAgcmV0dXJuICRjYWNoZWQgPSAkY2E7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGNhID0gXGluaV9nZXQoJ2N1cmwuY2FpbmZvJykpIHsKICAgICAgICAgICAgcmV0dXJuICRjYWNoZWQgPSAkY2E7CiAgICAgICAgfQoKICAgICAgICBmb3JlYWNoICgkY2FmaWxlcyBhcyAkZmlsZW5hbWUpIHsKICAgICAgICAgICAgaWYgKFxmaWxlX2V4aXN0cygkZmlsZW5hbWUpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGNhY2hlZCA9ICRmaWxlbmFtZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKAogICAgICAgICAgICA8PDwgRU9UCk5vIHN5c3RlbSBDQSBidW5kbGUgY291bGQgYmUgZm91bmQgaW4gYW55IG9mIHRoZSB0aGUgY29tbW9uIHN5c3RlbSBsb2NhdGlvbnMuClBIUCB2ZXJzaW9ucyBlYXJsaWVyIHRoYW4gNS42IGFyZSBub3QgcHJvcGVybHkgY29uZmlndXJlZCB0byB1c2UgdGhlIHN5c3RlbSdzCkNBIGJ1bmRsZSBieSBkZWZhdWx0LiBJbiBvcmRlciB0byB2ZXJpZnkgcGVlciBjZXJ0aWZpY2F0ZXMsIHlvdSB3aWxsIG5lZWQgdG8Kc3VwcGx5IHRoZSBwYXRoIG9uIGRpc2sgdG8gYSBjZXJ0aWZpY2F0ZSBidW5kbGUgdG8gdGhlICd2ZXJpZnknIHJlcXVlc3QKb3B0aW9uOiBodHRwczovL2RvY3MuZ3V6emxlcGhwLm9yZy9lbi9sYXRlc3QvcmVxdWVzdC1vcHRpb25zLmh0bWwjdmVyaWZ5LiBJZgp5b3UgZG8gbm90IG5lZWQgYSBzcGVjaWZpYyBjZXJ0aWZpY2F0ZSBidW5kbGUsIHRoZW4gTW96aWxsYSBwcm92aWRlcyBhIGNvbW1vbmx5CnVzZWQgQ0EgYnVuZGxlIHdoaWNoIGNhbiBiZSBkb3dubG9hZGVkIGhlcmUgKHByb3ZpZGVkIGJ5IHRoZSBtYWludGFpbmVyIG9mCmNVUkwpOiBodHRwczovL2N1cmwuaGF4eC5zZS9jYS9jYWNlcnQucGVtLiBPbmNlIHlvdSBoYXZlIGEgQ0EgYnVuZGxlIGF2YWlsYWJsZQpvbiBkaXNrLCB5b3UgY2FuIHNldCB0aGUgJ29wZW5zc2wuY2FmaWxlJyBQSFAgaW5pIHNldHRpbmcgdG8gcG9pbnQgdG8gdGhlIHBhdGgKdG8gdGhlIGZpbGUsIGFsbG93aW5nIHlvdSB0byBvbWl0IHRoZSAndmVyaWZ5JyByZXF1ZXN0IG9wdGlvbi4gU2VlCmh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3Mvc3NsY2VydHMuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KRU9UCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgbG93ZXJjYXNlIGhlYWRlciBuYW1lcyB0byB0aGUgYWN0dWFsCiAgICAgKiBoZWFkZXIgY2FzaW5nLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlcktleXMoYXJyYXkgJGhlYWRlcnMpOiBhcnJheQogICAgewogICAgICAgICRyZXN1bHQgPSBbXTsKICAgICAgICBmb3JlYWNoIChcYXJyYXlfa2V5cygkaGVhZGVycykgYXMgJGtleSkgewogICAgICAgICAgICAkcmVzdWx0W1xzdHJ0b2xvd2VyKCRrZXkpXSA9ICRrZXk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvdmlkZWQgaG9zdCBtYXRjaGVzIGFueSBvZiB0aGUgbm8gcHJveHkgYXJlYXMuCiAgICAgKgogICAgICogVGhpcyBtZXRob2Qgd2lsbCBzdHJpcCBhIHBvcnQgZnJvbSB0aGUgaG9zdCBpZiBpdCBpcyBwcmVzZW50LiBFYWNoIHBhdHRlcm4KICAgICAqIGNhbiBiZSBtYXRjaGVkIHdpdGggYW4gZXhhY3QgbWF0Y2ggKGUuZy4sICJmb28uY29tIiA9PSAiZm9vLmNvbSIpIG9yIGEKICAgICAqIHBhcnRpYWwgbWF0Y2g6IChlLmcuLCAiZm9vLmNvbSIgPT0gImJhei5mb28uY29tIiBhbmQgIi5mb28uY29tIiA9PQogICAgICogImJhei5mb28uY29tIiwgYnV0ICIuZm9vLmNvbSIgIT0gImZvby5jb20iKS4KICAgICAqCiAgICAgKiBBcmVhcyBhcmUgbWF0Y2hlZCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOgogICAgICogMS4gIioiICh3aXRob3V0IHF1b3RlcykgYWx3YXlzIG1hdGNoZXMgYW55IGhvc3RzLgogICAgICogMi4gQW4gZXhhY3QgbWF0Y2guCiAgICAgKiAzLiBUaGUgYXJlYSBzdGFydHMgd2l0aCAiLiIgYW5kIHRoZSBhcmVhIGlzIHRoZSBsYXN0IHBhcnQgb2YgdGhlIGhvc3QuIGUuZy4KICAgICAqICAgICcubWl0LmVkdScgd2lsbCBtYXRjaCBhbnkgaG9zdCB0aGF0IGVuZHMgd2l0aCAnLm1pdC5lZHUnLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAkaG9zdCAgICAgICAgIEhvc3QgdG8gY2hlY2sgYWdhaW5zdCB0aGUgcGF0dGVybnMuCiAgICAgKiBAcGFyYW0gc3RyaW5nW10gJG5vUHJveHlBcnJheSBBbiBhcnJheSBvZiBob3N0IHBhdHRlcm5zLgogICAgICoKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNIb3N0SW5Ob1Byb3h5KHN0cmluZyAkaG9zdCwgYXJyYXkgJG5vUHJveHlBcnJheSk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoXHN0cmxlbigkaG9zdCkgPT09IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignRW1wdHkgaG9zdCBwcm92aWRlZCcpOwogICAgICAgIH0KCiAgICAgICAgLy8gU3RyaXAgcG9ydCBpZiBwcmVzZW50LgogICAgICAgIFskaG9zdF0gPSBcZXhwbG9kZSgnOicsICRob3N0LCAyKTsKCiAgICAgICAgZm9yZWFjaCAoJG5vUHJveHlBcnJheSBhcyAkYXJlYSkgewogICAgICAgICAgICAvLyBBbHdheXMgbWF0Y2ggb24gd2lsZGNhcmRzLgogICAgICAgICAgICBpZiAoJGFyZWEgPT09ICcqJykgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChlbXB0eSgkYXJlYSkpIHsKICAgICAgICAgICAgICAgIC8vIERvbid0IG1hdGNoIG9uIGVtcHR5IHZhbHVlcy4KICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJGFyZWEgPT09ICRob3N0KSB7CiAgICAgICAgICAgICAgICAvLyBFeGFjdCBtYXRjaGVzLgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gU3BlY2lhbCBtYXRjaCBpZiB0aGUgYXJlYSB3aGVuIHByZWZpeGVkIHdpdGggIi4iLiBSZW1vdmUgYW55CiAgICAgICAgICAgIC8vIGV4aXN0aW5nIGxlYWRpbmcgIi4iIGFuZCBhZGQgYSBuZXcgbGVhZGluZyAiLiIuCiAgICAgICAgICAgICRhcmVhID0gJy4nLlxsdHJpbSgkYXJlYSwgJy4nKTsKICAgICAgICAgICAgaWYgKFxzdWJzdHIoJGhvc3QsIC1cc3RybGVuKCRhcmVhKSkgPT09ICRhcmVhKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogV3JhcHBlciBmb3IganNvbl9kZWNvZGUgdGhhdCB0aHJvd3Mgd2hlbiBhbiBlcnJvciBvY2N1cnMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkanNvbiAgICBKU09OIGRhdGEgdG8gcGFyc2UKICAgICAqIEBwYXJhbSBib29sICAgJGFzc29jICAgV2hlbiB0cnVlLCByZXR1cm5lZCBvYmplY3RzIHdpbGwgYmUgY29udmVydGVkCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGludG8gYXNzb2NpYXRpdmUgYXJyYXlzLgogICAgICogQHBhcmFtIGludCAgICAkZGVwdGggICBVc2VyIHNwZWNpZmllZCByZWN1cnNpb24gZGVwdGguCiAgICAgKiBAcGFyYW0gaW50ICAgICRvcHRpb25zIEJpdG1hc2sgb2YgSlNPTiBkZWNvZGUgb3B0aW9ucy4KICAgICAqCiAgICAgKiBAcmV0dXJuIG9iamVjdHxhcnJheXxzdHJpbmd8aW50fGZsb2F0fGJvb2x8bnVsbAogICAgICoKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBKU09OIGNhbm5vdCBiZSBkZWNvZGVkLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uanNvbi1kZWNvZGUucGhwCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24ganNvbkRlY29kZShzdHJpbmcgJGpzb24sIGJvb2wgJGFzc29jID0gZmFsc2UsIGludCAkZGVwdGggPSA1MTIsIGludCAkb3B0aW9ucyA9IDApCiAgICB7CiAgICAgICAgJGRhdGEgPSBcanNvbl9kZWNvZGUoJGpzb24sICRhc3NvYywgJGRlcHRoLCAkb3B0aW9ucyk7CiAgICAgICAgaWYgKFxKU09OX0VSUk9SX05PTkUgIT09IFxqc29uX2xhc3RfZXJyb3IoKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdqc29uX2RlY29kZSBlcnJvcjogJy5canNvbl9sYXN0X2Vycm9yX21zZygpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkZGF0YTsKICAgIH0KCiAgICAvKioKICAgICAqIFdyYXBwZXIgZm9yIEpTT04gZW5jb2RpbmcgdGhhdCB0aHJvd3Mgd2hlbiBhbiBlcnJvciBvY2N1cnMuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSAgIFRoZSB2YWx1ZSBiZWluZyBlbmNvZGVkCiAgICAgKiBAcGFyYW0gaW50ICAgJG9wdGlvbnMgSlNPTiBlbmNvZGUgb3B0aW9uIGJpdG1hc2sKICAgICAqIEBwYXJhbSBpbnQgICAkZGVwdGggICBTZXQgdGhlIG1heGltdW0gZGVwdGguIE11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uCiAgICAgKgogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIEpTT04gY2Fubm90IGJlIGVuY29kZWQuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5qc29uLWVuY29kZS5waHAKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBqc29uRW5jb2RlKCR2YWx1ZSwgaW50ICRvcHRpb25zID0gMCwgaW50ICRkZXB0aCA9IDUxMik6IHN0cmluZwogICAgewogICAgICAgICRqc29uID0gXGpzb25fZW5jb2RlKCR2YWx1ZSwgJG9wdGlvbnMsICRkZXB0aCk7CiAgICAgICAgaWYgKFxKU09OX0VSUk9SX05PTkUgIT09IFxqc29uX2xhc3RfZXJyb3IoKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdqc29uX2VuY29kZSBlcnJvcjogJy5canNvbl9sYXN0X2Vycm9yX21zZygpKTsKICAgICAgICB9CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAqLwogICAgICAgIHJldHVybiAkanNvbjsKICAgIH0KCiAgICAvKioKICAgICAqIFdyYXBwZXIgZm9yIHRoZSBocnRpbWUoKSBvciBtaWNyb3RpbWUoKSBmdW5jdGlvbnMKICAgICAqIChkZXBlbmRpbmcgb24gdGhlIFBIUCB2ZXJzaW9uLCBvbmUgb2YgdGhlIHR3byBpcyB1c2VkKQogICAgICoKICAgICAqIEByZXR1cm4gZmxvYXQgVU5JWCB0aW1lc3RhbXAKICAgICAqCiAgICAgKiBAaW50ZXJuYWwKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjdXJyZW50VGltZSgpOiBmbG9hdAogICAgewogICAgICAgIHJldHVybiAoZmxvYXQpIFxmdW5jdGlvbl9leGlzdHMoJ2hydGltZScpID8gXGhydGltZSh0cnVlKSAvIDFlOSA6IFxtaWNyb3RpbWUodHJ1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlkblVyaUNvbnZlcnQoVXJpSW50ZXJmYWNlICR1cmksIGludCAkb3B0aW9ucyA9IDApOiBVcmlJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoJHVyaS0+Z2V0SG9zdCgpKSB7CiAgICAgICAgICAgICRhc2NpaUhvc3QgPSBzZWxmOjppZG5Ub0FzY2koJHVyaS0+Z2V0SG9zdCgpLCAkb3B0aW9ucywgJGluZm8pOwogICAgICAgICAgICBpZiAoJGFzY2lpSG9zdCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICRlcnJvckJpdFNldCA9ICRpbmZvWydlcnJvcnMnXSA/PyAwOwoKICAgICAgICAgICAgICAgICRlcnJvckNvbnN0YW50cyA9IGFycmF5X2ZpbHRlcihhcnJheV9rZXlzKGdldF9kZWZpbmVkX2NvbnN0YW50cygpKSwgc3RhdGljIGZ1bmN0aW9uIChzdHJpbmcgJG5hbWUpOiBib29sIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Vic3RyKCRuYW1lLCAwLCAxMSkgPT09ICdJRE5BX0VSUk9SXyc7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAkZXJyb3JzID0gW107CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkZXJyb3JDb25zdGFudHMgYXMgJGVycm9yQ29uc3RhbnQpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJGVycm9yQml0U2V0ICYgY29uc3RhbnQoJGVycm9yQ29uc3RhbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRlcnJvcnNbXSA9ICRlcnJvckNvbnN0YW50OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkZXJyb3JNZXNzYWdlID0gJ0lETiBjb252ZXJzaW9uIGZhaWxlZCc7CiAgICAgICAgICAgICAgICBpZiAoJGVycm9ycykgewogICAgICAgICAgICAgICAgICAgICRlcnJvck1lc3NhZ2UgLj0gJyAoZXJyb3JzOiAnLmltcGxvZGUoJywgJywgJGVycm9ycykuJyknOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJGVycm9yTWVzc2FnZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCR1cmktPmdldEhvc3QoKSAhPT0gJGFzY2lpSG9zdCkgewogICAgICAgICAgICAgICAgLy8gUmVwbGFjZSBVUkkgb25seSBpZiB0aGUgQVNDSUkgdmVyc2lvbiBpcyBkaWZmZXJlbnQKICAgICAgICAgICAgICAgICR1cmkgPSAkdXJpLT53aXRoSG9zdCgkYXNjaWlIb3N0KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR1cmk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRlbnYoc3RyaW5nICRuYW1lKTogP3N0cmluZwogICAgewogICAgICAgIGlmIChpc3NldCgkX1NFUlZFUlskbmFtZV0pKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSAkX1NFUlZFUlskbmFtZV07CiAgICAgICAgfQoKICAgICAgICBpZiAoXFBIUF9TQVBJID09PSAnY2xpJyAmJiAoJHZhbHVlID0gXGdldGVudigkbmFtZSkpICE9PSBmYWxzZSAmJiAkdmFsdWUgIT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpICR2YWx1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gaWRuVG9Bc2NpKHN0cmluZyAkZG9tYWluLCBpbnQgJG9wdGlvbnMsID9hcnJheSAmJGluZm8gPSBbXSkKICAgIHsKICAgICAgICBpZiAoXGZ1bmN0aW9uX2V4aXN0cygnaWRuX3RvX2FzY2lpJykgJiYgXGRlZmluZWQoJ0lOVExfSUROQV9WQVJJQU5UX1VUUzQ2JykpIHsKICAgICAgICAgICAgcmV0dXJuIFxpZG5fdG9fYXNjaWkoJGRvbWFpbiwgJG9wdGlvbnMsIFxJTlRMX0lETkFfVkFSSUFOVF9VVFM0NiwgJGluZm8pOwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IFxFcnJvcignZXh0LWlkbiBvciBzeW1mb255L3BvbHlmaWxsLWludGwtaWRuIG5vdCBsb2FkZWQgb3IgdG9vIG9sZCcpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/UPGRADING.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R3V6emxlIFVwZ3JhZGUgR3VpZGUKPT09PT09PT09PT09PT09PT09PT0KCjYuMCB0byA3LjAKLS0tLS0tLS0tLQoKSW4gb3JkZXIgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIG5ldyBmZWF0dXJlcyBvZiBQSFAsIEd1enpsZSBkcm9wcGVkIHRoZSBzdXBwb3J0Cm9mIFBIUCA1LiBUaGUgbWluaW11bSBzdXBwb3J0ZWQgUEhQIHZlcnNpb24gaXMgbm93IFBIUCA3LjIuIFR5cGUgaGludHMgYW5kIHJldHVybgp0eXBlcyBmb3IgZnVuY3Rpb25zIGFuZCBtZXRob2RzIGhhdmUgYmVlbiBhZGRlZCB3aGVyZXZlciBwb3NzaWJsZS4gCgpQbGVhc2UgbWFrZSBzdXJlOgotIFlvdSBhcmUgY2FsbGluZyBhIGZ1bmN0aW9uIG9yIGEgbWV0aG9kIHdpdGggdGhlIGNvcnJlY3QgdHlwZS4KLSBJZiB5b3UgZXh0ZW5kIGEgY2xhc3Mgb2YgR3V6emxlOyB1cGRhdGUgYWxsIHNpZ25hdHVyZXMgb24gbWV0aG9kcyB5b3Ugb3ZlcnJpZGUuCgojIyMjIE90aGVyIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGJyZWFraW5nIGNoYW5nZXMKCi0gQ2xhc3MgYEd1enpsZUh0dHBcVXJpVGVtcGxhdGVgIGlzIHJlbW92ZWQuCi0gQ2xhc3MgYEd1enpsZUh0dHBcRXhjZXB0aW9uXFNlZWtFeGNlcHRpb25gIGlzIHJlbW92ZWQuCi0gQ2xhc3NlcyBgR3V6emxlSHR0cFxFeGNlcHRpb25cQmFkUmVzcG9uc2VFeGNlcHRpb25gLCBgR3V6emxlSHR0cFxFeGNlcHRpb25cQ2xpZW50RXhjZXB0aW9uYCwgCiAgYEd1enpsZUh0dHBcRXhjZXB0aW9uXFNlcnZlckV4Y2VwdGlvbmAgY2FuIG5vIGxvbmdlciBiZSBpbml0aWFsaXplZCB3aXRoIGFuIGVtcHR5CiAgUmVzcG9uc2UgYXMgYXJndW1lbnQuCi0gQ2xhc3MgYEd1enpsZUh0dHBcRXhjZXB0aW9uXENvbm5lY3RFeGNlcHRpb25gIG5vdyBleHRlbmRzIGBHdXp6bGVIdHRwXEV4Y2VwdGlvblxUcmFuc2ZlckV4Y2VwdGlvbmAKICBpbnN0ZWFkIG9mIGBHdXp6bGVIdHRwXEV4Y2VwdGlvblxSZXF1ZXN0RXhjZXB0aW9uYC4KLSBGdW5jdGlvbiBgR3V6emxlSHR0cFxFeGNlcHRpb25cQ29ubmVjdEV4Y2VwdGlvbjo6Z2V0UmVzcG9uc2UoKWAgaXMgcmVtb3ZlZC4KLSBGdW5jdGlvbiBgR3V6emxlSHR0cFxFeGNlcHRpb25cQ29ubmVjdEV4Y2VwdGlvbjo6aGFzUmVzcG9uc2UoKWAgaXMgcmVtb3ZlZC4KLSBDb25zdGFudCBgR3V6emxlSHR0cFxDbGllbnRJbnRlcmZhY2U6OlZFUlNJT05gIGlzIHJlbW92ZWQuIEFkZGVkIGBHdXp6bGVIdHRwXENsaWVudEludGVyZmFjZTo6TUFKT1JfVkVSU0lPTmAgaW5zdGVhZC4KLSBGdW5jdGlvbiBgR3V6emxlSHR0cFxFeGNlcHRpb25cUmVxdWVzdEV4Y2VwdGlvbjo6Z2V0UmVzcG9uc2VCb2R5U3VtbWFyeWAgaXMgcmVtb3ZlZC4KICBVc2UgYFxHdXp6bGVIdHRwXFBzcjdcZ2V0X21lc3NhZ2VfYm9keV9zdW1tYXJ5YCBhcyBhbiBhbHRlcm5hdGl2ZS4KLSBGdW5jdGlvbiBgR3V6emxlSHR0cFxDb29raWVcQ29va2llSmFyOjpnZXRDb29raWVWYWx1ZWAgaXMgcmVtb3ZlZC4KLSBSZXF1ZXN0IG9wdGlvbiBgZXhjZXB0aW9uc2AgaXMgcmVtb3ZlZC4gUGxlYXNlIHVzZSBgaHR0cF9lcnJvcnNgLgotIFJlcXVlc3Qgb3B0aW9uIGBzYXZlX3RvYCBpcyByZW1vdmVkLiBQbGVhc2UgdXNlIGBzaW5rYC4KLSBQb29sIG9wdGlvbiBgcG9vbF9zaXplYCBpcyByZW1vdmVkLiBQbGVhc2UgdXNlIGBjb25jdXJyZW5jeWAuCi0gV2Ugbm93IGxvb2sgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiB0aGUgYCRfU0VSVkVSYCBzdXBlciBnbG9iYWwsIGR1ZSB0byB0aHJlYWQgc2FmZXR5IGlzc3VlcyB3aXRoIGBnZXRlbnZgLiBXZSBjb250aW51ZSB0byBmYWxsYmFjayB0byBgZ2V0ZW52YCBpbiBDTEkgZW52aXJvbm1lbnRzLCBmb3IgbWF4aW11bSBjb21wYXRpYmlsaXR5LgotIFRoZSBgZ2V0YCwgYGhlYWRgLCBgcHV0YCwgYHBvc3RgLCBgcGF0Y2hgLCBgZGVsZXRlYCwgYGdldEFzeW5jYCwgYGhlYWRBc3luY2AsIGBwdXRBc3luY2AsIGBwb3N0QXN5bmNgLCBgcGF0Y2hBc3luY2AsIGFuZCBgZGVsZXRlQXN5bmNgIG1ldGhvZHMgYXJlIG5vdyBpbXBsZW1lbnRlZCBhcyBnZW51aW5lIG1ldGhvZHMgb24gYEd1enpsZUh0dHBcQ2xpZW50YCwgd2l0aCBzdHJvbmcgdHlwaW5nLiBUaGUgb3JpZ2luYWwgYF9fY2FsbGAgaW1wbGVtZW50YXRpb24gcmVtYWlucyB1bmNoYW5nZWQgZm9yIG5vdywgZm9yIG1heGltdW0gYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGJ1dCB3b24ndCBiZSBpbnZva2VkIHVuZGVyIG5vcm1hbCBvcGVyYXRpb24uCi0gVGhlIGBsb2dgIG1pZGRsZXdhcmUgd2lsbCBsb2cgdGhlIGVycm9ycyB3aXRoIGxldmVsIGBlcnJvcmAgaW5zdGVhZCBvZiBgbm90aWNlYCAKLSBTdXBwb3J0IGZvciBpbnRlcm5hdGlvbmFsIGRvbWFpbiBuYW1lcyAoSUROKSBpcyBub3cgZGlzYWJsZWQgYnkgZGVmYXVsdCwgYW5kIGVuYWJsaW5nIGl0IHJlcXVpcmVzIGluc3RhbGxpbmcgZXh0LWludGwsIGxpbmtlZCBhZ2FpbnN0IGEgbW9kZXJuIHZlcnNpb24gb2YgdGhlIEMgbGlicmFyeSAoSUNVIDQuNiBvciBoaWdoZXIpLgoKIyMjIyBOYXRpdmUgZnVuY3Rpb25zIGNhbGxzCgpBbGwgaW50ZXJuYWwgbmF0aXZlIGZ1bmN0aW9ucyBjYWxscyBvZiBHdXp6bGUgYXJlIG5vdyBwcmVmaXhlZCB3aXRoIGEgc2xhc2guIFRoaXMKY2hhbmdlIG1ha2VzIGl0IGltcG9zc2libGUgZm9yIG1ldGhvZCBvdmVybG9hZGluZyBieSBvdGhlciBsaWJyYXJpZXMgb3IgYXBwbGljYXRpb25zLgpFeGFtcGxlOgoKYGBgcGhwCi8vIEJlZm9yZToKY3VybF92ZXJzaW9uKCk7CgovLyBBZnRlcjoKXGN1cmxfdmVyc2lvbigpOwpgYGAKCkZvciB0aGUgZnVsbCBkaWZmIHlvdSBjYW4gY2hlY2sgW2hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2NvbXBhcmUvNi41LjQuLm1hc3RlcikuCgo1LjAgdG8gNi4wCi0tLS0tLS0tLS0KCkd1enpsZSBub3cgdXNlcyBbUFNSLTddKGh0dHBzOi8vd3d3LnBocC1maWcub3JnL3Bzci9wc3ItNy8pIGZvciBIVFRQIG1lc3NhZ2VzLgpEdWUgdG8gdGhlIGZhY3QgdGhhdCB0aGVzZSBtZXNzYWdlcyBhcmUgaW1tdXRhYmxlLCB0aGlzIHByb21wdGVkIGEgcmVmYWN0b3JpbmcKb2YgR3V6emxlIHRvIHVzZSBhIG1pZGRsZXdhcmUgYmFzZWQgc3lzdGVtIHJhdGhlciB0aGFuIGFuIGV2ZW50IHN5c3RlbS4gQW55CkhUVFAgbWVzc2FnZSBpbnRlcmFjdGlvbiAoZS5nLiwgYEd1enpsZUh0dHBcTWVzc2FnZVxSZXF1ZXN0YCkgbmVlZCB0byBiZQp1cGRhdGVkIHRvIHdvcmsgd2l0aCB0aGUgbmV3IGltbXV0YWJsZSBQU1ItNyByZXF1ZXN0IGFuZCByZXNwb25zZSBvYmplY3RzLiBBbnkKZXZlbnQgbGlzdGVuZXJzIG9yIHN1YnNjcmliZXJzIG5lZWQgdG8gYmUgdXBkYXRlZCB0byBiZWNvbWUgbWlkZGxld2FyZQpmdW5jdGlvbnMgdGhhdCB3cmFwIGhhbmRsZXJzIChvciBhcmUgaW5qZWN0ZWQgaW50byBhCmBHdXp6bGVIdHRwXEhhbmRsZXJTdGFja2ApLgoKLSBSZW1vdmVkIGBHdXp6bGVIdHRwXEJhdGNoUmVzdWx0c2AKLSBSZW1vdmVkIGBHdXp6bGVIdHRwXENvbGxlY3Rpb25gCi0gUmVtb3ZlZCBgR3V6emxlSHR0cFxIYXNEYXRhVHJhaXRgCi0gUmVtb3ZlZCBgR3V6emxlSHR0cFxUb0FycmF5SW50ZXJmYWNlYAotIFRoZSBgZ3V6emxlaHR0cC9zdHJlYW1zYCBkZXBlbmRlbmN5IGhhcyBiZWVuIHJlbW92ZWQuIFN0cmVhbSBmdW5jdGlvbmFsaXR5CiAgaXMgbm93IHByZXNlbnQgaW4gdGhlIGBHdXp6bGVIdHRwXFBzcjdgIG5hbWVzcGFjZSBwcm92aWRlZCBieSB0aGUKICBgZ3V6emxlaHR0cC9wc3I3YCBwYWNrYWdlLgotIEd1enpsZSBubyBsb25nZXIgdXNlcyBSZWFjdFBIUCBwcm9taXNlcyBhbmQgbm93IHVzZXMgdGhlCiAgYGd1enpsZWh0dHAvcHJvbWlzZXNgIGxpYnJhcnkuIFdlIHVzZSBhIGN1c3RvbSBwcm9taXNlIGxpYnJhcnkgZm9yIHRocmVlCiAgc2lnbmlmaWNhbnQgcmVhc29uczoKICAxLiBSZWFjdCBwcm9taXNlcyAoYXQgdGhlIHRpbWUgb2Ygd3JpdGluZyB0aGlzKSBhcmUgcmVjdXJzaXZlLiBQcm9taXNlCiAgICAgY2hhaW5pbmcgYW5kIHByb21pc2UgcmVzb2x1dGlvbiB3aWxsIGV2ZW50dWFsbHkgYmxvdyB0aGUgc3RhY2suIEd1enpsZQogICAgIHByb21pc2VzIGFyZSBub3QgcmVjdXJzaXZlIGFzIHRoZXkgdXNlIGEgc29ydCBvZiB0cmFtcG9saW5pbmcgdGVjaG5pcXVlLgogICAgIE5vdGU6IHRoZXJlIGhhcyBiZWVuIG1vdmVtZW50IGluIHRoZSBSZWFjdCBwcm9qZWN0IHRvIG1vZGlmeSBwcm9taXNlcyB0bwogICAgIG5vIGxvbmdlciB1dGlsaXplIHJlY3Vyc2lvbi4KICAyLiBHdXp6bGUgbmVlZHMgdG8gaGF2ZSB0aGUgYWJpbGl0eSB0byBzeW5jaHJvbm91c2x5IGJsb2NrIG9uIGEgcHJvbWlzZSB0bwogICAgIHdhaXQgZm9yIGEgcmVzdWx0LiBHdXp6bGUgcHJvbWlzZXMgYWxsb3dzIHRoaXMgZnVuY3Rpb25hbGl0eSAoYW5kIGRvZXMKICAgICBub3QgcmVxdWlyZSB0aGUgdXNlIG9mIHJlY3Vyc2lvbikuCiAgMy4gQmVjYXVzZSB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gd2FpdCBvbiBhIHJlc3VsdCwgZG9pbmcgc28gdXNpbmcgUmVhY3QKICAgICBwcm9taXNlcyByZXF1aXJlcyB3cmFwcGluZyByZWFjdCBwcm9taXNlcyB3aXRoIFJpbmdQSFAgZnV0dXJlcy4gVGhpcwogICAgIG92ZXJoZWFkIGlzIG5vIGxvbmdlciBuZWVkZWQsIHJlZHVjaW5nIHN0YWNrIHNpemVzLCByZWR1Y2luZyBjb21wbGV4aXR5LAogICAgIGFuZCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UuCi0gYEd1enpsZUh0dHBcTWltZXR5cGVzYCBoYXMgYmVlbiBtb3ZlZCB0byBhIGZ1bmN0aW9uIGluCiAgYEd1enpsZUh0dHBcUHNyN1xtaW1ldHlwZV9mcm9tX2V4dGVuc2lvbmAgYW5kCiAgYEd1enpsZUh0dHBcUHNyN1xtaW1ldHlwZV9mcm9tX2ZpbGVuYW1lYC4KLSBgR3V6emxlSHR0cFxRdWVyeWAgYW5kIGBHdXp6bGVIdHRwXFF1ZXJ5UGFyc2VyYCBoYXZlIGJlZW4gcmVtb3ZlZC4gUXVlcnkKICBzdHJpbmdzIG11c3Qgbm93IGJlIHBhc3NlZCBpbnRvIHJlcXVlc3Qgb2JqZWN0cyBhcyBzdHJpbmdzLCBvciBwcm92aWRlZCB0bwogIHRoZSBgcXVlcnlgIHJlcXVlc3Qgb3B0aW9uIHdoZW4gY3JlYXRpbmcgcmVxdWVzdHMgd2l0aCBjbGllbnRzLiBUaGUgYHF1ZXJ5YAogIG9wdGlvbiB1c2VzIFBIUCdzIGBodHRwX2J1aWxkX3F1ZXJ5YCB0byBjb252ZXJ0IGFuIGFycmF5IHRvIGEgc3RyaW5nLiBJZiB5b3UKICBuZWVkIGEgZGlmZmVyZW50IHNlcmlhbGl6YXRpb24gdGVjaG5pcXVlLCB5b3Ugd2lsbCBuZWVkIHRvIHBhc3MgdGhlIHF1ZXJ5CiAgc3RyaW5nIGluIGFzIGEgc3RyaW5nLiBUaGVyZSBhcmUgYSBjb3VwbGUgaGVscGVyIGZ1bmN0aW9ucyB0aGF0IHdpbGwgbWFrZQogIHdvcmtpbmcgd2l0aCBxdWVyeSBzdHJpbmdzIGVhc2llcjogYEd1enpsZUh0dHBcUHNyN1xwYXJzZV9xdWVyeWAgYW5kCiAgYEd1enpsZUh0dHBcUHNyN1xidWlsZF9xdWVyeWAuCi0gR3V6emxlIG5vIGxvbmdlciBoYXMgYSBkZXBlbmRlbmN5IG9uIFJpbmdQSFAuIER1ZSB0byB0aGUgdXNlIG9mIGEgbWlkZGxld2FyZQogIHN5c3RlbSBiYXNlZCBvbiBQU1ItNywgdXNpbmcgUmluZ1BIUCBhbmQgaXQncyBtaWRkbGV3YXJlIHN5c3RlbSBhcyB3ZWxsIGFkZHMKICBtb3JlIGNvbXBsZXhpdHkgdGhhbiB0aGUgYmVuZWZpdHMgaXQgcHJvdmlkZXMuIEFsbCBIVFRQIGhhbmRsZXJzIHRoYXQgd2VyZQogIHByZXNlbnQgaW4gUmluZ1BIUCBoYXZlIGJlZW4gbW9kaWZpZWQgdG8gd29yayBkaXJlY3RseSB3aXRoIFBTUi03IG1lc3NhZ2VzCiAgYW5kIHBsYWNlZCBpbiB0aGUgYEd1enpsZUh0dHBcSGFuZGxlcmAgbmFtZXNwYWNlLiBUaGlzIHNpZ25pZmljYW50bHkgcmVkdWNlcwogIGNvbXBsZXhpdHkgaW4gR3V6emxlLCByZW1vdmVzIGEgZGVwZW5kZW5jeSwgYW5kIGltcHJvdmVzIHBlcmZvcm1hbmNlLiBSaW5nUEhQCiAgd2lsbCBiZSBtYWludGFpbmVkIGZvciBHdXp6bGUgNSBzdXBwb3J0LCBidXQgd2lsbCBubyBsb25nZXIgYmUgYSBwYXJ0IG9mCiAgR3V6emxlIDYuCi0gQXMgR3V6emxlIG5vdyB1c2VzIGEgbWlkZGxld2FyZSBiYXNlZCBzeXN0ZW1zIHRoZSBldmVudCBzeXN0ZW0gYW5kIFJpbmdQSFAKICBpbnRlZ3JhdGlvbiBoYXMgYmVlbiByZW1vdmVkLiBOb3RlOiB3aGlsZSB0aGUgZXZlbnQgc3lzdGVtIGhhcyBiZWVuIHJlbW92ZWQsCiAgaXQgaXMgcG9zc2libGUgdG8gYWRkIHlvdXIgb3duIHR5cGUgb2YgZXZlbnQgc3lzdGVtIHRoYXQgaXMgcG93ZXJlZCBieSB0aGUKICBtaWRkbGV3YXJlIHN5c3RlbS4KICAtIFJlbW92ZWQgdGhlIGBFdmVudGAgbmFtZXNwYWNlLgogIC0gUmVtb3ZlZCB0aGUgYFN1YnNjcmliZXJgIG5hbWVzcGFjZS4KICAtIFJlbW92ZWQgYFRyYW5zYWN0aW9uYCBjbGFzcwogIC0gUmVtb3ZlZCBgUmVxdWVzdEZzbWAKICAtIFJlbW92ZWQgYFJpbmdCcmlkZ2VgCiAgLSBgR3V6emxlSHR0cFxTdWJzY3JpYmVyXENvb2tpZWAgaXMgbm93IHByb3ZpZGVkIGJ5CiAgICBgR3V6emxlSHR0cFxNaWRkbGV3YXJlOjpjb29raWVzYAogIC0gYEd1enpsZUh0dHBcU3Vic2NyaWJlclxIdHRwRXJyb3JgIGlzIG5vdyBwcm92aWRlZCBieQogICAgYEd1enpsZUh0dHBcTWlkZGxld2FyZTo6aHR0cEVycm9yYAogIC0gYEd1enpsZUh0dHBcU3Vic2NyaWJlclxIaXN0b3J5YCBpcyBub3cgcHJvdmlkZWQgYnkKICAgIGBHdXp6bGVIdHRwXE1pZGRsZXdhcmU6Omhpc3RvcnlgCiAgLSBgR3V6emxlSHR0cFxTdWJzY3JpYmVyXE1vY2tgIGlzIG5vdyBwcm92aWRlZCBieQogICAgYEd1enpsZUh0dHBcSGFuZGxlclxNb2NrSGFuZGxlcmAKICAtIGBHdXp6bGVIdHRwXFN1YnNjcmliZXJcUHJlcGFyZWAgaXMgbm93IHByb3ZpZGVkIGJ5CiAgICBgR3V6emxlSHR0cFxQcmVwYXJlQm9keU1pZGRsZXdhcmVgCiAgLSBgR3V6emxlSHR0cFxTdWJzY3JpYmVyXFJlZGlyZWN0YCBpcyBub3cgcHJvdmlkZWQgYnkKICAgIGBHdXp6bGVIdHRwXFJlZGlyZWN0TWlkZGxld2FyZWAKLSBHdXp6bGUgbm93IHVzZXMgYFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlYCAoaW1wbGVtZW50cyBpbgogIGBHdXp6bGVIdHRwXFBzcjdcVXJpYCkgZm9yIFVSSSBzdXBwb3J0LiBgR3V6emxlSHR0cFxVcmxgIGlzIG5vdyBnb25lLgotIFN0YXRpYyBmdW5jdGlvbnMgaW4gYEd1enpsZUh0dHBcVXRpbHNgIGhhdmUgYmVlbiBtb3ZlZCB0byBuYW1lc3BhY2VkCiAgZnVuY3Rpb25zIHVuZGVyIHRoZSBgR3V6emxlSHR0cGAgbmFtZXNwYWNlLiBUaGlzIHJlcXVpcmVzIGVpdGhlciBhIENvbXBvc2VyCiAgYmFzZWQgYXV0b2xvYWRlciBvciB5b3UgdG8gaW5jbHVkZSBmdW5jdGlvbnMucGhwLgotIGBHdXp6bGVIdHRwXENsaWVudEludGVyZmFjZTo6Z2V0RGVmYXVsdE9wdGlvbmAgaGFzIGJlZW4gcmVuYW1lZCB0bwogIGBHdXp6bGVIdHRwXENsaWVudEludGVyZmFjZTo6Z2V0Q29uZmlnYC4KLSBgR3V6emxlSHR0cFxDbGllbnRJbnRlcmZhY2U6OnNldERlZmF1bHRPcHRpb25gIGhhcyBiZWVuIHJlbW92ZWQuCi0gVGhlIGBqc29uYCBhbmQgYHhtbGAgbWV0aG9kcyBvZiByZXNwb25zZSBvYmplY3RzIGhhcyBiZWVuIHJlbW92ZWQuIFdpdGggdGhlCiAgbWlncmF0aW9uIHRvIHN0cmljdGx5IGFkaGVyaW5nIHRvIFBTUi03IGFzIHRoZSBpbnRlcmZhY2UgZm9yIEd1enpsZSBtZXNzYWdlcywKICBhZGRpbmcgbWV0aG9kcyB0byBtZXNzYWdlIGludGVyZmFjZXMgd291bGQgYWN0dWFsbHkgcmVxdWlyZSBHdXp6bGUgbWVzc2FnZXMKICB0byBleHRlbmQgZnJvbSBQU1ItNyBtZXNzYWdlcyByYXRoZXIgdGhlbiB3b3JrIHdpdGggdGhlbSBkaXJlY3RseS4KCiMjIE1pZ3JhdGluZyB0byBtaWRkbGV3YXJlCgpUaGUgY2hhbmdlIHRvIFBTUi03IHVuZm9ydHVuYXRlbHkgcmVxdWlyZWQgc2lnbmlmaWNhbnQgcmVmYWN0b3JpbmcgdG8gR3V6emxlCmR1ZSB0byB0aGUgZmFjdCB0aGF0IFBTUi03IG1lc3NhZ2VzIGFyZSBpbW11dGFibGUuIEd1enpsZSA1IHJlbGllZCBvbiBhbiBldmVudApzeXN0ZW0gZnJvbSBwbHVnaW5zLiBUaGUgZXZlbnQgc3lzdGVtIHJlbGllZCBvbiBtdXRhYmlsaXR5IG9mIEhUVFAgbWVzc2FnZXMgYW5kCnNpZGUgZWZmZWN0cyBpbiBvcmRlciB0byB3b3JrLiBXaXRoIGltbXV0YWJsZSBtZXNzYWdlcywgeW91IGhhdmUgdG8gY2hhbmdlIHlvdXIKd29ya2Zsb3cgdG8gYmVjb21lIG1vcmUgYWJvdXQgZWl0aGVyIHJldHVybmluZyBhIHZhbHVlIChlLmcuLCBmdW5jdGlvbmFsCm1pZGRsZXdhcmVzKSBvciBzZXR0aW5nIGEgdmFsdWUgb24gYW4gb2JqZWN0LiBHdXp6bGUgdjYgaGFzIGNob3NlbiB0aGUKZnVuY3Rpb25hbCBtaWRkbGV3YXJlIGFwcHJvYWNoLgoKSW5zdGVhZCBvZiB1c2luZyB0aGUgZXZlbnQgc3lzdGVtIHRvIGxpc3RlbiBmb3IgdGhpbmdzIGxpa2UgdGhlIGBiZWZvcmVgIGV2ZW50LAp5b3Ugbm93IGNyZWF0ZSBhIHN0YWNrIGJhc2VkIG1pZGRsZXdhcmUgZnVuY3Rpb24gdGhhdCBpbnRlcmNlcHRzIGEgcmVxdWVzdCBvbgp0aGUgd2F5IGluIGFuZCB0aGUgcHJvbWlzZSBvZiB0aGUgcmVzcG9uc2Ugb24gdGhlIHdheSBvdXQuIFRoaXMgaXMgYSBtdWNoCnNpbXBsZXIgYW5kIG1vcmUgcHJlZGljdGFibGUgYXBwcm9hY2ggdGhhbiB0aGUgZXZlbnQgc3lzdGVtIGFuZCB3b3JrcyBuaWNlbHkKd2l0aCBQU1ItNyBtaWRkbGV3YXJlLiBEdWUgdG8gdGhlIHVzZSBvZiBwcm9taXNlcywgdGhlIG1pZGRsZXdhcmUgc3lzdGVtIGlzCmFsc28gYXN5bmNocm9ub3VzLgoKdjU6CgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcRXZlbnRcQmVmb3JlRXZlbnQ7CiRjbGllbnQgPSBuZXcgR3V6emxlSHR0cFxDbGllbnQoKTsKLy8gR2V0IHRoZSBlbWl0dGVyIGFuZCBsaXN0ZW4gdG8gdGhlIGJlZm9yZSBldmVudC4KJGNsaWVudC0+Z2V0RW1pdHRlcigpLT5vbignYmVmb3JlJywgZnVuY3Rpb24gKEJlZm9yZUV2ZW50ICRlKSB7CiAgICAvLyBHdXp6bGUgdjUgZXZlbnRzIHJlbGllZCBvbiBtdXRhdGlvbgogICAgJGUtPmdldFJlcXVlc3QoKS0+c2V0SGVhZGVyKCdYLUZvbycsICdCYXInKTsKfSk7CmBgYAoKdjY6CgpJbiB2NiwgeW91IGNhbiBtb2RpZnkgdGhlIHJlcXVlc3QgYmVmb3JlIGl0IGlzIHNlbnQgdXNpbmcgdGhlIGBtYXBSZXF1ZXN0YAptaWRkbGV3YXJlLiBUaGUgaWRpb21hdGljIHdheSBpbiB2NiB0byBtb2RpZnkgdGhlIHJlcXVlc3QvcmVzcG9uc2UgbGlmZWN5Y2xlIGlzCnRvIHNldHVwIGEgaGFuZGxlciBtaWRkbGV3YXJlIHN0YWNrIHVwIGZyb250IGFuZCBpbmplY3QgdGhlIGhhbmRsZXIgaW50byBhCmNsaWVudC4KCmBgYHBocAp1c2UgR3V6emxlSHR0cFxNaWRkbGV3YXJlOwovLyBDcmVhdGUgYSBoYW5kbGVyIHN0YWNrIHRoYXQgaGFzIGFsbCBvZiB0aGUgZGVmYXVsdCBtaWRkbGV3YXJlcyBhdHRhY2hlZAokaGFuZGxlciA9IEd1enpsZUh0dHBcSGFuZGxlclN0YWNrOjpjcmVhdGUoKTsKLy8gUHVzaCB0aGUgaGFuZGxlciBvbnRvIHRoZSBoYW5kbGVyIHN0YWNrCiRoYW5kbGVyLT5wdXNoKE1pZGRsZXdhcmU6Om1hcFJlcXVlc3QoZnVuY3Rpb24gKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QpIHsKICAgIC8vIE5vdGljZSB0aGF0IHdlIGhhdmUgdG8gcmV0dXJuIGEgcmVxdWVzdCBvYmplY3QKICAgIHJldHVybiAkcmVxdWVzdC0+d2l0aEhlYWRlcignWC1Gb28nLCAnQmFyJyk7Cn0pKTsKLy8gSW5qZWN0IHRoZSBoYW5kbGVyIGludG8gdGhlIGNsaWVudAokY2xpZW50ID0gbmV3IEd1enpsZUh0dHBcQ2xpZW50KFsnaGFuZGxlcicgPT4gJGhhbmRsZXJdKTsKYGBgCgojIyBQT1NUIFJlcXVlc3RzCgpUaGlzIHZlcnNpb24gYWRkZWQgdGhlIFtgZm9ybV9wYXJhbXNgXShodHRwczovL2RvY3MuZ3V6emxlcGhwLm9yZy9lbi9sYXRlc3QvcmVxdWVzdC1vcHRpb25zLmh0bWwjZm9ybV9wYXJhbXMpCmFuZCBgbXVsdGlwYXJ0YCByZXF1ZXN0IG9wdGlvbnMuIGBmb3JtX3BhcmFtc2AgaXMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YKc3RyaW5ncyBvciBhcnJheSBvZiBzdHJpbmdzIGFuZCBpcyB1c2VkIHRvIHNlcmlhbGl6ZSBhbgpgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkYCBQT1NUIHJlcXVlc3QuIFRoZQpbYG11bHRpcGFydGBdKGh0dHBzOi8vZG9jcy5ndXp6bGVwaHAub3JnL2VuL2xhdGVzdC9yZXF1ZXN0LW9wdGlvbnMuaHRtbCNtdWx0aXBhcnQpCm9wdGlvbiBpcyBub3cgdXNlZCB0byBzZW5kIGEgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBQT1NUIHJlcXVlc3QuCgpgR3V6emxlSHR0cFxQb3N0XFBvc3RGaWxlYCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdGhlIGBtdWx0aXBhcnRgIG9wdGlvbiB0byBhZGQKUE9TVCBmaWxlcyB0byBhIG11bHRpcGFydC9mb3JtLWRhdGEgcmVxdWVzdC4KClRoZSBgYm9keWAgb3B0aW9uIG5vIGxvbmdlciBhY2NlcHRzIGFuIGFycmF5IHRvIHNlbmQgUE9TVCByZXF1ZXN0cy4gUGxlYXNlIHVzZQpgbXVsdGlwYXJ0YCBvciBgZm9ybV9wYXJhbXNgIGluc3RlYWQuCgpUaGUgYGJhc2VfdXJsYCBvcHRpb24gaGFzIGJlZW4gcmVuYW1lZCB0byBgYmFzZV91cmlgLgoKNC54IHRvIDUuMAotLS0tLS0tLS0tCgojIyBSZXdyaXR0ZW4gQWRhcHRlciBMYXllcgoKR3V6emxlIG5vdyB1c2VzIFtSaW5nUEhQXShodHRwczovL3JpbmdwaHAucmVhZHRoZWRvY3Mub3JnL2VuL2xhdGVzdCkgdG8gc2VuZApIVFRQIHJlcXVlc3RzLiBUaGUgYGFkYXB0ZXJgIG9wdGlvbiBpbiBhIGBHdXp6bGVIdHRwXENsaWVudGAgY29uc3RydWN0b3IKaXMgc3RpbGwgc3VwcG9ydGVkLCBidXQgaXQgaGFzIG5vdyBiZWVuIHJlbmFtZWQgdG8gYGhhbmRsZXJgLiBJbnN0ZWFkIG9mCnBhc3NpbmcgYSBgR3V6emxlSHR0cFxBZGFwdGVyXEFkYXB0ZXJJbnRlcmZhY2VgLCB5b3UgbXVzdCBub3cgcGFzcyBhIFBIUApgY2FsbGFibGVgIHRoYXQgZm9sbG93cyB0aGUgUmluZ1BIUCBzcGVjaWZpY2F0aW9uLgoKIyMgUmVtb3ZlZCBGbHVlbnQgSW50ZXJmYWNlcwoKW0ZsdWVudCBpbnRlcmZhY2VzIHdlcmUgcmVtb3ZlZF0oaHR0cHM6Ly9vY3JhbWl1cy5naXRodWIuaW8vYmxvZy9mbHVlbnQtaW50ZXJmYWNlcy1hcmUtZXZpbC8pCmZyb20gdGhlIGZvbGxvd2luZyBjbGFzc2VzOgoKLSBgR3V6emxlSHR0cFxDb2xsZWN0aW9uYAotIGBHdXp6bGVIdHRwXFVybGAKLSBgR3V6emxlSHR0cFxRdWVyeWAKLSBgR3V6emxlSHR0cFxQb3N0XFBvc3RCb2R5YAotIGBHdXp6bGVIdHRwXENvb2tpZVxTZXRDb29raWVgCgojIyBSZW1vdmVkIGZ1bmN0aW9ucy5waHAKClJlbW92ZWQgImZ1bmN0aW9ucy5waHAiLCBzbyB0aGF0IEd1enpsZSBpcyB0cnVseSBQU1ItNCBjb21wbGlhbnQuIFRoZSBmb2xsb3dpbmcKZnVuY3Rpb25zIGNhbiBiZSB1c2VkIGFzIHJlcGxhY2VtZW50cy4KCi0gYEd1enpsZUh0dHBcanNvbl9kZWNvZGVgIC0+IGBHdXp6bGVIdHRwXFV0aWxzOjpqc29uRGVjb2RlYAotIGBHdXp6bGVIdHRwXGdldF9wYXRoYCAtPiBgR3V6emxlSHR0cFxVdGlsczo6Z2V0UGF0aGAKLSBgR3V6emxlSHR0cFxVdGlsczo6c2V0UGF0aGAgLT4gYEd1enpsZUh0dHBcc2V0X3BhdGhgCi0gYEd1enpsZUh0dHBcUG9vbDo6YmF0Y2hgIC0+IGBHdXp6bGVIdHRwXGJhdGNoYC4gVGhpcyBmdW5jdGlvbiBpcywgaG93ZXZlciwKICBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHVzaW5nIGBHdXp6bGVIdHRwXFBvb2w6OmJhdGNoKClgLgoKVGhlICJwcm9jZWR1cmFsIiBnbG9iYWwgY2xpZW50IGhhcyBiZWVuIHJlbW92ZWQgd2l0aCBubyByZXBsYWNlbWVudCAoZS5nLiwKYEd1enpsZUh0dHBcZ2V0KClgLCBgR3V6emxlSHR0cFxwb3N0KClgLCBldGMuKS4gVXNlIGEgYEd1enpsZUh0dHBcQ2xpZW50YApvYmplY3QgYXMgYSByZXBsYWNlbWVudC4KCiMjIGB0aHJvd0ltbWVkaWF0ZWx5YCBoYXMgYmVlbiByZW1vdmVkCgpUaGUgY29uY2VwdCBvZiAidGhyb3dJbW1lZGlhdGVseSIgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIGV4Y2VwdGlvbnMgYW5kIGVycm9yCmV2ZW50cy4gVGhpcyBjb250cm9sIG1lY2hhbmlzbSB3YXMgdXNlZCB0byBzdG9wIGEgdHJhbnNmZXIgb2YgY29uY3VycmVudApyZXF1ZXN0cyBmcm9tIGNvbXBsZXRpbmcuIFRoaXMgY2FuIG5vdyBiZSBoYW5kbGVkIGJ5IHRocm93aW5nIHRoZSBleGNlcHRpb24gb3IKYnkgY2FuY2VsbGluZyBhIHBvb2wgb2YgcmVxdWVzdHMgb3IgZWFjaCBvdXRzdGFuZGluZyBmdXR1cmUgcmVxdWVzdAppbmRpdmlkdWFsbHkuCgojIyBoZWFkZXJzIGV2ZW50IGhhcyBiZWVuIHJlbW92ZWQKClJlbW92ZWQgdGhlICJoZWFkZXJzIiBldmVudC4gVGhpcyBldmVudCB3YXMgb25seSB1c2VmdWwgZm9yIGNoYW5naW5nIHRoZQpib2R5IGEgcmVzcG9uc2Ugb25jZSB0aGUgaGVhZGVycyBvZiB0aGUgcmVzcG9uc2Ugd2VyZSBrbm93bi4gWW91IGNhbiBpbXBsZW1lbnQKYSBzaW1pbGFyIGJlaGF2aW9yIGluIGEgbnVtYmVyIG9mIHdheXMuIE9uZSBleGFtcGxlIG1pZ2h0IGJlIHRvIHVzZSBhCkZuU3RyZWFtIHRoYXQgaGFzIGFjY2VzcyB0byB0aGUgdHJhbnNhY3Rpb24gYmVpbmcgc2VudC4gRm9yIGV4YW1wbGUsIHdoZW4gdGhlCmZpcnN0IGJ5dGUgaXMgd3JpdHRlbiwgeW91IGNvdWxkIGNoZWNrIGlmIHRoZSByZXNwb25zZSBoZWFkZXJzIG1hdGNoIHlvdXIKZXhwZWN0YXRpb25zLCBhbmQgaWYgc28sIGNoYW5nZSB0aGUgYWN0dWFsIHN0cmVhbSBib2R5IHRoYXQgaXMgYmVpbmcKd3JpdHRlbiB0by4KCiMjIFVwZGF0ZXMgdG8gSFRUUCBNZXNzYWdlcwoKUmVtb3ZlZCB0aGUgYGFzQXJyYXlgIHBhcmFtZXRlciBmcm9tCmBHdXp6bGVIdHRwXE1lc3NhZ2VcTWVzc2FnZUludGVyZmFjZTo6Z2V0SGVhZGVyYC4gSWYgeW91IHdhbnQgdG8gZ2V0IGEgaGVhZGVyCnZhbHVlIGFzIGFuIGFycmF5LCB0aGVuIHVzZSB0aGUgbmV3bHkgYWRkZWQgYGdldEhlYWRlckFzQXJyYXkoKWAgbWV0aG9kIG9mCmBNZXNzYWdlSW50ZXJmYWNlYC4gVGhpcyBjaGFuZ2UgbWFrZXMgdGhlIEd1enpsZSBpbnRlcmZhY2VzIGNvbXBhdGlibGUgd2l0aAp0aGUgUFNSLTcgaW50ZXJmYWNlcy4KCjMueCB0byA0LjAKLS0tLS0tLS0tLQoKIyMgT3ZlcmFyY2hpbmcgY2hhbmdlczoKCi0gTm93IHJlcXVpcmVzIFBIUCA1LjQgb3IgZ3JlYXRlci4KLSBObyBsb25nZXIgcmVxdWlyZXMgY1VSTCB0byBzZW5kIHJlcXVlc3RzLgotIEd1enpsZSBubyBsb25nZXIgd3JhcHMgZXZlcnkgZXhjZXB0aW9uIGl0IHRocm93cy4gT25seSBleGNlcHRpb25zIHRoYXQgYXJlCiAgcmVjb3ZlcmFibGUgYXJlIG5vdyB3cmFwcGVkIGJ5IEd1enpsZS4KLSBWYXJpb3VzIG5hbWVzcGFjZXMgaGF2ZSBiZWVuIHJlbW92ZWQgb3IgcmVuYW1lZC4KLSBObyBsb25nZXIgcmVxdWlyaW5nIHRoZSBTeW1mb255IEV2ZW50RGlzcGF0Y2hlci4gQSBjdXN0b20gZXZlbnQgZGlzcGF0Y2hlcgogIGJhc2VkIG9uIHRoZSBTeW1mb255IEV2ZW50RGlzcGF0Y2hlciBpcwogIG5vdyB1dGlsaXplZCBpbiBgR3V6emxlSHR0cFxFdmVudFxFbWl0dGVySW50ZXJmYWNlYCAocmVzdWx0aW5nIGluIHNpZ25pZmljYW50CiAgc3BlZWQgYW5kIGZ1bmN0aW9uYWxpdHkgaW1wcm92ZW1lbnRzKS4KCkNoYW5nZXMgcGVyIEd1enpsZSAzLnggbmFtZXNwYWNlIGFyZSBkZXNjcmliZWQgYmVsb3cuCgojIyBCYXRjaAoKVGhlIGBHdXp6bGVcQmF0Y2hgIG5hbWVzcGFjZSBoYXMgYmVlbiByZW1vdmVkLiBUaGlzIGlzIGJlc3QgbGVmdCB0bwp0aGlyZC1wYXJ0aWVzIHRvIGltcGxlbWVudCBvbiB0b3Agb2YgR3V6emxlJ3MgY29yZSBIVFRQIGxpYnJhcnkuCgojIyBDYWNoZQoKVGhlIGBHdXp6bGVcQ2FjaGVgIG5hbWVzcGFjZSBoYXMgYmVlbiByZW1vdmVkLiAoVG9kbzogTm8gc3VpdGFibGUgcmVwbGFjZW1lbnQKaGFzIGJlZW4gaW1wbGVtZW50ZWQgeWV0LCBidXQgaG9waW5nIHRvIHV0aWxpemUgYSBQU1IgY2FjaGUgaW50ZXJmYWNlKS4KCiMjIENvbW1vbgoKLSBSZW1vdmVkIGFsbCBvZiB0aGUgd3JhcHBlZCBleGNlcHRpb25zLiBJdCdzIGJldHRlciB0byB1c2UgdGhlIHN0YW5kYXJkIFBIUAogIGxpYnJhcnkgZm9yIHVucmVjb3ZlcmFibGUgZXhjZXB0aW9ucy4KLSBgRnJvbUNvbmZpZ0ludGVyZmFjZWAgaGFzIGJlZW4gcmVtb3ZlZC4KLSBgR3V6emxlXENvbW1vblxWZXJzaW9uYCBoYXMgYmVlbiByZW1vdmVkLiBUaGUgVkVSU0lPTiBjb25zdGFudCBjYW4gYmUgZm91bmQKICBhdCBgR3V6emxlSHR0cFxDbGllbnRJbnRlcmZhY2U6OlZFUlNJT05gLgoKIyMjIENvbGxlY3Rpb24KCi0gYGdldEFsbGAgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGB0b0FycmF5YCB0byBjb252ZXJ0IGEgY29sbGVjdGlvbiB0byBhbiBhcnJheS4KLSBgaW5qZWN0YCBoYXMgYmVlbiByZW1vdmVkLgotIGBrZXlTZWFyY2hgIGhhcyBiZWVuIHJlbW92ZWQuCi0gYGdldFBhdGhgIG5vIGxvbmdlciBzdXBwb3J0cyB3aWxkY2FyZCBleHByZXNzaW9ucy4gVXNlIHNvbWV0aGluZyBiZXR0ZXIgbGlrZQogIEpNRVNQYXRoIGZvciB0aGlzLgotIGBzZXRQYXRoYCBub3cgc3VwcG9ydHMgYXBwZW5kaW5nIHRvIGFuIGV4aXN0aW5nIGFycmF5IHZpYSB0aGUgYFtdYCBub3RhdGlvbi4KCiMjIyBFdmVudHMKCkd1enpsZSBubyBsb25nZXIgcmVxdWlyZXMgU3ltZm9ueSdzIEV2ZW50RGlzcGF0Y2hlciBjb21wb25lbnQuIEd1enpsZSBub3cgdXNlcwpgR3V6emxlSHR0cFxFdmVudFxFbWl0dGVyYC4KCi0gYFN5bWZvbnlcQ29tcG9uZW50XEV2ZW50RGlzcGF0Y2hlclxFdmVudERpc3BhdGNoZXJJbnRlcmZhY2VgIGlzIHJlcGxhY2VkIGJ5CiAgYEd1enpsZUh0dHBcRXZlbnRcRW1pdHRlckludGVyZmFjZWAuCi0gYFN5bWZvbnlcQ29tcG9uZW50XEV2ZW50RGlzcGF0Y2hlclxFdmVudERpc3BhdGNoZXJgIGlzIHJlcGxhY2VkIGJ5CiAgYEd1enpsZUh0dHBcRXZlbnRcRW1pdHRlcmAuCi0gYFN5bWZvbnlcQ29tcG9uZW50XEV2ZW50RGlzcGF0Y2hlclxFdmVudGAgaXMgcmVwbGFjZWQgYnkKICBgR3V6emxlSHR0cFxFdmVudFxFdmVudGAsIGFuZCBHdXp6bGUgbm93IGhhcyBhbiBFdmVudEludGVyZmFjZSBpbgogIGBHdXp6bGVIdHRwXEV2ZW50XEV2ZW50SW50ZXJmYWNlYC4KLSBgQWJzdHJhY3RIYXNEaXNwYXRjaGVyYCBoYXMgbW92ZWQgdG8gYSB0cmFpdCwgYEhhc0VtaXR0ZXJUcmFpdGAsIGFuZAogIGBIYXNEaXNwYXRjaGVySW50ZXJmYWNlYCBoYXMgbW92ZWQgdG8gYEhhc0VtaXR0ZXJJbnRlcmZhY2VgLiBSZXRyaWV2aW5nIHRoZQogIGV2ZW50IGVtaXR0ZXIgb2YgYSByZXF1ZXN0LCBjbGllbnQsIGV0Yy4gbm93IHVzZXMgdGhlIGBnZXRFbWl0dGVyYCBtZXRob2QKICByYXRoZXIgdGhhbiB0aGUgYGdldERpc3BhdGNoZXJgIG1ldGhvZC4KCiMjIyMgRW1pdHRlcgoKLSBVc2UgdGhlIGBvbmNlKClgIG1ldGhvZCB0byBhZGQgYSBsaXN0ZW5lciB0aGF0IGF1dG9tYXRpY2FsbHkgcmVtb3ZlcyBpdHNlbGYKICB0aGUgZmlyc3QgdGltZSBpdCBpcyBpbnZva2VkLgotIFVzZSB0aGUgYGxpc3RlbmVycygpYCBtZXRob2QgdG8gcmV0cmlldmUgYSBsaXN0IG9mIGV2ZW50IGxpc3RlbmVycyByYXRoZXIgdGhhbgogIHRoZSBgZ2V0TGlzdGVuZXJzKClgIG1ldGhvZC4KLSBVc2UgYGVtaXQoKWAgaW5zdGVhZCBvZiBgZGlzcGF0Y2goKWAgdG8gZW1pdCBhbiBldmVudCBmcm9tIGFuIGVtaXR0ZXIuCi0gVXNlIGBhdHRhY2goKWAgaW5zdGVhZCBvZiBgYWRkU3Vic2NyaWJlcigpYCBhbmQgYGRldGFjaCgpYCBpbnN0ZWFkIG9mCiAgYHJlbW92ZVN1YnNjcmliZXIoKWAuCgpgYGBwaHAKJG1vY2sgPSBuZXcgTW9jaygpOwovLyAzLngKJHJlcXVlc3QtPmdldEV2ZW50RGlzcGF0Y2hlcigpLT5hZGRTdWJzY3JpYmVyKCRtb2NrKTsKJHJlcXVlc3QtPmdldEV2ZW50RGlzcGF0Y2hlcigpLT5yZW1vdmVTdWJzY3JpYmVyKCRtb2NrKTsKLy8gNC54CiRyZXF1ZXN0LT5nZXRFbWl0dGVyKCktPmF0dGFjaCgkbW9jayk7CiRyZXF1ZXN0LT5nZXRFbWl0dGVyKCktPmRldGFjaCgkbW9jayk7CmBgYAoKVXNlIHRoZSBgb24oKWAgbWV0aG9kIHRvIGFkZCBhIGxpc3RlbmVyIHJhdGhlciB0aGFuIHRoZSBgYWRkTGlzdGVuZXIoKWAgbWV0aG9kLgoKYGBgcGhwCi8vIDMueAokcmVxdWVzdC0+Z2V0RXZlbnREaXNwYXRjaGVyKCktPmFkZExpc3RlbmVyKCdmb28nLCBmdW5jdGlvbiAoRXZlbnQgJGV2ZW50KSB7IC8qIC4uLiAqLyB9ICk7Ci8vIDQueAokcmVxdWVzdC0+Z2V0RW1pdHRlcigpLT5vbignZm9vJywgZnVuY3Rpb24gKEV2ZW50ICRldmVudCwgJG5hbWUpIHsgLyogLi4uICovIH0gKTsKYGBgCgojIyBIdHRwCgojIyMgR2VuZXJhbCBjaGFuZ2VzCgotIFRoZSBjYWNlcnQucGVtIGNlcnRpZmljYXRlIGhhcyBiZWVuIG1vdmVkIHRvIGBzcmMvY2FjZXJ0LnBlbWAuCi0gQWRkZWQgdGhlIGNvbmNlcHQgb2YgYWRhcHRlcnMgdGhhdCBhcmUgdXNlZCB0byB0cmFuc2ZlciByZXF1ZXN0cyBvdmVyIHRoZQogIHdpcmUuCi0gU2ltcGxpZmllZCB0aGUgZXZlbnQgc3lzdGVtLgotIFNlbmRpbmcgcmVxdWVzdHMgaW4gcGFyYWxsZWwgaXMgc3RpbGwgcG9zc2libGUsIGJ1dCBiYXRjaGluZyBpcyBubyBsb25nZXIgYQogIGNvbmNlcHQgb2YgdGhlIEhUVFAgbGF5ZXIuIEluc3RlYWQsIHlvdSBtdXN0IHVzZSB0aGUgYGNvbXBsZXRlYCBhbmQgYGVycm9yYAogIGV2ZW50cyB0byBhc3luY2hyb25vdXNseSBtYW5hZ2UgcGFyYWxsZWwgcmVxdWVzdCB0cmFuc2ZlcnMuCi0gYEd1enpsZVxIdHRwXFVybGAgaGFzIG1vdmVkIHRvIGBHdXp6bGVIdHRwXFVybGAuCi0gYEd1enpsZVxIdHRwXFF1ZXJ5U3RyaW5nYCBoYXMgbW92ZWQgdG8gYEd1enpsZUh0dHBcUXVlcnlgLgotIFF1ZXJ5QWdncmVnYXRvcnMgaGF2ZSBiZWVuIHJld3JpdHRlbiBzbyB0aGF0IHRoZXkgYXJlIHNpbXBseSBjYWxsYWJsZQogIGZ1bmN0aW9ucy4KLSBgR3V6emxlSHR0cFxTdGF0aWNDbGllbnRgIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgZnVuY3Rpb25zIHByb3ZpZGVkIGluCiAgYGZ1bmN0aW9ucy5waHBgIGZvciBhbiBlYXN5IHRvIHVzZSBzdGF0aWMgY2xpZW50IGluc3RhbmNlLgotIEV4Y2VwdGlvbnMgaW4gYEd1enpsZUh0dHBcRXhjZXB0aW9uYCBoYXZlIGJlZW4gdXBkYXRlZCB0byBhbGwgZXh0ZW5kIGZyb20KICBgR3V6emxlSHR0cFxFeGNlcHRpb25cVHJhbnNmZXJFeGNlcHRpb25gLgoKIyMjIENsaWVudAoKQ2FsbGluZyBtZXRob2RzIGxpa2UgYGdldCgpYCwgYHBvc3QoKWAsIGBoZWFkKClgLCBldGMuIG5vIGxvbmdlciBjcmVhdGUgYW5kCnJldHVybiBhIHJlcXVlc3QsIGJ1dCByYXRoZXIgY3JlYXRlcyBhIHJlcXVlc3QsIHNlbmRzIHRoZSByZXF1ZXN0LCBhbmQgcmV0dXJucwp0aGUgcmVzcG9uc2UuCgpgYGBwaHAKLy8gMy4wCiRyZXF1ZXN0ID0gJGNsaWVudC0+Z2V0KCcvJyk7CiRyZXNwb25zZSA9ICRyZXF1ZXN0LT5zZW5kKCk7CgovLyA0LjAKJHJlc3BvbnNlID0gJGNsaWVudC0+Z2V0KCcvJyk7CgovLyBvciwgdG8gbWlycm9yIHRoZSBwcmV2aW91cyBiZWhhdmlvcgokcmVxdWVzdCA9ICRjbGllbnQtPmNyZWF0ZVJlcXVlc3QoJ0dFVCcsICcvJyk7CiRyZXNwb25zZSA9ICRjbGllbnQtPnNlbmQoJHJlcXVlc3QpOwpgYGAKCmBHdXp6bGVIdHRwXENsaWVudEludGVyZmFjZWAgaGFzIGNoYW5nZWQuCgotIFRoZSBgc2VuZGAgbWV0aG9kIG5vIGxvbmdlciBhY2NlcHRzIG1vcmUgdGhhbiBvbmUgcmVxdWVzdC4gVXNlIGBzZW5kQWxsYCB0bwogIHNlbmQgbXVsdGlwbGUgcmVxdWVzdHMgaW4gcGFyYWxsZWwuCi0gYHNldFVzZXJBZ2VudCgpYCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYSBkZWZhdWx0IHJlcXVlc3Qgb3B0aW9uIGluc3RlYWQuIFlvdQogIGNvdWxkLCBmb3IgZXhhbXBsZSwgZG8gc29tZXRoaW5nIGxpa2U6CiAgYCRjbGllbnQtPnNldENvbmZpZygnZGVmYXVsdHMvaGVhZGVycy9Vc2VyLUFnZW50JywgJ0Zvby9CYXIgJyAuICRjbGllbnQ6OmdldERlZmF1bHRVc2VyQWdlbnQoKSlgLgotIGBzZXRTc2xWZXJpZmljYXRpb24oKWAgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGRlZmF1bHQgcmVxdWVzdCBvcHRpb25zIGluc3RlYWQsCiAgbGlrZSBgJGNsaWVudC0+c2V0Q29uZmlnKCdkZWZhdWx0cy92ZXJpZnknLCB0cnVlKWAuCgpgR3V6emxlSHR0cFxDbGllbnRgIGhhcyBjaGFuZ2VkLgoKLSBUaGUgY29uc3RydWN0b3Igbm93IGFjY2VwdHMgb25seSBhbiBhc3NvY2lhdGl2ZSBhcnJheS4gWW91IGNhbiBpbmNsdWRlIGEKICBgYmFzZV91cmxgIHN0cmluZyBvciBhcnJheSB0byB1c2UgYSBVUkkgdGVtcGxhdGUgYXMgdGhlIGJhc2UgVVJMIG9mIGEgY2xpZW50LgogIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGEgYGRlZmF1bHRzYCBrZXkgdGhhdCBpcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBkZWZhdWx0CiAgcmVxdWVzdCBvcHRpb25zLiBZb3UgY2FuIHBhc3MgYW4gYGFkYXB0ZXJgIHRvIHVzZSBhIGN1c3RvbSBhZGFwdGVyLAogIGBiYXRjaF9hZGFwdGVyYCB0byB1c2UgYSBjdXN0b20gYWRhcHRlciBmb3Igc2VuZGluZyByZXF1ZXN0cyBpbiBwYXJhbGxlbCwgb3IKICBhIGBtZXNzYWdlX2ZhY3RvcnlgIHRvIGNoYW5nZSB0aGUgZmFjdG9yeSB1c2VkIHRvIGNyZWF0ZSBIVFRQIHJlcXVlc3RzIGFuZAogIHJlc3BvbnNlcy4KLSBUaGUgY2xpZW50IG5vIGxvbmdlciBlbWl0cyBhIGBjbGllbnQuY3JlYXRlX3JlcXVlc3RgIGV2ZW50LgotIENyZWF0aW5nIHJlcXVlc3RzIHdpdGggYSBjbGllbnQgbm8gbG9uZ2VyIGF1dG9tYXRpY2FsbHkgdXRpbGl6ZSBhIFVSSQogIHRlbXBsYXRlLiBZb3UgbXVzdCBwYXNzIGFuIGFycmF5IGludG8gYSBjcmVhdGlvbmFsIG1ldGhvZCAoZS5nLiwKICBgY3JlYXRlUmVxdWVzdGAsIGBnZXRgLCBgcHV0YCwgZXRjLikgaW4gb3JkZXIgdG8gZXhwYW5kIGEgVVJJIHRlbXBsYXRlLgoKIyMjIE1lc3NhZ2VzCgpNZXNzYWdlcyBubyBsb25nZXIgaGF2ZSByZWZlcmVuY2VzIHRvIHRoZWlyIGNvdW50ZXJwYXJ0cyAoaS5lLiwgYSByZXF1ZXN0IG5vCmxvbmdlciBoYXMgYSByZWZlcmVuY2UgdG8gaXQncyByZXNwb25zZSwgYW5kIGEgcmVzcG9uc2Ugbm8gbG9nZXIgaGFzIGEKcmVmZXJlbmNlIHRvIGl0cyByZXF1ZXN0KS4gVGhpcyBhc3NvY2lhdGlvbiBpcyBub3cgbWFuYWdlZCB0aHJvdWdoIGEKYEd1enpsZUh0dHBcQWRhcHRlclxUcmFuc2FjdGlvbkludGVyZmFjZWAgb2JqZWN0LiBZb3UgY2FuIGdldCByZWZlcmVuY2VzIHRvCnRoZXNlIHRyYW5zYWN0aW9uIG9iamVjdHMgdXNpbmcgcmVxdWVzdCBldmVudHMgdGhhdCBhcmUgZW1pdHRlZCBvdmVyIHRoZQpsaWZlY3ljbGUgb2YgYSByZXF1ZXN0LgoKIyMjIyBSZXF1ZXN0cyB3aXRoIGEgYm9keQoKLSBgR3V6emxlSHR0cFxNZXNzYWdlXEVudGl0eUVuY2xvc2luZ1JlcXVlc3RgIGFuZAogIGBHdXp6bGVIdHRwXE1lc3NhZ2VcRW50aXR5RW5jbG9zaW5nUmVxdWVzdEludGVyZmFjZWAgaGF2ZSBiZWVuIHJlbW92ZWQuIFRoZQogIHNlcGFyYXRpb24gYmV0d2VlbiByZXF1ZXN0cyB0aGF0IGNvbnRhaW4gYSBib2R5IGFuZCByZXF1ZXN0cyB0aGF0IGRvIG5vdAogIGNvbnRhaW4gYSBib2R5IGhhcyBiZWVuIHJlbW92ZWQsIGFuZCBub3cgYEd1enpsZUh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlYAogIGhhbmRsZXMgYm90aCB1c2UgY2FzZXMuCi0gQW55IG1ldGhvZCB0aGF0IHByZXZpb3VzbHkgYWNjZXB0cyBhIGBHdXp6bGVIdHRwXFJlc3BvbnNlYCBvYmplY3Qgbm93IGFjY2VwdCBhCiAgYEd1enpsZUh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZWAuCi0gYEd1enpsZUh0dHBcTWVzc2FnZVxSZXF1ZXN0RmFjdG9yeUludGVyZmFjZWAgaGFzIGJlZW4gcmVuYW1lZCB0bwogIGBHdXp6bGVIdHRwXE1lc3NhZ2VcTWVzc2FnZUZhY3RvcnlJbnRlcmZhY2VgLiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIGNyZWF0ZQogIGJvdGggcmVxdWVzdHMgYW5kIHJlc3BvbnNlcyBhbmQgaXMgaW1wbGVtZW50ZWQgaW4KICBgR3V6emxlSHR0cFxNZXNzYWdlXE1lc3NhZ2VGYWN0b3J5YC4KLSBQT1NUIGZpZWxkIGFuZCBmaWxlIG1ldGhvZHMgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgcmVxdWVzdCBvYmplY3QuIFlvdQogIG11c3Qgbm93IHVzZSB0aGUgbWV0aG9kcyBtYWRlIGF2YWlsYWJsZSB0byBgR3V6emxlSHR0cFxQb3N0XFBvc3RCb2R5SW50ZXJmYWNlYAogIHRvIGNvbnRyb2wgdGhlIGZvcm1hdCBvZiBhIFBPU1QgYm9keS4gUmVxdWVzdHMgdGhhdCBhcmUgY3JlYXRlZCB1c2luZyBhCiAgc3RhbmRhcmQgYEd1enpsZUh0dHBcTWVzc2FnZVxNZXNzYWdlRmFjdG9yeUludGVyZmFjZWAgd2lsbCBhdXRvbWF0aWNhbGx5IHVzZQogIGEgYEd1enpsZUh0dHBcUG9zdFxQb3N0Qm9keWAgYm9keSBpZiB0aGUgYm9keSB3YXMgcGFzc2VkIGFzIGFuIGFycmF5IG9yIGlmCiAgdGhlIG1ldGhvZCBpcyBQT1NUIGFuZCBubyBib2R5IGlzIHByb3ZpZGVkLgoKYGBgcGhwCiRyZXF1ZXN0ID0gJGNsaWVudC0+Y3JlYXRlUmVxdWVzdCgnUE9TVCcsICcvJyk7CiRyZXF1ZXN0LT5nZXRCb2R5KCktPnNldEZpZWxkKCdmb28nLCAnYmFyJyk7CiRyZXF1ZXN0LT5nZXRCb2R5KCktPmFkZEZpbGUobmV3IFBvc3RGaWxlKCdmaWxlX2tleScsIGZvcGVuKCcvcGF0aC90by9jb250ZW50JywgJ3InKSkpOwpgYGAKCiMjIyMgSGVhZGVycwoKLSBgR3V6emxlSHR0cFxNZXNzYWdlXEhlYWRlcmAgaGFzIGJlZW4gcmVtb3ZlZC4gSGVhZGVyIHZhbHVlcyBhcmUgbm93IHNpbXBseQogIHJlcHJlc2VudGVkIGJ5IGFuIGFycmF5IG9mIHZhbHVlcyBvciBhcyBhIHN0cmluZy4gSGVhZGVyIHZhbHVlcyBhcmUgcmV0dXJuZWQKICBhcyBhIHN0cmluZyBieSBkZWZhdWx0IHdoZW4gcmV0cmlldmluZyBhIGhlYWRlciB2YWx1ZSBmcm9tIGEgbWVzc2FnZS4gWW91IGNhbgogIHBhc3MgYW4gb3B0aW9uYWwgYXJndW1lbnQgb2YgYHRydWVgIHRvIHJldHJpZXZlIGEgaGVhZGVyIHZhbHVlIGFzIGFuIGFycmF5CiAgb2Ygc3RyaW5ncyBpbnN0ZWFkIG9mIGEgc2luZ2xlIGNvbmNhdGVuYXRlZCBzdHJpbmcuCi0gYEd1enpsZUh0dHBcUG9zdEZpbGVgIGFuZCBgR3V6emxlSHR0cFxQb3N0RmlsZUludGVyZmFjZWAgaGF2ZSBiZWVuIG1vdmVkIHRvCiAgYEd1enpsZUh0dHBcUG9zdGAuIFRoaXMgaW50ZXJmYWNlIGhhcyBiZWVuIHNpbXBsaWZpZWQgYW5kIG5vdyBhbGxvd3MgdGhlCiAgYWRkaXRpb24gb2YgYXJiaXRyYXJ5IGhlYWRlcnMuCi0gQ3VzdG9tIGhlYWRlcnMgbGlrZSBgR3V6emxlSHR0cFxNZXNzYWdlXEhlYWRlclxMaW5rYCBoYXZlIGJlZW4gcmVtb3ZlZC4gTW9zdAogIG9mIHRoZSBjdXN0b20gaGVhZGVycyBhcmUgbm93IGhhbmRsZWQgc2VwYXJhdGVseSBpbiBzcGVjaWZpYwogIHN1YnNjcmliZXJzL3BsdWdpbnMsIGFuZCBgR3V6emxlSHR0cFxNZXNzYWdlXEhlYWRlclZhbHVlczo6cGFyc2VQYXJhbXMoKWAgaGFzCiAgYmVlbiB1cGRhdGVkIHRvIHByb3Blcmx5IGhhbmRsZSBoZWFkZXJzIHRoYXQgY29udGFpbiBwYXJhbWV0ZXJzIChsaWtlIHRoZQogIGBMaW5rYCBoZWFkZXIpLgoKIyMjIyBSZXNwb25zZXMKCi0gYEd1enpsZUh0dHBcTWVzc2FnZVxSZXNwb25zZTo6Z2V0SW5mbygpYCBhbmQKICBgR3V6emxlSHR0cFxNZXNzYWdlXFJlc3BvbnNlOjpzZXRJbmZvKClgIGhhdmUgYmVlbiByZW1vdmVkLiBVc2UgdGhlIGV2ZW50CiAgc3lzdGVtIHRvIHJldHJpZXZlIHRoaXMgdHlwZSBvZiBpbmZvcm1hdGlvbi4KLSBgR3V6emxlSHR0cFxNZXNzYWdlXFJlc3BvbnNlOjpnZXRSYXdIZWFkZXJzKClgIGhhcyBiZWVuIHJlbW92ZWQuCi0gYEd1enpsZUh0dHBcTWVzc2FnZVxSZXNwb25zZTo6Z2V0TWVzc2FnZSgpYCBoYXMgYmVlbiByZW1vdmVkLgotIGBHdXp6bGVIdHRwXE1lc3NhZ2VcUmVzcG9uc2U6OmNhbGN1bGF0ZUFnZSgpYCBhbmQgb3RoZXIgY2FjaGUgc3BlY2lmaWMKICBtZXRob2RzIGhhdmUgbW92ZWQgdG8gdGhlIENhY2hlU3Vic2NyaWJlci4KLSBIZWFkZXIgc3BlY2lmaWMgaGVscGVyIGZ1bmN0aW9ucyBsaWtlIGBnZXRDb250ZW50TWQ1KClgIGhhdmUgYmVlbiByZW1vdmVkLgogIEp1c3QgdXNlIGBnZXRIZWFkZXIoJ0NvbnRlbnQtTUQ1JylgIGluc3RlYWQuCi0gYEd1enpsZUh0dHBcTWVzc2FnZVxSZXNwb25zZTo6c2V0UmVxdWVzdCgpYCBhbmQKICBgR3V6emxlSHR0cFxNZXNzYWdlXFJlc3BvbnNlOjpnZXRSZXF1ZXN0KClgIGhhdmUgYmVlbiByZW1vdmVkLiBVc2UgdGhlIGV2ZW50CiAgc3lzdGVtIHRvIHdvcmsgd2l0aCByZXF1ZXN0IGFuZCByZXNwb25zZSBvYmplY3RzIGFzIGEgdHJhbnNhY3Rpb24uCi0gYEd1enpsZUh0dHBcTWVzc2FnZVxSZXNwb25zZTo6Z2V0UmVkaXJlY3RDb3VudCgpYCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdGhlCiAgUmVkaXJlY3Qgc3Vic2NyaWJlciBpbnN0ZWFkLgotIGBHdXp6bGVIdHRwXE1lc3NhZ2VcUmVzcG9uc2U6OmlzU3VjY2Vzc2Z1bCgpYCBhbmQgb3RoZXIgcmVsYXRlZCBtZXRob2RzIGhhdmUKICBiZWVuIHJlbW92ZWQuIFVzZSBgZ2V0U3RhdHVzQ29kZSgpYCBpbnN0ZWFkLgoKIyMjIyBTdHJlYW1pbmcgcmVzcG9uc2VzCgpTdHJlYW1pbmcgcmVxdWVzdHMgY2FuIG5vdyBiZSBjcmVhdGVkIGJ5IGEgY2xpZW50IGRpcmVjdGx5LCByZXR1cm5pbmcgYQpgR3V6emxlSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlYCBvYmplY3QgdGhhdCBjb250YWlucyBhIGJvZHkgc3RyZWFtCnJlZmVyZW5jaW5nIGFuIG9wZW4gUEhQIEhUVFAgc3RyZWFtLgoKYGBgcGhwCi8vIDMuMAp1c2UgR3V6emxlXFN0cmVhbVxQaHBTdHJlYW1SZXF1ZXN0RmFjdG9yeTsKJHJlcXVlc3QgPSAkY2xpZW50LT5nZXQoJy8nKTsKJGZhY3RvcnkgPSBuZXcgUGhwU3RyZWFtUmVxdWVzdEZhY3RvcnkoKTsKJHN0cmVhbSA9ICRmYWN0b3J5LT5mcm9tUmVxdWVzdCgkcmVxdWVzdCk7CiRkYXRhID0gJHN0cmVhbS0+cmVhZCgxMDI0KTsKCi8vIDQuMAokcmVzcG9uc2UgPSAkY2xpZW50LT5nZXQoJy8nLCBbJ3N0cmVhbScgPT4gdHJ1ZV0pOwovLyBSZWFkIHNvbWUgZGF0YSBvZmYgb2YgdGhlIHN0cmVhbSBpbiB0aGUgcmVzcG9uc2UgYm9keQokZGF0YSA9ICRyZXNwb25zZS0+Z2V0Qm9keSgpLT5yZWFkKDEwMjQpOwpgYGAKCiMjIyMgUmVkaXJlY3RzCgpUaGUgYGNvbmZpZ3VyZVJlZGlyZWN0cygpYCBtZXRob2QgaGFzIGJlZW4gcmVtb3ZlZCBpbiBmYXZvciBvZiBhCmBhbGxvd19yZWRpcmVjdHNgIHJlcXVlc3Qgb3B0aW9uLgoKYGBgcGhwCi8vIFN0YW5kYXJkIHJlZGlyZWN0cyB3aXRoIGEgZGVmYXVsdCBvZiBhIG1heCBvZiA1IHJlZGlyZWN0cwokcmVxdWVzdCA9ICRjbGllbnQtPmNyZWF0ZVJlcXVlc3QoJ0dFVCcsICcvJywgWydhbGxvd19yZWRpcmVjdHMnID0+IHRydWVdKTsKCi8vIFN0cmljdCByZWRpcmVjdHMgd2l0aCBhIGN1c3RvbSBudW1iZXIgb2YgcmVkaXJlY3RzCiRyZXF1ZXN0ID0gJGNsaWVudC0+Y3JlYXRlUmVxdWVzdCgnR0VUJywgJy8nLCBbCiAgICAnYWxsb3dfcmVkaXJlY3RzJyA9PiBbJ21heCcgPT4gNSwgJ3N0cmljdCcgPT4gdHJ1ZV0KXSk7CmBgYAoKIyMjIyBFbnRpdHlCb2R5CgpFbnRpdHlCb2R5IGludGVyZmFjZXMgYW5kIGNsYXNzZXMgaGF2ZSBiZWVuIHJlbW92ZWQgb3IgbW92ZWQgdG8KYEd1enpsZUh0dHBcU3RyZWFtYC4gQWxsIGNsYXNzZXMgYW5kIGludGVyZmFjZXMgdGhhdCBvbmNlIHJlcXVpcmVkCmBHdXp6bGVIdHRwXEVudGl0eUJvZHlJbnRlcmZhY2VgIG5vdyByZXF1aXJlCmBHdXp6bGVIdHRwXFN0cmVhbVxTdHJlYW1JbnRlcmZhY2VgLiBDcmVhdGluZyBhIG5ldyBib2R5IGZvciBhIHJlcXVlc3Qgbm8KbG9uZ2VyIHVzZXMgYEd1enpsZUh0dHBcRW50aXR5Qm9keTo6ZmFjdG9yeWAgYnV0IG5vdyB1c2VzCmBHdXp6bGVIdHRwXFN0cmVhbVxTdHJlYW06OmZhY3RvcnlgIG9yIGV2ZW4gYmV0dGVyOgpgR3V6emxlSHR0cFxTdHJlYW1cY3JlYXRlKClgLgoKLSBgR3V6emxlXEh0dHBcRW50aXR5Qm9keUludGVyZmFjZWAgaXMgbm93IGBHdXp6bGVIdHRwXFN0cmVhbVxTdHJlYW1JbnRlcmZhY2VgCi0gYEd1enpsZVxIdHRwXEVudGl0eUJvZHlgIGlzIG5vdyBgR3V6emxlSHR0cFxTdHJlYW1cU3RyZWFtYAotIGBHdXp6bGVcSHR0cFxDYWNoaW5nRW50aXR5Qm9keWAgaXMgbm93IGBHdXp6bGVIdHRwXFN0cmVhbVxDYWNoaW5nU3RyZWFtYAotIGBHdXp6bGVcSHR0cFxSZWFkTGltaXRFbnRpdHlCb2R5YCBpcyBub3cgYEd1enpsZUh0dHBcU3RyZWFtXExpbWl0U3RyZWFtYAotIGBHdXp6bGVcSHR0cFxJb0VtaXR0eWluRW50aXR5Qm9keWAgaGFzIGJlZW4gcmVtb3ZlZC4KCiMjIyMgUmVxdWVzdCBsaWZlY3ljbGUgZXZlbnRzCgpSZXF1ZXN0cyBwcmV2aW91c2x5IHN1Ym1pdHRlZCBhIGxhcmdlIG51bWJlciBvZiByZXF1ZXN0cy4gVGhlIG51bWJlciBvZiBldmVudHMKZW1pdHRlZCBvdmVyIHRoZSBsaWZlY3ljbGUgb2YgYSByZXF1ZXN0IGhhcyBiZWVuIHNpZ25pZmljYW50bHkgcmVkdWNlZCB0byBtYWtlCml0IGVhc2llciB0byB1bmRlcnN0YW5kIGhvdyB0byBleHRlbmQgdGhlIGJlaGF2aW9yIG9mIGEgcmVxdWVzdC4gQWxsIGV2ZW50cwplbWl0dGVkIGR1cmluZyB0aGUgbGlmZWN5Y2xlIG9mIGEgcmVxdWVzdCBub3cgZW1pdCBhIGN1c3RvbQpgR3V6emxlSHR0cFxFdmVudFxFdmVudEludGVyZmFjZWAgb2JqZWN0IHRoYXQgY29udGFpbnMgY29udGV4dCBwcm92aWRpbmcKbWV0aG9kcyBhbmQgYSB3YXkgaW4gd2hpY2ggdG8gbW9kaWZ5IHRoZSB0cmFuc2FjdGlvbiBhdCB0aGF0IHNwZWNpZmljIHBvaW50IGluCnRpbWUgKGUuZy4sIGludGVyY2VwdCB0aGUgcmVxdWVzdCBhbmQgc2V0IGEgcmVzcG9uc2Ugb24gdGhlIHRyYW5zYWN0aW9uKS4KCi0gYHJlcXVlc3QuYmVmb3JlX3NlbmRgIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGJlZm9yZWAgYW5kIG5vdyBlbWl0cyBhCiAgYEd1enpsZUh0dHBcRXZlbnRcQmVmb3JlRXZlbnRgCi0gYHJlcXVlc3QuY29tcGxldGVgIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGNvbXBsZXRlYCBhbmQgbm93IGVtaXRzIGEKICBgR3V6emxlSHR0cFxFdmVudFxDb21wbGV0ZUV2ZW50YC4KLSBgcmVxdWVzdC5zZW50YCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYGNvbXBsZXRlYC4KLSBgcmVxdWVzdC5zdWNjZXNzYCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYGNvbXBsZXRlYC4KLSBgZXJyb3JgIGlzIG5vdyBhbiBldmVudCB0aGF0IGVtaXRzIGEgYEd1enpsZUh0dHBcRXZlbnRcRXJyb3JFdmVudGAuCi0gYHJlcXVlc3QuZXhjZXB0aW9uYCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYGVycm9yYC4KLSBgcmVxdWVzdC5yZWNlaXZlLnN0YXR1c19saW5lYCBoYXMgYmVlbiByZW1vdmVkLgotIGBjdXJsLmNhbGxiYWNrLnByb2dyZXNzYCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYSBjdXN0b20gYFN0cmVhbUludGVyZmFjZWAgdG8KICBtYWludGFpbiBhIHN0YXR1cyB1cGRhdGUuCi0gYGN1cmwuY2FsbGJhY2sud3JpdGVgIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhIGN1c3RvbSBgU3RyZWFtSW50ZXJmYWNlYCB0bwogIGludGVyY2VwdCB3cml0ZXMuCi0gYGN1cmwuY2FsbGJhY2sucmVhZGAgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGEgY3VzdG9tIGBTdHJlYW1JbnRlcmZhY2VgIHRvCiAgaW50ZXJjZXB0IHJlYWRzLgoKYGhlYWRlcnNgIGlzIGEgbmV3IGV2ZW50IHRoYXQgaXMgZW1pdHRlZCBhZnRlciB0aGUgcmVzcG9uc2UgaGVhZGVycyBvZiBhCnJlcXVlc3QgaGF2ZSBiZWVuIHJlY2VpdmVkIGJlZm9yZSB0aGUgYm9keSBvZiB0aGUgcmVzcG9uc2UgaXMgZG93bmxvYWRlZC4gVGhpcwpldmVudCBlbWl0cyBhIGBHdXp6bGVIdHRwXEV2ZW50XEhlYWRlcnNFdmVudGAuCgpZb3UgY2FuIGludGVyY2VwdCBhIHJlcXVlc3QgYW5kIGluamVjdCBhIHJlc3BvbnNlIHVzaW5nIHRoZSBgaW50ZXJjZXB0KClgIGV2ZW50Cm9mIGEgYEd1enpsZUh0dHBcRXZlbnRcQmVmb3JlRXZlbnRgLCBgR3V6emxlSHR0cFxFdmVudFxDb21wbGV0ZUV2ZW50YCwgYW5kCmBHdXp6bGVIdHRwXEV2ZW50XEVycm9yRXZlbnRgIGV2ZW50LgoKU2VlOiBodHRwczovL2RvY3MuZ3V6emxlcGhwLm9yZy9lbi9sYXRlc3QvZXZlbnRzLmh0bWwKCiMjIEluZmxlY3Rpb24KClRoZSBgR3V6emxlXEluZmxlY3Rpb25gIG5hbWVzcGFjZSBoYXMgYmVlbiByZW1vdmVkLiBUaGlzIGlzIG5vdCBhIGNvcmUgY29uY2VybgpvZiBHdXp6bGUuCgojIyBJdGVyYXRvcgoKVGhlIGBHdXp6bGVcSXRlcmF0b3JgIG5hbWVzcGFjZSBoYXMgYmVlbiByZW1vdmVkLgoKLSBgR3V6emxlXEl0ZXJhdG9yXEFwcGVuZEl0ZXJhdG9yYCwgYEd1enpsZVxJdGVyYXRvclxDaHVua2VkSXRlcmF0b3JgLCBhbmQKICBgR3V6emxlXEl0ZXJhdG9yXE1ldGhvZFByb3h5SXRlcmF0b3JgIGFyZSBuaWNlLCBidXQgbm90IGEgY29yZSByZXF1aXJlbWVudCBvZgogIEd1enpsZSBpdHNlbGYuCi0gYEd1enpsZVxJdGVyYXRvclxGaWx0ZXJJdGVyYXRvcmAgaXMgbm8gbG9uZ2VyIG5lZWRlZCBiZWNhdXNlIGFuIGVxdWl2YWxlbnQKICBjbGFzcyBpcyBzaGlwcGVkIHdpdGggUEhQIDUuNC4KLSBgR3V6emxlXEl0ZXJhdG9yXE1hcEl0ZXJhdG9yYCBpcyBub3QgcmVhbGx5IG5lZWRlZCB3aGVuIHVzaW5nIFBIUCA1LjUgYmVjYXVzZQogIGl0J3MgZWFzaWVyIHRvIGp1c3Qgd3JhcCBhbiBpdGVyYXRvciBpbiBhIGdlbmVyYXRvciB0aGF0IG1hcHMgdmFsdWVzLgoKRm9yIGEgcmVwbGFjZW1lbnQgb2YgdGhlc2UgaXRlcmF0b3JzLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25pa2ljL2l0ZXIKCiMjIExvZwoKVGhlIExvZ1BsdWdpbiBoYXMgbW92ZWQgdG8gaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9sb2ctc3Vic2NyaWJlci4gVGhlCmBHdXp6bGVcTG9nYCBuYW1lc3BhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gR3V6emxlIG5vdyByZWxpZXMgb24KYFBzclxMb2dcTG9nZ2VySW50ZXJmYWNlYCBmb3IgYWxsIGxvZ2dpbmcuIFRoZSBNZXNzYWdlRm9ybWF0dGVyIGNsYXNzIGhhcyBiZWVuCm1vdmVkIHRvIGBHdXp6bGVIdHRwXFN1YnNjcmliZXJcTG9nXEZvcm1hdHRlcmAuCgojIyBQYXJzZXIKClRoZSBgR3V6emxlXFBhcnNlcmAgbmFtZXNwYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFRoaXMgd2FzIHByZXZpb3VzbHkgdXNlZCB0bwptYWtlIGl0IHBvc3NpYmxlIHRvIHBsdWcgaW4gY3VzdG9tIHBhcnNlcnMgZm9yIGNvb2tpZXMsIG1lc3NhZ2VzLCBVUkkKdGVtcGxhdGVzLCBhbmQgVVJMczsgaG93ZXZlciwgdGhpcyBsZXZlbCBvZiBjb21wbGV4aXR5IGlzIG5vdCBuZWVkZWQgaW4gR3V6emxlCnNvIGl0IGhhcyBiZWVuIHJlbW92ZWQuCgotIENvb2tpZTogQ29va2llIHBhcnNpbmcgbG9naWMgaGFzIGJlZW4gbW92ZWQgdG8KICBgR3V6emxlSHR0cFxDb29raWVcU2V0Q29va2llOjpmcm9tU3RyaW5nYC4KLSBNZXNzYWdlOiBNZXNzYWdlIHBhcnNpbmcgbG9naWMgZm9yIGJvdGggcmVxdWVzdHMgYW5kIHJlc3BvbnNlcyBoYXMgYmVlbiBtb3ZlZAogIHRvIGBHdXp6bGVIdHRwXE1lc3NhZ2VcTWVzc2FnZUZhY3Rvcnk6OmZyb21NZXNzYWdlYC4gTWVzc2FnZSBwYXJzaW5nIGlzIG9ubHkKICB1c2VkIGluIGRlYnVnZ2luZyBvciBkZXNlcmlhbGl6aW5nIG1lc3NhZ2VzLCBzbyBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZm9yCiAgR3V6emxlIGFzIGEgbGlicmFyeSB0byBhZGQgdGhpcyBsZXZlbCBvZiBjb21wbGV4aXR5IHRvIHBhcnNpbmcgbWVzc2FnZXMuCi0gVXJpVGVtcGxhdGU6IFVSSSB0ZW1wbGF0ZSBwYXJzaW5nIGhhcyBiZWVuIG1vdmVkIHRvCiAgYEd1enpsZUh0dHBcVXJpVGVtcGxhdGVgLiBUaGUgR3V6emxlIGxpYnJhcnkgd2lsbCBhdXRvbWF0aWNhbGx5IHVzZSB0aGUgUEVDTAogIFVSSSB0ZW1wbGF0ZSBsaWJyYXJ5IGlmIGl0IGlzIGluc3RhbGxlZC4KLSBVcmw6IFVSTCBwYXJzaW5nIGlzIG5vdyBwZXJmb3JtZWQgaW4gYEd1enpsZUh0dHBcVXJsOjpmcm9tU3RyaW5nYCAocHJldmlvdXNseQogIGl0IHdhcyBgR3V6emxlXEh0dHBcVXJsOjpmYWN0b3J5KClgKS4gSWYgY3VzdG9tIFVSTCBwYXJzaW5nIGlzIG5lY2Vzc2FyeSwKICB0aGVuIGRldmVsb3BlcnMgYXJlIGZyZWUgdG8gc3ViY2xhc3MgYEd1enpsZUh0dHBcVXJsYC4KCiMjIFBsdWdpbgoKVGhlIGBHdXp6bGVcUGx1Z2luYCBuYW1lc3BhY2UgaGFzIGJlZW4gcmVuYW1lZCB0byBgR3V6emxlSHR0cFxTdWJzY3JpYmVyYC4KU2V2ZXJhbCBwbHVnaW5zIGFyZSBzaGlwcGluZyB3aXRoIHRoZSBjb3JlIEd1enpsZSBsaWJyYXJ5IHVuZGVyIHRoaXMgbmFtZXNwYWNlLgoKLSBgR3V6emxlSHR0cFxTdWJzY3JpYmVyXENvb2tpZWA6IFJlcGxhY2VzIHRoZSBvbGQgQ29va2llUGx1Z2luLiBDb29raWUgamFyCiAgY29kZSBoYXMgbW92ZWQgdG8gYEd1enpsZUh0dHBcQ29va2llYC4KLSBgR3V6emxlSHR0cFxTdWJzY3JpYmVyXEhpc3RvcnlgOiBSZXBsYWNlcyB0aGUgb2xkIEhpc3RvcnlQbHVnaW4uCi0gYEd1enpsZUh0dHBcU3Vic2NyaWJlclxIdHRwRXJyb3JgOiBUaHJvd3MgZXJyb3JzIHdoZW4gYSBiYWQgSFRUUCByZXNwb25zZSBpcwogIHJlY2VpdmVkLgotIGBHdXp6bGVIdHRwXFN1YnNjcmliZXJcTW9ja2A6IFJlcGxhY2VzIHRoZSBvbGQgTW9ja1BsdWdpbi4KLSBgR3V6emxlSHR0cFxTdWJzY3JpYmVyXFByZXBhcmVgOiBQcmVwYXJlcyB0aGUgYm9keSBvZiBhIHJlcXVlc3QganVzdCBiZWZvcmUKICBzZW5kaW5nLiBUaGlzIHN1YnNjcmliZXIgaXMgYXR0YWNoZWQgdG8gYWxsIHJlcXVlc3RzIGJ5IGRlZmF1bHQuCi0gYEd1enpsZUh0dHBcU3Vic2NyaWJlclxSZWRpcmVjdGA6IFJlcGxhY2VzIHRoZSBSZWRpcmVjdFBsdWdpbi4KClRoZSBmb2xsb3dpbmcgcGx1Z2lucyBoYXZlIGJlZW4gcmVtb3ZlZCAodGhpcmQtcGFydGllcyBhcmUgZnJlZSB0byByZS1pbXBsZW1lbnQKdGhlc2UgaWYgbmVlZGVkKToKCi0gYEd1enpsZUh0dHBcUGx1Z2luXEFzeW5jYCBoYXMgYmVlbiByZW1vdmVkLgotIGBHdXp6bGVIdHRwXFBsdWdpblxDdXJsQXV0aGAgaGFzIGJlZW4gcmVtb3ZlZC4KLSBgR3V6emxlSHR0cFxQbHVnaW5cRXJyb3JSZXNwb25zZVxFcnJvclJlc3BvbnNlUGx1Z2luYCBoYXMgYmVlbiByZW1vdmVkLiBUaGlzCiAgZnVuY3Rpb25hbGl0eSBzaG91bGQgaW5zdGVhZCBiZSBpbXBsZW1lbnRlZCB3aXRoIGV2ZW50IGxpc3RlbmVycyB0aGF0IG9jY3VyCiAgYWZ0ZXIgbm9ybWFsIHJlc3BvbnNlIHBhcnNpbmcgb2NjdXJzIGluIHRoZSBndXp6bGUvY29tbWFuZCBwYWNrYWdlLgoKVGhlIGZvbGxvd2luZyBwbHVnaW5zIGFyZSBub3QgcGFydCBvZiB0aGUgY29yZSBHdXp6bGUgcGFja2FnZSwgYnV0IGFyZSBwcm92aWRlZAppbiBzZXBhcmF0ZSByZXBvc2l0b3JpZXM6CgotIGBHdXp6bGVcSHR0cFxQbHVnaW5cQmFja29mZlBsdWdpbmAgaGFzIGJlZW4gcmV3cml0dGVuIHRvIGJlIG11Y2ggc2ltcGxlcgogIHRvIGJ1aWxkIGN1c3RvbSByZXRyeSBwb2xpY2llcyB1c2luZyBzaW1wbGUgZnVuY3Rpb25zIHJhdGhlciB0aGFuIHZhcmlvdXMKICBjaGFpbmVkIGNsYXNzZXMuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9yZXRyeS1zdWJzY3JpYmVyCi0gYEd1enpsZVxIdHRwXFBsdWdpblxDYWNoZVxDYWNoZVBsdWdpbmAgaGFzIG1vdmVkIHRvCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9jYWNoZS1zdWJzY3JpYmVyCi0gYEd1enpsZVxIdHRwXFBsdWdpblxMb2dcTG9nUGx1Z2luYCBoYXMgbW92ZWQgdG8KICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2xvZy1zdWJzY3JpYmVyCi0gYEd1enpsZVxIdHRwXFBsdWdpblxNZDVcTWQ1UGx1Z2luYCBoYXMgbW92ZWQgdG8KICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL21lc3NhZ2UtaW50ZWdyaXR5LXN1YnNjcmliZXIKLSBgR3V6emxlXEh0dHBcUGx1Z2luXE1vY2tcTW9ja1BsdWdpbmAgaGFzIG1vdmVkIHRvCiAgYEd1enpsZUh0dHBcU3Vic2NyaWJlclxNb2NrU3Vic2NyaWJlcmAuCi0gYEd1enpsZVxIdHRwXFBsdWdpblxPYXV0aFxPYXV0aFBsdWdpbmAgaGFzIG1vdmVkIHRvCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9vYXV0aC1zdWJzY3JpYmVyCgojIyBTZXJ2aWNlCgpUaGUgc2VydmljZSBkZXNjcmlwdGlvbiBsYXllciBvZiBHdXp6bGUgaGFzIG1vdmVkIGludG8gdHdvIHNlcGFyYXRlIHBhY2thZ2VzOgoKLSBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2NvbW1hbmQgUHJvdmlkZXMgYSBoaWdoIGxldmVsIGFic3RyYWN0aW9uIG92ZXIgd2ViCiAgc2VydmljZXMgYnkgcmVwcmVzZW50aW5nIHdlYiBzZXJ2aWNlIG9wZXJhdGlvbnMgdXNpbmcgY29tbWFuZHMuCi0gaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUtc2VydmljZXMgUHJvdmlkZXMgYW4gaW1wbGVtZW50YXRpb24gb2YKICBndXp6bGUvY29tbWFuZCB0aGF0IHByb3ZpZGVzIHJlcXVlc3Qgc2VyaWFsaXphdGlvbiBhbmQgcmVzcG9uc2UgcGFyc2luZyB1c2luZwogIEd1enpsZSBzZXJ2aWNlIGRlc2NyaXB0aW9ucy4KCiMjIFN0cmVhbQoKU3RyZWFtIGhhdmUgbW92ZWQgdG8gYSBzZXBhcmF0ZSBwYWNrYWdlIGF2YWlsYWJsZSBhdApodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3N0cmVhbXMuCgpgR3V6emxlXFN0cmVhbVxTdHJlYW1JbnRlcmZhY2VgIGhhcyBiZWVuIGdpdmVuIGEgbGFyZ2UgdXBkYXRlIHRvIGNsZWFubHkgdGFrZQpvbiB0aGUgcmVzcG9uc2liaWxpdGllcyBvZiBgR3V6emxlXEh0dHBcRW50aXR5Qm9keWAgYW5kCmBHdXp6bGVcSHR0cFxFbnRpdHlCb2R5SW50ZXJmYWNlYCBub3cgdGhhdCB0aGV5IGhhdmUgYmVlbiByZW1vdmVkLiBUaGUgbnVtYmVyCm9mIG1ldGhvZHMgaW1wbGVtZW50ZWQgYnkgdGhlIGBTdHJlYW1JbnRlcmZhY2VgIGhhcyBiZWVuIGRyYXN0aWNhbGx5IHJlZHVjZWQgdG8KYWxsb3cgZGV2ZWxvcGVycyB0byBtb3JlIGVhc2lseSBleHRlbmQgYW5kIGRlY29yYXRlIHN0cmVhbSBiZWhhdmlvci4KCiMjIFJlbW92ZWQgbWV0aG9kcyBmcm9tIFN0cmVhbUludGVyZmFjZQoKLSBgZ2V0U3RyZWFtYCBhbmQgYHNldFN0cmVhbWAgaGF2ZSBiZWVuIHJlbW92ZWQgdG8gYmV0dGVyIGVuY2Fwc3VsYXRlIHN0cmVhbXMuCi0gYGdldE1ldGFkYXRhYCBhbmQgYHNldE1ldGFkYXRhYCBoYXZlIGJlZW4gcmVtb3ZlZCBpbiBmYXZvciBvZgogIGBHdXp6bGVIdHRwXFN0cmVhbVxNZXRhZGF0YVN0cmVhbUludGVyZmFjZWAuCi0gYGdldFdyYXBwZXJgLCBgZ2V0V3JhcHBlckRhdGFgLCBgZ2V0U3RyZWFtVHlwZWAsIGFuZCBgZ2V0VXJpYCBoYXZlIGFsbCBiZWVuCiAgcmVtb3ZlZC4gVGhpcyBkYXRhIGlzIGFjY2Vzc2libGUgd2hlbgogIHVzaW5nIHN0cmVhbXMgdGhhdCBpbXBsZW1lbnQgYEd1enpsZUh0dHBcU3RyZWFtXE1ldGFkYXRhU3RyZWFtSW50ZXJmYWNlYC4KLSBgcmV3aW5kYCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYHNlZWsoMClgIGZvciBhIHNpbWlsYXIgYmVoYXZpb3IuCgojIyBSZW5hbWVkIG1ldGhvZHMKCi0gYGRldGFjaFN0cmVhbWAgaGFzIGJlZW4gcmVuYW1lZCB0byBgZGV0YWNoYC4KLSBgZmVvZmAgaGFzIGJlZW4gcmVuYW1lZCB0byBgZW9mYC4KLSBgZnRlbGxgIGhhcyBiZWVuIHJlbmFtZWQgdG8gYHRlbGxgLgotIGByZWFkTGluZWAgaGFzIG1vdmVkIGZyb20gYW4gaW5zdGFuY2UgbWV0aG9kIHRvIGEgc3RhdGljIGNsYXNzIG1ldGhvZCBvZgogIGBHdXp6bGVIdHRwXFN0cmVhbVxTdHJlYW1gLgoKIyMgTWV0YWRhdGEgc3RyZWFtcwoKYEd1enpsZUh0dHBcU3RyZWFtXE1ldGFkYXRhU3RyZWFtSW50ZXJmYWNlYCBoYXMgYmVlbiBhZGRlZCB0byBkZW5vdGUgc3RyZWFtcwp0aGF0IGNvbnRhaW4gYWRkaXRpb25hbCBtZXRhZGF0YSBhY2Nlc3NpYmxlIHZpYSBgZ2V0TWV0YWRhdGEoKWAuCmBHdXp6bGVIdHRwXFN0cmVhbVxTdHJlYW1JbnRlcmZhY2U6OmdldE1ldGFkYXRhYCBhbmQKYEd1enpsZUh0dHBcU3RyZWFtXFN0cmVhbUludGVyZmFjZTo6c2V0TWV0YWRhdGFgIGhhdmUgYmVlbiByZW1vdmVkLgoKIyMgU3RyZWFtUmVxdWVzdEZhY3RvcnkKClRoZSBlbnRpcmUgY29uY2VwdCBvZiB0aGUgU3RyZWFtUmVxdWVzdEZhY3RvcnkgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHdheSB0aGlzCndhcyB1c2VkIGluIEd1enpsZSAzIGJyb2tlIHRoZSBhY3R1YWwgaW50ZXJmYWNlIG9mIHNlbmRpbmcgc3RyZWFtaW5nIHJlcXVlc3RzCihpbnN0ZWFkIG9mIGdldHRpbmcgYmFjayBhIFJlc3BvbnNlLCB5b3UgZ290IGEgU3RyZWFtSW50ZXJmYWNlKS4gU3RyZWFtaW5nClBIUCByZXF1ZXN0cyBhcmUgbm93IGltcGxlbWVudGVkIHRocm91Z2ggdGhlIGBHdXp6bGVIdHRwXEFkYXB0ZXJcU3RyZWFtQWRhcHRlcmAuCgozLjYgdG8gMy43Ci0tLS0tLS0tLS0KCiMjIyBEZXByZWNhdGlvbnMKCi0gWW91IGNhbiBub3cgZW5hYmxlIEVfVVNFUl9ERVBSRUNBVEVEIHdhcm5pbmdzIHRvIHNlZSBpZiB5b3UgYXJlIHVzaW5nIGFueSBkZXByZWNhdGVkIG1ldGhvZHMuOgoKYGBgcGhwClxHdXp6bGVcQ29tbW9uXFZlcnNpb246OiRlbWl0V2FybmluZ3MgPSB0cnVlOwpgYGAKClRoZSBmb2xsb3dpbmcgQVBJcyBhbmQgb3B0aW9ucyBoYXZlIGJlZW4gbWFya2VkIGFzIGRlcHJlY2F0ZWQ6CgotIE1hcmtlZCBgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXF1ZXN0Ojppc1Jlc3BvbnNlQm9keVJlcGVhdGFibGUoKWAgYXMgZGVwcmVjYXRlZC4gVXNlIGAkcmVxdWVzdC0+Z2V0UmVzcG9uc2VCb2R5KCktPmlzUmVwZWF0YWJsZSgpYCBpbnN0ZWFkLgotIE1hcmtlZCBgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXF1ZXN0OjpjYW5DYWNoZSgpYCBhcyBkZXByZWNhdGVkLiBVc2UgYEd1enpsZVxQbHVnaW5cQ2FjaGVcRGVmYXVsdENhbkNhY2hlU3RyYXRlZ3ktPmNhbkNhY2hlUmVxdWVzdCgpYCBpbnN0ZWFkLgotIE1hcmtlZCBgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXF1ZXN0OjpjYW5DYWNoZSgpYCBhcyBkZXByZWNhdGVkLiBVc2UgYEd1enpsZVxQbHVnaW5cQ2FjaGVcRGVmYXVsdENhbkNhY2hlU3RyYXRlZ3ktPmNhbkNhY2hlUmVxdWVzdCgpYCBpbnN0ZWFkLgotIE1hcmtlZCBgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXF1ZXN0OjpzZXRJc1JlZGlyZWN0KClgIGFzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgSGlzdG9yeVBsdWdpbiBpbnN0ZWFkLgotIE1hcmtlZCBgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXF1ZXN0Ojppc1JlZGlyZWN0KClgIGFzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgSGlzdG9yeVBsdWdpbiBpbnN0ZWFkLgotIE1hcmtlZCBgR3V6emxlXENhY2hlXENhY2hlQWRhcHRlckZhY3Rvcnk6OmZhY3RvcnkoKWAgYXMgZGVwcmVjYXRlZAotIE1hcmtlZCBgR3V6emxlXFNlcnZpY2VcQ2xpZW50OjplbmFibGVNYWdpY01ldGhvZHMoKWAgYXMgZGVwcmVjYXRlZC4gTWFnaWMgbWV0aG9kcyBjYW4gbm8gbG9uZ2VyIGJlIGRpc2FibGVkIG9uIGEgR3V6emxlXFNlcnZpY2VcQ2xpZW50LgotIE1hcmtlZCBgR3V6emxlXFBhcnNlclxVcmxcVXJsUGFyc2VyYCBhcyBkZXByZWNhdGVkLiBKdXN0IHVzZSBQSFAncyBgcGFyc2VfdXJsKClgIGFuZCBwZXJjZW50IGVuY29kZSB5b3VyIFVURi04LgotIE1hcmtlZCBgR3V6emxlXENvbW1vblxDb2xsZWN0aW9uOjppbmplY3QoKWAgYXMgZGVwcmVjYXRlZC4KLSBNYXJrZWQgYEd1enpsZVxQbHVnaW5cQ3VybEF1dGhcQ3VybEF1dGhQbHVnaW5gIGFzIGRlcHJlY2F0ZWQuIFVzZQogIGAkY2xpZW50LT5nZXRDb25maWcoKS0+c2V0UGF0aCgncmVxdWVzdC5vcHRpb25zL2F1dGgnLCBhcnJheSgndXNlcicsICdwYXNzJywgJ0Jhc2ljfERpZ2VzdHxOVExNfEFueScpKTtgIG9yCiAgYCRjbGllbnQtPnNldERlZmF1bHRPcHRpb24oJ2F1dGgnLCBhcnJheSgndXNlcicsICdwYXNzJywgJ0Jhc2ljfERpZ2VzdHxOVExNfEFueScpKTtgCgozLjcgaW50cm9kdWNlcyBgcmVxdWVzdC5vcHRpb25zYCBhcyBhIHBhcmFtZXRlciBmb3IgYSBjbGllbnQgY29uZmlndXJhdGlvbiBhbmQgYXMgYW4gb3B0aW9uYWwgYXJndW1lbnQgdG8gYWxsIGNyZWF0aW9uYWwKcmVxdWVzdCBtZXRob2RzLiBXaGVuIHBhaXJlZCB3aXRoIGEgY2xpZW50J3MgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgdGhlc2Ugb3B0aW9ucyBhbGxvdyB5b3UgdG8gc3BlY2lmeSBkZWZhdWx0IHNldHRpbmdzCmZvciB2YXJpb3VzIGFzcGVjdHMgb2YgYSByZXF1ZXN0LiBCZWNhdXNlIHRoZXNlIG9wdGlvbnMgbWFrZSBvdGhlciBwcmV2aW91cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVkdW5kYW50LCBzZXZlcmFsCmNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgbWV0aG9kcyBvZiBhIGNsaWVudCBhbmQgQWJzdHJhY3RDb21tYW5kIGhhdmUgYmVlbiBkZXByZWNhdGVkLgoKLSBNYXJrZWQgYEd1enpsZVxTZXJ2aWNlXENsaWVudDo6Z2V0RGVmYXVsdEhlYWRlcnMoKWAgYXMgZGVwcmVjYXRlZC4gVXNlIGAkY2xpZW50LT5nZXREZWZhdWx0T3B0aW9uKCdoZWFkZXJzJylgLgotIE1hcmtlZCBgR3V6emxlXFNlcnZpY2VcQ2xpZW50OjpzZXREZWZhdWx0SGVhZGVycygpYCBhcyBkZXByZWNhdGVkLiBVc2UgYCRjbGllbnQtPnNldERlZmF1bHRPcHRpb24oJ2hlYWRlcnMve2hlYWRlcl9uYW1lfScsICd2YWx1ZScpYC4KLSBNYXJrZWQgJ3JlcXVlc3QucGFyYW1zJyBmb3IgYEd1enpsZVxIdHRwXENsaWVudGAgYXMgZGVwcmVjYXRlZC4gVXNlIGAkY2xpZW50LT5zZXREZWZhdWx0T3B0aW9uKCdwYXJhbXMve3BhcmFtX25hbWV9JywgJ3ZhbHVlJylgCi0gTWFya2VkICdjb21tYW5kLmhlYWRlcnMnLCAnY29tbWFuZC5yZXNwb25zZV9ib2R5JyBhbmQgJ2NvbW1hbmQub25fY29tcGxldGUnIGFzIGRlcHJlY2F0ZWQgZm9yIEFic3RyYWN0Q29tbWFuZC4gVGhlc2Ugd2lsbCB3b3JrIHRocm91Z2ggR3V6emxlIDQuMAoKICAgICAgICAkY29tbWFuZCA9ICRjbGllbnQtPmdldENvbW1hbmQoJ2ZvbycsIGFycmF5KAogICAgICAgICAgICAnY29tbWFuZC5oZWFkZXJzJyA9PiBhcnJheSgnVGVzdCcgPT4gJzEyMycpLAogICAgICAgICAgICAnY29tbWFuZC5yZXNwb25zZV9ib2R5JyA9PiAnL3BhdGgvdG8vZmlsZScKICAgICAgICApKTsKCiAgICAgICAgLy8gU2hvdWxkIGJlIGNoYW5nZWQgdG86CgogICAgICAgICRjb21tYW5kID0gJGNsaWVudC0+Z2V0Q29tbWFuZCgnZm9vJywgYXJyYXkoCiAgICAgICAgICAgICdjb21tYW5kLnJlcXVlc3Rfb3B0aW9ucycgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAnaGVhZGVycycgPT4gYXJyYXkoJ1Rlc3QnID0+ICcxMjMnKSwKICAgICAgICAgICAgICAgICdzYXZlX2FzJyA9PiAnL3BhdGgvdG8vZmlsZScKICAgICAgICAgICAgKQogICAgICAgICkpOwoKIyMjIEludGVyZmFjZSBjaGFuZ2VzCgpBZGRpdGlvbnMgYW5kIGNoYW5nZXMgKHlvdSB3aWxsIG5lZWQgdG8gdXBkYXRlIGFueSBpbXBsZW1lbnRhdGlvbnMgb3Igc3ViY2xhc3NlcyB5b3UgbWF5IGhhdmUgY3JlYXRlZCk6CgotIEFkZGVkIGFuIGAkb3B0aW9uc2AgYXJndW1lbnQgdG8gdGhlIGVuZCBvZiB0aGUgZm9sbG93aW5nIG1ldGhvZHMgb2YgYEd1enpsZVxIdHRwXENsaWVudEludGVyZmFjZWA6CiAgY3JlYXRlUmVxdWVzdCwgaGVhZCwgZGVsZXRlLCBwdXQsIHBhdGNoLCBwb3N0LCBvcHRpb25zLCBwcmVwYXJlUmVxdWVzdAotIEFkZGVkIGFuIGAkb3B0aW9uc2AgYXJndW1lbnQgdG8gdGhlIGVuZCBvZiBgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXF1ZXN0XFJlcXVlc3RGYWN0b3J5SW50ZXJmYWNlOjpjcmVhdGVSZXF1ZXN0KClgCi0gQWRkZWQgYW4gYGFwcGx5T3B0aW9ucygpYCBtZXRob2QgdG8gYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdFxSZXF1ZXN0RmFjdG9yeUludGVyZmFjZWAKLSBDaGFuZ2VkIGBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OmdldCgkdXJpID0gbnVsbCwgJGhlYWRlcnMgPSBudWxsLCAkYm9keSA9IG51bGwpYCB0bwogIGBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OmdldCgkdXJpID0gbnVsbCwgJGhlYWRlcnMgPSBudWxsLCAkb3B0aW9ucyA9IGFycmF5KCkpYC4gWW91IGNhbiBzdGlsbCBwYXNzIGluIGEKICByZXNvdXJjZSwgc3RyaW5nLCBvciBFbnRpdHlCb2R5IGludG8gdGhlICRvcHRpb25zIHBhcmFtZXRlciB0byBzcGVjaWZ5IHRoZSBkb3dubG9hZCBsb2NhdGlvbiBvZiB0aGUgcmVzcG9uc2UuCi0gQ2hhbmdlZCBgR3V6emxlXENvbW1vblxDb2xsZWN0aW9uOjpfX2NvbnN0cnVjdCgkZGF0YSlgIHRvIG5vIGxvbmdlciBhY2NlcHRzIGEgbnVsbCB2YWx1ZSBmb3IgYCRkYXRhYCBidXQgYQogIGRlZmF1bHQgYGFycmF5KClgCi0gQWRkZWQgYEd1enpsZVxTdHJlYW1cU3RyZWFtSW50ZXJmYWNlOjppc1JlcGVhdGFibGVgCi0gTWFkZSBgR3V6emxlXEh0dHBcQ2xpZW50OjpleHBhbmRUZW1wbGF0ZWAgYW5kIGBnZXRVcmlUZW1wbGF0ZWAgcHJvdGVjdGVkIG1ldGhvZHMuCgpUaGUgZm9sbG93aW5nIG1ldGhvZHMgd2VyZSByZW1vdmVkIGZyb20gaW50ZXJmYWNlcy4gQWxsIG9mIHRoZXNlIG1ldGhvZHMgYXJlIHN0aWxsIGF2YWlsYWJsZSBpbiB0aGUgY29uY3JldGUgY2xhc3Nlcwp0aGF0IGltcGxlbWVudCB0aGVtLCBidXQgeW91IHNob3VsZCB1cGRhdGUgeW91ciBjb2RlIHRvIHVzZSBhbHRlcm5hdGl2ZSBtZXRob2RzOgoKLSBSZW1vdmVkIGBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OnNldERlZmF1bHRIZWFkZXJzKCkuIFVzZQogIGAkY2xpZW50LT5nZXRDb25maWcoKS0+c2V0UGF0aCgncmVxdWVzdC5vcHRpb25zL2hlYWRlcnMve2hlYWRlcl9uYW1lfScsICd2YWx1ZScpYC4gb3IKICBgJGNsaWVudC0+Z2V0Q29uZmlnKCktPnNldFBhdGgoJ3JlcXVlc3Qub3B0aW9ucy9oZWFkZXJzJywgYXJyYXkoJ2hlYWRlcl9uYW1lJyA9PiAndmFsdWUnKSlgIG9yCiAgYCRjbGllbnQtPnNldERlZmF1bHRPcHRpb24oJ2hlYWRlcnMve2hlYWRlcl9uYW1lfScsICd2YWx1ZScpYC4gb3IKICBgJGNsaWVudC0+c2V0RGVmYXVsdE9wdGlvbignaGVhZGVycycsIGFycmF5KCdoZWFkZXJfbmFtZScgPT4gJ3ZhbHVlJykpYC4KLSBSZW1vdmVkIGBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OmdldERlZmF1bHRIZWFkZXJzKCkuIFVzZSBgJGNsaWVudC0+Z2V0Q29uZmlnKCktPmdldFBhdGgoJ3JlcXVlc3Qub3B0aW9ucy9oZWFkZXJzJylgLgotIFJlbW92ZWQgYEd1enpsZVxIdHRwXENsaWVudEludGVyZmFjZTo6ZXhwYW5kVGVtcGxhdGUoKWAuIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLgotIFJlbW92ZWQgYEd1enpsZVxIdHRwXENsaWVudEludGVyZmFjZTo6c2V0UmVxdWVzdEZhY3RvcnkoKWAuIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLgotIFJlbW92ZWQgYEd1enpsZVxIdHRwXENsaWVudEludGVyZmFjZTo6Z2V0Q3VybE11bHRpKClgLiBUaGlzIGlzIGEgdmVyeSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuCi0gUmVtb3ZlZCBgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOjpjYW5DYWNoZWAuIFVzZSB0aGUgQ2FjaGVQbHVnaW4uCi0gUmVtb3ZlZCBgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOjpzZXRJc1JlZGlyZWN0YC4gVXNlIHRoZSBIaXN0b3J5UGx1Z2luLgotIFJlbW92ZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTo6aXNSZWRpcmVjdGAuIFVzZSB0aGUgSGlzdG9yeVBsdWdpbi4KCiMjIyBDYWNoZSBwbHVnaW4gYnJlYWtpbmcgY2hhbmdlcwoKLSBDYWNoZUtleVByb3ZpZGVySW50ZXJmYWNlIGFuZCBEZWZhdWx0Q2FjaGVLZXlQcm92aWRlciBhcmUgbm8gbG9uZ2VyIHVzZWQuIEFsbCBvZiB0aGlzIGxvZ2ljIGlzIGhhbmRsZWQgaW4gYQogIENhY2hlU3RvcmFnZUludGVyZmFjZS4gVGhlc2UgdHdvIG9iamVjdHMgYW5kIGludGVyZmFjZSB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4KLSBBbHdheXMgc2V0dGluZyBYLWNhY2hlIGhlYWRlcnMgb24gY2FjaGVkIHJlc3BvbnNlcwotIERlZmF1bHQgY2FjaGUgVFRMcyBhcmUgbm93IGhhbmRsZWQgYnkgdGhlIENhY2hlU3RvcmFnZUludGVyZmFjZSBvZiBhIENhY2hlUGx1Z2luCi0gYENhY2hlU3RvcmFnZUludGVyZmFjZTo6Y2FjaGUoJGtleSwgUmVzcG9uc2UgJHJlc3BvbnNlLCAkdHRsID0gbnVsbClgIGhhcyBjaGFuZ2VkIHRvIGBjYWNoZShSZXF1ZXN0SW50ZXJmYWNlCiAgJHJlcXVlc3QsIFJlc3BvbnNlICRyZXNwb25zZSk7YAotIGBDYWNoZVN0b3JhZ2VJbnRlcmZhY2U6OmZldGNoKCRrZXkpYCBoYXMgY2hhbmdlZCB0byBgZmV0Y2goUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCk7YAotIGBDYWNoZVN0b3JhZ2VJbnRlcmZhY2U6OmRlbGV0ZSgka2V5KWAgaGFzIGNoYW5nZWQgdG8gYGRlbGV0ZShSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0KTtgCi0gQWRkZWQgYENhY2hlU3RvcmFnZUludGVyZmFjZTo6cHVyZ2UoJHVybClgCi0gYERlZmF1bHRSZXZhbGlkYXRpb246Ol9fY29uc3RydWN0KENhY2hlS2V5UHJvdmlkZXJJbnRlcmZhY2UgJGNhY2hlS2V5LCBDYWNoZVN0b3JhZ2VJbnRlcmZhY2UgJGNhY2hlLCBDYWNoZVBsdWdpbgogICRwbHVnaW4pYCBoYXMgY2hhbmdlZCB0byBgRGVmYXVsdFJldmFsaWRhdGlvbjo6X19jb25zdHJ1Y3QoQ2FjaGVTdG9yYWdlSW50ZXJmYWNlICRjYWNoZSwKICBDYW5DYWNoZVN0cmF0ZWd5SW50ZXJmYWNlICRjYW5DYWNoZSA9IG51bGwpYAotIEFkZGVkIGBSZXZhbGlkYXRpb25JbnRlcmZhY2U6OnNob3VsZFJldmFsaWRhdGUoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgUmVzcG9uc2UgJHJlc3BvbnNlKWAKCjMuNSB0byAzLjYKLS0tLS0tLS0tLQoKKiBNaXhlZCBjYXNpbmcgb2YgaGVhZGVycyBhcmUgbm93IGZvcmNlZCB0byBiZSBhIHNpbmdsZSBjb25zaXN0ZW50IGNhc2luZyBhY3Jvc3MgYWxsIHZhbHVlcyBmb3IgdGhhdCBoZWFkZXIuCiogTWVzc2FnZXMgaW50ZXJuYWxseSB1c2UgYSBIZWFkZXJDb2xsZWN0aW9uIG9iamVjdCB0byBkZWxlZ2F0ZSBoYW5kbGluZyBjYXNlLWluc2Vuc2l0aXZlIGhlYWRlciByZXNvbHV0aW9uCiogUmVtb3ZlZCB0aGUgd2hvbGUgY2hhbmdlZEhlYWRlcigpIGZ1bmN0aW9uIHN5c3RlbSBvZiBtZXNzYWdlcyBiZWNhdXNlIGFsbCBoZWFkZXIgY2hhbmdlcyBub3cgZ28gdGhyb3VnaCBhZGRIZWFkZXIoKS4KICBGb3IgZXhhbXBsZSwgc2V0SGVhZGVyKCkgZmlyc3QgcmVtb3ZlcyB0aGUgaGVhZGVyIHVzaW5nIHVuc2V0IG9uIGEgSGVhZGVyQ29sbGVjdGlvbiBhbmQgdGhlbiBjYWxscyBhZGRIZWFkZXIoKS4KICBLZWVwaW5nIHRoZSBIb3N0IGhlYWRlciBhbmQgVVJMIGhvc3QgaW4gc3luYyBpcyBub3cgaGFuZGxlZCBieSBvdmVycmlkaW5nIHRoZSBhZGRIZWFkZXIgbWV0aG9kIGluIFJlcXVlc3QuCiogU3BlY2lmaWMgaGVhZGVyIGltcGxlbWVudGF0aW9ucyBjYW4gYmUgY3JlYXRlZCBmb3IgY29tcGxleCBoZWFkZXJzLiBXaGVuIGEgbWVzc2FnZSBjcmVhdGVzIGEgaGVhZGVyLCBpdCB1c2VzIGEKICBIZWFkZXJGYWN0b3J5IHdoaWNoIGNhbiBtYXAgc3BlY2lmaWMgaGVhZGVycyB0byBzcGVjaWZpYyBoZWFkZXIgY2xhc3Nlcy4gVGhlcmUgaXMgbm93IGEgTGluayBoZWFkZXIgYW5kCiAgQ2FjaGVDb250cm9sIGhlYWRlciBpbXBsZW1lbnRhdGlvbi4KKiBNb3ZlZCBnZXRMaW5rcygpIGZyb20gUmVzcG9uc2UgdG8ganVzdCBiZSB1c2VkIG9uIGEgTGluayBoZWFkZXIgb2JqZWN0LgoKSWYgeW91IHByZXZpb3VzbHkgcmVsaWVkIG9uIEd1enpsZVxIdHRwXE1lc3NhZ2VcSGVhZGVyOjpyYXcoKSwgdGhlbiB5b3Ugd2lsbCBuZWVkIHRvIHVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlIHRoZQpIZWFkZXJJbnRlcmZhY2UgKGUuZy4gdG9BcnJheSgpLCBnZXRBbGwoKSwgZXRjLikuCgojIyMgSW50ZXJmYWNlIGNoYW5nZXMKCiogUmVtb3ZlZCBmcm9tIGludGVyZmFjZTogR3V6emxlXEh0dHBcQ2xpZW50SW50ZXJmYWNlOjpzZXRVcmlUZW1wbGF0ZQoqIFJlbW92ZWQgZnJvbSBpbnRlcmZhY2U6IEd1enpsZVxIdHRwXENsaWVudEludGVyZmFjZTo6c2V0Q3VybE11bHRpKCkKKiBSZW1vdmVkIEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdDo6cmVjZWl2ZWRSZXF1ZXN0SGVhZGVyKCkgYW5kIGltcGxlbWVudGVkIHRoaXMgZnVuY3Rpb25hbGl0eSBpbgogIEd1enpsZVxIdHRwXEN1cmxcUmVxdWVzdE1lZGlhdG9yCiogUmVtb3ZlZCB0aGUgb3B0aW9uYWwgJGFzU3RyaW5nIHBhcmFtZXRlciBmcm9tIE1lc3NhZ2VJbnRlcmZhY2U6OmdldEhlYWRlcigpLiBKdXN0IGNhc3QgdGhlIGhlYWRlciB0byBhIHN0cmluZy4KKiBSZW1vdmVkIHRoZSBvcHRpb25hbCAkdHJ5Q2h1bmtlZFRyYW5zZmVyIG9wdGlvbiBmcm9tIEd1enpsZVxIdHRwXE1lc3NhZ2VcRW50aXR5RW5jbG9zaW5nUmVxdWVzdEludGVyZmFjZQoqIFJlbW92ZWQgdGhlICRhc09iamVjdHMgYXJndW1lbnQgZnJvbSBHdXp6bGVcSHR0cFxNZXNzYWdlXE1lc3NhZ2VJbnRlcmZhY2U6OmdldEhlYWRlcnMoKQoKIyMjIFJlbW92ZWQgZGVwcmVjYXRlZCBmdW5jdGlvbnMKCiogUmVtb3ZlZCBHdXp6bGVcUGFyc2VyXFBhcnNlclJlZ2lzdGVyOjpnZXQoKS4gVXNlIGdldFBhcnNlcigpCiogUmVtb3ZlZCBHdXp6bGVcUGFyc2VyXFBhcnNlclJlZ2lzdGVyOjpzZXQoKS4gVXNlIHJlZ2lzdGVyUGFyc2VyKCkuCgojIyMgRGVwcmVjYXRpb25zCgoqIFRoZSBhYmlsaXR5IHRvIGNhc2UtaW5zZW5zaXRpdmVseSBzZWFyY2ggZm9yIGhlYWRlciB2YWx1ZXMKKiBHdXp6bGVcSHR0cFxNZXNzYWdlXEhlYWRlcjo6aGFzRXhhY3RIZWFkZXIKKiBHdXp6bGVcSHR0cFxNZXNzYWdlXEhlYWRlcjo6cmF3LiBVc2UgZ2V0QWxsKCkKKiBEZXByZWNhdGVkIGNhY2hlIGNvbnRyb2wgc3BlY2lmaWMgbWV0aG9kcyBvbiBHdXp6bGVcSHR0cFxNZXNzYWdlXEFic3RyYWN0TWVzc2FnZS4gVXNlIHRoZSBDYWNoZUNvbnRyb2wgaGVhZGVyIG9iamVjdAogIGluc3RlYWQuCgojIyMgT3RoZXIgY2hhbmdlcwoKKiBBbGwgcmVzcG9uc2UgaGVhZGVyIGhlbHBlciBmdW5jdGlvbnMgcmV0dXJuIGEgc3RyaW5nIHJhdGhlciB0aGFuIG1peGluZyBIZWFkZXIgb2JqZWN0cyBhbmQgc3RyaW5ncyBpbmNvbnNpc3RlbnRseQoqIFJlbW92ZWQgY1VSTCBibGFja2xpc3Qgc3VwcG9ydC4gVGhpcyBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IG5vdyB0aGF0IEV4cGVjdCwgQWNjZXB0LCBldGMuIGFyZSBtYW5hZ2VkIGJ5IEd1enpsZQogIGRpcmVjdGx5IHZpYSBpbnRlcmZhY2VzCiogUmVtb3ZlZCB0aGUgaW5qZWN0aW5nIG9mIGEgcmVxdWVzdCBvYmplY3Qgb250byBhIHJlc3BvbnNlIG9iamVjdC4gVGhlIG1ldGhvZHMgdG8gZ2V0IGFuZCBzZXQgYSByZXF1ZXN0IHN0aWxsIGV4aXN0CiAgYnV0IGFyZSBhIG5vLW9wIHVudGlsIHJlbW92ZWQuCiogTW9zdCBjbGFzc2VzIHRoYXQgdXNlZCB0byByZXF1aXJlIGEgYEd1enpsZVxTZXJ2aWNlXENvbW1hbmRcQ29tbWFuZEludGVyZmFjZWAgdHlwZWhpbnQgbm93IHJlcXVlc3QgYQogIGBHdXp6bGVcU2VydmljZVxDb21tYW5kXEFycmF5Q29tbWFuZEludGVyZmFjZWAuCiogQWRkZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTo6c3RhcnRSZXNwb25zZSgpYCB0byB0aGUgUmVxdWVzdEludGVyZmFjZSB0byBoYW5kbGUgaW5qZWN0aW5nIGEgcmVzcG9uc2UKICBvbiBhIHJlcXVlc3Qgd2hpbGUgdGhlIHJlcXVlc3QgaXMgc3RpbGwgYmVpbmcgdHJhbnNmZXJyZWQKKiBgR3V6emxlXFNlcnZpY2VcQ29tbWFuZFxDb21tYW5kSW50ZXJmYWNlYCBub3cgZXh0ZW5kcyBmcm9tIFRvQXJyYXlJbnRlcmZhY2UgYW5kIEFycmF5QWNjZXNzCgozLjMgdG8gMy40Ci0tLS0tLS0tLS0KCkJhc2UgVVJMcyBvZiBhIGNsaWVudCBub3cgZm9sbG93IHRoZSBydWxlcyBvZiBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzM5ODYjc2VjdGlvbi01LjIuMiB3aGVuIG1lcmdpbmcgVVJMcy4KCjMuMiB0byAzLjMKLS0tLS0tLS0tLQoKIyMjIFJlc3BvbnNlOjpnZXRFdGFnKCkgcXVvdGUgc3RyaXBwaW5nIHJlbW92ZWQKCmBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlc3BvbnNlOjpnZXRFdGFnKClgIG5vIGxvbmdlciBzdHJpcHMgcXVvdGVzIGFyb3VuZCB0aGUgRVRhZyByZXNwb25zZSBoZWFkZXIKCiMjIyBSZW1vdmVkIGBHdXp6bGVcSHR0cFxVdGlsc2AKClRoZSBgR3V6emxlXEh0dHBcVXRpbHNgIGNsYXNzIHdhcyByZW1vdmVkLiBUaGlzIGNsYXNzIHdhcyBvbmx5IHVzZWQgZm9yIHRlc3RpbmcuCgojIyMgU3RyZWFtIHdyYXBwZXIgYW5kIHR5cGUKCmBHdXp6bGVcU3RyZWFtXFN0cmVhbTo6Z2V0V3JhcHBlcigpYCBhbmQgYEd1enpsZVxTdHJlYW1cU3RyZWFtOjpnZXRTdHJlYW1UeXBlKClgIGFyZSBubyBsb25nZXIgY29udmVydGVkIHRvIGxvd2VyY2FzZS4KCiMjIyBjdXJsLmVtaXRfaW8gYmVjYW1lIGVtaXRfaW8KCkVtaXR0aW5nIElPIGV2ZW50cyBmcm9tIGEgUmVxdWVzdE1lZGlhdG9yIGlzIG5vdyBhIHBhcmFtZXRlciB0aGF0IG11c3QgYmUgc2V0IGluIGEgcmVxdWVzdCdzIGN1cmwgb3B0aW9ucyB1c2luZyB0aGUKJ2VtaXRfaW8nIGtleS4gVGhpcyB3YXMgcHJldmlvdXNseSBzZXQgdW5kZXIgYSByZXF1ZXN0J3MgcGFyYW1ldGVycyB1c2luZyAnY3VybC5lbWl0X2lvJwoKMy4xIHRvIDMuMgotLS0tLS0tLS0tCgojIyMgQ3VybE11bHRpIGlzIG5vIGxvbmdlciByZXVzZWQgZ2xvYmFsbHkKCkJlZm9yZSAzLjIsIHRoZSBzYW1lIEN1cmxNdWx0aSBvYmplY3Qgd2FzIHJldXNlZCBnbG9iYWxseSBmb3IgZWFjaCBjbGllbnQuIFRoaXMgY2FuIGNhdXNlIGlzc3VlIHdoZXJlIHBsdWdpbnMgYWRkZWQKdG8gYSBzaW5nbGUgY2xpZW50IGNhbiBwb2xsdXRlIHJlcXVlc3RzIGRpc3BhdGNoZWQgZnJvbSBvdGhlciBjbGllbnRzLgoKSWYgeW91IHN0aWxsIHdpc2ggdG8gcmV1c2UgdGhlIHNhbWUgQ3VybE11bHRpIG9iamVjdCB3aXRoIGVhY2ggY2xpZW50LCB0aGVuIHlvdSBjYW4gYWRkIGEgbGlzdGVuZXIgdG8gdGhlClNlcnZpY2VCdWlsZGVyJ3MgYHNlcnZpY2VfYnVpbGRlci5jcmVhdGVfY2xpZW50YCBldmVudCB0byBpbmplY3QgYSBjdXN0b20gQ3VybE11bHRpIG9iamVjdCBpbnRvIGVhY2ggY2xpZW50IGFzIGl0IGlzCmNyZWF0ZWQuCgpgYGBwaHAKJG11bHRpID0gbmV3IEd1enpsZVxIdHRwXEN1cmxcQ3VybE11bHRpKCk7CiRidWlsZGVyID0gR3V6emxlXFNlcnZpY2VcQnVpbGRlclxTZXJ2aWNlQnVpbGRlcjo6ZmFjdG9yeSgnL3BhdGgvdG8vY29uZmlnLmpzb24nKTsKJGJ1aWxkZXItPmFkZExpc3RlbmVyKCdzZXJ2aWNlX2J1aWxkZXIuY3JlYXRlX2NsaWVudCcsIGZ1bmN0aW9uICgkZXZlbnQpIHVzZSAoJG11bHRpKSB7CiAgICAkZXZlbnRbJ2NsaWVudCddLT5zZXRDdXJsTXVsdGkoJG11bHRpKTsKfQp9KTsKYGBgCgojIyMgTm8gZGVmYXVsdCBwYXRoCgpVUkxzIG5vIGxvbmdlciBoYXZlIGEgZGVmYXVsdCBwYXRoIHZhbHVlIG9mICcvJyBpZiBubyBwYXRoIHdhcyBzcGVjaWZpZWQuCgpCZWZvcmU6CgpgYGBwaHAKJHJlcXVlc3QgPSAkY2xpZW50LT5nZXQoJ2h0dHA6Ly93d3cuZm9vLmNvbScpOwplY2hvICRyZXF1ZXN0LT5nZXRVcmwoKTsKLy8gPj4gaHR0cDovL3d3dy5mb28uY29tLwpgYGAKCkFmdGVyOgoKYGBgcGhwCiRyZXF1ZXN0ID0gJGNsaWVudC0+Z2V0KCdodHRwOi8vd3d3LmZvby5jb20nKTsKZWNobyAkcmVxdWVzdC0+Z2V0VXJsKCk7Ci8vID4+IGh0dHA6Ly93d3cuZm9vLmNvbQpgYGAKCiMjIyBMZXNzIHZlcmJvc2UgQmFkUmVzcG9uc2VFeGNlcHRpb24KClRoZSBleGNlcHRpb24gbWVzc2FnZSBmb3IgYEd1enpsZVxIdHRwXEV4Y2VwdGlvblxCYWRSZXNwb25zZUV4Y2VwdGlvbmAgbm8gbG9uZ2VyIGNvbnRhaW5zIHRoZSBmdWxsIEhUVFAgcmVxdWVzdCBhbmQKcmVzcG9uc2UgaW5mb3JtYXRpb24uIFlvdSBjYW4sIGhvd2V2ZXIsIGdldCBhY2Nlc3MgdG8gdGhlIHJlcXVlc3QgYW5kIHJlc3BvbnNlIG9iamVjdCBieSBjYWxsaW5nIGBnZXRSZXF1ZXN0KClgIG9yCmBnZXRSZXNwb25zZSgpYCBvbiB0aGUgZXhjZXB0aW9uIG9iamVjdC4KCiMjIyBRdWVyeSBwYXJhbWV0ZXIgYWdncmVnYXRpb24KCk11bHRpLXZhbHVlZCBxdWVyeSBwYXJhbWV0ZXJzIGFyZSBubyBsb25nZXIgYWdncmVnYXRlZCB1c2luZyBhIGNhbGxiYWNrIGZ1bmN0aW9uLiBgR3V6emxlXEh0dHBcUXVlcnlgIG5vdyBoYXMgYQpzZXRBZ2dyZWdhdG9yKCkgbWV0aG9kIHRoYXQgYWNjZXB0cyBhIGBHdXp6bGVcSHR0cFxRdWVyeUFnZ3JlZ2F0b3JcUXVlcnlBZ2dyZWdhdG9ySW50ZXJmYWNlYCBvYmplY3QuIFRoaXMgb2JqZWN0IGlzCnJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgYWdncmVnYXRpb24gb2YgbXVsdGktdmFsdWVkIHF1ZXJ5IHN0cmluZyB2YXJpYWJsZXMgaW50byBhIGZsYXR0ZW5lZCBoYXNoLgoKMi44IHRvIDMueAotLS0tLS0tLS0tCgojIyMgR3V6emxlXFNlcnZpY2VcSW5zcGVjdG9yCgpDaGFuZ2UgYFxHdXp6bGVcU2VydmljZVxJbnNwZWN0b3I6OmZyb21Db25maWdgIHRvIGBcR3V6emxlXENvbW1vblxDb2xsZWN0aW9uOjpmcm9tQ29uZmlnYAoKKipCZWZvcmUqKgoKYGBgcGhwCnVzZSBHdXp6bGVcU2VydmljZVxJbnNwZWN0b3I7CgpjbGFzcyBZb3VyQ2xpZW50IGV4dGVuZHMgXEd1enpsZVxTZXJ2aWNlXENsaWVudAp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZhY3RvcnkoJGNvbmZpZyA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgJGRlZmF1bHQgPSBhcnJheSgpOwogICAgICAgICRyZXF1aXJlZCA9IGFycmF5KCdiYXNlX3VybCcsICd1c2VybmFtZScsICdhcGlfa2V5Jyk7CiAgICAgICAgJGNvbmZpZyA9IEluc3BlY3Rvcjo6ZnJvbUNvbmZpZygkY29uZmlnLCAkZGVmYXVsdCwgJHJlcXVpcmVkKTsKCiAgICAgICAgJGNsaWVudCA9IG5ldyBzZWxmKAogICAgICAgICAgICAkY29uZmlnLT5nZXQoJ2Jhc2VfdXJsJyksCiAgICAgICAgICAgICRjb25maWctPmdldCgndXNlcm5hbWUnKSwKICAgICAgICAgICAgJGNvbmZpZy0+Z2V0KCdhcGlfa2V5JykKICAgICAgICApOwogICAgICAgICRjbGllbnQtPnNldENvbmZpZygkY29uZmlnKTsKCiAgICAgICAgJGNsaWVudC0+c2V0RGVzY3JpcHRpb24oU2VydmljZURlc2NyaXB0aW9uOjpmYWN0b3J5KF9fRElSX18gLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ2NsaWVudC5qc29uJykpOwoKICAgICAgICByZXR1cm4gJGNsaWVudDsKICAgIH0KYGBgCgoqKkFmdGVyKioKCmBgYHBocAp1c2UgR3V6emxlXENvbW1vblxDb2xsZWN0aW9uOwoKY2xhc3MgWW91ckNsaWVudCBleHRlbmRzIFxHdXp6bGVcU2VydmljZVxDbGllbnQKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmYWN0b3J5KCRjb25maWcgPSBhcnJheSgpKQogICAgewogICAgICAgICRkZWZhdWx0ID0gYXJyYXkoKTsKICAgICAgICAkcmVxdWlyZWQgPSBhcnJheSgnYmFzZV91cmwnLCAndXNlcm5hbWUnLCAnYXBpX2tleScpOwogICAgICAgICRjb25maWcgPSBDb2xsZWN0aW9uOjpmcm9tQ29uZmlnKCRjb25maWcsICRkZWZhdWx0LCAkcmVxdWlyZWQpOwoKICAgICAgICAkY2xpZW50ID0gbmV3IHNlbGYoCiAgICAgICAgICAgICRjb25maWctPmdldCgnYmFzZV91cmwnKSwKICAgICAgICAgICAgJGNvbmZpZy0+Z2V0KCd1c2VybmFtZScpLAogICAgICAgICAgICAkY29uZmlnLT5nZXQoJ2FwaV9rZXknKQogICAgICAgICk7CiAgICAgICAgJGNsaWVudC0+c2V0Q29uZmlnKCRjb25maWcpOwoKICAgICAgICAkY2xpZW50LT5zZXREZXNjcmlwdGlvbihTZXJ2aWNlRGVzY3JpcHRpb246OmZhY3RvcnkoX19ESVJfXyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnY2xpZW50Lmpzb24nKSk7CgogICAgICAgIHJldHVybiAkY2xpZW50OwogICAgfQpgYGAKCiMjIyBDb252ZXJ0IFhNTCBTZXJ2aWNlIERlc2NyaXB0aW9ucyB0byBKU09OCgoqKkJlZm9yZSoqCgpgYGB4bWwKPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGNsaWVudD4KICAgIDxjb21tYW5kcz4KICAgICAgICA8IS0tIEdyb3VwcyAtLT4KICAgICAgICA8Y29tbWFuZCBuYW1lPSJsaXN0X2dyb3VwcyIgbWV0aG9kPSJHRVQiIHVyaT0iZ3JvdXBzLmpzb24iPgogICAgICAgICAgICA8ZG9jPkdldCBhIGxpc3Qgb2YgZ3JvdXBzPC9kb2M+CiAgICAgICAgPC9jb21tYW5kPgogICAgICAgIDxjb21tYW5kIG5hbWU9InNlYXJjaF9ncm91cHMiIG1ldGhvZD0iR0VUIiB1cmk9J3NlYXJjaC5qc29uP3F1ZXJ5PSJ7e3F1ZXJ5fX0gdHlwZTpncm91cCInPgogICAgICAgICAgICA8ZG9jPlVzZXMgYSBzZWFyY2ggcXVlcnkgdG8gZ2V0IGEgbGlzdCBvZiBncm91cHM8L2RvYz4KICAgICAgICAgICAgPHBhcmFtIG5hbWU9InF1ZXJ5IiB0eXBlPSJzdHJpbmciIHJlcXVpcmVkPSJ0cnVlIiAvPgogICAgICAgIDwvY29tbWFuZD4KICAgICAgICA8Y29tbWFuZCBuYW1lPSJjcmVhdGVfZ3JvdXAiIG1ldGhvZD0iUE9TVCIgdXJpPSJncm91cHMuanNvbiI+CiAgICAgICAgICAgIDxkb2M+Q3JlYXRlIGEgZ3JvdXA8L2RvYz4KICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRhdGEiIHR5cGU9ImFycmF5IiBsb2NhdGlvbj0iYm9keSIgZmlsdGVycz0ianNvbl9lbmNvZGUiIGRvYz0iR3JvdXAgSlNPTiIvPgogICAgICAgICAgICA8cGFyYW0gbmFtZT0iQ29udGVudC1UeXBlIiBsb2NhdGlvbj0iaGVhZGVyIiBzdGF0aWM9ImFwcGxpY2F0aW9uL2pzb24iLz4KICAgICAgICA8L2NvbW1hbmQ+CiAgICAgICAgPGNvbW1hbmQgbmFtZT0iZGVsZXRlX2dyb3VwIiBtZXRob2Q9IkRFTEVURSIgdXJpPSJncm91cHMve3tpZH19Lmpzb24iPgogICAgICAgICAgICA8ZG9jPkRlbGV0ZSBhIGdyb3VwIGJ5IElEPC9kb2M+CiAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJpZCIgdHlwZT0iaW50ZWdlciIgcmVxdWlyZWQ9InRydWUiLz4KICAgICAgICA8L2NvbW1hbmQ+CiAgICAgICAgPGNvbW1hbmQgbmFtZT0iZ2V0X2dyb3VwIiBtZXRob2Q9IkdFVCIgdXJpPSJncm91cHMve3tpZH19Lmpzb24iPgogICAgICAgICAgICA8cGFyYW0gbmFtZT0iaWQiIHR5cGU9ImludGVnZXIiIHJlcXVpcmVkPSJ0cnVlIi8+CiAgICAgICAgPC9jb21tYW5kPgogICAgICAgIDxjb21tYW5kIG5hbWU9InVwZGF0ZV9ncm91cCIgbWV0aG9kPSJQVVQiIHVyaT0iZ3JvdXBzL3t7aWR9fS5qc29uIj4KICAgICAgICAgICAgPGRvYz5VcGRhdGUgYSBncm91cDwvZG9jPgogICAgICAgICAgICA8cGFyYW0gbmFtZT0iaWQiIHR5cGU9ImludGVnZXIiIHJlcXVpcmVkPSJ0cnVlIi8+CiAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkYXRhIiB0eXBlPSJhcnJheSIgbG9jYXRpb249ImJvZHkiIGZpbHRlcnM9Impzb25fZW5jb2RlIiBkb2M9Ikdyb3VwIEpTT04iLz4KICAgICAgICAgICAgPHBhcmFtIG5hbWU9IkNvbnRlbnQtVHlwZSIgbG9jYXRpb249ImhlYWRlciIgc3RhdGljPSJhcHBsaWNhdGlvbi9qc29uIi8+CiAgICAgICAgPC9jb21tYW5kPgogICAgPC9jb21tYW5kcz4KPC9jbGllbnQ+CmBgYAoKKipBZnRlcioqCgpgYGBqc29uCnsKICAgICJuYW1lIjogICAgICAgIlplbmRlc2sgUkVTVCBBUEkgdjIiLAogICAgImFwaVZlcnNpb24iOiAiMjAxMi0xMi0zMSIsCiAgICAiZGVzY3JpcHRpb24iOiJQcm92aWRlcyBhY2Nlc3MgdG8gWmVuZGVzayB2aWV3cywgZ3JvdXBzLCB0aWNrZXRzLCB0aWNrZXQgZmllbGRzLCBhbmQgdXNlcnMiLAogICAgIm9wZXJhdGlvbnMiOiB7CiAgICAgICAgImxpc3RfZ3JvdXBzIjogIHsKICAgICAgICAgICAgImh0dHBNZXRob2QiOiJHRVQiLAogICAgICAgICAgICAidXJpIjogICAgICAgImdyb3Vwcy5qc29uIiwKICAgICAgICAgICAgInN1bW1hcnkiOiAgICJHZXQgYSBsaXN0IG9mIGdyb3VwcyIKICAgICAgICB9LAogICAgICAgICJzZWFyY2hfZ3JvdXBzIjp7CiAgICAgICAgICAgICJodHRwTWV0aG9kIjoiR0VUIiwKICAgICAgICAgICAgInVyaSI6ICAgICAgICJzZWFyY2guanNvbj9xdWVyeT1cIntxdWVyeX0gdHlwZTpncm91cFwiIiwKICAgICAgICAgICAgInN1bW1hcnkiOiAgICJVc2VzIGEgc2VhcmNoIHF1ZXJ5IHRvIGdldCBhIGxpc3Qgb2YgZ3JvdXBzIiwKICAgICAgICAgICAgInBhcmFtZXRlcnMiOnsKICAgICAgICAgICAgICAgICJxdWVyeSI6ewogICAgICAgICAgICAgICAgICAgICJsb2NhdGlvbiI6ICAgInVyaSIsCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjoiWmVuZGVzayBTZWFyY2ggUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgInJlcXVpcmVkIjogICB0cnVlCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJjcmVhdGVfZ3JvdXAiOiB7CiAgICAgICAgICAgICJodHRwTWV0aG9kIjoiUE9TVCIsCiAgICAgICAgICAgICJ1cmkiOiAgICAgICAiZ3JvdXBzLmpzb24iLAogICAgICAgICAgICAic3VtbWFyeSI6ICAgIkNyZWF0ZSBhIGdyb3VwIiwKICAgICAgICAgICAgInBhcmFtZXRlcnMiOnsKICAgICAgICAgICAgICAgICJkYXRhIjogICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIjogICAiYm9keSIsCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjoiR3JvdXAgSlNPTiIsCiAgICAgICAgICAgICAgICAgICAgImZpbHRlcnMiOiAgICAianNvbl9lbmNvZGUiLAogICAgICAgICAgICAgICAgICAgICJyZXF1aXJlZCI6ICAgdHJ1ZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJDb250ZW50LVR5cGUiOnsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAgICJsb2NhdGlvbiI6ImhlYWRlciIsCiAgICAgICAgICAgICAgICAgICAgInN0YXRpYyI6ICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImRlbGV0ZV9ncm91cCI6IHsKICAgICAgICAgICAgImh0dHBNZXRob2QiOiJERUxFVEUiLAogICAgICAgICAgICAidXJpIjogICAgICAgImdyb3Vwcy97aWR9Lmpzb24iLAogICAgICAgICAgICAic3VtbWFyeSI6ICAgIkRlbGV0ZSBhIGdyb3VwIiwKICAgICAgICAgICAgInBhcmFtZXRlcnMiOnsKICAgICAgICAgICAgICAgICJpZCI6ewogICAgICAgICAgICAgICAgICAgICJsb2NhdGlvbiI6ICAgInVyaSIsCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjoiR3JvdXAgdG8gZGVsZXRlIGJ5IElEIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICAgICAgICJpbnRlZ2VyIiwKICAgICAgICAgICAgICAgICAgICAicmVxdWlyZWQiOiAgIHRydWUKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImdldF9ncm91cCI6ICAgIHsKICAgICAgICAgICAgImh0dHBNZXRob2QiOiJHRVQiLAogICAgICAgICAgICAidXJpIjogICAgICAgImdyb3Vwcy97aWR9Lmpzb24iLAogICAgICAgICAgICAic3VtbWFyeSI6ICAgIkdldCBhIHRpY2tldCIsCiAgICAgICAgICAgICJwYXJhbWV0ZXJzIjp7CiAgICAgICAgICAgICAgICAiaWQiOnsKICAgICAgICAgICAgICAgICAgICAibG9jYXRpb24iOiAgICJ1cmkiLAogICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6Ikdyb3VwIHRvIGdldCBieSBJRCIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAgICAgICAiaW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgInJlcXVpcmVkIjogICB0cnVlCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJ1cGRhdGVfZ3JvdXAiOiB7CiAgICAgICAgICAgICJodHRwTWV0aG9kIjoiUFVUIiwKICAgICAgICAgICAgInVyaSI6ICAgICAgICJncm91cHMve2lkfS5qc29uIiwKICAgICAgICAgICAgInN1bW1hcnkiOiAgICJVcGRhdGUgYSBncm91cCIsCiAgICAgICAgICAgICJwYXJhbWV0ZXJzIjp7CiAgICAgICAgICAgICAgICAiaWQiOiAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIjogICAidXJpIiwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiJHcm91cCB0byB1cGRhdGUgYnkgSUQiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogICAgICAgImludGVnZXIiLAogICAgICAgICAgICAgICAgICAgICJyZXF1aXJlZCI6ICAgdHJ1ZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJkYXRhIjogICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIjogICAiYm9keSIsCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjoiR3JvdXAgSlNPTiIsCiAgICAgICAgICAgICAgICAgICAgImZpbHRlcnMiOiAgICAianNvbl9lbmNvZGUiLAogICAgICAgICAgICAgICAgICAgICJyZXF1aXJlZCI6ICAgdHJ1ZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJDb250ZW50LVR5cGUiOnsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAgICJsb2NhdGlvbiI6ImhlYWRlciIsCiAgICAgICAgICAgICAgICAgICAgInN0YXRpYyI6ICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KfQpgYGAKCiMjIyBHdXp6bGVcU2VydmljZVxEZXNjcmlwdGlvblxTZXJ2aWNlRGVzY3JpcHRpb24KCkNvbW1hbmRzIGFyZSBub3cgY2FsbGVkIE9wZXJhdGlvbnMKCioqQmVmb3JlKioKCmBgYHBocAp1c2UgR3V6emxlXFNlcnZpY2VcRGVzY3JpcHRpb25cU2VydmljZURlc2NyaXB0aW9uOwoKJHNkID0gbmV3IFNlcnZpY2VEZXNjcmlwdGlvbigpOwokc2QtPmdldENvbW1hbmRzKCk7ICAgICAvLyBAcmV0dXJucyBBcGlDb21tYW5kSW50ZXJmYWNlW10KJHNkLT5oYXNDb21tYW5kKCRuYW1lKTsKJHNkLT5nZXRDb21tYW5kKCRuYW1lKTsgLy8gQHJldHVybnMgQXBpQ29tbWFuZEludGVyZmFjZXxudWxsCiRzZC0+YWRkQ29tbWFuZCgkY29tbWFuZCk7IC8vIEBwYXJhbSBBcGlDb21tYW5kSW50ZXJmYWNlICRjb21tYW5kCmBgYAoKKipBZnRlcioqCgpgYGBwaHAKdXNlIEd1enpsZVxTZXJ2aWNlXERlc2NyaXB0aW9uXFNlcnZpY2VEZXNjcmlwdGlvbjsKCiRzZCA9IG5ldyBTZXJ2aWNlRGVzY3JpcHRpb24oKTsKJHNkLT5nZXRPcGVyYXRpb25zKCk7ICAgICAgICAgICAvLyBAcmV0dXJucyBPcGVyYXRpb25JbnRlcmZhY2VbXQokc2QtPmhhc09wZXJhdGlvbigkbmFtZSk7CiRzZC0+Z2V0T3BlcmF0aW9uKCRuYW1lKTsgICAgICAgLy8gQHJldHVybnMgT3BlcmF0aW9uSW50ZXJmYWNlfG51bGwKJHNkLT5hZGRPcGVyYXRpb24oJG9wZXJhdGlvbik7ICAvLyBAcGFyYW0gT3BlcmF0aW9uSW50ZXJmYWNlICRvcGVyYXRpb24KYGBgCgojIyMgR3V6emxlXENvbW1vblxJbmZsZWN0aW9uXEluZmxlY3RvcgoKTmFtZXNwYWNlIGlzIG5vdyBgR3V6emxlXEluZmxlY3Rpb25cSW5mbGVjdG9yYAoKIyMjIEd1enpsZVxIdHRwXFBsdWdpbgoKTmFtZXNwYWNlIGlzIG5vdyBgR3V6emxlXFBsdWdpbmAuIE1hbnkgb3RoZXIgY2hhbmdlcyBvY2N1ciB3aXRoaW4gdGhpcyBuYW1lc3BhY2UgYW5kIGFyZSBkZXRhaWxlZCBpbiB0aGVpciBvd24gc2VjdGlvbnMgYmVsb3cuCgojIyMgR3V6emxlXEh0dHBcUGx1Z2luXExvZ1BsdWdpbiBhbmQgR3V6emxlXENvbW1vblxMb2cKCk5vdyBgR3V6emxlXFBsdWdpblxMb2dcTG9nUGx1Z2luYCBhbmQgYEd1enpsZVxMb2dgIHJlc3BlY3RpdmVseS4KCioqQmVmb3JlKioKCmBgYHBocAp1c2UgR3V6emxlXENvbW1vblxMb2dcQ2xvc3VyZUxvZ0FkYXB0ZXI7CnVzZSBHdXp6bGVcSHR0cFxQbHVnaW5cTG9nUGx1Z2luOwoKLyoqIEB2YXIgXEd1enpsZVxIdHRwXENsaWVudCAqLwokY2xpZW50OwoKLy8gJHZlcmJvc2l0eSBpcyBhbiBpbnRlZ2VyIGluZGljYXRpbmcgZGVzaXJlZCBtZXNzYWdlIHZlcmJvc2l0eSBsZXZlbAokY2xpZW50LT5hZGRTdWJzY3JpYmVyKG5ldyBMb2dQbHVnaW4obmV3IENsb3N1cmVMb2dBZGFwdGVyKGZ1bmN0aW9uKCRtKSB7IGVjaG8gJG07IH0sICR2ZXJib3NpdHkgPSBMb2dQbHVnaW46OkxPR19WRVJCT1NFKTsKYGBgCgoqKkFmdGVyKioKCmBgYHBocAp1c2UgR3V6emxlXExvZ1xDbG9zdXJlTG9nQWRhcHRlcjsKdXNlIEd1enpsZVxMb2dcTWVzc2FnZUZvcm1hdHRlcjsKdXNlIEd1enpsZVxQbHVnaW5cTG9nXExvZ1BsdWdpbjsKCi8qKiBAdmFyIFxHdXp6bGVcSHR0cFxDbGllbnQgKi8KJGNsaWVudDsKCi8vICRmb3JtYXQgaXMgYSBzdHJpbmcgaW5kaWNhdGluZyBkZXNpcmVkIG1lc3NhZ2UgZm9ybWF0IC0tIEBzZWUgTWVzc2FnZUZvcm1hdHRlcgokY2xpZW50LT5hZGRTdWJzY3JpYmVyKG5ldyBMb2dQbHVnaW4obmV3IENsb3N1cmVMb2dBZGFwdGVyKGZ1bmN0aW9uKCRtKSB7IGVjaG8gJG07IH0sICRmb3JtYXQgPSBNZXNzYWdlRm9ybWF0dGVyOjpERUJVR19GT1JNQVQpOwpgYGAKCiMjIyBHdXp6bGVcSHR0cFxQbHVnaW5cQ3VybEF1dGhQbHVnaW4KCk5vdyBgR3V6emxlXFBsdWdpblxDdXJsQXV0aFxDdXJsQXV0aFBsdWdpbmAuCgojIyMgR3V6emxlXEh0dHBcUGx1Z2luXEV4cG9uZW50aWFsQmFja29mZlBsdWdpbgoKTm93IGBHdXp6bGVcUGx1Z2luXEJhY2tvZmZcQmFja29mZlBsdWdpbmAsIGFuZCBvdGhlciBjaGFuZ2VzLgoKKipCZWZvcmUqKgoKYGBgcGhwCnVzZSBHdXp6bGVcSHR0cFxQbHVnaW5cRXhwb25lbnRpYWxCYWNrb2ZmUGx1Z2luOwoKJGJhY2tvZmZQbHVnaW4gPSBuZXcgRXhwb25lbnRpYWxCYWNrb2ZmUGx1Z2luKCRtYXhSZXRyaWVzLCBhcnJheV9tZXJnZSgKICAgICAgICBFeHBvbmVudGlhbEJhY2tvZmZQbHVnaW46OmdldERlZmF1bHRGYWlsdXJlQ29kZXMoKSwgYXJyYXkoNDI5KQogICAgKSk7CgokY2xpZW50LT5hZGRTdWJzY3JpYmVyKCRiYWNrb2ZmUGx1Z2luKTsKYGBgCgoqKkFmdGVyKioKCmBgYHBocAp1c2UgR3V6emxlXFBsdWdpblxCYWNrb2ZmXEJhY2tvZmZQbHVnaW47CnVzZSBHdXp6bGVcUGx1Z2luXEJhY2tvZmZcSHR0cEJhY2tvZmZTdHJhdGVneTsKCi8vIFVzZSBjb252ZW5pZW50IGZhY3RvcnkgbWV0aG9kIGluc3RlYWQgLS0gc2VlIGltcGxlbWVudGF0aW9uIGZvciBpZGVhcyBvZiB3aGF0Ci8vIHlvdSBjYW4gZG8gd2l0aCBjaGFpbmluZyBiYWNrb2ZmIHN0cmF0ZWdpZXMKJGJhY2tvZmZQbHVnaW4gPSBCYWNrb2ZmUGx1Z2luOjpnZXRFeHBvbmVudGlhbEJhY2tvZmYoJG1heFJldHJpZXMsIGFycmF5X21lcmdlKAogICAgICAgIEh0dHBCYWNrb2ZmU3RyYXRlZ3k6OmdldERlZmF1bHRGYWlsdXJlQ29kZXMoKSwgYXJyYXkoNDI5KQogICAgKSk7CiRjbGllbnQtPmFkZFN1YnNjcmliZXIoJGJhY2tvZmZQbHVnaW4pOwpgYGAKCiMjIyBLbm93biBJc3N1ZXMKCiMjIyMgW0JVR10gQWNjZXB0LUVuY29kaW5nIGhlYWRlciBiZWhhdmlvciBjaGFuZ2VkIHVuaW50ZW50aW9uYWxseS4KCihTZWUgIzIxNykgKEZpeGVkIGluIDA5ZGFlYjhjNjY2ZmI0NDQ5OWEwNjQ2ZDY1NWE4YWUzNjQ1NjU3NWUpCgpJbiB2ZXJzaW9uIDIuOCBzZXR0aW5nIHRoZSBgQWNjZXB0LUVuY29kaW5nYCBoZWFkZXIgd291bGQgc2V0IHRoZSBDVVJMT1BUX0VOQ09ESU5HIG9wdGlvbiwgd2hpY2ggcGVybWl0dGVkIGNVUkwgdG8KcHJvcGVybHkgaGFuZGxlIGd6aXAvZGVmbGF0ZSBjb21wcmVzc2VkIHJlc3BvbnNlcyBmcm9tIHRoZSBzZXJ2ZXIuIEluIHZlcnNpb25zIGFmZmVjdGVkIGJ5IHRoaXMgYnVnIHRoaXMgZG9lcyBub3QgaGFwcGVuLgpTZWUgaXNzdWUgIzIxNyBmb3IgYSB3b3JrYXJvdW5kLCBvciB1c2UgYSB2ZXJzaW9uIGNvbnRhaW5pbmcgdGhlIGZpeC4K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/CHANGELOG.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBDSEFOR0VMT0cKCgojIyAyLjMuMCAtIDIwMjUtMDgtMjIKCiMjIyBBZGRlZAoKLSBQSFAgOC41IHN1cHBvcnQKCgojIyAyLjIuMCAtIDIwMjUtMDMtMjcKCiMjIyBGaXhlZAoKLSBSZXZlcnQgIkFsbG93IGFuIGVtcHR5IEVhY2hQcm9taXNlIHRvIGJlIHJlc29sdmVkIGJ5IHJ1bm5pbmcgdGhlIHF1ZXVlIgoKCiMjIDIuMS4wIC0gMjAyNS0wMy0yNwoKIyMjIEFkZGVkCgotIEFsbG93IGFuIGVtcHR5IEVhY2hQcm9taXNlIHRvIGJlIHJlc29sdmVkIGJ5IHJ1bm5pbmcgdGhlIHF1ZXVlCgoKIyMgMi4wLjQgLSAyMDI0LTEwLTE3CgojIyMgRml4ZWQKCi0gT25jZSBzZXR0bGVkLCBkb24ndCBhbGxvdyBmdXJ0aGVyIHJlamVjdGlvbiBvZiBhZGRpdGlvbmFsIHByb21pc2VzCgoKIyMgMi4wLjMgLSAyMDI0LTA3LTE4CgojIyMgQ2hhbmdlZAoKLSBQSFAgOC40IHN1cHBvcnQKCgojIyAyLjAuMiAtIDIwMjMtMTItMDMKCiMjIyBDaGFuZ2VkCgotIFJlcGxhY2VkIGBjYWxsX3VzZXJfZnVuYypgIHdpdGggbmF0aXZlIGNhbGxzCgoKIyMgMi4wLjEgLSAyMDIzLTA4LTAzCgojIyMgQ2hhbmdlZAoKLSBQSFAgOC4zIHN1cHBvcnQKCgojIyAyLjAuMCAtIDIwMjMtMDUtMjEKCiMjIyBBZGRlZAoKLSBBZGRlZCBQSFAgNyB0eXBlIGhpbnRzCgojIyMgQ2hhbmdlZAoKLSBBbGwgcHJldmlvdXNseSBub24tZmluYWwgbm9uLWV4Y2VwdGlvbiBjbGFzc2VzIGhhdmUgYmVlbiBtYXJrZWQgYXMgc29mdC1maW5hbAoKIyMjIFJlbW92ZWQKCi0gRHJvcHBlZCBQSFAgPCA3LjIgc3VwcG9ydAotIEFsbCBmdW5jdGlvbnMgaW4gdGhlIGBHdXp6bGVIdHRwXFByb21pc2VgIG5hbWVzcGFjZQoKCiMjIDEuNS4zIC0gMjAyMy0wNS0yMQoKIyMjIENoYW5nZWQKCi0gUmVtb3ZlZCByZW1haW5pbmcgdXNhZ2Ugb2YgZGVwcmVjYXRlZCBmdW5jdGlvbnMKCgojIyAxLjUuMiAtIDIwMjItMDgtMDcKCiMjIyBDaGFuZ2VkCgotIE9mZmljaWFsbHkgc3VwcG9ydCBQSFAgOC4yCgoKIyMgMS41LjEgLSAyMDIxLTEwLTIyCgojIyMgRml4ZWQKCi0gUmV2ZXJ0ICJDYWxsIGhhbmRsZXIgd2hlbiB3YWl0aW5nIG9uIGZ1bGZpbGxlZC9yZWplY3RlZCBQcm9taXNlIgotIEZpeCBwb29sIG1lbW9yeSBsZWFrIHdoZW4gZW1wdHkgYXJyYXkgb2YgcHJvbWlzZXMgcHJvdmlkZWQKCgojIyAxLjUuMCAtIDIwMjEtMTAtMDcKCiMjIyBDaGFuZ2VkCgotIENhbGwgaGFuZGxlciB3aGVuIHdhaXRpbmcgb24gZnVsZmlsbGVkL3JlamVjdGVkIFByb21pc2UKLSBPZmZpY2lhbGx5IHN1cHBvcnQgUEhQIDguMQoKIyMjIEZpeGVkCgotIEZpeCBtYW51YWxseSBzZXR0bGUgcHJvbWlzZXMgZ2VuZXJhdGVkIHdpdGggYFV0aWxzOjp0YXNrYAoKCiMjIDEuNC4xIC0gMjAyMS0wMi0xOAoKIyMjIEZpeGVkCgotIEZpeGVkIGBlYWNoX2xpbWl0YCBza2lwcGluZyBwcm9taXNlcyBhbmQgZmFpbGluZwoKCiMjIDEuNC4wIC0gMjAyMC0wOS0zMAoKIyMjIEFkZGVkCgotIFN1cHBvcnQgZm9yIFBIUCA4Ci0gT3B0aW9uYWwgYCRyZWN1cnNpdmVgIGZsYWcgdG8gYGFsbGAKLSBSZXBsYWNlZCBmdW5jdGlvbnMgYnkgc3RhdGljIG1ldGhvZHMKCiMjIyBGaXhlZAoKLSBGaXggZW1wdHkgYGVhY2hgIHByb2Nlc3NpbmcKLSBGaXggcHJvbWlzZSBoYW5kbGluZyBmb3IgSXRlcmF0b3JzIG9mIG5vbi11bmlxdWUga2V5cwotIEZpeGVkIGBtZXRob2RfZXhpc3RzYCBjcmFzaGVzIG9uIFBIUCA4Ci0gTWVtb3J5IGxlYWsgb24gZXhjZXB0aW9ucwoKCiMjIDEuMy4xIC0gMjAxNi0xMi0yMAoKIyMjIEZpeGVkCgotIGB3YWl0KClgIGZvcmVpZ24gcHJvbWlzZSBjb21wYXRpYmlsaXR5CgoKIyMgMS4zLjAgLSAyMDE2LTExLTE4CgojIyMgQWRkZWQKCi0gQWRkcyBzdXBwb3J0IGZvciBjdXN0b20gdGFzayBxdWV1ZXMuCgojIyMgRml4ZWQKCi0gRml4ZWQgY29yb3V0aW5lIHByb21pc2UgbWVtb3J5IGxlYWsuCgoKIyMgMS4yLjAgLSAyMDE2LTA1LTE4CgojIyMgQ2hhbmdlZAoKLSBVcGRhdGUgdG8gbm93IGNhdGNoIGBcVGhyb3dhYmxlYCBvbiBQSFAgNysKCgojIyAxLjEuMCAtIDIwMTYtMDMtMDcKCiMjIyBDaGFuZ2VkCgotIFVwZGF0ZSBFYWNoUHJvbWlzZSB0byBwcmV2ZW50IHJlY3VycmluZyBvbiBhIGl0ZXJhdG9yIHdoZW4gYWR2YW5jaW5nLCBhcyB0aGlzCiAgY291bGQgdHJpZ2dlciBmYXRhbCBnZW5lcmF0b3IgZXJyb3JzLgotIFVwZGF0ZSBQcm9taXNlIHRvIGFsbG93IHJlY3Vyc2l2ZSB3YWl0aW5nIHdpdGhvdXQgdW53cmFwcGluZyBleGNlcHRpb25zLgoKCiMjIDEuMC4zIC0gMjAxNS0xMC0xNQoKIyMjIENoYW5nZWQKCi0gVXBkYXRlIEVhY2hQcm9taXNlIHRvIGltbWVkaWF0ZWx5IHJlc29sdmUgd2hlbiB0aGUgdW5kZXJseWluZyBwcm9taXNlIGl0ZXJhdG9yCiAgaXMgZW1wdHkuIFByZXZpb3VzbHksIHN1Y2ggYSBwcm9taXNlIHdvdWxkIHRocm93IGFuIGV4Y2VwdGlvbiB3aGVuIGl0cyBgd2FpdGAKICBmdW5jdGlvbiB3YXMgY2FsbGVkLgoKCiMjIDEuMC4yIC0gMjAxNS0wNS0xNQoKIyMjIENoYW5nZWQKCi0gQ29uZGl0aW9uYWxseSByZXF1aXJlIGZ1bmN0aW9ucy5waHAuCgoKIyMgMS4wLjEgLSAyMDE1LTA2LTI0CgojIyMgQ2hhbmdlZAoKLSBVcGRhdGluZyBFYWNoUHJvbWlzZSB0byBjYWxsIG5leHQgb24gdGhlIHVuZGVybHlpbmcgcHJvbWlzZSBpdGVyYXRvciBhcyBsYXRlCiAgYXMgcG9zc2libGUgdG8gZW5zdXJlIHRoYXQgZ2VuZXJhdG9ycyB0aGF0IGdlbmVyYXRlIG5ldyByZXF1ZXN0cyBiYXNlZCBvbgogIGNhbGxiYWNrcyBhcmUgbm90IGl0ZXJhdGVkIHVudGlsIGFmdGVyIGNhbGxiYWNrcyBhcmUgaW52b2tlZC4KCgojIyAxLjAuMCAtIDIwMTUtMDUtMTIKCi0gSW5pdGlhbCByZWxlYXNlCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAiZ3V6emxlaHR0cC9wcm9taXNlcyIsCiAgICAiZGVzY3JpcHRpb24iOiAiR3V6emxlIHByb21pc2VzIGxpYnJhcnkiLAogICAgImtleXdvcmRzIjogWyJwcm9taXNlIl0sCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJHcmFoYW0gQ2FtcGJlbGwiLAogICAgICAgICAgICAiZW1haWwiOiAiaGVsbG9AZ2pjYW1wYmVsbC5jby51ayIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vR3JhaGFtQ2FtcGJlbGwiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIk1pY2hhZWwgRG93bGluZyIsCiAgICAgICAgICAgICJlbWFpbCI6ICJtdGRvd2xpbmdAZ21haWwuY29tIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9tdGRvd2xpbmciCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIlRvYmlhcyBOeWhvbG0iLAogICAgICAgICAgICAiZW1haWwiOiAidG9iaWFzLm55aG9sbUBnbWFpbC5jb20iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL055aG9sbSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiVG9iaWFzIFNjaHVsdHplIiwKICAgICAgICAgICAgImVtYWlsIjogIndlYm1hc3RlckB0dWJvLXdvcmxkLmRlIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9Ub2Jpb24iCiAgICAgICAgfQogICAgXSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiOiAiXjcuMi41IHx8IF44LjAiCiAgICB9LAogICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICJiYW1hcm5pL2NvbXBvc2VyLWJpbi1wbHVnaW4iOiAiXjEuOC4yIiwKICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl44LjUuNDQgfHwgXjkuNi4yNSIKICAgIH0sCiAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiR3V6emxlSHR0cFxcUHJvbWlzZVxcIjogInNyYy8iCiAgICAgICAgfQogICAgfSwKICAgICJhdXRvbG9hZC1kZXYiOiB7CiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiR3V6emxlSHR0cFxcUHJvbWlzZVxcVGVzdHNcXCI6ICJ0ZXN0cy8iCiAgICAgICAgfQogICAgfSwKICAgICJleHRyYSI6IHsKICAgICAgICAiYmFtYXJuaS1iaW4iOiB7CiAgICAgICAgICAgICJiaW4tbGlua3MiOiB0cnVlLAogICAgICAgICAgICAiZm9yd2FyZC1jb21tYW5kIjogZmFsc2UKICAgICAgICB9CiAgICB9LAogICAgImNvbmZpZyI6IHsKICAgICAgICAiYWxsb3ctcGx1Z2lucyI6IHsKICAgICAgICAgICAgImJhbWFybmkvY29tcG9zZXItYmluLXBsdWdpbiI6IHRydWUKICAgICAgICB9LAogICAgICAgICJwcmVmZXJyZWQtaW5zdGFsbCI6ICJkaXN0IiwKICAgICAgICAic29ydC1wYWNrYWdlcyI6IHRydWUKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTUgTWljaGFlbCBEb3dsaW5nIDxtdGRvd2xpbmdAZ21haWwuY29tPgpDb3B5cmlnaHQgKGMpIDIwMTUgR3JhaGFtIENhbXBiZWxsIDxoZWxsb0BnamNhbXBiZWxsLmNvLnVrPgpDb3B5cmlnaHQgKGMpIDIwMTcgVG9iaWFzIFNjaHVsdHplIDx3ZWJtYXN0ZXJAdHViby13b3JsZC5kZT4KQ29weXJpZ2h0IChjKSAyMDIwIFRvYmlhcyBOeWhvbG0gPHRvYmlhcy5ueWhvbG1AZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgphbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBHdXp6bGUgUHJvbWlzZXMKCltQcm9taXNlcy9BK10oaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8pIGltcGxlbWVudGF0aW9uIHRoYXQgaGFuZGxlcyBwcm9taXNlCmNoYWluaW5nIGFuZCByZXNvbHV0aW9uIGl0ZXJhdGl2ZWx5LCBhbGxvd2luZyBmb3IgImluZmluaXRlIiBwcm9taXNlIGNoYWluaW5nCndoaWxlIGtlZXBpbmcgdGhlIHN0YWNrIHNpemUgY29uc3RhbnQuIFJlYWQgW3RoaXMgYmxvZyBwb3N0XShodHRwczovL2Jsb2cuZG9tZW5pYy5tZS95b3VyZS1taXNzaW5nLXRoZS1wb2ludC1vZi1wcm9taXNlcy8pCmZvciBhIGdlbmVyYWwgaW50cm9kdWN0aW9uIHRvIHByb21pc2VzLgoKLSBbRmVhdHVyZXNdKCNmZWF0dXJlcykKLSBbUXVpY2sgc3RhcnRdKCNxdWljay1zdGFydCkKLSBbU3luY2hyb25vdXMgd2FpdF0oI3N5bmNocm9ub3VzLXdhaXQpCi0gW0NhbmNlbGxhdGlvbl0oI2NhbmNlbGxhdGlvbikKLSBbQVBJXSgjYXBpKQogIC0gW1Byb21pc2VdKCNwcm9taXNlKQogIC0gW0Z1bGZpbGxlZFByb21pc2VdKCNmdWxmaWxsZWRwcm9taXNlKQogIC0gW1JlamVjdGVkUHJvbWlzZV0oI3JlamVjdGVkcHJvbWlzZSkKLSBbUHJvbWlzZSBpbnRlcm9wXSgjcHJvbWlzZS1pbnRlcm9wKQotIFtJbXBsZW1lbnRhdGlvbiBub3Rlc10oI2ltcGxlbWVudGF0aW9uLW5vdGVzKQoKCiMjIEZlYXR1cmVzCgotIFtQcm9taXNlcy9BK10oaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8pIGltcGxlbWVudGF0aW9uLgotIFByb21pc2UgcmVzb2x1dGlvbiBhbmQgY2hhaW5pbmcgaXMgaGFuZGxlZCBpdGVyYXRpdmVseSwgYWxsb3dpbmcgZm9yCiAgImluZmluaXRlIiBwcm9taXNlIGNoYWluaW5nLgotIFByb21pc2VzIGhhdmUgYSBzeW5jaHJvbm91cyBgd2FpdGAgbWV0aG9kLgotIFByb21pc2VzIGNhbiBiZSBjYW5jZWxsZWQuCi0gV29ya3Mgd2l0aCBhbnkgb2JqZWN0IHRoYXQgaGFzIGEgYHRoZW5gIGZ1bmN0aW9uLgotIEMjIHN0eWxlIGFzeW5jL2F3YWl0IGNvcm91dGluZSBwcm9taXNlcyB1c2luZwogIGBHdXp6bGVIdHRwXFByb21pc2VcQ29yb3V0aW5lOjpvZigpYC4KCgojIyBJbnN0YWxsYXRpb24KCmBgYHNoZWxsCmNvbXBvc2VyIHJlcXVpcmUgZ3V6emxlaHR0cC9wcm9taXNlcwpgYGAKCgojIyBWZXJzaW9uIEd1aWRhbmNlCgp8IFZlcnNpb24gfCBTdGF0dXMgICAgICAgICAgICAgIHwgUEhQIFZlcnNpb24gIHwKfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18CnwgMS54ICAgICB8IFNlY3VyaXR5IGZpeGVzIG9ubHkgfCA+PTUuNSw8OC4zICAgfAp8IDIueCAgICAgfCBMYXRlc3QgICAgICAgICAgICAgIHwgPj03LjIuNSw8OC42IHwKCgojIyBRdWljayBTdGFydAoKQSAqcHJvbWlzZSogcmVwcmVzZW50cyB0aGUgZXZlbnR1YWwgcmVzdWx0IG9mIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uIFRoZQpwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9kLCB3aGljaApyZWdpc3RlcnMgY2FsbGJhY2tzIHRvIHJlY2VpdmUgZWl0aGVyIGEgcHJvbWlzZSdzIGV2ZW50dWFsIHZhbHVlIG9yIHRoZSByZWFzb24Kd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuCgojIyMgQ2FsbGJhY2tzCgpDYWxsYmFja3MgYXJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgYHRoZW5gIG1ldGhvZCBieSBwcm92aWRpbmcgYW4gb3B0aW9uYWwgCmAkb25GdWxmaWxsZWRgIGZvbGxvd2VkIGJ5IGFuIG9wdGlvbmFsIGAkb25SZWplY3RlZGAgZnVuY3Rpb24uCgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUHJvbWlzZTsKCiRwcm9taXNlID0gbmV3IFByb21pc2UoKTsKJHByb21pc2UtPnRoZW4oCiAgICAvLyAkb25GdWxmaWxsZWQKICAgIGZ1bmN0aW9uICgkdmFsdWUpIHsKICAgICAgICBlY2hvICdUaGUgcHJvbWlzZSB3YXMgZnVsZmlsbGVkLic7CiAgICB9LAogICAgLy8gJG9uUmVqZWN0ZWQKICAgIGZ1bmN0aW9uICgkcmVhc29uKSB7CiAgICAgICAgZWNobyAnVGhlIHByb21pc2Ugd2FzIHJlamVjdGVkLic7CiAgICB9Cik7CmBgYAoKKlJlc29sdmluZyogYSBwcm9taXNlIG1lYW5zIHRoYXQgeW91IGVpdGhlciBmdWxmaWxsIGEgcHJvbWlzZSB3aXRoIGEgKnZhbHVlKiBvcgpyZWplY3QgYSBwcm9taXNlIHdpdGggYSAqcmVhc29uKi4gUmVzb2x2aW5nIGEgcHJvbWlzZSB0cmlnZ2VycyBjYWxsYmFja3MKcmVnaXN0ZXJlZCB3aXRoIHRoZSBwcm9taXNlJ3MgYHRoZW5gIG1ldGhvZC4gVGhlc2UgY2FsbGJhY2tzIGFyZSB0cmlnZ2VyZWQKb25seSBvbmNlIGFuZCBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlIGFkZGVkLgoKIyMjIFJlc29sdmluZyBhIFByb21pc2UKClByb21pc2VzIGFyZSBmdWxmaWxsZWQgdXNpbmcgdGhlIGByZXNvbHZlKCR2YWx1ZSlgIG1ldGhvZC4gUmVzb2x2aW5nIGEgcHJvbWlzZQp3aXRoIGFueSB2YWx1ZSBvdGhlciB0aGFuIGEgYEd1enpsZUh0dHBcUHJvbWlzZVxSZWplY3RlZFByb21pc2VgIHdpbGwgdHJpZ2dlcgphbGwgb2YgdGhlIG9uRnVsZmlsbGVkIGNhbGxiYWNrcyAocmVzb2x2aW5nIGEgcHJvbWlzZSB3aXRoIGEgcmVqZWN0ZWQgcHJvbWlzZQp3aWxsIHJlamVjdCB0aGUgcHJvbWlzZSBhbmQgdHJpZ2dlciB0aGUgYCRvblJlamVjdGVkYCBjYWxsYmFja3MpLgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUHJvbWlzZTsKCiRwcm9taXNlID0gbmV3IFByb21pc2UoKTsKJHByb21pc2UKICAgIC0+dGhlbihmdW5jdGlvbiAoJHZhbHVlKSB7CiAgICAgICAgLy8gUmV0dXJuIGEgdmFsdWUgYW5kIGRvbid0IGJyZWFrIHRoZSBjaGFpbgogICAgICAgIHJldHVybiAiSGVsbG8sICIgLiAkdmFsdWU7CiAgICB9KQogICAgLy8gVGhpcyB0aGVuIGlzIGV4ZWN1dGVkIGFmdGVyIHRoZSBmaXJzdCB0aGVuIGFuZCByZWNlaXZlcyB0aGUgdmFsdWUKICAgIC8vIHJldHVybmVkIGZyb20gdGhlIGZpcnN0IHRoZW4uCiAgICAtPnRoZW4oZnVuY3Rpb24gKCR2YWx1ZSkgewogICAgICAgIGVjaG8gJHZhbHVlOwogICAgfSk7CgovLyBSZXNvbHZpbmcgdGhlIHByb21pc2UgdHJpZ2dlcnMgdGhlICRvbkZ1bGZpbGxlZCBjYWxsYmFja3MgYW5kIG91dHB1dHMKLy8gIkhlbGxvLCByZWFkZXIuIgokcHJvbWlzZS0+cmVzb2x2ZSgncmVhZGVyLicpOwpgYGAKCiMjIyBQcm9taXNlIEZvcndhcmRpbmcKClByb21pc2VzIGNhbiBiZSBjaGFpbmVkIG9uZSBhZnRlciB0aGUgb3RoZXIuIEVhY2ggdGhlbiBpbiB0aGUgY2hhaW4gaXMgYSBuZXcKcHJvbWlzZS4gVGhlIHJldHVybiB2YWx1ZSBvZiBhIHByb21pc2UgaXMgd2hhdCdzIGZvcndhcmRlZCB0byB0aGUgbmV4dApwcm9taXNlIGluIHRoZSBjaGFpbi4gUmV0dXJuaW5nIGEgcHJvbWlzZSBpbiBhIGB0aGVuYCBjYWxsYmFjayB3aWxsIGNhdXNlIHRoZQpzdWJzZXF1ZW50IHByb21pc2VzIGluIHRoZSBjaGFpbiB0byBvbmx5IGJlIGZ1bGZpbGxlZCB3aGVuIHRoZSByZXR1cm5lZCBwcm9taXNlCmhhcyBiZWVuIGZ1bGZpbGxlZC4gVGhlIG5leHQgcHJvbWlzZSBpbiB0aGUgY2hhaW4gd2lsbCBiZSBpbnZva2VkIHdpdGggdGhlCnJlc29sdmVkIHZhbHVlIG9mIHRoZSBwcm9taXNlLgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUHJvbWlzZTsKCiRwcm9taXNlID0gbmV3IFByb21pc2UoKTsKJG5leHRQcm9taXNlID0gbmV3IFByb21pc2UoKTsKCiRwcm9taXNlCiAgICAtPnRoZW4oZnVuY3Rpb24gKCR2YWx1ZSkgdXNlICgkbmV4dFByb21pc2UpIHsKICAgICAgICBlY2hvICR2YWx1ZTsKICAgICAgICByZXR1cm4gJG5leHRQcm9taXNlOwogICAgfSkKICAgIC0+dGhlbihmdW5jdGlvbiAoJHZhbHVlKSB7CiAgICAgICAgZWNobyAkdmFsdWU7CiAgICB9KTsKCi8vIFRyaWdnZXJzIHRoZSBmaXJzdCBjYWxsYmFjayBhbmQgb3V0cHV0cyAiQSIKJHByb21pc2UtPnJlc29sdmUoJ0EnKTsKLy8gVHJpZ2dlcnMgdGhlIHNlY29uZCBjYWxsYmFjayBhbmQgb3V0cHV0cyAiQiIKJG5leHRQcm9taXNlLT5yZXNvbHZlKCdCJyk7CmBgYAoKIyMjIFByb21pc2UgUmVqZWN0aW9uCgpXaGVuIGEgcHJvbWlzZSBpcyByZWplY3RlZCwgdGhlIGAkb25SZWplY3RlZGAgY2FsbGJhY2tzIGFyZSBpbnZva2VkIHdpdGggdGhlCnJlamVjdGlvbiByZWFzb24uCgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlOwoKJHByb21pc2UgPSBuZXcgUHJvbWlzZSgpOwokcHJvbWlzZS0+dGhlbihudWxsLCBmdW5jdGlvbiAoJHJlYXNvbikgewogICAgZWNobyAkcmVhc29uOwp9KTsKCiRwcm9taXNlLT5yZWplY3QoJ0Vycm9yIScpOwovLyBPdXRwdXRzICJFcnJvciEiCmBgYAoKIyMjIFJlamVjdGlvbiBGb3J3YXJkaW5nCgpJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGluIGFuIGAkb25SZWplY3RlZGAgY2FsbGJhY2ssIHN1YnNlcXVlbnQKYCRvblJlamVjdGVkYCBjYWxsYmFja3MgYXJlIGludm9rZWQgd2l0aCB0aGUgdGhyb3duIGV4Y2VwdGlvbiBhcyB0aGUgcmVhc29uLgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUHJvbWlzZTsKCiRwcm9taXNlID0gbmV3IFByb21pc2UoKTsKJHByb21pc2UtPnRoZW4obnVsbCwgZnVuY3Rpb24gKCRyZWFzb24pIHsKICAgIHRocm93IG5ldyBFeGNlcHRpb24oJHJlYXNvbik7Cn0pLT50aGVuKG51bGwsIGZ1bmN0aW9uICgkcmVhc29uKSB7CiAgICBhc3NlcnQoJHJlYXNvbi0+Z2V0TWVzc2FnZSgpID09PSAnRXJyb3IhJyk7Cn0pOwoKJHByb21pc2UtPnJlamVjdCgnRXJyb3IhJyk7CmBgYAoKWW91IGNhbiBhbHNvIGZvcndhcmQgYSByZWplY3Rpb24gZG93biB0aGUgcHJvbWlzZSBjaGFpbiBieSByZXR1cm5pbmcgYQpgR3V6emxlSHR0cFxQcm9taXNlXFJlamVjdGVkUHJvbWlzZWAgaW4gZWl0aGVyIGFuIGAkb25GdWxmaWxsZWRgIG9yCmAkb25SZWplY3RlZGAgY2FsbGJhY2suCgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlOwp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFJlamVjdGVkUHJvbWlzZTsKCiRwcm9taXNlID0gbmV3IFByb21pc2UoKTsKJHByb21pc2UtPnRoZW4obnVsbCwgZnVuY3Rpb24gKCRyZWFzb24pIHsKICAgIHJldHVybiBuZXcgUmVqZWN0ZWRQcm9taXNlKCRyZWFzb24pOwp9KS0+dGhlbihudWxsLCBmdW5jdGlvbiAoJHJlYXNvbikgewogICAgYXNzZXJ0KCRyZWFzb24gPT09ICdFcnJvciEnKTsKfSk7CgokcHJvbWlzZS0+cmVqZWN0KCdFcnJvciEnKTsKYGBgCgpJZiBhbiBleGNlcHRpb24gaXMgbm90IHRocm93biBpbiBhIGAkb25SZWplY3RlZGAgY2FsbGJhY2sgYW5kIHRoZSBjYWxsYmFjawpkb2VzIG5vdCByZXR1cm4gYSByZWplY3RlZCBwcm9taXNlLCBkb3duc3RyZWFtIGAkb25GdWxmaWxsZWRgIGNhbGxiYWNrcyBhcmUKaW52b2tlZCB1c2luZyB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSB0aGUgYCRvblJlamVjdGVkYCBjYWxsYmFjay4KCmBgYHBocAp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2U7CgokcHJvbWlzZSA9IG5ldyBQcm9taXNlKCk7CiRwcm9taXNlCiAgICAtPnRoZW4obnVsbCwgZnVuY3Rpb24gKCRyZWFzb24pIHsKICAgICAgICByZXR1cm4gIkl0J3Mgb2siOwogICAgfSkKICAgIC0+dGhlbihmdW5jdGlvbiAoJHZhbHVlKSB7CiAgICAgICAgYXNzZXJ0KCR2YWx1ZSA9PT0gIkl0J3Mgb2siKTsKICAgIH0pOwoKJHByb21pc2UtPnJlamVjdCgnRXJyb3IhJyk7CmBgYAoKCiMjIFN5bmNocm9ub3VzIFdhaXQKCllvdSBjYW4gc3luY2hyb25vdXNseSBmb3JjZSBwcm9taXNlcyB0byBjb21wbGV0ZSB1c2luZyBhIHByb21pc2UncyBgd2FpdGAKbWV0aG9kLiBXaGVuIGNyZWF0aW5nIGEgcHJvbWlzZSwgeW91IGNhbiBwcm92aWRlIGEgd2FpdCBmdW5jdGlvbiB0aGF0IGlzIHVzZWQKdG8gc3luY2hyb25vdXNseSBmb3JjZSBhIHByb21pc2UgdG8gY29tcGxldGUuIFdoZW4gYSB3YWl0IGZ1bmN0aW9uIGlzIGludm9rZWQKaXQgaXMgZXhwZWN0ZWQgdG8gZGVsaXZlciBhIHZhbHVlIHRvIHRoZSBwcm9taXNlIG9yIHJlamVjdCB0aGUgcHJvbWlzZS4gSWYgdGhlCndhaXQgZnVuY3Rpb24gZG9lcyBub3QgZGVsaXZlciBhIHZhbHVlLCB0aGVuIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uIFRoZSB3YWl0CmZ1bmN0aW9uIHByb3ZpZGVkIHRvIGEgcHJvbWlzZSBjb25zdHJ1Y3RvciBpcyBpbnZva2VkIHdoZW4gdGhlIGB3YWl0YCBmdW5jdGlvbgpvZiB0aGUgcHJvbWlzZSBpcyBjYWxsZWQuCgpgYGBwaHAKJHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAoKSB1c2UgKCYkcHJvbWlzZSkgewogICAgJHByb21pc2UtPnJlc29sdmUoJ2ZvbycpOwp9KTsKCi8vIENhbGxpbmcgd2FpdCB3aWxsIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIHByb21pc2UuCmVjaG8gJHByb21pc2UtPndhaXQoKTsgLy8gb3V0cHV0cyAiZm9vIgpgYGAKCklmIGFuIGV4Y2VwdGlvbiBpcyBlbmNvdW50ZXJlZCB3aGlsZSBpbnZva2luZyB0aGUgd2FpdCBmdW5jdGlvbiBvZiBhIHByb21pc2UsCnRoZSBwcm9taXNlIGlzIHJlamVjdGVkIHdpdGggdGhlIGV4Y2VwdGlvbiBhbmQgdGhlIGV4Y2VwdGlvbiBpcyB0aHJvd24uCgpgYGBwaHAKJHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAoKSB1c2UgKCYkcHJvbWlzZSkgewogICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignZm9vJyk7Cn0pOwoKJHByb21pc2UtPndhaXQoKTsgLy8gdGhyb3dzIHRoZSBleGNlcHRpb24uCmBgYAoKQ2FsbGluZyBgd2FpdGAgb24gYSBwcm9taXNlIHRoYXQgaGFzIGJlZW4gZnVsZmlsbGVkIHdpbGwgbm90IHRyaWdnZXIgdGhlIHdhaXQKZnVuY3Rpb24uIEl0IHdpbGwgc2ltcGx5IHJldHVybiB0aGUgcHJldmlvdXNseSByZXNvbHZlZCB2YWx1ZS4KCmBgYHBocAokcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uICgpIHsgZGllKCd0aGlzIGlzIG5vdCBjYWxsZWQhJyk7IH0pOwokcHJvbWlzZS0+cmVzb2x2ZSgnZm9vJyk7CmVjaG8gJHByb21pc2UtPndhaXQoKTsgLy8gb3V0cHV0cyAiZm9vIgpgYGAKCkNhbGxpbmcgYHdhaXRgIG9uIGEgcHJvbWlzZSB0aGF0IGhhcyBiZWVuIHJlamVjdGVkIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uLiBJZgp0aGUgcmVqZWN0aW9uIHJlYXNvbiBpcyBhbiBpbnN0YW5jZSBvZiBgXEV4Y2VwdGlvbmAgdGhlIHJlYXNvbiBpcyB0aHJvd24uCk90aGVyd2lzZSwgYSBgR3V6emxlSHR0cFxQcm9taXNlXFJlamVjdGlvbkV4Y2VwdGlvbmAgaXMgdGhyb3duIGFuZCB0aGUgcmVhc29uCmNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5nIHRoZSBgZ2V0UmVhc29uYCBtZXRob2Qgb2YgdGhlIGV4Y2VwdGlvbi4KCmBgYHBocAokcHJvbWlzZSA9IG5ldyBQcm9taXNlKCk7CiRwcm9taXNlLT5yZWplY3QoJ2ZvbycpOwokcHJvbWlzZS0+d2FpdCgpOwpgYGAKCj4gUEhQIEZhdGFsIGVycm9yOiAgVW5jYXVnaHQgZXhjZXB0aW9uICdHdXp6bGVIdHRwXFByb21pc2VcUmVqZWN0aW9uRXhjZXB0aW9uJyB3aXRoIG1lc3NhZ2UgJ1RoZSBwcm9taXNlIHdhcyByZWplY3RlZCB3aXRoIHZhbHVlOiBmb28nCgojIyMgVW53cmFwcGluZyBhIFByb21pc2UKCldoZW4gc3luY2hyb25vdXNseSB3YWl0aW5nIG9uIGEgcHJvbWlzZSwgeW91IGFyZSBqb2luaW5nIHRoZSBzdGF0ZSBvZiB0aGUKcHJvbWlzZSBpbnRvIHRoZSBjdXJyZW50IHN0YXRlIG9mIGV4ZWN1dGlvbiAoaS5lLiwgcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUKcHJvbWlzZSBpZiBpdCB3YXMgZnVsZmlsbGVkIG9yIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBpdCB3YXMgcmVqZWN0ZWQpLiBUaGlzIGlzCmNhbGxlZCAidW53cmFwcGluZyIgdGhlIHByb21pc2UuIFdhaXRpbmcgb24gYSBwcm9taXNlIHdpbGwgYnkgZGVmYXVsdCB1bndyYXAKdGhlIHByb21pc2Ugc3RhdGUuCgpZb3UgY2FuIGZvcmNlIGEgcHJvbWlzZSB0byByZXNvbHZlIGFuZCAqbm90KiB1bndyYXAgdGhlIHN0YXRlIG9mIHRoZSBwcm9taXNlCmJ5IHBhc3NpbmcgYGZhbHNlYCB0byB0aGUgZmlyc3QgYXJndW1lbnQgb2YgdGhlIGB3YWl0YCBmdW5jdGlvbjoKCmBgYHBocAokcHJvbWlzZSA9IG5ldyBQcm9taXNlKCk7CiRwcm9taXNlLT5yZWplY3QoJ2ZvbycpOwovLyBUaGlzIHdpbGwgbm90IHRocm93IGFuIGV4Y2VwdGlvbi4gSXQgc2ltcGx5IGVuc3VyZXMgdGhlIHByb21pc2UgaGFzCi8vIGJlZW4gcmVzb2x2ZWQuCiRwcm9taXNlLT53YWl0KGZhbHNlKTsKYGBgCgpXaGVuIHVud3JhcHBpbmcgYSBwcm9taXNlLCB0aGUgcmVzb2x2ZWQgdmFsdWUgb2YgdGhlIHByb21pc2Ugd2lsbCBiZSB3YWl0ZWQKdXBvbiB1bnRpbCB0aGUgdW53cmFwcGVkIHZhbHVlIGlzIG5vdCBhIHByb21pc2UuIFRoaXMgbWVhbnMgdGhhdCBpZiB5b3UgcmVzb2x2ZQpwcm9taXNlIEEgd2l0aCBhIHByb21pc2UgQiBhbmQgdW53cmFwIHByb21pc2UgQSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZQp3YWl0IGZ1bmN0aW9uIHdpbGwgYmUgdGhlIHZhbHVlIGRlbGl2ZXJlZCB0byBwcm9taXNlIEIuCgoqKk5vdGUqKjogd2hlbiB5b3UgZG8gbm90IHVud3JhcCB0aGUgcHJvbWlzZSwgbm8gdmFsdWUgaXMgcmV0dXJuZWQuCgoKIyMgQ2FuY2VsbGF0aW9uCgpZb3UgY2FuIGNhbmNlbCBhIHByb21pc2UgdGhhdCBoYXMgbm90IHlldCBiZWVuIGZ1bGZpbGxlZCB1c2luZyB0aGUgYGNhbmNlbCgpYAptZXRob2Qgb2YgYSBwcm9taXNlLiBXaGVuIGNyZWF0aW5nIGEgcHJvbWlzZSB5b3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWwKY2FuY2VsIGZ1bmN0aW9uIHRoYXQgd2hlbiBpbnZva2VkIGNhbmNlbHMgdGhlIGFjdGlvbiBvZiBjb21wdXRpbmcgYSByZXNvbHV0aW9uCm9mIHRoZSBwcm9taXNlLgoKCiMjIEFQSQoKIyMjIFByb21pc2UKCldoZW4gY3JlYXRpbmcgYSBwcm9taXNlIG9iamVjdCwgeW91IGNhbiBwcm92aWRlIGFuIG9wdGlvbmFsIGAkd2FpdEZuYCBhbmQKYCRjYW5jZWxGbmAuIGAkd2FpdEZuYCBpcyBhIGZ1bmN0aW9uIHRoYXQgaXMgaW52b2tlZCB3aXRoIG5vIGFyZ3VtZW50cyBhbmQgaXMKZXhwZWN0ZWQgdG8gcmVzb2x2ZSB0aGUgcHJvbWlzZS4gYCRjYW5jZWxGbmAgaXMgYSBmdW5jdGlvbiB3aXRoIG5vIGFyZ3VtZW50cwp0aGF0IGlzIGV4cGVjdGVkIHRvIGNhbmNlbCB0aGUgY29tcHV0YXRpb24gb2YgYSBwcm9taXNlLiBJdCBpcyBpbnZva2VkIHdoZW4gdGhlCmBjYW5jZWwoKWAgbWV0aG9kIG9mIGEgcHJvbWlzZSBpcyBjYWxsZWQuCgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlOwoKJHByb21pc2UgPSBuZXcgUHJvbWlzZSgKICAgIGZ1bmN0aW9uICgpIHVzZSAoJiRwcm9taXNlKSB7CiAgICAgICAgJHByb21pc2UtPnJlc29sdmUoJ3dhaXRlZCcpOwogICAgfSwKICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAvLyBkbyBzb21ldGhpbmcgdGhhdCB3aWxsIGNhbmNlbCB0aGUgcHJvbWlzZSBjb21wdXRhdGlvbiAoZS5nLiwgY2xvc2UKICAgICAgICAvLyBhIHNvY2tldCwgY2FuY2VsIGEgZGF0YWJhc2UgcXVlcnksIGV0Yy4uLikKICAgIH0KKTsKCmFzc2VydCgnd2FpdGVkJyA9PT0gJHByb21pc2UtPndhaXQoKSk7CmBgYAoKQSBwcm9taXNlIGhhcyB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CgotIGB0aGVuKGNhbGxhYmxlICRvbkZ1bGZpbGxlZCwgY2FsbGFibGUgJG9uUmVqZWN0ZWQpIDogUHJvbWlzZUludGVyZmFjZWAKICAKICBBcHBlbmRzIGZ1bGZpbGxtZW50IGFuZCByZWplY3Rpb24gaGFuZGxlcnMgdG8gdGhlIHByb21pc2UsIGFuZCByZXR1cm5zIGEgbmV3IHByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGNhbGxlZCBoYW5kbGVyLgoKLSBgb3RoZXJ3aXNlKGNhbGxhYmxlICRvblJlamVjdGVkKSA6IFByb21pc2VJbnRlcmZhY2VgCiAgCiAgQXBwZW5kcyBhIHJlamVjdGlvbiBoYW5kbGVyIGNhbGxiYWNrIHRvIHRoZSBwcm9taXNlLCBhbmQgcmV0dXJucyBhIG5ldyBwcm9taXNlIHJlc29sdmluZyB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBjYWxsYmFjayBpZiBpdCBpcyBjYWxsZWQsIG9yIHRvIGl0cyBvcmlnaW5hbCBmdWxmaWxsbWVudCB2YWx1ZSBpZiB0aGUgcHJvbWlzZSBpcyBpbnN0ZWFkIGZ1bGZpbGxlZC4KCi0gYHdhaXQoJHVud3JhcCA9IHRydWUpIDogbWl4ZWRgCgogIFN5bmNocm9ub3VzbHkgd2FpdHMgb24gdGhlIHByb21pc2UgdG8gY29tcGxldGUuCiAgCiAgYCR1bndyYXBgIGNvbnRyb2xzIHdoZXRoZXIgb3Igbm90IHRoZSB2YWx1ZSBvZiB0aGUgcHJvbWlzZSBpcyByZXR1cm5lZCBmb3IgYQogIGZ1bGZpbGxlZCBwcm9taXNlIG9yIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gaWYgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQuCiAgVGhpcyBpcyBzZXQgdG8gYHRydWVgIGJ5IGRlZmF1bHQuCgotIGBjYW5jZWwoKWAKCiAgQXR0ZW1wdHMgdG8gY2FuY2VsIHRoZSBwcm9taXNlIGlmIHBvc3NpYmxlLiBUaGUgcHJvbWlzZSBiZWluZyBjYW5jZWxsZWQgYW5kCiAgdGhlIHBhcmVudCBtb3N0IGFuY2VzdG9yIHRoYXQgaGFzIG5vdCB5ZXQgYmVlbiByZXNvbHZlZCB3aWxsIGFsc28gYmUKICBjYW5jZWxsZWQuIEFueSBwcm9taXNlcyB3YWl0aW5nIG9uIHRoZSBjYW5jZWxsZWQgcHJvbWlzZSB0byByZXNvbHZlIHdpbGwgYWxzbwogIGJlIGNhbmNlbGxlZC4KCi0gYGdldFN0YXRlKCkgOiBzdHJpbmdgCgogIFJldHVybnMgdGhlIHN0YXRlIG9mIHRoZSBwcm9taXNlLiBPbmUgb2YgYHBlbmRpbmdgLCBgZnVsZmlsbGVkYCwgb3IKICBgcmVqZWN0ZWRgLgoKLSBgcmVzb2x2ZSgkdmFsdWUpYAoKICBGdWxmaWxscyB0aGUgcHJvbWlzZSB3aXRoIHRoZSBnaXZlbiBgJHZhbHVlYC4KCi0gYHJlamVjdCgkcmVhc29uKWAKCiAgUmVqZWN0cyB0aGUgcHJvbWlzZSB3aXRoIHRoZSBnaXZlbiBgJHJlYXNvbmAuCgoKIyMjIEZ1bGZpbGxlZFByb21pc2UKCkEgZnVsZmlsbGVkIHByb21pc2UgY2FuIGJlIGNyZWF0ZWQgdG8gcmVwcmVzZW50IGEgcHJvbWlzZSB0aGF0IGhhcyBiZWVuCmZ1bGZpbGxlZC4KCmBgYHBocAp1c2UgR3V6emxlSHR0cFxQcm9taXNlXEZ1bGZpbGxlZFByb21pc2U7CgokcHJvbWlzZSA9IG5ldyBGdWxmaWxsZWRQcm9taXNlKCd2YWx1ZScpOwoKLy8gRnVsZmlsbGVkIGNhbGxiYWNrcyBhcmUgaW1tZWRpYXRlbHkgaW52b2tlZC4KJHByb21pc2UtPnRoZW4oZnVuY3Rpb24gKCR2YWx1ZSkgewogICAgZWNobyAkdmFsdWU7Cn0pOwpgYGAKCgojIyMgUmVqZWN0ZWRQcm9taXNlCgpBIHJlamVjdGVkIHByb21pc2UgY2FuIGJlIGNyZWF0ZWQgdG8gcmVwcmVzZW50IGEgcHJvbWlzZSB0aGF0IGhhcyBiZWVuCnJlamVjdGVkLgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUmVqZWN0ZWRQcm9taXNlOwoKJHByb21pc2UgPSBuZXcgUmVqZWN0ZWRQcm9taXNlKCdFcnJvcicpOwoKLy8gUmVqZWN0ZWQgY2FsbGJhY2tzIGFyZSBpbW1lZGlhdGVseSBpbnZva2VkLgokcHJvbWlzZS0+dGhlbihudWxsLCBmdW5jdGlvbiAoJHJlYXNvbikgewogICAgZWNobyAkcmVhc29uOwp9KTsKYGBgCgoKIyMgUHJvbWlzZSBJbnRlcm9wZXJhYmlsaXR5CgpUaGlzIGxpYnJhcnkgd29ya3Mgd2l0aCBmb3JlaWduIHByb21pc2VzIHRoYXQgaGF2ZSBhIGB0aGVuYCBtZXRob2QuIFRoaXMgbWVhbnMKeW91IGNhbiB1c2UgR3V6emxlIHByb21pc2VzIHdpdGggW1JlYWN0IHByb21pc2VzXShodHRwczovL2dpdGh1Yi5jb20vcmVhY3RwaHAvcHJvbWlzZSkKZm9yIGV4YW1wbGUuIFdoZW4gYSBmb3JlaWduIHByb21pc2UgaXMgcmV0dXJuZWQgaW5zaWRlIG9mIGEgdGhlbiBtZXRob2QKY2FsbGJhY2ssIHByb21pc2UgcmVzb2x1dGlvbiB3aWxsIG9jY3VyIHJlY3Vyc2l2ZWx5LgoKYGBgcGhwCi8vIENyZWF0ZSBhIFJlYWN0IHByb21pc2UKJGRlZmVycmVkID0gbmV3IFJlYWN0XFByb21pc2VcRGVmZXJyZWQoKTsKJHJlYWN0UHJvbWlzZSA9ICRkZWZlcnJlZC0+cHJvbWlzZSgpOwoKLy8gQ3JlYXRlIGEgR3V6emxlIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2l0aCBhIFJlYWN0IHByb21pc2UuCiRndXp6bGVQcm9taXNlID0gbmV3IEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlKCk7CiRndXp6bGVQcm9taXNlLT50aGVuKGZ1bmN0aW9uICgkdmFsdWUpIHVzZSAoJHJlYWN0UHJvbWlzZSkgewogICAgLy8gRG8gc29tZXRoaW5nIHNvbWV0aGluZyB3aXRoIHRoZSB2YWx1ZS4uLgogICAgLy8gUmV0dXJuIHRoZSBSZWFjdCBwcm9taXNlCiAgICByZXR1cm4gJHJlYWN0UHJvbWlzZTsKfSk7CmBgYAoKUGxlYXNlIG5vdGUgdGhhdCB3YWl0IGFuZCBjYW5jZWwgY2hhaW5pbmcgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlIHdoZW4gZm9yd2FyZGluZwphIGZvcmVpZ24gcHJvbWlzZS4gWW91IHdpbGwgbmVlZCB0byB3cmFwIGEgdGhpcmQtcGFydHkgcHJvbWlzZSB3aXRoIGEgR3V6emxlCnByb21pc2UgaW4gb3JkZXIgdG8gdXRpbGl6ZSB3YWl0IGFuZCBjYW5jZWwgZnVuY3Rpb25zIHdpdGggZm9yZWlnbiBwcm9taXNlcy4KCgojIyMgRXZlbnQgTG9vcCBJbnRlZ3JhdGlvbgoKSW4gb3JkZXIgdG8ga2VlcCB0aGUgc3RhY2sgc2l6ZSBjb25zdGFudCwgR3V6emxlIHByb21pc2VzIGFyZSByZXNvbHZlZAphc3luY2hyb25vdXNseSB1c2luZyBhIHRhc2sgcXVldWUuIFdoZW4gd2FpdGluZyBvbiBwcm9taXNlcyBzeW5jaHJvbm91c2x5LCB0aGUKdGFzayBxdWV1ZSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcnVuIHRvIGVuc3VyZSB0aGF0IHRoZSBibG9ja2luZyBwcm9taXNlIGFuZAphbnkgZm9yd2FyZGVkIHByb21pc2VzIGFyZSByZXNvbHZlZC4gV2hlbiB1c2luZyBwcm9taXNlcyBhc3luY2hyb25vdXNseSBpbiBhbgpldmVudCBsb29wLCB5b3Ugd2lsbCBuZWVkIHRvIHJ1biB0aGUgdGFzayBxdWV1ZSBvbiBlYWNoIHRpY2sgb2YgdGhlIGxvb3AuIElmCnlvdSBkbyBub3QgcnVuIHRoZSB0YXNrIHF1ZXVlLCB0aGVuIHByb21pc2VzIHdpbGwgbm90IGJlIHJlc29sdmVkLgoKWW91IGNhbiBydW4gdGhlIHRhc2sgcXVldWUgdXNpbmcgdGhlIGBydW4oKWAgbWV0aG9kIG9mIHRoZSBnbG9iYWwgdGFzayBxdWV1ZQppbnN0YW5jZS4KCmBgYHBocAovLyBHZXQgdGhlIGdsb2JhbCB0YXNrIHF1ZXVlCiRxdWV1ZSA9IEd1enpsZUh0dHBcUHJvbWlzZVxVdGlsczo6cXVldWUoKTsKJHF1ZXVlLT5ydW4oKTsKYGBgCgpGb3IgZXhhbXBsZSwgeW91IGNvdWxkIHVzZSBHdXp6bGUgcHJvbWlzZXMgd2l0aCBSZWFjdCB1c2luZyBhIHBlcmlvZGljIHRpbWVyOgoKYGBgcGhwCiRsb29wID0gUmVhY3RcRXZlbnRMb29wXEZhY3Rvcnk6OmNyZWF0ZSgpOwokbG9vcC0+YWRkUGVyaW9kaWNUaW1lcigwLCBbJHF1ZXVlLCAncnVuJ10pOwpgYGAKCgojIyBJbXBsZW1lbnRhdGlvbiBOb3RlcwoKIyMjIFByb21pc2UgUmVzb2x1dGlvbiBhbmQgQ2hhaW5pbmcgaXMgSGFuZGxlZCBJdGVyYXRpdmVseQoKQnkgc2h1ZmZsaW5nIHBlbmRpbmcgaGFuZGxlcnMgZnJvbSBvbmUgb3duZXIgdG8gYW5vdGhlciwgcHJvbWlzZXMgYXJlCnJlc29sdmVkIGl0ZXJhdGl2ZWx5LCBhbGxvd2luZyBmb3IgImluZmluaXRlIiB0aGVuIGNoYWluaW5nLgoKYGBgcGhwCjw/cGhwCnJlcXVpcmUgJ3ZlbmRvci9hdXRvbG9hZC5waHAnOwoKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlOwoKJHBhcmVudCA9IG5ldyBQcm9taXNlKCk7CiRwID0gJHBhcmVudDsKCmZvciAoJGkgPSAwOyAkaSA8IDEwMDA7ICRpKyspIHsKICAgICRwID0gJHAtPnRoZW4oZnVuY3Rpb24gKCR2KSB7CiAgICAgICAgLy8gVGhlIHN0YWNrIHNpemUgcmVtYWlucyBjb25zdGFudCAoYSBnb29kIHRoaW5nKQogICAgICAgIGVjaG8geGRlYnVnX2dldF9zdGFja19kZXB0aCgpIC4gJywgJzsKICAgICAgICByZXR1cm4gJHYgKyAxOwogICAgfSk7Cn0KCiRwYXJlbnQtPnJlc29sdmUoMCk7CnZhcl9kdW1wKCRwLT53YWl0KCkpOyAvLyBpbnQoMTAwMCkKCmBgYAoKV2hlbiBhIHByb21pc2UgaXMgZnVsZmlsbGVkIG9yIHJlamVjdGVkIHdpdGggYSBub24tcHJvbWlzZSB2YWx1ZSwgdGhlIHByb21pc2UKdGhlbiB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIGhhbmRsZXJzIG9mIGVhY2ggY2hpbGQgcHJvbWlzZSBhbmQgZGVsaXZlcnMgdmFsdWVzCmRvd24gdGhlIGNoYWluIHdpdGhvdXQgdXNpbmcgcmVjdXJzaW9uLgoKV2hlbiBhIHByb21pc2UgaXMgcmVzb2x2ZWQgd2l0aCBhbm90aGVyIHByb21pc2UsIHRoZSBvcmlnaW5hbCBwcm9taXNlIHRyYW5zZmVycwphbGwgb2YgaXRzIHBlbmRpbmcgaGFuZGxlcnMgdG8gdGhlIG5ldyBwcm9taXNlLiBXaGVuIHRoZSBuZXcgcHJvbWlzZSBpcwpldmVudHVhbGx5IHJlc29sdmVkLCBhbGwgb2YgdGhlIHBlbmRpbmcgaGFuZGxlcnMgYXJlIGRlbGl2ZXJlZCB0aGUgZm9yd2FyZGVkCnZhbHVlLgoKIyMjIEEgUHJvbWlzZSBpcyB0aGUgRGVmZXJyZWQKClNvbWUgcHJvbWlzZSBsaWJyYXJpZXMgaW1wbGVtZW50IHByb21pc2VzIHVzaW5nIGEgZGVmZXJyZWQgb2JqZWN0IHRvIHJlcHJlc2VudAphIGNvbXB1dGF0aW9uIGFuZCBhIHByb21pc2Ugb2JqZWN0IHRvIHJlcHJlc2VudCB0aGUgZGVsaXZlcnkgb2YgdGhlIHJlc3VsdCBvZgp0aGUgY29tcHV0YXRpb24uIFRoaXMgaXMgYSBuaWNlIHNlcGFyYXRpb24gb2YgY29tcHV0YXRpb24gYW5kIGRlbGl2ZXJ5IGJlY2F1c2UKY29uc3VtZXJzIG9mIHRoZSBwcm9taXNlIGNhbm5vdCBtb2RpZnkgdGhlIHZhbHVlIHRoYXQgd2lsbCBiZSBldmVudHVhbGx5CmRlbGl2ZXJlZC4KCk9uZSBzaWRlIGVmZmVjdCBvZiBiZWluZyBhYmxlIHRvIGltcGxlbWVudCBwcm9taXNlIHJlc29sdXRpb24gYW5kIGNoYWluaW5nCml0ZXJhdGl2ZWx5IGlzIHRoYXQgeW91IG5lZWQgdG8gYmUgYWJsZSBmb3Igb25lIHByb21pc2UgdG8gcmVhY2ggaW50byB0aGUgc3RhdGUKb2YgYW5vdGhlciBwcm9taXNlIHRvIHNodWZmbGUgYXJvdW5kIG93bmVyc2hpcCBvZiBoYW5kbGVycy4gSW4gb3JkZXIgdG8gYWNoaWV2ZQp0aGlzIHdpdGhvdXQgbWFraW5nIHRoZSBoYW5kbGVycyBvZiBhIHByb21pc2UgcHVibGljbHkgbXV0YWJsZSwgYSBwcm9taXNlIGlzCmFsc28gdGhlIGRlZmVycmVkIHZhbHVlLCBhbGxvd2luZyBwcm9taXNlcyBvZiB0aGUgc2FtZSBwYXJlbnQgY2xhc3MgdG8gcmVhY2gKaW50byBhbmQgbW9kaWZ5IHRoZSBwcml2YXRlIHByb3BlcnRpZXMgb2YgcHJvbWlzZXMgb2YgdGhlIHNhbWUgdHlwZS4gV2hpbGUgdGhpcwpkb2VzIGFsbG93IGNvbnN1bWVycyBvZiB0aGUgdmFsdWUgdG8gbW9kaWZ5IHRoZSByZXNvbHV0aW9uIG9yIHJlamVjdGlvbiBvZiB0aGUKZGVmZXJyZWQsIGl0IGlzIGEgc21hbGwgcHJpY2UgdG8gcGF5IGZvciBrZWVwaW5nIHRoZSBzdGFjayBzaXplIGNvbnN0YW50LgoKYGBgcGhwCiRwcm9taXNlID0gbmV3IFByb21pc2UoKTsKJHByb21pc2UtPnRoZW4oZnVuY3Rpb24gKCR2YWx1ZSkgeyBlY2hvICR2YWx1ZTsgfSk7Ci8vIFRoZSBwcm9taXNlIGlzIHRoZSBkZWZlcnJlZCB2YWx1ZSwgc28geW91IGNhbiBkZWxpdmVyIGEgdmFsdWUgdG8gaXQuCiRwcm9taXNlLT5yZXNvbHZlKCdmb28nKTsKLy8gcHJpbnRzICJmb28iCmBgYAoKCiMjIFVwZ3JhZGluZyBmcm9tIEZ1bmN0aW9uIEFQSQoKQSBzdGF0aWMgQVBJIHdhcyBmaXJzdCBpbnRyb2R1Y2VkIGluIDEuNC4wLCBpbiBvcmRlciB0byBtaXRpZ2F0ZSBwcm9ibGVtcyB3aXRoCmZ1bmN0aW9ucyBjb25mbGljdGluZyBiZXR3ZWVuIGdsb2JhbCBhbmQgbG9jYWwgY29waWVzIG9mIHRoZSBwYWNrYWdlLiBUaGUKZnVuY3Rpb24gQVBJIHdhcyByZW1vdmVkIGluIDIuMC4wLiBBIG1pZ3JhdGlvbiB0YWJsZSBoYXMgYmVlbiBwcm92aWRlZCBoZXJlIGZvcgp5b3VyIGNvbnZlbmllbmNlOgoKfCBPcmlnaW5hbCBGdW5jdGlvbiB8IFJlcGxhY2VtZW50IE1ldGhvZCB8CnwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18CnwgYHF1ZXVlYCB8IGBVdGlsczo6cXVldWVgIHwKfCBgdGFza2AgfCBgVXRpbHM6OnRhc2tgIHwKfCBgcHJvbWlzZV9mb3JgIHwgYENyZWF0ZTo6cHJvbWlzZUZvcmAgfAp8IGByZWplY3Rpb25fZm9yYCB8IGBDcmVhdGU6OnJlamVjdGlvbkZvcmAgfAp8IGBleGNlcHRpb25fZm9yYCB8IGBDcmVhdGU6OmV4Y2VwdGlvbkZvcmAgfAp8IGBpdGVyX2ZvcmAgfCBgQ3JlYXRlOjppdGVyRm9yYCB8CnwgYGluc3BlY3RgIHwgYFV0aWxzOjppbnNwZWN0YCB8CnwgYGluc3BlY3RfYWxsYCB8IGBVdGlsczo6aW5zcGVjdEFsbGAgfAp8IGB1bndyYXBgIHwgYFV0aWxzOjp1bndyYXBgIHwKfCBgYWxsYCB8IGBVdGlsczo6YWxsYCB8CnwgYHNvbWVgIHwgYFV0aWxzOjpzb21lYCB8CnwgYGFueWAgfCBgVXRpbHM6OmFueWAgfAp8IGBzZXR0bGVgIHwgYFV0aWxzOjpzZXR0bGVgIHwKfCBgZWFjaGAgfCBgRWFjaDo6b2ZgIHwKfCBgZWFjaF9saW1pdGAgfCBgRWFjaDo6b2ZMaW1pdGAgfAp8IGBlYWNoX2xpbWl0X2FsbGAgfCBgRWFjaDo6b2ZMaW1pdEFsbGAgfAp8IGAhaXNfZnVsZmlsbGVkYCB8IGBJczo6cGVuZGluZ2AgfAp8IGBpc19mdWxmaWxsZWRgIHwgYElzOjpmdWxmaWxsZWRgIHwKfCBgaXNfcmVqZWN0ZWRgIHwgYElzOjpyZWplY3RlZGAgfAp8IGBpc19zZXR0bGVkYCB8IGBJczo6c2V0dGxlZGAgfAp8IGBjb3JvdXRpbmVgIHwgYENvcm91dGluZTo6b2ZgIHwKCgojIyBTZWN1cml0eQoKSWYgeW91IGRpc2NvdmVyIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSB3aXRoaW4gdGhpcyBwYWNrYWdlLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbCB0byBzZWN1cml0eUB0aWRlbGlmdC5jb20uIEFsbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgd2lsbCBiZSBwcm9tcHRseSBhZGRyZXNzZWQuIFBsZWFzZSBkbyBub3QgZGlzY2xvc2Ugc2VjdXJpdHktcmVsYXRlZCBpc3N1ZXMgcHVibGljbHkgdW50aWwgYSBmaXggaGFzIGJlZW4gYW5ub3VuY2VkLiBQbGVhc2Ugc2VlIFtTZWN1cml0eSBQb2xpY3ldKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHJvbWlzZXMvc2VjdXJpdHkvcG9saWN5KSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCgojIyBMaWNlbnNlCgpHdXp6bGUgaXMgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLiBQbGVhc2Ugc2VlIFtMaWNlbnNlIEZpbGVdKExJQ0VOU0UpIGZvciBtb3JlIGluZm9ybWF0aW9uLgoKCiMjIEZvciBFbnRlcnByaXNlCgpBdmFpbGFibGUgYXMgcGFydCBvZiB0aGUgVGlkZWxpZnQgU3Vic2NyaXB0aW9uCgpUaGUgbWFpbnRhaW5lcnMgb2YgR3V6emxlIGFuZCB0aG91c2FuZHMgb2Ygb3RoZXIgcGFja2FnZXMgYXJlIHdvcmtpbmcgd2l0aCBUaWRlbGlmdCB0byBkZWxpdmVyIGNvbW1lcmNpYWwgc3VwcG9ydCBhbmQgbWFpbnRlbmFuY2UgZm9yIHRoZSBvcGVuIHNvdXJjZSBkZXBlbmRlbmNpZXMgeW91IHVzZSB0byBidWlsZCB5b3VyIGFwcGxpY2F0aW9ucy4gU2F2ZSB0aW1lLCByZWR1Y2UgcmlzaywgYW5kIGltcHJvdmUgY29kZSBoZWFsdGgsIHdoaWxlIHBheWluZyB0aGUgbWFpbnRhaW5lcnMgb2YgdGhlIGV4YWN0IGRlcGVuZGVuY2llcyB5b3UgdXNlLiBbTGVhcm4gbW9yZS5dKGh0dHBzOi8vdGlkZWxpZnQuY29tL3N1YnNjcmlwdGlvbi9wa2cvcGFja2FnaXN0LWd1enpsZWh0dHAtcHJvbWlzZXM/dXRtX3NvdXJjZT1wYWNrYWdpc3QtZ3V6emxlaHR0cC1wcm9taXNlcyZ1dG1fbWVkaXVtPXJlZmVycmFsJnV0bV9jYW1wYWlnbj1lbnRlcnByaXNlJnV0bV90ZXJtPXJlcG8pCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/AggregateException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBFeGNlcHRpb24gdGhyb3duIHdoZW4gdG9vIG1hbnkgZXJyb3JzIG9jY3VyIGluIHRoZSBzb21lKCkgb3IgYW55KCkgbWV0aG9kcy4KICovCmNsYXNzIEFnZ3JlZ2F0ZUV4Y2VwdGlvbiBleHRlbmRzIFJlamVjdGlvbkV4Y2VwdGlvbgp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRtc2csIGFycmF5ICRyZWFzb25zKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoCiAgICAgICAgICAgICRyZWFzb25zLAogICAgICAgICAgICBzcHJpbnRmKCclczsgJWQgcmVqZWN0ZWQgcHJvbWlzZXMnLCAkbXNnLCBjb3VudCgkcmVhc29ucykpCiAgICAgICAgKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/CancellationException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBFeGNlcHRpb24gdGhhdCBpcyBzZXQgYXMgdGhlIHJlYXNvbiBmb3IgYSBwcm9taXNlIHRoYXQgaGFzIGJlZW4gY2FuY2VsbGVkLgogKi8KY2xhc3MgQ2FuY2VsbGF0aW9uRXhjZXB0aW9uIGV4dGVuZHMgUmVqZWN0aW9uRXhjZXB0aW9uCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/Coroutine.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCnVzZSBHZW5lcmF0b3I7CnVzZSBUaHJvd2FibGU7CgovKioKICogQ3JlYXRlcyBhIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB1c2luZyBhIGdlbmVyYXRvciB0aGF0IHlpZWxkcyB2YWx1ZXMgb3IKICogcHJvbWlzZXMgKHNvbWV3aGF0IHNpbWlsYXIgdG8gQyMncyBhc3luYyBrZXl3b3JkKS4KICoKICogV2hlbiBjYWxsZWQsIHRoZSBDb3JvdXRpbmU6Om9mIG1ldGhvZCB3aWxsIHN0YXJ0IGFuIGluc3RhbmNlIG9mIHRoZSBnZW5lcmF0b3IKICogYW5kIHJldHVybnMgYSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdpdGggaXRzIGZpbmFsIHlpZWxkZWQgdmFsdWUuCiAqCiAqIENvbnRyb2wgaXMgcmV0dXJuZWQgYmFjayB0byB0aGUgZ2VuZXJhdG9yIHdoZW4gdGhlIHlpZWxkZWQgcHJvbWlzZSBzZXR0bGVzLgogKiBUaGlzIGNhbiBsZWFkIHRvIGxlc3MgdmVyYm9zZSBjb2RlIHdoZW4gZG9pbmcgbG90cyBvZiBzZXF1ZW50aWFsIGFzeW5jIGNhbGxzCiAqIHdpdGggbWluaW1hbCBwcm9jZXNzaW5nIGluIGJldHdlZW4uCiAqCiAqICAgICB1c2UgR3V6emxlSHR0cFxQcm9taXNlOwogKgogKiAgICAgZnVuY3Rpb24gY3JlYXRlUHJvbWlzZSgkdmFsdWUpIHsKICogICAgICAgICByZXR1cm4gbmV3IFByb21pc2VcRnVsZmlsbGVkUHJvbWlzZSgkdmFsdWUpOwogKiAgICAgfQogKgogKiAgICAgJHByb21pc2UgPSBQcm9taXNlXENvcm91dGluZTo6b2YoZnVuY3Rpb24gKCkgewogKiAgICAgICAgICR2YWx1ZSA9ICh5aWVsZCBjcmVhdGVQcm9taXNlKCdhJykpOwogKiAgICAgICAgIHRyeSB7CiAqICAgICAgICAgICAgICR2YWx1ZSA9ICh5aWVsZCBjcmVhdGVQcm9taXNlKCR2YWx1ZSAuICdiJykpOwogKiAgICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICogICAgICAgICAgICAgLy8gVGhlIHByb21pc2Ugd2FzIHJlamVjdGVkLgogKiAgICAgICAgIH0KICogICAgICAgICB5aWVsZCAkdmFsdWUgLiAnYyc7CiAqICAgICB9KTsKICoKICogICAgIC8vIE91dHB1dHMgImFiYyIKICogICAgICRwcm9taXNlLT50aGVuKGZ1bmN0aW9uICgkdikgeyBlY2hvICR2OyB9KTsKICoKICogQHBhcmFtIGNhbGxhYmxlICRnZW5lcmF0b3JGbiBHZW5lcmF0b3IgZnVuY3Rpb24gdG8gd3JhcCBpbnRvIGEgcHJvbWlzZS4KICoKICogQHJldHVybiBQcm9taXNlCiAqCiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC9ibG9iL21hc3Rlci9BUEkubWQjZ2VuZXJhdG9ycyBpbnNwaXJhdGlvbgogKi8KZmluYWwgY2xhc3MgQ29yb3V0aW5lIGltcGxlbWVudHMgUHJvbWlzZUludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgUHJvbWlzZUludGVyZmFjZXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGN1cnJlbnRQcm9taXNlOwoKICAgIC8qKgogICAgICogQHZhciBHZW5lcmF0b3IKICAgICAqLwogICAgcHJpdmF0ZSAkZ2VuZXJhdG9yOwoKICAgIC8qKgogICAgICogQHZhciBQcm9taXNlCiAgICAgKi8KICAgIHByaXZhdGUgJHJlc3VsdDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoY2FsbGFibGUgJGdlbmVyYXRvckZuKQogICAgewogICAgICAgICR0aGlzLT5nZW5lcmF0b3IgPSAkZ2VuZXJhdG9yRm4oKTsKICAgICAgICAkdGhpcy0+cmVzdWx0ID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKCk6IHZvaWQgewogICAgICAgICAgICB3aGlsZSAoaXNzZXQoJHRoaXMtPmN1cnJlbnRQcm9taXNlKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPmN1cnJlbnRQcm9taXNlLT53YWl0KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICB0cnkgewogICAgICAgICAgICAkdGhpcy0+bmV4dENvcm91dGluZSgkdGhpcy0+Z2VuZXJhdG9yLT5jdXJyZW50KCkpOwogICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSAkdGhyb3dhYmxlKSB7CiAgICAgICAgICAgICR0aGlzLT5yZXN1bHQtPnJlamVjdCgkdGhyb3dhYmxlKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgY29yb3V0aW5lLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9mKGNhbGxhYmxlICRnZW5lcmF0b3JGbik6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGdlbmVyYXRvckZuKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGhlbigKICAgICAgICA/Y2FsbGFibGUgJG9uRnVsZmlsbGVkID0gbnVsbCwKICAgICAgICA/Y2FsbGFibGUgJG9uUmVqZWN0ZWQgPSBudWxsCiAgICApOiBQcm9taXNlSW50ZXJmYWNlIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlc3VsdC0+dGhlbigkb25GdWxmaWxsZWQsICRvblJlamVjdGVkKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gb3RoZXJ3aXNlKGNhbGxhYmxlICRvblJlamVjdGVkKTogUHJvbWlzZUludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVzdWx0LT5vdGhlcndpc2UoJG9uUmVqZWN0ZWQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3YWl0KGJvb2wgJHVud3JhcCA9IHRydWUpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXN1bHQtPndhaXQoJHVud3JhcCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0YXRlKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVzdWx0LT5nZXRTdGF0ZSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXNvbHZlKCR2YWx1ZSk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+cmVzdWx0LT5yZXNvbHZlKCR2YWx1ZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlamVjdCgkcmVhc29uKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5yZXN1bHQtPnJlamVjdCgkcmVhc29uKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY2FuY2VsKCk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+Y3VycmVudFByb21pc2UtPmNhbmNlbCgpOwogICAgICAgICR0aGlzLT5yZXN1bHQtPmNhbmNlbCgpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gbmV4dENvcm91dGluZSgkeWllbGRlZCk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+Y3VycmVudFByb21pc2UgPSBDcmVhdGU6OnByb21pc2VGb3IoJHlpZWxkZWQpCiAgICAgICAgICAgIC0+dGhlbihbJHRoaXMsICdfaGFuZGxlU3VjY2VzcyddLCBbJHRoaXMsICdfaGFuZGxlRmFpbHVyZSddKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX2hhbmRsZVN1Y2Nlc3MoJHZhbHVlKTogdm9pZAogICAgewogICAgICAgIHVuc2V0KCR0aGlzLT5jdXJyZW50UHJvbWlzZSk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJG5leHQgPSAkdGhpcy0+Z2VuZXJhdG9yLT5zZW5kKCR2YWx1ZSk7CiAgICAgICAgICAgIGlmICgkdGhpcy0+Z2VuZXJhdG9yLT52YWxpZCgpKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+bmV4dENvcm91dGluZSgkbmV4dCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+cmVzdWx0LT5yZXNvbHZlKCR2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgJHRocm93YWJsZSkgewogICAgICAgICAgICAkdGhpcy0+cmVzdWx0LT5yZWplY3QoJHRocm93YWJsZSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfaGFuZGxlRmFpbHVyZSgkcmVhc29uKTogdm9pZAogICAgewogICAgICAgIHVuc2V0KCR0aGlzLT5jdXJyZW50UHJvbWlzZSk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJG5leHRZaWVsZCA9ICR0aGlzLT5nZW5lcmF0b3ItPnRocm93KENyZWF0ZTo6ZXhjZXB0aW9uRm9yKCRyZWFzb24pKTsKICAgICAgICAgICAgLy8gVGhlIHRocm93IHdhcyBjYXVnaHQsIHNvIGtlZXAgaXRlcmF0aW5nIG9uIHRoZSBjb3JvdXRpbmUKICAgICAgICAgICAgJHRoaXMtPm5leHRDb3JvdXRpbmUoJG5leHRZaWVsZCk7CiAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlICR0aHJvd2FibGUpIHsKICAgICAgICAgICAgJHRoaXMtPnJlc3VsdC0+cmVqZWN0KCR0aHJvd2FibGUpOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/Create.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCmZpbmFsIGNsYXNzIENyZWF0ZQp7CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBwcm9taXNlIGZvciBhIHZhbHVlIGlmIHRoZSB2YWx1ZSBpcyBub3QgYSBwcm9taXNlLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgUHJvbWlzZSBvciB2YWx1ZS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwcm9taXNlRm9yKCR2YWx1ZSk6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoJHZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZUludGVyZmFjZSkgewogICAgICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgICAgIH0KCiAgICAgICAgLy8gUmV0dXJuIGEgR3V6emxlIHByb21pc2UgdGhhdCBzaGFkb3dzIHRoZSBnaXZlbiBwcm9taXNlLgogICAgICAgIGlmIChpc19vYmplY3QoJHZhbHVlKSAmJiBtZXRob2RfZXhpc3RzKCR2YWx1ZSwgJ3RoZW4nKSkgewogICAgICAgICAgICAkd2ZuID0gbWV0aG9kX2V4aXN0cygkdmFsdWUsICd3YWl0JykgPyBbJHZhbHVlLCAnd2FpdCddIDogbnVsbDsKICAgICAgICAgICAgJGNmbiA9IG1ldGhvZF9leGlzdHMoJHZhbHVlLCAnY2FuY2VsJykgPyBbJHZhbHVlLCAnY2FuY2VsJ10gOiBudWxsOwogICAgICAgICAgICAkcHJvbWlzZSA9IG5ldyBQcm9taXNlKCR3Zm4sICRjZm4pOwogICAgICAgICAgICAkdmFsdWUtPnRoZW4oWyRwcm9taXNlLCAncmVzb2x2ZSddLCBbJHByb21pc2UsICdyZWplY3QnXSk7CgogICAgICAgICAgICByZXR1cm4gJHByb21pc2U7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IEZ1bGZpbGxlZFByb21pc2UoJHZhbHVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSByZWplY3RlZCBwcm9taXNlIGZvciBhIHJlYXNvbiBpZiB0aGUgcmVhc29uIGlzIG5vdCBhIHByb21pc2UuCiAgICAgKiBJZiB0aGUgcHJvdmlkZWQgcmVhc29uIGlzIGEgcHJvbWlzZSwgdGhlbiBpdCBpcyByZXR1cm5lZCBhcy1pcy4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHJlYXNvbiBQcm9taXNlIG9yIHJlYXNvbi4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWplY3Rpb25Gb3IoJHJlYXNvbik6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoJHJlYXNvbiBpbnN0YW5jZW9mIFByb21pc2VJbnRlcmZhY2UpIHsKICAgICAgICAgICAgcmV0dXJuICRyZWFzb247CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IFJlamVjdGVkUHJvbWlzZSgkcmVhc29uKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhbiBleGNlcHRpb24gZm9yIGEgcmVqZWN0ZWQgcHJvbWlzZSB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHJlYXNvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGV4Y2VwdGlvbkZvcigkcmVhc29uKTogXFRocm93YWJsZQogICAgewogICAgICAgIGlmICgkcmVhc29uIGluc3RhbmNlb2YgXFRocm93YWJsZSkgewogICAgICAgICAgICByZXR1cm4gJHJlYXNvbjsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgUmVqZWN0aW9uRXhjZXB0aW9uKCRyZWFzb24pOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBpdGVyYXRvciBmb3IgdGhlIGdpdmVuIHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpdGVyRm9yKCR2YWx1ZSk6IFxJdGVyYXRvcgogICAgewogICAgICAgIGlmICgkdmFsdWUgaW5zdGFuY2VvZiBcSXRlcmF0b3IpIHsKICAgICAgICAgICAgcmV0dXJuICR2YWx1ZTsKICAgICAgICB9CgogICAgICAgIGlmIChpc19hcnJheSgkdmFsdWUpKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgXEFycmF5SXRlcmF0b3IoJHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgXEFycmF5SXRlcmF0b3IoWyR2YWx1ZV0pOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/Each.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCmZpbmFsIGNsYXNzIEVhY2gKewogICAgLyoqCiAgICAgKiBHaXZlbiBhbiBpdGVyYXRvciB0aGF0IHlpZWxkcyBwcm9taXNlcyBvciB2YWx1ZXMsIHJldHVybnMgYSBwcm9taXNlIHRoYXQKICAgICAqIGlzIGZ1bGZpbGxlZCB3aXRoIGEgbnVsbCB2YWx1ZSB3aGVuIHRoZSBpdGVyYXRvciBoYXMgYmVlbiBjb25zdW1lZCBvcgogICAgICogdGhlIGFnZ3JlZ2F0ZSBwcm9taXNlIGhhcyBiZWVuIGZ1bGZpbGxlZCBvciByZWplY3RlZC4KICAgICAqCiAgICAgKiAkb25GdWxmaWxsZWQgaXMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdGhlIGZ1bGZpbGxlZCB2YWx1ZSwgaXRlcmF0b3IKICAgICAqIGluZGV4LCBhbmQgdGhlIGFnZ3JlZ2F0ZSBwcm9taXNlLiBUaGUgY2FsbGJhY2sgY2FuIGludm9rZSBhbnkgbmVjZXNzYXJ5CiAgICAgKiBzaWRlIGVmZmVjdHMgYW5kIGNob29zZSB0byByZXNvbHZlIG9yIHJlamVjdCB0aGUgYWdncmVnYXRlIGlmIG5lZWRlZC4KICAgICAqCiAgICAgKiAkb25SZWplY3RlZCBpcyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgcmVqZWN0aW9uIHJlYXNvbiwgaXRlcmF0b3IKICAgICAqIGluZGV4LCBhbmQgdGhlIGFnZ3JlZ2F0ZSBwcm9taXNlLiBUaGUgY2FsbGJhY2sgY2FuIGludm9rZSBhbnkgbmVjZXNzYXJ5CiAgICAgKiBzaWRlIGVmZmVjdHMgYW5kIGNob29zZSB0byByZXNvbHZlIG9yIHJlamVjdCB0aGUgYWdncmVnYXRlIGlmIG5lZWRlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGl0ZXJhYmxlIEl0ZXJhdG9yIG9yIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBvZigKICAgICAgICAkaXRlcmFibGUsCiAgICAgICAgP2NhbGxhYmxlICRvbkZ1bGZpbGxlZCA9IG51bGwsCiAgICAgICAgP2NhbGxhYmxlICRvblJlamVjdGVkID0gbnVsbAogICAgKTogUHJvbWlzZUludGVyZmFjZSB7CiAgICAgICAgcmV0dXJuIChuZXcgRWFjaFByb21pc2UoJGl0ZXJhYmxlLCBbCiAgICAgICAgICAgICdmdWxmaWxsZWQnID0+ICRvbkZ1bGZpbGxlZCwKICAgICAgICAgICAgJ3JlamVjdGVkJyA9PiAkb25SZWplY3RlZCwKICAgICAgICBdKSktPnByb21pc2UoKTsKICAgIH0KCiAgICAvKioKICAgICAqIExpa2Ugb2YsIGJ1dCBvbmx5IGFsbG93cyBhIGNlcnRhaW4gbnVtYmVyIG9mIG91dHN0YW5kaW5nIHByb21pc2VzIGF0IGFueQogICAgICogZ2l2ZW4gdGltZS4KICAgICAqCiAgICAgKiAkY29uY3VycmVuY3kgbWF5IGJlIGFuIGludGVnZXIgb3IgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdGhlIG51bWJlciBvZgogICAgICogcGVuZGluZyBwcm9taXNlcyBhbmQgcmV0dXJucyBhIG51bWVyaWMgY29uY3VycmVuY3kgbGltaXQgdmFsdWUgdG8gYWxsb3cKICAgICAqIGZvciBkeW5hbWljIGEgY29uY3VycmVuY3kgc2l6ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgICAgICAgICRpdGVyYWJsZQogICAgICogQHBhcmFtIGludHxjYWxsYWJsZSAkY29uY3VycmVuY3kKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBvZkxpbWl0KAogICAgICAgICRpdGVyYWJsZSwKICAgICAgICAkY29uY3VycmVuY3ksCiAgICAgICAgP2NhbGxhYmxlICRvbkZ1bGZpbGxlZCA9IG51bGwsCiAgICAgICAgP2NhbGxhYmxlICRvblJlamVjdGVkID0gbnVsbAogICAgKTogUHJvbWlzZUludGVyZmFjZSB7CiAgICAgICAgcmV0dXJuIChuZXcgRWFjaFByb21pc2UoJGl0ZXJhYmxlLCBbCiAgICAgICAgICAgICdmdWxmaWxsZWQnID0+ICRvbkZ1bGZpbGxlZCwKICAgICAgICAgICAgJ3JlamVjdGVkJyA9PiAkb25SZWplY3RlZCwKICAgICAgICAgICAgJ2NvbmN1cnJlbmN5JyA9PiAkY29uY3VycmVuY3ksCiAgICAgICAgXSkpLT5wcm9taXNlKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBMaWtlIGxpbWl0LCBidXQgZW5zdXJlcyB0aGF0IG5vIHByb21pc2UgaW4gdGhlIGdpdmVuICRpdGVyYWJsZSBhcmd1bWVudAogICAgICogaXMgcmVqZWN0ZWQuIElmIGFueSBwcm9taXNlIGlzIHJlamVjdGVkLCB0aGVuIHRoZSBhZ2dyZWdhdGUgcHJvbWlzZSBpcwogICAgICogcmVqZWN0ZWQgd2l0aCB0aGUgZW5jb3VudGVyZWQgcmVqZWN0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAgICAgICAgJGl0ZXJhYmxlCiAgICAgKiBAcGFyYW0gaW50fGNhbGxhYmxlICRjb25jdXJyZW5jeQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9mTGltaXRBbGwoCiAgICAgICAgJGl0ZXJhYmxlLAogICAgICAgICRjb25jdXJyZW5jeSwKICAgICAgICA/Y2FsbGFibGUgJG9uRnVsZmlsbGVkID0gbnVsbAogICAgKTogUHJvbWlzZUludGVyZmFjZSB7CiAgICAgICAgcmV0dXJuIHNlbGY6Om9mTGltaXQoCiAgICAgICAgICAgICRpdGVyYWJsZSwKICAgICAgICAgICAgJGNvbmN1cnJlbmN5LAogICAgICAgICAgICAkb25GdWxmaWxsZWQsCiAgICAgICAgICAgIGZ1bmN0aW9uICgkcmVhc29uLCAkaWR4LCBQcm9taXNlSW50ZXJmYWNlICRhZ2dyZWdhdGUpOiB2b2lkIHsKICAgICAgICAgICAgICAgICRhZ2dyZWdhdGUtPnJlamVjdCgkcmVhc29uKTsKICAgICAgICAgICAgfQogICAgICAgICk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/EachPromise.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBSZXByZXNlbnRzIGEgcHJvbWlzZSB0aGF0IGl0ZXJhdGVzIG92ZXIgbWFueSBwcm9taXNlcyBhbmQgaW52b2tlcwogKiBzaWRlLWVmZmVjdCBmdW5jdGlvbnMgaW4gdGhlIHByb2Nlc3MuCiAqCiAqIEBmaW5hbAogKi8KY2xhc3MgRWFjaFByb21pc2UgaW1wbGVtZW50cyBQcm9taXNvckludGVyZmFjZQp7CiAgICBwcml2YXRlICRwZW5kaW5nID0gW107CgogICAgcHJpdmF0ZSAkbmV4dFBlbmRpbmdJbmRleCA9IDA7CgogICAgLyoqIEB2YXIgXEl0ZXJhdG9yfG51bGwgKi8KICAgIHByaXZhdGUgJGl0ZXJhYmxlOwoKICAgIC8qKiBAdmFyIGNhbGxhYmxlfGludHxudWxsICovCiAgICBwcml2YXRlICRjb25jdXJyZW5jeTsKCiAgICAvKiogQHZhciBjYWxsYWJsZXxudWxsICovCiAgICBwcml2YXRlICRvbkZ1bGZpbGxlZDsKCiAgICAvKiogQHZhciBjYWxsYWJsZXxudWxsICovCiAgICBwcml2YXRlICRvblJlamVjdGVkOwoKICAgIC8qKiBAdmFyIFByb21pc2V8bnVsbCAqLwogICAgcHJpdmF0ZSAkYWdncmVnYXRlOwoKICAgIC8qKiBAdmFyIGJvb2x8bnVsbCAqLwogICAgcHJpdmF0ZSAkbXV0ZXg7CgogICAgLyoqCiAgICAgKiBDb25maWd1cmF0aW9uIGhhc2ggY2FuIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBrZXkgdmFsdWUgcGFpcnM6CiAgICAgKgogICAgICogLSBmdWxmaWxsZWQ6IChjYWxsYWJsZSkgSW52b2tlZCB3aGVuIGEgcHJvbWlzZSBmdWxmaWxscy4gVGhlIGZ1bmN0aW9uCiAgICAgKiAgIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6IHRoZSBmdWxmaWxsbWVudCB2YWx1ZSwgdGhlIGluZGV4CiAgICAgKiAgIHBvc2l0aW9uIGZyb20gdGhlIGl0ZXJhYmxlIGxpc3Qgb2YgdGhlIHByb21pc2UsIGFuZCB0aGUgYWdncmVnYXRlCiAgICAgKiAgIHByb21pc2UgdGhhdCBtYW5hZ2VzIGFsbCBvZiB0aGUgcHJvbWlzZXMuIFRoZSBhZ2dyZWdhdGUgcHJvbWlzZSBtYXkKICAgICAqICAgYmUgcmVzb2x2ZWQgZnJvbSB3aXRoaW4gdGhlIGNhbGxiYWNrIHRvIHNob3J0LWNpcmN1aXQgdGhlIHByb21pc2UuCiAgICAgKiAtIHJlamVjdGVkOiAoY2FsbGFibGUpIEludm9rZWQgd2hlbiBhIHByb21pc2UgaXMgcmVqZWN0ZWQuIFRoZQogICAgICogICBmdW5jdGlvbiBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiB0aGUgcmVqZWN0aW9uIHJlYXNvbiwgdGhlCiAgICAgKiAgIGluZGV4IHBvc2l0aW9uIGZyb20gdGhlIGl0ZXJhYmxlIGxpc3Qgb2YgdGhlIHByb21pc2UsIGFuZCB0aGUKICAgICAqICAgYWdncmVnYXRlIHByb21pc2UgdGhhdCBtYW5hZ2VzIGFsbCBvZiB0aGUgcHJvbWlzZXMuIFRoZSBhZ2dyZWdhdGUKICAgICAqICAgcHJvbWlzZSBtYXkgYmUgcmVzb2x2ZWQgZnJvbSB3aXRoaW4gdGhlIGNhbGxiYWNrIHRvIHNob3J0LWNpcmN1aXQKICAgICAqICAgdGhlIHByb21pc2UuCiAgICAgKiAtIGNvbmN1cnJlbmN5OiAoaW50ZWdlcikgUGFzcyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGxpbWl0IHRoZQogICAgICogICBhbGxvd2VkIG51bWJlciBvZiBvdXRzdGFuZGluZyBjb25jdXJyZW50bHkgZXhlY3V0aW5nIHByb21pc2VzLAogICAgICogICBjcmVhdGluZyBhIGNhcHBlZCBwb29sIG9mIHByb21pc2VzLiBUaGVyZSBpcyBubyBsaW1pdCBieSBkZWZhdWx0LgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkaXRlcmFibGUgUHJvbWlzZXMgb3IgdmFsdWVzIHRvIGl0ZXJhdGUuCiAgICAgKiBAcGFyYW0gYXJyYXkgJGNvbmZpZyAgIENvbmZpZ3VyYXRpb24gb3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGl0ZXJhYmxlLCBhcnJheSAkY29uZmlnID0gW10pCiAgICB7CiAgICAgICAgJHRoaXMtPml0ZXJhYmxlID0gQ3JlYXRlOjppdGVyRm9yKCRpdGVyYWJsZSk7CgogICAgICAgIGlmIChpc3NldCgkY29uZmlnWydjb25jdXJyZW5jeSddKSkgewogICAgICAgICAgICAkdGhpcy0+Y29uY3VycmVuY3kgPSAkY29uZmlnWydjb25jdXJyZW5jeSddOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRjb25maWdbJ2Z1bGZpbGxlZCddKSkgewogICAgICAgICAgICAkdGhpcy0+b25GdWxmaWxsZWQgPSAkY29uZmlnWydmdWxmaWxsZWQnXTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkY29uZmlnWydyZWplY3RlZCddKSkgewogICAgICAgICAgICAkdGhpcy0+b25SZWplY3RlZCA9ICRjb25maWdbJ3JlamVjdGVkJ107CiAgICAgICAgfQogICAgfQoKICAgIC8qKiBAcHNhbG0tc3VwcHJlc3MgSW52YWxpZE51bGxhYmxlUmV0dXJuVHlwZSAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByb21pc2UoKTogUHJvbWlzZUludGVyZmFjZQogICAgewogICAgICAgIGlmICgkdGhpcy0+YWdncmVnYXRlKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+YWdncmVnYXRlOwogICAgICAgIH0KCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHRoaXMtPmNyZWF0ZVByb21pc2UoKTsKICAgICAgICAgICAgLyoqIEBwc2FsbS1hc3NlcnQgUHJvbWlzZSAkdGhpcy0+YWdncmVnYXRlICovCiAgICAgICAgICAgICR0aGlzLT5pdGVyYWJsZS0+cmV3aW5kKCk7CiAgICAgICAgICAgICR0aGlzLT5yZWZpbGxQZW5kaW5nKCk7CiAgICAgICAgfSBjYXRjaCAoXFRocm93YWJsZSAkZSkgewogICAgICAgICAgICAkdGhpcy0+YWdncmVnYXRlLT5yZWplY3QoJGUpOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQHBzYWxtLXN1cHByZXNzIE51bGxhYmxlUmV0dXJuU3RhdGVtZW50CiAgICAgICAgICovCiAgICAgICAgcmV0dXJuICR0aGlzLT5hZ2dyZWdhdGU7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjcmVhdGVQcm9taXNlKCk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+bXV0ZXggPSBmYWxzZTsKICAgICAgICAkdGhpcy0+YWdncmVnYXRlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKCk6IHZvaWQgewogICAgICAgICAgICBpZiAoJHRoaXMtPmNoZWNrSWZGaW5pc2hlZCgpKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmVzZXQoJHRoaXMtPnBlbmRpbmcpOwogICAgICAgICAgICAvLyBDb25zdW1lIGEgcG90ZW50aWFsbHkgZmx1Y3R1YXRpbmcgbGlzdCBvZiBwcm9taXNlcyB3aGlsZQogICAgICAgICAgICAvLyBlbnN1cmluZyB0aGF0IGluZGV4ZXMgYXJlIG1haW50YWluZWQgKHByZWNsdWRpbmcgYXJyYXlfc2hpZnQpLgogICAgICAgICAgICB3aGlsZSAoJHByb21pc2UgPSBjdXJyZW50KCR0aGlzLT5wZW5kaW5nKSkgewogICAgICAgICAgICAgICAgbmV4dCgkdGhpcy0+cGVuZGluZyk7CiAgICAgICAgICAgICAgICAkcHJvbWlzZS0+d2FpdCgpOwogICAgICAgICAgICAgICAgaWYgKElzOjpzZXR0bGVkKCR0aGlzLT5hZ2dyZWdhdGUpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIENsZWFyIHRoZSByZWZlcmVuY2VzIHdoZW4gdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQuCiAgICAgICAgJGNsZWFyRm4gPSBmdW5jdGlvbiAoKTogdm9pZCB7CiAgICAgICAgICAgICR0aGlzLT5pdGVyYWJsZSA9ICR0aGlzLT5jb25jdXJyZW5jeSA9ICR0aGlzLT5wZW5kaW5nID0gbnVsbDsKICAgICAgICAgICAgJHRoaXMtPm9uRnVsZmlsbGVkID0gJHRoaXMtPm9uUmVqZWN0ZWQgPSBudWxsOwogICAgICAgICAgICAkdGhpcy0+bmV4dFBlbmRpbmdJbmRleCA9IDA7CiAgICAgICAgfTsKCiAgICAgICAgJHRoaXMtPmFnZ3JlZ2F0ZS0+dGhlbigkY2xlYXJGbiwgJGNsZWFyRm4pOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcmVmaWxsUGVuZGluZygpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+Y29uY3VycmVuY3kpIHsKICAgICAgICAgICAgLy8gQWRkIGFsbCBwZW5kaW5nIHByb21pc2VzLgogICAgICAgICAgICB3aGlsZSAoJHRoaXMtPmFkZFBlbmRpbmcoKSAmJiAkdGhpcy0+YWR2YW5jZUl0ZXJhdG9yKCkpIHsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgLy8gQWRkIG9ubHkgdXAgdG8gTiBwZW5kaW5nIHByb21pc2VzLgogICAgICAgICRjb25jdXJyZW5jeSA9IGlzX2NhbGxhYmxlKCR0aGlzLT5jb25jdXJyZW5jeSkKICAgICAgICAgICAgPyAoJHRoaXMtPmNvbmN1cnJlbmN5KShjb3VudCgkdGhpcy0+cGVuZGluZykpCiAgICAgICAgICAgIDogJHRoaXMtPmNvbmN1cnJlbmN5OwogICAgICAgICRjb25jdXJyZW5jeSA9IG1heCgkY29uY3VycmVuY3kgLSBjb3VudCgkdGhpcy0+cGVuZGluZyksIDApOwogICAgICAgIC8vIENvbmN1cnJlbmN5IG1heSBiZSBzZXQgdG8gMCB0byBkaXNhbGxvdyBuZXcgcHJvbWlzZXMuCiAgICAgICAgaWYgKCEkY29uY3VycmVuY3kpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAvLyBBZGQgdGhlIGZpcnN0IHBlbmRpbmcgcHJvbWlzZS4KICAgICAgICAkdGhpcy0+YWRkUGVuZGluZygpOwogICAgICAgIC8vIE5vdGUgdGhpcyBpcyBzcGVjaWFsIGhhbmRsaW5nIGZvciBjb25jdXJyZW5jeT0xIHNvIHRoYXQgd2UgZG8KICAgICAgICAvLyBub3QgYWR2YW5jZSB0aGUgaXRlcmF0b3IgYWZ0ZXIgYWRkaW5nIHRoZSBmaXJzdCBwcm9taXNlLiBUaGlzCiAgICAgICAgLy8gaGVscHMgd29yayBhcm91bmQgaXNzdWVzIHdpdGggZ2VuZXJhdG9ycyB0aGF0IG1pZ2h0IG5vdCBoYXZlIHRoZQogICAgICAgIC8vIG5leHQgdmFsdWUgdG8geWllbGQgdW50aWwgcHJvbWlzZSBjYWxsYmFja3MgYXJlIGNhbGxlZC4KICAgICAgICB3aGlsZSAoLS0kY29uY3VycmVuY3kKICAgICAgICAgICAgJiYgJHRoaXMtPmFkdmFuY2VJdGVyYXRvcigpCiAgICAgICAgICAgICYmICR0aGlzLT5hZGRQZW5kaW5nKCkpIHsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBhZGRQZW5kaW5nKCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5pdGVyYWJsZSB8fCAhJHRoaXMtPml0ZXJhYmxlLT52YWxpZCgpKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgICRwcm9taXNlID0gQ3JlYXRlOjpwcm9taXNlRm9yKCR0aGlzLT5pdGVyYWJsZS0+Y3VycmVudCgpKTsKICAgICAgICAka2V5ID0gJHRoaXMtPml0ZXJhYmxlLT5rZXkoKTsKCiAgICAgICAgLy8gSXRlcmFibGUga2V5cyBtYXkgbm90IGJlIHVuaXF1ZSwgc28gd2UgdXNlIGEgY291bnRlciB0bwogICAgICAgIC8vIGd1YXJhbnRlZSB1bmlxdWVuZXNzCiAgICAgICAgJGlkeCA9ICR0aGlzLT5uZXh0UGVuZGluZ0luZGV4Kys7CgogICAgICAgICR0aGlzLT5wZW5kaW5nWyRpZHhdID0gJHByb21pc2UtPnRoZW4oCiAgICAgICAgICAgIGZ1bmN0aW9uICgkdmFsdWUpIHVzZSAoJGlkeCwgJGtleSk6IHZvaWQgewogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5vbkZ1bGZpbGxlZCkgewogICAgICAgICAgICAgICAgICAgICgkdGhpcy0+b25GdWxmaWxsZWQpKAogICAgICAgICAgICAgICAgICAgICAgICAkdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICRrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5hZ2dyZWdhdGUKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHRoaXMtPnN0ZXAoJGlkeCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGZ1bmN0aW9uICgkcmVhc29uKSB1c2UgKCRpZHgsICRrZXkpOiB2b2lkIHsKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+b25SZWplY3RlZCkgewogICAgICAgICAgICAgICAgICAgICgkdGhpcy0+b25SZWplY3RlZCkoCiAgICAgICAgICAgICAgICAgICAgICAgICRyZWFzb24sCiAgICAgICAgICAgICAgICAgICAgICAgICRrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5hZ2dyZWdhdGUKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHRoaXMtPnN0ZXAoJGlkeCk7CiAgICAgICAgICAgIH0KICAgICAgICApOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkdmFuY2VJdGVyYXRvcigpOiBib29sCiAgICB7CiAgICAgICAgLy8gUGxhY2UgYSBsb2NrIG9uIHRoZSBpdGVyYXRvciBzbyB0aGF0IHdlIGVuc3VyZSB0byBub3QgcmVjdXJzZSwKICAgICAgICAvLyBwcmV2ZW50aW5nIGZhdGFsIGdlbmVyYXRvciBlcnJvcnMuCiAgICAgICAgaWYgKCR0aGlzLT5tdXRleCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+bXV0ZXggPSB0cnVlOwoKICAgICAgICB0cnkgewogICAgICAgICAgICAkdGhpcy0+aXRlcmFibGUtPm5leHQoKTsKICAgICAgICAgICAgJHRoaXMtPm11dGV4ID0gZmFsc2U7CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGNhdGNoIChcVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgICR0aGlzLT5hZ2dyZWdhdGUtPnJlamVjdCgkZSk7CiAgICAgICAgICAgICR0aGlzLT5tdXRleCA9IGZhbHNlOwoKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHN0ZXAoaW50ICRpZHgpOiB2b2lkCiAgICB7CiAgICAgICAgLy8gSWYgdGhlIHByb21pc2Ugd2FzIGFscmVhZHkgcmVzb2x2ZWQsIHRoZW4gaWdub3JlIHRoaXMgc3RlcC4KICAgICAgICBpZiAoSXM6OnNldHRsZWQoJHRoaXMtPmFnZ3JlZ2F0ZSkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgdW5zZXQoJHRoaXMtPnBlbmRpbmdbJGlkeF0pOwoKICAgICAgICAvLyBPbmx5IHJlZmlsbCBwZW5kaW5nIHByb21pc2VzIGlmIHdlIGFyZSBub3QgbG9ja2VkLCBwcmV2ZW50aW5nIHRoZQogICAgICAgIC8vIEVhY2hQcm9taXNlIHRvIHJlY3Vyc2l2ZWx5IGludm9rZSB0aGUgcHJvdmlkZWQgaXRlcmF0b3IsIHdoaWNoCiAgICAgICAgLy8gY2F1c2UgYSBmYXRhbCBlcnJvcjogIkNhbm5vdCByZXN1bWUgYW4gYWxyZWFkeSBydW5uaW5nIGdlbmVyYXRvciIKICAgICAgICBpZiAoJHRoaXMtPmFkdmFuY2VJdGVyYXRvcigpICYmICEkdGhpcy0+Y2hlY2tJZkZpbmlzaGVkKCkpIHsKICAgICAgICAgICAgLy8gQWRkIG1vcmUgcGVuZGluZyBwcm9taXNlcyBpZiBwb3NzaWJsZS4KICAgICAgICAgICAgJHRoaXMtPnJlZmlsbFBlbmRpbmcoKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja0lmRmluaXNoZWQoKTogYm9vbAogICAgewogICAgICAgIGlmICghJHRoaXMtPnBlbmRpbmcgJiYgISR0aGlzLT5pdGVyYWJsZS0+dmFsaWQoKSkgewogICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIGlmIHRoZXJlJ3Mgbm90aGluZyBsZWZ0IHRvIGRvLgogICAgICAgICAgICAkdGhpcy0+YWdncmVnYXRlLT5yZXNvbHZlKG51bGwpOwoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/FulfilledPromise.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBBIHByb21pc2UgdGhhdCBoYXMgYmVlbiBmdWxmaWxsZWQuCiAqCiAqIFRoZW5uaW5nIG9mZiBvZiB0aGlzIHByb21pc2Ugd2lsbCBpbnZva2UgdGhlIG9uRnVsZmlsbGVkIGNhbGxiYWNrCiAqIGltbWVkaWF0ZWx5IGFuZCBpZ25vcmUgb3RoZXIgY2FsbGJhY2tzLgogKgogKiBAZmluYWwKICovCmNsYXNzIEZ1bGZpbGxlZFByb21pc2UgaW1wbGVtZW50cyBQcm9taXNlSW50ZXJmYWNlCnsKICAgIHByaXZhdGUgJHZhbHVlOwoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHZhbHVlKQogICAgewogICAgICAgIGlmIChpc19vYmplY3QoJHZhbHVlKSAmJiBtZXRob2RfZXhpc3RzKCR2YWx1ZSwgJ3RoZW4nKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdZb3UgY2Fubm90IGNyZWF0ZSBhIEZ1bGZpbGxlZFByb21pc2Ugd2l0aCBhIHByb21pc2UuJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnZhbHVlID0gJHZhbHVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0aGVuKAogICAgICAgID9jYWxsYWJsZSAkb25GdWxmaWxsZWQgPSBudWxsLAogICAgICAgID9jYWxsYWJsZSAkb25SZWplY3RlZCA9IG51bGwKICAgICk6IFByb21pc2VJbnRlcmZhY2UgewogICAgICAgIC8vIFJldHVybiBpdHNlbGYgaWYgdGhlcmUgaXMgbm8gb25GdWxmaWxsZWQgZnVuY3Rpb24uCiAgICAgICAgaWYgKCEkb25GdWxmaWxsZWQpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJHF1ZXVlID0gVXRpbHM6OnF1ZXVlKCk7CiAgICAgICAgJHAgPSBuZXcgUHJvbWlzZShbJHF1ZXVlLCAncnVuJ10pOwogICAgICAgICR2YWx1ZSA9ICR0aGlzLT52YWx1ZTsKICAgICAgICAkcXVldWUtPmFkZChzdGF0aWMgZnVuY3Rpb24gKCkgdXNlICgkcCwgJHZhbHVlLCAkb25GdWxmaWxsZWQpOiB2b2lkIHsKICAgICAgICAgICAgaWYgKElzOjpwZW5kaW5nKCRwKSkgewogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAkcC0+cmVzb2x2ZSgkb25GdWxmaWxsZWQoJHZhbHVlKSk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChcVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgICAgICAgICAgJHAtPnJlamVjdCgkZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuICRwOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBvdGhlcndpc2UoY2FsbGFibGUgJG9uUmVqZWN0ZWQpOiBQcm9taXNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50aGVuKG51bGwsICRvblJlamVjdGVkKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2FpdChib29sICR1bndyYXAgPSB0cnVlKQogICAgewogICAgICAgIHJldHVybiAkdW53cmFwID8gJHRoaXMtPnZhbHVlIDogbnVsbDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3RhdGUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OkZVTEZJTExFRDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzb2x2ZSgkdmFsdWUpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCR2YWx1ZSAhPT0gJHRoaXMtPnZhbHVlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ0Nhbm5vdCByZXNvbHZlIGEgZnVsZmlsbGVkIHByb21pc2UnKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlamVjdCgkcmVhc29uKTogdm9pZAogICAgewogICAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ0Nhbm5vdCByZWplY3QgYSBmdWxmaWxsZWQgcHJvbWlzZScpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjYW5jZWwoKTogdm9pZAogICAgewogICAgICAgIC8vIHBhc3MKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/Is.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCmZpbmFsIGNsYXNzIElzCnsKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIGEgcHJvbWlzZSBpcyBwZW5kaW5nLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBlbmRpbmcoUHJvbWlzZUludGVyZmFjZSAkcHJvbWlzZSk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHByb21pc2UtPmdldFN0YXRlKCkgPT09IFByb21pc2VJbnRlcmZhY2U6OlBFTkRJTkc7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgYSBwcm9taXNlIGlzIGZ1bGZpbGxlZCBvciByZWplY3RlZC4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXR0bGVkKFByb21pc2VJbnRlcmZhY2UgJHByb21pc2UpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICRwcm9taXNlLT5nZXRTdGF0ZSgpICE9PSBQcm9taXNlSW50ZXJmYWNlOjpQRU5ESU5HOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIGEgcHJvbWlzZSBpcyBmdWxmaWxsZWQuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnVsZmlsbGVkKFByb21pc2VJbnRlcmZhY2UgJHByb21pc2UpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICRwcm9taXNlLT5nZXRTdGF0ZSgpID09PSBQcm9taXNlSW50ZXJmYWNlOjpGVUxGSUxMRUQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgYSBwcm9taXNlIGlzIHJlamVjdGVkLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlamVjdGVkKFByb21pc2VJbnRlcmZhY2UgJHByb21pc2UpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICRwcm9taXNlLT5nZXRTdGF0ZSgpID09PSBQcm9taXNlSW50ZXJmYWNlOjpSRUpFQ1RFRDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/Promise.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBQcm9taXNlcy9BKyBpbXBsZW1lbnRhdGlvbiB0aGF0IGF2b2lkcyByZWN1cnNpb24gd2hlbiBwb3NzaWJsZS4KICoKICogQHNlZSBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLwogKgogKiBAZmluYWwKICovCmNsYXNzIFByb21pc2UgaW1wbGVtZW50cyBQcm9taXNlSW50ZXJmYWNlCnsKICAgIHByaXZhdGUgJHN0YXRlID0gc2VsZjo6UEVORElORzsKICAgIHByaXZhdGUgJHJlc3VsdDsKICAgIHByaXZhdGUgJGNhbmNlbEZuOwogICAgcHJpdmF0ZSAkd2FpdEZuOwogICAgcHJpdmF0ZSAkd2FpdExpc3Q7CiAgICBwcml2YXRlICRoYW5kbGVycyA9IFtdOwoKICAgIC8qKgogICAgICogQHBhcmFtIGNhbGxhYmxlICR3YWl0Rm4gICBGbiB0aGF0IHdoZW4gaW52b2tlZCByZXNvbHZlcyB0aGUgcHJvbWlzZS4KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FuY2VsRm4gRm4gdGhhdCB3aGVuIGludm9rZWQgY2FuY2VscyB0aGUgcHJvbWlzZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgID9jYWxsYWJsZSAkd2FpdEZuID0gbnVsbCwKICAgICAgICA/Y2FsbGFibGUgJGNhbmNlbEZuID0gbnVsbAogICAgKSB7CiAgICAgICAgJHRoaXMtPndhaXRGbiA9ICR3YWl0Rm47CiAgICAgICAgJHRoaXMtPmNhbmNlbEZuID0gJGNhbmNlbEZuOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0aGVuKAogICAgICAgID9jYWxsYWJsZSAkb25GdWxmaWxsZWQgPSBudWxsLAogICAgICAgID9jYWxsYWJsZSAkb25SZWplY3RlZCA9IG51bGwKICAgICk6IFByb21pc2VJbnRlcmZhY2UgewogICAgICAgIGlmICgkdGhpcy0+c3RhdGUgPT09IHNlbGY6OlBFTkRJTkcpIHsKICAgICAgICAgICAgJHAgPSBuZXcgUHJvbWlzZShudWxsLCBbJHRoaXMsICdjYW5jZWwnXSk7CiAgICAgICAgICAgICR0aGlzLT5oYW5kbGVyc1tdID0gWyRwLCAkb25GdWxmaWxsZWQsICRvblJlamVjdGVkXTsKICAgICAgICAgICAgJHAtPndhaXRMaXN0ID0gJHRoaXMtPndhaXRMaXN0OwogICAgICAgICAgICAkcC0+d2FpdExpc3RbXSA9ICR0aGlzOwoKICAgICAgICAgICAgcmV0dXJuICRwOwogICAgICAgIH0KCiAgICAgICAgLy8gUmV0dXJuIGEgZnVsZmlsbGVkIHByb21pc2UgYW5kIGltbWVkaWF0ZWx5IGludm9rZSBhbnkgY2FsbGJhY2tzLgogICAgICAgIGlmICgkdGhpcy0+c3RhdGUgPT09IHNlbGY6OkZVTEZJTExFRCkgewogICAgICAgICAgICAkcHJvbWlzZSA9IENyZWF0ZTo6cHJvbWlzZUZvcigkdGhpcy0+cmVzdWx0KTsKCiAgICAgICAgICAgIHJldHVybiAkb25GdWxmaWxsZWQgPyAkcHJvbWlzZS0+dGhlbigkb25GdWxmaWxsZWQpIDogJHByb21pc2U7CiAgICAgICAgfQoKICAgICAgICAvLyBJdCdzIGVpdGhlciBjYW5jZWxsZWQgb3IgcmVqZWN0ZWQsIHNvIHJldHVybiBhIHJlamVjdGVkIHByb21pc2UKICAgICAgICAvLyBhbmQgaW1tZWRpYXRlbHkgaW52b2tlIGFueSBjYWxsYmFja3MuCiAgICAgICAgJHJlamVjdGlvbiA9IENyZWF0ZTo6cmVqZWN0aW9uRm9yKCR0aGlzLT5yZXN1bHQpOwoKICAgICAgICByZXR1cm4gJG9uUmVqZWN0ZWQgPyAkcmVqZWN0aW9uLT50aGVuKG51bGwsICRvblJlamVjdGVkKSA6ICRyZWplY3Rpb247CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG90aGVyd2lzZShjYWxsYWJsZSAkb25SZWplY3RlZCk6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRoZW4obnVsbCwgJG9uUmVqZWN0ZWQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3YWl0KGJvb2wgJHVud3JhcCA9IHRydWUpCiAgICB7CiAgICAgICAgJHRoaXMtPndhaXRJZlBlbmRpbmcoKTsKCiAgICAgICAgaWYgKCR0aGlzLT5yZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlSW50ZXJmYWNlKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVzdWx0LT53YWl0KCR1bndyYXApOwogICAgICAgIH0KICAgICAgICBpZiAoJHVud3JhcCkgewogICAgICAgICAgICBpZiAoJHRoaXMtPnN0YXRlID09PSBzZWxmOjpGVUxGSUxMRUQpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVzdWx0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIEl0J3MgcmVqZWN0ZWQgc28gInVud3JhcCIgYW5kIHRocm93IGFuIGV4Y2VwdGlvbi4KICAgICAgICAgICAgdGhyb3cgQ3JlYXRlOjpleGNlcHRpb25Gb3IoJHRoaXMtPnJlc3VsdCk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdGF0ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0YXRlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjYW5jZWwoKTogdm9pZAogICAgewogICAgICAgIGlmICgkdGhpcy0+c3RhdGUgIT09IHNlbGY6OlBFTkRJTkcpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPndhaXRGbiA9ICR0aGlzLT53YWl0TGlzdCA9IG51bGw7CgogICAgICAgIGlmICgkdGhpcy0+Y2FuY2VsRm4pIHsKICAgICAgICAgICAgJGZuID0gJHRoaXMtPmNhbmNlbEZuOwogICAgICAgICAgICAkdGhpcy0+Y2FuY2VsRm4gPSBudWxsOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgJGZuKCk7CiAgICAgICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5yZWplY3QoJGUpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBSZWplY3QgdGhlIHByb21pc2Ugb25seSBpZiBpdCB3YXNuJ3QgcmVqZWN0ZWQgaW4gYSB0aGVuIGNhbGxiYWNrLgogICAgICAgIC8qKiBAcHNhbG0tc3VwcHJlc3MgUmVkdW5kYW50Q29uZGl0aW9uICovCiAgICAgICAgaWYgKCR0aGlzLT5zdGF0ZSA9PT0gc2VsZjo6UEVORElORykgewogICAgICAgICAgICAkdGhpcy0+cmVqZWN0KG5ldyBDYW5jZWxsYXRpb25FeGNlcHRpb24oJ1Byb21pc2UgaGFzIGJlZW4gY2FuY2VsbGVkJykpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzb2x2ZSgkdmFsdWUpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPnNldHRsZShzZWxmOjpGVUxGSUxMRUQsICR2YWx1ZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlamVjdCgkcmVhc29uKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5zZXR0bGUoc2VsZjo6UkVKRUNURUQsICRyZWFzb24pOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gc2V0dGxlKHN0cmluZyAkc3RhdGUsICR2YWx1ZSk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPnN0YXRlICE9PSBzZWxmOjpQRU5ESU5HKSB7CiAgICAgICAgICAgIC8vIElnbm9yZSBjYWxscyB3aXRoIHRoZSBzYW1lIHJlc29sdXRpb24uCiAgICAgICAgICAgIGlmICgkc3RhdGUgPT09ICR0aGlzLT5zdGF0ZSAmJiAkdmFsdWUgPT09ICR0aGlzLT5yZXN1bHQpIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aHJvdyAkdGhpcy0+c3RhdGUgPT09ICRzdGF0ZQogICAgICAgICAgICAgICAgPyBuZXcgXExvZ2ljRXhjZXB0aW9uKCJUaGUgcHJvbWlzZSBpcyBhbHJlYWR5IHskc3RhdGV9LiIpCiAgICAgICAgICAgICAgICA6IG5ldyBcTG9naWNFeGNlcHRpb24oIkNhbm5vdCBjaGFuZ2UgYSB7JHRoaXMtPnN0YXRlfSBwcm9taXNlIHRvIHskc3RhdGV9Iik7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHZhbHVlID09PSAkdGhpcykgewogICAgICAgICAgICB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdDYW5ub3QgZnVsZmlsbCBvciByZWplY3QgYSBwcm9taXNlIHdpdGggaXRzZWxmJyk7CiAgICAgICAgfQoKICAgICAgICAvLyBDbGVhciBvdXQgdGhlIHN0YXRlIG9mIHRoZSBwcm9taXNlIGJ1dCBzdGFzaCB0aGUgaGFuZGxlcnMuCiAgICAgICAgJHRoaXMtPnN0YXRlID0gJHN0YXRlOwogICAgICAgICR0aGlzLT5yZXN1bHQgPSAkdmFsdWU7CiAgICAgICAgJGhhbmRsZXJzID0gJHRoaXMtPmhhbmRsZXJzOwogICAgICAgICR0aGlzLT5oYW5kbGVycyA9IG51bGw7CiAgICAgICAgJHRoaXMtPndhaXRMaXN0ID0gJHRoaXMtPndhaXRGbiA9IG51bGw7CiAgICAgICAgJHRoaXMtPmNhbmNlbEZuID0gbnVsbDsKCiAgICAgICAgaWYgKCEkaGFuZGxlcnMpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgLy8gSWYgdGhlIHZhbHVlIHdhcyBub3QgYSBzZXR0bGVkIHByb21pc2Ugb3IgYSB0aGVuYWJsZSwgdGhlbiByZXNvbHZlCiAgICAgICAgLy8gaXQgaW4gdGhlIHRhc2sgcXVldWUgdXNpbmcgdGhlIGNvcnJlY3QgSUQuCiAgICAgICAgaWYgKCFpc19vYmplY3QoJHZhbHVlKSB8fCAhbWV0aG9kX2V4aXN0cygkdmFsdWUsICd0aGVuJykpIHsKICAgICAgICAgICAgJGlkID0gJHN0YXRlID09PSBzZWxmOjpGVUxGSUxMRUQgPyAxIDogMjsKICAgICAgICAgICAgLy8gSXQncyBhIHN1Y2Nlc3MsIHNvIHJlc29sdmUgdGhlIGhhbmRsZXJzIGluIHRoZSBxdWV1ZS4KICAgICAgICAgICAgVXRpbHM6OnF1ZXVlKCktPmFkZChzdGF0aWMgZnVuY3Rpb24gKCkgdXNlICgkaWQsICR2YWx1ZSwgJGhhbmRsZXJzKTogdm9pZCB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkaGFuZGxlcnMgYXMgJGhhbmRsZXIpIHsKICAgICAgICAgICAgICAgICAgICBzZWxmOjpjYWxsSGFuZGxlcigkaWQsICR2YWx1ZSwgJGhhbmRsZXIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2VpZiAoJHZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSAmJiBJczo6cGVuZGluZygkdmFsdWUpKSB7CiAgICAgICAgICAgIC8vIFdlIGNhbiBqdXN0IG1lcmdlIG91ciBoYW5kbGVycyBvbnRvIHRoZSBuZXh0IHByb21pc2UuCiAgICAgICAgICAgICR2YWx1ZS0+aGFuZGxlcnMgPSBhcnJheV9tZXJnZSgkdmFsdWUtPmhhbmRsZXJzLCAkaGFuZGxlcnMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFJlc29sdmUgdGhlIGhhbmRsZXJzIHdoZW4gdGhlIGZvcndhcmRlZCBwcm9taXNlIGlzIHJlc29sdmVkLgogICAgICAgICAgICAkdmFsdWUtPnRoZW4oCiAgICAgICAgICAgICAgICBzdGF0aWMgZnVuY3Rpb24gKCR2YWx1ZSkgdXNlICgkaGFuZGxlcnMpOiB2b2lkIHsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkaGFuZGxlcnMgYXMgJGhhbmRsZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6Y2FsbEhhbmRsZXIoMSwgJHZhbHVlLCAkaGFuZGxlcik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHN0YXRpYyBmdW5jdGlvbiAoJHJlYXNvbikgdXNlICgkaGFuZGxlcnMpOiB2b2lkIHsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkaGFuZGxlcnMgYXMgJGhhbmRsZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6Y2FsbEhhbmRsZXIoMiwgJHJlYXNvbiwgJGhhbmRsZXIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBDYWxsIGEgc3RhY2sgb2YgaGFuZGxlcnMgdXNpbmcgYSBzcGVjaWZpYyBjYWxsYmFjayBpbmRleCBhbmQgdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIGludCAgICRpbmRleCAgIDEgKHJlc29sdmUpIG9yIDIgKHJlamVjdCkuCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlICAgVmFsdWUgdG8gcGFzcyB0byB0aGUgY2FsbGJhY2suCiAgICAgKiBAcGFyYW0gYXJyYXkgJGhhbmRsZXIgQXJyYXkgb2YgaGFuZGxlciBkYXRhIChwcm9taXNlIGFuZCBjYWxsYmFja3MpLgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBjYWxsSGFuZGxlcihpbnQgJGluZGV4LCAkdmFsdWUsIGFycmF5ICRoYW5kbGVyKTogdm9pZAogICAgewogICAgICAgIC8qKiBAdmFyIFByb21pc2VJbnRlcmZhY2UgJHByb21pc2UgKi8KICAgICAgICAkcHJvbWlzZSA9ICRoYW5kbGVyWzBdOwoKICAgICAgICAvLyBUaGUgcHJvbWlzZSBtYXkgaGF2ZSBiZWVuIGNhbmNlbGxlZCBvciByZXNvbHZlZCBiZWZvcmUgcGxhY2luZwogICAgICAgIC8vIHRoaXMgdGh1bmsgaW4gdGhlIHF1ZXVlLgogICAgICAgIGlmIChJczo6c2V0dGxlZCgkcHJvbWlzZSkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKGlzc2V0KCRoYW5kbGVyWyRpbmRleF0pKSB7CiAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICogSWYgJGYgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdGhlbiAkaGFuZGxlciB3aWxsIGJlIGluIHRoZSBleGNlcHRpb24KICAgICAgICAgICAgICAgICAqIHN0YWNrIHRyYWNlLiBTaW5jZSAkaGFuZGxlciBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgY2FsbGFibGUKICAgICAgICAgICAgICAgICAqIGl0c2VsZiB3ZSBnZXQgYSBjaXJjdWxhciByZWZlcmVuY2UuIFdlIGNsZWFyIHRoZSAkaGFuZGxlcgogICAgICAgICAgICAgICAgICogaGVyZSB0byBhdm9pZCB0aGF0IG1lbW9yeSBsZWFrLgogICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAkZiA9ICRoYW5kbGVyWyRpbmRleF07CiAgICAgICAgICAgICAgICB1bnNldCgkaGFuZGxlcik7CiAgICAgICAgICAgICAgICAkcHJvbWlzZS0+cmVzb2x2ZSgkZigkdmFsdWUpKTsKICAgICAgICAgICAgfSBlbHNlaWYgKCRpbmRleCA9PT0gMSkgewogICAgICAgICAgICAgICAgLy8gRm9yd2FyZCByZXNvbHV0aW9uIHZhbHVlcyBhcy1pcy4KICAgICAgICAgICAgICAgICRwcm9taXNlLT5yZXNvbHZlKCR2YWx1ZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBGb3J3YXJkIHJlamVjdGlvbnMgZG93biB0aGUgY2hhaW4uCiAgICAgICAgICAgICAgICAkcHJvbWlzZS0+cmVqZWN0KCR2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChcVGhyb3dhYmxlICRyZWFzb24pIHsKICAgICAgICAgICAgJHByb21pc2UtPnJlamVjdCgkcmVhc29uKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiB3YWl0SWZQZW5kaW5nKCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPnN0YXRlICE9PSBzZWxmOjpQRU5ESU5HKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9IGVsc2VpZiAoJHRoaXMtPndhaXRGbikgewogICAgICAgICAgICAkdGhpcy0+aW52b2tlV2FpdEZuKCk7CiAgICAgICAgfSBlbHNlaWYgKCR0aGlzLT53YWl0TGlzdCkgewogICAgICAgICAgICAkdGhpcy0+aW52b2tlV2FpdExpc3QoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIHdhaXQgZnVuY3Rpb24sIHRoZW4gcmVqZWN0IHRoZSBwcm9taXNlLgogICAgICAgICAgICAkdGhpcy0+cmVqZWN0KCdDYW5ub3Qgd2FpdCBvbiBhIHByb21pc2UgdGhhdCBoYXMgJwogICAgICAgICAgICAgICAgLidubyBpbnRlcm5hbCB3YWl0IGZ1bmN0aW9uLiBZb3UgbXVzdCBwcm92aWRlIGEgd2FpdCAnCiAgICAgICAgICAgICAgICAuJ2Z1bmN0aW9uIHdoZW4gY29uc3RydWN0aW5nIHRoZSBwcm9taXNlIHRvIGJlIGFibGUgdG8gJwogICAgICAgICAgICAgICAgLid3YWl0IG9uIGEgcHJvbWlzZS4nKTsKICAgICAgICB9CgogICAgICAgIFV0aWxzOjpxdWV1ZSgpLT5ydW4oKTsKCiAgICAgICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBSZWR1bmRhbnRDb25kaXRpb24gKi8KICAgICAgICBpZiAoJHRoaXMtPnN0YXRlID09PSBzZWxmOjpQRU5ESU5HKSB7CiAgICAgICAgICAgICR0aGlzLT5yZWplY3QoJ0ludm9raW5nIHRoZSB3YWl0IGNhbGxiYWNrIGRpZCBub3QgcmVzb2x2ZSB0aGUgcHJvbWlzZScpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGludm9rZVdhaXRGbigpOiB2b2lkCiAgICB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHdmbiA9ICR0aGlzLT53YWl0Rm47CiAgICAgICAgICAgICR0aGlzLT53YWl0Rm4gPSBudWxsOwogICAgICAgICAgICAkd2ZuKHRydWUpOwogICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJHJlYXNvbikgewogICAgICAgICAgICBpZiAoJHRoaXMtPnN0YXRlID09PSBzZWxmOjpQRU5ESU5HKSB7CiAgICAgICAgICAgICAgICAvLyBUaGUgcHJvbWlzZSBoYXMgbm90IGJlZW4gcmVzb2x2ZWQgeWV0LCBzbyByZWplY3QgdGhlIHByb21pc2UKICAgICAgICAgICAgICAgIC8vIHdpdGggdGhlIGV4Y2VwdGlvbi4KICAgICAgICAgICAgICAgICR0aGlzLT5yZWplY3QoJHJlYXNvbik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBUaGUgcHJvbWlzZSB3YXMgYWxyZWFkeSByZXNvbHZlZCwgc28gdGhlcmUncyBhIHByb2JsZW0gaW4KICAgICAgICAgICAgICAgIC8vIHRoZSBhcHBsaWNhdGlvbi4KICAgICAgICAgICAgICAgIHRocm93ICRyZWFzb247CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBpbnZva2VXYWl0TGlzdCgpOiB2b2lkCiAgICB7CiAgICAgICAgJHdhaXRMaXN0ID0gJHRoaXMtPndhaXRMaXN0OwogICAgICAgICR0aGlzLT53YWl0TGlzdCA9IG51bGw7CgogICAgICAgIGZvcmVhY2ggKCR3YWl0TGlzdCBhcyAkcmVzdWx0KSB7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICRyZXN1bHQtPndhaXRJZlBlbmRpbmcoKTsKICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkcmVzdWx0LT5yZXN1bHQ7CiAgICAgICAgICAgIH0gd2hpbGUgKCRyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKTsKCiAgICAgICAgICAgIGlmICgkcmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZUludGVyZmFjZSkgewogICAgICAgICAgICAgICAgJHJlc3VsdC0+d2FpdChmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/PromiseInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBBIHByb21pc2UgcmVwcmVzZW50cyB0aGUgZXZlbnR1YWwgcmVzdWx0IG9mIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uCiAqCiAqIFRoZSBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyB0aGVuIG1ldGhvZCwKICogd2hpY2ggcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHByb21pc2XigJlzIGV2ZW50dWFsIHZhbHVlIG9yCiAqIHRoZSByZWFzb24gd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuCiAqCiAqIEBzZWUgaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8KICovCmludGVyZmFjZSBQcm9taXNlSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBjb25zdCBQRU5ESU5HID0gJ3BlbmRpbmcnOwogICAgcHVibGljIGNvbnN0IEZVTEZJTExFRCA9ICdmdWxmaWxsZWQnOwogICAgcHVibGljIGNvbnN0IFJFSkVDVEVEID0gJ3JlamVjdGVkJzsKCiAgICAvKioKICAgICAqIEFwcGVuZHMgZnVsZmlsbG1lbnQgYW5kIHJlamVjdGlvbiBoYW5kbGVycyB0byB0aGUgcHJvbWlzZSwgYW5kIHJldHVybnMKICAgICAqIGEgbmV3IHByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGNhbGxlZCBoYW5kbGVyLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkb25GdWxmaWxsZWQgSW52b2tlZCB3aGVuIHRoZSBwcm9taXNlIGZ1bGZpbGxzLgogICAgICogQHBhcmFtIGNhbGxhYmxlICRvblJlamVjdGVkICBJbnZva2VkIHdoZW4gdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0aGVuKAogICAgICAgID9jYWxsYWJsZSAkb25GdWxmaWxsZWQgPSBudWxsLAogICAgICAgID9jYWxsYWJsZSAkb25SZWplY3RlZCA9IG51bGwKICAgICk6IFByb21pc2VJbnRlcmZhY2U7CgogICAgLyoqCiAgICAgKiBBcHBlbmRzIGEgcmVqZWN0aW9uIGhhbmRsZXIgY2FsbGJhY2sgdG8gdGhlIHByb21pc2UsIGFuZCByZXR1cm5zIGEgbmV3CiAgICAgKiBwcm9taXNlIHJlc29sdmluZyB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBjYWxsYmFjayBpZiBpdCBpcyBjYWxsZWQsCiAgICAgKiBvciB0byBpdHMgb3JpZ2luYWwgZnVsZmlsbG1lbnQgdmFsdWUgaWYgdGhlIHByb21pc2UgaXMgaW5zdGVhZAogICAgICogZnVsZmlsbGVkLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkb25SZWplY3RlZCBJbnZva2VkIHdoZW4gdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvdGhlcndpc2UoY2FsbGFibGUgJG9uUmVqZWN0ZWQpOiBQcm9taXNlSW50ZXJmYWNlOwoKICAgIC8qKgogICAgICogR2V0IHRoZSBzdGF0ZSBvZiB0aGUgcHJvbWlzZSAoInBlbmRpbmciLCAicmVqZWN0ZWQiLCBvciAiZnVsZmlsbGVkIikuCiAgICAgKgogICAgICogVGhlIHRocmVlIHN0YXRlcyBjYW4gYmUgY2hlY2tlZCBhZ2FpbnN0IHRoZSBjb25zdGFudHMgZGVmaW5lZCBvbgogICAgICogUHJvbWlzZUludGVyZmFjZTogUEVORElORywgRlVMRklMTEVELCBhbmQgUkVKRUNURUQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdGF0ZSgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXNvbHZlIHRoZSBwcm9taXNlIHdpdGggdGhlIGdpdmVuIHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqCiAgICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIGlmIHRoZSBwcm9taXNlIGlzIGFscmVhZHkgcmVzb2x2ZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXNvbHZlKCR2YWx1ZSk6IHZvaWQ7CgogICAgLyoqCiAgICAgKiBSZWplY3QgdGhlIHByb21pc2Ugd2l0aCB0aGUgZ2l2ZW4gcmVhc29uLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkcmVhc29uCiAgICAgKgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBpZiB0aGUgcHJvbWlzZSBpcyBhbHJlYWR5IHJlc29sdmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVqZWN0KCRyZWFzb24pOiB2b2lkOwoKICAgIC8qKgogICAgICogQ2FuY2VscyB0aGUgcHJvbWlzZSBpZiBwb3NzaWJsZS4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9taXNlcy1hcGx1cy9jYW5jZWxsYXRpb24tc3BlYy9pc3N1ZXMvNwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2FuY2VsKCk6IHZvaWQ7CgogICAgLyoqCiAgICAgKiBXYWl0cyB1bnRpbCB0aGUgcHJvbWlzZSBjb21wbGV0ZXMgaWYgcG9zc2libGUuCiAgICAgKgogICAgICogUGFzcyAkdW53cmFwIGFzIHRydWUgdG8gdW53cmFwIHRoZSByZXN1bHQgb2YgdGhlIHByb21pc2UsIGVpdGhlcgogICAgICogcmV0dXJuaW5nIHRoZSByZXNvbHZlZCB2YWx1ZSBvciB0aHJvd2luZyB0aGUgcmVqZWN0ZWQgZXhjZXB0aW9uLgogICAgICoKICAgICAqIElmIHRoZSBwcm9taXNlIGNhbm5vdCBiZSB3YWl0ZWQgb24sIHRoZW4gdGhlIHByb21pc2Ugd2lsbCBiZSByZWplY3RlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKgogICAgICogQHRocm93cyBcTG9naWNFeGNlcHRpb24gaWYgdGhlIHByb21pc2UgaGFzIG5vIHdhaXQgZnVuY3Rpb24gb3IgaWYgdGhlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlIGRvZXMgbm90IHNldHRsZSBhZnRlciB3YWl0aW5nLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2FpdChib29sICR1bndyYXAgPSB0cnVlKTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/PromisorInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBJbnRlcmZhY2UgdXNlZCB3aXRoIGNsYXNzZXMgdGhhdCByZXR1cm4gYSBwcm9taXNlLgogKi8KaW50ZXJmYWNlIFByb21pc29ySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0dXJucyBhIHByb21pc2UuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcm9taXNlKCk6IFByb21pc2VJbnRlcmZhY2U7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/RejectedPromise.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBBIHByb21pc2UgdGhhdCBoYXMgYmVlbiByZWplY3RlZC4KICoKICogVGhlbm5pbmcgb2ZmIG9mIHRoaXMgcHJvbWlzZSB3aWxsIGludm9rZSB0aGUgb25SZWplY3RlZCBjYWxsYmFjawogKiBpbW1lZGlhdGVseSBhbmQgaWdub3JlIG90aGVyIGNhbGxiYWNrcy4KICoKICogQGZpbmFsCiAqLwpjbGFzcyBSZWplY3RlZFByb21pc2UgaW1wbGVtZW50cyBQcm9taXNlSW50ZXJmYWNlCnsKICAgIHByaXZhdGUgJHJlYXNvbjsKCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkcmVhc29uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkcmVhc29uKQogICAgewogICAgICAgIGlmIChpc19vYmplY3QoJHJlYXNvbikgJiYgbWV0aG9kX2V4aXN0cygkcmVhc29uLCAndGhlbicpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ1lvdSBjYW5ub3QgY3JlYXRlIGEgUmVqZWN0ZWRQcm9taXNlIHdpdGggYSBwcm9taXNlLicKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5yZWFzb24gPSAkcmVhc29uOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0aGVuKAogICAgICAgID9jYWxsYWJsZSAkb25GdWxmaWxsZWQgPSBudWxsLAogICAgICAgID9jYWxsYWJsZSAkb25SZWplY3RlZCA9IG51bGwKICAgICk6IFByb21pc2VJbnRlcmZhY2UgewogICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gb25SZWplY3RlZCBjYWxsYmFjayB0aGVuIGp1c3QgcmV0dXJuIHNlbGYuCiAgICAgICAgaWYgKCEkb25SZWplY3RlZCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkcXVldWUgPSBVdGlsczo6cXVldWUoKTsKICAgICAgICAkcmVhc29uID0gJHRoaXMtPnJlYXNvbjsKICAgICAgICAkcCA9IG5ldyBQcm9taXNlKFskcXVldWUsICdydW4nXSk7CiAgICAgICAgJHF1ZXVlLT5hZGQoc3RhdGljIGZ1bmN0aW9uICgpIHVzZSAoJHAsICRyZWFzb24sICRvblJlamVjdGVkKTogdm9pZCB7CiAgICAgICAgICAgIGlmIChJczo6cGVuZGluZygkcCkpIHsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgLy8gUmV0dXJuIGEgcmVzb2x2ZWQgcHJvbWlzZSBpZiBvblJlamVjdGVkIGRvZXMgbm90IHRocm93LgogICAgICAgICAgICAgICAgICAgICRwLT5yZXNvbHZlKCRvblJlamVjdGVkKCRyZWFzb24pKTsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgICAgICAgICAvLyBvblJlamVjdGVkIHRocmV3LCBzbyByZXR1cm4gYSByZWplY3RlZCBwcm9taXNlLgogICAgICAgICAgICAgICAgICAgICRwLT5yZWplY3QoJGUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiAkcDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gb3RoZXJ3aXNlKGNhbGxhYmxlICRvblJlamVjdGVkKTogUHJvbWlzZUludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dGhlbihudWxsLCAkb25SZWplY3RlZCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdhaXQoYm9vbCAkdW53cmFwID0gdHJ1ZSkKICAgIHsKICAgICAgICBpZiAoJHVud3JhcCkgewogICAgICAgICAgICB0aHJvdyBDcmVhdGU6OmV4Y2VwdGlvbkZvcigkdGhpcy0+cmVhc29uKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdGF0ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6UkVKRUNURUQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlc29sdmUoJHZhbHVlKTogdm9pZAogICAgewogICAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ0Nhbm5vdCByZXNvbHZlIGEgcmVqZWN0ZWQgcHJvbWlzZScpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZWplY3QoJHJlYXNvbik6IHZvaWQKICAgIHsKICAgICAgICBpZiAoJHJlYXNvbiAhPT0gJHRoaXMtPnJlYXNvbikgewogICAgICAgICAgICB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdDYW5ub3QgcmVqZWN0IGEgcmVqZWN0ZWQgcHJvbWlzZScpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY2FuY2VsKCk6IHZvaWQKICAgIHsKICAgICAgICAvLyBwYXNzCiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/RejectionException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBBIHNwZWNpYWwgZXhjZXB0aW9uIHRoYXQgaXMgdGhyb3duIHdoZW4gd2FpdGluZyBvbiBhIHJlamVjdGVkIHByb21pc2UuCiAqCiAqIFRoZSByZWFzb24gdmFsdWUgaXMgYXZhaWxhYmxlIHZpYSB0aGUgZ2V0UmVhc29uKCkgbWV0aG9kLgogKi8KY2xhc3MgUmVqZWN0aW9uRXhjZXB0aW9uIGV4dGVuZHMgXFJ1bnRpbWVFeGNlcHRpb24KewogICAgLyoqIEB2YXIgbWl4ZWQgUmVqZWN0aW9uIHJlYXNvbi4gKi8KICAgIHByaXZhdGUgJHJlYXNvbjsKCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAgICAgICAkcmVhc29uICAgICAgUmVqZWN0aW9uIHJlYXNvbi4KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkZGVzY3JpcHRpb24gT3B0aW9uYWwgZGVzY3JpcHRpb24uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkcmVhc29uLCA/c3RyaW5nICRkZXNjcmlwdGlvbiA9IG51bGwpCiAgICB7CiAgICAgICAgJHRoaXMtPnJlYXNvbiA9ICRyZWFzb247CgogICAgICAgICRtZXNzYWdlID0gJ1RoZSBwcm9taXNlIHdhcyByZWplY3RlZCc7CgogICAgICAgIGlmICgkZGVzY3JpcHRpb24pIHsKICAgICAgICAgICAgJG1lc3NhZ2UgLj0gJyB3aXRoIHJlYXNvbjogJy4kZGVzY3JpcHRpb247CiAgICAgICAgfSBlbHNlaWYgKGlzX3N0cmluZygkcmVhc29uKQogICAgICAgICAgICB8fCAoaXNfb2JqZWN0KCRyZWFzb24pICYmIG1ldGhvZF9leGlzdHMoJHJlYXNvbiwgJ19fdG9TdHJpbmcnKSkKICAgICAgICApIHsKICAgICAgICAgICAgJG1lc3NhZ2UgLj0gJyB3aXRoIHJlYXNvbjogJy4kdGhpcy0+cmVhc29uOwogICAgICAgIH0gZWxzZWlmICgkcmVhc29uIGluc3RhbmNlb2YgXEpzb25TZXJpYWxpemFibGUpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgLj0gJyB3aXRoIHJlYXNvbjogJy5qc29uX2VuY29kZSgkdGhpcy0+cmVhc29uLCBKU09OX1BSRVRUWV9QUklOVCk7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRtZXNzYWdlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHJlamVjdGlvbiByZWFzb24uCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVhc29uKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlYXNvbjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/TaskQueue.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBBIHRhc2sgcXVldWUgdGhhdCBleGVjdXRlcyB0YXNrcyBpbiBhIEZJRk8gb3JkZXIuCiAqCiAqIFRoaXMgdGFzayBxdWV1ZSBjbGFzcyBpcyB1c2VkIHRvIHNldHRsZSBwcm9taXNlcyBhc3luY2hyb25vdXNseSBhbmQKICogbWFpbnRhaW5zIGEgY29uc3RhbnQgc3RhY2sgc2l6ZS4gWW91IGNhbiB1c2UgdGhlIHRhc2sgcXVldWUgYXN5bmNocm9ub3VzbHkKICogYnkgY2FsbGluZyB0aGUgYHJ1bigpYCBmdW5jdGlvbiBvZiB0aGUgZ2xvYmFsIHRhc2sgcXVldWUgaW4gYW4gZXZlbnQgbG9vcC4KICoKICogICAgIEd1enpsZUh0dHBcUHJvbWlzZVxVdGlsczo6cXVldWUoKS0+cnVuKCk7CiAqCiAqIEBmaW5hbAogKi8KY2xhc3MgVGFza1F1ZXVlIGltcGxlbWVudHMgVGFza1F1ZXVlSW50ZXJmYWNlCnsKICAgIHByaXZhdGUgJGVuYWJsZVNodXRkb3duID0gdHJ1ZTsKICAgIHByaXZhdGUgJHF1ZXVlID0gW107CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGJvb2wgJHdpdGhTaHV0ZG93biA9IHRydWUpCiAgICB7CiAgICAgICAgaWYgKCR3aXRoU2h1dGRvd24pIHsKICAgICAgICAgICAgcmVnaXN0ZXJfc2h1dGRvd25fZnVuY3Rpb24oZnVuY3Rpb24gKCk6IHZvaWQgewogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5lbmFibGVTaHV0ZG93bikgewogICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgcnVuIHRoZSB0YXNrcyBpZiBhbiBFX0VSUk9SIGRpZG4ndCBvY2N1ci4KICAgICAgICAgICAgICAgICAgICAkZXJyID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICAgICAgICAgICAgICBpZiAoISRlcnIgfHwgKCRlcnJbJ3R5cGUnXSBeIEVfRVJST1IpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5ydW4oKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNFbXB0eSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICEkdGhpcy0+cXVldWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFkZChjYWxsYWJsZSAkdGFzayk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+cXVldWVbXSA9ICR0YXNrOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBydW4oKTogdm9pZAogICAgewogICAgICAgIHdoaWxlICgkdGFzayA9IGFycmF5X3NoaWZ0KCR0aGlzLT5xdWV1ZSkpIHsKICAgICAgICAgICAgLyoqIEB2YXIgY2FsbGFibGUgJHRhc2sgKi8KICAgICAgICAgICAgJHRhc2soKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGUgdGFzayBxdWV1ZSB3aWxsIGJlIHJ1biBhbmQgZXhoYXVzdGVkIGJ5IGRlZmF1bHQgd2hlbiB0aGUgcHJvY2VzcwogICAgICogZXhpdHMgSUZGIHRoZSBleGl0IGlzIG5vdCB0aGUgcmVzdWx0IG9mIGEgUEhQIEVfRVJST1IgZXJyb3IuCiAgICAgKgogICAgICogWW91IGNhbiBkaXNhYmxlIHJ1bm5pbmcgdGhlIGF1dG9tYXRpYyBzaHV0ZG93biBvZiB0aGUgcXVldWUgYnkgY2FsbGluZwogICAgICogdGhpcyBmdW5jdGlvbi4gSWYgeW91IGRpc2FibGUgdGhlIHRhc2sgcXVldWUgc2h1dGRvd24gcHJvY2VzcywgdGhlbiB5b3UKICAgICAqIE1VU1QgZWl0aGVyIHJ1biB0aGUgdGFzayBxdWV1ZSAoYXMgYSByZXN1bHQgb2YgcnVubmluZyB5b3VyIGV2ZW50IGxvb3AKICAgICAqIG9yIG1hbnVhbGx5IHVzaW5nIHRoZSBydW4oKSBtZXRob2QpIG9yIHdhaXQgb24gZWFjaCBvdXRzdGFuZGluZyBwcm9taXNlLgogICAgICoKICAgICAqIE5vdGU6IFRoaXMgc2h1dGRvd24gd2lsbCBvY2N1ciBiZWZvcmUgYW55IGRlc3RydWN0b3JzIGFyZSB0cmlnZ2VyZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaXNhYmxlU2h1dGRvd24oKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5lbmFibGVTaHV0ZG93biA9IGZhbHNlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/TaskQueueInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCmludGVyZmFjZSBUYXNrUXVldWVJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHF1ZXVlIGlzIGVtcHR5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNFbXB0eSgpOiBib29sOwoKICAgIC8qKgogICAgICogQWRkcyBhIHRhc2sgdG8gdGhlIHF1ZXVlIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB0aGUgbmV4dCB0aW1lIHJ1biBpcwogICAgICogY2FsbGVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKGNhbGxhYmxlICR0YXNrKTogdm9pZDsKCiAgICAvKioKICAgICAqIEV4ZWN1dGUgYWxsIG9mIHRoZSBwZW5kaW5nIHRhc2sgaW4gdGhlIHF1ZXVlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcnVuKCk6IHZvaWQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/Utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCmZpbmFsIGNsYXNzIFV0aWxzCnsKICAgIC8qKgogICAgICogR2V0IHRoZSBnbG9iYWwgdGFzayBxdWV1ZSB1c2VkIGZvciBwcm9taXNlIHJlc29sdXRpb24uCiAgICAgKgogICAgICogVGhpcyB0YXNrIHF1ZXVlIE1VU1QgYmUgcnVuIGluIGFuIGV2ZW50IGxvb3AgaW4gb3JkZXIgZm9yIHByb21pc2VzIHRvIGJlCiAgICAgKiBzZXR0bGVkIGFzeW5jaHJvbm91c2x5LiBJdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcnVuIHdoZW4gc3luY2hyb25vdXNseQogICAgICogd2FpdGluZyBvbiBhIHByb21pc2UuCiAgICAgKgogICAgICogPGNvZGU+CiAgICAgKiB3aGlsZSAoJGV2ZW50TG9vcC0+aXNSdW5uaW5nKCkpIHsKICAgICAqICAgICBHdXp6bGVIdHRwXFByb21pc2VcVXRpbHM6OnF1ZXVlKCktPnJ1bigpOwogICAgICogfQogICAgICogPC9jb2RlPgogICAgICoKICAgICAqIEBwYXJhbSBUYXNrUXVldWVJbnRlcmZhY2V8bnVsbCAkYXNzaWduIE9wdGlvbmFsbHkgc3BlY2lmeSBhIG5ldyBxdWV1ZSBpbnN0YW5jZS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBxdWV1ZSg/VGFza1F1ZXVlSW50ZXJmYWNlICRhc3NpZ24gPSBudWxsKTogVGFza1F1ZXVlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgc3RhdGljICRxdWV1ZTsKCiAgICAgICAgaWYgKCRhc3NpZ24pIHsKICAgICAgICAgICAgJHF1ZXVlID0gJGFzc2lnbjsKICAgICAgICB9IGVsc2VpZiAoISRxdWV1ZSkgewogICAgICAgICAgICAkcXVldWUgPSBuZXcgVGFza1F1ZXVlKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHF1ZXVlOwogICAgfQoKICAgIC8qKgogICAgICogQWRkcyBhIGZ1bmN0aW9uIHRvIHJ1biBpbiB0aGUgdGFzayBxdWV1ZSB3aGVuIGl0IGlzIG5leHQgYHJ1bigpYCBhbmQKICAgICAqIHJldHVybnMgYSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIG9yIHJlamVjdGVkIHdpdGggdGhlIHJlc3VsdC4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJHRhc2sgVGFzayBmdW5jdGlvbiB0byBydW4uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdGFzayhjYWxsYWJsZSAkdGFzayk6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICAkcXVldWUgPSBzZWxmOjpxdWV1ZSgpOwogICAgICAgICRwcm9taXNlID0gbmV3IFByb21pc2UoWyRxdWV1ZSwgJ3J1biddKTsKICAgICAgICAkcXVldWUtPmFkZChmdW5jdGlvbiAoKSB1c2UgKCR0YXNrLCAkcHJvbWlzZSk6IHZvaWQgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgaWYgKElzOjpwZW5kaW5nKCRwcm9taXNlKSkgewogICAgICAgICAgICAgICAgICAgICRwcm9taXNlLT5yZXNvbHZlKCR0YXNrKCkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGNhdGNoIChcVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgICAgICAkcHJvbWlzZS0+cmVqZWN0KCRlKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gJHByb21pc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBTeW5jaHJvbm91c2x5IHdhaXRzIG9uIGEgcHJvbWlzZSB0byByZXNvbHZlIGFuZCByZXR1cm5zIGFuIGluc3BlY3Rpb24KICAgICAqIHN0YXRlIGFycmF5LgogICAgICoKICAgICAqIFJldHVybnMgYSBzdGF0ZSBhc3NvY2lhdGl2ZSBhcnJheSBjb250YWluaW5nIGEgInN0YXRlIiBrZXkgbWFwcGluZyB0byBhCiAgICAgKiB2YWxpZCBwcm9taXNlIHN0YXRlLiBJZiB0aGUgc3RhdGUgb2YgdGhlIHByb21pc2UgaXMgImZ1bGZpbGxlZCIsIHRoZQogICAgICogYXJyYXkgd2lsbCBjb250YWluIGEgInZhbHVlIiBrZXkgbWFwcGluZyB0byB0aGUgZnVsZmlsbGVkIHZhbHVlIG9mIHRoZQogICAgICogcHJvbWlzZS4gSWYgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQsIHRoZSBhcnJheSB3aWxsIGNvbnRhaW4gYSAicmVhc29uIgogICAgICoga2V5IG1hcHBpbmcgdG8gdGhlIHJlamVjdGlvbiByZWFzb24gb2YgdGhlIHByb21pc2UuCiAgICAgKgogICAgICogQHBhcmFtIFByb21pc2VJbnRlcmZhY2UgJHByb21pc2UgUHJvbWlzZSBvciB2YWx1ZS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpbnNwZWN0KFByb21pc2VJbnRlcmZhY2UgJHByb21pc2UpOiBhcnJheQogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgICAnc3RhdGUnID0+IFByb21pc2VJbnRlcmZhY2U6OkZVTEZJTExFRCwKICAgICAgICAgICAgICAgICd2YWx1ZScgPT4gJHByb21pc2UtPndhaXQoKSwKICAgICAgICAgICAgXTsKICAgICAgICB9IGNhdGNoIChSZWplY3Rpb25FeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgcmV0dXJuIFsnc3RhdGUnID0+IFByb21pc2VJbnRlcmZhY2U6OlJFSkVDVEVELCAncmVhc29uJyA9PiAkZS0+Z2V0UmVhc29uKCldOwogICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgcmV0dXJuIFsnc3RhdGUnID0+IFByb21pc2VJbnRlcmZhY2U6OlJFSkVDVEVELCAncmVhc29uJyA9PiAkZV07CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogV2FpdHMgb24gYWxsIG9mIHRoZSBwcm92aWRlZCBwcm9taXNlcywgYnV0IGRvZXMgbm90IHVud3JhcCByZWplY3RlZAogICAgICogcHJvbWlzZXMgYXMgdGhyb3duIGV4Y2VwdGlvbi4KICAgICAqCiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGluc3BlY3Rpb24gc3RhdGUgYXJyYXlzLgogICAgICoKICAgICAqIEBzZWUgaW5zcGVjdCBmb3IgdGhlIGluc3BlY3Rpb24gc3RhdGUgYXJyYXkgZm9ybWF0LgogICAgICoKICAgICAqIEBwYXJhbSBQcm9taXNlSW50ZXJmYWNlW10gJHByb21pc2VzIFRyYXZlcnNhYmxlIG9mIHByb21pc2VzIHRvIHdhaXQgdXBvbi4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpbnNwZWN0QWxsKCRwcm9taXNlcyk6IGFycmF5CiAgICB7CiAgICAgICAgJHJlc3VsdHMgPSBbXTsKICAgICAgICBmb3JlYWNoICgkcHJvbWlzZXMgYXMgJGtleSA9PiAkcHJvbWlzZSkgewogICAgICAgICAgICAkcmVzdWx0c1ska2V5XSA9IHNlbGY6Omluc3BlY3QoJHByb21pc2UpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHRzOwogICAgfQoKICAgIC8qKgogICAgICogV2FpdHMgb24gYWxsIG9mIHRoZSBwcm92aWRlZCBwcm9taXNlcyBhbmQgcmV0dXJucyB0aGUgZnVsZmlsbGVkIHZhbHVlcy4KICAgICAqCiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IHRoYXQgY29udGFpbnMgdGhlIHZhbHVlIG9mIGVhY2ggcHJvbWlzZSAoaW4gdGhlIHNhbWUKICAgICAqIG9yZGVyIHRoZSBwcm9taXNlcyB3ZXJlIHByb3ZpZGVkKS4gQW4gZXhjZXB0aW9uIGlzIHRocm93biBpZiBhbnkgb2YgdGhlCiAgICAgKiBwcm9taXNlcyBhcmUgcmVqZWN0ZWQuCiAgICAgKgogICAgICogQHBhcmFtIGl0ZXJhYmxlPFByb21pc2VJbnRlcmZhY2U+ICRwcm9taXNlcyBJdGVyYWJsZSBvZiBQcm9taXNlSW50ZXJmYWNlIG9iamVjdHMgdG8gd2FpdCBvbi4KICAgICAqCiAgICAgKiBAdGhyb3dzIFxUaHJvd2FibGUgb24gZXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1bndyYXAoJHByb21pc2VzKTogYXJyYXkKICAgIHsKICAgICAgICAkcmVzdWx0cyA9IFtdOwogICAgICAgIGZvcmVhY2ggKCRwcm9taXNlcyBhcyAka2V5ID0+ICRwcm9taXNlKSB7CiAgICAgICAgICAgICRyZXN1bHRzWyRrZXldID0gJHByb21pc2UtPndhaXQoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0czsKICAgIH0KCiAgICAvKioKICAgICAqIEdpdmVuIGFuIGFycmF5IG9mIHByb21pc2VzLCByZXR1cm4gYSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdoZW4gYWxsCiAgICAgKiB0aGUgaXRlbXMgaW4gdGhlIGFycmF5IGFyZSBmdWxmaWxsZWQuCiAgICAgKgogICAgICogVGhlIHByb21pc2UncyBmdWxmaWxsbWVudCB2YWx1ZSBpcyBhbiBhcnJheSB3aXRoIGZ1bGZpbGxtZW50IHZhbHVlcyBhdAogICAgICogcmVzcGVjdGl2ZSBwb3NpdGlvbnMgdG8gdGhlIG9yaWdpbmFsIGFycmF5LiBJZiBhbnkgcHJvbWlzZSBpbiB0aGUgYXJyYXkKICAgICAqIHJlamVjdHMsIHRoZSByZXR1cm5lZCBwcm9taXNlIGlzIHJlamVjdGVkIHdpdGggdGhlIHJlamVjdGlvbiByZWFzb24uCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRwcm9taXNlcyAgUHJvbWlzZXMgb3IgdmFsdWVzLgogICAgICogQHBhcmFtIGJvb2wgICRyZWN1cnNpdmUgSWYgdHJ1ZSwgcmVzb2x2ZXMgbmV3IHByb21pc2VzIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBzdGFjayBkdXJpbmcgaXRzIG93biByZXNvbHV0aW9uLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFsbCgkcHJvbWlzZXMsIGJvb2wgJHJlY3Vyc2l2ZSA9IGZhbHNlKTogUHJvbWlzZUludGVyZmFjZQogICAgewogICAgICAgICRyZXN1bHRzID0gW107CiAgICAgICAgJHByb21pc2UgPSBFYWNoOjpvZigKICAgICAgICAgICAgJHByb21pc2VzLAogICAgICAgICAgICBmdW5jdGlvbiAoJHZhbHVlLCAkaWR4KSB1c2UgKCYkcmVzdWx0cyk6IHZvaWQgewogICAgICAgICAgICAgICAgJHJlc3VsdHNbJGlkeF0gPSAkdmFsdWU7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGZ1bmN0aW9uICgkcmVhc29uLCAkaWR4LCBQcm9taXNlICRhZ2dyZWdhdGUpOiB2b2lkIHsKICAgICAgICAgICAgICAgIGlmIChJczo6cGVuZGluZygkYWdncmVnYXRlKSkgewogICAgICAgICAgICAgICAgICAgICRhZ2dyZWdhdGUtPnJlamVjdCgkcmVhc29uKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICktPnRoZW4oZnVuY3Rpb24gKCkgdXNlICgmJHJlc3VsdHMpIHsKICAgICAgICAgICAga3NvcnQoJHJlc3VsdHMpOwoKICAgICAgICAgICAgcmV0dXJuICRyZXN1bHRzOwogICAgICAgIH0pOwoKICAgICAgICBpZiAodHJ1ZSA9PT0gJHJlY3Vyc2l2ZSkgewogICAgICAgICAgICAkcHJvbWlzZSA9ICRwcm9taXNlLT50aGVuKGZ1bmN0aW9uICgkcmVzdWx0cykgdXNlICgkcmVjdXJzaXZlLCAmJHByb21pc2VzKSB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkcHJvbWlzZXMgYXMgJHByb21pc2UpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoSXM6OnBlbmRpbmcoJHByb21pc2UpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmOjphbGwoJHByb21pc2VzLCAkcmVjdXJzaXZlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuICRyZXN1bHRzOwogICAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcHJvbWlzZTsKICAgIH0KCiAgICAvKioKICAgICAqIEluaXRpYXRlIGEgY29tcGV0aXRpdmUgcmFjZSBiZXR3ZWVuIG11bHRpcGxlIHByb21pc2VzIG9yIHZhbHVlcyAodmFsdWVzCiAgICAgKiB3aWxsIGJlY29tZSBpbW1lZGlhdGVseSBmdWxmaWxsZWQgcHJvbWlzZXMpLgogICAgICoKICAgICAqIFdoZW4gY291bnQgYW1vdW50IG9mIHByb21pc2VzIGhhdmUgYmVlbiBmdWxmaWxsZWQsIHRoZSByZXR1cm5lZCBwcm9taXNlCiAgICAgKiBpcyBmdWxmaWxsZWQgd2l0aCBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSBmdWxmaWxsbWVudCB2YWx1ZXMgb2YgdGhlCiAgICAgKiB3aW5uZXJzIGluIG9yZGVyIG9mIHJlc29sdXRpb24uCiAgICAgKgogICAgICogVGhpcyBwcm9taXNlIGlzIHJlamVjdGVkIHdpdGggYSB7QHNlZSBBZ2dyZWdhdGVFeGNlcHRpb259IGlmIHRoZSBudW1iZXIKICAgICAqIG9mIGZ1bGZpbGxlZCBwcm9taXNlcyBpcyBsZXNzIHRoYW4gdGhlIGRlc2lyZWQgJGNvdW50LgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgICAkY291bnQgICAgVG90YWwgbnVtYmVyIG9mIHByb21pc2VzLgogICAgICogQHBhcmFtIG1peGVkICRwcm9taXNlcyBQcm9taXNlcyBvciB2YWx1ZXMuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc29tZShpbnQgJGNvdW50LCAkcHJvbWlzZXMpOiBQcm9taXNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJHJlc3VsdHMgPSBbXTsKICAgICAgICAkcmVqZWN0aW9ucyA9IFtdOwoKICAgICAgICByZXR1cm4gRWFjaDo6b2YoCiAgICAgICAgICAgICRwcm9taXNlcywKICAgICAgICAgICAgZnVuY3Rpb24gKCR2YWx1ZSwgJGlkeCwgUHJvbWlzZUludGVyZmFjZSAkcCkgdXNlICgmJHJlc3VsdHMsICRjb3VudCk6IHZvaWQgewogICAgICAgICAgICAgICAgaWYgKElzOjpzZXR0bGVkKCRwKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRyZXN1bHRzWyRpZHhdID0gJHZhbHVlOwogICAgICAgICAgICAgICAgaWYgKGNvdW50KCRyZXN1bHRzKSA+PSAkY291bnQpIHsKICAgICAgICAgICAgICAgICAgICAkcC0+cmVzb2x2ZShudWxsKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgZnVuY3Rpb24gKCRyZWFzb24pIHVzZSAoJiRyZWplY3Rpb25zKTogdm9pZCB7CiAgICAgICAgICAgICAgICAkcmVqZWN0aW9uc1tdID0gJHJlYXNvbjsKICAgICAgICAgICAgfQogICAgICAgICktPnRoZW4oCiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHVzZSAoJiRyZXN1bHRzLCAmJHJlamVjdGlvbnMsICRjb3VudCkgewogICAgICAgICAgICAgICAgaWYgKGNvdW50KCRyZXN1bHRzKSAhPT0gJGNvdW50KSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFnZ3JlZ2F0ZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgJ05vdCBlbm91Z2ggcHJvbWlzZXMgdG8gZnVsZmlsbCBjb3VudCcsCiAgICAgICAgICAgICAgICAgICAgICAgICRyZWplY3Rpb25zCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGtzb3J0KCRyZXN1bHRzKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXlfdmFsdWVzKCRyZXN1bHRzKTsKICAgICAgICAgICAgfQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBMaWtlIHNvbWUoKSwgd2l0aCAxIGFzIGNvdW50LiBIb3dldmVyLCBpZiB0aGUgcHJvbWlzZSBmdWxmaWxscywgdGhlCiAgICAgKiBmdWxmaWxsbWVudCB2YWx1ZSBpcyBub3QgYW4gYXJyYXkgb2YgMSBidXQgdGhlIHZhbHVlIGRpcmVjdGx5LgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkcHJvbWlzZXMgUHJvbWlzZXMgb3IgdmFsdWVzLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFueSgkcHJvbWlzZXMpOiBQcm9taXNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OnNvbWUoMSwgJHByb21pc2VzKS0+dGhlbihmdW5jdGlvbiAoJHZhbHVlcykgewogICAgICAgICAgICByZXR1cm4gJHZhbHVlc1swXTsKICAgICAgICB9KTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdoZW4gYWxsIG9mIHRoZSBwcm92aWRlZCBwcm9taXNlcyBoYXZlCiAgICAgKiBiZWVuIGZ1bGZpbGxlZCBvciByZWplY3RlZC4KICAgICAqCiAgICAgKiBUaGUgcmV0dXJuZWQgcHJvbWlzZSBpcyBmdWxmaWxsZWQgd2l0aCBhbiBhcnJheSBvZiBpbnNwZWN0aW9uIHN0YXRlIGFycmF5cy4KICAgICAqCiAgICAgKiBAc2VlIGluc3BlY3QgZm9yIHRoZSBpbnNwZWN0aW9uIHN0YXRlIGFycmF5IGZvcm1hdC4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHByb21pc2VzIFByb21pc2VzIG9yIHZhbHVlcy4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXR0bGUoJHByb21pc2VzKTogUHJvbWlzZUludGVyZmFjZQogICAgewogICAgICAgICRyZXN1bHRzID0gW107CgogICAgICAgIHJldHVybiBFYWNoOjpvZigKICAgICAgICAgICAgJHByb21pc2VzLAogICAgICAgICAgICBmdW5jdGlvbiAoJHZhbHVlLCAkaWR4KSB1c2UgKCYkcmVzdWx0cyk6IHZvaWQgewogICAgICAgICAgICAgICAgJHJlc3VsdHNbJGlkeF0gPSBbJ3N0YXRlJyA9PiBQcm9taXNlSW50ZXJmYWNlOjpGVUxGSUxMRUQsICd2YWx1ZScgPT4gJHZhbHVlXTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZnVuY3Rpb24gKCRyZWFzb24sICRpZHgpIHVzZSAoJiRyZXN1bHRzKTogdm9pZCB7CiAgICAgICAgICAgICAgICAkcmVzdWx0c1skaWR4XSA9IFsnc3RhdGUnID0+IFByb21pc2VJbnRlcmZhY2U6OlJFSkVDVEVELCAncmVhc29uJyA9PiAkcmVhc29uXTsKICAgICAgICAgICAgfQogICAgICAgICktPnRoZW4oZnVuY3Rpb24gKCkgdXNlICgmJHJlc3VsdHMpIHsKICAgICAgICAgICAga3NvcnQoJHJlc3VsdHMpOwoKICAgICAgICAgICAgcmV0dXJuICRyZXN1bHRzOwogICAgICAgIH0pOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/CHANGELOG.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBDaGFuZ2UgTG9nCgpBbGwgbm90YWJsZSBjaGFuZ2VzIHRvIHRoaXMgcHJvamVjdCB3aWxsIGJlIGRvY3VtZW50ZWQgaW4gdGhpcyBmaWxlLgoKVGhlIGZvcm1hdCBpcyBiYXNlZCBvbiBbS2VlcCBhIENoYW5nZWxvZ10oaHR0cHM6Ly9rZWVwYWNoYW5nZWxvZy5jb20vZW4vMS4wLjAvKQphbmQgdGhpcyBwcm9qZWN0IGFkaGVyZXMgdG8gW1NlbWFudGljIFZlcnNpb25pbmddKGh0dHBzOi8vc2VtdmVyLm9yZy9zcGVjL3YyLjAuMC5odG1sKS4KCiMjIDIuOS4wIC0gMjAyNi0wMy0xMAoKIyMjIEFkZGVkCgotIEFkZGVkIG5lc3RlZCBhcnJheSBleHBhbnNpb24gc3VwcG9ydCB0byBgTXVsdGlwYXJ0U3RyZWFtYAotIEFkZGVkIGBAcmV0dXJuIHN0YXRpY2AgdG8gYE1lc3NhZ2VUcmFpdGAgbWV0aG9kcwoKIyMjIENoYW5nZWQKCi0gVXBkYXRlZCBNSU1FIHR5cGUgbWFwcGluZ3MKCiMjIDIuOC4xIC0gMjAyNi0wMy0xMAoKIyMjIEZpeGVkCgotIEVuY29kZSBgK2Agc2lnbnMgaW4gYFVyaTo6d2l0aFF1ZXJ5VmFsdWUoKWAgYW5kIGBVcmk6OndpdGhRdWVyeVZhbHVlcygpYCB0byBwcmV2ZW50IHRoZW0gYmVpbmcgaW50ZXJwcmV0ZWQgYXMgc3BhY2VzCgojIyAyLjguMCAtIDIwMjUtMDgtMjMKCiMjIyBBZGRlZAoKLSBBbGxvdyBlbXB0eSBsaXN0cyBhcyBoZWFkZXIgdmFsdWVzCgojIyMgQ2hhbmdlZAoKLSBQSFAgOC41IHN1cHBvcnQKCiMjIDIuNy4xIC0gMjAyNS0wMy0yNwoKIyMjIEZpeGVkCgotIEZpeGVkIHVwcGVyY2FzZSBJUHY2IGFkZHJlc3NlcyBpbiBVUkkKCiMjIyBDaGFuZ2VkCgotIEltcHJvdmUgdXBsb2FkZWQgZmlsZSBlcnJvciBtZXNzYWdlCgojIyAyLjcuMCAtIDIwMjQtMDctMTgKCiMjIyBBZGRlZAoKLSBBZGQgYFV0aWxzOjpyZWRhY3RVc2VySW5mbygpYCBtZXRob2QKLSBBZGQgYWJpbGl0eSB0byBlbmNvZGUgYm9vbHMgYXMgaW50cyBpbiBgUXVlcnk6OmJ1aWxkYAoKIyMgMi42LjMgLSAyMDI0LTA3LTE4CgojIyMgRml4ZWQKCi0gTWFrZSBgU3RyZWFtV3JhcHBlcjo6c3RyZWFtX3N0YXQoKWAgcmV0dXJuIGBmYWxzZWAgaWYgaW5uZXIgc3RyZWFtJ3Mgc2l6ZSBpcyBgbnVsbGAgCgojIyMgQ2hhbmdlZAoKLSBQSFAgOC40IHN1cHBvcnQKCiMjIDIuNi4yIC0gMjAyMy0xMi0wMwoKIyMjIEZpeGVkCgotIEZpeGVkIGFub3RoZXIgaXNzdWUgd2l0aCB0aGUgZmFjdCB0aGF0IFBIUCB0cmFuc2Zvcm1zIG51bWVyaWMgc3RyaW5ncyBpbiBhcnJheSBrZXlzIHRvIGludHMKCiMjIyBDaGFuZ2VkCgotIFVwZGF0ZWQgbGlua3MgaW4gZG9jcyB0byB0aGVpciBjYW5vbmljYWwgdmVyc2lvbnMKLSBSZXBsYWNlZCBgY2FsbF91c2VyX2Z1bmMqYCB3aXRoIG5hdGl2ZSBjYWxscwoKIyMgMi42LjEgLSAyMDIzLTA4LTI3CgojIyMgRml4ZWQKCi0gUHJvcGVybHkgaGFuZGxlIHRoZSBmYWN0IHRoYXQgUEhQIHRyYW5zZm9ybXMgbnVtZXJpYyBzdHJpbmdzIGluIGFycmF5IGtleXMgdG8gaW50cwoKIyMgMi42LjAgLSAyMDIzLTA4LTAzCgojIyMgQ2hhbmdlZAoKLSBVcGRhdGVkIHRoZSBtaW1lIHR5cGUgbWFwIHRvIGFkZCBzb21lIG5ldyBlbnRyaWVzLCBmaXggYSBjb3VwbGUgb2YgaW52YWxpZCBlbnRyaWVzLCBhbmQgcmVtb3ZlIGFuIGludmFsaWQgZW50cnkKLSBGYWxsYmFjayB0byBgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtYCBpZiB3ZSBhcmUgdW5hYmxlIHRvIGd1ZXNzIHRoZSBjb250ZW50IHR5cGUgZm9yIGEgbXVsdGlwYXJ0IGZpbGUgdXBsb2FkCgojIyAyLjUuMSAtIDIwMjMtMDgtMDMKCiMjIyBGaXhlZAoKLSBDb3JyZWN0ZWQgbWltZSB0eXBlIGZvciBgLmFjY2AgZmlsZXMgdG8gYGF1ZGlvL2FhY2AKCiMjIyBDaGFuZ2VkCgotIFBIUCA4LjMgc3VwcG9ydAoKIyMgMi41LjAgLSAyMDIzLTA0LTE3CgojIyMgQ2hhbmdlZAoKLSBBZGp1c3RlZCBgcHNyL2h0dHAtbWVzc2FnZWAgdmVyc2lvbiBjb25zdHJhaW50IHRvIGBeMS4xIHx8IF4yLjBgCgojIyAyLjQuNSAtIDIwMjMtMDQtMTcKCiMjIyBGaXhlZAoKLSBQcmV2ZW50IHBvc3NpYmxlIHdhcm5pbmdzIG9uIHVuc2V0IHZhcmlhYmxlcyBpbiBgU2VydmVyUmVxdWVzdDo6bm9ybWFsaXplTmVzdGVkRmlsZVNwZWNgCi0gRml4ZWQgYE1lc3NhZ2U6OmJvZHlTdW1tYXJ5YCB3aGVuIGBwcmVnX21hdGNoYCBmYWlscwotIEZpeGVkIGhlYWRlciB2YWxpZGF0aW9uIGlzc3VlCgojIyAyLjQuNCAtIDIwMjMtMDMtMDkKCiMjIyBDaGFuZ2VkCgotIFJlbW92ZWQgdGhlIG5lZWQgZm9yIGBBbGxvd0R5bmFtaWNQcm9wZXJ0aWVzYCBpbiBgTGF6eU9wZW5TdHJlYW1gCgojIyAyLjQuMyAtIDIwMjItMTAtMjYKCiMjIyBDaGFuZ2VkCgotIFJlcGxhY2VkIGBzaGExKHVuaXFpZCgpKWAgYnkgYGJpbjJoZXgocmFuZG9tX2J5dGVzKDIwKSlgCgojIyAyLjQuMiAtIDIwMjItMTAtMjUKCiMjIyBGaXhlZAoKLSBGaXhlZCBlcnJvbmVvdXMgYmVoYXZpb3VyIHdoZW4gY29tYmluaW5nIGhvc3QgYW5kIHJlbGF0aXZlIHBhdGgKCiMjIDIuNC4xIC0gMjAyMi0wOC0yOAoKIyMjIEZpeGVkCgotIFJld2luZCBib2R5IGJlZm9yZSByZWFkaW5nIGluIGBNZXNzYWdlOjpib2R5U3VtbWFyeWAKCiMjIDIuNC4wIC0gMjAyMi0wNi0yMAoKIyMjIEFkZGVkCgotIEFkZGVkIHByb3Zpc2lvbmFsIFBIUCA4LjIgc3VwcG9ydAotIEFkZGVkIGBVcmlDb21wYXJhdG9yOjppc0Nyb3NzT3JpZ2luYCBtZXRob2QKCiMjIDIuMy4wIC0gMjAyMi0wNi0wOQoKIyMjIEZpeGVkCgotIEFkZGVkIGBIZWFkZXI6OnNwbGl0TGlzdGAgbWV0aG9kCi0gQWRkZWQgYFV0aWxzOjp0cnlHZXRDb250ZW50c2AgbWV0aG9kCi0gSW1wcm92ZWQgYFN0cmVhbTo6Z2V0Q29udGVudHNgIG1ldGhvZAotIFVwZGF0ZWQgbWltZXR5cGUgbWFwcGluZ3MKCiMjIDIuMi4yIC0gMjAyMi0wNi0wOAoKIyMjIEZpeGVkCgotIEZpeCBgTWVzc2FnZTo6cGFyc2VSZXF1ZXN0VXJpYCBmb3IgbnVtZXJpYyBoZWFkZXJzCi0gUmUtd3JhcCBleGNlcHRpb25zIHRocm93biBpbiBgZnJlYWRgIGludG8gcnVudGltZSBleGNlcHRpb25zCi0gVGhyb3cgYW4gZXhjZXB0aW9uIHdoZW4gbXVsdGlwYXJ0IG9wdGlvbnMgaXMgbWlzZm9ybWF0dGVkCgojIyAyLjIuMSAtIDIwMjItMDMtMjAKCiMjIyBGaXhlZAoKLSBDb3JyZWN0IGhlYWRlciB2YWx1ZSB2YWxpZGF0aW9uCgojIyAyLjIuMCAtIDIwMjItMDMtMjAKCiMjIyBBZGRlZAoKLSBBIG1vcmUgY29tcHJlc3NpdmUgbGlzdCBvZiBtaW1lIHR5cGVzCi0gQWRkIEpzb25TZXJpYWxpemFibGUgdG8gVXJpCi0gTWlzc2luZyByZXR1cm4gdHlwZXMKCiMjIyBGaXhlZAoKLSBCdWcgTXVsdGlwYXJ0U3RyZWFtIG5vIGB1cmlgIG1ldGFkYXRhCi0gQnVnIE11bHRpcGFydFN0cmVhbSB3aXRoIGZpbGVuYW1lIGZvciBgZGF0YTovL2Agc3RyZWFtcwotIEZpeGVkIG5ldyBsaW5lIGhhbmRsaW5nIGluIE11bHRpcGFydFN0cmVhbQotIFJlZHVjZWQgUkFNIHVzYWdlIHdoZW4gY29weWluZyBzdHJlYW1zCi0gVXBkYXRlZCBwYXJzaW5nIGluIGBIZWFkZXI6Om5vcm1hbGl6ZSgpYAoKIyMgMi4xLjEgLSAyMDIyLTAzLTIwCgojIyMgRml4ZWQKCi0gVmFsaWRhdGUgaGVhZGVyIHZhbHVlcyBwcm9wZXJseQoKIyMgMi4xLjAgLSAyMDIxLTEwLTA2CgojIyMgQ2hhbmdlZAoKLSBBdHRlbXB0aW5nIHRvIGNyZWF0ZSBhIGBVcmlgIG9iamVjdCBmcm9tIGEgbWFsZm9ybWVkIFVSSSB3aWxsIG5vIGxvbmdlciB0aHJvdyBhIGdlbmVyaWMKICBgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uYCwgYnV0IHJhdGhlciBhIGBNYWxmb3JtZWRVcmlFeGNlcHRpb25gLCB3aGljaCBpbmhlcml0cyBmcm9tIHRoZSBmb3JtZXIKICBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIENhbGxlcnMgcmVseWluZyBvbiB0aGUgZXhjZXB0aW9uIGJlaW5nIHRocm93biB0byBkZXRlY3QgaW52YWxpZAogIFVSSXMgc2hvdWxkIGNhdGNoIHRoZSBuZXcgZXhjZXB0aW9uLgoKIyMjIEZpeGVkCgotIFJldHVybiBgbnVsbGAgaW4gY2FjaGluZyBzdHJlYW0gc2l6ZSBpZiByZW1vdGUgc2l6ZSBpcyBgbnVsbGAKCiMjIDIuMC4wIC0gMjAyMS0wNi0zMAoKSWRlbnRpY2FsIHRvIHRoZSBSQyByZWxlYXNlLgoKIyMgMi4wLjBAUkMtMSAtIDIwMjEtMDQtMjkKCiMjIyBGaXhlZAoKLSBIYW5kbGUgcG9zc2libHkgdW5zZXQgYHVybGAgaW4gYHN0cmVhbV9nZXRfbWV0YV9kYXRhYAoKIyMgMi4wLjBAYmV0YS0xIC0gMjAyMS0wMy0yMQoKIyMjIEFkZGVkCgotIFBTUi0xNyBmYWN0b3JpZXMKLSBNYWRlIGNsYXNzZXMgZmluYWwKLSBQSFA3IHR5cGUgaGludHMKCiMjIyBDaGFuZ2VkCgotIFdoZW4gYnVpbGRpbmcgYSBxdWVyeSBzdHJpbmcsIGJvb2xlYW5zIGFyZSByZXByZXNlbnRlZCBhcyAxIGFuZCAwLgoKIyMjIFJlbW92ZWQKCi0gUEhQIDwgNy4yIHN1cHBvcnQKLSBBbGwgZnVuY3Rpb25zIGluIHRoZSBgR3V6emxlSHR0cFxQc3I3YCBuYW1lc3BhY2UKCiMjIDEuOC4xIC0gMjAyMS0wMy0yMQoKIyMjIEZpeGVkCgotIElzc3VlIHBhcnNpbmcgSVB2NiBVUkxzCi0gSXNzdWUgbW9kaWZ5aW5nIFNlcnZlclJlcXVlc3QgbG9zdCBhbGwgaXRzIGF0dHJpYnV0ZXMKCiMjIDEuOC4wIC0gMjAyMS0wMy0yMQoKIyMjIEFkZGVkCgotIExvY2FsZSBpbmRlcGVuZGVudCBVUkwgcGFyc2luZwotIE1vc3QgY2xhc3NlcyBnb3QgYSBgQGZpbmFsYCBhbm5vdGF0aW9uIHRvIHByZXBhcmUgZm9yIDIuMAoKIyMjIEZpeGVkCgotIElzc3VlIHdoZW4gY3JlYXRpbmcgc3RyZWFtIGZyb20gYHBocDovL2lucHV0YCBhbmQgY3VybC1leHQgaXMgbm90IGluc3RhbGxlZAotIEJyb2tlbiBgVXRpbHM6OnRyeUZvcGVuKClgIG9uIFBIUCA4CgojIyAxLjcuMCAtIDIwMjAtMDktMzAKCiMjIyBBZGRlZAoKLSBSZXBsYWNlZCBmdW5jdGlvbnMgYnkgc3RhdGljIG1ldGhvZHMKCiMjIyBGaXhlZAoKLSBDb252ZXJ0aW5nIGEgbm9uLXNlZWthYmxlIHN0cmVhbSB0byBhIHN0cmluZwotIEhhbmRsZSBtdWx0aXBsZSBTZXQtQ29va2llIGNvcnJlY3RseQotIElnbm9yZSBhcnJheSBrZXlzIGluIGhlYWRlciB2YWx1ZXMgd2hlbiBtZXJnaW5nCi0gQWxsb3cgbXVsdGlieXRlIGNoYXJhY3RlcnMgdG8gYmUgcGFyc2VkIGluIGBNZXNzYWdlOmJvZHlTdW1tYXJ5KClgCgojIyMgQ2hhbmdlZAoKLSBSZXN0b3JlZCBwYXJ0aWFsIEhIVk0gMyBzdXBwb3J0CgoKIyMgWzEuNi4xXSAtIDIwMTktMDctMDIKCiMjIyBGaXhlZAoKLSBBY2NlcHQgbnVsbCBhbmQgYm9vbCBoZWFkZXIgdmFsdWVzIGFnYWluCgoKIyMgWzEuNi4wXSAtIDIwMTktMDYtMzAKCiMjIyBBZGRlZAoKLSBBbGxvd2VkIHZlcnNpb24gYF4zLjBgIG9mIGByYWxvdXBoaWUvZ2V0YWxsaGVhZGVyc2AgZGVwZW5kZW5jeSAoIzI0NCkKLSBBZGRlZCBNSU1FIHR5cGUgZm9yIFdFQlAgaW1hZ2UgZm9ybWF0ICgjMjQ2KQotIEFkZGVkIG1vcmUgdmFsaWRhdGlvbiBvZiB2YWx1ZXMgYWNjb3JkaW5nIHRvIFBTUi03IGFuZCBSRkMgc3RhbmRhcmRzLCBlLmcuIHN0YXR1cyBjb2RlIHJhbmdlICgjMjUwLCAjMjcyKQoKIyMjIENoYW5nZWQKCi0gVGVzdHMgZG9uJ3QgcGFzcyB3aXRoIEhIVk0gNC4wLCBzbyBISFZNIHN1cHBvcnQgZ290IGRyb3BwZWQuIE90aGVyIGxpYnJhcmllcyBsaWtlIGNvbXBvc2VyIGhhdmUgZG9uZSB0aGUgc2FtZS4gKCMyNjIpCi0gQWNjZXB0IHBvcnQgbnVtYmVyIDAgdG8gYmUgdmFsaWQgKCMyNzApCgojIyMgRml4ZWQKCi0gRml4ZWQgc3Vic2VxdWVudCByZWFkcyBmcm9tIGBwaHA6Ly9pbnB1dGAgaW4gU2VydmVyUmVxdWVzdCAoIzI0NykKLSBGaXhlZCByZWFkYWJsZS93cml0YWJsZSBkZXRlY3Rpb24gZm9yIGNlcnRhaW4gc3RyZWFtIG1vZGVzICgjMjQ4KQotIEZpeGVkIGVuY29kaW5nIG9mIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgYHVzZXJJbmZvYCBjb21wb25lbnQgb2YgYW4gVVJJICgjMjUzKQoKCiMjIFsxLjUuMl0gLSAyMDE4LTEyLTA0CgojIyMgRml4ZWQKCi0gQ2hlY2sgYm9keSBzaXplIHdoZW4gZ2V0dGluZyB0aGUgbWVzc2FnZSBzdW1tYXJ5CgoKIyMgWzEuNS4xXSAtIDIwMTgtMTItMDQKCiMjIyBGaXhlZAoKLSBHZXQgdGhlIHN1bW1hcnkgb2YgYSBib2R5IG9ubHkgaWYgaXQgaXMgcmVhZGFibGUKCgojIyBbMS41LjBdIC0gMjAxOC0xMi0wMwoKIyMjIEFkZGVkCgotIFJlc3BvbnNlIGZpcnN0LWxpbmUgdG8gcmVzcG9uc2Ugc3RyaW5nIGV4Y2VwdGlvbiAoZml4ZXMgIzE0NSkKLSBBIHRlc3QgZm9yICMxMjkgYmVoYXZpb3IKLSBgZ2V0X21lc3NhZ2VfYm9keV9zdW1tYXJ5YCBmdW5jdGlvbiBpbiBvcmRlciB0byBnZXQgdGhlIG1lc3NhZ2Ugc3VtbWFyeQotIGAzZ3BgIGFuZCBgbWt2YCBtaW1lIHR5cGVzCgojIyMgQ2hhbmdlZAoKLSBDbGFyaWZ5IGV4Y2VwdGlvbiBtZXNzYWdlIHdoZW4gc3RyZWFtIGlzIGRldGFjaGVkCgojIyMgRGVwcmVjYXRlZAoKLSBEZXByZWNhdGVkIHBhcnNpbmcgZm9sZGVkIGhlYWRlciBsaW5lcyBhcyBwZXIgUkZDIDcyMzAKCiMjIyBGaXhlZAoKLSBGaXggYEFwcGVuZFN0cmVhbTo6ZGV0YWNoYCB0byBub3QgY2xvc2Ugc3RyZWFtcwotIGBJbmZsYXRlU3RyZWFtYCBwcmVzZXJ2ZXMgYGlzU2Vla2FibGVgIGF0dHJpYnV0ZSBvZiB0aGUgdW5kZXJseWluZyBzdHJlYW0KLSBgU2VydmVyUmVxdWVzdDo6Z2V0VXJpRnJvbUdsb2JhbHNgIHRvIHN1cHBvcnQgVVJMcyBpbiBxdWVyeSBwYXJhbWV0ZXJzCgoKU2V2ZXJhbCBvdGhlciBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzLgoKCiMjIFsxLjQuMl0gLSAyMDE3LTAzLTIwCgojIyMgRml4ZWQKCi0gUmV2ZXJ0ZWQgQkMgYnJlYWsgdG8gYFVyaTo6cmVzb2x2ZWAgYW5kIGBVcmk6OnJlbW92ZURvdFNlZ21lbnRzYCBieSByZW1vdmluZwogIGNhbGxzIHRvIGB0cmlnZ2VyX2Vycm9yYCB3aGVuIGRlcHJlY2F0ZWQgbWV0aG9kcyBhcmUgaW52b2tlZC4KCgojIyBbMS40LjFdIC0gMjAxNy0wMi0yNwoKIyMjIEFkZGVkCgotIFJyaWdnZXJpbmcgb2Ygc2lsZW5jZWQgZGVwcmVjYXRpb24gd2FybmluZ3MuCgojIyMgRml4ZWQKCi0gUmV2ZXJ0ZWQgQkMgYnJlYWsgYnkgcmVpbnRyb2R1Y2luZyBiZWhhdmlvciB0byBhdXRvbWFnaWNhbGx5IGZpeCBhIFVSSSB3aXRoIGEKICByZWxhdGl2ZSBwYXRoIGFuZCBhbiBhdXRob3JpdHkgYnkgYWRkaW5nIGEgbGVhZGluZyBzbGFzaCB0byB0aGUgcGF0aC4gSXQncyBvbmx5CiAgZGVwcmVjYXRlZCBub3cuCgoKIyMgWzEuNC4wXSAtIDIwMTctMDItMjEKCiMjIyBBZGRlZAoKLSBBZGRlZCBjb21tb24gVVJJIHV0aWxpdHkgbWV0aG9kcyBiYXNlZCBvbiBSRkMgMzk4NiAoc2VlIGRvY3VtZW50YXRpb24gaW4gdGhlIHJlYWRtZSk6CiAgLSBgVXJpOjppc0RlZmF1bHRQb3J0YAogIC0gYFVyaTo6aXNBYnNvbHV0ZWAKICAtIGBVcmk6OmlzTmV0d29ya1BhdGhSZWZlcmVuY2VgCiAgLSBgVXJpOjppc0Fic29sdXRlUGF0aFJlZmVyZW5jZWAKICAtIGBVcmk6OmlzUmVsYXRpdmVQYXRoUmVmZXJlbmNlYAogIC0gYFVyaTo6aXNTYW1lRG9jdW1lbnRSZWZlcmVuY2VgCiAgLSBgVXJpOjpjb21wb3NlQ29tcG9uZW50c2AKICAtIGBVcmlOb3JtYWxpemVyOjpub3JtYWxpemVgCiAgLSBgVXJpTm9ybWFsaXplcjo6aXNFcXVpdmFsZW50YAogIC0gYFVyaVJlc29sdmVyOjpyZWxhdGl2aXplYAoKIyMjIENoYW5nZWQKCi0gRW5zdXJlIGBTZXJ2ZXJSZXF1ZXN0OjpnZXRVcmlGcm9tR2xvYmFsc2AgcmV0dXJucyBhIFVSSSBpbiBhYnNvbHV0ZSBmb3JtLgotIEFsbG93IGBwYXJzZV9yZXNwb25zZWAgdG8gcGFyc2UgYSByZXNwb25zZSB3aXRob3V0IGRlbGltaXRpbmcgc3BhY2UgYW5kIHJlYXNvbi4KLSBFbnN1cmUgZWFjaCBVUkkgbW9kaWZpY2F0aW9uIHJlc3VsdHMgaW4gYSB2YWxpZCBVUkkgYWNjb3JkaW5nIHRvIFBTUi03IGRpc2N1c3Npb25zLgogIEludmFsaWQgbW9kaWZpY2F0aW9ucyB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpbnN0ZWFkIG9mIHJldHVybmluZyBhIHdyb25nIFVSSSBvcgogIGRvaW5nIHNvbWUgbWFnaWMuCiAgLSBgKG5ldyBVcmkpLT53aXRoUGF0aCgnZm9vJyktPndpdGhIb3N0KCdleGFtcGxlLmNvbScpYCB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbgogICAgYmVjYXVzZSB0aGUgcGF0aCBvZiBhIFVSSSB3aXRoIGFuIGF1dGhvcml0eSBtdXN0IHN0YXJ0IHdpdGggYSBzbGFzaCAiLyIgb3IgYmUgZW1wdHkKICAtIGAobmV3IFVyaSgpKS0+d2l0aFNjaGVtZSgnaHR0cCcpYCB3aWxsIHJldHVybiBgJ2h0dHA6Ly9sb2NhbGhvc3QnYAoKIyMjIERlcHJlY2F0ZWQKCi0gYFVyaTo6cmVzb2x2ZWAgaW4gZmF2b3Igb2YgYFVyaVJlc29sdmVyOjpyZXNvbHZlYAotIGBVcmk6OnJlbW92ZURvdFNlZ21lbnRzYCBpbiBmYXZvciBvZiBgVXJpUmVzb2x2ZXI6OnJlbW92ZURvdFNlZ21lbnRzYAoKIyMjIEZpeGVkCgotIGBTdHJlYW06OnJlYWRgIHdoZW4gbGVuZ3RoIHBhcmFtZXRlciA8PSAwLgotIGBjb3B5X3RvX3N0cmVhbWAgcmVhZHMgYnl0ZXMgaW4gY2h1bmtzIGluc3RlYWQgb2YgYG1heExlbmAgaW50byBtZW1vcnkuCi0gYFNlcnZlclJlcXVlc3Q6OmdldFVyaUZyb21HbG9iYWxzYCB3aGVuIGBIb3N0YCBoZWFkZXIgY29udGFpbnMgcG9ydC4KLSBDb21wYXRpYmlsaXR5IG9mIFVSSXMgd2l0aCBgZmlsZWAgc2NoZW1lIGFuZCBlbXB0eSBob3N0LgoKCiMjIFsxLjMuMV0gLSAyMDE2LTA2LTI1CgojIyMgRml4ZWQKCi0gYFVyaTo6X190b1N0cmluZ2AgZm9yIG5ldHdvcmsgcGF0aCByZWZlcmVuY2VzLCBlLmcuIGAvL2V4YW1wbGUub3JnYC4KLSBNaXNzaW5nIGxvd2VyY2FzZSBub3JtYWxpemF0aW9uIGZvciBob3N0LgotIEhhbmRsaW5nIG9mIFVSSSBjb21wb25lbnRzIGluIGNhc2UgdGhleSBhcmUgYCcwJ2AgaW4gYSBsb3Qgb2YgcGxhY2VzLAogIGUuZy4gYXMgYSB1c2VyIGluZm8gcGFzc3dvcmQuCi0gYFVyaTo6d2l0aEFkZGVkSGVhZGVyYCB0byBjb3JyZWN0bHkgbWVyZ2UgaGVhZGVycyB3aXRoIGRpZmZlcmVudCBjYXNlLgotIFRyaW1taW5nIG9mIGhlYWRlciB2YWx1ZXMgaW4gYFVyaTo6d2l0aEFkZGVkSGVhZGVyYC4gSGVhZGVyIHZhbHVlcyBtYXkKICBiZSBzdXJyb3VuZGVkIGJ5IHdoaXRlc3BhY2Ugd2hpY2ggc2hvdWxkIGJlIGlnbm9yZWQgYWNjb3JkaW5nIHRvIFJGQyA3MjMwCiAgU2VjdGlvbiAzLjIuNC4gVGhpcyBkb2VzIG5vdCBhcHBseSB0byBoZWFkZXIgbmFtZXMuCi0gYFVyaTo6d2l0aEFkZGVkSGVhZGVyYCB3aXRoIGFuIGFycmF5IG9mIGhlYWRlciB2YWx1ZXMuCi0gYFVyaTo6cmVzb2x2ZWAgd2hlbiBiYXNlIHBhdGggaGFzIG5vIHNsYXNoIGFuZCBoYW5kbGluZyBvZiBmcmFnbWVudC4KLSBIYW5kbGluZyBvZiBlbmNvZGluZyBpbiBgVXJpOjp3aXRoKG91dClRdWVyeVZhbHVlYCBzbyBvbmUgY2FuIHBhc3MgdGhlCiAga2V5L3ZhbHVlIGJvdGggaW4gZW5jb2RlZCBhcyB3ZWxsIGFzIGRlY29kZWQgZm9ybSB0byB0aG9zZSBtZXRob2RzLiBUaGlzIGlzCiAgY29uc2lzdGVudCB3aXRoIHdpdGhQYXRoLCB3aXRoUXVlcnkgZXRjLgotIGBTZXJ2ZXJSZXF1ZXN0Ojp3aXRob3V0QXR0cmlidXRlYCB3aGVuIGF0dHJpYnV0ZSB2YWx1ZSBpcyBudWxsLgoKCiMjIFsxLjMuMF0gLSAyMDE2LTA0LTEzCgojIyMgQWRkZWQKCi0gUmVtYWluaW5nIGludGVyZmFjZXMgbmVlZGVkIGZvciBmdWxsIFBTUjcgY29tcGF0aWJpbGl0eQogIChTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlLCBVcGxvYWRlZEZpbGVJbnRlcmZhY2UsIGV0Yy4pLgotIFN1cHBvcnQgZm9yIHN0cmVhbV9mb3IgZnJvbSBzY2FsYXJzLgoKIyMjIENoYW5nZWQKCi0gQ2FuIG5vdyBleHRlbmQgVXJpLgoKIyMjIEZpeGVkCi0gQSBidWcgaW4gdmFsaWRhdGluZyByZXF1ZXN0IG1ldGhvZHMgYnkgbWFraW5nIGl0IG1vcmUgcGVybWlzc2l2ZS4KCgojIyBbMS4yLjNdIC0gMjAxNi0wMi0xOAoKIyMjIEZpeGVkCgotIFN1cHBvcnQgaW4gYEd1enpsZUh0dHBcUHNyN1xDYWNoaW5nU3RyZWFtYCBmb3Igc2Vla2luZyBmb3J3YXJkIG9uIHJlbW90ZQogIHN0cmVhbXMsIHdoaWNoIGNhbiBzb21ldGltZXMgcmV0dXJuIGZld2VyIGJ5dGVzIHRoYW4gcmVxdWVzdGVkIHdpdGggYGZyZWFkYC4KLSBIYW5kbGluZyBvZiBnemlwcGVkIHJlc3BvbnNlcyB3aXRoIEZOQU1FIGhlYWRlcnMuCgoKIyMgWzEuMi4yXSAtIDIwMTYtMDEtMjIKCiMjIyBBZGRlZAoKLSBTdXBwb3J0IGZvciBVUklzIHdpdGhvdXQgYW55IGF1dGhvcml0eS4KLSBTdXBwb3J0IGZvciBIVFRQIDQ1MSAnVW5hdmFpbGFibGUgRm9yIExlZ2FsIFJlYXNvbnMuJwotIFN1cHBvcnQgZm9yIHVzaW5nICcwJyBhcyBhIGZpbGVuYW1lLgotIFN1cHBvcnQgZm9yIGluY2x1ZGluZyBub24tc3RhbmRhcmQgcG9ydHMgaW4gSG9zdCBoZWFkZXJzLgoKCiMjIFsxLjIuMV0gLSAyMDE1LTExLTAyCgojIyMgQ2hhbmdlcwoKLSBOb3cgc3VwcG9ydGluZyBuZWdhdGl2ZSBvZmZzZXRzIHdoZW4gc2Vla2luZyB0byBTRUVLX0VORC4KCgojIyBbMS4yLjBdIC0gMjAxNS0wOC0xNQoKIyMjIENoYW5nZWQKCi0gQm9keSBhcyBgIjAiYCBpcyBub3cgcHJvcGVybHkgYWRkZWQgdG8gYSByZXNwb25zZS4KLSBOb3cgYWxsb3dpbmcgZm9yd2FyZCBzZWVraW5nIGluIENhY2hpbmdTdHJlYW0uCi0gTm93IHByb3Blcmx5IHBhcnNpbmcgSFRUUCByZXF1ZXN0cyB0aGF0IGNvbnRhaW4gcHJveHkgdGFyZ2V0cyBpbgogIGBwYXJzZV9yZXF1ZXN0YC4KLSBmdW5jdGlvbnMucGhwIGlzIG5vdyBjb25kaXRpb25hbGx5IHJlcXVpcmVkLgotIHVzZXItaW5mbyBpcyBubyBsb25nZXIgZHJvcHBlZCB3aGVuIHJlc29sdmluZyBVUklzLgoKCiMjIFsxLjEuMF0gLSAyMDE1LTA2LTI0CgojIyMgQ2hhbmdlZAoKLSBVUklzIGNhbiBub3cgYmUgcmVsYXRpdmUuCi0gYG11bHRpcGFydC9mb3JtLWRhdGFgIGhlYWRlcnMgYXJlIG5vdyBvdmVycmlkZGVuIGNhc2UtaW5zZW5zaXRpdmVseS4KLSBVUkkgcGF0aHMgbm8gbG9uZ2VyIGVuY29kZSB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgYmVjYXVzZSB0aGV5IGFyZSBhbGxvd2VkCiAgaW4gVVJJczogIigiLCAiKSIsICIqIiwgIiEiLCAiJyIKLSBBIHBvcnQgaXMgbm8gbG9uZ2VyIGFkZGVkIHRvIGEgVVJJIHdoZW4gdGhlIHNjaGVtZSBpcyBtaXNzaW5nIGFuZCBubyBwb3J0IGlzCiAgcHJlc2VudC4KCgojIyAxLjAuMCAtIDIwMTUtMDUtMTkKCkluaXRpYWwgcmVsZWFzZS4KCkN1cnJlbnRseSB1bnN1cHBvcnRlZDoKCi0gYFBzclxIdHRwXE1lc3NhZ2VcU2VydmVyUmVxdWVzdEludGVyZmFjZWAKLSBgUHNyXEh0dHBcTWVzc2FnZVxVcGxvYWRlZEZpbGVJbnRlcmZhY2VgCgoKClsxLjYuMF06IGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHNyNy9jb21wYXJlLzEuNS4yLi4uMS42LjAKWzEuNS4yXTogaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wc3I3L2NvbXBhcmUvMS41LjEuLi4xLjUuMgpbMS41LjFdOiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3BzcjcvY29tcGFyZS8xLjUuMC4uLjEuNS4xClsxLjUuMF06IGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHNyNy9jb21wYXJlLzEuNC4yLi4uMS41LjAKWzEuNC4yXTogaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wc3I3L2NvbXBhcmUvMS40LjEuLi4xLjQuMgpbMS40LjFdOiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3BzcjcvY29tcGFyZS8xLjQuMC4uLjEuNC4xClsxLjQuMF06IGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHNyNy9jb21wYXJlLzEuMy4xLi4uMS40LjAKWzEuMy4xXTogaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wc3I3L2NvbXBhcmUvMS4zLjAuLi4xLjMuMQpbMS4zLjBdOiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3BzcjcvY29tcGFyZS8xLjIuMy4uLjEuMy4wClsxLjIuM106IGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHNyNy9jb21wYXJlLzEuMi4yLi4uMS4yLjMKWzEuMi4yXTogaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wc3I3L2NvbXBhcmUvMS4yLjEuLi4xLjIuMgpbMS4yLjFdOiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3BzcjcvY29tcGFyZS8xLjIuMC4uLjEuMi4xClsxLjIuMF06IGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHNyNy9jb21wYXJlLzEuMS4wLi4uMS4yLjAKWzEuMS4wXTogaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wc3I3L2NvbXBhcmUvMS4wLjAuLi4xLjEuMAo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAiZ3V6emxlaHR0cC9wc3I3IiwKICAgICJkZXNjcmlwdGlvbiI6ICJQU1ItNyBtZXNzYWdlIGltcGxlbWVudGF0aW9uIHRoYXQgYWxzbyBwcm92aWRlcyBjb21tb24gdXRpbGl0eSBtZXRob2RzIiwKICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAicmVxdWVzdCIsCiAgICAgICAgInJlc3BvbnNlIiwKICAgICAgICAibWVzc2FnZSIsCiAgICAgICAgInN0cmVhbSIsCiAgICAgICAgImh0dHAiLAogICAgICAgICJ1cmkiLAogICAgICAgICJ1cmwiLAogICAgICAgICJwc3ItNyIKICAgIF0sCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJHcmFoYW0gQ2FtcGJlbGwiLAogICAgICAgICAgICAiZW1haWwiOiAiaGVsbG9AZ2pjYW1wYmVsbC5jby51ayIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vR3JhaGFtQ2FtcGJlbGwiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIk1pY2hhZWwgRG93bGluZyIsCiAgICAgICAgICAgICJlbWFpbCI6ICJtdGRvd2xpbmdAZ21haWwuY29tIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9tdGRvd2xpbmciCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIkdlb3JnZSBNcG9ub3MiLAogICAgICAgICAgICAiZW1haWwiOiAiZ21wb25vc0BnbWFpbC5jb20iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL2dtcG9ub3MiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIlRvYmlhcyBOeWhvbG0iLAogICAgICAgICAgICAiZW1haWwiOiAidG9iaWFzLm55aG9sbUBnbWFpbC5jb20iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL055aG9sbSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiTcOhcmsgU8OhZ2ktS2F6w6FyIiwKICAgICAgICAgICAgImVtYWlsIjogIm1hcmsuc2FnaWthemFyQGdtYWlsLmNvbSIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vc2FnaWthemFybWFyayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiVG9iaWFzIFNjaHVsdHplIiwKICAgICAgICAgICAgImVtYWlsIjogIndlYm1hc3RlckB0dWJvLXdvcmxkLmRlIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9Ub2Jpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIk3DoXJrIFPDoWdpLUthesOhciIsCiAgICAgICAgICAgICJlbWFpbCI6ICJtYXJrLnNhZ2lrYXphckBnbWFpbC5jb20iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zYWdpa2F6YXJtYXJrLmh1IgogICAgICAgIH0KICAgIF0sCiAgICAicmVwb3NpdG9yaWVzIjogWwogICAgICAgIHsKICAgICAgICAgICAgInR5cGUiOiAicGFja2FnZSIsCiAgICAgICAgICAgICJwYWNrYWdlIjogewogICAgICAgICAgICAgICAgIm5hbWUiOiAianNodHRwL21pbWUtZGIiLAogICAgICAgICAgICAgICAgInZlcnNpb24iOiAiMS41NC4wLjEiLAogICAgICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2NvZGVsb2FkLmdpdGh1Yi5jb20vanNodHRwL21pbWUtZGIvemlwLzBhOWZkMGJmYmM4N2E3MjVmZjYzODQ5NTgzOTExNGU3ODA3YjcxNzciLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIF0sCiAgICAicmVxdWlyZSI6IHsKICAgICAgICAicGhwIjogIl43LjIuNSB8fCBeOC4wIiwKICAgICAgICAicHNyL2h0dHAtZmFjdG9yeSI6ICJeMS4wIiwKICAgICAgICAicHNyL2h0dHAtbWVzc2FnZSI6ICJeMS4xIHx8IF4yLjAiLAogICAgICAgICJyYWxvdXBoaWUvZ2V0YWxsaGVhZGVycyI6ICJeMy4wIgogICAgfSwKICAgICJwcm92aWRlIjogewogICAgICAgICJwc3IvaHR0cC1mYWN0b3J5LWltcGxlbWVudGF0aW9uIjogIjEuMCIsCiAgICAgICAgInBzci9odHRwLW1lc3NhZ2UtaW1wbGVtZW50YXRpb24iOiAiMS4wIgogICAgfSwKICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAiYmFtYXJuaS9jb21wb3Nlci1iaW4tcGx1Z2luIjogIl4xLjguMiIsCiAgICAgICAgImh0dHAtaW50ZXJvcC9odHRwLWZhY3RvcnktdGVzdHMiOiAiMC45LjAiLAogICAgICAgICJqc2h0dHAvbWltZS1kYiI6ICIxLjU0LjAuMSIsCiAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeOC41LjQ0IHx8IF45LjYuMjUiCiAgICB9LAogICAgInN1Z2dlc3QiOiB7CiAgICAgICAgImxhbWluYXMvbGFtaW5hcy1odHRwaGFuZGxlcnJ1bm5lciI6ICJFbWl0IFBTUi03IHJlc3BvbnNlcyIKICAgIH0sCiAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiR3V6emxlSHR0cFxcUHNyN1xcIjogInNyYy8iCiAgICAgICAgfQogICAgfSwKICAgICJhdXRvbG9hZC1kZXYiOiB7CiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiR3V6emxlSHR0cFxcVGVzdHNcXFBzcjdcXCI6ICJ0ZXN0cy8iCiAgICAgICAgfQogICAgfSwKICAgICJleHRyYSI6IHsKICAgICAgICAiYmFtYXJuaS1iaW4iOiB7CiAgICAgICAgICAgICJiaW4tbGlua3MiOiB0cnVlLAogICAgICAgICAgICAiZm9yd2FyZC1jb21tYW5kIjogZmFsc2UKICAgICAgICB9CiAgICB9LAogICAgImNvbmZpZyI6IHsKICAgICAgICAiYWxsb3ctcGx1Z2lucyI6IHsKICAgICAgICAgICAgImJhbWFybmkvY29tcG9zZXItYmluLXBsdWdpbiI6IHRydWUKICAgICAgICB9LAogICAgICAgICJwcmVmZXJyZWQtaW5zdGFsbCI6ICJkaXN0IiwKICAgICAgICAic29ydC1wYWNrYWdlcyI6IHRydWUKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTUgTWljaGFlbCBEb3dsaW5nIDxtdGRvd2xpbmdAZ21haWwuY29tPgpDb3B5cmlnaHQgKGMpIDIwMTUgTcOhcmsgU8OhZ2ktS2F6w6FyIDxtYXJrLnNhZ2lrYXphckBnbWFpbC5jb20+CkNvcHlyaWdodCAoYykgMjAxNSBHcmFoYW0gQ2FtcGJlbGwgPGhlbGxvQGdqY2FtcGJlbGwuY28udWs+CkNvcHlyaWdodCAoYykgMjAxNiBUb2JpYXMgU2NodWx0emUgPHdlYm1hc3RlckB0dWJvLXdvcmxkLmRlPgpDb3B5cmlnaHQgKGMpIDIwMTYgR2VvcmdlIE1wb25vcyA8Z21wb25vc0BnbWFpbC5jb20+CkNvcHlyaWdodCAoYykgMjAxOCBUb2JpYXMgTnlob2xtIDx0b2JpYXMubnlob2xtQGdtYWlsLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgpUSEUgU09GVFdBUkUuCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBQU1ItNyBNZXNzYWdlIEltcGxlbWVudGF0aW9uCgpUaGlzIHJlcG9zaXRvcnkgY29udGFpbnMgYSBmdWxsIFtQU1ItN10oaHR0cHM6Ly93d3cucGhwLWZpZy5vcmcvcHNyL3Bzci03LykKbWVzc2FnZSBpbXBsZW1lbnRhdGlvbiwgc2V2ZXJhbCBzdHJlYW0gZGVjb3JhdG9ycywgYW5kIHNvbWUgaGVscGZ1bApmdW5jdGlvbmFsaXR5IGxpa2UgcXVlcnkgc3RyaW5nIHBhcnNpbmcuCgohW0NJXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3Bzcjcvd29ya2Zsb3dzL0NJL2JhZGdlLnN2ZykKIVtTdGF0aWMgYW5hbHlzaXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHNyNy93b3JrZmxvd3MvU3RhdGljJTIwYW5hbHlzaXMvYmFkZ2Uuc3ZnKQoKCiMjIEZlYXR1cmVzCgpUaGlzIHBhY2thZ2UgY29tZXMgd2l0aCBhIG51bWJlciBvZiBzdHJlYW0gaW1wbGVtZW50YXRpb25zIGFuZCBzdHJlYW0KZGVjb3JhdG9ycy4KCgojIyBJbnN0YWxsYXRpb24KCmBgYHNoZWxsCmNvbXBvc2VyIHJlcXVpcmUgZ3V6emxlaHR0cC9wc3I3CmBgYAoKIyMgVmVyc2lvbiBHdWlkYW5jZQoKfCBWZXJzaW9uIHwgU3RhdHVzICAgICAgICAgICAgICB8IFBIUCBWZXJzaW9uICB8CnwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfAp8IDEueCAgICAgfCBFT0wgKDIwMjQtMDYtMzApICAgIHwgPj01LjQsPDguMiAgIHwKfCAyLnggICAgIHwgTGF0ZXN0ICAgICAgICAgICAgICB8ID49Ny4yLjUsPDguNiB8CgoKIyMgQXBwZW5kU3RyZWFtCgpgR3V6emxlSHR0cFxQc3I3XEFwcGVuZFN0cmVhbWAKClJlYWRzIGZyb20gbXVsdGlwbGUgc3RyZWFtcywgb25lIGFmdGVyIHRoZSBvdGhlci4KCmBgYHBocAp1c2UgR3V6emxlSHR0cFxQc3I3OwoKJGEgPSBQc3I3XFV0aWxzOjpzdHJlYW1Gb3IoJ2FiYywgJyk7CiRiID0gUHNyN1xVdGlsczo6c3RyZWFtRm9yKCcxMjMuJyk7CiRjb21wb3NlZCA9IG5ldyBQc3I3XEFwcGVuZFN0cmVhbShbJGEsICRiXSk7CgokY29tcG9zZWQtPmFkZFN0cmVhbShQc3I3XFV0aWxzOjpzdHJlYW1Gb3IoJyBBYm92ZSBhbGwgbGlzdGVuIHRvIG1lJykpOwoKZWNobyAkY29tcG9zZWQ7IC8vIGFiYywgMTIzLiBBYm92ZSBhbGwgbGlzdGVuIHRvIG1lLgpgYGAKCgojIyBCdWZmZXJTdHJlYW0KCmBHdXp6bGVIdHRwXFBzcjdcQnVmZmVyU3RyZWFtYAoKUHJvdmlkZXMgYSBidWZmZXIgc3RyZWFtIHRoYXQgY2FuIGJlIHdyaXR0ZW4gdG8gZmlsbCBhIGJ1ZmZlciwgYW5kIHJlYWQKZnJvbSB0byByZW1vdmUgYnl0ZXMgZnJvbSB0aGUgYnVmZmVyLgoKVGhpcyBzdHJlYW0gcmV0dXJucyBhICJod20iIG1ldGFkYXRhIHZhbHVlIHRoYXQgdGVsbHMgdXBzdHJlYW0gY29uc3VtZXJzCndoYXQgdGhlIGNvbmZpZ3VyZWQgaGlnaCB3YXRlciBtYXJrIG9mIHRoZSBzdHJlYW0gaXMsIG9yIHRoZSBtYXhpbXVtCnByZWZlcnJlZCBzaXplIG9mIHRoZSBidWZmZXIuCgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcUHNyNzsKCi8vIFdoZW4gbW9yZSB0aGFuIDEwMjQgYnl0ZXMgYXJlIGluIHRoZSBidWZmZXIsIGl0IHdpbGwgYmVnaW4gcmV0dXJuaW5nCi8vIGZhbHNlIHRvIHdyaXRlcy4gVGhpcyBpcyBhbiBpbmRpY2F0aW9uIHRoYXQgd3JpdGVycyBzaG91bGQgc2xvdyBkb3duLgokYnVmZmVyID0gbmV3IFBzcjdcQnVmZmVyU3RyZWFtKDEwMjQpOwpgYGAKCgojIyBDYWNoaW5nU3RyZWFtCgpUaGUgQ2FjaGluZ1N0cmVhbSBpcyB1c2VkIHRvIGFsbG93IHNlZWtpbmcgb3ZlciBwcmV2aW91c2x5IHJlYWQgYnl0ZXMgb24Kbm9uLXNlZWthYmxlIHN0cmVhbXMuIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIHRyYW5zZmVycmluZyBhIG5vbi1zZWVrYWJsZQplbnRpdHkgYm9keSBmYWlscyBkdWUgdG8gbmVlZGluZyB0byByZXdpbmQgdGhlIHN0cmVhbSAoZm9yIGV4YW1wbGUsIHJlc3VsdGluZwpmcm9tIGEgcmVkaXJlY3QpLiBEYXRhIHRoYXQgaXMgcmVhZCBmcm9tIHRoZSByZW1vdGUgc3RyZWFtIHdpbGwgYmUgYnVmZmVyZWQgaW4KYSBQSFAgdGVtcCBzdHJlYW0gc28gdGhhdCBwcmV2aW91c2x5IHJlYWQgYnl0ZXMgYXJlIGNhY2hlZCBmaXJzdCBpbiBtZW1vcnksCnRoZW4gb24gZGlzay4KCmBgYHBocAp1c2UgR3V6emxlSHR0cFxQc3I3OwoKJG9yaWdpbmFsID0gUHNyN1xVdGlsczo6c3RyZWFtRm9yKGZvcGVuKCdodHRwOi8vd3d3Lmdvb2dsZS5jb20nLCAncicpKTsKJHN0cmVhbSA9IG5ldyBQc3I3XENhY2hpbmdTdHJlYW0oJG9yaWdpbmFsKTsKCiRzdHJlYW0tPnJlYWQoMTAyNCk7CmVjaG8gJHN0cmVhbS0+dGVsbCgpOwovLyAxMDI0Cgokc3RyZWFtLT5zZWVrKDApOwplY2hvICRzdHJlYW0tPnRlbGwoKTsKLy8gMApgYGAKCgojIyBEcm9wcGluZ1N0cmVhbQoKYEd1enpsZUh0dHBcUHNyN1xEcm9wcGluZ1N0cmVhbWAKClN0cmVhbSBkZWNvcmF0b3IgdGhhdCBiZWdpbnMgZHJvcHBpbmcgZGF0YSBvbmNlIHRoZSBzaXplIG9mIHRoZSB1bmRlcmx5aW5nCnN0cmVhbSBiZWNvbWVzIHRvbyBmdWxsLgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXFBzcjc7CgovLyBDcmVhdGUgYW4gZW1wdHkgc3RyZWFtCiRzdHJlYW0gPSBQc3I3XFV0aWxzOjpzdHJlYW1Gb3IoKTsKCi8vIFN0YXJ0IGRyb3BwaW5nIGRhdGEgd2hlbiB0aGUgc3RyZWFtIGhhcyBtb3JlIHRoYW4gMTAgYnl0ZXMKJGRyb3BwaW5nID0gbmV3IFBzcjdcRHJvcHBpbmdTdHJlYW0oJHN0cmVhbSwgMTApOwoKJGRyb3BwaW5nLT53cml0ZSgnMDEyMzQ1Njc4OTAxMjM0NTY3ODknKTsKZWNobyAkc3RyZWFtOyAvLyAwMTIzNDU2Nzg5CmBgYAoKCiMjIEZuU3RyZWFtCgpgR3V6emxlSHR0cFxQc3I3XEZuU3RyZWFtYAoKQ29tcG9zZSBzdHJlYW0gaW1wbGVtZW50YXRpb25zIGJhc2VkIG9uIGEgaGFzaCBvZiBmdW5jdGlvbnMuCgpBbGxvd3MgZm9yIGVhc3kgdGVzdGluZyBhbmQgZXh0ZW5zaW9uIG9mIGEgcHJvdmlkZWQgc3RyZWFtIHdpdGhvdXQgbmVlZGluZwp0byBjcmVhdGUgYSBjb25jcmV0ZSBjbGFzcyBmb3IgYSBzaW1wbGUgZXh0ZW5zaW9uIHBvaW50LgoKYGBgcGhwCgp1c2UgR3V6emxlSHR0cFxQc3I3OwoKJHN0cmVhbSA9IFBzcjdcVXRpbHM6OnN0cmVhbUZvcignaGknKTsKJGZuU3RyZWFtID0gUHNyN1xGblN0cmVhbTo6ZGVjb3JhdGUoJHN0cmVhbSwgWwogICAgJ3Jld2luZCcgPT4gZnVuY3Rpb24gKCkgdXNlICgkc3RyZWFtKSB7CiAgICAgICAgZWNobyAnQWJvdXQgdG8gcmV3aW5kIC0gJzsKICAgICAgICAkc3RyZWFtLT5yZXdpbmQoKTsKICAgICAgICBlY2hvICdyZXdvdW5kISc7CiAgICB9Cl0pOwoKJGZuU3RyZWFtLT5yZXdpbmQoKTsKLy8gT3V0cHV0czogQWJvdXQgdG8gcmV3aW5kIC0gcmV3b3VuZCEKYGBgCgoKIyMgSW5mbGF0ZVN0cmVhbQoKYEd1enpsZUh0dHBcUHNyN1xJbmZsYXRlU3RyZWFtYAoKVXNlcyBQSFAncyB6bGliLmluZmxhdGUgZmlsdGVyIHRvIGluZmxhdGUgemxpYiAoSFRUUCBkZWZsYXRlLCBSRkMxOTUwKSBvciBnemlwcGVkIChSRkMxOTUyKSBjb250ZW50LgoKVGhpcyBzdHJlYW0gZGVjb3JhdG9yIGNvbnZlcnRzIHRoZSBwcm92aWRlZCBzdHJlYW0gdG8gYSBQSFAgc3RyZWFtIHJlc291cmNlLAp0aGVuIGFwcGVuZHMgdGhlIHpsaWIuaW5mbGF0ZSBmaWx0ZXIuIFRoZSBzdHJlYW0gaXMgdGhlbiBjb252ZXJ0ZWQgYmFjawp0byBhIEd1enpsZSBzdHJlYW0gcmVzb3VyY2UgdG8gYmUgdXNlZCBhcyBhIEd1enpsZSBzdHJlYW0uCgoKIyMgTGF6eU9wZW5TdHJlYW0KCmBHdXp6bGVIdHRwXFBzcjdcTGF6eU9wZW5TdHJlYW1gCgpMYXppbHkgcmVhZHMgb3Igd3JpdGVzIHRvIGEgZmlsZSB0aGF0IGlzIG9wZW5lZCBvbmx5IGFmdGVyIGFuIElPIG9wZXJhdGlvbgp0YWtlIHBsYWNlIG9uIHRoZSBzdHJlYW0uCgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcUHNyNzsKCiRzdHJlYW0gPSBuZXcgUHNyN1xMYXp5T3BlblN0cmVhbSgnL3BhdGgvdG8vZmlsZScsICdyJyk7Ci8vIFRoZSBmaWxlIGhhcyBub3QgeWV0IGJlZW4gb3BlbmVkLi4uCgplY2hvICRzdHJlYW0tPnJlYWQoMTApOwovLyBUaGUgZmlsZSBpcyBvcGVuZWQgYW5kIHJlYWQgZnJvbSBvbmx5IHdoZW4gbmVlZGVkLgpgYGAKCgojIyBMaW1pdFN0cmVhbQoKYEd1enpsZUh0dHBcUHNyN1xMaW1pdFN0cmVhbWAKCkxpbWl0U3RyZWFtIGNhbiBiZSB1c2VkIHRvIHJlYWQgYSBzdWJzZXQgb3Igc2xpY2Ugb2YgYW4gZXhpc3Rpbmcgc3RyZWFtIG9iamVjdC4KVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBicmVha2luZyBhIGxhcmdlIGZpbGUgaW50byBzbWFsbGVyIHBpZWNlcyB0byBiZSBzZW50IGluCmNodW5rcyAoZS5nLiBBbWF6b24gUzMncyBtdWx0aXBhcnQgdXBsb2FkIEFQSSkuCgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcUHNyNzsKCiRvcmlnaW5hbCA9IFBzcjdcVXRpbHM6OnN0cmVhbUZvcihmb3BlbignL3RtcC90ZXN0LnR4dCcsICdyKycpKTsKZWNobyAkb3JpZ2luYWwtPmdldFNpemUoKTsKLy8gPj4+IDEwNDg1NzYKCi8vIExpbWl0IHRoZSBzaXplIG9mIHRoZSBib2R5IHRvIDEwMjQgYnl0ZXMgYW5kIHN0YXJ0IHJlYWRpbmcgZnJvbSBieXRlIDIwNDgKJHN0cmVhbSA9IG5ldyBQc3I3XExpbWl0U3RyZWFtKCRvcmlnaW5hbCwgMTAyNCwgMjA0OCk7CmVjaG8gJHN0cmVhbS0+Z2V0U2l6ZSgpOwovLyA+Pj4gMTAyNAplY2hvICRzdHJlYW0tPnRlbGwoKTsKLy8gPj4+IDAKYGBgCgoKIyMgTXVsdGlwYXJ0U3RyZWFtCgpgR3V6emxlSHR0cFxQc3I3XE11bHRpcGFydFN0cmVhbWAKClN0cmVhbSB0aGF0IHdoZW4gcmVhZCByZXR1cm5zIGJ5dGVzIGZvciBhIHN0cmVhbWluZyBtdWx0aXBhcnQgb3IKbXVsdGlwYXJ0L2Zvcm0tZGF0YSBzdHJlYW0uCgoKIyMgTm9TZWVrU3RyZWFtCgpgR3V6emxlSHR0cFxQc3I3XE5vU2Vla1N0cmVhbWAKCk5vU2Vla1N0cmVhbSB3cmFwcyBhIHN0cmVhbSBhbmQgZG9lcyBub3QgYWxsb3cgc2Vla2luZy4KCmBgYHBocAp1c2UgR3V6emxlSHR0cFxQc3I3OwoKJG9yaWdpbmFsID0gUHNyN1xVdGlsczo6c3RyZWFtRm9yKCdmb28nKTsKJG5vU2VlayA9IG5ldyBQc3I3XE5vU2Vla1N0cmVhbSgkb3JpZ2luYWwpOwoKZWNobyAkbm9TZWVrLT5yZWFkKDMpOwovLyBmb28KdmFyX2V4cG9ydCgkbm9TZWVrLT5pc1NlZWthYmxlKCkpOwovLyBmYWxzZQokbm9TZWVrLT5zZWVrKDApOwp2YXJfZXhwb3J0KCRub1NlZWstPnJlYWQoMykpOwovLyBOVUxMCmBgYAoKCiMjIFB1bXBTdHJlYW0KCmBHdXp6bGVIdHRwXFBzcjdcUHVtcFN0cmVhbWAKClByb3ZpZGVzIGEgcmVhZCBvbmx5IHN0cmVhbSB0aGF0IHB1bXBzIGRhdGEgZnJvbSBhIFBIUCBjYWxsYWJsZS4KCldoZW4gaW52b2tpbmcgdGhlIHByb3ZpZGVkIGNhbGxhYmxlLCB0aGUgUHVtcFN0cmVhbSB3aWxsIHBhc3MgdGhlIGFtb3VudCBvZgpkYXRhIHJlcXVlc3RlZCB0byByZWFkIHRvIHRoZSBjYWxsYWJsZS4gVGhlIGNhbGxhYmxlIGNhbiBjaG9vc2UgdG8gaWdub3JlCnRoaXMgdmFsdWUgYW5kIHJldHVybiBmZXdlciBvciBtb3JlIGJ5dGVzIHRoYW4gcmVxdWVzdGVkLiBBbnkgZXh0cmEgZGF0YQpyZXR1cm5lZCBieSB0aGUgcHJvdmlkZWQgY2FsbGFibGUgaXMgYnVmZmVyZWQgaW50ZXJuYWxseSB1bnRpbCBkcmFpbmVkIHVzaW5nCnRoZSByZWFkKCkgZnVuY3Rpb24gb2YgdGhlIFB1bXBTdHJlYW0uIFRoZSBwcm92aWRlZCBjYWxsYWJsZSBNVVNUIHJldHVybgpmYWxzZSB3aGVuIHRoZXJlIGlzIG5vIG1vcmUgZGF0YSB0byByZWFkLgoKCiMjIEltcGxlbWVudGluZyBzdHJlYW0gZGVjb3JhdG9ycwoKQ3JlYXRpbmcgYSBzdHJlYW0gZGVjb3JhdG9yIGlzIHZlcnkgZWFzeSB0aGFua3MgdG8gdGhlCmBHdXp6bGVIdHRwXFBzcjdcU3RyZWFtRGVjb3JhdG9yVHJhaXRgLiBUaGlzIHRyYWl0IHByb3ZpZGVzIG1ldGhvZHMgdGhhdAppbXBsZW1lbnQgYFBzclxIdHRwXE1lc3NhZ2VcU3RyZWFtSW50ZXJmYWNlYCBieSBwcm94eWluZyB0byBhbiB1bmRlcmx5aW5nCnN0cmVhbS4gSnVzdCBgdXNlYCB0aGUgYFN0cmVhbURlY29yYXRvclRyYWl0YCBhbmQgaW1wbGVtZW50IHlvdXIgY3VzdG9tCm1ldGhvZHMuCgpGb3IgZXhhbXBsZSwgbGV0J3Mgc2F5IHdlIHdhbnRlZCB0byBjYWxsIGEgc3BlY2lmaWMgZnVuY3Rpb24gZWFjaCB0aW1lIHRoZSBsYXN0CmJ5dGUgaXMgcmVhZCBmcm9tIGEgc3RyZWFtLiBUaGlzIGNvdWxkIGJlIGltcGxlbWVudGVkIGJ5IG92ZXJyaWRpbmcgdGhlCmByZWFkKClgIG1ldGhvZC4KCmBgYHBocAp1c2UgUHNyXEh0dHBcTWVzc2FnZVxTdHJlYW1JbnRlcmZhY2U7CnVzZSBHdXp6bGVIdHRwXFBzcjdcU3RyZWFtRGVjb3JhdG9yVHJhaXQ7CgpjbGFzcyBFb2ZDYWxsYmFja1N0cmVhbSBpbXBsZW1lbnRzIFN0cmVhbUludGVyZmFjZQp7CiAgICB1c2UgU3RyZWFtRGVjb3JhdG9yVHJhaXQ7CgogICAgcHJpdmF0ZSAkY2FsbGJhY2s7CgogICAgcHJpdmF0ZSAkc3RyZWFtOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwgY2FsbGFibGUgJGNiKQogICAgewogICAgICAgICR0aGlzLT5zdHJlYW0gPSAkc3RyZWFtOwogICAgICAgICR0aGlzLT5jYWxsYmFjayA9ICRjYjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVhZCgkbGVuZ3RoKQogICAgewogICAgICAgICRyZXN1bHQgPSAkdGhpcy0+c3RyZWFtLT5yZWFkKCRsZW5ndGgpOwoKICAgICAgICAvLyBJbnZva2UgdGhlIGNhbGxiYWNrIHdoZW4gRU9GIGlzIGhpdC4KICAgICAgICBpZiAoJHRoaXMtPmVvZigpKSB7CiAgICAgICAgICAgICgkdGhpcy0+Y2FsbGJhY2spKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KfQpgYGAKClRoaXMgZGVjb3JhdG9yIGNvdWxkIGJlIGFkZGVkIHRvIGFueSBleGlzdGluZyBzdHJlYW0gYW5kIHVzZWQgbGlrZSBzbzoKCmBgYHBocAp1c2UgR3V6emxlSHR0cFxQc3I3OwoKJG9yaWdpbmFsID0gUHNyN1xVdGlsczo6c3RyZWFtRm9yKCdmb28nKTsKCiRlb2ZTdHJlYW0gPSBuZXcgRW9mQ2FsbGJhY2tTdHJlYW0oJG9yaWdpbmFsLCBmdW5jdGlvbiAoKSB7CiAgICBlY2hvICdFT0YhJzsKfSk7CgokZW9mU3RyZWFtLT5yZWFkKDIpOwokZW9mU3RyZWFtLT5yZWFkKDEpOwovLyBlY2hvZXMgIkVPRiEiCiRlb2ZTdHJlYW0tPnNlZWsoMCk7CiRlb2ZTdHJlYW0tPnJlYWQoMyk7Ci8vIGVjaG9lcyAiRU9GISIKYGBgCgoKIyMgUEhQIFN0cmVhbVdyYXBwZXIKCllvdSBjYW4gdXNlIHRoZSBgR3V6emxlSHR0cFxQc3I3XFN0cmVhbVdyYXBwZXJgIGNsYXNzIGlmIHlvdSBuZWVkIHRvIHVzZSBhClBTUi03IHN0cmVhbSBhcyBhIFBIUCBzdHJlYW0gcmVzb3VyY2UuCgpVc2UgdGhlIGBHdXp6bGVIdHRwXFBzcjdcU3RyZWFtV3JhcHBlcjo6Z2V0UmVzb3VyY2UoKWAgbWV0aG9kIHRvIGNyZWF0ZSBhIFBIUApzdHJlYW0gZnJvbSBhIFBTUi03IHN0cmVhbS4KCmBgYHBocAp1c2UgR3V6emxlSHR0cFxQc3I3XFN0cmVhbVdyYXBwZXI7Cgokc3RyZWFtID0gR3V6emxlSHR0cFxQc3I3XFV0aWxzOjpzdHJlYW1Gb3IoJ2hlbGxvIScpOwokcmVzb3VyY2UgPSBTdHJlYW1XcmFwcGVyOjpnZXRSZXNvdXJjZSgkc3RyZWFtKTsKZWNobyBmcmVhZCgkcmVzb3VyY2UsIDYpOyAvLyBvdXRwdXRzIGhlbGxvIQpgYGAKCgojIFN0YXRpYyBBUEkKClRoZXJlIGFyZSB2YXJpb3VzIHN0YXRpYyBtZXRob2RzIGF2YWlsYWJsZSB1bmRlciB0aGUgYEd1enpsZUh0dHBcUHNyN2AgbmFtZXNwYWNlLgoKCiMjIGBHdXp6bGVIdHRwXFBzcjdcTWVzc2FnZTo6dG9TdHJpbmdgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0b1N0cmluZyhNZXNzYWdlSW50ZXJmYWNlICRtZXNzYWdlKTogc3RyaW5nYAoKUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIEhUVFAgbWVzc2FnZS4KCmBgYHBocAokcmVxdWVzdCA9IG5ldyBHdXp6bGVIdHRwXFBzcjdcUmVxdWVzdCgnR0VUJywgJ2h0dHA6Ly9leGFtcGxlLmNvbScpOwplY2hvIEd1enpsZUh0dHBcUHNyN1xNZXNzYWdlOjp0b1N0cmluZygkcmVxdWVzdCk7CmBgYAoKCiMjIGBHdXp6bGVIdHRwXFBzcjdcTWVzc2FnZTo6Ym9keVN1bW1hcnlgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBib2R5U3VtbWFyeShNZXNzYWdlSW50ZXJmYWNlICRtZXNzYWdlLCBpbnQgJHRydW5jYXRlQXQgPSAxMjApOiBzdHJpbmd8bnVsbGAKCkdldCBhIHNob3J0IHN1bW1hcnkgb2YgdGhlIG1lc3NhZ2UgYm9keS4KCldpbGwgcmV0dXJuIGBudWxsYCBpZiB0aGUgcmVzcG9uc2UgaXMgbm90IHByaW50YWJsZS4KCgojIyBgR3V6emxlSHR0cFxQc3I3XE1lc3NhZ2U6OnJld2luZEJvZHlgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXdpbmRCb2R5KE1lc3NhZ2VJbnRlcmZhY2UgJG1lc3NhZ2UpOiB2b2lkYAoKQXR0ZW1wdHMgdG8gcmV3aW5kIGEgbWVzc2FnZSBib2R5IGFuZCB0aHJvd3MgYW4gZXhjZXB0aW9uIG9uIGZhaWx1cmUuCgpUaGUgYm9keSBvZiB0aGUgbWVzc2FnZSB3aWxsIG9ubHkgYmUgcmV3b3VuZCBpZiBhIGNhbGwgdG8gYHRlbGwoKWAKcmV0dXJucyBhIHZhbHVlIG90aGVyIHRoYW4gYDBgLgoKCiMjIGBHdXp6bGVIdHRwXFBzcjdcTWVzc2FnZTo6cGFyc2VNZXNzYWdlYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcGFyc2VNZXNzYWdlKHN0cmluZyAkbWVzc2FnZSk6IGFycmF5YAoKUGFyc2VzIGFuIEhUVFAgbWVzc2FnZSBpbnRvIGFuIGFzc29jaWF0aXZlIGFycmF5LgoKVGhlIGFycmF5IGNvbnRhaW5zIHRoZSAic3RhcnQtbGluZSIga2V5IGNvbnRhaW5pbmcgdGhlIHN0YXJ0IGxpbmUgb2YKdGhlIG1lc3NhZ2UsICJoZWFkZXJzIiBrZXkgY29udGFpbmluZyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBoZWFkZXIKYXJyYXkgdmFsdWVzLCBhbmQgYSAiYm9keSIga2V5IGNvbnRhaW5pbmcgdGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2UuCgoKIyMgYEd1enpsZUh0dHBcUHNyN1xNZXNzYWdlOjpwYXJzZVJlcXVlc3RVcmlgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZVJlcXVlc3RVcmkoc3RyaW5nICRwYXRoLCBhcnJheSAkaGVhZGVycyk6IHN0cmluZ2AKCkNvbnN0cnVjdHMgYSBVUkkgZm9yIGFuIEhUVFAgcmVxdWVzdCBtZXNzYWdlLgoKCiMjIGBHdXp6bGVIdHRwXFBzcjdcTWVzc2FnZTo6cGFyc2VSZXF1ZXN0YAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcGFyc2VSZXF1ZXN0KHN0cmluZyAkbWVzc2FnZSk6IFJlcXVlc3RgCgpQYXJzZXMgYSByZXF1ZXN0IG1lc3NhZ2Ugc3RyaW5nIGludG8gYSByZXF1ZXN0IG9iamVjdC4KCgojIyBgR3V6emxlSHR0cFxQc3I3XE1lc3NhZ2U6OnBhcnNlUmVzcG9uc2VgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZVJlc3BvbnNlKHN0cmluZyAkbWVzc2FnZSk6IFJlc3BvbnNlYAoKUGFyc2VzIGEgcmVzcG9uc2UgbWVzc2FnZSBzdHJpbmcgaW50byBhIHJlc3BvbnNlIG9iamVjdC4KCgojIyBgR3V6emxlSHR0cFxQc3I3XEhlYWRlcjo6cGFyc2VgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZShzdHJpbmd8YXJyYXkgJGhlYWRlcik6IGFycmF5YAoKUGFyc2UgYW4gYXJyYXkgb2YgaGVhZGVyIHZhbHVlcyBjb250YWluaW5nICI7IiBzZXBhcmF0ZWQgZGF0YSBpbnRvIGFuCmFycmF5IG9mIGFzc29jaWF0aXZlIGFycmF5cyByZXByZXNlbnRpbmcgdGhlIGhlYWRlciBrZXkgdmFsdWUgcGFpciBkYXRhCm9mIHRoZSBoZWFkZXIuIFdoZW4gYSBwYXJhbWV0ZXIgZG9lcyBub3QgY29udGFpbiBhIHZhbHVlLCBidXQganVzdApjb250YWlucyBhIGtleSwgdGhpcyBmdW5jdGlvbiB3aWxsIGluamVjdCBhIGtleSB3aXRoIGEgJycgc3RyaW5nIHZhbHVlLgoKCiMjIGBHdXp6bGVIdHRwXFBzcjdcSGVhZGVyOjpzcGxpdExpc3RgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzcGxpdExpc3Qoc3RyaW5nfHN0cmluZ1tdICRoZWFkZXIpOiBzdHJpbmdbXWAKClNwbGl0cyBhIEhUVFAgaGVhZGVyIGRlZmluZWQgdG8gY29udGFpbiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IGludG8KZWFjaCBpbmRpdmlkdWFsIHZhbHVlOgoKYGBgCiRrbm93bkV0YWdzID0gSGVhZGVyOjpzcGxpdExpc3QoJHJlcXVlc3QtPmdldEhlYWRlcignaWYtbm9uZS1tYXRjaCcpKTsKYGBgCgpFeGFtcGxlIGhlYWRlcnMgaW5jbHVkZSBgYWNjZXB0YCwgYGNhY2hlLWNvbnRyb2xgIGFuZCBgaWYtbm9uZS1tYXRjaGAuCgoKIyMgYEd1enpsZUh0dHBcUHNyN1xIZWFkZXI6Om5vcm1hbGl6ZWAgKGRlcHJlY2F0ZWQpCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBub3JtYWxpemUoc3RyaW5nfGFycmF5ICRoZWFkZXIpOiBhcnJheWAKCmBIZWFkZXI6Om5vcm1hbGl6ZSgpYCBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIFtgSGVhZGVyOjpzcGxpdExpc3QoKWBdKFJFQURNRS5tZCNndXp6bGVodHRwcHNyN2hlYWRlcnNwbGl0bGlzdCkKd2hpY2ggcGVyZm9ybXMgdGhlIHNhbWUgb3BlcmF0aW9uIHdpdGggYSBjbGVhbmVkIHVwIEFQSSBhbmQgaW1wcm92ZWQKZG9jdW1lbnRhdGlvbi4KCkNvbnZlcnRzIGFuIGFycmF5IG9mIGhlYWRlciB2YWx1ZXMgdGhhdCBtYXkgY29udGFpbiBjb21tYSBzZXBhcmF0ZWQKaGVhZGVycyBpbnRvIGFuIGFycmF5IG9mIGhlYWRlcnMgd2l0aCBubyBjb21tYSBzZXBhcmF0ZWQgdmFsdWVzLgoKCiMjIGBHdXp6bGVIdHRwXFBzcjdcUXVlcnk6OnBhcnNlYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcGFyc2Uoc3RyaW5nICRzdHIsIGludHxib29sICR1cmxFbmNvZGluZyA9IHRydWUpOiBhcnJheWAKClBhcnNlIGEgcXVlcnkgc3RyaW5nIGludG8gYW4gYXNzb2NpYXRpdmUgYXJyYXkuCgpJZiBtdWx0aXBsZSB2YWx1ZXMgYXJlIGZvdW5kIGZvciB0aGUgc2FtZSBrZXksIHRoZSB2YWx1ZSBvZiB0aGF0IGtleQp2YWx1ZSBwYWlyIHdpbGwgYmVjb21lIGFuIGFycmF5LiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHBhcnNlIG5lc3RlZApQSFAgc3R5bGUgYXJyYXlzIGludG8gYW4gYXNzb2NpYXRpdmUgYXJyYXkgKGUuZy4sIGBmb29bYV09MSZmb29bYl09MmAKd2lsbCBiZSBwYXJzZWQgaW50byBgWydmb29bYV0nID0+ICcxJywgJ2Zvb1tiXScgPT4gJzInXSlgLgoKCiMjIGBHdXp6bGVIdHRwXFBzcjdcUXVlcnk6OmJ1aWxkYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYnVpbGQoYXJyYXkgJHBhcmFtcywgaW50fGZhbHNlICRlbmNvZGluZyA9IFBIUF9RVUVSWV9SRkMzOTg2LCBib29sICR0cmVhdEJvb2xzQXNJbnRzID0gdHJ1ZSk6IHN0cmluZ2AKCkJ1aWxkIGEgcXVlcnkgc3RyaW5nIGZyb20gYW4gYXJyYXkgb2Yga2V5IHZhbHVlIHBhaXJzLgoKVGhpcyBmdW5jdGlvbiBjYW4gdXNlIHRoZSByZXR1cm4gdmFsdWUgb2YgYHBhcnNlKClgIHRvIGJ1aWxkIGEgcXVlcnkKc3RyaW5nLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IG1vZGlmeSB0aGUgcHJvdmlkZWQga2V5cyB3aGVuIGFuIGFycmF5IGlzCmVuY291bnRlcmVkIChsaWtlIGBodHRwX2J1aWxkX3F1ZXJ5KClgIHdvdWxkKS4KCgojIyBgR3V6emxlSHR0cFxQc3I3XFV0aWxzOjpjYXNlbGVzc1JlbW92ZWAKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc2VsZXNzUmVtb3ZlKGl0ZXJhYmxlPHN0cmluZz4gJGtleXMsICRrZXlzLCBhcnJheSAkZGF0YSk6IGFycmF5YAoKUmVtb3ZlIHRoZSBpdGVtcyBnaXZlbiBieSB0aGUga2V5cywgY2FzZSBpbnNlbnNpdGl2ZWx5IGZyb20gdGhlIGRhdGEuCgoKIyMgYEd1enpsZUh0dHBcUHNyN1xVdGlsczo6Y29weVRvU3RyZWFtYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29weVRvU3RyZWFtKFN0cmVhbUludGVyZmFjZSAkc291cmNlLCBTdHJlYW1JbnRlcmZhY2UgJGRlc3QsIGludCAkbWF4TGVuID0gLTEpOiB2b2lkYAoKQ29weSB0aGUgY29udGVudHMgb2YgYSBzdHJlYW0gaW50byBhbm90aGVyIHN0cmVhbSB1bnRpbCB0aGUgZ2l2ZW4gbnVtYmVyCm9mIGJ5dGVzIGhhdmUgYmVlbiByZWFkLgoKCiMjIGBHdXp6bGVIdHRwXFBzcjdcVXRpbHM6OmNvcHlUb1N0cmluZ2AKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvcHlUb1N0cmluZyhTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwgaW50ICRtYXhMZW4gPSAtMSk6IHN0cmluZ2AKCkNvcHkgdGhlIGNvbnRlbnRzIG9mIGEgc3RyZWFtIGludG8gYSBzdHJpbmcgdW50aWwgdGhlIGdpdmVuIG51bWJlciBvZgpieXRlcyBoYXZlIGJlZW4gcmVhZC4KCgojIyBgR3V6emxlSHR0cFxQc3I3XFV0aWxzOjpoYXNoYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGFzaChTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwgc3RyaW5nICRhbGdvLCBib29sICRyYXdPdXRwdXQgPSBmYWxzZSk6IHN0cmluZ2AKCkNhbGN1bGF0ZSBhIGhhc2ggb2YgYSBzdHJlYW0uCgpUaGlzIG1ldGhvZCByZWFkcyB0aGUgZW50aXJlIHN0cmVhbSB0byBjYWxjdWxhdGUgYSByb2xsaW5nIGhhc2gsIGJhc2VkIG9uClBIUCdzIGBoYXNoX2luaXRgIGZ1bmN0aW9ucy4KCgojIyBgR3V6emxlSHR0cFxQc3I3XFV0aWxzOjptb2RpZnlSZXF1ZXN0YAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbW9kaWZ5UmVxdWVzdChSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAkY2hhbmdlcyk6IFJlcXVlc3RJbnRlcmZhY2VgCgpDbG9uZSBhbmQgbW9kaWZ5IGEgcmVxdWVzdCB3aXRoIHRoZSBnaXZlbiBjaGFuZ2VzLgoKVGhpcyBtZXRob2QgaXMgdXNlZnVsIGZvciByZWR1Y2luZyB0aGUgbnVtYmVyIG9mIGNsb25lcyBuZWVkZWQgdG8gbXV0YXRlCmEgbWVzc2FnZS4KCi0gbWV0aG9kOiAoc3RyaW5nKSBDaGFuZ2VzIHRoZSBIVFRQIG1ldGhvZC4KLSBzZXRfaGVhZGVyczogKGFycmF5KSBTZXRzIHRoZSBnaXZlbiBoZWFkZXJzLgotIHJlbW92ZV9oZWFkZXJzOiAoYXJyYXkpIFJlbW92ZSB0aGUgZ2l2ZW4gaGVhZGVycy4KLSBib2R5OiAobWl4ZWQpIFNldHMgdGhlIGdpdmVuIGJvZHkuCi0gdXJpOiAoVXJpSW50ZXJmYWNlKSBTZXQgdGhlIFVSSS4KLSBxdWVyeTogKHN0cmluZykgU2V0IHRoZSBxdWVyeSBzdHJpbmcgdmFsdWUgb2YgdGhlIFVSSS4KLSB2ZXJzaW9uOiAoc3RyaW5nKSBTZXQgdGhlIHByb3RvY29sIHZlcnNpb24uCgoKIyMgYEd1enpsZUh0dHBcUHNyN1xVdGlsczo6cmVhZExpbmVgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWFkTGluZShTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwgP2ludCAkbWF4TGVuZ3RoID0gbnVsbCk6IHN0cmluZ2AKClJlYWQgYSBsaW5lIGZyb20gdGhlIHN0cmVhbSB1cCB0byB0aGUgbWF4aW11bSBhbGxvd2VkIGJ1ZmZlciBsZW5ndGguCgoKIyMgYEd1enpsZUh0dHBcUHNyN1xVdGlsczo6cmVkYWN0VXNlckluZm9gCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWRhY3RVc2VySW5mbyhVcmlJbnRlcmZhY2UgJHVyaSk6IFVyaUludGVyZmFjZWAKClJlZGFjdCB0aGUgcGFzc3dvcmQgaW4gdGhlIHVzZXIgaW5mbyBwYXJ0IG9mIGEgVVJJLgoKCiMjIGBHdXp6bGVIdHRwXFBzcjdcVXRpbHM6OnN0cmVhbUZvcmAKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN0cmVhbUZvcihyZXNvdXJjZXxzdHJpbmd8bnVsbHxpbnR8ZmxvYXR8Ym9vbHxTdHJlYW1JbnRlcmZhY2V8Y2FsbGFibGV8XEl0ZXJhdG9yICRyZXNvdXJjZSA9ICcnLCBhcnJheSAkb3B0aW9ucyA9IFtdKTogU3RyZWFtSW50ZXJmYWNlYAoKQ3JlYXRlIGEgbmV3IHN0cmVhbSBiYXNlZCBvbiB0aGUgaW5wdXQgdHlwZS4KCk9wdGlvbnMgaXMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgdGhhdCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIGtleXM6CgotIG1ldGFkYXRhOiBBcnJheSBvZiBjdXN0b20gbWV0YWRhdGEuCi0gc2l6ZTogU2l6ZSBvZiB0aGUgc3RyZWFtLgoKVGhpcyBtZXRob2QgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGAkcmVzb3VyY2VgIHR5cGVzOgoKLSBgUHNyXEh0dHBcTWVzc2FnZVxTdHJlYW1JbnRlcmZhY2VgOiBSZXR1cm5zIHRoZSB2YWx1ZSBhcy1pcy4KLSBgc3RyaW5nYDogQ3JlYXRlcyBhIHN0cmVhbSBvYmplY3QgdGhhdCB1c2VzIHRoZSBnaXZlbiBzdHJpbmcgYXMgdGhlIGNvbnRlbnRzLgotIGByZXNvdXJjZWA6IENyZWF0ZXMgYSBzdHJlYW0gb2JqZWN0IHRoYXQgd3JhcHMgdGhlIGdpdmVuIFBIUCBzdHJlYW0gcmVzb3VyY2UuCi0gYEl0ZXJhdG9yYDogSWYgdGhlIHByb3ZpZGVkIHZhbHVlIGltcGxlbWVudHMgYEl0ZXJhdG9yYCwgdGhlbiBhIHJlYWQtb25seQogIHN0cmVhbSBvYmplY3Qgd2lsbCBiZSBjcmVhdGVkIHRoYXQgd3JhcHMgdGhlIGdpdmVuIGl0ZXJhYmxlLiBFYWNoIHRpbWUgdGhlCiAgc3RyZWFtIGlzIHJlYWQgZnJvbSwgZGF0YSBmcm9tIHRoZSBpdGVyYXRvciB3aWxsIGZpbGwgYSBidWZmZXIgYW5kIHdpbGwgYmUKICBjb250aW51b3VzbHkgY2FsbGVkIHVudGlsIHRoZSBidWZmZXIgaXMgZXF1YWwgdG8gdGhlIHJlcXVlc3RlZCByZWFkIHNpemUuCiAgU3Vic2VxdWVudCByZWFkIGNhbGxzIHdpbGwgZmlyc3QgcmVhZCBmcm9tIHRoZSBidWZmZXIgYW5kIHRoZW4gY2FsbCBgbmV4dGAKICBvbiB0aGUgdW5kZXJseWluZyBpdGVyYXRvciB1bnRpbCBpdCBpcyBleGhhdXN0ZWQuCi0gYG9iamVjdGAgd2l0aCBgX190b1N0cmluZygpYDogSWYgdGhlIG9iamVjdCBoYXMgdGhlIGBfX3RvU3RyaW5nKClgIG1ldGhvZCwKICB0aGUgb2JqZWN0IHdpbGwgYmUgY2FzdCB0byBhIHN0cmluZyBhbmQgdGhlbiBhIHN0cmVhbSB3aWxsIGJlIHJldHVybmVkIHRoYXQKICB1c2VzIHRoZSBzdHJpbmcgdmFsdWUuCi0gYE5VTExgOiBXaGVuIGBudWxsYCBpcyBwYXNzZWQsIGFuIGVtcHR5IHN0cmVhbSBvYmplY3QgaXMgcmV0dXJuZWQuCi0gYGNhbGxhYmxlYCBXaGVuIGEgY2FsbGFibGUgaXMgcGFzc2VkLCBhIHJlYWQtb25seSBzdHJlYW0gb2JqZWN0IHdpbGwgYmUKICBjcmVhdGVkIHRoYXQgaW52b2tlcyB0aGUgZ2l2ZW4gY2FsbGFibGUuIFRoZSBjYWxsYWJsZSBpcyBpbnZva2VkIHdpdGggdGhlCiAgbnVtYmVyIG9mIHN1Z2dlc3RlZCBieXRlcyB0byByZWFkLiBUaGUgY2FsbGFibGUgY2FuIHJldHVybiBhbnkgbnVtYmVyIG9mCiAgYnl0ZXMsIGJ1dCBNVVNUIHJldHVybiBgZmFsc2VgIHdoZW4gdGhlcmUgaXMgbm8gbW9yZSBkYXRhIHRvIHJldHVybi4gVGhlCiAgc3RyZWFtIG9iamVjdCB0aGF0IHdyYXBzIHRoZSBjYWxsYWJsZSB3aWxsIGludm9rZSB0aGUgY2FsbGFibGUgdW50aWwgdGhlCiAgbnVtYmVyIG9mIHJlcXVlc3RlZCBieXRlcyBhcmUgYXZhaWxhYmxlLiBBbnkgYWRkaXRpb25hbCBieXRlcyB3aWxsIGJlCiAgYnVmZmVyZWQgYW5kIHVzZWQgaW4gc3Vic2VxdWVudCByZWFkcy4KCmBgYHBocAokc3RyZWFtID0gR3V6emxlSHR0cFxQc3I3XFV0aWxzOjpzdHJlYW1Gb3IoJ2ZvbycpOwokc3RyZWFtID0gR3V6emxlSHR0cFxQc3I3XFV0aWxzOjpzdHJlYW1Gb3IoZm9wZW4oJy9wYXRoL3RvL2ZpbGUnLCAncicpKTsKCiRnZW5lcmF0b3IgPSBmdW5jdGlvbiAoJGJ5dGVzKSB7CiAgICBmb3IgKCRpID0gMDsgJGkgPCAkYnl0ZXM7ICRpKyspIHsKICAgICAgICB5aWVsZCAnICc7CiAgICB9Cn0KCiRzdHJlYW0gPSBHdXp6bGVIdHRwXFBzcjdcVXRpbHM6OnN0cmVhbUZvcigkZ2VuZXJhdG9yKDEwMCkpOwpgYGAKCgojIyBgR3V6emxlSHR0cFxQc3I3XFV0aWxzOjp0cnlGb3BlbmAKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRyeUZvcGVuKHN0cmluZyAkZmlsZW5hbWUsIHN0cmluZyAkbW9kZSk6IHJlc291cmNlYAoKU2FmZWx5IG9wZW5zIGEgUEhQIHN0cmVhbSByZXNvdXJjZSB1c2luZyBhIGZpbGVuYW1lLgoKV2hlbiBmb3BlbiBmYWlscywgUEhQIG5vcm1hbGx5IHJhaXNlcyBhIHdhcm5pbmcuIFRoaXMgZnVuY3Rpb24gYWRkcyBhbgplcnJvciBoYW5kbGVyIHRoYXQgY2hlY2tzIGZvciBlcnJvcnMgYW5kIHRocm93cyBhbiBleGNlcHRpb24gaW5zdGVhZC4KCgojIyBgR3V6emxlSHR0cFxQc3I3XFV0aWxzOjp0cnlHZXRDb250ZW50c2AKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRyeUdldENvbnRlbnRzKHJlc291cmNlICRzdHJlYW0pOiBzdHJpbmdgCgpTYWZlbHkgZ2V0cyB0aGUgY29udGVudHMgb2YgYSBnaXZlbiBzdHJlYW0uCgpXaGVuIHN0cmVhbV9nZXRfY29udGVudHMgZmFpbHMsIFBIUCBub3JtYWxseSByYWlzZXMgYSB3YXJuaW5nLiBUaGlzCmZ1bmN0aW9uIGFkZHMgYW4gZXJyb3IgaGFuZGxlciB0aGF0IGNoZWNrcyBmb3IgZXJyb3JzIGFuZCB0aHJvd3MgYW4KZXhjZXB0aW9uIGluc3RlYWQuCgoKIyMgYEd1enpsZUh0dHBcUHNyN1xVdGlsczo6dXJpRm9yYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXJpRm9yKHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSk6IFVyaUludGVyZmFjZWAKClJldHVybnMgYSBVcmlJbnRlcmZhY2UgZm9yIHRoZSBnaXZlbiB2YWx1ZS4KClRoaXMgZnVuY3Rpb24gYWNjZXB0cyBhIHN0cmluZyBvciBVcmlJbnRlcmZhY2UgYW5kIHJldHVybnMgYQpVcmlJbnRlcmZhY2UgZm9yIHRoZSBnaXZlbiB2YWx1ZS4gSWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgYQpVcmlJbnRlcmZhY2UsIGl0IGlzIHJldHVybmVkIGFzLWlzLgoKCiMjIGBHdXp6bGVIdHRwXFBzcjdcTWltZVR5cGU6OmZyb21GaWxlbmFtZWAKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21GaWxlbmFtZShzdHJpbmcgJGZpbGVuYW1lKTogc3RyaW5nfG51bGxgCgpEZXRlcm1pbmVzIHRoZSBtaW1ldHlwZSBvZiBhIGZpbGUgYnkgbG9va2luZyBhdCBpdHMgZXh0ZW5zaW9uLgoKCiMjIGBHdXp6bGVIdHRwXFBzcjdcTWltZVR5cGU6OmZyb21FeHRlbnNpb25gCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tRXh0ZW5zaW9uKHN0cmluZyAkZXh0ZW5zaW9uKTogc3RyaW5nfG51bGxgCgpNYXBzIGEgZmlsZSBleHRlbnNpb25zIHRvIGEgbWltZXR5cGUuCgoKIyMgVXBncmFkaW5nIGZyb20gRnVuY3Rpb24gQVBJCgpUaGUgc3RhdGljIEFQSSB3YXMgZmlyc3QgaW50cm9kdWNlZCBpbiAxLjcuMCwgaW4gb3JkZXIgdG8gbWl0aWdhdGUgcHJvYmxlbXMgd2l0aCBmdW5jdGlvbnMgY29uZmxpY3RpbmcgYmV0d2VlbiBnbG9iYWwgYW5kIGxvY2FsIGNvcGllcyBvZiB0aGUgcGFja2FnZS4gVGhlIGZ1bmN0aW9uIEFQSSB3YXMgcmVtb3ZlZCBpbiAyLjAuMC4gQSBtaWdyYXRpb24gdGFibGUgaGFzIGJlZW4gcHJvdmlkZWQgaGVyZSBmb3IgeW91ciBjb252ZW5pZW5jZToKCnwgT3JpZ2luYWwgRnVuY3Rpb24gfCBSZXBsYWNlbWVudCBNZXRob2QgfAp8LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfAp8IGBzdHJgIHwgYE1lc3NhZ2U6OnRvU3RyaW5nYCB8CnwgYHVyaV9mb3JgIHwgYFV0aWxzOjp1cmlGb3JgIHwKfCBgc3RyZWFtX2ZvcmAgfCBgVXRpbHM6OnN0cmVhbUZvcmAgfAp8IGBwYXJzZV9oZWFkZXJgIHwgYEhlYWRlcjo6cGFyc2VgIHwKfCBgbm9ybWFsaXplX2hlYWRlcmAgfCBgSGVhZGVyOjpub3JtYWxpemVgIHwKfCBgbW9kaWZ5X3JlcXVlc3RgIHwgYFV0aWxzOjptb2RpZnlSZXF1ZXN0YCB8CnwgYHJld2luZF9ib2R5YCB8IGBNZXNzYWdlOjpyZXdpbmRCb2R5YCB8CnwgYHRyeV9mb3BlbmAgfCBgVXRpbHM6OnRyeUZvcGVuYCB8CnwgYGNvcHlfdG9fc3RyaW5nYCB8IGBVdGlsczo6Y29weVRvU3RyaW5nYCB8CnwgYGNvcHlfdG9fc3RyZWFtYCB8IGBVdGlsczo6Y29weVRvU3RyZWFtYCB8CnwgYGhhc2hgIHwgYFV0aWxzOjpoYXNoYCB8CnwgYHJlYWRsaW5lYCB8IGBVdGlsczo6cmVhZExpbmVgIHwKfCBgcGFyc2VfcmVxdWVzdGAgfCBgTWVzc2FnZTo6cGFyc2VSZXF1ZXN0YCB8CnwgYHBhcnNlX3Jlc3BvbnNlYCB8IGBNZXNzYWdlOjpwYXJzZVJlc3BvbnNlYCB8CnwgYHBhcnNlX3F1ZXJ5YCB8IGBRdWVyeTo6cGFyc2VgIHwKfCBgYnVpbGRfcXVlcnlgIHwgYFF1ZXJ5OjpidWlsZGAgfAp8IGBtaW1ldHlwZV9mcm9tX2ZpbGVuYW1lYCB8IGBNaW1lVHlwZTo6ZnJvbUZpbGVuYW1lYCB8CnwgYG1pbWV0eXBlX2Zyb21fZXh0ZW5zaW9uYCB8IGBNaW1lVHlwZTo6ZnJvbUV4dGVuc2lvbmAgfAp8IGBfcGFyc2VfbWVzc2FnZWAgfCBgTWVzc2FnZTo6cGFyc2VNZXNzYWdlYCB8CnwgYF9wYXJzZV9yZXF1ZXN0X3VyaWAgfCBgTWVzc2FnZTo6cGFyc2VSZXF1ZXN0VXJpYCB8CnwgYGdldF9tZXNzYWdlX2JvZHlfc3VtbWFyeWAgfCBgTWVzc2FnZTo6Ym9keVN1bW1hcnlgIHwKfCBgX2Nhc2VsZXNzX3JlbW92ZWAgfCBgVXRpbHM6OmNhc2VsZXNzUmVtb3ZlYCB8CgoKIyBBZGRpdGlvbmFsIFVSSSBNZXRob2RzCgpBc2lkZSBmcm9tIHRoZSBzdGFuZGFyZCBgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2VgIGltcGxlbWVudGF0aW9uIGluIGZvcm0gb2YgdGhlIGBHdXp6bGVIdHRwXFBzcjdcVXJpYCBjbGFzcywKdGhpcyBsaWJyYXJ5IGFsc28gcHJvdmlkZXMgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5IHdoZW4gd29ya2luZyB3aXRoIFVSSXMgYXMgc3RhdGljIG1ldGhvZHMuCgojIyBVUkkgVHlwZXMKCkFuIGluc3RhbmNlIG9mIGBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZWAgY2FuIGVpdGhlciBiZSBhbiBhYnNvbHV0ZSBVUkkgb3IgYSByZWxhdGl2ZSByZWZlcmVuY2UuCkFuIGFic29sdXRlIFVSSSBoYXMgYSBzY2hlbWUuIEEgcmVsYXRpdmUgcmVmZXJlbmNlIGlzIHVzZWQgdG8gZXhwcmVzcyBhIFVSSSByZWxhdGl2ZSB0byBhbm90aGVyIFVSSSwKdGhlIGJhc2UgVVJJLiBSZWxhdGl2ZSByZWZlcmVuY2VzIGNhbiBiZSBkaXZpZGVkIGludG8gc2V2ZXJhbCBmb3JtcyBhY2NvcmRpbmcgdG8KW1JGQyAzOTg2IFNlY3Rpb24gNC4yXShodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzM5ODYjc2VjdGlvbi00LjIpOgoKLSBuZXR3b3JrLXBhdGggcmVmZXJlbmNlcywgZS5nLiBgLy9leGFtcGxlLmNvbS9wYXRoYAotIGFic29sdXRlLXBhdGggcmVmZXJlbmNlcywgZS5nLiBgL3BhdGhgCi0gcmVsYXRpdmUtcGF0aCByZWZlcmVuY2VzLCBlLmcuIGBzdWJwYXRoYAoKVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5IHRoZSB0eXBlIG9mIHRoZSBVUkkuCgojIyMgYEd1enpsZUh0dHBcUHNyN1xVcmk6OmlzQWJzb2x1dGVgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0Fic29sdXRlKFVyaUludGVyZmFjZSAkdXJpKTogYm9vbGAKCldoZXRoZXIgdGhlIFVSSSBpcyBhYnNvbHV0ZSwgaS5lLiBpdCBoYXMgYSBzY2hlbWUuCgojIyMgYEd1enpsZUh0dHBcUHNyN1xVcmk6OmlzTmV0d29ya1BhdGhSZWZlcmVuY2VgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc05ldHdvcmtQYXRoUmVmZXJlbmNlKFVyaUludGVyZmFjZSAkdXJpKTogYm9vbGAKCldoZXRoZXIgdGhlIFVSSSBpcyBhIG5ldHdvcmstcGF0aCByZWZlcmVuY2UuIEEgcmVsYXRpdmUgcmVmZXJlbmNlIHRoYXQgYmVnaW5zIHdpdGggdHdvIHNsYXNoIGNoYXJhY3RlcnMgaXMKdGVybWVkIGFuIG5ldHdvcmstcGF0aCByZWZlcmVuY2UuCgojIyMgYEd1enpsZUh0dHBcUHNyN1xVcmk6OmlzQWJzb2x1dGVQYXRoUmVmZXJlbmNlYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNBYnNvbHV0ZVBhdGhSZWZlcmVuY2UoVXJpSW50ZXJmYWNlICR1cmkpOiBib29sYAoKV2hldGhlciB0aGUgVVJJIGlzIGEgYWJzb2x1dGUtcGF0aCByZWZlcmVuY2UuIEEgcmVsYXRpdmUgcmVmZXJlbmNlIHRoYXQgYmVnaW5zIHdpdGggYSBzaW5nbGUgc2xhc2ggY2hhcmFjdGVyIGlzCnRlcm1lZCBhbiBhYnNvbHV0ZS1wYXRoIHJlZmVyZW5jZS4KCiMjIyBgR3V6emxlSHR0cFxQc3I3XFVyaTo6aXNSZWxhdGl2ZVBhdGhSZWZlcmVuY2VgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc1JlbGF0aXZlUGF0aFJlZmVyZW5jZShVcmlJbnRlcmZhY2UgJHVyaSk6IGJvb2xgCgpXaGV0aGVyIHRoZSBVUkkgaXMgYSByZWxhdGl2ZS1wYXRoIHJlZmVyZW5jZS4gQSByZWxhdGl2ZSByZWZlcmVuY2UgdGhhdCBkb2VzIG5vdCBiZWdpbiB3aXRoIGEgc2xhc2ggY2hhcmFjdGVyIGlzCnRlcm1lZCBhIHJlbGF0aXZlLXBhdGggcmVmZXJlbmNlLgoKIyMjIGBHdXp6bGVIdHRwXFBzcjdcVXJpOjppc1NhbWVEb2N1bWVudFJlZmVyZW5jZWAKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzU2FtZURvY3VtZW50UmVmZXJlbmNlKFVyaUludGVyZmFjZSAkdXJpLCA/VXJpSW50ZXJmYWNlICRiYXNlID0gbnVsbCk6IGJvb2xgCgpXaGV0aGVyIHRoZSBVUkkgaXMgYSBzYW1lLWRvY3VtZW50IHJlZmVyZW5jZS4gQSBzYW1lLWRvY3VtZW50IHJlZmVyZW5jZSByZWZlcnMgdG8gYSBVUkkgdGhhdCBpcywgYXNpZGUgZnJvbSBpdHMKZnJhZ21lbnQgY29tcG9uZW50LCBpZGVudGljYWwgdG8gdGhlIGJhc2UgVVJJLiBXaGVuIG5vIGJhc2UgVVJJIGlzIGdpdmVuLCBvbmx5IGFuIGVtcHR5IFVSSSByZWZlcmVuY2UKKGFwYXJ0IGZyb20gaXRzIGZyYWdtZW50KSBpcyBjb25zaWRlcmVkIGEgc2FtZS1kb2N1bWVudCByZWZlcmVuY2UuCgojIyBVUkkgQ29tcG9uZW50cwoKQWRkaXRpb25hbCBtZXRob2RzIHRvIHdvcmsgd2l0aCBVUkkgY29tcG9uZW50cy4KCiMjIyBgR3V6emxlSHR0cFxQc3I3XFVyaTo6aXNEZWZhdWx0UG9ydGAKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzRGVmYXVsdFBvcnQoVXJpSW50ZXJmYWNlICR1cmkpOiBib29sYAoKV2hldGhlciB0aGUgVVJJIGhhcyB0aGUgZGVmYXVsdCBwb3J0IG9mIHRoZSBjdXJyZW50IHNjaGVtZS4gYFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlOjpnZXRQb3J0YCBtYXkgcmV0dXJuIG51bGwKb3IgdGhlIHN0YW5kYXJkIHBvcnQuIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIGluZGVwZW5kZW50bHkgb2YgdGhlIGltcGxlbWVudGF0aW9uLgoKIyMjIGBHdXp6bGVIdHRwXFBzcjdcVXJpOjpjb21wb3NlQ29tcG9uZW50c2AKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbXBvc2VDb21wb25lbnRzKCRzY2hlbWUsICRhdXRob3JpdHksICRwYXRoLCAkcXVlcnksICRmcmFnbWVudCk6IHN0cmluZ2AKCkNvbXBvc2VzIGEgVVJJIHJlZmVyZW5jZSBzdHJpbmcgZnJvbSBpdHMgdmFyaW91cyBjb21wb25lbnRzIGFjY29yZGluZyB0bwpbUkZDIDM5ODYgU2VjdGlvbiA1LjNdKGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTUuMykuIFVzdWFsbHkgdGhpcyBtZXRob2QgZG9lcyBub3QgbmVlZAp0byBiZSBjYWxsZWQgbWFudWFsbHkgYnV0IGluc3RlYWQgaXMgdXNlZCBpbmRpcmVjdGx5IHZpYSBgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2U6Ol9fdG9TdHJpbmdgLgoKIyMjIGBHdXp6bGVIdHRwXFBzcjdcVXJpOjpmcm9tUGFydHNgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tUGFydHMoYXJyYXkgJHBhcnRzKTogVXJpSW50ZXJmYWNlYAoKQ3JlYXRlcyBhIFVSSSBmcm9tIGEgaGFzaCBvZiBbYHBhcnNlX3VybGBdKGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBhcnNlLXVybC5waHApIGNvbXBvbmVudHMuCgoKIyMjIGBHdXp6bGVIdHRwXFBzcjdcVXJpOjp3aXRoUXVlcnlWYWx1ZWAKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHdpdGhRdWVyeVZhbHVlKFVyaUludGVyZmFjZSAkdXJpLCAka2V5LCAkdmFsdWUpOiBVcmlJbnRlcmZhY2VgCgpDcmVhdGVzIGEgbmV3IFVSSSB3aXRoIGEgc3BlY2lmaWMgcXVlcnkgc3RyaW5nIHZhbHVlLiBBbnkgZXhpc3RpbmcgcXVlcnkgc3RyaW5nIHZhbHVlcyB0aGF0IGV4YWN0bHkgbWF0Y2ggdGhlCnByb3ZpZGVkIGtleSBhcmUgcmVtb3ZlZCBhbmQgcmVwbGFjZWQgd2l0aCB0aGUgZ2l2ZW4ga2V5IHZhbHVlIHBhaXIuIEEgdmFsdWUgb2YgbnVsbCB3aWxsIHNldCB0aGUgcXVlcnkgc3RyaW5nCmtleSB3aXRob3V0IGEgdmFsdWUsIGUuZy4gImtleSIgaW5zdGVhZCBvZiAia2V5PXZhbHVlIi4KCiMjIyBgR3V6emxlSHR0cFxQc3I3XFVyaTo6d2l0aFF1ZXJ5VmFsdWVzYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gd2l0aFF1ZXJ5VmFsdWVzKFVyaUludGVyZmFjZSAkdXJpLCBhcnJheSAka2V5VmFsdWVBcnJheSk6IFVyaUludGVyZmFjZWAKCkNyZWF0ZXMgYSBuZXcgVVJJIHdpdGggbXVsdGlwbGUgcXVlcnkgc3RyaW5nIHZhbHVlcy4gSXQgaGFzIHRoZSBzYW1lIGJlaGF2aW9yIGFzIGB3aXRoUXVlcnlWYWx1ZSgpYCBidXQgZm9yIGFuCmFzc29jaWF0aXZlIGFycmF5IG9mIGtleSA9PiB2YWx1ZS4KCiMjIyBgR3V6emxlSHR0cFxQc3I3XFVyaTo6d2l0aG91dFF1ZXJ5VmFsdWVgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB3aXRob3V0UXVlcnlWYWx1ZShVcmlJbnRlcmZhY2UgJHVyaSwgJGtleSk6IFVyaUludGVyZmFjZWAKCkNyZWF0ZXMgYSBuZXcgVVJJIHdpdGggYSBzcGVjaWZpYyBxdWVyeSBzdHJpbmcgdmFsdWUgcmVtb3ZlZC4gQW55IGV4aXN0aW5nIHF1ZXJ5IHN0cmluZyB2YWx1ZXMgdGhhdCBleGFjdGx5IG1hdGNoIHRoZQpwcm92aWRlZCBrZXkgYXJlIHJlbW92ZWQuCgojIyBDcm9zcy1PcmlnaW4gRGV0ZWN0aW9uCgpgR3V6emxlSHR0cFxQc3I3XFVyaUNvbXBhcmF0b3JgIHByb3ZpZGVzIG1ldGhvZHMgdG8gZGV0ZXJtaW5lIGlmIGEgbW9kaWZpZWQgVVJMIHNob3VsZCBiZSBjb25zaWRlcmVkIGNyb3NzLW9yaWdpbi4KCiMjIyBgR3V6emxlSHR0cFxQc3I3XFVyaUNvbXBhcmF0b3I6OmlzQ3Jvc3NPcmlnaW5gCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0Nyb3NzT3JpZ2luKFVyaUludGVyZmFjZSAkb3JpZ2luYWwsIFVyaUludGVyZmFjZSAkbW9kaWZpZWQpOiBib29sYAoKRGV0ZXJtaW5lcyBpZiBhIG1vZGlmaWVkIFVSTCBzaG91bGQgYmUgY29uc2lkZXJlZCBjcm9zcy1vcmlnaW4gd2l0aCByZXNwZWN0IHRvIGFuIG9yaWdpbmFsIFVSTC4KCiMjIFJlZmVyZW5jZSBSZXNvbHV0aW9uCgpgR3V6emxlSHR0cFxQc3I3XFVyaVJlc29sdmVyYCBwcm92aWRlcyBtZXRob2RzIHRvIHJlc29sdmUgYSBVUkkgcmVmZXJlbmNlIGluIHRoZSBjb250ZXh0IG9mIGEgYmFzZSBVUkkgYWNjb3JkaW5nCnRvIFtSRkMgMzk4NiBTZWN0aW9uIDVdKGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTUpLiBUaGlzIGlzIGZvciBleGFtcGxlIGFsc28gd2hhdCB3ZWIKYnJvd3NlcnMgZG8gd2hlbiByZXNvbHZpbmcgYSBsaW5rIGluIGEgd2Vic2l0ZSBiYXNlZCBvbiB0aGUgY3VycmVudCByZXF1ZXN0IFVSSS4KCiMjIyBgR3V6emxlSHR0cFxQc3I3XFVyaVJlc29sdmVyOjpyZXNvbHZlYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVzb2x2ZShVcmlJbnRlcmZhY2UgJGJhc2UsIFVyaUludGVyZmFjZSAkcmVsKTogVXJpSW50ZXJmYWNlYAoKQ29udmVydHMgdGhlIHJlbGF0aXZlIFVSSSBpbnRvIGEgbmV3IFVSSSB0aGF0IGlzIHJlc29sdmVkIGFnYWluc3QgdGhlIGJhc2UgVVJJLgoKIyMjIGBHdXp6bGVIdHRwXFBzcjdcVXJpUmVzb2x2ZXI6OnJlbW92ZURvdFNlZ21lbnRzYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVtb3ZlRG90U2VnbWVudHMoc3RyaW5nICRwYXRoKTogc3RyaW5nYAoKUmVtb3ZlcyBkb3Qgc2VnbWVudHMgZnJvbSBhIHBhdGggYW5kIHJldHVybnMgdGhlIG5ldyBwYXRoIGFjY29yZGluZyB0bwpbUkZDIDM5ODYgU2VjdGlvbiA1LjIuNF0oaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNS4yLjQpLgoKIyMjIGBHdXp6bGVIdHRwXFBzcjdcVXJpUmVzb2x2ZXI6OnJlbGF0aXZpemVgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWxhdGl2aXplKFVyaUludGVyZmFjZSAkYmFzZSwgVXJpSW50ZXJmYWNlICR0YXJnZXQpOiBVcmlJbnRlcmZhY2VgCgpSZXR1cm5zIHRoZSB0YXJnZXQgVVJJIGFzIGEgcmVsYXRpdmUgcmVmZXJlbmNlIGZyb20gdGhlIGJhc2UgVVJJLiBUaGlzIG1ldGhvZCBpcyB0aGUgY291bnRlcnBhcnQgdG8gcmVzb2x2ZSgpOgoKYGBgcGhwCihzdHJpbmcpICR0YXJnZXQgPT09IChzdHJpbmcpIFVyaVJlc29sdmVyOjpyZXNvbHZlKCRiYXNlLCBVcmlSZXNvbHZlcjo6cmVsYXRpdml6ZSgkYmFzZSwgJHRhcmdldCkpCmBgYAoKT25lIHVzZS1jYXNlIGlzIHRvIHVzZSB0aGUgY3VycmVudCByZXF1ZXN0IFVSSSBhcyBiYXNlIFVSSSBhbmQgdGhlbiBnZW5lcmF0ZSByZWxhdGl2ZSBsaW5rcyBpbiB5b3VyIGRvY3VtZW50cwp0byByZWR1Y2UgdGhlIGRvY3VtZW50IHNpemUgb3Igb2ZmZXIgc2VsZi1jb250YWluZWQgZG93bmxvYWRhYmxlIGRvY3VtZW50IGFyY2hpdmVzLgoKYGBgcGhwCiRiYXNlID0gbmV3IFVyaSgnaHR0cDovL2V4YW1wbGUuY29tL2EvYi8nKTsKZWNobyBVcmlSZXNvbHZlcjo6cmVsYXRpdml6ZSgkYmFzZSwgbmV3IFVyaSgnaHR0cDovL2V4YW1wbGUuY29tL2EvYi9jJykpOyAgLy8gcHJpbnRzICdjJy4KZWNobyBVcmlSZXNvbHZlcjo6cmVsYXRpdml6ZSgkYmFzZSwgbmV3IFVyaSgnaHR0cDovL2V4YW1wbGUuY29tL2EveC95JykpOyAgLy8gcHJpbnRzICcuLi94L3knLgplY2hvIFVyaVJlc29sdmVyOjpyZWxhdGl2aXplKCRiYXNlLCBuZXcgVXJpKCdodHRwOi8vZXhhbXBsZS5jb20vYS9iLz9xJykpOyAvLyBwcmludHMgJz9xJy4KZWNobyBVcmlSZXNvbHZlcjo6cmVsYXRpdml6ZSgkYmFzZSwgbmV3IFVyaSgnaHR0cDovL2V4YW1wbGUub3JnL2EvYi8nKSk7ICAgLy8gcHJpbnRzICcvL2V4YW1wbGUub3JnL2EvYi8nLgpgYGAKCiMjIE5vcm1hbGl6YXRpb24gYW5kIENvbXBhcmlzb24KCmBHdXp6bGVIdHRwXFBzcjdcVXJpTm9ybWFsaXplcmAgcHJvdmlkZXMgbWV0aG9kcyB0byBub3JtYWxpemUgYW5kIGNvbXBhcmUgVVJJcyBhY2NvcmRpbmcgdG8KW1JGQyAzOTg2IFNlY3Rpb24gNl0oaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNikuCgojIyMgYEd1enpsZUh0dHBcUHNyN1xVcmlOb3JtYWxpemVyOjpub3JtYWxpemVgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBub3JtYWxpemUoVXJpSW50ZXJmYWNlICR1cmksICRmbGFncyA9IHNlbGY6OlBSRVNFUlZJTkdfTk9STUFMSVpBVElPTlMpOiBVcmlJbnRlcmZhY2VgCgpSZXR1cm5zIGEgbm9ybWFsaXplZCBVUkkuIFRoZSBzY2hlbWUgYW5kIGhvc3QgY29tcG9uZW50IGFyZSBhbHJlYWR5IG5vcm1hbGl6ZWQgdG8gbG93ZXJjYXNlIHBlciBQU1ItNyBVcmlJbnRlcmZhY2UuClRoaXMgbWV0aG9kcyBhZGRzIGFkZGl0aW9uYWwgbm9ybWFsaXphdGlvbnMgdGhhdCBjYW4gYmUgY29uZmlndXJlZCB3aXRoIHRoZSBgJGZsYWdzYCBwYXJhbWV0ZXIgd2hpY2ggaXMgYSBiaXRtYXNrCm9mIG5vcm1hbGl6YXRpb25zIHRvIGFwcGx5LiBUaGUgZm9sbG93aW5nIG5vcm1hbGl6YXRpb25zIGFyZSBhdmFpbGFibGU6CgotIGBVcmlOb3JtYWxpemVyOjpQUkVTRVJWSU5HX05PUk1BTElaQVRJT05TYAoKICAgIERlZmF1bHQgbm9ybWFsaXphdGlvbnMgd2hpY2ggb25seSBpbmNsdWRlIHRoZSBvbmVzIHRoYXQgcHJlc2VydmUgc2VtYW50aWNzLgoKLSBgVXJpTm9ybWFsaXplcjo6Q0FQSVRBTElaRV9QRVJDRU5UX0VOQ09ESU5HYAoKICAgIEFsbCBsZXR0ZXJzIHdpdGhpbiBhIHBlcmNlbnQtZW5jb2RpbmcgdHJpcGxldCAoZS5nLiwgIiUzQSIpIGFyZSBjYXNlLWluc2Vuc2l0aXZlLCBhbmQgc2hvdWxkIGJlIGNhcGl0YWxpemVkLgoKICAgIEV4YW1wbGU6IGBodHRwOi8vZXhhbXBsZS5vcmcvYSVjMiViMWJgIOKGkiBgaHR0cDovL2V4YW1wbGUub3JnL2ElQzIlQjFiYAoKLSBgVXJpTm9ybWFsaXplcjo6REVDT0RFX1VOUkVTRVJWRURfQ0hBUkFDVEVSU2AKCiAgICBEZWNvZGVzIHBlcmNlbnQtZW5jb2RlZCBvY3RldHMgb2YgdW5yZXNlcnZlZCBjaGFyYWN0ZXJzLiBGb3IgY29uc2lzdGVuY3ksIHBlcmNlbnQtZW5jb2RlZCBvY3RldHMgaW4gdGhlIHJhbmdlcyBvZgogICAgQUxQSEEgKCU0MeKAkyU1QSBhbmQgJTYx4oCTJTdBKSwgRElHSVQgKCUzMOKAkyUzOSksIGh5cGhlbiAoJTJEKSwgcGVyaW9kICglMkUpLCB1bmRlcnNjb3JlICglNUYpLCBvciB0aWxkZSAoJTdFKSBzaG91bGQKICAgIG5vdCBiZSBjcmVhdGVkIGJ5IFVSSSBwcm9kdWNlcnMgYW5kLCB3aGVuIGZvdW5kIGluIGEgVVJJLCBzaG91bGQgYmUgZGVjb2RlZCB0byB0aGVpciBjb3JyZXNwb25kaW5nIHVucmVzZXJ2ZWQKICAgIGNoYXJhY3RlcnMgYnkgVVJJIG5vcm1hbGl6ZXJzLgoKICAgIEV4YW1wbGU6IGBodHRwOi8vZXhhbXBsZS5vcmcvJTdFdXNlcm4lNjFtZS9gIOKGkiBgaHR0cDovL2V4YW1wbGUub3JnL351c2VybmFtZS9gCgotIGBVcmlOb3JtYWxpemVyOjpDT05WRVJUX0VNUFRZX1BBVEhgCgogICAgQ29udmVydHMgdGhlIGVtcHR5IHBhdGggdG8gIi8iIGZvciBodHRwIGFuZCBodHRwcyBVUklzLgoKICAgIEV4YW1wbGU6IGBodHRwOi8vZXhhbXBsZS5vcmdgIOKGkiBgaHR0cDovL2V4YW1wbGUub3JnL2AKCi0gYFVyaU5vcm1hbGl6ZXI6OlJFTU9WRV9ERUZBVUxUX0hPU1RgCgogICAgUmVtb3ZlcyB0aGUgZGVmYXVsdCBob3N0IG9mIHRoZSBnaXZlbiBVUkkgc2NoZW1lIGZyb20gdGhlIFVSSS4gT25seSB0aGUgImZpbGUiIHNjaGVtZSBkZWZpbmVzIHRoZSBkZWZhdWx0IGhvc3QKICAgICJsb2NhbGhvc3QiLiBBbGwgb2YgYGZpbGU6L215ZmlsZWAsIGBmaWxlOi8vL215ZmlsZWAsIGFuZCBgZmlsZTovL2xvY2FsaG9zdC9teWZpbGVgIGFyZSBlcXVpdmFsZW50IGFjY29yZGluZyB0bwogICAgUkZDIDM5ODYuCgogICAgRXhhbXBsZTogYGZpbGU6Ly9sb2NhbGhvc3QvbXlmaWxlYCDihpIgYGZpbGU6Ly8vbXlmaWxlYAoKLSBgVXJpTm9ybWFsaXplcjo6UkVNT1ZFX0RFRkFVTFRfUE9SVGAKCiAgICBSZW1vdmVzIHRoZSBkZWZhdWx0IHBvcnQgb2YgdGhlIGdpdmVuIFVSSSBzY2hlbWUgZnJvbSB0aGUgVVJJLgoKICAgIEV4YW1wbGU6IGBodHRwOi8vZXhhbXBsZS5vcmc6ODAvYCDihpIgYGh0dHA6Ly9leGFtcGxlLm9yZy9gCgotIGBVcmlOb3JtYWxpemVyOjpSRU1PVkVfRE9UX1NFR01FTlRTYAoKICAgIFJlbW92ZXMgdW5uZWNlc3NhcnkgZG90LXNlZ21lbnRzLiBEb3Qtc2VnbWVudHMgaW4gcmVsYXRpdmUtcGF0aCByZWZlcmVuY2VzIGFyZSBub3QgcmVtb3ZlZCBhcyBpdCB3b3VsZAogICAgY2hhbmdlIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIFVSSSByZWZlcmVuY2UuCgogICAgRXhhbXBsZTogYGh0dHA6Ly9leGFtcGxlLm9yZy8uLi9hL2IvLi4vYy8uL2QuaHRtbGAg4oaSIGBodHRwOi8vZXhhbXBsZS5vcmcvYS9jL2QuaHRtbGAKCi0gYFVyaU5vcm1hbGl6ZXI6OlJFTU9WRV9EVVBMSUNBVEVfU0xBU0hFU2AKCiAgICBQYXRocyB3aGljaCBpbmNsdWRlIHR3byBvciBtb3JlIGFkamFjZW50IHNsYXNoZXMgYXJlIGNvbnZlcnRlZCB0byBvbmUuIFdlYnNlcnZlcnMgdXN1YWxseSBpZ25vcmUgZHVwbGljYXRlIHNsYXNoZXMKICAgIGFuZCB0cmVhdCB0aG9zZSBVUklzIGVxdWl2YWxlbnQuIEJ1dCBpbiB0aGVvcnkgdGhvc2UgVVJJcyBkbyBub3QgbmVlZCB0byBiZSBlcXVpdmFsZW50LiBTbyB0aGlzIG5vcm1hbGl6YXRpb24KICAgIG1heSBjaGFuZ2UgdGhlIHNlbWFudGljcy4gRW5jb2RlZCBzbGFzaGVzICglMkYpIGFyZSBub3QgcmVtb3ZlZC4KCiAgICBFeGFtcGxlOiBgaHR0cDovL2V4YW1wbGUub3JnLy9mb28vLy9iYXIuaHRtbGAg4oaSIGBodHRwOi8vZXhhbXBsZS5vcmcvZm9vL2Jhci5odG1sYAoKLSBgVXJpTm9ybWFsaXplcjo6U09SVF9RVUVSWV9QQVJBTUVURVJTYAoKICAgIFNvcnQgcXVlcnkgcGFyYW1ldGVycyB3aXRoIHRoZWlyIHZhbHVlcyBpbiBhbHBoYWJldGljYWwgb3JkZXIuIEhvd2V2ZXIsIHRoZSBvcmRlciBvZiBwYXJhbWV0ZXJzIGluIGEgVVJJIG1heSBiZQogICAgc2lnbmlmaWNhbnQgKHRoaXMgaXMgbm90IGRlZmluZWQgYnkgdGhlIHN0YW5kYXJkKS4gU28gdGhpcyBub3JtYWxpemF0aW9uIGlzIG5vdCBzYWZlIGFuZCBtYXkgY2hhbmdlIHRoZSBzZW1hbnRpY3MKICAgIG9mIHRoZSBVUkkuCgogICAgRXhhbXBsZTogYD9sYW5nPWVuJmFydGljbGU9ZnJlZGAg4oaSIGA/YXJ0aWNsZT1mcmVkJmxhbmc9ZW5gCgojIyMgYEd1enpsZUh0dHBcUHNyN1xVcmlOb3JtYWxpemVyOjppc0VxdWl2YWxlbnRgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0VxdWl2YWxlbnQoVXJpSW50ZXJmYWNlICR1cmkxLCBVcmlJbnRlcmZhY2UgJHVyaTIsICRub3JtYWxpemF0aW9ucyA9IHNlbGY6OlBSRVNFUlZJTkdfTk9STUFMSVpBVElPTlMpOiBib29sYAoKV2hldGhlciB0d28gVVJJcyBjYW4gYmUgY29uc2lkZXJlZCBlcXVpdmFsZW50LiBCb3RoIFVSSXMgYXJlIG5vcm1hbGl6ZWQgYXV0b21hdGljYWxseSBiZWZvcmUgY29tcGFyaXNvbiB3aXRoIHRoZSBnaXZlbgpgJG5vcm1hbGl6YXRpb25zYCBiaXRtYXNrLiBUaGUgbWV0aG9kIGFsc28gYWNjZXB0cyByZWxhdGl2ZSBVUkkgcmVmZXJlbmNlcyBhbmQgcmV0dXJucyB0cnVlIHdoZW4gdGhleSBhcmUgZXF1aXZhbGVudC4KVGhpcyBvZiBjb3Vyc2UgYXNzdW1lcyB0aGV5IHdpbGwgYmUgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgc2FtZSBiYXNlIFVSSS4gSWYgdGhpcyBpcyBub3QgdGhlIGNhc2UsIGRldGVybWluYXRpb24gb2YKZXF1aXZhbGVuY2Ugb3IgZGlmZmVyZW5jZSBvZiByZWxhdGl2ZSByZWZlcmVuY2VzIGRvZXMgbm90IG1lYW4gYW55dGhpbmcuCgoKIyMgU2VjdXJpdHkKCklmIHlvdSBkaXNjb3ZlciBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgd2l0aGluIHRoaXMgcGFja2FnZSwgcGxlYXNlIHNlbmQgYW4gZW1haWwgdG8gc2VjdXJpdHlAdGlkZWxpZnQuY29tLiBBbGwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIHdpbGwgYmUgcHJvbXB0bHkgYWRkcmVzc2VkLiBQbGVhc2UgZG8gbm90IGRpc2Nsb3NlIHNlY3VyaXR5LXJlbGF0ZWQgaXNzdWVzIHB1YmxpY2x5IHVudGlsIGEgZml4IGhhcyBiZWVuIGFubm91bmNlZC4gUGxlYXNlIHNlZSBbU2VjdXJpdHkgUG9saWN5XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3Bzcjcvc2VjdXJpdHkvcG9saWN5KSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCgojIyBMaWNlbnNlCgpHdXp6bGUgaXMgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLiBQbGVhc2Ugc2VlIFtMaWNlbnNlIEZpbGVdKExJQ0VOU0UpIGZvciBtb3JlIGluZm9ybWF0aW9uLgoKCiMjIEZvciBFbnRlcnByaXNlCgpBdmFpbGFibGUgYXMgcGFydCBvZiB0aGUgVGlkZWxpZnQgU3Vic2NyaXB0aW9uCgpUaGUgbWFpbnRhaW5lcnMgb2YgR3V6emxlIGFuZCB0aG91c2FuZHMgb2Ygb3RoZXIgcGFja2FnZXMgYXJlIHdvcmtpbmcgd2l0aCBUaWRlbGlmdCB0byBkZWxpdmVyIGNvbW1lcmNpYWwgc3VwcG9ydCBhbmQgbWFpbnRlbmFuY2UgZm9yIHRoZSBvcGVuIHNvdXJjZSBkZXBlbmRlbmNpZXMgeW91IHVzZSB0byBidWlsZCB5b3VyIGFwcGxpY2F0aW9ucy4gU2F2ZSB0aW1lLCByZWR1Y2UgcmlzaywgYW5kIGltcHJvdmUgY29kZSBoZWFsdGgsIHdoaWxlIHBheWluZyB0aGUgbWFpbnRhaW5lcnMgb2YgdGhlIGV4YWN0IGRlcGVuZGVuY2llcyB5b3UgdXNlLiBbTGVhcm4gbW9yZS5dKGh0dHBzOi8vdGlkZWxpZnQuY29tL3N1YnNjcmlwdGlvbi9wa2cvcGFja2FnaXN0LWd1enpsZWh0dHAtcHNyNz91dG1fc291cmNlPXBhY2thZ2lzdC1ndXp6bGVodHRwLXBzcjcmdXRtX21lZGl1bT1yZWZlcnJhbCZ1dG1fY2FtcGFpZ249ZW50ZXJwcmlzZSZ1dG1fdGVybT1yZXBvKQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/AppendStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBSZWFkcyBmcm9tIG11bHRpcGxlIHN0cmVhbXMsIG9uZSBhZnRlciB0aGUgb3RoZXIuCiAqCiAqIFRoaXMgaXMgYSByZWFkLW9ubHkgc3RyZWFtIGRlY29yYXRvci4KICovCmZpbmFsIGNsYXNzIEFwcGVuZFN0cmVhbSBpbXBsZW1lbnRzIFN0cmVhbUludGVyZmFjZQp7CiAgICAvKiogQHZhciBTdHJlYW1JbnRlcmZhY2VbXSBTdHJlYW1zIGJlaW5nIGRlY29yYXRlZCAqLwogICAgcHJpdmF0ZSAkc3RyZWFtcyA9IFtdOwoKICAgIC8qKiBAdmFyIGJvb2wgKi8KICAgIHByaXZhdGUgJHNlZWthYmxlID0gdHJ1ZTsKCiAgICAvKiogQHZhciBpbnQgKi8KICAgIHByaXZhdGUgJGN1cnJlbnQgPSAwOwoKICAgIC8qKiBAdmFyIGludCAqLwogICAgcHJpdmF0ZSAkcG9zID0gMDsKCiAgICAvKioKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2VbXSAkc3RyZWFtcyBTdHJlYW1zIHRvIGRlY29yYXRlLiBFYWNoIHN0cmVhbSBtdXN0CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgcmVhZGFibGUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkc3RyZWFtcyA9IFtdKQogICAgewogICAgICAgIGZvcmVhY2ggKCRzdHJlYW1zIGFzICRzdHJlYW0pIHsKICAgICAgICAgICAgJHRoaXMtPmFkZFN0cmVhbSgkc3RyZWFtKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKTogc3RyaW5nCiAgICB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHRoaXMtPnJld2luZCgpOwoKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRDb250ZW50cygpOwogICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgaWYgKFxQSFBfVkVSU0lPTl9JRCA+PSA3MDQwMCkgewogICAgICAgICAgICAgICAgdGhyb3cgJGU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdHJpZ2dlcl9lcnJvcihzcHJpbnRmKCclczo6X190b1N0cmluZyBleGNlcHRpb246ICVzJywgc2VsZjo6Y2xhc3MsIChzdHJpbmcpICRlKSwgRV9VU0VSX0VSUk9SKTsKCiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGQgYSBzdHJlYW0gdG8gdGhlIEFwcGVuZFN0cmVhbQogICAgICoKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSBTdHJlYW0gdG8gYXBwZW5kLiBNdXN0IGJlIHJlYWRhYmxlLgogICAgICoKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgc3RyZWFtIGlzIG5vdCByZWFkYWJsZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkU3RyZWFtKFN0cmVhbUludGVyZmFjZSAkc3RyZWFtKTogdm9pZAogICAgewogICAgICAgIGlmICghJHN0cmVhbS0+aXNSZWFkYWJsZSgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdFYWNoIHN0cmVhbSBtdXN0IGJlIHJlYWRhYmxlJyk7CiAgICAgICAgfQoKICAgICAgICAvLyBUaGUgc3RyZWFtIGlzIG9ubHkgc2Vla2FibGUgaWYgYWxsIHN0cmVhbXMgYXJlIHNlZWthYmxlCiAgICAgICAgaWYgKCEkc3RyZWFtLT5pc1NlZWthYmxlKCkpIHsKICAgICAgICAgICAgJHRoaXMtPnNlZWthYmxlID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+c3RyZWFtc1tdID0gJHN0cmVhbTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudHMoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIFV0aWxzOjpjb3B5VG9TdHJpbmcoJHRoaXMpOwogICAgfQoKICAgIC8qKgogICAgICogQ2xvc2VzIGVhY2ggYXR0YWNoZWQgc3RyZWFtLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5wb3MgPSAkdGhpcy0+Y3VycmVudCA9IDA7CiAgICAgICAgJHRoaXMtPnNlZWthYmxlID0gdHJ1ZTsKCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnN0cmVhbXMgYXMgJHN0cmVhbSkgewogICAgICAgICAgICAkc3RyZWFtLT5jbG9zZSgpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnN0cmVhbXMgPSBbXTsKICAgIH0KCiAgICAvKioKICAgICAqIERldGFjaGVzIGVhY2ggYXR0YWNoZWQgc3RyZWFtLgogICAgICoKICAgICAqIFJldHVybnMgbnVsbCBhcyBpdCdzIG5vdCBjbGVhciB3aGljaCB1bmRlcmx5aW5nIHN0cmVhbSByZXNvdXJjZSB0byByZXR1cm4uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZXRhY2goKQogICAgewogICAgICAgICR0aGlzLT5wb3MgPSAkdGhpcy0+Y3VycmVudCA9IDA7CiAgICAgICAgJHRoaXMtPnNlZWthYmxlID0gdHJ1ZTsKCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnN0cmVhbXMgYXMgJHN0cmVhbSkgewogICAgICAgICAgICAkc3RyZWFtLT5kZXRhY2goKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5zdHJlYW1zID0gW107CgogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZWxsKCk6IGludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cG9zOwogICAgfQoKICAgIC8qKgogICAgICogVHJpZXMgdG8gY2FsY3VsYXRlIHRoZSBzaXplIGJ5IGFkZGluZyB0aGUgc2l6ZSBvZiBlYWNoIHN0cmVhbS4KICAgICAqCiAgICAgKiBJZiBhbnkgb2YgdGhlIHN0cmVhbXMgZG8gbm90IHJldHVybiBhIHZhbGlkIG51bWJlciwgdGhlbiB0aGUgc2l6ZSBvZiB0aGUKICAgICAqIGFwcGVuZCBzdHJlYW0gY2Fubm90IGJlIGRldGVybWluZWQgYW5kIG51bGwgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaXplKCk6ID9pbnQKICAgIHsKICAgICAgICAkc2l6ZSA9IDA7CgogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5zdHJlYW1zIGFzICRzdHJlYW0pIHsKICAgICAgICAgICAgJHMgPSAkc3RyZWFtLT5nZXRTaXplKCk7CiAgICAgICAgICAgIGlmICgkcyA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHNpemUgKz0gJHM7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHNpemU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGVvZigpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICEkdGhpcy0+c3RyZWFtcwogICAgICAgICAgICB8fCAoJHRoaXMtPmN1cnJlbnQgPj0gY291bnQoJHRoaXMtPnN0cmVhbXMpIC0gMQogICAgICAgICAgICAgJiYgJHRoaXMtPnN0cmVhbXNbJHRoaXMtPmN1cnJlbnRdLT5lb2YoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPnNlZWsoMCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBdHRlbXB0cyB0byBzZWVrIHRvIHRoZSBnaXZlbiBwb3NpdGlvbi4gT25seSBzdXBwb3J0cyBTRUVLX1NFVC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlZWsoJG9mZnNldCwgJHdoZW5jZSA9IFNFRUtfU0VUKTogdm9pZAogICAgewogICAgICAgIGlmICghJHRoaXMtPnNlZWthYmxlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVGhpcyBBcHBlbmRTdHJlYW0gaXMgbm90IHNlZWthYmxlJyk7CiAgICAgICAgfSBlbHNlaWYgKCR3aGVuY2UgIT09IFNFRUtfU0VUKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVGhlIEFwcGVuZFN0cmVhbSBjYW4gb25seSBzZWVrIHdpdGggU0VFS19TRVQnKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5wb3MgPSAkdGhpcy0+Y3VycmVudCA9IDA7CgogICAgICAgIC8vIFJld2luZCBlYWNoIHN0cmVhbQogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5zdHJlYW1zIGFzICRpID0+ICRzdHJlYW0pIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICRzdHJlYW0tPnJld2luZCgpOwogICAgICAgICAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1VuYWJsZSB0byBzZWVrIHN0cmVhbSAnCiAgICAgICAgICAgICAgICAgICAgLiRpLicgb2YgdGhlIEFwcGVuZFN0cmVhbScsIDAsICRlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gU2VlayB0byB0aGUgYWN0dWFsIHBvc2l0aW9uIGJ5IHJlYWRpbmcgZnJvbSBlYWNoIHN0cmVhbQogICAgICAgIHdoaWxlICgkdGhpcy0+cG9zIDwgJG9mZnNldCAmJiAhJHRoaXMtPmVvZigpKSB7CiAgICAgICAgICAgICRyZXN1bHQgPSAkdGhpcy0+cmVhZChtaW4oODA5NiwgJG9mZnNldCAtICR0aGlzLT5wb3MpKTsKICAgICAgICAgICAgaWYgKCRyZXN1bHQgPT09ICcnKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJlYWRzIGZyb20gYWxsIG9mIHRoZSBhcHBlbmRlZCBzdHJlYW1zIHVudGlsIHRoZSBsZW5ndGggaXMgbWV0IG9yIEVPRi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlYWQoJGxlbmd0aCk6IHN0cmluZwogICAgewogICAgICAgICRidWZmZXIgPSAnJzsKICAgICAgICAkdG90YWwgPSBjb3VudCgkdGhpcy0+c3RyZWFtcykgLSAxOwogICAgICAgICRyZW1haW5pbmcgPSAkbGVuZ3RoOwogICAgICAgICRwcm9ncmVzc1RvTmV4dCA9IGZhbHNlOwoKICAgICAgICB3aGlsZSAoJHJlbWFpbmluZyA+IDApIHsKICAgICAgICAgICAgLy8gUHJvZ3Jlc3MgdG8gdGhlIG5leHQgc3RyZWFtIGlmIG5lZWRlZC4KICAgICAgICAgICAgaWYgKCRwcm9ncmVzc1RvTmV4dCB8fCAkdGhpcy0+c3RyZWFtc1skdGhpcy0+Y3VycmVudF0tPmVvZigpKSB7CiAgICAgICAgICAgICAgICAkcHJvZ3Jlc3NUb05leHQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+Y3VycmVudCA9PT0gJHRvdGFsKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICArKyR0aGlzLT5jdXJyZW50OwogICAgICAgICAgICB9CgogICAgICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPnN0cmVhbXNbJHRoaXMtPmN1cnJlbnRdLT5yZWFkKCRyZW1haW5pbmcpOwoKICAgICAgICAgICAgaWYgKCRyZXN1bHQgPT09ICcnKSB7CiAgICAgICAgICAgICAgICAkcHJvZ3Jlc3NUb05leHQgPSB0cnVlOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRidWZmZXIgLj0gJHJlc3VsdDsKICAgICAgICAgICAgJHJlbWFpbmluZyA9ICRsZW5ndGggLSBzdHJsZW4oJGJ1ZmZlcik7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+cG9zICs9IHN0cmxlbigkYnVmZmVyKTsKCiAgICAgICAgcmV0dXJuICRidWZmZXI7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzUmVhZGFibGUoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1dyaXRhYmxlKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzU2Vla2FibGUoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c2Vla2FibGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlKCRzdHJpbmcpOiBpbnQKICAgIHsKICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0Nhbm5vdCB3cml0ZSB0byBhbiBBcHBlbmRTdHJlYW0nKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1ldGFkYXRhKCRrZXkgPSBudWxsKQogICAgewogICAgICAgIHJldHVybiAka2V5ID8gbnVsbCA6IFtdOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/BufferStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBQcm92aWRlcyBhIGJ1ZmZlciBzdHJlYW0gdGhhdCBjYW4gYmUgd3JpdHRlbiB0byB0byBmaWxsIGEgYnVmZmVyLCBhbmQgcmVhZAogKiBmcm9tIHRvIHJlbW92ZSBieXRlcyBmcm9tIHRoZSBidWZmZXIuCiAqCiAqIFRoaXMgc3RyZWFtIHJldHVybnMgYSAiaHdtIiBtZXRhZGF0YSB2YWx1ZSB0aGF0IHRlbGxzIHVwc3RyZWFtIGNvbnN1bWVycwogKiB3aGF0IHRoZSBjb25maWd1cmVkIGhpZ2ggd2F0ZXIgbWFyayBvZiB0aGUgc3RyZWFtIGlzLCBvciB0aGUgbWF4aW11bQogKiBwcmVmZXJyZWQgc2l6ZSBvZiB0aGUgYnVmZmVyLgogKi8KZmluYWwgY2xhc3MgQnVmZmVyU3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIC8qKiBAdmFyIGludCAqLwogICAgcHJpdmF0ZSAkaHdtOwoKICAgIC8qKiBAdmFyIHN0cmluZyAqLwogICAgcHJpdmF0ZSAkYnVmZmVyID0gJyc7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICRod20gSGlnaCB3YXRlciBtYXJrLCByZXByZXNlbnRpbmcgdGhlIHByZWZlcnJlZCBtYXhpbXVtCiAgICAgKiAgICAgICAgICAgICAgICAgYnVmZmVyIHNpemUuIElmIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgZXhjZWVkcyB0aGUgaGlnaAogICAgICogICAgICAgICAgICAgICAgIHdhdGVyIG1hcmssIHRoZW4gY2FsbHMgdG8gd3JpdGUgd2lsbCBjb250aW51ZSB0byBzdWNjZWVkCiAgICAgKiAgICAgICAgICAgICAgICAgYnV0IHdpbGwgcmV0dXJuIDAgdG8gaW5mb3JtIHdyaXRlcnMgdG8gc2xvdyBkb3duCiAgICAgKiAgICAgICAgICAgICAgICAgdW50aWwgdGhlIGJ1ZmZlciBoYXMgYmVlbiBkcmFpbmVkIGJ5IHJlYWRpbmcgZnJvbSBpdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGludCAkaHdtID0gMTYzODQpCiAgICB7CiAgICAgICAgJHRoaXMtPmh3bSA9ICRod207CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRDb250ZW50cygpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50cygpOiBzdHJpbmcKICAgIHsKICAgICAgICAkYnVmZmVyID0gJHRoaXMtPmJ1ZmZlcjsKICAgICAgICAkdGhpcy0+YnVmZmVyID0gJyc7CgogICAgICAgIHJldHVybiAkYnVmZmVyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjbG9zZSgpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmJ1ZmZlciA9ICcnOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkZXRhY2goKQogICAgewogICAgICAgICR0aGlzLT5jbG9zZSgpOwoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2l6ZSgpOiA/aW50CiAgICB7CiAgICAgICAgcmV0dXJuIHN0cmxlbigkdGhpcy0+YnVmZmVyKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNSZWFkYWJsZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzV3JpdGFibGUoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1NlZWthYmxlKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPnNlZWsoMCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNlZWsoJG9mZnNldCwgJHdoZW5jZSA9IFNFRUtfU0VUKTogdm9pZAogICAgewogICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQ2Fubm90IHNlZWsgYSBCdWZmZXJTdHJlYW0nKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZW9mKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gc3RybGVuKCR0aGlzLT5idWZmZXIpID09PSAwOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZWxsKCk6IGludAogICAgewogICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQ2Fubm90IGRldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYSBCdWZmZXJTdHJlYW0nKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlYWRzIGRhdGEgZnJvbSB0aGUgYnVmZmVyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVhZCgkbGVuZ3RoKTogc3RyaW5nCiAgICB7CiAgICAgICAgJGN1cnJlbnRMZW5ndGggPSBzdHJsZW4oJHRoaXMtPmJ1ZmZlcik7CgogICAgICAgIGlmICgkbGVuZ3RoID49ICRjdXJyZW50TGVuZ3RoKSB7CiAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gc2xpY2UgdGhlIGJ1ZmZlciBiZWNhdXNlIHdlIGRvbid0IGhhdmUgZW5vdWdoIGRhdGEuCiAgICAgICAgICAgICRyZXN1bHQgPSAkdGhpcy0+YnVmZmVyOwogICAgICAgICAgICAkdGhpcy0+YnVmZmVyID0gJyc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gU2xpY2UgdXAgdGhlIHJlc3VsdCB0byBwcm92aWRlIGEgc3Vic2V0IG9mIHRoZSBidWZmZXIuCiAgICAgICAgICAgICRyZXN1bHQgPSBzdWJzdHIoJHRoaXMtPmJ1ZmZlciwgMCwgJGxlbmd0aCk7CiAgICAgICAgICAgICR0aGlzLT5idWZmZXIgPSBzdWJzdHIoJHRoaXMtPmJ1ZmZlciwgJGxlbmd0aCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICAvKioKICAgICAqIFdyaXRlcyBkYXRhIHRvIHRoZSBidWZmZXIuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3cml0ZSgkc3RyaW5nKTogaW50CiAgICB7CiAgICAgICAgJHRoaXMtPmJ1ZmZlciAuPSAkc3RyaW5nOwoKICAgICAgICBpZiAoc3RybGVuKCR0aGlzLT5idWZmZXIpID49ICR0aGlzLT5od20pIHsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc3RybGVuKCRzdHJpbmcpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWV0YWRhdGEoJGtleSA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCRrZXkgPT09ICdod20nKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+aHdtOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRrZXkgPyBudWxsIDogW107CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/CachingStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBTdHJlYW0gZGVjb3JhdG9yIHRoYXQgY2FuIGNhY2hlIHByZXZpb3VzbHkgcmVhZCBieXRlcyBmcm9tIGEgc2VxdWVudGlhbGx5CiAqIHJlYWQgc3RyZWFtLgogKi8KZmluYWwgY2xhc3MgQ2FjaGluZ1N0cmVhbSBpbXBsZW1lbnRzIFN0cmVhbUludGVyZmFjZQp7CiAgICB1c2UgU3RyZWFtRGVjb3JhdG9yVHJhaXQ7CgogICAgLyoqIEB2YXIgU3RyZWFtSW50ZXJmYWNlIFN0cmVhbSBiZWluZyB3cmFwcGVkICovCiAgICBwcml2YXRlICRyZW1vdGVTdHJlYW07CgogICAgLyoqIEB2YXIgaW50IE51bWJlciBvZiBieXRlcyB0byBza2lwIHJlYWRpbmcgZHVlIHRvIGEgd3JpdGUgb24gdGhlIGJ1ZmZlciAqLwogICAgcHJpdmF0ZSAkc2tpcFJlYWRCeXRlcyA9IDA7CgogICAgLyoqCiAgICAgKiBAdmFyIFN0cmVhbUludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRzdHJlYW07CgogICAgLyoqCiAgICAgKiBXZSB3aWxsIHRyZWF0IHRoZSBidWZmZXIgb2JqZWN0IGFzIHRoZSBib2R5IG9mIHRoZSBzdHJlYW0KICAgICAqCiAgICAgKiBAcGFyYW0gU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0gU3RyZWFtIHRvIGNhY2hlLiBUaGUgY3Vyc29yIGlzIGFzc3VtZWQgdG8gYmUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyZWFtLgogICAgICogQHBhcmFtIFN0cmVhbUludGVyZmFjZSAkdGFyZ2V0IE9wdGlvbmFsbHkgc3BlY2lmeSB3aGVyZSBkYXRhIGlzIGNhY2hlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0sCiAgICAgICAgP1N0cmVhbUludGVyZmFjZSAkdGFyZ2V0ID0gbnVsbAogICAgKSB7CiAgICAgICAgJHRoaXMtPnJlbW90ZVN0cmVhbSA9ICRzdHJlYW07CiAgICAgICAgJHRoaXMtPnN0cmVhbSA9ICR0YXJnZXQgPzogbmV3IFN0cmVhbShVdGlsczo6dHJ5Rm9wZW4oJ3BocDovL3RlbXAnLCAncisnKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFNpemUoKTogP2ludAogICAgewogICAgICAgICRyZW1vdGVTaXplID0gJHRoaXMtPnJlbW90ZVN0cmVhbS0+Z2V0U2l6ZSgpOwoKICAgICAgICBpZiAobnVsbCA9PT0gJHJlbW90ZVNpemUpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbWF4KCR0aGlzLT5zdHJlYW0tPmdldFNpemUoKSwgJHJlbW90ZVNpemUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5zZWVrKDApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZWVrKCRvZmZzZXQsICR3aGVuY2UgPSBTRUVLX1NFVCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoJHdoZW5jZSA9PT0gU0VFS19TRVQpIHsKICAgICAgICAgICAgJGJ5dGUgPSAkb2Zmc2V0OwogICAgICAgIH0gZWxzZWlmICgkd2hlbmNlID09PSBTRUVLX0NVUikgewogICAgICAgICAgICAkYnl0ZSA9ICRvZmZzZXQgKyAkdGhpcy0+dGVsbCgpOwogICAgICAgIH0gZWxzZWlmICgkd2hlbmNlID09PSBTRUVLX0VORCkgewogICAgICAgICAgICAkc2l6ZSA9ICR0aGlzLT5yZW1vdGVTdHJlYW0tPmdldFNpemUoKTsKICAgICAgICAgICAgaWYgKCRzaXplID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAkc2l6ZSA9ICR0aGlzLT5jYWNoZUVudGlyZVN0cmVhbSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRieXRlID0gJHNpemUgKyAkb2Zmc2V0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIHdoZW5jZScpOwogICAgICAgIH0KCiAgICAgICAgJGRpZmYgPSAkYnl0ZSAtICR0aGlzLT5zdHJlYW0tPmdldFNpemUoKTsKCiAgICAgICAgaWYgKCRkaWZmID4gMCkgewogICAgICAgICAgICAvLyBSZWFkIHRoZSByZW1vdGVTdHJlYW0gdW50aWwgd2UgaGF2ZSByZWFkIGluIGF0IGxlYXN0IHRoZSBhbW91bnQKICAgICAgICAgICAgLy8gb2YgYnl0ZXMgcmVxdWVzdGVkLCBvciB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBmaWxlLgogICAgICAgICAgICB3aGlsZSAoJGRpZmYgPiAwICYmICEkdGhpcy0+cmVtb3RlU3RyZWFtLT5lb2YoKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPnJlYWQoJGRpZmYpOwogICAgICAgICAgICAgICAgJGRpZmYgPSAkYnl0ZSAtICR0aGlzLT5zdHJlYW0tPmdldFNpemUoKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFdlIGNhbiBqdXN0IGRvIGEgbm9ybWFsIHNlZWsgc2luY2Ugd2UndmUgYWxyZWFkeSBzZWVuIHRoaXMgYnl0ZS4KICAgICAgICAgICAgJHRoaXMtPnN0cmVhbS0+c2VlaygkYnl0ZSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkKCRsZW5ndGgpOiBzdHJpbmcKICAgIHsKICAgICAgICAvLyBQZXJmb3JtIGEgcmVndWxhciByZWFkIG9uIGFueSBwcmV2aW91c2x5IHJlYWQgZGF0YSBmcm9tIHRoZSBidWZmZXIKICAgICAgICAkZGF0YSA9ICR0aGlzLT5zdHJlYW0tPnJlYWQoJGxlbmd0aCk7CiAgICAgICAgJHJlbWFpbmluZyA9ICRsZW5ndGggLSBzdHJsZW4oJGRhdGEpOwoKICAgICAgICAvLyBNb3JlIGRhdGEgd2FzIHJlcXVlc3RlZCBzbyByZWFkIGZyb20gdGhlIHJlbW90ZSBzdHJlYW0KICAgICAgICBpZiAoJHJlbWFpbmluZykgewogICAgICAgICAgICAvLyBJZiBkYXRhIHdhcyB3cml0dGVuIHRvIHRoZSBidWZmZXIgaW4gYSBwb3NpdGlvbiB0aGF0IHdvdWxkIGhhdmUKICAgICAgICAgICAgLy8gYmVlbiBmaWxsZWQgZnJvbSB0aGUgcmVtb3RlIHN0cmVhbSwgdGhlbiB3ZSBtdXN0IHNraXAgYnl0ZXMgb24KICAgICAgICAgICAgLy8gdGhlIHJlbW90ZSBzdHJlYW0gdG8gZW11bGF0ZSBvdmVyd3JpdGluZyBieXRlcyBmcm9tIHRoYXQKICAgICAgICAgICAgLy8gcG9zaXRpb24uIFRoaXMgbWltaWNzIHRoZSBiZWhhdmlvciBvZiBvdGhlciBQSFAgc3RyZWFtIHdyYXBwZXJzLgogICAgICAgICAgICAkcmVtb3RlRGF0YSA9ICR0aGlzLT5yZW1vdGVTdHJlYW0tPnJlYWQoCiAgICAgICAgICAgICAgICAkcmVtYWluaW5nICsgJHRoaXMtPnNraXBSZWFkQnl0ZXMKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICgkdGhpcy0+c2tpcFJlYWRCeXRlcykgewogICAgICAgICAgICAgICAgJGxlbiA9IHN0cmxlbigkcmVtb3RlRGF0YSk7CiAgICAgICAgICAgICAgICAkcmVtb3RlRGF0YSA9IHN1YnN0cigkcmVtb3RlRGF0YSwgJHRoaXMtPnNraXBSZWFkQnl0ZXMpOwogICAgICAgICAgICAgICAgJHRoaXMtPnNraXBSZWFkQnl0ZXMgPSBtYXgoMCwgJHRoaXMtPnNraXBSZWFkQnl0ZXMgLSAkbGVuKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGRhdGEgLj0gJHJlbW90ZURhdGE7CiAgICAgICAgICAgICR0aGlzLT5zdHJlYW0tPndyaXRlKCRyZW1vdGVEYXRhKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkZGF0YTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGUoJHN0cmluZyk6IGludAogICAgewogICAgICAgIC8vIFdoZW4gYXBwZW5kaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnRseSByZWFkIHN0cmVhbSwgeW91J2xsIHdhbnQKICAgICAgICAvLyB0byBza2lwIGJ5dGVzIGZyb20gYmVpbmcgcmVhZCBmcm9tIHRoZSByZW1vdGUgc3RyZWFtIHRvIGVtdWxhdGUKICAgICAgICAvLyBvdGhlciBzdHJlYW0gd3JhcHBlcnMuIEJhc2ljYWxseSByZXBsYWNpbmcgYnl0ZXMgb2YgZGF0YSBvZiBhIGZpeGVkCiAgICAgICAgLy8gbGVuZ3RoLgogICAgICAgICRvdmVyZmxvdyA9IChzdHJsZW4oJHN0cmluZykgKyAkdGhpcy0+dGVsbCgpKSAtICR0aGlzLT5yZW1vdGVTdHJlYW0tPnRlbGwoKTsKICAgICAgICBpZiAoJG92ZXJmbG93ID4gMCkgewogICAgICAgICAgICAkdGhpcy0+c2tpcFJlYWRCeXRlcyArPSAkb3ZlcmZsb3c7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+d3JpdGUoJHN0cmluZyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGVvZigpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdHJlYW0tPmVvZigpICYmICR0aGlzLT5yZW1vdGVTdHJlYW0tPmVvZigpOwogICAgfQoKICAgIC8qKgogICAgICogQ2xvc2UgYm90aCB0aGUgcmVtb3RlIHN0cmVhbSBhbmQgYnVmZmVyIHN0cmVhbQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5yZW1vdGVTdHJlYW0tPmNsb3NlKCk7CiAgICAgICAgJHRoaXMtPnN0cmVhbS0+Y2xvc2UoKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNhY2hlRW50aXJlU3RyZWFtKCk6IGludAogICAgewogICAgICAgICR0YXJnZXQgPSBuZXcgRm5TdHJlYW0oWyd3cml0ZScgPT4gJ3N0cmxlbiddKTsKICAgICAgICBVdGlsczo6Y29weVRvU3RyZWFtKCR0aGlzLCAkdGFyZ2V0KTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT50ZWxsKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/DroppingStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBTdHJlYW0gZGVjb3JhdG9yIHRoYXQgYmVnaW5zIGRyb3BwaW5nIGRhdGEgb25jZSB0aGUgc2l6ZSBvZiB0aGUgdW5kZXJseWluZwogKiBzdHJlYW0gYmVjb21lcyB0b28gZnVsbC4KICovCmZpbmFsIGNsYXNzIERyb3BwaW5nU3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIHVzZSBTdHJlYW1EZWNvcmF0b3JUcmFpdDsKCiAgICAvKiogQHZhciBpbnQgKi8KICAgIHByaXZhdGUgJG1heExlbmd0aDsKCiAgICAvKiogQHZhciBTdHJlYW1JbnRlcmZhY2UgKi8KICAgIHByaXZhdGUgJHN0cmVhbTsKCiAgICAvKioKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSAgICBVbmRlcmx5aW5nIHN0cmVhbSB0byBkZWNvcmF0ZS4KICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAgICAgJG1heExlbmd0aCBNYXhpbXVtIHNpemUgYmVmb3JlIGRyb3BwaW5nIGRhdGEuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwgaW50ICRtYXhMZW5ndGgpCiAgICB7CiAgICAgICAgJHRoaXMtPnN0cmVhbSA9ICRzdHJlYW07CiAgICAgICAgJHRoaXMtPm1heExlbmd0aCA9ICRtYXhMZW5ndGg7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlKCRzdHJpbmcpOiBpbnQKICAgIHsKICAgICAgICAkZGlmZiA9ICR0aGlzLT5tYXhMZW5ndGggLSAkdGhpcy0+c3RyZWFtLT5nZXRTaXplKCk7CgogICAgICAgIC8vIEJlZ2luIHJldHVybmluZyAwIHdoZW4gdGhlIHVuZGVybHlpbmcgc3RyZWFtIGlzIHRvbyBsYXJnZS4KICAgICAgICBpZiAoJGRpZmYgPD0gMCkgewogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CgogICAgICAgIC8vIFdyaXRlIHRoZSBzdHJlYW0gb3IgYSBzdWJzZXQgb2YgdGhlIHN0cmVhbSBpZiBuZWVkZWQuCiAgICAgICAgaWYgKHN0cmxlbigkc3RyaW5nKSA8ICRkaWZmKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtLT53cml0ZSgkc3RyaW5nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtLT53cml0ZShzdWJzdHIoJHN0cmluZywgMCwgJGRpZmYpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/Exception/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/Exception/MalformedUriException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyN1xFeGNlcHRpb247Cgp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwoKLyoqCiAqIEV4Y2VwdGlvbiB0aHJvd24gaWYgYSBVUkkgY2Fubm90IGJlIHBhcnNlZCBiZWNhdXNlIGl0J3MgbWFsZm9ybWVkLgogKi8KY2xhc3MgTWFsZm9ybWVkVXJpRXhjZXB0aW9uIGV4dGVuZHMgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/FnStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBDb21wb3NlIHN0cmVhbSBpbXBsZW1lbnRhdGlvbnMgYmFzZWQgb24gYSBoYXNoIG9mIGZ1bmN0aW9ucy4KICoKICogQWxsb3dzIGZvciBlYXN5IHRlc3RpbmcgYW5kIGV4dGVuc2lvbiBvZiBhIHByb3ZpZGVkIHN0cmVhbSB3aXRob3V0IG5lZWRpbmcKICogdG8gY3JlYXRlIGEgY29uY3JldGUgY2xhc3MgZm9yIGEgc2ltcGxlIGV4dGVuc2lvbiBwb2ludC4KICovCiNbXEFsbG93RHluYW1pY1Byb3BlcnRpZXNdCmZpbmFsIGNsYXNzIEZuU3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIHByaXZhdGUgY29uc3QgU0xPVFMgPSBbCiAgICAgICAgJ19fdG9TdHJpbmcnLCAnY2xvc2UnLCAnZGV0YWNoJywgJ3Jld2luZCcsCiAgICAgICAgJ2dldFNpemUnLCAndGVsbCcsICdlb2YnLCAnaXNTZWVrYWJsZScsICdzZWVrJywgJ2lzV3JpdGFibGUnLCAnd3JpdGUnLAogICAgICAgICdpc1JlYWRhYmxlJywgJ3JlYWQnLCAnZ2V0Q29udGVudHMnLCAnZ2V0TWV0YWRhdGEnLAogICAgXTsKCiAgICAvKiogQHZhciBhcnJheTxzdHJpbmcsIGNhbGxhYmxlPiAqLwogICAgcHJpdmF0ZSAkbWV0aG9kczsKCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheTxzdHJpbmcsIGNhbGxhYmxlPiAkbWV0aG9kcyBIYXNoIG9mIG1ldGhvZCBuYW1lIHRvIGEgY2FsbGFibGUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkbWV0aG9kcykKICAgIHsKICAgICAgICAkdGhpcy0+bWV0aG9kcyA9ICRtZXRob2RzOwoKICAgICAgICAvLyBDcmVhdGUgdGhlIGZ1bmN0aW9ucyBvbiB0aGUgY2xhc3MKICAgICAgICBmb3JlYWNoICgkbWV0aG9kcyBhcyAkbmFtZSA9PiAkZm4pIHsKICAgICAgICAgICAgJHRoaXMtPnsnX2ZuXycuJG5hbWV9ID0gJGZuOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIExhemlseSBkZXRlcm1pbmUgd2hpY2ggbWV0aG9kcyBhcmUgbm90IGltcGxlbWVudGVkLgogICAgICoKICAgICAqIEB0aHJvd3MgXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fZ2V0KHN0cmluZyAkbmFtZSk6IHZvaWQKICAgIHsKICAgICAgICB0aHJvdyBuZXcgXEJhZE1ldGhvZENhbGxFeGNlcHRpb24oc3RyX3JlcGxhY2UoJ19mbl8nLCAnJywgJG5hbWUpCiAgICAgICAgICAgIC4nKCkgaXMgbm90IGltcGxlbWVudGVkIGluIHRoZSBGblN0cmVhbScpOwogICAgfQoKICAgIC8qKgogICAgICogVGhlIGNsb3NlIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIHVuZGVybHlpbmcgc3RyZWFtIG9ubHkgaWYgcG9zc2libGUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2Rlc3RydWN0KCkKICAgIHsKICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPl9mbl9jbG9zZSkpIHsKICAgICAgICAgICAgKCR0aGlzLT5fZm5fY2xvc2UpKCk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQW4gdW5zZXJpYWxpemUgd291bGQgYWxsb3cgdGhlIF9fZGVzdHJ1Y3QgdG8gcnVuIHdoZW4gdGhlIHVuc2VyaWFsaXplZCB2YWx1ZSBnb2VzIG91dCBvZiBzY29wZS4KICAgICAqCiAgICAgKiBAdGhyb3dzIFxMb2dpY0V4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX193YWtldXAoKTogdm9pZAogICAgewogICAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ0ZuU3RyZWFtIHNob3VsZCBuZXZlciBiZSB1bnNlcmlhbGl6ZWQnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZHMgY3VzdG9tIGZ1bmN0aW9uYWxpdHkgdG8gYW4gdW5kZXJseWluZyBzdHJlYW0gYnkgaW50ZXJjZXB0aW5nCiAgICAgKiBzcGVjaWZpYyBtZXRob2QgY2FsbHMuCiAgICAgKgogICAgICogQHBhcmFtIFN0cmVhbUludGVyZmFjZSAgICAgICAgICRzdHJlYW0gIFN0cmVhbSB0byBkZWNvcmF0ZQogICAgICogQHBhcmFtIGFycmF5PHN0cmluZywgY2FsbGFibGU+ICRtZXRob2RzIEhhc2ggb2YgbWV0aG9kIG5hbWUgdG8gYSBjbG9zdXJlCiAgICAgKgogICAgICogQHJldHVybiBGblN0cmVhbQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlY29yYXRlKFN0cmVhbUludGVyZmFjZSAkc3RyZWFtLCBhcnJheSAkbWV0aG9kcykKICAgIHsKICAgICAgICAvLyBJZiBhbnkgb2YgdGhlIHJlcXVpcmVkIG1ldGhvZHMgd2VyZSBub3QgcHJvdmlkZWQsIHRoZW4gc2ltcGx5CiAgICAgICAgLy8gcHJveHkgdG8gdGhlIGRlY29yYXRlZCBzdHJlYW0uCiAgICAgICAgZm9yZWFjaCAoYXJyYXlfZGlmZihzZWxmOjpTTE9UUywgYXJyYXlfa2V5cygkbWV0aG9kcykpIGFzICRkaWZmKSB7CiAgICAgICAgICAgIC8qKiBAdmFyIGNhbGxhYmxlICRjYWxsYWJsZSAqLwogICAgICAgICAgICAkY2FsbGFibGUgPSBbJHN0cmVhbSwgJGRpZmZdOwogICAgICAgICAgICAkbWV0aG9kc1skZGlmZl0gPSAkY2FsbGFibGU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJG1ldGhvZHMpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIC8qKiBAdmFyIHN0cmluZyAqLwogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5fZm5fX190b1N0cmluZykoKTsKICAgICAgICB9IGNhdGNoIChcVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgIGlmIChcUEhQX1ZFUlNJT05fSUQgPj0gNzA0MDApIHsKICAgICAgICAgICAgICAgIHRocm93ICRlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRyaWdnZXJfZXJyb3Ioc3ByaW50ZignJXM6Ol9fdG9TdHJpbmcgZXhjZXB0aW9uOiAlcycsIHNlbGY6OmNsYXNzLCAoc3RyaW5nKSAkZSksIEVfVVNFUl9FUlJPUik7CgogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjbG9zZSgpOiB2b2lkCiAgICB7CiAgICAgICAgKCR0aGlzLT5fZm5fY2xvc2UpKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGRldGFjaCgpCiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+X2ZuX2RldGFjaCkoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2l6ZSgpOiA/aW50CiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+X2ZuX2dldFNpemUpKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlbGwoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+X2ZuX3RlbGwpKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGVvZigpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+X2ZuX2VvZikoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNTZWVrYWJsZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+X2ZuX2lzU2Vla2FibGUpKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpOiB2b2lkCiAgICB7CiAgICAgICAgKCR0aGlzLT5fZm5fcmV3aW5kKSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZWVrKCRvZmZzZXQsICR3aGVuY2UgPSBTRUVLX1NFVCk6IHZvaWQKICAgIHsKICAgICAgICAoJHRoaXMtPl9mbl9zZWVrKSgkb2Zmc2V0LCAkd2hlbmNlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNXcml0YWJsZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+X2ZuX2lzV3JpdGFibGUpKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlKCRzdHJpbmcpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gKCR0aGlzLT5fZm5fd3JpdGUpKCRzdHJpbmcpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1JlYWRhYmxlKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gKCR0aGlzLT5fZm5faXNSZWFkYWJsZSkoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVhZCgkbGVuZ3RoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+X2ZuX3JlYWQpKCRsZW5ndGgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50cygpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gKCR0aGlzLT5fZm5fZ2V0Q29udGVudHMpKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNZXRhZGF0YSgka2V5ID0gbnVsbCkKICAgIHsKICAgICAgICByZXR1cm4gKCR0aGlzLT5fZm5fZ2V0TWV0YWRhdGEpKCRrZXkpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/Header.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCmZpbmFsIGNsYXNzIEhlYWRlcgp7CiAgICAvKioKICAgICAqIFBhcnNlIGFuIGFycmF5IG9mIGhlYWRlciB2YWx1ZXMgY29udGFpbmluZyAiOyIgc2VwYXJhdGVkIGRhdGEgaW50byBhbgogICAgICogYXJyYXkgb2YgYXNzb2NpYXRpdmUgYXJyYXlzIHJlcHJlc2VudGluZyB0aGUgaGVhZGVyIGtleSB2YWx1ZSBwYWlyIGRhdGEKICAgICAqIG9mIHRoZSBoZWFkZXIuIFdoZW4gYSBwYXJhbWV0ZXIgZG9lcyBub3QgY29udGFpbiBhIHZhbHVlLCBidXQganVzdAogICAgICogY29udGFpbnMgYSBrZXksIHRoaXMgZnVuY3Rpb24gd2lsbCBpbmplY3QgYSBrZXkgd2l0aCBhICcnIHN0cmluZyB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGFycmF5ICRoZWFkZXIgSGVhZGVyIHRvIHBhcnNlIGludG8gY29tcG9uZW50cy4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZSgkaGVhZGVyKTogYXJyYXkKICAgIHsKICAgICAgICBzdGF0aWMgJHRyaW1tZWQgPSAiXCInICBcblx0XHIiOwogICAgICAgICRwYXJhbXMgPSAkbWF0Y2hlcyA9IFtdOwoKICAgICAgICBmb3JlYWNoICgoYXJyYXkpICRoZWFkZXIgYXMgJHZhbHVlKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKHNlbGY6OnNwbGl0TGlzdCgkdmFsdWUpIGFzICR2YWwpIHsKICAgICAgICAgICAgICAgICRwYXJ0ID0gW107CiAgICAgICAgICAgICAgICBmb3JlYWNoIChwcmVnX3NwbGl0KCcvOyg/PShbXiJdKiJbXiJdKiIpKlteIl0qJCkvJywgJHZhbCkgPzogW10gYXMgJGt2cCkgewogICAgICAgICAgICAgICAgICAgIGlmIChwcmVnX21hdGNoX2FsbCgnLzxbXj5dKz58W149XSsvJywgJGt2cCwgJG1hdGNoZXMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRtID0gJG1hdGNoZXNbMF07CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkbVsxXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJ0W3RyaW0oJG1bMF0sICR0cmltbWVkKV0gPSB0cmltKCRtWzFdLCAkdHJpbW1lZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFydFtdID0gdHJpbSgkbVswXSwgJHRyaW1tZWQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCRwYXJ0KSB7CiAgICAgICAgICAgICAgICAgICAgJHBhcmFtc1tdID0gJHBhcnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkcGFyYW1zOwogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydHMgYW4gYXJyYXkgb2YgaGVhZGVyIHZhbHVlcyB0aGF0IG1heSBjb250YWluIGNvbW1hIHNlcGFyYXRlZAogICAgICogaGVhZGVycyBpbnRvIGFuIGFycmF5IG9mIGhlYWRlcnMgd2l0aCBubyBjb21tYSBzZXBhcmF0ZWQgdmFsdWVzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8YXJyYXkgJGhlYWRlciBIZWFkZXIgdG8gbm9ybWFsaXplLgogICAgICoKICAgICAqIEBkZXByZWNhdGVkIFVzZSBzZWxmOjpzcGxpdExpc3QoKSBpbnN0ZWFkLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5vcm1hbGl6ZSgkaGVhZGVyKTogYXJyYXkKICAgIHsKICAgICAgICAkcmVzdWx0ID0gW107CiAgICAgICAgZm9yZWFjaCAoKGFycmF5KSAkaGVhZGVyIGFzICR2YWx1ZSkgewogICAgICAgICAgICBmb3JlYWNoIChzZWxmOjpzcGxpdExpc3QoJHZhbHVlKSBhcyAkcGFyc2VkKSB7CiAgICAgICAgICAgICAgICAkcmVzdWx0W10gPSAkcGFyc2VkOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICAvKioKICAgICAqIFNwbGl0cyBhIEhUVFAgaGVhZGVyIGRlZmluZWQgdG8gY29udGFpbiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IGludG8KICAgICAqIGVhY2ggaW5kaXZpZHVhbCB2YWx1ZS4gRW1wdHkgdmFsdWVzIHdpbGwgYmUgcmVtb3ZlZC4KICAgICAqCiAgICAgKiBFeGFtcGxlIGhlYWRlcnMgaW5jbHVkZSAnYWNjZXB0JywgJ2NhY2hlLWNvbnRyb2wnIGFuZCAnaWYtbm9uZS1tYXRjaCcuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgbXVzdCBub3QgYmUgdXNlZCB0byBwYXJzZSBoZWFkZXJzIHRoYXQgYXJlIG5vdCBkZWZpbmVkIGFzCiAgICAgKiBhIGxpc3QsIHN1Y2ggYXMgJ3VzZXItYWdlbnQnIG9yICdzZXQtY29va2llJy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfHN0cmluZ1tdICR2YWx1ZXMgSGVhZGVyIHZhbHVlIGFzIHJldHVybmVkIGJ5IE1lc3NhZ2VJbnRlcmZhY2U6OmdldEhlYWRlcigpCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNwbGl0TGlzdCgkdmFsdWVzKTogYXJyYXkKICAgIHsKICAgICAgICBpZiAoIVxpc19hcnJheSgkdmFsdWVzKSkgewogICAgICAgICAgICAkdmFsdWVzID0gWyR2YWx1ZXNdOwogICAgICAgIH0KCiAgICAgICAgJHJlc3VsdCA9IFtdOwogICAgICAgIGZvcmVhY2ggKCR2YWx1ZXMgYXMgJHZhbHVlKSB7CiAgICAgICAgICAgIGlmICghXGlzX3N0cmluZygkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXFR5cGVFcnJvcignJGhlYWRlciBtdXN0IGVpdGhlciBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBjb250YWluaW5nIHN0cmluZ3MuJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR2ID0gJyc7CiAgICAgICAgICAgICRpc1F1b3RlZCA9IGZhbHNlOwogICAgICAgICAgICAkaXNFc2NhcGVkID0gZmFsc2U7CiAgICAgICAgICAgIGZvciAoJGkgPSAwLCAkbWF4ID0gXHN0cmxlbigkdmFsdWUpOyAkaSA8ICRtYXg7ICsrJGkpIHsKICAgICAgICAgICAgICAgIGlmICgkaXNFc2NhcGVkKSB7CiAgICAgICAgICAgICAgICAgICAgJHYgLj0gJHZhbHVlWyRpXTsKICAgICAgICAgICAgICAgICAgICAkaXNFc2NhcGVkID0gZmFsc2U7CgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghJGlzUXVvdGVkICYmICR2YWx1ZVskaV0gPT09ICcsJykgewogICAgICAgICAgICAgICAgICAgICR2ID0gXHRyaW0oJHYpOwogICAgICAgICAgICAgICAgICAgIGlmICgkdiAhPT0gJycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdFtdID0gJHY7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkdiA9ICcnOwogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkaXNRdW90ZWQgJiYgJHZhbHVlWyRpXSA9PT0gJ1xcJykgewogICAgICAgICAgICAgICAgICAgICRpc0VzY2FwZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICR2IC49ICR2YWx1ZVskaV07CgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCR2YWx1ZVskaV0gPT09ICciJykgewogICAgICAgICAgICAgICAgICAgICRpc1F1b3RlZCA9ICEkaXNRdW90ZWQ7CiAgICAgICAgICAgICAgICAgICAgJHYgLj0gJHZhbHVlWyRpXTsKCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHYgLj0gJHZhbHVlWyRpXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHYgPSBcdHJpbSgkdik7CiAgICAgICAgICAgIGlmICgkdiAhPT0gJycpIHsKICAgICAgICAgICAgICAgICRyZXN1bHRbXSA9ICR2OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/HttpFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RGYWN0b3J5SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXNwb25zZUZhY3RvcnlJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxTZXJ2ZXJSZXF1ZXN0RmFjdG9yeUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcU2VydmVyUmVxdWVzdEludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcU3RyZWFtRmFjdG9yeUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcU3RyZWFtSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxVcGxvYWRlZEZpbGVGYWN0b3J5SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxVcGxvYWRlZEZpbGVJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFVyaUZhY3RvcnlJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZTsKCi8qKgogKiBJbXBsZW1lbnRzIGFsbCBvZiB0aGUgUFNSLTE3IGludGVyZmFjZXMuCiAqCiAqIE5vdGU6IGluIGNvbnN1bWluZyBjb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRvIHJlcXVpcmUgdGhlIGltcGxlbWVudGVkIGludGVyZmFjZXMKICogYW5kIGluamVjdCB0aGUgaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBtdWx0aXBsZSB0aW1lcy4KICovCmZpbmFsIGNsYXNzIEh0dHBGYWN0b3J5IGltcGxlbWVudHMgUmVxdWVzdEZhY3RvcnlJbnRlcmZhY2UsIFJlc3BvbnNlRmFjdG9yeUludGVyZmFjZSwgU2VydmVyUmVxdWVzdEZhY3RvcnlJbnRlcmZhY2UsIFN0cmVhbUZhY3RvcnlJbnRlcmZhY2UsIFVwbG9hZGVkRmlsZUZhY3RvcnlJbnRlcmZhY2UsIFVyaUZhY3RvcnlJbnRlcmZhY2UKewogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZVVwbG9hZGVkRmlsZSgKICAgICAgICBTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwKICAgICAgICA/aW50ICRzaXplID0gbnVsbCwKICAgICAgICBpbnQgJGVycm9yID0gXFVQTE9BRF9FUlJfT0ssCiAgICAgICAgP3N0cmluZyAkY2xpZW50RmlsZW5hbWUgPSBudWxsLAogICAgICAgID9zdHJpbmcgJGNsaWVudE1lZGlhVHlwZSA9IG51bGwKICAgICk6IFVwbG9hZGVkRmlsZUludGVyZmFjZSB7CiAgICAgICAgaWYgKCRzaXplID09PSBudWxsKSB7CiAgICAgICAgICAgICRzaXplID0gJHN0cmVhbS0+Z2V0U2l6ZSgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBVcGxvYWRlZEZpbGUoJHN0cmVhbSwgJHNpemUsICRlcnJvciwgJGNsaWVudEZpbGVuYW1lLCAkY2xpZW50TWVkaWFUeXBlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlU3RyZWFtKHN0cmluZyAkY29udGVudCA9ICcnKTogU3RyZWFtSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuIFV0aWxzOjpzdHJlYW1Gb3IoJGNvbnRlbnQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVTdHJlYW1Gcm9tRmlsZShzdHJpbmcgJGZpbGUsIHN0cmluZyAkbW9kZSA9ICdyJyk6IFN0cmVhbUludGVyZmFjZQogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRyZXNvdXJjZSA9IFV0aWxzOjp0cnlGb3BlbigkZmlsZSwgJG1vZGUpOwogICAgICAgIH0gY2F0Y2ggKFxSdW50aW1lRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIGlmICgnJyA9PT0gJG1vZGUgfHwgZmFsc2UgPT09IFxpbl9hcnJheSgkbW9kZVswXSwgWydyJywgJ3cnLCAnYScsICd4JywgJ2MnXSwgdHJ1ZSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoJ0ludmFsaWQgZmlsZSBvcGVuaW5nIG1vZGUgIiVzIicsICRtb2RlKSwgMCwgJGUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0aHJvdyAkZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBVdGlsczo6c3RyZWFtRm9yKCRyZXNvdXJjZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZVN0cmVhbUZyb21SZXNvdXJjZSgkcmVzb3VyY2UpOiBTdHJlYW1JbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gVXRpbHM6OnN0cmVhbUZvcigkcmVzb3VyY2UpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVTZXJ2ZXJSZXF1ZXN0KHN0cmluZyAkbWV0aG9kLCAkdXJpLCBhcnJheSAkc2VydmVyUGFyYW1zID0gW10pOiBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlCiAgICB7CiAgICAgICAgaWYgKGVtcHR5KCRtZXRob2QpKSB7CiAgICAgICAgICAgIGlmICghZW1wdHkoJHNlcnZlclBhcmFtc1snUkVRVUVTVF9NRVRIT0QnXSkpIHsKICAgICAgICAgICAgICAgICRtZXRob2QgPSAkc2VydmVyUGFyYW1zWydSRVFVRVNUX01FVEhPRCddOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0Nhbm5vdCBkZXRlcm1pbmUgSFRUUCBtZXRob2QnKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBTZXJ2ZXJSZXF1ZXN0KCRtZXRob2QsICR1cmksIFtdLCBudWxsLCAnMS4xJywgJHNlcnZlclBhcmFtcyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZVJlc3BvbnNlKGludCAkY29kZSA9IDIwMCwgc3RyaW5nICRyZWFzb25QaHJhc2UgPSAnJyk6IFJlc3BvbnNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZSgkY29kZSwgW10sIG51bGwsICcxLjEnLCAkcmVhc29uUGhyYXNlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlUmVxdWVzdChzdHJpbmcgJG1ldGhvZCwgJHVyaSk6IFJlcXVlc3RJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gbmV3IFJlcXVlc3QoJG1ldGhvZCwgJHVyaSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZVVyaShzdHJpbmcgJHVyaSA9ICcnKTogVXJpSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBVcmkoJHVyaSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/InflateStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBVc2VzIFBIUCdzIHpsaWIuaW5mbGF0ZSBmaWx0ZXIgdG8gaW5mbGF0ZSB6bGliIChIVFRQIGRlZmxhdGUsIFJGQzE5NTApIG9yIGd6aXBwZWQgKFJGQzE5NTIpIGNvbnRlbnQuCiAqCiAqIFRoaXMgc3RyZWFtIGRlY29yYXRvciBjb252ZXJ0cyB0aGUgcHJvdmlkZWQgc3RyZWFtIHRvIGEgUEhQIHN0cmVhbSByZXNvdXJjZSwKICogdGhlbiBhcHBlbmRzIHRoZSB6bGliLmluZmxhdGUgZmlsdGVyLiBUaGUgc3RyZWFtIGlzIHRoZW4gY29udmVydGVkIGJhY2sKICogdG8gYSBHdXp6bGUgc3RyZWFtIHJlc291cmNlIHRvIGJlIHVzZWQgYXMgYSBHdXp6bGUgc3RyZWFtLgogKgogKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMTk1MAogKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMTk1MgogKiBAc2VlIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2ZpbHRlcnMuY29tcHJlc3Npb24ucGhwCiAqLwpmaW5hbCBjbGFzcyBJbmZsYXRlU3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIHVzZSBTdHJlYW1EZWNvcmF0b3JUcmFpdDsKCiAgICAvKiogQHZhciBTdHJlYW1JbnRlcmZhY2UgKi8KICAgIHByaXZhdGUgJHN0cmVhbTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0pCiAgICB7CiAgICAgICAgJHJlc291cmNlID0gU3RyZWFtV3JhcHBlcjo6Z2V0UmVzb3VyY2UoJHN0cmVhbSk7CiAgICAgICAgLy8gU3BlY2lmeSB3aW5kb3c9MTUrMzIsIHNvIHpsaWIgd2lsbCB1c2UgaGVhZGVyIGRldGVjdGlvbiB0byBib3RoIGd6aXAgKHdpdGggaGVhZGVyKSBhbmQgemxpYiBkYXRhCiAgICAgICAgLy8gU2VlIGh0dHBzOi8vd3d3LnpsaWIubmV0L21hbnVhbC5odG1sI0FkdmFuY2VkIGRlZmluaXRpb24gb2YgaW5mbGF0ZUluaXQyCiAgICAgICAgLy8gIkFkZCAzMiB0byB3aW5kb3dCaXRzIHRvIGVuYWJsZSB6bGliIGFuZCBnemlwIGRlY29kaW5nIHdpdGggYXV0b21hdGljIGhlYWRlciBkZXRlY3Rpb24iCiAgICAgICAgLy8gRGVmYXVsdCB3aW5kb3cgc2l6ZSBpcyAxNS4KICAgICAgICBzdHJlYW1fZmlsdGVyX2FwcGVuZCgkcmVzb3VyY2UsICd6bGliLmluZmxhdGUnLCBTVFJFQU1fRklMVEVSX1JFQUQsIFsnd2luZG93JyA9PiAxNSArIDMyXSk7CiAgICAgICAgJHRoaXMtPnN0cmVhbSA9ICRzdHJlYW0tPmlzU2Vla2FibGUoKSA/IG5ldyBTdHJlYW0oJHJlc291cmNlKSA6IG5ldyBOb1NlZWtTdHJlYW0obmV3IFN0cmVhbSgkcmVzb3VyY2UpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/LazyOpenStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBMYXppbHkgcmVhZHMgb3Igd3JpdGVzIHRvIGEgZmlsZSB0aGF0IGlzIG9wZW5lZCBvbmx5IGFmdGVyIGFuIElPIG9wZXJhdGlvbgogKiB0YWtlIHBsYWNlIG9uIHRoZSBzdHJlYW0uCiAqLwpmaW5hbCBjbGFzcyBMYXp5T3BlblN0cmVhbSBpbXBsZW1lbnRzIFN0cmVhbUludGVyZmFjZQp7CiAgICB1c2UgU3RyZWFtRGVjb3JhdG9yVHJhaXQ7CgogICAgLyoqIEB2YXIgc3RyaW5nICovCiAgICBwcml2YXRlICRmaWxlbmFtZTsKCiAgICAvKiogQHZhciBzdHJpbmcgKi8KICAgIHByaXZhdGUgJG1vZGU7CgogICAgLyoqCiAgICAgKiBAdmFyIFN0cmVhbUludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRzdHJlYW07CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBGaWxlIHRvIGxhemlseSBvcGVuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtb2RlICAgICBmb3BlbiBtb2RlIHRvIHVzZSB3aGVuIG9wZW5pbmcgdGhlIHN0cmVhbQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRmaWxlbmFtZSwgc3RyaW5nICRtb2RlKQogICAgewogICAgICAgICR0aGlzLT5maWxlbmFtZSA9ICRmaWxlbmFtZTsKICAgICAgICAkdGhpcy0+bW9kZSA9ICRtb2RlOwoKICAgICAgICAvLyB1bnNldHRpbmcgdGhlIHByb3BlcnR5IGZvcmNlcyB0aGUgZmlyc3QgYWNjZXNzIHRvIGdvIHRocm91Z2gKICAgICAgICAvLyBfX2dldCgpLgogICAgICAgIHVuc2V0KCR0aGlzLT5zdHJlYW0pOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlcyB0aGUgdW5kZXJseWluZyBzdHJlYW0gbGF6aWx5IHdoZW4gcmVxdWlyZWQuCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjcmVhdGVTdHJlYW0oKTogU3RyZWFtSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuIFV0aWxzOjpzdHJlYW1Gb3IoVXRpbHM6OnRyeUZvcGVuKCR0aGlzLT5maWxlbmFtZSwgJHRoaXMtPm1vZGUpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/LimitStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBEZWNvcmF0b3IgdXNlZCB0byByZXR1cm4gb25seSBhIHN1YnNldCBvZiBhIHN0cmVhbS4KICovCmZpbmFsIGNsYXNzIExpbWl0U3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIHVzZSBTdHJlYW1EZWNvcmF0b3JUcmFpdDsKCiAgICAvKiogQHZhciBpbnQgT2Zmc2V0IHRvIHN0YXJ0IHJlYWRpbmcgZnJvbSAqLwogICAgcHJpdmF0ZSAkb2Zmc2V0OwoKICAgIC8qKiBAdmFyIGludCBMaW1pdCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY2FuIGJlIHJlYWQgKi8KICAgIHByaXZhdGUgJGxpbWl0OwoKICAgIC8qKiBAdmFyIFN0cmVhbUludGVyZmFjZSAqLwogICAgcHJpdmF0ZSAkc3RyZWFtOwoKICAgIC8qKgogICAgICogQHBhcmFtIFN0cmVhbUludGVyZmFjZSAkc3RyZWFtIFN0cmVhbSB0byB3cmFwCiAgICAgKiBAcGFyYW0gaW50ICAgICAgICAgICAgICRsaW1pdCAgVG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRvIGFsbG93IHRvIGJlIHJlYWQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBzdHJlYW0uIFBhc3MgLTEgZm9yIG5vIGxpbWl0LgogICAgICogQHBhcmFtIGludCAgICAgICAgICAgICAkb2Zmc2V0IFBvc2l0aW9uIHRvIHNlZWsgdG8gYmVmb3JlIHJlYWRpbmcgKG9ubHkKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrcyBvbiBzZWVrYWJsZSBzdHJlYW1zKS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgIFN0cmVhbUludGVyZmFjZSAkc3RyZWFtLAogICAgICAgIGludCAkbGltaXQgPSAtMSwKICAgICAgICBpbnQgJG9mZnNldCA9IDAKICAgICkgewogICAgICAgICR0aGlzLT5zdHJlYW0gPSAkc3RyZWFtOwogICAgICAgICR0aGlzLT5zZXRMaW1pdCgkbGltaXQpOwogICAgICAgICR0aGlzLT5zZXRPZmZzZXQoJG9mZnNldCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGVvZigpOiBib29sCiAgICB7CiAgICAgICAgLy8gQWx3YXlzIHJldHVybiB0cnVlIGlmIHRoZSB1bmRlcmx5aW5nIHN0cmVhbSBpcyBFT0YKICAgICAgICBpZiAoJHRoaXMtPnN0cmVhbS0+ZW9mKCkpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBObyBsaW1pdCBhbmQgdGhlIHVuZGVybHlpbmcgc3RyZWFtIGlzIG5vdCBhdCBFT0YKICAgICAgICBpZiAoJHRoaXMtPmxpbWl0ID09PSAtMSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+dGVsbCgpID49ICR0aGlzLT5vZmZzZXQgKyAkdGhpcy0+bGltaXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBsaW1pdGVkIHN1YnNldCBvZiBkYXRhCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaXplKCk6ID9pbnQKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gKCRsZW5ndGggPSAkdGhpcy0+c3RyZWFtLT5nZXRTaXplKCkpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0gZWxzZWlmICgkdGhpcy0+bGltaXQgPT09IC0xKSB7CiAgICAgICAgICAgIHJldHVybiAkbGVuZ3RoIC0gJHRoaXMtPm9mZnNldDsKICAgICAgICB9CgogICAgICAgIHJldHVybiBtaW4oJHRoaXMtPmxpbWl0LCAkbGVuZ3RoIC0gJHRoaXMtPm9mZnNldCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBbGxvdyBmb3IgYSBib3VuZGVkIHNlZWsgb24gdGhlIHJlYWQgbGltaXRlZCBzdHJlYW0KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlZWsoJG9mZnNldCwgJHdoZW5jZSA9IFNFRUtfU0VUKTogdm9pZAogICAgewogICAgICAgIGlmICgkd2hlbmNlICE9PSBTRUVLX1NFVCB8fCAkb2Zmc2V0IDwgMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oc3ByaW50ZigKICAgICAgICAgICAgICAgICdDYW5ub3Qgc2VlayB0byBvZmZzZXQgJXMgd2l0aCB3aGVuY2UgJXMnLAogICAgICAgICAgICAgICAgJG9mZnNldCwKICAgICAgICAgICAgICAgICR3aGVuY2UKICAgICAgICAgICAgKSk7CiAgICAgICAgfQoKICAgICAgICAkb2Zmc2V0ICs9ICR0aGlzLT5vZmZzZXQ7CgogICAgICAgIGlmICgkdGhpcy0+bGltaXQgIT09IC0xKSB7CiAgICAgICAgICAgIGlmICgkb2Zmc2V0ID4gJHRoaXMtPm9mZnNldCArICR0aGlzLT5saW1pdCkgewogICAgICAgICAgICAgICAgJG9mZnNldCA9ICR0aGlzLT5vZmZzZXQgKyAkdGhpcy0+bGltaXQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICR0aGlzLT5zdHJlYW0tPnNlZWsoJG9mZnNldCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHaXZlIGEgcmVsYXRpdmUgdGVsbCgpCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0ZWxsKCk6IGludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtLT50ZWxsKCkgLSAkdGhpcy0+b2Zmc2V0OwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBvZmZzZXQgdG8gc3RhcnQgbGltaXRpbmcgZnJvbQogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJG9mZnNldCBPZmZzZXQgdG8gc2VlayB0byBhbmQgYmVnaW4gYnl0ZSBsaW1pdGluZyBmcm9tCiAgICAgKgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBpZiB0aGUgc3RyZWFtIGNhbm5vdCBiZSBzZWVrZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRPZmZzZXQoaW50ICRvZmZzZXQpOiB2b2lkCiAgICB7CiAgICAgICAgJGN1cnJlbnQgPSAkdGhpcy0+c3RyZWFtLT50ZWxsKCk7CgogICAgICAgIGlmICgkY3VycmVudCAhPT0gJG9mZnNldCkgewogICAgICAgICAgICAvLyBJZiB0aGUgc3RyZWFtIGNhbm5vdCBzZWVrIHRvIHRoZSBvZmZzZXQgcG9zaXRpb24sIHRoZW4gcmVhZCB0byBpdAogICAgICAgICAgICBpZiAoJHRoaXMtPnN0cmVhbS0+aXNTZWVrYWJsZSgpKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+c3RyZWFtLT5zZWVrKCRvZmZzZXQpOwogICAgICAgICAgICB9IGVsc2VpZiAoJGN1cnJlbnQgPiAkb2Zmc2V0KSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIkNvdWxkIG5vdCBzZWVrIHRvIHN0cmVhbSBvZmZzZXQgJG9mZnNldCIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHRoaXMtPnN0cmVhbS0+cmVhZCgkb2Zmc2V0IC0gJGN1cnJlbnQpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+b2Zmc2V0ID0gJG9mZnNldDsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgbGltaXQgb2YgYnl0ZXMgdGhhdCB0aGUgZGVjb3JhdG9yIGFsbG93cyB0byBiZSByZWFkIGZyb20gdGhlCiAgICAgKiBzdHJlYW0uCiAgICAgKgogICAgICogQHBhcmFtIGludCAkbGltaXQgTnVtYmVyIG9mIGJ5dGVzIHRvIGFsbG93IHRvIGJlIHJlYWQgZnJvbSB0aGUgc3RyZWFtLgogICAgICogICAgICAgICAgICAgICAgICAgVXNlIC0xIGZvciBubyBsaW1pdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldExpbWl0KGludCAkbGltaXQpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmxpbWl0ID0gJGxpbWl0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkKCRsZW5ndGgpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmxpbWl0ID09PSAtMSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+cmVhZCgkbGVuZ3RoKTsKICAgICAgICB9CgogICAgICAgIC8vIENoZWNrIGlmIHRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIGxlc3MgdGhhbiB0aGUgdG90YWwgYWxsb3dlZAogICAgICAgIC8vIGJ5dGVzICsgb3JpZ2luYWwgb2Zmc2V0CiAgICAgICAgJHJlbWFpbmluZyA9ICgkdGhpcy0+b2Zmc2V0ICsgJHRoaXMtPmxpbWl0KSAtICR0aGlzLT5zdHJlYW0tPnRlbGwoKTsKICAgICAgICBpZiAoJHJlbWFpbmluZyA+IDApIHsKICAgICAgICAgICAgLy8gT25seSByZXR1cm4gdGhlIGFtb3VudCBvZiByZXF1ZXN0ZWQgZGF0YSwgZW5zdXJpbmcgdGhhdCB0aGUgYnl0ZQogICAgICAgICAgICAvLyBsaW1pdCBpcyBub3QgZXhjZWVkZWQKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5zdHJlYW0tPnJlYWQobWluKCRyZW1haW5pbmcsICRsZW5ndGgpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAnJzsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/Message.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXE1lc3NhZ2VJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwoKZmluYWwgY2xhc3MgTWVzc2FnZQp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBIVFRQIG1lc3NhZ2UuCiAgICAgKgogICAgICogQHBhcmFtIE1lc3NhZ2VJbnRlcmZhY2UgJG1lc3NhZ2UgTWVzc2FnZSB0byBjb252ZXJ0IHRvIGEgc3RyaW5nLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRvU3RyaW5nKE1lc3NhZ2VJbnRlcmZhY2UgJG1lc3NhZ2UpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoJG1lc3NhZ2UgaW5zdGFuY2VvZiBSZXF1ZXN0SW50ZXJmYWNlKSB7CiAgICAgICAgICAgICRtc2cgPSB0cmltKCRtZXNzYWdlLT5nZXRNZXRob2QoKS4nICcKICAgICAgICAgICAgICAgICAgICAuJG1lc3NhZ2UtPmdldFJlcXVlc3RUYXJnZXQoKSkKICAgICAgICAgICAgICAgIC4nIEhUVFAvJy4kbWVzc2FnZS0+Z2V0UHJvdG9jb2xWZXJzaW9uKCk7CiAgICAgICAgICAgIGlmICghJG1lc3NhZ2UtPmhhc0hlYWRlcignaG9zdCcpKSB7CiAgICAgICAgICAgICAgICAkbXNnIC49ICJcclxuSG9zdDogIi4kbWVzc2FnZS0+Z2V0VXJpKCktPmdldEhvc3QoKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZWlmICgkbWVzc2FnZSBpbnN0YW5jZW9mIFJlc3BvbnNlSW50ZXJmYWNlKSB7CiAgICAgICAgICAgICRtc2cgPSAnSFRUUC8nLiRtZXNzYWdlLT5nZXRQcm90b2NvbFZlcnNpb24oKS4nICcKICAgICAgICAgICAgICAgIC4kbWVzc2FnZS0+Z2V0U3RhdHVzQ29kZSgpLicgJwogICAgICAgICAgICAgICAgLiRtZXNzYWdlLT5nZXRSZWFzb25QaHJhc2UoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5rbm93biBtZXNzYWdlIHR5cGUnKTsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCRtZXNzYWdlLT5nZXRIZWFkZXJzKCkgYXMgJG5hbWUgPT4gJHZhbHVlcykgewogICAgICAgICAgICBpZiAoaXNfc3RyaW5nKCRuYW1lKSAmJiBzdHJ0b2xvd2VyKCRuYW1lKSA9PT0gJ3NldC1jb29raWUnKSB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkdmFsdWVzIGFzICR2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICRtc2cgLj0gIlxyXG57JG5hbWV9OiAiLiR2YWx1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRtc2cgLj0gIlxyXG57JG5hbWV9OiAiLmltcGxvZGUoJywgJywgJHZhbHVlcyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAieyRtc2d9XHJcblxyXG4iLiRtZXNzYWdlLT5nZXRCb2R5KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYSBzaG9ydCBzdW1tYXJ5IG9mIHRoZSBtZXNzYWdlIGJvZHkuCiAgICAgKgogICAgICogV2lsbCByZXR1cm4gYG51bGxgIGlmIHRoZSByZXNwb25zZSBpcyBub3QgcHJpbnRhYmxlLgogICAgICoKICAgICAqIEBwYXJhbSBNZXNzYWdlSW50ZXJmYWNlICRtZXNzYWdlICAgIFRoZSBtZXNzYWdlIHRvIGdldCB0aGUgYm9keSBzdW1tYXJ5CiAgICAgKiBAcGFyYW0gaW50ICAgICAgICAgICAgICAkdHJ1bmNhdGVBdCBUaGUgbWF4aW11bSBhbGxvd2VkIHNpemUgb2YgdGhlIHN1bW1hcnkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBib2R5U3VtbWFyeShNZXNzYWdlSW50ZXJmYWNlICRtZXNzYWdlLCBpbnQgJHRydW5jYXRlQXQgPSAxMjApOiA/c3RyaW5nCiAgICB7CiAgICAgICAgJGJvZHkgPSAkbWVzc2FnZS0+Z2V0Qm9keSgpOwoKICAgICAgICBpZiAoISRib2R5LT5pc1NlZWthYmxlKCkgfHwgISRib2R5LT5pc1JlYWRhYmxlKCkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAkc2l6ZSA9ICRib2R5LT5nZXRTaXplKCk7CgogICAgICAgIGlmICgkc2l6ZSA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICRib2R5LT5yZXdpbmQoKTsKICAgICAgICAkc3VtbWFyeSA9ICRib2R5LT5yZWFkKCR0cnVuY2F0ZUF0KTsKICAgICAgICAkYm9keS0+cmV3aW5kKCk7CgogICAgICAgIGlmICgkc2l6ZSA+ICR0cnVuY2F0ZUF0KSB7CiAgICAgICAgICAgICRzdW1tYXJ5IC49ICcgKHRydW5jYXRlZC4uLiknOwogICAgICAgIH0KCiAgICAgICAgLy8gTWF0Y2hlcyBhbnkgcHJpbnRhYmxlIGNoYXJhY3RlciwgaW5jbHVkaW5nIHVuaWNvZGUgY2hhcmFjdGVyczoKICAgICAgICAvLyBsZXR0ZXJzLCBtYXJrcywgbnVtYmVycywgcHVuY3R1YXRpb24sIHNwYWNpbmcsIGFuZCBzZXBhcmF0b3JzLgogICAgICAgIGlmIChwcmVnX21hdGNoKCcvW15ccExccE1ccE5ccFBccFNccFpcblxyXHRdL3UnLCAkc3VtbWFyeSkgIT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHN1bW1hcnk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBdHRlbXB0cyB0byByZXdpbmQgYSBtZXNzYWdlIGJvZHkgYW5kIHRocm93cyBhbiBleGNlcHRpb24gb24gZmFpbHVyZS4KICAgICAqCiAgICAgKiBUaGUgYm9keSBvZiB0aGUgbWVzc2FnZSB3aWxsIG9ubHkgYmUgcmV3b3VuZCBpZiBhIGNhbGwgdG8gYHRlbGwoKWAKICAgICAqIHJldHVybnMgYSB2YWx1ZSBvdGhlciB0aGFuIGAwYC4KICAgICAqCiAgICAgKiBAcGFyYW0gTWVzc2FnZUludGVyZmFjZSAkbWVzc2FnZSBNZXNzYWdlIHRvIHJld2luZAogICAgICoKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXdpbmRCb2R5KE1lc3NhZ2VJbnRlcmZhY2UgJG1lc3NhZ2UpOiB2b2lkCiAgICB7CiAgICAgICAgJGJvZHkgPSAkbWVzc2FnZS0+Z2V0Qm9keSgpOwoKICAgICAgICBpZiAoJGJvZHktPnRlbGwoKSkgewogICAgICAgICAgICAkYm9keS0+cmV3aW5kKCk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUGFyc2VzIGFuIEhUVFAgbWVzc2FnZSBpbnRvIGFuIGFzc29jaWF0aXZlIGFycmF5LgogICAgICoKICAgICAqIFRoZSBhcnJheSBjb250YWlucyB0aGUgInN0YXJ0LWxpbmUiIGtleSBjb250YWluaW5nIHRoZSBzdGFydCBsaW5lIG9mCiAgICAgKiB0aGUgbWVzc2FnZSwgImhlYWRlcnMiIGtleSBjb250YWluaW5nIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIGhlYWRlcgogICAgICogYXJyYXkgdmFsdWVzLCBhbmQgYSAiYm9keSIga2V5IGNvbnRhaW5pbmcgdGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZSBIVFRQIHJlcXVlc3Qgb3IgcmVzcG9uc2UgdG8gcGFyc2UuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcGFyc2VNZXNzYWdlKHN0cmluZyAkbWVzc2FnZSk6IGFycmF5CiAgICB7CiAgICAgICAgaWYgKCEkbWVzc2FnZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBtZXNzYWdlJyk7CiAgICAgICAgfQoKICAgICAgICAkbWVzc2FnZSA9IGx0cmltKCRtZXNzYWdlLCAiXHJcbiIpOwoKICAgICAgICAkbWVzc2FnZVBhcnRzID0gcHJlZ19zcGxpdCgiL1xyP1xuXHI/XG4vIiwgJG1lc3NhZ2UsIDIpOwoKICAgICAgICBpZiAoJG1lc3NhZ2VQYXJ0cyA9PT0gZmFsc2UgfHwgY291bnQoJG1lc3NhZ2VQYXJ0cykgIT09IDIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgbWVzc2FnZTogTWlzc2luZyBoZWFkZXIgZGVsaW1pdGVyJyk7CiAgICAgICAgfQoKICAgICAgICBbJHJhd0hlYWRlcnMsICRib2R5XSA9ICRtZXNzYWdlUGFydHM7CiAgICAgICAgJHJhd0hlYWRlcnMgLj0gIlxyXG4iOyAvLyBQdXQgYmFjayB0aGUgZGVsaW1pdGVyIHdlIHNwbGl0IHByZXZpb3VzbHkKICAgICAgICAkaGVhZGVyUGFydHMgPSBwcmVnX3NwbGl0KCIvXHI/XG4vIiwgJHJhd0hlYWRlcnMsIDIpOwoKICAgICAgICBpZiAoJGhlYWRlclBhcnRzID09PSBmYWxzZSB8fCBjb3VudCgkaGVhZGVyUGFydHMpICE9PSAyKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIG1lc3NhZ2U6IE1pc3Npbmcgc3RhdHVzIGxpbmUnKTsKICAgICAgICB9CgogICAgICAgIFskc3RhcnRMaW5lLCAkcmF3SGVhZGVyc10gPSAkaGVhZGVyUGFydHM7CgogICAgICAgIGlmIChwcmVnX21hdGNoKCIvKD86XkhUVFBcL3xeW0EtWl0rIFxTKyBIVFRQXC8pKFxkKyg/OlwuXGQrKT8pL2kiLCAkc3RhcnRMaW5lLCAkbWF0Y2hlcykgJiYgJG1hdGNoZXNbMV0gPT09ICcxLjAnKSB7CiAgICAgICAgICAgIC8vIEhlYWRlciBmb2xkaW5nIGlzIGRlcHJlY2F0ZWQgZm9yIEhUVFAvMS4xLCBidXQgYWxsb3dlZCBpbiBIVFRQLzEuMAogICAgICAgICAgICAkcmF3SGVhZGVycyA9IHByZWdfcmVwbGFjZShSZmM3MjMwOjpIRUFERVJfRk9MRF9SRUdFWCwgJyAnLCAkcmF3SGVhZGVycyk7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBhcnJheVtdICRoZWFkZXJMaW5lcyAqLwogICAgICAgICRjb3VudCA9IHByZWdfbWF0Y2hfYWxsKFJmYzcyMzA6OkhFQURFUl9SRUdFWCwgJHJhd0hlYWRlcnMsICRoZWFkZXJMaW5lcywgUFJFR19TRVRfT1JERVIpOwoKICAgICAgICAvLyBJZiB0aGVzZSBhcmVuJ3QgdGhlIHNhbWUsIHRoZW4gb25lIGxpbmUgZGlkbid0IG1hdGNoIGFuZCB0aGVyZSdzIGFuIGludmFsaWQgaGVhZGVyLgogICAgICAgIGlmICgkY291bnQgIT09IHN1YnN0cl9jb3VudCgkcmF3SGVhZGVycywgIlxuIikpIHsKICAgICAgICAgICAgLy8gRm9sZGluZyBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yLjQKICAgICAgICAgICAgaWYgKHByZWdfbWF0Y2goUmZjNzIzMDo6SEVBREVSX0ZPTERfUkVHRVgsICRyYXdIZWFkZXJzKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgaGVhZGVyIHN5bnRheDogT2Jzb2xldGUgbGluZSBmb2xkaW5nJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIGhlYWRlciBzeW50YXgnKTsKICAgICAgICB9CgogICAgICAgICRoZWFkZXJzID0gW107CgogICAgICAgIGZvcmVhY2ggKCRoZWFkZXJMaW5lcyBhcyAkaGVhZGVyTGluZSkgewogICAgICAgICAgICAkaGVhZGVyc1skaGVhZGVyTGluZVsxXV1bXSA9ICRoZWFkZXJMaW5lWzJdOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJ3N0YXJ0LWxpbmUnID0+ICRzdGFydExpbmUsCiAgICAgICAgICAgICdoZWFkZXJzJyA9PiAkaGVhZGVycywKICAgICAgICAgICAgJ2JvZHknID0+ICRib2R5LAogICAgICAgIF07CiAgICB9CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIGEgVVJJIGZvciBhbiBIVFRQIHJlcXVlc3QgbWVzc2FnZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoICAgIFBhdGggZnJvbSB0aGUgc3RhcnQtbGluZQogICAgICogQHBhcmFtIGFycmF5ICAkaGVhZGVycyBBcnJheSBvZiBoZWFkZXJzIChlYWNoIHZhbHVlIGFuIGFycmF5KS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZVJlcXVlc3RVcmkoc3RyaW5nICRwYXRoLCBhcnJheSAkaGVhZGVycyk6IHN0cmluZwogICAgewogICAgICAgICRob3N0S2V5ID0gYXJyYXlfZmlsdGVyKGFycmF5X2tleXMoJGhlYWRlcnMpLCBmdW5jdGlvbiAoJGspIHsKICAgICAgICAgICAgLy8gTnVtZXJpYyBhcnJheSBrZXlzIGFyZSBjb252ZXJ0ZWQgdG8gaW50IGJ5IFBIUC4KICAgICAgICAgICAgJGsgPSAoc3RyaW5nKSAkazsKCiAgICAgICAgICAgIHJldHVybiBzdHJ0b2xvd2VyKCRrKSA9PT0gJ2hvc3QnOwogICAgICAgIH0pOwoKICAgICAgICAvLyBJZiBubyBob3N0IGlzIGZvdW5kLCB0aGVuIGEgZnVsbCBVUkkgY2Fubm90IGJlIGNvbnN0cnVjdGVkLgogICAgICAgIGlmICghJGhvc3RLZXkpIHsKICAgICAgICAgICAgcmV0dXJuICRwYXRoOwogICAgICAgIH0KCiAgICAgICAgJGhvc3QgPSAkaGVhZGVyc1tyZXNldCgkaG9zdEtleSldWzBdOwogICAgICAgICRzY2hlbWUgPSBzdWJzdHIoJGhvc3QsIC00KSA9PT0gJzo0NDMnID8gJ2h0dHBzJyA6ICdodHRwJzsKCiAgICAgICAgcmV0dXJuICRzY2hlbWUuJzovLycuJGhvc3QuJy8nLmx0cmltKCRwYXRoLCAnLycpOwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2VzIGEgcmVxdWVzdCBtZXNzYWdlIHN0cmluZyBpbnRvIGEgcmVxdWVzdCBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZSBSZXF1ZXN0IG1lc3NhZ2Ugc3RyaW5nLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBhcnNlUmVxdWVzdChzdHJpbmcgJG1lc3NhZ2UpOiBSZXF1ZXN0SW50ZXJmYWNlCiAgICB7CiAgICAgICAgJGRhdGEgPSBzZWxmOjpwYXJzZU1lc3NhZ2UoJG1lc3NhZ2UpOwogICAgICAgICRtYXRjaGVzID0gW107CiAgICAgICAgaWYgKCFwcmVnX21hdGNoKCcvXltcU10rXHMrKFthLXpBLVpdKzpcL1wvfFwvKS4qLycsICRkYXRhWydzdGFydC1saW5lJ10sICRtYXRjaGVzKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCByZXF1ZXN0IHN0cmluZycpOwogICAgICAgIH0KICAgICAgICAkcGFydHMgPSBleHBsb2RlKCcgJywgJGRhdGFbJ3N0YXJ0LWxpbmUnXSwgMyk7CiAgICAgICAgJHZlcnNpb24gPSBpc3NldCgkcGFydHNbMl0pID8gZXhwbG9kZSgnLycsICRwYXJ0c1syXSlbMV0gOiAnMS4xJzsKCiAgICAgICAgJHJlcXVlc3QgPSBuZXcgUmVxdWVzdCgKICAgICAgICAgICAgJHBhcnRzWzBdLAogICAgICAgICAgICAkbWF0Y2hlc1sxXSA9PT0gJy8nID8gc2VsZjo6cGFyc2VSZXF1ZXN0VXJpKCRwYXJ0c1sxXSwgJGRhdGFbJ2hlYWRlcnMnXSkgOiAkcGFydHNbMV0sCiAgICAgICAgICAgICRkYXRhWydoZWFkZXJzJ10sCiAgICAgICAgICAgICRkYXRhWydib2R5J10sCiAgICAgICAgICAgICR2ZXJzaW9uCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRtYXRjaGVzWzFdID09PSAnLycgPyAkcmVxdWVzdCA6ICRyZXF1ZXN0LT53aXRoUmVxdWVzdFRhcmdldCgkcGFydHNbMV0pOwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2VzIGEgcmVzcG9uc2UgbWVzc2FnZSBzdHJpbmcgaW50byBhIHJlc3BvbnNlIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlIFJlc3BvbnNlIG1lc3NhZ2Ugc3RyaW5nLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBhcnNlUmVzcG9uc2Uoc3RyaW5nICRtZXNzYWdlKTogUmVzcG9uc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICAkZGF0YSA9IHNlbGY6OnBhcnNlTWVzc2FnZSgkbWVzc2FnZSk7CiAgICAgICAgLy8gQWNjb3JkaW5nIHRvIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMS4yCiAgICAgICAgLy8gdGhlIHNwYWNlIGJldHdlZW4gc3RhdHVzLWNvZGUgYW5kIHJlYXNvbi1waHJhc2UgaXMgcmVxdWlyZWQuIEJ1dAogICAgICAgIC8vIGJyb3dzZXJzIGFjY2VwdCByZXNwb25zZXMgd2l0aG91dCBzcGFjZSBhbmQgcmVhc29uIGFzIHdlbGwuCiAgICAgICAgaWYgKCFwcmVnX21hdGNoKCcvXkhUVFBcLy4qIFswLTldezN9KCAuKnwkKS8nLCAkZGF0YVsnc3RhcnQtbGluZSddKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCByZXNwb25zZSBzdHJpbmc6ICcuJGRhdGFbJ3N0YXJ0LWxpbmUnXSk7CiAgICAgICAgfQogICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoJyAnLCAkZGF0YVsnc3RhcnQtbGluZSddLCAzKTsKCiAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZSgKICAgICAgICAgICAgKGludCkgJHBhcnRzWzFdLAogICAgICAgICAgICAkZGF0YVsnaGVhZGVycyddLAogICAgICAgICAgICAkZGF0YVsnYm9keSddLAogICAgICAgICAgICBleHBsb2RlKCcvJywgJHBhcnRzWzBdKVsxXSwKICAgICAgICAgICAgJHBhcnRzWzJdID8/IG51bGwKICAgICAgICApOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/MessageTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXE1lc3NhZ2VJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBUcmFpdCBpbXBsZW1lbnRpbmcgZnVuY3Rpb25hbGl0eSBjb21tb24gdG8gcmVxdWVzdHMgYW5kIHJlc3BvbnNlcy4KICovCnRyYWl0IE1lc3NhZ2VUcmFpdAp7CiAgICAvKiogQHZhciBzdHJpbmdbXVtdIE1hcCBvZiBhbGwgcmVnaXN0ZXJlZCBoZWFkZXJzLCBhcyBvcmlnaW5hbCBuYW1lID0+IGFycmF5IG9mIHZhbHVlcyAqLwogICAgcHJpdmF0ZSAkaGVhZGVycyA9IFtdOwoKICAgIC8qKiBAdmFyIHN0cmluZ1tdIE1hcCBvZiBsb3dlcmNhc2UgaGVhZGVyIG5hbWUgPT4gb3JpZ2luYWwgbmFtZSBhdCByZWdpc3RyYXRpb24gKi8KICAgIHByaXZhdGUgJGhlYWRlck5hbWVzID0gW107CgogICAgLyoqIEB2YXIgc3RyaW5nICovCiAgICBwcml2YXRlICRwcm90b2NvbCA9ICcxLjEnOwoKICAgIC8qKiBAdmFyIFN0cmVhbUludGVyZmFjZXxudWxsICovCiAgICBwcml2YXRlICRzdHJlYW07CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFByb3RvY29sVmVyc2lvbigpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnByb3RvY29sOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhQcm90b2NvbFZlcnNpb24oJHZlcnNpb24pOiBNZXNzYWdlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5wcm90b2NvbCA9PT0gJHZlcnNpb24pIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgICRuZXctPnByb3RvY29sID0gJHZlcnNpb247CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIZWFkZXJzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oZWFkZXJzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNIZWFkZXIoJGhlYWRlcik6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gaXNzZXQoJHRoaXMtPmhlYWRlck5hbWVzW3N0cnRvbG93ZXIoJGhlYWRlcildKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGVhZGVyKCRoZWFkZXIpOiBhcnJheQogICAgewogICAgICAgICRoZWFkZXIgPSBzdHJ0b2xvd2VyKCRoZWFkZXIpOwoKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5oZWFkZXJOYW1lc1skaGVhZGVyXSkpIHsKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIH0KCiAgICAgICAgJGhlYWRlciA9ICR0aGlzLT5oZWFkZXJOYW1lc1skaGVhZGVyXTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5oZWFkZXJzWyRoZWFkZXJdOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIZWFkZXJMaW5lKCRoZWFkZXIpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gaW1wbG9kZSgnLCAnLCAkdGhpcy0+Z2V0SGVhZGVyKCRoZWFkZXIpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoSGVhZGVyKCRoZWFkZXIsICR2YWx1ZSk6IE1lc3NhZ2VJbnRlcmZhY2UKICAgIHsKICAgICAgICAkdGhpcy0+YXNzZXJ0SGVhZGVyKCRoZWFkZXIpOwogICAgICAgICR2YWx1ZSA9ICR0aGlzLT5ub3JtYWxpemVIZWFkZXJWYWx1ZSgkdmFsdWUpOwogICAgICAgICRub3JtYWxpemVkID0gc3RydG9sb3dlcigkaGVhZGVyKTsKCiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgIGlmIChpc3NldCgkbmV3LT5oZWFkZXJOYW1lc1skbm9ybWFsaXplZF0pKSB7CiAgICAgICAgICAgIHVuc2V0KCRuZXctPmhlYWRlcnNbJG5ldy0+aGVhZGVyTmFtZXNbJG5vcm1hbGl6ZWRdXSk7CiAgICAgICAgfQogICAgICAgICRuZXctPmhlYWRlck5hbWVzWyRub3JtYWxpemVkXSA9ICRoZWFkZXI7CiAgICAgICAgJG5ldy0+aGVhZGVyc1skaGVhZGVyXSA9ICR2YWx1ZTsKCiAgICAgICAgcmV0dXJuICRuZXc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEFkZGVkSGVhZGVyKCRoZWFkZXIsICR2YWx1ZSk6IE1lc3NhZ2VJbnRlcmZhY2UKICAgIHsKICAgICAgICAkdGhpcy0+YXNzZXJ0SGVhZGVyKCRoZWFkZXIpOwogICAgICAgICR2YWx1ZSA9ICR0aGlzLT5ub3JtYWxpemVIZWFkZXJWYWx1ZSgkdmFsdWUpOwogICAgICAgICRub3JtYWxpemVkID0gc3RydG9sb3dlcigkaGVhZGVyKTsKCiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgIGlmIChpc3NldCgkbmV3LT5oZWFkZXJOYW1lc1skbm9ybWFsaXplZF0pKSB7CiAgICAgICAgICAgICRoZWFkZXIgPSAkdGhpcy0+aGVhZGVyTmFtZXNbJG5vcm1hbGl6ZWRdOwogICAgICAgICAgICAkbmV3LT5oZWFkZXJzWyRoZWFkZXJdID0gYXJyYXlfbWVyZ2UoJHRoaXMtPmhlYWRlcnNbJGhlYWRlcl0sICR2YWx1ZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG5ldy0+aGVhZGVyTmFtZXNbJG5vcm1hbGl6ZWRdID0gJGhlYWRlcjsKICAgICAgICAgICAgJG5ldy0+aGVhZGVyc1skaGVhZGVyXSA9ICR2YWx1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhvdXRIZWFkZXIoJGhlYWRlcik6IE1lc3NhZ2VJbnRlcmZhY2UKICAgIHsKICAgICAgICAkbm9ybWFsaXplZCA9IHN0cnRvbG93ZXIoJGhlYWRlcik7CgogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmhlYWRlck5hbWVzWyRub3JtYWxpemVkXSkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJGhlYWRlciA9ICR0aGlzLT5oZWFkZXJOYW1lc1skbm9ybWFsaXplZF07CgogICAgICAgICRuZXcgPSBjbG9uZSAkdGhpczsKICAgICAgICB1bnNldCgkbmV3LT5oZWFkZXJzWyRoZWFkZXJdLCAkbmV3LT5oZWFkZXJOYW1lc1skbm9ybWFsaXplZF0pOwoKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Qm9keSgpOiBTdHJlYW1JbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5zdHJlYW0pIHsKICAgICAgICAgICAgJHRoaXMtPnN0cmVhbSA9IFV0aWxzOjpzdHJlYW1Gb3IoJycpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5zdHJlYW07CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEJvZHkoU3RyZWFtSW50ZXJmYWNlICRib2R5KTogTWVzc2FnZUludGVyZmFjZQogICAgewogICAgICAgIGlmICgkYm9keSA9PT0gJHRoaXMtPnN0cmVhbSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+c3RyZWFtID0gJGJvZHk7CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIChzdHJpbmd8c3RyaW5nW10pW10gJGhlYWRlcnMKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBzZXRIZWFkZXJzKGFycmF5ICRoZWFkZXJzKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5oZWFkZXJOYW1lcyA9ICR0aGlzLT5oZWFkZXJzID0gW107CiAgICAgICAgZm9yZWFjaCAoJGhlYWRlcnMgYXMgJGhlYWRlciA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgLy8gTnVtZXJpYyBhcnJheSBrZXlzIGFyZSBjb252ZXJ0ZWQgdG8gaW50IGJ5IFBIUC4KICAgICAgICAgICAgJGhlYWRlciA9IChzdHJpbmcpICRoZWFkZXI7CgogICAgICAgICAgICAkdGhpcy0+YXNzZXJ0SGVhZGVyKCRoZWFkZXIpOwogICAgICAgICAgICAkdmFsdWUgPSAkdGhpcy0+bm9ybWFsaXplSGVhZGVyVmFsdWUoJHZhbHVlKTsKICAgICAgICAgICAgJG5vcm1hbGl6ZWQgPSBzdHJ0b2xvd2VyKCRoZWFkZXIpOwogICAgICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPmhlYWRlck5hbWVzWyRub3JtYWxpemVkXSkpIHsKICAgICAgICAgICAgICAgICRoZWFkZXIgPSAkdGhpcy0+aGVhZGVyTmFtZXNbJG5vcm1hbGl6ZWRdOwogICAgICAgICAgICAgICAgJHRoaXMtPmhlYWRlcnNbJGhlYWRlcl0gPSBhcnJheV9tZXJnZSgkdGhpcy0+aGVhZGVyc1skaGVhZGVyXSwgJHZhbHVlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0aGlzLT5oZWFkZXJOYW1lc1skbm9ybWFsaXplZF0gPSAkaGVhZGVyOwogICAgICAgICAgICAgICAgJHRoaXMtPmhlYWRlcnNbJGhlYWRlcl0gPSAkdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlclZhbHVlKCR2YWx1ZSk6IGFycmF5CiAgICB7CiAgICAgICAgaWYgKCFpc19hcnJheSgkdmFsdWUpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+dHJpbUFuZFZhbGlkYXRlSGVhZGVyVmFsdWVzKFskdmFsdWVdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+dHJpbUFuZFZhbGlkYXRlSGVhZGVyVmFsdWVzKCR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBUcmltcyB3aGl0ZXNwYWNlIGZyb20gdGhlIGhlYWRlciB2YWx1ZXMuCiAgICAgKgogICAgICogU3BhY2VzIGFuZCB0YWJzIG91Z2h0IHRvIGJlIGV4Y2x1ZGVkIGJ5IHBhcnNlcnMgd2hlbiBleHRyYWN0aW5nIHRoZSBmaWVsZCB2YWx1ZSBmcm9tIGEgaGVhZGVyIGZpZWxkLgogICAgICoKICAgICAqIGhlYWRlci1maWVsZCA9IGZpZWxkLW5hbWUgIjoiIE9XUyBmaWVsZC12YWx1ZSBPV1MKICAgICAqIE9XUyAgICAgICAgICA9ICooIFNQIC8gSFRBQiApCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkW10gJHZhbHVlcyBIZWFkZXIgdmFsdWVzCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmdbXSBUcmltbWVkIGhlYWRlciB2YWx1ZXMKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMi40CiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gdHJpbUFuZFZhbGlkYXRlSGVhZGVyVmFsdWVzKGFycmF5ICR2YWx1ZXMpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBhcnJheV9tYXAoZnVuY3Rpb24gKCR2YWx1ZSkgewogICAgICAgICAgICBpZiAoIWlzX3NjYWxhcigkdmFsdWUpICYmIG51bGwgIT09ICR2YWx1ZSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oc3ByaW50ZigKICAgICAgICAgICAgICAgICAgICAnSGVhZGVyIHZhbHVlIG11c3QgYmUgc2NhbGFyIG9yIG51bGwgYnV0ICVzIHByb3ZpZGVkLicsCiAgICAgICAgICAgICAgICAgICAgaXNfb2JqZWN0KCR2YWx1ZSkgPyBnZXRfY2xhc3MoJHZhbHVlKSA6IGdldHR5cGUoJHZhbHVlKQogICAgICAgICAgICAgICAgKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0cmltbWVkID0gdHJpbSgoc3RyaW5nKSAkdmFsdWUsICIgXHQiKTsKICAgICAgICAgICAgJHRoaXMtPmFzc2VydFZhbHVlKCR0cmltbWVkKTsKCiAgICAgICAgICAgIHJldHVybiAkdHJpbW1lZDsKICAgICAgICB9LCBhcnJheV92YWx1ZXMoJHZhbHVlcykpOwogICAgfQoKICAgIC8qKgogICAgICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjIKICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGhlYWRlcgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFzc2VydEhlYWRlcigkaGVhZGVyKTogdm9pZAogICAgewogICAgICAgIGlmICghaXNfc3RyaW5nKCRoZWFkZXIpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoCiAgICAgICAgICAgICAgICAnSGVhZGVyIG5hbWUgbXVzdCBiZSBhIHN0cmluZyBidXQgJXMgcHJvdmlkZWQuJywKICAgICAgICAgICAgICAgIGlzX29iamVjdCgkaGVhZGVyKSA/IGdldF9jbGFzcygkaGVhZGVyKSA6IGdldHR5cGUoJGhlYWRlcikKICAgICAgICAgICAgKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIXByZWdfbWF0Y2goJy9eW2EtekEtWjAtOVwnYCMkJSYqKy5eX3x+IS1dKyQvRCcsICRoZWFkZXIpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgc3ByaW50ZignIiVzIiBpcyBub3QgdmFsaWQgaGVhZGVyIG5hbWUuJywgJGhlYWRlcikKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMgogICAgICoKICAgICAqIGZpZWxkLXZhbHVlICAgID0gKiggZmllbGQtY29udGVudCAvIG9icy1mb2xkICkKICAgICAqIGZpZWxkLWNvbnRlbnQgID0gZmllbGQtdmNoYXIgWyAxKiggU1AgLyBIVEFCICkgZmllbGQtdmNoYXIgXQogICAgICogZmllbGQtdmNoYXIgICAgPSBWQ0hBUiAvIG9icy10ZXh0CiAgICAgKiBWQ0hBUiAgICAgICAgICA9ICV4MjEtN0UKICAgICAqIG9icy10ZXh0ICAgICAgID0gJXg4MC1GRgogICAgICogb2JzLWZvbGQgICAgICAgPSBDUkxGIDEqKCBTUCAvIEhUQUIgKQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFzc2VydFZhbHVlKHN0cmluZyAkdmFsdWUpOiB2b2lkCiAgICB7CiAgICAgICAgLy8gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpbnRlbnRpb25hbGx5IGRvZXMgbm90IHN1cHBvcnQgdGhlIG9icy1mb2xkIHByb2R1Y3Rpb24sIGJlY2F1c2UgYXMKICAgICAgICAvLyBwZXIgUkZDIDcyMzAjMy4yLjQ6CiAgICAgICAgLy8KICAgICAgICAvLyBBIHNlbmRlciBNVVNUIE5PVCBnZW5lcmF0ZSBhIG1lc3NhZ2UgdGhhdCBpbmNsdWRlcwogICAgICAgIC8vIGxpbmUgZm9sZGluZyAoaS5lLiwgdGhhdCBoYXMgYW55IGZpZWxkLXZhbHVlIHRoYXQgY29udGFpbnMgYSBtYXRjaCB0bwogICAgICAgIC8vIHRoZSBvYnMtZm9sZCBydWxlKSB1bmxlc3MgdGhlIG1lc3NhZ2UgaXMgaW50ZW5kZWQgZm9yIHBhY2thZ2luZwogICAgICAgIC8vIHdpdGhpbiB0aGUgbWVzc2FnZS9odHRwIG1lZGlhIHR5cGUuCiAgICAgICAgLy8KICAgICAgICAvLyBDbGllbnRzIG11c3Qgbm90IHNlbmQgYSByZXF1ZXN0IHdpdGggbGluZSBmb2xkaW5nIGFuZCBhIHNlcnZlciBzZW5kaW5nIGZvbGRlZCBoZWFkZXJzIGlzCiAgICAgICAgLy8gbGlrZWx5IHZlcnkgcmFyZS4gTGluZSBmb2xkaW5nIGlzIGEgZmFpcmx5IG9ic2N1cmUgZmVhdHVyZSBvZiBIVFRQLzEuMSBhbmQgdGh1cyBub3QgYWNjZXB0aW5nCiAgICAgICAgLy8gZm9sZGluZyBpcyBub3QgbGlrZWx5IHRvIGJyZWFrIGFueSBsZWdpdGltYXRlIHVzZSBjYXNlLgogICAgICAgIGlmICghcHJlZ19tYXRjaCgnL15bXHgyMFx4MDlceDIxLVx4N0VceDgwLVx4RkZdKiQvRCcsICR2YWx1ZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICBzcHJpbnRmKCciJXMiIGlzIG5vdCB2YWxpZCBoZWFkZXIgdmFsdWUuJywgJHZhbHVlKQogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/MimeType.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCmZpbmFsIGNsYXNzIE1pbWVUeXBlCnsKICAgIHByaXZhdGUgY29uc3QgTUlNRV9UWVBFUyA9IFsKICAgICAgICAnMTIzJyA9PiAnYXBwbGljYXRpb24vdm5kLmxvdHVzLTEtMi0zJywKICAgICAgICAnMWttJyA9PiAnYXBwbGljYXRpb24vdm5kLjEwMDBtaW5kcy5kZWNpc2lvbi1tb2RlbCt4bWwnLAogICAgICAgICcyMTAnID0+ICdtb2RlbC9zdGVwJywKICAgICAgICAnM2RtbCcgPT4gJ3RleHQvdm5kLmluM2QuM2RtbCcsCiAgICAgICAgJzNkcycgPT4gJ2ltYWdlL3gtM2RzJywKICAgICAgICAnM2cyJyA9PiAndmlkZW8vM2dwcDInLAogICAgICAgICczZ3AnID0+ICd2aWRlby8zZ3BwJywKICAgICAgICAnM2dwcCcgPT4gJ3ZpZGVvLzNncHAnLAogICAgICAgICczbWYnID0+ICdtb2RlbC8zbWYnLAogICAgICAgICc3eicgPT4gJ2FwcGxpY2F0aW9uL3gtN3otY29tcHJlc3NlZCcsCiAgICAgICAgJzd6aXAnID0+ICdhcHBsaWNhdGlvbi94LTd6LWNvbXByZXNzZWQnLAogICAgICAgICdhYWInID0+ICdhcHBsaWNhdGlvbi94LWF1dGhvcndhcmUtYmluJywKICAgICAgICAnYWFjJyA9PiAnYXVkaW8vYWFjJywKICAgICAgICAnYWFtJyA9PiAnYXBwbGljYXRpb24veC1hdXRob3J3YXJlLW1hcCcsCiAgICAgICAgJ2FhcycgPT4gJ2FwcGxpY2F0aW9uL3gtYXV0aG9yd2FyZS1zZWcnLAogICAgICAgICdhYncnID0+ICdhcHBsaWNhdGlvbi94LWFiaXdvcmQnLAogICAgICAgICdhYycgPT4gJ2FwcGxpY2F0aW9uL3BraXgtYXR0ci1jZXJ0JywKICAgICAgICAnYWMzJyA9PiAnYXVkaW8vYWMzJywKICAgICAgICAnYWNjJyA9PiAnYXBwbGljYXRpb24vdm5kLmFtZXJpY2FuZHluYW1pY3MuYWNjJywKICAgICAgICAnYWNlJyA9PiAnYXBwbGljYXRpb24veC1hY2UtY29tcHJlc3NlZCcsCiAgICAgICAgJ2FjdScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5hY3Vjb2JvbCcsCiAgICAgICAgJ2FjdXRjJyA9PiAnYXBwbGljYXRpb24vdm5kLmFjdWNvcnAnLAogICAgICAgICdhZHAnID0+ICdhdWRpby9hZHBjbScsCiAgICAgICAgJ2FkdHMnID0+ICdhdWRpby9hYWMnLAogICAgICAgICdhZXAnID0+ICdhcHBsaWNhdGlvbi92bmQuYXVkaW9ncmFwaCcsCiAgICAgICAgJ2FmbScgPT4gJ2FwcGxpY2F0aW9uL3gtZm9udC10eXBlMScsCiAgICAgICAgJ2FmcCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5pYm0ubW9kY2FwJywKICAgICAgICAnYWdlJyA9PiAnYXBwbGljYXRpb24vdm5kLmFnZScsCiAgICAgICAgJ2FoZWFkJyA9PiAnYXBwbGljYXRpb24vdm5kLmFoZWFkLnNwYWNlJywKICAgICAgICAnYWknID0+ICdhcHBsaWNhdGlvbi9wb3N0c2NyaXB0JywKICAgICAgICAnYWlmJyA9PiAnYXVkaW8veC1haWZmJywKICAgICAgICAnYWlmYycgPT4gJ2F1ZGlvL3gtYWlmZicsCiAgICAgICAgJ2FpZmYnID0+ICdhdWRpby94LWFpZmYnLAogICAgICAgICdhaXInID0+ICdhcHBsaWNhdGlvbi92bmQuYWRvYmUuYWlyLWFwcGxpY2F0aW9uLWluc3RhbGxlci1wYWNrYWdlK3ppcCcsCiAgICAgICAgJ2FpdCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5kdmIuYWl0JywKICAgICAgICAnYW1pJyA9PiAnYXBwbGljYXRpb24vdm5kLmFtaWdhLmFtaScsCiAgICAgICAgJ2FtbCcgPT4gJ2FwcGxpY2F0aW9uL2F1dG9tYXRpb25tbC1hbWwreG1sJywKICAgICAgICAnYW1seCcgPT4gJ2FwcGxpY2F0aW9uL2F1dG9tYXRpb25tbC1hbWx4K3ppcCcsCiAgICAgICAgJ2FtcicgPT4gJ2F1ZGlvL2FtcicsCiAgICAgICAgJ2FwaycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5hbmRyb2lkLnBhY2thZ2UtYXJjaGl2ZScsCiAgICAgICAgJ2FwbmcnID0+ICdpbWFnZS9hcG5nJywKICAgICAgICAnYXBwY2FjaGUnID0+ICd0ZXh0L2NhY2hlLW1hbmlmZXN0JywKICAgICAgICAnYXBwaW5zdGFsbGVyJyA9PiAnYXBwbGljYXRpb24vYXBwaW5zdGFsbGVyJywKICAgICAgICAnYXBwbGljYXRpb24nID0+ICdhcHBsaWNhdGlvbi94LW1zLWFwcGxpY2F0aW9uJywKICAgICAgICAnYXBweCcgPT4gJ2FwcGxpY2F0aW9uL2FwcHgnLAogICAgICAgICdhcHB4YnVuZGxlJyA9PiAnYXBwbGljYXRpb24vYXBweGJ1bmRsZScsCiAgICAgICAgJ2FwcicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5sb3R1cy1hcHByb2FjaCcsCiAgICAgICAgJ2FyYycgPT4gJ2FwcGxpY2F0aW9uL3gtZnJlZWFyYycsCiAgICAgICAgJ2FyaicgPT4gJ2FwcGxpY2F0aW9uL3gtYXJqJywKICAgICAgICAnYXNjJyA9PiAnYXBwbGljYXRpb24vcGdwLWtleXMnLAogICAgICAgICdhc2YnID0+ICd2aWRlby94LW1zLWFzZicsCiAgICAgICAgJ2FzbScgPT4gJ3RleHQveC1hc20nLAogICAgICAgICdhc28nID0+ICdhcHBsaWNhdGlvbi92bmQuYWNjcGFjLnNpbXBseS5hc28nLAogICAgICAgICdhc3gnID0+ICd2aWRlby94LW1zLWFzZicsCiAgICAgICAgJ2F0YycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5hY3Vjb3JwJywKICAgICAgICAnYXRvbScgPT4gJ2FwcGxpY2F0aW9uL2F0b20reG1sJywKICAgICAgICAnYXRvbWNhdCcgPT4gJ2FwcGxpY2F0aW9uL2F0b21jYXQreG1sJywKICAgICAgICAnYXRvbWRlbGV0ZWQnID0+ICdhcHBsaWNhdGlvbi9hdG9tZGVsZXRlZCt4bWwnLAogICAgICAgICdhdG9tc3ZjJyA9PiAnYXBwbGljYXRpb24vYXRvbXN2Yyt4bWwnLAogICAgICAgICdhdHgnID0+ICdhcHBsaWNhdGlvbi92bmQuYW50aXguZ2FtZS1jb21wb25lbnQnLAogICAgICAgICdhdScgPT4gJ2F1ZGlvL2Jhc2ljJywKICAgICAgICAnYXZjaScgPT4gJ2ltYWdlL2F2Y2knLAogICAgICAgICdhdmNzJyA9PiAnaW1hZ2UvYXZjcycsCiAgICAgICAgJ2F2aScgPT4gJ3ZpZGVvL3gtbXN2aWRlbycsCiAgICAgICAgJ2F2aWYnID0+ICdpbWFnZS9hdmlmJywKICAgICAgICAnYXcnID0+ICdhcHBsaWNhdGlvbi9hcHBsaXh3YXJlJywKICAgICAgICAnYXpmJyA9PiAnYXBwbGljYXRpb24vdm5kLmFpcnppcC5maWxlc2VjdXJlLmF6ZicsCiAgICAgICAgJ2F6cycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5haXJ6aXAuZmlsZXNlY3VyZS5henMnLAogICAgICAgICdhenYnID0+ICdpbWFnZS92bmQuYWlyemlwLmFjY2VsZXJhdG9yLmF6dicsCiAgICAgICAgJ2F6dycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5hbWF6b24uZWJvb2snLAogICAgICAgICdiMTYnID0+ICdpbWFnZS92bmQucGNvLmIxNicsCiAgICAgICAgJ2JhcnknID0+ICdtb2RlbC92bmQuYmFyeScsCiAgICAgICAgJ2JhdCcgPT4gJ2FwcGxpY2F0aW9uL3gtbXNkb3dubG9hZCcsCiAgICAgICAgJ2JjcGlvJyA9PiAnYXBwbGljYXRpb24veC1iY3BpbycsCiAgICAgICAgJ2JkZicgPT4gJ2FwcGxpY2F0aW9uL3gtZm9udC1iZGYnLAogICAgICAgICdiZG0nID0+ICdhcHBsaWNhdGlvbi92bmQuc3luY21sLmRtK3dieG1sJywKICAgICAgICAnYmRvJyA9PiAnYXBwbGljYXRpb24vdm5kLm5hdG8uYmluZGluZ2RhdGFvYmplY3QreG1sJywKICAgICAgICAnYmRvYycgPT4gJ2FwcGxpY2F0aW9uL2Jkb2MnLAogICAgICAgICdiZWQnID0+ICdhcHBsaWNhdGlvbi92bmQucmVhbHZuYy5iZWQnLAogICAgICAgICdiaDInID0+ICdhcHBsaWNhdGlvbi92bmQuZnVqaXRzdS5vYXN5c3BycycsCiAgICAgICAgJ2JpbicgPT4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgJ2JsYicgPT4gJ2FwcGxpY2F0aW9uL3gtYmxvcmInLAogICAgICAgICdibGVuZCcgPT4gJ2FwcGxpY2F0aW9uL3gtYmxlbmRlcicsCiAgICAgICAgJ2Jsb3JiJyA9PiAnYXBwbGljYXRpb24veC1ibG9yYicsCiAgICAgICAgJ2JtaScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5ibWknLAogICAgICAgICdibW1sJyA9PiAnYXBwbGljYXRpb24vdm5kLmJhbHNhbWlxLmJtbWwreG1sJywKICAgICAgICAnYm1wJyA9PiAnaW1hZ2UvYm1wJywKICAgICAgICAnYm9vaycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5mcmFtZW1ha2VyJywKICAgICAgICAnYm94JyA9PiAnYXBwbGljYXRpb24vdm5kLnByZXZpZXdzeXN0ZW1zLmJveCcsCiAgICAgICAgJ2JveicgPT4gJ2FwcGxpY2F0aW9uL3gtYnppcDInLAogICAgICAgICdicGsnID0+ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICdicG1uJyA9PiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgICAnYnJ1c2gnID0+ICdhcHBsaWNhdGlvbi92bmQucHJvY3JlYXRlLmJydXNoJywKICAgICAgICAnYnJ1c2hzZXQnID0+ICdhcHBsaWNhdGlvbi92bmQucHJvY3JlYXRlLmJydXNoc2V0JywKICAgICAgICAnYnNwJyA9PiAnbW9kZWwvdm5kLnZhbHZlLnNvdXJjZS5jb21waWxlZC1tYXAnLAogICAgICAgICdidGYnID0+ICdpbWFnZS9wcnMuYnRpZicsCiAgICAgICAgJ2J0aWYnID0+ICdpbWFnZS9wcnMuYnRpZicsCiAgICAgICAgJ2J1ZmZlcicgPT4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgJ2J6JyA9PiAnYXBwbGljYXRpb24veC1iemlwJywKICAgICAgICAnYnoyJyA9PiAnYXBwbGljYXRpb24veC1iemlwMicsCiAgICAgICAgJ2MnID0+ICd0ZXh0L3gtYycsCiAgICAgICAgJ2MxMWFtYycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5jbHVldHJ1c3QuY2FydG9tb2JpbGUtY29uZmlnJywKICAgICAgICAnYzExYW16JyA9PiAnYXBwbGljYXRpb24vdm5kLmNsdWV0cnVzdC5jYXJ0b21vYmlsZS1jb25maWctcGtnJywKICAgICAgICAnYzRkJyA9PiAnYXBwbGljYXRpb24vdm5kLmNsb25rLmM0Z3JvdXAnLAogICAgICAgICdjNGYnID0+ICdhcHBsaWNhdGlvbi92bmQuY2xvbmsuYzRncm91cCcsCiAgICAgICAgJ2M0ZycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5jbG9uay5jNGdyb3VwJywKICAgICAgICAnYzRwJyA9PiAnYXBwbGljYXRpb24vdm5kLmNsb25rLmM0Z3JvdXAnLAogICAgICAgICdjNHUnID0+ICdhcHBsaWNhdGlvbi92bmQuY2xvbmsuYzRncm91cCcsCiAgICAgICAgJ2NhYicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1jYWItY29tcHJlc3NlZCcsCiAgICAgICAgJ2NhZicgPT4gJ2F1ZGlvL3gtY2FmJywKICAgICAgICAnY2FwJyA9PiAnYXBwbGljYXRpb24vdm5kLnRjcGR1bXAucGNhcCcsCiAgICAgICAgJ2NhcicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5jdXJsLmNhcicsCiAgICAgICAgJ2NhdCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wa2kuc2VjY2F0JywKICAgICAgICAnY2I3JyA9PiAnYXBwbGljYXRpb24veC1jYnInLAogICAgICAgICdjYmEnID0+ICdhcHBsaWNhdGlvbi94LWNicicsCiAgICAgICAgJ2NicicgPT4gJ2FwcGxpY2F0aW9uL3gtY2JyJywKICAgICAgICAnY2J0JyA9PiAnYXBwbGljYXRpb24veC1jYnInLAogICAgICAgICdjYnonID0+ICdhcHBsaWNhdGlvbi94LWNicicsCiAgICAgICAgJ2NjJyA9PiAndGV4dC94LWMnLAogICAgICAgICdjY28nID0+ICdhcHBsaWNhdGlvbi94LWNvY29hJywKICAgICAgICAnY2N0JyA9PiAnYXBwbGljYXRpb24veC1kaXJlY3RvcicsCiAgICAgICAgJ2NjeG1sJyA9PiAnYXBwbGljYXRpb24vY2N4bWwreG1sJywKICAgICAgICAnY2RiY21zZycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5jb250YWN0LmNtc2cnLAogICAgICAgICdjZGYnID0+ICdhcHBsaWNhdGlvbi94LW5ldGNkZicsCiAgICAgICAgJ2NkZngnID0+ICdhcHBsaWNhdGlvbi9jZGZ4K3htbCcsCiAgICAgICAgJ2Nka2V5JyA9PiAnYXBwbGljYXRpb24vdm5kLm1lZGlhc3RhdGlvbi5jZGtleScsCiAgICAgICAgJ2NkbWlhJyA9PiAnYXBwbGljYXRpb24vY2RtaS1jYXBhYmlsaXR5JywKICAgICAgICAnY2RtaWMnID0+ICdhcHBsaWNhdGlvbi9jZG1pLWNvbnRhaW5lcicsCiAgICAgICAgJ2NkbWlkJyA9PiAnYXBwbGljYXRpb24vY2RtaS1kb21haW4nLAogICAgICAgICdjZG1pbycgPT4gJ2FwcGxpY2F0aW9uL2NkbWktb2JqZWN0JywKICAgICAgICAnY2RtaXEnID0+ICdhcHBsaWNhdGlvbi9jZG1pLXF1ZXVlJywKICAgICAgICAnY2R4JyA9PiAnY2hlbWljYWwveC1jZHgnLAogICAgICAgICdjZHhtbCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5jaGVtZHJhdyt4bWwnLAogICAgICAgICdjZHknID0+ICdhcHBsaWNhdGlvbi92bmQuY2luZGVyZWxsYScsCiAgICAgICAgJ2NlcicgPT4gJ2FwcGxpY2F0aW9uL3BraXgtY2VydCcsCiAgICAgICAgJ2NmcycgPT4gJ2FwcGxpY2F0aW9uL3gtY2ZzLWNvbXByZXNzZWQnLAogICAgICAgICdjZ20nID0+ICdpbWFnZS9jZ20nLAogICAgICAgICdjaGF0JyA9PiAnYXBwbGljYXRpb24veC1jaGF0JywKICAgICAgICAnY2htJyA9PiAnYXBwbGljYXRpb24vdm5kLm1zLWh0bWxoZWxwJywKICAgICAgICAnY2hydCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5rZGUua2NoYXJ0JywKICAgICAgICAnY2lmJyA9PiAnY2hlbWljYWwveC1jaWYnLAogICAgICAgICdjaWknID0+ICdhcHBsaWNhdGlvbi92bmQuYW5zZXItd2ViLWNlcnRpZmljYXRlLWlzc3VlLWluaXRpYXRpb24nLAogICAgICAgICdjaWwnID0+ICdhcHBsaWNhdGlvbi92bmQubXMtYXJ0Z2FscnknLAogICAgICAgICdjanMnID0+ICdhcHBsaWNhdGlvbi9ub2RlJywKICAgICAgICAnY2xhJyA9PiAnYXBwbGljYXRpb24vdm5kLmNsYXltb3JlJywKICAgICAgICAnY2xhc3MnID0+ICdhcHBsaWNhdGlvbi9qYXZhLXZtJywKICAgICAgICAnY2xkJyA9PiAnbW9kZWwvdm5kLmNsZCcsCiAgICAgICAgJ2Nsa2snID0+ICdhcHBsaWNhdGlvbi92bmQuY3JpY2suY2xpY2tlci5rZXlib2FyZCcsCiAgICAgICAgJ2Nsa3AnID0+ICdhcHBsaWNhdGlvbi92bmQuY3JpY2suY2xpY2tlci5wYWxldHRlJywKICAgICAgICAnY2xrdCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5jcmljay5jbGlja2VyLnRlbXBsYXRlJywKICAgICAgICAnY2xrdycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5jcmljay5jbGlja2VyLndvcmRiYW5rJywKICAgICAgICAnY2xreCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5jcmljay5jbGlja2VyJywKICAgICAgICAnY2xwJyA9PiAnYXBwbGljYXRpb24veC1tc2NsaXAnLAogICAgICAgICdjbWMnID0+ICdhcHBsaWNhdGlvbi92bmQuY29zbW9jYWxsZXInLAogICAgICAgICdjbWRmJyA9PiAnY2hlbWljYWwveC1jbWRmJywKICAgICAgICAnY21sJyA9PiAnY2hlbWljYWwveC1jbWwnLAogICAgICAgICdjbXAnID0+ICdhcHBsaWNhdGlvbi92bmQueWVsbG93cml2ZXItY3VzdG9tLW1lbnUnLAogICAgICAgICdjbXgnID0+ICdpbWFnZS94LWNteCcsCiAgICAgICAgJ2NvZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5yaW0uY29kJywKICAgICAgICAnY29mZmVlJyA9PiAndGV4dC9jb2ZmZWVzY3JpcHQnLAogICAgICAgICdjb20nID0+ICdhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQnLAogICAgICAgICdjb25mJyA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgJ2NwaW8nID0+ICdhcHBsaWNhdGlvbi94LWNwaW8nLAogICAgICAgICdjcGwnID0+ICdhcHBsaWNhdGlvbi9jcGwreG1sJywKICAgICAgICAnY3BwJyA9PiAndGV4dC94LWMnLAogICAgICAgICdjcHQnID0+ICdhcHBsaWNhdGlvbi9tYWMtY29tcGFjdHBybycsCiAgICAgICAgJ2NyZCcgPT4gJ2FwcGxpY2F0aW9uL3gtbXNjYXJkZmlsZScsCiAgICAgICAgJ2NybCcgPT4gJ2FwcGxpY2F0aW9uL3BraXgtY3JsJywKICAgICAgICAnY3J0JyA9PiAnYXBwbGljYXRpb24veC14NTA5LWNhLWNlcnQnLAogICAgICAgICdjcngnID0+ICdhcHBsaWNhdGlvbi94LWNocm9tZS1leHRlbnNpb24nLAogICAgICAgICdjcnlwdG9ub3RlJyA9PiAnYXBwbGljYXRpb24vdm5kLnJpZy5jcnlwdG9ub3RlJywKICAgICAgICAnY3NoJyA9PiAnYXBwbGljYXRpb24veC1jc2gnLAogICAgICAgICdjc2wnID0+ICdhcHBsaWNhdGlvbi92bmQuY2l0YXRpb25zdHlsZXMuc3R5bGUreG1sJywKICAgICAgICAnY3NtbCcgPT4gJ2NoZW1pY2FsL3gtY3NtbCcsCiAgICAgICAgJ2NzcCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5jb21tb25zcGFjZScsCiAgICAgICAgJ2NzcicgPT4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgJ2NzcycgPT4gJ3RleHQvY3NzJywKICAgICAgICAnY3N0JyA9PiAnYXBwbGljYXRpb24veC1kaXJlY3RvcicsCiAgICAgICAgJ2NzdicgPT4gJ3RleHQvY3N2JywKICAgICAgICAnY3UnID0+ICdhcHBsaWNhdGlvbi9jdS1zZWVtZScsCiAgICAgICAgJ2N1cmwnID0+ICd0ZXh0L3ZuZC5jdXJsJywKICAgICAgICAnY3dsJyA9PiAnYXBwbGljYXRpb24vY3dsJywKICAgICAgICAnY3d3JyA9PiAnYXBwbGljYXRpb24vcHJzLmN3dycsCiAgICAgICAgJ2N4dCcgPT4gJ2FwcGxpY2F0aW9uL3gtZGlyZWN0b3InLAogICAgICAgICdjeHgnID0+ICd0ZXh0L3gtYycsCiAgICAgICAgJ2RhZScgPT4gJ21vZGVsL3ZuZC5jb2xsYWRhK3htbCcsCiAgICAgICAgJ2RhZicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tb2JpdXMuZGFmJywKICAgICAgICAnZGFydCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5kYXJ0JywKICAgICAgICAnZGF0YWxlc3MnID0+ICdhcHBsaWNhdGlvbi92bmQuZmRzbi5zZWVkJywKICAgICAgICAnZGF2bW91bnQnID0+ICdhcHBsaWNhdGlvbi9kYXZtb3VudCt4bWwnLAogICAgICAgICdkYmYnID0+ICdhcHBsaWNhdGlvbi92bmQuZGJmJywKICAgICAgICAnZGJrJyA9PiAnYXBwbGljYXRpb24vZG9jYm9vayt4bWwnLAogICAgICAgICdkY20nID0+ICdhcHBsaWNhdGlvbi9kaWNvbScsCiAgICAgICAgJ2RjbXAnID0+ICdhcHBsaWNhdGlvbi92bmQuZGNtcCt4bWwnLAogICAgICAgICdkY3InID0+ICdhcHBsaWNhdGlvbi94LWRpcmVjdG9yJywKICAgICAgICAnZGN1cmwnID0+ICd0ZXh0L3ZuZC5jdXJsLmRjdXJsJywKICAgICAgICAnZGQyJyA9PiAnYXBwbGljYXRpb24vdm5kLm9tYS5kZDIreG1sJywKICAgICAgICAnZGRkJyA9PiAnYXBwbGljYXRpb24vdm5kLmZ1aml4ZXJveC5kZGQnLAogICAgICAgICdkZGYnID0+ICdhcHBsaWNhdGlvbi92bmQuc3luY21sLmRtZGRmK3htbCcsCiAgICAgICAgJ2RkcycgPT4gJ2ltYWdlL3ZuZC5tcy1kZHMnLAogICAgICAgICdkZWInID0+ICdhcHBsaWNhdGlvbi94LWRlYmlhbi1wYWNrYWdlJywKICAgICAgICAnZGVmJyA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgJ2RlcGxveScgPT4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgJ2RlcicgPT4gJ2FwcGxpY2F0aW9uL3gteDUwOS1jYS1jZXJ0JywKICAgICAgICAnZGZhYycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5kcmVhbWZhY3RvcnknLAogICAgICAgICdkZ2MnID0+ICdhcHBsaWNhdGlvbi94LWRnYy1jb21wcmVzc2VkJywKICAgICAgICAnZGliJyA9PiAnaW1hZ2UvYm1wJywKICAgICAgICAnZGljJyA9PiAndGV4dC94LWMnLAogICAgICAgICdkaXInID0+ICdhcHBsaWNhdGlvbi94LWRpcmVjdG9yJywKICAgICAgICAnZGlzJyA9PiAnYXBwbGljYXRpb24vdm5kLm1vYml1cy5kaXMnLAogICAgICAgICdkaXNwb3NpdGlvbi1ub3RpZmljYXRpb24nID0+ICdtZXNzYWdlL2Rpc3Bvc2l0aW9uLW5vdGlmaWNhdGlvbicsCiAgICAgICAgJ2Rpc3QnID0+ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICdkaXN0eicgPT4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgJ2RqdicgPT4gJ2ltYWdlL3ZuZC5kanZ1JywKICAgICAgICAnZGp2dScgPT4gJ2ltYWdlL3ZuZC5kanZ1JywKICAgICAgICAnZGxsJyA9PiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgICAnZG1nJyA9PiAnYXBwbGljYXRpb24veC1hcHBsZS1kaXNraW1hZ2UnLAogICAgICAgICdkbW4nID0+ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICdkbXAnID0+ICdhcHBsaWNhdGlvbi92bmQudGNwZHVtcC5wY2FwJywKICAgICAgICAnZG1zJyA9PiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgICAnZG5hJyA9PiAnYXBwbGljYXRpb24vdm5kLmRuYScsCiAgICAgICAgJ2RuZycgPT4gJ2ltYWdlL3gtYWRvYmUtZG5nJywKICAgICAgICAnZG9jJyA9PiAnYXBwbGljYXRpb24vbXN3b3JkJywKICAgICAgICAnZG9jbScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy13b3JkLmRvY3VtZW50Lm1hY3JvZW5hYmxlZC4xMicsCiAgICAgICAgJ2RvY3gnID0+ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCcsCiAgICAgICAgJ2RvdCcgPT4gJ2FwcGxpY2F0aW9uL21zd29yZCcsCiAgICAgICAgJ2RvdG0nID0+ICdhcHBsaWNhdGlvbi92bmQubXMtd29yZC50ZW1wbGF0ZS5tYWNyb2VuYWJsZWQuMTInLAogICAgICAgICdkb3R4JyA9PiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwudGVtcGxhdGUnLAogICAgICAgICdkcCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5vc2dpLmRwJywKICAgICAgICAnZHBnJyA9PiAnYXBwbGljYXRpb24vdm5kLmRwZ3JhcGgnLAogICAgICAgICdkcHgnID0+ICdpbWFnZS9kcHgnLAogICAgICAgICdkcmEnID0+ICdhdWRpby92bmQuZHJhJywKICAgICAgICAnZHJsZScgPT4gJ2ltYWdlL2RpY29tLXJsZScsCiAgICAgICAgJ2RybScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5wcm9jcmVhdGUuZHJlYW0nLAogICAgICAgICdkc2MnID0+ICd0ZXh0L3Bycy5saW5lcy50YWcnLAogICAgICAgICdkc3NjJyA9PiAnYXBwbGljYXRpb24vZHNzYytkZXInLAogICAgICAgICdkc3QnID0+ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICdkdGInID0+ICdhcHBsaWNhdGlvbi94LWR0Ym9vayt4bWwnLAogICAgICAgICdkdGQnID0+ICdhcHBsaWNhdGlvbi94bWwtZHRkJywKICAgICAgICAnZHRzJyA9PiAnYXVkaW8vdm5kLmR0cycsCiAgICAgICAgJ2R0c2hkJyA9PiAnYXVkaW8vdm5kLmR0cy5oZCcsCiAgICAgICAgJ2R1bXAnID0+ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICdkdmInID0+ICd2aWRlby92bmQuZHZiLmZpbGUnLAogICAgICAgICdkdmknID0+ICdhcHBsaWNhdGlvbi94LWR2aScsCiAgICAgICAgJ2R3ZCcgPT4gJ2FwcGxpY2F0aW9uL2F0c2MtZHdkK3htbCcsCiAgICAgICAgJ2R3ZicgPT4gJ21vZGVsL3ZuZC5kd2YnLAogICAgICAgICdkd2cnID0+ICdpbWFnZS92bmQuZHdnJywKICAgICAgICAnZHhmJyA9PiAnaW1hZ2Uvdm5kLmR4ZicsCiAgICAgICAgJ2R4cCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zcG90ZmlyZS5keHAnLAogICAgICAgICdkeHInID0+ICdhcHBsaWNhdGlvbi94LWRpcmVjdG9yJywKICAgICAgICAnZWFyJyA9PiAnYXBwbGljYXRpb24vamF2YS1hcmNoaXZlJywKICAgICAgICAnZWNlbHA0ODAwJyA9PiAnYXVkaW8vdm5kLm51ZXJhLmVjZWxwNDgwMCcsCiAgICAgICAgJ2VjZWxwNzQ3MCcgPT4gJ2F1ZGlvL3ZuZC5udWVyYS5lY2VscDc0NzAnLAogICAgICAgICdlY2VscDk2MDAnID0+ICdhdWRpby92bmQubnVlcmEuZWNlbHA5NjAwJywKICAgICAgICAnZWNtYScgPT4gJ2FwcGxpY2F0aW9uL2VjbWFzY3JpcHQnLAogICAgICAgICdlZG0nID0+ICdhcHBsaWNhdGlvbi92bmQubm92YWRpZ20uZWRtJywKICAgICAgICAnZWR4JyA9PiAnYXBwbGljYXRpb24vdm5kLm5vdmFkaWdtLmVkeCcsCiAgICAgICAgJ2VmaWYnID0+ICdhcHBsaWNhdGlvbi92bmQucGljc2VsJywKICAgICAgICAnZWk2JyA9PiAnYXBwbGljYXRpb24vdm5kLnBnLm9zYXNsaScsCiAgICAgICAgJ2VsYycgPT4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgJ2VtZicgPT4gJ2ltYWdlL2VtZicsCiAgICAgICAgJ2VtbCcgPT4gJ21lc3NhZ2UvcmZjODIyJywKICAgICAgICAnZW1tYScgPT4gJ2FwcGxpY2F0aW9uL2VtbWEreG1sJywKICAgICAgICAnZW1vdGlvbm1sJyA9PiAnYXBwbGljYXRpb24vZW1vdGlvbm1sK3htbCcsCiAgICAgICAgJ2VteicgPT4gJ2FwcGxpY2F0aW9uL3gtbXNtZXRhZmlsZScsCiAgICAgICAgJ2VvbCcgPT4gJ2F1ZGlvL3ZuZC5kaWdpdGFsLXdpbmRzJywKICAgICAgICAnZW90JyA9PiAnYXBwbGljYXRpb24vdm5kLm1zLWZvbnRvYmplY3QnLAogICAgICAgICdlcHMnID0+ICdhcHBsaWNhdGlvbi9wb3N0c2NyaXB0JywKICAgICAgICAnZXB1YicgPT4gJ2FwcGxpY2F0aW9uL2VwdWIremlwJywKICAgICAgICAnZXMzJyA9PiAnYXBwbGljYXRpb24vdm5kLmVzemlnbm8zK3htbCcsCiAgICAgICAgJ2VzYScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5vc2dpLnN1YnN5c3RlbScsCiAgICAgICAgJ2VzZicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5lcHNvbi5lc2YnLAogICAgICAgICdldDMnID0+ICdhcHBsaWNhdGlvbi92bmQuZXN6aWdubzMreG1sJywKICAgICAgICAnZXR4JyA9PiAndGV4dC94LXNldGV4dCcsCiAgICAgICAgJ2V2YScgPT4gJ2FwcGxpY2F0aW9uL3gtZXZhJywKICAgICAgICAnZXZ5JyA9PiAnYXBwbGljYXRpb24veC1lbnZveScsCiAgICAgICAgJ2V4ZScgPT4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgJ2V4aScgPT4gJ2FwcGxpY2F0aW9uL2V4aScsCiAgICAgICAgJ2V4cCcgPT4gJ2FwcGxpY2F0aW9uL2V4cHJlc3MnLAogICAgICAgICdleHInID0+ICdpbWFnZS9hY2VzJywKICAgICAgICAnZXh0JyA9PiAnYXBwbGljYXRpb24vdm5kLm5vdmFkaWdtLmV4dCcsCiAgICAgICAgJ2V6JyA9PiAnYXBwbGljYXRpb24vYW5kcmV3LWluc2V0JywKICAgICAgICAnZXoyJyA9PiAnYXBwbGljYXRpb24vdm5kLmV6cGl4LWFsYnVtJywKICAgICAgICAnZXozJyA9PiAnYXBwbGljYXRpb24vdm5kLmV6cGl4LXBhY2thZ2UnLAogICAgICAgICdmJyA9PiAndGV4dC94LWZvcnRyYW4nLAogICAgICAgICdmNHYnID0+ICd2aWRlby9tcDQnLAogICAgICAgICdmNzcnID0+ICd0ZXh0L3gtZm9ydHJhbicsCiAgICAgICAgJ2Y5MCcgPT4gJ3RleHQveC1mb3J0cmFuJywKICAgICAgICAnZmFjdGknID0+ICdpbWFnZS92bmQuYmxvY2tmYWN0LmZhY3RpJywKICAgICAgICAnZmJzJyA9PiAnaW1hZ2Uvdm5kLmZhc3RiaWRzaGVldCcsCiAgICAgICAgJ2ZieCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5hdXRvZGVzay5mYngnLAogICAgICAgICdmY2R0JyA9PiAnYXBwbGljYXRpb24vdm5kLmFkb2JlLmZvcm1zY2VudHJhbC5mY2R0JywKICAgICAgICAnZmNzJyA9PiAnYXBwbGljYXRpb24vdm5kLmlzYWMuZmNzJywKICAgICAgICAnZmRmJyA9PiAnYXBwbGljYXRpb24vZmRmJywKICAgICAgICAnZmR0JyA9PiAnYXBwbGljYXRpb24vZmR0K3htbCcsCiAgICAgICAgJ2ZlX2xhdW5jaCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5kZW5vdm8uZmNzZWxheW91dC1saW5rJywKICAgICAgICAnZmc1JyA9PiAnYXBwbGljYXRpb24vdm5kLmZ1aml0c3Uub2FzeXNncCcsCiAgICAgICAgJ2ZnZCcgPT4gJ2FwcGxpY2F0aW9uL3gtZGlyZWN0b3InLAogICAgICAgICdmaCcgPT4gJ2ltYWdlL3gtZnJlZWhhbmQnLAogICAgICAgICdmaDQnID0+ICdpbWFnZS94LWZyZWVoYW5kJywKICAgICAgICAnZmg1JyA9PiAnaW1hZ2UveC1mcmVlaGFuZCcsCiAgICAgICAgJ2ZoNycgPT4gJ2ltYWdlL3gtZnJlZWhhbmQnLAogICAgICAgICdmaGMnID0+ICdpbWFnZS94LWZyZWVoYW5kJywKICAgICAgICAnZmlnJyA9PiAnYXBwbGljYXRpb24veC14ZmlnJywKICAgICAgICAnZml0cycgPT4gJ2ltYWdlL2ZpdHMnLAogICAgICAgICdmbGFjJyA9PiAnYXVkaW8veC1mbGFjJywKICAgICAgICAnZmxpJyA9PiAndmlkZW8veC1mbGknLAogICAgICAgICdmbG8nID0+ICdhcHBsaWNhdGlvbi92bmQubWljcm9ncmFmeC5mbG8nLAogICAgICAgICdmbHYnID0+ICd2aWRlby94LWZsdicsCiAgICAgICAgJ2ZsdycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5rZGUua2l2aW8nLAogICAgICAgICdmbHgnID0+ICd0ZXh0L3ZuZC5mbWkuZmxleHN0b3InLAogICAgICAgICdmbHknID0+ICd0ZXh0L3ZuZC5mbHknLAogICAgICAgICdmbScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5mcmFtZW1ha2VyJywKICAgICAgICAnZm5jJyA9PiAnYXBwbGljYXRpb24vdm5kLmZyb2dhbnMuZm5jJywKICAgICAgICAnZm8nID0+ICdhcHBsaWNhdGlvbi92bmQuc29mdHdhcmU2MDIuZmlsbGVyLmZvcm0reG1sJywKICAgICAgICAnZm9yJyA9PiAndGV4dC94LWZvcnRyYW4nLAogICAgICAgICdmcHgnID0+ICdpbWFnZS92bmQuZnB4JywKICAgICAgICAnZnJhbWUnID0+ICdhcHBsaWNhdGlvbi92bmQuZnJhbWVtYWtlcicsCiAgICAgICAgJ2ZzYycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5mc2Mud2VibGF1bmNoJywKICAgICAgICAnZnN0JyA9PiAnaW1hZ2Uvdm5kLmZzdCcsCiAgICAgICAgJ2Z0YycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5mbHV4dGltZS5jbGlwJywKICAgICAgICAnZnRpJyA9PiAnYXBwbGljYXRpb24vdm5kLmFuc2VyLXdlYi1mdW5kcy10cmFuc2Zlci1pbml0aWF0aW9uJywKICAgICAgICAnZnZ0JyA9PiAndmlkZW8vdm5kLmZ2dCcsCiAgICAgICAgJ2Z4cCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5hZG9iZS5meHAnLAogICAgICAgICdmeHBsJyA9PiAnYXBwbGljYXRpb24vdm5kLmFkb2JlLmZ4cCcsCiAgICAgICAgJ2Z6cycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5mdXp6eXNoZWV0JywKICAgICAgICAnZzJ3JyA9PiAnYXBwbGljYXRpb24vdm5kLmdlb3BsYW4nLAogICAgICAgICdnMycgPT4gJ2ltYWdlL2czZmF4JywKICAgICAgICAnZzN3JyA9PiAnYXBwbGljYXRpb24vdm5kLmdlb3NwYWNlJywKICAgICAgICAnZ2FjJyA9PiAnYXBwbGljYXRpb24vdm5kLmdyb292ZS1hY2NvdW50JywKICAgICAgICAnZ2FtJyA9PiAnYXBwbGljYXRpb24veC10YWRzJywKICAgICAgICAnZ2JyJyA9PiAnYXBwbGljYXRpb24vcnBraS1naG9zdGJ1c3RlcnMnLAogICAgICAgICdnY2EnID0+ICdhcHBsaWNhdGlvbi94LWdjYS1jb21wcmVzc2VkJywKICAgICAgICAnZ2RsJyA9PiAnbW9kZWwvdm5kLmdkbCcsCiAgICAgICAgJ2dkb2MnID0+ICdhcHBsaWNhdGlvbi92bmQuZ29vZ2xlLWFwcHMuZG9jdW1lbnQnLAogICAgICAgICdnZHJhdycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5nb29nbGUtYXBwcy5kcmF3aW5nJywKICAgICAgICAnZ2VkJyA9PiAndGV4dC92bmQuZmFtaWx5c2VhcmNoLmdlZGNvbScsCiAgICAgICAgJ2dlbycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5keW5hZ2VvJywKICAgICAgICAnZ2VvanNvbicgPT4gJ2FwcGxpY2F0aW9uL2dlbytqc29uJywKICAgICAgICAnZ2V4JyA9PiAnYXBwbGljYXRpb24vdm5kLmdlb21ldHJ5LWV4cGxvcmVyJywKICAgICAgICAnZ2Zvcm0nID0+ICdhcHBsaWNhdGlvbi92bmQuZ29vZ2xlLWFwcHMuZm9ybScsCiAgICAgICAgJ2dnYicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5nZW9nZWJyYS5maWxlJywKICAgICAgICAnZ2dzJyA9PiAnYXBwbGljYXRpb24vdm5kLmdlb2dlYnJhLnNsaWRlcycsCiAgICAgICAgJ2dndCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5nZW9nZWJyYS50b29sJywKICAgICAgICAnZ2hmJyA9PiAnYXBwbGljYXRpb24vdm5kLmdyb292ZS1oZWxwJywKICAgICAgICAnZ2lmJyA9PiAnaW1hZ2UvZ2lmJywKICAgICAgICAnZ2ltJyA9PiAnYXBwbGljYXRpb24vdm5kLmdyb292ZS1pZGVudGl0eS1tZXNzYWdlJywKICAgICAgICAnZ2phbScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5nb29nbGUtYXBwcy5qYW0nLAogICAgICAgICdnbGInID0+ICdtb2RlbC9nbHRmLWJpbmFyeScsCiAgICAgICAgJ2dsdGYnID0+ICdtb2RlbC9nbHRmK2pzb24nLAogICAgICAgICdnbWFwJyA9PiAnYXBwbGljYXRpb24vdm5kLmdvb2dsZS1hcHBzLm1hcCcsCiAgICAgICAgJ2dtbCcgPT4gJ2FwcGxpY2F0aW9uL2dtbCt4bWwnLAogICAgICAgICdnbXgnID0+ICdhcHBsaWNhdGlvbi92bmQuZ214JywKICAgICAgICAnZ251bWVyaWMnID0+ICdhcHBsaWNhdGlvbi94LWdudW1lcmljJywKICAgICAgICAnZ3BoJyA9PiAnYXBwbGljYXRpb24vdm5kLmZsb2dyYXBoaXQnLAogICAgICAgICdncHgnID0+ICdhcHBsaWNhdGlvbi9ncHgreG1sJywKICAgICAgICAnZ3FmJyA9PiAnYXBwbGljYXRpb24vdm5kLmdyYWZlcScsCiAgICAgICAgJ2dxcycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5ncmFmZXEnLAogICAgICAgICdncmFtJyA9PiAnYXBwbGljYXRpb24vc3JncycsCiAgICAgICAgJ2dyYW1wcycgPT4gJ2FwcGxpY2F0aW9uL3gtZ3JhbXBzLXhtbCcsCiAgICAgICAgJ2dyZScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5nZW9tZXRyeS1leHBsb3JlcicsCiAgICAgICAgJ2dydicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5ncm9vdmUtaW5qZWN0b3InLAogICAgICAgICdncnhtbCcgPT4gJ2FwcGxpY2F0aW9uL3NyZ3MreG1sJywKICAgICAgICAnZ3NjcmlwdCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5nb29nbGUtYXBwcy5zY3JpcHQnLAogICAgICAgICdnc2YnID0+ICdhcHBsaWNhdGlvbi94LWZvbnQtZ2hvc3RzY3JpcHQnLAogICAgICAgICdnc2hlZXQnID0+ICdhcHBsaWNhdGlvbi92bmQuZ29vZ2xlLWFwcHMuc3ByZWFkc2hlZXQnLAogICAgICAgICdnc2l0ZScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5nb29nbGUtYXBwcy5zaXRlJywKICAgICAgICAnZ3NsaWRlcycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5nb29nbGUtYXBwcy5wcmVzZW50YXRpb24nLAogICAgICAgICdndGFyJyA9PiAnYXBwbGljYXRpb24veC1ndGFyJywKICAgICAgICAnZ3RtJyA9PiAnYXBwbGljYXRpb24vdm5kLmdyb292ZS10b29sLW1lc3NhZ2UnLAogICAgICAgICdndHcnID0+ICdtb2RlbC92bmQuZ3R3JywKICAgICAgICAnZ3YnID0+ICd0ZXh0L3ZuZC5ncmFwaHZpeicsCiAgICAgICAgJ2d4ZicgPT4gJ2FwcGxpY2F0aW9uL2d4ZicsCiAgICAgICAgJ2d4dCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5nZW9uZXh0JywKICAgICAgICAnZ3onID0+ICdhcHBsaWNhdGlvbi9nemlwJywKICAgICAgICAnZ3ppcCcgPT4gJ2FwcGxpY2F0aW9uL2d6aXAnLAogICAgICAgICdoJyA9PiAndGV4dC94LWMnLAogICAgICAgICdoMjYxJyA9PiAndmlkZW8vaDI2MScsCiAgICAgICAgJ2gyNjMnID0+ICd2aWRlby9oMjYzJywKICAgICAgICAnaDI2NCcgPT4gJ3ZpZGVvL2gyNjQnLAogICAgICAgICdoYWwnID0+ICdhcHBsaWNhdGlvbi92bmQuaGFsK3htbCcsCiAgICAgICAgJ2hiY2knID0+ICdhcHBsaWNhdGlvbi92bmQuaGJjaScsCiAgICAgICAgJ2hicycgPT4gJ3RleHQveC1oYW5kbGViYXJzLXRlbXBsYXRlJywKICAgICAgICAnaGRkJyA9PiAnYXBwbGljYXRpb24veC12aXJ0dWFsYm94LWhkZCcsCiAgICAgICAgJ2hkZicgPT4gJ2FwcGxpY2F0aW9uL3gtaGRmJywKICAgICAgICAnaGVpYycgPT4gJ2ltYWdlL2hlaWMnLAogICAgICAgICdoZWljcycgPT4gJ2ltYWdlL2hlaWMtc2VxdWVuY2UnLAogICAgICAgICdoZWlmJyA9PiAnaW1hZ2UvaGVpZicsCiAgICAgICAgJ2hlaWZzJyA9PiAnaW1hZ2UvaGVpZi1zZXF1ZW5jZScsCiAgICAgICAgJ2hlajInID0+ICdpbWFnZS9oZWoyaycsCiAgICAgICAgJ2hlbGQnID0+ICdhcHBsaWNhdGlvbi9hdHNjLWhlbGQreG1sJywKICAgICAgICAnaGgnID0+ICd0ZXh0L3gtYycsCiAgICAgICAgJ2hqc29uJyA9PiAnYXBwbGljYXRpb24vaGpzb24nLAogICAgICAgICdobHAnID0+ICdhcHBsaWNhdGlvbi93aW5obHAnLAogICAgICAgICdocGdsJyA9PiAnYXBwbGljYXRpb24vdm5kLmhwLWhwZ2wnLAogICAgICAgICdocGlkJyA9PiAnYXBwbGljYXRpb24vdm5kLmhwLWhwaWQnLAogICAgICAgICdocHMnID0+ICdhcHBsaWNhdGlvbi92bmQuaHAtaHBzJywKICAgICAgICAnaHF4JyA9PiAnYXBwbGljYXRpb24vbWFjLWJpbmhleDQwJywKICAgICAgICAnaHRjJyA9PiAndGV4dC94LWNvbXBvbmVudCcsCiAgICAgICAgJ2h0a2UnID0+ICdhcHBsaWNhdGlvbi92bmQua2VuYW1lYWFwcCcsCiAgICAgICAgJ2h0bScgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgJ2h0bWwnID0+ICd0ZXh0L2h0bWwnLAogICAgICAgICdodmQnID0+ICdhcHBsaWNhdGlvbi92bmQueWFtYWhhLmh2LWRpYycsCiAgICAgICAgJ2h2cCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC55YW1haGEuaHYtdm9pY2UnLAogICAgICAgICdodnMnID0+ICdhcHBsaWNhdGlvbi92bmQueWFtYWhhLmh2LXNjcmlwdCcsCiAgICAgICAgJ2kyZycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5pbnRlcmdlbycsCiAgICAgICAgJ2ljYycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5pY2Nwcm9maWxlJywKICAgICAgICAnaWNlJyA9PiAneC1jb25mZXJlbmNlL3gtY29vbHRhbGsnLAogICAgICAgICdpY20nID0+ICdhcHBsaWNhdGlvbi92bmQuaWNjcHJvZmlsZScsCiAgICAgICAgJ2ljbycgPT4gJ2ltYWdlL3ZuZC5taWNyb3NvZnQuaWNvbicsCiAgICAgICAgJ2ljcycgPT4gJ3RleHQvY2FsZW5kYXInLAogICAgICAgICdpZWYnID0+ICdpbWFnZS9pZWYnLAogICAgICAgICdpZmInID0+ICd0ZXh0L2NhbGVuZGFyJywKICAgICAgICAnaWZtJyA9PiAnYXBwbGljYXRpb24vdm5kLnNoYW5hLmluZm9ybWVkLmZvcm1kYXRhJywKICAgICAgICAnaWdlcycgPT4gJ21vZGVsL2lnZXMnLAogICAgICAgICdpZ2wnID0+ICdhcHBsaWNhdGlvbi92bmQuaWdsb2FkZXInLAogICAgICAgICdpZ20nID0+ICdhcHBsaWNhdGlvbi92bmQuaW5zb3JzLmlnbScsCiAgICAgICAgJ2lncycgPT4gJ21vZGVsL2lnZXMnLAogICAgICAgICdpZ3gnID0+ICdhcHBsaWNhdGlvbi92bmQubWljcm9ncmFmeC5pZ3gnLAogICAgICAgICdpaWYnID0+ICdhcHBsaWNhdGlvbi92bmQuc2hhbmEuaW5mb3JtZWQuaW50ZXJjaGFuZ2UnLAogICAgICAgICdpbWcnID0+ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICdpbXAnID0+ICdhcHBsaWNhdGlvbi92bmQuYWNjcGFjLnNpbXBseS5pbXAnLAogICAgICAgICdpbXMnID0+ICdhcHBsaWNhdGlvbi92bmQubXMtaW1zJywKICAgICAgICAnaW4nID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAnaW5kZCcgPT4gJ2FwcGxpY2F0aW9uL3gtaW5kZXNpZ24nLAogICAgICAgICdpbmknID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAnaW5rJyA9PiAnYXBwbGljYXRpb24vaW5rbWwreG1sJywKICAgICAgICAnaW5rbWwnID0+ICdhcHBsaWNhdGlvbi9pbmttbCt4bWwnLAogICAgICAgICdpbnN0YWxsJyA9PiAnYXBwbGljYXRpb24veC1pbnN0YWxsLWluc3RydWN0aW9ucycsCiAgICAgICAgJ2lvdGEnID0+ICdhcHBsaWNhdGlvbi92bmQuYXN0cmFlYS1zb2Z0d2FyZS5pb3RhJywKICAgICAgICAnaXBmaXgnID0+ICdhcHBsaWNhdGlvbi9pcGZpeCcsCiAgICAgICAgJ2lwaycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zaGFuYS5pbmZvcm1lZC5wYWNrYWdlJywKICAgICAgICAnaXB5bmInID0+ICdhcHBsaWNhdGlvbi94LWlweW5iK2pzb24nLAogICAgICAgICdpcm0nID0+ICdhcHBsaWNhdGlvbi92bmQuaWJtLnJpZ2h0cy1tYW5hZ2VtZW50JywKICAgICAgICAnaXJwJyA9PiAnYXBwbGljYXRpb24vdm5kLmlyZXBvc2l0b3J5LnBhY2thZ2UreG1sJywKICAgICAgICAnaXNvJyA9PiAnYXBwbGljYXRpb24veC1pc285NjYwLWltYWdlJywKICAgICAgICAnaXRwJyA9PiAnYXBwbGljYXRpb24vdm5kLnNoYW5hLmluZm9ybWVkLmZvcm10ZW1wbGF0ZScsCiAgICAgICAgJ2l0cycgPT4gJ2FwcGxpY2F0aW9uL2l0cyt4bWwnLAogICAgICAgICdpdnAnID0+ICdhcHBsaWNhdGlvbi92bmQuaW1tZXJ2aXNpb24taXZwJywKICAgICAgICAnaXZ1JyA9PiAnYXBwbGljYXRpb24vdm5kLmltbWVydmlzaW9uLWl2dScsCiAgICAgICAgJ2phZCcgPT4gJ3RleHQvdm5kLnN1bi5qMm1lLmFwcC1kZXNjcmlwdG9yJywKICAgICAgICAnamFkZScgPT4gJ3RleHQvamFkZScsCiAgICAgICAgJ2phaWknID0+ICdpbWFnZS9qYWlpJywKICAgICAgICAnamFpcycgPT4gJ2ltYWdlL2phaXMnLAogICAgICAgICdqYW0nID0+ICdhcHBsaWNhdGlvbi92bmQuamFtJywKICAgICAgICAnamFyJyA9PiAnYXBwbGljYXRpb24vamF2YS1hcmNoaXZlJywKICAgICAgICAnamFyZGlmZicgPT4gJ2FwcGxpY2F0aW9uL3gtamF2YS1hcmNoaXZlLWRpZmYnLAogICAgICAgICdqYXZhJyA9PiAndGV4dC94LWphdmEtc291cmNlJywKICAgICAgICAnamZpZicgPT4gJ2ltYWdlL2pwZWcnLAogICAgICAgICdqaGMnID0+ICdpbWFnZS9qcGhjJywKICAgICAgICAnamlzcCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5qaXNwJywKICAgICAgICAnamxzJyA9PiAnaW1hZ2UvamxzJywKICAgICAgICAnamx0JyA9PiAnYXBwbGljYXRpb24vdm5kLmhwLWpseXQnLAogICAgICAgICdqbmcnID0+ICdpbWFnZS94LWpuZycsCiAgICAgICAgJ2pubHAnID0+ICdhcHBsaWNhdGlvbi94LWphdmEtam5scC1maWxlJywKICAgICAgICAnam9kYScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5qb29zdC5qb2RhLWFyY2hpdmUnLAogICAgICAgICdqcDInID0+ICdpbWFnZS9qcDInLAogICAgICAgICdqcGUnID0+ICdpbWFnZS9qcGVnJywKICAgICAgICAnanBlZycgPT4gJ2ltYWdlL2pwZWcnLAogICAgICAgICdqcGYnID0+ICdpbWFnZS9qcHgnLAogICAgICAgICdqcGcnID0+ICdpbWFnZS9qcGVnJywKICAgICAgICAnanBnMicgPT4gJ2ltYWdlL2pwMicsCiAgICAgICAgJ2pwZ20nID0+ICdpbWFnZS9qcG0nLAogICAgICAgICdqcGd2JyA9PiAndmlkZW8vanBlZycsCiAgICAgICAgJ2pwaCcgPT4gJ2ltYWdlL2pwaCcsCiAgICAgICAgJ2pwbScgPT4gJ2ltYWdlL2pwbScsCiAgICAgICAgJ2pweCcgPT4gJ2ltYWdlL2pweCcsCiAgICAgICAgJ2pzJyA9PiAndGV4dC9qYXZhc2NyaXB0JywKICAgICAgICAnanNvbicgPT4gJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICdqc29uNScgPT4gJ2FwcGxpY2F0aW9uL2pzb241JywKICAgICAgICAnanNvbmxkJyA9PiAnYXBwbGljYXRpb24vbGQranNvbicsCiAgICAgICAgJ2pzb25tbCcgPT4gJ2FwcGxpY2F0aW9uL2pzb25tbCtqc29uJywKICAgICAgICAnanN4JyA9PiAndGV4dC9qc3gnLAogICAgICAgICdqdCcgPT4gJ21vZGVsL2p0JywKICAgICAgICAnanhsJyA9PiAnaW1hZ2UvanhsJywKICAgICAgICAnanhyJyA9PiAnaW1hZ2UvanhyJywKICAgICAgICAnanhyYScgPT4gJ2ltYWdlL2p4cmEnLAogICAgICAgICdqeHJzJyA9PiAnaW1hZ2UvanhycycsCiAgICAgICAgJ2p4cycgPT4gJ2ltYWdlL2p4cycsCiAgICAgICAgJ2p4c2MnID0+ICdpbWFnZS9qeHNjJywKICAgICAgICAnanhzaScgPT4gJ2ltYWdlL2p4c2knLAogICAgICAgICdqeHNzJyA9PiAnaW1hZ2UvanhzcycsCiAgICAgICAgJ2thcicgPT4gJ2F1ZGlvL21pZGknLAogICAgICAgICdrYXJib24nID0+ICdhcHBsaWNhdGlvbi92bmQua2RlLmthcmJvbicsCiAgICAgICAgJ2tibCcgPT4gJ2FwcGxpY2F0aW9uL2tibCt4bWwnLAogICAgICAgICdrZGInID0+ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICdrZGJ4JyA9PiAnYXBwbGljYXRpb24veC1rZWVwYXNzMicsCiAgICAgICAgJ2tleScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5hcHBsZS5rZXlub3RlJywKICAgICAgICAna2ZvJyA9PiAnYXBwbGljYXRpb24vdm5kLmtkZS5rZm9ybXVsYScsCiAgICAgICAgJ2tpYScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5raWRzcGlyYXRpb24nLAogICAgICAgICdrbWwnID0+ICdhcHBsaWNhdGlvbi92bmQuZ29vZ2xlLWVhcnRoLmttbCt4bWwnLAogICAgICAgICdrbXonID0+ICdhcHBsaWNhdGlvbi92bmQuZ29vZ2xlLWVhcnRoLmtteicsCiAgICAgICAgJ2tuZScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5raW5hcicsCiAgICAgICAgJ2tucCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5raW5hcicsCiAgICAgICAgJ2tvbicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5rZGUua29udG91cicsCiAgICAgICAgJ2twcicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5rZGUua3ByZXNlbnRlcicsCiAgICAgICAgJ2twdCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5rZGUua3ByZXNlbnRlcicsCiAgICAgICAgJ2tweHgnID0+ICdhcHBsaWNhdGlvbi92bmQuZHMta2V5cG9pbnQnLAogICAgICAgICdrc3AnID0+ICdhcHBsaWNhdGlvbi92bmQua2RlLmtzcHJlYWQnLAogICAgICAgICdrdHInID0+ICdhcHBsaWNhdGlvbi92bmQua2Fob290eicsCiAgICAgICAgJ2t0eCcgPT4gJ2ltYWdlL2t0eCcsCiAgICAgICAgJ2t0eDInID0+ICdpbWFnZS9rdHgyJywKICAgICAgICAna3R6JyA9PiAnYXBwbGljYXRpb24vdm5kLmthaG9vdHonLAogICAgICAgICdrd2QnID0+ICdhcHBsaWNhdGlvbi92bmQua2RlLmt3b3JkJywKICAgICAgICAna3d0JyA9PiAnYXBwbGljYXRpb24vdm5kLmtkZS5rd29yZCcsCiAgICAgICAgJ2xhc3htbCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5sYXMubGFzK3htbCcsCiAgICAgICAgJ2xhdGV4JyA9PiAnYXBwbGljYXRpb24veC1sYXRleCcsCiAgICAgICAgJ2xiZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5sbGFtYWdyYXBoaWNzLmxpZmUtYmFsYW5jZS5kZXNrdG9wJywKICAgICAgICAnbGJlJyA9PiAnYXBwbGljYXRpb24vdm5kLmxsYW1hZ3JhcGhpY3MubGlmZS1iYWxhbmNlLmV4Y2hhbmdlK3htbCcsCiAgICAgICAgJ2xlcycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5oaGUubGVzc29uLXBsYXllcicsCiAgICAgICAgJ2xlc3MnID0+ICd0ZXh0L2xlc3MnLAogICAgICAgICdsZ3InID0+ICdhcHBsaWNhdGlvbi9sZ3IreG1sJywKICAgICAgICAnbGhhJyA9PiAnYXBwbGljYXRpb24veC1semgtY29tcHJlc3NlZCcsCiAgICAgICAgJ2xpbms2NicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5yb3V0ZTY2Lmxpbms2Nit4bWwnLAogICAgICAgICdsaXN0JyA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgJ2xpc3QzODIwJyA9PiAnYXBwbGljYXRpb24vdm5kLmlibS5tb2RjYXAnLAogICAgICAgICdsaXN0YWZwJyA9PiAnYXBwbGljYXRpb24vdm5kLmlibS5tb2RjYXAnLAogICAgICAgICdsaXRjb2ZmZWUnID0+ICd0ZXh0L2NvZmZlZXNjcmlwdCcsCiAgICAgICAgJ2xuaycgPT4gJ2FwcGxpY2F0aW9uL3gtbXMtc2hvcnRjdXQnLAogICAgICAgICdsb2cnID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAnbG9zdHhtbCcgPT4gJ2FwcGxpY2F0aW9uL2xvc3QreG1sJywKICAgICAgICAnbG90dGllJyA9PiAnYXBwbGljYXRpb24vemlwK2RvdGxvdHRpZScsCiAgICAgICAgJ2xyZicgPT4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgJ2xybScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1scm0nLAogICAgICAgICdsdGYnID0+ICdhcHBsaWNhdGlvbi92bmQuZnJvZ2Fucy5sdGYnLAogICAgICAgICdsdWEnID0+ICd0ZXh0L3gtbHVhJywKICAgICAgICAnbHVhYycgPT4gJ2FwcGxpY2F0aW9uL3gtbHVhLWJ5dGVjb2RlJywKICAgICAgICAnbHZwJyA9PiAnYXVkaW8vdm5kLmx1Y2VudC52b2ljZScsCiAgICAgICAgJ2x3cCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5sb3R1cy13b3JkcHJvJywKICAgICAgICAnbHpoJyA9PiAnYXBwbGljYXRpb24veC1semgtY29tcHJlc3NlZCcsCiAgICAgICAgJ20xMycgPT4gJ2FwcGxpY2F0aW9uL3gtbXNtZWRpYXZpZXcnLAogICAgICAgICdtMTQnID0+ICdhcHBsaWNhdGlvbi94LW1zbWVkaWF2aWV3JywKICAgICAgICAnbTF2JyA9PiAndmlkZW8vbXBlZycsCiAgICAgICAgJ20yMScgPT4gJ2FwcGxpY2F0aW9uL21wMjEnLAogICAgICAgICdtMmEnID0+ICdhdWRpby9tcGVnJywKICAgICAgICAnbTJ0JyA9PiAndmlkZW8vbXAydCcsCiAgICAgICAgJ20ydHMnID0+ICd2aWRlby9tcDJ0JywKICAgICAgICAnbTJ2JyA9PiAndmlkZW8vbXBlZycsCiAgICAgICAgJ20zYScgPT4gJ2F1ZGlvL21wZWcnLAogICAgICAgICdtM3UnID0+ICdhdWRpby94LW1wZWd1cmwnLAogICAgICAgICdtM3U4JyA9PiAnYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWd1cmwnLAogICAgICAgICdtNGEnID0+ICdhdWRpby9tcDQnLAogICAgICAgICdtNGInID0+ICdhdWRpby9tcDQnLAogICAgICAgICdtNHAnID0+ICdhcHBsaWNhdGlvbi9tcDQnLAogICAgICAgICdtNHMnID0+ICd2aWRlby9pc28uc2VnbWVudCcsCiAgICAgICAgJ200dScgPT4gJ3ZpZGVvL3ZuZC5tcGVndXJsJywKICAgICAgICAnbTR2JyA9PiAndmlkZW8veC1tNHYnLAogICAgICAgICdtYScgPT4gJ2FwcGxpY2F0aW9uL21hdGhlbWF0aWNhJywKICAgICAgICAnbWFkcycgPT4gJ2FwcGxpY2F0aW9uL21hZHMreG1sJywKICAgICAgICAnbWFlaScgPT4gJ2FwcGxpY2F0aW9uL21tdC1hZWkreG1sJywKICAgICAgICAnbWFnJyA9PiAnYXBwbGljYXRpb24vdm5kLmVjb3dpbi5jaGFydCcsCiAgICAgICAgJ21ha2VyJyA9PiAnYXBwbGljYXRpb24vdm5kLmZyYW1lbWFrZXInLAogICAgICAgICdtYW4nID0+ICd0ZXh0L3Ryb2ZmJywKICAgICAgICAnbWFuaWZlc3QnID0+ICd0ZXh0L2NhY2hlLW1hbmlmZXN0JywKICAgICAgICAnbWFwJyA9PiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgJ21hcicgPT4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgJ21hcmtkb3duJyA9PiAndGV4dC9tYXJrZG93bicsCiAgICAgICAgJ21hdGhtbCcgPT4gJ2FwcGxpY2F0aW9uL21hdGhtbCt4bWwnLAogICAgICAgICdtYicgPT4gJ2FwcGxpY2F0aW9uL21hdGhlbWF0aWNhJywKICAgICAgICAnbWJrJyA9PiAnYXBwbGljYXRpb24vdm5kLm1vYml1cy5tYmsnLAogICAgICAgICdtYm94JyA9PiAnYXBwbGljYXRpb24vbWJveCcsCiAgICAgICAgJ21jMScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tZWRjYWxjZGF0YScsCiAgICAgICAgJ21jZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tY2QnLAogICAgICAgICdtY3VybCcgPT4gJ3RleHQvdm5kLmN1cmwubWN1cmwnLAogICAgICAgICdtZCcgPT4gJ3RleHQvbWFya2Rvd24nLAogICAgICAgICdtZGInID0+ICdhcHBsaWNhdGlvbi94LW1zYWNjZXNzJywKICAgICAgICAnbWRpJyA9PiAnaW1hZ2Uvdm5kLm1zLW1vZGknLAogICAgICAgICdtZHgnID0+ICd0ZXh0L21keCcsCiAgICAgICAgJ21lJyA9PiAndGV4dC90cm9mZicsCiAgICAgICAgJ21lc2gnID0+ICdtb2RlbC9tZXNoJywKICAgICAgICAnbWV0YTQnID0+ICdhcHBsaWNhdGlvbi9tZXRhbGluazQreG1sJywKICAgICAgICAnbWV0YWxpbmsnID0+ICdhcHBsaWNhdGlvbi9tZXRhbGluayt4bWwnLAogICAgICAgICdtZXRzJyA9PiAnYXBwbGljYXRpb24vbWV0cyt4bWwnLAogICAgICAgICdtZm0nID0+ICdhcHBsaWNhdGlvbi92bmQubWZtcCcsCiAgICAgICAgJ21mdCcgPT4gJ2FwcGxpY2F0aW9uL3Jwa2ktbWFuaWZlc3QnLAogICAgICAgICdtZ3AnID0+ICdhcHBsaWNhdGlvbi92bmQub3NnZW8ubWFwZ3VpZGUucGFja2FnZScsCiAgICAgICAgJ21neicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5wcm90ZXVzLm1hZ2F6aW5lJywKICAgICAgICAnbWh0JyA9PiAnbWVzc2FnZS9yZmM4MjInLAogICAgICAgICdtaHRtbCcgPT4gJ21lc3NhZ2UvcmZjODIyJywKICAgICAgICAnbWlkJyA9PiAnYXVkaW8vbWlkaScsCiAgICAgICAgJ21pZGknID0+ICdhdWRpby9taWRpJywKICAgICAgICAnbWllJyA9PiAnYXBwbGljYXRpb24veC1taWUnLAogICAgICAgICdtaWYnID0+ICdhcHBsaWNhdGlvbi92bmQubWlmJywKICAgICAgICAnbWltZScgPT4gJ21lc3NhZ2UvcmZjODIyJywKICAgICAgICAnbWoyJyA9PiAndmlkZW8vbWoyJywKICAgICAgICAnbWpwMicgPT4gJ3ZpZGVvL21qMicsCiAgICAgICAgJ21qcycgPT4gJ3RleHQvamF2YXNjcmlwdCcsCiAgICAgICAgJ21rM2QnID0+ICd2aWRlby9tYXRyb3NrYS0zZCcsCiAgICAgICAgJ21rYScgPT4gJ2F1ZGlvL21hdHJvc2thJywKICAgICAgICAnbWtkJyA9PiAndGV4dC94LW1hcmtkb3duJywKICAgICAgICAnbWtzJyA9PiAndmlkZW8veC1tYXRyb3NrYScsCiAgICAgICAgJ21rdicgPT4gJ3ZpZGVvL21hdHJvc2thJywKICAgICAgICAnbWxwJyA9PiAnYXBwbGljYXRpb24vdm5kLmRvbGJ5Lm1scCcsCiAgICAgICAgJ21tZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5jaGlwbnV0cy5rYXJhb2tlLW1tZCcsCiAgICAgICAgJ21tZicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zbWFmJywKICAgICAgICAnbW1sJyA9PiAndGV4dC9tYXRobWwnLAogICAgICAgICdtbXInID0+ICdpbWFnZS92bmQuZnVqaXhlcm94LmVkbWljcy1tbXInLAogICAgICAgICdtbmcnID0+ICd2aWRlby94LW1uZycsCiAgICAgICAgJ21ueScgPT4gJ2FwcGxpY2F0aW9uL3gtbXNtb25leScsCiAgICAgICAgJ21vYmknID0+ICdhcHBsaWNhdGlvbi94LW1vYmlwb2NrZXQtZWJvb2snLAogICAgICAgICdtb2RzJyA9PiAnYXBwbGljYXRpb24vbW9kcyt4bWwnLAogICAgICAgICdtb3YnID0+ICd2aWRlby9xdWlja3RpbWUnLAogICAgICAgICdtb3ZpZScgPT4gJ3ZpZGVvL3gtc2dpLW1vdmllJywKICAgICAgICAnbXAyJyA9PiAnYXVkaW8vbXBlZycsCiAgICAgICAgJ21wMjEnID0+ICdhcHBsaWNhdGlvbi9tcDIxJywKICAgICAgICAnbXAyYScgPT4gJ2F1ZGlvL21wZWcnLAogICAgICAgICdtcDMnID0+ICdhdWRpby9tcGVnJywKICAgICAgICAnbXA0JyA9PiAndmlkZW8vbXA0JywKICAgICAgICAnbXA0YScgPT4gJ2F1ZGlvL21wNCcsCiAgICAgICAgJ21wNHMnID0+ICdhcHBsaWNhdGlvbi9tcDQnLAogICAgICAgICdtcDR2JyA9PiAndmlkZW8vbXA0JywKICAgICAgICAnbXBjJyA9PiAnYXBwbGljYXRpb24vdm5kLm1vcGh1bi5jZXJ0aWZpY2F0ZScsCiAgICAgICAgJ21wZCcgPT4gJ2FwcGxpY2F0aW9uL2Rhc2greG1sJywKICAgICAgICAnbXBlJyA9PiAndmlkZW8vbXBlZycsCiAgICAgICAgJ21wZWcnID0+ICd2aWRlby9tcGVnJywKICAgICAgICAnbXBmJyA9PiAnYXBwbGljYXRpb24vbWVkaWEtcG9saWN5LWRhdGFzZXQreG1sJywKICAgICAgICAnbXBnJyA9PiAndmlkZW8vbXBlZycsCiAgICAgICAgJ21wZzQnID0+ICd2aWRlby9tcDQnLAogICAgICAgICdtcGdhJyA9PiAnYXVkaW8vbXBlZycsCiAgICAgICAgJ21wa2cnID0+ICdhcHBsaWNhdGlvbi92bmQuYXBwbGUuaW5zdGFsbGVyK3htbCcsCiAgICAgICAgJ21wbScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5ibHVlaWNlLm11bHRpcGFzcycsCiAgICAgICAgJ21wbicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tb3BodW4uYXBwbGljYXRpb24nLAogICAgICAgICdtcHAnID0+ICdhcHBsaWNhdGlvbi92bmQubXMtcHJvamVjdCcsCiAgICAgICAgJ21wdCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wcm9qZWN0JywKICAgICAgICAnbXB5JyA9PiAnYXBwbGljYXRpb24vdm5kLmlibS5taW5pcGF5JywKICAgICAgICAnbXF5JyA9PiAnYXBwbGljYXRpb24vdm5kLm1vYml1cy5tcXknLAogICAgICAgICdtcmMnID0+ICdhcHBsaWNhdGlvbi9tYXJjJywKICAgICAgICAnbXJjeCcgPT4gJ2FwcGxpY2F0aW9uL21hcmN4bWwreG1sJywKICAgICAgICAnbXMnID0+ICd0ZXh0L3Ryb2ZmJywKICAgICAgICAnbXNjbWwnID0+ICdhcHBsaWNhdGlvbi9tZWRpYXNlcnZlcmNvbnRyb2wreG1sJywKICAgICAgICAnbXNlZWQnID0+ICdhcHBsaWNhdGlvbi92bmQuZmRzbi5tc2VlZCcsCiAgICAgICAgJ21zZXEnID0+ICdhcHBsaWNhdGlvbi92bmQubXNlcScsCiAgICAgICAgJ21zZicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5lcHNvbi5tc2YnLAogICAgICAgICdtc2cnID0+ICdhcHBsaWNhdGlvbi92bmQubXMtb3V0bG9vaycsCiAgICAgICAgJ21zaCcgPT4gJ21vZGVsL21lc2gnLAogICAgICAgICdtc2knID0+ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICdtc2l4JyA9PiAnYXBwbGljYXRpb24vbXNpeCcsCiAgICAgICAgJ21zaXhidW5kbGUnID0+ICdhcHBsaWNhdGlvbi9tc2l4YnVuZGxlJywKICAgICAgICAnbXNsJyA9PiAnYXBwbGljYXRpb24vdm5kLm1vYml1cy5tc2wnLAogICAgICAgICdtc20nID0+ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICdtc3AnID0+ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICdtc3R5JyA9PiAnYXBwbGljYXRpb24vdm5kLm11dmVlLnN0eWxlJywKICAgICAgICAnbXRsJyA9PiAnbW9kZWwvbXRsJywKICAgICAgICAnbXRzJyA9PiAndmlkZW8vbXAydCcsCiAgICAgICAgJ211cycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tdXNpY2lhbicsCiAgICAgICAgJ211c2QnID0+ICdhcHBsaWNhdGlvbi9tbXQtdXNkK3htbCcsCiAgICAgICAgJ211c2ljeG1sJyA9PiAnYXBwbGljYXRpb24vdm5kLnJlY29yZGFyZS5tdXNpY3htbCt4bWwnLAogICAgICAgICdtdmInID0+ICdhcHBsaWNhdGlvbi94LW1zbWVkaWF2aWV3JywKICAgICAgICAnbXZ0JyA9PiAnYXBwbGljYXRpb24vdm5kLm1hcGJveC12ZWN0b3ItdGlsZScsCiAgICAgICAgJ213ZicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tZmVyJywKICAgICAgICAnbXhmJyA9PiAnYXBwbGljYXRpb24vbXhmJywKICAgICAgICAnbXhsJyA9PiAnYXBwbGljYXRpb24vdm5kLnJlY29yZGFyZS5tdXNpY3htbCcsCiAgICAgICAgJ214bWYnID0+ICdhdWRpby9tb2JpbGUteG1mJywKICAgICAgICAnbXhtbCcgPT4gJ2FwcGxpY2F0aW9uL3h2K3htbCcsCiAgICAgICAgJ214cycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC50cmlzY2FwZS5teHMnLAogICAgICAgICdteHUnID0+ICd2aWRlby92bmQubXBlZ3VybCcsCiAgICAgICAgJ24tZ2FnZScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5ub2tpYS5uLWdhZ2Uuc3ltYmlhbi5pbnN0YWxsJywKICAgICAgICAnbjMnID0+ICd0ZXh0L24zJywKICAgICAgICAnbmInID0+ICdhcHBsaWNhdGlvbi9tYXRoZW1hdGljYScsCiAgICAgICAgJ25icCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC53b2xmcmFtLnBsYXllcicsCiAgICAgICAgJ25jJyA9PiAnYXBwbGljYXRpb24veC1uZXRjZGYnLAogICAgICAgICduY3gnID0+ICdhcHBsaWNhdGlvbi94LWR0Ym5jeCt4bWwnLAogICAgICAgICduZGpzb24nID0+ICdhcHBsaWNhdGlvbi94LW5kanNvbicsCiAgICAgICAgJ25mbycgPT4gJ3RleHQveC1uZm8nLAogICAgICAgICduZ2RhdCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5ub2tpYS5uLWdhZ2UuZGF0YScsCiAgICAgICAgJ25pdGYnID0+ICdhcHBsaWNhdGlvbi92bmQubml0ZicsCiAgICAgICAgJ25sdScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5uZXVyb2xhbmd1YWdlLm5sdScsCiAgICAgICAgJ25tbCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5lbmxpdmVuJywKICAgICAgICAnbm5kJyA9PiAnYXBwbGljYXRpb24vdm5kLm5vYmxlbmV0LWRpcmVjdG9yeScsCiAgICAgICAgJ25ucycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5ub2JsZW5ldC1zZWFsZXInLAogICAgICAgICdubncnID0+ICdhcHBsaWNhdGlvbi92bmQubm9ibGVuZXQtd2ViJywKICAgICAgICAnbnB4JyA9PiAnaW1hZ2Uvdm5kLm5ldC1mcHgnLAogICAgICAgICducScgPT4gJ2FwcGxpY2F0aW9uL24tcXVhZHMnLAogICAgICAgICduc2MnID0+ICdhcHBsaWNhdGlvbi94LWNvbmZlcmVuY2UnLAogICAgICAgICduc2YnID0+ICdhcHBsaWNhdGlvbi92bmQubG90dXMtbm90ZXMnLAogICAgICAgICdudCcgPT4gJ2FwcGxpY2F0aW9uL24tdHJpcGxlcycsCiAgICAgICAgJ250ZicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5uaXRmJywKICAgICAgICAnbnVtYmVycycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5hcHBsZS5udW1iZXJzJywKICAgICAgICAnbnpiJyA9PiAnYXBwbGljYXRpb24veC1uemInLAogICAgICAgICdvYTInID0+ICdhcHBsaWNhdGlvbi92bmQuZnVqaXRzdS5vYXN5czInLAogICAgICAgICdvYTMnID0+ICdhcHBsaWNhdGlvbi92bmQuZnVqaXRzdS5vYXN5czMnLAogICAgICAgICdvYXMnID0+ICdhcHBsaWNhdGlvbi92bmQuZnVqaXRzdS5vYXN5cycsCiAgICAgICAgJ29iZCcgPT4gJ2FwcGxpY2F0aW9uL3gtbXNiaW5kZXInLAogICAgICAgICdvYmd4JyA9PiAnYXBwbGljYXRpb24vdm5kLm9wZW5ibG94LmdhbWUreG1sJywKICAgICAgICAnb2JqJyA9PiAnbW9kZWwvb2JqJywKICAgICAgICAnb2RhJyA9PiAnYXBwbGljYXRpb24vb2RhJywKICAgICAgICAnb2RiJyA9PiAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5kYXRhYmFzZScsCiAgICAgICAgJ29kYycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuY2hhcnQnLAogICAgICAgICdvZGYnID0+ICdhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmZvcm11bGEnLAogICAgICAgICdvZGZ0JyA9PiAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5mb3JtdWxhLXRlbXBsYXRlJywKICAgICAgICAnb2RnJyA9PiAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5ncmFwaGljcycsCiAgICAgICAgJ29kaScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuaW1hZ2UnLAogICAgICAgICdvZG0nID0+ICdhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHQtbWFzdGVyJywKICAgICAgICAnb2RwJyA9PiAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5wcmVzZW50YXRpb24nLAogICAgICAgICdvZHMnID0+ICdhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0JywKICAgICAgICAnb2R0JyA9PiAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC50ZXh0JywKICAgICAgICAnb2dhJyA9PiAnYXVkaW8vb2dnJywKICAgICAgICAnb2dleCcgPT4gJ21vZGVsL3ZuZC5vcGVuZ2V4JywKICAgICAgICAnb2dnJyA9PiAnYXVkaW8vb2dnJywKICAgICAgICAnb2d2JyA9PiAndmlkZW8vb2dnJywKICAgICAgICAnb2d4JyA9PiAnYXBwbGljYXRpb24vb2dnJywKICAgICAgICAnb21kb2MnID0+ICdhcHBsaWNhdGlvbi9vbWRvYyt4bWwnLAogICAgICAgICdvbmUnID0+ICdhcHBsaWNhdGlvbi9vbmVub3RlJywKICAgICAgICAnb25lYScgPT4gJ2FwcGxpY2F0aW9uL29uZW5vdGUnLAogICAgICAgICdvbmVwa2cnID0+ICdhcHBsaWNhdGlvbi9vbmVub3RlJywKICAgICAgICAnb25ldG1wJyA9PiAnYXBwbGljYXRpb24vb25lbm90ZScsCiAgICAgICAgJ29uZXRvYycgPT4gJ2FwcGxpY2F0aW9uL29uZW5vdGUnLAogICAgICAgICdvbmV0b2MyJyA9PiAnYXBwbGljYXRpb24vb25lbm90ZScsCiAgICAgICAgJ29wZicgPT4gJ2FwcGxpY2F0aW9uL29lYnBzLXBhY2thZ2UreG1sJywKICAgICAgICAnb3BtbCcgPT4gJ3RleHQveC1vcG1sJywKICAgICAgICAnb3ByYycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5wYWxtJywKICAgICAgICAnb3B1cycgPT4gJ2F1ZGlvL29nZycsCiAgICAgICAgJ29yZycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5sb3R1cy1vcmdhbml6ZXInLAogICAgICAgICdvc2YnID0+ICdhcHBsaWNhdGlvbi92bmQueWFtYWhhLm9wZW5zY29yZWZvcm1hdCcsCiAgICAgICAgJ29zZnB2ZycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC55YW1haGEub3BlbnNjb3JlZm9ybWF0Lm9zZnB2Zyt4bWwnLAogICAgICAgICdvc20nID0+ICdhcHBsaWNhdGlvbi92bmQub3BlbnN0cmVldG1hcC5kYXRhK3htbCcsCiAgICAgICAgJ290YycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuY2hhcnQtdGVtcGxhdGUnLAogICAgICAgICdvdGYnID0+ICdmb250L290ZicsCiAgICAgICAgJ290ZycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuZ3JhcGhpY3MtdGVtcGxhdGUnLAogICAgICAgICdvdGgnID0+ICdhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHQtd2ViJywKICAgICAgICAnb3RpJyA9PiAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5pbWFnZS10ZW1wbGF0ZScsCiAgICAgICAgJ290cCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQucHJlc2VudGF0aW9uLXRlbXBsYXRlJywKICAgICAgICAnb3RzJyA9PiAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldC10ZW1wbGF0ZScsCiAgICAgICAgJ290dCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dC10ZW1wbGF0ZScsCiAgICAgICAgJ292YScgPT4gJ2FwcGxpY2F0aW9uL3gtdmlydHVhbGJveC1vdmEnLAogICAgICAgICdvdmYnID0+ICdhcHBsaWNhdGlvbi94LXZpcnR1YWxib3gtb3ZmJywKICAgICAgICAnb3dsJyA9PiAnYXBwbGljYXRpb24vcmRmK3htbCcsCiAgICAgICAgJ294cHMnID0+ICdhcHBsaWNhdGlvbi9veHBzJywKICAgICAgICAnb3h0JyA9PiAnYXBwbGljYXRpb24vdm5kLm9wZW5vZmZpY2VvcmcuZXh0ZW5zaW9uJywKICAgICAgICAncCcgPT4gJ3RleHQveC1wYXNjYWwnLAogICAgICAgICdwMTAnID0+ICdhcHBsaWNhdGlvbi9wa2NzMTAnLAogICAgICAgICdwMTInID0+ICdhcHBsaWNhdGlvbi94LXBrY3MxMicsCiAgICAgICAgJ3AyMScgPT4gJ21vZGVsL3N0ZXAnLAogICAgICAgICdwN2EnID0+ICdhcHBsaWNhdGlvbi94LXBrY3M3LXNpZ25hdHVyZScsCiAgICAgICAgJ3A3YicgPT4gJ2FwcGxpY2F0aW9uL3gtcGtjczctY2VydGlmaWNhdGVzJywKICAgICAgICAncDdjJyA9PiAnYXBwbGljYXRpb24vcGtjczctbWltZScsCiAgICAgICAgJ3A3ZScgPT4gJ2FwcGxpY2F0aW9uL3BrY3M3LW1pbWUnLAogICAgICAgICdwN20nID0+ICdhcHBsaWNhdGlvbi9wa2NzNy1taW1lJywKICAgICAgICAncDdyJyA9PiAnYXBwbGljYXRpb24veC1wa2NzNy1jZXJ0cmVxcmVzcCcsCiAgICAgICAgJ3A3cycgPT4gJ2FwcGxpY2F0aW9uL3BrY3M3LXNpZ25hdHVyZScsCiAgICAgICAgJ3A4JyA9PiAnYXBwbGljYXRpb24vcGtjczgnLAogICAgICAgICdwYWMnID0+ICdhcHBsaWNhdGlvbi94LW5zLXByb3h5LWF1dG9jb25maWcnLAogICAgICAgICdwYWdlcycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5hcHBsZS5wYWdlcycsCiAgICAgICAgJ3BhcnF1ZXQnID0+ICdhcHBsaWNhdGlvbi92bmQuYXBhY2hlLnBhcnF1ZXQnLAogICAgICAgICdwYXMnID0+ICd0ZXh0L3gtcGFzY2FsJywKICAgICAgICAncGF3JyA9PiAnYXBwbGljYXRpb24vdm5kLnBhd2FhZmlsZScsCiAgICAgICAgJ3BiZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5wb3dlcmJ1aWxkZXI2JywKICAgICAgICAncGJtJyA9PiAnaW1hZ2UveC1wb3J0YWJsZS1iaXRtYXAnLAogICAgICAgICdwY2FwJyA9PiAnYXBwbGljYXRpb24vdm5kLnRjcGR1bXAucGNhcCcsCiAgICAgICAgJ3BjZicgPT4gJ2FwcGxpY2F0aW9uL3gtZm9udC1wY2YnLAogICAgICAgICdwY2wnID0+ICdhcHBsaWNhdGlvbi92bmQuaHAtcGNsJywKICAgICAgICAncGNseGwnID0+ICdhcHBsaWNhdGlvbi92bmQuaHAtcGNseGwnLAogICAgICAgICdwY3QnID0+ICdpbWFnZS94LXBpY3QnLAogICAgICAgICdwY3VybCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5jdXJsLnBjdXJsJywKICAgICAgICAncGN4JyA9PiAnaW1hZ2Uvdm5kLnpicnVzaC5wY3gnLAogICAgICAgICdwZGInID0+ICdhcHBsaWNhdGlvbi92bmQucGFsbScsCiAgICAgICAgJ3BkZScgPT4gJ3RleHQveC1wcm9jZXNzaW5nJywKICAgICAgICAncGRmJyA9PiAnYXBwbGljYXRpb24vcGRmJywKICAgICAgICAncGVtJyA9PiAnYXBwbGljYXRpb24veC14NTA5LXVzZXItY2VydCcsCiAgICAgICAgJ3BmYScgPT4gJ2FwcGxpY2F0aW9uL3gtZm9udC10eXBlMScsCiAgICAgICAgJ3BmYicgPT4gJ2FwcGxpY2F0aW9uL3gtZm9udC10eXBlMScsCiAgICAgICAgJ3BmbScgPT4gJ2FwcGxpY2F0aW9uL3gtZm9udC10eXBlMScsCiAgICAgICAgJ3BmcicgPT4gJ2FwcGxpY2F0aW9uL2ZvbnQtdGRwZnInLAogICAgICAgICdwZngnID0+ICdhcHBsaWNhdGlvbi94LXBrY3MxMicsCiAgICAgICAgJ3BnbScgPT4gJ2ltYWdlL3gtcG9ydGFibGUtZ3JheW1hcCcsCiAgICAgICAgJ3BnbicgPT4gJ2FwcGxpY2F0aW9uL3gtY2hlc3MtcGduJywKICAgICAgICAncGdwJyA9PiAnYXBwbGljYXRpb24vcGdwLWVuY3J5cHRlZCcsCiAgICAgICAgJ3BoYXInID0+ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICdwaHAnID0+ICdhcHBsaWNhdGlvbi94LWh0dHBkLXBocCcsCiAgICAgICAgJ3BocDMnID0+ICdhcHBsaWNhdGlvbi94LWh0dHBkLXBocCcsCiAgICAgICAgJ3BocDQnID0+ICdhcHBsaWNhdGlvbi94LWh0dHBkLXBocCcsCiAgICAgICAgJ3BocHMnID0+ICdhcHBsaWNhdGlvbi94LWh0dHBkLXBocC1zb3VyY2UnLAogICAgICAgICdwaHRtbCcgPT4gJ2FwcGxpY2F0aW9uL3gtaHR0cGQtcGhwJywKICAgICAgICAncGljJyA9PiAnaW1hZ2UveC1waWN0JywKICAgICAgICAncGtnJyA9PiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgICAncGtpJyA9PiAnYXBwbGljYXRpb24vcGtpeGNtcCcsCiAgICAgICAgJ3BraXBhdGgnID0+ICdhcHBsaWNhdGlvbi9wa2l4LXBraXBhdGgnLAogICAgICAgICdwa3Bhc3MnID0+ICdhcHBsaWNhdGlvbi92bmQuYXBwbGUucGtwYXNzJywKICAgICAgICAncGwnID0+ICdhcHBsaWNhdGlvbi94LXBlcmwnLAogICAgICAgICdwbGInID0+ICdhcHBsaWNhdGlvbi92bmQuM2dwcC5waWMtYnctbGFyZ2UnLAogICAgICAgICdwbGMnID0+ICdhcHBsaWNhdGlvbi92bmQubW9iaXVzLnBsYycsCiAgICAgICAgJ3BsZicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5wb2NrZXRsZWFybicsCiAgICAgICAgJ3BscycgPT4gJ2FwcGxpY2F0aW9uL3Bscyt4bWwnLAogICAgICAgICdwbScgPT4gJ2FwcGxpY2F0aW9uL3gtcGVybCcsCiAgICAgICAgJ3BtbCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5jdGMtcG9zbWwnLAogICAgICAgICdwbmcnID0+ICdpbWFnZS9wbmcnLAogICAgICAgICdwbm0nID0+ICdpbWFnZS94LXBvcnRhYmxlLWFueW1hcCcsCiAgICAgICAgJ3BvcnRwa2cnID0+ICdhcHBsaWNhdGlvbi92bmQubWFjcG9ydHMucG9ydHBrZycsCiAgICAgICAgJ3BvdCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50JywKICAgICAgICAncG90bScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50LnRlbXBsYXRlLm1hY3JvZW5hYmxlZC4xMicsCiAgICAgICAgJ3BvdHgnID0+ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwudGVtcGxhdGUnLAogICAgICAgICdwcGEnID0+ICdhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludCcsCiAgICAgICAgJ3BwYW0nID0+ICdhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludC5hZGRpbi5tYWNyb2VuYWJsZWQuMTInLAogICAgICAgICdwcGQnID0+ICdhcHBsaWNhdGlvbi92bmQuY3Vwcy1wcGQnLAogICAgICAgICdwcG0nID0+ICdpbWFnZS94LXBvcnRhYmxlLXBpeG1hcCcsCiAgICAgICAgJ3BwcycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50JywKICAgICAgICAncHBzbScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50LnNsaWRlc2hvdy5tYWNyb2VuYWJsZWQuMTInLAogICAgICAgICdwcHN4JyA9PiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnNsaWRlc2hvdycsCiAgICAgICAgJ3BwdCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50JywKICAgICAgICAncHB0bScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50LnByZXNlbnRhdGlvbi5tYWNyb2VuYWJsZWQuMTInLAogICAgICAgICdwcHR4JyA9PiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnByZXNlbnRhdGlvbicsCiAgICAgICAgJ3BxYScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5wYWxtJywKICAgICAgICAncHJjJyA9PiAnbW9kZWwvcHJjJywKICAgICAgICAncHJlJyA9PiAnYXBwbGljYXRpb24vdm5kLmxvdHVzLWZyZWVsYW5jZScsCiAgICAgICAgJ3ByZicgPT4gJ2FwcGxpY2F0aW9uL3BpY3MtcnVsZXMnLAogICAgICAgICdwcm92eCcgPT4gJ2FwcGxpY2F0aW9uL3Byb3ZlbmFuY2UreG1sJywKICAgICAgICAncHMnID0+ICdhcHBsaWNhdGlvbi9wb3N0c2NyaXB0JywKICAgICAgICAncHNiJyA9PiAnYXBwbGljYXRpb24vdm5kLjNncHAucGljLWJ3LXNtYWxsJywKICAgICAgICAncHNkJyA9PiAnaW1hZ2Uvdm5kLmFkb2JlLnBob3Rvc2hvcCcsCiAgICAgICAgJ3BzZicgPT4gJ2FwcGxpY2F0aW9uL3gtZm9udC1saW51eC1wc2YnLAogICAgICAgICdwc2tjeG1sJyA9PiAnYXBwbGljYXRpb24vcHNrYyt4bWwnLAogICAgICAgICdwdGknID0+ICdpbWFnZS9wcnMucHRpJywKICAgICAgICAncHRpZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5wdmkucHRpZDEnLAogICAgICAgICdwdWInID0+ICdhcHBsaWNhdGlvbi94LW1zcHVibGlzaGVyJywKICAgICAgICAncHYnID0+ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICdwdmInID0+ICdhcHBsaWNhdGlvbi92bmQuM2dwcC5waWMtYnctdmFyJywKICAgICAgICAncHduJyA9PiAnYXBwbGljYXRpb24vdm5kLjNtLnBvc3QtaXQtbm90ZXMnLAogICAgICAgICdweGYnID0+ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICdweWEnID0+ICdhdWRpby92bmQubXMtcGxheXJlYWR5Lm1lZGlhLnB5YScsCiAgICAgICAgJ3B5bycgPT4gJ21vZGVsL3ZuZC5weXRoYS5weW94JywKICAgICAgICAncHlveCcgPT4gJ21vZGVsL3ZuZC5weXRoYS5weW94JywKICAgICAgICAncHl2JyA9PiAndmlkZW8vdm5kLm1zLXBsYXlyZWFkeS5tZWRpYS5weXYnLAogICAgICAgICdxYW0nID0+ICdhcHBsaWNhdGlvbi92bmQuZXBzb24ucXVpY2thbmltZScsCiAgICAgICAgJ3FibycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5pbnR1LnFibycsCiAgICAgICAgJ3FmeCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5pbnR1LnFmeCcsCiAgICAgICAgJ3FwcycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5wdWJsaXNoYXJlLWRlbHRhLXRyZWUnLAogICAgICAgICdxdCcgPT4gJ3ZpZGVvL3F1aWNrdGltZScsCiAgICAgICAgJ3F3ZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5xdWFyay5xdWFya3hwcmVzcycsCiAgICAgICAgJ3F3dCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5xdWFyay5xdWFya3hwcmVzcycsCiAgICAgICAgJ3F4YicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5xdWFyay5xdWFya3hwcmVzcycsCiAgICAgICAgJ3F4ZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5xdWFyay5xdWFya3hwcmVzcycsCiAgICAgICAgJ3F4bCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5xdWFyay5xdWFya3hwcmVzcycsCiAgICAgICAgJ3F4dCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5xdWFyay5xdWFya3hwcmVzcycsCiAgICAgICAgJ3JhJyA9PiAnYXVkaW8veC1yZWFsYXVkaW8nLAogICAgICAgICdyYW0nID0+ICdhdWRpby94LXBuLXJlYWxhdWRpbycsCiAgICAgICAgJ3JhbWwnID0+ICdhcHBsaWNhdGlvbi9yYW1sK3lhbWwnLAogICAgICAgICdyYXBkJyA9PiAnYXBwbGljYXRpb24vcm91dGUtYXBkK3htbCcsCiAgICAgICAgJ3JhcicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5yYXInLAogICAgICAgICdyYXMnID0+ICdpbWFnZS94LWNtdS1yYXN0ZXInLAogICAgICAgICdyY3Byb2ZpbGUnID0+ICdhcHBsaWNhdGlvbi92bmQuaXB1bnBsdWdnZWQucmNwcm9maWxlJywKICAgICAgICAncmRmJyA9PiAnYXBwbGljYXRpb24vcmRmK3htbCcsCiAgICAgICAgJ3JkeicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5kYXRhLXZpc2lvbi5yZHonLAogICAgICAgICdyZWxvJyA9PiAnYXBwbGljYXRpb24vcDJwLW92ZXJsYXkreG1sJywKICAgICAgICAncmVwJyA9PiAnYXBwbGljYXRpb24vdm5kLmJ1c2luZXNzb2JqZWN0cycsCiAgICAgICAgJ3JlcycgPT4gJ2FwcGxpY2F0aW9uL3gtZHRicmVzb3VyY2UreG1sJywKICAgICAgICAncmdiJyA9PiAnaW1hZ2UveC1yZ2InLAogICAgICAgICdyaWYnID0+ICdhcHBsaWNhdGlvbi9yZWdpbmZvK3htbCcsCiAgICAgICAgJ3JpcCcgPT4gJ2F1ZGlvL3ZuZC5yaXAnLAogICAgICAgICdyaXMnID0+ICdhcHBsaWNhdGlvbi94LXJlc2VhcmNoLWluZm8tc3lzdGVtcycsCiAgICAgICAgJ3JsJyA9PiAnYXBwbGljYXRpb24vcmVzb3VyY2UtbGlzdHMreG1sJywKICAgICAgICAncmxjJyA9PiAnaW1hZ2Uvdm5kLmZ1aml4ZXJveC5lZG1pY3MtcmxjJywKICAgICAgICAncmxkJyA9PiAnYXBwbGljYXRpb24vcmVzb3VyY2UtbGlzdHMtZGlmZit4bWwnLAogICAgICAgICdybScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5ybi1yZWFsbWVkaWEnLAogICAgICAgICdybWknID0+ICdhdWRpby9taWRpJywKICAgICAgICAncm1wJyA9PiAnYXVkaW8veC1wbi1yZWFsYXVkaW8tcGx1Z2luJywKICAgICAgICAncm1zJyA9PiAnYXBwbGljYXRpb24vdm5kLmpjcC5qYXZhbWUubWlkbGV0LXJtcycsCiAgICAgICAgJ3JtdmInID0+ICdhcHBsaWNhdGlvbi92bmQucm4tcmVhbG1lZGlhLXZicicsCiAgICAgICAgJ3JuYycgPT4gJ2FwcGxpY2F0aW9uL3JlbGF4LW5nLWNvbXBhY3Qtc3ludGF4JywKICAgICAgICAncm5nJyA9PiAnYXBwbGljYXRpb24veG1sJywKICAgICAgICAncm9hJyA9PiAnYXBwbGljYXRpb24vcnBraS1yb2EnLAogICAgICAgICdyb2ZmJyA9PiAndGV4dC90cm9mZicsCiAgICAgICAgJ3JwOScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5jbG9hbnRvLnJwOScsCiAgICAgICAgJ3JwbScgPT4gJ2FwcGxpY2F0aW9uL3gtcmVkaGF0LXBhY2thZ2UtbWFuYWdlcicsCiAgICAgICAgJ3Jwc3MnID0+ICdhcHBsaWNhdGlvbi92bmQubm9raWEucmFkaW8tcHJlc2V0cycsCiAgICAgICAgJ3Jwc3QnID0+ICdhcHBsaWNhdGlvbi92bmQubm9raWEucmFkaW8tcHJlc2V0JywKICAgICAgICAncnEnID0+ICdhcHBsaWNhdGlvbi9zcGFycWwtcXVlcnknLAogICAgICAgICdycycgPT4gJ2FwcGxpY2F0aW9uL3Jscy1zZXJ2aWNlcyt4bWwnLAogICAgICAgICdyc2EnID0+ICdhcHBsaWNhdGlvbi94LXBrY3M3JywKICAgICAgICAncnNhdCcgPT4gJ2FwcGxpY2F0aW9uL2F0c2MtcnNhdCt4bWwnLAogICAgICAgICdyc2QnID0+ICdhcHBsaWNhdGlvbi9yc2QreG1sJywKICAgICAgICAncnNoZWV0JyA9PiAnYXBwbGljYXRpb24vdXJjLXJlc3NoZWV0K3htbCcsCiAgICAgICAgJ3JzcycgPT4gJ2FwcGxpY2F0aW9uL3Jzcyt4bWwnLAogICAgICAgICdydGYnID0+ICd0ZXh0L3J0ZicsCiAgICAgICAgJ3J0eCcgPT4gJ3RleHQvcmljaHRleHQnLAogICAgICAgICdydW4nID0+ICdhcHBsaWNhdGlvbi94LW1ha2VzZWxmJywKICAgICAgICAncnVzZCcgPT4gJ2FwcGxpY2F0aW9uL3JvdXRlLXVzZCt4bWwnLAogICAgICAgICdydicgPT4gJ3ZpZGVvL3ZuZC5ybi1yZWFsdmlkZW8nLAogICAgICAgICdzJyA9PiAndGV4dC94LWFzbScsCiAgICAgICAgJ3MzbScgPT4gJ2F1ZGlvL3MzbScsCiAgICAgICAgJ3NhZicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC55YW1haGEuc21hZi1hdWRpbycsCiAgICAgICAgJ3Nhc3MnID0+ICd0ZXh0L3gtc2FzcycsCiAgICAgICAgJ3NibWwnID0+ICdhcHBsaWNhdGlvbi9zYm1sK3htbCcsCiAgICAgICAgJ3NjJyA9PiAnYXBwbGljYXRpb24vdm5kLmlibS5zZWN1cmUtY29udGFpbmVyJywKICAgICAgICAnc2NkJyA9PiAnYXBwbGljYXRpb24veC1tc3NjaGVkdWxlJywKICAgICAgICAnc2NtJyA9PiAnYXBwbGljYXRpb24vdm5kLmxvdHVzLXNjcmVlbmNhbScsCiAgICAgICAgJ3NjcScgPT4gJ2FwcGxpY2F0aW9uL3NjdnAtY3YtcmVxdWVzdCcsCiAgICAgICAgJ3NjcycgPT4gJ2FwcGxpY2F0aW9uL3NjdnAtY3YtcmVzcG9uc2UnLAogICAgICAgICdzY3NzJyA9PiAndGV4dC94LXNjc3MnLAogICAgICAgICdzY3VybCcgPT4gJ3RleHQvdm5kLmN1cmwuc2N1cmwnLAogICAgICAgICdzZGEnID0+ICdhcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLmRyYXcnLAogICAgICAgICdzZGMnID0+ICdhcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLmNhbGMnLAogICAgICAgICdzZGQnID0+ICdhcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLmltcHJlc3MnLAogICAgICAgICdzZGtkJyA9PiAnYXBwbGljYXRpb24vdm5kLnNvbGVudC5zZGttK3htbCcsCiAgICAgICAgJ3Nka20nID0+ICdhcHBsaWNhdGlvbi92bmQuc29sZW50LnNka20reG1sJywKICAgICAgICAnc2RwJyA9PiAnYXBwbGljYXRpb24vc2RwJywKICAgICAgICAnc2R3JyA9PiAnYXBwbGljYXRpb24vdm5kLnN0YXJkaXZpc2lvbi53cml0ZXInLAogICAgICAgICdzZWEnID0+ICdhcHBsaWNhdGlvbi94LXNlYScsCiAgICAgICAgJ3NlZScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zZWVtYWlsJywKICAgICAgICAnc2VlZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5mZHNuLnNlZWQnLAogICAgICAgICdzZW1hJyA9PiAnYXBwbGljYXRpb24vdm5kLnNlbWEnLAogICAgICAgICdzZW1kJyA9PiAnYXBwbGljYXRpb24vdm5kLnNlbWQnLAogICAgICAgICdzZW1mJyA9PiAnYXBwbGljYXRpb24vdm5kLnNlbWYnLAogICAgICAgICdzZW5tbHgnID0+ICdhcHBsaWNhdGlvbi9zZW5tbCt4bWwnLAogICAgICAgICdzZW5zbWx4JyA9PiAnYXBwbGljYXRpb24vc2Vuc21sK3htbCcsCiAgICAgICAgJ3NlcicgPT4gJ2FwcGxpY2F0aW9uL2phdmEtc2VyaWFsaXplZC1vYmplY3QnLAogICAgICAgICdzZXRwYXknID0+ICdhcHBsaWNhdGlvbi9zZXQtcGF5bWVudC1pbml0aWF0aW9uJywKICAgICAgICAnc2V0cmVnJyA9PiAnYXBwbGljYXRpb24vc2V0LXJlZ2lzdHJhdGlvbi1pbml0aWF0aW9uJywKICAgICAgICAnc2ZkLWhkc3R4JyA9PiAnYXBwbGljYXRpb24vdm5kLmh5ZHJvc3RhdGl4LnNvZi1kYXRhJywKICAgICAgICAnc2ZzJyA9PiAnYXBwbGljYXRpb24vdm5kLnNwb3RmaXJlLnNmcycsCiAgICAgICAgJ3NmdicgPT4gJ3RleHQveC1zZnYnLAogICAgICAgICdzZ2knID0+ICdpbWFnZS9zZ2knLAogICAgICAgICdzZ2wnID0+ICdhcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLndyaXRlci1nbG9iYWwnLAogICAgICAgICdzZ20nID0+ICd0ZXh0L3NnbWwnLAogICAgICAgICdzZ21sJyA9PiAndGV4dC9zZ21sJywKICAgICAgICAnc2gnID0+ICdhcHBsaWNhdGlvbi94LXNoJywKICAgICAgICAnc2hhcicgPT4gJ2FwcGxpY2F0aW9uL3gtc2hhcicsCiAgICAgICAgJ3NoZXgnID0+ICd0ZXh0L3NoZXgnLAogICAgICAgICdzaGYnID0+ICdhcHBsaWNhdGlvbi9zaGYreG1sJywKICAgICAgICAnc2h0bWwnID0+ICd0ZXh0L2h0bWwnLAogICAgICAgICdzaWQnID0+ICdpbWFnZS94LW1yc2lkLWltYWdlJywKICAgICAgICAnc2lldmUnID0+ICdhcHBsaWNhdGlvbi9zaWV2ZScsCiAgICAgICAgJ3NpZycgPT4gJ2FwcGxpY2F0aW9uL3BncC1zaWduYXR1cmUnLAogICAgICAgICdzaWwnID0+ICdhdWRpby9zaWxrJywKICAgICAgICAnc2lsbycgPT4gJ21vZGVsL21lc2gnLAogICAgICAgICdzaXMnID0+ICdhcHBsaWNhdGlvbi92bmQuc3ltYmlhbi5pbnN0YWxsJywKICAgICAgICAnc2lzeCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zeW1iaWFuLmluc3RhbGwnLAogICAgICAgICdzaXQnID0+ICdhcHBsaWNhdGlvbi94LXN0dWZmaXQnLAogICAgICAgICdzaXR4JyA9PiAnYXBwbGljYXRpb24veC1zdHVmZml0eCcsCiAgICAgICAgJ3NpdicgPT4gJ2FwcGxpY2F0aW9uL3NpZXZlJywKICAgICAgICAnc2tkJyA9PiAnYXBwbGljYXRpb24vdm5kLmtvYW4nLAogICAgICAgICdza20nID0+ICdhcHBsaWNhdGlvbi92bmQua29hbicsCiAgICAgICAgJ3NrcCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5rb2FuJywKICAgICAgICAnc2t0JyA9PiAnYXBwbGljYXRpb24vdm5kLmtvYW4nLAogICAgICAgICdzbGRtJyA9PiAnYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQuc2xpZGUubWFjcm9lbmFibGVkLjEyJywKICAgICAgICAnc2xkeCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5zbGlkZScsCiAgICAgICAgJ3NsaW0nID0+ICd0ZXh0L3NsaW0nLAogICAgICAgICdzbG0nID0+ICd0ZXh0L3NsaW0nLAogICAgICAgICdzbHMnID0+ICdhcHBsaWNhdGlvbi9yb3V0ZS1zLXRzaWQreG1sJywKICAgICAgICAnc2x0JyA9PiAnYXBwbGljYXRpb24vdm5kLmVwc29uLnNhbHQnLAogICAgICAgICdzbScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zdGVwbWFuaWEuc3RlcGNoYXJ0JywKICAgICAgICAnc21mJyA9PiAnYXBwbGljYXRpb24vdm5kLnN0YXJkaXZpc2lvbi5tYXRoJywKICAgICAgICAnc21pJyA9PiAnYXBwbGljYXRpb24vc21pbCt4bWwnLAogICAgICAgICdzbWlsJyA9PiAnYXBwbGljYXRpb24vc21pbCt4bWwnLAogICAgICAgICdzbXYnID0+ICd2aWRlby94LXNtdicsCiAgICAgICAgJ3NtemlwJyA9PiAnYXBwbGljYXRpb24vdm5kLnN0ZXBtYW5pYS5wYWNrYWdlJywKICAgICAgICAnc25kJyA9PiAnYXVkaW8vYmFzaWMnLAogICAgICAgICdzbmYnID0+ICdhcHBsaWNhdGlvbi94LWZvbnQtc25mJywKICAgICAgICAnc28nID0+ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICdzcGMnID0+ICdhcHBsaWNhdGlvbi94LXBrY3M3LWNlcnRpZmljYXRlcycsCiAgICAgICAgJ3NwZHgnID0+ICd0ZXh0L3NwZHgnLAogICAgICAgICdzcGYnID0+ICdhcHBsaWNhdGlvbi92bmQueWFtYWhhLnNtYWYtcGhyYXNlJywKICAgICAgICAnc3BsJyA9PiAnYXBwbGljYXRpb24veC1mdXR1cmVzcGxhc2gnLAogICAgICAgICdzcG90JyA9PiAndGV4dC92bmQuaW4zZC5zcG90JywKICAgICAgICAnc3BwJyA9PiAnYXBwbGljYXRpb24vc2N2cC12cC1yZXNwb25zZScsCiAgICAgICAgJ3NwcScgPT4gJ2FwcGxpY2F0aW9uL3NjdnAtdnAtcmVxdWVzdCcsCiAgICAgICAgJ3NweCcgPT4gJ2F1ZGlvL29nZycsCiAgICAgICAgJ3NxbCcgPT4gJ2FwcGxpY2F0aW9uL3NxbCcsCiAgICAgICAgJ3NxbGl0ZScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zcWxpdGUzJywKICAgICAgICAnc3FsaXRlMycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zcWxpdGUzJywKICAgICAgICAnc3JjJyA9PiAnYXBwbGljYXRpb24veC13YWlzLXNvdXJjZScsCiAgICAgICAgJ3NydCcgPT4gJ2FwcGxpY2F0aW9uL3gtc3VicmlwJywKICAgICAgICAnc3J1JyA9PiAnYXBwbGljYXRpb24vc3J1K3htbCcsCiAgICAgICAgJ3NyeCcgPT4gJ2FwcGxpY2F0aW9uL3NwYXJxbC1yZXN1bHRzK3htbCcsCiAgICAgICAgJ3NzZGwnID0+ICdhcHBsaWNhdGlvbi9zc2RsK3htbCcsCiAgICAgICAgJ3NzZScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5rb2Rhay1kZXNjcmlwdG9yJywKICAgICAgICAnc3NmJyA9PiAnYXBwbGljYXRpb24vdm5kLmVwc29uLnNzZicsCiAgICAgICAgJ3NzbWwnID0+ICdhcHBsaWNhdGlvbi9zc21sK3htbCcsCiAgICAgICAgJ3NzdCcgPT4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgJ3N0JyA9PiAnYXBwbGljYXRpb24vdm5kLnNhaWxpbmd0cmFja2VyLnRyYWNrJywKICAgICAgICAnc3RjJyA9PiAnYXBwbGljYXRpb24vdm5kLnN1bi54bWwuY2FsYy50ZW1wbGF0ZScsCiAgICAgICAgJ3N0ZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLmRyYXcudGVtcGxhdGUnLAogICAgICAgICdzdGVwJyA9PiAnbW9kZWwvc3RlcCcsCiAgICAgICAgJ3N0ZicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC53dC5zdGYnLAogICAgICAgICdzdGknID0+ICdhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5pbXByZXNzLnRlbXBsYXRlJywKICAgICAgICAnc3RrJyA9PiAnYXBwbGljYXRpb24vaHlwZXJzdHVkaW8nLAogICAgICAgICdzdGwnID0+ICdtb2RlbC9zdGwnLAogICAgICAgICdzdHAnID0+ICdtb2RlbC9zdGVwJywKICAgICAgICAnc3RwbmMnID0+ICdtb2RlbC9zdGVwJywKICAgICAgICAnc3RweCcgPT4gJ21vZGVsL3N0ZXAreG1sJywKICAgICAgICAnc3RweHonID0+ICdtb2RlbC9zdGVwLXhtbCt6aXAnLAogICAgICAgICdzdHB6JyA9PiAnbW9kZWwvc3RlcCt6aXAnLAogICAgICAgICdzdHInID0+ICdhcHBsaWNhdGlvbi92bmQucGcuZm9ybWF0JywKICAgICAgICAnc3R3JyA9PiAnYXBwbGljYXRpb24vdm5kLnN1bi54bWwud3JpdGVyLnRlbXBsYXRlJywKICAgICAgICAnc3R5bCcgPT4gJ3RleHQvc3R5bHVzJywKICAgICAgICAnc3R5bHVzJyA9PiAndGV4dC9zdHlsdXMnLAogICAgICAgICdzdWInID0+ICdpbWFnZS92bmQuZHZiLnN1YnRpdGxlJywKICAgICAgICAnc3VzJyA9PiAnYXBwbGljYXRpb24vdm5kLnN1cy1jYWxlbmRhcicsCiAgICAgICAgJ3N1c3AnID0+ICdhcHBsaWNhdGlvbi92bmQuc3VzLWNhbGVuZGFyJywKICAgICAgICAnc3Y0Y3BpbycgPT4gJ2FwcGxpY2F0aW9uL3gtc3Y0Y3BpbycsCiAgICAgICAgJ3N2NGNyYycgPT4gJ2FwcGxpY2F0aW9uL3gtc3Y0Y3JjJywKICAgICAgICAnc3ZjJyA9PiAnYXBwbGljYXRpb24vdm5kLmR2Yi5zZXJ2aWNlJywKICAgICAgICAnc3ZkJyA9PiAnYXBwbGljYXRpb24vdm5kLnN2ZCcsCiAgICAgICAgJ3N2ZycgPT4gJ2ltYWdlL3N2Zyt4bWwnLAogICAgICAgICdzdmd6JyA9PiAnaW1hZ2Uvc3ZnK3htbCcsCiAgICAgICAgJ3N3YScgPT4gJ2FwcGxpY2F0aW9uL3gtZGlyZWN0b3InLAogICAgICAgICdzd2YnID0+ICdhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCcsCiAgICAgICAgJ3N3aScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5hcmlzdGFuZXR3b3Jrcy5zd2knLAogICAgICAgICdzd2lkdGFnJyA9PiAnYXBwbGljYXRpb24vc3dpZCt4bWwnLAogICAgICAgICdzeGMnID0+ICdhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5jYWxjJywKICAgICAgICAnc3hkJyA9PiAnYXBwbGljYXRpb24vdm5kLnN1bi54bWwuZHJhdycsCiAgICAgICAgJ3N4ZycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLndyaXRlci5nbG9iYWwnLAogICAgICAgICdzeGknID0+ICdhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5pbXByZXNzJywKICAgICAgICAnc3htJyA9PiAnYXBwbGljYXRpb24vdm5kLnN1bi54bWwubWF0aCcsCiAgICAgICAgJ3N4dycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLndyaXRlcicsCiAgICAgICAgJ3N5c3RlbXZlcmlmeScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5wcC5zeXN0ZW12ZXJpZnkreG1sJywKICAgICAgICAndCcgPT4gJ3RleHQvdHJvZmYnLAogICAgICAgICd0MycgPT4gJ2FwcGxpY2F0aW9uL3gtdDN2bS1pbWFnZScsCiAgICAgICAgJ3QzOCcgPT4gJ2ltYWdlL3QzOCcsCiAgICAgICAgJ3RhZ2xldCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5teW5mYycsCiAgICAgICAgJ3RhbycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC50YW8uaW50ZW50LW1vZHVsZS1hcmNoaXZlJywKICAgICAgICAndGFwJyA9PiAnaW1hZ2Uvdm5kLnRlbmNlbnQudGFwJywKICAgICAgICAndGFyJyA9PiAnYXBwbGljYXRpb24veC10YXInLAogICAgICAgICd0Y2FwJyA9PiAnYXBwbGljYXRpb24vdm5kLjNncHAyLnRjYXAnLAogICAgICAgICd0Y2wnID0+ICdhcHBsaWNhdGlvbi94LXRjbCcsCiAgICAgICAgJ3RkJyA9PiAnYXBwbGljYXRpb24vdXJjLXRhcmdldGRlc2MreG1sJywKICAgICAgICAndGVhY2hlcicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zbWFydC50ZWFjaGVyJywKICAgICAgICAndGVpJyA9PiAnYXBwbGljYXRpb24vdGVpK3htbCcsCiAgICAgICAgJ3RlaWNvcnB1cycgPT4gJ2FwcGxpY2F0aW9uL3RlaSt4bWwnLAogICAgICAgICd0ZXgnID0+ICdhcHBsaWNhdGlvbi94LXRleCcsCiAgICAgICAgJ3RleGknID0+ICdhcHBsaWNhdGlvbi94LXRleGluZm8nLAogICAgICAgICd0ZXhpbmZvJyA9PiAnYXBwbGljYXRpb24veC10ZXhpbmZvJywKICAgICAgICAndGV4dCcgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICd0ZmknID0+ICdhcHBsaWNhdGlvbi90aHJhdWQreG1sJywKICAgICAgICAndGZtJyA9PiAnYXBwbGljYXRpb24veC10ZXgtdGZtJywKICAgICAgICAndGZ4JyA9PiAnaW1hZ2UvdGlmZi1meCcsCiAgICAgICAgJ3RnYScgPT4gJ2ltYWdlL3gtdGdhJywKICAgICAgICAndGd6JyA9PiAnYXBwbGljYXRpb24vZ3ppcCcsCiAgICAgICAgJ3RobXgnID0+ICdhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNldGhlbWUnLAogICAgICAgICd0aWYnID0+ICdpbWFnZS90aWZmJywKICAgICAgICAndGlmZicgPT4gJ2ltYWdlL3RpZmYnLAogICAgICAgICd0aycgPT4gJ2FwcGxpY2F0aW9uL3gtdGNsJywKICAgICAgICAndG1vJyA9PiAnYXBwbGljYXRpb24vdm5kLnRtb2JpbGUtbGl2ZXR2JywKICAgICAgICAndG9tbCcgPT4gJ2FwcGxpY2F0aW9uL3RvbWwnLAogICAgICAgICd0b3JyZW50JyA9PiAnYXBwbGljYXRpb24veC1iaXR0b3JyZW50JywKICAgICAgICAndHBsJyA9PiAnYXBwbGljYXRpb24vdm5kLmdyb292ZS10b29sLXRlbXBsYXRlJywKICAgICAgICAndHB0JyA9PiAnYXBwbGljYXRpb24vdm5kLnRyaWQudHB0JywKICAgICAgICAndHInID0+ICd0ZXh0L3Ryb2ZmJywKICAgICAgICAndHJhJyA9PiAnYXBwbGljYXRpb24vdm5kLnRydWVhcHAnLAogICAgICAgICd0cmlnJyA9PiAnYXBwbGljYXRpb24vdHJpZycsCiAgICAgICAgJ3RybScgPT4gJ2FwcGxpY2F0aW9uL3gtbXN0ZXJtaW5hbCcsCiAgICAgICAgJ3RzJyA9PiAndmlkZW8vbXAydCcsCiAgICAgICAgJ3RzZCcgPT4gJ2FwcGxpY2F0aW9uL3RpbWVzdGFtcGVkLWRhdGEnLAogICAgICAgICd0c3YnID0+ICd0ZXh0L3RhYi1zZXBhcmF0ZWQtdmFsdWVzJywKICAgICAgICAndHRjJyA9PiAnZm9udC9jb2xsZWN0aW9uJywKICAgICAgICAndHRmJyA9PiAnZm9udC90dGYnLAogICAgICAgICd0dGwnID0+ICd0ZXh0L3R1cnRsZScsCiAgICAgICAgJ3R0bWwnID0+ICdhcHBsaWNhdGlvbi90dG1sK3htbCcsCiAgICAgICAgJ3R3ZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zaW10ZWNoLW1pbmRtYXBwZXInLAogICAgICAgICd0d2RzJyA9PiAnYXBwbGljYXRpb24vdm5kLnNpbXRlY2gtbWluZG1hcHBlcicsCiAgICAgICAgJ3R4ZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5nZW5vbWF0aXgudHV4ZWRvJywKICAgICAgICAndHhmJyA9PiAnYXBwbGljYXRpb24vdm5kLm1vYml1cy50eGYnLAogICAgICAgICd0eHQnID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAndTMyJyA9PiAnYXBwbGljYXRpb24veC1hdXRob3J3YXJlLWJpbicsCiAgICAgICAgJ3UzZCcgPT4gJ21vZGVsL3UzZCcsCiAgICAgICAgJ3U4ZHNuJyA9PiAnbWVzc2FnZS9nbG9iYWwtZGVsaXZlcnktc3RhdHVzJywKICAgICAgICAndThoZHInID0+ICdtZXNzYWdlL2dsb2JhbC1oZWFkZXJzJywKICAgICAgICAndThtZG4nID0+ICdtZXNzYWdlL2dsb2JhbC1kaXNwb3NpdGlvbi1ub3RpZmljYXRpb24nLAogICAgICAgICd1OG1zZycgPT4gJ21lc3NhZ2UvZ2xvYmFsJywKICAgICAgICAndWJqJyA9PiAnYXBwbGljYXRpb24vdWJqc29uJywKICAgICAgICAndWRlYicgPT4gJ2FwcGxpY2F0aW9uL3gtZGViaWFuLXBhY2thZ2UnLAogICAgICAgICd1ZmQnID0+ICdhcHBsaWNhdGlvbi92bmQudWZkbCcsCiAgICAgICAgJ3VmZGwnID0+ICdhcHBsaWNhdGlvbi92bmQudWZkbCcsCiAgICAgICAgJ3VseCcgPT4gJ2FwcGxpY2F0aW9uL3gtZ2x1bHgnLAogICAgICAgICd1bWonID0+ICdhcHBsaWNhdGlvbi92bmQudW1hamluJywKICAgICAgICAndW5pdHl3ZWInID0+ICdhcHBsaWNhdGlvbi92bmQudW5pdHknLAogICAgICAgICd1bycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC51b21sK3htbCcsCiAgICAgICAgJ3VvbWwnID0+ICdhcHBsaWNhdGlvbi92bmQudW9tbCt4bWwnLAogICAgICAgICd1cmknID0+ICd0ZXh0L3VyaS1saXN0JywKICAgICAgICAndXJpcycgPT4gJ3RleHQvdXJpLWxpc3QnLAogICAgICAgICd1cmxzJyA9PiAndGV4dC91cmktbGlzdCcsCiAgICAgICAgJ3VzZGEnID0+ICdtb2RlbC92bmQudXNkYScsCiAgICAgICAgJ3VzZHonID0+ICdtb2RlbC92bmQudXNkeit6aXAnLAogICAgICAgICd1c3RhcicgPT4gJ2FwcGxpY2F0aW9uL3gtdXN0YXInLAogICAgICAgICd1dHonID0+ICdhcHBsaWNhdGlvbi92bmQudWlxLnRoZW1lJywKICAgICAgICAndXUnID0+ICd0ZXh0L3gtdXVlbmNvZGUnLAogICAgICAgICd1dmEnID0+ICdhdWRpby92bmQuZGVjZS5hdWRpbycsCiAgICAgICAgJ3V2ZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5kZWNlLmRhdGEnLAogICAgICAgICd1dmYnID0+ICdhcHBsaWNhdGlvbi92bmQuZGVjZS5kYXRhJywKICAgICAgICAndXZnJyA9PiAnaW1hZ2Uvdm5kLmRlY2UuZ3JhcGhpYycsCiAgICAgICAgJ3V2aCcgPT4gJ3ZpZGVvL3ZuZC5kZWNlLmhkJywKICAgICAgICAndXZpJyA9PiAnaW1hZ2Uvdm5kLmRlY2UuZ3JhcGhpYycsCiAgICAgICAgJ3V2bScgPT4gJ3ZpZGVvL3ZuZC5kZWNlLm1vYmlsZScsCiAgICAgICAgJ3V2cCcgPT4gJ3ZpZGVvL3ZuZC5kZWNlLnBkJywKICAgICAgICAndXZzJyA9PiAndmlkZW8vdm5kLmRlY2Uuc2QnLAogICAgICAgICd1dnQnID0+ICdhcHBsaWNhdGlvbi92bmQuZGVjZS50dG1sK3htbCcsCiAgICAgICAgJ3V2dScgPT4gJ3ZpZGVvL3ZuZC51dnZ1Lm1wNCcsCiAgICAgICAgJ3V2dicgPT4gJ3ZpZGVvL3ZuZC5kZWNlLnZpZGVvJywKICAgICAgICAndXZ2YScgPT4gJ2F1ZGlvL3ZuZC5kZWNlLmF1ZGlvJywKICAgICAgICAndXZ2ZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5kZWNlLmRhdGEnLAogICAgICAgICd1dnZmJyA9PiAnYXBwbGljYXRpb24vdm5kLmRlY2UuZGF0YScsCiAgICAgICAgJ3V2dmcnID0+ICdpbWFnZS92bmQuZGVjZS5ncmFwaGljJywKICAgICAgICAndXZ2aCcgPT4gJ3ZpZGVvL3ZuZC5kZWNlLmhkJywKICAgICAgICAndXZ2aScgPT4gJ2ltYWdlL3ZuZC5kZWNlLmdyYXBoaWMnLAogICAgICAgICd1dnZtJyA9PiAndmlkZW8vdm5kLmRlY2UubW9iaWxlJywKICAgICAgICAndXZ2cCcgPT4gJ3ZpZGVvL3ZuZC5kZWNlLnBkJywKICAgICAgICAndXZ2cycgPT4gJ3ZpZGVvL3ZuZC5kZWNlLnNkJywKICAgICAgICAndXZ2dCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5kZWNlLnR0bWwreG1sJywKICAgICAgICAndXZ2dScgPT4gJ3ZpZGVvL3ZuZC51dnZ1Lm1wNCcsCiAgICAgICAgJ3V2dnYnID0+ICd2aWRlby92bmQuZGVjZS52aWRlbycsCiAgICAgICAgJ3V2dngnID0+ICdhcHBsaWNhdGlvbi92bmQuZGVjZS51bnNwZWNpZmllZCcsCiAgICAgICAgJ3V2dnonID0+ICdhcHBsaWNhdGlvbi92bmQuZGVjZS56aXAnLAogICAgICAgICd1dngnID0+ICdhcHBsaWNhdGlvbi92bmQuZGVjZS51bnNwZWNpZmllZCcsCiAgICAgICAgJ3V2eicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5kZWNlLnppcCcsCiAgICAgICAgJ3Zib3gnID0+ICdhcHBsaWNhdGlvbi94LXZpcnR1YWxib3gtdmJveCcsCiAgICAgICAgJ3Zib3gtZXh0cGFjaycgPT4gJ2FwcGxpY2F0aW9uL3gtdmlydHVhbGJveC12Ym94LWV4dHBhY2snLAogICAgICAgICd2Y2FyZCcgPT4gJ3RleHQvdmNhcmQnLAogICAgICAgICd2Y2QnID0+ICdhcHBsaWNhdGlvbi94LWNkbGluaycsCiAgICAgICAgJ3ZjZicgPT4gJ3RleHQveC12Y2FyZCcsCiAgICAgICAgJ3ZjZycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5ncm9vdmUtdmNhcmQnLAogICAgICAgICd2Y3MnID0+ICd0ZXh0L3gtdmNhbGVuZGFyJywKICAgICAgICAndmN4JyA9PiAnYXBwbGljYXRpb24vdm5kLnZjeCcsCiAgICAgICAgJ3ZkaScgPT4gJ2FwcGxpY2F0aW9uL3gtdmlydHVhbGJveC12ZGknLAogICAgICAgICd2ZHMnID0+ICdtb2RlbC92bmQuc2FwLnZkcycsCiAgICAgICAgJ3ZkeCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy12aXNpby52aWV3ZXInLAogICAgICAgICd2ZWMnID0+ICdhcHBsaWNhdGlvbi92ZWMreG1sJywKICAgICAgICAndmhkJyA9PiAnYXBwbGljYXRpb24veC12aXJ0dWFsYm94LXZoZCcsCiAgICAgICAgJ3ZpcycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC52aXNpb25hcnknLAogICAgICAgICd2aXYnID0+ICd2aWRlby92bmQudml2bycsCiAgICAgICAgJ3ZtZGsnID0+ICdhcHBsaWNhdGlvbi94LXZpcnR1YWxib3gtdm1kaycsCiAgICAgICAgJ3ZvYicgPT4gJ3ZpZGVvL3gtbXMtdm9iJywKICAgICAgICAndm9yJyA9PiAnYXBwbGljYXRpb24vdm5kLnN0YXJkaXZpc2lvbi53cml0ZXInLAogICAgICAgICd2b3gnID0+ICdhcHBsaWNhdGlvbi94LWF1dGhvcndhcmUtYmluJywKICAgICAgICAndnJtbCcgPT4gJ21vZGVsL3ZybWwnLAogICAgICAgICd2c2QnID0+ICdhcHBsaWNhdGlvbi92bmQudmlzaW8nLAogICAgICAgICd2c2R4JyA9PiAnYXBwbGljYXRpb24vdm5kLnZpc2lvJywKICAgICAgICAndnNmJyA9PiAnYXBwbGljYXRpb24vdm5kLnZzZicsCiAgICAgICAgJ3ZzcycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC52aXNpbycsCiAgICAgICAgJ3ZzdCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC52aXNpbycsCiAgICAgICAgJ3ZzdycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC52aXNpbycsCiAgICAgICAgJ3Z0ZicgPT4gJ2ltYWdlL3ZuZC52YWx2ZS5zb3VyY2UudGV4dHVyZScsCiAgICAgICAgJ3Z0dCcgPT4gJ3RleHQvdnR0JywKICAgICAgICAndnR1JyA9PiAnbW9kZWwvdm5kLnZ0dScsCiAgICAgICAgJ3Z0eCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC52aXNpbycsCiAgICAgICAgJ3Z4bWwnID0+ICdhcHBsaWNhdGlvbi92b2ljZXhtbCt4bWwnLAogICAgICAgICd3M2QnID0+ICdhcHBsaWNhdGlvbi94LWRpcmVjdG9yJywKICAgICAgICAnd2FkJyA9PiAnYXBwbGljYXRpb24veC1kb29tJywKICAgICAgICAnd2FkbCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zdW4ud2FkbCt4bWwnLAogICAgICAgICd3YXInID0+ICdhcHBsaWNhdGlvbi9qYXZhLWFyY2hpdmUnLAogICAgICAgICd3YXNtJyA9PiAnYXBwbGljYXRpb24vd2FzbScsCiAgICAgICAgJ3dhdicgPT4gJ2F1ZGlvL3dhdicsCiAgICAgICAgJ3dheCcgPT4gJ2F1ZGlvL3gtbXMtd2F4JywKICAgICAgICAnd2JtcCcgPT4gJ2ltYWdlL3ZuZC53YXAud2JtcCcsCiAgICAgICAgJ3dicycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5jcml0aWNhbHRvb2xzLndicyt4bWwnLAogICAgICAgICd3YnhtbCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC53YXAud2J4bWwnLAogICAgICAgICd3Y20nID0+ICdhcHBsaWNhdGlvbi92bmQubXMtd29ya3MnLAogICAgICAgICd3ZGInID0+ICdhcHBsaWNhdGlvbi92bmQubXMtd29ya3MnLAogICAgICAgICd3ZHAnID0+ICdpbWFnZS92bmQubXMtcGhvdG8nLAogICAgICAgICd3ZWJhJyA9PiAnYXVkaW8vd2VibScsCiAgICAgICAgJ3dlYmFwcCcgPT4gJ2FwcGxpY2F0aW9uL3gtd2ViLWFwcC1tYW5pZmVzdCtqc29uJywKICAgICAgICAnd2VibScgPT4gJ3ZpZGVvL3dlYm0nLAogICAgICAgICd3ZWJtYW5pZmVzdCcgPT4gJ2FwcGxpY2F0aW9uL21hbmlmZXN0K2pzb24nLAogICAgICAgICd3ZWJwJyA9PiAnaW1hZ2Uvd2VicCcsCiAgICAgICAgJ3dnJyA9PiAnYXBwbGljYXRpb24vdm5kLnBtaS53aWRnZXQnLAogICAgICAgICd3Z3NsJyA9PiAndGV4dC93Z3NsJywKICAgICAgICAnd2d0JyA9PiAnYXBwbGljYXRpb24vd2lkZ2V0JywKICAgICAgICAnd2lmJyA9PiAnYXBwbGljYXRpb24vd2F0Y2hlcmluZm8reG1sJywKICAgICAgICAnd2tzJyA9PiAnYXBwbGljYXRpb24vdm5kLm1zLXdvcmtzJywKICAgICAgICAnd20nID0+ICd2aWRlby94LW1zLXdtJywKICAgICAgICAnd21hJyA9PiAnYXVkaW8veC1tcy13bWEnLAogICAgICAgICd3bWQnID0+ICdhcHBsaWNhdGlvbi94LW1zLXdtZCcsCiAgICAgICAgJ3dtZicgPT4gJ2ltYWdlL3dtZicsCiAgICAgICAgJ3dtbCcgPT4gJ3RleHQvdm5kLndhcC53bWwnLAogICAgICAgICd3bWxjJyA9PiAnYXBwbGljYXRpb24vdm5kLndhcC53bWxjJywKICAgICAgICAnd21scycgPT4gJ3RleHQvdm5kLndhcC53bWxzY3JpcHQnLAogICAgICAgICd3bWxzYycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC53YXAud21sc2NyaXB0YycsCiAgICAgICAgJ3dtdicgPT4gJ3ZpZGVvL3gtbXMtd212JywKICAgICAgICAnd214JyA9PiAndmlkZW8veC1tcy13bXgnLAogICAgICAgICd3bXonID0+ICdhcHBsaWNhdGlvbi94LW1zLXdteicsCiAgICAgICAgJ3dvZmYnID0+ICdmb250L3dvZmYnLAogICAgICAgICd3b2ZmMicgPT4gJ2ZvbnQvd29mZjInLAogICAgICAgICd3b3JkJyA9PiAnYXBwbGljYXRpb24vbXN3b3JkJywKICAgICAgICAnd3BkJyA9PiAnYXBwbGljYXRpb24vdm5kLndvcmRwZXJmZWN0JywKICAgICAgICAnd3BsJyA9PiAnYXBwbGljYXRpb24vdm5kLm1zLXdwbCcsCiAgICAgICAgJ3dwcycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy13b3JrcycsCiAgICAgICAgJ3dxZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC53cWQnLAogICAgICAgICd3cmknID0+ICdhcHBsaWNhdGlvbi94LW1zd3JpdGUnLAogICAgICAgICd3cmwnID0+ICdtb2RlbC92cm1sJywKICAgICAgICAnd3NjJyA9PiAnbWVzc2FnZS92bmQud2ZhLndzYycsCiAgICAgICAgJ3dzZGwnID0+ICdhcHBsaWNhdGlvbi93c2RsK3htbCcsCiAgICAgICAgJ3dzcG9saWN5JyA9PiAnYXBwbGljYXRpb24vd3Nwb2xpY3kreG1sJywKICAgICAgICAnd3RiJyA9PiAnYXBwbGljYXRpb24vdm5kLndlYnR1cmJvJywKICAgICAgICAnd3Z4JyA9PiAndmlkZW8veC1tcy13dngnLAogICAgICAgICd4MzInID0+ICdhcHBsaWNhdGlvbi94LWF1dGhvcndhcmUtYmluJywKICAgICAgICAneDNkJyA9PiAnbW9kZWwveDNkK3htbCcsCiAgICAgICAgJ3gzZGInID0+ICdtb2RlbC94M2QrZmFzdGluZm9zZXQnLAogICAgICAgICd4M2RieicgPT4gJ21vZGVsL3gzZCtiaW5hcnknLAogICAgICAgICd4M2R2JyA9PiAnbW9kZWwveDNkLXZybWwnLAogICAgICAgICd4M2R2eicgPT4gJ21vZGVsL3gzZCt2cm1sJywKICAgICAgICAneDNkeicgPT4gJ21vZGVsL3gzZCt4bWwnLAogICAgICAgICd4X2InID0+ICdtb2RlbC92bmQucGFyYXNvbGlkLnRyYW5zbWl0LmJpbmFyeScsCiAgICAgICAgJ3hfdCcgPT4gJ21vZGVsL3ZuZC5wYXJhc29saWQudHJhbnNtaXQudGV4dCcsCiAgICAgICAgJ3hhbWwnID0+ICdhcHBsaWNhdGlvbi94YW1sK3htbCcsCiAgICAgICAgJ3hhcCcgPT4gJ2FwcGxpY2F0aW9uL3gtc2lsdmVybGlnaHQtYXBwJywKICAgICAgICAneGFyJyA9PiAnYXBwbGljYXRpb24vdm5kLnhhcmEnLAogICAgICAgICd4YXYnID0+ICdhcHBsaWNhdGlvbi94Y2FwLWF0dCt4bWwnLAogICAgICAgICd4YmFwJyA9PiAnYXBwbGljYXRpb24veC1tcy14YmFwJywKICAgICAgICAneGJkJyA9PiAnYXBwbGljYXRpb24vdm5kLmZ1aml4ZXJveC5kb2N1d29ya3MuYmluZGVyJywKICAgICAgICAneGJtJyA9PiAnaW1hZ2UveC14Yml0bWFwJywKICAgICAgICAneGNhJyA9PiAnYXBwbGljYXRpb24veGNhcC1jYXBzK3htbCcsCiAgICAgICAgJ3hjcycgPT4gJ2FwcGxpY2F0aW9uL2NhbGVuZGFyK3htbCcsCiAgICAgICAgJ3hkY2YnID0+ICdhcHBsaWNhdGlvbi92bmQuZ292LnNrLnhtbGRhdGFjb250YWluZXIreG1sJywKICAgICAgICAneGRmJyA9PiAnYXBwbGljYXRpb24veGNhcC1kaWZmK3htbCcsCiAgICAgICAgJ3hkbScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zeW5jbWwuZG0reG1sJywKICAgICAgICAneGRwJyA9PiAnYXBwbGljYXRpb24vdm5kLmFkb2JlLnhkcCt4bWwnLAogICAgICAgICd4ZHNzYycgPT4gJ2FwcGxpY2F0aW9uL2Rzc2MreG1sJywKICAgICAgICAneGR3JyA9PiAnYXBwbGljYXRpb24vdm5kLmZ1aml4ZXJveC5kb2N1d29ya3MnLAogICAgICAgICd4ZWwnID0+ICdhcHBsaWNhdGlvbi94Y2FwLWVsK3htbCcsCiAgICAgICAgJ3hlbmMnID0+ICdhcHBsaWNhdGlvbi94ZW5jK3htbCcsCiAgICAgICAgJ3hlcicgPT4gJ2FwcGxpY2F0aW9uL3BhdGNoLW9wcy1lcnJvcit4bWwnLAogICAgICAgICd4ZmRmJyA9PiAnYXBwbGljYXRpb24veGZkZicsCiAgICAgICAgJ3hmZGwnID0+ICdhcHBsaWNhdGlvbi92bmQueGZkbCcsCiAgICAgICAgJ3hodCcgPT4gJ2FwcGxpY2F0aW9uL3hodG1sK3htbCcsCiAgICAgICAgJ3hodG0nID0+ICdhcHBsaWNhdGlvbi92bmQucHdnLXhodG1sLXByaW50K3htbCcsCiAgICAgICAgJ3hodG1sJyA9PiAnYXBwbGljYXRpb24veGh0bWwreG1sJywKICAgICAgICAneGh2bWwnID0+ICdhcHBsaWNhdGlvbi94dit4bWwnLAogICAgICAgICd4aWYnID0+ICdpbWFnZS92bmQueGlmZicsCiAgICAgICAgJ3hsJyA9PiAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJywKICAgICAgICAneGxhJyA9PiAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJywKICAgICAgICAneGxhbScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5hZGRpbi5tYWNyb2VuYWJsZWQuMTInLAogICAgICAgICd4bGMnID0+ICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnLAogICAgICAgICd4bGYnID0+ICdhcHBsaWNhdGlvbi94bGlmZit4bWwnLAogICAgICAgICd4bG0nID0+ICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnLAogICAgICAgICd4bHMnID0+ICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnLAogICAgICAgICd4bHNiJyA9PiAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0LmJpbmFyeS5tYWNyb2VuYWJsZWQuMTInLAogICAgICAgICd4bHNtJyA9PiAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0Lm1hY3JvZW5hYmxlZC4xMicsCiAgICAgICAgJ3hsc3gnID0+ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcsCiAgICAgICAgJ3hsdCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCcsCiAgICAgICAgJ3hsdG0nID0+ICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGVtcGxhdGUubWFjcm9lbmFibGVkLjEyJywKICAgICAgICAneGx0eCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRlbXBsYXRlJywKICAgICAgICAneGx3JyA9PiAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJywKICAgICAgICAneG0nID0+ICdhdWRpby94bScsCiAgICAgICAgJ3htbCcgPT4gJ2FwcGxpY2F0aW9uL3htbCcsCiAgICAgICAgJ3hucycgPT4gJ2FwcGxpY2F0aW9uL3hjYXAtbnMreG1sJywKICAgICAgICAneG8nID0+ICdhcHBsaWNhdGlvbi92bmQub2xwYy1zdWdhcicsCiAgICAgICAgJ3hvcCcgPT4gJ2FwcGxpY2F0aW9uL3hvcCt4bWwnLAogICAgICAgICd4cGknID0+ICdhcHBsaWNhdGlvbi94LXhwaW5zdGFsbCcsCiAgICAgICAgJ3hwbCcgPT4gJ2FwcGxpY2F0aW9uL3hwcm9jK3htbCcsCiAgICAgICAgJ3hwbScgPT4gJ2ltYWdlL3gteHBpeG1hcCcsCiAgICAgICAgJ3hwcicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5pcy14cHInLAogICAgICAgICd4cHMnID0+ICdhcHBsaWNhdGlvbi92bmQubXMteHBzZG9jdW1lbnQnLAogICAgICAgICd4cHcnID0+ICdhcHBsaWNhdGlvbi92bmQuaW50ZXJjb24uZm9ybW5ldCcsCiAgICAgICAgJ3hweCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5pbnRlcmNvbi5mb3JtbmV0JywKICAgICAgICAneHNkJyA9PiAnYXBwbGljYXRpb24veG1sJywKICAgICAgICAneHNmJyA9PiAnYXBwbGljYXRpb24vcHJzLnhzZit4bWwnLAogICAgICAgICd4c2wnID0+ICdhcHBsaWNhdGlvbi94c2x0K3htbCcsCiAgICAgICAgJ3hzbHQnID0+ICdhcHBsaWNhdGlvbi94c2x0K3htbCcsCiAgICAgICAgJ3hzbScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zeW5jbWwreG1sJywKICAgICAgICAneHNwZicgPT4gJ2FwcGxpY2F0aW9uL3hzcGYreG1sJywKICAgICAgICAneHVsJyA9PiAnYXBwbGljYXRpb24vdm5kLm1vemlsbGEueHVsK3htbCcsCiAgICAgICAgJ3h2bScgPT4gJ2FwcGxpY2F0aW9uL3h2K3htbCcsCiAgICAgICAgJ3h2bWwnID0+ICdhcHBsaWNhdGlvbi94dit4bWwnLAogICAgICAgICd4d2QnID0+ICdpbWFnZS94LXh3aW5kb3dkdW1wJywKICAgICAgICAneHl6JyA9PiAnY2hlbWljYWwveC14eXonLAogICAgICAgICd4eicgPT4gJ2FwcGxpY2F0aW9uL3gteHonLAogICAgICAgICd5YW1sJyA9PiAndGV4dC95YW1sJywKICAgICAgICAneWFuZycgPT4gJ2FwcGxpY2F0aW9uL3lhbmcnLAogICAgICAgICd5aW4nID0+ICdhcHBsaWNhdGlvbi95aW4reG1sJywKICAgICAgICAneW1sJyA9PiAndGV4dC95YW1sJywKICAgICAgICAneW1wJyA9PiAndGV4dC94LXN1c2UteW1wJywKICAgICAgICAneicgPT4gJ2FwcGxpY2F0aW9uL3gtY29tcHJlc3MnLAogICAgICAgICd6MScgPT4gJ2FwcGxpY2F0aW9uL3gtem1hY2hpbmUnLAogICAgICAgICd6MicgPT4gJ2FwcGxpY2F0aW9uL3gtem1hY2hpbmUnLAogICAgICAgICd6MycgPT4gJ2FwcGxpY2F0aW9uL3gtem1hY2hpbmUnLAogICAgICAgICd6NCcgPT4gJ2FwcGxpY2F0aW9uL3gtem1hY2hpbmUnLAogICAgICAgICd6NScgPT4gJ2FwcGxpY2F0aW9uL3gtem1hY2hpbmUnLAogICAgICAgICd6NicgPT4gJ2FwcGxpY2F0aW9uL3gtem1hY2hpbmUnLAogICAgICAgICd6NycgPT4gJ2FwcGxpY2F0aW9uL3gtem1hY2hpbmUnLAogICAgICAgICd6OCcgPT4gJ2FwcGxpY2F0aW9uL3gtem1hY2hpbmUnLAogICAgICAgICd6YXonID0+ICdhcHBsaWNhdGlvbi92bmQuenphenouZGVjayt4bWwnLAogICAgICAgICd6aXAnID0+ICdhcHBsaWNhdGlvbi96aXAnLAogICAgICAgICd6aXInID0+ICdhcHBsaWNhdGlvbi92bmQuenVsJywKICAgICAgICAnemlyeicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC56dWwnLAogICAgICAgICd6bW0nID0+ICdhcHBsaWNhdGlvbi92bmQuaGFuZGhlbGQtZW50ZXJ0YWlubWVudCt4bWwnLAogICAgICAgICd6c2gnID0+ICd0ZXh0L3gtc2NyaXB0enNoJywKICAgIF07CgogICAgLyoqCiAgICAgKiBEZXRlcm1pbmVzIHRoZSBtaW1ldHlwZSBvZiBhIGZpbGUgYnkgbG9va2luZyBhdCBpdHMgZXh0ZW5zaW9uLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2pzaHR0cC9taW1lLWRiL21hc3Rlci9kYi5qc29uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUZpbGVuYW1lKHN0cmluZyAkZmlsZW5hbWUpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmZyb21FeHRlbnNpb24ocGF0aGluZm8oJGZpbGVuYW1lLCBQQVRISU5GT19FWFRFTlNJT04pKTsKICAgIH0KCiAgICAvKioKICAgICAqIE1hcHMgYSBmaWxlIGV4dGVuc2lvbnMgdG8gYSBtaW1ldHlwZS4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9qc2h0dHAvbWltZS1kYi9tYXN0ZXIvZGIuanNvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21FeHRlbnNpb24oc3RyaW5nICRleHRlbnNpb24pOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6Ok1JTUVfVFlQRVNbc3RydG9sb3dlcigkZXh0ZW5zaW9uKV0gPz8gbnVsbDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/MultipartStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBTdHJlYW0gdGhhdCB3aGVuIHJlYWQgcmV0dXJucyBieXRlcyBmb3IgYSBzdHJlYW1pbmcgbXVsdGlwYXJ0IG9yCiAqIG11bHRpcGFydC9mb3JtLWRhdGEgc3RyZWFtLgogKi8KZmluYWwgY2xhc3MgTXVsdGlwYXJ0U3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIHVzZSBTdHJlYW1EZWNvcmF0b3JUcmFpdDsKCiAgICAvKiogQHZhciBzdHJpbmcgKi8KICAgIHByaXZhdGUgJGJvdW5kYXJ5OwoKICAgIC8qKiBAdmFyIFN0cmVhbUludGVyZmFjZSAqLwogICAgcHJpdmF0ZSAkc3RyZWFtOwoKICAgIC8qKgogICAgICogQHBhcmFtIGFycmF5ICAkZWxlbWVudHMgQXJyYXkgb2YgYXNzb2NpYXRpdmUgYXJyYXlzLCBlYWNoIGNvbnRhaW5pbmcgYQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQgIm5hbWUiIGtleSBtYXBwaW5nIHRvIHRoZSBmb3JtIGZpZWxkLAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgYSByZXF1aXJlZCAiY29udGVudHMiIGtleSBtYXBwaW5nIHRvIGFueQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgYWNjZXB0ZWQgYnkgVXRpbHM6OnN0cmVhbUZvcigpIChzY2FsYXIsCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCByZXNvdXJjZSwgU3RyZWFtSW50ZXJmYWNlLCBJdGVyYXRvciwgb3IKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxhYmxlKSwgb3IgYW4gYXJyYXkgZm9yIG5lc3RlZCBleHBhbnNpb24uCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25hbCBrZXlzIGluY2x1ZGUgImhlYWRlcnMiIChhc3NvY2lhdGl2ZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkgb2YgY3VzdG9tIGhlYWRlcnMpIGFuZCAiZmlsZW5hbWUiIChzdHJpbmcKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHNlbmQgYXMgdGhlIGZpbGVuYW1lIGluIHRoZSBwYXJ0KS4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gImNvbnRlbnRzIiBpcyBhbiBhcnJheSwgaXQgaXMgcmVjdXJzaXZlbHkKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGVkIGludG8gbXVsdGlwbGUgZmllbGRzIHVzaW5nIGJyYWNrZXQgbm90YXRpb24KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuLCBuYW1lWzBdW2tleV0pLiBFbXB0eSBhcnJheXMgcHJvZHVjZSBubyBmaWVsZHMuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgImZpbGVuYW1lIiBhbmQgImhlYWRlcnMiIG9wdGlvbnMgY2Fubm90IGJlIHVzZWQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYXJyYXkgY29udGVudHMuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRib3VuZGFyeSBZb3UgY2FuIG9wdGlvbmFsbHkgcHJvdmlkZSBhIHNwZWNpZmljIGJvdW5kYXJ5CiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkZWxlbWVudHMgPSBbXSwgP3N0cmluZyAkYm91bmRhcnkgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT5ib3VuZGFyeSA9ICRib3VuZGFyeSA/OiBiaW4yaGV4KHJhbmRvbV9ieXRlcygyMCkpOwogICAgICAgICR0aGlzLT5zdHJlYW0gPSAkdGhpcy0+Y3JlYXRlU3RyZWFtKCRlbGVtZW50cyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEJvdW5kYXJ5KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Ym91bmRhcnk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzV3JpdGFibGUoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgaGVhZGVycyBuZWVkZWQgYmVmb3JlIHRyYW5zZmVycmluZyB0aGUgY29udGVudCBvZiBhIFBPU1QgZmlsZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmdbXSAkaGVhZGVycwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldEhlYWRlcnMoYXJyYXkgJGhlYWRlcnMpOiBzdHJpbmcKICAgIHsKICAgICAgICAkc3RyID0gJyc7CiAgICAgICAgZm9yZWFjaCAoJGhlYWRlcnMgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgJHN0ciAuPSAieyRrZXl9OiB7JHZhbHVlfVxyXG4iOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICItLXskdGhpcy0+Ym91bmRhcnl9XHJcbiIudHJpbSgkc3RyKS4iXHJcblxyXG4iOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIHRoZSBhZ2dyZWdhdGUgc3RyZWFtIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHVwbG9hZCB0aGUgUE9TVCBkYXRhCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjcmVhdGVTdHJlYW0oYXJyYXkgJGVsZW1lbnRzID0gW10pOiBTdHJlYW1JbnRlcmZhY2UKICAgIHsKICAgICAgICAkc3RyZWFtID0gbmV3IEFwcGVuZFN0cmVhbSgpOwoKICAgICAgICBmb3JlYWNoICgkZWxlbWVudHMgYXMgJGVsZW1lbnQpIHsKICAgICAgICAgICAgaWYgKCFpc19hcnJheSgkZWxlbWVudCkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCdBbiBhcnJheSBpcyBleHBlY3RlZCcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR0aGlzLT5hZGRFbGVtZW50KCRzdHJlYW0sICRlbGVtZW50KTsKICAgICAgICB9CgogICAgICAgIC8vIEFkZCB0aGUgdHJhaWxpbmcgYm91bmRhcnkgd2l0aCBDUkxGCiAgICAgICAgJHN0cmVhbS0+YWRkU3RyZWFtKFV0aWxzOjpzdHJlYW1Gb3IoIi0teyR0aGlzLT5ib3VuZGFyeX0tLVxyXG4iKSk7CgogICAgICAgIHJldHVybiAkc3RyZWFtOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRWxlbWVudChBcHBlbmRTdHJlYW0gJHN0cmVhbSwgYXJyYXkgJGVsZW1lbnQpOiB2b2lkCiAgICB7CiAgICAgICAgZm9yZWFjaCAoWydjb250ZW50cycsICduYW1lJ10gYXMgJGtleSkgewogICAgICAgICAgICBpZiAoIWFycmF5X2tleV9leGlzdHMoJGtleSwgJGVsZW1lbnQpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiQSAneyRrZXl9JyBrZXkgaXMgcmVxdWlyZWQiKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCFpc19zdHJpbmcoJGVsZW1lbnRbJ25hbWUnXSkgJiYgIWlzX2ludCgkZWxlbWVudFsnbmFtZSddKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiVGhlICduYW1lJyBrZXkgbXVzdCBiZSBhIHN0cmluZyBvciBpbnRlZ2VyIik7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNfYXJyYXkoJGVsZW1lbnRbJ2NvbnRlbnRzJ10pKSB7CiAgICAgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdmaWxlbmFtZScsICRlbGVtZW50KSB8fCBhcnJheV9rZXlfZXhpc3RzKCdoZWFkZXJzJywgJGVsZW1lbnQpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAiVGhlICdmaWxlbmFtZScgYW5kICdoZWFkZXJzJyBvcHRpb25zIGNhbm5vdCBiZSB1c2VkIHdoZW4gJ2NvbnRlbnRzJyBpcyBhbiBhcnJheSIKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5hZGROZXN0ZWRFbGVtZW50cygkc3RyZWFtLCAkZWxlbWVudFsnY29udGVudHMnXSwgKHN0cmluZykgJGVsZW1lbnRbJ25hbWUnXSk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkZWxlbWVudFsnY29udGVudHMnXSA9IFV0aWxzOjpzdHJlYW1Gb3IoJGVsZW1lbnRbJ2NvbnRlbnRzJ10pOwoKICAgICAgICBpZiAoZW1wdHkoJGVsZW1lbnRbJ2ZpbGVuYW1lJ10pKSB7CiAgICAgICAgICAgICR1cmkgPSAkZWxlbWVudFsnY29udGVudHMnXS0+Z2V0TWV0YWRhdGEoJ3VyaScpOwogICAgICAgICAgICBpZiAoJHVyaSAmJiBcaXNfc3RyaW5nKCR1cmkpICYmIFxzdWJzdHIoJHVyaSwgMCwgNikgIT09ICdwaHA6Ly8nICYmIFxzdWJzdHIoJHVyaSwgMCwgNykgIT09ICdkYXRhOi8vJykgewogICAgICAgICAgICAgICAgJGVsZW1lbnRbJ2ZpbGVuYW1lJ10gPSAkdXJpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBbJGJvZHksICRoZWFkZXJzXSA9ICR0aGlzLT5jcmVhdGVFbGVtZW50KAogICAgICAgICAgICAoc3RyaW5nKSAkZWxlbWVudFsnbmFtZSddLAogICAgICAgICAgICAkZWxlbWVudFsnY29udGVudHMnXSwKICAgICAgICAgICAgJGVsZW1lbnRbJ2ZpbGVuYW1lJ10gPz8gbnVsbCwKICAgICAgICAgICAgJGVsZW1lbnRbJ2hlYWRlcnMnXSA/PyBbXQogICAgICAgICk7CgogICAgICAgICRzdHJlYW0tPmFkZFN0cmVhbShVdGlsczo6c3RyZWFtRm9yKCR0aGlzLT5nZXRIZWFkZXJzKCRoZWFkZXJzKSkpOwogICAgICAgICRzdHJlYW0tPmFkZFN0cmVhbSgkYm9keSk7CiAgICAgICAgJHN0cmVhbS0+YWRkU3RyZWFtKFV0aWxzOjpzdHJlYW1Gb3IoIlxyXG4iKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZWN1cnNpdmVseSBleHBhbmQgYXJyYXkgY29udGVudHMgaW50byBtdWx0aXBsZSBmb3JtIGZpZWxkcy4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXk8YXJyYXkta2V5LCBtaXhlZD4gJGNvbnRlbnRzCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkTmVzdGVkRWxlbWVudHMoQXBwZW5kU3RyZWFtICRzdHJlYW0sIGFycmF5ICRjb250ZW50cywgc3RyaW5nICRyb290KTogdm9pZAogICAgewogICAgICAgIGZvcmVhY2ggKCRjb250ZW50cyBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICAkZmllbGROYW1lID0gJHJvb3QgPT09ICcnID8gc3ByaW50ZignWyVzXScsIChzdHJpbmcpICRrZXkpIDogc3ByaW50ZignJXNbJXNdJywgJHJvb3QsIChzdHJpbmcpICRrZXkpOwoKICAgICAgICAgICAgaWYgKGlzX2FycmF5KCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5hZGROZXN0ZWRFbGVtZW50cygkc3RyZWFtLCAkdmFsdWUsICRmaWVsZE5hbWUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHRoaXMtPmFkZEVsZW1lbnQoJHN0cmVhbSwgWyduYW1lJyA9PiAkZmllbGROYW1lLCAnY29udGVudHMnID0+ICR2YWx1ZV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZ1tdICRoZWFkZXJzCiAgICAgKgogICAgICogQHJldHVybiBhcnJheXswOiBTdHJlYW1JbnRlcmZhY2UsIDE6IHN0cmluZ1tdfQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoc3RyaW5nICRuYW1lLCBTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwgP3N0cmluZyAkZmlsZW5hbWUsIGFycmF5ICRoZWFkZXJzKTogYXJyYXkKICAgIHsKICAgICAgICAvLyBTZXQgYSBkZWZhdWx0IGNvbnRlbnQtZGlzcG9zaXRpb24gaGVhZGVyIGlmIG9uZSB3YXMgbm8gcHJvdmlkZWQKICAgICAgICAkZGlzcG9zaXRpb24gPSBzZWxmOjpnZXRIZWFkZXIoJGhlYWRlcnMsICdjb250ZW50LWRpc3Bvc2l0aW9uJyk7CiAgICAgICAgaWYgKCEkZGlzcG9zaXRpb24pIHsKICAgICAgICAgICAgJGhlYWRlcnNbJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSA9ICgkZmlsZW5hbWUgPT09ICcwJyB8fCAkZmlsZW5hbWUpCiAgICAgICAgICAgICAgICA/IHNwcmludGYoCiAgICAgICAgICAgICAgICAgICAgJ2Zvcm0tZGF0YTsgbmFtZT0iJXMiOyBmaWxlbmFtZT0iJXMiJywKICAgICAgICAgICAgICAgICAgICAkbmFtZSwKICAgICAgICAgICAgICAgICAgICBiYXNlbmFtZSgkZmlsZW5hbWUpCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICA6ICJmb3JtLWRhdGE7IG5hbWU9XCJ7JG5hbWV9XCIiOwogICAgICAgIH0KCiAgICAgICAgLy8gU2V0IGEgZGVmYXVsdCBjb250ZW50LWxlbmd0aCBoZWFkZXIgaWYgb25lIHdhcyBubyBwcm92aWRlZAogICAgICAgICRsZW5ndGggPSBzZWxmOjpnZXRIZWFkZXIoJGhlYWRlcnMsICdjb250ZW50LWxlbmd0aCcpOwogICAgICAgIGlmICghJGxlbmd0aCkgewogICAgICAgICAgICBpZiAoJGxlbmd0aCA9ICRzdHJlYW0tPmdldFNpemUoKSkgewogICAgICAgICAgICAgICAgJGhlYWRlcnNbJ0NvbnRlbnQtTGVuZ3RoJ10gPSAoc3RyaW5nKSAkbGVuZ3RoOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBTZXQgYSBkZWZhdWx0IENvbnRlbnQtVHlwZSBpZiBvbmUgd2FzIG5vdCBzdXBwbGllZAogICAgICAgICR0eXBlID0gc2VsZjo6Z2V0SGVhZGVyKCRoZWFkZXJzLCAnY29udGVudC10eXBlJyk7CiAgICAgICAgaWYgKCEkdHlwZSAmJiAoJGZpbGVuYW1lID09PSAnMCcgfHwgJGZpbGVuYW1lKSkgewogICAgICAgICAgICAkaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSBNaW1lVHlwZTo6ZnJvbUZpbGVuYW1lKCRmaWxlbmFtZSkgPz8gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gWyRzdHJlYW0sICRoZWFkZXJzXTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmdbXSAkaGVhZGVycwogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBnZXRIZWFkZXIoYXJyYXkgJGhlYWRlcnMsIHN0cmluZyAka2V5KTogP3N0cmluZwogICAgewogICAgICAgICRsb3dlcmNhc2VIZWFkZXIgPSBzdHJ0b2xvd2VyKCRrZXkpOwogICAgICAgIGZvcmVhY2ggKCRoZWFkZXJzIGFzICRrID0+ICR2KSB7CiAgICAgICAgICAgIGlmIChzdHJ0b2xvd2VyKChzdHJpbmcpICRrKSA9PT0gJGxvd2VyY2FzZUhlYWRlcikgewogICAgICAgICAgICAgICAgcmV0dXJuICR2OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/NoSeekStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBTdHJlYW0gZGVjb3JhdG9yIHRoYXQgcHJldmVudHMgYSBzdHJlYW0gZnJvbSBiZWluZyBzZWVrZWQuCiAqLwpmaW5hbCBjbGFzcyBOb1NlZWtTdHJlYW0gaW1wbGVtZW50cyBTdHJlYW1JbnRlcmZhY2UKewogICAgdXNlIFN0cmVhbURlY29yYXRvclRyYWl0OwoKICAgIC8qKiBAdmFyIFN0cmVhbUludGVyZmFjZSAqLwogICAgcHJpdmF0ZSAkc3RyZWFtOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZWVrKCRvZmZzZXQsICR3aGVuY2UgPSBTRUVLX1NFVCk6IHZvaWQKICAgIHsKICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0Nhbm5vdCBzZWVrIGEgTm9TZWVrU3RyZWFtJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzU2Vla2FibGUoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/PumpStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBQcm92aWRlcyBhIHJlYWQgb25seSBzdHJlYW0gdGhhdCBwdW1wcyBkYXRhIGZyb20gYSBQSFAgY2FsbGFibGUuCiAqCiAqIFdoZW4gaW52b2tpbmcgdGhlIHByb3ZpZGVkIGNhbGxhYmxlLCB0aGUgUHVtcFN0cmVhbSB3aWxsIHBhc3MgdGhlIGFtb3VudCBvZgogKiBkYXRhIHJlcXVlc3RlZCB0byByZWFkIHRvIHRoZSBjYWxsYWJsZS4gVGhlIGNhbGxhYmxlIGNhbiBjaG9vc2UgdG8gaWdub3JlCiAqIHRoaXMgdmFsdWUgYW5kIHJldHVybiBmZXdlciBvciBtb3JlIGJ5dGVzIHRoYW4gcmVxdWVzdGVkLiBBbnkgZXh0cmEgZGF0YQogKiByZXR1cm5lZCBieSB0aGUgcHJvdmlkZWQgY2FsbGFibGUgaXMgYnVmZmVyZWQgaW50ZXJuYWxseSB1bnRpbCBkcmFpbmVkIHVzaW5nCiAqIHRoZSByZWFkKCkgZnVuY3Rpb24gb2YgdGhlIFB1bXBTdHJlYW0uIFRoZSBwcm92aWRlZCBjYWxsYWJsZSBNVVNUIHJldHVybgogKiBmYWxzZSB3aGVuIHRoZXJlIGlzIG5vIG1vcmUgZGF0YSB0byByZWFkLgogKi8KZmluYWwgY2xhc3MgUHVtcFN0cmVhbSBpbXBsZW1lbnRzIFN0cmVhbUludGVyZmFjZQp7CiAgICAvKiogQHZhciBjYWxsYWJsZShpbnQpOiAoc3RyaW5nfGZhbHNlfG51bGwpfG51bGwgKi8KICAgIHByaXZhdGUgJHNvdXJjZTsKCiAgICAvKiogQHZhciBpbnR8bnVsbCAqLwogICAgcHJpdmF0ZSAkc2l6ZTsKCiAgICAvKiogQHZhciBpbnQgKi8KICAgIHByaXZhdGUgJHRlbGxQb3MgPSAwOwoKICAgIC8qKiBAdmFyIGFycmF5ICovCiAgICBwcml2YXRlICRtZXRhZGF0YTsKCiAgICAvKiogQHZhciBCdWZmZXJTdHJlYW0gKi8KICAgIHByaXZhdGUgJGJ1ZmZlcjsKCiAgICAvKioKICAgICAqIEBwYXJhbSBjYWxsYWJsZShpbnQpOiAoc3RyaW5nfGZhbHNlfG51bGwpICAkc291cmNlICBTb3VyY2Ugb2YgdGhlIHN0cmVhbSBkYXRhLiBUaGUgY2FsbGFibGUgTUFZCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0IGFuIGludGVnZXIgYXJndW1lbnQgdXNlZCB0byBjb250cm9sIHRoZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtb3VudCBvZiBkYXRhIHRvIHJldHVybi4gVGhlIGNhbGxhYmxlIE1VU1QKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSBzdHJpbmcgd2hlbiBjYWxsZWQsIG9yIGZhbHNlfG51bGwgb24gZXJyb3IKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBFT0YuCiAgICAgKiBAcGFyYW0gYXJyYXl7c2l6ZT86IGludCwgbWV0YWRhdGE/OiBhcnJheX0gJG9wdGlvbnMgU3RyZWFtIG9wdGlvbnM6CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBtZXRhZGF0YTogSGFzaCBvZiBtZXRhZGF0YSB0byB1c2Ugd2l0aCBzdHJlYW0uCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBzaXplOiBTaXplIG9mIHRoZSBzdHJlYW0sIGlmIGtub3duLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoY2FsbGFibGUgJHNvdXJjZSwgYXJyYXkgJG9wdGlvbnMgPSBbXSkKICAgIHsKICAgICAgICAkdGhpcy0+c291cmNlID0gJHNvdXJjZTsKICAgICAgICAkdGhpcy0+c2l6ZSA9ICRvcHRpb25zWydzaXplJ10gPz8gbnVsbDsKICAgICAgICAkdGhpcy0+bWV0YWRhdGEgPSAkb3B0aW9uc1snbWV0YWRhdGEnXSA/PyBbXTsKICAgICAgICAkdGhpcy0+YnVmZmVyID0gbmV3IEJ1ZmZlclN0cmVhbSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBVdGlsczo6Y29weVRvU3RyaW5nKCR0aGlzKTsKICAgICAgICB9IGNhdGNoIChcVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgIGlmIChcUEhQX1ZFUlNJT05fSUQgPj0gNzA0MDApIHsKICAgICAgICAgICAgICAgIHRocm93ICRlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRyaWdnZXJfZXJyb3Ioc3ByaW50ZignJXM6Ol9fdG9TdHJpbmcgZXhjZXB0aW9uOiAlcycsIHNlbGY6OmNsYXNzLCAoc3RyaW5nKSAkZSksIEVfVVNFUl9FUlJPUik7CgogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjbG9zZSgpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmRldGFjaCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkZXRhY2goKQogICAgewogICAgICAgICR0aGlzLT50ZWxsUG9zID0gMDsKICAgICAgICAkdGhpcy0+c291cmNlID0gbnVsbDsKCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFNpemUoKTogP2ludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c2l6ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVsbCgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRlbGxQb3M7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGVvZigpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zb3VyY2UgPT09IG51bGw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzU2Vla2FibGUoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmV3aW5kKCk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+c2VlaygwKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2Vlaygkb2Zmc2V0LCAkd2hlbmNlID0gU0VFS19TRVQpOiB2b2lkCiAgICB7CiAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdDYW5ub3Qgc2VlayBhIFB1bXBTdHJlYW0nKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNXcml0YWJsZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3cml0ZSgkc3RyaW5nKTogaW50CiAgICB7CiAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdDYW5ub3Qgd3JpdGUgdG8gYSBQdW1wU3RyZWFtJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzUmVhZGFibGUoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkKCRsZW5ndGgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkZGF0YSA9ICR0aGlzLT5idWZmZXItPnJlYWQoJGxlbmd0aCk7CiAgICAgICAgJHJlYWRMZW4gPSBzdHJsZW4oJGRhdGEpOwogICAgICAgICR0aGlzLT50ZWxsUG9zICs9ICRyZWFkTGVuOwogICAgICAgICRyZW1haW5pbmcgPSAkbGVuZ3RoIC0gJHJlYWRMZW47CgogICAgICAgIGlmICgkcmVtYWluaW5nKSB7CiAgICAgICAgICAgICR0aGlzLT5wdW1wKCRyZW1haW5pbmcpOwogICAgICAgICAgICAkZGF0YSAuPSAkdGhpcy0+YnVmZmVyLT5yZWFkKCRyZW1haW5pbmcpOwogICAgICAgICAgICAkdGhpcy0+dGVsbFBvcyArPSBzdHJsZW4oJGRhdGEpIC0gJHJlYWRMZW47CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGRhdGE7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnRzKCk6IHN0cmluZwogICAgewogICAgICAgICRyZXN1bHQgPSAnJzsKICAgICAgICB3aGlsZSAoISR0aGlzLT5lb2YoKSkgewogICAgICAgICAgICAkcmVzdWx0IC49ICR0aGlzLT5yZWFkKDEwMDAwMDApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNZXRhZGF0YSgka2V5ID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoISRrZXkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5tZXRhZGF0YTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+bWV0YWRhdGFbJGtleV0gPz8gbnVsbDsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHB1bXAoaW50ICRsZW5ndGgpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5zb3VyY2UgIT09IG51bGwpIHsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgJGRhdGEgPSAoJHRoaXMtPnNvdXJjZSkoJGxlbmd0aCk7CiAgICAgICAgICAgICAgICBpZiAoJGRhdGEgPT09IGZhbHNlIHx8ICRkYXRhID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnNvdXJjZSA9IG51bGw7CgogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICR0aGlzLT5idWZmZXItPndyaXRlKCRkYXRhKTsKICAgICAgICAgICAgICAgICRsZW5ndGggLT0gc3RybGVuKCRkYXRhKTsKICAgICAgICAgICAgfSB3aGlsZSAoJGxlbmd0aCA+IDApOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/Query.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCmZpbmFsIGNsYXNzIFF1ZXJ5CnsKICAgIC8qKgogICAgICogUGFyc2UgYSBxdWVyeSBzdHJpbmcgaW50byBhbiBhc3NvY2lhdGl2ZSBhcnJheS4KICAgICAqCiAgICAgKiBJZiBtdWx0aXBsZSB2YWx1ZXMgYXJlIGZvdW5kIGZvciB0aGUgc2FtZSBrZXksIHRoZSB2YWx1ZSBvZiB0aGF0IGtleQogICAgICogdmFsdWUgcGFpciB3aWxsIGJlY29tZSBhbiBhcnJheS4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBwYXJzZSBuZXN0ZWQKICAgICAqIFBIUCBzdHlsZSBhcnJheXMgaW50byBhbiBhc3NvY2lhdGl2ZSBhcnJheSAoZS5nLiwgYGZvb1thXT0xJmZvb1tiXT0yYAogICAgICogd2lsbCBiZSBwYXJzZWQgaW50byBgWydmb29bYV0nID0+ICcxJywgJ2Zvb1tiXScgPT4gJzInXSlgLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAkc3RyICAgICAgICAgUXVlcnkgc3RyaW5nIHRvIHBhcnNlCiAgICAgKiBAcGFyYW0gaW50fGJvb2wgJHVybEVuY29kaW5nIEhvdyB0aGUgcXVlcnkgc3RyaW5nIGlzIGVuY29kZWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZShzdHJpbmcgJHN0ciwgJHVybEVuY29kaW5nID0gdHJ1ZSk6IGFycmF5CiAgICB7CiAgICAgICAgJHJlc3VsdCA9IFtdOwoKICAgICAgICBpZiAoJHN0ciA9PT0gJycpIHsKICAgICAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHVybEVuY29kaW5nID09PSB0cnVlKSB7CiAgICAgICAgICAgICRkZWNvZGVyID0gZnVuY3Rpb24gKCR2YWx1ZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHJhd3VybGRlY29kZShzdHJfcmVwbGFjZSgnKycsICcgJywgKHN0cmluZykgJHZhbHVlKSk7CiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlaWYgKCR1cmxFbmNvZGluZyA9PT0gUEhQX1FVRVJZX1JGQzM5ODYpIHsKICAgICAgICAgICAgJGRlY29kZXIgPSAncmF3dXJsZGVjb2RlJzsKICAgICAgICB9IGVsc2VpZiAoJHVybEVuY29kaW5nID09PSBQSFBfUVVFUllfUkZDMTczOCkgewogICAgICAgICAgICAkZGVjb2RlciA9ICd1cmxkZWNvZGUnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRkZWNvZGVyID0gZnVuY3Rpb24gKCRzdHIpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkc3RyOwogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoZXhwbG9kZSgnJicsICRzdHIpIGFzICRrdnApIHsKICAgICAgICAgICAgJHBhcnRzID0gZXhwbG9kZSgnPScsICRrdnAsIDIpOwogICAgICAgICAgICAka2V5ID0gJGRlY29kZXIoJHBhcnRzWzBdKTsKICAgICAgICAgICAgJHZhbHVlID0gaXNzZXQoJHBhcnRzWzFdKSA/ICRkZWNvZGVyKCRwYXJ0c1sxXSkgOiBudWxsOwogICAgICAgICAgICBpZiAoIWFycmF5X2tleV9leGlzdHMoJGtleSwgJHJlc3VsdCkpIHsKICAgICAgICAgICAgICAgICRyZXN1bHRbJGtleV0gPSAkdmFsdWU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoIWlzX2FycmF5KCRyZXN1bHRbJGtleV0pKSB7CiAgICAgICAgICAgICAgICAgICAgJHJlc3VsdFska2V5XSA9IFskcmVzdWx0WyRrZXldXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRyZXN1bHRbJGtleV1bXSA9ICR2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBCdWlsZCBhIHF1ZXJ5IHN0cmluZyBmcm9tIGFuIGFycmF5IG9mIGtleSB2YWx1ZSBwYWlycy4KICAgICAqCiAgICAgKiBUaGlzIGZ1bmN0aW9uIGNhbiB1c2UgdGhlIHJldHVybiB2YWx1ZSBvZiBgcGFyc2UoKWAgdG8gYnVpbGQgYSBxdWVyeQogICAgICogc3RyaW5nLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IG1vZGlmeSB0aGUgcHJvdmlkZWQga2V5cyB3aGVuIGFuIGFycmF5IGlzCiAgICAgKiBlbmNvdW50ZXJlZCAobGlrZSBgaHR0cF9idWlsZF9xdWVyeSgpYCB3b3VsZCkuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICAgICAkcGFyYW1zICAgICAgICAgICBRdWVyeSBzdHJpbmcgcGFyYW1ldGVycy4KICAgICAqIEBwYXJhbSBpbnR8ZmFsc2UgJGVuY29kaW5nICAgICAgICAgU2V0IHRvIGZhbHNlIHRvIG5vdCBlbmNvZGUsCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBIUF9RVUVSWV9SRkMzOTg2IHRvIGVuY29kZSB1c2luZwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRkMzOTg2LCBvciBQSFBfUVVFUllfUkZDMTczOCB0bwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGUgdXNpbmcgUkZDMTczOC4KICAgICAqIEBwYXJhbSBib29sICAgICAgJHRyZWF0Qm9vbHNBc0ludHMgU2V0IHRvIHRydWUgdG8gZW5jb2RlIGFzIDAvMSwgYW5kCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIGFzIGZhbHNlL3RydWUuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYnVpbGQoYXJyYXkgJHBhcmFtcywgJGVuY29kaW5nID0gUEhQX1FVRVJZX1JGQzM5ODYsIGJvb2wgJHRyZWF0Qm9vbHNBc0ludHMgPSB0cnVlKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCEkcGFyYW1zKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CgogICAgICAgIGlmICgkZW5jb2RpbmcgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICRlbmNvZGVyID0gZnVuY3Rpb24gKHN0cmluZyAkc3RyKTogc3RyaW5nIHsKICAgICAgICAgICAgICAgIHJldHVybiAkc3RyOwogICAgICAgICAgICB9OwogICAgICAgIH0gZWxzZWlmICgkZW5jb2RpbmcgPT09IFBIUF9RVUVSWV9SRkMzOTg2KSB7CiAgICAgICAgICAgICRlbmNvZGVyID0gJ3Jhd3VybGVuY29kZSc7CiAgICAgICAgfSBlbHNlaWYgKCRlbmNvZGluZyA9PT0gUEhQX1FVRVJZX1JGQzE3MzgpIHsKICAgICAgICAgICAgJGVuY29kZXIgPSAndXJsZW5jb2RlJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCB0eXBlJyk7CiAgICAgICAgfQoKICAgICAgICAkY2FzdEJvb2wgPSAkdHJlYXRCb29sc0FzSW50cyA/IHN0YXRpYyBmdW5jdGlvbiAoJHYpIHsgcmV0dXJuIChpbnQpICR2OyB9IDogc3RhdGljIGZ1bmN0aW9uICgkdikgeyByZXR1cm4gJHYgPyAndHJ1ZScgOiAnZmFsc2UnOyB9OwoKICAgICAgICAkcXMgPSAnJzsKICAgICAgICBmb3JlYWNoICgkcGFyYW1zIGFzICRrID0+ICR2KSB7CiAgICAgICAgICAgICRrID0gJGVuY29kZXIoKHN0cmluZykgJGspOwogICAgICAgICAgICBpZiAoIWlzX2FycmF5KCR2KSkgewogICAgICAgICAgICAgICAgJHFzIC49ICRrOwogICAgICAgICAgICAgICAgJHYgPSBpc19ib29sKCR2KSA/ICRjYXN0Qm9vbCgkdikgOiAkdjsKICAgICAgICAgICAgICAgIGlmICgkdiAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICRxcyAuPSAnPScuJGVuY29kZXIoKHN0cmluZykgJHYpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHFzIC49ICcmJzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR2IGFzICR2dikgewogICAgICAgICAgICAgICAgICAgICRxcyAuPSAkazsKICAgICAgICAgICAgICAgICAgICAkdnYgPSBpc19ib29sKCR2dikgPyAkY2FzdEJvb2woJHZ2KSA6ICR2djsKICAgICAgICAgICAgICAgICAgICBpZiAoJHZ2ICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRxcyAuPSAnPScuJGVuY29kZXIoKHN0cmluZykgJHZ2KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHFzIC49ICcmJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRxcyA/IChzdHJpbmcpIHN1YnN0cigkcXMsIDAsIC0xKSA6ICcnOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/Request.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlOwoKLyoqCiAqIFBTUi03IHJlcXVlc3QgaW1wbGVtZW50YXRpb24uCiAqLwpjbGFzcyBSZXF1ZXN0IGltcGxlbWVudHMgUmVxdWVzdEludGVyZmFjZQp7CiAgICB1c2UgTWVzc2FnZVRyYWl0OwoKICAgIC8qKiBAdmFyIHN0cmluZyAqLwogICAgcHJpdmF0ZSAkbWV0aG9kOwoKICAgIC8qKiBAdmFyIHN0cmluZ3xudWxsICovCiAgICBwcml2YXRlICRyZXF1ZXN0VGFyZ2V0OwoKICAgIC8qKiBAdmFyIFVyaUludGVyZmFjZSAqLwogICAgcHJpdmF0ZSAkdXJpOwoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWV0aG9kICBIVFRQIG1ldGhvZAogICAgICogQHBhcmFtIHN0cmluZ3xVcmlJbnRlcmZhY2UgICAgICAgICAgICAgICAgICAkdXJpICAgICBVUkkKICAgICAqIEBwYXJhbSAoc3RyaW5nfHN0cmluZ1tdKVtdICAgICAgICAgICAgICAgICAgJGhlYWRlcnMgUmVxdWVzdCBoZWFkZXJzCiAgICAgKiBAcGFyYW0gc3RyaW5nfHJlc291cmNlfFN0cmVhbUludGVyZmFjZXxudWxsICRib2R5ICAgIFJlcXVlc3QgYm9keQogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdmVyc2lvbiBQcm90b2NvbCB2ZXJzaW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBzdHJpbmcgJG1ldGhvZCwKICAgICAgICAkdXJpLAogICAgICAgIGFycmF5ICRoZWFkZXJzID0gW10sCiAgICAgICAgJGJvZHkgPSBudWxsLAogICAgICAgIHN0cmluZyAkdmVyc2lvbiA9ICcxLjEnCiAgICApIHsKICAgICAgICAkdGhpcy0+YXNzZXJ0TWV0aG9kKCRtZXRob2QpOwogICAgICAgIGlmICghJHVyaSBpbnN0YW5jZW9mIFVyaUludGVyZmFjZSkgewogICAgICAgICAgICAkdXJpID0gbmV3IFVyaSgkdXJpKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5tZXRob2QgPSBzdHJ0b3VwcGVyKCRtZXRob2QpOwogICAgICAgICR0aGlzLT51cmkgPSAkdXJpOwogICAgICAgICR0aGlzLT5zZXRIZWFkZXJzKCRoZWFkZXJzKTsKICAgICAgICAkdGhpcy0+cHJvdG9jb2wgPSAkdmVyc2lvbjsKCiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+aGVhZGVyTmFtZXNbJ2hvc3QnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPnVwZGF0ZUhvc3RGcm9tVXJpKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGJvZHkgIT09ICcnICYmICRib2R5ICE9PSBudWxsKSB7CiAgICAgICAgICAgICR0aGlzLT5zdHJlYW0gPSBVdGlsczo6c3RyZWFtRm9yKCRib2R5KTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlcXVlc3RUYXJnZXQoKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5yZXF1ZXN0VGFyZ2V0ICE9PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVxdWVzdFRhcmdldDsKICAgICAgICB9CgogICAgICAgICR0YXJnZXQgPSAkdGhpcy0+dXJpLT5nZXRQYXRoKCk7CiAgICAgICAgaWYgKCR0YXJnZXQgPT09ICcnKSB7CiAgICAgICAgICAgICR0YXJnZXQgPSAnLyc7CiAgICAgICAgfQogICAgICAgIGlmICgkdGhpcy0+dXJpLT5nZXRRdWVyeSgpICE9ICcnKSB7CiAgICAgICAgICAgICR0YXJnZXQgLj0gJz8nLiR0aGlzLT51cmktPmdldFF1ZXJ5KCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRhcmdldDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFJlcXVlc3RUYXJnZXQoJHJlcXVlc3RUYXJnZXQpOiBSZXF1ZXN0SW50ZXJmYWNlCiAgICB7CiAgICAgICAgaWYgKHByZWdfbWF0Y2goJyNccyMnLCAkcmVxdWVzdFRhcmdldCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdJbnZhbGlkIHJlcXVlc3QgdGFyZ2V0IHByb3ZpZGVkOyBjYW5ub3QgY29udGFpbiB3aGl0ZXNwYWNlJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgICRuZXctPnJlcXVlc3RUYXJnZXQgPSAkcmVxdWVzdFRhcmdldDsKCiAgICAgICAgcmV0dXJuICRuZXc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE1ldGhvZCgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm1ldGhvZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aE1ldGhvZCgkbWV0aG9kKTogUmVxdWVzdEludGVyZmFjZQogICAgewogICAgICAgICR0aGlzLT5hc3NlcnRNZXRob2QoJG1ldGhvZCk7CiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgICRuZXctPm1ldGhvZCA9IHN0cnRvdXBwZXIoJG1ldGhvZCk7CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVcmkoKTogVXJpSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51cmk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhVcmkoVXJpSW50ZXJmYWNlICR1cmksICRwcmVzZXJ2ZUhvc3QgPSBmYWxzZSk6IFJlcXVlc3RJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoJHVyaSA9PT0gJHRoaXMtPnVyaSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+dXJpID0gJHVyaTsKCiAgICAgICAgaWYgKCEkcHJlc2VydmVIb3N0IHx8ICFpc3NldCgkdGhpcy0+aGVhZGVyTmFtZXNbJ2hvc3QnXSkpIHsKICAgICAgICAgICAgJG5ldy0+dXBkYXRlSG9zdEZyb21VcmkoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gdXBkYXRlSG9zdEZyb21VcmkoKTogdm9pZAogICAgewogICAgICAgICRob3N0ID0gJHRoaXMtPnVyaS0+Z2V0SG9zdCgpOwoKICAgICAgICBpZiAoJGhvc3QgPT0gJycpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKCgkcG9ydCA9ICR0aGlzLT51cmktPmdldFBvcnQoKSkgIT09IG51bGwpIHsKICAgICAgICAgICAgJGhvc3QgLj0gJzonLiRwb3J0OwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5oZWFkZXJOYW1lc1snaG9zdCddKSkgewogICAgICAgICAgICAkaGVhZGVyID0gJHRoaXMtPmhlYWRlck5hbWVzWydob3N0J107CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGhlYWRlciA9ICdIb3N0JzsKICAgICAgICAgICAgJHRoaXMtPmhlYWRlck5hbWVzWydob3N0J10gPSAnSG9zdCc7CiAgICAgICAgfQogICAgICAgIC8vIEVuc3VyZSBIb3N0IGlzIHRoZSBmaXJzdCBoZWFkZXIuCiAgICAgICAgLy8gU2VlOiBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzcyMzAjc2VjdGlvbi01LjQKICAgICAgICAkdGhpcy0+aGVhZGVycyA9IFskaGVhZGVyID0+IFskaG9zdF1dICsgJHRoaXMtPmhlYWRlcnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG1ldGhvZAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFzc2VydE1ldGhvZCgkbWV0aG9kKTogdm9pZAogICAgewogICAgICAgIGlmICghaXNfc3RyaW5nKCRtZXRob2QpIHx8ICRtZXRob2QgPT09ICcnKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ01ldGhvZCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy4nKTsKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/Response.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxTdHJlYW1JbnRlcmZhY2U7CgovKioKICogUFNSLTcgcmVzcG9uc2UgaW1wbGVtZW50YXRpb24uCiAqLwpjbGFzcyBSZXNwb25zZSBpbXBsZW1lbnRzIFJlc3BvbnNlSW50ZXJmYWNlCnsKICAgIHVzZSBNZXNzYWdlVHJhaXQ7CgogICAgLyoqIE1hcCBvZiBzdGFuZGFyZCBIVFRQIHN0YXR1cyBjb2RlL3JlYXNvbiBwaHJhc2VzICovCiAgICBwcml2YXRlIGNvbnN0IFBIUkFTRVMgPSBbCiAgICAgICAgMTAwID0+ICdDb250aW51ZScsCiAgICAgICAgMTAxID0+ICdTd2l0Y2hpbmcgUHJvdG9jb2xzJywKICAgICAgICAxMDIgPT4gJ1Byb2Nlc3NpbmcnLAogICAgICAgIDIwMCA9PiAnT0snLAogICAgICAgIDIwMSA9PiAnQ3JlYXRlZCcsCiAgICAgICAgMjAyID0+ICdBY2NlcHRlZCcsCiAgICAgICAgMjAzID0+ICdOb24tQXV0aG9yaXRhdGl2ZSBJbmZvcm1hdGlvbicsCiAgICAgICAgMjA0ID0+ICdObyBDb250ZW50JywKICAgICAgICAyMDUgPT4gJ1Jlc2V0IENvbnRlbnQnLAogICAgICAgIDIwNiA9PiAnUGFydGlhbCBDb250ZW50JywKICAgICAgICAyMDcgPT4gJ011bHRpLXN0YXR1cycsCiAgICAgICAgMjA4ID0+ICdBbHJlYWR5IFJlcG9ydGVkJywKICAgICAgICAzMDAgPT4gJ011bHRpcGxlIENob2ljZXMnLAogICAgICAgIDMwMSA9PiAnTW92ZWQgUGVybWFuZW50bHknLAogICAgICAgIDMwMiA9PiAnRm91bmQnLAogICAgICAgIDMwMyA9PiAnU2VlIE90aGVyJywKICAgICAgICAzMDQgPT4gJ05vdCBNb2RpZmllZCcsCiAgICAgICAgMzA1ID0+ICdVc2UgUHJveHknLAogICAgICAgIDMwNiA9PiAnU3dpdGNoIFByb3h5JywKICAgICAgICAzMDcgPT4gJ1RlbXBvcmFyeSBSZWRpcmVjdCcsCiAgICAgICAgMzA4ID0+ICdQZXJtYW5lbnQgUmVkaXJlY3QnLAogICAgICAgIDQwMCA9PiAnQmFkIFJlcXVlc3QnLAogICAgICAgIDQwMSA9PiAnVW5hdXRob3JpemVkJywKICAgICAgICA0MDIgPT4gJ1BheW1lbnQgUmVxdWlyZWQnLAogICAgICAgIDQwMyA9PiAnRm9yYmlkZGVuJywKICAgICAgICA0MDQgPT4gJ05vdCBGb3VuZCcsCiAgICAgICAgNDA1ID0+ICdNZXRob2QgTm90IEFsbG93ZWQnLAogICAgICAgIDQwNiA9PiAnTm90IEFjY2VwdGFibGUnLAogICAgICAgIDQwNyA9PiAnUHJveHkgQXV0aGVudGljYXRpb24gUmVxdWlyZWQnLAogICAgICAgIDQwOCA9PiAnUmVxdWVzdCBUaW1lLW91dCcsCiAgICAgICAgNDA5ID0+ICdDb25mbGljdCcsCiAgICAgICAgNDEwID0+ICdHb25lJywKICAgICAgICA0MTEgPT4gJ0xlbmd0aCBSZXF1aXJlZCcsCiAgICAgICAgNDEyID0+ICdQcmVjb25kaXRpb24gRmFpbGVkJywKICAgICAgICA0MTMgPT4gJ1JlcXVlc3QgRW50aXR5IFRvbyBMYXJnZScsCiAgICAgICAgNDE0ID0+ICdSZXF1ZXN0LVVSSSBUb28gTGFyZ2UnLAogICAgICAgIDQxNSA9PiAnVW5zdXBwb3J0ZWQgTWVkaWEgVHlwZScsCiAgICAgICAgNDE2ID0+ICdSZXF1ZXN0ZWQgcmFuZ2Ugbm90IHNhdGlzZmlhYmxlJywKICAgICAgICA0MTcgPT4gJ0V4cGVjdGF0aW9uIEZhaWxlZCcsCiAgICAgICAgNDE4ID0+ICdJXCdtIGEgdGVhcG90JywKICAgICAgICA0MjIgPT4gJ1VucHJvY2Vzc2FibGUgRW50aXR5JywKICAgICAgICA0MjMgPT4gJ0xvY2tlZCcsCiAgICAgICAgNDI0ID0+ICdGYWlsZWQgRGVwZW5kZW5jeScsCiAgICAgICAgNDI1ID0+ICdVbm9yZGVyZWQgQ29sbGVjdGlvbicsCiAgICAgICAgNDI2ID0+ICdVcGdyYWRlIFJlcXVpcmVkJywKICAgICAgICA0MjggPT4gJ1ByZWNvbmRpdGlvbiBSZXF1aXJlZCcsCiAgICAgICAgNDI5ID0+ICdUb28gTWFueSBSZXF1ZXN0cycsCiAgICAgICAgNDMxID0+ICdSZXF1ZXN0IEhlYWRlciBGaWVsZHMgVG9vIExhcmdlJywKICAgICAgICA0NTEgPT4gJ1VuYXZhaWxhYmxlIEZvciBMZWdhbCBSZWFzb25zJywKICAgICAgICA1MDAgPT4gJ0ludGVybmFsIFNlcnZlciBFcnJvcicsCiAgICAgICAgNTAxID0+ICdOb3QgSW1wbGVtZW50ZWQnLAogICAgICAgIDUwMiA9PiAnQmFkIEdhdGV3YXknLAogICAgICAgIDUwMyA9PiAnU2VydmljZSBVbmF2YWlsYWJsZScsCiAgICAgICAgNTA0ID0+ICdHYXRld2F5IFRpbWUtb3V0JywKICAgICAgICA1MDUgPT4gJ0hUVFAgVmVyc2lvbiBub3Qgc3VwcG9ydGVkJywKICAgICAgICA1MDYgPT4gJ1ZhcmlhbnQgQWxzbyBOZWdvdGlhdGVzJywKICAgICAgICA1MDcgPT4gJ0luc3VmZmljaWVudCBTdG9yYWdlJywKICAgICAgICA1MDggPT4gJ0xvb3AgRGV0ZWN0ZWQnLAogICAgICAgIDUxMCA9PiAnTm90IEV4dGVuZGVkJywKICAgICAgICA1MTEgPT4gJ05ldHdvcmsgQXV0aGVudGljYXRpb24gUmVxdWlyZWQnLAogICAgXTsKCiAgICAvKiogQHZhciBzdHJpbmcgKi8KICAgIHByaXZhdGUgJHJlYXNvblBocmFzZTsKCiAgICAvKiogQHZhciBpbnQgKi8KICAgIHByaXZhdGUgJHN0YXR1c0NvZGU7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdGF0dXMgIFN0YXR1cyBjb2RlCiAgICAgKiBAcGFyYW0gKHN0cmluZ3xzdHJpbmdbXSlbXSAgICAgICAgICAgICAgICAgICRoZWFkZXJzIFJlc3BvbnNlIGhlYWRlcnMKICAgICAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2V8U3RyZWFtSW50ZXJmYWNlfG51bGwgJGJvZHkgICAgUmVzcG9uc2UgYm9keQogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdmVyc2lvbiBQcm90b2NvbCB2ZXJzaW9uCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgICAgICAgICAgICAgICAgICAgICAgICAgICRyZWFzb24gIFJlYXNvbiBwaHJhc2UgKHdoZW4gZW1wdHkgYSBkZWZhdWx0IHdpbGwgYmUgdXNlZCBiYXNlZCBvbiB0aGUgc3RhdHVzIGNvZGUpCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBpbnQgJHN0YXR1cyA9IDIwMCwKICAgICAgICBhcnJheSAkaGVhZGVycyA9IFtdLAogICAgICAgICRib2R5ID0gbnVsbCwKICAgICAgICBzdHJpbmcgJHZlcnNpb24gPSAnMS4xJywKICAgICAgICA/c3RyaW5nICRyZWFzb24gPSBudWxsCiAgICApIHsKICAgICAgICAkdGhpcy0+YXNzZXJ0U3RhdHVzQ29kZVJhbmdlKCRzdGF0dXMpOwoKICAgICAgICAkdGhpcy0+c3RhdHVzQ29kZSA9ICRzdGF0dXM7CgogICAgICAgIGlmICgkYm9keSAhPT0gJycgJiYgJGJvZHkgIT09IG51bGwpIHsKICAgICAgICAgICAgJHRoaXMtPnN0cmVhbSA9IFV0aWxzOjpzdHJlYW1Gb3IoJGJvZHkpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnNldEhlYWRlcnMoJGhlYWRlcnMpOwogICAgICAgIGlmICgkcmVhc29uID09ICcnICYmIGlzc2V0KHNlbGY6OlBIUkFTRVNbJHRoaXMtPnN0YXR1c0NvZGVdKSkgewogICAgICAgICAgICAkdGhpcy0+cmVhc29uUGhyYXNlID0gc2VsZjo6UEhSQVNFU1skdGhpcy0+c3RhdHVzQ29kZV07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPnJlYXNvblBocmFzZSA9IChzdHJpbmcpICRyZWFzb247CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+cHJvdG9jb2wgPSAkdmVyc2lvbjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3RhdHVzQ29kZSgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0YXR1c0NvZGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlYXNvblBocmFzZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlYXNvblBocmFzZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFN0YXR1cygkY29kZSwgJHJlYXNvblBocmFzZSA9ICcnKTogUmVzcG9uc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICAkdGhpcy0+YXNzZXJ0U3RhdHVzQ29kZUlzSW50ZWdlcigkY29kZSk7CiAgICAgICAgJGNvZGUgPSAoaW50KSAkY29kZTsKICAgICAgICAkdGhpcy0+YXNzZXJ0U3RhdHVzQ29kZVJhbmdlKCRjb2RlKTsKCiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgICRuZXctPnN0YXR1c0NvZGUgPSAkY29kZTsKICAgICAgICBpZiAoJHJlYXNvblBocmFzZSA9PSAnJyAmJiBpc3NldChzZWxmOjpQSFJBU0VTWyRuZXctPnN0YXR1c0NvZGVdKSkgewogICAgICAgICAgICAkcmVhc29uUGhyYXNlID0gc2VsZjo6UEhSQVNFU1skbmV3LT5zdGF0dXNDb2RlXTsKICAgICAgICB9CiAgICAgICAgJG5ldy0+cmVhc29uUGhyYXNlID0gKHN0cmluZykgJHJlYXNvblBocmFzZTsKCiAgICAgICAgcmV0dXJuICRuZXc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHN0YXR1c0NvZGUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBhc3NlcnRTdGF0dXNDb2RlSXNJbnRlZ2VyKCRzdGF0dXNDb2RlKTogdm9pZAogICAgewogICAgICAgIGlmIChmaWx0ZXJfdmFyKCRzdGF0dXNDb2RlLCBGSUxURVJfVkFMSURBVEVfSU5UKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1N0YXR1cyBjb2RlIG11c3QgYmUgYW4gaW50ZWdlciB2YWx1ZS4nKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBhc3NlcnRTdGF0dXNDb2RlUmFuZ2UoaW50ICRzdGF0dXNDb2RlKTogdm9pZAogICAgewogICAgICAgIGlmICgkc3RhdHVzQ29kZSA8IDEwMCB8fCAkc3RhdHVzQ29kZSA+PSA2MDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1N0YXR1cyBjb2RlIG11c3QgYmUgYW4gaW50ZWdlciB2YWx1ZSBiZXR3ZWVuIDF4eCBhbmQgNXh4LicpOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/Rfc7230.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCi8qKgogKiBAaW50ZXJuYWwKICovCmZpbmFsIGNsYXNzIFJmYzcyMzAKewogICAgLyoqCiAgICAgKiBIZWFkZXIgcmVsYXRlZCByZWd1bGFyIGV4cHJlc3Npb25zIChiYXNlZCBvbiBhbXBocC9odHRwIHBhY2thZ2UpCiAgICAgKgogICAgICogTm90ZTogaGVhZGVyIGRlbGltaXRlciAoXHJcbikgaXMgbW9kaWZpZWQgdG8gXHI/XG4gdG8gYWNjZXB0IGxpbmUgZmVlZCBvbmx5IGRlbGltaXRlcnMgZm9yIEJDIHJlYXNvbnMuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYW1waHAvaHR0cC9ibG9iL3YxLjAuMS9zcmMvUmZjNzIzMC5waHAjTDEyLUwxNQogICAgICoKICAgICAqIEBsaWNlbnNlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbXBocC9odHRwL2Jsb2IvdjEuMC4xL0xJQ0VOU0UKICAgICAqLwogICAgcHVibGljIGNvbnN0IEhFQURFUl9SRUdFWCA9ICIoXihbXigpPD5ALDs6XFxcIi9bXF0/PXt9XHgwMS1ceDIwXHg3Rl0rKyk6WyBcdF0qKygoPzpbIFx0XSorW1x4MjEtXHg3RVx4ODAtXHhGRl0rKykqKylbIFx0XSorXHI/XG4pbSI7CiAgICBwdWJsaWMgY29uc3QgSEVBREVSX0ZPTERfUkVHRVggPSAiKFxyP1xuWyBcdF0rKykiOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/ServerRequest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFNlcnZlclJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXBsb2FkZWRGaWxlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2U7CgovKioKICogU2VydmVyLXNpZGUgSFRUUCByZXF1ZXN0CiAqCiAqIEV4dGVuZHMgdGhlIFJlcXVlc3QgZGVmaW5pdGlvbiB0byBhZGQgbWV0aG9kcyBmb3IgYWNjZXNzaW5nIGluY29taW5nIGRhdGEsCiAqIHNwZWNpZmljYWxseSBzZXJ2ZXIgcGFyYW1ldGVycywgY29va2llcywgbWF0Y2hlZCBwYXRoIHBhcmFtZXRlcnMsIHF1ZXJ5CiAqIHN0cmluZyBhcmd1bWVudHMsIGJvZHkgcGFyYW1ldGVycywgYW5kIHVwbG9hZCBmaWxlIGluZm9ybWF0aW9uLgogKgogKiAiQXR0cmlidXRlcyIgYXJlIGRpc2NvdmVyZWQgdmlhIGRlY29tcG9zaW5nIHRoZSByZXF1ZXN0IChhbmQgdXN1YWxseQogKiBzcGVjaWZpY2FsbHkgdGhlIFVSSSBwYXRoKSwgYW5kIHR5cGljYWxseSB3aWxsIGJlIGluamVjdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KICoKICogUmVxdWVzdHMgYXJlIGNvbnNpZGVyZWQgaW1tdXRhYmxlOyBhbGwgbWV0aG9kcyB0aGF0IG1pZ2h0IGNoYW5nZSBzdGF0ZSBhcmUKICogaW1wbGVtZW50ZWQgc3VjaCB0aGF0IHRoZXkgcmV0YWluIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgY3VycmVudAogKiBtZXNzYWdlIGFuZCByZXR1cm4gYSBuZXcgaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgY2hhbmdlZCBzdGF0ZS4KICovCmNsYXNzIFNlcnZlclJlcXVlc3QgZXh0ZW5kcyBSZXF1ZXN0IGltcGxlbWVudHMgU2VydmVyUmVxdWVzdEludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSAkYXR0cmlidXRlcyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICRjb29raWVQYXJhbXMgPSBbXTsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXl8b2JqZWN0fG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkcGFyc2VkQm9keTsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSAkcXVlcnlQYXJhbXMgPSBbXTsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSAkc2VydmVyUGFyYW1zOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICR1cGxvYWRlZEZpbGVzID0gW107CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtZXRob2QgICAgICAgSFRUUCBtZXRob2QKICAgICAqIEBwYXJhbSBzdHJpbmd8VXJpSW50ZXJmYWNlICAgICAgICAgICAgICAgICAgJHVyaSAgICAgICAgICBVUkkKICAgICAqIEBwYXJhbSAoc3RyaW5nfHN0cmluZ1tdKVtdICAgICAgICAgICAgICAgICAgJGhlYWRlcnMgICAgICBSZXF1ZXN0IGhlYWRlcnMKICAgICAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2V8U3RyZWFtSW50ZXJmYWNlfG51bGwgJGJvZHkgICAgICAgICBSZXF1ZXN0IGJvZHkKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZlcnNpb24gICAgICBQcm90b2NvbCB2ZXJzaW9uCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZXJ2ZXJQYXJhbXMgVHlwaWNhbGx5IHRoZSAkX1NFUlZFUiBzdXBlcmdsb2JhbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgc3RyaW5nICRtZXRob2QsCiAgICAgICAgJHVyaSwKICAgICAgICBhcnJheSAkaGVhZGVycyA9IFtdLAogICAgICAgICRib2R5ID0gbnVsbCwKICAgICAgICBzdHJpbmcgJHZlcnNpb24gPSAnMS4xJywKICAgICAgICBhcnJheSAkc2VydmVyUGFyYW1zID0gW10KICAgICkgewogICAgICAgICR0aGlzLT5zZXJ2ZXJQYXJhbXMgPSAkc2VydmVyUGFyYW1zOwoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRtZXRob2QsICR1cmksICRoZWFkZXJzLCAkYm9keSwgJHZlcnNpb24pOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIFVwbG9hZGVkRmlsZSBpbnN0YW5jZSBhcnJheS4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGZpbGVzIEFuIGFycmF5IHdoaWNoIHJlc3BlY3QgJF9GSUxFUyBzdHJ1Y3R1cmUKICAgICAqCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3IgdW5yZWNvZ25pemVkIHZhbHVlcwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5vcm1hbGl6ZUZpbGVzKGFycmF5ICRmaWxlcyk6IGFycmF5CiAgICB7CiAgICAgICAgJG5vcm1hbGl6ZWQgPSBbXTsKCiAgICAgICAgZm9yZWFjaCAoJGZpbGVzIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgIGlmICgkdmFsdWUgaW5zdGFuY2VvZiBVcGxvYWRlZEZpbGVJbnRlcmZhY2UpIHsKICAgICAgICAgICAgICAgICRub3JtYWxpemVkWyRrZXldID0gJHZhbHVlOwogICAgICAgICAgICB9IGVsc2VpZiAoaXNfYXJyYXkoJHZhbHVlKSAmJiBpc3NldCgkdmFsdWVbJ3RtcF9uYW1lJ10pKSB7CiAgICAgICAgICAgICAgICAkbm9ybWFsaXplZFska2V5XSA9IHNlbGY6OmNyZWF0ZVVwbG9hZGVkRmlsZUZyb21TcGVjKCR2YWx1ZSk7CiAgICAgICAgICAgIH0gZWxzZWlmIChpc19hcnJheSgkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAkbm9ybWFsaXplZFska2V5XSA9IHNlbGY6Om5vcm1hbGl6ZUZpbGVzKCR2YWx1ZSk7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgdmFsdWUgaW4gZmlsZXMgc3BlY2lmaWNhdGlvbicpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG5vcm1hbGl6ZWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYW5kIHJldHVybiBhbiBVcGxvYWRlZEZpbGUgaW5zdGFuY2UgZnJvbSBhICRfRklMRVMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBJZiB0aGUgc3BlY2lmaWNhdGlvbiByZXByZXNlbnRzIGFuIGFycmF5IG9mIHZhbHVlcywgdGhpcyBtZXRob2Qgd2lsbAogICAgICogZGVsZWdhdGUgdG8gbm9ybWFsaXplTmVzdGVkRmlsZVNwZWMoKSBhbmQgcmV0dXJuIHRoYXQgcmV0dXJuIHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkdmFsdWUgJF9GSUxFUyBzdHJ1Y3QKICAgICAqCiAgICAgKiBAcmV0dXJuIFVwbG9hZGVkRmlsZUludGVyZmFjZXxVcGxvYWRlZEZpbGVJbnRlcmZhY2VbXQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVVcGxvYWRlZEZpbGVGcm9tU3BlYyhhcnJheSAkdmFsdWUpCiAgICB7CiAgICAgICAgaWYgKGlzX2FycmF5KCR2YWx1ZVsndG1wX25hbWUnXSkpIHsKICAgICAgICAgICAgcmV0dXJuIHNlbGY6Om5vcm1hbGl6ZU5lc3RlZEZpbGVTcGVjKCR2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IFVwbG9hZGVkRmlsZSgKICAgICAgICAgICAgJHZhbHVlWyd0bXBfbmFtZSddLAogICAgICAgICAgICAoaW50KSAkdmFsdWVbJ3NpemUnXSwKICAgICAgICAgICAgKGludCkgJHZhbHVlWydlcnJvciddLAogICAgICAgICAgICAkdmFsdWVbJ25hbWUnXSwKICAgICAgICAgICAgJHZhbHVlWyd0eXBlJ10KICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogTm9ybWFsaXplIGFuIGFycmF5IG9mIGZpbGUgc3BlY2lmaWNhdGlvbnMuCiAgICAgKgogICAgICogTG9vcHMgdGhyb3VnaCBhbGwgbmVzdGVkIGZpbGVzIGFuZCByZXR1cm5zIGEgbm9ybWFsaXplZCBhcnJheSBvZgogICAgICogVXBsb2FkZWRGaWxlSW50ZXJmYWNlIGluc3RhbmNlcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIFVwbG9hZGVkRmlsZUludGVyZmFjZVtdCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIG5vcm1hbGl6ZU5lc3RlZEZpbGVTcGVjKGFycmF5ICRmaWxlcyA9IFtdKTogYXJyYXkKICAgIHsKICAgICAgICAkbm9ybWFsaXplZEZpbGVzID0gW107CgogICAgICAgIGZvcmVhY2ggKGFycmF5X2tleXMoJGZpbGVzWyd0bXBfbmFtZSddKSBhcyAka2V5KSB7CiAgICAgICAgICAgICRzcGVjID0gWwogICAgICAgICAgICAgICAgJ3RtcF9uYW1lJyA9PiAkZmlsZXNbJ3RtcF9uYW1lJ11bJGtleV0sCiAgICAgICAgICAgICAgICAnc2l6ZScgPT4gJGZpbGVzWydzaXplJ11bJGtleV0gPz8gbnVsbCwKICAgICAgICAgICAgICAgICdlcnJvcicgPT4gJGZpbGVzWydlcnJvciddWyRrZXldID8/IG51bGwsCiAgICAgICAgICAgICAgICAnbmFtZScgPT4gJGZpbGVzWyduYW1lJ11bJGtleV0gPz8gbnVsbCwKICAgICAgICAgICAgICAgICd0eXBlJyA9PiAkZmlsZXNbJ3R5cGUnXVska2V5XSA/PyBudWxsLAogICAgICAgICAgICBdOwogICAgICAgICAgICAkbm9ybWFsaXplZEZpbGVzWyRrZXldID0gc2VsZjo6Y3JlYXRlVXBsb2FkZWRGaWxlRnJvbVNwZWMoJHNwZWMpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRub3JtYWxpemVkRmlsZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYSBTZXJ2ZXJSZXF1ZXN0IHBvcHVsYXRlZCB3aXRoIHN1cGVyZ2xvYmFsczoKICAgICAqICRfR0VUCiAgICAgKiAkX1BPU1QKICAgICAqICRfQ09PS0lFCiAgICAgKiAkX0ZJTEVTCiAgICAgKiAkX1NFUlZFUgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21HbG9iYWxzKCk6IFNlcnZlclJlcXVlc3RJbnRlcmZhY2UKICAgIHsKICAgICAgICAkbWV0aG9kID0gJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gPz8gJ0dFVCc7CiAgICAgICAgJGhlYWRlcnMgPSBnZXRhbGxoZWFkZXJzKCk7CiAgICAgICAgJHVyaSA9IHNlbGY6OmdldFVyaUZyb21HbG9iYWxzKCk7CiAgICAgICAgJGJvZHkgPSBuZXcgQ2FjaGluZ1N0cmVhbShuZXcgTGF6eU9wZW5TdHJlYW0oJ3BocDovL2lucHV0JywgJ3IrJykpOwogICAgICAgICRwcm90b2NvbCA9IGlzc2V0KCRfU0VSVkVSWydTRVJWRVJfUFJPVE9DT0wnXSkgPyBzdHJfcmVwbGFjZSgnSFRUUC8nLCAnJywgJF9TRVJWRVJbJ1NFUlZFUl9QUk9UT0NPTCddKSA6ICcxLjEnOwoKICAgICAgICAkc2VydmVyUmVxdWVzdCA9IG5ldyBTZXJ2ZXJSZXF1ZXN0KCRtZXRob2QsICR1cmksICRoZWFkZXJzLCAkYm9keSwgJHByb3RvY29sLCAkX1NFUlZFUik7CgogICAgICAgIHJldHVybiAkc2VydmVyUmVxdWVzdAogICAgICAgICAgICAtPndpdGhDb29raWVQYXJhbXMoJF9DT09LSUUpCiAgICAgICAgICAgIC0+d2l0aFF1ZXJ5UGFyYW1zKCRfR0VUKQogICAgICAgICAgICAtPndpdGhQYXJzZWRCb2R5KCRfUE9TVCkKICAgICAgICAgICAgLT53aXRoVXBsb2FkZWRGaWxlcyhzZWxmOjpub3JtYWxpemVGaWxlcygkX0ZJTEVTKSk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZXh0cmFjdEhvc3RBbmRQb3J0RnJvbUF1dGhvcml0eShzdHJpbmcgJGF1dGhvcml0eSk6IGFycmF5CiAgICB7CiAgICAgICAgJHVyaSA9ICdodHRwOi8vJy4kYXV0aG9yaXR5OwogICAgICAgICRwYXJ0cyA9IHBhcnNlX3VybCgkdXJpKTsKICAgICAgICBpZiAoZmFsc2UgPT09ICRwYXJ0cykgewogICAgICAgICAgICByZXR1cm4gW251bGwsIG51bGxdOwogICAgICAgIH0KCiAgICAgICAgJGhvc3QgPSAkcGFydHNbJ2hvc3QnXSA/PyBudWxsOwogICAgICAgICRwb3J0ID0gJHBhcnRzWydwb3J0J10gPz8gbnVsbDsKCiAgICAgICAgcmV0dXJuIFskaG9zdCwgJHBvcnRdOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IGEgVXJpIHBvcHVsYXRlZCB3aXRoIHZhbHVlcyBmcm9tICRfU0VSVkVSLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFVyaUZyb21HbG9iYWxzKCk6IFVyaUludGVyZmFjZQogICAgewogICAgICAgICR1cmkgPSBuZXcgVXJpKCcnKTsKCiAgICAgICAgJHVyaSA9ICR1cmktPndpdGhTY2hlbWUoIWVtcHR5KCRfU0VSVkVSWydIVFRQUyddKSAmJiAkX1NFUlZFUlsnSFRUUFMnXSAhPT0gJ29mZicgPyAnaHR0cHMnIDogJ2h0dHAnKTsKCiAgICAgICAgJGhhc1BvcnQgPSBmYWxzZTsKICAgICAgICBpZiAoaXNzZXQoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKSkgewogICAgICAgICAgICBbJGhvc3QsICRwb3J0XSA9IHNlbGY6OmV4dHJhY3RIb3N0QW5kUG9ydEZyb21BdXRob3JpdHkoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKTsKICAgICAgICAgICAgaWYgKCRob3N0ICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAkdXJpID0gJHVyaS0+d2l0aEhvc3QoJGhvc3QpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJHBvcnQgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgICRoYXNQb3J0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICR1cmkgPSAkdXJpLT53aXRoUG9ydCgkcG9ydCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2VpZiAoaXNzZXQoJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10pKSB7CiAgICAgICAgICAgICR1cmkgPSAkdXJpLT53aXRoSG9zdCgkX1NFUlZFUlsnU0VSVkVSX05BTUUnXSk7CiAgICAgICAgfSBlbHNlaWYgKGlzc2V0KCRfU0VSVkVSWydTRVJWRVJfQUREUiddKSkgewogICAgICAgICAgICAkdXJpID0gJHVyaS0+d2l0aEhvc3QoJF9TRVJWRVJbJ1NFUlZFUl9BRERSJ10pOwogICAgICAgIH0KCiAgICAgICAgaWYgKCEkaGFzUG9ydCAmJiBpc3NldCgkX1NFUlZFUlsnU0VSVkVSX1BPUlQnXSkpIHsKICAgICAgICAgICAgJHVyaSA9ICR1cmktPndpdGhQb3J0KCRfU0VSVkVSWydTRVJWRVJfUE9SVCddKTsKICAgICAgICB9CgogICAgICAgICRoYXNRdWVyeSA9IGZhbHNlOwogICAgICAgIGlmIChpc3NldCgkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSkpIHsKICAgICAgICAgICAgJHJlcXVlc3RVcmlQYXJ0cyA9IGV4cGxvZGUoJz8nLCAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSwgMik7CiAgICAgICAgICAgICR1cmkgPSAkdXJpLT53aXRoUGF0aCgkcmVxdWVzdFVyaVBhcnRzWzBdKTsKICAgICAgICAgICAgaWYgKGlzc2V0KCRyZXF1ZXN0VXJpUGFydHNbMV0pKSB7CiAgICAgICAgICAgICAgICAkaGFzUXVlcnkgPSB0cnVlOwogICAgICAgICAgICAgICAgJHVyaSA9ICR1cmktPndpdGhRdWVyeSgkcmVxdWVzdFVyaVBhcnRzWzFdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCEkaGFzUXVlcnkgJiYgaXNzZXQoJF9TRVJWRVJbJ1FVRVJZX1NUUklORyddKSkgewogICAgICAgICAgICAkdXJpID0gJHVyaS0+d2l0aFF1ZXJ5KCRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHVyaTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2VydmVyUGFyYW1zKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zZXJ2ZXJQYXJhbXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFVwbG9hZGVkRmlsZXMoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnVwbG9hZGVkRmlsZXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhVcGxvYWRlZEZpbGVzKGFycmF5ICR1cGxvYWRlZEZpbGVzKTogU2VydmVyUmVxdWVzdEludGVyZmFjZQogICAgewogICAgICAgICRuZXcgPSBjbG9uZSAkdGhpczsKICAgICAgICAkbmV3LT51cGxvYWRlZEZpbGVzID0gJHVwbG9hZGVkRmlsZXM7CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb29raWVQYXJhbXMoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNvb2tpZVBhcmFtczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aENvb2tpZVBhcmFtcyhhcnJheSAkY29va2llcyk6IFNlcnZlclJlcXVlc3RJbnRlcmZhY2UKICAgIHsKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+Y29va2llUGFyYW1zID0gJGNvb2tpZXM7CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRRdWVyeVBhcmFtcygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cXVlcnlQYXJhbXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhRdWVyeVBhcmFtcyhhcnJheSAkcXVlcnkpOiBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlCiAgICB7CiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgICRuZXctPnF1ZXJ5UGFyYW1zID0gJHF1ZXJ5OwoKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXl8b2JqZWN0fG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBhcnNlZEJvZHkoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cGFyc2VkQm9keTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFBhcnNlZEJvZHkoJGRhdGEpOiBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlCiAgICB7CiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgICRuZXctPnBhcnNlZEJvZHkgPSAkZGF0YTsKCiAgICAgICAgcmV0dXJuICRuZXc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEF0dHJpYnV0ZXMoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmF0dHJpYnV0ZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdHRyaWJ1dGUoJGF0dHJpYnV0ZSwgJGRlZmF1bHQgPSBudWxsKQogICAgewogICAgICAgIGlmIChmYWxzZSA9PT0gYXJyYXlfa2V5X2V4aXN0cygkYXR0cmlidXRlLCAkdGhpcy0+YXR0cmlidXRlcykpIHsKICAgICAgICAgICAgcmV0dXJuICRkZWZhdWx0OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5hdHRyaWJ1dGVzWyRhdHRyaWJ1dGVdOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoQXR0cmlidXRlKCRhdHRyaWJ1dGUsICR2YWx1ZSk6IFNlcnZlclJlcXVlc3RJbnRlcmZhY2UKICAgIHsKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+YXR0cmlidXRlc1skYXR0cmlidXRlXSA9ICR2YWx1ZTsKCiAgICAgICAgcmV0dXJuICRuZXc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhvdXRBdHRyaWJ1dGUoJGF0dHJpYnV0ZSk6IFNlcnZlclJlcXVlc3RJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoZmFsc2UgPT09IGFycmF5X2tleV9leGlzdHMoJGF0dHJpYnV0ZSwgJHRoaXMtPmF0dHJpYnV0ZXMpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgICRuZXcgPSBjbG9uZSAkdGhpczsKICAgICAgICB1bnNldCgkbmV3LT5hdHRyaWJ1dGVzWyRhdHRyaWJ1dGVdKTsKCiAgICAgICAgcmV0dXJuICRuZXc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/Stream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBQSFAgc3RyZWFtIGltcGxlbWVudGF0aW9uLgogKi8KY2xhc3MgU3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHNlZSBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5mb3Blbi5waHAKICAgICAqIEBzZWUgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZ3pvcGVuLnBocAogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFJFQURBQkxFX01PREVTID0gJy9yfGFcK3xhYlwrfHdcK3x3YlwrfHhcK3x4YlwrfGNcK3xjYlwrLyc7CiAgICBwcml2YXRlIGNvbnN0IFdSSVRBQkxFX01PREVTID0gJy9hfHd8clwrfHJiXCt8cnd8eHxjLyc7CgogICAgLyoqIEB2YXIgcmVzb3VyY2UgKi8KICAgIHByaXZhdGUgJHN0cmVhbTsKICAgIC8qKiBAdmFyIGludHxudWxsICovCiAgICBwcml2YXRlICRzaXplOwogICAgLyoqIEB2YXIgYm9vbCAqLwogICAgcHJpdmF0ZSAkc2Vla2FibGU7CiAgICAvKiogQHZhciBib29sICovCiAgICBwcml2YXRlICRyZWFkYWJsZTsKICAgIC8qKiBAdmFyIGJvb2wgKi8KICAgIHByaXZhdGUgJHdyaXRhYmxlOwogICAgLyoqIEB2YXIgc3RyaW5nfG51bGwgKi8KICAgIHByaXZhdGUgJHVyaTsKICAgIC8qKiBAdmFyIG1peGVkW10gKi8KICAgIHByaXZhdGUgJGN1c3RvbU1ldGFkYXRhOwoKICAgIC8qKgogICAgICogVGhpcyBjb25zdHJ1Y3RvciBhY2NlcHRzIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIG9wdGlvbnMuCiAgICAgKgogICAgICogLSBzaXplOiAoaW50KSBJZiBhIHJlYWQgc3RyZWFtIHdvdWxkIG90aGVyd2lzZSBoYXZlIGFuIGluZGV0ZXJtaW5hdGUKICAgICAqICAgc2l6ZSwgYnV0IHRoZSBzaXplIGlzIGtub3duIGR1ZSB0byBmb3Jla25vd2xlZGdlLCB0aGVuIHlvdSBjYW4KICAgICAqICAgcHJvdmlkZSB0aGF0IHNpemUsIGluIGJ5dGVzLgogICAgICogLSBtZXRhZGF0YTogKGFycmF5KSBBbnkgYWRkaXRpb25hbCBtZXRhZGF0YSB0byByZXR1cm4gd2hlbiB0aGUgbWV0YWRhdGEKICAgICAqICAgb2YgdGhlIHN0cmVhbSBpcyBhY2Nlc3NlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gcmVzb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0cmVhbSAgU3RyZWFtIHJlc291cmNlIHRvIHdyYXAuCiAgICAgKiBAcGFyYW0gYXJyYXl7c2l6ZT86IGludCwgbWV0YWRhdGE/OiBhcnJheX0gJG9wdGlvbnMgQXNzb2NpYXRpdmUgYXJyYXkgb2Ygb3B0aW9ucy4KICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIHN0cmVhbSBpcyBub3QgYSBzdHJlYW0gcmVzb3VyY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRzdHJlYW0sIGFycmF5ICRvcHRpb25zID0gW10pCiAgICB7CiAgICAgICAgaWYgKCFpc19yZXNvdXJjZSgkc3RyZWFtKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignU3RyZWFtIG11c3QgYmUgYSByZXNvdXJjZScpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydzaXplJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5zaXplID0gJG9wdGlvbnNbJ3NpemUnXTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5jdXN0b21NZXRhZGF0YSA9ICRvcHRpb25zWydtZXRhZGF0YSddID8/IFtdOwogICAgICAgICR0aGlzLT5zdHJlYW0gPSAkc3RyZWFtOwogICAgICAgICRtZXRhID0gc3RyZWFtX2dldF9tZXRhX2RhdGEoJHRoaXMtPnN0cmVhbSk7CiAgICAgICAgJHRoaXMtPnNlZWthYmxlID0gJG1ldGFbJ3NlZWthYmxlJ107CiAgICAgICAgJHRoaXMtPnJlYWRhYmxlID0gKGJvb2wpIHByZWdfbWF0Y2goc2VsZjo6UkVBREFCTEVfTU9ERVMsICRtZXRhWydtb2RlJ10pOwogICAgICAgICR0aGlzLT53cml0YWJsZSA9IChib29sKSBwcmVnX21hdGNoKHNlbGY6OldSSVRBQkxFX01PREVTLCAkbWV0YVsnbW9kZSddKTsKICAgICAgICAkdGhpcy0+dXJpID0gJHRoaXMtPmdldE1ldGFkYXRhKCd1cmknKTsKICAgIH0KCiAgICAvKioKICAgICAqIENsb3NlcyB0aGUgc3RyZWFtIHdoZW4gdGhlIGRlc3RydWN0ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fZGVzdHJ1Y3QoKQogICAgewogICAgICAgICR0aGlzLT5jbG9zZSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+aXNTZWVrYWJsZSgpKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+c2VlaygwKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRDb250ZW50cygpOwogICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgaWYgKFxQSFBfVkVSU0lPTl9JRCA+PSA3MDQwMCkgewogICAgICAgICAgICAgICAgdGhyb3cgJGU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdHJpZ2dlcl9lcnJvcihzcHJpbnRmKCclczo6X190b1N0cmluZyBleGNlcHRpb246ICVzJywgc2VsZjo6Y2xhc3MsIChzdHJpbmcpICRlKSwgRV9VU0VSX0VSUk9SKTsKCiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnRzKCk6IHN0cmluZwogICAgewogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPnN0cmVhbSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdTdHJlYW0gaXMgZGV0YWNoZWQnKTsKICAgICAgICB9CgogICAgICAgIGlmICghJHRoaXMtPnJlYWRhYmxlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQ2Fubm90IHJlYWQgZnJvbSBub24tcmVhZGFibGUgc3RyZWFtJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gVXRpbHM6OnRyeUdldENvbnRlbnRzKCR0aGlzLT5zdHJlYW0pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjbG9zZSgpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5zdHJlYW0pKSB7CiAgICAgICAgICAgIGlmIChpc19yZXNvdXJjZSgkdGhpcy0+c3RyZWFtKSkgewogICAgICAgICAgICAgICAgZmNsb3NlKCR0aGlzLT5zdHJlYW0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR0aGlzLT5kZXRhY2goKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGRldGFjaCgpCiAgICB7CiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+c3RyZWFtKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICRyZXN1bHQgPSAkdGhpcy0+c3RyZWFtOwogICAgICAgIHVuc2V0KCR0aGlzLT5zdHJlYW0pOwogICAgICAgICR0aGlzLT5zaXplID0gJHRoaXMtPnVyaSA9IG51bGw7CiAgICAgICAgJHRoaXMtPnJlYWRhYmxlID0gJHRoaXMtPndyaXRhYmxlID0gJHRoaXMtPnNlZWthYmxlID0gZmFsc2U7CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaXplKCk6ID9pbnQKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPnNpemUgIT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5zaXplOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+c3RyZWFtKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIC8vIENsZWFyIHRoZSBzdGF0IGNhY2hlIGlmIHRoZSBzdHJlYW0gaGFzIGEgVVJJCiAgICAgICAgaWYgKCR0aGlzLT51cmkpIHsKICAgICAgICAgICAgY2xlYXJzdGF0Y2FjaGUodHJ1ZSwgJHRoaXMtPnVyaSk7CiAgICAgICAgfQoKICAgICAgICAkc3RhdHMgPSBmc3RhdCgkdGhpcy0+c3RyZWFtKTsKICAgICAgICBpZiAoaXNfYXJyYXkoJHN0YXRzKSAmJiBpc3NldCgkc3RhdHNbJ3NpemUnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPnNpemUgPSAkc3RhdHNbJ3NpemUnXTsKCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+c2l6ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1JlYWRhYmxlKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlYWRhYmxlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1dyaXRhYmxlKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPndyaXRhYmxlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1NlZWthYmxlKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnNlZWthYmxlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBlb2YoKTogYm9vbAogICAgewogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPnN0cmVhbSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdTdHJlYW0gaXMgZGV0YWNoZWQnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBmZW9mKCR0aGlzLT5zdHJlYW0pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZWxsKCk6IGludAogICAgewogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPnN0cmVhbSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdTdHJlYW0gaXMgZGV0YWNoZWQnKTsKICAgICAgICB9CgogICAgICAgICRyZXN1bHQgPSBmdGVsbCgkdGhpcy0+c3RyZWFtKTsKCiAgICAgICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVW5hYmxlIHRvIGRldGVybWluZSBzdHJlYW0gcG9zaXRpb24nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5zZWVrKDApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZWVrKCRvZmZzZXQsICR3aGVuY2UgPSBTRUVLX1NFVCk6IHZvaWQKICAgIHsKICAgICAgICAkd2hlbmNlID0gKGludCkgJHdoZW5jZTsKCiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+c3RyZWFtKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1N0cmVhbSBpcyBkZXRhY2hlZCcpOwogICAgICAgIH0KICAgICAgICBpZiAoISR0aGlzLT5zZWVrYWJsZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1N0cmVhbSBpcyBub3Qgc2Vla2FibGUnKTsKICAgICAgICB9CiAgICAgICAgaWYgKGZzZWVrKCR0aGlzLT5zdHJlYW0sICRvZmZzZXQsICR3aGVuY2UpID09PSAtMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1VuYWJsZSB0byBzZWVrIHRvIHN0cmVhbSBwb3NpdGlvbiAnCiAgICAgICAgICAgICAgICAuJG9mZnNldC4nIHdpdGggd2hlbmNlICcudmFyX2V4cG9ydCgkd2hlbmNlLCB0cnVlKSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkKCRsZW5ndGgpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5zdHJlYW0pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignU3RyZWFtIGlzIGRldGFjaGVkJyk7CiAgICAgICAgfQogICAgICAgIGlmICghJHRoaXMtPnJlYWRhYmxlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQ2Fubm90IHJlYWQgZnJvbSBub24tcmVhZGFibGUgc3RyZWFtJyk7CiAgICAgICAgfQogICAgICAgIGlmICgkbGVuZ3RoIDwgMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0xlbmd0aCBwYXJhbWV0ZXIgY2Fubm90IGJlIG5lZ2F0aXZlJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoMCA9PT0gJGxlbmd0aCkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQoKICAgICAgICB0cnkgewogICAgICAgICAgICAkc3RyaW5nID0gZnJlYWQoJHRoaXMtPnN0cmVhbSwgJGxlbmd0aCk7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1VuYWJsZSB0byByZWFkIGZyb20gc3RyZWFtJywgMCwgJGUpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZhbHNlID09PSAkc3RyaW5nKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVW5hYmxlIHRvIHJlYWQgZnJvbSBzdHJlYW0nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkc3RyaW5nOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3cml0ZSgkc3RyaW5nKTogaW50CiAgICB7CiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+c3RyZWFtKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1N0cmVhbSBpcyBkZXRhY2hlZCcpOwogICAgICAgIH0KICAgICAgICBpZiAoISR0aGlzLT53cml0YWJsZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0Nhbm5vdCB3cml0ZSB0byBhIG5vbi13cml0YWJsZSBzdHJlYW0nKTsKICAgICAgICB9CgogICAgICAgIC8vIFdlIGNhbid0IGtub3cgdGhlIHNpemUgYWZ0ZXIgd3JpdGluZyBhbnl0aGluZwogICAgICAgICR0aGlzLT5zaXplID0gbnVsbDsKICAgICAgICAkcmVzdWx0ID0gZndyaXRlKCR0aGlzLT5zdHJlYW0sICRzdHJpbmcpOwoKICAgICAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdVbmFibGUgdG8gd3JpdGUgdG8gc3RyZWFtJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1ldGFkYXRhKCRrZXkgPSBudWxsKQogICAgewogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPnN0cmVhbSkpIHsKICAgICAgICAgICAgcmV0dXJuICRrZXkgPyBudWxsIDogW107CiAgICAgICAgfSBlbHNlaWYgKCEka2V5KSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+Y3VzdG9tTWV0YWRhdGEgKyBzdHJlYW1fZ2V0X21ldGFfZGF0YSgkdGhpcy0+c3RyZWFtKTsKICAgICAgICB9IGVsc2VpZiAoaXNzZXQoJHRoaXMtPmN1c3RvbU1ldGFkYXRhWyRrZXldKSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmN1c3RvbU1ldGFkYXRhWyRrZXldOwogICAgICAgIH0KCiAgICAgICAgJG1ldGEgPSBzdHJlYW1fZ2V0X21ldGFfZGF0YSgkdGhpcy0+c3RyZWFtKTsKCiAgICAgICAgcmV0dXJuICRtZXRhWyRrZXldID8/IG51bGw7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBTdHJlYW0gZGVjb3JhdG9yIHRyYWl0CiAqCiAqIEBwcm9wZXJ0eSBTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbQogKi8KdHJhaXQgU3RyZWFtRGVjb3JhdG9yVHJhaXQKewogICAgLyoqCiAgICAgKiBAcGFyYW0gU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0gU3RyZWFtIHRvIGRlY29yYXRlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSkKICAgIHsKICAgICAgICAkdGhpcy0+c3RyZWFtID0gJHN0cmVhbTsKICAgIH0KCiAgICAvKioKICAgICAqIE1hZ2ljIG1ldGhvZCB1c2VkIHRvIGNyZWF0ZSBhIG5ldyBzdHJlYW0gaWYgc3RyZWFtcyBhcmUgbm90IGFkZGVkIGluCiAgICAgKiB0aGUgY29uc3RydWN0b3Igb2YgYSBkZWNvcmF0b3IgKGUuZy4sIExhenlPcGVuU3RyZWFtKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFN0cmVhbUludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoc3RyaW5nICRuYW1lKQogICAgewogICAgICAgIGlmICgkbmFtZSA9PT0gJ3N0cmVhbScpIHsKICAgICAgICAgICAgJHRoaXMtPnN0cmVhbSA9ICR0aGlzLT5jcmVhdGVTdHJlYW0oKTsKCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtOwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IFxVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24oIiRuYW1lIG5vdCBmb3VuZCBvbiBjbGFzcyIpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+aXNTZWVrYWJsZSgpKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+c2VlaygwKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRDb250ZW50cygpOwogICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgaWYgKFxQSFBfVkVSU0lPTl9JRCA+PSA3MDQwMCkgewogICAgICAgICAgICAgICAgdGhyb3cgJGU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdHJpZ2dlcl9lcnJvcihzcHJpbnRmKCclczo6X190b1N0cmluZyBleGNlcHRpb246ICVzJywgc2VsZjo6Y2xhc3MsIChzdHJpbmcpICRlKSwgRV9VU0VSX0VSUk9SKTsKCiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnRzKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBVdGlsczo6Y29weVRvU3RyaW5nKCR0aGlzKTsKICAgIH0KCiAgICAvKioKICAgICAqIEFsbG93IGRlY29yYXRvcnMgdG8gaW1wbGVtZW50IGN1c3RvbSBtZXRob2RzCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jYWxsKHN0cmluZyAkbWV0aG9kLCBhcnJheSAkYXJncykKICAgIHsKICAgICAgICAvKiogQHZhciBjYWxsYWJsZSAkY2FsbGFibGUgKi8KICAgICAgICAkY2FsbGFibGUgPSBbJHRoaXMtPnN0cmVhbSwgJG1ldGhvZF07CiAgICAgICAgJHJlc3VsdCA9ICgkY2FsbGFibGUpKC4uLiRhcmdzKTsKCiAgICAgICAgLy8gQWx3YXlzIHJldHVybiB0aGUgd3JhcHBlZCBvYmplY3QgaWYgdGhlIHJlc3VsdCBpcyBhIHJldHVybiAkdGhpcwogICAgICAgIHJldHVybiAkcmVzdWx0ID09PSAkdGhpcy0+c3RyZWFtID8gJHRoaXMgOiAkcmVzdWx0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjbG9zZSgpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPnN0cmVhbS0+Y2xvc2UoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1ldGFkYXRhKCRrZXkgPSBudWxsKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtLT5nZXRNZXRhZGF0YSgka2V5KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGV0YWNoKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+ZGV0YWNoKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFNpemUoKTogP2ludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtLT5nZXRTaXplKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGVvZigpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdHJlYW0tPmVvZigpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZWxsKCk6IGludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtLT50ZWxsKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzUmVhZGFibGUoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtLT5pc1JlYWRhYmxlKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzV3JpdGFibGUoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtLT5pc1dyaXRhYmxlKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzU2Vla2FibGUoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtLT5pc1NlZWthYmxlKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPnNlZWsoMCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNlZWsoJG9mZnNldCwgJHdoZW5jZSA9IFNFRUtfU0VUKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5zdHJlYW0tPnNlZWsoJG9mZnNldCwgJHdoZW5jZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlYWQoJGxlbmd0aCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtLT5yZWFkKCRsZW5ndGgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3cml0ZSgkc3RyaW5nKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdHJlYW0tPndyaXRlKCRzdHJpbmcpOwogICAgfQoKICAgIC8qKgogICAgICogSW1wbGVtZW50IGluIHN1YmNsYXNzZXMgdG8gZHluYW1pY2FsbHkgY3JlYXRlIHN0cmVhbXMgd2hlbiByZXF1ZXN0ZWQuCiAgICAgKgogICAgICogQHRocm93cyBcQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY3JlYXRlU3RyZWFtKCk6IFN0cmVhbUludGVyZmFjZQogICAgewogICAgICAgIHRocm93IG5ldyBcQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbignTm90IGltcGxlbWVudGVkJyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/StreamWrapper.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBDb252ZXJ0cyBHdXp6bGUgc3RyZWFtcyBpbnRvIFBIUCBzdHJlYW0gcmVzb3VyY2VzLgogKgogKiBAc2VlIGh0dHBzOi8vd3d3LnBocC5uZXQvc3RyZWFtd3JhcHBlcgogKi8KZmluYWwgY2xhc3MgU3RyZWFtV3JhcHBlcgp7CiAgICAvKiogQHZhciByZXNvdXJjZSAqLwogICAgcHVibGljICRjb250ZXh0OwoKICAgIC8qKiBAdmFyIFN0cmVhbUludGVyZmFjZSAqLwogICAgcHJpdmF0ZSAkc3RyZWFtOwoKICAgIC8qKiBAdmFyIHN0cmluZyByLCByKywgb3IgdyAqLwogICAgcHJpdmF0ZSAkbW9kZTsKCiAgICAvKioKICAgICAqIFJldHVybnMgYSByZXNvdXJjZSByZXByZXNlbnRpbmcgdGhlIHN0cmVhbS4KICAgICAqCiAgICAgKiBAcGFyYW0gU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0gVGhlIHN0cmVhbSB0byBnZXQgYSByZXNvdXJjZSBmb3IKICAgICAqCiAgICAgKiBAcmV0dXJuIHJlc291cmNlCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmIHN0cmVhbSBpcyBub3QgcmVhZGFibGUgb3Igd3JpdGFibGUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRSZXNvdXJjZShTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSkKICAgIHsKICAgICAgICBzZWxmOjpyZWdpc3RlcigpOwoKICAgICAgICBpZiAoJHN0cmVhbS0+aXNSZWFkYWJsZSgpKSB7CiAgICAgICAgICAgICRtb2RlID0gJHN0cmVhbS0+aXNXcml0YWJsZSgpID8gJ3IrJyA6ICdyJzsKICAgICAgICB9IGVsc2VpZiAoJHN0cmVhbS0+aXNXcml0YWJsZSgpKSB7CiAgICAgICAgICAgICRtb2RlID0gJ3cnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGUgc3RyZWFtIG11c3QgYmUgcmVhZGFibGUsICcKICAgICAgICAgICAgICAgIC4nd3JpdGFibGUsIG9yIGJvdGguJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZm9wZW4oJ2d1enpsZTovL3N0cmVhbScsICRtb2RlLCBmYWxzZSwgc2VsZjo6Y3JlYXRlU3RyZWFtQ29udGV4dCgkc3RyZWFtKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgc3RyZWFtIGNvbnRleHQgdGhhdCBjYW4gYmUgdXNlZCB0byBvcGVuIGEgc3RyZWFtIGFzIGEgcGhwIHN0cmVhbSByZXNvdXJjZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHJlc291cmNlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlU3RyZWFtQ29udGV4dChTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSkKICAgIHsKICAgICAgICByZXR1cm4gc3RyZWFtX2NvbnRleHRfY3JlYXRlKFsKICAgICAgICAgICAgJ2d1enpsZScgPT4gWydzdHJlYW0nID0+ICRzdHJlYW1dLAogICAgICAgIF0pOwogICAgfQoKICAgIC8qKgogICAgICogUmVnaXN0ZXJzIHRoZSBzdHJlYW0gd3JhcHBlciBpZiBuZWVkZWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWdpc3RlcigpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCFpbl9hcnJheSgnZ3V6emxlJywgc3RyZWFtX2dldF93cmFwcGVycygpKSkgewogICAgICAgICAgICBzdHJlYW1fd3JhcHBlcl9yZWdpc3RlcignZ3V6emxlJywgX19DTEFTU19fKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHN0cmVhbV9vcGVuKHN0cmluZyAkcGF0aCwgc3RyaW5nICRtb2RlLCBpbnQgJG9wdGlvbnMsID9zdHJpbmcgJiRvcGVuZWRfcGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgJG9wdGlvbnMgPSBzdHJlYW1fY29udGV4dF9nZXRfb3B0aW9ucygkdGhpcy0+Y29udGV4dCk7CgogICAgICAgIGlmICghaXNzZXQoJG9wdGlvbnNbJ2d1enpsZSddWydzdHJlYW0nXSkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPm1vZGUgPSAkbW9kZTsKICAgICAgICAkdGhpcy0+c3RyZWFtID0gJG9wdGlvbnNbJ2d1enpsZSddWydzdHJlYW0nXTsKCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHN0cmVhbV9yZWFkKGludCAkY291bnQpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+cmVhZCgkY291bnQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzdHJlYW1fd3JpdGUoc3RyaW5nICRkYXRhKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdHJlYW0tPndyaXRlKCRkYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RyZWFtX3RlbGwoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdHJlYW0tPnRlbGwoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RyZWFtX2VvZigpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdHJlYW0tPmVvZigpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzdHJlYW1fc2VlayhpbnQgJG9mZnNldCwgaW50ICR3aGVuY2UpOiBib29sCiAgICB7CiAgICAgICAgJHRoaXMtPnN0cmVhbS0+c2Vlaygkb2Zmc2V0LCAkd2hlbmNlKTsKCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzdHJlYW1fY2FzdChpbnQgJGNhc3RfYXMpCiAgICB7CiAgICAgICAgJHN0cmVhbSA9IGNsb25lICR0aGlzLT5zdHJlYW07CiAgICAgICAgJHJlc291cmNlID0gJHN0cmVhbS0+ZGV0YWNoKCk7CgogICAgICAgIHJldHVybiAkcmVzb3VyY2UgPz8gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5ewogICAgICogICBkZXY6IGludCwKICAgICAqICAgaW5vOiBpbnQsCiAgICAgKiAgIG1vZGU6IGludCwKICAgICAqICAgbmxpbms6IGludCwKICAgICAqICAgdWlkOiBpbnQsCiAgICAgKiAgIGdpZDogaW50LAogICAgICogICByZGV2OiBpbnQsCiAgICAgKiAgIHNpemU6IGludCwKICAgICAqICAgYXRpbWU6IGludCwKICAgICAqICAgbXRpbWU6IGludCwKICAgICAqICAgY3RpbWU6IGludCwKICAgICAqICAgYmxrc2l6ZTogaW50LAogICAgICogICBibG9ja3M6IGludAogICAgICogfXxmYWxzZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RyZWFtX3N0YXQoKQogICAgewogICAgICAgIGlmICgkdGhpcy0+c3RyZWFtLT5nZXRTaXplKCkgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljICRtb2RlTWFwID0gWwogICAgICAgICAgICAncicgPT4gMzMwNjAsCiAgICAgICAgICAgICdyYicgPT4gMzMwNjAsCiAgICAgICAgICAgICdyKycgPT4gMzMyMDYsCiAgICAgICAgICAgICd3JyA9PiAzMzE4OCwKICAgICAgICAgICAgJ3diJyA9PiAzMzE4OCwKICAgICAgICBdOwoKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAnZGV2JyA9PiAwLAogICAgICAgICAgICAnaW5vJyA9PiAwLAogICAgICAgICAgICAnbW9kZScgPT4gJG1vZGVNYXBbJHRoaXMtPm1vZGVdLAogICAgICAgICAgICAnbmxpbmsnID0+IDAsCiAgICAgICAgICAgICd1aWQnID0+IDAsCiAgICAgICAgICAgICdnaWQnID0+IDAsCiAgICAgICAgICAgICdyZGV2JyA9PiAwLAogICAgICAgICAgICAnc2l6ZScgPT4gJHRoaXMtPnN0cmVhbS0+Z2V0U2l6ZSgpID86IDAsCiAgICAgICAgICAgICdhdGltZScgPT4gMCwKICAgICAgICAgICAgJ210aW1lJyA9PiAwLAogICAgICAgICAgICAnY3RpbWUnID0+IDAsCiAgICAgICAgICAgICdibGtzaXplJyA9PiAwLAogICAgICAgICAgICAnYmxvY2tzJyA9PiAwLAogICAgICAgIF07CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5ewogICAgICogICBkZXY6IGludCwKICAgICAqICAgaW5vOiBpbnQsCiAgICAgKiAgIG1vZGU6IGludCwKICAgICAqICAgbmxpbms6IGludCwKICAgICAqICAgdWlkOiBpbnQsCiAgICAgKiAgIGdpZDogaW50LAogICAgICogICByZGV2OiBpbnQsCiAgICAgKiAgIHNpemU6IGludCwKICAgICAqICAgYXRpbWU6IGludCwKICAgICAqICAgbXRpbWU6IGludCwKICAgICAqICAgY3RpbWU6IGludCwKICAgICAqICAgYmxrc2l6ZTogaW50LAogICAgICogICBibG9ja3M6IGludAogICAgICogfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdXJsX3N0YXQoc3RyaW5nICRwYXRoLCBpbnQgJGZsYWdzKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAnZGV2JyA9PiAwLAogICAgICAgICAgICAnaW5vJyA9PiAwLAogICAgICAgICAgICAnbW9kZScgPT4gMCwKICAgICAgICAgICAgJ25saW5rJyA9PiAwLAogICAgICAgICAgICAndWlkJyA9PiAwLAogICAgICAgICAgICAnZ2lkJyA9PiAwLAogICAgICAgICAgICAncmRldicgPT4gMCwKICAgICAgICAgICAgJ3NpemUnID0+IDAsCiAgICAgICAgICAgICdhdGltZScgPT4gMCwKICAgICAgICAgICAgJ210aW1lJyA9PiAwLAogICAgICAgICAgICAnY3RpbWUnID0+IDAsCiAgICAgICAgICAgICdibGtzaXplJyA9PiAwLAogICAgICAgICAgICAnYmxvY2tzJyA9PiAwLAogICAgICAgIF07CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/UploadedFile.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXBsb2FkZWRGaWxlSW50ZXJmYWNlOwp1c2UgUnVudGltZUV4Y2VwdGlvbjsKCmNsYXNzIFVwbG9hZGVkRmlsZSBpbXBsZW1lbnRzIFVwbG9hZGVkRmlsZUludGVyZmFjZQp7CiAgICBwcml2YXRlIGNvbnN0IEVSUk9SX01BUCA9IFsKICAgICAgICBVUExPQURfRVJSX09LID0+ICdVUExPQURfRVJSX09LJywKICAgICAgICBVUExPQURfRVJSX0lOSV9TSVpFID0+ICdVUExPQURfRVJSX0lOSV9TSVpFJywKICAgICAgICBVUExPQURfRVJSX0ZPUk1fU0laRSA9PiAnVVBMT0FEX0VSUl9GT1JNX1NJWkUnLAogICAgICAgIFVQTE9BRF9FUlJfUEFSVElBTCA9PiAnVVBMT0FEX0VSUl9QQVJUSUFMJywKICAgICAgICBVUExPQURfRVJSX05PX0ZJTEUgPT4gJ1VQTE9BRF9FUlJfTk9fRklMRScsCiAgICAgICAgVVBMT0FEX0VSUl9OT19UTVBfRElSID0+ICdVUExPQURfRVJSX05PX1RNUF9ESVInLAogICAgICAgIFVQTE9BRF9FUlJfQ0FOVF9XUklURSA9PiAnVVBMT0FEX0VSUl9DQU5UX1dSSVRFJywKICAgICAgICBVUExPQURfRVJSX0VYVEVOU0lPTiA9PiAnVVBMT0FEX0VSUl9FWFRFTlNJT04nLAogICAgXTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkY2xpZW50RmlsZW5hbWU7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGNsaWVudE1lZGlhVHlwZTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByaXZhdGUgJGVycm9yOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRmaWxlOwoKICAgIC8qKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHByaXZhdGUgJG1vdmVkID0gZmFsc2U7CgogICAgLyoqCiAgICAgKiBAdmFyIGludHxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJHNpemU7CgogICAgLyoqCiAgICAgKiBAdmFyIFN0cmVhbUludGVyZmFjZXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJHN0cmVhbTsKCiAgICAvKioKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2V8c3RyaW5nfHJlc291cmNlICRzdHJlYW1PckZpbGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgICRzdHJlYW1PckZpbGUsCiAgICAgICAgP2ludCAkc2l6ZSwKICAgICAgICBpbnQgJGVycm9yU3RhdHVzLAogICAgICAgID9zdHJpbmcgJGNsaWVudEZpbGVuYW1lID0gbnVsbCwKICAgICAgICA/c3RyaW5nICRjbGllbnRNZWRpYVR5cGUgPSBudWxsCiAgICApIHsKICAgICAgICAkdGhpcy0+c2V0RXJyb3IoJGVycm9yU3RhdHVzKTsKICAgICAgICAkdGhpcy0+c2l6ZSA9ICRzaXplOwogICAgICAgICR0aGlzLT5jbGllbnRGaWxlbmFtZSA9ICRjbGllbnRGaWxlbmFtZTsKICAgICAgICAkdGhpcy0+Y2xpZW50TWVkaWFUeXBlID0gJGNsaWVudE1lZGlhVHlwZTsKCiAgICAgICAgaWYgKCR0aGlzLT5pc09rKCkpIHsKICAgICAgICAgICAgJHRoaXMtPnNldFN0cmVhbU9yRmlsZSgkc3RyZWFtT3JGaWxlKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBEZXBlbmRpbmcgb24gdGhlIHZhbHVlIHNldCBmaWxlIG9yIHN0cmVhbSB2YXJpYWJsZQogICAgICoKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2V8c3RyaW5nfHJlc291cmNlICRzdHJlYW1PckZpbGUKICAgICAqCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHNldFN0cmVhbU9yRmlsZSgkc3RyZWFtT3JGaWxlKTogdm9pZAogICAgewogICAgICAgIGlmIChpc19zdHJpbmcoJHN0cmVhbU9yRmlsZSkpIHsKICAgICAgICAgICAgJHRoaXMtPmZpbGUgPSAkc3RyZWFtT3JGaWxlOwogICAgICAgIH0gZWxzZWlmIChpc19yZXNvdXJjZSgkc3RyZWFtT3JGaWxlKSkgewogICAgICAgICAgICAkdGhpcy0+c3RyZWFtID0gbmV3IFN0cmVhbSgkc3RyZWFtT3JGaWxlKTsKICAgICAgICB9IGVsc2VpZiAoJHN0cmVhbU9yRmlsZSBpbnN0YW5jZW9mIFN0cmVhbUludGVyZmFjZSkgewogICAgICAgICAgICAkdGhpcy0+c3RyZWFtID0gJHN0cmVhbU9yRmlsZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0ludmFsaWQgc3RyZWFtIG9yIGZpbGUgcHJvdmlkZWQgZm9yIFVwbG9hZGVkRmlsZScKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHNldEVycm9yKGludCAkZXJyb3IpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCFpc3NldChVcGxvYWRlZEZpbGU6OkVSUk9SX01BUFskZXJyb3JdKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0ludmFsaWQgZXJyb3Igc3RhdHVzIGZvciBVcGxvYWRlZEZpbGUnCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+ZXJyb3IgPSAkZXJyb3I7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gaXNTdHJpbmdOb3RFbXB0eSgkcGFyYW0pOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIGlzX3N0cmluZygkcGFyYW0pICYmIGZhbHNlID09PSBlbXB0eSgkcGFyYW0pOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgbm8gdXBsb2FkIGVycm9yCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gaXNPaygpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5lcnJvciA9PT0gVVBMT0FEX0VSUl9PSzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNNb3ZlZCgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5tb3ZlZDsKICAgIH0KCiAgICAvKioKICAgICAqIEB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiBpZiBpcyBtb3ZlZCBvciBub3Qgb2sKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiB2YWxpZGF0ZUFjdGl2ZSgpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKGZhbHNlID09PSAkdGhpcy0+aXNPaygpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKFxzcHJpbnRmKCdDYW5ub3QgcmV0cmlldmUgc3RyZWFtIGR1ZSB0byB1cGxvYWQgZXJyb3IgKCVzKScsIHNlbGY6OkVSUk9SX01BUFskdGhpcy0+ZXJyb3JdKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoaXMtPmlzTW92ZWQoKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbignQ2Fubm90IHJldHJpZXZlIHN0cmVhbSBhZnRlciBpdCBoYXMgYWxyZWFkeSBiZWVuIG1vdmVkJyk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdHJlYW0oKTogU3RyZWFtSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJHRoaXMtPnZhbGlkYXRlQWN0aXZlKCk7CgogICAgICAgIGlmICgkdGhpcy0+c3RyZWFtIGluc3RhbmNlb2YgU3RyZWFtSW50ZXJmYWNlKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRmaWxlICovCiAgICAgICAgJGZpbGUgPSAkdGhpcy0+ZmlsZTsKCiAgICAgICAgcmV0dXJuIG5ldyBMYXp5T3BlblN0cmVhbSgkZmlsZSwgJ3IrJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG1vdmVUbygkdGFyZ2V0UGF0aCk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+dmFsaWRhdGVBY3RpdmUoKTsKCiAgICAgICAgaWYgKGZhbHNlID09PSBzZWxmOjppc1N0cmluZ05vdEVtcHR5KCR0YXJnZXRQYXRoKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0ludmFsaWQgcGF0aCBwcm92aWRlZCBmb3IgbW92ZSBvcGVyYXRpb247IG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT5maWxlKSB7CiAgICAgICAgICAgICR0aGlzLT5tb3ZlZCA9IFBIUF9TQVBJID09PSAnY2xpJwogICAgICAgICAgICAgICAgPyByZW5hbWUoJHRoaXMtPmZpbGUsICR0YXJnZXRQYXRoKQogICAgICAgICAgICAgICAgOiBtb3ZlX3VwbG9hZGVkX2ZpbGUoJHRoaXMtPmZpbGUsICR0YXJnZXRQYXRoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBVdGlsczo6Y29weVRvU3RyZWFtKAogICAgICAgICAgICAgICAgJHRoaXMtPmdldFN0cmVhbSgpLAogICAgICAgICAgICAgICAgbmV3IExhenlPcGVuU3RyZWFtKCR0YXJnZXRQYXRoLCAndycpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkdGhpcy0+bW92ZWQgPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZhbHNlID09PSAkdGhpcy0+bW92ZWQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCiAgICAgICAgICAgICAgICBzcHJpbnRmKCdVcGxvYWRlZCBmaWxlIGNvdWxkIG5vdCBiZSBtb3ZlZCB0byAlcycsICR0YXJnZXRQYXRoKQogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2l6ZSgpOiA/aW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zaXplOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFcnJvcigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmVycm9yOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbGllbnRGaWxlbmFtZSgpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jbGllbnRGaWxlbmFtZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xpZW50TWVkaWFUeXBlKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNsaWVudE1lZGlhVHlwZTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/Uri.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBHdXp6bGVIdHRwXFBzcjdcRXhjZXB0aW9uXE1hbGZvcm1lZFVyaUV4Y2VwdGlvbjsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlOwoKLyoqCiAqIFBTUi03IFVSSSBpbXBsZW1lbnRhdGlvbi4KICoKICogQGF1dGhvciBNaWNoYWVsIERvd2xpbmcKICogQGF1dGhvciBUb2JpYXMgU2NodWx0emUKICogQGF1dGhvciBNYXR0aGV3IFdlaWVyIE8nUGhpbm5leQogKi8KY2xhc3MgVXJpIGltcGxlbWVudHMgVXJpSW50ZXJmYWNlLCBcSnNvblNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIEFic29sdXRlIGh0dHAgYW5kIGh0dHBzIFVSSXMgcmVxdWlyZSBhIGhvc3QgcGVyIFJGQyA3MjMwIFNlY3Rpb24gMi43CiAgICAgKiBidXQgaW4gZ2VuZXJpYyBVUklzIHRoZSBob3N0IGNhbiBiZSBlbXB0eS4gU28gZm9yIGh0dHAocykgVVJJcwogICAgICogd2UgYXBwbHkgdGhpcyBkZWZhdWx0IGhvc3Qgd2hlbiBubyBob3N0IGlzIGdpdmVuIHlldCB0byBmb3JtIGEKICAgICAqIHZhbGlkIFVSSS4KICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBIVFRQX0RFRkFVTFRfSE9TVCA9ICdsb2NhbGhvc3QnOwoKICAgIHByaXZhdGUgY29uc3QgREVGQVVMVF9QT1JUUyA9IFsKICAgICAgICAnaHR0cCcgPT4gODAsCiAgICAgICAgJ2h0dHBzJyA9PiA0NDMsCiAgICAgICAgJ2Z0cCcgPT4gMjEsCiAgICAgICAgJ2dvcGhlcicgPT4gNzAsCiAgICAgICAgJ25udHAnID0+IDExOSwKICAgICAgICAnbmV3cycgPT4gMTE5LAogICAgICAgICd0ZWxuZXQnID0+IDIzLAogICAgICAgICd0bjMyNzAnID0+IDIzLAogICAgICAgICdpbWFwJyA9PiAxNDMsCiAgICAgICAgJ3BvcCcgPT4gMTEwLAogICAgICAgICdsZGFwJyA9PiAzODksCiAgICBdOwoKICAgIC8qKgogICAgICogVW5yZXNlcnZlZCBjaGFyYWN0ZXJzIGZvciB1c2UgaW4gYSByZWdleC4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTIuMwogICAgICovCiAgICBwcml2YXRlIGNvbnN0IENIQVJfVU5SRVNFUlZFRCA9ICdhLXpBLVowLTlfXC1cLn4nOwoKICAgIC8qKgogICAgICogU3ViLWRlbGltcyBmb3IgdXNlIGluIGEgcmVnZXguCiAgICAgKgogICAgICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzM5ODYjc2VjdGlvbi0yLjIKICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBDSEFSX1NVQl9ERUxJTVMgPSAnIVwkJlwnXChcKVwqXCssOz0nOwogICAgcHJpdmF0ZSBjb25zdCBRVUVSWV9TRVBBUkFUT1JTX1JFUExBQ0VNRU5UID0gWyc9JyA9PiAnJTNEJywgJyYnID0+ICclMjYnLCAnKycgPT4gJyUyQiddOwoKICAgIC8qKiBAdmFyIHN0cmluZyBVcmkgc2NoZW1lLiAqLwogICAgcHJpdmF0ZSAkc2NoZW1lID0gJyc7CgogICAgLyoqIEB2YXIgc3RyaW5nIFVyaSB1c2VyIGluZm8uICovCiAgICBwcml2YXRlICR1c2VySW5mbyA9ICcnOwoKICAgIC8qKiBAdmFyIHN0cmluZyBVcmkgaG9zdC4gKi8KICAgIHByaXZhdGUgJGhvc3QgPSAnJzsKCiAgICAvKiogQHZhciBpbnR8bnVsbCBVcmkgcG9ydC4gKi8KICAgIHByaXZhdGUgJHBvcnQ7CgogICAgLyoqIEB2YXIgc3RyaW5nIFVyaSBwYXRoLiAqLwogICAgcHJpdmF0ZSAkcGF0aCA9ICcnOwoKICAgIC8qKiBAdmFyIHN0cmluZyBVcmkgcXVlcnkgc3RyaW5nLiAqLwogICAgcHJpdmF0ZSAkcXVlcnkgPSAnJzsKCiAgICAvKiogQHZhciBzdHJpbmcgVXJpIGZyYWdtZW50LiAqLwogICAgcHJpdmF0ZSAkZnJhZ21lbnQgPSAnJzsKCiAgICAvKiogQHZhciBzdHJpbmd8bnVsbCBTdHJpbmcgcmVwcmVzZW50YXRpb24gKi8KICAgIHByaXZhdGUgJGNvbXBvc2VkQ29tcG9uZW50czsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICR1cmkgPSAnJykKICAgIHsKICAgICAgICBpZiAoJHVyaSAhPT0gJycpIHsKICAgICAgICAgICAgJHBhcnRzID0gc2VsZjo6cGFyc2UoJHVyaSk7CiAgICAgICAgICAgIGlmICgkcGFydHMgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTWFsZm9ybWVkVXJpRXhjZXB0aW9uKCJVbmFibGUgdG8gcGFyc2UgVVJJOiAkdXJpIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPmFwcGx5UGFydHMoJHBhcnRzKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBVVEYtOCBhd2FyZSBccGFyc2VfdXJsKCkgcmVwbGFjZW1lbnQuCiAgICAgKgogICAgICogVGhlIGludGVybmFsIGZ1bmN0aW9uIHByb2R1Y2VzIGJyb2tlbiBvdXRwdXQgZm9yIG5vbiBBU0NJSSBkb21haW4gbmFtZXMKICAgICAqIChJRE4pIHdoZW4gdXNlZCB3aXRoIGxvY2FsZXMgb3RoZXIgdGhhbiAiQyIuCiAgICAgKgogICAgICogT24gdGhlIG90aGVyIGhhbmQsIGNVUkwgdW5kZXJzdGFuZHMgSUROIGNvcnJlY3RseSBvbmx5IHdoZW4gVVRGLTggbG9jYWxlCiAgICAgKiBpcyBjb25maWd1cmVkICgiQy5VVEYtOCIsICJlbl9VUy5VVEYtOCIsIGV0Yy4pLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9idWdzLnBocC5uZXQvYnVnLnBocD9pZD01MjkyMwogICAgICogQHNlZSBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wYXJzZS11cmwucGhwIzExNDgxNwogICAgICogQHNlZSBodHRwczovL2N1cmwuaGF4eC5zZS9saWJjdXJsL2MvQ1VSTE9QVF9VUkwuaHRtbCNFTkNPRElORwogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl8ZmFsc2UKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gcGFyc2Uoc3RyaW5nICR1cmwpCiAgICB7CiAgICAgICAgLy8gSWYgSVB2NgogICAgICAgICRwcmVmaXggPSAnJzsKICAgICAgICBpZiAocHJlZ19tYXRjaCgnJV4oLio6Ly9cW1swLTk6YS1mQS1GXStcXSkoLio/KSQlJywgJHVybCwgJG1hdGNoZXMpKSB7CiAgICAgICAgICAgIC8qKiBAdmFyIGFycmF5ezA6c3RyaW5nLCAxOnN0cmluZywgMjpzdHJpbmd9ICRtYXRjaGVzICovCiAgICAgICAgICAgICRwcmVmaXggPSAkbWF0Y2hlc1sxXTsKICAgICAgICAgICAgJHVybCA9ICRtYXRjaGVzWzJdOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICovCiAgICAgICAgJGVuY29kZWRVcmwgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soCiAgICAgICAgICAgICclW146L0A/Jj0jXSsldXNEJywKICAgICAgICAgICAgc3RhdGljIGZ1bmN0aW9uICgkbWF0Y2hlcykgewogICAgICAgICAgICAgICAgcmV0dXJuIHVybGVuY29kZSgkbWF0Y2hlc1swXSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICR1cmwKICAgICAgICApOwoKICAgICAgICAkcmVzdWx0ID0gcGFyc2VfdXJsKCRwcmVmaXguJGVuY29kZWRVcmwpOwoKICAgICAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGFycmF5X21hcCgndXJsZGVjb2RlJywgJHJlc3VsdCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5jb21wb3NlZENvbXBvbmVudHMgPT09IG51bGwpIHsKICAgICAgICAgICAgJHRoaXMtPmNvbXBvc2VkQ29tcG9uZW50cyA9IHNlbGY6OmNvbXBvc2VDb21wb25lbnRzKAogICAgICAgICAgICAgICAgJHRoaXMtPnNjaGVtZSwKICAgICAgICAgICAgICAgICR0aGlzLT5nZXRBdXRob3JpdHkoKSwKICAgICAgICAgICAgICAgICR0aGlzLT5wYXRoLAogICAgICAgICAgICAgICAgJHRoaXMtPnF1ZXJ5LAogICAgICAgICAgICAgICAgJHRoaXMtPmZyYWdtZW50CiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPmNvbXBvc2VkQ29tcG9uZW50czsKICAgIH0KCiAgICAvKioKICAgICAqIENvbXBvc2VzIGEgVVJJIHJlZmVyZW5jZSBzdHJpbmcgZnJvbSBpdHMgdmFyaW91cyBjb21wb25lbnRzLgogICAgICoKICAgICAqIFVzdWFsbHkgdGhpcyBtZXRob2QgZG9lcyBub3QgbmVlZCB0byBiZSBjYWxsZWQgbWFudWFsbHkgYnV0IGluc3RlYWQgaXMgdXNlZCBpbmRpcmVjdGx5IHZpYQogICAgICogYFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlOjpfX3RvU3RyaW5nYC4KICAgICAqCiAgICAgKiBQU1ItNyBVcmlJbnRlcmZhY2UgdHJlYXRzIGFuIGVtcHR5IGNvbXBvbmVudCB0aGUgc2FtZSBhcyBhIG1pc3NpbmcgY29tcG9uZW50IGFzCiAgICAgKiBnZXRRdWVyeSgpLCBnZXRGcmFnbWVudCgpIGV0Yy4gYWx3YXlzIHJldHVybiBhIHN0cmluZy4gVGhpcyBleHBsYWlucyB0aGUgc2xpZ2h0CiAgICAgKiBkaWZmZXJlbmNlIHRvIFJGQyAzOTg2IFNlY3Rpb24gNS4zLgogICAgICoKICAgICAqIEFub3RoZXIgYWRqdXN0bWVudCBpcyB0aGF0IHRoZSBhdXRob3JpdHkgc2VwYXJhdG9yIGlzIGFkZGVkIGV2ZW4gd2hlbiB0aGUgYXV0aG9yaXR5IGlzIG1pc3NpbmcvZW1wdHkKICAgICAqIGZvciB0aGUgImZpbGUiIHNjaGVtZS4gVGhpcyBpcyBiZWNhdXNlIFBIUCBzdHJlYW0gZnVuY3Rpb25zIGxpa2UgYGZpbGVfZ2V0X2NvbnRlbnRzYCBvbmx5IHdvcmsgd2l0aAogICAgICogYGZpbGU6Ly8vbXlmaWxlYCBidXQgbm90IHdpdGggYGZpbGU6L215ZmlsZWAgYWx0aG91Z2ggdGhleSBhcmUgZXF1aXZhbGVudCBhY2NvcmRpbmcgdG8gUkZDIDM5ODYuIEJ1dAogICAgICogYGZpbGU6Ly8vYCBpcyB0aGUgbW9yZSBjb21tb24gc3ludGF4IGZvciB0aGUgZmlsZSBzY2hlbWUgYW55d2F5IChDaHJvbWUgZm9yIGV4YW1wbGUgcmVkaXJlY3RzIHRvCiAgICAgKiB0aGF0IGZvcm1hdCkuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzM5ODYjc2VjdGlvbi01LjMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb21wb3NlQ29tcG9uZW50cyg/c3RyaW5nICRzY2hlbWUsID9zdHJpbmcgJGF1dGhvcml0eSwgc3RyaW5nICRwYXRoLCA/c3RyaW5nICRxdWVyeSwgP3N0cmluZyAkZnJhZ21lbnQpOiBzdHJpbmcKICAgIHsKICAgICAgICAkdXJpID0gJyc7CgogICAgICAgIC8vIHdlYWsgdHlwZSBjaGVja3MgdG8gYWxzbyBhY2NlcHQgbnVsbCB1bnRpbCB3ZSBjYW4gYWRkIHNjYWxhciB0eXBlIGhpbnRzCiAgICAgICAgaWYgKCRzY2hlbWUgIT0gJycpIHsKICAgICAgICAgICAgJHVyaSAuPSAkc2NoZW1lLic6JzsKICAgICAgICB9CgogICAgICAgIGlmICgkYXV0aG9yaXR5ICE9ICcnIHx8ICRzY2hlbWUgPT09ICdmaWxlJykgewogICAgICAgICAgICAkdXJpIC49ICcvLycuJGF1dGhvcml0eTsKICAgICAgICB9CgogICAgICAgIGlmICgkYXV0aG9yaXR5ICE9ICcnICYmICRwYXRoICE9ICcnICYmICRwYXRoWzBdICE9ICcvJykgewogICAgICAgICAgICAkcGF0aCA9ICcvJy4kcGF0aDsKICAgICAgICB9CgogICAgICAgICR1cmkgLj0gJHBhdGg7CgogICAgICAgIGlmICgkcXVlcnkgIT0gJycpIHsKICAgICAgICAgICAgJHVyaSAuPSAnPycuJHF1ZXJ5OwogICAgICAgIH0KCiAgICAgICAgaWYgKCRmcmFnbWVudCAhPSAnJykgewogICAgICAgICAgICAkdXJpIC49ICcjJy4kZnJhZ21lbnQ7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHVyaTsKICAgIH0KCiAgICAvKioKICAgICAqIFdoZXRoZXIgdGhlIFVSSSBoYXMgdGhlIGRlZmF1bHQgcG9ydCBvZiB0aGUgY3VycmVudCBzY2hlbWUuCiAgICAgKgogICAgICogYFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlOjpnZXRQb3J0YCBtYXkgcmV0dXJuIG51bGwgb3IgdGhlIHN0YW5kYXJkIHBvcnQuIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkCiAgICAgKiBpbmRlcGVuZGVudGx5IG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0RlZmF1bHRQb3J0KFVyaUludGVyZmFjZSAkdXJpKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdXJpLT5nZXRQb3J0KCkgPT09IG51bGwKICAgICAgICAgICAgfHwgKGlzc2V0KHNlbGY6OkRFRkFVTFRfUE9SVFNbJHVyaS0+Z2V0U2NoZW1lKCldKSAmJiAkdXJpLT5nZXRQb3J0KCkgPT09IHNlbGY6OkRFRkFVTFRfUE9SVFNbJHVyaS0+Z2V0U2NoZW1lKCldKTsKICAgIH0KCiAgICAvKioKICAgICAqIFdoZXRoZXIgdGhlIFVSSSBpcyBhYnNvbHV0ZSwgaS5lLiBpdCBoYXMgYSBzY2hlbWUuCiAgICAgKgogICAgICogQW4gaW5zdGFuY2Ugb2YgVXJpSW50ZXJmYWNlIGNhbiBlaXRoZXIgYmUgYW4gYWJzb2x1dGUgVVJJIG9yIGEgcmVsYXRpdmUgcmVmZXJlbmNlLiBUaGlzIG1ldGhvZCByZXR1cm5zIHRydWUKICAgICAqIGlmIGl0IGlzIHRoZSBmb3JtZXIuIEFuIGFic29sdXRlIFVSSSBoYXMgYSBzY2hlbWUuIEEgcmVsYXRpdmUgcmVmZXJlbmNlIGlzIHVzZWQgdG8gZXhwcmVzcyBhIFVSSSByZWxhdGl2ZQogICAgICogdG8gYW5vdGhlciBVUkksIHRoZSBiYXNlIFVSSS4gUmVsYXRpdmUgcmVmZXJlbmNlcyBjYW4gYmUgZGl2aWRlZCBpbnRvIHNldmVyYWwgZm9ybXM6CiAgICAgKiAtIG5ldHdvcmstcGF0aCByZWZlcmVuY2VzLCBlLmcuICcvL2V4YW1wbGUuY29tL3BhdGgnCiAgICAgKiAtIGFic29sdXRlLXBhdGggcmVmZXJlbmNlcywgZS5nLiAnL3BhdGgnCiAgICAgKiAtIHJlbGF0aXZlLXBhdGggcmVmZXJlbmNlcywgZS5nLiAnc3VicGF0aCcKICAgICAqCiAgICAgKiBAc2VlIFVyaTo6aXNOZXR3b3JrUGF0aFJlZmVyZW5jZQogICAgICogQHNlZSBVcmk6OmlzQWJzb2x1dGVQYXRoUmVmZXJlbmNlCiAgICAgKiBAc2VlIFVyaTo6aXNSZWxhdGl2ZVBhdGhSZWZlcmVuY2UKICAgICAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzQWJzb2x1dGUoVXJpSW50ZXJmYWNlICR1cmkpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR1cmktPmdldFNjaGVtZSgpICE9PSAnJzsKICAgIH0KCiAgICAvKioKICAgICAqIFdoZXRoZXIgdGhlIFVSSSBpcyBhIG5ldHdvcmstcGF0aCByZWZlcmVuY2UuCiAgICAgKgogICAgICogQSByZWxhdGl2ZSByZWZlcmVuY2UgdGhhdCBiZWdpbnMgd2l0aCB0d28gc2xhc2ggY2hhcmFjdGVycyBpcyB0ZXJtZWQgYW4gbmV0d29yay1wYXRoIHJlZmVyZW5jZS4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTQuMgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzTmV0d29ya1BhdGhSZWZlcmVuY2UoVXJpSW50ZXJmYWNlICR1cmkpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR1cmktPmdldFNjaGVtZSgpID09PSAnJyAmJiAkdXJpLT5nZXRBdXRob3JpdHkoKSAhPT0gJyc7CiAgICB9CgogICAgLyoqCiAgICAgKiBXaGV0aGVyIHRoZSBVUkkgaXMgYSBhYnNvbHV0ZS1wYXRoIHJlZmVyZW5jZS4KICAgICAqCiAgICAgKiBBIHJlbGF0aXZlIHJlZmVyZW5jZSB0aGF0IGJlZ2lucyB3aXRoIGEgc2luZ2xlIHNsYXNoIGNoYXJhY3RlciBpcyB0ZXJtZWQgYW4gYWJzb2x1dGUtcGF0aCByZWZlcmVuY2UuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzM5ODYjc2VjdGlvbi00LjIKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0Fic29sdXRlUGF0aFJlZmVyZW5jZShVcmlJbnRlcmZhY2UgJHVyaSk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHVyaS0+Z2V0U2NoZW1lKCkgPT09ICcnCiAgICAgICAgICAgICYmICR1cmktPmdldEF1dGhvcml0eSgpID09PSAnJwogICAgICAgICAgICAmJiBpc3NldCgkdXJpLT5nZXRQYXRoKClbMF0pCiAgICAgICAgICAgICYmICR1cmktPmdldFBhdGgoKVswXSA9PT0gJy8nOwogICAgfQoKICAgIC8qKgogICAgICogV2hldGhlciB0aGUgVVJJIGlzIGEgcmVsYXRpdmUtcGF0aCByZWZlcmVuY2UuCiAgICAgKgogICAgICogQSByZWxhdGl2ZSByZWZlcmVuY2UgdGhhdCBkb2VzIG5vdCBiZWdpbiB3aXRoIGEgc2xhc2ggY2hhcmFjdGVyIGlzIHRlcm1lZCBhIHJlbGF0aXZlLXBhdGggcmVmZXJlbmNlLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNC4yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNSZWxhdGl2ZVBhdGhSZWZlcmVuY2UoVXJpSW50ZXJmYWNlICR1cmkpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR1cmktPmdldFNjaGVtZSgpID09PSAnJwogICAgICAgICAgICAmJiAkdXJpLT5nZXRBdXRob3JpdHkoKSA9PT0gJycKICAgICAgICAgICAgJiYgKCFpc3NldCgkdXJpLT5nZXRQYXRoKClbMF0pIHx8ICR1cmktPmdldFBhdGgoKVswXSAhPT0gJy8nKTsKICAgIH0KCiAgICAvKioKICAgICAqIFdoZXRoZXIgdGhlIFVSSSBpcyBhIHNhbWUtZG9jdW1lbnQgcmVmZXJlbmNlLgogICAgICoKICAgICAqIEEgc2FtZS1kb2N1bWVudCByZWZlcmVuY2UgcmVmZXJzIHRvIGEgVVJJIHRoYXQgaXMsIGFzaWRlIGZyb20gaXRzIGZyYWdtZW50CiAgICAgKiBjb21wb25lbnQsIGlkZW50aWNhbCB0byB0aGUgYmFzZSBVUkkuIFdoZW4gbm8gYmFzZSBVUkkgaXMgZ2l2ZW4sIG9ubHkgYW4gZW1wdHkKICAgICAqIFVSSSByZWZlcmVuY2UgKGFwYXJ0IGZyb20gaXRzIGZyYWdtZW50KSBpcyBjb25zaWRlcmVkIGEgc2FtZS1kb2N1bWVudCByZWZlcmVuY2UuCiAgICAgKgogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAgICAgICR1cmkgIFRoZSBVUkkgdG8gY2hlY2sKICAgICAqIEBwYXJhbSBVcmlJbnRlcmZhY2V8bnVsbCAkYmFzZSBBbiBvcHRpb25hbCBiYXNlIFVSSSB0byBjb21wYXJlIGFnYWluc3QKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTQuNAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzU2FtZURvY3VtZW50UmVmZXJlbmNlKFVyaUludGVyZmFjZSAkdXJpLCA/VXJpSW50ZXJmYWNlICRiYXNlID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoJGJhc2UgIT09IG51bGwpIHsKICAgICAgICAgICAgJHVyaSA9IFVyaVJlc29sdmVyOjpyZXNvbHZlKCRiYXNlLCAkdXJpKTsKCiAgICAgICAgICAgIHJldHVybiAoJHVyaS0+Z2V0U2NoZW1lKCkgPT09ICRiYXNlLT5nZXRTY2hlbWUoKSkKICAgICAgICAgICAgICAgICYmICgkdXJpLT5nZXRBdXRob3JpdHkoKSA9PT0gJGJhc2UtPmdldEF1dGhvcml0eSgpKQogICAgICAgICAgICAgICAgJiYgKCR1cmktPmdldFBhdGgoKSA9PT0gJGJhc2UtPmdldFBhdGgoKSkKICAgICAgICAgICAgICAgICYmICgkdXJpLT5nZXRRdWVyeSgpID09PSAkYmFzZS0+Z2V0UXVlcnkoKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHVyaS0+Z2V0U2NoZW1lKCkgPT09ICcnICYmICR1cmktPmdldEF1dGhvcml0eSgpID09PSAnJyAmJiAkdXJpLT5nZXRQYXRoKCkgPT09ICcnICYmICR1cmktPmdldFF1ZXJ5KCkgPT09ICcnOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5ldyBVUkkgd2l0aCBhIHNwZWNpZmljIHF1ZXJ5IHN0cmluZyB2YWx1ZSByZW1vdmVkLgogICAgICoKICAgICAqIEFueSBleGlzdGluZyBxdWVyeSBzdHJpbmcgdmFsdWVzIHRoYXQgZXhhY3RseSBtYXRjaCB0aGUgcHJvdmlkZWQga2V5IGFyZQogICAgICogcmVtb3ZlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gVXJpSW50ZXJmYWNlICR1cmkgVVJJIHRvIHVzZSBhcyBhIGJhc2UuCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICRrZXkgUXVlcnkgc3RyaW5nIGtleSB0byByZW1vdmUuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gd2l0aG91dFF1ZXJ5VmFsdWUoVXJpSW50ZXJmYWNlICR1cmksIHN0cmluZyAka2V5KTogVXJpSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJHJlc3VsdCA9IHNlbGY6OmdldEZpbHRlcmVkUXVlcnlTdHJpbmcoJHVyaSwgWyRrZXldKTsKCiAgICAgICAgcmV0dXJuICR1cmktPndpdGhRdWVyeShpbXBsb2RlKCcmJywgJHJlc3VsdCkpOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5ldyBVUkkgd2l0aCBhIHNwZWNpZmljIHF1ZXJ5IHN0cmluZyB2YWx1ZS4KICAgICAqCiAgICAgKiBBbnkgZXhpc3RpbmcgcXVlcnkgc3RyaW5nIHZhbHVlcyB0aGF0IGV4YWN0bHkgbWF0Y2ggdGhlIHByb3ZpZGVkIGtleSBhcmUKICAgICAqIHJlbW92ZWQgYW5kIHJlcGxhY2VkIHdpdGggdGhlIGdpdmVuIGtleSB2YWx1ZSBwYWlyLgogICAgICoKICAgICAqIEEgdmFsdWUgb2YgbnVsbCB3aWxsIHNldCB0aGUgcXVlcnkgc3RyaW5nIGtleSB3aXRob3V0IGEgdmFsdWUsIGUuZy4gImtleSIKICAgICAqIGluc3RlYWQgb2YgImtleT12YWx1ZSIuCiAgICAgKgogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAkdXJpICAgVVJJIHRvIHVzZSBhcyBhIGJhc2UuCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICRrZXkgICBLZXkgdG8gc2V0LgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICAkdmFsdWUgVmFsdWUgdG8gc2V0CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gd2l0aFF1ZXJ5VmFsdWUoVXJpSW50ZXJmYWNlICR1cmksIHN0cmluZyAka2V5LCA/c3RyaW5nICR2YWx1ZSk6IFVyaUludGVyZmFjZQogICAgewogICAgICAgICRyZXN1bHQgPSBzZWxmOjpnZXRGaWx0ZXJlZFF1ZXJ5U3RyaW5nKCR1cmksIFska2V5XSk7CgogICAgICAgICRyZXN1bHRbXSA9IHNlbGY6OmdlbmVyYXRlUXVlcnlTdHJpbmcoJGtleSwgJHZhbHVlKTsKCiAgICAgICAgcmV0dXJuICR1cmktPndpdGhRdWVyeShpbXBsb2RlKCcmJywgJHJlc3VsdCkpOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5ldyBVUkkgd2l0aCBtdWx0aXBsZSBzcGVjaWZpYyBxdWVyeSBzdHJpbmcgdmFsdWVzLgogICAgICoKICAgICAqIEl0IGhhcyB0aGUgc2FtZSBiZWhhdmlvciBhcyB3aXRoUXVlcnlWYWx1ZSgpIGJ1dCBmb3IgYW4gYXNzb2NpYXRpdmUgYXJyYXkgb2Yga2V5ID0+IHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSBVcmlJbnRlcmZhY2UgICAgJHVyaSAgICAgICAgICAgVVJJIHRvIHVzZSBhcyBhIGJhc2UuCiAgICAgKiBAcGFyYW0gKHN0cmluZ3xudWxsKVtdICRrZXlWYWx1ZUFycmF5IEFzc29jaWF0aXZlIGFycmF5IG9mIGtleSBhbmQgdmFsdWVzCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gd2l0aFF1ZXJ5VmFsdWVzKFVyaUludGVyZmFjZSAkdXJpLCBhcnJheSAka2V5VmFsdWVBcnJheSk6IFVyaUludGVyZmFjZQogICAgewogICAgICAgICRyZXN1bHQgPSBzZWxmOjpnZXRGaWx0ZXJlZFF1ZXJ5U3RyaW5nKCR1cmksIGFycmF5X2tleXMoJGtleVZhbHVlQXJyYXkpKTsKCiAgICAgICAgZm9yZWFjaCAoJGtleVZhbHVlQXJyYXkgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgJHJlc3VsdFtdID0gc2VsZjo6Z2VuZXJhdGVRdWVyeVN0cmluZygoc3RyaW5nKSAka2V5LCAkdmFsdWUgIT09IG51bGwgPyAoc3RyaW5nKSAkdmFsdWUgOiBudWxsKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdXJpLT53aXRoUXVlcnkoaW1wbG9kZSgnJicsICRyZXN1bHQpKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBVUkkgZnJvbSBhIGhhc2ggb2YgYHBhcnNlX3VybGAgY29tcG9uZW50cy4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBhcnNlLXVybC5waHAKICAgICAqCiAgICAgKiBAdGhyb3dzIE1hbGZvcm1lZFVyaUV4Y2VwdGlvbiBJZiB0aGUgY29tcG9uZW50cyBkbyBub3QgZm9ybSBhIHZhbGlkIFVSSS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tUGFydHMoYXJyYXkgJHBhcnRzKTogVXJpSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJHVyaSA9IG5ldyBzZWxmKCk7CiAgICAgICAgJHVyaS0+YXBwbHlQYXJ0cygkcGFydHMpOwogICAgICAgICR1cmktPnZhbGlkYXRlU3RhdGUoKTsKCiAgICAgICAgcmV0dXJuICR1cmk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFNjaGVtZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnNjaGVtZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXV0aG9yaXR5KCk6IHN0cmluZwogICAgewogICAgICAgICRhdXRob3JpdHkgPSAkdGhpcy0+aG9zdDsKICAgICAgICBpZiAoJHRoaXMtPnVzZXJJbmZvICE9PSAnJykgewogICAgICAgICAgICAkYXV0aG9yaXR5ID0gJHRoaXMtPnVzZXJJbmZvLidAJy4kYXV0aG9yaXR5OwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT5wb3J0ICE9PSBudWxsKSB7CiAgICAgICAgICAgICRhdXRob3JpdHkgLj0gJzonLiR0aGlzLT5wb3J0OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRhdXRob3JpdHk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFVzZXJJbmZvKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dXNlckluZm87CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEhvc3QoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5ob3N0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQb3J0KCk6ID9pbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnBvcnQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFBhdGgoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5wYXRoOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRRdWVyeSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnF1ZXJ5OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGcmFnbWVudCgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmZyYWdtZW50OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoU2NoZW1lKCRzY2hlbWUpOiBVcmlJbnRlcmZhY2UKICAgIHsKICAgICAgICAkc2NoZW1lID0gJHRoaXMtPmZpbHRlclNjaGVtZSgkc2NoZW1lKTsKCiAgICAgICAgaWYgKCR0aGlzLT5zY2hlbWUgPT09ICRzY2hlbWUpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgICRuZXctPnNjaGVtZSA9ICRzY2hlbWU7CiAgICAgICAgJG5ldy0+Y29tcG9zZWRDb21wb25lbnRzID0gbnVsbDsKICAgICAgICAkbmV3LT5yZW1vdmVEZWZhdWx0UG9ydCgpOwogICAgICAgICRuZXctPnZhbGlkYXRlU3RhdGUoKTsKCiAgICAgICAgcmV0dXJuICRuZXc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhVc2VySW5mbygkdXNlciwgJHBhc3N3b3JkID0gbnVsbCk6IFVyaUludGVyZmFjZQogICAgewogICAgICAgICRpbmZvID0gJHRoaXMtPmZpbHRlclVzZXJJbmZvQ29tcG9uZW50KCR1c2VyKTsKICAgICAgICBpZiAoJHBhc3N3b3JkICE9PSBudWxsKSB7CiAgICAgICAgICAgICRpbmZvIC49ICc6Jy4kdGhpcy0+ZmlsdGVyVXNlckluZm9Db21wb25lbnQoJHBhc3N3b3JkKTsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+dXNlckluZm8gPT09ICRpbmZvKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgICRuZXcgPSBjbG9uZSAkdGhpczsKICAgICAgICAkbmV3LT51c2VySW5mbyA9ICRpbmZvOwogICAgICAgICRuZXctPmNvbXBvc2VkQ29tcG9uZW50cyA9IG51bGw7CiAgICAgICAgJG5ldy0+dmFsaWRhdGVTdGF0ZSgpOwoKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEhvc3QoJGhvc3QpOiBVcmlJbnRlcmZhY2UKICAgIHsKICAgICAgICAkaG9zdCA9ICR0aGlzLT5maWx0ZXJIb3N0KCRob3N0KTsKCiAgICAgICAgaWYgKCR0aGlzLT5ob3N0ID09PSAkaG9zdCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+aG9zdCA9ICRob3N0OwogICAgICAgICRuZXctPmNvbXBvc2VkQ29tcG9uZW50cyA9IG51bGw7CiAgICAgICAgJG5ldy0+dmFsaWRhdGVTdGF0ZSgpOwoKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFBvcnQoJHBvcnQpOiBVcmlJbnRlcmZhY2UKICAgIHsKICAgICAgICAkcG9ydCA9ICR0aGlzLT5maWx0ZXJQb3J0KCRwb3J0KTsKCiAgICAgICAgaWYgKCR0aGlzLT5wb3J0ID09PSAkcG9ydCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+cG9ydCA9ICRwb3J0OwogICAgICAgICRuZXctPmNvbXBvc2VkQ29tcG9uZW50cyA9IG51bGw7CiAgICAgICAgJG5ldy0+cmVtb3ZlRGVmYXVsdFBvcnQoKTsKICAgICAgICAkbmV3LT52YWxpZGF0ZVN0YXRlKCk7CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUGF0aCgkcGF0aCk6IFVyaUludGVyZmFjZQogICAgewogICAgICAgICRwYXRoID0gJHRoaXMtPmZpbHRlclBhdGgoJHBhdGgpOwoKICAgICAgICBpZiAoJHRoaXMtPnBhdGggPT09ICRwYXRoKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgICRuZXcgPSBjbG9uZSAkdGhpczsKICAgICAgICAkbmV3LT5wYXRoID0gJHBhdGg7CiAgICAgICAgJG5ldy0+Y29tcG9zZWRDb21wb25lbnRzID0gbnVsbDsKICAgICAgICAkbmV3LT52YWxpZGF0ZVN0YXRlKCk7CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUXVlcnkoJHF1ZXJ5KTogVXJpSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJHF1ZXJ5ID0gJHRoaXMtPmZpbHRlclF1ZXJ5QW5kRnJhZ21lbnQoJHF1ZXJ5KTsKCiAgICAgICAgaWYgKCR0aGlzLT5xdWVyeSA9PT0gJHF1ZXJ5KSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgICRuZXcgPSBjbG9uZSAkdGhpczsKICAgICAgICAkbmV3LT5xdWVyeSA9ICRxdWVyeTsKICAgICAgICAkbmV3LT5jb21wb3NlZENvbXBvbmVudHMgPSBudWxsOwoKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEZyYWdtZW50KCRmcmFnbWVudCk6IFVyaUludGVyZmFjZQogICAgewogICAgICAgICRmcmFnbWVudCA9ICR0aGlzLT5maWx0ZXJRdWVyeUFuZEZyYWdtZW50KCRmcmFnbWVudCk7CgogICAgICAgIGlmICgkdGhpcy0+ZnJhZ21lbnQgPT09ICRmcmFnbWVudCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+ZnJhZ21lbnQgPSAkZnJhZ21lbnQ7CiAgICAgICAgJG5ldy0+Y29tcG9zZWRDb21wb25lbnRzID0gbnVsbDsKCiAgICAgICAgcmV0dXJuICRuZXc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fX3RvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBcHBseSBwYXJzZV91cmwgcGFydHMgdG8gYSBVUkkuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRwYXJ0cyBBcnJheSBvZiBwYXJzZV91cmwgcGFydHMgdG8gYXBwbHkuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gYXBwbHlQYXJ0cyhhcnJheSAkcGFydHMpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPnNjaGVtZSA9IGlzc2V0KCRwYXJ0c1snc2NoZW1lJ10pCiAgICAgICAgICAgID8gJHRoaXMtPmZpbHRlclNjaGVtZSgkcGFydHNbJ3NjaGVtZSddKQogICAgICAgICAgICA6ICcnOwogICAgICAgICR0aGlzLT51c2VySW5mbyA9IGlzc2V0KCRwYXJ0c1sndXNlciddKQogICAgICAgICAgICA/ICR0aGlzLT5maWx0ZXJVc2VySW5mb0NvbXBvbmVudCgkcGFydHNbJ3VzZXInXSkKICAgICAgICAgICAgOiAnJzsKICAgICAgICAkdGhpcy0+aG9zdCA9IGlzc2V0KCRwYXJ0c1snaG9zdCddKQogICAgICAgICAgICA/ICR0aGlzLT5maWx0ZXJIb3N0KCRwYXJ0c1snaG9zdCddKQogICAgICAgICAgICA6ICcnOwogICAgICAgICR0aGlzLT5wb3J0ID0gaXNzZXQoJHBhcnRzWydwb3J0J10pCiAgICAgICAgICAgID8gJHRoaXMtPmZpbHRlclBvcnQoJHBhcnRzWydwb3J0J10pCiAgICAgICAgICAgIDogbnVsbDsKICAgICAgICAkdGhpcy0+cGF0aCA9IGlzc2V0KCRwYXJ0c1sncGF0aCddKQogICAgICAgICAgICA/ICR0aGlzLT5maWx0ZXJQYXRoKCRwYXJ0c1sncGF0aCddKQogICAgICAgICAgICA6ICcnOwogICAgICAgICR0aGlzLT5xdWVyeSA9IGlzc2V0KCRwYXJ0c1sncXVlcnknXSkKICAgICAgICAgICAgPyAkdGhpcy0+ZmlsdGVyUXVlcnlBbmRGcmFnbWVudCgkcGFydHNbJ3F1ZXJ5J10pCiAgICAgICAgICAgIDogJyc7CiAgICAgICAgJHRoaXMtPmZyYWdtZW50ID0gaXNzZXQoJHBhcnRzWydmcmFnbWVudCddKQogICAgICAgICAgICA/ICR0aGlzLT5maWx0ZXJRdWVyeUFuZEZyYWdtZW50KCRwYXJ0c1snZnJhZ21lbnQnXSkKICAgICAgICAgICAgOiAnJzsKICAgICAgICBpZiAoaXNzZXQoJHBhcnRzWydwYXNzJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT51c2VySW5mbyAuPSAnOicuJHRoaXMtPmZpbHRlclVzZXJJbmZvQ29tcG9uZW50KCRwYXJ0c1sncGFzcyddKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5yZW1vdmVEZWZhdWx0UG9ydCgpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICRzY2hlbWUKICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gSWYgdGhlIHNjaGVtZSBpcyBpbnZhbGlkLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZpbHRlclNjaGVtZSgkc2NoZW1lKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCFpc19zdHJpbmcoJHNjaGVtZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1NjaGVtZSBtdXN0IGJlIGEgc3RyaW5nJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gXHN0cnRyKCRzY2hlbWUsICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicsICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICRjb21wb25lbnQKICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gSWYgdGhlIHVzZXIgaW5mbyBpcyBpbnZhbGlkLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZpbHRlclVzZXJJbmZvQ29tcG9uZW50KCRjb21wb25lbnQpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoIWlzX3N0cmluZygkY29tcG9uZW50KSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVXNlciBpbmZvIG11c3QgYmUgYSBzdHJpbmcnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBwcmVnX3JlcGxhY2VfY2FsbGJhY2soCiAgICAgICAgICAgICcvKD86W14lJy5zZWxmOjpDSEFSX1VOUkVTRVJWRUQuc2VsZjo6Q0hBUl9TVUJfREVMSU1TLiddK3wlKD8hW0EtRmEtZjAtOV17Mn0pKS8nLAogICAgICAgICAgICBbJHRoaXMsICdyYXd1cmxlbmNvZGVNYXRjaFplcm8nXSwKICAgICAgICAgICAgJGNvbXBvbmVudAogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGhvc3QKICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gSWYgdGhlIGhvc3QgaXMgaW52YWxpZC4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBmaWx0ZXJIb3N0KCRob3N0KTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCFpc19zdHJpbmcoJGhvc3QpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdIb3N0IG11c3QgYmUgYSBzdHJpbmcnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBcc3RydHIoJGhvc3QsICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicsICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICRwb3J0CiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIElmIHRoZSBwb3J0IGlzIGludmFsaWQuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZmlsdGVyUG9ydCgkcG9ydCk6ID9pbnQKICAgIHsKICAgICAgICBpZiAoJHBvcnQgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAkcG9ydCA9IChpbnQpICRwb3J0OwogICAgICAgIGlmICgwID4gJHBvcnQgfHwgMHhGRkZGIDwgJHBvcnQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICBzcHJpbnRmKCdJbnZhbGlkIHBvcnQ6ICVkLiBNdXN0IGJlIGJldHdlZW4gMCBhbmQgNjU1MzUnLCAkcG9ydCkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcG9ydDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSAoc3RyaW5nfGludClbXSAka2V5cwogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nW10KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZ2V0RmlsdGVyZWRRdWVyeVN0cmluZyhVcmlJbnRlcmZhY2UgJHVyaSwgYXJyYXkgJGtleXMpOiBhcnJheQogICAgewogICAgICAgICRjdXJyZW50ID0gJHVyaS0+Z2V0UXVlcnkoKTsKCiAgICAgICAgaWYgKCRjdXJyZW50ID09PSAnJykgewogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgfQoKICAgICAgICAkZGVjb2RlZEtleXMgPSBhcnJheV9tYXAoZnVuY3Rpb24gKCRrKTogc3RyaW5nIHsKICAgICAgICAgICAgcmV0dXJuIHJhd3VybGRlY29kZSgoc3RyaW5nKSAkayk7CiAgICAgICAgfSwgJGtleXMpOwoKICAgICAgICByZXR1cm4gYXJyYXlfZmlsdGVyKGV4cGxvZGUoJyYnLCAkY3VycmVudCksIGZ1bmN0aW9uICgkcGFydCkgdXNlICgkZGVjb2RlZEtleXMpIHsKICAgICAgICAgICAgcmV0dXJuICFpbl9hcnJheShyYXd1cmxkZWNvZGUoZXhwbG9kZSgnPScsICRwYXJ0KVswXSksICRkZWNvZGVkS2V5cywgdHJ1ZSk7CiAgICAgICAgfSk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZ2VuZXJhdGVRdWVyeVN0cmluZyhzdHJpbmcgJGtleSwgP3N0cmluZyAkdmFsdWUpOiBzdHJpbmcKICAgIHsKICAgICAgICAvLyBRdWVyeSBzdHJpbmcgc2VwYXJhdG9ycyAoIj0iLCAiJiIpIGFuZCBsaXRlcmFsIHBsdXMgc2lnbnMgKCIrIikgd2l0aGluIHRoZQogICAgICAgIC8vIGtleSBvciB2YWx1ZSBuZWVkIHRvIGJlIGVuY29kZWQKICAgICAgICAvLyAod2hpbGUgcHJldmVudGluZyBkb3VibGUtZW5jb2RpbmcpIGJlZm9yZSBzZXR0aW5nIHRoZSBxdWVyeSBzdHJpbmcuIEFsbCBvdGhlcgogICAgICAgIC8vIGNoYXJzIHRoYXQgbmVlZCBwZXJjZW50LWVuY29kaW5nIHdpbGwgYmUgZW5jb2RlZCBieSB3aXRoUXVlcnkoKS4KICAgICAgICAkcXVlcnlTdHJpbmcgPSBzdHJ0cigka2V5LCBzZWxmOjpRVUVSWV9TRVBBUkFUT1JTX1JFUExBQ0VNRU5UKTsKCiAgICAgICAgaWYgKCR2YWx1ZSAhPT0gbnVsbCkgewogICAgICAgICAgICAkcXVlcnlTdHJpbmcgLj0gJz0nLnN0cnRyKCR2YWx1ZSwgc2VsZjo6UVVFUllfU0VQQVJBVE9SU19SRVBMQUNFTUVOVCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHF1ZXJ5U3RyaW5nOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcmVtb3ZlRGVmYXVsdFBvcnQoKTogdm9pZAogICAgewogICAgICAgIGlmICgkdGhpcy0+cG9ydCAhPT0gbnVsbCAmJiBzZWxmOjppc0RlZmF1bHRQb3J0KCR0aGlzKSkgewogICAgICAgICAgICAkdGhpcy0+cG9ydCA9IG51bGw7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRmlsdGVycyB0aGUgcGF0aCBvZiBhIFVSSQogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkcGF0aAogICAgICoKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiB0aGUgcGF0aCBpcyBpbnZhbGlkLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZpbHRlclBhdGgoJHBhdGgpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoIWlzX3N0cmluZygkcGF0aCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1BhdGggbXVzdCBiZSBhIHN0cmluZycpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHByZWdfcmVwbGFjZV9jYWxsYmFjaygKICAgICAgICAgICAgJy8oPzpbXicuc2VsZjo6Q0hBUl9VTlJFU0VSVkVELnNlbGY6OkNIQVJfU1VCX0RFTElNUy4nJTpAXC9dKyt8JSg/IVtBLUZhLWYwLTldezJ9KSkvJywKICAgICAgICAgICAgWyR0aGlzLCAncmF3dXJsZW5jb2RlTWF0Y2haZXJvJ10sCiAgICAgICAgICAgICRwYXRoCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEZpbHRlcnMgdGhlIHF1ZXJ5IHN0cmluZyBvciBmcmFnbWVudCBvZiBhIFVSSS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHN0cgogICAgICoKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiB0aGUgcXVlcnkgb3IgZnJhZ21lbnQgaXMgaW52YWxpZC4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBmaWx0ZXJRdWVyeUFuZEZyYWdtZW50KCRzdHIpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoIWlzX3N0cmluZygkc3RyKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignUXVlcnkgYW5kIGZyYWdtZW50IG11c3QgYmUgYSBzdHJpbmcnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBwcmVnX3JlcGxhY2VfY2FsbGJhY2soCiAgICAgICAgICAgICcvKD86W14nLnNlbGY6OkNIQVJfVU5SRVNFUlZFRC5zZWxmOjpDSEFSX1NVQl9ERUxJTVMuJyU6QFwvXD9dKyt8JSg/IVtBLUZhLWYwLTldezJ9KSkvJywKICAgICAgICAgICAgWyR0aGlzLCAncmF3dXJsZW5jb2RlTWF0Y2haZXJvJ10sCiAgICAgICAgICAgICRzdHIKICAgICAgICApOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcmF3dXJsZW5jb2RlTWF0Y2haZXJvKGFycmF5ICRtYXRjaCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiByYXd1cmxlbmNvZGUoJG1hdGNoWzBdKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHZhbGlkYXRlU3RhdGUoKTogdm9pZAogICAgewogICAgICAgIGlmICgkdGhpcy0+aG9zdCA9PT0gJycgJiYgKCR0aGlzLT5zY2hlbWUgPT09ICdodHRwJyB8fCAkdGhpcy0+c2NoZW1lID09PSAnaHR0cHMnKSkgewogICAgICAgICAgICAkdGhpcy0+aG9zdCA9IHNlbGY6OkhUVFBfREVGQVVMVF9IT1NUOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT5nZXRBdXRob3JpdHkoKSA9PT0gJycpIHsKICAgICAgICAgICAgaWYgKDAgPT09IHN0cnBvcygkdGhpcy0+cGF0aCwgJy8vJykpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBNYWxmb3JtZWRVcmlFeGNlcHRpb24oJ1RoZSBwYXRoIG9mIGEgVVJJIHdpdGhvdXQgYW4gYXV0aG9yaXR5IG11c3Qgbm90IHN0YXJ0IHdpdGggdHdvIHNsYXNoZXMgIi8vIicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkdGhpcy0+c2NoZW1lID09PSAnJyAmJiBmYWxzZSAhPT0gc3RycG9zKGV4cGxvZGUoJy8nLCAkdGhpcy0+cGF0aCwgMilbMF0sICc6JykpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBNYWxmb3JtZWRVcmlFeGNlcHRpb24oJ0EgcmVsYXRpdmUgVVJJIG11c3Qgbm90IGhhdmUgYSBwYXRoIGJlZ2lubmluZyB3aXRoIGEgc2VnbWVudCBjb250YWluaW5nIGEgY29sb24nKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/UriComparator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZTsKCi8qKgogKiBQcm92aWRlcyBtZXRob2RzIHRvIGRldGVybWluZSBpZiBhIG1vZGlmaWVkIFVSTCBzaG91bGQgYmUgY29uc2lkZXJlZCBjcm9zcy1vcmlnaW4uCiAqCiAqIEBhdXRob3IgR3JhaGFtIENhbXBiZWxsCiAqLwpmaW5hbCBjbGFzcyBVcmlDb21wYXJhdG9yCnsKICAgIC8qKgogICAgICogRGV0ZXJtaW5lcyBpZiBhIG1vZGlmaWVkIFVSTCBzaG91bGQgYmUgY29uc2lkZXJlZCBjcm9zcy1vcmlnaW4gd2l0aAogICAgICogcmVzcGVjdCB0byBhbiBvcmlnaW5hbCBVUkwuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNDcm9zc09yaWdpbihVcmlJbnRlcmZhY2UgJG9yaWdpbmFsLCBVcmlJbnRlcmZhY2UgJG1vZGlmaWVkKTogYm9vbAogICAgewogICAgICAgIGlmIChcc3RyY2FzZWNtcCgkb3JpZ2luYWwtPmdldEhvc3QoKSwgJG1vZGlmaWVkLT5nZXRIb3N0KCkpICE9PSAwKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRvcmlnaW5hbC0+Z2V0U2NoZW1lKCkgIT09ICRtb2RpZmllZC0+Z2V0U2NoZW1lKCkpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICBpZiAoc2VsZjo6Y29tcHV0ZVBvcnQoJG9yaWdpbmFsKSAhPT0gc2VsZjo6Y29tcHV0ZVBvcnQoJG1vZGlmaWVkKSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBjb21wdXRlUG9ydChVcmlJbnRlcmZhY2UgJHVyaSk6IGludAogICAgewogICAgICAgICRwb3J0ID0gJHVyaS0+Z2V0UG9ydCgpOwoKICAgICAgICBpZiAobnVsbCAhPT0gJHBvcnQpIHsKICAgICAgICAgICAgcmV0dXJuICRwb3J0OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICdodHRwcycgPT09ICR1cmktPmdldFNjaGVtZSgpID8gNDQzIDogODA7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICAgICAgLy8gY2Fubm90IGJlIGluc3RhbnRpYXRlZAogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/UriNormalizer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZTsKCi8qKgogKiBQcm92aWRlcyBtZXRob2RzIHRvIG5vcm1hbGl6ZSBhbmQgY29tcGFyZSBVUklzLgogKgogKiBAYXV0aG9yIFRvYmlhcyBTY2h1bHR6ZQogKgogKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTYKICovCmZpbmFsIGNsYXNzIFVyaU5vcm1hbGl6ZXIKewogICAgLyoqCiAgICAgKiBEZWZhdWx0IG5vcm1hbGl6YXRpb25zIHdoaWNoIG9ubHkgaW5jbHVkZSB0aGUgb25lcyB0aGF0IHByZXNlcnZlIHNlbWFudGljcy4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFBSRVNFUlZJTkdfTk9STUFMSVpBVElPTlMgPQogICAgICAgIHNlbGY6OkNBUElUQUxJWkVfUEVSQ0VOVF9FTkNPRElORyB8CiAgICAgICAgc2VsZjo6REVDT0RFX1VOUkVTRVJWRURfQ0hBUkFDVEVSUyB8CiAgICAgICAgc2VsZjo6Q09OVkVSVF9FTVBUWV9QQVRIIHwKICAgICAgICBzZWxmOjpSRU1PVkVfREVGQVVMVF9IT1NUIHwKICAgICAgICBzZWxmOjpSRU1PVkVfREVGQVVMVF9QT1JUIHwKICAgICAgICBzZWxmOjpSRU1PVkVfRE9UX1NFR01FTlRTOwoKICAgIC8qKgogICAgICogQWxsIGxldHRlcnMgd2l0aGluIGEgcGVyY2VudC1lbmNvZGluZyB0cmlwbGV0IChlLmcuLCAiJTNBIikgYXJlIGNhc2UtaW5zZW5zaXRpdmUsIGFuZCBzaG91bGQgYmUgY2FwaXRhbGl6ZWQuCiAgICAgKgogICAgICogRXhhbXBsZTogaHR0cDovL2V4YW1wbGUub3JnL2ElYzIlYjFiIOKGkiBodHRwOi8vZXhhbXBsZS5vcmcvYSVDMiVCMWIKICAgICAqLwogICAgcHVibGljIGNvbnN0IENBUElUQUxJWkVfUEVSQ0VOVF9FTkNPRElORyA9IDE7CgogICAgLyoqCiAgICAgKiBEZWNvZGVzIHBlcmNlbnQtZW5jb2RlZCBvY3RldHMgb2YgdW5yZXNlcnZlZCBjaGFyYWN0ZXJzLgogICAgICoKICAgICAqIEZvciBjb25zaXN0ZW5jeSwgcGVyY2VudC1lbmNvZGVkIG9jdGV0cyBpbiB0aGUgcmFuZ2VzIG9mIEFMUEhBICglNDHigJMlNUEgYW5kICU2MeKAkyU3QSksIERJR0lUICglMzDigJMlMzkpLAogICAgICogaHlwaGVuICglMkQpLCBwZXJpb2QgKCUyRSksIHVuZGVyc2NvcmUgKCU1RiksIG9yIHRpbGRlICglN0UpIHNob3VsZCBub3QgYmUgY3JlYXRlZCBieSBVUkkgcHJvZHVjZXJzIGFuZCwKICAgICAqIHdoZW4gZm91bmQgaW4gYSBVUkksIHNob3VsZCBiZSBkZWNvZGVkIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgdW5yZXNlcnZlZCBjaGFyYWN0ZXJzIGJ5IFVSSSBub3JtYWxpemVycy4KICAgICAqCiAgICAgKiBFeGFtcGxlOiBodHRwOi8vZXhhbXBsZS5vcmcvJTdFdXNlcm4lNjFtZS8g4oaSIGh0dHA6Ly9leGFtcGxlLm9yZy9+dXNlcm5hbWUvCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBERUNPREVfVU5SRVNFUlZFRF9DSEFSQUNURVJTID0gMjsKCiAgICAvKioKICAgICAqIENvbnZlcnRzIHRoZSBlbXB0eSBwYXRoIHRvICIvIiBmb3IgaHR0cCBhbmQgaHR0cHMgVVJJcy4KICAgICAqCiAgICAgKiBFeGFtcGxlOiBodHRwOi8vZXhhbXBsZS5vcmcg4oaSIGh0dHA6Ly9leGFtcGxlLm9yZy8KICAgICAqLwogICAgcHVibGljIGNvbnN0IENPTlZFUlRfRU1QVFlfUEFUSCA9IDQ7CgogICAgLyoqCiAgICAgKiBSZW1vdmVzIHRoZSBkZWZhdWx0IGhvc3Qgb2YgdGhlIGdpdmVuIFVSSSBzY2hlbWUgZnJvbSB0aGUgVVJJLgogICAgICoKICAgICAqIE9ubHkgdGhlICJmaWxlIiBzY2hlbWUgZGVmaW5lcyB0aGUgZGVmYXVsdCBob3N0ICJsb2NhbGhvc3QiLgogICAgICogQWxsIG9mIGBmaWxlOi9teWZpbGVgLCBgZmlsZTovLy9teWZpbGVgLCBhbmQgYGZpbGU6Ly9sb2NhbGhvc3QvbXlmaWxlYAogICAgICogYXJlIGVxdWl2YWxlbnQgYWNjb3JkaW5nIHRvIFJGQyAzOTg2LiBUaGUgZmlyc3QgZm9ybWF0IGlzIG5vdCBhY2NlcHRlZAogICAgICogYnkgUEhQcyBzdHJlYW0gZnVuY3Rpb25zIGFuZCB0aHVzIGFscmVhZHkgbm9ybWFsaXplZCBpbXBsaWNpdGx5IHRvIHRoZQogICAgICogc2Vjb25kIGZvcm1hdCBpbiB0aGUgVXJpIGNsYXNzLiBTZWUgYEd1enpsZUh0dHBcUHNyN1xVcmk6OmNvbXBvc2VDb21wb25lbnRzYC4KICAgICAqCiAgICAgKiBFeGFtcGxlOiBmaWxlOi8vbG9jYWxob3N0L215ZmlsZSDihpIgZmlsZTovLy9teWZpbGUKICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFTU9WRV9ERUZBVUxUX0hPU1QgPSA4OwoKICAgIC8qKgogICAgICogUmVtb3ZlcyB0aGUgZGVmYXVsdCBwb3J0IG9mIHRoZSBnaXZlbiBVUkkgc2NoZW1lIGZyb20gdGhlIFVSSS4KICAgICAqCiAgICAgKiBFeGFtcGxlOiBodHRwOi8vZXhhbXBsZS5vcmc6ODAvIOKGkiBodHRwOi8vZXhhbXBsZS5vcmcvCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRU1PVkVfREVGQVVMVF9QT1JUID0gMTY7CgogICAgLyoqCiAgICAgKiBSZW1vdmVzIHVubmVjZXNzYXJ5IGRvdC1zZWdtZW50cy4KICAgICAqCiAgICAgKiBEb3Qtc2VnbWVudHMgaW4gcmVsYXRpdmUtcGF0aCByZWZlcmVuY2VzIGFyZSBub3QgcmVtb3ZlZCBhcyBpdCB3b3VsZAogICAgICogY2hhbmdlIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIFVSSSByZWZlcmVuY2UuCiAgICAgKgogICAgICogRXhhbXBsZTogaHR0cDovL2V4YW1wbGUub3JnLy4uL2EvYi8uLi9jLy4vZC5odG1sIOKGkiBodHRwOi8vZXhhbXBsZS5vcmcvYS9jL2QuaHRtbAogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVNT1ZFX0RPVF9TRUdNRU5UUyA9IDMyOwoKICAgIC8qKgogICAgICogUGF0aHMgd2hpY2ggaW5jbHVkZSB0d28gb3IgbW9yZSBhZGphY2VudCBzbGFzaGVzIGFyZSBjb252ZXJ0ZWQgdG8gb25lLgogICAgICoKICAgICAqIFdlYnNlcnZlcnMgdXN1YWxseSBpZ25vcmUgZHVwbGljYXRlIHNsYXNoZXMgYW5kIHRyZWF0IHRob3NlIFVSSXMgZXF1aXZhbGVudC4KICAgICAqIEJ1dCBpbiB0aGVvcnkgdGhvc2UgVVJJcyBkbyBub3QgbmVlZCB0byBiZSBlcXVpdmFsZW50LiBTbyB0aGlzIG5vcm1hbGl6YXRpb24KICAgICAqIG1heSBjaGFuZ2UgdGhlIHNlbWFudGljcy4gRW5jb2RlZCBzbGFzaGVzICglMkYpIGFyZSBub3QgcmVtb3ZlZC4KICAgICAqCiAgICAgKiBFeGFtcGxlOiBodHRwOi8vZXhhbXBsZS5vcmcvL2Zvby8vL2Jhci5odG1sIOKGkiBodHRwOi8vZXhhbXBsZS5vcmcvZm9vL2Jhci5odG1sCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRU1PVkVfRFVQTElDQVRFX1NMQVNIRVMgPSA2NDsKCiAgICAvKioKICAgICAqIFNvcnQgcXVlcnkgcGFyYW1ldGVycyB3aXRoIHRoZWlyIHZhbHVlcyBpbiBhbHBoYWJldGljYWwgb3JkZXIuCiAgICAgKgogICAgICogSG93ZXZlciwgdGhlIG9yZGVyIG9mIHBhcmFtZXRlcnMgaW4gYSBVUkkgbWF5IGJlIHNpZ25pZmljYW50ICh0aGlzIGlzIG5vdCBkZWZpbmVkIGJ5IHRoZSBzdGFuZGFyZCkuCiAgICAgKiBTbyB0aGlzIG5vcm1hbGl6YXRpb24gaXMgbm90IHNhZmUgYW5kIG1heSBjaGFuZ2UgdGhlIHNlbWFudGljcyBvZiB0aGUgVVJJLgogICAgICoKICAgICAqIEV4YW1wbGU6ID9sYW5nPWVuJmFydGljbGU9ZnJlZCDihpIgP2FydGljbGU9ZnJlZCZsYW5nPWVuCiAgICAgKgogICAgICogTm90ZTogVGhlIHNvcnRpbmcgaXMgbmVpdGhlciBsb2NhbGUgbm9yIFVuaWNvZGUgYXdhcmUgKHRoZSBVUkkgcXVlcnkgZG9lcyBub3QgZ2V0IGRlY29kZWQgYXQgYWxsKSBhcyB0aGUKICAgICAqIHB1cnBvc2UgaXMgdG8gYmUgYWJsZSB0byBjb21wYXJlIFVSSXMgaW4gYSByZXByb2R1Y2libGUgd2F5LCBub3QgdG8gaGF2ZSB0aGUgcGFyYW1zIHNvcnRlZCBwZXJmZWN0bHkuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTT1JUX1FVRVJZX1BBUkFNRVRFUlMgPSAxMjg7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgbm9ybWFsaXplZCBVUkkuCiAgICAgKgogICAgICogVGhlIHNjaGVtZSBhbmQgaG9zdCBjb21wb25lbnQgYXJlIGFscmVhZHkgbm9ybWFsaXplZCB0byBsb3dlcmNhc2UgcGVyIFBTUi03IFVyaUludGVyZmFjZS4KICAgICAqIFRoaXMgbWV0aG9kcyBhZGRzIGFkZGl0aW9uYWwgbm9ybWFsaXphdGlvbnMgdGhhdCBjYW4gYmUgY29uZmlndXJlZCB3aXRoIHRoZSAkZmxhZ3MgcGFyYW1ldGVyLgogICAgICoKICAgICAqIFBTUi03IFVyaUludGVyZmFjZSBjYW5ub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiBhbiBlbXB0eSBjb21wb25lbnQgYW5kIGEgbWlzc2luZyBjb21wb25lbnQgYXMKICAgICAqIGdldFF1ZXJ5KCksIGdldEZyYWdtZW50KCkgZXRjLiBhbHdheXMgcmV0dXJuIGEgc3RyaW5nLiBUaGlzIG1lYW5zIHRoZSBVUklzICIvPyMiIGFuZCAiLyIgYXJlCiAgICAgKiB0cmVhdGVkIGVxdWl2YWxlbnQgd2hpY2ggaXMgbm90IG5lY2Vzc2FyaWx5IHRydWUgYWNjb3JkaW5nIHRvIFJGQyAzOTg2LiBCdXQgdGhhdCBkaWZmZXJlbmNlCiAgICAgKiBpcyBoaWdobHkgdW5jb21tb24gaW4gcmVhbGl0eS4gU28gdGhpcyBwb3RlbnRpYWwgbm9ybWFsaXphdGlvbiBpcyBpbXBsaWVkIGluIFBTUi03IGFzIHdlbGwuCiAgICAgKgogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAkdXJpICAgVGhlIFVSSSB0byBub3JtYWxpemUKICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAgJGZsYWdzIEEgYml0bWFzayBvZiBub3JtYWxpemF0aW9ucyB0byBhcHBseSwgc2VlIGNvbnN0YW50cwogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNi4yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbm9ybWFsaXplKFVyaUludGVyZmFjZSAkdXJpLCBpbnQgJGZsYWdzID0gc2VsZjo6UFJFU0VSVklOR19OT1JNQUxJWkFUSU9OUyk6IFVyaUludGVyZmFjZQogICAgewogICAgICAgIGlmICgkZmxhZ3MgJiBzZWxmOjpDQVBJVEFMSVpFX1BFUkNFTlRfRU5DT0RJTkcpIHsKICAgICAgICAgICAgJHVyaSA9IHNlbGY6OmNhcGl0YWxpemVQZXJjZW50RW5jb2RpbmcoJHVyaSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGZsYWdzICYgc2VsZjo6REVDT0RFX1VOUkVTRVJWRURfQ0hBUkFDVEVSUykgewogICAgICAgICAgICAkdXJpID0gc2VsZjo6ZGVjb2RlVW5yZXNlcnZlZENoYXJhY3RlcnMoJHVyaSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGZsYWdzICYgc2VsZjo6Q09OVkVSVF9FTVBUWV9QQVRIICYmICR1cmktPmdldFBhdGgoKSA9PT0gJycKICAgICAgICAgICAgJiYgKCR1cmktPmdldFNjaGVtZSgpID09PSAnaHR0cCcgfHwgJHVyaS0+Z2V0U2NoZW1lKCkgPT09ICdodHRwcycpCiAgICAgICAgKSB7CiAgICAgICAgICAgICR1cmkgPSAkdXJpLT53aXRoUGF0aCgnLycpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRmbGFncyAmIHNlbGY6OlJFTU9WRV9ERUZBVUxUX0hPU1QgJiYgJHVyaS0+Z2V0U2NoZW1lKCkgPT09ICdmaWxlJyAmJiAkdXJpLT5nZXRIb3N0KCkgPT09ICdsb2NhbGhvc3QnKSB7CiAgICAgICAgICAgICR1cmkgPSAkdXJpLT53aXRoSG9zdCgnJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGZsYWdzICYgc2VsZjo6UkVNT1ZFX0RFRkFVTFRfUE9SVCAmJiAkdXJpLT5nZXRQb3J0KCkgIT09IG51bGwgJiYgVXJpOjppc0RlZmF1bHRQb3J0KCR1cmkpKSB7CiAgICAgICAgICAgICR1cmkgPSAkdXJpLT53aXRoUG9ydChudWxsKTsKICAgICAgICB9CgogICAgICAgIGlmICgkZmxhZ3MgJiBzZWxmOjpSRU1PVkVfRE9UX1NFR01FTlRTICYmICFVcmk6OmlzUmVsYXRpdmVQYXRoUmVmZXJlbmNlKCR1cmkpKSB7CiAgICAgICAgICAgICR1cmkgPSAkdXJpLT53aXRoUGF0aChVcmlSZXNvbHZlcjo6cmVtb3ZlRG90U2VnbWVudHMoJHVyaS0+Z2V0UGF0aCgpKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGZsYWdzICYgc2VsZjo6UkVNT1ZFX0RVUExJQ0FURV9TTEFTSEVTKSB7CiAgICAgICAgICAgICR1cmkgPSAkdXJpLT53aXRoUGF0aChwcmVnX3JlcGxhY2UoJyMvLysrIycsICcvJywgJHVyaS0+Z2V0UGF0aCgpKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGZsYWdzICYgc2VsZjo6U09SVF9RVUVSWV9QQVJBTUVURVJTICYmICR1cmktPmdldFF1ZXJ5KCkgIT09ICcnKSB7CiAgICAgICAgICAgICRxdWVyeUtleVZhbHVlcyA9IGV4cGxvZGUoJyYnLCAkdXJpLT5nZXRRdWVyeSgpKTsKICAgICAgICAgICAgc29ydCgkcXVlcnlLZXlWYWx1ZXMpOwogICAgICAgICAgICAkdXJpID0gJHVyaS0+d2l0aFF1ZXJ5KGltcGxvZGUoJyYnLCAkcXVlcnlLZXlWYWx1ZXMpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdXJpOwogICAgfQoKICAgIC8qKgogICAgICogV2hldGhlciB0d28gVVJJcyBjYW4gYmUgY29uc2lkZXJlZCBlcXVpdmFsZW50LgogICAgICoKICAgICAqIEJvdGggVVJJcyBhcmUgbm9ybWFsaXplZCBhdXRvbWF0aWNhbGx5IGJlZm9yZSBjb21wYXJpc29uIHdpdGggdGhlIGdpdmVuICRub3JtYWxpemF0aW9ucyBiaXRtYXNrLiBUaGUgbWV0aG9kIGFsc28KICAgICAqIGFjY2VwdHMgcmVsYXRpdmUgVVJJIHJlZmVyZW5jZXMgYW5kIHJldHVybnMgdHJ1ZSB3aGVuIHRoZXkgYXJlIGVxdWl2YWxlbnQuIFRoaXMgb2YgY291cnNlIGFzc3VtZXMgdGhleSB3aWxsIGJlCiAgICAgKiByZXNvbHZlZCBhZ2FpbnN0IHRoZSBzYW1lIGJhc2UgVVJJLiBJZiB0aGlzIGlzIG5vdCB0aGUgY2FzZSwgZGV0ZXJtaW5hdGlvbiBvZiBlcXVpdmFsZW5jZSBvciBkaWZmZXJlbmNlIG9mCiAgICAgKiByZWxhdGl2ZSByZWZlcmVuY2VzIGRvZXMgbm90IG1lYW4gYW55dGhpbmcuCiAgICAgKgogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAkdXJpMSAgICAgICAgICAgQW4gVVJJIHRvIGNvbXBhcmUKICAgICAqIEBwYXJhbSBVcmlJbnRlcmZhY2UgJHVyaTIgICAgICAgICAgIEFuIFVSSSB0byBjb21wYXJlCiAgICAgKiBAcGFyYW0gaW50ICAgICAgICAgICRub3JtYWxpemF0aW9ucyBBIGJpdG1hc2sgb2Ygbm9ybWFsaXphdGlvbnMgdG8gYXBwbHksIHNlZSBjb25zdGFudHMKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTYuMQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzRXF1aXZhbGVudChVcmlJbnRlcmZhY2UgJHVyaTEsIFVyaUludGVyZmFjZSAkdXJpMiwgaW50ICRub3JtYWxpemF0aW9ucyA9IHNlbGY6OlBSRVNFUlZJTkdfTk9STUFMSVpBVElPTlMpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIChzdHJpbmcpIHNlbGY6Om5vcm1hbGl6ZSgkdXJpMSwgJG5vcm1hbGl6YXRpb25zKSA9PT0gKHN0cmluZykgc2VsZjo6bm9ybWFsaXplKCR1cmkyLCAkbm9ybWFsaXphdGlvbnMpOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGNhcGl0YWxpemVQZXJjZW50RW5jb2RpbmcoVXJpSW50ZXJmYWNlICR1cmkpOiBVcmlJbnRlcmZhY2UKICAgIHsKICAgICAgICAkcmVnZXggPSAnLyg/OiVbQS1GYS1mMC05XXsyfSkrKy8nOwoKICAgICAgICAkY2FsbGJhY2sgPSBmdW5jdGlvbiAoYXJyYXkgJG1hdGNoKTogc3RyaW5nIHsKICAgICAgICAgICAgcmV0dXJuIHN0cnRvdXBwZXIoJG1hdGNoWzBdKTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4KICAgICAgICAgICAgJHVyaS0+d2l0aFBhdGgoCiAgICAgICAgICAgICAgICBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJHJlZ2V4LCAkY2FsbGJhY2ssICR1cmktPmdldFBhdGgoKSkKICAgICAgICAgICAgKS0+d2l0aFF1ZXJ5KAogICAgICAgICAgICAgICAgcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCRyZWdleCwgJGNhbGxiYWNrLCAkdXJpLT5nZXRRdWVyeSgpKQogICAgICAgICAgICApOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGRlY29kZVVucmVzZXJ2ZWRDaGFyYWN0ZXJzKFVyaUludGVyZmFjZSAkdXJpKTogVXJpSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJHJlZ2V4ID0gJy8lKD86MkR8MkV8NUZ8N0V8M1swLTldfFs0Nl1bMS05QS1GXXxbNTddWzAtOUFdKS9pJzsKCiAgICAgICAgJGNhbGxiYWNrID0gZnVuY3Rpb24gKGFycmF5ICRtYXRjaCk6IHN0cmluZyB7CiAgICAgICAgICAgIHJldHVybiByYXd1cmxkZWNvZGUoJG1hdGNoWzBdKTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4KICAgICAgICAgICAgJHVyaS0+d2l0aFBhdGgoCiAgICAgICAgICAgICAgICBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJHJlZ2V4LCAkY2FsbGJhY2ssICR1cmktPmdldFBhdGgoKSkKICAgICAgICAgICAgKS0+d2l0aFF1ZXJ5KAogICAgICAgICAgICAgICAgcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCRyZWdleCwgJGNhbGxiYWNrLCAkdXJpLT5nZXRRdWVyeSgpKQogICAgICAgICAgICApOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgIC8vIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/UriResolver.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZTsKCi8qKgogKiBSZXNvbHZlcyBhIFVSSSByZWZlcmVuY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBiYXNlIFVSSSBhbmQgdGhlIG9wcG9zaXRlIHdheS4KICoKICogQGF1dGhvciBUb2JpYXMgU2NodWx0emUKICoKICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzM5ODYjc2VjdGlvbi01CiAqLwpmaW5hbCBjbGFzcyBVcmlSZXNvbHZlcgp7CiAgICAvKioKICAgICAqIFJlbW92ZXMgZG90IHNlZ21lbnRzIGZyb20gYSBwYXRoIGFuZCByZXR1cm5zIHRoZSBuZXcgcGF0aC4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTUuMi40CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVtb3ZlRG90U2VnbWVudHMoc3RyaW5nICRwYXRoKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCRwYXRoID09PSAnJyB8fCAkcGF0aCA9PT0gJy8nKSB7CiAgICAgICAgICAgIHJldHVybiAkcGF0aDsKICAgICAgICB9CgogICAgICAgICRyZXN1bHRzID0gW107CiAgICAgICAgJHNlZ21lbnRzID0gZXhwbG9kZSgnLycsICRwYXRoKTsKICAgICAgICBmb3JlYWNoICgkc2VnbWVudHMgYXMgJHNlZ21lbnQpIHsKICAgICAgICAgICAgaWYgKCRzZWdtZW50ID09PSAnLi4nKSB7CiAgICAgICAgICAgICAgICBhcnJheV9wb3AoJHJlc3VsdHMpOwogICAgICAgICAgICB9IGVsc2VpZiAoJHNlZ21lbnQgIT09ICcuJykgewogICAgICAgICAgICAgICAgJHJlc3VsdHNbXSA9ICRzZWdtZW50OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkbmV3UGF0aCA9IGltcGxvZGUoJy8nLCAkcmVzdWx0cyk7CgogICAgICAgIGlmICgkcGF0aFswXSA9PT0gJy8nICYmICghaXNzZXQoJG5ld1BhdGhbMF0pIHx8ICRuZXdQYXRoWzBdICE9PSAnLycpKSB7CiAgICAgICAgICAgIC8vIFJlLWFkZCB0aGUgbGVhZGluZyBzbGFzaCBpZiBuZWNlc3NhcnkgZm9yIGNhc2VzIGxpa2UgIi8uLiIKICAgICAgICAgICAgJG5ld1BhdGggPSAnLycuJG5ld1BhdGg7CiAgICAgICAgfSBlbHNlaWYgKCRuZXdQYXRoICE9PSAnJyAmJiAoJHNlZ21lbnQgPT09ICcuJyB8fCAkc2VnbWVudCA9PT0gJy4uJykpIHsKICAgICAgICAgICAgLy8gQWRkIHRoZSB0cmFpbGluZyBzbGFzaCBpZiBuZWNlc3NhcnkKICAgICAgICAgICAgLy8gSWYgbmV3UGF0aCBpcyBub3QgZW1wdHksIHRoZW4gJHNlZ21lbnQgbXVzdCBiZSBzZXQgYW5kIGlzIHRoZSBsYXN0IHNlZ21lbnQgZnJvbSB0aGUgZm9yZWFjaAogICAgICAgICAgICAkbmV3UGF0aCAuPSAnLyc7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG5ld1BhdGg7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyB0aGUgcmVsYXRpdmUgVVJJIGludG8gYSBuZXcgVVJJIHRoYXQgaXMgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgYmFzZSBVUkkuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzM5ODYjc2VjdGlvbi01LjIKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXNvbHZlKFVyaUludGVyZmFjZSAkYmFzZSwgVXJpSW50ZXJmYWNlICRyZWwpOiBVcmlJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoKHN0cmluZykgJHJlbCA9PT0gJycpIHsKICAgICAgICAgICAgLy8gd2UgY2FuIHNpbXBseSByZXR1cm4gdGhlIHNhbWUgYmFzZSBVUkkgaW5zdGFuY2UgZm9yIHRoaXMgc2FtZS1kb2N1bWVudCByZWZlcmVuY2UKICAgICAgICAgICAgcmV0dXJuICRiYXNlOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRyZWwtPmdldFNjaGVtZSgpICE9ICcnKSB7CiAgICAgICAgICAgIHJldHVybiAkcmVsLT53aXRoUGF0aChzZWxmOjpyZW1vdmVEb3RTZWdtZW50cygkcmVsLT5nZXRQYXRoKCkpKTsKICAgICAgICB9CgogICAgICAgIGlmICgkcmVsLT5nZXRBdXRob3JpdHkoKSAhPSAnJykgewogICAgICAgICAgICAkdGFyZ2V0QXV0aG9yaXR5ID0gJHJlbC0+Z2V0QXV0aG9yaXR5KCk7CiAgICAgICAgICAgICR0YXJnZXRQYXRoID0gc2VsZjo6cmVtb3ZlRG90U2VnbWVudHMoJHJlbC0+Z2V0UGF0aCgpKTsKICAgICAgICAgICAgJHRhcmdldFF1ZXJ5ID0gJHJlbC0+Z2V0UXVlcnkoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGFyZ2V0QXV0aG9yaXR5ID0gJGJhc2UtPmdldEF1dGhvcml0eSgpOwogICAgICAgICAgICBpZiAoJHJlbC0+Z2V0UGF0aCgpID09PSAnJykgewogICAgICAgICAgICAgICAgJHRhcmdldFBhdGggPSAkYmFzZS0+Z2V0UGF0aCgpOwogICAgICAgICAgICAgICAgJHRhcmdldFF1ZXJ5ID0gJHJlbC0+Z2V0UXVlcnkoKSAhPSAnJyA/ICRyZWwtPmdldFF1ZXJ5KCkgOiAkYmFzZS0+Z2V0UXVlcnkoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmICgkcmVsLT5nZXRQYXRoKClbMF0gPT09ICcvJykgewogICAgICAgICAgICAgICAgICAgICR0YXJnZXRQYXRoID0gJHJlbC0+Z2V0UGF0aCgpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJHRhcmdldEF1dGhvcml0eSAhPSAnJyAmJiAkYmFzZS0+Z2V0UGF0aCgpID09PSAnJykgewogICAgICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0UGF0aCA9ICcvJy4kcmVsLT5nZXRQYXRoKCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGxhc3RTbGFzaFBvcyA9IHN0cnJwb3MoJGJhc2UtPmdldFBhdGgoKSwgJy8nKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRsYXN0U2xhc2hQb3MgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0UGF0aCA9ICRyZWwtPmdldFBhdGgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YXJnZXRQYXRoID0gc3Vic3RyKCRiYXNlLT5nZXRQYXRoKCksIDAsICRsYXN0U2xhc2hQb3MgKyAxKS4kcmVsLT5nZXRQYXRoKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdGFyZ2V0UGF0aCA9IHNlbGY6OnJlbW92ZURvdFNlZ21lbnRzKCR0YXJnZXRQYXRoKTsKICAgICAgICAgICAgICAgICR0YXJnZXRRdWVyeSA9ICRyZWwtPmdldFF1ZXJ5KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgVXJpKFVyaTo6Y29tcG9zZUNvbXBvbmVudHMoCiAgICAgICAgICAgICRiYXNlLT5nZXRTY2hlbWUoKSwKICAgICAgICAgICAgJHRhcmdldEF1dGhvcml0eSwKICAgICAgICAgICAgJHRhcmdldFBhdGgsCiAgICAgICAgICAgICR0YXJnZXRRdWVyeSwKICAgICAgICAgICAgJHJlbC0+Z2V0RnJhZ21lbnQoKQogICAgICAgICkpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdGFyZ2V0IFVSSSBhcyBhIHJlbGF0aXZlIHJlZmVyZW5jZSBmcm9tIHRoZSBiYXNlIFVSSS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBpcyB0aGUgY291bnRlcnBhcnQgdG8gcmVzb2x2ZSgpOgogICAgICoKICAgICAqICAgIChzdHJpbmcpICR0YXJnZXQgPT09IChzdHJpbmcpIFVyaVJlc29sdmVyOjpyZXNvbHZlKCRiYXNlLCBVcmlSZXNvbHZlcjo6cmVsYXRpdml6ZSgkYmFzZSwgJHRhcmdldCkpCiAgICAgKgogICAgICogT25lIHVzZS1jYXNlIGlzIHRvIHVzZSB0aGUgY3VycmVudCByZXF1ZXN0IFVSSSBhcyBiYXNlIFVSSSBhbmQgdGhlbiBnZW5lcmF0ZSByZWxhdGl2ZSBsaW5rcyBpbiB5b3VyIGRvY3VtZW50cwogICAgICogdG8gcmVkdWNlIHRoZSBkb2N1bWVudCBzaXplIG9yIG9mZmVyIHNlbGYtY29udGFpbmVkIGRvd25sb2FkYWJsZSBkb2N1bWVudCBhcmNoaXZlcy4KICAgICAqCiAgICAgKiAgICAkYmFzZSA9IG5ldyBVcmkoJ2h0dHA6Ly9leGFtcGxlLmNvbS9hL2IvJyk7CiAgICAgKiAgICBlY2hvIFVyaVJlc29sdmVyOjpyZWxhdGl2aXplKCRiYXNlLCBuZXcgVXJpKCdodHRwOi8vZXhhbXBsZS5jb20vYS9iL2MnKSk7ICAvLyBwcmludHMgJ2MnLgogICAgICogICAgZWNobyBVcmlSZXNvbHZlcjo6cmVsYXRpdml6ZSgkYmFzZSwgbmV3IFVyaSgnaHR0cDovL2V4YW1wbGUuY29tL2EveC95JykpOyAgLy8gcHJpbnRzICcuLi94L3knLgogICAgICogICAgZWNobyBVcmlSZXNvbHZlcjo6cmVsYXRpdml6ZSgkYmFzZSwgbmV3IFVyaSgnaHR0cDovL2V4YW1wbGUuY29tL2EvYi8/cScpKTsgLy8gcHJpbnRzICc/cScuCiAgICAgKiAgICBlY2hvIFVyaVJlc29sdmVyOjpyZWxhdGl2aXplKCRiYXNlLCBuZXcgVXJpKCdodHRwOi8vZXhhbXBsZS5vcmcvYS9iLycpKTsgICAvLyBwcmludHMgJy8vZXhhbXBsZS5vcmcvYS9iLycuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgYWxzbyBhY2NlcHRzIGEgdGFyZ2V0IHRoYXQgaXMgYWxyZWFkeSByZWxhdGl2ZSBhbmQgd2lsbCB0cnkgdG8gcmVsYXRpdml6ZSBpdCBmdXJ0aGVyLiBPbmx5IGEKICAgICAqIHJlbGF0aXZlLXBhdGggcmVmZXJlbmNlIHdpbGwgYmUgcmV0dXJuZWQgYXMtaXMuCiAgICAgKgogICAgICogICAgZWNobyBVcmlSZXNvbHZlcjo6cmVsYXRpdml6ZSgkYmFzZSwgbmV3IFVyaSgnL2EvYi9jJykpOyAgLy8gcHJpbnRzICdjJyBhcyB3ZWxsCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVsYXRpdml6ZShVcmlJbnRlcmZhY2UgJGJhc2UsIFVyaUludGVyZmFjZSAkdGFyZ2V0KTogVXJpSW50ZXJmYWNlCiAgICB7CiAgICAgICAgaWYgKCR0YXJnZXQtPmdldFNjaGVtZSgpICE9PSAnJwogICAgICAgICAgICAmJiAoJGJhc2UtPmdldFNjaGVtZSgpICE9PSAkdGFyZ2V0LT5nZXRTY2hlbWUoKSB8fCAkdGFyZ2V0LT5nZXRBdXRob3JpdHkoKSA9PT0gJycgJiYgJGJhc2UtPmdldEF1dGhvcml0eSgpICE9PSAnJykKICAgICAgICApIHsKICAgICAgICAgICAgcmV0dXJuICR0YXJnZXQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoVXJpOjppc1JlbGF0aXZlUGF0aFJlZmVyZW5jZSgkdGFyZ2V0KSkgewogICAgICAgICAgICAvLyBBcyB0aGUgdGFyZ2V0IGlzIGFscmVhZHkgaGlnaGx5IHJlbGF0aXZlIHdlIHJldHVybiBpdCBhcy1pcy4gSXQgd291bGQgYmUgcG9zc2libGUgdG8gcmVzb2x2ZQogICAgICAgICAgICAvLyB0aGUgdGFyZ2V0IHdpdGggYCR0YXJnZXQgPSBzZWxmOjpyZXNvbHZlKCRiYXNlLCAkdGFyZ2V0KTtgIGFuZCB0aGVuIHRyeSBtYWtlIGl0IG1vcmUgcmVsYXRpdmUKICAgICAgICAgICAgLy8gYnkgcmVtb3ZpbmcgYSBkdXBsaWNhdGUgcXVlcnkuIEJ1dCBsZXQncyBub3QgZG8gdGhhdCBhdXRvbWF0aWNhbGx5LgogICAgICAgICAgICByZXR1cm4gJHRhcmdldDsKICAgICAgICB9CgogICAgICAgIGlmICgkdGFyZ2V0LT5nZXRBdXRob3JpdHkoKSAhPT0gJycgJiYgJGJhc2UtPmdldEF1dGhvcml0eSgpICE9PSAkdGFyZ2V0LT5nZXRBdXRob3JpdHkoKSkgewogICAgICAgICAgICByZXR1cm4gJHRhcmdldC0+d2l0aFNjaGVtZSgnJyk7CiAgICAgICAgfQoKICAgICAgICAvLyBXZSBtdXN0IHJlbW92ZSB0aGUgcGF0aCBiZWZvcmUgcmVtb3ZpbmcgdGhlIGF1dGhvcml0eSBiZWNhdXNlIGlmIHRoZSBwYXRoIHN0YXJ0cyB3aXRoIHR3byBzbGFzaGVzLCB0aGUgVVJJCiAgICAgICAgLy8gd291bGQgdHVybiBpbnZhbGlkLiBBbmQgd2UgYWxzbyBjYW5ub3Qgc2V0IGEgcmVsYXRpdmUgcGF0aCBiZWZvcmUgcmVtb3ZpbmcgdGhlIGF1dGhvcml0eSwgYXMgdGhhdCBpcyBhbHNvCiAgICAgICAgLy8gaW52YWxpZC4KICAgICAgICAkZW1wdHlQYXRoVXJpID0gJHRhcmdldC0+d2l0aFNjaGVtZSgnJyktPndpdGhQYXRoKCcnKS0+d2l0aFVzZXJJbmZvKCcnKS0+d2l0aFBvcnQobnVsbCktPndpdGhIb3N0KCcnKTsKCiAgICAgICAgaWYgKCRiYXNlLT5nZXRQYXRoKCkgIT09ICR0YXJnZXQtPmdldFBhdGgoKSkgewogICAgICAgICAgICByZXR1cm4gJGVtcHR5UGF0aFVyaS0+d2l0aFBhdGgoc2VsZjo6Z2V0UmVsYXRpdmVQYXRoKCRiYXNlLCAkdGFyZ2V0KSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGJhc2UtPmdldFF1ZXJ5KCkgPT09ICR0YXJnZXQtPmdldFF1ZXJ5KCkpIHsKICAgICAgICAgICAgLy8gT25seSB0aGUgdGFyZ2V0IGZyYWdtZW50IGlzIGxlZnQuIEFuZCBpdCBtdXN0IGJlIHJldHVybmVkIGV2ZW4gaWYgYmFzZSBhbmQgdGFyZ2V0IGZyYWdtZW50IGFyZSB0aGUgc2FtZS4KICAgICAgICAgICAgcmV0dXJuICRlbXB0eVBhdGhVcmktPndpdGhRdWVyeSgnJyk7CiAgICAgICAgfQoKICAgICAgICAvLyBJZiB0aGUgYmFzZSBVUkkgaGFzIGEgcXVlcnkgYnV0IHRoZSB0YXJnZXQgaGFzIG5vbmUsIHdlIGNhbm5vdCByZXR1cm4gYW4gZW1wdHkgcGF0aCByZWZlcmVuY2UgYXMgaXQgd291bGQKICAgICAgICAvLyBpbmhlcml0IHRoZSBiYXNlIHF1ZXJ5IGNvbXBvbmVudCB3aGVuIHJlc29sdmluZy4KICAgICAgICBpZiAoJHRhcmdldC0+Z2V0UXVlcnkoKSA9PT0gJycpIHsKICAgICAgICAgICAgJHNlZ21lbnRzID0gZXhwbG9kZSgnLycsICR0YXJnZXQtPmdldFBhdGgoKSk7CiAgICAgICAgICAgIC8qKiBAdmFyIHN0cmluZyAkbGFzdFNlZ21lbnQgKi8KICAgICAgICAgICAgJGxhc3RTZWdtZW50ID0gZW5kKCRzZWdtZW50cyk7CgogICAgICAgICAgICByZXR1cm4gJGVtcHR5UGF0aFVyaS0+d2l0aFBhdGgoJGxhc3RTZWdtZW50ID09PSAnJyA/ICcuLycgOiAkbGFzdFNlZ21lbnQpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRlbXB0eVBhdGhVcmk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZ2V0UmVsYXRpdmVQYXRoKFVyaUludGVyZmFjZSAkYmFzZSwgVXJpSW50ZXJmYWNlICR0YXJnZXQpOiBzdHJpbmcKICAgIHsKICAgICAgICAkc291cmNlU2VnbWVudHMgPSBleHBsb2RlKCcvJywgJGJhc2UtPmdldFBhdGgoKSk7CiAgICAgICAgJHRhcmdldFNlZ21lbnRzID0gZXhwbG9kZSgnLycsICR0YXJnZXQtPmdldFBhdGgoKSk7CiAgICAgICAgYXJyYXlfcG9wKCRzb3VyY2VTZWdtZW50cyk7CiAgICAgICAgJHRhcmdldExhc3RTZWdtZW50ID0gYXJyYXlfcG9wKCR0YXJnZXRTZWdtZW50cyk7CiAgICAgICAgZm9yZWFjaCAoJHNvdXJjZVNlZ21lbnRzIGFzICRpID0+ICRzZWdtZW50KSB7CiAgICAgICAgICAgIGlmIChpc3NldCgkdGFyZ2V0U2VnbWVudHNbJGldKSAmJiAkc2VnbWVudCA9PT0gJHRhcmdldFNlZ21lbnRzWyRpXSkgewogICAgICAgICAgICAgICAgdW5zZXQoJHNvdXJjZVNlZ21lbnRzWyRpXSwgJHRhcmdldFNlZ21lbnRzWyRpXSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkdGFyZ2V0U2VnbWVudHNbXSA9ICR0YXJnZXRMYXN0U2VnbWVudDsKICAgICAgICAkcmVsYXRpdmVQYXRoID0gc3RyX3JlcGVhdCgnLi4vJywgY291bnQoJHNvdXJjZVNlZ21lbnRzKSkuaW1wbG9kZSgnLycsICR0YXJnZXRTZWdtZW50cyk7CgogICAgICAgIC8vIEEgcmVmZXJlbmNlIHRvIGFtIGVtcHR5IGxhc3Qgc2VnbWVudCBvciBhbiBlbXB0eSBmaXJzdCBzdWItc2VnbWVudCBtdXN0IGJlIHByZWZpeGVkIHdpdGggIi4vIi4KICAgICAgICAvLyBUaGlzIGFsc28gYXBwbGllcyB0byBhIHNlZ21lbnQgd2l0aCBhIGNvbG9uIGNoYXJhY3RlciAoZS5nLiwgImZpbGU6Y29sb24iKSB0aGF0IGNhbm5vdCBiZSB1c2VkCiAgICAgICAgLy8gYXMgdGhlIGZpcnN0IHNlZ21lbnQgb2YgYSByZWxhdGl2ZS1wYXRoIHJlZmVyZW5jZSwgYXMgaXQgd291bGQgYmUgbWlzdGFrZW4gZm9yIGEgc2NoZW1lIG5hbWUuCiAgICAgICAgaWYgKCcnID09PSAkcmVsYXRpdmVQYXRoIHx8IGZhbHNlICE9PSBzdHJwb3MoZXhwbG9kZSgnLycsICRyZWxhdGl2ZVBhdGgsIDIpWzBdLCAnOicpKSB7CiAgICAgICAgICAgICRyZWxhdGl2ZVBhdGggPSAiLi8kcmVsYXRpdmVQYXRoIjsKICAgICAgICB9IGVsc2VpZiAoJy8nID09PSAkcmVsYXRpdmVQYXRoWzBdKSB7CiAgICAgICAgICAgIGlmICgkYmFzZS0+Z2V0QXV0aG9yaXR5KCkgIT0gJycgJiYgJGJhc2UtPmdldFBhdGgoKSA9PT0gJycpIHsKICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSBhbiBleHRyYSBzbGFzaCBpcyBhZGRlZCBieSByZXNvbHZlKCkgYXV0b21hdGljYWxseS4gU28gd2UgbXVzdCBub3QgYWRkIG9uZSBoZXJlLgogICAgICAgICAgICAgICAgJHJlbGF0aXZlUGF0aCA9ICIuJHJlbGF0aXZlUGF0aCI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkcmVsYXRpdmVQYXRoID0gIi4vJHJlbGF0aXZlUGF0aCI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVsYXRpdmVQYXRoOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgIC8vIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/Utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFNlcnZlclJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlOwoKZmluYWwgY2xhc3MgVXRpbHMKewogICAgLyoqCiAgICAgKiBSZW1vdmUgdGhlIGl0ZW1zIGdpdmVuIGJ5IHRoZSBrZXlzLCBjYXNlIGluc2Vuc2l0aXZlbHkgZnJvbSB0aGUgZGF0YS4KICAgICAqCiAgICAgKiBAcGFyYW0gKHN0cmluZ3xpbnQpW10gJGtleXMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYXNlbGVzc1JlbW92ZShhcnJheSAka2V5cywgYXJyYXkgJGRhdGEpOiBhcnJheQogICAgewogICAgICAgICRyZXN1bHQgPSBbXTsKCiAgICAgICAgZm9yZWFjaCAoJGtleXMgYXMgJiRrZXkpIHsKICAgICAgICAgICAgJGtleSA9IHN0cnRvbG93ZXIoKHN0cmluZykgJGtleSk7CiAgICAgICAgfQoKICAgICAgICBmb3JlYWNoICgkZGF0YSBhcyAkayA9PiAkdikgewogICAgICAgICAgICBpZiAoIWluX2FycmF5KHN0cnRvbG93ZXIoKHN0cmluZykgJGspLCAka2V5cykpIHsKICAgICAgICAgICAgICAgICRyZXN1bHRbJGtdID0gJHY7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIC8qKgogICAgICogQ29weSB0aGUgY29udGVudHMgb2YgYSBzdHJlYW0gaW50byBhbm90aGVyIHN0cmVhbSB1bnRpbCB0aGUgZ2l2ZW4gbnVtYmVyCiAgICAgKiBvZiBieXRlcyBoYXZlIGJlZW4gcmVhZC4KICAgICAqCiAgICAgKiBAcGFyYW0gU3RyZWFtSW50ZXJmYWNlICRzb3VyY2UgU3RyZWFtIHRvIHJlYWQgZnJvbQogICAgICogQHBhcmFtIFN0cmVhbUludGVyZmFjZSAkZGVzdCAgIFN0cmVhbSB0byB3cml0ZSB0bwogICAgICogQHBhcmFtIGludCAgICAgICAgICAgICAkbWF4TGVuIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuIFBhc3MgLTEKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byByZWFkIHRoZSBlbnRpcmUgc3RyZWFtLgogICAgICoKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29weVRvU3RyZWFtKFN0cmVhbUludGVyZmFjZSAkc291cmNlLCBTdHJlYW1JbnRlcmZhY2UgJGRlc3QsIGludCAkbWF4TGVuID0gLTEpOiB2b2lkCiAgICB7CiAgICAgICAgJGJ1ZmZlclNpemUgPSA4MTkyOwoKICAgICAgICBpZiAoJG1heExlbiA9PT0gLTEpIHsKICAgICAgICAgICAgd2hpbGUgKCEkc291cmNlLT5lb2YoKSkgewogICAgICAgICAgICAgICAgaWYgKCEkZGVzdC0+d3JpdGUoJHNvdXJjZS0+cmVhZCgkYnVmZmVyU2l6ZSkpKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcmVtYWluaW5nID0gJG1heExlbjsKICAgICAgICAgICAgd2hpbGUgKCRyZW1haW5pbmcgPiAwICYmICEkc291cmNlLT5lb2YoKSkgewogICAgICAgICAgICAgICAgJGJ1ZiA9ICRzb3VyY2UtPnJlYWQobWluKCRidWZmZXJTaXplLCAkcmVtYWluaW5nKSk7CiAgICAgICAgICAgICAgICAkbGVuID0gc3RybGVuKCRidWYpOwogICAgICAgICAgICAgICAgaWYgKCEkbGVuKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkcmVtYWluaW5nIC09ICRsZW47CiAgICAgICAgICAgICAgICAkZGVzdC0+d3JpdGUoJGJ1Zik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBDb3B5IHRoZSBjb250ZW50cyBvZiBhIHN0cmVhbSBpbnRvIGEgc3RyaW5nIHVudGlsIHRoZSBnaXZlbiBudW1iZXIgb2YKICAgICAqIGJ5dGVzIGhhdmUgYmVlbiByZWFkLgogICAgICoKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSBTdHJlYW0gdG8gcmVhZAogICAgICogQHBhcmFtIGludCAgICAgICAgICAgICAkbWF4TGVuIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuIFBhc3MgLTEKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byByZWFkIHRoZSBlbnRpcmUgc3RyZWFtLgogICAgICoKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29weVRvU3RyaW5nKFN0cmVhbUludGVyZmFjZSAkc3RyZWFtLCBpbnQgJG1heExlbiA9IC0xKTogc3RyaW5nCiAgICB7CiAgICAgICAgJGJ1ZmZlciA9ICcnOwoKICAgICAgICBpZiAoJG1heExlbiA9PT0gLTEpIHsKICAgICAgICAgICAgd2hpbGUgKCEkc3RyZWFtLT5lb2YoKSkgewogICAgICAgICAgICAgICAgJGJ1ZiA9ICRzdHJlYW0tPnJlYWQoMTA0ODU3Nik7CiAgICAgICAgICAgICAgICBpZiAoJGJ1ZiA9PT0gJycpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRidWZmZXIgLj0gJGJ1ZjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICRidWZmZXI7CiAgICAgICAgfQoKICAgICAgICAkbGVuID0gMDsKICAgICAgICB3aGlsZSAoISRzdHJlYW0tPmVvZigpICYmICRsZW4gPCAkbWF4TGVuKSB7CiAgICAgICAgICAgICRidWYgPSAkc3RyZWFtLT5yZWFkKCRtYXhMZW4gLSAkbGVuKTsKICAgICAgICAgICAgaWYgKCRidWYgPT09ICcnKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICAkYnVmZmVyIC49ICRidWY7CiAgICAgICAgICAgICRsZW4gPSBzdHJsZW4oJGJ1ZmZlcik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGJ1ZmZlcjsKICAgIH0KCiAgICAvKioKICAgICAqIENhbGN1bGF0ZSBhIGhhc2ggb2YgYSBzdHJlYW0uCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgcmVhZHMgdGhlIGVudGlyZSBzdHJlYW0gdG8gY2FsY3VsYXRlIGEgcm9sbGluZyBoYXNoLCBiYXNlZAogICAgICogb24gUEhQJ3MgYGhhc2hfaW5pdGAgZnVuY3Rpb25zLgogICAgICoKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSAgICBTdHJlYW0gdG8gY2FsY3VsYXRlIHRoZSBoYXNoIGZvcgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAkYWxnbyAgICAgIEhhc2ggYWxnb3JpdGhtIChlLmcuIG1kNSwgY3JjMzIsIGV0YykKICAgICAqIEBwYXJhbSBib29sICAgICAgICAgICAgJHJhd091dHB1dCBXaGV0aGVyIG9yIG5vdCB0byB1c2UgcmF3IG91dHB1dAogICAgICoKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGFzaChTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwgc3RyaW5nICRhbGdvLCBib29sICRyYXdPdXRwdXQgPSBmYWxzZSk6IHN0cmluZwogICAgewogICAgICAgICRwb3MgPSAkc3RyZWFtLT50ZWxsKCk7CgogICAgICAgIGlmICgkcG9zID4gMCkgewogICAgICAgICAgICAkc3RyZWFtLT5yZXdpbmQoKTsKICAgICAgICB9CgogICAgICAgICRjdHggPSBoYXNoX2luaXQoJGFsZ28pOwogICAgICAgIHdoaWxlICghJHN0cmVhbS0+ZW9mKCkpIHsKICAgICAgICAgICAgaGFzaF91cGRhdGUoJGN0eCwgJHN0cmVhbS0+cmVhZCgxMDQ4NTc2KSk7CiAgICAgICAgfQoKICAgICAgICAkb3V0ID0gaGFzaF9maW5hbCgkY3R4LCAkcmF3T3V0cHV0KTsKICAgICAgICAkc3RyZWFtLT5zZWVrKCRwb3MpOwoKICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICAvKioKICAgICAqIENsb25lIGFuZCBtb2RpZnkgYSByZXF1ZXN0IHdpdGggdGhlIGdpdmVuIGNoYW5nZXMuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgaXMgdXNlZnVsIGZvciByZWR1Y2luZyB0aGUgbnVtYmVyIG9mIGNsb25lcyBuZWVkZWQgdG8gbXV0YXRlCiAgICAgKiBhIG1lc3NhZ2UuCiAgICAgKgogICAgICogVGhlIGNoYW5nZXMgY2FuIGJlIG9uZSBvZjoKICAgICAqIC0gbWV0aG9kOiAoc3RyaW5nKSBDaGFuZ2VzIHRoZSBIVFRQIG1ldGhvZC4KICAgICAqIC0gc2V0X2hlYWRlcnM6IChhcnJheSkgU2V0cyB0aGUgZ2l2ZW4gaGVhZGVycy4KICAgICAqIC0gcmVtb3ZlX2hlYWRlcnM6IChhcnJheSkgUmVtb3ZlIHRoZSBnaXZlbiBoZWFkZXJzLgogICAgICogLSBib2R5OiAobWl4ZWQpIFNldHMgdGhlIGdpdmVuIGJvZHkuCiAgICAgKiAtIHVyaTogKFVyaUludGVyZmFjZSkgU2V0IHRoZSBVUkkuCiAgICAgKiAtIHF1ZXJ5OiAoc3RyaW5nKSBTZXQgdGhlIHF1ZXJ5IHN0cmluZyB2YWx1ZSBvZiB0aGUgVVJJLgogICAgICogLSB2ZXJzaW9uOiAoc3RyaW5nKSBTZXQgdGhlIHByb3RvY29sIHZlcnNpb24uCiAgICAgKgogICAgICogQHBhcmFtIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QgUmVxdWVzdCB0byBjbG9uZSBhbmQgbW9kaWZ5LgogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgJGNoYW5nZXMgQ2hhbmdlcyB0byBhcHBseS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtb2RpZnlSZXF1ZXN0KFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRjaGFuZ2VzKTogUmVxdWVzdEludGVyZmFjZQogICAgewogICAgICAgIGlmICghJGNoYW5nZXMpIHsKICAgICAgICAgICAgcmV0dXJuICRyZXF1ZXN0OwogICAgICAgIH0KCiAgICAgICAgJGhlYWRlcnMgPSAkcmVxdWVzdC0+Z2V0SGVhZGVycygpOwoKICAgICAgICBpZiAoIWlzc2V0KCRjaGFuZ2VzWyd1cmknXSkpIHsKICAgICAgICAgICAgJHVyaSA9ICRyZXF1ZXN0LT5nZXRVcmkoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGhvc3QgaGVhZGVyIGlmIG9uZSBpcyBvbiB0aGUgVVJJCiAgICAgICAgICAgIGlmICgkaG9zdCA9ICRjaGFuZ2VzWyd1cmknXS0+Z2V0SG9zdCgpKSB7CiAgICAgICAgICAgICAgICAkY2hhbmdlc1snc2V0X2hlYWRlcnMnXVsnSG9zdCddID0gJGhvc3Q7CgogICAgICAgICAgICAgICAgaWYgKCRwb3J0ID0gJGNoYW5nZXNbJ3VyaSddLT5nZXRQb3J0KCkpIHsKICAgICAgICAgICAgICAgICAgICAkc3RhbmRhcmRQb3J0cyA9IFsnaHR0cCcgPT4gODAsICdodHRwcycgPT4gNDQzXTsKICAgICAgICAgICAgICAgICAgICAkc2NoZW1lID0gJGNoYW5nZXNbJ3VyaSddLT5nZXRTY2hlbWUoKTsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHN0YW5kYXJkUG9ydHNbJHNjaGVtZV0pICYmICRwb3J0ICE9ICRzdGFuZGFyZFBvcnRzWyRzY2hlbWVdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjaGFuZ2VzWydzZXRfaGVhZGVycyddWydIb3N0J10gLj0gJzonLiRwb3J0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkdXJpID0gJGNoYW5nZXNbJ3VyaSddOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFlbXB0eSgkY2hhbmdlc1sncmVtb3ZlX2hlYWRlcnMnXSkpIHsKICAgICAgICAgICAgJGhlYWRlcnMgPSBzZWxmOjpjYXNlbGVzc1JlbW92ZSgkY2hhbmdlc1sncmVtb3ZlX2hlYWRlcnMnXSwgJGhlYWRlcnMpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFlbXB0eSgkY2hhbmdlc1snc2V0X2hlYWRlcnMnXSkpIHsKICAgICAgICAgICAgJGhlYWRlcnMgPSBzZWxmOjpjYXNlbGVzc1JlbW92ZShhcnJheV9rZXlzKCRjaGFuZ2VzWydzZXRfaGVhZGVycyddKSwgJGhlYWRlcnMpOwogICAgICAgICAgICAkaGVhZGVycyA9ICRjaGFuZ2VzWydzZXRfaGVhZGVycyddICsgJGhlYWRlcnM7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJGNoYW5nZXNbJ3F1ZXJ5J10pKSB7CiAgICAgICAgICAgICR1cmkgPSAkdXJpLT53aXRoUXVlcnkoJGNoYW5nZXNbJ3F1ZXJ5J10pOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRyZXF1ZXN0IGluc3RhbmNlb2YgU2VydmVyUmVxdWVzdEludGVyZmFjZSkgewogICAgICAgICAgICAkbmV3ID0gKG5ldyBTZXJ2ZXJSZXF1ZXN0KAogICAgICAgICAgICAgICAgJGNoYW5nZXNbJ21ldGhvZCddID8/ICRyZXF1ZXN0LT5nZXRNZXRob2QoKSwKICAgICAgICAgICAgICAgICR1cmksCiAgICAgICAgICAgICAgICAkaGVhZGVycywKICAgICAgICAgICAgICAgICRjaGFuZ2VzWydib2R5J10gPz8gJHJlcXVlc3QtPmdldEJvZHkoKSwKICAgICAgICAgICAgICAgICRjaGFuZ2VzWyd2ZXJzaW9uJ10gPz8gJHJlcXVlc3QtPmdldFByb3RvY29sVmVyc2lvbigpLAogICAgICAgICAgICAgICAgJHJlcXVlc3QtPmdldFNlcnZlclBhcmFtcygpCiAgICAgICAgICAgICkpCiAgICAgICAgICAgIC0+d2l0aFBhcnNlZEJvZHkoJHJlcXVlc3QtPmdldFBhcnNlZEJvZHkoKSkKICAgICAgICAgICAgLT53aXRoUXVlcnlQYXJhbXMoJHJlcXVlc3QtPmdldFF1ZXJ5UGFyYW1zKCkpCiAgICAgICAgICAgIC0+d2l0aENvb2tpZVBhcmFtcygkcmVxdWVzdC0+Z2V0Q29va2llUGFyYW1zKCkpCiAgICAgICAgICAgIC0+d2l0aFVwbG9hZGVkRmlsZXMoJHJlcXVlc3QtPmdldFVwbG9hZGVkRmlsZXMoKSk7CgogICAgICAgICAgICBmb3JlYWNoICgkcmVxdWVzdC0+Z2V0QXR0cmlidXRlcygpIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICAgICAkbmV3ID0gJG5ldy0+d2l0aEF0dHJpYnV0ZSgka2V5LCAkdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gJG5ldzsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgUmVxdWVzdCgKICAgICAgICAgICAgJGNoYW5nZXNbJ21ldGhvZCddID8/ICRyZXF1ZXN0LT5nZXRNZXRob2QoKSwKICAgICAgICAgICAgJHVyaSwKICAgICAgICAgICAgJGhlYWRlcnMsCiAgICAgICAgICAgICRjaGFuZ2VzWydib2R5J10gPz8gJHJlcXVlc3QtPmdldEJvZHkoKSwKICAgICAgICAgICAgJGNoYW5nZXNbJ3ZlcnNpb24nXSA/PyAkcmVxdWVzdC0+Z2V0UHJvdG9jb2xWZXJzaW9uKCkKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogUmVhZCBhIGxpbmUgZnJvbSB0aGUgc3RyZWFtIHVwIHRvIHRoZSBtYXhpbXVtIGFsbG93ZWQgYnVmZmVyIGxlbmd0aC4KICAgICAqCiAgICAgKiBAcGFyYW0gU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0gICAgU3RyZWFtIHRvIHJlYWQgZnJvbQogICAgICogQHBhcmFtIGludHxudWxsICAgICAgICAkbWF4TGVuZ3RoIE1heGltdW0gYnVmZmVyIGxlbmd0aAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlYWRMaW5lKFN0cmVhbUludGVyZmFjZSAkc3RyZWFtLCA/aW50ICRtYXhMZW5ndGggPSBudWxsKTogc3RyaW5nCiAgICB7CiAgICAgICAgJGJ1ZmZlciA9ICcnOwogICAgICAgICRzaXplID0gMDsKCiAgICAgICAgd2hpbGUgKCEkc3RyZWFtLT5lb2YoKSkgewogICAgICAgICAgICBpZiAoJycgPT09ICgkYnl0ZSA9ICRzdHJlYW0tPnJlYWQoMSkpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGJ1ZmZlcjsKICAgICAgICAgICAgfQogICAgICAgICAgICAkYnVmZmVyIC49ICRieXRlOwogICAgICAgICAgICAvLyBCcmVhayB3aGVuIGEgbmV3IGxpbmUgaXMgZm91bmQgb3IgdGhlIG1heCBsZW5ndGggLSAxIGlzIHJlYWNoZWQKICAgICAgICAgICAgaWYgKCRieXRlID09PSAiXG4iIHx8ICsrJHNpemUgPT09ICRtYXhMZW5ndGggLSAxKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRidWZmZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZWRhY3QgdGhlIHBhc3N3b3JkIGluIHRoZSB1c2VyIGluZm8gcGFydCBvZiBhIFVSSS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWRhY3RVc2VySW5mbyhVcmlJbnRlcmZhY2UgJHVyaSk6IFVyaUludGVyZmFjZQogICAgewogICAgICAgICR1c2VySW5mbyA9ICR1cmktPmdldFVzZXJJbmZvKCk7CgogICAgICAgIGlmIChmYWxzZSAhPT0gKCRwb3MgPSBcc3RycG9zKCR1c2VySW5mbywgJzonKSkpIHsKICAgICAgICAgICAgcmV0dXJuICR1cmktPndpdGhVc2VySW5mbyhcc3Vic3RyKCR1c2VySW5mbywgMCwgJHBvcyksICcqKionKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdXJpOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IHN0cmVhbSBiYXNlZCBvbiB0aGUgaW5wdXQgdHlwZS4KICAgICAqCiAgICAgKiBPcHRpb25zIGlzIGFuIGFzc29jaWF0aXZlIGFycmF5IHRoYXQgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBrZXlzOgogICAgICogLSBtZXRhZGF0YTogQXJyYXkgb2YgY3VzdG9tIG1ldGFkYXRhLgogICAgICogLSBzaXplOiBTaXplIG9mIHRoZSBzdHJlYW0uCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGAkcmVzb3VyY2VgIHR5cGVzOgogICAgICogLSBgUHNyXEh0dHBcTWVzc2FnZVxTdHJlYW1JbnRlcmZhY2VgOiBSZXR1cm5zIHRoZSB2YWx1ZSBhcy1pcy4KICAgICAqIC0gYHN0cmluZ2A6IENyZWF0ZXMgYSBzdHJlYW0gb2JqZWN0IHRoYXQgdXNlcyB0aGUgZ2l2ZW4gc3RyaW5nIGFzIHRoZSBjb250ZW50cy4KICAgICAqIC0gYHJlc291cmNlYDogQ3JlYXRlcyBhIHN0cmVhbSBvYmplY3QgdGhhdCB3cmFwcyB0aGUgZ2l2ZW4gUEhQIHN0cmVhbSByZXNvdXJjZS4KICAgICAqIC0gYEl0ZXJhdG9yYDogSWYgdGhlIHByb3ZpZGVkIHZhbHVlIGltcGxlbWVudHMgYEl0ZXJhdG9yYCwgdGhlbiBhIHJlYWQtb25seQogICAgICogICBzdHJlYW0gb2JqZWN0IHdpbGwgYmUgY3JlYXRlZCB0aGF0IHdyYXBzIHRoZSBnaXZlbiBpdGVyYWJsZS4gRWFjaCB0aW1lIHRoZQogICAgICogICBzdHJlYW0gaXMgcmVhZCBmcm9tLCBkYXRhIGZyb20gdGhlIGl0ZXJhdG9yIHdpbGwgZmlsbCBhIGJ1ZmZlciBhbmQgd2lsbCBiZQogICAgICogICBjb250aW51b3VzbHkgY2FsbGVkIHVudGlsIHRoZSBidWZmZXIgaXMgZXF1YWwgdG8gdGhlIHJlcXVlc3RlZCByZWFkIHNpemUuCiAgICAgKiAgIFN1YnNlcXVlbnQgcmVhZCBjYWxscyB3aWxsIGZpcnN0IHJlYWQgZnJvbSB0aGUgYnVmZmVyIGFuZCB0aGVuIGNhbGwgYG5leHRgCiAgICAgKiAgIG9uIHRoZSB1bmRlcmx5aW5nIGl0ZXJhdG9yIHVudGlsIGl0IGlzIGV4aGF1c3RlZC4KICAgICAqIC0gYG9iamVjdGAgd2l0aCBgX190b1N0cmluZygpYDogSWYgdGhlIG9iamVjdCBoYXMgdGhlIGBfX3RvU3RyaW5nKClgIG1ldGhvZCwKICAgICAqICAgdGhlIG9iamVjdCB3aWxsIGJlIGNhc3QgdG8gYSBzdHJpbmcgYW5kIHRoZW4gYSBzdHJlYW0gd2lsbCBiZSByZXR1cm5lZCB0aGF0CiAgICAgKiAgIHVzZXMgdGhlIHN0cmluZyB2YWx1ZS4KICAgICAqIC0gYE5VTExgOiBXaGVuIGBudWxsYCBpcyBwYXNzZWQsIGFuIGVtcHR5IHN0cmVhbSBvYmplY3QgaXMgcmV0dXJuZWQuCiAgICAgKiAtIGBjYWxsYWJsZWAgV2hlbiBhIGNhbGxhYmxlIGlzIHBhc3NlZCwgYSByZWFkLW9ubHkgc3RyZWFtIG9iamVjdCB3aWxsIGJlCiAgICAgKiAgIGNyZWF0ZWQgdGhhdCBpbnZva2VzIHRoZSBnaXZlbiBjYWxsYWJsZS4gVGhlIGNhbGxhYmxlIGlzIGludm9rZWQgd2l0aCB0aGUKICAgICAqICAgbnVtYmVyIG9mIHN1Z2dlc3RlZCBieXRlcyB0byByZWFkLiBUaGUgY2FsbGFibGUgY2FuIHJldHVybiBhbnkgbnVtYmVyIG9mCiAgICAgKiAgIGJ5dGVzLCBidXQgTVVTVCByZXR1cm4gYGZhbHNlYCB3aGVuIHRoZXJlIGlzIG5vIG1vcmUgZGF0YSB0byByZXR1cm4uIFRoZQogICAgICogICBzdHJlYW0gb2JqZWN0IHRoYXQgd3JhcHMgdGhlIGNhbGxhYmxlIHdpbGwgaW52b2tlIHRoZSBjYWxsYWJsZSB1bnRpbCB0aGUKICAgICAqICAgbnVtYmVyIG9mIHJlcXVlc3RlZCBieXRlcyBhcmUgYXZhaWxhYmxlLiBBbnkgYWRkaXRpb25hbCBieXRlcyB3aWxsIGJlCiAgICAgKiAgIGJ1ZmZlcmVkIGFuZCB1c2VkIGluIHN1YnNlcXVlbnQgcmVhZHMuCiAgICAgKgogICAgICogQHBhcmFtIHJlc291cmNlfHN0cmluZ3xpbnR8ZmxvYXR8Ym9vbHxTdHJlYW1JbnRlcmZhY2V8Y2FsbGFibGV8XEl0ZXJhdG9yfG51bGwgJHJlc291cmNlIEVudGl0eSBib2R5IGRhdGEKICAgICAqIEBwYXJhbSBhcnJheXtzaXplPzogaW50LCBtZXRhZGF0YT86IGFycmF5fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvcHRpb25zICBBZGRpdGlvbmFsIG9wdGlvbnMKICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlICRyZXNvdXJjZSBhcmcgaXMgbm90IHZhbGlkLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN0cmVhbUZvcigkcmVzb3VyY2UgPSAnJywgYXJyYXkgJG9wdGlvbnMgPSBbXSk6IFN0cmVhbUludGVyZmFjZQogICAgewogICAgICAgIGlmIChpc19zY2FsYXIoJHJlc291cmNlKSkgewogICAgICAgICAgICAkc3RyZWFtID0gc2VsZjo6dHJ5Rm9wZW4oJ3BocDovL3RlbXAnLCAncisnKTsKICAgICAgICAgICAgaWYgKCRyZXNvdXJjZSAhPT0gJycpIHsKICAgICAgICAgICAgICAgIGZ3cml0ZSgkc3RyZWFtLCAoc3RyaW5nKSAkcmVzb3VyY2UpOwogICAgICAgICAgICAgICAgZnNlZWsoJHN0cmVhbSwgMCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBuZXcgU3RyZWFtKCRzdHJlYW0sICRvcHRpb25zKTsKICAgICAgICB9CgogICAgICAgIHN3aXRjaCAoZ2V0dHlwZSgkcmVzb3VyY2UpKSB7CiAgICAgICAgICAgIGNhc2UgJ3Jlc291cmNlJzoKICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgKiBUaGUgJ3BocDovL2lucHV0JyBpcyBhIHNwZWNpYWwgc3RyZWFtIHdpdGggcXVpcmtzIGFuZCBpbmNvbnNpc3RlbmNpZXMuCiAgICAgICAgICAgICAgICAgKiBXZSBhdm9pZCB1c2luZyB0aGF0IHN0cmVhbSBieSByZWFkaW5nIGl0IGludG8gcGhwOi8vdGVtcAogICAgICAgICAgICAgICAgICovCgogICAgICAgICAgICAgICAgLyoqIEB2YXIgcmVzb3VyY2UgJHJlc291cmNlICovCiAgICAgICAgICAgICAgICBpZiAoKFxzdHJlYW1fZ2V0X21ldGFfZGF0YSgkcmVzb3VyY2UpWyd1cmknXSA/PyAnJykgPT09ICdwaHA6Ly9pbnB1dCcpIHsKICAgICAgICAgICAgICAgICAgICAkc3RyZWFtID0gc2VsZjo6dHJ5Rm9wZW4oJ3BocDovL3RlbXAnLCAndysnKTsKICAgICAgICAgICAgICAgICAgICBzdHJlYW1fY29weV90b19zdHJlYW0oJHJlc291cmNlLCAkc3RyZWFtKTsKICAgICAgICAgICAgICAgICAgICBmc2Vlaygkc3RyZWFtLCAwKTsKICAgICAgICAgICAgICAgICAgICAkcmVzb3VyY2UgPSAkc3RyZWFtOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyZWFtKCRyZXNvdXJjZSwgJG9wdGlvbnMpOwogICAgICAgICAgICBjYXNlICdvYmplY3QnOgogICAgICAgICAgICAgICAgLyoqIEB2YXIgb2JqZWN0ICRyZXNvdXJjZSAqLwogICAgICAgICAgICAgICAgaWYgKCRyZXNvdXJjZSBpbnN0YW5jZW9mIFN0cmVhbUludGVyZmFjZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkcmVzb3VyY2U7CiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJHJlc291cmNlIGluc3RhbmNlb2YgXEl0ZXJhdG9yKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQdW1wU3RyZWFtKGZ1bmN0aW9uICgpIHVzZSAoJHJlc291cmNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHJlc291cmNlLT52YWxpZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICRyZXNvdXJjZS0+Y3VycmVudCgpOwogICAgICAgICAgICAgICAgICAgICAgICAkcmVzb3VyY2UtPm5leHQoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgICAgICAgICAgICAgICAgIH0sICRvcHRpb25zKTsKICAgICAgICAgICAgICAgIH0gZWxzZWlmIChtZXRob2RfZXhpc3RzKCRyZXNvdXJjZSwgJ19fdG9TdHJpbmcnKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmOjpzdHJlYW1Gb3IoKHN0cmluZykgJHJlc291cmNlLCAkb3B0aW9ucyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnTlVMTCc6CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0cmVhbShzZWxmOjp0cnlGb3BlbigncGhwOi8vdGVtcCcsICdyKycpLCAkb3B0aW9ucyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNfY2FsbGFibGUoJHJlc291cmNlKSkgewogICAgICAgICAgICByZXR1cm4gbmV3IFB1bXBTdHJlYW0oJHJlc291cmNlLCAkb3B0aW9ucyk7CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCByZXNvdXJjZSB0eXBlOiAnLmdldHR5cGUoJHJlc291cmNlKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTYWZlbHkgb3BlbnMgYSBQSFAgc3RyZWFtIHJlc291cmNlIHVzaW5nIGEgZmlsZW5hbWUuCiAgICAgKgogICAgICogV2hlbiBmb3BlbiBmYWlscywgUEhQIG5vcm1hbGx5IHJhaXNlcyBhIHdhcm5pbmcuIFRoaXMgZnVuY3Rpb24gYWRkcyBhbgogICAgICogZXJyb3IgaGFuZGxlciB0aGF0IGNoZWNrcyBmb3IgZXJyb3JzIGFuZCB0aHJvd3MgYW4gZXhjZXB0aW9uIGluc3RlYWQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgRmlsZSB0byBvcGVuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtb2RlICAgICBNb2RlIHVzZWQgdG8gb3BlbiB0aGUgZmlsZQogICAgICoKICAgICAqIEByZXR1cm4gcmVzb3VyY2UKICAgICAqCiAgICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIGlmIHRoZSBmaWxlIGNhbm5vdCBiZSBvcGVuZWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0cnlGb3BlbihzdHJpbmcgJGZpbGVuYW1lLCBzdHJpbmcgJG1vZGUpCiAgICB7CiAgICAgICAgJGV4ID0gbnVsbDsKICAgICAgICBzZXRfZXJyb3JfaGFuZGxlcihzdGF0aWMgZnVuY3Rpb24gKGludCAkZXJybm8sIHN0cmluZyAkZXJyc3RyKSB1c2UgKCRmaWxlbmFtZSwgJG1vZGUsICYkZXgpOiBib29sIHsKICAgICAgICAgICAgJGV4ID0gbmV3IFxSdW50aW1lRXhjZXB0aW9uKHNwcmludGYoCiAgICAgICAgICAgICAgICAnVW5hYmxlIHRvIG9wZW4gIiVzIiB1c2luZyBtb2RlICIlcyI6ICVzJywKICAgICAgICAgICAgICAgICRmaWxlbmFtZSwKICAgICAgICAgICAgICAgICRtb2RlLAogICAgICAgICAgICAgICAgJGVycnN0cgogICAgICAgICAgICApKTsKCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0pOwoKICAgICAgICB0cnkgewogICAgICAgICAgICAvKiogQHZhciByZXNvdXJjZSAkaGFuZGxlICovCiAgICAgICAgICAgICRoYW5kbGUgPSBmb3BlbigkZmlsZW5hbWUsICRtb2RlKTsKICAgICAgICB9IGNhdGNoIChcVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgICRleCA9IG5ldyBcUnVudGltZUV4Y2VwdGlvbihzcHJpbnRmKAogICAgICAgICAgICAgICAgJ1VuYWJsZSB0byBvcGVuICIlcyIgdXNpbmcgbW9kZSAiJXMiOiAlcycsCiAgICAgICAgICAgICAgICAkZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAkbW9kZSwKICAgICAgICAgICAgICAgICRlLT5nZXRNZXNzYWdlKCkKICAgICAgICAgICAgKSwgMCwgJGUpOwogICAgICAgIH0KCiAgICAgICAgcmVzdG9yZV9lcnJvcl9oYW5kbGVyKCk7CgogICAgICAgIGlmICgkZXgpIHsKICAgICAgICAgICAgLyoqIEB2YXIgXFJ1bnRpbWVFeGNlcHRpb24gJGV4ICovCiAgICAgICAgICAgIHRocm93ICRleDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkaGFuZGxlOwogICAgfQoKICAgIC8qKgogICAgICogU2FmZWx5IGdldHMgdGhlIGNvbnRlbnRzIG9mIGEgZ2l2ZW4gc3RyZWFtLgogICAgICoKICAgICAqIFdoZW4gc3RyZWFtX2dldF9jb250ZW50cyBmYWlscywgUEhQIG5vcm1hbGx5IHJhaXNlcyBhIHdhcm5pbmcuIFRoaXMKICAgICAqIGZ1bmN0aW9uIGFkZHMgYW4gZXJyb3IgaGFuZGxlciB0aGF0IGNoZWNrcyBmb3IgZXJyb3JzIGFuZCB0aHJvd3MgYW4KICAgICAqIGV4Y2VwdGlvbiBpbnN0ZWFkLgogICAgICoKICAgICAqIEBwYXJhbSByZXNvdXJjZSAkc3RyZWFtCiAgICAgKgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBpZiB0aGUgc3RyZWFtIGNhbm5vdCBiZSByZWFkCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdHJ5R2V0Q29udGVudHMoJHN0cmVhbSk6IHN0cmluZwogICAgewogICAgICAgICRleCA9IG51bGw7CiAgICAgICAgc2V0X2Vycm9yX2hhbmRsZXIoc3RhdGljIGZ1bmN0aW9uIChpbnQgJGVycm5vLCBzdHJpbmcgJGVycnN0cikgdXNlICgmJGV4KTogYm9vbCB7CiAgICAgICAgICAgICRleCA9IG5ldyBcUnVudGltZUV4Y2VwdGlvbihzcHJpbnRmKAogICAgICAgICAgICAgICAgJ1VuYWJsZSB0byByZWFkIHN0cmVhbSBjb250ZW50czogJXMnLAogICAgICAgICAgICAgICAgJGVycnN0cgogICAgICAgICAgICApKTsKCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0pOwoKICAgICAgICB0cnkgewogICAgICAgICAgICAvKiogQHZhciBzdHJpbmd8ZmFsc2UgJGNvbnRlbnRzICovCiAgICAgICAgICAgICRjb250ZW50cyA9IHN0cmVhbV9nZXRfY29udGVudHMoJHN0cmVhbSk7CgogICAgICAgICAgICBpZiAoJGNvbnRlbnRzID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgJGV4ID0gbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdVbmFibGUgdG8gcmVhZCBzdHJlYW0gY29udGVudHMnKTsKICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgJGV4ID0gbmV3IFxSdW50aW1lRXhjZXB0aW9uKHNwcmludGYoCiAgICAgICAgICAgICAgICAnVW5hYmxlIHRvIHJlYWQgc3RyZWFtIGNvbnRlbnRzOiAlcycsCiAgICAgICAgICAgICAgICAkZS0+Z2V0TWVzc2FnZSgpCiAgICAgICAgICAgICksIDAsICRlKTsKICAgICAgICB9CgogICAgICAgIHJlc3RvcmVfZXJyb3JfaGFuZGxlcigpOwoKICAgICAgICBpZiAoJGV4KSB7CiAgICAgICAgICAgIC8qKiBAdmFyIFxSdW50aW1lRXhjZXB0aW9uICRleCAqLwogICAgICAgICAgICB0aHJvdyAkZXg7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGNvbnRlbnRzOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIFVyaUludGVyZmFjZSBmb3IgdGhlIGdpdmVuIHZhbHVlLgogICAgICoKICAgICAqIFRoaXMgZnVuY3Rpb24gYWNjZXB0cyBhIHN0cmluZyBvciBVcmlJbnRlcmZhY2UgYW5kIHJldHVybnMgYQogICAgICogVXJpSW50ZXJmYWNlIGZvciB0aGUgZ2l2ZW4gdmFsdWUuIElmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IGEKICAgICAqIFVyaUludGVyZmFjZSwgaXQgaXMgcmV0dXJuZWQgYXMtaXMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaQogICAgICoKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVyaUZvcigkdXJpKTogVXJpSW50ZXJmYWNlCiAgICB7CiAgICAgICAgaWYgKCR1cmkgaW5zdGFuY2VvZiBVcmlJbnRlcmZhY2UpIHsKICAgICAgICAgICAgcmV0dXJuICR1cmk7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNfc3RyaW5nKCR1cmkpKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgVXJpKCR1cmkpOwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VSSSBtdXN0IGJlIGEgc3RyaW5nIG9yIFVyaUludGVyZmFjZScpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAibGVhZ3VlL29hdXRoMi1jbGllbnQiLAogICAgImRlc2NyaXB0aW9uIjogIk9BdXRoIDIuMCBDbGllbnQgTGlicmFyeSIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImNvbmZpZyI6IHsKICAgICAgICAic29ydC1wYWNrYWdlcyI6IHRydWUKICAgIH0sCiAgICAicmVxdWlyZSI6IHsKICAgICAgICAicGhwIjogIl43LjEgfHwgPj04LjAuMCA8OC42LjAiLAogICAgICAgICJleHQtanNvbiI6ICIqIiwKICAgICAgICAiZ3V6emxlaHR0cC9ndXp6bGUiOiAiXjYuNS44IHx8IF43LjQuNSIKICAgIH0sCiAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgIm1vY2tlcnkvbW9ja2VyeSI6ICJeMS4zLjUiLAogICAgICAgICJwaHAtcGFyYWxsZWwtbGludC9waHAtcGFyYWxsZWwtbGludCI6ICJeMS40IiwKICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl43IHx8IF44IHx8IF45IHx8IF4xMCB8fCBeMTEiLAogICAgICAgICJzcXVpemxhYnMvcGhwX2NvZGVzbmlmZmVyIjogIl4zLjExIgogICAgfSwKICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAib2F1dGgiLAogICAgICAgICJvYXV0aDIiLAogICAgICAgICJhdXRob3JpemF0aW9uIiwKICAgICAgICAiYXV0aGVudGljYXRpb24iLAogICAgICAgICJpZHAiLAogICAgICAgICJpZGVudGl0eSIsCiAgICAgICAgInNzbyIsCiAgICAgICAgInNpbmdsZSBzaWduIG9uIgogICAgXSwKICAgICJhdXRob3JzIjogWwogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiQWxleCBCaWxiaWUiLAogICAgICAgICAgICAiZW1haWwiOiAiaGVsbG9AYWxleGJpbGJpZS5jb20iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cDovL3d3dy5hbGV4YmlsYmllLmNvbSIsCiAgICAgICAgICAgICJyb2xlIjogIkRldmVsb3BlciIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiV29vZHkgR2lsayIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vc2hhZG93aGFuZCIsCiAgICAgICAgICAgICJyb2xlIjogIkNvbnRyaWJ1dG9yIgogICAgICAgIH0KCiAgICBdLAogICAgImF1dG9sb2FkIjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIkxlYWd1ZVxcT0F1dGgyXFxDbGllbnRcXCI6ICJzcmMvIgogICAgICAgIH0KICAgIH0sCiAgICAiYXV0b2xvYWQtZGV2IjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIkxlYWd1ZVxcT0F1dGgyXFxDbGllbnRcXFRlc3RcXCI6ICJ0ZXN0L3NyYy8iCiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTMtMjAyMyBBbGV4IEJpbGJpZSA8aGVsbG9AYWxleGJpbGJpZS5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/phpunit.xml.dist</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHBocHVuaXQgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgeHNpOm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb249InZlbmRvci9waHB1bml0L3BocHVuaXQvcGhwdW5pdC54c2QiCiAgICAgICAgIGJvb3RzdHJhcD0iLi92ZW5kb3IvYXV0b2xvYWQucGhwIgogICAgICAgICBjb2xvcnM9InRydWUiCiAgICAgICAgIGNhY2hlRGlyZWN0b3J5PSJidWlsZC9waHB1bml0Ij4KCiAgICA8Y292ZXJhZ2U+CiAgICAgICAgPHJlcG9ydD4KICAgICAgICAgICAgPGNsb3ZlciBvdXRwdXRGaWxlPSJidWlsZC9sb2dzL2Nsb3Zlci54bWwiLz4KICAgICAgICAgICAgPGh0bWwgb3V0cHV0RGlyZWN0b3J5PSJidWlsZC9jb3ZlcmFnZSIvPgogICAgICAgICAgICA8dGV4dCBvdXRwdXRGaWxlPSJwaHA6Ly9zdGRvdXQiLz4KICAgICAgICA8L3JlcG9ydD4KICAgIDwvY292ZXJhZ2U+CgogICAgPHRlc3RzdWl0ZXM+CiAgICAgICAgPHRlc3RzdWl0ZSBuYW1lPSJhbGwiPgogICAgICAgICAgICA8ZGlyZWN0b3J5PnRlc3Q8L2RpcmVjdG9yeT4KICAgICAgICA8L3Rlc3RzdWl0ZT4KICAgIDwvdGVzdHN1aXRlcz4KCiAgICA8bG9nZ2luZz4KICAgICAgICA8anVuaXQgb3V0cHV0RmlsZT0iYnVpbGQvcmVwb3J0Lmp1bml0LnhtbCIvPgogICAgPC9sb2dnaW5nPgoKICAgIDxzb3VyY2U+CiAgICAgICAgPGluY2x1ZGU+CiAgICAgICAgICAgIDxkaXJlY3Rvcnkgc3VmZml4PSIucGhwIj5zcmM8L2RpcmVjdG9yeT4KICAgICAgICA8L2luY2x1ZGU+CiAgICA8L3NvdXJjZT4KCiAgICA8cGhwPgogICAgICAgIDxlbnYgbmFtZT0iWERFQlVHX01PREUiIHZhbHVlPSJjb3ZlcmFnZSIvPgogICAgPC9waHA+Cgo8L3BocHVuaXQ+Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBPQXV0aCAyLjAgQ2xpZW50CgpUaGlzIHBhY2thZ2UgcHJvdmlkZXMgYSBiYXNlIGZvciBpbnRlZ3JhdGluZyB3aXRoIFtPQXV0aCAyLjBdKGh0dHA6Ly9vYXV0aC5uZXQvMi8pIHNlcnZpY2UgcHJvdmlkZXJzLgoKWyFbR2l0dGVyIENoYXRdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2UvZ2l0dGVyLWpvaW5fY2hhdC1icmlnaHRncmVlbi5zdmc/c3R5bGU9ZmxhdC1zcXVhcmUpXShodHRwczovL2dpdHRlci5pbS90aGVwaHBsZWFndWUvb2F1dGgyLWNsaWVudCkKWyFbU291cmNlIENvZGVdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2Uvc291cmNlLXRoZXBocGxlYWd1ZS9vYXV0aDItLWNsaWVudC1ibHVlLnN2Zz9zdHlsZT1mbGF0LXNxdWFyZSldKGh0dHBzOi8vZ2l0aHViLmNvbS90aGVwaHBsZWFndWUvb2F1dGgyLWNsaWVudCkKWyFbTGF0ZXN0IFZlcnNpb25dKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL3JlbGVhc2UvdGhlcGhwbGVhZ3VlL29hdXRoMi1jbGllbnQuc3ZnP3N0eWxlPWZsYXQtc3F1YXJlKV0oaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50L3JlbGVhc2VzKQpbIVtTb2Z0d2FyZSBMaWNlbnNlXShodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL2xpY2Vuc2UtTUlULWJyaWdodGdyZWVuLnN2Zz9zdHlsZT1mbGF0LXNxdWFyZSldKGh0dHBzOi8vZ2l0aHViLmNvbS90aGVwaHBsZWFndWUvb2F1dGgyLWNsaWVudC9ibG9iL21hc3Rlci9MSUNFTlNFKQpbIVtCdWlsZCBTdGF0dXNdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL2FjdGlvbnMvd29ya2Zsb3cvc3RhdHVzL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50L2NvbnRpbnVvdXMtaW50ZWdyYXRpb24ueW1sP2xhYmVsPUNJJmxvZ289Z2l0aHViJnN0eWxlPWZsYXQtc3F1YXJlKV0oaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50L2FjdGlvbnM/cXVlcnk9d29ya2Zsb3clM0FDSSkKWyFbQ29kZWNvdiBDb2RlIENvdmVyYWdlXShodHRwczovL2ltZy5zaGllbGRzLmlvL2NvZGVjb3YvYy9naC90aGVwaHBsZWFndWUvb2F1dGgyLWNsaWVudD9sYWJlbD1jb2RlY292JmxvZ289Y29kZWNvdiZzdHlsZT1mbGF0LXNxdWFyZSldKGh0dHBzOi8vY29kZWNvdi5pby9naC90aGVwaHBsZWFndWUvb2F1dGgyLWNsaWVudCkKWyFbVG90YWwgRG93bmxvYWRzXShodHRwczovL2ltZy5zaGllbGRzLmlvL3BhY2thZ2lzdC9kdC9sZWFndWUvb2F1dGgyLWNsaWVudC5zdmc/c3R5bGU9ZmxhdC1zcXVhcmUpXShodHRwczovL3BhY2thZ2lzdC5vcmcvcGFja2FnZXMvbGVhZ3VlL29hdXRoMi1jbGllbnQpCgotLS0KClRoZSBPQXV0aCAyLjAgbG9naW4gZmxvdywgc2VlbiBjb21tb25seSBhcm91bmQgdGhlIHdlYiBpbiB0aGUgZm9ybSBvZiAiQ29ubmVjdCB3aXRoIEZhY2Vib29rL0dvb2dsZS9ldGMuIiBidXR0b25zLCBpcyBhIGNvbW1vbiBpbnRlZ3JhdGlvbiBhZGRlZCB0byB3ZWIgYXBwbGljYXRpb25zLCBidXQgaXQgY2FuIGJlIHRyaWNreSBhbmQgdGVkaW91cyB0byBkbyByaWdodC4gVG8gaGVscCwgd2UndmUgY3JlYXRlZCB0aGUgYGxlYWd1ZS9vYXV0aDItY2xpZW50YCBwYWNrYWdlLCB3aGljaCBwcm92aWRlcyBhIGJhc2UgZm9yIGludGVncmF0aW5nIHdpdGggdmFyaW91cyBPQXV0aCAyLjAgcHJvdmlkZXJzLCB3aXRob3V0IG92ZXJidXJkZW5pbmcgeW91ciBhcHBsaWNhdGlvbiB3aXRoIHRoZSBjb25jZXJucyBvZiBbUkZDIDY3NDldKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY3NDkpLgoKVGhpcyBPQXV0aCAyLjAgY2xpZW50IGxpYnJhcnkgd2lsbCB3b3JrIHdpdGggYW55IE9BdXRoIDIuMCBwcm92aWRlciB0aGF0IGNvbmZvcm1zIHRvIHRoZSBPQXV0aCAyLjAgQXV0aG9yaXphdGlvbiBGcmFtZXdvcmsuIE91dC1vZi10aGUtYm94LCB3ZSBwcm92aWRlIGEgYEdlbmVyaWNQcm92aWRlcmAgY2xhc3MgdG8gY29ubmVjdCB0byBhbnkgc2VydmljZSBwcm92aWRlciB0aGF0IHVzZXMgW0JlYXJlciB0b2tlbnNdKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY3NTApLiBTZWUgb3VyIFtiYXNpYyB1c2FnZSBndWlkZV0oaHR0cHM6Ly9vYXV0aDItY2xpZW50LnRoZXBocGxlYWd1ZS5jb20vdXNhZ2UvKSBmb3IgZXhhbXBsZXMgdXNpbmcgYEdlbmVyaWNQcm92aWRlcmAuCgpNYW55IHNlcnZpY2UgcHJvdmlkZXJzIHByb3ZpZGUgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5IGFib3ZlIGFuZCBiZXlvbmQgdGhlIE9BdXRoIDIuMCBzcGVjaWZpY2F0aW9uLiBGb3IgdGhpcyByZWFzb24sIHlvdSBtYXkgZXh0ZW5kIGFuZCB3cmFwIHRoaXMgbGlicmFyeSB0byBzdXBwb3J0IGFkZGl0aW9uYWwgYmVoYXZpb3IuIFRoZXJlIGFyZSBhbHJlYWR5IG1hbnkgW29mZmljaWFsXShodHRwczovL29hdXRoMi1jbGllbnQudGhlcGhwbGVhZ3VlLmNvbS9wcm92aWRlcnMvbGVhZ3VlLykgYW5kIFt0aGlyZC1wYXJ0eV0oaHR0cHM6Ly9vYXV0aDItY2xpZW50LnRoZXBocGxlYWd1ZS5jb20vcHJvdmlkZXJzL3RoaXJkcGFydHkvKSBwcm92aWRlciBjbGllbnRzIGF2YWlsYWJsZSAoZS5nLiwgRmFjZWJvb2ssIEdpdEh1YiwgR29vZ2xlLCBJbnN0YWdyYW0sIExpbmtlZEluLCBldGMuKS4gSWYgeW91ciBwcm92aWRlciBpc24ndCBpbiB0aGUgbGlzdCwgZmVlbCBmcmVlIHRvIGFkZCBpdC4KClRoaXMgcGFja2FnZSBpcyBjb21wbGlhbnQgd2l0aCBbUFNSLTFdW10sIFtQU1ItMl1bXSwgW1BTUi00XVtdLCBhbmQgW1BTUi03XVtdLiBJZiB5b3Ugbm90aWNlIGNvbXBsaWFuY2Ugb3ZlcnNpZ2h0cywgcGxlYXNlIHNlbmQgYSBwYXRjaCB2aWEgcHVsbCByZXF1ZXN0LiBJZiB5b3UncmUgaW50ZXJlc3RlZCBpbiBjb250cmlidXRpbmcgdG8gdGhpcyBsaWJyYXJ5LCBwbGVhc2UgdGFrZSBhIGxvb2sgYXQgb3VyIFtjb250cmlidXRpbmcgZ3VpZGVsaW5lc10oaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50L2Jsb2IvbWFzdGVyL0NPTlRSSUJVVElORy5tZCkuCgojIyBSZXF1aXJlbWVudHMKCldlIHN1cHBvcnQgdGhlIGZvbGxvd2luZyB2ZXJzaW9ucyBvZiBQSFA6CgoqIFBIUCA4LjUKKiBQSFAgOC40CiogUEhQIDguMwoqIFBIUCA4LjIKKiBQSFAgOC4xCiogUEhQIDguMAoqIFBIUCA3LjQKKiBQSFAgNy4zCiogUEhQIDcuMgoqIFBIUCA3LjEKCiMjIFByb3ZpZGVyIENsaWVudHMKCldlIHByb3ZpZGUgYSBsaXN0IG9mIFtvZmZpY2lhbCBQSFAgTGVhZ3VlIHByb3ZpZGVyIGNsaWVudHNdKGh0dHBzOi8vb2F1dGgyLWNsaWVudC50aGVwaHBsZWFndWUuY29tL3Byb3ZpZGVycy9sZWFndWUvKSwgYXMgd2VsbCBhcyBbdGhpcmQtcGFydHkgcHJvdmlkZXIgY2xpZW50c10oaHR0cHM6Ly9vYXV0aDItY2xpZW50LnRoZXBocGxlYWd1ZS5jb20vcHJvdmlkZXJzL3RoaXJkcGFydHkvKS4KClRvIGJ1aWxkIHlvdXIgb3duIHByb3ZpZGVyIGNsaWVudCwgcGxlYXNlIHJlZmVyIHRvICJbSW1wbGVtZW50aW5nIGEgUHJvdmlkZXIgQ2xpZW50XShodHRwczovL29hdXRoMi1jbGllbnQudGhlcGhwbGVhZ3VlLmNvbS9wcm92aWRlcnMvaW1wbGVtZW50aW5nLykuIgoKIyMgVXNhZ2UKCkZvciB1c2FnZSBhbmQgY29kZSBleGFtcGxlcywgY2hlY2sgb3V0IG91ciBbYmFzaWMgdXNhZ2UgZ3VpZGVdKGh0dHBzOi8vb2F1dGgyLWNsaWVudC50aGVwaHBsZWFndWUuY29tL3VzYWdlLykuCgojIyBDb250cmlidXRpbmcKClBsZWFzZSBzZWUgW291ciBjb250cmlidXRpbmcgZ3VpZGVsaW5lc10oaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50L2Jsb2IvbWFzdGVyL0NPTlRSSUJVVElORy5tZCkgZm9yIGRldGFpbHMuCgojIyBMaWNlbnNlCgpUaGUgTUlUIExpY2Vuc2UgKE1JVCkuIFBsZWFzZSBzZWUgW0xJQ0VOU0VdKGh0dHBzOi8vZ2l0aHViLmNvbS90aGVwaHBsZWFndWUvb2F1dGgyLWNsaWVudC9ibG9iL21hc3Rlci9MSUNFTlNFKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCgpbUFNSLTFdOiBodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9maWctc3RhbmRhcmRzL2Jsb2IvbWFzdGVyL2FjY2VwdGVkL1BTUi0xLWJhc2ljLWNvZGluZy1zdGFuZGFyZC5tZApbUFNSLTJdOiBodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9maWctc3RhbmRhcmRzL2Jsb2IvbWFzdGVyL2FjY2VwdGVkL1BTUi0yLWNvZGluZy1zdHlsZS1ndWlkZS5tZApbUFNSLTRdOiBodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9maWctc3RhbmRhcmRzL2Jsb2IvbWFzdGVyL2FjY2VwdGVkL1BTUi00LWF1dG9sb2FkZXIubWQKW1BTUi03XTogaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvZmlnLXN0YW5kYXJkcy9ibG9iL21hc3Rlci9hY2NlcHRlZC9QU1ItNy1odHRwLW1lc3NhZ2UubWQK]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Grant/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Grant/AbstractGrant.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxHcmFudDsKCnVzZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb29sXFJlcXVpcmVkUGFyYW1ldGVyVHJhaXQ7CgovKioKICogUmVwcmVzZW50cyBhIHR5cGUgb2YgYXV0aG9yaXphdGlvbiBncmFudC4KICoKICogQW4gYXV0aG9yaXphdGlvbiBncmFudCBpcyBhIGNyZWRlbnRpYWwgcmVwcmVzZW50aW5nIHRoZSByZXNvdXJjZQogKiBvd25lcidzIGF1dGhvcml6YXRpb24gKHRvIGFjY2VzcyBpdHMgcHJvdGVjdGVkIHJlc291cmNlcykgdXNlZCBieSB0aGUKICogY2xpZW50IHRvIG9idGFpbiBhbiBhY2Nlc3MgdG9rZW4uICBPQXV0aCAyLjAgZGVmaW5lcyBmb3VyCiAqIGdyYW50IHR5cGVzIC0tIGF1dGhvcml6YXRpb24gY29kZSwgaW1wbGljaXQsIHJlc291cmNlIG93bmVyIHBhc3N3b3JkCiAqIGNyZWRlbnRpYWxzLCBhbmQgY2xpZW50IGNyZWRlbnRpYWxzIC0tIGFzIHdlbGwgYXMgYW4gZXh0ZW5zaWJpbGl0eQogKiBtZWNoYW5pc20gZm9yIGRlZmluaW5nIGFkZGl0aW9uYWwgdHlwZXMuCiAqCiAqIEBsaW5rIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY3NDkjc2VjdGlvbi0xLjMgQXV0aG9yaXphdGlvbiBHcmFudCAoUkZDIDY3NDksIMKnMS4zKQogKi8KYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RHcmFudAp7CiAgICB1c2UgUmVxdWlyZWRQYXJhbWV0ZXJUcmFpdDsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhpcyBncmFudCwgZWcuICdncmFudF9uYW1lJywgd2hpY2ggaXMgdXNlZCBhcyB0aGUKICAgICAqIGdyYW50IHR5cGUgd2hlbiBlbmNvZGluZyBVUkwgcXVlcnkgcGFyYW1ldGVycy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TmFtZSgpOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHJlcXVpcmVkIHJlcXVlc3QgcGFyYW1ldGVycy4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIGFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBnZXRSZXF1aXJlZFJlcXVlc3RQYXJhbWV0ZXJzKCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoaXMgZ3JhbnQncyBuYW1lIGFzIGl0cyBzdHJpbmcgcmVwcmVzZW50YXRpb24uIFRoaXMgYWxsb3dzIGZvcgogICAgICogc3RyaW5nIGludGVycG9sYXRpb24gd2hlbiBidWlsZGluZyBVUkwgcXVlcnkgcGFyYW1ldGVycy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXROYW1lKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBQcmVwYXJlcyBhbiBhY2Nlc3MgdG9rZW4gcmVxdWVzdCdzIHBhcmFtZXRlcnMgYnkgY2hlY2tpbmcgdGhhdCBhbGwKICAgICAqIHJlcXVpcmVkIHBhcmFtZXRlcnMgYXJlIHNldCwgdGhlbiBtZXJnaW5nIHdpdGggYW55IGdpdmVuIGRlZmF1bHRzLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgJGRlZmF1bHRzCiAgICAgKiBAcGFyYW0gIGFycmF5ICRvcHRpb25zCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcmVwYXJlUmVxdWVzdFBhcmFtZXRlcnMoYXJyYXkgJGRlZmF1bHRzLCBhcnJheSAkb3B0aW9ucykKICAgIHsKICAgICAgICAkZGVmYXVsdHNbJ2dyYW50X3R5cGUnXSA9ICR0aGlzLT5nZXROYW1lKCk7CgogICAgICAgICRyZXF1aXJlZCA9ICR0aGlzLT5nZXRSZXF1aXJlZFJlcXVlc3RQYXJhbWV0ZXJzKCk7CiAgICAgICAgJHByb3ZpZGVkID0gYXJyYXlfbWVyZ2UoJGRlZmF1bHRzLCAkb3B0aW9ucyk7CgogICAgICAgICR0aGlzLT5jaGVja1JlcXVpcmVkUGFyYW1ldGVycygkcmVxdWlyZWQsICRwcm92aWRlZCk7CgogICAgICAgIHJldHVybiAkcHJvdmlkZWQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Grant/AuthorizationCode.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxHcmFudDsKCi8qKgogKiBSZXByZXNlbnRzIGFuIGF1dGhvcml6YXRpb24gY29kZSBncmFudC4KICoKICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjc0OSNzZWN0aW9uLTEuMy4xIEF1dGhvcml6YXRpb24gQ29kZSAoUkZDIDY3NDksIMKnMS4zLjEpCiAqLwpjbGFzcyBBdXRob3JpemF0aW9uQ29kZSBleHRlbmRzIEFic3RyYWN0R3JhbnQKewogICAgLyoqCiAgICAgKiBAaW5oZXJpdGRvYwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TmFtZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICdhdXRob3JpemF0aW9uX2NvZGUnOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXRkb2MKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFJlcXVpcmVkUmVxdWVzdFBhcmFtZXRlcnMoKQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdjb2RlJywKICAgICAgICBdOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Grant/ClientCredentials.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxHcmFudDsKCi8qKgogKiBSZXByZXNlbnRzIGEgY2xpZW50IGNyZWRlbnRpYWxzIGdyYW50LgogKgogKiBAbGluayBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NzQ5I3NlY3Rpb24tMS4zLjQgQ2xpZW50IENyZWRlbnRpYWxzIChSRkMgNjc0OSwgwqcxLjMuNCkKICovCmNsYXNzIENsaWVudENyZWRlbnRpYWxzIGV4dGVuZHMgQWJzdHJhY3RHcmFudAp7CiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXROYW1lKCkKICAgIHsKICAgICAgICByZXR1cm4gJ2NsaWVudF9jcmVkZW50aWFscyc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdGRvYwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0UmVxdWlyZWRSZXF1ZXN0UGFyYW1ldGVycygpCiAgICB7CiAgICAgICAgcmV0dXJuIFtdOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Grant/Exception/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Grant/Exception/InvalidGrantException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxHcmFudFxFeGNlcHRpb247Cgp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwoKLyoqCiAqIEV4Y2VwdGlvbiB0aHJvd24gaWYgdGhlIGdyYW50IGRvZXMgbm90IGV4dGVuZCBmcm9tIEFic3RyYWN0R3JhbnQuCiAqCiAqIEBzZWUgTGVhZ3VlXE9BdXRoMlxDbGllbnRcR3JhbnRcQWJzdHJhY3RHcmFudAogKi8KY2xhc3MgSW52YWxpZEdyYW50RXhjZXB0aW9uIGV4dGVuZHMgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Grant/GrantFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxHcmFudDsKCnVzZSBMZWFndWVcT0F1dGgyXENsaWVudFxHcmFudFxFeGNlcHRpb25cSW52YWxpZEdyYW50RXhjZXB0aW9uOwoKLyoqCiAqIFJlcHJlc2VudHMgYSBmYWN0b3J5IHVzZWQgd2hlbiByZXRyaWV2aW5nIGFuIGF1dGhvcml6YXRpb24gZ3JhbnQgdHlwZS4KICovCmNsYXNzIEdyYW50RmFjdG9yeQp7CiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkICRyZWdpc3RyeSA9IFtdOwoKICAgIC8qKgogICAgICogRGVmaW5lcyBhIGdyYW50IHNpbmdsZXRvbiBpbiB0aGUgcmVnaXN0cnkuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgJG5hbWUKICAgICAqIEBwYXJhbSAgQWJzdHJhY3RHcmFudCAkZ3JhbnQKICAgICAqIEByZXR1cm4gc2VsZgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0R3JhbnQoJG5hbWUsIEFic3RyYWN0R3JhbnQgJGdyYW50KQogICAgewogICAgICAgICR0aGlzLT5yZWdpc3RyeVskbmFtZV0gPSAkZ3JhbnQ7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBncmFudCBzaW5nbGV0b24gYnkgbmFtZS4KICAgICAqCiAgICAgKiBJZiB0aGUgZ3JhbnQgaGFzIG5vdCBiZSByZWdpc3RlcmVkLCBhIGRlZmF1bHQgZ3JhbnQgd2lsbCBiZSBsb2FkZWQuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgJG5hbWUKICAgICAqIEByZXR1cm4gQWJzdHJhY3RHcmFudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0R3JhbnQoJG5hbWUpCiAgICB7CiAgICAgICAgaWYgKGVtcHR5KCR0aGlzLT5yZWdpc3RyeVskbmFtZV0pKSB7CiAgICAgICAgICAgICR0aGlzLT5yZWdpc3RlckRlZmF1bHRHcmFudCgkbmFtZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPnJlZ2lzdHJ5WyRuYW1lXTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlZ2lzdGVycyBhIGRlZmF1bHQgZ3JhbnQgc2luZ2xldG9uIGJ5IG5hbWUuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgJG5hbWUKICAgICAqIEByZXR1cm4gc2VsZgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0R3JhbnQoJG5hbWUpCiAgICB7CiAgICAgICAgLy8gUGFzY2FsQ2FzZSB0aGUgZ3JhbnQuIEUuZzogJ2F1dGhvcml6YXRpb25fY29kZScgYmVjb21lcyAnQXV0aG9yaXphdGlvbkNvZGUnCiAgICAgICAgJGNsYXNzID0gc3RyX3JlcGxhY2UoJyAnLCAnJywgdWN3b3JkcyhzdHJfcmVwbGFjZShbJy0nLCAnXyddLCAnICcsICRuYW1lKSkpOwogICAgICAgICRjbGFzcyA9ICdMZWFndWVcXE9BdXRoMlxcQ2xpZW50XFxHcmFudFxcJyAuICRjbGFzczsKCiAgICAgICAgJHRoaXMtPmNoZWNrR3JhbnQoJGNsYXNzKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5zZXRHcmFudCgkbmFtZSwgbmV3ICRjbGFzcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZXRlcm1pbmVzIGlmIGEgdmFyaWFibGUgaXMgYSB2YWxpZCBncmFudC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICRjbGFzcwogICAgICogQHJldHVybiBib29sZWFuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0dyYW50KCRjbGFzcykKICAgIHsKICAgICAgICByZXR1cm4gaXNfc3ViY2xhc3Nfb2YoJGNsYXNzLCBBYnN0cmFjdEdyYW50OjpjbGFzcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgYSB2YXJpYWJsZSBpcyBhIHZhbGlkIGdyYW50LgogICAgICoKICAgICAqIEB0aHJvd3MgSW52YWxpZEdyYW50RXhjZXB0aW9uCiAgICAgKiBAcGFyYW0gIG1peGVkICRjbGFzcwogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjaGVja0dyYW50KCRjbGFzcykKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5pc0dyYW50KCRjbGFzcykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRHcmFudEV4Y2VwdGlvbihzcHJpbnRmKAogICAgICAgICAgICAgICAgJ0dyYW50ICIlcyIgbXVzdCBleHRlbmQgQWJzdHJhY3RHcmFudCcsCiAgICAgICAgICAgICAgICBpc19vYmplY3QoJGNsYXNzKSA/IGdldF9jbGFzcygkY2xhc3MpIDogJGNsYXNzCiAgICAgICAgICAgICkpOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Grant/Password.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxHcmFudDsKCi8qKgogKiBSZXByZXNlbnRzIGEgcmVzb3VyY2Ugb3duZXIgcGFzc3dvcmQgY3JlZGVudGlhbHMgZ3JhbnQuCiAqCiAqIEBsaW5rIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY3NDkjc2VjdGlvbi0xLjMuMyBSZXNvdXJjZSBPd25lciBQYXNzd29yZCBDcmVkZW50aWFscyAoUkZDIDY3NDksIMKnMS4zLjMpCiAqLwpjbGFzcyBQYXNzd29yZCBleHRlbmRzIEFic3RyYWN0R3JhbnQKewogICAgLyoqCiAgICAgKiBAaW5oZXJpdGRvYwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TmFtZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICdwYXNzd29yZCc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdGRvYwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0UmVxdWlyZWRSZXF1ZXN0UGFyYW1ldGVycygpCiAgICB7CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJ3VzZXJuYW1lJywKICAgICAgICAgICAgJ3Bhc3N3b3JkJywKICAgICAgICBdOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Grant/RefreshToken.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxHcmFudDsKCi8qKgogKiBSZXByZXNlbnRzIGEgcmVmcmVzaCB0b2tlbiBncmFudC4KICoKICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjc0OSNzZWN0aW9uLTYgUmVmcmVzaGluZyBhbiBBY2Nlc3MgVG9rZW4gKFJGQyA2NzQ5LCDCpzYpCiAqLwpjbGFzcyBSZWZyZXNoVG9rZW4gZXh0ZW5kcyBBYnN0cmFjdEdyYW50CnsKICAgIC8qKgogICAgICogQGluaGVyaXRkb2MKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldE5hbWUoKQogICAgewogICAgICAgIHJldHVybiAncmVmcmVzaF90b2tlbic7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdGRvYwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0UmVxdWlyZWRSZXF1ZXN0UGFyYW1ldGVycygpCiAgICB7CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJ3JlZnJlc2hfdG9rZW4nLAogICAgICAgIF07CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/OptionProvider/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/OptionProvider/HttpBasicAuthOptionProvider.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxPcHRpb25Qcm92aWRlcjsKCnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CgovKioKICogQWRkIGh0dHAgYmFzaWMgYXV0aCBpbnRvIGFjY2VzcyB0b2tlbiByZXF1ZXN0IG9wdGlvbnMKICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY3NDkjc2VjdGlvbi0yLjMuMQogKi8KY2xhc3MgSHR0cEJhc2ljQXV0aE9wdGlvblByb3ZpZGVyIGV4dGVuZHMgUG9zdEF1dGhPcHRpb25Qcm92aWRlcgp7CiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBY2Nlc3NUb2tlbk9wdGlvbnMoJG1ldGhvZCwgYXJyYXkgJHBhcmFtcykKICAgIHsKICAgICAgICBpZiAoZW1wdHkoJHBhcmFtc1snY2xpZW50X2lkJ10pIHx8IGVtcHR5KCRwYXJhbXNbJ2NsaWVudF9zZWNyZXQnXSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignY2xpZW50SWQgYW5kIGNsaWVudFNlY3JldCBhcmUgcmVxdWlyZWQgZm9yIGh0dHAgYmFzaWMgYXV0aCcpOwogICAgICAgIH0KCiAgICAgICAgJGVuY29kZWRDcmVkZW50aWFscyA9IGJhc2U2NF9lbmNvZGUoc3ByaW50ZignJXM6JXMnLCAkcGFyYW1zWydjbGllbnRfaWQnXSwgJHBhcmFtc1snY2xpZW50X3NlY3JldCddKSk7CiAgICAgICAgdW5zZXQoJHBhcmFtc1snY2xpZW50X2lkJ10sICRwYXJhbXNbJ2NsaWVudF9zZWNyZXQnXSk7CgogICAgICAgICRvcHRpb25zID0gcGFyZW50OjpnZXRBY2Nlc3NUb2tlbk9wdGlvbnMoJG1ldGhvZCwgJHBhcmFtcyk7CiAgICAgICAgJG9wdGlvbnNbJ2hlYWRlcnMnXVsnQXV0aG9yaXphdGlvbiddID0gJ0Jhc2ljICcgLiAkZW5jb2RlZENyZWRlbnRpYWxzOwoKICAgICAgICByZXR1cm4gJG9wdGlvbnM7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/OptionProvider/OptionProviderInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxPcHRpb25Qcm92aWRlcjsKCi8qKgogKiBJbnRlcmZhY2UgZm9yIGFjY2VzcyB0b2tlbiBvcHRpb25zIHByb3ZpZGVyCiAqLwppbnRlcmZhY2UgT3B0aW9uUHJvdmlkZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBCdWlsZHMgcmVxdWVzdCBvcHRpb25zIHVzZWQgZm9yIHJlcXVlc3RpbmcgYW4gYWNjZXNzIHRva2VuLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1ldGhvZAogICAgICogQHBhcmFtICBhcnJheSAkcGFyYW1zCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBY2Nlc3NUb2tlbk9wdGlvbnMoJG1ldGhvZCwgYXJyYXkgJHBhcmFtcyk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/OptionProvider/PostAuthOptionProvider.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxPcHRpb25Qcm92aWRlcjsKCnVzZSBMZWFndWVcT0F1dGgyXENsaWVudFxQcm92aWRlclxBYnN0cmFjdFByb3ZpZGVyOwp1c2UgTGVhZ3VlXE9BdXRoMlxDbGllbnRcVG9vbFxRdWVyeUJ1aWxkZXJUcmFpdDsKCi8qKgogKiBQcm92aWRlIG9wdGlvbnMgZm9yIGFjY2VzcyB0b2tlbgogKi8KY2xhc3MgUG9zdEF1dGhPcHRpb25Qcm92aWRlciBpbXBsZW1lbnRzIE9wdGlvblByb3ZpZGVySW50ZXJmYWNlCnsKICAgIHVzZSBRdWVyeUJ1aWxkZXJUcmFpdDsKCiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBY2Nlc3NUb2tlbk9wdGlvbnMoJG1ldGhvZCwgYXJyYXkgJHBhcmFtcykKICAgIHsKICAgICAgICAkb3B0aW9ucyA9IFsnaGVhZGVycycgPT4gWydjb250ZW50LXR5cGUnID0+ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXV07CgogICAgICAgIGlmICgkbWV0aG9kID09PSBBYnN0cmFjdFByb3ZpZGVyOjpNRVRIT0RfUE9TVCkgewogICAgICAgICAgICAkb3B0aW9uc1snYm9keSddID0gJHRoaXMtPmdldEFjY2Vzc1Rva2VuQm9keSgkcGFyYW1zKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkb3B0aW9uczsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHJlcXVlc3QgYm9keSBmb3IgcmVxdWVzdGluZyBhbiBhY2Nlc3MgdG9rZW4uCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAkcGFyYW1zCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0QWNjZXNzVG9rZW5Cb2R5KGFycmF5ICRwYXJhbXMpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5idWlsZFF1ZXJ5U3RyaW5nKCRwYXJhbXMpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Provider/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Provider/AbstractProvider.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxQcm92aWRlcjsKCnVzZSBHdXp6bGVIdHRwXENsaWVudCBhcyBIdHRwQ2xpZW50Owp1c2UgR3V6emxlSHR0cFxDbGllbnRJbnRlcmZhY2UgYXMgSHR0cENsaWVudEludGVyZmFjZTsKdXNlIEd1enpsZUh0dHBcRXhjZXB0aW9uXEJhZFJlc3BvbnNlRXhjZXB0aW9uOwp1c2UgR3V6emxlSHR0cFxFeGNlcHRpb25cR3V6emxlRXhjZXB0aW9uOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgTGVhZ3VlXE9BdXRoMlxDbGllbnRcR3JhbnRcQWJzdHJhY3RHcmFudDsKdXNlIExlYWd1ZVxPQXV0aDJcQ2xpZW50XEdyYW50XEdyYW50RmFjdG9yeTsKdXNlIExlYWd1ZVxPQXV0aDJcQ2xpZW50XE9wdGlvblByb3ZpZGVyXE9wdGlvblByb3ZpZGVySW50ZXJmYWNlOwp1c2UgTGVhZ3VlXE9BdXRoMlxDbGllbnRcT3B0aW9uUHJvdmlkZXJcUG9zdEF1dGhPcHRpb25Qcm92aWRlcjsKdXNlIExlYWd1ZVxPQXV0aDJcQ2xpZW50XFByb3ZpZGVyXEV4Y2VwdGlvblxJZGVudGl0eVByb3ZpZGVyRXhjZXB0aW9uOwp1c2UgTGVhZ3VlXE9BdXRoMlxDbGllbnRcVG9rZW5cQWNjZXNzVG9rZW47CnVzZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb2tlblxBY2Nlc3NUb2tlbkludGVyZmFjZTsKdXNlIExlYWd1ZVxPQXV0aDJcQ2xpZW50XFRvb2xcQXJyYXlBY2Nlc3NvclRyYWl0Owp1c2UgTGVhZ3VlXE9BdXRoMlxDbGllbnRcVG9vbFxHdWFyZGVkUHJvcGVydHlUcmFpdDsKdXNlIExlYWd1ZVxPQXV0aDJcQ2xpZW50XFRvb2xcUXVlcnlCdWlsZGVyVHJhaXQ7CnVzZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb29sXFJlcXVlc3RGYWN0b3J5Owp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZTsKdXNlIFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbjsKCi8qKgogKiBSZXByZXNlbnRzIGEgc2VydmljZSBwcm92aWRlciAoYXV0aG9yaXphdGlvbiBzZXJ2ZXIpLgogKgogKiBAbGluayBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NzQ5I3NlY3Rpb24tMS4xIFJvbGVzIChSRkMgNjc0OSwgwqcxLjEpCiAqLwphYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFByb3ZpZGVyCnsKICAgIHVzZSBBcnJheUFjY2Vzc29yVHJhaXQ7CiAgICB1c2UgR3VhcmRlZFByb3BlcnR5VHJhaXQ7CiAgICB1c2UgUXVlcnlCdWlsZGVyVHJhaXQ7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsIEtleSB1c2VkIGluIGEgdG9rZW4gcmVzcG9uc2UgdG8gaWRlbnRpZnkgdGhlIHJlc291cmNlIG93bmVyLgogICAgICovCiAgICBjb25zdCBBQ0NFU1NfVE9LRU5fUkVTT1VSQ0VfT1dORVJfSUQgPSBudWxsOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcgSFRUUCBtZXRob2QgdXNlZCB0byBmZXRjaCBhY2Nlc3MgdG9rZW5zLgogICAgICovCiAgICBjb25zdCBNRVRIT0RfR0VUID0gJ0dFVCc7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZyBIVFRQIG1ldGhvZCB1c2VkIHRvIGZldGNoIGFjY2VzcyB0b2tlbnMuCiAgICAgKi8KICAgIGNvbnN0IE1FVEhPRF9QT1NUID0gJ1BPU1QnOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcgUEtDRSBtZXRob2QgdXNlZCB0byBmZXRjaCBhdXRob3JpemF0aW9uIHRva2VuLgogICAgICogVGhlIFBLQ0UgY29kZSBjaGFsbGVuZ2Ugd2lsbCBiZSBoYXNoZWQgd2l0aCBzaGEyNTYgKHJlY29tbWVuZGVkKS4KICAgICAqLwogICAgY29uc3QgUEtDRV9NRVRIT0RfUzI1NiA9ICdTMjU2JzsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nIFBLQ0UgbWV0aG9kIHVzZWQgdG8gZmV0Y2ggYXV0aG9yaXphdGlvbiB0b2tlbi4KICAgICAqIFRoZSBQS0NFIGNvZGUgY2hhbGxlbmdlIHdpbGwgYmUgc2VudCBhcyBwbGFpbiB0ZXh0LCB0aGlzIGlzIE5PVCByZWNvbW1lbmRlZC4KICAgICAqIE9ubHkgdXNlIGBwbGFpbmAgaWYgbm8gb3RoZXIgb3B0aW9uIGlzIHBvc3NpYmxlLgogICAgICovCiAgICBjb25zdCBQS0NFX01FVEhPRF9QTEFJTiA9ICdwbGFpbic7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJGNsaWVudElkOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRjbGllbnRTZWNyZXQ7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJHJlZGlyZWN0VXJpOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRzdGF0ZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJvdGVjdGVkICRwa2NlQ29kZSA9IG51bGw7CgogICAgLyoqCiAgICAgKiBAdmFyIEdyYW50RmFjdG9yeQogICAgICovCiAgICBwcm90ZWN0ZWQgJGdyYW50RmFjdG9yeTsKCiAgICAvKioKICAgICAqIEB2YXIgUmVxdWVzdEZhY3RvcnkKICAgICAqLwogICAgcHJvdGVjdGVkICRyZXF1ZXN0RmFjdG9yeTsKCiAgICAvKioKICAgICAqIEB2YXIgSHR0cENsaWVudEludGVyZmFjZQogICAgICovCiAgICBwcm90ZWN0ZWQgJGh0dHBDbGllbnQ7CgogICAgLyoqCiAgICAgKiBAdmFyIE9wdGlvblByb3ZpZGVySW50ZXJmYWNlCiAgICAgKi8KICAgIHByb3RlY3RlZCAkb3B0aW9uUHJvdmlkZXI7CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIGFuIE9BdXRoIDIuMCBzZXJ2aWNlIHByb3ZpZGVyLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBBbiBhcnJheSBvZiBvcHRpb25zIHRvIHNldCBvbiB0aGlzIHByb3ZpZGVyLgogICAgICogICAgIE9wdGlvbnMgaW5jbHVkZSBgY2xpZW50SWRgLCBgY2xpZW50U2VjcmV0YCwgYHJlZGlyZWN0VXJpYCwgYW5kIGBzdGF0ZWAuCiAgICAgKiAgICAgSW5kaXZpZHVhbCBwcm92aWRlcnMgbWF5IGludHJvZHVjZSBtb3JlIG9wdGlvbnMsIGFzIG5lZWRlZC4KICAgICAqIEBwYXJhbSBhcnJheSAkY29sbGFib3JhdG9ycyBBbiBhcnJheSBvZiBjb2xsYWJvcmF0b3JzIHRoYXQgbWF5IGJlIHVzZWQgdG8KICAgICAqICAgICBvdmVycmlkZSB0aGlzIHByb3ZpZGVyJ3MgZGVmYXVsdCBiZWhhdmlvci4gQ29sbGFib3JhdG9ycyBpbmNsdWRlCiAgICAgKiAgICAgYGdyYW50RmFjdG9yeWAsIGByZXF1ZXN0RmFjdG9yeWAsIGFuZCBgaHR0cENsaWVudGAuCiAgICAgKiAgICAgSW5kaXZpZHVhbCBwcm92aWRlcnMgbWF5IGludHJvZHVjZSBtb3JlIGNvbGxhYm9yYXRvcnMsIGFzIG5lZWRlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRvcHRpb25zID0gW10sIGFycmF5ICRjb2xsYWJvcmF0b3JzID0gW10pCiAgICB7CiAgICAgICAgLy8gV2UnbGwgbGV0IHRoZSBHdWFyZGVkUHJvcGVydHlUcmFpdCBoYW5kbGUgbWFzcyBhc3NpZ25tZW50IG9mIGluY29taW5nCiAgICAgICAgLy8gb3B0aW9ucywgc2tpcHBpbmcgYW55IGJsYWNrbGlzdGVkIHByb3BlcnRpZXMgZGVmaW5lZCBpbiB0aGUgcHJvdmlkZXIKICAgICAgICAkdGhpcy0+ZmlsbFByb3BlcnRpZXMoJG9wdGlvbnMpOwoKICAgICAgICBpZiAoZW1wdHkoJGNvbGxhYm9yYXRvcnNbJ2dyYW50RmFjdG9yeSddKSkgewogICAgICAgICAgICAkY29sbGFib3JhdG9yc1snZ3JhbnRGYWN0b3J5J10gPSBuZXcgR3JhbnRGYWN0b3J5KCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5zZXRHcmFudEZhY3RvcnkoJGNvbGxhYm9yYXRvcnNbJ2dyYW50RmFjdG9yeSddKTsKCiAgICAgICAgaWYgKGVtcHR5KCRjb2xsYWJvcmF0b3JzWydyZXF1ZXN0RmFjdG9yeSddKSkgewogICAgICAgICAgICAkY29sbGFib3JhdG9yc1sncmVxdWVzdEZhY3RvcnknXSA9IG5ldyBSZXF1ZXN0RmFjdG9yeSgpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+c2V0UmVxdWVzdEZhY3RvcnkoJGNvbGxhYm9yYXRvcnNbJ3JlcXVlc3RGYWN0b3J5J10pOwoKICAgICAgICBpZiAoZW1wdHkoJGNvbGxhYm9yYXRvcnNbJ2h0dHBDbGllbnQnXSkpIHsKICAgICAgICAgICAgJGNsaWVudF9vcHRpb25zID0gJHRoaXMtPmdldEFsbG93ZWRDbGllbnRPcHRpb25zKCRvcHRpb25zKTsKCiAgICAgICAgICAgICRjb2xsYWJvcmF0b3JzWydodHRwQ2xpZW50J10gPSBuZXcgSHR0cENsaWVudCgKICAgICAgICAgICAgICAgIGFycmF5X2ludGVyc2VjdF9rZXkoJG9wdGlvbnMsIGFycmF5X2ZsaXAoJGNsaWVudF9vcHRpb25zKSkKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPnNldEh0dHBDbGllbnQoJGNvbGxhYm9yYXRvcnNbJ2h0dHBDbGllbnQnXSk7CgogICAgICAgIGlmIChlbXB0eSgkY29sbGFib3JhdG9yc1snb3B0aW9uUHJvdmlkZXInXSkpIHsKICAgICAgICAgICAgJGNvbGxhYm9yYXRvcnNbJ29wdGlvblByb3ZpZGVyJ10gPSBuZXcgUG9zdEF1dGhPcHRpb25Qcm92aWRlcigpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+c2V0T3B0aW9uUHJvdmlkZXIoJGNvbGxhYm9yYXRvcnNbJ29wdGlvblByb3ZpZGVyJ10pOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBvcHRpb25zIHRoYXQgY2FuIGJlIHBhc3NlZCB0byB0aGUgSHR0cENsaWVudAogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBBbiBhcnJheSBvZiBvcHRpb25zIHRvIHNldCBvbiB0aGlzIHByb3ZpZGVyLgogICAgICogICAgIE9wdGlvbnMgaW5jbHVkZSBgY2xpZW50SWRgLCBgY2xpZW50U2VjcmV0YCwgYHJlZGlyZWN0VXJpYCwgYW5kIGBzdGF0ZWAuCiAgICAgKiAgICAgSW5kaXZpZHVhbCBwcm92aWRlcnMgbWF5IGludHJvZHVjZSBtb3JlIG9wdGlvbnMsIGFzIG5lZWRlZC4KICAgICAqIEByZXR1cm4gYXJyYXkgVGhlIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgSHR0cENsaWVudCBjb25zdHJ1Y3RvcgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0QWxsb3dlZENsaWVudE9wdGlvbnMoYXJyYXkgJG9wdGlvbnMpCiAgICB7CiAgICAgICAgJGNsaWVudF9vcHRpb25zID0gWyd0aW1lb3V0JywgJ3Byb3h5J107CgogICAgICAgIC8vIE9ubHkgYWxsb3cgdHVybmluZyBvZmYgc3NsIHZlcmlmaWNhdGlvbiBpZiBpdCdzIGZvciBhIHByb3h5CiAgICAgICAgaWYgKCFlbXB0eSgkb3B0aW9uc1sncHJveHknXSkpIHsKICAgICAgICAgICAgJGNsaWVudF9vcHRpb25zW10gPSAndmVyaWZ5JzsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkY2xpZW50X29wdGlvbnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBncmFudCBmYWN0b3J5IGluc3RhbmNlLgogICAgICoKICAgICAqIEBwYXJhbSAgR3JhbnRGYWN0b3J5ICRmYWN0b3J5CiAgICAgKiBAcmV0dXJuIHNlbGYKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEdyYW50RmFjdG9yeShHcmFudEZhY3RvcnkgJGZhY3RvcnkpCiAgICB7CiAgICAgICAgJHRoaXMtPmdyYW50RmFjdG9yeSA9ICRmYWN0b3J5OwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGdyYW50IGZhY3RvcnkgaW5zdGFuY2UuCiAgICAgKgogICAgICogQHJldHVybiBHcmFudEZhY3RvcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEdyYW50RmFjdG9yeSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5ncmFudEZhY3Rvcnk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSByZXF1ZXN0IGZhY3RvcnkgaW5zdGFuY2UuCiAgICAgKgogICAgICogQHBhcmFtICBSZXF1ZXN0RmFjdG9yeSAkZmFjdG9yeQogICAgICogQHJldHVybiBzZWxmCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRSZXF1ZXN0RmFjdG9yeShSZXF1ZXN0RmFjdG9yeSAkZmFjdG9yeSkKICAgIHsKICAgICAgICAkdGhpcy0+cmVxdWVzdEZhY3RvcnkgPSAkZmFjdG9yeTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmVxdWVzdCBmYWN0b3J5IGluc3RhbmNlLgogICAgICoKICAgICAqIEByZXR1cm4gUmVxdWVzdEZhY3RvcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlcXVlc3RGYWN0b3J5KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlcXVlc3RGYWN0b3J5OwogICAgfQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgSFRUUCBjbGllbnQgaW5zdGFuY2UuCiAgICAgKgogICAgICogQHBhcmFtICBIdHRwQ2xpZW50SW50ZXJmYWNlICRjbGllbnQKICAgICAqIEByZXR1cm4gc2VsZgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SHR0cENsaWVudChIdHRwQ2xpZW50SW50ZXJmYWNlICRjbGllbnQpCiAgICB7CiAgICAgICAgJHRoaXMtPmh0dHBDbGllbnQgPSAkY2xpZW50OwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBIVFRQIGNsaWVudCBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIEh0dHBDbGllbnRJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEh0dHBDbGllbnQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aHR0cENsaWVudDsKICAgIH0KCiAgICAvKioKICAgICAqIFNldHMgdGhlIG9wdGlvbiBwcm92aWRlciBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIE9wdGlvblByb3ZpZGVySW50ZXJmYWNlICRwcm92aWRlcgogICAgICogQHJldHVybiBzZWxmCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRPcHRpb25Qcm92aWRlcihPcHRpb25Qcm92aWRlckludGVyZmFjZSAkcHJvdmlkZXIpCiAgICB7CiAgICAgICAgJHRoaXMtPm9wdGlvblByb3ZpZGVyID0gJHByb3ZpZGVyOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBvcHRpb24gcHJvdmlkZXIgaW5zdGFuY2UuCiAgICAgKgogICAgICogQHJldHVybiBPcHRpb25Qcm92aWRlckludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0T3B0aW9uUHJvdmlkZXIoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+b3B0aW9uUHJvdmlkZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBzdGF0ZSBwYXJhbWV0ZXIuCiAgICAgKgogICAgICogVGhpcyBjYW4gYmUgYWNjZXNzZWQgYnkgdGhlIHJlZGlyZWN0IGhhbmRsZXIgZHVyaW5nIGF1dGhvcml6YXRpb24uCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0YXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0YXRlOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSB2YWx1ZSBvZiB0aGUgcGtjZUNvZGUgcGFyYW1ldGVyLgogICAgICoKICAgICAqIFdoZW4gdXNpbmcgUEtDRSB0aGlzIHNob3VsZCBiZSBzZXQgYmVmb3JlIHJlcXVlc3RpbmcgYW4gYWNjZXNzIHRva2VuLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBrY2VDb2RlCiAgICAgKiBAcmV0dXJuIHNlbGYKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFBrY2VDb2RlKCRwa2NlQ29kZSkKICAgIHsKICAgICAgICAkdGhpcy0+cGtjZUNvZGUgPSAkcGtjZUNvZGU7CiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcGtjZUNvZGUgcGFyYW1ldGVyLgogICAgICoKICAgICAqIFRoaXMgY2FuIGJlIGFjY2Vzc2VkIGJ5IHRoZSByZWRpcmVjdCBoYW5kbGVyIGR1cmluZyBhdXRob3JpemF0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBrY2VDb2RlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnBrY2VDb2RlOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgYmFzZSBVUkwgZm9yIGF1dGhvcml6aW5nIGEgY2xpZW50LgogICAgICoKICAgICAqIEVnLiBodHRwczovL29hdXRoLnNlcnZpY2UuY29tL2F1dGhvcml6ZQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBnZXRCYXNlQXV0aG9yaXphdGlvblVybCgpOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgYmFzZSBVUkwgZm9yIHJlcXVlc3RpbmcgYW4gYWNjZXNzIHRva2VuLgogICAgICoKICAgICAqIEVnLiBodHRwczovL29hdXRoLnNlcnZpY2UuY29tL3Rva2VuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRwYXJhbXMKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBnZXRCYXNlQWNjZXNzVG9rZW5VcmwoYXJyYXkgJHBhcmFtcyk7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBVUkwgZm9yIHJlcXVlc3RpbmcgdGhlIHJlc291cmNlIG93bmVyJ3MgZGV0YWlscy4KICAgICAqCiAgICAgKiBAcGFyYW0gQWNjZXNzVG9rZW4gJHRva2VuCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzb3VyY2VPd25lckRldGFpbHNVcmwoQWNjZXNzVG9rZW4gJHRva2VuKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgYSBuZXcgcmFuZG9tIHN0cmluZyB0byB1c2UgYXMgdGhlIHN0YXRlIHBhcmFtZXRlciBpbiBhbgogICAgICogYXV0aG9yaXphdGlvbiBmbG93LgogICAgICoKICAgICAqIEBwYXJhbSAgaW50ICRsZW5ndGggTGVuZ3RoIG9mIHRoZSByYW5kb20gc3RyaW5nIHRvIGJlIGdlbmVyYXRlZC4KICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRSYW5kb21TdGF0ZSgkbGVuZ3RoID0gMzIpCiAgICB7CiAgICAgICAgLy8gQ29udmVydGluZyBieXRlcyB0byBoZXggd2lsbCBhbHdheXMgZG91YmxlIGxlbmd0aC4gSGVuY2UsIHdlIGNhbiByZWR1Y2UKICAgICAgICAvLyB0aGUgYW1vdW50IG9mIGJ5dGVzIGJ5IGhhbGYgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBsZW5ndGguCiAgICAgICAgcmV0dXJuIGJpbjJoZXgocmFuZG9tX2J5dGVzKCRsZW5ndGggLyAyKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgbmV3IHJhbmRvbSBzdHJpbmcgdG8gdXNlIGFzIFBLQ0UgY29kZV92ZXJpZmllciBhbmQKICAgICAqIGhhc2hlZCBhcyBjb2RlX2NoYWxsZW5nZSBwYXJhbWV0ZXJzIGluIGFuIGF1dGhvcml6YXRpb24gZmxvdy4KICAgICAqIE11c3QgYmUgYmV0d2VlbiA0MyBhbmQgMTI4IGNoYXJhY3RlcnMgbG9uZy4KICAgICAqCiAgICAgKiBAcGFyYW0gIGludCAkbGVuZ3RoIExlbmd0aCBvZiB0aGUgcmFuZG9tIHN0cmluZyB0byBiZSBnZW5lcmF0ZWQuCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0UmFuZG9tUGtjZUNvZGUoJGxlbmd0aCA9IDY0KQogICAgewogICAgICAgIHJldHVybiBzdWJzdHIoCiAgICAgICAgICAgIHN0cnRyKAogICAgICAgICAgICAgICAgYmFzZTY0X2VuY29kZShyYW5kb21fYnl0ZXMoJGxlbmd0aCkpLAogICAgICAgICAgICAgICAgJysvJywKICAgICAgICAgICAgICAgICctXycKICAgICAgICAgICAgKSwKICAgICAgICAgICAgMCwKICAgICAgICAgICAgJGxlbmd0aAogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBkZWZhdWx0IHNjb3BlcyB1c2VkIGJ5IHRoaXMgcHJvdmlkZXIuCiAgICAgKgogICAgICogVGhpcyBzaG91bGQgb25seSBiZSB0aGUgc2NvcGVzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIHJlcXVlc3QgdGhlIGRldGFpbHMKICAgICAqIG9mIHRoZSByZXNvdXJjZSBvd25lciwgcmF0aGVyIHRoYW4gYWxsIHRoZSBhdmFpbGFibGUgc2NvcGVzLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldERlZmF1bHRTY29wZXMoKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHN0cmluZyB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIHNlcGFyYXRlIHNjb3BlcyB3aGVuIGJ1aWxkaW5nCiAgICAgKiB0aGUgVVJMIGZvciByZXF1ZXN0aW5nIGFuIGFjY2VzcyB0b2tlbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBTY29wZSBzZXBhcmF0b3IsIGRlZmF1bHRzIHRvICcsJwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0U2NvcGVTZXBhcmF0b3IoKQogICAgewogICAgICAgIHJldHVybiAnLCc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRQa2NlTWV0aG9kKCkKICAgIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYXV0aG9yaXphdGlvbiBwYXJhbWV0ZXJzIGJhc2VkIG9uIHByb3ZpZGVkIG9wdGlvbnMuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAkb3B0aW9ucwogICAgICogQHJldHVybiBhcnJheSBBdXRob3JpemF0aW9uIHBhcmFtZXRlcnMKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRBdXRob3JpemF0aW9uUGFyYW1ldGVycyhhcnJheSAkb3B0aW9ucykKICAgIHsKICAgICAgICBpZiAoZW1wdHkoJG9wdGlvbnNbJ3N0YXRlJ10pKSB7CiAgICAgICAgICAgICRvcHRpb25zWydzdGF0ZSddID0gJHRoaXMtPmdldFJhbmRvbVN0YXRlKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW1wdHkoJG9wdGlvbnNbJ3Njb3BlJ10pKSB7CiAgICAgICAgICAgICRvcHRpb25zWydzY29wZSddID0gJHRoaXMtPmdldERlZmF1bHRTY29wZXMoKTsKICAgICAgICB9CgogICAgICAgICRvcHRpb25zICs9IFsKICAgICAgICAgICAgJ3Jlc3BvbnNlX3R5cGUnICAgPT4gJ2NvZGUnLAogICAgICAgICAgICAnYXBwcm92YWxfcHJvbXB0JyA9PiAnYXV0bycKICAgICAgICBdOwoKICAgICAgICBpZiAoaXNfYXJyYXkoJG9wdGlvbnNbJ3Njb3BlJ10pKSB7CiAgICAgICAgICAgICRzZXBhcmF0b3IgPSAkdGhpcy0+Z2V0U2NvcGVTZXBhcmF0b3IoKTsKICAgICAgICAgICAgJG9wdGlvbnNbJ3Njb3BlJ10gPSBpbXBsb2RlKCRzZXBhcmF0b3IsICRvcHRpb25zWydzY29wZSddKTsKICAgICAgICB9CgogICAgICAgIC8vIFN0b3JlIHRoZSBzdGF0ZSBhcyBpdCBtYXkgbmVlZCB0byBiZSBhY2Nlc3NlZCBsYXRlciBvbi4KICAgICAgICAkdGhpcy0+c3RhdGUgPSAkb3B0aW9uc1snc3RhdGUnXTsKCiAgICAgICAgJHBrY2VNZXRob2QgPSAkdGhpcy0+Z2V0UGtjZU1ldGhvZCgpOwogICAgICAgIGlmICghZW1wdHkoJHBrY2VNZXRob2QpKSB7CiAgICAgICAgICAgICR0aGlzLT5wa2NlQ29kZSA9ICR0aGlzLT5nZXRSYW5kb21Qa2NlQ29kZSgpOwogICAgICAgICAgICBpZiAoJHBrY2VNZXRob2QgPT09IHN0YXRpYzo6UEtDRV9NRVRIT0RfUzI1NikgewogICAgICAgICAgICAgICAgJG9wdGlvbnNbJ2NvZGVfY2hhbGxlbmdlJ10gPSB0cmltKAogICAgICAgICAgICAgICAgICAgIHN0cnRyKAogICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjRfZW5jb2RlKGhhc2goJ3NoYTI1NicsICR0aGlzLT5wa2NlQ29kZSwgdHJ1ZSkpLAogICAgICAgICAgICAgICAgICAgICAgICAnKy8nLAogICAgICAgICAgICAgICAgICAgICAgICAnLV8nCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAnPScKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0gZWxzZWlmICgkcGtjZU1ldGhvZCA9PT0gc3RhdGljOjpQS0NFX01FVEhPRF9QTEFJTikgewogICAgICAgICAgICAgICAgJG9wdGlvbnNbJ2NvZGVfY2hhbGxlbmdlJ10gPSAkdGhpcy0+cGtjZUNvZGU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdVbmtub3duIFBLQ0UgbWV0aG9kICInIC4gJHBrY2VNZXRob2QgLiAnIi4nKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkb3B0aW9uc1snY29kZV9jaGFsbGVuZ2VfbWV0aG9kJ10gPSAkcGtjZU1ldGhvZDsKICAgICAgICB9CgogICAgICAgIC8vIEJ1c2luZXNzIGNvZGUgbGF5ZXIgbWlnaHQgc2V0IGEgZGlmZmVyZW50IHJlZGlyZWN0X3VyaSBwYXJhbWV0ZXIKICAgICAgICAvLyBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIGxlYXZlIGl0IGFzLWlzCiAgICAgICAgaWYgKCFpc3NldCgkb3B0aW9uc1sncmVkaXJlY3RfdXJpJ10pKSB7CiAgICAgICAgICAgICRvcHRpb25zWydyZWRpcmVjdF91cmknXSA9ICR0aGlzLT5yZWRpcmVjdFVyaTsKICAgICAgICB9CgogICAgICAgICRvcHRpb25zWydjbGllbnRfaWQnXSA9ICR0aGlzLT5jbGllbnRJZDsKCiAgICAgICAgcmV0dXJuICRvcHRpb25zOwogICAgfQoKICAgIC8qKgogICAgICogQnVpbGRzIHRoZSBhdXRob3JpemF0aW9uIFVSTCdzIHF1ZXJ5IHN0cmluZy4KICAgICAqCiAgICAgKiBAcGFyYW0gIGFycmF5ICRwYXJhbXMgUXVlcnkgcGFyYW1ldGVycwogICAgICogQHJldHVybiBzdHJpbmcgUXVlcnkgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRBdXRob3JpemF0aW9uUXVlcnkoYXJyYXkgJHBhcmFtcykKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmJ1aWxkUXVlcnlTdHJpbmcoJHBhcmFtcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBCdWlsZHMgdGhlIGF1dGhvcml6YXRpb24gVVJMLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gc3RyaW5nIEF1dGhvcml6YXRpb24gVVJMCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXV0aG9yaXphdGlvblVybChhcnJheSAkb3B0aW9ucyA9IFtdKQogICAgewogICAgICAgICRiYXNlICAgPSAkdGhpcy0+Z2V0QmFzZUF1dGhvcml6YXRpb25VcmwoKTsKICAgICAgICAkcGFyYW1zID0gJHRoaXMtPmdldEF1dGhvcml6YXRpb25QYXJhbWV0ZXJzKCRvcHRpb25zKTsKICAgICAgICAkcXVlcnkgID0gJHRoaXMtPmdldEF1dGhvcml6YXRpb25RdWVyeSgkcGFyYW1zKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5hcHBlbmRRdWVyeSgkYmFzZSwgJHF1ZXJ5KTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlZGlyZWN0cyB0aGUgY2xpZW50IGZvciBhdXRob3JpemF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgJG9wdGlvbnMKICAgICAqIEBwYXJhbSAgY2FsbGFibGV8bnVsbCAkcmVkaXJlY3RIYW5kbGVyCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXV0aG9yaXplKAogICAgICAgIGFycmF5ICRvcHRpb25zID0gW10sCiAgICAgICAgP2NhbGxhYmxlICRyZWRpcmVjdEhhbmRsZXIgPSBudWxsCiAgICApIHsKICAgICAgICAkdXJsID0gJHRoaXMtPmdldEF1dGhvcml6YXRpb25VcmwoJG9wdGlvbnMpOwogICAgICAgIGlmICgkcmVkaXJlY3RIYW5kbGVyKSB7CiAgICAgICAgICAgIHJldHVybiAkcmVkaXJlY3RIYW5kbGVyKCR1cmwsICR0aGlzKTsKICAgICAgICB9CgogICAgICAgIC8vIEBjb2RlQ292ZXJhZ2VJZ25vcmVTdGFydAogICAgICAgIGhlYWRlcignTG9jYXRpb246ICcgLiAkdXJsKTsKICAgICAgICBleGl0OwogICAgICAgIC8vIEBjb2RlQ292ZXJhZ2VJZ25vcmVFbmQKICAgIH0KCiAgICAvKioKICAgICAqIEFwcGVuZHMgYSBxdWVyeSBzdHJpbmcgdG8gYSBVUkwuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgJHVybCBUaGUgVVJMIHRvIGFwcGVuZCB0aGUgcXVlcnkgdG8KICAgICAqIEBwYXJhbSAgc3RyaW5nICRxdWVyeSBUaGUgSFRUUCBxdWVyeSBzdHJpbmcKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSByZXN1bHRpbmcgVVJMCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBhcHBlbmRRdWVyeSgkdXJsLCAkcXVlcnkpCiAgICB7CiAgICAgICAgJHF1ZXJ5ID0gdHJpbSgkcXVlcnksICc/JicpOwoKICAgICAgICBpZiAoJHF1ZXJ5KSB7CiAgICAgICAgICAgICRnbHVlID0gc3Ryc3RyKCR1cmwsICc/JykgPT09IGZhbHNlID8gJz8nIDogJyYnOwogICAgICAgICAgICByZXR1cm4gJHVybCAuICRnbHVlIC4gJHF1ZXJ5OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR1cmw7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBtZXRob2QgdG8gdXNlIHdoZW4gcmVxdWVzdGluZyBhbiBhY2Nlc3MgdG9rZW4uCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgSFRUUCBtZXRob2QKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEFjY2Vzc1Rva2VuTWV0aG9kKCkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6TUVUSE9EX1BPU1Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBrZXkgdXNlZCBpbiB0aGUgYWNjZXNzIHRva2VuIHJlc3BvbnNlIHRvIGlkZW50aWZ5IHRoZSByZXNvdXJjZSBvd25lci4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIFJlc291cmNlIG93bmVyIGlkZW50aWZpZXIga2V5CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRBY2Nlc3NUb2tlblJlc291cmNlT3duZXJJZCgpCiAgICB7CiAgICAgICAgcmV0dXJuIHN0YXRpYzo6QUNDRVNTX1RPS0VOX1JFU09VUkNFX09XTkVSX0lEOwogICAgfQoKICAgIC8qKgogICAgICogQnVpbGRzIHRoZSBhY2Nlc3MgdG9rZW4gVVJMJ3MgcXVlcnkgc3RyaW5nLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgJHBhcmFtcyBRdWVyeSBwYXJhbWV0ZXJzCiAgICAgKiBAcmV0dXJuIHN0cmluZyBRdWVyeSBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEFjY2Vzc1Rva2VuUXVlcnkoYXJyYXkgJHBhcmFtcykKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmJ1aWxkUXVlcnlTdHJpbmcoJHBhcmFtcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3MgdGhhdCBhIHByb3ZpZGVkIGdyYW50IGlzIHZhbGlkLCBvciBhdHRlbXB0cyB0byBwcm9kdWNlIG9uZSBpZiB0aGUKICAgICAqIHByb3ZpZGVkIGdyYW50IGlzIGEgc3RyaW5nLgogICAgICoKICAgICAqIEBwYXJhbSAgQWJzdHJhY3RHcmFudHxzdHJpbmcgJGdyYW50CiAgICAgKiBAcmV0dXJuIEFic3RyYWN0R3JhbnQKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHZlcmlmeUdyYW50KCRncmFudCkKICAgIHsKICAgICAgICBpZiAoaXNfc3RyaW5nKCRncmFudCkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5ncmFudEZhY3RvcnktPmdldEdyYW50KCRncmFudCk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+Z3JhbnRGYWN0b3J5LT5jaGVja0dyYW50KCRncmFudCk7CiAgICAgICAgcmV0dXJuICRncmFudDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGZ1bGwgVVJMIHRvIHVzZSB3aGVuIHJlcXVlc3RpbmcgYW4gYWNjZXNzIHRva2VuLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkcGFyYW1zIFF1ZXJ5IHBhcmFtZXRlcnMKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRBY2Nlc3NUb2tlblVybChhcnJheSAkcGFyYW1zKQogICAgewogICAgICAgICR1cmwgPSAkdGhpcy0+Z2V0QmFzZUFjY2Vzc1Rva2VuVXJsKCRwYXJhbXMpOwoKICAgICAgICBpZiAoJHRoaXMtPmdldEFjY2Vzc1Rva2VuTWV0aG9kKCkgPT09IHNlbGY6Ok1FVEhPRF9HRVQpIHsKICAgICAgICAgICAgJHF1ZXJ5ID0gJHRoaXMtPmdldEFjY2Vzc1Rva2VuUXVlcnkoJHBhcmFtcyk7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+YXBwZW5kUXVlcnkoJHVybCwgJHF1ZXJ5KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdXJsOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHByZXBhcmVkIHJlcXVlc3QgZm9yIHJlcXVlc3RpbmcgYW4gYWNjZXNzIHRva2VuLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkcGFyYW1zIFF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzCiAgICAgKiBAcmV0dXJuIFJlcXVlc3RJbnRlcmZhY2UKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEFjY2Vzc1Rva2VuUmVxdWVzdChhcnJheSAkcGFyYW1zKQogICAgewogICAgICAgICRtZXRob2QgID0gJHRoaXMtPmdldEFjY2Vzc1Rva2VuTWV0aG9kKCk7CiAgICAgICAgJHVybCAgICAgPSAkdGhpcy0+Z2V0QWNjZXNzVG9rZW5VcmwoJHBhcmFtcyk7CiAgICAgICAgJG9wdGlvbnMgPSAkdGhpcy0+b3B0aW9uUHJvdmlkZXItPmdldEFjY2Vzc1Rva2VuT3B0aW9ucygkdGhpcy0+Z2V0QWNjZXNzVG9rZW5NZXRob2QoKSwgJHBhcmFtcyk7CgogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0UmVxdWVzdCgkbWV0aG9kLCAkdXJsLCAkb3B0aW9ucyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXF1ZXN0cyBhbiBhY2Nlc3MgdG9rZW4gdXNpbmcgYSBzcGVjaWZpZWQgZ3JhbnQgYW5kIG9wdGlvbiBzZXQuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgICAgICAgICAgICAgICAkZ3JhbnQKICAgICAqIEBwYXJhbSAgYXJyYXk8c3RyaW5nLCBtaXhlZD4gJG9wdGlvbnMKICAgICAqIEByZXR1cm4gQWNjZXNzVG9rZW5JbnRlcmZhY2UKICAgICAqIEB0aHJvd3MgSWRlbnRpdHlQcm92aWRlckV4Y2VwdGlvbgogICAgICogQHRocm93cyBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgR3V6emxlRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBY2Nlc3NUb2tlbigkZ3JhbnQsIGFycmF5ICRvcHRpb25zID0gW10pCiAgICB7CiAgICAgICAgJGdyYW50ID0gJHRoaXMtPnZlcmlmeUdyYW50KCRncmFudCk7CgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snc2NvcGUnXSkgJiYgaXNfYXJyYXkoJG9wdGlvbnNbJ3Njb3BlJ10pKSB7CiAgICAgICAgICAgICRzZXBhcmF0b3IgPSAkdGhpcy0+Z2V0U2NvcGVTZXBhcmF0b3IoKTsKICAgICAgICAgICAgJG9wdGlvbnNbJ3Njb3BlJ10gPSBpbXBsb2RlKCRzZXBhcmF0b3IsICRvcHRpb25zWydzY29wZSddKTsKICAgICAgICB9CgogICAgICAgICRwYXJhbXMgPSBbCiAgICAgICAgICAgICdjbGllbnRfaWQnICAgICA9PiAkdGhpcy0+Y2xpZW50SWQsCiAgICAgICAgICAgICdjbGllbnRfc2VjcmV0JyA9PiAkdGhpcy0+Y2xpZW50U2VjcmV0LAogICAgICAgICAgICAncmVkaXJlY3RfdXJpJyAgPT4gJHRoaXMtPnJlZGlyZWN0VXJpLAogICAgICAgIF07CgogICAgICAgIGlmICghZW1wdHkoJHRoaXMtPnBrY2VDb2RlKSkgewogICAgICAgICAgICAkcGFyYW1zWydjb2RlX3ZlcmlmaWVyJ10gPSAkdGhpcy0+cGtjZUNvZGU7CiAgICAgICAgfQoKICAgICAgICAkcGFyYW1zICAgPSAkZ3JhbnQtPnByZXBhcmVSZXF1ZXN0UGFyYW1ldGVycygkcGFyYW1zLCAkb3B0aW9ucyk7CiAgICAgICAgJHJlcXVlc3QgID0gJHRoaXMtPmdldEFjY2Vzc1Rva2VuUmVxdWVzdCgkcGFyYW1zKTsKICAgICAgICAkcmVzcG9uc2UgPSAkdGhpcy0+Z2V0UGFyc2VkUmVzcG9uc2UoJHJlcXVlc3QpOwogICAgICAgIGlmIChmYWxzZSA9PT0gaXNfYXJyYXkoJHJlc3BvbnNlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0ludmFsaWQgcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSBBdXRob3JpemF0aW9uIFNlcnZlci4gRXhwZWN0ZWQgSlNPTi4nCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICRwcmVwYXJlZCA9ICR0aGlzLT5wcmVwYXJlQWNjZXNzVG9rZW5SZXNwb25zZSgkcmVzcG9uc2UpOwogICAgICAgICR0b2tlbiAgICA9ICR0aGlzLT5jcmVhdGVBY2Nlc3NUb2tlbigkcHJlcGFyZWQsICRncmFudCk7CgogICAgICAgIHJldHVybiAkdG9rZW47CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgUFNSLTcgcmVxdWVzdCBpbnN0YW5jZSB0aGF0IGlzIG5vdCBhdXRoZW50aWNhdGVkLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICRtZXRob2QKICAgICAqIEBwYXJhbSAgc3RyaW5nICR1cmwKICAgICAqIEBwYXJhbSAgYXJyYXkgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gUmVxdWVzdEludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVxdWVzdCgkbWV0aG9kLCAkdXJsLCBhcnJheSAkb3B0aW9ucyA9IFtdKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y3JlYXRlUmVxdWVzdCgkbWV0aG9kLCAkdXJsLCBudWxsLCAkb3B0aW9ucyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGF1dGhlbnRpY2F0ZWQgUFNSLTcgcmVxdWVzdCBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAkbWV0aG9kCiAgICAgKiBAcGFyYW0gIHN0cmluZyAkdXJsCiAgICAgKiBAcGFyYW0gIEFjY2Vzc1Rva2VuSW50ZXJmYWNlfHN0cmluZ3xudWxsICR0b2tlbgogICAgICogQHBhcmFtICBhcnJheSAkb3B0aW9ucyBBbnkgb2YgImhlYWRlcnMiLCAiYm9keSIsIGFuZCAicHJvdG9jb2xWZXJzaW9uIi4KICAgICAqIEByZXR1cm4gUmVxdWVzdEludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXV0aGVudGljYXRlZFJlcXVlc3QoJG1ldGhvZCwgJHVybCwgJHRva2VuLCBhcnJheSAkb3B0aW9ucyA9IFtdKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y3JlYXRlUmVxdWVzdCgkbWV0aG9kLCAkdXJsLCAkdG9rZW4sICRvcHRpb25zKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBQU1ItNyByZXF1ZXN0IGluc3RhbmNlLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICRtZXRob2QKICAgICAqIEBwYXJhbSAgc3RyaW5nICR1cmwKICAgICAqIEBwYXJhbSAgQWNjZXNzVG9rZW5JbnRlcmZhY2V8c3RyaW5nfG51bGwgJHRva2VuCiAgICAgKiBAcGFyYW0gIGFycmF5ICRvcHRpb25zCiAgICAgKiBAcmV0dXJuIFJlcXVlc3RJbnRlcmZhY2UKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNyZWF0ZVJlcXVlc3QoJG1ldGhvZCwgJHVybCwgJHRva2VuLCBhcnJheSAkb3B0aW9ucykKICAgIHsKICAgICAgICAkZGVmYXVsdHMgPSBbCiAgICAgICAgICAgICdoZWFkZXJzJyA9PiAkdGhpcy0+Z2V0SGVhZGVycygkdG9rZW4pLAogICAgICAgIF07CgogICAgICAgICRvcHRpb25zID0gYXJyYXlfbWVyZ2VfcmVjdXJzaXZlKCRkZWZhdWx0cywgJG9wdGlvbnMpOwogICAgICAgICRmYWN0b3J5ID0gJHRoaXMtPmdldFJlcXVlc3RGYWN0b3J5KCk7CgogICAgICAgIHJldHVybiAkZmFjdG9yeS0+Z2V0UmVxdWVzdFdpdGhPcHRpb25zKCRtZXRob2QsICR1cmwsICRvcHRpb25zKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNlbmRzIGEgcmVxdWVzdCBpbnN0YW5jZSBhbmQgcmV0dXJucyBhIHJlc3BvbnNlIGluc3RhbmNlLgogICAgICoKICAgICAqIFdBUk5JTkc6IFRoaXMgbWV0aG9kIGRvZXMgbm90IGF0dGVtcHQgdG8gY2F0Y2ggZXhjZXB0aW9ucyBjYXVzZWQgYnkgSFRUUAogICAgICogZXJyb3JzISBJdCBpcyByZWNvbW1lbmRlZCB0byB3cmFwIHRoaXMgbWV0aG9kIGluIGEgdHJ5L2NhdGNoIGJsb2NrLgogICAgICoKICAgICAqIEBwYXJhbSAgUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdAogICAgICogQHJldHVybiBSZXNwb25zZUludGVyZmFjZQogICAgICogQHRocm93cyBHdXp6bGVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlc3BvbnNlKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRIdHRwQ2xpZW50KCktPnNlbmQoJHJlcXVlc3QpOwogICAgfQoKICAgIC8qKgogICAgICogU2VuZHMgYSByZXF1ZXN0IGFuZCByZXR1cm5zIHRoZSBwYXJzZWQgcmVzcG9uc2UuCiAgICAgKgogICAgICogQHBhcmFtICBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0CiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKiBAdGhyb3dzIElkZW50aXR5UHJvdmlkZXJFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIEd1enpsZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGFyc2VkUmVzcG9uc2UoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCkKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICAkcmVzcG9uc2UgPSAkdGhpcy0+Z2V0UmVzcG9uc2UoJHJlcXVlc3QpOwogICAgICAgIH0gY2F0Y2ggKEJhZFJlc3BvbnNlRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICRyZXNwb25zZSA9ICRlLT5nZXRSZXNwb25zZSgpOwogICAgICAgIH0KCiAgICAgICAgJHBhcnNlZCA9ICR0aGlzLT5wYXJzZVJlc3BvbnNlKCRyZXNwb25zZSk7CgogICAgICAgICR0aGlzLT5jaGVja1Jlc3BvbnNlKCRyZXNwb25zZSwgJHBhcnNlZCk7CgogICAgICAgIHJldHVybiAkcGFyc2VkOwogICAgfQoKICAgIC8qKgogICAgICogQXR0ZW1wdHMgdG8gcGFyc2UgYSBKU09OIHJlc3BvbnNlLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICRjb250ZW50IEpTT04gY29udGVudCBmcm9tIHJlc3BvbnNlIGJvZHkKICAgICAqIEByZXR1cm4gYXJyYXkgUGFyc2VkIEpTT04gZGF0YQogICAgICogQHRocm93cyBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24gaWYgdGhlIGNvbnRlbnQgY291bGQgbm90IGJlIHBhcnNlZAogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gcGFyc2VKc29uKCRjb250ZW50KQogICAgewogICAgICAgICRjb250ZW50ID0ganNvbl9kZWNvZGUoJGNvbnRlbnQsIHRydWUpOwoKICAgICAgICBpZiAoanNvbl9sYXN0X2Vycm9yKCkgIT09IEpTT05fRVJST1JfTk9ORSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKHNwcmludGYoCiAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIHBhcnNlIEpTT04gcmVzcG9uc2U6ICVzIiwKICAgICAgICAgICAgICAgIGpzb25fbGFzdF9lcnJvcl9tc2coKQogICAgICAgICAgICApKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkY29udGVudDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGNvbnRlbnQgdHlwZSBoZWFkZXIgb2YgYSByZXNwb25zZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIFJlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZQogICAgICogQHJldHVybiBzdHJpbmcgU2VtaS1jb2xvbiBzZXBhcmF0ZWQgam9pbiBvZiBjb250ZW50LXR5cGUgaGVhZGVycy4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldENvbnRlbnRUeXBlKFJlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZSkKICAgIHsKICAgICAgICByZXR1cm4gaW1wbG9kZSgnOycsICRyZXNwb25zZS0+Z2V0SGVhZGVyKCdjb250ZW50LXR5cGUnKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBQYXJzZXMgdGhlIHJlc3BvbnNlIGFjY29yZGluZyB0byBpdHMgY29udGVudC10eXBlIGhlYWRlci4KICAgICAqCiAgICAgKiBAdGhyb3dzIFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbgogICAgICogQHBhcmFtICBSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHBhcnNlUmVzcG9uc2UoUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlKQogICAgewogICAgICAgICRjb250ZW50ID0gKHN0cmluZykgJHJlc3BvbnNlLT5nZXRCb2R5KCk7CiAgICAgICAgJHR5cGUgPSAkdGhpcy0+Z2V0Q29udGVudFR5cGUoJHJlc3BvbnNlKTsKCiAgICAgICAgaWYgKHN0cnBvcygkdHlwZSwgJ3VybGVuY29kZWQnKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgcGFyc2Vfc3RyKCRjb250ZW50LCAkcGFyc2VkKTsKICAgICAgICAgICAgcmV0dXJuICRwYXJzZWQ7CiAgICAgICAgfQoKICAgICAgICAvLyBBdHRlbXB0IHRvIHBhcnNlIHRoZSBzdHJpbmcgYXMgSlNPTiByZWdhcmRsZXNzIG9mIGNvbnRlbnQgdHlwZSwKICAgICAgICAvLyBzaW5jZSBzb21lIHByb3ZpZGVycyB1c2Ugbm9uLXN0YW5kYXJkIGNvbnRlbnQgdHlwZXMuIE9ubHkgdGhyb3cgYW4KICAgICAgICAvLyBleGNlcHRpb24gaWYgdGhlIEpTT04gY291bGQgbm90IGJlIHBhcnNlZCB3aGVuIGl0IHdhcyBleHBlY3RlZCB0by4KICAgICAgICB0cnkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnBhcnNlSnNvbigkY29udGVudCk7CiAgICAgICAgfSBjYXRjaCAoVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIGlmIChzdHJwb3MoJHR5cGUsICdqc29uJykgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICB0aHJvdyAkZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRyZXNwb25zZS0+Z2V0U3RhdHVzQ29kZSgpID09IDUwMCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAnQW4gT0F1dGggc2VydmVyIGVycm9yIHdhcyBlbmNvdW50ZXJlZCB0aGF0IGRpZCBub3QgY29udGFpbiBhIEpTT04gYm9keScsCiAgICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICAgICAkZQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICRjb250ZW50OwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrcyBhIHByb3ZpZGVyIHJlc3BvbnNlIGZvciBlcnJvcnMuCiAgICAgKgogICAgICogQHRocm93cyBJZGVudGl0eVByb3ZpZGVyRXhjZXB0aW9uCiAgICAgKiBAcGFyYW0gIFJlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZQogICAgICogQHBhcmFtICBhcnJheXxzdHJpbmcgJGRhdGEgUGFyc2VkIHJlc3BvbnNlIGRhdGEKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tSZXNwb25zZShSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UsICRkYXRhKTsKCiAgICAvKioKICAgICAqIFByZXBhcmVzIGFuIHBhcnNlZCBhY2Nlc3MgdG9rZW4gcmVzcG9uc2UgZm9yIGEgZ3JhbnQuCiAgICAgKgogICAgICogQ3VzdG9tIG1hcHBpbmcgb2YgZXhwaXJhdGlvbiwgZXRjIHNob3VsZCBiZSBkb25lIGhlcmUuIEFsd2F5cyBjYWxsIHRoZQogICAgICogcGFyZW50IG1ldGhvZCB3aGVuIG92ZXJsb2FkaW5nIHRoaXMgbWV0aG9kLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXk8c3RyaW5nLCBtaXhlZD4gJHJlc3VsdAogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gcHJlcGFyZUFjY2Vzc1Rva2VuUmVzcG9uc2UoYXJyYXkgJHJlc3VsdCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmdldEFjY2Vzc1Rva2VuUmVzb3VyY2VPd25lcklkKCkgIT09IG51bGwpIHsKICAgICAgICAgICAgJHJlc3VsdFsncmVzb3VyY2Vfb3duZXJfaWQnXSA9ICR0aGlzLT5nZXRWYWx1ZUJ5S2V5KAogICAgICAgICAgICAgICAgJHJlc3VsdCwKICAgICAgICAgICAgICAgICR0aGlzLT5nZXRBY2Nlc3NUb2tlblJlc291cmNlT3duZXJJZCgpCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhbiBhY2Nlc3MgdG9rZW4gZnJvbSBhIHJlc3BvbnNlLgogICAgICoKICAgICAqIFRoZSBncmFudCB0aGF0IHdhcyB1c2VkIHRvIGZldGNoIHRoZSByZXNwb25zZSBjYW4gYmUgdXNlZCB0byBwcm92aWRlCiAgICAgKiBhZGRpdGlvbmFsIGNvbnRleHQuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAkcmVzcG9uc2UKICAgICAqIEBwYXJhbSAgQWJzdHJhY3RHcmFudCAkZ3JhbnQKICAgICAqIEByZXR1cm4gQWNjZXNzVG9rZW5JbnRlcmZhY2UKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNyZWF0ZUFjY2Vzc1Rva2VuKGFycmF5ICRyZXNwb25zZSwgQWJzdHJhY3RHcmFudCAkZ3JhbnQpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBBY2Nlc3NUb2tlbigkcmVzcG9uc2UpOwogICAgfQoKICAgIC8qKgogICAgICogR2VuZXJhdGVzIGEgcmVzb3VyY2Ugb3duZXIgb2JqZWN0IGZyb20gYSBzdWNjZXNzZnVsIHJlc291cmNlIG93bmVyCiAgICAgKiBkZXRhaWxzIHJlcXVlc3QuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAkcmVzcG9uc2UKICAgICAqIEBwYXJhbSAgQWNjZXNzVG9rZW4gJHRva2VuCiAgICAgKiBAcmV0dXJuIFJlc291cmNlT3duZXJJbnRlcmZhY2UKICAgICAqLwogICAgYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIGNyZWF0ZVJlc291cmNlT3duZXIoYXJyYXkgJHJlc3BvbnNlLCBBY2Nlc3NUb2tlbiAkdG9rZW4pOwoKICAgIC8qKgogICAgICogUmVxdWVzdHMgYW5kIHJldHVybnMgdGhlIHJlc291cmNlIG93bmVyIG9mIGdpdmVuIGFjY2VzcyB0b2tlbi4KICAgICAqCiAgICAgKiBAcGFyYW0gIEFjY2Vzc1Rva2VuICR0b2tlbgogICAgICogQHJldHVybiBSZXNvdXJjZU93bmVySW50ZXJmYWNlCiAgICAgKiBAdGhyb3dzIElkZW50aXR5UHJvdmlkZXJFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIEd1enpsZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzb3VyY2VPd25lcihBY2Nlc3NUb2tlbiAkdG9rZW4pCiAgICB7CiAgICAgICAgJHJlc3BvbnNlID0gJHRoaXMtPmZldGNoUmVzb3VyY2VPd25lckRldGFpbHMoJHRva2VuKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5jcmVhdGVSZXNvdXJjZU93bmVyKCRyZXNwb25zZSwgJHRva2VuKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlcXVlc3RzIHJlc291cmNlIG93bmVyIGRldGFpbHMuCiAgICAgKgogICAgICogQHBhcmFtICBBY2Nlc3NUb2tlbiAkdG9rZW4KICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqIEB0aHJvd3MgSWRlbnRpdHlQcm92aWRlckV4Y2VwdGlvbgogICAgICogQHRocm93cyBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgR3V6emxlRXhjZXB0aW9uCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBmZXRjaFJlc291cmNlT3duZXJEZXRhaWxzKEFjY2Vzc1Rva2VuICR0b2tlbikKICAgIHsKICAgICAgICAkdXJsID0gJHRoaXMtPmdldFJlc291cmNlT3duZXJEZXRhaWxzVXJsKCR0b2tlbik7CgogICAgICAgICRyZXF1ZXN0ID0gJHRoaXMtPmdldEF1dGhlbnRpY2F0ZWRSZXF1ZXN0KHNlbGY6Ok1FVEhPRF9HRVQsICR1cmwsICR0b2tlbik7CgogICAgICAgICRyZXNwb25zZSA9ICR0aGlzLT5nZXRQYXJzZWRSZXNwb25zZSgkcmVxdWVzdCk7CgogICAgICAgIGlmIChmYWxzZSA9PT0gaXNfYXJyYXkoJHJlc3BvbnNlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0ludmFsaWQgcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSBBdXRob3JpemF0aW9uIFNlcnZlci4gRXhwZWN0ZWQgSlNPTi4nCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3BvbnNlOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgZGVmYXVsdCBoZWFkZXJzIHVzZWQgYnkgdGhpcyBwcm92aWRlci4KICAgICAqCiAgICAgKiBUeXBpY2FsbHkgdGhpcyBpcyB1c2VkIHRvIHNldCAnQWNjZXB0JyBvciAnQ29udGVudC1UeXBlJyBoZWFkZXJzLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldERlZmF1bHRIZWFkZXJzKCkKICAgIHsKICAgICAgICByZXR1cm4gW107CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlcnMgdXNlZCBieSB0aGlzIHByb3ZpZGVyLgogICAgICoKICAgICAqIFR5cGljYWxseSB0aGlzIGlzICJCZWFyZXIiIG9yICJNQUMiLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWU6CiAgICAgKiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NzQ5I3NlY3Rpb24tNy4xCiAgICAgKgogICAgICogTm8gZGVmYXVsdCBpcyBwcm92aWRlZCwgcHJvdmlkZXJzIG11c3Qgb3ZlcmxvYWQgdGhpcyBtZXRob2QgdG8gYWN0aXZhdGUKICAgICAqIGF1dGhvcml6YXRpb24gaGVhZGVycy4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkfG51bGwgJHRva2VuIEVpdGhlciBhIHN0cmluZyBvciBhbiBhY2Nlc3MgdG9rZW4gaW5zdGFuY2UKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEF1dGhvcml6YXRpb25IZWFkZXJzKCR0b2tlbiA9IG51bGwpCiAgICB7CiAgICAgICAgcmV0dXJuIFtdOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhbGwgaGVhZGVycyB1c2VkIGJ5IHRoaXMgcHJvdmlkZXIgZm9yIGEgcmVxdWVzdC4KICAgICAqCiAgICAgKiBUaGUgcmVxdWVzdCB3aWxsIGJlIGF1dGhlbnRpY2F0ZWQgaWYgYW4gYWNjZXNzIHRva2VuIGlzIHByb3ZpZGVkLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWR8bnVsbCAkdG9rZW4gb2JqZWN0IG9yIHN0cmluZwogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGVhZGVycygkdG9rZW4gPSBudWxsKQogICAgewogICAgICAgIGlmICgkdG9rZW4pIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5X21lcmdlKAogICAgICAgICAgICAgICAgJHRoaXMtPmdldERlZmF1bHRIZWFkZXJzKCksCiAgICAgICAgICAgICAgICAkdGhpcy0+Z2V0QXV0aG9yaXphdGlvbkhlYWRlcnMoJHRva2VuKQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXREZWZhdWx0SGVhZGVycygpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Provider/Exception/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Provider/Exception/IdentityProviderException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxQcm92aWRlclxFeGNlcHRpb247CgovKioKICogRXhjZXB0aW9uIHRocm93biBpZiB0aGUgcHJvdmlkZXIgcmVzcG9uc2UgY29udGFpbnMgZXJyb3JzLgogKi8KY2xhc3MgSWRlbnRpdHlQcm92aWRlckV4Y2VwdGlvbiBleHRlbmRzIFxFeGNlcHRpb24KewogICAgLyoqCiAgICAgKiBAdmFyIG1peGVkCiAgICAgKi8KICAgIHByb3RlY3RlZCAkcmVzcG9uc2U7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gaW50ICRjb2RlCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHJlc3BvbnNlIFRoZSByZXNwb25zZSBib2R5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbWVzc2FnZSwgJGNvZGUsICRyZXNwb25zZSkKICAgIHsKICAgICAgICAkdGhpcy0+cmVzcG9uc2UgPSAkcmVzcG9uc2U7CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJG1lc3NhZ2UsICRjb2RlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGV4Y2VwdGlvbidzIHJlc3BvbnNlIGJvZHkuCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzcG9uc2VCb2R5KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlc3BvbnNlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Provider/GenericProvider.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxQcm92aWRlcjsKCnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBMZWFndWVcT0F1dGgyXENsaWVudFxQcm92aWRlclxFeGNlcHRpb25cSWRlbnRpdHlQcm92aWRlckV4Y2VwdGlvbjsKdXNlIExlYWd1ZVxPQXV0aDJcQ2xpZW50XFRva2VuXEFjY2Vzc1Rva2VuOwp1c2UgTGVhZ3VlXE9BdXRoMlxDbGllbnRcVG9vbFxCZWFyZXJBdXRob3JpemF0aW9uVHJhaXQ7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwoKLyoqCiAqIFJlcHJlc2VudHMgYSBnZW5lcmljIHNlcnZpY2UgcHJvdmlkZXIgdGhhdCBtYXkgYmUgdXNlZCB0byBpbnRlcmFjdCB3aXRoIGFueQogKiBPQXV0aCAyLjAgc2VydmljZSBwcm92aWRlciwgdXNpbmcgQmVhcmVyIHRva2VuIGF1dGhlbnRpY2F0aW9uLgogKi8KY2xhc3MgR2VuZXJpY1Byb3ZpZGVyIGV4dGVuZHMgQWJzdHJhY3RQcm92aWRlcgp7CiAgICB1c2UgQmVhcmVyQXV0aG9yaXphdGlvblRyYWl0OwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkdXJsQXV0aG9yaXplOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkdXJsQWNjZXNzVG9rZW47CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICR1cmxSZXNvdXJjZU93bmVyRGV0YWlsczsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJGFjY2Vzc1Rva2VuTWV0aG9kOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkYWNjZXNzVG9rZW5SZXNvdXJjZU93bmVySWQ7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5fG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkc2NvcGVzID0gbnVsbDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJHNjb3BlU2VwYXJhdG9yOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkcmVzcG9uc2VFcnJvciA9ICdlcnJvcic7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRyZXNwb25zZUNvZGU7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRyZXNwb25zZVJlc291cmNlT3duZXJJZCA9ICdpZCc7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJHBrY2VNZXRob2QgPSBudWxsOwoKICAgIC8qKgogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zCiAgICAgKiBAcGFyYW0gYXJyYXkgJGNvbGxhYm9yYXRvcnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRvcHRpb25zID0gW10sIGFycmF5ICRjb2xsYWJvcmF0b3JzID0gW10pCiAgICB7CiAgICAgICAgJHRoaXMtPmFzc2VydFJlcXVpcmVkT3B0aW9ucygkb3B0aW9ucyk7CgogICAgICAgICRwb3NzaWJsZSAgID0gJHRoaXMtPmdldENvbmZpZ3VyYWJsZU9wdGlvbnMoKTsKICAgICAgICAkY29uZmlndXJlZCA9IGFycmF5X2ludGVyc2VjdF9rZXkoJG9wdGlvbnMsIGFycmF5X2ZsaXAoJHBvc3NpYmxlKSk7CgogICAgICAgIGZvcmVhY2ggKCRjb25maWd1cmVkIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICR0aGlzLT4ka2V5ID0gJHZhbHVlOwogICAgICAgIH0KCiAgICAgICAgLy8gUmVtb3ZlIGFsbCBvcHRpb25zIHRoYXQgYXJlIG9ubHkgdXNlZCBsb2NhbGx5CiAgICAgICAgJG9wdGlvbnMgPSBhcnJheV9kaWZmX2tleSgkb3B0aW9ucywgJGNvbmZpZ3VyZWQpOwoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRvcHRpb25zLCAkY29sbGFib3JhdG9ycyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFsbCBvcHRpb25zIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0Q29uZmlndXJhYmxlT3B0aW9ucygpCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X21lcmdlKCR0aGlzLT5nZXRSZXF1aXJlZE9wdGlvbnMoKSwgWwogICAgICAgICAgICAnYWNjZXNzVG9rZW5NZXRob2QnLAogICAgICAgICAgICAnYWNjZXNzVG9rZW5SZXNvdXJjZU93bmVySWQnLAogICAgICAgICAgICAnc2NvcGVTZXBhcmF0b3InLAogICAgICAgICAgICAncmVzcG9uc2VFcnJvcicsCiAgICAgICAgICAgICdyZXNwb25zZUNvZGUnLAogICAgICAgICAgICAncmVzcG9uc2VSZXNvdXJjZU93bmVySWQnLAogICAgICAgICAgICAnc2NvcGVzJywKICAgICAgICAgICAgJ3BrY2VNZXRob2QnLAogICAgICAgIF0pOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhbGwgb3B0aW9ucyB0aGF0IGFyZSByZXF1aXJlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRSZXF1aXJlZE9wdGlvbnMoKQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICd1cmxBdXRob3JpemUnLAogICAgICAgICAgICAndXJsQWNjZXNzVG9rZW4nLAogICAgICAgICAgICAndXJsUmVzb3VyY2VPd25lckRldGFpbHMnLAogICAgICAgIF07CiAgICB9CgogICAgLyoqCiAgICAgKiBWZXJpZmllcyB0aGF0IGFsbCByZXF1aXJlZCBvcHRpb25zIGhhdmUgYmVlbiBwYXNzZWQuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAkb3B0aW9ucwogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFzc2VydFJlcXVpcmVkT3B0aW9ucyhhcnJheSAkb3B0aW9ucykKICAgIHsKICAgICAgICAkbWlzc2luZyA9IGFycmF5X2RpZmZfa2V5KGFycmF5X2ZsaXAoJHRoaXMtPmdldFJlcXVpcmVkT3B0aW9ucygpKSwgJG9wdGlvbnMpOwoKICAgICAgICBpZiAoIWVtcHR5KCRtaXNzaW5nKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ1JlcXVpcmVkIG9wdGlvbnMgbm90IGRlZmluZWQ6ICcgLiBpbXBsb2RlKCcsICcsIGFycmF5X2tleXMoJG1pc3NpbmcpKQogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCYXNlQXV0aG9yaXphdGlvblVybCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51cmxBdXRob3JpemU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdGRvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QmFzZUFjY2Vzc1Rva2VuVXJsKGFycmF5ICRwYXJhbXMpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51cmxBY2Nlc3NUb2tlbjsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZXNvdXJjZU93bmVyRGV0YWlsc1VybChBY2Nlc3NUb2tlbiAkdG9rZW4pCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51cmxSZXNvdXJjZU93bmVyRGV0YWlsczsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREZWZhdWx0U2NvcGVzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnNjb3BlczsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRBY2Nlc3NUb2tlbk1ldGhvZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hY2Nlc3NUb2tlbk1ldGhvZCA/OiBwYXJlbnQ6OmdldEFjY2Vzc1Rva2VuTWV0aG9kKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdGRvYwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0QWNjZXNzVG9rZW5SZXNvdXJjZU93bmVySWQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YWNjZXNzVG9rZW5SZXNvdXJjZU93bmVySWQgPzogcGFyZW50OjpnZXRBY2Nlc3NUb2tlblJlc291cmNlT3duZXJJZCgpOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXRkb2MKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFNjb3BlU2VwYXJhdG9yKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnNjb3BlU2VwYXJhdG9yID86IHBhcmVudDo6Z2V0U2NvcGVTZXBhcmF0b3IoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRQa2NlTWV0aG9kKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnBrY2VNZXRob2QgPzogcGFyZW50OjpnZXRQa2NlTWV0aG9kKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdGRvYwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tSZXNwb25zZShSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UsICRkYXRhKQogICAgewogICAgICAgIGlmICghZW1wdHkoJGRhdGFbJHRoaXMtPnJlc3BvbnNlRXJyb3JdKSkgewogICAgICAgICAgICAkZXJyb3IgPSAkZGF0YVskdGhpcy0+cmVzcG9uc2VFcnJvcl07CiAgICAgICAgICAgIGlmICghaXNfc3RyaW5nKCRlcnJvcikpIHsKICAgICAgICAgICAgICAgICRlcnJvciA9IHZhcl9leHBvcnQoJGVycm9yLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkY29kZSAgPSAkdGhpcy0+cmVzcG9uc2VDb2RlICYmICFlbXB0eSgkZGF0YVskdGhpcy0+cmVzcG9uc2VDb2RlXSk/ICRkYXRhWyR0aGlzLT5yZXNwb25zZUNvZGVdIDogMDsKICAgICAgICAgICAgaWYgKCFpc19pbnQoJGNvZGUpKSB7CiAgICAgICAgICAgICAgICAkY29kZSA9IGludHZhbCgkY29kZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhyb3cgbmV3IElkZW50aXR5UHJvdmlkZXJFeGNlcHRpb24oJGVycm9yLCAkY29kZSwgJGRhdGEpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjcmVhdGVSZXNvdXJjZU93bmVyKGFycmF5ICRyZXNwb25zZSwgQWNjZXNzVG9rZW4gJHRva2VuKQogICAgewogICAgICAgIHJldHVybiBuZXcgR2VuZXJpY1Jlc291cmNlT3duZXIoJHJlc3BvbnNlLCAkdGhpcy0+cmVzcG9uc2VSZXNvdXJjZU93bmVySWQpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Provider/GenericResourceOwner.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxQcm92aWRlcjsKCi8qKgogKiBSZXByZXNlbnRzIGEgZ2VuZXJpYyByZXNvdXJjZSBvd25lciBmb3IgdXNlIHdpdGggdGhlIEdlbmVyaWNQcm92aWRlci4KICovCmNsYXNzIEdlbmVyaWNSZXNvdXJjZU93bmVyIGltcGxlbWVudHMgUmVzb3VyY2VPd25lckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkICRyZXNwb25zZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkcmVzb3VyY2VPd25lcklkOwoKICAgIC8qKgogICAgICogQHBhcmFtIGFycmF5ICRyZXNwb25zZQogICAgICogQHBhcmFtIHN0cmluZyAkcmVzb3VyY2VPd25lcklkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkcmVzcG9uc2UsICRyZXNvdXJjZU93bmVySWQpCiAgICB7CiAgICAgICAgJHRoaXMtPnJlc3BvbnNlID0gJHJlc3BvbnNlOwogICAgICAgICR0aGlzLT5yZXNvdXJjZU93bmVySWQgPSAkcmVzb3VyY2VPd25lcklkOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgaWRlbnRpZmllciBvZiB0aGUgYXV0aG9yaXplZCByZXNvdXJjZSBvd25lci4KICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXNwb25zZVskdGhpcy0+cmVzb3VyY2VPd25lcklkXTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHJhdyByZXNvdXJjZSBvd25lciByZXNwb25zZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b0FycmF5KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlc3BvbnNlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Provider/ResourceOwnerInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxQcm92aWRlcjsKCi8qKgogKiBDbGFzc2VzIGltcGxlbWVudGluZyBgUmVzb3VyY2VPd25lckludGVyZmFjZWAgbWF5IGJlIHVzZWQgdG8gcmVwcmVzZW50CiAqIHRoZSByZXNvdXJjZSBvd25lciBhdXRoZW50aWNhdGVkIHdpdGggYSBzZXJ2aWNlIHByb3ZpZGVyLgogKi8KaW50ZXJmYWNlIFJlc291cmNlT3duZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBhdXRob3JpemVkIHJlc291cmNlIG93bmVyLgogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldElkKCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYWxsIG9mIHRoZSBvd25lciBkZXRhaWxzIGF2YWlsYWJsZSBhcyBhbiBhcnJheS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b0FycmF5KCk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Token/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Token/AccessToken.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb2tlbjsKCnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBSdW50aW1lRXhjZXB0aW9uOwoKLyoqCiAqIFJlcHJlc2VudHMgYW4gYWNjZXNzIHRva2VuLgogKgogKiBAbGluayBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NzQ5I3NlY3Rpb24tMS40IEFjY2VzcyBUb2tlbiAoUkZDIDY3NDksIMKnMS40KQogKi8KY2xhc3MgQWNjZXNzVG9rZW4gaW1wbGVtZW50cyBBY2Nlc3NUb2tlbkludGVyZmFjZSwgUmVzb3VyY2VPd25lckFjY2Vzc1Rva2VuSW50ZXJmYWNlLCBTZXR0YWJsZVJlZnJlc2hUb2tlbkludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkYWNjZXNzVG9rZW47CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcm90ZWN0ZWQgJGV4cGlyZXM7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJHJlZnJlc2hUb2tlbjsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkcmVzb3VyY2VPd25lcklkOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgJHZhbHVlcyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJHRpbWVOb3c7CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIHRpbWUgbm93LiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkdGltZU5vdyB0aGUgdGltZSBpbiBzZWNvbmRzIHNpbmNlIGVwb2NoCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXRUaW1lTm93KCR0aW1lTm93KQogICAgewogICAgICAgIHNlbGY6OiR0aW1lTm93ID0gJHRpbWVOb3c7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXNldCB0aGUgdGltZSBub3cgaWYgaXQgd2FzIHNldCBmb3IgdGVzdCBwdXJwb3Nlcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXNldFRpbWVOb3coKQogICAgewogICAgICAgIHNlbGY6OiR0aW1lTm93ID0gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lTm93KCkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6JHRpbWVOb3cgPyBzZWxmOjokdGltZU5vdyA6IHRpbWUoKTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgYW4gYWNjZXNzIHRva2VuLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBBbiBhcnJheSBvZiBvcHRpb25zIHJldHVybmVkIGJ5IHRoZSBzZXJ2aWNlIHByb3ZpZGVyCiAgICAgKiAgICAgaW4gdGhlIGFjY2VzcyB0b2tlbiByZXF1ZXN0LiBUaGUgYGFjY2Vzc190b2tlbmAgb3B0aW9uIGlzIHJlcXVpcmVkLgogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgYGFjY2Vzc190b2tlbmAgaXMgbm90IHByb3ZpZGVkIGluIGAkb3B0aW9uc2AuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkb3B0aW9ucyA9IFtdKQogICAgewogICAgICAgIGlmIChlbXB0eSgkb3B0aW9uc1snYWNjZXNzX3Rva2VuJ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1JlcXVpcmVkIG9wdGlvbiBub3QgcGFzc2VkOiAiYWNjZXNzX3Rva2VuIicpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmFjY2Vzc1Rva2VuID0gJG9wdGlvbnNbJ2FjY2Vzc190b2tlbiddOwoKICAgICAgICBpZiAoIWVtcHR5KCRvcHRpb25zWydyZXNvdXJjZV9vd25lcl9pZCddKSkgewogICAgICAgICAgICAkdGhpcy0+cmVzb3VyY2VPd25lcklkID0gJG9wdGlvbnNbJ3Jlc291cmNlX293bmVyX2lkJ107CiAgICAgICAgfQoKICAgICAgICBpZiAoIWVtcHR5KCRvcHRpb25zWydyZWZyZXNoX3Rva2VuJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5yZWZyZXNoVG9rZW4gPSAkb3B0aW9uc1sncmVmcmVzaF90b2tlbiddOwogICAgICAgIH0KCiAgICAgICAgLy8gV2UgbmVlZCB0byBrbm93IHdoZW4gdGhlIHRva2VuIGV4cGlyZXMuIFNob3cgcHJlZmVyZW5jZSB0bwogICAgICAgIC8vICdleHBpcmVzX2luJyBzaW5jZSBpdCBpcyBkZWZpbmVkIGluIFJGQzY3NDkgU2VjdGlvbiA1LjEuCiAgICAgICAgLy8gRGVmZXIgdG8gJ2V4cGlyZXMnIGlmIGl0IGlzIHByb3ZpZGVkIGluc3RlYWQuCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydleHBpcmVzX2luJ10pKSB7CiAgICAgICAgICAgIGlmICghaXNfbnVtZXJpYygkb3B0aW9uc1snZXhwaXJlc19pbiddKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ2V4cGlyZXNfaW4gdmFsdWUgbXVzdCBiZSBhbiBpbnRlZ2VyJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5leHBpcmVzID0gJG9wdGlvbnNbJ2V4cGlyZXNfaW4nXSAhPSAwID8gJHRoaXMtPmdldFRpbWVOb3coKSArICRvcHRpb25zWydleHBpcmVzX2luJ10gOiAwOwogICAgICAgIH0gZWxzZWlmICghZW1wdHkoJG9wdGlvbnNbJ2V4cGlyZXMnXSkpIHsKICAgICAgICAgICAgLy8gU29tZSBwcm92aWRlcnMgc3VwcGx5IHRoZSBzZWNvbmRzIHVudGlsIGV4cGlyYXRpb24gcmF0aGVyIHRoYW4KICAgICAgICAgICAgLy8gdGhlIGV4YWN0IHRpbWVzdGFtcC4gVGFrZSBhIGJlc3QgZ3Vlc3MgYXQgd2hpY2ggd2UgcmVjZWl2ZWQuCiAgICAgICAgICAgICRleHBpcmVzID0gKGludCkgJG9wdGlvbnNbJ2V4cGlyZXMnXTsKCiAgICAgICAgICAgIGlmICghJHRoaXMtPmlzRXhwaXJhdGlvblRpbWVzdGFtcCgkZXhwaXJlcykpIHsKICAgICAgICAgICAgICAgICRleHBpcmVzICs9ICR0aGlzLT5nZXRUaW1lTm93KCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5leHBpcmVzID0gJGV4cGlyZXM7CiAgICAgICAgfQoKICAgICAgICAvLyBDYXB0dXJlIGFueSBhZGRpdGlvbmFsIHZhbHVlcyB0aGF0IG1pZ2h0IGV4aXN0IGluIHRoZSB0b2tlbiBidXQgYXJlCiAgICAgICAgLy8gbm90IHBhcnQgb2YgdGhlIHN0YW5kYXJkIHJlc3BvbnNlLiBWZW5kb3JzIHdpbGwgc29tZXRpbWVzIHBhc3MKICAgICAgICAvLyBhZGRpdGlvbmFsIHVzZXIgZGF0YSB0aGlzIHdheS4KICAgICAgICAkdGhpcy0+dmFsdWVzID0gYXJyYXlfZGlmZl9rZXkoJG9wdGlvbnMsIGFycmF5X2ZsaXAoWwogICAgICAgICAgICAnYWNjZXNzX3Rva2VuJywKICAgICAgICAgICAgJ3Jlc291cmNlX293bmVyX2lkJywKICAgICAgICAgICAgJ3JlZnJlc2hfdG9rZW4nLAogICAgICAgICAgICAnZXhwaXJlc19pbicsCiAgICAgICAgICAgICdleHBpcmVzJywKICAgICAgICBdKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVjayBpZiBhIHZhbHVlIGlzIGFuIGV4cGlyYXRpb24gdGltZXN0YW1wIG9yIHNlY29uZCB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ZWdlciAkdmFsdWUKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gaXNFeHBpcmF0aW9uVGltZXN0YW1wKCR2YWx1ZSkKICAgIHsKICAgICAgICAvLyBJZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgbGFyZ2VyIHRoYW4gdGhlIG9yaWdpbmFsIE9BdXRoIDIgZHJhZnQgZGF0ZSwKICAgICAgICAvLyBhc3N1bWUgdGhhdCBpdCBpcyBtZWFudCB0byBiZSBhIChwb3NzaWJsZSBleHBpcmVkKSB0aW1lc3RhbXAuCiAgICAgICAgJG9hdXRoMkluY2VwdGlvbkRhdGUgPSAxMzQ5MDY3NjAwOyAvLyAyMDEyLTEwLTAxCiAgICAgICAgcmV0dXJuICgkdmFsdWUgPiAkb2F1dGgySW5jZXB0aW9uRGF0ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdGRvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VG9rZW4oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YWNjZXNzVG9rZW47CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdGRvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVmcmVzaFRva2VuKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlZnJlc2hUb2tlbjsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRSZWZyZXNoVG9rZW4oJHJlZnJlc2hUb2tlbikKICAgIHsKICAgICAgICAkdGhpcy0+cmVmcmVzaFRva2VuID0gJHJlZnJlc2hUb2tlbjsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFeHBpcmVzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmV4cGlyZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdGRvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzb3VyY2VPd25lcklkKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlc291cmNlT3duZXJJZDsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNFeHBpcmVkKCkKICAgIHsKICAgICAgICAkZXhwaXJlcyA9ICR0aGlzLT5nZXRFeHBpcmVzKCk7CgogICAgICAgIGlmIChlbXB0eSgkZXhwaXJlcykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oJyJleHBpcmVzIiBpcyBub3Qgc2V0IG9uIHRoZSB0b2tlbicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRleHBpcmVzIDwgJHRoaXMtPmdldFRpbWVOb3coKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWYWx1ZXMoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWVzOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXRkb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiAoc3RyaW5nKSAkdGhpcy0+Z2V0VG9rZW4oKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCkKICAgIHsKICAgICAgICAkcGFyYW1ldGVycyA9ICR0aGlzLT52YWx1ZXM7CgogICAgICAgIGlmICgkdGhpcy0+YWNjZXNzVG9rZW4pIHsKICAgICAgICAgICAgJHBhcmFtZXRlcnNbJ2FjY2Vzc190b2tlbiddID0gJHRoaXMtPmFjY2Vzc1Rva2VuOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT5yZWZyZXNoVG9rZW4pIHsKICAgICAgICAgICAgJHBhcmFtZXRlcnNbJ3JlZnJlc2hfdG9rZW4nXSA9ICR0aGlzLT5yZWZyZXNoVG9rZW47CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoaXMtPmV4cGlyZXMpIHsKICAgICAgICAgICAgJHBhcmFtZXRlcnNbJ2V4cGlyZXMnXSA9ICR0aGlzLT5leHBpcmVzOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT5yZXNvdXJjZU93bmVySWQpIHsKICAgICAgICAgICAgJHBhcmFtZXRlcnNbJ3Jlc291cmNlX293bmVyX2lkJ10gPSAkdGhpcy0+cmVzb3VyY2VPd25lcklkOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRwYXJhbWV0ZXJzOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Token/AccessTokenInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb2tlbjsKCnVzZSBKc29uU2VyaWFsaXphYmxlOwp1c2UgUmV0dXJuVHlwZVdpbGxDaGFuZ2U7CnVzZSBSdW50aW1lRXhjZXB0aW9uOwoKaW50ZXJmYWNlIEFjY2Vzc1Rva2VuSW50ZXJmYWNlIGV4dGVuZHMgSnNvblNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGFjY2VzcyB0b2tlbiBzdHJpbmcgb2YgdGhpcyBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VG9rZW4oKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHJlZnJlc2ggdG9rZW4sIGlmIGRlZmluZWQuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVmcmVzaFRva2VuKCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBleHBpcmF0aW9uIHRpbWVzdGFtcCBpbiBzZWNvbmRzLCBpZiBkZWZpbmVkLgogICAgICoKICAgICAqIEByZXR1cm4gaW50ZWdlcnxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFeHBpcmVzKCk7CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgdGhpcyB0b2tlbiBoYXMgZXhwaXJlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGUgdG9rZW4gaGFzIGV4cGlyZWQsIGZhbHNlIG90aGVyd2lzZS4KICAgICAqIEB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiBpZiAnZXhwaXJlcycgaXMgbm90IHNldCBvbiB0aGUgdG9rZW4uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNFeHBpcmVkKCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFkZGl0aW9uYWwgdmVuZG9yIHZhbHVlcyBzdG9yZWQgaW4gdGhlIHRva2VuLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFZhbHVlcygpOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWNjZXNzIHRva2VuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgcGFyYW1ldGVycyB0byBzZXJpYWxpemUgd2hlbiB0aGlzIGlzIHNlcmlhbGl6ZWQgd2l0aAogICAgICoganNvbl9lbmNvZGUoKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgICNbUmV0dXJuVHlwZVdpbGxDaGFuZ2VdCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Token/ResourceOwnerAccessTokenInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb2tlbjsKCmludGVyZmFjZSBSZXNvdXJjZU93bmVyQWNjZXNzVG9rZW5JbnRlcmZhY2UgZXh0ZW5kcyBBY2Nlc3NUb2tlbkludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHJlc291cmNlIG93bmVyIGlkZW50aWZpZXIsIGlmIGRlZmluZWQuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzb3VyY2VPd25lcklkKCk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Token/SettableRefreshTokenInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb2tlbjsKCmludGVyZmFjZSBTZXR0YWJsZVJlZnJlc2hUb2tlbkludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFNldHMgb3IgcmVwbGFjZXMgdGhlIHJlZnJlc2ggdG9rZW4gd2l0aCB0aGUgcHJvdmlkZWQgcmVmcmVzaCB0b2tlbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRyZWZyZXNoVG9rZW4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UmVmcmVzaFRva2VuKCRyZWZyZXNoVG9rZW4pOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Tool/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Tool/ArrayAccessorTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb29sOwoKLyoqCiAqIFByb3ZpZGVzIGdlbmVyaWMgYXJyYXkgbmF2aWdhdGlvbiB0b29scy4KICovCnRyYWl0IEFycmF5QWNjZXNzb3JUcmFpdAp7CiAgICAvKioKICAgICAqIFJldHVybnMgYSB2YWx1ZSBieSBrZXkgdXNpbmcgZG90IG5vdGF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgICAgICAkZGF0YQogICAgICogQHBhcmFtICBzdHJpbmcgICAgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWR8bnVsbCAkZGVmYXVsdAogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldFZhbHVlQnlLZXkoYXJyYXkgJGRhdGEsICRrZXksICRkZWZhdWx0ID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoIWlzX3N0cmluZygka2V5KSB8fCBlbXB0eSgka2V5KSB8fCAhY291bnQoJGRhdGEpKSB7CiAgICAgICAgICAgIHJldHVybiAkZGVmYXVsdDsKICAgICAgICB9CgogICAgICAgIGlmIChzdHJwb3MoJGtleSwgJy4nKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgJGtleXMgPSBleHBsb2RlKCcuJywgJGtleSk7CgogICAgICAgICAgICBmb3JlYWNoICgka2V5cyBhcyAkaW5uZXJLZXkpIHsKICAgICAgICAgICAgICAgIGlmICghaXNfYXJyYXkoJGRhdGEpIHx8ICFhcnJheV9rZXlfZXhpc3RzKCRpbm5lcktleSwgJGRhdGEpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRkZWZhdWx0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRkYXRhID0gJGRhdGFbJGlubmVyS2V5XTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICRkYXRhOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGFycmF5X2tleV9leGlzdHMoJGtleSwgJGRhdGEpID8gJGRhdGFbJGtleV0gOiAkZGVmYXVsdDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Tool/BearerAuthorizationTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb29sOwoKdXNlIExlYWd1ZVxPQXV0aDJcQ2xpZW50XFRva2VuXEFjY2Vzc1Rva2VuSW50ZXJmYWNlOwoKLyoqCiAqIEVuYWJsZXMgYEJlYXJlcmAgaGVhZGVyIGF1dGhvcml6YXRpb24gZm9yIHByb3ZpZGVycy4KICoKICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjc1MCBCZWFyZXIgVG9rZW4gVXNhZ2UgKFJGQyA2NzUwKQogKi8KdHJhaXQgQmVhcmVyQXV0aG9yaXphdGlvblRyYWl0CnsKICAgIC8qKgogICAgICogUmV0dXJucyBhdXRob3JpemF0aW9uIGhlYWRlcnMgZm9yIHRoZSAnYmVhcmVyJyBncmFudC4KICAgICAqCiAgICAgKiBAcGFyYW0gIEFjY2Vzc1Rva2VuSW50ZXJmYWNlfHN0cmluZ3xudWxsICR0b2tlbiBFaXRoZXIgYSBzdHJpbmcgb3IgYW4gYWNjZXNzIHRva2VuIGluc3RhbmNlCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRBdXRob3JpemF0aW9uSGVhZGVycygkdG9rZW4gPSBudWxsKQogICAgewogICAgICAgIHJldHVybiBbJ0F1dGhvcml6YXRpb24nID0+ICdCZWFyZXIgJyAuICR0b2tlbl07CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Tool/GuardedPropertyTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb29sOwoKLyoqCiAqIFByb3ZpZGVzIHN1cHBvcnQgZm9yIGJsYWNrbGlzdGluZyBleHBsaWNpdCBwcm9wZXJ0aWVzIGZyb20gdGhlCiAqIG1hc3MgYXNzaWdubWVudCBiZWhhdmlvci4KICovCnRyYWl0IEd1YXJkZWRQcm9wZXJ0eVRyYWl0CnsKICAgIC8qKgogICAgICogVGhlIHByb3BlcnRpZXMgdGhhdCBhcmVuJ3QgbWFzcyBhc3NpZ25hYmxlLgogICAgICoKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkICRndWFyZGVkID0gW107CgogICAgLyoqCiAgICAgKiBBdHRlbXB0cyB0byBtYXNzIGFzc2lnbiB0aGUgZ2l2ZW4gb3B0aW9ucyB0byBleHBsaWNpdGx5IGRlZmluZWQgcHJvcGVydGllcywKICAgICAqIHNraXBwaW5nIG92ZXIgYW55IHByb3BlcnRpZXMgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUgZ3VhcmRlZCBhcnJheS4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGZpbGxQcm9wZXJ0aWVzKGFycmF5ICRvcHRpb25zID0gW10pCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydndWFyZGVkJ10pKSB7CiAgICAgICAgICAgIHVuc2V0KCRvcHRpb25zWydndWFyZGVkJ10pOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoJG9wdGlvbnMgYXMgJG9wdGlvbiA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgaWYgKHByb3BlcnR5X2V4aXN0cygkdGhpcywgJG9wdGlvbikgJiYgISR0aGlzLT5pc0d1YXJkZWQoJG9wdGlvbikpIHsKICAgICAgICAgICAgICAgICR0aGlzLT57JG9wdGlvbn0gPSAkdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGN1cnJlbnQgZ3VhcmRlZCBwcm9wZXJ0aWVzLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEd1YXJkZWQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z3VhcmRlZDsKICAgIH0KCiAgICAvKioKICAgICAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHByb3BlcnR5IGlzIGd1YXJkZWQuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRwcm9wZXJ0eQogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0d1YXJkZWQoJHByb3BlcnR5KQogICAgewogICAgICAgIHJldHVybiBpbl9hcnJheSgkcHJvcGVydHksICR0aGlzLT5nZXRHdWFyZGVkKCkpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Tool/MacAuthorizationTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb29sOwoKdXNlIExlYWd1ZVxPQXV0aDJcQ2xpZW50XFRva2VuXEFjY2Vzc1Rva2VuOwp1c2UgTGVhZ3VlXE9BdXRoMlxDbGllbnRcVG9rZW5cQWNjZXNzVG9rZW5JbnRlcmZhY2U7CgovKioKICogRW5hYmxlcyBgTUFDYCBoZWFkZXIgYXV0aG9yaXphdGlvbiBmb3IgcHJvdmlkZXJzLgogKgogKiBAbGluayBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLW9hdXRoLXYyLWh0dHAtbWFjLTA1IE1lc3NhZ2UgQXV0aGVudGljYXRpb24gQ29kZSAoTUFDKSBUb2tlbnMKICovCnRyYWl0IE1hY0F1dGhvcml6YXRpb25UcmFpdAp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGlkIG9mIHRoaXMgdG9rZW4gZm9yIE1BQyBnZW5lcmF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAgQWNjZXNzVG9rZW4gJHRva2VuCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0VG9rZW5JZChBY2Nlc3NUb2tlbiAkdG9rZW4pOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgTUFDIHNpZ25hdHVyZSBmb3IgdGhlIGN1cnJlbnQgcmVxdWVzdC4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAkaWQKICAgICAqIEBwYXJhbSAgaW50ZWdlciAkdHMKICAgICAqIEBwYXJhbSAgc3RyaW5nICRub25jZQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldE1hY1NpZ25hdHVyZSgkaWQsICR0cywgJG5vbmNlKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgYSBuZXcgcmFuZG9tIHN0cmluZyB0byB1c2UgYXMgdGhlIHN0YXRlIHBhcmFtZXRlciBpbiBhbgogICAgICogYXV0aG9yaXphdGlvbiBmbG93LgogICAgICoKICAgICAqIEBwYXJhbSAgaW50ICRsZW5ndGggTGVuZ3RoIG9mIHRoZSByYW5kb20gc3RyaW5nIHRvIGJlIGdlbmVyYXRlZC4KICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBnZXRSYW5kb21TdGF0ZSgkbGVuZ3RoID0gMzIpOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgYXV0aG9yaXphdGlvbiBoZWFkZXJzIGZvciB0aGUgJ21hYycgZ3JhbnQuCiAgICAgKgogICAgICogQHBhcmFtICBBY2Nlc3NUb2tlbkludGVyZmFjZXxzdHJpbmd8bnVsbCAkdG9rZW4gRWl0aGVyIGEgc3RyaW5nIG9yIGFuIGFjY2VzcyB0b2tlbiBpbnN0YW5jZQogICAgICogQHJldHVybiBhcnJheQogICAgICogQGNvZGVDb3ZlcmFnZUlnbm9yZQogICAgICoKICAgICAqIEB0b2RvIFRoaXMgaXMgY3VycmVudGx5IHVudGVzdGVkIGFuZCBwcm92aWRlZCBvbmx5IGFzIGFuIGV4YW1wbGUuIElmIHlvdQogICAgICogY29tcGxldGUgdGhlIGltcGxlbWVudGF0aW9uLCBwbGVhc2UgY3JlYXRlIGEgcHVsbCByZXF1ZXN0IGZvcgogICAgICogaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRBdXRob3JpemF0aW9uSGVhZGVycygkdG9rZW4gPSBudWxsKQogICAgewogICAgICAgIGlmICgkdG9rZW4gPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIH0KCiAgICAgICAgJHRzICAgID0gdGltZSgpOwogICAgICAgICRpZCAgICA9ICR0aGlzLT5nZXRUb2tlbklkKCR0b2tlbik7CiAgICAgICAgJG5vbmNlID0gJHRoaXMtPmdldFJhbmRvbVN0YXRlKDE2KTsKICAgICAgICAkbWFjICAgPSAkdGhpcy0+Z2V0TWFjU2lnbmF0dXJlKCRpZCwgJHRzLCAkbm9uY2UpOwoKICAgICAgICAkcGFydHMgPSBbXTsKICAgICAgICBmb3JlYWNoIChjb21wYWN0KCdpZCcsICd0cycsICdub25jZScsICdtYWMnKSBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICAkcGFydHNbXSA9IHNwcmludGYoJyVzPSIlcyInLCAka2V5LCAkdmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFsnQXV0aG9yaXphdGlvbicgPT4gJ01BQyAnIC4gaW1wbG9kZSgnLCAnLCAkcGFydHMpXTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Tool/ProviderRedirectTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb29sOwoKdXNlIEd1enpsZUh0dHBcRXhjZXB0aW9uXEJhZFJlc3BvbnNlRXhjZXB0aW9uOwp1c2UgR3V6emxlSHR0cFxQc3I3XFVyaTsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVzcG9uc2VJbnRlcmZhY2U7Cgp0cmFpdCBQcm92aWRlclJlZGlyZWN0VHJhaXQKewogICAgLyoqCiAgICAgKiBNYXhpbXVtIG51bWJlciBvZiB0aW1lcyB0byBmb2xsb3cgcHJvdmlkZXIgaW5pdGlhdGVkIHJlZGlyZWN0cwogICAgICoKICAgICAqIEB2YXIgaW50ZWdlcgogICAgICovCiAgICBwcm90ZWN0ZWQgJHJlZGlyZWN0TGltaXQgPSAyOwoKICAgIC8qKgogICAgICogUmV0cmlldmVzIGEgcmVzcG9uc2UgZm9yIGEgZ2l2ZW4gcmVxdWVzdCBhbmQgcmV0cmlldmVzIHN1YnNlcXVlbnQKICAgICAqIHJlc3BvbnNlcywgd2l0aCBhdXRob3JpemF0aW9uIGhlYWRlcnMsIGlmIGEgcmVkaXJlY3QgaXMgZGV0ZWN0ZWQuCiAgICAgKgogICAgICogQHBhcmFtICBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0CiAgICAgKiBAcmV0dXJuIFJlc3BvbnNlSW50ZXJmYWNlCiAgICAgKiBAdGhyb3dzIEJhZFJlc3BvbnNlRXhjZXB0aW9uCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBmb2xsb3dSZXF1ZXN0UmVkaXJlY3RzKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QpCiAgICB7CiAgICAgICAgJHJlc3BvbnNlID0gbnVsbDsKICAgICAgICAkYXR0ZW1wdHMgPSAwOwoKICAgICAgICB3aGlsZSAoJGF0dGVtcHRzIDwgJHRoaXMtPnJlZGlyZWN0TGltaXQpIHsKICAgICAgICAgICAgJGF0dGVtcHRzKys7CiAgICAgICAgICAgICRyZXNwb25zZSA9ICR0aGlzLT5nZXRIdHRwQ2xpZW50KCktPnNlbmQoJHJlcXVlc3QsIFsKICAgICAgICAgICAgICAgICdhbGxvd19yZWRpcmVjdHMnID0+IGZhbHNlCiAgICAgICAgICAgIF0pOwoKICAgICAgICAgICAgaWYgKCR0aGlzLT5pc1JlZGlyZWN0KCRyZXNwb25zZSkpIHsKICAgICAgICAgICAgICAgICRyZWRpcmVjdFVybCA9IG5ldyBVcmkoJHJlc3BvbnNlLT5nZXRIZWFkZXIoJ0xvY2F0aW9uJylbMF0pOwogICAgICAgICAgICAgICAgJHJlcXVlc3QgPSAkcmVxdWVzdC0+d2l0aFVyaSgkcmVkaXJlY3RVcmwpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzcG9uc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBIVFRQIGNsaWVudCBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIEd1enpsZUh0dHBcQ2xpZW50SW50ZXJmYWNlCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBnZXRIdHRwQ2xpZW50KCk7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZXMgY3VycmVudCByZWRpcmVjdCBsaW1pdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludGVnZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlZGlyZWN0TGltaXQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVkaXJlY3RMaW1pdDsKICAgIH0KCiAgICAvKioKICAgICAqIERldGVybWluZXMgaWYgYSBnaXZlbiByZXNwb25zZSBpcyBhIHJlZGlyZWN0LgogICAgICoKICAgICAqIEBwYXJhbSAgUmVzcG9uc2VJbnRlcmZhY2UgICRyZXNwb25zZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbGVhbgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gaXNSZWRpcmVjdChSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UpCiAgICB7CiAgICAgICAgJHN0YXR1c0NvZGUgPSAkcmVzcG9uc2UtPmdldFN0YXR1c0NvZGUoKTsKCiAgICAgICAgcmV0dXJuICRzdGF0dXNDb2RlID4gMzAwICYmICRzdGF0dXNDb2RlIDwgNDAwICYmICRyZXNwb25zZS0+aGFzSGVhZGVyKCdMb2NhdGlvbicpOwogICAgfQoKICAgIC8qKgogICAgICogU2VuZHMgYSByZXF1ZXN0IGluc3RhbmNlIGFuZCByZXR1cm5zIGEgcmVzcG9uc2UgaW5zdGFuY2UuCiAgICAgKgogICAgICogV0FSTklORzogVGhpcyBtZXRob2QgZG9lcyBub3QgYXR0ZW1wdCB0byBjYXRjaCBleGNlcHRpb25zIGNhdXNlZCBieSBIVFRQCiAgICAgKiBlcnJvcnMhIEl0IGlzIHJlY29tbWVuZGVkIHRvIHdyYXAgdGhpcyBtZXRob2QgaW4gYSB0cnkvY2F0Y2ggYmxvY2suCiAgICAgKgogICAgICogQHBhcmFtICBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0CiAgICAgKiBAcmV0dXJuIFJlc3BvbnNlSW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZXNwb25zZShSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0KQogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRyZXNwb25zZSA9ICR0aGlzLT5mb2xsb3dSZXF1ZXN0UmVkaXJlY3RzKCRyZXF1ZXN0KTsKICAgICAgICB9IGNhdGNoIChCYWRSZXNwb25zZUV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAkcmVzcG9uc2UgPSAkZS0+Z2V0UmVzcG9uc2UoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzcG9uc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBVcGRhdGVzIHRoZSByZWRpcmVjdCBsaW1pdC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ZWdlciAkbGltaXQKICAgICAqIEByZXR1cm4gTGVhZ3VlXE9BdXRoMlxDbGllbnRcUHJvdmlkZXJcQWJzdHJhY3RQcm92aWRlcgogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFJlZGlyZWN0TGltaXQoJGxpbWl0KQogICAgewogICAgICAgIGlmICghaXNfaW50KCRsaW1pdCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigncmVkaXJlY3RMaW1pdCBtdXN0IGJlIGFuIGludGVnZXIuJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGxpbWl0IDwgMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdyZWRpcmVjdExpbWl0IG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIG9uZS4nKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5yZWRpcmVjdExpbWl0ID0gJGxpbWl0OwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Tool/QueryBuilderTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb29sOwoKLyoqCiAqIFByb3ZpZGVzIGEgc3RhbmRhcmQgd2F5IHRvIGdlbmVyYXRlIHF1ZXJ5IHN0cmluZ3MuCiAqLwp0cmFpdCBRdWVyeUJ1aWxkZXJUcmFpdAp7CiAgICAvKioKICAgICAqIEJ1aWxkIGEgcXVlcnkgc3RyaW5nIGZyb20gYW4gYXJyYXkuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRwYXJhbXMKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYnVpbGRRdWVyeVN0cmluZyhhcnJheSAkcGFyYW1zKQogICAgewogICAgICAgIHJldHVybiBodHRwX2J1aWxkX3F1ZXJ5KCRwYXJhbXMsICcnLCAnJicsIFxQSFBfUVVFUllfUkZDMzk4Nik7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Tool/RequestFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb29sOwoKdXNlIEd1enpsZUh0dHBcUHNyN1xSZXF1ZXN0OwoKLyoqCiAqIFVzZWQgdG8gcHJvZHVjZSBQU1ItNyBSZXF1ZXN0IGluc3RhbmNlcy4KICoKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xMTAxCiAqLwpjbGFzcyBSZXF1ZXN0RmFjdG9yeQp7CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBQU1ItNyBSZXF1ZXN0IGluc3RhbmNlLgogICAgICoKICAgICAqIEBwYXJhbSAgbnVsbHxzdHJpbmcgJG1ldGhvZCBIVFRQIG1ldGhvZCBmb3IgdGhlIHJlcXVlc3QuCiAgICAgKiBAcGFyYW0gIG51bGx8c3RyaW5nICR1cmkgVVJJIGZvciB0aGUgcmVxdWVzdC4KICAgICAqIEBwYXJhbSAgYXJyYXkgJGhlYWRlcnMgSGVhZGVycyBmb3IgdGhlIG1lc3NhZ2UuCiAgICAgKiBAcGFyYW0gIHN0cmluZ3xyZXNvdXJjZXxTdHJlYW1JbnRlcmZhY2UgJGJvZHkgTWVzc2FnZSBib2R5LgogICAgICogQHBhcmFtICBzdHJpbmcgJHZlcnNpb24gSFRUUCBwcm90b2NvbCB2ZXJzaW9uLgogICAgICoKICAgICAqIEByZXR1cm4gUmVxdWVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVxdWVzdCgKICAgICAgICAkbWV0aG9kLAogICAgICAgICR1cmksCiAgICAgICAgYXJyYXkgJGhlYWRlcnMgPSBbXSwKICAgICAgICAkYm9keSA9IG51bGwsCiAgICAgICAgJHZlcnNpb24gPSAnMS4xJwogICAgKSB7CiAgICAgICAgcmV0dXJuIG5ldyBSZXF1ZXN0KCRtZXRob2QsICR1cmksICRoZWFkZXJzLCAkYm9keSwgJHZlcnNpb24pOwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2VzIHNpbXBsaWZpZWQgb3B0aW9ucy4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgU2ltcGxpZmllZCBvcHRpb25zLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgRXh0ZW5kZWQgb3B0aW9ucyBmb3IgdXNlIHdpdGggZ2V0UmVxdWVzdC4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHBhcnNlT3B0aW9ucyhhcnJheSAkb3B0aW9ucykKICAgIHsKICAgICAgICAvLyBTaG91bGQgbWF0Y2ggZGVmYXVsdCB2YWx1ZXMgZm9yIGdldFJlcXVlc3QKICAgICAgICAkZGVmYXVsdHMgPSBbCiAgICAgICAgICAgICdoZWFkZXJzJyA9PiBbXSwKICAgICAgICAgICAgJ2JvZHknICAgID0+IG51bGwsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMS4xJywKICAgICAgICBdOwoKICAgICAgICByZXR1cm4gYXJyYXlfbWVyZ2UoJGRlZmF1bHRzLCAkb3B0aW9ucyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgcmVxdWVzdCB1c2luZyBhIHNpbXBsaWZpZWQgYXJyYXkgb2Ygb3B0aW9ucy4KICAgICAqCiAgICAgKiBAcGFyYW0gIG51bGx8c3RyaW5nICRtZXRob2QKICAgICAqIEBwYXJhbSAgbnVsbHxzdHJpbmcgJHVyaQogICAgICogQHBhcmFtICBhcnJheSAkb3B0aW9ucwogICAgICoKICAgICAqIEByZXR1cm4gUmVxdWVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVxdWVzdFdpdGhPcHRpb25zKCRtZXRob2QsICR1cmksIGFycmF5ICRvcHRpb25zID0gW10pCiAgICB7CiAgICAgICAgJG9wdGlvbnMgPSAkdGhpcy0+cGFyc2VPcHRpb25zKCRvcHRpb25zKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRSZXF1ZXN0KAogICAgICAgICAgICAkbWV0aG9kLAogICAgICAgICAgICAkdXJpLAogICAgICAgICAgICAkb3B0aW9uc1snaGVhZGVycyddLAogICAgICAgICAgICAkb3B0aW9uc1snYm9keSddLAogICAgICAgICAgICAkb3B0aW9uc1sndmVyc2lvbiddCiAgICAgICAgKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Tool/RequiredParameterTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb29sOwoKdXNlIEJhZE1ldGhvZENhbGxFeGNlcHRpb247CgovKioKICogUHJvdmlkZXMgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBmb3IgcmVxdWlyZWQgcGFyYW1ldGVycy4KICovCnRyYWl0IFJlcXVpcmVkUGFyYW1ldGVyVHJhaXQKewogICAgLyoqCiAgICAgKiBDaGVja3MgZm9yIGEgcmVxdWlyZWQgcGFyYW1ldGVyIGluIGEgaGFzaC4KICAgICAqCiAgICAgKiBAdGhyb3dzIEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEBwYXJhbSAgc3RyaW5nICRuYW1lCiAgICAgKiBAcGFyYW0gIGFycmF5ICAkcGFyYW1zCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja1JlcXVpcmVkUGFyYW1ldGVyKCRuYW1lLCBhcnJheSAkcGFyYW1zKQogICAgewogICAgICAgIGlmICghaXNzZXQoJHBhcmFtc1skbmFtZV0pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBCYWRNZXRob2RDYWxsRXhjZXB0aW9uKHNwcmludGYoCiAgICAgICAgICAgICAgICAnUmVxdWlyZWQgcGFyYW1ldGVyIG5vdCBwYXNzZWQ6ICIlcyInLAogICAgICAgICAgICAgICAgJG5hbWUKICAgICAgICAgICAgKSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2tzIGZvciBtdWx0aXBsZSByZXF1aXJlZCBwYXJhbWV0ZXJzIGluIGEgaGFzaC4KICAgICAqCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHBhcmFtICBhcnJheSAkbmFtZXMKICAgICAqIEBwYXJhbSAgYXJyYXkgJHBhcmFtcwogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gY2hlY2tSZXF1aXJlZFBhcmFtZXRlcnMoYXJyYXkgJG5hbWVzLCBhcnJheSAkcGFyYW1zKQogICAgewogICAgICAgIGZvcmVhY2ggKCRuYW1lcyBhcyAkbmFtZSkgewogICAgICAgICAgICAkdGhpcy0+Y2hlY2tSZXF1aXJlZFBhcmFtZXRlcigkbmFtZSwgJHBhcmFtcyk7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAibGVhZ3VlL3VyaS1pbnRlcmZhY2VzIiwKICAgICJkZXNjcmlwdGlvbiIgOiAiQ29tbW9uIGludGVyZmFjZSBmb3IgVVJJIHJlcHJlc2VudGF0aW9uIiwKICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAidXJsIiwKICAgICAgICAidXJpIiwKICAgICAgICAicmZjMzk4NiIsCiAgICAgICAgInJmYzM5ODciCiAgICBdLAogICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICJob21lcGFnZSI6ICJodHRwOi8vZ2l0aHViLmNvbS90aGVwaHBsZWFndWUvdXJpLWludGVyZmFjZXMiLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSIgOiAiSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEiLAogICAgICAgICAgICAiZW1haWwiIDogIm55YW1zcHJvZEBnbWFpbC5jb20iLAogICAgICAgICAgICAiaG9tZXBhZ2UiIDogImh0dHBzOi8vbnlhbXNwcm9kLmNvbSIKICAgICAgICB9CiAgICBdLAogICAgImZ1bmRpbmciOiBbCiAgICAgICAgewogICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9ueWFtc3Byb2QiCiAgICAgICAgfQogICAgXSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiIDogIl43LjIgfHwgXjguMCIsCiAgICAgICAgImV4dC1qc29uIjogIioiCiAgICB9LAogICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICJmcmllbmRzb2ZwaHAvcGhwLWNzLWZpeGVyIjogIl4yLjE5IiwKICAgICAgICAicGhwc3Rhbi9waHBzdGFuIjogIl4wLjEyLjkwIiwKICAgICAgICAicGhwc3Rhbi9waHBzdGFuLXN0cmljdC1ydWxlcyI6ICJeMC4xMi45IiwKICAgICAgICAicGhwc3Rhbi9waHBzdGFuLXBocHVuaXQiOiAiXjAuMTIuMTkiLAogICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjguNS4xNSB8fCBeOS41IgogICAgfSwKICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICJMZWFndWVcXFVyaVxcIjogInNyYy8iCiAgICAgICAgfQogICAgfSwKICAgICJzY3JpcHRzIjogewogICAgICAgICJwaHB1bml0IjogInBocHVuaXQgLS1jb3ZlcmFnZS10ZXh0IiwKICAgICAgICAicGhwY3MiOiAicGhwLWNzLWZpeGVyIGZpeCAtLWRyeS1ydW4gLS1kaWZmIC12dnYgLS1hbGxvdy1yaXNreT15ZXMgLS1hbnNpIiwKICAgICAgICAicGhwY3M6Zml4IjogInBocC1jcy1maXhlciBmaXggLXZ2diAtLWFsbG93LXJpc2t5PXllcyAtLWFuc2kiLAogICAgICAgICJwaHBzdGFuIjogInBocHN0YW4gYW5hbHlzZSAtbCBtYXggLWMgcGhwc3Rhbi5uZW9uIHNyYyAtLWFuc2kgLS1tZW1vcnktbGltaXQgMTkyTSIsCiAgICAgICAgInRlc3QiOiBbCiAgICAgICAgICAgICJAcGhwdW5pdCIsCiAgICAgICAgICAgICJAcGhwc3RhbiIsCiAgICAgICAgICAgICJAcGhwY3M6Zml4IgogICAgICAgIF0KICAgIH0sCiAgICAic2NyaXB0cy1kZXNjcmlwdGlvbnMiOiB7CiAgICAgICAgInBocHVuaXQiOiAiUnVucyBwYWNrYWdlIHRlc3Qgc3VpdGUiLAogICAgICAgICJwaHBzdGFuIjogIlJ1bnMgY29tcGxldGUgY29kZWJhc2Ugc3RhdGljIGFuYWx5c2lzIiwKICAgICAgICAicGhwY3MiOiAiUnVucyBjb2Rpbmcgc3R5bGUgdGVzdGluZyIsCiAgICAgICAgInBocGNzOmZpeCI6ICJGaXggY29kaW5nIHN0eWxlIGlzc3VlcyIsCiAgICAgICAgInRlc3QiOiAiUnVucyBhbGwgdGVzdHMiCiAgICB9LAogICAgImV4dHJhIjogewogICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjIueC1kZXYiCiAgICAgICAgfQogICAgfSwKICAgICJzdWdnZXN0IjogewogICAgICAgICJleHQtaW50bCI6ICJ0byB1c2UgdGhlIElETkEgZmVhdHVyZSIsCiAgICAgICAgInN5bWZvbnkvaW50bCI6ICJ0byB1c2UgdGhlIElETkEgZmVhdHVyZSB2aWEgU3ltZm9ueSBQb2x5ZmlsbCIKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTYgaWduYWNlIG55YW1hZ2FuYSBidXRlcmEKClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4KdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwp1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZgp0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sCnN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUwpGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IKQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSCklOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCkNPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/AuthorityInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcQ29udHJhY3RzOwoKdXNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uc1xJZG5TdXBwb3J0TWlzc2luZzsKdXNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uc1xTeW50YXhFcnJvcjsKCmludGVyZmFjZSBBdXRob3JpdHlJbnRlcmZhY2UgZXh0ZW5kcyBVcmlDb21wb25lbnRJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBob3N0IGNvbXBvbmVudCBvZiB0aGUgYXV0aG9yaXR5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SG9zdCgpOiA/c3RyaW5nOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcG9ydCBjb21wb25lbnQgb2YgdGhlIGF1dGhvcml0eS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBvcnQoKTogP2ludDsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHVzZXIgaW5mb3JtYXRpb24gY29tcG9uZW50IG9mIHRoZSBhdXRob3JpdHkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVc2VySW5mbygpOiA/c3RyaW5nOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBob3N0LgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgc3BlY2lmaWVkIGhvc3QuCiAgICAgKgogICAgICogQSBudWxsIHZhbHVlIHByb3ZpZGVkIGZvciB0aGUgaG9zdCBpcyBlcXVpdmFsZW50IHRvIHJlbW92aW5nIHRoZSBob3N0CiAgICAgKiBpbmZvcm1hdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gID9zdHJpbmcgICAgICAgICAgICRob3N0CiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yICAgICAgIGZvciBpbnZhbGlkIGNvbXBvbmVudCBvciB0cmFuc2Zvcm1hdGlvbnMKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhIG9iamVjdCBpbiBpbnZhbGlkIHN0YXRlLgogICAgICogQHRocm93cyBJZG5TdXBwb3J0TWlzc2luZyBmb3IgY29tcG9uZW50IG9yIHRyYW5zZm9ybWF0aW9ucwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmluZyBJRE4gc3VwcG9ydCB3aGVuIElETiBzdXBwb3J0IGlzIG5vdCBwcmVzZW50CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgbWlzY29uZmlndXJlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhIb3N0KD9zdHJpbmcgJGhvc3QpOiBzZWxmOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBwb3J0LgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgc3BlY2lmaWVkIHBvcnQuCiAgICAgKgogICAgICogQSBudWxsIHZhbHVlIHByb3ZpZGVkIGZvciB0aGUgcG9ydCBpcyBlcXVpdmFsZW50IHRvIHJlbW92aW5nIHRoZSBwb3J0CiAgICAgKiBpbmZvcm1hdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gP2ludCAkcG9ydAogICAgICoKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgZm9yIGludmFsaWQgY29tcG9uZW50IG9yIHRyYW5zZm9ybWF0aW9ucwogICAgICogICAgICAgICAgICAgICAgICAgICB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhIG9iamVjdCBpbiBpbnZhbGlkIHN0YXRlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFBvcnQoP2ludCAkcG9ydCk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHVzZXIgaW5mb3JtYXRpb24uCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgdXNlciBpbmZvcm1hdGlvbi4KICAgICAqCiAgICAgKiBQYXNzd29yZCBpcyBvcHRpb25hbCwgYnV0IHRoZSB1c2VyIGluZm9ybWF0aW9uIE1VU1QgaW5jbHVkZSB0aGUKICAgICAqIHVzZXI7IGEgbnVsbCB2YWx1ZSBmb3IgdGhlIHVzZXIgaXMgZXF1aXZhbGVudCB0byByZW1vdmluZyB1c2VyCiAgICAgKiBpbmZvcm1hdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gP3N0cmluZyAkdXNlcgogICAgICogQHBhcmFtID9zdHJpbmcgJHBhc3N3b3JkCiAgICAgKgogICAgICogQHRocm93cyBTeW50YXhFcnJvciBmb3IgaW52YWxpZCBjb21wb25lbnQgb3IgdHJhbnNmb3JtYXRpb25zCiAgICAgKiAgICAgICAgICAgICAgICAgICAgIHRoYXQgd291bGQgcmVzdWx0IGluIGEgb2JqZWN0IGluIGludmFsaWQgc3RhdGUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoVXNlckluZm8oP3N0cmluZyAkdXNlciwgP3N0cmluZyAkcGFzc3dvcmQgPSBudWxsKTogc2VsZjsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/DataPathInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcQ29udHJhY3RzOwoKaW50ZXJmYWNlIERhdGFQYXRoSW50ZXJmYWNlIGV4dGVuZHMgUGF0aEludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBkYXRhIG1pbWUgdHlwZSBhc3NvY2lhdGVkIHRvIHRoZSBVUkkuCiAgICAgKgogICAgICogSWYgbm8gbWltZXR5cGUgaXMgcHJlc2VudCwgdGhpcyBtZXRob2QgTVVTVCByZXR1cm4gdGhlIGRlZmF1bHQgbWltZXR5cGUgJ3RleHQvcGxhaW4nLgogICAgICoKICAgICAqIEBzZWUgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjM5NyNzZWN0aW9uLTIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1pbWVUeXBlKCk6IHN0cmluZzsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBwYXJhbWV0ZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGUgTWltZSBUeXBlIG9mIHRoZSBVUkkuCiAgICAgKgogICAgICogSWYgbm8gcGFyYW1ldGVycyBpcyBwcmVzZW50LCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybiB0aGUgZGVmYXVsdCBwYXJhbWV0ZXIgJ2NoYXJzZXQ9VVMtQVNDSUknLgogICAgICoKICAgICAqIEBzZWUgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjM5NyNzZWN0aW9uLTIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBhcmFtZXRlcnMoKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIG1lZGlhdHlwZSBhc3NvY2lhdGVkIHdpdGggdGhlIFVSSS4KICAgICAqCiAgICAgKiBJZiBubyBtZWRpYXR5cGUgaXMgcHJlc2VudCwgdGhpcyBtZXRob2QgTVVTVCByZXR1cm4gdGhlIGRlZmF1bHQgcGFyYW1ldGVyICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUknLgogICAgICoKICAgICAqIEBzZWUgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjM5NyNzZWN0aW9uLTMKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgVVJJIHNjaGVtZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1lZGlhVHlwZSgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZXMgdGhlIGRhdGEgc3RyaW5nLgogICAgICoKICAgICAqIFJldHJpZXZlcyB0aGUgZGF0YSBwYXJ0IG9mIHRoZSBwYXRoLiBJZiBubyBkYXRhIHBhcnQgaXMgcHJvdmlkZWQgcmV0dXJuCiAgICAgKiBhIGVtcHR5IHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGF0YSgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBUZWxscyB3aGV0aGVyIHRoZSBkYXRhIGlzIGJpbmFyeSBzYWZlIGVuY29kZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0JpbmFyeURhdGEoKTogYm9vbDsKCiAgICAvKioKICAgICAqIFNhdmUgdGhlIGRhdGEgdG8gYSBzcGVjaWZpYyBmaWxlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2F2ZShzdHJpbmcgJHBhdGgsIHN0cmluZyAkbW9kZSA9ICd3Jyk6IFxTcGxGaWxlT2JqZWN0OwoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBpbnN0YW5jZSB3aGVyZSB0aGUgZGF0YSBwYXJ0IGlzIGJhc2U2NCBlbmNvZGVkLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2Ugd2hlcmUgdGhlIGRhdGEgcGFydCBpcyBiYXNlNjQgZW5jb2RlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9CaW5hcnkoKTogc2VsZjsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugd2hlcmUgdGhlIGRhdGEgcGFydCBpcyB1cmwgZW5jb2RlZCBmb2xsb3dpbmcgUkZDMzk4NiBydWxlcy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHdoZXJlIHRoZSBkYXRhIHBhcnQgaXMgdXJsIGVuY29kZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQXNjaWkoKTogc2VsZjsKCiAgICAvKioKICAgICAqIFJldHVybiBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgbWVkaWF0eXBlIHBhcmFtZXRlcnMuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgbWVkaWF0eXBlIHBhcmFtZXRlcnMuCiAgICAgKgogICAgICogVXNlcnMgbXVzdCBwcm92aWRlIGVuY29kZWQgY2hhcmFjdGVycy4KICAgICAqCiAgICAgKiBBbiBlbXB0eSBwYXJhbWV0ZXJzIHZhbHVlIGlzIGVxdWl2YWxlbnQgdG8gcmVtb3ZpbmcgdGhlIHBhcmFtZXRlci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhQYXJhbWV0ZXJzKHN0cmluZyAkcGFyYW1ldGVycyk6IHNlbGY7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/DomainHostInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcQ29udHJhY3RzOwoKdXNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uc1xTeW50YXhFcnJvcjsKCi8qKgogKiBAZXh0ZW5kcyBcSXRlcmF0b3JBZ2dyZWdhdGU8c3RyaW5nPgogKi8KaW50ZXJmYWNlIERvbWFpbkhvc3RJbnRlcmZhY2UgZXh0ZW5kcyBcQ291bnRhYmxlLCBIb3N0SW50ZXJmYWNlLCBcSXRlcmF0b3JBZ2dyZWdhdGUKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBsYWJlbHMgdG90YWwgbnVtYmVyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKTogaW50OwoKICAgIC8qKgogICAgICogSXRlcmF0ZSBvdmVyIHRoZSBEb21haW4gbGFiZWxzLgogICAgICoKICAgICAqIEByZXR1cm4gXEl0ZXJhdG9yPHN0cmluZz4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEl0ZXJhdG9yKCk6IFxJdGVyYXRvcjsKCiAgICAvKioKICAgICAqIFJldHJpZXZlcyBhIHNpbmdsZSBob3N0IGxhYmVsLgogICAgICoKICAgICAqIElmIHRoZSBsYWJlbCBvZmZzZXQgaGFzIG5vdCBiZWVuIHNldCwgcmV0dXJucyB0aGUgbnVsbCB2YWx1ZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldChpbnQgJG9mZnNldCk6ID9zdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBhc3NvY2lhdGVkIGtleSBmb3IgYSBzcGVjaWZpYyBsYWJlbCBvciBhbGwgdGhlIGtleXMuCiAgICAgKgogICAgICogQHBhcmFtID9zdHJpbmcgJGxhYmVsCiAgICAgKgogICAgICogQHJldHVybiBpbnRbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5cyg/c3RyaW5nICRsYWJlbCA9IG51bGwpOiBhcnJheTsKCiAgICAvKioKICAgICAqIFRlbGxzIHdoZXRoZXIgdGhlIGRvbWFpbiBpcyBhYnNvbHV0ZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzQWJzb2x1dGUoKTogYm9vbDsKCiAgICAvKioKICAgICAqIFByZXBlbmRzIGEgbGFiZWwgdG8gdGhlIGhvc3QuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcmVwZW5kKHN0cmluZyAkbGFiZWwpOiBzZWxmOwoKICAgIC8qKgogICAgICogQXBwZW5kcyBhIGxhYmVsIHRvIHRoZSBob3N0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXBwZW5kKHN0cmluZyAkbGFiZWwpOiBzZWxmOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBpbnN0YW5jZSB3aXRoIGl0cyBSb290IGxhYmVsLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjIuMgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFJvb3RMYWJlbCgpOiBzZWxmOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBpbnN0YW5jZSB3aXRob3V0IGl0cyBSb290IGxhYmVsLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjIuMgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aG91dFJvb3RMYWJlbCgpOiBzZWxmOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBpbnN0YW5jZSB3aXRoIHRoZSBtb2RpZmllZCBsYWJlbC4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIG5ldyBsYWJlbAogICAgICoKICAgICAqIElmICRrZXkgaXMgbm9uLW5lZ2F0aXZlLCB0aGUgYWRkZWQgbGFiZWwgd2lsbCBiZSB0aGUgbGFiZWwgYXQgJGtleSBwb3NpdGlvbiBmcm9tIHRoZSBzdGFydC4KICAgICAqIElmICRrZXkgaXMgbmVnYXRpdmUsIHRoZSBhZGRlZCBsYWJlbCB3aWxsIGJlIHRoZSBsYWJlbCBhdCAka2V5IHBvc2l0aW9uIGZyb20gdGhlIGVuZC4KICAgICAqCiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yIElmIHRoZSBrZXkgaXMgaW52YWxpZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aExhYmVsKGludCAka2V5LCBzdHJpbmcgJGxhYmVsKTogc2VsZjsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugd2l0aG91dCB0aGUgc3BlY2lmaWVkIGxhYmVsLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgbW9kaWZpZWQgY29tcG9uZW50CiAgICAgKgogICAgICogSWYgJGtleSBpcyBub24tbmVnYXRpdmUsIHRoZSByZW1vdmVkIGxhYmVsIHdpbGwgYmUgdGhlIGxhYmVsIGF0ICRrZXkgcG9zaXRpb24gZnJvbSB0aGUgc3RhcnQuCiAgICAgKiBJZiAka2V5IGlzIG5lZ2F0aXZlLCB0aGUgcmVtb3ZlZCBsYWJlbCB3aWxsIGJlIHRoZSBsYWJlbCBhdCAka2V5IHBvc2l0aW9uIGZyb20gdGhlIGVuZC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50IC4uLiRrZXlzCiAgICAgKgogICAgICogQHRocm93cyBTeW50YXhFcnJvciBJZiB0aGUga2V5IGlzIGludmFsaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhvdXRMYWJlbChpbnQgLi4uJGtleXMpOiBzZWxmOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/FragmentInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcQ29udHJhY3RzOwoKaW50ZXJmYWNlIEZyYWdtZW50SW50ZXJmYWNlIGV4dGVuZHMgVXJpQ29tcG9uZW50SW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgZGVjb2RlZCBmcmFnbWVudC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlY29kZWQoKTogP3N0cmluZzsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/HostInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcQ29udHJhY3RzOwoKaW50ZXJmYWNlIEhvc3RJbnRlcmZhY2UgZXh0ZW5kcyBVcmlDb21wb25lbnRJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBhc2NpaSByZXByZXNlbnRhdGlvbi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQXNjaWkoKTogP3N0cmluZzsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHVuaWNvZGUgcmVwcmVzZW50YXRpb24uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b1VuaWNvZGUoKTogP3N0cmluZzsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIElQIHZlcnNpb24uCiAgICAgKgogICAgICogSWYgdGhlIGhvc3QgaXMgYSBub3QgYW4gSVAgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gbnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SXBWZXJzaW9uKCk6ID9zdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBJUCBjb21wb25lbnQgSWYgdGhlIEhvc3QgaXMgYW4gSVAgYWRkcmVzcy4KICAgICAqCiAgICAgKiBJZiB0aGUgaG9zdCBpcyBhIG5vdCBhbiBJUCB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiBudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJcCgpOiA/c3RyaW5nOwoKICAgIC8qKgogICAgICogVGVsbHMgd2hldGhlciB0aGUgaG9zdCBpcyBhIGRvbWFpbiBuYW1lLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNEb21haW4oKTogYm9vbDsKCiAgICAvKioKICAgICAqIFRlbGxzIHdoZXRoZXIgdGhlIGhvc3QgaXMgYW4gSVAgQWRkcmVzcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzSXAoKTogYm9vbDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/IpHostInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcQ29udHJhY3RzOwoKaW50ZXJmYWNlIElwSG9zdEludGVyZmFjZSBleHRlbmRzIEhvc3RJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBob3N0IGlzIGFuIElQdjQgYWRkcmVzcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzSXB2NCgpOiBib29sOwogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBob3N0IGlzIGFuIElQdjYgYWRkcmVzcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzSXB2NigpOiBib29sOwoKICAgIC8qKgogICAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgaG9zdCBpcyBhbiBJUHY2IGFkZHJlc3MuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0lwRnV0dXJlKCk6IGJvb2w7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBob3N0IGhhcyBhIFpvbmVJZGVudGlmaWVyLgogICAgICoKICAgICAqIEBzZWUgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjg3NCNzZWN0aW9uLTQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhc1pvbmVJZGVudGlmaWVyKCk6IGJvb2w7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGhvc3Qgd2l0aG91dCBpdHMgem9uZSBpZGVudGlmaWVyIGFjY29yZGluZyB0byBSRkM2ODc0LgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2Ugd2l0aG91dCB0aGUgaG9zdCB6b25lIGlkZW50aWZpZXIgYWNjb3JkaW5nIHRvIFJGQzY4NzQKICAgICAqCiAgICAgKiBAc2VlIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY4NzQjc2VjdGlvbi00CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRob3V0Wm9uZUlkZW50aWZpZXIoKTogc2VsZjsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/PathInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcQ29udHJhY3RzOwoKdXNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uc1xTeW50YXhFcnJvcjsKCmludGVyZmFjZSBQYXRoSW50ZXJmYWNlIGV4dGVuZHMgVXJpQ29tcG9uZW50SW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgZGVjb2RlZCBwYXRoLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVjb2RlZCgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBwYXRoIGlzIGFic29sdXRlIG9yIHJlbGF0aXZlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNBYnNvbHV0ZSgpOiBib29sOwoKICAgIC8qKgogICAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgcGF0aCBoYXMgYSB0cmFpbGluZyBkZWxpbWl0ZXIuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNUcmFpbGluZ1NsYXNoKCk6IGJvb2w7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIHdpdGhvdXQgZG90IHNlZ21lbnRzLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgcGF0aCBjb21wb25lbnQgbm9ybWFsaXplZCBieSByZW1vdmluZwogICAgICogdGhlIGRvdCBzZWdtZW50LgogICAgICoKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgZm9yIGludmFsaWQgY29tcG9uZW50IG9yIHRyYW5zZm9ybWF0aW9ucwogICAgICogICAgICAgICAgICAgICAgICAgICB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhIG9iamVjdCBpbiBpbnZhbGlkIHN0YXRlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aG91dERvdFNlZ21lbnRzKCk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIHdpdGggYSBsZWFkaW5nIHNsYXNoLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgcGF0aCBjb21wb25lbnQgd2l0aCBhIGxlYWRpbmcgc2xhc2gKICAgICAqCiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yIGZvciBpbnZhbGlkIGNvbXBvbmVudCBvciB0cmFuc2Zvcm1hdGlvbnMKICAgICAqICAgICAgICAgICAgICAgICAgICAgdGhhdCB3b3VsZCByZXN1bHQgaW4gYSBvYmplY3QgaW4gaW52YWxpZCBzdGF0ZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhMZWFkaW5nU2xhc2goKTogc2VsZjsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugd2l0aG91dCBhIGxlYWRpbmcgc2xhc2guCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBwYXRoIGNvbXBvbmVudCB3aXRob3V0IGEgbGVhZGluZyBzbGFzaAogICAgICoKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgZm9yIGludmFsaWQgY29tcG9uZW50IG9yIHRyYW5zZm9ybWF0aW9ucwogICAgICogICAgICAgICAgICAgICAgICAgICB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhIG9iamVjdCBpbiBpbnZhbGlkIHN0YXRlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aG91dExlYWRpbmdTbGFzaCgpOiBzZWxmOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBpbnN0YW5jZSB3aXRoIGEgdHJhaWxpbmcgc2xhc2guCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBwYXRoIGNvbXBvbmVudCB3aXRoIGEgdHJhaWxpbmcgc2xhc2gKICAgICAqCiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yIGZvciBpbnZhbGlkIGNvbXBvbmVudCBvciB0cmFuc2Zvcm1hdGlvbnMKICAgICAqICAgICAgICAgICAgICAgICAgICAgdGhhdCB3b3VsZCByZXN1bHQgaW4gYSBvYmplY3QgaW4gaW52YWxpZCBzdGF0ZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhUcmFpbGluZ1NsYXNoKCk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIHdpdGhvdXQgYSB0cmFpbGluZyBzbGFzaC4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIHBhdGggY29tcG9uZW50IHdpdGhvdXQgYSB0cmFpbGluZyBzbGFzaAogICAgICoKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgZm9yIGludmFsaWQgY29tcG9uZW50IG9yIHRyYW5zZm9ybWF0aW9ucwogICAgICogICAgICAgICAgICAgICAgICAgICB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhIG9iamVjdCBpbiBpbnZhbGlkIHN0YXRlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aG91dFRyYWlsaW5nU2xhc2goKTogc2VsZjsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/PortInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcQ29udHJhY3RzOwoKaW50ZXJmYWNlIFBvcnRJbnRlcmZhY2UgZXh0ZW5kcyBVcmlDb21wb25lbnRJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBQb3J0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9JbnQoKTogP2ludDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/QueryInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcQ29udHJhY3RzOwoKLyoqCiAqIEBleHRlbmRzIFxJdGVyYXRvckFnZ3JlZ2F0ZTxhcnJheXswOnN0cmluZywgMTpzdHJpbmd8bnVsbH0+CiAqLwppbnRlcmZhY2UgUXVlcnlJbnRlcmZhY2UgZXh0ZW5kcyBcQ291bnRhYmxlLCBcSXRlcmF0b3JBZ2dyZWdhdGUsIFVyaUNvbXBvbmVudEludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHF1ZXJ5IHNlcGFyYXRvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNlcGFyYXRvcigpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Yga2V5L3ZhbHVlIHBhaXJzIHByZXNlbnQgaW4gdGhlIG9iamVjdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvdW50KCk6IGludDsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gaXRlcmF0b3IgYWxsb3dpbmcgdG8gZ28gdGhyb3VnaCBhbGwga2V5L3ZhbHVlIHBhaXJzIGNvbnRhaW5lZCBpbiB0aGlzIG9iamVjdC4KICAgICAqCiAgICAgKiBUaGUgcGFpciBpcyByZXByZXNlbnRlZCBhcyBhbiBhcnJheSB3aGVyZSB0aGUgZmlyc3QgdmFsdWUgaXMgdGhlIHBhaXIga2V5CiAgICAgKiBhbmQgdGhlIHNlY29uZCB2YWx1ZSB0aGUgcGFpciB2YWx1ZS4KICAgICAqCiAgICAgKiBUaGUga2V5IG9mIGVhY2ggcGFpciBpcyBhIHN0cmluZwogICAgICogVGhlIHZhbHVlIG9mIGVhY2ggcGFpciBpcyBhIHNjYWxhciBvciB0aGUgbnVsbCB2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gXEl0ZXJhdG9yPGludCwgYXJyYXl7MDpzdHJpbmcsIDE6c3RyaW5nfG51bGx9PgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SXRlcmF0b3IoKTogXEl0ZXJhdG9yOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBpdGVyYXRvciBhbGxvd2luZyB0byBnbyB0aHJvdWdoIGFsbCBrZXkvdmFsdWUgcGFpcnMgY29udGFpbmVkIGluIHRoaXMgb2JqZWN0LgogICAgICoKICAgICAqIFRoZSByZXR1cm4gdHlwZSBpcyBhcyBhIEl0ZXJhdG9yIHdoZXJlIGl0cyBvZmZzZXQgaXMgdGhlIHBhaXIga2V5IGFuZCBpdHMgdmFsdWUgdGhlIHBhaXIgdmFsdWUuCiAgICAgKgogICAgICogVGhlIGtleSBvZiBlYWNoIHBhaXIgaXMgYSBzdHJpbmcKICAgICAqIFRoZSB2YWx1ZSBvZiBlYWNoIHBhaXIgaXMgYSBzY2FsYXIgb3IgdGhlIG51bGwgdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGl0ZXJhYmxlPHN0cmluZywgc3RyaW5nfG51bGw+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwYWlycygpOiBpdGVyYWJsZTsKCiAgICAvKioKICAgICAqIFRlbGxzIHdoZXRoZXIgYSBwYWlyIHdpdGggYSBzcGVjaWZpYyBuYW1lIGV4aXN0cy4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1oYXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhcyhzdHJpbmcgJGtleSk6IGJvb2w7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBmaXJzdCB2YWx1ZSBhc3NvY2lhdGVkIHRvIHRoZSBnaXZlbiBwYWlyIG5hbWUuCiAgICAgKgogICAgICogSWYgbm8gdmFsdWUgaXMgZm91bmQgbnVsbCBpcyByZXR1cm5lZAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsc2VhcmNocGFyYW1zLWdldAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0KHN0cmluZyAka2V5KTogP3N0cmluZzsKCiAgICAvKioKICAgICAqIFJldHVybnMgYWxsIHRoZSB2YWx1ZXMgYXNzb2NpYXRlZCB0byB0aGUgZ2l2ZW4gcGFpciBuYW1lIGFzIGFuIGFycmF5IG9yIGFsbAogICAgICogdGhlIGluc3RhbmNlIHBhaXJzLgogICAgICoKICAgICAqIElmIG5vIHZhbHVlIGlzIGZvdW5kIGFuIGVtcHR5IGFycmF5IGlzIHJldHVybmVkCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmxzZWFyY2hwYXJhbXMtZ2V0YWxsCiAgICAgKgogICAgICogQHJldHVybiBhcnJheTxpbnQsIHN0cmluZ3xudWxsPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QWxsKHN0cmluZyAka2V5KTogYXJyYXk7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzdG9yZSBQSFAgdmFyaWFibGVzIGFzIGVsZW1lbnRzIG9mIGFuIGFycmF5LgogICAgICoKICAgICAqIFRoZSByZXN1bHQgaXMgc2ltaWxhciBhcyBQSFAgcGFyc2Vfc3RyIHdoZW4gdXNlZCB3aXRoIGl0cwogICAgICogc2Vjb25kIGFyZ3VtZW50IHdpdGggdGhlIGRpZmZlcmVuY2UgdGhhdCB2YXJpYWJsZSBuYW1lcyBhcmUKICAgICAqIG5vdCBtYW5nbGVkLgogICAgICoKICAgICAqIElmIGEga2V5IGlzIHN1Ym1pdHRlZCBpdCB3aWxsIHJldHVybnMgdGhlIHZhbHVlIGF0dGFjaGVkIHRvIGl0IG9yIG51bGwKICAgICAqCiAgICAgKiBAc2VlIGh0dHA6Ly9waHAubmV0L3BhcnNlX3N0cgogICAgICogQHNlZSBodHRwczovL3dpa2kucGhwLm5ldC9yZmMvb25fZGVtYW5kX25hbWVfbWFuZ2xpbmcKICAgICAqCiAgICAgKiBAcGFyYW0gID9zdHJpbmcgJGtleQogICAgICogQHJldHVybiBtaXhlZCAgIHRoZSBjb2xsZWN0aW9uIG9mIHN0b3JlZCBQSFAgdmFyaWFibGVzIG9yIHRoZSBlbXB0eSBhcnJheSBpZiBubyBpbnB1dCBpcyBnaXZlbiwKICAgICAqICAgICAgICAgICAgICAgICAgICAgdGhlIHNpbmdsZSB2YWx1ZSBvZiBhIHN0b3JlZCBQSFAgdmFyaWFibGUgb3IgbnVsbCBpZiB0aGUgdmFyaWFibGUgaXMgbm90IHByZXNlbnQgaW4gdGhlIGNvbGxlY3Rpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBhcmFtcyg/c3RyaW5nICRrZXkgPSBudWxsKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIFJGQzE3MzggZW5jb2RlZCBxdWVyeS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvUkZDMTczOCgpOiA/c3RyaW5nOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgUkZDMzk4NiBlbmNvZGVkIHF1ZXJ5LgogICAgICoKICAgICAqIEBzZWUgOjpnZXRDb250ZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b1JGQzM5ODYoKTogP3N0cmluZzsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugd2l0aCBhIGRpZmZlcmVudCBzZXBhcmF0b3IuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBxdWVyeSBjb21wb25lbnQgd2l0aCBhIGRpZmZlcmVudCBzZXBhcmF0b3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhTZXBhcmF0b3Ioc3RyaW5nICRzZXBhcmF0b3IpOiBzZWxmOwoKICAgIC8qKgogICAgICogU29ydHMgdGhlIHF1ZXJ5IHN0cmluZyBieSBvZmZzZXQsIG1haW50YWluaW5nIG9mZnNldCB0byBkYXRhIGNvcnJlbGF0aW9ucy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIG1vZGlmaWVkIHF1ZXJ5CiAgICAgKgogICAgICogQHNlZSBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmxzZWFyY2hwYXJhbXMtc29ydAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc29ydCgpOiBzZWxmOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBpbnN0YW5jZSB3aXRob3V0IGR1cGxpY2F0ZSBrZXkvdmFsdWUgcGFpci4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIHF1ZXJ5IGNvbXBvbmVudCBub3JtYWxpemVkIGJ5IHJlbW92aW5nCiAgICAgKiBkdXBsaWNhdGUgcGFpcnMgd2hvc2Uga2V5L3ZhbHVlIGFyZSB0aGUgc2FtZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhvdXREdXBsaWNhdGVzKCk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIHdpdGhvdXQgZW1wdHkga2V5L3ZhbHVlIHdoZXJlIHRoZSB2YWx1ZSBpcyB0aGUgbnVsbCB2YWx1ZS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIHF1ZXJ5IGNvbXBvbmVudCBub3JtYWxpemVkIGJ5IHJlbW92aW5nCiAgICAgKiBlbXB0eSBwYWlycy4KICAgICAqCiAgICAgKiBBIHBhaXIgaXMgY29uc2lkZXJlZCBlbXB0eSBpZiBpdHMgdmFsdWUgaXMgZXF1YWwgdG8gdGhlIG51bGwgdmFsdWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhvdXRFbXB0eVBhaXJzKCk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIHdoZXJlIG51bWVyaWMgaW5kaWNlcyBhc3NvY2lhdGVkIHRvIFBIUCdzIGFycmF5IGxpa2Uga2V5IGFyZSByZW1vdmVkLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgcXVlcnkgY29tcG9uZW50IG5vcm1hbGl6ZWQgc28gdGhhdCBudW1lcmljIGluZGV4ZXMKICAgICAqIGFyZSByZW1vdmVkIGZyb20gdGhlIHBhaXIga2V5IHZhbHVlLgogICAgICoKICAgICAqIGllLjogdG90b1szXT1iYXJbM10mZm9vPWJhciBiZWNvbWVzIHRvdG9bXT1iYXJbM10mZm9vPWJhcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aG91dE51bWVyaWNJbmRpY2VzKCk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIHdpdGggdGhlIGEgbmV3IGtleS92YWx1ZSBwYWlyIGFkZGVkIHRvIGl0LgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgbW9kaWZpZWQgcXVlcnkKICAgICAqCiAgICAgKiBJZiB0aGUgcGFpciBhbHJlYWR5IGV4aXN0cyB0aGUgdmFsdWUgd2lsbCByZXBsYWNlIHRoZSBleGlzdGluZyB2YWx1ZS4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1zZXQKICAgICAqCiAgICAgKiBAcGFyYW0gP3N0cmluZyAkdmFsdWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhQYWlyKHN0cmluZyAka2V5LCA/c3RyaW5nICR2YWx1ZSk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIHdpdGggdGhlIG5ldyBwYWlycyBzZXQgdG8gaXQuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBtb2RpZmllZCBxdWVyeQogICAgICoKICAgICAqIEBzZWUgOjp3aXRoUGFpcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbWVyZ2Uoc3RyaW5nICRxdWVyeSk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIHdpdGhvdXQgdGhlIHNwZWNpZmllZCBrZXlzLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgbW9kaWZpZWQgY29tcG9uZW50CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAuLi4ka2V5cwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aG91dFBhaXIoc3RyaW5nIC4uLiRrZXlzKTogc2VsZjsKCiAgICAvKioKICAgICAqIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugd2l0aCBhIHNwZWNpZmllZCBrZXkvdmFsdWUgcGFpciBhcHBlbmRlZCBhcyBhIG5ldyBwYWlyLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgbW9kaWZpZWQgcXVlcnkKICAgICAqCiAgICAgKiBAcGFyYW0gP3N0cmluZyAkdmFsdWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFwcGVuZFRvKHN0cmluZyAka2V5LCA/c3RyaW5nICR2YWx1ZSk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIHdpdGggdGhlIG5ldyBwYWlycyBhcHBlbmRlZCB0byBpdC4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIG1vZGlmaWVkIHF1ZXJ5CiAgICAgKgogICAgICogSWYgdGhlIHBhaXIgYWxyZWFkeSBleGlzdHMgdGhlIHZhbHVlIHdpbGwgYmUgYWRkZWQgdG8gaXQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhcHBlbmQoc3RyaW5nICRxdWVyeSk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIHdpdGhvdXQgdGhlIHNwZWNpZmllZCBwYXJhbXMuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBtb2RpZmllZCBjb21wb25lbnQgd2l0aG91dCBQSFAncyB2YWx1ZS4KICAgICAqIFBIUCdzIG1hbmdsZWQgaXMgbm90IHRha2VuIGludG8gYWNjb3VudC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIC4uLiRrZXlzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRob3V0UGFyYW0oc3RyaW5nIC4uLiRrZXlzKTogc2VsZjsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/SegmentedPathInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcQ29udHJhY3RzOwoKdXNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uc1xTeW50YXhFcnJvcjsKCi8qKgogKiBAZXh0ZW5kcyBcSXRlcmF0b3JBZ2dyZWdhdGU8c3RyaW5nPgogKi8KaW50ZXJmYWNlIFNlZ21lbnRlZFBhdGhJbnRlcmZhY2UgZXh0ZW5kcyBcQ291bnRhYmxlLCBcSXRlcmF0b3JBZ2dyZWdhdGUsIFBhdGhJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2VnbWVudHMgaW4gdGhlIHBhdGguCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb3VudCgpOiBpbnQ7CgogICAgLyoqCiAgICAgKiBJdGVyYXRlIG92ZXIgdGhlIHBhdGggc2VnbWVudC4KICAgICAqCiAgICAgKiBAcmV0dXJuIFxJdGVyYXRvcjxzdHJpbmc+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJdGVyYXRvcigpOiBcSXRlcmF0b3I7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHBhcmVudCBkaXJlY3RvcnkncyBwYXRoLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGlybmFtZSgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBwYXRoIGJhc2VuYW1lLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QmFzZW5hbWUoKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgYmFzZW5hbWUgZXh0ZW5zaW9uLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uKCk6IHN0cmluZzsKCiAgICAvKioKICAgICAqIFJldHJpZXZlcyBhIHNpbmdsZSBwYXRoIHNlZ21lbnQuCiAgICAgKgogICAgICogSWYgdGhlIHNlZ21lbnQgb2Zmc2V0IGhhcyBub3QgYmVlbiBzZXQsIHJldHVybnMgbnVsbC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldChpbnQgJG9mZnNldCk6ID9zdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBhc3NvY2lhdGVkIGtleSBmb3IgYSBzcGVjaWZpYyBzZWdtZW50LgogICAgICoKICAgICAqIElmIGEgdmFsdWUgaXMgc3BlY2lmaWVkIG9ubHkgdGhlIGtleXMgYXNzb2NpYXRlZCB3aXRoCiAgICAgKiB0aGUgZ2l2ZW4gdmFsdWUgd2lsbCBiZSByZXR1cm5lZAogICAgICoKICAgICAqIEBwYXJhbSA/c3RyaW5nICRzZWdtZW50CiAgICAgKgogICAgICogQHJldHVybiBpbnRbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5cyg/c3RyaW5nICRzZWdtZW50ID0gbnVsbCk6IGFycmF5OwoKICAgIC8qKgogICAgICogQXBwZW5kcyBhIHNlZ21lbnQgdG8gdGhlIHBhdGguCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhcHBlbmQoc3RyaW5nICRzZWdtZW50KTogc2VsZjsKCiAgICAvKioKICAgICAqIFByZXBlbmRzIGEgc2VnbWVudCB0byB0aGUgcGF0aC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByZXBlbmQoc3RyaW5nICRzZWdtZW50KTogc2VsZjsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugd2l0aCB0aGUgbW9kaWZpZWQgc2VnbWVudC4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIG5ldyBzZWdtZW50CiAgICAgKgogICAgICogSWYgJGtleSBpcyBub24tbmVnYXRpdmUsIHRoZSBhZGRlZCBzZWdtZW50IHdpbGwgYmUgdGhlIHNlZ21lbnQgYXQgJGtleSBwb3NpdGlvbiBmcm9tIHRoZSBzdGFydC4KICAgICAqIElmICRrZXkgaXMgbmVnYXRpdmUsIHRoZSBhZGRlZCBzZWdtZW50IHdpbGwgYmUgdGhlIHNlZ21lbnQgYXQgJGtleSBwb3NpdGlvbiBmcm9tIHRoZSBlbmQuCiAgICAgKgogICAgICogQHBhcmFtID9zdHJpbmcgJHNlZ21lbnQKICAgICAqCiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yIElmIHRoZSBrZXkgaXMgaW52YWxpZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFNlZ21lbnQoaW50ICRrZXksID9zdHJpbmcgJHNlZ21lbnQpOiBzZWxmOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBpbnN0YW5jZSB3aXRob3V0IHRoZSBzcGVjaWZpZWQgc2VnbWVudC4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIG1vZGlmaWVkIGNvbXBvbmVudAogICAgICoKICAgICAqIElmICRrZXkgaXMgbm9uLW5lZ2F0aXZlLCB0aGUgcmVtb3ZlZCBzZWdtZW50IHdpbGwgYmUgdGhlIHNlZ21lbnQgYXQgJGtleSBwb3NpdGlvbiBmcm9tIHRoZSBzdGFydC4KICAgICAqIElmICRrZXkgaXMgbmVnYXRpdmUsIHRoZSByZW1vdmVkIHNlZ21lbnQgd2lsbCBiZSB0aGUgc2VnbWVudCBhdCAka2V5IHBvc2l0aW9uIGZyb20gdGhlIGVuZC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50IC4uLiRrZXlzIHJlbWFpbmluZyBrZXlzIHRvIHJlbW92ZQogICAgICoKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgSWYgdGhlIGtleSBpcyBpbnZhbGlkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRob3V0U2VnbWVudChpbnQgLi4uJGtleXMpOiBzZWxmOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBpbnN0YW5jZSB3aXRob3V0IGR1cGxpY2F0ZSBkZWxpbWl0ZXJzLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgcGF0aCBjb21wb25lbnQgbm9ybWFsaXplZCBieSByZW1vdmluZwogICAgICogbXVsdGlwbGUgY29uc2VjdXRpdmUgZW1wdHkgc2VnbWVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aG91dEVtcHR5U2VnbWVudHMoKTogc2VsZjsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHBhcmVudCBkaXJlY3RvcnkncyBwYXRoLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgZXh0ZW5zaW9uIGJhc2VuYW1lIG1vZGlmaWVkLgogICAgICoKICAgICAqIEBwYXJhbSA/c3RyaW5nICRwYXRoCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoRGlybmFtZSg/c3RyaW5nICRwYXRoKTogc2VsZjsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGJhc2VuYW1lLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgZXh0ZW5zaW9uIGJhc2VuYW1lIG1vZGlmaWVkLgogICAgICoKICAgICAqIEBwYXJhbSA/c3RyaW5nICRiYXNlbmFtZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEJhc2VuYW1lKD9zdHJpbmcgJGJhc2VuYW1lKTogc2VsZjsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGJhc2VuYW1lIGV4dGVuc2lvbi4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIGV4dGVuc2lvbiBiYXNlbmFtZSBtb2RpZmllZC4KICAgICAqCiAgICAgKiBAcGFyYW0gP3N0cmluZyAkZXh0ZW5zaW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoRXh0ZW5zaW9uKD9zdHJpbmcgJGV4dGVuc2lvbik6IHNlbGY7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/UriComponentInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcQ29udHJhY3RzOwoKdXNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uc1xJZG5TdXBwb3J0TWlzc2luZzsKdXNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uc1xTeW50YXhFcnJvcjsKCmludGVyZmFjZSBVcmlDb21wb25lbnRJbnRlcmZhY2UgZXh0ZW5kcyBcSnNvblNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGluc3RhbmNlIGNvbnRlbnQuCiAgICAgKgogICAgICogSWYgdGhlIGluc3RhbmNlIGlzIGRlZmluZWQsIHRoZSB2YWx1ZSByZXR1cm5lZCBNVVNUIGJlIGVuY29kZWQgYWNjb3JkaW5nIHRvIHRoZQogICAgICogc2VsZWN0ZWQgZW5jb2RpbmcgYWxnb3JpdGhtLiBJbiBhbnkgY2FzZSwgdGhlIHZhbHVlIE1VU1QgTk9UIGRvdWJsZS1lbmNvZGUgYW55IGNoYXJhY3RlcgogICAgICogZGVwZW5kaW5nIG9uIHRoZSBzZWxlY3RlZCBlbmNvZGluZyBhbGdvcml0aG0uCiAgICAgKgogICAgICogVG8gZGV0ZXJtaW5lIHdoYXQgY2hhcmFjdGVycyB0byBlbmNvZGUsIHBsZWFzZSByZWZlciB0byBSRkMgMzk4NiwgU2VjdGlvbnMgMiBhbmQgMy4KICAgICAqIG9yIFJGQyAzOTg3IFNlY3Rpb24gMy4gQnkgZGVmYXVsdCB0aGUgY29udGVudCBpcyBlbmNvZGVkIGFjY29yZGluZyB0byBSRkMzOTg2CiAgICAgKgogICAgICogSWYgdGhlIGluc3RhbmNlIGlzIG5vdCBkZWZpbmVkIG51bGwgaXMgcmV0dXJuZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnQoKTogP3N0cmluZzsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGluc3RhbmNlIHN0cmluZyByZXByZXNlbnRhdGlvbi4KICAgICAqCiAgICAgKiBJZiB0aGUgaW5zdGFuY2UgaXMgZGVmaW5lZCwgdGhlIHZhbHVlIHJldHVybmVkIE1VU1QgYmUgcGVyY2VudC1lbmNvZGVkLAogICAgICogYnV0IE1VU1QgTk9UIGRvdWJsZS1lbmNvZGUgYW55IGNoYXJhY3RlcnMuIFRvIGRldGVybWluZSB3aGF0IGNoYXJhY3RlcnMKICAgICAqIHRvIGVuY29kZSwgcGxlYXNlIHJlZmVyIHRvIFJGQyAzOTg2LCBTZWN0aW9ucyAyIGFuZCAzLgogICAgICoKICAgICAqIElmIHRoZSBpbnN0YW5jZSBpcyBub3QgZGVmaW5lZCBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgaW5zdGFuY2UganNvbiByZXByZXNlbnRhdGlvbi4KICAgICAqCiAgICAgKiBJZiB0aGUgaW5zdGFuY2UgaXMgZGVmaW5lZCwgdGhlIHZhbHVlIHJldHVybmVkIE1VU1QgYmUgcGVyY2VudC1lbmNvZGVkLAogICAgICogYnV0IE1VU1QgTk9UIGRvdWJsZS1lbmNvZGUgYW55IGNoYXJhY3RlcnMuIFRvIGRldGVybWluZSB3aGF0IGNoYXJhY3RlcnMKICAgICAqIHRvIGVuY29kZSwgcGxlYXNlIHJlZmVyIHRvIFJGQyAzOTg2IG9yIFJGQyAxNzM4LgogICAgICoKICAgICAqIElmIHRoZSBpbnN0YW5jZSBpcyBub3QgZGVmaW5lZCBudWxsIGlzIHJldHVybmVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCk6ID9zdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBpbnN0YW5jZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gd2l0aCBpdHMgb3B0aW9uYWwgVVJJIGRlbGltaXRlcnMuCiAgICAgKgogICAgICogVGhlIHZhbHVlIHJldHVybmVkIE1VU1QgYmUgcGVyY2VudC1lbmNvZGVkLCBidXQgTVVTVCBOT1QgZG91YmxlLWVuY29kZSBhbnkKICAgICAqIGNoYXJhY3RlcnMuIFRvIGRldGVybWluZSB3aGF0IGNoYXJhY3RlcnMgdG8gZW5jb2RlLCBwbGVhc2UgcmVmZXIgdG8gUkZDIDM5ODYsCiAgICAgKiBTZWN0aW9ucyAyIGFuZCAzLgogICAgICoKICAgICAqIElmIHRoZSBpbnN0YW5jZSBpcyBub3QgZGVmaW5lZCBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFVyaUNvbXBvbmVudCgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBjb250ZW50LgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgc3BlY2lmaWVkIGNvbnRlbnQuCiAgICAgKgogICAgICogVXNlcnMgY2FuIHByb3ZpZGUgYm90aCBlbmNvZGVkIGFuZCBkZWNvZGVkIGNvbnRlbnQgY2hhcmFjdGVycy4KICAgICAqCiAgICAgKiBBIG51bGwgdmFsdWUgaXMgZXF1aXZhbGVudCB0byByZW1vdmluZyB0aGUgY29tcG9uZW50IGNvbnRlbnQuCiAgICAgKgogICAgICoKICAgICAqIEBwYXJhbSA/c3RyaW5nICRjb250ZW50CiAgICAgKgogICAgICogQHRocm93cyBTeW50YXhFcnJvciAgICAgICBmb3IgaW52YWxpZCBjb21wb25lbnQgb3IgdHJhbnNmb3JtYXRpb25zCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgd291bGQgcmVzdWx0IGluIGEgb2JqZWN0IGluIGludmFsaWQgc3RhdGUuCiAgICAgKiBAdGhyb3dzIElkblN1cHBvcnRNaXNzaW5nIGZvciBjb21wb25lbnQgb3IgdHJhbnNmb3JtYXRpb25zCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmluZyBJRE4gc3VwcG9ydCB3aGVuIElETiBzdXBwb3J0IGlzIG5vdCBwcmVzZW50CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIG1pc2NvbmZpZ3VyZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoQ29udGVudCg/c3RyaW5nICRjb250ZW50KTogc2VsZjsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/UriException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcQ29udHJhY3RzOwoKdXNlIFRocm93YWJsZTsKCmludGVyZmFjZSBVcmlFeGNlcHRpb24gZXh0ZW5kcyBUaHJvd2FibGUKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/UriInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcQ29udHJhY3RzOwoKdXNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uc1xJZG5TdXBwb3J0TWlzc2luZzsKdXNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uc1xTeW50YXhFcnJvcjsKCmludGVyZmFjZSBVcmlJbnRlcmZhY2UgZXh0ZW5kcyBcSnNvblNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBhcyBhIFVSSSByZWZlcmVuY2UuCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNC4xCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZzsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBhcyBhIFVSSSByZWZlcmVuY2UuCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNC4xCiAgICAgKiBAc2VlIDo6X190b1N0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgc2NoZW1lIGNvbXBvbmVudCBvZiB0aGUgVVJJLgogICAgICoKICAgICAqIElmIG5vIHNjaGVtZSBpcyBwcmVzZW50LCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybiBhIG51bGwgdmFsdWUuCiAgICAgKgogICAgICogVGhlIHZhbHVlIHJldHVybmVkIE1VU1QgYmUgbm9ybWFsaXplZCB0byBsb3dlcmNhc2UsIHBlciBSRkMgMzk4NgogICAgICogU2VjdGlvbiAzLjEuCiAgICAgKgogICAgICogVGhlIHRyYWlsaW5nICI6IiBjaGFyYWN0ZXIgaXMgbm90IHBhcnQgb2YgdGhlIHNjaGVtZSBhbmQgTVVTVCBOT1QgYmUKICAgICAqIGFkZGVkLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjEKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNjaGVtZSgpOiA/c3RyaW5nOwoKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIGF1dGhvcml0eSBjb21wb25lbnQgb2YgdGhlIFVSSS4KICAgICAqCiAgICAgKiBJZiBubyBzY2hlbWUgaXMgcHJlc2VudCwgdGhpcyBtZXRob2QgTVVTVCByZXR1cm4gYSBudWxsIHZhbHVlLgogICAgICoKICAgICAqIElmIHRoZSBwb3J0IGNvbXBvbmVudCBpcyBub3Qgc2V0IG9yIGlzIHRoZSBzdGFuZGFyZCBwb3J0IGZvciB0aGUgY3VycmVudAogICAgICogc2NoZW1lLCBpdCBTSE9VTEQgTk9UIGJlIGluY2x1ZGVkLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEF1dGhvcml0eSgpOiA/c3RyaW5nOwoKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIHVzZXIgaW5mb3JtYXRpb24gY29tcG9uZW50IG9mIHRoZSBVUkkuCiAgICAgKgogICAgICogSWYgbm8gc2NoZW1lIGlzIHByZXNlbnQsIHRoaXMgbWV0aG9kIE1VU1QgcmV0dXJuIGEgbnVsbCB2YWx1ZS4KICAgICAqCiAgICAgKiBJZiBhIHVzZXIgaXMgcHJlc2VudCBpbiB0aGUgVVJJLCB0aGlzIHdpbGwgcmV0dXJuIHRoYXQgdmFsdWU7CiAgICAgKiBhZGRpdGlvbmFsbHksIGlmIHRoZSBwYXNzd29yZCBpcyBhbHNvIHByZXNlbnQsIGl0IHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlCiAgICAgKiB1c2VyIHZhbHVlLCB3aXRoIGEgY29sb24gKCI6Iikgc2VwYXJhdGluZyB0aGUgdmFsdWVzLgogICAgICoKICAgICAqIFRoZSB0cmFpbGluZyAiQCIgY2hhcmFjdGVyIGlzIG5vdCBwYXJ0IG9mIHRoZSB1c2VyIGluZm9ybWF0aW9uIGFuZCBNVVNUCiAgICAgKiBOT1QgYmUgYWRkZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVc2VySW5mbygpOiA/c3RyaW5nOwoKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIGhvc3QgY29tcG9uZW50IG9mIHRoZSBVUkkuCiAgICAgKgogICAgICogSWYgbm8gaG9zdCBpcyBwcmVzZW50IHRoaXMgbWV0aG9kIE1VU1QgcmV0dXJuIGEgbnVsbCB2YWx1ZS4KICAgICAqCiAgICAgKiBUaGUgdmFsdWUgcmV0dXJuZWQgTVVTVCBiZSBub3JtYWxpemVkIHRvIGxvd2VyY2FzZSwgcGVyIFJGQyAzOTg2CiAgICAgKiBTZWN0aW9uIDMuMi4yLgogICAgICoKICAgICAqIEBzZWUgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTMuMi4yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIb3N0KCk6ID9zdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgcG9ydCBjb21wb25lbnQgb2YgdGhlIFVSSS4KICAgICAqCiAgICAgKiBJZiBhIHBvcnQgaXMgcHJlc2VudCwgYW5kIGl0IGlzIG5vbi1zdGFuZGFyZCBmb3IgdGhlIGN1cnJlbnQgc2NoZW1lLAogICAgICogdGhpcyBtZXRob2QgTVVTVCByZXR1cm4gaXQgYXMgYW4gaW50ZWdlci4gSWYgdGhlIHBvcnQgaXMgdGhlIHN0YW5kYXJkIHBvcnQKICAgICAqIHVzZWQgd2l0aCB0aGUgY3VycmVudCBzY2hlbWUsIHRoaXMgbWV0aG9kIFNIT1VMRCByZXR1cm4gbnVsbC4KICAgICAqCiAgICAgKiBJZiBubyBwb3J0IGlzIHByZXNlbnQsIGFuZCBubyBzY2hlbWUgaXMgcHJlc2VudCwgdGhpcyBtZXRob2QgTVVTVCByZXR1cm4KICAgICAqIGEgbnVsbCB2YWx1ZS4KICAgICAqCiAgICAgKiBJZiBubyBwb3J0IGlzIHByZXNlbnQsIGJ1dCBhIHNjaGVtZSBpcyBwcmVzZW50LCB0aGlzIG1ldGhvZCBNQVkgcmV0dXJuCiAgICAgKiB0aGUgc3RhbmRhcmQgcG9ydCBmb3IgdGhhdCBzY2hlbWUsIGJ1dCBTSE9VTEQgcmV0dXJuIG51bGwuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQb3J0KCk6ID9pbnQ7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgcGF0aCBjb21wb25lbnQgb2YgdGhlIFVSSS4KICAgICAqCiAgICAgKiBUaGUgcGF0aCBjYW4gZWl0aGVyIGJlIGVtcHR5IG9yIGFic29sdXRlIChzdGFydGluZyB3aXRoIGEgc2xhc2gpIG9yCiAgICAgKiByb290bGVzcyAobm90IHN0YXJ0aW5nIHdpdGggYSBzbGFzaCkuIEltcGxlbWVudGF0aW9ucyBNVVNUIHN1cHBvcnQgYWxsCiAgICAgKiB0aHJlZSBzeW50YXhlcy4KICAgICAqCiAgICAgKiBOb3JtYWxseSwgdGhlIGVtcHR5IHBhdGggIiIgYW5kIGFic29sdXRlIHBhdGggIi8iIGFyZSBjb25zaWRlcmVkIGVxdWFsIGFzCiAgICAgKiBkZWZpbmVkIGluIFJGQyA3MjMwIFNlY3Rpb24gMi43LjMuIEJ1dCB0aGlzIG1ldGhvZCBNVVNUIE5PVCBhdXRvbWF0aWNhbGx5CiAgICAgKiBkbyB0aGlzIG5vcm1hbGl6YXRpb24gYmVjYXVzZSBpbiBjb250ZXh0cyB3aXRoIGEgdHJpbW1lZCBiYXNlIHBhdGgsIGUuZy4KICAgICAqIHRoZSBmcm9udCBjb250cm9sbGVyLCB0aGlzIGRpZmZlcmVuY2UgYmVjb21lcyBzaWduaWZpY2FudC4gSXQncyB0aGUgdGFzawogICAgICogb2YgdGhlIHVzZXIgdG8gaGFuZGxlIGJvdGggIiIgYW5kICIvIi4KICAgICAqCiAgICAgKiBUaGUgdmFsdWUgcmV0dXJuZWQgTVVTVCBiZSBwZXJjZW50LWVuY29kZWQsIGJ1dCBNVVNUIE5PVCBkb3VibGUtZW5jb2RlCiAgICAgKiBhbnkgY2hhcmFjdGVycy4gVG8gZGV0ZXJtaW5lIHdoYXQgY2hhcmFjdGVycyB0byBlbmNvZGUsIHBsZWFzZSByZWZlciB0bwogICAgICogUkZDIDM5ODYsIFNlY3Rpb25zIDIgYW5kIDMuMy4KICAgICAqCiAgICAgKiBBcyBhbiBleGFtcGxlLCBpZiB0aGUgdmFsdWUgc2hvdWxkIGluY2x1ZGUgYSBzbGFzaCAoIi8iKSBub3QgaW50ZW5kZWQgYXMKICAgICAqIGRlbGltaXRlciBiZXR3ZWVuIHBhdGggc2VnbWVudHMsIHRoYXQgdmFsdWUgTVVTVCBiZSBwYXNzZWQgaW4gZW5jb2RlZAogICAgICogZm9ybSAoZS5nLiwgIiUyRiIpIHRvIHRoZSBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMgogICAgICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTMuMwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGF0aCgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgcXVlcnkgc3RyaW5nIG9mIHRoZSBVUkkuCiAgICAgKgogICAgICogSWYgbm8gaG9zdCBpcyBwcmVzZW50IHRoaXMgbWV0aG9kIE1VU1QgcmV0dXJuIGEgbnVsbCB2YWx1ZS4KICAgICAqCiAgICAgKiBUaGUgbGVhZGluZyAiPyIgY2hhcmFjdGVyIGlzIG5vdCBwYXJ0IG9mIHRoZSBxdWVyeSBhbmQgTVVTVCBOT1QgYmUKICAgICAqIGFkZGVkLgogICAgICoKICAgICAqIFRoZSB2YWx1ZSByZXR1cm5lZCBNVVNUIGJlIHBlcmNlbnQtZW5jb2RlZCwgYnV0IE1VU1QgTk9UIGRvdWJsZS1lbmNvZGUKICAgICAqIGFueSBjaGFyYWN0ZXJzLiBUbyBkZXRlcm1pbmUgd2hhdCBjaGFyYWN0ZXJzIHRvIGVuY29kZSwgcGxlYXNlIHJlZmVyIHRvCiAgICAgKiBSRkMgMzk4NiwgU2VjdGlvbnMgMiBhbmQgMy40LgogICAgICoKICAgICAqIEFzIGFuIGV4YW1wbGUsIGlmIGEgdmFsdWUgaW4gYSBrZXkvdmFsdWUgcGFpciBvZiB0aGUgcXVlcnkgc3RyaW5nIHNob3VsZAogICAgICogaW5jbHVkZSBhbiBhbXBlcnNhbmQgKCImIikgbm90IGludGVuZGVkIGFzIGEgZGVsaW1pdGVyIGJldHdlZW4gdmFsdWVzLAogICAgICogdGhhdCB2YWx1ZSBNVVNUIGJlIHBhc3NlZCBpbiBlbmNvZGVkIGZvcm0gKGUuZy4sICIlMjYiKSB0byB0aGUgaW5zdGFuY2UuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTIKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFF1ZXJ5KCk6ID9zdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgZnJhZ21lbnQgY29tcG9uZW50IG9mIHRoZSBVUkkuCiAgICAgKgogICAgICogSWYgbm8gaG9zdCBpcyBwcmVzZW50IHRoaXMgbWV0aG9kIE1VU1QgcmV0dXJuIGEgbnVsbCB2YWx1ZS4KICAgICAqCiAgICAgKiBUaGUgbGVhZGluZyAiIyIgY2hhcmFjdGVyIGlzIG5vdCBwYXJ0IG9mIHRoZSBmcmFnbWVudCBhbmQgTVVTVCBOT1QgYmUKICAgICAqIGFkZGVkLgogICAgICoKICAgICAqIFRoZSB2YWx1ZSByZXR1cm5lZCBNVVNUIGJlIHBlcmNlbnQtZW5jb2RlZCwgYnV0IE1VU1QgTk9UIGRvdWJsZS1lbmNvZGUKICAgICAqIGFueSBjaGFyYWN0ZXJzLiBUbyBkZXRlcm1pbmUgd2hhdCBjaGFyYWN0ZXJzIHRvIGVuY29kZSwgcGxlYXNlIHJlZmVyIHRvCiAgICAgKiBSRkMgMzk4NiwgU2VjdGlvbnMgMiBhbmQgMy41LgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0yCiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy41CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGcmFnbWVudCgpOiA/c3RyaW5nOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBzY2hlbWUuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgc2NoZW1lLgogICAgICoKICAgICAqIEEgbnVsbCB2YWx1ZSBwcm92aWRlZCBmb3IgdGhlIHNjaGVtZSBpcyBlcXVpdmFsZW50IHRvIHJlbW92aW5nIHRoZSBzY2hlbWUKICAgICAqIGluZm9ybWF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSA/c3RyaW5nICRzY2hlbWUKICAgICAqCiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yIGZvciBpbnZhbGlkIGNvbXBvbmVudCBvciB0cmFuc2Zvcm1hdGlvbnMKICAgICAqICAgICAgICAgICAgICAgICAgICAgdGhhdCB3b3VsZCByZXN1bHQgaW4gYSBvYmplY3QgaW4gaW52YWxpZCBzdGF0ZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhTY2hlbWUoP3N0cmluZyAkc2NoZW1lKTogc2VsZjsKCiAgICAvKioKICAgICAqIFJldHVybiBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgdXNlciBpbmZvcm1hdGlvbi4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIHNwZWNpZmllZCB1c2VyIGluZm9ybWF0aW9uLgogICAgICoKICAgICAqIFBhc3N3b3JkIGlzIG9wdGlvbmFsLCBidXQgdGhlIHVzZXIgaW5mb3JtYXRpb24gTVVTVCBpbmNsdWRlIHRoZQogICAgICogdXNlcjsgYSBudWxsIHZhbHVlIGZvciB0aGUgdXNlciBpcyBlcXVpdmFsZW50IHRvIHJlbW92aW5nIHVzZXIKICAgICAqIGluZm9ybWF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSA/c3RyaW5nICR1c2VyCiAgICAgKiBAcGFyYW0gP3N0cmluZyAkcGFzc3dvcmQKICAgICAqCiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yIGZvciBpbnZhbGlkIGNvbXBvbmVudCBvciB0cmFuc2Zvcm1hdGlvbnMKICAgICAqICAgICAgICAgICAgICAgICAgICAgdGhhdCB3b3VsZCByZXN1bHQgaW4gYSBvYmplY3QgaW4gaW52YWxpZCBzdGF0ZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhVc2VySW5mbyg/c3RyaW5nICR1c2VyLCA/c3RyaW5nICRwYXNzd29yZCA9IG51bGwpOiBzZWxmOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBob3N0LgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgc3BlY2lmaWVkIGhvc3QuCiAgICAgKgogICAgICogQSBudWxsIHZhbHVlIHByb3ZpZGVkIGZvciB0aGUgaG9zdCBpcyBlcXVpdmFsZW50IHRvIHJlbW92aW5nIHRoZSBob3N0CiAgICAgKiBpbmZvcm1hdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gP3N0cmluZyAkaG9zdAogICAgICoKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgICAgICAgZm9yIGludmFsaWQgY29tcG9uZW50IG9yIHRyYW5zZm9ybWF0aW9ucwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhIG9iamVjdCBpbiBpbnZhbGlkIHN0YXRlLgogICAgICogQHRocm93cyBJZG5TdXBwb3J0TWlzc2luZyBmb3IgY29tcG9uZW50IG9yIHRyYW5zZm9ybWF0aW9ucwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJpbmcgSUROIHN1cHBvcnQgd2hlbiBJRE4gc3VwcG9ydCBpcyBub3QgcHJlc2VudAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBvciBtaXNjb25maWd1cmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEhvc3QoP3N0cmluZyAkaG9zdCk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHBvcnQuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgcG9ydC4KICAgICAqCiAgICAgKiBBIG51bGwgdmFsdWUgcHJvdmlkZWQgZm9yIHRoZSBwb3J0IGlzIGVxdWl2YWxlbnQgdG8gcmVtb3ZpbmcgdGhlIHBvcnQKICAgICAqIGluZm9ybWF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSA/aW50ICRwb3J0CiAgICAgKgogICAgICogQHRocm93cyBTeW50YXhFcnJvciBmb3IgaW52YWxpZCBjb21wb25lbnQgb3IgdHJhbnNmb3JtYXRpb25zCiAgICAgKiAgICAgICAgICAgICAgICAgICAgIHRoYXQgd291bGQgcmVzdWx0IGluIGEgb2JqZWN0IGluIGludmFsaWQgc3RhdGUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUG9ydCg/aW50ICRwb3J0KTogc2VsZjsKCiAgICAvKioKICAgICAqIFJldHVybiBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgcGF0aC4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIHNwZWNpZmllZCBwYXRoLgogICAgICoKICAgICAqIFRoZSBwYXRoIGNhbiBlaXRoZXIgYmUgZW1wdHkgb3IgYWJzb2x1dGUgKHN0YXJ0aW5nIHdpdGggYSBzbGFzaCkgb3IKICAgICAqIHJvb3RsZXNzIChub3Qgc3RhcnRpbmcgd2l0aCBhIHNsYXNoKS4gSW1wbGVtZW50YXRpb25zIE1VU1Qgc3VwcG9ydCBhbGwKICAgICAqIHRocmVlIHN5bnRheGVzLgogICAgICoKICAgICAqIFVzZXJzIGNhbiBwcm92aWRlIGJvdGggZW5jb2RlZCBhbmQgZGVjb2RlZCBwYXRoIGNoYXJhY3RlcnMuCiAgICAgKiBJbXBsZW1lbnRhdGlvbnMgZW5zdXJlIHRoZSBjb3JyZWN0IGVuY29kaW5nIGFzIG91dGxpbmVkIGluIGdldFBhdGgoKS4KICAgICAqCiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yIGZvciBpbnZhbGlkIGNvbXBvbmVudCBvciB0cmFuc2Zvcm1hdGlvbnMKICAgICAqICAgICAgICAgICAgICAgICAgICAgdGhhdCB3b3VsZCByZXN1bHQgaW4gYSBvYmplY3QgaW4gaW52YWxpZCBzdGF0ZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhQYXRoKHN0cmluZyAkcGF0aCk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHF1ZXJ5IHN0cmluZy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIHNwZWNpZmllZCBxdWVyeSBzdHJpbmcuCiAgICAgKgogICAgICogVXNlcnMgY2FuIHByb3ZpZGUgYm90aCBlbmNvZGVkIGFuZCBkZWNvZGVkIHF1ZXJ5IGNoYXJhY3RlcnMuCiAgICAgKiBJbXBsZW1lbnRhdGlvbnMgZW5zdXJlIHRoZSBjb3JyZWN0IGVuY29kaW5nIGFzIG91dGxpbmVkIGluIGdldFF1ZXJ5KCkuCiAgICAgKgogICAgICogQSBudWxsIHZhbHVlIHByb3ZpZGVkIGZvciB0aGUgcXVlcnkgaXMgZXF1aXZhbGVudCB0byByZW1vdmluZyB0aGUgcXVlcnkKICAgICAqIGluZm9ybWF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSA/c3RyaW5nICRxdWVyeQogICAgICoKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgZm9yIGludmFsaWQgY29tcG9uZW50IG9yIHRyYW5zZm9ybWF0aW9ucwogICAgICogICAgICAgICAgICAgICAgICAgICB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhIG9iamVjdCBpbiBpbnZhbGlkIHN0YXRlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFF1ZXJ5KD9zdHJpbmcgJHF1ZXJ5KTogc2VsZjsKCiAgICAvKioKICAgICAqIFJldHVybiBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgVVJJIGZyYWdtZW50LgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgc3BlY2lmaWVkIFVSSSBmcmFnbWVudC4KICAgICAqCiAgICAgKiBVc2VycyBjYW4gcHJvdmlkZSBib3RoIGVuY29kZWQgYW5kIGRlY29kZWQgZnJhZ21lbnQgY2hhcmFjdGVycy4KICAgICAqIEltcGxlbWVudGF0aW9ucyBlbnN1cmUgdGhlIGNvcnJlY3QgZW5jb2RpbmcgYXMgb3V0bGluZWQgaW4gZ2V0RnJhZ21lbnQoKS4KICAgICAqCiAgICAgKiBBIG51bGwgdmFsdWUgcHJvdmlkZWQgZm9yIHRoZSBmcmFnbWVudCBpcyBlcXVpdmFsZW50IHRvIHJlbW92aW5nIHRoZSBmcmFnbWVudAogICAgICogaW5mb3JtYXRpb24uCiAgICAgKgogICAgICogQHBhcmFtID9zdHJpbmcgJGZyYWdtZW50CiAgICAgKgogICAgICogQHRocm93cyBTeW50YXhFcnJvciBmb3IgaW52YWxpZCBjb21wb25lbnQgb3IgdHJhbnNmb3JtYXRpb25zCiAgICAgKiAgICAgICAgICAgICAgICAgICAgIHRoYXQgd291bGQgcmVzdWx0IGluIGEgb2JqZWN0IGluIGludmFsaWQgc3RhdGUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoRnJhZ21lbnQoP3N0cmluZyAkZnJhZ21lbnQpOiBzZWxmOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/UserInfoInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcQ29udHJhY3RzOwoKaW50ZXJmYWNlIFVzZXJJbmZvSW50ZXJmYWNlIGV4dGVuZHMgVXJpQ29tcG9uZW50SW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdXNlciBjb21wb25lbnQgcGFydC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFVzZXIoKTogP3N0cmluZzsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHBhc3MgY29tcG9uZW50IHBhcnQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQYXNzKCk6ID9zdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCB1c2VyIGFuZC9vciBwYXNzLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgc3BlY2lmaWVkIHVzZXIuCiAgICAgKgogICAgICogQW4gZW1wdHkgdXNlciBpcyBlcXVpdmFsZW50IHRvIHJlbW92aW5nIHRoZSB1c2VyIGluZm9ybWF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSA/c3RyaW5nICR1c2VyCiAgICAgKiBAcGFyYW0gP3N0cmluZyAkcGFzcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFVzZXJJbmZvKD9zdHJpbmcgJHVzZXIsID9zdHJpbmcgJHBhc3MgPSBudWxsKTogc2VsZjsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Exceptions/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Exceptions/FileinfoSupportMissing.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uczsKCnVzZSBMZWFndWVcVXJpXENvbnRyYWN0c1xVcmlFeGNlcHRpb247CgpjbGFzcyBGaWxlaW5mb1N1cHBvcnRNaXNzaW5nIGV4dGVuZHMgXFJ1bnRpbWVFeGNlcHRpb24gaW1wbGVtZW50cyBVcmlFeGNlcHRpb24Kewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Exceptions/IdnaConversionFailed.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uczsKCnVzZSBMZWFndWVcVXJpXElkbmFcSWRuYUluZm87CgpmaW5hbCBjbGFzcyBJZG5hQ29udmVyc2lvbkZhaWxlZCBleHRlbmRzIFN5bnRheEVycm9yCnsKICAgIC8qKiBAdmFyIElkbmFJbmZvfG51bGwgICovCiAgICBwcml2YXRlICRpZG5hSW5mbzsKCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkbWVzc2FnZSwgSWRuYUluZm8gJGlkbmFJbmZvID0gbnVsbCkKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRtZXNzYWdlKTsKICAgICAgICAkdGhpcy0+aWRuYUluZm8gPSAkaWRuYUluZm87CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkdWVUb0lETkFFcnJvcihzdHJpbmcgJGRvbWFpbiwgSWRuYUluZm8gJGlkbmFJbmZvKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigKICAgICAgICAgICAgJ1RoZSBob3N0IGAnLiRkb21haW4uJ2AgaXMgaW52YWxpZCA6ICcuaW1wbG9kZSgnLCAnLCAkaWRuYUluZm8tPmVycm9yTGlzdCgpKS4nIC4nLAogICAgICAgICAgICAkaWRuYUluZm8KICAgICAgICApOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZHVlVG9JbnZhbGlkSG9zdChzdHJpbmcgJGRvbWFpbik6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJ1RoZSBob3N0IGAnLiRkb21haW4uJ2AgaXMgbm90IGEgdmFsaWQgSUROIGhvc3QnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaWRuYUluZm8oKTogP0lkbmFJbmZvCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5pZG5hSW5mbzsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Exceptions/IdnSupportMissing.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uczsKCnVzZSBMZWFndWVcVXJpXENvbnRyYWN0c1xVcmlFeGNlcHRpb247CgpjbGFzcyBJZG5TdXBwb3J0TWlzc2luZyBleHRlbmRzIFxSdW50aW1lRXhjZXB0aW9uIGltcGxlbWVudHMgVXJpRXhjZXB0aW9uCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Exceptions/SyntaxError.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uczsKCnVzZSBMZWFndWVcVXJpXENvbnRyYWN0c1xVcmlFeGNlcHRpb247CgpjbGFzcyBTeW50YXhFcnJvciBleHRlbmRzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaW1wbGVtZW50cyBVcmlFeGNlcHRpb24Kewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Idna/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Idna/Idna.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcSWRuYTsKCnVzZSBMZWFndWVcVXJpXEV4Y2VwdGlvbnNcSWRuYUNvbnZlcnNpb25GYWlsZWQ7CnVzZSBMZWFndWVcVXJpXEV4Y2VwdGlvbnNcSWRuU3VwcG9ydE1pc3Npbmc7CnVzZSBMZWFndWVcVXJpXEV4Y2VwdGlvbnNcU3ludGF4RXJyb3I7CnVzZSBmdW5jdGlvbiBkZWZpbmVkOwp1c2UgZnVuY3Rpb24gZnVuY3Rpb25fZXhpc3RzOwp1c2UgZnVuY3Rpb24gaWRuX3RvX2FzY2lpOwp1c2UgZnVuY3Rpb24gaWRuX3RvX3V0Zjg7CnVzZSBmdW5jdGlvbiByYXd1cmxkZWNvZGU7CnVzZSBjb25zdCBJTlRMX0lETkFfVkFSSUFOVF9VVFM0NjsKCi8qKgogKiBAc2VlIGh0dHBzOi8vdW5pY29kZS1vcmcuZ2l0aHViLmlvL2ljdS1kb2NzL2FwaWRvYy9yZWxlYXNlZC9pY3U0Yy91aWRuYV84aC5odG1sCiAqLwpmaW5hbCBjbGFzcyBJZG5hCnsKICAgIHByaXZhdGUgY29uc3QgUkVHRVhQX0lETkFfUEFUVEVSTiA9ICcvW15ceDIwLVx4N2ZdLyc7CiAgICBwcml2YXRlIGNvbnN0IE1BWF9ET01BSU5fTEVOR1RIID0gMjUzOwogICAgcHJpdmF0ZSBjb25zdCBNQVhfTEFCRUxfTEVOR1RIID0gNjM7CgogICAgLyoqCiAgICAgKiBHZW5lcmFsIHJlZ2lzdGVyZWQgbmFtZSByZWd1bGFyIGV4cHJlc3Npb24uCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTMuMi4yCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVnZXgxMDEuY29tL3IvZnB0VThWLzEKICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBSRUdFWFBfUkVHSVNURVJFRF9OQU1FID0gJy8KICAgICAgICAoPyhERUZJTkUpCiAgICAgICAgICAgICg/PHVucmVzZXJ2ZWQ+W2EtejAtOV9+XC1dKSAgICMgLiBpcyBtaXNzaW5nIGFzIGl0IGlzIHVzZWQgdG8gc2VwYXJhdGUgbGFiZWxzCiAgICAgICAgICAgICg/PHN1Yl9kZWxpbXM+WyEkJlwnKCkqKyw7PV0pCiAgICAgICAgICAgICg/PGVuY29kZWQ+JVtBLUYwLTldezJ9KQogICAgICAgICAgICAoPzxyZWdfbmFtZT4oPzooPyZ1bnJlc2VydmVkKXwoPyZzdWJfZGVsaW1zKXwoPyZlbmNvZGVkKSkqKQogICAgICAgICkKICAgICAgICAgICAgXig/Oig/JnJlZ19uYW1lKVwuKSooPyZyZWdfbmFtZSlcLj8kCiAgICAgICAgL2l4JzsKCiAgICAvKioKICAgICAqIElETkEgb3B0aW9ucy4KICAgICAqLwogICAgcHVibGljIGNvbnN0IElETkFfREVGQVVMVCAgICAgICAgICAgICAgICAgICAgPSAwOwogICAgcHVibGljIGNvbnN0IElETkFfQUxMT1dfVU5BU1NJR05FRCAgICAgICAgICAgPSAxOwogICAgcHVibGljIGNvbnN0IElETkFfVVNFX1NURDNfUlVMRVMgICAgICAgICAgICAgPSAyOwogICAgcHVibGljIGNvbnN0IElETkFfQ0hFQ0tfQklESSAgICAgICAgICAgICAgICAgPSA0OwogICAgcHVibGljIGNvbnN0IElETkFfQ0hFQ0tfQ09OVEVYVEogICAgICAgICAgICAgPSA4OwogICAgcHVibGljIGNvbnN0IElETkFfTk9OVFJBTlNJVElPTkFMX1RPX0FTQ0lJICAgPSAweDEwOwogICAgcHVibGljIGNvbnN0IElETkFfTk9OVFJBTlNJVElPTkFMX1RPX1VOSUNPREUgPSAweDIwOwogICAgcHVibGljIGNvbnN0IElETkFfQ0hFQ0tfQ09OVEVYVE8gICAgICAgICAgICAgPSAweDQwOwoKICAgIC8qKgogICAgICogSUROQSBlcnJvcnMuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBFUlJPUl9OT05FICAgICAgICAgICAgICAgICAgID0gMDsKICAgIHB1YmxpYyBjb25zdCBFUlJPUl9FTVBUWV9MQUJFTCAgICAgICAgICAgID0gMTsKICAgIHB1YmxpYyBjb25zdCBFUlJPUl9MQUJFTF9UT09fTE9ORyAgICAgICAgID0gMjsKICAgIHB1YmxpYyBjb25zdCBFUlJPUl9ET01BSU5fTkFNRV9UT09fTE9ORyAgID0gNDsKICAgIHB1YmxpYyBjb25zdCBFUlJPUl9MRUFESU5HX0hZUEhFTiAgICAgICAgID0gODsKICAgIHB1YmxpYyBjb25zdCBFUlJPUl9UUkFJTElOR19IWVBIRU4gICAgICAgID0gMHgxMDsKICAgIHB1YmxpYyBjb25zdCBFUlJPUl9IWVBIRU5fM180ICAgICAgICAgICAgID0gMHgyMDsKICAgIHB1YmxpYyBjb25zdCBFUlJPUl9MRUFESU5HX0NPTUJJTklOR19NQVJLID0gMHg0MDsKICAgIHB1YmxpYyBjb25zdCBFUlJPUl9ESVNBTExPV0VEICAgICAgICAgICAgID0gMHg4MDsKICAgIHB1YmxpYyBjb25zdCBFUlJPUl9QVU5ZQ09ERSAgICAgICAgICAgICAgID0gMHgxMDA7CiAgICBwdWJsaWMgY29uc3QgRVJST1JfTEFCRUxfSEFTX0RPVCAgICAgICAgICA9IDB4MjAwOwogICAgcHVibGljIGNvbnN0IEVSUk9SX0lOVkFMSURfQUNFX0xBQkVMICAgICAgPSAweDQwMDsKICAgIHB1YmxpYyBjb25zdCBFUlJPUl9CSURJICAgICAgICAgICAgICAgICAgID0gMHg4MDA7CiAgICBwdWJsaWMgY29uc3QgRVJST1JfQ09OVEVYVEogICAgICAgICAgICAgICA9IDB4MTAwMDsKICAgIHB1YmxpYyBjb25zdCBFUlJPUl9DT05URVhUT19QVU5DVFVBVElPTiAgID0gMHgyMDAwOwogICAgcHVibGljIGNvbnN0IEVSUk9SX0NPTlRFWFRPX0RJR0lUUyAgICAgICAgPSAweDQwMDA7CgogICAgLyoqCiAgICAgKiBJRE5BIGRlZmF1bHQgb3B0aW9ucy4KICAgICAqLwogICAgcHVibGljIGNvbnN0IElETkEyMDA4X0FTQ0lJID0gc2VsZjo6SUROQV9OT05UUkFOU0lUSU9OQUxfVE9fQVNDSUkKICAgICAgICB8IHNlbGY6OklETkFfQ0hFQ0tfQklESQogICAgICAgIHwgc2VsZjo6SUROQV9VU0VfU1REM19SVUxFUwogICAgICAgIHwgc2VsZjo6SUROQV9DSEVDS19DT05URVhUSjsKICAgIHB1YmxpYyBjb25zdCBJRE5BMjAwOF9VTklDT0RFID0gc2VsZjo6SUROQV9OT05UUkFOU0lUSU9OQUxfVE9fVU5JQ09ERQogICAgICAgIHwgc2VsZjo6SUROQV9DSEVDS19CSURJCiAgICAgICAgfCBzZWxmOjpJRE5BX1VTRV9TVEQzX1JVTEVTCiAgICAgICAgfCBzZWxmOjpJRE5BX0NIRUNLX0NPTlRFWFRKOwoKICAgIC8qKgogICAgICogQGNvZGVDb3ZlcmFnZUlnbm9yZQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBzdXBwb3J0c0lkbmEoKTogdm9pZAogICAgewogICAgICAgIHN0YXRpYyAkaWRuU3VwcG9ydDsKICAgICAgICBpZiAobnVsbCA9PT0gJGlkblN1cHBvcnQpIHsKICAgICAgICAgICAgJGlkblN1cHBvcnQgPSBmdW5jdGlvbl9leGlzdHMoJ1xpZG5fdG9fYXNjaWknKSAmJiBkZWZpbmVkKCdcSU5UTF9JRE5BX1ZBUklBTlRfVVRTNDYnKTsKICAgICAgICB9CgogICAgICAgIGlmICghJGlkblN1cHBvcnQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IElkblN1cHBvcnRNaXNzaW5nKCdJRE4gaG9zdCBjYW4gbm90IGJlIHByb2Nlc3NlZC4gVmVyaWZ5IHRoYXQgZXh0L2ludGwgaXMgaW5zdGFsbGVkIGZvciBJRE4gc3VwcG9ydCBhbmQgdGhhdCBJQ1UgaXMgYXQgbGVhc3QgdmVyc2lvbiA0LjYuJyk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydHMgdGhlIGlucHV0IHRvIGl0cyBJRE5BIEFTQ0lJIGZvcm0uCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc3RyaW5nIGNvbnZlcnRlZCB0byBJRE4gQVNDSUkgZm9ybQogICAgICoKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgaWYgdGhlIHN0cmluZyBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBBU0NJSSB1c2luZyBJRE4gVVRTNDYgYWxnb3JpdGhtCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdG9Bc2NpaShzdHJpbmcgJGRvbWFpbiwgaW50ICRvcHRpb25zKTogSWRuYUluZm8KICAgIHsKICAgICAgICAkZG9tYWluID0gcmF3dXJsZGVjb2RlKCRkb21haW4pOwoKICAgICAgICBpZiAoMSA9PT0gcHJlZ19tYXRjaChzZWxmOjpSRUdFWFBfSUROQV9QQVRURVJOLCAkZG9tYWluKSkgewogICAgICAgICAgICBzZWxmOjpzdXBwb3J0c0lkbmEoKTsKCiAgICAgICAgICAgIC8qIEBwYXJhbS1vdXQgYXJyYXl7ZXJyb3JzOiBpbnQsIGlzVHJhbnNpdGlvbmFsRGlmZmVyZW50OiBib29sLCByZXN1bHQ6IHN0cmluZ30gJGlkbmFJbmZvICovCiAgICAgICAgICAgIGlkbl90b19hc2NpaSgkZG9tYWluLCAkb3B0aW9ucywgSU5UTF9JRE5BX1ZBUklBTlRfVVRTNDYsICRpZG5hSW5mbyk7CiAgICAgICAgICAgIGlmIChbXSA9PT0gJGlkbmFJbmZvKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gSWRuYUluZm86OmZyb21JbnRsKFsKICAgICAgICAgICAgICAgICAgICAncmVzdWx0JyA9PiBzdHJ0b2xvd2VyKCRkb21haW4pLAogICAgICAgICAgICAgICAgICAgICdpc1RyYW5zaXRpb25hbERpZmZlcmVudCcgPT4gZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgJ2Vycm9ycycgPT4gc2VsZjo6dmFsaWRhdGVEb21haW5BbmRMYWJlbExlbmd0aCgkZG9tYWluKSwKICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKiBAdmFyIGFycmF5e2Vycm9yczogaW50LCBpc1RyYW5zaXRpb25hbERpZmZlcmVudDogYm9vbCwgcmVzdWx0OiBzdHJpbmd9ICRpZG5hSW5mbyAqLwogICAgICAgICAgICByZXR1cm4gSWRuYUluZm86OmZyb21JbnRsKCRpZG5hSW5mbyk7CiAgICAgICAgfQoKICAgICAgICAkZXJyb3IgPSBzZWxmOjpFUlJPUl9OT05FOwogICAgICAgIGlmICgxICE9PSBwcmVnX21hdGNoKHNlbGY6OlJFR0VYUF9SRUdJU1RFUkVEX05BTUUsICRkb21haW4pKSB7CiAgICAgICAgICAgICRlcnJvciB8PSBzZWxmOjpFUlJPUl9ESVNBTExPV0VEOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIElkbmFJbmZvOjpmcm9tSW50bChbCiAgICAgICAgICAgICdyZXN1bHQnID0+IHN0cnRvbG93ZXIoJGRvbWFpbiksCiAgICAgICAgICAgICdpc1RyYW5zaXRpb25hbERpZmZlcmVudCcgPT4gZmFsc2UsCiAgICAgICAgICAgICdlcnJvcnMnID0+IHNlbGY6OnZhbGlkYXRlRG9tYWluQW5kTGFiZWxMZW5ndGgoJGRvbWFpbikgfCAkZXJyb3IsCiAgICAgICAgXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyB0aGUgaW5wdXQgdG8gaXRzIElETkEgVU5JQ09ERSBmb3JtLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHN0cmluZyBjb252ZXJ0ZWQgdG8gSUROIFVOSUNPREUgZm9ybQogICAgICoKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgaWYgdGhlIHN0cmluZyBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBVTklDT0RFIHVzaW5nIElETiBVVFM0NiBhbGdvcml0aG0KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0b1VuaWNvZGUoc3RyaW5nICRkb21haW4sIGludCAkb3B0aW9ucyk6IElkbmFJbmZvCiAgICB7CiAgICAgICAgJGRvbWFpbiA9IHJhd3VybGRlY29kZSgkZG9tYWluKTsKCiAgICAgICAgaWYgKGZhbHNlID09PSBzdHJpcG9zKCRkb21haW4sICd4bi0tJykpIHsKICAgICAgICAgICAgcmV0dXJuIElkbmFJbmZvOjpmcm9tSW50bChbJ3Jlc3VsdCcgPT4gJGRvbWFpbiwgJ2lzVHJhbnNpdGlvbmFsRGlmZmVyZW50JyA9PiBmYWxzZSwgJ2Vycm9ycycgPT4gc2VsZjo6RVJST1JfTk9ORV0pOwogICAgICAgIH0KCiAgICAgICAgc2VsZjo6c3VwcG9ydHNJZG5hKCk7CgogICAgICAgIC8qIEBwYXJhbS1vdXQgYXJyYXl7ZXJyb3JzOiBpbnQsIGlzVHJhbnNpdGlvbmFsRGlmZmVyZW50OiBib29sLCByZXN1bHQ6IHN0cmluZ30gJGlkbmFJbmZvICovCiAgICAgICAgaWRuX3RvX3V0ZjgoJGRvbWFpbiwgJG9wdGlvbnMsIElOVExfSUROQV9WQVJJQU5UX1VUUzQ2LCAkaWRuYUluZm8pOwogICAgICAgIGlmIChbXSA9PT0gJGlkbmFJbmZvKSB7CiAgICAgICAgICAgIHRocm93IElkbmFDb252ZXJzaW9uRmFpbGVkOjpkdWVUb0ludmFsaWRIb3N0KCRkb21haW4pOwogICAgICAgIH0KCiAgICAgICAgLyogQHZhciBhcnJheXtlcnJvcnM6IGludCwgaXNUcmFuc2l0aW9uYWxEaWZmZXJlbnQ6IGJvb2wsIHJlc3VsdDogc3RyaW5nfSAkaWRuYUluZm8gKi8KICAgICAgICByZXR1cm4gSWRuYUluZm86OmZyb21JbnRsKCRpZG5hSW5mbyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL1RSb3dib3RoYW0vaWRuYS4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9UUm93Ym90aGFtL2lkbmEvYmxvYi9tYXN0ZXIvc3JjL0lkbmEucGhwI0wyMzYKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gdmFsaWRhdGVEb21haW5BbmRMYWJlbExlbmd0aChzdHJpbmcgJGRvbWFpbik6IGludAogICAgewogICAgICAgICRlcnJvciA9IHNlbGY6OkVSUk9SX05PTkU7CiAgICAgICAgJGxhYmVscyA9IGV4cGxvZGUoJy4nLCAkZG9tYWluKTsKICAgICAgICAkbWF4RG9tYWluU2l6ZSA9IHNlbGY6Ok1BWF9ET01BSU5fTEVOR1RIOwogICAgICAgICRsZW5ndGggPSBjb3VudCgkbGFiZWxzKTsKCiAgICAgICAgLy8gSWYgdGhlIGxhc3QgbGFiZWwgaXMgZW1wdHkgYW5kIGl0IGlzIG5vdCB0aGUgZmlyc3QgbGFiZWwsIHRoZW4gaXQgaXMgdGhlIHJvb3QgbGFiZWwuCiAgICAgICAgLy8gSW5jcmVhc2UgdGhlIG1heCBzaXplIGJ5IDEsIG1ha2luZyBpdCAyNTQsIHRvIGFjY291bnQgZm9yIHRoZSByb290IGxhYmVsJ3MgIi4iCiAgICAgICAgLy8gZGVsaW1pdGVyLiBUaGlzIGFsc28gbWVhbnMgd2UgZG9uJ3QgbmVlZCB0byBjaGVjayB0aGUgbGFzdCBsYWJlbCdzIGxlbmd0aCBmb3IgYmVpbmcgdG9vCiAgICAgICAgLy8gbG9uZy4KICAgICAgICBpZiAoJGxlbmd0aCA+IDEgJiYgJGxhYmVsc1skbGVuZ3RoIC0gMV0gPT09ICcnKSB7CiAgICAgICAgICAgICsrJG1heERvbWFpblNpemU7CiAgICAgICAgICAgIGFycmF5X3BvcCgkbGFiZWxzKTsKICAgICAgICB9CgogICAgICAgIGlmIChzdHJsZW4oJGRvbWFpbikgPiAkbWF4RG9tYWluU2l6ZSkgewogICAgICAgICAgICAkZXJyb3IgfD0gc2VsZjo6RVJST1JfRE9NQUlOX05BTUVfVE9PX0xPTkc7CiAgICAgICAgfQoKICAgICAgICBmb3JlYWNoICgkbGFiZWxzIGFzICRsYWJlbCkgewogICAgICAgICAgICBpZiAoc3RybGVuKCRsYWJlbCkgPiBzZWxmOjpNQVhfTEFCRUxfTEVOR1RIKSB7CiAgICAgICAgICAgICAgICAkZXJyb3IgfD0gc2VsZjo6RVJST1JfTEFCRUxfVE9PX0xPTkc7CgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkZXJyb3I7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Idna/IdnaInfo.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcSWRuYTsKCnVzZSBmdW5jdGlvbiBhcnJheV9maWx0ZXI7CnVzZSBjb25zdCBBUlJBWV9GSUxURVJfVVNFX0tFWTsKCi8qKgogKiBAc2VlIGh0dHBzOi8vdW5pY29kZS1vcmcuZ2l0aHViLmlvL2ljdS1kb2NzL2FwaWRvYy9yZWxlYXNlZC9pY3U0Yy91aWRuYV84aC5odG1sCiAqLwpmaW5hbCBjbGFzcyBJZG5hSW5mbwp7CiAgICBwcml2YXRlIGNvbnN0IEVSUk9SUyA9IFsKICAgICAgICBJZG5hOjpFUlJPUl9FTVBUWV9MQUJFTCA9PiAnYSBub24tZmluYWwgZG9tYWluIG5hbWUgbGFiZWwgKG9yIHRoZSB3aG9sZSBkb21haW4gbmFtZSkgaXMgZW1wdHknLAogICAgICAgIElkbmE6OkVSUk9SX0xBQkVMX1RPT19MT05HID0+ICdhIGRvbWFpbiBuYW1lIGxhYmVsIGlzIGxvbmdlciB0aGFuIDYzIGJ5dGVzJywKICAgICAgICBJZG5hOjpFUlJPUl9ET01BSU5fTkFNRV9UT09fTE9ORyA9PiAnYSBkb21haW4gbmFtZSBpcyBsb25nZXIgdGhhbiAyNTUgYnl0ZXMgaW4gaXRzIHN0b3JhZ2UgZm9ybScsCiAgICAgICAgSWRuYTo6RVJST1JfTEVBRElOR19IWVBIRU4gPT4gJ2EgbGFiZWwgc3RhcnRzIHdpdGggYSBoeXBoZW4tbWludXMgKCItIiknLAogICAgICAgIElkbmE6OkVSUk9SX1RSQUlMSU5HX0hZUEhFTiA9PiAnYSBsYWJlbCBlbmRzIHdpdGggYSBoeXBoZW4tbWludXMgKCItIiknLAogICAgICAgIElkbmE6OkVSUk9SX0hZUEhFTl8zXzQgPT4gJ2EgbGFiZWwgY29udGFpbnMgaHlwaGVuLW1pbnVzICgiLSIpIGluIHRoZSB0aGlyZCBhbmQgZm91cnRoIHBvc2l0aW9ucycsCiAgICAgICAgSWRuYTo6RVJST1JfTEVBRElOR19DT01CSU5JTkdfTUFSSyA9PiAnYSBsYWJlbCBzdGFydHMgd2l0aCBhIGNvbWJpbmluZyBtYXJrJywKICAgICAgICBJZG5hOjpFUlJPUl9ESVNBTExPV0VEID0+ICdhIGxhYmVsIG9yIGRvbWFpbiBuYW1lIGNvbnRhaW5zIGRpc2FsbG93ZWQgY2hhcmFjdGVycycsCiAgICAgICAgSWRuYTo6RVJST1JfUFVOWUNPREUgPT4gJ2EgbGFiZWwgc3RhcnRzIHdpdGggInhuLS0iIGJ1dCBkb2VzIG5vdCBjb250YWluIHZhbGlkIFB1bnljb2RlJywKICAgICAgICBJZG5hOjpFUlJPUl9MQUJFTF9IQVNfRE9UID0+ICdhIGxhYmVsIGNvbnRhaW5zIGEgZG90PWZ1bGwgc3RvcCcsCiAgICAgICAgSWRuYTo6RVJST1JfSU5WQUxJRF9BQ0VfTEFCRUwgPT4gJ0FuIEFDRSBsYWJlbCBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgbGFiZWwgc3RyaW5nJywKICAgICAgICBJZG5hOjpFUlJPUl9CSURJID0+ICdhIGxhYmVsIGRvZXMgbm90IG1lZXQgdGhlIElETkEgQmlEaSByZXF1aXJlbWVudHMgKGZvciByaWdodC10by1sZWZ0IGNoYXJhY3RlcnMpJywKICAgICAgICBJZG5hOjpFUlJPUl9DT05URVhUSiA9PiAnYSBsYWJlbCBkb2VzIG5vdCBtZWV0IHRoZSBJRE5BIENPTlRFWFRKIHJlcXVpcmVtZW50cycsCiAgICAgICAgSWRuYTo6RVJST1JfQ09OVEVYVE9fRElHSVRTID0+ICdhIGxhYmVsIGRvZXMgbm90IG1lZXQgdGhlIElETkEgQ09OVEVYVE8gcmVxdWlyZW1lbnRzIGZvciBkaWdpdHMnLAogICAgICAgIElkbmE6OkVSUk9SX0NPTlRFWFRPX1BVTkNUVUFUSU9OID0+ICdhIGxhYmVsIGRvZXMgbm90IG1lZXQgdGhlIElETkEgQ09OVEVYVE8gcmVxdWlyZW1lbnRzIGZvciBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzLiBTb21lIHB1bmN0dWF0aW9uIGNoYXJhY3RlcnMgIldvdWxkIG90aGVyd2lzZSBoYXZlIGJlZW4gRElTQUxMT1dFRCIgYnV0IGFyZSBhbGxvd2VkIGluIGNlcnRhaW4gY29udGV4dHMnLAogICAgXTsKCiAgICAvKiogQHZhciBzdHJpbmcgKi8KICAgIHByaXZhdGUgJHJlc3VsdDsKCiAgICAvKiogQHZhciBib29sICovCiAgICBwcml2YXRlICRpc1RyYW5zaXRpb25hbERpZmZlcmVudDsKCiAgICAvKiogQHZhciBpbnQgKi8KICAgIHByaXZhdGUgJGVycm9yczsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXk8aW50LCBzdHJpbmc+CiAgICAgKi8KICAgIHByaXZhdGUgJGVycm9yTGlzdDsKCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkcmVzdWx0LCBib29sICRpc1RyYW5zaXRpb25hbERpZmZlcmVudCwgaW50ICRlcnJvcnMpCiAgICB7CiAgICAgICAgJHRoaXMtPnJlc3VsdCA9ICRyZXN1bHQ7CiAgICAgICAgJHRoaXMtPmVycm9ycyA9ICRlcnJvcnM7CiAgICAgICAgJHRoaXMtPmlzVHJhbnNpdGlvbmFsRGlmZmVyZW50ID0gJGlzVHJhbnNpdGlvbmFsRGlmZmVyZW50OwogICAgICAgICR0aGlzLT5lcnJvckxpc3QgPSBhcnJheV9maWx0ZXIoCiAgICAgICAgICAgIHNlbGY6OkVSUk9SUywKICAgICAgICAgICAgZnVuY3Rpb24gKGludCAkZXJyb3IpOiBib29sIHsKICAgICAgICAgICAgICAgIHJldHVybiAwICE9PSAoJGVycm9yICYgJHRoaXMtPmVycm9ycyk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFSUkFZX0ZJTFRFUl9VU0VfS0VZCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheXtyZXN1bHQ6c3RyaW5nLCBpc1RyYW5zaXRpb25hbERpZmZlcmVudDpib29sLCBlcnJvcnM6aW50fSAkaW5mb3MKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tSW50bChhcnJheSAkaW5mb3MpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRpbmZvc1sncmVzdWx0J10sICRpbmZvc1snaXNUcmFuc2l0aW9uYWxEaWZmZXJlbnQnXSwgJGluZm9zWydlcnJvcnMnXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXl7cmVzdWx0OnN0cmluZywgaXNUcmFuc2l0aW9uYWxEaWZmZXJlbnQ6Ym9vbCwgZXJyb3JzOmludH0gJHByb3BlcnRpZXMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBfX3NldF9zdGF0ZShhcnJheSAkcHJvcGVydGllcyk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6ZnJvbUludGwoJHByb3BlcnRpZXMpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXN1bHQoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXN1bHQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzVHJhbnNpdGlvbmFsRGlmZmVyZW50KCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmlzVHJhbnNpdGlvbmFsRGlmZmVyZW50OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBlcnJvcnMoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5lcnJvcnM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGVycm9yKGludCAkZXJyb3IpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5lcnJvckxpc3RbJGVycm9yXSA/PyBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheTxpbnQsIHN0cmluZz4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVycm9yTGlzdCgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZXJyb3JMaXN0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/uri/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAibGVhZ3VlL3VyaSIsCiAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICJkZXNjcmlwdGlvbiIgOiAiVVJJIG1hbmlwdWxhdGlvbiBsaWJyYXJ5IiwKICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAidXJsIiwKICAgICAgICAidXJpIiwKICAgICAgICAicmZjMzk4NiIsCiAgICAgICAgInJmYzM5ODciLAogICAgICAgICJyZmM2NTcwIiwKICAgICAgICAicHNyLTciLAogICAgICAgICJwYXJzZV91cmwiLAogICAgICAgICJodHRwIiwKICAgICAgICAiaHR0cHMiLAogICAgICAgICJ3cyIsCiAgICAgICAgImZ0cCIsCiAgICAgICAgImRhdGEtdXJpIiwKICAgICAgICAiZmlsZS11cmkiLAogICAgICAgICJtaWRkbGV3YXJlIiwKICAgICAgICAicGFyc2Vfc3RyIiwKICAgICAgICAicXVlcnktc3RyaW5nIiwKICAgICAgICAicXVlcnlzdHJpbmciLAogICAgICAgICJob3N0bmFtZSIsCiAgICAgICAgInVyaS10ZW1wbGF0ZSIKICAgIF0sCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImhvbWVwYWdlIjogImh0dHBzOi8vdXJpLnRoZXBocGxlYWd1ZS5jb20iLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSIgOiAiSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEiLAogICAgICAgICAgICAiZW1haWwiIDogIm55YW1zcHJvZEBnbWFpbC5jb20iLAogICAgICAgICAgICAiaG9tZXBhZ2UiIDogImh0dHBzOi8vbnlhbXNwcm9kLmNvbSIKICAgICAgICB9CiAgICBdLAogICAgInN1cHBvcnQiOiB7CiAgICAgICAgImZvcnVtIjogImh0dHBzOi8vdGhlcGhwbGVhZ3VlLnNsYWNrLmNvbSIsCiAgICAgICAgImRvY3MiOiAiaHR0cHM6Ly91cmkudGhlcGhwbGVhZ3VlLmNvbSIsCiAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vdGhlcGhwbGVhZ3VlL3VyaS9pc3N1ZXMiCiAgICB9LAogICAgImZ1bmRpbmciOiBbCiAgICAgICAgewogICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9ueWFtc3Byb2QiCiAgICAgICAgfQogICAgXSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiOiAiXjcuNCB8fCBeOC4wIiwKICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgInBzci9odHRwLW1lc3NhZ2UiOiAiXjEuMCIsCiAgICAgICAgImxlYWd1ZS91cmktaW50ZXJmYWNlcyI6ICJeMi4zIgogICAgfSwKICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAiZnJpZW5kc29mcGhwL3BocC1jcy1maXhlciI6ICJedjMuMy4yIiwKICAgICAgICAibnlob2xtL3BzcjciOiAiXjEuNSIsCiAgICAgICAgInBocC1odHRwL3BzcjctaW50ZWdyYXRpb24tdGVzdHMiOiAiXjEuMSIsCiAgICAgICAgInBocHN0YW4vcGhwc3RhbiI6ICJeMS4yLjAiLAogICAgICAgICJwaHBzdGFuL3BocHN0YW4tZGVwcmVjYXRpb24tcnVsZXMiOiAiXjEuMCIsCiAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1waHB1bml0IjogIl4xLjAuMCIsCiAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1zdHJpY3QtcnVsZXMiOiAiXjEuMS4wIiwKICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl45LjUuMTAiLAogICAgICAgICJwc3IvaHR0cC1mYWN0b3J5IjogIl4xLjAiCiAgICB9LAogICAgImF1dG9sb2FkIjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIkxlYWd1ZVxcVXJpXFwiOiAic3JjIgogICAgICAgIH0KICAgIH0sCiAgICAiYXV0b2xvYWQtZGV2IjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIkxlYWd1ZVRlc3RcXFVyaVxcIjogInRlc3RzIgogICAgICAgIH0KICAgIH0sCiAgICAiY29uZmxpY3QiOiB7CiAgICAgICAgImxlYWd1ZS91cmktc2NoZW1lcyI6ICJeMS4wIgogICAgfSwKICAgICJzY3JpcHRzIjogewogICAgICAgICJwaHBjcyI6ICJwaHAtY3MtZml4ZXIgZml4IC12IC0tZGlmZiAtLWRyeS1ydW4gLS1hbGxvdy1yaXNreT15ZXMgLS1hbnNpIiwKICAgICAgICAicGhwY3M6Zml4IjogInBocC1jcy1maXhlciBmaXggLXZ2diAtLWFsbG93LXJpc2t5PXllcyAtLWFuc2kiLAogICAgICAgICJwaHBzdGFuIjogInBocHN0YW4gYW5hbHlzZSAtbCBtYXggLWMgcGhwc3Rhbi5uZW9uIHNyYyAtLWFuc2kgLS1tZW1vcnktbGltaXQ9MjU2TSIsCiAgICAgICAgInBocHVuaXQiOiAiWERFQlVHX01PREU9Y292ZXJhZ2UgcGhwdW5pdCAtLWNvdmVyYWdlLXRleHQiLAogICAgICAgICJ0ZXN0IjogWwogICAgICAgICAgICAiQHBocHVuaXQiLAogICAgICAgICAgICAiQHBocHN0YW4iLAogICAgICAgICAgICAiQHBocGNzIgogICAgICAgIF0KICAgIH0sCiAgICAic2NyaXB0cy1kZXNjcmlwdGlvbnMiOiB7CiAgICAgICAgInBocGNzIjogIlJ1bnMgY29kaW5nIHN0eWxlIHRlc3Qgc3VpdGUiLAogICAgICAgICJwaHBzdGFuIjogIlJ1bnMgY29tcGxldGUgY29kZWJhc2Ugc3RhdGljIGFuYWx5c2lzIiwKICAgICAgICAicGhwdW5pdCI6ICJSdW5zIHVuaXQgYW5kIGZ1bmN0aW9uYWwgdGVzdGluZyIsCiAgICAgICAgInRlc3QiOiAiUnVucyBmdWxsIHRlc3Qgc3VpdGUiCiAgICB9LAogICAgInN1Z2dlc3QiOiB7CiAgICAgICAgImxlYWd1ZS91cmktY29tcG9uZW50cyIgOiAiTmVlZGVkIHRvIGVhc2lseSBtYW5pcHVsYXRlIFVSSSBvYmplY3RzIiwKICAgICAgICAiZXh0LWludGwiIDogIk5lZWRlZCB0byBpbXByb3ZlIGhvc3QgdmFsaWRhdGlvbiIsCiAgICAgICAgImV4dC1maWxlaW5mbyI6ICJOZWVkZWQgdG8gY3JlYXRlIERhdGEgVVJJIGZyb20gYSBmaWxlcGF0aCIsCiAgICAgICAgInBzci9odHRwLWZhY3RvcnkiOiAiTmVlZGVkIHRvIHVzZSB0aGUgVVJJIGZhY3RvcnkiCiAgICB9LAogICAgImV4dHJhIjogewogICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjYueC1kZXYiCiAgICAgICAgfQogICAgfSwKICAgICJjb25maWciOiB7CiAgICAgICAgInNvcnQtcGFja2FnZXMiOiB0cnVlCiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTUgaWduYWNlIG55YW1hZ2FuYSBidXRlcmEKClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4KdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwp1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZgp0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sCnN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUwpGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IKQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSCklOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCkNPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/Exceptions/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/Exceptions/TemplateCanNotBeExpanded.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uczsKCnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBMZWFndWVcVXJpXENvbnRyYWN0c1xVcmlFeGNlcHRpb247CgpjbGFzcyBUZW1wbGF0ZUNhbk5vdEJlRXhwYW5kZWQgZXh0ZW5kcyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaW1wbGVtZW50cyBVcmlFeGNlcHRpb24KewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkdWVUb1VuYWJsZVRvUHJvY2Vzc1ZhbHVlTGlzdFdpdGhQcmVmaXgoc3RyaW5nICR2YXJpYWJsZU5hbWUpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCdUaGUgIjoiIG1vZGlmaWVyIGNhbiBub3QgYmUgYXBwbGllZCBvbiAiJy4kdmFyaWFibGVOYW1lLiciIHNpbmNlIGl0IGlzIGEgbGlzdCBvZiB2YWx1ZXMuJyk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkdWVUb05lc3RlZExpc3RPZlZhbHVlKHN0cmluZyAkdmFyaWFibGVOYW1lKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZignVGhlICInLiR2YXJpYWJsZU5hbWUuJyIgY2FuIG5vdCBiZSBhIG5lc3RlZCBsaXN0LicpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/Http.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmk7Cgp1c2UgSnNvblNlcmlhbGl6YWJsZTsKdXNlIExlYWd1ZVxVcmlcQ29udHJhY3RzXFVyaUludGVyZmFjZTsKdXNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uc1xTeW50YXhFcnJvcjsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlIGFzIFBzcjdVcmlJbnRlcmZhY2U7CnVzZSBmdW5jdGlvbiBpc19vYmplY3Q7CnVzZSBmdW5jdGlvbiBpc19zY2FsYXI7CnVzZSBmdW5jdGlvbiBtZXRob2RfZXhpc3RzOwp1c2UgZnVuY3Rpb24gc3ByaW50ZjsKCmZpbmFsIGNsYXNzIEh0dHAgaW1wbGVtZW50cyBQc3I3VXJpSW50ZXJmYWNlLCBKc29uU2VyaWFsaXphYmxlCnsKICAgIHByaXZhdGUgVXJpSW50ZXJmYWNlICR1cmk7CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdChVcmlJbnRlcmZhY2UgJHVyaSkKICAgIHsKICAgICAgICAkdGhpcy0+dmFsaWRhdGUoJHVyaSk7CiAgICAgICAgJHRoaXMtPnVyaSA9ICR1cmk7CiAgICB9CgogICAgLyoqCiAgICAgKiBWYWxpZGF0ZSB0aGUgc3VibWl0dGVkIHVyaSBhZ2FpbnN0IFBTUi03IFVyaUludGVyZmFjZS4KICAgICAqCiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yIGlmIHRoZSBnaXZlbiBVUkkgZG9lcyBub3QgZm9sbG93IFBTUi03IFVyaUludGVyZmFjZSBydWxlcwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHZhbGlkYXRlKFVyaUludGVyZmFjZSAkdXJpKTogdm9pZAogICAgewogICAgICAgICRzY2hlbWUgPSAkdXJpLT5nZXRTY2hlbWUoKTsKICAgICAgICBpZiAobnVsbCA9PT0gJHNjaGVtZSAmJiAnJyA9PT0gJHVyaS0+Z2V0SG9zdCgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzcHJpbnRmKCdhbiBVUkkgd2l0aG91dCBzY2hlbWUgY2FuIG5vdCBjb250YWlucyBhIGVtcHR5IGhvc3Qgc3RyaW5nIGFjY29yZGluZyB0byBQU1ItNzogJXMnLCAoc3RyaW5nKSAkdXJpKSk7CiAgICAgICAgfQoKICAgICAgICAkcG9ydCA9ICR1cmktPmdldFBvcnQoKTsKICAgICAgICBpZiAobnVsbCAhPT0gJHBvcnQgJiYgKCRwb3J0IDwgMCB8fCAkcG9ydCA+IDY1NTM1KSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ByaW50ZignVGhlIFVSSSBwb3J0IGlzIG91dHNpZGUgdGhlIGVzdGFibGlzaGVkIFRDUCBhbmQgVURQIHBvcnQgcmFuZ2VzOiAlcycsIChzdHJpbmcpICR1cmktPmdldFBvcnQoKSkpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFN0YXRpYyBtZXRob2QgY2FsbGVkIGJ5IFBIUCdzIHZhciBleHBvcnQuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gX19zZXRfc3RhdGUoYXJyYXkgJGNvbXBvbmVudHMpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRjb21wb25lbnRzWyd1cmknXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2UgZnJvbSBhIHN0cmluZy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfG1peGVkICR1cmkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tU3RyaW5nKCR1cmkgPSAnJyk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoVXJpOjpjcmVhdGVGcm9tU3RyaW5nKCR1cmkpKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBmcm9tIGEgaGFzaCBvZiBwYXJzZV91cmwgcGFydHMuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRjb21wb25lbnRzIGEgaGFzaCByZXByZXNlbnRhdGlvbiBvZiB0aGUgVVJJIHNpbWlsYXIKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0byBQSFAgcGFyc2VfdXJsIGZ1bmN0aW9uIHJlc3VsdAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21Db21wb25lbnRzKGFycmF5ICRjb21wb25lbnRzKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZihVcmk6OmNyZWF0ZUZyb21Db21wb25lbnRzKCRjb21wb25lbnRzKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2UgZnJvbSB0aGUgZW52aXJvbm1lbnQuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVNlcnZlcihhcnJheSAkc2VydmVyKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZihVcmk6OmNyZWF0ZUZyb21TZXJ2ZXIoJHNlcnZlcikpOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIGZyb20gYSBVUkkgYW5kIGEgQmFzZSBVUkkuCiAgICAgKgogICAgICogVGhlIHJldHVybmVkIFVSSSBtdXN0IGJlIGFic29sdXRlLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdXJpICAgICAgdGhlIGlucHV0IFVSSSB0byBjcmVhdGUKICAgICAqIEBwYXJhbSBtaXhlZCAkYmFzZV91cmkgdGhlIGJhc2UgVVJJIHVzZWQgZm9yIHJlZmVyZW5jZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21CYXNlVXJpKCR1cmksICRiYXNlX3VyaSA9IG51bGwpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKFVyaTo6Y3JlYXRlRnJvbUJhc2VVcmkoJHVyaSwgJGJhc2VfdXJpKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2UgZnJvbSBhIFVSSSBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIFBzcjdVcmlJbnRlcmZhY2V8VXJpSW50ZXJmYWNlICR1cmkgdGhlIGlucHV0IFVSSSB0byBjcmVhdGUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tVXJpKCR1cmkpOiBzZWxmCiAgICB7CiAgICAgICAgaWYgKCR1cmkgaW5zdGFuY2VvZiBVcmlJbnRlcmZhY2UpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCR1cmkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKFVyaTo6Y3JlYXRlRnJvbVVyaSgkdXJpKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTY2hlbWUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIChzdHJpbmcpICR0aGlzLT51cmktPmdldFNjaGVtZSgpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXV0aG9yaXR5KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAoc3RyaW5nKSAkdGhpcy0+dXJpLT5nZXRBdXRob3JpdHkoKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFVzZXJJbmZvKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAoc3RyaW5nKSAkdGhpcy0+dXJpLT5nZXRVc2VySW5mbygpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SG9zdCgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gKHN0cmluZykgJHRoaXMtPnVyaS0+Z2V0SG9zdCgpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UG9ydCgpOiA/aW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51cmktPmdldFBvcnQoKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBhdGgoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51cmktPmdldFBhdGgoKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFF1ZXJ5KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAoc3RyaW5nKSAkdGhpcy0+dXJpLT5nZXRRdWVyeSgpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RnJhZ21lbnQoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIChzdHJpbmcpICR0aGlzLT51cmktPmdldEZyYWdtZW50KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoU2NoZW1lKCRzY2hlbWUpOiBzZWxmCiAgICB7CiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRzY2hlbWUgKi8KICAgICAgICAkc2NoZW1lID0gJHRoaXMtPmZpbHRlcklucHV0KCRzY2hlbWUpOwogICAgICAgIGlmICgnJyA9PT0gJHNjaGVtZSkgewogICAgICAgICAgICAkc2NoZW1lID0gbnVsbDsKICAgICAgICB9CgogICAgICAgICR1cmkgPSAkdGhpcy0+dXJpLT53aXRoU2NoZW1lKCRzY2hlbWUpOwogICAgICAgIGlmICgoc3RyaW5nKSAkdXJpID09PSAoc3RyaW5nKSAkdGhpcy0+dXJpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkdXJpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNhZmVseSBzdHJpbmdpZnkgaW5wdXQgd2hlbiBwb3NzaWJsZS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHN0ciB0aGUgdmFsdWUgdG8gZXZhbHVhdGUgYXMgYSBzdHJpbmcKICAgICAqCiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yIGlmIHRoZSBzdWJtaXR0ZWQgZGF0YSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBzdHJpbmcKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xtaXhlZAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZpbHRlcklucHV0KCRzdHIpCiAgICB7CiAgICAgICAgaWYgKGlzX3NjYWxhcigkc3RyKSB8fCAoaXNfb2JqZWN0KCRzdHIpICYmIG1ldGhvZF9leGlzdHMoJHN0ciwgJ19fdG9TdHJpbmcnKSkpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpICRzdHI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHN0cjsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhVc2VySW5mbygkdXNlciwgJHBhc3N3b3JkID0gbnVsbCk6IHNlbGYKICAgIHsKICAgICAgICAvKiogQHZhciBzdHJpbmcgJHVzZXIgKi8KICAgICAgICAkdXNlciA9ICR0aGlzLT5maWx0ZXJJbnB1dCgkdXNlcik7CiAgICAgICAgaWYgKCcnID09PSAkdXNlcikgewogICAgICAgICAgICAkdXNlciA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICAkdXJpID0gJHRoaXMtPnVyaS0+d2l0aFVzZXJJbmZvKCR1c2VyLCAkcGFzc3dvcmQpOwogICAgICAgIGlmICgoc3RyaW5nKSAkdXJpID09PSAoc3RyaW5nKSAkdGhpcy0+dXJpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkdXJpKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhIb3N0KCRob3N0KTogc2VsZgogICAgewogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkaG9zdCAqLwogICAgICAgICRob3N0ID0gJHRoaXMtPmZpbHRlcklucHV0KCRob3N0KTsKICAgICAgICBpZiAoJycgPT09ICRob3N0KSB7CiAgICAgICAgICAgICRob3N0ID0gbnVsbDsKICAgICAgICB9CgogICAgICAgICR1cmkgPSAkdGhpcy0+dXJpLT53aXRoSG9zdCgkaG9zdCk7CiAgICAgICAgaWYgKChzdHJpbmcpICR1cmkgPT09IChzdHJpbmcpICR0aGlzLT51cmkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCR1cmkpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFBvcnQoJHBvcnQpOiBzZWxmCiAgICB7CiAgICAgICAgJHVyaSA9ICR0aGlzLT51cmktPndpdGhQb3J0KCRwb3J0KTsKICAgICAgICBpZiAoKHN0cmluZykgJHVyaSA9PT0gKHN0cmluZykgJHRoaXMtPnVyaSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJHVyaSk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUGF0aCgkcGF0aCk6IHNlbGYKICAgIHsKICAgICAgICAkdXJpID0gJHRoaXMtPnVyaS0+d2l0aFBhdGgoJHBhdGgpOwogICAgICAgIGlmICgoc3RyaW5nKSAkdXJpID09PSAoc3RyaW5nKSAkdGhpcy0+dXJpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkdXJpKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhRdWVyeSgkcXVlcnkpOiBzZWxmCiAgICB7CiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRxdWVyeSAqLwogICAgICAgICRxdWVyeSA9ICR0aGlzLT5maWx0ZXJJbnB1dCgkcXVlcnkpOwogICAgICAgIGlmICgnJyA9PT0gJHF1ZXJ5KSB7CiAgICAgICAgICAgICRxdWVyeSA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICAkdXJpID0gJHRoaXMtPnVyaS0+d2l0aFF1ZXJ5KCRxdWVyeSk7CiAgICAgICAgaWYgKChzdHJpbmcpICR1cmkgPT09IChzdHJpbmcpICR0aGlzLT51cmkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCR1cmkpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEZyYWdtZW50KCRmcmFnbWVudCk6IHNlbGYKICAgIHsKICAgICAgICAvKiogQHZhciBzdHJpbmcgJGZyYWdtZW50ICovCiAgICAgICAgJGZyYWdtZW50ID0gJHRoaXMtPmZpbHRlcklucHV0KCRmcmFnbWVudCk7CiAgICAgICAgaWYgKCcnID09PSAkZnJhZ21lbnQpIHsKICAgICAgICAgICAgJGZyYWdtZW50ID0gbnVsbDsKICAgICAgICB9CgogICAgICAgICR1cmkgPSAkdGhpcy0+dXJpLT53aXRoRnJhZ21lbnQoJGZyYWdtZW50KTsKICAgICAgICBpZiAoKHN0cmluZykgJHVyaSA9PT0gKHN0cmluZykgJHRoaXMtPnVyaSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJHVyaSk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dXJpLT5fX3RvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dXJpLT5fX3RvU3RyaW5nKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/HttpFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmk7Cgp1c2UgUHNyXEh0dHBcTWVzc2FnZVxVcmlGYWN0b3J5SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2U7CgpmaW5hbCBjbGFzcyBIdHRwRmFjdG9yeSBpbXBsZW1lbnRzIFVyaUZhY3RvcnlJbnRlcmZhY2UKewogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZVVyaShzdHJpbmcgJHVyaSA9ICcnKTogVXJpSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuIEh0dHA6OmNyZWF0ZUZyb21TdHJpbmcoJHVyaSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/Uri.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmk7Cgp1c2UgZmluZm87CnVzZSBMZWFndWVcVXJpXENvbnRyYWN0c1xVcmlJbnRlcmZhY2U7CnVzZSBMZWFndWVcVXJpXEV4Y2VwdGlvbnNcRmlsZWluZm9TdXBwb3J0TWlzc2luZzsKdXNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uc1xJZG5hQ29udmVyc2lvbkZhaWxlZDsKdXNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uc1xJZG5TdXBwb3J0TWlzc2luZzsKdXNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uc1xTeW50YXhFcnJvcjsKdXNlIExlYWd1ZVxVcmlcSWRuYVxJZG5hOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2UgYXMgUHNyN1VyaUludGVyZmFjZTsKdXNlIFR5cGVFcnJvcjsKdXNlIGZ1bmN0aW9uIGFycmF5X2ZpbHRlcjsKdXNlIGZ1bmN0aW9uIGFycmF5X21hcDsKdXNlIGZ1bmN0aW9uIGJhc2U2NF9kZWNvZGU7CnVzZSBmdW5jdGlvbiBiYXNlNjRfZW5jb2RlOwp1c2UgZnVuY3Rpb24gY291bnQ7CnVzZSBmdW5jdGlvbiBleHBsb2RlOwp1c2UgZnVuY3Rpb24gZmlsZV9nZXRfY29udGVudHM7CnVzZSBmdW5jdGlvbiBmaWx0ZXJfdmFyOwp1c2UgZnVuY3Rpb24gaW1wbG9kZTsKdXNlIGZ1bmN0aW9uIGluX2FycmF5Owp1c2UgZnVuY3Rpb24gaW5ldF9wdG9uOwp1c2UgZnVuY3Rpb24gaXNfb2JqZWN0Owp1c2UgZnVuY3Rpb24gaXNfc2NhbGFyOwp1c2UgZnVuY3Rpb24gbWV0aG9kX2V4aXN0czsKdXNlIGZ1bmN0aW9uIHByZWdfbWF0Y2g7CnVzZSBmdW5jdGlvbiBwcmVnX3JlcGxhY2U7CnVzZSBmdW5jdGlvbiBwcmVnX3JlcGxhY2VfY2FsbGJhY2s7CnVzZSBmdW5jdGlvbiByYXd1cmxlbmNvZGU7CnVzZSBmdW5jdGlvbiBzcHJpbnRmOwp1c2UgZnVuY3Rpb24gc3RyX3JlcGxhY2U7CnVzZSBmdW5jdGlvbiBzdHJsZW47CnVzZSBmdW5jdGlvbiBzdHJwb3M7CnVzZSBmdW5jdGlvbiBzdHJzcG47CnVzZSBmdW5jdGlvbiBzdHJ0b2xvd2VyOwp1c2UgZnVuY3Rpb24gc3Vic3RyOwp1c2UgY29uc3QgRklMRUlORk9fTUlNRTsKdXNlIGNvbnN0IEZJTFRFUl9GTEFHX0lQVjQ7CnVzZSBjb25zdCBGSUxURVJfRkxBR19JUFY2Owp1c2UgY29uc3QgRklMVEVSX05VTExfT05fRkFJTFVSRTsKdXNlIGNvbnN0IEZJTFRFUl9WQUxJREFURV9CT09MRUFOOwp1c2UgY29uc3QgRklMVEVSX1ZBTElEQVRFX0lQOwoKZmluYWwgY2xhc3MgVXJpIGltcGxlbWVudHMgVXJpSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUkZDMzk4NiBpbnZhbGlkIGNoYXJhY3RlcnMuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0yLjIKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFJFR0VYUF9JTlZBTElEX0NIQVJTID0gJy9bXHgwMC1ceDFmXHg3Zl0vJzsKCiAgICAvKioKICAgICAqIFJGQzM5ODYgU3ViIGRlbGltaXRlciBjaGFyYWN0ZXJzIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMi4yCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBSRUdFWFBfQ0hBUlNfU1VCREVMSU0gPSAiXCFcJCYnXChcKVwqXCssO1w9JSI7CgogICAgLyoqCiAgICAgKiBSRkMzOTg2IHVucmVzZXJ2ZWQgY2hhcmFjdGVycyByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybi4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTIuMwogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgY29uc3QgUkVHRVhQX0NIQVJTX1VOUkVTRVJWRUQgPSAnQS1aYS16MC05X1wtXC5+JzsKCiAgICAvKioKICAgICAqIFJGQzM5ODYgc2NoZW1hIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4xCiAgICAgKi8KICAgIHByaXZhdGUgY29uc3QgUkVHRVhQX1NDSEVNRSA9ICcsXlthLXpdKFstYS16MC05Ky5dKyk/JCxpJzsKCiAgICAvKioKICAgICAqIFJGQzM5ODYgaG9zdCBpZGVudGlmaWVkIGJ5IGEgcmVnaXN0ZXJlZCBuYW1lIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4yLjIKICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBSRUdFWFBfSE9TVF9SRUdOQU1FID0gJy9eKAogICAgICAgICg/PHVucmVzZXJ2ZWQ+W2EtejAtOV9+XC1cLl0pfAogICAgICAgICg/PHN1Yl9kZWxpbXM+WyEkJlwnKCkqKyw7PV0pfAogICAgICAgICg/PGVuY29kZWQ+JVtBLUYwLTldezJ9KQogICAgKSskL3gnOwoKICAgIC8qKgogICAgICogUkZDMzk4NiBkZWxpbWl0ZXJzIG9mIHRoZSBnZW5lcmljIFVSSSBjb21wb25lbnRzIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMi4yCiAgICAgKi8KICAgIHByaXZhdGUgY29uc3QgUkVHRVhQX0hPU1RfR0VOX0RFTElNUyA9ICcvWzpcLz8jXFtcXUAgXS8nOyAvLyBBbHNvIGluY2x1ZGVzIHNwYWNlLgoKICAgIC8qKgogICAgICogUkZDMzk4NiBJUHZGdXR1cmUgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4uCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjIuMgogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFJFR0VYUF9IT1NUX0lQRlVUVVJFID0gJy9eCiAgICAgICAgdig/PHZlcnNpb24+W0EtRjAtOV0pK1wuCiAgICAgICAgKD86CiAgICAgICAgICAgICg/PHVucmVzZXJ2ZWQ+W2EtejAtOV9+XC1cLl0pfAogICAgICAgICAgICAoPzxzdWJfZGVsaW1zPlshJCZcJygpKissOz06XSkgICMgYWxzbyBpbmNsdWRlIHRoZSA6IGNoYXJhY3RlcgogICAgICAgICkrCiAgICAkL2l4JzsKCiAgICAvKioKICAgICAqIFJGQzM5ODYgSVB2RnV0dXJlIGhvc3QgYW5kIHBvcnQgY29tcG9uZW50LgogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFJFR0VYUF9IT1NUX1BPUlQgPSAnLF4oPzxob3N0PihcWy4qXXxbXjpdKSopKDooPzxwb3J0PlteLz8jXSopKT8kLHgnOwoKICAgIC8qKgogICAgICogU2lnbmlmaWNhbnQgMTAgYml0cyBvZiBJUCB0byBkZXRlY3QgWm9uZSBJRCByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybi4KICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBIT1NUX0FERFJFU1NfQkxPQ0sgPSAiXHhmZVx4ODAiOwoKICAgIC8qKgogICAgICogUmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gdG8gZm9yIGZpbGUgVVJJLgogICAgICogPHZvbHVtZT4gY29udGFpbnMgdGhlIHZvbHVtZSBidXQgbm90IHRoZSB2b2x1bWUgc2VwYXJhdG9yLgogICAgICogVGhlIHZvbHVtZSBzZXBhcmF0b3IgbWF5IGJlIFVSTC1lbmNvZGVkIChgfGAgYXMgYCU3Q2ApIGJ5IDo6Zm9ybWF0UGF0aCgpLAogICAgICogc28gd2UgYWNjb3VudCBmb3IgdGhhdCBoZXJlLgogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFJFR0VYUF9GSUxFX1BBVEggPSAnLF4oPzxkZWxpbT4vKT8oPzx2b2x1bWU+W2EtekEtWl0pKD86Wzp8XHxdfCU3QykoPzxyZXN0Pi4qKT8sJzsKCiAgICAvKioKICAgICAqIE1pbWV0eXBlIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMzk3CiAgICAgKi8KICAgIHByaXZhdGUgY29uc3QgUkVHRVhQX01JTUVUWVBFID0gJyxeXHcrL1stLlx3XSsoPzpcK1stLlx3XSspPyQsJzsKCiAgICAvKioKICAgICAqIEJhc2U2NCBjb250ZW50IHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMzk3CiAgICAgKi8KICAgIHByaXZhdGUgY29uc3QgUkVHRVhQX0JJTkFSWSA9ICcsKDt8XiliYXNlNjQkLCc7CgogICAgLyoqCiAgICAgKiBXaW5kb3dzIGZpbGUgcGF0aCBzdHJpbmcgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4uCiAgICAgKiA8cm9vdD4gY29udGFpbnMgYm90aCB0aGUgdm9sdW1lIGFuZCB2b2x1bWUgc2VwYXJhdG9yLgogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFJFR0VYUF9XSU5ET1dfUEFUSCA9ICcsXig/PHJvb3Q+W2EtekEtWl1bOnxcfF0pLCc7CgogICAgLyoqCiAgICAgKiBTdXBwb3J0ZWQgc2NoZW1lcyBhbmQgY29ycmVzcG9uZGluZyBkZWZhdWx0IHBvcnQuCiAgICAgKgogICAgICogQHZhciBhcnJheTxzdHJpbmcsIGludHxudWxsPgogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFNDSEVNRV9ERUZBVUxUX1BPUlQgPSBbCiAgICAgICAgJ2RhdGEnID0+IG51bGwsCiAgICAgICAgJ2ZpbGUnID0+IG51bGwsCiAgICAgICAgJ2Z0cCcgPT4gMjEsCiAgICAgICAgJ2dvcGhlcicgPT4gNzAsCiAgICAgICAgJ2h0dHAnID0+IDgwLAogICAgICAgICdodHRwcycgPT4gNDQzLAogICAgICAgICd3cycgPT4gODAsCiAgICAgICAgJ3dzcycgPT4gNDQzLAogICAgXTsKCiAgICAvKioKICAgICAqIFVSSSB2YWxpZGF0aW9uIG1ldGhvZHMgcGVyIHNjaGVtZS4KICAgICAqCiAgICAgKiBAdmFyIGFycmF5PHN0cmluZz4KICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBTQ0hFTUVfVkFMSURBVElPTl9NRVRIT0QgPSBbCiAgICAgICAgJ2RhdGEnID0+ICdpc1VyaVdpdGhTY2hlbWVBbmRQYXRoT25seScsCiAgICAgICAgJ2ZpbGUnID0+ICdpc1VyaVdpdGhTY2hlbWVIb3N0QW5kUGF0aE9ubHknLAogICAgICAgICdmdHAnID0+ICdpc05vbkVtcHR5SG9zdFVyaVdpdGhvdXRGcmFnbWVudEFuZFF1ZXJ5JywKICAgICAgICAnZ29waGVyJyA9PiAnaXNOb25FbXB0eUhvc3RVcmlXaXRob3V0RnJhZ21lbnRBbmRRdWVyeScsCiAgICAgICAgJ2h0dHAnID0+ICdpc05vbkVtcHR5SG9zdFVyaScsCiAgICAgICAgJ2h0dHBzJyA9PiAnaXNOb25FbXB0eUhvc3RVcmknLAogICAgICAgICd3cycgPT4gJ2lzTm9uRW1wdHlIb3N0VXJpV2l0aG91dEZyYWdtZW50JywKICAgICAgICAnd3NzJyA9PiAnaXNOb25FbXB0eUhvc3RVcmlXaXRob3V0RnJhZ21lbnQnLAogICAgXTsKCiAgICAvKioKICAgICAqIEFsbCBBU0NJSSBsZXR0ZXJzIHNvcnRlZCBieSB0eXBpY2FsIGZyZXF1ZW5jeSBvZiBvY2N1cnJlbmNlLgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgY29uc3QgQVNDSUkgPSAiXHgyMFx4NjVceDY5XHg2MVx4NzNceDZFXHg3NFx4NzJceDZGXHg2Q1x4NzVceDY0XHg1RFx4NUJceDYzXHg2RFx4NzBceDI3XHgwQVx4NjdceDdDXHg2OFx4NzZceDJFXHg2Nlx4NjJceDJDXHgzQVx4M0RceDJEXHg3MVx4MzFceDMwXHg0M1x4MzJceDJBXHg3OVx4NzhceDI5XHgyOFx4NENceDM5XHg0MVx4NTNceDJGXHg1MFx4MjJceDQ1XHg2QVx4NERceDQ5XHg2Qlx4MzNceDNFXHgzNVx4NTRceDNDXHg0NFx4MzRceDdEXHg0Mlx4N0JceDM4XHg0Nlx4NzdceDUyXHgzNlx4MzdceDU1XHg0N1x4NEVceDNCXHg0QVx4N0FceDU2XHgyM1x4NDhceDRGXHg1N1x4NUZceDI2XHgyMVx4NEJceDNGXHg1OFx4NTFceDI1XHg1OVx4NUNceDA5XHg1QVx4MkJceDdFXHg1RVx4MjRceDQwXHg2MFx4N0ZceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDhceDBCXHgwQ1x4MERceDBFXHgwRlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFBXHgxQlx4MUNceDFEXHgxRVx4MUYiOwoKICAgIHByaXZhdGUgP3N0cmluZyAkc2NoZW1lOwogICAgcHJpdmF0ZSA/c3RyaW5nICR1c2VyX2luZm87CiAgICBwcml2YXRlID9zdHJpbmcgJGhvc3Q7CiAgICBwcml2YXRlID9pbnQgJHBvcnQ7CiAgICBwcml2YXRlID9zdHJpbmcgJGF1dGhvcml0eTsKICAgIHByaXZhdGUgc3RyaW5nICRwYXRoID0gJyc7CiAgICBwcml2YXRlID9zdHJpbmcgJHF1ZXJ5OwogICAgcHJpdmF0ZSA/c3RyaW5nICRmcmFnbWVudDsKICAgIHByaXZhdGUgP3N0cmluZyAkdXJpOwoKICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgP3N0cmluZyAkc2NoZW1lLAogICAgICAgID9zdHJpbmcgJHVzZXIsCiAgICAgICAgP3N0cmluZyAkcGFzcywKICAgICAgICA/c3RyaW5nICRob3N0LAogICAgICAgID9pbnQgJHBvcnQsCiAgICAgICAgc3RyaW5nICRwYXRoLAogICAgICAgID9zdHJpbmcgJHF1ZXJ5LAogICAgICAgID9zdHJpbmcgJGZyYWdtZW50CiAgICApIHsKICAgICAgICAkdGhpcy0+c2NoZW1lID0gJHRoaXMtPmZvcm1hdFNjaGVtZSgkc2NoZW1lKTsKICAgICAgICAkdGhpcy0+dXNlcl9pbmZvID0gJHRoaXMtPmZvcm1hdFVzZXJJbmZvKCR1c2VyLCAkcGFzcyk7CiAgICAgICAgJHRoaXMtPmhvc3QgPSAkdGhpcy0+Zm9ybWF0SG9zdCgkaG9zdCk7CiAgICAgICAgJHRoaXMtPnBvcnQgPSAkdGhpcy0+Zm9ybWF0UG9ydCgkcG9ydCk7CiAgICAgICAgJHRoaXMtPmF1dGhvcml0eSA9ICR0aGlzLT5zZXRBdXRob3JpdHkoKTsKICAgICAgICAkdGhpcy0+cGF0aCA9ICR0aGlzLT5mb3JtYXRQYXRoKCRwYXRoKTsKICAgICAgICAkdGhpcy0+cXVlcnkgPSAkdGhpcy0+Zm9ybWF0UXVlcnlBbmRGcmFnbWVudCgkcXVlcnkpOwogICAgICAgICR0aGlzLT5mcmFnbWVudCA9ICR0aGlzLT5mb3JtYXRRdWVyeUFuZEZyYWdtZW50KCRmcmFnbWVudCk7CiAgICAgICAgJHRoaXMtPmFzc2VydFZhbGlkU3RhdGUoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEZvcm1hdCB0aGUgU2NoZW1lIGFuZCBIb3N0IGNvbXBvbmVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gID9zdHJpbmcgICAgICRzY2hlbWUKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgaWYgdGhlIHNjaGVtZSBpcyBpbnZhbGlkCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZm9ybWF0U2NoZW1lKD9zdHJpbmcgJHNjaGVtZSk6ID9zdHJpbmcKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJHNjaGVtZSkgewogICAgICAgICAgICByZXR1cm4gJHNjaGVtZTsKICAgICAgICB9CgogICAgICAgICRmb3JtYXR0ZWRfc2NoZW1lID0gc3RydG9sb3dlcigkc2NoZW1lKTsKICAgICAgICBpZiAoMSA9PT0gcHJlZ19tYXRjaChzZWxmOjpSRUdFWFBfU0NIRU1FLCAkZm9ybWF0dGVkX3NjaGVtZSkpIHsKICAgICAgICAgICAgcmV0dXJuICRmb3JtYXR0ZWRfc2NoZW1lOwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKHNwcmludGYoJ1RoZSBzY2hlbWUgYCVzYCBpcyBpbnZhbGlkLicsICRzY2hlbWUpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgVXNlckluZm8gY29tcG9uZW50LgogICAgICogQHBhcmFtID9zdHJpbmcgJHVzZXIKICAgICAqIEBwYXJhbSA/c3RyaW5nICRwYXNzd29yZAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZvcm1hdFVzZXJJbmZvKD9zdHJpbmcgJHVzZXIsID9zdHJpbmcgJHBhc3N3b3JkKTogP3N0cmluZwogICAgewogICAgICAgIGlmIChudWxsID09PSAkdXNlcikgewogICAgICAgICAgICByZXR1cm4gJHVzZXI7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgJHVzZXJfcGF0dGVybiA9ICcvKD86W14lJy5zZWxmOjpSRUdFWFBfQ0hBUlNfVU5SRVNFUlZFRC5zZWxmOjpSRUdFWFBfQ0hBUlNfU1VCREVMSU0uJ10rK3wlKD8hW0EtRmEtZjAtOV17Mn0pKS8nOwogICAgICAgICR1c2VyID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCR1c2VyX3BhdHRlcm4sIFtVcmk6OmNsYXNzLCAndXJsRW5jb2RlTWF0Y2gnXSwgJHVzZXIpOwogICAgICAgIGlmIChudWxsID09PSAkcGFzc3dvcmQpIHsKICAgICAgICAgICAgcmV0dXJuICR1c2VyOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljICRwYXNzd29yZF9wYXR0ZXJuID0gJy8oPzpbXiU6Jy5zZWxmOjpSRUdFWFBfQ0hBUlNfVU5SRVNFUlZFRC5zZWxmOjpSRUdFWFBfQ0hBUlNfU1VCREVMSU0uJ10rK3wlKD8hW0EtRmEtZjAtOV17Mn0pKS8nOwoKICAgICAgICByZXR1cm4gJHVzZXIuJzonLnByZWdfcmVwbGFjZV9jYWxsYmFjaygkcGFzc3dvcmRfcGF0dGVybiwgW1VyaTo6Y2xhc3MsICd1cmxFbmNvZGVNYXRjaCddLCAkcGFzc3dvcmQpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgUkZDMzk4NiBlbmNvZGVkIHN0cmluZyBtYXRjaGVkLgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiB1cmxFbmNvZGVNYXRjaChhcnJheSAkbWF0Y2hlcyk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiByYXd1cmxlbmNvZGUoJG1hdGNoZXNbMF0pOwogICAgfQoKICAgIC8qKgogICAgICogVmFsaWRhdGUgYW5kIEZvcm1hdCB0aGUgSG9zdCBjb21wb25lbnQuCiAgICAgKiBAcGFyYW0gP3N0cmluZyAkaG9zdAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZvcm1hdEhvc3QoP3N0cmluZyAkaG9zdCk6ID9zdHJpbmcKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJGhvc3QgfHwgJycgPT09ICRob3N0KSB7CiAgICAgICAgICAgIHJldHVybiAkaG9zdDsKICAgICAgICB9CgogICAgICAgIGlmICgnWycgIT09ICRob3N0WzBdKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+Zm9ybWF0UmVnaXN0ZXJlZE5hbWUoJGhvc3QpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5mb3JtYXRJcCgkaG9zdCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBWYWxpZGF0ZSBhbmQgZm9ybWF0IGEgcmVnaXN0ZXJlZCBuYW1lLgogICAgICoKICAgICAqIFRoZSBob3N0IGlzIGNvbnZlcnRlZCB0byBpdHMgYXNjaWkgcmVwcmVzZW50YXRpb24gaWYgbmVlZGVkCiAgICAgKgogICAgICogQHRocm93cyBJZG5TdXBwb3J0TWlzc2luZyBpZiB0aGUgc3VibWl0dGVkIGhvc3QgcmVxdWlyZWQgbWlzc2luZyBvciBtaXNjb25maWd1cmVkIElETiBzdXBwb3J0CiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yICAgICAgIGlmIHRoZSBzdWJtaXR0ZWQgaG9zdCBpcyBub3QgYSB2YWxpZCByZWdpc3RlcmVkIG5hbWUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBmb3JtYXRSZWdpc3RlcmVkTmFtZShzdHJpbmcgJGhvc3QpOiBzdHJpbmcKICAgIHsKICAgICAgICAkZm9ybWF0dGVkX2hvc3QgPSByYXd1cmxkZWNvZGUoJGhvc3QpOwogICAgICAgIGlmICgxID09PSBwcmVnX21hdGNoKHNlbGY6OlJFR0VYUF9IT1NUX1JFR05BTUUsICRmb3JtYXR0ZWRfaG9zdCkpIHsKICAgICAgICAgICAgcmV0dXJuICRmb3JtYXR0ZWRfaG9zdDsKICAgICAgICB9CgogICAgICAgIGlmICgxID09PSBwcmVnX21hdGNoKHNlbGY6OlJFR0VYUF9IT1NUX0dFTl9ERUxJTVMsICRmb3JtYXR0ZWRfaG9zdCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKHNwcmludGYoJ1RoZSBob3N0IGAlc2AgaXMgaW52YWxpZCA6IGEgcmVnaXN0ZXJlZCBuYW1lIGNhbiBub3QgY29udGFpbiBVUkkgZGVsaW1pdGVycyBvciBzcGFjZXMnLCAkaG9zdCkpOwogICAgICAgIH0KCiAgICAgICAgJGluZm8gPSBJZG5hOjp0b0FzY2lpKCRob3N0LCBJZG5hOjpJRE5BMjAwOF9BU0NJSSk7CiAgICAgICAgaWYgKDAgIT09ICRpbmZvLT5lcnJvcnMoKSkgewogICAgICAgICAgICB0aHJvdyBJZG5hQ29udmVyc2lvbkZhaWxlZDo6ZHVlVG9JRE5BRXJyb3IoJGhvc3QsICRpbmZvKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkaW5mby0+cmVzdWx0KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBWYWxpZGF0ZSBhbmQgRm9ybWF0IHRoZSBJUHY2L0lQdmZ1dHVyZSBob3N0LgogICAgICoKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgaWYgdGhlIHN1Ym1pdHRlZCBob3N0IGlzIG5vdCBhIHZhbGlkIElQIGhvc3QKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBmb3JtYXRJcChzdHJpbmcgJGhvc3QpOiBzdHJpbmcKICAgIHsKICAgICAgICAkaXAgPSBzdWJzdHIoJGhvc3QsIDEsIC0xKTsKICAgICAgICBpZiAoZmFsc2UgIT09IGZpbHRlcl92YXIoJGlwLCBGSUxURVJfVkFMSURBVEVfSVAsIEZJTFRFUl9GTEFHX0lQVjYpKSB7CiAgICAgICAgICAgIHJldHVybiAkaG9zdDsKICAgICAgICB9CgogICAgICAgIGlmICgxID09PSBwcmVnX21hdGNoKHNlbGY6OlJFR0VYUF9IT1NUX0lQRlVUVVJFLCAkaXAsICRtYXRjaGVzKSAmJiAhaW5fYXJyYXkoJG1hdGNoZXNbJ3ZlcnNpb24nXSwgWyc0JywgJzYnXSwgdHJ1ZSkpIHsKICAgICAgICAgICAgcmV0dXJuICRob3N0OwogICAgICAgIH0KCiAgICAgICAgJHBvcyA9IHN0cnBvcygkaXAsICclJyk7CiAgICAgICAgaWYgKGZhbHNlID09PSAkcG9zKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzcHJpbnRmKCdUaGUgaG9zdCBgJXNgIGlzIGludmFsaWQgOiB0aGUgSVAgaG9zdCBpcyBtYWxmb3JtZWQnLCAkaG9zdCkpOwogICAgICAgIH0KCiAgICAgICAgaWYgKDEgPT09IHByZWdfbWF0Y2goc2VsZjo6UkVHRVhQX0hPU1RfR0VOX0RFTElNUywgcmF3dXJsZGVjb2RlKHN1YnN0cigkaXAsICRwb3MpKSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKHNwcmludGYoJ1RoZSBob3N0IGAlc2AgaXMgaW52YWxpZCA6IHRoZSBJUCBob3N0IGlzIG1hbGZvcm1lZCcsICRob3N0KSk7CiAgICAgICAgfQoKICAgICAgICAkaXAgPSBzdWJzdHIoJGlwLCAwLCAkcG9zKTsKICAgICAgICBpZiAoZmFsc2UgPT09IGZpbHRlcl92YXIoJGlwLCBGSUxURVJfVkFMSURBVEVfSVAsIEZJTFRFUl9GTEFHX0lQVjYpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzcHJpbnRmKCdUaGUgaG9zdCBgJXNgIGlzIGludmFsaWQgOiB0aGUgSVAgaG9zdCBpcyBtYWxmb3JtZWQnLCAkaG9zdCkpOwogICAgICAgIH0KCiAgICAgICAgLy9Pbmx5IHRoZSBhZGRyZXNzIGJsb2NrIGZlODA6Oi8xMCBjYW4gaGF2ZSBhIFpvbmUgSUQgYXR0YWNoIHRvCiAgICAgICAgLy9sZXQncyBkZXRlY3QgdGhlIGxpbmsgbG9jYWwgc2lnbmlmaWNhbnQgMTAgYml0cwogICAgICAgIGlmICgwID09PSBzdHJwb3MoKHN0cmluZykgaW5ldF9wdG9uKCRpcCksIHNlbGY6OkhPU1RfQUREUkVTU19CTE9DSykpIHsKICAgICAgICAgICAgcmV0dXJuICRob3N0OwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKHNwcmludGYoJ1RoZSBob3N0IGAlc2AgaXMgaW52YWxpZCA6IHRoZSBJUCBob3N0IGlzIG1hbGZvcm1lZCcsICRob3N0KSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBGb3JtYXQgdGhlIFBvcnQgY29tcG9uZW50LgogICAgICoKICAgICAqIEBwYXJhbSBvYmplY3R8bnVsbHxpbnR8c3RyaW5nICRwb3J0CiAgICAgKgogICAgICogQHRocm93cyBTeW50YXhFcnJvcgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZvcm1hdFBvcnQoJHBvcnQgPSBudWxsKTogP2ludAogICAgewogICAgICAgIGlmIChudWxsID09PSAkcG9ydCB8fCAnJyA9PT0gJHBvcnQpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICBpZiAoIWlzX2ludCgkcG9ydCkgJiYgIShpc19zdHJpbmcoJHBvcnQpICYmIDEgPT09IHByZWdfbWF0Y2goJy9eXGQqJC8nLCAkcG9ydCkpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVGhlIHBvcnQgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gaW50ZWdlciBvciBhIHN0cmluZyByZXByZXNlbnRpbmcgYW4gaW50ZWdlcjsgJy5nZXR0eXBlKCRwb3J0KS4nIGdpdmVuLicpOwogICAgICAgIH0KCiAgICAgICAgJHBvcnQgPSAoaW50KSAkcG9ydDsKICAgICAgICBpZiAoMCA+ICRwb3J0KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzcHJpbnRmKCdUaGUgcG9ydCBgJXNgIGlzIGludmFsaWQnLCAkcG9ydCkpOwogICAgICAgIH0KCiAgICAgICAgJGRlZmF1bHRQb3J0ID0gc2VsZjo6U0NIRU1FX0RFRkFVTFRfUE9SVFskdGhpcy0+c2NoZW1lXSA/PyBudWxsOwogICAgICAgIGlmICgkZGVmYXVsdFBvcnQgPT09ICRwb3J0KSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRwb3J0OwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIF9fc2V0X3N0YXRlKGFycmF5ICRjb21wb25lbnRzKTogc2VsZgogICAgewogICAgICAgICRjb21wb25lbnRzWyd1c2VyJ10gPSBudWxsOwogICAgICAgICRjb21wb25lbnRzWydwYXNzJ10gPSBudWxsOwogICAgICAgIGlmIChudWxsICE9PSAkY29tcG9uZW50c1sndXNlcl9pbmZvJ10pIHsKICAgICAgICAgICAgWyRjb21wb25lbnRzWyd1c2VyJ10sICRjb21wb25lbnRzWydwYXNzJ11dID0gZXhwbG9kZSgnOicsICRjb21wb25lbnRzWyd1c2VyX2luZm8nXSwgMikgKyBbMSA9PiBudWxsXTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgc2VsZigKICAgICAgICAgICAgJGNvbXBvbmVudHNbJ3NjaGVtZSddLAogICAgICAgICAgICAkY29tcG9uZW50c1sndXNlciddLAogICAgICAgICAgICAkY29tcG9uZW50c1sncGFzcyddLAogICAgICAgICAgICAkY29tcG9uZW50c1snaG9zdCddLAogICAgICAgICAgICAkY29tcG9uZW50c1sncG9ydCddLAogICAgICAgICAgICAkY29tcG9uZW50c1sncGF0aCddLAogICAgICAgICAgICAkY29tcG9uZW50c1sncXVlcnknXSwKICAgICAgICAgICAgJGNvbXBvbmVudHNbJ2ZyYWdtZW50J10KICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIGZyb20gYSBVUkkgYW5kIGEgQmFzZSBVUkkuCiAgICAgKgogICAgICogVGhlIHJldHVybmVkIFVSSSBtdXN0IGJlIGFic29sdXRlLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAgICAgICR1cmkgICAgICB0aGUgaW5wdXQgVVJJIHRvIGNyZWF0ZQogICAgICogQHBhcmFtIG51bGx8bWl4ZWQgJGJhc2VfdXJpIHRoZSBiYXNlIFVSSSB1c2VkIGZvciByZWZlcmVuY2UKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tQmFzZVVyaSgkdXJpLCAkYmFzZV91cmkgPSBudWxsKTogVXJpSW50ZXJmYWNlCiAgICB7CiAgICAgICAgaWYgKCEkdXJpIGluc3RhbmNlb2YgVXJpSW50ZXJmYWNlKSB7CiAgICAgICAgICAgICR1cmkgPSBzZWxmOjpjcmVhdGVGcm9tU3RyaW5nKCR1cmkpOwogICAgICAgIH0KCiAgICAgICAgaWYgKG51bGwgPT09ICRiYXNlX3VyaSkgewogICAgICAgICAgICBpZiAobnVsbCA9PT0gJHVyaS0+Z2V0U2NoZW1lKCkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzcHJpbnRmKCd0aGUgVVJJIGAlc2AgbXVzdCBiZSBhYnNvbHV0ZScsIChzdHJpbmcpICR1cmkpKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKG51bGwgPT09ICR1cmktPmdldEF1dGhvcml0eSgpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJHVyaTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLyoqIEB2YXIgVXJpSW50ZXJmYWNlICR1cmkgKi8KICAgICAgICAgICAgJHVyaSA9IFVyaVJlc29sdmVyOjpyZXNvbHZlKCR1cmksICR1cmktPndpdGhGcmFnbWVudChudWxsKS0+d2l0aFF1ZXJ5KG51bGwpLT53aXRoUGF0aCgnJykpOwoKICAgICAgICAgICAgcmV0dXJuICR1cmk7CiAgICAgICAgfQoKICAgICAgICBpZiAoISRiYXNlX3VyaSBpbnN0YW5jZW9mIFVyaUludGVyZmFjZSkgewogICAgICAgICAgICAkYmFzZV91cmkgPSBzZWxmOjpjcmVhdGVGcm9tU3RyaW5nKCRiYXNlX3VyaSk7CiAgICAgICAgfQoKICAgICAgICBpZiAobnVsbCA9PT0gJGJhc2VfdXJpLT5nZXRTY2hlbWUoKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ByaW50ZigndGhlIGJhc2UgVVJJIGAlc2AgbXVzdCBiZSBhYnNvbHV0ZScsIChzdHJpbmcpICRiYXNlX3VyaSkpOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgVXJpSW50ZXJmYWNlICR1cmkgKi8KICAgICAgICAkdXJpID0gVXJpUmVzb2x2ZXI6OnJlc29sdmUoJHVyaSwgJGJhc2VfdXJpKTsKCiAgICAgICAgcmV0dXJuICR1cmk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2UgZnJvbSBhIHN0cmluZy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfG1peGVkICR1cmkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tU3RyaW5nKCR1cmkgPSAnJyk6IHNlbGYKICAgIHsKICAgICAgICAkY29tcG9uZW50cyA9IFVyaVN0cmluZzo6cGFyc2UoJHVyaSk7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigKICAgICAgICAgICAgJGNvbXBvbmVudHNbJ3NjaGVtZSddLAogICAgICAgICAgICAkY29tcG9uZW50c1sndXNlciddLAogICAgICAgICAgICAkY29tcG9uZW50c1sncGFzcyddLAogICAgICAgICAgICAkY29tcG9uZW50c1snaG9zdCddLAogICAgICAgICAgICAkY29tcG9uZW50c1sncG9ydCddLAogICAgICAgICAgICAkY29tcG9uZW50c1sncGF0aCddLAogICAgICAgICAgICAkY29tcG9uZW50c1sncXVlcnknXSwKICAgICAgICAgICAgJGNvbXBvbmVudHNbJ2ZyYWdtZW50J10KICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIGZyb20gYSBoYXNoIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBVUkkgc2ltaWxhcgogICAgICogdG8gUEhQIHBhcnNlX3VybCBmdW5jdGlvbiByZXN1bHQuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUNvbXBvbmVudHMoYXJyYXkgJGNvbXBvbmVudHMgPSBbXSk6IHNlbGYKICAgIHsKICAgICAgICAkY29tcG9uZW50cyArPSBbCiAgICAgICAgICAgICdzY2hlbWUnID0+IG51bGwsICd1c2VyJyA9PiBudWxsLCAncGFzcycgPT4gbnVsbCwgJ2hvc3QnID0+IG51bGwsCiAgICAgICAgICAgICdwb3J0JyA9PiBudWxsLCAncGF0aCcgPT4gJycsICdxdWVyeScgPT4gbnVsbCwgJ2ZyYWdtZW50JyA9PiBudWxsLAogICAgICAgIF07CgogICAgICAgIHJldHVybiBuZXcgc2VsZigKICAgICAgICAgICAgJGNvbXBvbmVudHNbJ3NjaGVtZSddLAogICAgICAgICAgICAkY29tcG9uZW50c1sndXNlciddLAogICAgICAgICAgICAkY29tcG9uZW50c1sncGFzcyddLAogICAgICAgICAgICAkY29tcG9uZW50c1snaG9zdCddLAogICAgICAgICAgICAkY29tcG9uZW50c1sncG9ydCddLAogICAgICAgICAgICAkY29tcG9uZW50c1sncGF0aCddLAogICAgICAgICAgICAkY29tcG9uZW50c1sncXVlcnknXSwKICAgICAgICAgICAgJGNvbXBvbmVudHNbJ2ZyYWdtZW50J10KICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIGZyb20gYSBkYXRhIGZpbGUgcGF0aC4KICAgICAqCiAgICAgKiBAcGFyYW0gcmVzb3VyY2V8bnVsbCAkY29udGV4dAogICAgICoKICAgICAqIEB0aHJvd3MgRmlsZWluZm9TdXBwb3J0TWlzc2luZyBJZiBleHQvZmlsZWluZm8gaXMgbm90IGluc3RhbGxlZAogICAgICogQHRocm93cyBTeW50YXhFcnJvciAgICAgICAgICAgIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCByZWFkYWJsZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21EYXRhUGF0aChzdHJpbmcgJHBhdGgsICRjb250ZXh0ID0gbnVsbCk6IHNlbGYKICAgIHsKICAgICAgICBzdGF0aWMgJGZpbmZvX3N1cHBvcnQgPSBudWxsOwogICAgICAgICRmaW5mb19zdXBwb3J0ID0gJGZpbmZvX3N1cHBvcnQgPz8gY2xhc3NfZXhpc3RzKGZpbmZvOjpjbGFzcyk7CgogICAgICAgIC8vIEBjb2RlQ292ZXJhZ2VJZ25vcmVTdGFydAogICAgICAgIGlmICghJGZpbmZvX3N1cHBvcnQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEZpbGVpbmZvU3VwcG9ydE1pc3Npbmcoc3ByaW50ZignUGxlYXNlIGluc3RhbGwgZXh0L2ZpbGVpbmZvIHRvIHVzZSB0aGUgJXMoKSBtZXRob2QuJywgX19NRVRIT0RfXykpOwogICAgICAgIH0KICAgICAgICAvLyBAY29kZUNvdmVyYWdlSWdub3JlRW5kCgogICAgICAgICRmaWxlX2FyZ3MgPSBbJHBhdGgsIGZhbHNlXTsKICAgICAgICAkbWltZV9hcmdzID0gWyRwYXRoLCBGSUxFSU5GT19NSU1FXTsKICAgICAgICBpZiAobnVsbCAhPT0gJGNvbnRleHQpIHsKICAgICAgICAgICAgJGZpbGVfYXJnc1tdID0gJGNvbnRleHQ7CiAgICAgICAgICAgICRtaW1lX2FyZ3NbXSA9ICRjb250ZXh0OwogICAgICAgIH0KCiAgICAgICAgJHJhdyA9IEBmaWxlX2dldF9jb250ZW50cyguLi4kZmlsZV9hcmdzKTsKICAgICAgICBpZiAoZmFsc2UgPT09ICRyYXcpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKHNwcmludGYoJ1RoZSBmaWxlIGAlc2AgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IHJlYWRhYmxlJywgJHBhdGgpKTsKICAgICAgICB9CgogICAgICAgICRtaW1ldHlwZSA9IChzdHJpbmcpIChuZXcgZmluZm8oRklMRUlORk9fTUlNRSkpLT5maWxlKC4uLiRtaW1lX2FyZ3MpOwoKICAgICAgICByZXR1cm4gVXJpOjpjcmVhdGVGcm9tQ29tcG9uZW50cyhbCiAgICAgICAgICAgICdzY2hlbWUnID0+ICdkYXRhJywKICAgICAgICAgICAgJ3BhdGgnID0+IHN0cl9yZXBsYWNlKCcgJywgJycsICRtaW1ldHlwZS4nO2Jhc2U2NCwnLmJhc2U2NF9lbmNvZGUoJHJhdykpLAogICAgICAgIF0pOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIGZyb20gYSBVbml4IHBhdGggc3RyaW5nLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21Vbml4UGF0aChzdHJpbmcgJHVyaSA9ICcnKTogc2VsZgogICAgewogICAgICAgICR1cmkgPSBpbXBsb2RlKCcvJywgYXJyYXlfbWFwKCdyYXd1cmxlbmNvZGUnLCBleHBsb2RlKCcvJywgJHVyaSkpKTsKICAgICAgICBpZiAoJy8nICE9PSAoJHVyaVswXSA/PyAnJykpIHsKICAgICAgICAgICAgcmV0dXJuIFVyaTo6Y3JlYXRlRnJvbUNvbXBvbmVudHMoWydwYXRoJyA9PiAkdXJpXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gVXJpOjpjcmVhdGVGcm9tQ29tcG9uZW50cyhbJ3BhdGgnID0+ICR1cmksICdzY2hlbWUnID0+ICdmaWxlJywgJ2hvc3QnID0+ICcnXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2UgZnJvbSBhIGxvY2FsIFdpbmRvd3MgcGF0aCBzdHJpbmcuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVdpbmRvd3NQYXRoKHN0cmluZyAkdXJpID0gJycpOiBzZWxmCiAgICB7CiAgICAgICAgJHJvb3QgPSAnJzsKICAgICAgICBpZiAoMSA9PT0gcHJlZ19tYXRjaChzZWxmOjpSRUdFWFBfV0lORE9XX1BBVEgsICR1cmksICRtYXRjaGVzKSkgewogICAgICAgICAgICAkcm9vdCA9IHN1YnN0cigkbWF0Y2hlc1sncm9vdCddLCAwLCAtMSkuJzonOwogICAgICAgICAgICAkdXJpID0gc3Vic3RyKCR1cmksIHN0cmxlbigkcm9vdCkpOwogICAgICAgIH0KICAgICAgICAkdXJpID0gc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCAkdXJpKTsKICAgICAgICAkdXJpID0gaW1wbG9kZSgnLycsIGFycmF5X21hcCgncmF3dXJsZW5jb2RlJywgZXhwbG9kZSgnLycsICR1cmkpKSk7CgogICAgICAgIC8vTG9jYWwgV2luZG93cyBhYnNvbHV0ZSBwYXRoCiAgICAgICAgaWYgKCcnICE9PSAkcm9vdCkgewogICAgICAgICAgICByZXR1cm4gVXJpOjpjcmVhdGVGcm9tQ29tcG9uZW50cyhbJ3BhdGgnID0+ICcvJy4kcm9vdC4kdXJpLCAnc2NoZW1lJyA9PiAnZmlsZScsICdob3N0JyA9PiAnJ10pOwogICAgICAgIH0KCiAgICAgICAgLy9VTkMgV2luZG93cyBQYXRoCiAgICAgICAgaWYgKCcvLycgIT09IHN1YnN0cigkdXJpLCAwLCAyKSkgewogICAgICAgICAgICByZXR1cm4gVXJpOjpjcmVhdGVGcm9tQ29tcG9uZW50cyhbJ3BhdGgnID0+ICR1cmldKTsKICAgICAgICB9CgogICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoJy8nLCBzdWJzdHIoJHVyaSwgMiksIDIpICsgWzEgPT4gbnVsbF07CgogICAgICAgIHJldHVybiBVcmk6OmNyZWF0ZUZyb21Db21wb25lbnRzKFsnaG9zdCcgPT4gJHBhcnRzWzBdLCAncGF0aCcgPT4gJy8nLiRwYXJ0c1sxXSwgJ3NjaGVtZScgPT4gJ2ZpbGUnXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2UgZnJvbSBhIFVSSSBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIFBzcjdVcmlJbnRlcmZhY2V8VXJpSW50ZXJmYWNlICR1cmkgdGhlIGlucHV0IFVSSSB0byBjcmVhdGUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tVXJpKCR1cmkpOiBzZWxmCiAgICB7CiAgICAgICAgaWYgKCR1cmkgaW5zdGFuY2VvZiBVcmlJbnRlcmZhY2UpIHsKICAgICAgICAgICAgJHVzZXJfaW5mbyA9ICR1cmktPmdldFVzZXJJbmZvKCk7CiAgICAgICAgICAgICR1c2VyID0gbnVsbDsKICAgICAgICAgICAgJHBhc3MgPSBudWxsOwogICAgICAgICAgICBpZiAobnVsbCAhPT0gJHVzZXJfaW5mbykgewogICAgICAgICAgICAgICAgWyR1c2VyLCAkcGFzc10gPSBleHBsb2RlKCc6JywgJHVzZXJfaW5mbywgMikgKyBbMSA9PiBudWxsXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIG5ldyBzZWxmKAogICAgICAgICAgICAgICAgJHVyaS0+Z2V0U2NoZW1lKCksCiAgICAgICAgICAgICAgICAkdXNlciwKICAgICAgICAgICAgICAgICRwYXNzLAogICAgICAgICAgICAgICAgJHVyaS0+Z2V0SG9zdCgpLAogICAgICAgICAgICAgICAgJHVyaS0+Z2V0UG9ydCgpLAogICAgICAgICAgICAgICAgJHVyaS0+Z2V0UGF0aCgpLAogICAgICAgICAgICAgICAgJHVyaS0+Z2V0UXVlcnkoKSwKICAgICAgICAgICAgICAgICR1cmktPmdldEZyYWdtZW50KCkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICghJHVyaSBpbnN0YW5jZW9mIFBzcjdVcmlJbnRlcmZhY2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzcHJpbnRmKCdUaGUgb2JqZWN0IG11c3QgaW1wbGVtZW50IHRoZSBgJXNgIG9yIHRoZSBgJXNgJywgUHNyN1VyaUludGVyZmFjZTo6Y2xhc3MsIFVyaUludGVyZmFjZTo6Y2xhc3MpKTsKICAgICAgICB9CgogICAgICAgICRzY2hlbWUgPSAkdXJpLT5nZXRTY2hlbWUoKTsKICAgICAgICBpZiAoJycgPT09ICRzY2hlbWUpIHsKICAgICAgICAgICAgJHNjaGVtZSA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICAkZnJhZ21lbnQgPSAkdXJpLT5nZXRGcmFnbWVudCgpOwogICAgICAgIGlmICgnJyA9PT0gJGZyYWdtZW50KSB7CiAgICAgICAgICAgICRmcmFnbWVudCA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICAkcXVlcnkgPSAkdXJpLT5nZXRRdWVyeSgpOwogICAgICAgIGlmICgnJyA9PT0gJHF1ZXJ5KSB7CiAgICAgICAgICAgICRxdWVyeSA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICAkaG9zdCA9ICR1cmktPmdldEhvc3QoKTsKICAgICAgICBpZiAoJycgPT09ICRob3N0KSB7CiAgICAgICAgICAgICRob3N0ID0gbnVsbDsKICAgICAgICB9CgogICAgICAgICR1c2VyX2luZm8gPSAkdXJpLT5nZXRVc2VySW5mbygpOwogICAgICAgICR1c2VyID0gbnVsbDsKICAgICAgICAkcGFzcyA9IG51bGw7CiAgICAgICAgaWYgKCcnICE9PSAkdXNlcl9pbmZvKSB7CiAgICAgICAgICAgIFskdXNlciwgJHBhc3NdID0gZXhwbG9kZSgnOicsICR1c2VyX2luZm8sIDIpICsgWzEgPT4gbnVsbF07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoCiAgICAgICAgICAgICRzY2hlbWUsCiAgICAgICAgICAgICR1c2VyLAogICAgICAgICAgICAkcGFzcywKICAgICAgICAgICAgJGhvc3QsCiAgICAgICAgICAgICR1cmktPmdldFBvcnQoKSwKICAgICAgICAgICAgJHVyaS0+Z2V0UGF0aCgpLAogICAgICAgICAgICAkcXVlcnksCiAgICAgICAgICAgICRmcmFnbWVudAogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2UgZnJvbSB0aGUgZW52aXJvbm1lbnQuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVNlcnZlcihhcnJheSAkc2VydmVyKTogc2VsZgogICAgewogICAgICAgIFskdXNlciwgJHBhc3NdID0gc2VsZjo6ZmV0Y2hVc2VySW5mbygkc2VydmVyKTsKICAgICAgICBbJGhvc3QsICRwb3J0XSA9IHNlbGY6OmZldGNoSG9zdG5hbWUoJHNlcnZlcik7CiAgICAgICAgWyRwYXRoLCAkcXVlcnldID0gc2VsZjo6ZmV0Y2hSZXF1ZXN0VXJpKCRzZXJ2ZXIpOwoKICAgICAgICByZXR1cm4gVXJpOjpjcmVhdGVGcm9tQ29tcG9uZW50cyhbCiAgICAgICAgICAgICdzY2hlbWUnID0+IHNlbGY6OmZldGNoU2NoZW1lKCRzZXJ2ZXIpLAogICAgICAgICAgICAndXNlcicgPT4gJHVzZXIsCiAgICAgICAgICAgICdwYXNzJyA9PiAkcGFzcywKICAgICAgICAgICAgJ2hvc3QnID0+ICRob3N0LAogICAgICAgICAgICAncG9ydCcgPT4gJHBvcnQsCiAgICAgICAgICAgICdwYXRoJyA9PiAkcGF0aCwKICAgICAgICAgICAgJ3F1ZXJ5JyA9PiAkcXVlcnksCiAgICAgICAgXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBlbnZpcm9ubWVudCBzY2hlbWUuCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGZldGNoU2NoZW1lKGFycmF5ICRzZXJ2ZXIpOiBzdHJpbmcKICAgIHsKICAgICAgICAkc2VydmVyICs9IFsnSFRUUFMnID0+ICcnXTsKICAgICAgICAkcmVzID0gZmlsdGVyX3Zhcigkc2VydmVyWydIVFRQUyddLCBGSUxURVJfVkFMSURBVEVfQk9PTEVBTiwgRklMVEVSX05VTExfT05fRkFJTFVSRSk7CgogICAgICAgIHJldHVybiBmYWxzZSAhPT0gJHJlcyA/ICdodHRwcycgOiAnaHR0cCc7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBlbnZpcm9ubWVudCB1c2VyIGluZm8uCiAgICAgKgogICAgICogQHJldHVybiBhcnJheXswOj9zdHJpbmcsIDE6P3N0cmluZ30KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZmV0Y2hVc2VySW5mbyhhcnJheSAkc2VydmVyKTogYXJyYXkKICAgIHsKICAgICAgICAkc2VydmVyICs9IFsnUEhQX0FVVEhfVVNFUicgPT4gbnVsbCwgJ1BIUF9BVVRIX1BXJyA9PiBudWxsLCAnSFRUUF9BVVRIT1JJWkFUSU9OJyA9PiAnJ107CiAgICAgICAgJHVzZXIgPSAkc2VydmVyWydQSFBfQVVUSF9VU0VSJ107CiAgICAgICAgJHBhc3MgPSAkc2VydmVyWydQSFBfQVVUSF9QVyddOwogICAgICAgIGlmICgwID09PSBzdHJwb3Moc3RydG9sb3dlcigkc2VydmVyWydIVFRQX0FVVEhPUklaQVRJT04nXSksICdiYXNpYycpKSB7CiAgICAgICAgICAgICR1c2VyaW5mbyA9IGJhc2U2NF9kZWNvZGUoc3Vic3RyKCRzZXJ2ZXJbJ0hUVFBfQVVUSE9SSVpBVElPTiddLCA2KSwgdHJ1ZSk7CiAgICAgICAgICAgIGlmIChmYWxzZSA9PT0gJHVzZXJpbmZvKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1RoZSB1c2VyIGluZm8gY291bGQgbm90IGJlIGRldGVjdGVkJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgWyR1c2VyLCAkcGFzc10gPSBleHBsb2RlKCc6JywgJHVzZXJpbmZvLCAyKSArIFsxID0+IG51bGxdOwogICAgICAgIH0KCiAgICAgICAgaWYgKG51bGwgIT09ICR1c2VyKSB7CiAgICAgICAgICAgICR1c2VyID0gcmF3dXJsZW5jb2RlKCR1c2VyKTsKICAgICAgICB9CgogICAgICAgIGlmIChudWxsICE9PSAkcGFzcykgewogICAgICAgICAgICAkcGFzcyA9IHJhd3VybGVuY29kZSgkcGFzcyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gWyR1c2VyLCAkcGFzc107CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBlbnZpcm9ubWVudCBob3N0LgogICAgICoKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgSWYgdGhlIGhvc3QgY2FuIG5vdCBiZSBkZXRlY3RlZAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl7MDpzdHJpbmd8bnVsbCwgMTppbnR8bnVsbH0KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZmV0Y2hIb3N0bmFtZShhcnJheSAkc2VydmVyKTogYXJyYXkKICAgIHsKICAgICAgICAkc2VydmVyICs9IFsnU0VSVkVSX1BPUlQnID0+IG51bGxdOwogICAgICAgIGlmIChudWxsICE9PSAkc2VydmVyWydTRVJWRVJfUE9SVCddKSB7CiAgICAgICAgICAgICRzZXJ2ZXJbJ1NFUlZFUl9QT1JUJ10gPSAoaW50KSAkc2VydmVyWydTRVJWRVJfUE9SVCddOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRzZXJ2ZXJbJ0hUVFBfSE9TVCddKSAmJiAxID09PSBwcmVnX21hdGNoKHNlbGY6OlJFR0VYUF9IT1NUX1BPUlQsICRzZXJ2ZXJbJ0hUVFBfSE9TVCddLCAkbWF0Y2hlcykpIHsKICAgICAgICAgICAgaWYgKGlzc2V0KCRtYXRjaGVzWydwb3J0J10pKSB7CiAgICAgICAgICAgICAgICAkbWF0Y2hlc1sncG9ydCddID0gKGludCkgJG1hdGNoZXNbJ3BvcnQnXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICRtYXRjaGVzWydob3N0J10sCiAgICAgICAgICAgICAgICAkbWF0Y2hlc1sncG9ydCddID8/ICRzZXJ2ZXJbJ1NFUlZFUl9QT1JUJ10sCiAgICAgICAgICAgIF07CiAgICAgICAgfQoKICAgICAgICBpZiAoIWlzc2V0KCRzZXJ2ZXJbJ1NFUlZFUl9BRERSJ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVGhlIGhvc3QgY291bGQgbm90IGJlIGRldGVjdGVkJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZmFsc2UgPT09IGZpbHRlcl92YXIoJHNlcnZlclsnU0VSVkVSX0FERFInXSwgRklMVEVSX1ZBTElEQVRFX0lQLCBGSUxURVJfRkxBR19JUFY0KSkgewogICAgICAgICAgICAkc2VydmVyWydTRVJWRVJfQUREUiddID0gJ1snLiRzZXJ2ZXJbJ1NFUlZFUl9BRERSJ10uJ10nOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFskc2VydmVyWydTRVJWRVJfQUREUiddLCAkc2VydmVyWydTRVJWRVJfUE9SVCddXTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGVudmlyb25tZW50IHBhdGguCiAgICAgKgogICAgICogQHJldHVybiBhcnJheXswOj9zdHJpbmcsIDE6P3N0cmluZ30KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZmV0Y2hSZXF1ZXN0VXJpKGFycmF5ICRzZXJ2ZXIpOiBhcnJheQogICAgewogICAgICAgICRzZXJ2ZXIgKz0gWydJSVNfV2FzVXJsUmV3cml0dGVuJyA9PiBudWxsLCAnVU5FTkNPREVEX1VSTCcgPT4gJycsICdQSFBfU0VMRicgPT4gJycsICdRVUVSWV9TVFJJTkcnID0+IG51bGxdOwogICAgICAgIGlmICgnMScgPT09ICRzZXJ2ZXJbJ0lJU19XYXNVcmxSZXdyaXR0ZW4nXSAmJiAnJyAhPT0gJHNlcnZlclsnVU5FTkNPREVEX1VSTCddKSB7CiAgICAgICAgICAgIC8qKiBAdmFyIGFycmF5ezA6P3N0cmluZywgMTo/c3RyaW5nfSAkcmV0dmFsICovCiAgICAgICAgICAgICRyZXR2YWwgPSBleHBsb2RlKCc/JywgJHNlcnZlclsnVU5FTkNPREVEX1VSTCddLCAyKSArIFsxID0+IG51bGxdOwoKICAgICAgICAgICAgcmV0dXJuICRyZXR2YWw7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJHNlcnZlclsnUkVRVUVTVF9VUkknXSkpIHsKICAgICAgICAgICAgWyRwYXRoLCBdID0gZXhwbG9kZSgnPycsICRzZXJ2ZXJbJ1JFUVVFU1RfVVJJJ10sIDIpOwogICAgICAgICAgICAkcXVlcnkgPSAoJycgIT09ICRzZXJ2ZXJbJ1FVRVJZX1NUUklORyddKSA/ICRzZXJ2ZXJbJ1FVRVJZX1NUUklORyddIDogbnVsbDsKCiAgICAgICAgICAgIHJldHVybiBbJHBhdGgsICRxdWVyeV07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gWyRzZXJ2ZXJbJ1BIUF9TRUxGJ10sICRzZXJ2ZXJbJ1FVRVJZX1NUUklORyddXTsKICAgIH0KCiAgICAvKioKICAgICAqIEdlbmVyYXRlIHRoZSBVUkkgYXV0aG9yaXR5IHBhcnQuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gc2V0QXV0aG9yaXR5KCk6ID9zdHJpbmcKICAgIHsKICAgICAgICAkYXV0aG9yaXR5ID0gbnVsbDsKICAgICAgICBpZiAobnVsbCAhPT0gJHRoaXMtPnVzZXJfaW5mbykgewogICAgICAgICAgICAkYXV0aG9yaXR5ID0gJHRoaXMtPnVzZXJfaW5mby4nQCc7CiAgICAgICAgfQoKICAgICAgICBpZiAobnVsbCAhPT0gJHRoaXMtPmhvc3QpIHsKICAgICAgICAgICAgJGF1dGhvcml0eSAuPSAkdGhpcy0+aG9zdDsKICAgICAgICB9CgogICAgICAgIGlmIChudWxsICE9PSAkdGhpcy0+cG9ydCkgewogICAgICAgICAgICAkYXV0aG9yaXR5IC49ICc6Jy4kdGhpcy0+cG9ydDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkYXV0aG9yaXR5OwogICAgfQoKICAgIC8qKgogICAgICogRm9ybWF0IHRoZSBQYXRoIGNvbXBvbmVudC4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBmb3JtYXRQYXRoKHN0cmluZyAkcGF0aCk6IHN0cmluZwogICAgewogICAgICAgICRwYXRoID0gJHRoaXMtPmZvcm1hdERhdGFQYXRoKCRwYXRoKTsKCiAgICAgICAgc3RhdGljICRwYXR0ZXJuID0gJy8oPzpbXicuc2VsZjo6UkVHRVhQX0NIQVJTX1VOUkVTRVJWRUQuc2VsZjo6UkVHRVhQX0NIQVJTX1NVQkRFTElNLiclOkBcL317XSsrfCUoPyFbQS1GYS1mMC05XXsyfSkpLyc7CgogICAgICAgICRwYXRoID0gKHN0cmluZykgcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCRwYXR0ZXJuLCBbVXJpOjpjbGFzcywgJ3VybEVuY29kZU1hdGNoJ10sICRwYXRoKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5mb3JtYXRGaWxlUGF0aCgkcGF0aCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBGaWx0ZXIgdGhlIFBhdGggY29tcG9uZW50LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMzk3CiAgICAgKgogICAgICogQHRocm93cyBTeW50YXhFcnJvciBJZiB0aGUgcGF0aCBpcyBub3QgY29tcGxpYW50IHdpdGggUkZDMjM5NwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZvcm1hdERhdGFQYXRoKHN0cmluZyAkcGF0aCk6IHN0cmluZwogICAgewogICAgICAgIGlmICgnZGF0YScgIT09ICR0aGlzLT5zY2hlbWUpIHsKICAgICAgICAgICAgcmV0dXJuICRwYXRoOwogICAgICAgIH0KCiAgICAgICAgaWYgKCcnID09ICRwYXRoKSB7CiAgICAgICAgICAgIHJldHVybiAndGV4dC9wbGFpbjtjaGFyc2V0PXVzLWFzY2lpLCc7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RybGVuKCRwYXRoKSAhPT0gc3Ryc3BuKCRwYXRoLCBzZWxmOjpBU0NJSSkgfHwgZmFsc2UgPT09IHN0cnBvcygkcGF0aCwgJywnKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ByaW50ZignVGhlIHBhdGggYCVzYCBpcyBpbnZhbGlkIGFjY29yZGluZyB0byBSRkMyOTM3JywgJHBhdGgpKTsKICAgICAgICB9CgogICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoJywnLCAkcGF0aCwgMikgKyBbMSA9PiBudWxsXTsKICAgICAgICAkbWVkaWF0eXBlID0gZXhwbG9kZSgnOycsIChzdHJpbmcpICRwYXJ0c1swXSwgMikgKyBbMSA9PiBudWxsXTsKICAgICAgICAkZGF0YSA9IChzdHJpbmcpICRwYXJ0c1sxXTsKICAgICAgICAkbWltZXR5cGUgPSAkbWVkaWF0eXBlWzBdOwogICAgICAgIGlmIChudWxsID09PSAkbWltZXR5cGUgfHwgJycgPT09ICRtaW1ldHlwZSkgewogICAgICAgICAgICAkbWltZXR5cGUgPSAndGV4dC9wbGFpbic7CiAgICAgICAgfQoKICAgICAgICAkcGFyYW1ldGVycyA9ICRtZWRpYXR5cGVbMV07CiAgICAgICAgaWYgKG51bGwgPT09ICRwYXJhbWV0ZXJzIHx8ICcnID09PSAkcGFyYW1ldGVycykgewogICAgICAgICAgICAkcGFyYW1ldGVycyA9ICdjaGFyc2V0PXVzLWFzY2lpJzsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5hc3NlcnRWYWxpZFBhdGgoJG1pbWV0eXBlLCAkcGFyYW1ldGVycywgJGRhdGEpOwoKICAgICAgICByZXR1cm4gJG1pbWV0eXBlLic7Jy4kcGFyYW1ldGVycy4nLCcuJGRhdGE7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhlIHBhdGggaXMgYSBjb21wbGlhbnQgd2l0aCBSRkMyMzk3LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMzk3CiAgICAgKgogICAgICogQHRocm93cyBTeW50YXhFcnJvciBJZiB0aGUgbWVkaWF0eXBlIG9yIHRoZSBkYXRhIGFyZSBub3QgY29tcGxpYW50IHdpdGggdGhlIFJGQzIzOTcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBhc3NlcnRWYWxpZFBhdGgoc3RyaW5nICRtaW1ldHlwZSwgc3RyaW5nICRwYXJhbWV0ZXJzLCBzdHJpbmcgJGRhdGEpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKDEgIT09IHByZWdfbWF0Y2goc2VsZjo6UkVHRVhQX01JTUVUWVBFLCAkbWltZXR5cGUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzcHJpbnRmKCdUaGUgcGF0aCBtaW1ldHlwZSBgJXNgIGlzIGludmFsaWQnLCAkbWltZXR5cGUpKTsKICAgICAgICB9CgogICAgICAgICRpc19iaW5hcnkgPSAxID09PSBwcmVnX21hdGNoKHNlbGY6OlJFR0VYUF9CSU5BUlksICRwYXJhbWV0ZXJzLCAkbWF0Y2hlcyk7CiAgICAgICAgaWYgKCRpc19iaW5hcnkpIHsKICAgICAgICAgICAgJHBhcmFtZXRlcnMgPSBzdWJzdHIoJHBhcmFtZXRlcnMsIDAsIC0gc3RybGVuKCRtYXRjaGVzWzBdKSk7CiAgICAgICAgfQoKICAgICAgICAkcmVzID0gYXJyYXlfZmlsdGVyKGFycmF5X2ZpbHRlcihleHBsb2RlKCc7JywgJHBhcmFtZXRlcnMpLCBbJHRoaXMsICd2YWxpZGF0ZVBhcmFtZXRlciddKSk7CiAgICAgICAgaWYgKFtdICE9PSAkcmVzKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzcHJpbnRmKCdUaGUgcGF0aCBwYXJlbWV0ZXJzIGAlc2AgaXMgaW52YWxpZCcsICRwYXJhbWV0ZXJzKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoISRpc19iaW5hcnkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJHJlcyA9IGJhc2U2NF9kZWNvZGUoJGRhdGEsIHRydWUpOwogICAgICAgIGlmIChmYWxzZSA9PT0gJHJlcyB8fCAkZGF0YSAhPT0gYmFzZTY0X2VuY29kZSgkcmVzKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ByaW50ZignVGhlIHBhdGggZGF0YSBgJXNgIGlzIGludmFsaWQnLCAkZGF0YSkpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFZhbGlkYXRlIG1lZGlhdHlwZSBwYXJhbWV0ZXIuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gdmFsaWRhdGVQYXJhbWV0ZXIoc3RyaW5nICRwYXJhbWV0ZXIpOiBib29sCiAgICB7CiAgICAgICAgJHByb3BlcnRpZXMgPSBleHBsb2RlKCc9JywgJHBhcmFtZXRlcik7CgogICAgICAgIHJldHVybiAyICE9IGNvdW50KCRwcm9wZXJ0aWVzKSB8fCAnYmFzZTY0JyA9PT0gc3RydG9sb3dlcigkcHJvcGVydGllc1swXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBGb3JtYXQgcGF0aCBjb21wb25lbnQgZm9yIGZpbGUgc2NoZW1lLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZvcm1hdEZpbGVQYXRoKHN0cmluZyAkcGF0aCk6IHN0cmluZwogICAgewogICAgICAgIGlmICgnZmlsZScgIT09ICR0aGlzLT5zY2hlbWUpIHsKICAgICAgICAgICAgcmV0dXJuICRwYXRoOwogICAgICAgIH0KCiAgICAgICAgJHJlcGxhY2UgPSBzdGF0aWMgZnVuY3Rpb24gKGFycmF5ICRtYXRjaGVzKTogc3RyaW5nIHsKICAgICAgICAgICAgcmV0dXJuICRtYXRjaGVzWydkZWxpbSddLiRtYXRjaGVzWyd2b2x1bWUnXS4nOicuJG1hdGNoZXNbJ3Jlc3QnXTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gKHN0cmluZykgcHJlZ19yZXBsYWNlX2NhbGxiYWNrKHNlbGY6OlJFR0VYUF9GSUxFX1BBVEgsICRyZXBsYWNlLCAkcGF0aCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBGb3JtYXQgdGhlIFF1ZXJ5IG9yIHRoZSBGcmFnbWVudCBjb21wb25lbnQuCiAgICAgKgogICAgICogUmV0dXJucyBhIGFycmF5IGNvbnRhaW5pbmc6CiAgICAgKiA8dWw+CiAgICAgKiA8bGk+IHRoZSBmb3JtYXR0ZWQgY29tcG9uZW50IChhIHN0cmluZyBvciBudWxsKTwvbGk+CiAgICAgKiA8bGk+IGEgYm9vbGVhbiBmbGFnIHRlbGxpbmcgd2V0aGVyIHRoZSBkZWxpbWl0ZXIgaXMgdG8gYmUgYWRkZWQgdG8gdGhlIGNvbXBvbmVudAogICAgICogd2hlbiBidWlsZGluZyB0aGUgVVJJIHN0cmluZyByZXByZXNlbnRhdGlvbjwvbGk+CiAgICAgKiA8L3VsPgogICAgICoKICAgICAqIEBwYXJhbSA/c3RyaW5nICRjb21wb25lbnQKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBmb3JtYXRRdWVyeUFuZEZyYWdtZW50KD9zdHJpbmcgJGNvbXBvbmVudCk6ID9zdHJpbmcKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJGNvbXBvbmVudCB8fCAnJyA9PT0gJGNvbXBvbmVudCkgewogICAgICAgICAgICByZXR1cm4gJGNvbXBvbmVudDsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyAkcGF0dGVybiA9ICcvKD86W14nLnNlbGY6OlJFR0VYUF9DSEFSU19VTlJFU0VSVkVELnNlbGY6OlJFR0VYUF9DSEFSU19TVUJERUxJTS4nJTpAXC9cP10rK3wlKD8hW0EtRmEtZjAtOV17Mn0pKS8nOwogICAgICAgIHJldHVybiBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJHBhdHRlcm4sIFtVcmk6OmNsYXNzLCAndXJsRW5jb2RlTWF0Y2gnXSwgJGNvbXBvbmVudCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBhc3NlcnQgdGhlIFVSSSBpbnRlcm5hbCBzdGF0ZSBpcyB2YWxpZC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTMKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4zCiAgICAgKgogICAgICogQHRocm93cyBTeW50YXhFcnJvciBpZiB0aGUgVVJJIGlzIGluIGFuIGludmFsaWQgc3RhdGUgYWNjb3JkaW5nIHRvIFJGQzM5ODYKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgaWYgdGhlIFVSSSBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlIGFjY29yZGluZyB0byBzY2hlbWUgc3BlY2lmaWMgcnVsZXMKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBhc3NlcnRWYWxpZFN0YXRlKCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAobnVsbCAhPT0gJHRoaXMtPmF1dGhvcml0eSAmJiAoJycgIT09ICR0aGlzLT5wYXRoICYmICcvJyAhPT0gJHRoaXMtPnBhdGhbMF0pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignSWYgYW4gYXV0aG9yaXR5IGlzIHByZXNlbnQgdGhlIHBhdGggbXVzdCBiZSBlbXB0eSBvciBzdGFydCB3aXRoIGEgYC9gLicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKG51bGwgPT09ICR0aGlzLT5hdXRob3JpdHkgJiYgMCA9PT0gc3RycG9zKCR0aGlzLT5wYXRoLCAnLy8nKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ByaW50ZignSWYgdGhlcmUgaXMgbm8gYXV0aG9yaXR5IHRoZSBwYXRoIGAlc2AgY2FuIG5vdCBzdGFydCB3aXRoIGEgYC8vYC4nLCAkdGhpcy0+cGF0aCkpOwogICAgICAgIH0KCiAgICAgICAgJHBvcyA9IHN0cnBvcygkdGhpcy0+cGF0aCwgJzonKTsKICAgICAgICBpZiAobnVsbCA9PT0gJHRoaXMtPmF1dGhvcml0eQogICAgICAgICAgICAmJiBudWxsID09PSAkdGhpcy0+c2NoZW1lCiAgICAgICAgICAgICYmIGZhbHNlICE9PSAkcG9zCiAgICAgICAgICAgICYmIGZhbHNlID09PSBzdHJwb3Moc3Vic3RyKCR0aGlzLT5wYXRoLCAwLCAkcG9zKSwgJy8nKQogICAgICAgICkgewogICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0luIGFic2VuY2Ugb2YgYSBzY2hlbWUgYW5kIGFuIGF1dGhvcml0eSB0aGUgZmlyc3QgcGF0aCBzZWdtZW50IGNhbm5vdCBjb250YWluIGEgY29sb24gKCI6IikgY2hhcmFjdGVyLicpOwogICAgICAgIH0KCiAgICAgICAgJHZhbGlkYXRpb25NZXRob2QgPSBzZWxmOjpTQ0hFTUVfVkFMSURBVElPTl9NRVRIT0RbJHRoaXMtPnNjaGVtZV0gPz8gbnVsbDsKICAgICAgICBpZiAobnVsbCA9PT0gJHZhbGlkYXRpb25NZXRob2QgfHwgdHJ1ZSA9PT0gJHRoaXMtPiR2YWxpZGF0aW9uTWV0aG9kKCkpIHsKICAgICAgICAgICAgJHRoaXMtPnVyaSA9IG51bGw7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ByaW50ZignVGhlIHVyaSBgJXNgIGlzIGludmFsaWQgZm9yIHRoZSBgJXNgIHNjaGVtZS4nLCAoc3RyaW5nKSAkdGhpcywgJHRoaXMtPnNjaGVtZSkpOwogICAgfQoKICAgIC8qKgogICAgICogVVJJIHZhbGlkYXRpb24gZm9yIFVSSSBzY2hlbWVzIHdoaWNoIGFsbG93cyBvbmx5IHNjaGVtZSBhbmQgcGF0aCBjb21wb25lbnRzLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGlzVXJpV2l0aFNjaGVtZUFuZFBhdGhPbmx5KCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gbnVsbCA9PT0gJHRoaXMtPmF1dGhvcml0eQogICAgICAgICAgICAmJiBudWxsID09PSAkdGhpcy0+cXVlcnkKICAgICAgICAgICAgJiYgbnVsbCA9PT0gJHRoaXMtPmZyYWdtZW50OwogICAgfQoKICAgIC8qKgogICAgICogVVJJIHZhbGlkYXRpb24gZm9yIFVSSSBzY2hlbWVzIHdoaWNoIGFsbG93cyBvbmx5IHNjaGVtZSwgaG9zdCBhbmQgcGF0aCBjb21wb25lbnRzLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGlzVXJpV2l0aFNjaGVtZUhvc3RBbmRQYXRoT25seSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIG51bGwgPT09ICR0aGlzLT51c2VyX2luZm8KICAgICAgICAgICAgJiYgbnVsbCA9PT0gJHRoaXMtPnBvcnQKICAgICAgICAgICAgJiYgbnVsbCA9PT0gJHRoaXMtPnF1ZXJ5CiAgICAgICAgICAgICYmIG51bGwgPT09ICR0aGlzLT5mcmFnbWVudAogICAgICAgICAgICAmJiAhKCcnICE9ICR0aGlzLT5zY2hlbWUgJiYgbnVsbCA9PT0gJHRoaXMtPmhvc3QpOwogICAgfQoKICAgIC8qKgogICAgICogVVJJIHZhbGlkYXRpb24gZm9yIFVSSSBzY2hlbWVzIHdoaWNoIGRpc2FsbG93IHRoZSBlbXB0eSAnJyBob3N0LgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGlzTm9uRW1wdHlIb3N0VXJpKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJycgIT09ICR0aGlzLT5ob3N0CiAgICAgICAgICAgICYmICEobnVsbCAhPT0gJHRoaXMtPnNjaGVtZSAmJiBudWxsID09PSAkdGhpcy0+aG9zdCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBVUkkgdmFsaWRhdGlvbiBmb3IgVVJJcyBzY2hlbWVzIHdoaWNoIGRpc2FsbG93IHRoZSBlbXB0eSAnJyBob3N0CiAgICAgKiBhbmQgZm9yYmlkcyB0aGUgZnJhZ21lbnQgY29tcG9uZW50LgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGlzTm9uRW1wdHlIb3N0VXJpV2l0aG91dEZyYWdtZW50KCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmlzTm9uRW1wdHlIb3N0VXJpKCkgJiYgbnVsbCA9PT0gJHRoaXMtPmZyYWdtZW50OwogICAgfQoKICAgIC8qKgogICAgICogVVJJIHZhbGlkYXRpb24gZm9yIFVSSXMgc2NoZW1lcyB3aGljaCBkaXNhbGxvdyB0aGUgZW1wdHkgJycgaG9zdAogICAgICogYW5kIGZvcmJpZHMgZnJhZ21lbnQgYW5kIHF1ZXJ5IGNvbXBvbmVudHMuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gaXNOb25FbXB0eUhvc3RVcmlXaXRob3V0RnJhZ21lbnRBbmRRdWVyeSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5pc05vbkVtcHR5SG9zdFVyaSgpICYmIG51bGwgPT09ICR0aGlzLT5mcmFnbWVudCAmJiBudWxsID09PSAkdGhpcy0+cXVlcnk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZW5lcmF0ZSB0aGUgVVJJIHN0cmluZyByZXByZXNlbnRhdGlvbiBmcm9tIGl0cyBjb21wb25lbnRzLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNS4zCiAgICAgKgogICAgICogQHBhcmFtID9zdHJpbmcgJHNjaGVtZQogICAgICogQHBhcmFtID9zdHJpbmcgJGF1dGhvcml0eQogICAgICogQHBhcmFtID9zdHJpbmcgJHF1ZXJ5CiAgICAgKiBAcGFyYW0gP3N0cmluZyAkZnJhZ21lbnQKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRVcmlTdHJpbmcoCiAgICAgICAgP3N0cmluZyAkc2NoZW1lLAogICAgICAgID9zdHJpbmcgJGF1dGhvcml0eSwKICAgICAgICBzdHJpbmcgJHBhdGgsCiAgICAgICAgP3N0cmluZyAkcXVlcnksCiAgICAgICAgP3N0cmluZyAkZnJhZ21lbnQKICAgICk6IHN0cmluZyB7CiAgICAgICAgaWYgKG51bGwgIT09ICRzY2hlbWUpIHsKICAgICAgICAgICAgJHNjaGVtZSA9ICRzY2hlbWUuJzonOwogICAgICAgIH0KCiAgICAgICAgaWYgKG51bGwgIT09ICRhdXRob3JpdHkpIHsKICAgICAgICAgICAgJGF1dGhvcml0eSA9ICcvLycuJGF1dGhvcml0eTsKICAgICAgICB9CgogICAgICAgIGlmIChudWxsICE9PSAkcXVlcnkpIHsKICAgICAgICAgICAgJHF1ZXJ5ID0gJz8nLiRxdWVyeTsKICAgICAgICB9CgogICAgICAgIGlmIChudWxsICE9PSAkZnJhZ21lbnQpIHsKICAgICAgICAgICAgJGZyYWdtZW50ID0gJyMnLiRmcmFnbWVudDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkc2NoZW1lLiRhdXRob3JpdHkuJHBhdGguJHF1ZXJ5LiRmcmFnbWVudDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9TdHJpbmcoKTogc3RyaW5nCiAgICB7CiAgICAgICAgJHRoaXMtPnVyaSA9ICR0aGlzLT51cmkgPz8gJHRoaXMtPmdldFVyaVN0cmluZygKICAgICAgICAgICAgJHRoaXMtPnNjaGVtZSwKICAgICAgICAgICAgJHRoaXMtPmF1dGhvcml0eSwKICAgICAgICAgICAgJHRoaXMtPnBhdGgsCiAgICAgICAgICAgICR0aGlzLT5xdWVyeSwKICAgICAgICAgICAgJHRoaXMtPmZyYWdtZW50CiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT51cmk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dG9TdHJpbmcoKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50b1N0cmluZygpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl7c2NoZW1lOj9zdHJpbmcsIHVzZXJfaW5mbzo/c3RyaW5nLCBob3N0Oj9zdHJpbmcsIHBvcnQ6P2ludCwgcGF0aDpzdHJpbmcsIHF1ZXJ5Oj9zdHJpbmcsIGZyYWdtZW50Oj9zdHJpbmd9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2RlYnVnSW5mbygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdzY2hlbWUnID0+ICR0aGlzLT5zY2hlbWUsCiAgICAgICAgICAgICd1c2VyX2luZm8nID0+IGlzc2V0KCR0aGlzLT51c2VyX2luZm8pID8gcHJlZ19yZXBsYWNlKCcsOiguKikuPyQsJywgJzoqKionLCAkdGhpcy0+dXNlcl9pbmZvKSA6IG51bGwsCiAgICAgICAgICAgICdob3N0JyA9PiAkdGhpcy0+aG9zdCwKICAgICAgICAgICAgJ3BvcnQnID0+ICR0aGlzLT5wb3J0LAogICAgICAgICAgICAncGF0aCcgPT4gJHRoaXMtPnBhdGgsCiAgICAgICAgICAgICdxdWVyeScgPT4gJHRoaXMtPnF1ZXJ5LAogICAgICAgICAgICAnZnJhZ21lbnQnID0+ICR0aGlzLT5mcmFnbWVudCwKICAgICAgICBdOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2NoZW1lKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnNjaGVtZTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEF1dGhvcml0eSgpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hdXRob3JpdHk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVc2VySW5mbygpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51c2VyX2luZm87CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIb3N0KCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmhvc3Q7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQb3J0KCk6ID9pbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnBvcnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQYXRoKCk6IHN0cmluZwogICAgewogICAgICAgIGlmICgwID09PSBzdHJwb3MoJHRoaXMtPnBhdGgsICcvLycpKSB7CiAgICAgICAgICAgIHJldHVybiAnLycubHRyaW0oJHRoaXMtPnBhdGgsICcvJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPnBhdGg7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRRdWVyeSgpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5xdWVyeTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZyYWdtZW50KCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmZyYWdtZW50OwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFNjaGVtZSgkc2NoZW1lKTogVXJpSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJHNjaGVtZSA9ICR0aGlzLT5mb3JtYXRTY2hlbWUoJHRoaXMtPmZpbHRlclN0cmluZygkc2NoZW1lKSk7CiAgICAgICAgaWYgKCRzY2hlbWUgPT09ICR0aGlzLT5zY2hlbWUpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJGNsb25lID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJGNsb25lLT5zY2hlbWUgPSAkc2NoZW1lOwogICAgICAgICRjbG9uZS0+cG9ydCA9ICRjbG9uZS0+Zm9ybWF0UG9ydCgkY2xvbmUtPnBvcnQpOwogICAgICAgICRjbG9uZS0+YXV0aG9yaXR5ID0gJGNsb25lLT5zZXRBdXRob3JpdHkoKTsKICAgICAgICAkY2xvbmUtPmFzc2VydFZhbGlkU3RhdGUoKTsKCiAgICAgICAgcmV0dXJuICRjbG9uZTsKICAgIH0KCiAgICAvKioKICAgICAqIEZpbHRlciBhIHN0cmluZy4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHN0ciB0aGUgdmFsdWUgdG8gZXZhbHVhdGUgYXMgYSBzdHJpbmcKICAgICAqCiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yIGlmIHRoZSBzdWJtaXR0ZWQgZGF0YSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBmaWx0ZXJTdHJpbmcoJHN0cik6ID9zdHJpbmcKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJHN0cikgewogICAgICAgICAgICByZXR1cm4gJHN0cjsKICAgICAgICB9CgogICAgICAgIGlmIChpc19vYmplY3QoJHN0cikgJiYgbWV0aG9kX2V4aXN0cygkc3RyLCAnX190b1N0cmluZycpKSB7CiAgICAgICAgICAgICRzdHIgPSAoc3RyaW5nKSAkc3RyOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFpc19zY2FsYXIoJHN0cikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKHNwcmludGYoJ1RoZSBjb21wb25lbnQgbXVzdCBiZSBhIHN0cmluZywgYSBzY2FsYXIgb3IgYSBzdHJpbmdhYmxlIG9iamVjdDsgYCVzYCBnaXZlbi4nLCBnZXR0eXBlKCRzdHIpKSk7CiAgICAgICAgfQoKICAgICAgICAkc3RyID0gKHN0cmluZykgJHN0cjsKICAgICAgICBpZiAoMSAhPT0gcHJlZ19tYXRjaChzZWxmOjpSRUdFWFBfSU5WQUxJRF9DSEFSUywgJHN0cikpIHsKICAgICAgICAgICAgcmV0dXJuICRzdHI7CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ByaW50ZignVGhlIGNvbXBvbmVudCBgJXNgIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycy4nLCAkc3RyKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoVXNlckluZm8oJHVzZXIsICRwYXNzd29yZCA9IG51bGwpOiBVcmlJbnRlcmZhY2UKICAgIHsKICAgICAgICAkdXNlcl9pbmZvID0gbnVsbDsKICAgICAgICAkdXNlciA9ICR0aGlzLT5maWx0ZXJTdHJpbmcoJHVzZXIpOwogICAgICAgIGlmIChudWxsICE9PSAkcGFzc3dvcmQpIHsKICAgICAgICAgICAgJHBhc3N3b3JkID0gJHRoaXMtPmZpbHRlclN0cmluZygkcGFzc3dvcmQpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCcnICE9PSAkdXNlcikgewogICAgICAgICAgICAkdXNlcl9pbmZvID0gJHRoaXMtPmZvcm1hdFVzZXJJbmZvKCR1c2VyLCAkcGFzc3dvcmQpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR1c2VyX2luZm8gPT09ICR0aGlzLT51c2VyX2luZm8pIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJGNsb25lID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJGNsb25lLT51c2VyX2luZm8gPSAkdXNlcl9pbmZvOwogICAgICAgICRjbG9uZS0+YXV0aG9yaXR5ID0gJGNsb25lLT5zZXRBdXRob3JpdHkoKTsKICAgICAgICAkY2xvbmUtPmFzc2VydFZhbGlkU3RhdGUoKTsKCiAgICAgICAgcmV0dXJuICRjbG9uZTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhIb3N0KCRob3N0KTogVXJpSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJGhvc3QgPSAkdGhpcy0+Zm9ybWF0SG9zdCgkdGhpcy0+ZmlsdGVyU3RyaW5nKCRob3N0KSk7CiAgICAgICAgaWYgKCRob3N0ID09PSAkdGhpcy0+aG9zdCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkY2xvbmUgPSBjbG9uZSAkdGhpczsKICAgICAgICAkY2xvbmUtPmhvc3QgPSAkaG9zdDsKICAgICAgICAkY2xvbmUtPmF1dGhvcml0eSA9ICRjbG9uZS0+c2V0QXV0aG9yaXR5KCk7CiAgICAgICAgJGNsb25lLT5hc3NlcnRWYWxpZFN0YXRlKCk7CgogICAgICAgIHJldHVybiAkY2xvbmU7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUG9ydCgkcG9ydCk6IFVyaUludGVyZmFjZQogICAgewogICAgICAgICRwb3J0ID0gJHRoaXMtPmZvcm1hdFBvcnQoJHBvcnQpOwogICAgICAgIGlmICgkcG9ydCA9PT0gJHRoaXMtPnBvcnQpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJGNsb25lID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJGNsb25lLT5wb3J0ID0gJHBvcnQ7CiAgICAgICAgJGNsb25lLT5hdXRob3JpdHkgPSAkY2xvbmUtPnNldEF1dGhvcml0eSgpOwogICAgICAgICRjbG9uZS0+YXNzZXJ0VmFsaWRTdGF0ZSgpOwoKICAgICAgICByZXR1cm4gJGNsb25lOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8b2JqZWN0ICRwYXRoCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUGF0aCgkcGF0aCk6IFVyaUludGVyZmFjZQogICAgewogICAgICAgICRwYXRoID0gJHRoaXMtPmZpbHRlclN0cmluZygkcGF0aCk7CiAgICAgICAgaWYgKG51bGwgPT09ICRwYXRoKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0EgcGF0aCBtdXN0IGJlIGEgc3RyaW5nIE5VTEwgZ2l2ZW4uJyk7CiAgICAgICAgfQoKICAgICAgICAkcGF0aCA9ICR0aGlzLT5mb3JtYXRQYXRoKCRwYXRoKTsKICAgICAgICBpZiAoJHBhdGggPT09ICR0aGlzLT5wYXRoKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgICRjbG9uZSA9IGNsb25lICR0aGlzOwogICAgICAgICRjbG9uZS0+cGF0aCA9ICRwYXRoOwogICAgICAgICRjbG9uZS0+YXNzZXJ0VmFsaWRTdGF0ZSgpOwoKICAgICAgICByZXR1cm4gJGNsb25lOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFF1ZXJ5KCRxdWVyeSk6IFVyaUludGVyZmFjZQogICAgewogICAgICAgICRxdWVyeSA9ICR0aGlzLT5mb3JtYXRRdWVyeUFuZEZyYWdtZW50KCR0aGlzLT5maWx0ZXJTdHJpbmcoJHF1ZXJ5KSk7CiAgICAgICAgaWYgKCRxdWVyeSA9PT0gJHRoaXMtPnF1ZXJ5KSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgICRjbG9uZSA9IGNsb25lICR0aGlzOwogICAgICAgICRjbG9uZS0+cXVlcnkgPSAkcXVlcnk7CiAgICAgICAgJGNsb25lLT5hc3NlcnRWYWxpZFN0YXRlKCk7CgogICAgICAgIHJldHVybiAkY2xvbmU7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoRnJhZ21lbnQoJGZyYWdtZW50KTogVXJpSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJGZyYWdtZW50ID0gJHRoaXMtPmZvcm1hdFF1ZXJ5QW5kRnJhZ21lbnQoJHRoaXMtPmZpbHRlclN0cmluZygkZnJhZ21lbnQpKTsKICAgICAgICBpZiAoJGZyYWdtZW50ID09PSAkdGhpcy0+ZnJhZ21lbnQpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJGNsb25lID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJGNsb25lLT5mcmFnbWVudCA9ICRmcmFnbWVudDsKICAgICAgICAkY2xvbmUtPmFzc2VydFZhbGlkU3RhdGUoKTsKCiAgICAgICAgcmV0dXJuICRjbG9uZTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/UriInfo.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmk7Cgp1c2UgTGVhZ3VlXFVyaVxDb250cmFjdHNcVXJpSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2UgYXMgUHNyN1VyaUludGVyZmFjZTsKdXNlIFR5cGVFcnJvcjsKdXNlIGZ1bmN0aW9uIGV4cGxvZGU7CnVzZSBmdW5jdGlvbiBpbXBsb2RlOwp1c2UgZnVuY3Rpb24gcHJlZ19yZXBsYWNlX2NhbGxiYWNrOwp1c2UgZnVuY3Rpb24gcmF3dXJsZGVjb2RlOwp1c2UgZnVuY3Rpb24gc3ByaW50ZjsKCmZpbmFsIGNsYXNzIFVyaUluZm8KewogICAgcHJpdmF0ZSBjb25zdCBSRUdFWFBfRU5DT0RFRF9DSEFSUyA9ICcsJSgyW0R8RV18M1swLTldfDRbMS05fEEtRl18NVswLTl8QUZdfDZbMS05fEEtRl18N1swLTl8RV0pLGknOwoKICAgIHByaXZhdGUgY29uc3QgV0hBVFdHX1NQRUNJQUxfU0NIRU1FUyA9IFsnZnRwJyA9PiAyMSwgJ2h0dHAnID0+IDgwLCAnaHR0cHMnID0+IDQ0MywgJ3dzJyA9PiA4MCwgJ3dzcycgPT4gNDQzXTsKCiAgICAvKioKICAgICAqIEBjb2RlQ292ZXJhZ2VJZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UgJHVyaQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBlbXB0eUNvbXBvbmVudFZhbHVlKCR1cmkpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR1cmkgaW5zdGFuY2VvZiBQc3I3VXJpSW50ZXJmYWNlID8gJycgOiBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogRmlsdGVyIHRoZSBVUkkgb2JqZWN0LgogICAgICoKICAgICAqIFRvIGJlIHZhbGlkIGFuIFVSSSBNVVNUIGltcGxlbWVudCBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZyBpbnRlcmZhY2U6CiAgICAgKiAgICAgLSBMZWFndWVcVXJpXFVyaUludGVyZmFjZQogICAgICogICAgIC0gUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2UKICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHVyaSB0aGUgVVJJIHRvIHZhbGlkYXRlCiAgICAgKgogICAgICogQHRocm93cyBUeXBlRXJyb3IgaWYgdGhlIFVSSSBvYmplY3QgZG9lcyBub3QgaW1wbGVtZW50cyB0aGUgc3VwcG9ydGVkIGludGVyZmFjZXMuCiAgICAgKgogICAgICogQHJldHVybiBQc3I3VXJpSW50ZXJmYWNlfFVyaUludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBmaWx0ZXJVcmkoJHVyaSkKICAgIHsKICAgICAgICBpZiAoJHVyaSBpbnN0YW5jZW9mIFBzcjdVcmlJbnRlcmZhY2UgfHwgJHVyaSBpbnN0YW5jZW9mIFVyaUludGVyZmFjZSkgewogICAgICAgICAgICByZXR1cm4gJHVyaTsKICAgICAgICB9CgogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3Ioc3ByaW50ZignVGhlIHVyaSBtdXN0IGJlIGEgdmFsaWQgVVJJIG9iamVjdCByZWNlaXZlZCBgJXNgJywgaXNfb2JqZWN0KCR1cmkpID8gZ2V0X2NsYXNzKCR1cmkpIDogZ2V0dHlwZSgkdXJpKSkpOwogICAgfQoKICAgIC8qKgogICAgICogTm9ybWFsaXplIGFuIFVSSSBmb3IgY29tcGFyaXNvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UgJHVyaQogICAgICoKICAgICAqIEByZXR1cm4gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gbm9ybWFsaXplKCR1cmkpCiAgICB7CiAgICAgICAgJHVyaSA9IHNlbGY6OmZpbHRlclVyaSgkdXJpKTsKICAgICAgICAkbnVsbCA9IHNlbGY6OmVtcHR5Q29tcG9uZW50VmFsdWUoJHVyaSk7CgogICAgICAgICRwYXRoID0gJHVyaS0+Z2V0UGF0aCgpOwogICAgICAgIGlmICgnLycgPT09ICgkcGF0aFswXSA/PyAnJykgfHwgJycgIT09ICR1cmktPmdldFNjaGVtZSgpLiR1cmktPmdldEF1dGhvcml0eSgpKSB7CiAgICAgICAgICAgICRwYXRoID0gVXJpUmVzb2x2ZXI6OnJlc29sdmUoJHVyaSwgJHVyaS0+d2l0aFBhdGgoJycpLT53aXRoUXVlcnkoJG51bGwpKS0+Z2V0UGF0aCgpOwogICAgICAgIH0KCiAgICAgICAgJHF1ZXJ5ID0gJHVyaS0+Z2V0UXVlcnkoKTsKICAgICAgICAkZnJhZ21lbnQgPSAkdXJpLT5nZXRGcmFnbWVudCgpOwogICAgICAgICRmcmFnbWVudE9yaWcgPSAkZnJhZ21lbnQ7CiAgICAgICAgJHBhaXJzID0gbnVsbCA9PT0gJHF1ZXJ5ID8gW10gOiBleHBsb2RlKCcmJywgJHF1ZXJ5KTsKICAgICAgICBzb3J0KCRwYWlycywgU09SVF9SRUdVTEFSKTsKCiAgICAgICAgJHJlcGxhY2UgPSBzdGF0aWMgZm4gKGFycmF5ICRtYXRjaGVzKTogc3RyaW5nID0+IHJhd3VybGRlY29kZSgkbWF0Y2hlc1swXSk7CgogICAgICAgICRyZXR2YWwgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soc2VsZjo6UkVHRVhQX0VOQ09ERURfQ0hBUlMsICRyZXBsYWNlLCBbJHBhdGgsIGltcGxvZGUoJyYnLCAkcGFpcnMpLCAkZnJhZ21lbnRdKTsKICAgICAgICBpZiAobnVsbCAhPT0gJHJldHZhbCkgewogICAgICAgICAgICBbJHBhdGgsICRxdWVyeSwgJGZyYWdtZW50XSA9ICRyZXR2YWwgKyBbJycsICRudWxsLCAkbnVsbF07CiAgICAgICAgfQoKICAgICAgICBpZiAoJG51bGwgIT09ICR1cmktPmdldEF1dGhvcml0eSgpICYmICcnID09PSAkcGF0aCkgewogICAgICAgICAgICAkcGF0aCA9ICcvJzsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdXJpCiAgICAgICAgICAgIC0+d2l0aEhvc3QoVXJpOjpjcmVhdGVGcm9tQ29tcG9uZW50cyhbJ2hvc3QnID0+ICR1cmktPmdldEhvc3QoKV0pLT5nZXRIb3N0KCkpCiAgICAgICAgICAgIC0+d2l0aFBhdGgoJHBhdGgpCiAgICAgICAgICAgIC0+d2l0aFF1ZXJ5KFtdID09PSAkcGFpcnMgPyAkbnVsbCA6ICRxdWVyeSkKICAgICAgICAgICAgLT53aXRoRnJhZ21lbnQoJG51bGwgPT09ICRmcmFnbWVudE9yaWcgPyAkZnJhZ21lbnRPcmlnIDogJGZyYWdtZW50KTsKICAgIH0KCiAgICAvKioKICAgICAqIFRlbGwgd2hldGhlciB0aGUgVVJJIHJlcHJlc2VudHMgYW4gYWJzb2x1dGUgVVJJLgogICAgICoKICAgICAqIEBwYXJhbSBQc3I3VXJpSW50ZXJmYWNlfFVyaUludGVyZmFjZSAkdXJpCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNBYnNvbHV0ZSgkdXJpKTogYm9vbAogICAgewogICAgICAgIHJldHVybiBzZWxmOjplbXB0eUNvbXBvbmVudFZhbHVlKCR1cmkpICE9PSBzZWxmOjpmaWx0ZXJVcmkoJHVyaSktPmdldFNjaGVtZSgpOwogICAgfQoKICAgIC8qKgogICAgICogVGVsbCB3aGV0aGVyIHRoZSBVUkkgcmVwcmVzZW50cyBhIG5ldHdvcmsgcGF0aC4KICAgICAqCiAgICAgKiBAcGFyYW0gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UgJHVyaQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzTmV0d29ya1BhdGgoJHVyaSk6IGJvb2wKICAgIHsKICAgICAgICAkdXJpID0gc2VsZjo6ZmlsdGVyVXJpKCR1cmkpOwogICAgICAgICRudWxsID0gc2VsZjo6ZW1wdHlDb21wb25lbnRWYWx1ZSgkdXJpKTsKCiAgICAgICAgcmV0dXJuICRudWxsID09PSAkdXJpLT5nZXRTY2hlbWUoKSAmJiAkbnVsbCAhPT0gJHVyaS0+Z2V0QXV0aG9yaXR5KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBUZWxsIHdoZXRoZXIgdGhlIFVSSSByZXByZXNlbnRzIGFuIGFic29sdXRlIHBhdGguCiAgICAgKgogICAgICogQHBhcmFtIFBzcjdVcmlJbnRlcmZhY2V8VXJpSW50ZXJmYWNlICR1cmkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0Fic29sdXRlUGF0aCgkdXJpKTogYm9vbAogICAgewogICAgICAgICR1cmkgPSBzZWxmOjpmaWx0ZXJVcmkoJHVyaSk7CiAgICAgICAgJG51bGwgPSBzZWxmOjplbXB0eUNvbXBvbmVudFZhbHVlKCR1cmkpOwoKICAgICAgICByZXR1cm4gJG51bGwgPT09ICR1cmktPmdldFNjaGVtZSgpCiAgICAgICAgICAgICYmICRudWxsID09PSAkdXJpLT5nZXRBdXRob3JpdHkoKQogICAgICAgICAgICAmJiAnLycgPT09ICgkdXJpLT5nZXRQYXRoKClbMF0gPz8gJycpOwogICAgfQoKICAgIC8qKgogICAgICogVGVsbCB3aGV0aGVyIHRoZSBVUkkgcmVwcmVzZW50cyBhIHJlbGF0aXZlIHBhdGguCiAgICAgKgogICAgICogQHBhcmFtIFBzcjdVcmlJbnRlcmZhY2V8VXJpSW50ZXJmYWNlICR1cmkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc1JlbGF0aXZlUGF0aCgkdXJpKTogYm9vbAogICAgewogICAgICAgICR1cmkgPSBzZWxmOjpmaWx0ZXJVcmkoJHVyaSk7CiAgICAgICAgJG51bGwgPSBzZWxmOjplbXB0eUNvbXBvbmVudFZhbHVlKCR1cmkpOwoKICAgICAgICByZXR1cm4gJG51bGwgPT09ICR1cmktPmdldFNjaGVtZSgpCiAgICAgICAgICAgICYmICRudWxsID09PSAkdXJpLT5nZXRBdXRob3JpdHkoKQogICAgICAgICAgICAmJiAnLycgIT09ICgkdXJpLT5nZXRQYXRoKClbMF0gPz8gJycpOwogICAgfQoKICAgIC8qKgogICAgICogVGVsbCB3aGV0aGVyIGJvdGggVVJJIHJlZmVycyB0byB0aGUgc2FtZSBkb2N1bWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UgJHVyaQogICAgICogQHBhcmFtIFBzcjdVcmlJbnRlcmZhY2V8VXJpSW50ZXJmYWNlICRiYXNlX3VyaQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzU2FtZURvY3VtZW50KCR1cmksICRiYXNlX3VyaSk6IGJvb2wKICAgIHsKICAgICAgICAkdXJpID0gc2VsZjo6bm9ybWFsaXplKCR1cmkpOwogICAgICAgICRiYXNlX3VyaSA9IHNlbGY6Om5vcm1hbGl6ZSgkYmFzZV91cmkpOwoKICAgICAgICByZXR1cm4gKHN0cmluZykgJHVyaS0+d2l0aEZyYWdtZW50KCR1cmkgaW5zdGFuY2VvZiBQc3I3VXJpSW50ZXJmYWNlID8gJycgOiBudWxsKQogICAgICAgICAgICA9PT0gKHN0cmluZykgJGJhc2VfdXJpLT53aXRoRnJhZ21lbnQoJGJhc2VfdXJpIGluc3RhbmNlb2YgUHNyN1VyaUludGVyZmFjZSA/ICcnIDogbnVsbCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBVUkkgb3JpZ2luIHByb3BlcnR5IGFzIGRlZmluZWQgYnkgV0hBVFdHIFVSTCBsaXZpbmcgc3RhbmRhcmQuCiAgICAgKgogICAgICoge0BzZWUgaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNvcmlnaW59CiAgICAgKgogICAgICogRm9yIFVSSSB3aXRob3V0IGEgc3BlY2lhbCBzY2hlbWUgdGhlIG1ldGhvZCByZXR1cm5zIG51bGwKICAgICAqIEZvciBVUkkgd2l0aCB0aGUgZmlsZSBzY2hlbWUgdGhlIG1ldGhvZCB3aWxsIHJldHVybiBudWxsIChhcyB0aGlzIGlzIGxlZnQgdG8gdGhlIGltcGxlbWVudGF0aW9uIGRlY2lzaW9uKQogICAgICogRm9yIFVSSSB3aXRoIGEgc3BlY2lhbCBzY2hlbWUgdGhlIG1ldGhvZCByZXR1cm5zIHRoZSBzY2hlbWUgZm9sbG93ZWQgYnkgaXRzIGF1dGhvcml0eSAod2l0aG91dCB0aGUgdXNlcmluZm8gcGFydCkKICAgICAqCiAgICAgKiBAcGFyYW0gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UgJHVyaQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldE9yaWdpbigkdXJpKTogP3N0cmluZwogICAgewogICAgICAgICRzY2hlbWUgPSBzZWxmOjpmaWx0ZXJVcmkoJHVyaSktPmdldFNjaGVtZSgpOwogICAgICAgIGlmICgnYmxvYicgPT09ICRzY2hlbWUpIHsKICAgICAgICAgICAgJHVyaSA9IFVyaTo6Y3JlYXRlRnJvbVN0cmluZygkdXJpLT5nZXRQYXRoKCkpOwogICAgICAgICAgICAkc2NoZW1lID0gJHVyaS0+Z2V0U2NoZW1lKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAobnVsbCA9PT0gJHNjaGVtZSB8fCAhYXJyYXlfa2V5X2V4aXN0cygkc2NoZW1lLCBzZWxmOjpXSEFUV0dfU1BFQ0lBTF9TQ0hFTUVTKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICRudWxsID0gc2VsZjo6ZW1wdHlDb21wb25lbnRWYWx1ZSgkdXJpKTsKCiAgICAgICAgcmV0dXJuIChzdHJpbmcpICR1cmktPndpdGhGcmFnbWVudCgkbnVsbCktPndpdGhRdWVyeSgkbnVsbCktPndpdGhQYXRoKCcnKS0+d2l0aFVzZXJJbmZvKCRudWxsKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBQc3I3VXJpSW50ZXJmYWNlfFVyaUludGVyZmFjZSAkdXJpCiAgICAgKiBAcGFyYW0gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UgJGJhc2VfdXJpCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNDcm9zc09yaWdpbigkdXJpLCAkYmFzZV91cmkpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIG51bGwgPT09ICgkdXJpU3RyaW5nID0gc2VsZjo6Z2V0T3JpZ2luKFVyaTo6Y3JlYXRlRnJvbVVyaSgkdXJpKSkpCiAgICAgICAgICAgIHx8IG51bGwgPT09ICgkYmFzZVVyaVN0cmluZyA9IHNlbGY6OmdldE9yaWdpbihVcmk6OmNyZWF0ZUZyb21VcmkoJGJhc2VfdXJpKSkpCiAgICAgICAgICAgIHx8ICR1cmlTdHJpbmcgIT09ICRiYXNlVXJpU3RyaW5nOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/UriResolver.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmk7Cgp1c2UgTGVhZ3VlXFVyaVxDb250cmFjdHNcVXJpSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2UgYXMgUHNyN1VyaUludGVyZmFjZTsKdXNlIFR5cGVFcnJvcjsKdXNlIGZ1bmN0aW9uIGFycmF5X3BvcDsKdXNlIGZ1bmN0aW9uIGFycmF5X3JlZHVjZTsKdXNlIGZ1bmN0aW9uIGNvdW50Owp1c2UgZnVuY3Rpb24gZW5kOwp1c2UgZnVuY3Rpb24gZXhwbG9kZTsKdXNlIGZ1bmN0aW9uIGdldHR5cGU7CnVzZSBmdW5jdGlvbiBpbXBsb2RlOwp1c2UgZnVuY3Rpb24gaW5fYXJyYXk7CnVzZSBmdW5jdGlvbiBzcHJpbnRmOwp1c2UgZnVuY3Rpb24gc3RyX3JlcGVhdDsKdXNlIGZ1bmN0aW9uIHN0cnBvczsKdXNlIGZ1bmN0aW9uIHN1YnN0cjsKCmZpbmFsIGNsYXNzIFVyaVJlc29sdmVyCnsKICAgIC8qKgogICAgICogQHZhciBhcnJheTxzdHJpbmcsaW50PgogICAgICovCiAgICBjb25zdCBET1RfU0VHTUVOVFMgPSBbJy4nID0+IDEsICcuLicgPT4gMV07CgogICAgLyoqCiAgICAgKiBAY29kZUNvdmVyYWdlSWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgfQoKICAgIC8qKgogICAgICogUmVzb2x2ZSBhbiBVUkkgYWdhaW5zdCBhIGJhc2UgVVJJIHVzaW5nIFJGQzM5ODYgcnVsZXMuCiAgICAgKgogICAgICogSWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgVXJpSW50ZXJmYWNlIHRoZSBtZXRob2QgcmV0dXJucyBhIFVyaUludGVyZmFjZSBvYmplY3QKICAgICAqIElmIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBhIFBzcjdVcmlJbnRlcmZhY2UgdGhlIG1ldGhvZCByZXR1cm5zIGEgUHNyN1VyaUludGVyZmFjZSBvYmplY3QKICAgICAqCiAgICAgKiBAcGFyYW0gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UgJHVyaQogICAgICogQHBhcmFtIFBzcjdVcmlJbnRlcmZhY2V8VXJpSW50ZXJmYWNlICRiYXNlX3VyaQogICAgICoKICAgICAqIEByZXR1cm4gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXNvbHZlKCR1cmksICRiYXNlX3VyaSkKICAgIHsKICAgICAgICBzZWxmOjpmaWx0ZXJVcmkoJHVyaSk7CiAgICAgICAgc2VsZjo6ZmlsdGVyVXJpKCRiYXNlX3VyaSk7CiAgICAgICAgJG51bGwgPSAkdXJpIGluc3RhbmNlb2YgUHNyN1VyaUludGVyZmFjZSA/ICcnIDogbnVsbDsKCiAgICAgICAgaWYgKCRudWxsICE9PSAkdXJpLT5nZXRTY2hlbWUoKSkgewogICAgICAgICAgICByZXR1cm4gJHVyaQogICAgICAgICAgICAgICAgLT53aXRoUGF0aChzZWxmOjpyZW1vdmVEb3RTZWdtZW50cygkdXJpLT5nZXRQYXRoKCkpKTsKICAgICAgICB9CgogICAgICAgIGlmICgkbnVsbCAhPT0gJHVyaS0+Z2V0QXV0aG9yaXR5KCkpIHsKICAgICAgICAgICAgcmV0dXJuICR1cmkKICAgICAgICAgICAgICAgIC0+d2l0aFNjaGVtZSgkYmFzZV91cmktPmdldFNjaGVtZSgpKQogICAgICAgICAgICAgICAgLT53aXRoUGF0aChzZWxmOjpyZW1vdmVEb3RTZWdtZW50cygkdXJpLT5nZXRQYXRoKCkpKTsKICAgICAgICB9CgogICAgICAgICR1c2VyID0gJG51bGw7CiAgICAgICAgJHBhc3MgPSBudWxsOwogICAgICAgICR1c2VySW5mbyA9ICRiYXNlX3VyaS0+Z2V0VXNlckluZm8oKTsKICAgICAgICBpZiAobnVsbCAhPT0gJHVzZXJJbmZvKSB7CiAgICAgICAgICAgIFskdXNlciwgJHBhc3NdID0gZXhwbG9kZSgnOicsICR1c2VySW5mbywgMikgKyBbMSA9PiBudWxsXTsKICAgICAgICB9CgogICAgICAgIFskdXJpX3BhdGgsICR1cmlfcXVlcnldID0gc2VsZjo6cmVzb2x2ZVBhdGhBbmRRdWVyeSgkdXJpLCAkYmFzZV91cmkpOwoKICAgICAgICByZXR1cm4gJHVyaQogICAgICAgICAgICAtPndpdGhQYXRoKHNlbGY6OnJlbW92ZURvdFNlZ21lbnRzKCR1cmlfcGF0aCkpCiAgICAgICAgICAgIC0+d2l0aFF1ZXJ5KCR1cmlfcXVlcnkpCiAgICAgICAgICAgIC0+d2l0aEhvc3QoJGJhc2VfdXJpLT5nZXRIb3N0KCkpCiAgICAgICAgICAgIC0+d2l0aFBvcnQoJGJhc2VfdXJpLT5nZXRQb3J0KCkpCiAgICAgICAgICAgIC0+d2l0aFVzZXJJbmZvKChzdHJpbmcpICR1c2VyLCAkcGFzcykKICAgICAgICAgICAgLT53aXRoU2NoZW1lKCRiYXNlX3VyaS0+Z2V0U2NoZW1lKCkpCiAgICAgICAgOwogICAgfQoKICAgIC8qKgogICAgICogRmlsdGVyIHRoZSBVUkkgb2JqZWN0LgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdXJpIGFuIFVSSSBvYmplY3QKICAgICAqCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvciBpZiB0aGUgVVJJIG9iamVjdCBkb2VzIG5vdCBpbXBsZW1lbnRzIHRoZSBzdXBwb3J0ZWQgaW50ZXJmYWNlcy4KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZmlsdGVyVXJpKCR1cmkpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCEkdXJpIGluc3RhbmNlb2YgVXJpSW50ZXJmYWNlICYmICEkdXJpIGluc3RhbmNlb2YgUHNyN1VyaUludGVyZmFjZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHNwcmludGYoJ1RoZSB1cmkgbXVzdCBiZSBhIHZhbGlkIFVSSSBvYmplY3QgcmVjZWl2ZWQgYCVzYCcsIGdldHR5cGUoJHVyaSkpKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZW1vdmUgZG90IHNlZ21lbnRzIGZyb20gdGhlIFVSSSBwYXRoLgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiByZW1vdmVEb3RTZWdtZW50cyhzdHJpbmcgJHBhdGgpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoZmFsc2UgPT09IHN0cnBvcygkcGF0aCwgJy4nKSkgewogICAgICAgICAgICByZXR1cm4gJHBhdGg7CiAgICAgICAgfQoKICAgICAgICAkb2xkX3NlZ21lbnRzID0gZXhwbG9kZSgnLycsICRwYXRoKTsKICAgICAgICAkbmV3X3BhdGggPSBpbXBsb2RlKCcvJywgYXJyYXlfcmVkdWNlKCRvbGRfc2VnbWVudHMsIFtVcmlSZXNvbHZlcjo6Y2xhc3MsICdyZWR1Y2VyJ10sIFtdKSk7CiAgICAgICAgaWYgKGlzc2V0KHNlbGY6OkRPVF9TRUdNRU5UU1tlbmQoJG9sZF9zZWdtZW50cyldKSkgewogICAgICAgICAgICAkbmV3X3BhdGggLj0gJy8nOwogICAgICAgIH0KCiAgICAgICAgLy8gQGNvZGVDb3ZlcmFnZUlnbm9yZVN0YXJ0CiAgICAgICAgLy8gYWRkZWQgYmVjYXVzZSBzb21lIFBTUi03IGltcGxlbWVudGF0aW9ucyBkbyBub3QgcmVzcGVjdCBSRkMzOTg2CiAgICAgICAgaWYgKDAgPT09IHN0cnBvcygkcGF0aCwgJy8nKSAmJiAwICE9PSBzdHJwb3MoJG5ld19wYXRoLCAnLycpKSB7CiAgICAgICAgICAgIHJldHVybiAnLycuJG5ld19wYXRoOwogICAgICAgIH0KICAgICAgICAvLyBAY29kZUNvdmVyYWdlSWdub3JlRW5kCgogICAgICAgIHJldHVybiAkbmV3X3BhdGg7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZW1vdmUgZG90IHNlZ21lbnRzLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXk8aW50LCBzdHJpbmc+CiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHJlZHVjZXIoYXJyYXkgJGNhcnJ5LCBzdHJpbmcgJHNlZ21lbnQpOiBhcnJheQogICAgewogICAgICAgIGlmICgnLi4nID09PSAkc2VnbWVudCkgewogICAgICAgICAgICBhcnJheV9wb3AoJGNhcnJ5KTsKCiAgICAgICAgICAgIHJldHVybiAkY2Fycnk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIWlzc2V0KHNlbGY6OkRPVF9TRUdNRU5UU1skc2VnbWVudF0pKSB7CiAgICAgICAgICAgICRjYXJyeVtdID0gJHNlZ21lbnQ7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGNhcnJ5OwogICAgfQoKICAgIC8qKgogICAgICogUmVzb2x2ZSBhbiBVUkkgcGF0aCBhbmQgcXVlcnkgY29tcG9uZW50LgogICAgICoKICAgICAqIEBwYXJhbSBQc3I3VXJpSW50ZXJmYWNlfFVyaUludGVyZmFjZSAkdXJpCiAgICAgKiBAcGFyYW0gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UgJGJhc2VfdXJpCiAgICAgKgogICAgICogQHJldHVybiBhcnJheXswOnN0cmluZywgMTpzdHJpbmd8bnVsbH0KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gcmVzb2x2ZVBhdGhBbmRRdWVyeSgkdXJpLCAkYmFzZV91cmkpOiBhcnJheQogICAgewogICAgICAgICR0YXJnZXRfcGF0aCA9ICR1cmktPmdldFBhdGgoKTsKICAgICAgICAkdGFyZ2V0X3F1ZXJ5ID0gJHVyaS0+Z2V0UXVlcnkoKTsKICAgICAgICAkbnVsbCA9ICR1cmkgaW5zdGFuY2VvZiBQc3I3VXJpSW50ZXJmYWNlID8gJycgOiBudWxsOwogICAgICAgICRiYXNlTnVsbCA9ICRiYXNlX3VyaSBpbnN0YW5jZW9mIFBzcjdVcmlJbnRlcmZhY2UgPyAnJyA6IG51bGw7CgogICAgICAgIGlmICgwID09PSBzdHJwb3MoJHRhcmdldF9wYXRoLCAnLycpKSB7CiAgICAgICAgICAgIHJldHVybiBbJHRhcmdldF9wYXRoLCAkdGFyZ2V0X3F1ZXJ5XTsKICAgICAgICB9CgogICAgICAgIGlmICgnJyA9PT0gJHRhcmdldF9wYXRoKSB7CiAgICAgICAgICAgIGlmICgkbnVsbCA9PT0gJHRhcmdldF9xdWVyeSkgewogICAgICAgICAgICAgICAgJHRhcmdldF9xdWVyeSA9ICRiYXNlX3VyaS0+Z2V0UXVlcnkoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRhcmdldF9wYXRoID0gJGJhc2VfdXJpLT5nZXRQYXRoKCk7CiAgICAgICAgICAgIC8vQGNvZGVDb3ZlcmFnZUlnbm9yZVN0YXJ0CiAgICAgICAgICAgIC8vYmVjYXVzZSBzb21lIFBTUi03IFVyaSBpbXBsZW1lbnRhdGlvbnMgYWxsb3cgdGhpcyBSRkMzOTg2IGZvcmJpZGRlbiBjb25zdHJ1Y3Rpb24KICAgICAgICAgICAgaWYgKCRiYXNlTnVsbCAhPT0gJGJhc2VfdXJpLT5nZXRBdXRob3JpdHkoKSAmJiAwICE9PSBzdHJwb3MoJHRhcmdldF9wYXRoLCAnLycpKSB7CiAgICAgICAgICAgICAgICAkdGFyZ2V0X3BhdGggPSAnLycuJHRhcmdldF9wYXRoOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vQGNvZGVDb3ZlcmFnZUlnbm9yZUVuZAoKICAgICAgICAgICAgcmV0dXJuIFskdGFyZ2V0X3BhdGgsICR0YXJnZXRfcXVlcnldOwogICAgICAgIH0KCiAgICAgICAgJGJhc2VfcGF0aCA9ICRiYXNlX3VyaS0+Z2V0UGF0aCgpOwogICAgICAgIGlmICgkYmFzZU51bGwgIT09ICRiYXNlX3VyaS0+Z2V0QXV0aG9yaXR5KCkgJiYgJycgPT09ICRiYXNlX3BhdGgpIHsKICAgICAgICAgICAgJHRhcmdldF9wYXRoID0gJy8nLiR0YXJnZXRfcGF0aDsKICAgICAgICB9CgogICAgICAgIGlmICgnJyAhPT0gJGJhc2VfcGF0aCkgewogICAgICAgICAgICAkc2VnbWVudHMgPSBleHBsb2RlKCcvJywgJGJhc2VfcGF0aCk7CiAgICAgICAgICAgIGFycmF5X3BvcCgkc2VnbWVudHMpOwogICAgICAgICAgICBpZiAoW10gIT09ICRzZWdtZW50cykgewogICAgICAgICAgICAgICAgJHRhcmdldF9wYXRoID0gaW1wbG9kZSgnLycsICRzZWdtZW50cykuJy8nLiR0YXJnZXRfcGF0aDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFskdGFyZ2V0X3BhdGgsICR0YXJnZXRfcXVlcnldOwogICAgfQoKICAgIC8qKgogICAgICogUmVsYXRpdml6ZSBhbiBVUkkgYWNjb3JkaW5nIHRvIGEgYmFzZSBVUkkuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBzdWJtaXR0ZWQgVVJJIGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBVUkkgaW5zdGFuY2Ugb2YgdGhlIHNhbWUgdHlwZSB0aGF0IGNvbnRhaW5zIHRoZSBhcHBsaWVkIG1vZGlmaWNhdGlvbnMuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSB0cmFuc3BhcmVudCB3aGVuIGRlYWxpbmcgd2l0aCBlcnJvciBhbmQgZXhjZXB0aW9ucy4KICAgICAqIEl0IE1VU1Qgbm90IGFsdGVyIG9mIHNpbGVuY2UgdGhlbSBhcGFydCBmcm9tIHZhbGlkYXRpbmcgaXRzIG93biBwYXJhbWV0ZXJzLgogICAgICoKICAgICAqIEBwYXJhbSBQc3I3VXJpSW50ZXJmYWNlfFVyaUludGVyZmFjZSAkdXJpCiAgICAgKiBAcGFyYW0gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UgJGJhc2VfdXJpCiAgICAgKgogICAgICogQHJldHVybiBQc3I3VXJpSW50ZXJmYWNlfFVyaUludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlbGF0aXZpemUoJHVyaSwgJGJhc2VfdXJpKQogICAgewogICAgICAgIHNlbGY6OmZpbHRlclVyaSgkdXJpKTsKICAgICAgICBzZWxmOjpmaWx0ZXJVcmkoJGJhc2VfdXJpKTsKICAgICAgICAkdXJpID0gc2VsZjo6Zm9ybWF0SG9zdCgkdXJpKTsKICAgICAgICAkYmFzZV91cmkgPSBzZWxmOjpmb3JtYXRIb3N0KCRiYXNlX3VyaSk7CiAgICAgICAgaWYgKCFzZWxmOjppc1JlbGF0aXZpemFibGUoJHVyaSwgJGJhc2VfdXJpKSkgewogICAgICAgICAgICByZXR1cm4gJHVyaTsKICAgICAgICB9CgogICAgICAgICRudWxsID0gJHVyaSBpbnN0YW5jZW9mIFBzcjdVcmlJbnRlcmZhY2UgPyAnJyA6IG51bGw7CiAgICAgICAgJHVyaSA9ICR1cmktPndpdGhTY2hlbWUoJG51bGwpLT53aXRoUG9ydChudWxsKS0+d2l0aFVzZXJJbmZvKCRudWxsKS0+d2l0aEhvc3QoJG51bGwpOwogICAgICAgICR0YXJnZXRfcGF0aCA9ICR1cmktPmdldFBhdGgoKTsKICAgICAgICBpZiAoJHRhcmdldF9wYXRoICE9PSAkYmFzZV91cmktPmdldFBhdGgoKSkgewogICAgICAgICAgICByZXR1cm4gJHVyaS0+d2l0aFBhdGgoc2VsZjo6cmVsYXRpdml6ZVBhdGgoJHRhcmdldF9wYXRoLCAkYmFzZV91cmktPmdldFBhdGgoKSkpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHNlbGY6OmNvbXBvbmVudEVxdWFscygnZ2V0UXVlcnknLCAkdXJpLCAkYmFzZV91cmkpKSB7CiAgICAgICAgICAgIHJldHVybiAkdXJpLT53aXRoUGF0aCgnJyktPndpdGhRdWVyeSgkbnVsbCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJG51bGwgPT09ICR1cmktPmdldFF1ZXJ5KCkpIHsKICAgICAgICAgICAgcmV0dXJuICR1cmktPndpdGhQYXRoKHNlbGY6OmZvcm1hdFBhdGhXaXRoRW1wdHlCYXNlUXVlcnkoJHRhcmdldF9wYXRoKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHVyaS0+d2l0aFBhdGgoJycpOwogICAgfQoKICAgIC8qKgogICAgICogVGVsbHMgd2hldGhlciB0aGUgY29tcG9uZW50IHZhbHVlIGZyb20gYm90aCBVUkkgb2JqZWN0IGVxdWFscy4KICAgICAqCiAgICAgKiBAcGFyYW0gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UgJHVyaQogICAgICogQHBhcmFtIFBzcjdVcmlJbnRlcmZhY2V8VXJpSW50ZXJmYWNlICRiYXNlX3VyaQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBjb21wb25lbnRFcXVhbHMoc3RyaW5nICRtZXRob2QsICR1cmksICRiYXNlX3VyaSk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6Z2V0Q29tcG9uZW50KCRtZXRob2QsICR1cmkpID09PSBzZWxmOjpnZXRDb21wb25lbnQoJG1ldGhvZCwgJGJhc2VfdXJpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGNvbXBvbmVudCB2YWx1ZSBmcm9tIHRoZSBzdWJtaXR0ZWQgVVJJIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UgJHVyaQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBnZXRDb21wb25lbnQoc3RyaW5nICRtZXRob2QsICR1cmkpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgJGNvbXBvbmVudCA9ICR1cmktPiRtZXRob2QoKTsKICAgICAgICBpZiAoJHVyaSBpbnN0YW5jZW9mIFBzcjdVcmlJbnRlcmZhY2UgJiYgJycgPT09ICRjb21wb25lbnQpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGNvbXBvbmVudDsKICAgIH0KCiAgICAvKioKICAgICAqIEZpbHRlciB0aGUgVVJJIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UgJHVyaQogICAgICoKICAgICAqIEB0aHJvd3MgVHlwZUVycm9yIGlmIHRoZSBVUkkgb2JqZWN0IGRvZXMgbm90IGltcGxlbWVudHMgdGhlIHN1cHBvcnRlZCBpbnRlcmZhY2VzLgogICAgICoKICAgICAqIEByZXR1cm4gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZm9ybWF0SG9zdCgkdXJpKQogICAgewogICAgICAgIGlmICghJHVyaSBpbnN0YW5jZW9mIFBzcjdVcmlJbnRlcmZhY2UpIHsKICAgICAgICAgICAgcmV0dXJuICR1cmk7CiAgICAgICAgfQoKICAgICAgICAkaG9zdCA9ICR1cmktPmdldEhvc3QoKTsKICAgICAgICBpZiAoJycgPT09ICRob3N0KSB7CiAgICAgICAgICAgIHJldHVybiAkdXJpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR1cmktPndpdGhIb3N0KChzdHJpbmcpIFVyaTo6Y3JlYXRlRnJvbUNvbXBvbmVudHMoWydob3N0JyA9PiAkaG9zdF0pLT5nZXRIb3N0KCkpOwogICAgfQoKICAgIC8qKgogICAgICogVGVsbCB3aGV0aGVyIHRoZSBzdWJtaXR0ZWQgVVJJIG9iamVjdCBjYW4gYmUgcmVsYXRpdml6ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UgJHVyaQogICAgICogQHBhcmFtIFBzcjdVcmlJbnRlcmZhY2V8VXJpSW50ZXJmYWNlICRiYXNlX3VyaQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBpc1JlbGF0aXZpemFibGUoJHVyaSwgJGJhc2VfdXJpKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAhVXJpSW5mbzo6aXNSZWxhdGl2ZVBhdGgoJHVyaSkKICAgICAgICAgICAgJiYgc2VsZjo6Y29tcG9uZW50RXF1YWxzKCdnZXRTY2hlbWUnLCAkdXJpLCAkYmFzZV91cmkpCiAgICAgICAgICAgICYmICBzZWxmOjpjb21wb25lbnRFcXVhbHMoJ2dldEF1dGhvcml0eScsICR1cmksICRiYXNlX3VyaSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZWxhdGl2ZSB0aGUgVVJJIGZvciBhIGF1dGhvcml0eS1sZXNzIHRhcmdldCBVUkkuCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHJlbGF0aXZpemVQYXRoKHN0cmluZyAkcGF0aCwgc3RyaW5nICRiYXNlcGF0aCk6IHN0cmluZwogICAgewogICAgICAgICRiYXNlX3NlZ21lbnRzID0gc2VsZjo6Z2V0U2VnbWVudHMoJGJhc2VwYXRoKTsKICAgICAgICAkdGFyZ2V0X3NlZ21lbnRzID0gc2VsZjo6Z2V0U2VnbWVudHMoJHBhdGgpOwogICAgICAgICR0YXJnZXRfYmFzZW5hbWUgPSBhcnJheV9wb3AoJHRhcmdldF9zZWdtZW50cyk7CiAgICAgICAgYXJyYXlfcG9wKCRiYXNlX3NlZ21lbnRzKTsKICAgICAgICBmb3JlYWNoICgkYmFzZV9zZWdtZW50cyBhcyAkb2Zmc2V0ID0+ICRzZWdtZW50KSB7CiAgICAgICAgICAgIGlmICghaXNzZXQoJHRhcmdldF9zZWdtZW50c1skb2Zmc2V0XSkgfHwgJHNlZ21lbnQgIT09ICR0YXJnZXRfc2VnbWVudHNbJG9mZnNldF0pIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHVuc2V0KCRiYXNlX3NlZ21lbnRzWyRvZmZzZXRdLCAkdGFyZ2V0X3NlZ21lbnRzWyRvZmZzZXRdKTsKICAgICAgICB9CiAgICAgICAgJHRhcmdldF9zZWdtZW50c1tdID0gJHRhcmdldF9iYXNlbmFtZTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmZvcm1hdFBhdGgoCiAgICAgICAgICAgIHN0cl9yZXBlYXQoJy4uLycsIGNvdW50KCRiYXNlX3NlZ21lbnRzKSkuaW1wbG9kZSgnLycsICR0YXJnZXRfc2VnbWVudHMpLAogICAgICAgICAgICAkYmFzZXBhdGgKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogcmV0dXJucyB0aGUgcGF0aCBzZWdtZW50cy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGdldFNlZ21lbnRzKHN0cmluZyAkcGF0aCk6IGFycmF5CiAgICB7CiAgICAgICAgaWYgKCcnICE9PSAkcGF0aCAmJiAnLycgPT09ICRwYXRoWzBdKSB7CiAgICAgICAgICAgICRwYXRoID0gc3Vic3RyKCRwYXRoLCAxKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBleHBsb2RlKCcvJywgJHBhdGgpOwogICAgfQoKICAgIC8qKgogICAgICogRm9ybWF0dGluZyB0aGUgcGF0aCB0byBrZWVwIGEgdmFsaWQgVVJJLgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBmb3JtYXRQYXRoKHN0cmluZyAkcGF0aCwgc3RyaW5nICRiYXNlcGF0aCk6IHN0cmluZwogICAgewogICAgICAgIGlmICgnJyA9PT0gJHBhdGgpIHsKICAgICAgICAgICAgcmV0dXJuIGluX2FycmF5KCRiYXNlcGF0aCwgWycnLCAnLyddLCB0cnVlKSA/ICRiYXNlcGF0aCA6ICcuLyc7CiAgICAgICAgfQoKICAgICAgICBpZiAoZmFsc2UgPT09ICgkY29sb25fcG9zID0gc3RycG9zKCRwYXRoLCAnOicpKSkgewogICAgICAgICAgICByZXR1cm4gJHBhdGg7CiAgICAgICAgfQoKICAgICAgICAkc2xhc2hfcG9zID0gc3RycG9zKCRwYXRoLCAnLycpOwogICAgICAgIGlmIChmYWxzZSA9PT0gJHNsYXNoX3BvcyB8fCAkY29sb25fcG9zIDwgJHNsYXNoX3BvcykgewogICAgICAgICAgICByZXR1cm4gIi4vJHBhdGgiOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRwYXRoOwogICAgfQoKICAgIC8qKgogICAgICogRm9ybWF0dGluZyB0aGUgcGF0aCB0byBrZWVwIGEgcmVzb2x2YWJsZSBVUkkuCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGZvcm1hdFBhdGhXaXRoRW1wdHlCYXNlUXVlcnkoc3RyaW5nICRwYXRoKTogc3RyaW5nCiAgICB7CiAgICAgICAgJHRhcmdldF9zZWdtZW50cyA9IHNlbGY6OmdldFNlZ21lbnRzKCRwYXRoKTsKICAgICAgICAvKiogQHZhciBzdHJpbmcgJGJhc2VuYW1lICovCiAgICAgICAgJGJhc2VuYW1lID0gZW5kKCR0YXJnZXRfc2VnbWVudHMpOwoKICAgICAgICByZXR1cm4gJycgPT09ICRiYXNlbmFtZSA/ICcuLycgOiAkYmFzZW5hbWU7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/UriString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmk7Cgp1c2UgTGVhZ3VlXFVyaVxFeGNlcHRpb25zXElkbmFDb252ZXJzaW9uRmFpbGVkOwp1c2UgTGVhZ3VlXFVyaVxFeGNlcHRpb25zXElkblN1cHBvcnRNaXNzaW5nOwp1c2UgTGVhZ3VlXFVyaVxFeGNlcHRpb25zXFN5bnRheEVycm9yOwp1c2UgTGVhZ3VlXFVyaVxJZG5hXElkbmE7CnVzZSBUeXBlRXJyb3I7CnVzZSBmdW5jdGlvbiBhcnJheV9tZXJnZTsKdXNlIGZ1bmN0aW9uIGV4cGxvZGU7CnVzZSBmdW5jdGlvbiBmaWx0ZXJfdmFyOwp1c2UgZnVuY3Rpb24gZ2V0dHlwZTsKdXNlIGZ1bmN0aW9uIGluZXRfcHRvbjsKdXNlIGZ1bmN0aW9uIGlzX29iamVjdDsKdXNlIGZ1bmN0aW9uIGlzX3NjYWxhcjsKdXNlIGZ1bmN0aW9uIG1ldGhvZF9leGlzdHM7CnVzZSBmdW5jdGlvbiBwcmVnX21hdGNoOwp1c2UgZnVuY3Rpb24gcmF3dXJsZGVjb2RlOwp1c2UgZnVuY3Rpb24gc3ByaW50ZjsKdXNlIGZ1bmN0aW9uIHN0cnBvczsKdXNlIGZ1bmN0aW9uIHN1YnN0cjsKdXNlIGNvbnN0IEZJTFRFUl9GTEFHX0lQVjY7CnVzZSBjb25zdCBGSUxURVJfVkFMSURBVEVfSVA7CgovKioKICogQSBjbGFzcyB0byBwYXJzZSBhIFVSSSBzdHJpbmcgYWNjb3JkaW5nIHRvIFJGQzM5ODYuCiAqCiAqIEBsaW5rICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2CiAqIEBwYWNrYWdlIExlYWd1ZVxVcmkKICogQGF1dGhvciAgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqIEBzaW5jZSAgIDYuMC4wCiAqLwpmaW5hbCBjbGFzcyBVcmlTdHJpbmcKewogICAgLyoqCiAgICAgKiBEZWZhdWx0IFVSSSBjb21wb25lbnQgdmFsdWVzLgogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFVSSV9DT01QT05FTlRTID0gWwogICAgICAgICdzY2hlbWUnID0+IG51bGwsICd1c2VyJyA9PiBudWxsLCAncGFzcycgPT4gbnVsbCwgJ2hvc3QnID0+IG51bGwsCiAgICAgICAgJ3BvcnQnID0+IG51bGwsICdwYXRoJyA9PiAnJywgJ3F1ZXJ5JyA9PiBudWxsLCAnZnJhZ21lbnQnID0+IG51bGwsCiAgICBdOwoKICAgIC8qKgogICAgICogU2ltcGxlIFVSSSB3aGljaCBkbyBub3QgbmVlZCBhbnkgcGFyc2luZy4KICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBVUklfU0NIT1JUQ1VUUyA9IFsKICAgICAgICAnJyA9PiBbXSwKICAgICAgICAnIycgPT4gWydmcmFnbWVudCcgPT4gJyddLAogICAgICAgICc/JyA9PiBbJ3F1ZXJ5JyA9PiAnJ10sCiAgICAgICAgJz8jJyA9PiBbJ3F1ZXJ5JyA9PiAnJywgJ2ZyYWdtZW50JyA9PiAnJ10sCiAgICAgICAgJy8nID0+IFsncGF0aCcgPT4gJy8nXSwKICAgICAgICAnLy8nID0+IFsnaG9zdCcgPT4gJyddLAogICAgXTsKCiAgICAvKioKICAgICAqIFJhbmdlIG9mIGludmFsaWQgY2hhcmFjdGVycyBpbiBVUkkgc3RyaW5nLgogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFJFR0VYUF9JTlZBTElEX1VSSV9DSEFSUyA9ICcvW1x4MDAtXHgxZlx4N2ZdLyc7CgogICAgLyoqCiAgICAgKiBSRkMzOTg2IHJlZ3VsYXIgZXhwcmVzc2lvbiBVUkkgc3BsaXR0ZXIuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjYXBwZW5kaXgtQgogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFJFR0VYUF9VUklfUEFSVFMgPSAnLF4KICAgICAgICAoPzxzY2hlbWU+KD88c2NvbnRlbnQ+W146Lz9cI10rKTopPyAgICAjIFVSSSBzY2hlbWUgY29tcG9uZW50CiAgICAgICAgKD88YXV0aG9yaXR5Pi8vKD88YWNvbnRlbnQ+W14vP1wjXSopKT8gIyBVUkkgYXV0aG9yaXR5IHBhcnQKICAgICAgICAoPzxwYXRoPlteP1wjXSopICAgICAgICAgICAgICAgICAgICAgICAjIFVSSSBwYXRoIGNvbXBvbmVudAogICAgICAgICg/PHF1ZXJ5Plw/KD88cWNvbnRlbnQ+W15cI10qKSk/ICAgICAgICMgVVJJIHF1ZXJ5IGNvbXBvbmVudAogICAgICAgICg/PGZyYWdtZW50PlwjKD88ZmNvbnRlbnQ+LiopKT8gICAgICAgICMgVVJJIGZyYWdtZW50IGNvbXBvbmVudAogICAgLHgnOwoKICAgIC8qKgogICAgICogVVJJIHNjaGVtZSByZWd1bGFyIGV4cHJlc3NzaW9uLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4xCiAgICAgKi8KICAgIHByaXZhdGUgY29uc3QgUkVHRVhQX1VSSV9TQ0hFTUUgPSAnL14oW2Etel1bYS16XGRcK1wuXC1dKik/JC9pJzsKCiAgICAvKioKICAgICAqIElQdkZ1dHVyZSByZWd1bGFyIGV4cHJlc3Npb24uCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjIuMgogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFJFR0VYUF9JUF9GVVRVUkUgPSAnL14KICAgICAgICB2KD88dmVyc2lvbj5bQS1GMC05XSkrXC4KICAgICAgICAoPzoKICAgICAgICAgICAgKD88dW5yZXNlcnZlZD5bYS16MC05X35cLVwuXSl8CiAgICAgICAgICAgICg/PHN1Yl9kZWxpbXM+WyEkJlwnKCkqKyw7PTpdKSAgIyBhbHNvIGluY2x1ZGUgdGhlIDogY2hhcmFjdGVyCiAgICAgICAgKSsKICAgICQvaXgnOwoKICAgIC8qKgogICAgICogR2VuZXJhbCByZWdpc3RlcmVkIG5hbWUgcmVndWxhciBleHByZXNzaW9uLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4yLjIKICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBSRUdFWFBfUkVHSVNURVJFRF9OQU1FID0gJy8oPyhERUZJTkUpCiAgICAgICAgKD88dW5yZXNlcnZlZD5bYS16MC05X35cLV0pICAgIyAuIGlzIG1pc3NpbmcgYXMgaXQgaXMgdXNlZCB0byBzZXBhcmF0ZSBsYWJlbHMKICAgICAgICAoPzxzdWJfZGVsaW1zPlshJCZcJygpKissOz1dKQogICAgICAgICg/PGVuY29kZWQ+JVtBLUYwLTldezJ9KQogICAgICAgICg/PHJlZ19uYW1lPig/Oig/JnVucmVzZXJ2ZWQpfCg/JnN1Yl9kZWxpbXMpfCg/JmVuY29kZWQpKSopCiAgICApCiAgICBeKD86KD8mcmVnX25hbWUpXC4pKig/JnJlZ19uYW1lKVwuPyQvaXgnOwoKICAgIC8qKgogICAgICogSW52YWxpZCBjaGFyYWN0ZXJzIGluIGhvc3QgcmVndWxhciBleHByZXNzaW9uLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4yLjIKICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBSRUdFWFBfSU5WQUxJRF9IT1NUX0NIQVJTID0gJy8KICAgICAgICBbOlwvPyNcW1xdQCBdICAjIGdlbi1kZWxpbXMgY2hhcmFjdGVycyBhcyB3ZWxsIGFzIHRoZSBzcGFjZSBjaGFyYWN0ZXIKICAgIC9peCc7CgogICAgLyoqCiAgICAgKiBJbnZhbGlkIHBhdGggZm9yIFVSSSB3aXRob3V0IHNjaGVtZSBhbmQgYXV0aG9yaXR5IHJlZ3VsYXIgZXhwcmVzc2lvbi4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTMuMwogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFJFR0VYUF9JTlZBTElEX1BBVEggPSAnLF4oKFteL10qKTopKC4qKT8vLCc7CgogICAgLyoqCiAgICAgKiBIb3N0IGFuZCBQb3J0IHNwbGl0dGVyIHJlZ3VsYXIgZXhwcmVzc2lvbi4KICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBSRUdFWFBfSE9TVF9QT1JUID0gJyxeKD88aG9zdD5cWy4qXF18W146XSopKDooPzxwb3J0Pi4qKSk/JCwnOwoKICAgIC8qKgogICAgICogSUROIEhvc3QgZGV0ZWN0b3IgcmVndWxhciBleHByZXNzaW9uLgogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFJFR0VYUF9JRE5fUEFUVEVSTiA9ICcvW15ceDIwLVx4N2ZdLyc7CgogICAgLyoqCiAgICAgKiBPbmx5IHRoZSBhZGRyZXNzIGJsb2NrIGZlODA6Oi8xMCBjYW4gaGF2ZSBhIFpvbmUgSUQgYXR0YWNoIHRvCiAgICAgKiBsZXQncyBkZXRlY3QgdGhlIGxpbmsgbG9jYWwgc2lnbmlmaWNhbnQgMTAgYml0cy4KICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBaT05FX0lEX0FERFJFU1NfQkxPQ0sgPSAiXHhmZVx4ODAiOwoKICAgIC8qKgogICAgICogR2VuZXJhdGUgYW4gVVJJIHN0cmluZyByZXByZXNlbnRhdGlvbiBmcm9tIGl0cyBwYXJzZWQgcmVwcmVzZW50YXRpb24KICAgICAqIHJldHVybmVkIGJ5IExlYWd1ZVxVcmlTdHJpbmc6OnBhcnNlKCkgb3IgUEhQJ3MgcGFyc2VfdXJsLgogICAgICoKICAgICAqIElmIHlvdSBzdXBwbHkgeW91ciBvd24gYXJyYXksIHlvdSBhcmUgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZwogICAgICogdmFsaWQgY29tcG9uZW50cyB3aXRob3V0IHRoZWlyIFVSSSBkZWxpbWl0ZXJzLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNS4zCiAgICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTcuNQogICAgICoKICAgICAqIEBwYXJhbSBhcnJheXsKICAgICAqICBzY2hlbWU6P3N0cmluZywKICAgICAqICB1c2VyOj9zdHJpbmcsCiAgICAgKiAgcGFzczo/c3RyaW5nLAogICAgICogIGhvc3Q6P3N0cmluZywKICAgICAqICBwb3J0Oj9pbnQsCiAgICAgKiAgcGF0aDo/c3RyaW5nLAogICAgICogIHF1ZXJ5Oj9zdHJpbmcsCiAgICAgKiAgZnJhZ21lbnQ6P3N0cmluZwogICAgICogfSAkY29tcG9uZW50cwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJ1aWxkKGFycmF5ICRjb21wb25lbnRzKTogc3RyaW5nCiAgICB7CiAgICAgICAgJHJlc3VsdCA9ICRjb21wb25lbnRzWydwYXRoJ10gPz8gJyc7CiAgICAgICAgaWYgKGlzc2V0KCRjb21wb25lbnRzWydxdWVyeSddKSkgewogICAgICAgICAgICAkcmVzdWx0IC49ICc/Jy4kY29tcG9uZW50c1sncXVlcnknXTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkY29tcG9uZW50c1snZnJhZ21lbnQnXSkpIHsKICAgICAgICAgICAgJHJlc3VsdCAuPSAnIycuJGNvbXBvbmVudHNbJ2ZyYWdtZW50J107CiAgICAgICAgfQoKICAgICAgICAkc2NoZW1lID0gbnVsbDsKICAgICAgICBpZiAoaXNzZXQoJGNvbXBvbmVudHNbJ3NjaGVtZSddKSkgewogICAgICAgICAgICAkc2NoZW1lID0gJGNvbXBvbmVudHNbJ3NjaGVtZSddLic6JzsKICAgICAgICB9CgogICAgICAgIGlmICghaXNzZXQoJGNvbXBvbmVudHNbJ2hvc3QnXSkpIHsKICAgICAgICAgICAgcmV0dXJuICRzY2hlbWUuJHJlc3VsdDsKICAgICAgICB9CgogICAgICAgICRzY2hlbWUgLj0gJy8vJzsKICAgICAgICAkYXV0aG9yaXR5ID0gJGNvbXBvbmVudHNbJ2hvc3QnXTsKICAgICAgICBpZiAoaXNzZXQoJGNvbXBvbmVudHNbJ3BvcnQnXSkpIHsKICAgICAgICAgICAgJGF1dGhvcml0eSAuPSAnOicuJGNvbXBvbmVudHNbJ3BvcnQnXTsKICAgICAgICB9CgogICAgICAgIGlmICghaXNzZXQoJGNvbXBvbmVudHNbJ3VzZXInXSkpIHsKICAgICAgICAgICAgcmV0dXJuICRzY2hlbWUuJGF1dGhvcml0eS4kcmVzdWx0OwogICAgICAgIH0KCiAgICAgICAgJGF1dGhvcml0eSA9ICdAJy4kYXV0aG9yaXR5OwogICAgICAgIGlmICghaXNzZXQoJGNvbXBvbmVudHNbJ3Bhc3MnXSkpIHsKICAgICAgICAgICAgcmV0dXJuICRzY2hlbWUuJGNvbXBvbmVudHNbJ3VzZXInXS4kYXV0aG9yaXR5LiRyZXN1bHQ7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHNjaGVtZS4kY29tcG9uZW50c1sndXNlciddLic6Jy4kY29tcG9uZW50c1sncGFzcyddLiRhdXRob3JpdHkuJHJlc3VsdDsKICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlIGFuIFVSSSBzdHJpbmcgaW50byBpdHMgY29tcG9uZW50cy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBwYXJzZXMgYSBVUkkgYW5kIHJldHVybnMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgY29udGFpbmluZyBhbnkKICAgICAqIG9mIHRoZSB2YXJpb3VzIGNvbXBvbmVudHMgb2YgdGhlIFVSSSB0aGF0IGFyZSBwcmVzZW50LgogICAgICoKICAgICAqIDxjb2RlPgogICAgICogJGNvbXBvbmVudHMgPSAobmV3IFBhcnNlcigpKS0+cGFyc2UoJ2h0dHA6Ly9mb29AdGVzdC5leGFtcGxlLmNvbTo0Mj9xdWVyeSMnKTsKICAgICAqIHZhcl9leHBvcnQoJGNvbXBvbmVudHMpOwogICAgICogLy93aWxsIGRpc3BsYXkKICAgICAqIGFycmF5KAogICAgICogICAnc2NoZW1lJyA9PiAnaHR0cCcsICAgICAgICAgICAvLyB0aGUgVVJJIHNjaGVtZSBjb21wb25lbnQKICAgICAqICAgJ3VzZXInID0+ICdmb28nLCAgICAgICAgICAgICAgLy8gdGhlIFVSSSB1c2VyIGNvbXBvbmVudAogICAgICogICAncGFzcycgPT4gbnVsbCwgICAgICAgICAgICAgICAvLyB0aGUgVVJJIHBhc3MgY29tcG9uZW50CiAgICAgKiAgICdob3N0JyA9PiAndGVzdC5leGFtcGxlLmNvbScsIC8vIHRoZSBVUkkgaG9zdCBjb21wb25lbnQKICAgICAqICAgJ3BvcnQnID0+IDQyLCAgICAgICAgICAgICAgICAgLy8gdGhlIFVSSSBwb3J0IGNvbXBvbmVudAogICAgICogICAncGF0aCcgPT4gJycsICAgICAgICAgICAgICAgICAvLyB0aGUgVVJJIHBhdGggY29tcG9uZW50CiAgICAgKiAgICdxdWVyeScgPT4gJ3F1ZXJ5JywgICAgICAgICAgIC8vIHRoZSBVUkkgcXVlcnkgY29tcG9uZW50CiAgICAgKiAgICdmcmFnbWVudCcgPT4gJycsICAgICAgICAgICAgIC8vIHRoZSBVUkkgZnJhZ21lbnQgY29tcG9uZW50CiAgICAgKiApOwogICAgICogPC9jb2RlPgogICAgICoKICAgICAqIFRoZSByZXR1cm5lZCBhcnJheSBpcyBzaW1pbGFyIHRvIFBIUCdzIHBhcnNlX3VybCByZXR1cm4gdmFsdWUgd2l0aCB0aGUgZm9sbG93aW5nCiAgICAgKiBkaWZmZXJlbmNlczoKICAgICAqCiAgICAgKiA8dWw+CiAgICAgKiA8bGk+QWxsIGNvbXBvbmVudHMgYXJlIGFsd2F5cyBwcmVzZW50IGluIHRoZSByZXR1cm5lZCBhcnJheTwvbGk+CiAgICAgKiA8bGk+RW1wdHkgYW5kIHVuZGVmaW5lZCBjb21wb25lbnQgYXJlIHRyZWF0ZWQgZGlmZmVyZW50bHkuIEFuZCBlbXB0eSBjb21wb25lbnQgaXMKICAgICAqICAgc2V0IHRvIHRoZSBlbXB0eSBzdHJpbmcgd2hpbGUgYW4gdW5kZWZpbmVkIGNvbXBvbmVudCBpcyBzZXQgdG8gdGhlIGBudWxsYCB2YWx1ZS48L2xpPgogICAgICogPGxpPlRoZSBwYXRoIGNvbXBvbmVudCBpcyBuZXZlciB1bmRlZmluZWQ8L2xpPgogICAgICogPGxpPlRoZSBtZXRob2QgcGFyc2VzIHRoZSBVUkkgZm9sbG93aW5nIHRoZSBSRkMzOTg2IHJ1bGVzIGJ1dCB5b3UgYXJlIHN0aWxsCiAgICAgKiAgIHJlcXVpcmVkIHRvIHZhbGlkYXRlIHRoZSByZXR1cm5lZCBjb21wb25lbnRzIGFnYWluc3QgaXRzIHJlbGF0ZWQgc2NoZW1lIHNwZWNpZmljIHJ1bGVzLjwvbGk+CiAgICAgKiA8L3VsPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2CiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR1cmkgYW55IHNjYWxhciBvciBzdHJpbmdhYmxlIG9iamVjdAogICAgICoKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgaWYgdGhlIFVSSSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgaWYgdGhlIFVSSSBjb250YWlucyBhbiBpbnZhbGlkIHNjaGVtZQogICAgICogQHRocm93cyBTeW50YXhFcnJvciBpZiB0aGUgVVJJIGNvbnRhaW5zIGFuIGludmFsaWQgcGF0aAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl7CiAgICAgKiAgICAgICAgICAgICAgICBzY2hlbWU6P3N0cmluZywKICAgICAqICAgICAgICAgICAgICAgIHVzZXI6P3N0cmluZywKICAgICAqICAgICAgICAgICAgICAgIHBhc3M6P3N0cmluZywKICAgICAqICAgICAgICAgICAgICAgIGhvc3Q6P3N0cmluZywKICAgICAqICAgICAgICAgICAgICAgIHBvcnQ6P2ludCwKICAgICAqICAgICAgICAgICAgICAgIHBhdGg6c3RyaW5nLAogICAgICogICAgICAgICAgICAgICAgcXVlcnk6P3N0cmluZywKICAgICAqICAgICAgICAgICAgICAgIGZyYWdtZW50Oj9zdHJpbmcKICAgICAqICAgICAgICAgICAgICAgIH0KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZSgkdXJpKTogYXJyYXkKICAgIHsKICAgICAgICBpZiAoaXNfb2JqZWN0KCR1cmkpICYmIG1ldGhvZF9leGlzdHMoJHVyaSwgJ19fdG9TdHJpbmcnKSkgewogICAgICAgICAgICAkdXJpID0gKHN0cmluZykgJHVyaTsKICAgICAgICB9CgogICAgICAgIGlmICghaXNfc2NhbGFyKCR1cmkpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3Ioc3ByaW50ZignVGhlIHVyaSBtdXN0IGJlIGEgc2NhbGFyIG9yIGEgc3RyaW5nYWJsZSBvYmplY3QgYCVzYCBnaXZlbicsIGdldHR5cGUoJHVyaSkpKTsKICAgICAgICB9CgogICAgICAgICR1cmkgPSAoc3RyaW5nKSAkdXJpOwoKICAgICAgICBpZiAoaXNzZXQoc2VsZjo6VVJJX1NDSE9SVENVVFNbJHVyaV0pKSB7CiAgICAgICAgICAgIC8qKiBAdmFyIGFycmF5e3NjaGVtZTo/c3RyaW5nLCB1c2VyOj9zdHJpbmcsIHBhc3M6P3N0cmluZywgaG9zdDo/c3RyaW5nLCBwb3J0Oj9pbnQsIHBhdGg6c3RyaW5nLCBxdWVyeTo/c3RyaW5nLCBmcmFnbWVudDo/c3RyaW5nfSAkY29tcG9uZW50cyAqLwogICAgICAgICAgICAkY29tcG9uZW50cyA9IGFycmF5X21lcmdlKHNlbGY6OlVSSV9DT01QT05FTlRTLCBzZWxmOjpVUklfU0NIT1JUQ1VUU1skdXJpXSk7CgogICAgICAgICAgICByZXR1cm4gJGNvbXBvbmVudHM7CiAgICAgICAgfQoKICAgICAgICBpZiAoMSA9PT0gcHJlZ19tYXRjaChzZWxmOjpSRUdFWFBfSU5WQUxJRF9VUklfQ0hBUlMsICR1cmkpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzcHJpbnRmKCdUaGUgdXJpIGAlc2AgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzJywgJHVyaSkpOwogICAgICAgIH0KCiAgICAgICAgLy9pZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzIGEga25vd24gVVJJIGRlbGltaXRlciBwYXJzaW5nIGNhbiBiZSBzaW1wbGlmaWVkCiAgICAgICAgJGZpcnN0X2NoYXIgPSAkdXJpWzBdOwoKICAgICAgICAvL1RoZSBVUkkgaXMgbWFkZSBvZiB0aGUgZnJhZ21lbnQgb25seQogICAgICAgIGlmICgnIycgPT09ICRmaXJzdF9jaGFyKSB7CiAgICAgICAgICAgIFssICRmcmFnbWVudF0gPSBleHBsb2RlKCcjJywgJHVyaSwgMik7CiAgICAgICAgICAgICRjb21wb25lbnRzID0gc2VsZjo6VVJJX0NPTVBPTkVOVFM7CiAgICAgICAgICAgICRjb21wb25lbnRzWydmcmFnbWVudCddID0gJGZyYWdtZW50OwoKICAgICAgICAgICAgcmV0dXJuICRjb21wb25lbnRzOwogICAgICAgIH0KCiAgICAgICAgLy9UaGUgVVJJIGlzIG1hZGUgb2YgdGhlIHF1ZXJ5IGFuZCBmcmFnbWVudAogICAgICAgIGlmICgnPycgPT09ICRmaXJzdF9jaGFyKSB7CiAgICAgICAgICAgIFssICRwYXJ0aWFsXSA9IGV4cGxvZGUoJz8nLCAkdXJpLCAyKTsKICAgICAgICAgICAgWyRxdWVyeSwgJGZyYWdtZW50XSA9IGV4cGxvZGUoJyMnLCAkcGFydGlhbCwgMikgKyBbMSA9PiBudWxsXTsKICAgICAgICAgICAgJGNvbXBvbmVudHMgPSBzZWxmOjpVUklfQ09NUE9ORU5UUzsKICAgICAgICAgICAgJGNvbXBvbmVudHNbJ3F1ZXJ5J10gPSAkcXVlcnk7CiAgICAgICAgICAgICRjb21wb25lbnRzWydmcmFnbWVudCddID0gJGZyYWdtZW50OwoKICAgICAgICAgICAgcmV0dXJuICRjb21wb25lbnRzOwogICAgICAgIH0KCiAgICAgICAgLy91c2UgUkZDMzk4NiBVUkkgcmVnZXhwIHRvIHNwbGl0IHRoZSBVUkkKICAgICAgICBwcmVnX21hdGNoKHNlbGY6OlJFR0VYUF9VUklfUEFSVFMsICR1cmksICRwYXJ0cyk7CiAgICAgICAgJHBhcnRzICs9IFsncXVlcnknID0+ICcnLCAnZnJhZ21lbnQnID0+ICcnXTsKCiAgICAgICAgaWYgKCc6JyA9PT0gJHBhcnRzWydzY2hlbWUnXSB8fCAxICE9PSBwcmVnX21hdGNoKHNlbGY6OlJFR0VYUF9VUklfU0NIRU1FLCAkcGFydHNbJ3Njb250ZW50J10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzcHJpbnRmKCdUaGUgdXJpIGAlc2AgY29udGFpbnMgYW4gaW52YWxpZCBzY2hlbWUnLCAkdXJpKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJycgPT09ICRwYXJ0c1snc2NoZW1lJ10uJHBhcnRzWydhdXRob3JpdHknXSAmJiAxID09PSBwcmVnX21hdGNoKHNlbGY6OlJFR0VYUF9JTlZBTElEX1BBVEgsICRwYXJ0c1sncGF0aCddKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ByaW50ZignVGhlIHVyaSBgJXNgIGNvbnRhaW5zIGFuIGludmFsaWQgcGF0aC4nLCAkdXJpKSk7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBhcnJheXtzY2hlbWU6P3N0cmluZywgdXNlcjo/c3RyaW5nLCBwYXNzOj9zdHJpbmcsIGhvc3Q6P3N0cmluZywgcG9ydDo/aW50LCBwYXRoOnN0cmluZywgcXVlcnk6P3N0cmluZywgZnJhZ21lbnQ6P3N0cmluZ30gJGNvbXBvbmVudHMgKi8KICAgICAgICAkY29tcG9uZW50cyA9IGFycmF5X21lcmdlKAogICAgICAgICAgICBzZWxmOjpVUklfQ09NUE9ORU5UUywKICAgICAgICAgICAgJycgPT09ICRwYXJ0c1snYXV0aG9yaXR5J10gPyBbXSA6IHNlbGY6OnBhcnNlQXV0aG9yaXR5KCRwYXJ0c1snYWNvbnRlbnQnXSksCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICdwYXRoJyA9PiAkcGFydHNbJ3BhdGgnXSwKICAgICAgICAgICAgICAgICdzY2hlbWUnID0+ICcnID09PSAkcGFydHNbJ3NjaGVtZSddID8gbnVsbCA6ICRwYXJ0c1snc2NvbnRlbnQnXSwKICAgICAgICAgICAgICAgICdxdWVyeScgPT4gJycgPT09ICRwYXJ0c1sncXVlcnknXSA/IG51bGwgOiAkcGFydHNbJ3Fjb250ZW50J10sCiAgICAgICAgICAgICAgICAnZnJhZ21lbnQnID0+ICcnID09PSAkcGFydHNbJ2ZyYWdtZW50J10gPyBudWxsIDogJHBhcnRzWydmY29udGVudCddLAogICAgICAgICAgICBdCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRjb21wb25lbnRzOwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2VzIHRoZSBVUkkgYXV0aG9yaXR5IHBhcnQuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjIKICAgICAqCiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yIElmIHRoZSBwb3J0IGNvbXBvbmVudCBpcyBpbnZhbGlkCiAgICAgKgogICAgICogQHJldHVybiBhcnJheXt1c2VyOj9zdHJpbmcsIHBhc3M6P3N0cmluZywgaG9zdDo/c3RyaW5nLCBwb3J0Oj9pbnR9CiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHBhcnNlQXV0aG9yaXR5KHN0cmluZyAkYXV0aG9yaXR5KTogYXJyYXkKICAgIHsKICAgICAgICAkY29tcG9uZW50cyA9IFsndXNlcicgPT4gbnVsbCwgJ3Bhc3MnID0+IG51bGwsICdob3N0JyA9PiAnJywgJ3BvcnQnID0+IG51bGxdOwogICAgICAgIGlmICgnJyA9PT0gJGF1dGhvcml0eSkgewogICAgICAgICAgICByZXR1cm4gJGNvbXBvbmVudHM7CiAgICAgICAgfQoKICAgICAgICAkcGFydHMgPSBleHBsb2RlKCdAJywgJGF1dGhvcml0eSwgMik7CiAgICAgICAgaWYgKGlzc2V0KCRwYXJ0c1sxXSkpIHsKICAgICAgICAgICAgWyRjb21wb25lbnRzWyd1c2VyJ10sICRjb21wb25lbnRzWydwYXNzJ11dID0gZXhwbG9kZSgnOicsICRwYXJ0c1swXSwgMikgKyBbMSA9PiBudWxsXTsKICAgICAgICB9CgogICAgICAgIHByZWdfbWF0Y2goc2VsZjo6UkVHRVhQX0hPU1RfUE9SVCwgJHBhcnRzWzFdID8/ICRwYXJ0c1swXSwgJG1hdGNoZXMpOwogICAgICAgICRtYXRjaGVzICs9IFsncG9ydCcgPT4gJyddOwoKICAgICAgICAkY29tcG9uZW50c1sncG9ydCddID0gc2VsZjo6ZmlsdGVyUG9ydCgkbWF0Y2hlc1sncG9ydCddKTsKICAgICAgICAkY29tcG9uZW50c1snaG9zdCddID0gc2VsZjo6ZmlsdGVySG9zdCgkbWF0Y2hlc1snaG9zdCddKTsKCiAgICAgICAgcmV0dXJuICRjb21wb25lbnRzOwogICAgfQoKICAgIC8qKgogICAgICogRmlsdGVyIGFuZCBmb3JtYXQgdGhlIHBvcnQgY29tcG9uZW50LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4yLjIKICAgICAqCiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yIGlmIHRoZSByZWdpc3RlcmVkIG5hbWUgaXMgaW52YWxpZAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBmaWx0ZXJQb3J0KHN0cmluZyAkcG9ydCk6ID9pbnQKICAgIHsKICAgICAgICBpZiAoJycgPT09ICRwb3J0KSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgaWYgKDEgPT09IHByZWdfbWF0Y2goJy9eXGQqJC8nLCAkcG9ydCkpIHsKICAgICAgICAgICAgcmV0dXJuIChpbnQpICRwb3J0OwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKHNwcmludGYoJ1RoZSBwb3J0IGAlc2AgaXMgaW52YWxpZCcsICRwb3J0KSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgYSBob3N0bmFtZSBpcyB2YWxpZC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTMuMi4yCiAgICAgKgogICAgICogQHRocm93cyBTeW50YXhFcnJvciBpZiB0aGUgcmVnaXN0ZXJlZCBuYW1lIGlzIGludmFsaWQKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZmlsdGVySG9zdChzdHJpbmcgJGhvc3QpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoJycgPT09ICRob3N0KSB7CiAgICAgICAgICAgIHJldHVybiAkaG9zdDsKICAgICAgICB9CgogICAgICAgIGlmICgnWycgIT09ICRob3N0WzBdIHx8ICddJyAhPT0gc3Vic3RyKCRob3N0LCAtMSkpIHsKICAgICAgICAgICAgcmV0dXJuIHNlbGY6OmZpbHRlclJlZ2lzdGVyZWROYW1lKCRob3N0KTsKICAgICAgICB9CgogICAgICAgIGlmICghc2VsZjo6aXNJcEhvc3Qoc3Vic3RyKCRob3N0LCAxLCAtMSkpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzcHJpbnRmKCdIb3N0IGAlc2AgaXMgaW52YWxpZCA6IHRoZSBJUCBob3N0IGlzIG1hbGZvcm1lZCcsICRob3N0KSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGhvc3Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGhvc3QgaXMgYW4gSVB2NCBvciBhIHJlZ2lzdGVyZWQgbmFtZWQuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjIuMgogICAgICoKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgICAgICAgaWYgdGhlIHJlZ2lzdGVyZWQgbmFtZSBpcyBpbnZhbGlkCiAgICAgKiBAdGhyb3dzIElkblN1cHBvcnRNaXNzaW5nIGlmIElETiBzdXBwb3J0IG9yIElDVSByZXF1aXJlbWVudCBhcmUgbm90IGF2YWlsYWJsZSBvciBtZXQuCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGZpbHRlclJlZ2lzdGVyZWROYW1lKHN0cmluZyAkaG9zdCk6IHN0cmluZwogICAgewogICAgICAgICRmb3JtYXR0ZWRfaG9zdCA9IHJhd3VybGRlY29kZSgkaG9zdCk7CiAgICAgICAgaWYgKDEgPT09IHByZWdfbWF0Y2goc2VsZjo6UkVHRVhQX1JFR0lTVEVSRURfTkFNRSwgJGZvcm1hdHRlZF9ob3N0KSkgewogICAgICAgICAgICByZXR1cm4gJGhvc3Q7CiAgICAgICAgfQoKICAgICAgICAvL3RvIHRlc3QgSUROIGhvc3Qgbm9uLWFzY2lpIGNoYXJhY3RlcnMgbXVzdCBiZSBwcmVzZW50IGluIHRoZSBob3N0CiAgICAgICAgaWYgKDEgIT09IHByZWdfbWF0Y2goc2VsZjo6UkVHRVhQX0lETl9QQVRURVJOLCAkZm9ybWF0dGVkX2hvc3QpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzcHJpbnRmKCdIb3N0IGAlc2AgaXMgaW52YWxpZCA6IHRoZSBob3N0IGlzIG5vdCBhIHZhbGlkIHJlZ2lzdGVyZWQgbmFtZScsICRob3N0KSk7CiAgICAgICAgfQoKICAgICAgICAkaW5mbyA9IElkbmE6OnRvQXNjaWkoJGhvc3QsIElkbmE6OklETkEyMDA4X0FTQ0lJKTsKICAgICAgICBpZiAoMCAhPT0gJGluZm8tPmVycm9ycygpKSB7CiAgICAgICAgICAgIHRocm93IElkbmFDb252ZXJzaW9uRmFpbGVkOjpkdWVUb0lETkFFcnJvcigkaG9zdCwgJGluZm8pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRob3N0OwogICAgfQoKICAgIC8qKgogICAgICogVmFsaWRhdGVzIGEgSVB2Ni9JUHZmdXR1cmUgaG9zdC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTMuMi4yCiAgICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjg3NCNzZWN0aW9uLTIKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2ODc0I3NlY3Rpb24tNAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBpc0lwSG9zdChzdHJpbmcgJGlwX2hvc3QpOiBib29sCiAgICB7CiAgICAgICAgaWYgKGZhbHNlICE9PSBmaWx0ZXJfdmFyKCRpcF9ob3N0LCBGSUxURVJfVkFMSURBVEVfSVAsIEZJTFRFUl9GTEFHX0lQVjYpKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKDEgPT09IHByZWdfbWF0Y2goc2VsZjo6UkVHRVhQX0lQX0ZVVFVSRSwgJGlwX2hvc3QsICRtYXRjaGVzKSkgewogICAgICAgICAgICByZXR1cm4gIWluX2FycmF5KCRtYXRjaGVzWyd2ZXJzaW9uJ10sIFsnNCcsICc2J10sIHRydWUpOwogICAgICAgIH0KCiAgICAgICAgJHBvcyA9IHN0cnBvcygkaXBfaG9zdCwgJyUnKTsKICAgICAgICBpZiAoZmFsc2UgPT09ICRwb3MgfHwgMSA9PT0gcHJlZ19tYXRjaCgKICAgICAgICAgICAgc2VsZjo6UkVHRVhQX0lOVkFMSURfSE9TVF9DSEFSUywKICAgICAgICAgICAgcmF3dXJsZGVjb2RlKHN1YnN0cigkaXBfaG9zdCwgJHBvcykpCiAgICAgICAgKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAkaXBfaG9zdCA9IHN1YnN0cigkaXBfaG9zdCwgMCwgJHBvcyk7CgogICAgICAgIHJldHVybiBmYWxzZSAhPT0gZmlsdGVyX3ZhcigkaXBfaG9zdCwgRklMVEVSX1ZBTElEQVRFX0lQLCBGSUxURVJfRkxBR19JUFY2KQogICAgICAgICAgICAmJiAwID09PSBzdHJwb3MoKHN0cmluZykgaW5ldF9wdG9uKCRpcF9ob3N0KSwgc2VsZjo6Wk9ORV9JRF9BRERSRVNTX0JMT0NLKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/UriTemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmk7Cgp1c2UgTGVhZ3VlXFVyaVxDb250cmFjdHNcVXJpRXhjZXB0aW9uOwp1c2UgTGVhZ3VlXFVyaVxDb250cmFjdHNcVXJpSW50ZXJmYWNlOwp1c2UgTGVhZ3VlXFVyaVxFeGNlcHRpb25zXFN5bnRheEVycm9yOwp1c2UgTGVhZ3VlXFVyaVxFeGNlcHRpb25zXFRlbXBsYXRlQ2FuTm90QmVFeHBhbmRlZDsKdXNlIExlYWd1ZVxVcmlcVXJpVGVtcGxhdGVcVGVtcGxhdGU7CnVzZSBMZWFndWVcVXJpXFVyaVRlbXBsYXRlXFZhcmlhYmxlQmFnOwp1c2UgVHlwZUVycm9yOwoKLyoqCiAqIERlZmluZXMgdGhlIFVSSSBUZW1wbGF0ZSBzeW50YXggYW5kIHRoZSBwcm9jZXNzIGZvciBleHBhbmRpbmcgYSBVUkkgVGVtcGxhdGUgaW50byBhIFVSSSByZWZlcmVuY2UuCiAqCiAqIEBsaW5rICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NTcwCiAqIEBwYWNrYWdlIExlYWd1ZVxVcmkKICogQGF1dGhvciAgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqIEBzaW5jZSAgIDYuMS4wCiAqCiAqIEJhc2VkIG9uIEd1enpsZUh0dHBcVXJpVGVtcGxhdGUgY2xhc3MgaW4gR3V6emxlIHY2LjUuCiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2Jsb2IvNi41L3NyYy9VcmlUZW1wbGF0ZS5waHAKICovCmZpbmFsIGNsYXNzIFVyaVRlbXBsYXRlCnsKICAgIHByaXZhdGUgVGVtcGxhdGUgJHRlbXBsYXRlOwogICAgcHJpdmF0ZSBWYXJpYWJsZUJhZyAkZGVmYXVsdFZhcmlhYmxlczsKCiAgICAvKioKICAgICAqIEBwYXJhbSBvYmplY3R8c3RyaW5nICR0ZW1wbGF0ZSBhIHN0cmluZyBvciBhbiBvYmplY3Qgd2l0aCB0aGUgX190b1N0cmluZyBtZXRob2QKICAgICAqCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvciAgICAgICAgICAgICAgICBpZiB0aGUgdGVtcGxhdGUgaXMgbm90IGEgc3RyaW5nIG9yIGFuIG9iamVjdCB3aXRoIHRoZSBfX3RvU3RyaW5nIG1ldGhvZAogICAgICogQHRocm93cyBTeW50YXhFcnJvciAgICAgICAgICAgICAgaWYgdGhlIHRlbXBsYXRlIHN5bnRheCBpcyBpbnZhbGlkCiAgICAgKiBAdGhyb3dzIFRlbXBsYXRlQ2FuTm90QmVFeHBhbmRlZCBpZiB0aGUgdGVtcGxhdGUgdmFyaWFibGVzIGFyZSBpbnZhbGlkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdGVtcGxhdGUsIGFycmF5ICRkZWZhdWx0VmFyaWFibGVzID0gW10pCiAgICB7CiAgICAgICAgJHRoaXMtPnRlbXBsYXRlID0gVGVtcGxhdGU6OmNyZWF0ZUZyb21TdHJpbmcoJHRlbXBsYXRlKTsKICAgICAgICAkdGhpcy0+ZGVmYXVsdFZhcmlhYmxlcyA9ICR0aGlzLT5maWx0ZXJWYXJpYWJsZXMoJGRlZmF1bHRWYXJpYWJsZXMpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gX19zZXRfc3RhdGUoYXJyYXkgJHByb3BlcnRpZXMpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRwcm9wZXJ0aWVzWyd0ZW1wbGF0ZSddLT50b1N0cmluZygpLCAkcHJvcGVydGllc1snZGVmYXVsdFZhcmlhYmxlcyddLT5hbGwoKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBGaWx0ZXJzIG91dCB2YXJpYWJsZXMgZm9yIHRoZSBnaXZlbiB0ZW1wbGF0ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXk8c3RyaW5nLHN0cmluZ3xhcnJheTxzdHJpbmc+PiAkdmFyaWFibGVzCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZmlsdGVyVmFyaWFibGVzKGFycmF5ICR2YXJpYWJsZXMpOiBWYXJpYWJsZUJhZwogICAgewogICAgICAgICRvdXRwdXQgPSBuZXcgVmFyaWFibGVCYWcoKTsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+dGVtcGxhdGUtPnZhcmlhYmxlTmFtZXMoKSBhcyAkbmFtZSkgewogICAgICAgICAgICBpZiAoaXNzZXQoJHZhcmlhYmxlc1skbmFtZV0pKSB7CiAgICAgICAgICAgICAgICAkb3V0cHV0LT5hc3NpZ24oJG5hbWUsICR2YXJpYWJsZXNbJG5hbWVdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRvdXRwdXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGUgdGVtcGxhdGUgc3RyaW5nLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50ZW1wbGF0ZS0+dG9TdHJpbmcoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG5hbWVzIG9mIHRoZSB2YXJpYWJsZXMgaW4gdGhlIHRlbXBsYXRlLCBpbiBvcmRlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWYXJpYWJsZU5hbWVzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50ZW1wbGF0ZS0+dmFyaWFibGVOYW1lcygpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgZGVmYXVsdCB2YWx1ZXMgdXNlZCB0byBleHBhbmQgdGhlIHRlbXBsYXRlLgogICAgICoKICAgICAqIFRoZSByZXR1cm5lZCBsaXN0IG9ubHkgY29udGFpbnMgdmFyaWFibGVzIHdob3NlIG5hbWUgaXMgcGFydCBvZiB0aGUgY3VycmVudCB0ZW1wbGF0ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5PHN0cmluZyxzdHJpbmd8YXJyYXk+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREZWZhdWx0VmFyaWFibGVzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kZWZhdWx0VmFyaWFibGVzLT5hbGwoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugd2l0aCB0aGUgdXBkYXRlZCBkZWZhdWx0IHZhcmlhYmxlcy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIG1vZGlmaWVkIGRlZmF1bHQgdmFyaWFibGVzLgogICAgICoKICAgICAqIElmIHByZXNlbnQsIHZhcmlhYmxlcyB3aG9zZSBuYW1lIGlzIG5vdCBwYXJ0IG9mIHRoZSBjdXJyZW50IHRlbXBsYXRlCiAgICAgKiBwb3NzaWJsZSB2YXJpYWJsZSBuYW1lcyBhcmUgcmVtb3ZlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhEZWZhdWx0VmFyaWFibGVzKGFycmF5ICRkZWZhdWx0RGVmYXVsdFZhcmlhYmxlcyk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoCiAgICAgICAgICAgICR0aGlzLT50ZW1wbGF0ZS0+dG9TdHJpbmcoKSwKICAgICAgICAgICAgJHRoaXMtPmZpbHRlclZhcmlhYmxlcygkZGVmYXVsdERlZmF1bHRWYXJpYWJsZXMpLT5hbGwoKQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGhyb3dzIFRlbXBsYXRlQ2FuTm90QmVFeHBhbmRlZCBpZiB0aGUgdmFyaWFibGUgY29udGFpbnMgbmVzdGVkIGFycmF5IHZhbHVlcwogICAgICogQHRocm93cyBVcmlFeGNlcHRpb24gICAgICAgICAgICAgaWYgdGhlIHJlc3VsdGluZyBleHBhbnNpb24gY2FuIG5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBVcmlJbnRlcmZhY2UgaW5zdGFuY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4cGFuZChhcnJheSAkdmFyaWFibGVzID0gW10pOiBVcmlJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gVXJpOjpjcmVhdGVGcm9tU3RyaW5nKAogICAgICAgICAgICAkdGhpcy0+dGVtcGxhdGUtPmV4cGFuZCgKICAgICAgICAgICAgICAgICR0aGlzLT5maWx0ZXJWYXJpYWJsZXMoJHZhcmlhYmxlcyktPnJlcGxhY2UoJHRoaXMtPmRlZmF1bHRWYXJpYWJsZXMpCiAgICAgICAgICAgICkKICAgICAgICApOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/UriTemplate/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/UriTemplate/Expression.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcVXJpVGVtcGxhdGU7Cgp1c2UgTGVhZ3VlXFVyaVxFeGNlcHRpb25zXFN5bnRheEVycm9yOwp1c2UgTGVhZ3VlXFVyaVxFeGNlcHRpb25zXFRlbXBsYXRlQ2FuTm90QmVFeHBhbmRlZDsKdXNlIGZ1bmN0aW9uIGFycmF5X2ZpbHRlcjsKdXNlIGZ1bmN0aW9uIGFycmF5X2tleXM7CnVzZSBmdW5jdGlvbiBhcnJheV9tYXA7CnVzZSBmdW5jdGlvbiBhcnJheV91bmlxdWU7CnVzZSBmdW5jdGlvbiBleHBsb2RlOwp1c2UgZnVuY3Rpb24gaW1wbG9kZTsKdXNlIGZ1bmN0aW9uIHByZWdfbWF0Y2g7CnVzZSBmdW5jdGlvbiByYXd1cmxlbmNvZGU7CnVzZSBmdW5jdGlvbiBzdHJfcmVwbGFjZTsKdXNlIGZ1bmN0aW9uIHN0cnBvczsKdXNlIGZ1bmN0aW9uIHN1YnN0cjsKCmZpbmFsIGNsYXNzIEV4cHJlc3Npb24KewogICAgLyoqCiAgICAgKiBFeHByZXNzaW9uIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NTcwI3NlY3Rpb24tMi4yCiAgICAgKi8KICAgIHByaXZhdGUgY29uc3QgUkVHRVhQX0VYUFJFU1NJT04gPSAnL15cewogICAgICAgICg/OgogICAgICAgICAgICAoPzxvcGVyYXRvcj5bXC5cLztcPyZcPSxcIUBcfFwrI10pPwogICAgICAgICAgICAoPzx2YXJpYWJsZXM+W15cfV0qKQogICAgICAgICkKICAgIFx9JC94JzsKCiAgICAvKioKICAgICAqIFJlc2VydmVkIE9wZXJhdG9yIGNoYXJhY3RlcnMuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY1NzAjc2VjdGlvbi0yLjIKICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBSRVNFUlZFRF9PUEVSQVRPUiA9ICc9LCFAfCc7CgogICAgLyoqCiAgICAgKiBQcm9jZXNzaW5nIGJlaGF2aW9yIGFjY29yZGluZyB0byB0aGUgZXhwcmVzc2lvbiB0eXBlIG9wZXJhdG9yLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NTcwI2FwcGVuZGl4LUEKICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBPUEVSQVRPUl9IQVNIX0xPT0tVUCA9IFsKICAgICAgICAnJyAgPT4gWydwcmVmaXgnID0+ICcnLCAgJ2pvaW5lcicgPT4gJywnLCAncXVlcnknID0+IGZhbHNlXSwKICAgICAgICAnKycgPT4gWydwcmVmaXgnID0+ICcnLCAgJ2pvaW5lcicgPT4gJywnLCAncXVlcnknID0+IGZhbHNlXSwKICAgICAgICAnIycgPT4gWydwcmVmaXgnID0+ICcjJywgJ2pvaW5lcicgPT4gJywnLCAncXVlcnknID0+IGZhbHNlXSwKICAgICAgICAnLicgPT4gWydwcmVmaXgnID0+ICcuJywgJ2pvaW5lcicgPT4gJy4nLCAncXVlcnknID0+IGZhbHNlXSwKICAgICAgICAnLycgPT4gWydwcmVmaXgnID0+ICcvJywgJ2pvaW5lcicgPT4gJy8nLCAncXVlcnknID0+IGZhbHNlXSwKICAgICAgICAnOycgPT4gWydwcmVmaXgnID0+ICc7JywgJ2pvaW5lcicgPT4gJzsnLCAncXVlcnknID0+IHRydWVdLAogICAgICAgICc/JyA9PiBbJ3ByZWZpeCcgPT4gJz8nLCAnam9pbmVyJyA9PiAnJicsICdxdWVyeScgPT4gdHJ1ZV0sCiAgICAgICAgJyYnID0+IFsncHJlZml4JyA9PiAnJicsICdqb2luZXInID0+ICcmJywgJ3F1ZXJ5JyA9PiB0cnVlXSwKICAgIF07CgogICAgcHJpdmF0ZSBzdHJpbmcgJG9wZXJhdG9yOwogICAgLyoqIEB2YXIgYXJyYXk8VmFyU3BlY2lmaWVyPiAqLwogICAgcHJpdmF0ZSBhcnJheSAkdmFyU3BlY2lmaWVyczsKICAgIHByaXZhdGUgc3RyaW5nICRqb2luZXI7CiAgICAvKiogQHZhciBhcnJheTxzdHJpbmc+ICovCiAgICBwcml2YXRlIGFycmF5ICR2YXJpYWJsZU5hbWVzOwogICAgcHJpdmF0ZSBzdHJpbmcgJGV4cHJlc3Npb25TdHJpbmc7CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJG9wZXJhdG9yLCBWYXJTcGVjaWZpZXIgLi4uJHZhclNwZWNpZmllcnMpCiAgICB7CiAgICAgICAgJHRoaXMtPm9wZXJhdG9yID0gJG9wZXJhdG9yOwogICAgICAgICR0aGlzLT52YXJTcGVjaWZpZXJzID0gJHZhclNwZWNpZmllcnM7CiAgICAgICAgJHRoaXMtPmpvaW5lciA9IHNlbGY6Ok9QRVJBVE9SX0hBU0hfTE9PS1VQWyRvcGVyYXRvcl1bJ2pvaW5lciddOwogICAgICAgICR0aGlzLT52YXJpYWJsZU5hbWVzID0gJHRoaXMtPnNldFZhcmlhYmxlTmFtZXMoKTsKICAgICAgICAkdGhpcy0+ZXhwcmVzc2lvblN0cmluZyA9ICR0aGlzLT5zZXRFeHByZXNzaW9uU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5PHN0cmluZz4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBzZXRWYXJpYWJsZU5hbWVzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X3VuaXF1ZShhcnJheV9tYXAoCiAgICAgICAgICAgIHN0YXRpYyBmbiAoVmFyU3BlY2lmaWVyICR2YXJTcGVjaWZpZXIpOiBzdHJpbmcgPT4gJHZhclNwZWNpZmllci0+bmFtZSgpLAogICAgICAgICAgICAkdGhpcy0+dmFyU3BlY2lmaWVycwogICAgICAgICkpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gc2V0RXhwcmVzc2lvblN0cmluZygpOiBzdHJpbmcKICAgIHsKICAgICAgICAkdmFyU3BlY2lmaWVyU3RyaW5nID0gaW1wbG9kZSgnLCcsIGFycmF5X21hcCgKICAgICAgICAgICAgc3RhdGljIGZuIChWYXJTcGVjaWZpZXIgJHZhcmlhYmxlKTogc3RyaW5nID0+ICR2YXJpYWJsZS0+dG9TdHJpbmcoKSwKICAgICAgICAgICAgJHRoaXMtPnZhclNwZWNpZmllcnMKICAgICAgICApKTsKCiAgICAgICAgcmV0dXJuICd7Jy4kdGhpcy0+b3BlcmF0b3IuJHZhclNwZWNpZmllclN0cmluZy4nfSc7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gX19zZXRfc3RhdGUoYXJyYXkgJHByb3BlcnRpZXMpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRwcm9wZXJ0aWVzWydvcGVyYXRvciddLCAuLi4kcHJvcGVydGllc1sndmFyU3BlY2lmaWVycyddKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgaWYgdGhlIGV4cHJlc3Npb24gaXMgaW52YWxpZAogICAgICogQHRocm93cyBTeW50YXhFcnJvciBpZiB0aGUgb3BlcmF0b3IgdXNlZCBpbiB0aGUgZXhwcmVzc2lvbiBpcyBpbnZhbGlkCiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yIGlmIHRoZSB2YXJpYWJsZSBzcGVjaWZpZXJzIGlzIGludmFsaWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tU3RyaW5nKHN0cmluZyAkZXhwcmVzc2lvbik6IHNlbGYKICAgIHsKICAgICAgICBpZiAoMSAhPT0gcHJlZ19tYXRjaChzZWxmOjpSRUdFWFBfRVhQUkVTU0lPTiwgJGV4cHJlc3Npb24sICRwYXJ0cykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdUaGUgZXhwcmVzc2lvbiAiJy4kZXhwcmVzc2lvbi4nIiBpcyBpbnZhbGlkLicpOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgYXJyYXl7b3BlcmF0b3I6c3RyaW5nLCB2YXJpYWJsZXM6c3RyaW5nfSAkcGFydHMgKi8KICAgICAgICAkcGFydHMgPSAkcGFydHMgKyBbJ29wZXJhdG9yJyA9PiAnJ107CiAgICAgICAgaWYgKCcnICE9PSAkcGFydHNbJ29wZXJhdG9yJ10gJiYgZmFsc2UgIT09IHN0cnBvcyhzZWxmOjpSRVNFUlZFRF9PUEVSQVRPUiwgJHBhcnRzWydvcGVyYXRvciddKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1RoZSBvcGVyYXRvciB1c2VkIGluIHRoZSBleHByZXNzaW9uICInLiRleHByZXNzaW9uLiciIGlzIHJlc2VydmVkLicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uKCRwYXJ0c1snb3BlcmF0b3InXSwgLi4uYXJyYXlfbWFwKAogICAgICAgICAgICBzdGF0aWMgZm4gKHN0cmluZyAkdmFyU3BlYyk6IFZhclNwZWNpZmllciA9PiBWYXJTcGVjaWZpZXI6OmNyZWF0ZUZyb21TdHJpbmcoJHZhclNwZWMpLAogICAgICAgICAgICBleHBsb2RlKCcsJywgJHBhcnRzWyd2YXJpYWJsZXMnXSkKICAgICAgICApKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGV4cHJlc3Npb24gc3RyaW5nIHJlcHJlc2VudGF0aW9uLgogICAgICoKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZXhwcmVzc2lvblN0cmluZzsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXk8c3RyaW5nPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFyaWFibGVOYW1lcygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFyaWFibGVOYW1lczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhwYW5kKFZhcmlhYmxlQmFnICR2YXJpYWJsZXMpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcGFydHMgPSBbXTsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+dmFyU3BlY2lmaWVycyBhcyAkdmFyU3BlY2lmaWVyKSB7CiAgICAgICAgICAgICRwYXJ0c1tdID0gJHRoaXMtPnJlcGxhY2UoJHZhclNwZWNpZmllciwgJHZhcmlhYmxlcyk7CiAgICAgICAgfQoKICAgICAgICAkZXhwYW5kZWQgPSBpbXBsb2RlKCR0aGlzLT5qb2luZXIsIGFycmF5X2ZpbHRlcigkcGFydHMsIHN0YXRpYyBmbiAoJHZhbHVlKTogYm9vbCA9PiAnJyAhPT0gJHZhbHVlKSk7CiAgICAgICAgaWYgKCcnID09PSAkZXhwYW5kZWQpIHsKICAgICAgICAgICAgcmV0dXJuICRleHBhbmRlZDsKICAgICAgICB9CgogICAgICAgICRwcmVmaXggPSBzZWxmOjpPUEVSQVRPUl9IQVNIX0xPT0tVUFskdGhpcy0+b3BlcmF0b3JdWydwcmVmaXgnXTsKICAgICAgICBpZiAoJycgPT09ICRwcmVmaXgpIHsKICAgICAgICAgICAgcmV0dXJuICRleHBhbmRlZDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcHJlZml4LiRleHBhbmRlZDsKICAgIH0KCiAgICAvKioKICAgICAqIFJlcGxhY2VzIGFuIGV4cHJlc3Npb24gd2l0aCB0aGUgZ2l2ZW4gdmFyaWFibGVzLgogICAgICoKICAgICAqIEB0aHJvd3MgVGVtcGxhdGVDYW5Ob3RCZUV4cGFuZGVkIGlmIHRoZSB2YXJpYWJsZXMgaXMgYW4gYXJyYXkgYW5kIGEgIjoiIG1vZGlmaWVyIG5lZWRzIHRvIGJlIGFwcGxpZWQKICAgICAqIEB0aHJvd3MgVGVtcGxhdGVDYW5Ob3RCZUV4cGFuZGVkIGlmIHRoZSB2YXJpYWJsZXMgY29udGFpbnMgbmVzdGVkIGFycmF5IHZhbHVlcwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlcGxhY2UoVmFyU3BlY2lmaWVyICR2YXJTcGVjLCBWYXJpYWJsZUJhZyAkdmFyaWFibGVzKTogc3RyaW5nCiAgICB7CiAgICAgICAgJHZhbHVlID0gJHZhcmlhYmxlcy0+ZmV0Y2goJHZhclNwZWMtPm5hbWUoKSk7CiAgICAgICAgaWYgKG51bGwgPT09ICR2YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQoKICAgICAgICAkdXNlUXVlcnkgPSBzZWxmOjpPUEVSQVRPUl9IQVNIX0xPT0tVUFskdGhpcy0+b3BlcmF0b3JdWydxdWVyeSddOwogICAgICAgIFskZXhwYW5kZWQsICRhY3R1YWxRdWVyeV0gPSAkdGhpcy0+aW5qZWN0KCR2YWx1ZSwgJHZhclNwZWMsICR1c2VRdWVyeSk7CiAgICAgICAgaWYgKCEkYWN0dWFsUXVlcnkpIHsKICAgICAgICAgICAgcmV0dXJuICRleHBhbmRlZDsKICAgICAgICB9CgogICAgICAgIGlmICgnJicgIT09ICR0aGlzLT5qb2luZXIgJiYgJycgPT09ICRleHBhbmRlZCkgewogICAgICAgICAgICByZXR1cm4gJHZhclNwZWMtPm5hbWUoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdmFyU3BlYy0+bmFtZSgpLic9Jy4kZXhwYW5kZWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGFycmF5PHN0cmluZz4gJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBhcnJheXswOnN0cmluZywgMTpib29sfQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGluamVjdCgkdmFsdWUsIFZhclNwZWNpZmllciAkdmFyU3BlYywgYm9vbCAkdXNlUXVlcnkpOiBhcnJheQogICAgewogICAgICAgIGlmIChpc19zdHJpbmcoJHZhbHVlKSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJlcGxhY2VTdHJpbmcoJHZhbHVlLCAkdmFyU3BlYywgJHVzZVF1ZXJ5KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+cmVwbGFjZUxpc3QoJHZhbHVlLCAkdmFyU3BlYywgJHVzZVF1ZXJ5KTsKICAgIH0KCiAgICAvKioKICAgICAqIEV4cGFuZHMgYW4gZXhwcmVzc2lvbiB1c2luZyBhIHN0cmluZyB2YWx1ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5ezA6c3RyaW5nLCAxOmJvb2x9CiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gcmVwbGFjZVN0cmluZyhzdHJpbmcgJHZhbHVlLCBWYXJTcGVjaWZpZXIgJHZhclNwZWMsIGJvb2wgJHVzZVF1ZXJ5KTogYXJyYXkKICAgIHsKICAgICAgICBpZiAoJzonID09PSAkdmFyU3BlYy0+bW9kaWZpZXIoKSkgewogICAgICAgICAgICAkdmFsdWUgPSBzdWJzdHIoJHZhbHVlLCAwLCAkdmFyU3BlYy0+cG9zaXRpb24oKSk7CiAgICAgICAgfQoKICAgICAgICAkZXhwYW5kZWQgPSByYXd1cmxlbmNvZGUoJHZhbHVlKTsKICAgICAgICBpZiAoJysnID09PSAkdGhpcy0+b3BlcmF0b3IgfHwgJyMnID09PSAkdGhpcy0+b3BlcmF0b3IpIHsKICAgICAgICAgICAgcmV0dXJuIFskdGhpcy0+ZGVjb2RlUmVzZXJ2ZWQoJGV4cGFuZGVkKSwgJHVzZVF1ZXJ5XTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBbJGV4cGFuZGVkLCAkdXNlUXVlcnldOwogICAgfQoKICAgIC8qKgogICAgICogRXhwYW5kcyBhbiBleHByZXNzaW9uIHVzaW5nIGEgbGlzdCBvZiB2YWx1ZXMuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5PHN0cmluZz4gJHZhbHVlCiAgICAgKgogICAgICogQHRocm93cyBUZW1wbGF0ZUNhbk5vdEJlRXhwYW5kZWQgaWYgdGhlIHZhcmlhYmxlcyBpcyBhbiBhcnJheSBhbmQgYSAiOiIgbW9kaWZpZXIgbmVlZHMgdG8gYmUgYXBwbGllZAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl7MDpzdHJpbmcsIDE6Ym9vbH0KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiByZXBsYWNlTGlzdChhcnJheSAkdmFsdWUsIFZhclNwZWNpZmllciAkdmFyU3BlYywgYm9vbCAkdXNlUXVlcnkpOiBhcnJheQogICAgewogICAgICAgIGlmIChbXSA9PT0gJHZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybiBbJycsIGZhbHNlXTsKICAgICAgICB9CgogICAgICAgIGlmICgnOicgPT09ICR2YXJTcGVjLT5tb2RpZmllcigpKSB7CiAgICAgICAgICAgIHRocm93IFRlbXBsYXRlQ2FuTm90QmVFeHBhbmRlZDo6ZHVlVG9VbmFibGVUb1Byb2Nlc3NWYWx1ZUxpc3RXaXRoUHJlZml4KCR2YXJTcGVjLT5uYW1lKCkpOwogICAgICAgIH0KCiAgICAgICAgJHBhaXJzID0gW107CiAgICAgICAgJGlzQXNzb2MgPSAkdGhpcy0+aXNBc3NvYygkdmFsdWUpOwogICAgICAgIGZvcmVhY2ggKCR2YWx1ZSBhcyAka2V5ID0+ICR2YXIpIHsKICAgICAgICAgICAgaWYgKCRpc0Fzc29jKSB7CiAgICAgICAgICAgICAgICAka2V5ID0gcmF3dXJsZW5jb2RlKChzdHJpbmcpICRrZXkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdmFyID0gcmF3dXJsZW5jb2RlKCR2YXIpOwogICAgICAgICAgICBpZiAoJysnID09PSAkdGhpcy0+b3BlcmF0b3IgfHwgJyMnID09PSAkdGhpcy0+b3BlcmF0b3IpIHsKICAgICAgICAgICAgICAgICR2YXIgPSAkdGhpcy0+ZGVjb2RlUmVzZXJ2ZWQoJHZhcik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgnKicgPT09ICR2YXJTcGVjLT5tb2RpZmllcigpKSB7CiAgICAgICAgICAgICAgICBpZiAoJGlzQXNzb2MpIHsKICAgICAgICAgICAgICAgICAgICAkdmFyID0gJGtleS4nPScuJHZhcjsKICAgICAgICAgICAgICAgIH0gZWxzZWlmICgka2V5ID4gMCAmJiAkdXNlUXVlcnkpIHsKICAgICAgICAgICAgICAgICAgICAkdmFyID0gJHZhclNwZWMtPm5hbWUoKS4nPScuJHZhcjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHBhaXJzWyRrZXldID0gJHZhcjsKICAgICAgICB9CgogICAgICAgIGlmICgnKicgPT09ICR2YXJTcGVjLT5tb2RpZmllcigpKSB7CiAgICAgICAgICAgIGlmICgkaXNBc3NvYykgewogICAgICAgICAgICAgICAgLy8gRG9uJ3QgcHJlcGVuZCB0aGUgdmFsdWUgbmFtZSB3aGVuIHVzaW5nIHRoZSBleHBsb2RlCiAgICAgICAgICAgICAgICAvLyBtb2RpZmllciB3aXRoIGFuIGFzc29jaWF0aXZlIGFycmF5LgogICAgICAgICAgICAgICAgJHVzZVF1ZXJ5ID0gZmFsc2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBbaW1wbG9kZSgkdGhpcy0+am9pbmVyLCAkcGFpcnMpLCAkdXNlUXVlcnldOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRpc0Fzc29jKSB7CiAgICAgICAgICAgIC8vIFdoZW4gYW4gYXNzb2NpYXRpdmUgYXJyYXkgaXMgZW5jb3VudGVyZWQgYW5kIHRoZQogICAgICAgICAgICAvLyBleHBsb2RlIG1vZGlmaWVyIGlzIG5vdCBzZXQsIHRoZW4gdGhlIHJlc3VsdCBtdXN0IGJlCiAgICAgICAgICAgIC8vIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2Yga2V5cyBmb2xsb3dlZCBieSB0aGVpcgogICAgICAgICAgICAvLyByZXNwZWN0aXZlIHZhbHVlcy4KICAgICAgICAgICAgZm9yZWFjaCAoJHBhaXJzIGFzICRvZmZzZXQgPT4gJiRkYXRhKSB7CiAgICAgICAgICAgICAgICAkZGF0YSA9ICRvZmZzZXQuJywnLiRkYXRhOwogICAgICAgICAgICB9CgogICAgICAgICAgICB1bnNldCgkZGF0YSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gW2ltcGxvZGUoJywnLCAkcGFpcnMpLCAkdXNlUXVlcnldOwogICAgfQoKICAgIC8qKgogICAgICogRGV0ZXJtaW5lcyBpZiBhbiBhcnJheSBpcyBhc3NvY2lhdGl2ZS4KICAgICAqCiAgICAgKiBUaGlzIG1ha2VzIHRoZSBhc3N1bXB0aW9uIHRoYXQgaW5wdXQgYXJyYXlzIGFyZSBzZXF1ZW5jZXMgb3IgaGFzaGVzLgogICAgICogVGhpcyBhc3N1bXB0aW9uIGlzIGEgdHJhZGUtb2ZmIGZvciBhY2N1cmFjeSBpbiBmYXZvciBvZiBzcGVlZCwgYnV0IGl0CiAgICAgKiBzaG91bGQgd29yayBpbiBhbG1vc3QgZXZlcnkgY2FzZSB3aGVyZSBpbnB1dCBpcyBzdXBwbGllZCBmb3IgYSBVUkkKICAgICAqIHRlbXBsYXRlLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGlzQXNzb2MoYXJyYXkgJGFycmF5KTogYm9vbAogICAgewogICAgICAgIHJldHVybiBbXSAhPT0gJGFycmF5ICYmIDAgIT09IGFycmF5X2tleXMoJGFycmF5KVswXTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlbW92ZXMgcGVyY2VudCBlbmNvZGluZyBvbiByZXNlcnZlZCBjaGFyYWN0ZXJzICh1c2VkIHdpdGggKyBhbmQgIyBtb2RpZmllcnMpLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGRlY29kZVJlc2VydmVkKHN0cmluZyAkc3RyKTogc3RyaW5nCiAgICB7CiAgICAgICAgc3RhdGljICRkZWxpbWl0ZXJzID0gWwogICAgICAgICAgICAnOicsICcvJywgJz8nLCAnIycsICdbJywgJ10nLCAnQCcsICchJywgJyQnLAogICAgICAgICAgICAnJicsICdcJycsICcoJywgJyknLCAnKicsICcrJywgJywnLCAnOycsICc9JywKICAgICAgICBdOwoKICAgICAgICBzdGF0aWMgJGRlbGltaXRlcnNFbmNvZGVkID0gWwogICAgICAgICAgICAnJTNBJywgJyUyRicsICclM0YnLCAnJTIzJywgJyU1QicsICclNUQnLCAnJTQwJywgJyUyMScsICclMjQnLAogICAgICAgICAgICAnJTI2JywgJyUyNycsICclMjgnLCAnJTI5JywgJyUyQScsICclMkInLCAnJTJDJywgJyUzQicsICclM0QnLAogICAgICAgIF07CgogICAgICAgIHJldHVybiBzdHJfcmVwbGFjZSgkZGVsaW1pdGVyc0VuY29kZWQsICRkZWxpbWl0ZXJzLCAkc3RyKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/UriTemplate/Template.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcVXJpVGVtcGxhdGU7Cgp1c2UgTGVhZ3VlXFVyaVxFeGNlcHRpb25zXFN5bnRheEVycm9yOwp1c2UgTGVhZ3VlXFVyaVxFeGNlcHRpb25zXFRlbXBsYXRlQ2FuTm90QmVFeHBhbmRlZDsKdXNlIFR5cGVFcnJvcjsKdXNlIGZ1bmN0aW9uIGFycmF5X21lcmdlOwp1c2UgZnVuY3Rpb24gYXJyYXlfdW5pcXVlOwp1c2UgZnVuY3Rpb24gZ2V0dHlwZTsKdXNlIGZ1bmN0aW9uIGlzX29iamVjdDsKdXNlIGZ1bmN0aW9uIGlzX3N0cmluZzsKdXNlIGZ1bmN0aW9uIG1ldGhvZF9leGlzdHM7CnVzZSBmdW5jdGlvbiBwcmVnX21hdGNoX2FsbDsKdXNlIGZ1bmN0aW9uIHByZWdfcmVwbGFjZTsKdXNlIGZ1bmN0aW9uIHNwcmludGY7CnVzZSBmdW5jdGlvbiBzdHJwb3M7CnVzZSBjb25zdCBQUkVHX1NFVF9PUkRFUjsKCmZpbmFsIGNsYXNzIFRlbXBsYXRlCnsKICAgIC8qKgogICAgICogRXhwcmVzc2lvbiByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybi4KICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBSRUdFWFBfRVhQUkVTU0lPTl9ERVRFQ1RPUiA9ICcvXHtbXlx9XSpcfS94JzsKCiAgICBwcml2YXRlIHN0cmluZyAkdGVtcGxhdGU7CiAgICAvKiogQHZhciBhcnJheTxzdHJpbmcsIEV4cHJlc3Npb24+ICovCiAgICBwcml2YXRlIGFycmF5ICRleHByZXNzaW9ucyA9IFtdOwogICAgLyoqIEB2YXIgYXJyYXk8c3RyaW5nPiAqLwogICAgcHJpdmF0ZSBhcnJheSAkdmFyaWFibGVOYW1lczsKCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkdGVtcGxhdGUsIEV4cHJlc3Npb24gLi4uJGV4cHJlc3Npb25zKQogICAgewogICAgICAgICR0aGlzLT50ZW1wbGF0ZSA9ICR0ZW1wbGF0ZTsKICAgICAgICAkdmFyaWFibGVOYW1lcyA9IFtdOwogICAgICAgIGZvcmVhY2ggKCRleHByZXNzaW9ucyBhcyAkZXhwcmVzc2lvbikgewogICAgICAgICAgICAkdGhpcy0+ZXhwcmVzc2lvbnNbJGV4cHJlc3Npb24tPnRvU3RyaW5nKCldID0gJGV4cHJlc3Npb247CiAgICAgICAgICAgICR2YXJpYWJsZU5hbWVzW10gPSAkZXhwcmVzc2lvbi0+dmFyaWFibGVOYW1lcygpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+dmFyaWFibGVOYW1lcyA9IGFycmF5X3VuaXF1ZShhcnJheV9tZXJnZShbXSwgLi4uJHZhcmlhYmxlTmFtZXMpKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBfX3NldF9zdGF0ZShhcnJheSAkcHJvcGVydGllcyk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJHByb3BlcnRpZXNbJ3RlbXBsYXRlJ10sIC4uLmFycmF5X3ZhbHVlcygkcHJvcGVydGllc1snZXhwcmVzc2lvbnMnXSkpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG9iamVjdHxzdHJpbmcgJHRlbXBsYXRlIGEgc3RyaW5nIG9yIGFuIG9iamVjdCB3aXRoIHRoZSBfX3RvU3RyaW5nIG1ldGhvZAogICAgICoKICAgICAqIEB0aHJvd3MgVHlwZUVycm9yICAgaWYgdGhlIHRlbXBsYXRlIGlzIG5vdCBhIHN0cmluZyBvciBhbiBvYmplY3Qgd2l0aCB0aGUgX190b1N0cmluZyBtZXRob2QKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgaWYgdGhlIHRlbXBsYXRlIGNvbnRhaW5zIGludmFsaWQgZXhwcmVzc2lvbnMKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgaWYgdGhlIHRlbXBsYXRlIGNvbnRhaW5zIGludmFsaWQgdmFyaWFibGUgc3BlY2lmaWNhdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21TdHJpbmcoJHRlbXBsYXRlKTogc2VsZgogICAgewogICAgICAgIGlmIChpc19vYmplY3QoJHRlbXBsYXRlKSAmJiBtZXRob2RfZXhpc3RzKCR0ZW1wbGF0ZSwgJ19fdG9TdHJpbmcnKSkgewogICAgICAgICAgICAkdGVtcGxhdGUgPSAoc3RyaW5nKSAkdGVtcGxhdGU7CiAgICAgICAgfQoKICAgICAgICBpZiAoIWlzX3N0cmluZygkdGVtcGxhdGUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3Ioc3ByaW50ZignVGhlIHRlbXBsYXRlIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBzdHJpbmdhYmxlIG9iamVjdCAlcyBnaXZlbi4nLCBnZXR0eXBlKCR0ZW1wbGF0ZSkpKTsKICAgICAgICB9CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkcmVtYWluZGVyICovCiAgICAgICAgJHJlbWFpbmRlciA9IHByZWdfcmVwbGFjZShzZWxmOjpSRUdFWFBfRVhQUkVTU0lPTl9ERVRFQ1RPUiwgJycsICR0ZW1wbGF0ZSk7CiAgICAgICAgaWYgKGZhbHNlICE9PSBzdHJwb3MoJHJlbWFpbmRlciwgJ3snKSB8fCBmYWxzZSAhPT0gc3RycG9zKCRyZW1haW5kZXIsICd9JykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdUaGUgdGVtcGxhdGUgIicuJHRlbXBsYXRlLiciIGNvbnRhaW5zIGludmFsaWQgZXhwcmVzc2lvbnMuJyk7CiAgICAgICAgfQoKICAgICAgICAkbmFtZXMgPSBbXTsKICAgICAgICBwcmVnX21hdGNoX2FsbChzZWxmOjpSRUdFWFBfRVhQUkVTU0lPTl9ERVRFQ1RPUiwgJHRlbXBsYXRlLCAkZmluZGluZ3MsIFBSRUdfU0VUX09SREVSKTsKICAgICAgICAkYXJndW1lbnRzID0gW107CiAgICAgICAgZm9yZWFjaCAoJGZpbmRpbmdzIGFzICRmaW5kaW5nKSB7CiAgICAgICAgICAgIGlmICghaXNzZXQoJG5hbWVzWyRmaW5kaW5nWzBdXSkpIHsKICAgICAgICAgICAgICAgICRhcmd1bWVudHNbXSA9IEV4cHJlc3Npb246OmNyZWF0ZUZyb21TdHJpbmcoJGZpbmRpbmdbMF0pOwogICAgICAgICAgICAgICAgJG5hbWVzWyRmaW5kaW5nWzBdXSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkdGVtcGxhdGUsIC4uLiRhcmd1bWVudHMpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b1N0cmluZygpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRlbXBsYXRlOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheTxzdHJpbmc+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YXJpYWJsZU5hbWVzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YXJpYWJsZU5hbWVzOwogICAgfQoKICAgIC8qKgogICAgICogQHRocm93cyBUZW1wbGF0ZUNhbk5vdEJlRXhwYW5kZWQgaWYgdGhlIHZhcmlhYmxlcyBpcyBhbiBhcnJheSBhbmQgYSAiOiIgbW9kaWZpZXIgbmVlZHMgdG8gYmUgYXBwbGllZAogICAgICogQHRocm93cyBUZW1wbGF0ZUNhbk5vdEJlRXhwYW5kZWQgaWYgdGhlIHZhcmlhYmxlcyBjb250YWlucyBuZXN0ZWQgYXJyYXkgdmFsdWVzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleHBhbmQoVmFyaWFibGVCYWcgJHZhcmlhYmxlcyk6IHN0cmluZwogICAgewogICAgICAgICR1cmlTdHJpbmcgPSAkdGhpcy0+dGVtcGxhdGU7CiAgICAgICAgLyoqIEB2YXIgRXhwcmVzc2lvbiAkZXhwcmVzc2lvbiAqLwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5leHByZXNzaW9ucyBhcyAkcGF0dGVybiA9PiAkZXhwcmVzc2lvbikgewogICAgICAgICAgICAkdXJpU3RyaW5nID0gc3RyX3JlcGxhY2UoJHBhdHRlcm4sICRleHByZXNzaW9uLT5leHBhbmQoJHZhcmlhYmxlcyksICR1cmlTdHJpbmcpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR1cmlTdHJpbmc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/UriTemplate/VariableBag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcVXJpVGVtcGxhdGU7Cgp1c2UgTGVhZ3VlXFVyaVxFeGNlcHRpb25zXFRlbXBsYXRlQ2FuTm90QmVFeHBhbmRlZDsKdXNlIFR5cGVFcnJvcjsKdXNlIGZ1bmN0aW9uIGdldHR5cGU7CnVzZSBmdW5jdGlvbiBpc19hcnJheTsKdXNlIGZ1bmN0aW9uIGlzX2Jvb2w7CnVzZSBmdW5jdGlvbiBpc19vYmplY3Q7CnVzZSBmdW5jdGlvbiBpc19zY2FsYXI7CnVzZSBmdW5jdGlvbiBtZXRob2RfZXhpc3RzOwp1c2UgZnVuY3Rpb24gc3ByaW50ZjsKCmZpbmFsIGNsYXNzIFZhcmlhYmxlQmFnCnsKICAgIC8qKgogICAgICogQHZhciBhcnJheTxzdHJpbmcsc3RyaW5nfGFycmF5PHN0cmluZz4+CiAgICAgKi8KICAgIHByaXZhdGUgYXJyYXkgJHZhcmlhYmxlcyA9IFtdOwoKICAgIC8qKgogICAgICogQHBhcmFtIGl0ZXJhYmxlPHN0cmluZyxzdHJpbmd8Ym9vbHxpbnR8ZmxvYXR8YXJyYXk8c3RyaW5nfGJvb2x8aW50fGZsb2F0Pj4gJHZhcmlhYmxlcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoaXRlcmFibGUgJHZhcmlhYmxlcyA9IFtdKQogICAgewogICAgICAgIGZvcmVhY2ggKCR2YXJpYWJsZXMgYXMgJG5hbWUgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICR0aGlzLT5hc3NpZ24oJG5hbWUsICR2YWx1ZSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gX19zZXRfc3RhdGUoYXJyYXkgJHByb3BlcnRpZXMpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRwcm9wZXJ0aWVzWyd2YXJpYWJsZXMnXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5PHN0cmluZyxzdHJpbmd8YXJyYXk8c3RyaW5nPj4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFsbCgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFyaWFibGVzOwogICAgfQoKICAgIC8qKgogICAgICogRmV0Y2hlcyB0aGUgdmFyaWFibGUgdmFsdWUgaWYgbm9uZSBmb3VuZCByZXR1cm5zIG51bGwuCiAgICAgKgogICAgICogQHJldHVybiBudWxsfHN0cmluZ3xhcnJheTxzdHJpbmc+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmZXRjaChzdHJpbmcgJG5hbWUpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YXJpYWJsZXNbJG5hbWVdID8/IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGJvb2x8aW50fGZsb2F0fGFycmF5PHN0cmluZ3xib29sfGludHxmbG9hdD4gJHZhbHVlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhc3NpZ24oc3RyaW5nICRuYW1lLCAkdmFsdWUpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPnZhcmlhYmxlc1skbmFtZV0gPSAkdGhpcy0+bm9ybWFsaXplVmFsdWUoJHZhbHVlLCAkbmFtZSwgdHJ1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIHRoZSB2YWx1ZSB0byBiZSBleHBhbmRlZAogICAgICoKICAgICAqIEB0aHJvd3MgVGVtcGxhdGVDYW5Ob3RCZUV4cGFuZGVkIGlmIHRoZSB2YWx1ZSBjb250YWlucyBuZXN0ZWQgbGlzdAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfGFycmF5PHN0cmluZz4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBub3JtYWxpemVWYWx1ZSgkdmFsdWUsIHN0cmluZyAkbmFtZSwgYm9vbCAkaXNOZXN0ZWRMaXN0QWxsb3dlZCkKICAgIHsKICAgICAgICBpZiAoaXNfYm9vbCgkdmFsdWUpKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlID09PSAkdmFsdWUgPyAnMScgOiAnMCc7CiAgICAgICAgfQoKICAgICAgICBpZiAobnVsbCA9PT0gJHZhbHVlIHx8IGlzX3NjYWxhcigkdmFsdWUpIHx8IChpc19vYmplY3QoJHZhbHVlKSAmJiBtZXRob2RfZXhpc3RzKCR2YWx1ZSwgJ19fdG9TdHJpbmcnKSkpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpICR2YWx1ZTsKICAgICAgICB9CgogICAgICAgIGlmICghaXNfYXJyYXkoJHZhbHVlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHNwcmludGYoJ1RoZSB2YXJpYWJsZSAnLiRuYW1lLicgbXVzdCBiZSBOVUxMLCBhIHNjYWxhciBvciBhIHN0cmluZ2FibGUgb2JqZWN0IGAlc2AgZ2l2ZW4nLCBnZXR0eXBlKCR2YWx1ZSkpKTsKICAgICAgICB9CgogICAgICAgIGlmICghJGlzTmVzdGVkTGlzdEFsbG93ZWQpIHsKICAgICAgICAgICAgdGhyb3cgVGVtcGxhdGVDYW5Ob3RCZUV4cGFuZGVkOjpkdWVUb05lc3RlZExpc3RPZlZhbHVlKCRuYW1lKTsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCR2YWx1ZSBhcyAmJHZhcikgewogICAgICAgICAgICAkdmFyID0gc2VsZjo6bm9ybWFsaXplVmFsdWUoJHZhciwgJG5hbWUsIGZhbHNlKTsKICAgICAgICB9CiAgICAgICAgdW5zZXQoJHZhcik7CgogICAgICAgIHJldHVybiAkdmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXBsYWNlcyBlbGVtZW50cyBmcm9tIHBhc3NlZCB2YXJpYWJsZXMgaW50byB0aGUgY3VycmVudCBpbnN0YW5jZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlcGxhY2UoVmFyaWFibGVCYWcgJHZhcmlhYmxlcyk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJHRoaXMtPnZhcmlhYmxlcyArICR2YXJpYWJsZXMtPnZhcmlhYmxlcyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/UriTemplate/VarSpecifier.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcVXJpVGVtcGxhdGU7Cgp1c2UgTGVhZ3VlXFVyaVxFeGNlcHRpb25zXFN5bnRheEVycm9yOwp1c2UgZnVuY3Rpb24gcHJlZ19tYXRjaDsKCmZpbmFsIGNsYXNzIFZhclNwZWNpZmllcgp7CiAgICAvKioKICAgICAqIFZhcmlhYmxlcyBzcGVjaWZpY2F0aW9uIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NTcwI3NlY3Rpb24tMi4zCiAgICAgKi8KICAgIHByaXZhdGUgY29uc3QgUkVHRVhQX1ZBUlNQRUMgPSAnL14KICAgICAgICAoPzxuYW1lPig/OltBLXowLTlfXC5dfCVbMC05YS1mQS1GXXsyfSkrKQogICAgICAgICg/PG1vZGlmaWVyPlw6KD88cG9zaXRpb24+XGQrKXxcKik/CiAgICAkL3gnOwoKICAgIHByaXZhdGUgc3RyaW5nICRuYW1lOwogICAgcHJpdmF0ZSBzdHJpbmcgJG1vZGlmaWVyOwogICAgcHJpdmF0ZSBpbnQgJHBvc2l0aW9uOwoKICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRuYW1lLCBzdHJpbmcgJG1vZGlmaWVyLCBpbnQgJHBvc2l0aW9uKQogICAgewogICAgICAgICR0aGlzLT5uYW1lID0gJG5hbWU7CiAgICAgICAgJHRoaXMtPm1vZGlmaWVyID0gJG1vZGlmaWVyOwogICAgICAgICR0aGlzLT5wb3NpdGlvbiA9ICRwb3NpdGlvbjsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBfX3NldF9zdGF0ZShhcnJheSAkcHJvcGVydGllcyk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJHByb3BlcnRpZXNbJ25hbWUnXSwgJHByb3BlcnRpZXNbJ21vZGlmaWVyJ10sICRwcm9wZXJ0aWVzWydwb3NpdGlvbiddKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21TdHJpbmcoc3RyaW5nICRzcGVjaWZpY2F0aW9uKTogc2VsZgogICAgewogICAgICAgIGlmICgxICE9PSBwcmVnX21hdGNoKHNlbGY6OlJFR0VYUF9WQVJTUEVDLCAkc3BlY2lmaWNhdGlvbiwgJHBhcnNlZCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdUaGUgdmFyaWFibGUgc3BlY2lmaWNhdGlvbiAiJy4kc3BlY2lmaWNhdGlvbi4nIiBpcyBpbnZhbGlkLicpOwogICAgICAgIH0KCiAgICAgICAgJHBhcnNlZCArPSBbJ21vZGlmaWVyJyA9PiAnJywgJ3Bvc2l0aW9uJyA9PiAnJ107CiAgICAgICAgaWYgKCcnICE9PSAkcGFyc2VkWydwb3NpdGlvbiddKSB7CiAgICAgICAgICAgICRwYXJzZWRbJ3Bvc2l0aW9uJ10gPSAoaW50KSAkcGFyc2VkWydwb3NpdGlvbiddOwogICAgICAgICAgICAkcGFyc2VkWydtb2RpZmllciddID0gJzonOwogICAgICAgIH0KCiAgICAgICAgaWYgKCcnID09PSAkcGFyc2VkWydwb3NpdGlvbiddKSB7CiAgICAgICAgICAgICRwYXJzZWRbJ3Bvc2l0aW9uJ10gPSAwOwogICAgICAgIH0KCiAgICAgICAgaWYgKDEwMDAwIDw9ICRwYXJzZWRbJ3Bvc2l0aW9uJ10pIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdUaGUgdmFyaWFibGUgc3BlY2lmaWNhdGlvbiAiJy4kc3BlY2lmaWNhdGlvbi4nIiBpcyBpbnZhbGlkIHRoZSBwb3NpdGlvbiBtb2RpZmllciBtdXN0IGJlIGxvd2VyIHRoYW4gMTAwMDAuJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJHBhcnNlZFsnbmFtZSddLCAkcGFyc2VkWydtb2RpZmllciddLCAkcGFyc2VkWydwb3NpdGlvbiddKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9TdHJpbmcoKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKDAgPCAkdGhpcy0+cG9zaXRpb24pIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5uYW1lLiR0aGlzLT5tb2RpZmllci4kdGhpcy0+cG9zaXRpb247CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPm5hbWUuJHRoaXMtPm1vZGlmaWVyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBuYW1lKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bmFtZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbW9kaWZpZXIoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5tb2RpZmllcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcG9zaXRpb24oKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5wb3NpdGlvbjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/advanced_settings_example.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiRhZHZhbmNlZFNldHRpbmdzID0gYXJyYXkoCgogICAgLy8gQ29tcHJlc3Npb24gc2V0dGluZ3MKICAgIC8vIEhhbmRsZSBpZiB0aGUgZ2V0UmVxdWVzdC9nZXRSZXNwb25zZSBtZXRob2RzIHdpbGwgcmV0dXJuIHRoZSBSZXF1ZXN0L1Jlc3BvbnNlIGRlZmxhdGVkLgogICAgLy8gQnV0IGlmIHdlIHByb3ZpZGUgYSAkZGVmbGF0ZSBib29sZWFuIHBhcmFtZXRlciB0byB0aGUgZ2V0UmVxdWVzdCBvciBnZXRSZXNwb25zZQogICAgLy8gbWV0aG9kIGl0IHdpbGwgaGF2ZSBwcmlvcml0eSBvdmVyIHRoZSBjb21wcmVzc2lvbiBzZXR0aW5ncy4KICAgICdjb21wcmVzcycgPT4gYXJyYXkoCiAgICAgICAgJ3JlcXVlc3RzJyA9PiB0cnVlLAogICAgICAgICdyZXNwb25zZXMnID0+IHRydWUKICAgICksCgogICAgLy8gU2VjdXJpdHkgc2V0dGluZ3MKICAgICdzZWN1cml0eScgPT4gYXJyYXkoCgogICAgICAgIC8qKiBzaWduYXR1cmVzIGFuZCBlbmNyeXB0aW9ucyBvZmZlcmVkICovCgogICAgICAgIC8vIEluZGljYXRlcyB0aGF0IHRoZSBuYW1lSUQgb2YgdGhlIDxzYW1scDpsb2dvdXRSZXF1ZXN0PiBzZW50IGJ5IHRoaXMgU1AKICAgICAgICAvLyB3aWxsIGJlIGVuY3J5cHRlZC4KICAgICAgICAnbmFtZUlkRW5jcnlwdGVkJyA9PiBmYWxzZSwKCiAgICAgICAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIDxzYW1scDpBdXRoblJlcXVlc3Q+IG1lc3NhZ2VzIHNlbnQgYnkgdGhpcyBTUAogICAgICAgIC8vIHdpbGwgYmUgc2lnbmVkLiAgICAgICAgICAgICAgW1RoZSBNZXRhZGF0YSBvZiB0aGUgU1Agd2lsbCBvZmZlciB0aGlzIGluZm9dCiAgICAgICAgJ2F1dGhuUmVxdWVzdHNTaWduZWQnID0+IGZhbHNlLAoKICAgICAgICAvLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgPHNhbWxwOmxvZ291dFJlcXVlc3Q+IG1lc3NhZ2VzIHNlbnQgYnkgdGhpcyBTUAogICAgICAgIC8vIHdpbGwgYmUgc2lnbmVkLgogICAgICAgICdsb2dvdXRSZXF1ZXN0U2lnbmVkJyA9PiBmYWxzZSwKCiAgICAgICAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIDxzYW1scDpsb2dvdXRSZXNwb25zZT4gbWVzc2FnZXMgc2VudCBieSB0aGlzIFNQCiAgICAgICAgLy8gd2lsbCBiZSBzaWduZWQuCiAgICAgICAgJ2xvZ291dFJlc3BvbnNlU2lnbmVkJyA9PiBmYWxzZSwKCiAgICAgICAgLyogU2lnbiB0aGUgTWV0YWRhdGEKICAgICAgICAgRmFsc2UgfHwgVHJ1ZSAodXNlIHNwIGNlcnRzKSB8fCBhcnJheSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna2V5RmlsZU5hbWUnID0+ICdtZXRhZGF0YS5rZXknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlcnRGaWxlTmFtZScgPT4gJ21ldGFkYXRhLmNydCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYXJyYXkgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3g1MDljZXJ0JyA9PiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcml2YXRlS2V5JyA9PiAnJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAqLwogICAgICAgICdzaWduTWV0YWRhdGEnID0+IGZhbHNlLAoKCiAgICAgICAgLyoqIHNpZ25hdHVyZXMgYW5kIGVuY3J5cHRpb25zIHJlcXVpcmVkICoqLwoKICAgICAgICAvLyBJbmRpY2F0ZXMgYSByZXF1aXJlbWVudCBmb3IgdGhlIDxzYW1scDpSZXNwb25zZT4sIDxzYW1scDpMb2dvdXRSZXF1ZXN0PiBhbmQKICAgICAgICAvLyA8c2FtbHA6TG9nb3V0UmVzcG9uc2U+IGVsZW1lbnRzIHJlY2VpdmVkIGJ5IHRoaXMgU1AgdG8gYmUgc2lnbmVkLgogICAgICAgICd3YW50TWVzc2FnZXNTaWduZWQnID0+IGZhbHNlLAoKICAgICAgICAvLyBJbmRpY2F0ZXMgYSByZXF1aXJlbWVudCBmb3IgdGhlIDxzYW1sOkFzc2VydGlvbj4gZWxlbWVudHMgcmVjZWl2ZWQgYnkKICAgICAgICAvLyB0aGlzIFNQIHRvIGJlIGVuY3J5cHRlZC4KICAgICAgICAnd2FudEFzc2VydGlvbnNFbmNyeXB0ZWQnID0+IGZhbHNlLAoKICAgICAgICAvLyBJbmRpY2F0ZXMgYSByZXF1aXJlbWVudCBmb3IgdGhlIDxzYW1sOkFzc2VydGlvbj4gZWxlbWVudHMgcmVjZWl2ZWQgYnkKICAgICAgICAvLyB0aGlzIFNQIHRvIGJlIHNpZ25lZC4gICAgICAgIFtUaGUgTWV0YWRhdGEgb2YgdGhlIFNQIHdpbGwgb2ZmZXIgdGhpcyBpbmZvXQogICAgICAgICd3YW50QXNzZXJ0aW9uc1NpZ25lZCcgPT4gZmFsc2UsCgogICAgICAgIC8vIEluZGljYXRlcyBhIHJlcXVpcmVtZW50IGZvciB0aGUgTmFtZUlEIGVsZW1lbnQgb24gdGhlIFNBTUxSZXNwb25zZSByZWNlaXZlZAogICAgICAgIC8vIGJ5IHRoaXMgU1AgdG8gYmUgcHJlc2VudC4KICAgICAgICAnd2FudE5hbWVJZCcgPT4gdHJ1ZSwKCiAgICAgICAgLy8gSW5kaWNhdGVzIGEgcmVxdWlyZW1lbnQgZm9yIHRoZSBOYW1lSUQgcmVjZWl2ZWQgYnkKICAgICAgICAvLyB0aGlzIFNQIHRvIGJlIGVuY3J5cHRlZC4KICAgICAgICAnd2FudE5hbWVJZEVuY3J5cHRlZCcgPT4gZmFsc2UsCgogICAgICAgIC8vIEF1dGhlbnRpY2F0aW9uIGNvbnRleHQuCiAgICAgICAgLy8gU2V0IHRvIGZhbHNlIGFuZCBubyBBdXRoQ29udGV4dCB3aWxsIGJlIHNlbnQgaW4gdGhlIEF1dGhOUmVxdWVzdCwKICAgICAgICAvLyBTZXQgdHJ1ZSBvciBkb24ndCBwcmVzZW50IHRoaXMgcGFyYW1ldGVyIGFuZCB5b3Ugd2lsbCBnZXQgYW4gQXV0aENvbnRleHQgJ2V4YWN0JyAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFjOmNsYXNzZXM6UGFzc3dvcmRQcm90ZWN0ZWRUcmFuc3BvcnQnCiAgICAgICAgLy8gU2V0IGFuIGFycmF5IHdpdGggdGhlIHBvc3NpYmxlIGF1dGggY29udGV4dCB2YWx1ZXM6IGFycmF5KCd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YWM6Y2xhc3NlczpQYXNzd29yZCcsICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YWM6Y2xhc3NlczpYNTA5JyksCiAgICAgICAgJ3JlcXVlc3RlZEF1dGhuQ29udGV4dCcgPT4gZmFsc2UsCgogICAgICAgIC8vIEFsbG93cyB0aGUgYXV0aG4gY29tcGFyaXNvbiBwYXJhbWV0ZXIgdG8gYmUgc2V0LCBkZWZhdWx0cyB0byAnZXhhY3QnIGlmCiAgICAgICAgLy8gdGhlIHNldHRpbmcgaXMgbm90IHByZXNlbnQuCiAgICAgICAgJ3JlcXVlc3RlZEF1dGhuQ29udGV4dENvbXBhcmlzb24nID0+ICdleGFjdCcsCgogICAgICAgIC8vIEluZGljYXRlcyBpZiB0aGUgU1Agd2lsbCB2YWxpZGF0ZSBhbGwgcmVjZWl2ZWQgeG1scy4KICAgICAgICAvLyAoSW4gb3JkZXIgdG8gdmFsaWRhdGUgdGhlIHhtbCwgJ3N0cmljdCcgYW5kICd3YW50WE1MVmFsaWRhdGlvbicgbXVzdCBiZSB0cnVlKS4KICAgICAgICAnd2FudFhNTFZhbGlkYXRpb24nID0+IHRydWUsCgogICAgICAgIC8vIElmIHRydWUsIFNBTUxSZXNwb25zZXMgd2l0aCBhbiBlbXB0eSB2YWx1ZSBhdCBpdHMgRGVzdGluYXRpb24KICAgICAgICAvLyBhdHRyaWJ1dGUgd2lsbCBub3QgYmUgcmVqZWN0ZWQgZm9yIHRoaXMgZmFjdC4KICAgICAgICAncmVsYXhEZXN0aW5hdGlvblZhbGlkYXRpb24nID0+IGZhbHNlLAoKICAgICAgICAvLyBJZiB0cnVlLCBEZXN0aW5hdGlvbiBVUkwgc2hvdWxkIHN0cmljdGx5IG1hdGNoIHRvIHRoZSBhZGRyZXNzIHRvCiAgICAgICAgLy8gd2hpY2ggdGhlIHJlc3BvbnNlIGhhcyBiZWVuIHNlbnQuCiAgICAgICAgLy8gTm90aWNlIHRoYXQgaWYgJ3JlbGF4RGVzdGluYXRpb25WYWxpZGF0aW9uJyBpcyB0cnVlIGFuIGVtcHR5IERlc3RpbmF0aW9uCiAgICAgICAgLy8gd2lsbCBiZSBhY2NlcHRlZC4KICAgICAgICAnZGVzdGluYXRpb25TdHJpY3RseU1hdGNoZXMnID0+IGZhbHNlLAoKICAgICAgICAvLyBJZiB0cnVlLCB0aGUgdG9vbGtpdCB3aWxsIG5vdCByYWlzZWQgYW4gZXJyb3Igd2hlbiB0aGUgU3RhdGVtZW50IEVsZW1lbnQKICAgICAgICAvLyBjb250YWluIGF0cmlidXRlIGVsZW1lbnRzIHdpdGggbmFtZSBkdXBsaWNhdGVkCiAgICAgICAgJ2FsbG93UmVwZWF0QXR0cmlidXRlTmFtZScgPT4gZmFsc2UsCgogICAgICAgIC8vIElmIHRydWUsIFNBTUxSZXNwb25zZXMgd2l0aCBhbiBJblJlc3BvbnNlVG8gdmFsdWUgd2lsbCBiZSByZWplY3RlZCBpZiBub3QKICAgICAgICAvLyBBdXRoTlJlcXVlc3QgSUQgcHJvdmlkZWQgdG8gdGhlIHZhbGlkYXRpb24gbWV0aG9kLgogICAgICAgICdyZWplY3RVbnNvbGljaXRlZFJlc3BvbnNlc1dpdGhJblJlc3BvbnNlVG8nID0+IGZhbHNlLAoKICAgICAgICAvLyBBbGdvcml0aG0gdGhhdCB0aGUgdG9vbGtpdCB3aWxsIHVzZSBvbiBzaWduaW5nIHByb2Nlc3MuIE9wdGlvbnM6CiAgICAgICAgLy8gICAgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNyc2Etc2hhMScKICAgICAgICAvLyAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI2RzYS1zaGExJwogICAgICAgIC8vICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhMjU2JwogICAgICAgIC8vICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhMzg0JwogICAgICAgIC8vICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhNTEyJwogICAgICAgIC8vIE5vdGljZSB0aGF0IHJzYS1zaGExIGlzIGEgZGVwcmVjYXRlZCBhbGdvcml0aG0gYW5kIHNob3VsZCBub3QgYmUgdXNlZAogICAgICAgICdzaWduYXR1cmVBbGdvcml0aG0nID0+ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhMjU2JywKCiAgICAgICAgLy8gQWxnb3JpdGhtIHRoYXQgdGhlIHRvb2xraXQgd2lsbCB1c2Ugb24gZGlnZXN0IHByb2Nlc3MuIE9wdGlvbnM6CiAgICAgICAgLy8gICAgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNzaGExJwogICAgICAgIC8vICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNzaGEyNTYnCiAgICAgICAgLy8gICAgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZHNpZy1tb3JlI3NoYTM4NCcKICAgICAgICAvLyAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjc2hhNTEyJwogICAgICAgIC8vIE5vdGljZSB0aGF0IHNoYTEgaXMgYSBkZXByZWNhdGVkIGFsZ29yaXRobSBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkCiAgICAgICAgJ2RpZ2VzdEFsZ29yaXRobScgPT4gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3NoYTI1NicsCgogICAgICAgIC8vIEFsZ29yaXRobSB0aGF0IHRoZSB0b29sa2l0IHdpbGwgdXNlIGZvciBlbmNyeXB0aW9uIHByb2Nlc3MuIE9wdGlvbnM6CiAgICAgICAgLy8gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3RyaXBsZWRlcy1jYmMnCiAgICAgICAgLy8gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI2FlczEyOC1jYmMnCiAgICAgICAgLy8gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI2FlczE5Mi1jYmMnCiAgICAgICAgLy8gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI2FlczI1Ni1jYmMnCiAgICAgICAgLy8gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDkveG1sZW5jMTEjYWVzMTI4LWdjbScKICAgICAgICAvLyAnaHR0cDovL3d3dy53My5vcmcvMjAwOS94bWxlbmMxMSNhZXMxOTItZ2NtJwogICAgICAgIC8vICdodHRwOi8vd3d3LnczLm9yZy8yMDA5L3htbGVuYzExI2FlczI1Ni1nY20nOwogICAgICAgIC8vIE5vdGljZSB0aGF0IGFlcy1jYmMgYXJlIG5vdCBjb25zaWRlciBzZWN1cmUgYW55bW9yZSBzbyBzaG91bGQgbm90IGJlIHVzZWQKICAgICAgICAnZW5jcnlwdGlvbl9hbGdvcml0aG0nID0+ICdodHRwOi8vd3d3LnczLm9yZy8yMDA5L3htbGVuYzExI2FlczEyOC1nY20nLAoKICAgICAgICAvLyBBREZTIFVSTC1FbmNvZGVzIFNBTUwgZGF0YSBhcyBsb3dlcmNhc2UsIGFuZCB0aGUgdG9vbGtpdCBieSBkZWZhdWx0IHVzZXMKICAgICAgICAvLyB1cHBlcmNhc2UuIFR1cm4gaXQgVHJ1ZSBmb3IgQURGUyBjb21wYXRpYmlsaXR5IG9uIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24KICAgICAgICAnbG93ZXJjYXNlVXJsZW5jb2RpbmcnID0+IGZhbHNlLAogICAgKSwKCiAgICAvLyBDb250YWN0IGluZm9ybWF0aW9uIHRlbXBsYXRlLCBpdCBpcyByZWNvbW1lbmRlZCB0byBzdXBwbHkgYSB0ZWNobmljYWwgYW5kIHN1cHBvcnQgY29udGFjdHMKICAgICdjb250YWN0UGVyc29uJyA9PiBhcnJheSgKICAgICAgICAndGVjaG5pY2FsJyA9PiBhcnJheSgKICAgICAgICAgICAgJ2dpdmVuTmFtZScgPT4gJycsCiAgICAgICAgICAgICdlbWFpbEFkZHJlc3MnID0+ICcnCiAgICAgICAgKSwKICAgICAgICAnc3VwcG9ydCcgPT4gYXJyYXkoCiAgICAgICAgICAgICdnaXZlbk5hbWUnID0+ICcnLAogICAgICAgICAgICAnZW1haWxBZGRyZXNzJyA9PiAnJwogICAgICAgICksCiAgICApLAoKICAgIC8vIE9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbiB0ZW1wbGF0ZSwgdGhlIGluZm8gaW4gZW5fVVMgbGFuZyBpcyByZWNvbW1lbmRlZCwgYWRkIG1vcmUgaWYgcmVxdWlyZWQKICAgICdvcmdhbml6YXRpb24nID0+IGFycmF5KAogICAgICAgICdlbi1VUycgPT4gYXJyYXkoCiAgICAgICAgICAgICduYW1lJyA9PiAnJywKICAgICAgICAgICAgJ2Rpc3BsYXluYW1lJyA9PiAnJywKICAgICAgICAgICAgJ3VybCcgPT4gJycKICAgICAgICApLAogICAgKSwKKTsKCgovKiBJbnRlcm9wZXJhYmxlIFNBTUwgMi4wIFdlYiBCcm93c2VyIFNTTyBQcm9maWxlIFtzYW1sMmludF0gICBodHRwOi8vc2FtbDJpbnQub3JnL3Byb2ZpbGUvY3VycmVudAoKICAgJ2F1dGhuUmVxdWVzdHNTaWduZWQnID0+IGZhbHNlLCAgICAvLyBTUCBTSE9VTEQgTk9UIHNpZ24gdGhlIDxzYW1scDpBdXRoblJlcXVlc3Q+LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1VU1QgTk9UIGFzc3VtZSB0aGF0IHRoZSBJZFAgdmFsaWRhdGVzIHRoZSBzaWduCiAgICd3YW50QXNzZXJ0aW9uc1NpZ25lZCcgPT4gdHJ1ZSwKICAgJ3dhbnRBc3NlcnRpb25zRW5jcnlwdGVkJyA9PiB0cnVlLCAvLyBNVVNUIGJlIGVuYWJsZWQgaWYgU1NML0hUVFBzIGlzIGRpc2FibGVkCiAgICd3YW50TmFtZUlkRW5jcnlwdGVkJyA9PiBmYWxzZSwKKi8K]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/certs/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/certs/README</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGFrZSBjYXJlIG9mIHRoaXMgZm9sZGVyIHRoYXQgY291bGQgY29udGFpbiBwcml2YXRlIGtleS4gQmUgc3VyZSB0aGF0IHRoaXMgZm9sZGVyIG5ldmVyIGlzIHB1Ymxpc2hlZC4KCk9uZWxvZ2luIFBIUCBUb29sa2l0IGV4cGVjdHMgY2VydHMgZm9yIHRoZSBTUCBzdG9yZWQgYXQ6CgogKiBzcC5rZXkgICBQcml2YXRlIEtleQogKiBzcC5jcnQgIFB1YmxpYyBjZXJ0CiAqIHNwX25ldy5jcnQgRnV0dXJlIFB1YmxpYyBjZXJ0CgpBbHNvIHlvdSBjYW4gdXNlIG90aGVyIGNlcnQgdG8gc2lnbiB0aGUgbWV0YWRhdGEgb2YgdGhlIFNQIHVzaW5nIHRoZToKCiAqIG1ldGFkYXRhLmtleQogKiBtZXRhZGF0YS5jcnQKCklmIHlvdSBhcmUgdXNpbmcgY29tcG9zZXIgdG8gaW5zdGFsbCB0aGUgcGhwLXNhbWwgdG9vbGtpdCwgWW91IHNob3VsZCBtb3ZlIHRoZSBjZXJ0cyBmb2xkZXIgdG8gIHZlbmRvci9vbmVsb2dpbi9waHAtc2FtbC9jZXJ0cwo=]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/CHANGELOG</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q0hBTkdFTE9HCj09PT09PT09PQoKdjQuMy4yCiogVXBkYXRlIHhtbHNlY2xpYnMgdmVyc2lvbiByZXF1aXJlbWVudCB0byAzLjEuNSBkdWUgW0NWRS0yMDI2LTMyMzEzXShodHRwczovL2dpdGh1Yi5jb20vcm9icmljaGFyZHMveG1sc2VjbGlicy9zZWN1cml0eS9hZHZpc29yaWVzL0dIU0EtNHYyNi12NmNnLWc2ZjkpCgp2NC4zLjEKKiBVcGRhdGUgeG1sc2VjbGlicyB2ZXJzaW9uIHJlcXVpcmVtZW50IHRvIDMuMS40IGR1ZSBbQ1ZFLTIwMjUtNjY0NzVdKGh0dHBzOi8vZ2l0aHViLmNvbS9hZHZpc29yaWVzL0dIU0EtYzRjYy14OTI4LXZqdzkpCgp2NC4zLjAKKiBQSFAgOC40IENvbXBhdGliaWxpdHkgdmlhICM2MDAgYW5kICM2MDcuCiogWyM2MTldKGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL3B1bGwvNjE5KSBBZGQgUGFyYW1ldGVyIGNoZWNraW5nIG9uIHZhbGlkYXRlQmluYXJ5U2lnbiwgaW5zcGlyZWQgb24gQ1ZFLTIwMjUtMjc3NzMKKiBbIzYwM10oaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwvaXNzdWVzLzYwMykgRml4IHR5cG8gaW4gaWdub3JlVmFsaWRVbnRpbCB0aGF0IGJyZWFrcyBtZXRhZGF0YS4gQWRkIGEgbmV3IHBhcmFtZXRlciB0byBleGNsdWRlIHZhbGlkVW50aWwgb24gU2V0dGluZ3MgZ2V0U1BNZXRhZGF0YQoqIFsjNTk0XShodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC9wdWxsLzU5NCkgQWRkIHN1cHBvcnQgZm9yIGVuY3J5cHRlZCBuYW1lIGlkIGluIGVuY3J5cHRlZCBhc3NlcnRpb24KKiBGaXggYnVpbGRXaXRoQmFzZVVSTFBhdGguIFNlZSAjNTgxCiogRG9jIGZpeCB0eXBvCiogUmVtb3ZlIFRyYXZpcyBDSSByZWZlcmVuY2VzCgp2NC4yLjAKKiBbIzU4Nl0oaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwvcHVsbC81ODYpIElkUE1ldGFkYXRhUGFyc2VyOjpwYXJzZVJlbW90ZVhNTCAtIEFkZCBhcmd1bWVudCBmb3Igc2V0dGluZyB3aGV0aGVyIHRvIHZhbGlkYXRlIHBlZXIgU1NMIGNlcnRpZmljYXRlCiogWyM1ODVdKGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL3B1bGwvNTg1KSBEZWNsYXJlIGNvbmRpdGlvbmFsIHJldHVybiB0eXBlcwoqIFsjNTc3XShodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC9wdWxsLzU3NykgQWxsb3cgZW1wdHkgTmFtZUlEIHZhbHVlIHdoZW4gbm8gc3RyaWN0IG9yIHdhbnROYW1lSWQgaXMgZmFsc2UKKiBbIzU3MF0oaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwvcHVsbC81NzApIFN1cHBvcnQgWDUwOSBjZXJ0IGNvbW1lbnRzCiogWyM1NjldKGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL3B1bGwvNTY5KSBBZGQgcGFyYW1ldGVyIHRvIGV4Y2x1ZGUgdmFsaWRVbnRpbCBvbiBTUCBNZXRhZGF0YSBYTUwKKiBbIzU1MV0oaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwvcHVsbC81NTEpIEZpeCBjb21wYXRpYmlsaXR5IHdpdGggcHJveGllcyB0aGF0IGV4dGVuZHMgSFRUUF9YX0ZPUldBUkRFRF9IT1NUCiogTG9nb3V0UmVxdWVzdCBhbmQgdGhlIExvZ291dFJlc3BvbnNlIG9iamVjdCB0byBzZXBhcmF0ZSBmdW5jdGlvbnMKKiBNYWtlIFNhbWwyXEF1dGggY2FuIGFjY2VwdCBhIHBhcmFtICRzcFZhbGlkYXRpb25Pbmx5CiogRml4IHR5cG9zIG9uIHJlYWRtZS4KKiBbIzQ4MF0oaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwvcHVsbC80ODApIEZpeCB0eXBvIG9uIFNQTmFtZVF1YWxpZmllciBtaXNtYXRjaCBlcnJvciBtZXNzYWdlCiogUmVtb3ZlIHVuYm91bmQgdmVyc2lvbiBjb25zdHJhaW50cyBvbiB4bWxzZWNsaWJzCiogVXBkYXRlIGRlcGVuZGVuY2llcwoqIEZpeCB0ZXN0IHBheWxvYWRzCiogUmVtb3ZlIHJlZmVyZW5jZXMgdG8gT25lTG9naW4uCgp2NC4xLjAKKiBBZGQgcGlwZSB0aHJvdWdoIGZvciB0aGUgJHNwVmFsaWRhdGlvbk9ubHkgc2V0dGluZyBpbiB0aGUgQXV0aCBjbGFzcy4KCnY0LjAuMQoqIEFkZCBjb21wYXRpYmlsaXR5IHdpdGggUEhQIDguMQoqIFsjNDg3XShodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC9pc3N1ZXMvNDg3KSBFbmFibGUgc3RyaWN0IGNoZWNrIG9uIGluX2FycmF5IG1ldGhvZAoqIEFkZCB3YXJuaW5nIGFib3V0IE9wZW4gUmVkaXJlY3QgYW5kIFJlcGx5IGF0dGFja3MKKiBBZGQgd2FybmluZyBhYm91dCB0aGUgdXNlIG9mIElkcE1ldGFkYXRhUGFyc2VyIGNsYXNzLiBJZiBNZXRhZGF0YSBVUkxzCiAgYXJlIHByb3ZpZGVkIGJ5IDNyZCBwYXJ0aWVzLCB0aGUgVVJMIGlucHV0cyBNVVNUIGJlIHZhbGlkYXRlZCB0byBhdm9pZCBpc3N1ZXMgbGlrZSBTU1JGCgp2NC4wLjAKKiBbIzQ2N10oaHR0cHM6Ly9naXRodWIuY29tL29uZWxvZ2luL3BocC1zYW1sL2lzc3Vlcy80NjcpIEZpeCBidWcgb24gZ2V0U2VsZlJvdXRlZFVSTE5vUXVlcnkgbWV0aG9kCiogU3VwcG9ydHMgUEhQIDguWAoKdjMuNy4wCiogWyM1ODZdKGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL3B1bGwvNTg2KSBJZFBNZXRhZGF0YVBhcnNlcjo6cGFyc2VSZW1vdGVYTUwgLSBBZGQgYXJndW1lbnQgZm9yIHNldHRpbmcgd2hldGhlciB0byB2YWxpZGF0ZSBwZWVyIFNTTCBjZXJ0aWZpY2F0ZQoqIFsjNTg1XShodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC9wdWxsLzU4NSkgRGVjbGFyZSBjb25kaXRpb25hbCByZXR1cm4gdHlwZXMKKiBNYWtlIFNhbWwyXEF1dGggY2FuIGFjY2VwdCBhIHBhcmFtICRzcFZhbGlkYXRpb25Pbmx5CiogWyM1NzddKGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL3B1bGwvNTc3KSBBbGxvdyBlbXB0eSBOYW1lSUQgdmFsdWUgd2hlbiBubyBzdHJpY3Qgb3Igd2FudE5hbWVJZCBpcyBmYWxzZQoqIFsjNTcwXShodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC9wdWxsLzU3MCkgU3VwcG9ydCBYNTA5IGNlcnQgY29tbWVudHMKKiBbIzU2OV0oaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwvcHVsbC81NjkpIEFkZCBwYXJhbWV0ZXIgdG8gZXhjbHVkZSB2YWxpZFVudGlsIG9uIFNQIE1ldGFkYXRhIFhNTAoqIFsjNTUxXShodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC9wdWxsLzU1MSkgRml4IGNvbXBhdGliaWxpdHkgd2l0aCBwcm94aWVzIHRoYXQgZXh0ZW5kcyBIVFRQX1hfRk9SV0FSREVEX0hPU1QKKiBbIzQ4N10oaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwvaXNzdWVzLzQ4NykgRW5hYmxlIHN0cmljdCBjaGVjayBvbiBpbl9hcnJheSBtZXRob2QKKiBNYWtlIFNhbWwyXEF1dGggY2FuIGFjY2VwdCBhIHBhcmFtICRzcFZhbGlkYXRpb25Pbmx5CiogRml4IHR5cG9zIG9uIHJlYWRtZS4KKiBBZGQgd2FybmluZyBhYm91dCBPcGVuIFJlZGlyZWN0IGFuZCBSZXBseSBhdHRhY2tzCiogQWRkIHdhcm5pbmcgYWJvdXQgdGhlIHVzZSBvZiBJZHBNZXRhZGF0YVBhcnNlciBjbGFzcy4gSWYgTWV0YWRhdGEgVVJMcwogIGFyZSBwcm92aWRlZCBieSAzcmQgcGFydGllcywgdGhlIFVSTCBpbnB1dHMgTVVTVCBiZSB2YWxpZGF0ZWQgdG8gYXZvaWQgaXNzdWVzIGxpa2UgU1NSRgoqIEZpeCB0ZXN0IHBheWxvYWRzCiogUmVtb3ZlIHJlZmVyZW5jZXMgdG8gT25lTG9naW4uCgp2My42LjEKKiBbIzQ2N10oaHR0cHM6Ly9naXRodWIuY29tL29uZWxvZ2luL3BocC1zYW1sL2lzc3Vlcy80NjcpIEZpeCBidWcgb24gZ2V0U2VsZlJvdXRlZFVSTE5vUXVlcnkgbWV0aG9kCgp2My42LjAKKiBBZGQgQUVTMTI4X0dDTSBlbmNyeXB0aW9uIG9uIGdlbmVyYXRlTmFtZUlkIG1ldGhvZC4gTmV3IHNldHRpbmcgcGFyYW1ldGVyIGVuY3J5cHRpb25fYWxnb3JpdGhtLiBJZiB5b3Ugc2V0IGEgZW5jcnlwdGlvbiBtZXRob2QgZGlmZmVyZW50IHRoYW4gQUVTMTI4X0NCQyB0aGVuIHRoZSBhbGdvcml0aG0gUlNBX09BRVBfTUdGMVAgd2lsbCBiZSB1c2VkIGFzIHdlbGwgaW5zdGVhZCBSU0FfMV81CiogUEhQIDguMCBzdXBwb3J0Cgp2My41LjEKKiAzLjUuMCBwYWNrYWdpc3QvZ2l0aHViIHJlbGVhc2UgZHVlIGEgY29uZnVzaW9uIHdlcmUgdXNpbmcgdGhlIG1hc3RlciAoMi5YIGJyYW5jaCkuIEknbSByZWxlYXNpbmcgMy41LjEgdG8gZml4IHRoaXMgaXNzdWUgYW5kIGdvIGJhY2sgdG8gMy5YIGJyYW5jaAoKdjMuNS4wCiogWyM0MTJdKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9wdWxsLzQxMikgRW1wdHkgaW5zdGVhZCBvZiB1bnNldCB0aGUgJF9TRVNTSU9OIHZhcmlhYmxlCiogWyM0MzNdKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9pc3N1ZXMvNDQzKSBGaXggSW5jb3JyZWN0IERlc3RpbmF0aW9uIGluIExvZ291dFJlc3BvbnNlIHdoZW4gdXNpbmcgcmVzcG9uc2VVcmwgIzQ0MwoqIFVwZGF0ZSB4bWxzZWNsaWJzIHRvIDMuMS4xCiogQWRkIHN1cHBvcnQgZm9yIFNNQVJUQ0FSRF9QS0kgYW5kIFJTQV9UT0tFTiBBdXRoIENvbnRleHRzCiogR2V0IGxpYiBwYXRoIGR5bmFtaWNhbGx5CiogQ2hlY2sgZm9yIHg1MDlDZXJ0IG9mIHRoZSBJZFAgd2hlbiBsb2FkaW5nIHNldHRpbmdzLCBldmVuIGlmIHRoZSBzZWN1cml0eSBpbmRleCB3YXMgbm90IHByb3ZpZGVkCiogU3VwcG9ydCBTdGF0ZW1lbnRzIHdpdGggQXR0cmlidXRlIGVsZW1lbnRzIHdpdGggdGhlIHNhbWUgbmFtZSBlbmFibGluZyB0aGUgYWxsb3dSZXBlYXRBdHRyaWJ1dGVOYW1lIHNldHRpbmcKCnYzLjQuMQoqIEFkZCBzZXRTY2hlbWFzUGF0aCB0byBBdXRoIGNsYXNzIGFuZCBmaXggYmFja3dhcmQgY29tcGF0aWJpbGl0eQoKdi4zLjQuMAoqIFN1cHBvcnQgcmVqZWN0aW5nIHVuc29saWNpdGVkIFNBTUxSZXNwb25zZXMuCiogU3VwcG9ydCBzdHJpYyBkZXN0aW5hdGlvbiBtYXRjaGluZy4KKiBSZWplY3QgU0FNTFJlc3BvbnNlIGlmIHJlcXVlc3RJRCB3YXMgcHJvdmlkZWQgdG8gdGhlIHZhbGlkb3RyIGJ1dCB0aGUgSW5SZXNwb25zZVRvIGF0dHJpYnV0ZW9mIHRoZSBTQU1MUmVzcG9uc2UgaXMgbWlzc2luZwoqIENoZWNrIGRlc3RpbmF0aW9uIGFnYWluc3QgdGhlIGdldFNlbGZVUkxOb1F1ZXJ5IGFzIHdlbGwgb24gTG9nb3V0UmVxdWVzdCBhbmQgTG9nb3V0UmVzcG9uc2UgYXMgd2UgZG8gb24gUmVzcG9uc2UKKiBJbXByb3ZlIGdldFNlbGZSb3V0ZWRVUkxOb1F1ZXJ5IG1ldGhvZAoqIE9ubHkgYWRkIHJlc3BvbnNlVXJsIHRvIHRoZSBzZXR0aW5ncyBpZiBSZXNwb25zZUxvY2F0aW9uIHByZXNlbnQgaW4gdGhlIElkUE1ldGFkYXRhUGFyc2VyCiogUmVtb3ZlIHVzZSBvZiAkX0dFVCBvbiBzdGF0aWMgbWV0aG9kIHZhbGlkYXRlQmluYXJ5U2lnbgoqIEZpeCBlcnJvciBtZXNzYWdlIHdoZW4gQXNzZXJ0aW9uIGFuZCBOYW1lSWQgYXJlIGJvdGggZW5jcnlwdGVkIChub3Qgc3VwcG9ydGVkKQoKdi4zLjMuMQoqIFVwZGF0ZSB4bWxzZWNsaWJzIHRvIDMuMC40CiogUmVtb3ZlIENvbXBhcmlzb24gYXRyaWJ1dGUgZnJvbSBSZXF1ZXN0ZWRBdXRobkNvbnRleHQgd2hlbiBzZXR0aW5nIGhhcyBlbXB0eSB2YWx1ZQoKdi4zLjMuMAoqIFNldCB0cnVlIGFzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBzdHJpY3Qgc2V0dGluZwoqIFJlbGF4IGNvbXBhcmlzb24gb2YgZmFsc2Ugb24gU2lnbk1ldGFkYXRhCiogRml4IENJCgp2LjMuMi4xCiogQWRkIG1pc3NlZCBuYW1lSWRWYWx1ZVJlcSBwYXJhbWV0ZXIgdG8gYnVpbGRBdXRoblJlcXVlc3QgbWV0aG9kCgp2LjMuMi4wCiogQWRkIHN1cHBvcnQgZm9yIFN1YmplY3RzIG9uIEF1dGhOUmVxdWVzdHMgYnkgdGhlIG5ldyBwYXJhbWV0ZXIgbmFtZUlkVmFsdWVSZXEKKiBTdXBwb3J0IFNMTyBSZXNwb25zZUxvY2F0aW9uCiogWyMzNDRdKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9pc3N1ZXMvMzQ0KSBSYWlzZSBlcnJvcnMgb24gSWRQTWV0YWRhdGFQYXJzZXI6OnBhcnNlUmVtb3RlWE1MIGFuZCBJZFBNZXRhZGF0YVBhcnNlcjo6cGFyc2VGaWxlWE1MCiogWyMzNTZdKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9pc3N1ZXMvMzU2KSBTdXBwb3J0ICd4NTA5Y2VydCcgYW5kICdwcml2YXRlS2V5JyBvbiBzaWduTWV0YWRhdGEgc2VjdXJpdHkgc2V0dGluZwoKdi4zLjEuMQoqIEZvcmNlIHRvIHVzZSBhdCBsZWFzdCB4bWxzZWNsaWJzIDMuMC4zIGZvciBzZWN1cml0eSByZWFzb25zCiogWyMzNjddKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9wdWxsLzM2NykgTW92ZSB0aGUgY3JlYXRpb24gb2YgdGhlIEF1dGhuUmVxdWVzdCB0byBzZXBhcmF0ZSBmdW5jdGlvbgoqIFNldCBzdHJpY3Q9dHJ1ZSBvbiBjb25maWcgZXhhbXBsZXMKKiBNb3ZlIHBocHVuaXQueG1sCgp2LjMuMS4wCiogU2VjdXJpdHkgaW1wcm92ZW1lbnQgc3VnZ2VzdGVkIGJ5IE5pbHMgRW5nZWxiZXJ0eiB0byBwcmV2ZW50IERET1MgYnkgZXhwYW5zaW9uIG9mIGludGVybmFsbHkgZGVmaW5lZCBlbnRpdGllcyAoWEVFKQoqIEZpeCBzZXR0aW5nX2V4YW1wbGUucGhwIHNlcnZpY2VuYW1lIHBhcmFtZXRlcgoKdi4zLjAuMAoqIFJlbW92ZSBtY3J5cHQgZGVwZW5kZW5jeS4gQ29tcGF0aWJsZSB3aXRoIFBIUCA3LjIKKiB4bWxzZWNsaWJzIG5vdyBpcyBub3QgcGFydCBvZiB0aGUgdG9vbGtpdCBhbmQgbmVlZCB0byBiZSBpbnN0YWxsZWQgZnJvbSBvcmlnaW5hbCBzb3VyY2UKCnYuMi4yMC4wCiogWyM1ODZdKGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL3B1bGwvNTg2KSBJZFBNZXRhZGF0YVBhcnNlcjo6cGFyc2VSZW1vdGVYTUwgLSBBZGQgYXJndW1lbnQgZm9yIHNldHRpbmcgd2hldGhlciB0byB2YWxpZGF0ZSBwZWVyIFNTTCBjZXJ0aWZpY2F0ZQoqIFsjNTg1XShodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC9wdWxsLzU4NSkgRGVjbGFyZSBjb25kaXRpb25hbCByZXR1cm4gdHlwZXMKKiBNYWtlIFNhbWwyXEF1dGggY2FuIGFjY2VwdCBhIHBhcmFtICRzcFZhbGlkYXRpb25Pbmx5CiogWyM1NzddKGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL3B1bGwvNTc3KSBBbGxvdyBlbXB0eSBOYW1lSUQgdmFsdWUgd2hlbiBubyBzdHJpY3Qgb3Igd2FudE5hbWVJZCBpcyBmYWxzZQoqIFsjNTcwXShodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC9wdWxsLzU3MCkgU3VwcG9ydCBYNTA5IGNlcnQgY29tbWVudHMKKiBbIzU2OV0oaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwvcHVsbC81NjkpIEFkZCBwYXJhbWV0ZXIgdG8gZXhjbHVkZSB2YWxpZFVudGlsIG9uIFNQIE1ldGFkYXRhIFhNTAoqIFsjNTUxXShodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC9wdWxsLzU1MSkgRml4IGNvbXBhdGliaWxpdHkgd2l0aCBwcm94aWVzIHRoYXQgZXh0ZW5kcyBIVFRQX1hfRk9SV0FSREVEX0hPU1QKKiBbIzQ4N10oaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwvaXNzdWVzLzQ4NykgRW5hYmxlIHN0cmljdCBjaGVjayBvbiBpbl9hcnJheSBtZXRob2QKKiBGaXggdHlwb3Mgb24gcmVhZG1lLgoqIFsjNDgwXShodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC9wdWxsLzQ4MCkgRml4IHR5cG8gb24gU1BOYW1lUXVhbGlmaWVyIG1pc21hdGNoCiogQWRkICRzcFZhbGlkYXRpb25Pbmx5IHBhcmFtIHRvIEF1dGgKKiBVcGRhdGUgeG1sc2VjbGlicyAoMy4xLjIgd2l0aG91dCBBRVMtR0NNIGFuZCBPQUVQIHN1cHBvcnQpCiogQWRkIHdhcm5pbmcgYWJvdXQgT3BlbiBSZWRpcmVjdCBhbmQgUmVwbHkgYXR0YWNrcwoqIEFkZCB3YXJuaW5nIGFib3V0IHRoZSB1c2Ugb2YgSWRwTWV0YWRhdGFQYXJzZXIgY2xhc3MuIElmIE1ldGFkYXRhIFVSTHMKICBhcmUgcHJvdmlkZWQgYnkgM3JkIHBhcnRpZXMsIHRoZSBVUkwgaW5wdXRzIE1VU1QgYmUgdmFsaWRhdGVkIHRvIGF2b2lkIGlzc3VlcyBsaWtlIFNTUkYKKiBVcGRhdGUgZGVwZW5kZW5jaWVzCiogRml4IHRlc3QgcGF5bG9hZHMKKiBSZW1vdmUgcmVmZXJlbmNlcyB0byBPbmVMb2dpbi4KCnYuMi4xOS4xCiogWyM0NjddKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9pc3N1ZXMvNDY3KSBGaXggYnVnIG9uIGdldFNlbGZSb3V0ZWRVUkxOb1F1ZXJ5IG1ldGhvZAoKdi4yLjE5LjAKKiBbIzQxMl0oaHR0cHM6Ly9naXRodWIuY29tL29uZWxvZ2luL3BocC1zYW1sL3B1bGwvNDEyKSBFbXB0eSBpbnN0ZWFkIG9mIHVuc2V0IHRoZSAkX1NFU1NJT04gdmFyaWFibGUKKiBbIzQzM10oaHR0cHM6Ly9naXRodWIuY29tL29uZWxvZ2luL3BocC1zYW1sL2lzc3Vlcy80NDMpIEZpeCBJbmNvcnJlY3QgRGVzdGluYXRpb24gaW4gTG9nb3V0UmVzcG9uc2Ugd2hlbiB1c2luZyByZXNwb25zZVVybCAjNDQzCiogQWRkIHN1cHBvcnQgZm9yIFNNQVJUQ0FSRF9QS0kgYW5kIFJTQV9UT0tFTiBBdXRoIENvbnRleHRzCiogU3VwcG9ydCBTdGF0ZW1lbnRzIHdpdGggQXR0cmlidXRlIGVsZW1lbnRzIHdpdGggdGhlIHNhbWUgbmFtZSBlbmFibGluZyB0aGUgYWxsb3dSZXBlYXRBdHRyaWJ1dGVOYW1lIHNldHRpbmcKKiBHZXQgbGliIHBhdGggZGluYW1pY2FsbHkKKiBDaGVjayBmb3IgeDUwOUNlcnQgb2YgdGhlIElkUCB3aGVuIGxvYWRpbmcgc2V0dGluZ3MsIGV2ZW4gaWYgdGhlIHNlY3VyaXR5IGluZGV4IHdhcyBub3QgcHJvdmlkZWQKCnYuMi4xOC4xCiogQWRkIHNldFNjaGVtYXNQYXRoIHRvIEF1dGggY2xhc3MgYW5kIGZpeCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5Cgp2LjIuMTguMAoqIFN1cHBvcnQgcmVqZWN0aW5nIHVuc29saWNpdGVkIFNBTUxSZXNwb25zZXMuCiogU3VwcG9ydCBzdHJpYyBkZXN0aW5hdGlvbiBtYXRjaGluZy4KKiBSZWplY3QgU0FNTFJlc3BvbnNlIGlmIHJlcXVlc3RJRCB3YXMgcHJvdmlkZWQgdG8gdGhlIHZhbGlkb3RyIGJ1dCB0aGUgSW5SZXNwb25zZVRvIGF0dHJpYnV0ZW9mIHRoZSBTQU1MUmVzcG9uc2UgaXMgbWlzc2luZwoqIENoZWNrIGRlc3RpbmF0aW9uIGFnYWluc3QgdGhlIGdldFNlbGZVUkxOb1F1ZXJ5IGFzIHdlbGwgb24gTG9nb3V0UmVxdWVzdCBhbmQgTG9nb3V0UmVzcG9uc2UgYXMgd2UgZG8gb24gUmVzcG9uc2UKKiBJbXByb3ZlIGdldFNlbGZSb3V0ZWRVUkxOb1F1ZXJ5IG1ldGhvZAoqIE9ubHkgYWRkIHJlc3BvbnNlVXJsIHRvIHRoZSBzZXR0aW5ncyBpZiBSZXNwb25zZUxvY2F0aW9uIHByZXNlbnQgaW4gdGhlIElkUE1ldGFkYXRhUGFyc2VyCiogUmVtb3ZlIHVzZSBvZiAkX0dFVCBvbiBzdGF0aWMgbWV0aG9kIHZhbGlkYXRlQmluYXJ5U2lnbgoqIEZpeCBlcnJvciBtZXNzYWdlIHdoZW4gQXNzZXJ0aW9uIGFuZCBOYW1lSWQgYXJlIGJvdGggZW5jcnlwdGVkIChub3Qgc3VwcG9ydGVkKQoKdi4yLjE3LjEKKiBVcGRhdGUgeG1sc2VjbGlicyB0byAzLjAuNAoqIFJlbW92ZSBDb21wYXJpc29uIGF0cmlidXRlIGZyb20gUmVxdWVzdGVkQXV0aG5Db250ZXh0IHdoZW4gc2V0dGluZyBoYXMgZW1wdHkgdmFsdWUKCnYuMi4xNy4wCiogU2V0IHRydWUgYXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHN0cmljdCBzZXR0aW5nCiogU3VwcG9ydCAneDUwOWNlcnQnIGFuZCAncHJpdmF0ZUtleScgb24gc2lnbk1ldGFkYXRhIHNlY3VyaXR5IHNldHRpbmdzCiogUmVsYXggY29tcGFyaXNpb24gb2YgZmFsc2Ugb24gU2lnbk1ldGFkYXRhCiogRml4IENJCgp2LjIuMTYuMAoqIFN1cHBvcnQgU0xPIFJlc3BvbnNlTG9jYXRpb24KKiBbIzM0NF0oaHR0cHM6Ly9naXRodWIuY29tL29uZWxvZ2luL3BocC1zYW1sL2lzc3Vlcy8zNDQpIFJhaXNlIGVycm9ycyBvbiBJZFBNZXRhZGF0YVBhcnNlcjo6cGFyc2VSZW1vdGVYTUwgYW5kIElkUE1ldGFkYXRhUGFyc2VyOjpwYXJzZUZpbGVYTUwKKiBBZGp1c3RlZCBhY3MgZW5kcG9pbnQgdG8gZXh0cmFjdCBOYW1lUXVhbGlmaWVyIGFuZCBTUE5hbWVRdWFsaWZpZXIgZnJvbSBTQU1MUmVzcG9uc2UuIEFkanVzdGVkIHNpbmdsZSBsb2dvdXQgc2VydmljZSB0byBwcm92aWRlIE5hbWVRdWFsaWZpZXIgYW5kIFNQTmFtZVF1YWxpZmllciB0byBsb2dvdXQgbWV0aG9kLiBBZGQgZ2V0TmFtZUlkTmFtZVF1YWxpZmllciB0byBBdXRoIGFuZCBTYW1sUmVzcG9uc2UuIEV4dGVuZCBsb2dvdXQgbWV0aG9kIGZyb20gQXV0aCBhbmQgTG9nb3V0UmVxdWVzdCBjb25zdHJ1Y3RvciB0byBzdXBwb3J0IFNQTmFtZVF1YWxpZmllciBwYXJhbWV0ZXIuIEFsaWduIExvZ291dFJlcXVlc3QgY29uc3RydWN0b3Igd2l0aCBTQU1MIHNwZWNzCiogQWRkIHN1cHBvcnQgZm9yIFN1YmplY3RzIG9uIEF1dGhOUmVxdWVzdHMgYnkgdGhlIG5ldyBwYXJhbWV0ZXIKKiBTZXQgc3RyaWN0PXRydWUgb24gY29uZmlnIGV4YW1wbGVzCgp2LjIuMTUuMAoqIFNlY3VyaXR5IGltcHJvdmVtZW50IHN1Z2dlc3RlZCBieSBOaWxzIEVuZ2VsYmVydHogdG8gcHJldmVudCBERE9TIGJ5IGV4cGFuc2lvbiBvZiBpbnRlcm5hbGx5IGRlZmluZWQgZW50aXRpZXMgKFhFRSkKKiBGaXggYnVnIG9uIHNldHRpbmdzX2V4YW1wbGUucGhwCgp2LjIuMTQuMAoqIEFkZCAgcGFyYW1ldGVyIHRvIHRoZSBkZWNyeXB0RWxlbWVudCBtZXRob2QgdG8gbWFrZSBvcHRpb25hbCB0aGUgZm9ybWF0dGluZwoqIFsjMjgzXShodHRwczovL2dpdGh1Yi5jb20vb25lbG9naW4vcGhwLXNhbWwvcHVsbC8yODMpIE5ldyBtZXRob2Qgb2YgaW1wb3J0aW5nIGEgZGVjcnlwdGVkIGFzc2VydGlvbiBpbnRvIHRoZSBYTUwgZG9jdW1lbnQgdG8gcmVwbGFjZSB0aGUgRW5jcnlwdGVkQXNzZXJ0aW9uLiBGaXggc2lnbmF0dXJlIGlzc3VlcyBvbiBTaWduZWQgRW5jcnlwdGVkIEFzc2VydGlvbnMgd2l0aCBkZWZhdWx0IG5hbWVzcGFjZQoqIEFsbG93IHRoZSBnZXRTUE1ldGFkYXRhKCkgbWV0aG9kIHRvIGFsd2F5cyBpbmNsdWRlIHRoZSBlbmNyeXB0aW9uIEtleSBEZXNjcmlwdG9yCiogQ2hhbmdlIHNvbWUgRmF0YWwgRXJyb3IgdG8gRXhjZXB0aW9ucwoqIFsjMjY1XShodHRwczovL2dpdGh1Yi5jb20vb25lbG9naW4vcGhwLXNhbWwvaXNzdWVzLzI2NSkgU3VwcG9ydCBwYXJhbWV0ZXJzIGF0IGdldFNQTWV0YWRhdGEgbWV0aG9kCiogQXZvaWQgY2FsbGluZyBzdGF0aWMgbWV0aG9kIHVzaW5nIHRoaXMKCnYuMi4xMy4wCiogVXBkYXRlIHhtbHNlY2xpYnMgd2l0aCBzb21lIGZpeGVzLgoqIEFkZCBleHRyYSBwcm90ZWN0aW9uIHZlcmlmeWluZyB0aGUgU2lnbmF0dXJlIGFsZ29yaXRobSB1c2VkIG9uIFNpZ25lZEluZm8gZWxlbWVudCwgbm90IG9ubHkgcmVseSBvbiB0aGUgeG1sc2VjbGlicyB2ZXJpZnkgLyB2ZXJpZnlTaWduYXR1cmUgbWV0aG9kcy4KKiBBZGQgZ2V0QXR0cmlidXRlc1dpdGhGcmllbmRseU5hbWUgbWV0aG9kIHdoaWNoIHJldHVybnMgdGhlIHNldCBvZiBTQU1MIGF0dHJpYnV0ZXMgaW5kZXhlZCBieSBGcmllbmRseU5hbWUKKiBGaXggYnVnIG9uIHBhcnNlUmVtb3RlWE1MIGFuZCBwYXJzZUZpbGVYTUwuIEludGVybmFsIGNhbGxzIHRvIHBhcnNlWE1MIG1pc3NlZCB0aGUgZGVzaXJlZE5hbWVJZEZvcm1hdCBwYXJhbWV0ZXIKCnYuMi4xMi4wCiogSW1wcm92ZSBUaW1lIG1hbmFnZW1lbnQuIFVzZSBEYXRlVGltZS9EYXRlVGltZVpvbmUgY2xhc3Nlcy4KKiBFc2NhcGUgZXJyb3IgbWVzc2FnZXMgaW4gZGVidWcgbW9kZQoqIEltcHJvdmUgcGhwZG9jCiogQWRkIGFuIGV4dHJhIGZpbHRlciB0byB0aGUgdXJsIHRvIGJlIHVzZWQgb24gcmVkaXJlY3Rpb24KCiogWyMyNDJdKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9wdWxsLzI0MikgRG9jdW1lbnQgdGhhdCBTSEEtMSBtdXN0IG5vdCBiZSB1c2VkCiogWyMyNTBdKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9wdWxsLzI1MCkgRml4ZWQgaXNzdWUgd2l0aCBJZFBNZXRhZGF0YVBhcnNlciBvbmx5IGtlZXBpbmcgMSBjZXJ0aWZpY2F0ZSB3aGVuIG11bHRpcGxlIGNlcnRpZmljYXRlcyBvZiBhIHNpbmdsZSB0eXBlIHdlcmUgcHJvdmlkZWQuCiogWyMyNjNdKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9pc3N1ZXMvMjYzKSBGaXggaW5jb21wYXRpYmlsaXR5IHdpdGggQURGUyBvbiBTTE8uIFdoZW4gb24gcGhwIHNhbWwgc2V0dGluZ3MgTmFtZUlEIEZvcm1hdCBpcyBzZXQgYXMgdW5zcGVjaWZpZWQgYnV0IHRoZSBTQU1MUmVzcG9uc2UgaGFzIG5vIE5hbWVJRCBGb3JtYXQsIG5vIE5hbWVJRCBGb3JtYXQgc2hvdWxkIGJlIHNwZWNpZmllZCBvbiBMb2dvdXRSZXF1ZXN0LgoKdi4yLjExLjAKKiBbIzIzNl0oaHR0cHM6Ly9naXRodWIuY29tL29uZWxvZ2luL3BocC1zYW1sL3B1bGwvMjM2KSBFeGNsdWRlIHVubmVjZXNzYXJ5IGZpbGVzIGZyb20gQ29tcG9zZXIgcHJvZHVjdGlvbiBkb3dubG9hZHMKKiBbIzIyNl0oaHR0cHM6Ly9naXRodWIuY29tL29uZWxvZ2luL3BocC1zYW1sL3B1bGwvMjI2KSBBZGQgcG9zc2liaWxpdHkgdG8gaGFuZGxlIG5hbWVJZCBOYW1lUXVhbGlmaWVyIGF0dHJpYnV0ZSBpbiBTTE8gUmVxdWVzdAoqIEltcHJvdmUgbG9nb3V0IGRvY3VtZW50YXRpb24gb24gUmVhZG1lLgoqIEltcHJvdmUgbXVsdGktY2VydGlmaWNhdGUgc3VwcG9ydAoKdi4yLjEwLjcKKiBGaXggSWRQTWV0YWRhdGFQYXJzZXIuIFRoZSBTaW5nbGVMb2dvdXRTZXJ2aWNlIHJldHJpZXZlZCBtZXRob2Qgd2FzIHdyb25nCiogWyMyMDFdKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9pc3N1ZXMvMjAxKSBGaXggaXNzdWVzIHdpdGggU1AgZW50aXR5X2lkLCBhY3MgdXJsIGFuZCBzbHMgdXJsIHRoYXQgY29udGFpbnMgJgoKdi4yLjEwLjYKKiBbIzIwNl0oaHR0cHM6Ly9naXRodWIuY29tL29uZWxvZ2luL3BocC1zYW1sL3B1bGwvMjA2KUJlIGFibGUgdG8gcmVnaXN0ZXIgZnV0dXJlIFNQIHg1MDljZXJ0IG9uIHRoZSBzZXR0aW5ncyBhbmQgcHVibGlzaCBpdCBvbiBTUCBtZXRhZGF0YQoqIFsjMjA2XShodHRwczovL2dpdGh1Yi5jb20vb25lbG9naW4vcGhwLXNhbWwvcHVsbC8yMDYpIEJlIGFibGUgdG8gcmVnaXN0ZXIgbW9yZSB0aGFuIDEgSWRlbnRpdHkgUHJvdmlkZXIgeDUwOWNlcnQsIGxpbmtlZCB3aXRoIGFuIHNwZWNpZmljIHVzZSAoc2lnbmluZyBvciBlbmNyeXB0aW9uKQoqIFsjMjA2XShodHRwczovL2dpdGh1Yi5jb20vb25lbG9naW4vcGhwLXNhbWwvcHVsbC8yMDYpIFN1cHBvcnQgdGhlIGFiaWxpdHkgdG8gcGFyc2UgSWRQIFhNTCBtZXRhZGF0YSAocmVtb3RlIHVybCBvciBmaWxlKSBhbmQgYmUgYWJsZSB0byBpbmplY3QgdGhlIGRhdGEgb2J0YWluZWQgb24gdGhlIHNldHRpbmdzLgoKdi4yLjEwLjUKKiBCZSBhYmxlIHRvIGdldCBhdCB0aGUgYXV0aCBvYmplY3QgdGhlIGxhc3QgcHJvY2Vzc2VkIElECiogSW1wcm92ZSBOYW1lSUQgRm9ybWF0IHN1cHBvcnQKKiBSZXNldCBlcnJvclJlYXNvbiBhdHRyaWJ1dGUgb2YgdGhlIGF1dGggb2JqZWN0IGFmdGVyIGVhY2ggUHJvY2VzcyBtZXRob2QKKiBWYWxpZGF0ZSBzZXJpYWwgbnVtYmVyIGFzIHN0cmluZyB0byB3b3JrIGFyb3VuZCBsaWJ4bWwyIGxpbWl0YXRpb24KKiBNYWtlIHRoZSBJc3N1ZXIgb24gdGhlIFJlc3BvbnNlIE9wdGlvbmFsCgp2LjIuMTAuNAoqIFsrXShodHRwczovL2dpdGh1Yi5jb20vb25lbG9naW4vcGhwLXNhbWwvY29tbWl0Lzk0OTM1OWY1Y2FkNWUxZDA4NWM0ZTU0NDdkOWFhOGY0OWE2ZTgyYTEpIFNlY3VyaXR5IHVwZGF0ZSBmb3Igc2lnbmF0dXJlIHZhbGlkYXRpb24gb24gTG9nb3V0UmVxdWVzdC9Mb2dvdXRSZXNwb25zZQoqIFsjMTkyXShodHRwczovL2dpdGh1Yi5jb20vb25lbG9naW4vcGhwLXNhbWwvcHVsbC8xOTIpIEFkZGVkIGFiaWxpdHkgdG8gY29uZmlndXJlIERpZ2VzdEFsZ29yaXRobSBpbiBzZXR0aW5ncwoqIFsjMTgzXShodHRwczovL2dpdGh1Yi5jb20vb25lbG9naW4vcGhwLXNhbWwvcHVsbC8xODMpIEZpeCBzdHJwb3MgYnVnIHdoZW4gZGVjcnlwdGluZyBhc3NlcnRpb25zCiogWyMxODZdKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9wdWxsLzE4NikgSW1wcm92ZSBpbmZvIG9uIGVudGl0eUlkIHZhbGlkYXRpb24gRXhjZXB0aW9uCiogWyMxODhdKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9wdWxsLzE4OCkgRml4ZWQgaXNzdWUgd2l0aCB1bmRlZmluZWQgY29uc3RhbnQgb2YgVU5FWFBFQ1RFRF9TSUdORURfRUxFTUVOVAoqIFJlYWQgQUNTIGJpbmRpbmcgb24gQXV0aE5SZXF1ZXN0IGJ1aWxkZXIgZnJvbSBzZXR0aW5ncwoqIEJlIGFibGUgdG8gcmVsYXggRGVzdGluYXRpb24gdmFsaWRhdGlvbiBvbiBTQU1MUmVzcG9uc2VzIGFuZCBsZXQgdGhpcwogIGF0dHJpYnV0ZSB0byBiZSBlbXB0eSB3aXRoIHRoZSAncmVsYXhEZXN0aW5hdGlvblZhbGlkYXRpb24nIHNldHRpbmcKCnYuMi4xMC4zCiogSW1wbGVtZW50IGEgbW9yZSBzcGVjaWZpYyBleGNlcHRpb24gY2xhc3MgZm9yIGhhbmRsaW5nIHNvbWUgdmFsaWRhdGlvbiBlcnJvcnMKKiBNaW5vciBjaGFuZ2VzIG9uIHRpbWUgdmFsaWRhdGlvbi9leGNlcHRpb25zCiogQWRkIGhvb2tzIHRvIHJldHJpZXZlIGxhc3Qtc2VudCBhbmQgbGFzdC1yZWNlaXZlZCByZXF1ZXN0cyBhbmQgcmVzcG9uc2VzCiogSW1wcm92ZS9GaXggdGVzdHMKKiBBZGQgRGlnZXN0QWxnb3JpdGhtIHN1cHBvcnQgb24gYWRkU2lnbgoqIFsjMTc3XShodHRwczovL2dpdGh1Yi5jb20vb25lbG9naW4vcGhwLXNhbWwvcHVsbC8xNzcpIEFkZCBlcnJvciBtZXNzYWdlIGZvciBiYWQgT25lTG9naW5fU2FtbDJfU2V0dGluZ3MgYXJndW1lbnQKCnYuMi4xMC4yCiogWyMxNzVdKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9wdWxsLzE3NSkgQWxsb3cgb3ZlcnJpZGluZyBvZiBob3N0LCBwb3J0LCBwcm90b2NvbCBhbmQgdXJsIHBhdGggZm9yIFVSTCBidWlsZGluZwoqIFsjMTczXShodHRwczovL2dpdGh1Yi5jb20vb25lbG9naW4vcGhwLXNhbWwvcHVsbC8xNzMpIFByb3ZpZGUgYmV0dGVyIHN1cHBvcnQgdG8gTmFtZUlkRm9ybWF0CiogRml4IGFub3RoZXIgaXNzdWUgb24gQXNzZXJ0aW9uIFNpZ25hdHVyZSB2YWxpZGF0aW9uIHdoZW4gdGhlIGFzc2VydGlvbiBjb250YWlucyBubyBuYW1lc3BhY2UsIGNvbnRhaW5lciBoYXMgc2FtbDIgbmFtZXNwYWNlIGFuZCBpdCB3YXMgZW5jcnlwdGVkCgp2LjIuMTAuMQoqIEZpeCBlcnJvciBtZXNzYWdlIG9uIFNpZ25NZXRhZGF0YSBwcm9jZXNzCiogRml4IGlzc3VlIG9uIEFzc2VydGlvbiBTaWduYXR1cmUgdmFsaWRhdGlvbiB3aGVuIHRoZSBhc3NlcnRpb24gY29udGFpbnMgbm8gbmFtZXNwYWNlIGFuZCBpdCB3YXMgZW5jcnlwdGVkCgp2LjIuMTAuMAoqIFNldmVyYWwgc2VjdXJpdHkgaW1wcm92ZW1lbnRzOgogICogQ29uZGl0aW9ucyBlbGVtZW50IHJlcXVpcmVkIGFuZCB1bmlxdWUuCiAgKiBBdXRoblN0YXRlbWVudCBlbGVtZW50IHJlcXVpcmVkIGFuZCB1bmlxdWUuCiAgKiBTUE5hbWVRdWFsaWZpZXIgbXVzdCBtYXRoIHRoZSBTUCBFbnRpdHlJRAogICogUmVqZWN0IHNhbWw6QXR0cmlidXRlIGVsZW1lbnQgd2l0aCBzYW1lIOKAnE5hbWXigJ0gYXR0cmlidXRlCiAgKiBSZWplY3QgZW1wdHkgbmFtZUlECiAgKiBSZXF1aXJlIElzc3VlciBlbGVtZW50LiAoTXVzdCBtYXRjaCBJZFAgRW50aXR5SUQpLgogICogRGVzdGluYXRpb24gdmFsdWUgY2FuJ3QgYmUgYmxhbmsgKGlmIHByZXNlbnQgbXVzdCBtYXRjaCBBQ1MgVVJMKS4KICAqIENoZWNrIHRoYXQgdGhlIEVuY3J5cHRlZEFzc2VydGlvbiBlbGVtZW50IG9ubHkgY29udGFpbnMgMSBBc3NlcnRpb24gZWxlbWVudC4KKiBJbXByb3ZlIFNpZ25hdHVyZSB2YWxpZGF0aW9uIHByb2Nlc3MKKiBBdHRyaWJ1dGVDb25zdW1pbmdTZXJ2aWNlIHN1cHBvcnQKKiBTdXBwb3J0IGxvd2VyY2FzZSBVcmxlbmNvZGluZyAoQURGUyBjb21wYXRpYmlsaXR5KS4KKiBbIzE1NF0oaHR0cHM6Ly9naXRodWIuY29tL29uZWxvZ2luL3BocC1zYW1sL3B1bGwvMTU0KSBnZXRTZWxmSG9zdCBubyBsb25nZXIgcmV0dXJucyBhIHBvcnQgbnVtYmVyCiogWyMxNTZdKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9wdWxsLzE1NikgVXNlIGNvcnJlY3QgaG9zdCBvbiByZXNwb25zZSBkZXN0aW5hdGlvbiBmYWxsYmFjayBjaGVjawoqIFsjMTU4XShodHRwczovL2dpdGh1Yi5jb20vb25lbG9naW4vcGhwLXNhbWwvcHVsbC8xNTgpIE5FVyBDb250cm9sIHVzYWdlIG9mIFgtRm9yd2FyZGVkLSogaGVhZGVycwoqIEZpeCBpc3N1ZSB3aXRoIGJ1aWxkUmVxdWVzdFNpZ25hdHVyZS4gQWRkZWQgUmVsYXlTdGF0ZSB0byB0aGUgU2lnblF1ZXJ5IG9ubHkgaWYgaXMgbm90IG51bGwuCiogQWRkIFNpZ25hdHVyZSBXcmFwcGluZyBwcmV2ZW50aW9uIFRlc3QKKiBJbXByb3ZlIF9kZWNyeXB0QXNzZXJ0aW9uIGluIG9yZGVyIHRvIHRha2UgY2FyZSBvZiBBc3NlcnRpb25zIHdpdGggcHJvYmxlbXMgd2l0aCBuYW1lc3BhY2VzCiogSW1wcm92ZSBkb2N1bWVudGF0aW9uCgp2LjIuOS4xCi4uLi4uLi4KKiBbMTM0XShodHRwczovL2dpdGh1Yi5jb20vb25lbG9naW4vcGhwLXNhbWwvcHVsbC8xMzQpIFBIUDcgcHJvZHVjdGlvbiBzZXR0aW5ncyBjb21waWxlcyBvdXQgYXNzZXJ0KCksIHRocm93IGFuIGV4Y2VwdGlvbiBleHBsaWNpdGx5CiogWzEzMl0oaHR0cHM6Ly9naXRodWIuY29tL29uZWxvZ2luL3BocC1zYW1sL3B1bGwvMTMyKSBBZGQgbm90ZSBmb3IgIndhbnRBc3NlcnRpb25zRW5jcnlwdGVkIgoqIFVwZGF0ZSBjb3B5cmlnaHQgb24gTElDRU5TRQoKdi4yLjkuMAotLS0tLS0tCiogQ2hhbmdlIHRoZSBkZWNyeXB0IGFzc2VydGlvbiBwcm9jZXNzLgoqIEFkZCAyIGV4dHJhIHZhbGlkYXRpb25zIHRvIHByZXZlbnQgU2lnbmF0dXJlIHdyYXBwaW5nIGF0dGFja3MuCiogUmVtb3ZlIHJlZmVyZW5jZSB0byB3cm9uZyBOYW1lSURGb3JtYXQ6IHVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpuYW1laWQtZm9ybWF0OnVuc3BlY2lmaWVkIHNob3VsZCBiZSB1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoxLjE6bmFtZWlkLWZvcm1hdDp1bnNwZWNpZmllZAoqIFsxMjhdKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9wdWxsLzEyOCkgVGVzdCBwaHA3IGFuZCB1cGdyYWRlIHBocHVuaXQKKiBVcGRhdGUgUmVhZG1lIHdpdGggbW9yZSBkZXNjcmlwdGl2ZSByZXF1ZXN0ZWRBdXRobkNvbnRleHQgZGVzY3JpcHRpb24gYW5kIFNlY3VyaXR5IEd1aWRlbGluZXMKCnYuMi44LjAKLS0tLS0tLQoqIE1ha2UgTmFtZUlEUG9saWN5IG9mIEF1dGhOUmVxdWVzdCBvcHRpb25hbAoqIE1ha2UgbmFtZUlEIHJlcXVpcmVtZW50IG9uIFNBTUxSZXNwb25zZSBvcHRpb25hbAoqIEZpeCBlbXB0eSBVUkkgc3VwcG9ydAoqIFN5bW1ldHJpYyBlbmNyeXB0aW9uIGtleSBzdXBwb3J0CiogQWRkIG1vcmUgQXV0aCBDb250ZXh0IG9wdGlvbnMgdG8gdGhlIGNvbnN0YW50IGNsYXNzCiogRml4IERTQV9TSEExIGNvbnN0YW50IG9uIHhtbHNlY2xpYnMKKiBTZXQgbm9uZSByZXF1ZXN0ZWRBdXRobkNvbnRleHQgYXMgZGVmYXVsdCBiZWhhdmlvdXIKKiBVcGRhdGUgeG1sc2VjbGlicyBsaWIKKiBJbXByb3ZlIGZvcm1hdFByaXZhdGVLZXkgbWV0aG9kCiogRml4IGJ1ZyB3aGVuIHNpZ25pbmcgbWV0YWRhdGEsIHRoZSBTaWduYXR1cmVNZXRob2Qgd2FzIG5vdCBwcm92aWRlZAoqIEZpeCBnZXR0ZXIgZm9yIGxhc3RSZXF1ZXN0SUQgcGFyYW1ldGVyIGluIE9uZUxvZ2luX1NhbWwyX0F1dGggY2xhc3MKKiBBZGQgJHdhbnRFbmNyeXB0ZWQgcGFyYW1ldGVyIG9uIGFkZFg1MDlLZXlEZXNjcmlwdG9ycyBtZXRob2QgdGhhdCB3aWxsIGFsbG93IHRvIHNldCBLZXlEZXNjcmlwdG9yW3VzZT0nZW5jcnlwdGlvbiddIGlmIHdhbnROYW1lSWRFbmNyeXB0ZWQgb3Igd2FudEFzc2VydGlvbnNFbmNyeXB0ZWQgZW5hYmxlZAoqIEFkZCAkc3RheSBwYXJhbWV0ZXIgb24gcmVkaXJlY3RUbyBtZXRob2QuIChsb2dpbi9sb2dvdXQgc3VwcG9ydHMgJHN0YXkgYnV0IEkgZm9yZ290IGFkZCB0aGlzIG9uIHByZXZpb3VzIDIuNy4wIHZlcnNpb24pCiogSW1wcm92ZSBjb2RlIHN0eWxlCgp2LjIuNy4wCi0tLS0tLS0KKiBUcmltIGFjcywgc2xvIGFuZCBpc3N1ZXIgdXJscy4KKiBGaXggUEhQIDcgZXJyb3IgKHVzZWQgY29udGludWUgb3V0c2lkZSBhIGxvb3Avc3dpdGNoKS4KKiBGaXggYnVnIG9uIG9yZ2FuaXphdGlvbiBlbGVtZW50IG9mIHRoZSBTUCBtZXRhZGF0YSBidWlsZGVyLgoqIEZpeCB0eXBvcyBvbiBkb2N1bWVudGF0aW9uLiBGaXggQUxPV0VEIE1pc3NwZWxsLgoqIEJlIGFibGUgdG8gZXh0cmFjdCBSZXF1ZXN0SUQuIEFkZCBSZXF1ZXN0SUQgdmFsaWRhdGlvbiBvbiBkZW1vMS4KKiBBZGQgJHN0YXkgcGFyYW1ldGVyIHRvIGxvZ2luLCBsb2dvdXQgYW5kIHByb2Nlc3NTTE8gbWV0aG9kLgoKdi4yLjYuMQotLS0tLS0tCiogRml4IGJ1ZyBvbiBjYWNoZUR1cmF0aW9uIG9mIHRoZSBNZXRhZGF0YSBYTUwgZ2VuZXJhdGVkLgoqIE1ha2UgU1BOYW1lUXVhbGlmaWVyIG9wdGlvbmFsIG9uIHRoZSBnZW5lcmF0ZU5hbWVJZCBtZXRob2QuIEF2b2lkIHRoZSB1c2Ugb2YgU1BOYW1lUXVhbGlmaWVyIHdoZW4gZ2VuZXJhdGluZyB0aGUgTmFtZUlEIG9uIHRoZSBMb2dvdXRSZXF1ZXN0IGJ1aWxkZXIuCiogQWxsb3dzIHRoZSBhdXRobiBjb21wYXJpc29uIGF0dHJpYnV0ZSB0byBiZSBzZXQgdmlhIGNvbmZpZy4KKiBSZXRyaWV2ZSBTZXNzaW9uIFRpbWVvdXQgYWZ0ZXIgcHJvY2Vzc1Jlc3BvbnNlIHdpdGggZ2V0U2Vzc2lvbkV4cGlyYXRpb24oKS4KKiBJbXByb3ZlIHJlYWRtZSByZWFkYWJpbGl0eS4KKiBBbGxvdyBzaW5nbGUgbG9nIG91dCB0byB3b3JrIGZvciBhcHBsaWNhdGlvbnMgbm90IGxldmVyYWdpbmcgcGhwIHNlc3Npb25fc3RhcnQuIEFkZGVkIGEgY2FsbGJhY2sgcGFyYW1ldGVyIGluIG9yZGVyIHRvIGNsb3NlIHRoZSBzZXNzaW9uIGF0IHByb2Nlc3NTTE8uCgp2LjIuNi4wCi0tLS0tLS0KKiBTZXQgTkFNRUlEX1VOU1BFQ0lGSUVEIGFzIGRlZmF1bHQgTmFtZUlERm9ybWF0IHRvIHByZXZlbnQgY29uZmxpY3RzIHdpdGggSWRQcyB0aGF0IGRvbid0IHN1cHBvcnQgTkFNRUlEX1BFUlNJU1RFTlQuCiogTm93IHRoZSBTUCBpcyBhYmxlIHRvIHNlbGVjdCB0aGUgYWxnb3JpdGhtIHRvIGJlIHVzZWQgb24gc2lnbmF0dXJlcyAoRFNBX1NIQTEsIFJTQV9TSEExLCBSU0FfU0hBMjU2LCBSU0FfU0hBMzg0LCBSU0FfU0hBNTEyKS4KKiBDaGFuZ2UgdmlzaWJpbGl0eSBvZiBfZGVjcnlwdEFzc2VydGlvbiB0byBwcm90ZWN0ZWQuCiogVXBkYXRlIHhtbHNlY2xpYnMgbGlicmFyeS4KKiBIYW5kbGUgdmFsaWQgYnV0IHVuY29tbW9uIGRzaWcgYmxvY2sgd2l0aCBubyBVUkkgaW4gdGhlIHJlZmVyZW5jZS4KKiBsb2dpbiwgbG9nb3V0IGFuZCBwcm9jZXNzU0xPIG5vdyByZXR1cm4gLT5yZWRpcmVjdFRvIGluc3RlYWQgb2YganVzdCBjYWxsIGl0LgoqIFNwbGl0IHRoZSBzZXR0aW5nIGNoZWNrIG1ldGhvZHMuIE5vdyAxIG1ldGhvZCBmb3IgSWRQIHNldHRpbmdzIGFuZCBvdGhlciBmb3IgU1Agc2V0dGluZ3MuCiogTGV0IHRoZSBzZXR0aW5nIG9iamVjdCB0byBhdm9pZCB0aGUgSWRQIHNldHRpbmcgY2hlY2suIHJlcXVpcmVkIGlmIHdlIHdhbnQgdG8gcHVibGlzaCBTUCBTQU1MIE1ldGFkYXRhIHdoZW4gdGhlIElkUCBkYXRhIGlzIHN0aWxsIG5vdCBwcm92aWRlZC4KCnYuMi41LjAKLS0tLS0tLQoqIERvIGFjY2Vzc2libGUgdGhlIElEIG9mIHRoZSBvYmplY3QgTG9nb3V0IFJlcXVlc3QgKGlkIGF0dHJpYnV0ZSkuCiogQWRkIG5vdGUgYWJvdXQgdGhlIGZhY3QgdGhhdCBQSFAgNS4zIGlzIHVuc3VwcG9ydGVkLgoqIEFkZCBmaW5nZXJwcmludCBhbGdvcml0aG0gc3VwcG9ydC4KKiBBZGQgZGVwZW5kZW5jZXMgdG8gY29tcG9zZXIuCgp2LjIuNC4wCi0tLS0tLS0KKiBGaXggd3JvbmcgZWxlbWVudCBvcmRlciBpbiBnZW5lcmF0ZWQgbWV0YWRhdGEuCiogQWRkZWQgU0xPIHdpdGggbmFtZUlEIGFuZCBTZXNzaW9uSW5kZXggaW4gZGVtbzEuCiogSW1wcm92ZSBpc0hUVFBTIG1ldGhvZCBpbiBvcmRlciB0byBzdXBwb3J0IEhUVFBfWF9GT1JXQVJERURfUE9SVC4KKiBTZXQgb3B0aW9uYWwgdGhlIFhNTHZhbGlkYXRpb24gKGVuYWJsZS9kaXNhYmxlIGl0IHdpdGggd2FudFhNTFZhbGlkYXRpb24gc2VjdXJpdHkgc2V0dGluZykuCgp2LjIuMy4wCi0tLS0tLS0KKiBSZXNvbHZlIG5hbWVzcGFjZSBwcm9ibGVtLiBTb21lIElkUHMgdXNlcyBzYW1sMnA6UmVzcG9uc2UgYW5kIHNhbWwyOkFzc2VydGlvbiBpbnN0ZWFkIG9mIHNhbWxwOlJlc3BvbnNlIHNhbWw6QXNzZXJ0aW9uLgoqIEltcHJvdmUgdGVzdCBhbmQgZG9jdW1lbnRhdGlvbi4KKiBJbXByb3ZlIEFERlMgY29tcGF0aWJpbGl0eS4KKiBSZW1vdmUgdW5uZWNlc3NhcnkgWFNEcyBmaWxlcy4KKiBNYWtlIGF2YWlsYWJsZSB0aGUgcmVhc29uIGZvciB0aGUgc2FtbCBtZXNzYWdlIGludmFsaWRhdGlvbi4KKiBBZGRpbmcgYWJpbGl0eSB0byBzZXQgaWRwIGNlcnQgb25jZSB0aGUgU2V0dGluZyBvYmplY3QgaW5pdGlhbGl6ZWQuCiogRml4IHN0YXR1cyBpbmZvIGlzc3VlLgoqIFJlamVjdCBTQU1MIFJlc3BvbnNlIGlmIG5vdCBzaWduZWQgYW5kIHN0cmljdCA9IGZhbHNlLgoqIFN1cHBvcnQgTmFtZUlkIGFuZCBTZXNzaW9uSW5kZXggaW4gTG9nb3V0UmVxdWVzdC4KKiBBZGQgRm9yY2VBdWggYW5kIElzUGFzc2l2ZSBzdXBwb3J0LgoKdi4yLjIuMAotLS0tLS0tCiogRml4IGJ1ZyB3aXRoIEVuY3J5cHRlZCBuYW1lSUQgb24gTG9nb3V0UmVxdWVzdC4KKiBGaXhlZCB1c2FiaWxpdHkgYnVnLiBTUCB3aWxsIGluZm9ybSBhYm91dCBBdXRoRmFpbCBzdGF0dXMgYWZ0ZXIgcHJvY2VzcyBhIFJlc3BvbnNlLgoqIEFkZGVkIFNlc3Npb25JbmRleCBzdXBwb3J0IG9uIExvZ291dFJlcXVlc3QsIGFuZCBrbm93IGlzIGFjY2Vzc2libGUgZnJvbSB0aGUgQXV0aCBjbGFzcy4KKiBMb2dvdXRSZXF1ZXN0IGFuZCBMb2dvdXRSZXNwb25zZSBjbGFzc2VzIG5vdyBhY2NlcHQgbm9uIGRlZmxhdGVkIHhtbC4KKiBJbXByb3ZlZCB0aGUgWE1MIG1ldGFkYXRhLyBEZWNyeXB0ZWQgQXNzZXJ0aW9uIG91dHB1dC4gKHByZXR0eXByaW50KS4KKiBGaXggYnVnIGluIGZvcm1hdFByaXZhdGVLZXkgbWV0aG9kLCB0aGUga2V5IGNvdWxkIGJlIG5vdCBSU0EuCiogRXhwbGljaXQgd2FybmluZyBtZXNzYWdlIGZvciBzaWduZWQgZWxlbWVudCBwcm9ibGVtLgoqIERlY3J5cHQgbWV0aG9kIGltcHJvdmVkLgoqIFN1cHBvcnQgbW9yZSBhbGdvcml0aG0gYXQgdGhlIFNpZ0FsZyBpbiB0aGUgU2lnbmVkIExvZ291dFJlcXVlc3RzIGFuZCBMb2dvdXRSZXNwb25zZXMKKiBBdXRoTlJlcXVlc3Qgbm93IHN0b3JlcyBJRCAoaXQgY2FuIGJlIHJldHJpZXZlZCBsYXRlcikuCiogRml4ZWQgYSB0eXBvIG9uIHRoZSAnTmFtZUlkUG9saWN5JyBhdHRyaWJ1dGUgdGhhdCBhcHBlYXJlZCBhdCB0aGUgUkVBRE1FIGFuZCBzZXR0aW5nc19leGFtcGxlIGZpbGUuCgoKdi4yLjEuMAotLS0tLS0tCgoqIFRoZSBpc1ZhbGlkIG1ldGhvZCBvZiB0aGUgTG9nb3V0IFJlcXVlc3QgaXMgbm93IG5vbi1zdGF0aWMuIChhZmZlY3RzIHByb2Nlc3NTTE8gbWV0aG9kIG9mIEF1dGgucGhwKS4KKiBMb2dvdXQgUmVxdWVzdCBjb25zdHJ1Y3RvciBub3cgYWNjZXB0cyBlbmNvZGVkIGxvZ291dCByZXF1ZXN0cy4KKiBOb3cgYWZ0ZXIgdmFsaWRhdGUgYSBtZXNzYWdlLCBpZiBmYWlscyBhIG1ldGhvZCBnZXRFcnJvciBvZiB0aGUgb2JqZWN0IHdpbGwgcmV0dXJuIHRoZSBjYXVzZS4KKiBGaXggdHlwb3MuCiogQWRkZWQgZXh0cmEgcGFyYW1ldGVycyBvcHRpb24gdG8gbG9naW4gYW5kIGxvZ291dCBtZXRob2RzLgoqIEltcHJvdmUgVGVzdCAobmV3IHRlc3QsIHVzZSB0aGUgbmV3IGdldEVycm9yIG1ldGhvZCBmb3IgdGVzdGluZykuCiogQnVnZml4IG5hbWVzcGFjZSBwcm9ibGVtIHdoZW4gZ2V0dGluZyBBdHRyaWJ1dGVzLgoKCnYuMi4wLjAKLS0tLS0tLQoKKiBOZXcgUEhQIFNBTUwgVG9vbGtpdCAoU0xPLCBTaWduLCBFbmNyeXB0YXRpb24pLgoKCnYuMS4wLjAKLS0tLS0tLQoKKiBPbGQgUEhQIFNBTUwgVG9vbGtpdC4K]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAib25lbG9naW4vcGhwLXNhbWwiLAogICAgImRlc2NyaXB0aW9uIjogIlBIUCBTQU1MIFRvb2xraXQiLAogICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbCIsCiAgICAia2V5d29yZHMiOiBbInNhbWwiLCAic2FtbDIiLCAic3NvIiwgImZlZGVyYXRpb24iLCAiaWRlbnRpdHkiXSwKICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICJPbmVMb2dpblxcIjogInNyYy8iCiAgICAgICAgfQogICAgfSwKICAgICJzdXBwb3J0IjogewogICAgICAgICJlbWFpbCI6ICJzaXh0by5tYXJ0aW4uZ2FyY2lhQGdtYWlsLmNvbSIsCiAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vb25lbG9naW4vU0FNTC1Ub29sa2l0cy9pc3N1ZXMiLAogICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL29uZWxvZ2luL1NBTUwtVG9vbGtpdHMvIgogICAgfSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiOiAiPj03LjMiLAogICAgICAgICJyb2JyaWNoYXJkcy94bWxzZWNsaWJzIjogIl4zLjEuNSIKICAgIH0sCiAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeOS41IiwKICAgICAgICAicGhwLWNvdmVyYWxscy9waHAtY292ZXJhbGxzIjogIl4yLjAiLAogICAgICAgICJzZWJhc3RpYW4vcGhwY3BkIjogIl40LjAgfHwgXjUuMCB8fCBeNi4wICIsCiAgICAgICAgInBocGxvYy9waHBsb2MiOiAiXjQuMCB8fCBeNS4wIHx8IF42LjAgfHwgXjcuMCIsCiAgICAgICAgInBkZXBlbmQvcGRlcGVuZCI6ICJeMi44LjAiLAogICAgICAgICJzcXVpemxhYnMvcGhwX2NvZGVzbmlmZmVyIjogIl4zLjUuOCIKICAgIH0sCiAgICAiY29uZmlnIjogewogICAgICAgICJwbGF0Zm9ybSI6IHsKICAgICAgICAgICAgInBocCI6ICI3LjMuMCIKICAgICAgICB9LAogICAgICAgICJvcHRpbWl6ZS1hdXRvbG9hZGVyIjogdHJ1ZSwKICAgICAgICAic29ydC1wYWNrYWdlcyI6IHRydWUKICAgIH0sCiAgICAic3VnZ2VzdCI6IHsKICAgICAgICAiZXh0LW9wZW5zc2wiOiAiSW5zdGFsbCBvcGVuc3NsIGxpYiBpbiBvcmRlciB0byBoYW5kbGUgd2l0aCB4NTA5IGNlcnRzIChyZXF1aXJlIHRvIHN1cHBvcnQgc2lnbiBhbmQgZW5jcnlwdGlvbikiLAogICAgICAgICJleHQtY3VybCI6ICJJbnN0YWxsIGN1cmwgbGliIHRvIGJlIGFibGUgdG8gdXNlIHRoZSBJZFBNZXRhZGF0YVBhcnNlciBmb3IgcGFyc2luZyByZW1vdGUgWE1McyIsCiAgICAgICAgImV4dC1kb20iOiAiSW5zdGFsbCB4bWwgbGliIiwKICAgICAgICAiZXh0LXpsaWIiOiAiSW5zdGFsbCB6bGliIgogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDEwLTIwMjIgT25lTG9naW4sIEluYy4KQ29weXJpZ2h0IChjKSAyMDIzIElBTSBEaWdpdGFsIFNlcnZpY2VzLCBTTC4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCm9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCmZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCmNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQpTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZwpjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCk9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECk5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCkhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLApXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgpPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/phpunit.xml</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIj8+CjxwaHB1bml0IHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIGJvb3RzdHJhcD0idGVzdHMvYm9vdHN0cmFwLnBocCIgY29sb3JzPSJ0cnVlIiB4c2k6bm9OYW1lc3BhY2VTY2hlbWFMb2NhdGlvbj0iaHR0cHM6Ly9zY2hlbWEucGhwdW5pdC5kZS85LjMvcGhwdW5pdC54c2QiIHZlcmJvc2U9InRydWUiPgogIDxjb3ZlcmFnZSBwcm9jZXNzVW5jb3ZlcmVkRmlsZXM9InRydWUiPgogICAgPGluY2x1ZGU+CiAgICAgIDxkaXJlY3Rvcnk+Li9zcmM8L2RpcmVjdG9yeT4KICAgIDwvaW5jbHVkZT4KICAgIDxyZXBvcnQ+CiAgICAgIDxjbG92ZXIgb3V0cHV0RmlsZT0idGVzdHMvYnVpbGQvbG9ncy9jbG92ZXIueG1sIi8+CiAgICAgIDxodG1sIG91dHB1dERpcmVjdG9yeT0idGVzdHMvYnVpbGQvY292ZXJhZ2UiIGxvd1VwcGVyQm91bmQ9IjM1IiBoaWdoTG93ZXJCb3VuZD0iNzAiLz4KICAgICAgPHBocCBvdXRwdXRGaWxlPSJ0ZXN0cy9idWlsZC9sb2dzL2NvdmVyYWdlLmNvdiIvPgogICAgICA8eG1sIG91dHB1dERpcmVjdG9yeT0idGVzdHMvYnVpbGQvbG9nZmlsZS54bWwiLz4KICAgIDwvcmVwb3J0PgogIDwvY292ZXJhZ2U+CiAgPHRlc3RzdWl0ZXM+CiAgICA8dGVzdHN1aXRlIG5hbWU9IlBIUC1TQU1MIFRlc3QgU3VpdGUiPgogICAgICA8ZGlyZWN0b3J5Pi4vdGVzdHMvc3JjPC9kaXJlY3Rvcnk+CiAgICA8L3Rlc3RzdWl0ZT4KICA8L3Rlc3RzdWl0ZXM+CiAgPGxvZ2dpbmcvPgo8L3BocHVuaXQ+Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBTQU1MIFBIUCBUb29sa2l0IENvbXBhdGlibGUgd2l0aCBQSFAgNy4zLDcuNCAmIDguWAoKWyFbcGhwLXNhbWwgNC54LWRldiBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC9hY3Rpb25zL3dvcmtmbG93cy9waHAtcGFja2FnZS55bWwvYmFkZ2Uuc3ZnP2JyYW5jaD00LngtZGV2KV0oaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwvYWN0aW9ucy93b3JrZmxvd3MvcGhwLXBhY2thZ2UueW1sKSBbIVtDb3ZlcmFnZSBTdGF0dXNdKGh0dHBzOi8vY292ZXJhbGxzLmlvL3JlcG9zL2dpdGh1Yi9TQU1MLVRvb2xraXRzL3BocC1zYW1sL2JhZGdlLnN2Zz9icmFuY2g9NC54LWRldildKGh0dHBzOi8vY292ZXJhbGxzLmlvL2dpdGh1Yi9TQU1MLVRvb2xraXRzL3BocC1zYW1sP2JyYW5jaD00LngtZGV2KSAhW1BhY2thZ2lzdCBEZXBlbmRlbmN5IFZlcnNpb24gKHNwZWNpZnkgdmVyc2lvbildKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vcGFja2FnaXN0L2RlcGVuZGVuY3ktdi9vbmVsb2dpbi9waHAtc2FtbC9waHA/dmVyc2lvbj00LjAuMCkgWyFbTGljZW5zZV0oaHR0cHM6Ly9wb3Nlci5wdWd4Lm9yZy9vbmVsb2dpbi9waHAtc2FtbC9saWNlbnNlLnBuZyldKGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9vbmVsb2dpbi9waHAtc2FtbCkgIVtQYWNrYWdpc3QgRG93bmxvYWRzXShodHRwczovL2ltZy5zaGllbGRzLmlvL3BhY2thZ2lzdC9kbS9vbmVsb2dpbi9waHAtc2FtbCkgIVtQYWNrYWdpc3QgRG93bmxvYWRzXShodHRwczovL2ltZy5zaGllbGRzLmlvL3BhY2thZ2lzdC9kdC9vbmVsb2dpbi9waHAtc2FtbD9sYWJlbD1Ub3RhbCUyMGRvd25sb2FkcykKCkFkZCBTQU1MIHN1cHBvcnQgdG8geW91ciBQSFAgc29mdHdhcmUgdXNpbmcgdGhpcyBsaWJyYXJ5LgoKCldhcm5pbmcKLS0tLS0tLQoKVmVyc2lvbiA0LjMuMiB1cGRhdGVzIHhtbHNlY2xpYnMgdG8gMy4xLjUgZHVlIFtDVkUtMjAyNi0zMjMxM10oaHR0cHM6Ly9naXRodWIuY29tL3JvYnJpY2hhcmRzL3htbHNlY2xpYnMvc2VjdXJpdHkvYWR2aXNvcmllcy9HSFNBLTR2MjYtdjZjZy1nNmY5KQoKVmVyc2lvbiA0LjMuMSB1cGRhdGVzIHhtbHNlY2xpYnMgdG8gMy4xLjQgZHVlIFtDVkUtMjAyNS02NjQ3NV0oaHR0cHM6Ly9naXRodWIuY29tL2Fkdmlzb3JpZXMvR0hTQS1jNGNjLXg5Mjgtdmp3OSkKClRoaXMgdmVyc2lvbiBpcyBjb21wYXRpYmxlIHdpdGggUEhQID49Ny4zIGFuZCA4LlggYW5kIGRvZXMgbm90IGluY2x1ZGUgeG1sc2VjbGlicyAoeW91IHdpbGwgbmVlZCB0byBpbnN0YWxsIGl0IHZpYSBjb21wb3NlciwgZGVwZW5kZW5jeSBkZXNjcmliZWQgaW4gY29tcG9zZXIuanNvbikKClNlY3VyaXR5IEd1aWRlbGluZXMKLS0tLS0tLS0tLS0tLS0tLS0tLQoKSWYgeW91IGJlbGlldmUgeW91IGhhdmUgZGlzY292ZXJlZCBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgaW4gdGhpcyB0b29sa2l0LCBwbGVhc2UgcmVwb3J0IGl0IGJ5IG1haWwgdG8gdGhlIG1haW50YWluZXI6IHNpeHRvLm1hcnRpbi5nYXJjaWErc2VjdXJpdHlAZ21haWwuY29tCgoKV2h5IGFkZCBTQU1MIHN1cHBvcnQgdG8gbXkgc29mdHdhcmU/Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKU0FNTCBpcyBhbiBYTUwtYmFzZWQgc3RhbmRhcmQgZm9yIHdlYiBicm93c2VyIHNpbmdsZSBzaWduLW9uIGFuZCBpcyBkZWZpbmVkIGJ5CnRoZSBPQVNJUyBTZWN1cml0eSBTZXJ2aWNlcyBUZWNobmljYWwgQ29tbWl0dGVlLiBUaGUgc3RhbmRhcmQgaGFzIGJlZW4gYXJvdW5kCnNpbmNlIDIwMDIsIGJ1dCBsYXRlbHkgaXQgaXMgYmVjb21pbmcgcG9wdWxhciBkdWUgaXRzIGFkdmFudGFnZXM6CgogKiAqKlVzYWJpbGl0eSoqIC0gT25lLWNsaWNrIGFjY2VzcyBmcm9tIHBvcnRhbHMgb3IgaW50cmFuZXRzLCBkZWVwIGxpbmtpbmcsCiAgIHBhc3N3b3JkIGVsaW1pbmF0aW9uIGFuZCBhdXRvbWF0aWNhbGx5IHJlbmV3aW5nIHNlc3Npb25zIG1ha2UgbGlmZQogICBlYXNpZXIgZm9yIHRoZSB1c2VyLgogKiAqKlNlY3VyaXR5KiogLSBCYXNlZCBvbiBzdHJvbmcgZGlnaXRhbCBzaWduYXR1cmVzIGZvciBhdXRoZW50aWNhdGlvbiBhbmQKICAgaW50ZWdyaXR5LCBTQU1MIGlzIGEgc2VjdXJlIHNpbmdsZSBzaWduLW9uIHByb3RvY29sIHRoYXQgdGhlIGxhcmdlc3QKICAgYW5kIG1vc3Qgc2VjdXJpdHkgY29uc2Npb3VzIGVudGVycHJpc2VzIGluIHRoZSB3b3JsZCByZWx5IG9uLgogKiAqKlNwZWVkKiogLSBTQU1MIGlzIGZhc3QuIE9uZSBicm93c2VyIHJlZGlyZWN0IGlzIGFsbCBpdCB0YWtlcyB0byBzZWN1cmVseQogICBzaWduIGEgdXNlciBpbnRvIGFuIGFwcGxpY2F0aW9uLgogKiAqKlBoaXNoaW5nIFByZXZlbnRpb24qKiAtIElmIHlvdSBkb27igJl0IGhhdmUgYSBwYXNzd29yZCBmb3IgYW4gYXBwLCB5b3UKICAgY2Fu4oCZdCBiZSB0cmlja2VkIGludG8gZW50ZXJpbmcgaXQgb24gYSBmYWtlIGxvZ2luIHBhZ2UuCiAqICoqSVQgRnJpZW5kbHkqKiAtIFNBTUwgc2ltcGxpZmllcyBsaWZlIGZvciBJVCBiZWNhdXNlIGl0IGNlbnRyYWxpemVzCiAgIGF1dGhlbnRpY2F0aW9uLCBwcm92aWRlcyBncmVhdGVyIHZpc2liaWxpdHkgYW5kIG1ha2VzIGRpcmVjdG9yeQogICBpbnRlZ3JhdGlvbiBlYXNpZXIuCiAqICoqT3Bwb3J0dW5pdHkqKiAtIEIyQiBjbG91ZCB2ZW5kb3Igc2hvdWxkIHN1cHBvcnQgU0FNTCB0byBmYWNpbGl0YXRlIHRoZQogICBpbnRlZ3JhdGlvbiBvZiB0aGVpciBwcm9kdWN0LgoKCkdlbmVyYWwgZGVzY3JpcHRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLQoKU0FNTCBQSFAgdG9vbGtpdCBsZXQgeW91IGJ1aWxkIGEgU1AgKFNlcnZpY2UgUHJvdmlkZXIpIG92ZXIKeW91ciBQSFAgYXBwbGljYXRpb24gYW5kIGNvbm5lY3QgaXQgdG8gYW55IElkUCAoSWRlbnRpdHkgUHJvdmlkZXIpLgoKU3VwcG9ydHM6CgogKiBTU08gYW5kIFNMTyAoU1AtSW5pdGlhdGVkIGFuZCBJZFAtSW5pdGlhdGVkKS4KICogQXNzZXJ0aW9uIGFuZCBuYW1lSWQgZW5jcnlwdGlvbi4KICogQXNzZXJ0aW9uIHNpZ25hdHVyZS4KICogTWVzc2FnZSBzaWduYXR1cmU6IEF1dGhOUmVxdWVzdCwgTG9nb3V0UmVxdWVzdCwgTG9nb3V0UmVzcG9uc2VzLgogKiBFbmFibGUgYW4gQXNzZXJ0aW9uIENvbnN1bWVyIFNlcnZpY2UgZW5kcG9pbnQuCiAqIEVuYWJsZSBhIFNpbmdsZSBMb2dvdXQgU2VydmljZSBlbmRwb2ludC4KICogUHVibGlzaCB0aGUgU1AgbWV0YWRhdGEgKHdoaWNoIGNhbiBiZSBzaWduZWQpLgoKS2V5IGZlYXR1cmVzOgoKICogKipzYW1sMmludCoqIC0gSW1wbGVtZW50cyB0aGUgU0FNTCAyLjAgV2ViIEJyb3dzZXIgU1NPIFByb2ZpbGUuCiAqICoqU2Vzc2lvbi1sZXNzKiogLSBGb3JnZXQgdGhvc2UgY29tbW9uIGNvbmZsaWN0cyBiZXR3ZWVuIHRoZSBTUCBhbmQKICAgdGhlIGZpbmFsIGFwcCwgdGhlIHRvb2xraXQgZGVsZWdhdGUgc2Vzc2lvbiBpbiB0aGUgZmluYWwgYXBwLgogKiAqKkVhc3kgdG8gdXNlKiogLSBQcm9ncmFtbWVyIHdpbGwgYmUgYWxsb3dlZCB0byBjb2RlIGhpZ2gtbGV2ZWwgYW5kCiAgIGxvdy1sZXZlbCBwcm9ncmFtbWluZywgMiBlYXN5IHRvIHVzZSBBUElzIGFyZSBhdmFpbGFibGUuCiAqICoqVGVzdGVkKiogLSBUaG9yb3VnaGx5IHRlc3RlZC4KICogKipQb3B1bGFyKiogLSBEZXZlbG9wZXJzIHVzZSBpdC4gTWFueSBQSFAgU0FNTCBwbHVnaW5zIHVzZXMgaXQuCgpJbnRlZ3JhdGUgeW91ciBQSFAgdG9vbGtpdCBhdCBPbmVMb2dpbiB1c2luZyB0aGlzIGd1aWRlOiBbaHR0cHM6Ly9kZXZlbG9wZXJzLm9uZWxvZ2luLmNvbS9wYWdlL3NhbWwtdG9vbGtpdC1mb3ItcGhwXShodHRwczovL2RldmVsb3BlcnMub25lbG9naW4uY29tL3BhZ2Uvc2FtbC10b29sa2l0LWZvci1waHApCgpJbnN0YWxsYXRpb24KLS0tLS0tLS0tLS0tCgojIyMgRGVwZW5kZW5jaWVzICMjIwoKICogYHBocCA+PSA1LjRgIGFuZCBzb21lIGNvcmUgZXh0ZW5zaW9ucyBsaWtlIGBwaHAteG1sYCwgYHBocC1kYXRlYCwgYHBocC16bGliYC4KICogYG9wZW5zc2xgLiBJbnN0YWxsIHRoZSBvcGVuc3NsIGxpYnJhcnkuIEl0IGhhbmRsZXMgeDUwOSBjZXJ0aWZpY2F0ZXMuCiAqIGBnZXR0ZXh0YC4gSW5zdGFsbCB0aGF0IGxpYnJhcnkgYW5kIGl0cyBwaHAgZHJpdmVyLiBJdCBoYW5kbGVzIHRyYW5zbGF0aW9ucy4KICogYGN1cmxgLiBJbnN0YWxsIHRoYXQgbGlicmFyeSBhbmQgaXRzIHBocCBkcml2ZXIgaWYgeW91IHBsYW4gdG8gdXNlIHRoZSBJZFAgTWV0YWRhdGEgcGFyc2VyLgoKIyMjIENvZGUgIyMjCgojIyMjIE9wdGlvbiAxLiBjbG9uZSB0aGUgcmVwb3NpdG9yeSBmcm9tICBnaXRodWIgIyMjIwoKZ2l0IGNsb25lIGdpdEBnaXRodWIuY29tOlNBTUwtVG9vbGtpdHMvcGhwLXNhbWwuZ2l0CgpUaGVuIHB1bGwgdGhlIDQuWC5YIGJyYW5jaC90YWcKCiMjIyMgT3B0aW9uIDIuIERvd25sb2FkIGZyb20gZ2l0aHViICMjIyMKClRoZSB0b29sa2l0IGlzIGhvc3RlZCBvbiBnaXRodWIuIFlvdSBjYW4gZG93bmxvYWQgaXQgZnJvbToKCiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL3JlbGVhc2VzCgpTZWFyY2ggZm9yIDQuWC5YIHJlbGVhc2VzCgpDb3B5IHRoZSBjb3JlIG9mIHRoZSBsaWJyYXJ5IGluc2lkZSB0aGUgcGhwIGFwcGxpY2F0aW9uLiAoZWFjaCBhcHBsaWNhdGlvbiBoYXMgaXRzCnN0cnVjdHVyZSBzbyB0YWtlIHlvdXIgdGltZSB0byBsb2NhdGUgdGhlIFBIUCBTQU1MIHRvb2xraXQgaW4gdGhlIGJlc3QgcGxhY2UpLgpTZWUgdGhlICJHdWlkZSB0byBhZGQgU0FNTCBzdXBwb3J0IHRvIG15IGFwcCIgdG8ga25vdyBob3cuCgpUYWtlIGluIG1pbmQgdGhhdCB0aGUgY29tcHJlc3NlZCBmaWxlIG9ubHkgY29udGFpbnMgdGhlIG1haW4gZmlsZXMuCklmIHlvdSBwbGFuIHRvIHBsYXkgd2l0aCB0aGUgZGVtb3MsIHVzZSB0aGUgT3B0aW9uIDEuCgojIyMjIE9wdGlvbiAzLiBDb21wb3NlciAjIyMjCgpUaGUgdG9vbGtpdCBzdXBwb3J0cyBbY29tcG9zZXJdKGh0dHBzOi8vZ2V0Y29tcG9zZXIub3JnLykuIFlvdSBjYW4gZmluZCB0aGUgYG9uZWxvZ2luL3BocC1zYW1sYCBwYWNrYWdlIGF0IGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9vbmVsb2dpbi9waHAtc2FtbAoKSW4gb3JkZXIgdG8gaW1wb3J0IHRoZSBzYW1sIHRvb2xraXQgdG8geW91ciBjdXJyZW50IHBocCBwcm9qZWN0LCBleGVjdXRlCmBgYApjb21wb3NlciByZXF1aXJlIG9uZWxvZ2luL3BocC1zYW1sCmBgYAoKUmVtZW1iZXIgdG8gc2VsZWN0IHRoZSAzLlguWCBicmFuY2gKCkFmdGVyIGluc3RhbGxhdGlvbiBoYXMgY29tcGxldGVkIHlvdSB3aWxsIGZpbmQgYXQgdGhlIGB2ZW5kb3IvYCBmb2xkZXIgYSBuZXcgZm9sZGVyIG5hbWVkIGBvbmVsb2dpbmAgYW5kIGluc2lkZSB0aGUgYHBocC1zYW1sYC4gTWFrZSBzdXJlIHlvdSBhcmUgaW5jbHVkaW5nIHRoZSBhdXRvbG9hZGVyIHByb3ZpZGVkIGJ5IGNvbXBvc2VyLiBJdCBjYW4gYmUgZm91bmQgYXQgYHZlbmRvci9hdXRvbG9hZC5waHBgLgoKKipJbXBvcnRhbnQqKiBJbiB0aGlzIG9wdGlvbiwgdGhlIHg1MDkgY2VydHMgbXVzdCBiZSBzdG9yZWQgYXQgYHZlbmRvci9vbmVsb2dpbi9waHAtc2FtbC9jZXJ0c2AKYW5kIHNldHRpbmdzIGZpbGUgc3RvcmVkIGF0IGB2ZW5kb3Ivb25lbG9naW4vcGhwLXNhbWxgLgoKWW91ciBzZXR0aW5ncyBhcmUgYXQgcmlzayBvZiBiZWluZyBkZWxldGVkIHdoZW4gdXBkYXRpbmcgcGFja2FnZXMgdXNpbmcgYGNvbXBvc2VyIHVwZGF0ZWAgb3Igc2ltaWxhciBjb21tYW5kcy4gU28gaXQgaXMgKipoaWdobHkqKiByZWNvbW1lbmRlZCB0aGF0IGluc3RlYWQgb2YgdXNpbmcgc2V0dGluZ3MgZmlsZXMsIHlvdSBwYXNzIHRoZSBzZXR0aW5ncyBhcyBhbiBhcnJheSBkaXJlY3RseSB0byB0aGUgY29uc3RydWN0b3IgKGV4cGxhaW5lZCBsYXRlciBpbiB0aGlzIGRvY3VtZW50KS4gSWYgeW91IGRvIG5vdCB1c2UgdGhpcyBhcHByb2FjaCB5b3VyIHNldHRpbmdzIGFyZSBhdCByaXNrIG9mIGJlaW5nIGRlbGV0ZWQgd2hlbiB1cGRhdGluZyBwYWNrYWdlcyB1c2luZyBgY29tcG9zZXIgdXBkYXRlYCBvciBzaW1pbGFyIGNvbW1hbmRzLgoKQ29tcGF0aWJpbGl0eQotLS0tLS0tLS0tLS0tCgpUaGlzIDQuWC5YIHN1cHBvcnRzIFBIUCA+PTcuMyAuCgpJdCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIFBIUDUuNiBvciBQSFA3LjAsIFBIUDcuMSBvciBQSFA3LjIKCk5hbWVzcGFjZXMKLS0tLS0tLS0tLQoKSWYgeW91IGFyZSB1c2luZyB0aGUgbGlicmFyeSB3aXRoIGEgZnJhbWV3b3JrIGxpa2UgU3ltZm9ueSB0aGF0IGNvbnRhaW5zCm5hbWVzcGFjZXMsIHJlbWVtYmVyIHRoYXQgY2FsbHMgdG8gdGhlIGNsYXNzIG11c3QgYmUgZG9uZSBieSBhZGRpbmcgYSBiYWNrc2xhc2ggKGBcYCkgdG8gdGhlCnN0YXJ0LCBmb3IgZXhhbXBsZSB0byB1c2UgdGhlIHN0YXRpYyBtZXRob2QgZ2V0U2VsZlVSTE5vUXVlcnkgdXNlOgoKICAgIFxPbmVMb2dpblxTYW1sMlxVdGlsczo6Z2V0U2VsZlVSTE5vUXVlcnkoKQoKClNlY3VyaXR5IHdhcm5pbmcKLS0tLS0tLS0tLS0tLS0tLQoKSW4gcHJvZHVjdGlvbiwgdGhlIGBzdHJpY3RgIHBhcmFtZXRlciAqKk1VU1QqKiBiZSBzZXQgYXMgYCJ0cnVlImAgYW5kIHRoZQpgc2lnbmF0dXJlQWxnb3JpdGhtYCBhbmQgYGRpZ2VzdEFsZ29yaXRobWAgdW5kZXIgYHNlY3VyaXR5YCBtdXN0IGJlIHNldCB0bwpzb21ldGhpbmcgb3RoZXIgdGhhbiBTSEExIChzZWUgaHR0cHM6Ly9zaGF0dGVyZWQuaW8vICkuIE90aGVyd2lzZSB5b3VyCmVudmlyb25tZW50IGlzIG5vdCBzZWN1cmUgYW5kIHdpbGwgYmUgZXhwb3NlZCB0byBhdHRhY2tzLgoKSW4gcHJvZHVjdGlvbiBhbHNvIHdlIGhpZ2hseSByZWNvbW1lbmRlZCB0byByZWdpc3RlciBvbiB0aGUgc2V0dGluZ3MgdGhlIElkUCBjZXJ0aWZpY2F0ZSBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBmaW5nZXJwcmludCBtZXRob2QuIFRoZSBmaW5nZXJwcmludCwgaXMgYSBoYXNoLCBzbyBhdCB0aGUgZW5kIGlzIG9wZW4gdG8gYSBjb2xsaXNpb24gYXR0YWNrIHRoYXQgY2FuIGVuZCBvbiBhIHNpZ25hdHVyZSB2YWxpZGF0aW9uIGJ5cGFzcy4gT3RoZXIgU0FNTCB0b29sa2l0cyBkZXByZWNhdGVkIHRoYXQgbWVjaGFuaXNtLCB3ZSBtYWludGFpbiBpdCBmb3IgY29tcGF0aWJpbGl0eSBhbmQgYWxzbyB0byBiZSB1c2VkIG9uIHRlc3QgZW52aXJvbm1lbnQuCgoKIyMjIEF2b2lkaW5nIE9wZW4gUmVkaXJlY3QgYXR0YWNrcyAjIyMKClNvbWUgaW1wbGVtZW50YXRpb25zIHVzZXMgdGhlIFJlbGF5U3RhdGUgcGFyYW1ldGVyIGFzIGEgd2F5IHRvIGNvbnRyb2wgdGhlIGZsb3cgd2hlbiBTU08gYW5kIFNMTyBzdWNjZWVkZWQuIFNvIGJhc2ljYWxseSB0aGUKdXNlciBpcyByZWRpcmVjdGVkIHRvIHRoZSB2YWx1ZSBvZiB0aGUgUmVsYXlTdGF0ZS4KCklmIHlvdSBhcmUgdXNpbmcgU2lnbmF0dXJlIFZhbGlkYXRpb24gb24gdGhlIEhUVFAtUmVkaXJlY3QgYmluZGluZywgeW91IHdpbGwgaGF2ZSB0aGUgUmVsYXlTdGF0ZSB2YWx1ZSBpbnRlZ3JpdHkgY292ZXJlZCwgb3RoZXJ3aXNlLCBhbmQKb24gSFRUUC1QT1NUIGJpbmRpbmcsIHlvdSBjYW4ndCB0cnVzdCB0aGUgUmVsYXlTdGF0ZSBzbyBiZWZvcmUKZXhlY3V0aW5nIHRoZSB2YWxpZGF0aW9uLCB5b3UgbmVlZCB0byB2ZXJpZnkgdGhhdCBpdHMgdmFsdWUgYmVsb25nCmEgdHJ1c3RlZCBhbmQgZXhwZWN0ZWQgVVJMLgoKUmVhZCBtb3JlIGFib3V0IE9wZW4gUmVkaXJlY3QgW0NXRS02MDFdKGh0dHBzOi8vY3dlLm1pdHJlLm9yZy9kYXRhL2RlZmluaXRpb25zLzYwMS5odG1sKS4KCgojIyMgQXZvaWRpbmcgUmVwbGF5IGF0dGFja3MgIyMjCgpBIHJlcGxheSBhdHRhY2sgaXMgYmFzaWNhbGx5IHRyeSB0byByZXVzZSBhbiBpbnRlcmNlcHRlZCB2YWxpZCBTQU1MIE1lc3NhZ2UgaW4gb3JkZXIgdG8gaW1wZXJzb25hdGUgYSBTQU1MIGFjdGlvbiAoU1NPIG9yIFNMTykuCgpTQU1MIE1lc3NhZ2VzIGhhdmUgYSBsaW1pdGVkIHRpbWVsaWZlIChOb3RCZWZvcmUsIE5vdE9uT3JBZnRlcikgdGhhdAptYWtlIGhhcmRlciB0aGlzIGtpbmQgb2YgYXR0YWNrcywgYnV0IHRoZXkgYXJlIHN0aWxsIHBvc3NpYmxlLgoKSW4gb3JkZXIgdG8gYXZvaWQgdGhlbSwgdGhlIFNQIGNhbiBrZWVwIGEgbGlzdCBvZiBTQU1MIE1lc3NhZ2VzIG9yIEFzc2VydGlvbiBJRHMgYWxyZWFkeSB2YWxpZGF0ZWQgYW5kIHByb2Nlc3NlZC4gVGhvc2UgdmFsdWVzIG9ubHkgbmVlZAp0byBiZSBzdG9yZWQgdGhlIGFtb3VudCBvZiB0aW1lIG9mIHRoZSBTQU1MIE1lc3NhZ2UgbGlmZSB0aW1lLCBzbwp3ZSBkb24ndCBuZWVkIHRvIHN0b3JlIGFsbCBwcm9jZXNzZWQgbWVzc2FnZS9hc3NlcnRpb24gSWRzLCBidXQgdGhlIG1vc3QgcmVjZW50IG9uZXMuCgpUaGUgT25lTG9naW5cU2FtbDJcQXV0aCBjbGFzcyBjb250YWlucyB0aGUgW2dldExhc3RSZXF1ZXN0SURdKGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL2Jsb2IvYjgyMTRiNzRkZDcyOTYwZmE2YWE4OGFiNDU0NjY3YzY0Y2VhOTM1Yy9zcmMvU2FtbDIvQXV0aC5waHAjTDY1NyksIFtnZXRMYXN0TWVzc2FnZUlkXShodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC9ibG9iL2I4MjE0Yjc0ZGQ3Mjk2MGZhNmFhODhhYjQ1NDY2N2M2NGNlYTkzNWMvc3JjL1NhbWwyL0F1dGgucGhwI0w3NjIpIGFuZCBbZ2V0TGFzdEFzc2VydGlvbklkXShodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC9ibG9iL2I4MjE0Yjc0ZGQ3Mjk2MGZhNmFhODhhYjQ1NDY2N2M2NGNlYTkzNWMvc3JjL1NhbWwyL0F1dGgucGhwI0w3NzApIG1ldGhvZHMgdG8gcmV0cmlldmUgdGhlIElEcwoKQ2hlY2tpbmcgdGhhdCB0aGUgSUQgb2YgdGhlIGN1cnJlbnQgTWVzc2FnZS9Bc3NlcnRpb24gZG9lcyBub3QgZXhpc3RzIGluIHRoZSBsaXN0IG9mIHRoZSBvbmVzIGFscmVhZHkgcHJvY2Vzc2VkIHdpbGwgcHJldmVudCByZXBseQphdHRhY2tzLgoKCkdldHRpbmcgc3RhcnRlZAotLS0tLS0tLS0tLS0tLS0KCiMjIyBLbm93aW5nIHRoZSB0b29sa2l0ICMjIwoKVGhlIG5ldyBTQU1MIFRvb2xraXQgY29udGFpbnMgZGlmZmVyZW50IGZvbGRlcnMgKGBjZXJ0c2AsIGBlbmRwb2ludHNgLApgbGliYCwgYGRlbW9gLCBldGMuKSBhbmQgc29tZSBmaWxlcy4KCkxldCdzIHN0YXJ0IGRlc2NyaWJpbmcgdGhlIGZvbGRlcnM6CgojIyMjIGBjZXJ0cy9gICMjIyMKClNBTUwgcmVxdWlyZXMgYSB4NTA5IGNlcnQgdG8gc2lnbiBhbmQgZW5jcnlwdCBlbGVtZW50cyBsaWtlIGBOYW1lSURgLCBgTWVzc2FnZWAsCmBBc3NlcnRpb25gLCBgTWV0YWRhdGFgLgoKSWYgb3VyIGVudmlyb25tZW50IHJlcXVpcmVzIHNpZ24gb3IgZW5jcnlwdCBzdXBwb3J0LCB0aGlzIGZvbGRlciBtYXkgY29udGFpbgp0aGUgeDUwOSBjZXJ0IGFuZCB0aGUgcHJpdmF0ZSBrZXkgdGhhdCB0aGUgU1Agd2lsbCB1c2U6CgogKiBgc3AuY3J0YCAtIFRoZSBwdWJsaWMgY2VydCBvZiB0aGUgU1AKICogYHNwLmtleWAgLSBUaGUgcHJpdmF0ZSBrZXkgb2YgdGhlIFNQCgpPciBhbHNvIHdlIGNhbiBwcm92aWRlIHRob3NlIGRhdGEgaW4gdGhlIHNldHRpbmcgZmlsZSBhdCB0aGUgYCRzZXR0aW5nc1snc3AnXVsneDUwOWNlcnQnXWAKYW5kIHRoZSBgJHNldHRpbmdzWydzcCddWydwcml2YXRlS2V5J11gLgoKU29tZXRpbWVzIHdlIGNvdWxkIG5lZWQgYSBzaWduYXR1cmUgb24gdGhlIG1ldGFkYXRhIHB1Ymxpc2hlZCBieSB0aGUgU1AsIGluCnRoaXMgY2FzZSB3ZSBjb3VsZCB1c2UgdGhlIHg1MDkgY2VydCBwcmV2aW91c2x5IG1lbnRpb25lZCBvciB1c2UgYSBuZXcgeC41MDkKY2VydDogYG1ldGFkYXRhLmNydGAgYW5kIGBtZXRhZGF0YS5rZXlgLgoKVXNlIGBzcF9uZXcuY3J0YCBpZiB5b3UgYXJlIGluIGEga2V5IHJvbGxvdmVyIHByb2Nlc3MgYW5kIHlvdSB3YW50IHRvCnB1Ymxpc2ggdGhhdCB4NTA5IGNlcnRpZmljYXRlIG9uIFNlcnZpY2UgUHJvdmlkZXIgbWV0YWRhdGEuCgojIyMjIGBzcmMvYCAjIyMjCgpUaGlzIGZvbGRlciBjb250YWlucyB0aGUgaGVhcnQgb2YgdGhlIHRvb2xraXQsIHRoZSBsaWJyYXJpZXM6CgogKiBgU2FtbDJgIGZvbGRlciBjb250YWlucyB0aGUgbmV3IHZlcnNpb24gb2YgdGhlIGNsYXNzZXMgYW5kIG1ldGhvZHMgdGhhdAogICBhcmUgZGVzY3JpYmVkIGluIGEgbGF0ZXIgc2VjdGlvbi4KCgojIyMjIGBkb2MvYCAjIyMjCgpUaGlzIGZvbGRlciBjb250YWlucyB0aGUgQVBJIGRvY3VtZW50YXRpb24gb2YgdGhlIHRvb2xraXQuCgoKIyMjIyBgZW5kcG9pbnRzL2AgIyMjIwoKVGhlIHRvb2xraXQgaGFzIHRocmVlIGVuZHBvaW50czoKCiAqIGBtZXRhZGF0YS5waHBgIC0gV2hlcmUgdGhlIG1ldGFkYXRhIG9mIHRoZSBTUCBpcyBwdWJsaXNoZWQuCiAqIGBhY3MucGhwYCAtIEFzc2VydGlvbiBDb25zdW1lciBTZXJ2aWNlLiBQcm9jZXNzZXMgdGhlIFNBTUwgUmVzcG9uc2VzLgogKiBgc2xzLnBocGAgLSBTaW5nbGUgTG9nb3V0IFNlcnZpY2UuIFByb2Nlc3NlcyBMb2dvdXQgUmVxdWVzdHMgYW5kIExvZ291dAogICBSZXNwb25zZXMuCgpZb3UgY2FuIHVzZSB0aGUgZmlsZXMgcHJvdmlkZWQgYnkgdGhlIHRvb2xraXQgb3IgY3JlYXRlIHlvdXIgb3duIGVuZHBvaW50cwpmaWxlcyB3aGVuIGFkZGluZyBTQU1MIHN1cHBvcnQgdG8geW91ciBhcHBsaWNhdGlvbnMuIFRha2UgaW4gbWluZCB0aGF0IHRob3NlCmVuZHBvaW50cyBmaWxlcyB1c2VzIHRoZSBzZXR0aW5nIGZpbGUgb2YgdGhlIHRvb2xraXQncyBiYXNlIGZvbGRlci4KCgojIyMjIGBsb2NhbGUvYCAjIyMjCgpMb2NhbGUgZm9sZGVyIGNvbnRhaW5zIHNvbWUgdHJhbnNsYXRpb25zOiBgZW5fVVNgIGFuZCBgZXNfRVNgIGFzIGEgcHJvb2Ygb2YgY29uY2VwdC4KQ3VycmVudGx5IHRoZXJlIGFyZSBubyB0cmFuc2xhdGlvbnMgYnV0IHdlIHdpbGwgZXZlbnR1YWxseSBsb2NhbGl6ZSB0aGUgbWVzc2FnZXMKYW5kIHN1cHBvcnQgbXVsdGlwbGUgbGFuZ3VhZ2VzLgoKCiMjIyMgT3RoZXIgaW1wb3J0YW50IGZpbGVzICMjIyMKCiogYHNldHRpbmdzX2V4YW1wbGUucGhwYCAtIEEgdGVtcGxhdGUgdG8gYmUgdXNlZCBpbiBvcmRlciB0byBjcmVhdGUgYQogIHNldHRpbmdzLnBocCBmaWxlIHdoaWNoIGNvbnRhaW5zIHRoZSBiYXNpYyBjb25maWd1cmF0aW9uIGluZm8gb2YgdGhlIHRvb2xraXQuCiogYGFkdmFuY2VkX3NldHRpbmdzX2V4YW1wbGUucGhwYCAtIEEgdGVtcGxhdGUgdG8gYmUgdXNlZCBpbiBvcmRlciB0byBjcmVhdGUgYQogIGFkdmFuY2VkX3NldHRpbmdzLnBocCBmaWxlIHdoaWNoIGNvbnRhaW5zIGV4dHJhIGNvbmZpZ3VyYXRpb24gaW5mbyByZWxhdGVkIHRvCiAgdGhlIHNlY3VyaXR5LCB0aGUgY29udGFjdCBwZXJzb24sIGFuZCB0aGUgb3JnYW5pemF0aW9uIGFzc29jaWF0ZWQgdG8gdGhlIFNQLgoqIGBfdG9vbGtpdF9sb2FkZXIucGhwYCAtIFRoaXMgZmlsZSBsb2FkIHRoZSB0b29sa2l0IGxpYnJhcmllcyAoVGhlIFNBTUwyIGxpYikuCgoKIyMjIyBNaXNjZWxsYW5lb3VzICMjIyMKCiogYHRlc3RzL2AgLSBDb250YWlucyB0aGUgdW5pdCB0ZXN0IG9mIHRoZSB0b29sa2l0LgoqIGBkZW1vMS9gIC0gQ29udGFpbnMgYW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBQSFAgYXBwIHdpdGggU0FNTCBzdXBwb3J0LgogIFJlYWQgdGhlIGBSZWFkbWUudHh0YCBpbnNpZGUgZm9yIG1vcmUgaW5mby4KKiBgZGVtbzIvYCAtIENvbnRhaW5zIGFub3RoZXIgZXhhbXBsZS4KCgojIyMgSG93IGl0IHdvcmtzICMjIwoKIyMjIyBTZXR0aW5ncyAjIyMjCgpGaXJzdCBvZiBhbGwgd2UgbmVlZCB0byBjb25maWd1cmUgdGhlIHRvb2xraXQuIFRoZSBTUCdzIGluZm8sIHRoZSBJZFAncyBpbmZvLAphbmQgaW4gc29tZSBjYXNlcywgY29uZmlndXJlIGFkdmFuY2VkIHNlY3VyaXR5IGlzc3VlcyBsaWtlIHNpZ25hdHVyZXMgYW5kCmVuY3J5cHRpb24uCgpUaGVyZSBhcmUgdHdvIHdheXMgdG8gcHJvdmlkZSB0aGUgc2V0dGluZ3MgaW5mb3JtYXRpb246CgogKiBVc2UgYSBgc2V0dGluZ3MucGhwYCBmaWxlIHRoYXQgd2Ugc2hvdWxkIGxvY2F0ZSBhdCB0aGUgYmFzZSBmb2xkZXIgb2YgdGhlCiAgIHRvb2xraXQuCiAqIFVzZSBhbiBhcnJheSB3aXRoIHRoZSBzZXR0aW5nIGRhdGEgYW5kIHByb3ZpZGUgaXQgZGlyZWN0bHkgdG8gdGhlCiAgIGNvbnN0cnVjdG9yIG9mIHRoZSBjbGFzcy4KCgpUaGVyZSBpcyBhIHRlbXBsYXRlIGZpbGUsIGBzZXR0aW5nc19leGFtcGxlLnBocGAsIHNvIHlvdSBjYW4gbWFrZSBhIGNvcHkgb2YgdGhpcwpmaWxlLCByZW5hbWUgYW5kIGVkaXQgaXQuCgpgYGBwaHAKPD9waHAKCiRzZXR0aW5ncyA9IGFycmF5KAogICAgLy8gSWYgJ3N0cmljdCcgaXMgVHJ1ZSwgdGhlbiB0aGUgUEhQIFRvb2xraXQgd2lsbCByZWplY3QgdW5zaWduZWQKICAgIC8vIG9yIHVuZW5jcnlwdGVkIG1lc3NhZ2VzIGlmIGl0IGV4cGVjdHMgdGhlbSB0byBiZSBzaWduZWQgb3IgZW5jcnlwdGVkLgogICAgLy8gQWxzbyBpdCB3aWxsIHJlamVjdCB0aGUgbWVzc2FnZXMgaWYgdGhlIFNBTUwgc3RhbmRhcmQgaXMgbm90IHN0cmljdGx5CiAgICAvLyBmb2xsb3dlZDogRGVzdGluYXRpb24sIE5hbWVJZCwgQ29uZGl0aW9ucyAuLi4gYXJlIHZhbGlkYXRlZCB0b28uCiAgICAnc3RyaWN0JyA9PiB0cnVlLAoKICAgIC8vIEVuYWJsZSBkZWJ1ZyBtb2RlICh0byBwcmludCBlcnJvcnMpLgogICAgJ2RlYnVnJyA9PiBmYWxzZSwKCiAgICAvLyBTZXQgYSBCYXNlVVJMIHRvIGJlIHVzZWQgaW5zdGVhZCBvZiB0cnkgdG8gZ3Vlc3MKICAgIC8vIHRoZSBCYXNlVVJMIG9mIHRoZSB2aWV3IHRoYXQgcHJvY2VzcyB0aGUgU0FNTCBNZXNzYWdlLgogICAgLy8gRXggaHR0cDovL3NwLmV4YW1wbGUuY29tLwogICAgLy8gICAgaHR0cDovL2V4YW1wbGUuY29tL3NwLwogICAgJ2Jhc2V1cmwnID0+IG51bGwsCgogICAgLy8gU2VydmljZSBQcm92aWRlciBEYXRhIHRoYXQgd2UgYXJlIGRlcGxveWluZy4KICAgICdzcCcgPT4gYXJyYXkoCiAgICAgICAgLy8gSWRlbnRpZmllciBvZiB0aGUgU1AgZW50aXR5ICAobXVzdCBiZSBhIFVSSSkKICAgICAgICAnZW50aXR5SWQnID0+ICcnLAogICAgICAgIC8vIFNwZWNpZmllcyBpbmZvIGFib3V0IHdoZXJlIGFuZCBob3cgdGhlIDxBdXRoblJlc3BvbnNlPiBtZXNzYWdlIE1VU1QgYmUKICAgICAgICAvLyByZXR1cm5lZCB0byB0aGUgcmVxdWVzdGVyLCBpbiB0aGlzIGNhc2Ugb3VyIFNQLgogICAgICAgICdhc3NlcnRpb25Db25zdW1lclNlcnZpY2UnID0+IGFycmF5KAogICAgICAgICAgICAvLyBVUkwgTG9jYXRpb24gd2hlcmUgdGhlIDxSZXNwb25zZT4gZnJvbSB0aGUgSWRQIHdpbGwgYmUgcmV0dXJuZWQKICAgICAgICAgICAgJ3VybCcgPT4gJycsCiAgICAgICAgICAgIC8vIFNBTUwgcHJvdG9jb2wgYmluZGluZyB0byBiZSB1c2VkIHdoZW4gcmV0dXJuaW5nIHRoZSA8UmVzcG9uc2U+CiAgICAgICAgICAgIC8vIG1lc3NhZ2UuIFNBTUwgVG9vbGtpdCBzdXBwb3J0cyB0aGlzIGVuZHBvaW50IGZvciB0aGUKICAgICAgICAgICAgLy8gSFRUUC1QT1NUIGJpbmRpbmcgb25seS4KICAgICAgICAgICAgJ2JpbmRpbmcnID0+ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YmluZGluZ3M6SFRUUC1QT1NUJywKICAgICAgICApLAogICAgICAgIC8vIElmIHlvdSBuZWVkIHRvIHNwZWNpZnkgcmVxdWVzdGVkIGF0dHJpYnV0ZXMsIHNldCBhCiAgICAgICAgLy8gYXR0cmlidXRlQ29uc3VtaW5nU2VydmljZS4gbmFtZUZvcm1hdCwgYXR0cmlidXRlVmFsdWUgYW5kCiAgICAgICAgLy8gZnJpZW5kbHlOYW1lIGNhbiBiZSBvbWl0dGVkCiAgICAgICAgImF0dHJpYnV0ZUNvbnN1bWluZ1NlcnZpY2UiPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAic2VydmljZU5hbWUiID0+ICJTUCB0ZXN0IiwKICAgICAgICAgICAgICAgICJzZXJ2aWNlRGVzY3JpcHRpb24iID0+ICJUZXN0IFNlcnZpY2UiLAogICAgICAgICAgICAgICAgInJlcXVlc3RlZEF0dHJpYnV0ZXMiID0+IGFycmF5KAogICAgICAgICAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgPT4gIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJpc1JlcXVpcmVkIiA9PiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWVGb3JtYXQiID0+ICIiLAogICAgICAgICAgICAgICAgICAgICAgICAiZnJpZW5kbHlOYW1lIiA9PiAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgImF0dHJpYnV0ZVZhbHVlIiA9PiBhcnJheSgpCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgKQogICAgICAgICksCiAgICAgICAgLy8gU3BlY2lmaWVzIGluZm8gYWJvdXQgd2hlcmUgYW5kIGhvdyB0aGUgPExvZ291dCBSZXNwb25zZT4gbWVzc2FnZSBNVVNUIGJlCiAgICAgICAgLy8gcmV0dXJuZWQgdG8gdGhlIHJlcXVlc3RlciwgaW4gdGhpcyBjYXNlIG91ciBTUC4KICAgICAgICAnc2luZ2xlTG9nb3V0U2VydmljZScgPT4gYXJyYXkoCiAgICAgICAgICAgIC8vIFVSTCBMb2NhdGlvbiB3aGVyZSB0aGUgPFJlc3BvbnNlPiBmcm9tIHRoZSBJZFAgd2lsbCBiZSByZXR1cm5lZAogICAgICAgICAgICAndXJsJyA9PiAnJywKICAgICAgICAgICAgLy8gU0FNTCBwcm90b2NvbCBiaW5kaW5nIHRvIGJlIHVzZWQgd2hlbiByZXR1cm5pbmcgdGhlIDxSZXNwb25zZT4KICAgICAgICAgICAgLy8gbWVzc2FnZS4gU0FNTCBUb29sa2l0IHN1cHBvcnRzIHRoZSBIVFRQLVJlZGlyZWN0IGJpbmRpbmcKICAgICAgICAgICAgLy8gb25seSBmb3IgdGhpcyBlbmRwb2ludC4KICAgICAgICAgICAgJ2JpbmRpbmcnID0+ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YmluZGluZ3M6SFRUUC1SZWRpcmVjdCcsCiAgICAgICAgKSwKICAgICAgICAvLyBTcGVjaWZpZXMgdGhlIGNvbnN0cmFpbnRzIG9uIHRoZSBuYW1lIGlkZW50aWZpZXIgdG8gYmUgdXNlZCB0bwogICAgICAgIC8vIHJlcHJlc2VudCB0aGUgcmVxdWVzdGVkIHN1YmplY3QuCiAgICAgICAgLy8gVGFrZSBhIGxvb2sgb24gbGliL1NhbWwyL0NvbnN0YW50cy5waHAgdG8gc2VlIHRoZSBOYW1lSWRGb3JtYXQgc3VwcG9ydGVkLgogICAgICAgICdOYW1lSURGb3JtYXQnID0+ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoxLjE6bmFtZWlkLWZvcm1hdDplbWFpbEFkZHJlc3MnLAogICAgICAgIC8vIFVzdWFsbHkgeDUwOWNlcnQgYW5kIHByaXZhdGVLZXkgb2YgdGhlIFNQIGFyZSBwcm92aWRlZCBieSBmaWxlcyBwbGFjZWQgYXQKICAgICAgICAvLyB0aGUgY2VydHMgZm9sZGVyLiBCdXQgd2UgY2FuIGFsc28gcHJvdmlkZSB0aGVtIHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzCiAgICAgICAgJ3g1MDljZXJ0JyA9PiAnJywKICAgICAgICAncHJpdmF0ZUtleScgPT4gJycsCgogICAgICAgIC8qCiAgICAgICAgICogS2V5IHJvbGxvdmVyCiAgICAgICAgICogSWYgeW91IHBsYW4gdG8gdXBkYXRlIHRoZSBTUCB4NTA5Y2VydCBhbmQgcHJpdmF0ZUtleQogICAgICAgICAqIHlvdSBjYW4gZGVmaW5lIGhlcmUgdGhlIG5ldyB4NTA5Y2VydCBhbmQgaXQgd2lsbCBiZQogICAgICAgICAqIHB1Ymxpc2hlZCBvbiB0aGUgU1AgbWV0YWRhdGEgc28gSWRlbnRpdHkgUHJvdmlkZXJzIGNhbgogICAgICAgICAqIHJlYWQgdGhlbSBhbmQgZ2V0IHJlYWR5IGZvciByb2xsb3Zlci4KICAgICAgICAgKi8KICAgICAgICAvLyAneDUwOWNlcnROZXcnID0+ICcnLAogICAgKSwKCiAgICAvLyBJZGVudGl0eSBQcm92aWRlciBEYXRhIHRoYXQgd2Ugd2FudCBjb25uZWN0ZWQgd2l0aCBvdXIgU1AuCiAgICAnaWRwJyA9PiBhcnJheSgKICAgICAgICAvLyBJZGVudGlmaWVyIG9mIHRoZSBJZFAgZW50aXR5ICAobXVzdCBiZSBhIFVSSSkKICAgICAgICAnZW50aXR5SWQnID0+ICcnLAogICAgICAgIC8vIFNTTyBlbmRwb2ludCBpbmZvIG9mIHRoZSBJZFAuIChBdXRoZW50aWNhdGlvbiBSZXF1ZXN0IHByb3RvY29sKQogICAgICAgICdzaW5nbGVTaWduT25TZXJ2aWNlJyA9PiBhcnJheSgKICAgICAgICAgICAgLy8gVVJMIFRhcmdldCBvZiB0aGUgSWRQIHdoZXJlIHRoZSBBdXRoZW50aWNhdGlvbiBSZXF1ZXN0IE1lc3NhZ2UKICAgICAgICAgICAgLy8gd2lsbCBiZSBzZW50LgogICAgICAgICAgICAndXJsJyA9PiAnJywKICAgICAgICAgICAgLy8gU0FNTCBwcm90b2NvbCBiaW5kaW5nIHRvIGJlIHVzZWQgd2hlbiByZXR1cm5pbmcgdGhlIDxSZXNwb25zZT4KICAgICAgICAgICAgLy8gbWVzc2FnZS4gT25lTG9naW4gVG9vbGtpdCBzdXBwb3J0cyB0aGUgSFRUUC1SZWRpcmVjdCBiaW5kaW5nCiAgICAgICAgICAgIC8vIG9ubHkgZm9yIHRoaXMgZW5kcG9pbnQuCiAgICAgICAgICAgICdiaW5kaW5nJyA9PiAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmJpbmRpbmdzOkhUVFAtUmVkaXJlY3QnLAogICAgICAgICksCiAgICAgICAgLy8gU0xPIGVuZHBvaW50IGluZm8gb2YgdGhlIElkUC4KICAgICAgICAnc2luZ2xlTG9nb3V0U2VydmljZScgPT4gYXJyYXkoCiAgICAgICAgICAgIC8vIFVSTCBMb2NhdGlvbiBvZiB0aGUgSWRQIHdoZXJlIFNMTyBSZXF1ZXN0IHdpbGwgYmUgc2VudC4KICAgICAgICAgICAgJ3VybCcgPT4gJycsCiAgICAgICAgICAgIC8vIFVSTCBsb2NhdGlvbiBvZiB0aGUgSWRQIHdoZXJlIFNMTyBSZXNwb25zZSB3aWxsIGJlIHNlbnQgKFJlc3BvbnNlTG9jYXRpb24pCiAgICAgICAgICAgIC8vIGlmIG5vdCBzZXQsIHVybCBmb3IgdGhlIFNMTyBSZXF1ZXN0IHdpbGwgYmUgdXNlZAogICAgICAgICAgICAncmVzcG9uc2VVcmwnID0+ICcnLAogICAgICAgICAgICAvLyBTQU1MIHByb3RvY29sIGJpbmRpbmcgdG8gYmUgdXNlZCB3aGVuIHJldHVybmluZyB0aGUgPFJlc3BvbnNlPgogICAgICAgICAgICAvLyBtZXNzYWdlLiBPbmVMb2dpbiBUb29sa2l0IHN1cHBvcnRzIHRoZSBIVFRQLVJlZGlyZWN0IGJpbmRpbmcKICAgICAgICAgICAgLy8gb25seSBmb3IgdGhpcyBlbmRwb2ludC4KICAgICAgICAgICAgJ2JpbmRpbmcnID0+ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YmluZGluZ3M6SFRUUC1SZWRpcmVjdCcsCiAgICAgICAgKSwKICAgICAgICAvLyBQdWJsaWMgeDUwOSBjZXJ0aWZpY2F0ZSBvZiB0aGUgSWRQCiAgICAgICAgJ3g1MDljZXJ0JyA9PiAnJywKICAgICAgICAvKgogICAgICAgICAqICBJbnN0ZWFkIG9mIHVzZSB0aGUgd2hvbGUgeDUwOWNlcnQgeW91IGNhbiB1c2UgYSBmaW5nZXJwcmludCBpbiBvcmRlciB0bwogICAgICAgICAqICB2YWxpZGF0ZSBhIFNBTUxSZXNwb25zZSwgYnV0IHdlIGRvbid0IHJlY29tbWVuZCB0byB1c2UgdGhhdAogICAgICAgICAqICBtZXRob2Qgb24gcHJvZHVjdGlvbiBzaW5jZSBpcyBleHBsb2l0YWJsZSBieSBhIGNvbGxpc2lvbiBhdHRhY2suCiAgICAgICAgICogIChvcGVuc3NsIHg1MDkgLW5vb3V0IC1maW5nZXJwcmludCAtaW4gImlkcC5jcnQiIHRvIGdlbmVyYXRlIGl0LAogICAgICAgICAqICAgb3IgYWRkIGZvciBleGFtcGxlIHRoZSAtc2hhMjU2ICwgLXNoYTM4NCBvciAtc2hhNTEyIHBhcmFtZXRlcikKICAgICAgICAgKgogICAgICAgICAqICBJZiBhIGZpbmdlcnByaW50IGlzIHByb3ZpZGVkLCB0aGVuIHRoZSBjZXJ0RmluZ2VycHJpbnRBbGdvcml0aG0gaXMgcmVxdWlyZWQgaW4gb3JkZXIgdG8KICAgICAgICAgKiAgbGV0IHRoZSB0b29sa2l0IGtub3cgd2hpY2ggYWxnb3JpdGhtIHdhcyB1c2VkLiBQb3NzaWJsZSB2YWx1ZXM6IHNoYTEsIHNoYTI1Niwgc2hhMzg0IG9yIHNoYTUxMgogICAgICAgICAqICAnc2hhMScgaXMgdGhlIGRlZmF1bHQgdmFsdWUuCiAgICAgICAgICoKICAgICAgICAgKiAgTm90aWNlIHRoYXQgaWYgeW91IHdhbnQgdG8gdmFsaWRhdGUgYW55IFNBTUwgTWVzc2FnZSBzZW50IGJ5IHRoZSBIVFRQLVJlZGlyZWN0IGJpbmRpbmcsIHlvdQogICAgICAgICAqICB3aWxsIG5lZWQgdG8gcHJvdmlkZSB0aGUgd2hvbGUgeDUwOWNlcnQuCiAgICAgICAgICovCiAgICAgICAgLy8gJ2NlcnRGaW5nZXJwcmludCcgPT4gJycsCiAgICAgICAgLy8gJ2NlcnRGaW5nZXJwcmludEFsZ29yaXRobScgPT4gJ3NoYTEnLAoKICAgICAgICAvKiBJbiBzb21lIHNjZW5hcmlvcyB0aGUgSWRQIHVzZXMgZGlmZmVyZW50IGNlcnRpZmljYXRlcyBmb3IKICAgICAgICAgKiBzaWduaW5nL2VuY3J5cHRpb24sIG9yIGlzIHVuZGVyIGtleSByb2xsb3ZlciBwaGFzZSBhbmQKICAgICAgICAgKiBtb3JlIHRoYW4gb25lIGNlcnRpZmljYXRlIGlzIHB1Ymxpc2hlZCBvbiBJZFAgbWV0YWRhdGEuCiAgICAgICAgICogSW4gb3JkZXIgdG8gaGFuZGxlIHRoYXQgdGhlIHRvb2xraXQgb2ZmZXJzIHRoYXQgcGFyYW1ldGVyLgogICAgICAgICAqICh3aGVuIHVzZWQsICd4NTA5Y2VydCcgYW5kICdjZXJ0RmluZ2VycHJpbnQnIHZhbHVlcyBhcmUKICAgICAgICAgKiBpZ25vcmVkKS4KICAgICAgICAgKi8KICAgICAgICAvLyAneDUwOWNlcnRNdWx0aScgPT4gYXJyYXkoCiAgICAgICAgLy8gICAgICAnc2lnbmluZycgPT4gYXJyYXkoCiAgICAgICAgLy8gICAgICAgICAgMCA9PiAnPGNlcnQxLXN0cmluZz4nLAogICAgICAgIC8vICAgICAgKSwKICAgICAgICAvLyAgICAgICdlbmNyeXB0aW9uJyA9PiBhcnJheSgKICAgICAgICAvLyAgICAgICAgICAwID0+ICc8Y2VydDItc3RyaW5nPicsCiAgICAgICAgLy8gICAgICApCiAgICAgICAgLy8gKSwKICAgICksCik7CmBgYApJbiBhZGRpdGlvbiB0byB0aGUgcmVxdWlyZWQgc2V0dGluZ3MgZGF0YSAoSWRQLCBTUCksIHRoZXJlIGlzIGV4dHJhCmluZm9ybWF0aW9uIHRoYXQgY291bGQgYmUgZGVmaW5lZC4gSW4gdGhlIHNhbWUgd2F5IHRoYXQgYSB0ZW1wbGF0ZSBleGlzdHMKZm9yIHRoZSBiYXNpYyBpbmZvLCB0aGVyZSBpcyBhIHRlbXBsYXRlIGZvciB0aGF0IGFkdmFuY2VkIGluZm8gbG9jYXRlZAphdCB0aGUgYmFzZSBmb2xkZXIgb2YgdGhlIHRvb2xraXQgYW5kIG5hbWVkIGBhZHZhbmNlZF9zZXR0aW5nc19leGFtcGxlLnBocGAKdGhhdCB5b3UgY2FuIGNvcHkgYW5kIHJlbmFtZSBpdCBhcyBgYWR2YW5jZWRfc2V0dGluZ3MucGhwYAoKYGBgcGhwCjw/cGhwCgokYWR2YW5jZWRTZXR0aW5ncyA9IGFycmF5KAoKICAgIC8vIENvbXByZXNzaW9uIHNldHRpbmdzCiAgICAnY29tcHJlc3MnID0+IGFycmF5KAogICAgICAgICdyZXF1ZXN0cycgPT4gdHJ1ZSwKICAgICAgICAncmVzcG9uc2VzJyA9PiB0cnVlCiAgICApLAogICAgLy8gU2VjdXJpdHkgc2V0dGluZ3MKICAgICdzZWN1cml0eScgPT4gYXJyYXkoCgogICAgICAgIC8qKiBzaWduYXR1cmVzIGFuZCBlbmNyeXB0aW9ucyBvZmZlcmVkICovCgogICAgICAgIC8vIEluZGljYXRlcyB0aGF0IHRoZSBuYW1lSUQgb2YgdGhlIDxzYW1scDpsb2dvdXRSZXF1ZXN0PiBzZW50IGJ5IHRoaXMgU1AKICAgICAgICAvLyB3aWxsIGJlIGVuY3J5cHRlZC4KICAgICAgICAnbmFtZUlkRW5jcnlwdGVkJyA9PiBmYWxzZSwKCiAgICAgICAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIDxzYW1scDpBdXRoblJlcXVlc3Q+IG1lc3NhZ2VzIHNlbnQgYnkgdGhpcyBTUAogICAgICAgIC8vIHdpbGwgYmUgc2lnbmVkLiAgW01ldGFkYXRhIG9mIHRoZSBTUCB3aWxsIG9mZmVyIHRoaXMgaW5mb10KICAgICAgICAnYXV0aG5SZXF1ZXN0c1NpZ25lZCcgPT4gZmFsc2UsCgogICAgICAgIC8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSA8c2FtbHA6bG9nb3V0UmVxdWVzdD4gbWVzc2FnZXMgc2VudCBieSB0aGlzIFNQCiAgICAgICAgLy8gd2lsbCBiZSBzaWduZWQuCiAgICAgICAgJ2xvZ291dFJlcXVlc3RTaWduZWQnID0+IGZhbHNlLAoKICAgICAgICAvLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgPHNhbWxwOmxvZ291dFJlc3BvbnNlPiBtZXNzYWdlcyBzZW50IGJ5IHRoaXMgU1AKICAgICAgICAvLyB3aWxsIGJlIHNpZ25lZC4KICAgICAgICAnbG9nb3V0UmVzcG9uc2VTaWduZWQnID0+IGZhbHNlLAoKICAgICAgICAvKiBTaWduIHRoZSBNZXRhZGF0YQogICAgICAgICBGYWxzZSB8fCBUcnVlICh1c2Ugc3AgY2VydHMpIHx8IGFycmF5ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrZXlGaWxlTmFtZScgPT4gJ21ldGFkYXRhLmtleScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VydEZpbGVOYW1lJyA9PiAnbWV0YWRhdGEuY3J0JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBhcnJheSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneDUwOWNlcnQnID0+ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ByaXZhdGVLZXknID0+ICcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICovCiAgICAgICAgJ3NpZ25NZXRhZGF0YScgPT4gZmFsc2UsCgogICAgICAgIC8qKiBzaWduYXR1cmVzIGFuZCBlbmNyeXB0aW9ucyByZXF1aXJlZCAqKi8KCiAgICAgICAgLy8gSW5kaWNhdGVzIGEgcmVxdWlyZW1lbnQgZm9yIHRoZSA8c2FtbHA6UmVzcG9uc2U+LCA8c2FtbHA6TG9nb3V0UmVxdWVzdD4KICAgICAgICAvLyBhbmQgPHNhbWxwOkxvZ291dFJlc3BvbnNlPiBlbGVtZW50cyByZWNlaXZlZCBieSB0aGlzIFNQIHRvIGJlIHNpZ25lZC4KICAgICAgICAnd2FudE1lc3NhZ2VzU2lnbmVkJyA9PiBmYWxzZSwKCiAgICAgICAgLy8gSW5kaWNhdGVzIGEgcmVxdWlyZW1lbnQgZm9yIHRoZSA8c2FtbDpBc3NlcnRpb24+IGVsZW1lbnRzIHJlY2VpdmVkIGJ5CiAgICAgICAgLy8gdGhpcyBTUCB0byBiZSBlbmNyeXB0ZWQuCiAgICAgICAgJ3dhbnRBc3NlcnRpb25zRW5jcnlwdGVkJyA9PiBmYWxzZSwKCiAgICAgICAgLy8gSW5kaWNhdGVzIGEgcmVxdWlyZW1lbnQgZm9yIHRoZSA8c2FtbDpBc3NlcnRpb24+IGVsZW1lbnRzIHJlY2VpdmVkIGJ5CiAgICAgICAgLy8gdGhpcyBTUCB0byBiZSBzaWduZWQuIFtNZXRhZGF0YSBvZiB0aGUgU1Agd2lsbCBvZmZlciB0aGlzIGluZm9dCiAgICAgICAgJ3dhbnRBc3NlcnRpb25zU2lnbmVkJyA9PiBmYWxzZSwKCiAgICAgICAgLy8gSW5kaWNhdGVzIGEgcmVxdWlyZW1lbnQgZm9yIHRoZSBOYW1lSUQgZWxlbWVudCBvbiB0aGUgU0FNTFJlc3BvbnNlCiAgICAgICAgLy8gcmVjZWl2ZWQgYnkgdGhpcyBTUCB0byBiZSBwcmVzZW50LgogICAgICAgICd3YW50TmFtZUlkJyA9PiB0cnVlLAoKICAgICAgICAvLyBJbmRpY2F0ZXMgYSByZXF1aXJlbWVudCBmb3IgdGhlIE5hbWVJRCByZWNlaXZlZCBieQogICAgICAgIC8vIHRoaXMgU1AgdG8gYmUgZW5jcnlwdGVkLgogICAgICAgICd3YW50TmFtZUlkRW5jcnlwdGVkJyA9PiBmYWxzZSwKCiAgICAgICAgLy8gQXV0aGVudGljYXRpb24gY29udGV4dC4KICAgICAgICAvLyBTZXQgdG8gZmFsc2UgYW5kIG5vIEF1dGhDb250ZXh0IHdpbGwgYmUgc2VudCBpbiB0aGUgQXV0aE5SZXF1ZXN0LgogICAgICAgIC8vIFNldCB0cnVlIG9yIGRvbid0IHByZXNlbnQgdGhpcyBwYXJhbWV0ZXIgYW5kIHlvdSB3aWxsIGdldCBhbiBBdXRoQ29udGV4dCAnZXhhY3QnICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YWM6Y2xhc3NlczpQYXNzd29yZFByb3RlY3RlZFRyYW5zcG9ydCcuCiAgICAgICAgLy8gU2V0IGFuIGFycmF5IHdpdGggdGhlIHBvc3NpYmxlIGF1dGggY29udGV4dCB2YWx1ZXM6IGFycmF5KCd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YWM6Y2xhc3NlczpQYXNzd29yZCcsICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YWM6Y2xhc3NlczpYNTA5JykuCiAgICAgICAgJ3JlcXVlc3RlZEF1dGhuQ29udGV4dCcgPT4gZmFsc2UsCgogICAgICAgIC8vIEluZGljYXRlcyBpZiB0aGUgU1Agd2lsbCB2YWxpZGF0ZSBhbGwgcmVjZWl2ZWQgeG1scy4KICAgICAgICAvLyAoSW4gb3JkZXIgdG8gdmFsaWRhdGUgdGhlIHhtbCwgJ3N0cmljdCcgYW5kICd3YW50WE1MVmFsaWRhdGlvbicgbXVzdCBiZSB0cnVlKS4KICAgICAgICAnd2FudFhNTFZhbGlkYXRpb24nID0+IHRydWUsCgogICAgICAgIC8vIElmIHRydWUsIFNBTUxSZXNwb25zZXMgd2l0aCBhbiBlbXB0eSB2YWx1ZSBhdCBpdHMgRGVzdGluYXRpb24KICAgICAgICAvLyBhdHRyaWJ1dGUgd2lsbCBub3QgYmUgcmVqZWN0ZWQgZm9yIHRoaXMgZmFjdC4KICAgICAgICAncmVsYXhEZXN0aW5hdGlvblZhbGlkYXRpb24nID0+IGZhbHNlLAoKICAgICAgICAvLyBJZiB0cnVlLCBEZXN0aW5hdGlvbiBVUkwgc2hvdWxkIHN0cmljdGx5IG1hdGNoIHRvIHRoZSBhZGRyZXNzIHRvCiAgICAgICAgLy8gd2hpY2ggdGhlIHJlc3BvbnNlIGhhcyBiZWVuIHNlbnQuCiAgICAgICAgLy8gTm90aWNlIHRoYXQgaWYgJ3JlbGF4RGVzdGluYXRpb25WYWxpZGF0aW9uJyBpcyB0cnVlIGFuIGVtcHR5IERlc3RpbmF0aW9uCiAgICAgICAgLy8gd2lsbCBiZSBhY2NlcHRlZC4KICAgICAgICAnZGVzdGluYXRpb25TdHJpY3RseU1hdGNoZXMnID0+IGZhbHNlLAoKICAgICAgICAvLyBJZiB0cnVlLCB0aGUgdG9vbGtpdCB3aWxsIG5vdCByYWlzZWQgYW4gZXJyb3Igd2hlbiB0aGUgU3RhdGVtZW50IEVsZW1lbnQKICAgICAgICAvLyBjb250YWluIGF0cmlidXRlIGVsZW1lbnRzIHdpdGggbmFtZSBkdXBsaWNhdGVkCiAgICAgICAgJ2FsbG93UmVwZWF0QXR0cmlidXRlTmFtZScgPT4gZmFsc2UsCgogICAgICAgIC8vIElmIHRydWUsIFNBTUxSZXNwb25zZXMgd2l0aCBhbiBJblJlc3BvbnNlVG8gdmFsdWUgd2lsbCBiZSByZWplY3RlZCBpZiBub3QKICAgICAgICAvLyBBdXRoTlJlcXVlc3QgSUQgcHJvdmlkZWQgdG8gdGhlIHZhbGlkYXRpb24gbWV0aG9kLgogICAgICAgICdyZWplY3RVbnNvbGljaXRlZFJlc3BvbnNlc1dpdGhJblJlc3BvbnNlVG8nID0+IGZhbHNlLAoKICAgICAgICAvLyBBbGdvcml0aG0gdGhhdCB0aGUgdG9vbGtpdCB3aWxsIHVzZSBvbiBzaWduaW5nIHByb2Nlc3MuIE9wdGlvbnM6CiAgICAgICAgLy8gICAgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNyc2Etc2hhMScKICAgICAgICAvLyAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI2RzYS1zaGExJwogICAgICAgIC8vICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhMjU2JwogICAgICAgIC8vICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhMzg0JwogICAgICAgIC8vICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhNTEyJwogICAgICAgIC8vIE5vdGljZSB0aGF0IHJzYS1zaGExIGlzIGEgZGVwcmVjYXRlZCBhbGdvcml0aG0gYW5kIHNob3VsZCBub3QgYmUgdXNlZAogICAgICAgICdzaWduYXR1cmVBbGdvcml0aG0nID0+ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhMjU2JywKCiAgICAgICAgLy8gQWxnb3JpdGhtIHRoYXQgdGhlIHRvb2xraXQgd2lsbCB1c2Ugb24gZGlnZXN0IHByb2Nlc3MuIE9wdGlvbnM6CiAgICAgICAgLy8gICAgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNzaGExJwogICAgICAgIC8vICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNzaGEyNTYnCiAgICAgICAgLy8gICAgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZHNpZy1tb3JlI3NoYTM4NCcKICAgICAgICAvLyAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjc2hhNTEyJwogICAgICAgIC8vIE5vdGljZSB0aGF0IHNoYTEgaXMgYSBkZXByZWNhdGVkIGFsZ29yaXRobSBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkCiAgICAgICAgJ2RpZ2VzdEFsZ29yaXRobScgPT4gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3NoYTI1NicsCgogICAgICAgIC8vIEFsZ29yaXRobSB0aGF0IHRoZSB0b29sa2l0IHdpbGwgdXNlIGZvciBlbmNyeXB0aW9uIHByb2Nlc3MuIE9wdGlvbnM6CiAgICAgICAgLy8gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3RyaXBsZWRlcy1jYmMnCiAgICAgICAgLy8gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI2FlczEyOC1jYmMnCiAgICAgICAgLy8gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI2FlczE5Mi1jYmMnCiAgICAgICAgLy8gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI2FlczI1Ni1jYmMnCiAgICAgICAgLy8gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDkveG1sZW5jMTEjYWVzMTI4LWdjbScKICAgICAgICAvLyAnaHR0cDovL3d3dy53My5vcmcvMjAwOS94bWxlbmMxMSNhZXMxOTItZ2NtJwogICAgICAgIC8vICdodHRwOi8vd3d3LnczLm9yZy8yMDA5L3htbGVuYzExI2FlczI1Ni1nY20nOwogICAgICAgIC8vIE5vdGljZSB0aGF0IGFlcy1jYmMgYXJlIG5vdCBjb25zaWRlciBzZWN1cmUgYW55bW9yZSBzbyBzaG91bGQgbm90IGJlIHVzZWQKICAgICAgICAnZW5jcnlwdGlvbl9hbGdvcml0aG0nID0+ICdodHRwOi8vd3d3LnczLm9yZy8yMDA5L3htbGVuYzExI2FlczEyOC1nY20nLAoKICAgICAgICAvLyBBREZTIFVSTC1FbmNvZGVzIFNBTUwgZGF0YSBhcyBsb3dlcmNhc2UsIGFuZCB0aGUgdG9vbGtpdCBieSBkZWZhdWx0IHVzZXMKICAgICAgICAvLyB1cHBlcmNhc2UuIFR1cm4gaXQgVHJ1ZSBmb3IgQURGUyBjb21wYXRpYmlsaXR5IG9uIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24KICAgICAgICAnbG93ZXJjYXNlVXJsZW5jb2RpbmcnID0+IGZhbHNlLAogICAgKSwKCiAgICAvLyBDb250YWN0IGluZm9ybWF0aW9uIHRlbXBsYXRlLCBpdCBpcyByZWNvbW1lbmRlZCB0byBzdXBwbHkgYQogICAgLy8gdGVjaG5pY2FsIGFuZCBzdXBwb3J0IGNvbnRhY3RzLgogICAgJ2NvbnRhY3RQZXJzb24nID0+IGFycmF5KAogICAgICAgICd0ZWNobmljYWwnID0+IGFycmF5KAogICAgICAgICAgICAnZ2l2ZW5OYW1lJyA9PiAnJywKICAgICAgICAgICAgJ2VtYWlsQWRkcmVzcycgPT4gJycKICAgICAgICApLAogICAgICAgICdzdXBwb3J0JyA9PiBhcnJheSgKICAgICAgICAgICAgJ2dpdmVuTmFtZScgPT4gJycsCiAgICAgICAgICAgICdlbWFpbEFkZHJlc3MnID0+ICcnCiAgICAgICAgKSwKICAgICksCgogICAgLy8gT3JnYW5pemF0aW9uIGluZm9ybWF0aW9uIHRlbXBsYXRlLCB0aGUgaW5mbyBpbiBlbl9VUyBsYW5nIGlzCiAgICAvLyByZWNvbW1lbmRlZCwgYWRkIG1vcmUgaWYgcmVxdWlyZWQuCiAgICAnb3JnYW5pemF0aW9uJyA9PiBhcnJheSgKICAgICAgICAnZW4tVVMnID0+IGFycmF5KAogICAgICAgICAgICAnbmFtZScgPT4gJycsCiAgICAgICAgICAgICdkaXNwbGF5bmFtZScgPT4gJycsCiAgICAgICAgICAgICd1cmwnID0+ICcnCiAgICAgICAgKSwKICAgICksCik7CmBgYAoKVGhlIGNvbXByZXNzaW9uIHNldHRpbmdzIGFsbG93IHlvdSB0byBpbnN0cnVjdCB3aGV0aGVyIG9yIG5vdCB0aGUgSWRQIGNhbiBhY2NlcHQKZGF0YSB0aGF0IGhhcyBiZWVuIGNvbXByZXNzZWQgdXNpbmcgW2d6aXBdKGd6aXApICgncmVxdWVzdHMnIGFuZCAncmVzcG9uc2VzJykuCkJ1dCBpZiB3ZSBwcm92aWRlIGEgYCRkZWZsYXRlYCBib29sZWFuIHBhcmFtZXRlciB0byB0aGUgYGdldFJlcXVlc3RgIG9yIGBnZXRSZXNwb25zZWAgbWV0aG9kIGl0IHdpbGwgaGF2ZSBwcmlvcml0eSBvdmVyIHRoZSBjb21wcmVzc2lvbiBzZXR0aW5ncy4KCkluIHRoZSBzZWN1cml0eSBzZWN0aW9uLCB5b3UgY2FuIHNldCB0aGUgd2F5IHRoYXQgdGhlIFNQIHdpbGwgaGFuZGxlIHRoZSBtZXNzYWdlcwphbmQgYXNzZXJ0aW9ucy4gQ29udGFjdCB0aGUgYWRtaW4gb2YgdGhlIElkUCBhbmQgYXNrIGhpbSB3aGF0IHRoZSBJZFAgZXhwZWN0cywKYW5kIGRlY2lkZSB3aGF0IHZhbGlkYXRpb25zIHdpbGwgaGFuZGxlIHRoZSBTUCBhbmQgd2hhdCByZXF1aXJlbWVudHMgdGhlIFNQIHdpbGwgaGF2ZQphbmQgY29tbXVuaWNhdGUgdGhlbSB0byB0aGUgSWRQJ3MgYWRtaW4gdG9vLgoKT25jZSB3ZSBrbm93IHdoYXQga2luZCBvZiBkYXRhIGNvdWxkIGJlIGNvbmZpZ3VyZWQsIGxldCdzIHRhbGsgYWJvdXQgdGhlIHdheQpzZXR0aW5ncyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIHRvb2xraXQuCgpUaGUgc2V0dGluZ3MgZmlsZXMgZGVzY3JpYmVkIChgc2V0dGluZ3MucGhwYCBhbmQgYGFkdmFuY2VkX3NldHRpbmdzLnBocGApIGFyZSBsb2FkZWQKYnkgdGhlIHRvb2xraXQgaWYgbm8gb3RoZXIgYXJyYXkgd2l0aCBzZXR0aW5ncyBpbmZvIGlzIHByb3ZpZGVkIGluIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgdG9vbGtpdC4gTGV0J3Mgc2VlIHNvbWUgZXhhbXBsZXMuCgpgYGBwaHAKLy8gSW5pdGlhbGl6ZXMgdG9vbGtpdCB3aXRoIHNldHRpbmdzLnBocCAmIGFkdmFuY2VkX3NldHRpbmdzIGZpbGVzLgokYXV0aCA9IG5ldyBPbmVMb2dpblxTYW1sMlxBdXRoKCk7Ci8vb3IKJHNldHRpbmdzID0gbmV3IE9uZUxvZ2luXFNhbWwyXFNldHRpbmdzKCk7CgovLyBJbml0aWFsaXplcyB0b29sa2l0IHdpdGggdGhlIGFycmF5IHByb3ZpZGVkLgokYXV0aCA9IG5ldyBPbmVMb2dpblxTYW1sMlxBdXRoKCRzZXR0aW5nc0luZm8pOwovL29yCiRzZXR0aW5ncyA9IG5ldyBPbmVMb2dpblxTYW1sMlxTZXR0aW5ncygkc2V0dGluZ3NJbmZvKTsKYGBgCgpZb3UgY2FuIGRlY2xhcmUgdGhlIGAkc2V0dGluZ3NJbmZvYCBpbiB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBjb25zdHJ1Y3RvcgpleGVjdXRpb24gb3IgbG9jYXRlIHRoZW0gaW4gYW55IGZpbGUgYW5kIGxvYWQgdGhlIGZpbGUgaW4gb3JkZXIgdG8gZ2V0IHRoZQphcnJheSBhdmFpbGFibGUgYXMgd2Ugc2VlIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZToKCmBgYHBocAo8P3BocAoKcmVxdWlyZV9vbmNlICdjdXN0b21fc2V0dGluZ3MucGhwJzsgIC8vIFRoZSBjdXN0b21fc2V0dGluZ3MucGhwIGNvbnRhaW5zIGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICRzZXR0aW5nc0luZm8gYXJyYXkuCgokYXV0aCA9IG5ldyBPbmVMb2dpblxTYW1sMlxBdXRoKCRzZXR0aW5nc0luZm8pOwpgYGAKCgojIyMjIEhvdyBsb2FkIHRoZSBsaWJyYXJ5ICMjIyMKCgpJbiBvcmRlciB0byB1c2UgdGhlIHRvb2xraXQgbGlicmFyeSwgaWYgeW91ciBwcm9qZWN0IHN1cHBvcnQgY29tcG9zZXIgeW91IG9ubHkKbmVlZCB0byBpbnN0YWxsIGl0IHdpdGggY29tcG9zZXIgKFNlZSB0aGUgaW5zdGFsbGF0aW9uIHNlY3Rpb24pIGFuZCB5b3UgYXJlIGRvbmUuCgoKSWYgeW91ciBwcm9qZWN0IGRvZXNuJ3QgdXNlIGNvbXBvc2VyIHlvdSBuZWVkIHRvIGltcG9ydCB0aGUgYF90b29sa2l0X2xvYWRlci5waHBgCmZpbGUgbG9jYXRlZCBvbiB0aGUgYmFzZSBmb2xkZXIgb2YgdGhlIHRvb2xraXQuIFlvdSBjYW4gbG9hZCB0aGlzIGZpbGUgaW4gdGhpcyB3YXk6CgpgYGBwaHAKPD9waHAKCmRlZmluZSgiVE9PTEtJVF9QQVRIIiwgJy92YXIvd3d3L3BocC1zYW1sLycpOwpyZXF1aXJlX29uY2UoVE9PTEtJVF9QQVRIIC4gJ190b29sa2l0X2xvYWRlci5waHAnKTsKYGBgCgpBZnRlciB0aGF0IGxpbmUgd2Ugd2lsbCBiZSBhYmxlIHRvIHVzZSB0aGUgY2xhc3NlcyAoYW5kIHRoZWlyIG1ldGhvZHMpIG9mIHRoZQp0b29sa2l0IChiZWNhdXNlIHRoZSBleHRlcm5hbCBhbmQgdGhlIFNhbWwyIGxpYnJhcmllcyBmaWxlcyBhcmUgbG9hZGVkKS4KClRoYXQgdG9vbGtpdCBkZXBlbmRzIG9uIFt4bWxzZWNsaWJzXShodHRwczovL2dpdGh1Yi5jb20vcm9icmljaGFyZHMveG1sc2VjbGlicykgMy5YLlggYnJhbmNoLAp5b3Ugd2lsbCBuZWVkIHRvIGdldCBpdHMgY29kZSBhbmQgcGxhY2Ugb24geW91ciBwcm9qZWN0IGFuZCByZXVzZSB0aGUgX3Rvb2xraXRfbG9hZGVyLnBocApmaWxlIHRvIGluY2x1ZGUgeG1sc2VjbGlicyBhcyB3ZWxsLgoKCiMjIyMgSW5pdGlhdGUgU1NPICMjIyMKCkluIG9yZGVyIHRvIHNlbmQgYW4gYEF1dGhOUmVxdWVzdGAgdG8gdGhlIElkUDoKCmBgYHBocAo8P3BocAoKZGVmaW5lKCJUT09MS0lUX1BBVEgiLCAnL3Zhci93d3cvcGhwLXNhbWwvJyk7CnJlcXVpcmVfb25jZShUT09MS0lUX1BBVEggLiAnX3Rvb2xraXRfbG9hZGVyLnBocCcpOyAgIC8vIFdlIGxvYWQgdGhlIFNBTUwyIGxpYgoKJGF1dGggPSBuZXcgT25lTG9naW5cU2FtbDJcQXV0aCgpOyAvLyBDb25zdHJ1Y3RvciBvZiB0aGUgU1AsIGxvYWRzIHNldHRpbmdzLnBocAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBhZHZhbmNlZF9zZXR0aW5ncy5waHAKJGF1dGgtPmxvZ2luKCk7ICAgLy8gTWV0aG9kIHRoYXQgc2VudCB0aGUgQXV0aE5SZXF1ZXN0CmBgYAoKVGhlIGBBdXRoTlJlcXVlc3RgIHdpbGwgYmUgc2VudCBzaWduZWQgb3IgdW5zaWduZWQgYmFzZWQgb24gdGhlIHNlY3VyaXR5IGluZm8Kb2YgdGhlIGBhZHZhbmNlZF9zZXR0aW5ncy5waHBgIChgJ2F1dGhuUmVxdWVzdHNTaWduZWQnYCkuCgoKVGhlIElkUCB3aWxsIHRoZW4gcmV0dXJuIHRoZSBTQU1MIFJlc3BvbnNlIHRvIHRoZSB1c2VyJ3MgY2xpZW50LiBUaGUgY2xpZW50IGlzIHRoZW4gZm9yd2FyZGVkIHRvIHRoZSBBdHRyaWJ1dGUgQ29uc3VtZXIgU2VydmljZSBvZiB0aGUgU1Agd2l0aCB0aGlzIGluZm9ybWF0aW9uLiBJZiB3ZSBkbyBub3Qgc2V0IGEgYCd1cmwnYCBwYXJhbSBpbiB0aGUgbG9naW4gbWV0aG9kIGFuZCB3ZSBhcmUgdXNpbmcgdGhlIGRlZmF1bHQgQUNTIHByb3ZpZGVkIGJ5IHRoZSB0b29sa2l0IChgZW5kcG9pbnRzL2Fjcy5waHBgKSwgdGhlbiB0aGUgQUNTIGVuZHBvaW50IHdpbGwgcmVkaXJlY3QgdGhlIHVzZXIgdG8gdGhlIGZpbGUgdGhhdCBsYXVuY2hlZCB0aGUgU1NPIHJlcXVlc3QuCgpXZSBjYW4gc2V0IGEgYCdyZXR1cm5UbydgIHVybCB0byBjaGFuZ2UgdGhlIHdvcmtmbG93IGFuZCByZWRpcmVjdCB0aGUgdXNlciB0byB0aGUgb3RoZXIgUEhQIGZpbGUuCgpgYGBwaHAKJG5ld1RhcmdldFVybCA9ICdodHRwOi8vZXhhbXBsZS5jb20vY29uc3VtZTIucGhwJzsKJGF1dGggPSBuZXcgT25lTG9naW5cU2FtbDJcQXV0aCgpOwokYXV0aC0+bG9naW4oJG5ld1RhcmdldFVybCk7CmBgYAoKVGhlIGxvZ2luIG1ldGhvZCBjYW4gcmVjZWl2ZSBvdGhlciBzaXggb3B0aW9uYWwgcGFyYW1ldGVyczoKCiogYCRwYXJhbWV0ZXJzYCAtIEFuIGFycmF5IG9mIHBhcmFtZXRlcnMgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBgR0VUYCBpbiB0aGUgSFRUUC1SZWRpcmVjdC4KKiBgJGZvcmNlQXV0aG5gIC0gV2hlbiB0cnVlIHRoZSBgQXV0aE5SZXF1ZXN0YCB3aWxsIHNldCB0aGUgYEZvcmNlQXV0aG49J3RydWUnYAoqIGAkaXNQYXNzaXZlYCAtIFdoZW4gdHJ1ZSB0aGUgYEF1dGhOUmVxdWVzdGAgd2lsbCBzZXQgdGhlIGBJc3Bhc3NpdmU9J3RydWUnYAoqIGAkc3RheWAgLSBUcnVlIGlmIHdlIHdhbnQgdG8gc3RheSAocmV0dXJucyB0aGUgdXJsIHN0cmluZykgRmFsc2UgdG8gcmVkaXJlY3QKKiBgJHNldE5hbWVJZFBvbGljeWAgLSBXaGVuIHRydWUgdGhlIEF1dGhOUmVxdWVzdCB3aWxsIHNldCBhIG5hbWVJZFBvbGljeSBlbGVtZW50LgoqIGAkbmFtZUlkVmFsdWVSZXFgIC0gSW5kaWNhdGVzIHRvIHRoZSBJZFAgdGhlIHN1YmplY3QgdGhhdCBzaG91bGQgYmUgYXV0aGVudGljYXRlZC4KCklmIGEgbWF0Y2ggb24gdGhlIGZ1dHVyZSBTQU1MUmVzcG9uc2UgSUQgYW5kIHRoZSBBdXRoTlJlcXVlc3QgSUQgdG8gYmUgc2VudCBpcyByZXF1aXJlZCwgdGhhdCBBdXRoTlJlcXVlc3QgSUQgbXVzdCB0byBiZSBleHRyYWN0ZWQgYW5kIHNhdmVkLgoKYGBgcGhwCiRzc29CdWlsdFVybCA9ICRhdXRoLT5sb2dpbihudWxsLCBhcnJheSgpLCBmYWxzZSwgZmFsc2UsIHRydWUpOwokX1NFU1NJT05bJ0F1dGhOUmVxdWVzdElEJ10gPSAkYXV0aC0+Z2V0TGFzdFJlcXVlc3RJRCgpOwpoZWFkZXIoJ1ByYWdtYTogbm8tY2FjaGUnKTsKaGVhZGVyKCdDYWNoZS1Db250cm9sOiBuby1jYWNoZSwgbXVzdC1yZXZhbGlkYXRlJyk7CmhlYWRlcignTG9jYXRpb246ICcgLiAkc3NvQnVpbHRVcmwpOwpleGl0KCk7CmBgYAoKIyMjIyBUaGUgU1AgRW5kcG9pbnRzICMjIyMKClJlbGF0ZWQgdG8gdGhlIFNQIHRoZXJlIGFyZSB0aHJlZSBpbXBvcnRhbnQgdmlld3M6IFRoZSBtZXRhZGF0YSB2aWV3LCB0aGUgQUNTIHZpZXcgYW5kIHRoZSBTTFMgdmlldy4gVGhlIHRvb2xraXQKcHJvdmlkZXMgZXhhbXBsZXMgb2YgdGhvc2Ugdmlld3MgaW4gdGhlIGVuZHBvaW50cyBkaXJlY3RvcnkuCgojIyMjIyBTUCBNZXRhZGF0YSBgZW5kcG9pbnRzL21ldGFkYXRhLnBocGAgIyMjIyMKClRoaXMgY29kZSB3aWxsIHByb3ZpZGUgdGhlIFhNTCBtZXRhZGF0YSBmaWxlIG9mIG91ciBTUCwgYmFzZWQgb24gdGhlIGluZm8gdGhhdCB3ZSBwcm92aWRlZCBpbiB0aGUgc2V0dGluZ3MgZmlsZXMuCgpgYGBwaHAKPD9waHAKCmRlZmluZSgiVE9PTEtJVF9QQVRIIiwgJy92YXIvd3d3L3BocC1zYW1sLycpOwpyZXF1aXJlX29uY2UgZGlybmFtZShUT09MS0lUX1BBVEguJy9fdG9vbGtpdF9sb2FkZXIucGhwJzsKCnRyeSB7CiAgICAkYXV0aCA9IG5ldyBPbmVMb2dpblxTYW1sMlxBdXRoKCk7CiAgICAkc2V0dGluZ3MgPSAkYXV0aC0+Z2V0U2V0dGluZ3MoKTsKICAgICRtZXRhZGF0YSA9ICRzZXR0aW5ncy0+Z2V0U1BNZXRhZGF0YSgpOwogICAgJGVycm9ycyA9ICRzZXR0aW5ncy0+dmFsaWRhdGVNZXRhZGF0YSgkbWV0YWRhdGEpOwogICAgaWYgKGVtcHR5KCRlcnJvcnMpKSB7CiAgICAgICAgaGVhZGVyKCdDb250ZW50LVR5cGU6IHRleHQveG1sJyk7CiAgICAgICAgZWNobyAkbWV0YWRhdGE7CiAgICB9IGVsc2UgewogICAgICAgIHRocm93IG5ldyBPbmVMb2dpblxTYW1sMlxFcnJvcigKICAgICAgICAgICAgJ0ludmFsaWQgU1AgbWV0YWRhdGE6ICcuaW1wbG9kZSgnLCAnLCAkZXJyb3JzKSwKICAgICAgICAgICAgT25lTG9naW5cU2FtbDJcRXJyb3I6Ok1FVEFEQVRBX1NQX0lOVkFMSUQKICAgICAgICApOwogICAgfQp9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgIGVjaG8gJGUtPmdldE1lc3NhZ2UoKTsKfQpgYGAKVGhlIGBnZXRTUE1ldGFkYXRhYCB3aWxsIHJldHVybiB0aGUgbWV0YWRhdGEgc2lnbmVkIG9yIG5vdCBiYXNlZApvbiB0aGUgc2VjdXJpdHkgaW5mbyBvZiB0aGUgYGFkdmFuY2VkX3NldHRpbmdzLnBocGAgKGAnc2lnbk1ldGFkYXRhJ2ApLgoKQmVmb3JlIHRoZSBYTUwgbWV0YWRhdGEgaXMgZXhwb3NlZCwgYSBjaGVjayB0YWtlcyBwbGFjZSB0byBlbnN1cmUKdGhhdCB0aGUgaW5mbyB0byBiZSBwcm92aWRlZCBpcyB2YWxpZC4KCkluc3RlYWQgb2YgdXNlIHRoZSBBdXRoIG9iamVjdCwgeW91IGNhbiBkaXJlY3RseSB1c2UKCmBgYHBocAokc2V0dGluZ3MgPSBuZXcgT25lTG9naW5cU2FtbDJcU2V0dGluZ3MoJHNldHRpbmdzSW5mbywgdHJ1ZSk7CmBgYAp0byBnZXQgdGhlIHNldHRpbmdzIG9iamVjdCBhbmQgd2l0aCB0aGUgdHJ1ZSBwYXJhbWV0ZXIgd2Ugd2lsbCBhdm9pZCB0aGUgSWRQIFNldHRpbmdzIHZhbGlkYXRpb24uCgoKIyMjIyMgQXR0cmlidXRlIENvbnN1bWVyIFNlcnZpY2UoQUNTKSBgZW5kcG9pbnRzL2Fjcy5waHBgICMjIyMjCgpUaGlzIGNvZGUgaGFuZGxlcyB0aGUgU0FNTCByZXNwb25zZSB0aGF0IHRoZSBJZFAgZm9yd2FyZHMgdG8gdGhlIFNQIHRocm91Z2ggdGhlIHVzZXIncyBjbGllbnQuCgpgYGBwaHAKPD9waHAKCnNlc3Npb25fc3RhcnQoKTsgIC8vIElNUE9SVEFOVDogVGhpcyBpcyByZXF1aXJlZCBpbiBvcmRlciB0byBiZSBhYmxlCiAgICAgICAgICAgICAgICAgIC8vIHRvIHN0b3JlIHRoZSB1c2VyIGRhdGEgaW4gdGhlIHNlc3Npb24uCgpkZWZpbmUoIlRPT0xLSVRfUEFUSCIsICcvdmFyL3d3dy9waHAtc2FtbC8nKTsKcmVxdWlyZV9vbmNlIGRpcm5hbWUoVE9PTEtJVF9QQVRILicvX3Rvb2xraXRfbG9hZGVyLnBocCc7CgokYXV0aCA9IG5ldyBPbmVMb2dpblxTYW1sMlxBdXRoKCk7CgppZiAoaXNzZXQoJF9TRVNTSU9OKSAmJiBpc3NldCgkX1NFU1NJT05bJ0F1dGhOUmVxdWVzdElEJ10pKSB7CiAgICAkcmVxdWVzdElEID0gJF9TRVNTSU9OWydBdXRoTlJlcXVlc3RJRCddOwp9IGVsc2UgewogICAgJHJlcXVlc3RJRCA9IG51bGw7Cn0KCiRhdXRoLT5wcm9jZXNzUmVzcG9uc2UoJHJlcXVlc3RJRCk7CnVuc2V0KCRfU0VTU0lPTlsnQXV0aE5SZXF1ZXN0SUQnXSk7CgokZXJyb3JzID0gJGF1dGgtPmdldEVycm9ycygpOwoKaWYgKCFlbXB0eSgkZXJyb3JzKSkgewogICAgZWNobyAnPHA+JyAuIGltcGxvZGUoJywgJywgJGVycm9ycykgLiAnPC9wPic7CiAgICBleGl0KCk7Cn0KCmlmICghJGF1dGgtPmlzQXV0aGVudGljYXRlZCgpKSB7CiAgICBlY2hvICI8cD5Ob3QgYXV0aGVudGljYXRlZDwvcD4iOwogICAgZXhpdCgpOwp9CgokX1NFU1NJT05bJ3NhbWxVc2VyZGF0YSddID0gJGF1dGgtPmdldEF0dHJpYnV0ZXMoKTsKJF9TRVNTSU9OWydzYW1sTmFtZUlkJ10gPSAkYXV0aC0+Z2V0TmFtZUlkKCk7CiRfU0VTU0lPTlsnc2FtbE5hbWVJZEZvcm1hdCddID0gJGF1dGgtPmdldE5hbWVJZEZvcm1hdCgpOwokX1NFU1NJT05bJ3NhbWxOYW1laWROYW1lUXVhbGlmaWVyJ10gPSAkYXV0aC0+Z2V0TmFtZUlkTmFtZVF1YWxpZmllcigpOwokX1NFU1NJT05bJ3NhbWxOYW1laWRTUE5hbWVRdWFsaWZpZXInXSA9ICRhdXRoLT5nZXROYW1lSWRTUE5hbWVRdWFsaWZpZXIoKTsKJF9TRVNTSU9OWydzYW1sU2Vzc2lvbkluZGV4J10gPSAkYXV0aC0+Z2V0U2Vzc2lvbkluZGV4KCk7CgppZiAoaXNzZXQoJF9QT1NUWydSZWxheVN0YXRlJ10pICYmIE9uZUxvZ2luXFNhbWwyXFV0aWxzOjpnZXRTZWxmVVJMKCkgIT0gJF9QT1NUWydSZWxheVN0YXRlJ10pIHsKICAgIC8vIFRvIGF2b2lkICdPcGVuIFJlZGlyZWN0JyBhdHRhY2tzLCBiZWZvcmUgZXhlY3V0ZSB0aGUKICAgIC8vIHJlZGlyZWN0aW9uIGNvbmZpcm0gdGhlIHZhbHVlIG9mICRfUE9TVFsnUmVsYXlTdGF0ZSddIGlzIGEgLy8gdHJ1c3RlZCBVUkwuCiAgICAkYXV0aC0+cmVkaXJlY3RUbygkX1BPU1RbJ1JlbGF5U3RhdGUnXSk7Cn0KCiRhdHRyaWJ1dGVzID0gJF9TRVNTSU9OWydzYW1sVXNlcmRhdGEnXTsKJG5hbWVJZCA9ICRfU0VTU0lPTlsnc2FtbE5hbWVJZCddOwoKZWNobyAnPGgxPklkZW50aWZpZWQgdXNlcjogJy4gaHRtbGVudGl0aWVzKCRuYW1lSWQpIC4nPC9oMT4nOwoKaWYgKCFlbXB0eSgkYXR0cmlidXRlcykpIHsKICAgIGVjaG8gJzxoMj4nIC4gXygnVXNlciBhdHRyaWJ1dGVzOicpIC4gJzwvaDI+JzsKICAgIGVjaG8gJzx0YWJsZT48dGhlYWQ+PHRoPicgLiBfKCdOYW1lJykgLiAnPC90aD48dGg+JyAuIF8oJ1ZhbHVlcycpIC4gJzwvdGg+PC90aGVhZD48dGJvZHk+JzsKICAgIGZvcmVhY2ggKCRhdHRyaWJ1dGVzIGFzICRhdHRyaWJ1dGVOYW1lID0+ICRhdHRyaWJ1dGVWYWx1ZXMpIHsKICAgICAgICBlY2hvICc8dHI+PHRkPicgLiBodG1sZW50aXRpZXMoJGF0dHJpYnV0ZU5hbWUpIC4gJzwvdGQ+PHRkPjx1bD4nOwogICAgICAgIGZvcmVhY2ggKCRhdHRyaWJ1dGVWYWx1ZXMgYXMgJGF0dHJpYnV0ZVZhbHVlKSB7CiAgICAgICAgICAgIGVjaG8gJzxsaT4nIC4gaHRtbGVudGl0aWVzKCRhdHRyaWJ1dGVWYWx1ZSkgLiAnPC9saT4nOwogICAgICAgIH0KICAgICAgICBlY2hvICc8L3VsPjwvdGQ+PC90cj4nOwogICAgfQogICAgZWNobyAnPC90Ym9keT48L3RhYmxlPic7Cn0gZWxzZSB7CiAgICBlY2hvIF8oJ05vIGF0dHJpYnV0ZXMgZm91bmQuJyk7Cn0KYGBgCgpUaGUgU0FNTCByZXNwb25zZSBpcyBwcm9jZXNzZWQgYW5kIHRoZW4gY2hlY2tlZCB0aGF0IHRoZXJlIGFyZSBubyBlcnJvcnMuCkl0IGFsc28gdmVyaWZpZXMgdGhhdCB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkIGFuZCBzdG9yZWQgdGhlIHVzZXJkYXRhIGluIHNlc3Npb24uCgpBdCB0aGF0IHBvaW50IHRoZXJlIGFyZSB0d28gcG9zc2libGUgYWx0ZXJuYXRpdmVzOgoKIDEuIElmIG5vIGBSZWxheVN0YXRlYCBpcyBwcm92aWRlZCwgd2UgY291bGQgc2hvdyB0aGUgdXNlciBkYXRhIGluIHRoaXMgdmlldwogb3IgaG93ZXZlciB3ZSB3YW50ZWQuCgogMi4gSWYgYFJlbGF5U3RhdGVgIGlzIHByb3ZpZGVkLCBhIHJlZGlyZWN0aW9uIHRha2VzIHBsYWNlLgoKTm90aWNlIHRoYXQgd2Ugc2F2ZWQgdGhlIHVzZXIgZGF0YSBpbiB0aGUgc2Vzc2lvbiBiZWZvcmUgdGhlIHJlZGlyZWN0aW9uIHRvCmhhdmUgdGhlIHVzZXIgZGF0YSBhdmFpbGFibGUgYXQgdGhlIGBSZWxheVN0YXRlYCB2aWV3LgoKCiMjIyMjIyBUaGUgYGdldEF0dHJpYnV0ZXNgIG1ldGhvZCAjIyMjIyMKCkluIG9yZGVyIHRvIHJldHJpZXZlIGF0dHJpYnV0ZXMgd2UgY2FuIHVzZToKCmBgYHBocAokYXR0cmlidXRlcyA9ICRhdXRoLT5nZXRBdHRyaWJ1dGVzKCk7CmBgYAoKV2l0aCB0aGlzIG1ldGhvZCB3ZSBnZXQgYWxsIHRoZSB1c2VyIGRhdGEgcHJvdmlkZWQgYnkgdGhlIElkUCBpbiB0aGUgQXNzZXJ0aW9uCm9mIHRoZSBTQU1MIFJlc3BvbnNlLgoKSWYgd2UgZXhlY3V0ZSBgYGBwcmludF9yKCRhdHRyaWJ1dGVzKWBgYCB3ZSBjb3VsZCBnZXQ6CgpgYGBwaHAKQXJyYXkKKAogICAgW2NuXSA9PiBBcnJheQogICAgICAgICgKICAgICAgICAgICAgWzBdID0+IEpvaG4KICAgICAgICApCiAgICBbc25dID0+IEFycmF5CiAgICAgICAgKAogICAgICAgICAgICBbMF0gPT4gRG9lCiAgICAgICAgKQogICAgW21haWxdID0+IEFycmF5CiAgICAgICAgKAogICAgICAgICAgICBbMF0gPT4gam9obi5kb2VAZXhhbXBsZS5jb20KICAgICAgICApCiAgICBbZ3JvdXBzXSA9PiBBcnJheQogICAgICAgICgKICAgICAgICAgICAgWzBdID0+IHVzZXJzCiAgICAgICAgICAgIFsxXSA9PiBtZW1iZXJzCiAgICAgICAgKQopCmBgYAoKRWFjaCBhdHRyaWJ1dGUgbmFtZSBjYW4gYmUgdXNlZCBhcyBhbiBpbmRleCBpbnRvIGAkYXR0cmlidXRlc2AgdG8gb2J0YWluIHRoZSB2YWx1ZS4gRXZlcnkgYXR0cmlidXRlIHZhbHVlCmlzIGFuIGFycmF5IC0gYSBzaW5nbGUtdmFsdWVkIGF0dHJpYnV0ZSBpcyBhbiBhcnJheSBvZiBhIHNpbmdsZSBlbGVtZW50LgoKClRoZSBmb2xsb3dpbmcgY29kZSBpcyBlcXVpdmFsZW50OgoKYGBgcGhwCiRhdHRyaWJ1dGVzID0gJGF1dGgtPmdldEF0dHJpYnV0ZXMoKTsKcHJpbnRfcigkYXR0cmlidXRlc1snY24nXSk7CmBgYAoKYGBgcGhwCnByaW50X3IoJGF1dGgtPmdldEF0dHJpYnV0ZSgnY24nKSk7CmBgYAoKCkJlZm9yZSB0cnlpbmcgdG8gZ2V0IGFuIGF0dHJpYnV0ZSwgY2hlY2sgdGhhdCB0aGUgdXNlciBpcwphdXRoZW50aWNhdGVkLiBJZiB0aGUgdXNlciBpc24ndCBhdXRoZW50aWNhdGVkIG9yIGlmIHRoZXJlIHdlcmUKbm8gYXR0cmlidXRlcyBpbiB0aGUgU0FNTCBhc3NlcnRpb24sIGFuIGVtcHR5IGFycmF5IHdpbGwgYmUKcmV0dXJuZWQuIEZvciBleGFtcGxlLCBpZiB3ZSBjYWxsIHRvIGBnZXRBdHRyaWJ1dGVzYCBiZWZvcmUgYQpgJGF1dGgtPnByb2Nlc3NSZXNwb25zZWAsIHRoZSBgZ2V0QXR0cmlidXRlcygpYCB3aWxsIHJldHVybiBhbgplbXB0eSBhcnJheS4KCgojIyMjIyBTaW5nbGUgTG9nb3V0IFNlcnZpY2UgKFNMUykgYGVuZHBvaW50cy9zbHMucGhwYCAjIyMjIwoKVGhpcyBjb2RlIGhhbmRsZXMgdGhlIExvZ291dCBSZXF1ZXN0IGFuZCB0aGUgTG9nb3V0IFJlc3BvbnNlcy4KCmBgYHBocAo8P3BocAoKc2Vzc2lvbl9zdGFydCgpOyAgLy8gSU1QT1JUQU5UOiBUaGlzIGlzIHJlcXVpcmVkIGluIG9yZGVyIHRvIGJlIGFibGUKICAgICAgICAgICAgICAgICAgLy8gdG8gY2xvc2UgdGhlIHVzZXIgc2Vzc2lvbi4KCmRlZmluZSgiVE9PTEtJVF9QQVRIIiwgJy92YXIvd3d3L3BocC1zYW1sLycpOwpyZXF1aXJlX29uY2UgZGlybmFtZShUT09MS0lUX1BBVEguJy9fdG9vbGtpdF9sb2FkZXIucGhwJzsKCiRhdXRoID0gbmV3IE9uZUxvZ2luXFNhbWwyXEF1dGgoKTsKCmlmIChpc3NldCgkX1NFU1NJT04pICYmIGlzc2V0KCRfU0VTU0lPTlsnTG9nb3V0UmVxdWVzdElEJ10pKSB7CiAgICAkcmVxdWVzdElEID0gJF9TRVNTSU9OWydMb2dvdXRSZXF1ZXN0SUQnXTsKfSBlbHNlIHsKICAgICRyZXF1ZXN0SUQgPSBudWxsOwp9CgokYXV0aC0+cHJvY2Vzc1NMTyhmYWxzZSwgJHJlcXVlc3RJRCk7CgokZXJyb3JzID0gJGF1dGgtPmdldEVycm9ycygpOwoKaWYgKGVtcHR5KCRlcnJvcnMpKSB7CiAgICBlY2hvICdTdWNjZXNzZnVsbHkgbG9nZ2VkIG91dCc7Cn0gZWxzZSB7CiAgICBlY2hvIGltcGxvZGUoJywgJywgJGVycm9ycyk7Cn0KYGBgCgpJZiB0aGUgU0xTIGVuZHBvaW50cyByZWNlaXZlcyBhIExvZ291dCBSZXNwb25zZSwgdGhlIHJlc3BvbnNlIGlzCnZhbGlkYXRlZCBhbmQgdGhlIHNlc3Npb24gY291bGQgYmUgY2xvc2VkCgoKCmBgYHBocAovLyBwYXJ0IG9mIHRoZSBwcm9jZXNzU0xPIG1ldGhvZAoKJGxvZ291dFJlc3BvbnNlID0gbmV3IE9uZUxvZ2luXFNhbWwyXExvZ291dFJlc3BvbnNlKCR0aGlzLT5fc2V0dGluZ3MsICRfR0VUWydTQU1MUmVzcG9uc2UnXSk7CmlmICghJGxvZ291dFJlc3BvbnNlLT5pc1ZhbGlkKCRyZXF1ZXN0SWQpKSB7CiAgICAkdGhpcy0+X2Vycm9yc1tdID0gJ2ludmFsaWRfbG9nb3V0X3Jlc3BvbnNlJzsKfSBlbHNlIGlmICgkbG9nb3V0UmVzcG9uc2UtPmdldFN0YXR1cygpICE9PSBPbmVMb2dpblxTYW1sMlxDb25zdGFudHM6OlNUQVRVU19TVUNDRVNTKSB7CiAgICAkdGhpcy0+X2Vycm9yc1tdID0gJ2xvZ291dF9ub3Rfc3VjY2Vzcyc7Cn0gZWxzZSB7CiAgICBpZiAoISRrZWVwTG9jYWxTZXNzaW9uKSB7CiAgICAgICAgT25lTG9naW5cU2FtbDJcVXRpbHM6OmRlbGV0ZUxvY2FsU2Vzc2lvbigpOwogICAgfQp9CmBgYAoKSWYgdGhlIFNMUyBlbmRwb2ludHMgcmVjZWl2ZXMgYW4gTG9nb3V0IFJlcXVlc3QsIHRoZSByZXF1ZXN0IGlzIHZhbGlkYXRlZCwKdGhlIHNlc3Npb24gaXMgY2xvc2VkIGFuZCBhIExvZ291dCBSZXNwb25zZSBpcyBzZW50IHRvIHRoZSBTTFMgZW5kcG9pbnQgb2YKdGhlIElkUC4KCmBgYHBocAovLyBwYXJ0IG9mIHRoZSBwcm9jZXNzU0xPIG1ldGhvZAoKJGRlY29kZWQgPSBiYXNlNjRfZGVjb2RlKCRfR0VUWydTQU1MUmVxdWVzdCddKTsKJHJlcXVlc3QgPSBnemluZmxhdGUoJGRlY29kZWQpOwppZiAoIU9uZUxvZ2luXFNhbWwyXExvZ291dFJlcXVlc3Q6OmlzVmFsaWQoJHRoaXMtPl9zZXR0aW5ncywgJHJlcXVlc3QpKSB7CiAgICAkdGhpcy0+X2Vycm9yc1tdID0gJ2ludmFsaWRfbG9nb3V0X3JlcXVlc3QnOwp9IGVsc2UgewogICAgaWYgKCEka2VlcExvY2FsU2Vzc2lvbikgewogICAgICAgIE9uZUxvZ2luXFNhbWwyXFV0aWxzOjpkZWxldGVMb2NhbFNlc3Npb24oKTsKICAgIH0KCiAgICAkaW5SZXNwb25zZVRvID0gJHJlcXVlc3QtPmlkOwogICAgJHJlc3BvbnNlQnVpbGRlciA9IG5ldyBPbmVMb2dpblxTYW1sMlxMb2dvdXRSZXNwb25zZSgkdGhpcy0+X3NldHRpbmdzKTsKICAgICRyZXNwb25zZUJ1aWxkZXItPmJ1aWxkKCRpblJlc3BvbnNlVG8pOwogICAgJGxvZ291dFJlc3BvbnNlID0gJHJlc3BvbnNlQnVpbGRlci0+Z2V0UmVzcG9uc2UoKTsKCiAgICAkcGFyYW1ldGVycyA9IGFycmF5KCdTQU1MUmVzcG9uc2UnID0+ICRsb2dvdXRSZXNwb25zZSk7CiAgICBpZiAoaXNzZXQoJF9HRVRbJ1JlbGF5U3RhdGUnXSkpIHsKICAgICAgICAkcGFyYW1ldGVyc1snUmVsYXlTdGF0ZSddID0gJF9HRVRbJ1JlbGF5U3RhdGUnXTsKICAgIH0KCiAgICAkc2VjdXJpdHkgPSAkdGhpcy0+X3NldHRpbmdzLT5nZXRTZWN1cml0eURhdGEoKTsKICAgIGlmIChpc3NldCgkc2VjdXJpdHlbJ2xvZ291dFJlc3BvbnNlU2lnbmVkJ10pICYmICRzZWN1cml0eVsnbG9nb3V0UmVzcG9uc2VTaWduZWQnXSkgewogICAgICAgICRzaWduYXR1cmUgPSAkdGhpcy0+YnVpbGRSZXNwb25zZVNpZ25hdHVyZSgkbG9nb3V0UmVzcG9uc2UsICRwYXJhbWV0ZXJzWydSZWxheVN0YXRlJ10sICRzZWN1cml0eVsnc2lnbmF0dXJlQWxnb3JpdGhtJ10pOwogICAgICAgICRwYXJhbWV0ZXJzWydTaWdBbGcnXSA9ICRzZWN1cml0eVsnc2lnbmF0dXJlQWxnb3JpdGhtJ107CiAgICAgICAgJHBhcmFtZXRlcnNbJ1NpZ25hdHVyZSddID0gJHNpZ25hdHVyZTsKICAgIH0KCiAgICAkdGhpcy0+cmVkaXJlY3RUbygkdGhpcy0+Z2V0U0xPdXJsKCksICRwYXJhbWV0ZXJzKTsKfQpgYGAKCklmIHlvdSBhcmVuJ3QgdXNpbmcgdGhlIGRlZmF1bHQgUEhQIHNlc3Npb24sIG9yIG90aGVyd2lzZSBuZWVkIGEgbWFudWFsCndheSB0byBkZXN0cm95IHRoZSBzZXNzaW9uLCB5b3UgY2FuIHBhc3MgYSBjYWxsYmFjayBtZXRob2QgdG8gdGhlCmBwcm9jZXNzU0xPYCBtZXRob2QgYXMgdGhlIGZvdXJ0aCBwYXJhbWV0ZXIKCmBgYHBocAoka2VlcExvY2FsU2Vzc2lvbiA9IEZhbHNlOwokY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAvLyBEZXN0cm95IHVzZXIgc2Vzc2lvbgp9OwoKJGF1dGgtPnByb2Nlc3NTTE8oJGtlZXBMb2NhbFNlc3Npb24sIG51bGwsIGZhbHNlLCAkY2FsbGJhY2spOwpgYGAKCgpJZiB3ZSBkb24ndCB3YW50IHRoYXQgYHByb2Nlc3NTTE9gIHRvIGRlc3Ryb3kgdGhlIHNlc3Npb24sIHBhc3MgYSB0cnVlCnBhcmFtZXRlciB0byB0aGUgYHByb2Nlc3NTTE9gIG1ldGhvZAoKYGBgcGhwCiRrZWVwTG9jYWxTZXNzaW9uID0gVHJ1ZTsKJGF1dGgtPnByb2Nlc3NTTE8oJGtlZXBMb2NhbFNlc3Npb24pOwpgYGAKCiMjIyMgSW5pdGlhdGUgU0xPICMjIyMKCkluIG9yZGVyIHRvIHNlbmQgYSBMb2dvdXQgUmVxdWVzdCB0byB0aGUgSWRQOgoKYGBgcGhwCjw/cGhwCgpkZWZpbmUoIlRPT0xLSVRfUEFUSCIsICcvdmFyL3d3dy9waHAtc2FtbC8nKTsKcmVxdWlyZV9vbmNlKFRPT0xLSVRfUEFUSCAuICdfdG9vbGtpdF9sb2FkZXIucGhwJyk7CgokYXV0aCA9IG5ldyBPbmVMb2dpblxTYW1sMlxBdXRoKCk7CgokYXV0aC0+bG9nb3V0KCk7ICAgLy8gTWV0aG9kIHRoYXQgc2VudCB0aGUgTG9nb3V0IFJlcXVlc3QuCmBgYAoKQWxzbyB0aGVyZSBhcmUgZWlnaHQgb3B0aW9uYWwgcGFyYW1ldGVycyB0aGF0IGNhbiBiZSBzZXQ6CiogYCRyZXR1cm5Ub2AgLSBUaGUgdGFyZ2V0IFVSTCB0aGUgdXNlciBzaG91bGQgYmUgcmV0dXJuZWQgdG8gYWZ0ZXIgbG9nb3V0LgoqIGAkcGFyYW1ldGVyc2AgLSBFeHRyYSBwYXJhbWV0ZXJzIHRvIGJlIGFkZGVkIHRvIHRoZSBHRVQuCiogYCRuYW1lX2lkYCAtIFRoYXQgd2lsbCBiZSB1c2VkIHRvIGJ1aWxkIHRoZSBMb2dvdXRSZXF1ZXN0LiBJZiBgbmFtZV9pZGAgcGFyYW1ldGVyIGlzIG5vdCBzZXQgYW5kIHRoZSBhdXRoIG9iamVjdCBwcm9jZXNzZWQgYQpTQU1MIFJlc3BvbnNlIHdpdGggYSBgTmFtZUlkYCwgdGhlbiB0aGlzIGBOYW1lSWRgIHdpbGwgYmUgdXNlZC4KKiBgJHNlc3Npb25faW5kZXhgIC0gU2Vzc2lvbkluZGV4IHRoYXQgaWRlbnRpZmllcyB0aGUgc2Vzc2lvbiBvZiB0aGUgdXNlci4KKiBgJHN0YXlgIC0gVHJ1ZSBpZiB3ZSB3YW50IHRvIHN0YXkgKHJldHVybnMgdGhlIHVybCBzdHJpbmcpIEZhbHNlIHRvIHJlZGlyZWN0LgoqIGAkbmFtZUlkRm9ybWF0YCAtIFRoZSBOYW1lSUQgRm9ybWF0IHdpbGwgYmUgc2V0IGluIHRoZSBMb2dvdXRSZXF1ZXN0LgoqIGAkbmFtZUlkTmFtZVF1YWxpZmllcmAgLSBUaGUgTmFtZUlEIE5hbWVRdWFsaWZpZXIgd2lsbCBiZSBzZXQgaW4gdGhlIExvZ291dFJlcXVlc3QuCiogYCRuYW1lSWRTUE5hbWVRdWFsaWZpZXJgIC0gVGhlIE5hbWVJRCBTUCBOYW1lUXVhbGlmaWVyIHdpbGwgYmUgc2V0IGluIHRoZSBMb2dvdXRSZXF1ZXN0LgoKVGhlIExvZ291dCBSZXF1ZXN0IHdpbGwgYmUgc2VudCBzaWduZWQgb3IgdW5zaWduZWQgYmFzZWQgb24gdGhlIHNlY3VyaXR5CmluZm8gb2YgdGhlIGBhZHZhbmNlZF9zZXR0aW5ncy5waHBgIChgJ2xvZ291dFJlcXVlc3RTaWduZWQnYCkuCgpUaGUgSWRQIHdpbGwgcmV0dXJuIHRoZSBMb2dvdXQgUmVzcG9uc2UgdGhyb3VnaCB0aGUgdXNlcidzIGNsaWVudCB0byB0aGUKU2luZ2xlIExvZ291dCBTZXJ2aWNlIG9mIHRoZSBTUC4KSWYgd2UgZG8gbm90IHNldCBhIGAndXJsJ2AgcGFyYW0gaW4gdGhlIGxvZ291dCBtZXRob2QgYW5kIGFyZSB1c2luZyB0aGUKZGVmYXVsdCBTTFMgcHJvdmlkZWQgYnkgdGhlIHRvb2xraXQgKGBlbmRwb2ludHMvc2xzLnBocGApLCB0aGVuIHRoZSBTTFMKZW5kcG9pbnQgd2lsbCByZWRpcmVjdCB0aGUgdXNlciB0byB0aGUgZmlsZSB0aGF0IGxhdW5jaGVkIHRoZSBTTE8gcmVxdWVzdC4KCldlIGNhbiBzZXQgYW4gYCdyZXR1cm5UbydgIHVybCB0byBjaGFuZ2UgdGhlIHdvcmtmbG93IGFuZCByZWRpcmVjdCB0aGUgdXNlcgp0byBvdGhlciBwaHAgZmlsZS4KCmBgYHBocAokbmV3VGFyZ2V0VXJsID0gJ2h0dHA6Ly9leGFtcGxlLmNvbS9sb2dnZWRPdXQucGhwJzsKJGF1dGggPSBuZXcgT25lTG9naW5cU2FtbDJcQXV0aCgpOwokYXV0aC0+bG9nb3V0KCRuZXdUYXJnZXRVcmwpOwpgYGAKQSBtb3JlIGNvbXBsZXggbG9nb3V0IHdpdGggYWxsIHRoZSBwYXJhbWV0ZXJzOgpgYGAKJGF1dGggPSBuZXcgT25lTG9naW5cU2FtbDJcQXV0aCgpOwokcmV0dXJuVG8gPSBudWxsOwokcGFyYW1ldGVycyA9IGFycmF5KCk7CiRuYW1lSWQgPSBudWxsOwokc2Vzc2lvbkluZGV4ID0gbnVsbDsKJG5hbWVJZEZvcm1hdCA9IG51bGw7CiRuYW1lSWROYW1lUXVhbGlmaWVyID0gbnVsbDsKJG5hbWVJZFNQTmFtZVF1YWxpZmllciA9IG51bGw7CgppZiAoaXNzZXQoJF9TRVNTSU9OWydzYW1sTmFtZUlkJ10pKSB7CiAgICAkbmFtZUlkID0gJF9TRVNTSU9OWydzYW1sTmFtZUlkJ107Cn0KaWYgKGlzc2V0KCRfU0VTU0lPTlsnc2FtbFNlc3Npb25JbmRleCddKSkgewogICAgJHNlc3Npb25JbmRleCA9ICRfU0VTU0lPTlsnc2FtbFNlc3Npb25JbmRleCddOwp9CmlmIChpc3NldCgkX1NFU1NJT05bJ3NhbWxOYW1lSWRGb3JtYXQnXSkpIHsKICAgICRuYW1lSWRGb3JtYXQgPSAkX1NFU1NJT05bJ3NhbWxOYW1lSWRGb3JtYXQnXTsKfQppZiAoaXNzZXQoJF9TRVNTSU9OWydzYW1sTmFtZUlkTmFtZVF1YWxpZmllciddKSkgewogICAgJG5hbWVJZE5hbWVRdWFsaWZpZXIgPSAkX1NFU1NJT05bJ3NhbWxOYW1lSWROYW1lUXVhbGlmaWVyJ107Cn0KaWYgKGlzc2V0KCRfU0VTU0lPTlsnc2FtbE5hbWVJZFNQTmFtZVF1YWxpZmllciddKSkgewogICAgJG5hbWVJZFNQTmFtZVF1YWxpZmllciA9ICRfU0VTU0lPTlsnc2FtbE5hbWVJZFNQTmFtZVF1YWxpZmllciddOwp9CiRhdXRoLT5sb2dvdXQoJHJldHVyblRvLCAkcGFyYW1ldGVycywgJG5hbWVJZCwgJHNlc3Npb25JbmRleCwgZmFsc2UsICRuYW1lSWRGb3JtYXQsICRuYW1lSWROYW1lUXVhbGlmaWVyLCAkbmFtZUlkU1BOYW1lUXVhbGlmaWVyKTsKYGBgCgpJZiBhIG1hdGNoIG9uIHRoZSBmdXR1cmUgTG9nb3V0UmVzcG9uc2UgSUQgYW5kIHRoZSBMb2dvdXRSZXF1ZXN0IElEIHRvIGJlIHNlbnQgaXMgcmVxdWlyZWQsIHRoYXQgTG9nb3V0UmVxdWVzdCBJRCBtdXN0IHRvIGJlIGV4dHJhY3RlZCBhbmQgc3RvcmVkLgoKYGBgcGhwCiRzbG9CdWlsdFVybCA9ICRhdXRoLT5sb2dvdXQobnVsbCwgJHBhcmFtZXRlcnMsICRuYW1lSWQsICRzZXNzaW9uSW5kZXgsIHRydWUpOwokX1NFU1NJT05bJ0xvZ291dFJlcXVlc3RJRCddID0gJGF1dGgtPmdldExhc3RSZXF1ZXN0SUQoKTsKaGVhZGVyKCdQcmFnbWE6IG5vLWNhY2hlJyk7CmhlYWRlcignQ2FjaGUtQ29udHJvbDogbm8tY2FjaGUsIG11c3QtcmV2YWxpZGF0ZScpOwpoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJHNsb0J1aWx0VXJsKTsKZXhpdCgpOwpgYGAKCiMjIyMgRXhhbXBsZSBvZiBhIHZpZXcgdGhhdCBpbml0aWF0ZXMgdGhlIFNTTyByZXF1ZXN0IGFuZCBoYW5kbGVzIHRoZSByZXNwb25zZSAoaXMgdGhlIGFjcyB0YXJnZXQpICMjIyMKCldlIGNhbiBjb2RlIGEgdW5pcXVlIGZpbGUgdGhhdCBpbml0aWF0ZXMgdGhlIFNTTyBwcm9jZXNzLCBoYW5kbGUgdGhlIHJlc3BvbnNlLCBnZXQgdGhlIGF0dHJpYnV0ZXMsIGluaXRpYXRlCnRoZSBTTE8gYW5kIHByb2Nlc3NlcyB0aGUgbG9nb3V0IHJlc3BvbnNlLgoKTm90ZTogUmV2aWV3IHRoZSBgZGVtbzFgIGZvbGRlciB0aGF0IGNvbnRhaW5zIHRoYXQgdXNlIGNhc2U7IGluIGEgbGF0ZXIgc2VjdGlvbiB3ZQpleHBsYWluIHRoZSBkZW1vMSB1c2UgY2FzZSBmdXJ0aGVyIGluIGRldGFpbC4KCmBgYHBocAo8P3BocAoKc2Vzc2lvbl9zdGFydCgpOyAgICAvLyBJbml0aWFsaXplIHRoZSBzZXNzaW9uLCB3ZSBkbyB0aGF0IGJlY2F1c2UKICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgcHJvY2Vzc1Jlc3BvbnNlIGFuZCBwcm9jZXNzU0xPCiAgICAgICAgICAgICAgICAgICAgLy8gbWV0aG9kcyBjb3VsZCBtYW5pcHVsYXRlL2Nsb3NlIHRoYXQgc2Vzc2lvbgoKcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19ESVJfXykgLiAnL190b29sa2l0X2xvYWRlci5waHAnOyAvLyBMb2FkIFNhbWwyIGFuZCB4bWxzZWNsaWJzCnJlcXVpcmVfb25jZSAnc2V0dGluZ3MucGhwJzsgICAgLy8gTG9hZCB0aGUgc2V0dGluZyBpbmZvIGFzIGFuIEFycmF5CgokYXV0aCA9IG5ldyBPbmVMb2dpblxTYW1sMlxBdXRoKCRzZXR0aW5nc0luZm8pOyAgLy8gSW5pdGlhbGl6ZSB0aGUgU1AgU0FNTCBpbnN0YW5jZQoKaWYgKGlzc2V0KCRfR0VUWydzc28nXSkpIHsgICAgLy8gU1NPIGFjdGlvbi4gIFdpbGwgc2VuZCBhbiBBdXRoTlJlcXVlc3QgdG8gdGhlIElkUAogICAgJGF1dGgtPmxvZ2luKCk7Cn0gZWxzZSBpZiAoaXNzZXQoJF9HRVRbJ3NzbzInXSkpIHsgICAgICAgICAgICAgIC8vIEFub3RoZXIgU1NPIGFjdGlvbgogICAgJHJldHVyblRvID0gJHNwQmFzZVVybC4nL2RlbW8xL2F0dHJzLnBocCc7ICAvLyBidXQgc2V0IGEgY3VzdG9tIFJlbGF5U3RhdGUgVVJMCiAgICAkYXV0aC0+bG9naW4oJHJldHVyblRvKTsKfSBlbHNlIGlmIChpc3NldCgkX0dFVFsnc2xvJ10pKSB7ICAvLyBTTE8gYWN0aW9uLiBXaWxsIHNlbnQgYSBMb2dvdXQgUmVxdWVzdCB0byBJZFAKICAgICRhdXRoLT5sb2dvdXQoKTsKfSBlbHNlIGlmIChpc3NldCgkX0dFVFsnYWNzJ10pKSB7ICAvLyBBc3NlcnRpb24gQ29uc3VtZXIgU2VydmljZQogICAgJGF1dGgtPnByb2Nlc3NSZXNwb25zZSgpOyAgICAgIC8vIFByb2Nlc3MgdGhlIFJlc3BvbnNlIG9mIHRoZSBJZFAsIGdldCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdHRyaWJ1dGVzIGFuZCBwdXQgdGhlbiBhdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICRfU0VTU0lPTlsnc2FtbFVzZXJkYXRhJ10KCiAgICAkZXJyb3JzID0gJGF1dGgtPmdldEVycm9ycygpOyAgLy8gVGhpcyBtZXRob2QgcmVjZWl2ZXMgYW4gYXJyYXkgd2l0aCB0aGUgZXJyb3JzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBjb3VsZCB0b29rIHBsYWNlIGR1cmluZyB0aGUgcHJvY2VzcwoKICAgIGlmICghZW1wdHkoJGVycm9ycykpIHsKICAgICAgICBlY2hvICc8cD4nIC4gaW1wbG9kZSgnLCAnLCAkZXJyb3JzKSAuICc8L3A+JzsKICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjaGVjayBpZiB0aGUgcmVzcG9uc2Ugd2FzCiAgICBpZiAoISRhdXRoLT5pc0F1dGhlbnRpY2F0ZWQoKSkgeyAgICAgIC8vIHN1Y2Nlc3NmdWxseSB2YWxpZGF0ZWQgYW5kIHRoZSB1c2VyCiAgICAgICAgZWNobyAnPHA+Tm90IGF1dGhlbnRpY2F0ZWQ8L3A+JzsgIC8vIGRhdGEgcmV0cmlldmVkIG9yIG5vdAogICAgICAgIGV4aXQoKTsKICAgIH0KCiAgICAkX1NFU1NJT05bJ3NhbWxVc2VyZGF0YSddID0gJGF1dGgtPmdldEF0dHJpYnV0ZXMoKTsgLy8gUmV0cmlldmVzIHVzZXIgZGF0YQogICAgaWYgKGlzc2V0KCRfUE9TVFsnUmVsYXlTdGF0ZSddKSAmJiBPbmVMb2dpblxTYW1sMlxVdGlsczo6Z2V0U2VsZlVSTCgpICE9ICRfUE9TVFsnUmVsYXlTdGF0ZSddKSB7CiAgICAgICAgLy8gVG8gYXZvaWQgJ09wZW4gUmVkaXJlY3QnIGF0dGFja3MsIGJlZm9yZSBleGVjdXRlIHRoZQogICAgICAgIC8vIHJlZGlyZWN0aW9uIGNvbmZpcm0gdGhlIHZhbHVlIG9mICRfUE9TVFsnUmVsYXlTdGF0ZSddIGlzIGEgLy8gdHJ1c3RlZCBVUkwuCiAgICAgICAgJGF1dGgtPnJlZGlyZWN0VG8oJF9QT1NUWydSZWxheVN0YXRlJ10pOyAgLy8gUmVkaXJlY3QgaWYgdGhlcmUgaXMgYQogICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbGF5U3RhdGUgc2V0Cn0gZWxzZSBpZiAoaXNzZXQoJF9HRVRbJ3NscyddKSkgeyAgIC8vIFNpbmdsZSBMb2dvdXQgU2VydmljZQogICAgJGF1dGgtPnByb2Nlc3NTTE8oKTsgICAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBMb2dvdXQgUmVxdWVzdCAmIExvZ291dCBSZXNwb25zZQogICAgJGVycm9ycyA9ICRhdXRoLT5nZXRFcnJvcnMoKTsgLy8gUmV0cmlldmVzIHBvc3NpYmxlIHZhbGlkYXRpb24gZXJyb3JzCiAgICBpZiAoZW1wdHkoJGVycm9ycykpIHsKICAgICAgICBlY2hvICc8cD5TdWNjZXNzZnVsbHkgbG9nZ2VkIG91dDwvcD4nOwogICAgfSBlbHNlIHsKICAgICAgICBlY2hvICc8cD4nIC4gaHRtbGVudGl0aWVzKGltcGxvZGUoJywgJywgJGVycm9ycykpIC4gJzwvcD4nOwogICAgfQp9CgppZiAoaXNzZXQoJF9TRVNTSU9OWydzYW1sVXNlcmRhdGEnXSkpIHsgICAvLyBJZiB0aGVyZSBpcyB1c2VyIGRhdGEgd2UgcHJpbnQgaXQuCiAgICBpZiAoIWVtcHR5KCRfU0VTU0lPTlsnc2FtbFVzZXJkYXRhJ10pKSB7CiAgICAgICAgJGF0dHJpYnV0ZXMgPSAkX1NFU1NJT05bJ3NhbWxVc2VyZGF0YSddOwogICAgICAgIGVjaG8gJ1lvdSBoYXZlIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczo8YnI+JzsKICAgICAgICBlY2hvICc8dGFibGU+PHRoZWFkPjx0aD5OYW1lPC90aD48dGg+VmFsdWVzPC90aD48L3RoZWFkPjx0Ym9keT4nOwogICAgICAgIGZvcmVhY2ggKCRhdHRyaWJ1dGVzIGFzICRhdHRyaWJ1dGVOYW1lID0+ICRhdHRyaWJ1dGVWYWx1ZXMpIHsKICAgICAgICAgICAgZWNobyAnPHRyPjx0ZD4nIC4gaHRtbGVudGl0aWVzKCRhdHRyaWJ1dGVOYW1lKSAuICc8L3RkPjx0ZD48dWw+JzsKICAgICAgICAgICAgZm9yZWFjaCAoJGF0dHJpYnV0ZVZhbHVlcyBhcyAkYXR0cmlidXRlVmFsdWUpIHsKICAgICAgICAgICAgICAgIGVjaG8gJzxsaT4nIC4gaHRtbGVudGl0aWVzKCRhdHRyaWJ1dGVWYWx1ZSkgLiAnPC9saT4nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVjaG8gJzwvdWw+PC90ZD48L3RyPic7CiAgICAgICAgfQogICAgICAgIGVjaG8gJzwvdGJvZHk+PC90YWJsZT4nOwogICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vdCB1c2VyIGRhdGEsIHdlIG5vdGlmeQogICAgICAgIGVjaG8gIjxwPllvdSBkb24ndCBoYXZlIGFueSBhdHRyaWJ1dGU8L3A+IjsKICAgIH0KCiAgICBlY2hvICc8cD48YSBocmVmPSI/c2xvIiA+TG9nb3V0PC9hPjwvcD4nOyAvLyBQcmludCBzb21lIGxpbmtzIHdpdGggcG9zc2libGUKfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFjdGlvbnMKICAgIGVjaG8gJzxwPjxhIGhyZWY9Ij9zc28iID5Mb2dpbjwvYT48L3A+JzsKICAgIGVjaG8gJzxwPjxhIGhyZWY9Ij9zc28yIiA+TG9naW4gYW5kIGFjY2VzcyB0byBhdHRycy5waHAgcGFnZTwvYT48L3A+JzsKfQpgYGAKCiMjIyMgVVJMLWd1ZXNzaW5nIG1ldGhvZHMgIyMjIwoKcGhwLXNhbWwgdG9vbGtpdCB1c2VzIGEgYnVuY2ggb2YgbWV0aG9kcyBpbiBPbmVMb2dpblxTYW1sMlxVdGlscyB0aGF0IHRyeSB0byBndWVzcyB0aGUgVVJMIHdoZXJlIHRoZSBTQU1MIG1lc3NhZ2VzIGFyZSBwcm9jZXNzZWQuCgoqIGBnZXRTZWxmSG9zdGAgUmV0dXJucyB0aGUgY3VycmVudCBob3N0LgoqIGBnZXRTZWxmUG9ydGAgUmV0dXJuIHRoZSBwb3J0IG51bWJlciB1c2VkIGZvciB0aGUgcmVxdWVzdAoqIGBpc0hUVFBTYCBDaGVja3MgaWYgdGhlIHByb3RvY29sIGlzIGh0dHBzIG9yIGh0dHAuCiogYGdldFNlbGZVUkxob3N0YCBSZXR1cm5zIHRoZSBwcm90b2NvbCArIHRoZSBjdXJyZW50IGhvc3QgKyB0aGUgcG9ydCAoaWYgZGlmZmVyZW50IHRoYW4gY29tbW9uIHBvcnRzKS4KKiBgZ2V0U2VsZlVSTGAgUmV0dXJucyB0aGUgVVJMIG9mIHRoZSBjdXJyZW50IGhvc3QgKyBjdXJyZW50IHZpZXcgKyBxdWVyeS4KKiBgZ2V0U2VsZlVSTE5vUXVlcnlgIFJldHVybnMgdGhlIFVSTCBvZiB0aGUgY3VycmVudCBob3N0ICsgY3VycmVudCB2aWV3LgoqIGBnZXRTZWxmUm91dGVkVVJMTm9RdWVyeWAgUmV0dXJucyB0aGUgcm91dGVkIFVSTCBvZiB0aGUgY3VycmVudCBob3N0ICsgY3VycmVudCB2aWV3LgoKZ2V0U2VsZlVSTE5vUXVlcnkgYW5kIGdldFNlbGZSb3V0ZWRVUkxOb1F1ZXJ5IGFyZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgY3VycmVudFVSTCBpbiBvcmRlciB0byB2YWxpZGF0ZSBTQU1MIGVsZW1lbnRzIGxpa2UgRGVzdGluYXRpb24gb3IgUmVjaXBpZW50LgoKV2hlbiB0aGUgUEhQIGFwcGxpY2F0aW9uIGlzIGJlaGluZCBhIHByb3h5IG9yIGEgbG9hZCBiYWxhbmNlciB3ZSBjYW4gZXhlY3V0ZSBgc2V0UHJveHlWYXJzKHRydWUpYCBhbmQgYHNldFNlbGZQb3J0YCBhbmQgYGlzSFRUUFNgIHdpbGwgdGFrZSBjYXJlIG9mIHRoZSBgJF9TRVJWRVJbIkhUVFBfWF9GT1JXQVJERURfUE9SVCJdYCBhbmQgYCRfU0VSVkVSWydIVFRQX1hfRk9SV0FSREVEX1BST1RPJ11gIHZhcnMgKG90aGVyd2lzZSB0aGV5IGFyZSBpZ25vcmVkKS4KCkFsc28gYSBkZXZlbG9wZXIgY2FuIHVzZSBgc2V0U2VsZlByb3RvY29sYCwgYHNldFNlbGZIb3N0YCwgYHNldFNlbGZQb3J0YCBhbmQgYGdldEJhc2VVUkxQYXRoYCB0byBkZWZpbmUgYSBzcGVjaWZpYyB2YWx1ZSB0byBiZSByZXR1cm5lZCBieSBgaXNIVFRQU2AsIGBnZXRTZWxmSG9zdGAsIGBnZXRTZWxmUG9ydGAgYW5kIGBnZXRCYXNlVVJMUGF0aGAuIEFuZCBkZWZpbmUgYSBgc2V0QmFzZVBhdGhgIHRvIGJlIHVzZWQgb24gdGhlIGBnZXRTZWxmVVJMYCBhbmQgYGdldFNlbGZSb3V0ZWRVUkxOb1F1ZXJ5YCB0byByZXBsYWNlIHRoZSBkYXRhIGV4dHJhY3RlZCBmcm9tIGAkX1NFUlZFUlsiUkVRVUVTVF9VUkkiXWAuCgpBdCB0aGUgc2V0dGluZ3MgdGhlIGRldmVsb3BlciB3aWxsIGJlIGFibGUgdG8gc2V0IGEgYCdiYXNldXJsJ2AgcGFyYW1ldGVyIHRoYXQgYXV0b21hdGljYWxseSB3aWxsIHVzZSBgc2V0QmFzZVVSTGAgdG8gc2V0IHZhbHVlcyBmb3IgYHNldFNlbGZQcm90b2NvbGAsIGBzZXRTZWxmSG9zdGAsIGBzZXRTZWxmUG9ydGAgYW5kIGBzZXRCYXNlVVJMUGF0aGAuCgoKIyMjIFdvcmtpbmcgYmVoaW5kIGxvYWQgYmFsYW5jZXIgIyMjCgpJcyBwb3NzaWJsZSB0aGF0IGFzc2VydGluZyByZXF1ZXN0IFVSTCBhbmQgRGVzdGluYXRpb24gYXR0cmlidXRlIG9mIFNBTUwgcmVzcG9uc2UgZmFpbHMgd2hlbiB3b3JraW5nIGJlaGluZCBsb2FkIGJhbGFuY2VyIHdpdGggU1NMIG9mZmxvYWQuCgpZb3Ugc2hvdWxkIGJlIGFibGUgdG8gd29ya2Fyb3VuZCB0aGlzIGJ5IGNvbmZpZ3VyaW5nIHlvdXIgc2VydmVyIHNvIHRoYXQgaXQgaXMgYXdhcmUgb2YgdGhlIHByb3h5IGFuZCByZXR1cm5zIHRoZSBvcmlnaW5hbCB1cmwgd2hlbiByZXF1ZXN0ZWQuCgpPciBieSB1c2luZyB0aGUgbWV0aG9kIGRlc2NyaWJlZCBvbiB0aGUgcHJldmlvdXMgc2VjdGlvbi4KCgojIyMgU1AgS2V5IHJvbGxvdmVyICMjIwoKSWYgeW91IHBsYW4gdG8gdXBkYXRlIHRoZSBTUCB4NTA5Y2VydCBhbmQgcHJpdmF0ZUtleSB5b3UgY2FuIGRlZmluZSB0aGUgbmV3IHg1MDljZXJ0IGFzIGAkc2V0dGluZ3NbJ3NwJ11bJ3g1MDljZXJ0TmV3J11gIGFuZCBpdCB3aWxsIGJlCnB1Ymxpc2hlZCBvbiB0aGUgU1AgbWV0YWRhdGEgc28gSWRlbnRpdHkgUHJvdmlkZXJzIGNhbiByZWFkIHRoZW0gYW5kIGdldCByZWFkeSBmb3Igcm9sbG92ZXIuCgoKIyMjIElkUCB3aXRoIG11bHRpcGxlIGNlcnRpZmljYXRlcyAjIyMKCkluIHNvbWUgc2NlbmFyaW9zIHRoZSBJZFAgdXNlcyBkaWZmZXJlbnQgY2VydGlmaWNhdGVzIGZvcgpzaWduaW5nL2VuY3J5cHRpb24sIG9yIGlzIHVuZGVyIGtleSByb2xsb3ZlciBwaGFzZSBhbmQgbW9yZSB0aGFuIG9uZSBjZXJ0aWZpY2F0ZSBpcyBwdWJsaXNoZWQgb24gSWRQIG1ldGFkYXRhLgoKSW4gb3JkZXIgdG8gaGFuZGxlIHRoYXQgdGhlIHRvb2xraXQgb2ZmZXJzIHRoZSBgJHNldHRpbmdzWydpZHAnXVsneDUwOWNlcnRNdWx0aSddYCBwYXJhbWV0ZXIuCgpXaGVuIHRoYXQgcGFyYW1ldGVyIGlzIHVzZWQsIGAneDUwOWNlcnQnYCBhbmQgYCdjZXJ0RmluZ2VycHJpbnQnYCB2YWx1ZXMgd2lsbCBiZSBpZ25vcmVkIGJ5IHRoZSB0b29sa2l0LgoKVGhlIGB4NTA5Y2VydE11bHRpYCBpcyBhbiBhcnJheSB3aXRoIDIga2V5czoKLSBgc2lnbmluZ2AuIEFuIGFycmF5IG9mIGNlcnRzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHZhbGlkYXRlIElkUCBzaWduYXR1cmUKLSBgZW5jcnlwdGlvbmAgQW4gYXJyYXkgd2l0aCBvbmUgdW5pcXVlIGNlcnQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZW5jcnlwdCBkYXRhIHRvIGJlIHNlbnQgdG8gdGhlIElkUAoKCiMjIyBSZXBsYXkgYXR0YWNrcyAjIyMKCkluIG9yZGVyIHRvIGF2b2lkIHJlcGxheSBhdHRhY2tzLCB5b3UgY2FuIHN0b3JlIHRoZSBJRCBvZiB0aGUgU0FNTCBtZXNzYWdlcyBhbHJlYWR5IHByb2Nlc3NlZCwgdG8gYXZvaWQgcHJvY2Vzc2luZyB0aGVtIHR3aWNlLiBTaW5jZSB0aGUgTWVzc2FnZXMgZXhwaXJlcyBhbmQgd2lsbCBiZSBpbnZhbGlkYXRlZCBkdWUgdGhhdCBmYWN0LCB5b3UgZG9uJ3QgbmVlZCB0byBzdG9yZSB0aG9zZSBJRHMgbG9uZ2VyIHRoYW4gdGhlIHRpbWUgZnJhbWUgdGhhdCB5b3UgY3VycmVudGx5IGFjY2VwdGluZy4KCkdldCB0aGUgSUQgb2YgdGhlIGxhc3QgcHJvY2Vzc2VkIG1lc3NhZ2UvYXNzZXJ0aW9uIHdpdGggdGhlIGBnZXRMYXN0TWVzc2FnZUlkYC9gZ2V0TGFzdEFzc2VydGlvbklkYCBtZXRob2RzIG9mIHRoZSBBdXRoIG9iamVjdC4KCgojIyMgTWFpbiBjbGFzc2VzIGFuZCBtZXRob2RzICMjIwoKRGVzY3JpYmVkIGJlbG93IGFyZSB0aGUgbWFpbiBjbGFzc2VzIGFuZCBtZXRob2RzIHRoYXQgY2FuIGJlIGludm9rZWQuCgojIyMjIFNhbWwyIGxpYnJhcnkgIyMjIwoKTGV0cyBkZXNjcmliZSBub3cgdGhlIGNsYXNzZXMgYW5kIG1ldGhvZHMgb2YgdGhlIFNBTUwyIGxpYnJhcnkuCgojIyMjIyBPbmVMb2dpblxTYW1sMlxBdXRoIC0gQXV0aC5waHAgIyMjIyMKCk1haW4gY2xhc3Mgb2YgU0FNTCBQSFAgVG9vbGtpdAoKICogYEF1dGhgIC0gSW5pdGlhbGl6ZXMgdGhlIFNQIFNBTUwgaW5zdGFuY2UKICogYGxvZ2luYCAtIEluaXRpYXRlcyB0aGUgU1NPIHByb2Nlc3MuCiAqIGBsb2dvdXRgIC0gSW5pdGlhdGVzIHRoZSBTTE8gcHJvY2Vzcy4KICogYHByb2Nlc3NSZXNwb25zZWAgLSBQcm9jZXNzIHRoZSBTQU1MIFJlc3BvbnNlIHNlbnQgYnkgdGhlIElkUC4KICogYHByb2Nlc3NTTE9gIC0gUHJvY2VzcyB0aGUgU0FNTCBMb2dvdXQgUmVzcG9uc2UgLyBMb2dvdXQgUmVxdWVzdCBzZW50IGJ5IHRoZQogICBJZFAuCiAqIGByZWRpcmVjdFRvYCAtIFJlZGlyZWN0cyB0aGUgdXNlciB0byB0aGUgdXJsIHBhc3QgYnkgcGFyYW1ldGVyIG9yIHRvIHRoZSB1cmwKICAgdGhhdCB3ZSBkZWZpbmVkIGluIG91ciBTU08gUmVxdWVzdC4KICogYGlzQXV0aGVudGljYXRlZGAgLSBDaGVja3MgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCBvciBub3QuCiAqIGBnZXRBdHRyaWJ1dGVzYCAtIFJldHVybnMgdGhlIHNldCBvZiBTQU1MIGF0dHJpYnV0ZXMuCiAqIGBnZXRBdHRyaWJ1dGVgIC0gUmV0dXJucyB0aGUgcmVxdWVzdGVkIFNBTUwgYXR0cmlidXRlCiAqIGBnZXROYW1lSWRgIC0gUmV0dXJucyB0aGUgbmFtZUlECiAqIGBnZXROYW1lSWRGb3JtYXRgIC0gR2V0cyB0aGUgTmFtZUlEIEZvcm1hdCBwcm92aWRlZCBieSB0aGUgU0FNTCByZXNwb25zZSBmcm9tIHRoZSBJZFAuCiAqIGBnZXROYW1lSWROYW1lUXVhbGlmaWVyYCAtIEdldHMgdGhlIE5hbWVJRCBOYW1lUXVhbGlmaWVyIHByb3ZpZGVkIGZyb20gdGhlIFNBTUwgUmVzcG9uc2UgU3RyaW5nLgogKiBgZ2V0TmFtZUlkU1BOYW1lUXVhbGlmaWVyYCAtIEdldHMgdGhlIE5hbWVJRCBTUCBOYW1lUXVhbGlmaWVyIHByb3ZpZGVkIGZyb20gdGhlIFNBTUwgUmVzcG9uc2UgU3RyaW5nLgogKiBgZ2V0U2Vzc2lvbkluZGV4YCAtIEdldHMgdGhlIFNlc3Npb25JbmRleCBmcm9tIHRoZSBBdXRoblN0YXRlbWVudC4KICogYGdldEVycm9yc2AgLSBSZXR1cm5zIGlmIHRoZXJlIHdlcmUgYW55IGVycm9yCiAqIGBnZXRTU091cmxgIC0gR2V0cyB0aGUgU1NPIHVybC4KICogYGdldFNMT3VybGAgLSBHZXRzIHRoZSBTTE8gdXJsLgogKiBgZ2V0TGFzdFJlcXVlc3RJRGAgLSBUaGUgSUQgb2YgdGhlIGxhc3QgUmVxdWVzdCBTQU1MIG1lc3NhZ2UgZ2VuZXJhdGVkLgogKiBgYnVpbGRSZXF1ZXN0U2lnbmF0dXJlYCAtIEdlbmVyYXRlcyB0aGUgU2lnbmF0dXJlIGZvciBhIFNBTUwgUmVxdWVzdAogKiBgYnVpbGRSZXNwb25zZVNpZ25hdHVyZWAgLSBHZW5lcmF0ZXMgdGhlIFNpZ25hdHVyZSBmb3IgYSBTQU1MIFJlc3BvbnNlCiAqIGBnZXRTZXR0aW5nc2AgLSBSZXR1cm5zIHRoZSBzZXR0aW5ncyBpbmZvCiAqIGBzZXRTdHJpY3RgIC0gU2V0IHRoZSBzdHJpY3QgbW9kZSBhY3RpdmUvZGlzYWJsZQogKiBgZ2V0TGFzdFJlcXVlc3RJRGAgLSBHZXRzIHRoZSBJRCBvZiB0aGUgbGFzdCBBdXRoTlJlcXVlc3Qgb3IgTG9nb3V0UmVxdWVzdCBnZW5lcmF0ZWQgYnkgdGhlIFNlcnZpY2UgUHJvdmlkZXIuCiAqIGBnZXRMYXN0UmVxdWVzdFhNTGAgLSBSZXR1cm5zIHRoZSBtb3N0IHJlY2VudGx5LWNvbnN0cnVjdGVkL3Byb2Nlc3NlZCBYTUwgU0FNTCByZXF1ZXN0IChBdXRoTlJlcXVlc3QsIExvZ291dFJlcXVlc3QpCiAqIGBnZXRMYXN0UmVzcG9uc2VYTUxgIC0gUmV0dXJucyB0aGUgbW9zdCByZWNlbnRseS1jb25zdHJ1Y3RlZC9wcm9jZXNzZWQgWE1MIFNBTUwgcmVzcG9uc2UgKFNBTUxSZXNwb25zZSwgTG9nb3V0UmVzcG9uc2UpLiBJZiB0aGUgU0FNTFJlc3BvbnNlIGhhZCBhbiBlbmNyeXB0ZWQgYXNzZXJ0aW9uLCBkZWNyeXB0cyBpdC4KKiBgYnVpbGRBdXRoblJlcXVlc3RgIC0gQ3JlYXRlcyBhbiBBdXRoblJlcXVlc3QKKiBgYnVpbGRMb2dvdXRSZXF1ZXN0YCAtIENyZWF0ZXMgYW4gTG9nb3V0UmVxdWVzdAoqIGBidWlsZExvZ291dFJlc3BvbnNlYCAtIENvbnN0cnVjdHMgYSBMb2dvdXQgUmVzcG9uc2Ugb2JqZWN0IChJbml0aWFsaXplIHBhcmFtcyBmcm9tIHNldHRpbmdzIGFuZCBpZiBwcm92aWRlZCBsb2FkIHRoZSBMb2dvdXQgUmVzcG9uc2UpLgoKCiMjIyMjIE9uZUxvZ2luXFNhbWwyXEF1dGhuUmVxdWVzdCAtIGBBdXRoblJlcXVlc3QucGhwYCAjIyMjIwoKU0FNTCAyIEF1dGhlbnRpY2F0aW9uIFJlcXVlc3QgY2xhc3MKCiAqIGBBdXRoblJlcXVlc3RgIC0gQ29uc3RydWN0cyB0aGUgYEF1dGhuUmVxdWVzdGAgb2JqZWN0LgogKiBgZ2V0UmVxdWVzdGAgLSBSZXR1cm5zIGRlZmxhdGVkLCBiYXNlNjQgZW5jb2RlZCwgdW5zaWduZWQgYEF1dGhuUmVxdWVzdGAuCiAqIGBnZXRJZGAgLSBSZXR1cm5zIHRoZSBgQXV0aE5SZXF1ZXN0YCBJRC4KICogYGdldFhNTGAgLSBSZXR1cm5zIHRoZSBYTUwgdGhhdCB3aWxsIGJlIHNlbnQgYXMgcGFydCBvZiB0aGUgcmVxdWVzdC4KCiMjIyMjIE9uZUxvZ2luXFNhbWwyXFJlc3BvbnNlIC0gYFJlc3BvbnNlLnBocGAgIyMjIyMKClNBTUwgMiBBdXRoZW50aWNhdGlvbiBSZXNwb25zZSBjbGFzcwoKICogYFJlc3BvbnNlYCAtIENvbnN0cnVjdHMgdGhlIFNBTUwgUmVzcG9uc2Ugb2JqZWN0LgogKiBgaXNWYWxpZGAgLSBEZXRlcm1pbmVzIGlmIHRoZSBTQU1MIFJlc3BvbnNlIGlzIHZhbGlkIHVzaW5nIHRoZSBjZXJ0aWZpY2F0ZS4KICogYGNoZWNrU3RhdHVzYCAtIENoZWNrcyBpZiB0aGUgU3RhdHVzIGlzIHN1Y2Nlc3MuCiAqIGBnZXRBdWRpZW5jZXNgIC0gR2V0cyB0aGUgYXVkaWVuY2VzLgogKiBgZ2V0SXNzdWVyc2AgLSBHZXRzIHRoZSBJc3N1ZXJzIChmcm9tIFJlc3BvbnNlIGFuZCBBc3NlcnRpb24pCiAqIGBnZXROYW1lSWREYXRhYCAtIEdldHMgdGhlIE5hbWVJRCBEYXRhIHByb3ZpZGVkIGJ5IHRoZSBTQU1MIHJlc3BvbnNlIGZyb20gdGhlCiAgIElkUC4KICogYGdldE5hbWVJZGAgLSBHZXRzIHRoZSBOYW1lSUQgcHJvdmlkZWQgYnkgdGhlIFNBTUwgcmVzcG9uc2UgZnJvbSB0aGUgSWRQLgogKiBgZ2V0TmFtZUlkRm9ybWF0YCAtIEdldHMgdGhlIE5hbWVJRCBGb3JtYXQgcHJvdmlkZWQgYnkgdGhlIFNBTUwgcmVzcG9uc2UgZnJvbSB0aGUgSWRQLgogKiBgZ2V0TmFtZUlkTmFtZVF1YWxpZmllcmAgLSBHZXRzIHRoZSBOYW1lSUQgTmFtZVF1YWxpZmllciBwcm92aWRlZCBmcm9tIHRoZSBTQU1MIFJlc3BvbnNlIFN0cmluZy4KICogYGdldE5hbWVJZFNQTmFtZVF1YWxpZmllcmAgLSBHZXRzIHRoZSBOYW1lSUQgU1AgTmFtZVF1YWxpZmllciBwcm92aWRlZCBmcm9tIHRoZSBTQU1MIFJlc3BvbnNlIFN0cmluZy4KICogYGdldFNlc3Npb25Ob3RPbk9yQWZ0ZXJgIC0gR2V0cyB0aGUgU2Vzc2lvbk5vdE9uT3JBZnRlciBmcm9tIHRoZQogICBBdXRoblN0YXRlbWVudAogKiBgZ2V0U2Vzc2lvbkluZGV4YCAtIEdldHMgdGhlIFNlc3Npb25JbmRleCBmcm9tIHRoZSBBdXRoblN0YXRlbWVudC4KICogYGdldEF0dHJpYnV0ZXNgIC0gR2V0cyB0aGUgQXR0cmlidXRlcyBmcm9tIHRoZSBBdHRyaWJ1dGVTdGF0ZW1lbnQgZWxlbWVudC4KICogYHZhbGlkYXRlTnVtQXNzZXJ0aW9uc2AgLSBWZXJpZmllcyB0aGF0IHRoZSBkb2N1bWVudCBvbmx5IGNvbnRhaW5zIGEgc2luZ2xlCiAgIEFzc2VydGlvbiAoZW5jcnlwdGVkIG9yIG5vdCkuCiAqIGB2YWxpZGF0ZVRpbWVzdGFtcHNgIC0gVmVyaWZpZXMgdGhhdCB0aGUgZG9jdW1lbnQgaXMgc3RpbGwgdmFsaWQgYWNjb3JkaW5nCiAgIENvbmRpdGlvbnMgRWxlbWVudC4KICogYGdldEVycm9yYCAtIEFmdGVyIGV4ZWN1dGluZyBhIHZhbGlkYXRpb24gcHJvY2VzcywgaWYgaXQgZmFpbHMsIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGNhdXNlCiAqIGBnZXRYTUxEb2N1bWVudGAgLSBSZXR1cm5zIHRoZSBTQU1MIFJlc3BvbnNlIGRvY3VtZW50IChJZiBjb250YWlucyBhbiBlbmNyeXB0ZWQgYXNzZXJ0aW9uLCBkZWNyeXB0cyBpdCkKCiMjIyMjIE9uZUxvZ2luXFNhbWwyXExvZ291dFJlcXVlc3QgLSBgTG9nb3V0UmVxdWVzdC5waHBgICMjIyMjCgpTQU1MIDIgTG9nb3V0IFJlcXVlc3QgY2xhc3MKCiAqIGBMb2dvdXRSZXF1ZXN0YCAtIENvbnN0cnVjdHMgdGhlIExvZ291dCBSZXF1ZXN0IG9iamVjdC4KICogYGdldFJlcXVlc3RgIC0gUmV0dXJucyB0aGUgTG9nb3V0IFJlcXVlc3QgZGVmbGF0ZWQsIGJhc2U2NGVuY29kZWQsIHVuc2lnbmVkCiAqIGBnZXRJRGAgLSBSZXR1cm5zIHRoZSBJRCBvZiB0aGUgTG9nb3V0IFJlcXVlc3QuIChJZiB5b3UgaGF2ZSB0aGUgb2JqZWN0IHlvdSBjYW4gYWNjZXNzIHRvIHRoZSBpZCBhdHRyaWJ1dGUpCiAqIGBnZXROYW1lSWREYXRhYCAtIEdldHMgdGhlIE5hbWVJRCBEYXRhIG9mIHRoZSB0aGUgTG9nb3V0IFJlcXVlc3QuCiAqIGBnZXROYW1lSWRgIC0gR2V0cyB0aGUgTmFtZUlEIG9mIHRoZSBMb2dvdXQgUmVxdWVzdC4KICogYGdldElzc3VlcmAgLSBHZXRzIHRoZSBJc3N1ZXIgb2YgdGhlIExvZ291dCBSZXF1ZXN0LgogKiBgZ2V0U2Vzc2lvbkluZGV4ZXNgIC0gR2V0cyB0aGUgU2Vzc2lvbkluZGV4ZXMgZnJvbSB0aGUgTG9nb3V0IFJlcXVlc3QuCiAqIGBpc1ZhbGlkYCAtIENoZWNrcyBpZiB0aGUgTG9nb3V0IFJlcXVlc3QgcmVjZWl2ZWQgaXMgdmFsaWQuCiAqIGBnZXRFcnJvcmAgLSBBZnRlciBleGVjdXRpbmcgYSB2YWxpZGF0aW9uIHByb2Nlc3MsIGlmIGl0IGZhaWxzLCB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjYXVzZQogKiBgZ2V0WE1MYCAtIFJldHVybnMgdGhlIFhNTCB0aGF0IHdpbGwgYmUgc2VudCBhcyBwYXJ0IG9mIHRoZSByZXF1ZXN0IG9yIHRoYXQgd2FzIHJlY2VpdmVkIGF0IHRoZSBTUC4KCiMjIyMjIE9uZUxvZ2luXFNhbWwyXExvZ291dFJlc3BvbnNlIC0gYExvZ291dFJlc3BvbnNlLnBocGAgIyMjIyMKClNBTUwgMiBMb2dvdXQgUmVzcG9uc2UgY2xhc3MKCiAqIGBMb2dvdXRSZXNwb25zZWAgLSBDb25zdHJ1Y3RzIGEgTG9nb3V0IFJlc3BvbnNlIG9iamVjdAogICAoSW5pdGlhbGl6ZSBwYXJhbXMgZnJvbSBzZXR0aW5ncyBhbmQgaWYgcHJvdmlkZWQgbG9hZCB0aGUgTG9nb3V0IFJlc3BvbnNlKQogKiBgZ2V0SXNzdWVyYCAtIEdldHMgdGhlIElzc3VlciBvZiB0aGUgTG9nb3V0IFJlc3BvbnNlLgogKiBgZ2V0U3RhdHVzYCAtIEdldHMgdGhlIFN0YXR1cyBvZiB0aGUgTG9nb3V0IFJlc3BvbnNlLgogKiBgaXNWYWxpZGAgLSBEZXRlcm1pbmVzIGlmIHRoZSBTQU1MIExvZ291dFJlc3BvbnNlIGlzIHZhbGlkCiAqIGBidWlsZGAgLSBHZW5lcmF0ZXMgYSBMb2dvdXQgUmVzcG9uc2Ugb2JqZWN0LgogKiBgZ2V0UmVzcG9uc2VgIC0gUmV0dXJucyBhIExvZ291dCBSZXNwb25zZSBvYmplY3QuCiAqIGBnZXRFcnJvcmAgLSBBZnRlciBleGVjdXRpbmcgYSB2YWxpZGF0aW9uIHByb2Nlc3MsIGlmIGl0IGZhaWxzLCB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjYXVzZS4KICogYGdldFhNTGAgLSBSZXR1cm5zIHRoZSBYTUwgdGhhdCB3aWxsIGJlIHNlbnQgYXMgcGFydCBvZiB0aGUgcmVzcG9uc2Ugb3IgdGhhdCB3YXMgcmVjZWl2ZWQgYXQgdGhlIFNQLgoKIyMjIyMgT25lTG9naW5cU2FtbDJcU2V0dGluZ3MgLSBgU2V0dGluZ3MucGhwYCAjIyMjIwoKQ29uZmlndXJhdGlvbiBvZiB0aGUgU0FNTCBQSFAgVG9vbGtpdAoKICogYFNldHRpbmdzYCAtICBJbml0aWFsaXplcyB0aGUgc2V0dGluZ3M6IFNldHMgdGhlIHBhdGhzIG9mCiAgIHRoZSBkaWZmZXJlbnQgZm9sZGVycyBhbmQgTG9hZHMgc2V0dGluZ3MgaW5mbyBmcm9tIHNldHRpbmdzIGZpbGUgb3IKICAgYXJyYXkvb2JqZWN0IHByb3ZpZGVkCiAqIGBjaGVja1NldHRpbmdzYCAtIENoZWNrcyB0aGUgc2V0dGluZ3MgaW5mby4KICogYGdldEJhc2VQYXRoYCAtIFJldHVybnMgYmFzZSBwYXRoLgogKiBgZ2V0Q2VydFBhdGhgIC0gUmV0dXJucyBjZXJ0IHBhdGguCiAqIGBnZXRMaWJQYXRoYCAtIFJldHVybnMgbGliIHBhdGguCiAqIGBnZXRFeHRMaWJQYXRoYCAtIFJldHVybnMgZXh0ZXJuYWwgbGliIHBhdGguCiAqIGBnZXRTY2hlbWFzUGF0aGAgLSBSZXR1cm5zIHNjaGVtYSBwYXRoLgogKiBgY2hlY2tTUENlcnRzYCAtIENoZWNrcyBpZiB0aGUgeDUwOSBjZXJ0cyBvZiB0aGUgU1AgZXhpc3RzIGFuZCBhcmUgdmFsaWQuCiAqIGBnZXRTUGtleWAgLSBSZXR1cm5zIHRoZSB4NTA5IHByaXZhdGUga2V5IG9mIHRoZSBTUC4KICogYGdldFNQY2VydGAgLSBSZXR1cm5zIHRoZSB4NTA5IHB1YmxpYyBjZXJ0IG9mIHRoZSBTUC4KICogYGdldFNQY2VydE5ld2AgLSBSZXR1cm5zIHRoZSBmdXR1cmUgeDUwOSBwdWJsaWMgY2VydCBvZiB0aGUgU1AuCiAqIGBnZXRJZFBEYXRhYCAtIEdldHMgdGhlIElkUCBkYXRhLgogKiBgZ2V0U1BEYXRhYEdldHMgdGhlIFNQIGRhdGEuCiAqIGBnZXRTZWN1cml0eURhdGFgIC0gR2V0cyBzZWN1cml0eSBkYXRhLgogKiBgZ2V0Q29udGFjdHNgIC0gR2V0cyBjb250YWN0IGRhdGEuCiAqIGBnZXRPcmdhbml6YXRpb25gIC0gR2V0cyBvcmdhbml6YXRpb24gZGF0YS4KICogYGdldFNQTWV0YWRhdGFgIC0gR2V0cyB0aGUgU1AgbWV0YWRhdGEuIFRoZSBYTUwgcmVwcmVzZW50YXRpb24uCiAqIGB2YWxpZGF0ZU1ldGFkYXRhYCAtIFZhbGlkYXRlcyBhbiBYTUwgU1AgTWV0YWRhdGEuCiAqIGBmb3JtYXRJZFBDZXJ0YCAtIEZvcm1hdHMgdGhlIElkUCBjZXJ0LgogKiBgZm9ybWF0U1BDZXJ0YCAtIEZvcm1hdHMgdGhlIFNQIGNlcnQuCiAqIGBmb3JtYXRTUENlcnROZXdgIC0gRm9ybWF0cyB0aGUgU1AgY2VydCBuZXcuCiAqIGBmb3JtYXRTUEtleWAgLSBGb3JtYXRzIHRoZSBTUCBwcml2YXRlIGtleS4KICogYGdldEVycm9yc2AgLSBSZXR1cm5zIGFuIGFycmF5IHdpdGggdGhlIGVycm9ycywgdGhlIGFycmF5IGlzIGVtcHR5IHdoZW4KICAgdGhlIHNldHRpbmdzIGlzIG9rLgogKiBgZ2V0TGFzdEVycm9yUmVhc29uYCAtIFJldHVybnMgdGhlIHJlYXNvbiBvZiB0aGUgbGFzdCBlcnJvcgogKiBgZ2V0QmFzZVVSTGAgLSAgUmV0dXJucyB0aGUgYmFzZXVybCBzZXQgb24gdGhlIHNldHRpbmdzIGlmIGFueS4KICogYHNldEJhc2VVUkxgIC0gU2V0IGEgYmFzZXVybCB2YWx1ZQogKiBgc2V0U3RyaWN0YCAtIEFjdGl2YXRlcyBvciBkZWFjdGl2YXRlcyB0aGUgc3RyaWN0IG1vZGUuCiAqIGBpc1N0cmljdGAgLSBSZXR1cm5zIGlmIHRoZSAnc3RyaWN0JyBtb2RlIGlzIGFjdGl2ZS4KICogYGlzRGVidWdBY3RpdmVgIC0gUmV0dXJucyBpZiB0aGUgZGVidWcgaXMgYWN0aXZlLgoKIyMjIyMgT25lTG9naW5cU2FtbDJcTWV0YWRhdGEgLSBgTWV0YWRhdGEucGhwYCAjIyMjIwoKQSBjbGFzcyB0aGF0IGNvbnRhaW5zIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byB0aGUgbWV0YWRhdGEgb2YgdGhlIFNQCgoqIGBidWlsZGVyYCAtIEdlbmVyYXRlcyB0aGUgbWV0YWRhdGEgb2YgdGhlIFNQIGJhc2VkIG9uIHRoZSBzZXR0aW5ncy4KKiBgc2lnbm1ldGFkYXRhYCAtIFNpZ25zIHRoZSBtZXRhZGF0YSB3aXRoIHRoZSBrZXkvY2VydCBwcm92aWRlZAoqIGBhZGRYNTA5S2V5RGVzY3JpcHRvcnNgIC0gQWRkcyB0aGUgeDUwOSBkZXNjcmlwdG9ycyAoc2lnbi9lbmNyeXB0aW9uKSB0bwogIHRoZSBtZXRhZGF0YQoKIyMjIyMgT25lTG9naW5cU2FtbDJcVXRpbHMgLSBgVXRpbHMucGhwYCAjIyMjIwoKQXV4aWxpYXJ5IGNsYXNzIHRoYXQgY29udGFpbnMgc2V2ZXJhbCBtZXRob2RzCgogKiBgdmFsaWRhdGVYTUxgIC0gVGhpcyBmdW5jdGlvbiBhdHRlbXB0cyB0byB2YWxpZGF0ZSBhbiBYTUwgc3RyaW5nIGFnYWluc3QKICAgdGhlIHNwZWNpZmllZCBzY2hlbWEuCiAqIGBmb3JtYXRDZXJ0YCAtIFJldHVybnMgYSB4NTA5IGNlcnQgKGFkZGluZyBoZWFkZXIgJiBmb290ZXIgaWYgcmVxdWlyZWQpLgogKiBgZm9ybWF0UHJpdmF0ZUtleWAgLSByZXR1cm5zIGEgUlNBIHByaXZhdGUga2V5IChhZGRpbmcgaGVhZGVyICYgZm9vdGVyIGlmIHJlcXVpcmVkKS4KICogYHJlZGlyZWN0YCAtIEV4ZWN1dGVzIGEgcmVkaXJlY3Rpb24gdG8gdGhlIHByb3ZpZGVkIHVybCAob3IgcmV0dXJuIHRoZQogICB0YXJnZXQgdXJsKS4KICogYGlzSFRUUFNgIC0gQ2hlY2tzIGlmIGh0dHBzIG9yIGh0dHAuCiAqIGBnZXRTZWxmSG9zdGAgLSBSZXR1cm5zIHRoZSBjdXJyZW50IGhvc3QuCiAqIGBnZXRTZWxmVVJMaG9zdGAgLSBSZXR1cm5zIHRoZSBwcm90b2NvbCArIHRoZSBjdXJyZW50IGhvc3QgKyB0aGUgcG9ydAogICAoaWYgZGlmZmVyZW50IHRoYW4gY29tbW9uIHBvcnRzKS4KICogYGdldFNlbGZVUkxOb1F1ZXJ5YCAtIFJldHVybnMgdGhlIFVSTCBvZiB0aGUgY3VycmVudCBob3N0ICsgY3VycmVudCB2aWV3LgogKiBgZ2V0U2VsZlVSTGAgLSBSZXR1cm5zIHRoZSBVUkwgb2YgdGhlIGN1cnJlbnQgaG9zdCArIGN1cnJlbnQgdmlldyArIHF1ZXJ5LgogKiBgZ2VuZXJhdGVVbmlxdWVJRGAgLSBHZW5lcmF0ZXMgYSB1bmlxdWUgc3RyaW5nICh1c2VkIGZvciBleGFtcGxlIGFzIElECiAgIGZvciBhc3NlcnRpb25zKS4KICogYHBhcnNlVGltZTJTQU1MYCAtIENvbnZlcnRzIGEgVU5JWCB0aW1lc3RhbXAgdG8gU0FNTDIgdGltZXN0YW1wIG9uIHRoZQogICBmb3JtIGB5eXl5LW1tLWRkVGhoOm1tOnNzKFwucyspP1pgLgogKiBgcGFyc2VTQU1MMlRpbWVgIC0gQ29udmVydHMgYSBTQU1MMiB0aW1lc3RhbXAgb24gdGhlIGZvcm0KICAgYHl5eXktbW0tZGRUaGg6bW06c3MoXC5zKyk/WmAgdG8gYSBVTklYIHRpbWVzdGFtcC4gVGhlIHN1Yi1zZWNvbmQgcGFydCBpcwogICBpZ25vcmVkLgogKiBgcGFyc2VEdXJhdGlvbmAgLSBJbnRlcnByZXRzIGEgSVNPODYwMSBkdXJhdGlvbiB2YWx1ZSByZWxhdGl2ZSB0byBhIGdpdmVuCiAgIHRpbWVzdGFtcC4KICogYGdldEV4cGlyZVRpbWVgIC0gQ29tcGFyZXMgdHdvIGRhdGVzIGFuZCByZXR1cm5zIHRoZSBlYXJsaWVzdC4KICogYHF1ZXJ5YCAtIEV4dHJhY3RzIG5vZGVzIGZyb20gdGhlIERPTURvY3VtZW50LgogKiBgaXNTZXNzaW9uU3RhcnRlZGAgLSBDaGVja3MgaWYgdGhlIHNlc3Npb24gaXMgc3RhcnRlZCBvciBub3QuCiAqIGBkZWxldGVMb2NhbFNlc3Npb25gIC0gRGVsZXRlcyB0aGUgbG9jYWwgc2Vzc2lvbi4KICogYGNhbGN1bGF0ZVg1MDlGaW5nZXJwcmludGAgLSBDYWxjdWxhdGVzIHRoZSBmaW5nZXJwcmludCBvZiBhIHg1MDljZXJ0LgogKiBgZm9ybWF0RmluZ2VyUHJpbnRgIC0gRm9ybWF0cyBhIGZpbmdlcnByaW50LgogKiBgZ2VuZXJhdGVOYW1lSWRgIC0gR2VuZXJhdGVzIGEgYG5hbWVJRGAuCiAqIGBnZXRTdGF0dXNgIC0gR2V0cyBTdGF0dXMgZnJvbSBhIFJlc3BvbnNlLgogKiBgZGVjcnlwdEVsZW1lbnRgIC0gRGVjcnlwdHMgYW4gZW5jcnlwdGVkIGVsZW1lbnQuCiAqIGBjYXN0S2V5YCAtIENvbnZlcnRzIGEgYFhNTFNlY3VyaXR5S2V5YCB0byB0aGUgY29ycmVjdCBhbGdvcml0aG0uCiAqIGBhZGRTaWduYCAtIEFkZHMgc2lnbmF0dXJlIGtleSBhbmQgc2VuZGVycyBjZXJ0aWZpY2F0ZSB0byBhbiBlbGVtZW50CiAgIChNZXNzYWdlIG9yIEFzc2VydGlvbikuCiAqIGB2YWxpZGF0ZVNpZ25gIC0gVmFsaWRhdGVzIGEgc2lnbmF0dXJlIChNZXNzYWdlIG9yIEFzc2VydGlvbikuCgojIyMjIyBPbmVMb2dpblxTYW1sMlxJZFBNZXRhZGF0YVBhcnNlciAtIGBJZFBNZXRhZGF0YVBhcnNlci5waHBgICMjIyMjCgpBdXhpbGlhcnkgY2xhc3MgdGhhdCBjb250YWlucyBzZXZlcmFsIG1ldGhvZHMgdG8gcmV0cmlldmUgYW5kIHByb2Nlc3MgSWRQIG1ldGFkYXRhCgogKiBgcGFyc2VSZW1vdGVYTUxgIC0gR2V0IElkUCBNZXRhZGF0YSBJbmZvIGZyb20gVVJMLgogKiBgcGFyc2VGaWxlWE1MYCAtIEdldCBJZFAgTWV0YWRhdGEgSW5mbyBmcm9tIEZpbGUuCiAqIGBwYXJzZVhNTGAgLSBHZXQgSWRQIE1ldGFkYXRhIEluZm8gZnJvbSBYTUwuCiAqIGBpbmplY3RJbnRvU2V0dGluZ3NgIC0gSW5qZWN0IG1ldGFkYXRhIGluZm8gaW50byBwaHAtc2FtbCBzZXR0aW5ncyBhcnJheS4KClRoZSBjbGFzcyBkb2VzIG5vdCB2YWxpZGF0ZSBpbiBhbnkgd2F5IHRoZSBVUkwgdGhhdCBpcyBpbnRyb2R1Y2VkIG9uIG1ldGhvZHMgbGlrZSBwYXJzZVJlbW90ZVhNTCBpbiBvcmRlciB0byByZXRyaWV2ZSB0aGUgcmVtb3ZlIFhNTC4gVXN1YWxseSBpcyB0aGUgc2FtZSBhZG1pbmlzdHJhdG9yIHRoYXQgaGFuZGxlcyB0aGUgU2VydmljZSBQcm92aWRlciB0aGUgb25lcyB0aGF0IHNldCB0aGUgVVJMIHRoYXQgc2hvdWxkIGJlbG9uZyB0byBhIHRydXN0ZWQgdGhpcmQtcGFydHkgSWRQLgpCdXQgdGhlcmUgYXJlIG90aGVyIHNjZW5hcmlvcywgbGlrZSBhIFNBQVMgYXBwIHdoZXJlIHRoZSBhZG1pbmlzdHJhdG9yIG9mIHRoZSBhcHAgZGVsZWdhdGVzIG9uIG90aGVyIGFkbWluaXN0cmF0b3JzLiBJbiBzdWNoIGNhc2UsIGV4dHJhIHByb3RlY3Rpb24gc2hvdWxkIGJlIHRha2VuIGluIG9yZGVyIHRvIHZhbGlkYXRlIHN1Y2ggVVJMIGlucHV0cyBhbmQgYXZvaWQgYXR0YWNrcyBsaWtlIFNTUkYuCgpGb3IgbW9yZSBpbmZvLCBsb29rIGF0IHRoZSBzb3VyY2UgY29kZTsgZWFjaCBtZXRob2QgaXMgZG9jdW1lbnRlZCBhbmQgZGV0YWlscwphYm91dCB3aGF0IGl0IGRvZXMgYW5kIGhvdyB0byB1c2UgaXQgYXJlIHByb3ZpZGVkLiBNYWtlIHN1cmUgdG8gYWxzbyBjaGVjayB0aGUgZG9jIGZvbGRlciB3aGVyZQpIVE1MIGRvY3VtZW50YXRpb24gYWJvdXQgdGhlIGNsYXNzZXMgYW5kIG1ldGhvZHMgaXMgcHJvdmlkZWQgZm9yIFNBTUwgYW5kClNBTUwyLgoKCkRlbW9zIGluY2x1ZGVkIGluIHRoZSB0b29sa2l0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGUgdG9vbGtpdCBpbmNsdWRlcyB0aHJlZSBkZW1vIGFwcHMgdG8gdGVhY2ggaG93IHVzZSB0aGUgdG9vbGtpdCwgdGFrZSBhIGxvb2sgb24gaXQuCgpEZW1vcyByZXF1aXJlIHRoYXQgU1AgYW5kIElkUCBhcmUgd2VsbCBjb25maWd1cmVkIGJlZm9yZSB0ZXN0IGl0LgoKIyMgRGVtbzEgIyMKCiMjIyBTUCBzZXR1cCAjIyMKClRoZSBTQU1MIFBIUCBUb29sa2l0IGFsbG93cyB5b3UgdG8gcHJvdmlkZSB0aGUgc2V0dGluZ3MgaW5mbyBpbiB0d28gd2F5czoKCiAqIFVzZSBhIGBzZXR0aW5ncy5waHBgIGZpbGUgdGhhdCB3ZSBzaG91bGQgbG9jYXRlIGF0IHRoZSBiYXNlIGZvbGRlciBvZiB0aGUKICAgdG9vbGtpdC4KICogVXNlIGFuIGFycmF5IHdpdGggdGhlIHNldHRpbmcgZGF0YS4KCkluIHRoaXMgZGVtbyB3ZSBwcm92aWRlIHRoZSBkYXRhIGluIHRoZSBzZWNvbmQgd2F5LCB1c2luZyBhIHNldHRpbmcgYXJyYXkgbmFtZWQKYCRzZXR0aW5nc0luZm9gLiBUaGlzIGFycmF5IHVzZXJzIHRoZSBgc2V0dGluZ3NfZXhhbXBsZS5waHBgIGluY2x1ZGVkIGFzIGEgdGVtcGxhdGUKdG8gY3JlYXRlIHRoZSBgc2V0dGluZ3MucGhwYCBzZXR0aW5ncyBhbmQgc3RvcmUgaXQgaW4gdGhlIGBkZW1vMS9gIGZvbGRlci4KQ29uZmlndXJlIHRoZSBTUCBwYXJ0IGFuZCBsYXRlciByZXZpZXcgdGhlIG1ldGFkYXRhIG9mIHRoZSBJZFAgYW5kIGNvbXBsZXRlIHRoZSBJZFAgaW5mby4KCklmIHlvdSBjaGVjayB0aGUgY29kZSBvZiB0aGUgaW5kZXgucGhwIGZpbGUgeW91IHdpbGwgc2VlIHRoYXQgdGhlIGBzZXR0aW5ncy5waHBgCmZpbGUgaXMgbG9hZGVkIGluIG9yZGVyIHRvIGdldCB0aGUgYCRzZXR0aW5nc0luZm9gIHZhciB0byBiZSB1c2VkIGluIG9yZGVyIHRvIGluaXRpYWxpemUKdGhlIGBTZXR0aW5nYCBjbGFzcy4KCk5vdGljZSB0aGF0IGluIHRoaXMgZGVtbywgdGhlIGBzZXR0aW5nLnBocGAgZmlsZSB0aGF0IGNvdWxkIGJlIGRlZmluZWQgYXQgdGhlIGJhc2UKZm9sZGVyIG9mIHRoZSB0b29sa2l0IGlzIGlnbm9yZWQgYW5kIHRoZSBsaWJzIGFyZSBsb2FkZWQgdXNpbmcgdGhlCmBfdG9vbGtpdF9sb2FkZXIucGhwYCBsb2NhdGVkIGF0IHRoZSBiYXNlIGZvbGRlciBvZiB0aGUgdG9vbGtpdC4KCgojIyMgSWRQIHNldHVwICMjIwoKT25jZSB0aGUgU1AgaXMgY29uZmlndXJlZCwgdGhlIG1ldGFkYXRhIG9mIHRoZSBTUCBpcyBwdWJsaXNoZWQgYXQgdGhlCmBtZXRhZGF0YS5waHBgIGZpbGUuIENvbmZpZ3VyZSB0aGUgSWRQIGJhc2VkIG9uIHRoYXQgaW5mb3JtYXRpb24uCgoKIyMjIEhvdyBpdCB3b3JrcyAjIyMKCiAxLiBGaXJzdCB0aW1lIHlvdSBhY2Nlc3MgdG8gYGluZGV4LnBocGAgdmlldywgeW91IGNhbiBzZWxlY3QgdG8gbG9naW4gYW5kIHJldHVybgogICAgdG8gdGhlIHNhbWUgdmlldyBvciBsb2dpbiBhbmQgYmUgcmVkaXJlY3RlZCB0byB0aGUgYGF0dHJzLnBocGAgdmlldy4KCiAyLiBXaGVuIHlvdSBjbGljazoKCiAgICAyLjEgaW4gdGhlIGZpcnN0IGxpbmssIHdlIGFjY2VzcyB0byAoYGluZGV4LnBocD9zc29gKSBhbiBgQXV0aE5SZXF1ZXN0YAogICAgaXMgc2VudCB0byB0aGUgSWRQLCB3ZSBhdXRoZW50aWNhdGUgYXQgdGhlIElkUCBhbmQgdGhlbiBhIFJlc3BvbnNlIGlzIHNlbnQKICAgIHRocm91Z2ggdGhlIHVzZXIncyBjbGllbnQgdG8gdGhlIFNQLCBzcGVjaWZpY2FsbHkgdGhlIEFzc2VydGlvbiBDb25zdW1lciBTZXJ2aWNlIHZpZXc6IGBpbmRleC5waHA/YWNzYC4KICAgIE5vdGljZSB0aGF0IGEgYFJlbGF5U3RhdGVgIHBhcmFtZXRlciBpcyBzZXQgdG8gdGhlIHVybCB0aGF0IGluaXRpYXRlZCB0aGUKICAgIHByb2Nlc3MsIHRoZSBgaW5kZXgucGhwYCB2aWV3LgoKICAgIDIuMiBpbiB0aGUgc2Vjb25kIGxpbmsgd2UgYWNjZXNzIHRvIChgYXR0cnMucGhwYCkgaGF2ZSB0aGUgc2FtZSBwcm9jZXNzCiAgICBkZXNjcmliZWQgYXQgMi4xIHdpdGggdGhlIGRpZmZlcmVuY2UgdGhhdCBhcyBgUmVsYXlTdGF0ZWAgaXMgc2V0IHRoZSBgYXR0cnMucGhwYC4KCiAzLiBUaGUgU0FNTCBSZXNwb25zZSBpcyBwcm9jZXNzZWQgaW4gdGhlIEFDUyAoYGluZGV4LnBocD9hY3NgKSwgaWYgdGhlIFJlc3BvbnNlCiAgICBpcyBub3QgdmFsaWQsIHRoZSBwcm9jZXNzIHN0b3BzIGhlcmUgYW5kIGEgbWVzc2FnZSBpcyBzaG93bi4gT3RoZXJ3aXNlIHdlCiAgICBhcmUgcmVkaXJlY3RlZCB0byB0aGUgUmVsYXlTdGF0ZSB2aWV3LiBhKSBgaW5kZXgucGhwYCBvciBiKSBgYXR0cnMucGhwYC4KCiA0LiBXZSBhcmUgbG9nZ2VkIGluIHRoZSBhcHAgYW5kIHRoZSB1c2VyIGF0dHJpYnV0ZXMgYXJlIHNob3dlZC4KICAgIEF0IHRoaXMgcG9pbnQsIHdlIGNhbiB0ZXN0IHRoZSBzaW5nbGUgbG9nIG91dCBmdW5jdGlvbmFsaXR5LgoKIDUuIFRoZSBzaW5nbGUgbG9nIG91dCBmdW5jdGlvbmFsaXR5IGNvdWxkIGJlIHRlc3RlZCBieSB0d28gd2F5cy4KCiAgICA1LjEgU0xPIEluaXRpYXRlZCBieSBTUC4gQ2xpY2sgb24gdGhlICJsb2dvdXQiIGxpbmsgYXQgdGhlIFNQLCBhZnRlciB0aGF0IGEKICAgIExvZ291dCBSZXF1ZXN0IGlzIHNlbnQgdG8gdGhlIElkUCwgdGhlIHNlc3Npb24gYXQgdGhlIElkUCBpcyBjbG9zZWQgYW5kCiAgICByZXBsaWVzIHRocm91Z2ggdGhlIGNsaWVudCB0byB0aGUgU1Agd2l0aCBhIExvZ291dCBSZXNwb25zZSAoc2VudCB0byB0aGUKICAgIFNpbmdsZSBMb2dvdXQgU2VydmljZSBlbmRwb2ludCkuIFRoZSBTTFMgZW5kcG9pbnQgKGBpbmRleC5waHA/c2xzYCkgb2YgdGhlIFNQCiAgICBwcm9jZXNzIHRoZSBMb2dvdXQgUmVzcG9uc2UgYW5kIGlmIGlzIHZhbGlkLCBjbG9zZSB0aGUgdXNlciBzZXNzaW9uIG9mIHRoZQogICAgbG9jYWwgYXBwLiBOb3RpY2UgdGhhdCB0aGUgU0xPIFdvcmtmbG93IHN0YXJ0cyBhbmQgZW5kcyBhdCB0aGUgU1AuCgogICAgNS4yIFNMTyBJbml0aWF0ZWQgYnkgSWRQLiBJbiB0aGlzIGNhc2UsIHRoZSBhY3Rpb24gdGFrZXMgcGxhY2Ugb24gdGhlIElkUAogICAgc2lkZSwgdGhlIGxvZ291dCBwcm9jZXNzIGlzIGluaXRpYXRlZCBhdCB0aGUgaWRQLCBzZW5kcyBhIExvZ291dAogICAgUmVxdWVzdCB0byB0aGUgU1AgKFNMUyBlbmRwb2ludCwgYGluZGV4LnBocD9zbHNgKS4gVGhlIFNMUyBlbmRwb2ludCBvZiB0aGUgU1AKICAgIHByb2Nlc3MgdGhlIExvZ291dCBSZXF1ZXN0IGFuZCBpZiBpcyB2YWxpZCwgY2xvc2UgdGhlIHNlc3Npb24gb2YgdGhlIHVzZXIKICAgIGF0IHRoZSBsb2NhbCBhcHAgYW5kIHNlbmQgYSBMb2dvdXQgUmVzcG9uc2UgdG8gdGhlIElkUCAodG8gdGhlIFNMUyBlbmRwb2ludAogICAgb2YgdGhlIElkUCkuIFRoZSBJZFAgcmVjZWl2ZXMgdGhlIExvZ291dCBSZXNwb25zZSwgcHJvY2VzcyBpdCBhbmQgY2xvc2UgdGhlCiAgICBzZXNzaW9uIGF0IG9mIHRoZSBJZFAuIE5vdGljZSB0aGF0IHRoZSBTTE8gV29ya2Zsb3cgc3RhcnRzIGFuZCBlbmRzIGF0IHRoZSBJZFAuCgpOb3RpY2UgdGhhdCBhbGwgdGhlIFNBTUwgUmVxdWVzdHMgYW5kIFJlc3BvbnNlcyBhcmUgaGFuZGxlZCBieSBhIHVuaXF1ZSBmaWxlLAp0aGUgYGluZGV4LnBocGAgZmlsZSBhbmQgaG93IGBHRVRgIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8ga25vdyB0aGUgYWN0aW9uIHRoYXQKbXVzdCBiZSBkb25lLgoKCiMjIERlbW8yICMjCgojIyMgU1Agc2V0dXAgIyMjCgpUaGUgU0FNTCBQSFAgVG9vbGtpdCBhbGxvd3MgeW91IHRvIHByb3ZpZGUgdGhlIHNldHRpbmdzIGluZm8gaW4gdHdvIHdheXM6CgogKiBVc2UgYSBgc2V0dGluZ3MucGhwYCBmaWxlIHRoYXQgd2Ugc2hvdWxkIGxvY2F0ZSBhdCB0aGUgYmFzZSBmb2xkZXIgb2YgdGhlCiAgIHRvb2xraXQuCiAqIFVzZSBhbiBhcnJheSB3aXRoIHRoZSBzZXR0aW5nIGRhdGEuCgpUaGUgZmlyc3QgaXMgdGhlIGNhc2Ugb2YgdGhlIGRlbW8yIGFwcC4gVGhlIGBzZXR0aW5nLnBocGAgZmlsZSBhbmQgdGhlCmBzZXR0aW5nX2V4dGVuZGVkLnBocGAgZmlsZSBzaG91bGQgYmUgZGVmaW5lZCBhdCB0aGUgYmFzZSBmb2xkZXIgb2YgdGhlIHRvb2xraXQuClJldmlldyB0aGUgYHNldHRpbmdfZXhhbXBsZS5waHBgIGFuZCB0aGUgYGFkdmFuY2VkX3NldHRpbmdzX2V4YW1wbGUucGhwYCB0bwpsZWFybiBob3cgdG8gYnVpbGQgdGhlbS4KCkluIHRoaXMgY2FzZSBhcyBBdHRyaWJ1dGUgQ29uc3VtZSBTZXJ2aWNlIGFuZCBTaW5nbGUgTG9nb3V0IFNlcnZpY2Ugd2UgYXJlIGdvaW5nIHRvCnVzZSB0aGUgZmlsZXMgbG9jYXRlZCBpbiB0aGUgZW5kcG9pbnQgZm9sZGVyIChgYWNzLnBocGAgYW5kIGBzbHMucGhwYCkuCgoKIyMjIElkUCBzZXR1cCAjIyMKCk9uY2UgdGhlIFNQIGlzIGNvbmZpZ3VyZWQsIHRoZSBtZXRhZGF0YSBvZiB0aGUgU1AgaXMgcHVibGlzaGVkIGF0IHRoZQpgbWV0YWRhdGEucGhwYCBmaWxlLiBCYXNlZCBvbiB0aGF0IGluZm8sIGNvbmZpZ3VyZSB0aGUgSWRQLgoKCiMjIyBIb3cgaXQgd29ya3MgIyMjCgpBdCBkZW1vMSwgd2Ugc2F3IGhvdyBhbGwgdGhlIFNBTUwgUmVxdWVzdCBhbmQgUmVzcG9uc2VzIHdlcmUgaGFuZGxlciBhdCBhbgp1bmlxdWUgZmlsZSwgdGhlIGBpbmRleC5waHBgIGZpbGUuIFRoaXMgZGVtbzEgdXNlcyBoaWdoLWxldmVsIHByb2dyYW1taW5nLgoKQXQgZGVtbzIsIHdlIGhhdmUgc2V2ZXJhbCB2aWV3czogYGluZGV4LnBocGAsIGBzc28ucGhwYCwgYHNsby5waHBgLCBgY29uc3VtZS5waHBgCmFuZCBgbWV0YWRhdGEucGhwYC4gQXMgd2Ugc2FpZCwgd2Ugd2lsbCB1c2UgdGhlIGVuZHBvaW50cyB0aGF0IGFyZSBkZWZpbmVkCmluIHRoZSB0b29sa2l0IChgYWNzLnBocGAsIGBzbHMucGhwYCBvZiB0aGUgZW5kcG9pbnRzIGZvbGRlcikuIFRoaXMgZGVtbzIgdXNlcwpsb3ctbGV2ZWwgcHJvZ3JhbW1pbmcuCgpOb3RpY2UgdGhhdCB0aGUgU1NPIGFjdGlvbiBjYW4gYmUgaW5pdGlhdGVkIGF0IGBpbmRleC5waHBgIG9yIGBzc28ucGhwYC4KClRoZSBTQU1MIHdvcmtmbG93IHRoYXQgdGFrZSBwbGFjZSBpcyBzaW1pbGFyIHRoYXQgdGhlIHdvcmtmbG93IGRlZmluZWQgaW4gdGhlCmRlbW8xLCBvbmx5IGNoYW5nZXMgdGhlIHRhcmdldHMuCgogMS4gV2hlbiB5b3UgYWNjZXNzIGBpbmRleC5waHBgIG9yIGBzc28ucGhwYCBmb3IgdGhlIGZpcnN0IHRpbWUsIGFuIGBBdXRoTlJlcXVlc3RgIGlzCiAgICBzZW50IHRvIHRoZSBJZFAgYXV0b21hdGljYWxseSwgKGFzIGBSZWxheVN0YXRlYCBpcyBzZW50IHRoZSBvcmlnaW4gdXJsKS4KICAgIFdlIGF1dGhlbnRpY2F0ZSBhdCB0aGUgSWRQIGFuZCB0aGVuIGEgYFJlc3BvbnNlYCBpcyBzZW50IHRvIHRoZSBTUCwgdG8gdGhlCiAgICBBQ1MgZW5kcG9pbnQsIGluIHRoaXMgY2FzZSBgYWNzLnBocGAgb2YgdGhlIGVuZHBvaW50cyBmb2xkZXIuCgogMi4gVGhlIFNBTUwgUmVzcG9uc2UgaXMgcHJvY2Vzc2VkIGluIHRoZSBBQ1MsIGlmIHRoZSBgUmVzcG9uc2VgIGlzIG5vdCB2YWxpZCwKICAgIHRoZSBwcm9jZXNzIHN0b3BzIGhlcmUgYW5kIGEgbWVzc2FnZSBpcyBzaG93bi4gT3RoZXJ3aXNlIHdlIGFyZSByZWRpcmVjdGVkCiAgICB0byB0aGUgYFJlbGF5U3RhdGVgIHZpZXcgKGBzc28ucGhwYCBvciBgaW5kZXgucGhwYCkuIFRoZSBgc3NvLnBocGAgZGV0ZWN0cyBpZiB0aGUKICAgIHVzZXIgaXMgbG9nZ2VkIGFuZCByZWRpcmVjdHMgdG8gYGluZGV4LnBocGAsIHNvIHdlIHdpbGwgYmUgaW4gdGhlCiAgICBgaW5kZXgucGhwYCBhdCB0aGUgZW5kLgoKIDMuIFdlIGFyZSBsb2dnZWQgaW50byB0aGUgYXBwIGFuZCB0aGUgdXNlciBhdHRyaWJ1dGVzIChpZiBhbnkpIGFyZSBzaG93bi4KICAgIEF0IHRoaXMgcG9pbnQsIHdlIGNhbiB0ZXN0IHRoZSBzaW5nbGUgbG9nIG91dCBmdW5jdGlvbmFsaXR5LgoKIDQuIFRoZSBzaW5nbGUgbG9nIG91dCBmdW5jdGlvbmFsaXR5IGNvdWxkIGJlIHRlc3RlZCBieSB0d28gd2F5cy4KCiAgICA0LjEgU0xPIEluaXRpYXRlZCBieSBTUC4gQ2xpY2sgb24gdGhlICJsb2dvdXQiIGxpbmsgYXQgdGhlIFNQLCBhZnRlciB0aGF0CiAgICB3ZSBhcmUgcmVkaXJlY3RlZCB0byB0aGUgYHNsby5waHBgIHZpZXcgYW5kIHRoZXJlIGEgTG9nb3V0IFJlcXVlc3QgaXMgc2VudAogICAgdG8gdGhlIElkUCwgdGhlIHNlc3Npb24gYXQgdGhlIElkUCBpcyBjbG9zZWQgYW5kIHJlcGxpZXMgdG8gdGhlIFNQIGEKICAgIExvZ291dCBSZXNwb25zZSAoc2VudCB0byB0aGUgU2luZ2xlIExvZ291dCBTZXJ2aWNlIGVuZHBvaW50KS4gSW4gdGhpcyBjYXNlCiAgICBUaGUgU0xTIGVuZHBvaW50IG9mIHRoZSBTUCBwcm9jZXNzIHRoZSBMb2dvdXQgUmVzcG9uc2UgYW5kIGlmIGlzCiAgICB2YWxpZCwgY2xvc2UgdGhlIHVzZXIgc2Vzc2lvbiBvZiB0aGUgbG9jYWwgYXBwLiBOb3RpY2UgdGhhdCB0aGUgU0xPCiAgICBXb3JrZmxvdyBzdGFydHMgYW5kIGVuZHMgYXQgdGhlIFNQLgoKICAgIDQuMiBTTE8gSW5pdGlhdGVkIGJ5IElkUC4gSW4gdGhpcyBjYXNlLCB0aGUgYWN0aW9uIHRha2VzIHBsYWNlIG9uIHRoZSBJZFAKICAgIHNpZGUsIHRoZSBsb2dvdXQgcHJvY2VzcyBpcyBpbml0aWF0ZWQgYXQgdGhlIGlkUCwgc2VuZHMgYSBMb2dvdXQKICAgIFJlcXVlc3QgdG8gdGhlIFNQIChTTFMgZW5kcG9pbnQgYHNscy5waHBgIG9mIHRoZSBlbmRwb2ludCBmb2xkZXIpLgogICAgVGhlIFNMUyBlbmRwb2ludCBvZiB0aGUgU1AgcHJvY2VzcyB0aGUgTG9nb3V0IFJlcXVlc3QgYW5kIGlmIGlzIHZhbGlkLAogICAgY2xvc2UgdGhlIHNlc3Npb24gb2YgdGhlIHVzZXIgYXQgdGhlIGxvY2FsIGFwcCBhbmQgc2VuZHMgYSBMb2dvdXQgUmVzcG9uc2UKICAgIHRvIHRoZSBJZFAgKHRvIHRoZSBTTFMgZW5kcG9pbnQgb2YgdGhlIElkUCkuVGhlIElkUCByZWNlaXZlcyB0aGUgTG9nb3V0CiAgICBSZXNwb25zZSwgcHJvY2VzcyBpdCBhbmQgY2xvc2UgdGhlIHNlc3Npb24gYXQgb2YgdGhlIElkUC4gTm90aWNlIHRoYXQgdGhlCiAgICBTTE8gV29ya2Zsb3cgc3RhcnRzIGFuZCBlbmRzIGF0IHRoZSBJZFAuCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/settings_example.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiRzZXR0aW5ncyA9IGFycmF5KAogICAgLy8gSWYgJ3N0cmljdCcgaXMgVHJ1ZSwgdGhlbiB0aGUgUEhQIFRvb2xraXQgd2lsbCByZWplY3QgdW5zaWduZWQKICAgIC8vIG9yIHVuZW5jcnlwdGVkIG1lc3NhZ2VzIGlmIGl0IGV4cGVjdHMgdGhlbSBzaWduZWQgb3IgZW5jcnlwdGVkCiAgICAvLyBBbHNvIHdpbGwgcmVqZWN0IHRoZSBtZXNzYWdlcyBpZiBub3Qgc3RyaWN0bHkgZm9sbG93IHRoZSBTQU1MCiAgICAvLyBzdGFuZGFyZDogRGVzdGluYXRpb24sIE5hbWVJZCwgQ29uZGl0aW9ucyAuLi4gYXJlIHZhbGlkYXRlZCB0b28uCiAgICAnc3RyaWN0JyA9PiB0cnVlLAoKICAgIC8vIEVuYWJsZSBkZWJ1ZyBtb2RlICh0byBwcmludCBlcnJvcnMpCiAgICAnZGVidWcnID0+IGZhbHNlLAoKICAgIC8vIFNldCBhIEJhc2VVUkwgdG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHRyeSB0byBndWVzcwogICAgLy8gdGhlIEJhc2VVUkwgb2YgdGhlIHZpZXcgdGhhdCBwcm9jZXNzIHRoZSBTQU1MIE1lc3NhZ2UuCiAgICAvLyBFeC4gaHR0cDovL3NwLmV4YW1wbGUuY29tLwogICAgLy8gICAgIGh0dHA6Ly9leGFtcGxlLmNvbS9zcC8KICAgICdiYXNldXJsJyA9PiBudWxsLAoKICAgIC8vIFNlcnZpY2UgUHJvdmlkZXIgRGF0YSB0aGF0IHdlIGFyZSBkZXBsb3lpbmcKICAgICdzcCcgPT4gYXJyYXkoCiAgICAgICAgLy8gSWRlbnRpZmllciBvZiB0aGUgU1AgZW50aXR5ICAobXVzdCBiZSBhIFVSSSkKICAgICAgICAnZW50aXR5SWQnID0+ICcnLAogICAgICAgIC8vIFNwZWNpZmllcyBpbmZvIGFib3V0IHdoZXJlIGFuZCBob3cgdGhlIDxBdXRoblJlc3BvbnNlPiBtZXNzYWdlIE1VU1QgYmUKICAgICAgICAvLyByZXR1cm5lZCB0byB0aGUgcmVxdWVzdGVyLCBpbiB0aGlzIGNhc2Ugb3VyIFNQLgogICAgICAgICdhc3NlcnRpb25Db25zdW1lclNlcnZpY2UnID0+IGFycmF5KAogICAgICAgICAgICAvLyBVUkwgTG9jYXRpb24gd2hlcmUgdGhlIDxSZXNwb25zZT4gZnJvbSB0aGUgSWRQIHdpbGwgYmUgcmV0dXJuZWQKICAgICAgICAgICAgJ3VybCcgPT4gJycsCiAgICAgICAgICAgIC8vIFNBTUwgcHJvdG9jb2wgYmluZGluZyB0byBiZSB1c2VkIHdoZW4gcmV0dXJuaW5nIHRoZSA8UmVzcG9uc2U+CiAgICAgICAgICAgIC8vIG1lc3NhZ2UuICBPbmVsb2dpbiBUb29sa2l0IHN1cHBvcnRzIGZvciB0aGlzIGVuZHBvaW50IHRoZQogICAgICAgICAgICAvLyBIVFRQLVBPU1QgYmluZGluZyBvbmx5CiAgICAgICAgICAgICdiaW5kaW5nJyA9PiAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmJpbmRpbmdzOkhUVFAtUE9TVCcsCiAgICAgICAgKSwKICAgICAgICAvLyBJZiB5b3UgbmVlZCB0byBzcGVjaWZ5IHJlcXVlc3RlZCBhdHRyaWJ1dGVzLCBzZXQgYQogICAgICAgIC8vIGF0dHJpYnV0ZUNvbnN1bWluZ1NlcnZpY2UuIG5hbWVGb3JtYXQsIGF0dHJpYnV0ZVZhbHVlIGFuZAogICAgICAgIC8vIGZyaWVuZGx5TmFtZSBjYW4gYmUgb21pdHRlZC4gT3RoZXJ3aXNlIHJlbW92ZSB0aGlzIHNlY3Rpb24uCiAgICAgICAgImF0dHJpYnV0ZUNvbnN1bWluZ1NlcnZpY2UiPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAic2VydmljZU5hbWUiID0+ICJTUCB0ZXN0IiwKICAgICAgICAgICAgICAgICJzZXJ2aWNlRGVzY3JpcHRpb24iID0+ICJUZXN0IFNlcnZpY2UiLAogICAgICAgICAgICAgICAgInJlcXVlc3RlZEF0dHJpYnV0ZXMiID0+IGFycmF5KAogICAgICAgICAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgPT4gIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJpc1JlcXVpcmVkIiA9PiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWVGb3JtYXQiID0+ICIiLAogICAgICAgICAgICAgICAgICAgICAgICAiZnJpZW5kbHlOYW1lIiA9PiAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgImF0dHJpYnV0ZVZhbHVlIiA9PiAiIgogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICkKICAgICAgICApLAogICAgICAgIC8vIFNwZWNpZmllcyBpbmZvIGFib3V0IHdoZXJlIGFuZCBob3cgdGhlIDxMb2dvdXQgUmVzcG9uc2U+IG1lc3NhZ2UgTVVTVCBiZQogICAgICAgIC8vIHJldHVybmVkIHRvIHRoZSByZXF1ZXN0ZXIsIGluIHRoaXMgY2FzZSBvdXIgU1AuCiAgICAgICAgJ3NpbmdsZUxvZ291dFNlcnZpY2UnID0+IGFycmF5KAogICAgICAgICAgICAvLyBVUkwgTG9jYXRpb24gd2hlcmUgdGhlIDxSZXNwb25zZT4gZnJvbSB0aGUgSWRQIHdpbGwgYmUgcmV0dXJuZWQKICAgICAgICAgICAgJ3VybCcgPT4gJycsCiAgICAgICAgICAgIC8vIFNBTUwgcHJvdG9jb2wgYmluZGluZyB0byBiZSB1c2VkIHdoZW4gcmV0dXJuaW5nIHRoZSA8UmVzcG9uc2U+CiAgICAgICAgICAgIC8vIG1lc3NhZ2UuICBPbmVsb2dpbiBUb29sa2l0IHN1cHBvcnRzIGZvciB0aGlzIGVuZHBvaW50IHRoZQogICAgICAgICAgICAvLyBIVFRQLVJlZGlyZWN0IGJpbmRpbmcgb25seQogICAgICAgICAgICAnYmluZGluZycgPT4gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpiaW5kaW5nczpIVFRQLVJlZGlyZWN0JywKICAgICAgICApLAogICAgICAgIC8vIFNwZWNpZmllcyBjb25zdHJhaW50cyBvbiB0aGUgbmFtZSBpZGVudGlmaWVyIHRvIGJlIHVzZWQgdG8KICAgICAgICAvLyByZXByZXNlbnQgdGhlIHJlcXVlc3RlZCBzdWJqZWN0LgogICAgICAgIC8vIFRha2UgYSBsb29rIG9uIGxpYi9TYW1sMi9Db25zdGFudHMucGhwIHRvIHNlZSB0aGUgTmFtZUlkRm9ybWF0IHN1cHBvcnRlZAogICAgICAgICdOYW1lSURGb3JtYXQnID0+ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoxLjE6bmFtZWlkLWZvcm1hdDp1bnNwZWNpZmllZCcsCgogICAgICAgIC8vIFVzdWFsbHkgeDUwOWNlcnQgYW5kIHByaXZhdGVLZXkgb2YgdGhlIFNQIGFyZSBwcm92aWRlZCBieSBmaWxlcyBwbGFjZWQgYXQKICAgICAgICAvLyB0aGUgY2VydHMgZm9sZGVyLiBCdXQgd2UgY2FuIGFsc28gcHJvdmlkZSB0aGVtIHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzCiAgICAgICAgJ3g1MDljZXJ0JyA9PiAnJywKICAgICAgICAncHJpdmF0ZUtleScgPT4gJycsCgogICAgICAgIC8qCiAgICAgICAgICogS2V5IHJvbGxvdmVyCiAgICAgICAgICogSWYgeW91IHBsYW4gdG8gdXBkYXRlIHRoZSBTUCB4NTA5Y2VydCBhbmQgcHJpdmF0ZUtleQogICAgICAgICAqIHlvdSBjYW4gZGVmaW5lIGhlcmUgdGhlIG5ldyB4NTA5Y2VydCBhbmQgaXQgd2lsbCBiZSAKICAgICAgICAgKiBwdWJsaXNoZWQgb24gdGhlIFNQIG1ldGFkYXRhIHNvIElkZW50aXR5IFByb3ZpZGVycyBjYW4KICAgICAgICAgKiByZWFkIHRoZW0gYW5kIGdldCByZWFkeSBmb3Igcm9sbG92ZXIuCiAgICAgICAgICovCiAgICAgICAgLy8gJ3g1MDljZXJ0TmV3JyA9PiAnJywKICAgICksCgogICAgLy8gSWRlbnRpdHkgUHJvdmlkZXIgRGF0YSB0aGF0IHdlIHdhbnQgY29ubmVjdCB3aXRoIG91ciBTUAogICAgJ2lkcCcgPT4gYXJyYXkoCiAgICAgICAgLy8gSWRlbnRpZmllciBvZiB0aGUgSWRQIGVudGl0eSAgKG11c3QgYmUgYSBVUkkpCiAgICAgICAgJ2VudGl0eUlkJyA9PiAnJywKICAgICAgICAvLyBTU08gZW5kcG9pbnQgaW5mbyBvZiB0aGUgSWRQLiAoQXV0aGVudGljYXRpb24gUmVxdWVzdCBwcm90b2NvbCkKICAgICAgICAnc2luZ2xlU2lnbk9uU2VydmljZScgPT4gYXJyYXkoCiAgICAgICAgICAgIC8vIFVSTCBUYXJnZXQgb2YgdGhlIElkUCB3aGVyZSB0aGUgU1Agd2lsbCBzZW5kIHRoZSBBdXRoZW50aWNhdGlvbiBSZXF1ZXN0IE1lc3NhZ2UKICAgICAgICAgICAgJ3VybCcgPT4gJycsCiAgICAgICAgICAgIC8vIFNBTUwgcHJvdG9jb2wgYmluZGluZyB0byBiZSB1c2VkIHdoZW4gcmV0dXJuaW5nIHRoZSA8UmVzcG9uc2U+CiAgICAgICAgICAgIC8vIG1lc3NhZ2UuICBPbmVsb2dpbiBUb29sa2l0IHN1cHBvcnRzIGZvciB0aGlzIGVuZHBvaW50IHRoZQogICAgICAgICAgICAvLyBIVFRQLVJlZGlyZWN0IGJpbmRpbmcgb25seQogICAgICAgICAgICAnYmluZGluZycgPT4gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpiaW5kaW5nczpIVFRQLVJlZGlyZWN0JywKICAgICAgICApLAogICAgICAgIC8vIFNMTyBlbmRwb2ludCBpbmZvIG9mIHRoZSBJZFAuCiAgICAgICAgJ3NpbmdsZUxvZ291dFNlcnZpY2UnID0+IGFycmF5KAogICAgICAgICAgICAvLyBVUkwgTG9jYXRpb24gb2YgdGhlIElkUCB3aGVyZSB0aGUgU1Agd2lsbCBzZW5kIHRoZSBTTE8gUmVxdWVzdAogICAgICAgICAgICAndXJsJyA9PiAnJywKICAgICAgICAgICAgLy8gVVJMIGxvY2F0aW9uIG9mIHRoZSBJZFAgd2hlcmUgdGhlIFNQIFNMTyBSZXNwb25zZSB3aWxsIGJlIHNlbnQgKFJlc3BvbnNlTG9jYXRpb24pCiAgICAgICAgICAgIC8vIGlmIG5vdCBzZXQsIHVybCBmb3IgdGhlIFNMTyBSZXF1ZXN0IHdpbGwgYmUgdXNlZAogICAgICAgICAgICAncmVzcG9uc2VVcmwnID0+ICcnLAogICAgICAgICAgICAvLyBTQU1MIHByb3RvY29sIGJpbmRpbmcgdG8gYmUgdXNlZCB3aGVuIHJldHVybmluZyB0aGUgPFJlc3BvbnNlPgogICAgICAgICAgICAvLyBtZXNzYWdlLiAgT25lbG9naW4gVG9vbGtpdCBzdXBwb3J0cyBmb3IgdGhpcyBlbmRwb2ludCB0aGUKICAgICAgICAgICAgLy8gSFRUUC1SZWRpcmVjdCBiaW5kaW5nIG9ubHkKICAgICAgICAgICAgJ2JpbmRpbmcnID0+ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YmluZGluZ3M6SFRUUC1SZWRpcmVjdCcsCiAgICAgICAgKSwKICAgICAgICAvLyBQdWJsaWMgeDUwOSBjZXJ0aWZpY2F0ZSBvZiB0aGUgSWRQCiAgICAgICAgJ3g1MDljZXJ0JyA9PiAnJywKICAgICAgICAvKgogICAgICAgICAqICBJbnN0ZWFkIG9mIHVzZSB0aGUgd2hvbGUgeDUwOWNlcnQgeW91IGNhbiB1c2UgYSBmaW5nZXJwcmludCBpbgogICAgICAgICAqICBvcmRlciB0byB2YWxpZGF0ZSB0aGUgU0FNTFJlc3BvbnNlLCBidXQgd2UgZG9uJ3QgcmVjb21tZW5kIHRvIHVzZQogICAgICAgICAqICB0aGF0IG1ldGhvZCBvbiBwcm9kdWN0aW9uIHNpbmNlIGlzIGV4cGxvaXRhYmxlIGJ5IGEgY29sbGlzaW9uCiAgICAgICAgICogIGF0dGFjay4KICAgICAgICAgKiAgKG9wZW5zc2wgeDUwOSAtbm9vdXQgLWZpbmdlcnByaW50IC1pbiAiaWRwLmNydCIgdG8gZ2VuZXJhdGUgaXQsCiAgICAgICAgICogICBvciBhZGQgZm9yIGV4YW1wbGUgdGhlIC1zaGEyNTYgLCAtc2hhMzg0IG9yIC1zaGE1MTIgcGFyYW1ldGVyKQogICAgICAgICAqCiAgICAgICAgICogIElmIGEgZmluZ2VycHJpbnQgaXMgcHJvdmlkZWQsIHRoZW4gdGhlIGNlcnRGaW5nZXJwcmludEFsZ29yaXRobSBpcyByZXF1aXJlZCBpbiBvcmRlciB0bwogICAgICAgICAqICBsZXQgdGhlIHRvb2xraXQga25vdyB3aGljaCBBbGdvcml0aG0gd2FzIHVzZWQuIFBvc3NpYmxlIHZhbHVlczogc2hhMSwgc2hhMjU2LCBzaGEzODQgb3Igc2hhNTEyCiAgICAgICAgICogICdzaGExJyBpcyB0aGUgZGVmYXVsdCB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICAvLyAnY2VydEZpbmdlcnByaW50JyA9PiAnJywKICAgICAgICAvLyAnY2VydEZpbmdlcnByaW50QWxnb3JpdGhtJyA9PiAnc2hhMScsCgogICAgICAgIC8qIEluIHNvbWUgc2NlbmFyaW9zIHRoZSBJZFAgdXNlcyBkaWZmZXJlbnQgY2VydGlmaWNhdGVzIGZvcgogICAgICAgICAqIHNpZ25pbmcvZW5jcnlwdGlvbiwgb3IgaXMgdW5kZXIga2V5IHJvbGxvdmVyIHBoYXNlIGFuZCBtb3JlIAogICAgICAgICAqIHRoYW4gb25lIGNlcnRpZmljYXRlIGlzIHB1Ymxpc2hlZCBvbiBJZFAgbWV0YWRhdGEuCiAgICAgICAgICogSW4gb3JkZXIgdG8gaGFuZGxlIHRoYXQgdGhlIHRvb2xraXQgb2ZmZXJzIHRoYXQgcGFyYW1ldGVyLgogICAgICAgICAqICh3aGVuIHVzZWQsICd4NTA5Y2VydCcgYW5kICdjZXJ0RmluZ2VycHJpbnQnIHZhbHVlcyBhcmUKICAgICAgICAgKiBpZ25vcmVkKS4KICAgICAgICAgKi8KICAgICAgICAvLyAneDUwOWNlcnRNdWx0aScgPT4gYXJyYXkoCiAgICAgICAgLy8gICAgICAnc2lnbmluZycgPT4gYXJyYXkoCiAgICAgICAgLy8gICAgICAgICAgMCA9PiAnPGNlcnQxLXN0cmluZz4nLAogICAgICAgIC8vICAgICAgKSwKICAgICAgICAvLyAgICAgICdlbmNyeXB0aW9uJyA9PiBhcnJheSgKICAgICAgICAvLyAgICAgICAgICAwID0+ICc8Y2VydDItc3RyaW5nPicsCiAgICAgICAgLy8gICAgICApCiAgICAgICAgLy8gKSwKICAgICksCik7Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/Auth.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHBocC1zYW1sLgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQHBhY2thZ2UgT25lTG9naW4KICogQGF1dGhvciAgU2l4dG8gTWFydGluIDxzaXh0by5tYXJ0aW4uZ2FyY2lhQGdtYWlsLmNvbT4KICogQGxpY2Vuc2UgTUlUIGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICogQGxpbmsgICAgaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwKICovCgpuYW1lc3BhY2UgT25lTG9naW5cU2FtbDI7Cgp1c2UgUm9iUmljaGFyZHNcWE1MU2VjTGlic1xYTUxTZWN1cml0eUtleTsKCnVzZSBFeGNlcHRpb247CgovKioKICogTWFpbiBjbGFzcyBvZiBTQU1MIFBIUCBUb29sa2l0CiAqLwpjbGFzcyBBdXRoCnsKICAgIC8qKgogICAgICogU2V0dGluZ3MgZGF0YS4KICAgICAqCiAgICAgKiBAdmFyIFNldHRpbmdzCiAgICAgKi8KICAgIHByaXZhdGUgJF9zZXR0aW5nczsKCiAgICAvKioKICAgICAqIFVzZXIgYXR0cmlidXRlcyBkYXRhLgogICAgICoKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSAkX2F0dHJpYnV0ZXMgPSBhcnJheSgpOwoKICAgIC8qKgogICAgICogVXNlciBhdHRyaWJ1dGVzIGRhdGEgd2l0aCBGcmllbmRseU5hbWUgaW5kZXguCiAgICAgKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICRfYXR0cmlidXRlc1dpdGhGcmllbmRseU5hbWUgPSBhcnJheSgpOwoKICAgIC8qKgogICAgICogTmFtZUlECiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkX25hbWVpZDsKCiAgICAvKioKICAgICAqIE5hbWVJRCBGb3JtYXQKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRfbmFtZWlkRm9ybWF0OwoKICAgIC8qKgogICAgICogTmFtZUlEIE5hbWVRdWFsaWZpZXIKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRfbmFtZWlkTmFtZVF1YWxpZmllcjsKCiAgICAvKioKICAgICAqIE5hbWVJRCBTUCBOYW1lUXVhbGlmaWVyCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkX25hbWVpZFNQTmFtZVF1YWxpZmllcjsKCiAgICAvKioKICAgICAqIElmIHVzZXIgaXMgYXV0aGVudGljYXRlZC4KICAgICAqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSAkX2F1dGhlbnRpY2F0ZWQgPSBmYWxzZTsKCgogICAgLyoqCiAgICAgKiBTZXNzaW9uSW5kZXguIFdoZW4gdGhlIHVzZXIgaXMgbG9nZ2VkLCB0aGlzIHN0b3JlZCBpdAogICAgICogZnJvbSB0aGUgQXV0aG5TdGF0ZW1lbnQgb2YgdGhlIFNBTUwgUmVzcG9uc2UKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRfc2Vzc2lvbkluZGV4OwoKICAgIC8qKgogICAgICogU2Vzc2lvbk5vdE9uT3JBZnRlci4gV2hlbiB0aGUgdXNlciBpcyBsb2dnZWQsIHRoaXMgc3RvcmVkIGl0CiAgICAgKiBmcm9tIHRoZSBBdXRoblN0YXRlbWVudCBvZiB0aGUgU0FNTCBSZXNwb25zZQogICAgICoKICAgICAqIEB2YXIgaW50fG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkX3Nlc3Npb25FeHBpcmF0aW9uOwoKICAgIC8qKgogICAgICogVGhlIElEIG9mIHRoZSBsYXN0IG1lc3NhZ2UgcHJvY2Vzc2VkCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkX2xhc3RNZXNzYWdlSWQ7CgogICAgLyoqCiAgICAgKiBUaGUgSUQgb2YgdGhlIGxhc3QgYXNzZXJ0aW9uIHByb2Nlc3NlZAogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJF9sYXN0QXNzZXJ0aW9uSWQ7CgogICAgLyoqCiAgICAgKiBUaGUgTm90T25PckFmdGVyIHZhbHVlIG9mIHRoZSB2YWxpZCBTdWJqZWN0Q29uZmlybWF0aW9uRGF0YQogICAgICogbm9kZSAoaWYgYW55KSBvZiB0aGUgbGFzdCBhc3NlcnRpb24gcHJvY2Vzc2VkCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkX2xhc3RBc3NlcnRpb25Ob3RPbk9yQWZ0ZXI7CgogICAgLyoqCiAgICAgKiBJZiBhbnkgZXJyb3IuCiAgICAgKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICRfZXJyb3JzID0gYXJyYXkoKTsKCiAgICAvKioKICAgICAqIExhc3QgZXJyb3Igb2JqZWN0LgogICAgICoKICAgICAqIEB2YXIgRXJyb3J8bnVsbAogICAgICovCiAgICBwcml2YXRlICRfbGFzdEVycm9yRXhjZXB0aW9uOwoKICAgIC8qKgogICAgICogTGFzdCBlcnJvci4KICAgICAqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJF9sYXN0RXJyb3I7CgogICAgLyoqCiAgICAgKiBMYXN0IEF1dGhOUmVxdWVzdCBJRCBvciBMb2dvdXRSZXF1ZXN0IElEIGdlbmVyYXRlZCBieSB0aGlzIFNlcnZpY2UgUHJvdmlkZXIKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRfbGFzdFJlcXVlc3RJRDsKCiAgICAvKioKICAgICAqIFRoZSBtb3N0IHJlY2VudGx5LWNvbnN0cnVjdGVkL3Byb2Nlc3NlZCBYTUwgU0FNTCByZXF1ZXN0CiAgICAgKiAoQXV0aE5SZXF1ZXN0LCBMb2dvdXRSZXF1ZXN0KQogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJF9sYXN0UmVxdWVzdDsKCiAgICAvKioKICAgICAqIFRoZSBtb3N0IHJlY2VudGx5LWNvbnN0cnVjdGVkL3Byb2Nlc3NlZCBYTUwgU0FNTCByZXNwb25zZQogICAgICogKFNBTUxSZXNwb25zZSwgTG9nb3V0UmVzcG9uc2UpLiBJZiB0aGUgU0FNTFJlc3BvbnNlIHdhcwogICAgICogZW5jcnlwdGVkLCBieSBkZWZhdWx0IHRyaWVzIHRvIHJldHVybiB0aGUgZGVjcnlwdGVkIFhNTAogICAgICoKICAgICAqIEB2YXIgc3RyaW5nfFxEb21Eb2N1bWVudHxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJF9sYXN0UmVzcG9uc2U7CgogICAgLyoqCiAgICAgKiBJbml0aWFsaXplcyB0aGUgU1AgU0FNTCBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXl8bnVsbCAkc2V0dGluZ3MgU2V0dGluZyBkYXRhCiAgICAgKiBAcGFyYW0gYm9vbCAkc3BWYWxpZGF0aW9uT25seSBpZiB0cnVlLCBUaGUgbGlicmFyeSB3aWxsIG9ubHkgdmFsaWRhdGUgdGhlIFNBTUwgU1Agc2V0dGluZ3MsCiAgICAgKgogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KD9hcnJheSAkc2V0dGluZ3MgPSBudWxsLCBib29sICRzcFZhbGlkYXRpb25Pbmx5ID0gZmFsc2UpCiAgICB7CiAgICAgICAgJHRoaXMtPl9zZXR0aW5ncyA9IG5ldyBTZXR0aW5ncygkc2V0dGluZ3MsICRzcFZhbGlkYXRpb25Pbmx5KTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHNldHRpbmdzIGluZm8KICAgICAqCiAgICAgKiBAcmV0dXJuIFNldHRpbmdzIFRoZSBzZXR0aW5ncyBkYXRhLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2V0dGluZ3MoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X3NldHRpbmdzOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBzdHJpY3QgbW9kZSBhY3RpdmUvZGlzYWJsZQogICAgICoKICAgICAqIEBwYXJhbSBib29sICR2YWx1ZSBTdHJpY3QgcGFyYW1ldGVyCiAgICAgKgogICAgICogQHRocm93cyBFcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0U3RyaWN0KCR2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoIWlzX2Jvb2woJHZhbHVlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICAgICAgICAgICAnSW52YWxpZCB2YWx1ZSBwYXNzZWQgdG8gc2V0U3RyaWN0KCknLAogICAgICAgICAgICAgICAgRXJyb3I6OlNFVFRJTkdTX0lOVkFMSURfU1lOVEFYCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+X3NldHRpbmdzLT5zZXRTdHJpY3QoJHZhbHVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCBzY2hlbWFzIHBhdGgKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoCiAgICAgKiBAcmV0dXJuICR0aGlzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRTY2hlbWFzUGF0aCgkcGF0aCkKICAgIHsKICAgICAgICAkdGhpcy0+X3BhdGhzWydzY2hlbWFzJ10gPSAkcGF0aDsKICAgIH0KCiAgICAvKioKICAgICAqIFByb2Nlc3MgdGhlIFNBTUwgUmVzcG9uc2Ugc2VudCBieSB0aGUgSWRQLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcmVxdWVzdElkIFRoZSBJRCBvZiB0aGUgQXV0aE5SZXF1ZXN0IHNlbnQgYnkgdGhpcyBTUCB0byB0aGUgSWRQCiAgICAgKgogICAgICogQHRocm93cyBFcnJvcgogICAgICogQHRocm93cyBWYWxpZGF0aW9uRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByb2Nlc3NSZXNwb25zZSgkcmVxdWVzdElkID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+X2Vycm9ycyA9IGFycmF5KCk7CiAgICAgICAgJHRoaXMtPl9sYXN0RXJyb3IgPSAkdGhpcy0+X2xhc3RFcnJvckV4Y2VwdGlvbiA9IG51bGw7CiAgICAgICAgaWYgKGlzc2V0KCRfUE9TVFsnU0FNTFJlc3BvbnNlJ10pKSB7CiAgICAgICAgICAgIC8vIEF1dGhuUmVzcG9uc2UgLS0gSFRUUF9QT1NUIEJpbmRpbmcKICAgICAgICAgICAgJHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKCR0aGlzLT5fc2V0dGluZ3MsICRfUE9TVFsnU0FNTFJlc3BvbnNlJ10pOwogICAgICAgICAgICAkdGhpcy0+X2xhc3RSZXNwb25zZSA9ICRyZXNwb25zZS0+Z2V0WE1MRG9jdW1lbnQoKTsKCiAgICAgICAgICAgIGlmICgkcmVzcG9uc2UtPmlzVmFsaWQoJHJlcXVlc3RJZCkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5fYXR0cmlidXRlcyA9ICRyZXNwb25zZS0+Z2V0QXR0cmlidXRlcygpOwogICAgICAgICAgICAgICAgJHRoaXMtPl9hdHRyaWJ1dGVzV2l0aEZyaWVuZGx5TmFtZSA9ICRyZXNwb25zZS0+Z2V0QXR0cmlidXRlc1dpdGhGcmllbmRseU5hbWUoKTsKICAgICAgICAgICAgICAgICR0aGlzLT5fbmFtZWlkID0gJHJlc3BvbnNlLT5nZXROYW1lSWQoKTsKICAgICAgICAgICAgICAgICR0aGlzLT5fbmFtZWlkRm9ybWF0ID0gJHJlc3BvbnNlLT5nZXROYW1lSWRGb3JtYXQoKTsKICAgICAgICAgICAgICAgICR0aGlzLT5fbmFtZWlkTmFtZVF1YWxpZmllciA9ICRyZXNwb25zZS0+Z2V0TmFtZUlkTmFtZVF1YWxpZmllcigpOwogICAgICAgICAgICAgICAgJHRoaXMtPl9uYW1laWRTUE5hbWVRdWFsaWZpZXIgPSAkcmVzcG9uc2UtPmdldE5hbWVJZFNQTmFtZVF1YWxpZmllcigpOwogICAgICAgICAgICAgICAgJHRoaXMtPl9hdXRoZW50aWNhdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICR0aGlzLT5fc2Vzc2lvbkluZGV4ID0gJHJlc3BvbnNlLT5nZXRTZXNzaW9uSW5kZXgoKTsKICAgICAgICAgICAgICAgICR0aGlzLT5fc2Vzc2lvbkV4cGlyYXRpb24gPSAkcmVzcG9uc2UtPmdldFNlc3Npb25Ob3RPbk9yQWZ0ZXIoKTsKICAgICAgICAgICAgICAgICR0aGlzLT5fbGFzdE1lc3NhZ2VJZCA9ICRyZXNwb25zZS0+Z2V0SWQoKTsKICAgICAgICAgICAgICAgICR0aGlzLT5fbGFzdEFzc2VydGlvbklkID0gJHJlc3BvbnNlLT5nZXRBc3NlcnRpb25JZCgpOwogICAgICAgICAgICAgICAgJHRoaXMtPl9sYXN0QXNzZXJ0aW9uTm90T25PckFmdGVyID0gJHJlc3BvbnNlLT5nZXRBc3NlcnRpb25Ob3RPbk9yQWZ0ZXIoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0aGlzLT5fZXJyb3JzW10gPSAnaW52YWxpZF9yZXNwb25zZSc7CiAgICAgICAgICAgICAgICAkdGhpcy0+X2xhc3RFcnJvckV4Y2VwdGlvbiA9ICRyZXNwb25zZS0+Z2V0RXJyb3JFeGNlcHRpb24oKTsKICAgICAgICAgICAgICAgICR0aGlzLT5fbGFzdEVycm9yID0gJHJlc3BvbnNlLT5nZXRFcnJvcigpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPl9lcnJvcnNbXSA9ICdpbnZhbGlkX2JpbmRpbmcnOwogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICAgICAgICAgICAnU0FNTCBSZXNwb25zZSBub3QgZm91bmQsIE9ubHkgc3VwcG9ydGVkIEhUVFBfUE9TVCBCaW5kaW5nJywKICAgICAgICAgICAgICAgIEVycm9yOjpTQU1MX1JFU1BPTlNFX05PVF9GT1VORAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFByb2Nlc3MgdGhlIFNBTUwgTG9nb3V0IFJlc3BvbnNlIC8gTG9nb3V0IFJlcXVlc3Qgc2VudCBieSB0aGUgSWRQLgogICAgICoKICAgICAqIEBwYXJhbSBib29sICAgICAgICAka2VlcExvY2FsU2Vzc2lvbiAgICAgICAgICAgICBXaGVuIGZhbHNlIHdpbGwgZGVzdHJveSB0aGUgbG9jYWwgc2Vzc2lvbiwgb3RoZXJ3aXNlIHdpbGwga2VlcCBpdAogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRyZXF1ZXN0SWQgICAgICAgICAgICAgICAgICAgIFRoZSBJRCBvZiB0aGUgTG9nb3V0UmVxdWVzdCBzZW50IGJ5IHRoaXMgU1AgdG8gdGhlIElkUAogICAgICogQHBhcmFtIGJvb2wgICAgICAgICRyZXRyaWV2ZVBhcmFtZXRlcnNGcm9tU2VydmVyIFRydWUgaWYgd2Ugd2FudCB0byB1c2UgcGFyYW1ldGVycyBmcm9tICRfU0VSVkVSIHRvIHZhbGlkYXRlIHRoZSBzaWduYXR1cmUKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAgICAkY2JEZWxldGVTZXNzaW9uICAgICAgICAgICAgICBDYWxsYmFjayB0byBiZSBleGVjdXRlZCB0byBkZWxldGUgc2Vzc2lvbgogICAgICogQHBhcmFtIGJvb2wgICAgICAgICRzdGF5ICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUgaWYgd2Ugd2FudCB0byBzdGF5IChyZXR1cm5zIHRoZSB1cmwgc3RyaW5nKSBGYWxzZSB0byByZWRpcmVjdAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwKICAgICAqIEBwaHBzdGFuLXJldHVybiAoJHN0YXkgaXMgdHJ1ZSA/IHN0cmluZyA6IG5ldmVyKQogICAgICoKICAgICAqIEB0aHJvd3MgRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByb2Nlc3NTTE8oJGtlZXBMb2NhbFNlc3Npb24gPSBmYWxzZSwgJHJlcXVlc3RJZCA9IG51bGwsICRyZXRyaWV2ZVBhcmFtZXRlcnNGcm9tU2VydmVyID0gZmFsc2UsICRjYkRlbGV0ZVNlc3Npb24gPSBudWxsLCAkc3RheSA9IGZhbHNlKQogICAgewogICAgICAgICR0aGlzLT5fZXJyb3JzID0gYXJyYXkoKTsKICAgICAgICAkdGhpcy0+X2xhc3RFcnJvciA9ICR0aGlzLT5fbGFzdEVycm9yRXhjZXB0aW9uID0gbnVsbDsKICAgICAgICBpZiAoaXNzZXQoJF9HRVRbJ1NBTUxSZXNwb25zZSddKSkgewogICAgICAgICAgICAkbG9nb3V0UmVzcG9uc2UgPSAkdGhpcy0+YnVpbGRMb2dvdXRSZXNwb25zZSgkdGhpcy0+X3NldHRpbmdzLCAkX0dFVFsnU0FNTFJlc3BvbnNlJ10pOwogICAgICAgICAgICAkdGhpcy0+X2xhc3RSZXNwb25zZSA9ICRsb2dvdXRSZXNwb25zZS0+Z2V0WE1MKCk7CiAgICAgICAgICAgIGlmICghJGxvZ291dFJlc3BvbnNlLT5pc1ZhbGlkKCRyZXF1ZXN0SWQsICRyZXRyaWV2ZVBhcmFtZXRlcnNGcm9tU2VydmVyKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPl9lcnJvcnNbXSA9ICdpbnZhbGlkX2xvZ291dF9yZXNwb25zZSc7CiAgICAgICAgICAgICAgICAkdGhpcy0+X2xhc3RFcnJvckV4Y2VwdGlvbiA9ICRsb2dvdXRSZXNwb25zZS0+Z2V0RXJyb3JFeGNlcHRpb24oKTsKICAgICAgICAgICAgICAgICR0aGlzLT5fbGFzdEVycm9yID0gJGxvZ291dFJlc3BvbnNlLT5nZXRFcnJvcigpOwoKICAgICAgICAgICAgfSBlbHNlIGlmICgkbG9nb3V0UmVzcG9uc2UtPmdldFN0YXR1cygpICE9PSBDb25zdGFudHM6OlNUQVRVU19TVUNDRVNTKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+X2Vycm9yc1tdID0gJ2xvZ291dF9ub3Rfc3VjY2Vzcyc7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+X2xhc3RNZXNzYWdlSWQgPSAkbG9nb3V0UmVzcG9uc2UtPmlkOwogICAgICAgICAgICAgICAgaWYgKCEka2VlcExvY2FsU2Vzc2lvbikgewogICAgICAgICAgICAgICAgICAgIGlmICgkY2JEZWxldGVTZXNzaW9uID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzOjpkZWxldGVMb2NhbFNlc3Npb24oKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBjYWxsX3VzZXJfZnVuYygkY2JEZWxldGVTZXNzaW9uKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGlzc2V0KCRfR0VUWydTQU1MUmVxdWVzdCddKSkgewogICAgICAgICAgICAkbG9nb3V0UmVxdWVzdCA9ICR0aGlzLT5idWlsZExvZ291dFJlcXVlc3QoJHRoaXMtPl9zZXR0aW5ncywgJF9HRVRbJ1NBTUxSZXF1ZXN0J10pOwogICAgICAgICAgICAkdGhpcy0+X2xhc3RSZXF1ZXN0ID0gJGxvZ291dFJlcXVlc3QtPmdldFhNTCgpOwogICAgICAgICAgICBpZiAoISRsb2dvdXRSZXF1ZXN0LT5pc1ZhbGlkKCRyZXRyaWV2ZVBhcmFtZXRlcnNGcm9tU2VydmVyKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPl9lcnJvcnNbXSA9ICdpbnZhbGlkX2xvZ291dF9yZXF1ZXN0JzsKICAgICAgICAgICAgICAgICR0aGlzLT5fbGFzdEVycm9yRXhjZXB0aW9uID0gJGxvZ291dFJlcXVlc3QtPmdldEVycm9yRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICAgICAkdGhpcy0+X2xhc3RFcnJvciA9ICRsb2dvdXRSZXF1ZXN0LT5nZXRFcnJvcigpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCEka2VlcExvY2FsU2Vzc2lvbikgewogICAgICAgICAgICAgICAgICAgIGlmICgkY2JEZWxldGVTZXNzaW9uID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzOjpkZWxldGVMb2NhbFNlc3Npb24oKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBjYWxsX3VzZXJfZnVuYygkY2JEZWxldGVTZXNzaW9uKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkaW5SZXNwb25zZVRvID0gJGxvZ291dFJlcXVlc3QtPmlkOwogICAgICAgICAgICAgICAgJHRoaXMtPl9sYXN0TWVzc2FnZUlkID0gJGxvZ291dFJlcXVlc3QtPmlkOwogICAgICAgICAgICAgICAgJHJlc3BvbnNlQnVpbGRlciA9ICR0aGlzLT5idWlsZExvZ291dFJlc3BvbnNlKCR0aGlzLT5fc2V0dGluZ3MpOwogICAgICAgICAgICAgICAgJHJlc3BvbnNlQnVpbGRlci0+YnVpbGQoJGluUmVzcG9uc2VUbyk7CiAgICAgICAgICAgICAgICAkdGhpcy0+X2xhc3RSZXNwb25zZSA9ICRyZXNwb25zZUJ1aWxkZXItPmdldFhNTCgpOwoKICAgICAgICAgICAgICAgICRsb2dvdXRSZXNwb25zZSA9ICRyZXNwb25zZUJ1aWxkZXItPmdldFJlc3BvbnNlKCk7CgogICAgICAgICAgICAgICAgJHBhcmFtZXRlcnMgPSBhcnJheSgnU0FNTFJlc3BvbnNlJyA9PiAkbG9nb3V0UmVzcG9uc2UpOwogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRfR0VUWydSZWxheVN0YXRlJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgJHBhcmFtZXRlcnNbJ1JlbGF5U3RhdGUnXSA9ICRfR0VUWydSZWxheVN0YXRlJ107CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHNlY3VyaXR5ID0gJHRoaXMtPl9zZXR0aW5ncy0+Z2V0U2VjdXJpdHlEYXRhKCk7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHNlY3VyaXR5Wydsb2dvdXRSZXNwb25zZVNpZ25lZCddKSAmJiAkc2VjdXJpdHlbJ2xvZ291dFJlc3BvbnNlU2lnbmVkJ10pIHsKICAgICAgICAgICAgICAgICAgICAkc2lnbmF0dXJlID0gJHRoaXMtPmJ1aWxkUmVzcG9uc2VTaWduYXR1cmUoJGxvZ291dFJlc3BvbnNlLCBpc3NldCgkcGFyYW1ldGVyc1snUmVsYXlTdGF0ZSddKT8gJHBhcmFtZXRlcnNbJ1JlbGF5U3RhdGUnXTogbnVsbCwgJHNlY3VyaXR5WydzaWduYXR1cmVBbGdvcml0aG0nXSk7CiAgICAgICAgICAgICAgICAgICAgJHBhcmFtZXRlcnNbJ1NpZ0FsZyddID0gJHNlY3VyaXR5WydzaWduYXR1cmVBbGdvcml0aG0nXTsKICAgICAgICAgICAgICAgICAgICAkcGFyYW1ldGVyc1snU2lnbmF0dXJlJ10gPSAkc2lnbmF0dXJlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVkaXJlY3RUbygkdGhpcy0+Z2V0U0xPUmVzcG9uc2VVcmwoKSwgJHBhcmFtZXRlcnMsICRzdGF5KTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5fZXJyb3JzW10gPSAnaW52YWxpZF9iaW5kaW5nJzsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAgICAgICAgICAgJ1NBTUwgTG9nb3V0UmVxdWVzdC9Mb2dvdXRSZXNwb25zZSBub3QgZm91bmQuIE9ubHkgc3VwcG9ydGVkIEhUVFBfUkVESVJFQ1QgQmluZGluZycsCiAgICAgICAgICAgICAgICBFcnJvcjo6U0FNTF9MT0dPVVRNRVNTQUdFX05PVF9GT1VORAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJlZGlyZWN0cyB0aGUgdXNlciB0byB0aGUgdXJsIHBhc3QgYnkgcGFyYW1ldGVyCiAgICAgKiBvciB0byB0aGUgdXJsIHRoYXQgd2UgZGVmaW5lZCBpbiBvdXIgU1NPIFJlcXVlc3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdXJsICAgICAgICBUaGUgdGFyZ2V0IFVSTCB0byByZWRpcmVjdCB0aGUgdXNlci4KICAgICAqIEBwYXJhbSBhcnJheSAgJHBhcmFtZXRlcnMgRXh0cmEgcGFyYW1ldGVycyB0byBiZSBwYXNzZWQgYXMgcGFydCBvZiB0aGUgdXJsCiAgICAgKiBAcGFyYW0gYm9vbCAgICRzdGF5ICAgICAgIFRydWUgaWYgd2Ugd2FudCB0byBzdGF5IChyZXR1cm5zIHRoZSB1cmwgc3RyaW5nKSBGYWxzZSB0byByZWRpcmVjdAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwKICAgICAqIEBwaHBzdGFuLXJldHVybiAoJHN0YXkgaXMgdHJ1ZSA/IHN0cmluZyA6IG5ldmVyKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVkaXJlY3RUbygkdXJsID0gJycsIGFycmF5ICRwYXJhbWV0ZXJzID0gYXJyYXkoKSwgJHN0YXkgPSBmYWxzZSkKICAgIHsKICAgICAgICBhc3NlcnQoaXNfc3RyaW5nKCR1cmwpKTsKCiAgICAgICAgaWYgKGVtcHR5KCR1cmwpICYmIGlzc2V0KCRfUkVRVUVTVFsnUmVsYXlTdGF0ZSddKSkgewogICAgICAgICAgICAkdXJsID0gJF9SRVFVRVNUWydSZWxheVN0YXRlJ107CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gVXRpbHM6OnJlZGlyZWN0KCR1cmwsICRwYXJhbWV0ZXJzLCAkc3RheSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCBvciBub3QuCiAgICAgKgogICAgICogQHJldHVybiBib29sICBUcnVlIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzQXV0aGVudGljYXRlZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fYXV0aGVudGljYXRlZDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHNldCBvZiBTQU1MIGF0dHJpYnV0ZXMuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSAgQXR0cmlidXRlcyBvZiB0aGUgdXNlci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEF0dHJpYnV0ZXMoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2F0dHJpYnV0ZXM7CiAgICB9CgoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc2V0IG9mIFNBTUwgYXR0cmlidXRlcyBpbmRleGVkIGJ5IEZyaWVuZGx5TmFtZQogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgIEF0dHJpYnV0ZXMgb2YgdGhlIHVzZXIuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdHRyaWJ1dGVzV2l0aEZyaWVuZGx5TmFtZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fYXR0cmlidXRlc1dpdGhGcmllbmRseU5hbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBuYW1lSUQKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyAgVGhlIG5hbWVJRCBvZiB0aGUgYXNzZXJ0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROYW1lSWQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X25hbWVpZDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG5hbWVJRCBGb3JtYXQKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyAgVGhlIG5hbWVJRCBGb3JtYXQgb2YgdGhlIGFzc2VydGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZUlkRm9ybWF0KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9uYW1laWRGb3JtYXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBuYW1lSUQgTmFtZVF1YWxpZmllcgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nICBUaGUgbmFtZUlEIE5hbWVRdWFsaWZpZXIgb2YgdGhlIGFzc2VydGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZUlkTmFtZVF1YWxpZmllcigpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fbmFtZWlkTmFtZVF1YWxpZmllcjsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG5hbWVJRCBTUCBOYW1lUXVhbGlmaWVyCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgIFRoZSBuYW1lSUQgU1AgTmFtZVF1YWxpZmllciBvZiB0aGUgYXNzZXJ0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROYW1lSWRTUE5hbWVRdWFsaWZpZXIoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X25hbWVpZFNQTmFtZVF1YWxpZmllcjsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIFNlc3Npb25JbmRleAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgIFRoZSBTZXNzaW9uSW5kZXggb2YgdGhlIGFzc2VydGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2Vzc2lvbkluZGV4KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9zZXNzaW9uSW5kZXg7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBTZXNzaW9uTm90T25PckFmdGVyCiAgICAgKgogICAgICogQHJldHVybiBpbnR8bnVsbCAgVGhlIFNlc3Npb25Ob3RPbk9yQWZ0ZXIgb2YgdGhlIGFzc2VydGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2Vzc2lvbkV4cGlyYXRpb24oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X3Nlc3Npb25FeHBpcmF0aW9uOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBpZiB0aGVyZSB3ZXJlIGFueSBlcnJvcgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgIEVycm9ycwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9lcnJvcnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSByZWFzb24gZm9yIHRoZSBsYXN0IGVycm9yCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCAgRXJyb3IgcmVhc29uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMYXN0RXJyb3JSZWFzb24oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2xhc3RFcnJvcjsKICAgIH0KCgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBsYXN0IGVycm9yCiAgICAgKgogICAgICogQHJldHVybiBFeGNlcHRpb258bnVsbCBFcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGFzdEVycm9yRXhjZXB0aW9uKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9sYXN0RXJyb3JFeGNlcHRpb247CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSByZXF1ZXN0ZWQgU0FNTCBhdHRyaWJ1dGUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIFRoZSByZXF1ZXN0ZWQgYXR0cmlidXRlIG9mIHRoZSB1c2VyLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl8bnVsbCBSZXF1ZXN0ZWQgU0FNTCBhdHRyaWJ1dGUgKCRuYW1lKS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEF0dHJpYnV0ZSgkbmFtZSkKICAgIHsKICAgICAgICBhc3NlcnQoaXNfc3RyaW5nKCRuYW1lKSk7CgogICAgICAgICR2YWx1ZSA9IG51bGw7CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5fYXR0cmlidXRlc1skbmFtZV0pKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X2F0dHJpYnV0ZXNbJG5hbWVdOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmVxdWVzdGVkIFNBTUwgYXR0cmlidXRlIGluZGV4ZWQgYnkgRnJpZW5kbHlOYW1lCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZnJpZW5kbHlOYW1lIFRoZSByZXF1ZXN0ZWQgYXR0cmlidXRlIG9mIHRoZSB1c2VyLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl8bnVsbCBSZXF1ZXN0ZWQgU0FNTCBhdHRyaWJ1dGUgKCRmcmllbmRseU5hbWUpLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXR0cmlidXRlV2l0aEZyaWVuZGx5TmFtZSgkZnJpZW5kbHlOYW1lKQogICAgewogICAgICAgIGFzc2VydChpc19zdHJpbmcoJGZyaWVuZGx5TmFtZSkpOwogICAgICAgICR2YWx1ZSA9IG51bGw7CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5fYXR0cmlidXRlc1dpdGhGcmllbmRseU5hbWVbJGZyaWVuZGx5TmFtZV0pKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X2F0dHJpYnV0ZXNXaXRoRnJpZW5kbHlOYW1lWyRmcmllbmRseU5hbWVdOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogSW5pdGlhdGVzIHRoZSBTU08gcHJvY2Vzcy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHJldHVyblRvICAgICAgICBUaGUgdGFyZ2V0IFVSTCB0aGUgdXNlciBzaG91bGQgYmUgcmV0dXJuZWQgdG8gYWZ0ZXIgbG9naW4uCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgJHBhcmFtZXRlcnMgICAgICBFeHRyYSBwYXJhbWV0ZXJzIHRvIGJlIGFkZGVkIHRvIHRoZSBHRVQKICAgICAqIEBwYXJhbSBib29sICAgICAgICAkZm9yY2VBdXRobiAgICAgIFdoZW4gdHJ1ZSB0aGUgQXV0aE5SZXF1ZXN0IHdpbGwgc2V0IHRoZSBGb3JjZUF1dGhuPSd0cnVlJwogICAgICogQHBhcmFtIGJvb2wgICAgICAgICRpc1Bhc3NpdmUgICAgICAgV2hlbiB0cnVlIHRoZSBBdXRoTlJlcXVlc3Qgd2lsbCBzZXQgdGhlIElzcGFzc2l2ZT0ndHJ1ZScKICAgICAqIEBwYXJhbSBib29sICAgICAgICAkc3RheSAgICAgICAgICAgIFRydWUgaWYgd2Ugd2FudCB0byBzdGF5IChyZXR1cm5zIHRoZSB1cmwgc3RyaW5nKSBGYWxzZSB0byByZWRpcmVjdAogICAgICogQHBhcmFtIGJvb2wgICAgICAgICRzZXROYW1lSWRQb2xpY3kgV2hlbiB0cnVlIHRoZSBBdXRoTlJlcXVlc3Qgd2lsbCBzZXQgYSBuYW1lSWRQb2xpY3kgZWxlbWVudAogICAgICogQHBhcmFtIHN0cmluZyAgICAgICRuYW1lSWRWYWx1ZVJlcSAgSW5kaWNhdGVzIHRvIHRoZSBJZFAgdGhlIHN1YmplY3QgdGhhdCBzaG91bGQgYmUgYXV0aGVudGljYXRlZAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgSWYgJHN0YXkgaXMgVHJ1ZSwgaXQgcmV0dXJuIGEgc3RyaW5nIHdpdGggdGhlIFNMTyBVUkwgKyBMb2dvdXRSZXF1ZXN0ICsgcGFyYW1ldGVycwogICAgICogQHBocHN0YW4tcmV0dXJuICgkc3RheSBpcyB0cnVlID8gc3RyaW5nIDogbmV2ZXIpCiAgICAgKgogICAgICogQHRocm93cyBFcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9naW4oJHJldHVyblRvID0gbnVsbCwgYXJyYXkgJHBhcmFtZXRlcnMgPSBhcnJheSgpLCAkZm9yY2VBdXRobiA9IGZhbHNlLCAkaXNQYXNzaXZlID0gZmFsc2UsICRzdGF5ID0gZmFsc2UsICRzZXROYW1lSWRQb2xpY3kgPSB0cnVlLCAkbmFtZUlkVmFsdWVSZXEgPSBudWxsKQogICAgewogICAgICAgICRhdXRoblJlcXVlc3QgPSAkdGhpcy0+YnVpbGRBdXRoblJlcXVlc3QoJHRoaXMtPl9zZXR0aW5ncywgJGZvcmNlQXV0aG4sICRpc1Bhc3NpdmUsICRzZXROYW1lSWRQb2xpY3ksICRuYW1lSWRWYWx1ZVJlcSk7CgogICAgICAgICR0aGlzLT5fbGFzdFJlcXVlc3QgPSAkYXV0aG5SZXF1ZXN0LT5nZXRYTUwoKTsKICAgICAgICAkdGhpcy0+X2xhc3RSZXF1ZXN0SUQgPSAkYXV0aG5SZXF1ZXN0LT5nZXRJZCgpOwoKICAgICAgICAkc2FtbFJlcXVlc3QgPSAkYXV0aG5SZXF1ZXN0LT5nZXRSZXF1ZXN0KCk7CiAgICAgICAgJHBhcmFtZXRlcnNbJ1NBTUxSZXF1ZXN0J10gPSAkc2FtbFJlcXVlc3Q7CgogICAgICAgIGlmICghZW1wdHkoJHJldHVyblRvKSkgewogICAgICAgICAgICAkcGFyYW1ldGVyc1snUmVsYXlTdGF0ZSddID0gJHJldHVyblRvOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRwYXJhbWV0ZXJzWydSZWxheVN0YXRlJ10gPSBVdGlsczo6Z2V0U2VsZlJvdXRlZFVSTE5vUXVlcnkoKTsKICAgICAgICB9CgogICAgICAgICRzZWN1cml0eSA9ICR0aGlzLT5fc2V0dGluZ3MtPmdldFNlY3VyaXR5RGF0YSgpOwogICAgICAgIGlmIChpc3NldCgkc2VjdXJpdHlbJ2F1dGhuUmVxdWVzdHNTaWduZWQnXSkgJiYgJHNlY3VyaXR5WydhdXRoblJlcXVlc3RzU2lnbmVkJ10pIHsKICAgICAgICAgICAgJHNpZ25hdHVyZSA9ICR0aGlzLT5idWlsZFJlcXVlc3RTaWduYXR1cmUoJHNhbWxSZXF1ZXN0LCAkcGFyYW1ldGVyc1snUmVsYXlTdGF0ZSddLCAkc2VjdXJpdHlbJ3NpZ25hdHVyZUFsZ29yaXRobSddKTsKICAgICAgICAgICAgJHBhcmFtZXRlcnNbJ1NpZ0FsZyddID0gJHNlY3VyaXR5WydzaWduYXR1cmVBbGdvcml0aG0nXTsKICAgICAgICAgICAgJHBhcmFtZXRlcnNbJ1NpZ25hdHVyZSddID0gJHNpZ25hdHVyZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZWRpcmVjdFRvKCR0aGlzLT5nZXRTU091cmwoKSwgJHBhcmFtZXRlcnMsICRzdGF5KTsKICAgIH0KCiAgICAvKioKICAgICAqIEluaXRpYXRlcyB0aGUgU0xPIHByb2Nlc3MuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRyZXR1cm5UbyAgICAgICAgICAgIFRoZSB0YXJnZXQgVVJMIHRoZSB1c2VyIHNob3VsZCBiZSByZXR1cm5lZCB0byBhZnRlciBsb2dvdXQuCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgJHBhcmFtZXRlcnMgICAgICAgICAgRXh0cmEgcGFyYW1ldGVycyB0byBiZSBhZGRlZCB0byB0aGUgR0VUCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJG5hbWVJZCAgICAgICAgICAgICAgVGhlIE5hbWVJRCB0aGF0IHdpbGwgYmUgc2V0IGluIHRoZSBMb2dvdXRSZXF1ZXN0LgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRzZXNzaW9uSW5kZXggICAgICAgIFRoZSBTZXNzaW9uSW5kZXggKHRha2VuIGZyb20gdGhlIFNBTUwgUmVzcG9uc2UgaW4gdGhlIFNTTyBwcm9jZXNzKS4KICAgICAqIEBwYXJhbSBib29sICAgICAgICAkc3RheSAgICAgICAgICAgICAgICBUcnVlIGlmIHdlIHdhbnQgdG8gc3RheSAocmV0dXJucyB0aGUgdXJsIHN0cmluZykgRmFsc2UgdG8gcmVkaXJlY3QKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkbmFtZUlkRm9ybWF0ICAgICAgICBUaGUgTmFtZUlEIEZvcm1hdCB3aWxsIGJlIHNldCBpbiB0aGUgTG9nb3V0UmVxdWVzdC4KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkbmFtZUlkTmFtZVF1YWxpZmllciBUaGUgTmFtZUlEIE5hbWVRdWFsaWZpZXIgd2lsbCBiZSBzZXQgaW4gdGhlIExvZ291dFJlcXVlc3QuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBJZiAkc3RheSBpcyBUcnVlLCBpdCByZXR1cm4gYSBzdHJpbmcgd2l0aCB0aGUgU0xPIFVSTCArIExvZ291dFJlcXVlc3QgKyBwYXJhbWV0ZXJzCiAgICAgKiBAcGhwc3Rhbi1yZXR1cm4gKCRzdGF5IGlzIHRydWUgPyBzdHJpbmcgOiBuZXZlcikKICAgICAqCiAgICAgKiBAdGhyb3dzIEVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2dvdXQoJHJldHVyblRvID0gbnVsbCwgYXJyYXkgJHBhcmFtZXRlcnMgPSBhcnJheSgpLCAkbmFtZUlkID0gbnVsbCwgJHNlc3Npb25JbmRleCA9IG51bGwsICRzdGF5ID0gZmFsc2UsICRuYW1lSWRGb3JtYXQgPSBudWxsLCAkbmFtZUlkTmFtZVF1YWxpZmllciA9IG51bGwsICRuYW1lSWRTUE5hbWVRdWFsaWZpZXIgPSBudWxsKQogICAgewogICAgICAgICRzbG9VcmwgPSAkdGhpcy0+Z2V0U0xPdXJsKCk7CiAgICAgICAgaWYgKGVtcHR5KCRzbG9VcmwpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgICAgICAgICAgICdUaGUgSWRQIGRvZXMgbm90IHN1cHBvcnQgU2luZ2xlIExvZyBPdXQnLAogICAgICAgICAgICAgICAgRXJyb3I6OlNBTUxfU0lOR0xFX0xPR09VVF9OT1RfU1VQUE9SVEVECiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW1wdHkoJG5hbWVJZCkgJiYgIWVtcHR5KCR0aGlzLT5fbmFtZWlkKSkgewogICAgICAgICAgICAkbmFtZUlkID0gJHRoaXMtPl9uYW1laWQ7CiAgICAgICAgfQogICAgICAgIGlmIChlbXB0eSgkbmFtZUlkRm9ybWF0KSAmJiAhZW1wdHkoJHRoaXMtPl9uYW1laWRGb3JtYXQpKSB7CiAgICAgICAgICAgICRuYW1lSWRGb3JtYXQgPSAkdGhpcy0+X25hbWVpZEZvcm1hdDsKICAgICAgICB9CgogICAgICAgICRsb2dvdXRSZXF1ZXN0ID0gJHRoaXMtPmJ1aWxkTG9nb3V0UmVxdWVzdCgkdGhpcy0+X3NldHRpbmdzLCBudWxsLCAkbmFtZUlkLCAkc2Vzc2lvbkluZGV4LCAkbmFtZUlkRm9ybWF0LCAkbmFtZUlkTmFtZVF1YWxpZmllciwgJG5hbWVJZFNQTmFtZVF1YWxpZmllcik7CgogICAgICAgICR0aGlzLT5fbGFzdFJlcXVlc3QgPSAkbG9nb3V0UmVxdWVzdC0+Z2V0WE1MKCk7CiAgICAgICAgJHRoaXMtPl9sYXN0UmVxdWVzdElEID0gJGxvZ291dFJlcXVlc3QtPmlkOwoKICAgICAgICAkc2FtbFJlcXVlc3QgPSAkbG9nb3V0UmVxdWVzdC0+Z2V0UmVxdWVzdCgpOwoKICAgICAgICAkcGFyYW1ldGVyc1snU0FNTFJlcXVlc3QnXSA9ICRzYW1sUmVxdWVzdDsKICAgICAgICBpZiAoIWVtcHR5KCRyZXR1cm5UbykpIHsKICAgICAgICAgICAgJHBhcmFtZXRlcnNbJ1JlbGF5U3RhdGUnXSA9ICRyZXR1cm5UbzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcGFyYW1ldGVyc1snUmVsYXlTdGF0ZSddID0gVXRpbHM6OmdldFNlbGZSb3V0ZWRVUkxOb1F1ZXJ5KCk7CiAgICAgICAgfQoKICAgICAgICAkc2VjdXJpdHkgPSAkdGhpcy0+X3NldHRpbmdzLT5nZXRTZWN1cml0eURhdGEoKTsKICAgICAgICBpZiAoaXNzZXQoJHNlY3VyaXR5Wydsb2dvdXRSZXF1ZXN0U2lnbmVkJ10pICYmICRzZWN1cml0eVsnbG9nb3V0UmVxdWVzdFNpZ25lZCddKSB7CiAgICAgICAgICAgICRzaWduYXR1cmUgPSAkdGhpcy0+YnVpbGRSZXF1ZXN0U2lnbmF0dXJlKCRzYW1sUmVxdWVzdCwgJHBhcmFtZXRlcnNbJ1JlbGF5U3RhdGUnXSwgJHNlY3VyaXR5WydzaWduYXR1cmVBbGdvcml0aG0nXSk7CiAgICAgICAgICAgICRwYXJhbWV0ZXJzWydTaWdBbGcnXSA9ICRzZWN1cml0eVsnc2lnbmF0dXJlQWxnb3JpdGhtJ107CiAgICAgICAgICAgICRwYXJhbWV0ZXJzWydTaWduYXR1cmUnXSA9ICRzaWduYXR1cmU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPnJlZGlyZWN0VG8oJHNsb1VybCwgJHBhcmFtZXRlcnMsICRzdGF5KTsKICAgIH0KCiAgIC8qKgogICAgICogR2V0cyB0aGUgSWRQIFNTTyB1cmwuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIHVybCBvZiB0aGUgSWRQIFNpbmdsZSBTaWduIE9uIFNlcnZpY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNTT3VybCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fc2V0dGluZ3MtPmdldElkUFNTT1VybCgpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgSWRQIFNMTyB1cmwuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBUaGUgdXJsIG9mIHRoZSBJZFAgU2luZ2xlIExvZ291dCBTZXJ2aWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTTE91cmwoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X3NldHRpbmdzLT5nZXRJZFBTTE9VcmwoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldHMgdGhlIElkUCBTTE8gcmVzcG9uc2UgdXJsLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIHJlc3BvbnNlIHVybCBvZiB0aGUgSWRQIFNpbmdsZSBMb2dvdXQgU2VydmljZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U0xPUmVzcG9uc2VVcmwoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X3NldHRpbmdzLT5nZXRJZFBTTE9SZXNwb25zZVVybCgpOwogICAgfQoKCiAgICAvKioKICAgICAqIEdldHMgdGhlIElEIG9mIHRoZSBsYXN0IEF1dGhOUmVxdWVzdCBvciBMb2dvdXRSZXF1ZXN0IGdlbmVyYXRlZCBieSB0aGUgU2VydmljZSBQcm92aWRlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgSUQgb2YgdGhlIFJlcXVlc3QgU0FNTCBtZXNzYWdlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGFzdFJlcXVlc3RJRCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fbGFzdFJlcXVlc3RJRDsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYW4gQXV0aG5SZXF1ZXN0CiAgICAgKgogICAgICogQHBhcmFtIFNldHRpbmdzICRzZXR0aW5ncyAgICAgICAgU2V0dGluZyBkYXRhCiAgICAgKiBAcGFyYW0gYm9vbCAgICAgJGZvcmNlQXV0aG4gICAgICBXaGVuIHRydWUgdGhlIEF1dGhOUmVxdWVzdCB3aWxsIHNldCB0aGUgRm9yY2VBdXRobj0ndHJ1ZScKICAgICAqIEBwYXJhbSBib29sICAgICAkaXNQYXNzaXZlICAgICAgIFdoZW4gdHJ1ZSB0aGUgQXV0aE5SZXF1ZXN0IHdpbGwgc2V0IHRoZSBJc3Bhc3NpdmU9J3RydWUnCiAgICAgKiBAcGFyYW0gYm9vbCAgICAgJHNldE5hbWVJZFBvbGljeSBXaGVuIHRydWUgdGhlIEF1dGhOUmVxdWVzdCB3aWxsIHNldCBhIG5hbWVJZFBvbGljeSBlbGVtZW50CiAgICAgKiBAcGFyYW0gc3RyaW5nICAgJG5hbWVJZFZhbHVlUmVxICBJbmRpY2F0ZXMgdG8gdGhlIElkUCB0aGUgc3ViamVjdCB0aGF0IHNob3VsZCBiZSBhdXRoZW50aWNhdGVkCiAgICAgKgogICAgICogQHJldHVybiBBdXRoblJlcXVlc3QgVGhlIEF1dGhuUmVxdWVzdCBvYmplY3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJ1aWxkQXV0aG5SZXF1ZXN0KFNldHRpbmdzICRzZXR0aW5ncywgJGZvcmNlQXV0aG4sICRpc1Bhc3NpdmUsICRzZXROYW1lSWRQb2xpY3ksICRuYW1lSWRWYWx1ZVJlcSA9IG51bGwpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBBdXRoblJlcXVlc3QoJHNldHRpbmdzLCAkZm9yY2VBdXRobiwgJGlzUGFzc2l2ZSwgJHNldE5hbWVJZFBvbGljeSwgJG5hbWVJZFZhbHVlUmVxKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYW4gTG9nb3V0UmVxdWVzdAogICAgICoKICAgICAqIEBwYXJhbSBTZXR0aW5ncyAgICAkc2V0dGluZ3MgICAgICAgICAgICBTZXR0aW5ncwogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRyZXF1ZXN0ICAgICAgICAgICAgIEEgVVVFbmNvZGVkIExvZ291dCBSZXF1ZXN0LgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRuYW1lSWQgICAgICAgICAgICAgIFRoZSBOYW1lSUQgdGhhdCB3aWxsIGJlIHNldCBpbiB0aGUgTG9nb3V0UmVxdWVzdC4KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkc2Vzc2lvbkluZGV4ICAgICAgICBUaGUgU2Vzc2lvbkluZGV4ICh0YWtlbiBmcm9tIHRoZSBTQU1MIFJlc3BvbnNlIGluIHRoZSBTU08gcHJvY2VzcykuCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJG5hbWVJZEZvcm1hdCAgICAgICAgVGhlIE5hbWVJRCBGb3JtYXQgd2lsbCBiZSBzZXQgaW4gdGhlIExvZ291dFJlcXVlc3QuCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJG5hbWVJZE5hbWVRdWFsaWZpZXIgVGhlIE5hbWVJRCBOYW1lUXVhbGlmaWVyIHdpbGwgYmUgc2V0IGluIHRoZSBMb2dvdXRSZXF1ZXN0LgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRuYW1lSWRTUE5hbWVRdWFsaWZpZXIgVGhlIE5hbWVJRCBTUCBOYW1lUXVhbGlmaWVyIHdpbGwgYmUgc2V0IGluIHRoZSBMb2dvdXRSZXF1ZXN0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYnVpbGRMb2dvdXRSZXF1ZXN0KFNldHRpbmdzICRzZXR0aW5ncywgJHJlcXVlc3QgPSBudWxsLCAkbmFtZUlkID0gbnVsbCwgJHNlc3Npb25JbmRleCA9IG51bGwsICRuYW1lSWRGb3JtYXQgPSBudWxsLCAkbmFtZUlkTmFtZVF1YWxpZmllciA9IG51bGwsICRuYW1lSWRTUE5hbWVRdWFsaWZpZXIgPSBudWxsKQogICAgewogICAgICAgIHJldHVybiBuZXcgTG9nb3V0UmVxdWVzdCgkc2V0dGluZ3MsICRyZXF1ZXN0LCAkbmFtZUlkLCAkc2Vzc2lvbkluZGV4LCAkbmFtZUlkRm9ybWF0LCAkbmFtZUlkTmFtZVF1YWxpZmllciwgJG5hbWVJZFNQTmFtZVF1YWxpZmllcik7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIGEgTG9nb3V0IFJlc3BvbnNlIG9iamVjdCAoSW5pdGlhbGl6ZSBwYXJhbXMgZnJvbSBzZXR0aW5ncyBhbmQgaWYgcHJvdmlkZWQKICAgICAqIGxvYWQgdGhlIExvZ291dCBSZXNwb25zZS4KICAgICAqCiAgICAgKiBAcGFyYW0gU2V0dGluZ3MgICAgJHNldHRpbmdzIFNldHRpbmdzLgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRyZXNwb25zZSBBbiBVVUVuY29kZWQgU0FNTCBMb2dvdXQgcmVzcG9uc2UgZnJvbSB0aGUgSWRQLgogICAgICoKICAgICAqIEB0aHJvd3MgRXJyb3IKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBidWlsZExvZ291dFJlc3BvbnNlKFNldHRpbmdzICRzZXR0aW5ncywgJHJlc3BvbnNlID0gbnVsbCkKICAgIHsKICAgICAgICByZXR1cm4gbmV3IExvZ291dFJlc3BvbnNlKCRzZXR0aW5ncywgJHJlc3BvbnNlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdlbmVyYXRlcyB0aGUgU2lnbmF0dXJlIGZvciBhIFNBTUwgUmVxdWVzdAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNhbWxSZXF1ZXN0ICAgVGhlIFNBTUwgUmVxdWVzdAogICAgICogQHBhcmFtIHN0cmluZyAkcmVsYXlTdGF0ZSAgICBUaGUgUmVsYXlTdGF0ZQogICAgICogQHBhcmFtIHN0cmluZyAkc2lnbkFsZ29yaXRobSBTaWduYXR1cmUgYWxnb3JpdGhtIG1ldGhvZAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIEEgYmFzZTY0IGVuY29kZWQgc2lnbmF0dXJlCiAgICAgKgogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJ1aWxkUmVxdWVzdFNpZ25hdHVyZSgkc2FtbFJlcXVlc3QsICRyZWxheVN0YXRlLCAkc2lnbkFsZ29yaXRobSA9IFhNTFNlY3VyaXR5S2V5OjpSU0FfU0hBMjU2KQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YnVpbGRNZXNzYWdlU2lnbmF0dXJlKCRzYW1sUmVxdWVzdCwgJHJlbGF5U3RhdGUsICRzaWduQWxnb3JpdGhtLCAiU0FNTFJlcXVlc3QiKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdlbmVyYXRlcyB0aGUgU2lnbmF0dXJlIGZvciBhIFNBTUwgUmVzcG9uc2UKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzYW1sUmVzcG9uc2UgIFRoZSBTQU1MIFJlc3BvbnNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRyZWxheVN0YXRlICAgIFRoZSBSZWxheVN0YXRlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzaWduQWxnb3JpdGhtIFNpZ25hdHVyZSBhbGdvcml0aG0gbWV0aG9kCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgQSBiYXNlNjQgZW5jb2RlZCBzaWduYXR1cmUKICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICogQHRocm93cyBFcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYnVpbGRSZXNwb25zZVNpZ25hdHVyZSgkc2FtbFJlc3BvbnNlLCAkcmVsYXlTdGF0ZSwgJHNpZ25BbGdvcml0aG0gPSBYTUxTZWN1cml0eUtleTo6UlNBX1NIQTI1NikKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmJ1aWxkTWVzc2FnZVNpZ25hdHVyZSgkc2FtbFJlc3BvbnNlLCAkcmVsYXlTdGF0ZSwgJHNpZ25BbGdvcml0aG0sICJTQU1MUmVzcG9uc2UiKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdlbmVyYXRlcyB0aGUgU2lnbmF0dXJlIGZvciBhIFNBTUwgTWVzc2FnZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNhbWxNZXNzYWdlICAgVGhlIFNBTUwgTWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkcmVsYXlTdGF0ZSAgICBUaGUgUmVsYXlTdGF0ZQogICAgICogQHBhcmFtIHN0cmluZyAkc2lnbkFsZ29yaXRobSBTaWduYXR1cmUgYWxnb3JpdGhtIG1ldGhvZAogICAgICogQHBhcmFtIHN0cmluZyAkdHlwZSAgICAgICAgICAiU0FNTFJlcXVlc3QiIG9yICJTQU1MUmVzcG9uc2UiCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgQSBiYXNlNjQgZW5jb2RlZCBzaWduYXR1cmUKICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICogQHRocm93cyBFcnJvcgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGJ1aWxkTWVzc2FnZVNpZ25hdHVyZSgkc2FtbE1lc3NhZ2UsICRyZWxheVN0YXRlLCAkc2lnbkFsZ29yaXRobSA9IFhNTFNlY3VyaXR5S2V5OjpSU0FfU0hBMjU2LCAkdHlwZSA9ICJTQU1MUmVxdWVzdCIpCiAgICB7CiAgICAgICAgJGtleSA9ICR0aGlzLT5fc2V0dGluZ3MtPmdldFNQa2V5KCk7CiAgICAgICAgaWYgKGVtcHR5KCRrZXkpKSB7CiAgICAgICAgICAgIGlmICgkdHlwZSA9PSAiU0FNTFJlcXVlc3QiKSB7CiAgICAgICAgICAgICAgICAkZXJyb3JNc2cgPSAiVHJ5aW5nIHRvIHNpZ24gdGhlIFNBTUwgUmVxdWVzdCBidXQgY2FuJ3QgbG9hZCB0aGUgU1AgcHJpdmF0ZSBrZXkiOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGVycm9yTXNnID0gIlRyeWluZyB0byBzaWduIHRoZSBTQU1MIFJlc3BvbnNlIGJ1dCBjYW4ndCBsb2FkIHRoZSBTUCBwcml2YXRlIGtleSI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigkZXJyb3JNc2csIEVycm9yOjpQUklWQVRFX0tFWV9OT1RfRk9VTkQpOwogICAgICAgIH0KCiAgICAgICAgJG9iaktleSA9IG5ldyBYTUxTZWN1cml0eUtleSgkc2lnbkFsZ29yaXRobSwgYXJyYXkoJ3R5cGUnID0+ICdwcml2YXRlJykpOwogICAgICAgICRvYmpLZXktPmxvYWRLZXkoJGtleSwgZmFsc2UpOwoKICAgICAgICAkc2VjdXJpdHkgPSAkdGhpcy0+X3NldHRpbmdzLT5nZXRTZWN1cml0eURhdGEoKTsKICAgICAgICBpZiAoJHNlY3VyaXR5Wydsb3dlcmNhc2VVcmxlbmNvZGluZyddKSB7CiAgICAgICAgICAgICRtc2cgPSAkdHlwZS4nPScucmF3dXJsZW5jb2RlKCRzYW1sTWVzc2FnZSk7CiAgICAgICAgICAgIGlmIChpc3NldCgkcmVsYXlTdGF0ZSkpIHsKICAgICAgICAgICAgICAgICRtc2cgLj0gJyZSZWxheVN0YXRlPScucmF3dXJsZW5jb2RlKCRyZWxheVN0YXRlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkbXNnIC49ICcmU2lnQWxnPScgLiByYXd1cmxlbmNvZGUoJHNpZ25BbGdvcml0aG0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRtc2cgPSAkdHlwZS4nPScudXJsZW5jb2RlKCRzYW1sTWVzc2FnZSk7CiAgICAgICAgICAgIGlmIChpc3NldCgkcmVsYXlTdGF0ZSkpIHsKICAgICAgICAgICAgICAgICRtc2cgLj0gJyZSZWxheVN0YXRlPScudXJsZW5jb2RlKCRyZWxheVN0YXRlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkbXNnIC49ICcmU2lnQWxnPScgLiB1cmxlbmNvZGUoJHNpZ25BbGdvcml0aG0pOwogICAgICAgIH0KICAgICAgICAkc2lnbmF0dXJlID0gJG9iaktleS0+c2lnbkRhdGEoJG1zZyk7CiAgICAgICAgcmV0dXJuIGJhc2U2NF9lbmNvZGUoJHNpZ25hdHVyZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgSUQgb2YgdGhlIGxhc3QgbWVzc2FnZSBwcm9jZXNzZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldExhc3RNZXNzYWdlSWQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2xhc3RNZXNzYWdlSWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgSUQgb2YgdGhlIGxhc3QgYXNzZXJ0aW9uIHByb2Nlc3NlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGFzdEFzc2VydGlvbklkKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9sYXN0QXNzZXJ0aW9uSWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGludCBUaGUgTm90T25PckFmdGVyIHZhbHVlIG9mIHRoZSB2YWxpZAogICAgICogICAgICAgICBTdWJqZWN0Q29uZmlybWF0aW9uRGF0YSBub2RlIChpZiBhbnkpCiAgICAgKiAgICAgICAgIG9mIHRoZSBsYXN0IGFzc2VydGlvbiBwcm9jZXNzZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldExhc3RBc3NlcnRpb25Ob3RPbk9yQWZ0ZXIoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2xhc3RBc3NlcnRpb25Ob3RPbk9yQWZ0ZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBtb3N0IHJlY2VudGx5LWNvbnN0cnVjdGVkL3Byb2Nlc3NlZAogICAgICogWE1MIFNBTUwgcmVxdWVzdCAoQXV0aE5SZXF1ZXN0LCBMb2dvdXRSZXF1ZXN0KQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIFJlcXVlc3QgWE1MCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMYXN0UmVxdWVzdFhNTCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fbGFzdFJlcXVlc3Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBtb3N0IHJlY2VudGx5LWNvbnN0cnVjdGVkL3Byb2Nlc3NlZAogICAgICogWE1MIFNBTUwgcmVzcG9uc2UgKFNBTUxSZXNwb25zZSwgTG9nb3V0UmVzcG9uc2UpLgogICAgICogSWYgdGhlIFNBTUxSZXNwb25zZSB3YXMgZW5jcnlwdGVkLCBieSBkZWZhdWx0IHRyaWVzCiAgICAgKiB0byByZXR1cm4gdGhlIGRlY3J5cHRlZCBYTUwuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBUaGUgUmVzcG9uc2UgWE1MCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMYXN0UmVzcG9uc2VYTUwoKQogICAgewogICAgICAgICRyZXNwb25zZSA9IG51bGw7CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5fbGFzdFJlc3BvbnNlKSkgewogICAgICAgICAgICBpZiAoaXNfc3RyaW5nKCR0aGlzLT5fbGFzdFJlc3BvbnNlKSkgewogICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gJHRoaXMtPl9sYXN0UmVzcG9uc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSAkdGhpcy0+X2xhc3RSZXNwb25zZS0+c2F2ZVhNTCgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3BvbnNlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/AuthnRequest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHBocC1zYW1sLgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQHBhY2thZ2UgT25lTG9naW4KICogQGF1dGhvciAgU2l4dG8gTWFydGluIDxzaXh0by5tYXJ0aW4uZ2FyY2lhQGdtYWlsLmNvbT4KICogQGxpY2Vuc2UgTUlUIGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICogQGxpbmsgICAgaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwKICovCgpuYW1lc3BhY2UgT25lTG9naW5cU2FtbDI7CgovKioKICogU0FNTCAyIEF1dGhlbnRpY2F0aW9uIFJlcXVlc3QKICovCmNsYXNzIEF1dGhuUmVxdWVzdAp7CiAgICAvKioKICAgICAqIE9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlIHNldHRpbmcgaW5mbwogICAgICoKICAgICAqIEB2YXIgU2V0dGluZ3MKICAgICAqLwogICAgcHJvdGVjdGVkICRfc2V0dGluZ3M7CgogICAgLyoqCiAgICAgKiBTQU1MIEF1dGhOUmVxdWVzdCBzdHJpbmcKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRfYXV0aG5SZXF1ZXN0OwoKICAgIC8qKgogICAgICogU0FNTCBBdXRoTlJlcXVlc3QgSUQuCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkX2lkOwoKICAgIC8qKgogICAgICogQ29uc3RydWN0cyB0aGUgQXV0aG5SZXF1ZXN0IG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gU2V0dGluZ3MgJHNldHRpbmdzIFNBTUwgVG9vbGtpdCBTZXR0aW5ncwogICAgICogQHBhcmFtIGJvb2wgJGZvcmNlQXV0aG4gV2hlbiB0cnVlIHRoZSBBdXRoTlJldXFlc3Qgd2lsbCBzZXQgdGhlIEZvcmNlQXV0aG49J3RydWUnCiAgICAgKiBAcGFyYW0gYm9vbCAkaXNQYXNzaXZlIFdoZW4gdHJ1ZSB0aGUgQXV0aE5SZXVxZXN0IHdpbGwgc2V0IHRoZSBJc3Bhc3NpdmU9J3RydWUnCiAgICAgKiBAcGFyYW0gYm9vbCAkc2V0TmFtZUlkUG9saWN5IFdoZW4gdHJ1ZSB0aGUgQXV0aE5SZXVxZXN0IHdpbGwgc2V0IGEgbmFtZUlkUG9saWN5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lSWRWYWx1ZVJlcSBJbmRpY2F0ZXMgdG8gdGhlIElkUCB0aGUgc3ViamVjdCB0aGF0IHNob3VsZCBiZSBhdXRoZW50aWNhdGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChcT25lTG9naW5cU2FtbDJcU2V0dGluZ3MgJHNldHRpbmdzLCAkZm9yY2VBdXRobiA9IGZhbHNlLCAkaXNQYXNzaXZlID0gZmFsc2UsICRzZXROYW1lSWRQb2xpY3kgPSB0cnVlLCAkbmFtZUlkVmFsdWVSZXEgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT5fc2V0dGluZ3MgPSAkc2V0dGluZ3M7CgogICAgICAgICRzcERhdGEgPSAkdGhpcy0+X3NldHRpbmdzLT5nZXRTUERhdGEoKTsKICAgICAgICAkc2VjdXJpdHkgPSAkdGhpcy0+X3NldHRpbmdzLT5nZXRTZWN1cml0eURhdGEoKTsKCiAgICAgICAgJGlkID0gVXRpbHM6OmdlbmVyYXRlVW5pcXVlSUQoKTsKICAgICAgICAkaXNzdWVJbnN0YW50ID0gVXRpbHM6OnBhcnNlVGltZTJTQU1MKHRpbWUoKSk7CgogICAgICAgICRzdWJqZWN0U3RyID0gIiI7CiAgICAgICAgaWYgKGlzc2V0KCRuYW1lSWRWYWx1ZVJlcSkpIHsKICAgICAgICAgICAgJHN1YmplY3RTdHIgPSA8PDxTVUJKRUNUCgogICAgIDxzYW1sOlN1YmplY3Q+CiAgICAgICAgPHNhbWw6TmFtZUlEIEZvcm1hdD0ieyRzcERhdGFbJ05hbWVJREZvcm1hdCddfSI+eyRuYW1lSWRWYWx1ZVJlcX08L3NhbWw6TmFtZUlEPgogICAgICAgIDxzYW1sOlN1YmplY3RDb25maXJtYXRpb24gTWV0aG9kPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6Y206YmVhcmVyIj48L3NhbWw6U3ViamVjdENvbmZpcm1hdGlvbj4KICAgIDwvc2FtbDpTdWJqZWN0PgpTVUJKRUNUOwogICAgICAgIH0KCiAgICAgICAgJG5hbWVJZFBvbGljeVN0ciA9ICcnOwogICAgICAgIGlmICgkc2V0TmFtZUlkUG9saWN5KSB7CiAgICAgICAgICAgICRuYW1lSURQb2xpY3lGb3JtYXQgPSAkc3BEYXRhWydOYW1lSURGb3JtYXQnXTsKICAgICAgICAgICAgaWYgKGlzc2V0KCRzZWN1cml0eVsnd2FudE5hbWVJZEVuY3J5cHRlZCddKSAmJiAkc2VjdXJpdHlbJ3dhbnROYW1lSWRFbmNyeXB0ZWQnXSkgewogICAgICAgICAgICAgICAgJG5hbWVJRFBvbGljeUZvcm1hdCA9IENvbnN0YW50czo6TkFNRUlEX0VOQ1JZUFRFRDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJG5hbWVJZFBvbGljeVN0ciA9IDw8PE5BTUVJRFBPTElDWQoKICAgIDxzYW1scDpOYW1lSURQb2xpY3kKICAgICAgICBGb3JtYXQ9InskbmFtZUlEUG9saWN5Rm9ybWF0fSIKICAgICAgICBBbGxvd0NyZWF0ZT0idHJ1ZSIgLz4KTkFNRUlEUE9MSUNZOwogICAgICAgIH0KCgogICAgICAgICRwcm92aWRlck5hbWVTdHIgPSAnJzsKICAgICAgICAkb3JnYW5pemF0aW9uRGF0YSA9ICRzZXR0aW5ncy0+Z2V0T3JnYW5pemF0aW9uKCk7CiAgICAgICAgaWYgKCFlbXB0eSgkb3JnYW5pemF0aW9uRGF0YSkpIHsKICAgICAgICAgICAgJGxhbmdzID0gYXJyYXlfa2V5cygkb3JnYW5pemF0aW9uRGF0YSk7CiAgICAgICAgICAgIGlmIChpbl9hcnJheSgnZW4tVVMnLCAkbGFuZ3MpKSB7CiAgICAgICAgICAgICAgICAkbGFuZyA9ICdlbi1VUyc7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkbGFuZyA9ICRsYW5nc1swXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoaXNzZXQoJG9yZ2FuaXphdGlvbkRhdGFbJGxhbmddWydkaXNwbGF5bmFtZSddKSAmJiAhZW1wdHkoJG9yZ2FuaXphdGlvbkRhdGFbJGxhbmddWydkaXNwbGF5bmFtZSddKSkgewogICAgICAgICAgICAgICAgJHByb3ZpZGVyTmFtZVN0ciA9IDw8PFBST1ZJREVSTkFNRQogICAgUHJvdmlkZXJOYW1lPSJ7JG9yZ2FuaXphdGlvbkRhdGFbJGxhbmddWydkaXNwbGF5bmFtZSddfSIKUFJPVklERVJOQU1FOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkZm9yY2VBdXRoblN0ciA9ICcnOwogICAgICAgIGlmICgkZm9yY2VBdXRobikgewogICAgICAgICAgICAkZm9yY2VBdXRoblN0ciA9IDw8PEZPUkNFQVVUSE4KCiAgICBGb3JjZUF1dGhuPSJ0cnVlIgpGT1JDRUFVVEhOOwogICAgICAgIH0KCiAgICAgICAgJGlzUGFzc2l2ZVN0ciA9ICcnOwogICAgICAgIGlmICgkaXNQYXNzaXZlKSB7CiAgICAgICAgICAgICRpc1Bhc3NpdmVTdHIgPSA8PDxJU1BBU1NJVkUKCiAgICBJc1Bhc3NpdmU9InRydWUiCklTUEFTU0lWRTsKICAgICAgICB9CgogICAgICAgICRyZXF1ZXN0ZWRBdXRoblN0ciA9ICcnOwogICAgICAgIGlmIChpc3NldCgkc2VjdXJpdHlbJ3JlcXVlc3RlZEF1dGhuQ29udGV4dCddKSAmJiAkc2VjdXJpdHlbJ3JlcXVlc3RlZEF1dGhuQ29udGV4dCddICE9PSBmYWxzZSkgewogICAgICAgICAgICAkYXV0aG5Db21wYXJpc29uID0gJ2V4YWN0JzsKICAgICAgICAgICAgaWYgKGlzc2V0KCRzZWN1cml0eVsncmVxdWVzdGVkQXV0aG5Db250ZXh0Q29tcGFyaXNvbiddKSkgewogICAgICAgICAgICAgICAgJGF1dGhuQ29tcGFyaXNvbiA9ICRzZWN1cml0eVsncmVxdWVzdGVkQXV0aG5Db250ZXh0Q29tcGFyaXNvbiddOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkYXV0aG5Db21wYXJpc29uQXR0ciA9ICcnOwogICAgICAgICAgICBpZiAoIWVtcHR5KCRhdXRobkNvbXBhcmlzb24pKSB7CiAgICAgICAgICAgICAgICAkYXV0aG5Db21wYXJpc29uQXR0ciA9IHNwcmludGYoJ0NvbXBhcmlzb249IiVzIicsICRhdXRobkNvbXBhcmlzb24pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJHNlY3VyaXR5WydyZXF1ZXN0ZWRBdXRobkNvbnRleHQnXSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgJHJlcXVlc3RlZEF1dGhuU3RyID0gPDw8UkVRVUVTVEVEQVVUSE4KCiAgICA8c2FtbHA6UmVxdWVzdGVkQXV0aG5Db250ZXh0ICRhdXRobkNvbXBhcmlzb25BdHRyPgogICAgICAgIDxzYW1sOkF1dGhuQ29udGV4dENsYXNzUmVmPnVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphYzpjbGFzc2VzOlBhc3N3b3JkUHJvdGVjdGVkVHJhbnNwb3J0PC9zYW1sOkF1dGhuQ29udGV4dENsYXNzUmVmPgogICAgPC9zYW1scDpSZXF1ZXN0ZWRBdXRobkNvbnRleHQ+ClJFUVVFU1RFREFVVEhOOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHJlcXVlc3RlZEF1dGhuU3RyIC49ICIgICAgPHNhbWxwOlJlcXVlc3RlZEF1dGhuQ29udGV4dCAkYXV0aG5Db21wYXJpc29uQXR0cj5cbiI7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkc2VjdXJpdHlbJ3JlcXVlc3RlZEF1dGhuQ29udGV4dCddIGFzICRjb250ZXh0VmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAkcmVxdWVzdGVkQXV0aG5TdHIgLj0gIiAgICAgICAgPHNhbWw6QXV0aG5Db250ZXh0Q2xhc3NSZWY+Ii4kY29udGV4dFZhbHVlLiI8L3NhbWw6QXV0aG5Db250ZXh0Q2xhc3NSZWY+XG4iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHJlcXVlc3RlZEF1dGhuU3RyIC49ICcgICAgPC9zYW1scDpSZXF1ZXN0ZWRBdXRobkNvbnRleHQ+JzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHNwRW50aXR5SWQgPSBodG1sc3BlY2lhbGNoYXJzKCRzcERhdGFbJ2VudGl0eUlkJ10sIEVOVF9RVU9URVMpOwogICAgICAgICRhY3NVcmwgPSBodG1sc3BlY2lhbGNoYXJzKCRzcERhdGFbJ2Fzc2VydGlvbkNvbnN1bWVyU2VydmljZSddWyd1cmwnXSwgRU5UX1FVT1RFUyk7CiAgICAgICAgJGRlc3RpbmF0aW9uID0gJHRoaXMtPl9zZXR0aW5ncy0+Z2V0SWRQU1NPVXJsKCk7CiAgICAgICAgJHJlcXVlc3QgPSA8PDxBVVRITlJFUVVFU1QKPHNhbWxwOkF1dGhuUmVxdWVzdAogICAgeG1sbnM6c2FtbHA9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpwcm90b2NvbCIKICAgIHhtbG5zOnNhbWw9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphc3NlcnRpb24iCiAgICBJRD0iJGlkIgogICAgVmVyc2lvbj0iMi4wIgp7JHByb3ZpZGVyTmFtZVN0cn17JGZvcmNlQXV0aG5TdHJ9eyRpc1Bhc3NpdmVTdHJ9CiAgICBJc3N1ZUluc3RhbnQ9InskaXNzdWVJbnN0YW50fSIKICAgIERlc3RpbmF0aW9uPSJ7JGRlc3RpbmF0aW9ufSIKICAgIFByb3RvY29sQmluZGluZz0ieyRzcERhdGFbJ2Fzc2VydGlvbkNvbnN1bWVyU2VydmljZSddWydiaW5kaW5nJ119IgogICAgQXNzZXJ0aW9uQ29uc3VtZXJTZXJ2aWNlVVJMPSJ7JGFjc1VybH0iPgogICAgPHNhbWw6SXNzdWVyPnskc3BFbnRpdHlJZH08L3NhbWw6SXNzdWVyPnskc3ViamVjdFN0cn17JG5hbWVJZFBvbGljeVN0cn17JHJlcXVlc3RlZEF1dGhuU3RyfQo8L3NhbWxwOkF1dGhuUmVxdWVzdD4KQVVUSE5SRVFVRVNUOwoKICAgICAgICAkdGhpcy0+X2lkID0gJGlkOwogICAgICAgICR0aGlzLT5fYXV0aG5SZXF1ZXN0ID0gJHJlcXVlc3Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGRlZmxhdGVkLCBiYXNlNjQgZW5jb2RlZCwgdW5zaWduZWQgQXV0aG5SZXF1ZXN0LgogICAgICoKICAgICAqIEBwYXJhbSBib29sfG51bGwgJGRlZmxhdGUgV2hldGhlciBvciBub3Qgd2Ugc2hvdWxkICdnemRlZmxhdGUnIHRoZSByZXF1ZXN0IGJvZHkgYmVmb3JlIHdlIHJldHVybiBpdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVxdWVzdCgkZGVmbGF0ZSA9IG51bGwpCiAgICB7CiAgICAgICAgJHN1YmplY3QgPSAkdGhpcy0+X2F1dGhuUmVxdWVzdDsKCiAgICAgICAgaWYgKGlzX251bGwoJGRlZmxhdGUpKSB7CiAgICAgICAgICAgICRkZWZsYXRlID0gJHRoaXMtPl9zZXR0aW5ncy0+c2hvdWxkQ29tcHJlc3NSZXF1ZXN0cygpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRkZWZsYXRlKSB7CiAgICAgICAgICAgICRzdWJqZWN0ID0gZ3pkZWZsYXRlKCR0aGlzLT5fYXV0aG5SZXF1ZXN0KTsKICAgICAgICB9CgogICAgICAgICRiYXNlNjRSZXF1ZXN0ID0gYmFzZTY0X2VuY29kZSgkc3ViamVjdCk7CiAgICAgICAgcmV0dXJuICRiYXNlNjRSZXF1ZXN0OwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgQXV0aE5SZXF1ZXN0IElELgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5faWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBYTUwgdGhhdCB3aWxsIGJlIHNlbnQgYXMgcGFydCBvZiB0aGUgcmVxdWVzdAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRYTUwoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2F1dGhuUmVxdWVzdDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/Constants.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHBocC1zYW1sLgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQHBhY2thZ2UgT25lTG9naW4KICogQGF1dGhvciAgU2l4dG8gTWFydGluIDxzaXh0by5tYXJ0aW4uZ2FyY2lhQGdtYWlsLmNvbT4KICogQGxpY2Vuc2UgTUlUIGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICogQGxpbmsgICAgaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwKICovCgpuYW1lc3BhY2UgT25lTG9naW5cU2FtbDI7CgovKioKICogQ29uc3RhbnRzIG9mIFNBTUwgUEhQIFRvb2xraXQKICoKICogRGVmaW5lcyBhbGwgcmVxdWlyZWQgY29uc3RhbnRzCiAqLwpjbGFzcyBDb25zdGFudHMKewogICAgLy8gVmFsdWUgYWRkZWQgdG8gdGhlIGN1cnJlbnQgdGltZSBpbiB0aW1lIGNvbmRpdGlvbiB2YWxpZGF0aW9ucwogICAgY29uc3QgQUxMT1dFRF9DTE9DS19EUklGVCA9IDE4MDsgIC8vIDMgbWluIGluIHNlY29uZHMKCiAgICAvLyBOYW1lSUQgRm9ybWF0cwogICAgY29uc3QgTkFNRUlEX0VNQUlMX0FERFJFU1MgPSAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6MS4xOm5hbWVpZC1mb3JtYXQ6ZW1haWxBZGRyZXNzJzsKICAgIGNvbnN0IE5BTUVJRF9YNTA5X1NVQkpFQ1RfTkFNRSA9ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoxLjE6bmFtZWlkLWZvcm1hdDpYNTA5U3ViamVjdE5hbWUnOwogICAgY29uc3QgTkFNRUlEX1dJTkRPV1NfRE9NQUlOX1FVQUxJRklFRF9OQU1FID0gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjEuMTpuYW1laWQtZm9ybWF0OldpbmRvd3NEb21haW5RdWFsaWZpZWROYW1lJzsKICAgIGNvbnN0IE5BTUVJRF9VTlNQRUNJRklFRCA9ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoxLjE6bmFtZWlkLWZvcm1hdDp1bnNwZWNpZmllZCc7CiAgICBjb25zdCBOQU1FSURfS0VSQkVST1MgICA9ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6bmFtZWlkLWZvcm1hdDprZXJiZXJvcyc7CiAgICBjb25zdCBOQU1FSURfRU5USVRZICAgICA9ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6bmFtZWlkLWZvcm1hdDplbnRpdHknOwogICAgY29uc3QgTkFNRUlEX1RSQU5TSUVOVCAgPSAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOm5hbWVpZC1mb3JtYXQ6dHJhbnNpZW50JzsKICAgIGNvbnN0IE5BTUVJRF9QRVJTSVNURU5UID0gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpuYW1laWQtZm9ybWF0OnBlcnNpc3RlbnQnOwogICAgY29uc3QgTkFNRUlEX0VOQ1JZUFRFRCA9ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6bmFtZWlkLWZvcm1hdDplbmNyeXB0ZWQnOwoKICAgIC8vIEF0dHJpYnV0ZSBOYW1lIEZvcm1hdHMKICAgIGNvbnN0IEFUVFJOQU1FX0ZPUk1BVF9VTlNQRUNJRklFRCA9ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXR0cm5hbWUtZm9ybWF0OnVuc3BlY2lmaWVkJzsKICAgIGNvbnN0IEFUVFJOQU1FX0ZPUk1BVF9VUkkgPSAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmF0dHJuYW1lLWZvcm1hdDp1cmknOwogICAgY29uc3QgQVRUUk5BTUVfRk9STUFUX0JBU0lDID0gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphdHRybmFtZS1mb3JtYXQ6YmFzaWMnOwoKICAgIC8vIE5hbWVzcGFjZXMKICAgIGNvbnN0IE5TX1NBTUwgPSAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbic7CiAgICBjb25zdCBOU19TQU1MUCA9ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wnOwogICAgY29uc3QgTlNfU09BUCA9ICdodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyc7CiAgICBjb25zdCBOU19NRCA9ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6bWV0YWRhdGEnOwogICAgY29uc3QgTlNfWFMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEnOwogICAgY29uc3QgTlNfWFNJID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJzsKICAgIGNvbnN0IE5TX1hFTkMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjJzsKICAgIGNvbnN0IE5TX0RTID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMnOwoKICAgIC8vIEJpbmRpbmdzCiAgICBjb25zdCBCSU5ESU5HX0hUVFBfUE9TVCA9ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YmluZGluZ3M6SFRUUC1QT1NUJzsKICAgIGNvbnN0IEJJTkRJTkdfSFRUUF9SRURJUkVDVCA9ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YmluZGluZ3M6SFRUUC1SZWRpcmVjdCc7CiAgICBjb25zdCBCSU5ESU5HX0hUVFBfQVJUSUZBQ1QgPSAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmJpbmRpbmdzOkhUVFAtQXJ0aWZhY3QnOwogICAgY29uc3QgQklORElOR19TT0FQID0gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpiaW5kaW5nczpTT0FQJzsKICAgIGNvbnN0IEJJTkRJTkdfREVGTEFURSA9ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YmluZGluZ3M6VVJMLUVuY29kaW5nOkRFRkxBVEUnOwoKICAgIC8vIEF1dGggQ29udGV4dCBDbGFzcwogICAgY29uc3QgQUNfVU5TUEVDSUZJRUQgPSAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFjOmNsYXNzZXM6dW5zcGVjaWZpZWQnOwogICAgY29uc3QgQUNfUEFTU1dPUkQgPSAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFjOmNsYXNzZXM6UGFzc3dvcmQnOwogICAgY29uc3QgQUNfUEFTU1dPUkRfUFJPVEVDVEVEID0gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphYzpjbGFzc2VzOlBhc3N3b3JkUHJvdGVjdGVkVHJhbnNwb3J0JzsKICAgIGNvbnN0IEFDX1g1MDkgPSAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFjOmNsYXNzZXM6WDUwOSc7CiAgICBjb25zdCBBQ19TTUFSVENBUkQgPSAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFjOmNsYXNzZXM6U21hcnRjYXJkJzsKICAgIGNvbnN0IEFDX1NNQVJUQ0FSRF9QS0kgPSAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFjOmNsYXNzZXM6U21hcnRjYXJkUEtJJzsKICAgIGNvbnN0IEFDX0tFUkJFUk9TID0gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphYzpjbGFzc2VzOktlcmJlcm9zJzsKICAgIGNvbnN0IEFDX1dJTkRPV1MgPSAndXJuOmZlZGVyYXRpb246YXV0aGVudGljYXRpb246d2luZG93cyc7CiAgICBjb25zdCBBQ19UTFMgPSAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFjOmNsYXNzZXM6VExTQ2xpZW50JzsKICAgIGNvbnN0IEFDX1JTQVRPS0VOID0gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphYzpjbGFzc2VzOlRpbWVTeW5jVG9rZW4nOwoKICAgIC8vIFN1YmplY3QgQ29uZmlybWF0aW9uCiAgICBjb25zdCBDTV9CRUFSRVIgPSAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmNtOmJlYXJlcic7CiAgICBjb25zdCBDTV9IT0xERVJfS0VZID0gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpjbTpob2xkZXItb2Yta2V5JzsKICAgIGNvbnN0IENNX1NFTkRFUl9WT1VDSEVTID0gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpjbTpzZW5kZXItdm91Y2hlcyc7CgogICAgLy8gU3RhdHVzIENvZGVzCiAgICBjb25zdCBTVEFUVVNfU1VDQ0VTUyA9ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6c3RhdHVzOlN1Y2Nlc3MnOwogICAgY29uc3QgU1RBVFVTX1JFUVVFU1RFUiA9ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6c3RhdHVzOlJlcXVlc3Rlcic7CiAgICBjb25zdCBTVEFUVVNfUkVTUE9OREVSID0gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpzdGF0dXM6UmVzcG9uZGVyJzsKICAgIGNvbnN0IFNUQVRVU19WRVJTSU9OX01JU01BVENIID0gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpzdGF0dXM6VmVyc2lvbk1pc21hdGNoJzsKICAgIGNvbnN0IFNUQVRVU19OT19QQVNTSVZFID0gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpzdGF0dXM6Tm9QYXNzaXZlJzsKICAgIGNvbnN0IFNUQVRVU19QQVJUSUFMX0xPR09VVCA9ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6c3RhdHVzOlBhcnRpYWxMb2dvdXQnOwogICAgY29uc3QgU1RBVFVTX1BST1hZX0NPVU5UX0VYQ0VFREVEID0gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpzdGF0dXM6UHJveHlDb3VudEV4Y2VlZGVkJzsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/Error.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHBocC1zYW1sLgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQHBhY2thZ2UgT25lTG9naW4KICogQGF1dGhvciAgU2l4dG8gTWFydGluIDxzaXh0by5tYXJ0aW4uZ2FyY2lhQGdtYWlsLmNvbT4KICogQGxpY2Vuc2UgTUlUIGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICogQGxpbmsgICAgaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwKICovCgpuYW1lc3BhY2UgT25lTG9naW5cU2FtbDI7Cgp1c2UgRXhjZXB0aW9uOwoKLyoqCiAqIEVycm9yIGNsYXNzIG9mIFNBTUwgUEhQIFRvb2xraXQKICoKICogRGVmaW5lcyB0aGUgRXJyb3IgY2xhc3MKICovCmNsYXNzIEVycm9yIGV4dGVuZHMgRXhjZXB0aW9uCnsKICAgIC8vIEVycm9ycwogICAgY29uc3QgU0VUVElOR1NfRklMRV9OT1RfRk9VTkQgPSAwOwogICAgY29uc3QgU0VUVElOR1NfSU5WQUxJRF9TWU5UQVggPSAxOwogICAgY29uc3QgU0VUVElOR1NfSU5WQUxJRCA9IDI7CiAgICBjb25zdCBNRVRBREFUQV9TUF9JTlZBTElEID0gMzsKICAgIGNvbnN0IFNQX0NFUlRTX05PVF9GT1VORCA9IDQ7CiAgICAvLyBTUF9DRVJUU19OT1RfRk9VTkQgaXMgZGVwcmVjYXRlZCwgdXNlIENFUlRfTk9UX0ZPVU5EIGluc3RlYWQKICAgIGNvbnN0IENFUlRfTk9UX0ZPVU5EID0gNDsKICAgIGNvbnN0IFJFRElSRUNUX0lOVkFMSURfVVJMID0gNTsKICAgIGNvbnN0IFBVQkxJQ19DRVJUX0ZJTEVfTk9UX0ZPVU5EID0gNjsKICAgIGNvbnN0IFBSSVZBVEVfS0VZX0ZJTEVfTk9UX0ZPVU5EID0gNzsKICAgIGNvbnN0IFNBTUxfUkVTUE9OU0VfTk9UX0ZPVU5EID0gODsKICAgIGNvbnN0IFNBTUxfTE9HT1VUTUVTU0FHRV9OT1RfRk9VTkQgPSA5OwogICAgY29uc3QgU0FNTF9MT0dPVVRSRVFVRVNUX0lOVkFMSUQgPSAxMDsKICAgIGNvbnN0IFNBTUxfTE9HT1VUUkVTUE9OU0VfSU5WQUxJRCAgPSAxMTsKICAgIGNvbnN0IFNBTUxfU0lOR0xFX0xPR09VVF9OT1RfU1VQUE9SVEVEID0gMTI7CiAgICBjb25zdCBQUklWQVRFX0tFWV9OT1RfRk9VTkQgPSAxMzsKICAgIGNvbnN0IFVOU1VQUE9SVEVEX1NFVFRJTkdTX09CSkVDVCA9IDE0OwogICAgY29uc3QgSU5WQUxJRF9QQVJBTUVURVIgPSAxNTsKCiAgICAvKioKICAgICAqIENvbnN0cnVjdG9yCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgJG1zZyAgRGVzY3JpYmVzIHRoZSBlcnJvci4KICAgICAqIEBwYXJhbSBpbnQgICAgICAgICRjb2RlIFRoZSBjb2RlIGVycm9yIChkZWZpbmVkIGluIHRoZSBlcnJvciBjbGFzcykuCiAgICAgKiBAcGFyYW0gYXJyYXl8bnVsbCAkYXJncyBBcmd1bWVudHMgdXNlZCBpbiB0aGUgbWVzc2FnZSB0aGF0IGRlc2NyaWJlcyB0aGUgZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbXNnLCAkY29kZSA9IDAsICRhcmdzID0gYXJyYXkoKSkKICAgIHsKICAgICAgICBhc3NlcnQoaXNfc3RyaW5nKCRtc2cpKTsKICAgICAgICBhc3NlcnQoaXNfaW50KCRjb2RlKSk7CgogICAgICAgIGlmICghaXNzZXQoJGFyZ3MpKSB7CiAgICAgICAgICAgICRhcmdzID0gYXJyYXkoKTsKICAgICAgICB9CiAgICAgICAgJHBhcmFtcyA9IGFycmF5X21lcmdlKGFycmF5KCRtc2cpLCAkYXJncyk7CiAgICAgICAgJG1lc3NhZ2UgPSBjYWxsX3VzZXJfZnVuY19hcnJheSgnc3ByaW50ZicsICRwYXJhbXMpOwoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRtZXNzYWdlLCAkY29kZSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/IdPMetadataParser.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHBocC1zYW1sLgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQHBhY2thZ2UgT25lTG9naW4KICogQGF1dGhvciAgU2l4dG8gTWFydGluIDxzaXh0by5tYXJ0aW4uZ2FyY2lhQGdtYWlsLmNvbT4KICogQGxpY2Vuc2UgTUlUIGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICogQGxpbmsgICAgaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwKICovCgpuYW1lc3BhY2UgT25lTG9naW5cU2FtbDI7Cgp1c2UgRE9NRG9jdW1lbnQ7CnVzZSBFeGNlcHRpb247CgovKioKICogSWRQIE1ldGFkYXRhIFBhcnNlciBvZiBTQU1MIFBIUCBUb29sa2l0CiAqLwpjbGFzcyBJZFBNZXRhZGF0YVBhcnNlcgp7CiAgICAvKioKICAgICAqIEdldCBJZFAgTWV0YWRhdGEgSW5mbyBmcm9tIFVSTAogICAgICoKICAgICAqIFRoaXMgY2xhc3MgZG9lcyBub3QgdmFsaWRhdGUgaW4gYW55IHdheSB0aGUgVVJMIHRoYXQgaXMgaW50cm9kdWNlZCwKICAgICAqIG1ha2Ugc3VyZSB0byB2YWxpZGF0ZSBpdCBwcm9wZXJseSBiZWZvcmUgdXNlIGl0IGluIHRoZSBwYXJzZVJlbW90ZVhNTAogICAgICogbWV0aG9kIGluIG9yZGVyIHRvIGF2b2lkIHNlY3VyaXR5IGlzc3VlcyBsaWtlIFNTUkYgYXR0YWNrcy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1cmwgICAgICAgICAgICAgICAgIFVSTCB3aGVyZSB0aGUgSWRQIG1ldGFkYXRhIGlzIHB1Ymxpc2hlZAogICAgICogQHBhcmFtIHN0cmluZyAkZW50aXR5SWQgICAgICAgICAgICBFbnRpdHkgSWQgb2YgdGhlIGRlc2lyZWQgSWRQLCBpZiBubwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHkgSWQgaXMgcHJvdmlkZWQgYW5kIHRoZSBYTUwKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEgY29udGFpbnMgbW9yZSB0aGFuIG9uZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRFBTU09EZXNjcmlwdG9yLCB0aGUgZmlyc3QgaXMgcmV0dXJuZWQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRlc2lyZWROYW1lSWRGb3JtYXQgSWYgYXZhaWxhYmxlIG9uIElkUCBtZXRhZGF0YSwgdXNlIHRoYXQgbmFtZUlkRm9ybWF0CiAgICAgKiBAcGFyYW0gc3RyaW5nICRkZXNpcmVkU1NPQmluZGluZyAgIFBhcnNlIHNwZWNpZmljIGJpbmRpbmcgU1NPIGVuZHBvaW50CiAgICAgKiBAcGFyYW0gc3RyaW5nICRkZXNpcmVkU0xPQmluZGluZyAgIFBhcnNlIHNwZWNpZmljIGJpbmRpbmcgU0xPIGVuZHBvaW50CiAgICAgKiBAcGFyYW0gYm9vbCAgICR2YWxpZGF0ZVBlZXIgICAgICAgIEVuYWJsZSBvciBkaXNhYmxlIHZhbGlkYXRlIHBlZXIgU1NMIGNlcnRpZmljYXRlCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBtZXRhZGF0YSBpbmZvIGluIHBocC1zYW1sIHNldHRpbmdzIGZvcm1hdAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBhcnNlUmVtb3RlWE1MKCR1cmwsICRlbnRpdHlJZCA9IG51bGwsICRkZXNpcmVkTmFtZUlkRm9ybWF0ID0gbnVsbCwgJGRlc2lyZWRTU09CaW5kaW5nID0gQ29uc3RhbnRzOjpCSU5ESU5HX0hUVFBfUkVESVJFQ1QsICRkZXNpcmVkU0xPQmluZGluZyA9IENvbnN0YW50czo6QklORElOR19IVFRQX1JFRElSRUNULCAkdmFsaWRhdGVQZWVyID0gZmFsc2UpCiAgICB7CiAgICAgICAgJG1ldGFkYXRhSW5mbyA9IGFycmF5KCk7CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRjaCA9IGN1cmxfaW5pdCgkdXJsKTsKICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BST1RPQ09MUywgQ1VSTFBST1RPX0hUVFBTIHwgQ1VSTFBST1RPX0hUVFApOwogICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVESVJfUFJPVE9DT0xTLCBDVVJMUFJPVE9fSFRUUFMgIHwgQ1VSTFBST1RPX0hUVFApOwogICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfTUFYUkVESVJTLCA1KTsKICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0NVU1RPTVJFUVVFU1QsICJHRVQiKTsKICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCAxKTsKICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCAxKTsKICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCAkdmFsaWRhdGVQZWVyKTsKICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0ZBSUxPTkVSUk9SLCAxKTsKCiAgICAgICAgICAgICR4bWwgPSBjdXJsX2V4ZWMoJGNoKTsKICAgICAgICAgICAgaWYgKCR4bWwgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAkbWV0YWRhdGFJbmZvID0gc2VsZjo6cGFyc2VYTUwoJHhtbCwgJGVudGl0eUlkLCAkZGVzaXJlZE5hbWVJZEZvcm1hdCwgJGRlc2lyZWRTU09CaW5kaW5nLCAkZGVzaXJlZFNMT0JpbmRpbmcpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihjdXJsX2Vycm9yKCRjaCksIGN1cmxfZXJybm8oJGNoKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignRXJyb3Igb24gcGFyc2VSZW1vdGVYTUwuICcuJGUtPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkbWV0YWRhdGFJbmZvOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IElkUCBNZXRhZGF0YSBJbmZvIGZyb20gRmlsZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVwYXRoICAgICAgICAgICAgRmlsZSBwYXRoCiAgICAgKiBAcGFyYW0gc3RyaW5nICRlbnRpdHlJZCAgICAgICAgICAgIEVudGl0eSBJZCBvZiB0aGUgZGVzaXJlZCBJZFAsIGlmIG5vCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eSBJZCBpcyBwcm92aWRlZCBhbmQgdGhlIFhNTAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YSBjb250YWlucyBtb3JlIHRoYW4gb25lCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEUFNTT0Rlc2NyaXB0b3IsIHRoZSBmaXJzdCBpcyByZXR1cm5lZAogICAgICogQHBhcmFtIHN0cmluZyAkZGVzaXJlZE5hbWVJZEZvcm1hdCBJZiBhdmFpbGFibGUgb24gSWRQIG1ldGFkYXRhLCB1c2UgdGhhdCBuYW1lSWRGb3JtYXQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRlc2lyZWRTU09CaW5kaW5nICAgUGFyc2Ugc3BlY2lmaWMgYmluZGluZyBTU08gZW5kcG9pbnQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRlc2lyZWRTTE9CaW5kaW5nICAgUGFyc2Ugc3BlY2lmaWMgYmluZGluZyBTTE8gZW5kcG9pbnQKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5IG1ldGFkYXRhIGluZm8gaW4gcGhwLXNhbWwgc2V0dGluZ3MgZm9ybWF0CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcGFyc2VGaWxlWE1MKCRmaWxlcGF0aCwgJGVudGl0eUlkID0gbnVsbCwgJGRlc2lyZWROYW1lSWRGb3JtYXQgPSBudWxsLCAkZGVzaXJlZFNTT0JpbmRpbmcgPSBDb25zdGFudHM6OkJJTkRJTkdfSFRUUF9SRURJUkVDVCwgJGRlc2lyZWRTTE9CaW5kaW5nID0gQ29uc3RhbnRzOjpCSU5ESU5HX0hUVFBfUkVESVJFQ1QpCiAgICB7CiAgICAgICAgJG1ldGFkYXRhSW5mbyA9IGFycmF5KCk7CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZmlsZXBhdGgpKSB7CiAgICAgICAgICAgICAgICAkZGF0YSA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlcGF0aCk7CiAgICAgICAgICAgICAgICAkbWV0YWRhdGFJbmZvID0gc2VsZjo6cGFyc2VYTUwoJGRhdGEsICRlbnRpdHlJZCwgJGRlc2lyZWROYW1lSWRGb3JtYXQsICRkZXNpcmVkU1NPQmluZGluZywgJGRlc2lyZWRTTE9CaW5kaW5nKTsKICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvciBvbiBwYXJzZUZpbGVYTUwuICcuJGUtPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkbWV0YWRhdGFJbmZvOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IElkUCBNZXRhZGF0YSBJbmZvIGZyb20gVVJMCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkeG1sICAgICAgICAgICAgICAgICBYTUwgdGhhdCBjb250YWlucyBJZFAgbWV0YWRhdGEKICAgICAqIEBwYXJhbSBzdHJpbmcgJGVudGl0eUlkICAgICAgICAgICAgRW50aXR5IElkIG9mIHRoZSBkZXNpcmVkIElkUCwgaWYgbm8KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5IElkIGlzIHByb3ZpZGVkIGFuZCB0aGUgWE1MCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURQU1NPRGVzY3JpcHRvciwgdGhlIGZpcnN0IGlzIHJldHVybmVkCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkZXNpcmVkTmFtZUlkRm9ybWF0IElmIGF2YWlsYWJsZSBvbiBJZFAgbWV0YWRhdGEsIHVzZSB0aGF0IG5hbWVJZEZvcm1hdAogICAgICogQHBhcmFtIHN0cmluZyAkZGVzaXJlZFNTT0JpbmRpbmcgICBQYXJzZSBzcGVjaWZpYyBiaW5kaW5nIFNTTyBlbmRwb2ludAogICAgICogQHBhcmFtIHN0cmluZyAkZGVzaXJlZFNMT0JpbmRpbmcgICBQYXJzZSBzcGVjaWZpYyBiaW5kaW5nIFNMTyBlbmRwb2ludAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgbWV0YWRhdGEgaW5mbyBpbiBwaHAtc2FtbCBzZXR0aW5ncyBmb3JtYXQKICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBhcnNlWE1MKCR4bWwsICRlbnRpdHlJZCA9IG51bGwsICRkZXNpcmVkTmFtZUlkRm9ybWF0ID0gbnVsbCwgJGRlc2lyZWRTU09CaW5kaW5nID0gQ29uc3RhbnRzOjpCSU5ESU5HX0hUVFBfUkVESVJFQ1QsICRkZXNpcmVkU0xPQmluZGluZyA9IENvbnN0YW50czo6QklORElOR19IVFRQX1JFRElSRUNUKQogICAgewogICAgICAgICRtZXRhZGF0YUluZm8gPSBhcnJheSgpOwoKICAgICAgICAkZG9tID0gbmV3IERPTURvY3VtZW50KCk7CiAgICAgICAgJGRvbS0+cHJlc2VydmVXaGl0ZVNwYWNlID0gZmFsc2U7CiAgICAgICAgJGRvbS0+Zm9ybWF0T3V0cHV0ID0gdHJ1ZTsKICAgICAgICB0cnkgewogICAgICAgICAgICAkZG9tID0gVXRpbHM6OmxvYWRYTUwoJGRvbSwgJHhtbCk7CiAgICAgICAgICAgIGlmICghJGRvbSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignRXJyb3IgcGFyc2luZyBtZXRhZGF0YScpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkY3VzdG9tSWRQU3RyID0gJyc7CiAgICAgICAgICAgIGlmICghZW1wdHkoJGVudGl0eUlkKSkgewogICAgICAgICAgICAgICAgJGN1c3RvbUlkUFN0ciA9ICdbQGVudGl0eUlEPSInIC4gJGVudGl0eUlkIC4gJyJdJzsKICAgICAgICAgICAgfQogICAgICAgICAgICAkaWRwRGVzY3J5cHRvclhQYXRoID0gJy8vbWQ6RW50aXR5RGVzY3JpcHRvcicgLiAkY3VzdG9tSWRQU3RyIC4gJy9tZDpJRFBTU09EZXNjcmlwdG9yJzsKCiAgICAgICAgICAgICRpZHBEZXNjcmlwdG9yTm9kZXMgPSBVdGlsczo6cXVlcnkoJGRvbSwgJGlkcERlc2NyeXB0b3JYUGF0aCk7CgogICAgICAgICAgICBpZiAoaXNzZXQoJGlkcERlc2NyaXB0b3JOb2RlcykgJiYgJGlkcERlc2NyaXB0b3JOb2Rlcy0+bGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgJG1ldGFkYXRhSW5mb1snaWRwJ10gPSBhcnJheSgpOwoKICAgICAgICAgICAgICAgICRpZHBEZXNjcmlwdG9yID0gJGlkcERlc2NyaXB0b3JOb2Rlcy0+aXRlbSgwKTsKCiAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJGVudGl0eUlkKSAmJiAkaWRwRGVzY3JpcHRvci0+cGFyZW50Tm9kZS0+aGFzQXR0cmlidXRlKCdlbnRpdHlJRCcpKSB7CiAgICAgICAgICAgICAgICAgICAgJGVudGl0eUlkID0gJGlkcERlc2NyaXB0b3ItPnBhcmVudE5vZGUtPmdldEF0dHJpYnV0ZSgnZW50aXR5SUQnKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRlbnRpdHlJZCkpIHsKICAgICAgICAgICAgICAgICAgICAkbWV0YWRhdGFJbmZvWydpZHAnXVsnZW50aXR5SWQnXSA9ICRlbnRpdHlJZDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkc3NvTm9kZXMgPSBVdGlsczo6cXVlcnkoJGRvbSwgJy4vbWQ6U2luZ2xlU2lnbk9uU2VydmljZVtAQmluZGluZz0iJy4kZGVzaXJlZFNTT0JpbmRpbmcuJyJdJywgJGlkcERlc2NyaXB0b3IpOwogICAgICAgICAgICAgICAgaWYgKCRzc29Ob2Rlcy0+bGVuZ3RoIDwgMSkgewogICAgICAgICAgICAgICAgICAgICRzc29Ob2RlcyA9IFV0aWxzOjpxdWVyeSgkZG9tLCAnLi9tZDpTaW5nbGVTaWduT25TZXJ2aWNlJywgJGlkcERlc2NyaXB0b3IpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCRzc29Ob2Rlcy0+bGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgICAgICRtZXRhZGF0YUluZm9bJ2lkcCddWydzaW5nbGVTaWduT25TZXJ2aWNlJ10gPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCcgPT4gJHNzb05vZGVzLT5pdGVtKDApLT5nZXRBdHRyaWJ1dGUoJ0xvY2F0aW9uJyksCiAgICAgICAgICAgICAgICAgICAgICAgICdiaW5kaW5nJyA9PiAkc3NvTm9kZXMtPml0ZW0oMCktPmdldEF0dHJpYnV0ZSgnQmluZGluZycpCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkc2xvTm9kZXMgPSBVdGlsczo6cXVlcnkoJGRvbSwgJy4vbWQ6U2luZ2xlTG9nb3V0U2VydmljZVtAQmluZGluZz0iJy4kZGVzaXJlZFNMT0JpbmRpbmcuJyJdJywgJGlkcERlc2NyaXB0b3IpOwogICAgICAgICAgICAgICAgaWYgKCRzbG9Ob2Rlcy0+bGVuZ3RoIDwgMSkgewogICAgICAgICAgICAgICAgICAgICRzbG9Ob2RlcyA9IFV0aWxzOjpxdWVyeSgkZG9tLCAnLi9tZDpTaW5nbGVMb2dvdXRTZXJ2aWNlJywgJGlkcERlc2NyaXB0b3IpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCRzbG9Ob2Rlcy0+bGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgICAgICRtZXRhZGF0YUluZm9bJ2lkcCddWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ10gPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCcgPT4gJHNsb05vZGVzLT5pdGVtKDApLT5nZXRBdHRyaWJ1dGUoJ0xvY2F0aW9uJyksCiAgICAgICAgICAgICAgICAgICAgICAgICdiaW5kaW5nJyA9PiAkc2xvTm9kZXMtPml0ZW0oMCktPmdldEF0dHJpYnV0ZSgnQmluZGluZycpCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCRzbG9Ob2Rlcy0+aXRlbSgwKS0+aGFzQXR0cmlidXRlKCdSZXNwb25zZUxvY2F0aW9uJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG1ldGFkYXRhSW5mb1snaWRwJ11bJ3NpbmdsZUxvZ291dFNlcnZpY2UnXVsncmVzcG9uc2VVcmwnXSA9ICRzbG9Ob2Rlcy0+aXRlbSgwKS0+Z2V0QXR0cmlidXRlKCdSZXNwb25zZUxvY2F0aW9uJyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRrZXlEZXNjcmlwdG9yQ2VydFNpZ25pbmdOb2RlcyA9IFV0aWxzOjpxdWVyeSgkZG9tLCAnLi9tZDpLZXlEZXNjcmlwdG9yW25vdChjb250YWlucyhAdXNlLCAiZW5jcnlwdGlvbiIpKV0vZHM6S2V5SW5mby9kczpYNTA5RGF0YS9kczpYNTA5Q2VydGlmaWNhdGUnLCAkaWRwRGVzY3JpcHRvcik7CgogICAgICAgICAgICAgICAgJGtleURlc2NyaXB0b3JDZXJ0RW5jcnlwdGlvbk5vZGVzID0gVXRpbHM6OnF1ZXJ5KCRkb20sICcuL21kOktleURlc2NyaXB0b3Jbbm90KGNvbnRhaW5zKEB1c2UsICJzaWduaW5nIikpXS9kczpLZXlJbmZvL2RzOlg1MDlEYXRhL2RzOlg1MDlDZXJ0aWZpY2F0ZScsICRpZHBEZXNjcmlwdG9yKTsKCiAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRrZXlEZXNjcmlwdG9yQ2VydFNpZ25pbmdOb2RlcykgfHwgIWVtcHR5KCRrZXlEZXNjcmlwdG9yQ2VydEVuY3J5cHRpb25Ob2RlcykpIHsKICAgICAgICAgICAgICAgICAgICAkbWV0YWRhdGFJbmZvWydpZHAnXVsneDUwOWNlcnRNdWx0aSddID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRrZXlEZXNjcmlwdG9yQ2VydFNpZ25pbmdOb2RlcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGlkcEluZm9bJ3g1MDljZXJ0TXVsdGknXVsnc2lnbmluZyddID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGtleURlc2NyaXB0b3JDZXJ0U2lnbmluZ05vZGVzIGFzICRrZXlEZXNjcmlwdG9yQ2VydFNpZ25pbmdOb2RlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWV0YWRhdGFJbmZvWydpZHAnXVsneDUwOWNlcnRNdWx0aSddWydzaWduaW5nJ11bXSA9IFV0aWxzOjpmb3JtYXRDZXJ0KCRrZXlEZXNjcmlwdG9yQ2VydFNpZ25pbmdOb2RlLT5ub2RlVmFsdWUsIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRrZXlEZXNjcmlwdG9yQ2VydEVuY3J5cHRpb25Ob2RlcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGlkcEluZm9bJ3g1MDljZXJ0TXVsdGknXVsnZW5jcnlwdGlvbiddID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGtleURlc2NyaXB0b3JDZXJ0RW5jcnlwdGlvbk5vZGVzIGFzICRrZXlEZXNjcmlwdG9yQ2VydEVuY3J5cHRpb25Ob2RlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWV0YWRhdGFJbmZvWydpZHAnXVsneDUwOWNlcnRNdWx0aSddWydlbmNyeXB0aW9uJ11bXSA9IFV0aWxzOjpmb3JtYXRDZXJ0KCRrZXlEZXNjcmlwdG9yQ2VydEVuY3J5cHRpb25Ob2RlLT5ub2RlVmFsdWUsIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJGlkcENlcnRkYXRhID0gJG1ldGFkYXRhSW5mb1snaWRwJ11bJ3g1MDljZXJ0TXVsdGknXTsKICAgICAgICAgICAgICAgICAgICBpZiAoKGNvdW50KCRpZHBDZXJ0ZGF0YSkgPT0gMSBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgICgoaXNzZXQoJGlkcENlcnRkYXRhWydzaWduaW5nJ10pIGFuZCBjb3VudCgkaWRwQ2VydGRhdGFbJ3NpZ25pbmcnXSkgPT0gMSkgb3IgKGlzc2V0KCRpZHBDZXJ0ZGF0YVsnZW5jcnlwdGlvbiddKSBhbmQgY291bnQoJGlkcENlcnRkYXRhWydlbmNyeXB0aW9uJ10pID09IDEpKSkgb3IKICAgICAgICAgICAgICAgICAgICAgICAgICgoaXNzZXQoJGlkcENlcnRkYXRhWydzaWduaW5nJ10pICYmIGNvdW50KCRpZHBDZXJ0ZGF0YVsnc2lnbmluZyddKSA9PSAxKSAmJiBpc3NldCgkaWRwQ2VydGRhdGFbJ2VuY3J5cHRpb24nXSkgJiYgY291bnQoJGlkcENlcnRkYXRhWydlbmNyeXB0aW9uJ10pID09IDEgJiYgc3RyY21wKCRpZHBDZXJ0ZGF0YVsnc2lnbmluZyddWzBdLCAkaWRwQ2VydGRhdGFbJ2VuY3J5cHRpb24nXVswXSkgPT0gMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRtZXRhZGF0YUluZm9bJ2lkcCddWyd4NTA5Y2VydE11bHRpJ11bJ3NpZ25pbmcnXVswXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtZXRhZGF0YUluZm9bJ2lkcCddWyd4NTA5Y2VydCddID0gJG1ldGFkYXRhSW5mb1snaWRwJ11bJ3g1MDljZXJ0TXVsdGknXVsnc2lnbmluZyddWzBdOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1ldGFkYXRhSW5mb1snaWRwJ11bJ3g1MDljZXJ0J10gPSAkbWV0YWRhdGFJbmZvWydpZHAnXVsneDUwOWNlcnRNdWx0aSddWydlbmNyeXB0aW9uJ11bMF07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdW5zZXQoJG1ldGFkYXRhSW5mb1snaWRwJ11bJ3g1MDljZXJ0TXVsdGknXSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRuYW1lSWRGb3JtYXROb2RlcyA9IFV0aWxzOjpxdWVyeSgkZG9tLCAnLi9tZDpOYW1lSURGb3JtYXQnLCAkaWRwRGVzY3JpcHRvcik7CiAgICAgICAgICAgICAgICBpZiAoJG5hbWVJZEZvcm1hdE5vZGVzLT5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgJG1ldGFkYXRhSW5mb1snc3AnXVsnTmFtZUlERm9ybWF0J10gPSAkbmFtZUlkRm9ybWF0Tm9kZXMtPml0ZW0oMCktPm5vZGVWYWx1ZTsKICAgICAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRkZXNpcmVkTmFtZUlkRm9ybWF0KSkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkbmFtZUlkRm9ybWF0Tm9kZXMgYXMgJG5hbWVJZEZvcm1hdE5vZGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAoJG5hbWVJZEZvcm1hdE5vZGUtPm5vZGVWYWx1ZSwgJGRlc2lyZWROYW1lSWRGb3JtYXQpID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWV0YWRhdGFJbmZvWydzcCddWydOYW1lSURGb3JtYXQnXSA9ICRuYW1lSWRGb3JtYXROb2RlLT5ub2RlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignRXJyb3IgcGFyc2luZyBtZXRhZGF0YS4gJy4kZS0+Z2V0TWVzc2FnZSgpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbWV0YWRhdGFJbmZvOwogICAgfQoKICAgIC8qKgogICAgICogSW5qZWN0IG1ldGFkYXRhIGluZm8gaW50byBwaHAtc2FtbCBzZXR0aW5ncyBhcnJheQogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkc2V0dGluZ3MgICAgIHBocC1zYW1sIHNldHRpbmdzIGFycmF5CiAgICAgKiBAcGFyYW0gYXJyYXkgJG1ldGFkYXRhSW5mbyBhcnJheSBtZXRhZGF0YSBpbmZvCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBzZXR0aW5ncwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGluamVjdEludG9TZXR0aW5ncygkc2V0dGluZ3MsICRtZXRhZGF0YUluZm8pCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCRtZXRhZGF0YUluZm9bJ2lkcCddKSAmJiBpc3NldCgkc2V0dGluZ3NbJ2lkcCddKSkgewogICAgICAgICAgICBpZiAoaXNzZXQoJG1ldGFkYXRhSW5mb1snaWRwJ11bJ3g1MDljZXJ0TXVsdGknXSkgJiYgIWVtcHR5KCRtZXRhZGF0YUluZm9bJ2lkcCddWyd4NTA5Y2VydE11bHRpJ10pICYmIGlzc2V0KCRzZXR0aW5nc1snaWRwJ11bJ3g1MDljZXJ0J10pKSB7CiAgICAgICAgICAgICAgICB1bnNldCgkc2V0dGluZ3NbJ2lkcCddWyd4NTA5Y2VydCddKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGlzc2V0KCRtZXRhZGF0YUluZm9bJ2lkcCddWyd4NTA5Y2VydCddKSAmJiAhZW1wdHkoJG1ldGFkYXRhSW5mb1snaWRwJ11bJ3g1MDljZXJ0J10pICYmIGlzc2V0KCRzZXR0aW5nc1snaWRwJ11bJ3g1MDljZXJ0TXVsdGknXSkpIHsKICAgICAgICAgICAgICAgIHVuc2V0KCRzZXR0aW5nc1snaWRwJ11bJ3g1MDljZXJ0TXVsdGknXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBhcnJheV9yZXBsYWNlX3JlY3Vyc2l2ZSgkc2V0dGluZ3MsICRtZXRhZGF0YUluZm8pOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/LogoutRequest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHBocC1zYW1sLgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQHBhY2thZ2UgT25lTG9naW4KICogQGF1dGhvciAgU2l4dG8gTWFydGluIDxzaXh0by5tYXJ0aW4uZ2FyY2lhQGdtYWlsLmNvbT4KICogQGxpY2Vuc2UgTUlUIGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICogQGxpbmsgICAgaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwKICovCm5hbWVzcGFjZSBPbmVMb2dpblxTYW1sMjsKCnVzZSBSb2JSaWNoYXJkc1xYTUxTZWNMaWJzXFhNTFNlY3VyaXR5S2V5OwoKdXNlIERPTURvY3VtZW50Owp1c2UgRXhjZXB0aW9uOwoKLyoqCiAqIFNBTUwgMiBMb2dvdXQgUmVxdWVzdAogKi8KY2xhc3MgTG9nb3V0UmVxdWVzdAp7CiAgICAvKioKICAgICAqIENvbnRhaW5zIHRoZSBJRCBvZiB0aGUgTG9nb3V0IFJlcXVlc3QKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJGlkOwoKICAgIC8qKgogICAgICogT2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgc2V0dGluZyBpbmZvCiAgICAgKgogICAgICogQHZhciBTZXR0aW5ncwogICAgICovCiAgICBwcm90ZWN0ZWQgJF9zZXR0aW5nczsKCiAgICAvKioKICAgICAqIFNBTUwgTG9nb3V0IFJlcXVlc3QKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJF9sb2dvdXRSZXF1ZXN0OwoKICAgIC8qKgogICAgICogQWZ0ZXIgZXhlY3V0ZSBhIHZhbGlkYXRpb24gcHJvY2VzcywgdGhpcyB2YXIgY29udGFpbnMgdGhlIGNhdXNlCiAgICAgKgogICAgICogQHZhciBFeGNlcHRpb24KICAgICAqLwogICAgcHJpdmF0ZSAkX2Vycm9yOwoKICAgIC8qKgogICAgICogQ29uc3RydWN0cyB0aGUgTG9nb3V0IFJlcXVlc3Qgb2JqZWN0LgogICAgICoKICAgICAqIEBwYXJhbSBTZXR0aW5ncyAkc2V0dGluZ3MgICAgICAgICAgICBTZXR0aW5ncwogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICAgICAgICAgICAgICRyZXF1ZXN0ICAgICAgICAgICAgIEEgVVVFbmNvZGVkIExvZ291dCBSZXF1ZXN0LgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICAgICAgICAgICAgICRuYW1lSWQgICAgICAgICAgICAgIFRoZSBOYW1lSUQgdGhhdCB3aWxsIGJlIHNldCBpbiB0aGUgTG9nb3V0UmVxdWVzdC4KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAgICAgICAgICAgICAkc2Vzc2lvbkluZGV4ICAgICAgICBUaGUgU2Vzc2lvbkluZGV4ICh0YWtlbiBmcm9tIHRoZSBTQU1MIFJlc3BvbnNlIGluIHRoZSBTU08gcHJvY2VzcykuCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgICAgICAgICAgICAgJG5hbWVJZEZvcm1hdCAgICAgICAgVGhlIE5hbWVJRCBGb3JtYXQgd2lsbCBiZSBzZXQgaW4gdGhlIExvZ291dFJlcXVlc3QuCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgICAgICAgICAgICAgJG5hbWVJZE5hbWVRdWFsaWZpZXIgVGhlIE5hbWVJRCBOYW1lUXVhbGlmaWVyIHdpbGwgYmUgc2V0IGluIHRoZSBMb2dvdXRSZXF1ZXN0LgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICAgICAgICAgICAgICRuYW1lSWRTUE5hbWVRdWFsaWZpZXIgVGhlIE5hbWVJRCBTUCBOYW1lUXVhbGlmaWVyIHdpbGwgYmUgc2V0IGluIHRoZSBMb2dvdXRSZXF1ZXN0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoXE9uZUxvZ2luXFNhbWwyXFNldHRpbmdzICRzZXR0aW5ncywgJHJlcXVlc3QgPSBudWxsLCAkbmFtZUlkID0gbnVsbCwgJHNlc3Npb25JbmRleCA9IG51bGwsICRuYW1lSWRGb3JtYXQgPSBudWxsLCAkbmFtZUlkTmFtZVF1YWxpZmllciA9IG51bGwsICRuYW1lSWRTUE5hbWVRdWFsaWZpZXIgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT5fc2V0dGluZ3MgPSAkc2V0dGluZ3M7CgogICAgICAgICRiYXNlVVJMID0gJHRoaXMtPl9zZXR0aW5ncy0+Z2V0QmFzZVVSTCgpOwogICAgICAgIGlmICghZW1wdHkoJGJhc2VVUkwpKSB7CiAgICAgICAgICAgIFV0aWxzOjpzZXRCYXNlVVJMKCRiYXNlVVJMKTsKICAgICAgICB9CgogICAgICAgIGlmICghaXNzZXQoJHJlcXVlc3QpIHx8IGVtcHR5KCRyZXF1ZXN0KSkgewogICAgICAgICAgICAkc3BEYXRhID0gJHRoaXMtPl9zZXR0aW5ncy0+Z2V0U1BEYXRhKCk7CiAgICAgICAgICAgICRpZHBEYXRhID0gJHRoaXMtPl9zZXR0aW5ncy0+Z2V0SWRQRGF0YSgpOwogICAgICAgICAgICAkc2VjdXJpdHkgPSAkdGhpcy0+X3NldHRpbmdzLT5nZXRTZWN1cml0eURhdGEoKTsKCiAgICAgICAgICAgICRpZCA9IFV0aWxzOjpnZW5lcmF0ZVVuaXF1ZUlEKCk7CiAgICAgICAgICAgICR0aGlzLT5pZCA9ICRpZDsKCiAgICAgICAgICAgICRpc3N1ZUluc3RhbnQgPSBVdGlsczo6cGFyc2VUaW1lMlNBTUwodGltZSgpKTsKCiAgICAgICAgICAgICRjZXJ0ID0gbnVsbDsKICAgICAgICAgICAgaWYgKGlzc2V0KCRzZWN1cml0eVsnbmFtZUlkRW5jcnlwdGVkJ10pICYmICRzZWN1cml0eVsnbmFtZUlkRW5jcnlwdGVkJ10pIHsKICAgICAgICAgICAgICAgICRleGlzdHNNdWx0aVg1MDlFbmMgPSBpc3NldCgkaWRwRGF0YVsneDUwOWNlcnRNdWx0aSddKSAmJiBpc3NldCgkaWRwRGF0YVsneDUwOWNlcnRNdWx0aSddWydlbmNyeXB0aW9uJ10pICYmICFlbXB0eSgkaWRwRGF0YVsneDUwOWNlcnRNdWx0aSddWydlbmNyeXB0aW9uJ10pOwoKICAgICAgICAgICAgICAgIGlmICgkZXhpc3RzTXVsdGlYNTA5RW5jKSB7CiAgICAgICAgICAgICAgICAgICAgJGNlcnQgPSAkaWRwRGF0YVsneDUwOWNlcnRNdWx0aSddWydlbmNyeXB0aW9uJ11bMF07CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRjZXJ0ID0gJGlkcERhdGFbJ3g1MDljZXJ0J107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghZW1wdHkoJG5hbWVJZCkpIHsKICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkbmFtZUlkRm9ybWF0KQogICAgICAgICAgICAgICAgICAgICYmICRzcERhdGFbJ05hbWVJREZvcm1hdCddICE9IENvbnN0YW50czo6TkFNRUlEX1VOU1BFQ0lGSUVEKSB7CiAgICAgICAgICAgICAgICAgICAgJG5hbWVJZEZvcm1hdCA9ICRzcERhdGFbJ05hbWVJREZvcm1hdCddOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJG5hbWVJZCA9ICRpZHBEYXRhWydlbnRpdHlJZCddOwogICAgICAgICAgICAgICAgJG5hbWVJZEZvcm1hdCA9IENvbnN0YW50czo6TkFNRUlEX0VOVElUWTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLyogRnJvbSBzYW1sLWNvcmUtMi4wLW9zIDguMy42LCB3aGVuIHRoZSBlbnRpdHkgRm9ybWF0IGlzIHVzZWQ6CiAgICAgICAgICAgICAgICJUaGUgTmFtZVF1YWxpZmllciwgU1BOYW1lUXVhbGlmaWVyLCBhbmQgU1BQcm92aWRlZElEIGF0dHJpYnV0ZXMgTVVTVCBiZSBvbWl0dGVkLgogICAgICAgICAgICAqLwogICAgICAgICAgICBpZiAoIWVtcHR5KCRuYW1lSWRGb3JtYXQpICYmICRuYW1lSWRGb3JtYXQgPT0gQ29uc3RhbnRzOjpOQU1FSURfRU5USVRZKSB7CiAgICAgICAgICAgICAgICAkbmFtZUlkTmFtZVF1YWxpZmllciA9IG51bGw7CiAgICAgICAgICAgICAgICAkbmFtZUlkU1BOYW1lUXVhbGlmaWVyID0gbnVsbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gTmFtZUlEIEZvcm1hdCBVTlNQRUNJRklFRCBvbWl0dGVkCiAgICAgICAgICAgIGlmICghZW1wdHkoJG5hbWVJZEZvcm1hdCkgJiYgJG5hbWVJZEZvcm1hdCA9PSBDb25zdGFudHM6Ok5BTUVJRF9VTlNQRUNJRklFRCkgewogICAgICAgICAgICAgICAgJG5hbWVJZEZvcm1hdCA9IG51bGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRuYW1lSWRPYmogPSBVdGlsczo6Z2VuZXJhdGVOYW1lSWQoCiAgICAgICAgICAgICAgICAkbmFtZUlkLAogICAgICAgICAgICAgICAgJG5hbWVJZFNQTmFtZVF1YWxpZmllciwKICAgICAgICAgICAgICAgICRuYW1lSWRGb3JtYXQsCiAgICAgICAgICAgICAgICAkY2VydCwKICAgICAgICAgICAgICAgICRuYW1lSWROYW1lUXVhbGlmaWVyLAogICAgICAgICAgICAgICAgJHNlY3VyaXR5WydlbmNyeXB0aW9uX2FsZ29yaXRobSddCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkc2Vzc2lvbkluZGV4U3RyID0gaXNzZXQoJHNlc3Npb25JbmRleCkgPyAiPHNhbWxwOlNlc3Npb25JbmRleD57JHNlc3Npb25JbmRleH08L3NhbWxwOlNlc3Npb25JbmRleD4iIDogIiI7CgogICAgICAgICAgICAkc3BFbnRpdHlJZCA9IGh0bWxzcGVjaWFsY2hhcnMoJHNwRGF0YVsnZW50aXR5SWQnXSwgRU5UX1FVT1RFUyk7CiAgICAgICAgICAgICRkZXN0aW5hdGlvbiA9ICR0aGlzLT5fc2V0dGluZ3MtPmdldElkUFNMT1VybCgpOwogICAgICAgICAgICAkbG9nb3V0UmVxdWVzdCA9IDw8PExPR09VVFJFUVVFU1QKPHNhbWxwOkxvZ291dFJlcXVlc3QKICAgIHhtbG5zOnNhbWxwPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wiCiAgICB4bWxuczpzYW1sPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXNzZXJ0aW9uIgogICAgSUQ9InskaWR9IgogICAgVmVyc2lvbj0iMi4wIgogICAgSXNzdWVJbnN0YW50PSJ7JGlzc3VlSW5zdGFudH0iCiAgICBEZXN0aW5hdGlvbj0ieyRkZXN0aW5hdGlvbn0iPgogICAgPHNhbWw6SXNzdWVyPnskc3BFbnRpdHlJZH08L3NhbWw6SXNzdWVyPgogICAgeyRuYW1lSWRPYmp9CiAgICB7JHNlc3Npb25JbmRleFN0cn0KPC9zYW1scDpMb2dvdXRSZXF1ZXN0PgpMT0dPVVRSRVFVRVNUOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRkZWNvZGVkID0gYmFzZTY0X2RlY29kZSgkcmVxdWVzdCk7CiAgICAgICAgICAgIC8vIFdlIHRyeSB0byBpbmZsYXRlCiAgICAgICAgICAgICRpbmZsYXRlZCA9IEBnemluZmxhdGUoJGRlY29kZWQpOwogICAgICAgICAgICBpZiAoJGluZmxhdGVkICE9IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAkbG9nb3V0UmVxdWVzdCA9ICRpbmZsYXRlZDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRsb2dvdXRSZXF1ZXN0ID0gJGRlY29kZWQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPmlkID0gc3RhdGljOjpnZXRJRCgkbG9nb3V0UmVxdWVzdCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5fbG9nb3V0UmVxdWVzdCA9ICRsb2dvdXRSZXF1ZXN0OwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgTG9nb3V0IFJlcXVlc3QgZGVmbGF0ZWQsIGJhc2U2NGVuY29kZWQsIHVuc2lnbmVkCiAgICAgKgogICAgICogQHBhcmFtIGJvb2x8bnVsbCAkZGVmbGF0ZSBXaGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgJ2d6ZGVmbGF0ZScgdGhlIHJlcXVlc3QgYm9keSBiZWZvcmUgd2UgcmV0dXJuIGl0LgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIERlZmxhdGVkIGJhc2U2NCBlbmNvZGVkIExvZ291dCBSZXF1ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZXF1ZXN0KCRkZWZsYXRlID0gbnVsbCkKICAgIHsKICAgICAgICAkc3ViamVjdCA9ICR0aGlzLT5fbG9nb3V0UmVxdWVzdDsKCiAgICAgICAgaWYgKGlzX251bGwoJGRlZmxhdGUpKSB7CiAgICAgICAgICAgICRkZWZsYXRlID0gJHRoaXMtPl9zZXR0aW5ncy0+c2hvdWxkQ29tcHJlc3NSZXF1ZXN0cygpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRkZWZsYXRlKSB7CiAgICAgICAgICAgICRzdWJqZWN0ID0gZ3pkZWZsYXRlKCR0aGlzLT5fbG9nb3V0UmVxdWVzdCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYmFzZTY0X2VuY29kZSgkc3ViamVjdCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBJRCBvZiB0aGUgTG9nb3V0IFJlcXVlc3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xET01Eb2N1bWVudCAkcmVxdWVzdCBMb2dvdXQgUmVxdWVzdCBNZXNzYWdlCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgSUQKICAgICAqCiAgICAgKiBAdGhyb3dzIEVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0SUQoJHJlcXVlc3QpCiAgICB7CiAgICAgICAgaWYgKCRyZXF1ZXN0IGluc3RhbmNlb2YgRE9NRG9jdW1lbnQpIHsKICAgICAgICAgICAgJGRvbSA9ICRyZXF1ZXN0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRkb20gPSBuZXcgRE9NRG9jdW1lbnQoKTsKICAgICAgICAgICAgJGRvbSA9IFV0aWxzOjpsb2FkWE1MKCRkb20sICRyZXF1ZXN0KTsKICAgICAgICB9CgoKICAgICAgICBpZiAoZmFsc2UgPT09ICRkb20pIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAgICAgICAgICAgIkxvZ291dFJlcXVlc3QgY291bGQgbm90IGJlIHByb2Nlc3NlZCIsCiAgICAgICAgICAgICAgICBFcnJvcjo6U0FNTF9MT0dPVVRSRVFVRVNUX0lOVkFMSUQKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRpZCA9ICRkb20tPmRvY3VtZW50RWxlbWVudC0+Z2V0QXR0cmlidXRlKCdJRCcpOwogICAgICAgIHJldHVybiAkaWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBOYW1lSUQgRGF0YSBvZiB0aGUgdGhlIExvZ291dCBSZXF1ZXN0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8RE9NRG9jdW1lbnQgJHJlcXVlc3QgTG9nb3V0IFJlcXVlc3QgTWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICAgICAgICAka2V5ICAgICBUaGUgU1Aga2V5CiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBOYW1lIElEIERhdGEgKFZhbHVlLCBGb3JtYXQsIE5hbWVRdWFsaWZpZXIsIFNQTmFtZVF1YWxpZmllcikKICAgICAqCiAgICAgKiBAdGhyb3dzIEVycm9yCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICogQHRocm93cyBWYWxpZGF0aW9uRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXROYW1lSWREYXRhKCRyZXF1ZXN0LCAka2V5ID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoJHJlcXVlc3QgaW5zdGFuY2VvZiBET01Eb2N1bWVudCkgewogICAgICAgICAgICAkZG9tID0gJHJlcXVlc3Q7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGRvbSA9IG5ldyBET01Eb2N1bWVudCgpOwogICAgICAgICAgICAkZG9tID0gVXRpbHM6OmxvYWRYTUwoJGRvbSwgJHJlcXVlc3QpOwogICAgICAgIH0KCiAgICAgICAgJGVuY3J5cHRlZEVudHJpZXMgPSBVdGlsczo6cXVlcnkoJGRvbSwgJy9zYW1scDpMb2dvdXRSZXF1ZXN0L3NhbWw6RW5jcnlwdGVkSUQnKTsKCiAgICAgICAgaWYgKCRlbmNyeXB0ZWRFbnRyaWVzLT5sZW5ndGggPT0gMSkgewogICAgICAgICAgICAkZW5jcnlwdGVkRGF0YU5vZGVzID0gJGVuY3J5cHRlZEVudHJpZXMtPml0ZW0oMCktPmdldEVsZW1lbnRzQnlUYWdOYW1lKCdFbmNyeXB0ZWREYXRhJyk7CiAgICAgICAgICAgICRlbmNyeXB0ZWREYXRhID0gJGVuY3J5cHRlZERhdGFOb2Rlcy0+aXRlbSgwKTsKCiAgICAgICAgICAgIGlmIChlbXB0eSgka2V5KSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAgICAgICAgICAgICAgICJQcml2YXRlIEtleSBpcyByZXF1aXJlZCBpbiBvcmRlciB0byBkZWNyeXB0IHRoZSBOYW1lSUQsIGNoZWNrIHNldHRpbmdzIiwKICAgICAgICAgICAgICAgICAgICBFcnJvcjo6UFJJVkFURV9LRVlfTk9UX0ZPVU5ECiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkc2Vja2V5ID0gbmV3IFhNTFNlY3VyaXR5S2V5KFhNTFNlY3VyaXR5S2V5OjpSU0FfMV81LCBhcnJheSgndHlwZSc9Pidwcml2YXRlJykpOwogICAgICAgICAgICAkc2Vja2V5LT5sb2FkS2V5KCRrZXkpOwoKICAgICAgICAgICAgJG5hbWVJZCA9IFV0aWxzOjpkZWNyeXB0RWxlbWVudCgkZW5jcnlwdGVkRGF0YSwgJHNlY2tleSk7CgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRlbnRyaWVzID0gVXRpbHM6OnF1ZXJ5KCRkb20sICcvc2FtbHA6TG9nb3V0UmVxdWVzdC9zYW1sOk5hbWVJRCcpOwogICAgICAgICAgICBpZiAoJGVudHJpZXMtPmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgICAgICAkbmFtZUlkID0gJGVudHJpZXMtPml0ZW0oMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghaXNzZXQoJG5hbWVJZCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICJOYW1lSUQgbm90IGZvdW5kIGluIHRoZSBMb2dvdXQgUmVxdWVzdCIsCiAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6Ok5PX05BTUVJRAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJG5hbWVJZERhdGEgPSBhcnJheSgpOwogICAgICAgICRuYW1lSWREYXRhWydWYWx1ZSddID0gJG5hbWVJZC0+bm9kZVZhbHVlOwogICAgICAgIGZvcmVhY2ggKGFycmF5KCdGb3JtYXQnLCAnU1BOYW1lUXVhbGlmaWVyJywgJ05hbWVRdWFsaWZpZXInKSBhcyAkYXR0cikgewogICAgICAgICAgICBpZiAoJG5hbWVJZC0+aGFzQXR0cmlidXRlKCRhdHRyKSkgewogICAgICAgICAgICAgICAgJG5hbWVJZERhdGFbJGF0dHJdID0gJG5hbWVJZC0+Z2V0QXR0cmlidXRlKCRhdHRyKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRuYW1lSWREYXRhOwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgTmFtZUlEIG9mIHRoZSBMb2dvdXQgUmVxdWVzdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfERPTURvY3VtZW50ICRyZXF1ZXN0IExvZ291dCBSZXF1ZXN0IE1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAgICAgICAgJGtleSAgICAgVGhlIFNQIGtleQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIE5hbWUgSUQgVmFsdWUKICAgICAqCiAgICAgKiBAdGhyb3dzIEVycm9yCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICogQHRocm93cyBWYWxpZGF0aW9uRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXROYW1lSWQoJHJlcXVlc3QsICRrZXkgPSBudWxsKQogICAgewogICAgICAgICRuYW1lSWQgPSBzZWxmOjpnZXROYW1lSWREYXRhKCRyZXF1ZXN0LCAka2V5KTsKICAgICAgICByZXR1cm4gJG5hbWVJZFsnVmFsdWUnXTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldHMgdGhlIElzc3VlciBvZiB0aGUgTG9nb3V0IFJlcXVlc3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xET01Eb2N1bWVudCAkcmVxdWVzdCBMb2dvdXQgUmVxdWVzdCBNZXNzYWdlCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCAkaXNzdWVyIFRoZSBJc3N1ZXIKICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldElzc3VlcigkcmVxdWVzdCkKICAgIHsKICAgICAgICBpZiAoJHJlcXVlc3QgaW5zdGFuY2VvZiBET01Eb2N1bWVudCkgewogICAgICAgICAgICAkZG9tID0gJHJlcXVlc3Q7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGRvbSA9IG5ldyBET01Eb2N1bWVudCgpOwogICAgICAgICAgICAkZG9tID0gVXRpbHM6OmxvYWRYTUwoJGRvbSwgJHJlcXVlc3QpOwogICAgICAgIH0KCiAgICAgICAgJGlzc3VlciA9IG51bGw7CiAgICAgICAgJGlzc3Vlck5vZGVzID0gVXRpbHM6OnF1ZXJ5KCRkb20sICcvc2FtbHA6TG9nb3V0UmVxdWVzdC9zYW1sOklzc3VlcicpOwogICAgICAgIGlmICgkaXNzdWVyTm9kZXMtPmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgICRpc3N1ZXIgPSAkaXNzdWVyTm9kZXMtPml0ZW0oMCktPnRleHRDb250ZW50OwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGlzc3VlcjsKICAgIH0KCiAgICAvKioKICAgICAqIEdldHMgdGhlIFNlc3Npb25JbmRleGVzIGZyb20gdGhlIExvZ291dCBSZXF1ZXN0LgogICAgICogTm90aWNlOiBPdXIgQ29uc3RydWN0b3Igb25seSBzdXBwb3J0IDEgU2Vzc2lvbkluZGV4IGJ1dCB0aGlzIHBhcnNlcgogICAgICogICAgICAgICBleHRyYWN0cyBhbiBhcnJheSBvZiBhbGwgdGhlICBTZXNzaW9uSW5kZXggZm91bmQgb24gYQogICAgICogICAgICAgICBMb2dvdXQgUmVxdWVzdCwgdGhhdCBjb3VsZCBiZSBtYW55LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8RE9NRG9jdW1lbnQgJHJlcXVlc3QgTG9nb3V0IFJlcXVlc3QgTWVzc2FnZQogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgVGhlIFNlc3Npb25JbmRleCB2YWx1ZQogICAgICoKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0U2Vzc2lvbkluZGV4ZXMoJHJlcXVlc3QpCiAgICB7CiAgICAgICAgaWYgKCRyZXF1ZXN0IGluc3RhbmNlb2YgRE9NRG9jdW1lbnQpIHsKICAgICAgICAgICAgJGRvbSA9ICRyZXF1ZXN0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRkb20gPSBuZXcgRE9NRG9jdW1lbnQoKTsKICAgICAgICAgICAgJGRvbSA9IFV0aWxzOjpsb2FkWE1MKCRkb20sICRyZXF1ZXN0KTsKICAgICAgICB9CgogICAgICAgICRzZXNzaW9uSW5kZXhlcyA9IGFycmF5KCk7CiAgICAgICAgJHNlc3Npb25JbmRleE5vZGVzID0gVXRpbHM6OnF1ZXJ5KCRkb20sICcvc2FtbHA6TG9nb3V0UmVxdWVzdC9zYW1scDpTZXNzaW9uSW5kZXgnKTsKICAgICAgICBmb3JlYWNoICgkc2Vzc2lvbkluZGV4Tm9kZXMgYXMgJHNlc3Npb25JbmRleE5vZGUpIHsKICAgICAgICAgICAgJHNlc3Npb25JbmRleGVzW10gPSAkc2Vzc2lvbkluZGV4Tm9kZS0+dGV4dENvbnRlbnQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkc2Vzc2lvbkluZGV4ZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgdGhlIExvZ291dCBSZXF1ZXN0IHJlY2VpdmVkIGlzIHZhbGlkLgogICAgICoKICAgICAqIEBwYXJhbSBib29sICRyZXRyaWV2ZVBhcmFtZXRlcnNGcm9tU2VydmVyIFRydWUgaWYgd2Ugd2FudCB0byB1c2UgcGFyYW1ldGVycyBmcm9tICRfU0VSVkVSIHRvIHZhbGlkYXRlIHRoZSBzaWduYXR1cmUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgSWYgdGhlIExvZ291dCBSZXF1ZXN0IGlzIG9yIG5vdCB2YWxpZAogICAgICoKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFZhbGlkYXRpb25FcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNWYWxpZCgkcmV0cmlldmVQYXJhbWV0ZXJzRnJvbVNlcnZlciA9IGZhbHNlKQogICAgewogICAgICAgICR0aGlzLT5fZXJyb3IgPSBudWxsOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRkb20gPSBuZXcgRE9NRG9jdW1lbnQoKTsKICAgICAgICAgICAgJGRvbSA9IFV0aWxzOjpsb2FkWE1MKCRkb20sICR0aGlzLT5fbG9nb3V0UmVxdWVzdCk7CgogICAgICAgICAgICAkaWRwRGF0YSA9ICR0aGlzLT5fc2V0dGluZ3MtPmdldElkUERhdGEoKTsKICAgICAgICAgICAgJGlkUEVudGl0eUlkID0gJGlkcERhdGFbJ2VudGl0eUlkJ107CgogICAgICAgICAgICBpZiAoJHRoaXMtPl9zZXR0aW5ncy0+aXNTdHJpY3QoKSkgewogICAgICAgICAgICAgICAgJHNlY3VyaXR5ID0gJHRoaXMtPl9zZXR0aW5ncy0+Z2V0U2VjdXJpdHlEYXRhKCk7CgogICAgICAgICAgICAgICAgaWYgKCRzZWN1cml0eVsnd2FudFhNTFZhbGlkYXRpb24nXSkgewogICAgICAgICAgICAgICAgICAgICRyZXMgPSBVdGlsczo6dmFsaWRhdGVYTUwoJGRvbSwgJ3NhbWwtc2NoZW1hLXByb3RvY29sLTIuMC54c2QnLCAkdGhpcy0+X3NldHRpbmdzLT5pc0RlYnVnQWN0aXZlKCksICR0aGlzLT5fc2V0dGluZ3MtPmdldFNjaGVtYXNQYXRoKCkpOwogICAgICAgICAgICAgICAgICAgIGlmICghJHJlcyBpbnN0YW5jZW9mIERPTURvY3VtZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBTQU1MIExvZ291dCBSZXF1ZXN0LiBOb3QgbWF0Y2ggdGhlIHNhbWwtc2NoZW1hLXByb3RvY29sLTIuMC54c2QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpJTlZBTElEX1hNTF9GT1JNQVQKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGN1cnJlbnRVUkwgPSBVdGlsczo6Z2V0U2VsZlJvdXRlZFVSTE5vUXVlcnkoKTsKCiAgICAgICAgICAgICAgICAvLyBDaGVjayBOb3RPbk9yQWZ0ZXIKICAgICAgICAgICAgICAgIGlmICgkZG9tLT5kb2N1bWVudEVsZW1lbnQtPmhhc0F0dHJpYnV0ZSgnTm90T25PckFmdGVyJykpIHsKICAgICAgICAgICAgICAgICAgICAkbmEgPSBVdGlsczo6cGFyc2VTQU1MMlRpbWUoJGRvbS0+ZG9jdW1lbnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUoJ05vdE9uT3JBZnRlcicpKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJG5hIDw9IHRpbWUoKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCB2YWxpZGF0ZSB0aW1lc3RhbXA6IGV4cGlyZWQuIENoZWNrIHN5c3RlbSBjbG9jay4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpSRVNQT05TRV9FWFBJUkVECiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENoZWNrIGRlc3RpbmF0aW9uCiAgICAgICAgICAgICAgICBpZiAoJGRvbS0+ZG9jdW1lbnRFbGVtZW50LT5oYXNBdHRyaWJ1dGUoJ0Rlc3RpbmF0aW9uJykpIHsKICAgICAgICAgICAgICAgICAgICAkZGVzdGluYXRpb24gPSAkZG9tLT5kb2N1bWVudEVsZW1lbnQtPmdldEF0dHJpYnV0ZSgnRGVzdGluYXRpb24nKTsKICAgICAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJGRlc3RpbmF0aW9uKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoISRzZWN1cml0eVsncmVsYXhEZXN0aW5hdGlvblZhbGlkYXRpb24nXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIExvZ291dFJlcXVlc3QgaGFzIGFuIGVtcHR5IERlc3RpbmF0aW9uIHZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OkVNUFRZX0RFU1RJTkFUSU9OCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHVybENvbXBhcmlzb25MZW5ndGggPSAkc2VjdXJpdHlbJ2Rlc3RpbmF0aW9uU3RyaWN0bHlNYXRjaGVzJ10gPyBzdHJsZW4oJGRlc3RpbmF0aW9uKSA6IHN0cmxlbigkY3VycmVudFVSTCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJuY21wKCRkZXN0aW5hdGlvbiwgJGN1cnJlbnRVUkwsICR1cmxDb21wYXJpc29uTGVuZ3RoKSAhPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGN1cnJlbnRVUkxOb1JvdXRlZCA9IFV0aWxzOjpnZXRTZWxmVVJMTm9RdWVyeSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHVybENvbXBhcmlzb25MZW5ndGggPSAkc2VjdXJpdHlbJ2Rlc3RpbmF0aW9uU3RyaWN0bHlNYXRjaGVzJ10gPyBzdHJsZW4oJGRlc3RpbmF0aW9uKSA6IHN0cmxlbigkY3VycmVudFVSTE5vUm91dGVkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJuY21wKCRkZXN0aW5hdGlvbiwgJGN1cnJlbnRVUkxOb1JvdXRlZCwgJHVybENvbXBhcmlzb25MZW5ndGgpICE9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBMb2dvdXRSZXF1ZXN0IHdhcyByZWNlaXZlZCBhdCAkY3VycmVudFVSTCBpbnN0ZWFkIG9mICRkZXN0aW5hdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6V1JPTkdfREVTVElOQVRJT04KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRuYW1lSWQgPSBzdGF0aWM6OmdldE5hbWVJZCgkZG9tLCAkdGhpcy0+X3NldHRpbmdzLT5nZXRTUGtleSgpKTsKCiAgICAgICAgICAgICAgICAvLyBDaGVjayBpc3N1ZXIKICAgICAgICAgICAgICAgICRpc3N1ZXIgPSBzdGF0aWM6OmdldElzc3VlcigkZG9tKTsKICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJGlzc3VlcikgJiYgJGlzc3VlciAhPSAkaWRQRW50aXR5SWQpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBpc3N1ZXIgaW4gdGhlIExvZ291dCBSZXF1ZXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpXUk9OR19JU1NVRVIKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkc2VjdXJpdHlbJ3dhbnRNZXNzYWdlc1NpZ25lZCddICYmICFpc3NldCgkX0dFVFsnU2lnbmF0dXJlJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBNZXNzYWdlIG9mIHRoZSBMb2dvdXQgUmVxdWVzdCBpcyBub3Qgc2lnbmVkIGFuZCB0aGUgU1AgcmVxdWlyZSBpdCIsCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6Tk9fU0lHTkVEX01FU1NBR0UKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoaXNzZXQoJF9HRVRbJ1NpZ25hdHVyZSddKSkgewogICAgICAgICAgICAgICAgJHNpZ25hdHVyZVZhbGlkID0gVXRpbHM6OnZhbGlkYXRlQmluYXJ5U2lnbigiU0FNTFJlcXVlc3QiLCAkX0dFVCwgJGlkcERhdGEsICRyZXRyaWV2ZVBhcmFtZXRlcnNGcm9tU2VydmVyKTsKICAgICAgICAgICAgICAgIGlmICghJHNpZ25hdHVyZVZhbGlkKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgIlNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZC4gTG9nb3V0IFJlcXVlc3QgcmVqZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OklOVkFMSURfU0lHTkFUVVJFCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICR0aGlzLT5fZXJyb3IgPSAkZTsKICAgICAgICAgICAgJGRlYnVnID0gJHRoaXMtPl9zZXR0aW5ncy0+aXNEZWJ1Z0FjdGl2ZSgpOwogICAgICAgICAgICBpZiAoJGRlYnVnKSB7CiAgICAgICAgICAgICAgICBlY2hvIGh0bWxlbnRpdGllcygkdGhpcy0+X2Vycm9yLT5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBBZnRlciBleGVjdXRlIGEgdmFsaWRhdGlvbiBwcm9jZXNzLCBpZiBmYWlscyB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBFeGNlcHRpb24gb2YgdGhlIGNhdXNlCiAgICAgKgogICAgICogQHJldHVybiBFeGNlcHRpb24gQ2F1c2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEVycm9yRXhjZXB0aW9uKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9lcnJvcjsKICAgIH0KCiAgICAvKioKICAgICAqIEFmdGVyIGV4ZWN1dGUgYSB2YWxpZGF0aW9uIHByb2Nlc3MsIGlmIGZhaWxzIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGNhdXNlCiAgICAgKgogICAgICogQHJldHVybiBudWxsfHN0cmluZyBFcnJvciByZWFzb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEVycm9yKCkKICAgIHsKICAgICAgICAkZXJyb3JNc2cgPSBudWxsOwogICAgICAgIGlmIChpc3NldCgkdGhpcy0+X2Vycm9yKSkgewogICAgICAgICAgICAkZXJyb3JNc2cgPSBodG1sZW50aXRpZXMoJHRoaXMtPl9lcnJvci0+Z2V0TWVzc2FnZSgpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRlcnJvck1zZzsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIFhNTCB0aGF0IHdpbGwgYmUgc2VudCBhcyBwYXJ0IG9mIHRoZSByZXF1ZXN0CiAgICAgKiBvciB0aGF0IHdhcyByZWNlaXZlZCBhdCB0aGUgU1AKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0WE1MKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9sb2dvdXRSZXF1ZXN0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/LogoutResponse.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHBocC1zYW1sLgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQHBhY2thZ2UgT25lTG9naW4KICogQGF1dGhvciAgU2l4dG8gTWFydGluIDxzaXh0by5tYXJ0aW4uZ2FyY2lhQGdtYWlsLmNvbT4KICogQGxpY2Vuc2UgTUlUIGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICogQGxpbmsgICAgaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwKICovCgpuYW1lc3BhY2UgT25lTG9naW5cU2FtbDI7Cgp1c2UgRE9NRG9jdW1lbnQ7CnVzZSBET01Ob2RlTGlzdDsKdXNlIEV4Y2VwdGlvbjsKCi8qKgogKiBTQU1MIDIgTG9nb3V0IFJlc3BvbnNlCiAqLwpjbGFzcyBMb2dvdXRSZXNwb25zZQp7CiAgICAvKioKICAgICAqIENvbnRhaW5zIHRoZSBJRCBvZiB0aGUgTG9nb3V0IFJlc3BvbnNlCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRpZDsKCiAgICAvKioKICAgICAqIE9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlIHNldHRpbmcgaW5mbwogICAgICoKICAgICAqIEB2YXIgU2V0dGluZ3MKICAgICAqLwogICAgcHJvdGVjdGVkICRfc2V0dGluZ3M7CgogICAgLyoqCiAgICAgKiBUaGUgZGVjb2RlZCwgdW5wcm9jZXNzZWQgWE1MIHJlc3BvbnNlIHByb3ZpZGVkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KICAgICAqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX2xvZ291dFJlc3BvbnNlOwoKICAgIC8qKgogICAgICogQSBET01Eb2N1bWVudCBjbGFzcyBsb2FkZWQgZnJvbSB0aGUgU0FNTCBMb2dvdXRSZXNwb25zZS4KICAgICAqCiAgICAgKiBAdmFyIERPTURvY3VtZW50CiAgICAgKi8KICAgIHB1YmxpYyAkZG9jdW1lbnQ7CgogICAgLyoqCiAgICAgKiBBZnRlciBleGVjdXRlIGEgdmFsaWRhdGlvbiBwcm9jZXNzLCBpZiBpdCBmYWlscywgdGhpcyB2YXIgY29udGFpbnMgdGhlIGNhdXNlCiAgICAgKgogICAgICogQHZhciBFeGNlcHRpb258bnVsbAogICAgICovCiAgICBwcml2YXRlICRfZXJyb3I7CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIGEgTG9nb3V0IFJlc3BvbnNlIG9iamVjdCAoSW5pdGlhbGl6ZSBwYXJhbXMgZnJvbSBzZXR0aW5ncyBhbmQgaWYgcHJvdmlkZWQKICAgICAqIGxvYWQgdGhlIExvZ291dCBSZXNwb25zZS4KICAgICAqCiAgICAgKiBAcGFyYW0gU2V0dGluZ3MgJHNldHRpbmdzIFNldHRpbmdzLgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICAgICAgICAgICAgICRyZXNwb25zZSBBbiBVVUVuY29kZWQgU0FNTCBMb2dvdXQgcmVzcG9uc2UgZnJvbSB0aGUgSWRQLgogICAgICoKICAgICAqIEB0aHJvd3MgRXJyb3IKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChcT25lTG9naW5cU2FtbDJcU2V0dGluZ3MgJHNldHRpbmdzLCAkcmVzcG9uc2UgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT5fc2V0dGluZ3MgPSAkc2V0dGluZ3M7CgogICAgICAgICRiYXNlVVJMID0gJHRoaXMtPl9zZXR0aW5ncy0+Z2V0QmFzZVVSTCgpOwogICAgICAgIGlmICghZW1wdHkoJGJhc2VVUkwpKSB7CiAgICAgICAgICAgIFV0aWxzOjpzZXRCYXNlVVJMKCRiYXNlVVJMKTsKICAgICAgICB9CgogICAgICAgIGlmICgkcmVzcG9uc2UpIHsKICAgICAgICAgICAgJGRlY29kZWQgPSBiYXNlNjRfZGVjb2RlKCRyZXNwb25zZSk7CiAgICAgICAgICAgICRpbmZsYXRlZCA9IEBnemluZmxhdGUoJGRlY29kZWQpOwogICAgICAgICAgICBpZiAoJGluZmxhdGVkICE9IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+X2xvZ291dFJlc3BvbnNlID0gJGluZmxhdGVkOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHRoaXMtPl9sb2dvdXRSZXNwb25zZSA9ICRkZWNvZGVkOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR0aGlzLT5kb2N1bWVudCA9IG5ldyBET01Eb2N1bWVudCgpOwogICAgICAgICAgICAkdGhpcy0+ZG9jdW1lbnQgPSBVdGlsczo6bG9hZFhNTCgkdGhpcy0+ZG9jdW1lbnQsICR0aGlzLT5fbG9nb3V0UmVzcG9uc2UpOwoKICAgICAgICAgICAgaWYgKGZhbHNlID09PSAkdGhpcy0+ZG9jdW1lbnQpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgICAgICAgICAgICAgICAiTG9nb3V0UmVzcG9uc2UgY291bGQgbm90IGJlIHByb2Nlc3NlZCIsCiAgICAgICAgICAgICAgICAgICAgRXJyb3I6OlNBTUxfTE9HT1VUUkVTUE9OU0VfSU5WQUxJRAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCR0aGlzLT5kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50LT5oYXNBdHRyaWJ1dGUoJ0lEJykpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5pZCA9ICR0aGlzLT5kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUoJ0lEJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBJc3N1ZXIgb2YgdGhlIExvZ291dCBSZXNwb25zZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsICRpc3N1ZXIgVGhlIElzc3VlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SXNzdWVyKCkKICAgIHsKICAgICAgICAkaXNzdWVyID0gbnVsbDsKICAgICAgICAkaXNzdWVyTm9kZXMgPSAkdGhpcy0+X3F1ZXJ5KCcvc2FtbHA6TG9nb3V0UmVzcG9uc2Uvc2FtbDpJc3N1ZXInKTsKICAgICAgICBpZiAoJGlzc3Vlck5vZGVzLT5sZW5ndGggPT0gMSkgewogICAgICAgICAgICAkaXNzdWVyID0gJGlzc3Vlck5vZGVzLT5pdGVtKDApLT50ZXh0Q29udGVudDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRpc3N1ZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBTdGF0dXMgb2YgdGhlIExvZ291dCBSZXNwb25zZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIFRoZSBTdGF0dXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0YXR1cygpCiAgICB7CiAgICAgICAgJGVudHJpZXMgPSAkdGhpcy0+X3F1ZXJ5KCcvc2FtbHA6TG9nb3V0UmVzcG9uc2Uvc2FtbHA6U3RhdHVzL3NhbWxwOlN0YXR1c0NvZGUnKTsKICAgICAgICBpZiAoJGVudHJpZXMtPmxlbmd0aCAhPSAxKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICAkc3RhdHVzID0gJGVudHJpZXMtPml0ZW0oMCktPmdldEF0dHJpYnV0ZSgnVmFsdWUnKTsKICAgICAgICByZXR1cm4gJHN0YXR1czsKICAgIH0KCiAgICAvKioKICAgICAqIERldGVybWluZXMgaWYgdGhlIFNBTUwgTG9nb3V0UmVzcG9uc2UgaXMgdmFsaWQKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHJlcXVlc3RJZCAgICAgICAgICAgICAgICAgICAgVGhlIElEIG9mIHRoZSBMb2dvdXRSZXF1ZXN0IHNlbnQgYnkgdGhpcyBTUCB0byB0aGUgSWRQCiAgICAgKiBAcGFyYW0gYm9vbCAgICAgICAgJHJldHJpZXZlUGFyYW1ldGVyc0Zyb21TZXJ2ZXIgVHJ1ZSBpZiB3ZSB3YW50IHRvIHVzZSBwYXJhbWV0ZXJzIGZyb20gJF9TRVJWRVIgdG8gdmFsaWRhdGUgdGhlIHNpZ25hdHVyZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIGlmIHRoZSBTQU1MIExvZ291dFJlc3BvbnNlIGlzIG9yIG5vdCB2YWxpZAogICAgICoKICAgICAqIEB0aHJvd3MgVmFsaWRhdGlvbkVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1ZhbGlkKCRyZXF1ZXN0SWQgPSBudWxsLCAkcmV0cmlldmVQYXJhbWV0ZXJzRnJvbVNlcnZlciA9IGZhbHNlKQogICAgewogICAgICAgICR0aGlzLT5fZXJyb3IgPSBudWxsOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRpZHBEYXRhID0gJHRoaXMtPl9zZXR0aW5ncy0+Z2V0SWRQRGF0YSgpOwogICAgICAgICAgICAkaWRQRW50aXR5SWQgPSAkaWRwRGF0YVsnZW50aXR5SWQnXTsKCiAgICAgICAgICAgIGlmICgkdGhpcy0+X3NldHRpbmdzLT5pc1N0cmljdCgpKSB7CiAgICAgICAgICAgICAgICAkc2VjdXJpdHkgPSAkdGhpcy0+X3NldHRpbmdzLT5nZXRTZWN1cml0eURhdGEoKTsKCiAgICAgICAgICAgICAgICBpZiAoJHNlY3VyaXR5Wyd3YW50WE1MVmFsaWRhdGlvbiddKSB7CiAgICAgICAgICAgICAgICAgICAgJHJlcyA9IFV0aWxzOjp2YWxpZGF0ZVhNTCgkdGhpcy0+ZG9jdW1lbnQsICdzYW1sLXNjaGVtYS1wcm90b2NvbC0yLjAueHNkJywgJHRoaXMtPl9zZXR0aW5ncy0+aXNEZWJ1Z0FjdGl2ZSgpLCAkdGhpcy0+X3NldHRpbmdzLT5nZXRTY2hlbWFzUGF0aCgpKTsKICAgICAgICAgICAgICAgICAgICBpZiAoISRyZXMgaW5zdGFuY2VvZiBET01Eb2N1bWVudCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgU0FNTCBMb2dvdXQgUmVzcG9uc2UuIE5vdCBtYXRjaCB0aGUgc2FtbC1zY2hlbWEtcHJvdG9jb2wtMi4wLnhzZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OklOVkFMSURfWE1MX0ZPUk1BVAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgSW5SZXNwb25zZVRvIG9mIHRoZSBMb2dvdXQgUmVzcG9uc2UgbWF0Y2hzIHRoZSBJRCBvZiB0aGUgTG9nb3V0IFJlcXVlc3QgKHJlcXVlc3RJZCkgaWYgcHJvdmlkZWQKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkcmVxdWVzdElkKSAmJiAkdGhpcy0+ZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudC0+aGFzQXR0cmlidXRlKCdJblJlc3BvbnNlVG8nKSkgewogICAgICAgICAgICAgICAgICAgICRpblJlc3BvbnNlVG8gPSAkdGhpcy0+ZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudC0+Z2V0QXR0cmlidXRlKCdJblJlc3BvbnNlVG8nKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJHJlcXVlc3RJZCAhPSAkaW5SZXNwb25zZVRvKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIEluUmVzcG9uc2VUbyBvZiB0aGUgTG9nb3V0IFJlc3BvbnNlOiAkaW5SZXNwb25zZVRvLCBkb2VzIG5vdCBtYXRjaCB0aGUgSUQgb2YgdGhlIExvZ291dCByZXF1ZXN0IHNlbnQgYnkgdGhlIFNQOiAkcmVxdWVzdElkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6V1JPTkdfSU5SRVNQT05TRVRPCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENoZWNrIGlzc3VlcgogICAgICAgICAgICAgICAgJGlzc3VlciA9ICR0aGlzLT5nZXRJc3N1ZXIoKTsKICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJGlzc3VlcikgJiYgJGlzc3VlciAhPSAkaWRQRW50aXR5SWQpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBpc3N1ZXIgaW4gdGhlIExvZ291dCBSZXNwb25zZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6V1JPTkdfSVNTVUVSCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkY3VycmVudFVSTCA9IFV0aWxzOjpnZXRTZWxmUm91dGVkVVJMTm9RdWVyeSgpOwoKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudC0+aGFzQXR0cmlidXRlKCdEZXN0aW5hdGlvbicpKSB7CiAgICAgICAgICAgICAgICAgICAgJGRlc3RpbmF0aW9uID0gJHRoaXMtPmRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQtPmdldEF0dHJpYnV0ZSgnRGVzdGluYXRpb24nKTsKICAgICAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJGRlc3RpbmF0aW9uKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoISRzZWN1cml0eVsncmVsYXhEZXN0aW5hdGlvblZhbGlkYXRpb24nXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIExvZ291dFJlc3BvbnNlIGhhcyBhbiBlbXB0eSBEZXN0aW5hdGlvbiB2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpFTVBUWV9ERVNUSU5BVElPTgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR1cmxDb21wYXJpc29uTGVuZ3RoID0gJHNlY3VyaXR5WydkZXN0aW5hdGlvblN0cmljdGx5TWF0Y2hlcyddID8gc3RybGVuKCRkZXN0aW5hdGlvbikgOiBzdHJsZW4oJGN1cnJlbnRVUkwpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RybmNtcCgkZGVzdGluYXRpb24sICRjdXJyZW50VVJMLCAkdXJsQ29tcGFyaXNvbkxlbmd0aCkgIT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjdXJyZW50VVJMTm9Sb3V0ZWQgPSBVdGlsczo6Z2V0U2VsZlVSTE5vUXVlcnkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1cmxDb21wYXJpc29uTGVuZ3RoID0gJHNlY3VyaXR5WydkZXN0aW5hdGlvblN0cmljdGx5TWF0Y2hlcyddID8gc3RybGVuKCRkZXN0aW5hdGlvbikgOiBzdHJsZW4oJGN1cnJlbnRVUkxOb1JvdXRlZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RybmNtcCgkZGVzdGluYXRpb24sICRjdXJyZW50VVJMTm9Sb3V0ZWQsICR1cmxDb21wYXJpc29uTGVuZ3RoKSAhPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgTG9nb3V0UmVzcG9uc2Ugd2FzIHJlY2VpdmVkIGF0ICRjdXJyZW50VVJMIGluc3RlYWQgb2YgJGRlc3RpbmF0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpXUk9OR19ERVNUSU5BVElPTgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCRzZWN1cml0eVsnd2FudE1lc3NhZ2VzU2lnbmVkJ10gJiYgIWlzc2V0KCRfR0VUWydTaWduYXR1cmUnXSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAiVGhlIE1lc3NhZ2Ugb2YgdGhlIExvZ291dCBSZXNwb25zZSBpcyBub3Qgc2lnbmVkIGFuZCB0aGUgU1AgcmVxdWlyZXMgaXQiLAogICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6Ok5PX1NJR05FRF9NRVNTQUdFCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGlzc2V0KCRfR0VUWydTaWduYXR1cmUnXSkpIHsKICAgICAgICAgICAgICAgICRzaWduYXR1cmVWYWxpZCA9IFV0aWxzOjp2YWxpZGF0ZUJpbmFyeVNpZ24oIlNBTUxSZXNwb25zZSIsICRfR0VULCAkaWRwRGF0YSwgJHJldHJpZXZlUGFyYW1ldGVyc0Zyb21TZXJ2ZXIpOwogICAgICAgICAgICAgICAgaWYgKCEkc2lnbmF0dXJlVmFsaWQpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAiU2lnbmF0dXJlIHZhbGlkYXRpb24gZmFpbGVkLiBMb2dvdXQgUmVzcG9uc2UgcmVqZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OklOVkFMSURfU0lHTkFUVVJFCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgJHRoaXMtPl9lcnJvciA9ICRlOwogICAgICAgICAgICAkZGVidWcgPSAkdGhpcy0+X3NldHRpbmdzLT5pc0RlYnVnQWN0aXZlKCk7CiAgICAgICAgICAgIGlmICgkZGVidWcpIHsKICAgICAgICAgICAgICAgIGVjaG8gaHRtbGVudGl0aWVzKCR0aGlzLT5fZXJyb3ItPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEV4dHJhY3RzIGEgbm9kZSBmcm9tIHRoZSBET01Eb2N1bWVudCAoTG9nb3V0IFJlc3BvbnNlIE1lc3NhZ2UpCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcXVlcnkgWHBhdGggRXhwcmVzc2lvbgogICAgICoKICAgICAqIEByZXR1cm4gRE9NTm9kZUxpc3QgVGhlIHF1ZXJpZWQgbm9kZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9xdWVyeSgkcXVlcnkpCiAgICB7CiAgICAgICAgcmV0dXJuIFV0aWxzOjpxdWVyeSgkdGhpcy0+ZG9jdW1lbnQsICRxdWVyeSk7CgogICAgfQoKICAgIC8qKgogICAgICogR2VuZXJhdGVzIGEgTG9nb3V0IFJlc3BvbnNlIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpblJlc3BvbnNlVG8gSW5SZXNwb25zZVRvIHZhbHVlIGZvciB0aGUgTG9nb3V0IFJlc3BvbnNlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYnVpbGQoJGluUmVzcG9uc2VUbykKICAgIHsKCiAgICAgICAgJHNwRGF0YSA9ICR0aGlzLT5fc2V0dGluZ3MtPmdldFNQRGF0YSgpOwoKICAgICAgICAkdGhpcy0+aWQgPSBVdGlsczo6Z2VuZXJhdGVVbmlxdWVJRCgpOwogICAgICAgICRpc3N1ZUluc3RhbnQgPSBVdGlsczo6cGFyc2VUaW1lMlNBTUwodGltZSgpKTsKICAgICAgICAkc3BFbnRpdHlJZCA9IGh0bWxzcGVjaWFsY2hhcnMoJHNwRGF0YVsnZW50aXR5SWQnXSwgRU5UX1FVT1RFUyk7CiAgICAgICAgJGRlc3RpbmF0aW9uID0gJHRoaXMtPl9zZXR0aW5ncy0+Z2V0SWRQU0xPUmVzcG9uc2VVcmwoKTsKICAgICAgICAkbG9nb3V0UmVzcG9uc2UgPSA8PDxMT0dPVVRSRVNQT05TRQo8c2FtbHA6TG9nb3V0UmVzcG9uc2UgeG1sbnM6c2FtbHA9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpwcm90b2NvbCIKICAgICAgICAgICAgICAgICAgeG1sbnM6c2FtbD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIKICAgICAgICAgICAgICAgICAgSUQ9InskdGhpcy0+aWR9IgogICAgICAgICAgICAgICAgICBWZXJzaW9uPSIyLjAiCiAgICAgICAgICAgICAgICAgIElzc3VlSW5zdGFudD0ieyRpc3N1ZUluc3RhbnR9IgogICAgICAgICAgICAgICAgICBEZXN0aW5hdGlvbj0ieyRkZXN0aW5hdGlvbn0iCiAgICAgICAgICAgICAgICAgIEluUmVzcG9uc2VUbz0ieyRpblJlc3BvbnNlVG99IgogICAgICAgICAgICAgICAgICA+CiAgICA8c2FtbDpJc3N1ZXI+eyRzcEVudGl0eUlkfTwvc2FtbDpJc3N1ZXI+CiAgICA8c2FtbHA6U3RhdHVzPgogICAgICAgIDxzYW1scDpTdGF0dXNDb2RlIFZhbHVlPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6c3RhdHVzOlN1Y2Nlc3MiIC8+CiAgICA8L3NhbWxwOlN0YXR1cz4KPC9zYW1scDpMb2dvdXRSZXNwb25zZT4KTE9HT1VUUkVTUE9OU0U7CiAgICAgICAgJHRoaXMtPl9sb2dvdXRSZXNwb25zZSA9ICRsb2dvdXRSZXNwb25zZTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBMb2dvdXQgUmVzcG9uc2Ugb2JqZWN0LgogICAgICoKICAgICAqIEBwYXJhbSBib29sfG51bGwgJGRlZmxhdGUgV2hldGhlciBvciBub3Qgd2Ugc2hvdWxkICdnemRlZmxhdGUnIHRoZSByZXNwb25zZSBib2R5IGJlZm9yZSB3ZSByZXR1cm4gaXQuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgTG9nb3V0IFJlc3BvbnNlIGRlZmxhdGVkIGFuZCBiYXNlNjQgZW5jb2RlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzcG9uc2UoJGRlZmxhdGUgPSBudWxsKQogICAgewogICAgICAgICRsb2dvdXRSZXNwb25zZSA9ICR0aGlzLT5fbG9nb3V0UmVzcG9uc2U7CgogICAgICAgIGlmIChpc19udWxsKCRkZWZsYXRlKSkgewogICAgICAgICAgICAkZGVmbGF0ZSA9ICR0aGlzLT5fc2V0dGluZ3MtPnNob3VsZENvbXByZXNzUmVzcG9uc2VzKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGRlZmxhdGUpIHsKICAgICAgICAgICAgJGxvZ291dFJlc3BvbnNlID0gZ3pkZWZsYXRlKCR0aGlzLT5fbG9nb3V0UmVzcG9uc2UpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYmFzZTY0X2VuY29kZSgkbG9nb3V0UmVzcG9uc2UpOwogICAgfQoKICAgIC8qKgogICAgICogQWZ0ZXIgZXhlY3V0ZSBhIHZhbGlkYXRpb24gcHJvY2VzcywgaWYgZmFpbHMgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY2F1c2UuCiAgICAgKgogICAgICogQHJldHVybiBFeGNlcHRpb258bnVsbCBDYXVzZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JFeGNlcHRpb24oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2Vycm9yOwogICAgfQoKICAgIC8qKgogICAgICogQWZ0ZXIgZXhlY3V0ZSBhIHZhbGlkYXRpb24gcHJvY2VzcywgaWYgZmFpbHMgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY2F1c2UKICAgICAqCiAgICAgKiBAcmV0dXJuIG51bGx8c3RyaW5nIEVycm9yIHJlYXNvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3IoKQogICAgewogICAgICAgICRlcnJvck1zZyA9IG51bGw7CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5fZXJyb3IpKSB7CiAgICAgICAgICAgICRlcnJvck1zZyA9IGh0bWxlbnRpdGllcygkdGhpcy0+X2Vycm9yLT5nZXRNZXNzYWdlKCkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGVycm9yTXNnOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmcgdGhlIElEIG9mIHRoZSBSZXNwb25zZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SWQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBYTUwgdGhhdCB3aWxsIGJlIHNlbnQgYXMgcGFydCBvZiB0aGUgcmVzcG9uc2UKICAgICAqIG9yIHRoYXQgd2FzIHJlY2VpdmVkIGF0IHRoZSBTUAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFhNTCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fbG9nb3V0UmVzcG9uc2U7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/Metadata.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHBocC1zYW1sLgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQHBhY2thZ2UgT25lTG9naW4KICogQGF1dGhvciAgU2l4dG8gTWFydGluIDxzaXh0by5tYXJ0aW4uZ2FyY2lhQGdtYWlsLmNvbT4KICogQGxpY2Vuc2UgTUlUIGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICogQGxpbmsgICAgaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwKICovCgpuYW1lc3BhY2UgT25lTG9naW5cU2FtbDI7Cgp1c2UgUm9iUmljaGFyZHNcWE1MU2VjTGlic1xYTUxTZWN1cml0eUtleTsKdXNlIFJvYlJpY2hhcmRzXFhNTFNlY0xpYnNcWE1MU2VjdXJpdHlEU2lnOwoKdXNlIERPTURvY3VtZW50Owp1c2UgRXhjZXB0aW9uOwoKLyoqCiAqIE1ldGFkYXRhIGxpYiBvZiBTQU1MIFBIUCBUb29sa2l0CiAqLwpjbGFzcyBNZXRhZGF0YQp7CiAgICBjb25zdCBUSU1FX1ZBTElEID0gMTcyODAwOyAgLy8gMiBkYXlzCiAgICBjb25zdCBUSU1FX0NBQ0hFRCA9IDYwNDgwMDsgLy8gMSB3ZWVrCgogICAgLyoqCiAgICAgKiBHZW5lcmF0ZXMgdGhlIG1ldGFkYXRhIG9mIHRoZSBTUCBiYXNlZCBvbiB0aGUgc2V0dGluZ3MKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAkc3AgICAgICAgICAgICBUaGUgU1AgZGF0YQogICAgICogQHBhcmFtIGJvb2x8c3RyaW5nICAgJGF1dGhuc2lnbiAgICAgYXV0aG5SZXF1ZXN0c1NpZ25lZCBhdHRyaWJ1dGUKICAgICAqIEBwYXJhbSBib29sfHN0cmluZyAgICR3c2lnbiAgICAgICAgIHdhbnRBc3NlcnRpb25zU2lnbmVkIGF0dHJpYnV0ZQogICAgICogQHBhcmFtIGludHxudWxsICAgICAgJHZhbGlkVW50aWwgICAgTWV0YWRhdGEncyB2YWxpZCB0aW1lCiAgICAgKiBAcGFyYW0gaW50fG51bGwgICAgICAkY2FjaGVEdXJhdGlvbiBEdXJhdGlvbiBvZiB0aGUgY2FjaGUgaW4gc2Vjb25kcwogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgJGNvbnRhY3RzICAgICAgQ29udGFjdHMgaW5mbwogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgJG9yZ2FuaXphdGlvbiAgT3JnYW5pemF0aW9uIGluZ28KICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICRhdHRyaWJ1dGVzCiAgICAgKiBAcGFyYW0gYm9vbCAgICAgICAgICAkaWdub3JlVmFsaWRVbnRpbCBleGNsdWRlIHRoZSB2YWxpZFVudGlsIHRhZyBmcm9tIG1ldGFkYXRhCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgU0FNTCBNZXRhZGF0YSBYTUwKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBidWlsZGVyKCRzcCwgJGF1dGhuc2lnbiA9IGZhbHNlLCAkd3NpZ24gPSBmYWxzZSwgJHZhbGlkVW50aWwgPSBudWxsLCAkY2FjaGVEdXJhdGlvbiA9IG51bGwsICRjb250YWN0cyA9IGFycmF5KCksICRvcmdhbml6YXRpb24gPSBhcnJheSgpLCAkYXR0cmlidXRlcyA9IGFycmF5KCksICRpZ25vcmVWYWxpZFVudGlsID0gZmFsc2UpCiAgICB7CgogICAgICAgIGlmICghaXNzZXQoJHZhbGlkVW50aWwpKSB7CiAgICAgICAgICAgICR2YWxpZFVudGlsID0gIHRpbWUoKSArIHNlbGY6OlRJTUVfVkFMSUQ7CiAgICAgICAgfQogICAgICAgICR2YWxpZFVudGlsVGltZSA9ICBVdGlsczo6cGFyc2VUaW1lMlNBTUwoJHZhbGlkVW50aWwpOwoKICAgICAgICBpZiAoIWlzc2V0KCRjYWNoZUR1cmF0aW9uKSkgewogICAgICAgICAgICAkY2FjaGVEdXJhdGlvbiA9IHNlbGY6OlRJTUVfQ0FDSEVEOwogICAgICAgIH0KCiAgICAgICAgJHNscyA9ICcnOwoKICAgICAgICBpZiAoaXNzZXQoJHNwWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ10pKSB7CiAgICAgICAgICAgICRzbHNVcmwgPSBodG1sc3BlY2lhbGNoYXJzKCRzcFsnc2luZ2xlTG9nb3V0U2VydmljZSddWyd1cmwnXSwgRU5UX1FVT1RFUyk7CiAgICAgICAgICAgICRzbHMgPSA8PDxTTFNfVEVNUExBVEUKICAgICAgICA8bWQ6U2luZ2xlTG9nb3V0U2VydmljZSBCaW5kaW5nPSJ7JHNwWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ11bJ2JpbmRpbmcnXX0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYXRpb249Inskc2xzVXJsfSIgLz4KClNMU19URU1QTEFURTsKICAgICAgICB9CgogICAgICAgIGlmICgkYXV0aG5zaWduKSB7CiAgICAgICAgICAgICRzdHJBdXRobnNpZ24gPSAndHJ1ZSc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHN0ckF1dGhuc2lnbiA9ICdmYWxzZSc7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHdzaWduKSB7CiAgICAgICAgICAgICRzdHJXc2lnbiA9ICd0cnVlJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkc3RyV3NpZ24gPSAnZmFsc2UnOwogICAgICAgIH0KCiAgICAgICAgJHN0ck9yZ2FuaXphdGlvbiA9ICcnOwoKICAgICAgICBpZiAoIWVtcHR5KCRvcmdhbml6YXRpb24pKSB7CiAgICAgICAgICAgICRvcmdhbml6YXRpb25JbmZvTmFtZXMgPSBhcnJheSgpOwogICAgICAgICAgICAkb3JnYW5pemF0aW9uSW5mb0Rpc3BsYXluYW1lcyA9IGFycmF5KCk7CiAgICAgICAgICAgICRvcmdhbml6YXRpb25JbmZvVXJscyA9IGFycmF5KCk7CiAgICAgICAgICAgIGZvcmVhY2ggKCRvcmdhbml6YXRpb24gYXMgJGxhbmcgPT4gJGluZm8pIHsKICAgICAgICAgICAgICAgICRvcmdhbml6YXRpb25JbmZvTmFtZXNbXSA9IDw8PE9SR0FOSVpBVElPTl9OQU1FCiAgICAgICA8bWQ6T3JnYW5pemF0aW9uTmFtZSB4bWw6bGFuZz0ieyRsYW5nfSI+eyRpbmZvWyduYW1lJ119PC9tZDpPcmdhbml6YXRpb25OYW1lPgpPUkdBTklaQVRJT05fTkFNRTsKICAgICAgICAgICAgICAgICRvcmdhbml6YXRpb25JbmZvRGlzcGxheW5hbWVzW10gPSA8PDxPUkdBTklaQVRJT05fRElTUExBWQogICAgICAgPG1kOk9yZ2FuaXphdGlvbkRpc3BsYXlOYW1lIHhtbDpsYW5nPSJ7JGxhbmd9Ij57JGluZm9bJ2Rpc3BsYXluYW1lJ119PC9tZDpPcmdhbml6YXRpb25EaXNwbGF5TmFtZT4KT1JHQU5JWkFUSU9OX0RJU1BMQVk7CiAgICAgICAgICAgICAgICAkb3JnYW5pemF0aW9uSW5mb1VybHNbXSA9IDw8PE9SR0FOSVpBVElPTl9VUkwKICAgICAgIDxtZDpPcmdhbml6YXRpb25VUkwgeG1sOmxhbmc9InskbGFuZ30iPnskaW5mb1sndXJsJ119PC9tZDpPcmdhbml6YXRpb25VUkw+Ck9SR0FOSVpBVElPTl9VUkw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJG9yZ0RhdGEgPSBpbXBsb2RlKCJcbiIsICRvcmdhbml6YXRpb25JbmZvTmFtZXMpLiJcbiIuaW1wbG9kZSgiXG4iLCAkb3JnYW5pemF0aW9uSW5mb0Rpc3BsYXluYW1lcykuIlxuIi5pbXBsb2RlKCJcbiIsICRvcmdhbml6YXRpb25JbmZvVXJscyk7CiAgICAgICAgICAgICRzdHJPcmdhbml6YXRpb24gPSA8PDxPUkdBTklaQVRJT05TVFIKCiAgICA8bWQ6T3JnYW5pemF0aW9uPgp7JG9yZ0RhdGF9CiAgICA8L21kOk9yZ2FuaXphdGlvbj4KT1JHQU5JWkFUSU9OU1RSOwogICAgICAgIH0KCiAgICAgICAgJHN0ckNvbnRhY3RzID0gJyc7CiAgICAgICAgaWYgKCFlbXB0eSgkY29udGFjdHMpKSB7CiAgICAgICAgICAgICRjb250YWN0c0luZm8gPSBhcnJheSgpOwogICAgICAgICAgICBmb3JlYWNoICgkY29udGFjdHMgYXMgJHR5cGUgPT4gJGluZm8pIHsKICAgICAgICAgICAgICAgICRjb250YWN0c0luZm9bXSA9IDw8PENPTlRBQ1QKICAgIDxtZDpDb250YWN0UGVyc29uIGNvbnRhY3RUeXBlPSJ7JHR5cGV9Ij4KICAgICAgICA8bWQ6R2l2ZW5OYW1lPnskaW5mb1snZ2l2ZW5OYW1lJ119PC9tZDpHaXZlbk5hbWU+CiAgICAgICAgPG1kOkVtYWlsQWRkcmVzcz57JGluZm9bJ2VtYWlsQWRkcmVzcyddfTwvbWQ6RW1haWxBZGRyZXNzPgogICAgPC9tZDpDb250YWN0UGVyc29uPgpDT05UQUNUOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRzdHJDb250YWN0cyA9ICJcbiIuaW1wbG9kZSgiXG4iLCAkY29udGFjdHNJbmZvKTsKICAgICAgICB9CgogICAgICAgICRzdHJBdHRyaWJ1dGVDb25zdW1pbmdTZXJ2aWNlID0gJyc7CiAgICAgICAgaWYgKGlzc2V0KCRzcFsnYXR0cmlidXRlQ29uc3VtaW5nU2VydmljZSddKSkgewogICAgICAgICAgICAkYXR0ckNzRGVzYyA9ICcnOwogICAgICAgICAgICBpZiAoaXNzZXQoJHNwWydhdHRyaWJ1dGVDb25zdW1pbmdTZXJ2aWNlJ11bJ3NlcnZpY2VEZXNjcmlwdGlvbiddKSkgewogICAgICAgICAgICAgICAgJGF0dHJDc0Rlc2MgPSBzcHJpbnRmKAogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICA8bWQ6U2VydmljZURlc2NyaXB0aW9uIHhtbDpsYW5nPSJlbiI+JXM8L21kOlNlcnZpY2VEZXNjcmlwdGlvbj4nIC4gUEhQX0VPTCwKICAgICAgICAgICAgICAgICAgICAkc3BbJ2F0dHJpYnV0ZUNvbnN1bWluZ1NlcnZpY2UnXVsnc2VydmljZURlc2NyaXB0aW9uJ10KICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFpc3NldCgkc3BbJ2F0dHJpYnV0ZUNvbnN1bWluZ1NlcnZpY2UnXVsnc2VydmljZU5hbWUnXSkpIHsKICAgICAgICAgICAgICAgICRzcFsnYXR0cmlidXRlQ29uc3VtaW5nU2VydmljZSddWydzZXJ2aWNlTmFtZSddID0gJ1NlcnZpY2UnOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZXF1ZXN0ZWRBdHRyaWJ1dGVEYXRhID0gYXJyYXkoKTsKICAgICAgICAgICAgZm9yZWFjaCAoJHNwWydhdHRyaWJ1dGVDb25zdW1pbmdTZXJ2aWNlJ11bJ3JlcXVlc3RlZEF0dHJpYnV0ZXMnXSBhcyAkYXR0cmlidXRlKSB7CiAgICAgICAgICAgICAgICAkcmVxdWVzdGVkQXR0cmlidXRlU3RyID0gc3ByaW50ZignICAgICAgICAgICAgPG1kOlJlcXVlc3RlZEF0dHJpYnV0ZSBOYW1lPSIlcyInLCAkYXR0cmlidXRlWyduYW1lJ10pOwogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRhdHRyaWJ1dGVbJ25hbWVGb3JtYXQnXSkpIHsKICAgICAgICAgICAgICAgICAgICAkcmVxdWVzdGVkQXR0cmlidXRlU3RyIC49IHNwcmludGYoJyBOYW1lRm9ybWF0PSIlcyInLCAkYXR0cmlidXRlWyduYW1lRm9ybWF0J10pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRhdHRyaWJ1dGVbJ2ZyaWVuZGx5TmFtZSddKSkgewogICAgICAgICAgICAgICAgICAgICRyZXF1ZXN0ZWRBdHRyaWJ1dGVTdHIgLj0gc3ByaW50ZignIEZyaWVuZGx5TmFtZT0iJXMiJywgJGF0dHJpYnV0ZVsnZnJpZW5kbHlOYW1lJ10pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRhdHRyaWJ1dGVbJ2lzUmVxdWlyZWQnXSkpIHsKICAgICAgICAgICAgICAgICAgICAkcmVxdWVzdGVkQXR0cmlidXRlU3RyIC49IHNwcmludGYoJyBpc1JlcXVpcmVkPSIlcyInLCAkYXR0cmlidXRlWydpc1JlcXVpcmVkJ10gPT09IHRydWUgPyAndHJ1ZScgOiAnZmFsc2UnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRyZXFBdHRyQXV4U3RyID0gIiAvPiI7CgogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRhdHRyaWJ1dGVbJ2F0dHJpYnV0ZVZhbHVlJ10pICYmICFlbXB0eSgkYXR0cmlidXRlWydhdHRyaWJ1dGVWYWx1ZSddKSkgewogICAgICAgICAgICAgICAgICAgICRyZXFBdHRyQXV4U3RyID0gJz4nOwogICAgICAgICAgICAgICAgICAgIGlmIChpc19zdHJpbmcoJGF0dHJpYnV0ZVsnYXR0cmlidXRlVmFsdWUnXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGF0dHJpYnV0ZVsnYXR0cmlidXRlVmFsdWUnXSA9IGFycmF5KCRhdHRyaWJ1dGVbJ2F0dHJpYnV0ZVZhbHVlJ10pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkYXR0cmlidXRlWydhdHRyaWJ1dGVWYWx1ZSddIGFzICRhdHRyVmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHJlcUF0dHJBdXhTdHIgLj08PDxBVFRSSUJVVEVWQUxVRQoKICAgICAgICAgICAgICAgIDxzYW1sOkF0dHJpYnV0ZVZhbHVlIHhtbG5zOnNhbWw9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphc3NlcnRpb24iPnskYXR0clZhbHVlfTwvc2FtbDpBdHRyaWJ1dGVWYWx1ZT4KQVRUUklCVVRFVkFMVUU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRyZXFBdHRyQXV4U3RyIC49ICJcbiAgICAgICAgICAgIDwvbWQ6UmVxdWVzdGVkQXR0cmlidXRlPiI7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHJlcXVlc3RlZEF0dHJpYnV0ZURhdGFbXSA9ICRyZXF1ZXN0ZWRBdHRyaWJ1dGVTdHIgLiAkcmVxQXR0ckF1eFN0cjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHJlcXVlc3RlZEF0dHJpYnV0ZVN0ciA9IGltcGxvZGUoUEhQX0VPTCwgJHJlcXVlc3RlZEF0dHJpYnV0ZURhdGEpOwogICAgICAgICAgICAkc3RyQXR0cmlidXRlQ29uc3VtaW5nU2VydmljZSA9IDw8PE1FVEFEQVRBX1RFTVBMQVRFCgogICAgICAgIDxtZDpBdHRyaWJ1dGVDb25zdW1pbmdTZXJ2aWNlIGluZGV4PSIxIj4KICAgICAgICAgICAgPG1kOlNlcnZpY2VOYW1lIHhtbDpsYW5nPSJlbiI+eyRzcFsnYXR0cmlidXRlQ29uc3VtaW5nU2VydmljZSddWydzZXJ2aWNlTmFtZSddfTwvbWQ6U2VydmljZU5hbWU+CnskYXR0ckNzRGVzY317JHJlcXVlc3RlZEF0dHJpYnV0ZVN0cn0KICAgICAgICA8L21kOkF0dHJpYnV0ZUNvbnN1bWluZ1NlcnZpY2U+Ck1FVEFEQVRBX1RFTVBMQVRFOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRpZ25vcmVWYWxpZFVudGlsKSB7CiAgICAgICAgICAgICR0aW1lU3RyID0gPDw8VElNRV9URU1QTEFURQpjYWNoZUR1cmF0aW9uPSJQVHskY2FjaGVEdXJhdGlvbn1TIgpUSU1FX1RFTVBMQVRFOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aW1lU3RyID0gPDw8VElNRV9URU1QTEFURQp2YWxpZFVudGlsPSJ7JHZhbGlkVW50aWxUaW1lfSIKICAgICAgICAgICAgICAgICAgICAgY2FjaGVEdXJhdGlvbj0iUFR7JGNhY2hlRHVyYXRpb259UyIKVElNRV9URU1QTEFURTsKICAgICAgICB9CgogICAgICAgICRzcEVudGl0eUlkID0gaHRtbHNwZWNpYWxjaGFycygkc3BbJ2VudGl0eUlkJ10sIEVOVF9RVU9URVMpOwogICAgICAgICRhY3NVcmwgPSBodG1sc3BlY2lhbGNoYXJzKCRzcFsnYXNzZXJ0aW9uQ29uc3VtZXJTZXJ2aWNlJ11bJ3VybCddLCBFTlRfUVVPVEVTKTsKICAgICAgICAkbWV0YWRhdGEgPSA8PDxNRVRBREFUQV9URU1QTEFURQo8P3htbCB2ZXJzaW9uPSIxLjAiPz4KPG1kOkVudGl0eURlc2NyaXB0b3IgeG1sbnM6bWQ9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDptZXRhZGF0YSIKICAgICAgICAgICAgICAgICAgICAgeyR0aW1lU3RyfQogICAgICAgICAgICAgICAgICAgICBlbnRpdHlJRD0ieyRzcEVudGl0eUlkfSI+CiAgICA8bWQ6U1BTU09EZXNjcmlwdG9yIEF1dGhuUmVxdWVzdHNTaWduZWQ9Inskc3RyQXV0aG5zaWdufSIgV2FudEFzc2VydGlvbnNTaWduZWQ9Inskc3RyV3NpZ259IiBwcm90b2NvbFN1cHBvcnRFbnVtZXJhdGlvbj0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnByb3RvY29sIj4KeyRzbHN9ICAgICAgICA8bWQ6TmFtZUlERm9ybWF0Pnskc3BbJ05hbWVJREZvcm1hdCddfTwvbWQ6TmFtZUlERm9ybWF0PgogICAgICAgIDxtZDpBc3NlcnRpb25Db25zdW1lclNlcnZpY2UgQmluZGluZz0ieyRzcFsnYXNzZXJ0aW9uQ29uc3VtZXJTZXJ2aWNlJ11bJ2JpbmRpbmcnXX0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhdGlvbj0ieyRhY3NVcmx9IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg9IjEiIC8+eyRzdHJBdHRyaWJ1dGVDb25zdW1pbmdTZXJ2aWNlfQogICAgPC9tZDpTUFNTT0Rlc2NyaXB0b3I+eyRzdHJPcmdhbml6YXRpb259eyRzdHJDb250YWN0c30KPC9tZDpFbnRpdHlEZXNjcmlwdG9yPgpNRVRBREFUQV9URU1QTEFURTsKICAgICAgICByZXR1cm4gJG1ldGFkYXRhOwogICAgfQoKICAgIC8qKgogICAgICogU2lnbnMgdGhlIG1ldGFkYXRhIHdpdGggdGhlIGtleS9jZXJ0IHByb3ZpZGVkCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWV0YWRhdGEgICAgICAgIFNBTUwgTWV0YWRhdGEgWE1MCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgICAgICAgICAgICAgeDUwOSBrZXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNlcnQgICAgICAgICAgICB4NTA5IGNlcnQKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNpZ25BbGdvcml0aG0gICBTaWduYXR1cmUgYWxnb3JpdGhtIG1ldGhvZAogICAgICogQHBhcmFtIHN0cmluZyAkZGlnZXN0QWxnb3JpdGhtIERpZ2VzdCBhbGdvcml0aG0gbWV0aG9kCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgU2lnbmVkIE1ldGFkYXRhCiAgICAgKgogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzaWduTWV0YWRhdGEoJG1ldGFkYXRhLCAka2V5LCAkY2VydCwgJHNpZ25BbGdvcml0aG0gPSBYTUxTZWN1cml0eUtleTo6UlNBX1NIQTI1NiwgJGRpZ2VzdEFsZ29yaXRobSA9IFhNTFNlY3VyaXR5RFNpZzo6U0hBMjU2KQogICAgewogICAgICAgIHJldHVybiBVdGlsczo6YWRkU2lnbigkbWV0YWRhdGEsICRrZXksICRjZXJ0LCAkc2lnbkFsZ29yaXRobSwgJGRpZ2VzdEFsZ29yaXRobSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGRzIHRoZSB4NTA5IGRlc2NyaXB0b3JzIChzaWduL2VuY3J5cHRpb24pIHRvIHRoZSBtZXRhZGF0YQogICAgICogVGhlIHNhbWUgY2VydCB3aWxsIGJlIHVzZWQgZm9yIHNpZ24vZW5jcnlwdAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1ldGFkYXRhICAgICAgIFNBTUwgTWV0YWRhdGEgWE1MCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjZXJ0ICAgICAgICAgICB4NTA5IGNlcnQKICAgICAqIEBwYXJhbSBib29sICAgJHdhbnRzRW5jcnlwdGVkIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgS2V5RGVzY3JpcHRvciBmb3IgZW5jcnlwdGlvbgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIE1ldGFkYXRhIHdpdGggS2V5RGVzY3JpcHRvcnMKICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFkZFg1MDlLZXlEZXNjcmlwdG9ycygkbWV0YWRhdGEsICRjZXJ0LCAkd2FudHNFbmNyeXB0ZWQgPSB0cnVlKQogICAgewogICAgICAgICR4bWwgPSBuZXcgRE9NRG9jdW1lbnQoKTsKICAgICAgICAkeG1sLT5wcmVzZXJ2ZVdoaXRlU3BhY2UgPSBmYWxzZTsKICAgICAgICAkeG1sLT5mb3JtYXRPdXRwdXQgPSB0cnVlOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgICR4bWwgPSBVdGlsczo6bG9hZFhNTCgkeG1sLCAkbWV0YWRhdGEpOwogICAgICAgICAgICBpZiAoISR4bWwpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yIHBhcnNpbmcgbWV0YWRhdGEnKTsKICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvciBwYXJzaW5nIG1ldGFkYXRhLiAnLiRlLT5nZXRNZXNzYWdlKCkpOwogICAgICAgIH0KCiAgICAgICAgJGZvcm1hdGVkQ2VydCA9IFV0aWxzOjpmb3JtYXRDZXJ0KCRjZXJ0LCBmYWxzZSk7CiAgICAgICAgJHg1MDlDZXJ0aWZpY2F0ZSA9ICR4bWwtPmNyZWF0ZUVsZW1lbnROUyhDb25zdGFudHM6Ok5TX0RTLCAnWDUwOUNlcnRpZmljYXRlJywgJGZvcm1hdGVkQ2VydCk7CgogICAgICAgICRrZXlEYXRhID0gJHhtbC0+Y3JlYXRlRWxlbWVudE5TKENvbnN0YW50czo6TlNfRFMsICdkczpYNTA5RGF0YScpOwogICAgICAgICRrZXlEYXRhLT5hcHBlbmRDaGlsZCgkeDUwOUNlcnRpZmljYXRlKTsKCiAgICAgICAgJGtleUluZm8gPSAkeG1sLT5jcmVhdGVFbGVtZW50TlMoQ29uc3RhbnRzOjpOU19EUywgJ2RzOktleUluZm8nKTsKICAgICAgICAka2V5SW5mby0+YXBwZW5kQ2hpbGQoJGtleURhdGEpOwoKICAgICAgICAka2V5RGVzY3JpcHRvciA9ICR4bWwtPmNyZWF0ZUVsZW1lbnROUyhDb25zdGFudHM6Ok5TX01ELCAibWQ6S2V5RGVzY3JpcHRvciIpOwoKICAgICAgICAkU1BTU09EZXNjcmlwdG9yID0gJHhtbC0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ1NQU1NPRGVzY3JpcHRvcicpLT5pdGVtKDApOwogICAgICAgICRTUFNTT0Rlc2NyaXB0b3ItPmluc2VydEJlZm9yZSgka2V5RGVzY3JpcHRvci0+Y2xvbmVOb2RlKCksICRTUFNTT0Rlc2NyaXB0b3ItPmZpcnN0Q2hpbGQpOwogICAgICAgIGlmICgkd2FudHNFbmNyeXB0ZWQgPT09IHRydWUpIHsKICAgICAgICAgICAgJFNQU1NPRGVzY3JpcHRvci0+aW5zZXJ0QmVmb3JlKCRrZXlEZXNjcmlwdG9yLT5jbG9uZU5vZGUoKSwgJFNQU1NPRGVzY3JpcHRvci0+Zmlyc3RDaGlsZCk7CiAgICAgICAgfQoKICAgICAgICAkc2lnbmluZyA9ICR4bWwtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCdLZXlEZXNjcmlwdG9yJyktPml0ZW0oMCk7CiAgICAgICAgJHNpZ25pbmctPnNldEF0dHJpYnV0ZSgndXNlJywgJ3NpZ25pbmcnKTsKICAgICAgICAkc2lnbmluZy0+YXBwZW5kQ2hpbGQoJGtleUluZm8pOwoKICAgICAgICBpZiAoJHdhbnRzRW5jcnlwdGVkID09PSB0cnVlKSB7CiAgICAgICAgICAgICRlbmNyeXB0aW9uID0gJHhtbC0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ0tleURlc2NyaXB0b3InKS0+aXRlbSgxKTsKICAgICAgICAgICAgJGVuY3J5cHRpb24tPnNldEF0dHJpYnV0ZSgndXNlJywgJ2VuY3J5cHRpb24nKTsKCiAgICAgICAgICAgICRlbmNyeXB0aW9uLT5hcHBlbmRDaGlsZCgka2V5SW5mby0+Y2xvbmVOb2RlKHRydWUpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkeG1sLT5zYXZlWE1MKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/Response.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHBocC1zYW1sLgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQHBhY2thZ2UgT25lTG9naW4KICogQGF1dGhvciAgU2l4dG8gTWFydGluIDxzaXh0by5tYXJ0aW4uZ2FyY2lhQGdtYWlsLmNvbT4KICogQGxpY2Vuc2UgTUlUIGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICogQGxpbmsgICAgaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwKICovCgpuYW1lc3BhY2UgT25lTG9naW5cU2FtbDI7Cgp1c2UgUm9iUmljaGFyZHNcWE1MU2VjTGlic1xYTUxTZWN1cml0eUtleTsKdXNlIFJvYlJpY2hhcmRzXFhNTFNlY0xpYnNcWE1MU2VjRW5jOwoKdXNlIERPTURvY3VtZW50Owp1c2UgRE9NTm9kZUxpc3Q7CnVzZSBET01YUGF0aDsKdXNlIEV4Y2VwdGlvbjsKCi8qKgogKiBTQU1MIDIgQXV0aGVudGljYXRpb24gUmVzcG9uc2UKICovCmNsYXNzIFJlc3BvbnNlCnsKICAgIC8qKgogICAgICogU2V0dGluZ3MKICAgICAqCiAgICAgKiBAdmFyIFNldHRpbmdzCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX3NldHRpbmdzOwoKICAgIC8qKgogICAgICogVGhlIGRlY29kZWQsIHVucHJvY2Vzc2VkIFhNTCByZXNwb25zZSBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3IuCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRyZXNwb25zZTsKCiAgICAvKioKICAgICAqIEEgRE9NRG9jdW1lbnQgY2xhc3MgbG9hZGVkIGZyb20gdGhlIFNBTUwgUmVzcG9uc2UuCiAgICAgKgogICAgICogQHZhciBET01Eb2N1bWVudAogICAgICovCiAgICBwdWJsaWMgJGRvY3VtZW50OwoKICAgIC8qKgogICAgICogQSBET01Eb2N1bWVudCBjbGFzcyBsb2FkZWQgZnJvbSB0aGUgU0FNTCBSZXNwb25zZSAoRGVjcnlwdGVkKS4KICAgICAqCiAgICAgKiBAdmFyIERPTURvY3VtZW50CiAgICAgKi8KICAgIHB1YmxpYyAkZGVjcnlwdGVkRG9jdW1lbnQ7CgogICAgLyoqCiAgICAgKiBUaGUgcmVzcG9uc2UgY29udGFpbnMgYW4gZW5jcnlwdGVkIGFzc2VydGlvbi4KICAgICAqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHVibGljICRlbmNyeXB0ZWQgPSBmYWxzZTsKCiAgICAvKioKICAgICAqIFRoZSByZXNwb25zZSBjb250YWlucyBhbiBlbmNyeXB0ZWQgbmFtZUlkIGluIHRoZSBhc3NlcnRpb24uCiAgICAgKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHB1YmxpYyAkZW5jcnlwdGVkTmFtZUlkID0gZmFsc2U7CgogICAgLyoqCiAgICAgKiBBZnRlciB2YWxpZGF0aW9uLCBpZiBpdCBmYWlsIHRoaXMgdmFyIGhhcyB0aGUgY2F1c2Ugb2YgdGhlIHByb2JsZW0KICAgICAqCiAgICAgKiBAdmFyIEV4Y2VwdGlvbnxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJF9lcnJvcjsKCiAgICAvKioKICAgICAqIE5vdE9uT3JBZnRlciB2YWx1ZSBvZiBhIHZhbGlkIFN1YmplY3RDb25maXJtYXRpb25EYXRhIG5vZGUKICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcml2YXRlICRfdmFsaWRTQ0ROb3RPbk9yQWZ0ZXI7CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIHRoZSBTQU1MIFJlc3BvbnNlIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gU2V0dGluZ3MgJHNldHRpbmdzIFNldHRpbmdzLgogICAgICogQHBhcmFtIHN0cmluZyAgICRyZXNwb25zZSBBIFVVRW5jb2RlZCBTQU1MIHJlc3BvbnNlIGZyb20gdGhlIElkUC4KICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICogQHRocm93cyBWYWxpZGF0aW9uRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFxPbmVMb2dpblxTYW1sMlxTZXR0aW5ncyAkc2V0dGluZ3MsICRyZXNwb25zZSkKICAgIHsKICAgICAgICAkdGhpcy0+X3NldHRpbmdzID0gJHNldHRpbmdzOwoKICAgICAgICAkYmFzZVVSTCA9ICR0aGlzLT5fc2V0dGluZ3MtPmdldEJhc2VVUkwoKTsKICAgICAgICBpZiAoIWVtcHR5KCRiYXNlVVJMKSkgewogICAgICAgICAgICBVdGlsczo6c2V0QmFzZVVSTCgkYmFzZVVSTCk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+cmVzcG9uc2UgPSBiYXNlNjRfZGVjb2RlKCRyZXNwb25zZSk7CgogICAgICAgICR0aGlzLT5kb2N1bWVudCA9IG5ldyBET01Eb2N1bWVudCgpOwogICAgICAgICR0aGlzLT5kb2N1bWVudCA9IFV0aWxzOjpsb2FkWE1MKCR0aGlzLT5kb2N1bWVudCwgJHRoaXMtPnJlc3BvbnNlKTsKICAgICAgICBpZiAoISR0aGlzLT5kb2N1bWVudCkgewogICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgIlNBTUwgUmVzcG9uc2UgY291bGQgbm90IGJlIHByb2Nlc3NlZCIsCiAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OklOVkFMSURfWE1MX0ZPUk1BVAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgLy8gUXVpY2sgY2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiBFbmNyeXB0ZWRBc3NlcnRpb24KICAgICAgICAkZW5jcnlwdGVkQXNzZXJ0aW9uTm9kZXMgPSAkdGhpcy0+ZG9jdW1lbnQtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCdFbmNyeXB0ZWRBc3NlcnRpb24nKTsKICAgICAgICBpZiAoJGVuY3J5cHRlZEFzc2VydGlvbk5vZGVzLT5sZW5ndGggIT09IDApIHsKICAgICAgICAgICAgJHRoaXMtPmRlY3J5cHRlZERvY3VtZW50ID0gY2xvbmUgJHRoaXMtPmRvY3VtZW50OwogICAgICAgICAgICAkdGhpcy0+ZW5jcnlwdGVkID0gdHJ1ZTsKICAgICAgICAgICAgJHRoaXMtPmRlY3J5cHRlZERvY3VtZW50ID0gJHRoaXMtPmRlY3J5cHRBc3NlcnRpb24oJHRoaXMtPmRlY3J5cHRlZERvY3VtZW50KTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBTQU1MIFJlc3BvbnNlIGlzIHZhbGlkIHVzaW5nIHRoZSBjZXJ0aWZpY2F0ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHJlcXVlc3RJZCBUaGUgSUQgb2YgdGhlIEF1dGhOUmVxdWVzdCBzZW50IGJ5IHRoaXMgU1AgdG8gdGhlIElkUAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBWYWxpZGF0ZSB0aGUgZG9jdW1lbnQKICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICogQHRocm93cyBWYWxpZGF0aW9uRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzVmFsaWQoJHJlcXVlc3RJZCA9IG51bGwpCiAgICB7CiAgICAgICAgJHRoaXMtPl9lcnJvciA9IG51bGw7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgLy8gQ2hlY2sgU0FNTCB2ZXJzaW9uCiAgICAgICAgICAgIGlmICgkdGhpcy0+ZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudC0+Z2V0QXR0cmlidXRlKCdWZXJzaW9uJykgIT0gJzIuMCcpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgIlVuc3VwcG9ydGVkIFNBTUwgdmVyc2lvbiIsCiAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpVTlNVUFBPUlRFRF9TQU1MX1ZFUlNJT04KICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghJHRoaXMtPmRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQtPmhhc0F0dHJpYnV0ZSgnSUQnKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAiTWlzc2luZyBJRCBhdHRyaWJ1dGUgb24gU0FNTCBSZXNwb25zZSIsCiAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpNSVNTSU5HX0lECiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdGhpcy0+Y2hlY2tTdGF0dXMoKTsKCiAgICAgICAgICAgICRzaW5nbGVBc3NlcnRpb24gPSAkdGhpcy0+dmFsaWRhdGVOdW1Bc3NlcnRpb25zKCk7CiAgICAgICAgICAgIGlmICghJHNpbmdsZUFzc2VydGlvbikgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAiU0FNTCBSZXNwb25zZSBtdXN0IGNvbnRhaW4gMSBhc3NlcnRpb24iLAogICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6V1JPTkdfTlVNQkVSX09GX0FTU0VSVElPTlMKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRpZHBEYXRhID0gJHRoaXMtPl9zZXR0aW5ncy0+Z2V0SWRQRGF0YSgpOwogICAgICAgICAgICAkaWRQRW50aXR5SWQgPSAkaWRwRGF0YVsnZW50aXR5SWQnXTsKICAgICAgICAgICAgJHNwRGF0YSA9ICR0aGlzLT5fc2V0dGluZ3MtPmdldFNQRGF0YSgpOwogICAgICAgICAgICAkc3BFbnRpdHlJZCA9ICRzcERhdGFbJ2VudGl0eUlkJ107CgogICAgICAgICAgICAkc2lnbmVkRWxlbWVudHMgPSAkdGhpcy0+cHJvY2Vzc1NpZ25lZEVsZW1lbnRzKCk7CgogICAgICAgICAgICAkcmVzcG9uc2VUYWcgPSAneycuQ29uc3RhbnRzOjpOU19TQU1MUC4nfVJlc3BvbnNlJzsKICAgICAgICAgICAgJGFzc2VydGlvblRhZyA9ICd7Jy5Db25zdGFudHM6Ok5TX1NBTUwuJ31Bc3NlcnRpb24nOwoKICAgICAgICAgICAgJGhhc1NpZ25lZFJlc3BvbnNlID0gaW5fYXJyYXkoJHJlc3BvbnNlVGFnLCAkc2lnbmVkRWxlbWVudHMpOwogICAgICAgICAgICAkaGFzU2lnbmVkQXNzZXJ0aW9uID0gaW5fYXJyYXkoJGFzc2VydGlvblRhZywgJHNpZ25lZEVsZW1lbnRzKTsKCiAgICAgICAgICAgIGlmICgkdGhpcy0+X3NldHRpbmdzLT5pc1N0cmljdCgpKSB7CiAgICAgICAgICAgICAgICAkc2VjdXJpdHkgPSAkdGhpcy0+X3NldHRpbmdzLT5nZXRTZWN1cml0eURhdGEoKTsKCiAgICAgICAgICAgICAgICBpZiAoJHNlY3VyaXR5Wyd3YW50WE1MVmFsaWRhdGlvbiddKSB7CiAgICAgICAgICAgICAgICAgICAgJGVycm9yWG1sTXNnID0gIkludmFsaWQgU0FNTCBSZXNwb25zZS4gTm90IG1hdGNoIHRoZSBzYW1sLXNjaGVtYS1wcm90b2NvbC0yLjAueHNkIjsKICAgICAgICAgICAgICAgICAgICAkcmVzID0gVXRpbHM6OnZhbGlkYXRlWE1MKCR0aGlzLT5kb2N1bWVudCwgJ3NhbWwtc2NoZW1hLXByb3RvY29sLTIuMC54c2QnLCAkdGhpcy0+X3NldHRpbmdzLT5pc0RlYnVnQWN0aXZlKCksICR0aGlzLT5fc2V0dGluZ3MtPmdldFNjaGVtYXNQYXRoKCkpOwogICAgICAgICAgICAgICAgICAgIGlmICghJHJlcyBpbnN0YW5jZW9mIERPTURvY3VtZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3JYbWxNc2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OklOVkFMSURfWE1MX0ZPUk1BVAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy8gSWYgZW5jcnlwdGVkLCBjaGVjayBhbHNvIHRoZSBkZWNyeXB0ZWQgZG9jdW1lbnQKICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmVuY3J5cHRlZCkgewogICAgICAgICAgICAgICAgICAgICAgICAkcmVzID0gVXRpbHM6OnZhbGlkYXRlWE1MKCR0aGlzLT5kZWNyeXB0ZWREb2N1bWVudCwgJ3NhbWwtc2NoZW1hLXByb3RvY29sLTIuMC54c2QnLCAkdGhpcy0+X3NldHRpbmdzLT5pc0RlYnVnQWN0aXZlKCksICR0aGlzLT5fc2V0dGluZ3MtPmdldFNjaGVtYXNQYXRoKCkpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoISRyZXMgaW5zdGFuY2VvZiBET01Eb2N1bWVudCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3JYbWxNc2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpJTlZBTElEX1hNTF9GT1JNQVQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRjdXJyZW50VVJMID0gVXRpbHM6OmdldFNlbGZSb3V0ZWRVUkxOb1F1ZXJ5KCk7CgogICAgICAgICAgICAgICAgJHJlc3BvbnNlSW5SZXNwb25zZVRvID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudC0+aGFzQXR0cmlidXRlKCdJblJlc3BvbnNlVG8nKSkgewogICAgICAgICAgICAgICAgICAgICRyZXNwb25zZUluUmVzcG9uc2VUbyA9ICR0aGlzLT5kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUoJ0luUmVzcG9uc2VUbycpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghaXNzZXQoJHJlcXVlc3RJZCkgJiYgaXNzZXQoJHJlc3BvbnNlSW5SZXNwb25zZVRvKSAmJiAkc2VjdXJpdHlbJ3JlamVjdFVuc29saWNpdGVkUmVzcG9uc2VzV2l0aEluUmVzcG9uc2VUbyddKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBSZXNwb25zZSBoYXMgYW4gSW5SZXNwb25zZVRvIGF0dHJpYnV0ZTogIiAuICRyZXNwb25zZUluUmVzcG9uc2VUbyAuICIgd2hpbGUgbm8gSW5SZXNwb25zZVRvIHdhcyBleHBlY3RlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6V1JPTkdfSU5SRVNQT05TRVRPCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgSW5SZXNwb25zZVRvIG9mIHRoZSBSZXNwb25zZSBtYXRjaHMgdGhlIElEIG9mIHRoZSBBdXRoTlJlcXVlc3QgKHJlcXVlc3RJZCkgaWYgcHJvdmlkZWQKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkcmVxdWVzdElkKSAmJiAkcmVxdWVzdElkICE9ICRyZXNwb25zZUluUmVzcG9uc2VUbykgewogICAgICAgICAgICAgICAgICAgIGlmICgkcmVzcG9uc2VJblJlc3BvbnNlVG8gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vIEluUmVzcG9uc2VUbyBhdCB0aGUgUmVzcG9uc2UsIGJ1dCBpdCB3YXMgcHJvdmlkZWQgdGhlIHJlcXVlc3RJZCByZWxhdGVkIHRvIHRoZSBBdXRoTlJlcXVlc3Qgc2VudCBieSB0aGUgU1A6ICRyZXF1ZXN0SWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpXUk9OR19JTlJFU1BPTlNFVE8KICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBJblJlc3BvbnNlVG8gb2YgdGhlIFJlc3BvbnNlOiAkcmVzcG9uc2VJblJlc3BvbnNlVG8sIGRvZXMgbm90IG1hdGNoIHRoZSBJRCBvZiB0aGUgQXV0aE5SZXF1ZXN0IHNlbnQgYnkgdGhlIFNQOiAkcmVxdWVzdElkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6V1JPTkdfSU5SRVNQT05TRVRPCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghJHRoaXMtPmVuY3J5cHRlZCAmJiAkc2VjdXJpdHlbJ3dhbnRBc3NlcnRpb25zRW5jcnlwdGVkJ10pIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAiVGhlIGFzc2VydGlvbiBvZiB0aGUgUmVzcG9uc2UgaXMgbm90IGVuY3J5cHRlZCBhbmQgdGhlIFNQIHJlcXVpcmVzIGl0IiwKICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpOT19FTkNSWVBURURfQVNTRVJUSU9OCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkdGhpcy0+ZW5jcnlwdGVkTmFtZUlkID0gJHRoaXMtPmVuY3J5cHRlZE5hbWVJZCB8fCAkdGhpcy0+X3F1ZXJ5QXNzZXJ0aW9uKCcvc2FtbDpTdWJqZWN0L3NhbWw6RW5jcnlwdGVkSUQveGVuYzpFbmNyeXB0ZWREYXRhJyktPmxlbmd0aCA+IDA7CiAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT5lbmNyeXB0ZWROYW1lSWQgJiYgJHNlY3VyaXR5Wyd3YW50TmFtZUlkRW5jcnlwdGVkJ10pIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAiVGhlIE5hbWVJRCBvZiB0aGUgUmVzcG9uc2UgaXMgbm90IGVuY3J5cHRlZCBhbmQgdGhlIFNQIHJlcXVpcmVzIGl0IiwKICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpOT19FTkNSWVBURURfTkFNRUlECiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBWYWxpZGF0ZSBDb25kaXRpb25zIGVsZW1lbnQgZXhpc3RzCiAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT5jaGVja09uZUNvbmRpdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBBc3NlcnRpb24gbXVzdCBpbmNsdWRlIGEgQ29uZGl0aW9ucyBlbGVtZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpNSVNTSU5HX0NPTkRJVElPTlMKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFZhbGlkYXRlIEFzc2VydGlvbiB0aW1lc3RhbXBzCiAgICAgICAgICAgICAgICAkdGhpcy0+dmFsaWRhdGVUaW1lc3RhbXBzKCk7CgogICAgICAgICAgICAgICAgLy8gVmFsaWRhdGUgQXV0aG5TdGF0ZW1lbnQgZWxlbWVudCBleGlzdHMgYW5kIGlzIHVuaXF1ZQogICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+Y2hlY2tPbmVBdXRoblN0YXRlbWVudCgpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBBc3NlcnRpb24gbXVzdCBpbmNsdWRlIGFuIEF1dGhuU3RhdGVtZW50IGVsZW1lbnQiLAogICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OldST05HX05VTUJFUl9PRl9BVVRIU1RBVEVNRU5UUwogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gRW5jcnlwdGVkQXR0cmlidXRlcyBhcmUgbm90IHN1cHBvcnRlZAogICAgICAgICAgICAgICAgJGVuY3J5cHRlZEF0dHJpYnV0ZU5vZGVzID0gJHRoaXMtPl9xdWVyeUFzc2VydGlvbignL3NhbWw6QXR0cmlidXRlU3RhdGVtZW50L3NhbWw6RW5jcnlwdGVkQXR0cmlidXRlJyk7CiAgICAgICAgICAgICAgICBpZiAoJGVuY3J5cHRlZEF0dHJpYnV0ZU5vZGVzLT5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgIlRoZXJlIGlzIGFuIEVuY3J5cHRlZEF0dHJpYnV0ZSBpbiB0aGUgUmVzcG9uc2UgYW5kIHRoaXMgU1Agbm90IHN1cHBvcnQgdGhlbSIsCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6RU5DUllQVEVEX0FUVFJJQlVURVMKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENoZWNrIGRlc3RpbmF0aW9uCiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQtPmhhc0F0dHJpYnV0ZSgnRGVzdGluYXRpb24nKSkgewogICAgICAgICAgICAgICAgICAgICRkZXN0aW5hdGlvbiA9ICR0aGlzLT5kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUoJ0Rlc3RpbmF0aW9uJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRkZXN0aW5hdGlvbikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGRlc3RpbmF0aW9uID0gdHJpbSgkZGVzdGluYXRpb24pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJGRlc3RpbmF0aW9uKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoISRzZWN1cml0eVsncmVsYXhEZXN0aW5hdGlvblZhbGlkYXRpb24nXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHJlc3BvbnNlIGhhcyBhbiBlbXB0eSBEZXN0aW5hdGlvbiB2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpFTVBUWV9ERVNUSU5BVElPTgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR1cmxDb21wYXJpc29uTGVuZ3RoID0gJHNlY3VyaXR5WydkZXN0aW5hdGlvblN0cmljdGx5TWF0Y2hlcyddID8gc3RybGVuKCRkZXN0aW5hdGlvbikgOiBzdHJsZW4oJGN1cnJlbnRVUkwpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RybmNtcCgkZGVzdGluYXRpb24sICRjdXJyZW50VVJMLCAkdXJsQ29tcGFyaXNvbkxlbmd0aCkgIT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjdXJyZW50VVJMTm9Sb3V0ZWQgPSBVdGlsczo6Z2V0U2VsZlVSTE5vUXVlcnkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1cmxDb21wYXJpc29uTGVuZ3RoID0gJHNlY3VyaXR5WydkZXN0aW5hdGlvblN0cmljdGx5TWF0Y2hlcyddID8gc3RybGVuKCRkZXN0aW5hdGlvbikgOiBzdHJsZW4oJGN1cnJlbnRVUkxOb1JvdXRlZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RybmNtcCgkZGVzdGluYXRpb24sICRjdXJyZW50VVJMTm9Sb3V0ZWQsICR1cmxDb21wYXJpc29uTGVuZ3RoKSAhPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkIGF0ICRjdXJyZW50VVJMIGluc3RlYWQgb2YgJGRlc3RpbmF0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpXUk9OR19ERVNUSU5BVElPTgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgYXVkaWVuY2UKICAgICAgICAgICAgICAgICR2YWxpZEF1ZGllbmNlcyA9ICR0aGlzLT5nZXRBdWRpZW5jZXMoKTsKICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJHZhbGlkQXVkaWVuY2VzKSAmJiAhaW5fYXJyYXkoJHNwRW50aXR5SWQsICR2YWxpZEF1ZGllbmNlcywgdHJ1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAkdmFsaWRBdWRpZW5jZXNTdHIgPSBpbXBsb2RlKCcsJywgJHZhbGlkQXVkaWVuY2VzKTsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBhdWRpZW5jZSBmb3IgdGhpcyBSZXNwb25zZSAoZXhwZWN0ZWQgJyIuJHNwRW50aXR5SWQuIicsIGdvdCAnIi4kdmFsaWRBdWRpZW5jZXNTdHIuIicpIiwKICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpXUk9OR19BVURJRU5DRQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhlIGlzc3VlcnMKICAgICAgICAgICAgICAgICRpc3N1ZXJzID0gJHRoaXMtPmdldElzc3VlcnMoKTsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRpc3N1ZXJzIGFzICRpc3N1ZXIpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGlzc3VlcikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRyaW1tZWRJc3N1ZXIgPSB0cmltKCRpc3N1ZXIpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJHRyaW1tZWRJc3N1ZXIpIHx8ICR0cmltbWVkSXNzdWVyICE9PSAkaWRQRW50aXR5SWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgaXNzdWVyIGluIHRoZSBBc3NlcnRpb24vUmVzcG9uc2UgKGV4cGVjdGVkICciLiRpZFBFbnRpdHlJZC4iJywgZ290ICciLiR0cmltbWVkSXNzdWVyLiInKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpXUk9OR19JU1NVRVIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhlIHNlc3Npb24gRXhwaXJhdGlvbgogICAgICAgICAgICAgICAgJHNlc3Npb25FeHBpcmF0aW9uID0gJHRoaXMtPmdldFNlc3Npb25Ob3RPbk9yQWZ0ZXIoKTsKICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJHNlc3Npb25FeHBpcmF0aW9uKSAmJiAkc2Vzc2lvbkV4cGlyYXRpb24gKyBDb25zdGFudHM6OkFMTE9XRURfQ0xPQ0tfRFJJRlQgPD0gdGltZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBhdHRyaWJ1dGVzIGhhdmUgZXhwaXJlZCwgYmFzZWQgb24gdGhlIFNlc3Npb25Ob3RPbk9yQWZ0ZXIgb2YgdGhlIEF0dHJpYnV0ZVN0YXRlbWVudCBvZiB0aGlzIFJlc3BvbnNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpTRVNTSU9OX0VYUElSRUQKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoZSBTdWJqZWN0Q29uZmlybWF0aW9uLCBhdCBsZWFzdCBvbmUgU3ViamVjdENvbmZpcm1hdGlvbiBtdXN0IGJlIHZhbGlkCiAgICAgICAgICAgICAgICAkYW55U3ViamVjdENvbmZpcm1hdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgICAgJHN1YmplY3RDb25maXJtYXRpb25Ob2RlcyA9ICR0aGlzLT5fcXVlcnlBc3NlcnRpb24oJy9zYW1sOlN1YmplY3Qvc2FtbDpTdWJqZWN0Q29uZmlybWF0aW9uJyk7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkc3ViamVjdENvbmZpcm1hdGlvbk5vZGVzIGFzICRzY24pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJHNjbi0+aGFzQXR0cmlidXRlKCdNZXRob2QnKSAmJiAkc2NuLT5nZXRBdHRyaWJ1dGUoJ01ldGhvZCcpICE9IENvbnN0YW50czo6Q01fQkVBUkVSKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkc3ViamVjdENvbmZpcm1hdGlvbkRhdGFOb2RlcyA9ICRzY24tPmdldEVsZW1lbnRzQnlUYWdOYW1lKCdTdWJqZWN0Q29uZmlybWF0aW9uRGF0YScpOwogICAgICAgICAgICAgICAgICAgIGlmICgkc3ViamVjdENvbmZpcm1hdGlvbkRhdGFOb2Rlcy0+bGVuZ3RoID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHNjbkRhdGEgPSAkc3ViamVjdENvbmZpcm1hdGlvbkRhdGFOb2Rlcy0+aXRlbSgwKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRzY25EYXRhLT5oYXNBdHRyaWJ1dGUoJ0luUmVzcG9uc2VUbycpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5SZXNwb25zZVRvID0gJHNjbkRhdGEtPmdldEF0dHJpYnV0ZSgnSW5SZXNwb25zZVRvJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHJlc3BvbnNlSW5SZXNwb25zZVRvKSAmJiAkcmVzcG9uc2VJblJlc3BvbnNlVG8gIT0gJGluUmVzcG9uc2VUbykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkc2NuRGF0YS0+aGFzQXR0cmlidXRlKCdSZWNpcGllbnQnKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlY2lwaWVudCA9ICRzY25EYXRhLT5nZXRBdHRyaWJ1dGUoJ1JlY2lwaWVudCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkcmVjaXBpZW50KSAmJiBzdHJwb3MoJHJlY2lwaWVudCwgJGN1cnJlbnRVUkwpID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkc2NuRGF0YS0+aGFzQXR0cmlidXRlKCdOb3RPbk9yQWZ0ZXInKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5vYSA9IFV0aWxzOjpwYXJzZVNBTUwyVGltZSgkc2NuRGF0YS0+Z2V0QXR0cmlidXRlKCdOb3RPbk9yQWZ0ZXInKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG5vYSArIENvbnN0YW50czo6QUxMT1dFRF9DTE9DS19EUklGVCA8PSB0aW1lKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHNjbkRhdGEtPmhhc0F0dHJpYnV0ZSgnTm90QmVmb3JlJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuYiA9IFV0aWxzOjpwYXJzZVNBTUwyVGltZSgkc2NuRGF0YS0+Z2V0QXR0cmlidXRlKCdOb3RCZWZvcmUnKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG5iID4gdGltZSgpICsgQ29uc3RhbnRzOjpBTExPV0VEX0NMT0NLX0RSSUZUKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhdmUgTm90T25PckFmdGVyIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkc2NuRGF0YS0+aGFzQXR0cmlidXRlKCdOb3RPbk9yQWZ0ZXInKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPl92YWxpZFNDRE5vdE9uT3JBZnRlciA9ICRub2E7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJGFueVN1YmplY3RDb25maXJtYXRpb24gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCEkYW55U3ViamVjdENvbmZpcm1hdGlvbikgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICJBIHZhbGlkIFN1YmplY3RDb25maXJtYXRpb24gd2FzIG5vdCBmb3VuZCBvbiB0aGlzIFJlc3BvbnNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpXUk9OR19TVUJKRUNUQ09ORklSTUFUSU9OCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJHNlY3VyaXR5Wyd3YW50QXNzZXJ0aW9uc1NpZ25lZCddICYmICEkaGFzU2lnbmVkQXNzZXJ0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBBc3NlcnRpb24gb2YgdGhlIFJlc3BvbnNlIGlzIG5vdCBzaWduZWQgYW5kIHRoZSBTUCByZXF1aXJlcyBpdCIsCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6Tk9fU0lHTkVEX0FTU0VSVElPTgogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCRzZWN1cml0eVsnd2FudE1lc3NhZ2VzU2lnbmVkJ10gJiYgISRoYXNTaWduZWRSZXNwb25zZSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgTWVzc2FnZSBvZiB0aGUgUmVzcG9uc2UgaXMgbm90IHNpZ25lZCBhbmQgdGhlIFNQIHJlcXVpcmVzIGl0IiwKICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpOT19TSUdORURfTUVTU0FHRQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChlbXB0eSgkc2lnbmVkRWxlbWVudHMpIHx8ICghJGhhc1NpZ25lZFJlc3BvbnNlICYmICEkaGFzU2lnbmVkQXNzZXJ0aW9uKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAnTm8gU2lnbmF0dXJlIGZvdW5kLiBTQU1MIFJlc3BvbnNlIHJlamVjdGVkJywKICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6Ok5PX1NJR05BVFVSRV9GT1VORAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRjZXJ0ID0gJGlkcERhdGFbJ3g1MDljZXJ0J107CiAgICAgICAgICAgICAgICAkZmluZ2VycHJpbnQgPSAkaWRwRGF0YVsnY2VydEZpbmdlcnByaW50J107CiAgICAgICAgICAgICAgICAkZmluZ2VycHJpbnRhbGcgPSAkaWRwRGF0YVsnY2VydEZpbmdlcnByaW50QWxnb3JpdGhtJ107CgogICAgICAgICAgICAgICAgJG11bHRpQ2VydHMgPSBudWxsOwogICAgICAgICAgICAgICAgJGV4aXN0c011bHRpWDUwOVNpZ24gPSBpc3NldCgkaWRwRGF0YVsneDUwOWNlcnRNdWx0aSddKSAmJiBpc3NldCgkaWRwRGF0YVsneDUwOWNlcnRNdWx0aSddWydzaWduaW5nJ10pICYmICFlbXB0eSgkaWRwRGF0YVsneDUwOWNlcnRNdWx0aSddWydzaWduaW5nJ10pOwoKICAgICAgICAgICAgICAgIGlmICgkZXhpc3RzTXVsdGlYNTA5U2lnbikgewogICAgICAgICAgICAgICAgICAgICRtdWx0aUNlcnRzID0gJGlkcERhdGFbJ3g1MDljZXJ0TXVsdGknXVsnc2lnbmluZyddOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIElmIGZpbmQgYSBTaWduYXR1cmUgb24gdGhlIFJlc3BvbnNlLCB2YWxpZGF0ZXMgaXQgY2hlY2tpbmcgdGhlIG9yaWdpbmFsIHJlc3BvbnNlCiAgICAgICAgICAgICAgICBpZiAoJGhhc1NpZ25lZFJlc3BvbnNlICYmICFVdGlsczo6dmFsaWRhdGVTaWduKCR0aGlzLT5kb2N1bWVudCwgJGNlcnQsICRmaW5nZXJwcmludCwgJGZpbmdlcnByaW50YWxnLCBVdGlsczo6UkVTUE9OU0VfU0lHTkFUVVJFX1hQQVRILCAkbXVsdGlDZXJ0cykpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAiU2lnbmF0dXJlIHZhbGlkYXRpb24gZmFpbGVkLiBTQU1MIFJlc3BvbnNlIHJlamVjdGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpJTlZBTElEX1NJR05BVFVSRQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gSWYgZmluZCBhIFNpZ25hdHVyZSBvbiB0aGUgQXNzZXJ0aW9uIChkZWNyeXB0ZWQgYXNzZXJ0aW9uIGlmIHdhcyBlbmNyeXB0ZWQpCiAgICAgICAgICAgICAgICAkZG9jdW1lbnRUb0NoZWNrQXNzZXJ0aW9uID0gJHRoaXMtPmVuY3J5cHRlZCA/ICR0aGlzLT5kZWNyeXB0ZWREb2N1bWVudCA6ICR0aGlzLT5kb2N1bWVudDsKICAgICAgICAgICAgICAgIGlmICgkaGFzU2lnbmVkQXNzZXJ0aW9uICYmICFVdGlsczo6dmFsaWRhdGVTaWduKCRkb2N1bWVudFRvQ2hlY2tBc3NlcnRpb24sICRjZXJ0LCAkZmluZ2VycHJpbnQsICRmaW5nZXJwcmludGFsZywgVXRpbHM6OkFTU0VSVElPTl9TSUdOQVRVUkVfWFBBVEgsICRtdWx0aUNlcnRzKSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICJTaWduYXR1cmUgdmFsaWRhdGlvbiBmYWlsZWQuIFNBTUwgUmVzcG9uc2UgcmVqZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OklOVkFMSURfU0lHTkFUVVJFCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgJHRoaXMtPl9lcnJvciA9ICRlOwogICAgICAgICAgICAkZGVidWcgPSAkdGhpcy0+X3NldHRpbmdzLT5pc0RlYnVnQWN0aXZlKCk7CiAgICAgICAgICAgIGlmICgkZGVidWcpIHsKICAgICAgICAgICAgICAgIGVjaG8gaHRtbGVudGl0aWVzKCRlLT5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIHRoZSBJRCBvZiB0aGUgUmVzcG9uc2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldElkKCkKICAgIHsKICAgICAgICAkaWQgPSBudWxsOwogICAgICAgIGlmICgkdGhpcy0+ZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudC0+aGFzQXR0cmlidXRlKCdJRCcpKSB7CiAgICAgICAgICAgICRpZCA9ICR0aGlzLT5kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUoJ0lEJyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkaWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIHRoZSBJRCBvZiB0aGUgYXNzZXJ0aW9uIGluIHRoZSBSZXNwb25zZQogICAgICoKICAgICAqIEB0aHJvd3MgVmFsaWRhdGlvbkVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBc3NlcnRpb25JZCgpCiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+dmFsaWRhdGVOdW1Bc3NlcnRpb25zKCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigiU0FNTCBSZXNwb25zZSBtdXN0IGNvbnRhaW4gMSBBc3NlcnRpb24uIiwgVmFsaWRhdGlvbkVycm9yOjpXUk9OR19OVU1CRVJfT0ZfQVNTRVJUSU9OUyk7CiAgICAgICAgfQogICAgICAgICRhc3NlcnRpb25Ob2RlcyA9ICR0aGlzLT5fcXVlcnlBc3NlcnRpb24oIiIpOwogICAgICAgICRpZCA9IG51bGw7CiAgICAgICAgaWYgKCRhc3NlcnRpb25Ob2Rlcy0+bGVuZ3RoID09IDEgJiYgJGFzc2VydGlvbk5vZGVzLT5pdGVtKDApLT5oYXNBdHRyaWJ1dGUoJ0lEJykpIHsKICAgICAgICAgICAgJGlkID0gJGFzc2VydGlvbk5vZGVzLT5pdGVtKDApLT5nZXRBdHRyaWJ1dGUoJ0lEJyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkaWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGludCB0aGUgTm90T25PckFmdGVyIHZhbHVlIG9mIHRoZSB2YWxpZCBTdWJqZWN0Q29uZmlybWF0aW9uRGF0YQogICAgICogbm9kZSBpZiBhbnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEFzc2VydGlvbk5vdE9uT3JBZnRlcigpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fdmFsaWRTQ0ROb3RPbk9yQWZ0ZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgdGhlIFN0YXR1cyBpcyBzdWNjZXNzCiAgICAgKgogICAgICogQHRocm93cyBWYWxpZGF0aW9uRXJyb3IgSWYgc3RhdHVzIGlzIG5vdCBzdWNjZXNzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjaGVja1N0YXR1cygpCiAgICB7CiAgICAgICAgJHN0YXR1cyA9IFV0aWxzOjpnZXRTdGF0dXMoJHRoaXMtPmRvY3VtZW50KTsKCiAgICAgICAgaWYgKGlzc2V0KCRzdGF0dXNbJ2NvZGUnXSkgJiYgJHN0YXR1c1snY29kZSddICE9PSBDb25zdGFudHM6OlNUQVRVU19TVUNDRVNTKSB7CiAgICAgICAgICAgICRleHBsb2RlZENvZGUgPSBleHBsb2RlKCc6JywgJHN0YXR1c1snY29kZSddKTsKICAgICAgICAgICAgJHByaW50YWJsZUNvZGUgPSBhcnJheV9wb3AoJGV4cGxvZGVkQ29kZSk7CgogICAgICAgICAgICAkc3RhdHVzRXhjZXB0aW9uTXNnID0gJ1RoZSBzdGF0dXMgY29kZSBvZiB0aGUgUmVzcG9uc2Ugd2FzIG5vdCBTdWNjZXNzLCB3YXMgJy4kcHJpbnRhYmxlQ29kZTsKICAgICAgICAgICAgaWYgKCFlbXB0eSgkc3RhdHVzWydtc2cnXSkpIHsKICAgICAgICAgICAgICAgICRzdGF0dXNFeGNlcHRpb25Nc2cgLj0gJyAtPiAnLiRzdGF0dXNbJ21zZyddOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAkc3RhdHVzRXhjZXB0aW9uTXNnLAogICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpTVEFUVVNfQ09ERV9JU19OT1RfU1VDQ0VTUwogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrcyB0aGF0IHRoZSBzYW1scDpSZXNwb25zZS9zYW1sOkFzc2VydGlvbi9zYW1sOkNvbmRpdGlvbnMgZWxlbWVudCBleGlzdHMgYW5kIGlzIHVuaXF1ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGUgQ29uZGl0aW9ucyBlbGVtZW50IGV4aXN0cyBhbmQgaXMgdW5pcXVlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjaGVja09uZUNvbmRpdGlvbigpCiAgICB7CiAgICAgICAgJGVudHJpZXMgPSAkdGhpcy0+X3F1ZXJ5QXNzZXJ0aW9uKCIvc2FtbDpDb25kaXRpb25zIik7CiAgICAgICAgaWYgKCRlbnRyaWVzLT5sZW5ndGggPT0gMSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2tzIHRoYXQgdGhlIHNhbWxwOlJlc3BvbnNlL3NhbWw6QXNzZXJ0aW9uL3NhbWw6QXV0aG5TdGF0ZW1lbnQgZWxlbWVudCBleGlzdHMgYW5kIGlzIHVuaXF1ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGUgQXV0aG5TdGF0ZW1lbnQgZWxlbWVudCBleGlzdHMgYW5kIGlzIHVuaXF1ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2tPbmVBdXRoblN0YXRlbWVudCgpCiAgICB7CiAgICAgICAgJGVudHJpZXMgPSAkdGhpcy0+X3F1ZXJ5QXNzZXJ0aW9uKCIvc2FtbDpBdXRoblN0YXRlbWVudCIpOwogICAgICAgIGlmICgkZW50cmllcy0+bGVuZ3RoID09IDEpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEdldHMgdGhlIGF1ZGllbmNlcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5IEBhdWRpZW5jZSBUaGUgdmFsaWQgYXVkaWVuY2VzIG9mIHRoZSByZXNwb25zZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXVkaWVuY2VzKCkKICAgIHsKICAgICAgICAkYXVkaWVuY2VzID0gYXJyYXkoKTsKCiAgICAgICAgJGVudHJpZXMgPSAkdGhpcy0+X3F1ZXJ5QXNzZXJ0aW9uKCcvc2FtbDpDb25kaXRpb25zL3NhbWw6QXVkaWVuY2VSZXN0cmljdGlvbi9zYW1sOkF1ZGllbmNlJyk7CiAgICAgICAgZm9yZWFjaCAoJGVudHJpZXMgYXMgJGVudHJ5KSB7CiAgICAgICAgICAgICR2YWx1ZSA9ICRlbnRyeS0+dGV4dENvbnRlbnQ7CiAgICAgICAgICAgIGlmIChpc3NldCgkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAkdmFsdWUgPSB0cmltKCR2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFlbXB0eSgkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAkYXVkaWVuY2VzW10gPSAkdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBhcnJheV91bmlxdWUoJGF1ZGllbmNlcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBJc3N1ZXJzIChmcm9tIFJlc3BvbnNlIGFuZCBBc3NlcnRpb24pLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgQGlzc3VlcnMgVGhlIGlzc3VlcnMgb2YgdGhlIGFzc2VydGlvbi9yZXNwb25zZQogICAgICoKICAgICAqIEB0aHJvd3MgVmFsaWRhdGlvbkVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJc3N1ZXJzKCkKICAgIHsKICAgICAgICAkaXNzdWVycyA9IGFycmF5KCk7CgogICAgICAgICRyZXNwb25zZUlzc3VlciA9IFV0aWxzOjpxdWVyeSgkdGhpcy0+ZG9jdW1lbnQsICcvc2FtbHA6UmVzcG9uc2Uvc2FtbDpJc3N1ZXInKTsKICAgICAgICBpZiAoJHJlc3BvbnNlSXNzdWVyLT5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIGlmICgkcmVzcG9uc2VJc3N1ZXItPmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgICAgICAkaXNzdWVyc1tdID0gJHJlc3BvbnNlSXNzdWVyLT5pdGVtKDApLT50ZXh0Q29udGVudDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgIklzc3VlciBvZiB0aGUgUmVzcG9uc2UgaXMgbXVsdGlwbGUuIiwKICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OklTU1VFUl9NVUxUSVBMRV9JTl9SRVNQT05TRQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJGFzc2VydGlvbklzc3VlciA9ICR0aGlzLT5fcXVlcnlBc3NlcnRpb24oJy9zYW1sOklzc3VlcicpOwogICAgICAgIGlmICgkYXNzZXJ0aW9uSXNzdWVyLT5sZW5ndGggPT0gMSkgewogICAgICAgICAgICAkaXNzdWVyc1tdID0gJGFzc2VydGlvbklzc3Vlci0+aXRlbSgwKS0+dGV4dENvbnRlbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICJJc3N1ZXIgb2YgdGhlIEFzc2VydGlvbiBub3QgZm91bmQgb3IgbXVsdGlwbGUuIiwKICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6SVNTVUVSX05PVF9GT1VORF9JTl9BU1NFUlRJT04KICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBhcnJheV91bmlxdWUoJGlzc3VlcnMpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgTmFtZUlEIERhdGEgcHJvdmlkZWQgYnkgdGhlIFNBTUwgcmVzcG9uc2UgZnJvbSB0aGUgSWRQLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgTmFtZSBJRCBEYXRhIChWYWx1ZSwgRm9ybWF0LCBOYW1lUXVhbGlmaWVyLCBTUE5hbWVRdWFsaWZpZXIpCiAgICAgKgogICAgICogQHRocm93cyBWYWxpZGF0aW9uRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5hbWVJZERhdGEoKQogICAgewogICAgICAgICRlbmNyeXB0ZWRJZERhdGFFbnRyaWVzID0gJHRoaXMtPl9xdWVyeUFzc2VydGlvbignL3NhbWw6U3ViamVjdC9zYW1sOkVuY3J5cHRlZElEL3hlbmM6RW5jcnlwdGVkRGF0YScpOwoKICAgICAgICBpZiAoJGVuY3J5cHRlZElkRGF0YUVudHJpZXMtPmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgICRlbmNyeXB0ZWREYXRhID0gJGVuY3J5cHRlZElkRGF0YUVudHJpZXMtPml0ZW0oMCk7CgogICAgICAgICAgICAkcGVtID0gJHRoaXMtPl9zZXR0aW5ncy0+Z2V0U1BrZXkoKTsKCiAgICAgICAgICAgIGlmIChlbXB0eSgkcGVtKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAgICAgICAgICAgICAgICJObyBwcml2YXRlIGtleSBhdmFpbGFibGUsIGNoZWNrIHNldHRpbmdzIiwKICAgICAgICAgICAgICAgICAgICBFcnJvcjo6UFJJVkFURV9LRVlfTk9UX0ZPVU5ECiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRzZWNrZXkgPSBuZXcgWE1MU2VjdXJpdHlLZXkoWE1MU2VjdXJpdHlLZXk6OlJTQV8xXzUsIGFycmF5KCd0eXBlJz0+J3ByaXZhdGUnKSk7CiAgICAgICAgICAgICRzZWNrZXktPmxvYWRLZXkoJHBlbSk7CgogICAgICAgICAgICAkbmFtZUlkID0gVXRpbHM6OmRlY3J5cHRFbGVtZW50KCRlbmNyeXB0ZWREYXRhLCAkc2Vja2V5KTsKCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGVudHJpZXMgPSAkdGhpcy0+X3F1ZXJ5QXNzZXJ0aW9uKCcvc2FtbDpTdWJqZWN0L3NhbWw6TmFtZUlEJyk7CiAgICAgICAgICAgIGlmICgkZW50cmllcy0+bGVuZ3RoID09IDEpIHsKICAgICAgICAgICAgICAgICRuYW1lSWQgPSAkZW50cmllcy0+aXRlbSgwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJG5hbWVJZERhdGEgPSBhcnJheSgpOwoKICAgICAgICAkc2VjdXJpdHkgPSAkdGhpcy0+X3NldHRpbmdzLT5nZXRTZWN1cml0eURhdGEoKTsKICAgICAgICBpZiAoIWlzc2V0KCRuYW1lSWQpKSB7CiAgICAgICAgICAgIGlmICgkc2VjdXJpdHlbJ3dhbnROYW1lSWQnXSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAiTmFtZUlEIG5vdCBmb3VuZCBpbiB0aGUgYXNzZXJ0aW9uIG9mIHRoZSBSZXNwb25zZSIsCiAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpOT19OQU1FSUQKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoJHRoaXMtPl9zZXR0aW5ncy0+aXNTdHJpY3QoKSAmJiAkc2VjdXJpdHlbJ3dhbnROYW1lSWQnXSAmJiBlbXB0eSgkbmFtZUlkLT5ub2RlVmFsdWUpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICJBbiBlbXB0eSBOYW1lSUQgdmFsdWUgZm91bmQiLAogICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6RU1QVFlfTkFNRUlECiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRuYW1lSWREYXRhWydWYWx1ZSddID0gJG5hbWVJZC0+bm9kZVZhbHVlOwoKICAgICAgICAgICAgZm9yZWFjaCAoYXJyYXkoJ0Zvcm1hdCcsICdTUE5hbWVRdWFsaWZpZXInLCAnTmFtZVF1YWxpZmllcicpIGFzICRhdHRyKSB7CiAgICAgICAgICAgICAgICBpZiAoJG5hbWVJZC0+aGFzQXR0cmlidXRlKCRhdHRyKSkgewogICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+X3NldHRpbmdzLT5pc1N0cmljdCgpICYmICRhdHRyID09ICdTUE5hbWVRdWFsaWZpZXInKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzcERhdGEgPSAkdGhpcy0+X3NldHRpbmdzLT5nZXRTUERhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHNwRW50aXR5SWQgPSAkc3BEYXRhWydlbnRpdHlJZCddOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHNwRW50aXR5SWQgIT0gJG5hbWVJZC0+Z2V0QXR0cmlidXRlKCRhdHRyKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIFNQTmFtZVF1YWxpZmllciB2YWx1ZSBtaXNtYXRjaCB0aGUgU1AgZW50aXR5SUQgdmFsdWUuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OlNQX05BTUVfUVVBTElGSUVSX05BTUVfTUlTTUFUQ0gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJG5hbWVJZERhdGFbJGF0dHJdID0gJG5hbWVJZC0+Z2V0QXR0cmlidXRlKCRhdHRyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRuYW1lSWREYXRhOwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgTmFtZUlEIHByb3ZpZGVkIGJ5IHRoZSBTQU1MIHJlc3BvbnNlIGZyb20gdGhlIElkUC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIE5hbWUgSUQgVmFsdWUKICAgICAqCiAgICAgKiBAdGhyb3dzIFZhbGlkYXRpb25FcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZUlkKCkKICAgIHsKICAgICAgICAkbmFtZUlkdmFsdWUgPSBudWxsOwogICAgICAgICRuYW1lSWREYXRhID0gJHRoaXMtPmdldE5hbWVJZERhdGEoKTsKICAgICAgICBpZiAoIWVtcHR5KCRuYW1lSWREYXRhKSAmJiBpc3NldCgkbmFtZUlkRGF0YVsnVmFsdWUnXSkpIHsKICAgICAgICAgICAgJG5hbWVJZHZhbHVlID0gJG5hbWVJZERhdGFbJ1ZhbHVlJ107CiAgICAgICAgfQogICAgICAgIHJldHVybiAkbmFtZUlkdmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBOYW1lSUQgRm9ybWF0IHByb3ZpZGVkIGJ5IHRoZSBTQU1MIHJlc3BvbnNlIGZyb20gdGhlIElkUC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIE5hbWUgSUQgRm9ybWF0CiAgICAgKgogICAgICogQHRocm93cyBWYWxpZGF0aW9uRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5hbWVJZEZvcm1hdCgpCiAgICB7CiAgICAgICAgJG5hbWVJZEZvcm1hdCA9IG51bGw7CiAgICAgICAgJG5hbWVJZERhdGEgPSAkdGhpcy0+Z2V0TmFtZUlkRGF0YSgpOwogICAgICAgIGlmICghZW1wdHkoJG5hbWVJZERhdGEpICYmIGlzc2V0KCRuYW1lSWREYXRhWydGb3JtYXQnXSkpIHsKICAgICAgICAgICAgJG5hbWVJZEZvcm1hdCA9ICRuYW1lSWREYXRhWydGb3JtYXQnXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRuYW1lSWRGb3JtYXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBOYW1lSUQgTmFtZVF1YWxpZmllciBwcm92aWRlZCBieSB0aGUgU0FNTCByZXNwb25zZSBmcm9tIHRoZSBJZFAuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBOYW1lIElEIE5hbWVRdWFsaWZpZXIKICAgICAqCiAgICAgKiBAdGhyb3dzIFZhbGlkYXRpb25FcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZUlkTmFtZVF1YWxpZmllcigpCiAgICB7CiAgICAgICAgJG5hbWVJZE5hbWVRdWFsaWZpZXIgPSBudWxsOwogICAgICAgICRuYW1lSWREYXRhID0gJHRoaXMtPmdldE5hbWVJZERhdGEoKTsKICAgICAgICBpZiAoIWVtcHR5KCRuYW1lSWREYXRhKSAmJiBpc3NldCgkbmFtZUlkRGF0YVsnTmFtZVF1YWxpZmllciddKSkgewogICAgICAgICAgICAkbmFtZUlkTmFtZVF1YWxpZmllciA9ICRuYW1lSWREYXRhWydOYW1lUXVhbGlmaWVyJ107CiAgICAgICAgfQogICAgICAgIHJldHVybiAkbmFtZUlkTmFtZVF1YWxpZmllcjsKICAgIH0KCiAgICAvKioKICAgICAqIEdldHMgdGhlIE5hbWVJRCBTUCBOYW1lUXVhbGlmaWVyIHByb3ZpZGVkIGJ5IHRoZSBTQU1MIHJlc3BvbnNlIGZyb20gdGhlIElkUC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIE5hbWVJRCBTUCBOYW1lUXVhbGlmaWVyCiAgICAgKgogICAgICogQHRocm93cyBWYWxpZGF0aW9uRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5hbWVJZFNQTmFtZVF1YWxpZmllcigpCiAgICB7CiAgICAgICAgJG5hbWVJZFNQTmFtZVF1YWxpZmllciA9IG51bGw7CiAgICAgICAgJG5hbWVJZERhdGEgPSAkdGhpcy0+Z2V0TmFtZUlkRGF0YSgpOwogICAgICAgIGlmICghZW1wdHkoJG5hbWVJZERhdGEpICYmIGlzc2V0KCRuYW1lSWREYXRhWydTUE5hbWVRdWFsaWZpZXInXSkpIHsKICAgICAgICAgICAgJG5hbWVJZFNQTmFtZVF1YWxpZmllciA9ICRuYW1lSWREYXRhWydTUE5hbWVRdWFsaWZpZXInXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRuYW1lSWRTUE5hbWVRdWFsaWZpZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBTZXNzaW9uTm90T25PckFmdGVyIGZyb20gdGhlIEF1dGhuU3RhdGVtZW50LgogICAgICogQ291bGQgYmUgdXNlZCB0byBzZXQgdGhlIGxvY2FsIHNlc3Npb24gZXhwaXJhdGlvbgogICAgICoKICAgICAqIEByZXR1cm4gaW50fG51bGwgVGhlIFNlc3Npb25Ob3RPbk9yQWZ0ZXIgdmFsdWUKICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2Vzc2lvbk5vdE9uT3JBZnRlcigpCiAgICB7CiAgICAgICAgJG5vdE9uT3JBZnRlciA9IG51bGw7CiAgICAgICAgJGVudHJpZXMgPSAkdGhpcy0+X3F1ZXJ5QXNzZXJ0aW9uKCcvc2FtbDpBdXRoblN0YXRlbWVudFtAU2Vzc2lvbk5vdE9uT3JBZnRlcl0nKTsKICAgICAgICBpZiAoJGVudHJpZXMtPmxlbmd0aCAhPT0gMCkgewogICAgICAgICAgICAkbm90T25PckFmdGVyID0gVXRpbHM6OnBhcnNlU0FNTDJUaW1lKCRlbnRyaWVzLT5pdGVtKDApLT5nZXRBdHRyaWJ1dGUoJ1Nlc3Npb25Ob3RPbk9yQWZ0ZXInKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkbm90T25PckFmdGVyOwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgU2Vzc2lvbkluZGV4IGZyb20gdGhlIEF1dGhuU3RhdGVtZW50LgogICAgICogQ291bGQgYmUgdXNlZCB0byBiZSBzdG9yZWQgaW4gdGhlIGxvY2FsIHNlc3Npb24gaW4gb3JkZXIKICAgICAqIHRvIGJlIHVzZWQgaW4gYSBmdXR1cmUgTG9nb3V0IFJlcXVlc3QgdGhhdCB0aGUgU1AgY291bGQKICAgICAqIHNlbmQgdG8gdGhlIFNQLCB0byBzZXQgd2hhdCBzcGVjaWZpYyBzZXNzaW9uIG11c3QgYmUgZGVsZXRlZAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIFNlc3Npb25JbmRleCB2YWx1ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2Vzc2lvbkluZGV4KCkKICAgIHsKICAgICAgICAkc2Vzc2lvbkluZGV4ID0gbnVsbDsKICAgICAgICAkZW50cmllcyA9ICR0aGlzLT5fcXVlcnlBc3NlcnRpb24oJy9zYW1sOkF1dGhuU3RhdGVtZW50W0BTZXNzaW9uSW5kZXhdJyk7CiAgICAgICAgaWYgKCRlbnRyaWVzLT5sZW5ndGggIT09IDApIHsKICAgICAgICAgICAgJHNlc3Npb25JbmRleCA9ICRlbnRyaWVzLT5pdGVtKDApLT5nZXRBdHRyaWJ1dGUoJ1Nlc3Npb25JbmRleCcpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHNlc3Npb25JbmRleDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldHMgdGhlIEF0dHJpYnV0ZXMgZnJvbSB0aGUgQXR0cmlidXRlU3RhdGVtZW50IGVsZW1lbnQuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBUaGUgYXR0cmlidXRlcyBvZiB0aGUgU0FNTCBBc3NlcnRpb24KICAgICAqCiAgICAgKiBAdGhyb3dzIFZhbGlkYXRpb25FcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXR0cmlidXRlcygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fZ2V0QXR0cmlidXRlc0J5S2V5TmFtZSgnTmFtZScpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgQXR0cmlidXRlcyBmcm9tIHRoZSBBdHRyaWJ1dGVTdGF0ZW1lbnQgZWxlbWVudCB1c2luZyB0aGVpciBGcmllbmRseU5hbWUuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBUaGUgYXR0cmlidXRlcyBvZiB0aGUgU0FNTCBBc3NlcnRpb24KICAgICAqCiAgICAgKiBAdGhyb3dzIFZhbGlkYXRpb25FcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXR0cmlidXRlc1dpdGhGcmllbmRseU5hbWUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2dldEF0dHJpYnV0ZXNCeUtleU5hbWUoJ0ZyaWVuZGx5TmFtZScpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5TmFtZQogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqCiAgICAgKiBAdGhyb3dzIFZhbGlkYXRpb25FcnJvcgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9nZXRBdHRyaWJ1dGVzQnlLZXlOYW1lKCRrZXlOYW1lID0gIk5hbWUiKQogICAgewogICAgICAgICRhdHRyaWJ1dGVzID0gYXJyYXkoKTsKICAgICAgICAkZW50cmllcyA9ICR0aGlzLT5fcXVlcnlBc3NlcnRpb24oJy9zYW1sOkF0dHJpYnV0ZVN0YXRlbWVudC9zYW1sOkF0dHJpYnV0ZScpOwoKICAgICAgICAkc2VjdXJpdHkgPSAkdGhpcy0+X3NldHRpbmdzLT5nZXRTZWN1cml0eURhdGEoKTsKICAgICAgICAkYWxsb3dSZXBlYXRBdHRyaWJ1dGVOYW1lID0gJHNlY3VyaXR5WydhbGxvd1JlcGVhdEF0dHJpYnV0ZU5hbWUnXTsKICAgICAgICAvKiogQHZhciAkZW50cnkgRE9NTm9kZSAqLwogICAgICAgIGZvcmVhY2ggKCRlbnRyaWVzIGFzICRlbnRyeSkgewogICAgICAgICAgICAkYXR0cmlidXRlS2V5Tm9kZSA9ICRlbnRyeS0+YXR0cmlidXRlcy0+Z2V0TmFtZWRJdGVtKCRrZXlOYW1lKTsKICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGVLZXlOb2RlID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkYXR0cmlidXRlS2V5TmFtZSA9ICRhdHRyaWJ1dGVLZXlOb2RlLT5ub2RlVmFsdWU7CiAgICAgICAgICAgIGlmIChpbl9hcnJheSgkYXR0cmlidXRlS2V5TmFtZSwgYXJyYXlfa2V5cygkYXR0cmlidXRlcyksIHRydWUpKSB7CiAgICAgICAgICAgICAgICBpZiAoISRhbGxvd1JlcGVhdEF0dHJpYnV0ZU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAiRm91bmQgYW4gQXR0cmlidXRlIGVsZW1lbnQgd2l0aCBkdXBsaWNhdGVkICIuJGtleU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6RFVQTElDQVRFRF9BVFRSSUJVVEVfTkFNRV9GT1VORAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGF0dHJpYnV0ZVZhbHVlcyA9IGFycmF5KCk7CiAgICAgICAgICAgIGZvcmVhY2ggKCRlbnRyeS0+Y2hpbGROb2RlcyBhcyAkY2hpbGROb2RlKSB7CiAgICAgICAgICAgICAgICAkdGFnTmFtZSA9ICgkY2hpbGROb2RlLT5wcmVmaXggPyAkY2hpbGROb2RlLT5wcmVmaXguJzonIDogJycpIC4gJ0F0dHJpYnV0ZVZhbHVlJzsKICAgICAgICAgICAgICAgIGlmICgkY2hpbGROb2RlLT5ub2RlVHlwZSA9PSBYTUxfRUxFTUVOVF9OT0RFICYmICRjaGlsZE5vZGUtPnRhZ05hbWUgPT09ICR0YWdOYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgJGF0dHJpYnV0ZVZhbHVlc1tdID0gJGNoaWxkTm9kZS0+bm9kZVZhbHVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoaW5fYXJyYXkoJGF0dHJpYnV0ZUtleU5hbWUsIGFycmF5X2tleXMoJGF0dHJpYnV0ZXMpLCB0cnVlKSkgewogICAgICAgICAgICAgICAgJGF0dHJpYnV0ZXNbJGF0dHJpYnV0ZUtleU5hbWVdID0gYXJyYXlfbWVyZ2UoJGF0dHJpYnV0ZXNbJGF0dHJpYnV0ZUtleU5hbWVdLCAkYXR0cmlidXRlVmFsdWVzKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRhdHRyaWJ1dGVzWyRhdHRyaWJ1dGVLZXlOYW1lXSA9ICRhdHRyaWJ1dGVWYWx1ZXM7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRhdHRyaWJ1dGVzOwogICAgfQoKICAgIC8qKgogICAgICogVmVyaWZpZXMgdGhhdCB0aGUgZG9jdW1lbnQgb25seSBjb250YWlucyBhIHNpbmdsZSBBc3NlcnRpb24gKGVuY3J5cHRlZCBvciBub3QpLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBUUlVFIGlmIHRoZSBkb2N1bWVudCBwYXNzZXMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZGF0ZU51bUFzc2VydGlvbnMoKQogICAgewogICAgICAgICRlbmNyeXB0ZWRBc3NlcnRpb25Ob2RlcyA9ICR0aGlzLT5kb2N1bWVudC0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ0VuY3J5cHRlZEFzc2VydGlvbicpOwogICAgICAgICRhc3NlcnRpb25Ob2RlcyA9ICR0aGlzLT5kb2N1bWVudC0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ0Fzc2VydGlvbicpOwoKICAgICAgICAkdmFsaWQgPSAkYXNzZXJ0aW9uTm9kZXMtPmxlbmd0aCArICRlbmNyeXB0ZWRBc3NlcnRpb25Ob2Rlcy0+bGVuZ3RoID09IDE7CgogICAgICAgIGlmICgkdGhpcy0+ZW5jcnlwdGVkKSB7CiAgICAgICAgICAgICRhc3NlcnRpb25Ob2RlcyA9ICR0aGlzLT5kZWNyeXB0ZWREb2N1bWVudC0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ0Fzc2VydGlvbicpOwogICAgICAgICAgICAkdmFsaWQgPSAkdmFsaWQgJiYgJGFzc2VydGlvbk5vZGVzLT5sZW5ndGggPT0gMTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdmFsaWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBWZXJpZmllcyB0aGUgc2lnbmF0dXJlIG5vZGVzOgogICAgICogICAtIENoZWNrcyB0aGF0IGFyZSBSZXNwb25zZSBvciBBc3NlcnRpb24KICAgICAqICAgLSBDaGVjayB0aGF0IElEcyBhbmQgcmVmZXJlbmNlIFVSSSBhcmUgdW5pcXVlIGFuZCBjb25zaXN0ZW50LgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgU2lnbmVkIGVsZW1lbnQgdGFncwogICAgICoKICAgICAqIEB0aHJvd3MgVmFsaWRhdGlvbkVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcm9jZXNzU2lnbmVkRWxlbWVudHMoKQogICAgewogICAgICAgICRzaWduZWRFbGVtZW50cyA9IGFycmF5KCk7CiAgICAgICAgJHZlcmlmaWVkU2VpcyA9IGFycmF5KCk7CiAgICAgICAgJHZlcmlmaWVkSWRzID0gYXJyYXkoKTsKCiAgICAgICAgaWYgKCR0aGlzLT5lbmNyeXB0ZWQpIHsKICAgICAgICAgICAgJHNpZ25Ob2RlcyA9ICR0aGlzLT5kZWNyeXB0ZWREb2N1bWVudC0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ1NpZ25hdHVyZScpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRzaWduTm9kZXMgPSAkdGhpcy0+ZG9jdW1lbnQtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCdTaWduYXR1cmUnKTsKICAgICAgICB9CiAgICAgICAgZm9yZWFjaCAoJHNpZ25Ob2RlcyBhcyAkc2lnbk5vZGUpIHsKICAgICAgICAgICAgJHJlc3BvbnNlVGFnID0gJ3snLkNvbnN0YW50czo6TlNfU0FNTFAuJ31SZXNwb25zZSc7CiAgICAgICAgICAgICRhc3NlcnRpb25UYWcgPSAneycuQ29uc3RhbnRzOjpOU19TQU1MLid9QXNzZXJ0aW9uJzsKCiAgICAgICAgICAgICRzaWduZWRFbGVtZW50ID0gJ3snLiRzaWduTm9kZS0+cGFyZW50Tm9kZS0+bmFtZXNwYWNlVVJJLid9Jy4kc2lnbk5vZGUtPnBhcmVudE5vZGUtPmxvY2FsTmFtZTsKCiAgICAgICAgICAgIGlmICgkc2lnbmVkRWxlbWVudCAhPSAkcmVzcG9uc2VUYWcgJiYgJHNpZ25lZEVsZW1lbnQgIT0gJGFzc2VydGlvblRhZykgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBTaWduYXR1cmUgRWxlbWVudCAkc2lnbmVkRWxlbWVudCBTQU1MIFJlc3BvbnNlIHJlamVjdGVkIiwKICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OldST05HX1NJR05FRF9FTEVNRU5UCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBDaGVjayB0aGF0IHJlZmVyZW5jZSBVUkkgbWF0Y2hlcyB0aGUgcGFyZW50IElEIGFuZCBubyBkdXBsaWNhdGUgUmVmZXJlbmNlcyBvciBJRHMKICAgICAgICAgICAgJGlkVmFsdWUgPSAkc2lnbk5vZGUtPnBhcmVudE5vZGUtPmdldEF0dHJpYnV0ZSgnSUQnKTsKICAgICAgICAgICAgaWYgKGVtcHR5KCRpZFZhbHVlKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAnU2lnbmVkIEVsZW1lbnQgbXVzdCBjb250YWluIGFuIElELiBTQU1MIFJlc3BvbnNlIHJlamVjdGVkJywKICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OklEX05PVF9GT1VORF9JTl9TSUdORURfRUxFTUVOVAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGluX2FycmF5KCRpZFZhbHVlLCAkdmVyaWZpZWRJZHMpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICdEdXBsaWNhdGVkIElELiBTQU1MIFJlc3BvbnNlIHJlamVjdGVkJywKICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OkRVUExJQ0FURURfSURfSU5fU0lHTkVEX0VMRU1FTlRTCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR2ZXJpZmllZElkc1tdID0gJGlkVmFsdWU7CgogICAgICAgICAgICAkcmVmID0gJHNpZ25Ob2RlLT5nZXRFbGVtZW50c0J5VGFnTmFtZSgnUmVmZXJlbmNlJyk7CiAgICAgICAgICAgIGlmICgkcmVmLT5sZW5ndGggPT0gMSkgewogICAgICAgICAgICAgICAgJHJlZiA9ICRyZWYtPml0ZW0oMCk7CiAgICAgICAgICAgICAgICAkc2VpID0gJHJlZi0+Z2V0QXR0cmlidXRlKCdVUkknKTsKICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJHNlaSkpIHsKICAgICAgICAgICAgICAgICAgICAkc2VpID0gc3Vic3RyKCRzZWksIDEpOwoKICAgICAgICAgICAgICAgICAgICBpZiAoJHNlaSAhPSAkaWRWYWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZvdW5kIGFuIGludmFsaWQgU2lnbmVkIEVsZW1lbnQuIFNBTUwgUmVzcG9uc2UgcmVqZWN0ZWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpJTlZBTElEX1NJR05FRF9FTEVNRU5UCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoaW5fYXJyYXkoJHNlaSwgJHZlcmlmaWVkU2VpcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEdXBsaWNhdGVkIFJlZmVyZW5jZSBVUkkuIFNBTUwgUmVzcG9uc2UgcmVqZWN0ZWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpEVVBMSUNBVEVEX1JFRkVSRU5DRV9JTl9TSUdORURfRUxFTUVOVFMKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHZlcmlmaWVkU2Vpc1tdID0gJHNlaTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgbnVtYmVyIG9mIFJlZmVyZW5jZSBub2RlcyBmb3VuZCBmb3Igc2lnbmF0dXJlLiBTQU1MIFJlc3BvbnNlIHJlamVjdGVkLicsCiAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpVTkVYUEVDVEVEX1JFRkVSRU5DRQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkc2lnbmVkRWxlbWVudHNbXSA9ICRzaWduZWRFbGVtZW50OwogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgU2lnbmVkRWxlbWVudHMKICAgICAgICBpZiAoIWVtcHR5KCRzaWduZWRFbGVtZW50cykgJiYgISR0aGlzLT52YWxpZGF0ZVNpZ25lZEVsZW1lbnRzKCRzaWduZWRFbGVtZW50cykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICdGb3VuZCBhbiB1bmV4cGVjdGVkIFNpZ25hdHVyZSBFbGVtZW50LiBTQU1MIFJlc3BvbnNlIHJlamVjdGVkJywKICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6VU5FWFBFQ1RFRF9TSUdORURfRUxFTUVOVFMKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRzaWduZWRFbGVtZW50czsKICAgIH0KCiAgICAvKioKICAgICAqIFZlcmlmaWVzIHRoYXQgdGhlIGRvY3VtZW50IGlzIHN0aWxsIHZhbGlkIGFjY29yZGluZyBDb25kaXRpb25zIEVsZW1lbnQuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVmFsaWRhdGlvbkVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZGF0ZVRpbWVzdGFtcHMoKQogICAgewogICAgICAgIGlmICgkdGhpcy0+ZW5jcnlwdGVkKSB7CiAgICAgICAgICAgICRkb2N1bWVudCA9ICR0aGlzLT5kZWNyeXB0ZWREb2N1bWVudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkZG9jdW1lbnQgPSAkdGhpcy0+ZG9jdW1lbnQ7CiAgICAgICAgfQoKICAgICAgICAkdGltZXN0YW1wTm9kZXMgPSAkZG9jdW1lbnQtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCdDb25kaXRpb25zJyk7CiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJHRpbWVzdGFtcE5vZGVzLT5sZW5ndGg7ICRpKyspIHsKICAgICAgICAgICAgJG5iQXR0cmlidXRlID0gJHRpbWVzdGFtcE5vZGVzLT5pdGVtKCRpKS0+YXR0cmlidXRlcy0+Z2V0TmFtZWRJdGVtKCJOb3RCZWZvcmUiKTsKICAgICAgICAgICAgJG5hQXR0cmlidXRlID0gJHRpbWVzdGFtcE5vZGVzLT5pdGVtKCRpKS0+YXR0cmlidXRlcy0+Z2V0TmFtZWRJdGVtKCJOb3RPbk9yQWZ0ZXIiKTsKICAgICAgICAgICAgaWYgKCRuYkF0dHJpYnV0ZSAmJiBVdGlsczo6cGFyc2VTQU1MMlRpbWUoJG5iQXR0cmlidXRlLT50ZXh0Q29udGVudCkgPiB0aW1lKCkgKyBDb25zdGFudHM6OkFMTE9XRURfQ0xPQ0tfRFJJRlQpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgJ0NvdWxkIG5vdCB2YWxpZGF0ZSB0aW1lc3RhbXA6IG5vdCB5ZXQgdmFsaWQuIENoZWNrIHN5c3RlbSBjbG9jay4nLAogICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6QVNTRVJUSU9OX1RPT19FQVJMWQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJG5hQXR0cmlidXRlICYmIFV0aWxzOjpwYXJzZVNBTUwyVGltZSgkbmFBdHRyaWJ1dGUtPnRleHRDb250ZW50KSArIENvbnN0YW50czo6QUxMT1dFRF9DTE9DS19EUklGVCA8PSB0aW1lKCkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgJ0NvdWxkIG5vdCB2YWxpZGF0ZSB0aW1lc3RhbXA6IGV4cGlyZWQuIENoZWNrIHN5c3RlbSBjbG9jay4nLAogICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6QVNTRVJUSU9OX0VYUElSRUQKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBWZXJpZmllcyB0aGF0IHRoZSBkb2N1bWVudCBoYXMgdGhlIGV4cGVjdGVkIHNpZ25lZCBub2Rlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHNpZ25lZEVsZW1lbnRzIFNpZ25lZCBlbGVtZW50cwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgVmFsaWRhdGlvbkVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZGF0ZVNpZ25lZEVsZW1lbnRzKCRzaWduZWRFbGVtZW50cykKICAgIHsKICAgICAgICBpZiAoY291bnQoJHNpZ25lZEVsZW1lbnRzKSA+IDIpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJHJlc3BvbnNlVGFnID0gJ3snLkNvbnN0YW50czo6TlNfU0FNTFAuJ31SZXNwb25zZSc7CiAgICAgICAgJGFzc2VydGlvblRhZyA9ICd7Jy5Db25zdGFudHM6Ok5TX1NBTUwuJ31Bc3NlcnRpb24nOwoKICAgICAgICAkb2NjdXJyZW5jZSA9IGFycmF5X2NvdW50X3ZhbHVlcygkc2lnbmVkRWxlbWVudHMpOwogICAgICAgIGlmICgoaW5fYXJyYXkoJHJlc3BvbnNlVGFnLCAkc2lnbmVkRWxlbWVudHMpICYmICRvY2N1cnJlbmNlWyRyZXNwb25zZVRhZ10gPiAxKQogICAgICAgICAgICB8fCAoaW5fYXJyYXkoJGFzc2VydGlvblRhZywgJHNpZ25lZEVsZW1lbnRzKSAmJiAkb2NjdXJyZW5jZVskYXNzZXJ0aW9uVGFnXSA+IDEpCiAgICAgICAgICAgIHx8ICFpbl9hcnJheSgkcmVzcG9uc2VUYWcsICRzaWduZWRFbGVtZW50cykgJiYgIWluX2FycmF5KCRhc3NlcnRpb25UYWcsICRzaWduZWRFbGVtZW50cykKICAgICAgICApIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgc2lnbmVkIGVsZW1lbnRzIGZvdW5kIGhlcmUsIGFyZSB0aGUgb25lcyB0aGF0IHdpbGwgYmUgdmVyaWZpZWQKICAgICAgICAvLyBieSBVdGlscy0+dmFsaWRhdGVTaWduKCkKICAgICAgICBpZiAoaW5fYXJyYXkoJHJlc3BvbnNlVGFnLCAkc2lnbmVkRWxlbWVudHMpKSB7CiAgICAgICAgICAgICRleHBlY3RlZFNpZ25hdHVyZU5vZGVzID0gVXRpbHM6OnF1ZXJ5KCR0aGlzLT5kb2N1bWVudCwgVXRpbHM6OlJFU1BPTlNFX1NJR05BVFVSRV9YUEFUSCk7CiAgICAgICAgICAgIGlmICgkZXhwZWN0ZWRTaWduYXR1cmVOb2Rlcy0+bGVuZ3RoICE9IDEpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgbnVtYmVyIG9mIFJlc3BvbnNlIHNpZ25hdHVyZXMgZm91bmQuIFNBTUwgUmVzcG9uc2UgcmVqZWN0ZWQuIiwKICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OldST05HX05VTUJFUl9PRl9TSUdOQVRVUkVTX0lOX1JFU1BPTlNFCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaW5fYXJyYXkoJGFzc2VydGlvblRhZywgJHNpZ25lZEVsZW1lbnRzKSkgewogICAgICAgICAgICAkZXhwZWN0ZWRTaWduYXR1cmVOb2RlcyA9ICR0aGlzLT5fcXVlcnkoVXRpbHM6OkFTU0VSVElPTl9TSUdOQVRVUkVfWFBBVEgpOwogICAgICAgICAgICBpZiAoJGV4cGVjdGVkU2lnbmF0dXJlTm9kZXMtPmxlbmd0aCAhPSAxKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkIG51bWJlciBvZiBBc3NlcnRpb24gc2lnbmF0dXJlcyBmb3VuZC4gU0FNTCBSZXNwb25zZSByZWplY3RlZC4iLAogICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6V1JPTkdfTlVNQkVSX09GX1NJR05BVFVSRVNfSU5fQVNTRVJUSU9OCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEV4dHJhY3RzIGEgbm9kZSBmcm9tIHRoZSBET01Eb2N1bWVudCAoQXNzZXJ0aW9uKS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhc3NlcnRpb25YcGF0aCBYcGF0aCBFeHByZXNzaW9uCiAgICAgKgogICAgICogQHJldHVybiBET01Ob2RlTGlzdCBUaGUgcXVlcmllZCBub2RlCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfcXVlcnlBc3NlcnRpb24oJGFzc2VydGlvblhwYXRoKQogICAgewogICAgICAgIGlmICgkdGhpcy0+ZW5jcnlwdGVkKSB7CiAgICAgICAgICAgICR4cGF0aCA9IG5ldyBET01YUGF0aCgkdGhpcy0+ZGVjcnlwdGVkRG9jdW1lbnQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR4cGF0aCA9IG5ldyBET01YUGF0aCgkdGhpcy0+ZG9jdW1lbnQpOwogICAgICAgIH0KCiAgICAgICAgJHhwYXRoLT5yZWdpc3Rlck5hbWVzcGFjZSgnc2FtbHAnLCBDb25zdGFudHM6Ok5TX1NBTUxQKTsKICAgICAgICAkeHBhdGgtPnJlZ2lzdGVyTmFtZXNwYWNlKCdzYW1sJywgQ29uc3RhbnRzOjpOU19TQU1MKTsKICAgICAgICAkeHBhdGgtPnJlZ2lzdGVyTmFtZXNwYWNlKCdkcycsIENvbnN0YW50czo6TlNfRFMpOwogICAgICAgICR4cGF0aC0+cmVnaXN0ZXJOYW1lc3BhY2UoJ3hlbmMnLCBDb25zdGFudHM6Ok5TX1hFTkMpOwoKICAgICAgICAkYXNzZXJ0aW9uTm9kZSA9ICcvc2FtbHA6UmVzcG9uc2Uvc2FtbDpBc3NlcnRpb24nOwogICAgICAgICRzaWduYXR1cmVRdWVyeSA9ICRhc3NlcnRpb25Ob2RlIC4gJy9kczpTaWduYXR1cmUvZHM6U2lnbmVkSW5mby9kczpSZWZlcmVuY2UnOwogICAgICAgICRhc3NlcnRpb25SZWZlcmVuY2VOb2RlID0gJHhwYXRoLT5xdWVyeSgkc2lnbmF0dXJlUXVlcnkpLT5pdGVtKDApOwogICAgICAgIGlmICghJGFzc2VydGlvblJlZmVyZW5jZU5vZGUpIHsKICAgICAgICAgICAgLy8gaXMgdGhlIHJlc3BvbnNlIHNpZ25lZCBhcyBhIHdob2xlPwogICAgICAgICAgICAkc2lnbmF0dXJlUXVlcnkgPSAnL3NhbWxwOlJlc3BvbnNlL2RzOlNpZ25hdHVyZS9kczpTaWduZWRJbmZvL2RzOlJlZmVyZW5jZSc7CiAgICAgICAgICAgICRyZXNwb25zZVJlZmVyZW5jZU5vZGUgPSAkeHBhdGgtPnF1ZXJ5KCRzaWduYXR1cmVRdWVyeSktPml0ZW0oMCk7CiAgICAgICAgICAgIGlmICgkcmVzcG9uc2VSZWZlcmVuY2VOb2RlKSB7CiAgICAgICAgICAgICAgICAkdXJpID0gJHJlc3BvbnNlUmVmZXJlbmNlTm9kZS0+YXR0cmlidXRlcy0+Z2V0TmFtZWRJdGVtKCdVUkknKS0+bm9kZVZhbHVlOwogICAgICAgICAgICAgICAgaWYgKGVtcHR5KCR1cmkpKSB7CiAgICAgICAgICAgICAgICAgICAgJGlkID0gJHJlc3BvbnNlUmVmZXJlbmNlTm9kZS0+cGFyZW50Tm9kZS0+cGFyZW50Tm9kZS0+cGFyZW50Tm9kZS0+YXR0cmlidXRlcy0+Z2V0TmFtZWRJdGVtKCdJRCcpLT5ub2RlVmFsdWU7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRpZCA9IHN1YnN0cigkcmVzcG9uc2VSZWZlcmVuY2VOb2RlLT5hdHRyaWJ1dGVzLT5nZXROYW1lZEl0ZW0oJ1VSSScpLT5ub2RlVmFsdWUsIDEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJG5hbWVRdWVyeSA9ICIvc2FtbHA6UmVzcG9uc2VbQElEPSckaWQnXS9zYW1sOkFzc2VydGlvbiIgLiAkYXNzZXJ0aW9uWHBhdGg7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkbmFtZVF1ZXJ5ID0gIi9zYW1scDpSZXNwb25zZS9zYW1sOkFzc2VydGlvbiIgLiAkYXNzZXJ0aW9uWHBhdGg7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdXJpID0gJGFzc2VydGlvblJlZmVyZW5jZU5vZGUtPmF0dHJpYnV0ZXMtPmdldE5hbWVkSXRlbSgnVVJJJyktPm5vZGVWYWx1ZTsKICAgICAgICAgICAgaWYgKGVtcHR5KCR1cmkpKSB7CiAgICAgICAgICAgICAgICAkaWQgPSAkYXNzZXJ0aW9uUmVmZXJlbmNlTm9kZS0+cGFyZW50Tm9kZS0+cGFyZW50Tm9kZS0+cGFyZW50Tm9kZS0+YXR0cmlidXRlcy0+Z2V0TmFtZWRJdGVtKCdJRCcpLT5ub2RlVmFsdWU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkaWQgPSBzdWJzdHIoJGFzc2VydGlvblJlZmVyZW5jZU5vZGUtPmF0dHJpYnV0ZXMtPmdldE5hbWVkSXRlbSgnVVJJJyktPm5vZGVWYWx1ZSwgMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJG5hbWVRdWVyeSA9ICRhc3NlcnRpb25Ob2RlLiJbQElEPSckaWQnXSIgLiAkYXNzZXJ0aW9uWHBhdGg7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHhwYXRoLT5xdWVyeSgkbmFtZVF1ZXJ5KTsKICAgIH0KCiAgICAvKioKICAgICAqIEV4dHJhY3RzIG5vZGVzIHRoYXQgbWF0Y2ggdGhlIHF1ZXJ5IGZyb20gdGhlIERPTURvY3VtZW50IChSZXNwb25zZSBNZXNzYWdlKQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHF1ZXJ5IFhwYXRoIEV4cHJlc3Npb24KICAgICAqCiAgICAgKiBAcmV0dXJuIERPTU5vZGVMaXN0IFRoZSBxdWVyaWVkIG5vZGVzCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX3F1ZXJ5KCRxdWVyeSkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmVuY3J5cHRlZCkgewogICAgICAgICAgICByZXR1cm4gVXRpbHM6OnF1ZXJ5KCR0aGlzLT5kZWNyeXB0ZWREb2N1bWVudCwgJHF1ZXJ5KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gVXRpbHM6OnF1ZXJ5KCR0aGlzLT5kb2N1bWVudCwgJHF1ZXJ5KTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBEZWNyeXB0cyB0aGUgQXNzZXJ0aW9uIChET01Eb2N1bWVudCkKICAgICAqCiAgICAgKiBAcGFyYW0gXERvbU5vZGUgJGRvbSBEb21Eb2N1bWVudAogICAgICoKICAgICAqIEByZXR1cm4gRE9NRG9jdW1lbnQgRGVjcnlwdGVkIEFzc2VydGlvbgogICAgICoKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFZhbGlkYXRpb25FcnJvcgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZGVjcnlwdEFzc2VydGlvbihcRG9tTm9kZSAkZG9tKQogICAgewogICAgICAgICRwZW0gPSAkdGhpcy0+X3NldHRpbmdzLT5nZXRTUGtleSgpOwoKICAgICAgICBpZiAoZW1wdHkoJHBlbSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAgICAgICAgICAgIk5vIHByaXZhdGUga2V5IGF2YWlsYWJsZSwgY2hlY2sgc2V0dGluZ3MiLAogICAgICAgICAgICAgICAgRXJyb3I6OlBSSVZBVEVfS0VZX05PVF9GT1VORAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJG9iamVuYyA9IG5ldyBYTUxTZWNFbmMoKTsKICAgICAgICAkZW5jRGF0YSA9ICRvYmplbmMtPmxvY2F0ZUVuY3J5cHRlZERhdGEoJGRvbSk7CiAgICAgICAgaWYgKCEkZW5jRGF0YSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgIkNhbm5vdCBsb2NhdGUgZW5jcnlwdGVkIGFzc2VydGlvbiIsCiAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6Ok1JU1NJTkdfRU5DUllQVEVEX0VMRU1FTlQKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRvYmplbmMtPnNldE5vZGUoJGVuY0RhdGEpOwogICAgICAgICRvYmplbmMtPnR5cGUgPSAkZW5jRGF0YS0+Z2V0QXR0cmlidXRlKCJUeXBlIik7CiAgICAgICAgaWYgKCEkb2JqS2V5ID0gJG9iamVuYy0+bG9jYXRlS2V5KCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICJVbmtub3duIGFsZ29yaXRobSIsCiAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OktFWV9BTEdPUklUSE1fRVJST1IKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRrZXkgPSBudWxsOwogICAgICAgIGlmICgkb2JqS2V5SW5mbyA9ICRvYmplbmMtPmxvY2F0ZUtleUluZm8oJG9iaktleSkpIHsKICAgICAgICAgICAgaWYgKCRvYmpLZXlJbmZvLT5pc0VuY3J5cHRlZCkgewogICAgICAgICAgICAgICAgJG9iamVuY0tleSA9ICRvYmpLZXlJbmZvLT5lbmNyeXB0ZWRDdHg7CiAgICAgICAgICAgICAgICAkb2JqS2V5SW5mby0+bG9hZEtleSgkcGVtLCBmYWxzZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgJGtleSA9ICRvYmplbmNLZXktPmRlY3J5cHRLZXkoJG9iaktleUluZm8pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gc3ltbWV0cmljIGVuY3J5cHRpb24ga2V5IHN1cHBvcnQKICAgICAgICAgICAgICAgICRvYmpLZXlJbmZvLT5sb2FkS2V5KCRwZW0sIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChlbXB0eSgkb2JqS2V5LT5rZXkpKSB7CiAgICAgICAgICAgICRvYmpLZXktPmxvYWRLZXkoJGtleSk7CiAgICAgICAgfQoKICAgICAgICAkZGVjcnlwdGVkWE1MID0gJG9iamVuYy0+ZGVjcnlwdE5vZGUoJG9iaktleSwgZmFsc2UpOwogICAgICAgICRkZWNyeXB0ZWQgPSBuZXcgRE9NRG9jdW1lbnQoKTsKICAgICAgICAkY2hlY2sgPSBVdGlsczo6bG9hZFhNTCgkZGVjcnlwdGVkLCAkZGVjcnlwdGVkWE1MKTsKICAgICAgICBpZiAoJGNoZWNrID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogc3RyaW5nIGZyb20gZGVjcnlwdGVkIGFzc2VydGlvbiBjb3VsZCBub3QgYmUgbG9hZGVkIGludG8gYSBYTUwgZG9jdW1lbnQnKTsKICAgICAgICB9CgogICAgICAgIC8vIGNoZWNrIGlmIHRoZSBkZWNyeXB0ZWQgYXNzZXJ0aW9uIGNvbnRhaW5zIGFuIGVuY3J5cHRlZElECiAgICAgICAgJGVuY3J5cHRlZElEID0gJGRlY3J5cHRlZC0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ0VuY3J5cHRlZElEJyktPml0ZW0oMCk7CgogICAgICAgIGlmICgkZW5jcnlwdGVkSUQpIHsKICAgICAgICAgICAgLy8gZGVjcnlwdCB0aGUgZW5jcnlwdGVkSUQKICAgICAgICAgICAgJHRoaXMtPmVuY3J5cHRlZE5hbWVJZCA9IHRydWU7CiAgICAgICAgICAgICRlbmNyeXB0ZWREYXRhID0gJGVuY3J5cHRlZElELT5nZXRFbGVtZW50c0J5VGFnTmFtZSgnRW5jcnlwdGVkRGF0YScpLT5pdGVtKDApOwogICAgICAgICAgICAkbmFtZUlkID0gJHRoaXMtPmRlY3J5cHROYW1lSWQoJGVuY3J5cHRlZERhdGEsICRwZW0pOwogICAgICAgICAgICBVdGlsczo6dHJlZUNvcHlSZXBsYWNlKCRlbmNyeXB0ZWRJRCwgJG5hbWVJZCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGVuY0RhdGEtPnBhcmVudE5vZGUgaW5zdGFuY2VvZiBET01Eb2N1bWVudCkgewogICAgICAgICAgICByZXR1cm4gJGRlY3J5cHRlZDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkZGVjcnlwdGVkID0gJGRlY3J5cHRlZC0+ZG9jdW1lbnRFbGVtZW50OwogICAgICAgICAgICAkZW5jcnlwdGVkQXNzZXJ0aW9uID0gJGVuY0RhdGEtPnBhcmVudE5vZGU7CiAgICAgICAgICAgICRjb250YWluZXIgPSAkZW5jcnlwdGVkQXNzZXJ0aW9uLT5wYXJlbnROb2RlOwoKICAgICAgICAgICAgLy8gRml4IHBvc3NpYmxlIGlzc3VlIHdpdGggc2FtbCBuYW1lc3BhY2UKICAgICAgICAgICAgaWYgKCEkZGVjcnlwdGVkLT5oYXNBdHRyaWJ1dGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8nLCAneG1sbnM6c2FtbCcpCiAgICAgICAgICAgICAgICAmJiAhJGRlY3J5cHRlZC0+aGFzQXR0cmlidXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvJywgJ3htbG5zOnNhbWwyJykKICAgICAgICAgICAgICAgICYmICEkZGVjcnlwdGVkLT5oYXNBdHRyaWJ1dGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8nLCAneG1sbnMnKQogICAgICAgICAgICAgICAgJiYgISRjb250YWluZXItPmhhc0F0dHJpYnV0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLycsICd4bWxuczpzYW1sJykKICAgICAgICAgICAgICAgICYmICEkY29udGFpbmVyLT5oYXNBdHRyaWJ1dGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8nLCAneG1sbnM6c2FtbDInKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgIGlmIChzdHJwb3MoJGVuY3J5cHRlZEFzc2VydGlvbi0+dGFnTmFtZSwgJ3NhbWwyOicpICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICRucyA9ICd4bWxuczpzYW1sMic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cnBvcygkZW5jcnlwdGVkQXNzZXJ0aW9uLT50YWdOYW1lLCAnc2FtbDonKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAkbnMgPSAneG1sbnM6c2FtbCc7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRucyA9ICd4bWxucyc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkZGVjcnlwdGVkLT5zZXRBdHRyaWJ1dGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8nLCAkbnMsIENvbnN0YW50czo6TlNfU0FNTCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIFV0aWxzOjp0cmVlQ29weVJlcGxhY2UoJGVuY3J5cHRlZEFzc2VydGlvbiwgJGRlY3J5cHRlZCk7CgogICAgICAgICAgICAvLyBSZWJ1aWxkIHRoZSBET00gd2lsbCBmaXggaXNzdWVzIHdpdGggbmFtZXNwYWNlcyBhcyB3ZWxsCiAgICAgICAgICAgICRkb20gPSBuZXcgRE9NRG9jdW1lbnQoKTsKICAgICAgICAgICAgcmV0dXJuIFV0aWxzOjpsb2FkWE1MKCRkb20sICRjb250YWluZXItPm93bmVyRG9jdW1lbnQtPnNhdmVYTUwoKSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRGVjcnlwdCBFbmNyeXB0ZWRJRCBlbGVtZW50CiAgICAgKgogICAgICogQHBhcmFtIFxET01FbGVtZW50ICRlbmNyeXB0ZWREYXRhIFRoZSBlbmNyeXB0ZWQgZGF0YS4KICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICRrZXkgICAgICAgICAgICBUaGUgcHJpdmF0ZSBrZXkKICAgICAqCiAgICAgKiBAcmV0dXJuIFxET01FbGVtZW50ICBUaGUgZGVjcnlwdGVkIGVsZW1lbnQuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZGVjcnlwdE5hbWVJZChcRE9NRWxlbWVudCAkZW5jcnlwdGVkRGF0YSwgc3RyaW5nICRwZW0pCiAgICB7CiAgICAgICAgJG9iamVuYyA9IG5ldyBYTUxTZWNFbmMoKTsKICAgICAgICAkZW5jRGF0YSA9ICRvYmplbmMtPmxvY2F0ZUVuY3J5cHRlZERhdGEoJGVuY3J5cHRlZERhdGEpOwogICAgICAgICRvYmplbmMtPnNldE5vZGUoJGVuY0RhdGEpOwogICAgICAgICRvYmplbmMtPnR5cGUgPSAkZW5jRGF0YS0+Z2V0QXR0cmlidXRlKCJUeXBlIik7CiAgICAgICAgaWYgKCEkb2JqS2V5ID0gJG9iamVuYy0+bG9jYXRlS2V5KCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICJVbmtub3duIGFsZ29yaXRobSIsCiAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OktFWV9BTEdPUklUSE1fRVJST1IKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRrZXkgPSBudWxsOwogICAgICAgIGlmICgkb2JqS2V5SW5mbyA9ICRvYmplbmMtPmxvY2F0ZUtleUluZm8oJG9iaktleSkpIHsKICAgICAgICAgICAgaWYgKCRvYmpLZXlJbmZvLT5pc0VuY3J5cHRlZCkgewogICAgICAgICAgICAgICAgJG9iamVuY0tleSA9ICRvYmpLZXlJbmZvLT5lbmNyeXB0ZWRDdHg7CiAgICAgICAgICAgICAgICAkb2JqS2V5SW5mby0+bG9hZEtleSgkcGVtLCBmYWxzZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgJGtleSA9ICRvYmplbmNLZXktPmRlY3J5cHRLZXkoJG9iaktleUluZm8pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gc3ltbWV0cmljIGVuY3J5cHRpb24ga2V5IHN1cHBvcnQKICAgICAgICAgICAgICAgICRvYmpLZXlJbmZvLT5sb2FkS2V5KCRwZW0sIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChlbXB0eSgkb2JqS2V5LT5rZXkpKSB7CiAgICAgICAgICAgICRvYmpLZXktPmxvYWRLZXkoJGtleSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gVXRpbHM6OmRlY3J5cHRFbGVtZW50KCRlbmNyeXB0ZWREYXRhLCAkb2JqS2V5KTsKICAgIH0KCiAgICAvKioKICAgICAqIEFmdGVyIGV4ZWN1dGUgYSB2YWxpZGF0aW9uIHByb2Nlc3MsIGlmIGZhaWxzIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGNhdXNlCiAgICAgKgogICAgICogQHJldHVybiBFeGNlcHRpb258bnVsbCBDYXVzZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JFeGNlcHRpb24oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2Vycm9yOwogICAgfQoKICAgIC8qKgogICAgICogQWZ0ZXIgZXhlY3V0ZSBhIHZhbGlkYXRpb24gcHJvY2VzcywgaWYgZmFpbHMgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY2F1c2UKICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkZXNjYXBlIEFwcGx5IG9yIG5vdCBodG1sZW50aXRpZXMgdG8gdGhlIG1lc3NhZ2UuCiAgICAgKgogICAgICogQHJldHVybiBudWxsfHN0cmluZyBFcnJvciByZWFzb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEVycm9yKCRlc2NhcGUgPSB0cnVlKQogICAgewogICAgICAgICRlcnJvck1zZyA9IG51bGw7CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5fZXJyb3IpKSB7CiAgICAgICAgICAgIGlmICgkZXNjYXBlKSB7CiAgICAgICAgICAgICAgICAkZXJyb3JNc2cgPSBodG1sZW50aXRpZXMoJHRoaXMtPl9lcnJvci0+Z2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRlcnJvck1zZyA9ICR0aGlzLT5fZXJyb3ItPmdldE1lc3NhZ2UoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJGVycm9yTXNnOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgU0FNTCBSZXNwb25zZSBkb2N1bWVudCAoSWYgY29udGFpbnMgYW4gZW5jcnlwdGVkIGFzc2VydGlvbiwgZGVjcnlwdHMgaXQpCiAgICAgKgogICAgICogQHJldHVybiBEb21Eb2N1bWVudCBTQU1MIFJlc3BvbnNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRYTUxEb2N1bWVudCgpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5lbmNyeXB0ZWQpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5kZWNyeXB0ZWREb2N1bWVudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmRvY3VtZW50OwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/schemas/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/schemas/saml-schema-assertion-2.0.xsd</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVMtQVNDSUkiPz4KPHNjaGVtYQogICAgdGFyZ2V0TmFtZXNwYWNlPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXNzZXJ0aW9uIgogICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgogICAgeG1sbnM6c2FtbD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIKICAgIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIgogICAgeG1sbnM6eGVuYz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjIgogICAgZWxlbWVudEZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIKICAgIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIKICAgIGJsb2NrRGVmYXVsdD0ic3Vic3RpdHV0aW9uIgogICAgdmVyc2lvbj0iMi4wIj4KICAgIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIgogICAgICAgIHNjaGVtYUxvY2F0aW9uPSJ4bWxkc2lnLWNvcmUtc2NoZW1hLnhzZCIvPgogICAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jIyIKICAgICAgICBzY2hlbWFMb2NhdGlvbj0ieGVuYy1zY2hlbWEueHNkIi8+CiAgICA8YW5ub3RhdGlvbj4KICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KICAgICAgICAgICAgRG9jdW1lbnQgaWRlbnRpZmllcjogc2FtbC1zY2hlbWEtYXNzZXJ0aW9uLTIuMAogICAgICAgICAgICBMb2NhdGlvbjogaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvc2VjdXJpdHkvc2FtbC92Mi4wLwogICAgICAgICAgICBSZXZpc2lvbiBoaXN0b3J5OgogICAgICAgICAgICBWMS4wIChOb3ZlbWJlciwgMjAwMik6CiAgICAgICAgICAgICAgSW5pdGlhbCBTdGFuZGFyZCBTY2hlbWEuCiAgICAgICAgICAgIFYxLjEgKFNlcHRlbWJlciwgMjAwMyk6CiAgICAgICAgICAgICAgVXBkYXRlcyB3aXRoaW4gdGhlIHNhbWUgVjEuMCBuYW1lc3BhY2UuCiAgICAgICAgICAgIFYyLjAgKE1hcmNoLCAyMDA1KToKICAgICAgICAgICAgICBOZXcgYXNzZXJ0aW9uIHNjaGVtYSBmb3IgU0FNTCBWMi4wIG5hbWVzcGFjZS4KICAgICAgICA8L2RvY3VtZW50YXRpb24+CiAgICA8L2Fubm90YXRpb24+CiAgICA8YXR0cmlidXRlR3JvdXAgbmFtZT0iSUROYW1lUXVhbGlmaWVycyI+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJOYW1lUXVhbGlmaWVyIiB0eXBlPSJzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9IlNQTmFtZVF1YWxpZmllciIgdHlwZT0ic3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+CiAgICA8L2F0dHJpYnV0ZUdyb3VwPgogICAgPGVsZW1lbnQgbmFtZT0iQmFzZUlEIiB0eXBlPSJzYW1sOkJhc2VJREFic3RyYWN0VHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IkJhc2VJREFic3RyYWN0VHlwZSIgYWJzdHJhY3Q9InRydWUiPgogICAgICAgIDxhdHRyaWJ1dGVHcm91cCByZWY9InNhbWw6SUROYW1lUXVhbGlmaWVycyIvPgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9Ik5hbWVJRCIgdHlwZT0ic2FtbDpOYW1lSURUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iTmFtZUlEVHlwZSI+CiAgICAgICAgPHNpbXBsZUNvbnRlbnQ+CiAgICAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic3RyaW5nIj4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGVHcm91cCByZWY9InNhbWw6SUROYW1lUXVhbGlmaWVycyIvPgogICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJGb3JtYXQiIHR5cGU9ImFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgogICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJTUFByb3ZpZGVkSUQiIHR5cGU9InN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgogICAgICAgICAgICA8L2V4dGVuc2lvbj4KICAgICAgICA8L3NpbXBsZUNvbnRlbnQ+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IkVuY3J5cHRlZEVsZW1lbnRUeXBlIj4KICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ieGVuYzpFbmNyeXB0ZWREYXRhIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ieGVuYzpFbmNyeXB0ZWRLZXkiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICA8L3NlcXVlbmNlPgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9IkVuY3J5cHRlZElEIiB0eXBlPSJzYW1sOkVuY3J5cHRlZEVsZW1lbnRUeXBlIi8+CiAgICA8ZWxlbWVudCBuYW1lPSJJc3N1ZXIiIHR5cGU9InNhbWw6TmFtZUlEVHlwZSIvPgogICAgPGVsZW1lbnQgbmFtZT0iQXNzZXJ0aW9uSURSZWYiIHR5cGU9Ik5DTmFtZSIvPgogICAgPGVsZW1lbnQgbmFtZT0iQXNzZXJ0aW9uVVJJUmVmIiB0eXBlPSJhbnlVUkkiLz4KICAgIDxlbGVtZW50IG5hbWU9IkFzc2VydGlvbiIgdHlwZT0ic2FtbDpBc3NlcnRpb25UeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iQXNzZXJ0aW9uVHlwZSI+CiAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6SXNzdWVyIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZHM6U2lnbmF0dXJlIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOlN1YmplY3QiIG1pbk9jY3Vycz0iMCIvPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6Q29uZGl0aW9ucyIgbWluT2NjdXJzPSIwIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpBZHZpY2UiIG1pbk9jY3Vycz0iMCIvPgogICAgICAgICAgICA8Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOlN0YXRlbWVudCIvPgogICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkF1dGhuU3RhdGVtZW50Ii8+CiAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXV0aHpEZWNpc2lvblN0YXRlbWVudCIvPgogICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkF0dHJpYnV0ZVN0YXRlbWVudCIvPgogICAgICAgICAgICA8L2Nob2ljZT4KICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iVmVyc2lvbiIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJJRCIgdHlwZT0iSUQiIHVzZT0icmVxdWlyZWQiLz4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9Iklzc3VlSW5zdGFudCIgdHlwZT0iZGF0ZVRpbWUiIHVzZT0icmVxdWlyZWQiLz4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJTdWJqZWN0IiB0eXBlPSJzYW1sOlN1YmplY3RUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iU3ViamVjdFR5cGUiPgogICAgICAgIDxjaG9pY2U+CiAgICAgICAgICAgIDxzZXF1ZW5jZT4KICAgICAgICAgICAgICAgIDxjaG9pY2U+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkJhc2VJRCIvPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpOYW1lSUQiLz4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6RW5jcnlwdGVkSUQiLz4KICAgICAgICAgICAgICAgIDwvY2hvaWNlPgogICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOlN1YmplY3RDb25maXJtYXRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgPC9zZXF1ZW5jZT4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOlN1YmplY3RDb25maXJtYXRpb24iIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgPC9jaG9pY2U+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iU3ViamVjdENvbmZpcm1hdGlvbiIgdHlwZT0ic2FtbDpTdWJqZWN0Q29uZmlybWF0aW9uVHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IlN1YmplY3RDb25maXJtYXRpb25UeXBlIj4KICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgIDxjaG9pY2UgbWluT2NjdXJzPSIwIj4KICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpCYXNlSUQiLz4KICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpOYW1lSUQiLz4KICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpFbmNyeXB0ZWRJRCIvPgogICAgICAgICAgICA8L2Nob2ljZT4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOlN1YmplY3RDb25maXJtYXRpb25EYXRhIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iTWV0aG9kIiB0eXBlPSJhbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJTdWJqZWN0Q29uZmlybWF0aW9uRGF0YSIgdHlwZT0ic2FtbDpTdWJqZWN0Q29uZmlybWF0aW9uRGF0YVR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJTdWJqZWN0Q29uZmlybWF0aW9uRGF0YVR5cGUiIG1peGVkPSJ0cnVlIj4KICAgICAgICA8Y29tcGxleENvbnRlbnQ+CiAgICAgICAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJhbnlUeXBlIj4KICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KICAgICAgICAgICAgICAgICAgICA8YW55IG5hbWVzcGFjZT0iIyNhbnkiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJOb3RCZWZvcmUiIHR5cGU9ImRhdGVUaW1lIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Ik5vdE9uT3JBZnRlciIgdHlwZT0iZGF0ZVRpbWUiIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iUmVjaXBpZW50IiB0eXBlPSJhbnlVUkkiIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iSW5SZXNwb25zZVRvIiB0eXBlPSJOQ05hbWUiIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iQWRkcmVzcyIgdHlwZT0ic3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgICAgICAgICA8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KICAgICAgICAgICAgPC9yZXN0cmljdGlvbj4KICAgICAgICA8L2NvbXBsZXhDb250ZW50PgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJLZXlJbmZvQ29uZmlybWF0aW9uRGF0YVR5cGUiIG1peGVkPSJmYWxzZSI+CiAgICAgICAgPGNvbXBsZXhDb250ZW50PgogICAgICAgICAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic2FtbDpTdWJqZWN0Q29uZmlybWF0aW9uRGF0YVR5cGUiPgogICAgICAgICAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZHM6S2V5SW5mbyIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CiAgICAgICAgICAgIDwvcmVzdHJpY3Rpb24+CiAgICAgICAgPC9jb21wbGV4Q29udGVudD4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJDb25kaXRpb25zIiB0eXBlPSJzYW1sOkNvbmRpdGlvbnNUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iQ29uZGl0aW9uc1R5cGUiPgogICAgICAgIDxjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpDb25kaXRpb24iLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkF1ZGllbmNlUmVzdHJpY3Rpb24iLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOk9uZVRpbWVVc2UiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOlByb3h5UmVzdHJpY3Rpb24iLz4KICAgICAgICA8L2Nob2ljZT4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9Ik5vdEJlZm9yZSIgdHlwZT0iZGF0ZVRpbWUiIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9Ik5vdE9uT3JBZnRlciIgdHlwZT0iZGF0ZVRpbWUiIHVzZT0ib3B0aW9uYWwiLz4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJDb25kaXRpb24iIHR5cGU9InNhbWw6Q29uZGl0aW9uQWJzdHJhY3RUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iQ29uZGl0aW9uQWJzdHJhY3RUeXBlIiBhYnN0cmFjdD0idHJ1ZSIvPgogICAgPGVsZW1lbnQgbmFtZT0iQXVkaWVuY2VSZXN0cmljdGlvbiIgdHlwZT0ic2FtbDpBdWRpZW5jZVJlc3RyaWN0aW9uVHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IkF1ZGllbmNlUmVzdHJpY3Rpb25UeXBlIj4KICAgICAgICA8Y29tcGxleENvbnRlbnQ+CiAgICAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2FtbDpDb25kaXRpb25BYnN0cmFjdFR5cGUiPgogICAgICAgICAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpBdWRpZW5jZSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CiAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgogICAgICAgIDwvY29tcGxleENvbnRlbnQ+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iQXVkaWVuY2UiIHR5cGU9ImFueVVSSSIvPgogICAgPGVsZW1lbnQgbmFtZT0iT25lVGltZVVzZSIgdHlwZT0ic2FtbDpPbmVUaW1lVXNlVHlwZSIgLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJPbmVUaW1lVXNlVHlwZSI+CiAgICAgICAgPGNvbXBsZXhDb250ZW50PgogICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNhbWw6Q29uZGl0aW9uQWJzdHJhY3RUeXBlIi8+CiAgICAgICAgPC9jb21wbGV4Q29udGVudD4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJQcm94eVJlc3RyaWN0aW9uIiB0eXBlPSJzYW1sOlByb3h5UmVzdHJpY3Rpb25UeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iUHJveHlSZXN0cmljdGlvblR5cGUiPgogICAgPGNvbXBsZXhDb250ZW50PgogICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2FtbDpDb25kaXRpb25BYnN0cmFjdFR5cGUiPgogICAgICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXVkaWVuY2UiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgPC9zZXF1ZW5jZT4KICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJDb3VudCIgdHlwZT0ibm9uTmVnYXRpdmVJbnRlZ2VyIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgPC9leHRlbnNpb24+Cgk8L2NvbXBsZXhDb250ZW50PgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9IkFkdmljZSIgdHlwZT0ic2FtbDpBZHZpY2VUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iQWR2aWNlVHlwZSI+CiAgICAgICAgPGNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkFzc2VydGlvbklEUmVmIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpBc3NlcnRpb25VUklSZWYiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkFzc2VydGlvbiIvPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6RW5jcnlwdGVkQXNzZXJ0aW9uIi8+CiAgICAgICAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgogICAgICAgIDwvY2hvaWNlPgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9IkVuY3J5cHRlZEFzc2VydGlvbiIgdHlwZT0ic2FtbDpFbmNyeXB0ZWRFbGVtZW50VHlwZSIvPgogICAgPGVsZW1lbnQgbmFtZT0iU3RhdGVtZW50IiB0eXBlPSJzYW1sOlN0YXRlbWVudEFic3RyYWN0VHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IlN0YXRlbWVudEFic3RyYWN0VHlwZSIgYWJzdHJhY3Q9InRydWUiLz4KICAgIDxlbGVtZW50IG5hbWU9IkF1dGhuU3RhdGVtZW50IiB0eXBlPSJzYW1sOkF1dGhuU3RhdGVtZW50VHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IkF1dGhuU3RhdGVtZW50VHlwZSI+CiAgICAgICAgPGNvbXBsZXhDb250ZW50PgogICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNhbWw6U3RhdGVtZW50QWJzdHJhY3RUeXBlIj4KICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6U3ViamVjdExvY2FsaXR5IiBtaW5PY2N1cnM9IjAiLz4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXV0aG5Db250ZXh0Ii8+CiAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJBdXRobkluc3RhbnQiIHR5cGU9ImRhdGVUaW1lIiB1c2U9InJlcXVpcmVkIi8+CiAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9IlNlc3Npb25JbmRleCIgdHlwZT0ic3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9IlNlc3Npb25Ob3RPbk9yQWZ0ZXIiIHR5cGU9ImRhdGVUaW1lIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgogICAgICAgIDwvY29tcGxleENvbnRlbnQ+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iU3ViamVjdExvY2FsaXR5IiB0eXBlPSJzYW1sOlN1YmplY3RMb2NhbGl0eVR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJTdWJqZWN0TG9jYWxpdHlUeXBlIj4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9IkFkZHJlc3MiIHR5cGU9InN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iRE5TTmFtZSIgdHlwZT0ic3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iQXV0aG5Db250ZXh0IiB0eXBlPSJzYW1sOkF1dGhuQ29udGV4dFR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJBdXRobkNvbnRleHRUeXBlIj4KICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgIDxjaG9pY2U+CiAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkF1dGhuQ29udGV4dENsYXNzUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgPGNob2ljZSBtaW5PY2N1cnM9IjAiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXV0aG5Db250ZXh0RGVjbCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXV0aG5Db250ZXh0RGVjbFJlZiIvPgogICAgICAgICAgICAgICAgICAgIDwvY2hvaWNlPgogICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KICAgICAgICAgICAgICAgIDxjaG9pY2U+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkF1dGhuQ29udGV4dERlY2wiLz4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXV0aG5Db250ZXh0RGVjbFJlZiIvPgogICAgICAgICAgICAgICAgPC9jaG9pY2U+CiAgICAgICAgICAgIDwvY2hvaWNlPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXV0aGVudGljYXRpbmdBdXRob3JpdHkiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICA8L3NlcXVlbmNlPgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9IkF1dGhuQ29udGV4dENsYXNzUmVmIiB0eXBlPSJhbnlVUkkiLz4KICAgIDxlbGVtZW50IG5hbWU9IkF1dGhuQ29udGV4dERlY2xSZWYiIHR5cGU9ImFueVVSSSIvPgogICAgPGVsZW1lbnQgbmFtZT0iQXV0aG5Db250ZXh0RGVjbCIgdHlwZT0iYW55VHlwZSIvPgogICAgPGVsZW1lbnQgbmFtZT0iQXV0aGVudGljYXRpbmdBdXRob3JpdHkiIHR5cGU9ImFueVVSSSIvPgogICAgPGVsZW1lbnQgbmFtZT0iQXV0aHpEZWNpc2lvblN0YXRlbWVudCIgdHlwZT0ic2FtbDpBdXRoekRlY2lzaW9uU3RhdGVtZW50VHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IkF1dGh6RGVjaXNpb25TdGF0ZW1lbnRUeXBlIj4KICAgICAgICA8Y29tcGxleENvbnRlbnQ+CiAgICAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2FtbDpTdGF0ZW1lbnRBYnN0cmFjdFR5cGUiPgogICAgICAgICAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpBY3Rpb24iIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkV2aWRlbmNlIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CiAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9IlJlc291cmNlIiB0eXBlPSJhbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iRGVjaXNpb24iIHR5cGU9InNhbWw6RGVjaXNpb25UeXBlIiB1c2U9InJlcXVpcmVkIi8+CiAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgogICAgICAgIDwvY29tcGxleENvbnRlbnQ+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPHNpbXBsZVR5cGUgbmFtZT0iRGVjaXNpb25UeXBlIj4KICAgICAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KICAgICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJQZXJtaXQiLz4KICAgICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJEZW55Ii8+CiAgICAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iSW5kZXRlcm1pbmF0ZSIvPgogICAgICAgIDwvcmVzdHJpY3Rpb24+CiAgICA8L3NpbXBsZVR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJBY3Rpb24iIHR5cGU9InNhbWw6QWN0aW9uVHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFjdGlvblR5cGUiPgogICAgICAgIDxzaW1wbGVDb250ZW50PgogICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InN0cmluZyI+CiAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Ik5hbWVzcGFjZSIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+CiAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgogICAgICAgIDwvc2ltcGxlQ29udGVudD4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJFdmlkZW5jZSIgdHlwZT0ic2FtbDpFdmlkZW5jZVR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJFdmlkZW5jZVR5cGUiPgogICAgICAgIDxjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXNzZXJ0aW9uSURSZWYiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkFzc2VydGlvblVSSVJlZiIvPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXNzZXJ0aW9uIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpFbmNyeXB0ZWRBc3NlcnRpb24iLz4KICAgICAgICA8L2Nob2ljZT4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVTdGF0ZW1lbnQiIHR5cGU9InNhbWw6QXR0cmlidXRlU3RhdGVtZW50VHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IkF0dHJpYnV0ZVN0YXRlbWVudFR5cGUiPgogICAgICAgIDxjb21wbGV4Q29udGVudD4KICAgICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzYW1sOlN0YXRlbWVudEFic3RyYWN0VHlwZSI+CiAgICAgICAgICAgICAgICA8Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXR0cmlidXRlIi8+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkVuY3J5cHRlZEF0dHJpYnV0ZSIvPgogICAgICAgICAgICAgICAgPC9jaG9pY2U+CiAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgogICAgICAgIDwvY29tcGxleENvbnRlbnQ+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iQXR0cmlidXRlIiB0eXBlPSJzYW1sOkF0dHJpYnV0ZVR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJBdHRyaWJ1dGVUeXBlIj4KICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpBdHRyaWJ1dGVWYWx1ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgIDwvc2VxdWVuY2U+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJOYW1lIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9Ik5hbWVGb3JtYXQiIHR5cGU9ImFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iRnJpZW5kbHlOYW1lIiB0eXBlPSJzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICA8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVWYWx1ZSIgdHlwZT0iYW55VHlwZSIgbmlsbGFibGU9InRydWUiLz4KICAgIDxlbGVtZW50IG5hbWU9IkVuY3J5cHRlZEF0dHJpYnV0ZSIgdHlwZT0ic2FtbDpFbmNyeXB0ZWRFbGVtZW50VHlwZSIvPgo8L3NjaGVtYT4K]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/schemas/saml-schema-authn-context-2.0.xsd</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHhzOnNjaGVtYSAKICB0YXJnZXROYW1lc3BhY2U9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphYyIKICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCiAgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphYyIKICBibG9ja0RlZmF1bHQ9InN1YnN0aXR1dGlvbiIKICB2ZXJzaW9uPSIyLjAiPgoKICA8eHM6YW5ub3RhdGlvbj4KICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICBEb2N1bWVudCBpZGVudGlmaWVyOiBzYW1sLXNjaGVtYS1hdXRobi1jb250ZXh0LTIuMAogICAgICBMb2NhdGlvbjogaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvc2VjdXJpdHkvc2FtbC92Mi4wLwogICAgICBSZXZpc2lvbiBoaXN0b3J5OgogICAgICAgIFYyLjAgKE1hcmNoLCAyMDA1KToKICAgICAgICAgIE5ldyBjb3JlIGF1dGhlbnRpY2F0aW9uIGNvbnRleHQgc2NoZW1hIGZvciBTQU1MIFYyLjAuIAogICAgICAgICAgVGhpcyBpcyBqdXN0IGFuIGluY2x1ZGUgb2YgYWxsIHR5cGVzIGZyb20gdGhlIHNjaGVtYQogICAgICAgICAgcmVmZXJyZWQgdG8gaW4gdGhlIGluY2x1ZGUgc3RhdGVtZW50IGJlbG93LgogICAgPC94czpkb2N1bWVudGF0aW9uPgogIDwveHM6YW5ub3RhdGlvbj4KCiAgPHhzOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNhbWwtc2NoZW1hLWF1dGhuLWNvbnRleHQtdHlwZXMtMi4wLnhzZCIvPgoKPC94czpzY2hlbWE+]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/schemas/saml-schema-authn-context-types-2.0.xsd</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHhzOnNjaGVtYQogIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKICB2ZXJzaW9uPSIyLjAiPgoKICA8eHM6YW5ub3RhdGlvbj4KICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICBEb2N1bWVudCBpZGVudGlmaWVyOiBzYW1sLXNjaGVtYS1hdXRobi1jb250ZXh0LXR5cGVzLTIuMAogICAgICBMb2NhdGlvbjogaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvc2VjdXJpdHkvc2FtbC92Mi4wLwogICAgICBSZXZpc2lvbiBoaXN0b3J5OgogICAgICAgICAgVjIuMCAoTWFyY2gsIDIwMDUpOgogICAgICAgICAgTmV3IGNvcmUgYXV0aGVudGljYXRpb24gY29udGV4dCBzY2hlbWEgdHlwZXMgZm9yIFNBTUwgVjIuMC4KICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICA8L3hzOmFubm90YXRpb24+CgogIDx4czplbGVtZW50IG5hbWU9IkF1dGhlbnRpY2F0aW9uQ29udGV4dERlY2xhcmF0aW9uIiB0eXBlPSJBdXRobkNvbnRleHREZWNsYXJhdGlvbkJhc2VUeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBBIHBhcnRpY3VsYXIgYXNzZXJ0aW9uIG9uIGFuIGlkZW50aXR5CiAgICAgICAgcHJvdmlkZXIncyBwYXJ0IHdpdGggcmVzcGVjdCB0byB0aGUgYXV0aGVudGljYXRpb24KICAgICAgICBjb250ZXh0IGFzc29jaWF0ZWQgd2l0aCBhbiBhdXRoZW50aWNhdGlvbiBhc3NlcnRpb24uCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IklkZW50aWZpY2F0aW9uIiB0eXBlPSJJZGVudGlmaWNhdGlvblR5cGUiPgogICAgPHhzOmFubm90YXRpb24+CiAgICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICAgIFJlZmVycyB0byB0aG9zZSBjaGFyYWN0ZXJpc3RpY3MgdGhhdCBkZXNjcmliZSB0aGUKICAgICAgICBwcm9jZXNzZXMgYW5kIG1lY2hhbmlzbXMKICAgICAgICB0aGUgQXV0aGVudGljYXRpb24gQXV0aG9yaXR5IHVzZXMgdG8gaW5pdGlhbGx5IGNyZWF0ZQogICAgICAgIGFuIGFzc29jaWF0aW9uIGJldHdlZW4gYSBQcmluY2lwYWwKICAgICAgICBhbmQgdGhlIGlkZW50aXR5IChvciBuYW1lKSBieSB3aGljaCB0aGUgUHJpbmNpcGFsIHdpbGwKICAgICAgICBiZSBrbm93bgogICAgICA8L3hzOmRvY3VtZW50YXRpb24+CiAgICA8L3hzOmFubm90YXRpb24+CiAgPC94czplbGVtZW50PgoKICA8eHM6ZWxlbWVudCBuYW1lPSJQaHlzaWNhbFZlcmlmaWNhdGlvbiI+CiAgICA8eHM6YW5ub3RhdGlvbj4KICAgICAgPHhzOmRvY3VtZW50YXRpb24+CiAgICAgICAgVGhpcyBlbGVtZW50IGluZGljYXRlcyB0aGF0IGlkZW50aWZpY2F0aW9uIGhhcyBiZWVuCiAgICAgICAgcGVyZm9ybWVkIGluIGEgcGh5c2ljYWwKICAgICAgICBmYWNlLXRvLWZhY2UgbWVldGluZyB3aXRoIHRoZSBwcmluY2lwYWwgYW5kIG5vdCBpbiBhbgogICAgICAgIG9ubGluZSBtYW5uZXIuCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjcmVkZW50aWFsTGV2ZWwiPgogICAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5NVE9LRU4iPgogICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InByaW1hcnkiLz4KICAgICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWNvbmRhcnkiLz4KICAgICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgoKICA8eHM6ZWxlbWVudCBuYW1lPSJXcml0dGVuQ29uc2VudCIgdHlwZT0iRXh0ZW5zaW9uT25seVR5cGUiLz4KCiAgPHhzOmVsZW1lbnQgbmFtZT0iVGVjaG5pY2FsUHJvdGVjdGlvbiIgdHlwZT0iVGVjaG5pY2FsUHJvdGVjdGlvbkJhc2VUeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBSZWZlcnMgdG8gdGhvc2UgY2hhcmFjdGVyaXN0aWNzIHRoYXQgZGVzY3JpYmUgaG93IHRoZQogICAgICAgICdzZWNyZXQnICh0aGUga25vd2xlZGdlIG9yIHBvc3Nlc3Npb24KICAgICAgICBvZiB3aGljaCBhbGxvd3MgdGhlIFByaW5jaXBhbCB0byBhdXRoZW50aWNhdGUgdG8gdGhlCiAgICAgICAgQXV0aGVudGljYXRpb24gQXV0aG9yaXR5KSBpcyBrZXB0IHNlY3VyZQogICAgICA8L3hzOmRvY3VtZW50YXRpb24+CiAgICA8L3hzOmFubm90YXRpb24+CiAgPC94czplbGVtZW50PgoKICA8eHM6ZWxlbWVudCBuYW1lPSJTZWNyZXRLZXlQcm90ZWN0aW9uIiB0eXBlPSJTZWNyZXRLZXlQcm90ZWN0aW9uVHlwZSI+CiAgICA8eHM6YW5ub3RhdGlvbj4KICAgICAgPHhzOmRvY3VtZW50YXRpb24+CiAgICAgICAgVGhpcyBlbGVtZW50IGluZGljYXRlcyB0aGUgdHlwZXMgYW5kIHN0cmVuZ3RocyBvZgogICAgICAgIGZhY2lsaXRpZXMKICAgICAgICBvZiBhIFVBIHVzZWQgdG8gcHJvdGVjdCBhIHNoYXJlZCBzZWNyZXQga2V5IGZyb20KICAgICAgICB1bmF1dGhvcml6ZWQgYWNjZXNzIGFuZC9vciB1c2UuCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IlByaXZhdGVLZXlQcm90ZWN0aW9uIiB0eXBlPSJQcml2YXRlS2V5UHJvdGVjdGlvblR5cGUiPgogICAgPHhzOmFubm90YXRpb24+CiAgICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICAgIFRoaXMgZWxlbWVudCBpbmRpY2F0ZXMgdGhlIHR5cGVzIGFuZCBzdHJlbmd0aHMgb2YKICAgICAgICBmYWNpbGl0aWVzCiAgICAgICAgb2YgYSBVQSB1c2VkIHRvIHByb3RlY3QgYSBwcml2YXRlIGtleSBmcm9tCiAgICAgICAgdW5hdXRob3JpemVkIGFjY2VzcyBhbmQvb3IgdXNlLgogICAgICA8L3hzOmRvY3VtZW50YXRpb24+CiAgICA8L3hzOmFubm90YXRpb24+CiAgPC94czplbGVtZW50PgoKICA8eHM6ZWxlbWVudCBuYW1lPSJLZXlBY3RpdmF0aW9uIiB0eXBlPSJLZXlBY3RpdmF0aW9uVHlwZSI+CiAgICA8eHM6YW5ub3RhdGlvbj4KICAgICAgPHhzOmRvY3VtZW50YXRpb24+VGhlIGFjdGlvbnMgdGhhdCBtdXN0IGJlIHBlcmZvcm1lZAogICAgICAgIGJlZm9yZSB0aGUgcHJpdmF0ZSBrZXkgY2FuIGJlIHVzZWQuIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IktleVNoYXJpbmciIHR5cGU9IktleVNoYXJpbmdUeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj5XaGV0aGVyIG9yIG5vdCB0aGUgcHJpdmF0ZSBrZXkgaXMgc2hhcmVkCiAgICAgICAgd2l0aCB0aGUgY2VydGlmaWNhdGUgYXV0aG9yaXR5LjwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IktleVN0b3JhZ2UiIHR5cGU9IktleVN0b3JhZ2VUeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBJbiB3aGljaCBtZWRpdW0gaXMgdGhlIGtleSBzdG9yZWQuCiAgICAgICAgbWVtb3J5IC0gdGhlIGtleSBpcyBzdG9yZWQgaW4gbWVtb3J5LgogICAgICAgIHNtYXJ0Y2FyZCAtIHRoZSBrZXkgaXMgc3RvcmVkIGluIGEgc21hcnRjYXJkLgogICAgICAgIHRva2VuIC0gdGhlIGtleSBpcyBzdG9yZWQgaW4gYSBoYXJkd2FyZSB0b2tlbi4KICAgICAgICBNb2JpbGVEZXZpY2UgLSB0aGUga2V5IGlzIHN0b3JlZCBpbiBhIG1vYmlsZSBkZXZpY2UuCiAgICAgICAgTW9iaWxlQXV0aENhcmQgLSB0aGUga2V5IGlzIHN0b3JlZCBpbiBhIG1vYmlsZQogICAgICAgIGF1dGhlbnRpY2F0aW9uIGNhcmQuCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IlN1YnNjcmliZXJMaW5lTnVtYmVyIiB0eXBlPSJFeHRlbnNpb25Pbmx5VHlwZSIvPgogIDx4czplbGVtZW50IG5hbWU9IlVzZXJTdWZmaXgiIHR5cGU9IkV4dGVuc2lvbk9ubHlUeXBlIi8+CgogIDx4czplbGVtZW50IG5hbWU9IlBhc3N3b3JkIiB0eXBlPSJQYXNzd29yZFR5cGUiPgogICAgPHhzOmFubm90YXRpb24+CiAgICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICAgIFRoaXMgZWxlbWVudCBpbmRpY2F0ZXMgdGhhdCBhIHBhc3N3b3JkIChvciBwYXNzcGhyYXNlKQogICAgICAgIGhhcyBiZWVuIHVzZWQgdG8KICAgICAgICBhdXRoZW50aWNhdGUgdGhlIFByaW5jaXBhbCB0byBhIHJlbW90ZSBzeXN0ZW0uCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IkFjdGl2YXRpb25QaW4iIHR5cGU9IkFjdGl2YXRpb25QaW5UeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBUaGlzIGVsZW1lbnQgaW5kaWNhdGVzIHRoYXQgYSBQaW4gKFBlcnNvbmFsCiAgICAgICAgSWRlbnRpZmljYXRpb24gTnVtYmVyKSBoYXMgYmVlbiB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB0aGUgUHJpbmNpcGFsIHRvCiAgICAgICAgc29tZSBsb2NhbCBzeXN0ZW0gaW4gb3JkZXIgdG8gYWN0aXZhdGUgYSBrZXkuCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IlRva2VuIiB0eXBlPSJUb2tlblR5cGUiPgogICAgPHhzOmFubm90YXRpb24+CiAgICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICAgIFRoaXMgZWxlbWVudCBpbmRpY2F0ZXMgdGhhdCBhIGhhcmR3YXJlIG9yIHNvZnR3YXJlCiAgICAgICAgdG9rZW4gaXMgdXNlZAogICAgICAgIGFzIGEgbWV0aG9kIG9mIGlkZW50aWZ5aW5nIHRoZSBQcmluY2lwYWwuCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IlRpbWVTeW5jVG9rZW4iIHR5cGU9IlRpbWVTeW5jVG9rZW5UeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBUaGlzIGVsZW1lbnQgaW5kaWNhdGVzIHRoYXQgYSB0aW1lIHN5bmNocm9uaXphdGlvbgogICAgICAgIHRva2VuIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIFByaW5jaXBhbC4gaGFyZHdhcmUgLQogICAgICAgIHRoZSB0aW1lIHN5bmNob25pemF0aW9uCiAgICAgICAgdG9rZW4gaGFzIGJlZW4gaW1wbGVtZW50ZWQgaW4gaGFyZHdhcmUuIHNvZnR3YXJlIC0gdGhlCiAgICAgICAgdGltZSBzeW5jaHJvbml6YXRpb24KICAgICAgICB0b2tlbiBoYXMgYmVlbiBpbXBsZW1lbnRlZCBpbiBzb2Z0d2FyZS4gU2VlZExlbmd0aCAtCiAgICAgICAgdGhlIGxlbmd0aCwgaW4gYml0cywgb2YgdGhlCiAgICAgICAgcmFuZG9tIHNlZWQgdXNlZCBpbiB0aGUgdGltZSBzeW5jaHJvbml6YXRpb24gdG9rZW4uCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IlNtYXJ0Y2FyZCIgdHlwZT0iRXh0ZW5zaW9uT25seVR5cGUiPgogICAgPHhzOmFubm90YXRpb24+CiAgICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICAgIFRoaXMgZWxlbWVudCBpbmRpY2F0ZXMgdGhhdCBhIHNtYXJ0Y2FyZCBpcyB1c2VkIHRvCiAgICAgICAgaWRlbnRpdHkgdGhlIFByaW5jaXBhbC4KICAgICAgPC94czpkb2N1bWVudGF0aW9uPgogICAgPC94czphbm5vdGF0aW9uPgogIDwveHM6ZWxlbWVudD4KCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGVuZ3RoIiB0eXBlPSJMZW5ndGhUeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBUaGlzIGVsZW1lbnQgaW5kaWNhdGVzIHRoZSBtaW5pbXVtIGFuZC9vciBtYXhpbXVtCiAgICAgICAgQVNDSUkgbGVuZ3RoIG9mIHRoZSBwYXNzd29yZCB3aGljaCBpcyBlbmZvcmNlZCAoYnkgdGhlIFVBIG9yIHRoZQogICAgICAgIElkUCkuIEluIG90aGVyIHdvcmRzLCB0aGlzIGlzIHRoZSBtaW5pbXVtIGFuZC9vciBtYXhpbXVtIG51bWJlciBvZgogICAgICAgIEFTQ0lJIGNoYXJhY3RlcnMgcmVxdWlyZWQgdG8gcmVwcmVzZW50IGEgdmFsaWQgcGFzc3dvcmQuCiAgICAgICAgbWluIC0gdGhlIG1pbmltdW0gbnVtYmVyIG9mIEFTQ0lJIGNoYXJhY3RlcnMgcmVxdWlyZWQKICAgICAgICBpbiBhIHZhbGlkIHBhc3N3b3JkLCBhcyBlbmZvcmNlZCBieSB0aGUgVUEgb3IgdGhlIElkUC4KICAgICAgICBtYXggLSB0aGUgbWF4aW11bSBudW1iZXIgb2YgQVNDSUkgY2hhcmFjdGVycyByZXF1aXJlZAogICAgICAgIGluIGEgdmFsaWQgcGFzc3dvcmQsIGFzIGVuZm9yY2VkIGJ5IHRoZSBVQSBvciB0aGUgSWRQLgogICAgICA8L3hzOmRvY3VtZW50YXRpb24+CiAgICA8L3hzOmFubm90YXRpb24+CiAgPC94czplbGVtZW50PgoKICA8eHM6ZWxlbWVudCBuYW1lPSJBY3RpdmF0aW9uTGltaXQiIHR5cGU9IkFjdGl2YXRpb25MaW1pdFR5cGUiPgogICAgPHhzOmFubm90YXRpb24+CiAgICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICAgIFRoaXMgZWxlbWVudCBpbmRpY2F0ZXMgdGhlIGxlbmd0aCBvZiB0aW1lIGZvciB3aGljaCBhbgogICAgICAgIFBJTi1iYXNlZCBhdXRoZW50aWNhdGlvbiBpcyB2YWxpZC4KICAgICAgPC94czpkb2N1bWVudGF0aW9uPgogICAgPC94czphbm5vdGF0aW9uPgogIDwveHM6ZWxlbWVudD4KCiAgPHhzOmVsZW1lbnQgbmFtZT0iR2VuZXJhdGlvbiI+CiAgICA8eHM6YW5ub3RhdGlvbj4KICAgICAgPHhzOmRvY3VtZW50YXRpb24+CiAgICAgICAgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHBhc3N3b3JkIHdhcyBjaG9zZW4gYnkgdGhlCiAgICAgICAgUHJpbmNpcGFsIG9yIGF1dG8tc3VwcGxpZWQgYnkgdGhlIEF1dGhlbnRpY2F0aW9uIEF1dGhvcml0eS4KICAgICAgICBwcmluY2lwYWxjaG9zZW4gLSB0aGUgUHJpbmNpcGFsIGlzIGFsbG93ZWQgdG8gY2hvb3NlCiAgICAgICAgdGhlIHZhbHVlIG9mIHRoZSBwYXNzd29yZC4gVGhpcyBpcyB0cnVlIGV2ZW4gaWYKICAgICAgICB0aGUgaW5pdGlhbCBwYXNzd29yZCBpcyBjaG9zZW4gYXQgcmFuZG9tIGJ5IHRoZSBVQSBvcgogICAgICAgIHRoZSBJZFAgYW5kIHRoZSBQcmluY2lwYWwgaXMgdGhlbiBmcmVlIHRvIGNoYW5nZQogICAgICAgIHRoZSBwYXNzd29yZC4KICAgICAgICBhdXRvbWF0aWMgLSB0aGUgcGFzc3dvcmQgaXMgY2hvc2VuIGJ5IHRoZSBVQSBvciB0aGUKICAgICAgICBJZFAgdG8gYmUgY3J5cHRvZ3JhcGhpY2FsbHkgc3Ryb25nIGluIHNvbWUgc2Vuc2UsCiAgICAgICAgb3IgdG8gc2F0aXNmeSBjZXJ0YWluIHBhc3N3b3JkIHJ1bGVzLCBhbmQgdGhhdCB0aGUKICAgICAgICBQcmluY2lwYWwgaXMgbm90IGZyZWUgdG8gY2hhbmdlIGl0IG9yIHRvIGNob29zZSBhIG5ldyBwYXNzd29yZC4KICAgICAgPC94czpkb2N1bWVudGF0aW9uPgogICAgPC94czphbm5vdGF0aW9uPgoKICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtZWNoYW5pc20iIHVzZT0icmVxdWlyZWQiPgogICAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5NVE9LRU4iPgogICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InByaW5jaXBhbGNob3NlbiIvPgogICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImF1dG9tYXRpYyIvPgogICAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICAgIDwveHM6YXR0cmlidXRlPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IkF1dGhuTWV0aG9kIiB0eXBlPSJBdXRobk1ldGhvZEJhc2VUeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBSZWZlcnMgdG8gdGhvc2UgY2hhcmFjdGVyaXN0aWNzIHRoYXQgZGVmaW5lIHRoZQogICAgICAgIG1lY2hhbmlzbXMgYnkgd2hpY2ggdGhlIFByaW5jaXBhbCBhdXRoZW50aWNhdGVzIHRvIHRoZSBBdXRoZW50aWNhdGlvbgogICAgICAgIEF1dGhvcml0eS4KICAgICAgPC94czpkb2N1bWVudGF0aW9uPgogICAgPC94czphbm5vdGF0aW9uPgogIDwveHM6ZWxlbWVudD4KCiAgPHhzOmVsZW1lbnQgbmFtZT0iUHJpbmNpcGFsQXV0aGVudGljYXRpb25NZWNoYW5pc20iIHR5cGU9IlByaW5jaXBhbEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtVHlwZSI+CiAgICA8eHM6YW5ub3RhdGlvbj4KICAgICAgPHhzOmRvY3VtZW50YXRpb24+CiAgICAgICAgVGhlIG1ldGhvZCB0aGF0IGEgUHJpbmNpcGFsIGVtcGxveXMgdG8gcGVyZm9ybQogICAgICAgIGF1dGhlbnRpY2F0aW9uIHRvIGxvY2FsIHN5c3RlbSBjb21wb25lbnRzLgogICAgICA8L3hzOmRvY3VtZW50YXRpb24+CiAgICA8L3hzOmFubm90YXRpb24+CiAgPC94czplbGVtZW50PgoKICA8eHM6ZWxlbWVudCBuYW1lPSJBdXRoZW50aWNhdG9yIiB0eXBlPSJBdXRoZW50aWNhdG9yQmFzZVR5cGUiPgogICAgPHhzOmFubm90YXRpb24+CiAgICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICAgIFRoZSBtZXRob2QgYXBwbGllZCB0byB2YWxpZGF0ZSBhIHByaW5jaXBhbCdzCiAgICAgICAgYXV0aGVudGljYXRpb24gYWNyb3NzIGEgbmV0d29yawogICAgICA8L3hzOmRvY3VtZW50YXRpb24+CiAgICA8L3hzOmFubm90YXRpb24+CiAgPC94czplbGVtZW50PgoKICA8eHM6ZWxlbWVudCBuYW1lPSJDb21wbGV4QXV0aGVudGljYXRvciIgdHlwZT0iQ29tcGxleEF1dGhlbnRpY2F0b3JUeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBTdXBwb3J0cyBBdXRoZW50aWNhdG9ycyB3aXRoIG5lc3RlZCBjb21iaW5hdGlvbnMgb2YKICAgICAgICBhZGRpdGlvbmFsIGNvbXBsZXhpdHkuCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IlByZXZpb3VzU2Vzc2lvbiIgdHlwZT0iRXh0ZW5zaW9uT25seVR5cGUiPgogICAgPHhzOmFubm90YXRpb24+CiAgICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICAgIEluZGljYXRlcyB0aGF0IHRoZSBQcmluY2lwYWwgaGFzIGJlZW4gc3Ryb25nbHkKICAgICAgICBhdXRoZW50aWNhdGVkIGluIGEgcHJldmlvdXMgc2Vzc2lvbiBkdXJpbmcgd2hpY2ggdGhlIElkUCBoYXMgc2V0IGEKICAgICAgICBjb29raWUgaW4gdGhlIFVBLiBEdXJpbmcgdGhlIHByZXNlbnQgc2Vzc2lvbiB0aGUgUHJpbmNpcGFsIGhhcyBvbmx5CiAgICAgICAgYmVlbiBhdXRoZW50aWNhdGVkIGJ5IHRoZSBVQSByZXR1cm5pbmcgdGhlIGNvb2tpZSB0byB0aGUgSWRQLgogICAgICA8L3hzOmRvY3VtZW50YXRpb24+CiAgICA8L3hzOmFubm90YXRpb24+CiAgPC94czplbGVtZW50PgoKICA8eHM6ZWxlbWVudCBuYW1lPSJSZXN1bWVTZXNzaW9uIiB0eXBlPSJFeHRlbnNpb25Pbmx5VHlwZSI+CiAgICA8eHM6YW5ub3RhdGlvbj4KICAgICAgPHhzOmRvY3VtZW50YXRpb24+CiAgICAgICAgUmF0aGVyIGxpa2UgUHJldmlvdXNTZXNzaW9uIGJ1dCB1c2luZyBzdHJvbmdlcgogICAgICAgIHNlY3VyaXR5LiBBIHNlY3JldCB0aGF0IHdhcyBlc3RhYmxpc2hlZCBpbiBhIHByZXZpb3VzIHNlc3Npb24gd2l0aAogICAgICAgIHRoZSBBdXRoZW50aWNhdGlvbiBBdXRob3JpdHkgaGFzIGJlZW4gY2FjaGVkIGJ5IHRoZSBsb2NhbCBzeXN0ZW0gYW5kCiAgICAgICAgaXMgbm93IHJlLXVzZWQgKGUuZy4gYSBNYXN0ZXIgU2VjcmV0IGlzIHVzZWQgdG8gZGVyaXZlIG5ldyBzZXNzaW9uCiAgICAgICAga2V5cyBpbiBUTFMsIFNTTCwgV1RMUykuCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9Ilplcm9Lbm93bGVkZ2UiIHR5cGU9IkV4dGVuc2lvbk9ubHlUeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBUaGlzIGVsZW1lbnQgaW5kaWNhdGVzIHRoYXQgdGhlIFByaW5jaXBhbCBoYXMgYmVlbgogICAgICAgIGF1dGhlbnRpY2F0ZWQgYnkgYSB6ZXJvIGtub3dsZWRnZSB0ZWNobmlxdWUgYXMgc3BlY2lmaWVkIGluIElTTy9JRUMKICAgICAgICA5Nzk4LTUuCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IlNoYXJlZFNlY3JldENoYWxsZW5nZVJlc3BvbnNlIiB0eXBlPSJTaGFyZWRTZWNyZXRDaGFsbGVuZ2VSZXNwb25zZVR5cGUiLz4KCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNoYXJlZFNlY3JldENoYWxsZW5nZVJlc3BvbnNlVHlwZSI+CiAgICA8eHM6YW5ub3RhdGlvbj4KICAgICAgPHhzOmRvY3VtZW50YXRpb24+CiAgICAgICAgVGhpcyBlbGVtZW50IGluZGljYXRlcyB0aGF0IHRoZSBQcmluY2lwYWwgaGFzIGJlZW4KICAgICAgICBhdXRoZW50aWNhdGVkIGJ5IGEgY2hhbGxlbmdlLXJlc3BvbnNlIHByb3RvY29sIHV0aWxpemluZyBzaGFyZWQgc2VjcmV0CiAgICAgICAga2V5cyBhbmQgc3ltbWV0cmljIGNyeXB0b2dyYXBoeS4KICAgICAgPC94czpkb2N1bWVudGF0aW9uPgogICAgPC94czphbm5vdGF0aW9uPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkV4dGVuc2lvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgPC94czpzZXF1ZW5jZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWV0aG9kIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0ib3B0aW9uYWwiLz4KICA8L3hzOmNvbXBsZXhUeXBlPgoKICA8eHM6ZWxlbWVudCBuYW1lPSJEaWdTaWciIHR5cGU9IlB1YmxpY0tleVR5cGUiPgogICAgPHhzOmFubm90YXRpb24+CiAgICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICAgIFRoaXMgZWxlbWVudCBpbmRpY2F0ZXMgdGhhdCB0aGUgUHJpbmNpcGFsIGhhcyBiZWVuCiAgICAgICAgYXV0aGVudGljYXRlZCBieSBhIG1lY2hhbmlzbSB3aGljaCBpbnZvbHZlcyB0aGUgUHJpbmNpcGFsIGNvbXB1dGluZyBhCiAgICAgICAgZGlnaXRhbCBzaWduYXR1cmUgb3ZlciBhdCBsZWFzdCBjaGFsbGVuZ2UgZGF0YSBwcm92aWRlZCBieSB0aGUgSWRQLgogICAgICA8L3hzOmRvY3VtZW50YXRpb24+CiAgICA8L3hzOmFubm90YXRpb24+CiAgPC94czplbGVtZW50PgoKICA8eHM6ZWxlbWVudCBuYW1lPSJBc3ltbWV0cmljRGVjcnlwdGlvbiIgdHlwZT0iUHVibGljS2V5VHlwZSI+CiAgICA8eHM6YW5ub3RhdGlvbj4KICAgICAgPHhzOmRvY3VtZW50YXRpb24+CiAgICAgICAgVGhlIGxvY2FsIHN5c3RlbSBoYXMgYSBwcml2YXRlIGtleSBidXQgaXQgaXMgdXNlZAogICAgICAgIGluIGRlY3J5cHRpb24gbW9kZSwgcmF0aGVyIHRoYW4gc2lnbmF0dXJlIG1vZGUuIEZvciBleGFtcGxlLCB0aGUKICAgICAgICBBdXRoZW50aWNhdGlvbiBBdXRob3JpdHkgZ2VuZXJhdGVzIGEgc2VjcmV0IGFuZCBlbmNyeXB0cyBpdCB1c2luZyB0aGUKICAgICAgICBsb2NhbCBzeXN0ZW0ncyBwdWJsaWMga2V5OiB0aGUgbG9jYWwgc3lzdGVtIHRoZW4gcHJvdmVzIGl0IGhhcwogICAgICAgIGRlY3J5cHRlZCB0aGUgc2VjcmV0LgogICAgICA8L3hzOmRvY3VtZW50YXRpb24+CiAgICA8L3hzOmFubm90YXRpb24+CiAgPC94czplbGVtZW50PgoKICA8eHM6ZWxlbWVudCBuYW1lPSJBc3ltbWV0cmljS2V5QWdyZWVtZW50IiB0eXBlPSJQdWJsaWNLZXlUeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBUaGUgbG9jYWwgc3lzdGVtIGhhcyBhIHByaXZhdGUga2V5IGFuZCB1c2VzIGl0IGZvcgogICAgICAgIHNoYXJlZCBzZWNyZXQga2V5IGFncmVlbWVudCB3aXRoIHRoZSBBdXRoZW50aWNhdGlvbiBBdXRob3JpdHkgKGUuZy4KICAgICAgICB2aWEgRGlmZmllIEhlbG1hbikuCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJQdWJsaWNLZXlUeXBlIj4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJFeHRlbnNpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImtleVZhbGlkYXRpb24iIHVzZT0ib3B0aW9uYWwiLz4KICA8L3hzOmNvbXBsZXhUeXBlPgoKICA8eHM6ZWxlbWVudCBuYW1lPSJJUEFkZHJlc3MiIHR5cGU9IkV4dGVuc2lvbk9ubHlUeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBUaGlzIGVsZW1lbnQgaW5kaWNhdGVzIHRoYXQgdGhlIFByaW5jaXBhbCBoYXMgYmVlbgogICAgICAgIGF1dGhlbnRpY2F0ZWQgdGhyb3VnaCBjb25uZWN0aW9uIGZyb20gYSBwYXJ0aWN1bGFyIElQIGFkZHJlc3MuCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IlNoYXJlZFNlY3JldER5bmFtaWNQbGFpbnRleHQiIHR5cGU9IkV4dGVuc2lvbk9ubHlUeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBUaGUgbG9jYWwgc3lzdGVtIGFuZCBBdXRoZW50aWNhdGlvbiBBdXRob3JpdHkKICAgICAgICBzaGFyZSBhIHNlY3JldCBrZXkuIFRoZSBsb2NhbCBzeXN0ZW0gdXNlcyB0aGlzIHRvIGVuY3J5cHQgYQogICAgICAgIHJhbmRvbWlzZWQgc3RyaW5nIHRvIHBhc3MgdG8gdGhlIEF1dGhlbnRpY2F0aW9uIEF1dGhvcml0eS4KICAgICAgPC94czpkb2N1bWVudGF0aW9uPgogICAgPC94czphbm5vdGF0aW9uPgogIDwveHM6ZWxlbWVudD4KCiAgPHhzOmVsZW1lbnQgbmFtZT0iQXV0aGVudGljYXRvclRyYW5zcG9ydFByb3RvY29sIiB0eXBlPSJBdXRoZW50aWNhdG9yVHJhbnNwb3J0UHJvdG9jb2xUeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBUaGUgcHJvdG9jb2wgYWNyb3NzIHdoaWNoIEF1dGhlbnRpY2F0b3IgaW5mb3JtYXRpb24gaXMKICAgICAgICB0cmFuc2ZlcnJlZCB0byBhbiBBdXRoZW50aWNhdGlvbiBBdXRob3JpdHkgdmVyaWZpZXIuCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IkhUVFAiIHR5cGU9IkV4dGVuc2lvbk9ubHlUeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBUaGlzIGVsZW1lbnQgaW5kaWNhdGVzIHRoYXQgdGhlIEF1dGhlbnRpY2F0b3IgaGFzIGJlZW4KICAgICAgICB0cmFuc21pdHRlZCB1c2luZyBiYXJlIEhUVFAgdXRpbGl6aW5nIG5vIGFkZGl0aW9uYWwgc2VjdXJpdHkKICAgICAgICBwcm90b2NvbHMuCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IklQU2VjIiB0eXBlPSJFeHRlbnNpb25Pbmx5VHlwZSI+CiAgICA8eHM6YW5ub3RhdGlvbj4KICAgICAgPHhzOmRvY3VtZW50YXRpb24+CiAgICAgICAgVGhpcyBlbGVtZW50IGluZGljYXRlcyB0aGF0IHRoZSBBdXRoZW50aWNhdG9yIGhhcyBiZWVuCiAgICAgICAgdHJhbnNtaXR0ZWQgdXNpbmcgYSB0cmFuc3BvcnQgbWVjaGFuaXNtIHByb3RlY3RlZCBieSBhbiBJUFNFQyBzZXNzaW9uLgogICAgICA8L3hzOmRvY3VtZW50YXRpb24+CiAgICA8L3hzOmFubm90YXRpb24+CiAgPC94czplbGVtZW50PgoKICA8eHM6ZWxlbWVudCBuYW1lPSJXVExTIiB0eXBlPSJFeHRlbnNpb25Pbmx5VHlwZSI+CiAgICA8eHM6YW5ub3RhdGlvbj4KICAgICAgPHhzOmRvY3VtZW50YXRpb24+CiAgICAgICAgVGhpcyBlbGVtZW50IGluZGljYXRlcyB0aGF0IHRoZSBBdXRoZW50aWNhdG9yIGhhcyBiZWVuCiAgICAgICAgdHJhbnNtaXR0ZWQgdXNpbmcgYSB0cmFuc3BvcnQgbWVjaGFuaXNtIHByb3RlY3RlZCBieSBhIFdUTFMgc2Vzc2lvbi4KICAgICAgPC94czpkb2N1bWVudGF0aW9uPgogICAgPC94czphbm5vdGF0aW9uPgogIDwveHM6ZWxlbWVudD4KCiAgPHhzOmVsZW1lbnQgbmFtZT0iTW9iaWxlTmV0d29ya05vRW5jcnlwdGlvbiIgdHlwZT0iRXh0ZW5zaW9uT25seVR5cGUiPgogICAgPHhzOmFubm90YXRpb24+CiAgICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICAgIFRoaXMgZWxlbWVudCBpbmRpY2F0ZXMgdGhhdCB0aGUgQXV0aGVudGljYXRvciBoYXMgYmVlbgogICAgICAgIHRyYW5zbWl0dGVkIHNvbGVseSBhY3Jvc3MgYSBtb2JpbGUgbmV0d29yayB1c2luZyBubyBhZGRpdGlvbmFsCiAgICAgICAgc2VjdXJpdHkgbWVjaGFuaXNtLgogICAgICA8L3hzOmRvY3VtZW50YXRpb24+CiAgICA8L3hzOmFubm90YXRpb24+CiAgPC94czplbGVtZW50PgoKICA8eHM6ZWxlbWVudCBuYW1lPSJNb2JpbGVOZXR3b3JrUmFkaW9FbmNyeXB0aW9uIiB0eXBlPSJFeHRlbnNpb25Pbmx5VHlwZSIvPgogIDx4czplbGVtZW50IG5hbWU9Ik1vYmlsZU5ldHdvcmtFbmRUb0VuZEVuY3J5cHRpb24iIHR5cGU9IkV4dGVuc2lvbk9ubHlUeXBlIi8+CgogIDx4czplbGVtZW50IG5hbWU9IlNTTCIgdHlwZT0iRXh0ZW5zaW9uT25seVR5cGUiPgogICAgPHhzOmFubm90YXRpb24+CiAgICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICAgIFRoaXMgZWxlbWVudCBpbmRpY2F0ZXMgdGhhdCB0aGUgQXV0aGVudGljYXRvciBoYXMgYmVlbgogICAgICAgIHRyYW5zbWl0dGVkIHVzaW5nIGEgdHJhbnNwb3J0IG1lY2hhbmlzbSBwcm90ZWN0ZWQgYnkgYW4gU1NMIG9yIFRMUwogICAgICAgIHNlc3Npb24uCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IlBTVE4iIHR5cGU9IkV4dGVuc2lvbk9ubHlUeXBlIi8+CiAgPHhzOmVsZW1lbnQgbmFtZT0iSVNETiIgdHlwZT0iRXh0ZW5zaW9uT25seVR5cGUiLz4KICA8eHM6ZWxlbWVudCBuYW1lPSJBRFNMIiB0eXBlPSJFeHRlbnNpb25Pbmx5VHlwZSIvPgoKICA8eHM6ZWxlbWVudCBuYW1lPSJPcGVyYXRpb25hbFByb3RlY3Rpb24iIHR5cGU9Ik9wZXJhdGlvbmFsUHJvdGVjdGlvblR5cGUiPgogICAgPHhzOmFubm90YXRpb24+CiAgICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICAgIFJlZmVycyB0byB0aG9zZSBjaGFyYWN0ZXJpc3RpY3MgdGhhdCBkZXNjcmliZQogICAgICAgIHByb2NlZHVyYWwgc2VjdXJpdHkgY29udHJvbHMgZW1wbG95ZWQgYnkgdGhlIEF1dGhlbnRpY2F0aW9uIEF1dGhvcml0eS4KICAgICAgPC94czpkb2N1bWVudGF0aW9uPgogICAgPC94czphbm5vdGF0aW9uPgogIDwveHM6ZWxlbWVudD4KCiAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlBdWRpdCIgdHlwZT0iU2VjdXJpdHlBdWRpdFR5cGUiLz4KICA8eHM6ZWxlbWVudCBuYW1lPSJTd2l0Y2hBdWRpdCIgdHlwZT0iRXh0ZW5zaW9uT25seVR5cGUiLz4KICA8eHM6ZWxlbWVudCBuYW1lPSJEZWFjdGl2YXRpb25DYWxsQ2VudGVyIiB0eXBlPSJFeHRlbnNpb25Pbmx5VHlwZSIvPgoKICA8eHM6ZWxlbWVudCBuYW1lPSJHb3Zlcm5pbmdBZ3JlZW1lbnRzIiB0eXBlPSJHb3Zlcm5pbmdBZ3JlZW1lbnRzVHlwZSI+CiAgICA8eHM6YW5ub3RhdGlvbj4KICAgICAgPHhzOmRvY3VtZW50YXRpb24+CiAgICAgICAgUHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgdG8gZXh0ZXJuYWwgKGxpa2VseQogICAgICAgIGh1bWFuIHJlYWRhYmxlKSBkb2N1bWVudHMgaW4gd2hpY2ggYWRkaXRpb25hbCBidXNpbmVzcyBhZ3JlZW1lbnRzLAogICAgICAgIChlLmcuIGxpYWJpbGl0eSBjb25zdHJhaW50cywgb2JsaWdhdGlvbnMsIGV0YykgY2FuIGJlIHBsYWNlZC4KICAgICAgPC94czpkb2N1bWVudGF0aW9uPgogICAgPC94czphbm5vdGF0aW9uPgogIDwveHM6ZWxlbWVudD4KCiAgPHhzOmVsZW1lbnQgbmFtZT0iR292ZXJuaW5nQWdyZWVtZW50UmVmIiB0eXBlPSJHb3Zlcm5pbmdBZ3JlZW1lbnRSZWZUeXBlIi8+CgogIDx4czpzaW1wbGVUeXBlIG5hbWU9Im55bVR5cGUiPgogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5NVE9LRU4iPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImFub255bWl0eSIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InZlcmlueW1pdHkiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwc2V1ZG9ueW1pdHkiLz4KICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgPC94czpzaW1wbGVUeXBlPgoKICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQXV0aG5Db250ZXh0RGVjbGFyYXRpb25CYXNlVHlwZSI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iSWRlbnRpZmljYXRpb24iIG1pbk9jY3Vycz0iMCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IlRlY2huaWNhbFByb3RlY3Rpb24iIG1pbk9jY3Vycz0iMCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Ik9wZXJhdGlvbmFsUHJvdGVjdGlvbiIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iQXV0aG5NZXRob2QiIG1pbk9jY3Vycz0iMCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkdvdmVybmluZ0FncmVlbWVudHMiIG1pbk9jY3Vycz0iMCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkV4dGVuc2lvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgPC94czpzZXF1ZW5jZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iSUQiIHR5cGU9InhzOklEIiB1c2U9Im9wdGlvbmFsIi8+CiAgPC94czpjb21wbGV4VHlwZT4KCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IklkZW50aWZpY2F0aW9uVHlwZSI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iUGh5c2ljYWxWZXJpZmljYXRpb24iIG1pbk9jY3Vycz0iMCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IldyaXR0ZW5Db25zZW50IiBtaW5PY2N1cnM9IjAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJHb3Zlcm5pbmdBZ3JlZW1lbnRzIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJFeHRlbnNpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im55bSIgdHlwZT0ibnltVHlwZSI+CiAgICAgIDx4czphbm5vdGF0aW9uPgogICAgICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZQogICAgICAgICAgSWRlbnRpZmljYXRpb24gbWVjaGFuaXNtcyBhbGxvdyB0aGUgYWN0aW9ucyBvZiB0aGUgUHJpbmNpcGFsIHRvIGJlCiAgICAgICAgICBsaW5rZWQgdG8gYW4gYWN0dWFsIGVuZCB1c2VyLgogICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgPC94czphbm5vdGF0aW9uPgogICAgPC94czphdHRyaWJ1dGU+CiAgPC94czpjb21wbGV4VHlwZT4KCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlRlY2huaWNhbFByb3RlY3Rpb25CYXNlVHlwZSI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9IlByaXZhdGVLZXlQcm90ZWN0aW9uIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJTZWNyZXRLZXlQcm90ZWN0aW9uIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkV4dGVuc2lvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmNvbXBsZXhUeXBlPgoKICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iT3BlcmF0aW9uYWxQcm90ZWN0aW9uVHlwZSI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iU2VjdXJpdHlBdWRpdCIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iRGVhY3RpdmF0aW9uQ2FsbENlbnRlciIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iRXh0ZW5zaW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Y29tcGxleFR5cGU+CgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBdXRobk1ldGhvZEJhc2VUeXBlIj4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJQcmluY2lwYWxBdXRoZW50aWNhdGlvbk1lY2hhbmlzbSIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iQXV0aGVudGljYXRvciIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iQXV0aGVudGljYXRvclRyYW5zcG9ydFByb3RvY29sIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJFeHRlbnNpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpjb21wbGV4VHlwZT4KCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkdvdmVybmluZ0FncmVlbWVudHNUeXBlIj4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJHb3Zlcm5pbmdBZ3JlZW1lbnRSZWYiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Y29tcGxleFR5cGU+CgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJHb3Zlcm5pbmdBZ3JlZW1lbnRSZWZUeXBlIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZ292ZXJuaW5nQWdyZWVtZW50UmVmIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KICA8L3hzOmNvbXBsZXhUeXBlPgoKICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUHJpbmNpcGFsQXV0aGVudGljYXRpb25NZWNoYW5pc21UeXBlIj4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJQYXNzd29yZCIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iUmVzdHJpY3RlZFBhc3N3b3JkIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJUb2tlbiIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iU21hcnRjYXJkIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJBY3RpdmF0aW9uUGluIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJFeHRlbnNpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InByZWF1dGgiIHR5cGU9InhzOmludGVnZXIiIHVzZT0ib3B0aW9uYWwiLz4KICA8L3hzOmNvbXBsZXhUeXBlPgoKICA8eHM6Z3JvdXAgbmFtZT0iQXV0aGVudGljYXRvckNob2ljZUdyb3VwIj4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iUHJldmlvdXNTZXNzaW9uIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iUmVzdW1lU2Vzc2lvbiIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkRpZ1NpZyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IlBhc3N3b3JkIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iUmVzdHJpY3RlZFBhc3N3b3JkIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iWmVyb0tub3dsZWRnZSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IlNoYXJlZFNlY3JldENoYWxsZW5nZVJlc3BvbnNlIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iU2hhcmVkU2VjcmV0RHluYW1pY1BsYWludGV4dCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IklQQWRkcmVzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkFzeW1tZXRyaWNEZWNyeXB0aW9uIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iQXN5bW1ldHJpY0tleUFncmVlbWVudCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IlN1YnNjcmliZXJMaW5lTnVtYmVyIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iVXNlclN1ZmZpeCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkNvbXBsZXhBdXRoZW50aWNhdG9yIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgoKICA8eHM6Z3JvdXAgbmFtZT0iQXV0aGVudGljYXRvclNlcXVlbmNlR3JvdXAiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9IlByZXZpb3VzU2Vzc2lvbiIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iUmVzdW1lU2Vzc2lvbiIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iRGlnU2lnIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJQYXNzd29yZCIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iUmVzdHJpY3RlZFBhc3N3b3JkIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJaZXJvS25vd2xlZGdlIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJTaGFyZWRTZWNyZXRDaGFsbGVuZ2VSZXNwb25zZSIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iU2hhcmVkU2VjcmV0RHluYW1pY1BsYWludGV4dCIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iSVBBZGRyZXNzIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJBc3ltbWV0cmljRGVjcnlwdGlvbiIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iQXN5bW1ldHJpY0tleUFncmVlbWVudCIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iU3Vic2NyaWJlckxpbmVOdW1iZXIiIG1pbk9jY3Vycz0iMCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IlVzZXJTdWZmaXgiIG1pbk9jY3Vycz0iMCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkV4dGVuc2lvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmdyb3VwPgoKICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQXV0aGVudGljYXRvckJhc2VUeXBlIj4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmdyb3VwIHJlZj0iQXV0aGVudGljYXRvckNob2ljZUdyb3VwIi8+CiAgICAgIDx4czpncm91cCByZWY9IkF1dGhlbnRpY2F0b3JTZXF1ZW5jZUdyb3VwIi8+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Y29tcGxleFR5cGU+CgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJDb21wbGV4QXV0aGVudGljYXRvclR5cGUiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6Z3JvdXAgcmVmPSJBdXRoZW50aWNhdG9yQ2hvaWNlR3JvdXAiLz4KICAgICAgPHhzOmdyb3VwIHJlZj0iQXV0aGVudGljYXRvclNlcXVlbmNlR3JvdXAiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpjb21wbGV4VHlwZT4KCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkF1dGhlbnRpY2F0b3JUcmFuc3BvcnRQcm90b2NvbFR5cGUiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJIVFRQIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJTU0wiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Ik1vYmlsZU5ldHdvcmtOb0VuY3J5cHRpb24iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Ik1vYmlsZU5ldHdvcmtSYWRpb0VuY3J5cHRpb24iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Ik1vYmlsZU5ldHdvcmtFbmRUb0VuZEVuY3J5cHRpb24iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9IldUTFMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9IklQU2VjIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJQU1ROIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJJU0ROIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJBRFNMIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkV4dGVuc2lvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmNvbXBsZXhUeXBlPgoKICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iS2V5QWN0aXZhdGlvblR5cGUiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkFjdGl2YXRpb25QaW4iIG1pbk9jY3Vycz0iMCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkV4dGVuc2lvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmNvbXBsZXhUeXBlPgoKICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iS2V5U2hhcmluZ1R5cGUiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzaGFyaW5nIiB0eXBlPSJ4czpib29sZWFuIiB1c2U9InJlcXVpcmVkIi8+CiAgPC94czpjb21wbGV4VHlwZT4KCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlByaXZhdGVLZXlQcm90ZWN0aW9uVHlwZSI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iS2V5QWN0aXZhdGlvbiIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iS2V5U3RvcmFnZSIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iS2V5U2hhcmluZyIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iRXh0ZW5zaW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Y29tcGxleFR5cGU+CgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJQYXNzd29yZFR5cGUiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9Ikxlbmd0aCIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iQWxwaGFiZXQiIG1pbk9jY3Vycz0iMCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkdlbmVyYXRpb24iIG1pbk9jY3Vycz0iMCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkV4dGVuc2lvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgPC94czpzZXF1ZW5jZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iRXh0ZXJuYWxWZXJpZmljYXRpb24iIHR5cGU9InhzOmFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgogIDwveHM6Y29tcGxleFR5cGU+CgogIDx4czplbGVtZW50IG5hbWU9IlJlc3RyaWN0ZWRQYXNzd29yZCIgdHlwZT0iUmVzdHJpY3RlZFBhc3N3b3JkVHlwZSIvPgoKICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVzdHJpY3RlZFBhc3N3b3JkVHlwZSI+CiAgICA8eHM6Y29tcGxleENvbnRlbnQ+CiAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJQYXNzd29yZFR5cGUiPgogICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxlbmd0aCIgdHlwZT0iUmVzdHJpY3RlZExlbmd0aFR5cGUiIG1pbk9jY3Vycz0iMSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJHZW5lcmF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iRXh0ZW5zaW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9IkV4dGVybmFsVmVyaWZpY2F0aW9uIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+CiAgPC94czpjb21wbGV4VHlwZT4KCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlc3RyaWN0ZWRMZW5ndGhUeXBlIj4KICAgIDx4czpjb21wbGV4Q29udGVudD4KICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9Ikxlbmd0aFR5cGUiPgogICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWluIiB1c2U9InJlcXVpcmVkIj4KICAgICAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6aW50ZWdlciI+CiAgICAgICAgICAgICAgPHhzOm1pbkluY2x1c2l2ZSB2YWx1ZT0iMyIvPgogICAgICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgICAgIDwveHM6YXR0cmlidXRlPgogICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWF4IiB0eXBlPSJ4czppbnRlZ2VyIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICA8L3hzOmNvbXBsZXhDb250ZW50PgogIDwveHM6Y29tcGxleFR5cGU+CgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBY3RpdmF0aW9uUGluVHlwZSI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iTGVuZ3RoIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJBbHBoYWJldCIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iR2VuZXJhdGlvbiIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iQWN0aXZhdGlvbkxpbWl0IiBtaW5PY2N1cnM9IjAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJFeHRlbnNpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpjb21wbGV4VHlwZT4KCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWxwaGFiZXQiIHR5cGU9IkFscGhhYmV0VHlwZSIvPgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBbHBoYWJldFR5cGUiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZXF1aXJlZENoYXJzIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZXhjbHVkZWRDaGFycyIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNhc2UiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgogIDwveHM6Y29tcGxleFR5cGU+CgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUb2tlblR5cGUiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9IlRpbWVTeW5jVG9rZW4iLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJFeHRlbnNpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpjb21wbGV4VHlwZT4KCiAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iRGV2aWNlVHlwZVR5cGUiPgogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5NVE9LRU4iPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImhhcmR3YXJlIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic29mdHdhcmUiLz4KICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgPC94czpzaW1wbGVUeXBlPgoKICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJib29sZWFuVHlwZSI+CiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6Tk1UT0tFTiI+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idHJ1ZSIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImZhbHNlIi8+CiAgICA8L3hzOnJlc3RyaWN0aW9uPgogIDwveHM6c2ltcGxlVHlwZT4KCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlRpbWVTeW5jVG9rZW5UeXBlIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iRGV2aWNlVHlwZSIgdHlwZT0iRGV2aWNlVHlwZVR5cGUiIHVzZT0icmVxdWlyZWQiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iU2VlZExlbmd0aCIgdHlwZT0ieHM6aW50ZWdlciIgdXNlPSJyZXF1aXJlZCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJEZXZpY2VJbkhhbmQiIHR5cGU9ImJvb2xlYW5UeXBlIiB1c2U9InJlcXVpcmVkIi8+CiAgPC94czpjb21wbGV4VHlwZT4KCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkFjdGl2YXRpb25MaW1pdFR5cGUiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJBY3RpdmF0aW9uTGltaXREdXJhdGlvbiIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkFjdGl2YXRpb25MaW1pdFVzYWdlcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkFjdGl2YXRpb25MaW1pdFNlc3Npb24iLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Y29tcGxleFR5cGU+CgogIDx4czplbGVtZW50IG5hbWU9IkFjdGl2YXRpb25MaW1pdER1cmF0aW9uIiB0eXBlPSJBY3RpdmF0aW9uTGltaXREdXJhdGlvblR5cGUiPgogICAgPHhzOmFubm90YXRpb24+CiAgICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICAgIFRoaXMgZWxlbWVudCBpbmRpY2F0ZXMgdGhhdCB0aGUgS2V5IEFjdGl2YXRpb24gTGltaXQgaXMKICAgICAgICBkZWZpbmVkIGFzIGEgc3BlY2lmaWMgZHVyYXRpb24gb2YgdGltZS4KICAgICAgPC94czpkb2N1bWVudGF0aW9uPgogICAgPC94czphbm5vdGF0aW9uPgogIDwveHM6ZWxlbWVudD4KCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWN0aXZhdGlvbkxpbWl0VXNhZ2VzIiB0eXBlPSJBY3RpdmF0aW9uTGltaXRVc2FnZXNUeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBUaGlzIGVsZW1lbnQgaW5kaWNhdGVzIHRoYXQgdGhlIEtleSBBY3RpdmF0aW9uIExpbWl0IGlzCiAgICAgICAgZGVmaW5lZCBhcyBhIG51bWJlciBvZiB1c2FnZXMuCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IkFjdGl2YXRpb25MaW1pdFNlc3Npb24iIHR5cGU9IkFjdGl2YXRpb25MaW1pdFNlc3Npb25UeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBUaGlzIGVsZW1lbnQgaW5kaWNhdGVzIHRoYXQgdGhlIEtleSBBY3RpdmF0aW9uIExpbWl0IGlzCiAgICAgICAgdGhlIHNlc3Npb24uCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBY3RpdmF0aW9uTGltaXREdXJhdGlvblR5cGUiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkdXJhdGlvbiIgdHlwZT0ieHM6ZHVyYXRpb24iIHVzZT0icmVxdWlyZWQiLz4KICA8L3hzOmNvbXBsZXhUeXBlPgoKICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQWN0aXZhdGlvbkxpbWl0VXNhZ2VzVHlwZSI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im51bWJlciIgdHlwZT0ieHM6aW50ZWdlciIgdXNlPSJyZXF1aXJlZCIvPgogIDwveHM6Y29tcGxleFR5cGU+CgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBY3RpdmF0aW9uTGltaXRTZXNzaW9uVHlwZSIvPgoKICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGVuZ3RoVHlwZSI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1pbiIgdHlwZT0ieHM6aW50ZWdlciIgdXNlPSJyZXF1aXJlZCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtYXgiIHR5cGU9InhzOmludGVnZXIiIHVzZT0ib3B0aW9uYWwiLz4KICA8L3hzOmNvbXBsZXhUeXBlPgoKICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJtZWRpdW1UeXBlIj4KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJtZW1vcnkiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzbWFydGNhcmQiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0b2tlbiIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik1vYmlsZURldmljZSIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik1vYmlsZUF1dGhDYXJkIi8+CiAgICA8L3hzOnJlc3RyaWN0aW9uPgogIDwveHM6c2ltcGxlVHlwZT4KCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IktleVN0b3JhZ2VUeXBlIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWVkaXVtIiB0eXBlPSJtZWRpdW1UeXBlIiB1c2U9InJlcXVpcmVkIi8+CiAgPC94czpjb21wbGV4VHlwZT4KCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNlY3JldEtleVByb3RlY3Rpb25UeXBlIj4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJLZXlBY3RpdmF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJLZXlTdG9yYWdlIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJFeHRlbnNpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpjb21wbGV4VHlwZT4KCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNlY3VyaXR5QXVkaXRUeXBlIj4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJTd2l0Y2hBdWRpdCIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iRXh0ZW5zaW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Y29tcGxleFR5cGU+CgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFeHRlbnNpb25Pbmx5VHlwZSI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iRXh0ZW5zaW9uIiBtaW5PY2N1cnM9IjAiICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmNvbXBsZXhUeXBlPgoKICA8eHM6ZWxlbWVudCBuYW1lPSJFeHRlbnNpb24iIHR5cGU9IkV4dGVuc2lvblR5cGUiLz4KCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkV4dGVuc2lvblR5cGUiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Y29tcGxleFR5cGU+Cgo8L3hzOnNjaGVtYT4K]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/schemas/saml-schema-metadata-2.0.xsd</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNjaGVtYQogICAgdGFyZ2V0TmFtZXNwYWNlPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6bWV0YWRhdGEiCiAgICB4bWxuczptZD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOm1ldGFkYXRhIgogICAgeG1sbnM6ZHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiCiAgICB4bWxuczp4ZW5jPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyMiCiAgICB4bWxuczpzYW1sPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXNzZXJ0aW9uIgogICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgogICAgZWxlbWVudEZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIKICAgIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIKICAgIGJsb2NrRGVmYXVsdD0ic3Vic3RpdHV0aW9uIgogICAgdmVyc2lvbj0iMi4wIj4KICAgIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIgogICAgICAgIHNjaGVtYUxvY2F0aW9uPSJ4bWxkc2lnLWNvcmUtc2NoZW1hLnhzZCIvPgogICAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jIyIKICAgICAgICBzY2hlbWFMb2NhdGlvbj0ieGVuYy1zY2hlbWEueHNkIi8+CiAgICA8aW1wb3J0IG5hbWVzcGFjZT0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIKICAgICAgICBzY2hlbWFMb2NhdGlvbj0ic2FtbC1zY2hlbWEtYXNzZXJ0aW9uLTIuMC54c2QiLz4KICAgIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiCiAgICAgICAgc2NoZW1hTG9jYXRpb249InhtbC54c2QiLz4KICAgIDxhbm5vdGF0aW9uPgogICAgICAgIDxkb2N1bWVudGF0aW9uPgogICAgICAgICAgICBEb2N1bWVudCBpZGVudGlmaWVyOiBzYW1sLXNjaGVtYS1tZXRhZGF0YS0yLjAKICAgICAgICAgICAgTG9jYXRpb246IGh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3NlY3VyaXR5L3NhbWwvdjIuMC8KICAgICAgICAgICAgUmV2aXNpb24gaGlzdG9yeToKICAgICAgICAgICAgICBWMi4wIChNYXJjaCwgMjAwNSk6CiAgICAgICAgICAgICAgICBTY2hlbWEgZm9yIFNBTUwgbWV0YWRhdGEsIGZpcnN0IHB1Ymxpc2hlZCBpbiBTQU1MIDIuMC4KICAgICAgICA8L2RvY3VtZW50YXRpb24+CiAgICA8L2Fubm90YXRpb24+CgogICAgPHNpbXBsZVR5cGUgbmFtZT0iZW50aXR5SURUeXBlIj4KICAgICAgICA8cmVzdHJpY3Rpb24gYmFzZT0iYW55VVJJIj4KICAgICAgICAgICAgPG1heExlbmd0aCB2YWx1ZT0iMTAyNCIvPgogICAgICAgIDwvcmVzdHJpY3Rpb24+CiAgICA8L3NpbXBsZVR5cGU+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0ibG9jYWxpemVkTmFtZVR5cGUiPgogICAgICAgIDxzaW1wbGVDb250ZW50PgogICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InN0cmluZyI+CiAgICAgICAgICAgICAgICA8YXR0cmlidXRlIHJlZj0ieG1sOmxhbmciIHVzZT0icmVxdWlyZWQiLz4KICAgICAgICAgICAgPC9leHRlbnNpb24+CiAgICAgICAgPC9zaW1wbGVDb250ZW50PgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJsb2NhbGl6ZWRVUklUeXBlIj4KICAgICAgICA8c2ltcGxlQ29udGVudD4KICAgICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJhbnlVUkkiPgogICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSByZWY9InhtbDpsYW5nIiB1c2U9InJlcXVpcmVkIi8+CiAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgogICAgICAgIDwvc2ltcGxlQ29udGVudD4KICAgIDwvY29tcGxleFR5cGU+CiAgICAKICAgIDxlbGVtZW50IG5hbWU9IkV4dGVuc2lvbnMiIHR5cGU9Im1kOkV4dGVuc2lvbnNUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgZmluYWw9IiNhbGwiIG5hbWU9IkV4dGVuc2lvbnNUeXBlIj4KICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICA8L3NlcXVlbmNlPgogICAgPC9jb21wbGV4VHlwZT4KICAgIAogICAgPGNvbXBsZXhUeXBlIG5hbWU9IkVuZHBvaW50VHlwZSI+CiAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iQmluZGluZyIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJMb2NhdGlvbiIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJSZXNwb25zZUxvY2F0aW9uIiB0eXBlPSJhbnlVUkkiIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICA8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KICAgIDwvY29tcGxleFR5cGU+CiAgICAKICAgIDxjb21wbGV4VHlwZSBuYW1lPSJJbmRleGVkRW5kcG9pbnRUeXBlIj4KICAgICAgICA8Y29tcGxleENvbnRlbnQ+CiAgICAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ibWQ6RW5kcG9pbnRUeXBlIj4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaW5kZXgiIHR5cGU9InVuc2lnbmVkU2hvcnQiIHVzZT0icmVxdWlyZWQiLz4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaXNEZWZhdWx0IiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgogICAgICAgIDwvY29tcGxleENvbnRlbnQ+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgCiAgICA8ZWxlbWVudCBuYW1lPSJFbnRpdGllc0Rlc2NyaXB0b3IiIHR5cGU9Im1kOkVudGl0aWVzRGVzY3JpcHRvclR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJFbnRpdGllc0Rlc2NyaXB0b3JUeXBlIj4KICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZHM6U2lnbmF0dXJlIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpFeHRlbnNpb25zIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgICAgICAgPGNob2ljZSBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6RW50aXR5RGVzY3JpcHRvciIvPgogICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpFbnRpdGllc0Rlc2NyaXB0b3IiLz4KICAgICAgICAgICAgPC9jaG9pY2U+CiAgICAgICAgPC9zZXF1ZW5jZT4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9InZhbGlkVW50aWwiIHR5cGU9ImRhdGVUaW1lIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjYWNoZUR1cmF0aW9uIiB0eXBlPSJkdXJhdGlvbiIgdXNlPSJvcHRpb25hbCIvPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iSUQiIHR5cGU9IklEIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJOYW1lIiB0eXBlPSJzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KICAgIDwvY29tcGxleFR5cGU+CgogICAgPGVsZW1lbnQgbmFtZT0iRW50aXR5RGVzY3JpcHRvciIgdHlwZT0ibWQ6RW50aXR5RGVzY3JpcHRvclR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJFbnRpdHlEZXNjcmlwdG9yVHlwZSI+CiAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9ImRzOlNpZ25hdHVyZSIgbWluT2NjdXJzPSIwIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6RXh0ZW5zaW9ucyIgbWluT2NjdXJzPSIwIi8+CiAgICAgICAgICAgIDxjaG9pY2U+CiAgICAgICAgICAgICAgICA8Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOlJvbGVEZXNjcmlwdG9yIi8+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpJRFBTU09EZXNjcmlwdG9yIi8+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpTUFNTT0Rlc2NyaXB0b3IiLz4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOkF1dGhuQXV0aG9yaXR5RGVzY3JpcHRvciIvPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6QXR0cmlidXRlQXV0aG9yaXR5RGVzY3JpcHRvciIvPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6UERQRGVzY3JpcHRvciIvPgogICAgICAgICAgICAgICAgPC9jaG9pY2U+CiAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOkFmZmlsaWF0aW9uRGVzY3JpcHRvciIvPgogICAgICAgICAgICA8L2Nob2ljZT4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpPcmdhbml6YXRpb24iIG1pbk9jY3Vycz0iMCIvPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOkNvbnRhY3RQZXJzb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpBZGRpdGlvbmFsTWV0YWRhdGFMb2NhdGlvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgIDwvc2VxdWVuY2U+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJlbnRpdHlJRCIgdHlwZT0ibWQ6ZW50aXR5SURUeXBlIiB1c2U9InJlcXVpcmVkIi8+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ2YWxpZFVudGlsIiB0eXBlPSJkYXRlVGltZSIgdXNlPSJvcHRpb25hbCIvPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2FjaGVEdXJhdGlvbiIgdHlwZT0iZHVyYXRpb24iIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9IklEIiB0eXBlPSJJRCIgdXNlPSJvcHRpb25hbCIvPgogICAgICAgIDxhbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgogICAgPC9jb21wbGV4VHlwZT4KICAgIAogICAgPGVsZW1lbnQgbmFtZT0iT3JnYW5pemF0aW9uIiB0eXBlPSJtZDpPcmdhbml6YXRpb25UeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iT3JnYW5pemF0aW9uVHlwZSI+CiAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOkV4dGVuc2lvbnMiIG1pbk9jY3Vycz0iMCIvPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOk9yZ2FuaXphdGlvbk5hbWUiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6T3JnYW5pemF0aW9uRGlzcGxheU5hbWUiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6T3JnYW5pemF0aW9uVVJMIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgIDwvc2VxdWVuY2U+CiAgICAgICAgPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iT3JnYW5pemF0aW9uTmFtZSIgdHlwZT0ibWQ6bG9jYWxpemVkTmFtZVR5cGUiLz4KICAgIDxlbGVtZW50IG5hbWU9Ik9yZ2FuaXphdGlvbkRpc3BsYXlOYW1lIiB0eXBlPSJtZDpsb2NhbGl6ZWROYW1lVHlwZSIvPgogICAgPGVsZW1lbnQgbmFtZT0iT3JnYW5pemF0aW9uVVJMIiB0eXBlPSJtZDpsb2NhbGl6ZWRVUklUeXBlIi8+CiAgICA8ZWxlbWVudCBuYW1lPSJDb250YWN0UGVyc29uIiB0eXBlPSJtZDpDb250YWN0VHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IkNvbnRhY3RUeXBlIj4KICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6RXh0ZW5zaW9ucyIgbWluT2NjdXJzPSIwIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6Q29tcGFueSIgbWluT2NjdXJzPSIwIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6R2l2ZW5OYW1lIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpTdXJOYW1lIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpFbWFpbEFkZHJlc3MiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpUZWxlcGhvbmVOdW1iZXIiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY29udGFjdFR5cGUiIHR5cGU9Im1kOkNvbnRhY3RUeXBlVHlwZSIgdXNlPSJyZXF1aXJlZCIvPgogICAgICAgIDxhbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9IkNvbXBhbnkiIHR5cGU9InN0cmluZyIvPgogICAgPGVsZW1lbnQgbmFtZT0iR2l2ZW5OYW1lIiB0eXBlPSJzdHJpbmciLz4KICAgIDxlbGVtZW50IG5hbWU9IlN1ck5hbWUiIHR5cGU9InN0cmluZyIvPgogICAgPGVsZW1lbnQgbmFtZT0iRW1haWxBZGRyZXNzIiB0eXBlPSJhbnlVUkkiLz4KICAgIDxlbGVtZW50IG5hbWU9IlRlbGVwaG9uZU51bWJlciIgdHlwZT0ic3RyaW5nIi8+CiAgICA8c2ltcGxlVHlwZSBuYW1lPSJDb250YWN0VHlwZVR5cGUiPgogICAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgogICAgICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9InRlY2huaWNhbCIvPgogICAgICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9InN1cHBvcnQiLz4KICAgICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJhZG1pbmlzdHJhdGl2ZSIvPgogICAgICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9ImJpbGxpbmciLz4KICAgICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJvdGhlciIvPgogICAgICAgIDwvcmVzdHJpY3Rpb24+CiAgICA8L3NpbXBsZVR5cGU+CgogICAgPGVsZW1lbnQgbmFtZT0iQWRkaXRpb25hbE1ldGFkYXRhTG9jYXRpb24iIHR5cGU9Im1kOkFkZGl0aW9uYWxNZXRhZGF0YUxvY2F0aW9uVHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZGl0aW9uYWxNZXRhZGF0YUxvY2F0aW9uVHlwZSI+CiAgICAgICAgPHNpbXBsZUNvbnRlbnQ+CiAgICAgICAgICAgIDxleHRlbnNpb24gYmFzZT0iYW55VVJJIj4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZXNwYWNlIiB0eXBlPSJhbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KICAgICAgICAgICAgPC9leHRlbnNpb24+CiAgICAgICAgPC9zaW1wbGVDb250ZW50PgogICAgPC9jb21wbGV4VHlwZT4KCiAgICA8ZWxlbWVudCBuYW1lPSJSb2xlRGVzY3JpcHRvciIgdHlwZT0ibWQ6Um9sZURlc2NyaXB0b3JUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iUm9sZURlc2NyaXB0b3JUeXBlIiBhYnN0cmFjdD0idHJ1ZSI+CiAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9ImRzOlNpZ25hdHVyZSIgbWluT2NjdXJzPSIwIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6RXh0ZW5zaW9ucyIgbWluT2NjdXJzPSIwIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6S2V5RGVzY3JpcHRvciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOk9yZ2FuaXphdGlvbiIgbWluT2NjdXJzPSIwIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6Q29udGFjdFBlcnNvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgIDwvc2VxdWVuY2U+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJJRCIgdHlwZT0iSUQiIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9InZhbGlkVW50aWwiIHR5cGU9ImRhdGVUaW1lIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjYWNoZUR1cmF0aW9uIiB0eXBlPSJkdXJhdGlvbiIgdXNlPSJvcHRpb25hbCIvPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icHJvdG9jb2xTdXBwb3J0RW51bWVyYXRpb24iIHR5cGU9Im1kOmFueVVSSUxpc3RUeXBlIiB1c2U9InJlcXVpcmVkIi8+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJlcnJvclVSTCIgdHlwZT0iYW55VVJJIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPHNpbXBsZVR5cGUgbmFtZT0iYW55VVJJTGlzdFR5cGUiPgogICAgICAgIDxsaXN0IGl0ZW1UeXBlPSJhbnlVUkkiLz4KICAgIDwvc2ltcGxlVHlwZT4KCiAgICA8ZWxlbWVudCBuYW1lPSJLZXlEZXNjcmlwdG9yIiB0eXBlPSJtZDpLZXlEZXNjcmlwdG9yVHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IktleURlc2NyaXB0b3JUeXBlIj4KICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZHM6S2V5SW5mbyIvPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOkVuY3J5cHRpb25NZXRob2QiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0idXNlIiB0eXBlPSJtZDpLZXlUeXBlcyIgdXNlPSJvcHRpb25hbCIvPgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxzaW1wbGVUeXBlIG5hbWU9IktleVR5cGVzIj4KICAgICAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KICAgICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJlbmNyeXB0aW9uIi8+CiAgICAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0ic2lnbmluZyIvPgogICAgICAgIDwvcmVzdHJpY3Rpb24+CiAgICA8L3NpbXBsZVR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJFbmNyeXB0aW9uTWV0aG9kIiB0eXBlPSJ4ZW5jOkVuY3J5cHRpb25NZXRob2RUeXBlIi8+CiAgICAKICAgIDxjb21wbGV4VHlwZSBuYW1lPSJTU09EZXNjcmlwdG9yVHlwZSIgYWJzdHJhY3Q9InRydWUiPgogICAgICAgIDxjb21wbGV4Q29udGVudD4KICAgICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJtZDpSb2xlRGVzY3JpcHRvclR5cGUiPgogICAgICAgICAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6QXJ0aWZhY3RSZXNvbHV0aW9uU2VydmljZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6U2luZ2xlTG9nb3V0U2VydmljZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6TWFuYWdlTmFtZUlEU2VydmljZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6TmFtZUlERm9ybWF0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgICAgICA8L2V4dGVuc2lvbj4KICAgICAgICA8L2NvbXBsZXhDb250ZW50PgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9IkFydGlmYWN0UmVzb2x1dGlvblNlcnZpY2UiIHR5cGU9Im1kOkluZGV4ZWRFbmRwb2ludFR5cGUiLz4KICAgIDxlbGVtZW50IG5hbWU9IlNpbmdsZUxvZ291dFNlcnZpY2UiIHR5cGU9Im1kOkVuZHBvaW50VHlwZSIvPgogICAgPGVsZW1lbnQgbmFtZT0iTWFuYWdlTmFtZUlEU2VydmljZSIgdHlwZT0ibWQ6RW5kcG9pbnRUeXBlIi8+CiAgICA8ZWxlbWVudCBuYW1lPSJOYW1lSURGb3JtYXQiIHR5cGU9ImFueVVSSSIvPgoKICAgIDxlbGVtZW50IG5hbWU9IklEUFNTT0Rlc2NyaXB0b3IiIHR5cGU9Im1kOklEUFNTT0Rlc2NyaXB0b3JUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iSURQU1NPRGVzY3JpcHRvclR5cGUiPgogICAgICAgIDxjb21wbGV4Q29udGVudD4KICAgICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJtZDpTU09EZXNjcmlwdG9yVHlwZSI+CiAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpTaW5nbGVTaWduT25TZXJ2aWNlIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6TmFtZUlETWFwcGluZ1NlcnZpY2UiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOkFzc2VydGlvbklEUmVxdWVzdFNlcnZpY2UiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOkF0dHJpYnV0ZVByb2ZpbGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXR0cmlidXRlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJXYW50QXV0aG5SZXF1ZXN0c1NpZ25lZCIgdHlwZT0iYm9vbGVhbiIgdXNlPSJvcHRpb25hbCIvPgogICAgICAgICAgICA8L2V4dGVuc2lvbj4KICAgICAgICA8L2NvbXBsZXhDb250ZW50PgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9IlNpbmdsZVNpZ25PblNlcnZpY2UiIHR5cGU9Im1kOkVuZHBvaW50VHlwZSIvPgogICAgPGVsZW1lbnQgbmFtZT0iTmFtZUlETWFwcGluZ1NlcnZpY2UiIHR5cGU9Im1kOkVuZHBvaW50VHlwZSIvPgogICAgPGVsZW1lbnQgbmFtZT0iQXNzZXJ0aW9uSURSZXF1ZXN0U2VydmljZSIgdHlwZT0ibWQ6RW5kcG9pbnRUeXBlIi8+CiAgICA8ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVQcm9maWxlIiB0eXBlPSJhbnlVUkkiLz4KICAgIAogICAgPGVsZW1lbnQgbmFtZT0iU1BTU09EZXNjcmlwdG9yIiB0eXBlPSJtZDpTUFNTT0Rlc2NyaXB0b3JUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iU1BTU09EZXNjcmlwdG9yVHlwZSI+CiAgICAgICAgPGNvbXBsZXhDb250ZW50PgogICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9Im1kOlNTT0Rlc2NyaXB0b3JUeXBlIj4KICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOkFzc2VydGlvbkNvbnN1bWVyU2VydmljZSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOkF0dHJpYnV0ZUNvbnN1bWluZ1NlcnZpY2UiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CiAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9IkF1dGhuUmVxdWVzdHNTaWduZWQiIHR5cGU9ImJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iV2FudEFzc2VydGlvbnNTaWduZWQiIHR5cGU9ImJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICAgICAgPC9leHRlbnNpb24+CiAgICAgICAgPC9jb21wbGV4Q29udGVudD4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJBc3NlcnRpb25Db25zdW1lclNlcnZpY2UiIHR5cGU9Im1kOkluZGV4ZWRFbmRwb2ludFR5cGUiLz4KICAgIDxlbGVtZW50IG5hbWU9IkF0dHJpYnV0ZUNvbnN1bWluZ1NlcnZpY2UiIHR5cGU9Im1kOkF0dHJpYnV0ZUNvbnN1bWluZ1NlcnZpY2VUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iQXR0cmlidXRlQ29uc3VtaW5nU2VydmljZVR5cGUiPgogICAgICAgIDxzZXF1ZW5jZT4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpTZXJ2aWNlTmFtZSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpTZXJ2aWNlRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpSZXF1ZXN0ZWRBdHRyaWJ1dGUiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgPC9zZXF1ZW5jZT4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImluZGV4IiB0eXBlPSJ1bnNpZ25lZFNob3J0IiB1c2U9InJlcXVpcmVkIi8+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpc0RlZmF1bHQiIHR5cGU9ImJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiLz4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJTZXJ2aWNlTmFtZSIgdHlwZT0ibWQ6bG9jYWxpemVkTmFtZVR5cGUiLz4KICAgIDxlbGVtZW50IG5hbWU9IlNlcnZpY2VEZXNjcmlwdGlvbiIgdHlwZT0ibWQ6bG9jYWxpemVkTmFtZVR5cGUiLz4KICAgIDxlbGVtZW50IG5hbWU9IlJlcXVlc3RlZEF0dHJpYnV0ZSIgdHlwZT0ibWQ6UmVxdWVzdGVkQXR0cmlidXRlVHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IlJlcXVlc3RlZEF0dHJpYnV0ZVR5cGUiPgogICAgICAgIDxjb21wbGV4Q29udGVudD4KICAgICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzYW1sOkF0dHJpYnV0ZVR5cGUiPgogICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpc1JlcXVpcmVkIiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgogICAgICAgIDwvY29tcGxleENvbnRlbnQ+CiAgICA8L2NvbXBsZXhUeXBlPgogIAogICAgPGVsZW1lbnQgbmFtZT0iQXV0aG5BdXRob3JpdHlEZXNjcmlwdG9yIiB0eXBlPSJtZDpBdXRobkF1dGhvcml0eURlc2NyaXB0b3JUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iQXV0aG5BdXRob3JpdHlEZXNjcmlwdG9yVHlwZSI+CiAgICAgICAgPGNvbXBsZXhDb250ZW50PgogICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9Im1kOlJvbGVEZXNjcmlwdG9yVHlwZSI+CiAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpBdXRoblF1ZXJ5U2VydmljZSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOkFzc2VydGlvbklEUmVxdWVzdFNlcnZpY2UiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOk5hbWVJREZvcm1hdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KICAgICAgICAgICAgPC9leHRlbnNpb24+CiAgICAgICAgPC9jb21wbGV4Q29udGVudD4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJBdXRoblF1ZXJ5U2VydmljZSIgdHlwZT0ibWQ6RW5kcG9pbnRUeXBlIi8+CgogICAgPGVsZW1lbnQgbmFtZT0iUERQRGVzY3JpcHRvciIgdHlwZT0ibWQ6UERQRGVzY3JpcHRvclR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJQRFBEZXNjcmlwdG9yVHlwZSI+CiAgICAgICAgPGNvbXBsZXhDb250ZW50PgogICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9Im1kOlJvbGVEZXNjcmlwdG9yVHlwZSI+CiAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpBdXRoelNlcnZpY2UiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpBc3NlcnRpb25JRFJlcXVlc3RTZXJ2aWNlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpOYW1lSURGb3JtYXQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CiAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgogICAgICAgIDwvY29tcGxleENvbnRlbnQ+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iQXV0aHpTZXJ2aWNlIiB0eXBlPSJtZDpFbmRwb2ludFR5cGUiLz4KCiAgICA8ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVBdXRob3JpdHlEZXNjcmlwdG9yIiB0eXBlPSJtZDpBdHRyaWJ1dGVBdXRob3JpdHlEZXNjcmlwdG9yVHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IkF0dHJpYnV0ZUF1dGhvcml0eURlc2NyaXB0b3JUeXBlIj4KICAgICAgICA8Y29tcGxleENvbnRlbnQ+CiAgICAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ibWQ6Um9sZURlc2NyaXB0b3JUeXBlIj4KICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOkF0dHJpYnV0ZVNlcnZpY2UiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpBc3NlcnRpb25JRFJlcXVlc3RTZXJ2aWNlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpOYW1lSURGb3JtYXQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOkF0dHJpYnV0ZVByb2ZpbGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXR0cmlidXRlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgICAgICA8L2V4dGVuc2lvbj4KICAgICAgICA8L2NvbXBsZXhDb250ZW50PgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9IkF0dHJpYnV0ZVNlcnZpY2UiIHR5cGU9Im1kOkVuZHBvaW50VHlwZSIvPgogICAKICAgIDxlbGVtZW50IG5hbWU9IkFmZmlsaWF0aW9uRGVzY3JpcHRvciIgdHlwZT0ibWQ6QWZmaWxpYXRpb25EZXNjcmlwdG9yVHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFmZmlsaWF0aW9uRGVzY3JpcHRvclR5cGUiPgogICAgICAgIDxzZXF1ZW5jZT4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJkczpTaWduYXR1cmUiIG1pbk9jY3Vycz0iMCIvPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOkV4dGVuc2lvbnMiIG1pbk9jY3Vycz0iMCIvPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOkFmZmlsaWF0ZU1lbWJlciIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iYWZmaWxpYXRpb25Pd25lcklEIiB0eXBlPSJtZDplbnRpdHlJRFR5cGUiIHVzZT0icmVxdWlyZWQiLz4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9InZhbGlkVW50aWwiIHR5cGU9ImRhdGVUaW1lIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjYWNoZUR1cmF0aW9uIiB0eXBlPSJkdXJhdGlvbiIgdXNlPSJvcHRpb25hbCIvPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iSUQiIHR5cGU9IklEIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iQWZmaWxpYXRlTWVtYmVyIiB0eXBlPSJtZDplbnRpdHlJRFR5cGUiLz4KPC9zY2hlbWE+Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/schemas/saml-schema-protocol-2.0.xsd</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNjaGVtYQogICAgdGFyZ2V0TmFtZXNwYWNlPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wiCiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCiAgICB4bWxuczpzYW1scD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnByb3RvY29sIgogICAgeG1sbnM6c2FtbD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIKICAgIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIgogICAgZWxlbWVudEZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIKICAgIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIKICAgIGJsb2NrRGVmYXVsdD0ic3Vic3RpdHV0aW9uIgogICAgdmVyc2lvbj0iMi4wIj4KICAgIDxpbXBvcnQgbmFtZXNwYWNlPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXNzZXJ0aW9uIgogICAgICAgIHNjaGVtYUxvY2F0aW9uPSJzYW1sLXNjaGVtYS1hc3NlcnRpb24tMi4wLnhzZCIvPgogICAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiCiAgICAgICAgc2NoZW1hTG9jYXRpb249InhtbGRzaWctY29yZS1zY2hlbWEueHNkIi8+CiAgICA8YW5ub3RhdGlvbj4KICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KICAgICAgICAgICAgRG9jdW1lbnQgaWRlbnRpZmllcjogc2FtbC1zY2hlbWEtcHJvdG9jb2wtMi4wCiAgICAgICAgICAgIExvY2F0aW9uOiBodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9zZWN1cml0eS9zYW1sL3YyLjAvCiAgICAgICAgICAgIFJldmlzaW9uIGhpc3Rvcnk6CiAgICAgICAgICAgIFYxLjAgKE5vdmVtYmVyLCAyMDAyKToKICAgICAgICAgICAgICBJbml0aWFsIFN0YW5kYXJkIFNjaGVtYS4KICAgICAgICAgICAgVjEuMSAoU2VwdGVtYmVyLCAyMDAzKToKICAgICAgICAgICAgICBVcGRhdGVzIHdpdGhpbiB0aGUgc2FtZSBWMS4wIG5hbWVzcGFjZS4KICAgICAgICAgICAgVjIuMCAoTWFyY2gsIDIwMDUpOgogICAgICAgICAgICAgIE5ldyBwcm90b2NvbCBzY2hlbWEgYmFzZWQgaW4gYSBTQU1MIFYyLjAgbmFtZXNwYWNlLgogICAgIDwvZG9jdW1lbnRhdGlvbj4KICAgIDwvYW5ub3RhdGlvbj4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJSZXF1ZXN0QWJzdHJhY3RUeXBlIiBhYnN0cmFjdD0idHJ1ZSI+CiAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6SXNzdWVyIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJkczpTaWduYXR1cmUiIG1pbk9jY3Vycz0iMCIvPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWxwOkV4dGVuc2lvbnMiIG1pbk9jY3Vycz0iMCIvPgogICAgICAgIDwvc2VxdWVuY2U+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJJRCIgdHlwZT0iSUQiIHVzZT0icmVxdWlyZWQiLz4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9IlZlcnNpb24iIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iSXNzdWVJbnN0YW50IiB0eXBlPSJkYXRlVGltZSIgdXNlPSJyZXF1aXJlZCIvPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iRGVzdGluYXRpb24iIHR5cGU9ImFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgogICAgCTxhdHRyaWJ1dGUgbmFtZT0iQ29uc2VudCIgdHlwZT0iYW55VVJJIiB1c2U9Im9wdGlvbmFsIi8+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iRXh0ZW5zaW9ucyIgdHlwZT0ic2FtbHA6RXh0ZW5zaW9uc1R5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJFeHRlbnNpb25zVHlwZSI+CiAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgPC9zZXF1ZW5jZT4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iU3RhdHVzUmVzcG9uc2VUeXBlIj4KICAgIAk8c2VxdWVuY2U+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpJc3N1ZXIiIG1pbk9jY3Vycz0iMCIvPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9ImRzOlNpZ25hdHVyZSIgbWluT2NjdXJzPSIwIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbHA6RXh0ZW5zaW9ucyIgbWluT2NjdXJzPSIwIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbHA6U3RhdHVzIi8+CiAgICAJPC9zZXF1ZW5jZT4KICAgIAk8YXR0cmlidXRlIG5hbWU9IklEIiB0eXBlPSJJRCIgdXNlPSJyZXF1aXJlZCIvPgogICAgCTxhdHRyaWJ1dGUgbmFtZT0iSW5SZXNwb25zZVRvIiB0eXBlPSJOQ05hbWUiIHVzZT0ib3B0aW9uYWwiLz4KICAgIAk8YXR0cmlidXRlIG5hbWU9IlZlcnNpb24iIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgogICAgCTxhdHRyaWJ1dGUgbmFtZT0iSXNzdWVJbnN0YW50IiB0eXBlPSJkYXRlVGltZSIgdXNlPSJyZXF1aXJlZCIvPgogICAgCTxhdHRyaWJ1dGUgbmFtZT0iRGVzdGluYXRpb24iIHR5cGU9ImFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgogICAgCTxhdHRyaWJ1dGUgbmFtZT0iQ29uc2VudCIgdHlwZT0iYW55VVJJIiB1c2U9Im9wdGlvbmFsIi8+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iU3RhdHVzIiB0eXBlPSJzYW1scDpTdGF0dXNUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iU3RhdHVzVHlwZSI+CiAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWxwOlN0YXR1c0NvZGUiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1scDpTdGF0dXNNZXNzYWdlIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1scDpTdGF0dXNEZXRhaWwiIG1pbk9jY3Vycz0iMCIvPgogICAgICAgIDwvc2VxdWVuY2U+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iU3RhdHVzQ29kZSIgdHlwZT0ic2FtbHA6U3RhdHVzQ29kZVR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJTdGF0dXNDb2RlVHlwZSI+CiAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWxwOlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIvPgogICAgICAgIDwvc2VxdWVuY2U+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJWYWx1ZSIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iU3RhdHVzTWVzc2FnZSIgdHlwZT0ic3RyaW5nIi8+CiAgICA8ZWxlbWVudCBuYW1lPSJTdGF0dXNEZXRhaWwiIHR5cGU9InNhbWxwOlN0YXR1c0RldGFpbFR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJTdGF0dXNEZXRhaWxUeXBlIj4KICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI2FueSIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICA8L3NlcXVlbmNlPgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9IkFzc2VydGlvbklEUmVxdWVzdCIgdHlwZT0ic2FtbHA6QXNzZXJ0aW9uSURSZXF1ZXN0VHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFzc2VydGlvbklEUmVxdWVzdFR5cGUiPgogICAgCTxjb21wbGV4Q29udGVudD4KICAgICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzYW1scDpSZXF1ZXN0QWJzdHJhY3RUeXBlIj4KICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXNzZXJ0aW9uSURSZWYiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgICAgICA8L2V4dGVuc2lvbj4KICAgIAk8L2NvbXBsZXhDb250ZW50PgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9IlN1YmplY3RRdWVyeSIgdHlwZT0ic2FtbHA6U3ViamVjdFF1ZXJ5QWJzdHJhY3RUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iU3ViamVjdFF1ZXJ5QWJzdHJhY3RUeXBlIiBhYnN0cmFjdD0idHJ1ZSI+CiAgICAJPGNvbXBsZXhDb250ZW50PgogICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNhbWxwOlJlcXVlc3RBYnN0cmFjdFR5cGUiPgogICAgICAgICAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpTdWJqZWN0Ii8+CiAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgICAgICA8L2V4dGVuc2lvbj4KICAgIAk8L2NvbXBsZXhDb250ZW50PgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9IkF1dGhuUXVlcnkiIHR5cGU9InNhbWxwOkF1dGhuUXVlcnlUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iQXV0aG5RdWVyeVR5cGUiPgogICAgICAgIDxjb21wbGV4Q29udGVudD4KICAgICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzYW1scDpTdWJqZWN0UXVlcnlBYnN0cmFjdFR5cGUiPgogICAgICAgICAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbHA6UmVxdWVzdGVkQXV0aG5Db250ZXh0IiBtaW5PY2N1cnM9IjAiLz4KICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CiAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9IlNlc3Npb25JbmRleCIgdHlwZT0ic3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgogICAgICAgIDwvY29tcGxleENvbnRlbnQ+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iUmVxdWVzdGVkQXV0aG5Db250ZXh0IiB0eXBlPSJzYW1scDpSZXF1ZXN0ZWRBdXRobkNvbnRleHRUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iUmVxdWVzdGVkQXV0aG5Db250ZXh0VHlwZSI+CiAgICAgICAgPGNob2ljZT4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkF1dGhuQ29udGV4dENsYXNzUmVmIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXV0aG5Db250ZXh0RGVjbFJlZiIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICA8L2Nob2ljZT4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9IkNvbXBhcmlzb24iIHR5cGU9InNhbWxwOkF1dGhuQ29udGV4dENvbXBhcmlzb25UeXBlIiB1c2U9Im9wdGlvbmFsIi8+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPHNpbXBsZVR5cGUgbmFtZT0iQXV0aG5Db250ZXh0Q29tcGFyaXNvblR5cGUiPgogICAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgogICAgICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9ImV4YWN0Ii8+CiAgICAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0ibWluaW11bSIvPgogICAgICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9Im1heGltdW0iLz4KICAgICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJiZXR0ZXIiLz4KICAgICAgICA8L3Jlc3RyaWN0aW9uPgogICAgPC9zaW1wbGVUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iQXR0cmlidXRlUXVlcnkiIHR5cGU9InNhbWxwOkF0dHJpYnV0ZVF1ZXJ5VHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IkF0dHJpYnV0ZVF1ZXJ5VHlwZSI+CiAgICAgICAgPGNvbXBsZXhDb250ZW50PgogICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNhbWxwOlN1YmplY3RRdWVyeUFic3RyYWN0VHlwZSI+CiAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkF0dHJpYnV0ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KICAgICAgICAgICAgPC9leHRlbnNpb24+CiAgICAgICAgPC9jb21wbGV4Q29udGVudD4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJBdXRoekRlY2lzaW9uUXVlcnkiIHR5cGU9InNhbWxwOkF1dGh6RGVjaXNpb25RdWVyeVR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJBdXRoekRlY2lzaW9uUXVlcnlUeXBlIj4KICAgICAgICA8Y29tcGxleENvbnRlbnQ+CiAgICAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2FtbHA6U3ViamVjdFF1ZXJ5QWJzdHJhY3RUeXBlIj4KICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QWN0aW9uIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpFdmlkZW5jZSIgbWluT2NjdXJzPSIwIi8+CiAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJSZXNvdXJjZSIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+CiAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgogICAgICAgIDwvY29tcGxleENvbnRlbnQ+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iQXV0aG5SZXF1ZXN0IiB0eXBlPSJzYW1scDpBdXRoblJlcXVlc3RUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iQXV0aG5SZXF1ZXN0VHlwZSI+CiAgICAgICAgPGNvbXBsZXhDb250ZW50PgogICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNhbWxwOlJlcXVlc3RBYnN0cmFjdFR5cGUiPgogICAgICAgICAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpTdWJqZWN0IiBtaW5PY2N1cnM9IjAiLz4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWxwOk5hbWVJRFBvbGljeSIgbWluT2NjdXJzPSIwIi8+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkNvbmRpdGlvbnMiIG1pbk9jY3Vycz0iMCIvPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbHA6UmVxdWVzdGVkQXV0aG5Db250ZXh0IiBtaW5PY2N1cnM9IjAiLz4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWxwOlNjb3BpbmciIG1pbk9jY3Vycz0iMCIvPgogICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iRm9yY2VBdXRobiIgdHlwZT0iYm9vbGVhbiIgdXNlPSJvcHRpb25hbCIvPgogICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJJc1Bhc3NpdmUiIHR5cGU9ImJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iUHJvdG9jb2xCaW5kaW5nIiB0eXBlPSJhbnlVUkkiIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iQXNzZXJ0aW9uQ29uc3VtZXJTZXJ2aWNlSW5kZXgiIHR5cGU9InVuc2lnbmVkU2hvcnQiIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iQXNzZXJ0aW9uQ29uc3VtZXJTZXJ2aWNlVVJMIiB0eXBlPSJhbnlVUkkiIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iQXR0cmlidXRlQ29uc3VtaW5nU2VydmljZUluZGV4IiB0eXBlPSJ1bnNpZ25lZFNob3J0IiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9IlByb3ZpZGVyTmFtZSIgdHlwZT0ic3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgogICAgICAgIDwvY29tcGxleENvbnRlbnQ+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iTmFtZUlEUG9saWN5IiB0eXBlPSJzYW1scDpOYW1lSURQb2xpY3lUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iTmFtZUlEUG9saWN5VHlwZSI+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJGb3JtYXQiIHR5cGU9ImFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iU1BOYW1lUXVhbGlmaWVyIiB0eXBlPSJzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9IkFsbG93Q3JlYXRlIiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIi8+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iU2NvcGluZyIgdHlwZT0ic2FtbHA6U2NvcGluZ1R5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJTY29waW5nVHlwZSI+CiAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWxwOklEUExpc3QiIG1pbk9jY3Vycz0iMCIvPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWxwOlJlcXVlc3RlcklEIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgPC9zZXF1ZW5jZT4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9IlByb3h5Q291bnQiIHR5cGU9Im5vbk5lZ2F0aXZlSW50ZWdlciIgdXNlPSJvcHRpb25hbCIvPgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9IlJlcXVlc3RlcklEIiB0eXBlPSJhbnlVUkkiLz4KICAgIDxlbGVtZW50IG5hbWU9IklEUExpc3QiIHR5cGU9InNhbWxwOklEUExpc3RUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iSURQTGlzdFR5cGUiPgogICAgICAgIDxzZXF1ZW5jZT4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1scDpJRFBFbnRyeSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1scDpHZXRDb21wbGV0ZSIgbWluT2NjdXJzPSIwIi8+CiAgICAgICAgPC9zZXF1ZW5jZT4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJJRFBFbnRyeSIgdHlwZT0ic2FtbHA6SURQRW50cnlUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iSURQRW50cnlUeXBlIj4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9IlByb3ZpZGVySUQiIHR5cGU9ImFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iTmFtZSIgdHlwZT0ic3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJMb2MiIHR5cGU9ImFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9IkdldENvbXBsZXRlIiB0eXBlPSJhbnlVUkkiLz4KICAgIDxlbGVtZW50IG5hbWU9IlJlc3BvbnNlIiB0eXBlPSJzYW1scDpSZXNwb25zZVR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJSZXNwb25zZVR5cGUiPgogICAgCTxjb21wbGV4Q29udGVudD4KICAgICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzYW1scDpTdGF0dXNSZXNwb25zZVR5cGUiPgogICAgICAgICAgICAgICAgPGNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXNzZXJ0aW9uIi8+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkVuY3J5cHRlZEFzc2VydGlvbiIvPgogICAgICAgICAgICAgICAgPC9jaG9pY2U+CiAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgogICAgCTwvY29tcGxleENvbnRlbnQ+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iQXJ0aWZhY3RSZXNvbHZlIiB0eXBlPSJzYW1scDpBcnRpZmFjdFJlc29sdmVUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iQXJ0aWZhY3RSZXNvbHZlVHlwZSI+CiAgICAJPGNvbXBsZXhDb250ZW50PgogICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNhbWxwOlJlcXVlc3RBYnN0cmFjdFR5cGUiPgogICAgICAgICAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbHA6QXJ0aWZhY3QiLz4KICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CiAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgogICAgCTwvY29tcGxleENvbnRlbnQ+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iQXJ0aWZhY3QiIHR5cGU9InN0cmluZyIvPgogICAgPGVsZW1lbnQgbmFtZT0iQXJ0aWZhY3RSZXNwb25zZSIgdHlwZT0ic2FtbHA6QXJ0aWZhY3RSZXNwb25zZVR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJBcnRpZmFjdFJlc3BvbnNlVHlwZSI+CiAgICAJPGNvbXBsZXhDb250ZW50PgogICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNhbWxwOlN0YXR1c1Jlc3BvbnNlVHlwZSI+CiAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgICAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjYW55IiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIi8+CiAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgICAgICA8L2V4dGVuc2lvbj4KICAgIAk8L2NvbXBsZXhDb250ZW50PgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9Ik1hbmFnZU5hbWVJRFJlcXVlc3QiIHR5cGU9InNhbWxwOk1hbmFnZU5hbWVJRFJlcXVlc3RUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iTWFuYWdlTmFtZUlEUmVxdWVzdFR5cGUiPgogICAgCTxjb21wbGV4Q29udGVudD4KICAgICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzYW1scDpSZXF1ZXN0QWJzdHJhY3RUeXBlIj4KICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KICAgICAgICAgICAgICAgICAgICA8Y2hvaWNlPgogICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6TmFtZUlEIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpFbmNyeXB0ZWRJRCIvPgogICAgICAgICAgICAgICAgICAgIDwvY2hvaWNlPgogICAgICAgICAgICAgICAgICAgIDxjaG9pY2U+CiAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbHA6TmV3SUQiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1scDpOZXdFbmNyeXB0ZWRJRCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWxwOlRlcm1pbmF0ZSIvPgogICAgICAgICAgICAgICAgICAgIDwvY2hvaWNlPgogICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KICAgICAgICAgICAgPC9leHRlbnNpb24+CiAgICAJPC9jb21wbGV4Q29udGVudD4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJOZXdJRCIgdHlwZT0ic3RyaW5nIi8+CiAgICA8ZWxlbWVudCBuYW1lPSJOZXdFbmNyeXB0ZWRJRCIgdHlwZT0ic2FtbDpFbmNyeXB0ZWRFbGVtZW50VHlwZSIvPgogICAgPGVsZW1lbnQgbmFtZT0iVGVybWluYXRlIiB0eXBlPSJzYW1scDpUZXJtaW5hdGVUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iVGVybWluYXRlVHlwZSIvPgogICAgPGVsZW1lbnQgbmFtZT0iTWFuYWdlTmFtZUlEUmVzcG9uc2UiIHR5cGU9InNhbWxwOlN0YXR1c1Jlc3BvbnNlVHlwZSIvPgogICAgPGVsZW1lbnQgbmFtZT0iTG9nb3V0UmVxdWVzdCIgdHlwZT0ic2FtbHA6TG9nb3V0UmVxdWVzdFR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJMb2dvdXRSZXF1ZXN0VHlwZSI+CiAgICAgICAgPGNvbXBsZXhDb250ZW50PgogICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNhbWxwOlJlcXVlc3RBYnN0cmFjdFR5cGUiPgogICAgICAgICAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICAgICAgICAgIDxjaG9pY2U+CiAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpCYXNlSUQiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOk5hbWVJRCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6RW5jcnlwdGVkSUQiLz4KICAgICAgICAgICAgICAgICAgICA8L2Nob2ljZT4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWxwOlNlc3Npb25JbmRleCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iUmVhc29uIiB0eXBlPSJzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iTm90T25PckFmdGVyIiB0eXBlPSJkYXRlVGltZSIgdXNlPSJvcHRpb25hbCIvPgogICAgICAgICAgICA8L2V4dGVuc2lvbj4KICAgICAgICA8L2NvbXBsZXhDb250ZW50PgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9IlNlc3Npb25JbmRleCIgdHlwZT0ic3RyaW5nIi8+CiAgICA8ZWxlbWVudCBuYW1lPSJMb2dvdXRSZXNwb25zZSIgdHlwZT0ic2FtbHA6U3RhdHVzUmVzcG9uc2VUeXBlIi8+CiAgICA8ZWxlbWVudCBuYW1lPSJOYW1lSURNYXBwaW5nUmVxdWVzdCIgdHlwZT0ic2FtbHA6TmFtZUlETWFwcGluZ1JlcXVlc3RUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iTmFtZUlETWFwcGluZ1JlcXVlc3RUeXBlIj4KICAgICAgICA8Y29tcGxleENvbnRlbnQ+CiAgICAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2FtbHA6UmVxdWVzdEFic3RyYWN0VHlwZSI+CiAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgICAgICAgICAgPGNob2ljZT4KICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkJhc2VJRCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6TmFtZUlEIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpFbmNyeXB0ZWRJRCIvPgogICAgICAgICAgICAgICAgICAgIDwvY2hvaWNlPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbHA6TmFtZUlEUG9saWN5Ii8+CiAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgICAgICA8L2V4dGVuc2lvbj4KICAgICAgICA8L2NvbXBsZXhDb250ZW50PgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9Ik5hbWVJRE1hcHBpbmdSZXNwb25zZSIgdHlwZT0ic2FtbHA6TmFtZUlETWFwcGluZ1Jlc3BvbnNlVHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9Ik5hbWVJRE1hcHBpbmdSZXNwb25zZVR5cGUiPgogICAgICAgIDxjb21wbGV4Q29udGVudD4KICAgICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzYW1scDpTdGF0dXNSZXNwb25zZVR5cGUiPgogICAgICAgICAgICAgICAgPGNob2ljZT4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6TmFtZUlEIi8+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkVuY3J5cHRlZElEIi8+CiAgICAgICAgICAgICAgICA8L2Nob2ljZT4KICAgICAgICAgICAgPC9leHRlbnNpb24+CiAgICAgICAgPC9jb21wbGV4Q29udGVudD4KICAgIDwvY29tcGxleFR5cGU+Cjwvc2NoZW1hPgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/schemas/sstc-metadata-attr.xsd</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNjaGVtYSAKICB0YXJnZXROYW1lc3BhY2U9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOm1ldGFkYXRhOmF0dHJpYnV0ZSIKICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCiAgeG1sbnM6c2FtbD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIKICB4bWxuczptZGF0dHI9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOm1ldGFkYXRhOmF0dHJpYnV0ZSIKICBlbGVtZW50Rm9ybURlZmF1bHQ9InVucXVhbGlmaWVkIgogIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIKICBibG9ja0RlZmF1bHQ9InN1YnN0aXR1dGlvbiIKICB2ZXJzaW9uPSIyLjAiPgoKICA8YW5ub3RhdGlvbj4KICAgIDxkb2N1bWVudGF0aW9uPgogICAgICBEb2N1bWVudCB0aXRsZTogU0FNTCBWMi4wIE1ldGFkYXRhIEV4dGVudGlvbiBmb3IgRW50aXR5IEF0dHJpYnV0ZXMgU2NoZW1hCiAgICAgIERvY3VtZW50IGlkZW50aWZpZXI6IHNzdGMtbWV0YWRhdGEtYXR0ci54c2QKICAgICAgTG9jYXRpb246IGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9kb2N1bWVudHMucGhwP3dnX2FiYnJldj1zZWN1cml0eQogICAgICBSZXZpc2lvbiBoaXN0b3J5OgogICAgICBWMS4wIChOb3ZlbWJlciAyMDA4KToKICAgICAgICBJbml0aWFsIHZlcnNpb24uCiAgICA8L2RvY3VtZW50YXRpb24+CiAgPC9hbm5vdGF0aW9uPgoKICA8aW1wb3J0IG5hbWVzcGFjZT0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIKICAgICAgc2NoZW1hTG9jYXRpb249InNhbWwtc2NoZW1hLWFzc2VydGlvbi0yLjAueHNkIi8+CgogIDxlbGVtZW50IG5hbWU9IkVudGl0eUF0dHJpYnV0ZXMiIHR5cGU9Im1kYXR0cjpFbnRpdHlBdHRyaWJ1dGVzVHlwZSIvPgogIDxjb21wbGV4VHlwZSBuYW1lPSJFbnRpdHlBdHRyaWJ1dGVzVHlwZSI+CiAgICA8Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkF0dHJpYnV0ZSIvPgogICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXNzZXJ0aW9uIi8+CiAgICA8L2Nob2ljZT4KICA8L2NvbXBsZXhUeXBlPgoKPC9zY2hlbWE+Cgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/schemas/sstc-saml-attribute-ext.xsd</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNjaGVtYSAKICB0YXJnZXROYW1lc3BhY2U9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOmF0dHJpYnV0ZTpleHQiCiAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgogIGVsZW1lbnRGb3JtRGVmYXVsdD0idW5xdWFsaWZpZWQiCiAgYXR0cmlidXRlRm9ybURlZmF1bHQ9InVucXVhbGlmaWVkIgogIGJsb2NrRGVmYXVsdD0ic3Vic3RpdHV0aW9uIgogIHZlcnNpb249IjIuMCI+CgogIDxhbm5vdGF0aW9uPgogICAgPGRvY3VtZW50YXRpb24+CiAgICAgIERvY3VtZW50IHRpdGxlOiBTQU1MIFYyLjAgQXR0cmlidXRlIEV4dGVuc2lvbiBTY2hlbWEKICAgICAgRG9jdW1lbnQgaWRlbnRpZmllcjogc3N0Yy1zYW1sLWF0dHJpYnV0ZS1leHQueHNkCiAgICAgIExvY2F0aW9uOiBodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZG9jdW1lbnRzLnBocD93Z19hYmJyZXY9c2VjdXJpdHkKICAgICAgUmV2aXNpb24gaGlzdG9yeToKICAgICAgVjEuMCAoT2N0b2JlciAyMDA4KToKICAgICAgICBJbml0aWFsIHZlcnNpb24uCiAgICA8L2RvY3VtZW50YXRpb24+CiAgPC9hbm5vdGF0aW9uPgoKICA8YXR0cmlidXRlIG5hbWU9Ik9yaWdpbmFsSXNzdWVyIiB0eXBlPSJhbnlVUkkiLz4KICA8YXR0cmlidXRlIG5hbWU9Ikxhc3RNb2RpZmllZCIgdHlwZT0iZGF0ZVRpbWUiLz4KCjwvc2NoZW1hPgoK]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/schemas/sstc-saml-metadata-algsupport-v1.0.xsd</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNjaGVtYSAKICB0YXJnZXROYW1lc3BhY2U9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOm1ldGFkYXRhOmFsZ3N1cHBvcnQiCiAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgogIHhtbG5zOmFsZz0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6bWV0YWRhdGE6YWxnc3VwcG9ydCIKICBlbGVtZW50Rm9ybURlZmF1bHQ9InVucXVhbGlmaWVkIgogIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIKICBibG9ja0RlZmF1bHQ9InN1YnN0aXR1dGlvbiIKICB2ZXJzaW9uPSIxLjAiPgoKICA8YW5ub3RhdGlvbj4KICAgIDxkb2N1bWVudGF0aW9uPgogICAgICBEb2N1bWVudCB0aXRsZTogTWV0YWRhdGEgRXh0ZW5zaW9uIFNjaGVtYSBmb3IgU0FNTCBWMi4wIE1ldGFkYXRhIFByb2ZpbGUgZm9yIEFsZ29yaXRobSBTdXBwb3J0IFZlcnNpb24gMS4wCiAgICAgIERvY3VtZW50IGlkZW50aWZpZXI6IHNzdGMtc2FtbC1tZXRhZGF0YS1hbGdzdXBwb3J0LnhzZAogICAgICBMb2NhdGlvbjogaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvc2VjdXJpdHkvc2FtbC9Qb3N0Mi4wLwogICAgICBSZXZpc2lvbiBoaXN0b3J5OgogICAgICBWMS4wIChKdW5lIDIwMTApOgogICAgICAgIEluaXRpYWwgdmVyc2lvbi4KICAgIDwvZG9jdW1lbnRhdGlvbj4KICA8L2Fubm90YXRpb24+CgogIDxlbGVtZW50IG5hbWU9IkRpZ2VzdE1ldGhvZCIgdHlwZT0iYWxnOkRpZ2VzdE1ldGhvZFR5cGUiLz4KICA8Y29tcGxleFR5cGUgbmFtZT0iRGlnZXN0TWV0aG9kVHlwZSI+CiAgICA8c2VxdWVuY2U+CiAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI2FueSIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgIDwvc2VxdWVuY2U+CiAgICA8YXR0cmlidXRlIG5hbWU9IkFsZ29yaXRobSIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+CiAgPC9jb21wbGV4VHlwZT4KCiAgPGVsZW1lbnQgbmFtZT0iU2lnbmluZ01ldGhvZCIgdHlwZT0iYWxnOlNpZ25pbmdNZXRob2RUeXBlIi8+CiAgPGNvbXBsZXhUeXBlIG5hbWU9IlNpZ25pbmdNZXRob2RUeXBlIj4KICAgIDxzZXF1ZW5jZT4KICAgICAgPGFueSBuYW1lc3BhY2U9IiMjYW55IiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgPC9zZXF1ZW5jZT4KICAgIDxhdHRyaWJ1dGUgbmFtZT0iQWxnb3JpdGhtIiB0eXBlPSJhbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KICAgIDxhdHRyaWJ1dGUgbmFtZT0iTWluS2V5U2l6ZSIgdHlwZT0icG9zaXRpdmVJbnRlZ2VyIi8+CiAgICA8YXR0cmlidXRlIG5hbWU9Ik1heEtleVNpemUiIHR5cGU9InBvc2l0aXZlSW50ZWdlciIvPgogIDwvY29tcGxleFR5cGU+Cgo8L3NjaGVtYT4KCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/schemas/sstc-saml-metadata-ui-v1.0.xsd</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzY2hlbWEgDQogIHRhcmdldE5hbWVzcGFjZT0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6bWV0YWRhdGE6dWkiDQogIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSINCiAgeG1sbnM6bWQ9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDptZXRhZGF0YSINCiAgeG1sbnM6bWR1aT0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6bWV0YWRhdGE6dWkiDQogIGVsZW1lbnRGb3JtRGVmYXVsdD0idW5xdWFsaWZpZWQiDQogIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCINCiAgYmxvY2tEZWZhdWx0PSJzdWJzdGl0dXRpb24iDQogIHZlcnNpb249IjEuMCI+DQoNCiAgPGFubm90YXRpb24+DQogICAgPGRvY3VtZW50YXRpb24+DQogICAgICBEb2N1bWVudCB0aXRsZTogTWV0YWRhdGEgRXh0ZW5zaW9uIFNjaGVtYSBmb3IgU0FNTCBWMi4wIE1ldGFkYXRhIEV4dGVuc2lvbnMgZm9yIExvZ2luIGFuZCBEaXNjb3ZlcnkgVXNlciBJbnRlcmZhY2UgVmVyc2lvbiAxLjANCiAgICAgIERvY3VtZW50IGlkZW50aWZpZXI6IHNzdGMtc2FtbC1tZXRhZGF0YS11aS12MS4wLnhzZA0KICAgICAgTG9jYXRpb246IGh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3NlY3VyaXR5L3NhbWwvUG9zdDIuMC8NCiAgICAgIFJldmlzaW9uIGhpc3Rvcnk6DQogICAgICAxNiBOb3ZlbWJlciAyMDEwOg0KICAgICAgICBBZGRlZCBLZXl3b3JkcyBlbGVtZW50L3R5cGUuDQogICAgICAwMSBOb3ZlbWJlciAyMDEwDQogICAgICAgIENoYW5nZWQgZmlsZW5hbWUuDQogICAgICBTZXB0ZW1iZXIgMjAxMDoNCiAgICAgICAgSW5pdGlhbCB2ZXJzaW9uLg0KICAgIDwvZG9jdW1lbnRhdGlvbj4NCiAgPC9hbm5vdGF0aW9uPg0KDQogIDxpbXBvcnQgbmFtZXNwYWNlPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6bWV0YWRhdGEiDQogICAgc2NoZW1hTG9jYXRpb249InNhbWwtc2NoZW1hLW1ldGFkYXRhLTIuMC54c2QiLz4NCiAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSINCiAgICBzY2hlbWFMb2NhdGlvbj0ieG1sLnhzZCIvPg0KDQogIDxlbGVtZW50IG5hbWU9IlVJSW5mbyIgdHlwZT0ibWR1aTpVSUluZm9UeXBlIiAvPg0KICA8Y29tcGxleFR5cGUgbmFtZT0iVUlJbmZvVHlwZSI+DQogICAgPGNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4NCiAgICAgIDxlbGVtZW50IHJlZj0ibWR1aTpEaXNwbGF5TmFtZSIvPg0KICAgICAgPGVsZW1lbnQgcmVmPSJtZHVpOkRlc2NyaXB0aW9uIi8+DQogICAgICA8ZWxlbWVudCByZWY9Im1kdWk6S2V5d29yZHMiLz4NCiAgICAgIDxlbGVtZW50IHJlZj0ibWR1aTpMb2dvIi8+DQogICAgICA8ZWxlbWVudCByZWY9Im1kdWk6SW5mb3JtYXRpb25VUkwiLz4NCiAgICAgIDxlbGVtZW50IHJlZj0ibWR1aTpQcml2YWN5U3RhdGVtZW50VVJMIi8+DQogICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4NCiAgICA8L2Nob2ljZT4NCiAgPC9jb21wbGV4VHlwZT4NCg0KICA8ZWxlbWVudCBuYW1lPSJEaXNwbGF5TmFtZSIgdHlwZT0ibWQ6bG9jYWxpemVkTmFtZVR5cGUiLz4NCiAgPGVsZW1lbnQgbmFtZT0iRGVzY3JpcHRpb24iIHR5cGU9Im1kOmxvY2FsaXplZE5hbWVUeXBlIi8+DQogIDxlbGVtZW50IG5hbWU9IkluZm9ybWF0aW9uVVJMIiB0eXBlPSJtZDpsb2NhbGl6ZWRVUklUeXBlIi8+DQogIDxlbGVtZW50IG5hbWU9IlByaXZhY3lTdGF0ZW1lbnRVUkwiIHR5cGU9Im1kOmxvY2FsaXplZFVSSVR5cGUiLz4NCg0KICA8ZWxlbWVudCBuYW1lPSJLZXl3b3JkcyIgdHlwZT0ibWR1aTpLZXl3b3Jkc1R5cGUiLz4NCiAgPGNvbXBsZXhUeXBlIG5hbWU9IktleXdvcmRzVHlwZSI+DQogICAgPHNpbXBsZUNvbnRlbnQ+DQogICAgICA8ZXh0ZW5zaW9uIGJhc2U9Im1kdWk6bGlzdE9mU3RyaW5ncyI+DQogICAgICAgIDxhdHRyaWJ1dGUgcmVmPSJ4bWw6bGFuZyIgdXNlPSJyZXF1aXJlZCIvPg0KICAgICAgPC9leHRlbnNpb24+DQogICAgPC9zaW1wbGVDb250ZW50Pg0KICA8L2NvbXBsZXhUeXBlPg0KICANCiAgPHNpbXBsZVR5cGUgbmFtZT0ibGlzdE9mU3RyaW5ncyI+DQogICAgPGxpc3QgaXRlbVR5cGU9InN0cmluZyIvPg0KICA8L3NpbXBsZVR5cGU+DQoNCiAgPGVsZW1lbnQgbmFtZT0iTG9nbyIgdHlwZT0ibWR1aTpMb2dvVHlwZSIvPg0KICA8Y29tcGxleFR5cGUgbmFtZT0iTG9nb1R5cGUiPg0KICAgIDxzaW1wbGVDb250ZW50Pg0KICAgICAgPGV4dGVuc2lvbiBiYXNlPSJhbnlVUkkiPg0KICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImhlaWdodCIgdHlwZT0icG9zaXRpdmVJbnRlZ2VyIiB1c2U9InJlcXVpcmVkIi8+DQogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0id2lkdGgiIHR5cGU9InBvc2l0aXZlSW50ZWdlciIgdXNlPSJyZXF1aXJlZCIvPg0KICAgICAgICA8YXR0cmlidXRlIHJlZj0ieG1sOmxhbmciLz4NCiAgICAgIDwvZXh0ZW5zaW9uPg0KICAgIDwvc2ltcGxlQ29udGVudD4NCiAgPC9jb21wbGV4VHlwZT4NCg0KICA8ZWxlbWVudCBuYW1lPSJEaXNjb0hpbnRzIiB0eXBlPSJtZHVpOkRpc2NvSGludHNUeXBlIi8+DQogIDxjb21wbGV4VHlwZSBuYW1lPSJEaXNjb0hpbnRzVHlwZSI+DQogICAgPGNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4NCiAgICAgIDxlbGVtZW50IHJlZj0ibWR1aTpJUEhpbnQiLz4NCiAgICAgIDxlbGVtZW50IHJlZj0ibWR1aTpEb21haW5IaW50Ii8+DQogICAgICA8ZWxlbWVudCByZWY9Im1kdWk6R2VvbG9jYXRpb25IaW50Ii8+DQogICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4NCiAgICA8L2Nob2ljZT4NCiAgPC9jb21wbGV4VHlwZT4NCg0KICA8ZWxlbWVudCBuYW1lPSJJUEhpbnQiIHR5cGU9InN0cmluZyIvPg0KICA8ZWxlbWVudCBuYW1lPSJEb21haW5IaW50IiB0eXBlPSJzdHJpbmciLz4JDQogIDxlbGVtZW50IG5hbWU9Ikdlb2xvY2F0aW9uSGludCIgdHlwZT0iYW55VVJJIi8+DQoNCjwvc2NoZW1hPg0KDQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/schemas/xenc-schema.xsd</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KCjxzY2hlbWEgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJyB2ZXJzaW9uPScxLjAnCiAgICAgICAgeG1sbnM6eGVuYz0naHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjJwogICAgICAgIHhtbG5zOmRzPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjJwogICAgICAgIHRhcmdldE5hbWVzcGFjZT0naHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjJwogICAgICAgIGVsZW1lbnRGb3JtRGVmYXVsdD0ncXVhbGlmaWVkJz4KCiAgPGltcG9ydCBuYW1lc3BhY2U9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMnCiAgICAgICAgICBzY2hlbWFMb2NhdGlvbj0neG1sZHNpZy1jb3JlLXNjaGVtYS54c2QnLz4KCiAgPGNvbXBsZXhUeXBlIG5hbWU9J0VuY3J5cHRlZFR5cGUnIGFic3RyYWN0PSd0cnVlJz4KICAgIDxzZXF1ZW5jZT4KICAgICAgPGVsZW1lbnQgbmFtZT0nRW5jcnlwdGlvbk1ldGhvZCcgdHlwZT0neGVuYzpFbmNyeXB0aW9uTWV0aG9kVHlwZScKICAgICAgIG1pbk9jY3Vycz0nMCcvPgogICAgICA8ZWxlbWVudCByZWY9J2RzOktleUluZm8nIG1pbk9jY3Vycz0nMCcvPgogICAgICA8ZWxlbWVudCByZWY9J3hlbmM6Q2lwaGVyRGF0YScvPgogICAgICA8ZWxlbWVudCByZWY9J3hlbmM6RW5jcnlwdGlvblByb3BlcnRpZXMnIG1pbk9jY3Vycz0nMCcvPgogICAgPC9zZXF1ZW5jZT4KICAgIDxhdHRyaWJ1dGUgbmFtZT0nSWQnIHR5cGU9J0lEJyB1c2U9J29wdGlvbmFsJy8+CiAgICA8YXR0cmlidXRlIG5hbWU9J1R5cGUnIHR5cGU9J2FueVVSSScgdXNlPSdvcHRpb25hbCcvPgogICAgPGF0dHJpYnV0ZSBuYW1lPSdNaW1lVHlwZScgdHlwZT0nc3RyaW5nJyB1c2U9J29wdGlvbmFsJy8+CiAgICA8YXR0cmlidXRlIG5hbWU9J0VuY29kaW5nJyB0eXBlPSdhbnlVUkknIHVzZT0nb3B0aW9uYWwnLz4KICA8L2NvbXBsZXhUeXBlPgogIAogIDxjb21wbGV4VHlwZSBuYW1lPSdFbmNyeXB0aW9uTWV0aG9kVHlwZScgbWl4ZWQ9J3RydWUnPgogICAgPHNlcXVlbmNlPgogICAgICA8ZWxlbWVudCBuYW1lPSdLZXlTaXplJyBtaW5PY2N1cnM9JzAnIHR5cGU9J3hlbmM6S2V5U2l6ZVR5cGUnLz4KICAgICAgPGVsZW1lbnQgbmFtZT0nT0FFUHBhcmFtcycgbWluT2NjdXJzPScwJyB0eXBlPSdiYXNlNjRCaW5hcnknLz4KICAgICAgPGFueSBuYW1lc3BhY2U9JyMjb3RoZXInIG1pbk9jY3Vycz0nMCcgbWF4T2NjdXJzPSd1bmJvdW5kZWQnLz4KICAgIDwvc2VxdWVuY2U+CiAgICA8YXR0cmlidXRlIG5hbWU9J0FsZ29yaXRobScgdHlwZT0nYW55VVJJJyB1c2U9J3JlcXVpcmVkJy8+CiAgPC9jb21wbGV4VHlwZT4KCiAgICA8c2ltcGxlVHlwZSBuYW1lPSdLZXlTaXplVHlwZSc+CiAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJpbnRlZ2VyIi8+CiAgICA8L3NpbXBsZVR5cGU+CgogIDxlbGVtZW50IG5hbWU9J0NpcGhlckRhdGEnIHR5cGU9J3hlbmM6Q2lwaGVyRGF0YVR5cGUnLz4KICA8Y29tcGxleFR5cGUgbmFtZT0nQ2lwaGVyRGF0YVR5cGUnPgogICAgIDxjaG9pY2U+CiAgICAgICA8ZWxlbWVudCBuYW1lPSdDaXBoZXJWYWx1ZScgdHlwZT0nYmFzZTY0QmluYXJ5Jy8+CiAgICAgICA8ZWxlbWVudCByZWY9J3hlbmM6Q2lwaGVyUmVmZXJlbmNlJy8+CiAgICAgPC9jaG9pY2U+CiAgICA8L2NvbXBsZXhUeXBlPgoKICAgPGVsZW1lbnQgbmFtZT0nQ2lwaGVyUmVmZXJlbmNlJyB0eXBlPSd4ZW5jOkNpcGhlclJlZmVyZW5jZVR5cGUnLz4KICAgPGNvbXBsZXhUeXBlIG5hbWU9J0NpcGhlclJlZmVyZW5jZVR5cGUnPgogICAgICAgPGNob2ljZT4KICAgICAgICAgPGVsZW1lbnQgbmFtZT0nVHJhbnNmb3JtcycgdHlwZT0neGVuYzpUcmFuc2Zvcm1zVHlwZScgbWluT2NjdXJzPScwJy8+CiAgICAgICA8L2Nob2ljZT4KICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nVVJJJyB0eXBlPSdhbnlVUkknIHVzZT0ncmVxdWlyZWQnLz4KICAgPC9jb21wbGV4VHlwZT4KCiAgICAgPGNvbXBsZXhUeXBlIG5hbWU9J1RyYW5zZm9ybXNUeXBlJz4KICAgICAgIDxzZXF1ZW5jZT4KICAgICAgICAgPGVsZW1lbnQgcmVmPSdkczpUcmFuc2Zvcm0nIG1heE9jY3Vycz0ndW5ib3VuZGVkJy8+CiAgICAgICA8L3NlcXVlbmNlPgogICAgIDwvY29tcGxleFR5cGU+CgoKICA8ZWxlbWVudCBuYW1lPSdFbmNyeXB0ZWREYXRhJyB0eXBlPSd4ZW5jOkVuY3J5cHRlZERhdGFUeXBlJy8+CiAgPGNvbXBsZXhUeXBlIG5hbWU9J0VuY3J5cHRlZERhdGFUeXBlJz4KICAgIDxjb21wbGV4Q29udGVudD4KICAgICAgPGV4dGVuc2lvbiBiYXNlPSd4ZW5jOkVuY3J5cHRlZFR5cGUnPgogICAgICAgPC9leHRlbnNpb24+CiAgICA8L2NvbXBsZXhDb250ZW50PgogIDwvY29tcGxleFR5cGU+CgogIDwhLS0gQ2hpbGRyZW4gb2YgZHM6S2V5SW5mbyAtLT4KCiAgPGVsZW1lbnQgbmFtZT0nRW5jcnlwdGVkS2V5JyB0eXBlPSd4ZW5jOkVuY3J5cHRlZEtleVR5cGUnLz4KICA8Y29tcGxleFR5cGUgbmFtZT0nRW5jcnlwdGVkS2V5VHlwZSc+CiAgICA8Y29tcGxleENvbnRlbnQ+CiAgICAgIDxleHRlbnNpb24gYmFzZT0neGVuYzpFbmNyeXB0ZWRUeXBlJz4KICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICA8ZWxlbWVudCByZWY9J3hlbmM6UmVmZXJlbmNlTGlzdCcgbWluT2NjdXJzPScwJy8+CiAgICAgICAgICA8ZWxlbWVudCBuYW1lPSdDYXJyaWVkS2V5TmFtZScgdHlwZT0nc3RyaW5nJyBtaW5PY2N1cnM9JzAnLz4KICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nUmVjaXBpZW50JyB0eXBlPSdzdHJpbmcnCiAgICAgICAgIHVzZT0nb3B0aW9uYWwnLz4KICAgICAgPC9leHRlbnNpb24+CiAgICA8L2NvbXBsZXhDb250ZW50PgogIDwvY29tcGxleFR5cGU+CgogICAgPGVsZW1lbnQgbmFtZT0iQWdyZWVtZW50TWV0aG9kIiB0eXBlPSJ4ZW5jOkFncmVlbWVudE1ldGhvZFR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZ3JlZW1lbnRNZXRob2RUeXBlIiBtaXhlZD0idHJ1ZSI+CiAgICAgIDxzZXF1ZW5jZT4KICAgICAgICA8ZWxlbWVudCBuYW1lPSJLQS1Ob25jZSIgbWluT2NjdXJzPSIwIiB0eXBlPSJiYXNlNjRCaW5hcnkiLz4KICAgICAgICA8IS0tIDxlbGVtZW50IHJlZj0iZHM6RGlnZXN0TWV0aG9kIiBtaW5PY2N1cnM9IjAiLz4gLS0+CiAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICA8ZWxlbWVudCBuYW1lPSJPcmlnaW5hdG9yS2V5SW5mbyIgbWluT2NjdXJzPSIwIiB0eXBlPSJkczpLZXlJbmZvVHlwZSIvPgogICAgICAgIDxlbGVtZW50IG5hbWU9IlJlY2lwaWVudEtleUluZm8iIG1pbk9jY3Vycz0iMCIgdHlwZT0iZHM6S2V5SW5mb1R5cGUiLz4KICAgICAgPC9zZXF1ZW5jZT4KICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJBbGdvcml0aG0iIHR5cGU9ImFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgogICAgPC9jb21wbGV4VHlwZT4KCiAgPCEtLSBFbmQgQ2hpbGRyZW4gb2YgZHM6S2V5SW5mbyAtLT4KCiAgPGVsZW1lbnQgbmFtZT0nUmVmZXJlbmNlTGlzdCc+CiAgICA8Y29tcGxleFR5cGU+CiAgICAgIDxjaG9pY2UgbWluT2NjdXJzPScxJyBtYXhPY2N1cnM9J3VuYm91bmRlZCc+CiAgICAgICAgPGVsZW1lbnQgbmFtZT0nRGF0YVJlZmVyZW5jZScgdHlwZT0neGVuYzpSZWZlcmVuY2VUeXBlJy8+CiAgICAgICAgPGVsZW1lbnQgbmFtZT0nS2V5UmVmZXJlbmNlJyB0eXBlPSd4ZW5jOlJlZmVyZW5jZVR5cGUnLz4KICAgICAgPC9jaG9pY2U+CiAgICA8L2NvbXBsZXhUeXBlPgogIDwvZWxlbWVudD4KCiAgPGNvbXBsZXhUeXBlIG5hbWU9J1JlZmVyZW5jZVR5cGUnPgogICAgPHNlcXVlbmNlPgogICAgICA8YW55IG5hbWVzcGFjZT0nIyNvdGhlcicgbWluT2NjdXJzPScwJyBtYXhPY2N1cnM9J3VuYm91bmRlZCcvPgogICAgPC9zZXF1ZW5jZT4KICAgIDxhdHRyaWJ1dGUgbmFtZT0nVVJJJyB0eXBlPSdhbnlVUkknIHVzZT0ncmVxdWlyZWQnLz4KICA8L2NvbXBsZXhUeXBlPgoKCiAgPGVsZW1lbnQgbmFtZT0nRW5jcnlwdGlvblByb3BlcnRpZXMnIHR5cGU9J3hlbmM6RW5jcnlwdGlvblByb3BlcnRpZXNUeXBlJy8+CiAgPGNvbXBsZXhUeXBlIG5hbWU9J0VuY3J5cHRpb25Qcm9wZXJ0aWVzVHlwZSc+CiAgICA8c2VxdWVuY2U+CiAgICAgIDxlbGVtZW50IHJlZj0neGVuYzpFbmNyeXB0aW9uUHJvcGVydHknIG1heE9jY3Vycz0ndW5ib3VuZGVkJy8+CiAgICA8L3NlcXVlbmNlPgogICAgPGF0dHJpYnV0ZSBuYW1lPSdJZCcgdHlwZT0nSUQnIHVzZT0nb3B0aW9uYWwnLz4KICA8L2NvbXBsZXhUeXBlPgoKICAgIDxlbGVtZW50IG5hbWU9J0VuY3J5cHRpb25Qcm9wZXJ0eScgdHlwZT0neGVuYzpFbmNyeXB0aW9uUHJvcGVydHlUeXBlJy8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0nRW5jcnlwdGlvblByb3BlcnR5VHlwZScgbWl4ZWQ9J3RydWUnPgogICAgICA8Y2hvaWNlIG1heE9jY3Vycz0ndW5ib3VuZGVkJz4KICAgICAgICA8YW55IG5hbWVzcGFjZT0nIyNvdGhlcicgcHJvY2Vzc0NvbnRlbnRzPSdsYXgnLz4KICAgICAgPC9jaG9pY2U+CiAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nVGFyZ2V0JyB0eXBlPSdhbnlVUkknIHVzZT0nb3B0aW9uYWwnLz4KICAgICAgPGF0dHJpYnV0ZSBuYW1lPSdJZCcgdHlwZT0nSUQnIHVzZT0nb3B0aW9uYWwnLz4KICAgICAgPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIvPgogICAgPC9jb21wbGV4VHlwZT4KCjwvc2NoZW1hPgoK]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/schemas/xml.xsd</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0nMS4wJz8+Cjw/eG1sLXN0eWxlc2hlZXQgaHJlZj0iLi4vMjAwOC8wOS94c2QueHNsIiB0eXBlPSJ0ZXh0L3hzbCI/Pgo8eHM6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiAKICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAogIHhtbG5zICAgPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIgogIHhtbDpsYW5nPSJlbiI+CgogPHhzOmFubm90YXRpb24+CiAgPHhzOmRvY3VtZW50YXRpb24+CiAgIDxkaXY+CiAgICA8aDE+QWJvdXQgdGhlIFhNTCBuYW1lc3BhY2U8L2gxPgoKICAgIDxkaXYgY2xhc3M9ImJvZHl0ZXh0Ij4KICAgICA8cD4KICAgICAgVGhpcyBzY2hlbWEgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBYTUwgbmFtZXNwYWNlLCBpbiBhIGZvcm0KICAgICAgc3VpdGFibGUgZm9yIGltcG9ydCBieSBvdGhlciBzY2hlbWEgZG9jdW1lbnRzLgogICAgIDwvcD4KICAgICA8cD4KICAgICAgU2VlIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZS5odG1sIj4KICAgICAgaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLmh0bWw8L2E+IGFuZAogICAgICA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sIj4KICAgICAgaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbDwvYT4gZm9yIGluZm9ybWF0aW9uIAogICAgICBhYm91dCB0aGlzIG5hbWVzcGFjZS4KICAgICA8L3A+CiAgICAgPHA+CiAgICAgIE5vdGUgdGhhdCBsb2NhbCBuYW1lcyBpbiB0aGlzIG5hbWVzcGFjZSBhcmUgaW50ZW5kZWQgdG8gYmUKICAgICAgZGVmaW5lZCBvbmx5IGJ5IHRoZSBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtIG9yIGl0cyBzdWJncm91cHMuCiAgICAgIFRoZSBuYW1lcyBjdXJyZW50bHkgZGVmaW5lZCBpbiB0aGlzIG5hbWVzcGFjZSBhcmUgbGlzdGVkIGJlbG93LgogICAgICBUaGV5IHNob3VsZCBub3QgYmUgdXNlZCB3aXRoIGNvbmZsaWN0aW5nIHNlbWFudGljcyBieSBhbnkgV29ya2luZwogICAgICBHcm91cCwgc3BlY2lmaWNhdGlvbiwgb3IgZG9jdW1lbnQgaW5zdGFuY2UuCiAgICAgPC9wPgogICAgIDxwPiAgIAogICAgICBTZWUgZnVydGhlciBiZWxvdyBpbiB0aGlzIGRvY3VtZW50IGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IDxhCiAgICAgIGhyZWY9IiN1c2FnZSI+aG93IHRvIHJlZmVyIHRvIHRoaXMgc2NoZW1hIGRvY3VtZW50IGZyb20geW91ciBvd24KICAgICAgWFNEIHNjaGVtYSBkb2N1bWVudHM8L2E+IGFuZCBhYm91dCA8YSBocmVmPSIjbnN2ZXJzaW9uaW5nIj50aGUKICAgICAgbmFtZXNwYWNlLXZlcnNpb25pbmcgcG9saWN5IGdvdmVybmluZyB0aGlzIHNjaGVtYSBkb2N1bWVudDwvYT4uCiAgICAgPC9wPgogICAgPC9kaXY+CiAgIDwvZGl2PgogIDwveHM6ZG9jdW1lbnRhdGlvbj4KIDwveHM6YW5ub3RhdGlvbj4KCiA8eHM6YXR0cmlidXRlIG5hbWU9ImxhbmciPgogIDx4czphbm5vdGF0aW9uPgogICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgIDxkaXY+CiAgICAgCiAgICAgIDxoMz5sYW5nIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk8L2gzPgogICAgICA8cD4KICAgICAgIGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlCiAgICAgICBpcyBhIGxhbmd1YWdlIGNvZGUgZm9yIHRoZSBuYXR1cmFsIGxhbmd1YWdlIG9mIHRoZSBjb250ZW50IG9mCiAgICAgICBhbnkgZWxlbWVudDsgaXRzIHZhbHVlIGlzIGluaGVyaXRlZC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZAogICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi48L3A+CiAgICAgCiAgICA8L2Rpdj4KICAgIDxkaXY+CiAgICAgPGg0Pk5vdGVzPC9oND4KICAgICA8cD4KICAgICAgQXR0ZW1wdGluZyB0byBpbnN0YWxsIHRoZSByZWxldmFudCBJU08gMi0gYW5kIDMtbGV0dGVyCiAgICAgIGNvZGVzIGFzIHRoZSBlbnVtZXJhdGVkIHBvc3NpYmxlIHZhbHVlcyBpcyBwcm9iYWJseSBuZXZlcgogICAgICBnb2luZyB0byBiZSBhIHJlYWxpc3RpYyBwb3NzaWJpbGl0eS4gIAogICAgIDwvcD4KICAgICA8cD4KICAgICAgU2VlIEJDUCA0NyBhdCA8YSBocmVmPSJodHRwOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9iY3AvYmNwNDcudHh0Ij4KICAgICAgIGh0dHA6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL2JjcC9iY3A0Ny50eHQ8L2E+CiAgICAgIGFuZCB0aGUgSUFOQSBsYW5ndWFnZSBzdWJ0YWcgcmVnaXN0cnkgYXQKICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9sYW5ndWFnZS1zdWJ0YWctcmVnaXN0cnkiPgogICAgICAgaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9sYW5ndWFnZS1zdWJ0YWctcmVnaXN0cnk8L2E+CiAgICAgIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgogICAgIDwvcD4KICAgICA8cD4KICAgICAgVGhlIHVuaW9uIGFsbG93cyBmb3IgdGhlICd1bi1kZWNsYXJhdGlvbicgb2YgeG1sOmxhbmcgd2l0aAogICAgICB0aGUgZW1wdHkgc3RyaW5nLgogICAgIDwvcD4KICAgIDwvZGl2PgogICA8L3hzOmRvY3VtZW50YXRpb24+CiAgPC94czphbm5vdGF0aW9uPgogIDx4czpzaW1wbGVUeXBlPgogICA8eHM6dW5pb24gbWVtYmVyVHlwZXM9InhzOmxhbmd1YWdlIj4KICAgIDx4czpzaW1wbGVUeXBlPiAgICAKICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSIiLz4KICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgPC94czpzaW1wbGVUeXBlPgogICA8L3hzOnVuaW9uPgogIDwveHM6c2ltcGxlVHlwZT4KIDwveHM6YXR0cmlidXRlPgoKIDx4czphdHRyaWJ1dGUgbmFtZT0ic3BhY2UiPgogIDx4czphbm5vdGF0aW9uPgogICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgIDxkaXY+CiAgICAgCiAgICAgIDxoMz5zcGFjZSAoYXMgYW4gYXR0cmlidXRlIG5hbWUpPC9oMz4KICAgICAgPHA+CiAgICAgICBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZQogICAgICAgdmFsdWUgaXMgYSBrZXl3b3JkIGluZGljYXRpbmcgd2hhdCB3aGl0ZXNwYWNlIHByb2Nlc3NpbmcKICAgICAgIGRpc2NpcGxpbmUgaXMgaW50ZW5kZWQgZm9yIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50OyBpdHMKICAgICAgIHZhbHVlIGlzIGluaGVyaXRlZC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZCBieSB2aXJ0dWUgb2YgaXRzCiAgICAgICBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi48L3A+CiAgICAgCiAgICA8L2Rpdj4KICAgPC94czpkb2N1bWVudGF0aW9uPgogIDwveHM6YW5ub3RhdGlvbj4KICA8eHM6c2ltcGxlVHlwZT4KICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5DTmFtZSI+CiAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImRlZmF1bHQiLz4KICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icHJlc2VydmUiLz4KICAgPC94czpyZXN0cmljdGlvbj4KICA8L3hzOnNpbXBsZVR5cGU+CiA8L3hzOmF0dHJpYnV0ZT4KIAogPHhzOmF0dHJpYnV0ZSBuYW1lPSJiYXNlIiB0eXBlPSJ4czphbnlVUkkiPiA8eHM6YW5ub3RhdGlvbj4KICAgPHhzOmRvY3VtZW50YXRpb24+CiAgICA8ZGl2PgogICAgIAogICAgICA8aDM+YmFzZSAoYXMgYW4gYXR0cmlidXRlIG5hbWUpPC9oMz4KICAgICAgPHA+CiAgICAgICBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZQogICAgICAgcHJvdmlkZXMgYSBVUkkgdG8gYmUgdXNlZCBhcyB0aGUgYmFzZSBmb3IgaW50ZXJwcmV0aW5nIGFueQogICAgICAgcmVsYXRpdmUgVVJJcyBpbiB0aGUgc2NvcGUgb2YgdGhlIGVsZW1lbnQgb24gd2hpY2ggaXQKICAgICAgIGFwcGVhcnM7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQKICAgICAgIGJ5IHZpcnR1ZSBvZiBpdHMgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIEJhc2Ugc3BlY2lmaWNhdGlvbi48L3A+CiAgICAgCiAgICAgPHA+CiAgICAgIFNlZSA8YQogICAgICBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxiYXNlLyI+aHR0cDovL3d3dy53My5vcmcvVFIveG1sYmFzZS88L2E+CiAgICAgIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGF0dHJpYnV0ZS4KICAgICA8L3A+CiAgICA8L2Rpdj4KICAgPC94czpkb2N1bWVudGF0aW9uPgogIDwveHM6YW5ub3RhdGlvbj4KIDwveHM6YXR0cmlidXRlPgogCiA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4czpJRCI+CiAgPHhzOmFubm90YXRpb24+CiAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgPGRpdj4KICAgICAKICAgICAgPGgzPmlkIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk8L2gzPiAKICAgICAgPHA+CiAgICAgICBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZQogICAgICAgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGlmIGRlY2xhcmVkIHRvIGJlIG9mIHR5cGUgSUQuCiAgICAgICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZQogICAgICAgeG1sOmlkIHNwZWNpZmljYXRpb24uPC9wPgogICAgIAogICAgIDxwPgogICAgICBTZWUgPGEKICAgICAgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sLWlkLyI+aHR0cDovL3d3dy53My5vcmcvVFIveG1sLWlkLzwvYT4KICAgICAgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgYXR0cmlidXRlLgogICAgIDwvcD4KICAgIDwvZGl2PgogICA8L3hzOmRvY3VtZW50YXRpb24+CiAgPC94czphbm5vdGF0aW9uPgogPC94czphdHRyaWJ1dGU+CgogPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNwZWNpYWxBdHRycyI+CiAgPHhzOmF0dHJpYnV0ZSByZWY9InhtbDpiYXNlIi8+CiAgPHhzOmF0dHJpYnV0ZSByZWY9InhtbDpsYW5nIi8+CiAgPHhzOmF0dHJpYnV0ZSByZWY9InhtbDpzcGFjZSIvPgogIDx4czphdHRyaWJ1dGUgcmVmPSJ4bWw6aWQiLz4KIDwveHM6YXR0cmlidXRlR3JvdXA+CgogPHhzOmFubm90YXRpb24+CiAgPHhzOmRvY3VtZW50YXRpb24+CiAgIDxkaXY+CiAgIAogICAgPGgzPkZhdGhlciAoaW4gYW55IGNvbnRleHQgYXQgYWxsKTwvaDM+IAoKICAgIDxkaXYgY2xhc3M9ImJvZHl0ZXh0Ij4KICAgICA8cD4KICAgICAgZGVub3RlcyBKb24gQm9zYWssIHRoZSBjaGFpciBvZiAKICAgICAgdGhlIG9yaWdpbmFsIFhNTCBXb3JraW5nIEdyb3VwLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkIGJ5IAogICAgICB0aGUgZm9sbG93aW5nIGRlY2lzaW9uIG9mIHRoZSBXM0MgWE1MIFBsZW5hcnkgYW5kIAogICAgICBYTUwgQ29vcmRpbmF0aW9uIGdyb3VwczoKICAgICA8L3A+CiAgICAgPGJsb2NrcXVvdGU+CiAgICAgICA8cD4KCUluIGFwcHJlY2lhdGlvbiBmb3IgaGlzIHZpc2lvbiwgbGVhZGVyc2hpcCBhbmQKCWRlZGljYXRpb24gdGhlIFczQyBYTUwgUGxlbmFyeSBvbiB0aGlzIDEwdGggZGF5IG9mCglGZWJydWFyeSwgMjAwMCwgcmVzZXJ2ZXMgZm9yIEpvbiBCb3NhayBpbiBwZXJwZXR1aXR5Cgl0aGUgWE1MIG5hbWUgInhtbDpGYXRoZXIiLgogICAgICAgPC9wPgogICAgIDwvYmxvY2txdW90ZT4KICAgIDwvZGl2PgogICA8L2Rpdj4KICA8L3hzOmRvY3VtZW50YXRpb24+CiA8L3hzOmFubm90YXRpb24+CgogPHhzOmFubm90YXRpb24+CiAgPHhzOmRvY3VtZW50YXRpb24+CiAgIDxkaXYgeG1sOmlkPSJ1c2FnZSIgaWQ9InVzYWdlIj4KICAgIDxoMj48YSBuYW1lPSJ1c2FnZSI+QWJvdXQgdGhpcyBzY2hlbWEgZG9jdW1lbnQ8L2E+PC9oMj4KCiAgICA8ZGl2IGNsYXNzPSJib2R5dGV4dCI+CiAgICAgPHA+CiAgICAgIFRoaXMgc2NoZW1hIGRlZmluZXMgYXR0cmlidXRlcyBhbmQgYW4gYXR0cmlidXRlIGdyb3VwIHN1aXRhYmxlCiAgICAgIGZvciB1c2UgYnkgc2NoZW1hcyB3aXNoaW5nIHRvIGFsbG93IDxjb2RlPnhtbDpiYXNlPC9jb2RlPiwKICAgICAgPGNvZGU+eG1sOmxhbmc8L2NvZGU+LCA8Y29kZT54bWw6c3BhY2U8L2NvZGU+IG9yCiAgICAgIDxjb2RlPnhtbDppZDwvY29kZT4gYXR0cmlidXRlcyBvbiBlbGVtZW50cyB0aGV5IGRlZmluZS4KICAgICA8L3A+CiAgICAgPHA+CiAgICAgIFRvIGVuYWJsZSB0aGlzLCBzdWNoIGEgc2NoZW1hIG11c3QgaW1wb3J0IHRoaXMgc2NoZW1hIGZvcgogICAgICB0aGUgWE1MIG5hbWVzcGFjZSwgZS5nLiBhcyBmb2xsb3dzOgogICAgIDwvcD4KICAgICA8cHJlPgogICAgICAgICAgJmx0O3NjaGVtYSAuIC4gLj4KICAgICAgICAgICAuIC4gLgogICAgICAgICAgICZsdDtpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiCiAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIi8+CiAgICAgPC9wcmU+CiAgICAgPHA+CiAgICAgIG9yCiAgICAgPC9wPgogICAgIDxwcmU+CiAgICAgICAgICAgJmx0O2ltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIKICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnczLm9yZy8yMDA5LzAxL3htbC54c2QiLz4KICAgICA8L3ByZT4KICAgICA8cD4KICAgICAgU3Vic2VxdWVudGx5LCBxdWFsaWZpZWQgcmVmZXJlbmNlIHRvIGFueSBvZiB0aGUgYXR0cmlidXRlcyBvciB0aGUKICAgICAgZ3JvdXAgZGVmaW5lZCBiZWxvdyB3aWxsIGhhdmUgdGhlIGRlc2lyZWQgZWZmZWN0LCBlLmcuCiAgICAgPC9wPgogICAgIDxwcmU+CiAgICAgICAgICAmbHQ7dHlwZSAuIC4gLj4KICAgICAgICAgICAuIC4gLgogICAgICAgICAgICZsdDthdHRyaWJ1dGVHcm91cCByZWY9InhtbDpzcGVjaWFsQXR0cnMiLz4KICAgICA8L3ByZT4KICAgICA8cD4KICAgICAgd2lsbCBkZWZpbmUgYSB0eXBlIHdoaWNoIHdpbGwgc2NoZW1hLXZhbGlkYXRlIGFuIGluc3RhbmNlIGVsZW1lbnQKICAgICAgd2l0aCBhbnkgb2YgdGhvc2UgYXR0cmlidXRlcy4KICAgICA8L3A+CiAgICA8L2Rpdj4KICAgPC9kaXY+CiAgPC94czpkb2N1bWVudGF0aW9uPgogPC94czphbm5vdGF0aW9uPgoKIDx4czphbm5vdGF0aW9uPgogIDx4czpkb2N1bWVudGF0aW9uPgogICA8ZGl2IGlkPSJuc3ZlcnNpb25pbmciIHhtbDppZD0ibnN2ZXJzaW9uaW5nIj4KICAgIDxoMj48YSBuYW1lPSJuc3ZlcnNpb25pbmciPlZlcnNpb25pbmcgcG9saWN5IGZvciB0aGlzIHNjaGVtYSBkb2N1bWVudDwvYT48L2gyPgogICAgPGRpdiBjbGFzcz0iYm9keXRleHQiPgogICAgIDxwPgogICAgICBJbiBrZWVwaW5nIHdpdGggdGhlIFhNTCBTY2hlbWEgV0cncyBzdGFuZGFyZCB2ZXJzaW9uaW5nCiAgICAgIHBvbGljeSwgdGhpcyBzY2hlbWEgZG9jdW1lbnQgd2lsbCBwZXJzaXN0IGF0CiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLzIwMDkvMDEveG1sLnhzZCI+CiAgICAgICBodHRwOi8vd3d3LnczLm9yZy8yMDA5LzAxL3htbC54c2Q8L2E+LgogICAgIDwvcD4KICAgICA8cD4KICAgICAgQXQgdGhlIGRhdGUgb2YgaXNzdWUgaXQgY2FuIGFsc28gYmUgZm91bmQgYXQKICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIj4KICAgICAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZDwvYT4uCiAgICAgPC9wPgogICAgIDxwPgogICAgICBUaGUgc2NoZW1hIGRvY3VtZW50IGF0IHRoYXQgVVJJIG1heSBob3dldmVyIGNoYW5nZSBpbiB0aGUgZnV0dXJlLAogICAgICBpbiBvcmRlciB0byByZW1haW4gY29tcGF0aWJsZSB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBYTUwKICAgICAgU2NoZW1hIGl0c2VsZiwgb3Igd2l0aCB0aGUgWE1MIG5hbWVzcGFjZSBpdHNlbGYuICBJbiBvdGhlciB3b3JkcywKICAgICAgaWYgdGhlIFhNTCBTY2hlbWEgb3IgWE1MIG5hbWVzcGFjZXMgY2hhbmdlLCB0aGUgdmVyc2lvbiBvZiB0aGlzCiAgICAgIGRvY3VtZW50IGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCI+CiAgICAgICBodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QgCiAgICAgIDwvYT4gCiAgICAgIHdpbGwgY2hhbmdlIGFjY29yZGluZ2x5OyB0aGUgdmVyc2lvbiBhdCAKICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvMjAwOS8wMS94bWwueHNkIj4KICAgICAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDkvMDEveG1sLnhzZCAKICAgICAgPC9hPiAKICAgICAgd2lsbCBub3QgY2hhbmdlLgogICAgIDwvcD4KICAgICA8cD4KICAgICAgUHJldmlvdXMgZGF0ZWQgKGFuZCB1bmNoYW5naW5nKSB2ZXJzaW9ucyBvZiB0aGlzIHNjaGVtYSAKICAgICAgZG9jdW1lbnQgYXJlIGF0OgogICAgIDwvcD4KICAgICA8dWw+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8yMDA5LzAxL3htbC54c2QiPgoJaHR0cDovL3d3dy53My5vcmcvMjAwOS8wMS94bWwueHNkPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8yMDA3LzA4L3htbC54c2QiPgoJaHR0cDovL3d3dy53My5vcmcvMjAwNy8wOC94bWwueHNkPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzEwL3htbC54c2QiPgoJaHR0cDovL3d3dy53My5vcmcvMjAwNC8xMC94bWwueHNkPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzAzL3htbC54c2QiPgoJaHR0cDovL3d3dy53My5vcmcvMjAwMS8wMy94bWwueHNkPC9hPjwvbGk+CiAgICAgPC91bD4KICAgIDwvZGl2PgogICA8L2Rpdj4KICA8L3hzOmRvY3VtZW50YXRpb24+CiA8L3hzOmFubm90YXRpb24+Cgo8L3hzOnNjaGVtYT4KCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/schemas/xmldsig-core-schema.xsd</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KCjwhLS0gU2NoZW1hIGZvciBYTUwgU2lnbmF0dXJlcwogICAgaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIwogICAgJFJldmlzaW9uOiAxLjEgJCBvbiAkRGF0ZTogMjAwMi8wMi8wOCAyMDozMjoyNiAkIGJ5ICRBdXRob3I6IHJlYWdsZSAkCgogICAgQ29weXJpZ2h0IDIwMDEgVGhlIEludGVybmV0IFNvY2lldHkgYW5kIFczQyAoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUKICAgIG9mIFRlY2hub2xvZ3ksIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4KICAgIEF1dG9tYXRpcXVlLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8KCiAgICBUaGlzIGRvY3VtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBXM0MgU29mdHdhcmUgTGljZW5zZSBbMV0gYXMgZGVzY3JpYmVkCiAgICBpbiB0aGUgRkFRIFsyXS4KCiAgICBbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC9jb3B5cmlnaHQtc29mdHdhcmUtMTk5ODA3MjAKICAgIFsyXSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsL0lQUi1GQVEtMjAwMDA2MjAuaHRtbCNEVEQKLS0+CgoKPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCiAgICAgICAgeG1sbnM6ZHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiCiAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIgogICAgICAgIHZlcnNpb249IjAuMSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPiAKCjwhLS0gQmFzaWMgVHlwZXMgRGVmaW5lZCBmb3IgU2lnbmF0dXJlcyAtLT4KCjxzaW1wbGVUeXBlIG5hbWU9IkNyeXB0b0JpbmFyeSI+CiAgPHJlc3RyaWN0aW9uIGJhc2U9ImJhc2U2NEJpbmFyeSI+CiAgPC9yZXN0cmljdGlvbj4KPC9zaW1wbGVUeXBlPgoKPCEtLSBTdGFydCBTaWduYXR1cmUgLS0+Cgo8ZWxlbWVudCBuYW1lPSJTaWduYXR1cmUiIHR5cGU9ImRzOlNpZ25hdHVyZVR5cGUiLz4KPGNvbXBsZXhUeXBlIG5hbWU9IlNpZ25hdHVyZVR5cGUiPgogIDxzZXF1ZW5jZT4gCiAgICA8ZWxlbWVudCByZWY9ImRzOlNpZ25lZEluZm8iLz4gCiAgICA8ZWxlbWVudCByZWY9ImRzOlNpZ25hdHVyZVZhbHVlIi8+IAogICAgPGVsZW1lbnQgcmVmPSJkczpLZXlJbmZvIiBtaW5PY2N1cnM9IjAiLz4gCiAgICA8ZWxlbWVudCByZWY9ImRzOk9iamVjdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPiAKICA8L3NlcXVlbmNlPiAgCiAgPGF0dHJpYnV0ZSBuYW1lPSJJZCIgdHlwZT0iSUQiIHVzZT0ib3B0aW9uYWwiLz4KPC9jb21wbGV4VHlwZT4KCiAgPGVsZW1lbnQgbmFtZT0iU2lnbmF0dXJlVmFsdWUiIHR5cGU9ImRzOlNpZ25hdHVyZVZhbHVlVHlwZSIvPiAKICA8Y29tcGxleFR5cGUgbmFtZT0iU2lnbmF0dXJlVmFsdWVUeXBlIj4KICAgIDxzaW1wbGVDb250ZW50PgogICAgICA8ZXh0ZW5zaW9uIGJhc2U9ImJhc2U2NEJpbmFyeSI+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJJZCIgdHlwZT0iSUQiIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgPC9leHRlbnNpb24+CiAgICA8L3NpbXBsZUNvbnRlbnQ+CiAgPC9jb21wbGV4VHlwZT4KCjwhLS0gU3RhcnQgU2lnbmVkSW5mbyAtLT4KCjxlbGVtZW50IG5hbWU9IlNpZ25lZEluZm8iIHR5cGU9ImRzOlNpZ25lZEluZm9UeXBlIi8+Cjxjb21wbGV4VHlwZSBuYW1lPSJTaWduZWRJbmZvVHlwZSI+CiAgPHNlcXVlbmNlPiAKICAgIDxlbGVtZW50IHJlZj0iZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCIvPiAKICAgIDxlbGVtZW50IHJlZj0iZHM6U2lnbmF0dXJlTWV0aG9kIi8+IAogICAgPGVsZW1lbnQgcmVmPSJkczpSZWZlcmVuY2UiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+IAogIDwvc2VxdWVuY2U+ICAKICA8YXR0cmlidXRlIG5hbWU9IklkIiB0eXBlPSJJRCIgdXNlPSJvcHRpb25hbCIvPiAKPC9jb21wbGV4VHlwZT4KCiAgPGVsZW1lbnQgbmFtZT0iQ2Fub25pY2FsaXphdGlvbk1ldGhvZCIgdHlwZT0iZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZFR5cGUiLz4gCiAgPGNvbXBsZXhUeXBlIG5hbWU9IkNhbm9uaWNhbGl6YXRpb25NZXRob2RUeXBlIiBtaXhlZD0idHJ1ZSI+CiAgICA8c2VxdWVuY2U+CiAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI2FueSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICA8IS0tICgwLHVuYm91bmRlZCkgZWxlbWVudHMgZnJvbSAoMSwxKSBuYW1lc3BhY2UgLS0+CiAgICA8L3NlcXVlbmNlPgogICAgPGF0dHJpYnV0ZSBuYW1lPSJBbGdvcml0aG0iIHR5cGU9ImFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPiAKICA8L2NvbXBsZXhUeXBlPgoKICA8ZWxlbWVudCBuYW1lPSJTaWduYXR1cmVNZXRob2QiIHR5cGU9ImRzOlNpZ25hdHVyZU1ldGhvZFR5cGUiLz4KICA8Y29tcGxleFR5cGUgbmFtZT0iU2lnbmF0dXJlTWV0aG9kVHlwZSIgbWl4ZWQ9InRydWUiPgogICAgPHNlcXVlbmNlPgogICAgICA8ZWxlbWVudCBuYW1lPSJITUFDT3V0cHV0TGVuZ3RoIiBtaW5PY2N1cnM9IjAiIHR5cGU9ImRzOkhNQUNPdXRwdXRMZW5ndGhUeXBlIi8+CiAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgIDwhLS0gKDAsdW5ib3VuZGVkKSBlbGVtZW50cyBmcm9tICgxLDEpIGV4dGVybmFsIG5hbWVzcGFjZSAtLT4KICAgIDwvc2VxdWVuY2U+CiAgICA8YXR0cmlidXRlIG5hbWU9IkFsZ29yaXRobSIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+IAogIDwvY29tcGxleFR5cGU+Cgo8IS0tIFN0YXJ0IFJlZmVyZW5jZSAtLT4KCjxlbGVtZW50IG5hbWU9IlJlZmVyZW5jZSIgdHlwZT0iZHM6UmVmZXJlbmNlVHlwZSIvPgo8Y29tcGxleFR5cGUgbmFtZT0iUmVmZXJlbmNlVHlwZSI+CiAgPHNlcXVlbmNlPiAKICAgIDxlbGVtZW50IHJlZj0iZHM6VHJhbnNmb3JtcyIgbWluT2NjdXJzPSIwIi8+IAogICAgPGVsZW1lbnQgcmVmPSJkczpEaWdlc3RNZXRob2QiLz4gCiAgICA8ZWxlbWVudCByZWY9ImRzOkRpZ2VzdFZhbHVlIi8+IAogIDwvc2VxdWVuY2U+CiAgPGF0dHJpYnV0ZSBuYW1lPSJJZCIgdHlwZT0iSUQiIHVzZT0ib3B0aW9uYWwiLz4gCiAgPGF0dHJpYnV0ZSBuYW1lPSJVUkkiIHR5cGU9ImFueVVSSSIgdXNlPSJvcHRpb25hbCIvPiAKICA8YXR0cmlidXRlIG5hbWU9IlR5cGUiIHR5cGU9ImFueVVSSSIgdXNlPSJvcHRpb25hbCIvPiAKPC9jb21wbGV4VHlwZT4KCiAgPGVsZW1lbnQgbmFtZT0iVHJhbnNmb3JtcyIgdHlwZT0iZHM6VHJhbnNmb3Jtc1R5cGUiLz4KICA8Y29tcGxleFR5cGUgbmFtZT0iVHJhbnNmb3Jtc1R5cGUiPgogICAgPHNlcXVlbmNlPgogICAgICA8ZWxlbWVudCByZWY9ImRzOlRyYW5zZm9ybSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4gIAogICAgPC9zZXF1ZW5jZT4KICA8L2NvbXBsZXhUeXBlPgoKICA8ZWxlbWVudCBuYW1lPSJUcmFuc2Zvcm0iIHR5cGU9ImRzOlRyYW5zZm9ybVR5cGUiLz4KICA8Y29tcGxleFR5cGUgbmFtZT0iVHJhbnNmb3JtVHlwZSIgbWl4ZWQ9InRydWUiPgogICAgPGNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4gCiAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgogICAgICA8IS0tICgxLDEpIGVsZW1lbnRzIGZyb20gKDAsdW5ib3VuZGVkKSBuYW1lc3BhY2VzIC0tPgogICAgICA8ZWxlbWVudCBuYW1lPSJYUGF0aCIgdHlwZT0ic3RyaW5nIi8+IAogICAgPC9jaG9pY2U+CiAgICA8YXR0cmlidXRlIG5hbWU9IkFsZ29yaXRobSIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+IAogIDwvY29tcGxleFR5cGU+Cgo8IS0tIEVuZCBSZWZlcmVuY2UgLS0+Cgo8ZWxlbWVudCBuYW1lPSJEaWdlc3RNZXRob2QiIHR5cGU9ImRzOkRpZ2VzdE1ldGhvZFR5cGUiLz4KPGNvbXBsZXhUeXBlIG5hbWU9IkRpZ2VzdE1ldGhvZFR5cGUiIG1peGVkPSJ0cnVlIj4gCiAgPHNlcXVlbmNlPgogICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgPC9zZXF1ZW5jZT4gICAgCiAgPGF0dHJpYnV0ZSBuYW1lPSJBbGdvcml0aG0iIHR5cGU9ImFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPiAKPC9jb21wbGV4VHlwZT4KCjxlbGVtZW50IG5hbWU9IkRpZ2VzdFZhbHVlIiB0eXBlPSJkczpEaWdlc3RWYWx1ZVR5cGUiLz4KPHNpbXBsZVR5cGUgbmFtZT0iRGlnZXN0VmFsdWVUeXBlIj4KICA8cmVzdHJpY3Rpb24gYmFzZT0iYmFzZTY0QmluYXJ5Ii8+Cjwvc2ltcGxlVHlwZT4KCjwhLS0gRW5kIFNpZ25lZEluZm8gLS0+Cgo8IS0tIFN0YXJ0IEtleUluZm8gLS0+Cgo8ZWxlbWVudCBuYW1lPSJLZXlJbmZvIiB0eXBlPSJkczpLZXlJbmZvVHlwZSIvPiAKPGNvbXBsZXhUeXBlIG5hbWU9IktleUluZm9UeXBlIiBtaXhlZD0idHJ1ZSI+CiAgPGNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+ICAgICAKICAgIDxlbGVtZW50IHJlZj0iZHM6S2V5TmFtZSIvPiAKICAgIDxlbGVtZW50IHJlZj0iZHM6S2V5VmFsdWUiLz4gCiAgICA8ZWxlbWVudCByZWY9ImRzOlJldHJpZXZhbE1ldGhvZCIvPiAKICAgIDxlbGVtZW50IHJlZj0iZHM6WDUwOURhdGEiLz4gCiAgICA8ZWxlbWVudCByZWY9ImRzOlBHUERhdGEiLz4gCiAgICA8ZWxlbWVudCByZWY9ImRzOlNQS0lEYXRhIi8+CiAgICA8ZWxlbWVudCByZWY9ImRzOk1nbXREYXRhIi8+CiAgICA8YW55IHByb2Nlc3NDb250ZW50cz0ibGF4IiBuYW1lc3BhY2U9IiMjb3RoZXIiLz4KICAgIDwhLS0gKDEsMSkgZWxlbWVudHMgZnJvbSAoMCx1bmJvdW5kZWQpIG5hbWVzcGFjZXMgLS0+CiAgPC9jaG9pY2U+CiAgPGF0dHJpYnV0ZSBuYW1lPSJJZCIgdHlwZT0iSUQiIHVzZT0ib3B0aW9uYWwiLz4gCjwvY29tcGxleFR5cGU+CgogIDxlbGVtZW50IG5hbWU9IktleU5hbWUiIHR5cGU9InN0cmluZyIvPgogIDxlbGVtZW50IG5hbWU9Ik1nbXREYXRhIiB0eXBlPSJzdHJpbmciLz4KCiAgPGVsZW1lbnQgbmFtZT0iS2V5VmFsdWUiIHR5cGU9ImRzOktleVZhbHVlVHlwZSIvPiAKICA8Y29tcGxleFR5cGUgbmFtZT0iS2V5VmFsdWVUeXBlIiBtaXhlZD0idHJ1ZSI+CiAgIDxjaG9pY2U+CiAgICAgPGVsZW1lbnQgcmVmPSJkczpEU0FLZXlWYWx1ZSIvPgogICAgIDxlbGVtZW50IHJlZj0iZHM6UlNBS2V5VmFsdWUiLz4KICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KICAgPC9jaG9pY2U+CiAgPC9jb21wbGV4VHlwZT4KCiAgPGVsZW1lbnQgbmFtZT0iUmV0cmlldmFsTWV0aG9kIiB0eXBlPSJkczpSZXRyaWV2YWxNZXRob2RUeXBlIi8+IAogIDxjb21wbGV4VHlwZSBuYW1lPSJSZXRyaWV2YWxNZXRob2RUeXBlIj4KICAgIDxzZXF1ZW5jZT4KICAgICAgPGVsZW1lbnQgcmVmPSJkczpUcmFuc2Zvcm1zIiBtaW5PY2N1cnM9IjAiLz4gCiAgICA8L3NlcXVlbmNlPiAgCiAgICA8YXR0cmlidXRlIG5hbWU9IlVSSSIgdHlwZT0iYW55VVJJIi8+CiAgICA8YXR0cmlidXRlIG5hbWU9IlR5cGUiIHR5cGU9ImFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgogIDwvY29tcGxleFR5cGU+Cgo8IS0tIFN0YXJ0IFg1MDlEYXRhIC0tPgoKPGVsZW1lbnQgbmFtZT0iWDUwOURhdGEiIHR5cGU9ImRzOlg1MDlEYXRhVHlwZSIvPiAKPGNvbXBsZXhUeXBlIG5hbWU9Ilg1MDlEYXRhVHlwZSI+CiAgPHNlcXVlbmNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgIDxjaG9pY2U+CiAgICAgIDxlbGVtZW50IG5hbWU9Ilg1MDlJc3N1ZXJTZXJpYWwiIHR5cGU9ImRzOlg1MDlJc3N1ZXJTZXJpYWxUeXBlIi8+CiAgICAgIDxlbGVtZW50IG5hbWU9Ilg1MDlTS0kiIHR5cGU9ImJhc2U2NEJpbmFyeSIvPgogICAgICA8ZWxlbWVudCBuYW1lPSJYNTA5U3ViamVjdE5hbWUiIHR5cGU9InN0cmluZyIvPgogICAgICA8ZWxlbWVudCBuYW1lPSJYNTA5Q2VydGlmaWNhdGUiIHR5cGU9ImJhc2U2NEJpbmFyeSIvPgogICAgICA8ZWxlbWVudCBuYW1lPSJYNTA5Q1JMIiB0eXBlPSJiYXNlNjRCaW5hcnkiLz4KICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+CiAgICA8L2Nob2ljZT4KICA8L3NlcXVlbmNlPgo8L2NvbXBsZXhUeXBlPgoKPGNvbXBsZXhUeXBlIG5hbWU9Ilg1MDlJc3N1ZXJTZXJpYWxUeXBlIj4gCiAgPHNlcXVlbmNlPiAKICAgIDxlbGVtZW50IG5hbWU9Ilg1MDlJc3N1ZXJOYW1lIiB0eXBlPSJzdHJpbmciLz4gCiAgICA8ZWxlbWVudCBuYW1lPSJYNTA5U2VyaWFsTnVtYmVyIiB0eXBlPSJzdHJpbmciLz4gCiAgPC9zZXF1ZW5jZT4KPC9jb21wbGV4VHlwZT4KCjwhLS0gRW5kIFg1MDlEYXRhIC0tPgoKPCEtLSBCZWdpbiBQR1BEYXRhIC0tPgoKPGVsZW1lbnQgbmFtZT0iUEdQRGF0YSIgdHlwZT0iZHM6UEdQRGF0YVR5cGUiLz4gCjxjb21wbGV4VHlwZSBuYW1lPSJQR1BEYXRhVHlwZSI+IAogIDxjaG9pY2U+CiAgICA8c2VxdWVuY2U+CiAgICAgIDxlbGVtZW50IG5hbWU9IlBHUEtleUlEIiB0eXBlPSJiYXNlNjRCaW5hcnkiLz4gCiAgICAgIDxlbGVtZW50IG5hbWU9IlBHUEtleVBhY2tldCIgdHlwZT0iYmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiLz4gCiAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIgogICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgIDwvc2VxdWVuY2U+CiAgICA8c2VxdWVuY2U+CiAgICAgIDxlbGVtZW50IG5hbWU9IlBHUEtleVBhY2tldCIgdHlwZT0iYmFzZTY0QmluYXJ5Ii8+IAogICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIKICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICA8L3NlcXVlbmNlPgogIDwvY2hvaWNlPgo8L2NvbXBsZXhUeXBlPgoKPCEtLSBFbmQgUEdQRGF0YSAtLT4KCjwhLS0gQmVnaW4gU1BLSURhdGEgLS0+Cgo8ZWxlbWVudCBuYW1lPSJTUEtJRGF0YSIgdHlwZT0iZHM6U1BLSURhdGFUeXBlIi8+IAo8Y29tcGxleFR5cGUgbmFtZT0iU1BLSURhdGFUeXBlIj4KICA8c2VxdWVuY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgPGVsZW1lbnQgbmFtZT0iU1BLSVNleHAiIHR5cGU9ImJhc2U2NEJpbmFyeSIvPgogICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiLz4KICA8L3NlcXVlbmNlPgo8L2NvbXBsZXhUeXBlPiAKCjwhLS0gRW5kIFNQS0lEYXRhIC0tPgoKPCEtLSBFbmQgS2V5SW5mbyAtLT4KCjwhLS0gU3RhcnQgT2JqZWN0IChNYW5pZmVzdCwgU2lnbmF0dXJlUHJvcGVydHkpIC0tPgoKPGVsZW1lbnQgbmFtZT0iT2JqZWN0IiB0eXBlPSJkczpPYmplY3RUeXBlIi8+IAo8Y29tcGxleFR5cGUgbmFtZT0iT2JqZWN0VHlwZSIgbWl4ZWQ9InRydWUiPgogIDxzZXF1ZW5jZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgIDxhbnkgbmFtZXNwYWNlPSIjI2FueSIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KICA8L3NlcXVlbmNlPgogIDxhdHRyaWJ1dGUgbmFtZT0iSWQiIHR5cGU9IklEIiB1c2U9Im9wdGlvbmFsIi8+IAogIDxhdHRyaWJ1dGUgbmFtZT0iTWltZVR5cGUiIHR5cGU9InN0cmluZyIgdXNlPSJvcHRpb25hbCIvPiA8IS0tIGFkZCBhIGdyZXAgZmFjZXQgLS0+CiAgPGF0dHJpYnV0ZSBuYW1lPSJFbmNvZGluZyIgdHlwZT0iYW55VVJJIiB1c2U9Im9wdGlvbmFsIi8+IAo8L2NvbXBsZXhUeXBlPgoKPGVsZW1lbnQgbmFtZT0iTWFuaWZlc3QiIHR5cGU9ImRzOk1hbmlmZXN0VHlwZSIvPiAKPGNvbXBsZXhUeXBlIG5hbWU9Ik1hbmlmZXN0VHlwZSI+CiAgPHNlcXVlbmNlPgogICAgPGVsZW1lbnQgcmVmPSJkczpSZWZlcmVuY2UiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+IAogIDwvc2VxdWVuY2U+CiAgPGF0dHJpYnV0ZSBuYW1lPSJJZCIgdHlwZT0iSUQiIHVzZT0ib3B0aW9uYWwiLz4gCjwvY29tcGxleFR5cGU+Cgo8ZWxlbWVudCBuYW1lPSJTaWduYXR1cmVQcm9wZXJ0aWVzIiB0eXBlPSJkczpTaWduYXR1cmVQcm9wZXJ0aWVzVHlwZSIvPiAKPGNvbXBsZXhUeXBlIG5hbWU9IlNpZ25hdHVyZVByb3BlcnRpZXNUeXBlIj4KICA8c2VxdWVuY2U+CiAgICA8ZWxlbWVudCByZWY9ImRzOlNpZ25hdHVyZVByb3BlcnR5IiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPiAKICA8L3NlcXVlbmNlPgogIDxhdHRyaWJ1dGUgbmFtZT0iSWQiIHR5cGU9IklEIiB1c2U9Im9wdGlvbmFsIi8+IAo8L2NvbXBsZXhUeXBlPgoKICAgPGVsZW1lbnQgbmFtZT0iU2lnbmF0dXJlUHJvcGVydHkiIHR5cGU9ImRzOlNpZ25hdHVyZVByb3BlcnR5VHlwZSIvPiAKICAgPGNvbXBsZXhUeXBlIG5hbWU9IlNpZ25hdHVyZVByb3BlcnR5VHlwZSIgbWl4ZWQ9InRydWUiPgogICAgIDxjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+CiAgICAgICA8IS0tICgxLDEpIGVsZW1lbnRzIGZyb20gKDEsdW5ib3VuZGVkKSBuYW1lc3BhY2VzIC0tPgogICAgIDwvY2hvaWNlPgogICAgIDxhdHRyaWJ1dGUgbmFtZT0iVGFyZ2V0IiB0eXBlPSJhbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4gCiAgICAgPGF0dHJpYnV0ZSBuYW1lPSJJZCIgdHlwZT0iSUQiIHVzZT0ib3B0aW9uYWwiLz4gCiAgIDwvY29tcGxleFR5cGU+Cgo8IS0tIEVuZCBPYmplY3QgKE1hbmlmZXN0LCBTaWduYXR1cmVQcm9wZXJ0eSkgLS0+Cgo8IS0tIFN0YXJ0IEFsZ29yaXRobSBQYXJhbWV0ZXJzIC0tPgoKPHNpbXBsZVR5cGUgbmFtZT0iSE1BQ091dHB1dExlbmd0aFR5cGUiPgogIDxyZXN0cmljdGlvbiBiYXNlPSJpbnRlZ2VyIi8+Cjwvc2ltcGxlVHlwZT4KCjwhLS0gU3RhcnQgS2V5VmFsdWUgRWxlbWVudC10eXBlcyAtLT4KCjxlbGVtZW50IG5hbWU9IkRTQUtleVZhbHVlIiB0eXBlPSJkczpEU0FLZXlWYWx1ZVR5cGUiLz4KPGNvbXBsZXhUeXBlIG5hbWU9IkRTQUtleVZhbHVlVHlwZSI+CiAgPHNlcXVlbmNlPgogICAgPHNlcXVlbmNlIG1pbk9jY3Vycz0iMCI+CiAgICAgIDxlbGVtZW50IG5hbWU9IlAiIHR5cGU9ImRzOkNyeXB0b0JpbmFyeSIvPgogICAgICA8ZWxlbWVudCBuYW1lPSJRIiB0eXBlPSJkczpDcnlwdG9CaW5hcnkiLz4KICAgIDwvc2VxdWVuY2U+CiAgICA8ZWxlbWVudCBuYW1lPSJHIiB0eXBlPSJkczpDcnlwdG9CaW5hcnkiIG1pbk9jY3Vycz0iMCIvPgogICAgPGVsZW1lbnQgbmFtZT0iWSIgdHlwZT0iZHM6Q3J5cHRvQmluYXJ5Ii8+CiAgICA8ZWxlbWVudCBuYW1lPSJKIiB0eXBlPSJkczpDcnlwdG9CaW5hcnkiIG1pbk9jY3Vycz0iMCIvPgogICAgPHNlcXVlbmNlIG1pbk9jY3Vycz0iMCI+CiAgICAgIDxlbGVtZW50IG5hbWU9IlNlZWQiIHR5cGU9ImRzOkNyeXB0b0JpbmFyeSIvPgogICAgICA8ZWxlbWVudCBuYW1lPSJQZ2VuQ291bnRlciIgdHlwZT0iZHM6Q3J5cHRvQmluYXJ5Ii8+CiAgICA8L3NlcXVlbmNlPgogIDwvc2VxdWVuY2U+CjwvY29tcGxleFR5cGU+Cgo8ZWxlbWVudCBuYW1lPSJSU0FLZXlWYWx1ZSIgdHlwZT0iZHM6UlNBS2V5VmFsdWVUeXBlIi8+Cjxjb21wbGV4VHlwZSBuYW1lPSJSU0FLZXlWYWx1ZVR5cGUiPgogIDxzZXF1ZW5jZT4KICAgIDxlbGVtZW50IG5hbWU9Ik1vZHVsdXMiIHR5cGU9ImRzOkNyeXB0b0JpbmFyeSIvPiAKICAgIDxlbGVtZW50IG5hbWU9IkV4cG9uZW50IiB0eXBlPSJkczpDcnlwdG9CaW5hcnkiLz4gCiAgPC9zZXF1ZW5jZT4KPC9jb21wbGV4VHlwZT4gCgo8IS0tIEVuZCBLZXlWYWx1ZSBFbGVtZW50LXR5cGVzIC0tPgoKPCEtLSBFbmQgU2lnbmF0dXJlIC0tPgoKPC9zY2hlbWE+Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/Settings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHBocC1zYW1sLgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQHBhY2thZ2UgT25lTG9naW4KICogQGF1dGhvciAgU2l4dG8gTWFydGluIDxzaXh0by5tYXJ0aW4uZ2FyY2lhQGdtYWlsLmNvbT4KICogQGxpY2Vuc2UgTUlUIGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICogQGxpbmsgICAgaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwKICovCgpuYW1lc3BhY2UgT25lTG9naW5cU2FtbDI7Cgp1c2UgUm9iUmljaGFyZHNcWE1MU2VjTGlic1xYTUxTZWN1cml0eUtleTsKdXNlIFJvYlJpY2hhcmRzXFhNTFNlY0xpYnNcWE1MU2VjdXJpdHlEU2lnOwoKdXNlIERPTURvY3VtZW50Owp1c2UgRXhjZXB0aW9uOwoKLyoqCiAqIENvbmZpZ3VyYXRpb24gb2YgdGhlIFNBTUwgUEhQIFRvb2xraXQKICovCmNsYXNzIFNldHRpbmdzCnsKICAgIC8qKgogICAgICogTGlzdCBvZiBwYXRocy4KICAgICAqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgJF9wYXRocyA9IGFycmF5KCk7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRfYmFzZXVybDsKCiAgICAvKioKICAgICAqIFN0cmljdC4gSWYgYWN0aXZlLCBQSFAgVG9vbGtpdCB3aWxsIHJlamVjdCB1bnNpZ25lZCBvciB1bmVuY3J5cHRlZCBtZXNzYWdlcwogICAgICogaWYgaXQgZXhwZWN0cyB0aGVtIHNpZ25lZCBvciBlbmNyeXB0ZWQuIElmIG5vdCwgdGhlIG1lc3NhZ2VzIHdpbGwgYmUgYWNjZXB0ZWQKICAgICAqIGFuZCBzb21lIHNlY3VyaXR5IGlzc3VlcyB3aWxsIGJlIGFsc28gcmVsYXhlZC4KICAgICAqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSAkX3N0cmljdCA9IHRydWU7CgogICAgLyoqCiAgICAgKiBBY3RpdmF0ZSBkZWJ1ZyBtb2RlCiAgICAgKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHByaXZhdGUgJF9kZWJ1ZyA9IGZhbHNlOwoKICAgIC8qKgogICAgICogU1AgZGF0YS4KICAgICAqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgJF9zcCA9IGFycmF5KCk7CgogICAgLyoqCiAgICAgKiBJZFAgZGF0YS4KICAgICAqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgJF9pZHAgPSBhcnJheSgpOwoKICAgIC8qKgogICAgICogQ29tcHJlc3Npb24gc2V0dGluZ3MgdGhhdCBkZXRlcm1pbmUKICAgICAqIHdoZXRoZXIgZ3ppcCBjb21wcmVzc2lvbiBzaG91bGQgYmUgdXNlZC4KICAgICAqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgJF9jb21wcmVzcyA9IGFycmF5KCk7CgogICAgLyoqCiAgICAgKiBTZWN1cml0eSBJbmZvIHJlbGF0ZWQgdG8gdGhlIFNQLgogICAgICoKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSAkX3NlY3VyaXR5ID0gYXJyYXkoKTsKCiAgICAvKioKICAgICAqIFNldHRpbmcgY29udGFjdHMuCiAgICAgKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICRfY29udGFjdHMgPSBhcnJheSgpOwoKICAgIC8qKgogICAgICogU2V0dGluZyBvcmdhbml6YXRpb24uCiAgICAgKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICRfb3JnYW5pemF0aW9uID0gYXJyYXkoKTsKCiAgICAvKioKICAgICAqIFNldHRpbmcgZXJyb3JzLgogICAgICoKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSAkX2Vycm9ycyA9IGFycmF5KCk7CgogICAgLyoqCiAgICAgKiBWYWxpdGF0ZSBTUCBkYXRhIG9ubHkgZmxhZwogICAgICoKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICBwcml2YXRlICRfc3BWYWxpZGF0aW9uT25seSA9IGZhbHNlOwoKICAgIC8qKgogICAgICogSW5pdGlhbGl6ZXMgdGhlIHNldHRpbmdzOgogICAgICogLSBTZXRzIHRoZSBwYXRocyBvZiB0aGUgZGlmZmVyZW50IGZvbGRlcnMKICAgICAqIC0gTG9hZHMgc2V0dGluZ3MgaW5mbyBmcm9tIHNldHRpbmdzIGZpbGUgb3IgYXJyYXkvb2JqZWN0IHByb3ZpZGVkCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5fG51bGwgJHNldHRpbmdzICAgICAgICAgU0FNTCBUb29sa2l0IFNldHRpbmdzCiAgICAgKiBAcGFyYW0gYm9vbCAgICAgICAkc3BWYWxpZGF0aW9uT25seSBWYWxpZGF0ZSBvciBub3QgdGhlIElkUCBkYXRhCiAgICAgKgogICAgICogQHRocm93cyBFcnJvciBJZiBhbnkgc2V0dGluZ3MgcGFyYW1ldGVyIGlzIGludmFsaWQKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uIElmIFNldHRpbmdzIGlzIGluY29ycmVjdGx5IHN1cHBsaWVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCg/YXJyYXkgJHNldHRpbmdzID0gbnVsbCxib29sICRzcFZhbGlkYXRpb25Pbmx5ID0gZmFsc2UpCiAgICB7CiAgICAgICAgJHRoaXMtPl9zcFZhbGlkYXRpb25Pbmx5ID0gJHNwVmFsaWRhdGlvbk9ubHk7CiAgICAgICAgJHRoaXMtPl9sb2FkUGF0aHMoKTsKCiAgICAgICAgaWYgKCFpc3NldCgkc2V0dGluZ3MpKSB7CiAgICAgICAgICAgIGlmICghJHRoaXMtPl9sb2FkU2V0dGluZ3NGcm9tRmlsZSgpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgJ0ludmFsaWQgZmlsZSBzZXR0aW5nczogJXMnLAogICAgICAgICAgICAgICAgICAgIEVycm9yOjpTRVRUSU5HU19JTlZBTElELAogICAgICAgICAgICAgICAgICAgIGFycmF5KGltcGxvZGUoJywgJywgJHRoaXMtPl9lcnJvcnMpKQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdGhpcy0+X2FkZERlZmF1bHRWYWx1ZXMoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoISR0aGlzLT5fbG9hZFNldHRpbmdzRnJvbUFycmF5KCRzZXR0aW5ncykpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgICAgICAgICAgICAgICAnSW52YWxpZCBhcnJheSBzZXR0aW5nczogJXMnLAogICAgICAgICAgICAgICAgICAgIEVycm9yOjpTRVRUSU5HU19JTlZBTElELAogICAgICAgICAgICAgICAgICAgIGFycmF5KGltcGxvZGUoJywgJywgJHRoaXMtPl9lcnJvcnMpKQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmZvcm1hdElkUENlcnQoKTsKICAgICAgICAkdGhpcy0+Zm9ybWF0U1BDZXJ0KCk7CiAgICAgICAgJHRoaXMtPmZvcm1hdFNQS2V5KCk7CiAgICAgICAgJHRoaXMtPmZvcm1hdFNQQ2VydE5ldygpOwogICAgICAgICR0aGlzLT5mb3JtYXRJZFBDZXJ0TXVsdGkoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldHMgdGhlIHBhdGhzIG9mIHRoZSBkaWZmZXJlbnQgZm9sZGVycwogICAgICogQHN1cHByZXNzIFBoYW5VbmRlY2xhcmVkQ29uc3RhbnQKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfbG9hZFBhdGhzKCkKICAgIHsKICAgICAgICAkYmFzZVBhdGggPSBkaXJuYW1lKGRpcm5hbWUoX19ESVJfXykpIC4gJy8nOwogICAgICAgICR0aGlzLT5fcGF0aHMgPSBhcnJheSgKICAgICAgICAgICAgJ2Jhc2UnID0+ICRiYXNlUGF0aCwKICAgICAgICAgICAgJ2NvbmZpZycgPT4gJGJhc2VQYXRoLAogICAgICAgICAgICAnY2VydCcgPT4gJGJhc2VQYXRoLidjZXJ0cy8nLAogICAgICAgICAgICAnbGliJyA9PiBfX0RJUl9fIC4gJy8nLAogICAgICAgICk7CgogICAgICAgIGlmIChkZWZpbmVkKCdPTkVMT0dJTl9DVVNUT01QQVRIJykpIHsKICAgICAgICAgICAgJHRoaXMtPl9wYXRoc1snY29uZmlnJ10gPSBPTkVMT0dJTl9DVVNUT01QQVRIOwogICAgICAgICAgICAkdGhpcy0+X3BhdGhzWydjZXJ0J10gPSBPTkVMT0dJTl9DVVNUT01QQVRIIC4gJ2NlcnRzLyc7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBiYXNlIHBhdGguCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgIFRoZSBiYXNlIHRvb2xraXQgZm9sZGVyIHBhdGgKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEJhc2VQYXRoKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9wYXRoc1snYmFzZSddOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBjZXJ0IHBhdGguCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIGNlcnQgZm9sZGVyIHBhdGgKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENlcnRQYXRoKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9wYXRoc1snY2VydCddOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBjb25maWcgcGF0aC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgY29uZmlnIGZvbGRlciBwYXRoCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb25maWdQYXRoKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9wYXRoc1snY29uZmlnJ107CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGxpYiBwYXRoLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBsaWJyYXJ5IGZvbGRlciBwYXRoCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMaWJQYXRoKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9wYXRoc1snbGliJ107CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHNjaGVtYSBwYXRoLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nICBUaGUgZXh0ZXJuYWwgbGlicmFyeSBmb2xkZXIgcGF0aAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2NoZW1hc1BhdGgoKQogICAgewogICAgICAgIGlmIChpc3NldCgkdGhpcy0+X3BhdGhzWydzY2hlbWFzJ10pKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X3BhdGhzWydzY2hlbWFzJ107CiAgICAgICAgfQogICAgICAgIHJldHVybiBfX0RJUl9fIC4gJy9zY2hlbWFzLyc7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgc2NoZW1hcyBwYXRoCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcGF0aAogICAgICogQHJldHVybiAkdGhpcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0U2NoZW1hc1BhdGgoJHBhdGgpCiAgICB7CiAgICAgICAgJHRoaXMtPl9wYXRoc1snc2NoZW1hcyddID0gJHBhdGg7CiAgICB9CgogICAgLyoqCiAgICAgKiBMb2FkcyBzZXR0aW5ncyBpbmZvIGZyb20gYSBzZXR0aW5ncyBBcnJheQogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkc2V0dGluZ3MgU0FNTCBUb29sa2l0IFNldHRpbmdzCiAgICAgKgogICAgICogQHJldHVybiBib29sIFRydWUgaWYgdGhlIHNldHRpbmdzIGluZm8gaXMgdmFsaWQKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfbG9hZFNldHRpbmdzRnJvbUFycmF5KGFycmF5ICRzZXR0aW5ncykKICAgIHsKICAgICAgICBpZiAoaXNzZXQoJHNldHRpbmdzWydzcCddKSkgewogICAgICAgICAgICAkdGhpcy0+X3NwID0gJHNldHRpbmdzWydzcCddOwogICAgICAgIH0KICAgICAgICBpZiAoaXNzZXQoJHNldHRpbmdzWydpZHAnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9pZHAgPSAkc2V0dGluZ3NbJ2lkcCddOwogICAgICAgIH0KCiAgICAgICAgJGVycm9ycyA9ICR0aGlzLT5jaGVja1NldHRpbmdzKCRzZXR0aW5ncyk7CiAgICAgICAgaWYgKGVtcHR5KCRlcnJvcnMpKSB7CiAgICAgICAgICAgICR0aGlzLT5fZXJyb3JzID0gYXJyYXkoKTsKCiAgICAgICAgICAgIGlmIChpc3NldCgkc2V0dGluZ3NbJ3N0cmljdCddKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPl9zdHJpY3QgPSAkc2V0dGluZ3NbJ3N0cmljdCddOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChpc3NldCgkc2V0dGluZ3NbJ2RlYnVnJ10pKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+X2RlYnVnID0gJHNldHRpbmdzWydkZWJ1ZyddOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoaXNzZXQoJHNldHRpbmdzWydiYXNldXJsJ10pKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+X2Jhc2V1cmwgPSAkc2V0dGluZ3NbJ2Jhc2V1cmwnXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGlzc2V0KCRzZXR0aW5nc1snY29tcHJlc3MnXSkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5fY29tcHJlc3MgPSAkc2V0dGluZ3NbJ2NvbXByZXNzJ107CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChpc3NldCgkc2V0dGluZ3NbJ3NlY3VyaXR5J10pKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+X3NlY3VyaXR5ID0gJHNldHRpbmdzWydzZWN1cml0eSddOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoaXNzZXQoJHNldHRpbmdzWydjb250YWN0UGVyc29uJ10pKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+X2NvbnRhY3RzID0gJHNldHRpbmdzWydjb250YWN0UGVyc29uJ107CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChpc3NldCgkc2V0dGluZ3NbJ29yZ2FuaXphdGlvbiddKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPl9vcmdhbml6YXRpb24gPSAkc2V0dGluZ3NbJ29yZ2FuaXphdGlvbiddOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdGhpcy0+X2FkZERlZmF1bHRWYWx1ZXMoKTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPl9lcnJvcnMgPSAkZXJyb3JzOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogTG9hZHMgc2V0dGluZ3MgaW5mbyBmcm9tIHRoZSBzZXR0aW5ncyBmaWxlCiAgICAgKgogICAgICogQHJldHVybiBib29sIFRydWUgaWYgdGhlIHNldHRpbmdzIGluZm8gaXMgdmFsaWQKICAgICAqCiAgICAgKiBAdGhyb3dzIEVycm9yCiAgICAgKgogICAgICogQHN1cHByZXNzIFBoYW5VbmRlY2xhcmVkVmFyaWFibGUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfbG9hZFNldHRpbmdzRnJvbUZpbGUoKQogICAgewogICAgICAgICRmaWxlbmFtZSA9ICR0aGlzLT5nZXRDb25maWdQYXRoKCkuJ3NldHRpbmdzLnBocCc7CgogICAgICAgIGlmICghZmlsZV9leGlzdHMoJGZpbGVuYW1lKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICAgICAgICAgICAnU2V0dGluZ3MgZmlsZSBub3QgZm91bmQ6ICVzJywKICAgICAgICAgICAgICAgIEVycm9yOjpTRVRUSU5HU19GSUxFX05PVF9GT1VORCwKICAgICAgICAgICAgICAgIGFycmF5KCRmaWxlbmFtZSkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIC8qKiBAdmFyIGFycmF5ICRzZXR0aW5ncyAqLwogICAgICAgIGluY2x1ZGUgJGZpbGVuYW1lOwoKICAgICAgICAvLyBBZGQgYWR2YW5jZV9zZXR0aW5ncyBpZiBleGlzdHMKICAgICAgICAkYWR2YW5jZWRGaWxlbmFtZSA9ICR0aGlzLT5nZXRDb25maWdQYXRoKCkuJ2FkdmFuY2VkX3NldHRpbmdzLnBocCc7CgogICAgICAgIGlmIChmaWxlX2V4aXN0cygkYWR2YW5jZWRGaWxlbmFtZSkpIHsKICAgICAgICAgICAgLyoqIEB2YXIgYXJyYXkgJGFkdmFuY2VkU2V0dGluZ3MgKi8KICAgICAgICAgICAgaW5jbHVkZSAkYWR2YW5jZWRGaWxlbmFtZTsKICAgICAgICAgICAgJHNldHRpbmdzID0gYXJyYXlfbWVyZ2UoJHNldHRpbmdzLCAkYWR2YW5jZWRTZXR0aW5ncyk7CiAgICAgICAgfQoKCiAgICAgICAgcmV0dXJuICR0aGlzLT5fbG9hZFNldHRpbmdzRnJvbUFycmF5KCRzZXR0aW5ncyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGQgZGVmYXVsdCB2YWx1ZXMgaWYgdGhlIHNldHRpbmdzIGluZm8gaXMgbm90IGNvbXBsZXRlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX2FkZERlZmF1bHRWYWx1ZXMoKQogICAgewogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPl9zcFsnYXNzZXJ0aW9uQ29uc3VtZXJTZXJ2aWNlJ11bJ2JpbmRpbmcnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9zcFsnYXNzZXJ0aW9uQ29uc3VtZXJTZXJ2aWNlJ11bJ2JpbmRpbmcnXSA9IENvbnN0YW50czo6QklORElOR19IVFRQX1BPU1Q7CiAgICAgICAgfQogICAgICAgIGlmIChpc3NldCgkdGhpcy0+X3NwWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ10pICYmICFpc3NldCgkdGhpcy0+X3NwWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ11bJ2JpbmRpbmcnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9zcFsnc2luZ2xlTG9nb3V0U2VydmljZSddWydiaW5kaW5nJ10gPSBDb25zdGFudHM6OkJJTkRJTkdfSFRUUF9SRURJUkVDVDsKICAgICAgICB9CgogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPl9jb21wcmVzc1sncmVxdWVzdHMnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9jb21wcmVzc1sncmVxdWVzdHMnXSA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5fY29tcHJlc3NbJ3Jlc3BvbnNlcyddKSkgewogICAgICAgICAgICAkdGhpcy0+X2NvbXByZXNzWydyZXNwb25zZXMnXSA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBSZWxhdGVkIHRvIG5hbWVJRAogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPl9zcFsnTmFtZUlERm9ybWF0J10pKSB7CiAgICAgICAgICAgICR0aGlzLT5fc3BbJ05hbWVJREZvcm1hdCddID0gQ29uc3RhbnRzOjpOQU1FSURfVU5TUEVDSUZJRUQ7CiAgICAgICAgfQogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPl9zZWN1cml0eVsnbmFtZUlkRW5jcnlwdGVkJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5fc2VjdXJpdHlbJ25hbWVJZEVuY3J5cHRlZCddID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPl9zZWN1cml0eVsncmVxdWVzdGVkQXV0aG5Db250ZXh0J10pKSB7CiAgICAgICAgICAgICR0aGlzLT5fc2VjdXJpdHlbJ3JlcXVlc3RlZEF1dGhuQ29udGV4dCddID0gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIC8vIHNpZ24gcHJvdmlkZWQKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5fc2VjdXJpdHlbJ2F1dGhuUmVxdWVzdHNTaWduZWQnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9zZWN1cml0eVsnYXV0aG5SZXF1ZXN0c1NpZ25lZCddID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPl9zZWN1cml0eVsnbG9nb3V0UmVxdWVzdFNpZ25lZCddKSkgewogICAgICAgICAgICAkdGhpcy0+X3NlY3VyaXR5Wydsb2dvdXRSZXF1ZXN0U2lnbmVkJ10gPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+X3NlY3VyaXR5Wydsb2dvdXRSZXNwb25zZVNpZ25lZCddKSkgewogICAgICAgICAgICAkdGhpcy0+X3NlY3VyaXR5Wydsb2dvdXRSZXNwb25zZVNpZ25lZCddID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPl9zZWN1cml0eVsnc2lnbk1ldGFkYXRhJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5fc2VjdXJpdHlbJ3NpZ25NZXRhZGF0YSddID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAvLyBzaWduIGV4cGVjdGVkCiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+X3NlY3VyaXR5Wyd3YW50TWVzc2FnZXNTaWduZWQnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9zZWN1cml0eVsnd2FudE1lc3NhZ2VzU2lnbmVkJ10gPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+X3NlY3VyaXR5Wyd3YW50QXNzZXJ0aW9uc1NpZ25lZCddKSkgewogICAgICAgICAgICAkdGhpcy0+X3NlY3VyaXR5Wyd3YW50QXNzZXJ0aW9uc1NpZ25lZCddID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAvLyBOYW1lSUQgZWxlbWVudCBleHBlY3RlZAogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPl9zZWN1cml0eVsnd2FudE5hbWVJZCddKSkgewogICAgICAgICAgICAkdGhpcy0+X3NlY3VyaXR5Wyd3YW50TmFtZUlkJ10gPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgLy8gUmVsYXggRGVzdGluYXRpb24gdmFsaWRhdGlvbgogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPl9zZWN1cml0eVsncmVsYXhEZXN0aW5hdGlvblZhbGlkYXRpb24nXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9zZWN1cml0eVsncmVsYXhEZXN0aW5hdGlvblZhbGlkYXRpb24nXSA9IGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgLy8gU3RyaWN0IERlc3RpbmF0aW9uIG1hdGNoIHZhbGlkYXRpb24KICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5fc2VjdXJpdHlbJ2Rlc3RpbmF0aW9uU3RyaWN0bHlNYXRjaGVzJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5fc2VjdXJpdHlbJ2Rlc3RpbmF0aW9uU3RyaWN0bHlNYXRjaGVzJ10gPSBmYWxzZTsKICAgICAgICB9CgogICAgICAgIC8vIEFsbG93IGR1cGxpY2F0ZWQgQXR0cmlidXRlIE5hbWVzCiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+X3NlY3VyaXR5WydhbGxvd1JlcGVhdEF0dHJpYnV0ZU5hbWUnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9zZWN1cml0eVsnYWxsb3dSZXBlYXRBdHRyaWJ1dGVOYW1lJ10gPSBmYWxzZTsKICAgICAgICB9CgogICAgICAgIC8vIEluUmVzcG9uc2VUbwogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPl9zZWN1cml0eVsncmVqZWN0VW5zb2xpY2l0ZWRSZXNwb25zZXNXaXRoSW5SZXNwb25zZVRvJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5fc2VjdXJpdHlbJ3JlamVjdFVuc29saWNpdGVkUmVzcG9uc2VzV2l0aEluUmVzcG9uc2VUbyddID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAvLyBlbmNyeXB0IGV4cGVjdGVkCiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+X3NlY3VyaXR5Wyd3YW50QXNzZXJ0aW9uc0VuY3J5cHRlZCddKSkgewogICAgICAgICAgICAkdGhpcy0+X3NlY3VyaXR5Wyd3YW50QXNzZXJ0aW9uc0VuY3J5cHRlZCddID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPl9zZWN1cml0eVsnd2FudE5hbWVJZEVuY3J5cHRlZCddKSkgewogICAgICAgICAgICAkdGhpcy0+X3NlY3VyaXR5Wyd3YW50TmFtZUlkRW5jcnlwdGVkJ10gPSBmYWxzZTsKICAgICAgICB9CgogICAgICAgIC8vIFhNTCB2YWxpZGF0aW9uCiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+X3NlY3VyaXR5Wyd3YW50WE1MVmFsaWRhdGlvbiddKSkgewogICAgICAgICAgICAkdGhpcy0+X3NlY3VyaXR5Wyd3YW50WE1MVmFsaWRhdGlvbiddID0gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIC8vIFNpZ25hdHVyZUFsZ29yaXRobQogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPl9zZWN1cml0eVsnc2lnbmF0dXJlQWxnb3JpdGhtJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5fc2VjdXJpdHlbJ3NpZ25hdHVyZUFsZ29yaXRobSddID0gWE1MU2VjdXJpdHlLZXk6OlJTQV9TSEEyNTY7CiAgICAgICAgfQoKICAgICAgICAvLyBEaWdlc3RBbGdvcml0aG0KICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5fc2VjdXJpdHlbJ2RpZ2VzdEFsZ29yaXRobSddKSkgewogICAgICAgICAgICAkdGhpcy0+X3NlY3VyaXR5WydkaWdlc3RBbGdvcml0aG0nXSA9IFhNTFNlY3VyaXR5RFNpZzo6U0hBMjU2OwogICAgICAgIH0KCiAgICAgICAgLy8gRW5jcnlwdGlvbkFsZ29yaXRobQogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPl9zZWN1cml0eVsnZW5jcnlwdGlvbl9hbGdvcml0aG0nXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9zZWN1cml0eVsnZW5jcnlwdGlvbl9hbGdvcml0aG0nXSA9IFhNTFNlY3VyaXR5S2V5OjpBRVMxMjhfQ0JDOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+X3NlY3VyaXR5Wydsb3dlcmNhc2VVcmxlbmNvZGluZyddKSkgewogICAgICAgICAgICAkdGhpcy0+X3NlY3VyaXR5Wydsb3dlcmNhc2VVcmxlbmNvZGluZyddID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAvLyBDZXJ0aWZpY2F0ZXMgLyBQcml2YXRlIGtleSAvRmluZ2VycHJpbnQKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5faWRwWyd4NTA5Y2VydCddKSkgewogICAgICAgICAgICAkdGhpcy0+X2lkcFsneDUwOWNlcnQnXSA9ICcnOwogICAgICAgIH0KICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5faWRwWydjZXJ0RmluZ2VycHJpbnQnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9pZHBbJ2NlcnRGaW5nZXJwcmludCddID0gJyc7CiAgICAgICAgfQogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPl9pZHBbJ2NlcnRGaW5nZXJwcmludEFsZ29yaXRobSddKSkgewogICAgICAgICAgICAkdGhpcy0+X2lkcFsnY2VydEZpbmdlcnByaW50QWxnb3JpdGhtJ10gPSAnc2hhMSc7CiAgICAgICAgfQoKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5fc3BbJ3g1MDljZXJ0J10pKSB7CiAgICAgICAgICAgICR0aGlzLT5fc3BbJ3g1MDljZXJ0J10gPSAnJzsKICAgICAgICB9CiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+X3NwWydwcml2YXRlS2V5J10pKSB7CiAgICAgICAgICAgICR0aGlzLT5fc3BbJ3ByaXZhdGVLZXknXSA9ICcnOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrcyB0aGUgc2V0dGluZ3MgaW5mby4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHNldHRpbmdzIEFycmF5IHdpdGggc2V0dGluZ3MgZGF0YQogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgJGVycm9ycyAgRXJyb3JzIGZvdW5kIG9uIHRoZSBzZXR0aW5ncyBkYXRhCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjaGVja1NldHRpbmdzKGFycmF5ICRzZXR0aW5ncykKICAgIHsKICAgICAgICBpZiAoZW1wdHkoJHNldHRpbmdzKSkgewogICAgICAgICAgICAkZXJyb3JzID0gYXJyYXkoJ2ludmFsaWRfc3ludGF4Jyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGVycm9ycyA9IGFycmF5KCk7CiAgICAgICAgICAgIGlmICghJHRoaXMtPl9zcFZhbGlkYXRpb25Pbmx5KSB7CiAgICAgICAgICAgICAgICAkaWRwRXJyb3JzID0gJHRoaXMtPmNoZWNrSWRQU2V0dGluZ3MoJHNldHRpbmdzKTsKICAgICAgICAgICAgICAgICRlcnJvcnMgPSBhcnJheV9tZXJnZSgkaWRwRXJyb3JzLCAkZXJyb3JzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkc3BFcnJvcnMgPSAkdGhpcy0+Y2hlY2tTUFNldHRpbmdzKCRzZXR0aW5ncyk7CiAgICAgICAgICAgICRlcnJvcnMgPSBhcnJheV9tZXJnZSgkc3BFcnJvcnMsICRlcnJvcnMpOwoKICAgICAgICAgICAgJGNvbXByZXNzRXJyb3JzID0gJHRoaXMtPmNoZWNrQ29tcHJlc3Npb25TZXR0aW5ncygkc2V0dGluZ3MpOwogICAgICAgICAgICAkZXJyb3JzID0gYXJyYXlfbWVyZ2UoJGNvbXByZXNzRXJyb3JzLCAkZXJyb3JzKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkZXJyb3JzOwogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2tzIHRoZSBjb21wcmVzc2lvbiBzZXR0aW5ncyBpbmZvLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkc2V0dGluZ3MgQXJyYXkgd2l0aCBzZXR0aW5ncyBkYXRhCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSAkZXJyb3JzICBFcnJvcnMgZm91bmQgb24gdGhlIHNldHRpbmdzIGRhdGEKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNoZWNrQ29tcHJlc3Npb25TZXR0aW5ncygkc2V0dGluZ3MpCiAgICB7CiAgICAgICAgJGVycm9ycyA9IGFycmF5KCk7CgogICAgICAgIGlmIChpc3NldCgkc2V0dGluZ3NbJ2NvbXByZXNzJ10pKSB7CiAgICAgICAgICAgIGlmICghaXNfYXJyYXkoJHNldHRpbmdzWydjb21wcmVzcyddKSkgewogICAgICAgICAgICAgICAgJGVycm9yc1tdID0gImludmFsaWRfc3ludGF4IjsKICAgICAgICAgICAgfSBlbHNlIGlmIChpc3NldCgkc2V0dGluZ3NbJ2NvbXByZXNzJ11bJ3JlcXVlc3RzJ10pCiAgICAgICAgICAgICAgICAmJiAkc2V0dGluZ3NbJ2NvbXByZXNzJ11bJ3JlcXVlc3RzJ10gIT09IHRydWUKICAgICAgICAgICAgICAgICYmICRzZXR0aW5nc1snY29tcHJlc3MnXVsncmVxdWVzdHMnXSAhPT0gZmFsc2UKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkZXJyb3JzW10gPSAiJ2NvbXByZXNzJz0+J3JlcXVlc3RzJyB2YWx1ZXMgbXVzdCBiZSB0cnVlIG9yIGZhbHNlLiI7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNzZXQoJHNldHRpbmdzWydjb21wcmVzcyddWydyZXNwb25zZXMnXSkKICAgICAgICAgICAgICAgICYmICRzZXR0aW5nc1snY29tcHJlc3MnXVsncmVzcG9uc2VzJ10gIT09IHRydWUKICAgICAgICAgICAgICAgICYmICRzZXR0aW5nc1snY29tcHJlc3MnXVsncmVzcG9uc2VzJ10gIT09IGZhbHNlCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJGVycm9yc1tdID0gIidjb21wcmVzcyc9PidyZXNwb25zZXMnIHZhbHVlcyBtdXN0IGJlIHRydWUgb3IgZmFsc2UuIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJGVycm9yczsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrcyB0aGUgSWRQIHNldHRpbmdzIGluZm8uCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRzZXR0aW5ncyBBcnJheSB3aXRoIHNldHRpbmdzIGRhdGEKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5ICRlcnJvcnMgIEVycm9ycyBmb3VuZCBvbiB0aGUgSWRQIHNldHRpbmdzIGRhdGEKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNoZWNrSWRQU2V0dGluZ3MoYXJyYXkgJHNldHRpbmdzKQogICAgewogICAgICAgIGlmIChlbXB0eSgkc2V0dGluZ3MpKSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgnaW52YWxpZF9zeW50YXgnKTsKICAgICAgICB9CgogICAgICAgICRlcnJvcnMgPSBhcnJheSgpOwoKICAgICAgICBpZiAoIWlzc2V0KCRzZXR0aW5nc1snaWRwJ10pIHx8IGVtcHR5KCRzZXR0aW5nc1snaWRwJ10pKSB7CiAgICAgICAgICAgICRlcnJvcnNbXSA9ICdpZHBfbm90X2ZvdW5kJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkaWRwID0gJHNldHRpbmdzWydpZHAnXTsKICAgICAgICAgICAgaWYgKCFpc3NldCgkaWRwWydlbnRpdHlJZCddKSB8fCBlbXB0eSgkaWRwWydlbnRpdHlJZCddKSkgewogICAgICAgICAgICAgICAgJGVycm9yc1tdID0gJ2lkcF9lbnRpdHlJZF9ub3RfZm91bmQnOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIWlzc2V0KCRpZHBbJ3NpbmdsZVNpZ25PblNlcnZpY2UnXSkKICAgICAgICAgICAgICAgIHx8ICFpc3NldCgkaWRwWydzaW5nbGVTaWduT25TZXJ2aWNlJ11bJ3VybCddKQogICAgICAgICAgICAgICAgfHwgZW1wdHkoJGlkcFsnc2luZ2xlU2lnbk9uU2VydmljZSddWyd1cmwnXSkKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkZXJyb3JzW10gPSAnaWRwX3Nzb19ub3RfZm91bmQnOwogICAgICAgICAgICB9IGVsc2UgaWYgKCFmaWx0ZXJfdmFyKCRpZHBbJ3NpbmdsZVNpZ25PblNlcnZpY2UnXVsndXJsJ10sIEZJTFRFUl9WQUxJREFURV9VUkwpKSB7CiAgICAgICAgICAgICAgICAkZXJyb3JzW10gPSAnaWRwX3Nzb191cmxfaW52YWxpZCc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChpc3NldCgkaWRwWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ10pCiAgICAgICAgICAgICAgICAmJiBpc3NldCgkaWRwWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ11bJ3VybCddKQogICAgICAgICAgICAgICAgJiYgIWVtcHR5KCRpZHBbJ3NpbmdsZUxvZ291dFNlcnZpY2UnXVsndXJsJ10pCiAgICAgICAgICAgICAgICAmJiAhZmlsdGVyX3ZhcigkaWRwWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ11bJ3VybCddLCBGSUxURVJfVkFMSURBVEVfVVJMKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICRlcnJvcnNbXSA9ICdpZHBfc2xvX3VybF9pbnZhbGlkJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGlzc2V0KCRpZHBbJ3NpbmdsZUxvZ291dFNlcnZpY2UnXSkKICAgICAgICAgICAgICAgICYmIGlzc2V0KCRpZHBbJ3NpbmdsZUxvZ291dFNlcnZpY2UnXVsncmVzcG9uc2VVcmwnXSkKICAgICAgICAgICAgICAgICYmICFlbXB0eSgkaWRwWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ11bJ3Jlc3BvbnNlVXJsJ10pCiAgICAgICAgICAgICAgICAmJiAhZmlsdGVyX3ZhcigkaWRwWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ11bJ3Jlc3BvbnNlVXJsJ10sIEZJTFRFUl9WQUxJREFURV9VUkwpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJGVycm9yc1tdID0gJ2lkcF9zbG9fcmVzcG9uc2VfdXJsX2ludmFsaWQnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkZXhpc3RzWDUwOSA9IGlzc2V0KCRpZHBbJ3g1MDljZXJ0J10pICYmICFlbXB0eSgkaWRwWyd4NTA5Y2VydCddKTsKICAgICAgICAgICAgJGV4aXN0c011bHRpWDUwOVNpZ24gPSBpc3NldCgkaWRwWyd4NTA5Y2VydE11bHRpJ10pICYmIGlzc2V0KCRpZHBbJ3g1MDljZXJ0TXVsdGknXVsnc2lnbmluZyddKSAmJiAhZW1wdHkoJGlkcFsneDUwOWNlcnRNdWx0aSddWydzaWduaW5nJ10pOwogICAgICAgICAgICAkZXhpc3RzRmluZ2VycHJpbnQgPSBpc3NldCgkaWRwWydjZXJ0RmluZ2VycHJpbnQnXSkgJiYgIWVtcHR5KCRpZHBbJ2NlcnRGaW5nZXJwcmludCddKTsKICAgICAgICAgICAgaWYgKCEoJGV4aXN0c1g1MDkgfHwgJGV4aXN0c0ZpbmdlcnByaW50IHx8ICRleGlzdHNNdWx0aVg1MDlTaWduKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICRlcnJvcnNbXSA9ICdpZHBfY2VydF9vcl9maW5nZXJwcmludF9ub3RfZm91bmRfYW5kX3JlcXVpcmVkJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGlzc2V0KCRzZXR0aW5nc1snc2VjdXJpdHknXSkpIHsKICAgICAgICAgICAgICAgICRleGlzdHNNdWx0aVg1MDlFbmMgPSBpc3NldCgkaWRwWyd4NTA5Y2VydE11bHRpJ10pICYmIGlzc2V0KCRpZHBbJ3g1MDljZXJ0TXVsdGknXVsnZW5jcnlwdGlvbiddKSAmJiAhZW1wdHkoJGlkcFsneDUwOWNlcnRNdWx0aSddWydlbmNyeXB0aW9uJ10pOwoKICAgICAgICAgICAgICAgIGlmICgoaXNzZXQoJHNldHRpbmdzWydzZWN1cml0eSddWyduYW1lSWRFbmNyeXB0ZWQnXSkgJiYgJHNldHRpbmdzWydzZWN1cml0eSddWyduYW1lSWRFbmNyeXB0ZWQnXSA9PSB0cnVlKQogICAgICAgICAgICAgICAgICAgICYmICEoJGV4aXN0c1g1MDkgfHwgJGV4aXN0c011bHRpWDUwOUVuYykKICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICRlcnJvcnNbXSA9ICdpZHBfY2VydF9ub3RfZm91bmRfYW5kX3JlcXVpcmVkJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRlcnJvcnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3MgdGhlIFNQIHNldHRpbmdzIGluZm8uCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRzZXR0aW5ncyBBcnJheSB3aXRoIHNldHRpbmdzIGRhdGEKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5ICRlcnJvcnMgIEVycm9ycyBmb3VuZCBvbiB0aGUgU1Agc2V0dGluZ3MgZGF0YQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2tTUFNldHRpbmdzKGFycmF5ICRzZXR0aW5ncykKICAgIHsKICAgICAgICBpZiAoZW1wdHkoJHNldHRpbmdzKSkgewogICAgICAgICAgICByZXR1cm4gYXJyYXkoJ2ludmFsaWRfc3ludGF4Jyk7CiAgICAgICAgfQoKICAgICAgICAkZXJyb3JzID0gYXJyYXkoKTsKCiAgICAgICAgaWYgKCFpc3NldCgkc2V0dGluZ3NbJ3NwJ10pIHx8IGVtcHR5KCRzZXR0aW5nc1snc3AnXSkpIHsKICAgICAgICAgICAgJGVycm9yc1tdID0gJ3NwX25vdF9mb3VuZCc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHNwID0gJHNldHRpbmdzWydzcCddOwogICAgICAgICAgICAkc2VjdXJpdHkgPSBhcnJheSgpOwogICAgICAgICAgICBpZiAoaXNzZXQoJHNldHRpbmdzWydzZWN1cml0eSddKSkgewogICAgICAgICAgICAgICAgJHNlY3VyaXR5ID0gJHNldHRpbmdzWydzZWN1cml0eSddOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIWlzc2V0KCRzcFsnZW50aXR5SWQnXSkgfHwgZW1wdHkoJHNwWydlbnRpdHlJZCddKSkgewogICAgICAgICAgICAgICAgJGVycm9yc1tdID0gJ3NwX2VudGl0eUlkX25vdF9mb3VuZCc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghaXNzZXQoJHNwWydhc3NlcnRpb25Db25zdW1lclNlcnZpY2UnXSkKICAgICAgICAgICAgICAgIHx8ICFpc3NldCgkc3BbJ2Fzc2VydGlvbkNvbnN1bWVyU2VydmljZSddWyd1cmwnXSkKICAgICAgICAgICAgICAgIHx8IGVtcHR5KCRzcFsnYXNzZXJ0aW9uQ29uc3VtZXJTZXJ2aWNlJ11bJ3VybCddKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICRlcnJvcnNbXSA9ICdzcF9hY3Nfbm90X2ZvdW5kJzsKICAgICAgICAgICAgfSBlbHNlIGlmICghZmlsdGVyX3Zhcigkc3BbJ2Fzc2VydGlvbkNvbnN1bWVyU2VydmljZSddWyd1cmwnXSwgRklMVEVSX1ZBTElEQVRFX1VSTCkpIHsKICAgICAgICAgICAgICAgICRlcnJvcnNbXSA9ICdzcF9hY3NfdXJsX2ludmFsaWQnOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoaXNzZXQoJHNwWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ10pCiAgICAgICAgICAgICAgICAmJiBpc3NldCgkc3BbJ3NpbmdsZUxvZ291dFNlcnZpY2UnXVsndXJsJ10pCiAgICAgICAgICAgICAgICAmJiAhZmlsdGVyX3Zhcigkc3BbJ3NpbmdsZUxvZ291dFNlcnZpY2UnXVsndXJsJ10sIEZJTFRFUl9WQUxJREFURV9VUkwpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJGVycm9yc1tdID0gJ3NwX3Nsc191cmxfaW52YWxpZCc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChpc3NldCgkc2VjdXJpdHlbJ3NpZ25NZXRhZGF0YSddKSAmJiBpc19hcnJheSgkc2VjdXJpdHlbJ3NpZ25NZXRhZGF0YSddKSkgewogICAgICAgICAgICAgICAgaWYgKCghaXNzZXQoJHNlY3VyaXR5WydzaWduTWV0YWRhdGEnXVsna2V5RmlsZU5hbWUnXSkKICAgICAgICAgICAgICAgICAgICB8fCAhaXNzZXQoJHNlY3VyaXR5WydzaWduTWV0YWRhdGEnXVsnY2VydEZpbGVOYW1lJ10pKSAmJgogICAgICAgICAgICAgICAgICAgICghaXNzZXQoJHNlY3VyaXR5WydzaWduTWV0YWRhdGEnXVsncHJpdmF0ZUtleSddKQogICAgICAgICAgICAgICAgICAgIHx8ICFpc3NldCgkc2VjdXJpdHlbJ3NpZ25NZXRhZGF0YSddWyd4NTA5Y2VydCddKSkKICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICRlcnJvcnNbXSA9ICdzcF9zaWduTWV0YWRhdGFfaW52YWxpZCc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgoKGlzc2V0KCRzZWN1cml0eVsnYXV0aG5SZXF1ZXN0c1NpZ25lZCddKSAmJiAkc2VjdXJpdHlbJ2F1dGhuUmVxdWVzdHNTaWduZWQnXSA9PSB0cnVlKQogICAgICAgICAgICAgICAgfHwgKGlzc2V0KCRzZWN1cml0eVsnbG9nb3V0UmVxdWVzdFNpZ25lZCddKSAmJiAkc2VjdXJpdHlbJ2xvZ291dFJlcXVlc3RTaWduZWQnXSA9PSB0cnVlKQogICAgICAgICAgICAgICAgfHwgKGlzc2V0KCRzZWN1cml0eVsnbG9nb3V0UmVzcG9uc2VTaWduZWQnXSkgJiYgJHNlY3VyaXR5Wydsb2dvdXRSZXNwb25zZVNpZ25lZCddID09IHRydWUpCiAgICAgICAgICAgICAgICB8fCAoaXNzZXQoJHNlY3VyaXR5Wyd3YW50QXNzZXJ0aW9uc0VuY3J5cHRlZCddKSAmJiAkc2VjdXJpdHlbJ3dhbnRBc3NlcnRpb25zRW5jcnlwdGVkJ10gPT0gdHJ1ZSkKICAgICAgICAgICAgICAgIHx8IChpc3NldCgkc2VjdXJpdHlbJ3dhbnROYW1lSWRFbmNyeXB0ZWQnXSkgJiYgJHNlY3VyaXR5Wyd3YW50TmFtZUlkRW5jcnlwdGVkJ10gPT0gdHJ1ZSkpCiAgICAgICAgICAgICAgICAmJiAhJHRoaXMtPmNoZWNrU1BDZXJ0cygpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJGVycm9yc1tdID0gJ3NwX2NlcnRzX25vdF9mb3VuZF9hbmRfcmVxdWlyZWQnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJHNldHRpbmdzWydjb250YWN0UGVyc29uJ10pKSB7CiAgICAgICAgICAgICR0eXBlcyA9IGFycmF5X2tleXMoJHNldHRpbmdzWydjb250YWN0UGVyc29uJ10pOwogICAgICAgICAgICAkdmFsaWRUeXBlcyA9IGFycmF5KCd0ZWNobmljYWwnLCAnc3VwcG9ydCcsICdhZG1pbmlzdHJhdGl2ZScsICdiaWxsaW5nJywgJ290aGVyJyk7CiAgICAgICAgICAgIGZvcmVhY2ggKCR0eXBlcyBhcyAkdHlwZSkgewogICAgICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkdHlwZSwgJHZhbGlkVHlwZXMpKSB7CiAgICAgICAgICAgICAgICAgICAgJGVycm9yc1tdID0gJ2NvbnRhY3RfdHlwZV9pbnZhbGlkJzsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yZWFjaCAoJHNldHRpbmdzWydjb250YWN0UGVyc29uJ10gYXMgJHR5cGUgPT4gJGNvbnRhY3QpIHsKICAgICAgICAgICAgICAgIGlmICghaXNzZXQoJGNvbnRhY3RbJ2dpdmVuTmFtZSddKSB8fCBlbXB0eSgkY29udGFjdFsnZ2l2ZW5OYW1lJ10pCiAgICAgICAgICAgICAgICAgICAgfHwgIWlzc2V0KCRjb250YWN0WydlbWFpbEFkZHJlc3MnXSkgfHwgZW1wdHkoJGNvbnRhY3RbJ2VtYWlsQWRkcmVzcyddKQogICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgJGVycm9yc1tdID0gJ2NvbnRhY3Rfbm90X2Vub3VnaF9kYXRhJzsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRzZXR0aW5nc1snb3JnYW5pemF0aW9uJ10pKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRzZXR0aW5nc1snb3JnYW5pemF0aW9uJ10gYXMgJG9yZ2FuaXphdGlvbikgewogICAgICAgICAgICAgICAgaWYgKCFpc3NldCgkb3JnYW5pemF0aW9uWyduYW1lJ10pIHx8IGVtcHR5KCRvcmdhbml6YXRpb25bJ25hbWUnXSkKICAgICAgICAgICAgICAgICAgICB8fCAhaXNzZXQoJG9yZ2FuaXphdGlvblsnZGlzcGxheW5hbWUnXSkgfHwgZW1wdHkoJG9yZ2FuaXphdGlvblsnZGlzcGxheW5hbWUnXSkKICAgICAgICAgICAgICAgICAgICB8fCAhaXNzZXQoJG9yZ2FuaXphdGlvblsndXJsJ10pIHx8IGVtcHR5KCRvcmdhbml6YXRpb25bJ3VybCddKQogICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgJGVycm9yc1tdID0gJ29yZ2FuaXphdGlvbl9ub3RfZW5vdWdoX2RhdGEnOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGVycm9yczsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrcyBpZiB0aGUgeDUwOSBjZXJ0cyBvZiB0aGUgU1AgZXhpc3RzIGFuZCBhcmUgdmFsaWQuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjaGVja1NQQ2VydHMoKQogICAgewogICAgICAgICRrZXkgPSAkdGhpcy0+Z2V0U1BrZXkoKTsKICAgICAgICAkY2VydCA9ICR0aGlzLT5nZXRTUGNlcnQoKTsKICAgICAgICByZXR1cm4gKCFlbXB0eSgka2V5KSAmJiAhZW1wdHkoJGNlcnQpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHg1MDkgcHJpdmF0ZSBrZXkgb2YgdGhlIFNQLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFNQIHByaXZhdGUga2V5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTUGtleSgpCiAgICB7CiAgICAgICAgJGtleSA9IG51bGw7CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5fc3BbJ3ByaXZhdGVLZXknXSkgJiYgIWVtcHR5KCR0aGlzLT5fc3BbJ3ByaXZhdGVLZXknXSkpIHsKICAgICAgICAgICAgJGtleSA9ICR0aGlzLT5fc3BbJ3ByaXZhdGVLZXknXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAka2V5RmlsZSA9ICR0aGlzLT5fcGF0aHNbJ2NlcnQnXS4nc3Aua2V5JzsKCiAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygka2V5RmlsZSkpIHsKICAgICAgICAgICAgICAgICRrZXkgPSBmaWxlX2dldF9jb250ZW50cygka2V5RmlsZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRrZXk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB4NTA5IHB1YmxpYyBjZXJ0IG9mIHRoZSBTUC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBTUCBwdWJsaWMgY2VydAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U1BjZXJ0KCkKICAgIHsKICAgICAgICAkY2VydCA9IG51bGw7CgogICAgICAgIGlmIChpc3NldCgkdGhpcy0+X3NwWyd4NTA5Y2VydCddKSAmJiAhZW1wdHkoJHRoaXMtPl9zcFsneDUwOWNlcnQnXSkpIHsKICAgICAgICAgICAgJGNlcnQgPSAkdGhpcy0+X3NwWyd4NTA5Y2VydCddOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRjZXJ0RmlsZSA9ICR0aGlzLT5fcGF0aHNbJ2NlcnQnXS4nc3AuY3J0JzsKCiAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkY2VydEZpbGUpKSB7CiAgICAgICAgICAgICAgICAkY2VydCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRjZXJ0RmlsZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRjZXJ0OwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgeDUwOSBwdWJsaWMgb2YgdGhlIFNQIHRoYXQgaXMKICAgICAqIHBsYW5lZCB0byBiZSB1c2VkIHNvb24gaW5zdGVhZCB0aGUgb3RoZXIKICAgICAqIHB1YmxpYyBjZXJ0CiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgU1AgcHVibGljIGNlcnQgTmV3CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTUGNlcnROZXcoKQogICAgewogICAgICAgICRjZXJ0ID0gbnVsbDsKCiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5fc3BbJ3g1MDljZXJ0TmV3J10pICYmICFlbXB0eSgkdGhpcy0+X3NwWyd4NTA5Y2VydE5ldyddKSkgewogICAgICAgICAgICAkY2VydCA9ICR0aGlzLT5fc3BbJ3g1MDljZXJ0TmV3J107CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGNlcnRGaWxlID0gJHRoaXMtPl9wYXRoc1snY2VydCddLidzcF9uZXcuY3J0JzsKCiAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkY2VydEZpbGUpKSB7CiAgICAgICAgICAgICAgICAkY2VydCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRjZXJ0RmlsZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRjZXJ0OwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgSWRQIGRhdGEuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSAgSWRQIGluZm8KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldElkUERhdGEoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2lkcDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldHMgdGhlIFNQIGRhdGEuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSAgU1AgaW5mbwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U1BEYXRhKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9zcDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldHMgc2VjdXJpdHkgZGF0YS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5ICBTUCBpbmZvCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTZWN1cml0eURhdGEoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X3NlY3VyaXR5OwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyBjb250YWN0IGRhdGEuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSAgU1AgaW5mbwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGFjdHMoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2NvbnRhY3RzOwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyBvcmdhbml6YXRpb24gZGF0YS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5ICBTUCBpbmZvCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPcmdhbml6YXRpb24oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X29yZ2FuaXphdGlvbjsKICAgIH0KCiAgICAvKioKICAgICAqIFNob3VsZCBTQU1MIHJlcXVlc3RzIGJlIGNvbXByZXNzZWQ/CiAgICAgKgogICAgICogQHJldHVybiBib29sIFllcy9ObyBhcyBUcnVlL0ZhbHNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaG91bGRDb21wcmVzc1JlcXVlc3RzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9jb21wcmVzc1sncmVxdWVzdHMnXTsKICAgIH0KCiAgICAvKioKICAgICAqIFNob3VsZCBTQU1MIHJlc3BvbnNlcyBiZSBjb21wcmVzc2VkPwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBZZXMvTm8gYXMgVHJ1ZS9GYWxzZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2hvdWxkQ29tcHJlc3NSZXNwb25zZXMoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2NvbXByZXNzWydyZXNwb25zZXMnXTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldHMgdGhlIElkUCBTU08gdXJsLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIHVybCBvZiB0aGUgSWRQIFNpbmdsZSBTaWduIE9uIFNlcnZpY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldElkUFNTT1VybCgpCiAgICB7CiAgICAgICAgJHNzb1VybCA9IG51bGw7CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5faWRwWydzaW5nbGVTaWduT25TZXJ2aWNlJ10pICYmIGlzc2V0KCR0aGlzLT5faWRwWydzaW5nbGVTaWduT25TZXJ2aWNlJ11bJ3VybCddKSkgewogICAgICAgICAgICAkc3NvVXJsID0gJHRoaXMtPl9pZHBbJ3NpbmdsZVNpZ25PblNlcnZpY2UnXVsndXJsJ107CiAgICAgICAgfQogICAgICAgIHJldHVybiAkc3NvVXJsOwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgSWRQIFNMTyB1cmwuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBUaGUgcmVxdWVzdCB1cmwgb2YgdGhlIElkUCBTaW5nbGUgTG9nb3V0IFNlcnZpY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldElkUFNMT1VybCgpCiAgICB7CiAgICAgICAgJHNsb1VybCA9IG51bGw7CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5faWRwWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ10pICYmIGlzc2V0KCR0aGlzLT5faWRwWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ11bJ3VybCddKSkgewogICAgICAgICAgICAkc2xvVXJsID0gJHRoaXMtPl9pZHBbJ3NpbmdsZUxvZ291dFNlcnZpY2UnXVsndXJsJ107CiAgICAgICAgfQogICAgICAgIHJldHVybiAkc2xvVXJsOwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgSWRQIFNMTyByZXNwb25zZSB1cmwuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBUaGUgcmVzcG9uc2UgdXJsIG9mIHRoZSBJZFAgU2luZ2xlIExvZ291dCBTZXJ2aWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJZFBTTE9SZXNwb25zZVVybCgpCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5faWRwWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ10pICYmIGlzc2V0KCR0aGlzLT5faWRwWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ11bJ3Jlc3BvbnNlVXJsJ10pKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X2lkcFsnc2luZ2xlTG9nb3V0U2VydmljZSddWydyZXNwb25zZVVybCddOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHRoaXMtPmdldElkUFNMT1VybCgpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgU1AgbWV0YWRhdGEuIFRoZSBYTUwgcmVwcmVzZW50YXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJGFsd2F5c1B1Ymxpc2hFbmNyeXB0aW9uQ2VydCBXaGVuICd0cnVlJywgdGhlIHJldHVybmVkCiAgICAgKiBtZXRhZGF0YSB3aWxsIGFsd2F5cyBpbmNsdWRlIGFuICdlbmNyeXB0aW9uJyBLZXlEZXNjcmlwdG9yLiBPdGhlcndpc2UsCiAgICAgKiB0aGUgJ2VuY3J5cHRpb24nIEtleURlc2NyaXB0b3Igd2lsbCBvbmx5IGJlIGluY2x1ZGVkIGlmCiAgICAgKiAkYWR2YW5jZWRTZXR0aW5nc1snc2VjdXJpdHknXVsnd2FudE5hbWVJZEVuY3J5cHRlZCddIG9yCiAgICAgKiAkYWR2YW5jZWRTZXR0aW5nc1snc2VjdXJpdHknXVsnd2FudEFzc2VydGlvbnNFbmNyeXB0ZWQnXSBhcmUgZW5hYmxlZC4KICAgICAqIEBwYXJhbSBpbnR8bnVsbCAgICAgICR2YWxpZFVudGlsICAgIE1ldGFkYXRhJ3MgdmFsaWQgdGltZQogICAgICogQHBhcmFtIGludHxudWxsICAgICAgJGNhY2hlRHVyYXRpb24gRHVyYXRpb24gb2YgdGhlIGNhY2hlIGluIHNlY29uZHMKICAgICAqIEBwYXJhbSBib29sICAgICAgICAgICRpZ25vcmVWYWxpZFVudGlsIGV4Y2x1ZGUgdGhlIHZhbGlkVW50aWwgdGFnIGZyb20gbWV0YWRhdGEKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyAgU1AgbWV0YWRhdGEgKHhtbCkKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIEVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTUE1ldGFkYXRhKCRhbHdheXNQdWJsaXNoRW5jcnlwdGlvbkNlcnQgPSBmYWxzZSwgJHZhbGlkVW50aWwgPSBudWxsLCAkY2FjaGVEdXJhdGlvbiA9IG51bGwsICRpZ25vcmVWYWxpZFVudGlsID0gZmFsc2UpCiAgICB7CiAgICAgICAgJG1ldGFkYXRhID0gTWV0YWRhdGE6OmJ1aWxkZXIoJHRoaXMtPl9zcCwgJHRoaXMtPl9zZWN1cml0eVsnYXV0aG5SZXF1ZXN0c1NpZ25lZCddLCAkdGhpcy0+X3NlY3VyaXR5Wyd3YW50QXNzZXJ0aW9uc1NpZ25lZCddLCAkdmFsaWRVbnRpbCwgJGNhY2hlRHVyYXRpb24sICR0aGlzLT5nZXRDb250YWN0cygpLCAkdGhpcy0+Z2V0T3JnYW5pemF0aW9uKCksIFtdLCAkaWdub3JlVmFsaWRVbnRpbCk7CgogICAgICAgICRjZXJ0TmV3ID0gJHRoaXMtPmdldFNQY2VydE5ldygpOwogICAgICAgIGlmICghZW1wdHkoJGNlcnROZXcpKSB7CiAgICAgICAgICAgICRtZXRhZGF0YSA9IE1ldGFkYXRhOjphZGRYNTA5S2V5RGVzY3JpcHRvcnMoCiAgICAgICAgICAgICAgICAkbWV0YWRhdGEsCiAgICAgICAgICAgICAgICAkY2VydE5ldywKICAgICAgICAgICAgICAgICRhbHdheXNQdWJsaXNoRW5jcnlwdGlvbkNlcnQgfHwgJHRoaXMtPl9zZWN1cml0eVsnd2FudE5hbWVJZEVuY3J5cHRlZCddIHx8ICR0aGlzLT5fc2VjdXJpdHlbJ3dhbnRBc3NlcnRpb25zRW5jcnlwdGVkJ10KICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRjZXJ0ID0gJHRoaXMtPmdldFNQY2VydCgpOwogICAgICAgIGlmICghZW1wdHkoJGNlcnQpKSB7CiAgICAgICAgICAgICRtZXRhZGF0YSA9IE1ldGFkYXRhOjphZGRYNTA5S2V5RGVzY3JpcHRvcnMoCiAgICAgICAgICAgICAgICAkbWV0YWRhdGEsCiAgICAgICAgICAgICAgICAkY2VydCwKICAgICAgICAgICAgICAgICRhbHdheXNQdWJsaXNoRW5jcnlwdGlvbkNlcnQgfHwgJHRoaXMtPl9zZWN1cml0eVsnd2FudE5hbWVJZEVuY3J5cHRlZCddIHx8ICR0aGlzLT5fc2VjdXJpdHlbJ3dhbnRBc3NlcnRpb25zRW5jcnlwdGVkJ10KICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIC8vU2lnbiBNZXRhZGF0YQogICAgICAgIGlmIChpc3NldCgkdGhpcy0+X3NlY3VyaXR5WydzaWduTWV0YWRhdGEnXSkgJiYgJHRoaXMtPl9zZWN1cml0eVsnc2lnbk1ldGFkYXRhJ10gIT0gZmFsc2UpIHsKICAgICAgICAgICAgaWYgKCR0aGlzLT5fc2VjdXJpdHlbJ3NpZ25NZXRhZGF0YSddID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAka2V5TWV0YWRhdGEgPSAkdGhpcy0+Z2V0U1BrZXkoKTsKICAgICAgICAgICAgICAgICRjZXJ0TWV0YWRhdGEgPSAkY2VydDsKCiAgICAgICAgICAgICAgICBpZiAoISRrZXlNZXRhZGF0YSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgJ1NQIFByaXZhdGUga2V5IG5vdCBmb3VuZC4nLAogICAgICAgICAgICAgICAgICAgICAgICBFcnJvcjo6UFJJVkFURV9LRVlfRklMRV9OT1RfRk9VTkQKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghJGNlcnRNZXRhZGF0YSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgJ1NQIFB1YmxpYyBjZXJ0IG5vdCBmb3VuZC4nLAogICAgICAgICAgICAgICAgICAgICAgICBFcnJvcjo6UFVCTElDX0NFUlRfRklMRV9OT1RfRk9VTkQKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKGlzc2V0KCR0aGlzLT5fc2VjdXJpdHlbJ3NpZ25NZXRhZGF0YSddWydrZXlGaWxlTmFtZSddKSAmJgogICAgICAgICAgICAgICAgaXNzZXQoJHRoaXMtPl9zZWN1cml0eVsnc2lnbk1ldGFkYXRhJ11bJ2NlcnRGaWxlTmFtZSddKSkgewogICAgICAgICAgICAgICAgJGtleUZpbGVOYW1lID0gJHRoaXMtPl9zZWN1cml0eVsnc2lnbk1ldGFkYXRhJ11bJ2tleUZpbGVOYW1lJ107CiAgICAgICAgICAgICAgICAkY2VydEZpbGVOYW1lID0gJHRoaXMtPl9zZWN1cml0eVsnc2lnbk1ldGFkYXRhJ11bJ2NlcnRGaWxlTmFtZSddOwoKICAgICAgICAgICAgICAgICRrZXlNZXRhZGF0YUZpbGUgPSAkdGhpcy0+X3BhdGhzWydjZXJ0J10uJGtleUZpbGVOYW1lOwogICAgICAgICAgICAgICAgJGNlcnRNZXRhZGF0YUZpbGUgPSAkdGhpcy0+X3BhdGhzWydjZXJ0J10uJGNlcnRGaWxlTmFtZTsKCiAgICAgICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCRrZXlNZXRhZGF0YUZpbGUpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAnU1AgUHJpdmF0ZSBrZXkgZmlsZSBub3QgZm91bmQ6ICVzJywKICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3I6OlBSSVZBVEVfS0VZX0ZJTEVfTk9UX0ZPVU5ELAogICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgka2V5TWV0YWRhdGFGaWxlKQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkY2VydE1ldGFkYXRhRmlsZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICdTUCBQdWJsaWMgY2VydCBmaWxlIG5vdCBmb3VuZDogJXMnLAogICAgICAgICAgICAgICAgICAgICAgICBFcnJvcjo6UFVCTElDX0NFUlRfRklMRV9OT1RfRk9VTkQsCiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCRjZXJ0TWV0YWRhdGFGaWxlKQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAka2V5TWV0YWRhdGEgPSBmaWxlX2dldF9jb250ZW50cygka2V5TWV0YWRhdGFGaWxlKTsKICAgICAgICAgICAgICAgICRjZXJ0TWV0YWRhdGEgPSBmaWxlX2dldF9jb250ZW50cygkY2VydE1ldGFkYXRhRmlsZSk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNzZXQoJHRoaXMtPl9zZWN1cml0eVsnc2lnbk1ldGFkYXRhJ11bJ3ByaXZhdGVLZXknXSkgJiYKICAgICAgICAgICAgICAgIGlzc2V0KCR0aGlzLT5fc2VjdXJpdHlbJ3NpZ25NZXRhZGF0YSddWyd4NTA5Y2VydCddKSkgewogICAgICAgICAgICAgICAgJGtleU1ldGFkYXRhID0gVXRpbHM6OmZvcm1hdFByaXZhdGVLZXkoJHRoaXMtPl9zZWN1cml0eVsnc2lnbk1ldGFkYXRhJ11bJ3ByaXZhdGVLZXknXSk7CiAgICAgICAgICAgICAgICAkY2VydE1ldGFkYXRhID0gVXRpbHM6OmZvcm1hdENlcnQoJHRoaXMtPl9zZWN1cml0eVsnc2lnbk1ldGFkYXRhJ11bJ3g1MDljZXJ0J10pOwogICAgICAgICAgICAgICAgaWYgKCEka2V5TWV0YWRhdGEpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICdQcml2YXRlIGtleSBub3QgZm91bmQuJywKICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3I6OlBSSVZBVEVfS0VZX0ZJTEVfTk9UX0ZPVU5ECiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoISRjZXJ0TWV0YWRhdGEpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICdQdWJsaWMgY2VydCBub3QgZm91bmQuJywKICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3I6OlBVQkxJQ19DRVJUX0ZJTEVfTk9UX0ZPVU5ECiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgICAgICAgICAgICAgICAnSW52YWxpZCBTZXR0aW5nOiBzaWduTWV0YWRhdGEgdmFsdWUgb2YgdGhlIHNwIGlzIG5vdCB2YWxpZCcsCiAgICAgICAgICAgICAgICAgICAgRXJyb3I6OlNFVFRJTkdTX0lOVkFMSURfU1lOVEFYCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHNpZ25hdHVyZUFsZ29yaXRobSA9ICR0aGlzLT5fc2VjdXJpdHlbJ3NpZ25hdHVyZUFsZ29yaXRobSddOwogICAgICAgICAgICAkZGlnZXN0QWxnb3JpdGhtID0gJHRoaXMtPl9zZWN1cml0eVsnZGlnZXN0QWxnb3JpdGhtJ107CiAgICAgICAgICAgICRtZXRhZGF0YSA9IE1ldGFkYXRhOjpzaWduTWV0YWRhdGEoJG1ldGFkYXRhLCAka2V5TWV0YWRhdGEsICRjZXJ0TWV0YWRhdGEsICRzaWduYXR1cmVBbGdvcml0aG0sICRkaWdlc3RBbGdvcml0aG0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG1ldGFkYXRhOwogICAgfQoKICAgIC8qKgogICAgICogVmFsaWRhdGVzIGFuIFhNTCBTUCBNZXRhZGF0YS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR4bWwgTWV0YWRhdGEncyBYTUwgdGhhdCB3aWxsIGJlIHZhbGlkYXRlCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBUaGUgbGlzdCBvZiBmb3VuZCBlcnJvcnMKICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWRhdGVNZXRhZGF0YSgkeG1sKQogICAgewogICAgICAgIGFzc2VydChpc19zdHJpbmcoJHhtbCkpOwoKICAgICAgICAkZXJyb3JzID0gYXJyYXkoKTsKICAgICAgICAkcmVzID0gVXRpbHM6OnZhbGlkYXRlWE1MKCR4bWwsICdzYW1sLXNjaGVtYS1tZXRhZGF0YS0yLjAueHNkJywgJHRoaXMtPl9kZWJ1ZywgJHRoaXMtPmdldFNjaGVtYXNQYXRoKCkpOwogICAgICAgIGlmICghJHJlcyBpbnN0YW5jZW9mIERPTURvY3VtZW50KSB7CiAgICAgICAgICAgICRlcnJvcnNbXSA9ICRyZXM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGRvbSA9ICRyZXM7CiAgICAgICAgICAgICRlbGVtZW50ID0gJGRvbS0+ZG9jdW1lbnRFbGVtZW50OwogICAgICAgICAgICBpZiAoJGVsZW1lbnQtPnRhZ05hbWUgIT09ICdtZDpFbnRpdHlEZXNjcmlwdG9yJykgewogICAgICAgICAgICAgICAgJGVycm9yc1tdID0gJ25vRW50aXR5RGVzY3JpcHRvcl94bWwnOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHZhbGlkVW50aWwgPSAkY2FjaGVEdXJhdGlvbiA9ICRleHBpcmVUaW1lID0gbnVsbDsKCiAgICAgICAgICAgICAgICBpZiAoJGVsZW1lbnQtPmhhc0F0dHJpYnV0ZSgndmFsaWRVbnRpbCcpKSB7CiAgICAgICAgICAgICAgICAgICAgJHZhbGlkVW50aWwgPSBVdGlsczo6cGFyc2VTQU1MMlRpbWUoJGVsZW1lbnQtPmdldEF0dHJpYnV0ZSgndmFsaWRVbnRpbCcpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgkZWxlbWVudC0+aGFzQXR0cmlidXRlKCdjYWNoZUR1cmF0aW9uJykpIHsKICAgICAgICAgICAgICAgICAgICAkY2FjaGVEdXJhdGlvbiA9ICRlbGVtZW50LT5nZXRBdHRyaWJ1dGUoJ2NhY2hlRHVyYXRpb24nKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkZXhwaXJlVGltZSA9IFV0aWxzOjpnZXRFeHBpcmVUaW1lKCRjYWNoZUR1cmF0aW9uLCAkdmFsaWRVbnRpbCk7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGV4cGlyZVRpbWUpICYmIHRpbWUoKSA+ICRleHBpcmVUaW1lKSB7CiAgICAgICAgICAgICAgICAgICAgJGVycm9yc1tdID0gJ2V4cGlyZWRfeG1sJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVE9ETzogU3VwcG9ydCBNZXRhZGF0YSBTaWduIFZhbGlkYXRpb24KCiAgICAgICAgcmV0dXJuICRlcnJvcnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBGb3JtYXRzIHRoZSBJZFAgY2VydC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZvcm1hdElkUENlcnQoKQogICAgewogICAgICAgIGlmIChpc3NldCgkdGhpcy0+X2lkcFsneDUwOWNlcnQnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9pZHBbJ3g1MDljZXJ0J10gPSBVdGlsczo6Zm9ybWF0Q2VydCgkdGhpcy0+X2lkcFsneDUwOWNlcnQnXSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRm9ybWF0cyB0aGUgTXVsdGlwbGUgSWRQIGNlcnRzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZm9ybWF0SWRQQ2VydE11bHRpKCkKICAgIHsKICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPl9pZHBbJ3g1MDljZXJ0TXVsdGknXSkpIHsKICAgICAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5faWRwWyd4NTA5Y2VydE11bHRpJ11bJ3NpZ25pbmcnXSkpIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR0aGlzLT5faWRwWyd4NTA5Y2VydE11bHRpJ11bJ3NpZ25pbmcnXSBhcyAkaSA9PiAkY2VydCkgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT5faWRwWyd4NTA5Y2VydE11bHRpJ11bJ3NpZ25pbmcnXVskaV0gPSBVdGlsczo6Zm9ybWF0Q2VydCgkY2VydCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5faWRwWyd4NTA5Y2VydE11bHRpJ11bJ2VuY3J5cHRpb24nXSkpIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR0aGlzLT5faWRwWyd4NTA5Y2VydE11bHRpJ11bJ2VuY3J5cHRpb24nXSBhcyAkaSA9PiAkY2VydCkgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT5faWRwWyd4NTA5Y2VydE11bHRpJ11bJ2VuY3J5cHRpb24nXVskaV0gPSBVdGlsczo6Zm9ybWF0Q2VydCgkY2VydCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBGb3JtYXRzIHRoZSBTUCBjZXJ0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZm9ybWF0U1BDZXJ0KCkKICAgIHsKICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPl9zcFsneDUwOWNlcnQnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9zcFsneDUwOWNlcnQnXSA9IFV0aWxzOjpmb3JtYXRDZXJ0KCR0aGlzLT5fc3BbJ3g1MDljZXJ0J10pOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEZvcm1hdHMgdGhlIFNQIGNlcnQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmb3JtYXRTUENlcnROZXcoKQogICAgewogICAgICAgIGlmIChpc3NldCgkdGhpcy0+X3NwWyd4NTA5Y2VydE5ldyddKSkgewogICAgICAgICAgICAkdGhpcy0+X3NwWyd4NTA5Y2VydE5ldyddID0gVXRpbHM6OmZvcm1hdENlcnQoJHRoaXMtPl9zcFsneDUwOWNlcnROZXcnXSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRm9ybWF0cyB0aGUgU1AgcHJpdmF0ZSBrZXkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmb3JtYXRTUEtleSgpCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5fc3BbJ3ByaXZhdGVLZXknXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9zcFsncHJpdmF0ZUtleSddID0gVXRpbHM6OmZvcm1hdFByaXZhdGVLZXkoJHRoaXMtPl9zcFsncHJpdmF0ZUtleSddKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IHdpdGggdGhlIGVycm9ycywgdGhlIGFycmF5IGlzIGVtcHR5IHdoZW4gdGhlIHNldHRpbmdzIGlzIG9rLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgRXJyb3JzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFcnJvcnMoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2Vycm9yczsKICAgIH0KCiAgICAvKioKICAgICAqIEFjdGl2YXRlcyBvciBkZWFjdGl2YXRlcyB0aGUgc3RyaWN0IG1vZGUuCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJHZhbHVlIFN0cmljdCBwYXJhbWV0ZXIKICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0U3RyaWN0KCR2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoIWlzX2Jvb2woJHZhbHVlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIHZhbHVlIHBhc3NlZCB0byBzZXRTdHJpY3QoKScpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPl9zdHJpY3QgPSAkdmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGlmIHRoZSAnc3RyaWN0JyBtb2RlIGlzIGFjdGl2ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgU3RyaWN0IHBhcmFtZXRlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNTdHJpY3QoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X3N0cmljdDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgaWYgdGhlIGRlYnVnIGlzIGFjdGl2ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgRGVidWcgcGFyYW1ldGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0RlYnVnQWN0aXZlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9kZWJ1ZzsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCBhIGJhc2V1cmwgdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYmFzZXVybCBCYXNlIFVSTC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEJhc2VVUkwoJGJhc2V1cmwpCiAgICB7CiAgICAgICAgJHRoaXMtPl9iYXNldXJsID0gJGJhc2V1cmw7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBiYXNldXJsIHNldCBvbiB0aGUgc2V0dGluZ3MgaWYgYW55LgogICAgICoKICAgICAqIEByZXR1cm4gbnVsbHxzdHJpbmcgVGhlIGJhc2V1cmwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEJhc2VVUkwoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2Jhc2V1cmw7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBJZFAgY2VydGlmaWNhdGUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY2VydCBJZFAgY2VydGlmaWNhdGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldElkUENlcnQoJGNlcnQpCiAgICB7CiAgICAgICAgJHRoaXMtPl9pZHBbJ3g1MDljZXJ0J10gPSAkY2VydDsKICAgICAgICAkdGhpcy0+Zm9ybWF0SWRQQ2VydCgpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/Utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHBocC1zYW1sLgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQHBhY2thZ2UgT25lTG9naW4KICogQGF1dGhvciAgU2l4dG8gTWFydGluIDxzaXh0by5tYXJ0aW4uZ2FyY2lhQGdtYWlsLmNvbT4KICogQGxpY2Vuc2UgTUlUIGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICogQGxpbmsgICAgaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwKICovCgpuYW1lc3BhY2UgT25lTG9naW5cU2FtbDI7Cgp1c2UgUm9iUmljaGFyZHNcWE1MU2VjTGlic1xYTUxTZWN1cml0eUtleTsKdXNlIFJvYlJpY2hhcmRzXFhNTFNlY0xpYnNcWE1MU2VjdXJpdHlEU2lnOwp1c2UgUm9iUmljaGFyZHNcWE1MU2VjTGlic1xYTUxTZWNFbmM7Cgp1c2UgRE9NRG9jdW1lbnQ7CnVzZSBET01FbGVtZW50Owp1c2UgRE9NTm9kZUxpc3Q7CnVzZSBEb21Ob2RlOwp1c2UgRE9NWFBhdGg7CnVzZSBFeGNlcHRpb247CgovKioKICogVXRpbHMgb2YgU0FNTCBQSFAgVG9vbGtpdAogKgogKiBEZWZpbmVzIHNldmVyYWwgb2Z0ZW4gdXNlZCBtZXRob2RzCiAqLwpjbGFzcyBVdGlscwp7CiAgICBjb25zdCBSRVNQT05TRV9TSUdOQVRVUkVfWFBBVEggPSAiL3NhbWxwOlJlc3BvbnNlL2RzOlNpZ25hdHVyZSI7CiAgICBjb25zdCBBU1NFUlRJT05fU0lHTkFUVVJFX1hQQVRIID0gIi9zYW1scDpSZXNwb25zZS9zYW1sOkFzc2VydGlvbi9kczpTaWduYXR1cmUiOwoKICAgIC8qKgogICAgICogQHZhciBib29sIENvbnRyb2wgaWYgdGhlIGBGb3J3YXJkZWQtRm9yLSpgIGhlYWRlcnMgYXJlIHVzZWQKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJF9wcm94eVZhcnMgPSBmYWxzZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJF9ob3N0OwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkX3Byb3RvY29sOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJF9wcm90b2NvbFJlZ2V4ID0gJ0BeaHR0cHM/Oi8vQGknOwoKICAgIC8qKgogICAgICogQHZhciBpbnR8bnVsbAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkX3BvcnQ7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljICRfYmFzZXVybHBhdGg7CgogICAgLyoqCiAgICAgKiBUaGlzIGZ1bmN0aW9uIGxvYWQgYW4gWE1MIHN0cmluZyBpbiBhIHNhdmUgd2F5LgogICAgICogUHJldmVudCBYRUUvWFhFIEF0dGFja3MKICAgICAqCiAgICAgKiBAcGFyYW0gRE9NRG9jdW1lbnQgJGRvbSBUaGUgZG9jdW1lbnQgd2hlcmUgbG9hZCB0aGUgeG1sLgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICR4bWwgVGhlIFhNTCBzdHJpbmcgdG8gYmUgbG9hZGVkLgogICAgICoKICAgICAqIEByZXR1cm4gRE9NRG9jdW1lbnR8ZmFsc2UgJGRvbSBUaGUgcmVzdWx0IG9mIGxvYWQgdGhlIFhNTCBhdCB0aGUgRE9NRG9jdW1lbnQKICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxvYWRYTUwoRE9NRG9jdW1lbnQgJGRvbSwgJHhtbCkKICAgIHsKICAgICAgICBhc3NlcnQoJGRvbSBpbnN0YW5jZW9mIERPTURvY3VtZW50KTsKICAgICAgICBhc3NlcnQoaXNfc3RyaW5nKCR4bWwpKTsKCiAgICAgICAgJG9sZEVudGl0eUxvYWRlciA9IG51bGw7CiAgICAgICAgaWYgKFBIUF9WRVJTSU9OX0lEIDwgODAwMDApIHsKICAgICAgICAgICAgJG9sZEVudGl0eUxvYWRlciA9IGxpYnhtbF9kaXNhYmxlX2VudGl0eV9sb2FkZXIodHJ1ZSk7CiAgICAgICAgfQoKICAgICAgICAkcmVzID0gJGRvbS0+bG9hZFhNTCgkeG1sKTsKCiAgICAgICAgaWYgKFBIUF9WRVJTSU9OX0lEIDwgODAwMDApIHsKICAgICAgICAgICAgbGlieG1sX2Rpc2FibGVfZW50aXR5X2xvYWRlcigkb2xkRW50aXR5TG9hZGVyKTsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCRkb20tPmNoaWxkTm9kZXMgYXMgJGNoaWxkKSB7CiAgICAgICAgICAgIGlmICgkY2hpbGQtPm5vZGVUeXBlID09PSBYTUxfRE9DVU1FTlRfVFlQRV9OT0RFKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICdEZXRlY3RlZCB1c2Ugb2YgRE9DVFlQRS9FTlRJVFkgaW4gWE1MLCBkaXNhYmxlZCB0byBwcmV2ZW50IFhYRS9YRUUgYXR0YWNrcycKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghJHJlcykgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICRkb207CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBmdW5jdGlvbiBhdHRlbXB0cyB0byB2YWxpZGF0ZSBhbiBYTUwgc3RyaW5nIGFnYWluc3QgdGhlIHNwZWNpZmllZCBzY2hlbWEuCiAgICAgKgogICAgICogSXQgd2lsbCBwYXJzZSB0aGUgc3RyaW5nIGludG8gYSBET01Eb2N1bWVudCBhbmQgdmFsaWRhdGUgdGhpcyBkb2N1bWVudCBhZ2FpbnN0IHRoZSBzY2hlbWEuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xET01Eb2N1bWVudCAkeG1sICAgIFRoZSBYTUwgc3RyaW5nIG9yIGRvY3VtZW50IHdoaWNoIHNob3VsZCBiZSB2YWxpZGF0ZWQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICRzY2hlbWEgVGhlIHNjaGVtYSBmaWxlbmFtZSB3aGljaCBzaG91bGQgYmUgdXNlZC4KICAgICAqIEBwYXJhbSBib29sICAgICAgICAgICAgICAgJGRlYnVnICBUbyBkaXNhYmxlL2VuYWJsZSB0aGUgZGVidWcgbW9kZQogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAkc2NoZW1hUGF0aCBDaGFuZ2Ugc2NoZW1hIHBhdGgKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xET01Eb2N1bWVudCAkZG9tICBzdHJpbmcgdGhhdCBleHBsYWlucyB0aGUgcHJvYmxlbSBvciB0aGUgRE9NRG9jdW1lbnQKICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHZhbGlkYXRlWE1MKCR4bWwsICRzY2hlbWEsICRkZWJ1ZyA9IGZhbHNlLCAkc2NoZW1hUGF0aCA9IG51bGwpCiAgICB7CiAgICAgICAgYXNzZXJ0KGlzX3N0cmluZygkeG1sKSB8fCAkeG1sIGluc3RhbmNlb2YgRE9NRG9jdW1lbnQpOwogICAgICAgIGFzc2VydChpc19zdHJpbmcoJHNjaGVtYSkpOwoKICAgICAgICBsaWJ4bWxfY2xlYXJfZXJyb3JzKCk7CiAgICAgICAgbGlieG1sX3VzZV9pbnRlcm5hbF9lcnJvcnModHJ1ZSk7CgogICAgICAgIGlmICgkeG1sIGluc3RhbmNlb2YgRE9NRG9jdW1lbnQpIHsKICAgICAgICAgICAgJGRvbSA9ICR4bWw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGRvbSA9IG5ldyBET01Eb2N1bWVudDsKICAgICAgICAgICAgJGRvbSA9IHNlbGY6OmxvYWRYTUwoJGRvbSwgJHhtbCk7CiAgICAgICAgICAgIGlmICghJGRvbSkgewogICAgICAgICAgICAgICAgcmV0dXJuICd1bmxvYWRlZF94bWwnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJHNjaGVtYVBhdGgpKSB7CiAgICAgICAgICAgICRzY2hlbWFGaWxlID0gJHNjaGVtYVBhdGggLiAkc2NoZW1hOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRzY2hlbWFGaWxlID0gX19ESVJfXyAuICcvc2NoZW1hcy8nIC4gJHNjaGVtYTsKICAgICAgICB9CgogICAgICAgICRvbGRFbnRpdHlMb2FkZXIgPSBudWxsOwogICAgICAgIGlmIChQSFBfVkVSU0lPTl9JRCA8IDgwMDAwKSB7CiAgICAgICAgICAgICRvbGRFbnRpdHlMb2FkZXIgPSBsaWJ4bWxfZGlzYWJsZV9lbnRpdHlfbG9hZGVyKGZhbHNlKTsKICAgICAgICB9CiAgICAgICAgJHJlcyA9ICRkb20tPnNjaGVtYVZhbGlkYXRlKCRzY2hlbWFGaWxlKTsKICAgICAgICBpZiAoUEhQX1ZFUlNJT05fSUQgPCA4MDAwMCkgewogICAgICAgICAgICBsaWJ4bWxfZGlzYWJsZV9lbnRpdHlfbG9hZGVyKCRvbGRFbnRpdHlMb2FkZXIpOwogICAgICAgIH0KICAgICAgICBpZiAoISRyZXMpIHsKICAgICAgICAgICAgJHhtbEVycm9ycyA9IGxpYnhtbF9nZXRfZXJyb3JzKCk7CiAgICAgICAgICAgIHN5c2xvZyhMT0dfSU5GTywgJ0Vycm9yIHZhbGlkYXRpbmcgdGhlIG1ldGFkYXRhOiAnLnZhcl9leHBvcnQoJHhtbEVycm9ycywgdHJ1ZSkpOwoKICAgICAgICAgICAgaWYgKCRkZWJ1ZykgewogICAgICAgICAgICAgICAgZm9yZWFjaCAoJHhtbEVycm9ycyBhcyAkZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICBlY2hvIGh0bWxlbnRpdGllcygkZXJyb3ItPm1lc3NhZ2UpLiJcbiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICdpbnZhbGlkX3htbCc7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGRvbTsKICAgIH0KCiAgICAvKioKICAgICAqIEltcG9ydCBhIG5vZGUgdHJlZSBpbnRvIGEgdGFyZ2V0IGRvY3VtZW50CiAgICAgKiBDb3B5IGl0IGJlZm9yZSBhIHJlZmVyZW5jZSBub2RlIGFzIGEgc2libGluZwogICAgICogYW5kIGF0IHRoZSBlbmQgb2YgdGhlIGNvcHkgcmVtb3ZlCiAgICAgKiB0aGUgcmVmZXJlbmNlIG5vZGUgaW4gdGhlIHRhcmdldCBkb2N1bWVudAogICAgICogQXMgaXQgd2VyZSAncmVwbGFjaW5nJyBpdAogICAgICogTGVhdmluZyBuZXN0ZWQgZGVmYXVsdCBuYW1lc3BhY2VzIGFsb25lCiAgICAgKiAoU3RhbmRhcmQgaW1wb3J0Tm9kZSB3aXRoIGRlZXAgY29weQogICAgICogIG1hbmdsZXMgbmVzdGVkIGRlZmF1bHQgbmFtZXNwYWNlcykKICAgICAqCiAgICAgKiBUaGUgcmVmZXJlbmNlIG5vZGUgbXVzdCBub3QgYmUgYSBEb21Eb2N1bWVudAogICAgICogSXQgQ0FOIGJlIHRoZSB0b3AgZWxlbWVudCBvZiBhIGRvY3VtZW50CiAgICAgKiBSZXR1cm5zIHRoZSBjb3BpZWQgbm9kZSBpbiB0aGUgdGFyZ2V0IGRvY3VtZW50CiAgICAgKgogICAgICogQHBhcmFtIERvbU5vZGUgJHRhcmdldE5vZGUKICAgICAqIEBwYXJhbSBEb21Ob2RlICRzb3VyY2VOb2RlCiAgICAgKiBAcGFyYW0gYm9vbCAkcmVjdXJzZQogICAgICogQHJldHVybiBET01Ob2RlCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRyZWVDb3B5UmVwbGFjZShEb21Ob2RlICR0YXJnZXROb2RlLCBEb21Ob2RlICRzb3VyY2VOb2RlLCAkcmVjdXJzZSA9IGZhbHNlKQogICAgewogICAgICAgIGlmICgkdGFyZ2V0Tm9kZS0+cGFyZW50Tm9kZSA9PT0gbnVsbCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbGxlZ2FsIGFyZ3VtZW50IHRhcmdldE5vZGUuIEl0IGhhcyBubyBwYXJlbnROb2RlLicpOwogICAgICAgIH0KICAgICAgICAkY2xvbmVkTm9kZSA9ICR0YXJnZXROb2RlLT5vd25lckRvY3VtZW50LT5pbXBvcnROb2RlKCRzb3VyY2VOb2RlLCBmYWxzZSk7CiAgICAgICAgaWYgKCRyZWN1cnNlKSB7CiAgICAgICAgICAgICRyZXN1bHROb2RlID0gJHRhcmdldE5vZGUtPmFwcGVuZENoaWxkKCRjbG9uZWROb2RlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcmVzdWx0Tm9kZSA9ICR0YXJnZXROb2RlLT5wYXJlbnROb2RlLT5pbnNlcnRCZWZvcmUoJGNsb25lZE5vZGUsICR0YXJnZXROb2RlKTsKICAgICAgICB9CiAgICAgICAgaWYgKCRzb3VyY2VOb2RlLT5jaGlsZE5vZGVzICE9PSBudWxsKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRzb3VyY2VOb2RlLT5jaGlsZE5vZGVzIGFzICRjaGlsZCkgewogICAgICAgICAgICAgICAgc2VsZjo6dHJlZUNvcHlSZXBsYWNlKCRyZXN1bHROb2RlLCAkY2hpbGQsIHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghJHJlY3Vyc2UpIHsKICAgICAgICAgICAgJHRhcmdldE5vZGUtPnBhcmVudE5vZGUtPnJlbW92ZUNoaWxkKCR0YXJnZXROb2RlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyZXN1bHROb2RlOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHg1MDkgY2VydCAoYWRkaW5nIGhlYWRlciAmIGZvb3RlciBpZiByZXF1aXJlZCkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkeDUwOWNlcnQgIEEgeDUwOSB1bmZvcm1hdGVkIGNlcnQKICAgICAqIEBwYXJhbSBib29sICAgJGhlYWRzICAgICBUcnVlIGlmIHdlIHdhbnQgdG8gaW5jbHVkZSBoZWFkIGFuZCBmb290ZXIKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyAkeDUwOSBGb3JtYXR0ZWQgY2VydAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZvcm1hdENlcnQoJHg1MDljZXJ0LCAkaGVhZHMgPSB0cnVlKQogICAgewogICAgICAgIGlmIChpc19udWxsKCR4NTA5Y2VydCkpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmIChzdHJwb3MoJHg1MDljZXJ0LCAnLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tJykgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICR4NTA5Y2VydCA9IHN0YXRpYzo6Z2V0U3RyaW5nQmV0d2VlbigkeDUwOWNlcnQsICctLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0nLCAnLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLScpOwogICAgICAgIH0KCiAgICAgICAgJHg1MDljZXJ0ID0gc3RyX3JlcGxhY2UoWyJceDBkIiwgIlxyIiwgIlxuIiwgIiAiXSwgJycsICR4NTA5Y2VydCk7CgogICAgICAgIGlmICgkaGVhZHMgJiYgJHg1MDljZXJ0ICE9PSAnJykgewogICAgICAgICAgICAkeDUwOWNlcnQgPSAiLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tXG4iLmNodW5rX3NwbGl0KCR4NTA5Y2VydCwgNjQsICJcbiIpLiItLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tXG4iOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR4NTA5Y2VydDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBwcml2YXRlIGtleSAoYWRkaW5nIGhlYWRlciAmIGZvb3RlciBpZiByZXF1aXJlZCkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5ICAgQSBwcml2YXRlIGtleQogICAgICogQHBhcmFtIGJvb2wgICAkaGVhZHMgVHJ1ZSBpZiB3ZSB3YW50IHRvIGluY2x1ZGUgaGVhZCBhbmQgZm9vdGVyCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgJHJzYUtleSBGb3JtYXR0ZWQgcHJpdmF0ZSBrZXkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmb3JtYXRQcml2YXRlS2V5KCRrZXksICRoZWFkcyA9IHRydWUpCiAgICB7CiAgICAgICAgaWYgKGlzX251bGwoJGtleSkpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICRrZXkgPSBzdHJfcmVwbGFjZShhcnJheSgiXHgwRCIsICJcciIsICJcbiIpLCAiIiwgJGtleSk7CiAgICAgICAgaWYgKCFlbXB0eSgka2V5KSkgewogICAgICAgICAgICBpZiAoc3RycG9zKCRrZXksICctLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS0nKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICRrZXkgPSBVdGlsczo6Z2V0U3RyaW5nQmV0d2Vlbigka2V5LCAnLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tJywgJy0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0nKTsKICAgICAgICAgICAgICAgICRrZXkgPSBzdHJfcmVwbGFjZSgnICcsICcnLCAka2V5KTsKCiAgICAgICAgICAgICAgICBpZiAoJGhlYWRzKSB7CiAgICAgICAgICAgICAgICAgICAgJGtleSA9ICItLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS1cbiIuY2h1bmtfc3BsaXQoJGtleSwgNjQsICJcbiIpLiItLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tXG4iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKHN0cnBvcygka2V5LCAnLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLScpICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgJGtleSA9IFV0aWxzOjpnZXRTdHJpbmdCZXR3ZWVuKCRrZXksICctLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tJywgJy0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tJyk7CiAgICAgICAgICAgICAgICAka2V5ID0gc3RyX3JlcGxhY2UoJyAnLCAnJywgJGtleSk7CgogICAgICAgICAgICAgICAgaWYgKCRoZWFkcykgewogICAgICAgICAgICAgICAgICAgICRrZXkgPSAiLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLVxuIi5jaHVua19zcGxpdCgka2V5LCA2NCwgIlxuIikuIi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tXG4iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGtleSA9IHN0cl9yZXBsYWNlKCcgJywgJycsICRrZXkpOwoKICAgICAgICAgICAgICAgIGlmICgkaGVhZHMpIHsKICAgICAgICAgICAgICAgICAgICAka2V5ID0gIi0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS1cbiIuY2h1bmtfc3BsaXQoJGtleSwgNjQsICJcbiIpLiItLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLVxuIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJGtleTsKICAgIH0KCiAgICAvKioKICAgICAqIEV4dHJhY3RzIGEgc3Vic3RyaW5nIGJldHdlZW4gMiBtYXJrcwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0ciAgIFRoZSB0YXJnZXQgc3RyaW5nCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdGFydCBUaGUgaW5pdGlhbCBtYXJrCiAgICAgKiBAcGFyYW0gc3RyaW5nICRlbmQgICBUaGUgZW5kIG1hcmsKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBBIHN1YnN0cmluZyBvciBhbiBlbXB0eSBzdHJpbmcgaWYgaXMgbm90IGFibGUgdG8gZmluZCB0aGUgbWFya3MKICAgICAqICAgICAgICAgICAgICAgIG9yIGlmIHRoZXJlIGlzIG5vIHN0cmluZyBiZXR3ZWVuIHRoZSBtYXJrcwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFN0cmluZ0JldHdlZW4oJHN0ciwgJHN0YXJ0LCAkZW5kKQogICAgewogICAgICAgICRzdHIgPSAnICcgLiAkc3RyOwogICAgICAgICRpbmkgPSBzdHJwb3MoJHN0ciwgJHN0YXJ0KTsKCiAgICAgICAgaWYgKCRpbmkgPT0gMCkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQoKICAgICAgICAkaW5pICs9IHN0cmxlbigkc3RhcnQpOwogICAgICAgICRsZW4gPSBzdHJwb3MoJHN0ciwgJGVuZCwgJGluaSkgLSAkaW5pOwogICAgICAgIHJldHVybiBzdWJzdHIoJHN0ciwgJGluaSwgJGxlbik7CiAgICB9CgogICAgLyoqCiAgICAgKiBFeGVjdXRlcyBhIHJlZGlyZWN0aW9uIHRvIHRoZSBwcm92aWRlZCB1cmwgKG9yIHJldHVybiB0aGUgdGFyZ2V0IHVybCkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdXJsICAgICAgICBUaGUgdGFyZ2V0IHVybAogICAgICogQHBhcmFtIGFycmF5ICAkcGFyYW1ldGVycyBFeHRyYSBwYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCBhcyBwYXJ0IG9mIHRoZSB1cmwKICAgICAqIEBwYXJhbSBib29sICAgJHN0YXkgICAgICAgVHJ1ZSBpZiB3ZSB3YW50IHRvIHN0YXkgKHJldHVybnMgdGhlIHVybCBzdHJpbmcpIEZhbHNlIHRvIHJlZGlyZWN0CiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCAkdXJsCiAgICAgKiBAcGhwc3Rhbi1yZXR1cm4gKCRzdGF5IGlzIHRydWUgPyBzdHJpbmcgOiBuZXZlcikKICAgICAqCiAgICAgKiBAdGhyb3dzIEVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVkaXJlY3QoJHVybCwgYXJyYXkgJHBhcmFtZXRlcnMgPSBhcnJheSgpLCAkc3RheSA9IGZhbHNlKQogICAgewogICAgICAgIGFzc2VydChpc19zdHJpbmcoJHVybCkpOwoKICAgICAgICBpZiAoc3Vic3RyKCR1cmwsIDAsIDEpID09PSAnLycpIHsKICAgICAgICAgICAgJHVybCA9IHNlbGY6OmdldFNlbGZVUkxob3N0KCkgLiAkdXJsOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogVmVyaWZ5IHRoYXQgdGhlIFVSTCBtYXRjaGVzIHRoZSByZWdleCBmb3IgdGhlIHByb3RvY29sLgogICAgICAgICAqIEJ5IGRlZmF1bHQgdGhpcyB3aWxsIGNoZWNrIGZvciBodHRwIGFuZCBodHRwcwogICAgICAgICAqLwogICAgICAgIGlmIChpc3NldChzZWxmOjokX3Byb3RvY29sUmVnZXgpKSB7CiAgICAgICAgICAgICRwcm90b2NvbCA9IHNlbGY6OiRfcHJvdG9jb2xSZWdleDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcHJvdG9jb2wgPSAiIjsKICAgICAgICB9CiAgICAgICAgJHdyb25nUHJvdG9jb2wgPSAhcHJlZ19tYXRjaCgkcHJvdG9jb2wsICR1cmwpOwogICAgICAgICR1cmwgPSBmaWx0ZXJfdmFyKCR1cmwsIEZJTFRFUl9WQUxJREFURV9VUkwpOwogICAgICAgIGlmICgkd3JvbmdQcm90b2NvbCB8fCBlbXB0eSgkdXJsKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICAgICAgICAgICAnUmVkaXJlY3QgdG8gaW52YWxpZCBVUkw6ICcgLiAkdXJsLAogICAgICAgICAgICAgICAgRXJyb3I6OlJFRElSRUNUX0lOVkFMSURfVVJMCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAvKiBBZGQgZW5jb2RlZCBwYXJhbWV0ZXJzICovCiAgICAgICAgaWYgKHN0cnBvcygkdXJsLCAnPycpID09PSBmYWxzZSkgewogICAgICAgICAgICAkcGFyYW1QcmVmaXggPSAnPyc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHBhcmFtUHJlZml4ID0gJyYnOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoJHBhcmFtZXRlcnMgYXMgJG5hbWUgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgIGlmICgkdmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICRwYXJhbSA9IHVybGVuY29kZSgkbmFtZSk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNfYXJyYXkoJHZhbHVlKSkgewogICAgICAgICAgICAgICAgJHBhcmFtID0gIiI7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkdmFsdWUgYXMgJHZhbCkgewogICAgICAgICAgICAgICAgICAgICRwYXJhbSAuPSB1cmxlbmNvZGUoJG5hbWUpIC4gIltdPSIgLiB1cmxlbmNvZGUoJHZhbCkuICcmJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJHBhcmFtKSkgewogICAgICAgICAgICAgICAgICAgICRwYXJhbSA9IHN1YnN0cigkcGFyYW0sIDAsIC0xKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRwYXJhbSA9IHVybGVuY29kZSgkbmFtZSkgLiAnPScgLiB1cmxlbmNvZGUoJHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCFlbXB0eSgkcGFyYW0pKSB7CiAgICAgICAgICAgICAgICAkdXJsIC49ICRwYXJhbVByZWZpeCAuICRwYXJhbTsKICAgICAgICAgICAgICAgICRwYXJhbVByZWZpeCA9ICcmJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCRzdGF5KSB7CiAgICAgICAgICAgIHJldHVybiAkdXJsOwogICAgICAgIH0KCiAgICAgICAgaGVhZGVyKCdQcmFnbWE6IG5vLWNhY2hlJyk7CiAgICAgICAgaGVhZGVyKCdDYWNoZS1Db250cm9sOiBuby1jYWNoZSwgbXVzdC1yZXZhbGlkYXRlJyk7CiAgICAgICAgaGVhZGVyKCdMb2NhdGlvbjogJyAuICR1cmwpOwogICAgICAgIGV4aXQoKTsKICAgIH0KCiAgICAgLyoqCiAgICAgKiBAcGFyYW0gJHByb3RvY29sUmVnZXggc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0UHJvdG9jb2xSZWdleCgkcHJvdG9jb2xSZWdleCkKICAgIHsKICAgICAgICBpZiAoIWVtcHR5KCRwcm90b2NvbFJlZ2V4KSkgewogICAgICAgICAgICBzZWxmOjokX3Byb3RvY29sUmVnZXggPSAkcHJvdG9jb2xSZWdleDsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIEJhc2UgVVJMIHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJhc2V1cmwgVGhlIGJhc2UgdXJsIHRvIGJlIHVzZWQgd2hlbiBjb25zdHJ1Y3RpbmcgVVJMcwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldEJhc2VVUkwoJGJhc2V1cmwpCiAgICB7CiAgICAgICAgaWYgKCFlbXB0eSgkYmFzZXVybCkpIHsKICAgICAgICAgICAgJGJhc2V1cmxwYXRoID0gJy8nOwogICAgICAgICAgICAkbWF0Y2hlcyA9IGFycmF5KCk7CiAgICAgICAgICAgIGlmIChwcmVnX21hdGNoKCcjXmh0dHBzPzovLyhbXi9dKikvPyguKikjaScsICRiYXNldXJsLCAkbWF0Y2hlcykpIHsKICAgICAgICAgICAgICAgIGlmIChzdHJwb3MoJGJhc2V1cmwsICdodHRwczovLycpID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgIHNlbGY6OnNldFNlbGZQcm90b2NvbCgnaHR0cCcpOwogICAgICAgICAgICAgICAgICAgICRwb3J0ID0gJzgwJzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc2VsZjo6c2V0U2VsZlByb3RvY29sKCdodHRwcycpOwogICAgICAgICAgICAgICAgICAgICRwb3J0ID0gJzQ0Myc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGN1cnJlbnRIb3N0ID0gJG1hdGNoZXNbMV07CiAgICAgICAgICAgICAgICBpZiAoZmFsc2UgIT09IHN0cnBvcygkY3VycmVudEhvc3QsICc6JykpIHsKICAgICAgICAgICAgICAgICAgICBsaXN0KCRjdXJyZW50SG9zdCwgJHBvc3NpYmxlUG9ydCkgPSBleHBsb2RlKCc6JywgJG1hdGNoZXNbMV0sIDIpOwogICAgICAgICAgICAgICAgICAgIGlmIChpc19udW1lcmljKCRwb3NzaWJsZVBvcnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRwb3J0ID0gJHBvc3NpYmxlUG9ydDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRtYXRjaGVzWzJdKSAmJiAhZW1wdHkoJG1hdGNoZXNbMl0pKSB7CiAgICAgICAgICAgICAgICAgICAgJGJhc2V1cmxwYXRoID0gJG1hdGNoZXNbMl07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc2VsZjo6c2V0U2VsZkhvc3QoJGN1cnJlbnRIb3N0KTsKICAgICAgICAgICAgICAgIHNlbGY6OnNldFNlbGZQb3J0KCRwb3J0KTsKICAgICAgICAgICAgICAgIHNlbGY6OnNldEJhc2VVUkxQYXRoKCRiYXNldXJscGF0aCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgc2VsZjo6JF9ob3N0ID0gbnVsbDsKICAgICAgICAgICAgICAgIHNlbGY6OiRfcHJvdG9jb2wgPSBudWxsOwogICAgICAgICAgICAgICAgc2VsZjo6JF9wb3J0ID0gbnVsbDsKICAgICAgICAgICAgICAgIHNlbGY6OiRfYmFzZXVybHBhdGggPSBudWxsOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBib29sICRwcm94eVZhcnMgV2hldGhlciB0byB1c2UgYFgtRm9yd2FyZGVkLSpgIGhlYWRlcnMgdG8gZGV0ZXJtaW5lIHBvcnQvZG9tYWluL3Byb3RvY29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0UHJveHlWYXJzKCRwcm94eVZhcnMpCiAgICB7CiAgICAgICAgc2VsZjo6JF9wcm94eVZhcnMgPSAoYm9vbCkkcHJveHlWYXJzOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UHJveHlWYXJzKCkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6JF9wcm94eVZhcnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBwcm90b2NvbCArIHRoZSBjdXJyZW50IGhvc3QgKyB0aGUgcG9ydCAoaWYgZGlmZmVyZW50IHRoYW4KICAgICAqIGNvbW1vbiBwb3J0cykuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIFVSTAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFNlbGZVUkxob3N0KCkKICAgIHsKICAgICAgICAkY3VycmVudGhvc3QgPSBzZWxmOjpnZXRTZWxmSG9zdCgpOwoKICAgICAgICAkcG9ydCA9ICcnOwoKICAgICAgICBpZiAoc2VsZjo6aXNIVFRQUygpKSB7CiAgICAgICAgICAgICRwcm90b2NvbCA9ICdodHRwcyc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHByb3RvY29sID0gJ2h0dHAnOwogICAgICAgIH0KCiAgICAgICAgJHBvcnRudW1iZXIgPSBzZWxmOjpnZXRTZWxmUG9ydCgpOwoKICAgICAgICBpZiAoaXNzZXQoJHBvcnRudW1iZXIpICYmICgkcG9ydG51bWJlciAhPSAnODAnKSAmJiAoJHBvcnRudW1iZXIgIT0gJzQ0MycpKSB7CiAgICAgICAgICAgICRwb3J0ID0gJzonIC4gJHBvcnRudW1iZXI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHByb3RvY29sLiI6Ly8iIC4gJGN1cnJlbnRob3N0IC4gJHBvcnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRob3N0IFRoZSBob3N0IHRvIHVzZSB3aGVuIGNvbnN0cnVjdGluZyBVUkxzCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0U2VsZkhvc3QoJGhvc3QpCiAgICB7CiAgICAgICAgc2VsZjo6JF9ob3N0ID0gJGhvc3Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiYXNldXJscGF0aCBUaGUgYmFzZXVybCBwYXRoIHRvIHVzZSB3aGVuIGNvbnN0cnVjdGluZyBVUkxzCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0QmFzZVVSTFBhdGgoJGJhc2V1cmxwYXRoKQogICAgewogICAgICAgIGlmIChlbXB0eSgkYmFzZXVybHBhdGgpKSB7CiAgICAgICAgICAgIHNlbGY6OiRfYmFzZXVybHBhdGggPSBudWxsOwogICAgICAgIH0gZWxzZSBpZiAoJGJhc2V1cmxwYXRoID09ICcvJykgewogICAgICAgICAgICBzZWxmOjokX2Jhc2V1cmxwYXRoID0gJy8nOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNlbGY6OiRfYmFzZXVybHBhdGggPSAnLycgLiB0cmltKCRiYXNldXJscGF0aCwgJy8nKSAuICcvJzsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgYmFzZXVybHBhdGggdG8gYmUgdXNlZCB3aGVuIGNvbnN0cnVjdGluZyBVUkxzCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0QmFzZVVSTFBhdGgoKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjokX2Jhc2V1cmxwYXRoOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIHJhdyBob3N0IG5hbWUKICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRSYXdIb3N0KCkKICAgIHsKICAgICAgICBpZiAoc2VsZjo6JF9ob3N0KSB7CiAgICAgICAgICAgICRjdXJyZW50SG9zdCA9IHNlbGY6OiRfaG9zdDsKICAgICAgICB9IGVsc2VpZiAoc2VsZjo6Z2V0UHJveHlWYXJzKCkgJiYgYXJyYXlfa2V5X2V4aXN0cygnSFRUUF9YX0ZPUldBUkRFRF9IT1NUJywgJF9TRVJWRVIpKSB7CiAgICAgICAgICAgICRjdXJyZW50SG9zdCA9IGV4cGxvZGUoJywnLCAkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9IT1NUJ10pWzBdOwogICAgICAgIH0gZWxzZWlmIChhcnJheV9rZXlfZXhpc3RzKCdIVFRQX0hPU1QnLCAkX1NFUlZFUikpIHsKICAgICAgICAgICAgJGN1cnJlbnRIb3N0ID0gJF9TRVJWRVJbJ0hUVFBfSE9TVCddOwogICAgICAgIH0gZWxzZWlmIChhcnJheV9rZXlfZXhpc3RzKCdTRVJWRVJfTkFNRScsICRfU0VSVkVSKSkgewogICAgICAgICAgICAkY3VycmVudEhvc3QgPSAkX1NFUlZFUlsnU0VSVkVSX05BTUUnXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdnZXRob3N0bmFtZScpKSB7CiAgICAgICAgICAgICAgICAkY3VycmVudEhvc3QgPSBnZXRob3N0bmFtZSgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGN1cnJlbnRIb3N0ID0gcGhwX3VuYW1lKCJuIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRjdXJyZW50SG9zdDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJHBvcnQgVGhlIHBvcnQgbnVtYmVyIHRvIHVzZSB3aGVuIGNvbnN0cnVjdGluZyBVUkxzCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0U2VsZlBvcnQoJHBvcnQpCiAgICB7CiAgICAgICAgc2VsZjo6JF9wb3J0ID0gJHBvcnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwcm90b2NvbCBUaGUgcHJvdG9jb2wgdG8gaWRlbnRpZnkgYXMgdXNpbmcsIHVzdWFsbHkgaHR0cCBvciBodHRwcwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldFNlbGZQcm90b2NvbCgkcHJvdG9jb2wpCiAgICB7CiAgICAgICAgc2VsZjo6JF9wcm90b2NvbCA9ICRwcm90b2NvbDsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nIGh0dHB8aHR0cHMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRTZWxmUHJvdG9jb2woKQogICAgewogICAgICAgICRwcm90b2NvbCA9ICdodHRwJzsKICAgICAgICBpZiAoc2VsZjo6JF9wcm90b2NvbCkgewogICAgICAgICAgICAkcHJvdG9jb2wgPSBzZWxmOjokX3Byb3RvY29sOwogICAgICAgIH0gZWxzZWlmIChzZWxmOjpnZXRTZWxmUG9ydCgpID09IDQ0MykgewogICAgICAgICAgICAkcHJvdG9jb2wgPSAnaHR0cHMnOwogICAgICAgIH0gZWxzZWlmIChzZWxmOjpnZXRQcm94eVZhcnMoKSAmJiBpc3NldCgkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddKSkgewogICAgICAgICAgICAkcHJvdG9jb2wgPSAkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddOwogICAgICAgIH0gZWxzZWlmICghZW1wdHkoJF9TRVJWRVJbJ0hUVFBTJ10pICYmICRfU0VSVkVSWydIVFRQUyddICE9PSAnb2ZmJykgewogICAgICAgICAgICAkcHJvdG9jb2wgPSAnaHR0cHMnOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHByb3RvY29sOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgY3VycmVudCBob3N0LgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nICRjdXJyZW50SG9zdCBUaGUgY3VycmVudCBob3N0CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0U2VsZkhvc3QoKQogICAgewogICAgICAgICRjdXJyZW50SG9zdCA9IHNlbGY6OmdldFJhd0hvc3QoKTsKCiAgICAgICAgLy8gc3RyaXAgdGhlIHBvcnQKICAgICAgICBpZiAoZmFsc2UgIT09IHN0cnBvcygkY3VycmVudEhvc3QsICc6JykpIHsKICAgICAgICAgICAgbGlzdCgkY3VycmVudEhvc3QsICRwb3J0KSA9IGV4cGxvZGUoJzonLCAkY3VycmVudEhvc3QsIDIpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRjdXJyZW50SG9zdDsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbnVsbHxzdHJpbmcgVGhlIHBvcnQgbnVtYmVyIHVzZWQgZm9yIHRoZSByZXF1ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0U2VsZlBvcnQoKQogICAgewogICAgICAgICRwb3J0bnVtYmVyID0gbnVsbDsKICAgICAgICBpZiAoc2VsZjo6JF9wb3J0KSB7CiAgICAgICAgICAgICRwb3J0bnVtYmVyID0gc2VsZjo6JF9wb3J0OwogICAgICAgIH0gZWxzZSBpZiAoc2VsZjo6Z2V0UHJveHlWYXJzKCkgJiYgaXNzZXQoJF9TRVJWRVJbIkhUVFBfWF9GT1JXQVJERURfUE9SVCJdKSkgewogICAgICAgICAgICAkcG9ydG51bWJlciA9ICRfU0VSVkVSWyJIVFRQX1hfRk9SV0FSREVEX1BPUlQiXTsKICAgICAgICB9IGVsc2UgaWYgKGlzc2V0KCRfU0VSVkVSWyJTRVJWRVJfUE9SVCJdKSkgewogICAgICAgICAgICAkcG9ydG51bWJlciA9ICRfU0VSVkVSWyJTRVJWRVJfUE9SVCJdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRjdXJyZW50SG9zdCA9IHNlbGY6OmdldFJhd0hvc3QoKTsKCiAgICAgICAgICAgIC8vIHN0cmlwIHRoZSBwb3J0CiAgICAgICAgICAgIGlmIChmYWxzZSAhPT0gc3RycG9zKCRjdXJyZW50SG9zdCwgJzonKSkgewogICAgICAgICAgICAgICAgbGlzdCgkY3VycmVudEhvc3QsICRwb3J0KSA9IGV4cGxvZGUoJzonLCAkY3VycmVudEhvc3QsIDIpOwogICAgICAgICAgICAgICAgaWYgKGlzX251bWVyaWMoJHBvcnQpKSB7CiAgICAgICAgICAgICAgICAgICAgJHBvcnRudW1iZXIgPSAkcG9ydDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJHBvcnRudW1iZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgaHR0cHMgb3IgaHR0cC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgJGlzSHR0cHMgRmFsc2UgaWYgaHR0cHMgaXMgbm90IGFjdGl2ZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzSFRUUFMoKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjpnZXRTZWxmUHJvdG9jb2woKSA9PSAnaHR0cHMnOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgVVJMIG9mIHRoZSBjdXJyZW50IGhvc3QgKyBjdXJyZW50IHZpZXcuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRTZWxmVVJMTm9RdWVyeSgpCiAgICB7CiAgICAgICAgJHNlbGZVUkxOb1F1ZXJ5ID0gc2VsZjo6Z2V0U2VsZlVSTGhvc3QoKTsKCiAgICAgICAgJGluZm9XaXRoQmFzZVVSTFBhdGggPSBzZWxmOjpidWlsZFdpdGhCYXNlVVJMUGF0aCgkX1NFUlZFUlsnU0NSSVBUX05BTUUnXSk7CiAgICAgICAgaWYgKCFlbXB0eSgkaW5mb1dpdGhCYXNlVVJMUGF0aCkpIHsKICAgICAgICAgICAgJHNlbGZVUkxOb1F1ZXJ5IC49ICRpbmZvV2l0aEJhc2VVUkxQYXRoOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRzZWxmVVJMTm9RdWVyeSAuPSAkX1NFUlZFUlsnU0NSSVBUX05BTUUnXTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkX1NFUlZFUlsnUEFUSF9JTkZPJ10pKSB7CiAgICAgICAgICAgICRzZWxmVVJMTm9RdWVyeSAuPSAkX1NFUlZFUlsnUEFUSF9JTkZPJ107CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHNlbGZVUkxOb1F1ZXJ5OwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcm91dGVkIFVSTCBvZiB0aGUgY3VycmVudCBob3N0ICsgY3VycmVudCB2aWV3LgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0U2VsZlJvdXRlZFVSTE5vUXVlcnkoKQogICAgewogICAgICAgICRzZWxmVVJMaG9zdCA9IHNlbGY6OmdldFNlbGZVUkxob3N0KCk7CiAgICAgICAgJHJvdXRlID0gJyc7CgogICAgICAgIGlmICghZW1wdHkoJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10pKSB7CiAgICAgICAgICAgICRyb3V0ZSA9ICRfU0VSVkVSWydSRVFVRVNUX1VSSSddOwogICAgICAgICAgICBpZiAoIWVtcHR5KCRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXSkpIHsKICAgICAgICAgICAgICAgICRyb3V0ZSA9IHNlbGY6OnN0ckxyZXBsYWNlKCRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXSwgJycsICRyb3V0ZSk7CiAgICAgICAgICAgICAgICBpZiAoc3Vic3RyKCRyb3V0ZSwgLTEpID09ICc/JykgewogICAgICAgICAgICAgICAgICAgICRyb3V0ZSA9IHN1YnN0cigkcm91dGUsIDAsIC0xKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJGluZm9XaXRoQmFzZVVSTFBhdGggPSBzZWxmOjpidWlsZFdpdGhCYXNlVVJMUGF0aCgkcm91dGUpOwogICAgICAgIGlmICghZW1wdHkoJGluZm9XaXRoQmFzZVVSTFBhdGgpKSB7CiAgICAgICAgICAgICRyb3V0ZSA9ICRpbmZvV2l0aEJhc2VVUkxQYXRoOwogICAgICAgIH0KCiAgICAgICAgJHNlbGZSb3V0ZWRVUkxOb1F1ZXJ5ID0gJHNlbGZVUkxob3N0IC4gJHJvdXRlOwoKICAgICAgICAkcG9zID0gc3RycG9zKCRzZWxmUm91dGVkVVJMTm9RdWVyeSwgIj8iKTsKICAgICAgICBpZiAoJHBvcyAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgJHNlbGZSb3V0ZWRVUkxOb1F1ZXJ5ID0gc3Vic3RyKCRzZWxmUm91dGVkVVJMTm9RdWVyeSwgMCwgJHBvcyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHNlbGZSb3V0ZWRVUkxOb1F1ZXJ5OwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RyTHJlcGxhY2UoJHNlYXJjaCwgJHJlcGxhY2UsICRzdWJqZWN0KQogICAgewogICAgICAgICRwb3MgPSBzdHJycG9zKCRzdWJqZWN0LCAkc2VhcmNoKTsKCiAgICAgICAgaWYgKCRwb3MgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICRzdWJqZWN0ID0gc3Vic3RyX3JlcGxhY2UoJHN1YmplY3QsICRyZXBsYWNlLCAkcG9zLCBzdHJsZW4oJHNlYXJjaCkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRzdWJqZWN0OwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgVVJMIG9mIHRoZSBjdXJyZW50IGhvc3QgKyBjdXJyZW50IHZpZXcgKyBxdWVyeS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFNlbGZVUkwoKQogICAgewogICAgICAgICRzZWxmVVJMaG9zdCA9IHNlbGY6OmdldFNlbGZVUkxob3N0KCk7CgogICAgICAgICRyZXF1ZXN0VVJJID0gJyc7CiAgICAgICAgaWYgKCFlbXB0eSgkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSkpIHsKICAgICAgICAgICAgJHJlcXVlc3RVUkkgPSAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXTsKICAgICAgICAgICAgJG1hdGNoZXMgPSBhcnJheSgpOwogICAgICAgICAgICBpZiAoJHJlcXVlc3RVUklbMF0gIT09ICcvJyAmJiBwcmVnX21hdGNoKCcjXmh0dHBzPzovL1teL10qKC8uKikjaScsICRyZXF1ZXN0VVJJLCAkbWF0Y2hlcykpIHsKICAgICAgICAgICAgICAgICRyZXF1ZXN0VVJJID0gJG1hdGNoZXNbMV07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRpbmZvV2l0aEJhc2VVUkxQYXRoID0gc2VsZjo6YnVpbGRXaXRoQmFzZVVSTFBhdGgoJHJlcXVlc3RVUkkpOwogICAgICAgIGlmICghZW1wdHkoJGluZm9XaXRoQmFzZVVSTFBhdGgpKSB7CiAgICAgICAgICAgICRyZXF1ZXN0VVJJID0gJGluZm9XaXRoQmFzZVVSTFBhdGg7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHNlbGZVUkxob3N0IC4gJHJlcXVlc3RVUkk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBwYXJ0IG9mIHRoZSBVUkwgd2l0aCB0aGUgQmFzZVVSTFBhdGguCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaW5mbyBDb250YWlucyBwYXRoIGluZm8KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGJ1aWxkV2l0aEJhc2VVUkxQYXRoKCRpbmZvKQogICAgewogICAgICAgICRyZXN1bHQgPSAnJzsKICAgICAgICAkYmFzZVVSTFBhdGggPSBzZWxmOjpnZXRCYXNlVVJMUGF0aCgpOwogICAgICAgIGlmICghZW1wdHkoJGJhc2VVUkxQYXRoKSkgewogICAgICAgICAgICAkcmVzdWx0ID0gJGJhc2VVUkxQYXRoOwogICAgICAgICAgICBpZiAoIWVtcHR5KCRpbmZvKSkgewogICAgICAgICAgICAgICAgJGV4dHJhY3RlZEluZm8gPSAkaW5mbzsKICAgICAgICAgICAgICAgIGlmICgkYmFzZVVSTFBhdGggIT0gJy8nKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGJhc2UgcGF0aCBmcm9tIHRoZSBwYXRoIGluZm8uCiAgICAgICAgICAgICAgICAgICAgJGV4dHJhY3RlZEluZm8gPSBzdHJfcmVwbGFjZSgkYmFzZVVSTFBhdGgsICcnLCAkaW5mbyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgc3RhcnRpbmcgYW5kIGVuZGluZyBzbGFzaC4KICAgICAgICAgICAgICAgICRleHRyYWN0ZWRJbmZvID0gdHJpbSgkZXh0cmFjdGVkSW5mbywgJy8nKTsKICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJGV4dHJhY3RlZEluZm8pKSB7CiAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAkZXh0cmFjdGVkSW5mbzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICAvKioKICAgICAqIEV4dHJhY3QgYSBxdWVyeSBwYXJhbSAtIGFzIGl0IHdhcyBzZW50IC0gZnJvbSAkX1NFUlZFUltRVUVSWV9TVFJJTkddCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgcGFyYW0gdG8tYmUgZXh0cmFjdGVkCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBleHRyYWN0T3JpZ2luYWxRdWVyeVBhcmFtKCRuYW1lKQogICAgewogICAgICAgIGlmICghaXNzZXQoJF9TRVJWRVJbJ1FVRVJZX1NUUklORyddKSB8fCBlbXB0eSgkX1NFUlZFUlsnUVVFUllfU1RSSU5HJ10pKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CgogICAgICAgICRpbmRleCA9IHN0cnBvcygkX1NFUlZFUlsnUVVFUllfU1RSSU5HJ10sICRuYW1lLic9Jyk7CiAgICAgICAgJHN1YnN0cmluZyA9IHN1YnN0cigkX1NFUlZFUlsnUVVFUllfU1RSSU5HJ10sICRpbmRleCArIHN0cmxlbigkbmFtZSkgKyAxKTsKICAgICAgICAkZW5kID0gc3RycG9zKCRzdWJzdHJpbmcsICcmJyk7CiAgICAgICAgcmV0dXJuICRlbmQgPyBzdWJzdHIoJHN1YnN0cmluZywgMCwgc3RycG9zKCRzdWJzdHJpbmcsICcmJykpIDogJHN1YnN0cmluZzsKICAgIH0KCiAgICAvKioKICAgICAqIEdlbmVyYXRlcyBhbiB1bmlxdWUgc3RyaW5nICh1c2VkIGZvciBleGFtcGxlIGFzIElEIGZvciBhc3NlcnRpb25zKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyAgQSB1bmlxdWUgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2VuZXJhdGVVbmlxdWVJRCgpCiAgICB7CiAgICAgICAgcmV0dXJuICdPTkVMT0dJTl8nIC4gc2hhMShyYW5kb21fYnl0ZXMoMjApKTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnZlcnRzIGEgVU5JWCB0aW1lc3RhbXAgdG8gU0FNTDIgdGltZXN0YW1wIG9uIHRoZSBmb3JtCiAgICAgKiB5eXl5LW1tLWRkVGhoOm1tOnNzKFwucyspP1ouCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xpbnQgJHRpbWUgVGhlIHRpbWUgd2Ugc2hvdWxkIGNvbnZlcnQgKERhdGVUaW1lKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyAkdGltZXN0YW1wIFNBTUwyIHRpbWVzdGFtcC4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZVRpbWUyU0FNTCgkdGltZSkKICAgIHsKICAgICAgICAkZGF0ZSA9IG5ldyBcRGF0ZVRpbWUoIkAkdGltZSIsIG5ldyBcRGF0ZVRpbWVab25lKCdVVEMnKSk7CiAgICAgICAgJHRpbWVzdGFtcCA9ICRkYXRlLT5mb3JtYXQoIlktbS1kXFRIOmk6c1xaIik7CiAgICAgICAgcmV0dXJuICR0aW1lc3RhbXA7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyBhIFNBTUwyIHRpbWVzdGFtcCBvbiB0aGUgZm9ybSB5eXl5LW1tLWRkVGhoOm1tOnNzKFwucyspP1oKICAgICAqIHRvIGEgVU5JWCB0aW1lc3RhbXAuIFRoZSBzdWItc2Vjb25kIHBhcnQgaXMgaWdub3JlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0aW1lIFRoZSB0aW1lIHdlIHNob3VsZCBjb252ZXJ0IChTQU1MIFRpbWVzdGFtcCkuCiAgICAgKgogICAgICogQHJldHVybiBpbnQgJHRpbWVzdGFtcCAgQ29udmVydGVkIHRvIGEgdW5peCB0aW1lc3RhbXAuCiAgICAgKgogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZVNBTUwyVGltZSgkdGltZSkKICAgIHsKICAgICAgICBpZiAoZW1wdHkoJHRpbWUpKSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICRtYXRjaGVzID0gYXJyYXkoKTsKCiAgICAgICAgLyogV2UgdXNlIGEgdmVyeSBzdHJpY3QgcmVnZXggdG8gcGFyc2UgdGhlIHRpbWVzdGFtcC4gKi8KICAgICAgICAkZXhwMSA9ICcvXihcXGRcXGRcXGRcXGQpLShcXGRcXGQpLShcXGRcXGQpJzsKICAgICAgICAkZXhwMiA9ICdUKFxcZFxcZCk6KFxcZFxcZCk6KFxcZFxcZCkoPzpcXC5cXGQrKT9aJC9EJzsKICAgICAgICBpZiAocHJlZ19tYXRjaCgkZXhwMSAuICRleHAyLCAkdGltZSwgJG1hdGNoZXMpID09IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdJbnZhbGlkIFNBTUwyIHRpbWVzdGFtcCBwYXNzZWQgdG8nIC4KICAgICAgICAgICAgICAgICcgcGFyc2VTQU1MMlRpbWU6ICcgLiAkdGltZQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgLyogRXh0cmFjdCB0aGUgZGlmZmVyZW50IGNvbXBvbmVudHMgb2YgdGhlIHRpbWUgZnJvbSB0aGUKICAgICAgICAgKiBtYXRjaGVzIGluIHRoZSByZWdleC4gaW50IGNhc3Qgd2lsbCBpZ25vcmUgbGVhZGluZyB6ZXJvZXMKICAgICAgICAgKiBpbiB0aGUgc3RyaW5nLgogICAgICAgICAqLwogICAgICAgICR5ZWFyID0gKGludCkgJG1hdGNoZXNbMV07CiAgICAgICAgJG1vbnRoID0gKGludCkgJG1hdGNoZXNbMl07CiAgICAgICAgJGRheSA9IChpbnQpICRtYXRjaGVzWzNdOwogICAgICAgICRob3VyID0gKGludCkgJG1hdGNoZXNbNF07CiAgICAgICAgJG1pbnV0ZSA9IChpbnQpICRtYXRjaGVzWzVdOwogICAgICAgICRzZWNvbmQgPSAoaW50KSAkbWF0Y2hlc1s2XTsKCiAgICAgICAgLyogV2UgdXNlIGdtbWt0aW1lIGJlY2F1c2UgdGhlIHRpbWVzdGFtcCB3aWxsIGFsd2F5cyBiZSBnaXZlbgogICAgICAgICAqIGluIFVUQy4KICAgICAgICAgKi8KICAgICAgICAkdHMgPSBnbW1rdGltZSgkaG91ciwgJG1pbnV0ZSwgJHNlY29uZCwgJG1vbnRoLCAkZGF5LCAkeWVhcik7CgogICAgICAgIHJldHVybiAkdHM7CiAgICB9CgoKICAgIC8qKgogICAgICogSW50ZXJwcmV0cyBhIElTTzg2MDEgZHVyYXRpb24gdmFsdWUgcmVsYXRpdmUgdG8gYSBnaXZlbiB0aW1lc3RhbXAuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICRkdXJhdGlvbiAgVGhlIGR1cmF0aW9uLCBhcyBhIHN0cmluZy4KICAgICAqIEBwYXJhbSBpbnR8bnVsbCAkdGltZXN0YW1wIFRoZSB1bml4IHRpbWVzdGFtcCB3ZSBzaG91bGQgYXBwbHkgdGhlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiB0by4gT3B0aW9uYWwsIGRlZmF1bHQgdG8gdGhlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50IHRpbWUuCiAgICAgKgogICAgICogQHJldHVybiBpbnQgVGhlIG5ldyB0aW1lc3RhbXAsIGFmdGVyIHRoZSBkdXJhdGlvbiBpcyBhcHBsaWVkLgogICAgICoKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcGFyc2VEdXJhdGlvbigkZHVyYXRpb24sICR0aW1lc3RhbXAgPSBudWxsKQogICAgewogICAgICAgIGFzc2VydChpc19zdHJpbmcoJGR1cmF0aW9uKSk7CiAgICAgICAgYXNzZXJ0KGlzX251bGwoJHRpbWVzdGFtcCkgfHwgaXNfaW50KCR0aW1lc3RhbXApKTsKCiAgICAgICAgJG1hdGNoZXMgPSBhcnJheSgpOwoKICAgICAgICAvKiBQYXJzZSB0aGUgZHVyYXRpb24uIFdlIHVzZSBhIHZlcnkgc3RyaWN0IHBhdHRlcm4uICovCiAgICAgICAgJGR1cmF0aW9uUmVnRXggPSAnI14oLT8pUCg/Oig/Oig/OihcXGQrKVkpPyg/OihcXGQrKU0pPyg/OihcXGQrKUQpPyg/OlQoPzooXFxkKylIKT8oPzooXFxkKylNKT8oPzooXFxkKylTKT8pPyl8KD86KFxcZCspVykpJCNEJzsKICAgICAgICBpZiAoIXByZWdfbWF0Y2goJGR1cmF0aW9uUmVnRXgsICRkdXJhdGlvbiwgJG1hdGNoZXMpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0ludmFsaWQgSVNPIDg2MDEgZHVyYXRpb246ICcgLiAkZHVyYXRpb24pOwogICAgICAgIH0KCiAgICAgICAgJGR1clllYXJzID0gKGVtcHR5KCRtYXRjaGVzWzJdKSA/IDAgOiAoaW50KSRtYXRjaGVzWzJdKTsKICAgICAgICAkZHVyTW9udGhzID0gKGVtcHR5KCRtYXRjaGVzWzNdKSA/IDAgOiAoaW50KSRtYXRjaGVzWzNdKTsKICAgICAgICAkZHVyRGF5cyA9IChlbXB0eSgkbWF0Y2hlc1s0XSkgPyAwIDogKGludCkkbWF0Y2hlc1s0XSk7CiAgICAgICAgJGR1ckhvdXJzID0gKGVtcHR5KCRtYXRjaGVzWzVdKSA/IDAgOiAoaW50KSRtYXRjaGVzWzVdKTsKICAgICAgICAkZHVyTWludXRlcyA9IChlbXB0eSgkbWF0Y2hlc1s2XSkgPyAwIDogKGludCkkbWF0Y2hlc1s2XSk7CiAgICAgICAgJGR1clNlY29uZHMgPSAoZW1wdHkoJG1hdGNoZXNbN10pID8gMCA6IChpbnQpJG1hdGNoZXNbN10pOwogICAgICAgICRkdXJXZWVrcyA9IChlbXB0eSgkbWF0Y2hlc1s4XSkgPyAwIDogKGludCkkbWF0Y2hlc1s4XSk7CgogICAgICAgIGlmICghZW1wdHkoJG1hdGNoZXNbMV0pKSB7CiAgICAgICAgICAgIC8qIE5lZ2F0aXZlICovCiAgICAgICAgICAgICRkdXJZZWFycyA9IC0kZHVyWWVhcnM7CiAgICAgICAgICAgICRkdXJNb250aHMgPSAtJGR1ck1vbnRoczsKICAgICAgICAgICAgJGR1ckRheXMgPSAtJGR1ckRheXM7CiAgICAgICAgICAgICRkdXJIb3VycyA9IC0kZHVySG91cnM7CiAgICAgICAgICAgICRkdXJNaW51dGVzID0gLSRkdXJNaW51dGVzOwogICAgICAgICAgICAkZHVyU2Vjb25kcyA9IC0kZHVyU2Vjb25kczsKICAgICAgICAgICAgJGR1cldlZWtzID0gLSRkdXJXZWVrczsKICAgICAgICB9CgogICAgICAgIGlmICgkdGltZXN0YW1wID09PSBudWxsKSB7CiAgICAgICAgICAgICR0aW1lc3RhbXAgPSB0aW1lKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGR1clllYXJzICE9PSAwIHx8ICRkdXJNb250aHMgIT09IDApIHsKICAgICAgICAgICAgLyogU3BlY2lhbCBoYW5kbGluZyBvZiBtb250aHMgYW5kIHllYXJzLCBzaW5jZSB0aGV5IGFyZW4ndCBhIHNwZWNpZmljIGludGVydmFsLCBidXQKICAgICAgICAgICAgICogaW5zdGVhZCBkZXBlbmQgb24gdGhlIGN1cnJlbnQgdGltZS4KICAgICAgICAgICAgICovCgogICAgICAgICAgICAvKiBXZSBuZWVkIHRoZSB5ZWFyIGFuZCBtb250aCBmcm9tIHRoZSB0aW1lc3RhbXAuIFVuZm9ydHVuYXRlbHksIFBIUCBkb2Vzbid0IGhhdmUgdGhlCiAgICAgICAgICAgICAqIGdtdGltZSBmdW5jdGlvbi4gSW5zdGVhZCB3ZSB1c2UgdGhlIGdtZGF0ZSBmdW5jdGlvbiwgYW5kIHNwbGl0IHRoZSByZXN1bHQuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICAkeWVhcm1vbnRoID0gZXhwbG9kZSgnOicsIGdtZGF0ZSgnWTpuJywgJHRpbWVzdGFtcCkpOwogICAgICAgICAgICAkeWVhciA9IChpbnQpJHllYXJtb250aFswXTsKICAgICAgICAgICAgJG1vbnRoID0gKGludCkkeWVhcm1vbnRoWzFdOwoKICAgICAgICAgICAgLyogUmVtb3ZlIHRoZSB5ZWFyIGFuZCBtb250aCBmcm9tIHRoZSB0aW1lc3RhbXAuICovCiAgICAgICAgICAgICR0aW1lc3RhbXAgLT0gZ21ta3RpbWUoMCwgMCwgMCwgJG1vbnRoLCAxLCAkeWVhcik7CgogICAgICAgICAgICAvKiBBZGQgeWVhcnMgYW5kIG1vbnRocywgYW5kIG5vcm1hbGl6ZSB0aGUgbnVtYmVycyBhZnRlcndhcmRzLiAqLwogICAgICAgICAgICAkeWVhciArPSAkZHVyWWVhcnM7CiAgICAgICAgICAgICRtb250aCArPSAkZHVyTW9udGhzOwogICAgICAgICAgICB3aGlsZSAoJG1vbnRoID4gMTIpIHsKICAgICAgICAgICAgICAgICR5ZWFyICs9IDE7CiAgICAgICAgICAgICAgICAkbW9udGggLT0gMTI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd2hpbGUgKCRtb250aCA8IDEpIHsKICAgICAgICAgICAgICAgICR5ZWFyIC09IDE7CiAgICAgICAgICAgICAgICAkbW9udGggKz0gMTI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qIEFkZCB5ZWFyIGFuZCBtb250aCBiYWNrIGludG8gdGltZXN0YW1wLiAqLwogICAgICAgICAgICAkdGltZXN0YW1wICs9IGdtbWt0aW1lKDAsIDAsIDAsICRtb250aCwgMSwgJHllYXIpOwogICAgICAgIH0KCiAgICAgICAgLyogQWRkIHRoZSBvdGhlciBlbGVtZW50cy4gKi8KICAgICAgICAkdGltZXN0YW1wICs9ICRkdXJXZWVrcyAqIDcgKiAyNCAqIDYwICogNjA7CiAgICAgICAgJHRpbWVzdGFtcCArPSAkZHVyRGF5cyAqIDI0ICogNjAgKiA2MDsKICAgICAgICAkdGltZXN0YW1wICs9ICRkdXJIb3VycyAqIDYwICogNjA7CiAgICAgICAgJHRpbWVzdGFtcCArPSAkZHVyTWludXRlcyAqIDYwOwogICAgICAgICR0aW1lc3RhbXAgKz0gJGR1clNlY29uZHM7CgogICAgICAgIHJldHVybiAkdGltZXN0YW1wOwogICAgfQoKICAgIC8qKgogICAgICogQ29tcGFyZXMgMiBkYXRlcyBhbmQgcmV0dXJucyB0aGUgZWFybGllc3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICAgICAkY2FjaGVEdXJhdGlvbiBUaGUgZHVyYXRpb24sIGFzIGEgc3RyaW5nLgogICAgICogQHBhcmFtIHN0cmluZ3xpbnR8bnVsbCAkdmFsaWRVbnRpbCAgICBUaGUgdmFsaWQgdW50aWwgZGF0ZSwgYXMgYSBzdHJpbmcgb3IgYXMgYSB0aW1lc3RhbXAKICAgICAqCiAgICAgKiBAcmV0dXJuIGludHxudWxsICRleHBpcmVUaW1lICBUaGUgZXhwaXJhdGlvbiB0aW1lLgogICAgICogQHBocHN0YW4tcmV0dXJuICgkY2FjaGVEdXJhdGlvbiBpcyB0cnVlID8gc3RyaW5nIDogbmV2ZXIpCiAgICAgKgogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRFeHBpcmVUaW1lKCRjYWNoZUR1cmF0aW9uID0gbnVsbCwgJHZhbGlkVW50aWwgPSBudWxsKQogICAgewogICAgICAgICRleHBpcmVUaW1lID0gbnVsbDsKCiAgICAgICAgaWYgKCRjYWNoZUR1cmF0aW9uICE9PSBudWxsKSB7CiAgICAgICAgICAgICRleHBpcmVUaW1lID0gc2VsZjo6cGFyc2VEdXJhdGlvbigkY2FjaGVEdXJhdGlvbiwgdGltZSgpKTsKICAgICAgICB9CgogICAgICAgIGlmICgkdmFsaWRVbnRpbCAhPT0gbnVsbCkgewogICAgICAgICAgICBpZiAoaXNfaW50KCR2YWxpZFVudGlsKSkgewogICAgICAgICAgICAgICAgJHZhbGlkVW50aWxUaW1lID0gJHZhbGlkVW50aWw7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdmFsaWRVbnRpbFRpbWUgPSBzZWxmOjpwYXJzZVNBTUwyVGltZSgkdmFsaWRVbnRpbCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRleHBpcmVUaW1lID09PSBudWxsIHx8ICRleHBpcmVUaW1lID4gJHZhbGlkVW50aWxUaW1lKSB7CiAgICAgICAgICAgICAgICAkZXhwaXJlVGltZSA9ICR2YWxpZFVudGlsVGltZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRleHBpcmVUaW1lOwogICAgfQoKCiAgICAvKioKICAgICAqIEV4dHJhY3RzIG5vZGVzIGZyb20gdGhlIERPTURvY3VtZW50LgogICAgICoKICAgICAqIEBwYXJhbSBET01Eb2N1bWVudCAgICAgICRkb20gICAgIFRoZSBET01Eb2N1bWVudAogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgJHF1ZXJ5ICAgXFhwYXRoIEV4cHJlc3Npb24KICAgICAqIEBwYXJhbSBET01FbGVtZW50fG51bGwgICRjb250ZXh0IENvbnRleHQgTm9kZSAoRE9NRWxlbWVudCkKICAgICAqCiAgICAgKiBAcmV0dXJuIERPTU5vZGVMaXN0IFRoZSBxdWVyaWVkIG5vZGVzCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcXVlcnkoRE9NRG9jdW1lbnQgJGRvbSwgJHF1ZXJ5LCA/RE9NRWxlbWVudCAkY29udGV4dCA9IG51bGwpCiAgICB7CiAgICAgICAgJHhwYXRoID0gbmV3IERPTVhQYXRoKCRkb20pOwogICAgICAgICR4cGF0aC0+cmVnaXN0ZXJOYW1lc3BhY2UoJ3NhbWxwJywgQ29uc3RhbnRzOjpOU19TQU1MUCk7CiAgICAgICAgJHhwYXRoLT5yZWdpc3Rlck5hbWVzcGFjZSgnc2FtbCcsIENvbnN0YW50czo6TlNfU0FNTCk7CiAgICAgICAgJHhwYXRoLT5yZWdpc3Rlck5hbWVzcGFjZSgnZHMnLCBDb25zdGFudHM6Ok5TX0RTKTsKICAgICAgICAkeHBhdGgtPnJlZ2lzdGVyTmFtZXNwYWNlKCd4ZW5jJywgQ29uc3RhbnRzOjpOU19YRU5DKTsKICAgICAgICAkeHBhdGgtPnJlZ2lzdGVyTmFtZXNwYWNlKCd4c2knLCBDb25zdGFudHM6Ok5TX1hTSSk7CiAgICAgICAgJHhwYXRoLT5yZWdpc3Rlck5hbWVzcGFjZSgneHMnLCBDb25zdGFudHM6Ok5TX1hTKTsKICAgICAgICAkeHBhdGgtPnJlZ2lzdGVyTmFtZXNwYWNlKCdtZCcsIENvbnN0YW50czo6TlNfTUQpOwoKICAgICAgICBpZiAoaXNzZXQoJGNvbnRleHQpKSB7CiAgICAgICAgICAgICRyZXMgPSAkeHBhdGgtPnF1ZXJ5KCRxdWVyeSwgJGNvbnRleHQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRyZXMgPSAkeHBhdGgtPnF1ZXJ5KCRxdWVyeSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmVzOwogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2tzIGlmIHRoZSBzZXNzaW9uIGlzIHN0YXJ0ZWQgb3Igbm90LgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIGlmIHRoZSBzZXNzw61vbiBpcyBzdGFydGVkCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNTZXNzaW9uU3RhcnRlZCgpCiAgICB7CiAgICAgICAgaWYgKFBIUF9WRVJTSU9OX0lEID49IDUwNDAwKSB7CiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uX3N0YXR1cygpID09PSBQSFBfU0VTU0lPTl9BQ1RJVkUgPyB0cnVlIDogZmFsc2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHNlc3Npb25faWQoKSA9PT0gJycgPyBmYWxzZSA6IHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRGVsZXRlcyB0aGUgbG9jYWwgc2Vzc2lvbi4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWxldGVMb2NhbFNlc3Npb24oKQogICAgewogICAgICAgIGlmIChVdGlsczo6aXNTZXNzaW9uU3RhcnRlZCgpKSB7CiAgICAgICAgICAgIHNlc3Npb25fdW5zZXQoKTsKICAgICAgICAgICAgc2Vzc2lvbl9kZXN0cm95KCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJF9TRVNTSU9OID0gYXJyYXkoKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBDYWxjdWxhdGVzIHRoZSBmaW5nZXJwcmludCBvZiBhIHg1MDljZXJ0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHg1MDljZXJ0IHg1MDkgY2VydCBmb3JtYXR0ZWQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFsZyAgICAgIEFsZ29yaXRobSB0byBiZSB1c2VkIGluIG9yZGVyIHRvIGNhbGN1bGF0ZSB0aGUgZmluZ2VycHJpbnQKICAgICAqCiAgICAgKiBAcmV0dXJuIG51bGx8c3RyaW5nIEZvcm1hdHRlZCBmaW5nZXJwcmludAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhbGN1bGF0ZVg1MDlGaW5nZXJwcmludCgkeDUwOWNlcnQsICRhbGcgPSAnc2hhMScpCiAgICB7CiAgICAgICAgYXNzZXJ0KGlzX3N0cmluZygkeDUwOWNlcnQpKTsKCiAgICAgICAgJGFyQ2VydCA9IGV4cGxvZGUoIlxuIiwgJHg1MDljZXJ0KTsKICAgICAgICAkZGF0YSA9ICcnOwogICAgICAgICRpbkRhdGEgPSBmYWxzZTsKCiAgICAgICAgZm9yZWFjaCAoJGFyQ2VydCBhcyAkY3VyRGF0YSkgewogICAgICAgICAgICBpZiAoISAkaW5EYXRhKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RybmNtcCgkY3VyRGF0YSwgJy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUnLCAyMikgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICRpbkRhdGEgPSB0cnVlOwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKChzdHJuY21wKCRjdXJEYXRhLCAnLS0tLS1CRUdJTiBQVUJMSUMgS0VZJywgMjEpID09IDApIHx8IChzdHJuY21wKCRjdXJEYXRhLCAnLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVknLCAyNikgPT0gMCkpIHsKICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIGlzbid0IGFuIFg1MDkgY2VydGlmaWNhdGUuICovCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoc3RybmNtcCgkY3VyRGF0YSwgJy0tLS0tRU5EIENFUlRJRklDQVRFJywgMjApID09IDApIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChpc3NldCgkY3VyRGF0YSkpIHsKICAgICAgICAgICAgICAgICAgICAkY3VyRGF0YSA9IHRyaW0oJGN1ckRhdGEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGRhdGEgLj0gJGN1ckRhdGE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChlbXB0eSgkZGF0YSkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAkZGVjb2RlZERhdGEgPSBiYXNlNjRfZGVjb2RlKCRkYXRhKTsKCiAgICAgICAgc3dpdGNoICgkYWxnKSB7CiAgICAgICAgICAgIGNhc2UgJ3NoYTUxMic6CiAgICAgICAgICAgIGNhc2UgJ3NoYTM4NCc6CiAgICAgICAgICAgIGNhc2UgJ3NoYTI1Nic6CiAgICAgICAgICAgICAgICAkZmluZ2VycHJpbnQgPSBoYXNoKCRhbGcsICRkZWNvZGVkRGF0YSwgZmFsc2UpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3NoYTEnOgogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgJGZpbmdlcnByaW50ID0gc3RydG9sb3dlcihzaGExKCRkZWNvZGVkRGF0YSkpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkZmluZ2VycHJpbnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBGb3JtYXRlcyBhIGZpbmdlcnByaW50LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbmdlcnByaW50IGZpbmdlcnByaW50CiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgRm9ybWF0dGVkIGZpbmdlcnByaW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZm9ybWF0RmluZ2VyUHJpbnQoJGZpbmdlcnByaW50KQogICAgewogICAgICAgIGlmIChpc19udWxsKCRmaW5nZXJwcmludCkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAkZm9ybWF0ZWRGaW5nZXJwcmludCA9IHN0cl9yZXBsYWNlKCc6JywgJycsICRmaW5nZXJwcmludCk7CiAgICAgICAgJGZvcm1hdGVkRmluZ2VycHJpbnQgPSBzdHJ0b2xvd2VyKCRmb3JtYXRlZEZpbmdlcnByaW50KTsKICAgICAgICByZXR1cm4gJGZvcm1hdGVkRmluZ2VycHJpbnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZW5lcmF0ZXMgYSBuYW1lSUQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICR2YWx1ZSAgZmluZ2VycHJpbnQKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAkc3BucSAgIFNQIE5hbWUgUXVhbGlmaWVyCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGZvcm1hdCBTUCBGb3JtYXQKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkY2VydCAgIElkUCBQdWJsaWMgY2VydCB0byBlbmNyeXB0IHRoZSBuYW1lSUQKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkbnEgICAgIElkUCBOYW1lIFF1YWxpZmllcgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRlbmNBbGcgRW5jcnlwdGlvbiBhbGdvcml0aG0KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyAkbmFtZUlERWxlbWVudCBET01FbGVtZW50IHwgWE1MU2VjIG5hbWVJRAogICAgICoKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2VuZXJhdGVOYW1lSWQoJHZhbHVlLCAkc3BucSwgJGZvcm1hdCA9IG51bGwsICRjZXJ0ID0gbnVsbCwgJG5xID0gbnVsbCwgJGVuY0FsZyA9IFhNTFNlY3VyaXR5S2V5OjpBRVMxMjhfQ0JDKQogICAgewoKICAgICAgICAkZG9jID0gbmV3IERPTURvY3VtZW50KCk7CgogICAgICAgICRuYW1lSWQgPSAkZG9jLT5jcmVhdGVFbGVtZW50KCdzYW1sOk5hbWVJRCcpOwogICAgICAgIGlmIChpc3NldCgkc3BucSkpIHsKICAgICAgICAgICAgJG5hbWVJZC0+c2V0QXR0cmlidXRlKCdTUE5hbWVRdWFsaWZpZXInLCAkc3BucSk7CiAgICAgICAgfQogICAgICAgIGlmIChpc3NldCgkbnEpKSB7CiAgICAgICAgICAgICRuYW1lSWQtPnNldEF0dHJpYnV0ZSgnTmFtZVF1YWxpZmllcicsICRucSk7CiAgICAgICAgfQogICAgICAgIGlmIChpc3NldCgkZm9ybWF0KSkgewogICAgICAgICAgICAkbmFtZUlkLT5zZXRBdHRyaWJ1dGUoJ0Zvcm1hdCcsICRmb3JtYXQpOwogICAgICAgIH0KICAgICAgICAkbmFtZUlkLT5hcHBlbmRDaGlsZCgkZG9jLT5jcmVhdGVUZXh0Tm9kZSgkdmFsdWUpKTsKCiAgICAgICAgJGRvYy0+YXBwZW5kQ2hpbGQoJG5hbWVJZCk7CgogICAgICAgIGlmICghZW1wdHkoJGNlcnQpKSB7CiAgICAgICAgICAgIGlmICgkZW5jQWxnID09IFhNTFNlY3VyaXR5S2V5OjpBRVMxMjhfQ0JDKSB7CiAgICAgICAgICAgICAgICAkc2Vja2V5ID0gbmV3IFhNTFNlY3VyaXR5S2V5KFhNTFNlY3VyaXR5S2V5OjpSU0FfMV81LCBhcnJheSgndHlwZSc9PidwdWJsaWMnKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkc2Vja2V5ID0gbmV3IFhNTFNlY3VyaXR5S2V5KFhNTFNlY3VyaXR5S2V5OjpSU0FfT0FFUF9NR0YxUCwgYXJyYXkoJ3R5cGUnPT4ncHVibGljJykpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRzZWNrZXktPmxvYWRLZXkoJGNlcnQpOwoKICAgICAgICAgICAgJGVuYyA9IG5ldyBYTUxTZWNFbmMoKTsKICAgICAgICAgICAgJGVuYy0+c2V0Tm9kZSgkbmFtZUlkKTsKICAgICAgICAgICAgJGVuYy0+dHlwZSA9IFhNTFNlY0VuYzo6RWxlbWVudDsKCiAgICAgICAgICAgICRzeW1tZXRyaWNLZXkgPSBuZXcgWE1MU2VjdXJpdHlLZXkoJGVuY0FsZyk7CiAgICAgICAgICAgICRzeW1tZXRyaWNLZXktPmdlbmVyYXRlU2Vzc2lvbktleSgpOwogICAgICAgICAgICAkZW5jLT5lbmNyeXB0S2V5KCRzZWNrZXksICRzeW1tZXRyaWNLZXkpOwoKICAgICAgICAgICAgJGVuY3J5cHRlZERhdGEgPSAkZW5jLT5lbmNyeXB0Tm9kZSgkc3ltbWV0cmljS2V5KTsKCiAgICAgICAgICAgICRuZXdkb2MgPSBuZXcgRE9NRG9jdW1lbnQoKTsKCiAgICAgICAgICAgICRlbmNyeXB0ZWRJRCA9ICRuZXdkb2MtPmNyZWF0ZUVsZW1lbnQoJ3NhbWw6RW5jcnlwdGVkSUQnKTsKCiAgICAgICAgICAgICRuZXdkb2MtPmFwcGVuZENoaWxkKCRlbmNyeXB0ZWRJRCk7CgogICAgICAgICAgICAkZW5jcnlwdGVkSUQtPmFwcGVuZENoaWxkKCRlbmNyeXB0ZWRJRC0+b3duZXJEb2N1bWVudC0+aW1wb3J0Tm9kZSgkZW5jcnlwdGVkRGF0YSwgdHJ1ZSkpOwoKICAgICAgICAgICAgcmV0dXJuICRuZXdkb2MtPnNhdmVYTUwoJGVuY3J5cHRlZElEKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gJGRvYy0+c2F2ZVhNTCgkbmFtZUlkKTsKICAgICAgICB9CiAgICB9CgoKICAgIC8qKgogICAgICogR2V0cyBTdGF0dXMgZnJvbSBhIFJlc3BvbnNlLgogICAgICoKICAgICAqIEBwYXJhbSBET01Eb2N1bWVudCAkZG9tIFRoZSBSZXNwb25zZSBhcyBYTUwKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5ICRzdGF0dXMgVGhlIFN0YXR1cywgYW4gYXJyYXkgd2l0aCB0aGUgY29kZSBhbmQgYSBtZXNzYWdlLgogICAgICoKICAgICAqIEB0aHJvd3MgVmFsaWRhdGlvbkVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0U3RhdHVzKERPTURvY3VtZW50ICRkb20pCiAgICB7CiAgICAgICAgJHN0YXR1cyA9IGFycmF5KCk7CgogICAgICAgICRzdGF0dXNFbnRyeSA9IHNlbGY6OnF1ZXJ5KCRkb20sICcvc2FtbHA6UmVzcG9uc2Uvc2FtbHA6U3RhdHVzJyk7CiAgICAgICAgaWYgKCRzdGF0dXNFbnRyeS0+bGVuZ3RoICE9IDEpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICJNaXNzaW5nIFN0YXR1cyBvbiByZXNwb25zZSIsCiAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6Ok1JU1NJTkdfU1RBVFVTCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkY29kZUVudHJ5ID0gc2VsZjo6cXVlcnkoJGRvbSwgJy9zYW1scDpSZXNwb25zZS9zYW1scDpTdGF0dXMvc2FtbHA6U3RhdHVzQ29kZScsICRzdGF0dXNFbnRyeS0+aXRlbSgwKSk7CiAgICAgICAgaWYgKCRjb2RlRW50cnktPmxlbmd0aCAhPSAxKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAiTWlzc2luZyBTdGF0dXMgQ29kZSBvbiByZXNwb25zZSIsCiAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6Ok1JU1NJTkdfU1RBVFVTX0NPREUKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJGNvZGUgPSAkY29kZUVudHJ5LT5pdGVtKDApLT5nZXRBdHRyaWJ1dGUoJ1ZhbHVlJyk7CiAgICAgICAgJHN0YXR1c1snY29kZSddID0gJGNvZGU7CgogICAgICAgICRzdGF0dXNbJ21zZyddID0gJyc7CiAgICAgICAgJG1lc3NhZ2VFbnRyeSA9IHNlbGY6OnF1ZXJ5KCRkb20sICcvc2FtbHA6UmVzcG9uc2Uvc2FtbHA6U3RhdHVzL3NhbWxwOlN0YXR1c01lc3NhZ2UnLCAkc3RhdHVzRW50cnktPml0ZW0oMCkpOwogICAgICAgIGlmICgkbWVzc2FnZUVudHJ5LT5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAkc3ViQ29kZUVudHJ5ID0gc2VsZjo6cXVlcnkoJGRvbSwgJy9zYW1scDpSZXNwb25zZS9zYW1scDpTdGF0dXMvc2FtbHA6U3RhdHVzQ29kZS9zYW1scDpTdGF0dXNDb2RlJywgJHN0YXR1c0VudHJ5LT5pdGVtKDApKTsKICAgICAgICAgICAgaWYgKCRzdWJDb2RlRW50cnktPmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgICAgICAkc3RhdHVzWydtc2cnXSA9ICRzdWJDb2RlRW50cnktPml0ZW0oMCktPmdldEF0dHJpYnV0ZSgnVmFsdWUnKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoJG1lc3NhZ2VFbnRyeS0+bGVuZ3RoID09IDEpIHsKICAgICAgICAgICAgJG1zZyA9ICRtZXNzYWdlRW50cnktPml0ZW0oMCktPnRleHRDb250ZW50OwogICAgICAgICAgICAkc3RhdHVzWydtc2cnXSA9ICRtc2c7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHN0YXR1czsKICAgIH0KCiAgICAvKioKICAgICAqIERlY3J5cHRzIGFuIGVuY3J5cHRlZCBlbGVtZW50LgogICAgICoKICAgICAqIEBwYXJhbSBET01FbGVtZW50ICAgICAkZW5jcnlwdGVkRGF0YSBUaGUgZW5jcnlwdGVkIGRhdGEuCiAgICAgKiBAcGFyYW0gWE1MU2VjdXJpdHlLZXkgJGlucHV0S2V5ICAgICAgVGhlIGRlY3J5cHRpb24ga2V5LgogICAgICogQHBhcmFtIGJvb2wgICAgICAgICAgICRmb3JtYXRPdXRwdXQgIEZvcm1hdCBvciBub3QgdGhlIG91dHB1dC4KICAgICAqCiAgICAgKiBAcmV0dXJuIERPTUVsZW1lbnQgIFRoZSBkZWNyeXB0ZWQgZWxlbWVudC4KICAgICAqCiAgICAgKiBAdGhyb3dzIFZhbGlkYXRpb25FcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlY3J5cHRFbGVtZW50KERPTUVsZW1lbnQgJGVuY3J5cHRlZERhdGEsIFhNTFNlY3VyaXR5S2V5ICRpbnB1dEtleSwgJGZvcm1hdE91dHB1dCA9IHRydWUpCiAgICB7CgogICAgICAgICRlbmMgPSBuZXcgWE1MU2VjRW5jKCk7CgogICAgICAgICRlbmMtPnNldE5vZGUoJGVuY3J5cHRlZERhdGEpOwogICAgICAgICRlbmMtPnR5cGUgPSAkZW5jcnlwdGVkRGF0YS0+Z2V0QXR0cmlidXRlKCJUeXBlIik7CgogICAgICAgICRzeW1tZXRyaWNLZXkgPSAkZW5jLT5sb2NhdGVLZXkoJGVuY3J5cHRlZERhdGEpOwogICAgICAgIGlmICghJHN5bW1ldHJpY0tleSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgJ0NvdWxkIG5vdCBsb2NhdGUga2V5IGFsZ29yaXRobSBpbiBlbmNyeXB0ZWQgZGF0YS4nLAogICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpLRVlfQUxHT1JJVEhNX0VSUk9SCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkc3ltbWV0cmljS2V5SW5mbyA9ICRlbmMtPmxvY2F0ZUtleUluZm8oJHN5bW1ldHJpY0tleSk7CiAgICAgICAgaWYgKCEkc3ltbWV0cmljS2V5SW5mbykgewogICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBsb2NhdGUgPGRzaWc6S2V5SW5mbz4gZm9yIHRoZSBlbmNyeXB0ZWQga2V5LiIsCiAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OktFWUlORk9fTk9UX0ZPVU5EX0lOX0VOQ1JZUFRFRF9EQVRBCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkaW5wdXRLZXlBbGdvID0gJGlucHV0S2V5LT5nZXRBbGdvcml0aG0oKTsKICAgICAgICBpZiAoJHN5bW1ldHJpY0tleUluZm8tPmlzRW5jcnlwdGVkKSB7CiAgICAgICAgICAgICRzeW1LZXlJbmZvQWxnbyA9ICRzeW1tZXRyaWNLZXlJbmZvLT5nZXRBbGdvcml0aG0oKTsKCiAgICAgICAgICAgIGlmICgkc3ltS2V5SW5mb0FsZ28gPT09IFhNTFNlY3VyaXR5S2V5OjpSU0FfT0FFUF9NR0YxUCAmJiAkaW5wdXRLZXlBbGdvID09PSBYTUxTZWN1cml0eUtleTo6UlNBXzFfNSkgewogICAgICAgICAgICAgICAgJGlucHV0S2V5QWxnbyA9IFhNTFNlY3VyaXR5S2V5OjpSU0FfT0FFUF9NR0YxUDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRpbnB1dEtleUFsZ28gIT09ICRzeW1LZXlJbmZvQWxnbykgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAnQWxnb3JpdGhtIG1pc21hdGNoIGJldHdlZW4gaW5wdXQga2V5IGFuZCBrZXkgdXNlZCB0byBlbmNyeXB0ICcgLgogICAgICAgICAgICAgICAgICAgICcgdGhlIHN5bW1ldHJpYyBrZXkgZm9yIHRoZSBtZXNzYWdlLiBLZXkgd2FzOiAnIC4KICAgICAgICAgICAgICAgICAgICB2YXJfZXhwb3J0KCRpbnB1dEtleUFsZ28sIHRydWUpIC4gJzsgbWVzc2FnZSB3YXM6ICcgLgogICAgICAgICAgICAgICAgICAgIHZhcl9leHBvcnQoJHN5bUtleUluZm9BbGdvLCB0cnVlKSwKICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OktFWV9BTEdPUklUSE1fRVJST1IKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRlbmNLZXkgPSAkc3ltbWV0cmljS2V5SW5mby0+ZW5jcnlwdGVkQ3R4OwogICAgICAgICAgICAkc3ltbWV0cmljS2V5SW5mby0+a2V5ID0gJGlucHV0S2V5LT5rZXk7CiAgICAgICAgICAgICRrZXlTaXplID0gJHN5bW1ldHJpY0tleS0+Z2V0U3ltbWV0cmljS2V5U2l6ZSgpOwogICAgICAgICAgICBpZiAoJGtleVNpemUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIC8vIFRvIHByb3RlY3QgYWdhaW5zdCAia2V5IG9yYWNsZSIgYXR0YWNrcwogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAnVW5rbm93biBrZXkgc2l6ZSBmb3IgZW5jcnlwdGlvbiBhbGdvcml0aG06ICcgLiB2YXJfZXhwb3J0KCRzeW1tZXRyaWNLZXktPnR5cGUsIHRydWUpLAogICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6S0VZX0FMR09SSVRITV9FUlJPUgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGtleSA9ICRlbmNLZXktPmRlY3J5cHRLZXkoJHN5bW1ldHJpY0tleUluZm8pOwogICAgICAgICAgICBpZiAoc3RybGVuKCRrZXkpICE9ICRrZXlTaXplKSB7CiAgICAgICAgICAgICAgICAkZW5jcnlwdGVkS2V5ID0gJGVuY0tleS0+Z2V0Q2lwaGVyVmFsdWUoKTsKICAgICAgICAgICAgICAgICRwa2V5ID0gb3BlbnNzbF9wa2V5X2dldF9kZXRhaWxzKCRzeW1tZXRyaWNLZXlJbmZvLT5rZXkpOwogICAgICAgICAgICAgICAgJHBrZXkgPSBzaGExKHNlcmlhbGl6ZSgkcGtleSksIHRydWUpOwogICAgICAgICAgICAgICAgJGtleSA9IHNoYTEoJGVuY3J5cHRlZEtleSAuICRwa2V5LCB0cnVlKTsKCiAgICAgICAgICAgICAgICAvKiBNYWtlIHN1cmUgdGhhdCB0aGUga2V5IGhhcyB0aGUgY29ycmVjdCBsZW5ndGguICovCiAgICAgICAgICAgICAgICBpZiAoc3RybGVuKCRrZXkpID4gJGtleVNpemUpIHsKICAgICAgICAgICAgICAgICAgICAka2V5ID0gc3Vic3RyKCRrZXksIDAsICRrZXlTaXplKTsKICAgICAgICAgICAgICAgIH0gZWxzZWlmIChzdHJsZW4oJGtleSkgPCAka2V5U2l6ZSkgewogICAgICAgICAgICAgICAgICAgICRrZXkgPSBzdHJfcGFkKCRrZXksICRrZXlTaXplKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkc3ltbWV0cmljS2V5LT5sb2FkS2V5KCRrZXkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRzeW1LZXlBbGdvID0gJHN5bW1ldHJpY0tleS0+Z2V0QWxnb3JpdGhtKCk7CiAgICAgICAgICAgIGlmICgkaW5wdXRLZXlBbGdvICE9PSAkc3ltS2V5QWxnbykgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAnQWxnb3JpdGhtIG1pc21hdGNoIGJldHdlZW4gaW5wdXQga2V5IGFuZCBrZXkgaW4gbWVzc2FnZS4gJyAuCiAgICAgICAgICAgICAgICAgICAgJ0tleSB3YXM6ICcgLiB2YXJfZXhwb3J0KCRpbnB1dEtleUFsZ28sIHRydWUpIC4gJzsgbWVzc2FnZSB3YXM6ICcgLgogICAgICAgICAgICAgICAgICAgIHZhcl9leHBvcnQoJHN5bUtleUFsZ28sIHRydWUpLAogICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6S0VZX0FMR09SSVRITV9FUlJPUgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkc3ltbWV0cmljS2V5ID0gJGlucHV0S2V5OwogICAgICAgIH0KCiAgICAgICAgJGRlY3J5cHRlZCA9ICRlbmMtPmRlY3J5cHROb2RlKCRzeW1tZXRyaWNLZXksIGZhbHNlKTsKCiAgICAgICAgJHhtbCA9ICc8cm9vdCB4bWxuczpzYW1sPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXNzZXJ0aW9uIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4nLiRkZWNyeXB0ZWQuJzwvcm9vdD4nOwogICAgICAgICRuZXdEb2MgPSBuZXcgRE9NRG9jdW1lbnQoKTsKICAgICAgICBpZiAoJGZvcm1hdE91dHB1dCkgewogICAgICAgICAgICAkbmV3RG9jLT5wcmVzZXJ2ZVdoaXRlU3BhY2UgPSBmYWxzZTsKICAgICAgICAgICAgJG5ld0RvYy0+Zm9ybWF0T3V0cHV0ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgJG5ld0RvYyA9IHNlbGY6OmxvYWRYTUwoJG5ld0RvYywgJHhtbCk7CiAgICAgICAgaWYgKCEkbmV3RG9jKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIHBhcnNlIGRlY3J5cHRlZCBYTUwuJywKICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6SU5WQUxJRF9YTUxfRk9STUFUCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkZGVjcnlwdGVkRWxlbWVudCA9ICRuZXdEb2MtPmZpcnN0Q2hpbGQtPmZpcnN0Q2hpbGQ7CiAgICAgICAgaWYgKCRkZWNyeXB0ZWRFbGVtZW50ID09PSBudWxsKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAnTWlzc2luZyBlbmNyeXB0ZWQgZWxlbWVudC4nLAogICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpNSVNTSU5HX0VOQ1JZUFRFRF9FTEVNRU5UCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGRlY3J5cHRlZEVsZW1lbnQ7CiAgICB9CgogICAgIC8qKgogICAgICAqIENvbnZlcnRzIGEgWE1MU2VjdXJpdHlLZXkgdG8gdGhlIGNvcnJlY3QgYWxnb3JpdGhtLgogICAgICAqCiAgICAgICogQHBhcmFtIFhNTFNlY3VyaXR5S2V5ICRrZXkgICAgICAgVGhlIGtleS4KICAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgJGFsZ29yaXRobSBUaGUgZGVzaXJlZCBhbGdvcml0aG0uCiAgICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICR0eXBlICAgICAgUHVibGljIG9yIHByaXZhdGUga2V5LCBkZWZhdWx0cyB0byBwdWJsaWMuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIFhNTFNlY3VyaXR5S2V5IFRoZSBuZXcga2V5LgogICAgICAqCiAgICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FzdEtleShYTUxTZWN1cml0eUtleSAka2V5LCAkYWxnb3JpdGhtLCAkdHlwZSA9ICdwdWJsaWMnKQogICAgewogICAgICAgIGFzc2VydChpc19zdHJpbmcoJGFsZ29yaXRobSkpOwogICAgICAgIGFzc2VydCgkdHlwZSA9PT0gJ3B1YmxpYycgfHwgJHR5cGUgPT09ICdwcml2YXRlJyk7CgogICAgICAgIC8vIGRvIG5vdGhpbmcgaWYgYWxnb3JpdGhtIGlzIGFscmVhZHkgdGhlIHR5cGUgb2YgdGhlIGtleQogICAgICAgIGlmICgka2V5LT50eXBlID09PSAkYWxnb3JpdGhtKSB7CiAgICAgICAgICAgIHJldHVybiAka2V5OwogICAgICAgIH0KCiAgICAgICAgaWYgKCFVdGlsczo6aXNTdXBwb3J0ZWRTaWduaW5nQWxnb3JpdGhtKCRhbGdvcml0aG0pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1Vuc3VwcG9ydGVkIHNpZ25pbmcgYWxnb3JpdGhtLicpOwogICAgICAgIH0KCiAgICAgICAgJGtleUluZm8gPSBvcGVuc3NsX3BrZXlfZ2V0X2RldGFpbHMoJGtleS0+a2V5KTsKICAgICAgICBpZiAoJGtleUluZm8gPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1VuYWJsZSB0byBnZXQga2V5IGRldGFpbHMgZnJvbSBYTUxTZWN1cml0eUtleS4nKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFpc3NldCgka2V5SW5mb1sna2V5J10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ01pc3Npbmcga2V5IGluIHB1YmxpYyBrZXkgZGV0YWlscy4nKTsKICAgICAgICB9CiAgICAgICAgJG5ld0tleSA9IG5ldyBYTUxTZWN1cml0eUtleSgkYWxnb3JpdGhtLCBhcnJheSgndHlwZSc9PiR0eXBlKSk7CiAgICAgICAgJG5ld0tleS0+bG9hZEtleSgka2V5SW5mb1sna2V5J10pOwogICAgICAgIHJldHVybiAkbmV3S2V5OwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtICRhbGdvcml0aG0KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc1N1cHBvcnRlZFNpZ25pbmdBbGdvcml0aG0oJGFsZ29yaXRobSkKICAgIHsKICAgICAgICByZXR1cm4gaW5fYXJyYXkoCiAgICAgICAgICAgICRhbGdvcml0aG0sCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgWE1MU2VjdXJpdHlLZXk6OlJTQV8xXzUsCiAgICAgICAgICAgICAgICBYTUxTZWN1cml0eUtleTo6UlNBX1NIQTEsCiAgICAgICAgICAgICAgICBYTUxTZWN1cml0eUtleTo6UlNBX1NIQTI1NiwKICAgICAgICAgICAgICAgIFhNTFNlY3VyaXR5S2V5OjpSU0FfU0hBMzg0LAogICAgICAgICAgICAgICAgWE1MU2VjdXJpdHlLZXk6OlJTQV9TSEE1MTIKICAgICAgICAgICAgKQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGRzIHNpZ25hdHVyZSBrZXkgYW5kIHNlbmRlcnMgY2VydGlmaWNhdGUgdG8gYW4gZWxlbWVudCAoTWVzc2FnZSBvciBBc3NlcnRpb24pLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8RE9NRG9jdW1lbnQgJHhtbCAgICAgICAgICAgICBUaGUgZWxlbWVudCB3ZSBzaG91bGQgc2lnbgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAka2V5ICAgICAgICAgICAgIFRoZSBwcml2YXRlIGtleQogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAkY2VydCAgICAgICAgICAgIFRoZSBwdWJsaWMKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgJHNpZ25BbGdvcml0aG0gICBTaWduYXR1cmUgYWxnb3JpdGhtIG1ldGhvZAogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAkZGlnZXN0QWxnb3JpdGhtIERpZ2VzdCBhbGdvcml0aG0gbWV0aG9kCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFkZFNpZ24oJHhtbCwgJGtleSwgJGNlcnQsICRzaWduQWxnb3JpdGhtID0gWE1MU2VjdXJpdHlLZXk6OlJTQV9TSEEyNTYsICRkaWdlc3RBbGdvcml0aG0gPSBYTUxTZWN1cml0eURTaWc6OlNIQTI1NikKICAgIHsKICAgICAgICBpZiAoJHhtbCBpbnN0YW5jZW9mIERPTURvY3VtZW50KSB7CiAgICAgICAgICAgICRkb20gPSAkeG1sOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRkb20gPSBuZXcgRE9NRG9jdW1lbnQoKTsKICAgICAgICAgICAgJGRvbSA9IHNlbGY6OmxvYWRYTUwoJGRvbSwgJHhtbCk7CiAgICAgICAgICAgIGlmICghJGRvbSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignRXJyb3IgcGFyc2luZyB4bWwgc3RyaW5nJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qIExvYWQgdGhlIHByaXZhdGUga2V5LiAqLwogICAgICAgICRvYmpLZXkgPSBuZXcgWE1MU2VjdXJpdHlLZXkoJHNpZ25BbGdvcml0aG0sIGFycmF5KCd0eXBlJyA9PiAncHJpdmF0ZScpKTsKICAgICAgICAkb2JqS2V5LT5sb2FkS2V5KCRrZXksIGZhbHNlKTsKCiAgICAgICAgLyogR2V0IHRoZSBFbnRpdHlEZXNjcmlwdG9yIG5vZGUgd2Ugc2hvdWxkIHNpZ24uICovCiAgICAgICAgJHJvb3ROb2RlID0gJGRvbS0+Zmlyc3RDaGlsZDsKCiAgICAgICAgLyogU2lnbiB0aGUgbWV0YWRhdGEgd2l0aCBvdXIgcHJpdmF0ZSBrZXkuICovCiAgICAgICAgJG9ialhNTFNlY0RTaWcgPSBuZXcgWE1MU2VjdXJpdHlEU2lnKCk7CiAgICAgICAgJG9ialhNTFNlY0RTaWctPnNldENhbm9uaWNhbE1ldGhvZChYTUxTZWN1cml0eURTaWc6OkVYQ19DMTROKTsKCiAgICAgICAgJG9ialhNTFNlY0RTaWctPmFkZFJlZmVyZW5jZUxpc3QoCiAgICAgICAgICAgIGFycmF5KCRyb290Tm9kZSksCiAgICAgICAgICAgICRkaWdlc3RBbGdvcml0aG0sCiAgICAgICAgICAgIGFycmF5KCdodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjZW52ZWxvcGVkLXNpZ25hdHVyZScsIFhNTFNlY3VyaXR5RFNpZzo6RVhDX0MxNE4pLAogICAgICAgICAgICBhcnJheSgnaWRfbmFtZScgPT4gJ0lEJykKICAgICAgICApOwoKICAgICAgICAkb2JqWE1MU2VjRFNpZy0+c2lnbigkb2JqS2V5KTsKCiAgICAgICAgLyogQWRkIHRoZSBjZXJ0aWZpY2F0ZSB0byB0aGUgc2lnbmF0dXJlLiAqLwogICAgICAgICRvYmpYTUxTZWNEU2lnLT5hZGQ1MDlDZXJ0KCRjZXJ0LCB0cnVlKTsKCiAgICAgICAgJGluc2VydEJlZm9yZSA9ICRyb290Tm9kZS0+Zmlyc3RDaGlsZDsKICAgICAgICAkbWVzc2FnZVR5cGVzID0gYXJyYXkoJ0F1dGhuUmVxdWVzdCcsICdSZXNwb25zZScsICdMb2dvdXRSZXF1ZXN0JywnTG9nb3V0UmVzcG9uc2UnKTsKICAgICAgICBpZiAoaW5fYXJyYXkoJHJvb3ROb2RlLT5sb2NhbE5hbWUsICRtZXNzYWdlVHlwZXMpKSB7CiAgICAgICAgICAgICRpc3N1ZXJOb2RlcyA9IHNlbGY6OnF1ZXJ5KCRkb20sICcvJy4kcm9vdE5vZGUtPnRhZ05hbWUuJy9zYW1sOklzc3VlcicpOwogICAgICAgICAgICBpZiAoJGlzc3Vlck5vZGVzLT5sZW5ndGggPT0gMSkgewogICAgICAgICAgICAgICAgJGluc2VydEJlZm9yZSA9ICRpc3N1ZXJOb2Rlcy0+aXRlbSgwKS0+bmV4dFNpYmxpbmc7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qIEFkZCB0aGUgc2lnbmF0dXJlLiAqLwogICAgICAgICRvYmpYTUxTZWNEU2lnLT5pbnNlcnRTaWduYXR1cmUoJHJvb3ROb2RlLCAkaW5zZXJ0QmVmb3JlKTsKCiAgICAgICAgLyogUmV0dXJuIHRoZSBET00gdHJlZSBhcyBhIHN0cmluZy4gKi8KICAgICAgICAkc2lnbmVkeG1sID0gJGRvbS0+c2F2ZVhNTCgpOwoKICAgICAgICByZXR1cm4gJHNpZ25lZHhtbDsKICAgIH0KCiAgICAvKioKICAgICAqIFZhbGlkYXRlcyBhIHNpZ25hdHVyZSAoTWVzc2FnZSBvciBBc3NlcnRpb24pLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8XERvbU5vZGUgICAkeG1sICAgICAgICAgICAgVGhlIGVsZW1lbnQgd2Ugc2hvdWxkIHZhbGlkYXRlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgICAgICAgJGNlcnQgICAgICAgICAgIFRoZSBwdWJsaWMgY2VydAogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICAgICAgICRmaW5nZXJwcmludCAgICBUaGUgZmluZ2VycHJpbnQgb2YgdGhlIHB1YmxpYyBjZXJ0CiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgICAgICAgJGZpbmdlcnByaW50YWxnIFRoZSBhbGdvcml0aG0gdXNlZCB0byBnZXQgdGhlIGZpbmdlcnByaW50CiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgICAgICAgJHhwYXRoICAgICAgICAgIFRoZSB4cGF0aCBvZiB0aGUgc2lnbmVkIGVsZW1lbnQKICAgICAqIEBwYXJhbSBhcnJheXxudWxsICAgICAgICAkbXVsdGlDZXJ0cyAgICAgTXVsdGlwbGUgcHVibGljIGNlcnRzCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB2YWxpZGF0ZVNpZ24oJHhtbCwgJGNlcnQgPSBudWxsLCAkZmluZ2VycHJpbnQgPSBudWxsLCAkZmluZ2VycHJpbnRhbGcgPSAnc2hhMScsICR4cGF0aCA9IG51bGwsICRtdWx0aUNlcnRzID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoJHhtbCBpbnN0YW5jZW9mIERPTURvY3VtZW50KSB7CiAgICAgICAgICAgICRkb20gPSBjbG9uZSAkeG1sOwogICAgICAgIH0gZWxzZSBpZiAoJHhtbCBpbnN0YW5jZW9mIERPTUVsZW1lbnQpIHsKICAgICAgICAgICAgJGRvbSA9IGNsb25lICR4bWwtPm93bmVyRG9jdW1lbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGRvbSA9IG5ldyBET01Eb2N1bWVudCgpOwogICAgICAgICAgICAkZG9tID0gc2VsZjo6bG9hZFhNTCgkZG9tLCAkeG1sKTsKICAgICAgICB9CgogICAgICAgICRvYmpYTUxTZWNEU2lnID0gbmV3IFhNTFNlY3VyaXR5RFNpZygpOwogICAgICAgICRvYmpYTUxTZWNEU2lnLT5pZEtleXMgPSBhcnJheSgnSUQnKTsKCiAgICAgICAgaWYgKCR4cGF0aCkgewogICAgICAgICAgICAkbm9kZXNldCA9IFV0aWxzOjpxdWVyeSgkZG9tLCAkeHBhdGgpOwogICAgICAgICAgICAkb2JqRFNpZyA9ICRub2Rlc2V0LT5pdGVtKDApOwogICAgICAgICAgICAkb2JqWE1MU2VjRFNpZy0+c2lnTm9kZSA9ICRvYmpEU2lnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRvYmpEU2lnID0gJG9ialhNTFNlY0RTaWctPmxvY2F0ZVNpZ25hdHVyZSgkZG9tKTsKICAgICAgICB9CgogICAgICAgIGlmICghJG9iakRTaWcpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignQ2Fubm90IGxvY2F0ZSBTaWduYXR1cmUgTm9kZScpOwogICAgICAgIH0KCiAgICAgICAgJG9iaktleSA9ICRvYmpYTUxTZWNEU2lnLT5sb2NhdGVLZXkoKTsKICAgICAgICBpZiAoISRvYmpLZXkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignV2UgaGF2ZSBubyBpZGVhIGFib3V0IHRoZSBrZXknKTsKICAgICAgICB9CgogICAgICAgIGlmICghVXRpbHM6OmlzU3VwcG9ydGVkU2lnbmluZ0FsZ29yaXRobSgkb2JqS2V5LT50eXBlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbnN1cHBvcnRlZCBzaWduaW5nIGFsZ29yaXRobS4nKTsKICAgICAgICB9CgogICAgICAgICRvYmpYTUxTZWNEU2lnLT5jYW5vbmljYWxpemVTaWduZWRJbmZvKCk7CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRyZXRWYWwgPSAkb2JqWE1MU2VjRFNpZy0+dmFsaWRhdGVSZWZlcmVuY2UoKTsKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgdGhyb3cgJGU7CiAgICAgICAgfQoKICAgICAgICBYTUxTZWNFbmM6OnN0YXRpY0xvY2F0ZUtleUluZm8oJG9iaktleSwgJG9iakRTaWcpOwoKICAgICAgICBpZiAoIWVtcHR5KCRtdWx0aUNlcnRzKSkgewogICAgICAgICAgICAvLyBJZiBtdWx0aXBsZSBjZXJ0cyBhcmUgcHJvdmlkZWQsIEkgbWF5IGlnbm9yZSAkY2VydCBhbmQKICAgICAgICAgICAgLy8gJGZpbmdlcnByaW50IHByb3ZpZGVkIGJ5IHRoZSBtZXRob2QgYW5kIGp1c3QgY2hlY2sgdGhlCiAgICAgICAgICAgIC8vIGNlcnRzIG9uIHRoZSBhcnJheQogICAgICAgICAgICAkZmluZ2VycHJpbnQgPSBudWxsOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIGVsc2UgSSBhZGQgdGhlIGNlcnQgdG8gdGhlIGFycmF5IGluIG9yZGVyIHRvIGNoZWNrCiAgICAgICAgICAgIC8vIHZhbGlkYXRlIHNpZ25hdHVyZXMgd2l0aCBpdCBhbmQgdGhlIHdpdGggaXQgYW5kIHRoZQogICAgICAgICAgICAvLyAkZmluZ2VycHJpbnQgdmFsdWUKICAgICAgICAgICAgJG11bHRpQ2VydHMgPSBhcnJheSgkY2VydCk7CiAgICAgICAgfQoKICAgICAgICAkdmFsaWQgPSBmYWxzZTsKICAgICAgICBmb3JlYWNoICgkbXVsdGlDZXJ0cyBhcyAkY2VydCkgewogICAgICAgICAgICBpZiAoIWVtcHR5KCRjZXJ0KSkgewogICAgICAgICAgICAgICAgJG9iaktleS0+bG9hZEtleSgkY2VydCwgZmFsc2UsIHRydWUpOwogICAgICAgICAgICAgICAgaWYgKCRvYmpYTUxTZWNEU2lnLT52ZXJpZnkoJG9iaktleSkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICAkdmFsaWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkZmluZ2VycHJpbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgJGRvbUNlcnQgPSAkb2JqS2V5LT5nZXRYNTA5Q2VydGlmaWNhdGUoKTsKICAgICAgICAgICAgICAgICAgICAkZG9tQ2VydEZpbmdlcnByaW50ID0gVXRpbHM6OmNhbGN1bGF0ZVg1MDlGaW5nZXJwcmludCgkZG9tQ2VydCwgJGZpbmdlcnByaW50YWxnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoVXRpbHM6OmZvcm1hdEZpbmdlclByaW50KCRmaW5nZXJwcmludCkgPT0gJGRvbUNlcnRGaW5nZXJwcmludCkgewogICAgICAgICAgICAgICAgICAgICAgICAkb2JqS2V5LT5sb2FkS2V5KCRkb21DZXJ0LCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkb2JqWE1MU2VjRFNpZy0+dmVyaWZ5KCRvYmpLZXkpID09PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdmFsaWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICR2YWxpZDsKICAgIH0KCiAgICAvKioKICAgICAqIFZhbGlkYXRlcyBhIGJpbmFyeSBzaWduYXR1cmUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlVHlwZSAgICAgICAgICAgICAgICAgICAgVHlwZSBvZiBTQU1MIE1lc3NhZ2UKICAgICAqIEBwYXJhbSBhcnJheSAgJGdldERhdGEgICAgICAgICAgICAgICAgICAgICAgICBIVFRQIEdFVCBhcnJheQogICAgICogQHBhcmFtIGFycmF5ICAkaWRwRGF0YSAgICAgICAgICAgICAgICAgICAgICAgIElkUCBzZXR0aW5nIGRhdGEKICAgICAqIEBwYXJhbSBib29sICAgJHJldHJpZXZlUGFyYW1ldGVyc0Zyb21TZXJ2ZXIgICBJbmRpY2F0ZXMgd2hlcmUgdG8gZ2V0IHRoZSB2YWx1ZXMgaW4gb3JkZXIgdG8gdmFsaWRhdGUgdGhlIFNpZ24sIGZyb20gZ2V0RGF0YSBvciBmcm9tICRfU0VSVkVSCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB2YWxpZGF0ZUJpbmFyeVNpZ24oJG1lc3NhZ2VUeXBlLCAkZ2V0RGF0YSwgJGlkcERhdGEsICRyZXRyaWV2ZVBhcmFtZXRlcnNGcm9tU2VydmVyID0gZmFsc2UpCiAgICB7CiAgICAgICAgaWYgKCFpc3NldCgkZ2V0RGF0YVsnU2lnQWxnJ10pKSB7CiAgICAgICAgICAgICRzaWduQWxnID0gWE1MU2VjdXJpdHlLZXk6OlJTQV9TSEExOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRzaWduQWxnID0gJGdldERhdGFbJ1NpZ0FsZyddOwogICAgICAgIH0KCgogICAgICAgIGlmICgkcmV0cmlldmVQYXJhbWV0ZXJzRnJvbVNlcnZlcikgewogICAgICAgICAgICBpZiAoIWlzc2V0KCRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXSkgfHwgZW1wdHkoJF9TRVJWRVJbJ1FVRVJZX1NUUklORyddKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAgICAgICAgICAgICAgICJObyBxdWVyeSBzdHJpbmcgcHJvdmlkZWQiLAogICAgICAgICAgICAgICAgICAgIEVycm9yOjpJTlZBTElEX1BBUkFNRVRFUgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAka2V5cyA9IFsiU0FNTFJlcXVlc3QiLCAiU0FNTFJlc3BvbnNlIiwgIlJlbGF5U3RhdGUiLCAiU2lnQWxnIiwgIlNpZ25hdHVyZSJdOwogICAgICAgICAgICBmb3JlYWNoICgka2V5cyBhcyAka2V5KSB7CiAgICAgICAgICAgICAgICBpZiAoc3Vic3RyX2NvdW50KCRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXSwgJGtleSkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAiRHVwbGljYXRlIHBhcmFtZXRlciBpbiBxdWVyeSBzdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICBFcnJvcjo6SU5WQUxJRF9QQVJBTUVURVIKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzdWJzdHJfY291bnQoJF9TRVJWRVJbJ1FVRVJZX1NUUklORyddLCAiU0FNTFJlcXVlc3QiKSA+IDAgJiYgc3Vic3RyX2NvdW50KCRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXSwgIlNBTUxSZXNwb25zZSIpID4gMCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAgICAgICAgICAgICAgICJCb3RoIFNBTUxSZXF1ZXN0IGFuZCBTQU1MUmVzcG9uc2UgcHJvdmlkZWQiLAogICAgICAgICAgICAgICAgICAgIEVycm9yOjpJTlZBTElEX1BBUkFNRVRFUgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHNpZ25lZFF1ZXJ5ID0gJG1lc3NhZ2VUeXBlLic9Jy5VdGlsczo6ZXh0cmFjdE9yaWdpbmFsUXVlcnlQYXJhbSgkbWVzc2FnZVR5cGUpOwogICAgICAgICAgICBpZiAoaXNzZXQoJGdldERhdGFbJ1JlbGF5U3RhdGUnXSkpIHsKICAgICAgICAgICAgICAgICRzaWduZWRRdWVyeSAuPSAnJlJlbGF5U3RhdGU9Jy5VdGlsczo6ZXh0cmFjdE9yaWdpbmFsUXVlcnlQYXJhbSgnUmVsYXlTdGF0ZScpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRzaWduZWRRdWVyeSAuPSAnJlNpZ0FsZz0nLlV0aWxzOjpleHRyYWN0T3JpZ2luYWxRdWVyeVBhcmFtKCdTaWdBbGcnKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoaXNzZXQoJGdldERhdGFbJ1NBTUxSZXF1ZXN0J10pICYmIGlzc2V0KCRnZXREYXRhWydTQU1MUmVzcG9uc2UnXSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgICAgICAgICAgICAgICAiQm90aCBTQU1MUmVxdWVzdCBhbmQgU0FNTFJlc3BvbnNlIHByb3ZpZGVkIiwKICAgICAgICAgICAgICAgICAgICBFcnJvcjo6SU5WQUxJRF9QQVJBTUVURVIKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRzaWduZWRRdWVyeSA9ICRtZXNzYWdlVHlwZS4nPScudXJsZW5jb2RlKCRnZXREYXRhWyRtZXNzYWdlVHlwZV0pOwogICAgICAgICAgICBpZiAoaXNzZXQoJGdldERhdGFbJ1JlbGF5U3RhdGUnXSkpIHsKICAgICAgICAgICAgICAgICRzaWduZWRRdWVyeSAuPSAnJlJlbGF5U3RhdGU9Jy51cmxlbmNvZGUoJGdldERhdGFbJ1JlbGF5U3RhdGUnXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHNpZ25lZFF1ZXJ5IC49ICcmU2lnQWxnPScudXJsZW5jb2RlKCRzaWduQWxnKTsKICAgICAgICB9CgogICAgICAgIGlmICgkbWVzc2FnZVR5cGUgPT0gIlNBTUxSZXF1ZXN0IikgewogICAgICAgICAgICAkc3RyTWVzc2FnZVR5cGUgPSAiTG9nb3V0IFJlcXVlc3QiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRzdHJNZXNzYWdlVHlwZSA9ICJMb2dvdXQgUmVzcG9uc2UiOwogICAgICAgIH0KICAgICAgICAkZXhpc3RzTXVsdGlYNTA5U2lnbiA9IGlzc2V0KCRpZHBEYXRhWyd4NTA5Y2VydE11bHRpJ10pICYmIGlzc2V0KCRpZHBEYXRhWyd4NTA5Y2VydE11bHRpJ11bJ3NpZ25pbmcnXSkgJiYgIWVtcHR5KCRpZHBEYXRhWyd4NTA5Y2VydE11bHRpJ11bJ3NpZ25pbmcnXSk7CiAgICAgICAgaWYgKCghaXNzZXQoJGlkcERhdGFbJ3g1MDljZXJ0J10pIHx8IGVtcHR5KCRpZHBEYXRhWyd4NTA5Y2VydCddKSkgJiYgISRleGlzdHNNdWx0aVg1MDlTaWduKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgICAgICAgICAgICJJbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgc2lnbiBvbiB0aGUgIi4kc3RyTWVzc2FnZVR5cGUuIiwgdGhlIHg1MDljZXJ0IG9mIHRoZSBJZFAgaXMgcmVxdWlyZWQiLAogICAgICAgICAgICAgICAgRXJyb3I6OkNFUlRfTk9UX0ZPVU5ECiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGV4aXN0c011bHRpWDUwOVNpZ24pIHsKICAgICAgICAgICAgJG11bHRpQ2VydHMgPSAkaWRwRGF0YVsneDUwOWNlcnRNdWx0aSddWydzaWduaW5nJ107CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG11bHRpQ2VydHMgPSBhcnJheSgkaWRwRGF0YVsneDUwOWNlcnQnXSk7CiAgICAgICAgfQoKICAgICAgICAkc2lnbmF0dXJlVmFsaWQgPSBmYWxzZTsKICAgICAgICBmb3JlYWNoICgkbXVsdGlDZXJ0cyBhcyAkY2VydCkgewogICAgICAgICAgICAkb2JqS2V5ID0gbmV3IFhNTFNlY3VyaXR5S2V5KFhNTFNlY3VyaXR5S2V5OjpSU0FfU0hBMSwgYXJyYXkoJ3R5cGUnID0+ICdwdWJsaWMnKSk7CiAgICAgICAgICAgICRvYmpLZXktPmxvYWRLZXkoJGNlcnQsIGZhbHNlLCB0cnVlKTsKCiAgICAgICAgICAgIGlmICgkc2lnbkFsZyAhPSBYTUxTZWN1cml0eUtleTo6UlNBX1NIQTEpIHsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgJG9iaktleSA9IFV0aWxzOjpjYXN0S2V5KCRvYmpLZXksICRzaWduQWxnLCAncHVibGljJyk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgICAgICAkZXggPSBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBzaWduQWxnIGluIHRoZSByZWNlaXZlZCAiLiRzdHJNZXNzYWdlVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpJTlZBTElEX1NJR05BVFVSRQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50KCRtdWx0aUNlcnRzKSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93ICRleDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkb2JqS2V5LT52ZXJpZnlTaWduYXR1cmUoJHNpZ25lZFF1ZXJ5LCBiYXNlNjRfZGVjb2RlKCRnZXREYXRhWydTaWduYXR1cmUnXSkpID09PSAxKSB7CiAgICAgICAgICAgICAgICAkc2lnbmF0dXJlVmFsaWQgPSB0cnVlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRzaWduYXR1cmVWYWxpZDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/ValidationError.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHBocC1zYW1sLgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQHBhY2thZ2UgT25lTG9naW4KICogQGF1dGhvciAgU2l4dG8gTWFydGluIDxzaXh0by5tYXJ0aW4uZ2FyY2lhQGdtYWlsLmNvbT4KICogQGxpY2Vuc2UgTUlUIGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICogQGxpbmsgICAgaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwKICovCgpuYW1lc3BhY2UgT25lTG9naW5cU2FtbDI7Cgp1c2UgRXhjZXB0aW9uOwoKLyoqCiAqIFZhbGlkYXRpb25FcnJvciBjbGFzcyBvZiBTQU1MIFBIUCBUb29sa2l0CiAqCiAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhbm90aGVyIGN1c3RvbSBFeGNlcHRpb24gaGFuZGxlciwKICogcmVsYXRlZCB0byBleGNlcHRpb25zIHRoYXQgaGFwcGVucyBkdXJpbmcgdmFsaWRhdGlvbiBwcm9jZXNzLgogKi8KY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXhjZXB0aW9uCnsKICAgIC8vIFZhbGlkYXRpb24gRXJyb3JzCiAgICBjb25zdCBVTlNVUFBPUlRFRF9TQU1MX1ZFUlNJT04gPSAwOwogICAgY29uc3QgTUlTU0lOR19JRCA9IDE7CiAgICBjb25zdCBXUk9OR19OVU1CRVJfT0ZfQVNTRVJUSU9OUyA9IDI7CiAgICBjb25zdCBNSVNTSU5HX1NUQVRVUyA9IDM7CiAgICBjb25zdCBNSVNTSU5HX1NUQVRVU19DT0RFID0gNDsKICAgIGNvbnN0IFNUQVRVU19DT0RFX0lTX05PVF9TVUNDRVNTID0gNTsKICAgIGNvbnN0IFdST05HX1NJR05FRF9FTEVNRU5UID0gNjsKICAgIGNvbnN0IElEX05PVF9GT1VORF9JTl9TSUdORURfRUxFTUVOVCA9IDc7CiAgICBjb25zdCBEVVBMSUNBVEVEX0lEX0lOX1NJR05FRF9FTEVNRU5UUyA9IDg7CiAgICBjb25zdCBJTlZBTElEX1NJR05FRF9FTEVNRU5UID0gOTsKICAgIGNvbnN0IERVUExJQ0FURURfUkVGRVJFTkNFX0lOX1NJR05FRF9FTEVNRU5UUyA9IDEwOwogICAgY29uc3QgVU5FWFBFQ1RFRF9TSUdORURfRUxFTUVOVFMgPSAxMTsKICAgIGNvbnN0IFdST05HX05VTUJFUl9PRl9TSUdOQVRVUkVTX0lOX1JFU1BPTlNFID0gMTI7CiAgICBjb25zdCBXUk9OR19OVU1CRVJfT0ZfU0lHTkFUVVJFU19JTl9BU1NFUlRJT04gPSAxMzsKICAgIGNvbnN0IElOVkFMSURfWE1MX0ZPUk1BVCA9IDE0OwogICAgY29uc3QgV1JPTkdfSU5SRVNQT05TRVRPID0gMTU7CiAgICBjb25zdCBOT19FTkNSWVBURURfQVNTRVJUSU9OID0gMTY7CiAgICBjb25zdCBOT19FTkNSWVBURURfTkFNRUlEID0gMTc7CiAgICBjb25zdCBNSVNTSU5HX0NPTkRJVElPTlMgPSAxODsKICAgIGNvbnN0IEFTU0VSVElPTl9UT09fRUFSTFkgPSAxOTsKICAgIGNvbnN0IEFTU0VSVElPTl9FWFBJUkVEID0gMjA7CiAgICBjb25zdCBXUk9OR19OVU1CRVJfT0ZfQVVUSFNUQVRFTUVOVFMgPSAyMTsKICAgIGNvbnN0IE5PX0FUVFJJQlVURVNUQVRFTUVOVCA9IDIyOwogICAgY29uc3QgRU5DUllQVEVEX0FUVFJJQlVURVMgPSAyMzsKICAgIGNvbnN0IFdST05HX0RFU1RJTkFUSU9OID0gMjQ7CiAgICBjb25zdCBFTVBUWV9ERVNUSU5BVElPTiA9IDI1OwogICAgY29uc3QgV1JPTkdfQVVESUVOQ0UgPSAyNjsKICAgIGNvbnN0IElTU1VFUl9NVUxUSVBMRV9JTl9SRVNQT05TRSA9IDI3OwogICAgY29uc3QgSVNTVUVSX05PVF9GT1VORF9JTl9BU1NFUlRJT04gPSAyODsKICAgIGNvbnN0IFdST05HX0lTU1VFUiA9IDI5OwogICAgY29uc3QgU0VTU0lPTl9FWFBJUkVEID0gMzA7CiAgICBjb25zdCBXUk9OR19TVUJKRUNUQ09ORklSTUFUSU9OID0gMzE7CiAgICBjb25zdCBOT19TSUdORURfTUVTU0FHRSA9IDMyOwogICAgY29uc3QgTk9fU0lHTkVEX0FTU0VSVElPTiA9IDMzOwogICAgY29uc3QgTk9fU0lHTkFUVVJFX0ZPVU5EID0gMzQ7CiAgICBjb25zdCBLRVlJTkZPX05PVF9GT1VORF9JTl9FTkNSWVBURURfREFUQSA9IDM1OwogICAgY29uc3QgQ0hJTERSRU5fTk9ERV9OT1RfRk9VTkRfSU5fS0VZSU5GTyA9IDM2OwogICAgY29uc3QgVU5TVVBQT1JURURfUkVUUklFVkFMX01FVEhPRCA9IDM3OwogICAgY29uc3QgTk9fTkFNRUlEID0gMzg7CiAgICBjb25zdCBFTVBUWV9OQU1FSUQgPSAzOTsKICAgIGNvbnN0IFNQX05BTUVfUVVBTElGSUVSX05BTUVfTUlTTUFUQ0ggPSA0MDsKICAgIGNvbnN0IERVUExJQ0FURURfQVRUUklCVVRFX05BTUVfRk9VTkQgPSA0MTsKICAgIGNvbnN0IElOVkFMSURfU0lHTkFUVVJFID0gNDI7CiAgICBjb25zdCBXUk9OR19OVU1CRVJfT0ZfU0lHTkFUVVJFUyA9IDQzOwogICAgY29uc3QgUkVTUE9OU0VfRVhQSVJFRCA9IDQ0OwogICAgY29uc3QgVU5FWFBFQ1RFRF9SRUZFUkVOQ0UgPSA0NTsKICAgIGNvbnN0IE5PVF9TVVBQT1JURUQgPSA0NjsKICAgIGNvbnN0IEtFWV9BTEdPUklUSE1fRVJST1IgPSA0NzsKICAgIGNvbnN0IE1JU1NJTkdfRU5DUllQVEVEX0VMRU1FTlQgPSA0ODsKCgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RvcgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICRtc2cgIERlc2NyaWJlcyB0aGUgZXJyb3IuCiAgICAgKiBAcGFyYW0gaW50ICAgICAgICAkY29kZSBUaGUgY29kZSBlcnJvciAoZGVmaW5lZCBpbiB0aGUgZXJyb3IgY2xhc3MpLgogICAgICogQHBhcmFtIGFycmF5fG51bGwgJGFyZ3MgQXJndW1lbnRzIHVzZWQgaW4gdGhlIG1lc3NhZ2UgdGhhdCBkZXNjcmliZXMgdGhlIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG1zZywgJGNvZGUgPSAwLCAkYXJncyA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgYXNzZXJ0KGlzX3N0cmluZygkbXNnKSk7CiAgICAgICAgYXNzZXJ0KGlzX2ludCgkY29kZSkpOwoKICAgICAgICBpZiAoIWlzc2V0KCRhcmdzKSkgewogICAgICAgICAgICAkYXJncyA9IGFycmF5KCk7CiAgICAgICAgfQogICAgICAgIGlmICghZW1wdHkoJGFyZ3MpKSB7CiAgICAgICAgICAgICRwYXJhbXMgPSBhcnJheV9tZXJnZShhcnJheSgkbXNnKSwgJGFyZ3MpOwogICAgICAgICAgICAkbWVzc2FnZSA9IGNhbGxfdXNlcl9mdW5jX2FycmF5KCdzcHJpbnRmJywgJHBhcmFtcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSAkbXNnOwogICAgICAgIH0KCiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkbWVzc2FnZSwgJGNvZGUpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/version.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgInBocC1zYW1sIjogewogICAgICAgICJ2ZXJzaW9uIjogIjQuMy4yIiwKICAgICAgICAicmVsZWFzZWQiOiAiMDgvMDUvMjAyNiIKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/_toolkit_loader.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIENyZWF0ZSBhbiBfX2F1dG9sb2FkIGZ1bmN0aW9uCi8vIChjYW4gY29uZmxpY3RzIG90aGVyIGF1dG9sb2FkZXJzKQovLyBodHRwOi8vcGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2Uub29wNS5hdXRvbG9hZC5waHAKCi8vIExvYWQgY29tcG9zZXIgdmVuZG9yIGZvbGRlciBpZiBhbnkKaWYgKGZpbGVfZXhpc3RzKF9fRElSX18gLiAnL3ZlbmRvci9hdXRvbG9hZC5waHAnKSkgewogICAgcmVxdWlyZSBfX0RJUl9fIC4gJy92ZW5kb3IvYXV0b2xvYWQucGhwJzsKfQoKLyoKLy8gTG9hZCB4bWxzZWNsaWJzCgokeG1sc2VjbGlic1NyY0RpciA9ICcnOwoKaW5jbHVkZV9vbmNlICR4bWxzZWNsaWJzU3JjRGlyLicvWE1MU2VjRW5jLnBocCc7CmluY2x1ZGVfb25jZSAkeG1sc2VjbGlic1NyY0Rpci4nL1hNTFNlY3VyaXR5RFNpZy5waHAnOwppbmNsdWRlX29uY2UgJHhtbHNlY2xpYnNTcmNEaXIuJy9YTUxTZWN1cml0eUtleS5waHAnOwppbmNsdWRlX29uY2UgJHhtbHNlY2xpYnNTcmNEaXIuJy9VdGlscy9YUGF0aC5waHAnOwoqLwoKCi8vIExvYWQgcGhwLXNhbWwKJGxpYkRpciA9IF9fRElSX18gLiAnL3NyYy9TYW1sMi8nOwoKJGZvbGRlckluZm8gPSBzY2FuZGlyKCRsaWJEaXIpOwoKZm9yZWFjaCAoJGZvbGRlckluZm8gYXMgJGVsZW1lbnQpIHsKICAgIGlmIChpc19maWxlKCRsaWJEaXIuJGVsZW1lbnQpICYmIChzdWJzdHIoJGVsZW1lbnQsIC00KSA9PT0gJy5waHAnKSkgewogICAgICAgIGluY2x1ZGVfb25jZSAkbGliRGlyLiRlbGVtZW50OwogICAgfQp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/psr/http-client/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/psr/http-client/CHANGELOG.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBDaGFuZ2Vsb2cKCkFsbCBub3RhYmxlIGNoYW5nZXMgdG8gdGhpcyBwcm9qZWN0IHdpbGwgYmUgZG9jdW1lbnRlZCBpbiB0aGlzIGZpbGUsIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlciBieSByZWxlYXNlLgoKIyMgMS4wLjMKCkFkZCBgc291cmNlYCBsaW5rIGluIGNvbXBvc2VyLmpzb24uIE5vIGNvZGUgY2hhbmdlcy4KCiMjIDEuMC4yCgpBbGxvdyBQU1ItNyAocHNyL2h0dHAtbWVzc2FnZSkgMi4wLiBObyBjb2RlIGNoYW5nZXMuCgojIyAxLjAuMQoKQWxsb3cgaW5zdGFsbGF0aW9uIHdpdGggUEhQIDguIE5vIGNvZGUgY2hhbmdlcy4KCiMjIDEuMC4wCgpGaXJzdCBzdGFibGUgcmVsZWFzZS4gTm8gY2hhbmdlcyBzaW5jZSAwLjMuMC4KCiMjIDAuMy4wCgpBZGRlZCBJbnRlcmZhY2Ugc3VmZml4IG9uIGV4Y2VwdGlvbnMKIAojIyAwLjIuMCAKCkFsbCBleGNlcHRpb25zIGFyZSBpbiBgUHNyXEh0dHBcQ2xpZW50YCBuYW1lc3BhY2UKCiMjIDAuMS4wCgpGaXJzdCByZWxlYXNlCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-client/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAicHNyL2h0dHAtY2xpZW50IiwKICAgICJkZXNjcmlwdGlvbiI6ICJDb21tb24gaW50ZXJmYWNlIGZvciBIVFRQIGNsaWVudHMiLAogICAgImtleXdvcmRzIjogWyJwc3IiLCAicHNyLTE4IiwgImh0dHAiLCAiaHR0cC1jbGllbnQiXSwKICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9odHRwLWNsaWVudCIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJQSFAtRklHIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vd3d3LnBocC1maWcub3JnLyIKICAgICAgICB9CiAgICBdLAogICAgInN1cHBvcnQiOiB7CiAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9odHRwLWNsaWVudCIKICAgIH0sCiAgICAicmVxdWlyZSI6IHsKICAgICAgICAicGhwIjogIl43LjAgfHwgXjguMCIsCiAgICAgICAgInBzci9odHRwLW1lc3NhZ2UiOiAiXjEuMCB8fCBeMi4wIgogICAgfSwKICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICJQc3JcXEh0dHBcXENsaWVudFxcIjogInNyYy8iCiAgICAgICAgfQogICAgfSwKICAgICJleHRyYSI6IHsKICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjAueC1kZXYiCiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-client/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDE3IFBIUCBGcmFtZXdvcmsgSW50ZXJvcGVyYWJpbGl0eSBHcm91cAoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSAKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyAKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIApmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-client/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[SFRUUCBDbGllbnQKPT09PT09PT09PT0KClRoaXMgcmVwb3NpdG9yeSBob2xkcyBhbGwgdGhlIGNvbW1vbiBjb2RlIHJlbGF0ZWQgdG8gW1BTUi0xOCAoSFRUUCBDbGllbnQpXVtwc3ItdXJsXS4KCk5vdGUgdGhhdCB0aGlzIGlzIG5vdCBhIEhUVFAgQ2xpZW50IGltcGxlbWVudGF0aW9uIG9mIGl0cyBvd24uIEl0IGlzIG1lcmVseSBhYnN0cmFjdGlvbnMgdGhhdCBkZXNjcmliZSB0aGUgY29tcG9uZW50cyBvZiBhIEhUVFAgQ2xpZW50LgoKVGhlIGluc3RhbGxhYmxlIFtwYWNrYWdlXVtwYWNrYWdlLXVybF0gYW5kIFtpbXBsZW1lbnRhdGlvbnNdW2ltcGxlbWVudGF0aW9uLXVybF0gYXJlIGxpc3RlZCBvbiBQYWNrYWdpc3QuCgpbcHNyLXVybF06IGh0dHBzOi8vd3d3LnBocC1maWcub3JnL3Bzci9wc3ItMTgKW3BhY2thZ2UtdXJsXTogaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzL3Bzci9odHRwLWNsaWVudApbaW1wbGVtZW50YXRpb24tdXJsXTogaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3Byb3ZpZGVycy9wc3IvaHR0cC1jbGllbnQtaW1wbGVtZW50YXRpb24K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-client/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/psr/http-client/src/ClientExceptionInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxDbGllbnQ7CgovKioKICogRXZlcnkgSFRUUCBjbGllbnQgcmVsYXRlZCBleGNlcHRpb24gTVVTVCBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UuCiAqLwppbnRlcmZhY2UgQ2xpZW50RXhjZXB0aW9uSW50ZXJmYWNlIGV4dGVuZHMgXFRocm93YWJsZQp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-client/src/ClientInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxDbGllbnQ7Cgp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZTsKCmludGVyZmFjZSBDbGllbnRJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBTZW5kcyBhIFBTUi03IHJlcXVlc3QgYW5kIHJldHVybnMgYSBQU1ItNyByZXNwb25zZS4KICAgICAqCiAgICAgKiBAcGFyYW0gUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdAogICAgICoKICAgICAqIEByZXR1cm4gUmVzcG9uc2VJbnRlcmZhY2UKICAgICAqCiAgICAgKiBAdGhyb3dzIFxQc3JcSHR0cFxDbGllbnRcQ2xpZW50RXhjZXB0aW9uSW50ZXJmYWNlIElmIGFuIGVycm9yIGhhcHBlbnMgd2hpbGUgcHJvY2Vzc2luZyB0aGUgcmVxdWVzdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlbmRSZXF1ZXN0KFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QpOiBSZXNwb25zZUludGVyZmFjZTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-client/src/NetworkExceptionInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxDbGllbnQ7Cgp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwoKLyoqCiAqIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IGNhbm5vdCBiZSBjb21wbGV0ZWQgYmVjYXVzZSBvZiBuZXR3b3JrIGlzc3Vlcy4KICoKICogVGhlcmUgaXMgbm8gcmVzcG9uc2Ugb2JqZWN0IGFzIHRoaXMgZXhjZXB0aW9uIGlzIHRocm93biB3aGVuIG5vIHJlc3BvbnNlIGhhcyBiZWVuIHJlY2VpdmVkLgogKgogKiBFeGFtcGxlOiB0aGUgdGFyZ2V0IGhvc3QgbmFtZSBjYW4gbm90IGJlIHJlc29sdmVkIG9yIHRoZSBjb25uZWN0aW9uIGZhaWxlZC4KICovCmludGVyZmFjZSBOZXR3b3JrRXhjZXB0aW9uSW50ZXJmYWNlIGV4dGVuZHMgQ2xpZW50RXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmVxdWVzdC4KICAgICAqCiAgICAgKiBUaGUgcmVxdWVzdCBvYmplY3QgTUFZIGJlIGEgZGlmZmVyZW50IG9iamVjdCBmcm9tIHRoZSBvbmUgcGFzc2VkIHRvIENsaWVudEludGVyZmFjZTo6c2VuZFJlcXVlc3QoKQogICAgICoKICAgICAqIEByZXR1cm4gUmVxdWVzdEludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVxdWVzdCgpOiBSZXF1ZXN0SW50ZXJmYWNlOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-client/src/RequestExceptionInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxDbGllbnQ7Cgp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwoKLyoqCiAqIEV4Y2VwdGlvbiBmb3Igd2hlbiBhIHJlcXVlc3QgZmFpbGVkLgogKgogKiBFeGFtcGxlczoKICogICAgICAtIFJlcXVlc3QgaXMgaW52YWxpZCAoZS5nLiBtZXRob2QgaXMgbWlzc2luZykKICogICAgICAtIFJ1bnRpbWUgcmVxdWVzdCBlcnJvcnMgKGUuZy4gdGhlIGJvZHkgc3RyZWFtIGlzIG5vdCBzZWVrYWJsZSkKICovCmludGVyZmFjZSBSZXF1ZXN0RXhjZXB0aW9uSW50ZXJmYWNlIGV4dGVuZHMgQ2xpZW50RXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmVxdWVzdC4KICAgICAqCiAgICAgKiBUaGUgcmVxdWVzdCBvYmplY3QgTUFZIGJlIGEgZGlmZmVyZW50IG9iamVjdCBmcm9tIHRoZSBvbmUgcGFzc2VkIHRvIENsaWVudEludGVyZmFjZTo6c2VuZFJlcXVlc3QoKQogICAgICoKICAgICAqIEByZXR1cm4gUmVxdWVzdEludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVxdWVzdCgpOiBSZXF1ZXN0SW50ZXJmYWNlOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-factory/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/psr/http-factory/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAicHNyL2h0dHAtZmFjdG9yeSIsCiAgICAiZGVzY3JpcHRpb24iOiAiUFNSLTE3OiBDb21tb24gaW50ZXJmYWNlcyBmb3IgUFNSLTcgSFRUUCBtZXNzYWdlIGZhY3RvcmllcyIsCiAgICAia2V5d29yZHMiOiBbCiAgICAgICAgInBzciIsCiAgICAgICAgInBzci03IiwKICAgICAgICAicHNyLTE3IiwKICAgICAgICAiaHR0cCIsCiAgICAgICAgImZhY3RvcnkiLAogICAgICAgICJtZXNzYWdlIiwKICAgICAgICAicmVxdWVzdCIsCiAgICAgICAgInJlc3BvbnNlIgogICAgXSwKICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAiYXV0aG9ycyI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIlBIUC1GSUciLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly93d3cucGhwLWZpZy5vcmcvIgogICAgICAgIH0KICAgIF0sCiAgICAic3VwcG9ydCI6IHsKICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9waHAtZmlnL2h0dHAtZmFjdG9yeSIKICAgIH0sCiAgICAicmVxdWlyZSI6IHsKICAgICAgICAicGhwIjogIj49Ny4xIiwKICAgICAgICAicHNyL2h0dHAtbWVzc2FnZSI6ICJeMS4wIHx8IF4yLjAiCiAgICB9LAogICAgImF1dG9sb2FkIjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIlBzclxcSHR0cFxcTWVzc2FnZVxcIjogInNyYy8iCiAgICAgICAgfQogICAgfSwKICAgICJleHRyYSI6IHsKICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjAueC1kZXYiCiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-factory/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[TUlUIExpY2Vuc2UKCkNvcHlyaWdodCAoYykgMjAxOCBQSFAtRklHCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-factory/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[SFRUUCBGYWN0b3JpZXMKPT09PT09PT09PT09PT0KClRoaXMgcmVwb3NpdG9yeSBob2xkcyBhbGwgaW50ZXJmYWNlcyByZWxhdGVkIHRvIFtQU1ItMTcgKEhUVFAgRmFjdG9yaWVzKV1bcHNyLXVybF0uCgpOb3RlIHRoYXQgdGhpcyBpcyBub3QgYSBIVFRQIEZhY3RvcnkgaW1wbGVtZW50YXRpb24gb2YgaXRzIG93bi4gSXQgaXMgbWVyZWx5IGludGVyZmFjZXMgdGhhdCBkZXNjcmliZSB0aGUgY29tcG9uZW50cyBvZiBhIEhUVFAgRmFjdG9yeS4KClRoZSBpbnN0YWxsYWJsZSBbcGFja2FnZV1bcGFja2FnZS11cmxdIGFuZCBbaW1wbGVtZW50YXRpb25zXVtpbXBsZW1lbnRhdGlvbi11cmxdIGFyZSBsaXN0ZWQgb24gUGFja2FnaXN0LgoKW3Bzci11cmxdOiBodHRwczovL3d3dy5waHAtZmlnLm9yZy9wc3IvcHNyLTE3LwpbcGFja2FnZS11cmxdOiBodHRwczovL3BhY2thZ2lzdC5vcmcvcGFja2FnZXMvcHNyL2h0dHAtZmFjdG9yeQpbaW1wbGVtZW50YXRpb24tdXJsXTogaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3Byb3ZpZGVycy9wc3IvaHR0cC1mYWN0b3J5LWltcGxlbWVudGF0aW9uCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-factory/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/psr/http-factory/src/RequestFactoryInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxNZXNzYWdlOwoKaW50ZXJmYWNlIFJlcXVlc3RGYWN0b3J5SW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IHJlcXVlc3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWV0aG9kIFRoZSBIVFRQIG1ldGhvZCBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QuCiAgICAgKiBAcGFyYW0gVXJpSW50ZXJmYWNlfHN0cmluZyAkdXJpIFRoZSBVUkkgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0LiBJZgogICAgICogICAgIHRoZSB2YWx1ZSBpcyBhIHN0cmluZywgdGhlIGZhY3RvcnkgTVVTVCBjcmVhdGUgYSBVcmlJbnRlcmZhY2UKICAgICAqICAgICBpbnN0YW5jZSBiYXNlZCBvbiBpdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIFJlcXVlc3RJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZVJlcXVlc3Qoc3RyaW5nICRtZXRob2QsICR1cmkpOiBSZXF1ZXN0SW50ZXJmYWNlOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-factory/src/ResponseFactoryInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxNZXNzYWdlOwoKaW50ZXJmYWNlIFJlc3BvbnNlRmFjdG9yeUludGVyZmFjZQp7CiAgICAvKioKICAgICAqIENyZWF0ZSBhIG5ldyByZXNwb25zZS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRjb2RlIEhUVFAgc3RhdHVzIGNvZGU7IGRlZmF1bHRzIHRvIDIwMAogICAgICogQHBhcmFtIHN0cmluZyAkcmVhc29uUGhyYXNlIFJlYXNvbiBwaHJhc2UgdG8gYXNzb2NpYXRlIHdpdGggc3RhdHVzIGNvZGUKICAgICAqICAgICBpbiBnZW5lcmF0ZWQgcmVzcG9uc2U7IGlmIG5vbmUgaXMgcHJvdmlkZWQgaW1wbGVtZW50YXRpb25zIE1BWSB1c2UKICAgICAqICAgICB0aGUgZGVmYXVsdHMgYXMgc3VnZ2VzdGVkIGluIHRoZSBIVFRQIHNwZWNpZmljYXRpb24uCiAgICAgKgogICAgICogQHJldHVybiBSZXNwb25zZUludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlUmVzcG9uc2UoaW50ICRjb2RlID0gMjAwLCBzdHJpbmcgJHJlYXNvblBocmFzZSA9ICcnKTogUmVzcG9uc2VJbnRlcmZhY2U7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-factory/src/ServerRequestFactoryInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxNZXNzYWdlOwoKaW50ZXJmYWNlIFNlcnZlclJlcXVlc3RGYWN0b3J5SW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IHNlcnZlciByZXF1ZXN0LgogICAgICoKICAgICAqIE5vdGUgdGhhdCBzZXJ2ZXItcGFyYW1zIGFyZSB0YWtlbiBwcmVjaXNlbHkgYXMgZ2l2ZW4gLSBubyBwYXJzaW5nL3Byb2Nlc3NpbmcKICAgICAqIG9mIHRoZSBnaXZlbiB2YWx1ZXMgaXMgcGVyZm9ybWVkLCBhbmQsIGluIHBhcnRpY3VsYXIsIG5vIGF0dGVtcHQgaXMgbWFkZSB0bwogICAgICogZGV0ZXJtaW5lIHRoZSBIVFRQIG1ldGhvZCBvciBVUkksIHdoaWNoIG11c3QgYmUgcHJvdmlkZWQgZXhwbGljaXRseS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXRob2QgVGhlIEhUVFAgbWV0aG9kIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdC4KICAgICAqIEBwYXJhbSBVcmlJbnRlcmZhY2V8c3RyaW5nICR1cmkgVGhlIFVSSSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QuIElmCiAgICAgKiAgICAgdGhlIHZhbHVlIGlzIGEgc3RyaW5nLCB0aGUgZmFjdG9yeSBNVVNUIGNyZWF0ZSBhIFVyaUludGVyZmFjZQogICAgICogICAgIGluc3RhbmNlIGJhc2VkIG9uIGl0LgogICAgICogQHBhcmFtIGFycmF5ICRzZXJ2ZXJQYXJhbXMgQXJyYXkgb2YgU0FQSSBwYXJhbWV0ZXJzIHdpdGggd2hpY2ggdG8gc2VlZAogICAgICogICAgIHRoZSBnZW5lcmF0ZWQgcmVxdWVzdCBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFNlcnZlclJlcXVlc3RJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZVNlcnZlclJlcXVlc3Qoc3RyaW5nICRtZXRob2QsICR1cmksIGFycmF5ICRzZXJ2ZXJQYXJhbXMgPSBbXSk6IFNlcnZlclJlcXVlc3RJbnRlcmZhY2U7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-factory/src/StreamFactoryInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxNZXNzYWdlOwoKaW50ZXJmYWNlIFN0cmVhbUZhY3RvcnlJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgc3RyZWFtIGZyb20gYSBzdHJpbmcuCiAgICAgKgogICAgICogVGhlIHN0cmVhbSBTSE9VTEQgYmUgY3JlYXRlZCB3aXRoIGEgdGVtcG9yYXJ5IHJlc291cmNlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvbnRlbnQgU3RyaW5nIGNvbnRlbnQgd2l0aCB3aGljaCB0byBwb3B1bGF0ZSB0aGUgc3RyZWFtLgogICAgICoKICAgICAqIEByZXR1cm4gU3RyZWFtSW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVTdHJlYW0oc3RyaW5nICRjb250ZW50ID0gJycpOiBTdHJlYW1JbnRlcmZhY2U7CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBzdHJlYW0gZnJvbSBhbiBleGlzdGluZyBmaWxlLgogICAgICoKICAgICAqIFRoZSBmaWxlIE1VU1QgYmUgb3BlbmVkIHVzaW5nIHRoZSBnaXZlbiBtb2RlLCB3aGljaCBtYXkgYmUgYW55IG1vZGUKICAgICAqIHN1cHBvcnRlZCBieSB0aGUgYGZvcGVuYCBmdW5jdGlvbi4KICAgICAqCiAgICAgKiBUaGUgYCRmaWxlbmFtZWAgTUFZIGJlIGFueSBzdHJpbmcgc3VwcG9ydGVkIGJ5IGBmb3BlbigpYC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBGaWxlbmFtZSBvciBzdHJlYW0gVVJJIHRvIHVzZSBhcyBiYXNpcyBvZiBzdHJlYW0uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtb2RlIE1vZGUgd2l0aCB3aGljaCB0byBvcGVuIHRoZSB1bmRlcmx5aW5nIGZpbGVuYW1lL3N0cmVhbS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFN0cmVhbUludGVyZmFjZQogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBJZiB0aGUgZmlsZSBjYW5ub3QgYmUgb3BlbmVkLgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIElmIHRoZSBtb2RlIGlzIGludmFsaWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVTdHJlYW1Gcm9tRmlsZShzdHJpbmcgJGZpbGVuYW1lLCBzdHJpbmcgJG1vZGUgPSAncicpOiBTdHJlYW1JbnRlcmZhY2U7CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgc3RyZWFtIGZyb20gYW4gZXhpc3RpbmcgcmVzb3VyY2UuCiAgICAgKgogICAgICogVGhlIHN0cmVhbSBNVVNUIGJlIHJlYWRhYmxlIGFuZCBtYXkgYmUgd3JpdGFibGUuCiAgICAgKgogICAgICogQHBhcmFtIHJlc291cmNlICRyZXNvdXJjZSBQSFAgcmVzb3VyY2UgdG8gdXNlIGFzIGJhc2lzIG9mIHN0cmVhbS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFN0cmVhbUludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlU3RyZWFtRnJvbVJlc291cmNlKCRyZXNvdXJjZSk6IFN0cmVhbUludGVyZmFjZTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-factory/src/UploadedFileFactoryInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxNZXNzYWdlOwoKaW50ZXJmYWNlIFVwbG9hZGVkRmlsZUZhY3RvcnlJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgdXBsb2FkZWQgZmlsZS4KICAgICAqCiAgICAgKiBJZiBhIHNpemUgaXMgbm90IHByb3ZpZGVkIGl0IHdpbGwgYmUgZGV0ZXJtaW5lZCBieSBjaGVja2luZyB0aGUgc2l6ZSBvZgogICAgICogdGhlIGZpbGUuCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vcGhwLm5ldC9tYW51YWwvZmVhdHVyZXMuZmlsZS11cGxvYWQucG9zdC1tZXRob2QucGhwCiAgICAgKiBAc2VlIGh0dHA6Ly9waHAubmV0L21hbnVhbC9mZWF0dXJlcy5maWxlLXVwbG9hZC5lcnJvcnMucGhwCiAgICAgKgogICAgICogQHBhcmFtIFN0cmVhbUludGVyZmFjZSAkc3RyZWFtIFVuZGVybHlpbmcgc3RyZWFtIHJlcHJlc2VudGluZyB0aGUKICAgICAqICAgICB1cGxvYWRlZCBmaWxlIGNvbnRlbnQuCiAgICAgKiBAcGFyYW0gaW50fG51bGwgJHNpemUgaW4gYnl0ZXMKICAgICAqIEBwYXJhbSBpbnQgJGVycm9yIFBIUCBmaWxlIHVwbG9hZCBlcnJvcgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRjbGllbnRGaWxlbmFtZSBGaWxlbmFtZSBhcyBwcm92aWRlZCBieSB0aGUgY2xpZW50LCBpZiBhbnkuCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGNsaWVudE1lZGlhVHlwZSBNZWRpYSB0eXBlIGFzIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQsIGlmIGFueS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFVwbG9hZGVkRmlsZUludGVyZmFjZQogICAgICoKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiB0aGUgZmlsZSByZXNvdXJjZSBpcyBub3QgcmVhZGFibGUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVVcGxvYWRlZEZpbGUoCiAgICAgICAgU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0sCiAgICAgICAgP2ludCAkc2l6ZSA9IG51bGwsCiAgICAgICAgaW50ICRlcnJvciA9IFxVUExPQURfRVJSX09LLAogICAgICAgID9zdHJpbmcgJGNsaWVudEZpbGVuYW1lID0gbnVsbCwKICAgICAgICA/c3RyaW5nICRjbGllbnRNZWRpYVR5cGUgPSBudWxsCiAgICApOiBVcGxvYWRlZEZpbGVJbnRlcmZhY2U7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-factory/src/UriFactoryInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxNZXNzYWdlOwoKaW50ZXJmYWNlIFVyaUZhY3RvcnlJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgVVJJLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHVyaQogICAgICoKICAgICAqIEByZXR1cm4gVXJpSW50ZXJmYWNlCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIElmIHRoZSBnaXZlbiBVUkkgY2Fubm90IGJlIHBhcnNlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZVVyaShzdHJpbmcgJHVyaSA9ICcnKTogVXJpSW50ZXJmYWNlOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/CHANGELOG.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBDaGFuZ2Vsb2cKCkFsbCBub3RhYmxlIGNoYW5nZXMgdG8gdGhpcyBwcm9qZWN0IHdpbGwgYmUgZG9jdW1lbnRlZCBpbiB0aGlzIGZpbGUsIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlciBieSByZWxlYXNlLgoKIyMgMS4wLjEgLSAyMDE2LTA4LTA2CgojIyMgQWRkZWQKCi0gTm90aGluZy4KCiMjIyBEZXByZWNhdGVkCgotIE5vdGhpbmcuCgojIyMgUmVtb3ZlZAoKLSBOb3RoaW5nLgoKIyMjIEZpeGVkCgotIFVwZGF0ZWQgYWxsIGBAcmV0dXJuIHNlbGZgIGFubm90YXRpb24gcmVmZXJlbmNlcyBpbiBpbnRlcmZhY2VzIHRvIHVzZQogIGBAcmV0dXJuIHN0YXRpY2AsIHdoaWNoIG1vcmUgY2xvc2VsbHkgZm9sbG93cyB0aGUgc2VtYW50aWNzIG9mIHRoZQogIHNwZWNpZmljYXRpb24uCi0gVXBkYXRlZCB0aGUgYE1lc3NhZ2VJbnRlcmZhY2U6OmdldEhlYWRlcnMoKWAgcmV0dXJuIGFubm90YXRpb24gdG8gdXNlIHRoZQogIHZhbHVlIGBzdHJpbmdbXVtdYCwgaW5kaWNhdGluZyB0aGUgZm9ybWF0IGlzIGEgbmVzdGVkIGFycmF5IG9mIHN0cmluZ3MuCi0gVXBkYXRlZCB0aGUgYEBsaW5rYCBhbm5vdGF0aW9uIGZvciBgUmVxdWVzdEludGVyZmFjZTo6d2l0aFJlcXVlc3RUYXJnZXQoKWAKICB0byBwb2ludCB0byB0aGUgY29ycmVjdCBzZWN0aW9uIG9mIFJGQyA3MjMwLgotIFVwZGF0ZWQgdGhlIGBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlOjp3aXRoVXBsb2FkZWRGaWxlcygpYCBwYXJhbWV0ZXIgYW5ub3RhdGlvbgogIHRvIGFkZCB0aGUgcGFyYW1ldGVyIG5hbWUgKGAkdXBsb2FkZWRGaWxlc2ApLgotIFVwZGF0ZWQgYSBgQHRocm93c2AgYW5ub3RhdGlvbiBmb3IgdGhlIGBVcGxvYWRlZEZpbGVJbnRlcmZhY2U6Om1vdmVUbygpYAogIG1ldGhvZCB0byBjb3JyZWN0bHkgcmVmZXJlbmNlIHRoZSBtZXRob2QgcGFyYW1ldGVyIChpdCB3YXMgcmVmZXJlbmNpbmcgYW4KICBpbmNvcnJlY3QgcGFyYW1ldGVyIG5hbWUgcHJldmlvdXNseSkuCgojIyAxLjAuMCAtIDIwMTYtMDUtMTgKCkluaXRpYWwgc3RhYmxlIHJlbGVhc2U7IHJlZmxlY3RzIGFjY2VwdGVkIFBTUi03IHNwZWNpZmljYXRpb24uCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAicHNyL2h0dHAtbWVzc2FnZSIsCiAgICAiZGVzY3JpcHRpb24iOiAiQ29tbW9uIGludGVyZmFjZSBmb3IgSFRUUCBtZXNzYWdlcyIsCiAgICAia2V5d29yZHMiOiBbInBzciIsICJwc3ItNyIsICJodHRwIiwgImh0dHAtbWVzc2FnZSIsICJyZXF1ZXN0IiwgInJlc3BvbnNlIl0sCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvaHR0cC1tZXNzYWdlIiwKICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAiYXV0aG9ycyI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIlBIUC1GSUciLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cDovL3d3dy5waHAtZmlnLm9yZy8iCiAgICAgICAgfQogICAgXSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiOiAiXjcuMiB8fCBeOC4wIgogICAgfSwKICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICJQc3JcXEh0dHBcXE1lc3NhZ2VcXCI6ICJzcmMvIgogICAgICAgIH0KICAgIH0sCiAgICAiZXh0cmEiOiB7CiAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMS4xLngtZGV2IgogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/docs/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/docs/PSR7-Interfaces.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBJbnRlcmZhY2VzCgpUaGUgcHVycG9zZSBvZiB0aGlzIGxpc3QgaXMgdG8gaGVscCBpbiBmaW5kaW5nIHRoZSBtZXRob2RzIHdoZW4gd29ya2luZyB3aXRoIFBTUi03LiBUaGlzIGNhbiBiZSBjb25zaWRlcmVkIGFzIGEgY2hlYXRzaGVldCBmb3IgUFNSLTcgaW50ZXJmYWNlcy4KClRoZSBpbnRlcmZhY2VzIGRlZmluZWQgaW4gUFNSLTcgYXJlIHRoZSBmb2xsb3dpbmc6Cgp8IENsYXNzIE5hbWUgfCBEZXNjcmlwdGlvbiB8CnwtLS18LS0tfAp8IFtQc3JcSHR0cFxNZXNzYWdlXE1lc3NhZ2VJbnRlcmZhY2VdKGh0dHA6Ly93d3cucGhwLWZpZy5vcmcvcHNyL3Bzci03LyNwc3JodHRwbWVzc2FnZW1lc3NhZ2VpbnRlcmZhY2UpIHwgUmVwcmVzZW50YXRpb24gb2YgYSBIVFRQIG1lc3NhZ2UgfAp8IFtQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2VdKGh0dHA6Ly93d3cucGhwLWZpZy5vcmcvcHNyL3Bzci03LyNwc3JodHRwbWVzc2FnZXJlcXVlc3RpbnRlcmZhY2UpIHwgUmVwcmVzZW50YXRpb24gb2YgYW4gb3V0Z29pbmcsIGNsaWVudC1zaWRlIHJlcXVlc3QuIHwKfCBbUHNyXEh0dHBcTWVzc2FnZVxTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlXShodHRwOi8vd3d3LnBocC1maWcub3JnL3Bzci9wc3ItNy8jcHNyaHR0cG1lc3NhZ2VzZXJ2ZXJyZXF1ZXN0aW50ZXJmYWNlKSB8IFJlcHJlc2VudGF0aW9uIG9mIGFuIGluY29taW5nLCBzZXJ2ZXItc2lkZSBIVFRQIHJlcXVlc3QuIHwgCnwgW1BzclxIdHRwXE1lc3NhZ2VcUmVzcG9uc2VJbnRlcmZhY2VdKGh0dHA6Ly93d3cucGhwLWZpZy5vcmcvcHNyL3Bzci03LyNwc3JodHRwbWVzc2FnZXJlc3BvbnNlaW50ZXJmYWNlKSB8IFJlcHJlc2VudGF0aW9uIG9mIGFuIG91dGdvaW5nLCBzZXJ2ZXItc2lkZSByZXNwb25zZS4gfAp8IFtQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZV0oaHR0cDovL3d3dy5waHAtZmlnLm9yZy9wc3IvcHNyLTcvI3Bzcmh0dHBtZXNzYWdlc3RyZWFtaW50ZXJmYWNlKSB8IERlc2NyaWJlcyBhIGRhdGEgc3RyZWFtIHwKfCBbUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2VdKGh0dHA6Ly93d3cucGhwLWZpZy5vcmcvcHNyL3Bzci03LyNwc3JodHRwbWVzc2FnZXVyaWludGVyZmFjZSkgfCBWYWx1ZSBvYmplY3QgcmVwcmVzZW50aW5nIGEgVVJJLiB8CnwgW1BzclxIdHRwXE1lc3NhZ2VcVXBsb2FkZWRGaWxlSW50ZXJmYWNlXShodHRwOi8vd3d3LnBocC1maWcub3JnL3Bzci9wc3ItNy8jcHNyaHR0cG1lc3NhZ2V1cGxvYWRlZGZpbGVpbnRlcmZhY2UpIHwgVmFsdWUgb2JqZWN0IHJlcHJlc2VudGluZyBhIGZpbGUgdXBsb2FkZWQgdGhyb3VnaCBhbiBIVFRQIHJlcXVlc3QuIHwKCiMjIGBQc3JcSHR0cFxNZXNzYWdlXE1lc3NhZ2VJbnRlcmZhY2VgIE1ldGhvZHMKCnwgTWV0aG9kIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uIHwgTm90ZXMgfAp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0tLSB8IC0tLS0tIHwKfCBgZ2V0UHJvdG9jb2xWZXJzaW9uKClgICAgICAgICAgICAgIHwgUmV0cmlldmUgSFRUUCBwcm90b2NvbCB2ZXJzaW9uICAgICAgICAgIHwgIDEuMCBvciAxLjEgfAp8IGB3aXRoUHJvdG9jb2xWZXJzaW9uKCR2ZXJzaW9uKWAgICAgfCBSZXR1cm5zIG5ldyBtZXNzYWdlIGluc3RhbmNlIHdpdGggZ2l2ZW4gSFRUUCBwcm90b2NvbCB2ZXJzaW9uICAgICAgICAgIHwgICAgICB8CnwgYGdldEhlYWRlcnMoKWAgICAgICAgICAgICAgICAgICAgICB8IFJldHJpZXZlIGFsbCBIVFRQIEhlYWRlcnMgICAgICAgICAgICAgICB8IFtSZXF1ZXN0IEhlYWRlciBMaXN0XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaXN0X29mX0hUVFBfaGVhZGVyX2ZpZWxkcyNSZXF1ZXN0X2ZpZWxkcyksIFtSZXNwb25zZSBIZWFkZXIgTGlzdF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGlzdF9vZl9IVFRQX2hlYWRlcl9maWVsZHMjUmVzcG9uc2VfZmllbGRzKSAgICAgIHwKfCBgaGFzSGVhZGVyKCRuYW1lKWAgICAgICAgICAgICAgICAgIHwgQ2hlY2tzIGlmIEhUVFAgSGVhZGVyIHdpdGggZ2l2ZW4gbmFtZSBleGlzdHMgIHwgfAp8IGBnZXRIZWFkZXIoJG5hbWUpYCAgICAgICAgICAgICAgICAgfCBSZXRyaWV2ZXMgYSBhcnJheSB3aXRoIHRoZSB2YWx1ZXMgZm9yIGEgc2luZ2xlIGhlYWRlciB8IHwKfCBgZ2V0SGVhZGVyTGluZSgkbmFtZSlgICAgICAgICAgICAgIHwgUmV0cmlldmVzIGEgY29tbWEtc2VwYXJhdGVkIHN0cmluZyBvZiB0aGUgdmFsdWVzIGZvciBhIHNpbmdsZSBoZWFkZXIgfCAgfAp8IGB3aXRoSGVhZGVyKCRuYW1lLCAkdmFsdWUpYCAgICAgICAgfCBSZXR1cm5zIG5ldyBtZXNzYWdlIGluc3RhbmNlIHdpdGggZ2l2ZW4gSFRUUCBIZWFkZXIgfCBpZiB0aGUgaGVhZGVyIGV4aXN0ZWQgaW4gdGhlIG9yaWdpbmFsIGluc3RhbmNlLCByZXBsYWNlcyB0aGUgaGVhZGVyIHZhbHVlIGZyb20gdGhlIG9yaWdpbmFsIG1lc3NhZ2Ugd2l0aCB0aGUgdmFsdWUgcHJvdmlkZWQgd2hlbiBjcmVhdGluZyB0aGUgbmV3IGluc3RhbmNlLiB8CnwgYHdpdGhBZGRlZEhlYWRlcigkbmFtZSwgJHZhbHVlKWAgICB8IFJldHVybnMgbmV3IG1lc3NhZ2UgaW5zdGFuY2Ugd2l0aCBhcHBlbmRlZCB2YWx1ZSB0byBnaXZlbiBoZWFkZXIgfCBJZiBoZWFkZXIgYWxyZWFkeSBleGlzdHMgdmFsdWUgd2lsbCBiZSBhcHBlbmRlZCwgaWYgbm90IGEgbmV3IGhlYWRlciB3aWxsIGJlIGNyZWF0ZWQgfAp8IGB3aXRob3V0SGVhZGVyKCRuYW1lKWAgICAgICAgICAgICAgfCBSZW1vdmVzIEhUVFAgSGVhZGVyIHdpdGggZ2l2ZW4gbmFtZXwgfAp8IGBnZXRCb2R5KClgICAgICAgICAgICAgICAgICAgICAgICAgfCBSZXRyaWV2ZXMgdGhlIEhUVFAgTWVzc2FnZSBCb2R5IHwgUmV0dXJucyBvYmplY3QgaW1wbGVtZW50aW5nIGBTdHJlYW1JbnRlcmZhY2VgfAp8IGB3aXRoQm9keShTdHJlYW1JbnRlcmZhY2UgJGJvZHkpYCAgfCBSZXR1cm5zIG5ldyBtZXNzYWdlIGluc3RhbmNlIHdpdGggZ2l2ZW4gSFRUUCBNZXNzYWdlIEJvZHkgfCB8CgoKIyMgYFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZWAgTWV0aG9kcwoKU2FtZSBtZXRob2RzIGFzIGBQc3JcSHR0cFxNZXNzYWdlXE1lc3NhZ2VJbnRlcmZhY2VgICArIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKCnwgTWV0aG9kIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uIHwgTm90ZXMgfAp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0tLSB8IC0tLS0tIHwKfCBgZ2V0UmVxdWVzdFRhcmdldCgpYCAgICAgICAgICAgICAgICB8IFJldHJpZXZlcyB0aGUgbWVzc2FnZSdzIHJlcXVlc3QgdGFyZ2V0ICAgICAgICAgICAgICB8IG9yaWdpbi1mb3JtLCBhYnNvbHV0ZS1mb3JtLCBhdXRob3JpdHktZm9ybSwgYXN0ZXJpc2stZm9ybSAoW1JGQzcyMzBdKGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMwLnR4dCkpIHwKfCBgd2l0aFJlcXVlc3RUYXJnZXQoJHJlcXVlc3RUYXJnZXQpYCB8IFJldHVybiBhIG5ldyBtZXNzYWdlIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmljIHJlcXVlc3QtdGFyZ2V0IHwgICAgICB8CnwgYGdldE1ldGhvZCgpYCAgICAgICAgICAgICAgICAgICAgICAgfCBSZXRyaWV2ZXMgdGhlIEhUVFAgbWV0aG9kIG9mIHRoZSByZXF1ZXN0LiAgfCAgR0VULCBIRUFELCBQT1NULCBQVVQsIERFTEVURSwgQ09OTkVDVCwgT1BUSU9OUywgVFJBQ0UgKGRlZmluZWQgaW4gW1JGQzcyMzFdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxKSksIFBBVENIIChkZWZpbmVkIGluIFtSRkM1Nzg5XShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTc4OSkpIHwKfCBgd2l0aE1ldGhvZCgkbWV0aG9kKWAgICAgICAgICAgICAgICB8IFJldHVybnMgYSBuZXcgbWVzc2FnZSBpbnN0YW5jZSB3aXRoIHRoZSBwcm92aWRlZCBIVFRQIG1ldGhvZCAgfCB8CnwgYGdldFVyaSgpYCAgICAgICAgICAgICAgICAgfCBSZXRyaWV2ZXMgdGhlIFVSSSBpbnN0YW5jZSB8IHwKfCBgd2l0aFVyaShVcmlJbnRlcmZhY2UgJHVyaSwgJHByZXNlcnZlSG9zdCA9IGZhbHNlKWAgfCBSZXR1cm5zIGEgbmV3IG1lc3NhZ2UgaW5zdGFuY2Ugd2l0aCB0aGUgcHJvdmlkZWQgVVJJIHwgIHwKCgojIyBgUHNyXEh0dHBcTWVzc2FnZVxTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlYCBNZXRob2RzCgpTYW1lIG1ldGhvZHMgYXMgYFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZWAgICsgdGhlIGZvbGxvd2luZyBtZXRob2RzOgoKfCBNZXRob2QgTmFtZSAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gfCBOb3RlcyB8CnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLS0tIHwgLS0tLS0gfAp8IGBnZXRTZXJ2ZXJQYXJhbXMoKSBgICAgICAgICAgICAgICAgfCBSZXRyaWV2ZSBzZXJ2ZXIgcGFyYW1ldGVycyAgfCBUeXBpY2FsbHkgZGVyaXZlZCBmcm9tIGAkX1NFUlZFUmAgIHwKfCBgZ2V0Q29va2llUGFyYW1zKClgICAgICAgICAgICAgICAgIHwgUmV0cmlldmVzIGNvb2tpZXMgc2VudCBieSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXIuIHwgVHlwaWNhbGx5IGRlcml2ZWQgZnJvbSBgJF9DT09LSUVTYCB8CnwgYHdpdGhDb29raWVQYXJhbXMoYXJyYXkgJGNvb2tpZXMpYCB8ICBSZXR1cm5zIGEgbmV3IHJlcXVlc3QgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGNvb2tpZXMgICAgICB8ICAgfCAKfCBgd2l0aFF1ZXJ5UGFyYW1zKGFycmF5ICRxdWVyeSlgIHwgUmV0dXJucyBhIG5ldyByZXF1ZXN0IGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBxdWVyeSBzdHJpbmcgYXJndW1lbnRzICB8ICB8CnwgYGdldFVwbG9hZGVkRmlsZXMoKWAgfCBSZXRyaWV2ZSBub3JtYWxpemVkIGZpbGUgdXBsb2FkIGRhdGEgIHwgIHwKfCBgd2l0aFVwbG9hZGVkRmlsZXMoYXJyYXkgJHVwbG9hZGVkRmlsZXMpYCB8IFJldHVybnMgYSBuZXcgcmVxdWVzdCBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgdXBsb2FkZWQgZmlsZXMgIHwgIHwKfCBgZ2V0UGFyc2VkQm9keSgpYCB8IFJldHJpZXZlIGFueSBwYXJhbWV0ZXJzIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0IGJvZHkgIHwgIHwKfCBgd2l0aFBhcnNlZEJvZHkoJGRhdGEpYCB8IFJldHVybnMgYSBuZXcgcmVxdWVzdCBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgYm9keSBwYXJhbWV0ZXJzICB8ICB8CnwgYGdldEF0dHJpYnV0ZXMoKWAgfCBSZXRyaWV2ZSBhdHRyaWJ1dGVzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdCAgfCAgfAp8IGBnZXRBdHRyaWJ1dGUoJG5hbWUsICRkZWZhdWx0ID0gbnVsbClgIHwgUmV0cmlldmUgYSBzaW5nbGUgZGVyaXZlZCByZXF1ZXN0IGF0dHJpYnV0ZSAgfCAgfAp8IGB3aXRoQXR0cmlidXRlKCRuYW1lLCAkdmFsdWUpYCB8IFJldHVybnMgYSBuZXcgcmVxdWVzdCBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgZGVyaXZlZCByZXF1ZXN0IGF0dHJpYnV0ZSAgfCAgfAp8IGB3aXRob3V0QXR0cmlidXRlKCRuYW1lKWAgfCBSZXR1cm5zIGEgbmV3IHJlcXVlc3QgaW5zdGFuY2UgdGhhdCB3aXRob3V0IHRoZSBzcGVjaWZpZWQgZGVyaXZlZCByZXF1ZXN0IGF0dHJpYnV0ZSAgfCAgfAoKIyMgYFBzclxIdHRwXE1lc3NhZ2VcUmVzcG9uc2VJbnRlcmZhY2VgIE1ldGhvZHM6CgpTYW1lIG1ldGhvZHMgYXMgYFBzclxIdHRwXE1lc3NhZ2VcTWVzc2FnZUludGVyZmFjZWAgICsgdGhlIGZvbGxvd2luZyBtZXRob2RzOgoKfCBNZXRob2QgTmFtZSAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gfCBOb3RlcyB8CnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLS0tIHwgLS0tLS0gfAp8IGBnZXRTdGF0dXNDb2RlKClgIHwgR2V0cyB0aGUgcmVzcG9uc2Ugc3RhdHVzIGNvZGUuIHwgfAp8IGB3aXRoU3RhdHVzKCRjb2RlLCAkcmVhc29uUGhyYXNlID0gJycpYCB8IFJldHVybnMgYSBuZXcgcmVzcG9uc2UgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHN0YXR1cyBjb2RlIGFuZCwgb3B0aW9uYWxseSwgcmVhc29uIHBocmFzZS4gfCB8CnwgYGdldFJlYXNvblBocmFzZSgpYCB8IEdldHMgdGhlIHJlc3BvbnNlIHJlYXNvbiBwaHJhc2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGF0dXMgY29kZS4gfCB8CgojIyAgYFBzclxIdHRwXE1lc3NhZ2VcU3RyZWFtSW50ZXJmYWNlYCBNZXRob2RzCgp8IE1ldGhvZCBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiB8IE5vdGVzIHwKfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tLS0gfCAtLS0tLSB8CnwgYF9fdG9TdHJpbmcoKWAgfCBSZWFkcyBhbGwgZGF0YSBmcm9tIHRoZSBzdHJlYW0gaW50byBhIHN0cmluZywgZnJvbSB0aGUgYmVnaW5uaW5nIHRvIGVuZC4gfCB8CnwgYGNsb3NlKClgIHwgQ2xvc2VzIHRoZSBzdHJlYW0gYW5kIGFueSB1bmRlcmx5aW5nIHJlc291cmNlcy4gfCB8CnwgYGRldGFjaCgpYCB8IFNlcGFyYXRlcyBhbnkgdW5kZXJseWluZyByZXNvdXJjZXMgZnJvbSB0aGUgc3RyZWFtLiB8IHwKfCBgZ2V0U2l6ZSgpYCB8IEdldCB0aGUgc2l6ZSBvZiB0aGUgc3RyZWFtIGlmIGtub3duLiB8IHwKfCBgZW9mKClgIHwgUmV0dXJucyB0cnVlIGlmIHRoZSBzdHJlYW0gaXMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLnwgfAp8IGBpc1NlZWthYmxlKClgIHwgIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHN0cmVhbSBpcyBzZWVrYWJsZS4gfCB8CnwgYHNlZWsoJG9mZnNldCwgJHdoZW5jZSA9IFNFRUtfU0VUKWAgfCBTZWVrIHRvIGEgcG9zaXRpb24gaW4gdGhlIHN0cmVhbS4gfCB8CnwgYHJld2luZCgpYCB8IFNlZWsgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyZWFtLiB8IHwKfCBgaXNXcml0YWJsZSgpYCB8IFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHN0cmVhbSBpcyB3cml0YWJsZS4gfCB8CnwgYHdyaXRlKCRzdHJpbmcpYCB8IFdyaXRlIGRhdGEgdG8gdGhlIHN0cmVhbS4gfCB8CnwgYGlzUmVhZGFibGUoKWAgfCBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBzdHJlYW0gaXMgcmVhZGFibGUuIHwgfAp8IGByZWFkKCRsZW5ndGgpYCB8IFJlYWQgZGF0YSBmcm9tIHRoZSBzdHJlYW0uIHwgfAp8IGBnZXRDb250ZW50cygpYCB8IFJldHVybnMgdGhlIHJlbWFpbmluZyBjb250ZW50cyBpbiBhIHN0cmluZyB8IHwKfCBgZ2V0TWV0YWRhdGEoJGtleSA9IG51bGwpKClgIHwgR2V0IHN0cmVhbSBtZXRhZGF0YSBhcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvciByZXRyaWV2ZSBhIHNwZWNpZmljIGtleS4gfCB8CgojIyBgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2VgIE1ldGhvZHMKCnwgTWV0aG9kIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uIHwgTm90ZXMgfAp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0tLSB8IC0tLS0tIHwKfCBgZ2V0U2NoZW1lKClgIHwgUmV0cmlldmUgdGhlIHNjaGVtZSBjb21wb25lbnQgb2YgdGhlIFVSSS4gfCB8CnwgYGdldEF1dGhvcml0eSgpYCB8IFJldHJpZXZlIHRoZSBhdXRob3JpdHkgY29tcG9uZW50IG9mIHRoZSBVUkkuIHwgfAp8IGBnZXRVc2VySW5mbygpYCB8IFJldHJpZXZlIHRoZSB1c2VyIGluZm9ybWF0aW9uIGNvbXBvbmVudCBvZiB0aGUgVVJJLiB8IHwKfCBgZ2V0SG9zdCgpYCB8IFJldHJpZXZlIHRoZSBob3N0IGNvbXBvbmVudCBvZiB0aGUgVVJJLiB8IHwKfCBgZ2V0UG9ydCgpYCB8IFJldHJpZXZlIHRoZSBwb3J0IGNvbXBvbmVudCBvZiB0aGUgVVJJLiB8IHwKfCBgZ2V0UGF0aCgpYCB8IFJldHJpZXZlIHRoZSBwYXRoIGNvbXBvbmVudCBvZiB0aGUgVVJJLiB8IHwKfCBgZ2V0UXVlcnkoKWAgfCBSZXRyaWV2ZSB0aGUgcXVlcnkgc3RyaW5nIG9mIHRoZSBVUkkuIHwgfAp8IGBnZXRGcmFnbWVudCgpYCB8IFJldHJpZXZlIHRoZSBmcmFnbWVudCBjb21wb25lbnQgb2YgdGhlIFVSSS4gfCB8CnwgYHdpdGhTY2hlbWUoJHNjaGVtZSlgIHwgUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBzY2hlbWUuIHwgfAp8IGB3aXRoVXNlckluZm8oJHVzZXIsICRwYXNzd29yZCA9IG51bGwpYCB8IFJldHVybiBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgdXNlciBpbmZvcm1hdGlvbi4gfCB8CnwgYHdpdGhIb3N0KCRob3N0KWAgfCBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGhvc3QuIHwgfAp8IGB3aXRoUG9ydCgkcG9ydClgIHwgUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBwb3J0LiB8IHwKfCBgd2l0aFBhdGgoJHBhdGgpYCB8IFJldHVybiBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgcGF0aC4gfCB8CnwgYHdpdGhRdWVyeSgkcXVlcnkpYCB8IFJldHVybiBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgcXVlcnkgc3RyaW5nLiB8IHwKfCBgd2l0aEZyYWdtZW50KCRmcmFnbWVudClgIHwgUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBVUkkgZnJhZ21lbnQuIHwgfAp8IGBfX3RvU3RyaW5nKClgIHwgUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gYXMgYSBVUkkgcmVmZXJlbmNlLiB8IHwKCiMjIGBQc3JcSHR0cFxNZXNzYWdlXFVwbG9hZGVkRmlsZUludGVyZmFjZWAgTWV0aG9kcwoKfCBNZXRob2QgTmFtZSAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gfCBOb3RlcyB8CnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLS0tIHwgLS0tLS0gfAp8IGBnZXRTdHJlYW0oKWAgfCBSZXRyaWV2ZSBhIHN0cmVhbSByZXByZXNlbnRpbmcgdGhlIHVwbG9hZGVkIGZpbGUuIHwgfAp8IGBtb3ZlVG8oJHRhcmdldFBhdGgpYCB8IE1vdmUgdGhlIHVwbG9hZGVkIGZpbGUgdG8gYSBuZXcgbG9jYXRpb24uIHwgfAp8IGBnZXRTaXplKClgIHwgUmV0cmlldmUgdGhlIGZpbGUgc2l6ZS4gfCB8CnwgYGdldEVycm9yKClgIHwgUmV0cmlldmUgdGhlIGVycm9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgdXBsb2FkZWQgZmlsZS4gfCB8CnwgYGdldENsaWVudEZpbGVuYW1lKClgIHwgUmV0cmlldmUgdGhlIGZpbGVuYW1lIHNlbnQgYnkgdGhlIGNsaWVudC4gfCB8CnwgYGdldENsaWVudE1lZGlhVHlwZSgpYCB8IFJldHJpZXZlIHRoZSBtZWRpYSB0eXBlIHNlbnQgYnkgdGhlIGNsaWVudC4gfCB8Cgo+IGBSZXF1ZXN0SW50ZXJmYWNlYCwgYFNlcnZlclJlcXVlc3RJbnRlcmZhY2VgLCBgUmVzcG9uc2VJbnRlcmZhY2VgIGV4dGVuZCBgTWVzc2FnZUludGVyZmFjZWAgIGJlY2F1c2UgdGhlIGBSZXF1ZXN0YCBhbmQgdGhlIGBSZXNwb25zZWAgYXJlIGBIVFRQIE1lc3NhZ2VzYC4KPiBXaGVuIHVzaW5nIGBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlYCwgYm90aCBgUmVxdWVzdEludGVyZmFjZWAgYW5kIGBQc3JcSHR0cFxNZXNzYWdlXE1lc3NhZ2VJbnRlcmZhY2VgIG1ldGhvZHMgYXJlIGNvbnNpZGVyZWQuCgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/docs/PSR7-Usage.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyMjIFBTUi03IFVzYWdlCgpBbGwgUFNSLTcgYXBwbGljYXRpb25zIGNvbXBseSB3aXRoIHRoZXNlIGludGVyZmFjZXMgClRoZXkgd2VyZSBjcmVhdGVkIHRvIGVzdGFibGlzaCBhIHN0YW5kYXJkIGJldHdlZW4gbWlkZGxld2FyZSBpbXBsZW1lbnRhdGlvbnMuCgo+IGBSZXF1ZXN0SW50ZXJmYWNlYCwgYFNlcnZlclJlcXVlc3RJbnRlcmZhY2VgLCBgUmVzcG9uc2VJbnRlcmZhY2VgIGV4dGVuZCBgTWVzc2FnZUludGVyZmFjZWAgIGJlY2F1c2UgdGhlIGBSZXF1ZXN0YCBhbmQgdGhlIGBSZXNwb25zZWAgYXJlIGBIVFRQIE1lc3NhZ2VzYC4KPiBXaGVuIHVzaW5nIGBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlYCwgYm90aCBgUmVxdWVzdEludGVyZmFjZWAgYW5kIGBQc3JcSHR0cFxNZXNzYWdlXE1lc3NhZ2VJbnRlcmZhY2VgIG1ldGhvZHMgYXJlIGNvbnNpZGVyZWQuCgoKVGhlIGZvbGxvd2luZyBleGFtcGxlcyB3aWxsIGlsbHVzdHJhdGUgaG93IGJhc2ljIG9wZXJhdGlvbnMgYXJlIGRvbmUgaW4gUFNSLTcuCgojIyMjIyBFeGFtcGxlcwoKCkZvciB0aGlzIGV4YW1wbGVzIHRvIHdvcmsgKGF0IGxlYXN0KSBhIFBTUi03IGltcGxlbWVudGF0aW9uIHBhY2thZ2UgaXMgcmVxdWlyZWQuIChlZzogemVuZGZyYW1ld29yay96ZW5kLWRpYWN0b3JvcywgZ3V6emxlaHR0cC9wc3I3LCBzbGltL3NsaW0sIGV0YykKQWxsIFBTUi03IGltcGxlbWVudGF0aW9ucyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBiZWhhdmlvdXIuCgpUaGUgZm9sbG93aW5nIHdpbGwgYmUgYXNzdW1lZDogCmAkcmVxdWVzdGAgaXMgYW4gb2JqZWN0IG9mIGBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2VgIGFuZAoKYCRyZXNwb25zZWAgaXMgYW4gb2JqZWN0IGltcGxlbWVudGluZyBgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlYAoKCiMjIyBXb3JraW5nIHdpdGggSFRUUCBIZWFkZXJzCgojIyMjIEFkZGluZyBoZWFkZXJzIHRvIHJlc3BvbnNlOgoKYGBgcGhwCiRyZXNwb25zZS0+d2l0aEhlYWRlcignTXktQ3VzdG9tLUhlYWRlcicsICdNeSBDdXN0b20gTWVzc2FnZScpOwpgYGAKCiMjIyMgQXBwZW5kaW5nIHZhbHVlcyB0byBoZWFkZXJzCgpgYGBwaHAKJHJlc3BvbnNlLT53aXRoQWRkZWRIZWFkZXIoJ015LUN1c3RvbS1IZWFkZXInLCAnVGhlIHNlY29uZCBtZXNzYWdlJyk7CmBgYAoKIyMjIyBDaGVja2luZyBpZiBoZWFkZXIgZXhpc3RzOgoKYGBgcGhwCiRyZXF1ZXN0LT5oYXNIZWFkZXIoJ015LUN1c3RvbS1IZWFkZXInKTsgLy8gd2lsbCByZXR1cm4gZmFsc2UKJHJlc3BvbnNlLT5oYXNIZWFkZXIoJ015LUN1c3RvbS1IZWFkZXInKTsgLy8gd2lsbCByZXR1cm4gdHJ1ZQpgYGAKCj4gTm90ZTogTXktQ3VzdG9tLUhlYWRlciB3YXMgb25seSBhZGRlZCBpbiB0aGUgUmVzcG9uc2UKCiMjIyMgR2V0dGluZyBjb21tYS1zZXBhcmF0ZWQgdmFsdWVzIGZyb20gYSBoZWFkZXIgKGFsc28gYXBwbGllcyB0byByZXF1ZXN0KQoKYGBgcGhwCi8vIGdldHRpbmcgdmFsdWUgZnJvbSByZXF1ZXN0IGhlYWRlcnMKJHJlcXVlc3QtPmdldEhlYWRlckxpbmUoJ0NvbnRlbnQtVHlwZScpOyAvLyB3aWxsIHJldHVybjogInRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIKLy8gZ2V0dGluZyB2YWx1ZSBmcm9tIHJlc3BvbnNlIGhlYWRlcnMKJHJlc3BvbnNlLT5nZXRIZWFkZXJMaW5lKCdNeS1DdXN0b20tSGVhZGVyJyk7IC8vIHdpbGwgcmV0dXJuOiAgIk15IEN1c3RvbSBNZXNzYWdlOyBUaGUgc2Vjb25kIG1lc3NhZ2UiCmBgYAoKIyMjIyBHZXR0aW5nIGFycmF5IG9mIHZhbHVlIGZyb20gYSBoZWFkZXIgKGFsc28gYXBwbGllcyB0byByZXF1ZXN0KQpgYGBwaHAKLy8gZ2V0dGluZyB2YWx1ZSBmcm9tIHJlcXVlc3QgaGVhZGVycwokcmVxdWVzdC0+Z2V0SGVhZGVyKCdDb250ZW50LVR5cGUnKTsgLy8gd2lsbCByZXR1cm46IFsidGV4dC9odG1sIiwgImNoYXJzZXQ9VVRGLTgiXQovLyBnZXR0aW5nIHZhbHVlIGZyb20gcmVzcG9uc2UgaGVhZGVycwokcmVzcG9uc2UtPmdldEhlYWRlcignTXktQ3VzdG9tLUhlYWRlcicpOyAvLyB3aWxsIHJldHVybjogIFsiTXkgQ3VzdG9tIE1lc3NhZ2UiLCAgIlRoZSBzZWNvbmQgbWVzc2FnZSJdCmBgYAoKIyMjIyBSZW1vdmluZyBoZWFkZXJzIGZyb20gSFRUUCBNZXNzYWdlcwpgYGBwaHAKLy8gcmVtb3ZpbmcgYSBoZWFkZXIgZnJvbSBSZXF1ZXN0LCByZW1vdmluZyBkZXByZWNhdGVkICJDb250ZW50LU1ENSIgaGVhZGVyCiRyZXF1ZXN0LT53aXRob3V0SGVhZGVyKCdDb250ZW50LU1ENScpOyAKCi8vIHJlbW92aW5nIGEgaGVhZGVyIGZyb20gUmVzcG9uc2UKLy8gZWZmZWN0OiB0aGUgYnJvd3NlciB3b24ndCBrbm93IHRoZSBzaXplIG9mIHRoZSBzdHJlYW0KLy8gdGhlIGJyb3dzZXIgd2lsbCBkb3dubG9hZCB0aGUgc3RyZWFtIHRpbGwgaXQgZW5kcwokcmVzcG9uc2UtPndpdGhvdXRIZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJyk7CmBgYAoKIyMjIFdvcmtpbmcgd2l0aCBIVFRQIE1lc3NhZ2UgQm9keQoKV2hlbiB3b3JraW5nIHdpdGggdGhlIFBTUi03IHRoZXJlIGFyZSB0d28gbWV0aG9kcyBvZiBpbXBsZW1lbnRhdGlvbjoKIyMjIyAxLiBHZXR0aW5nIHRoZSBib2R5IHNlcGFyYXRlbHkKCj4gVGhpcyBtZXRob2QgbWFrZXMgdGhlIGJvZHkgaGFuZGxpbmcgZWFzaWVyIHRvIHVuZGVyc3RhbmQgYW5kIGlzIHVzZWZ1bCB3aGVuIHJlcGVhdGVkbHkgY2FsbGluZyBib2R5IG1ldGhvZHMuIChZb3Ugb25seSBjYWxsIGBnZXRCb2R5KClgIG9uY2UpLiBVc2luZyB0aGlzIG1ldGhvZCBtaXN0YWtlcyBsaWtlIGAkcmVzcG9uc2UtPndyaXRlKClgIGFyZSBhbHNvIHByZXZlbnRlZC4KCmBgYHBocAokYm9keSA9ICRyZXNwb25zZS0+Z2V0Qm9keSgpOwovLyBvcGVyYXRpb25zIG9uIGJvZHksIGVnLiByZWFkLCB3cml0ZSwgc2VlawovLyAuLi4KLy8gcmVwbGFjaW5nIHRoZSBvbGQgYm9keQokcmVzcG9uc2UtPndpdGhCb2R5KCRib2R5KTsgCi8vIHRoaXMgbGFzdCBzdGF0ZW1lbnQgaXMgb3B0aW9uYWwgYXMgd2Ugd29ya2luZyB3aXRoIG9iamVjdHMKLy8gaW4gdGhpcyBjYXNlIHRoZSAibmV3IiBib2R5IGlzIHNhbWUgd2l0aCB0aGUgIm9sZCIgb25lCi8vIHRoZSAkYm9keSB2YXJpYWJsZSBoYXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIG9uZSBpbiAkcmVxdWVzdCwgb25seSB0aGUgcmVmZXJlbmNlIGlzIHBhc3NlZApgYGAKCiMjIyMgMi4gV29ya2luZyBkaXJlY3RseSBvbiByZXNwb25zZQoKPiBUaGlzIG1ldGhvZCBpcyB1c2VmdWwgd2hlbiBvbmx5IHBlcmZvcm1pbmcgZmV3IG9wZXJhdGlvbnMgYXMgdGhlIGAkcmVxdWVzdC0+Z2V0Qm9keSgpYCBzdGF0ZW1lbnQgZnJhZ21lbnQgaXMgcmVxdWlyZWQKCmBgYHBocAokcmVzcG9uc2UtPmdldEJvZHkoKS0+d3JpdGUoJ2hlbGxvJyk7CmBgYAoKIyMjIEdldHRpbmcgdGhlIGJvZHkgY29udGVudHMKClRoZSBmb2xsb3dpbmcgc25pcHBldCBnZXRzIHRoZSBjb250ZW50cyBvZiBhIHN0cmVhbSBjb250ZW50cy4KPiBOb3RlOiBTdHJlYW1zIG11c3QgYmUgcmV3aW5kZWQsIGlmIGNvbnRlbnQgd2FzIHdyaXR0ZW4gaW50byBzdHJlYW1zLCBpdCB3aWxsIGJlIGlnbm9yZWQgd2hlbiBjYWxsaW5nIGBnZXRDb250ZW50cygpYCBiZWNhdXNlIHRoZSBzdHJlYW0gcG9pbnRlciBpcyBzZXQgdG8gdGhlIGxhc3QgY2hhcmFjdGVyLCB3aGljaCBpcyBgXDBgIC0gbWVhbmluZyBlbmQgb2Ygc3RyZWFtLgpgYGBwaHAgCiRib2R5ID0gJHJlc3BvbnNlLT5nZXRCb2R5KCk7CiRib2R5LT5yZXdpbmQoKTsgLy8gb3IgJGJvZHktPnNlZWsoMCk7CiRib2R5VGV4dCA9ICRib2R5LT5nZXRDb250ZW50cygpOwpgYGAKPiBOb3RlOiBJZiBgJGJvZHktPnNlZWsoMSlgIGlzIGNhbGxlZCBiZWZvcmUgYCRib2R5LT5nZXRDb250ZW50cygpYCwgdGhlIGZpcnN0IGNoYXJhY3RlciB3aWxsIGJlIG9tbWl0ZWQgYXMgdGhlIHN0YXJ0aW5nIHBvaW50ZXIgaXMgc2V0IHRvIGAxYCwgbm90IGAwYC4gVGhpcyBpcyB3aHkgdXNpbmcgYCRib2R5LT5yZXdpbmQoKWAgaXMgcmVjb21tZW5kZWQuCgojIyMgQXBwZW5kIHRvIGJvZHkKCmBgYHBocAokcmVzcG9uc2UtPmdldEJvZHkoKS0+d3JpdGUoJ0hlbGxvJyk7IC8vIHdyaXRpbmcgZGlyZWN0bHkKJGJvZHkgPSAkcmVxdWVzdC0+Z2V0Qm9keSgpOyAvLyB3aGljaCBpcyBhIGBTdHJlYW1JbnRlcmZhY2VgCiRib2R5LT53cml0ZSgneHh4eHgnKTsKYGBgCgojIyMgUHJlcGVuZCB0byBib2R5ClByZXBlbmRpbmcgaXMgZGlmZmVyZW50IHdoZW4gaXQgY29tZXMgdG8gc3RyZWFtcy4gVGhlIGNvbnRlbnQgbXVzdCBiZSBjb3BpZWQgYmVmb3JlIHdyaXRpbmcgdGhlIGNvbnRlbnQgdG8gYmUgcHJlcGVuZGVkLgpUaGUgZm9sbG93aW5nIGV4YW1wbGUgd2lsbCBleHBsYWluIHRoZSBiZWhhdmlvdXIgb2Ygc3RyZWFtcy4KCmBgYHBocAovLyBhc3N1bWluZyBvdXIgcmVzcG9uc2UgaXMgaW5pdGlhbGx5IGVtcHR5CiRib2R5ID0gJHJlcHNvbnNlLT5nZXRCb2R5KCk7Ci8vIHdyaXRpbmcgdGhlIHN0cmluZyAiYWJjZCIKJGJvZHktPndyaXRlKCdhYmNkJyk7CgovLyBzZWVraW5nIHRvIHN0YXJ0IG9mIHN0cmVhbQokYm9keS0+c2VlaygwKTsKLy8gd3JpdGluZyAnZWYnCiRib2R5LT53cml0ZSgnZWYnKTsgLy8gYXQgdGhpcyBwb2ludCB0aGUgc3RyZWFtIGNvbnRhaW5zICJlZmNkIgpgYGAKCiMjIyMgUHJlcGVuZGluZyBieSByZXdyaXRpbmcgc2VwYXJhdGVseQoKYGBgcGhwCi8vIGFzc3VtaW5nIG91ciByZXNwb25zZSBib2R5IHN0cmVhbSBvbmx5IGNvbnRhaW5zOiAiYWJjZCIKJGJvZHkgPSAkcmVzcG9uc2UtPmdldEJvZHkoKTsKJGJvZHktPnJld2luZCgpOwokY29udGVudHMgPSAkYm9keS0+Z2V0Q29udGVudHMoKTsgLy8gYWJjZAovLyBzZWVraW5nIHRoZSBzdHJlYW0gdG8gYmVnaW5uaW5nCiRib2R5LT5yZXdpbmQoKTsKJGJvZHktPndyaXRlKCdlZicpOyAvLyBzdHJlYW0gY29udGFpbnMgImVmY2QiCiRib2R5LT53cml0ZSgkY29udGVudHMpOyAvLyBzdHJlYW0gY29udGFpbnMgImVmYWJjZCIKYGBgCgo+IE5vdGU6IGBnZXRDb250ZW50cygpYCBzZWVrcyB0aGUgc3RyZWFtIHdoaWxlIHJlYWRpbmcgaXQsIHRoZXJlZm9yZSBpZiB0aGUgc2Vjb25kIGByZXdpbmQoKWAgbWV0aG9kIGNhbGwgd2FzIG5vdCBwcmVzZW50IHRoZSBzdHJlYW0gd291bGQgaGF2ZSByZXN1bHRlZCBpbiBgYWJjZGVmYWJjZGAgYmVjYXVzZSB0aGUgYHdyaXRlKClgIG1ldGhvZCBhcHBlbmRzIHRvIHN0cmVhbSBpZiBub3QgcHJlY2VlZGVkIGJ5IGByZXdpbmQoKWAgb3IgYHNlZWsoMClgLgoKIyMjIyBQcmVwZW5kaW5nIGJ5IHVzaW5nIGNvbnRlbnRzIGFzIGEgc3RyaW5nCmBgYHBocAokYm9keSA9ICRyZXNwb25zZS0+Z2V0Qm9keSgpOwokYm9keS0+cmV3aW5kKCk7CiRjb250ZW50cyA9ICRib2R5LT5nZXRDb250ZW50cygpOyAvLyBlZmFiY2QKJGNvbnRlbnRzID0gJ2VmJy4kY29udGVudHM7CiRib2R5LT5yZXdpbmQoKTsKJGJvZHktPndyaXRlKCRjb250ZW50cyk7CmBgYAo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDE0IFBIUCBGcmFtZXdvcmsgSW50ZXJvcGVyYWJpbGl0eSBHcm91cAoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSAKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyAKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIApmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[UFNSIEh0dHAgTWVzc2FnZQo9PT09PT09PT09PT09PT09CgpUaGlzIHJlcG9zaXRvcnkgaG9sZHMgYWxsIGludGVyZmFjZXMvY2xhc3Nlcy90cmFpdHMgcmVsYXRlZCB0bwpbUFNSLTddKGh0dHA6Ly93d3cucGhwLWZpZy5vcmcvcHNyL3Bzci03LykuCgpOb3RlIHRoYXQgdGhpcyBpcyBub3QgYSBIVFRQIG1lc3NhZ2UgaW1wbGVtZW50YXRpb24gb2YgaXRzIG93bi4gSXQgaXMgbWVyZWx5IGFuCmludGVyZmFjZSB0aGF0IGRlc2NyaWJlcyBhIEhUVFAgbWVzc2FnZS4gU2VlIHRoZSBzcGVjaWZpY2F0aW9uIGZvciBtb3JlIGRldGFpbHMuCgpVc2FnZQotLS0tLQoKQmVmb3JlIHJlYWRpbmcgdGhlIHVzYWdlIGd1aWRlIHdlIHJlY29tbWVuZCByZWFkaW5nIHRoZSBQU1ItNyBpbnRlcmZhY2VzIG1ldGhvZCBsaXN0OgoKKiBbYFBTUi03IEludGVyZmFjZXMgTWV0aG9kIExpc3RgXShkb2NzL1BTUjctSW50ZXJmYWNlcy5tZCkKKiBbYFBTUi03IFVzYWdlIEd1aWRlYF0oZG9jcy9QU1I3LVVzYWdlLm1kKQ==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/src/MessageInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFBzclxIdHRwXE1lc3NhZ2U7CgovKioKICogSFRUUCBtZXNzYWdlcyBjb25zaXN0IG9mIHJlcXVlc3RzIGZyb20gYSBjbGllbnQgdG8gYSBzZXJ2ZXIgYW5kIHJlc3BvbnNlcwogKiBmcm9tIGEgc2VydmVyIHRvIGEgY2xpZW50LiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIHRoZSBtZXRob2RzIGNvbW1vbiB0bwogKiBlYWNoLgogKgogKiBNZXNzYWdlcyBhcmUgY29uc2lkZXJlZCBpbW11dGFibGU7IGFsbCBtZXRob2RzIHRoYXQgbWlnaHQgY2hhbmdlIHN0YXRlIE1VU1QKICogYmUgaW1wbGVtZW50ZWQgc3VjaCB0aGF0IHRoZXkgcmV0YWluIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgY3VycmVudAogKiBtZXNzYWdlIGFuZCByZXR1cm4gYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgY2hhbmdlZCBzdGF0ZS4KICoKICogQGxpbmsgaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjNzIzMC50eHQKICogQGxpbmsgaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjNzIzMS50eHQKICovCmludGVyZmFjZSBNZXNzYWdlSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0cmlldmVzIHRoZSBIVFRQIHByb3RvY29sIHZlcnNpb24gYXMgYSBzdHJpbmcuCiAgICAgKgogICAgICogVGhlIHN0cmluZyBNVVNUIGNvbnRhaW4gb25seSB0aGUgSFRUUCB2ZXJzaW9uIG51bWJlciAoZS5nLiwgIjEuMSIsICIxLjAiKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBIVFRQIHByb3RvY29sIHZlcnNpb24uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQcm90b2NvbFZlcnNpb24oKTsKCiAgICAvKioKICAgICAqIFJldHVybiBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgSFRUUCBwcm90b2NvbCB2ZXJzaW9uLgogICAgICoKICAgICAqIFRoZSB2ZXJzaW9uIHN0cmluZyBNVVNUIGNvbnRhaW4gb25seSB0aGUgSFRUUCB2ZXJzaW9uIG51bWJlciAoZS5nLiwKICAgICAqICIxLjEiLCAiMS4wIikuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgaGFzIHRoZQogICAgICogbmV3IHByb3RvY29sIHZlcnNpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdmVyc2lvbiBIVFRQIHByb3RvY29sIHZlcnNpb24KICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUHJvdG9jb2xWZXJzaW9uKHN0cmluZyAkdmVyc2lvbik7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZXMgYWxsIG1lc3NhZ2UgaGVhZGVyIHZhbHVlcy4KICAgICAqCiAgICAgKiBUaGUga2V5cyByZXByZXNlbnQgdGhlIGhlYWRlciBuYW1lIGFzIGl0IHdpbGwgYmUgc2VudCBvdmVyIHRoZSB3aXJlLCBhbmQKICAgICAqIGVhY2ggdmFsdWUgaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncyBhc3NvY2lhdGVkIHdpdGggdGhlIGhlYWRlci4KICAgICAqCiAgICAgKiAgICAgLy8gUmVwcmVzZW50IHRoZSBoZWFkZXJzIGFzIGEgc3RyaW5nCiAgICAgKiAgICAgZm9yZWFjaCAoJG1lc3NhZ2UtPmdldEhlYWRlcnMoKSBhcyAkbmFtZSA9PiAkdmFsdWVzKSB7CiAgICAgKiAgICAgICAgIGVjaG8gJG5hbWUgLiAiOiAiIC4gaW1wbG9kZSgiLCAiLCAkdmFsdWVzKTsKICAgICAqICAgICB9CiAgICAgKgogICAgICogICAgIC8vIEVtaXQgaGVhZGVycyBpdGVyYXRpdmVseToKICAgICAqICAgICBmb3JlYWNoICgkbWVzc2FnZS0+Z2V0SGVhZGVycygpIGFzICRuYW1lID0+ICR2YWx1ZXMpIHsKICAgICAqICAgICAgICAgZm9yZWFjaCAoJHZhbHVlcyBhcyAkdmFsdWUpIHsKICAgICAqICAgICAgICAgICAgIGhlYWRlcihzcHJpbnRmKCclczogJXMnLCAkbmFtZSwgJHZhbHVlKSwgZmFsc2UpOwogICAgICogICAgICAgICB9CiAgICAgKiAgICAgfQogICAgICoKICAgICAqIFdoaWxlIGhlYWRlciBuYW1lcyBhcmUgbm90IGNhc2Utc2Vuc2l0aXZlLCBnZXRIZWFkZXJzKCkgd2lsbCBwcmVzZXJ2ZSB0aGUKICAgICAqIGV4YWN0IGNhc2UgaW4gd2hpY2ggaGVhZGVycyB3ZXJlIG9yaWdpbmFsbHkgc3BlY2lmaWVkLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nW11bXSBSZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIHRoZSBtZXNzYWdlJ3MgaGVhZGVycy4gRWFjaAogICAgICogICAgIGtleSBNVVNUIGJlIGEgaGVhZGVyIG5hbWUsIGFuZCBlYWNoIHZhbHVlIE1VU1QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncwogICAgICogICAgIGZvciB0aGF0IGhlYWRlci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEhlYWRlcnMoKTsKCiAgICAvKioKICAgICAqIENoZWNrcyBpZiBhIGhlYWRlciBleGlzdHMgYnkgdGhlIGdpdmVuIGNhc2UtaW5zZW5zaXRpdmUgbmFtZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIENhc2UtaW5zZW5zaXRpdmUgaGVhZGVyIGZpZWxkIG5hbWUuCiAgICAgKiBAcmV0dXJuIGJvb2wgUmV0dXJucyB0cnVlIGlmIGFueSBoZWFkZXIgbmFtZXMgbWF0Y2ggdGhlIGdpdmVuIGhlYWRlcgogICAgICogICAgIG5hbWUgdXNpbmcgYSBjYXNlLWluc2Vuc2l0aXZlIHN0cmluZyBjb21wYXJpc29uLiBSZXR1cm5zIGZhbHNlIGlmCiAgICAgKiAgICAgbm8gbWF0Y2hpbmcgaGVhZGVyIG5hbWUgaXMgZm91bmQgaW4gdGhlIG1lc3NhZ2UuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNIZWFkZXIoc3RyaW5nICRuYW1lKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlcyBhIG1lc3NhZ2UgaGVhZGVyIHZhbHVlIGJ5IHRoZSBnaXZlbiBjYXNlLWluc2Vuc2l0aXZlIG5hbWUuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhbiBhcnJheSBvZiBhbGwgdGhlIGhlYWRlciB2YWx1ZXMgb2YgdGhlIGdpdmVuCiAgICAgKiBjYXNlLWluc2Vuc2l0aXZlIGhlYWRlciBuYW1lLgogICAgICoKICAgICAqIElmIHRoZSBoZWFkZXIgZG9lcyBub3QgYXBwZWFyIGluIHRoZSBtZXNzYWdlLCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybiBhbgogICAgICogZW1wdHkgYXJyYXkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBDYXNlLWluc2Vuc2l0aXZlIGhlYWRlciBmaWVsZCBuYW1lLgogICAgICogQHJldHVybiBzdHJpbmdbXSBBbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzIGFzIHByb3ZpZGVkIGZvciB0aGUgZ2l2ZW4KICAgICAqICAgIGhlYWRlci4gSWYgdGhlIGhlYWRlciBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIG1lc3NhZ2UsIHRoaXMgbWV0aG9kIE1VU1QKICAgICAqICAgIHJldHVybiBhbiBlbXB0eSBhcnJheS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEhlYWRlcihzdHJpbmcgJG5hbWUpOwoKICAgIC8qKgogICAgICogUmV0cmlldmVzIGEgY29tbWEtc2VwYXJhdGVkIHN0cmluZyBvZiB0aGUgdmFsdWVzIGZvciBhIHNpbmdsZSBoZWFkZXIuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhbGwgb2YgdGhlIGhlYWRlciB2YWx1ZXMgb2YgdGhlIGdpdmVuCiAgICAgKiBjYXNlLWluc2Vuc2l0aXZlIGhlYWRlciBuYW1lIGFzIGEgc3RyaW5nIGNvbmNhdGVuYXRlZCB0b2dldGhlciB1c2luZwogICAgICogYSBjb21tYS4KICAgICAqCiAgICAgKiBOT1RFOiBOb3QgYWxsIGhlYWRlciB2YWx1ZXMgbWF5IGJlIGFwcHJvcHJpYXRlbHkgcmVwcmVzZW50ZWQgdXNpbmcKICAgICAqIGNvbW1hIGNvbmNhdGVuYXRpb24uIEZvciBzdWNoIGhlYWRlcnMsIHVzZSBnZXRIZWFkZXIoKSBpbnN0ZWFkCiAgICAgKiBhbmQgc3VwcGx5IHlvdXIgb3duIGRlbGltaXRlciB3aGVuIGNvbmNhdGVuYXRpbmcuCiAgICAgKgogICAgICogSWYgdGhlIGhlYWRlciBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIG1lc3NhZ2UsIHRoaXMgbWV0aG9kIE1VU1QgcmV0dXJuCiAgICAgKiBhbiBlbXB0eSBzdHJpbmcuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBDYXNlLWluc2Vuc2l0aXZlIGhlYWRlciBmaWVsZCBuYW1lLgogICAgICogQHJldHVybiBzdHJpbmcgQSBzdHJpbmcgb2YgdmFsdWVzIGFzIHByb3ZpZGVkIGZvciB0aGUgZ2l2ZW4gaGVhZGVyCiAgICAgKiAgICBjb25jYXRlbmF0ZWQgdG9nZXRoZXIgdXNpbmcgYSBjb21tYS4gSWYgdGhlIGhlYWRlciBkb2VzIG5vdCBhcHBlYXIgaW4KICAgICAqICAgIHRoZSBtZXNzYWdlLCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybiBhbiBlbXB0eSBzdHJpbmcuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIZWFkZXJMaW5lKHN0cmluZyAkbmFtZSk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgcHJvdmlkZWQgdmFsdWUgcmVwbGFjaW5nIHRoZSBzcGVjaWZpZWQgaGVhZGVyLgogICAgICoKICAgICAqIFdoaWxlIGhlYWRlciBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSwgdGhlIGNhc2luZyBvZiB0aGUgaGVhZGVyIHdpbGwKICAgICAqIGJlIHByZXNlcnZlZCBieSB0aGlzIGZ1bmN0aW9uLCBhbmQgcmV0dXJuZWQgZnJvbSBnZXRIZWFkZXJzKCkuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgaGFzIHRoZQogICAgICogbmV3IGFuZC9vciB1cGRhdGVkIGhlYWRlciBhbmQgdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBDYXNlLWluc2Vuc2l0aXZlIGhlYWRlciBmaWVsZCBuYW1lLgogICAgICogQHBhcmFtIHN0cmluZ3xzdHJpbmdbXSAkdmFsdWUgSGVhZGVyIHZhbHVlKHMpLgogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3IgaW52YWxpZCBoZWFkZXIgbmFtZXMgb3IgdmFsdWVzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEhlYWRlcihzdHJpbmcgJG5hbWUsICR2YWx1ZSk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGhlYWRlciBhcHBlbmRlZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZS4KICAgICAqCiAgICAgKiBFeGlzdGluZyB2YWx1ZXMgZm9yIHRoZSBzcGVjaWZpZWQgaGVhZGVyIHdpbGwgYmUgbWFpbnRhaW5lZC4gVGhlIG5ldwogICAgICogdmFsdWUocykgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgZXhpc3RpbmcgbGlzdC4gSWYgdGhlIGhlYWRlciBkaWQgbm90CiAgICAgKiBleGlzdCBwcmV2aW91c2x5LCBpdCB3aWxsIGJlIGFkZGVkLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgYmUgaW1wbGVtZW50ZWQgaW4gc3VjaCBhIHdheSBhcyB0byByZXRhaW4gdGhlCiAgICAgKiBpbW11dGFiaWxpdHkgb2YgdGhlIG1lc3NhZ2UsIGFuZCBNVVNUIHJldHVybiBhbiBpbnN0YW5jZSB0aGF0IGhhcyB0aGUKICAgICAqIG5ldyBoZWFkZXIgYW5kL29yIHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgQ2FzZS1pbnNlbnNpdGl2ZSBoZWFkZXIgZmllbGQgbmFtZSB0byBhZGQuCiAgICAgKiBAcGFyYW0gc3RyaW5nfHN0cmluZ1tdICR2YWx1ZSBIZWFkZXIgdmFsdWUocykuCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvciBpbnZhbGlkIGhlYWRlciBuYW1lcyBvciB2YWx1ZXMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoQWRkZWRIZWFkZXIoc3RyaW5nICRuYW1lLCAkdmFsdWUpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGhvdXQgdGhlIHNwZWNpZmllZCBoZWFkZXIuCiAgICAgKgogICAgICogSGVhZGVyIHJlc29sdXRpb24gTVVTVCBiZSBkb25lIHdpdGhvdXQgY2FzZS1zZW5zaXRpdml0eS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIGJlIGltcGxlbWVudGVkIGluIHN1Y2ggYSB3YXkgYXMgdG8gcmV0YWluIHRoZQogICAgICogaW1tdXRhYmlsaXR5IG9mIHRoZSBtZXNzYWdlLCBhbmQgTVVTVCByZXR1cm4gYW4gaW5zdGFuY2UgdGhhdCByZW1vdmVzCiAgICAgKiB0aGUgbmFtZWQgaGVhZGVyLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgQ2FzZS1pbnNlbnNpdGl2ZSBoZWFkZXIgZmllbGQgbmFtZSB0byByZW1vdmUuCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aG91dEhlYWRlcihzdHJpbmcgJG5hbWUpOwoKICAgIC8qKgogICAgICogR2V0cyB0aGUgYm9keSBvZiB0aGUgbWVzc2FnZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFN0cmVhbUludGVyZmFjZSBSZXR1cm5zIHRoZSBib2R5IGFzIGEgc3RyZWFtLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Qm9keSgpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlIGJvZHkuCiAgICAgKgogICAgICogVGhlIGJvZHkgTVVTVCBiZSBhIFN0cmVhbUludGVyZmFjZSBvYmplY3QuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGEgbmV3IGluc3RhbmNlIHRoYXQgaGFzIHRoZQogICAgICogbmV3IGJvZHkgc3RyZWFtLgogICAgICoKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2UgJGJvZHkgQm9keS4KICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gV2hlbiB0aGUgYm9keSBpcyBub3QgdmFsaWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoQm9keShTdHJlYW1JbnRlcmZhY2UgJGJvZHkpOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/src/RequestInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFBzclxIdHRwXE1lc3NhZ2U7CgovKioKICogUmVwcmVzZW50YXRpb24gb2YgYW4gb3V0Z29pbmcsIGNsaWVudC1zaWRlIHJlcXVlc3QuCiAqCiAqIFBlciB0aGUgSFRUUCBzcGVjaWZpY2F0aW9uLCB0aGlzIGludGVyZmFjZSBpbmNsdWRlcyBwcm9wZXJ0aWVzIGZvcgogKiBlYWNoIG9mIHRoZSBmb2xsb3dpbmc6CiAqCiAqIC0gUHJvdG9jb2wgdmVyc2lvbgogKiAtIEhUVFAgbWV0aG9kCiAqIC0gVVJJCiAqIC0gSGVhZGVycwogKiAtIE1lc3NhZ2UgYm9keQogKgogKiBEdXJpbmcgY29uc3RydWN0aW9uLCBpbXBsZW1lbnRhdGlvbnMgTVVTVCBhdHRlbXB0IHRvIHNldCB0aGUgSG9zdCBoZWFkZXIgZnJvbQogKiBhIHByb3ZpZGVkIFVSSSBpZiBubyBIb3N0IGhlYWRlciBpcyBwcm92aWRlZC4KICoKICogUmVxdWVzdHMgYXJlIGNvbnNpZGVyZWQgaW1tdXRhYmxlOyBhbGwgbWV0aG9kcyB0aGF0IG1pZ2h0IGNoYW5nZSBzdGF0ZSBNVVNUCiAqIGJlIGltcGxlbWVudGVkIHN1Y2ggdGhhdCB0aGV5IHJldGFpbiB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGN1cnJlbnQKICogbWVzc2FnZSBhbmQgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIGNoYW5nZWQgc3RhdGUuCiAqLwppbnRlcmZhY2UgUmVxdWVzdEludGVyZmFjZSBleHRlbmRzIE1lc3NhZ2VJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXRyaWV2ZXMgdGhlIG1lc3NhZ2UncyByZXF1ZXN0IHRhcmdldC4KICAgICAqCiAgICAgKiBSZXRyaWV2ZXMgdGhlIG1lc3NhZ2UncyByZXF1ZXN0LXRhcmdldCBlaXRoZXIgYXMgaXQgd2lsbCBhcHBlYXIgKGZvcgogICAgICogY2xpZW50cyksIGFzIGl0IGFwcGVhcmVkIGF0IHJlcXVlc3QgKGZvciBzZXJ2ZXJzKSwgb3IgYXMgaXQgd2FzCiAgICAgKiBzcGVjaWZpZWQgZm9yIHRoZSBpbnN0YW5jZSAoc2VlIHdpdGhSZXF1ZXN0VGFyZ2V0KCkpLgogICAgICoKICAgICAqIEluIG1vc3QgY2FzZXMsIHRoaXMgd2lsbCBiZSB0aGUgb3JpZ2luLWZvcm0gb2YgdGhlIGNvbXBvc2VkIFVSSSwKICAgICAqIHVubGVzcyBhIHZhbHVlIHdhcyBwcm92aWRlZCB0byB0aGUgY29uY3JldGUgaW1wbGVtZW50YXRpb24gKHNlZQogICAgICogd2l0aFJlcXVlc3RUYXJnZXQoKSBiZWxvdykuCiAgICAgKgogICAgICogSWYgbm8gVVJJIGlzIGF2YWlsYWJsZSwgYW5kIG5vIHJlcXVlc3QtdGFyZ2V0IGhhcyBiZWVuIHNwZWNpZmljYWxseQogICAgICogcHJvdmlkZWQsIHRoaXMgbWV0aG9kIE1VU1QgcmV0dXJuIHRoZSBzdHJpbmcgIi8iLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZXF1ZXN0VGFyZ2V0KCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWMgcmVxdWVzdC10YXJnZXQuCiAgICAgKgogICAgICogSWYgdGhlIHJlcXVlc3QgbmVlZHMgYSBub24tb3JpZ2luLWZvcm0gcmVxdWVzdC10YXJnZXQg4oCUIGUuZy4sIGZvcgogICAgICogc3BlY2lmeWluZyBhbiBhYnNvbHV0ZS1mb3JtLCBhdXRob3JpdHktZm9ybSwgb3IgYXN0ZXJpc2stZm9ybSDigJQKICAgICAqIHRoaXMgbWV0aG9kIG1heSBiZSB1c2VkIHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQKICAgICAqIHJlcXVlc3QtdGFyZ2V0LCB2ZXJiYXRpbS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIGJlIGltcGxlbWVudGVkIGluIHN1Y2ggYSB3YXkgYXMgdG8gcmV0YWluIHRoZQogICAgICogaW1tdXRhYmlsaXR5IG9mIHRoZSBtZXNzYWdlLCBhbmQgTVVTVCByZXR1cm4gYW4gaW5zdGFuY2UgdGhhdCBoYXMgdGhlCiAgICAgKiBjaGFuZ2VkIHJlcXVlc3QgdGFyZ2V0LgogICAgICoKICAgICAqIEBsaW5rIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi01LjMgKGZvciB0aGUgdmFyaW91cwogICAgICogICAgIHJlcXVlc3QtdGFyZ2V0IGZvcm1zIGFsbG93ZWQgaW4gcmVxdWVzdCBtZXNzYWdlcykKICAgICAqIEBwYXJhbSBzdHJpbmcgJHJlcXVlc3RUYXJnZXQKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUmVxdWVzdFRhcmdldChzdHJpbmcgJHJlcXVlc3RUYXJnZXQpOwoKICAgIC8qKgogICAgICogUmV0cmlldmVzIHRoZSBIVFRQIG1ldGhvZCBvZiB0aGUgcmVxdWVzdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSByZXF1ZXN0IG1ldGhvZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1ldGhvZCgpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHByb3ZpZGVkIEhUVFAgbWV0aG9kLgogICAgICoKICAgICAqIFdoaWxlIEhUVFAgbWV0aG9kIG5hbWVzIGFyZSB0eXBpY2FsbHkgYWxsIHVwcGVyY2FzZSBjaGFyYWN0ZXJzLCBIVFRQCiAgICAgKiBtZXRob2QgbmFtZXMgYXJlIGNhc2Utc2Vuc2l0aXZlIGFuZCB0aHVzIGltcGxlbWVudGF0aW9ucyBTSE9VTEQgTk9UCiAgICAgKiBtb2RpZnkgdGhlIGdpdmVuIHN0cmluZy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIGJlIGltcGxlbWVudGVkIGluIHN1Y2ggYSB3YXkgYXMgdG8gcmV0YWluIHRoZQogICAgICogaW1tdXRhYmlsaXR5IG9mIHRoZSBtZXNzYWdlLCBhbmQgTVVTVCByZXR1cm4gYW4gaW5zdGFuY2UgdGhhdCBoYXMgdGhlCiAgICAgKiBjaGFuZ2VkIHJlcXVlc3QgbWV0aG9kLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1ldGhvZCBDYXNlLXNlbnNpdGl2ZSBtZXRob2QuCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvciBpbnZhbGlkIEhUVFAgbWV0aG9kcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhNZXRob2Qoc3RyaW5nICRtZXRob2QpOwoKICAgIC8qKgogICAgICogUmV0cmlldmVzIHRoZSBVUkkgaW5zdGFuY2UuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXR1cm4gYSBVcmlJbnRlcmZhY2UgaW5zdGFuY2UuCiAgICAgKgogICAgICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTQuMwogICAgICogQHJldHVybiBVcmlJbnRlcmZhY2UgUmV0dXJucyBhIFVyaUludGVyZmFjZSBpbnN0YW5jZQogICAgICogICAgIHJlcHJlc2VudGluZyB0aGUgVVJJIG9mIHRoZSByZXF1ZXN0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VXJpKCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIHdpdGggdGhlIHByb3ZpZGVkIFVSSS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHVwZGF0ZSB0aGUgSG9zdCBoZWFkZXIgb2YgdGhlIHJldHVybmVkIHJlcXVlc3QgYnkKICAgICAqIGRlZmF1bHQgaWYgdGhlIFVSSSBjb250YWlucyBhIGhvc3QgY29tcG9uZW50LiBJZiB0aGUgVVJJIGRvZXMgbm90CiAgICAgKiBjb250YWluIGEgaG9zdCBjb21wb25lbnQsIGFueSBwcmUtZXhpc3RpbmcgSG9zdCBoZWFkZXIgTVVTVCBiZSBjYXJyaWVkCiAgICAgKiBvdmVyIHRvIHRoZSByZXR1cm5lZCByZXF1ZXN0LgogICAgICoKICAgICAqIFlvdSBjYW4gb3B0LWluIHRvIHByZXNlcnZpbmcgdGhlIG9yaWdpbmFsIHN0YXRlIG9mIHRoZSBIb3N0IGhlYWRlciBieQogICAgICogc2V0dGluZyBgJHByZXNlcnZlSG9zdGAgdG8gYHRydWVgLiBXaGVuIGAkcHJlc2VydmVIb3N0YCBpcyBzZXQgdG8KICAgICAqIGB0cnVlYCwgdGhpcyBtZXRob2QgaW50ZXJhY3RzIHdpdGggdGhlIEhvc3QgaGVhZGVyIGluIHRoZSBmb2xsb3dpbmcgd2F5czoKICAgICAqCiAgICAgKiAtIElmIHRoZSBIb3N0IGhlYWRlciBpcyBtaXNzaW5nIG9yIGVtcHR5LCBhbmQgdGhlIG5ldyBVUkkgY29udGFpbnMKICAgICAqICAgYSBob3N0IGNvbXBvbmVudCwgdGhpcyBtZXRob2QgTVVTVCB1cGRhdGUgdGhlIEhvc3QgaGVhZGVyIGluIHRoZSByZXR1cm5lZAogICAgICogICByZXF1ZXN0LgogICAgICogLSBJZiB0aGUgSG9zdCBoZWFkZXIgaXMgbWlzc2luZyBvciBlbXB0eSwgYW5kIHRoZSBuZXcgVVJJIGRvZXMgbm90IGNvbnRhaW4gYQogICAgICogICBob3N0IGNvbXBvbmVudCwgdGhpcyBtZXRob2QgTVVTVCBOT1QgdXBkYXRlIHRoZSBIb3N0IGhlYWRlciBpbiB0aGUgcmV0dXJuZWQKICAgICAqICAgcmVxdWVzdC4KICAgICAqIC0gSWYgYSBIb3N0IGhlYWRlciBpcyBwcmVzZW50IGFuZCBub24tZW1wdHksIHRoaXMgbWV0aG9kIE1VU1QgTk9UIHVwZGF0ZQogICAgICogICB0aGUgSG9zdCBoZWFkZXIgaW4gdGhlIHJldHVybmVkIHJlcXVlc3QuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgaGFzIHRoZQogICAgICogbmV3IFVyaUludGVyZmFjZSBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAbGluayBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNC4zCiAgICAgKiBAcGFyYW0gVXJpSW50ZXJmYWNlICR1cmkgTmV3IHJlcXVlc3QgVVJJIHRvIHVzZS4KICAgICAqIEBwYXJhbSBib29sICRwcmVzZXJ2ZUhvc3QgUHJlc2VydmUgdGhlIG9yaWdpbmFsIHN0YXRlIG9mIHRoZSBIb3N0IGhlYWRlci4KICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoVXJpKFVyaUludGVyZmFjZSAkdXJpLCBib29sICRwcmVzZXJ2ZUhvc3QgPSBmYWxzZSk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/src/ResponseInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFBzclxIdHRwXE1lc3NhZ2U7CgovKioKICogUmVwcmVzZW50YXRpb24gb2YgYW4gb3V0Z29pbmcsIHNlcnZlci1zaWRlIHJlc3BvbnNlLgogKgogKiBQZXIgdGhlIEhUVFAgc3BlY2lmaWNhdGlvbiwgdGhpcyBpbnRlcmZhY2UgaW5jbHVkZXMgcHJvcGVydGllcyBmb3IKICogZWFjaCBvZiB0aGUgZm9sbG93aW5nOgogKgogKiAtIFByb3RvY29sIHZlcnNpb24KICogLSBTdGF0dXMgY29kZSBhbmQgcmVhc29uIHBocmFzZQogKiAtIEhlYWRlcnMKICogLSBNZXNzYWdlIGJvZHkKICoKICogUmVzcG9uc2VzIGFyZSBjb25zaWRlcmVkIGltbXV0YWJsZTsgYWxsIG1ldGhvZHMgdGhhdCBtaWdodCBjaGFuZ2Ugc3RhdGUgTVVTVAogKiBiZSBpbXBsZW1lbnRlZCBzdWNoIHRoYXQgdGhleSByZXRhaW4gdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBjdXJyZW50CiAqIG1lc3NhZ2UgYW5kIHJldHVybiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBjaGFuZ2VkIHN0YXRlLgogKi8KaW50ZXJmYWNlIFJlc3BvbnNlSW50ZXJmYWNlIGV4dGVuZHMgTWVzc2FnZUludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEdldHMgdGhlIHJlc3BvbnNlIHN0YXR1cyBjb2RlLgogICAgICoKICAgICAqIFRoZSBzdGF0dXMgY29kZSBpcyBhIDMtZGlnaXQgaW50ZWdlciByZXN1bHQgY29kZSBvZiB0aGUgc2VydmVyJ3MgYXR0ZW1wdAogICAgICogdG8gdW5kZXJzdGFuZCBhbmQgc2F0aXNmeSB0aGUgcmVxdWVzdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludCBTdGF0dXMgY29kZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0YXR1c0NvZGUoKTsKCiAgICAvKioKICAgICAqIFJldHVybiBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgc3RhdHVzIGNvZGUgYW5kLCBvcHRpb25hbGx5LCByZWFzb24gcGhyYXNlLgogICAgICoKICAgICAqIElmIG5vIHJlYXNvbiBwaHJhc2UgaXMgc3BlY2lmaWVkLCBpbXBsZW1lbnRhdGlvbnMgTUFZIGNob29zZSB0byBkZWZhdWx0CiAgICAgKiB0byB0aGUgUkZDIDcyMzEgb3IgSUFOQSByZWNvbW1lbmRlZCByZWFzb24gcGhyYXNlIGZvciB0aGUgcmVzcG9uc2UncwogICAgICogc3RhdHVzIGNvZGUuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgaGFzIHRoZQogICAgICogdXBkYXRlZCBzdGF0dXMgYW5kIHJlYXNvbiBwaHJhc2UuCiAgICAgKgogICAgICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYKICAgICAqIEBsaW5rIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvaHR0cC1zdGF0dXMtY29kZXMvaHR0cC1zdGF0dXMtY29kZXMueGh0bWwKICAgICAqIEBwYXJhbSBpbnQgJGNvZGUgVGhlIDMtZGlnaXQgaW50ZWdlciByZXN1bHQgY29kZSB0byBzZXQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRyZWFzb25QaHJhc2UgVGhlIHJlYXNvbiBwaHJhc2UgdG8gdXNlIHdpdGggdGhlCiAgICAgKiAgICAgcHJvdmlkZWQgc3RhdHVzIGNvZGU7IGlmIG5vbmUgaXMgcHJvdmlkZWQsIGltcGxlbWVudGF0aW9ucyBNQVkKICAgICAqICAgICB1c2UgdGhlIGRlZmF1bHRzIGFzIHN1Z2dlc3RlZCBpbiB0aGUgSFRUUCBzcGVjaWZpY2F0aW9uLgogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBGb3IgaW52YWxpZCBzdGF0dXMgY29kZSBhcmd1bWVudHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoU3RhdHVzKGludCAkY29kZSwgc3RyaW5nICRyZWFzb25QaHJhc2UgPSAnJyk7CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSByZXNwb25zZSByZWFzb24gcGhyYXNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RhdHVzIGNvZGUuCiAgICAgKgogICAgICogQmVjYXVzZSBhIHJlYXNvbiBwaHJhc2UgaXMgbm90IGEgcmVxdWlyZWQgZWxlbWVudCBpbiBhIHJlc3BvbnNlCiAgICAgKiBzdGF0dXMgbGluZSwgdGhlIHJlYXNvbiBwaHJhc2UgdmFsdWUgTUFZIGJlIG51bGwuIEltcGxlbWVudGF0aW9ucyBNQVkKICAgICAqIGNob29zZSB0byByZXR1cm4gdGhlIGRlZmF1bHQgUkZDIDcyMzEgcmVjb21tZW5kZWQgcmVhc29uIHBocmFzZSAob3IgdGhvc2UKICAgICAqIGxpc3RlZCBpbiB0aGUgSUFOQSBIVFRQIFN0YXR1cyBDb2RlIFJlZ2lzdHJ5KSBmb3IgdGhlIHJlc3BvbnNlJ3MKICAgICAqIHN0YXR1cyBjb2RlLgogICAgICoKICAgICAqIEBsaW5rIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02CiAgICAgKiBAbGluayBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2h0dHAtc3RhdHVzLWNvZGVzL2h0dHAtc3RhdHVzLWNvZGVzLnhodG1sCiAgICAgKiBAcmV0dXJuIHN0cmluZyBSZWFzb24gcGhyYXNlOyBtdXN0IHJldHVybiBhbiBlbXB0eSBzdHJpbmcgaWYgbm9uZSBwcmVzZW50LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVhc29uUGhyYXNlKCk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/src/ServerRequestInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFBzclxIdHRwXE1lc3NhZ2U7CgovKioKICogUmVwcmVzZW50YXRpb24gb2YgYW4gaW5jb21pbmcsIHNlcnZlci1zaWRlIEhUVFAgcmVxdWVzdC4KICoKICogUGVyIHRoZSBIVFRQIHNwZWNpZmljYXRpb24sIHRoaXMgaW50ZXJmYWNlIGluY2x1ZGVzIHByb3BlcnRpZXMgZm9yCiAqIGVhY2ggb2YgdGhlIGZvbGxvd2luZzoKICoKICogLSBQcm90b2NvbCB2ZXJzaW9uCiAqIC0gSFRUUCBtZXRob2QKICogLSBVUkkKICogLSBIZWFkZXJzCiAqIC0gTWVzc2FnZSBib2R5CiAqCiAqIEFkZGl0aW9uYWxseSwgaXQgZW5jYXBzdWxhdGVzIGFsbCBkYXRhIGFzIGl0IGhhcyBhcnJpdmVkIHRvIHRoZQogKiBhcHBsaWNhdGlvbiBmcm9tIHRoZSBDR0kgYW5kL29yIFBIUCBlbnZpcm9ubWVudCwgaW5jbHVkaW5nOgogKgogKiAtIFRoZSB2YWx1ZXMgcmVwcmVzZW50ZWQgaW4gJF9TRVJWRVIuCiAqIC0gQW55IGNvb2tpZXMgcHJvdmlkZWQgKGdlbmVyYWxseSB2aWEgJF9DT09LSUUpCiAqIC0gUXVlcnkgc3RyaW5nIGFyZ3VtZW50cyAoZ2VuZXJhbGx5IHZpYSAkX0dFVCwgb3IgYXMgcGFyc2VkIHZpYSBwYXJzZV9zdHIoKSkKICogLSBVcGxvYWQgZmlsZXMsIGlmIGFueSAoYXMgcmVwcmVzZW50ZWQgYnkgJF9GSUxFUykKICogLSBEZXNlcmlhbGl6ZWQgYm9keSBwYXJhbWV0ZXJzIChnZW5lcmFsbHkgZnJvbSAkX1BPU1QpCiAqCiAqICRfU0VSVkVSIHZhbHVlcyBNVVNUIGJlIHRyZWF0ZWQgYXMgaW1tdXRhYmxlLCBhcyB0aGV5IHJlcHJlc2VudCBhcHBsaWNhdGlvbgogKiBzdGF0ZSBhdCB0aGUgdGltZSBvZiByZXF1ZXN0OyBhcyBzdWNoLCBubyBtZXRob2RzIGFyZSBwcm92aWRlZCB0byBhbGxvdwogKiBtb2RpZmljYXRpb24gb2YgdGhvc2UgdmFsdWVzLiBUaGUgb3RoZXIgdmFsdWVzIHByb3ZpZGUgc3VjaCBtZXRob2RzLCBhcyB0aGV5CiAqIGNhbiBiZSByZXN0b3JlZCBmcm9tICRfU0VSVkVSIG9yIHRoZSByZXF1ZXN0IGJvZHksIGFuZCBtYXkgbmVlZCB0cmVhdG1lbnQKICogZHVyaW5nIHRoZSBhcHBsaWNhdGlvbiAoZS5nLiwgYm9keSBwYXJhbWV0ZXJzIG1heSBiZSBkZXNlcmlhbGl6ZWQgYmFzZWQgb24KICogY29udGVudCB0eXBlKS4KICoKICogQWRkaXRpb25hbGx5LCB0aGlzIGludGVyZmFjZSByZWNvZ25pemVzIHRoZSB1dGlsaXR5IG9mIGludHJvc3BlY3RpbmcgYQogKiByZXF1ZXN0IHRvIGRlcml2ZSBhbmQgbWF0Y2ggYWRkaXRpb25hbCBwYXJhbWV0ZXJzIChlLmcuLCB2aWEgVVJJIHBhdGgKICogbWF0Y2hpbmcsIGRlY3J5cHRpbmcgY29va2llIHZhbHVlcywgZGVzZXJpYWxpemluZyBub24tZm9ybS1lbmNvZGVkIGJvZHkKICogY29udGVudCwgbWF0Y2hpbmcgYXV0aG9yaXphdGlvbiBoZWFkZXJzIHRvIHVzZXJzLCBldGMpLiBUaGVzZSBwYXJhbWV0ZXJzCiAqIGFyZSBzdG9yZWQgaW4gYW4gImF0dHJpYnV0ZXMiIHByb3BlcnR5LgogKgogKiBSZXF1ZXN0cyBhcmUgY29uc2lkZXJlZCBpbW11dGFibGU7IGFsbCBtZXRob2RzIHRoYXQgbWlnaHQgY2hhbmdlIHN0YXRlIE1VU1QKICogYmUgaW1wbGVtZW50ZWQgc3VjaCB0aGF0IHRoZXkgcmV0YWluIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgY3VycmVudAogKiBtZXNzYWdlIGFuZCByZXR1cm4gYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgY2hhbmdlZCBzdGF0ZS4KICovCmludGVyZmFjZSBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlIGV4dGVuZHMgUmVxdWVzdEludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFJldHJpZXZlIHNlcnZlciBwYXJhbWV0ZXJzLgogICAgICoKICAgICAqIFJldHJpZXZlcyBkYXRhIHJlbGF0ZWQgdG8gdGhlIGluY29taW5nIHJlcXVlc3QgZW52aXJvbm1lbnQsCiAgICAgKiB0eXBpY2FsbHkgZGVyaXZlZCBmcm9tIFBIUCdzICRfU0VSVkVSIHN1cGVyZ2xvYmFsLiBUaGUgZGF0YSBJUyBOT1QKICAgICAqIFJFUVVJUkVEIHRvIG9yaWdpbmF0ZSBmcm9tICRfU0VSVkVSLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNlcnZlclBhcmFtcygpOwoKICAgIC8qKgogICAgICogUmV0cmlldmUgY29va2llcy4KICAgICAqCiAgICAgKiBSZXRyaWV2ZXMgY29va2llcyBzZW50IGJ5IHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlci4KICAgICAqCiAgICAgKiBUaGUgZGF0YSBNVVNUIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgc3RydWN0dXJlIG9mIHRoZSAkX0NPT0tJRQogICAgICogc3VwZXJnbG9iYWwuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29va2llUGFyYW1zKCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGNvb2tpZXMuCiAgICAgKgogICAgICogVGhlIGRhdGEgSVMgTk9UIFJFUVVJUkVEIHRvIGNvbWUgZnJvbSB0aGUgJF9DT09LSUUgc3VwZXJnbG9iYWwsIGJ1dCBNVVNUCiAgICAgKiBiZSBjb21wYXRpYmxlIHdpdGggdGhlIHN0cnVjdHVyZSBvZiAkX0NPT0tJRS4gVHlwaWNhbGx5LCB0aGlzIGRhdGEgd2lsbAogICAgICogYmUgaW5qZWN0ZWQgYXQgaW5zdGFudGlhdGlvbi4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIE5PVCB1cGRhdGUgdGhlIHJlbGF0ZWQgQ29va2llIGhlYWRlciBvZiB0aGUgcmVxdWVzdAogICAgICogaW5zdGFuY2UsIG5vciByZWxhdGVkIHZhbHVlcyBpbiB0aGUgc2VydmVyIHBhcmFtcy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIGJlIGltcGxlbWVudGVkIGluIHN1Y2ggYSB3YXkgYXMgdG8gcmV0YWluIHRoZQogICAgICogaW1tdXRhYmlsaXR5IG9mIHRoZSBtZXNzYWdlLCBhbmQgTVVTVCByZXR1cm4gYW4gaW5zdGFuY2UgdGhhdCBoYXMgdGhlCiAgICAgKiB1cGRhdGVkIGNvb2tpZSB2YWx1ZXMuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRjb29raWVzIEFycmF5IG9mIGtleS92YWx1ZSBwYWlycyByZXByZXNlbnRpbmcgY29va2llcy4KICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoQ29va2llUGFyYW1zKGFycmF5ICRjb29raWVzKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIHF1ZXJ5IHN0cmluZyBhcmd1bWVudHMuCiAgICAgKgogICAgICogUmV0cmlldmVzIHRoZSBkZXNlcmlhbGl6ZWQgcXVlcnkgc3RyaW5nIGFyZ3VtZW50cywgaWYgYW55LgogICAgICoKICAgICAqIE5vdGU6IHRoZSBxdWVyeSBwYXJhbXMgbWlnaHQgbm90IGJlIGluIHN5bmMgd2l0aCB0aGUgVVJJIG9yIHNlcnZlcgogICAgICogcGFyYW1zLiBJZiB5b3UgbmVlZCB0byBlbnN1cmUgeW91IGFyZSBvbmx5IGdldHRpbmcgdGhlIG9yaWdpbmFsCiAgICAgKiB2YWx1ZXMsIHlvdSBtYXkgbmVlZCB0byBwYXJzZSB0aGUgcXVlcnkgc3RyaW5nIGZyb20gYGdldFVyaSgpLT5nZXRRdWVyeSgpYAogICAgICogb3IgZnJvbSB0aGUgYFFVRVJZX1NUUklOR2Agc2VydmVyIHBhcmFtLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFF1ZXJ5UGFyYW1zKCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHF1ZXJ5IHN0cmluZyBhcmd1bWVudHMuCiAgICAgKgogICAgICogVGhlc2UgdmFsdWVzIFNIT1VMRCByZW1haW4gaW1tdXRhYmxlIG92ZXIgdGhlIGNvdXJzZSBvZiB0aGUgaW5jb21pbmcKICAgICAqIHJlcXVlc3QuIFRoZXkgTUFZIGJlIGluamVjdGVkIGR1cmluZyBpbnN0YW50aWF0aW9uLCBzdWNoIGFzIGZyb20gUEhQJ3MKICAgICAqICRfR0VUIHN1cGVyZ2xvYmFsLCBvciBNQVkgYmUgZGVyaXZlZCBmcm9tIHNvbWUgb3RoZXIgdmFsdWUgc3VjaCBhcyB0aGUKICAgICAqIFVSSS4gSW4gY2FzZXMgd2hlcmUgdGhlIGFyZ3VtZW50cyBhcmUgcGFyc2VkIGZyb20gdGhlIFVSSSwgdGhlIGRhdGEKICAgICAqIE1VU1QgYmUgY29tcGF0aWJsZSB3aXRoIHdoYXQgUEhQJ3MgcGFyc2Vfc3RyKCkgd291bGQgcmV0dXJuIGZvcgogICAgICogcHVycG9zZXMgb2YgaG93IGR1cGxpY2F0ZSBxdWVyeSBwYXJhbWV0ZXJzIGFyZSBoYW5kbGVkLCBhbmQgaG93IG5lc3RlZAogICAgICogc2V0cyBhcmUgaGFuZGxlZC4KICAgICAqCiAgICAgKiBTZXR0aW5nIHF1ZXJ5IHN0cmluZyBhcmd1bWVudHMgTVVTVCBOT1QgY2hhbmdlIHRoZSBVUkkgc3RvcmVkIGJ5IHRoZQogICAgICogcmVxdWVzdCwgbm9yIHRoZSB2YWx1ZXMgaW4gdGhlIHNlcnZlciBwYXJhbXMuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgaGFzIHRoZQogICAgICogdXBkYXRlZCBxdWVyeSBzdHJpbmcgYXJndW1lbnRzLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkcXVlcnkgQXJyYXkgb2YgcXVlcnkgc3RyaW5nIGFyZ3VtZW50cywgdHlwaWNhbGx5IGZyb20KICAgICAqICAgICAkX0dFVC4KICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUXVlcnlQYXJhbXMoYXJyYXkgJHF1ZXJ5KTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIG5vcm1hbGl6ZWQgZmlsZSB1cGxvYWQgZGF0YS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHVwbG9hZCBtZXRhZGF0YSBpbiBhIG5vcm1hbGl6ZWQgdHJlZSwgd2l0aCBlYWNoIGxlYWYKICAgICAqIGFuIGluc3RhbmNlIG9mIFBzclxIdHRwXE1lc3NhZ2VcVXBsb2FkZWRGaWxlSW50ZXJmYWNlLgogICAgICoKICAgICAqIFRoZXNlIHZhbHVlcyBNQVkgYmUgcHJlcGFyZWQgZnJvbSAkX0ZJTEVTIG9yIHRoZSBtZXNzYWdlIGJvZHkgZHVyaW5nCiAgICAgKiBpbnN0YW50aWF0aW9uLCBvciBNQVkgYmUgaW5qZWN0ZWQgdmlhIHdpdGhVcGxvYWRlZEZpbGVzKCkuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBBbiBhcnJheSB0cmVlIG9mIFVwbG9hZGVkRmlsZUludGVyZmFjZSBpbnN0YW5jZXM7IGFuIGVtcHR5CiAgICAgKiAgICAgYXJyYXkgTVVTVCBiZSByZXR1cm5lZCBpZiBubyBkYXRhIGlzIHByZXNlbnQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVcGxvYWRlZEZpbGVzKCk7CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHVwbG9hZGVkIGZpbGVzLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgYmUgaW1wbGVtZW50ZWQgaW4gc3VjaCBhIHdheSBhcyB0byByZXRhaW4gdGhlCiAgICAgKiBpbW11dGFiaWxpdHkgb2YgdGhlIG1lc3NhZ2UsIGFuZCBNVVNUIHJldHVybiBhbiBpbnN0YW5jZSB0aGF0IGhhcyB0aGUKICAgICAqIHVwZGF0ZWQgYm9keSBwYXJhbWV0ZXJzLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkdXBsb2FkZWRGaWxlcyBBbiBhcnJheSB0cmVlIG9mIFVwbG9hZGVkRmlsZUludGVyZmFjZSBpbnN0YW5jZXMuCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmIGFuIGludmFsaWQgc3RydWN0dXJlIGlzIHByb3ZpZGVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFVwbG9hZGVkRmlsZXMoYXJyYXkgJHVwbG9hZGVkRmlsZXMpOwoKICAgIC8qKgogICAgICogUmV0cmlldmUgYW55IHBhcmFtZXRlcnMgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QgYm9keS4KICAgICAqCiAgICAgKiBJZiB0aGUgcmVxdWVzdCBDb250ZW50LVR5cGUgaXMgZWl0aGVyIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZAogICAgICogb3IgbXVsdGlwYXJ0L2Zvcm0tZGF0YSwgYW5kIHRoZSByZXF1ZXN0IG1ldGhvZCBpcyBQT1NULCB0aGlzIG1ldGhvZCBNVVNUCiAgICAgKiByZXR1cm4gdGhlIGNvbnRlbnRzIG9mICRfUE9TVC4KICAgICAqCiAgICAgKiBPdGhlcndpc2UsIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gYW55IHJlc3VsdHMgb2YgZGVzZXJpYWxpemluZwogICAgICogdGhlIHJlcXVlc3QgYm9keSBjb250ZW50OyBhcyBwYXJzaW5nIHJldHVybnMgc3RydWN0dXJlZCBjb250ZW50LCB0aGUKICAgICAqIHBvdGVudGlhbCB0eXBlcyBNVVNUIGJlIGFycmF5cyBvciBvYmplY3RzIG9ubHkuIEEgbnVsbCB2YWx1ZSBpbmRpY2F0ZXMKICAgICAqIHRoZSBhYnNlbmNlIG9mIGJvZHkgY29udGVudC4KICAgICAqCiAgICAgKiBAcmV0dXJuIG51bGx8YXJyYXl8b2JqZWN0IFRoZSBkZXNlcmlhbGl6ZWQgYm9keSBwYXJhbWV0ZXJzLCBpZiBhbnkuCiAgICAgKiAgICAgVGhlc2Ugd2lsbCB0eXBpY2FsbHkgYmUgYW4gYXJyYXkgb3Igb2JqZWN0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGFyc2VkQm9keSgpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBib2R5IHBhcmFtZXRlcnMuCiAgICAgKgogICAgICogVGhlc2UgTUFZIGJlIGluamVjdGVkIGR1cmluZyBpbnN0YW50aWF0aW9uLgogICAgICoKICAgICAqIElmIHRoZSByZXF1ZXN0IENvbnRlbnQtVHlwZSBpcyBlaXRoZXIgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkCiAgICAgKiBvciBtdWx0aXBhcnQvZm9ybS1kYXRhLCBhbmQgdGhlIHJlcXVlc3QgbWV0aG9kIGlzIFBPU1QsIHVzZSB0aGlzIG1ldGhvZAogICAgICogT05MWSB0byBpbmplY3QgdGhlIGNvbnRlbnRzIG9mICRfUE9TVC4KICAgICAqCiAgICAgKiBUaGUgZGF0YSBJUyBOT1QgUkVRVUlSRUQgdG8gY29tZSBmcm9tICRfUE9TVCwgYnV0IE1VU1QgYmUgdGhlIHJlc3VsdHMgb2YKICAgICAqIGRlc2VyaWFsaXppbmcgdGhlIHJlcXVlc3QgYm9keSBjb250ZW50LiBEZXNlcmlhbGl6YXRpb24vcGFyc2luZyByZXR1cm5zCiAgICAgKiBzdHJ1Y3R1cmVkIGRhdGEsIGFuZCwgYXMgc3VjaCwgdGhpcyBtZXRob2QgT05MWSBhY2NlcHRzIGFycmF5cyBvciBvYmplY3RzLAogICAgICogb3IgYSBudWxsIHZhbHVlIGlmIG5vdGhpbmcgd2FzIGF2YWlsYWJsZSB0byBwYXJzZS4KICAgICAqCiAgICAgKiBBcyBhbiBleGFtcGxlLCBpZiBjb250ZW50IG5lZ290aWF0aW9uIGRldGVybWluZXMgdGhhdCB0aGUgcmVxdWVzdCBkYXRhCiAgICAgKiBpcyBhIEpTT04gcGF5bG9hZCwgdGhpcyBtZXRob2QgY291bGQgYmUgdXNlZCB0byBjcmVhdGUgYSByZXF1ZXN0CiAgICAgKiBpbnN0YW5jZSB3aXRoIHRoZSBkZXNlcmlhbGl6ZWQgcGFyYW1ldGVycy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIGJlIGltcGxlbWVudGVkIGluIHN1Y2ggYSB3YXkgYXMgdG8gcmV0YWluIHRoZQogICAgICogaW1tdXRhYmlsaXR5IG9mIHRoZSBtZXNzYWdlLCBhbmQgTVVTVCByZXR1cm4gYW4gaW5zdGFuY2UgdGhhdCBoYXMgdGhlCiAgICAgKiB1cGRhdGVkIGJvZHkgcGFyYW1ldGVycy4KICAgICAqCiAgICAgKiBAcGFyYW0gbnVsbHxhcnJheXxvYmplY3QgJGRhdGEgVGhlIGRlc2VyaWFsaXplZCBib2R5IGRhdGEuIFRoaXMgd2lsbAogICAgICogICAgIHR5cGljYWxseSBiZSBpbiBhbiBhcnJheSBvciBvYmplY3QuCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmIGFuIHVuc3VwcG9ydGVkIGFyZ3VtZW50IHR5cGUgaXMKICAgICAqICAgICBwcm92aWRlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhQYXJzZWRCb2R5KCRkYXRhKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIGF0dHJpYnV0ZXMgZGVyaXZlZCBmcm9tIHRoZSByZXF1ZXN0LgogICAgICoKICAgICAqIFRoZSByZXF1ZXN0ICJhdHRyaWJ1dGVzIiBtYXkgYmUgdXNlZCB0byBhbGxvdyBpbmplY3Rpb24gb2YgYW55CiAgICAgKiBwYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdDogZS5nLiwgdGhlIHJlc3VsdHMgb2YgcGF0aAogICAgICogbWF0Y2ggb3BlcmF0aW9uczsgdGhlIHJlc3VsdHMgb2YgZGVjcnlwdGluZyBjb29raWVzOyB0aGUgcmVzdWx0cyBvZgogICAgICogZGVzZXJpYWxpemluZyBub24tZm9ybS1lbmNvZGVkIG1lc3NhZ2UgYm9kaWVzOyBldGMuIEF0dHJpYnV0ZXMKICAgICAqIHdpbGwgYmUgYXBwbGljYXRpb24gYW5kIHJlcXVlc3Qgc3BlY2lmaWMsIGFuZCBDQU4gYmUgbXV0YWJsZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5IEF0dHJpYnV0ZXMgZGVyaXZlZCBmcm9tIHRoZSByZXF1ZXN0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXR0cmlidXRlcygpOwoKICAgIC8qKgogICAgICogUmV0cmlldmUgYSBzaW5nbGUgZGVyaXZlZCByZXF1ZXN0IGF0dHJpYnV0ZS4KICAgICAqCiAgICAgKiBSZXRyaWV2ZXMgYSBzaW5nbGUgZGVyaXZlZCByZXF1ZXN0IGF0dHJpYnV0ZSBhcyBkZXNjcmliZWQgaW4KICAgICAqIGdldEF0dHJpYnV0ZXMoKS4gSWYgdGhlIGF0dHJpYnV0ZSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBzZXQsIHJldHVybnMKICAgICAqIHRoZSBkZWZhdWx0IHZhbHVlIGFzIHByb3ZpZGVkLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIG9idmlhdGVzIHRoZSBuZWVkIGZvciBhIGhhc0F0dHJpYnV0ZSgpIG1ldGhvZCwgYXMgaXQgYWxsb3dzCiAgICAgKiBzcGVjaWZ5aW5nIGEgZGVmYXVsdCB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIGF0dHJpYnV0ZSBpcyBub3QgZm91bmQuCiAgICAgKgogICAgICogQHNlZSBnZXRBdHRyaWJ1dGVzKCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIGF0dHJpYnV0ZSBuYW1lLgogICAgICogQHBhcmFtIG1peGVkICRkZWZhdWx0IERlZmF1bHQgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBhdHRyaWJ1dGUgZG9lcyBub3QgZXhpc3QuCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdHRyaWJ1dGUoc3RyaW5nICRuYW1lLCAkZGVmYXVsdCA9IG51bGwpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBkZXJpdmVkIHJlcXVlc3QgYXR0cmlidXRlLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIGFsbG93cyBzZXR0aW5nIGEgc2luZ2xlIGRlcml2ZWQgcmVxdWVzdCBhdHRyaWJ1dGUgYXMKICAgICAqIGRlc2NyaWJlZCBpbiBnZXRBdHRyaWJ1dGVzKCkuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgaGFzIHRoZQogICAgICogdXBkYXRlZCBhdHRyaWJ1dGUuCiAgICAgKgogICAgICogQHNlZSBnZXRBdHRyaWJ1dGVzKCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIGF0dHJpYnV0ZSBuYW1lLgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZS4KICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoQXR0cmlidXRlKHN0cmluZyAkbmFtZSwgJHZhbHVlKTsKCiAgICAvKioKICAgICAqIFJldHVybiBhbiBpbnN0YW5jZSB0aGF0IHJlbW92ZXMgdGhlIHNwZWNpZmllZCBkZXJpdmVkIHJlcXVlc3QgYXR0cmlidXRlLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIGFsbG93cyByZW1vdmluZyBhIHNpbmdsZSBkZXJpdmVkIHJlcXVlc3QgYXR0cmlidXRlIGFzCiAgICAgKiBkZXNjcmliZWQgaW4gZ2V0QXR0cmlidXRlcygpLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgYmUgaW1wbGVtZW50ZWQgaW4gc3VjaCBhIHdheSBhcyB0byByZXRhaW4gdGhlCiAgICAgKiBpbW11dGFiaWxpdHkgb2YgdGhlIG1lc3NhZ2UsIGFuZCBNVVNUIHJldHVybiBhbiBpbnN0YW5jZSB0aGF0IHJlbW92ZXMKICAgICAqIHRoZSBhdHRyaWJ1dGUuCiAgICAgKgogICAgICogQHNlZSBnZXRBdHRyaWJ1dGVzKCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIGF0dHJpYnV0ZSBuYW1lLgogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhvdXRBdHRyaWJ1dGUoc3RyaW5nICRuYW1lKTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/src/StreamInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFBzclxIdHRwXE1lc3NhZ2U7CgovKioKICogRGVzY3JpYmVzIGEgZGF0YSBzdHJlYW0uCiAqCiAqIFR5cGljYWxseSwgYW4gaW5zdGFuY2Ugd2lsbCB3cmFwIGEgUEhQIHN0cmVhbTsgdGhpcyBpbnRlcmZhY2UgcHJvdmlkZXMKICogYSB3cmFwcGVyIGFyb3VuZCB0aGUgbW9zdCBjb21tb24gb3BlcmF0aW9ucywgaW5jbHVkaW5nIHNlcmlhbGl6YXRpb24gb2YKICogdGhlIGVudGlyZSBzdHJlYW0gdG8gYSBzdHJpbmcuCiAqLwppbnRlcmZhY2UgU3RyZWFtSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmVhZHMgYWxsIGRhdGEgZnJvbSB0aGUgc3RyZWFtIGludG8gYSBzdHJpbmcsIGZyb20gdGhlIGJlZ2lubmluZyB0byBlbmQuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBhdHRlbXB0IHRvIHNlZWsgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyZWFtIGJlZm9yZQogICAgICogcmVhZGluZyBkYXRhIGFuZCByZWFkIHRoZSBzdHJlYW0gdW50aWwgdGhlIGVuZCBpcyByZWFjaGVkLgogICAgICoKICAgICAqIFdhcm5pbmc6IFRoaXMgY291bGQgYXR0ZW1wdCB0byBsb2FkIGEgbGFyZ2UgYW1vdW50IG9mIGRhdGEgaW50byBtZW1vcnkuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBOT1QgcmFpc2UgYW4gZXhjZXB0aW9uIGluIG9yZGVyIHRvIGNvbmZvcm0gd2l0aCBQSFAncwogICAgICogc3RyaW5nIGNhc3Rpbmcgb3BlcmF0aW9ucy4KICAgICAqCiAgICAgKiBAc2VlIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9sYW5ndWFnZS5vb3A1Lm1hZ2ljLnBocCNvYmplY3QudG9zdHJpbmcKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk7CgogICAgLyoqCiAgICAgKiBDbG9zZXMgdGhlIHN0cmVhbSBhbmQgYW55IHVuZGVybHlpbmcgcmVzb3VyY2VzLgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKTsKCiAgICAvKioKICAgICAqIFNlcGFyYXRlcyBhbnkgdW5kZXJseWluZyByZXNvdXJjZXMgZnJvbSB0aGUgc3RyZWFtLgogICAgICoKICAgICAqIEFmdGVyIHRoZSBzdHJlYW0gaGFzIGJlZW4gZGV0YWNoZWQsIHRoZSBzdHJlYW0gaXMgaW4gYW4gdW51c2FibGUgc3RhdGUuCiAgICAgKgogICAgICogQHJldHVybiByZXNvdXJjZXxudWxsIFVuZGVybHlpbmcgUEhQIHN0cmVhbSwgaWYgYW55CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZXRhY2goKTsKCiAgICAvKioKICAgICAqIEdldCB0aGUgc2l6ZSBvZiB0aGUgc3RyZWFtIGlmIGtub3duLgogICAgICoKICAgICAqIEByZXR1cm4gaW50fG51bGwgUmV0dXJucyB0aGUgc2l6ZSBpbiBieXRlcyBpZiBrbm93biwgb3IgbnVsbCBpZiB1bmtub3duLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2l6ZSgpOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiB0aGUgZmlsZSByZWFkL3dyaXRlIHBvaW50ZXIKICAgICAqCiAgICAgKiBAcmV0dXJuIGludCBQb3NpdGlvbiBvZiB0aGUgZmlsZSBwb2ludGVyCiAgICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVsbCgpOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBzdHJlYW0gaXMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW9mKCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBzdHJlYW0gaXMgc2Vla2FibGUuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1NlZWthYmxlKCk7CgogICAgLyoqCiAgICAgKiBTZWVrIHRvIGEgcG9zaXRpb24gaW4gdGhlIHN0cmVhbS4KICAgICAqCiAgICAgKiBAbGluayBodHRwOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmZzZWVrLnBocAogICAgICogQHBhcmFtIGludCAkb2Zmc2V0IFN0cmVhbSBvZmZzZXQKICAgICAqIEBwYXJhbSBpbnQgJHdoZW5jZSBTcGVjaWZpZXMgaG93IHRoZSBjdXJzb3IgcG9zaXRpb24gd2lsbCBiZSBjYWxjdWxhdGVkCiAgICAgKiAgICAgYmFzZWQgb24gdGhlIHNlZWsgb2Zmc2V0LiBWYWxpZCB2YWx1ZXMgYXJlIGlkZW50aWNhbCB0byB0aGUgYnVpbHQtaW4KICAgICAqICAgICBQSFAgJHdoZW5jZSB2YWx1ZXMgZm9yIGBmc2VlaygpYC4gIFNFRUtfU0VUOiBTZXQgcG9zaXRpb24gZXF1YWwgdG8KICAgICAqICAgICBvZmZzZXQgYnl0ZXMgU0VFS19DVVI6IFNldCBwb3NpdGlvbiB0byBjdXJyZW50IGxvY2F0aW9uIHBsdXMgb2Zmc2V0CiAgICAgKiAgICAgU0VFS19FTkQ6IFNldCBwb3NpdGlvbiB0byBlbmQtb2Ytc3RyZWFtIHBsdXMgb2Zmc2V0LgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VlayhpbnQgJG9mZnNldCwgaW50ICR3aGVuY2UgPSBTRUVLX1NFVCk7CgogICAgLyoqCiAgICAgKiBTZWVrIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmVhbS4KICAgICAqCiAgICAgKiBJZiB0aGUgc3RyZWFtIGlzIG5vdCBzZWVrYWJsZSwgdGhpcyBtZXRob2Qgd2lsbCByYWlzZSBhbiBleGNlcHRpb247CiAgICAgKiBvdGhlcndpc2UsIGl0IHdpbGwgcGVyZm9ybSBhIHNlZWsoMCkuCiAgICAgKgogICAgICogQHNlZSBzZWVrKCkKICAgICAqIEBsaW5rIGh0dHA6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZnNlZWsucGhwCiAgICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHN0cmVhbSBpcyB3cml0YWJsZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzV3JpdGFibGUoKTsKCiAgICAvKioKICAgICAqIFdyaXRlIGRhdGEgdG8gdGhlIHN0cmVhbS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgVGhlIHN0cmluZyB0aGF0IGlzIHRvIGJlIHdyaXR0ZW4uCiAgICAgKiBAcmV0dXJuIGludCBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byB0aGUgc3RyZWFtLgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGUoc3RyaW5nICRzdHJpbmcpOwoKICAgIC8qKgogICAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyZWFtIGlzIHJlYWRhYmxlLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNSZWFkYWJsZSgpOwoKICAgIC8qKgogICAgICogUmVhZCBkYXRhIGZyb20gdGhlIHN0cmVhbS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRsZW5ndGggUmVhZCB1cCB0byAkbGVuZ3RoIGJ5dGVzIGZyb20gdGhlIG9iamVjdCBhbmQgcmV0dXJuCiAgICAgKiAgICAgdGhlbS4gRmV3ZXIgdGhhbiAkbGVuZ3RoIGJ5dGVzIG1heSBiZSByZXR1cm5lZCBpZiB1bmRlcmx5aW5nIHN0cmVhbQogICAgICogICAgIGNhbGwgcmV0dXJucyBmZXdlciBieXRlcy4KICAgICAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIGRhdGEgcmVhZCBmcm9tIHRoZSBzdHJlYW0sIG9yIGFuIGVtcHR5IHN0cmluZwogICAgICogICAgIGlmIG5vIGJ5dGVzIGFyZSBhdmFpbGFibGUuCiAgICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIGlmIGFuIGVycm9yIG9jY3Vycy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlYWQoaW50ICRsZW5ndGgpOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmVtYWluaW5nIGNvbnRlbnRzIGluIGEgc3RyaW5nCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gaWYgdW5hYmxlIHRvIHJlYWQgb3IgYW4gZXJyb3Igb2NjdXJzIHdoaWxlCiAgICAgKiAgICAgcmVhZGluZy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnRzKCk7CgogICAgLyoqCiAgICAgKiBHZXQgc3RyZWFtIG1ldGFkYXRhIGFzIGFuIGFzc29jaWF0aXZlIGFycmF5IG9yIHJldHJpZXZlIGEgc3BlY2lmaWMga2V5LgogICAgICoKICAgICAqIFRoZSBrZXlzIHJldHVybmVkIGFyZSBpZGVudGljYWwgdG8gdGhlIGtleXMgcmV0dXJuZWQgZnJvbSBQSFAncwogICAgICogc3RyZWFtX2dldF9tZXRhX2RhdGEoKSBmdW5jdGlvbi4KICAgICAqCiAgICAgKiBAbGluayBodHRwOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3RyZWFtLWdldC1tZXRhLWRhdGEucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGtleSBTcGVjaWZpYyBtZXRhZGF0YSB0byByZXRyaWV2ZS4KICAgICAqIEByZXR1cm4gYXJyYXl8bWl4ZWR8bnVsbCBSZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IGlmIG5vIGtleSBpcwogICAgICogICAgIHByb3ZpZGVkLiBSZXR1cm5zIGEgc3BlY2lmaWMga2V5IHZhbHVlIGlmIGEga2V5IGlzIHByb3ZpZGVkIGFuZCB0aGUKICAgICAqICAgICB2YWx1ZSBpcyBmb3VuZCwgb3IgbnVsbCBpZiB0aGUga2V5IGlzIG5vdCBmb3VuZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1ldGFkYXRhKD9zdHJpbmcgJGtleSA9IG51bGwpOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/src/UploadedFileInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFBzclxIdHRwXE1lc3NhZ2U7CgovKioKICogVmFsdWUgb2JqZWN0IHJlcHJlc2VudGluZyBhIGZpbGUgdXBsb2FkZWQgdGhyb3VnaCBhbiBIVFRQIHJlcXVlc3QuCiAqCiAqIEluc3RhbmNlcyBvZiB0aGlzIGludGVyZmFjZSBhcmUgY29uc2lkZXJlZCBpbW11dGFibGU7IGFsbCBtZXRob2RzIHRoYXQKICogbWlnaHQgY2hhbmdlIHN0YXRlIE1VU1QgYmUgaW1wbGVtZW50ZWQgc3VjaCB0aGF0IHRoZXkgcmV0YWluIHRoZSBpbnRlcm5hbAogKiBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSBhbmQgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlCiAqIGNoYW5nZWQgc3RhdGUuCiAqLwppbnRlcmZhY2UgVXBsb2FkZWRGaWxlSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0cmlldmUgYSBzdHJlYW0gcmVwcmVzZW50aW5nIHRoZSB1cGxvYWRlZCBmaWxlLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0dXJuIGEgU3RyZWFtSW50ZXJmYWNlIGluc3RhbmNlLCByZXByZXNlbnRpbmcgdGhlCiAgICAgKiB1cGxvYWRlZCBmaWxlLiBUaGUgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBhbGxvdyB1dGlsaXppbmcgbmF0aXZlIFBIUAogICAgICogc3RyZWFtIGZ1bmN0aW9uYWxpdHkgdG8gbWFuaXB1bGF0ZSB0aGUgZmlsZSB1cGxvYWQsIHN1Y2ggYXMKICAgICAqIHN0cmVhbV9jb3B5X3RvX3N0cmVhbSgpICh0aG91Z2ggdGhlIHJlc3VsdCB3aWxsIG5lZWQgdG8gYmUgZGVjb3JhdGVkIGluIGEKICAgICAqIG5hdGl2ZSBQSFAgc3RyZWFtIHdyYXBwZXIgdG8gd29yayB3aXRoIHN1Y2ggZnVuY3Rpb25zKS4KICAgICAqCiAgICAgKiBJZiB0aGUgbW92ZVRvKCkgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZCBwcmV2aW91c2x5LCB0aGlzIG1ldGhvZCBNVVNUIHJhaXNlCiAgICAgKiBhbiBleGNlcHRpb24uCiAgICAgKgogICAgICogQHJldHVybiBTdHJlYW1JbnRlcmZhY2UgU3RyZWFtIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB1cGxvYWRlZCBmaWxlLgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBpbiBjYXNlcyB3aGVuIG5vIHN0cmVhbSBpcyBhdmFpbGFibGUgb3IgY2FuIGJlCiAgICAgKiAgICAgY3JlYXRlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0cmVhbSgpOwoKICAgIC8qKgogICAgICogTW92ZSB0aGUgdXBsb2FkZWQgZmlsZSB0byBhIG5ldyBsb2NhdGlvbi4KICAgICAqCiAgICAgKiBVc2UgdGhpcyBtZXRob2QgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gbW92ZV91cGxvYWRlZF9maWxlKCkuIFRoaXMgbWV0aG9kIGlzCiAgICAgKiBndWFyYW50ZWVkIHRvIHdvcmsgaW4gYm90aCBTQVBJIGFuZCBub24tU0FQSSBlbnZpcm9ubWVudHMuCiAgICAgKiBJbXBsZW1lbnRhdGlvbnMgbXVzdCBkZXRlcm1pbmUgd2hpY2ggZW52aXJvbm1lbnQgdGhleSBhcmUgaW4sIGFuZCB1c2UgdGhlCiAgICAgKiBhcHByb3ByaWF0ZSBtZXRob2QgKG1vdmVfdXBsb2FkZWRfZmlsZSgpLCByZW5hbWUoKSwgb3IgYSBzdHJlYW0KICAgICAqIG9wZXJhdGlvbikgdG8gcGVyZm9ybSB0aGUgb3BlcmF0aW9uLgogICAgICoKICAgICAqICR0YXJnZXRQYXRoIG1heSBiZSBhbiBhYnNvbHV0ZSBwYXRoLCBvciBhIHJlbGF0aXZlIHBhdGguIElmIGl0IGlzIGEKICAgICAqIHJlbGF0aXZlIHBhdGgsIHJlc29sdXRpb24gc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHVzZWQgYnkgUEhQJ3MgcmVuYW1lKCkKICAgICAqIGZ1bmN0aW9uLgogICAgICoKICAgICAqIFRoZSBvcmlnaW5hbCBmaWxlIG9yIHN0cmVhbSBNVVNUIGJlIHJlbW92ZWQgb24gY29tcGxldGlvbi4KICAgICAqCiAgICAgKiBJZiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgbW9yZSB0aGFuIG9uY2UsIGFueSBzdWJzZXF1ZW50IGNhbGxzIE1VU1QgcmFpc2UKICAgICAqIGFuIGV4Y2VwdGlvbi4KICAgICAqCiAgICAgKiBXaGVuIHVzZWQgaW4gYW4gU0FQSSBlbnZpcm9ubWVudCB3aGVyZSAkX0ZJTEVTIGlzIHBvcHVsYXRlZCwgd2hlbiB3cml0aW5nCiAgICAgKiBmaWxlcyB2aWEgbW92ZVRvKCksIGlzX3VwbG9hZGVkX2ZpbGUoKSBhbmQgbW92ZV91cGxvYWRlZF9maWxlKCkgU0hPVUxEIGJlCiAgICAgKiB1c2VkIHRvIGVuc3VyZSBwZXJtaXNzaW9ucyBhbmQgdXBsb2FkIHN0YXR1cyBhcmUgdmVyaWZpZWQgY29ycmVjdGx5LgogICAgICoKICAgICAqIElmIHlvdSB3aXNoIHRvIG1vdmUgdG8gYSBzdHJlYW0sIHVzZSBnZXRTdHJlYW0oKSwgYXMgU0FQSSBvcGVyYXRpb25zCiAgICAgKiBjYW5ub3QgZ3VhcmFudGVlIHdyaXRpbmcgdG8gc3RyZWFtIGRlc3RpbmF0aW9ucy4KICAgICAqCiAgICAgKiBAc2VlIGh0dHA6Ly9waHAubmV0L2lzX3VwbG9hZGVkX2ZpbGUKICAgICAqIEBzZWUgaHR0cDovL3BocC5uZXQvbW92ZV91cGxvYWRlZF9maWxlCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0YXJnZXRQYXRoIFBhdGggdG8gd2hpY2ggdG8gbW92ZSB0aGUgdXBsb2FkZWQgZmlsZS4KICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgJHRhcmdldFBhdGggc3BlY2lmaWVkIGlzIGludmFsaWQuCiAgICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIG9uIGFueSBlcnJvciBkdXJpbmcgdGhlIG1vdmUgb3BlcmF0aW9uLCBvciBvbgogICAgICogICAgIHRoZSBzZWNvbmQgb3Igc3Vic2VxdWVudCBjYWxsIHRvIHRoZSBtZXRob2QuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtb3ZlVG8oc3RyaW5nICR0YXJnZXRQYXRoKTsKICAgIAogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgZmlsZSBzaXplLgogICAgICoKICAgICAqIEltcGxlbWVudGF0aW9ucyBTSE9VTEQgcmV0dXJuIHRoZSB2YWx1ZSBzdG9yZWQgaW4gdGhlICJzaXplIiBrZXkgb2YKICAgICAqIHRoZSBmaWxlIGluIHRoZSAkX0ZJTEVTIGFycmF5IGlmIGF2YWlsYWJsZSwgYXMgUEhQIGNhbGN1bGF0ZXMgdGhpcyBiYXNlZAogICAgICogb24gdGhlIGFjdHVhbCBzaXplIHRyYW5zbWl0dGVkLgogICAgICoKICAgICAqIEByZXR1cm4gaW50fG51bGwgVGhlIGZpbGUgc2l6ZSBpbiBieXRlcyBvciBudWxsIGlmIHVua25vd24uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaXplKCk7CiAgICAKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIGVycm9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgdXBsb2FkZWQgZmlsZS4KICAgICAqCiAgICAgKiBUaGUgcmV0dXJuIHZhbHVlIE1VU1QgYmUgb25lIG9mIFBIUCdzIFVQTE9BRF9FUlJfWFhYIGNvbnN0YW50cy4KICAgICAqCiAgICAgKiBJZiB0aGUgZmlsZSB3YXMgdXBsb2FkZWQgc3VjY2Vzc2Z1bGx5LCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybgogICAgICogVVBMT0FEX0VSUl9PSy4KICAgICAqCiAgICAgKiBJbXBsZW1lbnRhdGlvbnMgU0hPVUxEIHJldHVybiB0aGUgdmFsdWUgc3RvcmVkIGluIHRoZSAiZXJyb3IiIGtleSBvZgogICAgICogdGhlIGZpbGUgaW4gdGhlICRfRklMRVMgYXJyYXkuCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vcGhwLm5ldC9tYW51YWwvZW4vZmVhdHVyZXMuZmlsZS11cGxvYWQuZXJyb3JzLnBocAogICAgICogQHJldHVybiBpbnQgT25lIG9mIFBIUCdzIFVQTE9BRF9FUlJfWFhYIGNvbnN0YW50cy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEVycm9yKCk7CiAgICAKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIGZpbGVuYW1lIHNlbnQgYnkgdGhlIGNsaWVudC4KICAgICAqCiAgICAgKiBEbyBub3QgdHJ1c3QgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoaXMgbWV0aG9kLiBBIGNsaWVudCBjb3VsZCBzZW5kCiAgICAgKiBhIG1hbGljaW91cyBmaWxlbmFtZSB3aXRoIHRoZSBpbnRlbnRpb24gdG8gY29ycnVwdCBvciBoYWNrIHlvdXIKICAgICAqIGFwcGxpY2F0aW9uLgogICAgICoKICAgICAqIEltcGxlbWVudGF0aW9ucyBTSE9VTEQgcmV0dXJuIHRoZSB2YWx1ZSBzdG9yZWQgaW4gdGhlICJuYW1lIiBrZXkgb2YKICAgICAqIHRoZSBmaWxlIGluIHRoZSAkX0ZJTEVTIGFycmF5LgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIGZpbGVuYW1lIHNlbnQgYnkgdGhlIGNsaWVudCBvciBudWxsIGlmIG5vbmUKICAgICAqICAgICB3YXMgcHJvdmlkZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbGllbnRGaWxlbmFtZSgpOwogICAgCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBtZWRpYSB0eXBlIHNlbnQgYnkgdGhlIGNsaWVudC4KICAgICAqCiAgICAgKiBEbyBub3QgdHJ1c3QgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoaXMgbWV0aG9kLiBBIGNsaWVudCBjb3VsZCBzZW5kCiAgICAgKiBhIG1hbGljaW91cyBtZWRpYSB0eXBlIHdpdGggdGhlIGludGVudGlvbiB0byBjb3JydXB0IG9yIGhhY2sgeW91cgogICAgICogYXBwbGljYXRpb24uCiAgICAgKgogICAgICogSW1wbGVtZW50YXRpb25zIFNIT1VMRCByZXR1cm4gdGhlIHZhbHVlIHN0b3JlZCBpbiB0aGUgInR5cGUiIGtleSBvZgogICAgICogdGhlIGZpbGUgaW4gdGhlICRfRklMRVMgYXJyYXkuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBUaGUgbWVkaWEgdHlwZSBzZW50IGJ5IHRoZSBjbGllbnQgb3IgbnVsbCBpZiBub25lCiAgICAgKiAgICAgd2FzIHByb3ZpZGVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xpZW50TWVkaWFUeXBlKCk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/src/UriInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFBzclxIdHRwXE1lc3NhZ2U7CgovKioKICogVmFsdWUgb2JqZWN0IHJlcHJlc2VudGluZyBhIFVSSS4KICoKICogVGhpcyBpbnRlcmZhY2UgaXMgbWVhbnQgdG8gcmVwcmVzZW50IFVSSXMgYWNjb3JkaW5nIHRvIFJGQyAzOTg2IGFuZCB0bwogKiBwcm92aWRlIG1ldGhvZHMgZm9yIG1vc3QgY29tbW9uIG9wZXJhdGlvbnMuIEFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eSBmb3IKICogd29ya2luZyB3aXRoIFVSSXMgY2FuIGJlIHByb3ZpZGVkIG9uIHRvcCBvZiB0aGUgaW50ZXJmYWNlIG9yIGV4dGVybmFsbHkuCiAqIEl0cyBwcmltYXJ5IHVzZSBpcyBmb3IgSFRUUCByZXF1ZXN0cywgYnV0IG1heSBhbHNvIGJlIHVzZWQgaW4gb3RoZXIKICogY29udGV4dHMuCiAqCiAqIEluc3RhbmNlcyBvZiB0aGlzIGludGVyZmFjZSBhcmUgY29uc2lkZXJlZCBpbW11dGFibGU7IGFsbCBtZXRob2RzIHRoYXQKICogbWlnaHQgY2hhbmdlIHN0YXRlIE1VU1QgYmUgaW1wbGVtZW50ZWQgc3VjaCB0aGF0IHRoZXkgcmV0YWluIHRoZSBpbnRlcm5hbAogKiBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSBhbmQgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlCiAqIGNoYW5nZWQgc3RhdGUuCiAqCiAqIFR5cGljYWxseSB0aGUgSG9zdCBoZWFkZXIgd2lsbCBiZSBhbHNvIGJlIHByZXNlbnQgaW4gdGhlIHJlcXVlc3QgbWVzc2FnZS4KICogRm9yIHNlcnZlci1zaWRlIHJlcXVlc3RzLCB0aGUgc2NoZW1lIHdpbGwgdHlwaWNhbGx5IGJlIGRpc2NvdmVyYWJsZSBpbiB0aGUKICogc2VydmVyIHBhcmFtZXRlcnMuCiAqCiAqIEBsaW5rIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYgKHRoZSBVUkkgc3BlY2lmaWNhdGlvbikKICovCmludGVyZmFjZSBVcmlJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgc2NoZW1lIGNvbXBvbmVudCBvZiB0aGUgVVJJLgogICAgICoKICAgICAqIElmIG5vIHNjaGVtZSBpcyBwcmVzZW50LCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybiBhbiBlbXB0eSBzdHJpbmcuCiAgICAgKgogICAgICogVGhlIHZhbHVlIHJldHVybmVkIE1VU1QgYmUgbm9ybWFsaXplZCB0byBsb3dlcmNhc2UsIHBlciBSRkMgMzk4NgogICAgICogU2VjdGlvbiAzLjEuCiAgICAgKgogICAgICogVGhlIHRyYWlsaW5nICI6IiBjaGFyYWN0ZXIgaXMgbm90IHBhcnQgb2YgdGhlIHNjaGVtZSBhbmQgTVVTVCBOT1QgYmUKICAgICAqIGFkZGVkLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjEKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBVUkkgc2NoZW1lLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2NoZW1lKCk7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgYXV0aG9yaXR5IGNvbXBvbmVudCBvZiB0aGUgVVJJLgogICAgICoKICAgICAqIElmIG5vIGF1dGhvcml0eSBpbmZvcm1hdGlvbiBpcyBwcmVzZW50LCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybiBhbiBlbXB0eQogICAgICogc3RyaW5nLgogICAgICoKICAgICAqIFRoZSBhdXRob3JpdHkgc3ludGF4IG9mIHRoZSBVUkkgaXM6CiAgICAgKgogICAgICogPHByZT4KICAgICAqIFt1c2VyLWluZm9AXWhvc3RbOnBvcnRdCiAgICAgKiA8L3ByZT4KICAgICAqCiAgICAgKiBJZiB0aGUgcG9ydCBjb21wb25lbnQgaXMgbm90IHNldCBvciBpcyB0aGUgc3RhbmRhcmQgcG9ydCBmb3IgdGhlIGN1cnJlbnQKICAgICAqIHNjaGVtZSwgaXQgU0hPVUxEIE5PVCBiZSBpbmNsdWRlZC4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4yCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgVVJJIGF1dGhvcml0eSwgaW4gIlt1c2VyLWluZm9AXWhvc3RbOnBvcnRdIiBmb3JtYXQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdXRob3JpdHkoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSB1c2VyIGluZm9ybWF0aW9uIGNvbXBvbmVudCBvZiB0aGUgVVJJLgogICAgICoKICAgICAqIElmIG5vIHVzZXIgaW5mb3JtYXRpb24gaXMgcHJlc2VudCwgdGhpcyBtZXRob2QgTVVTVCByZXR1cm4gYW4gZW1wdHkKICAgICAqIHN0cmluZy4KICAgICAqCiAgICAgKiBJZiBhIHVzZXIgaXMgcHJlc2VudCBpbiB0aGUgVVJJLCB0aGlzIHdpbGwgcmV0dXJuIHRoYXQgdmFsdWU7CiAgICAgKiBhZGRpdGlvbmFsbHksIGlmIHRoZSBwYXNzd29yZCBpcyBhbHNvIHByZXNlbnQsIGl0IHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlCiAgICAgKiB1c2VyIHZhbHVlLCB3aXRoIGEgY29sb24gKCI6Iikgc2VwYXJhdGluZyB0aGUgdmFsdWVzLgogICAgICoKICAgICAqIFRoZSB0cmFpbGluZyAiQCIgY2hhcmFjdGVyIGlzIG5vdCBwYXJ0IG9mIHRoZSB1c2VyIGluZm9ybWF0aW9uIGFuZCBNVVNUCiAgICAgKiBOT1QgYmUgYWRkZWQuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIFVSSSB1c2VyIGluZm9ybWF0aW9uLCBpbiAidXNlcm5hbWVbOnBhc3N3b3JkXSIgZm9ybWF0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VXNlckluZm8oKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBob3N0IGNvbXBvbmVudCBvZiB0aGUgVVJJLgogICAgICoKICAgICAqIElmIG5vIGhvc3QgaXMgcHJlc2VudCwgdGhpcyBtZXRob2QgTVVTVCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nLgogICAgICoKICAgICAqIFRoZSB2YWx1ZSByZXR1cm5lZCBNVVNUIGJlIG5vcm1hbGl6ZWQgdG8gbG93ZXJjYXNlLCBwZXIgUkZDIDM5ODYKICAgICAqIFNlY3Rpb24gMy4yLjIuCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4yLjIKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBVUkkgaG9zdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEhvc3QoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBwb3J0IGNvbXBvbmVudCBvZiB0aGUgVVJJLgogICAgICoKICAgICAqIElmIGEgcG9ydCBpcyBwcmVzZW50LCBhbmQgaXQgaXMgbm9uLXN0YW5kYXJkIGZvciB0aGUgY3VycmVudCBzY2hlbWUsCiAgICAgKiB0aGlzIG1ldGhvZCBNVVNUIHJldHVybiBpdCBhcyBhbiBpbnRlZ2VyLiBJZiB0aGUgcG9ydCBpcyB0aGUgc3RhbmRhcmQgcG9ydAogICAgICogdXNlZCB3aXRoIHRoZSBjdXJyZW50IHNjaGVtZSwgdGhpcyBtZXRob2QgU0hPVUxEIHJldHVybiBudWxsLgogICAgICoKICAgICAqIElmIG5vIHBvcnQgaXMgcHJlc2VudCwgYW5kIG5vIHNjaGVtZSBpcyBwcmVzZW50LCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybgogICAgICogYSBudWxsIHZhbHVlLgogICAgICoKICAgICAqIElmIG5vIHBvcnQgaXMgcHJlc2VudCwgYnV0IGEgc2NoZW1lIGlzIHByZXNlbnQsIHRoaXMgbWV0aG9kIE1BWSByZXR1cm4KICAgICAqIHRoZSBzdGFuZGFyZCBwb3J0IGZvciB0aGF0IHNjaGVtZSwgYnV0IFNIT1VMRCByZXR1cm4gbnVsbC4KICAgICAqCiAgICAgKiBAcmV0dXJuIG51bGx8aW50IFRoZSBVUkkgcG9ydC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBvcnQoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBwYXRoIGNvbXBvbmVudCBvZiB0aGUgVVJJLgogICAgICoKICAgICAqIFRoZSBwYXRoIGNhbiBlaXRoZXIgYmUgZW1wdHkgb3IgYWJzb2x1dGUgKHN0YXJ0aW5nIHdpdGggYSBzbGFzaCkgb3IKICAgICAqIHJvb3RsZXNzIChub3Qgc3RhcnRpbmcgd2l0aCBhIHNsYXNoKS4gSW1wbGVtZW50YXRpb25zIE1VU1Qgc3VwcG9ydCBhbGwKICAgICAqIHRocmVlIHN5bnRheGVzLgogICAgICoKICAgICAqIE5vcm1hbGx5LCB0aGUgZW1wdHkgcGF0aCAiIiBhbmQgYWJzb2x1dGUgcGF0aCAiLyIgYXJlIGNvbnNpZGVyZWQgZXF1YWwgYXMKICAgICAqIGRlZmluZWQgaW4gUkZDIDcyMzAgU2VjdGlvbiAyLjcuMy4gQnV0IHRoaXMgbWV0aG9kIE1VU1QgTk9UIGF1dG9tYXRpY2FsbHkKICAgICAqIGRvIHRoaXMgbm9ybWFsaXphdGlvbiBiZWNhdXNlIGluIGNvbnRleHRzIHdpdGggYSB0cmltbWVkIGJhc2UgcGF0aCwgZS5nLgogICAgICogdGhlIGZyb250IGNvbnRyb2xsZXIsIHRoaXMgZGlmZmVyZW5jZSBiZWNvbWVzIHNpZ25pZmljYW50LiBJdCdzIHRoZSB0YXNrCiAgICAgKiBvZiB0aGUgdXNlciB0byBoYW5kbGUgYm90aCAiIiBhbmQgIi8iLgogICAgICoKICAgICAqIFRoZSB2YWx1ZSByZXR1cm5lZCBNVVNUIGJlIHBlcmNlbnQtZW5jb2RlZCwgYnV0IE1VU1QgTk9UIGRvdWJsZS1lbmNvZGUKICAgICAqIGFueSBjaGFyYWN0ZXJzLiBUbyBkZXRlcm1pbmUgd2hhdCBjaGFyYWN0ZXJzIHRvIGVuY29kZSwgcGxlYXNlIHJlZmVyIHRvCiAgICAgKiBSRkMgMzk4NiwgU2VjdGlvbnMgMiBhbmQgMy4zLgogICAgICoKICAgICAqIEFzIGFuIGV4YW1wbGUsIGlmIHRoZSB2YWx1ZSBzaG91bGQgaW5jbHVkZSBhIHNsYXNoICgiLyIpIG5vdCBpbnRlbmRlZCBhcwogICAgICogZGVsaW1pdGVyIGJldHdlZW4gcGF0aCBzZWdtZW50cywgdGhhdCB2YWx1ZSBNVVNUIGJlIHBhc3NlZCBpbiBlbmNvZGVkCiAgICAgKiBmb3JtIChlLmcuLCAiJTJGIikgdG8gdGhlIGluc3RhbmNlLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0yCiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4zCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgVVJJIHBhdGguCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQYXRoKCk7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgcXVlcnkgc3RyaW5nIG9mIHRoZSBVUkkuCiAgICAgKgogICAgICogSWYgbm8gcXVlcnkgc3RyaW5nIGlzIHByZXNlbnQsIHRoaXMgbWV0aG9kIE1VU1QgcmV0dXJuIGFuIGVtcHR5IHN0cmluZy4KICAgICAqCiAgICAgKiBUaGUgbGVhZGluZyAiPyIgY2hhcmFjdGVyIGlzIG5vdCBwYXJ0IG9mIHRoZSBxdWVyeSBhbmQgTVVTVCBOT1QgYmUKICAgICAqIGFkZGVkLgogICAgICoKICAgICAqIFRoZSB2YWx1ZSByZXR1cm5lZCBNVVNUIGJlIHBlcmNlbnQtZW5jb2RlZCwgYnV0IE1VU1QgTk9UIGRvdWJsZS1lbmNvZGUKICAgICAqIGFueSBjaGFyYWN0ZXJzLiBUbyBkZXRlcm1pbmUgd2hhdCBjaGFyYWN0ZXJzIHRvIGVuY29kZSwgcGxlYXNlIHJlZmVyIHRvCiAgICAgKiBSRkMgMzk4NiwgU2VjdGlvbnMgMiBhbmQgMy40LgogICAgICoKICAgICAqIEFzIGFuIGV4YW1wbGUsIGlmIGEgdmFsdWUgaW4gYSBrZXkvdmFsdWUgcGFpciBvZiB0aGUgcXVlcnkgc3RyaW5nIHNob3VsZAogICAgICogaW5jbHVkZSBhbiBhbXBlcnNhbmQgKCImIikgbm90IGludGVuZGVkIGFzIGEgZGVsaW1pdGVyIGJldHdlZW4gdmFsdWVzLAogICAgICogdGhhdCB2YWx1ZSBNVVNUIGJlIHBhc3NlZCBpbiBlbmNvZGVkIGZvcm0gKGUuZy4sICIlMjYiKSB0byB0aGUgaW5zdGFuY2UuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTIKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjQKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBVUkkgcXVlcnkgc3RyaW5nLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UXVlcnkoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBmcmFnbWVudCBjb21wb25lbnQgb2YgdGhlIFVSSS4KICAgICAqCiAgICAgKiBJZiBubyBmcmFnbWVudCBpcyBwcmVzZW50LCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybiBhbiBlbXB0eSBzdHJpbmcuCiAgICAgKgogICAgICogVGhlIGxlYWRpbmcgIiMiIGNoYXJhY3RlciBpcyBub3QgcGFydCBvZiB0aGUgZnJhZ21lbnQgYW5kIE1VU1QgTk9UIGJlCiAgICAgKiBhZGRlZC4KICAgICAqCiAgICAgKiBUaGUgdmFsdWUgcmV0dXJuZWQgTVVTVCBiZSBwZXJjZW50LWVuY29kZWQsIGJ1dCBNVVNUIE5PVCBkb3VibGUtZW5jb2RlCiAgICAgKiBhbnkgY2hhcmFjdGVycy4gVG8gZGV0ZXJtaW5lIHdoYXQgY2hhcmFjdGVycyB0byBlbmNvZGUsIHBsZWFzZSByZWZlciB0bwogICAgICogUkZDIDM5ODYsIFNlY3Rpb25zIDIgYW5kIDMuNS4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMgogICAgICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTMuNQogICAgICogQHJldHVybiBzdHJpbmcgVGhlIFVSSSBmcmFnbWVudC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZyYWdtZW50KCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHNjaGVtZS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIHNwZWNpZmllZCBzY2hlbWUuCiAgICAgKgogICAgICogSW1wbGVtZW50YXRpb25zIE1VU1Qgc3VwcG9ydCB0aGUgc2NoZW1lcyAiaHR0cCIgYW5kICJodHRwcyIgY2FzZQogICAgICogaW5zZW5zaXRpdmVseSwgYW5kIE1BWSBhY2NvbW1vZGF0ZSBvdGhlciBzY2hlbWVzIGlmIHJlcXVpcmVkLgogICAgICoKICAgICAqIEFuIGVtcHR5IHNjaGVtZSBpcyBlcXVpdmFsZW50IHRvIHJlbW92aW5nIHRoZSBzY2hlbWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2NoZW1lIFRoZSBzY2hlbWUgdG8gdXNlIHdpdGggdGhlIG5ldyBpbnN0YW5jZS4KICAgICAqIEByZXR1cm4gc3RhdGljIEEgbmV3IGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBzY2hlbWUuCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9yIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQgc2NoZW1lcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhTY2hlbWUoc3RyaW5nICRzY2hlbWUpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCB1c2VyIGluZm9ybWF0aW9uLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgc3BlY2lmaWVkIHVzZXIgaW5mb3JtYXRpb24uCiAgICAgKgogICAgICogUGFzc3dvcmQgaXMgb3B0aW9uYWwsIGJ1dCB0aGUgdXNlciBpbmZvcm1hdGlvbiBNVVNUIGluY2x1ZGUgdGhlCiAgICAgKiB1c2VyOyBhbiBlbXB0eSBzdHJpbmcgZm9yIHRoZSB1c2VyIGlzIGVxdWl2YWxlbnQgdG8gcmVtb3ZpbmcgdXNlcgogICAgICogaW5mb3JtYXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdXNlciBUaGUgdXNlciBuYW1lIHRvIHVzZSBmb3IgYXV0aG9yaXR5LgogICAgICogQHBhcmFtIG51bGx8c3RyaW5nICRwYXNzd29yZCBUaGUgcGFzc3dvcmQgYXNzb2NpYXRlZCB3aXRoICR1c2VyLgogICAgICogQHJldHVybiBzdGF0aWMgQSBuZXcgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHVzZXIgaW5mb3JtYXRpb24uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoVXNlckluZm8oc3RyaW5nICR1c2VyLCA/c3RyaW5nICRwYXNzd29yZCA9IG51bGwpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBob3N0LgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgc3BlY2lmaWVkIGhvc3QuCiAgICAgKgogICAgICogQW4gZW1wdHkgaG9zdCB2YWx1ZSBpcyBlcXVpdmFsZW50IHRvIHJlbW92aW5nIHRoZSBob3N0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGhvc3QgVGhlIGhvc3RuYW1lIHRvIHVzZSB3aXRoIHRoZSBuZXcgaW5zdGFuY2UuCiAgICAgKiBAcmV0dXJuIHN0YXRpYyBBIG5ldyBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgaG9zdC4KICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3IgaW52YWxpZCBob3N0bmFtZXMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoSG9zdChzdHJpbmcgJGhvc3QpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBwb3J0LgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgc3BlY2lmaWVkIHBvcnQuCiAgICAgKgogICAgICogSW1wbGVtZW50YXRpb25zIE1VU1QgcmFpc2UgYW4gZXhjZXB0aW9uIGZvciBwb3J0cyBvdXRzaWRlIHRoZQogICAgICogZXN0YWJsaXNoZWQgVENQIGFuZCBVRFAgcG9ydCByYW5nZXMuCiAgICAgKgogICAgICogQSBudWxsIHZhbHVlIHByb3ZpZGVkIGZvciB0aGUgcG9ydCBpcyBlcXVpdmFsZW50IHRvIHJlbW92aW5nIHRoZSBwb3J0CiAgICAgKiBpbmZvcm1hdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gbnVsbHxpbnQgJHBvcnQgVGhlIHBvcnQgdG8gdXNlIHdpdGggdGhlIG5ldyBpbnN0YW5jZTsgYSBudWxsIHZhbHVlCiAgICAgKiAgICAgcmVtb3ZlcyB0aGUgcG9ydCBpbmZvcm1hdGlvbi4KICAgICAqIEByZXR1cm4gc3RhdGljIEEgbmV3IGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBwb3J0LgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvciBpbnZhbGlkIHBvcnRzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFBvcnQoP2ludCAkcG9ydCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHBhdGguCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgcGF0aC4KICAgICAqCiAgICAgKiBUaGUgcGF0aCBjYW4gZWl0aGVyIGJlIGVtcHR5IG9yIGFic29sdXRlIChzdGFydGluZyB3aXRoIGEgc2xhc2gpIG9yCiAgICAgKiByb290bGVzcyAobm90IHN0YXJ0aW5nIHdpdGggYSBzbGFzaCkuIEltcGxlbWVudGF0aW9ucyBNVVNUIHN1cHBvcnQgYWxsCiAgICAgKiB0aHJlZSBzeW50YXhlcy4KICAgICAqCiAgICAgKiBJZiB0aGUgcGF0aCBpcyBpbnRlbmRlZCB0byBiZSBkb21haW4tcmVsYXRpdmUgcmF0aGVyIHRoYW4gcGF0aCByZWxhdGl2ZSB0aGVuCiAgICAgKiBpdCBtdXN0IGJlZ2luIHdpdGggYSBzbGFzaCAoIi8iKS4gUGF0aHMgbm90IHN0YXJ0aW5nIHdpdGggYSBzbGFzaCAoIi8iKQogICAgICogYXJlIGFzc3VtZWQgdG8gYmUgcmVsYXRpdmUgdG8gc29tZSBiYXNlIHBhdGgga25vd24gdG8gdGhlIGFwcGxpY2F0aW9uIG9yCiAgICAgKiBjb25zdW1lci4KICAgICAqCiAgICAgKiBVc2VycyBjYW4gcHJvdmlkZSBib3RoIGVuY29kZWQgYW5kIGRlY29kZWQgcGF0aCBjaGFyYWN0ZXJzLgogICAgICogSW1wbGVtZW50YXRpb25zIGVuc3VyZSB0aGUgY29ycmVjdCBlbmNvZGluZyBhcyBvdXRsaW5lZCBpbiBnZXRQYXRoKCkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcGF0aCBUaGUgcGF0aCB0byB1c2Ugd2l0aCB0aGUgbmV3IGluc3RhbmNlLgogICAgICogQHJldHVybiBzdGF0aWMgQSBuZXcgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHBhdGguCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9yIGludmFsaWQgcGF0aHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUGF0aChzdHJpbmcgJHBhdGgpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBxdWVyeSBzdHJpbmcuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgcXVlcnkgc3RyaW5nLgogICAgICoKICAgICAqIFVzZXJzIGNhbiBwcm92aWRlIGJvdGggZW5jb2RlZCBhbmQgZGVjb2RlZCBxdWVyeSBjaGFyYWN0ZXJzLgogICAgICogSW1wbGVtZW50YXRpb25zIGVuc3VyZSB0aGUgY29ycmVjdCBlbmNvZGluZyBhcyBvdXRsaW5lZCBpbiBnZXRRdWVyeSgpLgogICAgICoKICAgICAqIEFuIGVtcHR5IHF1ZXJ5IHN0cmluZyB2YWx1ZSBpcyBlcXVpdmFsZW50IHRvIHJlbW92aW5nIHRoZSBxdWVyeSBzdHJpbmcuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcXVlcnkgVGhlIHF1ZXJ5IHN0cmluZyB0byB1c2Ugd2l0aCB0aGUgbmV3IGluc3RhbmNlLgogICAgICogQHJldHVybiBzdGF0aWMgQSBuZXcgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHF1ZXJ5IHN0cmluZy4KICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3IgaW52YWxpZCBxdWVyeSBzdHJpbmdzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFF1ZXJ5KHN0cmluZyAkcXVlcnkpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBVUkkgZnJhZ21lbnQuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgVVJJIGZyYWdtZW50LgogICAgICoKICAgICAqIFVzZXJzIGNhbiBwcm92aWRlIGJvdGggZW5jb2RlZCBhbmQgZGVjb2RlZCBmcmFnbWVudCBjaGFyYWN0ZXJzLgogICAgICogSW1wbGVtZW50YXRpb25zIGVuc3VyZSB0aGUgY29ycmVjdCBlbmNvZGluZyBhcyBvdXRsaW5lZCBpbiBnZXRGcmFnbWVudCgpLgogICAgICoKICAgICAqIEFuIGVtcHR5IGZyYWdtZW50IHZhbHVlIGlzIGVxdWl2YWxlbnQgdG8gcmVtb3ZpbmcgdGhlIGZyYWdtZW50LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZyYWdtZW50IFRoZSBmcmFnbWVudCB0byB1c2Ugd2l0aCB0aGUgbmV3IGluc3RhbmNlLgogICAgICogQHJldHVybiBzdGF0aWMgQSBuZXcgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGZyYWdtZW50LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEZyYWdtZW50KHN0cmluZyAkZnJhZ21lbnQpOwoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gYXMgYSBVUkkgcmVmZXJlbmNlLgogICAgICoKICAgICAqIERlcGVuZGluZyBvbiB3aGljaCBjb21wb25lbnRzIG9mIHRoZSBVUkkgYXJlIHByZXNlbnQsIHRoZSByZXN1bHRpbmcKICAgICAqIHN0cmluZyBpcyBlaXRoZXIgYSBmdWxsIFVSSSBvciByZWxhdGl2ZSByZWZlcmVuY2UgYWNjb3JkaW5nIHRvIFJGQyAzOTg2LAogICAgICogU2VjdGlvbiA0LjEuIFRoZSBtZXRob2QgY29uY2F0ZW5hdGVzIHRoZSB2YXJpb3VzIGNvbXBvbmVudHMgb2YgdGhlIFVSSSwKICAgICAqIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBkZWxpbWl0ZXJzOgogICAgICoKICAgICAqIC0gSWYgYSBzY2hlbWUgaXMgcHJlc2VudCwgaXQgTVVTVCBiZSBzdWZmaXhlZCBieSAiOiIuCiAgICAgKiAtIElmIGFuIGF1dGhvcml0eSBpcyBwcmVzZW50LCBpdCBNVVNUIGJlIHByZWZpeGVkIGJ5ICIvLyIuCiAgICAgKiAtIFRoZSBwYXRoIGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aG91dCBkZWxpbWl0ZXJzLiBCdXQgdGhlcmUgYXJlIHR3bwogICAgICogICBjYXNlcyB3aGVyZSB0aGUgcGF0aCBoYXMgdG8gYmUgYWRqdXN0ZWQgdG8gbWFrZSB0aGUgVVJJIHJlZmVyZW5jZQogICAgICogICB2YWxpZCBhcyBQSFAgZG9lcyBub3QgYWxsb3cgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIGluIF9fdG9TdHJpbmcoKToKICAgICAqICAgICAtIElmIHRoZSBwYXRoIGlzIHJvb3RsZXNzIGFuZCBhbiBhdXRob3JpdHkgaXMgcHJlc2VudCwgdGhlIHBhdGggTVVTVAogICAgICogICAgICAgYmUgcHJlZml4ZWQgYnkgIi8iLgogICAgICogICAgIC0gSWYgdGhlIHBhdGggaXMgc3RhcnRpbmcgd2l0aCBtb3JlIHRoYW4gb25lICIvIiBhbmQgbm8gYXV0aG9yaXR5IGlzCiAgICAgKiAgICAgICBwcmVzZW50LCB0aGUgc3RhcnRpbmcgc2xhc2hlcyBNVVNUIGJlIHJlZHVjZWQgdG8gb25lLgogICAgICogLSBJZiBhIHF1ZXJ5IGlzIHByZXNlbnQsIGl0IE1VU1QgYmUgcHJlZml4ZWQgYnkgIj8iLgogICAgICogLSBJZiBhIGZyYWdtZW50IGlzIHByZXNlbnQsIGl0IE1VU1QgYmUgcHJlZml4ZWQgYnkgIiMiLgogICAgICoKICAgICAqIEBzZWUgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTQuMQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/log/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/psr/log/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAicHNyL2xvZyIsCiAgICAiZGVzY3JpcHRpb24iOiAiQ29tbW9uIGludGVyZmFjZSBmb3IgbG9nZ2luZyBsaWJyYXJpZXMiLAogICAgImtleXdvcmRzIjogWyJwc3IiLCAicHNyLTMiLCAibG9nIl0sCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvbG9nIiwKICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAiYXV0aG9ycyI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIlBIUC1GSUciLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly93d3cucGhwLWZpZy5vcmcvIgogICAgICAgIH0KICAgIF0sCiAgICAicmVxdWlyZSI6IHsKICAgICAgICAicGhwIjogIj49NS4zLjAiCiAgICB9LAogICAgImF1dG9sb2FkIjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIlBzclxcTG9nXFwiOiAiUHNyL0xvZy8iCiAgICAgICAgfQogICAgfSwKICAgICJleHRyYSI6IHsKICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjEueC1kZXYiCiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/log/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDEyIFBIUCBGcmFtZXdvcmsgSW50ZXJvcGVyYWJpbGl0eSBHcm91cAoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSAKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyAKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIApmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/log/Psr/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/psr/log/Psr/Log/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/psr/log/Psr/Log/AbstractLogger.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcTG9nOwoKLyoqCiAqIFRoaXMgaXMgYSBzaW1wbGUgTG9nZ2VyIGltcGxlbWVudGF0aW9uIHRoYXQgb3RoZXIgTG9nZ2VycyBjYW4gaW5oZXJpdCBmcm9tLgogKgogKiBJdCBzaW1wbHkgZGVsZWdhdGVzIGFsbCBsb2ctbGV2ZWwtc3BlY2lmaWMgbWV0aG9kcyB0byB0aGUgYGxvZ2AgbWV0aG9kIHRvCiAqIHJlZHVjZSBib2lsZXJwbGF0ZSBjb2RlIHRoYXQgYSBzaW1wbGUgTG9nZ2VyIHRoYXQgZG9lcyB0aGUgc2FtZSB0aGluZyB3aXRoCiAqIG1lc3NhZ2VzIHJlZ2FyZGxlc3Mgb2YgdGhlIGVycm9yIGxldmVsIGhhcyB0byBpbXBsZW1lbnQuCiAqLwphYnN0cmFjdCBjbGFzcyBBYnN0cmFjdExvZ2dlciBpbXBsZW1lbnRzIExvZ2dlckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFN5c3RlbSBpcyB1bnVzYWJsZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAkbWVzc2FnZQogICAgICogQHBhcmFtIG1peGVkW10gJGNvbnRleHQKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVtZXJnZW5jeSgkbWVzc2FnZSwgYXJyYXkgJGNvbnRleHQgPSBhcnJheSgpKQogICAgewogICAgICAgICR0aGlzLT5sb2coTG9nTGV2ZWw6OkVNRVJHRU5DWSwgJG1lc3NhZ2UsICRjb250ZXh0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEFjdGlvbiBtdXN0IGJlIHRha2VuIGltbWVkaWF0ZWx5LgogICAgICoKICAgICAqIEV4YW1wbGU6IEVudGlyZSB3ZWJzaXRlIGRvd24sIGRhdGFiYXNlIHVuYXZhaWxhYmxlLCBldGMuIFRoaXMgc2hvdWxkCiAgICAgKiB0cmlnZ2VyIHRoZSBTTVMgYWxlcnRzIGFuZCB3YWtlIHlvdSB1cC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAkbWVzc2FnZQogICAgICogQHBhcmFtIG1peGVkW10gJGNvbnRleHQKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFsZXJ0KCRtZXNzYWdlLCBhcnJheSAkY29udGV4dCA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgJHRoaXMtPmxvZyhMb2dMZXZlbDo6QUxFUlQsICRtZXNzYWdlLCAkY29udGV4dCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcml0aWNhbCBjb25kaXRpb25zLgogICAgICoKICAgICAqIEV4YW1wbGU6IEFwcGxpY2F0aW9uIGNvbXBvbmVudCB1bmF2YWlsYWJsZSwgdW5leHBlY3RlZCBleGNlcHRpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBtaXhlZFtdICRjb250ZXh0CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcml0aWNhbCgkbWVzc2FnZSwgYXJyYXkgJGNvbnRleHQgPSBhcnJheSgpKQogICAgewogICAgICAgICR0aGlzLT5sb2coTG9nTGV2ZWw6OkNSSVRJQ0FMLCAkbWVzc2FnZSwgJGNvbnRleHQpOwogICAgfQoKICAgIC8qKgogICAgICogUnVudGltZSBlcnJvcnMgdGhhdCBkbyBub3QgcmVxdWlyZSBpbW1lZGlhdGUgYWN0aW9uIGJ1dCBzaG91bGQgdHlwaWNhbGx5CiAgICAgKiBiZSBsb2dnZWQgYW5kIG1vbml0b3JlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAkbWVzc2FnZQogICAgICogQHBhcmFtIG1peGVkW10gJGNvbnRleHQKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVycm9yKCRtZXNzYWdlLCBhcnJheSAkY29udGV4dCA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgJHRoaXMtPmxvZyhMb2dMZXZlbDo6RVJST1IsICRtZXNzYWdlLCAkY29udGV4dCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBFeGNlcHRpb25hbCBvY2N1cnJlbmNlcyB0aGF0IGFyZSBub3QgZXJyb3JzLgogICAgICoKICAgICAqIEV4YW1wbGU6IFVzZSBvZiBkZXByZWNhdGVkIEFQSXMsIHBvb3IgdXNlIG9mIGFuIEFQSSwgdW5kZXNpcmFibGUgdGhpbmdzCiAgICAgKiB0aGF0IGFyZSBub3QgbmVjZXNzYXJpbHkgd3JvbmcuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBtaXhlZFtdICRjb250ZXh0CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3YXJuaW5nKCRtZXNzYWdlLCBhcnJheSAkY29udGV4dCA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgJHRoaXMtPmxvZyhMb2dMZXZlbDo6V0FSTklORywgJG1lc3NhZ2UsICRjb250ZXh0KTsKICAgIH0KCiAgICAvKioKICAgICAqIE5vcm1hbCBidXQgc2lnbmlmaWNhbnQgZXZlbnRzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkY29udGV4dAogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbm90aWNlKCRtZXNzYWdlLCBhcnJheSAkY29udGV4dCA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgJHRoaXMtPmxvZyhMb2dMZXZlbDo6Tk9USUNFLCAkbWVzc2FnZSwgJGNvbnRleHQpOwogICAgfQoKICAgIC8qKgogICAgICogSW50ZXJlc3RpbmcgZXZlbnRzLgogICAgICoKICAgICAqIEV4YW1wbGU6IFVzZXIgbG9ncyBpbiwgU1FMIGxvZ3MuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBtaXhlZFtdICRjb250ZXh0CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbmZvKCRtZXNzYWdlLCBhcnJheSAkY29udGV4dCA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgJHRoaXMtPmxvZyhMb2dMZXZlbDo6SU5GTywgJG1lc3NhZ2UsICRjb250ZXh0KTsKICAgIH0KCiAgICAvKioKICAgICAqIERldGFpbGVkIGRlYnVnIGluZm9ybWF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkY29udGV4dAogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVidWcoJG1lc3NhZ2UsIGFycmF5ICRjb250ZXh0ID0gYXJyYXkoKSkKICAgIHsKICAgICAgICAkdGhpcy0+bG9nKExvZ0xldmVsOjpERUJVRywgJG1lc3NhZ2UsICRjb250ZXh0KTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/log/Psr/Log/InvalidArgumentException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcTG9nOwoKY2xhc3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGV4dGVuZHMgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/log/Psr/Log/LoggerAwareInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcTG9nOwoKLyoqCiAqIERlc2NyaWJlcyBhIGxvZ2dlci1hd2FyZSBpbnN0YW5jZS4KICovCmludGVyZmFjZSBMb2dnZXJBd2FyZUludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFNldHMgYSBsb2dnZXIgaW5zdGFuY2Ugb24gdGhlIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gTG9nZ2VySW50ZXJmYWNlICRsb2dnZXIKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldExvZ2dlcihMb2dnZXJJbnRlcmZhY2UgJGxvZ2dlcik7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/log/Psr/Log/LoggerAwareTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcTG9nOwoKLyoqCiAqIEJhc2ljIEltcGxlbWVudGF0aW9uIG9mIExvZ2dlckF3YXJlSW50ZXJmYWNlLgogKi8KdHJhaXQgTG9nZ2VyQXdhcmVUcmFpdAp7CiAgICAvKioKICAgICAqIFRoZSBsb2dnZXIgaW5zdGFuY2UuCiAgICAgKgogICAgICogQHZhciBMb2dnZXJJbnRlcmZhY2V8bnVsbAogICAgICovCiAgICBwcm90ZWN0ZWQgJGxvZ2dlcjsKCiAgICAvKioKICAgICAqIFNldHMgYSBsb2dnZXIuCiAgICAgKgogICAgICogQHBhcmFtIExvZ2dlckludGVyZmFjZSAkbG9nZ2VyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRMb2dnZXIoTG9nZ2VySW50ZXJmYWNlICRsb2dnZXIpCiAgICB7CiAgICAgICAgJHRoaXMtPmxvZ2dlciA9ICRsb2dnZXI7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/log/Psr/Log/LoggerInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcTG9nOwoKLyoqCiAqIERlc2NyaWJlcyBhIGxvZ2dlciBpbnN0YW5jZS4KICoKICogVGhlIG1lc3NhZ2UgTVVTVCBiZSBhIHN0cmluZyBvciBvYmplY3QgaW1wbGVtZW50aW5nIF9fdG9TdHJpbmcoKS4KICoKICogVGhlIG1lc3NhZ2UgTUFZIGNvbnRhaW4gcGxhY2Vob2xkZXJzIGluIHRoZSBmb3JtOiB7Zm9vfSB3aGVyZSBmb28KICogd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgY29udGV4dCBkYXRhIGluIGtleSAiZm9vIi4KICoKICogVGhlIGNvbnRleHQgYXJyYXkgY2FuIGNvbnRhaW4gYXJiaXRyYXJ5IGRhdGEuIFRoZSBvbmx5IGFzc3VtcHRpb24gdGhhdAogKiBjYW4gYmUgbWFkZSBieSBpbXBsZW1lbnRvcnMgaXMgdGhhdCBpZiBhbiBFeGNlcHRpb24gaW5zdGFuY2UgaXMgZ2l2ZW4KICogdG8gcHJvZHVjZSBhIHN0YWNrIHRyYWNlLCBpdCBNVVNUIGJlIGluIGEga2V5IG5hbWVkICJleGNlcHRpb24iLgogKgogKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvZmlnLXN0YW5kYXJkcy9ibG9iL21hc3Rlci9hY2NlcHRlZC9QU1ItMy1sb2dnZXItaW50ZXJmYWNlLm1kCiAqIGZvciB0aGUgZnVsbCBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbi4KICovCmludGVyZmFjZSBMb2dnZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBTeXN0ZW0gaXMgdW51c2FibGUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBtaXhlZFtdICRjb250ZXh0CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlbWVyZ2VuY3koJG1lc3NhZ2UsIGFycmF5ICRjb250ZXh0ID0gYXJyYXkoKSk7CgogICAgLyoqCiAgICAgKiBBY3Rpb24gbXVzdCBiZSB0YWtlbiBpbW1lZGlhdGVseS4KICAgICAqCiAgICAgKiBFeGFtcGxlOiBFbnRpcmUgd2Vic2l0ZSBkb3duLCBkYXRhYmFzZSB1bmF2YWlsYWJsZSwgZXRjLiBUaGlzIHNob3VsZAogICAgICogdHJpZ2dlciB0aGUgU01TIGFsZXJ0cyBhbmQgd2FrZSB5b3UgdXAuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBtaXhlZFtdICRjb250ZXh0CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhbGVydCgkbWVzc2FnZSwgYXJyYXkgJGNvbnRleHQgPSBhcnJheSgpKTsKCiAgICAvKioKICAgICAqIENyaXRpY2FsIGNvbmRpdGlvbnMuCiAgICAgKgogICAgICogRXhhbXBsZTogQXBwbGljYXRpb24gY29tcG9uZW50IHVuYXZhaWxhYmxlLCB1bmV4cGVjdGVkIGV4Y2VwdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAkbWVzc2FnZQogICAgICogQHBhcmFtIG1peGVkW10gJGNvbnRleHQKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyaXRpY2FsKCRtZXNzYWdlLCBhcnJheSAkY29udGV4dCA9IGFycmF5KCkpOwoKICAgIC8qKgogICAgICogUnVudGltZSBlcnJvcnMgdGhhdCBkbyBub3QgcmVxdWlyZSBpbW1lZGlhdGUgYWN0aW9uIGJ1dCBzaG91bGQgdHlwaWNhbGx5CiAgICAgKiBiZSBsb2dnZWQgYW5kIG1vbml0b3JlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAkbWVzc2FnZQogICAgICogQHBhcmFtIG1peGVkW10gJGNvbnRleHQKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVycm9yKCRtZXNzYWdlLCBhcnJheSAkY29udGV4dCA9IGFycmF5KCkpOwoKICAgIC8qKgogICAgICogRXhjZXB0aW9uYWwgb2NjdXJyZW5jZXMgdGhhdCBhcmUgbm90IGVycm9ycy4KICAgICAqCiAgICAgKiBFeGFtcGxlOiBVc2Ugb2YgZGVwcmVjYXRlZCBBUElzLCBwb29yIHVzZSBvZiBhbiBBUEksIHVuZGVzaXJhYmxlIHRoaW5ncwogICAgICogdGhhdCBhcmUgbm90IG5lY2Vzc2FyaWx5IHdyb25nLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkY29udGV4dAogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2FybmluZygkbWVzc2FnZSwgYXJyYXkgJGNvbnRleHQgPSBhcnJheSgpKTsKCiAgICAvKioKICAgICAqIE5vcm1hbCBidXQgc2lnbmlmaWNhbnQgZXZlbnRzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkY29udGV4dAogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbm90aWNlKCRtZXNzYWdlLCBhcnJheSAkY29udGV4dCA9IGFycmF5KCkpOwoKICAgIC8qKgogICAgICogSW50ZXJlc3RpbmcgZXZlbnRzLgogICAgICoKICAgICAqIEV4YW1wbGU6IFVzZXIgbG9ncyBpbiwgU1FMIGxvZ3MuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBtaXhlZFtdICRjb250ZXh0CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbmZvKCRtZXNzYWdlLCBhcnJheSAkY29udGV4dCA9IGFycmF5KCkpOwoKICAgIC8qKgogICAgICogRGV0YWlsZWQgZGVidWcgaW5mb3JtYXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBtaXhlZFtdICRjb250ZXh0CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWJ1ZygkbWVzc2FnZSwgYXJyYXkgJGNvbnRleHQgPSBhcnJheSgpKTsKCiAgICAvKioKICAgICAqIExvZ3Mgd2l0aCBhbiBhcmJpdHJhcnkgbGV2ZWwuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICAgJGxldmVsCiAgICAgKiBAcGFyYW0gc3RyaW5nICAkbWVzc2FnZQogICAgICogQHBhcmFtIG1peGVkW10gJGNvbnRleHQKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqCiAgICAgKiBAdGhyb3dzIFxQc3JcTG9nXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9nKCRsZXZlbCwgJG1lc3NhZ2UsIGFycmF5ICRjb250ZXh0ID0gYXJyYXkoKSk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/log/Psr/Log/LoggerTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcTG9nOwoKLyoqCiAqIFRoaXMgaXMgYSBzaW1wbGUgTG9nZ2VyIHRyYWl0IHRoYXQgY2xhc3NlcyB1bmFibGUgdG8gZXh0ZW5kIEFic3RyYWN0TG9nZ2VyCiAqIChiZWNhdXNlIHRoZXkgZXh0ZW5kIGFub3RoZXIgY2xhc3MsIGV0YykgY2FuIGluY2x1ZGUuCiAqCiAqIEl0IHNpbXBseSBkZWxlZ2F0ZXMgYWxsIGxvZy1sZXZlbC1zcGVjaWZpYyBtZXRob2RzIHRvIHRoZSBgbG9nYCBtZXRob2QgdG8KICogcmVkdWNlIGJvaWxlcnBsYXRlIGNvZGUgdGhhdCBhIHNpbXBsZSBMb2dnZXIgdGhhdCBkb2VzIHRoZSBzYW1lIHRoaW5nIHdpdGgKICogbWVzc2FnZXMgcmVnYXJkbGVzcyBvZiB0aGUgZXJyb3IgbGV2ZWwgaGFzIHRvIGltcGxlbWVudC4KICovCnRyYWl0IExvZ2dlclRyYWl0CnsKICAgIC8qKgogICAgICogU3lzdGVtIGlzIHVudXNhYmxlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBhcnJheSAgJGNvbnRleHQKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVtZXJnZW5jeSgkbWVzc2FnZSwgYXJyYXkgJGNvbnRleHQgPSBhcnJheSgpKQogICAgewogICAgICAgICR0aGlzLT5sb2coTG9nTGV2ZWw6OkVNRVJHRU5DWSwgJG1lc3NhZ2UsICRjb250ZXh0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEFjdGlvbiBtdXN0IGJlIHRha2VuIGltbWVkaWF0ZWx5LgogICAgICoKICAgICAqIEV4YW1wbGU6IEVudGlyZSB3ZWJzaXRlIGRvd24sIGRhdGFiYXNlIHVuYXZhaWxhYmxlLCBldGMuIFRoaXMgc2hvdWxkCiAgICAgKiB0cmlnZ2VyIHRoZSBTTVMgYWxlcnRzIGFuZCB3YWtlIHlvdSB1cC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gYXJyYXkgICRjb250ZXh0CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhbGVydCgkbWVzc2FnZSwgYXJyYXkgJGNvbnRleHQgPSBhcnJheSgpKQogICAgewogICAgICAgICR0aGlzLT5sb2coTG9nTGV2ZWw6OkFMRVJULCAkbWVzc2FnZSwgJGNvbnRleHQpOwogICAgfQoKICAgIC8qKgogICAgICogQ3JpdGljYWwgY29uZGl0aW9ucy4KICAgICAqCiAgICAgKiBFeGFtcGxlOiBBcHBsaWNhdGlvbiBjb21wb25lbnQgdW5hdmFpbGFibGUsIHVuZXhwZWN0ZWQgZXhjZXB0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBhcnJheSAgJGNvbnRleHQKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyaXRpY2FsKCRtZXNzYWdlLCBhcnJheSAkY29udGV4dCA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgJHRoaXMtPmxvZyhMb2dMZXZlbDo6Q1JJVElDQUwsICRtZXNzYWdlLCAkY29udGV4dCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSdW50aW1lIGVycm9ycyB0aGF0IGRvIG5vdCByZXF1aXJlIGltbWVkaWF0ZSBhY3Rpb24gYnV0IHNob3VsZCB0eXBpY2FsbHkKICAgICAqIGJlIGxvZ2dlZCBhbmQgbW9uaXRvcmVkLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBhcnJheSAgJGNvbnRleHQKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVycm9yKCRtZXNzYWdlLCBhcnJheSAkY29udGV4dCA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgJHRoaXMtPmxvZyhMb2dMZXZlbDo6RVJST1IsICRtZXNzYWdlLCAkY29udGV4dCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBFeGNlcHRpb25hbCBvY2N1cnJlbmNlcyB0aGF0IGFyZSBub3QgZXJyb3JzLgogICAgICoKICAgICAqIEV4YW1wbGU6IFVzZSBvZiBkZXByZWNhdGVkIEFQSXMsIHBvb3IgdXNlIG9mIGFuIEFQSSwgdW5kZXNpcmFibGUgdGhpbmdzCiAgICAgKiB0aGF0IGFyZSBub3QgbmVjZXNzYXJpbHkgd3JvbmcuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIGFycmF5ICAkY29udGV4dAogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2FybmluZygkbWVzc2FnZSwgYXJyYXkgJGNvbnRleHQgPSBhcnJheSgpKQogICAgewogICAgICAgICR0aGlzLT5sb2coTG9nTGV2ZWw6OldBUk5JTkcsICRtZXNzYWdlLCAkY29udGV4dCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBOb3JtYWwgYnV0IHNpZ25pZmljYW50IGV2ZW50cy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gYXJyYXkgICRjb250ZXh0CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBub3RpY2UoJG1lc3NhZ2UsIGFycmF5ICRjb250ZXh0ID0gYXJyYXkoKSkKICAgIHsKICAgICAgICAkdGhpcy0+bG9nKExvZ0xldmVsOjpOT1RJQ0UsICRtZXNzYWdlLCAkY29udGV4dCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBJbnRlcmVzdGluZyBldmVudHMuCiAgICAgKgogICAgICogRXhhbXBsZTogVXNlciBsb2dzIGluLCBTUUwgbG9ncy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gYXJyYXkgICRjb250ZXh0CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbmZvKCRtZXNzYWdlLCBhcnJheSAkY29udGV4dCA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgJHRoaXMtPmxvZyhMb2dMZXZlbDo6SU5GTywgJG1lc3NhZ2UsICRjb250ZXh0KTsKICAgIH0KCiAgICAvKioKICAgICAqIERldGFpbGVkIGRlYnVnIGluZm9ybWF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBhcnJheSAgJGNvbnRleHQKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlYnVnKCRtZXNzYWdlLCBhcnJheSAkY29udGV4dCA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgJHRoaXMtPmxvZyhMb2dMZXZlbDo6REVCVUcsICRtZXNzYWdlLCAkY29udGV4dCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBMb2dzIHdpdGggYW4gYXJiaXRyYXJ5IGxldmVsLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAgJGxldmVsCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gYXJyYXkgICRjb250ZXh0CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKgogICAgICogQHRocm93cyBcUHNyXExvZ1xJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGxvZygkbGV2ZWwsICRtZXNzYWdlLCBhcnJheSAkY29udGV4dCA9IGFycmF5KCkpOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/log/Psr/Log/LogLevel.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcTG9nOwoKLyoqCiAqIERlc2NyaWJlcyBsb2cgbGV2ZWxzLgogKi8KY2xhc3MgTG9nTGV2ZWwKewogICAgY29uc3QgRU1FUkdFTkNZID0gJ2VtZXJnZW5jeSc7CiAgICBjb25zdCBBTEVSVCAgICAgPSAnYWxlcnQnOwogICAgY29uc3QgQ1JJVElDQUwgID0gJ2NyaXRpY2FsJzsKICAgIGNvbnN0IEVSUk9SICAgICA9ICdlcnJvcic7CiAgICBjb25zdCBXQVJOSU5HICAgPSAnd2FybmluZyc7CiAgICBjb25zdCBOT1RJQ0UgICAgPSAnbm90aWNlJzsKICAgIGNvbnN0IElORk8gICAgICA9ICdpbmZvJzsKICAgIGNvbnN0IERFQlVHICAgICA9ICdkZWJ1Zyc7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/log/Psr/Log/NullLogger.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcTG9nOwoKLyoqCiAqIFRoaXMgTG9nZ2VyIGNhbiBiZSB1c2VkIHRvIGF2b2lkIGNvbmRpdGlvbmFsIGxvZyBjYWxscy4KICoKICogTG9nZ2luZyBzaG91bGQgYWx3YXlzIGJlIG9wdGlvbmFsLCBhbmQgaWYgbm8gbG9nZ2VyIGlzIHByb3ZpZGVkIHRvIHlvdXIKICogbGlicmFyeSBjcmVhdGluZyBhIE51bGxMb2dnZXIgaW5zdGFuY2UgdG8gaGF2ZSBzb21ldGhpbmcgdG8gdGhyb3cgbG9ncyBhdAogKiBpcyBhIGdvb2Qgd2F5IHRvIGF2b2lkIGxpdHRlcmluZyB5b3VyIGNvZGUgd2l0aCBgaWYgKCR0aGlzLT5sb2dnZXIpIHsgfWAKICogYmxvY2tzLgogKi8KY2xhc3MgTnVsbExvZ2dlciBleHRlbmRzIEFic3RyYWN0TG9nZ2VyCnsKICAgIC8qKgogICAgICogTG9ncyB3aXRoIGFuIGFyYml0cmFyeSBsZXZlbC4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgICRsZXZlbAogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIGFycmF5ICAkY29udGV4dAogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICoKICAgICAqIEB0aHJvd3MgXFBzclxMb2dcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2coJGxldmVsLCAkbWVzc2FnZSwgYXJyYXkgJGNvbnRleHQgPSBhcnJheSgpKQogICAgewogICAgICAgIC8vIG5vb3AKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/log/Psr/Log/Test/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/psr/log/Psr/Log/Test/DummyTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcTG9nXFRlc3Q7CgovKioKICogVGhpcyBjbGFzcyBpcyBpbnRlcm5hbCBhbmQgZG9lcyBub3QgZm9sbG93IHRoZSBCQyBwcm9taXNlLgogKgogKiBEbyBOT1QgdXNlIHRoaXMgY2xhc3MgaW4gYW55IHdheS4KICoKICogQGludGVybmFsCiAqLwpjbGFzcyBEdW1teVRlc3QKewogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiAnRHVtbXlUZXN0JzsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcTG9nXFRlc3Q7Cgp1c2UgUHNyXExvZ1xMb2dnZXJJbnRlcmZhY2U7CnVzZSBQc3JcTG9nXExvZ0xldmVsOwp1c2UgUEhQVW5pdFxGcmFtZXdvcmtcVGVzdENhc2U7CgovKioKICogUHJvdmlkZXMgYSBiYXNlIHRlc3QgY2xhc3MgZm9yIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTG9nZ2VySW50ZXJmYWNlLgogKgogKiBJbXBsZW1lbnRvcnMgY2FuIGV4dGVuZCB0aGUgY2xhc3MgYW5kIGltcGxlbWVudCBhYnN0cmFjdCBtZXRob2RzIHRvIHJ1biB0aGlzCiAqIGFzIHBhcnQgb2YgdGhlaXIgdGVzdCBzdWl0ZS4KICovCmFic3RyYWN0IGNsYXNzIExvZ2dlckludGVyZmFjZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQp7CiAgICAvKioKICAgICAqIEByZXR1cm4gTG9nZ2VySW50ZXJmYWNlCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBnZXRMb2dnZXIoKTsKCiAgICAvKioKICAgICAqIFRoaXMgbXVzdCByZXR1cm4gdGhlIGxvZyBtZXNzYWdlcyBpbiBvcmRlci4KICAgICAqCiAgICAgKiBUaGUgc2ltcGxlIGZvcm1hdHRpbmcgb2YgdGhlIG1lc3NhZ2VzIGlzOiAiPExPRyBMRVZFTD4gPE1FU1NBR0U+Ii4KICAgICAqCiAgICAgKiBFeGFtcGxlIC0+ZXJyb3IoJ0ZvbycpIHdvdWxkIHlpZWxkICJlcnJvciBGb28iLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nW10KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGdldExvZ3MoKTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEltcGxlbWVudHMoKQogICAgewogICAgICAgICR0aGlzLT5hc3NlcnRJbnN0YW5jZU9mKCdQc3JcTG9nXExvZ2dlckludGVyZmFjZScsICR0aGlzLT5nZXRMb2dnZXIoKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGF0YVByb3ZpZGVyIHByb3ZpZGVMZXZlbHNBbmRNZXNzYWdlcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdExvZ3NBdEFsbExldmVscygkbGV2ZWwsICRtZXNzYWdlKQogICAgewogICAgICAgICRsb2dnZXIgPSAkdGhpcy0+Z2V0TG9nZ2VyKCk7CiAgICAgICAgJGxvZ2dlci0+eyRsZXZlbH0oJG1lc3NhZ2UsIGFycmF5KCd1c2VyJyA9PiAnQm9iJykpOwogICAgICAgICRsb2dnZXItPmxvZygkbGV2ZWwsICRtZXNzYWdlLCBhcnJheSgndXNlcicgPT4gJ0JvYicpKTsKCiAgICAgICAgJGV4cGVjdGVkID0gYXJyYXkoCiAgICAgICAgICAgICRsZXZlbC4nIG1lc3NhZ2Ugb2YgbGV2ZWwgJy4kbGV2ZWwuJyB3aXRoIGNvbnRleHQ6IEJvYicsCiAgICAgICAgICAgICRsZXZlbC4nIG1lc3NhZ2Ugb2YgbGV2ZWwgJy4kbGV2ZWwuJyB3aXRoIGNvbnRleHQ6IEJvYicsCiAgICAgICAgKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKCRleHBlY3RlZCwgJHRoaXMtPmdldExvZ3MoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHByb3ZpZGVMZXZlbHNBbmRNZXNzYWdlcygpCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5KAogICAgICAgICAgICBMb2dMZXZlbDo6RU1FUkdFTkNZID0+IGFycmF5KExvZ0xldmVsOjpFTUVSR0VOQ1ksICdtZXNzYWdlIG9mIGxldmVsIGVtZXJnZW5jeSB3aXRoIGNvbnRleHQ6IHt1c2VyfScpLAogICAgICAgICAgICBMb2dMZXZlbDo6QUxFUlQgPT4gYXJyYXkoTG9nTGV2ZWw6OkFMRVJULCAnbWVzc2FnZSBvZiBsZXZlbCBhbGVydCB3aXRoIGNvbnRleHQ6IHt1c2VyfScpLAogICAgICAgICAgICBMb2dMZXZlbDo6Q1JJVElDQUwgPT4gYXJyYXkoTG9nTGV2ZWw6OkNSSVRJQ0FMLCAnbWVzc2FnZSBvZiBsZXZlbCBjcml0aWNhbCB3aXRoIGNvbnRleHQ6IHt1c2VyfScpLAogICAgICAgICAgICBMb2dMZXZlbDo6RVJST1IgPT4gYXJyYXkoTG9nTGV2ZWw6OkVSUk9SLCAnbWVzc2FnZSBvZiBsZXZlbCBlcnJvciB3aXRoIGNvbnRleHQ6IHt1c2VyfScpLAogICAgICAgICAgICBMb2dMZXZlbDo6V0FSTklORyA9PiBhcnJheShMb2dMZXZlbDo6V0FSTklORywgJ21lc3NhZ2Ugb2YgbGV2ZWwgd2FybmluZyB3aXRoIGNvbnRleHQ6IHt1c2VyfScpLAogICAgICAgICAgICBMb2dMZXZlbDo6Tk9USUNFID0+IGFycmF5KExvZ0xldmVsOjpOT1RJQ0UsICdtZXNzYWdlIG9mIGxldmVsIG5vdGljZSB3aXRoIGNvbnRleHQ6IHt1c2VyfScpLAogICAgICAgICAgICBMb2dMZXZlbDo6SU5GTyA9PiBhcnJheShMb2dMZXZlbDo6SU5GTywgJ21lc3NhZ2Ugb2YgbGV2ZWwgaW5mbyB3aXRoIGNvbnRleHQ6IHt1c2VyfScpLAogICAgICAgICAgICBMb2dMZXZlbDo6REVCVUcgPT4gYXJyYXkoTG9nTGV2ZWw6OkRFQlVHLCAnbWVzc2FnZSBvZiBsZXZlbCBkZWJ1ZyB3aXRoIGNvbnRleHQ6IHt1c2VyfScpLAogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb24gXFBzclxMb2dcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0VGhyb3dzT25JbnZhbGlkTGV2ZWwoKQogICAgewogICAgICAgICRsb2dnZXIgPSAkdGhpcy0+Z2V0TG9nZ2VyKCk7CiAgICAgICAgJGxvZ2dlci0+bG9nKCdpbnZhbGlkIGxldmVsJywgJ0ZvbycpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q29udGV4dFJlcGxhY2VtZW50KCkKICAgIHsKICAgICAgICAkbG9nZ2VyID0gJHRoaXMtPmdldExvZ2dlcigpOwogICAgICAgICRsb2dnZXItPmluZm8oJ3tNZXNzYWdlIHtub3RoaW5nfSB7dXNlcn0ge2Zvby5iYXJ9IGF9JywgYXJyYXkoJ3VzZXInID0+ICdCb2InLCAnZm9vLmJhcicgPT4gJ0JhcicpKTsKCiAgICAgICAgJGV4cGVjdGVkID0gYXJyYXkoJ2luZm8ge01lc3NhZ2Uge25vdGhpbmd9IEJvYiBCYXIgYX0nKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKCRleHBlY3RlZCwgJHRoaXMtPmdldExvZ3MoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RPYmplY3RDYXN0VG9TdHJpbmcoKQogICAgewogICAgICAgIGlmIChtZXRob2RfZXhpc3RzKCR0aGlzLCAnY3JlYXRlUGFydGlhbE1vY2snKSkgewogICAgICAgICAgICAkZHVtbXkgPSAkdGhpcy0+Y3JlYXRlUGFydGlhbE1vY2soJ1BzclxMb2dcVGVzdFxEdW1teVRlc3QnLCBhcnJheSgnX190b1N0cmluZycpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkZHVtbXkgPSAkdGhpcy0+Z2V0TW9jaygnUHNyXExvZ1xUZXN0XER1bW15VGVzdCcsIGFycmF5KCdfX3RvU3RyaW5nJykpOwogICAgICAgIH0KICAgICAgICAkZHVtbXktPmV4cGVjdHMoJHRoaXMtPm9uY2UoKSkKICAgICAgICAgICAgLT5tZXRob2QoJ19fdG9TdHJpbmcnKQogICAgICAgICAgICAtPndpbGwoJHRoaXMtPnJldHVyblZhbHVlKCdEVU1NWScpKTsKCiAgICAgICAgJHRoaXMtPmdldExvZ2dlcigpLT53YXJuaW5nKCRkdW1teSk7CgogICAgICAgICRleHBlY3RlZCA9IGFycmF5KCd3YXJuaW5nIERVTU1ZJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygkZXhwZWN0ZWQsICR0aGlzLT5nZXRMb2dzKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q29udGV4dENhbkNvbnRhaW5Bbnl0aGluZygpCiAgICB7CiAgICAgICAgJGNsb3NlZCA9IGZvcGVuKCdwaHA6Ly9tZW1vcnknLCAncicpOwogICAgICAgIGZjbG9zZSgkY2xvc2VkKTsKCiAgICAgICAgJGNvbnRleHQgPSBhcnJheSgKICAgICAgICAgICAgJ2Jvb2wnID0+IHRydWUsCiAgICAgICAgICAgICdudWxsJyA9PiBudWxsLAogICAgICAgICAgICAnc3RyaW5nJyA9PiAnRm9vJywKICAgICAgICAgICAgJ2ludCcgPT4gMCwKICAgICAgICAgICAgJ2Zsb2F0JyA9PiAwLjUsCiAgICAgICAgICAgICduZXN0ZWQnID0+IGFycmF5KCd3aXRoIG9iamVjdCcgPT4gbmV3IER1bW15VGVzdCksCiAgICAgICAgICAgICdvYmplY3QnID0+IG5ldyBcRGF0ZVRpbWUsCiAgICAgICAgICAgICdyZXNvdXJjZScgPT4gZm9wZW4oJ3BocDovL21lbW9yeScsICdyJyksCiAgICAgICAgICAgICdjbG9zZWQnID0+ICRjbG9zZWQsCiAgICAgICAgKTsKCiAgICAgICAgJHRoaXMtPmdldExvZ2dlcigpLT53YXJuaW5nKCdDcmF6eSBjb250ZXh0IGRhdGEnLCAkY29udGV4dCk7CgogICAgICAgICRleHBlY3RlZCA9IGFycmF5KCd3YXJuaW5nIENyYXp5IGNvbnRleHQgZGF0YScpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoJGV4cGVjdGVkLCAkdGhpcy0+Z2V0TG9ncygpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdENvbnRleHRFeGNlcHRpb25LZXlDYW5CZUV4Y2VwdGlvbk9yT3RoZXJWYWx1ZXMoKQogICAgewogICAgICAgICRsb2dnZXIgPSAkdGhpcy0+Z2V0TG9nZ2VyKCk7CiAgICAgICAgJGxvZ2dlci0+d2FybmluZygnUmFuZG9tIG1lc3NhZ2UnLCBhcnJheSgnZXhjZXB0aW9uJyA9PiAnb29wcycpKTsKICAgICAgICAkbG9nZ2VyLT5jcml0aWNhbCgnVW5jYXVnaHQgRXhjZXB0aW9uIScsIGFycmF5KCdleGNlcHRpb24nID0+IG5ldyBcTG9naWNFeGNlcHRpb24oJ0ZhaWwnKSkpOwoKICAgICAgICAkZXhwZWN0ZWQgPSBhcnJheSgKICAgICAgICAgICAgJ3dhcm5pbmcgUmFuZG9tIG1lc3NhZ2UnLAogICAgICAgICAgICAnY3JpdGljYWwgVW5jYXVnaHQgRXhjZXB0aW9uIScKICAgICAgICApOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoJGV4cGVjdGVkLCAkdGhpcy0+Z2V0TG9ncygpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/log/Psr/Log/Test/TestLogger.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcTG9nXFRlc3Q7Cgp1c2UgUHNyXExvZ1xBYnN0cmFjdExvZ2dlcjsKCi8qKgogKiBVc2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgogKgogKiBJdCByZWNvcmRzIGFsbCByZWNvcmRzIGFuZCBnaXZlcyB5b3UgYWNjZXNzIHRvIHRoZW0gZm9yIHZlcmlmaWNhdGlvbi4KICoKICogQG1ldGhvZCBib29sIGhhc0VtZXJnZW5jeSgkcmVjb3JkKQogKiBAbWV0aG9kIGJvb2wgaGFzQWxlcnQoJHJlY29yZCkKICogQG1ldGhvZCBib29sIGhhc0NyaXRpY2FsKCRyZWNvcmQpCiAqIEBtZXRob2QgYm9vbCBoYXNFcnJvcigkcmVjb3JkKQogKiBAbWV0aG9kIGJvb2wgaGFzV2FybmluZygkcmVjb3JkKQogKiBAbWV0aG9kIGJvb2wgaGFzTm90aWNlKCRyZWNvcmQpCiAqIEBtZXRob2QgYm9vbCBoYXNJbmZvKCRyZWNvcmQpCiAqIEBtZXRob2QgYm9vbCBoYXNEZWJ1ZygkcmVjb3JkKQogKgogKiBAbWV0aG9kIGJvb2wgaGFzRW1lcmdlbmN5UmVjb3JkcygpCiAqIEBtZXRob2QgYm9vbCBoYXNBbGVydFJlY29yZHMoKQogKiBAbWV0aG9kIGJvb2wgaGFzQ3JpdGljYWxSZWNvcmRzKCkKICogQG1ldGhvZCBib29sIGhhc0Vycm9yUmVjb3JkcygpCiAqIEBtZXRob2QgYm9vbCBoYXNXYXJuaW5nUmVjb3JkcygpCiAqIEBtZXRob2QgYm9vbCBoYXNOb3RpY2VSZWNvcmRzKCkKICogQG1ldGhvZCBib29sIGhhc0luZm9SZWNvcmRzKCkKICogQG1ldGhvZCBib29sIGhhc0RlYnVnUmVjb3JkcygpCiAqCiAqIEBtZXRob2QgYm9vbCBoYXNFbWVyZ2VuY3lUaGF0Q29udGFpbnMoJG1lc3NhZ2UpCiAqIEBtZXRob2QgYm9vbCBoYXNBbGVydFRoYXRDb250YWlucygkbWVzc2FnZSkKICogQG1ldGhvZCBib29sIGhhc0NyaXRpY2FsVGhhdENvbnRhaW5zKCRtZXNzYWdlKQogKiBAbWV0aG9kIGJvb2wgaGFzRXJyb3JUaGF0Q29udGFpbnMoJG1lc3NhZ2UpCiAqIEBtZXRob2QgYm9vbCBoYXNXYXJuaW5nVGhhdENvbnRhaW5zKCRtZXNzYWdlKQogKiBAbWV0aG9kIGJvb2wgaGFzTm90aWNlVGhhdENvbnRhaW5zKCRtZXNzYWdlKQogKiBAbWV0aG9kIGJvb2wgaGFzSW5mb1RoYXRDb250YWlucygkbWVzc2FnZSkKICogQG1ldGhvZCBib29sIGhhc0RlYnVnVGhhdENvbnRhaW5zKCRtZXNzYWdlKQogKgogKiBAbWV0aG9kIGJvb2wgaGFzRW1lcmdlbmN5VGhhdE1hdGNoZXMoJG1lc3NhZ2UpCiAqIEBtZXRob2QgYm9vbCBoYXNBbGVydFRoYXRNYXRjaGVzKCRtZXNzYWdlKQogKiBAbWV0aG9kIGJvb2wgaGFzQ3JpdGljYWxUaGF0TWF0Y2hlcygkbWVzc2FnZSkKICogQG1ldGhvZCBib29sIGhhc0Vycm9yVGhhdE1hdGNoZXMoJG1lc3NhZ2UpCiAqIEBtZXRob2QgYm9vbCBoYXNXYXJuaW5nVGhhdE1hdGNoZXMoJG1lc3NhZ2UpCiAqIEBtZXRob2QgYm9vbCBoYXNOb3RpY2VUaGF0TWF0Y2hlcygkbWVzc2FnZSkKICogQG1ldGhvZCBib29sIGhhc0luZm9UaGF0TWF0Y2hlcygkbWVzc2FnZSkKICogQG1ldGhvZCBib29sIGhhc0RlYnVnVGhhdE1hdGNoZXMoJG1lc3NhZ2UpCiAqCiAqIEBtZXRob2QgYm9vbCBoYXNFbWVyZ2VuY3lUaGF0UGFzc2VzKCRtZXNzYWdlKQogKiBAbWV0aG9kIGJvb2wgaGFzQWxlcnRUaGF0UGFzc2VzKCRtZXNzYWdlKQogKiBAbWV0aG9kIGJvb2wgaGFzQ3JpdGljYWxUaGF0UGFzc2VzKCRtZXNzYWdlKQogKiBAbWV0aG9kIGJvb2wgaGFzRXJyb3JUaGF0UGFzc2VzKCRtZXNzYWdlKQogKiBAbWV0aG9kIGJvb2wgaGFzV2FybmluZ1RoYXRQYXNzZXMoJG1lc3NhZ2UpCiAqIEBtZXRob2QgYm9vbCBoYXNOb3RpY2VUaGF0UGFzc2VzKCRtZXNzYWdlKQogKiBAbWV0aG9kIGJvb2wgaGFzSW5mb1RoYXRQYXNzZXMoJG1lc3NhZ2UpCiAqIEBtZXRob2QgYm9vbCBoYXNEZWJ1Z1RoYXRQYXNzZXMoJG1lc3NhZ2UpCiAqLwpjbGFzcyBUZXN0TG9nZ2VyIGV4dGVuZHMgQWJzdHJhY3RMb2dnZXIKewogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyAkcmVjb3JkcyA9IFtdOwoKICAgIHB1YmxpYyAkcmVjb3Jkc0J5TGV2ZWwgPSBbXTsKCiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2coJGxldmVsLCAkbWVzc2FnZSwgYXJyYXkgJGNvbnRleHQgPSBbXSkKICAgIHsKICAgICAgICAkcmVjb3JkID0gWwogICAgICAgICAgICAnbGV2ZWwnID0+ICRsZXZlbCwKICAgICAgICAgICAgJ21lc3NhZ2UnID0+ICRtZXNzYWdlLAogICAgICAgICAgICAnY29udGV4dCcgPT4gJGNvbnRleHQsCiAgICAgICAgXTsKCiAgICAgICAgJHRoaXMtPnJlY29yZHNCeUxldmVsWyRyZWNvcmRbJ2xldmVsJ11dW10gPSAkcmVjb3JkOwogICAgICAgICR0aGlzLT5yZWNvcmRzW10gPSAkcmVjb3JkOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNSZWNvcmRzKCRsZXZlbCkKICAgIHsKICAgICAgICByZXR1cm4gaXNzZXQoJHRoaXMtPnJlY29yZHNCeUxldmVsWyRsZXZlbF0pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNSZWNvcmQoJHJlY29yZCwgJGxldmVsKQogICAgewogICAgICAgIGlmIChpc19zdHJpbmcoJHJlY29yZCkpIHsKICAgICAgICAgICAgJHJlY29yZCA9IFsnbWVzc2FnZScgPT4gJHJlY29yZF07CiAgICAgICAgfQogICAgICAgIHJldHVybiAkdGhpcy0+aGFzUmVjb3JkVGhhdFBhc3NlcyhmdW5jdGlvbiAoJHJlYykgdXNlICgkcmVjb3JkKSB7CiAgICAgICAgICAgIGlmICgkcmVjWydtZXNzYWdlJ10gIT09ICRyZWNvcmRbJ21lc3NhZ2UnXSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChpc3NldCgkcmVjb3JkWydjb250ZXh0J10pICYmICRyZWNbJ2NvbnRleHQnXSAhPT0gJHJlY29yZFsnY29udGV4dCddKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSwgJGxldmVsKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzUmVjb3JkVGhhdENvbnRhaW5zKCRtZXNzYWdlLCAkbGV2ZWwpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oYXNSZWNvcmRUaGF0UGFzc2VzKGZ1bmN0aW9uICgkcmVjKSB1c2UgKCRtZXNzYWdlKSB7CiAgICAgICAgICAgIHJldHVybiBzdHJwb3MoJHJlY1snbWVzc2FnZSddLCAkbWVzc2FnZSkgIT09IGZhbHNlOwogICAgICAgIH0sICRsZXZlbCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGhhc1JlY29yZFRoYXRNYXRjaGVzKCRyZWdleCwgJGxldmVsKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aGFzUmVjb3JkVGhhdFBhc3NlcyhmdW5jdGlvbiAoJHJlYykgdXNlICgkcmVnZXgpIHsKICAgICAgICAgICAgcmV0dXJuIHByZWdfbWF0Y2goJHJlZ2V4LCAkcmVjWydtZXNzYWdlJ10pID4gMDsKICAgICAgICB9LCAkbGV2ZWwpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNSZWNvcmRUaGF0UGFzc2VzKGNhbGxhYmxlICRwcmVkaWNhdGUsICRsZXZlbCkKICAgIHsKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5yZWNvcmRzQnlMZXZlbFskbGV2ZWxdKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5yZWNvcmRzQnlMZXZlbFskbGV2ZWxdIGFzICRpID0+ICRyZWMpIHsKICAgICAgICAgICAgaWYgKGNhbGxfdXNlcl9mdW5jKCRwcmVkaWNhdGUsICRyZWMsICRpKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NhbGwoJG1ldGhvZCwgJGFyZ3MpCiAgICB7CiAgICAgICAgaWYgKHByZWdfbWF0Y2goJy8oLiopKERlYnVnfEluZm98Tm90aWNlfFdhcm5pbmd8RXJyb3J8Q3JpdGljYWx8QWxlcnR8RW1lcmdlbmN5KSguKikvJywgJG1ldGhvZCwgJG1hdGNoZXMpID4gMCkgewogICAgICAgICAgICAkZ2VuZXJpY01ldGhvZCA9ICRtYXRjaGVzWzFdIC4gKCdSZWNvcmRzJyAhPT0gJG1hdGNoZXNbM10gPyAnUmVjb3JkJyA6ICcnKSAuICRtYXRjaGVzWzNdOwogICAgICAgICAgICAkbGV2ZWwgPSBzdHJ0b2xvd2VyKCRtYXRjaGVzWzJdKTsKICAgICAgICAgICAgaWYgKG1ldGhvZF9leGlzdHMoJHRoaXMsICRnZW5lcmljTWV0aG9kKSkgewogICAgICAgICAgICAgICAgJGFyZ3NbXSA9ICRsZXZlbDsKICAgICAgICAgICAgICAgIHJldHVybiBjYWxsX3VzZXJfZnVuY19hcnJheShbJHRoaXMsICRnZW5lcmljTWV0aG9kXSwgJGFyZ3MpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRocm93IG5ldyBcQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbignQ2FsbCB0byB1bmRlZmluZWQgbWV0aG9kICcgLiBnZXRfY2xhc3MoJHRoaXMpIC4gJzo6JyAuICRtZXRob2QgLiAnKCknKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzZXQoKQogICAgewogICAgICAgICR0aGlzLT5yZWNvcmRzID0gW107CiAgICAgICAgJHRoaXMtPnJlY29yZHNCeUxldmVsID0gW107CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/log/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[UFNSIExvZwo9PT09PT09CgpUaGlzIHJlcG9zaXRvcnkgaG9sZHMgYWxsIGludGVyZmFjZXMvY2xhc3Nlcy90cmFpdHMgcmVsYXRlZCB0bwpbUFNSLTNdKGh0dHBzOi8vZ2l0aHViLmNvbS9waHAtZmlnL2ZpZy1zdGFuZGFyZHMvYmxvYi9tYXN0ZXIvYWNjZXB0ZWQvUFNSLTMtbG9nZ2VyLWludGVyZmFjZS5tZCkuCgpOb3RlIHRoYXQgdGhpcyBpcyBub3QgYSBsb2dnZXIgb2YgaXRzIG93bi4gSXQgaXMgbWVyZWx5IGFuIGludGVyZmFjZSB0aGF0CmRlc2NyaWJlcyBhIGxvZ2dlci4gU2VlIHRoZSBzcGVjaWZpY2F0aW9uIGZvciBtb3JlIGRldGFpbHMuCgpJbnN0YWxsYXRpb24KLS0tLS0tLS0tLS0tCgpgYGBiYXNoCmNvbXBvc2VyIHJlcXVpcmUgcHNyL2xvZwpgYGAKClVzYWdlCi0tLS0tCgpJZiB5b3UgbmVlZCBhIGxvZ2dlciwgeW91IGNhbiB1c2UgdGhlIGludGVyZmFjZSBsaWtlIHRoaXM6CgpgYGBwaHAKPD9waHAKCnVzZSBQc3JcTG9nXExvZ2dlckludGVyZmFjZTsKCmNsYXNzIEZvbwp7CiAgICBwcml2YXRlICRsb2dnZXI7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KExvZ2dlckludGVyZmFjZSAkbG9nZ2VyID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+bG9nZ2VyID0gJGxvZ2dlcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZG9Tb21ldGhpbmcoKQogICAgewogICAgICAgIGlmICgkdGhpcy0+bG9nZ2VyKSB7CiAgICAgICAgICAgICR0aGlzLT5sb2dnZXItPmluZm8oJ0RvaW5nIHdvcmsnKTsKICAgICAgICB9CiAgICAgICAgICAgCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHRoaXMtPmRvU29tZXRoaW5nRWxzZSgpOwogICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZXhjZXB0aW9uKSB7CiAgICAgICAgICAgICR0aGlzLT5sb2dnZXItPmVycm9yKCdPaCBubyEnLCBhcnJheSgnZXhjZXB0aW9uJyA9PiAkZXhjZXB0aW9uKSk7CiAgICAgICAgfQoKICAgICAgICAvLyBkbyBzb21ldGhpbmcgdXNlZnVsCiAgICB9Cn0KYGBgCgpZb3UgY2FuIHRoZW4gcGljayBvbmUgb2YgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgaW50ZXJmYWNlIHRvIGdldCBhIGxvZ2dlci4KCklmIHlvdSB3YW50IHRvIGltcGxlbWVudCB0aGUgaW50ZXJmYWNlLCB5b3UgY2FuIHJlcXVpcmUgdGhpcyBwYWNrYWdlIGFuZAppbXBsZW1lbnQgYFBzclxMb2dcTG9nZ2VySW50ZXJmYWNlYCBpbiB5b3VyIGNvZGUuIFBsZWFzZSByZWFkIHRoZQpbc3BlY2lmaWNhdGlvbiB0ZXh0XShodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9maWctc3RhbmRhcmRzL2Jsb2IvbWFzdGVyL2FjY2VwdGVkL1BTUi0zLWxvZ2dlci1pbnRlcmZhY2UubWQpCmZvciBkZXRhaWxzLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ralouphie/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ralouphie/getallheaders/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ralouphie/getallheaders/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewoJIm5hbWUiOiAicmFsb3VwaGllL2dldGFsbGhlYWRlcnMiLAoJImRlc2NyaXB0aW9uIjogIkEgcG9seWZpbGwgZm9yIGdldGFsbGhlYWRlcnMuIiwKCSJsaWNlbnNlIjogIk1JVCIsCgkiYXV0aG9ycyI6IFsKCQl7CgkJCSJuYW1lIjogIlJhbHBoIEtoYXR0YXIiLAoJCQkiZW1haWwiOiAicmFscGgua2hhdHRhckBnbWFpbC5jb20iCgkJfQoJXSwKCSJyZXF1aXJlIjogewoJCSJwaHAiOiAiPj01LjYiCgl9LAoJInJlcXVpcmUtZGV2IjogewoJCSJwaHB1bml0L3BocHVuaXQiOiAiXjUgfHwgXjYuNSIsCgkJInBocC1jb3ZlcmFsbHMvcGhwLWNvdmVyYWxscyI6ICJeMi4xIgoJfSwKCSJhdXRvbG9hZCI6IHsKCQkiZmlsZXMiOiBbInNyYy9nZXRhbGxoZWFkZXJzLnBocCJdCgl9LAoJImF1dG9sb2FkLWRldiI6IHsKCQkicHNyLTQiOiB7CgkJCSJnZXRhbGxoZWFkZXJzXFxUZXN0c1xcIjogInRlc3RzLyIKCQl9Cgl9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ralouphie/getallheaders/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTQgUmFscGggS2hhdHRhcgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/ralouphie/getallheaders/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Z2V0YWxsaGVhZGVycwo9PT09PT09PT09PT09CgpQSFAgYGdldGFsbGhlYWRlcnMoKWAgcG9seWZpbGwuIENvbXBhdGlibGUgd2l0aCBQSFAgPj0gNS4zLgoKWyFbQnVpbGQgU3RhdHVzXShodHRwczovL3RyYXZpcy1jaS5vcmcvcmFsb3VwaGllL2dldGFsbGhlYWRlcnMuc3ZnP2JyYW5jaD1tYXN0ZXIpXShodHRwczovL3RyYXZpcy1jaS5vcmcvcmFsb3VwaGllL2dldGFsbGhlYWRlcnMpClshW0NvdmVyYWdlIFN0YXR1c10oaHR0cHM6Ly9jb3ZlcmFsbHMuaW8vcmVwb3MvcmFsb3VwaGllL2dldGFsbGhlYWRlcnMvYmFkZ2UucG5nP2JyYW5jaD1tYXN0ZXIpXShodHRwczovL2NvdmVyYWxscy5pby9yL3JhbG91cGhpZS9nZXRhbGxoZWFkZXJzP2JyYW5jaD1tYXN0ZXIpClshW0xhdGVzdCBTdGFibGUgVmVyc2lvbl0oaHR0cHM6Ly9wb3Nlci5wdWd4Lm9yZy9yYWxvdXBoaWUvZ2V0YWxsaGVhZGVycy92L3N0YWJsZS5wbmcpXShodHRwczovL3BhY2thZ2lzdC5vcmcvcGFja2FnZXMvcmFsb3VwaGllL2dldGFsbGhlYWRlcnMpClshW0xhdGVzdCBVbnN0YWJsZSBWZXJzaW9uXShodHRwczovL3Bvc2VyLnB1Z3gub3JnL3JhbG91cGhpZS9nZXRhbGxoZWFkZXJzL3YvdW5zdGFibGUucG5nKV0oaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzL3JhbG91cGhpZS9nZXRhbGxoZWFkZXJzKQpbIVtMaWNlbnNlXShodHRwczovL3Bvc2VyLnB1Z3gub3JnL3JhbG91cGhpZS9nZXRhbGxoZWFkZXJzL2xpY2Vuc2UucG5nKV0oaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzL3JhbG91cGhpZS9nZXRhbGxoZWFkZXJzKQoKClRoaXMgaXMgYSBzaW1wbGUgcG9seWZpbGwgZm9yIFtgZ2V0YWxsaGVhZGVycygpYF0oaHR0cDovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5nZXRhbGxoZWFkZXJzLnBocCkuCgojIyBJbnN0YWxsCgpGb3IgUEhQIHZlcnNpb24gKipgPj0gNS42YCoqOgoKYGBgCmNvbXBvc2VyIHJlcXVpcmUgcmFsb3VwaGllL2dldGFsbGhlYWRlcnMKYGBgCgpGb3IgUEhQIHZlcnNpb24gKipgPCA1LjZgKio6CgpgYGAKY29tcG9zZXIgcmVxdWlyZSByYWxvdXBoaWUvZ2V0YWxsaGVhZGVycyAiXjIiCmBgYAo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ralouphie/getallheaders/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ralouphie/getallheaders/src/getallheaders.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghZnVuY3Rpb25fZXhpc3RzKCdnZXRhbGxoZWFkZXJzJykpIHsKCiAgICAvKioKICAgICAqIEdldCBhbGwgSFRUUCBoZWFkZXIga2V5L3ZhbHVlcyBhcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBmb3IgdGhlIGN1cnJlbnQgcmVxdWVzdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tzdHJpbmddIFRoZSBIVFRQIGhlYWRlciBrZXkvdmFsdWUgcGFpcnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldGFsbGhlYWRlcnMoKQogICAgewogICAgICAgICRoZWFkZXJzID0gYXJyYXkoKTsKCiAgICAgICAgJGNvcHlfc2VydmVyID0gYXJyYXkoCiAgICAgICAgICAgICdDT05URU5UX1RZUEUnICAgPT4gJ0NvbnRlbnQtVHlwZScsCiAgICAgICAgICAgICdDT05URU5UX0xFTkdUSCcgPT4gJ0NvbnRlbnQtTGVuZ3RoJywKICAgICAgICAgICAgJ0NPTlRFTlRfTUQ1JyAgICA9PiAnQ29udGVudC1NZDUnLAogICAgICAgICk7CgogICAgICAgIGZvcmVhY2ggKCRfU0VSVkVSIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgIGlmIChzdWJzdHIoJGtleSwgMCwgNSkgPT09ICdIVFRQXycpIHsKICAgICAgICAgICAgICAgICRrZXkgPSBzdWJzdHIoJGtleSwgNSk7CiAgICAgICAgICAgICAgICBpZiAoIWlzc2V0KCRjb3B5X3NlcnZlclska2V5XSkgfHwgIWlzc2V0KCRfU0VSVkVSWyRrZXldKSkgewogICAgICAgICAgICAgICAgICAgICRrZXkgPSBzdHJfcmVwbGFjZSgnICcsICctJywgdWN3b3JkcyhzdHJ0b2xvd2VyKHN0cl9yZXBsYWNlKCdfJywgJyAnLCAka2V5KSkpKTsKICAgICAgICAgICAgICAgICAgICAkaGVhZGVyc1ska2V5XSA9ICR2YWx1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlaWYgKGlzc2V0KCRjb3B5X3NlcnZlclska2V5XSkpIHsKICAgICAgICAgICAgICAgICRoZWFkZXJzWyRjb3B5X3NlcnZlclska2V5XV0gPSAkdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghaXNzZXQoJGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSkpIHsKICAgICAgICAgICAgaWYgKGlzc2V0KCRfU0VSVkVSWydSRURJUkVDVF9IVFRQX0FVVEhPUklaQVRJT04nXSkpIHsKICAgICAgICAgICAgICAgICRoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSAkX1NFUlZFUlsnUkVESVJFQ1RfSFRUUF9BVVRIT1JJWkFUSU9OJ107CiAgICAgICAgICAgIH0gZWxzZWlmIChpc3NldCgkX1NFUlZFUlsnUEhQX0FVVEhfVVNFUiddKSkgewogICAgICAgICAgICAgICAgJGJhc2ljX3Bhc3MgPSBpc3NldCgkX1NFUlZFUlsnUEhQX0FVVEhfUFcnXSkgPyAkX1NFUlZFUlsnUEhQX0FVVEhfUFcnXSA6ICcnOwogICAgICAgICAgICAgICAgJGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9ICdCYXNpYyAnIC4gYmFzZTY0X2VuY29kZSgkX1NFUlZFUlsnUEhQX0FVVEhfVVNFUiddIC4gJzonIC4gJGJhc2ljX3Bhc3MpOwogICAgICAgICAgICB9IGVsc2VpZiAoaXNzZXQoJF9TRVJWRVJbJ1BIUF9BVVRIX0RJR0VTVCddKSkgewogICAgICAgICAgICAgICAgJGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9ICRfU0VSVkVSWydQSFBfQVVUSF9ESUdFU1QnXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRoZWFkZXJzOwogICAgfQoKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAicmFtc2V5L2NvbGxlY3Rpb24iLAogICAgImRlc2NyaXB0aW9uIjogIkEgUEhQIGxpYnJhcnkgZm9yIHJlcHJlc2VudGluZyBhbmQgbWFuaXB1bGF0aW5nIGNvbGxlY3Rpb25zLiIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAia2V5d29yZHMiOiBbCiAgICAgICAgImFycmF5IiwKICAgICAgICAiY29sbGVjdGlvbiIsCiAgICAgICAgImhhc2giLAogICAgICAgICJtYXAiLAogICAgICAgICJxdWV1ZSIsCiAgICAgICAgInNldCIKICAgIF0sCiAgICAiYXV0aG9ycyI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIkJlbiBSYW1zZXkiLAogICAgICAgICAgICAiZW1haWwiOiAiYmVuQGJlbnJhbXNleS5jb20iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9iZW5yYW1zZXkuY29tIgogICAgICAgIH0KICAgIF0sCiAgICAicmVxdWlyZSI6IHsKICAgICAgICAicGhwIjogIl43LjQgfHwgXjguMCIsCiAgICAgICAgInN5bWZvbnkvcG9seWZpbGwtcGhwODEiOiAiXjEuMjMiCiAgICB9LAogICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICJjYXB0YWluaG9vay9wbHVnaW4tY29tcG9zZXIiOiAiXjUuMyIsCiAgICAgICAgImVyZ2VibmlzL2NvbXBvc2VyLW5vcm1hbGl6ZSI6ICJeMi4yOC4zIiwKICAgICAgICAiZmFrZXJwaHAvZmFrZXIiOiAiXjEuMjEiLAogICAgICAgICJoYW1jcmVzdC9oYW1jcmVzdC1waHAiOiAiXjIuMCIsCiAgICAgICAgImphbmdyZWdvci9waHBzdGFuLXByb3BoZWN5IjogIl4xLjAiLAogICAgICAgICJtb2NrZXJ5L21vY2tlcnkiOiAiXjEuNSIsCiAgICAgICAgInBocC1wYXJhbGxlbC1saW50L3BocC1jb25zb2xlLWhpZ2hsaWdodGVyIjogIl4xLjAiLAogICAgICAgICJwaHAtcGFyYWxsZWwtbGludC9waHAtcGFyYWxsZWwtbGludCI6ICJeMS4zIiwKICAgICAgICAicGhwY3NzdGFuZGFyZHMvcGhwY3N1dGlscyI6ICJeMS4wLjAtcmMxIiwKICAgICAgICAicGhwc3BlYy9wcm9waGVjeS1waHB1bml0IjogIl4yLjAiLAogICAgICAgICJwaHBzdGFuL2V4dGVuc2lvbi1pbnN0YWxsZXIiOiAiXjEuMiIsCiAgICAgICAgInBocHN0YW4vcGhwc3RhbiI6ICJeMS45IiwKICAgICAgICAicGhwc3Rhbi9waHBzdGFuLW1vY2tlcnkiOiAiXjEuMSIsCiAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1waHB1bml0IjogIl4xLjMiLAogICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjkuNSIsCiAgICAgICAgInBzYWxtL3BsdWdpbi1tb2NrZXJ5IjogIl4xLjEiLAogICAgICAgICJwc2FsbS9wbHVnaW4tcGhwdW5pdCI6ICJeMC4xOC40IiwKICAgICAgICAicmFtc2V5L2NvZGluZy1zdGFuZGFyZCI6ICJeMi4wLjMiLAogICAgICAgICJyYW1zZXkvY29udmVudGlvbmFsLWNvbW1pdHMiOiAiXjEuMyIsCiAgICAgICAgInZpbWVvL3BzYWxtIjogIl41LjQiCiAgICB9LAogICAgIm1pbmltdW0tc3RhYmlsaXR5IjogIlJDIiwKICAgICJwcmVmZXItc3RhYmxlIjogdHJ1ZSwKICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICJSYW1zZXlcXENvbGxlY3Rpb25cXCI6ICJzcmMvIgogICAgICAgIH0KICAgIH0sCiAgICAiYXV0b2xvYWQtZGV2IjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIlJhbXNleVxcQ29sbGVjdGlvblxcVGVzdFxcIjogInRlc3RzLyIsCiAgICAgICAgICAgICJSYW1zZXlcXFRlc3RcXEdlbmVyaWNzXFwiOiAidGVzdHMvZ2VuZXJpY3MvIgogICAgICAgIH0sCiAgICAgICAgImZpbGVzIjogWwogICAgICAgICAgICAidmVuZG9yL2hhbWNyZXN0L2hhbWNyZXN0LXBocC9oYW1jcmVzdC9IYW1jcmVzdC5waHAiCiAgICAgICAgXQogICAgfSwKICAgICJjb25maWciOiB7CiAgICAgICAgImFsbG93LXBsdWdpbnMiOiB7CiAgICAgICAgICAgICJkZWFsZXJkaXJlY3QvcGhwY29kZXNuaWZmZXItY29tcG9zZXItaW5zdGFsbGVyIjogdHJ1ZSwKICAgICAgICAgICAgImVyZ2VibmlzL2NvbXBvc2VyLW5vcm1hbGl6ZSI6IHRydWUsCiAgICAgICAgICAgICJwaHBzdGFuL2V4dGVuc2lvbi1pbnN0YWxsZXIiOiB0cnVlLAogICAgICAgICAgICAiY2FwdGFpbmhvb2svcGx1Z2luLWNvbXBvc2VyIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgInNvcnQtcGFja2FnZXMiOiB0cnVlCiAgICB9LAogICAgImV4dHJhIjogewogICAgICAgICJjYXB0YWluaG9vayI6IHsKICAgICAgICAgICAgImZvcmNlLWluc3RhbGwiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICAicmFtc2V5L2NvbnZlbnRpb25hbC1jb21taXRzIjogewogICAgICAgICAgICAiY29uZmlnRmlsZSI6ICJjb252ZW50aW9uYWwtY29tbWl0cy5qc29uIgogICAgICAgIH0KICAgIH0sCiAgICAic2NyaXB0cyI6IHsKICAgICAgICAiZGV2OmFuYWx5emUiOiBbCiAgICAgICAgICAgICJAZGV2OmFuYWx5emU6cGhwc3RhbiIsCiAgICAgICAgICAgICJAZGV2OmFuYWx5emU6cHNhbG0iCiAgICAgICAgXSwKICAgICAgICAiZGV2OmFuYWx5emU6cGhwc3RhbiI6ICJwaHBzdGFuIGFuYWx5c2UgLS1hbnNpIC0tbWVtb3J5LWxpbWl0PTFHIiwKICAgICAgICAiZGV2OmFuYWx5emU6cHNhbG0iOiAicHNhbG0iLAogICAgICAgICJkZXY6YnVpbGQ6Y2xlYW4iOiAiZ2l0IGNsZWFuIC1mWCBidWlsZC8iLAogICAgICAgICJkZXY6bGludCI6IFsKICAgICAgICAgICAgIkBkZXY6bGludDpzeW50YXgiLAogICAgICAgICAgICAiQGRldjpsaW50OnN0eWxlIgogICAgICAgIF0sCiAgICAgICAgImRldjpsaW50OmZpeCI6ICJwaHBjYmYiLAogICAgICAgICJkZXY6bGludDpzdHlsZSI6ICJwaHBjcyAtLWNvbG9ycyIsCiAgICAgICAgImRldjpsaW50OnN5bnRheCI6ICJwYXJhbGxlbC1saW50IC0tY29sb3JzIHNyYy8gdGVzdHMvIiwKICAgICAgICAiZGV2OnRlc3QiOiBbCiAgICAgICAgICAgICJAZGV2OmxpbnQiLAogICAgICAgICAgICAiQGRldjphbmFseXplIiwKICAgICAgICAgICAgIkBkZXY6dGVzdDp1bml0IgogICAgICAgIF0sCiAgICAgICAgImRldjp0ZXN0OmNvdmVyYWdlOmNpIjogInBocHVuaXQgLS1jb2xvcnM9YWx3YXlzIC0tY292ZXJhZ2UtdGV4dCAtLWNvdmVyYWdlLWNsb3ZlciBidWlsZC9jb3ZlcmFnZS9jbG92ZXIueG1sIC0tY292ZXJhZ2UtY29iZXJ0dXJhIGJ1aWxkL2NvdmVyYWdlL2NvYmVydHVyYS54bWwgLS1jb3ZlcmFnZS1jcmFwNGogYnVpbGQvY292ZXJhZ2UvY3JhcDRqLnhtbCAtLWNvdmVyYWdlLXhtbCBidWlsZC9jb3ZlcmFnZS9jb3ZlcmFnZS14bWwgLS1sb2ctanVuaXQgYnVpbGQvanVuaXQueG1sIiwKICAgICAgICAiZGV2OnRlc3Q6Y292ZXJhZ2U6aHRtbCI6ICJwaHB1bml0IC0tY29sb3JzPWFsd2F5cyAtLWNvdmVyYWdlLWh0bWwgYnVpbGQvY292ZXJhZ2UvY292ZXJhZ2UtaHRtbC8iLAogICAgICAgICJkZXY6dGVzdDp1bml0IjogInBocHVuaXQgLS1jb2xvcnM9YWx3YXlzIiwKICAgICAgICAidGVzdCI6ICJAZGV2OnRlc3QiCiAgICB9LAogICAgInNjcmlwdHMtZGVzY3JpcHRpb25zIjogewogICAgICAgICJkZXY6YW5hbHl6ZSI6ICJSdW5zIGFsbCBzdGF0aWMgYW5hbHlzaXMgY2hlY2tzLiIsCiAgICAgICAgImRldjphbmFseXplOnBocHN0YW4iOiAiUnVucyB0aGUgUEhQU3RhbiBzdGF0aWMgYW5hbHl6ZXIuIiwKICAgICAgICAiZGV2OmFuYWx5emU6cHNhbG0iOiAiUnVucyB0aGUgUHNhbG0gc3RhdGljIGFuYWx5emVyLiIsCiAgICAgICAgImRldjpidWlsZDpjbGVhbiI6ICJDbGVhbnMgdGhlIGJ1aWxkLyBkaXJlY3RvcnkuIiwKICAgICAgICAiZGV2OmxpbnQiOiAiUnVucyBhbGwgbGludGluZyBjaGVja3MuIiwKICAgICAgICAiZGV2OmxpbnQ6Zml4IjogIkF1dG8tZml4ZXMgY29kaW5nIHN0YW5kYXJkcyBpc3N1ZXMsIGlmIHBvc3NpYmxlLiIsCiAgICAgICAgImRldjpsaW50OnN0eWxlIjogIkNoZWNrcyBmb3IgY29kaW5nIHN0YW5kYXJkcyBpc3N1ZXMuIiwKICAgICAgICAiZGV2OmxpbnQ6c3ludGF4IjogIkNoZWNrcyBmb3Igc3ludGF4IGVycm9ycy4iLAogICAgICAgICJkZXY6dGVzdCI6ICJSdW5zIGxpbnRpbmcsIHN0YXRpYyBhbmFseXNpcywgYW5kIHVuaXQgdGVzdHMuIiwKICAgICAgICAiZGV2OnRlc3Q6Y292ZXJhZ2U6Y2kiOiAiUnVucyB1bml0IHRlc3RzIGFuZCBnZW5lcmF0ZXMgQ0kgY292ZXJhZ2UgcmVwb3J0cy4iLAogICAgICAgICJkZXY6dGVzdDpjb3ZlcmFnZTpodG1sIjogIlJ1bnMgdW5pdCB0ZXN0cyBhbmQgZ2VuZXJhdGVzIEhUTUwgY292ZXJhZ2UgcmVwb3J0LiIsCiAgICAgICAgImRldjp0ZXN0OnVuaXQiOiAiUnVucyB1bml0IHRlc3RzLiIsCiAgICAgICAgInRlc3QiOiAiUnVucyBsaW50aW5nLCBzdGF0aWMgYW5hbHlzaXMsIGFuZCB1bml0IHRlc3RzLiIKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/conventional-commits.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgInR5cGVDYXNlIjogImtlYmFiIiwKICAgICJ0eXBlcyI6IFsKICAgICAgICAiY2hvcmUiLAogICAgICAgICJjaSIsCiAgICAgICAgImRvY3MiLAogICAgICAgICJmZWF0IiwKICAgICAgICAiZml4IiwKICAgICAgICAicmVmYWN0b3IiLAogICAgICAgICJzZWN1cml0eSIsCiAgICAgICAgInN0eWxlIiwKICAgICAgICAidGVzdCIKICAgIF0sCiAgICAic2NvcGVDYXNlIjogImtlYmFiIiwKICAgICJzY29wZVJlcXVpcmVkIjogZmFsc2UsCiAgICAic2NvcGVzIjogW10sCiAgICAiZGVzY3JpcHRpb25DYXNlIjogbnVsbCwKICAgICJkZXNjcmlwdGlvbkVuZE1hcmsiOiAiIiwKICAgICJib2R5UmVxdWlyZWQiOiBmYWxzZSwKICAgICJib2R5V3JhcFdpZHRoIjogNzIsCiAgICAicmVxdWlyZWRGb290ZXJzIjogW10KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDE1LTIwMjIgQmVuIFJhbXNleSA8YmVuQGJlbnJhbXNleS5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgxIGFsaWduPSJjZW50ZXIiPnJhbXNleS9jb2xsZWN0aW9uPC9oMT4KCjxwIGFsaWduPSJjZW50ZXIiPgogICAgPHN0cm9uZz5BIFBIUCBsaWJyYXJ5IGZvciByZXByZXNlbnRpbmcgYW5kIG1hbmlwdWxhdGluZyBjb2xsZWN0aW9ucy48L3N0cm9uZz4KPC9wPgoKPHAgYWxpZ249ImNlbnRlciI+CiAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vcmFtc2V5L2NvbGxlY3Rpb24iPjxpbWcgc3JjPSJodHRwOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2Uvc291cmNlLXJhbXNleS9jb2xsZWN0aW9uLWJsdWUuc3ZnP3N0eWxlPWZsYXQtc3F1YXJlIiBhbHQ9IlNvdXJjZSBDb2RlIj48L2E+CiAgICA8YSBocmVmPSJodHRwczovL3BhY2thZ2lzdC5vcmcvcGFja2FnZXMvcmFtc2V5L2NvbGxlY3Rpb24iPjxpbWcgc3JjPSJodHRwczovL2ltZy5zaGllbGRzLmlvL3BhY2thZ2lzdC92L3JhbXNleS9jb2xsZWN0aW9uLnN2Zz9zdHlsZT1mbGF0LXNxdWFyZSZsYWJlbD1yZWxlYXNlIiBhbHQ9IkRvd25sb2FkIFBhY2thZ2UiPjwvYT4KICAgIDxhIGhyZWY9Imh0dHBzOi8vcGhwLm5ldCI+PGltZyBzcmM9Imh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vcGFja2FnaXN0L3BocC12L3JhbXNleS9jb2xsZWN0aW9uLnN2Zz9zdHlsZT1mbGF0LXNxdWFyZSZjb2xvckI9JTIzODg5MkJGIiBhbHQ9IlBIUCBQcm9ncmFtbWluZyBMYW5ndWFnZSI+PC9hPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3JhbXNleS9jb2xsZWN0aW9uL2Jsb2IvbWFzdGVyL0xJQ0VOU0UiPjxpbWcgc3JjPSJodHRwczovL2ltZy5zaGllbGRzLmlvL3BhY2thZ2lzdC9sL3JhbXNleS9jb2xsZWN0aW9uLnN2Zz9zdHlsZT1mbGF0LXNxdWFyZSZjb2xvckI9ZGFya2N5YW4iIGFsdD0iUmVhZCBMaWNlbnNlIj48L2E+CiAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vcmFtc2V5L2NvbGxlY3Rpb24vYWN0aW9ucy93b3JrZmxvd3MvY29udGludW91cy1pbnRlZ3JhdGlvbi55bWwiPjxpbWcgc3JjPSJodHRwczovL2ltZy5zaGllbGRzLmlvL2dpdGh1Yi9hY3Rpb25zL3dvcmtmbG93L3N0YXR1cy9yYW1zZXkvY29sbGVjdGlvbi9jb250aW51b3VzLWludGVncmF0aW9uLnltbD9icmFuY2g9bWFpbiZsb2dvPWdpdGh1YiZzdHlsZT1mbGF0LXNxdWFyZSIgYWx0PSJCdWlsZCBTdGF0dXMiPjwvYT4KICAgIDxhIGhyZWY9Imh0dHBzOi8vY29kZWNvdi5pby9naC9yYW1zZXkvY29sbGVjdGlvbiI+PGltZyBzcmM9Imh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vY29kZWNvdi9jL2doL3JhbXNleS9jb2xsZWN0aW9uP2xhYmVsPWNvZGVjb3YmbG9nbz1jb2RlY292JnN0eWxlPWZsYXQtc3F1YXJlIiBhbHQ9IkNvZGVjb3YgQ29kZSBDb3ZlcmFnZSI+PC9hPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9zaGVwaGVyZC5kZXYvZ2l0aHViL3JhbXNleS9jb2xsZWN0aW9uIj48aW1nIHNyYz0iaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9lbmRwb2ludD9zdHlsZT1mbGF0LXNxdWFyZSZ1cmw9aHR0cHMlM0ElMkYlMkZzaGVwaGVyZC5kZXYlMkZnaXRodWIlMkZyYW1zZXklMkZjb2xsZWN0aW9uJTJGY292ZXJhZ2UiIGFsdD0iUHNhbG0gVHlwZSBDb3ZlcmFnZSI+PC9hPgo8L3A+CgojIyBBYm91dAoKcmFtc2V5L2NvbGxlY3Rpb24gaXMgYSBQSFAgbGlicmFyeSBmb3IgcmVwcmVzZW50aW5nIGFuZCBtYW5pcHVsYXRpbmcgY29sbGVjdGlvbnMuCgpNdWNoIGluc3BpcmF0aW9uIGZvciB0aGlzIGxpYnJhcnkgY2FtZSBmcm9tIHRoZSBbSmF2YSBDb2xsZWN0aW9ucyBGcmFtZXdvcmtdW2phdmFdLgoKVGhpcyBwcm9qZWN0IGFkaGVyZXMgdG8gYSBbY29kZSBvZiBjb25kdWN0XShDT0RFX09GX0NPTkRVQ1QubWQpLgpCeSBwYXJ0aWNpcGF0aW5nIGluIHRoaXMgcHJvamVjdCBhbmQgaXRzIGNvbW11bml0eSwgeW91IGFyZSBleHBlY3RlZCB0bwp1cGhvbGQgdGhpcyBjb2RlLgoKIyMgSW5zdGFsbGF0aW9uCgpJbnN0YWxsIHRoaXMgcGFja2FnZSBhcyBhIGRlcGVuZGVuY3kgdXNpbmcgW0NvbXBvc2VyXShodHRwczovL2dldGNvbXBvc2VyLm9yZykuCgpgYGAgYmFzaApjb21wb3NlciByZXF1aXJlIHJhbXNleS9jb2xsZWN0aW9uCmBgYAoKIyMgVXNhZ2UKCkV4YW1wbGVzIG9mIGhvdyB0byB1c2UgdGhpcyBsaWJyYXJ5IG1heSBiZSBmb3VuZCBpbiB0aGUKW1dpa2kgcGFnZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9yYW1zZXkvY29sbGVjdGlvbi93aWtpL0V4YW1wbGVzKS4KCiMjIENvbnRyaWJ1dGluZwoKQ29udHJpYnV0aW9ucyBhcmUgd2VsY29tZSEgVG8gY29udHJpYnV0ZSwgcGxlYXNlIGZhbWlsaWFyaXplIHlvdXJzZWxmIHdpdGgKW0NPTlRSSUJVVElORy5tZF0oQ09OVFJJQlVUSU5HLm1kKS4KCiMjIENvb3JkaW5hdGVkIERpc2Nsb3N1cmUKCktlZXBpbmcgdXNlciBpbmZvcm1hdGlvbiBzYWZlIGFuZCBzZWN1cmUgaXMgYSB0b3AgcHJpb3JpdHksIGFuZCB3ZSB3ZWxjb21lIHRoZQpjb250cmlidXRpb24gb2YgZXh0ZXJuYWwgc2VjdXJpdHkgcmVzZWFyY2hlcnMuIElmIHlvdSBiZWxpZXZlIHlvdSd2ZSBmb3VuZCBhCnNlY3VyaXR5IGlzc3VlIGluIHNvZnR3YXJlIHRoYXQgaXMgbWFpbnRhaW5lZCBpbiB0aGlzIHJlcG9zaXRvcnksIHBsZWFzZSByZWFkCltTRUNVUklUWS5tZF1bXSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIHN1Ym1pdHRpbmcgYSB2dWxuZXJhYmlsaXR5IHJlcG9ydC4KCiMjIHJhbXNleS9jb2xsZWN0aW9uIGZvciBFbnRlcnByaXNlCgpBdmFpbGFibGUgYXMgcGFydCBvZiB0aGUgVGlkZWxpZnQgU3Vic2NyaXB0aW9uLgoKVGhlIG1haW50YWluZXJzIG9mIHJhbXNleS9jb2xsZWN0aW9uIGFuZCB0aG91c2FuZHMgb2Ygb3RoZXIgcGFja2FnZXMgYXJlIHdvcmtpbmcKd2l0aCBUaWRlbGlmdCB0byBkZWxpdmVyIGNvbW1lcmNpYWwgc3VwcG9ydCBhbmQgbWFpbnRlbmFuY2UgZm9yIHRoZSBvcGVuIHNvdXJjZQpwYWNrYWdlcyB5b3UgdXNlIHRvIGJ1aWxkIHlvdXIgYXBwbGljYXRpb25zLiBTYXZlIHRpbWUsIHJlZHVjZSByaXNrLCBhbmQgaW1wcm92ZQpjb2RlIGhlYWx0aCwgd2hpbGUgcGF5aW5nIHRoZSBtYWludGFpbmVycyBvZiB0aGUgZXhhY3QgcGFja2FnZXMgeW91IHVzZS4KW0xlYXJuIG1vcmUuXShodHRwczovL3RpZGVsaWZ0LmNvbS9zdWJzY3JpcHRpb24vcGtnL3BhY2thZ2lzdC1yYW1zZXktY29sbGVjdGlvbj91dG1fc291cmNlPXVuZGVmaW5lZCZ1dG1fbWVkaXVtPXJlZmVycmFsJnV0bV9jYW1wYWlnbj1lbnRlcnByaXNlJnV0bV90ZXJtPXJlcG8pCgojIyBDb3B5cmlnaHQgYW5kIExpY2Vuc2UKClRoZSByYW1zZXkvY29sbGVjdGlvbiBsaWJyYXJ5IGlzIGNvcHlyaWdodCDCqSBbQmVuIFJhbXNleV0oaHR0cHM6Ly9iZW5yYW1zZXkuY29tKQphbmQgbGljZW5zZWQgZm9yIHVzZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlCk1JVCBMaWNlbnNlIChNSVQpLiBQbGVhc2Ugc2VlIFtMSUNFTlNFXShMSUNFTlNFKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCgpbamF2YV06IGh0dHA6Ly9kb2NzLm9yYWNsZS5jb20vamF2YXNlLzgvZG9jcy90ZWNobm90ZXMvZ3VpZGVzL2NvbGxlY3Rpb25zL2luZGV4Lmh0bWwKW3NlY3VyaXR5Lm1kXTogaHR0cHM6Ly9naXRodWIuY29tL3JhbXNleS9jb2xsZWN0aW9uL2Jsb2IvbWFpbi9TRUNVUklUWS5tZAo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/SECURITY.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLQogICAgVGhpcyBwb2xpY3kgdGVtcGxhdGUgd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIEhhY2tlck9uZSBQb2xpY3kgQnVpbGRlciBbMV0sCiAgICB3aXRoIGd1aWRhbmNlIGZyb20gdGhlIE5hdGlvbmFsIFRlbGVjb21tdW5pY2F0aW9ucyBhbmQgSW5mb3JtYXRpb24KICAgIEFkbWluaXN0cmF0aW9uIENvb3JkaW5hdGVkIFZ1bG5lcmFiaWxpdHkgRGlzY2xvc3VyZSBUZW1wbGF0ZSBbMl0uCiAtLT4KCiMgVnVsbmVyYWJpbGl0eSBEaXNjbG9zdXJlIFBvbGljeSAoVkRQKQoKIyMgQnJhbmQgUHJvbWlzZQoKPCEtLQogICAgVGhpcyBpcyB5b3VyIGJyYW5kIHByb21pc2UuIEl0cyBvYmplY3RpdmUgaXMgdG8gImRlbW9uc3RyYXRlIGEgY2xlYXIsIGdvb2QKICAgIGZhaXRoIGNvbW1pdG1lbnQgdG8gY3VzdG9tZXJzIGFuZCBvdGhlciBzdGFrZWhvbGRlcnMgcG90ZW50aWFsbHkgaW1wYWN0ZWQgYnkKICAgIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyIgWzJdLgotLT4KCktlZXBpbmcgdXNlciBpbmZvcm1hdGlvbiBzYWZlIGFuZCBzZWN1cmUgaXMgYSB0b3AgcHJpb3JpdHksIGFuZCB3ZSB3ZWxjb21lIHRoZQpjb250cmlidXRpb24gb2YgZXh0ZXJuYWwgc2VjdXJpdHkgcmVzZWFyY2hlcnMuCgojIyBTY29wZQoKPCEtLQogICAgVGhpcyBpcyB5b3VyIGluaXRpYWwgc2NvcGUuIEl0IHRlbGxzIHZ1bG5lcmFiaWxpdHkgZmluZGVycyBhbmQgcmVwb3J0ZXJzCiAgICAid2hpY2ggc3lzdGVtcyBhbmQgY2FwYWJpbGl0aWVzIGFyZSAnZmFpciBnYW1lJyB2ZXJzdXMgJ29mZiBsaW1pdHMnIiBbMl0uCiAgICBGb3Igc29mdHdhcmUgcGFja2FnZXMsIHRoaXMgaXMgb2Z0ZW4gYSBsaXN0IG9mIGN1cnJlbnRseSBtYWludGFpbmVkIHZlcnNpb25zCiAgICBvZiB0aGUgcGFja2FnZS4KLS0+CgpJZiB5b3UgYmVsaWV2ZSB5b3UndmUgZm91bmQgYSBzZWN1cml0eSBpc3N1ZSBpbiBzb2Z0d2FyZSB0aGF0IGlzIG1haW50YWluZWQgaW4KdGhpcyByZXBvc2l0b3J5LCB3ZSBlbmNvdXJhZ2UgeW91IHRvIG5vdGlmeSB1cy4KCnwgVmVyc2lvbiB8IEluIHNjb3BlIHwgU291cmNlIGNvZGUgfAp8IC0tLS0tLS0gfCA6LS0tLS0tOiB8IC0tLS0tLS0tLS0tIHwKfCBsYXRlc3QgIHwg4pyFICAgICAgICB8IGh0dHBzOi8vZ2l0aHViLmNvbS9yYW1zZXkvY29sbGVjdGlvbiB8CgojIyBIb3cgdG8gU3VibWl0IGEgUmVwb3J0Cgo8IS0tCiAgICBUaGlzIGlzIHlvdXIgY29tbXVuaWNhdGlvbiBwcm9jZXNzLiBJdCB0ZWxscyBzZWN1cml0eSByZXNlYXJjaGVycyBob3cgdG8KICAgIGNvbnRhY3QgeW91IHRvIHJlcG9ydCBhIHZ1bG5lcmFiaWxpdHkuIEl0IG1heSBiZSBhIGxpbmsgdG8gYSB3ZWIgZm9ybSB0aGF0CiAgICB1c2VzIEhUVFBTIGZvciBzZWN1cmUgY29tbXVuaWNhdGlvbiwgb3IgaXQgbWF5IGJlIGFuIGVtYWlsIGFkZHJlc3MuCiAgICBPcHRpb25hbGx5LCB5b3UgbWF5IGNob29zZSB0byBpbmNsdWRlIGEgUEdQIHB1YmxpYyBrZXksIHNvIHRoYXQgcmVzZWFyY2hlcnMKICAgIG1heSBzZW5kIHlvdSBlbmNyeXB0ZWQgbWVzc2FnZXMuCi0tPgoKVG8gc3VibWl0IGEgdnVsbmVyYWJpbGl0eSByZXBvcnQsIHBsZWFzZSBjb250YWN0IHVzIGF0IHNlY3VyaXR5QHJhbXNleS5kZXYuCllvdXIgc3VibWlzc2lvbiB3aWxsIGJlIHJldmlld2VkIGFuZCB2YWxpZGF0ZWQgYnkgYSBtZW1iZXIgb2Ygb3VyIHRlYW0uCgojIyBTYWZlIEhhcmJvcgoKPCEtLQogICAgVGhpcyBzZWN0aW9uIGFzc3VyZXMgdnVsbmVyYWJpbGl0eSBmaW5kZXJzIGFuZCByZXBvcnRlcnMgdGhhdCB0aGV5IHdpbGwKICAgIHJlY2VpdmUgZ29vZCBmYWl0aCByZXNwb25zZXMgdG8gdGhlaXIgZ29vZCBmYWl0aCBhY3RzLiBJbiBvdGhlciB3b3JkcywKICAgICJ3ZSB3aWxsIG5vdCB0YWtlIGxlZ2FsIGFjdGlvbiBpZi4uLiIgWzJdLgotLT4KCldlIHN1cHBvcnQgc2FmZSBoYXJib3IgZm9yIHNlY3VyaXR5IHJlc2VhcmNoZXJzIHdobzoKCiogTWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGF2b2lkIHByaXZhY3kgdmlvbGF0aW9ucywgZGVzdHJ1Y3Rpb24gb2YgZGF0YSwgYW5kCiAgaW50ZXJydXB0aW9uIG9yIGRlZ3JhZGF0aW9uIG9mIG91ciBzZXJ2aWNlcy4KKiBPbmx5IGludGVyYWN0IHdpdGggYWNjb3VudHMgeW91IG93biBvciB3aXRoIGV4cGxpY2l0IHBlcm1pc3Npb24gb2YgdGhlIGFjY291bnQKICBob2xkZXIuIElmIHlvdSBkbyBlbmNvdW50ZXIgUGVyc29uYWxseSBJZGVudGlmaWFibGUgSW5mb3JtYXRpb24gKFBJSSkgY29udGFjdAogIHVzIGltbWVkaWF0ZWx5LCBkbyBub3QgcHJvY2VlZCB3aXRoIGFjY2VzcywgYW5kIGltbWVkaWF0ZWx5IHB1cmdlIGFueSBsb2NhbAogIGluZm9ybWF0aW9uLgoqIFByb3ZpZGUgdXMgd2l0aCBhIHJlYXNvbmFibGUgYW1vdW50IG9mIHRpbWUgdG8gcmVzb2x2ZSB2dWxuZXJhYmlsaXRpZXMgcHJpb3IKICB0byBhbnkgZGlzY2xvc3VyZSB0byB0aGUgcHVibGljIG9yIGEgdGhpcmQgcGFydHkuCgpXZSB3aWxsIGNvbnNpZGVyIGFjdGl2aXRpZXMgY29uZHVjdGVkIGNvbnNpc3RlbnQgd2l0aCB0aGlzIHBvbGljeSB0byBjb25zdGl0dXRlCiJhdXRob3JpemVkIiBjb25kdWN0IGFuZCB3aWxsIG5vdCBwdXJzdWUgY2l2aWwgYWN0aW9uIG9yIGluaXRpYXRlIGEgY29tcGxhaW50IHRvCmxhdyBlbmZvcmNlbWVudC4gV2Ugd2lsbCBoZWxwIHRvIHRoZSBleHRlbnQgd2UgY2FuIGlmIGxlZ2FsIGFjdGlvbiBpcyBpbml0aWF0ZWQKYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHlvdS4KClBsZWFzZSBzdWJtaXQgYSByZXBvcnQgdG8gdXMgYmVmb3JlIGVuZ2FnaW5nIGluIGNvbmR1Y3QgdGhhdCBtYXkgYmUgaW5jb25zaXN0ZW50CndpdGggb3IgdW5hZGRyZXNzZWQgYnkgdGhpcyBwb2xpY3kuCgojIyBQcmVmZXJlbmNlcwoKPCEtLQogICAgVGhlIHByZWZlcmVuY2VzIHNlY3Rpb24gc2V0cyBleHBlY3RhdGlvbnMgYmFzZWQgb24gcHJpb3JpdHkgYW5kIHN1Ym1pc3Npb24KICAgIHZvbHVtZSwgcmF0aGVyIHRoYW4gbGVnYWwgb2JqZWN0aW9uIG9yIHJlc3RyaWN0aW9uIFsyXS4KCiAgICBBY2NvcmRpbmcgdG8gdGhlIE5USUEgWzJdOgoKICAgICAgICBUaGlzIHNlY3Rpb24gaXMgYSBsaXZpbmcgZG9jdW1lbnQgdGhhdCBzZXRzIGV4cGVjdGF0aW9ucyBmb3IgcHJlZmVyZW5jZXMKICAgICAgICBhbmQgcHJpb3JpdGllcywgdHlwaWNhbGx5IG1haW50YWluZWQgYnkgdGhlIHN1cHBvcnQgYW5kIGVuZ2luZWVyaW5nCiAgICAgICAgdGVhbS4gVGhpcyBjYW4gb3V0bGluZSBjbGFzc2VzIG9mIHZ1bG5lcmFiaWxpdGllcywgcmVwb3J0aW5nIHN0eWxlCiAgICAgICAgKGNyYXNoIGR1bXBzLCBDVlNTIHNjb3JpbmcsIHByb29mLW9mLWNvbmNlcHQsIGV0Yy4pLCB0b29scywgZXRjLiBUb28KICAgICAgICBtYW55IHByZWZlcmVuY2VzIGNhbiBzZXQgdGhlIHdyb25nIHRvbmUgb3IgbWFrZSByZXBvcnRpbmcgZmluZGluZ3MKICAgICAgICBkaWZmaWN1bHQgdG8gbmF2aWdhdGUuIFRoaXMgc2VjdGlvbiBhbHNvIHNldHMgZXhwZWN0YXRpb25zIHRvIHRoZQogICAgICAgIHJlc2VhcmNoZXIgY29tbXVuaXR5IGZvciB3aGF0IHR5cGVzIG9mIGlzc3VlcyBhcmUgY29uc2lkZXJlZCBpbXBvcnRhbnQKICAgICAgICBvciBub3QuCi0tPgoKKiBQbGVhc2UgcHJvdmlkZSBkZXRhaWxlZCByZXBvcnRzIHdpdGggcmVwcm9kdWNpYmxlIHN0ZXBzIGFuZCBhIGNsZWFybHkgZGVmaW5lZAogIGltcGFjdC4KKiBJbmNsdWRlIHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgdnVsbmVyYWJsZSBwYWNrYWdlIGluIHlvdXIgcmVwb3J0CiogU29jaWFsIGVuZ2luZWVyaW5nIChlLmcuIHBoaXNoaW5nLCB2aXNoaW5nLCBzbWlzaGluZykgaXMgcHJvaGliaXRlZC4KCjwhLS0KICAgIFJlZmVyZW5jZXMKCiAgICBbMV0gSGFja2VyT25lLiBQb2xpY3kgYnVpbGRlci4gUmV0cmlldmVkIGZyb20gaHR0cHM6Ly9oYWNrZXJvbmUuY29tL3BvbGljeS1idWlsZGVyLwoKICAgIFsyXSBOVElBIFNhZmV0eSBXb3JraW5nIEdyb3VwLiAyMDE2LiAiRWFybHkgc3RhZ2UiIGNvb3JkaW5hdGVkIHZ1bG5lcmFiaWxpdHkKICAgIGRpc2Nsb3N1cmUgdGVtcGxhdGU6IFZlcnNpb24gMS4xLiAoMTUgRGVjZW1iZXIgMjAxNikuIFJldHJpZXZlZCBmcm9tCiAgICBodHRwczovL3d3dy5udGlhLmRvYy5nb3YvZmlsZXMvbnRpYS9wdWJsaWNhdGlvbnMvbnRpYV92dWxuX2Rpc2Nsb3N1cmVfZWFybHlfc3RhZ2VfdGVtcGxhdGUucGRmCi0tPgoKIyMgRW5jcnlwdGlvbiBLZXkgZm9yIHNlY3VyaXR5QHJhbXNleS5kZXYKCkZvciBpbmNyZWFzZWQgcHJpdmFjeSB3aGVuIHJlcG9ydGluZyBzZW5zaXRpdmUgaXNzdWVzLCB5b3UgbWF5IGVuY3J5cHQgeW91cgptZXNzYWdlIHVzaW5nIHRoZSBmb2xsb3dpbmcgcHVibGljIGtleToKCmBgYAotLS0tLUJFR0lOIFBHUCBQVUJMSUMgS0VZIEJMT0NLLS0tLS0KCm1RSU5CRitaOWdFQkVBQ2JUL3BJeDhSUjBLMTh0OFoyckRubUVWNDRZZFQ3SE5zTWRxK0Q2U0FseDhVVWI2QVUKakdJYlY5ZGdCZ0dOdE9MVTFweGxvYUp3TDliV0lSYmorWC9RYjJXTklQLy9WejFZNDBveDFkU3BmQ1VyaXpYeAprYjRwNThYbWwwUHNCOGRnM2I0UkRVZ0t3R0MzN25lNXhtRG5pZ3lKUGJpQjJYSjZYYzQ2b1BDamg4NlhST1RLCndFQkIybFk2N0NsQmxTbHZDMlY5S21iVGJvUlFrTGRRRGhPYVVvc01iOTl6UmIwRVdxRExhRmtaVmpZNUhJN2kKMHBUdmVFNmRJMTJOZkhoVHdLalo1cFVpQVpRR2xLQTZKMWRNalkydW54SFprUWo1TWxNZnJMU3lKSFp4Y2NkSgp4RDk0VDZPVGNUSHQvWG1NcEkyQU9icGV3WkRkQ2hEUW1jWURaWEdmQWhGb0ptYnZYc21MTUdYS2d6S29aL2xzClJtTHNRaGg3Ky9yOEUrUG41citBNkhoNHVBYzE0QXB5RVAwY2tLZUlYdzFDNnBlcEhNNEU4VEVYVnIvSUE2Sy8KejZqbEhPUml4SUZYN2lOT25mSGgrcXdPZ1p3NDBENkpuQmZFempGaStUMkN5K0p6TjJ1eTdJOFVuZWNUTUdvMwo1dDZhc3RQeTZ4Y0g2a1pZekZUVjdYRVJSNkxJSVZ5TEFpTUZkOGtGNU1iSjhONUVsUkZzRkhQVys4Mk4ySERYCmM2MGlTYVRCODVrNlI2eGQ4SklLRGlhS0U0c1N1dzJ3SEZDS3EzM2QvR2FtWWV6cDF3TytiVlVRZzg4ZWZsakMKMkpORnlEK3ZsMzBqb3NxaHcxSGNtYkUxVFAzRGxZZUlMNWpRT2x4Q01zZ2FpNkp0VGZIRk0vNU1Zd0FSQVFBQgp0Qk56WldOMWNtbDBlVUJ5WVcxelpYa3VaR1YyaVFKVUJCTUJDQUErRmlFRTRkclBEKy9vZlo1NzBmQVlxMGJ2CnZYUUN5d0lGQWwrWjlnRUNHd01GQ1FlR0g0QUZDd2tJQndJR0ZRb0pDQXNDQkJZQ0F3RUNIZ0VDRjRBQUNna1EKcTBidnZYUUN5d0lrRUEvL1Fjd3Y4TXRUQ3kwMUxIWmQ5YzdWc2x3aE5kWFFEWXltY1R5amNZdzh4N08yMm00QgozaFhFNnZxQXBsRmhWeHhrcVhCMmVmMHRRdXp4aFBITkpna0NFNFdxNGkrVjZxR3BhU1ZIUVQyVzZETi9OSWhMCnZTOE9kU2NjNnpkZG1JYklrU3J6VlZBdGp3ZWhGTkVJclgzRG5iYmJLK0lrdTd2c0tUNUVjbE9sdUlzamxZb1gKZ29XOEllUmV5REJxT2UySDNob0NHdzZFQTBEL05ZVjJiSm5meTUzclhWSXlhcnNYWGVPTHA3ZU5FSDZUZDdhVwpQVlNyTVpKZTF0K2tuckVHbkVkclhXemxnNGxDSkpDdGVtR3YrcEtCVW9tbnlJU1hTZHF5b1JDQ3p2UWpxeWlnCjJrUmViVVg4QlhQVzMzcDRPWFBqOXNJYm9VT2pad29ybVd3cXFiRk1PK0o0VGlWQ1VvRW9oZUk3ZW1QRlJjTk4KUXRQSnJqYlkxKytPem5CYzBHUnBmZVVrR29VMWNiUmwxYm5lcG5GSVpNVERMa3JWVzZJMVk0cThaVndYM0JrRQpOODFjdEZyUnBIQmxVMzZFZEh2alBRbUd0dWlMNzdRcTNmV21Ndjd5VHZLMXdISkFYZkViMFpKV0haQ2JjazN3CmwwQ1ZxMForVVVBT004UnAxTjBOOG05Mnh0YXBhdjBxQ0ZVOXF6ZjJKNXFYNkdSbVd2K2QyOXdQZ0ZIekRXQm0Kbm5yWVlJQTR3Skx4MDBVNlNNY1ZCU25OZTkxQitSZkdZNVhRaGJXUGpRUWVjT0dDU0RzeGFGQXEyTWVPVkp5WgpiSWpMWWZHOUd4b0xLcjVSN29MUkp2Wkk0bktLQmMxS2NpL2NyWmJkaVNkUWhTUUdsRHo4OEYxT0hlQ0lkUVFRCkVRZ0FIUlloQk9oZEF4SGQrbHVzODZZUTU3QXRsNWljakFjYkJRSmZtZmRJQUFvSkVMQXRsNWljakFjYkZWY0EKLzFMcUIzWmpzblhEQXZ2QVhaVmpTUHFvZlNscE1MZVJRUDZJTS9BOU9kcTBBUUNacnRaYzFrbk9NR0VjanBwSwpSaytzeS9SME1zaHk4VER1YVpJUmdoMlV4N2tDRFFSZm1mWUJBUkFBbWNoS3p6Vno3SWFFcTdQblpEYjNzelFzClQvK0U5RjNtMzl5T3BWNGZFQjFZek9ib25GYWtYTlQ3R3cydFpFeDBlaXRVTXFRLzEzampmdTNVZHpsS2wyYlIKcUE4THJTUVJoQitQVEM5QTFYdnd4Q1VZaGhqR2lMeko5Q1pMNmhCUUI0M3FIT21FOVhKUG1lOTBnZUxzRitnSwp1MzlXYWoxU05XendHZytHeTFHbDVmMkFKb0RUeHpucmVDdUZHaitWZmFjenQvaGxmZ3FwT2RiOWpzbWRvRTd0CjNEU1dwcEE5ZFJIV3dRU2dFNkoyOHJSNFF5U0JjcXlYUzZJTXlrcWFKbjdaMjZ5TklhSVRMbkhDWk9TWTh6aFAKaGE3R0ZzTjU0OUVPQ2dFQ2JyblB0OWRtSTIraFFFMFJPMGU3U09CTnNJZjVzei9pN3VyaHd1ajBDYk9xaGpjMgpYMUFFVk5GQ1ZjYjZIUGkvQVdlZmRGQ1J1MGdhV1F4bjVnKzlua3E1c2xFZ3Z6Q0NpS1l6YUJJY3I4cVI2SGI0CkZhT1BWUHhPOHZuZFJvdXE1N1dzOFhwQXdiUHR0aW9GdUNxRjR1OUsrdEsvOGUyL1I4UWdSWUpzRTNDei9GdTgKK3BaRnBNbnFiREViSzNETDNzcysxZWQxc2t5K21EVjhxWFhlSTMzWFc1aE1GbmsxSldzaFVqSE5sUW1FNmZ0QwpVMHhTVE1WVXR3Smh6SDJ6RHA4bEVkdTdxaTNFc05VTE9sNjhvekRyNnNvV0F2Q2JIUGVUZFRPbkZ5U0dDbGVHCi8zVG9uc29aSnMvc1NQUEpueEZRMUR0Z1FMNkViaEl3YTBad1U0ZUtZVkhaOXRqeHVNWDN0ZUZ6UnZPckpqZ3MKK3l3R2xzSVVSdEVja1Q1WTZuTUFFUUVBQVlrQ1BBUVlBUWdBSmhZaEJPSGF6dy92NkgyZWU5SHdHS3RHNzcxMApBc3NDQlFKZm1mWUJBaHNNQlFrSGhoK0FBQW9KRUt0Rzc3MTBBc3NDOE5jUC9pREFjeTFhWkZ2a0EwRWJaODVwCmk3Lyt5d3RFLzF3RjRVNC85T3VMY29za3FHR25sMXBKTlBvb01PU0JDZnJlb1RCOEhpbVQwRmxuMENvYU9tNFEKcFNjTnEzOUpYbWY0VnhhdXFVSlZBUkJ5UDZ6VWZnWWFycW9hWk5ldUZGMFM0QVpKMkhoR3phUVBqRHoxdUtWTQpQRTZ0UVNnUWtGemRaOUF0UkE0dkVsVEg2eVJBZ21lcFVzT2loazBiMGdVdFZud3RSWVo4ZTBRdDNpZTk3YTczCkR4TGdBZ2VkRlJVYkxSWWlUMHZOYVliYWluQnNMV0twTi9UOG9kd0lnL3NtUDBLaGpwL2NrVjYwY1pUZEJpUFIKc3pCVFBKRVNNVVR1MFZQbnRjNGdXd0dzbWhaSmcvVHQvcVAwOFhZbzNWeE5ZQmVneXVXd05SNjZ6RFd2d3ZHSAptdU12NVVjaHVEeHA2UnQzSmtJTzR2b01UMUpTald5OXA4a3JrUEVFNFY2UHhBYWdMamRaU2t0OTJ3VkxpSzV4Cnk1Z05ydFBoVTQ1WWRSQUtIcjM2T3ZKQkpRNDJDRGFaNm56cnpnaGNJcDlDWjdBTkhySStRTFJNL2NzeitBR0EKc3pTcDZTNG1jMWxueHhmYk9oUFBwZWJaUG4wbklBWG9abm5vVktkcnhCVmVkUFFIVDU5WkZ2S1RROUZzN2dkMwpzWU51Yzd0SkdGR0MyQ3hCSDRBTkRwT1FrYzVxOUpKMUhTR3JYVTNqdXhJaVJnZkEyNlEyMlM5YzcxZFhqRWx3ClJpNTg0UUgrYkw2a2tZbW04eHBLRjZUVndod3U1eHgvakJQcmJXcUZydGJ2TE5ybmZQb2FwVGloQmZkSWhrVDYKbm1nYXdiQkhBMDJENXhFcUI1U1UzV0p1Cj1lSk54Ci0tLS0tRU5EIFBHUCBQVUJMSUMgS0VZIEJMT0NLLS0tLS0KYGBgCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/AbstractArray.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uOwoKdXNlIEFycmF5SXRlcmF0b3I7CnVzZSBUcmF2ZXJzYWJsZTsKCnVzZSBmdW5jdGlvbiBjb3VudDsKdXNlIGZ1bmN0aW9uIHNlcmlhbGl6ZTsKdXNlIGZ1bmN0aW9uIHVuc2VyaWFsaXplOwoKLyoqCiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBiYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiBgQXJyYXlJbnRlcmZhY2VgLCB0byBtaW5pbWl6ZQogKiB0aGUgZWZmb3J0IHJlcXVpcmVkIHRvIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS4KICoKICogQHRlbXBsYXRlIFQKICogQGltcGxlbWVudHMgQXJyYXlJbnRlcmZhY2U8VD4KICovCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0QXJyYXkgaW1wbGVtZW50cyBBcnJheUludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFRoZSBpdGVtcyBvZiB0aGlzIGFycmF5LgogICAgICoKICAgICAqIEB2YXIgYXJyYXk8YXJyYXkta2V5LCBUPgogICAgICovCiAgICBwcm90ZWN0ZWQgYXJyYXkgJGRhdGEgPSBbXTsKCiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgYSBuZXcgYXJyYXkgb2JqZWN0LgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheTxhcnJheS1rZXksIFQ+ICRkYXRhIFRoZSBpbml0aWFsIGl0ZW1zIHRvIGFkZCB0byB0aGlzIGFycmF5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJGRhdGEgPSBbXSkKICAgIHsKICAgICAgICAvLyBJbnZva2Ugb2Zmc2V0U2V0KCkgZm9yIGVhY2ggdmFsdWUgYWRkZWQ7IGluIHRoaXMgd2F5LCBzdWItY2xhc3NlcwogICAgICAgIC8vIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgYWJvdXQgdmFsdWVzIGFkZGVkIHRvIHRoZSBhcnJheSBvYmplY3QuCiAgICAgICAgZm9yZWFjaCAoJGRhdGEgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgJHRoaXNbJGtleV0gPSAkdmFsdWU7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBpdGVyYXRvciBmb3IgdGhpcyBhcnJheS4KICAgICAqCiAgICAgKiBAbGluayBodHRwOi8vcGhwLm5ldC9tYW51YWwvZW4vaXRlcmF0b3JhZ2dyZWdhdGUuZ2V0aXRlcmF0b3IucGhwIEl0ZXJhdG9yQWdncmVnYXRlOjpnZXRJdGVyYXRvcigpCiAgICAgKgogICAgICogQHJldHVybiBUcmF2ZXJzYWJsZTxhcnJheS1rZXksIFQ+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJdGVyYXRvcigpOiBUcmF2ZXJzYWJsZQogICAgewogICAgICAgIHJldHVybiBuZXcgQXJyYXlJdGVyYXRvcigkdGhpcy0+ZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZ2l2ZW4gb2Zmc2V0IGV4aXN0cyBpbiB0aGlzIGFycmF5LgogICAgICoKICAgICAqIEBsaW5rIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9hcnJheWFjY2Vzcy5vZmZzZXRleGlzdHMucGhwIEFycmF5QWNjZXNzOjpvZmZzZXRFeGlzdHMoKQogICAgICoKICAgICAqIEBwYXJhbSBhcnJheS1rZXkgJG9mZnNldCBUaGUgb2Zmc2V0IHRvIGNoZWNrLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0RXhpc3RzKCRvZmZzZXQpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIGlzc2V0KCR0aGlzLT5kYXRhWyRvZmZzZXRdKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHZhbHVlIGF0IHRoZSBzcGVjaWZpZWQgb2Zmc2V0LgogICAgICoKICAgICAqIEBsaW5rIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9hcnJheWFjY2Vzcy5vZmZzZXRnZXQucGhwIEFycmF5QWNjZXNzOjpvZmZzZXRHZXQoKQogICAgICoKICAgICAqIEBwYXJhbSBhcnJheS1rZXkgJG9mZnNldCBUaGUgb2Zmc2V0IGZvciB3aGljaCBhIHZhbHVlIHNob3VsZCBiZSByZXR1cm5lZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIFR8bnVsbCB0aGUgdmFsdWUgc3RvcmVkIGF0IHRoZSBvZmZzZXQsIG9yIG51bGwgaWYgdGhlIG9mZnNldAogICAgICogICAgIGRvZXMgbm90IGV4aXN0LgogICAgICovCiAgICAjW1xSZXR1cm5UeXBlV2lsbENoYW5nZV0gLy8gcGhwY3M6aWdub3JlCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0R2V0KCRvZmZzZXQpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhWyRvZmZzZXRdID8/IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgZ2l2ZW4gb2Zmc2V0IGluIHRoZSBhcnJheS4KICAgICAqCiAgICAgKiBAbGluayBodHRwOi8vcGhwLm5ldC9tYW51YWwvZW4vYXJyYXlhY2Nlc3Mub2Zmc2V0c2V0LnBocCBBcnJheUFjY2Vzczo6b2Zmc2V0U2V0KCkKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkta2V5fG51bGwgJG9mZnNldCBUaGUgb2Zmc2V0IHRvIHNldC4gSWYgYG51bGxgLCB0aGUgdmFsdWUgbWF5IGJlCiAgICAgKiAgICAgc2V0IGF0IGEgbnVtZXJpY2FsbHktaW5kZXhlZCBvZmZzZXQuCiAgICAgKiBAcGFyYW0gVCAkdmFsdWUgVGhlIHZhbHVlIHRvIHNldCBhdCB0aGUgZ2l2ZW4gb2Zmc2V0LgogICAgICovCiAgICAvLyBwaHBjczppZ25vcmUgU2xldm9tYXRDb2RpbmdTdGFuZGFyZC5UeXBlSGludHMuUGFyYW1ldGVyVHlwZUhpbnQuTWlzc2luZ05hdGl2ZVR5cGVIaW50CiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0U2V0KCRvZmZzZXQsICR2YWx1ZSk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoJG9mZnNldCA9PT0gbnVsbCkgewogICAgICAgICAgICAkdGhpcy0+ZGF0YVtdID0gJHZhbHVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5kYXRhWyRvZmZzZXRdID0gJHZhbHVlOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJlbW92ZXMgdGhlIGdpdmVuIG9mZnNldCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGFycmF5LgogICAgICoKICAgICAqIEBsaW5rIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9hcnJheWFjY2Vzcy5vZmZzZXR1bnNldC5waHAgQXJyYXlBY2Nlc3M6Om9mZnNldFVuc2V0KCkKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkta2V5ICRvZmZzZXQgVGhlIG9mZnNldCB0byByZW1vdmUgZnJvbSB0aGUgYXJyYXkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRVbnNldCgkb2Zmc2V0KTogdm9pZAogICAgewogICAgICAgIHVuc2V0KCR0aGlzLT5kYXRhWyRvZmZzZXRdKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBzZXJpYWxpemVkIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGFycmF5IG9iamVjdC4KICAgICAqCiAgICAgKiBAZGVwcmVjYXRlZCBUaGUgU2VyaWFsaXphYmxlIGludGVyZmFjZSB3aWxsIGdvIGF3YXkgaW4gUEhQIDkuCiAgICAgKgogICAgICogQGxpbmsgaHR0cDovL3BocC5uZXQvbWFudWFsL2VuL3NlcmlhbGl6YWJsZS5zZXJpYWxpemUucGhwIFNlcmlhbGl6YWJsZTo6c2VyaWFsaXplKCkKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBhIFBIUCBzZXJpYWxpemVkIHN0cmluZy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlcmlhbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gc2VyaWFsaXplKCR0aGlzLT5kYXRhKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgZGF0YSBzdWl0YWJsZSBmb3IgUEhQIHNlcmlhbGl6YXRpb24uCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2Uub29wNS5tYWdpYy5waHAjbGFuZ3VhZ2Uub29wNS5tYWdpYy5zZXJpYWxpemUKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvc2VyaWFsaXplCiAgICAgKgogICAgICogQHJldHVybiBhcnJheTxhcnJheS1rZXksIFQ+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3NlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnZlcnRzIGEgc2VyaWFsaXplZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gaW50byBhbiBpbnN0YW5jZSBvYmplY3QuCiAgICAgKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIFNlcmlhbGl6YWJsZSBpbnRlcmZhY2Ugd2lsbCBnbyBhd2F5IGluIFBIUCA5LgogICAgICoKICAgICAqIEBsaW5rIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9zZXJpYWxpemFibGUudW5zZXJpYWxpemUucGhwIFNlcmlhbGl6YWJsZTo6dW5zZXJpYWxpemUoKQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlcmlhbGl6ZWQgQSBQSFAgc2VyaWFsaXplZCBzdHJpbmcgdG8gdW5zZXJpYWxpemUuCiAgICAgKgogICAgICogQHBocGNzU3VwcHJlc3MgU2xldm9tYXRDb2RpbmdTdGFuZGFyZC5UeXBlSGludHMuUGFyYW1ldGVyVHlwZUhpbnQuTWlzc2luZ05hdGl2ZVR5cGVIaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bnNlcmlhbGl6ZSgkc2VyaWFsaXplZCk6IHZvaWQKICAgIHsKICAgICAgICAvKiogQHZhciBhcnJheTxhcnJheS1rZXksIFQ+ICRkYXRhICovCiAgICAgICAgJGRhdGEgPSB1bnNlcmlhbGl6ZSgkc2VyaWFsaXplZCwgWydhbGxvd2VkX2NsYXNzZXMnID0+IGZhbHNlXSk7CgogICAgICAgICR0aGlzLT5kYXRhID0gJGRhdGE7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGRzIHVuc2VyaWFsaXplZCBkYXRhIHRvIHRoZSBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5PGFycmF5LWtleSwgVD4gJGRhdGEKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdW5zZXJpYWxpemUoYXJyYXkgJGRhdGEpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmRhdGEgPSAkZGF0YTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGlzIGFycmF5LgogICAgICoKICAgICAqIEBsaW5rIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9jb3VudGFibGUuY291bnQucGhwIENvdW50YWJsZTo6Y291bnQoKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIGNvdW50KCR0aGlzLT5kYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xlYXIoKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5kYXRhID0gW107CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9BcnJheSgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNFbXB0eSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIGNvdW50KCR0aGlzLT5kYXRhKSA9PT0gMDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/AbstractCollection.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uOwoKdXNlIENsb3N1cmU7CnVzZSBSYW1zZXlcQ29sbGVjdGlvblxFeGNlcHRpb25cQ29sbGVjdGlvbk1pc21hdGNoRXhjZXB0aW9uOwp1c2UgUmFtc2V5XENvbGxlY3Rpb25cRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFJhbXNleVxDb2xsZWN0aW9uXEV4Y2VwdGlvblxJbnZhbGlkU29ydE9yZGVyRXhjZXB0aW9uOwp1c2UgUmFtc2V5XENvbGxlY3Rpb25cRXhjZXB0aW9uXE91dE9mQm91bmRzRXhjZXB0aW9uOwp1c2UgUmFtc2V5XENvbGxlY3Rpb25cVG9vbFxUeXBlVHJhaXQ7CnVzZSBSYW1zZXlcQ29sbGVjdGlvblxUb29sXFZhbHVlRXh0cmFjdG9yVHJhaXQ7CnVzZSBSYW1zZXlcQ29sbGVjdGlvblxUb29sXFZhbHVlVG9TdHJpbmdUcmFpdDsKCnVzZSBmdW5jdGlvbiBhcnJheV9maWx0ZXI7CnVzZSBmdW5jdGlvbiBhcnJheV9tYXA7CnVzZSBmdW5jdGlvbiBhcnJheV9tZXJnZTsKdXNlIGZ1bmN0aW9uIGFycmF5X3NlYXJjaDsKdXNlIGZ1bmN0aW9uIGFycmF5X3VkaWZmOwp1c2UgZnVuY3Rpb24gYXJyYXlfdWludGVyc2VjdDsKdXNlIGZ1bmN0aW9uIGN1cnJlbnQ7CnVzZSBmdW5jdGlvbiBlbmQ7CnVzZSBmdW5jdGlvbiBpbl9hcnJheTsKdXNlIGZ1bmN0aW9uIGlzX2ludDsKdXNlIGZ1bmN0aW9uIGlzX29iamVjdDsKdXNlIGZ1bmN0aW9uIHJlc2V0Owp1c2UgZnVuY3Rpb24gc3BsX29iamVjdF9pZDsKdXNlIGZ1bmN0aW9uIHNwcmludGY7CnVzZSBmdW5jdGlvbiB1bnNlcmlhbGl6ZTsKdXNlIGZ1bmN0aW9uIHVzb3J0OwoKLyoqCiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBiYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiBgQ29sbGVjdGlvbkludGVyZmFjZWAsIHRvCiAqIG1pbmltaXplIHRoZSBlZmZvcnQgcmVxdWlyZWQgdG8gaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlCiAqCiAqIEB0ZW1wbGF0ZSBUCiAqIEBleHRlbmRzIEFic3RyYWN0QXJyYXk8VD4KICogQGltcGxlbWVudHMgQ29sbGVjdGlvbkludGVyZmFjZTxUPgogKi8KYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RDb2xsZWN0aW9uIGV4dGVuZHMgQWJzdHJhY3RBcnJheSBpbXBsZW1lbnRzIENvbGxlY3Rpb25JbnRlcmZhY2UKewogICAgdXNlIFR5cGVUcmFpdDsKICAgIHVzZSBWYWx1ZVRvU3RyaW5nVHJhaXQ7CiAgICB1c2UgVmFsdWVFeHRyYWN0b3JUcmFpdDsKCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoJGVsZW1lbnQpOiBib29sCiAgICB7CiAgICAgICAgJHRoaXNbXSA9ICRlbGVtZW50OwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb250YWlucygkZWxlbWVudCwgYm9vbCAkc3RyaWN0ID0gdHJ1ZSk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gaW5fYXJyYXkoJGVsZW1lbnQsICR0aGlzLT5kYXRhLCAkc3RyaWN0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRTZXQoJG9mZnNldCwgJHZhbHVlKTogdm9pZAogICAgewogICAgICAgIGlmICgkdGhpcy0+Y2hlY2tUeXBlKCR0aGlzLT5nZXRUeXBlKCksICR2YWx1ZSkgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnVmFsdWUgbXVzdCBiZSBvZiB0eXBlICcgLiAkdGhpcy0+Z2V0VHlwZSgpIC4gJzsgdmFsdWUgaXMgJwogICAgICAgICAgICAgICAgLiAkdGhpcy0+dG9vbFZhbHVlVG9TdHJpbmcoJHZhbHVlKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICgkb2Zmc2V0ID09PSBudWxsKSB7CiAgICAgICAgICAgICR0aGlzLT5kYXRhW10gPSAkdmFsdWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPmRhdGFbJG9mZnNldF0gPSAkdmFsdWU7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZSgkZWxlbWVudCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoKCRwb3NpdGlvbiA9IGFycmF5X3NlYXJjaCgkZWxlbWVudCwgJHRoaXMtPmRhdGEsIHRydWUpKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgdW5zZXQoJHRoaXNbJHBvc2l0aW9uXSk7CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb2x1bW4oc3RyaW5nICRwcm9wZXJ0eU9yTWV0aG9kKTogYXJyYXkKICAgIHsKICAgICAgICAkdGVtcCA9IFtdOwoKICAgICAgICBmb3JlYWNoICgkdGhpcy0+ZGF0YSBhcyAkaXRlbSkgewogICAgICAgICAgICAvKiogQHZhciBtaXhlZCAkdmFsdWUgKi8KICAgICAgICAgICAgJHZhbHVlID0gJHRoaXMtPmV4dHJhY3RWYWx1ZSgkaXRlbSwgJHByb3BlcnR5T3JNZXRob2QpOwoKICAgICAgICAgICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFzc2lnbm1lbnQgKi8KICAgICAgICAgICAgJHRlbXBbXSA9ICR2YWx1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGVtcDsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaXJzdCgpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IE91dE9mQm91bmRzRXhjZXB0aW9uKCdDYW5cJ3QgZGV0ZXJtaW5lIGZpcnN0IGl0ZW0uIENvbGxlY3Rpb24gaXMgZW1wdHknKTsKICAgICAgICB9CgogICAgICAgIHJlc2V0KCR0aGlzLT5kYXRhKTsKCiAgICAgICAgLyoqIEB2YXIgVCAkZmlyc3QgKi8KICAgICAgICAkZmlyc3QgPSBjdXJyZW50KCR0aGlzLT5kYXRhKTsKCiAgICAgICAgcmV0dXJuICRmaXJzdDsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsYXN0KCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmlzRW1wdHkoKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgT3V0T2ZCb3VuZHNFeGNlcHRpb24oJ0NhblwndCBkZXRlcm1pbmUgbGFzdCBpdGVtLiBDb2xsZWN0aW9uIGlzIGVtcHR5Jyk7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBUICRpdGVtICovCiAgICAgICAgJGl0ZW0gPSBlbmQoJHRoaXMtPmRhdGEpOwogICAgICAgIHJlc2V0KCR0aGlzLT5kYXRhKTsKCiAgICAgICAgcmV0dXJuICRpdGVtOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzb3J0KHN0cmluZyAkcHJvcGVydHlPck1ldGhvZCwgc3RyaW5nICRvcmRlciA9IHNlbGY6OlNPUlRfQVNDKTogQ29sbGVjdGlvbkludGVyZmFjZQogICAgewogICAgICAgIGlmICghaW5fYXJyYXkoJG9yZGVyLCBbc2VsZjo6U09SVF9BU0MsIHNlbGY6OlNPUlRfREVTQ10sIHRydWUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkU29ydE9yZGVyRXhjZXB0aW9uKCdJbnZhbGlkIHNvcnQgb3JkZXIgZ2l2ZW46ICcgLiAkb3JkZXIpOwogICAgICAgIH0KCiAgICAgICAgJGNvbGxlY3Rpb24gPSBjbG9uZSAkdGhpczsKCiAgICAgICAgdXNvcnQoCiAgICAgICAgICAgICRjb2xsZWN0aW9uLT5kYXRhLAogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQHBhcmFtIFQgJGEKICAgICAgICAgICAgICogQHBhcmFtIFQgJGIKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uICgkYSwgJGIpIHVzZSAoJHByb3BlcnR5T3JNZXRob2QsICRvcmRlcik6IGludCB7CiAgICAgICAgICAgICAgICAvKiogQHZhciBtaXhlZCAkYVZhbHVlICovCiAgICAgICAgICAgICAgICAkYVZhbHVlID0gJHRoaXMtPmV4dHJhY3RWYWx1ZSgkYSwgJHByb3BlcnR5T3JNZXRob2QpOwoKICAgICAgICAgICAgICAgIC8qKiBAdmFyIG1peGVkICRiVmFsdWUgKi8KICAgICAgICAgICAgICAgICRiVmFsdWUgPSAkdGhpcy0+ZXh0cmFjdFZhbHVlKCRiLCAkcHJvcGVydHlPck1ldGhvZCk7CgogICAgICAgICAgICAgICAgcmV0dXJuICgkYVZhbHVlIDw9PiAkYlZhbHVlKSAqICgkb3JkZXIgPT09IHNlbGY6OlNPUlRfREVTQyA/IC0xIDogMSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRjb2xsZWN0aW9uOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBmaWx0ZXIoY2FsbGFibGUgJGNhbGxiYWNrKTogQ29sbGVjdGlvbkludGVyZmFjZQogICAgewogICAgICAgICRjb2xsZWN0aW9uID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJGNvbGxlY3Rpb24tPmRhdGEgPSBhcnJheV9tZXJnZShbXSwgYXJyYXlfZmlsdGVyKCRjb2xsZWN0aW9uLT5kYXRhLCAkY2FsbGJhY2spKTsKCiAgICAgICAgcmV0dXJuICRjb2xsZWN0aW9uOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2hlcmUoc3RyaW5nICRwcm9wZXJ0eU9yTWV0aG9kLCAkdmFsdWUpOiBDb2xsZWN0aW9uSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5maWx0ZXIoZnVuY3Rpb24gKCRpdGVtKSB1c2UgKCRwcm9wZXJ0eU9yTWV0aG9kLCAkdmFsdWUpIHsKICAgICAgICAgICAgLyoqIEB2YXIgbWl4ZWQgJGFjY2Vzc29yVmFsdWUgKi8KICAgICAgICAgICAgJGFjY2Vzc29yVmFsdWUgPSAkdGhpcy0+ZXh0cmFjdFZhbHVlKCRpdGVtLCAkcHJvcGVydHlPck1ldGhvZCk7CgogICAgICAgICAgICByZXR1cm4gJGFjY2Vzc29yVmFsdWUgPT09ICR2YWx1ZTsKICAgICAgICB9KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbWFwKGNhbGxhYmxlICRjYWxsYmFjayk6IENvbGxlY3Rpb25JbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gbmV3IENvbGxlY3Rpb24oJ21peGVkJywgYXJyYXlfbWFwKCRjYWxsYmFjaywgJHRoaXMtPmRhdGEpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGlmZihDb2xsZWN0aW9uSW50ZXJmYWNlICRvdGhlcik6IENvbGxlY3Rpb25JbnRlcmZhY2UKICAgIHsKICAgICAgICAkdGhpcy0+Y29tcGFyZUNvbGxlY3Rpb25UeXBlcygkb3RoZXIpOwoKICAgICAgICAkZGlmZkF0b0IgPSBhcnJheV91ZGlmZigkdGhpcy0+ZGF0YSwgJG90aGVyLT50b0FycmF5KCksICR0aGlzLT5nZXRDb21wYXJhdG9yKCkpOwogICAgICAgICRkaWZmQnRvQSA9IGFycmF5X3VkaWZmKCRvdGhlci0+dG9BcnJheSgpLCAkdGhpcy0+ZGF0YSwgJHRoaXMtPmdldENvbXBhcmF0b3IoKSk7CgogICAgICAgIC8qKiBAdmFyIGFycmF5PGFycmF5LWtleSwgVD4gJGRpZmYgKi8KICAgICAgICAkZGlmZiA9IGFycmF5X21lcmdlKCRkaWZmQXRvQiwgJGRpZmZCdG9BKTsKCiAgICAgICAgJGNvbGxlY3Rpb24gPSBjbG9uZSAkdGhpczsKICAgICAgICAkY29sbGVjdGlvbi0+ZGF0YSA9ICRkaWZmOwoKICAgICAgICByZXR1cm4gJGNvbGxlY3Rpb247CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGludGVyc2VjdChDb2xsZWN0aW9uSW50ZXJmYWNlICRvdGhlcik6IENvbGxlY3Rpb25JbnRlcmZhY2UKICAgIHsKICAgICAgICAkdGhpcy0+Y29tcGFyZUNvbGxlY3Rpb25UeXBlcygkb3RoZXIpOwoKICAgICAgICAvKiogQHZhciBhcnJheTxhcnJheS1rZXksIFQ+ICRpbnRlcnNlY3QgKi8KICAgICAgICAkaW50ZXJzZWN0ID0gYXJyYXlfdWludGVyc2VjdCgkdGhpcy0+ZGF0YSwgJG90aGVyLT50b0FycmF5KCksICR0aGlzLT5nZXRDb21wYXJhdG9yKCkpOwoKICAgICAgICAkY29sbGVjdGlvbiA9IGNsb25lICR0aGlzOwogICAgICAgICRjb2xsZWN0aW9uLT5kYXRhID0gJGludGVyc2VjdDsKCiAgICAgICAgcmV0dXJuICRjb2xsZWN0aW9uOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBtZXJnZShDb2xsZWN0aW9uSW50ZXJmYWNlIC4uLiRjb2xsZWN0aW9ucyk6IENvbGxlY3Rpb25JbnRlcmZhY2UKICAgIHsKICAgICAgICAkbWVyZ2VkQ29sbGVjdGlvbiA9IGNsb25lICR0aGlzOwoKICAgICAgICBmb3JlYWNoICgkY29sbGVjdGlvbnMgYXMgJGluZGV4ID0+ICRjb2xsZWN0aW9uKSB7CiAgICAgICAgICAgIGlmICghJGNvbGxlY3Rpb24gaW5zdGFuY2VvZiBzdGF0aWMpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb2xsZWN0aW9uTWlzbWF0Y2hFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgc3ByaW50ZignQ29sbGVjdGlvbiB3aXRoIGluZGV4ICVkIG11c3QgYmUgb2YgdHlwZSAlcycsICRpbmRleCwgc3RhdGljOjpjbGFzcyksCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBXaGVuIHVzaW5nIGdlbmVyaWNzIChDb2xsZWN0aW9uLnBocCwgU2V0LnBocCwgZXRjKSwKICAgICAgICAgICAgLy8gd2UgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbnRlcm5hbCB0eXBlcyBtYXRjaCBlYWNoIG90aGVyCiAgICAgICAgICAgIGlmICgkdGhpcy0+Z2V0VW5pZm9ybVR5cGUoJGNvbGxlY3Rpb24pICE9PSAkdGhpcy0+Z2V0VW5pZm9ybVR5cGUoJHRoaXMpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29sbGVjdGlvbk1pc21hdGNoRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgIHNwcmludGYoCiAgICAgICAgICAgICAgICAgICAgICAgICdDb2xsZWN0aW9uIGl0ZW1zIGluIGNvbGxlY3Rpb24gd2l0aCBpbmRleCAlZCBtdXN0IGJlIG9mIHR5cGUgJXMnLAogICAgICAgICAgICAgICAgICAgICAgICAkaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5nZXRUeXBlKCksCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvcmVhY2ggKCRjb2xsZWN0aW9uIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICAgICBpZiAoaXNfaW50KCRrZXkpKSB7CiAgICAgICAgICAgICAgICAgICAgJG1lcmdlZENvbGxlY3Rpb25bXSA9ICR2YWx1ZTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJG1lcmdlZENvbGxlY3Rpb25bJGtleV0gPSAkdmFsdWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkbWVyZ2VkQ29sbGVjdGlvbjsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bnNlcmlhbGl6ZSgkc2VyaWFsaXplZCk6IHZvaWQKICAgIHsKICAgICAgICAvKiogQHZhciBhcnJheTxhcnJheS1rZXksIFQ+ICRkYXRhICovCiAgICAgICAgJGRhdGEgPSB1bnNlcmlhbGl6ZSgkc2VyaWFsaXplZCwgWydhbGxvd2VkX2NsYXNzZXMnID0+IFskdGhpcy0+Z2V0VHlwZSgpXV0pOwoKICAgICAgICAkdGhpcy0+ZGF0YSA9ICRkYXRhOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIENvbGxlY3Rpb25JbnRlcmZhY2U8VD4gJG90aGVyCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gY29tcGFyZUNvbGxlY3Rpb25UeXBlcyhDb2xsZWN0aW9uSW50ZXJmYWNlICRvdGhlcik6IHZvaWQKICAgIHsKICAgICAgICBpZiAoISRvdGhlciBpbnN0YW5jZW9mIHN0YXRpYykgewogICAgICAgICAgICB0aHJvdyBuZXcgQ29sbGVjdGlvbk1pc21hdGNoRXhjZXB0aW9uKCdDb2xsZWN0aW9uIG11c3QgYmUgb2YgdHlwZSAnIC4gc3RhdGljOjpjbGFzcyk7CiAgICAgICAgfQoKICAgICAgICAvLyBXaGVuIHVzaW5nIGdlbmVyaWNzIChDb2xsZWN0aW9uLnBocCwgU2V0LnBocCwgZXRjKSwKICAgICAgICAvLyB3ZSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGludGVybmFsIHR5cGVzIG1hdGNoIGVhY2ggb3RoZXIKICAgICAgICBpZiAoJHRoaXMtPmdldFVuaWZvcm1UeXBlKCRvdGhlcikgIT09ICR0aGlzLT5nZXRVbmlmb3JtVHlwZSgkdGhpcykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IENvbGxlY3Rpb25NaXNtYXRjaEV4Y2VwdGlvbignQ29sbGVjdGlvbiBpdGVtcyBtdXN0IGJlIG9mIHR5cGUgJyAuICR0aGlzLT5nZXRUeXBlKCkpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldENvbXBhcmF0b3IoKTogQ2xvc3VyZQogICAgewogICAgICAgIHJldHVybiAvKioKICAgICAgICAgICAgICogQHBhcmFtIFQgJGEKICAgICAgICAgICAgICogQHBhcmFtIFQgJGIKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uICgkYSwgJGIpOiBpbnQgewogICAgICAgICAgICAgICAgLy8gSWYgdGhlIHR3byB2YWx1ZXMgYXJlIG9iamVjdCwgd2UgY29udmVydCB0aGVtIHRvIHVuaXF1ZSBzY2FsYXJzLgogICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNvbGxlY3Rpb24gY29udGFpbnMgbWl4ZWQgdmFsdWVzICh1bmxpa2VseSkgd2hlcmUgc29tZSBhcmUgb2JqZWN0cwogICAgICAgICAgICAgICAgLy8gYW5kIHNvbWUgYXJlIG5vdCwgd2UgbGVhdmUgdGhlbSBhcyB0aGV5IGFyZS4KICAgICAgICAgICAgICAgIC8vIFRoZSBjb21wYXJhdG9yIHNob3VsZCBzdGlsbCB3b3JrIGFuZCB0aGUgcmVzdWx0IG9mICRhIDwgJGIgc2hvdWxkCiAgICAgICAgICAgICAgICAvLyBiZSBjb25zaXN0ZW50IGJ1dCB1bnByZWRpY3RhYmxlIHNpbmNlIG5vdCBkb2N1bWVudGVkLgogICAgICAgICAgICAgICAgaWYgKGlzX29iamVjdCgkYSkgJiYgaXNfb2JqZWN0KCRiKSkgewogICAgICAgICAgICAgICAgICAgICRhID0gc3BsX29iamVjdF9pZCgkYSk7CiAgICAgICAgICAgICAgICAgICAgJGIgPSBzcGxfb2JqZWN0X2lkKCRiKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gJGEgPT09ICRiID8gMCA6ICgkYSA8ICRiID8gMSA6IC0xKTsKICAgICAgICAgICAgfTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBDb2xsZWN0aW9uSW50ZXJmYWNlPG1peGVkPiAkY29sbGVjdGlvbgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldFVuaWZvcm1UeXBlKENvbGxlY3Rpb25JbnRlcmZhY2UgJGNvbGxlY3Rpb24pOiBzdHJpbmcKICAgIHsKICAgICAgICBzd2l0Y2ggKCRjb2xsZWN0aW9uLT5nZXRUeXBlKCkpIHsKICAgICAgICAgICAgY2FzZSAnaW50ZWdlcic6CiAgICAgICAgICAgICAgICByZXR1cm4gJ2ludCc7CiAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOgogICAgICAgICAgICAgICAgcmV0dXJuICdib29sJzsKICAgICAgICAgICAgY2FzZSAnZG91YmxlJzoKICAgICAgICAgICAgICAgIHJldHVybiAnZmxvYXQnOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgcmV0dXJuICRjb2xsZWN0aW9uLT5nZXRUeXBlKCk7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/AbstractSet.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uOwoKLyoqCiAqIFRoaXMgY2xhc3MgY29udGFpbnMgdGhlIGJhc2ljIGltcGxlbWVudGF0aW9uIG9mIGEgY29sbGVjdGlvbiB0aGF0IGRvZXMgbm90CiAqIGFsbG93IGR1cGxpY2F0ZWQgdmFsdWVzIChhIHNldCksIHRvIG1pbmltaXplIHRoZSBlZmZvcnQgcmVxdWlyZWQgdG8gaW1wbGVtZW50CiAqIHRoaXMgc3BlY2lmaWMgdHlwZSBvZiBjb2xsZWN0aW9uLgogKgogKiBAdGVtcGxhdGUgVAogKiBAZXh0ZW5kcyBBYnN0cmFjdENvbGxlY3Rpb248VD4KICovCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0U2V0IGV4dGVuZHMgQWJzdHJhY3RDb2xsZWN0aW9uCnsKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZCgkZWxlbWVudCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmNvbnRhaW5zKCRlbGVtZW50KSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcGFyZW50OjphZGQoJGVsZW1lbnQpOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFNldCgkb2Zmc2V0LCAkdmFsdWUpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5jb250YWlucygkdmFsdWUpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHBhcmVudDo6b2Zmc2V0U2V0KCRvZmZzZXQsICR2YWx1ZSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/ArrayInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uOwoKdXNlIEFycmF5QWNjZXNzOwp1c2UgQ291bnRhYmxlOwp1c2UgSXRlcmF0b3JBZ2dyZWdhdGU7CnVzZSBTZXJpYWxpemFibGU7CgovKioKICogYEFycmF5SW50ZXJmYWNlYCBwcm92aWRlcyB0cmF2ZXJzYWJsZSBhcnJheSBmdW5jdGlvbmFsaXR5IHRvIGRhdGEgdHlwZXMuCiAqCiAqIEB0ZW1wbGF0ZSBUCiAqIEBleHRlbmRzIEFycmF5QWNjZXNzPGFycmF5LWtleSwgVD4KICogQGV4dGVuZHMgSXRlcmF0b3JBZ2dyZWdhdGU8YXJyYXkta2V5LCBUPgogKi8KaW50ZXJmYWNlIEFycmF5SW50ZXJmYWNlIGV4dGVuZHMKICAgIEFycmF5QWNjZXNzLAogICAgQ291bnRhYmxlLAogICAgSXRlcmF0b3JBZ2dyZWdhdGUsCiAgICBTZXJpYWxpemFibGUKewogICAgLyoqCiAgICAgKiBSZW1vdmVzIGFsbCBpdGVtcyBmcm9tIHRoaXMgYXJyYXkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhcigpOiB2b2lkOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhIG5hdGl2ZSBQSFAgYXJyYXkgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBhcnJheSBvYmplY3QuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheTxhcnJheS1rZXksIFQ+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b0FycmF5KCk6IGFycmF5OwoKICAgIC8qKgogICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBhcnJheSBpcyBlbXB0eS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzRW1wdHkoKTogYm9vbDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Collection.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uOwoKLyoqCiAqIEEgY29sbGVjdGlvbiByZXByZXNlbnRzIGEgZ3JvdXAgb2Ygb2JqZWN0cy4KICoKICogRWFjaCBvYmplY3QgaW4gdGhlIGNvbGxlY3Rpb24gaXMgb2YgYSBzcGVjaWZpYywgZGVmaW5lZCB0eXBlLgogKgogKiBUaGlzIGlzIGEgZGlyZWN0IGltcGxlbWVudGF0aW9uIG9mIGBDb2xsZWN0aW9uSW50ZXJmYWNlYCwgcHJvdmlkZWQgZm9yCiAqIHRoZSBzYWtlIG9mIGNvbnZlbmllbmNlLgogKgogKiBFeGFtcGxlIHVzYWdlOgogKgogKiBgYGAgcGhwCiAqICRjb2xsZWN0aW9uID0gbmV3IFxSYW1zZXlcQ29sbGVjdGlvblxDb2xsZWN0aW9uKCdNeVxcRm9vJyk7CiAqICRjb2xsZWN0aW9uLT5hZGQobmV3IFxNeVxGb28oKSk7CiAqICRjb2xsZWN0aW9uLT5hZGQobmV3IFxNeVxGb28oKSk7CiAqCiAqIGZvcmVhY2ggKCRjb2xsZWN0aW9uIGFzICRmb28pIHsKICogICAgIC8vIERvIHNvbWV0aGluZyB3aXRoICRmb28KICogfQogKiBgYGAKICoKICogSXQgaXMgcHJlZmVyYWJsZSB0byBzdWJjbGFzcyBgQWJzdHJhY3RDb2xsZWN0aW9uYCB0byBjcmVhdGUgeW91ciBvd24gdHlwZWQKICogY29sbGVjdGlvbnMuIEZvciBleGFtcGxlOgogKgogKiBgYGAgcGhwCiAqIG5hbWVzcGFjZSBNeVxGb287CiAqCiAqIGNsYXNzIEZvb0NvbGxlY3Rpb24gZXh0ZW5kcyBcUmFtc2V5XENvbGxlY3Rpb25cQWJzdHJhY3RDb2xsZWN0aW9uCiAqIHsKICogICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICogICAgIHsKICogICAgICAgICByZXR1cm4gJ015XFxGb28nOwogKiAgICAgfQogKiB9CiAqIGBgYAogKgogKiBBbmQgdGhlbiB1c2UgaXQgc2ltaWxhcmx5IHRvIHRoZSBlYXJsaWVyIGV4YW1wbGU6CiAqCiAqIGBgYCBwaHAKICogJGZvb0NvbGxlY3Rpb24gPSBuZXcgXE15XEZvb1xGb29Db2xsZWN0aW9uKCk7CiAqICRmb29Db2xsZWN0aW9uLT5hZGQobmV3IFxNeVxGb28oKSk7CiAqICRmb29Db2xsZWN0aW9uLT5hZGQobmV3IFxNeVxGb28oKSk7CiAqCiAqIGZvcmVhY2ggKCRmb29Db2xsZWN0aW9uIGFzICRmb28pIHsKICogICAgIC8vIERvIHNvbWV0aGluZyB3aXRoICRmb28KICogfQogKiBgYGAKICoKICogVGhlIGJlbmVmaXQgd2l0aCB0aGlzIGFwcHJvYWNoIGlzIHRoYXQgeW91IG1heSBkbyB0eXBlLWNoZWNraW5nIG9uIHRoZQogKiBjb2xsZWN0aW9uIG9iamVjdDoKICoKICogYGBgIHBocAogKiBpZiAoJGNvbGxlY3Rpb24gaW5zdGFuY2VvZiBcTXlcRm9vXEZvb0NvbGxlY3Rpb24pIHsKICogICAgIC8vIHRoZSBjb2xsZWN0aW9uIGlzIGEgY29sbGVjdGlvbiBvZiBNeVxGb28gb2JqZWN0cwogKiB9CiAqIGBgYAogKgogKiBAdGVtcGxhdGUgVAogKiBAZXh0ZW5kcyBBYnN0cmFjdENvbGxlY3Rpb248VD4KICovCmNsYXNzIENvbGxlY3Rpb24gZXh0ZW5kcyBBYnN0cmFjdENvbGxlY3Rpb24KewogICAgLyoqCiAgICAgKiBUaGUgdHlwZSBvZiBlbGVtZW50cyBzdG9yZWQgaW4gdGhpcyBjb2xsZWN0aW9uLgogICAgICoKICAgICAqIEEgY29sbGVjdGlvbidzIHR5cGUgaXMgaW1tdXRhYmxlIG9uY2UgaXQgaXMgc2V0LiBGb3IgdGhpcyByZWFzb24sIHRoaXMKICAgICAqIHByb3BlcnR5IGlzIHNldCBwcml2YXRlLgogICAgICovCiAgICBwcml2YXRlIHN0cmluZyAkY29sbGVjdGlvblR5cGU7CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIGEgY29sbGVjdGlvbiBvYmplY3Qgb2YgdGhlIHNwZWNpZmllZCB0eXBlLCBvcHRpb25hbGx5IHdpdGggdGhlCiAgICAgKiBzcGVjaWZpZWQgZGF0YS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb2xsZWN0aW9uVHlwZSBUaGUgdHlwZSAoRlFDTikgYXNzb2NpYXRlZCB3aXRoIHRoaXMKICAgICAqICAgICBjb2xsZWN0aW9uLgogICAgICogQHBhcmFtIGFycmF5PGFycmF5LWtleSwgVD4gJGRhdGEgVGhlIGluaXRpYWwgaXRlbXMgdG8gc3RvcmUgaW4gdGhlIGNvbGxlY3Rpb24uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJGNvbGxlY3Rpb25UeXBlLCBhcnJheSAkZGF0YSA9IFtdKQogICAgewogICAgICAgICR0aGlzLT5jb2xsZWN0aW9uVHlwZSA9ICRjb2xsZWN0aW9uVHlwZTsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRkYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNvbGxlY3Rpb25UeXBlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/CollectionInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uOwoKLyoqCiAqIEEgY29sbGVjdGlvbiByZXByZXNlbnRzIGEgZ3JvdXAgb2Ygb2JqZWN0cywga25vd24gYXMgaXRzIGVsZW1lbnRzLgogKgogKiBTb21lIGNvbGxlY3Rpb25zIGFsbG93IGR1cGxpY2F0ZSBlbGVtZW50cyBhbmQgb3RoZXJzIGRvIG5vdC4gU29tZSBhcmUgb3JkZXJlZAogKiBhbmQgb3RoZXJzIHVub3JkZXJlZC4KICoKICogQHRlbXBsYXRlIFQKICogQGV4dGVuZHMgQXJyYXlJbnRlcmZhY2U8VD4KICovCmludGVyZmFjZSBDb2xsZWN0aW9uSW50ZXJmYWNlIGV4dGVuZHMgQXJyYXlJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBBc2NlbmRpbmcgc29ydCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgU09SVF9BU0MgPSAnYXNjJzsKCiAgICAvKioKICAgICAqIERlc2NlbmRpbmcgc29ydCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgU09SVF9ERVNDID0gJ2Rlc2MnOwoKICAgIC8qKgogICAgICogRW5zdXJlcyB0aGF0IHRoaXMgY29sbGVjdGlvbiBjb250YWlucyB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgKG9wdGlvbmFsCiAgICAgKiBvcGVyYXRpb24pLgogICAgICoKICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRoaXMgY29sbGVjdGlvbiBjaGFuZ2VkIGFzIGEgcmVzdWx0IG9mIHRoZSBjYWxsLgogICAgICogKFJldHVybnMgYGZhbHNlYCBpZiB0aGlzIGNvbGxlY3Rpb24gZG9lcyBub3QgcGVybWl0IGR1cGxpY2F0ZXMgYW5kCiAgICAgKiBhbHJlYWR5IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgZWxlbWVudC4pCiAgICAgKgogICAgICogQ29sbGVjdGlvbnMgdGhhdCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uIG1heSBwbGFjZSBsaW1pdGF0aW9ucyBvbiB3aGF0CiAgICAgKiBlbGVtZW50cyBtYXkgYmUgYWRkZWQgdG8gdGhpcyBjb2xsZWN0aW9uLiBJbiBwYXJ0aWN1bGFyLCBzb21lCiAgICAgKiBjb2xsZWN0aW9ucyB3aWxsIHJlZnVzZSB0byBhZGQgYG51bGxgIGVsZW1lbnRzLCBhbmQgb3RoZXJzIHdpbGwgaW1wb3NlCiAgICAgKiByZXN0cmljdGlvbnMgb24gdGhlIHR5cGUgb2YgZWxlbWVudHMgdGhhdCBtYXkgYmUgYWRkZWQuIENvbGxlY3Rpb24KICAgICAqIGNsYXNzZXMgc2hvdWxkIGNsZWFybHkgc3BlY2lmeSBpbiB0aGVpciBkb2N1bWVudGF0aW9uIGFueSByZXN0cmljdGlvbnMKICAgICAqIG9uIHdoYXQgZWxlbWVudHMgbWF5IGJlIGFkZGVkLgogICAgICoKICAgICAqIElmIGEgY29sbGVjdGlvbiByZWZ1c2VzIHRvIGFkZCBhIHBhcnRpY3VsYXIgZWxlbWVudCBmb3IgYW55IHJlYXNvbiBvdGhlcgogICAgICogdGhhbiB0aGF0IGl0IGFscmVhZHkgY29udGFpbnMgdGhlIGVsZW1lbnQsIGl0IG11c3QgdGhyb3cgYW4gZXhjZXB0aW9uCiAgICAgKiAocmF0aGVyIHRoYW4gcmV0dXJuaW5nIGBmYWxzZWApLiBUaGlzIHByZXNlcnZlcyB0aGUgaW52YXJpYW50IHRoYXQgYQogICAgICogY29sbGVjdGlvbiBhbHdheXMgY29udGFpbnMgdGhlIHNwZWNpZmllZCBlbGVtZW50IGFmdGVyIHRoaXMgY2FsbCByZXR1cm5zLgogICAgICoKICAgICAqIEBwYXJhbSBUICRlbGVtZW50IFRoZSBlbGVtZW50IHRvIGFkZCB0byB0aGUgY29sbGVjdGlvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgYHRydWVgIGlmIHRoaXMgY29sbGVjdGlvbiBjaGFuZ2VkIGFzIGEgcmVzdWx0IG9mIHRoZSBjYWxsLgogICAgICovCiAgICAvLyBwaHBjczppZ25vcmUgU2xldm9tYXRDb2RpbmdTdGFuZGFyZC5UeXBlSGludHMuUGFyYW1ldGVyVHlwZUhpbnQuTWlzc2luZ05hdGl2ZVR5cGVIaW50CiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKCRlbGVtZW50KTogYm9vbDsKCiAgICAvKioKICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRoaXMgY29sbGVjdGlvbiBjb250YWlucyB0aGUgc3BlY2lmaWVkIGVsZW1lbnQuCiAgICAgKgogICAgICogQHBhcmFtIFQgJGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gY2hlY2sgd2hldGhlciB0aGUgY29sbGVjdGlvbiBjb250YWlucy4KICAgICAqIEBwYXJhbSBib29sICRzdHJpY3QgV2hldGhlciB0byBwZXJmb3JtIGEgc3RyaWN0IHR5cGUgY2hlY2sgb24gdGhlIHZhbHVlLgogICAgICovCiAgICAvLyBwaHBjczppZ25vcmUgU2xldm9tYXRDb2RpbmdTdGFuZGFyZC5UeXBlSGludHMuUGFyYW1ldGVyVHlwZUhpbnQuTWlzc2luZ05hdGl2ZVR5cGVIaW50CiAgICBwdWJsaWMgZnVuY3Rpb24gY29udGFpbnMoJGVsZW1lbnQsIGJvb2wgJHN0cmljdCA9IHRydWUpOiBib29sOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdHlwZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb2xsZWN0aW9uLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZW1vdmVzIGEgc2luZ2xlIGluc3RhbmNlIG9mIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBmcm9tIHRoaXMgY29sbGVjdGlvbiwKICAgICAqIGlmIGl0IGlzIHByZXNlbnQuCiAgICAgKgogICAgICogQHBhcmFtIFQgJGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gcmVtb3ZlIGZyb20gdGhlIGNvbGxlY3Rpb24uCiAgICAgKgogICAgICogQHJldHVybiBib29sIGB0cnVlYCBpZiBhbiBlbGVtZW50IHdhcyByZW1vdmVkIGFzIGEgcmVzdWx0IG9mIHRoaXMgY2FsbC4KICAgICAqLwogICAgLy8gcGhwY3M6aWdub3JlIFNsZXZvbWF0Q29kaW5nU3RhbmRhcmQuVHlwZUhpbnRzLlBhcmFtZXRlclR5cGVIaW50Lk1pc3NpbmdOYXRpdmVUeXBlSGludAogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZSgkZWxlbWVudCk6IGJvb2w7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZXMgZnJvbSB0aGUgZ2l2ZW4gcHJvcGVydHkgb3IgbWV0aG9kLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHByb3BlcnR5T3JNZXRob2QgVGhlIHByb3BlcnR5IG9yIG1ldGhvZCBuYW1lIHRvIGZpbHRlciBieS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGxpc3Q8bWl4ZWQ+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb2x1bW4oc3RyaW5nICRwcm9wZXJ0eU9yTWV0aG9kKTogYXJyYXk7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBpdGVtIG9mIHRoZSBjb2xsZWN0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gVAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmlyc3QoKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGxhc3QgaXRlbSBvZiB0aGUgY29sbGVjdGlvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIFQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxhc3QoKTsKCiAgICAvKioKICAgICAqIFNvcnQgdGhlIGNvbGxlY3Rpb24gYnkgYSBwcm9wZXJ0eSBvciBtZXRob2Qgd2l0aCB0aGUgZ2l2ZW4gc29ydCBvcmRlci4KICAgICAqCiAgICAgKiBUaGlzIHdpbGwgYWx3YXlzIGxlYXZlIHRoZSBvcmlnaW5hbCBjb2xsZWN0aW9uIHVudG91Y2hlZCBhbmQgd2lsbCByZXR1cm4KICAgICAqIGEgbmV3IG9uZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwcm9wZXJ0eU9yTWV0aG9kIFRoZSBwcm9wZXJ0eSBvciBtZXRob2QgdG8gc29ydCBieS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG9yZGVyIFRoZSBzb3J0IG9yZGVyIGZvciB0aGUgcmVzdWx0aW5nIGNvbGxlY3Rpb24gKG9uZSBvZgogICAgICogICAgIHRoaXMgaW50ZXJmYWNlJ3MgYFNPUlRfKmAgY29uc3RhbnRzKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIENvbGxlY3Rpb25JbnRlcmZhY2U8VD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNvcnQoc3RyaW5nICRwcm9wZXJ0eU9yTWV0aG9kLCBzdHJpbmcgJG9yZGVyID0gc2VsZjo6U09SVF9BU0MpOiBzZWxmOwoKICAgIC8qKgogICAgICogRmlsdGVyIG91dCBpdGVtcyBvZiB0aGUgY29sbGVjdGlvbiB3aGljaCBkb24ndCBtYXRjaCB0aGUgY3JpdGVyaWEgb2YKICAgICAqIGdpdmVuIGNhbGxiYWNrLgogICAgICoKICAgICAqIFRoaXMgd2lsbCBhbHdheXMgbGVhdmUgdGhlIG9yaWdpbmFsIGNvbGxlY3Rpb24gdW50b3VjaGVkIGFuZCB3aWxsIHJldHVybgogICAgICogYSBuZXcgb25lLgogICAgICoKICAgICAqIFNlZSB0aGUge0BsaW5rIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5hcnJheS1maWx0ZXIucGhwIFBIUCBhcnJheV9maWx0ZXIoKSBkb2N1bWVudGF0aW9ufQogICAgICogZm9yIGV4YW1wbGVzIG9mIGhvdyB0aGUgYCRjYWxsYmFja2AgcGFyYW1ldGVyIHdvcmtzLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZShUKTpib29sICRjYWxsYmFjayBBIGNhbGxhYmxlIHRvIHVzZSBmb3IgZmlsdGVyaW5nIGVsZW1lbnRzLgogICAgICoKICAgICAqIEByZXR1cm4gQ29sbGVjdGlvbkludGVyZmFjZTxUPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmlsdGVyKGNhbGxhYmxlICRjYWxsYmFjayk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgY29sbGVjdGlvbiB3aGVyZSBpdGVtcyBtYXRjaCB0aGUgY3JpdGVyaWEgb2YgZ2l2ZW4gY2FsbGJhY2suCiAgICAgKgogICAgICogVGhpcyB3aWxsIGFsd2F5cyBsZWF2ZSB0aGUgb3JpZ2luYWwgY29sbGVjdGlvbiB1bnRvdWNoZWQgYW5kIHdpbGwgcmV0dXJuCiAgICAgKiBhIG5ldyBvbmUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcHJvcGVydHlPck1ldGhvZCBUaGUgcHJvcGVydHkgb3IgbWV0aG9kIHRvIGV2YWx1YXRlLgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guCiAgICAgKgogICAgICogQHJldHVybiBDb2xsZWN0aW9uSW50ZXJmYWNlPFQ+CiAgICAgKi8KICAgIC8vIHBocGNzOmlnbm9yZSBTbGV2b21hdENvZGluZ1N0YW5kYXJkLlR5cGVIaW50cy5QYXJhbWV0ZXJUeXBlSGludC5NaXNzaW5nTmF0aXZlVHlwZUhpbnQKICAgIHB1YmxpYyBmdW5jdGlvbiB3aGVyZShzdHJpbmcgJHByb3BlcnR5T3JNZXRob2QsICR2YWx1ZSk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBBcHBseSBhIGdpdmVuIGNhbGxiYWNrIG1ldGhvZCBvbiBlYWNoIGl0ZW0gb2YgdGhlIGNvbGxlY3Rpb24uCiAgICAgKgogICAgICogVGhpcyB3aWxsIGFsd2F5cyBsZWF2ZSB0aGUgb3JpZ2luYWwgY29sbGVjdGlvbiB1bnRvdWNoZWQuIFRoZSBuZXcKICAgICAqIGNvbGxlY3Rpb24gaXMgY3JlYXRlZCBieSBtYXBwaW5nIHRoZSBjYWxsYmFjayB0byBlYWNoIGl0ZW0gb2YgdGhlCiAgICAgKiBvcmlnaW5hbCBjb2xsZWN0aW9uLgogICAgICoKICAgICAqIFNlZSB0aGUge0BsaW5rIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5hcnJheS1tYXAucGhwIFBIUCBhcnJheV9tYXAoKSBkb2N1bWVudGF0aW9ufQogICAgICogZm9yIGV4YW1wbGVzIG9mIGhvdyB0aGUgYCRjYWxsYmFja2AgcGFyYW1ldGVyIHdvcmtzLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZShUKTpUQ2FsbGJhY2tSZXR1cm4gJGNhbGxiYWNrIEEgY2FsbGFibGUgdG8gYXBwbHkgdG8gZWFjaAogICAgICogICAgIGl0ZW0gb2YgdGhlIGNvbGxlY3Rpb24uCiAgICAgKgogICAgICogQHJldHVybiBDb2xsZWN0aW9uSW50ZXJmYWNlPFRDYWxsYmFja1JldHVybj4KICAgICAqCiAgICAgKiBAdGVtcGxhdGUgVENhbGxiYWNrUmV0dXJuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtYXAoY2FsbGFibGUgJGNhbGxiYWNrKTogc2VsZjsKCiAgICAvKioKICAgICAqIENyZWF0ZSBhIG5ldyBjb2xsZWN0aW9uIHdpdGggZGl2ZXJnZW50IGl0ZW1zIGJldHdlZW4gY3VycmVudCBhbmQgZ2l2ZW4KICAgICAqIGNvbGxlY3Rpb24uCiAgICAgKgogICAgICogQHBhcmFtIENvbGxlY3Rpb25JbnRlcmZhY2U8VD4gJG90aGVyIFRoZSBjb2xsZWN0aW9uIHRvIGNoZWNrIGZvciBkaXZlcmdlbnQKICAgICAqICAgICBpdGVtcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIENvbGxlY3Rpb25JbnRlcmZhY2U8VD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpZmYoQ29sbGVjdGlvbkludGVyZmFjZSAkb3RoZXIpOiBzZWxmOwoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IGNvbGxlY3Rpb24gd2l0aCBpbnRlcnNlY3RpbmcgaXRlbSBiZXR3ZWVuIGN1cnJlbnQgYW5kIGdpdmVuCiAgICAgKiBjb2xsZWN0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBDb2xsZWN0aW9uSW50ZXJmYWNlPFQ+ICRvdGhlciBUaGUgY29sbGVjdGlvbiB0byBjaGVjayBmb3IKICAgICAqICAgICBpbnRlcnNlY3RpbmcgaXRlbXMuCiAgICAgKgogICAgICogQHJldHVybiBDb2xsZWN0aW9uSW50ZXJmYWNlPFQ+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbnRlcnNlY3QoQ29sbGVjdGlvbkludGVyZmFjZSAkb3RoZXIpOiBzZWxmOwoKICAgIC8qKgogICAgICogTWVyZ2UgY3VycmVudCBpdGVtcyBhbmQgaXRlbXMgb2YgZ2l2ZW4gY29sbGVjdGlvbnMgaW50byBhIG5ldyBvbmUuCiAgICAgKgogICAgICogQHBhcmFtIENvbGxlY3Rpb25JbnRlcmZhY2U8VD4gLi4uJGNvbGxlY3Rpb25zIFRoZSBjb2xsZWN0aW9ucyB0byBtZXJnZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIENvbGxlY3Rpb25JbnRlcmZhY2U8VD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1lcmdlKENvbGxlY3Rpb25JbnRlcmZhY2UgLi4uJGNvbGxlY3Rpb25zKTogc2VsZjsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/DoubleEndedQueue.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uOwoKdXNlIFJhbXNleVxDb2xsZWN0aW9uXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBSYW1zZXlcQ29sbGVjdGlvblxFeGNlcHRpb25cTm9TdWNoRWxlbWVudEV4Y2VwdGlvbjsKCi8qKgogKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgYmFzaWMgaW1wbGVtZW50YXRpb24gb2YgYERvdWJsZUVuZGVkUXVldWVJbnRlcmZhY2VgLCB0bwogKiBtaW5pbWl6ZSB0aGUgZWZmb3J0IHJlcXVpcmVkIHRvIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS4KICoKICogQHRlbXBsYXRlIFQKICogQGV4dGVuZHMgUXVldWU8VD4KICogQGltcGxlbWVudHMgRG91YmxlRW5kZWRRdWV1ZUludGVyZmFjZTxUPgogKi8KY2xhc3MgRG91YmxlRW5kZWRRdWV1ZSBleHRlbmRzIFF1ZXVlIGltcGxlbWVudHMgRG91YmxlRW5kZWRRdWV1ZUludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEluZGV4IG9mIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlIHF1ZXVlLgogICAgICovCiAgICBwcml2YXRlIGludCAkdGFpbCA9IC0xOwoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFNldCgkb2Zmc2V0LCAkdmFsdWUpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5jaGVja1R5cGUoJHRoaXMtPmdldFR5cGUoKSwgJHZhbHVlKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdWYWx1ZSBtdXN0IGJlIG9mIHR5cGUgJyAuICR0aGlzLT5nZXRUeXBlKCkgLiAnOyB2YWx1ZSBpcyAnCiAgICAgICAgICAgICAgICAuICR0aGlzLT50b29sVmFsdWVUb1N0cmluZygkdmFsdWUpLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnRhaWwrKzsKCiAgICAgICAgJHRoaXMtPmRhdGFbJHRoaXMtPnRhaWxdID0gJHZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgJGVsZW1lbnQgaXMgb2YgdGhlIHdyb25nIHR5cGUKICAgICAqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkRmlyc3QoJGVsZW1lbnQpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5jaGVja1R5cGUoJHRoaXMtPmdldFR5cGUoKSwgJGVsZW1lbnQpID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ1ZhbHVlIG11c3QgYmUgb2YgdHlwZSAnIC4gJHRoaXMtPmdldFR5cGUoKSAuICc7IHZhbHVlIGlzICcKICAgICAgICAgICAgICAgIC4gJHRoaXMtPnRvb2xWYWx1ZVRvU3RyaW5nKCRlbGVtZW50KSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5pbmRleC0tOwoKICAgICAgICAkdGhpcy0+ZGF0YVskdGhpcy0+aW5kZXhdID0gJGVsZW1lbnQ7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZExhc3QoJGVsZW1lbnQpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hZGQoJGVsZW1lbnQpOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZmVyRmlyc3QoJGVsZW1lbnQpOiBib29sCiAgICB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5hZGRGaXJzdCgkZWxlbWVudCk7CiAgICAgICAgfSBjYXRjaCAoSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb2ZmZXJMYXN0KCRlbGVtZW50KTogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+b2ZmZXIoJGVsZW1lbnQpOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZUZpcnN0KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlbW92ZSgpOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZUxhc3QoKQogICAgewogICAgICAgICR0YWlsID0gJHRoaXMtPnBvbGxMYXN0KCk7CgogICAgICAgIGlmICgkdGFpbCA9PT0gbnVsbCkgewogICAgICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbignQ2FuXCd0IHJldHVybiBlbGVtZW50IGZyb20gUXVldWUuIFF1ZXVlIGlzIGVtcHR5LicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0YWlsOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBvbGxGaXJzdCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5wb2xsKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcG9sbExhc3QoKQogICAgewogICAgICAgIGlmICgkdGhpcy0+Y291bnQoKSA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICR0YWlsID0gJHRoaXNbJHRoaXMtPnRhaWxdOwoKICAgICAgICB1bnNldCgkdGhpc1skdGhpcy0+dGFpbF0pOwogICAgICAgICR0aGlzLT50YWlsLS07CgogICAgICAgIHJldHVybiAkdGFpbDsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaXJzdEVsZW1lbnQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZWxlbWVudCgpOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxhc3RFbGVtZW50KCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmNvdW50KCkgPT09IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24oJ0NhblwndCByZXR1cm4gZWxlbWVudCBmcm9tIFF1ZXVlLiBRdWV1ZSBpcyBlbXB0eS4nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YVskdGhpcy0+dGFpbF07CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGVla0ZpcnN0KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnBlZWsoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwZWVrTGFzdCgpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5jb3VudCgpID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhWyR0aGlzLT50YWlsXTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/DoubleEndedQueueInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uOwoKdXNlIFJhbXNleVxDb2xsZWN0aW9uXEV4Y2VwdGlvblxOb1N1Y2hFbGVtZW50RXhjZXB0aW9uOwp1c2UgUnVudGltZUV4Y2VwdGlvbjsKCi8qKgogKiBBIGxpbmVhciBjb2xsZWN0aW9uIHRoYXQgc3VwcG9ydHMgZWxlbWVudCBpbnNlcnRpb24gYW5kIHJlbW92YWwgYXQgYm90aCBlbmRzLgogKgogKiBNb3N0IGBEb3VibGVFbmRlZFF1ZXVlSW50ZXJmYWNlYCBpbXBsZW1lbnRhdGlvbnMgcGxhY2Ugbm8gZml4ZWQgbGltaXRzIG9uIHRoZQogKiBudW1iZXIgb2YgZWxlbWVudHMgdGhleSBtYXkgY29udGFpbiwgYnV0IHRoaXMgaW50ZXJmYWNlIHN1cHBvcnRzCiAqIGNhcGFjaXR5LXJlc3RyaWN0ZWQgZG91YmxlLWVuZGVkIHF1ZXVlcyBhcyB3ZWxsIGFzIHRob3NlIHdpdGggbm8gZml4ZWQgc2l6ZQogKiBsaW1pdC4KICoKICogVGhpcyBpbnRlcmZhY2UgZGVmaW5lcyBtZXRob2RzIHRvIGFjY2VzcyB0aGUgZWxlbWVudHMgYXQgYm90aCBlbmRzIG9mIHRoZQogKiBkb3VibGUtZW5kZWQgcXVldWUuIE1ldGhvZHMgYXJlIHByb3ZpZGVkIHRvIGluc2VydCwgcmVtb3ZlLCBhbmQgZXhhbWluZSB0aGUKICogZWxlbWVudC4gRWFjaCBvZiB0aGVzZSBtZXRob2RzIGV4aXN0cyBpbiB0d28gZm9ybXM6IG9uZSB0aHJvd3MgYW4gZXhjZXB0aW9uCiAqIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMsIHRoZSBvdGhlciByZXR1cm5zIGEgc3BlY2lhbCB2YWx1ZSAoZWl0aGVyIGBudWxsYCBvcgogKiBgZmFsc2VgLCBkZXBlbmRpbmcgb24gdGhlIG9wZXJhdGlvbikuIFRoZSBsYXR0ZXIgZm9ybSBvZiB0aGUgaW5zZXJ0IG9wZXJhdGlvbgogKiBpcyBkZXNpZ25lZCBzcGVjaWZpY2FsbHkgZm9yIHVzZSB3aXRoIGNhcGFjaXR5LXJlc3RyaWN0ZWQgaW1wbGVtZW50YXRpb25zOyBpbgogKiBtb3N0IGltcGxlbWVudGF0aW9ucywgaW5zZXJ0IG9wZXJhdGlvbnMgY2Fubm90IGZhaWwuCiAqCiAqIFRoZSB0d2VsdmUgbWV0aG9kcyBkZXNjcmliZWQgYWJvdmUgYXJlIHN1bW1hcml6ZWQgaW4gdGhlIGZvbGxvd2luZyB0YWJsZToKICoKICogPHRhYmxlPgogKiA8Y2FwdGlvbj5TdW1tYXJ5IG9mIERvdWJsZUVuZGVkUXVldWVJbnRlcmZhY2UgbWV0aG9kczwvY2FwdGlvbj4KICogPHRoZWFkPgogKiA8dHI+CiAqIDx0aD48L3RoPgogKiA8dGggY29sc3Bhbj0yPkZpcnN0IEVsZW1lbnQgKEhlYWQpPC90aD4KICogPHRoIGNvbHNwYW49Mj5MYXN0IEVsZW1lbnQgKFRhaWwpPC90aD4KICogPC90cj4KICogPHRyPgogKiA8dGQ+PC90ZD4KICogPHRkPjxlbT5UaHJvd3MgZXhjZXB0aW9uPC9lbT48L3RkPgogKiA8dGQ+PGVtPlNwZWNpYWwgdmFsdWU8L2VtPjwvdGQ+CiAqIDx0ZD48ZW0+VGhyb3dzIGV4Y2VwdGlvbjwvZW0+PC90ZD4KICogPHRkPjxlbT5TcGVjaWFsIHZhbHVlPC9lbT48L3RkPgogKiA8L3RyPgogKiA8L3RoZWFkPgogKiA8dGJvZHk+CiAqIDx0cj4KICogPHRoPkluc2VydDwvdGg+CiAqIDx0ZD48Y29kZT5hZGRGaXJzdCgpPC9jb2RlPjwvdGQ+CiAqIDx0ZD48Y29kZT5vZmZlckZpcnN0KCk8L2NvZGU+PC90ZD4KICogPHRkPjxjb2RlPmFkZExhc3QoKTwvY29kZT48L3RkPgogKiA8dGQ+PGNvZGU+b2ZmZXJMYXN0KCk8L2NvZGU+PC90ZD4KICogPC90cj4KICogPHRyPgogKiA8dGg+UmVtb3ZlPC90aD4KICogPHRkPjxjb2RlPnJlbW92ZUZpcnN0KCk8L2NvZGU+PC90ZD4KICogPHRkPjxjb2RlPnBvbGxGaXJzdCgpPC9jb2RlPjwvdGQ+CiAqIDx0ZD48Y29kZT5yZW1vdmVMYXN0KCk8L2NvZGU+PC90ZD4KICogPHRkPjxjb2RlPnBvbGxMYXN0KCk8L2NvZGU+PC90ZD4KICogPC90cj4KICogPHRyPgogKiA8dGg+RXhhbWluZTwvdGg+CiAqIDx0ZD48Y29kZT5maXJzdEVsZW1lbnQoKTwvY29kZT48L3RkPgogKiA8dGQ+PGNvZGU+cGVla0ZpcnN0KCk8L2NvZGU+PC90ZD4KICogPHRkPjxjb2RlPmxhc3RFbGVtZW50KCk8L2NvZGU+PC90ZD4KICogPHRkPjxjb2RlPnBlZWtMYXN0KCk8L2NvZGU+PC90ZD4KICogPC90cj4KICogPC90Ym9keT4KICogPC90YWJsZT4KICoKICogVGhpcyBpbnRlcmZhY2UgZXh0ZW5kcyB0aGUgYFF1ZXVlSW50ZXJmYWNlYC4gV2hlbiBhIGRvdWJsZS1lbmRlZCBxdWV1ZSBpcwogKiB1c2VkIGFzIGEgcXVldWUsIEZJRk8gKGZpcnN0LWluLWZpcnN0LW91dCkgYmVoYXZpb3IgcmVzdWx0cy4gRWxlbWVudHMgYXJlCiAqIGFkZGVkIGF0IHRoZSBlbmQgb2YgdGhlIGRvdWJsZS1lbmRlZCBxdWV1ZSBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBiZWdpbm5pbmcuCiAqIFRoZSBtZXRob2RzIGluaGVyaXRlZCBmcm9tIHRoZSBgUXVldWVJbnRlcmZhY2VgIGFyZSBwcmVjaXNlbHkgZXF1aXZhbGVudCB0bwogKiBgRG91YmxlRW5kZWRRdWV1ZUludGVyZmFjZWAgbWV0aG9kcyBhcyBpbmRpY2F0ZWQgaW4gdGhlIGZvbGxvd2luZyB0YWJsZToKICoKICogPHRhYmxlPgogKiA8Y2FwdGlvbj5Db21wYXJpc29uIG9mIFF1ZXVlSW50ZXJmYWNlIGFuZCBEb3VibGVFbmRlZFF1ZXVlSW50ZXJmYWNlIG1ldGhvZHM8L2NhcHRpb24+CiAqIDx0aGVhZD4KICogPHRyPgogKiA8dGg+UXVldWVJbnRlcmZhY2UgTWV0aG9kPC90aD4KICogPHRoPkRvdWJsZUVuZGVkUXVldWVJbnRlcmZhY2UgTWV0aG9kPC90aD4KICogPC90cj4KICogPC90aGVhZD4KICogPHRib2R5PgogKiA8dHI+CiAqIDx0ZD48Y29kZT5hZGQoKTwvY29kZT48L3RkPgogKiA8dGQ+PGNvZGU+YWRkTGFzdCgpPC9jb2RlPjwvdGQ+CiAqIDwvdHI+CiAqIDx0cj4KICogPHRkPjxjb2RlPm9mZmVyKCk8L2NvZGU+PC90ZD4KICogPHRkPjxjb2RlPm9mZmVyTGFzdCgpPC9jb2RlPjwvdGQ+CiAqIDwvdHI+CiAqIDx0cj4KICogPHRkPjxjb2RlPnJlbW92ZSgpPC9jb2RlPjwvdGQ+CiAqIDx0ZD48Y29kZT5yZW1vdmVGaXJzdCgpPC9jb2RlPjwvdGQ+CiAqIDwvdHI+CiAqIDx0cj4KICogPHRkPjxjb2RlPnBvbGwoKTwvY29kZT48L3RkPgogKiA8dGQ+PGNvZGU+cG9sbEZpcnN0KCk8L2NvZGU+PC90ZD4KICogPC90cj4KICogPHRyPgogKiA8dGQ+PGNvZGU+ZWxlbWVudCgpPC9jb2RlPjwvdGQ+CiAqIDx0ZD48Y29kZT5maXJzdEVsZW1lbnQoKTwvY29kZT48L3RkPgogKiA8L3RyPgogKiA8dHI+CiAqIDx0ZD48Y29kZT5wZWVrKCk8L2NvZGU+PC90ZD4KICogPHRkPjxjb2RlPnBlZWtGaXJzdCgpPC9jb2RlPjwvdGQ+CiAqIDwvdHI+CiAqIDwvdGJvZHk+CiAqIDwvdGFibGU+CiAqCiAqIERvdWJsZS1lbmRlZCBxdWV1ZXMgY2FuIGFsc28gYmUgdXNlZCBhcyBMSUZPIChsYXN0LWluLWZpcnN0LW91dCkgc3RhY2tzLiBXaGVuCiAqIGEgZG91YmxlLWVuZGVkIHF1ZXVlIGlzIHVzZWQgYXMgYSBzdGFjaywgZWxlbWVudHMgYXJlIHB1c2hlZCBhbmQgcG9wcGVkIGZyb20KICogdGhlIGJlZ2lubmluZyBvZiB0aGUgZG91YmxlLWVuZGVkIHF1ZXVlLiBTdGFjayBjb25jZXB0cyBhcmUgcHJlY2lzZWx5CiAqIGVxdWl2YWxlbnQgdG8gYERvdWJsZUVuZGVkUXVldWVJbnRlcmZhY2VgIG1ldGhvZHMgYXMgaW5kaWNhdGVkIGluIHRoZSB0YWJsZQogKiBiZWxvdzoKICoKICogPHRhYmxlPgogKiA8Y2FwdGlvbj5Db21wYXJpc29uIG9mIHN0YWNrIGNvbmNlcHRzIGFuZCBEb3VibGVFbmRlZFF1ZXVlSW50ZXJmYWNlIG1ldGhvZHM8L2NhcHRpb24+CiAqIDx0aGVhZD4KICogPHRyPgogKiA8dGg+U3RhY2sgY29uY2VwdDwvdGg+CiAqIDx0aD5Eb3VibGVFbmRlZFF1ZXVlSW50ZXJmYWNlIE1ldGhvZDwvdGg+CiAqIDwvdHI+CiAqIDwvdGhlYWQ+CiAqIDx0Ym9keT4KICogPHRyPgogKiA8dGQ+PGVtPnB1c2g8L2VtPjwvdGQ+CiAqIDx0ZD48Y29kZT5hZGRGaXJzdCgpPC9jb2RlPjwvdGQ+CiAqIDwvdHI+CiAqIDx0cj4KICogPHRkPjxlbT5wb3A8L2VtPjwvdGQ+CiAqIDx0ZD48Y29kZT5yZW1vdmVGaXJzdCgpPC9jb2RlPjwvdGQ+CiAqIDwvdHI+CiAqIDx0cj4KICogPHRkPjxlbT5wZWVrPC9lbT48L3RkPgogKiA8dGQ+PGNvZGU+cGVla0ZpcnN0KCk8L2NvZGU+PC90ZD4KICogPC90cj4KICogPC90Ym9keT4KICogPC90YWJsZT4KICoKICogTm90ZSB0aGF0IHRoZSBgcGVlaygpYCBtZXRob2Qgd29ya3MgZXF1YWxseSB3ZWxsIHdoZW4gYSBkb3VibGUtZW5kZWQgcXVldWUgaXMKICogdXNlZCBhcyBhIHF1ZXVlIG9yIGEgc3RhY2s7IGluIGVpdGhlciBjYXNlLCBlbGVtZW50cyBhcmUgZHJhd24gZnJvbSB0aGUKICogYmVnaW5uaW5nIG9mIHRoZSBkb3VibGUtZW5kZWQgcXVldWUuCiAqCiAqIFdoaWxlIGBEb3VibGVFbmRlZFF1ZXVlSW50ZXJmYWNlYCBpbXBsZW1lbnRhdGlvbnMgYXJlIG5vdCBzdHJpY3RseSByZXF1aXJlZAogKiB0byBwcm9oaWJpdCB0aGUgaW5zZXJ0aW9uIG9mIGBudWxsYCBlbGVtZW50cywgdGhleSBhcmUgc3Ryb25nbHkgZW5jb3VyYWdlZCB0bwogKiBkbyBzby4gVXNlcnMgb2YgYW55IGBEb3VibGVFbmRlZFF1ZXVlSW50ZXJmYWNlYCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBkbyBhbGxvdwogKiBgbnVsbGAgZWxlbWVudHMgYXJlIHN0cm9uZ2x5IGVuY291cmFnZWQgKm5vdCogdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlCiAqIGFiaWxpdHkgdG8gaW5zZXJ0IG51bGxzLiBUaGlzIGlzIHNvIGJlY2F1c2UgYG51bGxgIGlzIHVzZWQgYXMgYSBzcGVjaWFsCiAqIHJldHVybiB2YWx1ZSBieSB2YXJpb3VzIG1ldGhvZHMgdG8gaW5kaWNhdGVkIHRoYXQgdGhlIGRvdWJsZS1lbmRlZCBxdWV1ZSBpcwogKiBlbXB0eS4KICoKICogQHRlbXBsYXRlIFQKICogQGV4dGVuZHMgUXVldWVJbnRlcmZhY2U8VD4KICovCmludGVyZmFjZSBEb3VibGVFbmRlZFF1ZXVlSW50ZXJmYWNlIGV4dGVuZHMgUXVldWVJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBJbnNlcnRzIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBhdCB0aGUgZnJvbnQgb2YgdGhpcyBxdWV1ZSBpZiBpdCBpcwogICAgICogcG9zc2libGUgdG8gZG8gc28gaW1tZWRpYXRlbHkgd2l0aG91dCB2aW9sYXRpbmcgY2FwYWNpdHkgcmVzdHJpY3Rpb25zLgogICAgICoKICAgICAqIFdoZW4gdXNpbmcgYSBjYXBhY2l0eS1yZXN0cmljdGVkIGRvdWJsZS1lbmRlZCBxdWV1ZSwgaXQgaXMgZ2VuZXJhbGx5CiAgICAgKiBwcmVmZXJhYmxlIHRvIHVzZSB0aGUgYG9mZmVyRmlyc3QoKWAgbWV0aG9kLgogICAgICoKICAgICAqIEBwYXJhbSBUICRlbGVtZW50IFRoZSBlbGVtZW50IHRvIGFkZCB0byB0aGUgZnJvbnQgb2YgdGhpcyBxdWV1ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgYHRydWVgIGlmIHRoaXMgcXVldWUgY2hhbmdlZCBhcyBhIHJlc3VsdCBvZiB0aGUgY2FsbC4KICAgICAqCiAgICAgKiBAdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gaWYgYSBxdWV1ZSByZWZ1c2VzIHRvIGFkZCBhIHBhcnRpY3VsYXIgZWxlbWVudAogICAgICogICAgIGZvciBhbnkgcmVhc29uIG90aGVyIHRoYW4gdGhhdCBpdCBhbHJlYWR5IGNvbnRhaW5zIHRoZSBlbGVtZW50LgogICAgICogICAgIEltcGxlbWVudGF0aW9ucyBzaG91bGQgdXNlIGEgbW9yZS1zcGVjaWZpYyBleGNlcHRpb24gdGhhdCBleHRlbmRzCiAgICAgKiAgICAgYFxSdW50aW1lRXhjZXB0aW9uYC4KICAgICAqLwogICAgLy8gcGhwY3M6aWdub3JlIFNsZXZvbWF0Q29kaW5nU3RhbmRhcmQuVHlwZUhpbnRzLlBhcmFtZXRlclR5cGVIaW50Lk1pc3NpbmdOYXRpdmVUeXBlSGludAogICAgcHVibGljIGZ1bmN0aW9uIGFkZEZpcnN0KCRlbGVtZW50KTogYm9vbDsKCiAgICAvKioKICAgICAqIEluc2VydHMgdGhlIHNwZWNpZmllZCBlbGVtZW50IGF0IHRoZSBlbmQgb2YgdGhpcyBxdWV1ZSBpZiBpdCBpcyBwb3NzaWJsZQogICAgICogdG8gZG8gc28gaW1tZWRpYXRlbHkgd2l0aG91dCB2aW9sYXRpbmcgY2FwYWNpdHkgcmVzdHJpY3Rpb25zLgogICAgICoKICAgICAqIFdoZW4gdXNpbmcgYSBjYXBhY2l0eS1yZXN0cmljdGVkIGRvdWJsZS1lbmRlZCBxdWV1ZSwgaXQgaXMgZ2VuZXJhbGx5CiAgICAgKiBwcmVmZXJhYmxlIHRvIHVzZSB0aGUgYG9mZmVyTGFzdCgpYCBtZXRob2QuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0byBgYWRkKClgLgogICAgICoKICAgICAqIEBwYXJhbSBUICRlbGVtZW50IFRoZSBlbGVtZW50IHRvIGFkZCB0byB0aGUgZW5kIG9mIHRoaXMgcXVldWUuCiAgICAgKgogICAgICogQHJldHVybiBib29sIGB0cnVlYCBpZiB0aGlzIHF1ZXVlIGNoYW5nZWQgYXMgYSByZXN1bHQgb2YgdGhlIGNhbGwuCiAgICAgKgogICAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIGlmIGEgcXVldWUgcmVmdXNlcyB0byBhZGQgYSBwYXJ0aWN1bGFyIGVsZW1lbnQKICAgICAqICAgICBmb3IgYW55IHJlYXNvbiBvdGhlciB0aGFuIHRoYXQgaXQgYWxyZWFkeSBjb250YWlucyB0aGUgZWxlbWVudC4KICAgICAqICAgICBJbXBsZW1lbnRhdGlvbnMgc2hvdWxkIHVzZSBhIG1vcmUtc3BlY2lmaWMgZXhjZXB0aW9uIHRoYXQgZXh0ZW5kcwogICAgICogICAgIGBcUnVudGltZUV4Y2VwdGlvbmAuCiAgICAgKi8KICAgIC8vIHBocGNzOmlnbm9yZSBTbGV2b21hdENvZGluZ1N0YW5kYXJkLlR5cGVIaW50cy5QYXJhbWV0ZXJUeXBlSGludC5NaXNzaW5nTmF0aXZlVHlwZUhpbnQKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRMYXN0KCRlbGVtZW50KTogYm9vbDsKCiAgICAvKioKICAgICAqIEluc2VydHMgdGhlIHNwZWNpZmllZCBlbGVtZW50IGF0IHRoZSBmcm9udCBvZiB0aGlzIHF1ZXVlIGlmIGl0IGlzCiAgICAgKiBwb3NzaWJsZSB0byBkbyBzbyBpbW1lZGlhdGVseSB3aXRob3V0IHZpb2xhdGluZyBjYXBhY2l0eSByZXN0cmljdGlvbnMuCiAgICAgKgogICAgICogV2hlbiB1c2luZyBhIGNhcGFjaXR5LXJlc3RyaWN0ZWQgcXVldWUsIHRoaXMgbWV0aG9kIGlzIGdlbmVyYWxseQogICAgICogcHJlZmVyYWJsZSB0byBgYWRkRmlyc3QoKWAsIHdoaWNoIGNhbiBmYWlsIHRvIGluc2VydCBhbiBlbGVtZW50IG9ubHkgYnkKICAgICAqIHRocm93aW5nIGFuIGV4Y2VwdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gVCAkZWxlbWVudCBUaGUgZWxlbWVudCB0byBhZGQgdG8gdGhlIGZyb250IG9mIHRoaXMgcXVldWUuCiAgICAgKgogICAgICogQHJldHVybiBib29sIGB0cnVlYCBpZiB0aGUgZWxlbWVudCB3YXMgYWRkZWQgdG8gdGhpcyBxdWV1ZSwgZWxzZSBgZmFsc2VgLgogICAgICovCiAgICAvLyBwaHBjczppZ25vcmUgU2xldm9tYXRDb2RpbmdTdGFuZGFyZC5UeXBlSGludHMuUGFyYW1ldGVyVHlwZUhpbnQuTWlzc2luZ05hdGl2ZVR5cGVIaW50CiAgICBwdWJsaWMgZnVuY3Rpb24gb2ZmZXJGaXJzdCgkZWxlbWVudCk6IGJvb2w7CgogICAgLyoqCiAgICAgKiBJbnNlcnRzIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBhdCB0aGUgZW5kIG9mIHRoaXMgcXVldWUgaWYgaXQgaXMgcG9zc2libGUKICAgICAqIHRvIGRvIHNvIGltbWVkaWF0ZWx5IHdpdGhvdXQgdmlvbGF0aW5nIGNhcGFjaXR5IHJlc3RyaWN0aW9ucy4KICAgICAqCiAgICAgKiBXaGVuIHVzaW5nIGEgY2FwYWNpdHktcmVzdHJpY3RlZCBxdWV1ZSwgdGhpcyBtZXRob2QgaXMgZ2VuZXJhbGx5CiAgICAgKiBwcmVmZXJhYmxlIHRvIGBhZGRMYXN0KClgIHdoaWNoIGNhbiBmYWlsIHRvIGluc2VydCBhbiBlbGVtZW50IG9ubHkgYnkKICAgICAqIHRocm93aW5nIGFuIGV4Y2VwdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gVCAkZWxlbWVudCBUaGUgZWxlbWVudCB0byBhZGQgdG8gdGhlIGVuZCBvZiB0aGlzIHF1ZXVlLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBgdHJ1ZWAgaWYgdGhlIGVsZW1lbnQgd2FzIGFkZGVkIHRvIHRoaXMgcXVldWUsIGVsc2UgYGZhbHNlYC4KICAgICAqLwogICAgLy8gcGhwY3M6aWdub3JlIFNsZXZvbWF0Q29kaW5nU3RhbmRhcmQuVHlwZUhpbnRzLlBhcmFtZXRlclR5cGVIaW50Lk1pc3NpbmdOYXRpdmVUeXBlSGludAogICAgcHVibGljIGZ1bmN0aW9uIG9mZmVyTGFzdCgkZWxlbWVudCk6IGJvb2w7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZXMgYW5kIHJlbW92ZXMgdGhlIGhlYWQgb2YgdGhpcyBxdWV1ZS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gYHBvbGxGaXJzdCgpYCBvbmx5IGluIHRoYXQgaXQgdGhyb3dzIGFuCiAgICAgKiBleGNlcHRpb24gaWYgdGhpcyBxdWV1ZSBpcyBlbXB0eS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFQgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhpcyBxdWV1ZS4KICAgICAqCiAgICAgKiBAdGhyb3dzIE5vU3VjaEVsZW1lbnRFeGNlcHRpb24gaWYgdGhpcyBxdWV1ZSBpcyBlbXB0eS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZUZpcnN0KCk7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZXMgYW5kIHJlbW92ZXMgdGhlIHRhaWwgb2YgdGhpcyBxdWV1ZS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gYHBvbGxMYXN0KClgIG9ubHkgaW4gdGhhdCBpdCB0aHJvd3MgYW4gZXhjZXB0aW9uCiAgICAgKiBpZiB0aGlzIHF1ZXVlIGlzIGVtcHR5LgogICAgICoKICAgICAqIEByZXR1cm4gVCB0aGUgbGFzdCBlbGVtZW50IGluIHRoaXMgcXVldWUuCiAgICAgKgogICAgICogQHRocm93cyBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uIGlmIHRoaXMgcXVldWUgaXMgZW1wdHkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmVMYXN0KCk7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZXMgYW5kIHJlbW92ZXMgdGhlIGhlYWQgb2YgdGhpcyBxdWV1ZSwgb3IgcmV0dXJucyBgbnVsbGAgaWYgdGhpcwogICAgICogcXVldWUgaXMgZW1wdHkuCiAgICAgKgogICAgICogQHJldHVybiBUfG51bGwgdGhlIGhlYWQgb2YgdGhpcyBxdWV1ZSwgb3IgYG51bGxgIGlmIHRoaXMgcXVldWUgaXMgZW1wdHkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwb2xsRmlyc3QoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlcyBhbmQgcmVtb3ZlcyB0aGUgdGFpbCBvZiB0aGlzIHF1ZXVlLCBvciByZXR1cm5zIGBudWxsYCBpZiB0aGlzCiAgICAgKiBxdWV1ZSBpcyBlbXB0eS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFR8bnVsbCB0aGUgdGFpbCBvZiB0aGlzIHF1ZXVlLCBvciBgbnVsbGAgaWYgdGhpcyBxdWV1ZSBpcyBlbXB0eS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBvbGxMYXN0KCk7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZXMsIGJ1dCBkb2VzIG5vdCByZW1vdmUsIHRoZSBoZWFkIG9mIHRoaXMgcXVldWUuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgZGlmZmVycyBmcm9tIGBwZWVrRmlyc3QoKWAgb25seSBpbiB0aGF0IGl0IHRocm93cyBhbgogICAgICogZXhjZXB0aW9uIGlmIHRoaXMgcXVldWUgaXMgZW1wdHkuCiAgICAgKgogICAgICogQHJldHVybiBUIHRoZSBoZWFkIG9mIHRoaXMgcXVldWUuCiAgICAgKgogICAgICogQHRocm93cyBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uIGlmIHRoaXMgcXVldWUgaXMgZW1wdHkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaXJzdEVsZW1lbnQoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlcywgYnV0IGRvZXMgbm90IHJlbW92ZSwgdGhlIHRhaWwgb2YgdGhpcyBxdWV1ZS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gYHBlZWtMYXN0KClgIG9ubHkgaW4gdGhhdCBpdCB0aHJvd3MgYW4gZXhjZXB0aW9uCiAgICAgKiBpZiB0aGlzIHF1ZXVlIGlzIGVtcHR5LgogICAgICoKICAgICAqIEByZXR1cm4gVCB0aGUgdGFpbCBvZiB0aGlzIHF1ZXVlLgogICAgICoKICAgICAqIEB0aHJvd3MgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiBpZiB0aGlzIHF1ZXVlIGlzIGVtcHR5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbGFzdEVsZW1lbnQoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlcywgYnV0IGRvZXMgbm90IHJlbW92ZSwgdGhlIGhlYWQgb2YgdGhpcyBxdWV1ZSwgb3IgcmV0dXJucyBgbnVsbGAKICAgICAqIGlmIHRoaXMgcXVldWUgaXMgZW1wdHkuCiAgICAgKgogICAgICogQHJldHVybiBUfG51bGwgdGhlIGhlYWQgb2YgdGhpcyBxdWV1ZSwgb3IgYG51bGxgIGlmIHRoaXMgcXVldWUgaXMgZW1wdHkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwZWVrRmlyc3QoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlcywgYnV0IGRvZXMgbm90IHJlbW92ZSwgdGhlIHRhaWwgb2YgdGhpcyBxdWV1ZSwgb3IgcmV0dXJucyBgbnVsbGAKICAgICAqIGlmIHRoaXMgcXVldWUgaXMgZW1wdHkuCiAgICAgKgogICAgICogQHJldHVybiBUfG51bGwgdGhlIHRhaWwgb2YgdGhpcyBxdWV1ZSwgb3IgYG51bGxgIGlmIHRoaXMgcXVldWUgaXMgZW1wdHkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwZWVrTGFzdCgpOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Exception/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Exception/CollectionMismatchException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXEV4Y2VwdGlvbjsKCnVzZSBSdW50aW1lRXhjZXB0aW9uOwoKLyoqCiAqIFRocm93biB3aGVuIGF0dGVtcHRpbmcgdG8gb3BlcmF0ZSBvbiBjb2xsZWN0aW9ucyBvZiBkaWZmZXJpbmcgdHlwZXMuCiAqLwpjbGFzcyBDb2xsZWN0aW9uTWlzbWF0Y2hFeGNlcHRpb24gZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Exception/InvalidArgumentException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXEV4Y2VwdGlvbjsKCi8qKgogKiBUaHJvd24gdG8gaW5kaWNhdGUgYW4gYXJndW1lbnQgaXMgbm90IG9mIHRoZSBleHBlY3RlZCB0eXBlLgogKi8KY2xhc3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGV4dGVuZHMgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Exception/InvalidSortOrderException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXEV4Y2VwdGlvbjsKCnVzZSBSdW50aW1lRXhjZXB0aW9uOwoKLyoqCiAqIFRocm93biB3aGVuIGF0dGVtcHRpbmcgdG8gdXNlIGEgc29ydCBvcmRlciB0aGF0IGlzIG5vdCByZWNvZ25pemVkLgogKi8KY2xhc3MgSW52YWxpZFNvcnRPcmRlckV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24Kewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Exception/NoSuchElementException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXEV4Y2VwdGlvbjsKCnVzZSBSdW50aW1lRXhjZXB0aW9uOwoKLyoqCiAqIFRocm93biB3aGVuIGF0dGVtcHRpbmcgdG8gYWNjZXNzIGFuIGVsZW1lbnQgdGhhdCBkb2VzIG5vdCBleGlzdC4KICovCmNsYXNzIE5vU3VjaEVsZW1lbnRFeGNlcHRpb24gZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Exception/OutOfBoundsException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXEV4Y2VwdGlvbjsKCi8qKgogKiBUaHJvd24gd2hlbiBhdHRlbXB0aW5nIHRvIGFjY2VzcyBhbiBlbGVtZW50IG91dCBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGNvbGxlY3Rpb24uCiAqLwpjbGFzcyBPdXRPZkJvdW5kc0V4Y2VwdGlvbiBleHRlbmRzIFxPdXRPZkJvdW5kc0V4Y2VwdGlvbgp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Exception/UnsupportedOperationException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXEV4Y2VwdGlvbjsKCnVzZSBSdW50aW1lRXhjZXB0aW9uOwoKLyoqCiAqIFRocm93biB0byBpbmRpY2F0ZSB0aGF0IHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuCiAqLwpjbGFzcyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24Kewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Exception/ValueExtractionException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXEV4Y2VwdGlvbjsKCnVzZSBSdW50aW1lRXhjZXB0aW9uOwoKLyoqCiAqIFRocm93biB3aGVuIGF0dGVtcHRpbmcgdG8gZXh0cmFjdCBhIHZhbHVlIGZvciBhIG1ldGhvZCBvciBwcm9wZXJ0eSB0aGF0IGRvZXMgbm90IGV4aXN0LgogKi8KY2xhc3MgVmFsdWVFeHRyYWN0aW9uRXhjZXB0aW9uIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbgp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/GenericArray.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uOwoKLyoqCiAqIGBHZW5lcmljQXJyYXlgIHJlcHJlc2VudHMgYSBzdGFuZGFyZCBhcnJheSBvYmplY3QuCiAqCiAqIEBleHRlbmRzIEFic3RyYWN0QXJyYXk8bWl4ZWQ+CiAqLwpjbGFzcyBHZW5lcmljQXJyYXkgZXh0ZW5kcyBBYnN0cmFjdEFycmF5CnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Map/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Map/AbstractMap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXE1hcDsKCnVzZSBSYW1zZXlcQ29sbGVjdGlvblxBYnN0cmFjdEFycmF5Owp1c2UgUmFtc2V5XENvbGxlY3Rpb25cRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKCnVzZSBmdW5jdGlvbiBhcnJheV9rZXlfZXhpc3RzOwp1c2UgZnVuY3Rpb24gYXJyYXlfa2V5czsKdXNlIGZ1bmN0aW9uIGluX2FycmF5Owp1c2UgZnVuY3Rpb24gdmFyX2V4cG9ydDsKCi8qKgogKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgYmFzaWMgaW1wbGVtZW50YXRpb24gb2YgYE1hcEludGVyZmFjZWAsIHRvIG1pbmltaXplIHRoZQogKiBlZmZvcnQgcmVxdWlyZWQgdG8gaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlLgogKgogKiBAdGVtcGxhdGUgVAogKiBAZXh0ZW5kcyBBYnN0cmFjdEFycmF5PFQ+CiAqIEBpbXBsZW1lbnRzIE1hcEludGVyZmFjZTxUPgogKi8KYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RNYXAgZXh0ZW5kcyBBYnN0cmFjdEFycmF5IGltcGxlbWVudHMgTWFwSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFNldCgkb2Zmc2V0LCAkdmFsdWUpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCRvZmZzZXQgPT09IG51bGwpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdNYXAgZWxlbWVudHMgYXJlIGtleS92YWx1ZSBwYWlyczsgYSBrZXkgbXVzdCBiZSBwcm92aWRlZCBmb3IgJwogICAgICAgICAgICAgICAgLiAndmFsdWUgJyAuIHZhcl9leHBvcnQoJHZhbHVlLCB0cnVlKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5kYXRhWyRvZmZzZXRdID0gJHZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbnRhaW5zS2V5KCRrZXkpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X2tleV9leGlzdHMoJGtleSwgJHRoaXMtPmRhdGEpOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbnRhaW5zVmFsdWUoJHZhbHVlKTogYm9vbAogICAgewogICAgICAgIHJldHVybiBpbl9hcnJheSgkdmFsdWUsICR0aGlzLT5kYXRhLCB0cnVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBrZXlzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X2tleXMoJHRoaXMtPmRhdGEpOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldCgka2V5LCAkZGVmYXVsdFZhbHVlID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5jb250YWluc0tleSgka2V5KSkgewogICAgICAgICAgICByZXR1cm4gJGRlZmF1bHRWYWx1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpc1ska2V5XTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwdXQoJGtleSwgJHZhbHVlKQogICAgewogICAgICAgICRwcmV2aW91c1ZhbHVlID0gJHRoaXMtPmdldCgka2V5KTsKICAgICAgICAkdGhpc1ska2V5XSA9ICR2YWx1ZTsKCiAgICAgICAgcmV0dXJuICRwcmV2aW91c1ZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHB1dElmQWJzZW50KCRrZXksICR2YWx1ZSkKICAgIHsKICAgICAgICAkY3VycmVudFZhbHVlID0gJHRoaXMtPmdldCgka2V5KTsKCiAgICAgICAgaWYgKCRjdXJyZW50VmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgJHRoaXNbJGtleV0gPSAkdmFsdWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGN1cnJlbnRWYWx1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmUoJGtleSkKICAgIHsKICAgICAgICAkcHJldmlvdXNWYWx1ZSA9ICR0aGlzLT5nZXQoJGtleSk7CiAgICAgICAgdW5zZXQoJHRoaXNbJGtleV0pOwoKICAgICAgICByZXR1cm4gJHByZXZpb3VzVmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlSWYoJGtleSwgJHZhbHVlKTogYm9vbAogICAgewogICAgICAgIGlmICgkdGhpcy0+Z2V0KCRrZXkpID09PSAkdmFsdWUpIHsKICAgICAgICAgICAgdW5zZXQoJHRoaXNbJGtleV0pOwoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVwbGFjZSgka2V5LCAkdmFsdWUpCiAgICB7CiAgICAgICAgJGN1cnJlbnRWYWx1ZSA9ICR0aGlzLT5nZXQoJGtleSk7CgogICAgICAgIGlmICgkdGhpcy0+Y29udGFpbnNLZXkoJGtleSkpIHsKICAgICAgICAgICAgJHRoaXNbJGtleV0gPSAkdmFsdWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGN1cnJlbnRWYWx1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXBsYWNlSWYoJGtleSwgJG9sZFZhbHVlLCAkbmV3VmFsdWUpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5nZXQoJGtleSkgPT09ICRvbGRWYWx1ZSkgewogICAgICAgICAgICAkdGhpc1ska2V5XSA9ICRuZXdWYWx1ZTsKCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Map/AbstractTypedMap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXE1hcDsKCnVzZSBSYW1zZXlcQ29sbGVjdGlvblxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgUmFtc2V5XENvbGxlY3Rpb25cVG9vbFxUeXBlVHJhaXQ7CnVzZSBSYW1zZXlcQ29sbGVjdGlvblxUb29sXFZhbHVlVG9TdHJpbmdUcmFpdDsKCnVzZSBmdW5jdGlvbiB2YXJfZXhwb3J0OwoKLyoqCiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBiYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiBgVHlwZWRNYXBJbnRlcmZhY2VgLCB0bwogKiBtaW5pbWl6ZSB0aGUgZWZmb3J0IHJlcXVpcmVkIHRvIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS4KICoKICogQHRlbXBsYXRlIEsgb2YgYXJyYXkta2V5CiAqIEB0ZW1wbGF0ZSBUCiAqIEBleHRlbmRzIEFic3RyYWN0TWFwPFQ+CiAqIEBpbXBsZW1lbnRzIFR5cGVkTWFwSW50ZXJmYWNlPFQ+CiAqLwphYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFR5cGVkTWFwIGV4dGVuZHMgQWJzdHJhY3RNYXAgaW1wbGVtZW50cyBUeXBlZE1hcEludGVyZmFjZQp7CiAgICB1c2UgVHlwZVRyYWl0OwogICAgdXNlIFZhbHVlVG9TdHJpbmdUcmFpdDsKCiAgICAvKioKICAgICAqIEBwYXJhbSBLfG51bGwgJG9mZnNldAogICAgICogQHBhcmFtIFQgJHZhbHVlCiAgICAgKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFNldCgkb2Zmc2V0LCAkdmFsdWUpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCRvZmZzZXQgPT09IG51bGwpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdNYXAgZWxlbWVudHMgYXJlIGtleS92YWx1ZSBwYWlyczsgYSBrZXkgbXVzdCBiZSBwcm92aWRlZCBmb3IgJwogICAgICAgICAgICAgICAgLiAndmFsdWUgJyAuIHZhcl9leHBvcnQoJHZhbHVlLCB0cnVlKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+Y2hlY2tUeXBlKCR0aGlzLT5nZXRLZXlUeXBlKCksICRvZmZzZXQpID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0tleSBtdXN0IGJlIG9mIHR5cGUgJyAuICR0aGlzLT5nZXRLZXlUeXBlKCkgLiAnOyBrZXkgaXMgJwogICAgICAgICAgICAgICAgLiAkdGhpcy0+dG9vbFZhbHVlVG9TdHJpbmcoJG9mZnNldCksCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoaXMtPmNoZWNrVHlwZSgkdGhpcy0+Z2V0VmFsdWVUeXBlKCksICR2YWx1ZSkgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnVmFsdWUgbXVzdCBiZSBvZiB0eXBlICcgLiAkdGhpcy0+Z2V0VmFsdWVUeXBlKCkgLiAnOyB2YWx1ZSBpcyAnCiAgICAgICAgICAgICAgICAuICR0aGlzLT50b29sVmFsdWVUb1N0cmluZygkdmFsdWUpLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcGFyZW50OjpvZmZzZXRTZXQoJG9mZnNldCwgJHZhbHVlKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Map/AssociativeArrayMap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXE1hcDsKCi8qKgogKiBgQXNzb2NpYXRpdmVBcnJheU1hcGAgcmVwcmVzZW50cyBhIHN0YW5kYXJkIGFzc29jaWF0aXZlIGFycmF5IG9iamVjdC4KICoKICogQHRlbXBsYXRlIFQKICogQGV4dGVuZHMgQWJzdHJhY3RNYXA8VD4KICovCmNsYXNzIEFzc29jaWF0aXZlQXJyYXlNYXAgZXh0ZW5kcyBBYnN0cmFjdE1hcAp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Map/MapInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXE1hcDsKCnVzZSBSYW1zZXlcQ29sbGVjdGlvblxBcnJheUludGVyZmFjZTsKCi8qKgogKiBBbiBvYmplY3QgdGhhdCBtYXBzIGtleXMgdG8gdmFsdWVzLgogKgogKiBBIG1hcCBjYW5ub3QgY29udGFpbiBkdXBsaWNhdGUga2V5czsgZWFjaCBrZXkgY2FuIG1hcCB0byBhdCBtb3N0IG9uZSB2YWx1ZS4KICoKICogQHRlbXBsYXRlIFQKICogQGV4dGVuZHMgQXJyYXlJbnRlcmZhY2U8VD4KICovCmludGVyZmFjZSBNYXBJbnRlcmZhY2UgZXh0ZW5kcyBBcnJheUludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRoaXMgbWFwIGNvbnRhaW5zIGEgbWFwcGluZyBmb3IgdGhlIHNwZWNpZmllZCBrZXkuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5LWtleSAka2V5IFRoZSBrZXkgdG8gY2hlY2sgaW4gdGhlIG1hcC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbnRhaW5zS2V5KCRrZXkpOiBib29sOwoKICAgIC8qKgogICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBtYXAgbWFwcyBvbmUgb3IgbW9yZSBrZXlzIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuCiAgICAgKgogICAgICogVGhpcyBwZXJmb3JtcyBhIHN0cmljdCB0eXBlIGNoZWNrIG9uIHRoZSB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gVCAkdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrIGluIHRoZSBtYXAuCiAgICAgKi8KICAgIC8vIHBocGNzOmlnbm9yZSBTbGV2b21hdENvZGluZ1N0YW5kYXJkLlR5cGVIaW50cy5QYXJhbWV0ZXJUeXBlSGludC5NaXNzaW5nTmF0aXZlVHlwZUhpbnQKICAgIHB1YmxpYyBmdW5jdGlvbiBjb250YWluc1ZhbHVlKCR2YWx1ZSk6IGJvb2w7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgdGhlIGtleXMgY29udGFpbmVkIGluIHRoaXMgbWFwLgogICAgICoKICAgICAqIEByZXR1cm4gbGlzdDxhcnJheS1rZXk+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBrZXlzKCk6IGFycmF5OwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdmFsdWUgdG8gd2hpY2ggdGhlIHNwZWNpZmllZCBrZXkgaXMgbWFwcGVkLCBgbnVsbGAgaWYgdGhpcwogICAgICogbWFwIGNvbnRhaW5zIG5vIG1hcHBpbmcgZm9yIHRoZSBrZXksIG9yIChvcHRpb25hbGx5KSBgJGRlZmF1bHRWYWx1ZWAgaWYKICAgICAqIHRoaXMgbWFwIGNvbnRhaW5zIG5vIG1hcHBpbmcgZm9yIHRoZSBrZXkuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5LWtleSAka2V5IFRoZSBrZXkgdG8gcmV0dXJuIGZyb20gdGhlIG1hcC4KICAgICAqIEBwYXJhbSBUfG51bGwgJGRlZmF1bHRWYWx1ZSBUaGUgZGVmYXVsdCB2YWx1ZSB0byB1c2UgaWYgYCRrZXlgIGlzIG5vdCBmb3VuZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIFR8bnVsbCB0aGUgdmFsdWUgb3IgYG51bGxgIGlmIHRoZSBrZXkgY291bGQgbm90IGJlIGZvdW5kLgogICAgICovCiAgICAvLyBwaHBjczppZ25vcmUgU2xldm9tYXRDb2RpbmdTdGFuZGFyZC5UeXBlSGludHMuUGFyYW1ldGVyVHlwZUhpbnQuTWlzc2luZ05hdGl2ZVR5cGVIaW50CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0KCRrZXksICRkZWZhdWx0VmFsdWUgPSBudWxsKTsKCiAgICAvKioKICAgICAqIEFzc29jaWF0ZXMgdGhlIHNwZWNpZmllZCB2YWx1ZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5IGluIHRoaXMgbWFwLgogICAgICoKICAgICAqIElmIHRoZSBtYXAgcHJldmlvdXNseSBjb250YWluZWQgYSBtYXBwaW5nIGZvciB0aGUga2V5LCB0aGUgb2xkIHZhbHVlIGlzCiAgICAgKiByZXBsYWNlZCBieSB0aGUgc3BlY2lmaWVkIHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheS1rZXkgJGtleSBUaGUga2V5IHRvIHB1dCBvciByZXBsYWNlIGluIHRoZSBtYXAuCiAgICAgKiBAcGFyYW0gVCAkdmFsdWUgVGhlIHZhbHVlIHRvIHN0b3JlIGF0IGAka2V5YC4KICAgICAqCiAgICAgKiBAcmV0dXJuIFR8bnVsbCB0aGUgcHJldmlvdXMgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGtleSwgb3IgYG51bGxgIGlmCiAgICAgKiAgICAgdGhlcmUgd2FzIG5vIG1hcHBpbmcgZm9yIGAka2V5YC4KICAgICAqLwogICAgLy8gcGhwY3M6aWdub3JlIFNsZXZvbWF0Q29kaW5nU3RhbmRhcmQuVHlwZUhpbnRzLlBhcmFtZXRlclR5cGVIaW50Lk1pc3NpbmdOYXRpdmVUeXBlSGludAogICAgcHVibGljIGZ1bmN0aW9uIHB1dCgka2V5LCAkdmFsdWUpOwoKICAgIC8qKgogICAgICogQXNzb2NpYXRlcyB0aGUgc3BlY2lmaWVkIHZhbHVlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkgaW4gdGhpcyBtYXAgb25seSBpZgogICAgICogaXQgaXMgbm90IGFscmVhZHkgc2V0LgogICAgICoKICAgICAqIElmIHRoZXJlIGlzIGFscmVhZHkgYSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggYCRrZXlgLCB0aGlzIHJldHVybnMgdGhhdAogICAgICogdmFsdWUgd2l0aG91dCByZXBsYWNpbmcgaXQuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5LWtleSAka2V5IFRoZSBrZXkgdG8gcHV0IGluIHRoZSBtYXAuCiAgICAgKiBAcGFyYW0gVCAkdmFsdWUgVGhlIHZhbHVlIHRvIHN0b3JlIGF0IGAka2V5YC4KICAgICAqCiAgICAgKiBAcmV0dXJuIFR8bnVsbCB0aGUgcHJldmlvdXMgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGtleSwgb3IgYG51bGxgIGlmCiAgICAgKiAgICAgdGhlcmUgd2FzIG5vIG1hcHBpbmcgZm9yIGAka2V5YC4KICAgICAqLwogICAgLy8gcGhwY3M6aWdub3JlIFNsZXZvbWF0Q29kaW5nU3RhbmRhcmQuVHlwZUhpbnRzLlBhcmFtZXRlclR5cGVIaW50Lk1pc3NpbmdOYXRpdmVUeXBlSGludAogICAgcHVibGljIGZ1bmN0aW9uIHB1dElmQWJzZW50KCRrZXksICR2YWx1ZSk7CgogICAgLyoqCiAgICAgKiBSZW1vdmVzIHRoZSBtYXBwaW5nIGZvciBhIGtleSBmcm9tIHRoaXMgbWFwIGlmIGl0IGlzIHByZXNlbnQuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5LWtleSAka2V5IFRoZSBrZXkgdG8gcmVtb3ZlIGZyb20gdGhlIG1hcC4KICAgICAqCiAgICAgKiBAcmV0dXJuIFR8bnVsbCB0aGUgcHJldmlvdXMgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGtleSwgb3IgYG51bGxgIGlmCiAgICAgKiAgICAgdGhlcmUgd2FzIG5vIG1hcHBpbmcgZm9yIGAka2V5YC4KICAgICAqLwogICAgLy8gcGhwY3M6aWdub3JlIFNsZXZvbWF0Q29kaW5nU3RhbmRhcmQuVHlwZUhpbnRzLlBhcmFtZXRlclR5cGVIaW50Lk1pc3NpbmdOYXRpdmVUeXBlSGludAogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZSgka2V5KTsKCiAgICAvKioKICAgICAqIFJlbW92ZXMgdGhlIGVudHJ5IGZvciB0aGUgc3BlY2lmaWVkIGtleSBvbmx5IGlmIGl0IGlzIGN1cnJlbnRseSBtYXBwZWQgdG8KICAgICAqIHRoZSBzcGVjaWZpZWQgdmFsdWUuCiAgICAgKgogICAgICogVGhpcyBwZXJmb3JtcyBhIHN0cmljdCB0eXBlIGNoZWNrIG9uIHRoZSB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkta2V5ICRrZXkgVGhlIGtleSB0byByZW1vdmUgZnJvbSB0aGUgbWFwLgogICAgICogQHBhcmFtIFQgJHZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBpZiB0aGUgdmFsdWUgd2FzIHJlbW92ZWQuCiAgICAgKi8KICAgIC8vIHBocGNzOmlnbm9yZSBTbGV2b21hdENvZGluZ1N0YW5kYXJkLlR5cGVIaW50cy5QYXJhbWV0ZXJUeXBlSGludC5NaXNzaW5nTmF0aXZlVHlwZUhpbnQKICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmVJZigka2V5LCAkdmFsdWUpOiBib29sOwoKICAgIC8qKgogICAgICogUmVwbGFjZXMgdGhlIGVudHJ5IGZvciB0aGUgc3BlY2lmaWVkIGtleSBvbmx5IGlmIGl0IGlzIGN1cnJlbnRseSBtYXBwZWQKICAgICAqIHRvIHNvbWUgdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5LWtleSAka2V5IFRoZSBrZXkgdG8gcmVwbGFjZS4KICAgICAqIEBwYXJhbSBUICR2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0IGF0IGAka2V5YC4KICAgICAqCiAgICAgKiBAcmV0dXJuIFR8bnVsbCB0aGUgcHJldmlvdXMgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGtleSwgb3IgYG51bGxgIGlmCiAgICAgKiAgICAgdGhlcmUgd2FzIG5vIG1hcHBpbmcgZm9yIGAka2V5YC4KICAgICAqLwogICAgLy8gcGhwY3M6aWdub3JlIFNsZXZvbWF0Q29kaW5nU3RhbmRhcmQuVHlwZUhpbnRzLlBhcmFtZXRlclR5cGVIaW50Lk1pc3NpbmdOYXRpdmVUeXBlSGludAogICAgcHVibGljIGZ1bmN0aW9uIHJlcGxhY2UoJGtleSwgJHZhbHVlKTsKCiAgICAvKioKICAgICAqIFJlcGxhY2VzIHRoZSBlbnRyeSBmb3IgdGhlIHNwZWNpZmllZCBrZXkgb25seSBpZiBjdXJyZW50bHkgbWFwcGVkIHRvIHRoZQogICAgICogc3BlY2lmaWVkIHZhbHVlLgogICAgICoKICAgICAqIFRoaXMgcGVyZm9ybXMgYSBzdHJpY3QgdHlwZSBjaGVjayBvbiB0aGUgdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5LWtleSAka2V5IFRoZSBrZXkgdG8gcmVtb3ZlIGZyb20gdGhlIG1hcC4KICAgICAqIEBwYXJhbSBUICRvbGRWYWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guCiAgICAgKiBAcGFyYW0gVCAkbmV3VmFsdWUgVGhlIHZhbHVlIHRvIHVzZSBhcyBhIHJlcGxhY2VtZW50LgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIGlmIHRoZSB2YWx1ZSB3YXMgcmVwbGFjZWQuCiAgICAgKi8KICAgIC8vIHBocGNzOmlnbm9yZSBTbGV2b21hdENvZGluZ1N0YW5kYXJkLlR5cGVIaW50cy5QYXJhbWV0ZXJUeXBlSGludC5NaXNzaW5nTmF0aXZlVHlwZUhpbnQKICAgIHB1YmxpYyBmdW5jdGlvbiByZXBsYWNlSWYoJGtleSwgJG9sZFZhbHVlLCAkbmV3VmFsdWUpOiBib29sOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Map/NamedParameterMap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXE1hcDsKCnVzZSBSYW1zZXlcQ29sbGVjdGlvblxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgUmFtc2V5XENvbGxlY3Rpb25cVG9vbFxUeXBlVHJhaXQ7CnVzZSBSYW1zZXlcQ29sbGVjdGlvblxUb29sXFZhbHVlVG9TdHJpbmdUcmFpdDsKCnVzZSBmdW5jdGlvbiBhcnJheV9jb21iaW5lOwp1c2UgZnVuY3Rpb24gYXJyYXlfa2V5X2V4aXN0czsKdXNlIGZ1bmN0aW9uIGlzX2ludDsKdXNlIGZ1bmN0aW9uIHZhcl9leHBvcnQ7CgovKioKICogYE5hbWVkUGFyYW1ldGVyTWFwYCByZXByZXNlbnRzIGEgbWFwcGluZyBvZiB2YWx1ZXMgdG8gYSBzZXQgb2YgbmFtZWQga2V5cwogKiB0aGF0IG1heSBvcHRpb25hbGx5IGJlIHR5cGVkCiAqCiAqIEBleHRlbmRzIEFic3RyYWN0TWFwPG1peGVkPgogKi8KY2xhc3MgTmFtZWRQYXJhbWV0ZXJNYXAgZXh0ZW5kcyBBYnN0cmFjdE1hcAp7CiAgICB1c2UgVHlwZVRyYWl0OwogICAgdXNlIFZhbHVlVG9TdHJpbmdUcmFpdDsKCiAgICAvKioKICAgICAqIE5hbWVkIHBhcmFtZXRlcnMgZGVmaW5lZCBmb3IgdGhpcyBtYXAuCiAgICAgKgogICAgICogQHZhciBhcnJheTxzdHJpbmcsIHN0cmluZz4KICAgICAqLwogICAgcHJvdGVjdGVkIGFycmF5ICRuYW1lZFBhcmFtZXRlcnM7CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IGBOYW1lZFBhcmFtZXRlck1hcGAuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5PGFycmF5LWtleSwgc3RyaW5nPiAkbmFtZWRQYXJhbWV0ZXJzIFRoZSBuYW1lZCBwYXJhbWV0ZXJzIGRlZmluZWQgZm9yIHRoaXMgbWFwLgogICAgICogQHBhcmFtIGFycmF5PGFycmF5LWtleSwgbWl4ZWQ+ICRkYXRhIEFuIGluaXRpYWwgc2V0IG9mIGRhdGEgdG8gc2V0IG9uIHRoaXMgbWFwLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJG5hbWVkUGFyYW1ldGVycywgYXJyYXkgJGRhdGEgPSBbXSkKICAgIHsKICAgICAgICAkdGhpcy0+bmFtZWRQYXJhbWV0ZXJzID0gJHRoaXMtPmZpbHRlck5hbWVkUGFyYW1ldGVycygkbmFtZWRQYXJhbWV0ZXJzKTsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRkYXRhKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgbmFtZWQgcGFyYW1ldGVycyBzZXQgZm9yIHRoaXMgYE5hbWVkUGFyYW1ldGVyTWFwYC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5PHN0cmluZywgc3RyaW5nPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZWRQYXJhbWV0ZXJzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5uYW1lZFBhcmFtZXRlcnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0U2V0KCRvZmZzZXQsICR2YWx1ZSk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoJG9mZnNldCA9PT0gbnVsbCkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ01hcCBlbGVtZW50cyBhcmUga2V5L3ZhbHVlIHBhaXJzOyBhIGtleSBtdXN0IGJlIHByb3ZpZGVkIGZvciAnCiAgICAgICAgICAgICAgICAuICd2YWx1ZSAnIC4gdmFyX2V4cG9ydCgkdmFsdWUsIHRydWUpLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRvZmZzZXQsICR0aGlzLT5uYW1lZFBhcmFtZXRlcnMpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnQXR0ZW1wdGluZyB0byBzZXQgdmFsdWUgZm9yIHVuY29uZmlndXJlZCBwYXJhbWV0ZXIgXCcnCiAgICAgICAgICAgICAgICAuICRvZmZzZXQgLiAnXCcnLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT5jaGVja1R5cGUoJHRoaXMtPm5hbWVkUGFyYW1ldGVyc1skb2Zmc2V0XSwgJHZhbHVlKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdWYWx1ZSBmb3IgXCcnIC4gJG9mZnNldCAuICdcJyBtdXN0IGJlIG9mIHR5cGUgJwogICAgICAgICAgICAgICAgLiAkdGhpcy0+bmFtZWRQYXJhbWV0ZXJzWyRvZmZzZXRdIC4gJzsgdmFsdWUgaXMgJwogICAgICAgICAgICAgICAgLiAkdGhpcy0+dG9vbFZhbHVlVG9TdHJpbmcoJHZhbHVlKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5kYXRhWyRvZmZzZXRdID0gJHZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogR2l2ZW4gYW4gYXJyYXkgb2YgbmFtZWQgcGFyYW1ldGVycywgY29uc3RydWN0cyBhIHByb3BlciBtYXBwaW5nIG9mCiAgICAgKiBuYW1lZCBwYXJhbWV0ZXJzIHRvIHR5cGVzLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheTxhcnJheS1rZXksIHN0cmluZz4gJG5hbWVkUGFyYW1ldGVycyBUaGUgbmFtZWQgcGFyYW1ldGVycyB0byBmaWx0ZXIuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheTxzdHJpbmcsIHN0cmluZz4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGZpbHRlck5hbWVkUGFyYW1ldGVycyhhcnJheSAkbmFtZWRQYXJhbWV0ZXJzKTogYXJyYXkKICAgIHsKICAgICAgICAkbmFtZXMgPSBbXTsKICAgICAgICAkdHlwZXMgPSBbXTsKCiAgICAgICAgZm9yZWFjaCAoJG5hbWVkUGFyYW1ldGVycyBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICBpZiAoaXNfaW50KCRrZXkpKSB7CiAgICAgICAgICAgICAgICAkbmFtZXNbXSA9ICR2YWx1ZTsKICAgICAgICAgICAgICAgICR0eXBlc1tdID0gJ21peGVkJzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRuYW1lc1tdID0gJGtleTsKICAgICAgICAgICAgICAgICR0eXBlc1tdID0gJHZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYXJyYXlfY29tYmluZSgkbmFtZXMsICR0eXBlcykgPzogW107CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Map/TypedMap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXE1hcDsKCnVzZSBSYW1zZXlcQ29sbGVjdGlvblxUb29sXFR5cGVUcmFpdDsKCi8qKgogKiBBIGBUeXBlZE1hcGAgcmVwcmVzZW50cyBhIG1hcCBvZiBlbGVtZW50cyB3aGVyZSBrZXkgYW5kIHZhbHVlIGFyZSB0eXBlZC4KICoKICogRWFjaCBlbGVtZW50IGlzIGlkZW50aWZpZWQgYnkgYSBrZXkgd2l0aCBkZWZpbmVkIHR5cGUgYW5kIGEgdmFsdWUgb2YgZGVmaW5lZAogKiB0eXBlLiBUaGUga2V5cyBvZiB0aGUgbWFwIG11c3QgYmUgdW5pcXVlLiBUaGUgdmFsdWVzIG9uIHRoZSBtYXAgY2FuIGJlCiAqIHJlcGVhdGVkIGJ1dCBlYWNoIHdpdGggaXRzIG93biBkaWZmZXJlbnQga2V5LgogKgogKiBUaGUgbW9zdCBjb21tb24gY2FzZSBpcyB0byB1c2UgYSBzdHJpbmcgdHlwZSBrZXksIGJ1dCBpdCdzIG5vdCBsaW1pdGVkIHRvCiAqIHRoaXMgdHlwZSBvZiBrZXlzLgogKgogKiBUaGlzIGlzIGEgZGlyZWN0IGltcGxlbWVudGF0aW9uIG9mIGBUeXBlZE1hcEludGVyZmFjZWAsIHByb3ZpZGVkIGZvciB0aGUgc2FrZQogKiBvZiBjb252ZW5pZW5jZS4KICoKICogRXhhbXBsZSB1c2FnZToKICoKICogYGBgcGhwCiAqICRtYXAgPSBuZXcgVHlwZWRNYXAoJ3N0cmluZycsIEZvbzo6Y2xhc3MpOwogKiAkbWFwWyd4J10gPSBuZXcgRm9vKCk7CiAqIGZvcmVhY2ggKCRtYXAgYXMgJGtleSA9PiAkdmFsdWUpIHsKICogICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoICRrZXksIGl0IHdpbGwgYmUgYSBGb286OmNsYXNzCiAqIH0KICoKICogLy8gdGhpcyB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBzaW5jZSBrZXkgbXVzdCBiZSBzdHJpbmcKICogJG1hcFsxMF0gPSBuZXcgRm9vKCk7CiAqCiAqIC8vIHRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gc2luY2UgdmFsdWUgbXVzdCBiZSBhIEZvbwogKiAkbWFwWydiYXInXSA9ICdiYXInOwogKgogKiAvLyBpbml0aWFsaXplIG1hcCB3aXRoIGNvbnRlbnRzCiAqICRtYXAgPSBuZXcgVHlwZWRNYXAoJ3N0cmluZycsIEZvbzo6Y2xhc3MsIFsKICogICAgIG5ldyBGb28oKSwgbmV3IEZvbygpLCBuZXcgRm9vKCkKICogXSk7CiAqIGBgYAogKgogKiBJdCBpcyBwcmVmZXJhYmxlIHRvIHN1YmNsYXNzIGBBYnN0cmFjdFR5cGVkTWFwYCB0byBjcmVhdGUgeW91ciBvd24gdHlwZWQgbWFwCiAqIGltcGxlbWVudGF0aW9uOgogKgogKiBgYGBwaHAKICogY2xhc3MgRm9vVHlwZWRNYXAgZXh0ZW5kcyBBYnN0cmFjdFR5cGVkTWFwCiAqIHsKICogICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRLZXlUeXBlKCkKICogICAgIHsKICogICAgICAgICByZXR1cm4gJ2ludCc7CiAqICAgICB9CiAqCiAqICAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmFsdWVUeXBlKCkKICogICAgIHsKICogICAgICAgICAgcmV0dXJuIEZvbzo6Y2xhc3M7CiAqICAgICB9CiAqIH0KICogYGBgCiAqCiAqIOKApiBidXQgeW91IGFsc28gbWF5IHVzZSB0aGUgYFR5cGVkTWFwYCBjbGFzczoKICoKICogYGBgcGhwCiAqIGNsYXNzIEZvb1R5cGVkTWFwIGV4dGVuZHMgVHlwZWRNYXAKICogewogKiAgICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0b3IoYXJyYXkgJGRhdGEgPSBbXSkKICogICAgIHsKICogICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCdpbnQnLCBGb286OmNsYXNzLCAkZGF0YSk7CiAqICAgICB9CiAqIH0KICogYGBgCiAqCiAqIEB0ZW1wbGF0ZSBLIG9mIGFycmF5LWtleQogKiBAdGVtcGxhdGUgVAogKiBAZXh0ZW5kcyBBYnN0cmFjdFR5cGVkTWFwPEssIFQ+CiAqLwpjbGFzcyBUeXBlZE1hcCBleHRlbmRzIEFic3RyYWN0VHlwZWRNYXAKewogICAgdXNlIFR5cGVUcmFpdDsKCiAgICAvKioKICAgICAqIFRoZSBkYXRhIHR5cGUgb2Yga2V5cyBzdG9yZWQgaW4gdGhpcyBjb2xsZWN0aW9uLgogICAgICoKICAgICAqIEEgbWFwIGtleSdzIHR5cGUgaXMgaW1tdXRhYmxlIG9uY2UgaXQgaXMgc2V0LiBGb3IgdGhpcyByZWFzb24sIHRoaXMKICAgICAqIHByb3BlcnR5IGlzIHNldCBwcml2YXRlLgogICAgICovCiAgICBwcml2YXRlIHN0cmluZyAka2V5VHlwZTsKCiAgICAvKioKICAgICAqIFRoZSBkYXRhIHR5cGUgb2YgdmFsdWVzIHN0b3JlZCBpbiB0aGlzIGNvbGxlY3Rpb24uCiAgICAgKgogICAgICogQSBtYXAgdmFsdWUncyB0eXBlIGlzIGltbXV0YWJsZSBvbmNlIGl0IGlzIHNldC4gRm9yIHRoaXMgcmVhc29uLCB0aGlzCiAgICAgKiBwcm9wZXJ0eSBpcyBzZXQgcHJpdmF0ZS4KICAgICAqLwogICAgcHJpdmF0ZSBzdHJpbmcgJHZhbHVlVHlwZTsKCiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgYSBtYXAgb2JqZWN0IG9mIHRoZSBzcGVjaWZpZWQga2V5IGFuZCB2YWx1ZSB0eXBlcywKICAgICAqIG9wdGlvbmFsbHkgd2l0aCB0aGUgc3BlY2lmaWVkIGRhdGEuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5VHlwZSBUaGUgZGF0YSB0eXBlIG9mIHRoZSBtYXAncyBrZXlzLgogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWVUeXBlIFRoZSBkYXRhIHR5cGUgb2YgdGhlIG1hcCdzIHZhbHVlcy4KICAgICAqIEBwYXJhbSBhcnJheTxLLCBUPiAkZGF0YSBUaGUgaW5pdGlhbCBkYXRhIHRvIHNldCBmb3IgdGhpcyBtYXAuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJGtleVR5cGUsIHN0cmluZyAkdmFsdWVUeXBlLCBhcnJheSAkZGF0YSA9IFtdKQogICAgewogICAgICAgICR0aGlzLT5rZXlUeXBlID0gJGtleVR5cGU7CiAgICAgICAgJHRoaXMtPnZhbHVlVHlwZSA9ICR2YWx1ZVR5cGU7CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJGRhdGEpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRLZXlUeXBlKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+a2V5VHlwZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmFsdWVUeXBlKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWVUeXBlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Map/TypedMapInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXE1hcDsKCi8qKgogKiBBIGBUeXBlZE1hcEludGVyZmFjZWAgcmVwcmVzZW50cyBhIG1hcCBvZiBlbGVtZW50cyB3aGVyZSBrZXkgYW5kIHZhbHVlIGFyZQogKiB0eXBlZC4KICoKICogQHRlbXBsYXRlIFQKICogQGV4dGVuZHMgTWFwSW50ZXJmYWNlPFQ+CiAqLwppbnRlcmZhY2UgVHlwZWRNYXBJbnRlcmZhY2UgZXh0ZW5kcyBNYXBJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIHR5cGUgdXNlZCBvbiB0aGUga2V5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0S2V5VHlwZSgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIHR5cGUgZm9yY2VkIG9uIHRoZSB2YWx1ZXMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWYWx1ZVR5cGUoKTogc3RyaW5nOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Queue.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uOwoKdXNlIFJhbXNleVxDb2xsZWN0aW9uXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBSYW1zZXlcQ29sbGVjdGlvblxFeGNlcHRpb25cTm9TdWNoRWxlbWVudEV4Y2VwdGlvbjsKdXNlIFJhbXNleVxDb2xsZWN0aW9uXFRvb2xcVHlwZVRyYWl0Owp1c2UgUmFtc2V5XENvbGxlY3Rpb25cVG9vbFxWYWx1ZVRvU3RyaW5nVHJhaXQ7CgovKioKICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIGJhc2ljIGltcGxlbWVudGF0aW9uIG9mIGBRdWV1ZUludGVyZmFjZWAsIHRvIG1pbmltaXplCiAqIHRoZSBlZmZvcnQgcmVxdWlyZWQgdG8gaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlLgogKgogKiBAdGVtcGxhdGUgVAogKiBAZXh0ZW5kcyBBYnN0cmFjdEFycmF5PFQ+CiAqIEBpbXBsZW1lbnRzIFF1ZXVlSW50ZXJmYWNlPFQ+CiAqLwpjbGFzcyBRdWV1ZSBleHRlbmRzIEFic3RyYWN0QXJyYXkgaW1wbGVtZW50cyBRdWV1ZUludGVyZmFjZQp7CiAgICB1c2UgVHlwZVRyYWl0OwogICAgdXNlIFZhbHVlVG9TdHJpbmdUcmFpdDsKCiAgICAvKioKICAgICAqIFRoZSB0eXBlIG9mIGVsZW1lbnRzIHN0b3JlZCBpbiB0aGlzIHF1ZXVlLgogICAgICoKICAgICAqIEEgcXVldWUncyB0eXBlIGlzIGltbXV0YWJsZSBvbmNlIGl0IGlzIHNldC4gRm9yIHRoaXMgcmVhc29uLCB0aGlzCiAgICAgKiBwcm9wZXJ0eSBpcyBzZXQgcHJpdmF0ZS4KICAgICAqLwogICAgcHJpdmF0ZSBzdHJpbmcgJHF1ZXVlVHlwZTsKCiAgICAvKioKICAgICAqIFRoZSBpbmRleCBvZiB0aGUgaGVhZCBvZiB0aGUgcXVldWUuCiAgICAgKi8KICAgIHByb3RlY3RlZCBpbnQgJGluZGV4ID0gMDsKCiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgYSBxdWV1ZSBvYmplY3Qgb2YgdGhlIHNwZWNpZmllZCB0eXBlLCBvcHRpb25hbGx5IHdpdGggdGhlCiAgICAgKiBzcGVjaWZpZWQgZGF0YS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRxdWV1ZVR5cGUgVGhlIHR5cGUgKEZRQ04pIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHF1ZXVlLgogICAgICogQHBhcmFtIGFycmF5PGFycmF5LWtleSwgVD4gJGRhdGEgVGhlIGluaXRpYWwgaXRlbXMgdG8gc3RvcmUgaW4gdGhlIGNvbGxlY3Rpb24uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJHF1ZXVlVHlwZSwgYXJyYXkgJGRhdGEgPSBbXSkKICAgIHsKICAgICAgICAkdGhpcy0+cXVldWVUeXBlID0gJHF1ZXVlVHlwZTsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRkYXRhKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqCiAgICAgKiBTaW5jZSBhcmJpdHJhcnkgb2Zmc2V0cyBtYXkgbm90IGJlIG1hbmlwdWxhdGVkIGluIGEgcXVldWUsIHRoaXMgbWV0aG9kCiAgICAgKiBzZXJ2ZXMgb25seSB0byBmdWxmaWxsIHRoZSBgQXJyYXlBY2Nlc3NgIGludGVyZmFjZSByZXF1aXJlbWVudHMuIEl0IGlzCiAgICAgKiBpbnZva2VkIGJ5IG90aGVyIG9wZXJhdGlvbnMgd2hlbiBhZGRpbmcgdmFsdWVzIHRvIHRoZSBxdWV1ZS4KICAgICAqCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiAkdmFsdWUgaXMgb2YgdGhlIHdyb25nIHR5cGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFNldCgkb2Zmc2V0LCAkdmFsdWUpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5jaGVja1R5cGUoJHRoaXMtPmdldFR5cGUoKSwgJHZhbHVlKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdWYWx1ZSBtdXN0IGJlIG9mIHR5cGUgJyAuICR0aGlzLT5nZXRUeXBlKCkgLiAnOyB2YWx1ZSBpcyAnCiAgICAgICAgICAgICAgICAuICR0aGlzLT50b29sVmFsdWVUb1N0cmluZygkdmFsdWUpLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmRhdGFbXSA9ICR2YWx1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmICR2YWx1ZSBpcyBvZiB0aGUgd3JvbmcgdHlwZQogICAgICoKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoJGVsZW1lbnQpOiBib29sCiAgICB7CiAgICAgICAgJHRoaXNbXSA9ICRlbGVtZW50OwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlbGVtZW50KCkKICAgIHsKICAgICAgICAkZWxlbWVudCA9ICR0aGlzLT5wZWVrKCk7CgogICAgICAgIGlmICgkZWxlbWVudCA9PT0gbnVsbCkgewogICAgICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdDYW5cJ3QgcmV0dXJuIGVsZW1lbnQgZnJvbSBRdWV1ZS4gUXVldWUgaXMgZW1wdHkuJywKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkZWxlbWVudDsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZlcigkZWxlbWVudCk6IGJvb2wKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmFkZCgkZWxlbWVudCk7CiAgICAgICAgfSBjYXRjaCAoSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGVlaygpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5jb3VudCgpID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzWyR0aGlzLT5pbmRleF07CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcG9sbCgpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5jb3VudCgpID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgJGhlYWQgPSAkdGhpc1skdGhpcy0+aW5kZXhdOwoKICAgICAgICB1bnNldCgkdGhpc1skdGhpcy0+aW5kZXhdKTsKICAgICAgICAkdGhpcy0+aW5kZXgrKzsKCiAgICAgICAgcmV0dXJuICRoZWFkOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZSgpCiAgICB7CiAgICAgICAgJGhlYWQgPSAkdGhpcy0+cG9sbCgpOwoKICAgICAgICBpZiAoJGhlYWQgPT09IG51bGwpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24oJ0NhblwndCByZXR1cm4gZWxlbWVudCBmcm9tIFF1ZXVlLiBRdWV1ZSBpcyBlbXB0eS4nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkaGVhZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnF1ZXVlVHlwZTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/QueueInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uOwoKdXNlIFJhbXNleVxDb2xsZWN0aW9uXEV4Y2VwdGlvblxOb1N1Y2hFbGVtZW50RXhjZXB0aW9uOwp1c2UgUnVudGltZUV4Y2VwdGlvbjsKCi8qKgogKiBBIHF1ZXVlIGlzIGEgY29sbGVjdGlvbiBpbiB3aGljaCB0aGUgZW50aXRpZXMgaW4gdGhlIGNvbGxlY3Rpb24gYXJlIGtlcHQgaW4KICogb3JkZXIuCiAqCiAqIFRoZSBwcmluY2lwYWwgb3BlcmF0aW9ucyBvbiB0aGUgcXVldWUgYXJlIHRoZSBhZGRpdGlvbiBvZiBlbnRpdGllcyB0byB0aGUgZW5kCiAqICh0YWlsKSwgYWxzbyBrbm93biBhcyAqZW5xdWV1ZSosIGFuZCByZW1vdmFsIG9mIGVudGl0aWVzIGZyb20gdGhlIGZyb250CiAqIChoZWFkKSwgYWxzbyBrbm93biBhcyAqZGVxdWV1ZSouIFRoaXMgbWFrZXMgdGhlIHF1ZXVlIGEgZmlyc3QtaW4tZmlyc3Qtb3V0CiAqIChGSUZPKSBkYXRhIHN0cnVjdHVyZS4KICoKICogQmVzaWRlcyBiYXNpYyBhcnJheSBvcGVyYXRpb25zLCBxdWV1ZXMgcHJvdmlkZSBhZGRpdGlvbmFsIGluc2VydGlvbiwKICogZXh0cmFjdGlvbiwgYW5kIGluc3BlY3Rpb24gb3BlcmF0aW9ucy4gRWFjaCBvZiB0aGVzZSBtZXRob2RzIGV4aXN0cyBpbiB0d28KICogZm9ybXM6IG9uZSB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMsIHRoZSBvdGhlciByZXR1cm5zIGEKICogc3BlY2lhbCB2YWx1ZSAoZWl0aGVyIGBudWxsYCBvciBgZmFsc2VgLCBkZXBlbmRpbmcgb24gdGhlIG9wZXJhdGlvbikuIFRoZQogKiBsYXR0ZXIgZm9ybSBvZiB0aGUgaW5zZXJ0IG9wZXJhdGlvbiBpcyBkZXNpZ25lZCBzcGVjaWZpY2FsbHkgZm9yIHVzZSB3aXRoCiAqIGNhcGFjaXR5LXJlc3RyaWN0ZWQgYFF1ZXVlSW50ZXJmYWNlYCBpbXBsZW1lbnRhdGlvbnM7IGluIG1vc3QKICogaW1wbGVtZW50YXRpb25zLCBpbnNlcnQgb3BlcmF0aW9ucyBjYW5ub3QgZmFpbC4KICoKICogPHRhYmxlPgogKiA8Y2FwdGlvbj5TdW1tYXJ5IG9mIFF1ZXVlSW50ZXJmYWNlIG1ldGhvZHM8L2NhcHRpb24+CiAqIDx0aGVhZD4KICogPHRyPgogKiA8dGQ+PC90ZD4KICogPHRkPjxlbT5UaHJvd3MgZXhjZXB0aW9uPC9lbT48L3RkPgogKiA8dGQ+PGVtPlJldHVybnMgc3BlY2lhbCB2YWx1ZTwvZW0+PC90ZD4KICogPC90cj4KICogPC90aGVhZD4KICogPHRib2R5PgogKiA8dHI+CiAqIDx0aD5JbnNlcnQ8L3RoPgogKiA8dGQ+PGNvZGU+YWRkKCk8L2NvZGU+PC90ZD4KICogPHRkPjxjb2RlPm9mZmVyKCk8L2NvZGU+PC90ZD4KICogPC90cj4KICogPHRyPgogKiA8dGg+UmVtb3ZlPC90aD4KICogPHRkPjxjb2RlPnJlbW92ZSgpPC9jb2RlPjwvdGQ+CiAqIDx0ZD48Y29kZT5wb2xsKCk8L2NvZGU+PC90ZD4KICogPC90cj4KICogPHRyPgogKiA8dGg+RXhhbWluZTwvdGg+CiAqIDx0ZD48Y29kZT5lbGVtZW50KCk8L2NvZGU+PC90ZD4KICogPHRkPjxjb2RlPnBlZWsoKTwvY29kZT48L3RkPgogKiA8L3RyPgogKiA8L3Rib2R5PgogKiA8L3RhYmxlPgogKgogKiBRdWV1ZXMgdHlwaWNhbGx5LCBidXQgZG8gbm90IG5lY2Vzc2FyaWx5LCBvcmRlciBlbGVtZW50cyBpbiBhIEZJRk8KICogKGZpcnN0LWluLWZpcnN0LW91dCkgbWFubmVyLiBBbW9uZyB0aGUgZXhjZXB0aW9ucyBhcmUgcHJpb3JpdHkgcXVldWVzLCB3aGljaAogKiBvcmRlciBlbGVtZW50cyBhY2NvcmRpbmcgdG8gYSBzdXBwbGllZCBjb21wYXJhdG9yLCBvciB0aGUgZWxlbWVudHMnIG5hdHVyYWwKICogb3JkZXJpbmcsIGFuZCBMSUZPIHF1ZXVlcyAob3Igc3RhY2tzKSB3aGljaCBvcmRlciB0aGUgZWxlbWVudHMgTElGTwogKiAobGFzdC1pbi1maXJzdC1vdXQpLiBXaGF0ZXZlciB0aGUgb3JkZXJpbmcgdXNlZCwgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlIGlzCiAqIHRoYXQgZWxlbWVudCB3aGljaCB3b3VsZCBiZSByZW1vdmVkIGJ5IGEgY2FsbCB0byByZW1vdmUoKSBvciBwb2xsKCkuIEluIGEKICogRklGTyBxdWV1ZSwgYWxsIG5ldyBlbGVtZW50cyBhcmUgaW5zZXJ0ZWQgYXQgdGhlIHRhaWwgb2YgdGhlIHF1ZXVlLiBPdGhlcgogKiBraW5kcyBvZiBxdWV1ZXMgbWF5IHVzZSBkaWZmZXJlbnQgcGxhY2VtZW50IHJ1bGVzLiBFdmVyeSBgUXVldWVJbnRlcmZhY2VgCiAqIGltcGxlbWVudGF0aW9uIG11c3Qgc3BlY2lmeSBpdHMgb3JkZXJpbmcgcHJvcGVydGllcy4KICoKICogVGhlIGBvZmZlcigpYCBtZXRob2QgaW5zZXJ0cyBhbiBlbGVtZW50IGlmIHBvc3NpYmxlLCBvdGhlcndpc2UgcmV0dXJuaW5nCiAqIGBmYWxzZWAuIFRoaXMgZGlmZmVycyBmcm9tIHRoZSBgYWRkKClgIG1ldGhvZCwgd2hpY2ggY2FuIGZhaWwgdG8gYWRkIGFuCiAqIGVsZW1lbnQgb25seSBieSB0aHJvd2luZyBhbiB1bmNoZWNrZWQgZXhjZXB0aW9uLiBUaGUgYG9mZmVyKClgIG1ldGhvZCBpcwogKiBkZXNpZ25lZCBmb3IgdXNlIHdoZW4gZmFpbHVyZSBpcyBhIG5vcm1hbCwgcmF0aGVyIHRoYW4gZXhjZXB0aW9uYWwKICogb2NjdXJyZW5jZSwgZm9yIGV4YW1wbGUsIGluIGZpeGVkLWNhcGFjaXR5IChvciAiYm91bmRlZCIpIHF1ZXVlcy4KICoKICogVGhlIGByZW1vdmUoKWAgYW5kIGBwb2xsKClgIG1ldGhvZHMgcmVtb3ZlIGFuZCByZXR1cm4gdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLgogKiBFeGFjdGx5IHdoaWNoIGVsZW1lbnQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBxdWV1ZSBpcyBhIGZ1bmN0aW9uIG9mIHRoZSBxdWV1ZSdzCiAqIG9yZGVyaW5nIHBvbGljeSwgd2hpY2ggZGlmZmVycyBmcm9tIGltcGxlbWVudGF0aW9uIHRvIGltcGxlbWVudGF0aW9uLiBUaGUKICogYHJlbW92ZSgpYCBhbmQgYHBvbGwoKWAgbWV0aG9kcyBkaWZmZXIgb25seSBpbiB0aGVpciBiZWhhdmlvciB3aGVuIHRoZSBxdWV1ZQogKiBpcyBlbXB0eTogdGhlIGByZW1vdmUoKWAgbWV0aG9kIHRocm93cyBhbiBleGNlcHRpb24sIHdoaWxlIHRoZSBgcG9sbCgpYAogKiBtZXRob2QgcmV0dXJucyBgbnVsbGAuCiAqCiAqIFRoZSBgZWxlbWVudCgpYCBhbmQgYHBlZWsoKWAgbWV0aG9kcyByZXR1cm4sIGJ1dCBkbyBub3QgcmVtb3ZlLCB0aGUgaGVhZCBvZgogKiB0aGUgcXVldWUuCiAqCiAqIGBRdWV1ZUludGVyZmFjZWAgaW1wbGVtZW50YXRpb25zIGdlbmVyYWxseSBkbyBub3QgYWxsb3cgaW5zZXJ0aW9uIG9mIGBudWxsYAogKiBlbGVtZW50cywgYWx0aG91Z2ggc29tZSBpbXBsZW1lbnRhdGlvbnMgZG8gbm90IHByb2hpYml0IGluc2VydGlvbiBvZiBgbnVsbGAuCiAqIEV2ZW4gaW4gdGhlIGltcGxlbWVudGF0aW9ucyB0aGF0IHBlcm1pdCBpdCwgYG51bGxgIHNob3VsZCBub3QgYmUgaW5zZXJ0ZWQKICogaW50byBhIHF1ZXVlLCBhcyBgbnVsbGAgaXMgYWxzbyB1c2VkIGFzIGEgc3BlY2lhbCByZXR1cm4gdmFsdWUgYnkgdGhlCiAqIGBwb2xsKClgIG1ldGhvZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBxdWV1ZSBjb250YWlucyBubyBlbGVtZW50cy4KICoKICogQHRlbXBsYXRlIFQKICogQGV4dGVuZHMgQXJyYXlJbnRlcmZhY2U8VD4KICovCmludGVyZmFjZSBRdWV1ZUludGVyZmFjZSBleHRlbmRzIEFycmF5SW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogRW5zdXJlcyB0aGF0IHRoaXMgcXVldWUgY29udGFpbnMgdGhlIHNwZWNpZmllZCBlbGVtZW50IChvcHRpb25hbAogICAgICogb3BlcmF0aW9uKS4KICAgICAqCiAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIHF1ZXVlIGNoYW5nZWQgYXMgYSByZXN1bHQgb2YgdGhlIGNhbGwuIChSZXR1cm5zCiAgICAgKiBgZmFsc2VgIGlmIHRoaXMgcXVldWUgZG9lcyBub3QgcGVybWl0IGR1cGxpY2F0ZXMgYW5kIGFscmVhZHkgY29udGFpbnMgdGhlCiAgICAgKiBzcGVjaWZpZWQgZWxlbWVudC4pCiAgICAgKgogICAgICogUXVldWVzIHRoYXQgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiBtYXkgcGxhY2UgbGltaXRhdGlvbnMgb24gd2hhdCBlbGVtZW50cwogICAgICogbWF5IGJlIGFkZGVkIHRvIHRoaXMgcXVldWUuIEluIHBhcnRpY3VsYXIsIHNvbWUgcXVldWVzIHdpbGwgcmVmdXNlIHRvIGFkZAogICAgICogYG51bGxgIGVsZW1lbnRzLCBhbmQgb3RoZXJzIHdpbGwgaW1wb3NlIHJlc3RyaWN0aW9ucyBvbiB0aGUgdHlwZSBvZgogICAgICogZWxlbWVudHMgdGhhdCBtYXkgYmUgYWRkZWQuIFF1ZXVlIGNsYXNzZXMgc2hvdWxkIGNsZWFybHkgc3BlY2lmeSBpbiB0aGVpcgogICAgICogZG9jdW1lbnRhdGlvbiBhbnkgcmVzdHJpY3Rpb25zIG9uIHdoYXQgZWxlbWVudHMgbWF5IGJlIGFkZGVkLgogICAgICoKICAgICAqIElmIGEgcXVldWUgcmVmdXNlcyB0byBhZGQgYSBwYXJ0aWN1bGFyIGVsZW1lbnQgZm9yIGFueSByZWFzb24gb3RoZXIgdGhhbgogICAgICogdGhhdCBpdCBhbHJlYWR5IGNvbnRhaW5zIHRoZSBlbGVtZW50LCBpdCBtdXN0IHRocm93IGFuIGV4Y2VwdGlvbiAocmF0aGVyCiAgICAgKiB0aGFuIHJldHVybmluZyBgZmFsc2VgKS4gVGhpcyBwcmVzZXJ2ZXMgdGhlIGludmFyaWFudCB0aGF0IGEgcXVldWUgYWx3YXlzCiAgICAgKiBjb250YWlucyB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgYWZ0ZXIgdGhpcyBjYWxsIHJldHVybnMuCiAgICAgKgogICAgICogQHNlZSBzZWxmOjpvZmZlcigpCiAgICAgKgogICAgICogQHBhcmFtIFQgJGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gYWRkIHRvIHRoaXMgcXVldWUuCiAgICAgKgogICAgICogQHJldHVybiBib29sIGB0cnVlYCBpZiB0aGlzIHF1ZXVlIGNoYW5nZWQgYXMgYSByZXN1bHQgb2YgdGhlIGNhbGwuCiAgICAgKgogICAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIGlmIGEgcXVldWUgcmVmdXNlcyB0byBhZGQgYSBwYXJ0aWN1bGFyIGVsZW1lbnQKICAgICAqICAgICBmb3IgYW55IHJlYXNvbiBvdGhlciB0aGFuIHRoYXQgaXQgYWxyZWFkeSBjb250YWlucyB0aGUgZWxlbWVudC4KICAgICAqICAgICBJbXBsZW1lbnRhdGlvbnMgc2hvdWxkIHVzZSBhIG1vcmUtc3BlY2lmaWMgZXhjZXB0aW9uIHRoYXQgZXh0ZW5kcwogICAgICogICAgIGBcUnVudGltZUV4Y2VwdGlvbmAuCiAgICAgKi8KICAgIC8vIHBocGNzOmlnbm9yZSBTbGV2b21hdENvZGluZ1N0YW5kYXJkLlR5cGVIaW50cy5QYXJhbWV0ZXJUeXBlSGludC5NaXNzaW5nTmF0aXZlVHlwZUhpbnQKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoJGVsZW1lbnQpOiBib29sOwoKICAgIC8qKgogICAgICogUmV0cmlldmVzLCBidXQgZG9lcyBub3QgcmVtb3ZlLCB0aGUgaGVhZCBvZiB0aGlzIHF1ZXVlLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIGRpZmZlcnMgZnJvbSBgcGVlaygpYCBvbmx5IGluIHRoYXQgaXQgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZgogICAgICogdGhpcyBxdWV1ZSBpcyBlbXB0eS4KICAgICAqCiAgICAgKiBAc2VlIHNlbGY6OnBlZWsoKQogICAgICoKICAgICAqIEByZXR1cm4gVCB0aGUgaGVhZCBvZiB0aGlzIHF1ZXVlLgogICAgICoKICAgICAqIEB0aHJvd3MgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiBpZiB0aGlzIHF1ZXVlIGlzIGVtcHR5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZWxlbWVudCgpOwoKICAgIC8qKgogICAgICogSW5zZXJ0cyB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgaW50byB0aGlzIHF1ZXVlIGlmIGl0IGlzIHBvc3NpYmxlIHRvIGRvIHNvCiAgICAgKiBpbW1lZGlhdGVseSB3aXRob3V0IHZpb2xhdGluZyBjYXBhY2l0eSByZXN0cmljdGlvbnMuCiAgICAgKgogICAgICogV2hlbiB1c2luZyBhIGNhcGFjaXR5LXJlc3RyaWN0ZWQgcXVldWUsIHRoaXMgbWV0aG9kIGlzIGdlbmVyYWxseQogICAgICogcHJlZmVyYWJsZSB0byBgYWRkKClgLCB3aGljaCBjYW4gZmFpbCB0byBpbnNlcnQgYW4gZWxlbWVudCBvbmx5IGJ5CiAgICAgKiB0aHJvd2luZyBhbiBleGNlcHRpb24uCiAgICAgKgogICAgICogQHNlZSBzZWxmOjphZGQoKQogICAgICoKICAgICAqIEBwYXJhbSBUICRlbGVtZW50IFRoZSBlbGVtZW50IHRvIGFkZCB0byB0aGlzIHF1ZXVlLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBgdHJ1ZWAgaWYgdGhlIGVsZW1lbnQgd2FzIGFkZGVkIHRvIHRoaXMgcXVldWUsIGVsc2UgYGZhbHNlYC4KICAgICAqLwogICAgLy8gcGhwY3M6aWdub3JlIFNsZXZvbWF0Q29kaW5nU3RhbmRhcmQuVHlwZUhpbnRzLlBhcmFtZXRlclR5cGVIaW50Lk1pc3NpbmdOYXRpdmVUeXBlSGludAogICAgcHVibGljIGZ1bmN0aW9uIG9mZmVyKCRlbGVtZW50KTogYm9vbDsKCiAgICAvKioKICAgICAqIFJldHJpZXZlcywgYnV0IGRvZXMgbm90IHJlbW92ZSwgdGhlIGhlYWQgb2YgdGhpcyBxdWV1ZSwgb3IgcmV0dXJucyBgbnVsbGAKICAgICAqIGlmIHRoaXMgcXVldWUgaXMgZW1wdHkuCiAgICAgKgogICAgICogQHNlZSBzZWxmOjplbGVtZW50KCkKICAgICAqCiAgICAgKiBAcmV0dXJuIFR8bnVsbCB0aGUgaGVhZCBvZiB0aGlzIHF1ZXVlLCBvciBgbnVsbGAgaWYgdGhpcyBxdWV1ZSBpcyBlbXB0eS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBlZWsoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlcyBhbmQgcmVtb3ZlcyB0aGUgaGVhZCBvZiB0aGlzIHF1ZXVlLCBvciByZXR1cm5zIGBudWxsYAogICAgICogaWYgdGhpcyBxdWV1ZSBpcyBlbXB0eS4KICAgICAqCiAgICAgKiBAc2VlIHNlbGY6OnJlbW92ZSgpCiAgICAgKgogICAgICogQHJldHVybiBUfG51bGwgdGhlIGhlYWQgb2YgdGhpcyBxdWV1ZSwgb3IgYG51bGxgIGlmIHRoaXMgcXVldWUgaXMgZW1wdHkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwb2xsKCk7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZXMgYW5kIHJlbW92ZXMgdGhlIGhlYWQgb2YgdGhpcyBxdWV1ZS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gYHBvbGwoKWAgb25seSBpbiB0aGF0IGl0IHRocm93cyBhbiBleGNlcHRpb24gaWYKICAgICAqIHRoaXMgcXVldWUgaXMgZW1wdHkuCiAgICAgKgogICAgICogQHNlZSBzZWxmOjpwb2xsKCkKICAgICAqCiAgICAgKiBAcmV0dXJuIFQgdGhlIGhlYWQgb2YgdGhpcyBxdWV1ZS4KICAgICAqCiAgICAgKiBAdGhyb3dzIE5vU3VjaEVsZW1lbnRFeGNlcHRpb24gaWYgdGhpcyBxdWV1ZSBpcyBlbXB0eS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZSgpOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdHlwZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBxdWV1ZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKTogc3RyaW5nOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Set.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uOwoKLyoqCiAqIEEgc2V0IGlzIGEgY29sbGVjdGlvbiB0aGF0IGNvbnRhaW5zIG5vIGR1cGxpY2F0ZSBlbGVtZW50cy4KICoKICogR3JlYXQgY2FyZSBtdXN0IGJlIGV4ZXJjaXNlZCBpZiBtdXRhYmxlIG9iamVjdHMgYXJlIHVzZWQgYXMgc2V0IGVsZW1lbnRzLgogKiBUaGUgYmVoYXZpb3Igb2YgYSBzZXQgaXMgbm90IHNwZWNpZmllZCBpZiB0aGUgdmFsdWUgb2YgYW4gb2JqZWN0IGlzIGNoYW5nZWQKICogaW4gYSBtYW5uZXIgdGhhdCBhZmZlY3RzIGVxdWFscyBjb21wYXJpc29ucyB3aGlsZSB0aGUgb2JqZWN0IGlzIGFuIGVsZW1lbnQgaW4KICogdGhlIHNldC4KICoKICogRXhhbXBsZSB1c2FnZToKICoKICogYGBgIHBocAogKiAkZm9vID0gbmV3IFxNeVxGb28oKTsKICogJHNldCA9IG5ldyBTZXQoXE15XEZvbzo6Y2xhc3MpOwogKgogKiAkc2V0LT5hZGQoJGZvbyk7IC8vIHJldHVybnMgVFJVRSwgdGhlIGVsZW1lbnQgZG9uJ3QgZXhpc3RzCiAqICRzZXQtPmFkZCgkZm9vKTsgLy8gcmV0dXJucyBGQUxTRSwgdGhlIGVsZW1lbnQgYWxyZWFkeSBleGlzdHMKICoKICogJGJhciA9IG5ldyBcTXlcRm9vKCk7CiAqICRzZXQtPmFkZCgkYmFyKTsgLy8gcmV0dXJucyBUUlVFLCAkYmFyICE9PSAkZm9vCiAqIGBgYAogKgogKiBAdGVtcGxhdGUgVAogKiBAZXh0ZW5kcyBBYnN0cmFjdFNldDxUPgogKi8KY2xhc3MgU2V0IGV4dGVuZHMgQWJzdHJhY3RTZXQKewogICAgLyoqCiAgICAgKiBUaGUgdHlwZSBvZiBlbGVtZW50cyBzdG9yZWQgaW4gdGhpcyBzZXQKICAgICAqCiAgICAgKiBBIHNldCdzIHR5cGUgaXMgaW1tdXRhYmxlLiBGb3IgdGhpcyByZWFzb24sIHRoaXMgcHJvcGVydHkgaXMgcHJpdmF0ZS4KICAgICAqLwogICAgcHJpdmF0ZSBzdHJpbmcgJHNldFR5cGU7CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIGEgc2V0IG9iamVjdCBvZiB0aGUgc3BlY2lmaWVkIHR5cGUsIG9wdGlvbmFsbHkgd2l0aCB0aGUKICAgICAqIHNwZWNpZmllZCBkYXRhLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNldFR5cGUgVGhlIHR5cGUgKEZRQ04pIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNldC4KICAgICAqIEBwYXJhbSBhcnJheTxhcnJheS1rZXksIFQ+ICRkYXRhIFRoZSBpbml0aWFsIGl0ZW1zIHRvIHN0b3JlIGluIHRoZSBzZXQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJHNldFR5cGUsIGFycmF5ICRkYXRhID0gW10pCiAgICB7CiAgICAgICAgJHRoaXMtPnNldFR5cGUgPSAkc2V0VHlwZTsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRkYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnNldFR5cGU7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Tool/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Tool/TypeTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXFRvb2w7Cgp1c2UgZnVuY3Rpb24gaXNfYXJyYXk7CnVzZSBmdW5jdGlvbiBpc19ib29sOwp1c2UgZnVuY3Rpb24gaXNfY2FsbGFibGU7CnVzZSBmdW5jdGlvbiBpc19mbG9hdDsKdXNlIGZ1bmN0aW9uIGlzX2ludDsKdXNlIGZ1bmN0aW9uIGlzX251bWVyaWM7CnVzZSBmdW5jdGlvbiBpc19vYmplY3Q7CnVzZSBmdW5jdGlvbiBpc19yZXNvdXJjZTsKdXNlIGZ1bmN0aW9uIGlzX3NjYWxhcjsKdXNlIGZ1bmN0aW9uIGlzX3N0cmluZzsKCi8qKgogKiBQcm92aWRlcyBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIHZhbHVlcyBmb3Igc3BlY2lmaWMgdHlwZXMuCiAqLwp0cmFpdCBUeXBlVHJhaXQKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB2YWx1ZSBpcyBvZiB0aGUgc3BlY2lmaWVkIHR5cGUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdHlwZSBUaGUgdHlwZSB0byBjaGVjayB0aGUgdmFsdWUgYWdhaW5zdC4KICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLgogICAgICovCiAgICAvLyBwaHBjczppZ25vcmUgU2xldm9tYXRDb2RpbmdTdGFuZGFyZC5UeXBlSGludHMuUGFyYW1ldGVyVHlwZUhpbnQuTWlzc2luZ05hdGl2ZVR5cGVIaW50CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tUeXBlKHN0cmluZyAkdHlwZSwgJHZhbHVlKTogYm9vbAogICAgewogICAgICAgIHN3aXRjaCAoJHR5cGUpIHsKICAgICAgICAgICAgY2FzZSAnYXJyYXknOgogICAgICAgICAgICAgICAgcmV0dXJuIGlzX2FycmF5KCR2YWx1ZSk7CiAgICAgICAgICAgIGNhc2UgJ2Jvb2wnOgogICAgICAgICAgICBjYXNlICdib29sZWFuJzoKICAgICAgICAgICAgICAgIHJldHVybiBpc19ib29sKCR2YWx1ZSk7CiAgICAgICAgICAgIGNhc2UgJ2NhbGxhYmxlJzoKICAgICAgICAgICAgICAgIHJldHVybiBpc19jYWxsYWJsZSgkdmFsdWUpOwogICAgICAgICAgICBjYXNlICdmbG9hdCc6CiAgICAgICAgICAgIGNhc2UgJ2RvdWJsZSc6CiAgICAgICAgICAgICAgICByZXR1cm4gaXNfZmxvYXQoJHZhbHVlKTsKICAgICAgICAgICAgY2FzZSAnaW50JzoKICAgICAgICAgICAgY2FzZSAnaW50ZWdlcic6CiAgICAgICAgICAgICAgICByZXR1cm4gaXNfaW50KCR2YWx1ZSk7CiAgICAgICAgICAgIGNhc2UgJ251bGwnOgogICAgICAgICAgICAgICAgcmV0dXJuICR2YWx1ZSA9PT0gbnVsbDsKICAgICAgICAgICAgY2FzZSAnbnVtZXJpYyc6CiAgICAgICAgICAgICAgICByZXR1cm4gaXNfbnVtZXJpYygkdmFsdWUpOwogICAgICAgICAgICBjYXNlICdvYmplY3QnOgogICAgICAgICAgICAgICAgcmV0dXJuIGlzX29iamVjdCgkdmFsdWUpOwogICAgICAgICAgICBjYXNlICdyZXNvdXJjZSc6CiAgICAgICAgICAgICAgICByZXR1cm4gaXNfcmVzb3VyY2UoJHZhbHVlKTsKICAgICAgICAgICAgY2FzZSAnc2NhbGFyJzoKICAgICAgICAgICAgICAgIHJldHVybiBpc19zY2FsYXIoJHZhbHVlKTsKICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzoKICAgICAgICAgICAgICAgIHJldHVybiBpc19zdHJpbmcoJHZhbHVlKTsKICAgICAgICAgICAgY2FzZSAnbWl4ZWQnOgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICByZXR1cm4gJHZhbHVlIGluc3RhbmNlb2YgJHR5cGU7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Tool/ValueExtractorTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXFRvb2w7Cgp1c2UgUmFtc2V5XENvbGxlY3Rpb25cRXhjZXB0aW9uXFZhbHVlRXh0cmFjdGlvbkV4Y2VwdGlvbjsKCnVzZSBmdW5jdGlvbiBnZXRfY2xhc3M7CnVzZSBmdW5jdGlvbiBpc19vYmplY3Q7CnVzZSBmdW5jdGlvbiBtZXRob2RfZXhpc3RzOwp1c2UgZnVuY3Rpb24gcHJvcGVydHlfZXhpc3RzOwp1c2UgZnVuY3Rpb24gc3ByaW50ZjsKCi8qKgogKiBQcm92aWRlcyBmdW5jdGlvbmFsaXR5IHRvIGV4dHJhY3QgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgb3IgbWV0aG9kIGZyb20gYW4gb2JqZWN0LgogKi8KdHJhaXQgVmFsdWVFeHRyYWN0b3JUcmFpdAp7CiAgICAvKioKICAgICAqIEV4dHJhY3RzIHRoZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gcHJvcGVydHkgb3IgbWV0aG9kIGZyb20gdGhlIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG9iamVjdCBUaGUgb2JqZWN0IHRvIGV4dHJhY3QgdGhlIHZhbHVlIGZyb20uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwcm9wZXJ0eU9yTWV0aG9kIFRoZSBwcm9wZXJ0eSBvciBtZXRob2QgZm9yIHdoaWNoIHRoZQogICAgICogICAgIHZhbHVlIHNob3VsZCBiZSBleHRyYWN0ZWQuCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZCB0aGUgdmFsdWUgZXh0cmFjdGVkIGZyb20gdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBvciBtZXRob2QuCiAgICAgKgogICAgICogQHRocm93cyBWYWx1ZUV4dHJhY3Rpb25FeGNlcHRpb24gaWYgdGhlIG1ldGhvZCBvciBwcm9wZXJ0eSBpcyBub3QgZGVmaW5lZC4KICAgICAqLwogICAgLy8gcGhwY3M6aWdub3JlIFNsZXZvbWF0Q29kaW5nU3RhbmRhcmQuVHlwZUhpbnRzLlBhcmFtZXRlclR5cGVIaW50Lk1pc3NpbmdOYXRpdmVUeXBlSGludAogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGV4dHJhY3RWYWx1ZSgkb2JqZWN0LCBzdHJpbmcgJHByb3BlcnR5T3JNZXRob2QpCiAgICB7CiAgICAgICAgaWYgKCFpc19vYmplY3QoJG9iamVjdCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFZhbHVlRXh0cmFjdGlvbkV4Y2VwdGlvbignVW5hYmxlIHRvIGV4dHJhY3QgYSB2YWx1ZSBmcm9tIGEgbm9uLW9iamVjdCcpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHByb3BlcnR5X2V4aXN0cygkb2JqZWN0LCAkcHJvcGVydHlPck1ldGhvZCkpIHsKICAgICAgICAgICAgcmV0dXJuICRvYmplY3QtPiRwcm9wZXJ0eU9yTWV0aG9kOwogICAgICAgIH0KCiAgICAgICAgaWYgKG1ldGhvZF9leGlzdHMoJG9iamVjdCwgJHByb3BlcnR5T3JNZXRob2QpKSB7CiAgICAgICAgICAgIHJldHVybiAkb2JqZWN0LT57JHByb3BlcnR5T3JNZXRob2R9KCk7CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgVmFsdWVFeHRyYWN0aW9uRXhjZXB0aW9uKAogICAgICAgICAgICAvLyBwaHBjczppZ25vcmUgU2xldm9tYXRDb2RpbmdTdGFuZGFyZC5DbGFzc2VzLk1vZGVybkNsYXNzTmFtZVJlZmVyZW5jZS5DbGFzc05hbWVSZWZlcmVuY2VkVmlhRnVuY3Rpb25DYWxsCiAgICAgICAgICAgIHNwcmludGYoJ01ldGhvZCBvciBwcm9wZXJ0eSAiJXMiIG5vdCBkZWZpbmVkIGluICVzJywgJHByb3BlcnR5T3JNZXRob2QsIGdldF9jbGFzcygkb2JqZWN0KSksCiAgICAgICAgKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Tool/ValueToStringTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXFRvb2w7Cgp1c2UgRGF0ZVRpbWVJbnRlcmZhY2U7Cgp1c2UgZnVuY3Rpb24gZ2V0X2NsYXNzOwp1c2UgZnVuY3Rpb24gZ2V0X3Jlc291cmNlX3R5cGU7CnVzZSBmdW5jdGlvbiBpc19hcnJheTsKdXNlIGZ1bmN0aW9uIGlzX2Jvb2w7CnVzZSBmdW5jdGlvbiBpc19jYWxsYWJsZTsKdXNlIGZ1bmN0aW9uIGlzX29iamVjdDsKdXNlIGZ1bmN0aW9uIGlzX3Jlc291cmNlOwp1c2UgZnVuY3Rpb24gaXNfc2NhbGFyOwp1c2UgZnVuY3Rpb24gdmFyX2V4cG9ydDsKCi8qKgogKiBQcm92aWRlcyBmdW5jdGlvbmFsaXR5IHRvIGV4cHJlc3MgYSB2YWx1ZSBhcyBzdHJpbmcKICovCnRyYWl0IFZhbHVlVG9TdHJpbmdUcmFpdAp7CiAgICAvKioKICAgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlLgogICAgICoKICAgICAqIC0gbnVsbCB2YWx1ZTogYCdOVUxMJ2AKICAgICAqIC0gYm9vbGVhbjogYCdUUlVFJ2AsIGAnRkFMU0UnYAogICAgICogLSBhcnJheTogYCdBcnJheSdgCiAgICAgKiAtIHNjYWxhcjogY29udmVydGVkLXZhbHVlCiAgICAgKiAtIHJlc291cmNlOiBgJyh0eXBlIHJlc291cmNlICNudW1iZXIpJ2AKICAgICAqIC0gb2JqZWN0IHdpdGggYF9fdG9TdHJpbmcoKWA6IHJlc3VsdCBvZiBgX190b1N0cmluZygpYAogICAgICogLSBvYmplY3QgRGF0ZVRpbWU6IElTTyA4NjAxIGRhdGUKICAgICAqIC0gb2JqZWN0OiBgJyhjbGFzc05hbWUgT2JqZWN0KSdgCiAgICAgKiAtIGFub255bW91cyBmdW5jdGlvbjogc2FtZSBhcyBvYmplY3QKICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIHRoZSB2YWx1ZSB0byByZXR1cm4gYXMgYSBzdHJpbmcuCiAgICAgKi8KICAgIC8vIHBocGNzOmlnbm9yZSBTbGV2b21hdENvZGluZ1N0YW5kYXJkLlR5cGVIaW50cy5QYXJhbWV0ZXJUeXBlSGludC5NaXNzaW5nTmF0aXZlVHlwZUhpbnQKICAgIHByb3RlY3RlZCBmdW5jdGlvbiB0b29sVmFsdWVUb1N0cmluZygkdmFsdWUpOiBzdHJpbmcKICAgIHsKICAgICAgICAvLyBudWxsCiAgICAgICAgaWYgKCR2YWx1ZSA9PT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gJ05VTEwnOwogICAgICAgIH0KCiAgICAgICAgLy8gYm9vbGVhbiBjb25zdGFudHMKICAgICAgICBpZiAoaXNfYm9vbCgkdmFsdWUpKSB7CiAgICAgICAgICAgIHJldHVybiAkdmFsdWUgPyAnVFJVRScgOiAnRkFMU0UnOwogICAgICAgIH0KCiAgICAgICAgLy8gYXJyYXkKICAgICAgICBpZiAoaXNfYXJyYXkoJHZhbHVlKSkgewogICAgICAgICAgICByZXR1cm4gJ0FycmF5JzsKICAgICAgICB9CgogICAgICAgIC8vIHNjYWxhciB0eXBlcyAoaW50ZWdlciwgZmxvYXQsIHN0cmluZykKICAgICAgICBpZiAoaXNfc2NhbGFyKCR2YWx1ZSkpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpICR2YWx1ZTsKICAgICAgICB9CgogICAgICAgIC8vIHJlc291cmNlCiAgICAgICAgaWYgKGlzX3Jlc291cmNlKCR2YWx1ZSkpIHsKICAgICAgICAgICAgcmV0dXJuICcoJyAuIGdldF9yZXNvdXJjZV90eXBlKCR2YWx1ZSkgLiAnIHJlc291cmNlICMnIC4gKGludCkgJHZhbHVlIC4gJyknOwogICAgICAgIH0KCiAgICAgICAgLy8gSWYgd2UgZG9uJ3Qga25vdyB3aGF0IGl0IGlzLCB1c2UgdmFyX2V4cG9ydCgpLgogICAgICAgIGlmICghaXNfb2JqZWN0KCR2YWx1ZSkpIHsKICAgICAgICAgICAgcmV0dXJuICcoJyAuIHZhcl9leHBvcnQoJHZhbHVlLCB0cnVlKSAuICcpJzsKICAgICAgICB9CgogICAgICAgIC8vIEZyb20gaGVyZSwgJHZhbHVlIHNob3VsZCBiZSBhbiBvYmplY3QuCgogICAgICAgIC8vIF9fdG9TdHJpbmcoKSBpcyBpbXBsZW1lbnRlZAogICAgICAgIGlmIChpc19jYWxsYWJsZShbJHZhbHVlLCAnX190b1N0cmluZyddKSkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgJHZhbHVlLT5fX3RvU3RyaW5nKCk7CiAgICAgICAgfQoKICAgICAgICAvLyBvYmplY3Qgb2YgdHlwZSBcRGF0ZVRpbWUKICAgICAgICBpZiAoJHZhbHVlIGluc3RhbmNlb2YgRGF0ZVRpbWVJbnRlcmZhY2UpIHsKICAgICAgICAgICAgcmV0dXJuICR2YWx1ZS0+Zm9ybWF0KCdjJyk7CiAgICAgICAgfQoKICAgICAgICAvLyB1bmtub3duIHR5cGUKICAgICAgICAvLyBwaHBjczppZ25vcmUgU2xldm9tYXRDb2RpbmdTdGFuZGFyZC5DbGFzc2VzLk1vZGVybkNsYXNzTmFtZVJlZmVyZW5jZS5DbGFzc05hbWVSZWZlcmVuY2VkVmlhRnVuY3Rpb25DYWxsCiAgICAgICAgcmV0dXJuICcoJyAuIGdldF9jbGFzcygkdmFsdWUpIC4gJyBPYmplY3QpJzsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAicmFtc2V5L3V1aWQiLAogICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAiZGVzY3JpcHRpb24iOiAiQSBQSFAgbGlicmFyeSBmb3IgZ2VuZXJhdGluZyBhbmQgd29ya2luZyB3aXRoIHVuaXZlcnNhbGx5IHVuaXF1ZSBpZGVudGlmaWVycyAoVVVJRHMpLiIsCiAgICAia2V5d29yZHMiOiBbCiAgICAgICAgInV1aWQiLAogICAgICAgICJpZGVudGlmaWVyIiwKICAgICAgICAiZ3VpZCIKICAgIF0sCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgInJlcXVpcmUiOiB7CiAgICAgICAgInBocCI6ICJeNy4yIHx8IF44LjAiLAogICAgICAgICJleHQtanNvbiI6ICIqIiwKICAgICAgICAiYnJpY2svbWF0aCI6ICJeMC44IHx8IF4wLjkiLAogICAgICAgICJyYW1zZXkvY29sbGVjdGlvbiI6ICJeMS4wIiwKICAgICAgICAic3ltZm9ueS9wb2x5ZmlsbC1jdHlwZSI6ICJeMS44IiwKICAgICAgICAic3ltZm9ueS9wb2x5ZmlsbC1waHA4MCI6ICJeMS4xNCIKICAgIH0sCiAgICAicmVwbGFjZSI6IHsKICAgICAgICAicmh1bXNhYS91dWlkIjogInNlbGYudmVyc2lvbiIKICAgIH0sCiAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgImNhcHRhaW5ob29rL2NhcHRhaW5ob29rIjogIl41LjEwIiwKICAgICAgICAiY2FwdGFpbmhvb2svcGx1Z2luLWNvbXBvc2VyIjogIl41LjMiLAogICAgICAgICJkZWFsZXJkaXJlY3QvcGhwY29kZXNuaWZmZXItY29tcG9zZXItaW5zdGFsbGVyIjogIl4wLjcuMCIsCiAgICAgICAgImRvY3RyaW5lL2Fubm90YXRpb25zIjogIl4xLjgiLAogICAgICAgICJlcmdlYm5pcy9jb21wb3Nlci1ub3JtYWxpemUiOiAiXjIuMTUiLAogICAgICAgICJtb2NrZXJ5L21vY2tlcnkiOiAiXjEuMyIsCiAgICAgICAgIm1vb250b2FzdC9tYXRoIjogIl4xLjEiLAogICAgICAgICJwYXJhZ29uaWUvcmFuZG9tLWxpYiI6ICJeMiIsCiAgICAgICAgInBocC1tb2NrL3BocC1tb2NrIjogIl4yLjIiLAogICAgICAgICJwaHAtbW9jay9waHAtbW9jay1tb2NrZXJ5IjogIl4xLjMiLAogICAgICAgICJwaHAtcGFyYWxsZWwtbGludC9waHAtcGFyYWxsZWwtbGludCI6ICJeMS4xIiwKICAgICAgICAicGhwYmVuY2gvcGhwYmVuY2giOiAiXjEuMCIsCiAgICAgICAgInBocHN0YW4vZXh0ZW5zaW9uLWluc3RhbGxlciI6ICJeMS4wIiwKICAgICAgICAicGhwc3Rhbi9waHBzdGFuIjogIl4wLjEyIiwKICAgICAgICAicGhwc3Rhbi9waHBzdGFuLW1vY2tlcnkiOiAiXjAuMTIiLAogICAgICAgICJwaHBzdGFuL3BocHN0YW4tcGhwdW5pdCI6ICJeMC4xMiIsCiAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeOC41IHx8IF45IiwKICAgICAgICAic2xldm9tYXQvY29kaW5nLXN0YW5kYXJkIjogIl43LjAiLAogICAgICAgICJzcXVpemxhYnMvcGhwX2NvZGVzbmlmZmVyIjogIl4zLjUiLAogICAgICAgICJ2aW1lby9wc2FsbSI6ICJeNC45IgogICAgfSwKICAgICJzdWdnZXN0IjogewogICAgICAgICJleHQtYmNtYXRoIjogIkVuYWJsZXMgZmFzdGVyIG1hdGggd2l0aCBhcmJpdHJhcnktcHJlY2lzaW9uIGludGVnZXJzIHVzaW5nIEJDTWF0aC4iLAogICAgICAgICJleHQtY3R5cGUiOiAiRW5hYmxlcyBmYXN0ZXIgcHJvY2Vzc2luZyBvZiBjaGFyYWN0ZXIgY2xhc3NpZmljYXRpb24gdXNpbmcgY3R5cGUgZnVuY3Rpb25zLiIsCiAgICAgICAgImV4dC1nbXAiOiAiRW5hYmxlcyBmYXN0ZXIgbWF0aCB3aXRoIGFyYml0cmFyeS1wcmVjaXNpb24gaW50ZWdlcnMgdXNpbmcgR01QLiIsCiAgICAgICAgImV4dC11dWlkIjogIkVuYWJsZXMgdGhlIHVzZSBvZiBQZWNsVXVpZFRpbWVHZW5lcmF0b3IgYW5kIFBlY2xVdWlkUmFuZG9tR2VuZXJhdG9yLiIsCiAgICAgICAgInBhcmFnb25pZS9yYW5kb20tbGliIjogIlByb3ZpZGVzIFJhbmRvbUxpYiBmb3IgdXNlIHdpdGggdGhlIFJhbmRvbUxpYkFkYXB0ZXIiLAogICAgICAgICJyYW1zZXkvdXVpZC1kb2N0cmluZSI6ICJBbGxvd3MgdGhlIHVzZSBvZiBSYW1zZXlcXFV1aWRcXFV1aWQgYXMgRG9jdHJpbmUgZmllbGQgdHlwZS4iCiAgICB9LAogICAgImNvbmZpZyI6IHsKICAgICAgICAic29ydC1wYWNrYWdlcyI6IHRydWUKICAgIH0sCiAgICAiZXh0cmEiOiB7CiAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgImRldi1tYWluIjogIjQueC1kZXYiCiAgICAgICAgfSwKICAgICAgICAiY2FwdGFpbmhvb2siOiB7CiAgICAgICAgICAgICJmb3JjZS1pbnN0YWxsIjogdHJ1ZQogICAgICAgIH0KICAgIH0sCiAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiUmFtc2V5XFxVdWlkXFwiOiAic3JjLyIKICAgICAgICB9LAogICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgInNyYy9mdW5jdGlvbnMucGhwIgogICAgICAgIF0KICAgIH0sCiAgICAiYXV0b2xvYWQtZGV2IjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIlJhbXNleVxcVXVpZFxcQmVuY2htYXJrXFwiOiAidGVzdHMvYmVuY2htYXJrLyIsCiAgICAgICAgICAgICJSYW1zZXlcXFV1aWRcXFN0YXRpY0FuYWx5c2lzXFwiOiAidGVzdHMvc3RhdGljLWFuYWx5c2lzLyIsCiAgICAgICAgICAgICJSYW1zZXlcXFV1aWRcXFRlc3RcXCI6ICJ0ZXN0cy8iCiAgICAgICAgfQogICAgfSwKICAgICJtaW5pbXVtLXN0YWJpbGl0eSI6ICJkZXYiLAogICAgInByZWZlci1zdGFibGUiOiB0cnVlLAogICAgInNjcmlwdHMiOiB7CiAgICAgICAgImFuYWx5emUiOiBbCiAgICAgICAgICAgICJAcGhwc3RhbiIsCiAgICAgICAgICAgICJAcHNhbG0iCiAgICAgICAgXSwKICAgICAgICAiYnVpbGQ6Y2xlYW4iOiAiZ2l0IGNsZWFuIC1mWCBidWlsZC8iLAogICAgICAgICJsaW50IjogInBhcmFsbGVsLWxpbnQgc3JjIHRlc3RzIiwKICAgICAgICAibGludDpwYXRocyI6ICJwYXJhbGxlbC1saW50IiwKICAgICAgICAicGhwYmVuY2giOiAicGhwYmVuY2ggcnVuIiwKICAgICAgICAicGhwY2JmIjogInBocGNiZiAtdnB3IC0tY2FjaGU9YnVpbGQvY2FjaGUvcGhwY3MuY2FjaGUiLAogICAgICAgICJwaHBjcyI6ICJwaHBjcyAtLWNhY2hlPWJ1aWxkL2NhY2hlL3BocGNzLmNhY2hlIiwKICAgICAgICAicGhwc3RhbiI6IFsKICAgICAgICAgICAgInBocHN0YW4gYW5hbHlzZSAtLW5vLXByb2dyZXNzIiwKICAgICAgICAgICAgInBocHN0YW4gYW5hbHlzZSAtYyBwaHBzdGFuLXRlc3RzLm5lb24gLS1uby1wcm9ncmVzcyIKICAgICAgICBdLAogICAgICAgICJwaHB1bml0IjogInBocHVuaXQgLS12ZXJib3NlIC0tY29sb3JzPWFsd2F5cyIsCiAgICAgICAgInBocHVuaXQtY292ZXJhZ2UiOiAicGhwdW5pdCAtLXZlcmJvc2UgLS1jb2xvcnM9YWx3YXlzIC0tY292ZXJhZ2UtaHRtbCBidWlsZC9jb3ZlcmFnZSIsCiAgICAgICAgInBzYWxtIjogInBzYWxtIC0tc2hvdy1pbmZvPWZhbHNlIC0tY29uZmlnPXBzYWxtLnhtbCIsCiAgICAgICAgInRlc3QiOiBbCiAgICAgICAgICAgICJAbGludCIsCiAgICAgICAgICAgICJAcGhwYmVuY2giLAogICAgICAgICAgICAiQHBocGNzIiwKICAgICAgICAgICAgIkBwaHBzdGFuIiwKICAgICAgICAgICAgIkBwc2FsbSIsCiAgICAgICAgICAgICJAcGhwdW5pdCIKICAgICAgICBdCiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDEyLTIwMjEgQmVuIFJhbXNleSA8YmVuQGJlbnJhbXNleS5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgxIGFsaWduPSJjZW50ZXIiPnJhbXNleS91dWlkPC9oMT4KCjxwIGFsaWduPSJjZW50ZXIiPgogICAgPHN0cm9uZz5BIFBIUCBsaWJyYXJ5IGZvciBnZW5lcmF0aW5nIGFuZCB3b3JraW5nIHdpdGggVVVJRHMuPC9zdHJvbmc+CjwvcD4KCjxwIGFsaWduPSJjZW50ZXIiPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3JhbXNleS91dWlkIj48aW1nIHNyYz0iaHR0cDovL2ltZy5zaGllbGRzLmlvL2JhZGdlL3NvdXJjZS1yYW1zZXkvdXVpZC1ibHVlLnN2Zz9zdHlsZT1mbGF0LXNxdWFyZSIgYWx0PSJTb3VyY2UgQ29kZSI+PC9hPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzL3JhbXNleS91dWlkIj48aW1nIHNyYz0iaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9wYWNrYWdpc3Qvdi9yYW1zZXkvdXVpZC5zdmc/c3R5bGU9ZmxhdC1zcXVhcmUmbGFiZWw9cmVsZWFzZSIgYWx0PSJEb3dubG9hZCBQYWNrYWdlIj48L2E+CiAgICA8YSBocmVmPSJodHRwczovL3BocC5uZXQiPjxpbWcgc3JjPSJodHRwczovL2ltZy5zaGllbGRzLmlvL3BhY2thZ2lzdC9waHAtdi9yYW1zZXkvdXVpZC5zdmc/c3R5bGU9ZmxhdC1zcXVhcmUmY29sb3JCPSUyMzg4OTJCRiIgYWx0PSJQSFAgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UiPjwvYT4KICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9yYW1zZXkvdXVpZC9ibG9iL21haW4vTElDRU5TRSI+PGltZyBzcmM9Imh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vcGFja2FnaXN0L2wvcmFtc2V5L3V1aWQuc3ZnP3N0eWxlPWZsYXQtc3F1YXJlJmNvbG9yQj1kYXJrY3lhbiIgYWx0PSJSZWFkIExpY2Vuc2UiPjwvYT4KICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9yYW1zZXkvdXVpZC9hY3Rpb25zL3dvcmtmbG93cy9jb250aW51b3VzLWludGVncmF0aW9uLnltbCI+PGltZyBzcmM9Imh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL3dvcmtmbG93L3N0YXR1cy9yYW1zZXkvdXVpZC9idWlsZC9tYWluP2xvZ289Z2l0aHViJnN0eWxlPWZsYXQtc3F1YXJlIiBhbHQ9IkJ1aWxkIFN0YXR1cyI+PC9hPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9jb2RlY292LmlvL2doL3JhbXNleS91dWlkIj48aW1nIHNyYz0iaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9jb2RlY292L2MvZ2gvcmFtc2V5L3V1aWQ/bGFiZWw9Y29kZWNvdiZsb2dvPWNvZGVjb3Ymc3R5bGU9ZmxhdC1zcXVhcmUiIGFsdD0iQ29kZWNvdiBDb2RlIENvdmVyYWdlIj48L2E+CiAgICA8YSBocmVmPSJodHRwczovL3NoZXBoZXJkLmRldi9naXRodWIvcmFtc2V5L3V1aWQiPjxpbWcgc3JjPSJodHRwczovL2ltZy5zaGllbGRzLmlvL2VuZHBvaW50P3N0eWxlPWZsYXQtc3F1YXJlJnVybD1odHRwcyUzQSUyRiUyRnNoZXBoZXJkLmRldiUyRmdpdGh1YiUyRnJhbXNleSUyRnV1aWQlMkZjb3ZlcmFnZSIgYWx0PSJQc2FsbSBUeXBlIENvdmVyYWdlIj48L2E+CjwvcD4KCnJhbXNleS91dWlkIGlzIGEgUEhQIGxpYnJhcnkgZm9yIGdlbmVyYXRpbmcgYW5kIHdvcmtpbmcgd2l0aCB1bml2ZXJzYWxseSB1bmlxdWUKaWRlbnRpZmllcnMgKFVVSURzKS4KClRoaXMgcHJvamVjdCBhZGhlcmVzIHRvIGEgW2NvZGUgb2YgY29uZHVjdF0oQ09ERV9PRl9DT05EVUNULm1kKS4KQnkgcGFydGljaXBhdGluZyBpbiB0aGlzIHByb2plY3QgYW5kIGl0cyBjb21tdW5pdHksIHlvdSBhcmUgZXhwZWN0ZWQgdG8KdXBob2xkIHRoaXMgY29kZS4KCk11Y2ggaW5zcGlyYXRpb24gZm9yIHRoaXMgbGlicmFyeSBjYW1lIGZyb20gdGhlIFtKYXZhXVtqYXZhdXVpZF0gYW5kCltQeXRob25dW3B5dXVpZF0gVVVJRCBsaWJyYXJpZXMuCgojIyBJbnN0YWxsYXRpb24KClRoZSBwcmVmZXJyZWQgbWV0aG9kIG9mIGluc3RhbGxhdGlvbiBpcyB2aWEgW0NvbXBvc2VyXVtdLiBSdW4gdGhlIGZvbGxvd2luZwpjb21tYW5kIHRvIGluc3RhbGwgdGhlIHBhY2thZ2UgYW5kIGFkZCBpdCBhcyBhIHJlcXVpcmVtZW50IHRvIHlvdXIgcHJvamVjdCdzCmBjb21wb3Nlci5qc29uYDoKCmBgYGJhc2gKY29tcG9zZXIgcmVxdWlyZSByYW1zZXkvdXVpZApgYGAKCiMjIFVwZ3JhZGluZyB0byBWZXJzaW9uIDQKClNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYSB0aG9yb3VnaCB1cGdyYWRlIGd1aWRlOgoKKiBbVXBncmFkaW5nIHJhbXNleS91dWlkIFZlcnNpb24gMyB0byA0XShodHRwczovL3V1aWQucmFtc2V5LmRldi9lbi9sYXRlc3QvdXBncmFkaW5nLzMtdG8tNC5odG1sKQoKIyMgRG9jdW1lbnRhdGlvbgoKUGxlYXNlIHNlZSA8aHR0cHM6Ly91dWlkLnJhbXNleS5kZXY+IGZvciBkb2N1bWVudGF0aW9uLCB0aXBzLCBleGFtcGxlcywgYW5kCmZyZXF1ZW50bHkgYXNrZWQgcXVlc3Rpb25zLgoKIyMgQ29udHJpYnV0aW5nCgpDb250cmlidXRpb25zIGFyZSB3ZWxjb21lISBUbyBjb250cmlidXRlLCBwbGVhc2UgZmFtaWxpYXJpemUgeW91cnNlbGYgd2l0aApbQ09OVFJJQlVUSU5HLm1kXShDT05UUklCVVRJTkcubWQpLgoKIyMgQ29vcmRpbmF0ZWQgRGlzY2xvc3VyZQoKS2VlcGluZyB1c2VyIGluZm9ybWF0aW9uIHNhZmUgYW5kIHNlY3VyZSBpcyBhIHRvcCBwcmlvcml0eSwgYW5kIHdlIHdlbGNvbWUgdGhlCmNvbnRyaWJ1dGlvbiBvZiBleHRlcm5hbCBzZWN1cml0eSByZXNlYXJjaGVycy4gSWYgeW91IGJlbGlldmUgeW91J3ZlIGZvdW5kIGEKc2VjdXJpdHkgaXNzdWUgaW4gc29mdHdhcmUgdGhhdCBpcyBtYWludGFpbmVkIGluIHRoaXMgcmVwb3NpdG9yeSwgcGxlYXNlIHJlYWQKW1NFQ1VSSVRZLm1kXVtdIGZvciBpbnN0cnVjdGlvbnMgb24gc3VibWl0dGluZyBhIHZ1bG5lcmFiaWxpdHkgcmVwb3J0LgoKIyMgcmFtc2V5L3V1aWQgZm9yIEVudGVycHJpc2UKCkF2YWlsYWJsZSBhcyBwYXJ0IG9mIHRoZSBUaWRlbGlmdCBTdWJzY3JpcHRpb24uCgpUaGUgbWFpbnRhaW5lcnMgb2YgcmFtc2V5L3V1aWQgYW5kIHRob3VzYW5kcyBvZiBvdGhlciBwYWNrYWdlcyBhcmUgd29ya2luZyB3aXRoClRpZGVsaWZ0IHRvIGRlbGl2ZXIgY29tbWVyY2lhbCBzdXBwb3J0IGFuZCBtYWludGVuYW5jZSBmb3IgdGhlIG9wZW4gc291cmNlCnBhY2thZ2VzIHlvdSB1c2UgdG8gYnVpbGQgeW91ciBhcHBsaWNhdGlvbnMuIFNhdmUgdGltZSwgcmVkdWNlIHJpc2ssIGFuZCBpbXByb3ZlCmNvZGUgaGVhbHRoLCB3aGlsZSBwYXlpbmcgdGhlIG1haW50YWluZXJzIG9mIHRoZSBleGFjdCBwYWNrYWdlcyB5b3UgdXNlLgpbTGVhcm4gbW9yZS5dKGh0dHBzOi8vdGlkZWxpZnQuY29tL3N1YnNjcmlwdGlvbi9wa2cvcGFja2FnaXN0LXJhbXNleS11dWlkP3V0bV9zb3VyY2U9dW5kZWZpbmVkJnV0bV9tZWRpdW09cmVmZXJyYWwmdXRtX2NhbXBhaWduPWVudGVycHJpc2UmdXRtX3Rlcm09cmVwbykKCiMjIENvcHlyaWdodCBhbmQgTGljZW5zZQoKVGhlIHJhbXNleS91dWlkIGxpYnJhcnkgaXMgY29weXJpZ2h0IMKpIFtCZW4gUmFtc2V5XShodHRwczovL2JlbnJhbXNleS5jb20vKSBhbmQKbGljZW5zZWQgZm9yIHVzZSB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCkuIFBsZWFzZSBzZWUgW0xJQ0VOU0VdW10gZm9yIG1vcmUKaW5mb3JtYXRpb24uCgpbcmZjNDEyMl06IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQxMjIKW2NvbmR1Y3RdOiBodHRwczovL2dpdGh1Yi5jb20vcmFtc2V5L3V1aWQvYmxvYi9tYWluL0NPREVfT0ZfQ09ORFVDVC5tZApbamF2YXV1aWRdOiBodHRwOi8vZG9jcy5vcmFjbGUuY29tL2phdmFzZS82L2RvY3MvYXBpL2phdmEvdXRpbC9VVUlELmh0bWwKW3B5dXVpZF06IGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3V1aWQuaHRtbApbY29tcG9zZXJdOiBodHRwOi8vZ2V0Y29tcG9zZXIub3JnLwpbY29udHJpYnV0aW5nLm1kXTogaHR0cHM6Ly9naXRodWIuY29tL3JhbXNleS91dWlkL2Jsb2IvbWFpbi9DT05UUklCVVRJTkcubWQKW3NlY3VyaXR5Lm1kXTogaHR0cHM6Ly9naXRodWIuY29tL3JhbXNleS91dWlkL2Jsb2IvbWFpbi9TRUNVUklUWS5tZApbbGljZW5zZV06IGh0dHBzOi8vZ2l0aHViLmNvbS9yYW1zZXkvdXVpZC9ibG9iL21haW4vTElDRU5TRQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/BinaryUtils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkOwoKLyoqCiAqIFByb3ZpZGVzIGJpbmFyeSBtYXRoIHV0aWxpdGllcwogKi8KY2xhc3MgQmluYXJ5VXRpbHMKewogICAgLyoqCiAgICAgKiBBcHBsaWVzIHRoZSBSRkMgNDEyMiB2YXJpYW50IGZpZWxkIHRvIHRoZSAxNi1iaXQgY2xvY2sgc2VxdWVuY2UKICAgICAqCiAgICAgKiBAbGluayBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MTIyI3NlY3Rpb24tNC4xLjEgUkZDIDQxMjIsIMKnIDQuMS4xOiBWYXJpYW50CiAgICAgKgogICAgICogQHBhcmFtIGludCAkY2xvY2tTZXEgVGhlIDE2LWJpdCBjbG9jayBzZXF1ZW5jZSB2YWx1ZSBiZWZvcmUgdGhlIFJGQyA0MTIyCiAgICAgKiAgICAgdmFyaWFudCBpcyBhcHBsaWVkCiAgICAgKgogICAgICogQHJldHVybiBpbnQgVGhlIDE2LWJpdCBjbG9jayBzZXF1ZW5jZSBtdWx0aXBsZXhlZCB3aXRoIHRoZSBVVUlEIHZhcmlhbnQKICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFwcGx5VmFyaWFudChpbnQgJGNsb2NrU2VxKTogaW50CiAgICB7CiAgICAgICAgJGNsb2NrU2VxID0gJGNsb2NrU2VxICYgMHgzZmZmOwogICAgICAgICRjbG9ja1NlcSB8PSAweDgwMDA7CgogICAgICAgIHJldHVybiAkY2xvY2tTZXE7CiAgICB9CgogICAgLyoqCiAgICAgKiBBcHBsaWVzIHRoZSBSRkMgNDEyMiB2ZXJzaW9uIG51bWJlciB0byB0aGUgMTYtYml0IGB0aW1lX2hpX2FuZF92ZXJzaW9uYCBmaWVsZAogICAgICoKICAgICAqIEBsaW5rIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQxMjIjc2VjdGlvbi00LjEuMyBSRkMgNDEyMiwgwqcgNC4xLjM6IFZlcnNpb24KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICR0aW1lSGkgVGhlIHZhbHVlIG9mIHRoZSAxNi1iaXQgYHRpbWVfaGlfYW5kX3ZlcnNpb25gIGZpZWxkCiAgICAgKiAgICAgYmVmb3JlIHRoZSBSRkMgNDEyMiB2ZXJzaW9uIGlzIGFwcGxpZWQKICAgICAqIEBwYXJhbSBpbnQgJHZlcnNpb24gVGhlIFJGQyA0MTIyIHZlcnNpb24gdG8gYXBwbHkgdG8gdGhlIGB0aW1lX2hpYCBmaWVsZAogICAgICoKICAgICAqIEByZXR1cm4gaW50IFRoZSAxNi1iaXQgdGltZV9oaSBmaWVsZCBvZiB0aGUgdGltZXN0YW1wIG11bHRpcGxleGVkIHdpdGgKICAgICAqICAgICB0aGUgVVVJRCB2ZXJzaW9uIG51bWJlcgogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYXBwbHlWZXJzaW9uKGludCAkdGltZUhpLCBpbnQgJHZlcnNpb24pOiBpbnQKICAgIHsKICAgICAgICAkdGltZUhpID0gJHRpbWVIaSAmIDB4MGZmZjsKICAgICAgICAkdGltZUhpIHw9ICR2ZXJzaW9uIDw8IDEyOwoKICAgICAgICByZXR1cm4gJHRpbWVIaTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Builder/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Builder/BuilderCollection.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEJ1aWxkZXI7Cgp1c2UgUmFtc2V5XENvbGxlY3Rpb25cQWJzdHJhY3RDb2xsZWN0aW9uOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXE51bWJlclxHZW5lcmljTnVtYmVyQ29udmVydGVyOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXFRpbWVcR2VuZXJpY1RpbWVDb252ZXJ0ZXI7CnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcVGltZVxQaHBUaW1lQ29udmVydGVyOwp1c2UgUmFtc2V5XFV1aWRcR3VpZFxHdWlkQnVpbGRlcjsKdXNlIFJhbXNleVxVdWlkXE1hdGhcQnJpY2tNYXRoQ2FsY3VsYXRvcjsKdXNlIFJhbXNleVxVdWlkXE5vbnN0YW5kYXJkXFV1aWRCdWlsZGVyIGFzIE5vbnN0YW5kYXJkVXVpZEJ1aWxkZXI7CnVzZSBSYW1zZXlcVXVpZFxSZmM0MTIyXFV1aWRCdWlsZGVyIGFzIFJmYzQxMjJVdWlkQnVpbGRlcjsKdXNlIFRyYXZlcnNhYmxlOwoKLyoqCiAqIEEgY29sbGVjdGlvbiBvZiBVdWlkQnVpbGRlckludGVyZmFjZSBvYmplY3RzCiAqCiAqIEBleHRlbmRzIEFic3RyYWN0Q29sbGVjdGlvbjxVdWlkQnVpbGRlckludGVyZmFjZT4KICovCmNsYXNzIEJ1aWxkZXJDb2xsZWN0aW9uIGV4dGVuZHMgQWJzdHJhY3RDb2xsZWN0aW9uCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBVdWlkQnVpbGRlckludGVyZmFjZTo6Y2xhc3M7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcHNhbG0tbXV0YXRpb24tZnJlZQogICAgICogQHBzYWxtLXN1cHByZXNzIEltcHVyZU1ldGhvZENhbGwKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBJbnZhbGlkVGVtcGxhdGVQYXJhbQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SXRlcmF0b3IoKTogVHJhdmVyc2FibGUKICAgIHsKICAgICAgICByZXR1cm4gcGFyZW50OjpnZXRJdGVyYXRvcigpOwogICAgfQoKICAgIC8qKgogICAgICogUmUtY29uc3RydWN0cyB0aGUgb2JqZWN0IGZyb20gaXRzIHNlcmlhbGl6ZWQgZm9ybQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlcmlhbGl6ZWQgVGhlIHNlcmlhbGl6ZWQgUEhQIHN0cmluZyB0byB1bnNlcmlhbGl6ZSBpbnRvCiAgICAgKiAgICAgYSBVdWlkSW50ZXJmYWNlIGluc3RhbmNlCiAgICAgKgogICAgICogQHBocGNzU3VwcHJlc3MgU2xldm9tYXRDb2RpbmdTdGFuZGFyZC5UeXBlSGludHMuUGFyYW1ldGVyVHlwZUhpbnQuTWlzc2luZ05hdGl2ZVR5cGVIaW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgUmVkdW5kYW50Q29uZGl0aW9uR2l2ZW5Eb2NibG9ja1R5cGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVuc2VyaWFsaXplKCRzZXJpYWxpemVkKTogdm9pZAogICAgewogICAgICAgIC8qKiBAdmFyIGFycmF5PGFycmF5LWtleSwgVXVpZEJ1aWxkZXJJbnRlcmZhY2U+ICRkYXRhICovCiAgICAgICAgJGRhdGEgPSB1bnNlcmlhbGl6ZSgkc2VyaWFsaXplZCwgWwogICAgICAgICAgICAnYWxsb3dlZF9jbGFzc2VzJyA9PiBbCiAgICAgICAgICAgICAgICBCcmlja01hdGhDYWxjdWxhdG9yOjpjbGFzcywKICAgICAgICAgICAgICAgIEdlbmVyaWNOdW1iZXJDb252ZXJ0ZXI6OmNsYXNzLAogICAgICAgICAgICAgICAgR2VuZXJpY1RpbWVDb252ZXJ0ZXI6OmNsYXNzLAogICAgICAgICAgICAgICAgR3VpZEJ1aWxkZXI6OmNsYXNzLAogICAgICAgICAgICAgICAgTm9uc3RhbmRhcmRVdWlkQnVpbGRlcjo6Y2xhc3MsCiAgICAgICAgICAgICAgICBQaHBUaW1lQ29udmVydGVyOjpjbGFzcywKICAgICAgICAgICAgICAgIFJmYzQxMjJVdWlkQnVpbGRlcjo6Y2xhc3MsCiAgICAgICAgICAgIF0sCiAgICAgICAgXSk7CgogICAgICAgICR0aGlzLT5kYXRhID0gYXJyYXlfZmlsdGVyKAogICAgICAgICAgICAkZGF0YSwKICAgICAgICAgICAgZnVuY3Rpb24gKCR1bnNlcmlhbGl6ZWQpOiBib29sIHsKICAgICAgICAgICAgICAgIHJldHVybiAkdW5zZXJpYWxpemVkIGluc3RhbmNlb2YgVXVpZEJ1aWxkZXJJbnRlcmZhY2U7CiAgICAgICAgICAgIH0KICAgICAgICApOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Builder/DefaultUuidBuilder.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEJ1aWxkZXI7Cgp1c2UgUmFtc2V5XFV1aWRcUmZjNDEyMlxVdWlkQnVpbGRlciBhcyBSZmM0MTIyVXVpZEJ1aWxkZXI7CgovKioKICogQGRlcHJlY2F0ZWQgVHJhbnNpdGlvbiB0byB7QHNlZSBSZmM0MTIyVXVpZEJ1aWxkZXJ9LgogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpjbGFzcyBEZWZhdWx0VXVpZEJ1aWxkZXIgZXh0ZW5kcyBSZmM0MTIyVXVpZEJ1aWxkZXIKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Builder/DegradedUuidBuilder.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEJ1aWxkZXI7Cgp1c2UgUmFtc2V5XFV1aWRcQ29kZWNcQ29kZWNJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcTnVtYmVyQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXFRpbWVcRGVncmFkZWRUaW1lQ29udmVydGVyOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxEZWdyYWRlZFV1aWQ7CnVzZSBSYW1zZXlcVXVpZFxSZmM0MTIyXEZpZWxkcyBhcyBSZmM0MTIyRmllbGRzOwp1c2UgUmFtc2V5XFV1aWRcVXVpZEludGVyZmFjZTsKCi8qKgogKiBAZGVwcmVjYXRlZCBEZWdyYWRlZFV1aWQgaW5zdGFuY2VzIGFyZSBubyBsb25nZXIgbmVjZXNzYXJ5IHRvIHN1cHBvcnQgMzItYml0CiAqICAgICBzeXN0ZW1zLiBUcmFuc2l0aW9uIHRvIHtAc2VlIERlZmF1bHRVdWlkQnVpbGRlcn0uCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmNsYXNzIERlZ3JhZGVkVXVpZEJ1aWxkZXIgaW1wbGVtZW50cyBVdWlkQnVpbGRlckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgTnVtYmVyQ29udmVydGVySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJG51bWJlckNvbnZlcnRlcjsKCiAgICAvKioKICAgICAqIEB2YXIgVGltZUNvbnZlcnRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICR0aW1lQ29udmVydGVyOwoKICAgIC8qKgogICAgICogQHBhcmFtIE51bWJlckNvbnZlcnRlckludGVyZmFjZSAkbnVtYmVyQ29udmVydGVyIFRoZSBudW1iZXIgY29udmVydGVyIHRvCiAgICAgKiAgICAgdXNlIHdoZW4gY29uc3RydWN0aW5nIHRoZSBEZWdyYWRlZFV1aWQKICAgICAqIEBwYXJhbSBUaW1lQ29udmVydGVySW50ZXJmYWNlfG51bGwgJHRpbWVDb252ZXJ0ZXIgVGhlIHRpbWUgY29udmVydGVyIHRvIHVzZQogICAgICogICAgIGZvciBjb252ZXJ0aW5nIHRpbWVzdGFtcHMgZXh0cmFjdGVkIGZyb20gYSBVVUlEIHRvIFVuaXggdGltZXN0YW1wcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgTnVtYmVyQ29udmVydGVySW50ZXJmYWNlICRudW1iZXJDb252ZXJ0ZXIsCiAgICAgICAgP1RpbWVDb252ZXJ0ZXJJbnRlcmZhY2UgJHRpbWVDb252ZXJ0ZXIgPSBudWxsCiAgICApIHsKICAgICAgICAkdGhpcy0+bnVtYmVyQ29udmVydGVyID0gJG51bWJlckNvbnZlcnRlcjsKICAgICAgICAkdGhpcy0+dGltZUNvbnZlcnRlciA9ICR0aW1lQ29udmVydGVyID86IG5ldyBEZWdyYWRlZFRpbWVDb252ZXJ0ZXIoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEJ1aWxkcyBhbmQgcmV0dXJucyBhIERlZ3JhZGVkVXVpZAogICAgICoKICAgICAqIEBwYXJhbSBDb2RlY0ludGVyZmFjZSAkY29kZWMgVGhlIGNvZGVjIHRvIHVzZSBmb3IgYnVpbGRpbmcgdGhpcyBEZWdyYWRlZFV1aWQgaW5zdGFuY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJ5dGVzIFRoZSBieXRlIHN0cmluZyBmcm9tIHdoaWNoIHRvIGNvbnN0cnVjdCBhIFVVSUQKICAgICAqCiAgICAgKiBAcmV0dXJuIERlZ3JhZGVkVXVpZCBUaGUgRGVncmFkZWRVdWlkQnVpbGQgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiBSYW1zZXlcVXVpZFxEZWdyYWRlZFV1aWQKICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYnVpbGQoQ29kZWNJbnRlcmZhY2UgJGNvZGVjLCBzdHJpbmcgJGJ5dGVzKTogVXVpZEludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiBuZXcgRGVncmFkZWRVdWlkKAogICAgICAgICAgICBuZXcgUmZjNDEyMkZpZWxkcygkYnl0ZXMpLAogICAgICAgICAgICAkdGhpcy0+bnVtYmVyQ29udmVydGVyLAogICAgICAgICAgICAkY29kZWMsCiAgICAgICAgICAgICR0aGlzLT50aW1lQ29udmVydGVyCiAgICAgICAgKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Builder/FallbackBuilder.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEJ1aWxkZXI7Cgp1c2UgUmFtc2V5XFV1aWRcQ29kZWNcQ29kZWNJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxFeGNlcHRpb25cQnVpbGRlck5vdEZvdW5kRXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXFVuYWJsZVRvQnVpbGRVdWlkRXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcVXVpZEludGVyZmFjZTsKCi8qKgogKiBGYWxsYmFja0J1aWxkZXIgYnVpbGRzIGEgVVVJRCBieSBzdGVwcGluZyB0aHJvdWdoIGEgbGlzdCBvZiBVVUlEIGJ1aWxkZXJzCiAqIHVudGlsIGEgVVVJRCBjYW4gYmUgY29uc3RydWN0ZWQgd2l0aG91dCBleGNlcHRpb25zCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmNsYXNzIEZhbGxiYWNrQnVpbGRlciBpbXBsZW1lbnRzIFV1aWRCdWlsZGVySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHZhciBCdWlsZGVyQ29sbGVjdGlvbgogICAgICovCiAgICBwcml2YXRlICRidWlsZGVyczsKCiAgICAvKioKICAgICAqIEBwYXJhbSBCdWlsZGVyQ29sbGVjdGlvbiAkYnVpbGRlcnMgQW4gYXJyYXkgb2YgVVVJRCBidWlsZGVycwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoQnVpbGRlckNvbGxlY3Rpb24gJGJ1aWxkZXJzKQogICAgewogICAgICAgICR0aGlzLT5idWlsZGVycyA9ICRidWlsZGVyczsKICAgIH0KCiAgICAvKioKICAgICAqIEJ1aWxkcyBhbmQgcmV0dXJucyBhIFV1aWRJbnRlcmZhY2UgaW5zdGFuY2UgdXNpbmcgdGhlIGZpcnN0IGJ1aWxkZXIgdGhhdAogICAgICogc3VjY2VlZHMKICAgICAqCiAgICAgKiBAcGFyYW0gQ29kZWNJbnRlcmZhY2UgJGNvZGVjIFRoZSBjb2RlYyB0byB1c2UgZm9yIGJ1aWxkaW5nIHRoaXMgaW5zdGFuY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJ5dGVzIFRoZSBieXRlIHN0cmluZyBmcm9tIHdoaWNoIHRvIGNvbnN0cnVjdCBhIFVVSUQKICAgICAqCiAgICAgKiBAcmV0dXJuIFV1aWRJbnRlcmZhY2UgYW4gaW5zdGFuY2Ugb2YgYSBVVUlEIG9iamVjdAogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBidWlsZChDb2RlY0ludGVyZmFjZSAkY29kZWMsIHN0cmluZyAkYnl0ZXMpOiBVdWlkSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJGxhc3RCdWlsZGVyRXhjZXB0aW9uID0gbnVsbDsKCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmJ1aWxkZXJzIGFzICRidWlsZGVyKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGJ1aWxkZXItPmJ1aWxkKCRjb2RlYywgJGJ5dGVzKTsKICAgICAgICAgICAgfSBjYXRjaCAoVW5hYmxlVG9CdWlsZFV1aWRFeGNlcHRpb24gJGV4Y2VwdGlvbikgewogICAgICAgICAgICAgICAgJGxhc3RCdWlsZGVyRXhjZXB0aW9uID0gJGV4Y2VwdGlvbjsKCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkZXJOb3RGb3VuZEV4Y2VwdGlvbigKICAgICAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIGEgc3VpdGFibGUgYnVpbGRlciBmb3IgdGhlIHByb3ZpZGVkIGNvZGVjIGFuZCBmaWVsZHMnLAogICAgICAgICAgICAwLAogICAgICAgICAgICAkbGFzdEJ1aWxkZXJFeGNlcHRpb24KICAgICAgICApOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Builder/UuidBuilderInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEJ1aWxkZXI7Cgp1c2UgUmFtc2V5XFV1aWRcQ29kZWNcQ29kZWNJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxVdWlkSW50ZXJmYWNlOwoKLyoqCiAqIEEgVVVJRCBidWlsZGVyIGJ1aWxkcyBpbnN0YW5jZXMgb2YgVXVpZEludGVyZmFjZQogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwppbnRlcmZhY2UgVXVpZEJ1aWxkZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBCdWlsZHMgYW5kIHJldHVybnMgYSBVdWlkSW50ZXJmYWNlCiAgICAgKgogICAgICogQHBhcmFtIENvZGVjSW50ZXJmYWNlICRjb2RlYyBUaGUgY29kZWMgdG8gdXNlIGZvciBidWlsZGluZyB0aGlzIFV1aWRJbnRlcmZhY2UgaW5zdGFuY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJ5dGVzIFRoZSBieXRlIHN0cmluZyBmcm9tIHdoaWNoIHRvIGNvbnN0cnVjdCBhIFVVSUQKICAgICAqCiAgICAgKiBAcmV0dXJuIFV1aWRJbnRlcmZhY2UgSW1wbGVtZW50YXRpb25zIG1heSBjaG9vc2UgdG8gcmV0dXJuIG1vcmUgc3BlY2lmaWMKICAgICAqICAgICBpbnN0YW5jZXMgb2YgVVVJRHMgdGhhdCBpbXBsZW1lbnQgVXVpZEludGVyZmFjZQogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBidWlsZChDb2RlY0ludGVyZmFjZSAkY29kZWMsIHN0cmluZyAkYnl0ZXMpOiBVdWlkSW50ZXJmYWNlOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Codec/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Codec/CodecInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvZGVjOwoKdXNlIFJhbXNleVxVdWlkXFV1aWRJbnRlcmZhY2U7CgovKioKICogQSBjb2RlYyBlbmNvZGVzIGFuZCBkZWNvZGVzIGEgVVVJRCBhY2NvcmRpbmcgdG8gZGVmaW5lZCBydWxlcwogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwppbnRlcmZhY2UgQ29kZWNJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgaGV4YWRlY2ltYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgVXVpZEludGVyZmFjZQogICAgICoKICAgICAqIEBwYXJhbSBVdWlkSW50ZXJmYWNlICR1dWlkIFRoZSBVVUlEIGZvciB3aGljaCB0byBjcmVhdGUgYSBoZXhhZGVjaW1hbAogICAgICogICAgIHN0cmluZyByZXByZXNlbnRhdGlvbgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIEhleGFkZWNpbWFsIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIFVVSUQKICAgICAqCiAgICAgKiBAcHNhbG0tcmV0dXJuIG5vbi1lbXB0eS1zdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVuY29kZShVdWlkSW50ZXJmYWNlICR1dWlkKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhIGJpbmFyeSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBVdWlkSW50ZXJmYWNlCiAgICAgKgogICAgICogQHBhcmFtIFV1aWRJbnRlcmZhY2UgJHV1aWQgVGhlIFVVSUQgZm9yIHdoaWNoIHRvIGNyZWF0ZSBhIGJpbmFyeSBzdHJpbmcKICAgICAqICAgICByZXByZXNlbnRhdGlvbgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIEJpbmFyeSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBVVUlECiAgICAgKgogICAgICogQHBzYWxtLXJldHVybiBub24tZW1wdHktc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlbmNvZGVCaW5hcnkoVXVpZEludGVyZmFjZSAkdXVpZCk6IHN0cmluZzsKCiAgICAvKioKICAgICAqIFJldHVybnMgYSBVdWlkSW50ZXJmYWNlIGRlcml2ZWQgZnJvbSBhIGhleGFkZWNpbWFsIHN0cmluZyByZXByZXNlbnRhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGVuY29kZWRVdWlkIFRoZSBoZXhhZGVjaW1hbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gdG8KICAgICAqICAgICBjb252ZXJ0IGludG8gYSBVdWlkSW50ZXJmYWNlIGluc3RhbmNlCiAgICAgKgogICAgICogQHJldHVybiBVdWlkSW50ZXJmYWNlIEFuIGluc3RhbmNlIG9mIGEgVVVJRCBkZWNvZGVkIGZyb20gYSBoZXhhZGVjaW1hbAogICAgICogICAgIHN0cmluZyByZXByZXNlbnRhdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVjb2RlKHN0cmluZyAkZW5jb2RlZFV1aWQpOiBVdWlkSW50ZXJmYWNlOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhIFV1aWRJbnRlcmZhY2UgZGVyaXZlZCBmcm9tIGEgYmluYXJ5IHN0cmluZyByZXByZXNlbnRhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJ5dGVzIFRoZSBiaW5hcnkgc3RyaW5nIHJlcHJlc2VudGF0aW9uIHRvIGNvbnZlcnQgaW50byBhCiAgICAgKiAgICAgVXVpZEludGVyZmFjZSBpbnN0YW5jZQogICAgICoKICAgICAqIEByZXR1cm4gVXVpZEludGVyZmFjZSBBbiBpbnN0YW5jZSBvZiBhIFVVSUQgZGVjb2RlZCBmcm9tIGEgYmluYXJ5IHN0cmluZwogICAgICogICAgIHJlcHJlc2VudGF0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWNvZGVCeXRlcyhzdHJpbmcgJGJ5dGVzKTogVXVpZEludGVyZmFjZTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Codec/GuidStringCodec.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvZGVjOwoKdXNlIFJhbXNleVxVdWlkXEd1aWRcR3VpZDsKdXNlIFJhbXNleVxVdWlkXFV1aWRJbnRlcmZhY2U7Cgp1c2UgZnVuY3Rpb24gYmluMmhleDsKdXNlIGZ1bmN0aW9uIHN1YnN0cjsKCi8qKgogKiBHdWlkU3RyaW5nQ29kZWMgZW5jb2RlcyBhbmQgZGVjb2RlcyBnbG9iYWxseSB1bmlxdWUgaWRlbnRpZmllcnMgKEdVSUQpCiAqCiAqIEBzZWUgR3VpZAogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpjbGFzcyBHdWlkU3RyaW5nQ29kZWMgZXh0ZW5kcyBTdHJpbmdDb2RlYwp7CiAgICBwdWJsaWMgZnVuY3Rpb24gZGVjb2RlKHN0cmluZyAkZW5jb2RlZFV1aWQpOiBVdWlkSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJGJ5dGVzID0gJHRoaXMtPmdldEJ5dGVzKCRlbmNvZGVkVXVpZCk7CgogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0QnVpbGRlcigpLT5idWlsZCgkdGhpcywgJHRoaXMtPnN3YXBCeXRlcygkYnl0ZXMpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVjb2RlQnl0ZXMoc3RyaW5nICRieXRlcyk6IFV1aWRJbnRlcmZhY2UKICAgIHsKICAgICAgICAvLyBTcGVjaWZpY2FsbHkgY2FsbCBwYXJlbnQ6OmRlY29kZSB0byBwcmVzZXJ2ZSBjb3JyZWN0IGJ5dGUgb3JkZXIKICAgICAgICByZXR1cm4gcGFyZW50OjpkZWNvZGUoYmluMmhleCgkYnl0ZXMpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFN3YXBzIGJ5dGVzIGFjY29yZGluZyB0byB0aGUgR1VJRCBydWxlcwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHN3YXBCeXRlcyhzdHJpbmcgJGJ5dGVzKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICRieXRlc1szXSAuICRieXRlc1syXSAuICRieXRlc1sxXSAuICRieXRlc1swXQogICAgICAgICAgICAuICRieXRlc1s1XSAuICRieXRlc1s0XQogICAgICAgICAgICAuICRieXRlc1s3XSAuICRieXRlc1s2XQogICAgICAgICAgICAuIHN1YnN0cigkYnl0ZXMsIDgpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Codec/OrderedTimeCodec.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvZGVjOwoKdXNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBSYW1zZXlcVXVpZFxFeGNlcHRpb25cVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb247CnVzZSBSYW1zZXlcVXVpZFxSZmM0MTIyXEZpZWxkc0ludGVyZmFjZSBhcyBSZmM0MTIyRmllbGRzSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcVXVpZDsKdXNlIFJhbXNleVxVdWlkXFV1aWRJbnRlcmZhY2U7Cgp1c2UgZnVuY3Rpb24gc3RybGVuOwp1c2UgZnVuY3Rpb24gc3Vic3RyOwoKLyoqCiAqIE9yZGVyZWRUaW1lQ29kZWMgZW5jb2RlcyBhbmQgZGVjb2RlcyBhIFVVSUQsIG9wdGltaXppbmcgdGhlIGJ5dGUgb3JkZXIgZm9yCiAqIG1vcmUgZWZmaWNpZW50IHN0b3JhZ2UKICoKICogRm9yIGJpbmFyeSByZXByZXNlbnRhdGlvbnMgb2YgdmVyc2lvbiAxIFVVSUQsIHRoaXMgY29kZWMgbWF5IGJlIHVzZWQgdG8KICogcmVvcmdhbml6ZSB0aGUgdGltZSBmaWVsZHMsIG1ha2luZyB0aGUgVVVJRCBjbG9zZXIgdG8gc2VxdWVudGlhbCB3aGVuIHN0b3JpbmcKICogdGhlIGJ5dGVzLiBBY2NvcmRpbmcgdG8gUGVyY29uYSwgdGhpcyBvcHRpbWl6YXRpb24gY2FuIGltcHJvdmUgZGF0YWJhc2UKICogSU5TRVJUcyBhbmQgU0VMRUNUcyB1c2luZyB0aGUgVVVJRCBjb2x1bW4gYXMgYSBrZXkuCiAqCiAqIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIFVVSUQgd2lsbCByZW1haW4gdW5jaGFuZ2VkLiBPbmx5IHRoZSBiaW5hcnkKICogcmVwcmVzZW50YXRpb24gaXMgcmVvcmRlcmVkLgogKgogKiAqKlBMRUFTRSBOT1RFOioqIEJpbmFyeSByZXByZXNlbnRhdGlvbnMgb2YgVVVJRHMgZW5jb2RlZCB3aXRoIHRoaXMgY29kZWMgbXVzdAogKiBiZSBkZWNvZGVkIHdpdGggdGhpcyBjb2RlYy4gRGVjb2RpbmcgdXNpbmcgYW5vdGhlciBjb2RlYyBjYW4gcmVzdWx0IGluCiAqIG1hbGZvcm1lZCBVVUlEcy4KICoKICogQGxpbmsgaHR0cHM6Ly93d3cucGVyY29uYS5jb20vYmxvZy8yMDE0LzEyLzE5L3N0b3JlLXV1aWQtb3B0aW1pemVkLXdheS8gU3RvcmluZyBVVUlEIFZhbHVlcyBpbiBNeVNRTAogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpjbGFzcyBPcmRlcmVkVGltZUNvZGVjIGV4dGVuZHMgU3RyaW5nQ29kZWMKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgYmluYXJ5IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIFVVSUQsIHdpdGggdGhlIHRpbWVzdGFtcAogICAgICogZmllbGRzIHJlYXJyYW5nZWQgZm9yIG9wdGltaXplZCBzdG9yYWdlCiAgICAgKgogICAgICogQGluaGVyaXREb2MKICAgICAqIEBwc2FsbS1yZXR1cm4gbm9uLWVtcHR5LXN0cmluZwogICAgICogQHBzYWxtLXN1cHByZXNzIE1vcmVTcGVjaWZpY1JldHVyblR5cGUgd2Uga25vdyB0aGF0IHRoZSByZXRyaWV2ZWQgYHN0cmluZ2AgaXMgbmV2ZXIgZW1wdHkKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBMZXNzU3BlY2lmaWNSZXR1cm5TdGF0ZW1lbnQgd2Uga25vdyB0aGF0IHRoZSByZXRyaWV2ZWQgYHN0cmluZ2AgaXMgbmV2ZXIgZW1wdHkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVuY29kZUJpbmFyeShVdWlkSW50ZXJmYWNlICR1dWlkKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKAogICAgICAgICAgICAhKCR1dWlkLT5nZXRGaWVsZHMoKSBpbnN0YW5jZW9mIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2UpCiAgICAgICAgICAgIHx8ICR1dWlkLT5nZXRGaWVsZHMoKS0+Z2V0VmVyc2lvbigpICE9PSBVdWlkOjpVVUlEX1RZUEVfVElNRQogICAgICAgICkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0V4cGVjdGVkIFJGQyA0MTIyIHZlcnNpb24gMSAodGltZS1iYXNlZCkgVVVJRCcKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRieXRlcyA9ICR1dWlkLT5nZXRGaWVsZHMoKS0+Z2V0Qnl0ZXMoKTsKCiAgICAgICAgLyoqIEBwaHBzdGFuLWlnbm9yZS1uZXh0LWxpbmUgUEhQU3RhbiBjb21wbGFpbnMgdGhhdCB0aGlzIGlzIG5vdCBhIG5vbi1lbXB0eS1zdHJpbmcuICovCiAgICAgICAgcmV0dXJuICRieXRlc1s2XSAuICRieXRlc1s3XQogICAgICAgICAgICAuICRieXRlc1s0XSAuICRieXRlc1s1XQogICAgICAgICAgICAuICRieXRlc1swXSAuICRieXRlc1sxXSAuICRieXRlc1syXSAuICRieXRlc1szXQogICAgICAgICAgICAuIHN1YnN0cigkYnl0ZXMsIDgpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIFV1aWRJbnRlcmZhY2UgZGVyaXZlZCBmcm9tIGFuIG9yZGVyZWQtdGltZSBiaW5hcnkgc3RyaW5nCiAgICAgKiByZXByZXNlbnRhdGlvbgogICAgICoKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmICRieXRlcyBpcyBhbiBpbnZhbGlkIGxlbmd0aAogICAgICoKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWNvZGVCeXRlcyhzdHJpbmcgJGJ5dGVzKTogVXVpZEludGVyZmFjZQogICAgewogICAgICAgIGlmIChzdHJsZW4oJGJ5dGVzKSAhPT0gMTYpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICckYnl0ZXMgc3RyaW5nIHNob3VsZCBjb250YWluIDE2IGNoYXJhY3RlcnMuJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgLy8gUmVhcnJhbmdlIHRoZSBieXRlcyB0byB0aGVpciBvcmlnaW5hbCBvcmRlci4KICAgICAgICAkcmVhcnJhbmdlZEJ5dGVzID0gJGJ5dGVzWzRdIC4gJGJ5dGVzWzVdIC4gJGJ5dGVzWzZdIC4gJGJ5dGVzWzddCiAgICAgICAgICAgIC4gJGJ5dGVzWzJdIC4gJGJ5dGVzWzNdCiAgICAgICAgICAgIC4gJGJ5dGVzWzBdIC4gJGJ5dGVzWzFdCiAgICAgICAgICAgIC4gc3Vic3RyKCRieXRlcywgOCk7CgogICAgICAgICR1dWlkID0gcGFyZW50OjpkZWNvZGVCeXRlcygkcmVhcnJhbmdlZEJ5dGVzKTsKCiAgICAgICAgaWYgKAogICAgICAgICAgICAhKCR1dWlkLT5nZXRGaWVsZHMoKSBpbnN0YW5jZW9mIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2UpCiAgICAgICAgICAgIHx8ICR1dWlkLT5nZXRGaWVsZHMoKS0+Z2V0VmVyc2lvbigpICE9PSBVdWlkOjpVVUlEX1RZUEVfVElNRQogICAgICAgICkgewogICAgICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnQXR0ZW1wdGluZyB0byBkZWNvZGUgYSBub24tdGltZS1iYXNlZCBVVUlEIHVzaW5nICcKICAgICAgICAgICAgICAgIC4gJ09yZGVyZWRUaW1lQ29kZWMnCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHV1aWQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Codec/StringCodec.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvZGVjOwoKdXNlIFJhbXNleVxVdWlkXEJ1aWxkZXJcVXVpZEJ1aWxkZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXEludmFsaWRVdWlkU3RyaW5nRXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcUmZjNDEyMlxGaWVsZHNJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxVdWlkOwp1c2UgUmFtc2V5XFV1aWRcVXVpZEludGVyZmFjZTsKCnVzZSBmdW5jdGlvbiBoZXgyYmluOwp1c2UgZnVuY3Rpb24gaW1wbG9kZTsKdXNlIGZ1bmN0aW9uIHN0cl9yZXBsYWNlOwp1c2UgZnVuY3Rpb24gc3RybGVuOwp1c2UgZnVuY3Rpb24gc3Vic3RyOwoKLyoqCiAqIFN0cmluZ0NvZGVjIGVuY29kZXMgYW5kIGRlY29kZXMgUkZDIDQxMjIgVVVJRHMKICoKICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDEyMgogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpjbGFzcyBTdHJpbmdDb2RlYyBpbXBsZW1lbnRzIENvZGVjSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHZhciBVdWlkQnVpbGRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRidWlsZGVyOwoKICAgIC8qKgogICAgICogQ29uc3RydWN0cyBhIFN0cmluZ0NvZGVjCiAgICAgKgogICAgICogQHBhcmFtIFV1aWRCdWlsZGVySW50ZXJmYWNlICRidWlsZGVyIFRoZSBidWlsZGVyIHRvIHVzZSB3aGVuIGVuY29kaW5nIFVVSURzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChVdWlkQnVpbGRlckludGVyZmFjZSAkYnVpbGRlcikKICAgIHsKICAgICAgICAkdGhpcy0+YnVpbGRlciA9ICRidWlsZGVyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBlbmNvZGUoVXVpZEludGVyZmFjZSAkdXVpZCk6IHN0cmluZwogICAgewogICAgICAgIC8qKiBAdmFyIEZpZWxkc0ludGVyZmFjZSAkZmllbGRzICovCiAgICAgICAgJGZpZWxkcyA9ICR1dWlkLT5nZXRGaWVsZHMoKTsKCiAgICAgICAgcmV0dXJuICRmaWVsZHMtPmdldFRpbWVMb3coKS0+dG9TdHJpbmcoKQogICAgICAgICAgICAuICctJwogICAgICAgICAgICAuICRmaWVsZHMtPmdldFRpbWVNaWQoKS0+dG9TdHJpbmcoKQogICAgICAgICAgICAuICctJwogICAgICAgICAgICAuICRmaWVsZHMtPmdldFRpbWVIaUFuZFZlcnNpb24oKS0+dG9TdHJpbmcoKQogICAgICAgICAgICAuICctJwogICAgICAgICAgICAuICRmaWVsZHMtPmdldENsb2NrU2VxSGlBbmRSZXNlcnZlZCgpLT50b1N0cmluZygpCiAgICAgICAgICAgIC4gJGZpZWxkcy0+Z2V0Q2xvY2tTZXFMb3coKS0+dG9TdHJpbmcoKQogICAgICAgICAgICAuICctJwogICAgICAgICAgICAuICRmaWVsZHMtPmdldE5vZGUoKS0+dG9TdHJpbmcoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwc2FsbS1yZXR1cm4gbm9uLWVtcHR5LXN0cmluZwogICAgICogQHBzYWxtLXN1cHByZXNzIE1vcmVTcGVjaWZpY1JldHVyblR5cGUgd2Uga25vdyB0aGF0IHRoZSByZXRyaWV2ZWQgYHN0cmluZ2AgaXMgbmV2ZXIgZW1wdHkKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBMZXNzU3BlY2lmaWNSZXR1cm5TdGF0ZW1lbnQgd2Uga25vdyB0aGF0IHRoZSByZXRyaWV2ZWQgYHN0cmluZ2AgaXMgbmV2ZXIgZW1wdHkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVuY29kZUJpbmFyeShVdWlkSW50ZXJmYWNlICR1dWlkKTogc3RyaW5nCiAgICB7CiAgICAgICAgLyoqIEBwaHBzdGFuLWlnbm9yZS1uZXh0LWxpbmUgUEhQU3RhbiBjb21wbGFpbnMgdGhhdCB0aGlzIGlzIG5vdCBhIG5vbi1lbXB0eS1zdHJpbmcuICovCiAgICAgICAgcmV0dXJuICR1dWlkLT5nZXRGaWVsZHMoKS0+Z2V0Qnl0ZXMoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0aHJvd3MgSW52YWxpZFV1aWRTdHJpbmdFeGNlcHRpb24KICAgICAqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVjb2RlKHN0cmluZyAkZW5jb2RlZFV1aWQpOiBVdWlkSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5idWlsZGVyLT5idWlsZCgkdGhpcywgJHRoaXMtPmdldEJ5dGVzKCRlbmNvZGVkVXVpZCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkZWNvZGVCeXRlcyhzdHJpbmcgJGJ5dGVzKTogVXVpZEludGVyZmFjZQogICAgewogICAgICAgIGlmIChzdHJsZW4oJGJ5dGVzKSAhPT0gMTYpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICckYnl0ZXMgc3RyaW5nIHNob3VsZCBjb250YWluIDE2IGNoYXJhY3RlcnMuJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5idWlsZGVyLT5idWlsZCgkdGhpcywgJGJ5dGVzKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIFVVSUQgYnVpbGRlcgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0QnVpbGRlcigpOiBVdWlkQnVpbGRlckludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YnVpbGRlcjsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBieXRlIHN0cmluZyBvZiB0aGUgVVVJRAogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0Qnl0ZXMoc3RyaW5nICRlbmNvZGVkVXVpZCk6IHN0cmluZwogICAgewogICAgICAgICRwYXJzZWRVdWlkID0gc3RyX3JlcGxhY2UoCiAgICAgICAgICAgIFsndXJuOicsICd1dWlkOicsICdVUk46JywgJ1VVSUQ6JywgJ3snLCAnfScsICctJ10sCiAgICAgICAgICAgICcnLAogICAgICAgICAgICAkZW5jb2RlZFV1aWQKICAgICAgICApOwoKICAgICAgICAkY29tcG9uZW50cyA9IFsKICAgICAgICAgICAgc3Vic3RyKCRwYXJzZWRVdWlkLCAwLCA4KSwKICAgICAgICAgICAgc3Vic3RyKCRwYXJzZWRVdWlkLCA4LCA0KSwKICAgICAgICAgICAgc3Vic3RyKCRwYXJzZWRVdWlkLCAxMiwgNCksCiAgICAgICAgICAgIHN1YnN0cigkcGFyc2VkVXVpZCwgMTYsIDQpLAogICAgICAgICAgICBzdWJzdHIoJHBhcnNlZFV1aWQsIDIwKSwKICAgICAgICBdOwoKICAgICAgICBpZiAoIVV1aWQ6OmlzVmFsaWQoaW1wbG9kZSgnLScsICRjb21wb25lbnRzKSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRVdWlkU3RyaW5nRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0ludmFsaWQgVVVJRCBzdHJpbmc6ICcgLiAkZW5jb2RlZFV1aWQKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAoc3RyaW5nKSBoZXgyYmluKCRwYXJzZWRVdWlkKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Codec/TimestampFirstCombCodec.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvZGVjOwoKdXNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvblxJbnZhbGlkVXVpZFN0cmluZ0V4Y2VwdGlvbjsKdXNlIFJhbXNleVxVdWlkXFV1aWRJbnRlcmZhY2U7Cgp1c2UgZnVuY3Rpb24gYmluMmhleDsKdXNlIGZ1bmN0aW9uIHNwcmludGY7CnVzZSBmdW5jdGlvbiBzdWJzdHI7CnVzZSBmdW5jdGlvbiBzdWJzdHJfcmVwbGFjZTsKCi8qKgogKiBUaW1lc3RhbXBGaXJzdENvbWJDb2RlYyBlbmNvZGVzIGFuZCBkZWNvZGVzIENPTUJzLCB3aXRoIHRoZSB0aW1lc3RhbXAgYXMgdGhlCiAqIGZpcnN0IDQ4IGJpdHMKICoKICogSW4gY29udHJhc3Qgd2l0aCB0aGUgVGltZXN0YW1wTGFzdENvbWJDb2RlYywgdGhlIFRpbWVzdGFtcEZpcnN0Q29tYkNvZGVjCiAqIGFkZHMgdGhlIHRpbWVzdGFtcCB0byB0aGUgZmlyc3QgNDggYml0cyBvZiB0aGUgQ09NQi4gVG8gZ2VuZXJhdGUgYQogKiB0aW1lc3RhbXAtZmlyc3QgQ09NQiwgc2V0IHRoZSBUaW1lc3RhbXBGaXJzdENvbWJDb2RlYyBhcyB0aGUgY29kZWMsIGFsb25nCiAqIHdpdGggdGhlIENvbWJHZW5lcmF0b3IgYXMgdGhlIHJhbmRvbSBnZW5lcmF0b3IuCiAqCiAqIGBgYCBwaHAKICogJGZhY3RvcnkgPSBuZXcgVXVpZEZhY3RvcnkoKTsKICoKICogJGZhY3RvcnktPnNldENvZGVjKG5ldyBUaW1lc3RhbXBGaXJzdENvbWJDb2RlYygkZmFjdG9yeS0+Z2V0VXVpZEJ1aWxkZXIoKSkpOwogKgogKiAkZmFjdG9yeS0+c2V0UmFuZG9tR2VuZXJhdG9yKG5ldyBDb21iR2VuZXJhdG9yKAogKiAgICAgJGZhY3RvcnktPmdldFJhbmRvbUdlbmVyYXRvcigpLAogKiAgICAgJGZhY3RvcnktPmdldE51bWJlckNvbnZlcnRlcigpCiAqICkpOwogKgogKiAkdGltZXN0YW1wRmlyc3RDb21iID0gJGZhY3RvcnktPnV1aWQ0KCk7CiAqIGBgYAogKgogKiBAbGluayBodHRwczovL3d3dy5pbmZvcm1pdC5jb20vYXJ0aWNsZXMvcHJpbnRlcmZyaWVuZGx5LzI1ODYyIFRoZSBDb3N0IG9mIEdVSURzIGFzIFByaW1hcnkgS2V5cwogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpjbGFzcyBUaW1lc3RhbXBGaXJzdENvbWJDb2RlYyBleHRlbmRzIFN0cmluZ0NvZGVjCnsKICAgIC8qKgogICAgICogQHBzYWxtLXJldHVybiBub24tZW1wdHktc3RyaW5nCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTW9yZVNwZWNpZmljUmV0dXJuVHlwZSB3ZSBrbm93IHRoYXQgdGhlIHJldHJpZXZlZCBgc3RyaW5nYCBpcyBuZXZlciBlbXB0eQogICAgICogQHBzYWxtLXN1cHByZXNzIExlc3NTcGVjaWZpY1JldHVyblN0YXRlbWVudCB3ZSBrbm93IHRoYXQgdGhlIHJldHJpZXZlZCBgc3RyaW5nYCBpcyBuZXZlciBlbXB0eQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5jb2RlKFV1aWRJbnRlcmZhY2UgJHV1aWQpOiBzdHJpbmcKICAgIHsKICAgICAgICAkYnl0ZXMgPSAkdGhpcy0+c3dhcEJ5dGVzKCR1dWlkLT5nZXRGaWVsZHMoKS0+Z2V0Qnl0ZXMoKSk7CgogICAgICAgIHJldHVybiBzcHJpbnRmKAogICAgICAgICAgICAnJTA4cy0lMDRzLSUwNHMtJTA0cy0lMDEycycsCiAgICAgICAgICAgIGJpbjJoZXgoc3Vic3RyKCRieXRlcywgMCwgNCkpLAogICAgICAgICAgICBiaW4yaGV4KHN1YnN0cigkYnl0ZXMsIDQsIDIpKSwKICAgICAgICAgICAgYmluMmhleChzdWJzdHIoJGJ5dGVzLCA2LCAyKSksCiAgICAgICAgICAgIGJpbjJoZXgoc3Vic3RyKCRieXRlcywgOCwgMikpLAogICAgICAgICAgICBiaW4yaGV4KHN1YnN0cigkYnl0ZXMsIDEwKSkKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQHBzYWxtLXJldHVybiBub24tZW1wdHktc3RyaW5nCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTW9yZVNwZWNpZmljUmV0dXJuVHlwZSB3ZSBrbm93IHRoYXQgdGhlIHJldHJpZXZlZCBgc3RyaW5nYCBpcyBuZXZlciBlbXB0eQogICAgICogQHBzYWxtLXN1cHByZXNzIExlc3NTcGVjaWZpY1JldHVyblN0YXRlbWVudCB3ZSBrbm93IHRoYXQgdGhlIHJldHJpZXZlZCBgc3RyaW5nYCBpcyBuZXZlciBlbXB0eQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5jb2RlQmluYXJ5KFV1aWRJbnRlcmZhY2UgJHV1aWQpOiBzdHJpbmcKICAgIHsKICAgICAgICAvKiogQHBocHN0YW4taWdub3JlLW5leHQtbGluZSBQSFBTdGFuIGNvbXBsYWlucyB0aGF0IHRoaXMgaXMgbm90IGEgbm9uLWVtcHR5LXN0cmluZy4gKi8KICAgICAgICByZXR1cm4gJHRoaXMtPnN3YXBCeXRlcygkdXVpZC0+Z2V0RmllbGRzKCktPmdldEJ5dGVzKCkpOwogICAgfQoKICAgIC8qKgogICAgICogQHRocm93cyBJbnZhbGlkVXVpZFN0cmluZ0V4Y2VwdGlvbgogICAgICoKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWNvZGUoc3RyaW5nICRlbmNvZGVkVXVpZCk6IFV1aWRJbnRlcmZhY2UKICAgIHsKICAgICAgICAkYnl0ZXMgPSAkdGhpcy0+Z2V0Qnl0ZXMoJGVuY29kZWRVdWlkKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRCdWlsZGVyKCktPmJ1aWxkKCR0aGlzLCAkdGhpcy0+c3dhcEJ5dGVzKCRieXRlcykpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkZWNvZGVCeXRlcyhzdHJpbmcgJGJ5dGVzKTogVXVpZEludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0QnVpbGRlcigpLT5idWlsZCgkdGhpcywgJHRoaXMtPnN3YXBCeXRlcygkYnl0ZXMpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFN3YXBzIGJ5dGVzIGFjY29yZGluZyB0byB0aGUgdGltZXN0YW1wLWZpcnN0IENPTUIgcnVsZXMKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBzd2FwQnl0ZXMoc3RyaW5nICRieXRlcyk6IHN0cmluZwogICAgewogICAgICAgICRmaXJzdDQ4Qml0cyA9IHN1YnN0cigkYnl0ZXMsIDAsIDYpOwogICAgICAgICRsYXN0NDhCaXRzID0gc3Vic3RyKCRieXRlcywgLTYpOwoKICAgICAgICAkYnl0ZXMgPSBzdWJzdHJfcmVwbGFjZSgkYnl0ZXMsICRsYXN0NDhCaXRzLCAwLCA2KTsKICAgICAgICAkYnl0ZXMgPSBzdWJzdHJfcmVwbGFjZSgkYnl0ZXMsICRmaXJzdDQ4Qml0cywgLTYpOwoKICAgICAgICByZXR1cm4gJGJ5dGVzOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Codec/TimestampLastCombCodec.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvZGVjOwoKLyoqCiAqIFRpbWVzdGFtcExhc3RDb21iQ29kZWMgZW5jb2RlcyBhbmQgZGVjb2RlcyBDT01Ccywgd2l0aCB0aGUgdGltZXN0YW1wIGFzIHRoZQogKiBsYXN0IDQ4IGJpdHMKICoKICogVGhlIENvbWJHZW5lcmF0b3Igd2hlbiB1c2VkIHdpdGggdGhlIFN0cmluZ0NvZGVjIChhbmQsIGJ5IHByb3h5LCB0aGUKICogVGltZXN0YW1wTGFzdENvbWJDb2RlYykgYWRkcyB0aGUgdGltZXN0YW1wIHRvIHRoZSBsYXN0IDQ4IGJpdHMgb2YgdGhlIENPTUIuCiAqIFRoZSBUaW1lc3RhbXBMYXN0Q29tYkNvZGVjIGlzIHByb3ZpZGVkIGZvciB0aGUgc2FrZSBvZiBjb25zaXN0ZW5jeS4gSW4KICogcHJhY3RpY2UsIGl0IGlzIGlkZW50aWNhbCB0byB0aGUgc3RhbmRhcmQgU3RyaW5nQ29kZWMgYnV0LCBpdCBtYXkgYmUgdXNlZAogKiB3aXRoIHRoZSBDb21iR2VuZXJhdG9yIGZvciBhZGRpdGlvbmFsIGNvbnRleHQgd2hlbiByZWFkaW5nIGNvZGUuCiAqCiAqIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgY29kZS4gQnkgZGVmYXVsdCwgdGhlIGNvZGVjIHVzZWQgYnkgVXVpZEZhY3RvcnkgaXMgdGhlCiAqIFN0cmluZ0NvZGVjLCBidXQgaGVyZSwgd2UgZXhwbGljaXRseSBzZXQgdGhlIFRpbWVzdGFtcExhc3RDb21iQ29kZWMuIEl0IGlzCiAqIHJlZHVuZGFudCwgYnV0IGl0IGlzIGNsZWFyIHRoYXQgd2UgaW50ZW5kIHRoaXMgQ09NQiB0byBiZSBnZW5lcmF0ZWQgd2l0aCB0aGUKICogdGltZXN0YW1wIGFwcGVhcmluZyBhdCB0aGUgZW5kLgogKgogKiBgYGAgcGhwCiAqICRmYWN0b3J5ID0gbmV3IFV1aWRGYWN0b3J5KCk7CiAqCiAqICRmYWN0b3J5LT5zZXRDb2RlYyhuZXcgVGltZXN0YW1wTGFzdENvbWJDb2RlYygkZmFjdG9yeS0+Z2V0VXVpZEJ1aWxkZXIoKSkpOwogKgogKiAkZmFjdG9yeS0+c2V0UmFuZG9tR2VuZXJhdG9yKG5ldyBDb21iR2VuZXJhdG9yKAogKiAgICAgJGZhY3RvcnktPmdldFJhbmRvbUdlbmVyYXRvcigpLAogKiAgICAgJGZhY3RvcnktPmdldE51bWJlckNvbnZlcnRlcigpCiAqICkpOwogKgogKiAkdGltZXN0YW1wTGFzdENvbWIgPSAkZmFjdG9yeS0+dXVpZDQoKTsKICogYGBgCiAqCiAqIEBsaW5rIGh0dHBzOi8vd3d3LmluZm9ybWl0LmNvbS9hcnRpY2xlcy9wcmludGVyZnJpZW5kbHkvMjU4NjIgVGhlIENvc3Qgb2YgR1VJRHMgYXMgUHJpbWFyeSBLZXlzCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmNsYXNzIFRpbWVzdGFtcExhc3RDb21iQ29kZWMgZXh0ZW5kcyBTdHJpbmdDb2RlYwp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Converter/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Converter/Number/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Converter/Number/BigNumberConverter.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxOdW1iZXI7Cgp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXE51bWJlckNvbnZlcnRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXE1hdGhcQnJpY2tNYXRoQ2FsY3VsYXRvcjsKCi8qKgogKiBQcmV2aW91c2x5IHVzZWQgdG8gaW50ZWdyYXRlIG1vb250b2FzdC9tYXRoIGFzIGEgYmlnbnVtIGFyaXRobWV0aWMgbGlicmFyeSwKICogQmlnTnVtYmVyQ29udmVydGVyIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgR2VuZXJpY051bWJlckNvbnZlcnRlcgogKgogKiBAZGVwcmVjYXRlZCBUcmFuc2l0aW9uIHRvIHtAc2VlIEdlbmVyaWNOdW1iZXJDb252ZXJ0ZXJ9LgogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpjbGFzcyBCaWdOdW1iZXJDb252ZXJ0ZXIgaW1wbGVtZW50cyBOdW1iZXJDb252ZXJ0ZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAdmFyIE51bWJlckNvbnZlcnRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRjb252ZXJ0ZXI7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgIHsKICAgICAgICAkdGhpcy0+Y29udmVydGVyID0gbmV3IEdlbmVyaWNOdW1iZXJDb252ZXJ0ZXIobmV3IEJyaWNrTWF0aENhbGN1bGF0b3IoKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZyb21IZXgoc3RyaW5nICRoZXgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNvbnZlcnRlci0+ZnJvbUhleCgkaGV4KTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9IZXgoc3RyaW5nICRudW1iZXIpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNvbnZlcnRlci0+dG9IZXgoJG51bWJlcik7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Converter/Number/DegradedNumberConverter.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxOdW1iZXI7CgovKioKICogQGRlcHJlY2F0ZWQgRGVncmFkZWROdW1iZXJDb252ZXJ0ZXIgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSBmb3IgY29udmVydGluZwogKiAgICAgbnVtYmVycyBvbiAzMi1iaXQgc3lzdGVtcy4gVHJhbnNpdGlvbiB0byB7QHNlZSBHZW5lcmljTnVtYmVyQ29udmVydGVyfS4KICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KY2xhc3MgRGVncmFkZWROdW1iZXJDb252ZXJ0ZXIgZXh0ZW5kcyBCaWdOdW1iZXJDb252ZXJ0ZXIKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Converter/Number/GenericNumberConverter.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxOdW1iZXI7Cgp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXE51bWJlckNvbnZlcnRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXE1hdGhcQ2FsY3VsYXRvckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXFR5cGVcSW50ZWdlciBhcyBJbnRlZ2VyT2JqZWN0OwoKLyoqCiAqIEdlbmVyaWNOdW1iZXJDb252ZXJ0ZXIgdXNlcyB0aGUgcHJvdmlkZWQgY2FsY3VsYXRvciB0byBjb252ZXJ0IGRlY2ltYWwKICogbnVtYmVycyB0byBhbmQgZnJvbSBoZXhhZGVjaW1hbCB2YWx1ZXMKICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KY2xhc3MgR2VuZXJpY051bWJlckNvbnZlcnRlciBpbXBsZW1lbnRzIE51bWJlckNvbnZlcnRlckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgQ2FsY3VsYXRvckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRjYWxjdWxhdG9yOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChDYWxjdWxhdG9ySW50ZXJmYWNlICRjYWxjdWxhdG9yKQogICAgewogICAgICAgICR0aGlzLT5jYWxjdWxhdG9yID0gJGNhbGN1bGF0b3I7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICogQHBzYWxtLXB1cmUKICAgICAqIEBwc2FsbS1yZXR1cm4gbnVtZXJpYy1zdHJpbmcKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNb3JlU3BlY2lmaWNSZXR1cm5UeXBlIHdlIGtub3cgdGhhdCB0aGUgcmV0cmlldmVkIGBzdHJpbmdgIGlzIG5ldmVyIGVtcHR5CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTGVzc1NwZWNpZmljUmV0dXJuU3RhdGVtZW50IHdlIGtub3cgdGhhdCB0aGUgcmV0cmlldmVkIGBzdHJpbmdgIGlzIG5ldmVyIGVtcHR5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmcm9tSGV4KHN0cmluZyAkaGV4KTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jYWxjdWxhdG9yLT5mcm9tQmFzZSgkaGV4LCAxNiktPnRvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICogQHBzYWxtLXB1cmUKICAgICAqIEBwc2FsbS1yZXR1cm4gbm9uLWVtcHR5LXN0cmluZwogICAgICogQHBzYWxtLXN1cHByZXNzIE1vcmVTcGVjaWZpY1JldHVyblR5cGUgd2Uga25vdyB0aGF0IHRoZSByZXRyaWV2ZWQgYHN0cmluZ2AgaXMgbmV2ZXIgZW1wdHkKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBMZXNzU3BlY2lmaWNSZXR1cm5TdGF0ZW1lbnQgd2Uga25vdyB0aGF0IHRoZSByZXRyaWV2ZWQgYHN0cmluZ2AgaXMgbmV2ZXIgZW1wdHkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvSGV4KHN0cmluZyAkbnVtYmVyKTogc3RyaW5nCiAgICB7CiAgICAgICAgLyoqIEBwaHBzdGFuLWlnbm9yZS1uZXh0LWxpbmUgUEhQU3RhbiBjb21wbGFpbnMgdGhhdCB0aGlzIGlzIG5vdCBhIG5vbi1lbXB0eS1zdHJpbmcuICovCiAgICAgICAgcmV0dXJuICR0aGlzLT5jYWxjdWxhdG9yLT50b0Jhc2UobmV3IEludGVnZXJPYmplY3QoJG51bWJlciksIDE2KTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Converter/NumberConverterInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvbnZlcnRlcjsKCi8qKgogKiBBIG51bWJlciBjb252ZXJ0ZXIgY29udmVydHMgVVVJRHMgZnJvbSBoZXhhZGVjaW1hbCBjaGFyYWN0ZXJzIGludG8KICogcmVwcmVzZW50YXRpb25zIG9mIGludGVnZXJzIGFuZCB2aWNlIHZlcnNhCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmludGVyZmFjZSBOdW1iZXJDb252ZXJ0ZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBDb252ZXJ0cyBhIGhleGFkZWNpbWFsIG51bWJlciBpbnRvIGFuIHN0cmluZyBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uIG9mCiAgICAgKiB0aGUgbnVtYmVyCiAgICAgKgogICAgICogVGhlIGludGVnZXIgcmVwcmVzZW50YXRpb24gcmV0dXJuZWQgaXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlCiAgICAgKiBpbnRlZ2VyLCB0byBhY2NvbW1vZGF0ZSB1bnNpZ25lZCBpbnRlZ2VycyBncmVhdGVyIHRoYW4gUEhQX0lOVF9NQVguCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaGV4IFRoZSBoZXhhZGVjaW1hbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gdG8gY29udmVydAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyCiAgICAgKgogICAgICogQHBzYWxtLXJldHVybiBudW1lcmljLXN0cmluZwogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmcm9tSGV4KHN0cmluZyAkaGV4KTogc3RyaW5nOwoKICAgIC8qKgogICAgICogQ29udmVydHMgYSBzdHJpbmcgaW50ZWdlciByZXByZXNlbnRhdGlvbiBpbnRvIGEgaGV4YWRlY2ltYWwgc3RyaW5nCiAgICAgKiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbnVtYmVyCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbnVtYmVyIEEgc3RyaW5nIGludGVnZXIgcmVwcmVzZW50YXRpb24gdG8gY29udmVydDsgdGhpcwogICAgICogICAgIG11c3QgYmUgYSBudW1lcmljIHN0cmluZyB0byBhY2NvbW1vZGF0ZSB1bnNpZ25lZCBpbnRlZ2VycyBncmVhdGVyCiAgICAgKiAgICAgdGhhbiBQSFBfSU5UX01BWC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBIZXhhZGVjaW1hbCBzdHJpbmcKICAgICAqCiAgICAgKiBAcHNhbG0tcmV0dXJuIG5vbi1lbXB0eS1zdHJpbmcKICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9IZXgoc3RyaW5nICRudW1iZXIpOiBzdHJpbmc7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Converter/Time/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Converter/Time/BigNumberTimeConverter.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lOwoKdXNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcTWF0aFxCcmlja01hdGhDYWxjdWxhdG9yOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxIZXhhZGVjaW1hbDsKdXNlIFJhbXNleVxVdWlkXFR5cGVcVGltZTsKCi8qKgogKiBQcmV2aW91c2x5IHVzZWQgdG8gaW50ZWdyYXRlIG1vb250b2FzdC9tYXRoIGFzIGEgYmlnbnVtIGFyaXRobWV0aWMgbGlicmFyeSwKICogQmlnTnVtYmVyVGltZUNvbnZlcnRlciBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIEdlbmVyaWNUaW1lQ29udmVydGVyCiAqCiAqIEBkZXByZWNhdGVkIFRyYW5zaXRpb24gdG8ge0BzZWUgR2VuZXJpY1RpbWVDb252ZXJ0ZXJ9LgogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpjbGFzcyBCaWdOdW1iZXJUaW1lQ29udmVydGVyIGltcGxlbWVudHMgVGltZUNvbnZlcnRlckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgVGltZUNvbnZlcnRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRjb252ZXJ0ZXI7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgIHsKICAgICAgICAkdGhpcy0+Y29udmVydGVyID0gbmV3IEdlbmVyaWNUaW1lQ29udmVydGVyKG5ldyBCcmlja01hdGhDYWxjdWxhdG9yKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjYWxjdWxhdGVUaW1lKHN0cmluZyAkc2Vjb25kcywgc3RyaW5nICRtaWNyb3NlY29uZHMpOiBIZXhhZGVjaW1hbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y29udmVydGVyLT5jYWxjdWxhdGVUaW1lKCRzZWNvbmRzLCAkbWljcm9zZWNvbmRzKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY29udmVydFRpbWUoSGV4YWRlY2ltYWwgJHV1aWRUaW1lc3RhbXApOiBUaW1lCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jb252ZXJ0ZXItPmNvbnZlcnRUaW1lKCR1dWlkVGltZXN0YW1wKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Converter/Time/DegradedTimeConverter.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lOwoKLyoqCiAqIEBkZXByZWNhdGVkIERlZ3JhZGVkVGltZUNvbnZlcnRlciBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IGZvciBjb252ZXJ0aW5nCiAqICAgICB0aW1lIG9uIDMyLWJpdCBzeXN0ZW1zLiBUcmFuc2l0aW9uIHRvIHtAc2VlIEdlbmVyaWNUaW1lQ29udmVydGVyfS4KICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KY2xhc3MgRGVncmFkZWRUaW1lQ29udmVydGVyIGV4dGVuZHMgQmlnTnVtYmVyVGltZUNvbnZlcnRlcgp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Converter/Time/GenericTimeConverter.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lOwoKdXNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcTWF0aFxDYWxjdWxhdG9ySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcTWF0aFxSb3VuZGluZ01vZGU7CnVzZSBSYW1zZXlcVXVpZFxUeXBlXEhleGFkZWNpbWFsOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxJbnRlZ2VyIGFzIEludGVnZXJPYmplY3Q7CnVzZSBSYW1zZXlcVXVpZFxUeXBlXFRpbWU7Cgp1c2UgZnVuY3Rpb24gZXhwbG9kZTsKdXNlIGZ1bmN0aW9uIHN0cl9wYWQ7Cgp1c2UgY29uc3QgU1RSX1BBRF9MRUZUOwoKLyoqCiAqIEdlbmVyaWNUaW1lQ29udmVydGVyIHVzZXMgdGhlIHByb3ZpZGVkIGNhbGN1bGF0b3IgdG8gY2FsY3VsYXRlIGFuZCBjb252ZXJ0CiAqIHRpbWUgdmFsdWVzCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmNsYXNzIEdlbmVyaWNUaW1lQ29udmVydGVyIGltcGxlbWVudHMgVGltZUNvbnZlcnRlckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFRoZSBudW1iZXIgb2YgMTAwLW5hbm9zZWNvbmQgaW50ZXJ2YWxzIGZyb20gdGhlIEdyZWdvcmlhbiBjYWxlbmRhciBlcG9jaAogICAgICogdG8gdGhlIFVuaXggZXBvY2guCiAgICAgKi8KICAgIHByaXZhdGUgY29uc3QgR1JFR09SSUFOX1RPX1VOSVhfSU5URVJWQUxTID0gJzEyMjE5MjkyODAwMDAwMDAwMCc7CgogICAgLyoqCiAgICAgKiBUaGUgbnVtYmVyIG9mIDEwMC1uYW5vc2Vjb25kIGludGVydmFscyBpbiBvbmUgc2Vjb25kLgogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFNFQ09ORF9JTlRFUlZBTFMgPSAnMTAwMDAwMDAnOwoKICAgIC8qKgogICAgICogVGhlIG51bWJlciBvZiAxMDAtbmFub3NlY29uZCBpbnRlcnZhbHMgaW4gb25lIG1pY3Jvc2Vjb25kLgogICAgICovCiAgICBwcml2YXRlIGNvbnN0IE1JQ1JPU0VDT05EX0lOVEVSVkFMUyA9ICcxMCc7CgogICAgLyoqCiAgICAgKiBAdmFyIENhbGN1bGF0b3JJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkY2FsY3VsYXRvcjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoQ2FsY3VsYXRvckludGVyZmFjZSAkY2FsY3VsYXRvcikKICAgIHsKICAgICAgICAkdGhpcy0+Y2FsY3VsYXRvciA9ICRjYWxjdWxhdG9yOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjYWxjdWxhdGVUaW1lKHN0cmluZyAkc2Vjb25kcywgc3RyaW5nICRtaWNyb3NlY29uZHMpOiBIZXhhZGVjaW1hbAogICAgewogICAgICAgICR0aW1lc3RhbXAgPSBuZXcgVGltZSgkc2Vjb25kcywgJG1pY3Jvc2Vjb25kcyk7CgogICAgICAgIC8vIENvbnZlcnQgdGhlIHNlY29uZHMgaW50byBhIGNvdW50IG9mIDEwMC1uYW5vc2Vjb25kIGludGVydmFscy4KICAgICAgICAkc2VjID0gJHRoaXMtPmNhbGN1bGF0b3ItPm11bHRpcGx5KAogICAgICAgICAgICAkdGltZXN0YW1wLT5nZXRTZWNvbmRzKCksCiAgICAgICAgICAgIG5ldyBJbnRlZ2VyT2JqZWN0KHNlbGY6OlNFQ09ORF9JTlRFUlZBTFMpCiAgICAgICAgKTsKCiAgICAgICAgLy8gQ29udmVydCB0aGUgbWljcm9zZWNvbmRzIGludG8gYSBjb3VudCBvZiAxMDAtbmFub3NlY29uZCBpbnRlcnZhbHMuCiAgICAgICAgJHVzZWMgPSAkdGhpcy0+Y2FsY3VsYXRvci0+bXVsdGlwbHkoCiAgICAgICAgICAgICR0aW1lc3RhbXAtPmdldE1pY3Jvc2Vjb25kcygpLAogICAgICAgICAgICBuZXcgSW50ZWdlck9iamVjdChzZWxmOjpNSUNST1NFQ09ORF9JTlRFUlZBTFMpCiAgICAgICAgKTsKCiAgICAgICAgLy8gQ29tYmluZSB0aGUgc2Vjb25kcyBhbmQgbWljcm9zZWNvbmRzIGludGVydmFscyBhbmQgYWRkIHRoZSBjb3VudCBvZgogICAgICAgIC8vIDEwMC1uYW5vc2Vjb25kIGludGVydmFscyBmcm9tIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIgZXBvY2ggdG8gdGhlCiAgICAgICAgLy8gVW5peCBlcG9jaC4gVGhpcyBnaXZlcyB1cyB0aGUgY29ycmVjdCBjb3VudCBvZiAxMDAtbmFub3NlY29uZAogICAgICAgIC8vIGludGVydmFscyBzaW5jZSB0aGUgR3JlZ29yaWFuIGNhbGVuZGFyIGVwb2NoIGZvciB0aGUgZ2l2ZW4gc2Vjb25kcwogICAgICAgIC8vIGFuZCBtaWNyb3NlY29uZHMuCiAgICAgICAgLyoqIEB2YXIgSW50ZWdlck9iamVjdCAkdXVpZFRpbWUgKi8KICAgICAgICAkdXVpZFRpbWUgPSAkdGhpcy0+Y2FsY3VsYXRvci0+YWRkKAogICAgICAgICAgICAkc2VjLAogICAgICAgICAgICAkdXNlYywKICAgICAgICAgICAgbmV3IEludGVnZXJPYmplY3Qoc2VsZjo6R1JFR09SSUFOX1RPX1VOSVhfSU5URVJWQUxTKQogICAgICAgICk7CgogICAgICAgICR1dWlkVGltZUhleCA9IHN0cl9wYWQoCiAgICAgICAgICAgICR0aGlzLT5jYWxjdWxhdG9yLT50b0hleGFkZWNpbWFsKCR1dWlkVGltZSktPnRvU3RyaW5nKCksCiAgICAgICAgICAgIDE2LAogICAgICAgICAgICAnMCcsCiAgICAgICAgICAgIFNUUl9QQURfTEVGVAogICAgICAgICk7CgogICAgICAgIHJldHVybiBuZXcgSGV4YWRlY2ltYWwoJHV1aWRUaW1lSGV4KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY29udmVydFRpbWUoSGV4YWRlY2ltYWwgJHV1aWRUaW1lc3RhbXApOiBUaW1lCiAgICB7CiAgICAgICAgLy8gRnJvbSB0aGUgdG90YWwsIHN1YnRyYWN0IHRoZSBudW1iZXIgb2YgMTAwLW5hbm9zZWNvbmQgaW50ZXJ2YWxzIGZyb20KICAgICAgICAvLyB0aGUgR3JlZ29yaWFuIGNhbGVuZGFyIGVwb2NoIHRvIHRoZSBVbml4IGVwb2NoLiBUaGlzIGdpdmVzIHVzIHRoZQogICAgICAgIC8vIG51bWJlciBvZiAxMDAtbmFub3NlY29uZCBpbnRlcnZhbHMgZnJvbSB0aGUgVW5peCBlcG9jaCwgd2hpY2ggYWxzbwogICAgICAgIC8vIGluY2x1ZGVzIHRoZSBtaWNyb3RpbWUuCiAgICAgICAgJGVwb2NoTmFub3NlY29uZHMgPSAkdGhpcy0+Y2FsY3VsYXRvci0+c3VidHJhY3QoCiAgICAgICAgICAgICR0aGlzLT5jYWxjdWxhdG9yLT50b0ludGVnZXIoJHV1aWRUaW1lc3RhbXApLAogICAgICAgICAgICBuZXcgSW50ZWdlck9iamVjdChzZWxmOjpHUkVHT1JJQU5fVE9fVU5JWF9JTlRFUlZBTFMpCiAgICAgICAgKTsKCiAgICAgICAgLy8gQ29udmVydCB0aGUgMTAwLW5hbm9zZWNvbmQgaW50ZXJ2YWxzIGludG8gc2Vjb25kcyBhbmQgbWljcm9zZWNvbmRzLgogICAgICAgICR1bml4VGltZXN0YW1wID0gJHRoaXMtPmNhbGN1bGF0b3ItPmRpdmlkZSgKICAgICAgICAgICAgUm91bmRpbmdNb2RlOjpIQUxGX1VQLAogICAgICAgICAgICA2LAogICAgICAgICAgICAkZXBvY2hOYW5vc2Vjb25kcywKICAgICAgICAgICAgbmV3IEludGVnZXJPYmplY3Qoc2VsZjo6U0VDT05EX0lOVEVSVkFMUykKICAgICAgICApOwoKICAgICAgICAkc3BsaXQgPSBleHBsb2RlKCcuJywgKHN0cmluZykgJHVuaXhUaW1lc3RhbXAsIDIpOwoKICAgICAgICByZXR1cm4gbmV3IFRpbWUoJHNwbGl0WzBdLCAkc3BsaXRbMV0gPz8gMCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Converter/Time/PhpTimeConverter.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lOwoKdXNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcTWF0aFxCcmlja01hdGhDYWxjdWxhdG9yOwp1c2UgUmFtc2V5XFV1aWRcTWF0aFxDYWxjdWxhdG9ySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxIZXhhZGVjaW1hbDsKdXNlIFJhbXNleVxVdWlkXFR5cGVcSW50ZWdlciBhcyBJbnRlZ2VyT2JqZWN0Owp1c2UgUmFtc2V5XFV1aWRcVHlwZVxUaW1lOwoKdXNlIGZ1bmN0aW9uIGNvdW50Owp1c2UgZnVuY3Rpb24gZGVjaGV4Owp1c2UgZnVuY3Rpb24gZXhwbG9kZTsKdXNlIGZ1bmN0aW9uIGlzX2Zsb2F0Owp1c2UgZnVuY3Rpb24gaXNfaW50Owp1c2UgZnVuY3Rpb24gc3RyX3BhZDsKdXNlIGZ1bmN0aW9uIHN0cmxlbjsKdXNlIGZ1bmN0aW9uIHN1YnN0cjsKCnVzZSBjb25zdCBTVFJfUEFEX0xFRlQ7CnVzZSBjb25zdCBTVFJfUEFEX1JJR0hUOwoKLyoqCiAqIFBocFRpbWVDb252ZXJ0ZXIgdXNlcyBidWlsdC1pbiBQSFAgZnVuY3Rpb25zIGFuZCBzdGFuZGFyZCBtYXRoIG9wZXJhdGlvbnMKICogYXZhaWxhYmxlIHRvIHRoZSBQSFAgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgdG8gcHJvdmlkZSBmYWNpbGl0aWVzIGZvcgogKiBjb252ZXJ0aW5nIHBhcnRzIG9mIHRpbWUgaW50byByZXByZXNlbnRhdGlvbnMgdGhhdCBtYXkgYmUgdXNlZCBpbiBVVUlEcwogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpjbGFzcyBQaHBUaW1lQ29udmVydGVyIGltcGxlbWVudHMgVGltZUNvbnZlcnRlckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFRoZSBudW1iZXIgb2YgMTAwLW5hbm9zZWNvbmQgaW50ZXJ2YWxzIGZyb20gdGhlIEdyZWdvcmlhbiBjYWxlbmRhciBlcG9jaAogICAgICogdG8gdGhlIFVuaXggZXBvY2guCiAgICAgKi8KICAgIHByaXZhdGUgY29uc3QgR1JFR09SSUFOX1RPX1VOSVhfSU5URVJWQUxTID0gMHgwMWIyMWRkMjEzODE0MDAwOwoKICAgIC8qKgogICAgICogVGhlIG51bWJlciBvZiAxMDAtbmFub3NlY29uZCBpbnRlcnZhbHMgaW4gb25lIHNlY29uZC4KICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBTRUNPTkRfSU5URVJWQUxTID0gMTAwMDAwMDA7CgogICAgLyoqCiAgICAgKiBUaGUgbnVtYmVyIG9mIDEwMC1uYW5vc2Vjb25kIGludGVydmFscyBpbiBvbmUgbWljcm9zZWNvbmQuCiAgICAgKi8KICAgIHByaXZhdGUgY29uc3QgTUlDUk9TRUNPTkRfSU5URVJWQUxTID0gMTA7CgogICAgLyoqCiAgICAgKiBAdmFyIENhbGN1bGF0b3JJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkY2FsY3VsYXRvcjsKCiAgICAvKioKICAgICAqIEB2YXIgVGltZUNvbnZlcnRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRmYWxsYmFja0NvbnZlcnRlcjsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByaXZhdGUgJHBocFByZWNpc2lvbjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgP0NhbGN1bGF0b3JJbnRlcmZhY2UgJGNhbGN1bGF0b3IgPSBudWxsLAogICAgICAgID9UaW1lQ29udmVydGVySW50ZXJmYWNlICRmYWxsYmFja0NvbnZlcnRlciA9IG51bGwKICAgICkgewogICAgICAgIGlmICgkY2FsY3VsYXRvciA9PT0gbnVsbCkgewogICAgICAgICAgICAkY2FsY3VsYXRvciA9IG5ldyBCcmlja01hdGhDYWxjdWxhdG9yKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGZhbGxiYWNrQ29udmVydGVyID09PSBudWxsKSB7CiAgICAgICAgICAgICRmYWxsYmFja0NvbnZlcnRlciA9IG5ldyBHZW5lcmljVGltZUNvbnZlcnRlcigkY2FsY3VsYXRvcik7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+Y2FsY3VsYXRvciA9ICRjYWxjdWxhdG9yOwogICAgICAgICR0aGlzLT5mYWxsYmFja0NvbnZlcnRlciA9ICRmYWxsYmFja0NvbnZlcnRlcjsKICAgICAgICAkdGhpcy0+cGhwUHJlY2lzaW9uID0gKGludCkgaW5pX2dldCgncHJlY2lzaW9uJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNhbGN1bGF0ZVRpbWUoc3RyaW5nICRzZWNvbmRzLCBzdHJpbmcgJG1pY3Jvc2Vjb25kcyk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgJHNlY29uZHMgPSBuZXcgSW50ZWdlck9iamVjdCgkc2Vjb25kcyk7CiAgICAgICAgJG1pY3Jvc2Vjb25kcyA9IG5ldyBJbnRlZ2VyT2JqZWN0KCRtaWNyb3NlY29uZHMpOwoKICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGNvdW50IG9mIDEwMC1uYW5vc2Vjb25kIGludGVydmFscyBzaW5jZSB0aGUgR3JlZ29yaWFuCiAgICAgICAgLy8gY2FsZW5kYXIgZXBvY2ggZm9yIHRoZSBnaXZlbiBzZWNvbmRzIGFuZCBtaWNyb3NlY29uZHMuCiAgICAgICAgJHV1aWRUaW1lID0gKChpbnQpICRzZWNvbmRzLT50b1N0cmluZygpICogc2VsZjo6U0VDT05EX0lOVEVSVkFMUykKICAgICAgICAgICAgKyAoKGludCkgJG1pY3Jvc2Vjb25kcy0+dG9TdHJpbmcoKSAqIHNlbGY6Ok1JQ1JPU0VDT05EX0lOVEVSVkFMUykKICAgICAgICAgICAgKyBzZWxmOjpHUkVHT1JJQU5fVE9fVU5JWF9JTlRFUlZBTFM7CgogICAgICAgIC8vIENoZWNrIHRvIHNlZSB3aGV0aGVyIHdlJ3ZlIG92ZXJmbG93ZWQgdGhlIG1heC9taW4gaW50ZWdlciBzaXplLgogICAgICAgIC8vIElmIHNvLCB3ZSB3aWxsIGRlZmF1bHQgdG8gYSBkaWZmZXJlbnQgdGltZSBjb252ZXJ0ZXIuCiAgICAgICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBSZWR1bmRhbnRDb25kaXRpb24gKi8KICAgICAgICBpZiAoIWlzX2ludCgkdXVpZFRpbWUpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZmFsbGJhY2tDb252ZXJ0ZXItPmNhbGN1bGF0ZVRpbWUoCiAgICAgICAgICAgICAgICAkc2Vjb25kcy0+dG9TdHJpbmcoKSwKICAgICAgICAgICAgICAgICRtaWNyb3NlY29uZHMtPnRvU3RyaW5nKCkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgSGV4YWRlY2ltYWwoc3RyX3BhZChkZWNoZXgoJHV1aWRUaW1lKSwgMTYsICcwJywgU1RSX1BBRF9MRUZUKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNvbnZlcnRUaW1lKEhleGFkZWNpbWFsICR1dWlkVGltZXN0YW1wKTogVGltZQogICAgewogICAgICAgICR0aW1lc3RhbXAgPSAkdGhpcy0+Y2FsY3VsYXRvci0+dG9JbnRlZ2VyKCR1dWlkVGltZXN0YW1wKTsKCiAgICAgICAgLy8gQ29udmVydCB0aGUgMTAwLW5hbm9zZWNvbmQgaW50ZXJ2YWxzIGludG8gc2Vjb25kcyBhbmQgbWljcm9zZWNvbmRzLgogICAgICAgICRzcGxpdFRpbWUgPSAkdGhpcy0+c3BsaXRUaW1lKAogICAgICAgICAgICAoKGludCkgJHRpbWVzdGFtcC0+dG9TdHJpbmcoKSAtIHNlbGY6OkdSRUdPUklBTl9UT19VTklYX0lOVEVSVkFMUykKICAgICAgICAgICAgLyBzZWxmOjpTRUNPTkRfSU5URVJWQUxTCiAgICAgICAgKTsKCiAgICAgICAgaWYgKGNvdW50KCRzcGxpdFRpbWUpID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZmFsbGJhY2tDb252ZXJ0ZXItPmNvbnZlcnRUaW1lKCR1dWlkVGltZXN0YW1wKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgVGltZSgkc3BsaXRUaW1lWydzZWMnXSwgJHNwbGl0VGltZVsndXNlYyddKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnR8ZmxvYXQgJHRpbWUgVGhlIHRpbWUgdG8gc3BsaXQgaW50byBzZWNvbmRzIGFuZCBtaWNyb3NlY29uZHMKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gc3BsaXRUaW1lKCR0aW1lKTogYXJyYXkKICAgIHsKICAgICAgICAkc3BsaXQgPSBleHBsb2RlKCcuJywgKHN0cmluZykgJHRpbWUsIDIpOwoKICAgICAgICAvLyBJZiB0aGUgJHRpbWUgdmFsdWUgaXMgYSBmbG9hdCBidXQgJHNwbGl0IG9ubHkgaGFzIDEgZWxlbWVudCwgdGhlbiB0aGUKICAgICAgICAvLyBmbG9hdCBtYXRoIHdhcyByb3VuZGVkIHVwIHRvIHRoZSBuZXh0IHNlY29uZCwgc28gd2Ugd2FudCB0byByZXR1cm4KICAgICAgICAvLyBhbiBlbXB0eSBhcnJheSB0byBhbGxvdyB1c2Ugb2YgdGhlIGZhbGxiYWNrIGNvbnZlcnRlci4KICAgICAgICBpZiAoaXNfZmxvYXQoJHRpbWUpICYmIGNvdW50KCRzcGxpdCkgPT09IDEpIHsKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIH0KCiAgICAgICAgaWYgKGNvdW50KCRzcGxpdCkgPT09IDEpIHsKICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICdzZWMnID0+ICRzcGxpdFswXSwKICAgICAgICAgICAgICAgICd1c2VjJyA9PiAnMCcsCiAgICAgICAgICAgIF07CiAgICAgICAgfQoKICAgICAgICAvLyBJZiB0aGUgbWljcm9zZWNvbmRzIGFyZSBsZXNzIHRoYW4gc2l4IGNoYXJhY3RlcnMgQU5EIHRoZSBsZW5ndGggb2YKICAgICAgICAvLyB0aGUgbnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgUEhQIHByZWNpc2lvbiwgdGhlbiBpdCdzCiAgICAgICAgLy8gcG9zc2libGUgdGhhdCB3ZSBsb3N0IHNvbWUgcHJlY2lzaW9uIGZvciB0aGUgbWljcm9zZWNvbmRzLiBSZXR1cm4gYW4KICAgICAgICAvLyBlbXB0eSBhcnJheSwgc28gdGhhdCB3ZSBjYW4gY2hvb3NlIHRvIHVzZSB0aGUgZmFsbGJhY2sgY29udmVydGVyLgogICAgICAgIGlmIChzdHJsZW4oJHNwbGl0WzFdKSA8IDYgJiYgc3RybGVuKChzdHJpbmcpICR0aW1lKSA+PSAkdGhpcy0+cGhwUHJlY2lzaW9uKSB7CiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB9CgogICAgICAgICRtaWNyb3NlY29uZHMgPSAkc3BsaXRbMV07CgogICAgICAgIC8vIEVuc3VyZSB0aGUgbWljcm9zZWNvbmRzIGFyZSBubyBsb25nZXIgdGhhbiA2IGRpZ2l0cy4gSWYgdGhleSBhcmUsCiAgICAgICAgLy8gdHJ1bmNhdGUgdGhlIG51bWJlciB0byB0aGUgZmlyc3QgNiBkaWdpdHMgYW5kIHJvdW5kIHVwLCBpZiBuZWVkZWQuCiAgICAgICAgaWYgKHN0cmxlbigkbWljcm9zZWNvbmRzKSA+IDYpIHsKICAgICAgICAgICAgJHJvdW5kaW5nRGlnaXQgPSAoaW50KSBzdWJzdHIoJG1pY3Jvc2Vjb25kcywgNiwgMSk7CiAgICAgICAgICAgICRtaWNyb3NlY29uZHMgPSAoaW50KSBzdWJzdHIoJG1pY3Jvc2Vjb25kcywgMCwgNik7CgogICAgICAgICAgICBpZiAoJHJvdW5kaW5nRGlnaXQgPj0gNSkgewogICAgICAgICAgICAgICAgJG1pY3Jvc2Vjb25kcysrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAnc2VjJyA9PiAkc3BsaXRbMF0sCiAgICAgICAgICAgICd1c2VjJyA9PiBzdHJfcGFkKChzdHJpbmcpICRtaWNyb3NlY29uZHMsIDYsICcwJywgU1RSX1BBRF9SSUdIVCksCiAgICAgICAgXTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Converter/TimeConverterInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvbnZlcnRlcjsKCnVzZSBSYW1zZXlcVXVpZFxUeXBlXEhleGFkZWNpbWFsOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxUaW1lOwoKLyoqCiAqIEEgdGltZSBjb252ZXJ0ZXIgY29udmVydHMgdGltZXN0YW1wcyBpbnRvIHJlcHJlc2VudGF0aW9ucyB0aGF0IG1heSBiZSB1c2VkCiAqIGluIFVVSURzCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmludGVyZmFjZSBUaW1lQ29udmVydGVySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogVXNlcyB0aGUgcHJvdmlkZWQgc2Vjb25kcyBhbmQgbWljcm8tc2Vjb25kcyB0byBjYWxjdWxhdGUgdGhlIGNvdW50IG9mCiAgICAgKiAxMDAtbmFub3NlY29uZCBpbnRlcnZhbHMgc2luY2UgVVRDIDAwOjAwOjAwLjAwLCAxNSBPY3RvYmVyIDE1ODIsIGZvcgogICAgICogUkZDIDQxMjIgdmFyaWFudCBVVUlEcwogICAgICoKICAgICAqIEBsaW5rIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQxMjIjc2VjdGlvbi00LjIuMiBSRkMgNDEyMiwgwqcgNC4yLjI6IEdlbmVyYXRpb24gRGV0YWlscwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlY29uZHMgQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG51bWJlciBvZiBzZWNvbmRzCiAgICAgKiAgICAgc2luY2UgdGhlIFVuaXggZXBvY2ggZm9yIHRoZSB0aW1lIHRvIGNhbGN1bGF0ZQogICAgICogQHBhcmFtIHN0cmluZyAkbWljcm9zZWNvbmRzIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtaWNyby1zZWNvbmRzCiAgICAgKiAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSB0aW1lIHRvIGNhbGN1bGF0ZQogICAgICoKICAgICAqIEByZXR1cm4gSGV4YWRlY2ltYWwgVGhlIGZ1bGwgVVVJRCB0aW1lc3RhbXAgYXMgYSBIZXhhZGVjaW1hbCB2YWx1ZQogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjYWxjdWxhdGVUaW1lKHN0cmluZyAkc2Vjb25kcywgc3RyaW5nICRtaWNyb3NlY29uZHMpOiBIZXhhZGVjaW1hbDsKCiAgICAvKioKICAgICAqIENvbnZlcnRzIGEgdGltZXN0YW1wIGV4dHJhY3RlZCBmcm9tIGEgVVVJRCB0byBhIFVuaXggdGltZXN0YW1wCiAgICAgKgogICAgICogQHBhcmFtIEhleGFkZWNpbWFsICR1dWlkVGltZXN0YW1wIEEgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgYSBVVUlECiAgICAgKiAgICAgdGltZXN0YW1wOyBhIFVVSUQgdGltZXN0YW1wIGlzIGEgY291bnQgb2YgMTAwLW5hbm9zZWNvbmQgaW50ZXJ2YWxzCiAgICAgKiAgICAgc2luY2UgVVRDIDAwOjAwOjAwLjAwLCAxNSBPY3RvYmVyIDE1ODIuCiAgICAgKgogICAgICogQHJldHVybiBUaW1lIEFuIGluc3RhbmNlIG9mIHtAc2VlIFRpbWV9CiAgICAgKgogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbnZlcnRUaW1lKEhleGFkZWNpbWFsICR1dWlkVGltZXN0YW1wKTogVGltZTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/DegradedUuid.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkOwoKLyoqCiAqIEBkZXByZWNhdGVkIERlZ3JhZGVkVXVpZCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvIHJlcHJlc2VudCBVVUlEcyBvbiAzMi1iaXQKICogICAgIHN5c3RlbXMuIFRyYW5zaXRpb24gdHlwZWhpbnRzIHRvIHtAc2VlIFV1aWRJbnRlcmZhY2V9LgogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpjbGFzcyBEZWdyYWRlZFV1aWQgZXh0ZW5kcyBVdWlkCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/DeprecatedUuidInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkOwoKdXNlIERhdGVUaW1lSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXE51bWJlckNvbnZlcnRlckludGVyZmFjZTsKCi8qKgogKiBUaGlzIGludGVyZmFjZSBlbmNhcHN1bGF0ZXMgZGVwcmVjYXRlZCBtZXRob2RzIGZvciByYW1zZXkvdXVpZDsgdGhpcwogKiBpbnRlcmZhY2UgYW5kIGl0cyBtZXRob2RzIHdpbGwgYmUgcmVtb3ZlZCBpbiByYW1zZXkvdXVpZCA1LjAuMC4KICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KaW50ZXJmYWNlIERlcHJlY2F0ZWRVdWlkSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIDUuMC4wLiBUaGVyZSBpcyBubyBhbHRlcm5hdGl2ZQogICAgICogICAgIHJlY29tbWVuZGF0aW9uLCBzbyBwbGFuIGFjY29yZGluZ2x5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TnVtYmVyQ29udmVydGVyKCk6IE51bWJlckNvbnZlcnRlckludGVyZmFjZTsKCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRGaWVsZHMoKX0gdG8gZ2V0IGEKICAgICAqICAgICB7QHNlZSBGaWVsZHNJbnRlcmZhY2V9IGluc3RhbmNlLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZpZWxkc0hleCgpOiBhcnJheTsKCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRGaWVsZHMoKX0gdG8gZ2V0IGEKICAgICAqICAgICB7QHNlZSBGaWVsZHNJbnRlcmZhY2V9IGluc3RhbmNlLiBJZiBpdCBpcyBhCiAgICAgKiAgICAge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZSwgeW91IG1heSBjYWxsCiAgICAgKiAgICAge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlOjpnZXRDbG9ja1NlcUhpQW5kUmVzZXJ2ZWQoKX0uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbG9ja1NlcUhpQW5kUmVzZXJ2ZWRIZXgoKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAc2VlIFV1aWRJbnRlcmZhY2U6OmdldEZpZWxkcygpfSB0byBnZXQgYQogICAgICogICAgIHtAc2VlIEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UuIElmIGl0IGlzIGEKICAgICAqICAgICB7QHNlZSBcUmFtc2V5XFV1aWRcUmZjNDEyMlxGaWVsZHNJbnRlcmZhY2V9IGluc3RhbmNlLCB5b3UgbWF5IGNhbGwKICAgICAqICAgICB7QHNlZSBcUmFtc2V5XFV1aWRcUmZjNDEyMlxGaWVsZHNJbnRlcmZhY2U6OmdldENsb2NrU2VxTG93KCl9LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xvY2tTZXFMb3dIZXgoKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAc2VlIFV1aWRJbnRlcmZhY2U6OmdldEZpZWxkcygpfSB0byBnZXQgYQogICAgICogICAgIHtAc2VlIEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UuIElmIGl0IGlzIGEKICAgICAqICAgICB7QHNlZSBcUmFtc2V5XFV1aWRcUmZjNDEyMlxGaWVsZHNJbnRlcmZhY2V9IGluc3RhbmNlLCB5b3UgbWF5IGNhbGwKICAgICAqICAgICB7QHNlZSBcUmFtc2V5XFV1aWRcUmZjNDEyMlxGaWVsZHNJbnRlcmZhY2U6OmdldENsb2NrU2VxKCl9LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xvY2tTZXF1ZW5jZUhleCgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBJbiByYW1zZXkvdXVpZCB2ZXJzaW9uIDUuMC4wLCB0aGlzIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZQogICAgICogICAgIGludGVyZmFjZS4gSXQgaXMgYXZhaWxhYmxlIGF0IHtAc2VlIFV1aWRWMTo6Z2V0RGF0ZVRpbWUoKX0uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREYXRlVGltZSgpOiBEYXRlVGltZUludGVyZmFjZTsKCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiA1LjAuMC4gVGhlcmUgaXMgbm8gZGlyZWN0CiAgICAgKiAgICAgYWx0ZXJuYXRpdmUsIGJ1dCB0aGUgc2FtZSBpbmZvcm1hdGlvbiBtYXkgYmUgb2J0YWluZWQgYnkgc3BsaXR0aW5nCiAgICAgKiAgICAgaW4gaGFsZiB0aGUgdmFsdWUgcmV0dXJuZWQgYnkge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0SGV4KCl9LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGVhc3RTaWduaWZpY2FudEJpdHNIZXgoKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIDUuMC4wLiBUaGVyZSBpcyBubyBkaXJlY3QKICAgICAqICAgICBhbHRlcm5hdGl2ZSwgYnV0IHRoZSBzYW1lIGluZm9ybWF0aW9uIG1heSBiZSBvYnRhaW5lZCBieSBzcGxpdHRpbmcKICAgICAqICAgICBpbiBoYWxmIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRIZXgoKX0uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNb3N0U2lnbmlmaWNhbnRCaXRzSGV4KCk6IHN0cmluZzsKCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRGaWVsZHMoKX0gdG8gZ2V0IGEKICAgICAqICAgICB7QHNlZSBGaWVsZHNJbnRlcmZhY2V9IGluc3RhbmNlLiBJZiBpdCBpcyBhCiAgICAgKiAgICAge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZSwgeW91IG1heSBjYWxsCiAgICAgKiAgICAge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlOjpnZXROb2RlKCl9LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9kZUhleCgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYQogICAgICogICAgIHtAc2VlIFxSYW1zZXlcVXVpZFxSZmM0MTIyXEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UsIHlvdSBtYXkgY2FsbAogICAgICogICAgIHtAc2VlIFxSYW1zZXlcVXVpZFxSZmM0MTIyXEZpZWxkc0ludGVyZmFjZTo6Z2V0VGltZUhpQW5kVmVyc2lvbigpfS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVIaUFuZFZlcnNpb25IZXgoKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAc2VlIFV1aWRJbnRlcmZhY2U6OmdldEZpZWxkcygpfSB0byBnZXQgYQogICAgICogICAgIHtAc2VlIEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UuIElmIGl0IGlzIGEKICAgICAqICAgICB7QHNlZSBcUmFtc2V5XFV1aWRcUmZjNDEyMlxGaWVsZHNJbnRlcmZhY2V9IGluc3RhbmNlLCB5b3UgbWF5IGNhbGwKICAgICAqICAgICB7QHNlZSBcUmFtc2V5XFV1aWRcUmZjNDEyMlxGaWVsZHNJbnRlcmZhY2U6OmdldFRpbWVMb3coKX0uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lTG93SGV4KCk6IHN0cmluZzsKCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRGaWVsZHMoKX0gdG8gZ2V0IGEKICAgICAqICAgICB7QHNlZSBGaWVsZHNJbnRlcmZhY2V9IGluc3RhbmNlLiBJZiBpdCBpcyBhCiAgICAgKiAgICAge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZSwgeW91IG1heSBjYWxsCiAgICAgKiAgICAge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlOjpnZXRUaW1lTWlkKCl9LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZU1pZEhleCgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYQogICAgICogICAgIHtAc2VlIFxSYW1zZXlcVXVpZFxSZmM0MTIyXEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UsIHlvdSBtYXkgY2FsbAogICAgICogICAgIHtAc2VlIFxSYW1zZXlcVXVpZFxSZmM0MTIyXEZpZWxkc0ludGVyZmFjZTo6Z2V0VGltZXN0YW1wKCl9LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZXN0YW1wSGV4KCk6IHN0cmluZzsKCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIEluIHJhbXNleS91dWlkIHZlcnNpb24gNS4wLjAsIHRoaXMgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhpcwogICAgICogICAgIGludGVyZmFjZS4gSXQgaGFzIG1vdmVkIHRvIHtAc2VlIFxSYW1zZXlcVXVpZFxSZmM0MTIyXFV1aWRJbnRlcmZhY2U6OmdldFVybigpfS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFVybigpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYQogICAgICogICAgIHtAc2VlIFxSYW1zZXlcVXVpZFxSZmM0MTIyXEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UsIHlvdSBtYXkgY2FsbAogICAgICogICAgIHtAc2VlIFxSYW1zZXlcVXVpZFxSZmM0MTIyXEZpZWxkc0ludGVyZmFjZTo6Z2V0VmFyaWFudCgpfS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFZhcmlhbnQoKTogP2ludDsKCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRGaWVsZHMoKX0gdG8gZ2V0IGEKICAgICAqICAgICB7QHNlZSBGaWVsZHNJbnRlcmZhY2V9IGluc3RhbmNlLiBJZiBpdCBpcyBhCiAgICAgKiAgICAge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZSwgeW91IG1heSBjYWxsCiAgICAgKiAgICAge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlOjpnZXRWZXJzaW9uKCl9LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmVyc2lvbigpOiA/aW50Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/DeprecatedUuidMethodsTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkOwoKdXNlIERhdGVUaW1lSW1tdXRhYmxlOwp1c2UgRGF0ZVRpbWVJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcTnVtYmVyQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxFeGNlcHRpb25cRGF0ZVRpbWVFeGNlcHRpb247CnVzZSBSYW1zZXlcVXVpZFxFeGNlcHRpb25cVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb247CnVzZSBSYW1zZXlcVXVpZFxSZmM0MTIyXEZpZWxkc0ludGVyZmFjZSBhcyBSZmM0MTIyRmllbGRzSW50ZXJmYWNlOwp1c2UgVGhyb3dhYmxlOwoKdXNlIGZ1bmN0aW9uIHN0cl9wYWQ7CnVzZSBmdW5jdGlvbiBzdWJzdHI7Cgp1c2UgY29uc3QgU1RSX1BBRF9MRUZUOwoKLyoqCiAqIFRoaXMgdHJhaXQgZW5jYXBzdWxhdGVzIGRlcHJlY2F0ZWQgbWV0aG9kcyBmb3IgcmFtc2V5L3V1aWQ7IHRoaXMgdHJhaXQgYW5kCiAqIGl0cyBtZXRob2RzIHdpbGwgYmUgcmVtb3ZlZCBpbiByYW1zZXkvdXVpZCA1LjAuMC4KICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KdHJhaXQgRGVwcmVjYXRlZFV1aWRNZXRob2RzVHJhaXQKewogICAgLyoqCiAgICAgKiBAdmFyIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2UKICAgICAqLwogICAgcHJvdGVjdGVkICRmaWVsZHM7CgogICAgLyoqCiAgICAgKiBAdmFyIE51bWJlckNvbnZlcnRlckludGVyZmFjZQogICAgICovCiAgICBwcm90ZWN0ZWQgJG51bWJlckNvbnZlcnRlcjsKCiAgICAvKioKICAgICAqIEB2YXIgVGltZUNvbnZlcnRlckludGVyZmFjZQogICAgICovCiAgICBwcm90ZWN0ZWQgJHRpbWVDb252ZXJ0ZXI7CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYSB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlfQogICAgICogICAgIGluc3RhbmNlLCB5b3UgbWF5IGNhbGwge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTo6Z2V0Q2xvY2tTZXFIaUFuZFJlc2VydmVkKCl9CiAgICAgKiAgICAgYW5kIHVzZSB0aGUgYXJiaXRyYXJ5LXByZWNpc2lvbiBtYXRoIGxpYnJhcnkgb2YgeW91ciBjaG9pY2UgdG8KICAgICAqICAgICBjb252ZXJ0IGl0IHRvIGEgc3RyaW5nIGludGVnZXIuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbG9ja1NlcUhpQW5kUmVzZXJ2ZWQoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5udW1iZXJDb252ZXJ0ZXItPmZyb21IZXgoJHRoaXMtPmZpZWxkcy0+Z2V0Q2xvY2tTZXFIaUFuZFJlc2VydmVkKCktPnRvU3RyaW5nKCkpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAc2VlIFV1aWRJbnRlcmZhY2U6OmdldEZpZWxkcygpfSB0byBnZXQgYQogICAgICogICAgIHtAc2VlIEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UuIElmIGl0IGlzIGEge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZX0KICAgICAqICAgICBpbnN0YW5jZSwgeW91IG1heSBjYWxsIHtAc2VlIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2U6OmdldENsb2NrU2VxSGlBbmRSZXNlcnZlZCgpfS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENsb2NrU2VxSGlBbmRSZXNlcnZlZEhleCgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmZpZWxkcy0+Z2V0Q2xvY2tTZXFIaUFuZFJlc2VydmVkKCktPnRvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYSB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlfQogICAgICogICAgIGluc3RhbmNlLCB5b3UgbWF5IGNhbGwge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTo6Z2V0Q2xvY2tTZXFMb3coKX0KICAgICAqICAgICBhbmQgdXNlIHRoZSBhcmJpdHJhcnktcHJlY2lzaW9uIG1hdGggbGlicmFyeSBvZiB5b3VyIGNob2ljZSB0bwogICAgICogICAgIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcgaW50ZWdlci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENsb2NrU2VxTG93KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bnVtYmVyQ29udmVydGVyLT5mcm9tSGV4KCR0aGlzLT5maWVsZHMtPmdldENsb2NrU2VxTG93KCktPnRvU3RyaW5nKCkpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAc2VlIFV1aWRJbnRlcmZhY2U6OmdldEZpZWxkcygpfSB0byBnZXQgYQogICAgICogICAgIHtAc2VlIEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UuIElmIGl0IGlzIGEge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZX0KICAgICAqICAgICBpbnN0YW5jZSwgeW91IG1heSBjYWxsIHtAc2VlIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2U6OmdldENsb2NrU2VxTG93KCl9LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xvY2tTZXFMb3dIZXgoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5maWVsZHMtPmdldENsb2NrU2VxTG93KCktPnRvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYSB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlfQogICAgICogICAgIGluc3RhbmNlLCB5b3UgbWF5IGNhbGwge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTo6Z2V0Q2xvY2tTZXEoKX0KICAgICAqICAgICBhbmQgdXNlIHRoZSBhcmJpdHJhcnktcHJlY2lzaW9uIG1hdGggbGlicmFyeSBvZiB5b3VyIGNob2ljZSB0bwogICAgICogICAgIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcgaW50ZWdlci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENsb2NrU2VxdWVuY2UoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5udW1iZXJDb252ZXJ0ZXItPmZyb21IZXgoJHRoaXMtPmZpZWxkcy0+Z2V0Q2xvY2tTZXEoKS0+dG9TdHJpbmcoKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYSB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlfQogICAgICogICAgIGluc3RhbmNlLCB5b3UgbWF5IGNhbGwge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTo6Z2V0Q2xvY2tTZXEoKX0uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbG9ja1NlcXVlbmNlSGV4KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZmllbGRzLT5nZXRDbG9ja1NlcSgpLT50b1N0cmluZygpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIDUuMC4wLiBUaGVyZSBpcyBubyBhbHRlcm5hdGl2ZQogICAgICogICAgIHJlY29tbWVuZGF0aW9uLCBzbyBwbGFuIGFjY29yZGluZ2x5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TnVtYmVyQ29udmVydGVyKCk6IE51bWJlckNvbnZlcnRlckludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bnVtYmVyQ29udmVydGVyOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgSW4gcmFtc2V5L3V1aWQgdmVyc2lvbiA1LjAuMCwgdGhpcyB3aWxsIGJlIHJlbW92ZWQuCiAgICAgKiAgICAgSXQgaXMgYXZhaWxhYmxlIGF0IHtAc2VlIFV1aWRWMTo6Z2V0RGF0ZVRpbWUoKX0uCiAgICAgKgogICAgICogQHJldHVybiBEYXRlVGltZUltbXV0YWJsZSBBbiBpbW11dGFibGUgaW5zdGFuY2Ugb2YgRGF0ZVRpbWVJbnRlcmZhY2UKICAgICAqCiAgICAgKiBAdGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGlmIFVVSUQgaXMgbm90IHRpbWUtYmFzZWQKICAgICAqIEB0aHJvd3MgRGF0ZVRpbWVFeGNlcHRpb24gaWYgRGF0ZVRpbWUgdGhyb3dzIGFuIGV4Y2VwdGlvbi9lcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGF0ZVRpbWUoKTogRGF0ZVRpbWVJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmZpZWxkcy0+Z2V0VmVyc2lvbigpICE9PSAxKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbignTm90IGEgdGltZS1iYXNlZCBVVUlEJyk7CiAgICAgICAgfQoKICAgICAgICAkdGltZSA9ICR0aGlzLT50aW1lQ29udmVydGVyLT5jb252ZXJ0VGltZSgkdGhpcy0+ZmllbGRzLT5nZXRUaW1lc3RhbXAoKSk7CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWVJbW11dGFibGUoCiAgICAgICAgICAgICAgICAnQCcKICAgICAgICAgICAgICAgIC4gJHRpbWUtPmdldFNlY29uZHMoKS0+dG9TdHJpbmcoKQogICAgICAgICAgICAgICAgLiAnLicKICAgICAgICAgICAgICAgIC4gc3RyX3BhZCgkdGltZS0+Z2V0TWljcm9zZWNvbmRzKCktPnRvU3RyaW5nKCksIDYsICcwJywgU1RSX1BBRF9MRUZUKQogICAgICAgICAgICApOwogICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSAkZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRGF0ZVRpbWVFeGNlcHRpb24oJGUtPmdldE1lc3NhZ2UoKSwgKGludCkgJGUtPmdldENvZGUoKSwgJGUpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRGaWVsZHMoKX0gdG8gZ2V0IGEKICAgICAqICAgICB7QHNlZSBGaWVsZHNJbnRlcmZhY2V9IGluc3RhbmNlLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZpZWxkc0hleCgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICd0aW1lX2xvdycgPT4gJHRoaXMtPmZpZWxkcy0+Z2V0VGltZUxvdygpLT50b1N0cmluZygpLAogICAgICAgICAgICAndGltZV9taWQnID0+ICR0aGlzLT5maWVsZHMtPmdldFRpbWVNaWQoKS0+dG9TdHJpbmcoKSwKICAgICAgICAgICAgJ3RpbWVfaGlfYW5kX3ZlcnNpb24nID0+ICR0aGlzLT5maWVsZHMtPmdldFRpbWVIaUFuZFZlcnNpb24oKS0+dG9TdHJpbmcoKSwKICAgICAgICAgICAgJ2Nsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWQnID0+ICR0aGlzLT5maWVsZHMtPmdldENsb2NrU2VxSGlBbmRSZXNlcnZlZCgpLT50b1N0cmluZygpLAogICAgICAgICAgICAnY2xvY2tfc2VxX2xvdycgPT4gJHRoaXMtPmZpZWxkcy0+Z2V0Q2xvY2tTZXFMb3coKS0+dG9TdHJpbmcoKSwKICAgICAgICAgICAgJ25vZGUnID0+ICR0aGlzLT5maWVsZHMtPmdldE5vZGUoKS0+dG9TdHJpbmcoKSwKICAgICAgICBdOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIDUuMC4wLiBUaGVyZSBpcyBubyBkaXJlY3QKICAgICAqICAgICBhbHRlcm5hdGl2ZSwgYnV0IHRoZSBzYW1lIGluZm9ybWF0aW9uIG1heSBiZSBvYnRhaW5lZCBieSBzcGxpdHRpbmcKICAgICAqICAgICBpbiBoYWxmIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRIZXgoKX0uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMZWFzdFNpZ25pZmljYW50Qml0cygpOiBzdHJpbmcKICAgIHsKICAgICAgICAkbGVhc3RTaWduaWZpY2FudEhleCA9IHN1YnN0cigkdGhpcy0+Z2V0SGV4KCktPnRvU3RyaW5nKCksIDE2KTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5udW1iZXJDb252ZXJ0ZXItPmZyb21IZXgoJGxlYXN0U2lnbmlmaWNhbnRIZXgpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIDUuMC4wLiBUaGVyZSBpcyBubyBkaXJlY3QKICAgICAqICAgICBhbHRlcm5hdGl2ZSwgYnV0IHRoZSBzYW1lIGluZm9ybWF0aW9uIG1heSBiZSBvYnRhaW5lZCBieSBzcGxpdHRpbmcKICAgICAqICAgICBpbiBoYWxmIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRIZXgoKX0uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMZWFzdFNpZ25pZmljYW50Qml0c0hleCgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gc3Vic3RyKCR0aGlzLT5nZXRIZXgoKS0+dG9TdHJpbmcoKSwgMTYpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIDUuMC4wLiBUaGVyZSBpcyBubyBkaXJlY3QKICAgICAqICAgICBhbHRlcm5hdGl2ZSwgYnV0IHRoZSBzYW1lIGluZm9ybWF0aW9uIG1heSBiZSBvYnRhaW5lZCBieSBzcGxpdHRpbmcKICAgICAqICAgICBpbiBoYWxmIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRIZXgoKX0uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNb3N0U2lnbmlmaWNhbnRCaXRzKCk6IHN0cmluZwogICAgewogICAgICAgICRtb3N0U2lnbmlmaWNhbnRIZXggPSBzdWJzdHIoJHRoaXMtPmdldEhleCgpLT50b1N0cmluZygpLCAwLCAxNik7CgogICAgICAgIHJldHVybiAkdGhpcy0+bnVtYmVyQ29udmVydGVyLT5mcm9tSGV4KCRtb3N0U2lnbmlmaWNhbnRIZXgpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIDUuMC4wLiBUaGVyZSBpcyBubyBkaXJlY3QKICAgICAqICAgICBhbHRlcm5hdGl2ZSwgYnV0IHRoZSBzYW1lIGluZm9ybWF0aW9uIG1heSBiZSBvYnRhaW5lZCBieSBzcGxpdHRpbmcKICAgICAqICAgICBpbiBoYWxmIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRIZXgoKX0uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNb3N0U2lnbmlmaWNhbnRCaXRzSGV4KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBzdWJzdHIoJHRoaXMtPmdldEhleCgpLT50b1N0cmluZygpLCAwLCAxNik7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYSB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlfQogICAgICogICAgIGluc3RhbmNlLCB5b3UgbWF5IGNhbGwge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTo6Z2V0Tm9kZSgpfQogICAgICogICAgIGFuZCB1c2UgdGhlIGFyYml0cmFyeS1wcmVjaXNpb24gbWF0aCBsaWJyYXJ5IG9mIHlvdXIgY2hvaWNlIHRvCiAgICAgKiAgICAgY29udmVydCBpdCB0byBhIHN0cmluZyBpbnRlZ2VyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9kZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm51bWJlckNvbnZlcnRlci0+ZnJvbUhleCgkdGhpcy0+ZmllbGRzLT5nZXROb2RlKCktPnRvU3RyaW5nKCkpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAc2VlIFV1aWRJbnRlcmZhY2U6OmdldEZpZWxkcygpfSB0byBnZXQgYQogICAgICogICAgIHtAc2VlIEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UuIElmIGl0IGlzIGEge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZX0KICAgICAqICAgICBpbnN0YW5jZSwgeW91IG1heSBjYWxsIHtAc2VlIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2U6OmdldE5vZGUoKX0uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb2RlSGV4KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZmllbGRzLT5nZXROb2RlKCktPnRvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYSB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlfQogICAgICogICAgIGluc3RhbmNlLCB5b3UgbWF5IGNhbGwge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTo6Z2V0VGltZUhpQW5kVmVyc2lvbigpfQogICAgICogICAgIGFuZCB1c2UgdGhlIGFyYml0cmFyeS1wcmVjaXNpb24gbWF0aCBsaWJyYXJ5IG9mIHlvdXIgY2hvaWNlIHRvCiAgICAgKiAgICAgY29udmVydCBpdCB0byBhIHN0cmluZyBpbnRlZ2VyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZUhpQW5kVmVyc2lvbigpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm51bWJlckNvbnZlcnRlci0+ZnJvbUhleCgkdGhpcy0+ZmllbGRzLT5nZXRUaW1lSGlBbmRWZXJzaW9uKCktPnRvU3RyaW5nKCkpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAc2VlIFV1aWRJbnRlcmZhY2U6OmdldEZpZWxkcygpfSB0byBnZXQgYQogICAgICogICAgIHtAc2VlIEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UuIElmIGl0IGlzIGEge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZX0KICAgICAqICAgICBpbnN0YW5jZSwgeW91IG1heSBjYWxsIHtAc2VlIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2U6OmdldFRpbWVIaUFuZFZlcnNpb24oKX0uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lSGlBbmRWZXJzaW9uSGV4KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZmllbGRzLT5nZXRUaW1lSGlBbmRWZXJzaW9uKCktPnRvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYSB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlfQogICAgICogICAgIGluc3RhbmNlLCB5b3UgbWF5IGNhbGwge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTo6Z2V0VGltZUxvdygpfQogICAgICogICAgIGFuZCB1c2UgdGhlIGFyYml0cmFyeS1wcmVjaXNpb24gbWF0aCBsaWJyYXJ5IG9mIHlvdXIgY2hvaWNlIHRvCiAgICAgKiAgICAgY29udmVydCBpdCB0byBhIHN0cmluZyBpbnRlZ2VyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZUxvdygpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm51bWJlckNvbnZlcnRlci0+ZnJvbUhleCgkdGhpcy0+ZmllbGRzLT5nZXRUaW1lTG93KCktPnRvU3RyaW5nKCkpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAc2VlIFV1aWRJbnRlcmZhY2U6OmdldEZpZWxkcygpfSB0byBnZXQgYQogICAgICogICAgIHtAc2VlIEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UuIElmIGl0IGlzIGEge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZX0KICAgICAqICAgICBpbnN0YW5jZSwgeW91IG1heSBjYWxsIHtAc2VlIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2U6OmdldFRpbWVMb3coKX0uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lTG93SGV4KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZmllbGRzLT5nZXRUaW1lTG93KCktPnRvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYSB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlfQogICAgICogICAgIGluc3RhbmNlLCB5b3UgbWF5IGNhbGwge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTo6Z2V0VGltZU1pZCgpfQogICAgICogICAgIGFuZCB1c2UgdGhlIGFyYml0cmFyeS1wcmVjaXNpb24gbWF0aCBsaWJyYXJ5IG9mIHlvdXIgY2hvaWNlIHRvCiAgICAgKiAgICAgY29udmVydCBpdCB0byBhIHN0cmluZyBpbnRlZ2VyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZU1pZCgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm51bWJlckNvbnZlcnRlci0+ZnJvbUhleCgkdGhpcy0+ZmllbGRzLT5nZXRUaW1lTWlkKCktPnRvU3RyaW5nKCkpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAc2VlIFV1aWRJbnRlcmZhY2U6OmdldEZpZWxkcygpfSB0byBnZXQgYQogICAgICogICAgIHtAc2VlIEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UuIElmIGl0IGlzIGEge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZX0KICAgICAqICAgICBpbnN0YW5jZSwgeW91IG1heSBjYWxsIHtAc2VlIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2U6OmdldFRpbWVNaWQoKX0uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lTWlkSGV4KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZmllbGRzLT5nZXRUaW1lTWlkKCktPnRvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYSB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlfQogICAgICogICAgIGluc3RhbmNlLCB5b3UgbWF5IGNhbGwge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTo6Z2V0VGltZXN0YW1wKCl9CiAgICAgKiAgICAgYW5kIHVzZSB0aGUgYXJiaXRyYXJ5LXByZWNpc2lvbiBtYXRoIGxpYnJhcnkgb2YgeW91ciBjaG9pY2UgdG8KICAgICAqICAgICBjb252ZXJ0IGl0IHRvIGEgc3RyaW5nIGludGVnZXIuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lc3RhbXAoKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5maWVsZHMtPmdldFZlcnNpb24oKSAhPT0gMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oJ05vdCBhIHRpbWUtYmFzZWQgVVVJRCcpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5udW1iZXJDb252ZXJ0ZXItPmZyb21IZXgoJHRoaXMtPmZpZWxkcy0+Z2V0VGltZXN0YW1wKCktPnRvU3RyaW5nKCkpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAc2VlIFV1aWRJbnRlcmZhY2U6OmdldEZpZWxkcygpfSB0byBnZXQgYQogICAgICogICAgIHtAc2VlIEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UuIElmIGl0IGlzIGEge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZX0KICAgICAqICAgICBpbnN0YW5jZSwgeW91IG1heSBjYWxsIHtAc2VlIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2U6OmdldFRpbWVzdGFtcCgpfS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVzdGFtcEhleCgpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmZpZWxkcy0+Z2V0VmVyc2lvbigpICE9PSAxKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbignTm90IGEgdGltZS1iYXNlZCBVVUlEJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPmZpZWxkcy0+Z2V0VGltZXN0YW1wKCktPnRvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBUaGlzIGhhcyBtb3ZlZCB0byB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlOjpnZXRVcm4oKX0gYW5kCiAgICAgKiAgICAgaXMgYXZhaWxhYmxlIG9uIHtAc2VlIFxSYW1zZXlcVXVpZFxSZmM0MTIyXFV1aWRWMX0sCiAgICAgKiAgICAge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcVXVpZFYzfSwge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcVXVpZFY0fSwKICAgICAqICAgICBhbmQge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcVXVpZFY1fS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFVybigpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJ3Vybjp1dWlkOicgLiAkdGhpcy0+dG9TdHJpbmcoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRGaWVsZHMoKX0gdG8gZ2V0IGEKICAgICAqICAgICB7QHNlZSBGaWVsZHNJbnRlcmZhY2V9IGluc3RhbmNlLiBJZiBpdCBpcyBhCiAgICAgKiAgICAge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZSwgeW91IG1heSBjYWxsCiAgICAgKiAgICAge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlOjpnZXRWYXJpYW50KCl9LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmFyaWFudCgpOiA/aW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5maWVsZHMtPmdldFZhcmlhbnQoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRGaWVsZHMoKX0gdG8gZ2V0IGEKICAgICAqICAgICB7QHNlZSBGaWVsZHNJbnRlcmZhY2V9IGluc3RhbmNlLiBJZiBpdCBpcyBhCiAgICAgKiAgICAge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZSwgeW91IG1heSBjYWxsCiAgICAgKiAgICAge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlOjpnZXRWZXJzaW9uKCl9LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmVyc2lvbigpOiA/aW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5maWVsZHMtPmdldFZlcnNpb24oKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Exception/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Exception/BuilderNotFoundException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvbjsKCnVzZSBSdW50aW1lRXhjZXB0aW9uIGFzIFBocFJ1bnRpbWVFeGNlcHRpb247CgovKioKICogVGhyb3duIHRvIGluZGljYXRlIHRoYXQgbm8gc3VpdGFibGUgYnVpbGRlciBjb3VsZCBiZSBmb3VuZAogKi8KY2xhc3MgQnVpbGRlck5vdEZvdW5kRXhjZXB0aW9uIGV4dGVuZHMgUGhwUnVudGltZUV4Y2VwdGlvbiBpbXBsZW1lbnRzIFV1aWRFeGNlcHRpb25JbnRlcmZhY2UKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Exception/DateTimeException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvbjsKCnVzZSBSdW50aW1lRXhjZXB0aW9uIGFzIFBocFJ1bnRpbWVFeGNlcHRpb247CgovKioKICogVGhyb3duIHRvIGluZGljYXRlIHRoYXQgdGhlIFBIUCBEYXRlVGltZSBleHRlbnNpb24gZW5jb3VudGVyZWQgYW4gZXhjZXB0aW9uL2Vycm9yCiAqLwpjbGFzcyBEYXRlVGltZUV4Y2VwdGlvbiBleHRlbmRzIFBocFJ1bnRpbWVFeGNlcHRpb24gaW1wbGVtZW50cyBVdWlkRXhjZXB0aW9uSW50ZXJmYWNlCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Exception/DceSecurityException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvbjsKCnVzZSBSdW50aW1lRXhjZXB0aW9uIGFzIFBocFJ1bnRpbWVFeGNlcHRpb247CgovKioKICogVGhyb3duIHRvIGluZGljYXRlIGFuIGV4Y2VwdGlvbiBvY2N1cnJlZCB3aGlsZSBkZWFsaW5nIHdpdGggRENFIFNlY3VyaXR5CiAqICh2ZXJzaW9uIDIpIFVVSURzCiAqLwpjbGFzcyBEY2VTZWN1cml0eUV4Y2VwdGlvbiBleHRlbmRzIFBocFJ1bnRpbWVFeGNlcHRpb24gaW1wbGVtZW50cyBVdWlkRXhjZXB0aW9uSW50ZXJmYWNlCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Exception/InvalidArgumentException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvbjsKCnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gYXMgUGhwSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwoKLyoqCiAqIFRocm93biB0byBpbmRpY2F0ZSB0aGF0IHRoZSBhcmd1bWVudCByZWNlaXZlZCBpcyBub3QgdmFsaWQKICovCmNsYXNzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBleHRlbmRzIFBocEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpbXBsZW1lbnRzIFV1aWRFeGNlcHRpb25JbnRlcmZhY2UKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Exception/InvalidBytesException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvbjsKCnVzZSBSdW50aW1lRXhjZXB0aW9uIGFzIFBocFJ1bnRpbWVFeGNlcHRpb247CgovKioKICogVGhyb3duIHRvIGluZGljYXRlIHRoYXQgdGhlIGJ5dGVzIGJlaW5nIG9wZXJhdGVkIG9uIGFyZSBpbnZhbGlkIGluIHNvbWUgd2F5CiAqLwpjbGFzcyBJbnZhbGlkQnl0ZXNFeGNlcHRpb24gZXh0ZW5kcyBQaHBSdW50aW1lRXhjZXB0aW9uIGltcGxlbWVudHMgVXVpZEV4Y2VwdGlvbkludGVyZmFjZQp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Exception/InvalidUuidStringException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvbjsKCi8qKgogKiBUaHJvd24gdG8gaW5kaWNhdGUgdGhhdCB0aGUgc3RyaW5nIHJlY2VpdmVkIGlzIG5vdCBhIHZhbGlkIFVVSUQKICoKICogVGhlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiB0aGF0IHRoaXMgZXh0ZW5kcyBpcyB0aGUgcmFtc2V5L3V1aWQgdmVyc2lvbgogKiBvZiB0aGlzIGV4Y2VwdGlvbi4gSXQgZXhpc3RzIGluIHRoZSBzYW1lIG5hbWVzcGFjZSBhcyB0aGlzIGNsYXNzLgogKi8KY2xhc3MgSW52YWxpZFV1aWRTdHJpbmdFeGNlcHRpb24gZXh0ZW5kcyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaW1wbGVtZW50cyBVdWlkRXhjZXB0aW9uSW50ZXJmYWNlCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Exception/NameException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvbjsKCnVzZSBSdW50aW1lRXhjZXB0aW9uIGFzIFBocFJ1bnRpbWVFeGNlcHRpb247CgovKioKICogVGhyb3duIHRvIGluZGljYXRlIHRoYXQgYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgYXR0ZW1wdGluZyB0byBoYXNoIGEKICogbmFtZXNwYWNlIGFuZCBuYW1lCiAqLwpjbGFzcyBOYW1lRXhjZXB0aW9uIGV4dGVuZHMgUGhwUnVudGltZUV4Y2VwdGlvbiBpbXBsZW1lbnRzIFV1aWRFeGNlcHRpb25JbnRlcmZhY2UKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Exception/NodeException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvbjsKCnVzZSBSdW50aW1lRXhjZXB0aW9uIGFzIFBocFJ1bnRpbWVFeGNlcHRpb247CgovKioKICogVGhyb3duIHRvIGluZGljYXRlIHRoYXQgYXR0ZW1wdGluZyB0byBmZXRjaCBvciBjcmVhdGUgYSBub2RlIElEIGVuY291bnRlcmVkIGFuIGVycm9yCiAqLwpjbGFzcyBOb2RlRXhjZXB0aW9uIGV4dGVuZHMgUGhwUnVudGltZUV4Y2VwdGlvbiBpbXBsZW1lbnRzIFV1aWRFeGNlcHRpb25JbnRlcmZhY2UKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Exception/RandomSourceException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvbjsKCnVzZSBSdW50aW1lRXhjZXB0aW9uIGFzIFBocFJ1bnRpbWVFeGNlcHRpb247CgovKioKICogVGhyb3duIHRvIGluZGljYXRlIHRoYXQgdGhlIHNvdXJjZSBvZiByYW5kb20gZGF0YSBlbmNvdW50ZXJlZCBhbiBlcnJvcgogKgogKiBUaGlzIGV4Y2VwdGlvbiBpcyB1c2VkIG1vc3RseSB0byBpbmRpY2F0ZSB0aGF0IHJhbmRvbV9ieXRlcygpIG9yIHJhbmRvbV9pbnQoKQogKiB0aHJldyBhbiBleGNlcHRpb24uIEhvd2V2ZXIsIGl0IG1heSBiZSB1c2VkIGZvciBvdGhlciBzb3VyY2VzIG9mIHJhbmRvbSBkYXRhLgogKi8KY2xhc3MgUmFuZG9tU291cmNlRXhjZXB0aW9uIGV4dGVuZHMgUGhwUnVudGltZUV4Y2VwdGlvbiBpbXBsZW1lbnRzIFV1aWRFeGNlcHRpb25JbnRlcmZhY2UKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Exception/TimeSourceException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvbjsKCnVzZSBSdW50aW1lRXhjZXB0aW9uIGFzIFBocFJ1bnRpbWVFeGNlcHRpb247CgovKioKICogVGhyb3duIHRvIGluZGljYXRlIHRoYXQgdGhlIHNvdXJjZSBvZiB0aW1lIGVuY291bnRlcmVkIGFuIGVycm9yCiAqLwpjbGFzcyBUaW1lU291cmNlRXhjZXB0aW9uIGV4dGVuZHMgUGhwUnVudGltZUV4Y2VwdGlvbiBpbXBsZW1lbnRzIFV1aWRFeGNlcHRpb25JbnRlcmZhY2UKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Exception/UnableToBuildUuidException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvbjsKCnVzZSBSdW50aW1lRXhjZXB0aW9uIGFzIFBocFJ1bnRpbWVFeGNlcHRpb247CgovKioKICogVGhyb3duIHRvIGluZGljYXRlIGEgYnVpbGRlciBpcyB1bmFibGUgdG8gYnVpbGQgYSBVVUlECiAqLwpjbGFzcyBVbmFibGVUb0J1aWxkVXVpZEV4Y2VwdGlvbiBleHRlbmRzIFBocFJ1bnRpbWVFeGNlcHRpb24gaW1wbGVtZW50cyBVdWlkRXhjZXB0aW9uSW50ZXJmYWNlCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Exception/UnsupportedOperationException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvbjsKCnVzZSBMb2dpY0V4Y2VwdGlvbiBhcyBQaHBMb2dpY0V4Y2VwdGlvbjsKCi8qKgogKiBUaHJvd24gdG8gaW5kaWNhdGUgdGhhdCB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCiAqLwpjbGFzcyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBleHRlbmRzIFBocExvZ2ljRXhjZXB0aW9uIGltcGxlbWVudHMgVXVpZEV4Y2VwdGlvbkludGVyZmFjZQp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Exception/UuidExceptionInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvbjsKCnVzZSBUaHJvd2FibGU7CgppbnRlcmZhY2UgVXVpZEV4Y2VwdGlvbkludGVyZmFjZSBleHRlbmRzIFRocm93YWJsZQp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/FeatureSet.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkOwoKdXNlIFJhbXNleVxVdWlkXEJ1aWxkZXJcQnVpbGRlckNvbGxlY3Rpb247CnVzZSBSYW1zZXlcVXVpZFxCdWlsZGVyXEZhbGxiYWNrQnVpbGRlcjsKdXNlIFJhbXNleVxVdWlkXEJ1aWxkZXJcVXVpZEJ1aWxkZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxDb2RlY1xDb2RlY0ludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvZGVjXEd1aWRTdHJpbmdDb2RlYzsKdXNlIFJhbXNleVxVdWlkXENvZGVjXFN0cmluZ0NvZGVjOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXE51bWJlclxHZW5lcmljTnVtYmVyQ29udmVydGVyOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXE51bWJlckNvbnZlcnRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lXEdlbmVyaWNUaW1lQ29udmVydGVyOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXFRpbWVcUGhwVGltZUNvbnZlcnRlcjsKdXNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcR2VuZXJhdG9yXERjZVNlY3VyaXR5R2VuZXJhdG9yOwp1c2UgUmFtc2V5XFV1aWRcR2VuZXJhdG9yXERjZVNlY3VyaXR5R2VuZXJhdG9ySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcR2VuZXJhdG9yXE5hbWVHZW5lcmF0b3JGYWN0b3J5Owp1c2UgUmFtc2V5XFV1aWRcR2VuZXJhdG9yXE5hbWVHZW5lcmF0b3JJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxHZW5lcmF0b3JcUGVjbFV1aWROYW1lR2VuZXJhdG9yOwp1c2UgUmFtc2V5XFV1aWRcR2VuZXJhdG9yXFBlY2xVdWlkUmFuZG9tR2VuZXJhdG9yOwp1c2UgUmFtc2V5XFV1aWRcR2VuZXJhdG9yXFBlY2xVdWlkVGltZUdlbmVyYXRvcjsKdXNlIFJhbXNleVxVdWlkXEdlbmVyYXRvclxSYW5kb21HZW5lcmF0b3JGYWN0b3J5Owp1c2UgUmFtc2V5XFV1aWRcR2VuZXJhdG9yXFJhbmRvbUdlbmVyYXRvckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXEdlbmVyYXRvclxUaW1lR2VuZXJhdG9yRmFjdG9yeTsKdXNlIFJhbXNleVxVdWlkXEdlbmVyYXRvclxUaW1lR2VuZXJhdG9ySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcR3VpZFxHdWlkQnVpbGRlcjsKdXNlIFJhbXNleVxVdWlkXE1hdGhcQnJpY2tNYXRoQ2FsY3VsYXRvcjsKdXNlIFJhbXNleVxVdWlkXE1hdGhcQ2FsY3VsYXRvckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXE5vbnN0YW5kYXJkXFV1aWRCdWlsZGVyIGFzIE5vbnN0YW5kYXJkVXVpZEJ1aWxkZXI7CnVzZSBSYW1zZXlcVXVpZFxQcm92aWRlclxEY2VcU3lzdGVtRGNlU2VjdXJpdHlQcm92aWRlcjsKdXNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXERjZVNlY3VyaXR5UHJvdmlkZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxQcm92aWRlclxOb2RlXEZhbGxiYWNrTm9kZVByb3ZpZGVyOwp1c2UgUmFtc2V5XFV1aWRcUHJvdmlkZXJcTm9kZVxOb2RlUHJvdmlkZXJDb2xsZWN0aW9uOwp1c2UgUmFtc2V5XFV1aWRcUHJvdmlkZXJcTm9kZVxSYW5kb21Ob2RlUHJvdmlkZXI7CnVzZSBSYW1zZXlcVXVpZFxQcm92aWRlclxOb2RlXFN5c3RlbU5vZGVQcm92aWRlcjsKdXNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXE5vZGVQcm92aWRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXFRpbWVcU3lzdGVtVGltZVByb3ZpZGVyOwp1c2UgUmFtc2V5XFV1aWRcUHJvdmlkZXJcVGltZVByb3ZpZGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcUmZjNDEyMlxVdWlkQnVpbGRlciBhcyBSZmM0MTIyVXVpZEJ1aWxkZXI7CnVzZSBSYW1zZXlcVXVpZFxWYWxpZGF0b3JcR2VuZXJpY1ZhbGlkYXRvcjsKdXNlIFJhbXNleVxVdWlkXFZhbGlkYXRvclxWYWxpZGF0b3JJbnRlcmZhY2U7Cgp1c2UgY29uc3QgUEhQX0lOVF9TSVpFOwoKLyoqCiAqIEZlYXR1cmVTZXQgZGV0ZWN0cyBhbmQgZXhwb3NlcyBhdmFpbGFibGUgZmVhdHVyZXMgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQKICoKICogQSBmZWF0dXJlIHNldCBpcyB1c2VkIGJ5IFV1aWRGYWN0b3J5IHRvIGRldGVybWluZSB0aGUgYXZhaWxhYmxlIGZlYXR1cmVzIGFuZAogKiBjYXBhYmlsaXRpZXMgb2YgdGhlIGVudmlyb25tZW50LgogKi8KY2xhc3MgRmVhdHVyZVNldAp7CiAgICAvKioKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICBwcml2YXRlICRkaXNhYmxlQmlnTnVtYmVyID0gZmFsc2U7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSAkZGlzYWJsZTY0Qml0ID0gZmFsc2U7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSAkaWdub3JlU3lzdGVtTm9kZSA9IGZhbHNlOwoKICAgIC8qKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHByaXZhdGUgJGVuYWJsZVBlY2wgPSBmYWxzZTsKCiAgICAvKioKICAgICAqIEB2YXIgVXVpZEJ1aWxkZXJJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkYnVpbGRlcjsKCiAgICAvKioKICAgICAqIEB2YXIgQ29kZWNJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkY29kZWM7CgogICAgLyoqCiAgICAgKiBAdmFyIERjZVNlY3VyaXR5R2VuZXJhdG9ySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJGRjZVNlY3VyaXR5R2VuZXJhdG9yOwoKICAgIC8qKgogICAgICogQHZhciBOYW1lR2VuZXJhdG9ySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJG5hbWVHZW5lcmF0b3I7CgogICAgLyoqCiAgICAgKiBAdmFyIE5vZGVQcm92aWRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRub2RlUHJvdmlkZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIE51bWJlckNvbnZlcnRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRudW1iZXJDb252ZXJ0ZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkdGltZUNvbnZlcnRlcjsKCiAgICAvKioKICAgICAqIEB2YXIgUmFuZG9tR2VuZXJhdG9ySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJHJhbmRvbUdlbmVyYXRvcjsKCiAgICAvKioKICAgICAqIEB2YXIgVGltZUdlbmVyYXRvckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICR0aW1lR2VuZXJhdG9yOwoKICAgIC8qKgogICAgICogQHZhciBUaW1lUHJvdmlkZXJJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkdGltZVByb3ZpZGVyOwoKICAgIC8qKgogICAgICogQHZhciBWYWxpZGF0b3JJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkdmFsaWRhdG9yOwoKICAgIC8qKgogICAgICogQHZhciBDYWxjdWxhdG9ySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJGNhbGN1bGF0b3I7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYm9vbCAkdXNlR3VpZHMgVHJ1ZSBidWlsZCBVVUlEcyB1c2luZyB0aGUgR3VpZFN0cmluZ0NvZGVjCiAgICAgKiBAcGFyYW0gYm9vbCAkZm9yY2UzMkJpdCBUcnVlIHRvIGZvcmNlIHRoZSB1c2Ugb2YgMzItYml0IGZ1bmN0aW9uYWxpdHkKICAgICAqICAgICAocHJpbWFyaWx5IGZvciB0ZXN0aW5nIHB1cnBvc2VzKQogICAgICogQHBhcmFtIGJvb2wgJGZvcmNlTm9CaWdOdW1iZXIgVHJ1ZSB0byBkaXNhYmxlIHRoZSB1c2Ugb2YgbW9vbnRvYXN0L21hdGgKICAgICAqICAgICAocHJpbWFyaWx5IGZvciB0ZXN0aW5nIHB1cnBvc2VzKQogICAgICogQHBhcmFtIGJvb2wgJGlnbm9yZVN5c3RlbU5vZGUgVHJ1ZSB0byBkaXNhYmxlIGF0dGVtcHRzIHRvIGNoZWNrIGZvciB0aGUKICAgICAqICAgICBzeXN0ZW0gbm9kZSBJRCAocHJpbWFyaWx5IGZvciB0ZXN0aW5nIHB1cnBvc2VzKQogICAgICogQHBhcmFtIGJvb2wgJGVuYWJsZVBlY2wgVHJ1ZSB0byBlbmFibGUgdGhlIHVzZSBvZiB0aGUgUGVjbFV1aWRUaW1lR2VuZXJhdG9yCiAgICAgKiAgICAgdG8gZ2VuZXJhdGUgdmVyc2lvbiAxIFVVSURzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBib29sICR1c2VHdWlkcyA9IGZhbHNlLAogICAgICAgIGJvb2wgJGZvcmNlMzJCaXQgPSBmYWxzZSwKICAgICAgICBib29sICRmb3JjZU5vQmlnTnVtYmVyID0gZmFsc2UsCiAgICAgICAgYm9vbCAkaWdub3JlU3lzdGVtTm9kZSA9IGZhbHNlLAogICAgICAgIGJvb2wgJGVuYWJsZVBlY2wgPSBmYWxzZQogICAgKSB7CiAgICAgICAgJHRoaXMtPmRpc2FibGVCaWdOdW1iZXIgPSAkZm9yY2VOb0JpZ051bWJlcjsKICAgICAgICAkdGhpcy0+ZGlzYWJsZTY0Qml0ID0gJGZvcmNlMzJCaXQ7CiAgICAgICAgJHRoaXMtPmlnbm9yZVN5c3RlbU5vZGUgPSAkaWdub3JlU3lzdGVtTm9kZTsKICAgICAgICAkdGhpcy0+ZW5hYmxlUGVjbCA9ICRlbmFibGVQZWNsOwoKICAgICAgICAkdGhpcy0+c2V0Q2FsY3VsYXRvcihuZXcgQnJpY2tNYXRoQ2FsY3VsYXRvcigpKTsKICAgICAgICAkdGhpcy0+YnVpbGRlciA9ICR0aGlzLT5idWlsZFV1aWRCdWlsZGVyKCR1c2VHdWlkcyk7CiAgICAgICAgJHRoaXMtPmNvZGVjID0gJHRoaXMtPmJ1aWxkQ29kZWMoJHVzZUd1aWRzKTsKICAgICAgICAkdGhpcy0+bm9kZVByb3ZpZGVyID0gJHRoaXMtPmJ1aWxkTm9kZVByb3ZpZGVyKCk7CiAgICAgICAgJHRoaXMtPm5hbWVHZW5lcmF0b3IgPSAkdGhpcy0+YnVpbGROYW1lR2VuZXJhdG9yKCk7CiAgICAgICAgJHRoaXMtPnJhbmRvbUdlbmVyYXRvciA9ICR0aGlzLT5idWlsZFJhbmRvbUdlbmVyYXRvcigpOwogICAgICAgICR0aGlzLT5zZXRUaW1lUHJvdmlkZXIobmV3IFN5c3RlbVRpbWVQcm92aWRlcigpKTsKICAgICAgICAkdGhpcy0+c2V0RGNlU2VjdXJpdHlQcm92aWRlcihuZXcgU3lzdGVtRGNlU2VjdXJpdHlQcm92aWRlcigpKTsKICAgICAgICAkdGhpcy0+dmFsaWRhdG9yID0gbmV3IEdlbmVyaWNWYWxpZGF0b3IoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGJ1aWxkZXIgY29uZmlndXJlZCBmb3IgdGhpcyBlbnZpcm9ubWVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QnVpbGRlcigpOiBVdWlkQnVpbGRlckludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YnVpbGRlcjsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGNhbGN1bGF0b3IgY29uZmlndXJlZCBmb3IgdGhpcyBlbnZpcm9ubWVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2FsY3VsYXRvcigpOiBDYWxjdWxhdG9ySW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jYWxjdWxhdG9yOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgY29kZWMgY29uZmlndXJlZCBmb3IgdGhpcyBlbnZpcm9ubWVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29kZWMoKTogQ29kZWNJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNvZGVjOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgRENFIFNlY3VyaXR5IGdlbmVyYXRvciBjb25maWd1cmVkIGZvciB0aGlzIGVudmlyb25tZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREY2VTZWN1cml0eUdlbmVyYXRvcigpOiBEY2VTZWN1cml0eUdlbmVyYXRvckludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGNlU2VjdXJpdHlHZW5lcmF0b3I7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBuYW1lIGdlbmVyYXRvciBjb25maWd1cmVkIGZvciB0aGlzIGVudmlyb25tZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROYW1lR2VuZXJhdG9yKCk6IE5hbWVHZW5lcmF0b3JJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm5hbWVHZW5lcmF0b3I7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBub2RlIHByb3ZpZGVyIGNvbmZpZ3VyZWQgZm9yIHRoaXMgZW52aXJvbm1lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vZGVQcm92aWRlcigpOiBOb2RlUHJvdmlkZXJJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm5vZGVQcm92aWRlcjsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG51bWJlciBjb252ZXJ0ZXIgY29uZmlndXJlZCBmb3IgdGhpcyBlbnZpcm9ubWVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TnVtYmVyQ29udmVydGVyKCk6IE51bWJlckNvbnZlcnRlckludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bnVtYmVyQ29udmVydGVyOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmFuZG9tIGdlbmVyYXRvciBjb25maWd1cmVkIGZvciB0aGlzIGVudmlyb25tZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSYW5kb21HZW5lcmF0b3IoKTogUmFuZG9tR2VuZXJhdG9ySW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yYW5kb21HZW5lcmF0b3I7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB0aW1lIGNvbnZlcnRlciBjb25maWd1cmVkIGZvciB0aGlzIGVudmlyb25tZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lQ29udmVydGVyKCk6IFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRpbWVDb252ZXJ0ZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB0aW1lIGdlbmVyYXRvciBjb25maWd1cmVkIGZvciB0aGlzIGVudmlyb25tZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lR2VuZXJhdG9yKCk6IFRpbWVHZW5lcmF0b3JJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRpbWVHZW5lcmF0b3I7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB2YWxpZGF0b3IgY29uZmlndXJlZCBmb3IgdGhpcyBlbnZpcm9ubWVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmFsaWRhdG9yKCk6IFZhbGlkYXRvckludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsaWRhdG9yOwogICAgfQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgY2FsY3VsYXRvciB0byB1c2UgaW4gdGhpcyBlbnZpcm9ubWVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Q2FsY3VsYXRvcihDYWxjdWxhdG9ySW50ZXJmYWNlICRjYWxjdWxhdG9yKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5jYWxjdWxhdG9yID0gJGNhbGN1bGF0b3I7CiAgICAgICAgJHRoaXMtPm51bWJlckNvbnZlcnRlciA9ICR0aGlzLT5idWlsZE51bWJlckNvbnZlcnRlcigkY2FsY3VsYXRvcik7CiAgICAgICAgJHRoaXMtPnRpbWVDb252ZXJ0ZXIgPSAkdGhpcy0+YnVpbGRUaW1lQ29udmVydGVyKCRjYWxjdWxhdG9yKTsKCiAgICAgICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBSZWR1bmRhbnRQcm9wZXJ0eUluaXRpYWxpemF0aW9uQ2hlY2sgKi8KICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPnRpbWVQcm92aWRlcikpIHsKICAgICAgICAgICAgJHRoaXMtPnRpbWVHZW5lcmF0b3IgPSAkdGhpcy0+YnVpbGRUaW1lR2VuZXJhdG9yKCR0aGlzLT50aW1lUHJvdmlkZXIpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFNldHMgdGhlIERDRSBTZWN1cml0eSBwcm92aWRlciB0byB1c2UgaW4gdGhpcyBlbnZpcm9ubWVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0RGNlU2VjdXJpdHlQcm92aWRlcihEY2VTZWN1cml0eVByb3ZpZGVySW50ZXJmYWNlICRkY2VTZWN1cml0eVByb3ZpZGVyKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5kY2VTZWN1cml0eUdlbmVyYXRvciA9ICR0aGlzLT5idWlsZERjZVNlY3VyaXR5R2VuZXJhdG9yKCRkY2VTZWN1cml0eVByb3ZpZGVyKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldHMgdGhlIG5vZGUgcHJvdmlkZXIgdG8gdXNlIGluIHRoaXMgZW52aXJvbm1lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE5vZGVQcm92aWRlcihOb2RlUHJvdmlkZXJJbnRlcmZhY2UgJG5vZGVQcm92aWRlcik6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+bm9kZVByb3ZpZGVyID0gJG5vZGVQcm92aWRlcjsKICAgICAgICAkdGhpcy0+dGltZUdlbmVyYXRvciA9ICR0aGlzLT5idWlsZFRpbWVHZW5lcmF0b3IoJHRoaXMtPnRpbWVQcm92aWRlcik7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSB0aW1lIHByb3ZpZGVyIHRvIHVzZSBpbiB0aGlzIGVudmlyb25tZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRUaW1lUHJvdmlkZXIoVGltZVByb3ZpZGVySW50ZXJmYWNlICR0aW1lUHJvdmlkZXIpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPnRpbWVQcm92aWRlciA9ICR0aW1lUHJvdmlkZXI7CiAgICAgICAgJHRoaXMtPnRpbWVHZW5lcmF0b3IgPSAkdGhpcy0+YnVpbGRUaW1lR2VuZXJhdG9yKCR0aW1lUHJvdmlkZXIpOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSB2YWxpZGF0b3IgdG8gdXNlIGluIHRoaXMgZW52aXJvbm1lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFZhbGlkYXRvcihWYWxpZGF0b3JJbnRlcmZhY2UgJHZhbGlkYXRvcik6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+dmFsaWRhdG9yID0gJHZhbGlkYXRvcjsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBjb2RlYyBjb25maWd1cmVkIGZvciB0aGlzIGVudmlyb25tZW50CiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJHVzZUd1aWRzIFdoZXRoZXIgdG8gYnVpbGQgVVVJRHMgdXNpbmcgdGhlIEd1aWRTdHJpbmdDb2RlYwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGJ1aWxkQ29kZWMoYm9vbCAkdXNlR3VpZHMgPSBmYWxzZSk6IENvZGVjSW50ZXJmYWNlCiAgICB7CiAgICAgICAgaWYgKCR1c2VHdWlkcykgewogICAgICAgICAgICByZXR1cm4gbmV3IEd1aWRTdHJpbmdDb2RlYygkdGhpcy0+YnVpbGRlcik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IFN0cmluZ0NvZGVjKCR0aGlzLT5idWlsZGVyKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBEQ0UgU2VjdXJpdHkgZ2VuZXJhdG9yIGNvbmZpZ3VyZWQgZm9yIHRoaXMgZW52aXJvbm1lbnQKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBidWlsZERjZVNlY3VyaXR5R2VuZXJhdG9yKAogICAgICAgIERjZVNlY3VyaXR5UHJvdmlkZXJJbnRlcmZhY2UgJGRjZVNlY3VyaXR5UHJvdmlkZXIKICAgICk6IERjZVNlY3VyaXR5R2VuZXJhdG9ySW50ZXJmYWNlIHsKICAgICAgICByZXR1cm4gbmV3IERjZVNlY3VyaXR5R2VuZXJhdG9yKAogICAgICAgICAgICAkdGhpcy0+bnVtYmVyQ29udmVydGVyLAogICAgICAgICAgICAkdGhpcy0+dGltZUdlbmVyYXRvciwKICAgICAgICAgICAgJGRjZVNlY3VyaXR5UHJvdmlkZXIKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIG5vZGUgcHJvdmlkZXIgY29uZmlndXJlZCBmb3IgdGhpcyBlbnZpcm9ubWVudAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGJ1aWxkTm9kZVByb3ZpZGVyKCk6IE5vZGVQcm92aWRlckludGVyZmFjZQogICAgewogICAgICAgIGlmICgkdGhpcy0+aWdub3JlU3lzdGVtTm9kZSkgewogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmRvbU5vZGVQcm92aWRlcigpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBGYWxsYmFja05vZGVQcm92aWRlcihuZXcgTm9kZVByb3ZpZGVyQ29sbGVjdGlvbihbCiAgICAgICAgICAgIG5ldyBTeXN0ZW1Ob2RlUHJvdmlkZXIoKSwKICAgICAgICAgICAgbmV3IFJhbmRvbU5vZGVQcm92aWRlcigpLAogICAgICAgIF0pKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBudW1iZXIgY29udmVydGVyIGNvbmZpZ3VyZWQgZm9yIHRoaXMgZW52aXJvbm1lbnQKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBidWlsZE51bWJlckNvbnZlcnRlcihDYWxjdWxhdG9ySW50ZXJmYWNlICRjYWxjdWxhdG9yKTogTnVtYmVyQ29udmVydGVySW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBHZW5lcmljTnVtYmVyQ29udmVydGVyKCRjYWxjdWxhdG9yKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSByYW5kb20gZ2VuZXJhdG9yIGNvbmZpZ3VyZWQgZm9yIHRoaXMgZW52aXJvbm1lbnQKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBidWlsZFJhbmRvbUdlbmVyYXRvcigpOiBSYW5kb21HZW5lcmF0b3JJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmVuYWJsZVBlY2wpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBQZWNsVXVpZFJhbmRvbUdlbmVyYXRvcigpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIChuZXcgUmFuZG9tR2VuZXJhdG9yRmFjdG9yeSgpKS0+Z2V0R2VuZXJhdG9yKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgdGltZSBnZW5lcmF0b3IgY29uZmlndXJlZCBmb3IgdGhpcyBlbnZpcm9ubWVudAogICAgICoKICAgICAqIEBwYXJhbSBUaW1lUHJvdmlkZXJJbnRlcmZhY2UgJHRpbWVQcm92aWRlciBUaGUgdGltZSBwcm92aWRlciB0byB1c2Ugd2l0aAogICAgICogICAgIHRoZSB0aW1lIGdlbmVyYXRvcgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGJ1aWxkVGltZUdlbmVyYXRvcihUaW1lUHJvdmlkZXJJbnRlcmZhY2UgJHRpbWVQcm92aWRlcik6IFRpbWVHZW5lcmF0b3JJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmVuYWJsZVBlY2wpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBQZWNsVXVpZFRpbWVHZW5lcmF0b3IoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAobmV3IFRpbWVHZW5lcmF0b3JGYWN0b3J5KAogICAgICAgICAgICAkdGhpcy0+bm9kZVByb3ZpZGVyLAogICAgICAgICAgICAkdGhpcy0+dGltZUNvbnZlcnRlciwKICAgICAgICAgICAgJHRpbWVQcm92aWRlcgogICAgICAgICkpLT5nZXRHZW5lcmF0b3IoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBuYW1lIGdlbmVyYXRvciBjb25maWd1cmVkIGZvciB0aGlzIGVudmlyb25tZW50CiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gYnVpbGROYW1lR2VuZXJhdG9yKCk6IE5hbWVHZW5lcmF0b3JJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmVuYWJsZVBlY2wpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBQZWNsVXVpZE5hbWVHZW5lcmF0b3IoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAobmV3IE5hbWVHZW5lcmF0b3JGYWN0b3J5KCkpLT5nZXRHZW5lcmF0b3IoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSB0aW1lIGNvbnZlcnRlciBjb25maWd1cmVkIGZvciB0aGlzIGVudmlyb25tZW50CiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gYnVpbGRUaW1lQ29udmVydGVyKENhbGN1bGF0b3JJbnRlcmZhY2UgJGNhbGN1bGF0b3IpOiBUaW1lQ29udmVydGVySW50ZXJmYWNlCiAgICB7CiAgICAgICAgJGdlbmVyaWNDb252ZXJ0ZXIgPSBuZXcgR2VuZXJpY1RpbWVDb252ZXJ0ZXIoJGNhbGN1bGF0b3IpOwoKICAgICAgICBpZiAoJHRoaXMtPmlzNjRCaXRTeXN0ZW0oKSkgewogICAgICAgICAgICByZXR1cm4gbmV3IFBocFRpbWVDb252ZXJ0ZXIoJGNhbGN1bGF0b3IsICRnZW5lcmljQ29udmVydGVyKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkZ2VuZXJpY0NvbnZlcnRlcjsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBVVUlEIGJ1aWxkZXIgY29uZmlndXJlZCBmb3IgdGhpcyBlbnZpcm9ubWVudAogICAgICoKICAgICAqIEBwYXJhbSBib29sICR1c2VHdWlkcyBXaGV0aGVyIHRvIGJ1aWxkIFVVSURzIHVzaW5nIHRoZSBHdWlkU3RyaW5nQ29kZWMKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBidWlsZFV1aWRCdWlsZGVyKGJvb2wgJHVzZUd1aWRzID0gZmFsc2UpOiBVdWlkQnVpbGRlckludGVyZmFjZQogICAgewogICAgICAgIGlmICgkdXNlR3VpZHMpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBHdWlkQnVpbGRlcigkdGhpcy0+bnVtYmVyQ29udmVydGVyLCAkdGhpcy0+dGltZUNvbnZlcnRlcik7CiAgICAgICAgfQoKICAgICAgICAvKiogQHBzYWxtLXN1cHByZXNzIEltcHVyZUFyZ3VtZW50ICovCiAgICAgICAgcmV0dXJuIG5ldyBGYWxsYmFja0J1aWxkZXIobmV3IEJ1aWxkZXJDb2xsZWN0aW9uKFsKICAgICAgICAgICAgbmV3IFJmYzQxMjJVdWlkQnVpbGRlcigkdGhpcy0+bnVtYmVyQ29udmVydGVyLCAkdGhpcy0+dGltZUNvbnZlcnRlciksCiAgICAgICAgICAgIG5ldyBOb25zdGFuZGFyZFV1aWRCdWlsZGVyKCR0aGlzLT5udW1iZXJDb252ZXJ0ZXIsICR0aGlzLT50aW1lQ29udmVydGVyKSwKICAgICAgICBdKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIFBIUCBidWlsZCBpcyA2NC1iaXQKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBpczY0Qml0U3lzdGVtKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gUEhQX0lOVF9TSVpFID09PSA4ICYmICEkdGhpcy0+ZGlzYWJsZTY0Qml0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Fields/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Fields/FieldsInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEZpZWxkczsKCnVzZSBTZXJpYWxpemFibGU7CgovKioKICogVVVJRHMgYXJlIGNvbXByaXNlZCBvZiB1bnNpZ25lZCBpbnRlZ2VycywgdGhlIGJ5dGVzIG9mIHdoaWNoIGFyZSBzZXBhcmF0ZWQKICogaW50byBmaWVsZHMgYW5kIGFycmFuZ2VkIGluIGEgcGFydGljdWxhciBsYXlvdXQgZGVmaW5lZCBieSB0aGUgc3BlY2lmaWNhdGlvbgogKiBmb3IgdGhlIHZhcmlhbnQKICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KaW50ZXJmYWNlIEZpZWxkc0ludGVyZmFjZSBleHRlbmRzIFNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGJ5dGVzIHRoYXQgY29tcHJpc2UgdGhlIGZpZWxkcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Qnl0ZXMoKTogc3RyaW5nOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Fields/SerializableFieldsTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEZpZWxkczsKCnVzZSBWYWx1ZUVycm9yOwoKdXNlIGZ1bmN0aW9uIGJhc2U2NF9kZWNvZGU7CnVzZSBmdW5jdGlvbiBzcHJpbnRmOwp1c2UgZnVuY3Rpb24gc3RybGVuOwoKLyoqCiAqIFByb3ZpZGVzIGNvbW1vbiBzZXJpYWxpemF0aW9uIGZ1bmN0aW9uYWxpdHkgdG8gZmllbGRzCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCnRyYWl0IFNlcmlhbGl6YWJsZUZpZWxkc1RyYWl0CnsKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkYnl0ZXMgVGhlIGJ5dGVzIHRoYXQgY29tcHJpc2UgdGhlIGZpZWxkcwogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRieXRlcyk7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBieXRlcyB0aGF0IGNvbXByaXNlIHRoZSBmaWVsZHMKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGdldEJ5dGVzKCk6IHN0cmluZzsKCiAgICAvKioKICAgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2Ygb2JqZWN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXJpYWxpemUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRCeXRlcygpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheXtieXRlczogc3RyaW5nfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gWydieXRlcycgPT4gJHRoaXMtPmdldEJ5dGVzKCldOwogICAgfQoKICAgIC8qKgogICAgICogQ29uc3RydWN0cyB0aGUgb2JqZWN0IGZyb20gYSBzZXJpYWxpemVkIHN0cmluZyByZXByZXNlbnRhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlcmlhbGl6ZWQgVGhlIHNlcmlhbGl6ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3QKICAgICAqCiAgICAgKiBAcGhwY3NTdXBwcmVzcyBTbGV2b21hdENvZGluZ1N0YW5kYXJkLlR5cGVIaW50cy5QYXJhbWV0ZXJUeXBlSGludC5NaXNzaW5nTmF0aXZlVHlwZUhpbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBVbnVzZWRNZXRob2RDYWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bnNlcmlhbGl6ZSgkc2VyaWFsaXplZCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoc3RybGVuKCRzZXJpYWxpemVkKSA9PT0gMTYpIHsKICAgICAgICAgICAgJHRoaXMtPl9fY29uc3RydWN0KCRzZXJpYWxpemVkKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+X19jb25zdHJ1Y3QoYmFzZTY0X2RlY29kZSgkc2VyaWFsaXplZCkpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheXtieXRlczogc3RyaW5nfSAkZGF0YQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX191bnNlcmlhbGl6ZShhcnJheSAkZGF0YSk6IHZvaWQKICAgIHsKICAgICAgICAvLyBAY29kZUNvdmVyYWdlSWdub3JlU3RhcnQKICAgICAgICBpZiAoIWlzc2V0KCRkYXRhWydieXRlcyddKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVmFsdWVFcnJvcihzcHJpbnRmKCclcygpOiBBcmd1bWVudCAjMSAoJGRhdGEpIGlzIGludmFsaWQnLCBfX01FVEhPRF9fKSk7CiAgICAgICAgfQogICAgICAgIC8vIEBjb2RlQ292ZXJhZ2VJZ25vcmVFbmQKCiAgICAgICAgJHRoaXMtPnVuc2VyaWFsaXplKCRkYXRhWydieXRlcyddKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/functions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBwaHBjczpkaXNhYmxlIFNxdWl6LkZ1bmN0aW9ucy5HbG9iYWxGdW5jdGlvbgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkOwoKdXNlIFJhbXNleVxVdWlkXFR5cGVcSGV4YWRlY2ltYWw7CnVzZSBSYW1zZXlcVXVpZFxUeXBlXEludGVnZXIgYXMgSW50ZWdlck9iamVjdDsKCi8qKgogKiBSZXR1cm5zIGEgdmVyc2lvbiAxICh0aW1lLWJhc2VkKSBVVUlEIGZyb20gYSBob3N0IElELCBzZXF1ZW5jZSBudW1iZXIsCiAqIGFuZCB0aGUgY3VycmVudCB0aW1lCiAqCiAqIEBwYXJhbSBIZXhhZGVjaW1hbHxpbnR8c3RyaW5nfG51bGwgJG5vZGUgQSA0OC1iaXQgbnVtYmVyIHJlcHJlc2VudGluZyB0aGUKICogICAgIGhhcmR3YXJlIGFkZHJlc3M7IHRoaXMgbnVtYmVyIG1heSBiZSByZXByZXNlbnRlZCBhcyBhbiBpbnRlZ2VyIG9yIGEKICogICAgIGhleGFkZWNpbWFsIHN0cmluZwogKiBAcGFyYW0gaW50ICRjbG9ja1NlcSBBIDE0LWJpdCBudW1iZXIgdXNlZCB0byBoZWxwIGF2b2lkIGR1cGxpY2F0ZXMgdGhhdAogKiAgICAgY291bGQgYXJpc2Ugd2hlbiB0aGUgY2xvY2sgaXMgc2V0IGJhY2t3YXJkcyBpbiB0aW1lIG9yIGlmIHRoZSBub2RlIElECiAqICAgICBjaGFuZ2VzCiAqCiAqIEByZXR1cm4gbm9uLWVtcHR5LXN0cmluZyBWZXJzaW9uIDEgVVVJRCBhcyBhIHN0cmluZwogKi8KZnVuY3Rpb24gdjEoJG5vZGUgPSBudWxsLCA/aW50ICRjbG9ja1NlcSA9IG51bGwpOiBzdHJpbmcKewogICAgcmV0dXJuIFV1aWQ6OnV1aWQxKCRub2RlLCAkY2xvY2tTZXEpLT50b1N0cmluZygpOwp9CgovKioKICogUmV0dXJucyBhIHZlcnNpb24gMiAoRENFIFNlY3VyaXR5KSBVVUlEIGZyb20gYSBsb2NhbCBkb21haW4sIGxvY2FsCiAqIGlkZW50aWZpZXIsIGhvc3QgSUQsIGNsb2NrIHNlcXVlbmNlLCBhbmQgdGhlIGN1cnJlbnQgdGltZQogKgogKiBAcGFyYW0gaW50ICRsb2NhbERvbWFpbiBUaGUgbG9jYWwgZG9tYWluIHRvIHVzZSB3aGVuIGdlbmVyYXRpbmcgYnl0ZXMsCiAqICAgICBhY2NvcmRpbmcgdG8gRENFIFNlY3VyaXR5CiAqIEBwYXJhbSBJbnRlZ2VyT2JqZWN0fG51bGwgJGxvY2FsSWRlbnRpZmllciBUaGUgbG9jYWwgaWRlbnRpZmllciBmb3IgdGhlCiAqICAgICBnaXZlbiBkb21haW47IHRoaXMgbWF5IGJlIGEgVUlEIG9yIEdJRCBvbiBQT1NJWCBzeXN0ZW1zLCBpZiB0aGUgbG9jYWwKICogICAgIGRvbWFpbiBpcyBwZXJzb24gb3IgZ3JvdXAsIG9yIGl0IG1heSBiZSBhIHNpdGUtZGVmaW5lZCBpZGVudGlmaWVyCiAqICAgICBpZiB0aGUgbG9jYWwgZG9tYWluIGlzIG9yZwogKiBAcGFyYW0gSGV4YWRlY2ltYWx8bnVsbCAkbm9kZSBBIDQ4LWJpdCBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBoYXJkd2FyZQogKiAgICAgYWRkcmVzcwogKiBAcGFyYW0gaW50fG51bGwgJGNsb2NrU2VxIEEgMTQtYml0IG51bWJlciB1c2VkIHRvIGhlbHAgYXZvaWQgZHVwbGljYXRlcwogKiAgICAgdGhhdCBjb3VsZCBhcmlzZSB3aGVuIHRoZSBjbG9jayBpcyBzZXQgYmFja3dhcmRzIGluIHRpbWUgb3IgaWYgdGhlCiAqICAgICBub2RlIElEIGNoYW5nZXMKICoKICogQHJldHVybiBub24tZW1wdHktc3RyaW5nIFZlcnNpb24gMiBVVUlEIGFzIGEgc3RyaW5nCiAqLwpmdW5jdGlvbiB2MigKICAgIGludCAkbG9jYWxEb21haW4sCiAgICA/SW50ZWdlck9iamVjdCAkbG9jYWxJZGVudGlmaWVyID0gbnVsbCwKICAgID9IZXhhZGVjaW1hbCAkbm9kZSA9IG51bGwsCiAgICA/aW50ICRjbG9ja1NlcSA9IG51bGwKKTogc3RyaW5nIHsKICAgIHJldHVybiBVdWlkOjp1dWlkMigkbG9jYWxEb21haW4sICRsb2NhbElkZW50aWZpZXIsICRub2RlLCAkY2xvY2tTZXEpLT50b1N0cmluZygpOwp9CgovKioKICogUmV0dXJucyBhIHZlcnNpb24gMyAobmFtZS1iYXNlZCkgVVVJRCBiYXNlZCBvbiB0aGUgTUQ1IGhhc2ggb2YgYQogKiBuYW1lc3BhY2UgSUQgYW5kIGEgbmFtZQogKgogKiBAcGFyYW0gc3RyaW5nfFV1aWRJbnRlcmZhY2UgJG5zIFRoZSBuYW1lc3BhY2UgKG11c3QgYmUgYSB2YWxpZCBVVUlEKQogKgogKiBAcmV0dXJuIG5vbi1lbXB0eS1zdHJpbmcgVmVyc2lvbiAzIFVVSUQgYXMgYSBzdHJpbmcKICoKICogQHBzYWxtLXB1cmUgbm90ZTogY2hhbmdpbmcgdGhlIGludGVybmFsIGZhY3RvcnkgaXMgYW4gZWRnZSBjYXNlIG5vdCBjb3ZlcmVkIGJ5IHB1cml0eSBpbnZhcmlhbnRzLAogKiAgICAgICAgICAgICBidXQgdW5kZXIgY29uc3RhbnQgZmFjdG9yeSBzZXR1cHMsIHRoaXMgbWV0aG9kIG9wZXJhdGVzIGluIGZ1bmN0aW9uYWxseSBwdXJlIG1hbm5lcnMKICovCmZ1bmN0aW9uIHYzKCRucywgc3RyaW5nICRuYW1lKTogc3RyaW5nCnsKICAgIHJldHVybiBVdWlkOjp1dWlkMygkbnMsICRuYW1lKS0+dG9TdHJpbmcoKTsKfQoKLyoqCiAqIFJldHVybnMgYSB2ZXJzaW9uIDQgKHJhbmRvbSkgVVVJRAogKgogKiBAcmV0dXJuIG5vbi1lbXB0eS1zdHJpbmcgVmVyc2lvbiA0IFVVSUQgYXMgYSBzdHJpbmcKICovCmZ1bmN0aW9uIHY0KCk6IHN0cmluZwp7CiAgICByZXR1cm4gVXVpZDo6dXVpZDQoKS0+dG9TdHJpbmcoKTsKfQoKLyoqCiAqIFJldHVybnMgYSB2ZXJzaW9uIDUgKG5hbWUtYmFzZWQpIFVVSUQgYmFzZWQgb24gdGhlIFNIQS0xIGhhc2ggb2YgYQogKiBuYW1lc3BhY2UgSUQgYW5kIGEgbmFtZQogKgogKiBAcGFyYW0gc3RyaW5nfFV1aWRJbnRlcmZhY2UgJG5zIFRoZSBuYW1lc3BhY2UgKG11c3QgYmUgYSB2YWxpZCBVVUlEKQogKgogKiBAcmV0dXJuIG5vbi1lbXB0eS1zdHJpbmcgVmVyc2lvbiA1IFVVSUQgYXMgYSBzdHJpbmcKICoKICogQHBzYWxtLXB1cmUgbm90ZTogY2hhbmdpbmcgdGhlIGludGVybmFsIGZhY3RvcnkgaXMgYW4gZWRnZSBjYXNlIG5vdCBjb3ZlcmVkIGJ5IHB1cml0eSBpbnZhcmlhbnRzLAogKiAgICAgICAgICAgICBidXQgdW5kZXIgY29uc3RhbnQgZmFjdG9yeSBzZXR1cHMsIHRoaXMgbWV0aG9kIG9wZXJhdGVzIGluIGZ1bmN0aW9uYWxseSBwdXJlIG1hbm5lcnMKICovCmZ1bmN0aW9uIHY1KCRucywgc3RyaW5nICRuYW1lKTogc3RyaW5nCnsKICAgIHJldHVybiBVdWlkOjp1dWlkNSgkbnMsICRuYW1lKS0+dG9TdHJpbmcoKTsKfQoKLyoqCiAqIFJldHVybnMgYSB2ZXJzaW9uIDYgKG9yZGVyZWQtdGltZSkgVVVJRCBmcm9tIGEgaG9zdCBJRCwgc2VxdWVuY2UgbnVtYmVyLAogKiBhbmQgdGhlIGN1cnJlbnQgdGltZQogKgogKiBAcGFyYW0gSGV4YWRlY2ltYWx8bnVsbCAkbm9kZSBBIDQ4LWJpdCBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBoYXJkd2FyZQogKiAgICAgYWRkcmVzcwogKiBAcGFyYW0gaW50ICRjbG9ja1NlcSBBIDE0LWJpdCBudW1iZXIgdXNlZCB0byBoZWxwIGF2b2lkIGR1cGxpY2F0ZXMgdGhhdAogKiAgICAgY291bGQgYXJpc2Ugd2hlbiB0aGUgY2xvY2sgaXMgc2V0IGJhY2t3YXJkcyBpbiB0aW1lIG9yIGlmIHRoZSBub2RlIElECiAqICAgICBjaGFuZ2VzCiAqCiAqIEByZXR1cm4gbm9uLWVtcHR5LXN0cmluZyBWZXJzaW9uIDYgVVVJRCBhcyBhIHN0cmluZwogKi8KZnVuY3Rpb24gdjYoP0hleGFkZWNpbWFsICRub2RlID0gbnVsbCwgP2ludCAkY2xvY2tTZXEgPSBudWxsKTogc3RyaW5nCnsKICAgIHJldHVybiBVdWlkOjp1dWlkNigkbm9kZSwgJGNsb2NrU2VxKS0+dG9TdHJpbmcoKTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/CombGenerator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcTnVtYmVyQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKCnVzZSBmdW5jdGlvbiBiaW4yaGV4Owp1c2UgZnVuY3Rpb24gZXhwbG9kZTsKdXNlIGZ1bmN0aW9uIGhleDJiaW47CnVzZSBmdW5jdGlvbiBtaWNyb3RpbWU7CnVzZSBmdW5jdGlvbiBzdHJfcGFkOwp1c2UgZnVuY3Rpb24gc3Vic3RyOwoKdXNlIGNvbnN0IFNUUl9QQURfTEVGVDsKCi8qKgogKiBDb21iR2VuZXJhdG9yIGdlbmVyYXRlcyBDT01CcyAoY29tYmluZWQgVVVJRC90aW1lc3RhbXApCiAqCiAqIFRoZSBDb21iR2VuZXJhdG9yLCB3aGVuIHVzZWQgd2l0aCB0aGUgU3RyaW5nQ29kZWMgKGFuZCwgYnkgcHJveHksIHRoZQogKiBUaW1lc3RhbXBMYXN0Q29tYkNvZGVjKSBvciB0aGUgVGltZXN0YW1wRmlyc3RDb21iQ29kZWMsIGNvbWJpbmVzIHRoZSBjdXJyZW50CiAqIHRpbWVzdGFtcCB3aXRoIGEgVVVJRCAoaGVuY2UgdGhlIG5hbWUgIkNPTUIiKS4gVGhlIHRpbWVzdGFtcCBlaXRoZXIgYXBwZWFycwogKiBhcyB0aGUgZmlyc3Qgb3IgbGFzdCA0OCBiaXRzIG9mIHRoZSBDT01CLCBkZXBlbmRpbmcgb24gdGhlIGNvZGVjIHVzZWQuCiAqCiAqIEJ5IGRlZmF1bHQsIENPTUJzIHdpbGwgaGF2ZSB0aGUgdGltZXN0YW1wIHNldCBhcyB0aGUgbGFzdCA0OCBiaXRzIG9mIHRoZQogKiBpZGVudGlmaWVyLgogKgogKiBgYGAgcGhwCiAqICRmYWN0b3J5ID0gbmV3IFV1aWRGYWN0b3J5KCk7CiAqCiAqICRmYWN0b3J5LT5zZXRSYW5kb21HZW5lcmF0b3IobmV3IENvbWJHZW5lcmF0b3IoCiAqICAgICAkZmFjdG9yeS0+Z2V0UmFuZG9tR2VuZXJhdG9yKCksCiAqICAgICAkZmFjdG9yeS0+Z2V0TnVtYmVyQ29udmVydGVyKCkKICogKSk7CiAqCiAqICRjb21iID0gJGZhY3RvcnktPnV1aWQ0KCk7CiAqIGBgYAogKgogKiBUbyBnZW5lcmF0ZSBhIENPTUIgd2l0aCB0aGUgdGltZXN0YW1wIGFzIHRoZSBmaXJzdCA0OCBiaXRzLCBzZXQgdGhlCiAqIFRpbWVzdGFtcEZpcnN0Q29tYkNvZGVjIGFzIHRoZSBjb2RlYy4KICoKICogYGBgIHBocAogKiAkZmFjdG9yeS0+c2V0Q29kZWMobmV3IFRpbWVzdGFtcEZpcnN0Q29tYkNvZGVjKCRmYWN0b3J5LT5nZXRVdWlkQnVpbGRlcigpKSk7CiAqIGBgYAogKgogKiBAbGluayBodHRwczovL3d3dy5pbmZvcm1pdC5jb20vYXJ0aWNsZXMvcHJpbnRlcmZyaWVuZGx5LzI1ODYyIFRoZSBDb3N0IG9mIEdVSURzIGFzIFByaW1hcnkgS2V5cwogKi8KY2xhc3MgQ29tYkdlbmVyYXRvciBpbXBsZW1lbnRzIFJhbmRvbUdlbmVyYXRvckludGVyZmFjZQp7CiAgICBwdWJsaWMgY29uc3QgVElNRVNUQU1QX0JZVEVTID0gNjsKCiAgICAvKioKICAgICAqIEB2YXIgUmFuZG9tR2VuZXJhdG9ySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJHJhbmRvbUdlbmVyYXRvcjsKCiAgICAvKioKICAgICAqIEB2YXIgTnVtYmVyQ29udmVydGVySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJGNvbnZlcnRlcjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgUmFuZG9tR2VuZXJhdG9ySW50ZXJmYWNlICRnZW5lcmF0b3IsCiAgICAgICAgTnVtYmVyQ29udmVydGVySW50ZXJmYWNlICRudW1iZXJDb252ZXJ0ZXIKICAgICkgewogICAgICAgICR0aGlzLT5jb252ZXJ0ZXIgPSAkbnVtYmVyQ29udmVydGVyOwogICAgICAgICR0aGlzLT5yYW5kb21HZW5lcmF0b3IgPSAkZ2VuZXJhdG9yOwogICAgfQoKICAgIC8qKgogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgJGxlbmd0aCBpcyBub3QgYSBwb3NpdGl2ZSBpbnRlZ2VyCiAgICAgKiAgICAgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIENvbWJHZW5lcmF0b3I6OlRJTUVTVEFNUF9CWVRFUwogICAgICoKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZW5lcmF0ZShpbnQgJGxlbmd0aCk6IHN0cmluZwogICAgewogICAgICAgIGlmICgkbGVuZ3RoIDwgc2VsZjo6VElNRVNUQU1QX0JZVEVTIHx8ICRsZW5ndGggPCAwKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnTGVuZ3RoIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAnIC4gc2VsZjo6VElNRVNUQU1QX0JZVEVTCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkaGFzaCA9ICcnOwogICAgICAgIGlmIChzZWxmOjpUSU1FU1RBTVBfQllURVMgPiAwICYmICRsZW5ndGggPiBzZWxmOjpUSU1FU1RBTVBfQllURVMpIHsKICAgICAgICAgICAgJGhhc2ggPSAkdGhpcy0+cmFuZG9tR2VuZXJhdG9yLT5nZW5lcmF0ZSgkbGVuZ3RoIC0gc2VsZjo6VElNRVNUQU1QX0JZVEVTKTsKICAgICAgICB9CgogICAgICAgICRsc2JUaW1lID0gc3RyX3BhZCgKICAgICAgICAgICAgJHRoaXMtPmNvbnZlcnRlci0+dG9IZXgoJHRoaXMtPnRpbWVzdGFtcCgpKSwKICAgICAgICAgICAgc2VsZjo6VElNRVNUQU1QX0JZVEVTICogMiwKICAgICAgICAgICAgJzAnLAogICAgICAgICAgICBTVFJfUEFEX0xFRlQKICAgICAgICApOwoKICAgICAgICByZXR1cm4gKHN0cmluZykgaGV4MmJpbigKICAgICAgICAgICAgc3RyX3BhZCgKICAgICAgICAgICAgICAgIGJpbjJoZXgoJGhhc2gpLAogICAgICAgICAgICAgICAgJGxlbmd0aCAtIHNlbGY6OlRJTUVTVEFNUF9CWVRFUywKICAgICAgICAgICAgICAgICcwJwogICAgICAgICAgICApCiAgICAgICAgICAgIC4gJGxzYlRpbWUKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBjdXJyZW50IHRpbWVzdGFtcCBhIHN0cmluZyBpbnRlZ2VyLCBwcmVjaXNlIHRvIDAuMDAwMDEgc2Vjb25kcwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHRpbWVzdGFtcCgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkdGltZSA9IGV4cGxvZGUoJyAnLCBtaWNyb3RpbWUoZmFsc2UpKTsKCiAgICAgICAgcmV0dXJuICR0aW1lWzFdIC4gc3Vic3RyKCR0aW1lWzBdLCAyLCA1KTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/DceSecurityGenerator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcTnVtYmVyQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXERjZVNlY3VyaXR5RXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcUHJvdmlkZXJcRGNlU2VjdXJpdHlQcm92aWRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXFR5cGVcSGV4YWRlY2ltYWw7CnVzZSBSYW1zZXlcVXVpZFxUeXBlXEludGVnZXIgYXMgSW50ZWdlck9iamVjdDsKdXNlIFJhbXNleVxVdWlkXFV1aWQ7Cgp1c2UgZnVuY3Rpb24gaGV4MmJpbjsKdXNlIGZ1bmN0aW9uIGluX2FycmF5Owp1c2UgZnVuY3Rpb24gcGFjazsKdXNlIGZ1bmN0aW9uIHN0cl9wYWQ7CnVzZSBmdW5jdGlvbiBzdHJsZW47CnVzZSBmdW5jdGlvbiBzdWJzdHJfcmVwbGFjZTsKCnVzZSBjb25zdCBTVFJfUEFEX0xFRlQ7CgovKioKICogRGNlU2VjdXJpdHlHZW5lcmF0b3IgZ2VuZXJhdGVzIHN0cmluZ3Mgb2YgYmluYXJ5IGRhdGEgYmFzZWQgb24gYSBsb2NhbAogKiBkb21haW4sIGxvY2FsIGlkZW50aWZpZXIsIG5vZGUgSUQsIGNsb2NrIHNlcXVlbmNlLCBhbmQgdGhlIGN1cnJlbnQgdGltZQogKi8KY2xhc3MgRGNlU2VjdXJpdHlHZW5lcmF0b3IgaW1wbGVtZW50cyBEY2VTZWN1cml0eUdlbmVyYXRvckludGVyZmFjZQp7CiAgICBwcml2YXRlIGNvbnN0IERPTUFJTlMgPSBbCiAgICAgICAgVXVpZDo6RENFX0RPTUFJTl9QRVJTT04sCiAgICAgICAgVXVpZDo6RENFX0RPTUFJTl9HUk9VUCwKICAgICAgICBVdWlkOjpEQ0VfRE9NQUlOX09SRywKICAgIF07CgogICAgLyoqCiAgICAgKiBVcHBlciBib3VuZHMgZm9yIHRoZSBjbG9jayBzZXF1ZW5jZSBpbiBEQ0UgU2VjdXJpdHkgVVVJRHMuCiAgICAgKi8KICAgIHByaXZhdGUgY29uc3QgQ0xPQ0tfU0VRX0hJR0ggPSA2MzsKCiAgICAvKioKICAgICAqIExvd2VyIGJvdW5kcyBmb3IgdGhlIGNsb2NrIHNlcXVlbmNlIGluIERDRSBTZWN1cml0eSBVVUlEcy4KICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBDTE9DS19TRVFfTE9XID0gMDsKCiAgICAvKioKICAgICAqIEB2YXIgTnVtYmVyQ29udmVydGVySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJG51bWJlckNvbnZlcnRlcjsKCiAgICAvKioKICAgICAqIEB2YXIgVGltZUdlbmVyYXRvckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICR0aW1lR2VuZXJhdG9yOwoKICAgIC8qKgogICAgICogQHZhciBEY2VTZWN1cml0eVByb3ZpZGVySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJGRjZVNlY3VyaXR5UHJvdmlkZXI7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgIE51bWJlckNvbnZlcnRlckludGVyZmFjZSAkbnVtYmVyQ29udmVydGVyLAogICAgICAgIFRpbWVHZW5lcmF0b3JJbnRlcmZhY2UgJHRpbWVHZW5lcmF0b3IsCiAgICAgICAgRGNlU2VjdXJpdHlQcm92aWRlckludGVyZmFjZSAkZGNlU2VjdXJpdHlQcm92aWRlcgogICAgKSB7CiAgICAgICAgJHRoaXMtPm51bWJlckNvbnZlcnRlciA9ICRudW1iZXJDb252ZXJ0ZXI7CiAgICAgICAgJHRoaXMtPnRpbWVHZW5lcmF0b3IgPSAkdGltZUdlbmVyYXRvcjsKICAgICAgICAkdGhpcy0+ZGNlU2VjdXJpdHlQcm92aWRlciA9ICRkY2VTZWN1cml0eVByb3ZpZGVyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZW5lcmF0ZSgKICAgICAgICBpbnQgJGxvY2FsRG9tYWluLAogICAgICAgID9JbnRlZ2VyT2JqZWN0ICRsb2NhbElkZW50aWZpZXIgPSBudWxsLAogICAgICAgID9IZXhhZGVjaW1hbCAkbm9kZSA9IG51bGwsCiAgICAgICAgP2ludCAkY2xvY2tTZXEgPSBudWxsCiAgICApOiBzdHJpbmcgewogICAgICAgIGlmICghaW5fYXJyYXkoJGxvY2FsRG9tYWluLCBzZWxmOjpET01BSU5TKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRGNlU2VjdXJpdHlFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnTG9jYWwgZG9tYWluIG11c3QgYmUgYSB2YWxpZCBEQ0UgU2VjdXJpdHkgZG9tYWluJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRsb2NhbElkZW50aWZpZXIgJiYgJGxvY2FsSWRlbnRpZmllci0+aXNOZWdhdGl2ZSgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBEY2VTZWN1cml0eUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdMb2NhbCBpZGVudGlmaWVyIG91dCBvZiBib3VuZHM7IGl0IG11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDQyOTQ5NjcyOTUnCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGNsb2NrU2VxID4gc2VsZjo6Q0xPQ0tfU0VRX0hJR0ggfHwgJGNsb2NrU2VxIDwgc2VsZjo6Q0xPQ0tfU0VRX0xPVykgewogICAgICAgICAgICB0aHJvdyBuZXcgRGNlU2VjdXJpdHlFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnQ2xvY2sgc2VxdWVuY2Ugb3V0IG9mIGJvdW5kczsgaXQgbXVzdCBiZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgNjMnCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBzd2l0Y2ggKCRsb2NhbERvbWFpbikgewogICAgICAgICAgICBjYXNlIFV1aWQ6OkRDRV9ET01BSU5fT1JHOgogICAgICAgICAgICAgICAgaWYgKCRsb2NhbElkZW50aWZpZXIgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRGNlU2VjdXJpdHlFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICdBIGxvY2FsIGlkZW50aWZpZXIgbXVzdCBiZSBwcm92aWRlZCBmb3IgdGhlIG9yZyBkb21haW4nCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBVdWlkOjpEQ0VfRE9NQUlOX1BFUlNPTjoKICAgICAgICAgICAgICAgIGlmICgkbG9jYWxJZGVudGlmaWVyID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgJGxvY2FsSWRlbnRpZmllciA9ICR0aGlzLT5kY2VTZWN1cml0eVByb3ZpZGVyLT5nZXRVaWQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBVdWlkOjpEQ0VfRE9NQUlOX0dST1VQOgogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgaWYgKCRsb2NhbElkZW50aWZpZXIgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAkbG9jYWxJZGVudGlmaWVyID0gJHRoaXMtPmRjZVNlY3VyaXR5UHJvdmlkZXItPmdldEdpZCgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgJGlkZW50aWZpZXJIZXggPSAkdGhpcy0+bnVtYmVyQ29udmVydGVyLT50b0hleCgkbG9jYWxJZGVudGlmaWVyLT50b1N0cmluZygpKTsKCiAgICAgICAgLy8gVGhlIG1heGltdW0gdmFsdWUgZm9yIHRoZSBsb2NhbCBpZGVudGlmaWVyIGlzIDB4ZmZmZmZmZmYsIG9yCiAgICAgICAgLy8gNDI5NDk2NzI5NS4gVGhpcyBpcyA4IGhleGFkZWNpbWFsIGRpZ2l0cywgc28gaWYgdGhlIGxlbmd0aCBvZgogICAgICAgIC8vIGhleGFkZWNpbWFsIGRpZ2l0cyBpcyBncmVhdGVyIHRoYW4gOCwgd2Uga25vdyB0aGUgdmFsdWUgaXMgZ3JlYXRlcgogICAgICAgIC8vIHRoYW4gMHhmZmZmZmZmZi4KICAgICAgICBpZiAoc3RybGVuKCRpZGVudGlmaWVySGV4KSA+IDgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IERjZVNlY3VyaXR5RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0xvY2FsIGlkZW50aWZpZXIgb3V0IG9mIGJvdW5kczsgaXQgbXVzdCBiZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgNDI5NDk2NzI5NScKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRkb21haW5CeXRlID0gcGFjaygnbicsICRsb2NhbERvbWFpbilbMV07CiAgICAgICAgJGlkZW50aWZpZXJCeXRlcyA9IChzdHJpbmcpIGhleDJiaW4oc3RyX3BhZCgkaWRlbnRpZmllckhleCwgOCwgJzAnLCBTVFJfUEFEX0xFRlQpKTsKCiAgICAgICAgaWYgKCRub2RlIGluc3RhbmNlb2YgSGV4YWRlY2ltYWwpIHsKICAgICAgICAgICAgJG5vZGUgPSAkbm9kZS0+dG9TdHJpbmcoKTsKICAgICAgICB9CgogICAgICAgIC8vIFNoaWZ0IHRoZSBjbG9jayBzZXF1ZW5jZSA4IGJpdHMgdG8gdGhlIGxlZnQsIHNvIGl0IG1hdGNoZXMgMHgzZjAwLgogICAgICAgIGlmICgkY2xvY2tTZXEgIT09IG51bGwpIHsKICAgICAgICAgICAgJGNsb2NrU2VxID0gJGNsb2NrU2VxIDw8IDg7CiAgICAgICAgfQoKICAgICAgICAkYnl0ZXMgPSAkdGhpcy0+dGltZUdlbmVyYXRvci0+Z2VuZXJhdGUoJG5vZGUsICRjbG9ja1NlcSk7CgogICAgICAgIC8vIFJlcGxhY2UgYnl0ZXMgaW4gdGhlIHRpbWUtYmFzZWQgVVVJRCB3aXRoIERDRSBTZWN1cml0eSB2YWx1ZXMuCiAgICAgICAgJGJ5dGVzID0gc3Vic3RyX3JlcGxhY2UoJGJ5dGVzLCAkaWRlbnRpZmllckJ5dGVzLCAwLCA0KTsKICAgICAgICAkYnl0ZXMgPSBzdWJzdHJfcmVwbGFjZSgkYnl0ZXMsICRkb21haW5CeXRlLCA5LCAxKTsKCiAgICAgICAgcmV0dXJuICRieXRlczsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/DceSecurityGeneratorInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCnVzZSBSYW1zZXlcVXVpZFxSZmM0MTIyXFV1aWRWMjsKdXNlIFJhbXNleVxVdWlkXFR5cGVcSGV4YWRlY2ltYWw7CnVzZSBSYW1zZXlcVXVpZFxUeXBlXEludGVnZXIgYXMgSW50ZWdlck9iamVjdDsKCi8qKgogKiBBIERDRSBTZWN1cml0eSBnZW5lcmF0b3IgZ2VuZXJhdGVzIHN0cmluZ3Mgb2YgYmluYXJ5IGRhdGEgYmFzZWQgb24gYSBsb2NhbAogKiBkb21haW4sIGxvY2FsIGlkZW50aWZpZXIsIG5vZGUgSUQsIGNsb2NrIHNlcXVlbmNlLCBhbmQgdGhlIGN1cnJlbnQgdGltZQogKgogKiBAc2VlIFV1aWRWMgogKi8KaW50ZXJmYWNlIERjZVNlY3VyaXR5R2VuZXJhdG9ySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogR2VuZXJhdGUgYSBiaW5hcnkgc3RyaW5nIGZyb20gYSBsb2NhbCBkb21haW4sIGxvY2FsIGlkZW50aWZpZXIsIG5vZGUgSUQsCiAgICAgKiBjbG9jayBzZXF1ZW5jZSwgYW5kIGN1cnJlbnQgdGltZQogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGxvY2FsRG9tYWluIFRoZSBsb2NhbCBkb21haW4gdG8gdXNlIHdoZW4gZ2VuZXJhdGluZyBieXRlcywKICAgICAqICAgICBhY2NvcmRpbmcgdG8gRENFIFNlY3VyaXR5CiAgICAgKiBAcGFyYW0gSW50ZWdlck9iamVjdHxudWxsICRsb2NhbElkZW50aWZpZXIgVGhlIGxvY2FsIGlkZW50aWZpZXIgZm9yIHRoZQogICAgICogICAgIGdpdmVuIGRvbWFpbjsgdGhpcyBtYXkgYmUgYSBVSUQgb3IgR0lEIG9uIFBPU0lYIHN5c3RlbXMsIGlmIHRoZSBsb2NhbAogICAgICogICAgIGRvbWFpbiBpcyBwZXJzb24gb3IgZ3JvdXAsIG9yIGl0IG1heSBiZSBhIHNpdGUtZGVmaW5lZCBpZGVudGlmaWVyCiAgICAgKiAgICAgaWYgdGhlIGxvY2FsIGRvbWFpbiBpcyBvcmcKICAgICAqIEBwYXJhbSBIZXhhZGVjaW1hbHxudWxsICRub2RlIEEgNDgtYml0IG51bWJlciByZXByZXNlbnRpbmcgdGhlIGhhcmR3YXJlCiAgICAgKiAgICAgYWRkcmVzcwogICAgICogQHBhcmFtIGludHxudWxsICRjbG9ja1NlcSBBIDE0LWJpdCBudW1iZXIgdXNlZCB0byBoZWxwIGF2b2lkIGR1cGxpY2F0ZXMKICAgICAqICAgICB0aGF0IGNvdWxkIGFyaXNlIHdoZW4gdGhlIGNsb2NrIGlzIHNldCBiYWNrd2FyZHMgaW4gdGltZSBvciBpZiB0aGUKICAgICAqICAgICBub2RlIElEIGNoYW5nZXMKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBBIGJpbmFyeSBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdlbmVyYXRlKAogICAgICAgIGludCAkbG9jYWxEb21haW4sCiAgICAgICAgP0ludGVnZXJPYmplY3QgJGxvY2FsSWRlbnRpZmllciA9IG51bGwsCiAgICAgICAgP0hleGFkZWNpbWFsICRub2RlID0gbnVsbCwKICAgICAgICA/aW50ICRjbG9ja1NlcSA9IG51bGwKICAgICk6IHN0cmluZzsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/DefaultNameGenerator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCnVzZSBSYW1zZXlcVXVpZFxFeGNlcHRpb25cTmFtZUV4Y2VwdGlvbjsKdXNlIFJhbXNleVxVdWlkXFV1aWRJbnRlcmZhY2U7CnVzZSBWYWx1ZUVycm9yOwoKdXNlIGZ1bmN0aW9uIGhhc2g7CgovKioKICogRGVmYXVsdE5hbWVHZW5lcmF0b3IgZ2VuZXJhdGVzIHN0cmluZ3Mgb2YgYmluYXJ5IGRhdGEgYmFzZWQgb24gYSBuYW1lc3BhY2UsCiAqIG5hbWUsIGFuZCBoYXNoaW5nIGFsZ29yaXRobQogKi8KY2xhc3MgRGVmYXVsdE5hbWVHZW5lcmF0b3IgaW1wbGVtZW50cyBOYW1lR2VuZXJhdG9ySW50ZXJmYWNlCnsKICAgIC8qKiBAcHNhbG0tcHVyZSAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdlbmVyYXRlKFV1aWRJbnRlcmZhY2UgJG5zLCBzdHJpbmcgJG5hbWUsIHN0cmluZyAkaGFzaEFsZ29yaXRobSk6IHN0cmluZwogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIC8qKiBAdmFyIHN0cmluZ3xib29sICRieXRlcyAqLwogICAgICAgICAgICAkYnl0ZXMgPSBAaGFzaCgkaGFzaEFsZ29yaXRobSwgJG5zLT5nZXRCeXRlcygpIC4gJG5hbWUsIHRydWUpOwogICAgICAgIH0gY2F0Y2ggKFZhbHVlRXJyb3IgJGUpIHsKICAgICAgICAgICAgJGJ5dGVzID0gZmFsc2U7IC8vIGtlZXAgc2FtZSBiZWhhdmlvciB0aGFuIFBIUCA3CiAgICAgICAgfQoKICAgICAgICBpZiAoJGJ5dGVzID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgTmFtZUV4Y2VwdGlvbihzcHJpbnRmKAogICAgICAgICAgICAgICAgJ1VuYWJsZSB0byBoYXNoIG5hbWVzcGFjZSBhbmQgbmFtZSB3aXRoIGFsZ29yaXRobSBcJyVzXCcnLAogICAgICAgICAgICAgICAgJGhhc2hBbGdvcml0aG0KICAgICAgICAgICAgKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gKHN0cmluZykgJGJ5dGVzOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/DefaultTimeGenerator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcVGltZUNvbnZlcnRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBSYW1zZXlcVXVpZFxFeGNlcHRpb25cUmFuZG9tU291cmNlRXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXFRpbWVTb3VyY2VFeGNlcHRpb247CnVzZSBSYW1zZXlcVXVpZFxQcm92aWRlclxOb2RlUHJvdmlkZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxQcm92aWRlclxUaW1lUHJvdmlkZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxUeXBlXEhleGFkZWNpbWFsOwp1c2UgVGhyb3dhYmxlOwoKdXNlIGZ1bmN0aW9uIGN0eXBlX3hkaWdpdDsKdXNlIGZ1bmN0aW9uIGRlY2hleDsKdXNlIGZ1bmN0aW9uIGhleDJiaW47CnVzZSBmdW5jdGlvbiBpc19pbnQ7CnVzZSBmdW5jdGlvbiBwYWNrOwp1c2UgZnVuY3Rpb24gc3ByaW50ZjsKdXNlIGZ1bmN0aW9uIHN0cl9wYWQ7CnVzZSBmdW5jdGlvbiBzdHJsZW47Cgp1c2UgY29uc3QgU1RSX1BBRF9MRUZUOwoKLyoqCiAqIERlZmF1bHRUaW1lR2VuZXJhdG9yIGdlbmVyYXRlcyBzdHJpbmdzIG9mIGJpbmFyeSBkYXRhIGJhc2VkIG9uIGEgbm9kZSBJRCwKICogY2xvY2sgc2VxdWVuY2UsIGFuZCB0aGUgY3VycmVudCB0aW1lCiAqLwpjbGFzcyBEZWZhdWx0VGltZUdlbmVyYXRvciBpbXBsZW1lbnRzIFRpbWVHZW5lcmF0b3JJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAdmFyIE5vZGVQcm92aWRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRub2RlUHJvdmlkZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkdGltZUNvbnZlcnRlcjsKCiAgICAvKioKICAgICAqIEB2YXIgVGltZVByb3ZpZGVySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJHRpbWVQcm92aWRlcjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgTm9kZVByb3ZpZGVySW50ZXJmYWNlICRub2RlUHJvdmlkZXIsCiAgICAgICAgVGltZUNvbnZlcnRlckludGVyZmFjZSAkdGltZUNvbnZlcnRlciwKICAgICAgICBUaW1lUHJvdmlkZXJJbnRlcmZhY2UgJHRpbWVQcm92aWRlcgogICAgKSB7CiAgICAgICAgJHRoaXMtPm5vZGVQcm92aWRlciA9ICRub2RlUHJvdmlkZXI7CiAgICAgICAgJHRoaXMtPnRpbWVDb252ZXJ0ZXIgPSAkdGltZUNvbnZlcnRlcjsKICAgICAgICAkdGhpcy0+dGltZVByb3ZpZGVyID0gJHRpbWVQcm92aWRlcjsKICAgIH0KCiAgICAvKioKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBwYXJhbWV0ZXJzIGNvbnRhaW4gaW52YWxpZCB2YWx1ZXMKICAgICAqIEB0aHJvd3MgUmFuZG9tU291cmNlRXhjZXB0aW9uIGlmIHJhbmRvbV9pbnQoKSB0aHJvd3MgYW4gZXhjZXB0aW9uL2Vycm9yCiAgICAgKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdlbmVyYXRlKCRub2RlID0gbnVsbCwgP2ludCAkY2xvY2tTZXEgPSBudWxsKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCRub2RlIGluc3RhbmNlb2YgSGV4YWRlY2ltYWwpIHsKICAgICAgICAgICAgJG5vZGUgPSAkbm9kZS0+dG9TdHJpbmcoKTsKICAgICAgICB9CgogICAgICAgICRub2RlID0gJHRoaXMtPmdldFZhbGlkTm9kZSgkbm9kZSk7CgogICAgICAgIGlmICgkY2xvY2tTZXEgPT09IG51bGwpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIC8vIFRoaXMgZG9lcyBub3QgdXNlICJzdGFibGUgc3RvcmFnZSI7IHNlZSBSRkMgNDEyMiwgU2VjdGlvbiA0LjIuMS4xLgogICAgICAgICAgICAgICAgJGNsb2NrU2VxID0gcmFuZG9tX2ludCgwLCAweDNmZmYpOwogICAgICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgJGV4Y2VwdGlvbikgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmRvbVNvdXJjZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAkZXhjZXB0aW9uLT5nZXRNZXNzYWdlKCksCiAgICAgICAgICAgICAgICAgICAgKGludCkgJGV4Y2VwdGlvbi0+Z2V0Q29kZSgpLAogICAgICAgICAgICAgICAgICAgICRleGNlcHRpb24KICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICR0aW1lID0gJHRoaXMtPnRpbWVQcm92aWRlci0+Z2V0VGltZSgpOwoKICAgICAgICAkdXVpZFRpbWUgPSAkdGhpcy0+dGltZUNvbnZlcnRlci0+Y2FsY3VsYXRlVGltZSgKICAgICAgICAgICAgJHRpbWUtPmdldFNlY29uZHMoKS0+dG9TdHJpbmcoKSwKICAgICAgICAgICAgJHRpbWUtPmdldE1pY3Jvc2Vjb25kcygpLT50b1N0cmluZygpCiAgICAgICAgKTsKCiAgICAgICAgJHRpbWVIZXggPSBzdHJfcGFkKCR1dWlkVGltZS0+dG9TdHJpbmcoKSwgMTYsICcwJywgU1RSX1BBRF9MRUZUKTsKCiAgICAgICAgaWYgKHN0cmxlbigkdGltZUhleCkgIT09IDE2KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUaW1lU291cmNlRXhjZXB0aW9uKHNwcmludGYoCiAgICAgICAgICAgICAgICAnVGhlIGdlbmVyYXRlZCB0aW1lIG9mIFwnJXNcJyBpcyBsYXJnZXIgdGhhbiBleHBlY3RlZCcsCiAgICAgICAgICAgICAgICAkdGltZUhleAogICAgICAgICAgICApKTsKICAgICAgICB9CgogICAgICAgICR0aW1lQnl0ZXMgPSAoc3RyaW5nKSBoZXgyYmluKCR0aW1lSGV4KTsKCiAgICAgICAgcmV0dXJuICR0aW1lQnl0ZXNbNF0gLiAkdGltZUJ5dGVzWzVdIC4gJHRpbWVCeXRlc1s2XSAuICR0aW1lQnl0ZXNbN10KICAgICAgICAgICAgLiAkdGltZUJ5dGVzWzJdIC4gJHRpbWVCeXRlc1szXQogICAgICAgICAgICAuICR0aW1lQnl0ZXNbMF0gLiAkdGltZUJ5dGVzWzFdCiAgICAgICAgICAgIC4gcGFjaygnbionLCAkY2xvY2tTZXEpCiAgICAgICAgICAgIC4gJG5vZGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBVc2VzIHRoZSBub2RlIHByb3ZpZGVyIGdpdmVuIHdoZW4gY29uc3RydWN0aW5nIHRoaXMgaW5zdGFuY2UgdG8gZ2V0CiAgICAgKiB0aGUgbm9kZSBJRCAodXN1YWxseSBhIE1BQyBhZGRyZXNzKQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8aW50fG51bGwgJG5vZGUgQSBub2RlIHZhbHVlIHRoYXQgbWF5IGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIG5vZGUgcHJvdmlkZXIKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyA2LWJ5dGUgYmluYXJ5IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZQogICAgICoKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0VmFsaWROb2RlKCRub2RlKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCRub2RlID09PSBudWxsKSB7CiAgICAgICAgICAgICRub2RlID0gJHRoaXMtPm5vZGVQcm92aWRlci0+Z2V0Tm9kZSgpOwogICAgICAgIH0KCiAgICAgICAgLy8gQ29udmVydCB0aGUgbm9kZSB0byBoZXgsIGlmIGl0IGlzIHN0aWxsIGFuIGludGVnZXIuCiAgICAgICAgaWYgKGlzX2ludCgkbm9kZSkpIHsKICAgICAgICAgICAgJG5vZGUgPSBkZWNoZXgoJG5vZGUpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFjdHlwZV94ZGlnaXQoKHN0cmluZykgJG5vZGUpIHx8IHN0cmxlbigoc3RyaW5nKSAkbm9kZSkgPiAxMikgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIG5vZGUgdmFsdWUnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAoc3RyaW5nKSBoZXgyYmluKHN0cl9wYWQoKHN0cmluZykgJG5vZGUsIDEyLCAnMCcsIFNUUl9QQURfTEVGVCkpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/NameGeneratorFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCi8qKgogKiBOYW1lR2VuZXJhdG9yRmFjdG9yeSByZXRyaWV2ZXMgYSBkZWZhdWx0IG5hbWUgZ2VuZXJhdG9yLCBiYXNlZCBvbiB0aGUKICogZW52aXJvbm1lbnQKICovCmNsYXNzIE5hbWVHZW5lcmF0b3JGYWN0b3J5CnsKICAgIC8qKgogICAgICogUmV0dXJucyBhIGRlZmF1bHQgbmFtZSBnZW5lcmF0b3IsIGJhc2VkIG9uIHRoZSBjdXJyZW50IGVudmlyb25tZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRHZW5lcmF0b3IoKTogTmFtZUdlbmVyYXRvckludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiBuZXcgRGVmYXVsdE5hbWVHZW5lcmF0b3IoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/NameGeneratorInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCnVzZSBSYW1zZXlcVXVpZFxVdWlkSW50ZXJmYWNlOwoKLyoqCiAqIEEgbmFtZSBnZW5lcmF0b3IgZ2VuZXJhdGVzIHN0cmluZ3Mgb2YgYmluYXJ5IGRhdGEgY3JlYXRlZCBieSBoYXNoaW5nIHRvZ2V0aGVyCiAqIGEgbmFtZXNwYWNlIHdpdGggYSBuYW1lLCBhY2NvcmRpbmcgdG8gYSBoYXNoaW5nIGFsZ29yaXRobQogKi8KaW50ZXJmYWNlIE5hbWVHZW5lcmF0b3JJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBHZW5lcmF0ZSBhIGJpbmFyeSBzdHJpbmcgZnJvbSBhIG5hbWVzcGFjZSBhbmQgbmFtZSBoYXNoZWQgdG9nZXRoZXIgd2l0aAogICAgICogdGhlIHNwZWNpZmllZCBoYXNoaW5nIGFsZ29yaXRobQogICAgICoKICAgICAqIEBwYXJhbSBVdWlkSW50ZXJmYWNlICRucyBUaGUgbmFtZXNwYWNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIFRoZSBuYW1lIHRvIHVzZSBmb3IgY3JlYXRpbmcgYSBVVUlECiAgICAgKiBAcGFyYW0gc3RyaW5nICRoYXNoQWxnb3JpdGhtIFRoZSBoYXNoaW5nIGFsZ29yaXRobSB0byB1c2UKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBBIGJpbmFyeSBzdHJpbmcKICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VuZXJhdGUoVXVpZEludGVyZmFjZSAkbnMsIHN0cmluZyAkbmFtZSwgc3RyaW5nICRoYXNoQWxnb3JpdGhtKTogc3RyaW5nOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/PeclUuidNameGenerator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCnVzZSBSYW1zZXlcVXVpZFxFeGNlcHRpb25cTmFtZUV4Y2VwdGlvbjsKdXNlIFJhbXNleVxVdWlkXFV1aWRJbnRlcmZhY2U7Cgp1c2UgZnVuY3Rpb24gc3ByaW50ZjsKdXNlIGZ1bmN0aW9uIHV1aWRfZ2VuZXJhdGVfbWQ1Owp1c2UgZnVuY3Rpb24gdXVpZF9nZW5lcmF0ZV9zaGExOwp1c2UgZnVuY3Rpb24gdXVpZF9wYXJzZTsKCi8qKgogKiBQZWNsVXVpZE5hbWVHZW5lcmF0b3IgZ2VuZXJhdGVzIHN0cmluZ3Mgb2YgYmluYXJ5IGRhdGEgZnJvbSBhIG5hbWVzcGFjZSBhbmQgYQogKiBuYW1lLCB1c2luZyBleHQtdXVpZAogKgogKiBAbGluayBodHRwczovL3BlY2wucGhwLm5ldC9wYWNrYWdlL3V1aWQgZXh0LXV1aWQKICovCmNsYXNzIFBlY2xVdWlkTmFtZUdlbmVyYXRvciBpbXBsZW1lbnRzIE5hbWVHZW5lcmF0b3JJbnRlcmZhY2UKewogICAgLyoqIEBwc2FsbS1wdXJlICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VuZXJhdGUoVXVpZEludGVyZmFjZSAkbnMsIHN0cmluZyAkbmFtZSwgc3RyaW5nICRoYXNoQWxnb3JpdGhtKTogc3RyaW5nCiAgICB7CiAgICAgICAgc3dpdGNoICgkaGFzaEFsZ29yaXRobSkgewogICAgICAgICAgICBjYXNlICdtZDUnOgogICAgICAgICAgICAgICAgJHV1aWQgPSB1dWlkX2dlbmVyYXRlX21kNSgkbnMtPnRvU3RyaW5nKCksICRuYW1lKTsKCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnc2hhMSc6CiAgICAgICAgICAgICAgICAkdXVpZCA9IHV1aWRfZ2VuZXJhdGVfc2hhMSgkbnMtPnRvU3RyaW5nKCksICRuYW1lKTsKCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHRocm93IG5ldyBOYW1lRXhjZXB0aW9uKHNwcmludGYoCiAgICAgICAgICAgICAgICAgICAgJ1VuYWJsZSB0byBoYXNoIG5hbWVzcGFjZSBhbmQgbmFtZSB3aXRoIGFsZ29yaXRobSBcJyVzXCcnLAogICAgICAgICAgICAgICAgICAgICRoYXNoQWxnb3JpdGhtCiAgICAgICAgICAgICAgICApKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB1dWlkX3BhcnNlKCR1dWlkKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/PeclUuidRandomGenerator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCnVzZSBmdW5jdGlvbiB1dWlkX2NyZWF0ZTsKdXNlIGZ1bmN0aW9uIHV1aWRfcGFyc2U7Cgp1c2UgY29uc3QgVVVJRF9UWVBFX1JBTkRPTTsKCi8qKgogKiBQZWNsVXVpZFJhbmRvbUdlbmVyYXRvciBnZW5lcmF0ZXMgc3RyaW5ncyBvZiByYW5kb20gYmluYXJ5IGRhdGEgdXNpbmcgZXh0LXV1aWQKICoKICogQGxpbmsgaHR0cHM6Ly9wZWNsLnBocC5uZXQvcGFja2FnZS91dWlkIGV4dC11dWlkCiAqLwpjbGFzcyBQZWNsVXVpZFJhbmRvbUdlbmVyYXRvciBpbXBsZW1lbnRzIFJhbmRvbUdlbmVyYXRvckludGVyZmFjZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VuZXJhdGUoaW50ICRsZW5ndGgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkdXVpZCA9IHV1aWRfY3JlYXRlKFVVSURfVFlQRV9SQU5ET00pOwoKICAgICAgICByZXR1cm4gdXVpZF9wYXJzZSgkdXVpZCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/PeclUuidTimeGenerator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCnVzZSBmdW5jdGlvbiB1dWlkX2NyZWF0ZTsKdXNlIGZ1bmN0aW9uIHV1aWRfcGFyc2U7Cgp1c2UgY29uc3QgVVVJRF9UWVBFX1RJTUU7CgovKioKICogUGVjbFV1aWRUaW1lR2VuZXJhdG9yIGdlbmVyYXRlcyBzdHJpbmdzIG9mIGJpbmFyeSBkYXRhIGZvciB0aW1lLWJhc2UgVVVJRHMsCiAqIHVzaW5nIGV4dC11dWlkCiAqCiAqIEBsaW5rIGh0dHBzOi8vcGVjbC5waHAubmV0L3BhY2thZ2UvdXVpZCBleHQtdXVpZAogKi8KY2xhc3MgUGVjbFV1aWRUaW1lR2VuZXJhdG9yIGltcGxlbWVudHMgVGltZUdlbmVyYXRvckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZW5lcmF0ZSgkbm9kZSA9IG51bGwsID9pbnQgJGNsb2NrU2VxID0gbnVsbCk6IHN0cmluZwogICAgewogICAgICAgICR1dWlkID0gdXVpZF9jcmVhdGUoVVVJRF9UWVBFX1RJTUUpOwoKICAgICAgICByZXR1cm4gdXVpZF9wYXJzZSgkdXVpZCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/RandomBytesGenerator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCnVzZSBSYW1zZXlcVXVpZFxFeGNlcHRpb25cUmFuZG9tU291cmNlRXhjZXB0aW9uOwp1c2UgVGhyb3dhYmxlOwoKLyoqCiAqIFJhbmRvbUJ5dGVzR2VuZXJhdG9yIGdlbmVyYXRlcyBzdHJpbmdzIG9mIHJhbmRvbSBiaW5hcnkgZGF0YSB1c2luZyB0aGUKICogYnVpbHQtaW4gYHJhbmRvbV9ieXRlcygpYCBQSFAgZnVuY3Rpb24KICoKICogQGxpbmsgaHR0cDovL3BocC5uZXQvcmFuZG9tX2J5dGVzIHJhbmRvbV9ieXRlcygpCiAqLwpjbGFzcyBSYW5kb21CeXRlc0dlbmVyYXRvciBpbXBsZW1lbnRzIFJhbmRvbUdlbmVyYXRvckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB0aHJvd3MgUmFuZG9tU291cmNlRXhjZXB0aW9uIGlmIHJhbmRvbV9ieXRlcygpIHRocm93cyBhbiBleGNlcHRpb24vZXJyb3IKICAgICAqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VuZXJhdGUoaW50ICRsZW5ndGgpOiBzdHJpbmcKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICByZXR1cm4gcmFuZG9tX2J5dGVzKCRsZW5ndGgpOwogICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSAkZXhjZXB0aW9uKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSYW5kb21Tb3VyY2VFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAkZXhjZXB0aW9uLT5nZXRNZXNzYWdlKCksCiAgICAgICAgICAgICAgICAoaW50KSAkZXhjZXB0aW9uLT5nZXRDb2RlKCksCiAgICAgICAgICAgICAgICAkZXhjZXB0aW9uCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/RandomGeneratorFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCi8qKgogKiBSYW5kb21HZW5lcmF0b3JGYWN0b3J5IHJldHJpZXZlcyBhIGRlZmF1bHQgcmFuZG9tIGdlbmVyYXRvciwgYmFzZWQgb24gdGhlCiAqIGVudmlyb25tZW50CiAqLwpjbGFzcyBSYW5kb21HZW5lcmF0b3JGYWN0b3J5CnsKICAgIC8qKgogICAgICogUmV0dXJucyBhIGRlZmF1bHQgcmFuZG9tIGdlbmVyYXRvciwgYmFzZWQgb24gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEdlbmVyYXRvcigpOiBSYW5kb21HZW5lcmF0b3JJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gbmV3IFJhbmRvbUJ5dGVzR2VuZXJhdG9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/RandomGeneratorInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCi8qKgogKiBBIHJhbmRvbSBnZW5lcmF0b3IgZ2VuZXJhdGVzIHN0cmluZ3Mgb2YgcmFuZG9tIGJpbmFyeSBkYXRhCiAqLwppbnRlcmZhY2UgUmFuZG9tR2VuZXJhdG9ySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogR2VuZXJhdGVzIGEgc3RyaW5nIG9mIHJhbmRvbWl6ZWQgYmluYXJ5IGRhdGEKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRsZW5ndGggVGhlIG51bWJlciBvZiBieXRlcyBvZiByYW5kb20gYmluYXJ5IGRhdGEgdG8gZ2VuZXJhdGUKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBBIGJpbmFyeSBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdlbmVyYXRlKGludCAkbGVuZ3RoKTogc3RyaW5nOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/RandomLibAdapter.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCnVzZSBSYW5kb21MaWJcRmFjdG9yeTsKdXNlIFJhbmRvbUxpYlxHZW5lcmF0b3I7CgovKioKICogUmFuZG9tTGliQWRhcHRlciBnZW5lcmF0ZXMgc3RyaW5ncyBvZiByYW5kb20gYmluYXJ5IGRhdGEgdXNpbmcgdGhlCiAqIHBhcmFnb25pZS9yYW5kb20tbGliIGxpYnJhcnkKICoKICogQGxpbmsgaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzL3BhcmFnb25pZS9yYW5kb20tbGliIHBhcmFnb25pZS9yYW5kb20tbGliCiAqLwpjbGFzcyBSYW5kb21MaWJBZGFwdGVyIGltcGxlbWVudHMgUmFuZG9tR2VuZXJhdG9ySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHZhciBHZW5lcmF0b3IKICAgICAqLwogICAgcHJpdmF0ZSAkZ2VuZXJhdG9yOwoKICAgIC8qKgogICAgICogQ29uc3RydWN0cyBhIFJhbmRvbUxpYkFkYXB0ZXIKICAgICAqCiAgICAgKiBCeSBkZWZhdWx0LCBpZiBubyBHZW5lcmF0b3IgaXMgcGFzc2VkIGluLCB0aGlzIGNyZWF0ZXMgYSBoaWdoLXN0cmVuZ3RoCiAgICAgKiBnZW5lcmF0b3IgdG8gdXNlIHdoZW4gZ2VuZXJhdGluZyByYW5kb20gYmluYXJ5IGRhdGEuCiAgICAgKgogICAgICogQHBhcmFtIEdlbmVyYXRvcnxudWxsICRnZW5lcmF0b3IgVGhlIGdlbmVyYXRvciB0byB1c2Ugd2hlbiBnZW5lcmF0aW5nIGJpbmFyeSBkYXRhCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCg/R2VuZXJhdG9yICRnZW5lcmF0b3IgPSBudWxsKQogICAgewogICAgICAgIGlmICgkZ2VuZXJhdG9yID09PSBudWxsKSB7CiAgICAgICAgICAgICRmYWN0b3J5ID0gbmV3IEZhY3RvcnkoKTsKICAgICAgICAgICAgJGdlbmVyYXRvciA9ICRmYWN0b3J5LT5nZXRIaWdoU3RyZW5ndGhHZW5lcmF0b3IoKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5nZW5lcmF0b3IgPSAkZ2VuZXJhdG9yOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZW5lcmF0ZShpbnQgJGxlbmd0aCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2VuZXJhdG9yLT5nZW5lcmF0ZSgkbGVuZ3RoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/TimeGeneratorFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcVGltZUNvbnZlcnRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXE5vZGVQcm92aWRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXFRpbWVQcm92aWRlckludGVyZmFjZTsKCi8qKgogKiBUaW1lR2VuZXJhdG9yRmFjdG9yeSByZXRyaWV2ZXMgYSBkZWZhdWx0IHRpbWUgZ2VuZXJhdG9yLCBiYXNlZCBvbiB0aGUKICogZW52aXJvbm1lbnQKICovCmNsYXNzIFRpbWVHZW5lcmF0b3JGYWN0b3J5CnsKICAgIC8qKgogICAgICogQHZhciBOb2RlUHJvdmlkZXJJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkbm9kZVByb3ZpZGVyOwoKICAgIC8qKgogICAgICogQHZhciBUaW1lQ29udmVydGVySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJHRpbWVDb252ZXJ0ZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIFRpbWVQcm92aWRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICR0aW1lUHJvdmlkZXI7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgIE5vZGVQcm92aWRlckludGVyZmFjZSAkbm9kZVByb3ZpZGVyLAogICAgICAgIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UgJHRpbWVDb252ZXJ0ZXIsCiAgICAgICAgVGltZVByb3ZpZGVySW50ZXJmYWNlICR0aW1lUHJvdmlkZXIKICAgICkgewogICAgICAgICR0aGlzLT5ub2RlUHJvdmlkZXIgPSAkbm9kZVByb3ZpZGVyOwogICAgICAgICR0aGlzLT50aW1lQ29udmVydGVyID0gJHRpbWVDb252ZXJ0ZXI7CiAgICAgICAgJHRoaXMtPnRpbWVQcm92aWRlciA9ICR0aW1lUHJvdmlkZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgZGVmYXVsdCB0aW1lIGdlbmVyYXRvciwgYmFzZWQgb24gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEdlbmVyYXRvcigpOiBUaW1lR2VuZXJhdG9ySW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBEZWZhdWx0VGltZUdlbmVyYXRvcigKICAgICAgICAgICAgJHRoaXMtPm5vZGVQcm92aWRlciwKICAgICAgICAgICAgJHRoaXMtPnRpbWVDb252ZXJ0ZXIsCiAgICAgICAgICAgICR0aGlzLT50aW1lUHJvdmlkZXIKICAgICAgICApOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/TimeGeneratorInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCnVzZSBSYW1zZXlcVXVpZFxUeXBlXEhleGFkZWNpbWFsOwoKLyoqCiAqIEEgdGltZSBnZW5lcmF0b3IgZ2VuZXJhdGVzIHN0cmluZ3Mgb2YgYmluYXJ5IGRhdGEgYmFzZWQgb24gYSBub2RlIElELAogKiBjbG9jayBzZXF1ZW5jZSwgYW5kIHRoZSBjdXJyZW50IHRpbWUKICovCmludGVyZmFjZSBUaW1lR2VuZXJhdG9ySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogR2VuZXJhdGUgYSBiaW5hcnkgc3RyaW5nIGZyb20gYSBub2RlIElELCBjbG9jayBzZXF1ZW5jZSwgYW5kIGN1cnJlbnQgdGltZQogICAgICoKICAgICAqIEBwYXJhbSBIZXhhZGVjaW1hbHxpbnR8c3RyaW5nfG51bGwgJG5vZGUgQSA0OC1iaXQgbnVtYmVyIHJlcHJlc2VudGluZyB0aGUKICAgICAqICAgICBoYXJkd2FyZSBhZGRyZXNzOyB0aGlzIG51bWJlciBtYXkgYmUgcmVwcmVzZW50ZWQgYXMgYW4gaW50ZWdlciBvciBhCiAgICAgKiAgICAgaGV4YWRlY2ltYWwgc3RyaW5nCiAgICAgKiBAcGFyYW0gaW50fG51bGwgJGNsb2NrU2VxIEEgMTQtYml0IG51bWJlciB1c2VkIHRvIGhlbHAgYXZvaWQgZHVwbGljYXRlcwogICAgICogICAgIHRoYXQgY291bGQgYXJpc2Ugd2hlbiB0aGUgY2xvY2sgaXMgc2V0IGJhY2t3YXJkcyBpbiB0aW1lIG9yIGlmIHRoZQogICAgICogICAgIG5vZGUgSUQgY2hhbmdlcwogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIEEgYmluYXJ5IHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VuZXJhdGUoJG5vZGUgPSBudWxsLCA/aW50ICRjbG9ja1NlcSA9IG51bGwpOiBzdHJpbmc7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Guid/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Guid/Fields.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEd1aWQ7Cgp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFJhbXNleVxVdWlkXEZpZWxkc1xTZXJpYWxpemFibGVGaWVsZHNUcmFpdDsKdXNlIFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcUmZjNDEyMlxOaWxUcmFpdDsKdXNlIFJhbXNleVxVdWlkXFJmYzQxMjJcVmFyaWFudFRyYWl0Owp1c2UgUmFtc2V5XFV1aWRcUmZjNDEyMlxWZXJzaW9uVHJhaXQ7CnVzZSBSYW1zZXlcVXVpZFxUeXBlXEhleGFkZWNpbWFsOwp1c2UgUmFtc2V5XFV1aWRcVXVpZDsKCnVzZSBmdW5jdGlvbiBiaW4yaGV4Owp1c2UgZnVuY3Rpb24gZGVjaGV4Owp1c2UgZnVuY3Rpb24gaGV4ZGVjOwp1c2UgZnVuY3Rpb24gcGFjazsKdXNlIGZ1bmN0aW9uIHNwcmludGY7CnVzZSBmdW5jdGlvbiBzdHJfcGFkOwp1c2UgZnVuY3Rpb24gc3RybGVuOwp1c2UgZnVuY3Rpb24gc3Vic3RyOwp1c2UgZnVuY3Rpb24gdW5wYWNrOwoKdXNlIGNvbnN0IFNUUl9QQURfTEVGVDsKCi8qKgogKiBHVUlEcyBhcmUgY29tcHJpc2VkIG9mIGEgc2V0IG9mIG5hbWVkIGZpZWxkcywgYWNjb3JkaW5nIHRvIFJGQyA0MTIyCiAqCiAqIEBzZWUgR3VpZAogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpmaW5hbCBjbGFzcyBGaWVsZHMgaW1wbGVtZW50cyBGaWVsZHNJbnRlcmZhY2UKewogICAgdXNlIE5pbFRyYWl0OwogICAgdXNlIFNlcmlhbGl6YWJsZUZpZWxkc1RyYWl0OwogICAgdXNlIFZhcmlhbnRUcmFpdDsKICAgIHVzZSBWZXJzaW9uVHJhaXQ7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRieXRlczsKCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJ5dGVzIEEgMTYtYnl0ZSBiaW5hcnkgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgVVVJRAogICAgICoKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBieXRlIHN0cmluZyBpcyBub3QgZXhhY3RseSAxNiBieXRlcwogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIGJ5dGUgc3RyaW5nIGRvZXMgbm90IHJlcHJlc2VudCBhIEdVSUQKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBieXRlIHN0cmluZyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgdmVyc2lvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRieXRlcykKICAgIHsKICAgICAgICBpZiAoc3RybGVuKCRieXRlcykgIT09IDE2KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnVGhlIGJ5dGUgc3RyaW5nIG11c3QgYmUgMTYgYnl0ZXMgbG9uZzsgJwogICAgICAgICAgICAgICAgLiAncmVjZWl2ZWQgJyAuIHN0cmxlbigkYnl0ZXMpIC4gJyBieXRlcycKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5ieXRlcyA9ICRieXRlczsKCiAgICAgICAgaWYgKCEkdGhpcy0+aXNDb3JyZWN0VmFyaWFudCgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnVGhlIGJ5dGUgc3RyaW5nIHJlY2VpdmVkIGRvZXMgbm90IGNvbmZvcm0gdG8gdGhlIFJGQyAnCiAgICAgICAgICAgICAgICAuICc0MTIyIG9yIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbiB2YXJpYW50cycKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICghJHRoaXMtPmlzQ29ycmVjdFZlcnNpb24oKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ1RoZSBieXRlIHN0cmluZyByZWNlaXZlZCBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgdmVyc2lvbicKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEJ5dGVzKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Ynl0ZXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVMb3coKTogSGV4YWRlY2ltYWwKICAgIHsKICAgICAgICAvLyBTd2FwIHRoZSBieXRlcyBmcm9tIGxpdHRsZSBlbmRpYW4gdG8gbmV0d29yayBieXRlIG9yZGVyLgogICAgICAgIC8qKiBAdmFyIGFycmF5ICRoZXggKi8KICAgICAgICAkaGV4ID0gdW5wYWNrKAogICAgICAgICAgICAnSConLAogICAgICAgICAgICBwYWNrKAogICAgICAgICAgICAgICAgJ3YqJywKICAgICAgICAgICAgICAgIGhleGRlYyhiaW4yaGV4KHN1YnN0cigkdGhpcy0+Ynl0ZXMsIDIsIDIpKSksCiAgICAgICAgICAgICAgICBoZXhkZWMoYmluMmhleChzdWJzdHIoJHRoaXMtPmJ5dGVzLCAwLCAyKSkpCiAgICAgICAgICAgICkKICAgICAgICApOwoKICAgICAgICByZXR1cm4gbmV3IEhleGFkZWNpbWFsKChzdHJpbmcpICgkaGV4WzFdID8/ICcnKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVNaWQoKTogSGV4YWRlY2ltYWwKICAgIHsKICAgICAgICAvLyBTd2FwIHRoZSBieXRlcyBmcm9tIGxpdHRsZSBlbmRpYW4gdG8gbmV0d29yayBieXRlIG9yZGVyLgogICAgICAgIC8qKiBAdmFyIGFycmF5ICRoZXggKi8KICAgICAgICAkaGV4ID0gdW5wYWNrKAogICAgICAgICAgICAnSConLAogICAgICAgICAgICBwYWNrKAogICAgICAgICAgICAgICAgJ3YnLAogICAgICAgICAgICAgICAgaGV4ZGVjKGJpbjJoZXgoc3Vic3RyKCR0aGlzLT5ieXRlcywgNCwgMikpKQogICAgICAgICAgICApCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIG5ldyBIZXhhZGVjaW1hbCgoc3RyaW5nKSAoJGhleFsxXSA/PyAnJykpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lSGlBbmRWZXJzaW9uKCk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgLy8gU3dhcCB0aGUgYnl0ZXMgZnJvbSBsaXR0bGUgZW5kaWFuIHRvIG5ldHdvcmsgYnl0ZSBvcmRlci4KICAgICAgICAvKiogQHZhciBhcnJheSAkaGV4ICovCiAgICAgICAgJGhleCA9IHVucGFjaygKICAgICAgICAgICAgJ0gqJywKICAgICAgICAgICAgcGFjaygKICAgICAgICAgICAgICAgICd2JywKICAgICAgICAgICAgICAgIGhleGRlYyhiaW4yaGV4KHN1YnN0cigkdGhpcy0+Ynl0ZXMsIDYsIDIpKSkKICAgICAgICAgICAgKQogICAgICAgICk7CgogICAgICAgIHJldHVybiBuZXcgSGV4YWRlY2ltYWwoKHN0cmluZykgKCRoZXhbMV0gPz8gJycpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZXN0YW1wKCk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBIZXhhZGVjaW1hbChzcHJpbnRmKAogICAgICAgICAgICAnJTAzeCUwNHMlMDhzJywKICAgICAgICAgICAgaGV4ZGVjKCR0aGlzLT5nZXRUaW1lSGlBbmRWZXJzaW9uKCktPnRvU3RyaW5nKCkpICYgMHgwZmZmLAogICAgICAgICAgICAkdGhpcy0+Z2V0VGltZU1pZCgpLT50b1N0cmluZygpLAogICAgICAgICAgICAkdGhpcy0+Z2V0VGltZUxvdygpLT50b1N0cmluZygpCiAgICAgICAgKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENsb2NrU2VxKCk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgJGNsb2NrU2VxID0gaGV4ZGVjKGJpbjJoZXgoc3Vic3RyKCR0aGlzLT5ieXRlcywgOCwgMikpKSAmIDB4M2ZmZjsKCiAgICAgICAgcmV0dXJuIG5ldyBIZXhhZGVjaW1hbChzdHJfcGFkKGRlY2hleCgkY2xvY2tTZXEpLCA0LCAnMCcsIFNUUl9QQURfTEVGVCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbG9ja1NlcUhpQW5kUmVzZXJ2ZWQoKTogSGV4YWRlY2ltYWwKICAgIHsKICAgICAgICByZXR1cm4gbmV3IEhleGFkZWNpbWFsKGJpbjJoZXgoc3Vic3RyKCR0aGlzLT5ieXRlcywgOCwgMSkpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xvY2tTZXFMb3coKTogSGV4YWRlY2ltYWwKICAgIHsKICAgICAgICByZXR1cm4gbmV3IEhleGFkZWNpbWFsKGJpbjJoZXgoc3Vic3RyKCR0aGlzLT5ieXRlcywgOSwgMSkpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9kZSgpOiBIZXhhZGVjaW1hbAogICAgewogICAgICAgIHJldHVybiBuZXcgSGV4YWRlY2ltYWwoYmluMmhleChzdWJzdHIoJHRoaXMtPmJ5dGVzLCAxMCkpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmVyc2lvbigpOiA/aW50CiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5pc05pbCgpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgYXJyYXkgJHBhcnRzICovCiAgICAgICAgJHBhcnRzID0gdW5wYWNrKCduKicsICR0aGlzLT5ieXRlcyk7CgogICAgICAgIHJldHVybiAoKGludCkgJHBhcnRzWzRdID4+IDQpICYgMHgwMGY7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBpc0NvcnJlY3RWYXJpYW50KCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmlzTmlsKCkpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAkdmFyaWFudCA9ICR0aGlzLT5nZXRWYXJpYW50KCk7CgogICAgICAgIHJldHVybiAkdmFyaWFudCA9PT0gVXVpZDo6UkZDXzQxMjIgfHwgJHZhcmlhbnQgPT09IFV1aWQ6OlJFU0VSVkVEX01JQ1JPU09GVDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Guid/Guid.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEd1aWQ7Cgp1c2UgUmFtc2V5XFV1aWRcQ29kZWNcQ29kZWNJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcTnVtYmVyQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxVdWlkOwoKLyoqCiAqIEd1aWQgcmVwcmVzZW50cyBhIFVVSUQgd2l0aCAibmF0aXZlIiAobGl0dGxlLWVuZGlhbikgYnl0ZSBvcmRlcgogKgogKiBGcm9tIFdpa2lwZWRpYToKICoKICogPiBUaGUgZmlyc3QgdGhyZWUgZmllbGRzIGFyZSB1bnNpZ25lZCAzMi0gYW5kIDE2LWJpdCBpbnRlZ2VycyBhbmQgYXJlIHN1YmplY3QKICogPiB0byBzd2FwcGluZywgd2hpbGUgdGhlIGxhc3QgdHdvIGZpZWxkcyBjb25zaXN0IG9mIHVuaW50ZXJwcmV0ZWQgYnl0ZXMsIG5vdAogKiA+IHN1YmplY3QgdG8gc3dhcHBpbmcuIFRoaXMgYnl0ZSBzd2FwcGluZyBhcHBsaWVzIGV2ZW4gZm9yIHZlcnNpb25zIDMsIDQsIGFuZAogKiA+IDUsIHdoZXJlIHRoZSBjYW5vbmljYWwgZmllbGRzIGRvIG5vdCBjb3JyZXNwb25kIHRvIHRoZSBjb250ZW50IG9mIHRoZSBVVUlELgogKgogKiBUaGUgZmlyc3QgdGhyZWUgZmllbGRzIG9mIGEgR1VJRCBhcmUgZW5jb2RlZCBpbiBsaXR0bGUtZW5kaWFuIGJ5dGUgb3JkZXIsCiAqIHdoaWxlIHRoZSBsYXN0IHRocmVlIGZpZWxkcyBhcmUgaW4gbmV0d29yayAoYmlnLWVuZGlhbikgYnl0ZSBvcmRlci4gVGhpcyBpcwogKiBhY2NvcmRpbmcgdG8gdGhlIGhpc3Rvcnkgb2YgdGhlIE1pY3Jvc29mdCBkZWZpbml0aW9uIG9mIGEgR1VJRC4KICoKICogQWNjb3JkaW5nIHRvIHRoZSAuTkVUIEd1aWQuVG9CeXRlQXJyYXkgbWV0aG9kIGRvY3VtZW50YXRpb246CiAqCiAqID4gTm90ZSB0aGF0IHRoZSBvcmRlciBvZiBieXRlcyBpbiB0aGUgcmV0dXJuZWQgYnl0ZSBhcnJheSBpcyBkaWZmZXJlbnQgZnJvbQogKiA+IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBHdWlkIHZhbHVlLiBUaGUgb3JkZXIgb2YgdGhlIGJlZ2lubmluZwogKiA+IGZvdXItYnl0ZSBncm91cCBhbmQgdGhlIG5leHQgdHdvIHR3by1ieXRlIGdyb3VwcyBpcyByZXZlcnNlZCwgd2hlcmVhcyB0aGUKICogPiBvcmRlciBvZiB0aGUgbGFzdCB0d28tYnl0ZSBncm91cCBhbmQgdGhlIGNsb3Npbmcgc2l4LWJ5dGUgZ3JvdXAgaXMgdGhlCiAqID4gc2FtZS4KICoKICogQGxpbmsgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVW5pdmVyc2FsbHlfdW5pcXVlX2lkZW50aWZpZXIjVmFyaWFudHMgVVVJRCBWYXJpYW50cyBvbiBXaWtpcGVkaWEKICogQGxpbmsgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG93cy93aW4zMi9hcGkvZ3VpZGRlZi9ucy1ndWlkZGVmLWd1aWQgV2luZG93cyBHVUlEIHN0cnVjdHVyZQogKiBAbGluayBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9kb3RuZXQvYXBpL3N5c3RlbS5ndWlkIC5ORVQgR3VpZCBTdHJ1Y3QKICogQGxpbmsgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvZG90bmV0L2FwaS9zeXN0ZW0uZ3VpZC50b2J5dGVhcnJheSAuTkVUIEd1aWQuVG9CeXRlQXJyYXkgTWV0aG9kCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmZpbmFsIGNsYXNzIEd1aWQgZXh0ZW5kcyBVdWlkCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBGaWVsZHMgJGZpZWxkcywKICAgICAgICBOdW1iZXJDb252ZXJ0ZXJJbnRlcmZhY2UgJG51bWJlckNvbnZlcnRlciwKICAgICAgICBDb2RlY0ludGVyZmFjZSAkY29kZWMsCiAgICAgICAgVGltZUNvbnZlcnRlckludGVyZmFjZSAkdGltZUNvbnZlcnRlcgogICAgKSB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkZmllbGRzLCAkbnVtYmVyQ29udmVydGVyLCAkY29kZWMsICR0aW1lQ29udmVydGVyKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Guid/GuidBuilder.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEd1aWQ7Cgp1c2UgUmFtc2V5XFV1aWRcQnVpbGRlclxVdWlkQnVpbGRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvZGVjXENvZGVjSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXE51bWJlckNvbnZlcnRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXFVuYWJsZVRvQnVpbGRVdWlkRXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcVXVpZEludGVyZmFjZTsKdXNlIFRocm93YWJsZTsKCi8qKgogKiBHdWlkQnVpbGRlciBidWlsZHMgaW5zdGFuY2VzIG9mIEd1aWQKICoKICogQHNlZSBHdWlkCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmNsYXNzIEd1aWRCdWlsZGVyIGltcGxlbWVudHMgVXVpZEJ1aWxkZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAdmFyIE51bWJlckNvbnZlcnRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRudW1iZXJDb252ZXJ0ZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkdGltZUNvbnZlcnRlcjsKCiAgICAvKioKICAgICAqIEBwYXJhbSBOdW1iZXJDb252ZXJ0ZXJJbnRlcmZhY2UgJG51bWJlckNvbnZlcnRlciBUaGUgbnVtYmVyIGNvbnZlcnRlciB0bwogICAgICogICAgIHVzZSB3aGVuIGNvbnN0cnVjdGluZyB0aGUgR3VpZAogICAgICogQHBhcmFtIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UgJHRpbWVDb252ZXJ0ZXIgVGhlIHRpbWUgY29udmVydGVyIHRvIHVzZQogICAgICogICAgIGZvciBjb252ZXJ0aW5nIHRpbWVzdGFtcHMgZXh0cmFjdGVkIGZyb20gYSBVVUlEIHRvIFVuaXggdGltZXN0YW1wcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgTnVtYmVyQ29udmVydGVySW50ZXJmYWNlICRudW1iZXJDb252ZXJ0ZXIsCiAgICAgICAgVGltZUNvbnZlcnRlckludGVyZmFjZSAkdGltZUNvbnZlcnRlcgogICAgKSB7CiAgICAgICAgJHRoaXMtPm51bWJlckNvbnZlcnRlciA9ICRudW1iZXJDb252ZXJ0ZXI7CiAgICAgICAgJHRoaXMtPnRpbWVDb252ZXJ0ZXIgPSAkdGltZUNvbnZlcnRlcjsKICAgIH0KCiAgICAvKioKICAgICAqIEJ1aWxkcyBhbmQgcmV0dXJucyBhIEd1aWQKICAgICAqCiAgICAgKiBAcGFyYW0gQ29kZWNJbnRlcmZhY2UgJGNvZGVjIFRoZSBjb2RlYyB0byB1c2UgZm9yIGJ1aWxkaW5nIHRoaXMgR3VpZCBpbnN0YW5jZQogICAgICogQHBhcmFtIHN0cmluZyAkYnl0ZXMgVGhlIGJ5dGUgc3RyaW5nIGZyb20gd2hpY2ggdG8gY29uc3RydWN0IGEgVVVJRAogICAgICoKICAgICAqIEByZXR1cm4gR3VpZCBUaGUgR3VpZEJ1aWxkZXIgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiBSYW1zZXlcVXVpZFxHdWlkXEd1aWQKICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYnVpbGQoQ29kZWNJbnRlcmZhY2UgJGNvZGVjLCBzdHJpbmcgJGJ5dGVzKTogVXVpZEludGVyZmFjZQogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgR3VpZCgKICAgICAgICAgICAgICAgICR0aGlzLT5idWlsZEZpZWxkcygkYnl0ZXMpLAogICAgICAgICAgICAgICAgJHRoaXMtPm51bWJlckNvbnZlcnRlciwKICAgICAgICAgICAgICAgICRjb2RlYywKICAgICAgICAgICAgICAgICR0aGlzLT50aW1lQ29udmVydGVyCiAgICAgICAgICAgICk7CiAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBVbmFibGVUb0J1aWxkVXVpZEV4Y2VwdGlvbigkZS0+Z2V0TWVzc2FnZSgpLCAoaW50KSAkZS0+Z2V0Q29kZSgpLCAkZSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUHJveHkgbWV0aG9kIHRvIGFsbG93IGluamVjdGluZyBhIG1vY2ssIGZvciB0ZXN0aW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBidWlsZEZpZWxkcyhzdHJpbmcgJGJ5dGVzKTogRmllbGRzCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBGaWVsZHMoJGJ5dGVzKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Lazy/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Lazy/LazyUuidFromString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXExhenk7Cgp1c2UgRGF0ZVRpbWVJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcTnVtYmVyQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcRmllbGRzXEZpZWxkc0ludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXE5vbnN0YW5kYXJkXFV1aWRWNjsKdXNlIFJhbXNleVxVdWlkXFJmYzQxMjJcVXVpZFYxOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxIZXhhZGVjaW1hbDsKdXNlIFJhbXNleVxVdWlkXFR5cGVcSW50ZWdlciBhcyBJbnRlZ2VyT2JqZWN0Owp1c2UgUmFtc2V5XFV1aWRcVXVpZEZhY3Rvcnk7CnVzZSBSYW1zZXlcVXVpZFxVdWlkSW50ZXJmYWNlOwp1c2UgVmFsdWVFcnJvcjsKCnVzZSBmdW5jdGlvbiBhc3NlcnQ7CnVzZSBmdW5jdGlvbiBiaW4yaGV4Owp1c2UgZnVuY3Rpb24gaGV4MmJpbjsKdXNlIGZ1bmN0aW9uIHNwcmludGY7CnVzZSBmdW5jdGlvbiBzdHJfcmVwbGFjZTsKdXNlIGZ1bmN0aW9uIHN1YnN0cjsKCi8qKgogKiBMYXp5IHZlcnNpb24gb2YgYSBVVUlEOiBpdHMgZm9ybWF0IGhhcyBub3QgYmVlbiBkZXRlcm1pbmVkIHlldCwgc28gaXQgaXMgbW9zdGx5IG9ubHkgdXNhYmxlIGZvciBzdHJpbmcvYnl0ZXMKICogY29udmVyc2lvbi4gVGhpcyBvYmplY3Qgb3B0aW1pemVzIGluc3RhbnRpYXRpb24sIHNlcmlhbGl6YXRpb24gYW5kIHN0cmluZyBjb252ZXJzaW9uIHRpbWUsIGF0IHRoZSBjb3N0IG9mCiAqIGluY3JlYXNlZCBvdmVyaGVhZCBmb3IgbW9yZSBhZHZhbmNlZCBVVUlEIG9wZXJhdGlvbnMuCiAqCiAqIEBpbnRlcm5hbCB0aGlzIHR5cGUgaXMgdXNlZCBpbnRlcm5hbGx5IGZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBhbmQgaXMgbm90IHN1cHBvc2VkIHRvIGJlIGRpcmVjdGx5IHJlZmVyZW5jZWQKICogICAgICAgICAgIGluIGNvbnN1bWVyIGxpYnJhcmllcy4KICoKICogQHBzYWxtLWltbXV0YWJsZQogKgogKiBOb3RlOiB0aGUge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBkb2VzIG5vdCBkZWNsYXJlIG1ldGhvZHMgdGhhdCBkZXByZWNhdGVkIEFQSQogKiAgICAgICAgcmVsaWVzIHVwb246IHRoZSBBUEkgaGFzIGJlZW4gcG9ydGVkIGZyb20gdGhlIHtAc2VlIFxSYW1zZXlcVXVpZFxVdWlkfSBkZWZpbml0aW9uLAogKiAgICAgICAgYW5kIGlzIGRlcHJlY2F0ZWQgYW55d2F5LgogKiBOb3RlOiB0aGUgZGVwcmVjYXRlZCBBUEkgZnJvbSB7QHNlZSBcUmFtc2V5XFV1aWRcVXVpZH0gaXMgaW4gdXNlIGhlcmUgKG9uIHB1cnBvc2UpOiBpdCB3aWxsIGJlIHJlbW92ZWQKICogICAgICAgb25jZSB0aGUgZGVwcmVjYXRlZCBBUEkgaXMgZ29uZSBmcm9tIHRoaXMgY2xhc3MgdG9vLgogKgogKiBAcHNhbG0tc3VwcHJlc3MgVW5kZWZpbmVkSW50ZXJmYWNlTWV0aG9kCiAqIEBwc2FsbS1zdXBwcmVzcyBEZXByZWNhdGVkTWV0aG9kCiAqLwpmaW5hbCBjbGFzcyBMYXp5VXVpZEZyb21TdHJpbmcgaW1wbGVtZW50cyBVdWlkSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBjb25zdCBWQUxJRF9SRUdFWCA9ICcvXEFbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn1cei9tcyc7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKiBAcHNhbG0tdmFyIG5vbi1lbXB0eS1zdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkdXVpZDsKICAgIC8qKiBAdmFyIFV1aWRJbnRlcmZhY2V8bnVsbCAqLwogICAgcHJpdmF0ZSAkdW53cmFwcGVkOwoKICAgIC8qKiBAcHNhbG0tcGFyYW0gbm9uLWVtcHR5LXN0cmluZyAkdXVpZCAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkdXVpZCkKICAgIHsKICAgICAgICAkdGhpcy0+dXVpZCA9ICR1dWlkOwogICAgfQoKICAgIC8qKiBAcHNhbG0tcHVyZSAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tQnl0ZXMoc3RyaW5nICRieXRlcyk6IHNlbGYKICAgIHsKICAgICAgICAkYmFzZTE2VXVpZCA9IGJpbjJoZXgoJGJ5dGVzKTsKCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKAogICAgICAgICAgICBzdWJzdHIoJGJhc2UxNlV1aWQsIDAsIDgpCiAgICAgICAgICAgIC4gJy0nCiAgICAgICAgICAgIC4gc3Vic3RyKCRiYXNlMTZVdWlkLCA4LCA0KQogICAgICAgICAgICAuICctJwogICAgICAgICAgICAuIHN1YnN0cigkYmFzZTE2VXVpZCwgMTIsIDQpCiAgICAgICAgICAgIC4gJy0nCiAgICAgICAgICAgIC4gc3Vic3RyKCRiYXNlMTZVdWlkLCAxNiwgNCkKICAgICAgICAgICAgLiAnLScKICAgICAgICAgICAgLiBzdWJzdHIoJGJhc2UxNlV1aWQsIDIwLCAxMikKICAgICAgICApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXJpYWxpemUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51dWlkOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheXtzdHJpbmc6IHN0cmluZ30KICAgICAqCiAgICAgKiBAcHNhbG0tcmV0dXJuIGFycmF5e3N0cmluZzogbm9uLWVtcHR5LXN0cmluZ30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fc2VyaWFsaXplKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFsnc3RyaW5nJyA9PiAkdGhpcy0+dXVpZF07CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2VyaWFsaXplZAogICAgICoKICAgICAqIEBwc2FsbS1wYXJhbSBub24tZW1wdHktc3RyaW5nICRzZXJpYWxpemVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bnNlcmlhbGl6ZSgkc2VyaWFsaXplZCk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+dXVpZCA9ICRzZXJpYWxpemVkOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGFycmF5e3N0cmluZzogc3RyaW5nfSAkZGF0YQogICAgICoKICAgICAqIEBwc2FsbS1wYXJhbSBhcnJheXtzdHJpbmc6IG5vbi1lbXB0eS1zdHJpbmd9ICRkYXRhCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3Vuc2VyaWFsaXplKGFycmF5ICRkYXRhKTogdm9pZAogICAgewogICAgICAgIC8vIEBjb2RlQ292ZXJhZ2VJZ25vcmVTdGFydAogICAgICAgIGlmICghaXNzZXQoJGRhdGFbJ3N0cmluZyddKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVmFsdWVFcnJvcihzcHJpbnRmKCclcygpOiBBcmd1bWVudCAjMSAoJGRhdGEpIGlzIGludmFsaWQnLCBfX01FVEhPRF9fKSk7CiAgICAgICAgfQogICAgICAgIC8vIEBjb2RlQ292ZXJhZ2VJZ25vcmVFbmQKCiAgICAgICAgJHRoaXMtPnVuc2VyaWFsaXplKCRkYXRhWydzdHJpbmcnXSk7CiAgICB9CgogICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBEZXByZWNhdGVkTWV0aG9kICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TnVtYmVyQ29udmVydGVyKCk6IE51bWJlckNvbnZlcnRlckludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAoJHRoaXMtPnVud3JhcHBlZCA/PyAkdGhpcy0+dW53cmFwKCkpCiAgICAgICAgICAgIC0+Z2V0TnVtYmVyQ29udmVydGVyKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKgogICAgICogQHBzYWxtLXN1cHByZXNzIERlcHJlY2F0ZWRNZXRob2QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZpZWxkc0hleCgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAoJHRoaXMtPnVud3JhcHBlZCA/PyAkdGhpcy0+dW53cmFwKCkpCiAgICAgICAgICAgIC0+Z2V0RmllbGRzSGV4KCk7CiAgICB9CgogICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBEZXByZWNhdGVkTWV0aG9kICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xvY2tTZXFIaUFuZFJlc2VydmVkSGV4KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAoJHRoaXMtPnVud3JhcHBlZCA/PyAkdGhpcy0+dW53cmFwKCkpCiAgICAgICAgICAgIC0+Z2V0Q2xvY2tTZXFIaUFuZFJlc2VydmVkSGV4KCk7CiAgICB9CgogICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBEZXByZWNhdGVkTWV0aG9kICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xvY2tTZXFMb3dIZXgoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSkKICAgICAgICAgICAgLT5nZXRDbG9ja1NlcUxvd0hleCgpOwogICAgfQoKICAgIC8qKiBAcHNhbG0tc3VwcHJlc3MgRGVwcmVjYXRlZE1ldGhvZCAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENsb2NrU2VxdWVuY2VIZXgoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSkKICAgICAgICAgICAgLT5nZXRDbG9ja1NlcXVlbmNlSGV4KCk7CiAgICB9CgogICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBEZXByZWNhdGVkTWV0aG9kICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGF0ZVRpbWUoKTogRGF0ZVRpbWVJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gKCR0aGlzLT51bndyYXBwZWQgPz8gJHRoaXMtPnVud3JhcCgpKQogICAgICAgICAgICAtPmdldERhdGVUaW1lKCk7CiAgICB9CgogICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBEZXByZWNhdGVkTWV0aG9kICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGVhc3RTaWduaWZpY2FudEJpdHNIZXgoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSkKICAgICAgICAgICAgLT5nZXRMZWFzdFNpZ25pZmljYW50Qml0c0hleCgpOwogICAgfQoKICAgIC8qKiBAcHNhbG0tc3VwcHJlc3MgRGVwcmVjYXRlZE1ldGhvZCAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1vc3RTaWduaWZpY2FudEJpdHNIZXgoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSkKICAgICAgICAgICAgLT5nZXRNb3N0U2lnbmlmaWNhbnRCaXRzSGV4KCk7CiAgICB9CgogICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBEZXByZWNhdGVkTWV0aG9kICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9kZUhleCgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gKCR0aGlzLT51bndyYXBwZWQgPz8gJHRoaXMtPnVud3JhcCgpKQogICAgICAgICAgICAtPmdldE5vZGVIZXgoKTsKICAgIH0KCiAgICAvKiogQHBzYWxtLXN1cHByZXNzIERlcHJlY2F0ZWRNZXRob2QgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lSGlBbmRWZXJzaW9uSGV4KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAoJHRoaXMtPnVud3JhcHBlZCA/PyAkdGhpcy0+dW53cmFwKCkpCiAgICAgICAgICAgIC0+Z2V0VGltZUhpQW5kVmVyc2lvbkhleCgpOwogICAgfQoKICAgIC8qKiBAcHNhbG0tc3VwcHJlc3MgRGVwcmVjYXRlZE1ldGhvZCAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVMb3dIZXgoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSkKICAgICAgICAgICAgLT5nZXRUaW1lTG93SGV4KCk7CiAgICB9CgogICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBEZXByZWNhdGVkTWV0aG9kICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZU1pZEhleCgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gKCR0aGlzLT51bndyYXBwZWQgPz8gJHRoaXMtPnVud3JhcCgpKQogICAgICAgICAgICAtPmdldFRpbWVNaWRIZXgoKTsKICAgIH0KCiAgICAvKiogQHBzYWxtLXN1cHByZXNzIERlcHJlY2F0ZWRNZXRob2QgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lc3RhbXBIZXgoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSkKICAgICAgICAgICAgLT5nZXRUaW1lc3RhbXBIZXgoKTsKICAgIH0KCiAgICAvKiogQHBzYWxtLXN1cHByZXNzIERlcHJlY2F0ZWRNZXRob2QgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVcm4oKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSkKICAgICAgICAgICAgLT5nZXRVcm4oKTsKICAgIH0KCiAgICAvKiogQHBzYWxtLXN1cHByZXNzIERlcHJlY2F0ZWRNZXRob2QgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWYXJpYW50KCk6ID9pbnQKICAgIHsKICAgICAgICByZXR1cm4gKCR0aGlzLT51bndyYXBwZWQgPz8gJHRoaXMtPnVud3JhcCgpKQogICAgICAgICAgICAtPmdldFZhcmlhbnQoKTsKICAgIH0KCiAgICAvKiogQHBzYWxtLXN1cHByZXNzIERlcHJlY2F0ZWRNZXRob2QgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWZXJzaW9uKCk6ID9pbnQKICAgIHsKICAgICAgICByZXR1cm4gKCR0aGlzLT51bndyYXBwZWQgPz8gJHRoaXMtPnVud3JhcCgpKQogICAgICAgICAgICAtPmdldFZlcnNpb24oKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcGFyZVRvKFV1aWRJbnRlcmZhY2UgJG90aGVyKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSkKICAgICAgICAgICAgLT5jb21wYXJlVG8oJG90aGVyKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZXF1YWxzKD9vYmplY3QgJG90aGVyKTogYm9vbAogICAgewogICAgICAgIGlmICghICRvdGhlciBpbnN0YW5jZW9mIFV1aWRJbnRlcmZhY2UpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT51dWlkID09PSAkb3RoZXItPnRvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKgogICAgICogQHBzYWxtLXN1cHByZXNzIE1vcmVTcGVjaWZpY1JldHVyblR5cGUKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBMZXNzU3BlY2lmaWNSZXR1cm5TdGF0ZW1lbnQgd2Uga25vdyB0aGF0IHtAc2VlIHNlbGY6OiR1dWlkfSBpcyBhIG5vbi1lbXB0eSBzdHJpbmcsIHNvCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlIGtub3cgdGhhdCB7QHNlZSBoZXgyYmlufSB3aWxsIHJldHJpZXZlIGEgbm9uLWVtcHR5IHN0cmluZyB0b28uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCeXRlcygpOiBzdHJpbmcKICAgIHsKICAgICAgICAvKiogQHBocHN0YW4taWdub3JlLW5leHQtbGluZSBQSFBTdGFuIGNvbXBsYWlucyB0aGF0IHRoaXMgaXMgbm90IGEgbm9uLWVtcHR5LXN0cmluZy4gKi8KICAgICAgICByZXR1cm4gKHN0cmluZykgaGV4MmJpbihzdHJfcmVwbGFjZSgnLScsICcnLCAkdGhpcy0+dXVpZCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGaWVsZHMoKTogRmllbGRzSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSkKICAgICAgICAgICAgLT5nZXRGaWVsZHMoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGV4KCk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSkKICAgICAgICAgICAgLT5nZXRIZXgoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW50ZWdlcigpOiBJbnRlZ2VyT2JqZWN0CiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSkKICAgICAgICAgICAgLT5nZXRJbnRlZ2VyKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dXVpZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnV1aWQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51dWlkOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAc2VlIFV1aWRJbnRlcmZhY2U6OmdldEZpZWxkcygpfSB0byBnZXQgYQogICAgICogICAgIHtAc2VlIEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UuIElmIGl0IGlzIGEge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZX0KICAgICAqICAgICBpbnN0YW5jZSwgeW91IG1heSBjYWxsIHtAc2VlIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2U6OmdldENsb2NrU2VxSGlBbmRSZXNlcnZlZCgpfQogICAgICogICAgIGFuZCB1c2UgdGhlIGFyYml0cmFyeS1wcmVjaXNpb24gbWF0aCBsaWJyYXJ5IG9mIHlvdXIgY2hvaWNlIHRvCiAgICAgKiAgICAgY29udmVydCBpdCB0byBhIHN0cmluZyBpbnRlZ2VyLgogICAgICoKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBVbmRlZmluZWRJbnRlcmZhY2VNZXRob2QKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBEZXByZWNhdGVkTWV0aG9kCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkTWV0aG9kQ2FsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xvY2tTZXFIaUFuZFJlc2VydmVkKCk6IHN0cmluZwogICAgewogICAgICAgICRpbnN0YW5jZSA9ICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSk7CgogICAgICAgIHJldHVybiAkaW5zdGFuY2UtPmdldE51bWJlckNvbnZlcnRlcigpCiAgICAgICAgICAgIC0+ZnJvbUhleCgKICAgICAgICAgICAgICAgICRpbnN0YW5jZS0+Z2V0RmllbGRzKCkKICAgICAgICAgICAgICAgICAgICAtPmdldENsb2NrU2VxSGlBbmRSZXNlcnZlZCgpCiAgICAgICAgICAgICAgICAgICAgLT50b1N0cmluZygpCiAgICAgICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYSB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlfQogICAgICogICAgIGluc3RhbmNlLCB5b3UgbWF5IGNhbGwge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTo6Z2V0Q2xvY2tTZXFMb3coKX0KICAgICAqICAgICBhbmQgdXNlIHRoZSBhcmJpdHJhcnktcHJlY2lzaW9uIG1hdGggbGlicmFyeSBvZiB5b3VyIGNob2ljZSB0bwogICAgICogICAgIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcgaW50ZWdlci4KICAgICAqCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgVW5kZWZpbmVkSW50ZXJmYWNlTWV0aG9kCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgRGVwcmVjYXRlZE1ldGhvZAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZE1ldGhvZENhbGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENsb2NrU2VxTG93KCk6IHN0cmluZwogICAgewogICAgICAgICRpbnN0YW5jZSA9ICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSk7CgogICAgICAgIHJldHVybiAkaW5zdGFuY2UtPmdldE51bWJlckNvbnZlcnRlcigpCiAgICAgICAgICAgIC0+ZnJvbUhleCgKICAgICAgICAgICAgICAgICRpbnN0YW5jZS0+Z2V0RmllbGRzKCkKICAgICAgICAgICAgICAgICAgICAtPmdldENsb2NrU2VxTG93KCkKICAgICAgICAgICAgICAgICAgICAtPnRvU3RyaW5nKCkKICAgICAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRGaWVsZHMoKX0gdG8gZ2V0IGEKICAgICAqICAgICB7QHNlZSBGaWVsZHNJbnRlcmZhY2V9IGluc3RhbmNlLiBJZiBpdCBpcyBhIHtAc2VlIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2V9CiAgICAgKiAgICAgaW5zdGFuY2UsIHlvdSBtYXkgY2FsbCB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlOjpnZXRDbG9ja1NlcSgpfQogICAgICogICAgIGFuZCB1c2UgdGhlIGFyYml0cmFyeS1wcmVjaXNpb24gbWF0aCBsaWJyYXJ5IG9mIHlvdXIgY2hvaWNlIHRvCiAgICAgKiAgICAgY29udmVydCBpdCB0byBhIHN0cmluZyBpbnRlZ2VyLgogICAgICoKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBVbmRlZmluZWRJbnRlcmZhY2VNZXRob2QKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBEZXByZWNhdGVkTWV0aG9kCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkTWV0aG9kQ2FsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xvY2tTZXF1ZW5jZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkaW5zdGFuY2UgPSAoJHRoaXMtPnVud3JhcHBlZCA/PyAkdGhpcy0+dW53cmFwKCkpOwoKICAgICAgICByZXR1cm4gJGluc3RhbmNlLT5nZXROdW1iZXJDb252ZXJ0ZXIoKQogICAgICAgICAgICAtPmZyb21IZXgoCiAgICAgICAgICAgICAgICAkaW5zdGFuY2UtPmdldEZpZWxkcygpCiAgICAgICAgICAgICAgICAgICAgLT5nZXRDbG9ja1NlcSgpCiAgICAgICAgICAgICAgICAgICAgLT50b1N0cmluZygpCiAgICAgICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gNS4wLjAuIFRoZXJlIGlzIG5vIGRpcmVjdAogICAgICogICAgIGFsdGVybmF0aXZlLCBidXQgdGhlIHNhbWUgaW5mb3JtYXRpb24gbWF5IGJlIG9idGFpbmVkIGJ5IHNwbGl0dGluZwogICAgICogICAgIGluIGhhbGYgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHtAc2VlIFV1aWRJbnRlcmZhY2U6OmdldEhleCgpfS4KICAgICAqCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgVW5kZWZpbmVkSW50ZXJmYWNlTWV0aG9kCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgRGVwcmVjYXRlZE1ldGhvZAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZE1ldGhvZENhbGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldExlYXN0U2lnbmlmaWNhbnRCaXRzKCk6IHN0cmluZwogICAgewogICAgICAgICRpbnN0YW5jZSA9ICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSk7CgogICAgICAgIHJldHVybiAkaW5zdGFuY2UtPmdldE51bWJlckNvbnZlcnRlcigpCiAgICAgICAgICAgIC0+ZnJvbUhleChzdWJzdHIoJGluc3RhbmNlLT5nZXRIZXgoKS0+dG9TdHJpbmcoKSwgMTYpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiA1LjAuMC4gVGhlcmUgaXMgbm8gZGlyZWN0CiAgICAgKiAgICAgYWx0ZXJuYXRpdmUsIGJ1dCB0aGUgc2FtZSBpbmZvcm1hdGlvbiBtYXkgYmUgb2J0YWluZWQgYnkgc3BsaXR0aW5nCiAgICAgKiAgICAgaW4gaGFsZiB0aGUgdmFsdWUgcmV0dXJuZWQgYnkge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0SGV4KCl9LgogICAgICoKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBVbmRlZmluZWRJbnRlcmZhY2VNZXRob2QKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBEZXByZWNhdGVkTWV0aG9kCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkTWV0aG9kQ2FsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TW9zdFNpZ25pZmljYW50Qml0cygpOiBzdHJpbmcKICAgIHsKICAgICAgICAkaW5zdGFuY2UgPSAoJHRoaXMtPnVud3JhcHBlZCA/PyAkdGhpcy0+dW53cmFwKCkpOwoKICAgICAgICByZXR1cm4gJGluc3RhbmNlLT5nZXROdW1iZXJDb252ZXJ0ZXIoKQogICAgICAgICAgICAtPmZyb21IZXgoc3Vic3RyKCRpbnN0YW5jZS0+Z2V0SGV4KCktPnRvU3RyaW5nKCksIDAsIDE2KSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYSB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlfQogICAgICogICAgIGluc3RhbmNlLCB5b3UgbWF5IGNhbGwge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTo6Z2V0Tm9kZSgpfQogICAgICogICAgIGFuZCB1c2UgdGhlIGFyYml0cmFyeS1wcmVjaXNpb24gbWF0aCBsaWJyYXJ5IG9mIHlvdXIgY2hvaWNlIHRvCiAgICAgKiAgICAgY29udmVydCBpdCB0byBhIHN0cmluZyBpbnRlZ2VyLgogICAgICoKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBVbmRlZmluZWRJbnRlcmZhY2VNZXRob2QKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBEZXByZWNhdGVkTWV0aG9kCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkTWV0aG9kQ2FsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9kZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkaW5zdGFuY2UgPSAoJHRoaXMtPnVud3JhcHBlZCA/PyAkdGhpcy0+dW53cmFwKCkpOwoKICAgICAgICByZXR1cm4gJGluc3RhbmNlLT5nZXROdW1iZXJDb252ZXJ0ZXIoKQogICAgICAgICAgICAtPmZyb21IZXgoCiAgICAgICAgICAgICAgICAkaW5zdGFuY2UtPmdldEZpZWxkcygpCiAgICAgICAgICAgICAgICAgICAgLT5nZXROb2RlKCkKICAgICAgICAgICAgICAgICAgICAtPnRvU3RyaW5nKCkKICAgICAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRGaWVsZHMoKX0gdG8gZ2V0IGEKICAgICAqICAgICB7QHNlZSBGaWVsZHNJbnRlcmZhY2V9IGluc3RhbmNlLiBJZiBpdCBpcyBhIHtAc2VlIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2V9CiAgICAgKiAgICAgaW5zdGFuY2UsIHlvdSBtYXkgY2FsbCB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlOjpnZXRUaW1lSGlBbmRWZXJzaW9uKCl9CiAgICAgKiAgICAgYW5kIHVzZSB0aGUgYXJiaXRyYXJ5LXByZWNpc2lvbiBtYXRoIGxpYnJhcnkgb2YgeW91ciBjaG9pY2UgdG8KICAgICAqICAgICBjb252ZXJ0IGl0IHRvIGEgc3RyaW5nIGludGVnZXIuCiAgICAgKgogICAgICogQHBzYWxtLXN1cHByZXNzIFVuZGVmaW5lZEludGVyZmFjZU1ldGhvZAogICAgICogQHBzYWxtLXN1cHByZXNzIERlcHJlY2F0ZWRNZXRob2QKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFyZ3VtZW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRNZXRob2RDYWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lSGlBbmRWZXJzaW9uKCk6IHN0cmluZwogICAgewogICAgICAgICRpbnN0YW5jZSA9ICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSk7CgogICAgICAgIHJldHVybiAkaW5zdGFuY2UtPmdldE51bWJlckNvbnZlcnRlcigpCiAgICAgICAgICAgIC0+ZnJvbUhleCgKICAgICAgICAgICAgICAgICRpbnN0YW5jZS0+Z2V0RmllbGRzKCkKICAgICAgICAgICAgICAgICAgICAtPmdldFRpbWVIaUFuZFZlcnNpb24oKQogICAgICAgICAgICAgICAgICAgIC0+dG9TdHJpbmcoKQogICAgICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAc2VlIFV1aWRJbnRlcmZhY2U6OmdldEZpZWxkcygpfSB0byBnZXQgYQogICAgICogICAgIHtAc2VlIEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UuIElmIGl0IGlzIGEge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZX0KICAgICAqICAgICBpbnN0YW5jZSwgeW91IG1heSBjYWxsIHtAc2VlIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2U6OmdldFRpbWVMb3coKX0KICAgICAqICAgICBhbmQgdXNlIHRoZSBhcmJpdHJhcnktcHJlY2lzaW9uIG1hdGggbGlicmFyeSBvZiB5b3VyIGNob2ljZSB0bwogICAgICogICAgIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcgaW50ZWdlci4KICAgICAqCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgVW5kZWZpbmVkSW50ZXJmYWNlTWV0aG9kCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgRGVwcmVjYXRlZE1ldGhvZAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZE1ldGhvZENhbGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVMb3coKTogc3RyaW5nCiAgICB7CiAgICAgICAgJGluc3RhbmNlID0gKCR0aGlzLT51bndyYXBwZWQgPz8gJHRoaXMtPnVud3JhcCgpKTsKCiAgICAgICAgcmV0dXJuICRpbnN0YW5jZS0+Z2V0TnVtYmVyQ29udmVydGVyKCkKICAgICAgICAgICAgLT5mcm9tSGV4KAogICAgICAgICAgICAgICAgJGluc3RhbmNlLT5nZXRGaWVsZHMoKQogICAgICAgICAgICAgICAgICAgIC0+Z2V0VGltZUxvdygpCiAgICAgICAgICAgICAgICAgICAgLT50b1N0cmluZygpCiAgICAgICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYSB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlfQogICAgICogICAgIGluc3RhbmNlLCB5b3UgbWF5IGNhbGwge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTo6Z2V0VGltZU1pZCgpfQogICAgICogICAgIGFuZCB1c2UgdGhlIGFyYml0cmFyeS1wcmVjaXNpb24gbWF0aCBsaWJyYXJ5IG9mIHlvdXIgY2hvaWNlIHRvCiAgICAgKiAgICAgY29udmVydCBpdCB0byBhIHN0cmluZyBpbnRlZ2VyLgogICAgICoKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBVbmRlZmluZWRJbnRlcmZhY2VNZXRob2QKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBEZXByZWNhdGVkTWV0aG9kCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkTWV0aG9kQ2FsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZU1pZCgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkaW5zdGFuY2UgPSAoJHRoaXMtPnVud3JhcHBlZCA/PyAkdGhpcy0+dW53cmFwKCkpOwoKICAgICAgICByZXR1cm4gJGluc3RhbmNlLT5nZXROdW1iZXJDb252ZXJ0ZXIoKQogICAgICAgICAgICAtPmZyb21IZXgoCiAgICAgICAgICAgICAgICAkaW5zdGFuY2UtPmdldEZpZWxkcygpCiAgICAgICAgICAgICAgICAgICAgLT5nZXRUaW1lTWlkKCkKICAgICAgICAgICAgICAgICAgICAtPnRvU3RyaW5nKCkKICAgICAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRGaWVsZHMoKX0gdG8gZ2V0IGEKICAgICAqICAgICB7QHNlZSBGaWVsZHNJbnRlcmZhY2V9IGluc3RhbmNlLiBJZiBpdCBpcyBhIHtAc2VlIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2V9CiAgICAgKiAgICAgaW5zdGFuY2UsIHlvdSBtYXkgY2FsbCB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlOjpnZXRUaW1lc3RhbXAoKX0KICAgICAqICAgICBhbmQgdXNlIHRoZSBhcmJpdHJhcnktcHJlY2lzaW9uIG1hdGggbGlicmFyeSBvZiB5b3VyIGNob2ljZSB0bwogICAgICogICAgIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcgaW50ZWdlci4KICAgICAqCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgVW5kZWZpbmVkSW50ZXJmYWNlTWV0aG9kCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgRGVwcmVjYXRlZE1ldGhvZAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZE1ldGhvZENhbGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVzdGFtcCgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkaW5zdGFuY2UgPSAoJHRoaXMtPnVud3JhcHBlZCA/PyAkdGhpcy0+dW53cmFwKCkpOwogICAgICAgICRmaWVsZHMgPSAkaW5zdGFuY2UtPmdldEZpZWxkcygpOwoKICAgICAgICBpZiAoJGZpZWxkcy0+Z2V0VmVyc2lvbigpICE9PSAxKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbignTm90IGEgdGltZS1iYXNlZCBVVUlEJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGluc3RhbmNlLT5nZXROdW1iZXJDb252ZXJ0ZXIoKQogICAgICAgICAgICAtPmZyb21IZXgoJGZpZWxkcy0+Z2V0VGltZXN0YW1wKCktPnRvU3RyaW5nKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b1V1aWRWMSgpOiBVdWlkVjEKICAgIHsKICAgICAgICAkaW5zdGFuY2UgPSAoJHRoaXMtPnVud3JhcHBlZCA/PyAkdGhpcy0+dW53cmFwKCkpOwoKICAgICAgICBpZiAoJGluc3RhbmNlIGluc3RhbmNlb2YgVXVpZFYxKSB7CiAgICAgICAgICAgIHJldHVybiAkaW5zdGFuY2U7CiAgICAgICAgfQoKICAgICAgICBhc3NlcnQoJGluc3RhbmNlIGluc3RhbmNlb2YgVXVpZFY2KTsKCiAgICAgICAgcmV0dXJuICRpbnN0YW5jZS0+dG9VdWlkVjEoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9VdWlkVjYoKTogVXVpZFY2CiAgICB7CiAgICAgICAgJGluc3RhbmNlID0gKCR0aGlzLT51bndyYXBwZWQgPz8gJHRoaXMtPnVud3JhcCgpKTsKCiAgICAgICAgYXNzZXJ0KCRpbnN0YW5jZSBpbnN0YW5jZW9mIFV1aWRWNik7CgogICAgICAgIHJldHVybiAkaW5zdGFuY2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgSW1wdXJlTWV0aG9kQ2FsbCB0aGUgcmV0cmlldmFsIG9mIHRoZSBmYWN0b3J5IGlzIGEgY2xlYXIgdmlvbGF0aW9uIG9mIHB1cml0eSBoZXJlOiB0aGlzIGlzIGEKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtub3duIHBpdGZhbGwgb2YgdGhlIGRlc2lnbiBvZiB0aGlzIGxpYnJhcnksIHdoZXJlIGEgdmFsdWUgb2JqZWN0IGNvbnRhaW5zCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIG11dGFibGUgcmVmZXJlbmNlIHRvIGEgZmFjdG9yeS4gV2UgdXNlIGEgZml4ZWQgZmFjdG9yeSBoZXJlLCBzbyB0aGUgdmlvbGF0aW9uCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIG5vdCBoYXZlIHJlYWwtd29ybGQgZWZmZWN0cywgYXMgdGhpcyBvYmplY3QgaXMgb25seSBpbnN0YW50aWF0ZWQgd2l0aCB0aGUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgZmFjdG9yeSBzZXR0aW5ncy9mZWF0dXJlcy4KICAgICAqIEBwc2FsbS1zdXBwcmVzcyBJbmFjY2Vzc2libGVQcm9wZXJ0eSBwcm9wZXJ0eSB7QHNlZSAkdW53cmFwcGVkfSBpcyB1c2VkIGFzIGEgY2FjaGU6IHdlIGRvbid0IGV4cG9zZSBpdCB0byB0aGUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRzaWRlIHdvcmxkLCBzbyB3ZSBzaG91bGQgYmUgZmluZSBoZXJlLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHVud3JhcCgpOiBVdWlkSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51bndyYXBwZWQgPSAobmV3IFV1aWRGYWN0b3J5KCkpCiAgICAgICAgICAgIC0+ZnJvbVN0cmluZygkdGhpcy0+dXVpZCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Math/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Math/BrickMathCalculator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXE1hdGg7Cgp1c2UgQnJpY2tcTWF0aFxCaWdEZWNpbWFsOwp1c2UgQnJpY2tcTWF0aFxCaWdJbnRlZ2VyOwp1c2UgQnJpY2tcTWF0aFxFeGNlcHRpb25cTWF0aEV4Y2VwdGlvbjsKdXNlIEJyaWNrXE1hdGhcUm91bmRpbmdNb2RlIGFzIEJyaWNrTWF0aFJvdW5kaW5nOwp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFJhbXNleVxVdWlkXFR5cGVcRGVjaW1hbDsKdXNlIFJhbXNleVxVdWlkXFR5cGVcSGV4YWRlY2ltYWw7CnVzZSBSYW1zZXlcVXVpZFxUeXBlXEludGVnZXIgYXMgSW50ZWdlck9iamVjdDsKdXNlIFJhbXNleVxVdWlkXFR5cGVcTnVtYmVySW50ZXJmYWNlOwoKLyoqCiAqIEEgY2FsY3VsYXRvciB1c2luZyB0aGUgYnJpY2svbWF0aCBsaWJyYXJ5IGZvciBhcmJpdHJhcnktcHJlY2lzaW9uIGFyaXRobWV0aWMKICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KZmluYWwgY2xhc3MgQnJpY2tNYXRoQ2FsY3VsYXRvciBpbXBsZW1lbnRzIENhbGN1bGF0b3JJbnRlcmZhY2UKewogICAgcHJpdmF0ZSBjb25zdCBST1VORElOR19NT0RFX01BUCA9IFsKICAgICAgICBSb3VuZGluZ01vZGU6OlVOTkVDRVNTQVJZID0+IEJyaWNrTWF0aFJvdW5kaW5nOjpVTk5FQ0VTU0FSWSwKICAgICAgICBSb3VuZGluZ01vZGU6OlVQID0+IEJyaWNrTWF0aFJvdW5kaW5nOjpVUCwKICAgICAgICBSb3VuZGluZ01vZGU6OkRPV04gPT4gQnJpY2tNYXRoUm91bmRpbmc6OkRPV04sCiAgICAgICAgUm91bmRpbmdNb2RlOjpDRUlMSU5HID0+IEJyaWNrTWF0aFJvdW5kaW5nOjpDRUlMSU5HLAogICAgICAgIFJvdW5kaW5nTW9kZTo6RkxPT1IgPT4gQnJpY2tNYXRoUm91bmRpbmc6OkZMT09SLAogICAgICAgIFJvdW5kaW5nTW9kZTo6SEFMRl9VUCA9PiBCcmlja01hdGhSb3VuZGluZzo6SEFMRl9VUCwKICAgICAgICBSb3VuZGluZ01vZGU6OkhBTEZfRE9XTiA9PiBCcmlja01hdGhSb3VuZGluZzo6SEFMRl9ET1dOLAogICAgICAgIFJvdW5kaW5nTW9kZTo6SEFMRl9DRUlMSU5HID0+IEJyaWNrTWF0aFJvdW5kaW5nOjpIQUxGX0NFSUxJTkcsCiAgICAgICAgUm91bmRpbmdNb2RlOjpIQUxGX0ZMT09SID0+IEJyaWNrTWF0aFJvdW5kaW5nOjpIQUxGX0ZMT09SLAogICAgICAgIFJvdW5kaW5nTW9kZTo6SEFMRl9FVkVOID0+IEJyaWNrTWF0aFJvdW5kaW5nOjpIQUxGX0VWRU4sCiAgICBdOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoTnVtYmVySW50ZXJmYWNlICRhdWdlbmQsIE51bWJlckludGVyZmFjZSAuLi4kYWRkZW5kcyk6IE51bWJlckludGVyZmFjZQogICAgewogICAgICAgICRzdW0gPSBCaWdJbnRlZ2VyOjpvZigkYXVnZW5kLT50b1N0cmluZygpKTsKCiAgICAgICAgZm9yZWFjaCAoJGFkZGVuZHMgYXMgJGFkZGVuZCkgewogICAgICAgICAgICAkc3VtID0gJHN1bS0+cGx1cygkYWRkZW5kLT50b1N0cmluZygpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgSW50ZWdlck9iamVjdCgoc3RyaW5nKSAkc3VtKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc3VidHJhY3QoTnVtYmVySW50ZXJmYWNlICRtaW51ZW5kLCBOdW1iZXJJbnRlcmZhY2UgLi4uJHN1YnRyYWhlbmRzKTogTnVtYmVySW50ZXJmYWNlCiAgICB7CiAgICAgICAgJGRpZmZlcmVuY2UgPSBCaWdJbnRlZ2VyOjpvZigkbWludWVuZC0+dG9TdHJpbmcoKSk7CgogICAgICAgIGZvcmVhY2ggKCRzdWJ0cmFoZW5kcyBhcyAkc3VidHJhaGVuZCkgewogICAgICAgICAgICAkZGlmZmVyZW5jZSA9ICRkaWZmZXJlbmNlLT5taW51cygkc3VidHJhaGVuZC0+dG9TdHJpbmcoKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IEludGVnZXJPYmplY3QoKHN0cmluZykgJGRpZmZlcmVuY2UpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBtdWx0aXBseShOdW1iZXJJbnRlcmZhY2UgJG11bHRpcGxpY2FuZCwgTnVtYmVySW50ZXJmYWNlIC4uLiRtdWx0aXBsaWVycyk6IE51bWJlckludGVyZmFjZQogICAgewogICAgICAgICRwcm9kdWN0ID0gQmlnSW50ZWdlcjo6b2YoJG11bHRpcGxpY2FuZC0+dG9TdHJpbmcoKSk7CgogICAgICAgIGZvcmVhY2ggKCRtdWx0aXBsaWVycyBhcyAkbXVsdGlwbGllcikgewogICAgICAgICAgICAkcHJvZHVjdCA9ICRwcm9kdWN0LT5tdWx0aXBsaWVkQnkoJG11bHRpcGxpZXItPnRvU3RyaW5nKCkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyT2JqZWN0KChzdHJpbmcpICRwcm9kdWN0KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGl2aWRlKAogICAgICAgIGludCAkcm91bmRpbmdNb2RlLAogICAgICAgIGludCAkc2NhbGUsCiAgICAgICAgTnVtYmVySW50ZXJmYWNlICRkaXZpZGVuZCwKICAgICAgICBOdW1iZXJJbnRlcmZhY2UgLi4uJGRpdmlzb3JzCiAgICApOiBOdW1iZXJJbnRlcmZhY2UgewogICAgICAgICRicmlja1JvdW5kaW5nID0gJHRoaXMtPmdldEJyaWNrUm91bmRpbmdNb2RlKCRyb3VuZGluZ01vZGUpOwoKICAgICAgICAkcXVvdGllbnQgPSBCaWdEZWNpbWFsOjpvZigkZGl2aWRlbmQtPnRvU3RyaW5nKCkpOwoKICAgICAgICBmb3JlYWNoICgkZGl2aXNvcnMgYXMgJGRpdmlzb3IpIHsKICAgICAgICAgICAgJHF1b3RpZW50ID0gJHF1b3RpZW50LT5kaXZpZGVkQnkoJGRpdmlzb3ItPnRvU3RyaW5nKCksICRzY2FsZSwgJGJyaWNrUm91bmRpbmcpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRzY2FsZSA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gbmV3IEludGVnZXJPYmplY3QoKHN0cmluZykgJHF1b3RpZW50LT50b0JpZ0ludGVnZXIoKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IERlY2ltYWwoKHN0cmluZykgJHF1b3RpZW50KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZnJvbUJhc2Uoc3RyaW5nICR2YWx1ZSwgaW50ICRiYXNlKTogSW50ZWdlck9iamVjdAogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgSW50ZWdlck9iamVjdCgoc3RyaW5nKSBCaWdJbnRlZ2VyOjpmcm9tQmFzZSgkdmFsdWUsICRiYXNlKSk7CiAgICAgICAgfSBjYXRjaCAoTWF0aEV4Y2VwdGlvbiB8IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gJGV4Y2VwdGlvbikgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJGV4Y2VwdGlvbi0+Z2V0TWVzc2FnZSgpLAogICAgICAgICAgICAgICAgKGludCkgJGV4Y2VwdGlvbi0+Z2V0Q29kZSgpLAogICAgICAgICAgICAgICAgJGV4Y2VwdGlvbgogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9CYXNlKEludGVnZXJPYmplY3QgJHZhbHVlLCBpbnQgJGJhc2UpOiBzdHJpbmcKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICByZXR1cm4gQmlnSW50ZWdlcjo6b2YoJHZhbHVlLT50b1N0cmluZygpKS0+dG9CYXNlKCRiYXNlKTsKICAgICAgICB9IGNhdGNoIChNYXRoRXhjZXB0aW9uIHwgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiAkZXhjZXB0aW9uKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAkZXhjZXB0aW9uLT5nZXRNZXNzYWdlKCksCiAgICAgICAgICAgICAgICAoaW50KSAkZXhjZXB0aW9uLT5nZXRDb2RlKCksCiAgICAgICAgICAgICAgICAkZXhjZXB0aW9uCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b0hleGFkZWNpbWFsKEludGVnZXJPYmplY3QgJHZhbHVlKTogSGV4YWRlY2ltYWwKICAgIHsKICAgICAgICByZXR1cm4gbmV3IEhleGFkZWNpbWFsKCR0aGlzLT50b0Jhc2UoJHZhbHVlLCAxNikpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b0ludGVnZXIoSGV4YWRlY2ltYWwgJHZhbHVlKTogSW50ZWdlck9iamVjdAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZnJvbUJhc2UoJHZhbHVlLT50b1N0cmluZygpLCAxNik7CiAgICB9CgogICAgLyoqCiAgICAgKiBNYXBzIHJhbXNleS91dWlkIHJvdW5kaW5nIG1vZGVzIHRvIHRob3NlIHVzZWQgYnkgYnJpY2svbWF0aAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldEJyaWNrUm91bmRpbmdNb2RlKGludCAkcm91bmRpbmdNb2RlKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OlJPVU5ESU5HX01PREVfTUFQWyRyb3VuZGluZ01vZGVdID8/IDA7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Math/CalculatorInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXE1hdGg7Cgp1c2UgUmFtc2V5XFV1aWRcVHlwZVxIZXhhZGVjaW1hbDsKdXNlIFJhbXNleVxVdWlkXFR5cGVcSW50ZWdlciBhcyBJbnRlZ2VyT2JqZWN0Owp1c2UgUmFtc2V5XFV1aWRcVHlwZVxOdW1iZXJJbnRlcmZhY2U7CgovKioKICogQSBjYWxjdWxhdG9yIHBlcmZvcm1zIGFyaXRobWV0aWMgb3BlcmF0aW9ucyBvbiBudW1iZXJzCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmludGVyZmFjZSBDYWxjdWxhdG9ySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc3VtIG9mIGFsbCB0aGUgcHJvdmlkZWQgcGFyYW1ldGVycwogICAgICoKICAgICAqIEBwYXJhbSBOdW1iZXJJbnRlcmZhY2UgJGF1Z2VuZCBUaGUgZmlyc3QgYWRkZW5kICh0aGUgaW50ZWdlciBiZWluZyBhZGRlZCB0bykKICAgICAqIEBwYXJhbSBOdW1iZXJJbnRlcmZhY2UgLi4uJGFkZGVuZHMgVGhlIGFkZGl0aW9uYWwgaW50ZWdlcnMgdG8gYSBhZGQgdG8gdGhlIGF1Z2VuZAogICAgICoKICAgICAqIEByZXR1cm4gTnVtYmVySW50ZXJmYWNlIFRoZSBzdW0gb2YgYWxsIHRoZSBwYXJhbWV0ZXJzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoTnVtYmVySW50ZXJmYWNlICRhdWdlbmQsIE51bWJlckludGVyZmFjZSAuLi4kYWRkZW5kcyk6IE51bWJlckludGVyZmFjZTsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGRpZmZlcmVuY2Ugb2YgYWxsIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXJzCiAgICAgKgogICAgICogQHBhcmFtIE51bWJlckludGVyZmFjZSAkbWludWVuZCBUaGUgaW50ZWdlciBiZWluZyBzdWJ0cmFjdGVkIGZyb20KICAgICAqIEBwYXJhbSBOdW1iZXJJbnRlcmZhY2UgLi4uJHN1YnRyYWhlbmRzIFRoZSBpbnRlZ2VycyB0byBzdWJ0cmFjdCBmcm9tIHRoZSBtaW51ZW5kCiAgICAgKgogICAgICogQHJldHVybiBOdW1iZXJJbnRlcmZhY2UgVGhlIGRpZmZlcmVuY2UgYWZ0ZXIgc3VidHJhY3RpbmcgYWxsIHBhcmFtZXRlcnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN1YnRyYWN0KE51bWJlckludGVyZmFjZSAkbWludWVuZCwgTnVtYmVySW50ZXJmYWNlIC4uLiRzdWJ0cmFoZW5kcyk6IE51bWJlckludGVyZmFjZTsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHByb2R1Y3Qgb2YgYWxsIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXJzCiAgICAgKgogICAgICogQHBhcmFtIE51bWJlckludGVyZmFjZSAkbXVsdGlwbGljYW5kIFRoZSBpbnRlZ2VyIHRvIGJlIG11bHRpcGxpZWQKICAgICAqIEBwYXJhbSBOdW1iZXJJbnRlcmZhY2UgLi4uJG11bHRpcGxpZXJzIFRoZSBmYWN0b3JzIGJ5IHdoaWNoIHRvIG11bHRpcGx5IHRoZSBtdWx0aXBsaWNhbmQKICAgICAqCiAgICAgKiBAcmV0dXJuIE51bWJlckludGVyZmFjZSBUaGUgcHJvZHVjdCBvZiBtdWx0aXBseWluZyBhbGwgdGhlIHByb3ZpZGVkIHBhcmFtZXRlcnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG11bHRpcGx5KE51bWJlckludGVyZmFjZSAkbXVsdGlwbGljYW5kLCBOdW1iZXJJbnRlcmZhY2UgLi4uJG11bHRpcGxpZXJzKTogTnVtYmVySW50ZXJmYWNlOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcXVvdGllbnQgb2YgdGhlIHByb3ZpZGVkIHBhcmFtZXRlcnMgZGl2aWRlZCBsZWZ0LXRvLXJpZ2h0CiAgICAgKgogICAgICogQHBhcmFtIGludCAkcm91bmRpbmdNb2RlIFRoZSBSb3VuZGluZ01vZGUgY29uc3RhbnQgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbgogICAgICogQHBhcmFtIGludCAkc2NhbGUgVGhlIHNjYWxlIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24KICAgICAqIEBwYXJhbSBOdW1iZXJJbnRlcmZhY2UgJGRpdmlkZW5kIFRoZSBpbnRlZ2VyIHRvIGJlIGRpdmlkZWQKICAgICAqIEBwYXJhbSBOdW1iZXJJbnRlcmZhY2UgLi4uJGRpdmlzb3JzIFRoZSBpbnRlZ2VycyB0byBkaXZpZGUgJGRpdmlkZW5kIGJ5LCBpbgogICAgICogICAgIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgZGl2aXNpb24gb3BlcmF0aW9ucyBzaG91bGQgdGFrZSBwbGFjZQogICAgICogICAgIChsZWZ0LXRvLXJpZ2h0KQogICAgICoKICAgICAqIEByZXR1cm4gTnVtYmVySW50ZXJmYWNlIFRoZSBxdW90aWVudCBvZiBkaXZpZGluZyB0aGUgcHJvdmlkZWQgcGFyYW1ldGVycyBsZWZ0LXRvLXJpZ2h0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaXZpZGUoCiAgICAgICAgaW50ICRyb3VuZGluZ01vZGUsCiAgICAgICAgaW50ICRzY2FsZSwKICAgICAgICBOdW1iZXJJbnRlcmZhY2UgJGRpdmlkZW5kLAogICAgICAgIE51bWJlckludGVyZmFjZSAuLi4kZGl2aXNvcnMKICAgICk6IE51bWJlckludGVyZmFjZTsKCiAgICAvKioKICAgICAqIENvbnZlcnRzIGEgdmFsdWUgZnJvbSBhbiBhcmJpdHJhcnkgYmFzZSB0byBhIGJhc2UtMTAgaW50ZWdlciB2YWx1ZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0CiAgICAgKiBAcGFyYW0gaW50ICRiYXNlIFRoZSBiYXNlIHRvIGNvbnZlcnQgZnJvbSAoaS5lLiwgMiwgMTYsIDMyLCBldGMuKQogICAgICoKICAgICAqIEByZXR1cm4gSW50ZWdlck9iamVjdCBUaGUgYmFzZS0xMCBpbnRlZ2VyIHZhbHVlIG9mIHRoZSBjb252ZXJ0ZWQgdmFsdWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZyb21CYXNlKHN0cmluZyAkdmFsdWUsIGludCAkYmFzZSk6IEludGVnZXJPYmplY3Q7CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyBhIGJhc2UtMTAgaW50ZWdlciB2YWx1ZSB0byBhbiBhcmJpdHJhcnkgYmFzZQogICAgICoKICAgICAqIEBwYXJhbSBJbnRlZ2VyT2JqZWN0ICR2YWx1ZSBUaGUgaW50ZWdlciB2YWx1ZSB0byBjb252ZXJ0CiAgICAgKiBAcGFyYW0gaW50ICRiYXNlIFRoZSBiYXNlIHRvIGNvbnZlcnQgdG8gKGkuZS4sIDIsIDE2LCAzMiwgZXRjLikKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgdmFsdWUgcmVwcmVzZW50ZWQgaW4gdGhlIHNwZWNpZmllZCBiYXNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b0Jhc2UoSW50ZWdlck9iamVjdCAkdmFsdWUsIGludCAkYmFzZSk6IHN0cmluZzsKCiAgICAvKioKICAgICAqIENvbnZlcnRzIGFuIEludGVnZXIgaW5zdGFuY2UgdG8gYSBIZXhhZGVjaW1hbCBpbnN0YW5jZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9IZXhhZGVjaW1hbChJbnRlZ2VyT2JqZWN0ICR2YWx1ZSk6IEhleGFkZWNpbWFsOwoKICAgIC8qKgogICAgICogQ29udmVydHMgYSBIZXhhZGVjaW1hbCBpbnN0YW5jZSB0byBhbiBJbnRlZ2VyIGluc3RhbmNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b0ludGVnZXIoSGV4YWRlY2ltYWwgJHZhbHVlKTogSW50ZWdlck9iamVjdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Math/RoundingMode.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgd2FzIG9yaWdpbmFsbHkgcGFydCBvZiBicmljay9tYXRoCiAqCiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50IEJlbmphbWluIE1vcmVsCiAqCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwogKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwogKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKgogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgogKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KICoKICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQogKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCiAqIFNPRlRXQVJFLgogKgogKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aCBicmljay9tYXRoIGF0IEdpdEh1YgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXE1hdGg7CgovKioKICogU3BlY2lmaWVzIGEgcm91bmRpbmcgYmVoYXZpb3IgZm9yIG51bWVyaWNhbCBvcGVyYXRpb25zIGNhcGFibGUgb2YgZGlzY2FyZGluZwogKiBwcmVjaXNpb24uCiAqCiAqIEVhY2ggcm91bmRpbmcgbW9kZSBpbmRpY2F0ZXMgaG93IHRoZSBsZWFzdCBzaWduaWZpY2FudCByZXR1cm5lZCBkaWdpdCBvZiBhCiAqIHJvdW5kZWQgcmVzdWx0IGlzIHRvIGJlIGNhbGN1bGF0ZWQuIElmIGZld2VyIGRpZ2l0cyBhcmUgcmV0dXJuZWQgdGhhbiB0aGUKICogZGlnaXRzIG5lZWRlZCB0byByZXByZXNlbnQgdGhlIGV4YWN0IG51bWVyaWNhbCByZXN1bHQsIHRoZSBkaXNjYXJkZWQgZGlnaXRzCiAqIHdpbGwgYmUgcmVmZXJyZWQgdG8gYXMgdGhlIGRpc2NhcmRlZCBmcmFjdGlvbiByZWdhcmRsZXNzIHRoZSBkaWdpdHMnCiAqIGNvbnRyaWJ1dGlvbiB0byB0aGUgdmFsdWUgb2YgdGhlIG51bWJlci4gSW4gb3RoZXIgd29yZHMsIGNvbnNpZGVyZWQgYXMgYQogKiBudW1lcmljYWwgdmFsdWUsIHRoZSBkaXNjYXJkZWQgZnJhY3Rpb24gY291bGQgaGF2ZSBhbiBhYnNvbHV0ZSB2YWx1ZSBncmVhdGVyCiAqIHRoYW4gb25lLgogKi8KZmluYWwgY2xhc3MgUm91bmRpbmdNb2RlCnsKICAgIC8qKgogICAgICogUHJpdmF0ZSBjb25zdHJ1Y3Rvci4gVGhpcyBjbGFzcyBpcyBub3QgaW5zdGFudGlhYmxlLgogICAgICoKICAgICAqIEBjb2RlQ292ZXJhZ2VJZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnRzIHRoYXQgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gaGFzIGFuIGV4YWN0IHJlc3VsdCwgaGVuY2Ugbm8KICAgICAqIHJvdW5kaW5nIGlzIG5lY2Vzc2FyeS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFVOTkVDRVNTQVJZID0gMDsKCiAgICAvKioKICAgICAqIFJvdW5kcyBhd2F5IGZyb20gemVyby4KICAgICAqCiAgICAgKiBBbHdheXMgaW5jcmVtZW50cyB0aGUgZGlnaXQgcHJpb3IgdG8gYSBub256ZXJvIGRpc2NhcmRlZCBmcmFjdGlvbi4KICAgICAqIE5vdGUgdGhhdCB0aGlzIHJvdW5kaW5nIG1vZGUgbmV2ZXIgZGVjcmVhc2VzIHRoZSBtYWduaXR1ZGUgb2YgdGhlCiAgICAgKiBjYWxjdWxhdGVkIHZhbHVlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgVVAgPSAxOwoKICAgIC8qKgogICAgICogUm91bmRzIHRvd2FyZHMgemVyby4KICAgICAqCiAgICAgKiBOZXZlciBpbmNyZW1lbnRzIHRoZSBkaWdpdCBwcmlvciB0byBhIGRpc2NhcmRlZCBmcmFjdGlvbiAoaS5lLiwKICAgICAqIHRydW5jYXRlcykuIE5vdGUgdGhhdCB0aGlzIHJvdW5kaW5nIG1vZGUgbmV2ZXIgaW5jcmVhc2VzIHRoZSBtYWduaXR1ZGUgb2YKICAgICAqIHRoZSBjYWxjdWxhdGVkIHZhbHVlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgRE9XTiA9IDI7CgogICAgLyoqCiAgICAgKiBSb3VuZHMgdG93YXJkcyBwb3NpdGl2ZSBpbmZpbml0eS4KICAgICAqCiAgICAgKiBJZiB0aGUgcmVzdWx0IGlzIHBvc2l0aXZlLCBiZWhhdmVzIGFzIGZvciBVUDsgaWYgbmVnYXRpdmUsIGJlaGF2ZXMgYXMgZm9yCiAgICAgKiBET1dOLiBOb3RlIHRoYXQgdGhpcyByb3VuZGluZyBtb2RlIG5ldmVyIGRlY3JlYXNlcyB0aGUgY2FsY3VsYXRlZCB2YWx1ZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IENFSUxJTkcgPSAzOwoKICAgIC8qKgogICAgICogUm91bmRzIHRvd2FyZHMgbmVnYXRpdmUgaW5maW5pdHkuCiAgICAgKgogICAgICogSWYgdGhlIHJlc3VsdCBpcyBwb3NpdGl2ZSwgYmVoYXZlIGFzIGZvciBET1dOOyBpZiBuZWdhdGl2ZSwgYmVoYXZlIGFzIGZvcgogICAgICogVVAuIE5vdGUgdGhhdCB0aGlzIHJvdW5kaW5nIG1vZGUgbmV2ZXIgaW5jcmVhc2VzIHRoZSBjYWxjdWxhdGVkIHZhbHVlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgRkxPT1IgPSA0OwoKICAgIC8qKgogICAgICogUm91bmRzIHRvd2FyZHMgIm5lYXJlc3QgbmVpZ2hib3IiIHVubGVzcyBib3RoIG5laWdoYm9ycyBhcmUgZXF1aWRpc3RhbnQsCiAgICAgKiBpbiB3aGljaCBjYXNlIHJvdW5kIHVwLgogICAgICoKICAgICAqIEJlaGF2ZXMgYXMgZm9yIFVQIGlmIHRoZSBkaXNjYXJkZWQgZnJhY3Rpb24gaXMgPj0gMC41OyBvdGhlcndpc2UsIGJlaGF2ZXMKICAgICAqIGFzIGZvciBET1dOLiBOb3RlIHRoYXQgdGhpcyBpcyB0aGUgcm91bmRpbmcgbW9kZSBjb21tb25seSB0YXVnaHQgYXQKICAgICAqIHNjaG9vbC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEhBTEZfVVAgPSA1OwoKICAgIC8qKgogICAgICogUm91bmRzIHRvd2FyZHMgIm5lYXJlc3QgbmVpZ2hib3IiIHVubGVzcyBib3RoIG5laWdoYm9ycyBhcmUgZXF1aWRpc3RhbnQsCiAgICAgKiBpbiB3aGljaCBjYXNlIHJvdW5kIGRvd24uCiAgICAgKgogICAgICogQmVoYXZlcyBhcyBmb3IgVVAgaWYgdGhlIGRpc2NhcmRlZCBmcmFjdGlvbiBpcyA+IDAuNTsgb3RoZXJ3aXNlLCBiZWhhdmVzCiAgICAgKiBhcyBmb3IgRE9XTi4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEhBTEZfRE9XTiA9IDY7CgogICAgLyoqCiAgICAgKiBSb3VuZHMgdG93YXJkcyAibmVhcmVzdCBuZWlnaGJvciIgdW5sZXNzIGJvdGggbmVpZ2hib3JzIGFyZSBlcXVpZGlzdGFudCwKICAgICAqIGluIHdoaWNoIGNhc2Ugcm91bmQgdG93YXJkcyBwb3NpdGl2ZSBpbmZpbml0eS4KICAgICAqCiAgICAgKiBJZiB0aGUgcmVzdWx0IGlzIHBvc2l0aXZlLCBiZWhhdmVzIGFzIGZvciBIQUxGX1VQOyBpZiBuZWdhdGl2ZSwgYmVoYXZlcwogICAgICogYXMgZm9yIEhBTEZfRE9XTi4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEhBTEZfQ0VJTElORyA9IDc7CgogICAgLyoqCiAgICAgKiBSb3VuZHMgdG93YXJkcyAibmVhcmVzdCBuZWlnaGJvciIgdW5sZXNzIGJvdGggbmVpZ2hib3JzIGFyZSBlcXVpZGlzdGFudCwKICAgICAqIGluIHdoaWNoIGNhc2Ugcm91bmQgdG93YXJkcyBuZWdhdGl2ZSBpbmZpbml0eS4KICAgICAqCiAgICAgKiBJZiB0aGUgcmVzdWx0IGlzIHBvc2l0aXZlLCBiZWhhdmVzIGFzIGZvciBIQUxGX0RPV047IGlmIG5lZ2F0aXZlLCBiZWhhdmVzCiAgICAgKiBhcyBmb3IgSEFMRl9VUC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEhBTEZfRkxPT1IgPSA4OwoKICAgIC8qKgogICAgICogUm91bmRzIHRvd2FyZHMgdGhlICJuZWFyZXN0IG5laWdoYm9yIiB1bmxlc3MgYm90aCBuZWlnaGJvcnMgYXJlCiAgICAgKiBlcXVpZGlzdGFudCwgaW4gd2hpY2ggY2FzZSByb3VuZHMgdG93YXJkcyB0aGUgZXZlbiBuZWlnaGJvci4KICAgICAqCiAgICAgKiBCZWhhdmVzIGFzIGZvciBIQUxGX1VQIGlmIHRoZSBkaWdpdCB0byB0aGUgbGVmdCBvZiB0aGUgZGlzY2FyZGVkIGZyYWN0aW9uCiAgICAgKiBpcyBvZGQ7IGJlaGF2ZXMgYXMgZm9yIEhBTEZfRE9XTiBpZiBpdCdzIGV2ZW4uCiAgICAgKgogICAgICogTm90ZSB0aGF0IHRoaXMgaXMgdGhlIHJvdW5kaW5nIG1vZGUgdGhhdCBzdGF0aXN0aWNhbGx5IG1pbmltaXplcwogICAgICogY3VtdWxhdGl2ZSBlcnJvciB3aGVuIGFwcGxpZWQgcmVwZWF0ZWRseSBvdmVyIGEgc2VxdWVuY2Ugb2YgY2FsY3VsYXRpb25zLgogICAgICogSXQgaXMgc29tZXRpbWVzIGtub3duIGFzICJCYW5rZXIncyByb3VuZGluZyIsIGFuZCBpcyBjaGllZmx5IHVzZWQgaW4gdGhlCiAgICAgKiBVU0EuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBIQUxGX0VWRU4gPSA5Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Nonstandard/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Nonstandard/Fields.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXE5vbnN0YW5kYXJkOwoKdXNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBSYW1zZXlcVXVpZFxGaWVsZHNcU2VyaWFsaXphYmxlRmllbGRzVHJhaXQ7CnVzZSBSYW1zZXlcVXVpZFxSZmM0MTIyXEZpZWxkc0ludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXFJmYzQxMjJcVmFyaWFudFRyYWl0Owp1c2UgUmFtc2V5XFV1aWRcVHlwZVxIZXhhZGVjaW1hbDsKCnVzZSBmdW5jdGlvbiBiaW4yaGV4Owp1c2UgZnVuY3Rpb24gZGVjaGV4Owp1c2UgZnVuY3Rpb24gaGV4ZGVjOwp1c2UgZnVuY3Rpb24gc3ByaW50ZjsKdXNlIGZ1bmN0aW9uIHN0cl9wYWQ7CnVzZSBmdW5jdGlvbiBzdHJsZW47CnVzZSBmdW5jdGlvbiBzdWJzdHI7Cgp1c2UgY29uc3QgU1RSX1BBRF9MRUZUOwoKLyoqCiAqIE5vbnN0YW5kYXJkIFVVSUQgZmllbGRzIGRvIG5vdCBjb25mb3JtIHRvIHRoZSBSRkMgNDEyMiBzdGFuZGFyZAogKgogKiBTaW5jZSBzb21lIHN5c3RlbXMgbWF5IGNyZWF0ZSBub25zdGFuZGFyZCBVVUlEcywgdGhpcyBpbXBsZW1lbnRzIHRoZQogKiBSZmM0MTIyXEZpZWxkc0ludGVyZmFjZSwgc28gdGhhdCBmdW5jdGlvbmFsaXR5IG9mIGEgbm9uc3RhbmRhcmQgVVVJRCBpcyBub3QKICogZGVncmFkZWQsIGluIHRoZSBldmVudCB0aGVzZSBVVUlEcyBhcmUgZXhwZWN0ZWQgdG8gY29udGFpbiBSRkMgNDEyMiBmaWVsZHMuCiAqCiAqIEludGVybmFsbHksIHRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgZmllbGRzIHRvZ2V0aGVyIGFzIGEgMTYtYnl0ZSBiaW5hcnkKICogc3RyaW5nLgogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpmaW5hbCBjbGFzcyBGaWVsZHMgaW1wbGVtZW50cyBGaWVsZHNJbnRlcmZhY2UKewogICAgdXNlIFNlcmlhbGl6YWJsZUZpZWxkc1RyYWl0OwogICAgdXNlIFZhcmlhbnRUcmFpdDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJGJ5dGVzOwoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkYnl0ZXMgQSAxNi1ieXRlIGJpbmFyeSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBVVUlECiAgICAgKgogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIGJ5dGUgc3RyaW5nIGlzIG5vdCBleGFjdGx5IDE2IGJ5dGVzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJGJ5dGVzKQogICAgewogICAgICAgIGlmIChzdHJsZW4oJGJ5dGVzKSAhPT0gMTYpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdUaGUgYnl0ZSBzdHJpbmcgbXVzdCBiZSAxNiBieXRlcyBsb25nOyAnCiAgICAgICAgICAgICAgICAuICdyZWNlaXZlZCAnIC4gc3RybGVuKCRieXRlcykgLiAnIGJ5dGVzJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmJ5dGVzID0gJGJ5dGVzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCeXRlcygpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmJ5dGVzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbG9ja1NlcSgpOiBIZXhhZGVjaW1hbAogICAgewogICAgICAgICRjbG9ja1NlcSA9IGhleGRlYyhiaW4yaGV4KHN1YnN0cigkdGhpcy0+Ynl0ZXMsIDgsIDIpKSkgJiAweDNmZmY7CgogICAgICAgIHJldHVybiBuZXcgSGV4YWRlY2ltYWwoc3RyX3BhZChkZWNoZXgoJGNsb2NrU2VxKSwgNCwgJzAnLCBTVFJfUEFEX0xFRlQpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xvY2tTZXFIaUFuZFJlc2VydmVkKCk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBIZXhhZGVjaW1hbChiaW4yaGV4KHN1YnN0cigkdGhpcy0+Ynl0ZXMsIDgsIDEpKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENsb2NrU2VxTG93KCk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBIZXhhZGVjaW1hbChiaW4yaGV4KHN1YnN0cigkdGhpcy0+Ynl0ZXMsIDksIDEpKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vZGUoKTogSGV4YWRlY2ltYWwKICAgIHsKICAgICAgICByZXR1cm4gbmV3IEhleGFkZWNpbWFsKGJpbjJoZXgoc3Vic3RyKCR0aGlzLT5ieXRlcywgMTApKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVIaUFuZFZlcnNpb24oKTogSGV4YWRlY2ltYWwKICAgIHsKICAgICAgICByZXR1cm4gbmV3IEhleGFkZWNpbWFsKGJpbjJoZXgoc3Vic3RyKCR0aGlzLT5ieXRlcywgNiwgMikpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZUxvdygpOiBIZXhhZGVjaW1hbAogICAgewogICAgICAgIHJldHVybiBuZXcgSGV4YWRlY2ltYWwoYmluMmhleChzdWJzdHIoJHRoaXMtPmJ5dGVzLCAwLCA0KSkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lTWlkKCk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBIZXhhZGVjaW1hbChiaW4yaGV4KHN1YnN0cigkdGhpcy0+Ynl0ZXMsIDQsIDIpKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVzdGFtcCgpOiBIZXhhZGVjaW1hbAogICAgewogICAgICAgIHJldHVybiBuZXcgSGV4YWRlY2ltYWwoc3ByaW50ZigKICAgICAgICAgICAgJyUwM3glMDRzJTA4cycsCiAgICAgICAgICAgIGhleGRlYygkdGhpcy0+Z2V0VGltZUhpQW5kVmVyc2lvbigpLT50b1N0cmluZygpKSAmIDB4MGZmZiwKICAgICAgICAgICAgJHRoaXMtPmdldFRpbWVNaWQoKS0+dG9TdHJpbmcoKSwKICAgICAgICAgICAgJHRoaXMtPmdldFRpbWVMb3coKS0+dG9TdHJpbmcoKQogICAgICAgICkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWZXJzaW9uKCk6ID9pbnQKICAgIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNOaWwoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Nonstandard/Uuid.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXE5vbnN0YW5kYXJkOwoKdXNlIFJhbXNleVxVdWlkXENvZGVjXENvZGVjSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXE51bWJlckNvbnZlcnRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcVXVpZCBhcyBCYXNlVXVpZDsKCi8qKgogKiBOb25zdGFuZGFyZFxVdWlkIGlzIGEgVVVJRCB0aGF0IGRvZXNuJ3QgY29uZm9ybSB0byBSRkMgNDEyMgogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpmaW5hbCBjbGFzcyBVdWlkIGV4dGVuZHMgQmFzZVV1aWQKewogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgIEZpZWxkcyAkZmllbGRzLAogICAgICAgIE51bWJlckNvbnZlcnRlckludGVyZmFjZSAkbnVtYmVyQ29udmVydGVyLAogICAgICAgIENvZGVjSW50ZXJmYWNlICRjb2RlYywKICAgICAgICBUaW1lQ29udmVydGVySW50ZXJmYWNlICR0aW1lQ29udmVydGVyCiAgICApIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRmaWVsZHMsICRudW1iZXJDb252ZXJ0ZXIsICRjb2RlYywgJHRpbWVDb252ZXJ0ZXIpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Nonstandard/UuidBuilder.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXE5vbnN0YW5kYXJkOwoKdXNlIFJhbXNleVxVdWlkXEJ1aWxkZXJcVXVpZEJ1aWxkZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxDb2RlY1xDb2RlY0ludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxOdW1iZXJDb252ZXJ0ZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcVGltZUNvbnZlcnRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvblxVbmFibGVUb0J1aWxkVXVpZEV4Y2VwdGlvbjsKdXNlIFJhbXNleVxVdWlkXFV1aWRJbnRlcmZhY2U7CnVzZSBUaHJvd2FibGU7CgovKioKICogTm9uc3RhbmRhcmRcVXVpZEJ1aWxkZXIgYnVpbGRzIGluc3RhbmNlcyBvZiBOb25zdGFuZGFyZFxVdWlkCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmNsYXNzIFV1aWRCdWlsZGVyIGltcGxlbWVudHMgVXVpZEJ1aWxkZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAdmFyIE51bWJlckNvbnZlcnRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRudW1iZXJDb252ZXJ0ZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkdGltZUNvbnZlcnRlcjsKCiAgICAvKioKICAgICAqIEBwYXJhbSBOdW1iZXJDb252ZXJ0ZXJJbnRlcmZhY2UgJG51bWJlckNvbnZlcnRlciBUaGUgbnVtYmVyIGNvbnZlcnRlciB0bwogICAgICogICAgIHVzZSB3aGVuIGNvbnN0cnVjdGluZyB0aGUgTm9uc3RhbmRhcmRcVXVpZAogICAgICogQHBhcmFtIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UgJHRpbWVDb252ZXJ0ZXIgVGhlIHRpbWUgY29udmVydGVyIHRvIHVzZQogICAgICogICAgIGZvciBjb252ZXJ0aW5nIHRpbWVzdGFtcHMgZXh0cmFjdGVkIGZyb20gYSBVVUlEIHRvIFVuaXggdGltZXN0YW1wcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgTnVtYmVyQ29udmVydGVySW50ZXJmYWNlICRudW1iZXJDb252ZXJ0ZXIsCiAgICAgICAgVGltZUNvbnZlcnRlckludGVyZmFjZSAkdGltZUNvbnZlcnRlcgogICAgKSB7CiAgICAgICAgJHRoaXMtPm51bWJlckNvbnZlcnRlciA9ICRudW1iZXJDb252ZXJ0ZXI7CiAgICAgICAgJHRoaXMtPnRpbWVDb252ZXJ0ZXIgPSAkdGltZUNvbnZlcnRlcjsKICAgIH0KCiAgICAvKioKICAgICAqIEJ1aWxkcyBhbmQgcmV0dXJucyBhIE5vbnN0YW5kYXJkXFV1aWQKICAgICAqCiAgICAgKiBAcGFyYW0gQ29kZWNJbnRlcmZhY2UgJGNvZGVjIFRoZSBjb2RlYyB0byB1c2UgZm9yIGJ1aWxkaW5nIHRoaXMgaW5zdGFuY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJ5dGVzIFRoZSBieXRlIHN0cmluZyBmcm9tIHdoaWNoIHRvIGNvbnN0cnVjdCBhIFVVSUQKICAgICAqCiAgICAgKiBAcmV0dXJuIFV1aWQgVGhlIE5vbnN0YW5kYXJkXFV1aWRCdWlsZGVyIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YKICAgICAqICAgICBOb25zdGFuZGFyZFxVdWlkCiAgICAgKgogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJ1aWxkKENvZGVjSW50ZXJmYWNlICRjb2RlYywgc3RyaW5nICRieXRlcyk6IFV1aWRJbnRlcmZhY2UKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICByZXR1cm4gbmV3IFV1aWQoCiAgICAgICAgICAgICAgICAkdGhpcy0+YnVpbGRGaWVsZHMoJGJ5dGVzKSwKICAgICAgICAgICAgICAgICR0aGlzLT5udW1iZXJDb252ZXJ0ZXIsCiAgICAgICAgICAgICAgICAkY29kZWMsCiAgICAgICAgICAgICAgICAkdGhpcy0+dGltZUNvbnZlcnRlcgogICAgICAgICAgICApOwogICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSAkZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVW5hYmxlVG9CdWlsZFV1aWRFeGNlcHRpb24oJGUtPmdldE1lc3NhZ2UoKSwgKGludCkgJGUtPmdldENvZGUoKSwgJGUpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFByb3h5IG1ldGhvZCB0byBhbGxvdyBpbmplY3RpbmcgYSBtb2NrLCBmb3IgdGVzdGluZwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYnVpbGRGaWVsZHMoc3RyaW5nICRieXRlcyk6IEZpZWxkcwogICAgewogICAgICAgIHJldHVybiBuZXcgRmllbGRzKCRieXRlcyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Nonstandard/UuidV6.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXE5vbnN0YW5kYXJkOwoKdXNlIERhdGVUaW1lSW1tdXRhYmxlOwp1c2UgRGF0ZVRpbWVJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxDb2RlY1xDb2RlY0ludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxOdW1iZXJDb252ZXJ0ZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcVGltZUNvbnZlcnRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvblxEYXRlVGltZUV4Y2VwdGlvbjsKdXNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBSYW1zZXlcVXVpZFxMYXp5XExhenlVdWlkRnJvbVN0cmluZzsKdXNlIFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlIGFzIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxSZmM0MTIyXFV1aWRJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxSZmM0MTIyXFV1aWRWMTsKdXNlIFJhbXNleVxVdWlkXFV1aWQ7CnVzZSBUaHJvd2FibGU7Cgp1c2UgZnVuY3Rpb24gaGV4MmJpbjsKdXNlIGZ1bmN0aW9uIHN0cl9wYWQ7CnVzZSBmdW5jdGlvbiBzdWJzdHI7Cgp1c2UgY29uc3QgU1RSX1BBRF9MRUZUOwoKLyoqCiAqIE9yZGVyZWQtdGltZSwgb3IgdmVyc2lvbiA2LCBVVUlEcyBpbmNsdWRlIHRpbWVzdGFtcCwgY2xvY2sgc2VxdWVuY2UsIGFuZCBub2RlCiAqIHZhbHVlcyB0aGF0IGFyZSBjb21iaW5lZCBpbnRvIGEgMTI4LWJpdCB1bnNpZ25lZCBpbnRlZ2VyCiAqCiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkNi91dWlkNi1pZXRmLWRyYWZ0IFVVSUQgdmVyc2lvbiA2IElFVEYgZHJhZnQKICogQGxpbmsgaHR0cDovL2doLnBlYWJvZHkuaW8vdXVpZHY2LyAiVmVyc2lvbiA2IiBVVUlEcwogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpmaW5hbCBjbGFzcyBVdWlkVjYgZXh0ZW5kcyBVdWlkIGltcGxlbWVudHMgVXVpZEludGVyZmFjZQp7CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSB2ZXJzaW9uIDYgKHRpbWUtYmFzZWQpIFVVSUQKICAgICAqCiAgICAgKiBAcGFyYW0gUmZjNDEyMkZpZWxkc0ludGVyZmFjZSAkZmllbGRzIFRoZSBmaWVsZHMgZnJvbSB3aGljaCB0byBjb25zdHJ1Y3QgYSBVVUlECiAgICAgKiBAcGFyYW0gTnVtYmVyQ29udmVydGVySW50ZXJmYWNlICRudW1iZXJDb252ZXJ0ZXIgVGhlIG51bWJlciBjb252ZXJ0ZXIgdG8gdXNlCiAgICAgKiAgICAgZm9yIGNvbnZlcnRpbmcgaGV4IHZhbHVlcyB0by9mcm9tIGludGVnZXJzCiAgICAgKiBAcGFyYW0gQ29kZWNJbnRlcmZhY2UgJGNvZGVjIFRoZSBjb2RlYyB0byB1c2Ugd2hlbiBlbmNvZGluZyBvciBkZWNvZGluZwogICAgICogICAgIFVVSUQgc3RyaW5ncwogICAgICogQHBhcmFtIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UgJHRpbWVDb252ZXJ0ZXIgVGhlIHRpbWUgY29udmVydGVyIHRvIHVzZQogICAgICogICAgIGZvciBjb252ZXJ0aW5nIHRpbWVzdGFtcHMgZXh0cmFjdGVkIGZyb20gYSBVVUlEIHRvIHVuaXggdGltZXN0YW1wcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgUmZjNDEyMkZpZWxkc0ludGVyZmFjZSAkZmllbGRzLAogICAgICAgIE51bWJlckNvbnZlcnRlckludGVyZmFjZSAkbnVtYmVyQ29udmVydGVyLAogICAgICAgIENvZGVjSW50ZXJmYWNlICRjb2RlYywKICAgICAgICBUaW1lQ29udmVydGVySW50ZXJmYWNlICR0aW1lQ29udmVydGVyCiAgICApIHsKICAgICAgICBpZiAoJGZpZWxkcy0+Z2V0VmVyc2lvbigpICE9PSBVdWlkOjpVVUlEX1RZUEVfUEVBQk9EWSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0ZpZWxkcyB1c2VkIHRvIGNyZWF0ZSBhIFV1aWRWNiBtdXN0IHJlcHJlc2VudCBhICcKICAgICAgICAgICAgICAgIC4gJ3ZlcnNpb24gNiAob3JkZXJlZC10aW1lKSBVVUlEJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkZmllbGRzLCAkbnVtYmVyQ29udmVydGVyLCAkY29kZWMsICR0aW1lQ29udmVydGVyKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBEYXRlVGltZUludGVyZmFjZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSB0aW1lc3RhbXAgYXNzb2NpYXRlZAogICAgICogd2l0aCB0aGUgVVVJRAogICAgICoKICAgICAqIEByZXR1cm4gRGF0ZVRpbWVJbW11dGFibGUgQSBQSFAgRGF0ZVRpbWVJbW11dGFibGUgaW5zdGFuY2UgcmVwcmVzZW50aW5nCiAgICAgKiAgICAgdGhlIHRpbWVzdGFtcCBvZiBhIHZlcnNpb24gNiBVVUlECiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREYXRlVGltZSgpOiBEYXRlVGltZUludGVyZmFjZQogICAgewogICAgICAgICR0aW1lID0gJHRoaXMtPnRpbWVDb252ZXJ0ZXItPmNvbnZlcnRUaW1lKCR0aGlzLT5maWVsZHMtPmdldFRpbWVzdGFtcCgpKTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlVGltZUltbXV0YWJsZSgKICAgICAgICAgICAgICAgICdAJwogICAgICAgICAgICAgICAgLiAkdGltZS0+Z2V0U2Vjb25kcygpLT50b1N0cmluZygpCiAgICAgICAgICAgICAgICAuICcuJwogICAgICAgICAgICAgICAgLiBzdHJfcGFkKCR0aW1lLT5nZXRNaWNyb3NlY29uZHMoKS0+dG9TdHJpbmcoKSwgNiwgJzAnLCBTVFJfUEFEX0xFRlQpCiAgICAgICAgICAgICk7CiAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBEYXRlVGltZUV4Y2VwdGlvbigkZS0+Z2V0TWVzc2FnZSgpLCAoaW50KSAkZS0+Z2V0Q29kZSgpLCAkZSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydHMgdGhpcyBVVUlEIGludG8gYW4gaW5zdGFuY2Ugb2YgYSB2ZXJzaW9uIDEgVVVJRAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9VdWlkVjEoKTogVXVpZFYxCiAgICB7CiAgICAgICAgJGhleCA9ICR0aGlzLT5nZXRIZXgoKS0+dG9TdHJpbmcoKTsKICAgICAgICAkaGV4ID0gc3Vic3RyKCRoZXgsIDcsIDUpCiAgICAgICAgICAgIC4gc3Vic3RyKCRoZXgsIDEzLCAzKQogICAgICAgICAgICAuIHN1YnN0cigkaGV4LCAzLCA0KQogICAgICAgICAgICAuICcxJyAuIHN1YnN0cigkaGV4LCAwLCAzKQogICAgICAgICAgICAuIHN1YnN0cigkaGV4LCAxNik7CgogICAgICAgIC8qKiBAdmFyIExhenlVdWlkRnJvbVN0cmluZyAkdXVpZCAqLwogICAgICAgICR1dWlkID0gVXVpZDo6ZnJvbUJ5dGVzKChzdHJpbmcpIGhleDJiaW4oJGhleCkpOwoKICAgICAgICByZXR1cm4gJHV1aWQtPnRvVXVpZFYxKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyBhIHZlcnNpb24gMSBVVUlEIGludG8gYW4gaW5zdGFuY2Ugb2YgYSB2ZXJzaW9uIDYgVVVJRAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21VdWlkVjEoVXVpZFYxICR1dWlkVjEpOiBVdWlkVjYKICAgIHsKICAgICAgICAkaGV4ID0gJHV1aWRWMS0+Z2V0SGV4KCktPnRvU3RyaW5nKCk7CiAgICAgICAgJGhleCA9IHN1YnN0cigkaGV4LCAxMywgMykKICAgICAgICAgICAgLiBzdWJzdHIoJGhleCwgOCwgNCkKICAgICAgICAgICAgLiBzdWJzdHIoJGhleCwgMCwgNSkKICAgICAgICAgICAgLiAnNicgLiBzdWJzdHIoJGhleCwgNSwgMykKICAgICAgICAgICAgLiBzdWJzdHIoJGhleCwgMTYpOwoKICAgICAgICAvKiogQHZhciBMYXp5VXVpZEZyb21TdHJpbmcgJHV1aWQgKi8KICAgICAgICAkdXVpZCA9IFV1aWQ6OmZyb21CeXRlcygoc3RyaW5nKSBoZXgyYmluKCRoZXgpKTsKCiAgICAgICAgcmV0dXJuICR1dWlkLT50b1V1aWRWNigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/Dce/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/Dce/SystemDceSecurityProvider.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXERjZTsKCnVzZSBSYW1zZXlcVXVpZFxFeGNlcHRpb25cRGNlU2VjdXJpdHlFeGNlcHRpb247CnVzZSBSYW1zZXlcVXVpZFxQcm92aWRlclxEY2VTZWN1cml0eVByb3ZpZGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxJbnRlZ2VyIGFzIEludGVnZXJPYmplY3Q7Cgp1c2UgZnVuY3Rpb24gZXNjYXBlc2hlbGxhcmc7CnVzZSBmdW5jdGlvbiBwcmVnX3NwbGl0Owp1c2UgZnVuY3Rpb24gc3RyX2dldGNzdjsKdXNlIGZ1bmN0aW9uIHN0cnBvczsKdXNlIGZ1bmN0aW9uIHN0cnJwb3M7CnVzZSBmdW5jdGlvbiBzdHJ0b2xvd2VyOwp1c2UgZnVuY3Rpb24gc3RydG91cHBlcjsKdXNlIGZ1bmN0aW9uIHN1YnN0cjsKdXNlIGZ1bmN0aW9uIHRyaW07Cgp1c2UgY29uc3QgUFJFR19TUExJVF9OT19FTVBUWTsKCi8qKgogKiBTeXN0ZW1EY2VTZWN1cml0eVByb3ZpZGVyIHJldHJpZXZlcyB0aGUgdXNlciBvciBncm91cCBpZGVudGlmaWVycyBmcm9tIHRoZSBzeXN0ZW0KICovCmNsYXNzIFN5c3RlbURjZVNlY3VyaXR5UHJvdmlkZXIgaW1wbGVtZW50cyBEY2VTZWN1cml0eVByb3ZpZGVySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHRocm93cyBEY2VTZWN1cml0eUV4Y2VwdGlvbiBpZiB1bmFibGUgdG8gZ2V0IGEgdXNlciBpZGVudGlmaWVyCiAgICAgKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFVpZCgpOiBJbnRlZ2VyT2JqZWN0CiAgICB7CiAgICAgICAgc3RhdGljICR1aWQgPSBudWxsOwoKICAgICAgICBpZiAoJHVpZCBpbnN0YW5jZW9mIEludGVnZXJPYmplY3QpIHsKICAgICAgICAgICAgcmV0dXJuICR1aWQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHVpZCA9PT0gbnVsbCkgewogICAgICAgICAgICAkdWlkID0gJHRoaXMtPmdldFN5c3RlbVVpZCgpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR1aWQgPT09ICcnKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBEY2VTZWN1cml0eUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdVbmFibGUgdG8gZ2V0IGEgdXNlciBpZGVudGlmaWVyIHVzaW5nIHRoZSBzeXN0ZW0gRENFICcKICAgICAgICAgICAgICAgIC4gJ1NlY3VyaXR5IHByb3ZpZGVyOyBwbGVhc2UgcHJvdmlkZSBhIGN1c3RvbSBpZGVudGlmaWVyIG9yICcKICAgICAgICAgICAgICAgIC4gJ3VzZSBhIGRpZmZlcmVudCBwcm92aWRlcicKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICR1aWQgPSBuZXcgSW50ZWdlck9iamVjdCgkdWlkKTsKCiAgICAgICAgcmV0dXJuICR1aWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGhyb3dzIERjZVNlY3VyaXR5RXhjZXB0aW9uIGlmIHVuYWJsZSB0byBnZXQgYSBncm91cCBpZGVudGlmaWVyCiAgICAgKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEdpZCgpOiBJbnRlZ2VyT2JqZWN0CiAgICB7CiAgICAgICAgc3RhdGljICRnaWQgPSBudWxsOwoKICAgICAgICBpZiAoJGdpZCBpbnN0YW5jZW9mIEludGVnZXJPYmplY3QpIHsKICAgICAgICAgICAgcmV0dXJuICRnaWQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGdpZCA9PT0gbnVsbCkgewogICAgICAgICAgICAkZ2lkID0gJHRoaXMtPmdldFN5c3RlbUdpZCgpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRnaWQgPT09ICcnKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBEY2VTZWN1cml0eUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdVbmFibGUgdG8gZ2V0IGEgZ3JvdXAgaWRlbnRpZmllciB1c2luZyB0aGUgc3lzdGVtIERDRSAnCiAgICAgICAgICAgICAgICAuICdTZWN1cml0eSBwcm92aWRlcjsgcGxlYXNlIHByb3ZpZGUgYSBjdXN0b20gaWRlbnRpZmllciBvciAnCiAgICAgICAgICAgICAgICAuICd1c2UgYSBkaWZmZXJlbnQgcHJvdmlkZXInCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkZ2lkID0gbmV3IEludGVnZXJPYmplY3QoJGdpZCk7CgogICAgICAgIHJldHVybiAkZ2lkOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgVUlEIGZyb20gdGhlIHN5c3RlbQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldFN5c3RlbVVpZCgpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5oYXNTaGVsbEV4ZWMoKSkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQoKICAgICAgICBzd2l0Y2ggKCR0aGlzLT5nZXRPcygpKSB7CiAgICAgICAgICAgIGNhc2UgJ1dJTic6CiAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPmdldFdpbmRvd3NVaWQoKTsKICAgICAgICAgICAgY2FzZSAnREFSJzoKICAgICAgICAgICAgY2FzZSAnRlJFJzoKICAgICAgICAgICAgY2FzZSAnTElOJzoKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHJldHVybiB0cmltKChzdHJpbmcpIHNoZWxsX2V4ZWMoJ2lkIC11JykpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIEdJRCBmcm9tIHRoZSBzeXN0ZW0KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRTeXN0ZW1HaWQoKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+aGFzU2hlbGxFeGVjKCkpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KCiAgICAgICAgc3dpdGNoICgkdGhpcy0+Z2V0T3MoKSkgewogICAgICAgICAgICBjYXNlICdXSU4nOgogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRXaW5kb3dzR2lkKCk7CiAgICAgICAgICAgIGNhc2UgJ0RBUic6CiAgICAgICAgICAgIGNhc2UgJ0ZSRSc6CiAgICAgICAgICAgIGNhc2UgJ0xJTic6CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICByZXR1cm4gdHJpbSgoc3RyaW5nKSBzaGVsbF9leGVjKCdpZCAtZycpKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgc2hlbGxfZXhlYygpIGlzIGF2YWlsYWJsZSBmb3IgdXNlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gaGFzU2hlbGxFeGVjKCk6IGJvb2wKICAgIHsKICAgICAgICAkZGlzYWJsZWRGdW5jdGlvbnMgPSBzdHJ0b2xvd2VyKChzdHJpbmcpIGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJykpOwoKICAgICAgICByZXR1cm4gc3RycG9zKCRkaXNhYmxlZEZ1bmN0aW9ucywgJ3NoZWxsX2V4ZWMnKSA9PT0gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBQSFBfT1Mgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0T3MoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIHN0cnRvdXBwZXIoc3Vic3RyKGNvbnN0YW50KCdQSFBfT1MnKSwgMCwgMykpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdXNlciBpZGVudGlmaWVyIGZvciBhIHVzZXIgb24gYSBXaW5kb3dzIHN5c3RlbQogICAgICoKICAgICAqIFdpbmRvd3MgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSBjb25jZXB0IGFzIGFuIGVmZmVjdGl2ZSBQT1NJWCBVSUQgZm9yIHRoZQogICAgICogcnVubmluZyBzY3JpcHQuIEluc3RlYWQsIGVhY2ggdXNlciBpcyB1bmlxdWVseSBpZGVudGlmaWVkIGJ5IGFuIFNJRAogICAgICogKHNlY3VyaXR5IGlkZW50aWZpZXIpLiBUaGUgU0lEIGluY2x1ZGVzIHRocmVlIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VycwogICAgICogdGhhdCBtYWtlIHVwIGEgdW5pcXVlIGRvbWFpbiBpZGVudGlmaWVyLCBmb2xsb3dlZCBieSBhbiBSSUQgKHJlbGF0aXZlCiAgICAgKiBpZGVudGlmaWVyKSB0aGF0IHdlIHdpbGwgdXNlIGFzIHRoZSBVSUQuIFRoZSBwcmltYXJ5IGNhdmVhdCBpcyB0aGF0IHRoaXMKICAgICAqIFVJRCBtYXkgbm90IGJlIHVuaXF1ZSB0byB0aGUgc3lzdGVtLCBzaW5jZSBpdCBpcywgaW5zdGVhZCwgdW5pcXVlIHRvIHRoZQogICAgICogZG9tYWluLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LmxpZmV3aXJlLmNvbS93aGF0LWlzLWFuLXNpZC1udW1iZXItMjYyNjAwNSBXaGF0IElzIGFuIFNJRCBOdW1iZXI/CiAgICAgKiBAbGluayBodHRwczovL2JpdC5seS8zMHZFN05NIFdlbGwta25vd24gU0lEIFN0cnVjdHVyZXMKICAgICAqIEBsaW5rIGh0dHBzOi8vYml0Lmx5LzJGV2NZS0ogV2VsbC1rbm93biBzZWN1cml0eSBpZGVudGlmaWVycyBpbiBXaW5kb3dzIG9wZXJhdGluZyBzeXN0ZW1zCiAgICAgKiBAbGluayBodHRwczovL3d3dy53aW5kb3dzLWNvbW1hbmRsaW5lLmNvbS9nZXQtc2lkLW9mLXVzZXIvIEdldCBTSUQgb2YgdXNlcgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldFdpbmRvd3NVaWQoKTogc3RyaW5nCiAgICB7CiAgICAgICAgJHJlc3BvbnNlID0gc2hlbGxfZXhlYygnd2hvYW1pIC91c2VyIC9mbyBjc3YgL25oJyk7CgogICAgICAgIGlmICgkcmVzcG9uc2UgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KCiAgICAgICAgJHNpZCA9IHN0cl9nZXRjc3YodHJpbSgoc3RyaW5nKSAkcmVzcG9uc2UpKVsxXSA/PyAnJzsKCiAgICAgICAgaWYgKCgkbGFzdEh5cGhlbiA9IHN0cnJwb3MoJHNpZCwgJy0nKSkgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cmltKHN1YnN0cigkc2lkLCAkbGFzdEh5cGhlbiArIDEpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBncm91cCBpZGVudGlmaWVyIGZvciBhIHVzZXIgb24gYSBXaW5kb3dzIHN5c3RlbQogICAgICoKICAgICAqIFNpbmNlIFdpbmRvd3MgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSBjb25jZXB0IGFzIGFuIGVmZmVjdGl2ZSBQT1NJWCBHSUQKICAgICAqIGZvciB0aGUgcnVubmluZyBzY3JpcHQsIHdlIHdpbGwgZ2V0IHRoZSBsb2NhbCBncm91cCBtZW1iZXJzaGlwcyBmb3IgdGhlCiAgICAgKiB1c2VyIHJ1bm5pbmcgdGhlIHNjcmlwdC4gVGhlbiwgd2Ugd2lsbCBnZXQgdGhlIFNJRCAoc2VjdXJpdHkgaWRlbnRpZmllcikKICAgICAqIGZvciB0aGUgZmlyc3QgZ3JvdXAgdGhhdCBhcHBlYXJzIGluIHRoYXQgbGlzdC4gRmluYWxseSwgd2Ugd2lsbCByZXR1cm4KICAgICAqIHRoZSBSSUQgKHJlbGF0aXZlIGlkZW50aWZpZXIpIGZvciB0aGUgZ3JvdXAgYW5kIHVzZSB0aGF0IGFzIHRoZSBHSUQuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cud2luZG93cy1jb21tYW5kbGluZS5jb20vbGlzdC1vZi11c2VyLWdyb3Vwcy1jb21tYW5kLWxpbmUvIExpc3Qgb2YgdXNlciBncm91cHMgY29tbWFuZCBsaW5lCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0V2luZG93c0dpZCgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcmVzcG9uc2UgPSBzaGVsbF9leGVjKCduZXQgdXNlciAldXNlcm5hbWUlIHwgZmluZHN0ciAvYiAvaSAiTG9jYWwgR3JvdXAgTWVtYmVyc2hpcHMiJyk7CgogICAgICAgIGlmICgkcmVzcG9uc2UgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nW10gJHVzZXJHcm91cHMgKi8KICAgICAgICAkdXNlckdyb3VwcyA9IHByZWdfc3BsaXQoJy9cc3syLH0vJywgKHN0cmluZykgJHJlc3BvbnNlLCAtMSwgUFJFR19TUExJVF9OT19FTVBUWSk7CgogICAgICAgICRmaXJzdEdyb3VwID0gdHJpbSgkdXNlckdyb3Vwc1sxXSA/PyAnJywgIiogXHRcblxyXDBceDBCIik7CgogICAgICAgIGlmICgkZmlyc3RHcm91cCA9PT0gJycpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KCiAgICAgICAgJHJlc3BvbnNlID0gc2hlbGxfZXhlYygnd21pYyBncm91cCBnZXQgbmFtZSxzaWQgfCBmaW5kc3RyIC9iIC9pICcgLiBlc2NhcGVzaGVsbGFyZygkZmlyc3RHcm91cCkpOwoKICAgICAgICBpZiAoJHJlc3BvbnNlID09PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CgogICAgICAgIC8qKiBAdmFyIHN0cmluZ1tdICR1c2VyR3JvdXAgKi8KICAgICAgICAkdXNlckdyb3VwID0gcHJlZ19zcGxpdCgnL1xzezIsfS8nLCAoc3RyaW5nKSAkcmVzcG9uc2UsIC0xLCBQUkVHX1NQTElUX05PX0VNUFRZKTsKCiAgICAgICAgJHNpZCA9ICR1c2VyR3JvdXBbMV0gPz8gJyc7CgogICAgICAgIGlmICgoJGxhc3RIeXBoZW4gPSBzdHJycG9zKCRzaWQsICctJykpID09PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJpbSgoc3RyaW5nKSBzdWJzdHIoJHNpZCwgJGxhc3RIeXBoZW4gKyAxKSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/DceSecurityProviderInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFByb3ZpZGVyOwoKdXNlIFJhbXNleVxVdWlkXFJmYzQxMjJcVXVpZFYyOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxJbnRlZ2VyIGFzIEludGVnZXJPYmplY3Q7CgovKioKICogQSBEQ0UgcHJvdmlkZXIgcHJvdmlkZXMgYWNjZXNzIHRvIGxvY2FsIGRvbWFpbiBpZGVudGlmaWVycyBmb3IgdmVyc2lvbiAyLAogKiBEQ0UgU2VjdXJpdHksIFVVSURzCiAqCiAqIEBzZWUgVXVpZFYyCiAqLwppbnRlcmZhY2UgRGNlU2VjdXJpdHlQcm92aWRlckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFJldHVybnMgYSB1c2VyIGlkZW50aWZpZXIgZm9yIHRoZSBzeXN0ZW0KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Vc2VyX2lkZW50aWZpZXIgVXNlciBpZGVudGlmaWVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVaWQoKTogSW50ZWdlck9iamVjdDsKCiAgICAvKioKICAgICAqIFJldHVybnMgYSBncm91cCBpZGVudGlmaWVyIGZvciB0aGUgc3lzdGVtCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR3JvdXBfaWRlbnRpZmllciBHcm91cCBpZGVudGlmaWVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRHaWQoKTogSW50ZWdlck9iamVjdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/Node/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/Node/FallbackNodeProvider.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXE5vZGU7Cgp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXE5vZGVFeGNlcHRpb247CnVzZSBSYW1zZXlcVXVpZFxQcm92aWRlclxOb2RlUHJvdmlkZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxUeXBlXEhleGFkZWNpbWFsOwoKLyoqCiAqIEZhbGxiYWNrTm9kZVByb3ZpZGVyIHJldHJpZXZlcyB0aGUgc3lzdGVtIG5vZGUgSUQgYnkgc3RlcHBpbmcgdGhyb3VnaCBhIGxpc3QKICogb2YgcHJvdmlkZXJzIHVudGlsIGEgbm9kZSBJRCBjYW4gYmUgb2J0YWluZWQKICovCmNsYXNzIEZhbGxiYWNrTm9kZVByb3ZpZGVyIGltcGxlbWVudHMgTm9kZVByb3ZpZGVySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHZhciBOb2RlUHJvdmlkZXJDb2xsZWN0aW9uCiAgICAgKi8KICAgIHByaXZhdGUgJG5vZGVQcm92aWRlcnM7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gTm9kZVByb3ZpZGVyQ29sbGVjdGlvbiAkcHJvdmlkZXJzIEFycmF5IG9mIG5vZGUgcHJvdmlkZXJzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChOb2RlUHJvdmlkZXJDb2xsZWN0aW9uICRwcm92aWRlcnMpCiAgICB7CiAgICAgICAgJHRoaXMtPm5vZGVQcm92aWRlcnMgPSAkcHJvdmlkZXJzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb2RlKCk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgJGxhc3RQcm92aWRlckV4Y2VwdGlvbiA9IG51bGw7CgogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5ub2RlUHJvdmlkZXJzIGFzICRwcm92aWRlcikgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgcmV0dXJuICRwcm92aWRlci0+Z2V0Tm9kZSgpOwogICAgICAgICAgICB9IGNhdGNoIChOb2RlRXhjZXB0aW9uICRleGNlcHRpb24pIHsKICAgICAgICAgICAgICAgICRsYXN0UHJvdmlkZXJFeGNlcHRpb24gPSAkZXhjZXB0aW9uOwoKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgTm9kZUV4Y2VwdGlvbigKICAgICAgICAgICAgJ1VuYWJsZSB0byBmaW5kIGEgc3VpdGFibGUgbm9kZSBwcm92aWRlcicsCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgICRsYXN0UHJvdmlkZXJFeGNlcHRpb24KICAgICAgICApOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/Node/NodeProviderCollection.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXE5vZGU7Cgp1c2UgUmFtc2V5XENvbGxlY3Rpb25cQWJzdHJhY3RDb2xsZWN0aW9uOwp1c2UgUmFtc2V5XFV1aWRcUHJvdmlkZXJcTm9kZVByb3ZpZGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxIZXhhZGVjaW1hbDsKCi8qKgogKiBBIGNvbGxlY3Rpb24gb2YgTm9kZVByb3ZpZGVySW50ZXJmYWNlIG9iamVjdHMKICoKICogQGV4dGVuZHMgQWJzdHJhY3RDb2xsZWN0aW9uPE5vZGVQcm92aWRlckludGVyZmFjZT4KICovCmNsYXNzIE5vZGVQcm92aWRlckNvbGxlY3Rpb24gZXh0ZW5kcyBBYnN0cmFjdENvbGxlY3Rpb24KewogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIE5vZGVQcm92aWRlckludGVyZmFjZTo6Y2xhc3M7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZS1jb25zdHJ1Y3RzIHRoZSBvYmplY3QgZnJvbSBpdHMgc2VyaWFsaXplZCBmb3JtCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2VyaWFsaXplZCBUaGUgc2VyaWFsaXplZCBQSFAgc3RyaW5nIHRvIHVuc2VyaWFsaXplIGludG8KICAgICAqICAgICBhIFV1aWRJbnRlcmZhY2UgaW5zdGFuY2UKICAgICAqCiAgICAgKiBAcGhwY3NTdXBwcmVzcyBTbGV2b21hdENvZGluZ1N0YW5kYXJkLlR5cGVIaW50cy5QYXJhbWV0ZXJUeXBlSGludC5NaXNzaW5nTmF0aXZlVHlwZUhpbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBSZWR1bmRhbnRDb25kaXRpb25HaXZlbkRvY2Jsb2NrVHlwZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5zZXJpYWxpemUoJHNlcmlhbGl6ZWQpOiB2b2lkCiAgICB7CiAgICAgICAgLyoqIEB2YXIgYXJyYXk8YXJyYXkta2V5LCBOb2RlUHJvdmlkZXJJbnRlcmZhY2U+ICRkYXRhICovCiAgICAgICAgJGRhdGEgPSB1bnNlcmlhbGl6ZSgkc2VyaWFsaXplZCwgWwogICAgICAgICAgICAnYWxsb3dlZF9jbGFzc2VzJyA9PiBbCiAgICAgICAgICAgICAgICBIZXhhZGVjaW1hbDo6Y2xhc3MsCiAgICAgICAgICAgICAgICBSYW5kb21Ob2RlUHJvdmlkZXI6OmNsYXNzLAogICAgICAgICAgICAgICAgU3RhdGljTm9kZVByb3ZpZGVyOjpjbGFzcywKICAgICAgICAgICAgICAgIFN5c3RlbU5vZGVQcm92aWRlcjo6Y2xhc3MsCiAgICAgICAgICAgIF0sCiAgICAgICAgXSk7CgogICAgICAgICR0aGlzLT5kYXRhID0gYXJyYXlfZmlsdGVyKAogICAgICAgICAgICAkZGF0YSwKICAgICAgICAgICAgZnVuY3Rpb24gKCR1bnNlcmlhbGl6ZWQpOiBib29sIHsKICAgICAgICAgICAgICAgIHJldHVybiAkdW5zZXJpYWxpemVkIGluc3RhbmNlb2YgTm9kZVByb3ZpZGVySW50ZXJmYWNlOwogICAgICAgICAgICB9CiAgICAgICAgKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXE5vZGU7Cgp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXFJhbmRvbVNvdXJjZUV4Y2VwdGlvbjsKdXNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXE5vZGVQcm92aWRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXFR5cGVcSGV4YWRlY2ltYWw7CnVzZSBUaHJvd2FibGU7Cgp1c2UgZnVuY3Rpb24gYmluMmhleDsKdXNlIGZ1bmN0aW9uIGRlY2hleDsKdXNlIGZ1bmN0aW9uIGhleDJiaW47CnVzZSBmdW5jdGlvbiBoZXhkZWM7CnVzZSBmdW5jdGlvbiBzdHJfcGFkOwp1c2UgZnVuY3Rpb24gc3Vic3RyOwoKdXNlIGNvbnN0IFNUUl9QQURfTEVGVDsKCi8qKgogKiBSYW5kb21Ob2RlUHJvdmlkZXIgZ2VuZXJhdGVzIGEgcmFuZG9tIG5vZGUgSUQKICoKICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDEyMiNzZWN0aW9uLTQuNSBSRkMgNDEyMiwgwqcgNC41OiBOb2RlIElEcyB0aGF0IERvIE5vdCBJZGVudGlmeSB0aGUgSG9zdAogKi8KY2xhc3MgUmFuZG9tTm9kZVByb3ZpZGVyIGltcGxlbWVudHMgTm9kZVByb3ZpZGVySW50ZXJmYWNlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb2RlKCk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJG5vZGVCeXRlcyA9IHJhbmRvbV9ieXRlcyg2KTsKICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgJGV4Y2VwdGlvbikgewogICAgICAgICAgICB0aHJvdyBuZXcgUmFuZG9tU291cmNlRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJGV4Y2VwdGlvbi0+Z2V0TWVzc2FnZSgpLAogICAgICAgICAgICAgICAgKGludCkgJGV4Y2VwdGlvbi0+Z2V0Q29kZSgpLAogICAgICAgICAgICAgICAgJGV4Y2VwdGlvbgogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgLy8gU3BsaXQgdGhlIG5vZGUgYnl0ZXMgZm9yIG1hdGggb24gMzItYml0IHN5c3RlbXMuCiAgICAgICAgJG5vZGVNc2IgPSBzdWJzdHIoJG5vZGVCeXRlcywgMCwgMyk7CiAgICAgICAgJG5vZGVMc2IgPSBzdWJzdHIoJG5vZGVCeXRlcywgMyk7CgogICAgICAgIC8vIFNldCB0aGUgbXVsdGljYXN0IGJpdDsgc2VlIFJGQyA0MTIyLCBzZWN0aW9uIDQuNS4KICAgICAgICAkbm9kZU1zYiA9IGhleDJiaW4oCiAgICAgICAgICAgIHN0cl9wYWQoCiAgICAgICAgICAgICAgICBkZWNoZXgoaGV4ZGVjKGJpbjJoZXgoJG5vZGVNc2IpKSB8IDB4MDEwMDAwKSwKICAgICAgICAgICAgICAgIDYsCiAgICAgICAgICAgICAgICAnMCcsCiAgICAgICAgICAgICAgICBTVFJfUEFEX0xFRlQKICAgICAgICAgICAgKQogICAgICAgICk7CgogICAgICAgIC8vIFJlY29tYmluZSB0aGUgbm9kZSBieXRlcy4KICAgICAgICAkbm9kZSA9ICRub2RlTXNiIC4gJG5vZGVMc2I7CgogICAgICAgIHJldHVybiBuZXcgSGV4YWRlY2ltYWwoc3RyX3BhZChiaW4yaGV4KCRub2RlKSwgMTIsICcwJywgU1RSX1BBRF9MRUZUKSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/Node/StaticNodeProvider.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXE5vZGU7Cgp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXE5vZGVQcm92aWRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXFR5cGVcSGV4YWRlY2ltYWw7Cgp1c2UgZnVuY3Rpb24gZGVjaGV4Owp1c2UgZnVuY3Rpb24gaGV4ZGVjOwp1c2UgZnVuY3Rpb24gc3RyX3BhZDsKdXNlIGZ1bmN0aW9uIHN1YnN0cjsKCnVzZSBjb25zdCBTVFJfUEFEX0xFRlQ7CgovKioKICogU3RhdGljTm9kZVByb3ZpZGVyIHByb3ZpZGVzIGEgc3RhdGljIG5vZGUgdmFsdWUgd2l0aCB0aGUgbXVsdGljYXN0IGJpdCBzZXQKICoKICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDEyMiNzZWN0aW9uLTQuNSBSRkMgNDEyMiwgwqcgNC41OiBOb2RlIElEcyB0aGF0IERvIE5vdCBJZGVudGlmeSB0aGUgSG9zdAogKi8KY2xhc3MgU3RhdGljTm9kZVByb3ZpZGVyIGltcGxlbWVudHMgTm9kZVByb3ZpZGVySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHZhciBIZXhhZGVjaW1hbAogICAgICovCiAgICBwcml2YXRlICRub2RlOwoKICAgIC8qKgogICAgICogQHBhcmFtIEhleGFkZWNpbWFsICRub2RlIFRoZSBzdGF0aWMgbm9kZSB2YWx1ZSB0byB1c2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEhleGFkZWNpbWFsICRub2RlKQogICAgewogICAgICAgIGlmIChzdHJsZW4oJG5vZGUtPnRvU3RyaW5nKCkpID4gMTIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdTdGF0aWMgbm9kZSB2YWx1ZSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIDEyIGhleGFkZWNpbWFsIGNoYXJhY3RlcnMnCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+bm9kZSA9ICR0aGlzLT5zZXRNdWx0aWNhc3RCaXQoJG5vZGUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb2RlKCk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5ub2RlOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBtdWx0aWNhc3QgYml0IGZvciB0aGUgc3RhdGljIG5vZGUgdmFsdWUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBzZXRNdWx0aWNhc3RCaXQoSGV4YWRlY2ltYWwgJG5vZGUpOiBIZXhhZGVjaW1hbAogICAgewogICAgICAgICRub2RlSGV4ID0gc3RyX3BhZCgkbm9kZS0+dG9TdHJpbmcoKSwgMTIsICcwJywgU1RSX1BBRF9MRUZUKTsKICAgICAgICAkZmlyc3RPY3RldCA9IHN1YnN0cigkbm9kZUhleCwgMCwgMik7CgogICAgICAgICRmaXJzdE9jdGV0ID0gc3RyX3BhZCgKICAgICAgICAgICAgZGVjaGV4KGhleGRlYygkZmlyc3RPY3RldCkgfCAweDAxKSwKICAgICAgICAgICAgMiwKICAgICAgICAgICAgJzAnLAogICAgICAgICAgICBTVFJfUEFEX0xFRlQKICAgICAgICApOwoKICAgICAgICByZXR1cm4gbmV3IEhleGFkZWNpbWFsKCRmaXJzdE9jdGV0IC4gc3Vic3RyKCRub2RlSGV4LCAyKSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/Node/SystemNodeProvider.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXE5vZGU7Cgp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXE5vZGVFeGNlcHRpb247CnVzZSBSYW1zZXlcVXVpZFxQcm92aWRlclxOb2RlUHJvdmlkZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxUeXBlXEhleGFkZWNpbWFsOwoKdXNlIGZ1bmN0aW9uIGFycmF5X2ZpbHRlcjsKdXNlIGZ1bmN0aW9uIGFycmF5X21hcDsKdXNlIGZ1bmN0aW9uIGFycmF5X3dhbGs7CnVzZSBmdW5jdGlvbiBjb3VudDsKdXNlIGZ1bmN0aW9uIG9iX2dldF9jbGVhbjsKdXNlIGZ1bmN0aW9uIG9iX3N0YXJ0Owp1c2UgZnVuY3Rpb24gcHJlZ19tYXRjaDsKdXNlIGZ1bmN0aW9uIHByZWdfbWF0Y2hfYWxsOwp1c2UgZnVuY3Rpb24gcmVzZXQ7CnVzZSBmdW5jdGlvbiBzdHJfcmVwbGFjZTsKdXNlIGZ1bmN0aW9uIHN0cnBvczsKdXNlIGZ1bmN0aW9uIHN0cnRvbG93ZXI7CnVzZSBmdW5jdGlvbiBzdHJ0b3VwcGVyOwp1c2UgZnVuY3Rpb24gc3Vic3RyOwoKdXNlIGNvbnN0IEdMT0JfTk9TT1JUOwp1c2UgY29uc3QgUFJFR19QQVRURVJOX09SREVSOwoKLyoqCiAqIFN5c3RlbU5vZGVQcm92aWRlciByZXRyaWV2ZXMgdGhlIHN5c3RlbSBub2RlIElELCBpZiBwb3NzaWJsZQogKgogKiBUaGUgc3lzdGVtIG5vZGUgSUQsIG9yIGhvc3QgSUQsIGlzIG9mdGVuIHRoZSBzYW1lIGFzIHRoZSBNQUMgYWRkcmVzcyBmb3IgYQogKiBuZXR3b3JrIGludGVyZmFjZSBvbiB0aGUgaG9zdC4KICovCmNsYXNzIFN5c3RlbU5vZGVQcm92aWRlciBpbXBsZW1lbnRzIE5vZGVQcm92aWRlckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFBhdHRlcm4gdG8gbWF0Y2ggbm9kZXMgaW4gaWZjb25maWcgYW5kIGlwY29uZmlnIG91dHB1dC4KICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBJRkNPTkZJR19QQVRURVJOID0gJy9bXjpdKFswLTlhLWZdezJ9KFs6LV0pWzAtOWEtZl17Mn0oXDJbMC05YS1mXXsyfSl7NH0pW146XS9pJzsKCiAgICAvKioKICAgICAqIFBhdHRlcm4gdG8gbWF0Y2ggbm9kZXMgaW4gc3lzZnMgc3RyZWFtIG91dHB1dC4KICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBTWVNGU19QQVRURVJOID0gJy9eKFswLTlhLWZdezJ9Oil7NX1bMC05YS1mXXsyfSQvaSc7CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vZGUoKTogSGV4YWRlY2ltYWwKICAgIHsKICAgICAgICAkbm9kZSA9ICR0aGlzLT5nZXROb2RlRnJvbVN5c3RlbSgpOwoKICAgICAgICBpZiAoJG5vZGUgPT09ICcnKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBOb2RlRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ1VuYWJsZSB0byBmZXRjaCBhIG5vZGUgZm9yIHRoaXMgc3lzdGVtJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBIZXhhZGVjaW1hbCgkbm9kZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzeXN0ZW0gbm9kZSwgaWYgaXQgY2FuIGZpbmQgaXQKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldE5vZGVGcm9tU3lzdGVtKCk6IHN0cmluZwogICAgewogICAgICAgIHN0YXRpYyAkbm9kZSA9IG51bGw7CgogICAgICAgIGlmICgkbm9kZSAhPT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgJG5vZGU7CiAgICAgICAgfQoKICAgICAgICAvLyBGaXJzdCwgdHJ5IGEgTGludXgtc3BlY2lmaWMgYXBwcm9hY2guCiAgICAgICAgJG5vZGUgPSAkdGhpcy0+Z2V0U3lzZnMoKTsKCiAgICAgICAgaWYgKCRub2RlID09PSAnJykgewogICAgICAgICAgICAvLyBTZWFyY2ggaWZjb25maWcgb3V0cHV0IGZvciBNQUMgYWRkcmVzc2VzICYgcmV0dXJuIHRoZSBmaXJzdCBvbmUuCiAgICAgICAgICAgICRub2RlID0gJHRoaXMtPmdldElmY29uZmlnKCk7CiAgICAgICAgfQoKICAgICAgICAkbm9kZSA9IHN0cl9yZXBsYWNlKFsnOicsICctJ10sICcnLCAkbm9kZSk7CgogICAgICAgIHJldHVybiAkbm9kZTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzeXN0ZW0KICAgICAqCiAgICAgKiBAY29kZUNvdmVyYWdlSWdub3JlCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRJZmNvbmZpZygpOiBzdHJpbmcKICAgIHsKICAgICAgICAkZGlzYWJsZWRGdW5jdGlvbnMgPSBzdHJ0b2xvd2VyKChzdHJpbmcpIGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJykpOwoKICAgICAgICBpZiAoc3RycG9zKCRkaXNhYmxlZEZ1bmN0aW9ucywgJ3Bhc3N0aHJ1JykgIT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CgogICAgICAgIG9iX3N0YXJ0KCk7CiAgICAgICAgc3dpdGNoIChzdHJ0b3VwcGVyKHN1YnN0cihjb25zdGFudCgnUEhQX09TJyksIDAsIDMpKSkgewogICAgICAgICAgICBjYXNlICdXSU4nOgogICAgICAgICAgICAgICAgcGFzc3RocnUoJ2lwY29uZmlnIC9hbGwgMj4mMScpOwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdEQVInOgogICAgICAgICAgICAgICAgcGFzc3RocnUoJ2lmY29uZmlnIDI+JjEnKTsKCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnRlJFJzoKICAgICAgICAgICAgICAgIHBhc3N0aHJ1KCduZXRzdGF0IC1pIC1mIGxpbmsgMj4mMScpOwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdMSU4nOgogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgcGFzc3RocnUoJ25ldHN0YXQgLWllIDI+JjEnKTsKCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgICRpZmNvbmZpZyA9IChzdHJpbmcpIG9iX2dldF9jbGVhbigpOwoKICAgICAgICAkbm9kZSA9ICcnOwogICAgICAgIGlmIChwcmVnX21hdGNoX2FsbChzZWxmOjpJRkNPTkZJR19QQVRURVJOLCAkaWZjb25maWcsICRtYXRjaGVzLCBQUkVHX1BBVFRFUk5fT1JERVIpKSB7CiAgICAgICAgICAgICRub2RlID0gJG1hdGNoZXNbMV1bMF0gPz8gJyc7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG5vZGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIE1BQyBhZGRyZXNzIGZyb20gdGhlIGZpcnN0IHN5c3RlbSBpbnRlcmZhY2UgdmlhIHRoZSBzeXNmcyBpbnRlcmZhY2UKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFN5c2ZzKCk6IHN0cmluZwogICAgewogICAgICAgICRtYWMgPSAnJzsKCiAgICAgICAgaWYgKHN0cnRvdXBwZXIoY29uc3RhbnQoJ1BIUF9PUycpKSA9PT0gJ0xJTlVYJykgewogICAgICAgICAgICAkYWRkcmVzc1BhdGhzID0gZ2xvYignL3N5cy9jbGFzcy9uZXQvKi9hZGRyZXNzJywgR0xPQl9OT1NPUlQpOwoKICAgICAgICAgICAgaWYgKCRhZGRyZXNzUGF0aHMgPT09IGZhbHNlIHx8IGNvdW50KCRhZGRyZXNzUGF0aHMpID09PSAwKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRtYWNzID0gW107CgogICAgICAgICAgICBhcnJheV93YWxrKCRhZGRyZXNzUGF0aHMsIGZ1bmN0aW9uIChzdHJpbmcgJGFkZHJlc3NQYXRoKSB1c2UgKCYkbWFjcyk6IHZvaWQgewogICAgICAgICAgICAgICAgaWYgKGlzX3JlYWRhYmxlKCRhZGRyZXNzUGF0aCkpIHsKICAgICAgICAgICAgICAgICAgICAkbWFjc1tdID0gZmlsZV9nZXRfY29udGVudHMoJGFkZHJlc3NQYXRoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAkbWFjcyA9IGFycmF5X21hcCgndHJpbScsICRtYWNzKTsKCiAgICAgICAgICAgIC8vIFJlbW92ZSBpbnZhbGlkIGVudHJpZXMuCiAgICAgICAgICAgICRtYWNzID0gYXJyYXlfZmlsdGVyKCRtYWNzLCBmdW5jdGlvbiAoc3RyaW5nICRhZGRyZXNzKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGFkZHJlc3MgIT09ICcwMDowMDowMDowMDowMDowMCcKICAgICAgICAgICAgICAgICAgICAmJiBwcmVnX21hdGNoKHNlbGY6OlNZU0ZTX1BBVFRFUk4sICRhZGRyZXNzKTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAkbWFjID0gcmVzZXQoJG1hY3MpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIChzdHJpbmcpICRtYWM7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/NodeProviderInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFByb3ZpZGVyOwoKdXNlIFJhbXNleVxVdWlkXFR5cGVcSGV4YWRlY2ltYWw7CgovKioKICogQSBub2RlIHByb3ZpZGVyIHJldHJpZXZlcyBvciBnZW5lcmF0ZXMgYSBub2RlIElECiAqLwppbnRlcmZhY2UgTm9kZVByb3ZpZGVySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0dXJucyBhIG5vZGUgSUQKICAgICAqCiAgICAgKiBAcmV0dXJuIEhleGFkZWNpbWFsIFRoZSBub2RlIElEIGFzIGEgaGV4YWRlY2ltYWwgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb2RlKCk6IEhleGFkZWNpbWFsOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/Time/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/Time/FixedTimeProvider.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXFRpbWU7Cgp1c2UgUmFtc2V5XFV1aWRcUHJvdmlkZXJcVGltZVByb3ZpZGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxJbnRlZ2VyIGFzIEludGVnZXJPYmplY3Q7CnVzZSBSYW1zZXlcVXVpZFxUeXBlXFRpbWU7CgovKioKICogRml4ZWRUaW1lUHJvdmlkZXIgdXNlcyBhbiBrbm93biB0aW1lIHRvIHByb3ZpZGUgdGhlIHRpbWUKICoKICogVGhpcyBwcm92aWRlciBhbGxvd3MgdGhlIHVzZSBvZiBhIHByZXZpb3VzbHktZ2VuZXJhdGVkLCBvciBrbm93biwgdGltZQogKiB3aGVuIGdlbmVyYXRpbmcgdGltZS1iYXNlZCBVVUlEcy4KICovCmNsYXNzIEZpeGVkVGltZVByb3ZpZGVyIGltcGxlbWVudHMgVGltZVByb3ZpZGVySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHZhciBUaW1lCiAgICAgKi8KICAgIHByaXZhdGUgJGZpeGVkVGltZTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoVGltZSAkdGltZSkKICAgIHsKICAgICAgICAkdGhpcy0+Zml4ZWRUaW1lID0gJHRpbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBgdXNlY2AgY29tcG9uZW50IG9mIHRoZSB0aW1lCiAgICAgKgogICAgICogQHBhcmFtIGludHxzdHJpbmd8SW50ZWdlck9iamVjdCAkdmFsdWUgVGhlIGB1c2VjYCB2YWx1ZSB0byBzZXQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFVzZWMoJHZhbHVlKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5maXhlZFRpbWUgPSBuZXcgVGltZSgkdGhpcy0+Zml4ZWRUaW1lLT5nZXRTZWNvbmRzKCksICR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBgc2VjYCBjb21wb25lbnQgb2YgdGhlIHRpbWUKICAgICAqCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZ3xJbnRlZ2VyT2JqZWN0ICR2YWx1ZSBUaGUgYHNlY2AgdmFsdWUgdG8gc2V0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRTZWMoJHZhbHVlKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5maXhlZFRpbWUgPSBuZXcgVGltZSgkdmFsdWUsICR0aGlzLT5maXhlZFRpbWUtPmdldE1pY3Jvc2Vjb25kcygpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZSgpOiBUaW1lCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5maXhlZFRpbWU7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/Time/SystemTimeProvider.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXFRpbWU7Cgp1c2UgUmFtc2V5XFV1aWRcUHJvdmlkZXJcVGltZVByb3ZpZGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxUaW1lOwoKdXNlIGZ1bmN0aW9uIGdldHRpbWVvZmRheTsKCi8qKgogKiBTeXN0ZW1UaW1lUHJvdmlkZXIgcmV0cmlldmVzIHRoZSBjdXJyZW50IHRpbWUgdXNpbmcgYnVpbHQtaW4gUEhQIGZ1bmN0aW9ucwogKi8KY2xhc3MgU3lzdGVtVGltZVByb3ZpZGVyIGltcGxlbWVudHMgVGltZVByb3ZpZGVySW50ZXJmYWNlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lKCk6IFRpbWUKICAgIHsKICAgICAgICAkdGltZSA9IGdldHRpbWVvZmRheSgpOwoKICAgICAgICByZXR1cm4gbmV3IFRpbWUoJHRpbWVbJ3NlYyddLCAkdGltZVsndXNlYyddKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/TimeProviderInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFByb3ZpZGVyOwoKdXNlIFJhbXNleVxVdWlkXFR5cGVcVGltZTsKCi8qKgogKiBBIHRpbWUgcHJvdmlkZXIgcmV0cmlldmVzIHRoZSBjdXJyZW50IHRpbWUKICovCmludGVyZmFjZSBUaW1lUHJvdmlkZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgdGltZSBvYmplY3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWUoKTogVGltZTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/Fields.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFJmYzQxMjI7Cgp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFJhbXNleVxVdWlkXEZpZWxkc1xTZXJpYWxpemFibGVGaWVsZHNUcmFpdDsKdXNlIFJhbXNleVxVdWlkXFR5cGVcSGV4YWRlY2ltYWw7CnVzZSBSYW1zZXlcVXVpZFxVdWlkOwoKdXNlIGZ1bmN0aW9uIGJpbjJoZXg7CnVzZSBmdW5jdGlvbiBkZWNoZXg7CnVzZSBmdW5jdGlvbiBoZXhkZWM7CnVzZSBmdW5jdGlvbiBzcHJpbnRmOwp1c2UgZnVuY3Rpb24gc3RyX3BhZDsKdXNlIGZ1bmN0aW9uIHN0cmxlbjsKdXNlIGZ1bmN0aW9uIHN1YnN0cjsKdXNlIGZ1bmN0aW9uIHVucGFjazsKCnVzZSBjb25zdCBTVFJfUEFEX0xFRlQ7CgovKioKICogUkZDIDQxMjIgdmFyaWFudCBVVUlEcyBhcmUgY29tcHJpc2VkIG9mIGEgc2V0IG9mIG5hbWVkIGZpZWxkcwogKgogKiBJbnRlcm5hbGx5LCB0aGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGZpZWxkcyB0b2dldGhlciBhcyBhIDE2LWJ5dGUgYmluYXJ5CiAqIHN0cmluZy4KICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KZmluYWwgY2xhc3MgRmllbGRzIGltcGxlbWVudHMgRmllbGRzSW50ZXJmYWNlCnsKICAgIHVzZSBOaWxUcmFpdDsKICAgIHVzZSBTZXJpYWxpemFibGVGaWVsZHNUcmFpdDsKICAgIHVzZSBWYXJpYW50VHJhaXQ7CiAgICB1c2UgVmVyc2lvblRyYWl0OwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkYnl0ZXM7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRieXRlcyBBIDE2LWJ5dGUgYmluYXJ5IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIFVVSUQKICAgICAqCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgYnl0ZSBzdHJpbmcgaXMgbm90IGV4YWN0bHkgMTYgYnl0ZXMKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBieXRlIHN0cmluZyBkb2VzIG5vdCByZXByZXNlbnQgYW4gUkZDIDQxMjIgVVVJRAogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIGJ5dGUgc3RyaW5nIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCB2ZXJzaW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJGJ5dGVzKQogICAgewogICAgICAgIGlmIChzdHJsZW4oJGJ5dGVzKSAhPT0gMTYpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdUaGUgYnl0ZSBzdHJpbmcgbXVzdCBiZSAxNiBieXRlcyBsb25nOyAnCiAgICAgICAgICAgICAgICAuICdyZWNlaXZlZCAnIC4gc3RybGVuKCRieXRlcykgLiAnIGJ5dGVzJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmJ5dGVzID0gJGJ5dGVzOwoKICAgICAgICBpZiAoISR0aGlzLT5pc0NvcnJlY3RWYXJpYW50KCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdUaGUgYnl0ZSBzdHJpbmcgcmVjZWl2ZWQgZG9lcyBub3QgY29uZm9ybSB0byB0aGUgUkZDIDQxMjIgdmFyaWFudCcKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICghJHRoaXMtPmlzQ29ycmVjdFZlcnNpb24oKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ1RoZSBieXRlIHN0cmluZyByZWNlaXZlZCBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgUkZDIDQxMjIgdmVyc2lvbicKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEJ5dGVzKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Ynl0ZXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENsb2NrU2VxKCk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgJGNsb2NrU2VxID0gaGV4ZGVjKGJpbjJoZXgoc3Vic3RyKCR0aGlzLT5ieXRlcywgOCwgMikpKSAmIDB4M2ZmZjsKCiAgICAgICAgcmV0dXJuIG5ldyBIZXhhZGVjaW1hbChzdHJfcGFkKGRlY2hleCgkY2xvY2tTZXEpLCA0LCAnMCcsIFNUUl9QQURfTEVGVCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbG9ja1NlcUhpQW5kUmVzZXJ2ZWQoKTogSGV4YWRlY2ltYWwKICAgIHsKICAgICAgICByZXR1cm4gbmV3IEhleGFkZWNpbWFsKGJpbjJoZXgoc3Vic3RyKCR0aGlzLT5ieXRlcywgOCwgMSkpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xvY2tTZXFMb3coKTogSGV4YWRlY2ltYWwKICAgIHsKICAgICAgICByZXR1cm4gbmV3IEhleGFkZWNpbWFsKGJpbjJoZXgoc3Vic3RyKCR0aGlzLT5ieXRlcywgOSwgMSkpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9kZSgpOiBIZXhhZGVjaW1hbAogICAgewogICAgICAgIHJldHVybiBuZXcgSGV4YWRlY2ltYWwoYmluMmhleChzdWJzdHIoJHRoaXMtPmJ5dGVzLCAxMCkpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZUhpQW5kVmVyc2lvbigpOiBIZXhhZGVjaW1hbAogICAgewogICAgICAgIHJldHVybiBuZXcgSGV4YWRlY2ltYWwoYmluMmhleChzdWJzdHIoJHRoaXMtPmJ5dGVzLCA2LCAyKSkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lTG93KCk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBIZXhhZGVjaW1hbChiaW4yaGV4KHN1YnN0cigkdGhpcy0+Ynl0ZXMsIDAsIDQpKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVNaWQoKTogSGV4YWRlY2ltYWwKICAgIHsKICAgICAgICByZXR1cm4gbmV3IEhleGFkZWNpbWFsKGJpbjJoZXgoc3Vic3RyKCR0aGlzLT5ieXRlcywgNCwgMikpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGZ1bGwgNjAtYml0IHRpbWVzdGFtcCwgd2l0aG91dCB0aGUgdmVyc2lvbgogICAgICoKICAgICAqIEZvciB2ZXJzaW9uIDIgVVVJRHMsIHRoZSB0aW1lX2xvdyBmaWVsZCBpcyB0aGUgbG9jYWwgaWRlbnRpZmllciBhbmQKICAgICAqIHNob3VsZCBub3QgYmUgcmV0dXJuZWQgYXMgcGFydCBvZiB0aGUgdGltZS4gRm9yIHRoaXMgcmVhc29uLCB3ZSBzZXQgdGhlCiAgICAgKiBib3R0b20gMzIgYml0cyBvZiB0aGUgdGltZXN0YW1wIHRvIDAncy4gQXMgYSByZXN1bHQsIHRoZXJlIGlzIHNvbWUgbG9zcwogICAgICogb2YgZmlkZWxpdHkgb2YgdGhlIHRpbWVzdGFtcCwgZm9yIHZlcnNpb24gMiBVVUlEcy4gVGhlIHRpbWVzdGFtcCBjYW4gYmUKICAgICAqIG9mZiBieSBhIHJhbmdlIG9mIDAgdG8gNDI5LjQ5NjcyOTUgc2Vjb25kcyAob3IgNyBtaW51dGVzLCA5IHNlY29uZHMsIGFuZAogICAgICogNDk2NzMwIG1pY3Jvc2Vjb25kcykuCiAgICAgKgogICAgICogRm9yIHZlcnNpb24gNiBVVUlEcywgdGhlIHRpbWVzdGFtcCBvcmRlciBpcyByZXZlcnNlZCBmcm9tIHRoZSB0eXBpY2FsIFJGQwogICAgICogNDEyMiBvcmRlciAodGhlIHRpbWUgYml0cyBhcmUgaW4gdGhlIGNvcnJlY3QgYml0IG9yZGVyLCBzbyB0aGF0IGl0IGlzCiAgICAgKiBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcpLiBJbiByZXR1cm5pbmcgdGhlIHRpbWVzdGFtcCB2YWx1ZSwgd2UgcHV0IHRoZQogICAgICogYml0cyBpbiB0aGUgb3JkZXI6IHRpbWVfbG93ICsgdGltZV9taWQgKyB0aW1lX2hpLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZXN0YW1wKCk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgc3dpdGNoICgkdGhpcy0+Z2V0VmVyc2lvbigpKSB7CiAgICAgICAgICAgIGNhc2UgVXVpZDo6VVVJRF9UWVBFX0RDRV9TRUNVUklUWToKICAgICAgICAgICAgICAgICR0aW1lc3RhbXAgPSBzcHJpbnRmKAogICAgICAgICAgICAgICAgICAgICclMDN4JTA0cyUwOHMnLAogICAgICAgICAgICAgICAgICAgIGhleGRlYygkdGhpcy0+Z2V0VGltZUhpQW5kVmVyc2lvbigpLT50b1N0cmluZygpKSAmIDB4MGZmZiwKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Z2V0VGltZU1pZCgpLT50b1N0cmluZygpLAogICAgICAgICAgICAgICAgICAgICcnCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIFV1aWQ6OlVVSURfVFlQRV9QRUFCT0RZOgogICAgICAgICAgICAgICAgJHRpbWVzdGFtcCA9IHNwcmludGYoCiAgICAgICAgICAgICAgICAgICAgJyUwOHMlMDRzJTAzeCcsCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmdldFRpbWVMb3coKS0+dG9TdHJpbmcoKSwKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Z2V0VGltZU1pZCgpLT50b1N0cmluZygpLAogICAgICAgICAgICAgICAgICAgIGhleGRlYygkdGhpcy0+Z2V0VGltZUhpQW5kVmVyc2lvbigpLT50b1N0cmluZygpKSAmIDB4MGZmZgogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICR0aW1lc3RhbXAgPSBzcHJpbnRmKAogICAgICAgICAgICAgICAgICAgICclMDN4JTA0cyUwOHMnLAogICAgICAgICAgICAgICAgICAgIGhleGRlYygkdGhpcy0+Z2V0VGltZUhpQW5kVmVyc2lvbigpLT50b1N0cmluZygpKSAmIDB4MGZmZiwKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Z2V0VGltZU1pZCgpLT50b1N0cmluZygpLAogICAgICAgICAgICAgICAgICAgICR0aGlzLT5nZXRUaW1lTG93KCktPnRvU3RyaW5nKCkKICAgICAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IEhleGFkZWNpbWFsKCR0aW1lc3RhbXApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWZXJzaW9uKCk6ID9pbnQKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmlzTmlsKCkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBhcnJheSAkcGFydHMgKi8KICAgICAgICAkcGFydHMgPSB1bnBhY2soJ24qJywgJHRoaXMtPmJ5dGVzKTsKCiAgICAgICAgcmV0dXJuIChpbnQpICRwYXJ0c1s0XSA+PiAxMjsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGlzQ29ycmVjdFZhcmlhbnQoKTogYm9vbAogICAgewogICAgICAgIGlmICgkdGhpcy0+aXNOaWwoKSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0VmFyaWFudCgpID09PSBVdWlkOjpSRkNfNDEyMjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/FieldsInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFJmYzQxMjI7Cgp1c2UgUmFtc2V5XFV1aWRcRmllbGRzXEZpZWxkc0ludGVyZmFjZSBhcyBCYXNlRmllbGRzSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxIZXhhZGVjaW1hbDsKCi8qKgogKiBSRkMgNDEyMiBkZWZpbmVzIGZpZWxkcyBmb3IgYSBzcGVjaWZpYyB2YXJpYW50IG9mIFVVSUQKICoKICogVGhlIGZpZWxkcyBvZiBhbiBSRkMgNDEyMiB2YXJpYW50IFVVSUQgYXJlOgogKgogKiAqICoqdGltZV9sb3cqKjogVGhlIGxvdyBmaWVsZCBvZiB0aGUgdGltZXN0YW1wLCBhbiB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlcgogKiAqICoqdGltZV9taWQqKjogVGhlIG1pZGRsZSBmaWVsZCBvZiB0aGUgdGltZXN0YW1wLCBhbiB1bnNpZ25lZCAxNi1iaXQgaW50ZWdlcgogKiAqICoqdGltZV9oaV9hbmRfdmVyc2lvbioqOiBUaGUgaGlnaCBmaWVsZCBvZiB0aGUgdGltZXN0YW1wIG11bHRpcGxleGVkIHdpdGgKICogICB0aGUgdmVyc2lvbiBudW1iZXIsIGFuIHVuc2lnbmVkIDE2LWJpdCBpbnRlZ2VyCiAqICogKipjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkKio6IFRoZSBoaWdoIGZpZWxkIG9mIHRoZSBjbG9jayBzZXF1ZW5jZQogKiAgIG11bHRpcGxleGVkIHdpdGggdGhlIHZhcmlhbnQsIGFuIHVuc2lnbmVkIDgtYml0IGludGVnZXIKICogKiAqKmNsb2NrX3NlcV9sb3cqKjogVGhlIGxvdyBmaWVsZCBvZiB0aGUgY2xvY2sgc2VxdWVuY2UsIGFuIHVuc2lnbmVkCiAqICAgOC1iaXQgaW50ZWdlcgogKiAqICoqbm9kZSoqOiBUaGUgc3BhdGlhbGx5IHVuaXF1ZSBub2RlIGlkZW50aWZpZXIsIGFuIHVuc2lnbmVkIDQ4LWJpdAogKiAgIGludGVnZXIKICoKICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDEyMiNzZWN0aW9uLTQuMSBSRkMgNDEyMiwgwqcgNC4xOiBGb3JtYXQKICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KaW50ZXJmYWNlIEZpZWxkc0ludGVyZmFjZSBleHRlbmRzIEJhc2VGaWVsZHNJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBmdWxsIDE2LWJpdCBjbG9jayBzZXF1ZW5jZSwgd2l0aCB0aGUgdmFyaWFudCBiaXRzICh0d28gbW9zdAogICAgICogc2lnbmlmaWNhbnQgYml0cykgbWFza2VkIG91dAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xvY2tTZXEoKTogSGV4YWRlY2ltYWw7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBoaWdoIGZpZWxkIG9mIHRoZSBjbG9jayBzZXF1ZW5jZSBtdWx0aXBsZXhlZCB3aXRoIHRoZSB2YXJpYW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbG9ja1NlcUhpQW5kUmVzZXJ2ZWQoKTogSGV4YWRlY2ltYWw7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBsb3cgZmllbGQgb2YgdGhlIGNsb2NrIHNlcXVlbmNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbG9ja1NlcUxvdygpOiBIZXhhZGVjaW1hbDsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG5vZGUgZmllbGQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vZGUoKTogSGV4YWRlY2ltYWw7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBoaWdoIGZpZWxkIG9mIHRoZSB0aW1lc3RhbXAgbXVsdGlwbGV4ZWQgd2l0aCB0aGUgdmVyc2lvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZUhpQW5kVmVyc2lvbigpOiBIZXhhZGVjaW1hbDsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGxvdyBmaWVsZCBvZiB0aGUgdGltZXN0YW1wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lTG93KCk6IEhleGFkZWNpbWFsOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbWlkZGxlIGZpZWxkIG9mIHRoZSB0aW1lc3RhbXAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVNaWQoKTogSGV4YWRlY2ltYWw7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBmdWxsIDYwLWJpdCB0aW1lc3RhbXAsIHdpdGhvdXQgdGhlIHZlcnNpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVzdGFtcCgpOiBIZXhhZGVjaW1hbDsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHZhcmlhbnQKICAgICAqCiAgICAgKiBUaGUgdmFyaWFudCBudW1iZXIgZGVzY3JpYmVzIHRoZSBsYXlvdXQgb2YgdGhlIFVVSUQuIFRoZSB2YXJpYW50CiAgICAgKiBudW1iZXIgaGFzIHRoZSBmb2xsb3dpbmcgbWVhbmluZzoKICAgICAqCiAgICAgKiAtIDAgLSBSZXNlcnZlZCBmb3IgTkNTIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKICAgICAqIC0gMiAtIFRoZSBSRkMgNDEyMiB2YXJpYW50CiAgICAgKiAtIDYgLSBSZXNlcnZlZCwgTWljcm9zb2Z0IENvcnBvcmF0aW9uIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKICAgICAqIC0gNyAtIFJlc2VydmVkIGZvciBmdXR1cmUgZGVmaW5pdGlvbgogICAgICoKICAgICAqIEZvciBSRkMgNDEyMiB2YXJpYW50IFVVSURzLCB0aGlzIHZhbHVlIHNob3VsZCBhbHdheXMgYmUgdGhlIGludGVnZXIgYDJgLgogICAgICoKICAgICAqIEBsaW5rIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQxMjIjc2VjdGlvbi00LjEuMSBSRkMgNDEyMiwgwqcgNC4xLjE6IFZhcmlhbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFZhcmlhbnQoKTogaW50OwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdmVyc2lvbgogICAgICoKICAgICAqIFRoZSB2ZXJzaW9uIG51bWJlciBkZXNjcmliZXMgaG93IHRoZSBVVUlEIHdhcyBnZW5lcmF0ZWQgYW5kIGhhcyB0aGUKICAgICAqIGZvbGxvd2luZyBtZWFuaW5nOgogICAgICoKICAgICAqIDEuIFRpbWUtYmFzZWQgVVVJRAogICAgICogMi4gRENFIHNlY3VyaXR5IFVVSUQKICAgICAqIDMuIE5hbWUtYmFzZWQgVVVJRCBoYXNoZWQgd2l0aCBNRDUKICAgICAqIDQuIFJhbmRvbWx5IGdlbmVyYXRlZCBVVUlECiAgICAgKiA1LiBOYW1lLWJhc2VkIFVVSUQgaGFzaGVkIHdpdGggU0hBLTEKICAgICAqCiAgICAgKiBUaGlzIHJldHVybnMgYG51bGxgIGlmIHRoZSBVVUlEIGlzIG5vdCBhbiBSRkMgNDEyMiB2YXJpYW50LCBzaW5jZSB2ZXJzaW9uCiAgICAgKiBpcyBvbmx5IG1lYW5pbmdmdWwgZm9yIHRoaXMgdmFyaWFudC4KICAgICAqCiAgICAgKiBAbGluayBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MTIyI3NlY3Rpb24tNC4xLjMgUkZDIDQxMjIsIMKnIDQuMS4zOiBWZXJzaW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWZXJzaW9uKCk6ID9pbnQ7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlc2UgZmllbGRzIHJlcHJlc2VudCBhIG5pbCBVVUlECiAgICAgKgogICAgICogVGhlIG5pbCBVVUlEIGlzIHNwZWNpYWwgZm9ybSBvZiBVVUlEIHRoYXQgaXMgc3BlY2lmaWVkIHRvIGhhdmUgYWxsIDEyOAogICAgICogYml0cyBzZXQgdG8gemVyby4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzTmlsKCk6IGJvb2w7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/NilTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFJmYzQxMjI7CgovKioKICogUHJvdmlkZXMgY29tbW9uIGZ1bmN0aW9uYWxpdHkgZm9yIG5pbCBVVUlEcwogKgogKiBUaGUgbmlsIFVVSUQgaXMgc3BlY2lhbCBmb3JtIG9mIFVVSUQgdGhhdCBpcyBzcGVjaWZpZWQgdG8gaGF2ZSBhbGwgMTI4IGJpdHMKICogc2V0IHRvIHplcm8uCiAqCiAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MTIyI3NlY3Rpb24tNC4xLjcgUkZDIDQxMjIsIMKnIDQuMS43OiBOaWwgVVVJRAogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwp0cmFpdCBOaWxUcmFpdAp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGJ5dGVzIHRoYXQgY29tcHJpc2UgdGhlIGZpZWxkcwogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZ2V0Qnl0ZXMoKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBieXRlIHN0cmluZyByZXByZXNlbnRzIGEgbmlsIFVVSUQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzTmlsKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldEJ5dGVzKCkgPT09ICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCI7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/NilUuid.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFJmYzQxMjI7Cgp1c2UgUmFtc2V5XFV1aWRcVXVpZDsKCi8qKgogKiBUaGUgbmlsIFVVSUQgaXMgc3BlY2lhbCBmb3JtIG9mIFVVSUQgdGhhdCBpcyBzcGVjaWZpZWQgdG8gaGF2ZSBhbGwgMTI4IGJpdHMKICogc2V0IHRvIHplcm8KICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KZmluYWwgY2xhc3MgTmlsVXVpZCBleHRlbmRzIFV1aWQgaW1wbGVtZW50cyBVdWlkSW50ZXJmYWNlCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/UuidBuilder.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFJmYzQxMjI7Cgp1c2UgUmFtc2V5XFV1aWRcQnVpbGRlclxVdWlkQnVpbGRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvZGVjXENvZGVjSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXE51bWJlckNvbnZlcnRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXFVuYWJsZVRvQnVpbGRVdWlkRXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcTm9uc3RhbmRhcmRcVXVpZFY2Owp1c2UgUmFtc2V5XFV1aWRcUmZjNDEyMlxVdWlkSW50ZXJmYWNlIGFzIFJmYzQxMjJVdWlkSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcVXVpZEludGVyZmFjZTsKdXNlIFRocm93YWJsZTsKCi8qKgogKiBVdWlkQnVpbGRlciBidWlsZHMgaW5zdGFuY2VzIG9mIFJGQyA0MTIyIFVVSURzCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmNsYXNzIFV1aWRCdWlsZGVyIGltcGxlbWVudHMgVXVpZEJ1aWxkZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAdmFyIE51bWJlckNvbnZlcnRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRudW1iZXJDb252ZXJ0ZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkdGltZUNvbnZlcnRlcjsKCiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgdGhlIERlZmF1bHRVdWlkQnVpbGRlcgogICAgICoKICAgICAqIEBwYXJhbSBOdW1iZXJDb252ZXJ0ZXJJbnRlcmZhY2UgJG51bWJlckNvbnZlcnRlciBUaGUgbnVtYmVyIGNvbnZlcnRlciB0bwogICAgICogICAgIHVzZSB3aGVuIGNvbnN0cnVjdGluZyB0aGUgVXVpZAogICAgICogQHBhcmFtIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UgJHRpbWVDb252ZXJ0ZXIgVGhlIHRpbWUgY29udmVydGVyIHRvIHVzZQogICAgICogICAgIGZvciBjb252ZXJ0aW5nIHRpbWVzdGFtcHMgZXh0cmFjdGVkIGZyb20gYSBVVUlEIHRvIFVuaXggdGltZXN0YW1wcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgTnVtYmVyQ29udmVydGVySW50ZXJmYWNlICRudW1iZXJDb252ZXJ0ZXIsCiAgICAgICAgVGltZUNvbnZlcnRlckludGVyZmFjZSAkdGltZUNvbnZlcnRlcgogICAgKSB7CiAgICAgICAgJHRoaXMtPm51bWJlckNvbnZlcnRlciA9ICRudW1iZXJDb252ZXJ0ZXI7CiAgICAgICAgJHRoaXMtPnRpbWVDb252ZXJ0ZXIgPSAkdGltZUNvbnZlcnRlcjsKICAgIH0KCiAgICAvKioKICAgICAqIEJ1aWxkcyBhbmQgcmV0dXJucyBhIFV1aWQKICAgICAqCiAgICAgKiBAcGFyYW0gQ29kZWNJbnRlcmZhY2UgJGNvZGVjIFRoZSBjb2RlYyB0byB1c2UgZm9yIGJ1aWxkaW5nIHRoaXMgVXVpZCBpbnN0YW5jZQogICAgICogQHBhcmFtIHN0cmluZyAkYnl0ZXMgVGhlIGJ5dGUgc3RyaW5nIGZyb20gd2hpY2ggdG8gY29uc3RydWN0IGEgVVVJRAogICAgICoKICAgICAqIEByZXR1cm4gUmZjNDEyMlV1aWRJbnRlcmZhY2UgVXVpZEJ1aWxkZXIgcmV0dXJucyBpbnN0YW5jZXMgb2YgUmZjNDEyMlV1aWRJbnRlcmZhY2UKICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYnVpbGQoQ29kZWNJbnRlcmZhY2UgJGNvZGVjLCBzdHJpbmcgJGJ5dGVzKTogVXVpZEludGVyZmFjZQogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRmaWVsZHMgPSAkdGhpcy0+YnVpbGRGaWVsZHMoJGJ5dGVzKTsKCiAgICAgICAgICAgIGlmICgkZmllbGRzLT5pc05pbCgpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5pbFV1aWQoJGZpZWxkcywgJHRoaXMtPm51bWJlckNvbnZlcnRlciwgJGNvZGVjLCAkdGhpcy0+dGltZUNvbnZlcnRlcik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHN3aXRjaCAoJGZpZWxkcy0+Z2V0VmVyc2lvbigpKSB7CiAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVdWlkVjEoJGZpZWxkcywgJHRoaXMtPm51bWJlckNvbnZlcnRlciwgJGNvZGVjLCAkdGhpcy0+dGltZUNvbnZlcnRlcik7CiAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVdWlkVjIoJGZpZWxkcywgJHRoaXMtPm51bWJlckNvbnZlcnRlciwgJGNvZGVjLCAkdGhpcy0+dGltZUNvbnZlcnRlcik7CiAgICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVdWlkVjMoJGZpZWxkcywgJHRoaXMtPm51bWJlckNvbnZlcnRlciwgJGNvZGVjLCAkdGhpcy0+dGltZUNvbnZlcnRlcik7CiAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVdWlkVjQoJGZpZWxkcywgJHRoaXMtPm51bWJlckNvbnZlcnRlciwgJGNvZGVjLCAkdGhpcy0+dGltZUNvbnZlcnRlcik7CiAgICAgICAgICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVdWlkVjUoJGZpZWxkcywgJHRoaXMtPm51bWJlckNvbnZlcnRlciwgJGNvZGVjLCAkdGhpcy0+dGltZUNvbnZlcnRlcik7CiAgICAgICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVdWlkVjYoJGZpZWxkcywgJHRoaXMtPm51bWJlckNvbnZlcnRlciwgJGNvZGVjLCAkdGhpcy0+dGltZUNvbnZlcnRlcik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdUaGUgVVVJRCB2ZXJzaW9uIGluIHRoZSBnaXZlbiBmaWVsZHMgaXMgbm90IHN1cHBvcnRlZCAnCiAgICAgICAgICAgICAgICAuICdieSB0aGlzIFVVSUQgYnVpbGRlcicKICAgICAgICAgICAgKTsKICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFVuYWJsZVRvQnVpbGRVdWlkRXhjZXB0aW9uKCRlLT5nZXRNZXNzYWdlKCksIChpbnQpICRlLT5nZXRDb2RlKCksICRlKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBQcm94eSBtZXRob2QgdG8gYWxsb3cgaW5qZWN0aW5nIGEgbW9jaywgZm9yIHRlc3RpbmcKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGJ1aWxkRmllbGRzKHN0cmluZyAkYnl0ZXMpOiBGaWVsZHNJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gbmV3IEZpZWxkcygkYnl0ZXMpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/UuidInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFJmYzQxMjI7Cgp1c2UgUmFtc2V5XFV1aWRcVXVpZEludGVyZmFjZSBhcyBCYXNlVXVpZEludGVyZmFjZTsKCi8qKgogKiBBbHNvIGtub3duIGFzIGEgTGVhY2gtU2FseiB2YXJpYW50IFVVSUQsIGFuIFJGQyA0MTIyIHZhcmlhbnQgVVVJRCBpcyBhCiAqIHVuaXZlcnNhbGx5IHVuaXF1ZSBpZGVudGlmaWVyIGRlZmluZWQgYnkgUkZDIDQxMjIKICoKICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQxMjIgUkZDIDQxMjIKICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KaW50ZXJmYWNlIFV1aWRJbnRlcmZhY2UgZXh0ZW5kcyBCYXNlVXVpZEludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHN0cmluZyBzdGFuZGFyZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgVVVJRCBhcyBhIFVSTgogICAgICoKICAgICAqIEBsaW5rIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVW5pZm9ybV9SZXNvdXJjZV9OYW1lIFVuaWZvcm0gUmVzb3VyY2UgTmFtZQogICAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQxMjIjc2VjdGlvbi0zIFJGQyA0MTIyLCDCpyAzOiBOYW1lc3BhY2UgUmVnaXN0cmF0aW9uIFRlbXBsYXRlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVcm4oKTogc3RyaW5nOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/UuidV1.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFJmYzQxMjI7Cgp1c2UgRGF0ZVRpbWVJbW11dGFibGU7CnVzZSBEYXRlVGltZUludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvZGVjXENvZGVjSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXE51bWJlckNvbnZlcnRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXERhdGVUaW1lRXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlIGFzIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxVdWlkOwp1c2UgVGhyb3dhYmxlOwoKdXNlIGZ1bmN0aW9uIHN0cl9wYWQ7Cgp1c2UgY29uc3QgU1RSX1BBRF9MRUZUOwoKLyoqCiAqIFRpbWUtYmFzZWQsIG9yIHZlcnNpb24gMSwgVVVJRHMgaW5jbHVkZSB0aW1lc3RhbXAsIGNsb2NrIHNlcXVlbmNlLCBhbmQgbm9kZQogKiB2YWx1ZXMgdGhhdCBhcmUgY29tYmluZWQgaW50byBhIDEyOC1iaXQgdW5zaWduZWQgaW50ZWdlcgogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpmaW5hbCBjbGFzcyBVdWlkVjEgZXh0ZW5kcyBVdWlkIGltcGxlbWVudHMgVXVpZEludGVyZmFjZQp7CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSB2ZXJzaW9uIDEgKHRpbWUtYmFzZWQpIFVVSUQKICAgICAqCiAgICAgKiBAcGFyYW0gUmZjNDEyMkZpZWxkc0ludGVyZmFjZSAkZmllbGRzIFRoZSBmaWVsZHMgZnJvbSB3aGljaCB0byBjb25zdHJ1Y3QgYSBVVUlECiAgICAgKiBAcGFyYW0gTnVtYmVyQ29udmVydGVySW50ZXJmYWNlICRudW1iZXJDb252ZXJ0ZXIgVGhlIG51bWJlciBjb252ZXJ0ZXIgdG8gdXNlCiAgICAgKiAgICAgZm9yIGNvbnZlcnRpbmcgaGV4IHZhbHVlcyB0by9mcm9tIGludGVnZXJzCiAgICAgKiBAcGFyYW0gQ29kZWNJbnRlcmZhY2UgJGNvZGVjIFRoZSBjb2RlYyB0byB1c2Ugd2hlbiBlbmNvZGluZyBvciBkZWNvZGluZwogICAgICogICAgIFVVSUQgc3RyaW5ncwogICAgICogQHBhcmFtIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UgJHRpbWVDb252ZXJ0ZXIgVGhlIHRpbWUgY29udmVydGVyIHRvIHVzZQogICAgICogICAgIGZvciBjb252ZXJ0aW5nIHRpbWVzdGFtcHMgZXh0cmFjdGVkIGZyb20gYSBVVUlEIHRvIHVuaXggdGltZXN0YW1wcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgUmZjNDEyMkZpZWxkc0ludGVyZmFjZSAkZmllbGRzLAogICAgICAgIE51bWJlckNvbnZlcnRlckludGVyZmFjZSAkbnVtYmVyQ29udmVydGVyLAogICAgICAgIENvZGVjSW50ZXJmYWNlICRjb2RlYywKICAgICAgICBUaW1lQ29udmVydGVySW50ZXJmYWNlICR0aW1lQ29udmVydGVyCiAgICApIHsKICAgICAgICBpZiAoJGZpZWxkcy0+Z2V0VmVyc2lvbigpICE9PSBVdWlkOjpVVUlEX1RZUEVfVElNRSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0ZpZWxkcyB1c2VkIHRvIGNyZWF0ZSBhIFV1aWRWMSBtdXN0IHJlcHJlc2VudCBhICcKICAgICAgICAgICAgICAgIC4gJ3ZlcnNpb24gMSAodGltZS1iYXNlZCkgVVVJRCcKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJGZpZWxkcywgJG51bWJlckNvbnZlcnRlciwgJGNvZGVjLCAkdGltZUNvbnZlcnRlcik7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgRGF0ZVRpbWVJbnRlcmZhY2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgdGltZXN0YW1wIGFzc29jaWF0ZWQKICAgICAqIHdpdGggdGhlIFVVSUQKICAgICAqCiAgICAgKiBUaGUgdGltZXN0YW1wIHZhbHVlIGlzIG9ubHkgbWVhbmluZ2Z1bCBpbiBhIHRpbWUtYmFzZWQgVVVJRCwgd2hpY2gKICAgICAqIGhhcyB2ZXJzaW9uIHR5cGUgMS4KICAgICAqCiAgICAgKiBAcmV0dXJuIERhdGVUaW1lSW1tdXRhYmxlIEEgUEhQIERhdGVUaW1lSW1tdXRhYmxlIGluc3RhbmNlIHJlcHJlc2VudGluZwogICAgICogICAgIHRoZSB0aW1lc3RhbXAgb2YgYSB2ZXJzaW9uIDEgVVVJRAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGF0ZVRpbWUoKTogRGF0ZVRpbWVJbnRlcmZhY2UKICAgIHsKICAgICAgICAkdGltZSA9ICR0aGlzLT50aW1lQ29udmVydGVyLT5jb252ZXJ0VGltZSgkdGhpcy0+ZmllbGRzLT5nZXRUaW1lc3RhbXAoKSk7CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWVJbW11dGFibGUoCiAgICAgICAgICAgICAgICAnQCcKICAgICAgICAgICAgICAgIC4gJHRpbWUtPmdldFNlY29uZHMoKS0+dG9TdHJpbmcoKQogICAgICAgICAgICAgICAgLiAnLicKICAgICAgICAgICAgICAgIC4gc3RyX3BhZCgkdGltZS0+Z2V0TWljcm9zZWNvbmRzKCktPnRvU3RyaW5nKCksIDYsICcwJywgU1RSX1BBRF9MRUZUKQogICAgICAgICAgICApOwogICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSAkZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRGF0ZVRpbWVFeGNlcHRpb24oJGUtPmdldE1lc3NhZ2UoKSwgKGludCkgJGUtPmdldENvZGUoKSwgJGUpOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/UuidV2.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFJmYzQxMjI7Cgp1c2UgRGF0ZVRpbWVJbW11dGFibGU7CnVzZSBEYXRlVGltZUludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvZGVjXENvZGVjSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXE51bWJlckNvbnZlcnRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXERhdGVUaW1lRXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlIGFzIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxUeXBlXEludGVnZXIgYXMgSW50ZWdlck9iamVjdDsKdXNlIFJhbXNleVxVdWlkXFV1aWQ7CnVzZSBUaHJvd2FibGU7Cgp1c2UgZnVuY3Rpb24gaGV4ZGVjOwp1c2UgZnVuY3Rpb24gc3RyX3BhZDsKCnVzZSBjb25zdCBTVFJfUEFEX0xFRlQ7CgovKioKICogRENFIFNlY3VyaXR5IHZlcnNpb24sIG9yIHZlcnNpb24gMiwgVVVJRHMgaW5jbHVkZSBsb2NhbCBkb21haW4gaWRlbnRpZmllciwKICogbG9jYWwgSUQgZm9yIHRoZSBzcGVjaWZpZWQgZG9tYWluLCBhbmQgbm9kZSB2YWx1ZXMgdGhhdCBhcmUgY29tYmluZWQgaW50byBhCiAqIDEyOC1iaXQgdW5zaWduZWQgaW50ZWdlcgogKgogKiBAbGluayBodHRwczovL3B1YmxpY2F0aW9ucy5vcGVuZ3JvdXAub3JnL2MzMTEgRENFIDEuMTogQXV0aGVudGljYXRpb24gYW5kIFNlY3VyaXR5IFNlcnZpY2VzCiAqIEBsaW5rIGh0dHBzOi8vcHVibGljYXRpb25zLm9wZW5ncm91cC5vcmcvYzcwNiBEQ0UgMS4xOiBSZW1vdGUgUHJvY2VkdXJlIENhbGwKICogQGxpbmsgaHR0cHM6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk2OTg5ODk5L2NoYXA1Lmh0bSN0YWdjamhfMDhfMDJfMDFfMDEgRENFIDEuMTogQXV0aCAmIFNlYywgwqc1LjIuMS4xCiAqIEBsaW5rIGh0dHBzOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5Njk4OTg5OS9jaGFwMTEuaHRtI3RhZ2NqaF8xNF8wNV8wMV8wMSBEQ0UgMS4xOiBBdXRoICYgU2VjLCDCpzExLjUuMS4xCiAqIEBsaW5rIGh0dHBzOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTYyOTM5OS9hcGR4YS5odG0gRENFIDEuMTogUlBDLCBBcHBlbmRpeCBBCiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvdXVpZCBHbyBwYWNrYWdlIGZvciBVVUlEcyAoaW5jbHVkZXMgRENFIGltcGxlbWVudGF0aW9uKQogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpmaW5hbCBjbGFzcyBVdWlkVjIgZXh0ZW5kcyBVdWlkIGltcGxlbWVudHMgVXVpZEludGVyZmFjZQp7CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSB2ZXJzaW9uIDIgKERDRSBTZWN1cml0eSkgVVVJRAogICAgICoKICAgICAqIEBwYXJhbSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlICRmaWVsZHMgVGhlIGZpZWxkcyBmcm9tIHdoaWNoIHRvIGNvbnN0cnVjdCBhIFVVSUQKICAgICAqIEBwYXJhbSBOdW1iZXJDb252ZXJ0ZXJJbnRlcmZhY2UgJG51bWJlckNvbnZlcnRlciBUaGUgbnVtYmVyIGNvbnZlcnRlciB0byB1c2UKICAgICAqICAgICBmb3IgY29udmVydGluZyBoZXggdmFsdWVzIHRvL2Zyb20gaW50ZWdlcnMKICAgICAqIEBwYXJhbSBDb2RlY0ludGVyZmFjZSAkY29kZWMgVGhlIGNvZGVjIHRvIHVzZSB3aGVuIGVuY29kaW5nIG9yIGRlY29kaW5nCiAgICAgKiAgICAgVVVJRCBzdHJpbmdzCiAgICAgKiBAcGFyYW0gVGltZUNvbnZlcnRlckludGVyZmFjZSAkdGltZUNvbnZlcnRlciBUaGUgdGltZSBjb252ZXJ0ZXIgdG8gdXNlCiAgICAgKiAgICAgZm9yIGNvbnZlcnRpbmcgdGltZXN0YW1wcyBleHRyYWN0ZWQgZnJvbSBhIFVVSUQgdG8gdW5peCB0aW1lc3RhbXBzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBSZmM0MTIyRmllbGRzSW50ZXJmYWNlICRmaWVsZHMsCiAgICAgICAgTnVtYmVyQ29udmVydGVySW50ZXJmYWNlICRudW1iZXJDb252ZXJ0ZXIsCiAgICAgICAgQ29kZWNJbnRlcmZhY2UgJGNvZGVjLAogICAgICAgIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UgJHRpbWVDb252ZXJ0ZXIKICAgICkgewogICAgICAgIGlmICgkZmllbGRzLT5nZXRWZXJzaW9uKCkgIT09IFV1aWQ6OlVVSURfVFlQRV9EQ0VfU0VDVVJJVFkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdGaWVsZHMgdXNlZCB0byBjcmVhdGUgYSBVdWlkVjIgbXVzdCByZXByZXNlbnQgYSAnCiAgICAgICAgICAgICAgICAuICd2ZXJzaW9uIDIgKERDRSBTZWN1cml0eSkgVVVJRCcKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJGZpZWxkcywgJG51bWJlckNvbnZlcnRlciwgJGNvZGVjLCAkdGltZUNvbnZlcnRlcik7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgRGF0ZVRpbWVJbnRlcmZhY2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgdGltZXN0YW1wIGFzc29jaWF0ZWQKICAgICAqIHdpdGggdGhlIFVVSUQKICAgICAqCiAgICAgKiBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IGEgdmVyc2lvbiAyIFVVSUQgc3VmZmVycyBmcm9tIHNvbWUgbG9zcyBvZgogICAgICogZmlkZWxpdHkgb2YgdGhlIHRpbWVzdGFtcCwgZHVlIHRvIHJlcGxhY2luZyB0aGUgdGltZV9sb3cgZmllbGQgd2l0aCB0aGUKICAgICAqIGxvY2FsIGlkZW50aWZpZXIuIFdoZW4gY29uc3RydWN0aW5nIHRoZSB0aW1lc3RhbXAgdmFsdWUgZm9yIGRhdGUKICAgICAqIHB1cnBvc2VzLCB3ZSByZXBsYWNlIHRoZSBsb2NhbCBpZGVudGlmaWVyIGJpdHMgd2l0aCB6ZXJvcy4gQXMgYSByZXN1bHQsCiAgICAgKiB0aGUgdGltZXN0YW1wIGNhbiBiZSBvZmYgYnkgYSByYW5nZSBvZiAwIHRvIDQyOS40OTY3Mjk1IHNlY29uZHMgKG9yIDcKICAgICAqIG1pbnV0ZXMsIDkgc2Vjb25kcywgYW5kIDQ5NjczMCBtaWNyb3NlY29uZHMpLgogICAgICoKICAgICAqIEFzdHV0ZSBvYnNlcnZlcnMgbWlnaHQgbm90ZSB0aGlzIHZhbHVlIGRpcmVjdGx5IGNvcnJlc3BvbmRzIHRvIDJeMzIgLSAxLAogICAgICogb3IgMHhmZmZmZmZmZi4gVGhlIGxvY2FsIGlkZW50aWZpZXIgaXMgMzItYml0cywgYW5kIHdlIGhhdmUgc2V0IGVhY2ggb2YKICAgICAqIHRoZXNlIGJpdHMgdG8gMCwgc28gdGhlIG1heGltdW0gcmFuZ2Ugb2YgdGltZXN0YW1wIGRyaWZ0IGlzIDB4MDAwMDAwMDAKICAgICAqIHRvIDB4ZmZmZmZmZmYgKGNvdW50ZWQgaW4gMTAwLW5hbm9zZWNvbmQgaW50ZXJ2YWxzKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIERhdGVUaW1lSW1tdXRhYmxlIEEgUEhQIERhdGVUaW1lSW1tdXRhYmxlIGluc3RhbmNlIHJlcHJlc2VudGluZwogICAgICogICAgIHRoZSB0aW1lc3RhbXAgb2YgYSB2ZXJzaW9uIDIgVVVJRAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGF0ZVRpbWUoKTogRGF0ZVRpbWVJbnRlcmZhY2UKICAgIHsKICAgICAgICAkdGltZSA9ICR0aGlzLT50aW1lQ29udmVydGVyLT5jb252ZXJ0VGltZSgkdGhpcy0+ZmllbGRzLT5nZXRUaW1lc3RhbXAoKSk7CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWVJbW11dGFibGUoCiAgICAgICAgICAgICAgICAnQCcKICAgICAgICAgICAgICAgIC4gJHRpbWUtPmdldFNlY29uZHMoKS0+dG9TdHJpbmcoKQogICAgICAgICAgICAgICAgLiAnLicKICAgICAgICAgICAgICAgIC4gc3RyX3BhZCgkdGltZS0+Z2V0TWljcm9zZWNvbmRzKCktPnRvU3RyaW5nKCksIDYsICcwJywgU1RSX1BBRF9MRUZUKQogICAgICAgICAgICApOwogICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSAkZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRGF0ZVRpbWVFeGNlcHRpb24oJGUtPmdldE1lc3NhZ2UoKSwgKGludCkgJGUtPmdldENvZGUoKSwgJGUpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGxvY2FsIGRvbWFpbiB1c2VkIHRvIGNyZWF0ZSB0aGlzIHZlcnNpb24gMiBVVUlECiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMb2NhbERvbWFpbigpOiBpbnQKICAgIHsKICAgICAgICAvKiogQHZhciBSZmM0MTIyRmllbGRzSW50ZXJmYWNlICRmaWVsZHMgKi8KICAgICAgICAkZmllbGRzID0gJHRoaXMtPmdldEZpZWxkcygpOwoKICAgICAgICByZXR1cm4gKGludCkgaGV4ZGVjKCRmaWVsZHMtPmdldENsb2NrU2VxTG93KCktPnRvU3RyaW5nKCkpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc3RyaW5nIG5hbWUgb2YgdGhlIGxvY2FsIGRvbWFpbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TG9jYWxEb21haW5OYW1lKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBVdWlkOjpEQ0VfRE9NQUlOX05BTUVTWyR0aGlzLT5nZXRMb2NhbERvbWFpbigpXTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGxvY2FsIGlkZW50aWZpZXIgZm9yIHRoZSBkb21haW4gdXNlZCB0byBjcmVhdGUgdGhpcyB2ZXJzaW9uIDIgVVVJRAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TG9jYWxJZGVudGlmaWVyKCk6IEludGVnZXJPYmplY3QKICAgIHsKICAgICAgICAvKiogQHZhciBSZmM0MTIyRmllbGRzSW50ZXJmYWNlICRmaWVsZHMgKi8KICAgICAgICAkZmllbGRzID0gJHRoaXMtPmdldEZpZWxkcygpOwoKICAgICAgICByZXR1cm4gbmV3IEludGVnZXJPYmplY3QoCiAgICAgICAgICAgICR0aGlzLT5udW1iZXJDb252ZXJ0ZXItPmZyb21IZXgoJGZpZWxkcy0+Z2V0VGltZUxvdygpLT50b1N0cmluZygpKQogICAgICAgICk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/UuidV3.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFJmYzQxMjI7Cgp1c2UgUmFtc2V5XFV1aWRcQ29kZWNcQ29kZWNJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcTnVtYmVyQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcUmZjNDEyMlxGaWVsZHNJbnRlcmZhY2UgYXMgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXFV1aWQ7CgovKioKICogVmVyc2lvbiAzIFVVSURzIGFyZSBuYW1lZC1iYXNlZCwgdXNpbmcgY29tYmluYXRpb24gb2YgYSBuYW1lc3BhY2UgYW5kIG5hbWUKICogdGhhdCBhcmUgaGFzaGVkIGludG8gYSAxMjgtYml0IHVuc2lnbmVkIGludGVnZXIgdXNpbmcgTUQ1CiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmZpbmFsIGNsYXNzIFV1aWRWMyBleHRlbmRzIFV1aWQgaW1wbGVtZW50cyBVdWlkSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIHZlcnNpb24gMyAobmFtZS1iYXNlZCwgTUQ1LWhhc2hlZCkgVVVJRAogICAgICoKICAgICAqIEBwYXJhbSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlICRmaWVsZHMgVGhlIGZpZWxkcyBmcm9tIHdoaWNoIHRvIGNvbnN0cnVjdCBhIFVVSUQKICAgICAqIEBwYXJhbSBOdW1iZXJDb252ZXJ0ZXJJbnRlcmZhY2UgJG51bWJlckNvbnZlcnRlciBUaGUgbnVtYmVyIGNvbnZlcnRlciB0byB1c2UKICAgICAqICAgICBmb3IgY29udmVydGluZyBoZXggdmFsdWVzIHRvL2Zyb20gaW50ZWdlcnMKICAgICAqIEBwYXJhbSBDb2RlY0ludGVyZmFjZSAkY29kZWMgVGhlIGNvZGVjIHRvIHVzZSB3aGVuIGVuY29kaW5nIG9yIGRlY29kaW5nCiAgICAgKiAgICAgVVVJRCBzdHJpbmdzCiAgICAgKiBAcGFyYW0gVGltZUNvbnZlcnRlckludGVyZmFjZSAkdGltZUNvbnZlcnRlciBUaGUgdGltZSBjb252ZXJ0ZXIgdG8gdXNlCiAgICAgKiAgICAgZm9yIGNvbnZlcnRpbmcgdGltZXN0YW1wcyBleHRyYWN0ZWQgZnJvbSBhIFVVSUQgdG8gdW5peCB0aW1lc3RhbXBzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBSZmM0MTIyRmllbGRzSW50ZXJmYWNlICRmaWVsZHMsCiAgICAgICAgTnVtYmVyQ29udmVydGVySW50ZXJmYWNlICRudW1iZXJDb252ZXJ0ZXIsCiAgICAgICAgQ29kZWNJbnRlcmZhY2UgJGNvZGVjLAogICAgICAgIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UgJHRpbWVDb252ZXJ0ZXIKICAgICkgewogICAgICAgIGlmICgkZmllbGRzLT5nZXRWZXJzaW9uKCkgIT09IFV1aWQ6OlVVSURfVFlQRV9IQVNIX01ENSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0ZpZWxkcyB1c2VkIHRvIGNyZWF0ZSBhIFV1aWRWMyBtdXN0IHJlcHJlc2VudCBhICcKICAgICAgICAgICAgICAgIC4gJ3ZlcnNpb24gMyAobmFtZS1iYXNlZCwgTUQ1LWhhc2hlZCkgVVVJRCcKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJGZpZWxkcywgJG51bWJlckNvbnZlcnRlciwgJGNvZGVjLCAkdGltZUNvbnZlcnRlcik7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/UuidV4.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFJmYzQxMjI7Cgp1c2UgUmFtc2V5XFV1aWRcQ29kZWNcQ29kZWNJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcTnVtYmVyQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcUmZjNDEyMlxGaWVsZHNJbnRlcmZhY2UgYXMgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXFV1aWQ7CgovKioKICogUmFuZG9tLCBvciB2ZXJzaW9uIDQsIFVVSURzIGFyZSByYW5kb21seSBvciBwc2V1ZG8tcmFuZG9tbHkgZ2VuZXJhdGVkIDEyOC1iaXQKICogaW50ZWdlcnMKICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KZmluYWwgY2xhc3MgVXVpZFY0IGV4dGVuZHMgVXVpZCBpbXBsZW1lbnRzIFV1aWRJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgdmVyc2lvbiA0IChyYW5kb20pIFVVSUQKICAgICAqCiAgICAgKiBAcGFyYW0gUmZjNDEyMkZpZWxkc0ludGVyZmFjZSAkZmllbGRzIFRoZSBmaWVsZHMgZnJvbSB3aGljaCB0byBjb25zdHJ1Y3QgYSBVVUlECiAgICAgKiBAcGFyYW0gTnVtYmVyQ29udmVydGVySW50ZXJmYWNlICRudW1iZXJDb252ZXJ0ZXIgVGhlIG51bWJlciBjb252ZXJ0ZXIgdG8gdXNlCiAgICAgKiAgICAgZm9yIGNvbnZlcnRpbmcgaGV4IHZhbHVlcyB0by9mcm9tIGludGVnZXJzCiAgICAgKiBAcGFyYW0gQ29kZWNJbnRlcmZhY2UgJGNvZGVjIFRoZSBjb2RlYyB0byB1c2Ugd2hlbiBlbmNvZGluZyBvciBkZWNvZGluZwogICAgICogICAgIFVVSUQgc3RyaW5ncwogICAgICogQHBhcmFtIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UgJHRpbWVDb252ZXJ0ZXIgVGhlIHRpbWUgY29udmVydGVyIHRvIHVzZQogICAgICogICAgIGZvciBjb252ZXJ0aW5nIHRpbWVzdGFtcHMgZXh0cmFjdGVkIGZyb20gYSBVVUlEIHRvIHVuaXggdGltZXN0YW1wcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgUmZjNDEyMkZpZWxkc0ludGVyZmFjZSAkZmllbGRzLAogICAgICAgIE51bWJlckNvbnZlcnRlckludGVyZmFjZSAkbnVtYmVyQ29udmVydGVyLAogICAgICAgIENvZGVjSW50ZXJmYWNlICRjb2RlYywKICAgICAgICBUaW1lQ29udmVydGVySW50ZXJmYWNlICR0aW1lQ29udmVydGVyCiAgICApIHsKICAgICAgICBpZiAoJGZpZWxkcy0+Z2V0VmVyc2lvbigpICE9PSBVdWlkOjpVVUlEX1RZUEVfUkFORE9NKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnRmllbGRzIHVzZWQgdG8gY3JlYXRlIGEgVXVpZFY0IG11c3QgcmVwcmVzZW50IGEgJwogICAgICAgICAgICAgICAgLiAndmVyc2lvbiA0IChyYW5kb20pIFVVSUQnCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRmaWVsZHMsICRudW1iZXJDb252ZXJ0ZXIsICRjb2RlYywgJHRpbWVDb252ZXJ0ZXIpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/UuidV5.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFJmYzQxMjI7Cgp1c2UgUmFtc2V5XFV1aWRcQ29kZWNcQ29kZWNJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcTnVtYmVyQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcUmZjNDEyMlxGaWVsZHNJbnRlcmZhY2UgYXMgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXFV1aWQ7CgovKioKICogVmVyc2lvbiA1IFVVSURzIGFyZSBuYW1lZC1iYXNlZCwgdXNpbmcgY29tYmluYXRpb24gb2YgYSBuYW1lc3BhY2UgYW5kIG5hbWUKICogdGhhdCBhcmUgaGFzaGVkIGludG8gYSAxMjgtYml0IHVuc2lnbmVkIGludGVnZXIgdXNpbmcgU0hBMQogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpmaW5hbCBjbGFzcyBVdWlkVjUgZXh0ZW5kcyBVdWlkIGltcGxlbWVudHMgVXVpZEludGVyZmFjZQp7CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSB2ZXJzaW9uIDUgKG5hbWUtYmFzZWQsIFNIQTEtaGFzaGVkKSBVVUlECiAgICAgKgogICAgICogQHBhcmFtIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2UgJGZpZWxkcyBUaGUgZmllbGRzIGZyb20gd2hpY2ggdG8gY29uc3RydWN0IGEgVVVJRAogICAgICogQHBhcmFtIE51bWJlckNvbnZlcnRlckludGVyZmFjZSAkbnVtYmVyQ29udmVydGVyIFRoZSBudW1iZXIgY29udmVydGVyIHRvIHVzZQogICAgICogICAgIGZvciBjb252ZXJ0aW5nIGhleCB2YWx1ZXMgdG8vZnJvbSBpbnRlZ2VycwogICAgICogQHBhcmFtIENvZGVjSW50ZXJmYWNlICRjb2RlYyBUaGUgY29kZWMgdG8gdXNlIHdoZW4gZW5jb2Rpbmcgb3IgZGVjb2RpbmcKICAgICAqICAgICBVVUlEIHN0cmluZ3MKICAgICAqIEBwYXJhbSBUaW1lQ29udmVydGVySW50ZXJmYWNlICR0aW1lQ29udmVydGVyIFRoZSB0aW1lIGNvbnZlcnRlciB0byB1c2UKICAgICAqICAgICBmb3IgY29udmVydGluZyB0aW1lc3RhbXBzIGV4dHJhY3RlZCBmcm9tIGEgVVVJRCB0byB1bml4IHRpbWVzdGFtcHMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2UgJGZpZWxkcywKICAgICAgICBOdW1iZXJDb252ZXJ0ZXJJbnRlcmZhY2UgJG51bWJlckNvbnZlcnRlciwKICAgICAgICBDb2RlY0ludGVyZmFjZSAkY29kZWMsCiAgICAgICAgVGltZUNvbnZlcnRlckludGVyZmFjZSAkdGltZUNvbnZlcnRlcgogICAgKSB7CiAgICAgICAgaWYgKCRmaWVsZHMtPmdldFZlcnNpb24oKSAhPT0gVXVpZDo6VVVJRF9UWVBFX0hBU0hfU0hBMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0ZpZWxkcyB1c2VkIHRvIGNyZWF0ZSBhIFV1aWRWNSBtdXN0IHJlcHJlc2VudCBhICcKICAgICAgICAgICAgICAgIC4gJ3ZlcnNpb24gNSAobmFtZWQtYmFzZWQsIFNIQTEtaGFzaGVkKSBVVUlEJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkZmllbGRzLCAkbnVtYmVyQ29udmVydGVyLCAkY29kZWMsICR0aW1lQ29udmVydGVyKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/Validator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFJmYzQxMjI7Cgp1c2UgUmFtc2V5XFV1aWRcVXVpZDsKdXNlIFJhbXNleVxVdWlkXFZhbGlkYXRvclxWYWxpZGF0b3JJbnRlcmZhY2U7Cgp1c2UgZnVuY3Rpb24gcHJlZ19tYXRjaDsKdXNlIGZ1bmN0aW9uIHN0cl9yZXBsYWNlOwoKLyoqCiAqIFJmYzQxMjJcVmFsaWRhdG9yIHZhbGlkYXRlcyBzdHJpbmdzIGFzIFVVSURzIG9mIHRoZSBSRkMgNDEyMiB2YXJpYW50CiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmZpbmFsIGNsYXNzIFZhbGlkYXRvciBpbXBsZW1lbnRzIFZhbGlkYXRvckludGVyZmFjZQp7CiAgICBwcml2YXRlIGNvbnN0IFZBTElEX1BBVFRFUk4gPSAnXEFbMC05QS1GYS1mXXs4fS1bMC05QS1GYS1mXXs0fS0nCiAgICAgICAgLiAnWzEtNV17MX1bMC05QS1GYS1mXXszfS1bQUJhYjg5XXsxfVswLTlBLUZhLWZdezN9LVswLTlBLUZhLWZdezEyfVx6JzsKCiAgICAvKioKICAgICAqIEBwc2FsbS1yZXR1cm4gbm9uLWVtcHR5LXN0cmluZwogICAgICogQHBzYWxtLXN1cHByZXNzIE1vcmVTcGVjaWZpY1JldHVyblR5cGUgd2Uga25vdyB0aGF0IHRoZSByZXRyaWV2ZWQgYHN0cmluZ2AgaXMgbmV2ZXIgZW1wdHkKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBMZXNzU3BlY2lmaWNSZXR1cm5TdGF0ZW1lbnQgd2Uga25vdyB0aGF0IHRoZSByZXRyaWV2ZWQgYHN0cmluZ2AgaXMgbmV2ZXIgZW1wdHkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBhdHRlcm4oKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OlZBTElEX1BBVFRFUk47CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHZhbGlkYXRlKHN0cmluZyAkdXVpZCk6IGJvb2wKICAgIHsKICAgICAgICAkdXVpZCA9IHN0cl9yZXBsYWNlKFsndXJuOicsICd1dWlkOicsICdVUk46JywgJ1VVSUQ6JywgJ3snLCAnfSddLCAnJywgJHV1aWQpOwoKICAgICAgICByZXR1cm4gJHV1aWQgPT09IFV1aWQ6Ok5JTCB8fCBwcmVnX21hdGNoKCcvJyAuIHNlbGY6OlZBTElEX1BBVFRFUk4gLiAnL0RtcycsICR1dWlkKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/VariantTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFJmYzQxMjI7Cgp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXEludmFsaWRCeXRlc0V4Y2VwdGlvbjsKdXNlIFJhbXNleVxVdWlkXFV1aWQ7Cgp1c2UgZnVuY3Rpb24gZGVjYmluOwp1c2UgZnVuY3Rpb24gc3RyX3BhZDsKdXNlIGZ1bmN0aW9uIHN0cmxlbjsKdXNlIGZ1bmN0aW9uIHN0cnBvczsKdXNlIGZ1bmN0aW9uIHN1YnN0cjsKdXNlIGZ1bmN0aW9uIHVucGFjazsKCnVzZSBjb25zdCBTVFJfUEFEX0xFRlQ7CgovKioKICogUHJvdmlkZXMgY29tbW9uIGZ1bmN0aW9uYWxpdHkgZm9yIGhhbmRsaW5nIHRoZSB2YXJpYW50LCBhcyBkZWZpbmVkIGJ5IFJGQyA0MTIyCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCnRyYWl0IFZhcmlhbnRUcmFpdAp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGJ5dGVzIHRoYXQgY29tcHJpc2UgdGhlIGZpZWxkcwogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZ2V0Qnl0ZXMoKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdmFyaWFudCBpZGVudGlmaWVyLCBhY2NvcmRpbmcgdG8gUkZDIDQxMjIsIGZvciB0aGUgZ2l2ZW4gYnl0ZXMKICAgICAqCiAgICAgKiBUaGUgZm9sbG93aW5nIHZhbHVlcyBtYXkgYmUgcmV0dXJuZWQ6CiAgICAgKgogICAgICogLSBgMGAgLS0gUmVzZXJ2ZWQsIE5DUyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgogICAgICogLSBgMmAgLS0gVGhlIHZhcmlhbnQgc3BlY2lmaWVkIGluIFJGQyA0MTIyLgogICAgICogLSBgNmAgLS0gUmVzZXJ2ZWQsIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgogICAgICogLSBgN2AgLS0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSBkZWZpbml0aW9uLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MTIyI3NlY3Rpb24tNC4xLjEgUkZDIDQxMjIsIMKnIDQuMS4xOiBWYXJpYW50CiAgICAgKgogICAgICogQHJldHVybiBpbnQgVGhlIHZhcmlhbnQgaWRlbnRpZmllciwgYWNjb3JkaW5nIHRvIFJGQyA0MTIyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWYXJpYW50KCk6IGludAogICAgewogICAgICAgIGlmIChzdHJsZW4oJHRoaXMtPmdldEJ5dGVzKCkpICE9PSAxNikgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEJ5dGVzRXhjZXB0aW9uKCdJbnZhbGlkIG51bWJlciBvZiBieXRlcycpOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgYXJyYXkgJHBhcnRzICovCiAgICAgICAgJHBhcnRzID0gdW5wYWNrKCduKicsICR0aGlzLT5nZXRCeXRlcygpKTsKCiAgICAgICAgLy8gJHBhcnRzWzVdIGlzIGEgMTYtYml0LCB1bnNpZ25lZCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHZhcmlhbnQgYml0cwogICAgICAgIC8vIG9mIHRoZSBVVUlELiBXZSBjb252ZXJ0IHRoaXMgaW50ZWdlciBpbnRvIGEgc3RyaW5nIGNvbnRhaW5pbmcgYQogICAgICAgIC8vIGJpbmFyeSByZXByZXNlbnRhdGlvbiwgcGFkZGVkIHRvIDE2IGNoYXJhY3RlcnMuIFdlIGFuYWx5emUgdGhlIGZpcnN0CiAgICAgICAgLy8gdGhyZWUgY2hhcmFjdGVycyAodGhyZWUgbW9zdC1zaWduaWZpY2FudCBiaXRzKSB0byBkZXRlcm1pbmUgdGhlCiAgICAgICAgLy8gdmFyaWFudC4KICAgICAgICAkYmluYXJ5ID0gc3RyX3BhZCgKICAgICAgICAgICAgZGVjYmluKChpbnQpICRwYXJ0c1s1XSksCiAgICAgICAgICAgIDE2LAogICAgICAgICAgICAnMCcsCiAgICAgICAgICAgIFNUUl9QQURfTEVGVAogICAgICAgICk7CgogICAgICAgICRtc2IgPSBzdWJzdHIoJGJpbmFyeSwgMCwgMyk7CgogICAgICAgIGlmICgkbXNiID09PSAnMTExJykgewogICAgICAgICAgICAkdmFyaWFudCA9IFV1aWQ6OlJFU0VSVkVEX0ZVVFVSRTsKICAgICAgICB9IGVsc2VpZiAoJG1zYiA9PT0gJzExMCcpIHsKICAgICAgICAgICAgJHZhcmlhbnQgPSBVdWlkOjpSRVNFUlZFRF9NSUNST1NPRlQ7CiAgICAgICAgfSBlbHNlaWYgKHN0cnBvcygkbXNiLCAnMTAnKSA9PT0gMCkgewogICAgICAgICAgICAkdmFyaWFudCA9IFV1aWQ6OlJGQ180MTIyOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR2YXJpYW50ID0gVXVpZDo6UkVTRVJWRURfTkNTOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR2YXJpYW50OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/VersionTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFJmYzQxMjI7CgovKioKICogUHJvdmlkZXMgY29tbW9uIGZ1bmN0aW9uYWxpdHkgZm9yIGhhbmRsaW5nIHRoZSB2ZXJzaW9uLCBhcyBkZWZpbmVkIGJ5IFJGQyA0MTIyCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCnRyYWl0IFZlcnNpb25UcmFpdAp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHZlcnNpb24KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGdldFZlcnNpb24oKTogP2ludDsKCiAgICAvKioKICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGVzZSBmaWVsZHMgcmVwcmVzZW50IGEgbmlsIFVVSUQKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGlzTmlsKCk6IGJvb2w7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHZlcnNpb24gbWF0Y2hlcyBvbmUgb2YgdGhvc2UgZGVmaW5lZCBieSBSRkMgNDEyMgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBUcnVlIGlmIHRoZSBVVUlEIHZlcnNpb24gaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGlzQ29ycmVjdFZlcnNpb24oKTogYm9vbAogICAgewogICAgICAgIGlmICgkdGhpcy0+aXNOaWwoKSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHN3aXRjaCAoJHRoaXMtPmdldFZlcnNpb24oKSkgewogICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgIGNhc2UgNToKICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Type/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Type/Decimal.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFR5cGU7Cgp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFZhbHVlRXJyb3I7Cgp1c2UgZnVuY3Rpb24gaXNfbnVtZXJpYzsKdXNlIGZ1bmN0aW9uIHNwcmludGY7CgovKioKICogQSB2YWx1ZSBvYmplY3QgcmVwcmVzZW50aW5nIGEgZGVjaW1hbAogKgogKiBUaGlzIGNsYXNzIGV4aXN0cyBmb3IgdHlwZS1zYWZldHkgcHVycG9zZXMsIHRvIGVuc3VyZSB0aGF0IGRlY2ltYWxzCiAqIHJldHVybmVkIGZyb20gcmFtc2V5L3V1aWQgbWV0aG9kcyBhcyBzdHJpbmdzIGFyZSB0cnVseSBkZWNpbWFscyBhbmQgbm90IHNvbWUKICogb3RoZXIga2luZCBvZiBzdHJpbmcuCiAqCiAqIFRvIHN1cHBvcnQgdmFsdWVzIGFzIHRydWUgZGVjaW1hbHMgYW5kIG5vdCBhcyBmbG9hdHMgb3IgZG91Ymxlcywgd2Ugc3RvcmUgdGhlCiAqIGRlY2ltYWxzIGFzIHN0cmluZ3MuCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmZpbmFsIGNsYXNzIERlY2ltYWwgaW1wbGVtZW50cyBOdW1iZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICR2YWx1ZTsKCiAgICAvKioKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICBwcml2YXRlICRpc05lZ2F0aXZlID0gZmFsc2U7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIFRoZSBkZWNpbWFsIHZhbHVlIHRvIHN0b3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdmFsdWUpCiAgICB7CiAgICAgICAgJHZhbHVlID0gKHN0cmluZykgJHZhbHVlOwoKICAgICAgICBpZiAoIWlzX251bWVyaWMoJHZhbHVlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ1ZhbHVlIG11c3QgYmUgYSBzaWduZWQgZGVjaW1hbCBvciBhIHN0cmluZyBjb250YWluaW5nIG9ubHkgJwogICAgICAgICAgICAgICAgLiAnZGlnaXRzIDAtOSBhbmQsIG9wdGlvbmFsbHksIGEgZGVjaW1hbCBwb2ludCBvciBzaWduICgrIG9yIC0pJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgLy8gUmVtb3ZlIHRoZSBsZWFkaW5nICstc3ltYm9sLgogICAgICAgIGlmIChzdHJwb3MoJHZhbHVlLCAnKycpID09PSAwKSB7CiAgICAgICAgICAgICR2YWx1ZSA9IHN1YnN0cigkdmFsdWUsIDEpOwogICAgICAgIH0KCiAgICAgICAgLy8gRm9yIGNhc2VzIGxpa2UgYC0wYCBvciBgLTAuMDAwMGAsIGNvbnZlcnQgdGhlIHZhbHVlIHRvIGAwYC4KICAgICAgICBpZiAoYWJzKChmbG9hdCkgJHZhbHVlKSA9PT0gMC4wKSB7CiAgICAgICAgICAgICR2YWx1ZSA9ICcwJzsKICAgICAgICB9CgogICAgICAgIGlmIChzdHJwb3MoJHZhbHVlLCAnLScpID09PSAwKSB7CiAgICAgICAgICAgICR0aGlzLT5pc05lZ2F0aXZlID0gdHJ1ZTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT52YWx1ZSA9ICR2YWx1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNOZWdhdGl2ZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5pc05lZ2F0aXZlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b1N0cmluZygpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnZhbHVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dG9TdHJpbmcoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRvU3RyaW5nKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNlcmlhbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5e3N0cmluZzogc3RyaW5nfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gWydzdHJpbmcnID0+ICR0aGlzLT50b1N0cmluZygpXTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgdGhlIG9iamVjdCBmcm9tIGEgc2VyaWFsaXplZCBzdHJpbmcgcmVwcmVzZW50YXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXJpYWxpemVkIFRoZSBzZXJpYWxpemVkIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0CiAgICAgKgogICAgICogQHBocGNzU3VwcHJlc3MgU2xldm9tYXRDb2RpbmdTdGFuZGFyZC5UeXBlSGludHMuUGFyYW1ldGVyVHlwZUhpbnQuTWlzc2luZ05hdGl2ZVR5cGVIaW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgVW51c2VkTWV0aG9kQ2FsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5zZXJpYWxpemUoJHNlcmlhbGl6ZWQpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPl9fY29uc3RydWN0KCRzZXJpYWxpemVkKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheXtzdHJpbmc6IHN0cmluZ30gJGRhdGEKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdW5zZXJpYWxpemUoYXJyYXkgJGRhdGEpOiB2b2lkCiAgICB7CiAgICAgICAgLy8gQGNvZGVDb3ZlcmFnZUlnbm9yZVN0YXJ0CiAgICAgICAgaWYgKCFpc3NldCgkZGF0YVsnc3RyaW5nJ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBWYWx1ZUVycm9yKHNwcmludGYoJyVzKCk6IEFyZ3VtZW50ICMxICgkZGF0YSkgaXMgaW52YWxpZCcsIF9fTUVUSE9EX18pKTsKICAgICAgICB9CiAgICAgICAgLy8gQGNvZGVDb3ZlcmFnZUlnbm9yZUVuZAoKICAgICAgICAkdGhpcy0+dW5zZXJpYWxpemUoJGRhdGFbJ3N0cmluZyddKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Type/Hexadecimal.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFR5cGU7Cgp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFZhbHVlRXJyb3I7Cgp1c2UgZnVuY3Rpb24gY3R5cGVfeGRpZ2l0Owp1c2UgZnVuY3Rpb24gc3ByaW50ZjsKdXNlIGZ1bmN0aW9uIHN0cnBvczsKdXNlIGZ1bmN0aW9uIHN0cnRvbG93ZXI7CnVzZSBmdW5jdGlvbiBzdWJzdHI7CgovKioKICogQSB2YWx1ZSBvYmplY3QgcmVwcmVzZW50aW5nIGEgaGV4YWRlY2ltYWwgbnVtYmVyCiAqCiAqIFRoaXMgY2xhc3MgZXhpc3RzIGZvciB0eXBlLXNhZmV0eSBwdXJwb3NlcywgdG8gZW5zdXJlIHRoYXQgaGV4YWRlY2ltYWwgbnVtYmVycwogKiByZXR1cm5lZCBmcm9tIHJhbXNleS91dWlkIG1ldGhvZHMgYXMgc3RyaW5ncyBhcmUgdHJ1bHkgaGV4YWRlY2ltYWwgYW5kIG5vdCBzb21lCiAqIG90aGVyIGtpbmQgb2Ygc3RyaW5nLgogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpmaW5hbCBjbGFzcyBIZXhhZGVjaW1hbCBpbXBsZW1lbnRzIFR5cGVJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICR2YWx1ZTsKCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIFRoZSBoZXhhZGVjaW1hbCB2YWx1ZSB0byBzdG9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICR2YWx1ZSkKICAgIHsKICAgICAgICAkdmFsdWUgPSBzdHJ0b2xvd2VyKCR2YWx1ZSk7CgogICAgICAgIGlmIChzdHJwb3MoJHZhbHVlLCAnMHgnKSA9PT0gMCkgewogICAgICAgICAgICAkdmFsdWUgPSBzdWJzdHIoJHZhbHVlLCAyKTsKICAgICAgICB9CgogICAgICAgIGlmICghY3R5cGVfeGRpZ2l0KCR2YWx1ZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdWYWx1ZSBtdXN0IGJlIGEgaGV4YWRlY2ltYWwgbnVtYmVyJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnZhbHVlID0gJHZhbHVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b1N0cmluZygpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnZhbHVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dG9TdHJpbmcoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRvU3RyaW5nKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNlcmlhbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5e3N0cmluZzogc3RyaW5nfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gWydzdHJpbmcnID0+ICR0aGlzLT50b1N0cmluZygpXTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgdGhlIG9iamVjdCBmcm9tIGEgc2VyaWFsaXplZCBzdHJpbmcgcmVwcmVzZW50YXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXJpYWxpemVkIFRoZSBzZXJpYWxpemVkIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0CiAgICAgKgogICAgICogQHBocGNzU3VwcHJlc3MgU2xldm9tYXRDb2RpbmdTdGFuZGFyZC5UeXBlSGludHMuUGFyYW1ldGVyVHlwZUhpbnQuTWlzc2luZ05hdGl2ZVR5cGVIaW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgVW51c2VkTWV0aG9kQ2FsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5zZXJpYWxpemUoJHNlcmlhbGl6ZWQpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPl9fY29uc3RydWN0KCRzZXJpYWxpemVkKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheXtzdHJpbmc6IHN0cmluZ30gJGRhdGEKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdW5zZXJpYWxpemUoYXJyYXkgJGRhdGEpOiB2b2lkCiAgICB7CiAgICAgICAgLy8gQGNvZGVDb3ZlcmFnZUlnbm9yZVN0YXJ0CiAgICAgICAgaWYgKCFpc3NldCgkZGF0YVsnc3RyaW5nJ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBWYWx1ZUVycm9yKHNwcmludGYoJyVzKCk6IEFyZ3VtZW50ICMxICgkZGF0YSkgaXMgaW52YWxpZCcsIF9fTUVUSE9EX18pKTsKICAgICAgICB9CiAgICAgICAgLy8gQGNvZGVDb3ZlcmFnZUlnbm9yZUVuZAoKICAgICAgICAkdGhpcy0+dW5zZXJpYWxpemUoJGRhdGFbJ3N0cmluZyddKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Type/Integer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFR5cGU7Cgp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFZhbHVlRXJyb3I7Cgp1c2UgZnVuY3Rpb24gY3R5cGVfZGlnaXQ7CnVzZSBmdW5jdGlvbiBsdHJpbTsKdXNlIGZ1bmN0aW9uIHNwcmludGY7CnVzZSBmdW5jdGlvbiBzdHJwb3M7CnVzZSBmdW5jdGlvbiBzdWJzdHI7CgovKioKICogQSB2YWx1ZSBvYmplY3QgcmVwcmVzZW50aW5nIGFuIGludGVnZXIKICoKICogVGhpcyBjbGFzcyBleGlzdHMgZm9yIHR5cGUtc2FmZXR5IHB1cnBvc2VzLCB0byBlbnN1cmUgdGhhdCBpbnRlZ2VycwogKiByZXR1cm5lZCBmcm9tIHJhbXNleS91dWlkIG1ldGhvZHMgYXMgc3RyaW5ncyBhcmUgdHJ1bHkgaW50ZWdlcnMgYW5kIG5vdCBzb21lCiAqIG90aGVyIGtpbmQgb2Ygc3RyaW5nLgogKgogKiBUbyBzdXBwb3J0IGxhcmdlIGludGVnZXJzIGJleW9uZCBQSFBfSU5UX01BWCBhbmQgUEhQX0lOVF9NSU4gb24gYm90aCA2NC1iaXQKICogYW5kIDMyLWJpdCBzeXN0ZW1zLCB3ZSBzdG9yZSB0aGUgaW50ZWdlcnMgYXMgc3RyaW5ncy4KICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KZmluYWwgY2xhc3MgSW50ZWdlciBpbXBsZW1lbnRzIE51bWJlckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEBwc2FsbS12YXIgbnVtZXJpYy1zdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkdmFsdWU7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSAkaXNOZWdhdGl2ZSA9IGZhbHNlOwoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSBUaGUgaW50ZWdlciB2YWx1ZSB0byBzdG9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHZhbHVlKQogICAgewogICAgICAgICR2YWx1ZSA9IChzdHJpbmcpICR2YWx1ZTsKICAgICAgICAkc2lnbiA9ICcrJzsKCiAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGNvbnRhaW5zIGEgc2lnbiwgcmVtb3ZlIGl0IGZvciBjdHlwZV9kaWdpdCgpIGNoZWNrLgogICAgICAgIGlmIChzdHJwb3MoJHZhbHVlLCAnLScpID09PSAwIHx8IHN0cnBvcygkdmFsdWUsICcrJykgPT09IDApIHsKICAgICAgICAgICAgJHNpZ24gPSBzdWJzdHIoJHZhbHVlLCAwLCAxKTsKICAgICAgICAgICAgJHZhbHVlID0gc3Vic3RyKCR2YWx1ZSwgMSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIWN0eXBlX2RpZ2l0KCR2YWx1ZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdWYWx1ZSBtdXN0IGJlIGEgc2lnbmVkIGludGVnZXIgb3IgYSBzdHJpbmcgY29udGFpbmluZyBvbmx5ICcKICAgICAgICAgICAgICAgIC4gJ2RpZ2l0cyAwLTkgYW5kLCBvcHRpb25hbGx5LCBhIHNpZ24gKCsgb3IgLSknCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAvLyBUcmltIGFueSBsZWFkaW5nIHplcm9zLgogICAgICAgICR2YWx1ZSA9IGx0cmltKCR2YWx1ZSwgJzAnKTsKCiAgICAgICAgLy8gU2V0IHRvIHplcm8gaWYgdGhlIHN0cmluZyBpcyBlbXB0eSBhZnRlciB0cmltbWluZyB6ZXJvcy4KICAgICAgICBpZiAoJHZhbHVlID09PSAnJykgewogICAgICAgICAgICAkdmFsdWUgPSAnMCc7CiAgICAgICAgfQoKICAgICAgICAvLyBBZGQgdGhlIG5lZ2F0aXZlIHNpZ24gYmFjayB0byB0aGUgdmFsdWUuCiAgICAgICAgaWYgKCRzaWduID09PSAnLScgJiYgJHZhbHVlICE9PSAnMCcpIHsKICAgICAgICAgICAgJHZhbHVlID0gJHNpZ24gLiAkdmFsdWU7CiAgICAgICAgICAgICR0aGlzLT5pc05lZ2F0aXZlID0gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIC8qKiBAcHNhbG0tdmFyIG51bWVyaWMtc3RyaW5nICRudW1lcmljVmFsdWUgKi8KICAgICAgICAkbnVtZXJpY1ZhbHVlID0gJHZhbHVlOwoKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkbnVtZXJpY1ZhbHVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc05lZ2F0aXZlKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmlzTmVnYXRpdmU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcHNhbG0tcmV0dXJuIG51bWVyaWMtc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b1N0cmluZygpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnZhbHVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dG9TdHJpbmcoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRvU3RyaW5nKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNlcmlhbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5e3N0cmluZzogc3RyaW5nfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gWydzdHJpbmcnID0+ICR0aGlzLT50b1N0cmluZygpXTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgdGhlIG9iamVjdCBmcm9tIGEgc2VyaWFsaXplZCBzdHJpbmcgcmVwcmVzZW50YXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXJpYWxpemVkIFRoZSBzZXJpYWxpemVkIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0CiAgICAgKgogICAgICogQHBocGNzU3VwcHJlc3MgU2xldm9tYXRDb2RpbmdTdGFuZGFyZC5UeXBlSGludHMuUGFyYW1ldGVyVHlwZUhpbnQuTWlzc2luZ05hdGl2ZVR5cGVIaW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgVW51c2VkTWV0aG9kQ2FsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5zZXJpYWxpemUoJHNlcmlhbGl6ZWQpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPl9fY29uc3RydWN0KCRzZXJpYWxpemVkKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheXtzdHJpbmc6IHN0cmluZ30gJGRhdGEKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdW5zZXJpYWxpemUoYXJyYXkgJGRhdGEpOiB2b2lkCiAgICB7CiAgICAgICAgLy8gQGNvZGVDb3ZlcmFnZUlnbm9yZVN0YXJ0CiAgICAgICAgaWYgKCFpc3NldCgkZGF0YVsnc3RyaW5nJ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBWYWx1ZUVycm9yKHNwcmludGYoJyVzKCk6IEFyZ3VtZW50ICMxICgkZGF0YSkgaXMgaW52YWxpZCcsIF9fTUVUSE9EX18pKTsKICAgICAgICB9CiAgICAgICAgLy8gQGNvZGVDb3ZlcmFnZUlnbm9yZUVuZAoKICAgICAgICAkdGhpcy0+dW5zZXJpYWxpemUoJGRhdGFbJ3N0cmluZyddKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Type/NumberInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFR5cGU7CgovKioKICogTnVtYmVySW50ZXJmYWNlIGVuc3VyZXMgY29uc2lzdGVuY3kgaW4gbnVtZXJpYyB2YWx1ZXMgcmV0dXJuZWQgYnkgcmFtc2V5L3V1aWQKICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KaW50ZXJmYWNlIE51bWJlckludGVyZmFjZSBleHRlbmRzIFR5cGVJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBudW1iZXIgaXMgbGVzcyB0aGFuIHplcm8KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzTmVnYXRpdmUoKTogYm9vbDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Type/Time.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFR5cGU7Cgp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxJbnRlZ2VyIGFzIEludGVnZXJPYmplY3Q7CnVzZSBWYWx1ZUVycm9yOwp1c2Ugc3RkQ2xhc3M7Cgp1c2UgZnVuY3Rpb24ganNvbl9kZWNvZGU7CnVzZSBmdW5jdGlvbiBqc29uX2VuY29kZTsKdXNlIGZ1bmN0aW9uIHNwcmludGY7CgovKioKICogQSB2YWx1ZSBvYmplY3QgcmVwcmVzZW50aW5nIGEgdGltZXN0YW1wCiAqCiAqIFRoaXMgY2xhc3MgZXhpc3RzIGZvciB0eXBlLXNhZmV0eSBwdXJwb3NlcywgdG8gZW5zdXJlIHRoYXQgdGltZXN0YW1wcyB1c2VkCiAqIGJ5IHJhbXNleS91dWlkIGFyZSB0cnVseSB0aW1lc3RhbXAgaW50ZWdlcnMgYW5kIG5vdCBzb21lIG90aGVyIGtpbmQgb2Ygc3RyaW5nCiAqIG9yIGludGVnZXIuCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmZpbmFsIGNsYXNzIFRpbWUgaW1wbGVtZW50cyBUeXBlSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHZhciBJbnRlZ2VyT2JqZWN0CiAgICAgKi8KICAgIHByaXZhdGUgJHNlY29uZHM7CgogICAgLyoqCiAgICAgKiBAdmFyIEludGVnZXJPYmplY3QKICAgICAqLwogICAgcHJpdmF0ZSAkbWljcm9zZWNvbmRzOwoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICRzZWNvbmRzCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG1pY3Jvc2Vjb25kcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHNlY29uZHMsICRtaWNyb3NlY29uZHMgPSAwKQogICAgewogICAgICAgICR0aGlzLT5zZWNvbmRzID0gbmV3IEludGVnZXJPYmplY3QoJHNlY29uZHMpOwogICAgICAgICR0aGlzLT5taWNyb3NlY29uZHMgPSBuZXcgSW50ZWdlck9iamVjdCgkbWljcm9zZWNvbmRzKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2Vjb25kcygpOiBJbnRlZ2VyT2JqZWN0CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zZWNvbmRzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNaWNyb3NlY29uZHMoKTogSW50ZWdlck9iamVjdAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bWljcm9zZWNvbmRzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b1N0cmluZygpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnNlY29uZHMtPnRvU3RyaW5nKCkgLiAnLicgLiAkdGhpcy0+bWljcm9zZWNvbmRzLT50b1N0cmluZygpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dG9TdHJpbmcoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAnc2Vjb25kcycgPT4gJHRoaXMtPmdldFNlY29uZHMoKS0+dG9TdHJpbmcoKSwKICAgICAgICAgICAgJ21pY3Jvc2Vjb25kcycgPT4gJHRoaXMtPmdldE1pY3Jvc2Vjb25kcygpLT50b1N0cmluZygpLAogICAgICAgIF07CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNlcmlhbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gKHN0cmluZykganNvbl9lbmNvZGUoJHRoaXMpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheXtzZWNvbmRzOiBzdHJpbmcsIG1pY3Jvc2Vjb25kczogc3RyaW5nfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAnc2Vjb25kcycgPT4gJHRoaXMtPmdldFNlY29uZHMoKS0+dG9TdHJpbmcoKSwKICAgICAgICAgICAgJ21pY3Jvc2Vjb25kcycgPT4gJHRoaXMtPmdldE1pY3Jvc2Vjb25kcygpLT50b1N0cmluZygpLAogICAgICAgIF07CiAgICB9CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIHRoZSBvYmplY3QgZnJvbSBhIHNlcmlhbGl6ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2VyaWFsaXplZCBUaGUgc2VyaWFsaXplZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdAogICAgICoKICAgICAqIEBwaHBjc1N1cHByZXNzIFNsZXZvbWF0Q29kaW5nU3RhbmRhcmQuVHlwZUhpbnRzLlBhcmFtZXRlclR5cGVIaW50Lk1pc3NpbmdOYXRpdmVUeXBlSGludAogICAgICogQHBzYWxtLXN1cHByZXNzIFVudXNlZE1ldGhvZENhbGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVuc2VyaWFsaXplKCRzZXJpYWxpemVkKTogdm9pZAogICAgewogICAgICAgIC8qKiBAdmFyIHN0ZENsYXNzICR0aW1lICovCiAgICAgICAgJHRpbWUgPSBqc29uX2RlY29kZSgkc2VyaWFsaXplZCk7CgogICAgICAgIGlmICghaXNzZXQoJHRpbWUtPnNlY29uZHMpIHx8ICFpc3NldCgkdGltZS0+bWljcm9zZWNvbmRzKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnQXR0ZW1wdGVkIHRvIHVuc2VyaWFsaXplIGFuIGludmFsaWQgdmFsdWUnCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+X19jb25zdHJ1Y3QoJHRpbWUtPnNlY29uZHMsICR0aW1lLT5taWNyb3NlY29uZHMpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGFycmF5e3NlY29uZHM6IHN0cmluZywgbWljcm9zZWNvbmRzOiBzdHJpbmd9ICRkYXRhCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3Vuc2VyaWFsaXplKGFycmF5ICRkYXRhKTogdm9pZAogICAgewogICAgICAgIC8vIEBjb2RlQ292ZXJhZ2VJZ25vcmVTdGFydAogICAgICAgIGlmICghaXNzZXQoJGRhdGFbJ3NlY29uZHMnXSkgfHwgIWlzc2V0KCRkYXRhWydtaWNyb3NlY29uZHMnXSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFZhbHVlRXJyb3Ioc3ByaW50ZignJXMoKTogQXJndW1lbnQgIzEgKCRkYXRhKSBpcyBpbnZhbGlkJywgX19NRVRIT0RfXykpOwogICAgICAgIH0KICAgICAgICAvLyBAY29kZUNvdmVyYWdlSWdub3JlRW5kCgogICAgICAgICR0aGlzLT5fX2NvbnN0cnVjdCgkZGF0YVsnc2Vjb25kcyddLCAkZGF0YVsnbWljcm9zZWNvbmRzJ10pOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Type/TypeInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFR5cGU7Cgp1c2UgSnNvblNlcmlhbGl6YWJsZTsKdXNlIFNlcmlhbGl6YWJsZTsKCi8qKgogKiBUeXBlSW50ZXJmYWNlIGVuc3VyZXMgY29uc2lzdGVuY3kgaW4gdHlwZWQgdmFsdWVzIHJldHVybmVkIGJ5IHJhbXNleS91dWlkCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmludGVyZmFjZSBUeXBlSW50ZXJmYWNlIGV4dGVuZHMgSnNvblNlcmlhbGl6YWJsZSwgU2VyaWFsaXphYmxlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiB0b1N0cmluZygpOiBzdHJpbmc7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKTogc3RyaW5nOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Uuid.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkOwoKdXNlIERhdGVUaW1lSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29kZWNcQ29kZWNJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcTnVtYmVyQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxGaWVsZHNcRmllbGRzSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcTGF6eVxMYXp5VXVpZEZyb21TdHJpbmc7CnVzZSBSYW1zZXlcVXVpZFxSZmM0MTIyXEZpZWxkc0ludGVyZmFjZSBhcyBSZmM0MTIyRmllbGRzSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxIZXhhZGVjaW1hbDsKdXNlIFJhbXNleVxVdWlkXFR5cGVcSW50ZWdlciBhcyBJbnRlZ2VyT2JqZWN0Owp1c2UgVmFsdWVFcnJvcjsKCnVzZSBmdW5jdGlvbiBhc3NlcnQ7CnVzZSBmdW5jdGlvbiBiaW4yaGV4Owp1c2UgZnVuY3Rpb24gcHJlZ19tYXRjaDsKdXNlIGZ1bmN0aW9uIHNwcmludGY7CnVzZSBmdW5jdGlvbiBzdHJfcmVwbGFjZTsKdXNlIGZ1bmN0aW9uIHN0cmNtcDsKdXNlIGZ1bmN0aW9uIHN0cmxlbjsKdXNlIGZ1bmN0aW9uIHN0cnRvbG93ZXI7CnVzZSBmdW5jdGlvbiBzdWJzdHI7CgovKioKICogVXVpZCBwcm92aWRlcyBjb25zdGFudHMgYW5kIHN0YXRpYyBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggYW5kIGdlbmVyYXRpbmcgVVVJRHMKICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KY2xhc3MgVXVpZCBpbXBsZW1lbnRzIFV1aWRJbnRlcmZhY2UKewogICAgdXNlIERlcHJlY2F0ZWRVdWlkTWV0aG9kc1RyYWl0OwoKICAgIC8qKgogICAgICogV2hlbiB0aGlzIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQsIHRoZSBuYW1lIHN0cmluZyBpcyBhIGZ1bGx5LXF1YWxpZmllZAogICAgICogZG9tYWluIG5hbWUKICAgICAqCiAgICAgKiBAbGluayBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MTIyI2FwcGVuZGl4LUMgUkZDIDQxMjIsIEFwcGVuZGl4IEM6IFNvbWUgTmFtZSBTcGFjZSBJRHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IE5BTUVTUEFDRV9ETlMgPSAnNmJhN2I4MTAtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4JzsKCiAgICAvKioKICAgICAqIFdoZW4gdGhpcyBuYW1lc3BhY2UgaXMgc3BlY2lmaWVkLCB0aGUgbmFtZSBzdHJpbmcgaXMgYSBVUkwKICAgICAqCiAgICAgKiBAbGluayBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MTIyI2FwcGVuZGl4LUMgUkZDIDQxMjIsIEFwcGVuZGl4IEM6IFNvbWUgTmFtZSBTcGFjZSBJRHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IE5BTUVTUEFDRV9VUkwgPSAnNmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4JzsKCiAgICAvKioKICAgICAqIFdoZW4gdGhpcyBuYW1lc3BhY2UgaXMgc3BlY2lmaWVkLCB0aGUgbmFtZSBzdHJpbmcgaXMgYW4gSVNPIE9JRAogICAgICoKICAgICAqIEBsaW5rIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQxMjIjYXBwZW5kaXgtQyBSRkMgNDEyMiwgQXBwZW5kaXggQzogU29tZSBOYW1lIFNwYWNlIElEcwogICAgICovCiAgICBwdWJsaWMgY29uc3QgTkFNRVNQQUNFX09JRCA9ICc2YmE3YjgxMi05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgnOwoKICAgIC8qKgogICAgICogV2hlbiB0aGlzIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQsIHRoZSBuYW1lIHN0cmluZyBpcyBhbiBYLjUwMCBETiBpbiBERVIKICAgICAqIG9yIGEgdGV4dCBvdXRwdXQgZm9ybWF0CiAgICAgKgogICAgICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDEyMiNhcHBlbmRpeC1DIFJGQyA0MTIyLCBBcHBlbmRpeCBDOiBTb21lIE5hbWUgU3BhY2UgSURzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBOQU1FU1BBQ0VfWDUwMCA9ICc2YmE3YjgxNC05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgnOwoKICAgIC8qKgogICAgICogVGhlIG5pbCBVVUlEIGlzIGEgc3BlY2lhbCBmb3JtIG9mIFVVSUQgdGhhdCBpcyBzcGVjaWZpZWQgdG8gaGF2ZSBhbGwgMTI4CiAgICAgKiBiaXRzIHNldCB0byB6ZXJvCiAgICAgKgogICAgICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDEyMiNzZWN0aW9uLTQuMS43IFJGQyA0MTIyLCDCpyA0LjEuNzogTmlsIFVVSUQKICAgICAqLwogICAgcHVibGljIGNvbnN0IE5JTCA9ICcwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnOwoKICAgIC8qKgogICAgICogVmFyaWFudDogcmVzZXJ2ZWQsIE5DUyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CiAgICAgKgogICAgICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDEyMiNzZWN0aW9uLTQuMS4xIFJGQyA0MTIyLCDCpyA0LjEuMTogVmFyaWFudAogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVTRVJWRURfTkNTID0gMDsKCiAgICAvKioKICAgICAqIFZhcmlhbnQ6IHRoZSBVVUlEIGxheW91dCBzcGVjaWZpZWQgaW4gUkZDIDQxMjIKICAgICAqCiAgICAgKiBAbGluayBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MTIyI3NlY3Rpb24tNC4xLjEgUkZDIDQxMjIsIMKnIDQuMS4xOiBWYXJpYW50CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRkNfNDEyMiA9IDI7CgogICAgLyoqCiAgICAgKiBWYXJpYW50OiByZXNlcnZlZCwgTWljcm9zb2Z0IENvcnBvcmF0aW9uIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKICAgICAqCiAgICAgKiBAbGluayBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MTIyI3NlY3Rpb24tNC4xLjEgUkZDIDQxMjIsIMKnIDQuMS4xOiBWYXJpYW50CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRVNFUlZFRF9NSUNST1NPRlQgPSA2OwoKICAgIC8qKgogICAgICogVmFyaWFudDogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBkZWZpbml0aW9uCiAgICAgKgogICAgICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDEyMiNzZWN0aW9uLTQuMS4xIFJGQyA0MTIyLCDCpyA0LjEuMTogVmFyaWFudAogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVTRVJWRURfRlVUVVJFID0gNzsKCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBWYWxpZGF0b3JJbnRlcmZhY2U6OmdldFBhdHRlcm4oKX0gaW5zdGVhZC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFZBTElEX1BBVFRFUk4gPSAnXlswLTlBLUZhLWZdezh9LVswLTlBLUZhLWZdezR9LVswLTlBLUZhLWZdezR9LVswLTlBLUZhLWZdezR9LVswLTlBLUZhLWZdezEyfSQnOwoKICAgIC8qKgogICAgICogVmVyc2lvbiAxICh0aW1lLWJhc2VkKSBVVUlECiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQxMjIjc2VjdGlvbi00LjEuMyBSRkMgNDEyMiwgwqcgNC4xLjM6IFZlcnNpb24KICAgICAqLwogICAgcHVibGljIGNvbnN0IFVVSURfVFlQRV9USU1FID0gMTsKCiAgICAvKioKICAgICAqIFZlcnNpb24gMiAoRENFIFNlY3VyaXR5KSBVVUlECiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQxMjIjc2VjdGlvbi00LjEuMyBSRkMgNDEyMiwgwqcgNC4xLjM6IFZlcnNpb24KICAgICAqLwogICAgcHVibGljIGNvbnN0IFVVSURfVFlQRV9EQ0VfU0VDVVJJVFkgPSAyOwoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAc2VlIFV1aWQ6OlVVSURfVFlQRV9EQ0VfU0VDVVJJVFl9IGluc3RlYWQuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBVVUlEX1RZUEVfSURFTlRJRklFUiA9IDI7CgogICAgLyoqCiAgICAgKiBWZXJzaW9uIDMgKG5hbWUtYmFzZWQgYW5kIGhhc2hlZCB3aXRoIE1ENSkgVVVJRAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MTIyI3NlY3Rpb24tNC4xLjMgUkZDIDQxMjIsIMKnIDQuMS4zOiBWZXJzaW9uCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBVVUlEX1RZUEVfSEFTSF9NRDUgPSAzOwoKICAgIC8qKgogICAgICogVmVyc2lvbiA0IChyYW5kb20pIFVVSUQKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDEyMiNzZWN0aW9uLTQuMS4zIFJGQyA0MTIyLCDCpyA0LjEuMzogVmVyc2lvbgogICAgICovCiAgICBwdWJsaWMgY29uc3QgVVVJRF9UWVBFX1JBTkRPTSA9IDQ7CgogICAgLyoqCiAgICAgKiBWZXJzaW9uIDUgKG5hbWUtYmFzZWQgYW5kIGhhc2hlZCB3aXRoIFNIQTEpIFVVSUQKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDEyMiNzZWN0aW9uLTQuMS4zIFJGQyA0MTIyLCDCpyA0LjEuMzogVmVyc2lvbgogICAgICovCiAgICBwdWJsaWMgY29uc3QgVVVJRF9UWVBFX0hBU0hfU0hBMSA9IDU7CgogICAgLyoqCiAgICAgKiBWZXJzaW9uIDYgKG9yZGVyZWQtdGltZSkgVVVJRAogICAgICoKICAgICAqIFRoaXMgaXMgbmFtZWQgYFVVSURfVFlQRV9QRUFCT0RZYCwgc2luY2UgdGhlIHNwZWNpZmljYXRpb24gaXMgc3RpbGwgaW4KICAgICAqIGRyYWZ0IGZvcm0sIGFuZCB0aGUgcHJpbWFyeSBhdXRob3IvZWRpdG9yJ3MgbmFtZSBpcyBCcmFkIFBlYWJvZHkuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3V1aWQ2L3V1aWQ2LWlldGYtZHJhZnQgVVVJRCB2ZXJzaW9uIDYgSUVURiBkcmFmdAogICAgICogQGxpbmsgaHR0cDovL2doLnBlYWJvZHkuaW8vdXVpZHY2LyAiVmVyc2lvbiA2IiBVVUlEcwogICAgICovCiAgICBwdWJsaWMgY29uc3QgVVVJRF9UWVBFX1BFQUJPRFkgPSA2OwoKICAgIC8qKgogICAgICogRENFIFNlY3VyaXR5IHByaW5jaXBhbCBkb21haW4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTY5ODk4OTkvY2hhcDExLmh0bSN0YWdjamhfMTRfMDVfMDFfMDEgRENFIDEuMSwgwqcxMS41LjEuMQogICAgICovCiAgICBwdWJsaWMgY29uc3QgRENFX0RPTUFJTl9QRVJTT04gPSAwOwoKICAgIC8qKgogICAgICogRENFIFNlY3VyaXR5IGdyb3VwIGRvbWFpbgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5Njk4OTg5OS9jaGFwMTEuaHRtI3RhZ2NqaF8xNF8wNV8wMV8wMSBEQ0UgMS4xLCDCpzExLjUuMS4xCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBEQ0VfRE9NQUlOX0dST1VQID0gMTsKCiAgICAvKioKICAgICAqIERDRSBTZWN1cml0eSBvcmdhbml6YXRpb24gZG9tYWluCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk2OTg5ODk5L2NoYXAxMS5odG0jdGFnY2poXzE0XzA1XzAxXzAxIERDRSAxLjEsIMKnMTEuNS4xLjEKICAgICAqLwogICAgcHVibGljIGNvbnN0IERDRV9ET01BSU5fT1JHID0gMjsKCiAgICAvKioKICAgICAqIERDRSBTZWN1cml0eSBkb21haW4gc3RyaW5nIG5hbWVzCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk2OTg5ODk5L2NoYXAxMS5odG0jdGFnY2poXzE0XzA1XzAxXzAxIERDRSAxLjEsIMKnMTEuNS4xLjEKICAgICAqLwogICAgcHVibGljIGNvbnN0IERDRV9ET01BSU5fTkFNRVMgPSBbCiAgICAgICAgc2VsZjo6RENFX0RPTUFJTl9QRVJTT04gPT4gJ3BlcnNvbicsCiAgICAgICAgc2VsZjo6RENFX0RPTUFJTl9HUk9VUCA9PiAnZ3JvdXAnLAogICAgICAgIHNlbGY6OkRDRV9ET01BSU5fT1JHID0+ICdvcmcnLAogICAgXTsKCiAgICAvKioKICAgICAqIEB2YXIgVXVpZEZhY3RvcnlJbnRlcmZhY2V8bnVsbAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkZmFjdG9yeSA9IG51bGw7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wgZmxhZyB0byBkZXRlY3QgaWYgdGhlIFVVSUQgZmFjdG9yeSB3YXMgcmVwbGFjZWQgaW50ZXJuYWxseSwgd2hpY2ggZGlzYWJsZXMgYWxsIG9wdGltaXphdGlvbnMKICAgICAqICAgICAgICAgICBmb3IgdGhlIGRlZmF1bHQvaGFwcHkgcGF0aCBpbnRlcm5hbCBzY2VuYXJpb3MKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJGZhY3RvcnlSZXBsYWNlZCA9IGZhbHNlOwoKICAgIC8qKgogICAgICogQHZhciBDb2RlY0ludGVyZmFjZQogICAgICovCiAgICBwcm90ZWN0ZWQgJGNvZGVjOwoKICAgIC8qKgogICAgICogVGhlIGZpZWxkcyB0aGF0IG1ha2UgdXAgdGhpcyBVVUlECiAgICAgKgogICAgICogQHZhciBSZmM0MTIyRmllbGRzSW50ZXJmYWNlCiAgICAgKi8KICAgIHByb3RlY3RlZCAkZmllbGRzOwoKICAgIC8qKgogICAgICogQHZhciBOdW1iZXJDb252ZXJ0ZXJJbnRlcmZhY2UKICAgICAqLwogICAgcHJvdGVjdGVkICRudW1iZXJDb252ZXJ0ZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UKICAgICAqLwogICAgcHJvdGVjdGVkICR0aW1lQ29udmVydGVyOwoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIHVuaXZlcnNhbGx5IHVuaXF1ZSBpZGVudGlmaWVyIChVVUlEKSBmcm9tIGFuIGFycmF5IG9mIGZpZWxkcwogICAgICoKICAgICAqIFVubGVzcyB5b3UncmUgbWFraW5nIGFkdmFuY2VkIHVzZSBvZiB0aGlzIGxpYnJhcnkgdG8gZ2VuZXJhdGUgaWRlbnRpZmllcnMKICAgICAqIHRoYXQgZGV2aWF0ZSBmcm9tIFJGQyA0MTIyLCB5b3UgcHJvYmFibHkgZG8gbm90IHdhbnQgdG8gaW5zdGFudGlhdGUgYQogICAgICogVVVJRCBkaXJlY3RseS4gVXNlIHRoZSBzdGF0aWMgbWV0aG9kcywgaW5zdGVhZDoKICAgICAqCiAgICAgKiBgYGAKICAgICAqIHVzZSBSYW1zZXlcVXVpZFxVdWlkOwogICAgICoKICAgICAqICR0aW1lQmFzZWRVdWlkID0gVXVpZDo6dXVpZDEoKTsKICAgICAqICRuYW1lc3BhY2VNZDVVdWlkID0gVXVpZDo6dXVpZDMoVXVpZDo6TkFNRVNQQUNFX1VSTCwgJ2h0dHA6Ly9waHAubmV0LycpOwogICAgICogJHJhbmRvbVV1aWQgPSBVdWlkOjp1dWlkNCgpOwogICAgICogJG5hbWVzcGFjZVNoYTFVdWlkID0gVXVpZDo6dXVpZDUoVXVpZDo6TkFNRVNQQUNFX1VSTCwgJ2h0dHA6Ly9waHAubmV0LycpOwogICAgICogYGBgCiAgICAgKgogICAgICogQHBhcmFtIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2UgJGZpZWxkcyBUaGUgZmllbGRzIGZyb20gd2hpY2ggdG8gY29uc3RydWN0IGEgVVVJRAogICAgICogQHBhcmFtIE51bWJlckNvbnZlcnRlckludGVyZmFjZSAkbnVtYmVyQ29udmVydGVyIFRoZSBudW1iZXIgY29udmVydGVyIHRvIHVzZQogICAgICogICAgIGZvciBjb252ZXJ0aW5nIGhleCB2YWx1ZXMgdG8vZnJvbSBpbnRlZ2VycwogICAgICogQHBhcmFtIENvZGVjSW50ZXJmYWNlICRjb2RlYyBUaGUgY29kZWMgdG8gdXNlIHdoZW4gZW5jb2Rpbmcgb3IgZGVjb2RpbmcKICAgICAqICAgICBVVUlEIHN0cmluZ3MKICAgICAqIEBwYXJhbSBUaW1lQ29udmVydGVySW50ZXJmYWNlICR0aW1lQ29udmVydGVyIFRoZSB0aW1lIGNvbnZlcnRlciB0byB1c2UKICAgICAqICAgICBmb3IgY29udmVydGluZyB0aW1lc3RhbXBzIGV4dHJhY3RlZCBmcm9tIGEgVVVJRCB0byB1bml4IHRpbWVzdGFtcHMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2UgJGZpZWxkcywKICAgICAgICBOdW1iZXJDb252ZXJ0ZXJJbnRlcmZhY2UgJG51bWJlckNvbnZlcnRlciwKICAgICAgICBDb2RlY0ludGVyZmFjZSAkY29kZWMsCiAgICAgICAgVGltZUNvbnZlcnRlckludGVyZmFjZSAkdGltZUNvbnZlcnRlcgogICAgKSB7CiAgICAgICAgJHRoaXMtPmZpZWxkcyA9ICRmaWVsZHM7CiAgICAgICAgJHRoaXMtPmNvZGVjID0gJGNvZGVjOwogICAgICAgICR0aGlzLT5udW1iZXJDb252ZXJ0ZXIgPSAkbnVtYmVyQ29udmVydGVyOwogICAgICAgICR0aGlzLT50aW1lQ29udmVydGVyID0gJHRpbWVDb252ZXJ0ZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcHNhbG0tcmV0dXJuIG5vbi1lbXB0eS1zdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50b1N0cmluZygpOwogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydHMgdGhlIFVVSUQgdG8gYSBzdHJpbmcgZm9yIEpTT04gc2VyaWFsaXphdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyB0aGUgVVVJRCB0byBhIHN0cmluZyBmb3IgUEhQIHNlcmlhbGl6YXRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlcmlhbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldEZpZWxkcygpLT5nZXRCeXRlcygpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheXtieXRlczogc3RyaW5nfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gWydieXRlcycgPT4gJHRoaXMtPnNlcmlhbGl6ZSgpXTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlLWNvbnN0cnVjdHMgdGhlIG9iamVjdCBmcm9tIGl0cyBzZXJpYWxpemVkIGZvcm0KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXJpYWxpemVkIFRoZSBzZXJpYWxpemVkIFBIUCBzdHJpbmcgdG8gdW5zZXJpYWxpemUgaW50bwogICAgICogICAgIGEgVXVpZEludGVyZmFjZSBpbnN0YW5jZQogICAgICoKICAgICAqIEBwaHBjc1N1cHByZXNzIFNsZXZvbWF0Q29kaW5nU3RhbmRhcmQuVHlwZUhpbnRzLlBhcmFtZXRlclR5cGVIaW50Lk1pc3NpbmdOYXRpdmVUeXBlSGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5zZXJpYWxpemUoJHNlcmlhbGl6ZWQpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKHN0cmxlbigkc2VyaWFsaXplZCkgPT09IDE2KSB7CiAgICAgICAgICAgIC8qKiBAdmFyIFV1aWQgJHV1aWQgKi8KICAgICAgICAgICAgJHV1aWQgPSBzZWxmOjpnZXRGYWN0b3J5KCktPmZyb21CeXRlcygkc2VyaWFsaXplZCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLyoqIEB2YXIgVXVpZCAkdXVpZCAqLwogICAgICAgICAgICAkdXVpZCA9IHNlbGY6OmdldEZhY3RvcnkoKS0+ZnJvbVN0cmluZygkc2VyaWFsaXplZCk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+Y29kZWMgPSAkdXVpZC0+Y29kZWM7CiAgICAgICAgJHRoaXMtPm51bWJlckNvbnZlcnRlciA9ICR1dWlkLT5udW1iZXJDb252ZXJ0ZXI7CiAgICAgICAgJHRoaXMtPmZpZWxkcyA9ICR1dWlkLT5maWVsZHM7CiAgICAgICAgJHRoaXMtPnRpbWVDb252ZXJ0ZXIgPSAkdXVpZC0+dGltZUNvbnZlcnRlcjsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheXtieXRlczogc3RyaW5nfSAkZGF0YQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX191bnNlcmlhbGl6ZShhcnJheSAkZGF0YSk6IHZvaWQKICAgIHsKICAgICAgICAvLyBAY29kZUNvdmVyYWdlSWdub3JlU3RhcnQKICAgICAgICBpZiAoIWlzc2V0KCRkYXRhWydieXRlcyddKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVmFsdWVFcnJvcihzcHJpbnRmKCclcygpOiBBcmd1bWVudCAjMSAoJGRhdGEpIGlzIGludmFsaWQnLCBfX01FVEhPRF9fKSk7CiAgICAgICAgfQogICAgICAgIC8vIEBjb2RlQ292ZXJhZ2VJZ25vcmVFbmQKCiAgICAgICAgJHRoaXMtPnVuc2VyaWFsaXplKCRkYXRhWydieXRlcyddKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcGFyZVRvKFV1aWRJbnRlcmZhY2UgJG90aGVyKTogaW50CiAgICB7CiAgICAgICAgJGNvbXBhcmUgPSBzdHJjbXAoJHRoaXMtPnRvU3RyaW5nKCksICRvdGhlci0+dG9TdHJpbmcoKSk7CgogICAgICAgIGlmICgkY29tcGFyZSA8IDApIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRjb21wYXJlID4gMCkgewogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBlcXVhbHMoP29iamVjdCAkb3RoZXIpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCEkb3RoZXIgaW5zdGFuY2VvZiBVdWlkSW50ZXJmYWNlKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+Y29tcGFyZVRvKCRvdGhlcikgPT09IDA7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcHNhbG0tcmV0dXJuIG5vbi1lbXB0eS1zdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEJ5dGVzKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y29kZWMtPmVuY29kZUJpbmFyeSgkdGhpcyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEZpZWxkcygpOiBGaWVsZHNJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmZpZWxkczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGV4KCk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBIZXhhZGVjaW1hbChzdHJfcmVwbGFjZSgnLScsICcnLCAkdGhpcy0+dG9TdHJpbmcoKSkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbnRlZ2VyKCk6IEludGVnZXJPYmplY3QKICAgIHsKICAgICAgICByZXR1cm4gbmV3IEludGVnZXJPYmplY3QoJHRoaXMtPm51bWJlckNvbnZlcnRlci0+ZnJvbUhleCgkdGhpcy0+Z2V0SGV4KCktPnRvU3RyaW5nKCkpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwc2FsbS1yZXR1cm4gbm9uLWVtcHR5LXN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9TdHJpbmcoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jb2RlYy0+ZW5jb2RlKCR0aGlzKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGZhY3RvcnkgdXNlZCB0byBjcmVhdGUgVVVJRHMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRGYWN0b3J5KCk6IFV1aWRGYWN0b3J5SW50ZXJmYWNlCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OiRmYWN0b3J5ID09PSBudWxsKSB7CiAgICAgICAgICAgIHNlbGY6OiRmYWN0b3J5ID0gbmV3IFV1aWRGYWN0b3J5KCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc2VsZjo6JGZhY3Rvcnk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBmYWN0b3J5IHVzZWQgdG8gY3JlYXRlIFVVSURzCiAgICAgKgogICAgICogQHBhcmFtIFV1aWRGYWN0b3J5SW50ZXJmYWNlICRmYWN0b3J5IEEgZmFjdG9yeSB0aGF0IHdpbGwgYmUgdXNlZCBieSB0aGlzCiAgICAgKiAgICAgY2xhc3MgdG8gY3JlYXRlIFVVSURzCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0RmFjdG9yeShVdWlkRmFjdG9yeUludGVyZmFjZSAkZmFjdG9yeSk6IHZvaWQKICAgIHsKICAgICAgICAvLyBOb3RlOiBub24tc3RyaWN0IGVxdWFsaXR5IGlzIGludGVudGlvbmFsIGhlcmUuIElmIHRoZSBmYWN0b3J5IGlzIGNvbmZpZ3VyZWQgZGlmZmVyZW50bHksIGV2ZXJ5IGFzc3VtcHRpb24KICAgICAgICAvLyAgICAgICBhcm91bmQgcHVyaXR5IGlzIGJyb2tlbiwgYW5kIHdlIGhhdmUgdG8gaW50ZXJuYWxseSBkZWNpZGUgZXZlcnl0aGluZyBkaWZmZXJlbnRseS4KICAgICAgICAvLyBwaHBjczppZ25vcmUgU2xldm9tYXRDb2RpbmdTdGFuZGFyZC5PcGVyYXRvcnMuRGlzYWxsb3dFcXVhbE9wZXJhdG9ycy5EaXNhbGxvd2VkTm90RXF1YWxPcGVyYXRvcgogICAgICAgIHNlbGY6OiRmYWN0b3J5UmVwbGFjZWQgPSAoJGZhY3RvcnkgIT0gbmV3IFV1aWRGYWN0b3J5KCkpOwoKICAgICAgICBzZWxmOjokZmFjdG9yeSA9ICRmYWN0b3J5OwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIFVVSUQgZnJvbSBhIGJ5dGUgc3RyaW5nCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYnl0ZXMgQSBiaW5hcnkgc3RyaW5nCiAgICAgKgogICAgICogQHJldHVybiBVdWlkSW50ZXJmYWNlIEEgVXVpZEludGVyZmFjZSBpbnN0YW5jZSBjcmVhdGVkIGZyb20gYSBiaW5hcnkKICAgICAqICAgICBzdHJpbmcgcmVwcmVzZW50YXRpb24KICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZSBub3RlOiBjaGFuZ2luZyB0aGUgaW50ZXJuYWwgZmFjdG9yeSBpcyBhbiBlZGdlIGNhc2Ugbm90IGNvdmVyZWQgYnkgcHVyaXR5IGludmFyaWFudHMsCiAgICAgKiAgICAgICAgICAgICBidXQgdW5kZXIgY29uc3RhbnQgZmFjdG9yeSBzZXR1cHMsIHRoaXMgbWV0aG9kIG9wZXJhdGVzIGluIGZ1bmN0aW9uYWxseSBwdXJlIG1hbm5lcnMKICAgICAqCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgSW1wdXJlU3RhdGljUHJvcGVydHkgd2Uga25vdyB0aGF0IHRoZSBmYWN0b3J5IGJlaW5nIHJlcGxhY2VkIGNhbiBsZWFkIHRvIG1hc3NpdmUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZvYyBhY3Jvc3MgYWxsIGNvbnN1bWVyczogdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLCBhbmQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBnZW5lcmFsbHkgdG8gYmUgZGlzY291cmFnZWQuIFVudGlsIHRoZSBmYWN0b3J5IGlzIGtlcHQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bi1yZXBsYWNlZCwgdGhpcyBtZXRob2QgaXMgZWZmZWN0aXZlbHkgcHVyZS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tQnl0ZXMoc3RyaW5nICRieXRlcyk6IFV1aWRJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoISBzZWxmOjokZmFjdG9yeVJlcGxhY2VkICYmIHN0cmxlbigkYnl0ZXMpID09PSAxNikgewogICAgICAgICAgICAkYmFzZTE2VXVpZCA9IGJpbjJoZXgoJGJ5dGVzKTsKCiAgICAgICAgICAgIC8vIE5vdGU6IHdlIGFyZSBjYWxsaW5nIGBmcm9tU3RyaW5nYCBpbnRlcm5hbGx5IGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGUgZ2l2ZW4gYCRieXRlc2AgaXMgYSB2YWxpZCBVVUlECiAgICAgICAgICAgIHJldHVybiBzZWxmOjpmcm9tU3RyaW5nKAogICAgICAgICAgICAgICAgc3Vic3RyKCRiYXNlMTZVdWlkLCAwLCA4KQogICAgICAgICAgICAgICAgLiAnLScKICAgICAgICAgICAgICAgIC4gc3Vic3RyKCRiYXNlMTZVdWlkLCA4LCA0KQogICAgICAgICAgICAgICAgLiAnLScKICAgICAgICAgICAgICAgIC4gc3Vic3RyKCRiYXNlMTZVdWlkLCAxMiwgNCkKICAgICAgICAgICAgICAgIC4gJy0nCiAgICAgICAgICAgICAgICAuIHN1YnN0cigkYmFzZTE2VXVpZCwgMTYsIDQpCiAgICAgICAgICAgICAgICAuICctJwogICAgICAgICAgICAgICAgLiBzdWJzdHIoJGJhc2UxNlV1aWQsIDIwLCAxMikKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBzZWxmOjpnZXRGYWN0b3J5KCktPmZyb21CeXRlcygkYnl0ZXMpOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIFVVSUQgZnJvbSB0aGUgc3RyaW5nIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdXVpZCBBIGhleGFkZWNpbWFsIHN0cmluZwogICAgICoKICAgICAqIEByZXR1cm4gVXVpZEludGVyZmFjZSBBIFV1aWRJbnRlcmZhY2UgaW5zdGFuY2UgY3JlYXRlZCBmcm9tIGEgaGV4YWRlY2ltYWwKICAgICAqICAgICBzdHJpbmcgcmVwcmVzZW50YXRpb24KICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZSBub3RlOiBjaGFuZ2luZyB0aGUgaW50ZXJuYWwgZmFjdG9yeSBpcyBhbiBlZGdlIGNhc2Ugbm90IGNvdmVyZWQgYnkgcHVyaXR5IGludmFyaWFudHMsCiAgICAgKiAgICAgICAgICAgICBidXQgdW5kZXIgY29uc3RhbnQgZmFjdG9yeSBzZXR1cHMsIHRoaXMgbWV0aG9kIG9wZXJhdGVzIGluIGZ1bmN0aW9uYWxseSBwdXJlIG1hbm5lcnMKICAgICAqCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgSW1wdXJlU3RhdGljUHJvcGVydHkgd2Uga25vdyB0aGF0IHRoZSBmYWN0b3J5IGJlaW5nIHJlcGxhY2VkIGNhbiBsZWFkIHRvIG1hc3NpdmUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZvYyBhY3Jvc3MgYWxsIGNvbnN1bWVyczogdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLCBhbmQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBnZW5lcmFsbHkgdG8gYmUgZGlzY291cmFnZWQuIFVudGlsIHRoZSBmYWN0b3J5IGlzIGtlcHQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bi1yZXBsYWNlZCwgdGhpcyBtZXRob2QgaXMgZWZmZWN0aXZlbHkgcHVyZS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tU3RyaW5nKHN0cmluZyAkdXVpZCk6IFV1aWRJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoISBzZWxmOjokZmFjdG9yeVJlcGxhY2VkICYmIHByZWdfbWF0Y2goTGF6eVV1aWRGcm9tU3RyaW5nOjpWQUxJRF9SRUdFWCwgJHV1aWQpID09PSAxKSB7CiAgICAgICAgICAgIGFzc2VydCgkdXVpZCAhPT0gJycpOwoKICAgICAgICAgICAgcmV0dXJuIG5ldyBMYXp5VXVpZEZyb21TdHJpbmcoc3RydG9sb3dlcigkdXVpZCkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHNlbGY6OmdldEZhY3RvcnkoKS0+ZnJvbVN0cmluZygkdXVpZCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgVVVJRCBmcm9tIGEgRGF0ZVRpbWVJbnRlcmZhY2UgaW5zdGFuY2UKICAgICAqCiAgICAgKiBAcGFyYW0gRGF0ZVRpbWVJbnRlcmZhY2UgJGRhdGVUaW1lIFRoZSBkYXRlIGFuZCB0aW1lCiAgICAgKiBAcGFyYW0gSGV4YWRlY2ltYWx8bnVsbCAkbm9kZSBBIDQ4LWJpdCBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBoYXJkd2FyZQogICAgICogICAgIGFkZHJlc3MKICAgICAqIEBwYXJhbSBpbnR8bnVsbCAkY2xvY2tTZXEgQSAxNC1iaXQgbnVtYmVyIHVzZWQgdG8gaGVscCBhdm9pZCBkdXBsaWNhdGVzCiAgICAgKiAgICAgdGhhdCBjb3VsZCBhcmlzZSB3aGVuIHRoZSBjbG9jayBpcyBzZXQgYmFja3dhcmRzIGluIHRpbWUgb3IgaWYgdGhlCiAgICAgKiAgICAgbm9kZSBJRCBjaGFuZ2VzCiAgICAgKgogICAgICogQHJldHVybiBVdWlkSW50ZXJmYWNlIEEgVXVpZEludGVyZmFjZSBpbnN0YW5jZSB0aGF0IHJlcHJlc2VudHMgYQogICAgICogICAgIHZlcnNpb24gMSBVVUlEIGNyZWF0ZWQgZnJvbSBhIERhdGVUaW1lSW50ZXJmYWNlIGluc3RhbmNlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbURhdGVUaW1lKAogICAgICAgIERhdGVUaW1lSW50ZXJmYWNlICRkYXRlVGltZSwKICAgICAgICA/SGV4YWRlY2ltYWwgJG5vZGUgPSBudWxsLAogICAgICAgID9pbnQgJGNsb2NrU2VxID0gbnVsbAogICAgKTogVXVpZEludGVyZmFjZSB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmdldEZhY3RvcnkoKS0+ZnJvbURhdGVUaW1lKCRkYXRlVGltZSwgJG5vZGUsICRjbG9ja1NlcSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgVVVJRCBmcm9tIGEgMTI4LWJpdCBpbnRlZ2VyIHN0cmluZwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGludGVnZXIgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIDEyOC1iaXQgaW50ZWdlcgogICAgICoKICAgICAqIEByZXR1cm4gVXVpZEludGVyZmFjZSBBIFV1aWRJbnRlcmZhY2UgaW5zdGFuY2UgY3JlYXRlZCBmcm9tIHRoZSBzdHJpbmcKICAgICAqICAgICByZXByZXNlbnRhdGlvbiBvZiBhIDEyOC1iaXQgaW50ZWdlcgogICAgICoKICAgICAqIEBwc2FsbS1wdXJlIG5vdGU6IGNoYW5naW5nIHRoZSBpbnRlcm5hbCBmYWN0b3J5IGlzIGFuIGVkZ2UgY2FzZSBub3QgY292ZXJlZCBieSBwdXJpdHkgaW52YXJpYW50cywKICAgICAqICAgICAgICAgICAgIGJ1dCB1bmRlciBjb25zdGFudCBmYWN0b3J5IHNldHVwcywgdGhpcyBtZXRob2Qgb3BlcmF0ZXMgaW4gZnVuY3Rpb25hbGx5IHB1cmUgbWFubmVycwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21JbnRlZ2VyKHN0cmluZyAkaW50ZWdlcik6IFV1aWRJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6Z2V0RmFjdG9yeSgpLT5mcm9tSW50ZWdlcigkaW50ZWdlcik7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIHN0cmluZyBpcyBhIHZhbGlkIFVVSUQKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1dWlkIEEgc3RyaW5nIHRvIHZhbGlkYXRlIGFzIGEgVVVJRAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBUcnVlIGlmIHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBVVUlELCBmYWxzZSBvdGhlcndpc2UKICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZSBub3RlOiBjaGFuZ2luZyB0aGUgaW50ZXJuYWwgZmFjdG9yeSBpcyBhbiBlZGdlIGNhc2Ugbm90IGNvdmVyZWQgYnkgcHVyaXR5IGludmFyaWFudHMsCiAgICAgKiAgICAgICAgICAgICBidXQgdW5kZXIgY29uc3RhbnQgZmFjdG9yeSBzZXR1cHMsIHRoaXMgbWV0aG9kIG9wZXJhdGVzIGluIGZ1bmN0aW9uYWxseSBwdXJlIG1hbm5lcnMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc1ZhbGlkKHN0cmluZyAkdXVpZCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6Z2V0RmFjdG9yeSgpLT5nZXRWYWxpZGF0b3IoKS0+dmFsaWRhdGUoJHV1aWQpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHZlcnNpb24gMSAodGltZS1iYXNlZCkgVVVJRCBmcm9tIGEgaG9zdCBJRCwgc2VxdWVuY2UgbnVtYmVyLAogICAgICogYW5kIHRoZSBjdXJyZW50IHRpbWUKICAgICAqCiAgICAgKiBAcGFyYW0gSGV4YWRlY2ltYWx8aW50fHN0cmluZ3xudWxsICRub2RlIEEgNDgtYml0IG51bWJlciByZXByZXNlbnRpbmcgdGhlCiAgICAgKiAgICAgaGFyZHdhcmUgYWRkcmVzczsgdGhpcyBudW1iZXIgbWF5IGJlIHJlcHJlc2VudGVkIGFzIGFuIGludGVnZXIgb3IgYQogICAgICogICAgIGhleGFkZWNpbWFsIHN0cmluZwogICAgICogQHBhcmFtIGludCAkY2xvY2tTZXEgQSAxNC1iaXQgbnVtYmVyIHVzZWQgdG8gaGVscCBhdm9pZCBkdXBsaWNhdGVzIHRoYXQKICAgICAqICAgICBjb3VsZCBhcmlzZSB3aGVuIHRoZSBjbG9jayBpcyBzZXQgYmFja3dhcmRzIGluIHRpbWUgb3IgaWYgdGhlIG5vZGUgSUQKICAgICAqICAgICBjaGFuZ2VzCiAgICAgKgogICAgICogQHJldHVybiBVdWlkSW50ZXJmYWNlIEEgVXVpZEludGVyZmFjZSBpbnN0YW5jZSB0aGF0IHJlcHJlc2VudHMgYQogICAgICogICAgIHZlcnNpb24gMSBVVUlECiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXVpZDEoJG5vZGUgPSBudWxsLCA/aW50ICRjbG9ja1NlcSA9IG51bGwpOiBVdWlkSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmdldEZhY3RvcnkoKS0+dXVpZDEoJG5vZGUsICRjbG9ja1NlcSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgdmVyc2lvbiAyIChEQ0UgU2VjdXJpdHkpIFVVSUQgZnJvbSBhIGxvY2FsIGRvbWFpbiwgbG9jYWwKICAgICAqIGlkZW50aWZpZXIsIGhvc3QgSUQsIGNsb2NrIHNlcXVlbmNlLCBhbmQgdGhlIGN1cnJlbnQgdGltZQogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGxvY2FsRG9tYWluIFRoZSBsb2NhbCBkb21haW4gdG8gdXNlIHdoZW4gZ2VuZXJhdGluZyBieXRlcywKICAgICAqICAgICBhY2NvcmRpbmcgdG8gRENFIFNlY3VyaXR5CiAgICAgKiBAcGFyYW0gSW50ZWdlck9iamVjdHxudWxsICRsb2NhbElkZW50aWZpZXIgVGhlIGxvY2FsIGlkZW50aWZpZXIgZm9yIHRoZQogICAgICogICAgIGdpdmVuIGRvbWFpbjsgdGhpcyBtYXkgYmUgYSBVSUQgb3IgR0lEIG9uIFBPU0lYIHN5c3RlbXMsIGlmIHRoZSBsb2NhbAogICAgICogICAgIGRvbWFpbiBpcyBwZXJzb24gb3IgZ3JvdXAsIG9yIGl0IG1heSBiZSBhIHNpdGUtZGVmaW5lZCBpZGVudGlmaWVyCiAgICAgKiAgICAgaWYgdGhlIGxvY2FsIGRvbWFpbiBpcyBvcmcKICAgICAqIEBwYXJhbSBIZXhhZGVjaW1hbHxudWxsICRub2RlIEEgNDgtYml0IG51bWJlciByZXByZXNlbnRpbmcgdGhlIGhhcmR3YXJlCiAgICAgKiAgICAgYWRkcmVzcwogICAgICogQHBhcmFtIGludHxudWxsICRjbG9ja1NlcSBBIDE0LWJpdCBudW1iZXIgdXNlZCB0byBoZWxwIGF2b2lkIGR1cGxpY2F0ZXMKICAgICAqICAgICB0aGF0IGNvdWxkIGFyaXNlIHdoZW4gdGhlIGNsb2NrIGlzIHNldCBiYWNrd2FyZHMgaW4gdGltZSBvciBpZiB0aGUKICAgICAqICAgICBub2RlIElEIGNoYW5nZXMgKGluIGEgdmVyc2lvbiAyIFVVSUQsIHRoZSBsb3dlciA4IGJpdHMgb2YgdGhpcyBudW1iZXIKICAgICAqICAgICBhcmUgcmVwbGFjZWQgd2l0aCB0aGUgZG9tYWluKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFV1aWRJbnRlcmZhY2UgQSBVdWlkSW50ZXJmYWNlIGluc3RhbmNlIHRoYXQgcmVwcmVzZW50cyBhCiAgICAgKiAgICAgdmVyc2lvbiAyIFVVSUQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1dWlkMigKICAgICAgICBpbnQgJGxvY2FsRG9tYWluLAogICAgICAgID9JbnRlZ2VyT2JqZWN0ICRsb2NhbElkZW50aWZpZXIgPSBudWxsLAogICAgICAgID9IZXhhZGVjaW1hbCAkbm9kZSA9IG51bGwsCiAgICAgICAgP2ludCAkY2xvY2tTZXEgPSBudWxsCiAgICApOiBVdWlkSW50ZXJmYWNlIHsKICAgICAgICByZXR1cm4gc2VsZjo6Z2V0RmFjdG9yeSgpLT51dWlkMigkbG9jYWxEb21haW4sICRsb2NhbElkZW50aWZpZXIsICRub2RlLCAkY2xvY2tTZXEpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHZlcnNpb24gMyAobmFtZS1iYXNlZCkgVVVJRCBiYXNlZCBvbiB0aGUgTUQ1IGhhc2ggb2YgYQogICAgICogbmFtZXNwYWNlIElEIGFuZCBhIG5hbWUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfFV1aWRJbnRlcmZhY2UgJG5zIFRoZSBuYW1lc3BhY2UgKG11c3QgYmUgYSB2YWxpZCBVVUlEKQogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSB0byB1c2UgZm9yIGNyZWF0aW5nIGEgVVVJRAogICAgICoKICAgICAqIEByZXR1cm4gVXVpZEludGVyZmFjZSBBIFV1aWRJbnRlcmZhY2UgaW5zdGFuY2UgdGhhdCByZXByZXNlbnRzIGEKICAgICAqICAgICB2ZXJzaW9uIDMgVVVJRAogICAgICoKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBJbXB1cmVNZXRob2RDYWxsIHdlIGtub3cgdGhhdCB0aGUgZmFjdG9yeSBiZWluZyByZXBsYWNlZCBjYW4gbGVhZCB0byBtYXNzaXZlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZvYyBhY3Jvc3MgYWxsIGNvbnN1bWVyczogdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLCBhbmQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGdlbmVyYWxseSB0byBiZSBkaXNjb3VyYWdlZC4gVW50aWwgdGhlIGZhY3RvcnkgaXMga2VwdAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW4tcmVwbGFjZWQsIHRoaXMgbWV0aG9kIGlzIGVmZmVjdGl2ZWx5IHB1cmUuCiAgICAgKgogICAgICogQHBzYWxtLXB1cmUgbm90ZTogY2hhbmdpbmcgdGhlIGludGVybmFsIGZhY3RvcnkgaXMgYW4gZWRnZSBjYXNlIG5vdCBjb3ZlcmVkIGJ5IHB1cml0eSBpbnZhcmlhbnRzLAogICAgICogICAgICAgICAgICAgYnV0IHVuZGVyIGNvbnN0YW50IGZhY3Rvcnkgc2V0dXBzLCB0aGlzIG1ldGhvZCBvcGVyYXRlcyBpbiBmdW5jdGlvbmFsbHkgcHVyZSBtYW5uZXJzCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXVpZDMoJG5zLCBzdHJpbmcgJG5hbWUpOiBVdWlkSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmdldEZhY3RvcnkoKS0+dXVpZDMoJG5zLCAkbmFtZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgdmVyc2lvbiA0IChyYW5kb20pIFVVSUQKICAgICAqCiAgICAgKiBAcmV0dXJuIFV1aWRJbnRlcmZhY2UgQSBVdWlkSW50ZXJmYWNlIGluc3RhbmNlIHRoYXQgcmVwcmVzZW50cyBhCiAgICAgKiAgICAgdmVyc2lvbiA0IFVVSUQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1dWlkNCgpOiBVdWlkSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmdldEZhY3RvcnkoKS0+dXVpZDQoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSB2ZXJzaW9uIDUgKG5hbWUtYmFzZWQpIFVVSUQgYmFzZWQgb24gdGhlIFNIQS0xIGhhc2ggb2YgYQogICAgICogbmFtZXNwYWNlIElEIGFuZCBhIG5hbWUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfFV1aWRJbnRlcmZhY2UgJG5zIFRoZSBuYW1lc3BhY2UgKG11c3QgYmUgYSB2YWxpZCBVVUlEKQogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSB0byB1c2UgZm9yIGNyZWF0aW5nIGEgVVVJRAogICAgICoKICAgICAqIEByZXR1cm4gVXVpZEludGVyZmFjZSBBIFV1aWRJbnRlcmZhY2UgaW5zdGFuY2UgdGhhdCByZXByZXNlbnRzIGEKICAgICAqICAgICB2ZXJzaW9uIDUgVVVJRAogICAgICoKICAgICAqIEBwc2FsbS1wdXJlIG5vdGU6IGNoYW5naW5nIHRoZSBpbnRlcm5hbCBmYWN0b3J5IGlzIGFuIGVkZ2UgY2FzZSBub3QgY292ZXJlZCBieSBwdXJpdHkgaW52YXJpYW50cywKICAgICAqICAgICAgICAgICAgIGJ1dCB1bmRlciBjb25zdGFudCBmYWN0b3J5IHNldHVwcywgdGhpcyBtZXRob2Qgb3BlcmF0ZXMgaW4gZnVuY3Rpb25hbGx5IHB1cmUgbWFubmVycwogICAgICoKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBJbXB1cmVNZXRob2RDYWxsIHdlIGtub3cgdGhhdCB0aGUgZmFjdG9yeSBiZWluZyByZXBsYWNlZCBjYW4gbGVhZCB0byBtYXNzaXZlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZvYyBhY3Jvc3MgYWxsIGNvbnN1bWVyczogdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLCBhbmQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGdlbmVyYWxseSB0byBiZSBkaXNjb3VyYWdlZC4gVW50aWwgdGhlIGZhY3RvcnkgaXMga2VwdAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW4tcmVwbGFjZWQsIHRoaXMgbWV0aG9kIGlzIGVmZmVjdGl2ZWx5IHB1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXVpZDUoJG5zLCBzdHJpbmcgJG5hbWUpOiBVdWlkSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmdldEZhY3RvcnkoKS0+dXVpZDUoJG5zLCAkbmFtZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgdmVyc2lvbiA2IChvcmRlcmVkLXRpbWUpIFVVSUQgZnJvbSBhIGhvc3QgSUQsIHNlcXVlbmNlIG51bWJlciwKICAgICAqIGFuZCB0aGUgY3VycmVudCB0aW1lCiAgICAgKgogICAgICogQHBhcmFtIEhleGFkZWNpbWFsfG51bGwgJG5vZGUgQSA0OC1iaXQgbnVtYmVyIHJlcHJlc2VudGluZyB0aGUgaGFyZHdhcmUKICAgICAqICAgICBhZGRyZXNzCiAgICAgKiBAcGFyYW0gaW50ICRjbG9ja1NlcSBBIDE0LWJpdCBudW1iZXIgdXNlZCB0byBoZWxwIGF2b2lkIGR1cGxpY2F0ZXMgdGhhdAogICAgICogICAgIGNvdWxkIGFyaXNlIHdoZW4gdGhlIGNsb2NrIGlzIHNldCBiYWNrd2FyZHMgaW4gdGltZSBvciBpZiB0aGUgbm9kZSBJRAogICAgICogICAgIGNoYW5nZXMKICAgICAqCiAgICAgKiBAcmV0dXJuIFV1aWRJbnRlcmZhY2UgQSBVdWlkSW50ZXJmYWNlIGluc3RhbmNlIHRoYXQgcmVwcmVzZW50cyBhCiAgICAgKiAgICAgdmVyc2lvbiA2IFVVSUQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1dWlkNigKICAgICAgICA/SGV4YWRlY2ltYWwgJG5vZGUgPSBudWxsLAogICAgICAgID9pbnQgJGNsb2NrU2VxID0gbnVsbAogICAgKTogVXVpZEludGVyZmFjZSB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmdldEZhY3RvcnkoKS0+dXVpZDYoJG5vZGUsICRjbG9ja1NlcSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/UuidFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkOwoKdXNlIERhdGVUaW1lSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQnVpbGRlclxVdWlkQnVpbGRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvZGVjXENvZGVjSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXE51bWJlckNvbnZlcnRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcR2VuZXJhdG9yXERjZVNlY3VyaXR5R2VuZXJhdG9ySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcR2VuZXJhdG9yXERlZmF1bHRUaW1lR2VuZXJhdG9yOwp1c2UgUmFtc2V5XFV1aWRcR2VuZXJhdG9yXE5hbWVHZW5lcmF0b3JJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxHZW5lcmF0b3JcUmFuZG9tR2VuZXJhdG9ySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcR2VuZXJhdG9yXFRpbWVHZW5lcmF0b3JJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxMYXp5XExhenlVdWlkRnJvbVN0cmluZzsKdXNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXE5vZGVQcm92aWRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXFRpbWVcRml4ZWRUaW1lUHJvdmlkZXI7CnVzZSBSYW1zZXlcVXVpZFxUeXBlXEhleGFkZWNpbWFsOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxJbnRlZ2VyIGFzIEludGVnZXJPYmplY3Q7CnVzZSBSYW1zZXlcVXVpZFxUeXBlXFRpbWU7CnVzZSBSYW1zZXlcVXVpZFxWYWxpZGF0b3JcVmFsaWRhdG9ySW50ZXJmYWNlOwoKdXNlIGZ1bmN0aW9uIGJpbjJoZXg7CnVzZSBmdW5jdGlvbiBoZXgyYmluOwp1c2UgZnVuY3Rpb24gcGFjazsKdXNlIGZ1bmN0aW9uIHN0cl9wYWQ7CnVzZSBmdW5jdGlvbiBzdHJ0b2xvd2VyOwp1c2UgZnVuY3Rpb24gc3Vic3RyOwp1c2UgZnVuY3Rpb24gc3Vic3RyX3JlcGxhY2U7CnVzZSBmdW5jdGlvbiB1bnBhY2s7Cgp1c2UgY29uc3QgU1RSX1BBRF9MRUZUOwoKY2xhc3MgVXVpZEZhY3RvcnkgaW1wbGVtZW50cyBVdWlkRmFjdG9yeUludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgQ29kZWNJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkY29kZWM7CgogICAgLyoqCiAgICAgKiBAdmFyIERjZVNlY3VyaXR5R2VuZXJhdG9ySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJGRjZVNlY3VyaXR5R2VuZXJhdG9yOwoKICAgIC8qKgogICAgICogQHZhciBOYW1lR2VuZXJhdG9ySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJG5hbWVHZW5lcmF0b3I7CgogICAgLyoqCiAgICAgKiBAdmFyIE5vZGVQcm92aWRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRub2RlUHJvdmlkZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIE51bWJlckNvbnZlcnRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRudW1iZXJDb252ZXJ0ZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIFJhbmRvbUdlbmVyYXRvckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRyYW5kb21HZW5lcmF0b3I7CgogICAgLyoqCiAgICAgKiBAdmFyIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkdGltZUNvbnZlcnRlcjsKCiAgICAvKioKICAgICAqIEB2YXIgVGltZUdlbmVyYXRvckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICR0aW1lR2VuZXJhdG9yOwoKICAgIC8qKgogICAgICogQHZhciBVdWlkQnVpbGRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICR1dWlkQnVpbGRlcjsKCiAgICAvKioKICAgICAqIEB2YXIgVmFsaWRhdG9ySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJHZhbGlkYXRvcjsKCiAgICAvKiogQHZhciBib29sIHdoZXRoZXIgdGhlIGZlYXR1cmUgc2V0IHdhcyBwcm92aWRlZCBmcm9tIG91dHNpZGUsIG9yIHdlIGNhbiBvcGVyYXRlIHVuZGVyICJkZWZhdWx0IiBhc3N1bXB0aW9ucyAqLwogICAgcHJpdmF0ZSAkaXNEZWZhdWx0RmVhdHVyZVNldDsKCiAgICAvKioKICAgICAqIEBwYXJhbSBGZWF0dXJlU2V0ICRmZWF0dXJlcyBBIHNldCBvZiBhdmFpbGFibGUgZmVhdHVyZXMgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KD9GZWF0dXJlU2V0ICRmZWF0dXJlcyA9IG51bGwpCiAgICB7CiAgICAgICAgJHRoaXMtPmlzRGVmYXVsdEZlYXR1cmVTZXQgPSAkZmVhdHVyZXMgPT09IG51bGw7CgogICAgICAgICRmZWF0dXJlcyA9ICRmZWF0dXJlcyA/OiBuZXcgRmVhdHVyZVNldCgpOwoKICAgICAgICAkdGhpcy0+Y29kZWMgPSAkZmVhdHVyZXMtPmdldENvZGVjKCk7CiAgICAgICAgJHRoaXMtPmRjZVNlY3VyaXR5R2VuZXJhdG9yID0gJGZlYXR1cmVzLT5nZXREY2VTZWN1cml0eUdlbmVyYXRvcigpOwogICAgICAgICR0aGlzLT5uYW1lR2VuZXJhdG9yID0gJGZlYXR1cmVzLT5nZXROYW1lR2VuZXJhdG9yKCk7CiAgICAgICAgJHRoaXMtPm5vZGVQcm92aWRlciA9ICRmZWF0dXJlcy0+Z2V0Tm9kZVByb3ZpZGVyKCk7CiAgICAgICAgJHRoaXMtPm51bWJlckNvbnZlcnRlciA9ICRmZWF0dXJlcy0+Z2V0TnVtYmVyQ29udmVydGVyKCk7CiAgICAgICAgJHRoaXMtPnJhbmRvbUdlbmVyYXRvciA9ICRmZWF0dXJlcy0+Z2V0UmFuZG9tR2VuZXJhdG9yKCk7CiAgICAgICAgJHRoaXMtPnRpbWVDb252ZXJ0ZXIgPSAkZmVhdHVyZXMtPmdldFRpbWVDb252ZXJ0ZXIoKTsKICAgICAgICAkdGhpcy0+dGltZUdlbmVyYXRvciA9ICRmZWF0dXJlcy0+Z2V0VGltZUdlbmVyYXRvcigpOwogICAgICAgICR0aGlzLT51dWlkQnVpbGRlciA9ICRmZWF0dXJlcy0+Z2V0QnVpbGRlcigpOwogICAgICAgICR0aGlzLT52YWxpZGF0b3IgPSAkZmVhdHVyZXMtPmdldFZhbGlkYXRvcigpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgY29kZWMgdXNlZCBieSB0aGlzIGZhY3RvcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvZGVjKCk6IENvZGVjSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jb2RlYzsKICAgIH0KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGNvZGVjIHRvIHVzZSBmb3IgdGhpcyBmYWN0b3J5CiAgICAgKgogICAgICogQHBhcmFtIENvZGVjSW50ZXJmYWNlICRjb2RlYyBBIFVVSUQgZW5jb2Rlci1kZWNvZGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDb2RlYyhDb2RlY0ludGVyZmFjZSAkY29kZWMpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmlzRGVmYXVsdEZlYXR1cmVTZXQgPSBmYWxzZTsKCiAgICAgICAgJHRoaXMtPmNvZGVjID0gJGNvZGVjOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbmFtZSBnZW5lcmF0b3IgdXNlZCBieSB0aGlzIGZhY3RvcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5hbWVHZW5lcmF0b3IoKTogTmFtZUdlbmVyYXRvckludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bmFtZUdlbmVyYXRvcjsKICAgIH0KCiAgICAvKioKICAgICAqIFNldHMgdGhlIG5hbWUgZ2VuZXJhdG9yIHRvIHVzZSBmb3IgdGhpcyBmYWN0b3J5CiAgICAgKgogICAgICogQHBhcmFtIE5hbWVHZW5lcmF0b3JJbnRlcmZhY2UgJG5hbWVHZW5lcmF0b3IgQSBnZW5lcmF0b3IgdG8gZ2VuZXJhdGUKICAgICAqICAgICBiaW5hcnkgZGF0YSwgYmFzZWQgb24gYSBuYW1lc3BhY2UgYW5kIG5hbWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE5hbWVHZW5lcmF0b3IoTmFtZUdlbmVyYXRvckludGVyZmFjZSAkbmFtZUdlbmVyYXRvcik6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+aXNEZWZhdWx0RmVhdHVyZVNldCA9IGZhbHNlOwoKICAgICAgICAkdGhpcy0+bmFtZUdlbmVyYXRvciA9ICRuYW1lR2VuZXJhdG9yOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbm9kZSBwcm92aWRlciB1c2VkIGJ5IHRoaXMgZmFjdG9yeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9kZVByb3ZpZGVyKCk6IE5vZGVQcm92aWRlckludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bm9kZVByb3ZpZGVyOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmFuZG9tIGdlbmVyYXRvciB1c2VkIGJ5IHRoaXMgZmFjdG9yeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmFuZG9tR2VuZXJhdG9yKCk6IFJhbmRvbUdlbmVyYXRvckludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmFuZG9tR2VuZXJhdG9yOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdGltZSBnZW5lcmF0b3IgdXNlZCBieSB0aGlzIGZhY3RvcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVHZW5lcmF0b3IoKTogVGltZUdlbmVyYXRvckludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dGltZUdlbmVyYXRvcjsKICAgIH0KCiAgICAvKioKICAgICAqIFNldHMgdGhlIHRpbWUgZ2VuZXJhdG9yIHRvIHVzZSBmb3IgdGhpcyBmYWN0b3J5CiAgICAgKgogICAgICogQHBhcmFtIFRpbWVHZW5lcmF0b3JJbnRlcmZhY2UgJGdlbmVyYXRvciBBIGdlbmVyYXRvciB0byBnZW5lcmF0ZSBiaW5hcnkKICAgICAqICAgICBkYXRhLCBiYXNlZCBvbiB0aGUgdGltZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VGltZUdlbmVyYXRvcihUaW1lR2VuZXJhdG9ySW50ZXJmYWNlICRnZW5lcmF0b3IpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmlzRGVmYXVsdEZlYXR1cmVTZXQgPSBmYWxzZTsKCiAgICAgICAgJHRoaXMtPnRpbWVHZW5lcmF0b3IgPSAkZ2VuZXJhdG9yOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgRENFIFNlY3VyaXR5IGdlbmVyYXRvciB1c2VkIGJ5IHRoaXMgZmFjdG9yeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGNlU2VjdXJpdHlHZW5lcmF0b3IoKTogRGNlU2VjdXJpdHlHZW5lcmF0b3JJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmRjZVNlY3VyaXR5R2VuZXJhdG9yOwogICAgfQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgRENFIFNlY3VyaXR5IGdlbmVyYXRvciB0byB1c2UgZm9yIHRoaXMgZmFjdG9yeQogICAgICoKICAgICAqIEBwYXJhbSBEY2VTZWN1cml0eUdlbmVyYXRvckludGVyZmFjZSAkZ2VuZXJhdG9yIEEgZ2VuZXJhdG9yIHRvIGdlbmVyYXRlCiAgICAgKiAgICAgYmluYXJ5IGRhdGEsIGJhc2VkIG9uIGEgbG9jYWwgZG9tYWluIGFuZCBsb2NhbCBpZGVudGlmaWVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXREY2VTZWN1cml0eUdlbmVyYXRvcihEY2VTZWN1cml0eUdlbmVyYXRvckludGVyZmFjZSAkZ2VuZXJhdG9yKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5pc0RlZmF1bHRGZWF0dXJlU2V0ID0gZmFsc2U7CgogICAgICAgICR0aGlzLT5kY2VTZWN1cml0eUdlbmVyYXRvciA9ICRnZW5lcmF0b3I7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgY29udmVydGVyIHVzZWQgYnkgdGhpcyBmYWN0b3J5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROdW1iZXJDb252ZXJ0ZXIoKTogTnVtYmVyQ29udmVydGVySW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5udW1iZXJDb252ZXJ0ZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSByYW5kb20gZ2VuZXJhdG9yIHRvIHVzZSBmb3IgdGhpcyBmYWN0b3J5CiAgICAgKgogICAgICogQHBhcmFtIFJhbmRvbUdlbmVyYXRvckludGVyZmFjZSAkZ2VuZXJhdG9yIEEgZ2VuZXJhdG9yIHRvIGdlbmVyYXRlIGJpbmFyeQogICAgICogICAgIGRhdGEsIGJhc2VkIG9uIHNvbWUgcmFuZG9tIGlucHV0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRSYW5kb21HZW5lcmF0b3IoUmFuZG9tR2VuZXJhdG9ySW50ZXJmYWNlICRnZW5lcmF0b3IpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmlzRGVmYXVsdEZlYXR1cmVTZXQgPSBmYWxzZTsKCiAgICAgICAgJHRoaXMtPnJhbmRvbUdlbmVyYXRvciA9ICRnZW5lcmF0b3I7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBudW1iZXIgY29udmVydGVyIHRvIHVzZSBmb3IgdGhpcyBmYWN0b3J5CiAgICAgKgogICAgICogQHBhcmFtIE51bWJlckNvbnZlcnRlckludGVyZmFjZSAkY29udmVydGVyIEEgY29udmVydGVyIHRvIHVzZSBmb3Igd29ya2luZwogICAgICogICAgIHdpdGggbGFyZ2UgaW50ZWdlcnMgKGkuZS4gaW50ZWdlcnMgZ3JlYXRlciB0aGFuIFBIUF9JTlRfTUFYKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TnVtYmVyQ29udmVydGVyKE51bWJlckNvbnZlcnRlckludGVyZmFjZSAkY29udmVydGVyKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5pc0RlZmF1bHRGZWF0dXJlU2V0ID0gZmFsc2U7CgogICAgICAgICR0aGlzLT5udW1iZXJDb252ZXJ0ZXIgPSAkY29udmVydGVyOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgVVVJRCBidWlsZGVyIHVzZWQgYnkgdGhpcyBmYWN0b3J5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVdWlkQnVpbGRlcigpOiBVdWlkQnVpbGRlckludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dXVpZEJ1aWxkZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBVVUlEIGJ1aWxkZXIgdG8gdXNlIGZvciB0aGlzIGZhY3RvcnkKICAgICAqCiAgICAgKiBAcGFyYW0gVXVpZEJ1aWxkZXJJbnRlcmZhY2UgJGJ1aWxkZXIgQSBidWlsZGVyIGZvciBjb25zdHJ1Y3RpbmcgaW5zdGFuY2VzCiAgICAgKiAgICAgb2YgVXVpZEludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VXVpZEJ1aWxkZXIoVXVpZEJ1aWxkZXJJbnRlcmZhY2UgJGJ1aWxkZXIpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmlzRGVmYXVsdEZlYXR1cmVTZXQgPSBmYWxzZTsKCiAgICAgICAgJHRoaXMtPnV1aWRCdWlsZGVyID0gJGJ1aWxkZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcHNhbG0tbXV0YXRpb24tZnJlZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmFsaWRhdG9yKCk6IFZhbGlkYXRvckludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsaWRhdG9yOwogICAgfQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgdmFsaWRhdG9yIHRvIHVzZSBmb3IgdGhpcyBmYWN0b3J5CiAgICAgKgogICAgICogQHBhcmFtIFZhbGlkYXRvckludGVyZmFjZSAkdmFsaWRhdG9yIEEgdmFsaWRhdG9yIHRvIHVzZSBmb3IgdmFsaWRhdGluZwogICAgICogICAgIHdoZXRoZXIgYSBzdHJpbmcgaXMgYSB2YWxpZCBVVUlECiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRWYWxpZGF0b3IoVmFsaWRhdG9ySW50ZXJmYWNlICR2YWxpZGF0b3IpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmlzRGVmYXVsdEZlYXR1cmVTZXQgPSBmYWxzZTsKCiAgICAgICAgJHRoaXMtPnZhbGlkYXRvciA9ICR2YWxpZGF0b3I7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZnJvbUJ5dGVzKHN0cmluZyAkYnl0ZXMpOiBVdWlkSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jb2RlYy0+ZGVjb2RlQnl0ZXMoJGJ5dGVzKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmcm9tU3RyaW5nKHN0cmluZyAkdXVpZCk6IFV1aWRJbnRlcmZhY2UKICAgIHsKICAgICAgICAkdXVpZCA9IHN0cnRvbG93ZXIoJHV1aWQpOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmNvZGVjLT5kZWNvZGUoJHV1aWQpOwogICAgfQoKICAgIC8qKgogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZyb21JbnRlZ2VyKHN0cmluZyAkaW50ZWdlcik6IFV1aWRJbnRlcmZhY2UKICAgIHsKICAgICAgICAkaGV4ID0gJHRoaXMtPm51bWJlckNvbnZlcnRlci0+dG9IZXgoJGludGVnZXIpOwogICAgICAgICRoZXggPSBzdHJfcGFkKCRoZXgsIDMyLCAnMCcsIFNUUl9QQURfTEVGVCk7CgogICAgICAgIHJldHVybiAkdGhpcy0+ZnJvbVN0cmluZygkaGV4KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZnJvbURhdGVUaW1lKAogICAgICAgIERhdGVUaW1lSW50ZXJmYWNlICRkYXRlVGltZSwKICAgICAgICA/SGV4YWRlY2ltYWwgJG5vZGUgPSBudWxsLAogICAgICAgID9pbnQgJGNsb2NrU2VxID0gbnVsbAogICAgKTogVXVpZEludGVyZmFjZSB7CiAgICAgICAgJHRpbWVQcm92aWRlciA9IG5ldyBGaXhlZFRpbWVQcm92aWRlcigKICAgICAgICAgICAgbmV3IFRpbWUoJGRhdGVUaW1lLT5mb3JtYXQoJ1UnKSwgJGRhdGVUaW1lLT5mb3JtYXQoJ3UnKSkKICAgICAgICApOwoKICAgICAgICAkdGltZUdlbmVyYXRvciA9IG5ldyBEZWZhdWx0VGltZUdlbmVyYXRvcigKICAgICAgICAgICAgJHRoaXMtPm5vZGVQcm92aWRlciwKICAgICAgICAgICAgJHRoaXMtPnRpbWVDb252ZXJ0ZXIsCiAgICAgICAgICAgICR0aW1lUHJvdmlkZXIKICAgICAgICApOwoKICAgICAgICAkbm9kZUhleCA9ICRub2RlID8gJG5vZGUtPnRvU3RyaW5nKCkgOiBudWxsOwoKICAgICAgICAkYnl0ZXMgPSAkdGltZUdlbmVyYXRvci0+Z2VuZXJhdGUoJG5vZGVIZXgsICRjbG9ja1NlcSk7CgogICAgICAgIHJldHVybiAkdGhpcy0+dXVpZEZyb21CeXRlc0FuZFZlcnNpb24oJGJ5dGVzLCAxKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1dWlkMSgkbm9kZSA9IG51bGwsID9pbnQgJGNsb2NrU2VxID0gbnVsbCk6IFV1aWRJbnRlcmZhY2UKICAgIHsKICAgICAgICAkYnl0ZXMgPSAkdGhpcy0+dGltZUdlbmVyYXRvci0+Z2VuZXJhdGUoJG5vZGUsICRjbG9ja1NlcSk7CgogICAgICAgIHJldHVybiAkdGhpcy0+dXVpZEZyb21CeXRlc0FuZFZlcnNpb24oJGJ5dGVzLCAxKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdXVpZDIoCiAgICAgICAgaW50ICRsb2NhbERvbWFpbiwKICAgICAgICA/SW50ZWdlck9iamVjdCAkbG9jYWxJZGVudGlmaWVyID0gbnVsbCwKICAgICAgICA/SGV4YWRlY2ltYWwgJG5vZGUgPSBudWxsLAogICAgICAgID9pbnQgJGNsb2NrU2VxID0gbnVsbAogICAgKTogVXVpZEludGVyZmFjZSB7CiAgICAgICAgJGJ5dGVzID0gJHRoaXMtPmRjZVNlY3VyaXR5R2VuZXJhdG9yLT5nZW5lcmF0ZSgKICAgICAgICAgICAgJGxvY2FsRG9tYWluLAogICAgICAgICAgICAkbG9jYWxJZGVudGlmaWVyLAogICAgICAgICAgICAkbm9kZSwKICAgICAgICAgICAgJGNsb2NrU2VxCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT51dWlkRnJvbUJ5dGVzQW5kVmVyc2lvbigkYnl0ZXMsIDIpOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1dWlkMygkbnMsIHN0cmluZyAkbmFtZSk6IFV1aWRJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnV1aWRGcm9tTnNBbmROYW1lKCRucywgJG5hbWUsIDMsICdtZDUnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdXVpZDQoKTogVXVpZEludGVyZmFjZQogICAgewogICAgICAgICRieXRlcyA9ICR0aGlzLT5yYW5kb21HZW5lcmF0b3ItPmdlbmVyYXRlKDE2KTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT51dWlkRnJvbUJ5dGVzQW5kVmVyc2lvbigkYnl0ZXMsIDQpOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1dWlkNSgkbnMsIHN0cmluZyAkbmFtZSk6IFV1aWRJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnV1aWRGcm9tTnNBbmROYW1lKCRucywgJG5hbWUsIDUsICdzaGExJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHV1aWQ2KD9IZXhhZGVjaW1hbCAkbm9kZSA9IG51bGwsID9pbnQgJGNsb2NrU2VxID0gbnVsbCk6IFV1aWRJbnRlcmZhY2UKICAgIHsKICAgICAgICAkbm9kZUhleCA9ICRub2RlID8gJG5vZGUtPnRvU3RyaW5nKCkgOiBudWxsOwogICAgICAgICRieXRlcyA9ICR0aGlzLT50aW1lR2VuZXJhdG9yLT5nZW5lcmF0ZSgkbm9kZUhleCwgJGNsb2NrU2VxKTsKCiAgICAgICAgLy8gUmVhcnJhbmdlIHRoZSBieXRlcywgYWNjb3JkaW5nIHRvIHRoZSBVVUlEIHZlcnNpb24gNiBzcGVjaWZpY2F0aW9uLgogICAgICAgICR2NiA9ICRieXRlc1s2XSAuICRieXRlc1s3XSAuICRieXRlc1s0XSAuICRieXRlc1s1XQogICAgICAgICAgICAuICRieXRlc1swXSAuICRieXRlc1sxXSAuICRieXRlc1syXSAuICRieXRlc1szXTsKICAgICAgICAkdjYgPSBiaW4yaGV4KCR2Nik7CgogICAgICAgIC8vIERyb3AgdGhlIGZpcnN0IGZvdXIgYml0cywgd2hpbGUgYWRkaW5nIGFuIGVtcHR5IGZvdXIgYml0cyBmb3IgdGhlCiAgICAgICAgLy8gdmVyc2lvbiBmaWVsZC4gVGhpcyBhbGxvd3MgdXMgdG8gcmVjb25zdHJ1Y3QgdGhlIGNvcnJlY3QgdGltZSBmcm9tCiAgICAgICAgLy8gdGhlIGJ5dGVzIG9mIHRoaXMgVVVJRC4KICAgICAgICAkdjZCeXRlcyA9IGhleDJiaW4oc3Vic3RyKCR2NiwgMSwgMTIpIC4gJzAnIC4gc3Vic3RyKCR2NiwgLTMpKTsKICAgICAgICAkdjZCeXRlcyAuPSBzdWJzdHIoJGJ5dGVzLCA4KTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT51dWlkRnJvbUJ5dGVzQW5kVmVyc2lvbigkdjZCeXRlcywgNik7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgVXVpZCBjcmVhdGVkIGZyb20gdGhlIHByb3ZpZGVkIGJ5dGUgc3RyaW5nCiAgICAgKgogICAgICogVXNlcyB0aGUgY29uZmlndXJlZCBidWlsZGVyIGFuZCBjb2RlYyBhbmQgdGhlIHByb3ZpZGVkIGJ5dGUgc3RyaW5nIHRvCiAgICAgKiBjb25zdHJ1Y3QgYSBVdWlkIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRieXRlcyBUaGUgYnl0ZSBzdHJpbmcgZnJvbSB3aGljaCB0byBjb25zdHJ1Y3QgYSBVVUlECiAgICAgKgogICAgICogQHJldHVybiBVdWlkSW50ZXJmYWNlIEFuIGluc3RhbmNlIG9mIFV1aWRJbnRlcmZhY2UsIGNyZWF0ZWQgZnJvbSB0aGUKICAgICAqICAgICBwcm92aWRlZCBieXRlcwogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1dWlkKHN0cmluZyAkYnl0ZXMpOiBVdWlkSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51dWlkQnVpbGRlci0+YnVpbGQoJHRoaXMtPmNvZGVjLCAkYnl0ZXMpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHZlcnNpb24gMyBvciA1IG5hbWVzcGFjZWQgVXVpZAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8VXVpZEludGVyZmFjZSAkbnMgVGhlIG5hbWVzcGFjZSAobXVzdCBiZSBhIHZhbGlkIFVVSUQpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIFRoZSBuYW1lIHRvIGhhc2ggdG9nZXRoZXIgd2l0aCB0aGUgbmFtZXNwYWNlCiAgICAgKiBAcGFyYW0gaW50ICR2ZXJzaW9uIFRoZSB2ZXJzaW9uIG9mIFVVSUQgdG8gY3JlYXRlICgzIG9yIDUpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRoYXNoQWxnb3JpdGhtIFRoZSBoYXNoaW5nIGFsZ29yaXRobSB0byB1c2Ugd2hlbiBoYXNoaW5nCiAgICAgKiAgICAgdG9nZXRoZXIgdGhlIG5hbWVzcGFjZSBhbmQgbmFtZQogICAgICoKICAgICAqIEByZXR1cm4gVXVpZEludGVyZmFjZSBBbiBpbnN0YW5jZSBvZiBVdWlkSW50ZXJmYWNlLCBjcmVhdGVkIGJ5IGhhc2hpbmcKICAgICAqICAgICB0b2dldGhlciB0aGUgcHJvdmlkZWQgbmFtZXNwYWNlIGFuZCBuYW1lCiAgICAgKgogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiB1dWlkRnJvbU5zQW5kTmFtZSgkbnMsIHN0cmluZyAkbmFtZSwgaW50ICR2ZXJzaW9uLCBzdHJpbmcgJGhhc2hBbGdvcml0aG0pOiBVdWlkSW50ZXJmYWNlCiAgICB7CiAgICAgICAgaWYgKCEoJG5zIGluc3RhbmNlb2YgVXVpZEludGVyZmFjZSkpIHsKICAgICAgICAgICAgJG5zID0gJHRoaXMtPmZyb21TdHJpbmcoJG5zKTsKICAgICAgICB9CgogICAgICAgICRieXRlcyA9ICR0aGlzLT5uYW1lR2VuZXJhdG9yLT5nZW5lcmF0ZSgkbnMsICRuYW1lLCAkaGFzaEFsZ29yaXRobSk7CgogICAgICAgIHJldHVybiAkdGhpcy0+dXVpZEZyb21CeXRlc0FuZFZlcnNpb24oc3Vic3RyKCRieXRlcywgMCwgMTYpLCAkdmVyc2lvbik7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIFJGQyA0MTIyIHZhcmlhbnQgVXVpZCwgY3JlYXRlZCBmcm9tIHRoZSBwcm92aWRlZCBieXRlcyBhbmQgdmVyc2lvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJ5dGVzIFRoZSBieXRlIHN0cmluZyB0byBjb252ZXJ0IHRvIGEgVVVJRAogICAgICogQHBhcmFtIGludCAkdmVyc2lvbiBUaGUgUkZDIDQxMjIgdmVyc2lvbiB0byBhcHBseSB0byB0aGUgVVVJRAogICAgICoKICAgICAqIEByZXR1cm4gVXVpZEludGVyZmFjZSBBbiBpbnN0YW5jZSBvZiBVdWlkSW50ZXJmYWNlLCBjcmVhdGVkIGZyb20gdGhlCiAgICAgKiAgICAgYnl0ZSBzdHJpbmcgYW5kIHZlcnNpb24KICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHV1aWRGcm9tQnl0ZXNBbmRWZXJzaW9uKHN0cmluZyAkYnl0ZXMsIGludCAkdmVyc2lvbik6IFV1aWRJbnRlcmZhY2UKICAgIHsKICAgICAgICAvKiogQHZhciBhcnJheSAkdW5wYWNrZWRUaW1lICovCiAgICAgICAgJHVucGFja2VkVGltZSA9IHVucGFjaygnbionLCBzdWJzdHIoJGJ5dGVzLCA2LCAyKSk7CiAgICAgICAgJHRpbWVIaSA9IChpbnQpICR1bnBhY2tlZFRpbWVbMV07CiAgICAgICAgJHRpbWVIaUFuZFZlcnNpb24gPSBwYWNrKCduKicsIEJpbmFyeVV0aWxzOjphcHBseVZlcnNpb24oJHRpbWVIaSwgJHZlcnNpb24pKTsKCiAgICAgICAgLyoqIEB2YXIgYXJyYXkgJHVucGFja2VkQ2xvY2tTZXEgKi8KICAgICAgICAkdW5wYWNrZWRDbG9ja1NlcSA9IHVucGFjaygnbionLCBzdWJzdHIoJGJ5dGVzLCA4LCAyKSk7CiAgICAgICAgJGNsb2NrU2VxSGkgPSAoaW50KSAkdW5wYWNrZWRDbG9ja1NlcVsxXTsKICAgICAgICAkY2xvY2tTZXFIaUFuZFJlc2VydmVkID0gcGFjaygnbionLCBCaW5hcnlVdGlsczo6YXBwbHlWYXJpYW50KCRjbG9ja1NlcUhpKSk7CgogICAgICAgICRieXRlcyA9IHN1YnN0cl9yZXBsYWNlKCRieXRlcywgJHRpbWVIaUFuZFZlcnNpb24sIDYsIDIpOwogICAgICAgICRieXRlcyA9IHN1YnN0cl9yZXBsYWNlKCRieXRlcywgJGNsb2NrU2VxSGlBbmRSZXNlcnZlZCwgOCwgMik7CgogICAgICAgIGlmICgkdGhpcy0+aXNEZWZhdWx0RmVhdHVyZVNldCkgewogICAgICAgICAgICByZXR1cm4gTGF6eVV1aWRGcm9tU3RyaW5nOjpmcm9tQnl0ZXMoJGJ5dGVzKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+dXVpZCgkYnl0ZXMpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/UuidFactoryInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkOwoKdXNlIERhdGVUaW1lSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxIZXhhZGVjaW1hbDsKdXNlIFJhbXNleVxVdWlkXFR5cGVcSW50ZWdlciBhcyBJbnRlZ2VyT2JqZWN0Owp1c2UgUmFtc2V5XFV1aWRcVmFsaWRhdG9yXFZhbGlkYXRvckludGVyZmFjZTsKCi8qKgogKiBVdWlkRmFjdG9yeUludGVyZmFjZSBkZWZpbmVzIGNvbW1vbiBmdW5jdGlvbmFsaXR5IGFsbCBgVXVpZEZhY3RvcnlgIGluc3RhbmNlcwogKiBtdXN0IGltcGxlbWVudAogKi8KaW50ZXJmYWNlIFV1aWRGYWN0b3J5SW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdmFsaWRhdG9yIHRvIHVzZSBmb3IgdGhlIGZhY3RvcnkKICAgICAqCiAgICAgKiBAcHNhbG0tbXV0YXRpb24tZnJlZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmFsaWRhdG9yKCk6IFZhbGlkYXRvckludGVyZmFjZTsKCiAgICAvKioKICAgICAqIFJldHVybnMgYSB2ZXJzaW9uIDEgKHRpbWUtYmFzZWQpIFVVSUQgZnJvbSBhIGhvc3QgSUQsIHNlcXVlbmNlIG51bWJlciwKICAgICAqIGFuZCB0aGUgY3VycmVudCB0aW1lCiAgICAgKgogICAgICogQHBhcmFtIEhleGFkZWNpbWFsfGludHxzdHJpbmd8bnVsbCAkbm9kZSBBIDQ4LWJpdCBudW1iZXIgcmVwcmVzZW50aW5nIHRoZQogICAgICogICAgIGhhcmR3YXJlIGFkZHJlc3M7IHRoaXMgbnVtYmVyIG1heSBiZSByZXByZXNlbnRlZCBhcyBhbiBpbnRlZ2VyIG9yIGEKICAgICAqICAgICBoZXhhZGVjaW1hbCBzdHJpbmcKICAgICAqIEBwYXJhbSBpbnR8bnVsbCAkY2xvY2tTZXEgQSAxNC1iaXQgbnVtYmVyIHVzZWQgdG8gaGVscCBhdm9pZCBkdXBsaWNhdGVzCiAgICAgKiAgICAgdGhhdCBjb3VsZCBhcmlzZSB3aGVuIHRoZSBjbG9jayBpcyBzZXQgYmFja3dhcmRzIGluIHRpbWUgb3IgaWYgdGhlCiAgICAgKiAgICAgbm9kZSBJRCBjaGFuZ2VzCiAgICAgKgogICAgICogQHJldHVybiBVdWlkSW50ZXJmYWNlIEEgVXVpZEludGVyZmFjZSBpbnN0YW5jZSB0aGF0IHJlcHJlc2VudHMgYQogICAgICogICAgIHZlcnNpb24gMSBVVUlECiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1dWlkMSgkbm9kZSA9IG51bGwsID9pbnQgJGNsb2NrU2VxID0gbnVsbCk6IFV1aWRJbnRlcmZhY2U7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgdmVyc2lvbiAyIChEQ0UgU2VjdXJpdHkpIFVVSUQgZnJvbSBhIGxvY2FsIGRvbWFpbiwgbG9jYWwKICAgICAqIGlkZW50aWZpZXIsIGhvc3QgSUQsIGNsb2NrIHNlcXVlbmNlLCBhbmQgdGhlIGN1cnJlbnQgdGltZQogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGxvY2FsRG9tYWluIFRoZSBsb2NhbCBkb21haW4gdG8gdXNlIHdoZW4gZ2VuZXJhdGluZyBieXRlcywKICAgICAqICAgICBhY2NvcmRpbmcgdG8gRENFIFNlY3VyaXR5CiAgICAgKiBAcGFyYW0gSW50ZWdlck9iamVjdHxudWxsICRsb2NhbElkZW50aWZpZXIgVGhlIGxvY2FsIGlkZW50aWZpZXIgZm9yIHRoZQogICAgICogICAgIGdpdmVuIGRvbWFpbjsgdGhpcyBtYXkgYmUgYSBVSUQgb3IgR0lEIG9uIFBPU0lYIHN5c3RlbXMsIGlmIHRoZSBsb2NhbAogICAgICogICAgIGRvbWFpbiBpcyBwZXJzb24gb3IgZ3JvdXAsIG9yIGl0IG1heSBiZSBhIHNpdGUtZGVmaW5lZCBpZGVudGlmaWVyCiAgICAgKiAgICAgaWYgdGhlIGxvY2FsIGRvbWFpbiBpcyBvcmcKICAgICAqIEBwYXJhbSBIZXhhZGVjaW1hbHxudWxsICRub2RlIEEgNDgtYml0IG51bWJlciByZXByZXNlbnRpbmcgdGhlIGhhcmR3YXJlCiAgICAgKiAgICAgYWRkcmVzcwogICAgICogQHBhcmFtIGludHxudWxsICRjbG9ja1NlcSBBIDE0LWJpdCBudW1iZXIgdXNlZCB0byBoZWxwIGF2b2lkIGR1cGxpY2F0ZXMKICAgICAqICAgICB0aGF0IGNvdWxkIGFyaXNlIHdoZW4gdGhlIGNsb2NrIGlzIHNldCBiYWNrd2FyZHMgaW4gdGltZSBvciBpZiB0aGUKICAgICAqICAgICBub2RlIElEIGNoYW5nZXMKICAgICAqCiAgICAgKiBAcmV0dXJuIFV1aWRJbnRlcmZhY2UgQSBVdWlkSW50ZXJmYWNlIGluc3RhbmNlIHRoYXQgcmVwcmVzZW50cyBhCiAgICAgKiAgICAgdmVyc2lvbiAyIFVVSUQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHV1aWQyKAogICAgICAgIGludCAkbG9jYWxEb21haW4sCiAgICAgICAgP0ludGVnZXJPYmplY3QgJGxvY2FsSWRlbnRpZmllciA9IG51bGwsCiAgICAgICAgP0hleGFkZWNpbWFsICRub2RlID0gbnVsbCwKICAgICAgICA/aW50ICRjbG9ja1NlcSA9IG51bGwKICAgICk6IFV1aWRJbnRlcmZhY2U7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgdmVyc2lvbiAzIChuYW1lLWJhc2VkKSBVVUlEIGJhc2VkIG9uIHRoZSBNRDUgaGFzaCBvZiBhCiAgICAgKiBuYW1lc3BhY2UgSUQgYW5kIGEgbmFtZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8VXVpZEludGVyZmFjZSAkbnMgVGhlIG5hbWVzcGFjZSAobXVzdCBiZSBhIHZhbGlkIFVVSUQpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIFRoZSBuYW1lIHRvIHVzZSBmb3IgY3JlYXRpbmcgYSBVVUlECiAgICAgKgogICAgICogQHJldHVybiBVdWlkSW50ZXJmYWNlIEEgVXVpZEludGVyZmFjZSBpbnN0YW5jZSB0aGF0IHJlcHJlc2VudHMgYQogICAgICogICAgIHZlcnNpb24gMyBVVUlECiAgICAgKgogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHV1aWQzKCRucywgc3RyaW5nICRuYW1lKTogVXVpZEludGVyZmFjZTsKCiAgICAvKioKICAgICAqIFJldHVybnMgYSB2ZXJzaW9uIDQgKHJhbmRvbSkgVVVJRAogICAgICoKICAgICAqIEByZXR1cm4gVXVpZEludGVyZmFjZSBBIFV1aWRJbnRlcmZhY2UgaW5zdGFuY2UgdGhhdCByZXByZXNlbnRzIGEKICAgICAqICAgICB2ZXJzaW9uIDQgVVVJRAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdXVpZDQoKTogVXVpZEludGVyZmFjZTsKCiAgICAvKioKICAgICAqIFJldHVybnMgYSB2ZXJzaW9uIDUgKG5hbWUtYmFzZWQpIFVVSUQgYmFzZWQgb24gdGhlIFNIQS0xIGhhc2ggb2YgYQogICAgICogbmFtZXNwYWNlIElEIGFuZCBhIG5hbWUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfFV1aWRJbnRlcmZhY2UgJG5zIFRoZSBuYW1lc3BhY2UgKG11c3QgYmUgYSB2YWxpZCBVVUlEKQogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSB0byB1c2UgZm9yIGNyZWF0aW5nIGEgVVVJRAogICAgICoKICAgICAqIEByZXR1cm4gVXVpZEludGVyZmFjZSBBIFV1aWRJbnRlcmZhY2UgaW5zdGFuY2UgdGhhdCByZXByZXNlbnRzIGEKICAgICAqICAgICB2ZXJzaW9uIDUgVVVJRAogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1dWlkNSgkbnMsIHN0cmluZyAkbmFtZSk6IFV1aWRJbnRlcmZhY2U7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgdmVyc2lvbiA2IChvcmRlcmVkLXRpbWUpIFVVSUQgZnJvbSBhIGhvc3QgSUQsIHNlcXVlbmNlIG51bWJlciwKICAgICAqIGFuZCB0aGUgY3VycmVudCB0aW1lCiAgICAgKgogICAgICogQHBhcmFtIEhleGFkZWNpbWFsfG51bGwgJG5vZGUgQSA0OC1iaXQgbnVtYmVyIHJlcHJlc2VudGluZyB0aGUgaGFyZHdhcmUKICAgICAqICAgICBhZGRyZXNzCiAgICAgKiBAcGFyYW0gaW50fG51bGwgJGNsb2NrU2VxIEEgMTQtYml0IG51bWJlciB1c2VkIHRvIGhlbHAgYXZvaWQgZHVwbGljYXRlcwogICAgICogICAgIHRoYXQgY291bGQgYXJpc2Ugd2hlbiB0aGUgY2xvY2sgaXMgc2V0IGJhY2t3YXJkcyBpbiB0aW1lIG9yIGlmIHRoZQogICAgICogICAgIG5vZGUgSUQgY2hhbmdlcwogICAgICoKICAgICAqIEByZXR1cm4gVXVpZEludGVyZmFjZSBBIFV1aWRJbnRlcmZhY2UgaW5zdGFuY2UgdGhhdCByZXByZXNlbnRzIGEKICAgICAqICAgICB2ZXJzaW9uIDYgVVVJRAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdXVpZDYoP0hleGFkZWNpbWFsICRub2RlID0gbnVsbCwgP2ludCAkY2xvY2tTZXEgPSBudWxsKTogVXVpZEludGVyZmFjZTsKCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBVVUlEIGZyb20gYSBieXRlIHN0cmluZwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJ5dGVzIEEgYmluYXJ5IHN0cmluZwogICAgICoKICAgICAqIEByZXR1cm4gVXVpZEludGVyZmFjZSBBIFV1aWRJbnRlcmZhY2UgaW5zdGFuY2UgY3JlYXRlZCBmcm9tIGEgYmluYXJ5CiAgICAgKiAgICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uCiAgICAgKgogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZyb21CeXRlcyhzdHJpbmcgJGJ5dGVzKTogVXVpZEludGVyZmFjZTsKCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBVVUlEIGZyb20gdGhlIHN0cmluZyBzdGFuZGFyZCByZXByZXNlbnRhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHV1aWQgQSBoZXhhZGVjaW1hbCBzdHJpbmcKICAgICAqCiAgICAgKiBAcmV0dXJuIFV1aWRJbnRlcmZhY2UgQSBVdWlkSW50ZXJmYWNlIGluc3RhbmNlIGNyZWF0ZWQgZnJvbSBhIGhleGFkZWNpbWFsCiAgICAgKiAgICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uCiAgICAgKgogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZyb21TdHJpbmcoc3RyaW5nICR1dWlkKTogVXVpZEludGVyZmFjZTsKCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBVVUlEIGZyb20gYSAxMjgtYml0IGludGVnZXIgc3RyaW5nCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaW50ZWdlciBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgMTI4LWJpdCBpbnRlZ2VyCiAgICAgKgogICAgICogQHJldHVybiBVdWlkSW50ZXJmYWNlIEEgVXVpZEludGVyZmFjZSBpbnN0YW5jZSBjcmVhdGVkIGZyb20gdGhlIHN0cmluZwogICAgICogICAgIHJlcHJlc2VudGF0aW9uIG9mIGEgMTI4LWJpdCBpbnRlZ2VyCiAgICAgKgogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZyb21JbnRlZ2VyKHN0cmluZyAkaW50ZWdlcik6IFV1aWRJbnRlcmZhY2U7CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgVVVJRCBmcm9tIGEgRGF0ZVRpbWVJbnRlcmZhY2UgaW5zdGFuY2UKICAgICAqCiAgICAgKiBAcGFyYW0gRGF0ZVRpbWVJbnRlcmZhY2UgJGRhdGVUaW1lIFRoZSBkYXRlIGFuZCB0aW1lCiAgICAgKiBAcGFyYW0gSGV4YWRlY2ltYWx8bnVsbCAkbm9kZSBBIDQ4LWJpdCBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBoYXJkd2FyZQogICAgICogICAgIGFkZHJlc3MKICAgICAqIEBwYXJhbSBpbnR8bnVsbCAkY2xvY2tTZXEgQSAxNC1iaXQgbnVtYmVyIHVzZWQgdG8gaGVscCBhdm9pZCBkdXBsaWNhdGVzCiAgICAgKiAgICAgdGhhdCBjb3VsZCBhcmlzZSB3aGVuIHRoZSBjbG9jayBpcyBzZXQgYmFja3dhcmRzIGluIHRpbWUgb3IgaWYgdGhlCiAgICAgKiAgICAgbm9kZSBJRCBjaGFuZ2VzCiAgICAgKgogICAgICogQHJldHVybiBVdWlkSW50ZXJmYWNlIEEgVXVpZEludGVyZmFjZSBpbnN0YW5jZSB0aGF0IHJlcHJlc2VudHMgYQogICAgICogICAgIHZlcnNpb24gMSBVVUlEIGNyZWF0ZWQgZnJvbSBhIERhdGVUaW1lSW50ZXJmYWNlIGluc3RhbmNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmcm9tRGF0ZVRpbWUoCiAgICAgICAgRGF0ZVRpbWVJbnRlcmZhY2UgJGRhdGVUaW1lLAogICAgICAgID9IZXhhZGVjaW1hbCAkbm9kZSA9IG51bGwsCiAgICAgICAgP2ludCAkY2xvY2tTZXEgPSBudWxsCiAgICApOiBVdWlkSW50ZXJmYWNlOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/UuidInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkOwoKdXNlIEpzb25TZXJpYWxpemFibGU7CnVzZSBSYW1zZXlcVXVpZFxGaWVsZHNcRmllbGRzSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxIZXhhZGVjaW1hbDsKdXNlIFJhbXNleVxVdWlkXFR5cGVcSW50ZWdlciBhcyBJbnRlZ2VyT2JqZWN0Owp1c2UgU2VyaWFsaXphYmxlOwoKLyoqCiAqIEEgVVVJRCBpcyBhIHVuaXZlcnNhbGx5IHVuaXF1ZSBpZGVudGlmaWVyIGFkaGVyaW5nIHRvIGFuIGFncmVlZC11cG9uCiAqIHJlcHJlc2VudGF0aW9uIGZvcm1hdCBhbmQgc3RhbmRhcmQgZm9yIGdlbmVyYXRpb24KICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KaW50ZXJmYWNlIFV1aWRJbnRlcmZhY2UgZXh0ZW5kcwogICAgRGVwcmVjYXRlZFV1aWRJbnRlcmZhY2UsCiAgICBKc29uU2VyaWFsaXphYmxlLAogICAgU2VyaWFsaXphYmxlCnsKICAgIC8qKgogICAgICogUmV0dXJucyAtMSwgMCwgb3IgMSBpZiB0aGUgVVVJRCBpcyBsZXNzIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4KICAgICAqIHRoZSBvdGhlciBVVUlECiAgICAgKgogICAgICogVGhlIGZpcnN0IG9mIHR3byBVVUlEcyBpcyBncmVhdGVyIHRoYW4gdGhlIHNlY29uZCBpZiB0aGUgbW9zdAogICAgICogc2lnbmlmaWNhbnQgZmllbGQgaW4gd2hpY2ggdGhlIFVVSURzIGRpZmZlciBpcyBncmVhdGVyIGZvciB0aGUgZmlyc3QKICAgICAqIFVVSUQuCiAgICAgKgogICAgICogKiBRLiBXaGF0J3MgdGhlIHZhbHVlIG9mIGJlaW5nIGFibGUgdG8gc29ydCBVVUlEcz8KICAgICAqICogQS4gVXNlIHRoZW0gYXMga2V5cyBpbiBhIEItVHJlZSBvciBzaW1pbGFyIG1hcHBpbmcuCiAgICAgKgogICAgICogQHBhcmFtIFV1aWRJbnRlcmZhY2UgJG90aGVyIFRoZSBVVUlEIHRvIGNvbXBhcmUKICAgICAqCiAgICAgKiBAcmV0dXJuIGludCAtMSwgMCwgb3IgMSBpZiB0aGUgVVVJRCBpcyBsZXNzIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4gJG90aGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21wYXJlVG8oVXVpZEludGVyZmFjZSAkb3RoZXIpOiBpbnQ7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIFVVSUQgaXMgZXF1YWwgdG8gdGhlIHByb3ZpZGVkIG9iamVjdAogICAgICoKICAgICAqIFRoZSByZXN1bHQgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgYXJndW1lbnQgaXMgbm90IG51bGwsIGlzIGEgVVVJRAogICAgICogb2JqZWN0LCBoYXMgdGhlIHNhbWUgdmFyaWFudCwgYW5kIGNvbnRhaW5zIHRoZSBzYW1lIHZhbHVlLCBiaXQgZm9yIGJpdCwKICAgICAqIGFzIHRoZSBVVUlELgogICAgICoKICAgICAqIEBwYXJhbSBvYmplY3R8bnVsbCAkb3RoZXIgQW4gb2JqZWN0IHRvIHRlc3QgZm9yIGVxdWFsaXR5IHdpdGggdGhpcyBVVUlECiAgICAgKgogICAgICogQHJldHVybiBib29sIFRydWUgaWYgdGhlIG90aGVyIG9iamVjdCBpcyBlcXVhbCB0byB0aGlzIFVVSUQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVxdWFscyg/b2JqZWN0ICRvdGhlcik6IGJvb2w7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBiaW5hcnkgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBVVUlECiAgICAgKgogICAgICogQHBzYWxtLXJldHVybiBub24tZW1wdHktc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCeXRlcygpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBmaWVsZHMgdGhhdCBjb21wcmlzZSB0aGlzIFVVSUQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZpZWxkcygpOiBGaWVsZHNJbnRlcmZhY2U7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgVVVJRAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGV4KCk6IEhleGFkZWNpbWFsOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgaW50ZWdlciByZXByZXNlbnRhdGlvbiBvZiB0aGUgVVVJRAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW50ZWdlcigpOiBJbnRlZ2VyT2JqZWN0OwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc3RyaW5nIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBVVUlECiAgICAgKgogICAgICogQHBzYWxtLXJldHVybiBub24tZW1wdHktc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b1N0cmluZygpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBDYXN0cyB0aGUgVVVJRCB0byB0aGUgc3RyaW5nIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9uCiAgICAgKgogICAgICogQHBzYWxtLXJldHVybiBub24tZW1wdHktc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZzsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Validator/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Validator/GenericValidator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFZhbGlkYXRvcjsKCnVzZSBSYW1zZXlcVXVpZFxVdWlkOwoKdXNlIGZ1bmN0aW9uIHByZWdfbWF0Y2g7CnVzZSBmdW5jdGlvbiBzdHJfcmVwbGFjZTsKCi8qKgogKiBHZW5lcmljVmFsaWRhdG9yIHZhbGlkYXRlcyBzdHJpbmdzIGFzIFVVSURzIG9mIGFueSB2YXJpYW50CiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmZpbmFsIGNsYXNzIEdlbmVyaWNWYWxpZGF0b3IgaW1wbGVtZW50cyBWYWxpZGF0b3JJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiBmb3IgbWF0Y2hpbmcgYSBVVUlEIG9mIGFueSB2YXJpYW50LgogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFZBTElEX1BBVFRFUk4gPSAnXEFbMC05QS1GYS1mXXs4fS1bMC05QS1GYS1mXXs0fS1bMC05QS1GYS1mXXs0fS1bMC05QS1GYS1mXXs0fS1bMC05QS1GYS1mXXsxMn1ceic7CgogICAgLyoqCiAgICAgKiBAcHNhbG0tcmV0dXJuIG5vbi1lbXB0eS1zdHJpbmcKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNb3JlU3BlY2lmaWNSZXR1cm5UeXBlIHdlIGtub3cgdGhhdCB0aGUgcmV0cmlldmVkIGBzdHJpbmdgIGlzIG5ldmVyIGVtcHR5CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTGVzc1NwZWNpZmljUmV0dXJuU3RhdGVtZW50IHdlIGtub3cgdGhhdCB0aGUgcmV0cmlldmVkIGBzdHJpbmdgIGlzIG5ldmVyIGVtcHR5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQYXR0ZXJuKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBzZWxmOjpWQUxJRF9QQVRURVJOOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZGF0ZShzdHJpbmcgJHV1aWQpOiBib29sCiAgICB7CiAgICAgICAgJHV1aWQgPSBzdHJfcmVwbGFjZShbJ3VybjonLCAndXVpZDonLCAnVVJOOicsICdVVUlEOicsICd7JywgJ30nXSwgJycsICR1dWlkKTsKCiAgICAgICAgcmV0dXJuICR1dWlkID09PSBVdWlkOjpOSUwgfHwgcHJlZ19tYXRjaCgnLycgLiBzZWxmOjpWQUxJRF9QQVRURVJOIC4gJy9EbXMnLCAkdXVpZCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Validator/ValidatorInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFZhbGlkYXRvcjsKCi8qKgogKiBBIHZhbGlkYXRvciB2YWxpZGF0ZXMgYSBzdHJpbmcgYXMgYSBwcm9wZXIgVVVJRAogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwppbnRlcmZhY2UgVmFsaWRhdG9ySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gdXNlZCBieSB0aGlzIHZhbGlkYXRvcgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiB0aGlzIHZhbGlkYXRvciB1c2VzCiAgICAgKgogICAgICogQHBzYWxtLXJldHVybiBub24tZW1wdHktc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQYXR0ZXJuKCk6IHN0cmluZzsKCiAgICAvKioKICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvdmlkZWQgc3RyaW5nIHJlcHJlc2VudHMgYSBVVUlECiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdXVpZCBUaGUgc3RyaW5nIHRvIHZhbGlkYXRlIGFzIGEgVVVJRAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBUcnVlIGlmIHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBVVUlELCBmYWxzZSBvdGhlcndpc2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHZhbGlkYXRlKHN0cmluZyAkdXVpZCk6IGJvb2w7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/robrichards/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/robrichards/xmlseclibs/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/robrichards/xmlseclibs/CHANGELOG.txt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eG1sc2VjbGlicy5waHAKfHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fAoxMiwgRGVjIDIwMjYsIDMuMS41ClNlY3VyaXR5OgotIFZhbGlkYXRlIEFFUy1HQ00gQXV0aGVudGljYXRpb24gVGFnIChTaWRlbmkpCgowOCwgRGVjIDIwMjUsIDMuMS40ClNlY3VyaXR5OgotIGZpeCBjYW5vbmljYWxpemF0aW9uIGJ5cGFzcyBlcnJvciAoZDBnZSkKCjIwLCBOb3YgMjAyNCwgMy4xLjMKQnVnIEZpeGVzOgotIHJlbW92ZSBsb2FkS2V5IGNoZWNrIGR1ZSB0byBCQyBpc3N1ZXMKCjIwLCBOb3YgMjAyNCwgMy4xLjIKSW1wcm92ZW1lbnRzOgotIEFkZCB0YWIgdG8gbGlzdCBvZiB3aGl0ZXNwYWNlIHZhbHVlcyB0byByZW1vdmUgZnJvbSBjZXJ0LiByZWZzICMyNTIKLSBsb2FkS2V5IHNob3VsZCBjaGVjayByZXR1cm4gdmFsdWUgZm9yIG9wZW5zc2xfZ2V0X3ByaXZhdGVrZXkgKHNhbW1hcnNoYWxsb3UpCi0gU3dpdGNoIHRvIEdpdEh1YiBhY3Rpb25zIChTaGFya01hY2hpbmUpCgowNSwgU2VwIDIwMjAsIDMuMS4xCkZlYXR1cmVzOgotIFN1cHBvcnQgT0FFUCAoaWdneXZvbHopCgpCdWcgRml4ZXM6Ci0gRml4IEFFUzEyOCAoaWdneXZvbHopCgpJbXByb3ZlbWVudHM6Ci0gRml4IHRlc3RzIGZvciBvbGRlciBQSFAKCjIyLCBBcHIgMjAyMCwgMy4xLjAKRmVhdHVyZXM6Ci0gU3VwcG9ydCBBRVMtR0NNLiBSZXF1aXJlcyBQSFAgNy4xLiAoRnJhbsOnb2lzIEtvb21hbikKCkltcHJvdmVtZW50czoKLSBGaXggVHJhdmlzIHRlc3RzIGZvciBvbGRlciBQSFAgdmVyc2lvbnMuCi0gVXNlIERPTUVsZW1lbnQgaW50ZXJmYWNlIHRvIGZpeCBzb21lIElERXMgcmVwb3J0aW5nIGRvY3VtZW50YXRpb24gZXJyb3JzCgpCdWcgRml4ZXM6Ci0gRklYIG1pc3NpbmcgSW5jbHVzaXZlTmFtZXNwYWNlcyBQcmVmaXhMaXN0IGZyb20gSmF2YSArIEFwYWNoZSBXU1M0Si4gKG5qYWtlKQoKMDYsIE5vdiAyMDE5LCAzLjAuNApTZWN1cml0eSBJbXByb3ZlbWVudHM6Ci0gSW5zdXJlIG9ubHkgYSBzaW5nbGUgU2lnbmVkSW5mbyBlbGVtZW50IGV4aXN0cyB3aXRoaW4gYSBzaWduYXR1cmUgZHVyaW5nIAogIHZlcmlmaWNhdGlvbi4gUmVmcyBDVkUtMjAxOS0zNDY1LgpCdWcgRml4ZXM6Ci0gRml4IHZhcmlhYmxlIGNhc2luZy4KCjE1LCBOb3YgMjAxOCwgMy4wLjMKQnVnIEZpeGVzOgotIEZpeCBjYXNpbmcgb2YgY2xhc3MgbmFtZS4gKFdpbGxlbSBTdHV1cnNtYS1SdXdlbikKLSBGaXggWHBhdGggY2FzaW5nLiAoVGltIHZhbiBEaWplbikKCkltcHJvdmVtZW50czoKLSBNYWtlIFBDUkUyIGNvbXBsaWFudC4gKFN0ZWZhbiBXaW50ZXIpCi0gQWRkIFBIUCA3LjMgc3VwcG9ydC4gKFN0ZWZhbiBXaW50ZXIpCgoyNywgU2VwIDIwMTgsIDMuMC4yClNlY3VyaXR5IEltcHJvdmVtZW50czoKLSBPcGVuU1NMIGlzIG5vdyBhIHJlcXVpcmVtZW50IHJhdGhlciB0aGFuIHN1Z2dlc3Rpb24uIChTbGF2ZW4gQmFjZWxpYykKLSBGaWx0ZXIgaW5wdXQgdG8gYXZvaWQgWFBhdGggaW5qZWN0aW9uLiAoSmFpbWUgUMOpcmV6KQoKQnVnIEZpeGVzOgotIEZpeCBtaXNzaW5nIHBhcmVudGhlc2VzIChUaW0gdmFuIERpamVuKQoKSW1wcm92ZW1lbnRzOgotIFVzZSBzdHJpY3QgY29tcGFyaXNvbiBvcGVyYXRvciB0byBjb21wYXJlIGRpZ2VzdCB2YWx1ZXMuIChKYWltZSBQw6lyZXopCi0gUmVtb3ZlIGNhbGwgdG8gZmlsZV9nZXRfY29udGVudHMgdGhhdCBkb2Vzbid0IGV2ZW4gd29yay4gKEphaW1lIFDDqXJleikKLSBEb2N1bWVudCBwb3RlbnRpYWxseSBkYW5nZXJvdXMgcmV0dXJuIHZhbHVlIGJlaGF2aW91ci4gKFRoaWpzIEtpbmtob3JzdCkKCjMxLCBBdWcgMjAxNywgMy4wLjEKQnVnIEZpeGVzOgotIEZpeGVkIG1pc3NpbmcgKCkgaW4gZnVuY3Rpb24gY2FsbC4gKERlbm5pcyBWw6Z2ZXJzdGVkKQoKSW1wcm92ZW1lbnRzOgotIEFkZCBPbmVMb2dpbiB0byBzdXBwb3J0ZWQgc29mdHdhcmUuCi0gQWRkIC5naXRhdHRyaWJ1dGVzIHRvIHJlbW92ZSB1bm5lZWRlZCBmaWxlcy4gKEZpbGlwcG8gVGVzc2Fyb3R0bykKLSBGaXggYnVnIGluIGV4YW1wbGUgY29kZS4gKERhbiBDaHVyY2gpCi0gVHJhdmlzOiBhZGQgUEhQIDcuMSwgbW92ZSBoaHZtIHRvIGFsbG93ZWQgZmFpbHVyZXMuIChUaGlqcyBLaW5raG9yc3QpCi0gRHJvcCBmYWlsaW5nIGV4dHJhY3Qtd2luLWNlcnQgdGVzdCAoVGhpanMgS2lua2hvcnN0KS4gKFRoaWpzIEtpbmtob3JzdCkKLSBBZGQgY29tbWVudHMgdG8gd2FybiBhYm91dCByZXR1cm4gdmFsdWVzIG9mIHZlcmlmeSgpLiAoVGhpanMgS2lua2hvcnN0KQotIEZpeCB0ZXN0cyB0byBwcm9wZXJseSBjaGVjayByZXR1cm4gY29kZSBvZiB2ZXJpZnkoKS4gKFRoaWpzIEtpbmtob3JzdCkKLSBSZXN0b3JlIHN1cHBvcnQgZm9yIFBIUCA+PSA1LjQuIChKYWltZSBQw6lyZXopCgoyNSwgTWF5IDIwMTcsIDMuMC4wCkltcHJvdmVtZW50czoKLSBSZW1vdmUgdXNlIG9mIG1jcnlwdCAoc2t5bWV5ZXIpCgowOCwgU2VwIDIwMTYsIDIuMC4xCkJ1ZyBGaXhlczoKLSBTdHJpcCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgd2hlbiBwYXJzaW5nIFg1MDlDZXJ0aWZpY2F0ZS4gZml4ZXMgIzg0CiAgKGtsZW1lbi5icmF0ZWMpCi0gQ2VydGlmaWNhdGUgJ3N1YmplY3QnIHZhbHVlcyBjYW4gYmUgYXJyYXlzLiBmaXhlcyAjODAgKEFuZHJlYXMgU3RhbmdsKQotIEhIVk0gc2lnbmluZyBub2RlIHdpdGggSUQgYXR0cmlidXRlIHcvb3V0IG5hbWVzcGFjZSByZWdlbmVyYXRlcyBJRCB2YWx1ZS4KICBmaXhlcyAjODggKE1pbG9zIFRvbWljKQoKSW1wcm92ZW1lbnRzOgotIEZpeCB0eXBvcyBhbmQgYWRkIHNvbWUgUEhQRG9jIEJsb2Nrcy4gKGdmYXVzdC1xYikKLSBVcGRhdGUgbGlnaHRTQU1MIGxpbmsuIChNaWxvcyBUb21pYykKLSBVcGRhdGUgY29weXJpZ2h0IGRhdGVzLgoKMzEsIEp1bCAyMDE1LCAyLjAuMApGZWF0dXJlczoKLSBOYW1lc3BhY2Ugc3VwcG9ydC4gQ2xhc3NlcyBub3cgaW4gdGhlIFJvYlJpY2hhcmRzXFhNTFNlY0xpYnNcIG5hbWVzcGFjZS4KCkltcHJvdmVtZW50czoKLSBEcm9wcGVkIHN1cHBvcnQgZm9yIFBIUCA1LjIKCjMxLCBKdWwgMjAxNSwgMS40LjEKQnVnIEZpeGVzOgotIEFsbG93IGZvciBsYXJnZSBkaWdlc3QgdmFsdWVzIHRoYXQgbWF5IGhhdmUgbGluZSBicmVha3MuIGZpeGVzICM2MgoKRmVhdHVyZXM6Ci0gU3VwcG9ydCBmb3IgbG9jYXRpbmcgc3BlY2lmaWMgc2lnbmF0dXJlIHdoZW4gbXVsdGlwbGUgZXhpc3QgaW4gCiAgZG9jdW1lbnQuIChncmlnYTNrKQoKSW1wcm92ZW1lbnRzOgotIEFkZCBvcHRpb25hbCBhcmd1bWVudCB0byBYTUxTZWN1cml0eURTaWcgdG8gZGVmaW5lIHRoZSBwcmVmaXggdG8gYmUgdXNlZCwgCiAgYWxzbyBhbGxvd2luZyBmb3IgbnVsbCB0byB1c2Ugbm8gcHJlZml4LCBmb3IgdGhlIGRzaWcgbmFtZXNwYWNlLiBmaXhlcyAjMTMKLSBDb2RlIGNsZWFudXAKLSBEZXByZWNpYXRlZCBYTUxTZWN1cml0eURTaWc6OmdlbmVyYXRlX0dVSUQgZm9yIFhNTFNlY3VyaXR5RFNpZzo6Z2VuZXJhdGVHVUlECgoyMywgSnVuIDIwMTUsIDEuNC4wCkZlYXR1cmVzOgotIFN1cHBvcnQgZm9yIFBTUi0wIHN0YW5kYXJkLgotIFN1cHBvcnQgZm9yIFg1MDlTdWJqZWN0TmFtZS4gKE1pbG9zIFRvbWljKQotIEFkZCBITUFDLVNIQTEgc3VwcG9ydC4KCkltcHJvdmVtZW50czoKLSBBZGQgaG93IHRvIGluc3RhbGwgdG8gUkVBRE1FLiAoQmVybmFyZG8gVmllaXJhIGRhIFNpbHZhKQotIENvZGUgY2xlYW51cC4gKEphaW1lIFDDqXJleikKLSBOb3JtYWxpbHplIHRlc3RzLiAoSGlkZGUgV2llcmluZ2EpCi0gQWRkIGJhc2ljIHVzYWdlIHRvIFJFQURNRS4gKEhpZGRlIFdpZXJpbmdhKQoKMjEsIE1heSAyMDE1LCAxLjMuMgpCdWcgRml4ZXM6Ci0gRml4IFVuZGVmaW5lZCB2YXJpYWJsZSBub3RpY2UuIChkcGllcGVyODUpCi0gRml4IHR5cG8gd2hlbiBzZXR0aW5nIE1pbWVUeXBlIGF0dHJpYnV0ZS4gKEV1Z2VuZSBPWikKLSBGaXggdmFsaWRhdGVSZWZlcmVuY2UoKSB3aXRoIGVudmVsb3Bpbmcgc2lnbmF0dXJlcwoKRmVhdHVyZXM6Ci0gY2Fub25pY2FsaXplRGF0YSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uIChKYWltZSBQw6lyZXopCi0gQWRkIGNvbXBvc2VyIHN1cHBvcnQgKE1ha3MzdykKCjE5LCBKdW4gMjAxMywgMS4zLjEKRmVhdHVyZXM6Ci0gcmV0dXJuIGVuY3J5cHRlZCBub2RlIGZyb20gWE1MU2VjRW5jOjplbmNyeXB0Tm9kZSgpIHdoZW4gcmVwbGFjZSBpcyBzZXQgdG8gCiAgZmFsc2UuIChPbGF2KQotIEFkZCBzdXBwb3J0IGZvciBSU0EgU0hBMzg0IGFuZCBSU0FfU0hBNTEyIGFuZCBTSEEzODQgZGlnZXN0LiAoSmFpbWUgUMKOcmV6KQotIEFkZCBvcHRpb25zIHBhcmFtZXRlciB0byB0aGUgYWRkIGNlcnQgbWV0aG9kcy4KLSBBZGQgb3B0aW9uYWwgaXNzdWVyU2VyaWFsIGNyZWF0aW9uIHdpdGggY2VydAoKQnVnIEZpeGVzOgotIEZpeCBwZXJzaXN0ZWQgSWQgd2hlbiBuYW1lc3BhY2VkLiAoS29lbiBUaG9tZWVyKQoKSW1wcm92ZW1lbnRzOgotIEFkZCBMSUNFTlNFIGZpbGUKLSBDb252ZXJ0IENIQU5HRUxPRy50eHQgdG8gVVRGLTgKCjI2LCBTZXAgMjAxMSwgMS4zLjAKRmVhdHVyZXM6Ci0gQWRkIHBhcmFtIHRvIGFwcGVuZCBzaWcgdG8gbm9kZSB3aGVuIHNpZ25pbmcuIEZpeGVzIGEgcHJvYmxlbSB3aGVuIHVzaW5nIAogIGluY2x1c2l2ZSBjYW5vbmljYWxpemF0aW9uIHRvIGFwcGVuZCBhIHNpZ25hdHVyZSB3aXRoaW4gYSBuYW1lc3BhY2VkIHN1YnRyZWUuCiAgZXguICRvYmpEU2lnLT5zaWduKCRvYmpLZXksICRhcHBlbmRUb05vZGUpOyAKLSBBZGQgYWJpbGl0eSB0byBlbmNyeXB0IGJ5IHJlZmVyZW5jZQotIEFkZCBzdXBwb3J0IGZvciByZWZlbmNlcyB3aXRoaW4gYW4gZW5jcnlwdGVkIGtleQotIEFkZCB0aHVtYnByaW50IGdlbmVyYXRpb24gY2FwYWJpbGl0eSAoWE1MU2VjdXJpdHlLZXktPmdldFg1MDlUaHVtYnByaW50KCkgYW5kIAogIFhNTFNlY3VyaXR5S2V5OjpnZXRSYXdUaHVtYnByaW50KCRjZXJ0KSkKLSBSZXR1cm4gc2lnbmF0dXJlIGVsZW1lbnQgbm9kZSBmcm9tIFhNTFNlY3VyaXR5RFNpZzo6aW5zZXJ0U2lnbmF0dXJlKCkgYW5kIAogIFhNTFNlY3VyaXR5RFNpZzo6YXBwZW5kU2lnbmF0dXJlKCkgbWV0aG9kcwotIFN1cHBvcnQgZm9yIDxkczpSZXRyaWV2YWxNZXRob2Q+IHdpdGggc2ltcGxlIFVSSSBJZCByZWZlcmVuY2UuCi0gQWRkIFhNTFNlY3VyaXR5S2V5OjpnZXRTeW1tZXRyaWNLZXlTaXplKCkgbWV0aG9kIChPbGF2KQotIEFkZCBYTUxTZWNFbmM6OmdldENpcGhlclZhbHVlKCkgbWV0aG9kIChPbGF2KQotIEltcHJvdmUgWE1MU2VjdXJpdHlLZXk6Z2VuZXJhdGVTZXNzaW9uS2V5KCkgbG9naWMgKE9sYXYpCgpCdWcgRml4ZXM6Ci0gQ2hhbmdlIHNwbGl0KCkgdG8gZXhwbG9kZSgpIGFzIHNwbGl0IGlzIG5vdyBkZXByZWNpYXRlZAotIGRzOlJlZmVyZW5jZXMgdXNpbmcgZW1wdHkgb3Igc2ltcGxlIFVSSSBJZCByZWZlcmVuY2Ugc2hvdWxkIG5ldmVyIGluY2x1ZGUgCiAgY29tbWVudHMgaW4gY2Fub25pY2FsaXplZCBkYXRhLgotIE1ha2Ugc3VyZSB0aGF0IHRoZSBlbGVtZW50cyBpbiBFbmNyeXB0ZWREYXRhIGFyZSBlbWl0dGVkIGluIHRoZSBjb3JyZWN0IAogIHNlcXVlbmNlLgoKMTEgSmFuIDIwMTAsIDEuMi4yCkZlYXR1cmVzOgotIEFkZCBzdXBwb3J0IFhQYXRoIHN1cHBvcnQgd2hlbiBjcmVhdGluZyBzaWduYXR1cmUuIFByb3ZpZGVzIHN1cHBvcnQgZm9yIAogIHdvcmtpbmcgd2l0aCBFQlhNTCBkb2N1bWVudHMuCi0gQWRkIHJlZmVyZW5jZSBvcHRpb24gdG8gZm9yY2UgY3JlYXRpb24gb2YgVVJJIGF0dHJpYnV0ZS4gRm9yIHVzZQogIHdoZW4gYWRkaW5nIGEgRE9NIERvY3VtZW50IHdoZXJlIGJ5IGRlZmF1bHQgbm8gVVJJIGF0dHJpYnV0ZSBpcyBhZGRlZC4KLSBBZGQgc3VwcG9ydCBmb3IgUlNBLVNIQTI1NgoKQnVnIEZpeGVzOgotIGZpeCBidWcgIzU6IGNyZWF0ZURPTURvY3VtZW50RnJhZ21lbnQoKSBpbiBkZWNyeXB0Tm9kZSB3aGVuIGRhdGEgaXMgbm9kZSAKICBjb250ZW50IChwYXRjaCBieSBGcmFuY29pcyBXYW5nKQoKCjA4IEp1bCAyMDA4LCAxLjIuMQpGZWF0dXJlczoKLSBBdHRlbXB0IHRvIHVzZSBtaGFzaCB3aGVuIGhhc2ggZXh0ZW5zaW9uIGlzIG5vdCBwcmVzZW50LiAoQWxmcmVkbyBDdWJpdG9zKS4KLSBBZGQgZmFsbGJhY2sgdG8gYnVpbHQtaW4gc2hhMSBpZiBib3RoIGhhc2ggYW5kIG1oYXNoIGFyZSBub3QgYXZhaWxhYmxlIGFuZCAKICB0aHJvdyBlcnJvciBmb3Igb3RoZXIgZm9yIG90aGVyIG1pc3NpbmcgaGFzaGVzLiAocGF0Y2ggYnkgT2xhdiBNb3JrZW4pLgotIEFkZCBnZXRYNTA5Q2VydGlmaWNhdGUgbWV0aG9kIHRvIHJldHJpZXZlIHRoZSB4NTA5IGNlcnQgdXNlZCBmb3IgS2V5LiAKICAocGF0Y2ggYnkgT2xhdiBNb3JrZW4pLgotIEFkZCBnZXRWYWxpZGF0ZWROb2RlcyBtZXRob2QgdG8gcmV0cmlldmUgdGhlIGVsZW1lbnRzIHNpZ25lZCBieSB0aGUgCiAgc2lnbmF0dXJlLiAocGF0Y2ggYnkgT2xhdiBNb3JrZW4pLgotIEFkZCBpbnNlcnRTaWduYXR1cmUgbWV0aG9kIGZvciBwcmVjaXNpb24gc2lnbmF0dXJlIGluc2VydGlvbi4gTWVyZ2UgCiAgZnVuY3Rpb25hbGl0eSBmcm9tIGFwcGVuZFNpZ25hdHVyZSBpbiB0aGUgcHJvY2Vzcy4gKE9sYXYgTW9ya2VuLCBSb2IpLgotIEZpbmFsbHkgYWRkIHNvbWUgdGVzdHMKCkJ1ZyBGaXhlczoKLSBGaXggY2Fub25pY2FsaXphdGlvbiBmb3IgRG9jdW1lbnQgbm9kZSB3aGVuIHVzaW5nIFBIUCA8IDUuMi4KLSBBZGQgcGFkZGluZyBmb3IgUlNBX1NIQTEuIChwYXRjaCBieSBPbGF2IE1vcmtlbikuCgoKMjcgTm92IDIwMDcsIDEuMi4wCkZlYXR1cmVzOgotIE5ldyBhZGRSZWZlcmVuY2UvTGlzdCBvcHRpb24gKG92ZXJ3cml0ZSkuIEJvb2xlYW4gZmxhZyBpbmRpY2F0aW5nIGlmIFVSSQogIHZhbHVlIHNob3VsZCBiZSBvdmVyd3JpdHRlbiBpZiBhbHJlYWR5IGV4aXN0aW5nIHdpdGhpbiBkb2N1bWVudC4KICBEZWZhdWx0IGlzIFRSVUUgdG8gbWFpbnRhaW4gQkMuCgoxOCBOb3YgMjAwNywgMS4xLjIKQnVnIEZpeGVzOgotIFJlbW92ZSBjbG9zaW5nIFBIUCB0YWcgdG8gZml4IGV4dHJhIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBmcm9tIGJlaW5nIG91dHB1dAoKMTEgTm92IDIwMDcsIDEuMS4xCkZlYXR1cmVzOgotIEFkZCBnZXRSZWZOb2RlSUQoKSBhbmQgZ2V0UmVmSURzKCkgbWV0aG9kcyBtaXNzZWQgaW4gcHJldmlvdXMgcmVsZWFzZS4KICBQcm92aWRlIGZ1bmN0aW9uYWxpdHkgdG8gZmluZCBVUklzIG9mIGV4aXN0aW5nIHJlZmVyZW5jZSBub2Rlcy4KICBSZXF1aXJlZCBieSBzaW1wbGVTQU1McGhwIHByb2plY3QKCkJ1ZyBGaXhlczoKLSBSZW1vdmUgZXJyb25lb3VzIHdoaXRlc3BhY2UgY2F1c2luZyBpc3N1ZXMgdW5kZXIgY2VydGFpbiBjaXJjdW1hc3RhbmNlcy4KCjE4IE9jdCAyMDA3LCAxLjEuMApGZWF0dXJlczoKLSBFbmFibGUgY3JlYXRpb24gb2YgZW52ZWxvcGluZyBzaWduYXR1cmUuIFRoaXMgYWxsb3dzIHRoZSBjcmVhdGlvbiBvZgogIG1hbmFnZWQgaW5mb3JtYXRpb24gY2FyZHMuCi0gQWRkIGFkZE9iamVjdCBtZXRob2QgZm9yIGVudmVsb3Bpbmcgc2lnbmF0dXJlcy4KLSBBZGQgc3RhdGljR2V0NTA5WENlcnRzIG1ldGhvZC4gQ2hhaW5lZCBjZXJ0aWZpY2F0ZXMgd2l0aGluIGEgUEVNIGZpbGUgY2FuCiAgbm93IGJlIGFkZGVkIHdpdGhpbiB0aGUgWDUwOURhdGEgbm9kZS4KLSBBZGQgeHBhdGggc3VwcG9ydCB3aXRoaW4gdHJhbnNmb3JtYXRpb25zCi0gQWRkIEluY2x1c2l2ZU5hbWVzcGFjZXMgcHJlZml4IGxpc3Qgc3VwcG9ydCB3aXRoaW4gZXhjbHVzaXZlIHRyYW5zZm9ybWF0aW9ucy4KCkJ1ZyBGaXhlczoKLSBJbml0aWFsaXplIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGZvciBtY3J5cHRfY3JlYXRlX2l2LiAoSm9hbiBDb3JuYWTDsykuCi0gRml4IGFuIGludGVyb3BlcmFiaWxpdHkgaXNzdWUgd2l0aCAuTkVUIHdoZW4gZW5jcnlwdGluZyBkYXRhIGluIENCQyBtb2RlLgogIChKb2FuIENvcm5hZMOzKS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/robrichards/xmlseclibs/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICJuYW1lIjogInJvYnJpY2hhcmRzL3htbHNlY2xpYnMiLAogICJkZXNjcmlwdGlvbiI6ICJBIFBIUCBsaWJyYXJ5IGZvciBYTUwgU2VjdXJpdHkiLAogICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIsCiAgImtleXdvcmRzIjogWwogICAgInhtbCIsCiAgICAieG1sZHNpZyIsCiAgICAic2lnbmF0dXJlIiwKICAgICJzZWN1cml0eSIKICBdLAogICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vcm9icmljaGFyZHMveG1sc2VjbGlicyIsCiAgImF1dG9sb2FkIjogewogICAgInBzci00IjogewogICAgICAiUm9iUmljaGFyZHNcXFhNTFNlY0xpYnNcXCI6ICJzcmMiCiAgICB9CiAgfSwKICAicmVxdWlyZSI6IHsKICAgICJwaHAiOiAiPj0gNS40IiwKICAgICJleHQtb3BlbnNzbCI6ICIqIgogIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/robrichards/xmlseclibs/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDA3LTIwMjQsIFJvYmVydCBSaWNoYXJkcyA8cnJpY2hhcmRzQGNkYXRhem9uZS5vcmc+LgpBbGwgcmlnaHRzIHJlc2VydmVkLgoKUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwphcmUgbWV0OgoKICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCgogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogICAgZGlzdHJpYnV0aW9uLgoKICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgUm9iZXJ0IFJpY2hhcmRzIG5vciB0aGUgbmFtZXMgb2YgaGlzCiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KClRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULApJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLApCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCkxJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCkFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQpQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4=]]></data>
	</file>
	<file>
	  <filename>/vendor/robrichards/xmlseclibs/phpunit.xml</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHBocHVuaXQgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb249Imh0dHBzOi8vc2NoZW1hLnBocHVuaXQuZGUvNi41L3BocHVuaXQueHNkIj4KCTxmaWx0ZXI+CgkJPHdoaXRlbGlzdCBhZGRVbmNvdmVyZWRGaWxlc0Zyb21XaGl0ZWxpc3Q9ImZhbHNlIj4KCQkJPGRpcmVjdG9yeSBzdWZmaXg9Ii5waHAiPnNyYzwvZGlyZWN0b3J5PgoJCTwvd2hpdGVsaXN0PgoJPC9maWx0ZXI+CjwvcGhwdW5pdD4K]]></data>
	</file>
	<file>
	  <filename>/vendor/robrichards/xmlseclibs/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[I3htbHNlY2xpYnMgCgp4bWxzZWNsaWJzIGlzIGEgbGlicmFyeSB3cml0dGVuIGluIFBIUCBmb3Igd29ya2luZyB3aXRoIFhNTCBFbmNyeXB0aW9uIGFuZCBTaWduYXR1cmVzLgoKVGhlIGF1dGhvciBvZiB4bWxzZWNsaWJzIGlzIFJvYiBSaWNoYXJkcy4KCiMgQnJhbmNoZXMKTWFzdGVyIGlzIGN1cnJlbnRseSB0aGUgb25seSBhY3RpdmVseSBtYWludGFpbmVkIGJyYW5jaC4KKiBtYXN0ZXIvMy4xOiBBZGRlZCBBRVMtR0NNIHN1cHBvcnQgcmVxdWlyaW5nIDcuMSsKKiAzLjA6IFJlbW92ZXMgbWNyeXB0IHVzYWdlIHJlcXVpcmluZyA1LjQrICg1LjYuMjQrIHJlY29tbWVuZGVkIGZvciBzZWN1cml0eSByZWFzb25zKQoqIDIuMDogQ29udGFpbnMgbmFtZXNwYWNlIHN1cHBvcnQgcmVxdWlyaW5nIDUuMysKKiAxLjQ6IENvbnRhaW5zIGF1dG8tbG9hZGVyIHN1cHBvcnQgd2hpbGUgYWxzbyBtYWludGFpbmluZyBiYWNrd2FyZHMgY29tcGF0aWJsaXR5IHdpdGggdGhlIG9sZGVyIDEuMyB2ZXJzaW9uIHVzaW5nIHRoZSB4bWxzZWNsaWJzLnBocCBmaWxlLiBTdXBwb3J0cyBQSFAgNS4yKwoKIyBSZXF1aXJlbWVudHMKCnhtbHNlY2xpYnMgcmVxdWlyZXMgUEhQIHZlcnNpb24gNS40IG9yIGdyZWF0ZXIuICoqNS42LjI0KyByZWNvbW1lbmRlZCBmb3Igc2VjdXJpdHkgcmVhc29ucyoqCgoKIyMgSG93IHRvIEluc3RhbGwKCkluc3RhbGwgd2l0aCBbYGNvbXBvc2VyLnBoYXJgXShodHRwOi8vZ2V0Y29tcG9zZXIub3JnKS4KCmBgYHNoCnBocCBjb21wb3Nlci5waGFyIHJlcXVpcmUgInJvYnJpY2hhcmRzL3htbHNlY2xpYnMiCmBgYAoKCiMjIFVzZSBjYXNlcwoKeG1sc2VjbGlicyBpcyBiZWluZyB1c2VkIGluIG1hbnkgZGlmZmVyZW50IHNvZnR3YXJlLgoKKiBbU2ltcGxlU0FNTFBIUF0oaHR0cHM6Ly9naXRodWIuY29tL3NpbXBsZXNhbWxwaHAvc2ltcGxlc2FtbHBocCkKKiBbTGlnaHRTQU1MXShodHRwczovL2dpdGh1Yi5jb20vbGlnaHRzYW1sL2xpZ2h0c2FtbCkKKiBbT25lTG9naW5dKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbCkKCiMjIEJhc2ljIHVzYWdlCgpUaGUgZXhhbXBsZSBiZWxvdyBzaG93cyBiYXNpYyB1c2FnZSBvZiB4bWxzZWNsaWJzLCB3aXRoIGEgU0hBLTI1NiBzaWduYXR1cmUuCgpgYGBwaHAKdXNlIFJvYlJpY2hhcmRzXFhNTFNlY0xpYnNcWE1MU2VjdXJpdHlEU2lnOwp1c2UgUm9iUmljaGFyZHNcWE1MU2VjTGlic1xYTUxTZWN1cml0eUtleTsKCi8vIExvYWQgdGhlIFhNTCB0byBiZSBzaWduZWQKJGRvYyA9IG5ldyBET01Eb2N1bWVudCgpOwokZG9jLT5sb2FkKCcuL3BhdGgvdG8vZmlsZS90b2Jlc2lnbmVkLnhtbCcpOwoKLy8gQ3JlYXRlIGEgbmV3IFNlY3VyaXR5IG9iamVjdCAKJG9iakRTaWcgPSBuZXcgWE1MU2VjdXJpdHlEU2lnKCk7Ci8vIFVzZSB0aGUgYzE0biBleGNsdXNpdmUgY2Fub25pY2FsaXphdGlvbgokb2JqRFNpZy0+c2V0Q2Fub25pY2FsTWV0aG9kKFhNTFNlY3VyaXR5RFNpZzo6RVhDX0MxNE4pOwovLyBTaWduIHVzaW5nIFNIQS0yNTYKJG9iakRTaWctPmFkZFJlZmVyZW5jZSgKICAgICRkb2MsIAogICAgWE1MU2VjdXJpdHlEU2lnOjpTSEEyNTYsIAogICAgYXJyYXkoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNlbnZlbG9wZWQtc2lnbmF0dXJlJykKKTsKCi8vIENyZWF0ZSBhIG5ldyAocHJpdmF0ZSkgU2VjdXJpdHkga2V5CiRvYmpLZXkgPSBuZXcgWE1MU2VjdXJpdHlLZXkoWE1MU2VjdXJpdHlLZXk6OlJTQV9TSEEyNTYsIGFycmF5KCd0eXBlJz0+J3ByaXZhdGUnKSk7Ci8qCklmIGtleSBoYXMgYSBwYXNzcGhyYXNlLCBzZXQgaXQgdXNpbmcKJG9iaktleS0+cGFzc3BocmFzZSA9ICc8cGFzc3BocmFzZT4nOwoqLwovLyBMb2FkIHRoZSBwcml2YXRlIGtleQokb2JqS2V5LT5sb2FkS2V5KCcuL3BhdGgvdG8vcHJpdmF0ZWtleS5wZW0nLCBUUlVFKTsKCi8vIFNpZ24gdGhlIFhNTCBmaWxlCiRvYmpEU2lnLT5zaWduKCRvYmpLZXkpOwoKLy8gQWRkIHRoZSBhc3NvY2lhdGVkIHB1YmxpYyBrZXkgdG8gdGhlIHNpZ25hdHVyZQokb2JqRFNpZy0+YWRkNTA5Q2VydChmaWxlX2dldF9jb250ZW50cygnLi9wYXRoL3RvL2ZpbGUvbXljZXJ0LnBlbScpKTsKCi8vIEFwcGVuZCB0aGUgc2lnbmF0dXJlIHRvIHRoZSBYTUwKJG9iakRTaWctPmFwcGVuZFNpZ25hdHVyZSgkZG9jLT5kb2N1bWVudEVsZW1lbnQpOwovLyBTYXZlIHRoZSBzaWduZWQgWE1MCiRkb2MtPnNhdmUoJy4vcGF0aC90by9zaWduZWQueG1sJyk7CmBgYAoKIyMgSG93IHRvIENvbnRyaWJ1dGUKCiogW09wZW4gSXNzdWVzXShodHRwczovL2dpdGh1Yi5jb20vcm9icmljaGFyZHMveG1sc2VjbGlicy9pc3N1ZXMpCiogW09wZW4gUHVsbCBSZXF1ZXN0c10oaHR0cHM6Ly9naXRodWIuY29tL3JvYnJpY2hhcmRzL3htbHNlY2xpYnMvcHVsbHMpCgpNYWlsaW5nIExpc3Q6IGh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZm9ydW0vIyFmb3J1bS94bWxzZWNsaWJzCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/robrichards/xmlseclibs/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/robrichards/xmlseclibs/src/Utils/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/robrichards/xmlseclibs/src/Utils/XPath.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBSb2JSaWNoYXJkc1xYTUxTZWNMaWJzXFV0aWxzOwoKY2xhc3MgWFBhdGgKewogICAgY29uc3QgQUxQSEFOVU1FUklDID0gJ1x3XGQnOwogICAgY29uc3QgTlVNRVJJQyA9ICdcZCc7CiAgICBjb25zdCBMRVRURVJTID0gJ1x3JzsKICAgIGNvbnN0IEVYVEVOREVEX0FMUEhBTlVNRVJJQyA9ICdcd1xkXHNcLV86XC4nOwoKICAgIGNvbnN0IFNJTkdMRV9RVU9URSA9ICdcJyc7CiAgICBjb25zdCBET1VCTEVfUVVPVEUgPSAnIic7CiAgICBjb25zdCBBTExfUVVPVEVTID0gJ1tcJyJdJzsKCgogICAgLyoqCiAgICAgKiBGaWx0ZXIgYW4gYXR0cmlidXRlIHZhbHVlIGZvciBzYXZlIGluY2x1c2lvbiBpbiBhbiBYUGF0aCBxdWVyeS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZSBUaGUgdmFsdWUgdG8gZmlsdGVyLgogICAgICogQHBhcmFtIHN0cmluZyAkcXVvdGVzIFRoZSBxdW90ZXMgdXNlZCB0byBkZWxpbWl0IHRoZSB2YWx1ZSBpbiB0aGUgWFBhdGggcXVlcnkuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIGZpbHRlcmVkIGF0dHJpYnV0ZSB2YWx1ZS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmaWx0ZXJBdHRyVmFsdWUoJHZhbHVlLCAkcXVvdGVzID0gc2VsZjo6QUxMX1FVT1RFUykKICAgIHsKICAgICAgICByZXR1cm4gcHJlZ19yZXBsYWNlKCcjJy4kcXVvdGVzLicjJywgJycsICR2YWx1ZSk7CiAgICB9CgoKICAgIC8qKgogICAgICogRmlsdGVyIGFuIGF0dHJpYnV0ZSBuYW1lIGZvciBzYXZlIGluY2x1c2lvbiBpbiBhbiBYUGF0aCBxdWVyeS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIFRoZSBhdHRyaWJ1dGUgbmFtZSB0byBmaWx0ZXIuCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGFsbG93IFRoZSBzZXQgb2YgY2hhcmFjdGVycyB0byBhbGxvdy4gQ2FuIGJlIG9uZSBvZiB0aGUgY29uc3RhbnRzIHByb3ZpZGVkIGJ5IHRoaXMgY2xhc3MsIG9yIGEKICAgICAqIGN1c3RvbSByZWdleCBleGNsdWRpbmcgdGhlICcjJyBjaGFyYWN0ZXIgKHVzZWQgYXMgZGVsaW1pdGVyKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgZmlsdGVyZWQgYXR0cmlidXRlIG5hbWUuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmlsdGVyQXR0ck5hbWUoJG5hbWUsICRhbGxvdyA9IHNlbGY6OkVYVEVOREVEX0FMUEhBTlVNRVJJQykKICAgIHsKICAgICAgICByZXR1cm4gcHJlZ19yZXBsYWNlKCcjW14nLiRhbGxvdy4nXSMnLCAnJywgJG5hbWUpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/robrichards/xmlseclibs/src/XMLSecEnc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFJvYlJpY2hhcmRzXFhNTFNlY0xpYnM7Cgp1c2UgRE9NRG9jdW1lbnQ7CnVzZSBET01FbGVtZW50Owp1c2UgRE9NTm9kZTsKdXNlIERPTVhQYXRoOwp1c2UgRXhjZXB0aW9uOwp1c2UgUm9iUmljaGFyZHNcWE1MU2VjTGlic1xVdGlsc1xYUGF0aCBhcyBYUGF0aDsKCi8qKgogKiB4bWxzZWNsaWJzLnBocAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAyNCwgUm9iZXJ0IFJpY2hhcmRzIDxycmljaGFyZHNAY2RhdGF6b25lLm9yZz4uCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICogYXJlIG1ldDoKICoKICogICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCiAqICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAqICAgICBkaXN0cmlidXRpb24uCiAqCiAqICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIFJvYmVydCBSaWNoYXJkcyBub3IgdGhlIG5hbWVzIG9mIGhpcwogKiAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAogKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAogKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCiAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCiAqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQogKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICoKICogQGF1dGhvciAgICBSb2JlcnQgUmljaGFyZHMgPHJyaWNoYXJkc0BjZGF0YXpvbmUub3JnPgogKiBAY29weXJpZ2h0IDIwMDctMjAyNCBSb2JlcnQgUmljaGFyZHMgPHJyaWNoYXJkc0BjZGF0YXpvbmUub3JnPgogKiBAbGljZW5zZSAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwICBCU0QgTGljZW5zZQogKi8KCmNsYXNzIFhNTFNlY0VuYwp7CiAgICBjb25zdCB0ZW1wbGF0ZSA9ICI8eGVuYzpFbmNyeXB0ZWREYXRhIHhtbG5zOnhlbmM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jIyc+CiAgIDx4ZW5jOkNpcGhlckRhdGE+CiAgICAgIDx4ZW5jOkNpcGhlclZhbHVlPjwveGVuYzpDaXBoZXJWYWx1ZT4KICAgPC94ZW5jOkNpcGhlckRhdGE+CjwveGVuYzpFbmNyeXB0ZWREYXRhPiI7CgogICAgY29uc3QgRWxlbWVudCA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNFbGVtZW50JzsKICAgIGNvbnN0IENvbnRlbnQgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjQ29udGVudCc7CiAgICBjb25zdCBVUkkgPSAzOwogICAgY29uc3QgWE1MRU5DTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjJzsKCiAgICAvKiogQHZhciBudWxsfERPTURvY3VtZW50ICovCiAgICBwcml2YXRlICRlbmNkb2MgPSBudWxsOwoKICAgIC8qKiBAdmFyIG51bGx8RE9NTm9kZSAgKi8KICAgIHByaXZhdGUgJHJhd05vZGUgPSBudWxsOwoKICAgIC8qKiBAdmFyIG51bGx8c3RyaW5nICovCiAgICBwdWJsaWMgJHR5cGUgPSBudWxsOwoKICAgIC8qKiBAdmFyIG51bGx8RE9NRWxlbWVudCAqLwogICAgcHVibGljICRlbmNLZXkgPSBudWxsOwoKICAgIC8qKiBAdmFyIGFycmF5ICovCiAgICBwcml2YXRlICRyZWZlcmVuY2VzID0gYXJyYXkoKTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgICR0aGlzLT5fcmVzZXRUZW1wbGF0ZSgpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gX3Jlc2V0VGVtcGxhdGUoKQogICAgewogICAgICAgICR0aGlzLT5lbmNkb2MgPSBuZXcgRE9NRG9jdW1lbnQoKTsKICAgICAgICAkdGhpcy0+ZW5jZG9jLT5sb2FkWE1MKHNlbGY6OnRlbXBsYXRlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEBwYXJhbSBET01Ob2RlICRub2RlCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0eXBlCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkUmVmZXJlbmNlKCRuYW1lLCAkbm9kZSwgJHR5cGUpCiAgICB7CiAgICAgICAgaWYgKCEgJG5vZGUgaW5zdGFuY2VPZiBET01Ob2RlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJyRub2RlIGlzIG5vdCBvZiB0eXBlIERPTU5vZGUnKTsKICAgICAgICB9CiAgICAgICAgJGN1cmVuY2RvYyA9ICR0aGlzLT5lbmNkb2M7CiAgICAgICAgJHRoaXMtPl9yZXNldFRlbXBsYXRlKCk7CiAgICAgICAgJGVuY2RvYyA9ICR0aGlzLT5lbmNkb2M7CiAgICAgICAgJHRoaXMtPmVuY2RvYyA9ICRjdXJlbmNkb2M7CiAgICAgICAgJHJlZnVyaSA9IFhNTFNlY3VyaXR5RFNpZzo6Z2VuZXJhdGVHVUlEKCk7CiAgICAgICAgJGVsZW1lbnQgPSAkZW5jZG9jLT5kb2N1bWVudEVsZW1lbnQ7CiAgICAgICAgJGVsZW1lbnQtPnNldEF0dHJpYnV0ZSgiSWQiLCAkcmVmdXJpKTsKICAgICAgICAkdGhpcy0+cmVmZXJlbmNlc1skbmFtZV0gPSBhcnJheSgibm9kZSIgPT4gJG5vZGUsICJ0eXBlIiA9PiAkdHlwZSwgImVuY25vZGUiID0+ICRlbmNkb2MsICJyZWZ1cmkiID0+ICRyZWZ1cmkpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIERPTU5vZGUgJG5vZGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE5vZGUoJG5vZGUpCiAgICB7CiAgICAgICAgJHRoaXMtPnJhd05vZGUgPSAkbm9kZTsKICAgIH0KCiAgICAvKioKICAgICAqIEVuY3J5cHQgdGhlIHNlbGVjdGVkIG5vZGUgd2l0aCB0aGUgZ2l2ZW4ga2V5LgogICAgICoKICAgICAqIEBwYXJhbSBYTUxTZWN1cml0eUtleSAkb2JqS2V5ICBUaGUgZW5jcnlwdGlvbiBrZXkgYW5kIGFsZ29yaXRobS4KICAgICAqIEBwYXJhbSBib29sICAgICAgICAgICAkcmVwbGFjZSBXaGV0aGVyIHRoZSBlbmNyeXB0ZWQgbm9kZSBzaG91bGQgYmUgcmVwbGFjZWQgaW4gdGhlIG9yaWdpbmFsIHRyZWUuIERlZmF1bHQgaXMgdHJ1ZS4KICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKgogICAgICogQHJldHVybiBET01FbGVtZW50ICBUaGUgPHhlbmM6RW5jcnlwdGVkRGF0YT4tZWxlbWVudC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVuY3J5cHROb2RlKCRvYmpLZXksICRyZXBsYWNlID0gdHJ1ZSkKICAgIHsKICAgICAgICAkZGF0YSA9ICcnOwogICAgICAgIGlmIChlbXB0eSgkdGhpcy0+cmF3Tm9kZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignTm9kZSB0byBlbmNyeXB0IGhhcyBub3QgYmVlbiBzZXQnKTsKICAgICAgICB9CiAgICAgICAgaWYgKCEgJG9iaktleSBpbnN0YW5jZW9mIFhNTFNlY3VyaXR5S2V5KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0ludmFsaWQgS2V5Jyk7CiAgICAgICAgfQogICAgICAgICRkb2MgPSAkdGhpcy0+cmF3Tm9kZS0+b3duZXJEb2N1bWVudDsKICAgICAgICAkeFBhdGggPSBuZXcgRE9NWFBhdGgoJHRoaXMtPmVuY2RvYyk7CiAgICAgICAgJG9iakxpc3QgPSAkeFBhdGgtPnF1ZXJ5KCcveGVuYzpFbmNyeXB0ZWREYXRhL3hlbmM6Q2lwaGVyRGF0YS94ZW5jOkNpcGhlclZhbHVlJyk7CiAgICAgICAgJGNpcGhlclZhbHVlID0gJG9iakxpc3QtPml0ZW0oMCk7CiAgICAgICAgaWYgKCRjaXBoZXJWYWx1ZSA9PSBudWxsKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yIGxvY2F0aW5nIENpcGhlclZhbHVlIGVsZW1lbnQgd2l0aGluIHRlbXBsYXRlJyk7CiAgICAgICAgfQogICAgICAgIHN3aXRjaCAoJHRoaXMtPnR5cGUpIHsKICAgICAgICAgICAgY2FzZSAoc2VsZjo6RWxlbWVudCk6CiAgICAgICAgICAgICAgICAkZGF0YSA9ICRkb2MtPnNhdmVYTUwoJHRoaXMtPnJhd05vZGUpOwogICAgICAgICAgICAgICAgJHRoaXMtPmVuY2RvYy0+ZG9jdW1lbnRFbGVtZW50LT5zZXRBdHRyaWJ1dGUoJ1R5cGUnLCBzZWxmOjpFbGVtZW50KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIChzZWxmOjpDb250ZW50KToKICAgICAgICAgICAgICAgICRjaGlsZHJlbiA9ICR0aGlzLT5yYXdOb2RlLT5jaGlsZE5vZGVzOwogICAgICAgICAgICAgICAgZm9yZWFjaCAoJGNoaWxkcmVuIEFTICRjaGlsZCkgewogICAgICAgICAgICAgICAgICAgICRkYXRhIC49ICRkb2MtPnNhdmVYTUwoJGNoaWxkKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICR0aGlzLT5lbmNkb2MtPmRvY3VtZW50RWxlbWVudC0+c2V0QXR0cmlidXRlKCdUeXBlJywgc2VsZjo6Q29udGVudCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1R5cGUgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQnKTsKICAgICAgICB9CgogICAgICAgICRlbmNNZXRob2QgPSAkdGhpcy0+ZW5jZG9jLT5kb2N1bWVudEVsZW1lbnQtPmFwcGVuZENoaWxkKCR0aGlzLT5lbmNkb2MtPmNyZWF0ZUVsZW1lbnROUyhzZWxmOjpYTUxFTkNOUywgJ3hlbmM6RW5jcnlwdGlvbk1ldGhvZCcpKTsKICAgICAgICAkZW5jTWV0aG9kLT5zZXRBdHRyaWJ1dGUoJ0FsZ29yaXRobScsICRvYmpLZXktPmdldEFsZ29yaXRobSgpKTsKICAgICAgICAkY2lwaGVyVmFsdWUtPnBhcmVudE5vZGUtPnBhcmVudE5vZGUtPmluc2VydEJlZm9yZSgkZW5jTWV0aG9kLCAkY2lwaGVyVmFsdWUtPnBhcmVudE5vZGUtPnBhcmVudE5vZGUtPmZpcnN0Q2hpbGQpOwoKICAgICAgICAkc3RyRW5jcnlwdCA9IGJhc2U2NF9lbmNvZGUoJG9iaktleS0+ZW5jcnlwdERhdGEoJGRhdGEpKTsKICAgICAgICAkdmFsdWUgPSAkdGhpcy0+ZW5jZG9jLT5jcmVhdGVUZXh0Tm9kZSgkc3RyRW5jcnlwdCk7CiAgICAgICAgJGNpcGhlclZhbHVlLT5hcHBlbmRDaGlsZCgkdmFsdWUpOwoKICAgICAgICBpZiAoJHJlcGxhY2UpIHsKICAgICAgICAgICAgc3dpdGNoICgkdGhpcy0+dHlwZSkgewogICAgICAgICAgICAgICAgY2FzZSAoc2VsZjo6RWxlbWVudCk6CiAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5yYXdOb2RlLT5ub2RlVHlwZSA9PSBYTUxfRE9DVU1FTlRfTk9ERSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPmVuY2RvYzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJGltcG9ydEVuYyA9ICR0aGlzLT5yYXdOb2RlLT5vd25lckRvY3VtZW50LT5pbXBvcnROb2RlKCR0aGlzLT5lbmNkb2MtPmRvY3VtZW50RWxlbWVudCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnJhd05vZGUtPnBhcmVudE5vZGUtPnJlcGxhY2VDaGlsZCgkaW1wb3J0RW5jLCAkdGhpcy0+cmF3Tm9kZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRpbXBvcnRFbmM7CiAgICAgICAgICAgICAgICBjYXNlIChzZWxmOjpDb250ZW50KToKICAgICAgICAgICAgICAgICAgICAkaW1wb3J0RW5jID0gJHRoaXMtPnJhd05vZGUtPm93bmVyRG9jdW1lbnQtPmltcG9ydE5vZGUoJHRoaXMtPmVuY2RvYy0+ZG9jdW1lbnRFbGVtZW50LCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoJHRoaXMtPnJhd05vZGUtPmZpcnN0Q2hpbGQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnJhd05vZGUtPnJlbW92ZUNoaWxkKCR0aGlzLT5yYXdOb2RlLT5maXJzdENoaWxkKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnJhd05vZGUtPmFwcGVuZENoaWxkKCRpbXBvcnRFbmMpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAkaW1wb3J0RW5jOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5lbmNkb2MtPmRvY3VtZW50RWxlbWVudDsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gWE1MU2VjdXJpdHlLZXkgJG9iaktleQogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVuY3J5cHRSZWZlcmVuY2VzKCRvYmpLZXkpCiAgICB7CiAgICAgICAgJGN1clJhd05vZGUgPSAkdGhpcy0+cmF3Tm9kZTsKICAgICAgICAkY3VyVHlwZSA9ICR0aGlzLT50eXBlOwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5yZWZlcmVuY2VzIEFTICRuYW1lID0+ICRyZWZlcmVuY2UpIHsKICAgICAgICAgICAgJHRoaXMtPmVuY2RvYyA9ICRyZWZlcmVuY2VbImVuY25vZGUiXTsKICAgICAgICAgICAgJHRoaXMtPnJhd05vZGUgPSAkcmVmZXJlbmNlWyJub2RlIl07CiAgICAgICAgICAgICR0aGlzLT50eXBlID0gJHJlZmVyZW5jZVsidHlwZSJdOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgJGVuY05vZGUgPSAkdGhpcy0+ZW5jcnlwdE5vZGUoJG9iaktleSk7CiAgICAgICAgICAgICAgICAkdGhpcy0+cmVmZXJlbmNlc1skbmFtZV1bImVuY25vZGUiXSA9ICRlbmNOb2RlOwogICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5yYXdOb2RlID0gJGN1clJhd05vZGU7CiAgICAgICAgICAgICAgICAkdGhpcy0+dHlwZSA9ICRjdXJUeXBlOwogICAgICAgICAgICAgICAgdGhyb3cgJGU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJHRoaXMtPnJhd05vZGUgPSAkY3VyUmF3Tm9kZTsKICAgICAgICAkdGhpcy0+dHlwZSA9ICRjdXJUeXBlOwogICAgfQoKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIENpcGhlclZhbHVlIHRleHQgZnJvbSB0aGlzIGVuY3J5cHRlZCBub2RlLgogICAgICoKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsICBUaGUgQ2lwaGVydmFsdWUgdGV4dCwgb3IgbnVsbCBpZiBubyBDaXBoZXJWYWx1ZSBpcyBmb3VuZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENpcGhlclZhbHVlKCkKICAgIHsKICAgICAgICBpZiAoZW1wdHkoJHRoaXMtPnJhd05vZGUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ05vZGUgdG8gZGVjcnlwdCBoYXMgbm90IGJlZW4gc2V0Jyk7CiAgICAgICAgfQoKICAgICAgICAkZG9jID0gJHRoaXMtPnJhd05vZGUtPm93bmVyRG9jdW1lbnQ7CiAgICAgICAgJHhQYXRoID0gbmV3IERPTVhQYXRoKCRkb2MpOwogICAgICAgICR4UGF0aC0+cmVnaXN0ZXJOYW1lc3BhY2UoJ3htbGVuY3InLCBzZWxmOjpYTUxFTkNOUyk7CiAgICAgICAgLyogT25seSBoYW5kbGVzIGVtYmVkZGVkIGNvbnRlbnQgcmlnaHQgbm93IGFuZCBub3QgYSByZWZlcmVuY2UgKi8KICAgICAgICAkcXVlcnkgPSAiLi94bWxlbmNyOkNpcGhlckRhdGEveG1sZW5jcjpDaXBoZXJWYWx1ZSI7CiAgICAgICAgJG5vZGVzZXQgPSAkeFBhdGgtPnF1ZXJ5KCRxdWVyeSwgJHRoaXMtPnJhd05vZGUpOwogICAgICAgICRub2RlID0gJG5vZGVzZXQtPml0ZW0oMCk7CgogICAgICAgIGlmICghJG5vZGUpIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGJhc2U2NF9kZWNvZGUoJG5vZGUtPm5vZGVWYWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZWNyeXB0IHRoaXMgZW5jcnlwdGVkIG5vZGUuCiAgICAgKgogICAgICogVGhlIGJlaGF2aW91ciBvZiB0aGlzIGZ1bmN0aW9uIGRlcGVuZHMgb24gdGhlIHZhbHVlIG9mICRyZXBsYWNlLgogICAgICogSWYgJHJlcGxhY2UgaXMgZmFsc2UsIHdlIHdpbGwgcmV0dXJuIHRoZSBkZWNyeXB0ZWQgZGF0YSBhcyBhIHN0cmluZy4KICAgICAqIElmICRyZXBsYWNlIGlzIHRydWUsIHdlIHdpbGwgaW5zZXJ0IHRoZSBkZWNyeXB0ZWQgZWxlbWVudChzKSBpbnRvIHRoZQogICAgICogZG9jdW1lbnQsIGFuZCByZXR1cm4gdGhlIGRlY3J5cHRlZCBlbGVtZW50KHMpLgogICAgICoKICAgICAqIEBwYXJhbSBYTUxTZWN1cml0eUtleSAkb2JqS2V5ICBUaGUgZGVjcnlwdGlvbiBrZXkgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIGRlY3J5cHRpbmcgdGhlIG5vZGUuCiAgICAgKiBAcGFyYW0gYm9vbGVhbiAgICAgICAgJHJlcGxhY2UgV2hldGhlciB3ZSBzaG91bGQgcmVwbGFjZSB0aGUgZW5jcnlwdGVkIG5vZGUgaW4gdGhlIFhNTCBkb2N1bWVudCB3aXRoIHRoZSBkZWNyeXB0ZWQgZGF0YS4gVGhlIGRlZmF1bHQgaXMgdHJ1ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xET01FbGVtZW50ICBUaGUgZGVjcnlwdGVkIGRhdGEuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWNyeXB0Tm9kZSgkb2JqS2V5LCAkcmVwbGFjZT10cnVlKQogICAgewogICAgICAgIGlmICghICRvYmpLZXkgaW5zdGFuY2VvZiBYTUxTZWN1cml0eUtleSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIEtleScpOwogICAgICAgIH0KCiAgICAgICAgJGVuY3J5cHRlZERhdGEgPSAkdGhpcy0+Z2V0Q2lwaGVyVmFsdWUoKTsKICAgICAgICBpZiAoJGVuY3J5cHRlZERhdGEpIHsKICAgICAgICAgICAgJGRlY3J5cHRlZCA9ICRvYmpLZXktPmRlY3J5cHREYXRhKCRlbmNyeXB0ZWREYXRhKTsKICAgICAgICAgICAgaWYgKCRyZXBsYWNlKSB7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKCR0aGlzLT50eXBlKSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAoc2VsZjo6RWxlbWVudCk6CiAgICAgICAgICAgICAgICAgICAgICAgICRuZXdkb2MgPSBuZXcgRE9NRG9jdW1lbnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgJG5ld2RvYy0+bG9hZFhNTCgkZGVjcnlwdGVkKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5yYXdOb2RlLT5ub2RlVHlwZSA9PSBYTUxfRE9DVU1FTlRfTk9ERSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRuZXdkb2M7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJGltcG9ydEVuYyA9ICR0aGlzLT5yYXdOb2RlLT5vd25lckRvY3VtZW50LT5pbXBvcnROb2RlKCRuZXdkb2MtPmRvY3VtZW50RWxlbWVudCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5yYXdOb2RlLT5wYXJlbnROb2RlLT5yZXBsYWNlQ2hpbGQoJGltcG9ydEVuYywgJHRoaXMtPnJhd05vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGltcG9ydEVuYzsKICAgICAgICAgICAgICAgICAgICBjYXNlIChzZWxmOjpDb250ZW50KToKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5yYXdOb2RlLT5ub2RlVHlwZSA9PSBYTUxfRE9DVU1FTlRfTk9ERSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRvYyA9ICR0aGlzLT5yYXdOb2RlOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRvYyA9ICR0aGlzLT5yYXdOb2RlLT5vd25lckRvY3VtZW50OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICRuZXdGcmFnID0gJGRvYy0+Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwogICAgICAgICAgICAgICAgICAgICAgICAkbmV3RnJhZy0+YXBwZW5kWE1MKCRkZWNyeXB0ZWQpOwogICAgICAgICAgICAgICAgICAgICAgICAkcGFyZW50ID0gJHRoaXMtPnJhd05vZGUtPnBhcmVudE5vZGU7CiAgICAgICAgICAgICAgICAgICAgICAgICRwYXJlbnQtPnJlcGxhY2VDaGlsZCgkbmV3RnJhZywgJHRoaXMtPnJhd05vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHBhcmVudDsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGRlY3J5cHRlZDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiAkZGVjcnlwdGVkOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiQ2Fubm90IGxvY2F0ZSBlbmNyeXB0ZWQgZGF0YSIpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEVuY3J5cHQgdGhlIFhNTFNlY3VyaXR5S2V5CiAgICAgKgogICAgICogQHBhcmFtIFhNTFNlY3VyaXR5S2V5ICRzcmNLZXkKICAgICAqIEBwYXJhbSBYTUxTZWN1cml0eUtleSAkcmF3S2V5CiAgICAgKiBAcGFyYW0gYm9vbCAkYXBwZW5kCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5jcnlwdEtleSgkc3JjS2V5LCAkcmF3S2V5LCAkYXBwZW5kPXRydWUpCiAgICB7CiAgICAgICAgaWYgKCghICRzcmNLZXkgaW5zdGFuY2VvZiBYTUxTZWN1cml0eUtleSkgfHwgKCEgJHJhd0tleSBpbnN0YW5jZW9mIFhNTFNlY3VyaXR5S2V5KSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIEtleScpOwogICAgICAgIH0KICAgICAgICAkc3RyRW5jS2V5ID0gYmFzZTY0X2VuY29kZSgkc3JjS2V5LT5lbmNyeXB0RGF0YSgkcmF3S2V5LT5rZXkpKTsKICAgICAgICAkcm9vdCA9ICR0aGlzLT5lbmNkb2MtPmRvY3VtZW50RWxlbWVudDsKICAgICAgICAkZW5jS2V5ID0gJHRoaXMtPmVuY2RvYy0+Y3JlYXRlRWxlbWVudE5TKHNlbGY6OlhNTEVOQ05TLCAneGVuYzpFbmNyeXB0ZWRLZXknKTsKICAgICAgICBpZiAoJGFwcGVuZCkgewogICAgICAgICAgICAka2V5SW5mbyA9ICRyb290LT5pbnNlcnRCZWZvcmUoJHRoaXMtPmVuY2RvYy0+Y3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjJywgJ2RzaWc6S2V5SW5mbycpLCAkcm9vdC0+Zmlyc3RDaGlsZCk7CiAgICAgICAgICAgICRrZXlJbmZvLT5hcHBlbmRDaGlsZCgkZW5jS2V5KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+ZW5jS2V5ID0gJGVuY0tleTsKICAgICAgICB9CiAgICAgICAgJGVuY01ldGhvZCA9ICRlbmNLZXktPmFwcGVuZENoaWxkKCR0aGlzLT5lbmNkb2MtPmNyZWF0ZUVsZW1lbnROUyhzZWxmOjpYTUxFTkNOUywgJ3hlbmM6RW5jcnlwdGlvbk1ldGhvZCcpKTsKICAgICAgICAkZW5jTWV0aG9kLT5zZXRBdHRyaWJ1dGUoJ0FsZ29yaXRobScsICRzcmNLZXktPmdldEFsZ29yaXRoKCkpOwogICAgICAgIGlmICghIGVtcHR5KCRzcmNLZXktPm5hbWUpKSB7CiAgICAgICAgICAgICRrZXlJbmZvID0gJGVuY0tleS0+YXBwZW5kQ2hpbGQoJHRoaXMtPmVuY2RvYy0+Y3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjJywgJ2RzaWc6S2V5SW5mbycpKTsKICAgICAgICAgICAgJGtleUluZm8tPmFwcGVuZENoaWxkKCR0aGlzLT5lbmNkb2MtPmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIycsICdkc2lnOktleU5hbWUnLCAkc3JjS2V5LT5uYW1lKSk7CiAgICAgICAgfQogICAgICAgICRjaXBoZXJEYXRhID0gJGVuY0tleS0+YXBwZW5kQ2hpbGQoJHRoaXMtPmVuY2RvYy0+Y3JlYXRlRWxlbWVudE5TKHNlbGY6OlhNTEVOQ05TLCAneGVuYzpDaXBoZXJEYXRhJykpOwogICAgICAgICRjaXBoZXJEYXRhLT5hcHBlbmRDaGlsZCgkdGhpcy0+ZW5jZG9jLT5jcmVhdGVFbGVtZW50TlMoc2VsZjo6WE1MRU5DTlMsICd4ZW5jOkNpcGhlclZhbHVlJywgJHN0ckVuY0tleSkpOwogICAgICAgIGlmIChpc19hcnJheSgkdGhpcy0+cmVmZXJlbmNlcykgJiYgY291bnQoJHRoaXMtPnJlZmVyZW5jZXMpID4gMCkgewogICAgICAgICAgICAkcmVmTGlzdCA9ICRlbmNLZXktPmFwcGVuZENoaWxkKCR0aGlzLT5lbmNkb2MtPmNyZWF0ZUVsZW1lbnROUyhzZWxmOjpYTUxFTkNOUywgJ3hlbmM6UmVmZXJlbmNlTGlzdCcpKTsKICAgICAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnJlZmVyZW5jZXMgQVMgJG5hbWUgPT4gJHJlZmVyZW5jZSkgewogICAgICAgICAgICAgICAgJHJlZnVyaSA9ICRyZWZlcmVuY2VbInJlZnVyaSJdOwogICAgICAgICAgICAgICAgJGRhdGFSZWYgPSAkcmVmTGlzdC0+YXBwZW5kQ2hpbGQoJHRoaXMtPmVuY2RvYy0+Y3JlYXRlRWxlbWVudE5TKHNlbGY6OlhNTEVOQ05TLCAneGVuYzpEYXRhUmVmZXJlbmNlJykpOwogICAgICAgICAgICAgICAgJGRhdGFSZWYtPnNldEF0dHJpYnV0ZSgiVVJJIiwgJyMnIC4gJHJlZnVyaSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIFhNTFNlY3VyaXR5S2V5ICRlbmNLZXkKICAgICAqIEByZXR1cm4gRE9NRWxlbWVudHxzdHJpbmcKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWNyeXB0S2V5KCRlbmNLZXkpCiAgICB7CiAgICAgICAgaWYgKCEgJGVuY0tleS0+aXNFbmNyeXB0ZWQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiS2V5IGlzIG5vdCBFbmNyeXB0ZWQiKTsKICAgICAgICB9CiAgICAgICAgaWYgKGVtcHR5KCRlbmNLZXktPmtleSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiS2V5IGlzIG1pc3NpbmcgZGF0YSB0byBwZXJmb3JtIHRoZSBkZWNyeXB0aW9uIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkdGhpcy0+ZGVjcnlwdE5vZGUoJGVuY0tleSwgZmFsc2UpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIERPTURvY3VtZW50ICRlbGVtZW50CiAgICAgKiBAcmV0dXJuIERPTU5vZGV8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9jYXRlRW5jcnlwdGVkRGF0YSgkZWxlbWVudCkKICAgIHsKICAgICAgICBpZiAoJGVsZW1lbnQgaW5zdGFuY2VvZiBET01Eb2N1bWVudCkgewogICAgICAgICAgICAkZG9jID0gJGVsZW1lbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGRvYyA9ICRlbGVtZW50LT5vd25lckRvY3VtZW50OwogICAgICAgIH0KICAgICAgICBpZiAoJGRvYykgewogICAgICAgICAgICAkeHBhdGggPSBuZXcgRE9NWFBhdGgoJGRvYyk7CiAgICAgICAgICAgICRxdWVyeSA9ICIvLypbbG9jYWwtbmFtZSgpPSdFbmNyeXB0ZWREYXRhJyBhbmQgbmFtZXNwYWNlLXVyaSgpPSciLnNlbGY6OlhNTEVOQ05TLiInXSI7CiAgICAgICAgICAgICRub2Rlc2V0ID0gJHhwYXRoLT5xdWVyeSgkcXVlcnkpOwogICAgICAgICAgICByZXR1cm4gJG5vZGVzZXQtPml0ZW0oMCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUga2V5IGZyb20gdGhlIERPTQogICAgICogQHBhcmFtIG51bGx8RE9NTm9kZSAkbm9kZQogICAgICogQHJldHVybiBudWxsfFhNTFNlY3VyaXR5S2V5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2NhdGVLZXkoJG5vZGU9bnVsbCkKICAgIHsKICAgICAgICBpZiAoZW1wdHkoJG5vZGUpKSB7CiAgICAgICAgICAgICRub2RlID0gJHRoaXMtPnJhd05vZGU7CiAgICAgICAgfQogICAgICAgIGlmICghICRub2RlIGluc3RhbmNlb2YgRE9NTm9kZSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYgKCRkb2MgPSAkbm9kZS0+b3duZXJEb2N1bWVudCkgewogICAgICAgICAgICAkeHBhdGggPSBuZXcgRE9NWFBhdGgoJGRvYyk7CiAgICAgICAgICAgICR4cGF0aC0+cmVnaXN0ZXJOYW1lc3BhY2UoJ3htbHNlY2VuYycsIHNlbGY6OlhNTEVOQ05TKTsKICAgICAgICAgICAgJHF1ZXJ5ID0gIi4vL3htbHNlY2VuYzpFbmNyeXB0aW9uTWV0aG9kIjsKICAgICAgICAgICAgJG5vZGVzZXQgPSAkeHBhdGgtPnF1ZXJ5KCRxdWVyeSwgJG5vZGUpOwogICAgICAgICAgICBpZiAoJGVuY21ldGggPSAkbm9kZXNldC0+aXRlbSgwKSkgewogICAgICAgICAgICAgICAgICAgJGF0dHJBbGdvcml0aG0gPSAkZW5jbWV0aC0+Z2V0QXR0cmlidXRlKCJBbGdvcml0aG0iKTsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgJG9iaktleSA9IG5ldyBYTUxTZWN1cml0eUtleSgkYXR0ckFsZ29yaXRobSwgYXJyYXkoJ3R5cGUnID0+ICdwcml2YXRlJykpOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gJG9iaktleTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBudWxsfFhNTFNlY3VyaXR5S2V5ICRvYmpCYXNlS2V5CiAgICAgKiBAcGFyYW0gbnVsbHxET01Ob2RlICRub2RlCiAgICAgKiBAcmV0dXJuIG51bGx8WE1MU2VjdXJpdHlLZXkKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RhdGljTG9jYXRlS2V5SW5mbygkb2JqQmFzZUtleT1udWxsLCAkbm9kZT1udWxsKQogICAgewogICAgICAgIGlmIChlbXB0eSgkbm9kZSkgfHwgKCEgJG5vZGUgaW5zdGFuY2VvZiBET01Ob2RlKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgJGRvYyA9ICRub2RlLT5vd25lckRvY3VtZW50OwogICAgICAgIGlmICghJGRvYykgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICR4cGF0aCA9IG5ldyBET01YUGF0aCgkZG9jKTsKICAgICAgICAkeHBhdGgtPnJlZ2lzdGVyTmFtZXNwYWNlKCd4bWxzZWNlbmMnLCBzZWxmOjpYTUxFTkNOUyk7CiAgICAgICAgJHhwYXRoLT5yZWdpc3Rlck5hbWVzcGFjZSgneG1sc2VjZHNpZycsIFhNTFNlY3VyaXR5RFNpZzo6WE1MRFNJR05TKTsKICAgICAgICAkcXVlcnkgPSAiLi94bWxzZWNkc2lnOktleUluZm8iOwogICAgICAgICRub2Rlc2V0ID0gJHhwYXRoLT5xdWVyeSgkcXVlcnksICRub2RlKTsKICAgICAgICAkZW5jbWV0aCA9ICRub2Rlc2V0LT5pdGVtKDApOwogICAgICAgIGlmICghJGVuY21ldGgpIHsKICAgICAgICAgICAgLyogTm8gS2V5SW5mbyBpbiBFbmNyeXB0ZWREYXRhIC8gRW5jcnlwdGVkS2V5LiAqLwogICAgICAgICAgICByZXR1cm4gJG9iakJhc2VLZXk7CiAgICAgICAgfQoKICAgICAgICBmb3JlYWNoICgkZW5jbWV0aC0+Y2hpbGROb2RlcyBBUyAkY2hpbGQpIHsKICAgICAgICAgICAgc3dpdGNoICgkY2hpbGQtPmxvY2FsTmFtZSkgewogICAgICAgICAgICAgICAgY2FzZSAnS2V5TmFtZSc6CiAgICAgICAgICAgICAgICAgICAgaWYgKCEgZW1wdHkoJG9iakJhc2VLZXkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRvYmpCYXNlS2V5LT5uYW1lID0gJGNoaWxkLT5ub2RlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnS2V5VmFsdWUnOgogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRjaGlsZC0+Y2hpbGROb2RlcyBBUyAka2V5dmFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoJGtleXZhbC0+bG9jYWxOYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdEU0FLZXlWYWx1ZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiRFNBS2V5VmFsdWUgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1JTQUtleVZhbHVlJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbW9kdWx1cyA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV4cG9uZW50ID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG1vZHVsdXNOb2RlID0gJGtleXZhbC0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ01vZHVsdXMnKS0+aXRlbSgwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbW9kdWx1cyA9IGJhc2U2NF9kZWNvZGUoJG1vZHVsdXNOb2RlLT5ub2RlVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGV4cG9uZW50Tm9kZSA9ICRrZXl2YWwtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCdFeHBvbmVudCcpLT5pdGVtKDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRleHBvbmVudCA9IGJhc2U2NF9kZWNvZGUoJGV4cG9uZW50Tm9kZS0+bm9kZVZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRtb2R1bHVzKSB8fCBlbXB0eSgkZXhwb25lbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIk1pc3NpbmcgTW9kdWx1cyBvciBFeHBvbmVudCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcHVibGljS2V5ID0gWE1MU2VjdXJpdHlLZXk6OmNvbnZlcnRSU0EoJG1vZHVsdXMsICRleHBvbmVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9iakJhc2VLZXktPmxvYWRLZXkoJHB1YmxpY0tleSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdSZXRyaWV2YWxNZXRob2QnOgogICAgICAgICAgICAgICAgICAgICR0eXBlID0gJGNoaWxkLT5nZXRBdHRyaWJ1dGUoJ1R5cGUnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJHR5cGUgIT09ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNFbmNyeXB0ZWRLZXknKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVuc3VwcG9ydGVkIGtleSB0eXBlLiAqLwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHVyaSA9ICRjaGlsZC0+Z2V0QXR0cmlidXRlKCdVUkknKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJHVyaVswXSAhPT0gJyMnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVSSSBub3QgYSByZWZlcmVuY2UgLSB1bnN1cHBvcnRlZC4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRpZCA9IHN1YnN0cigkdXJpLCAxKTsKCiAgICAgICAgICAgICAgICAgICAgJHF1ZXJ5ID0gJy8veG1sc2VjZW5jOkVuY3J5cHRlZEtleVtASWQ9IicuWFBhdGg6OmZpbHRlckF0dHJWYWx1ZSgkaWQsIFhQYXRoOjpET1VCTEVfUVVPVEUpLiciXSc7CiAgICAgICAgICAgICAgICAgICAgJGtleUVsZW1lbnQgPSAkeHBhdGgtPnF1ZXJ5KCRxdWVyeSktPml0ZW0oMCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCEka2V5RWxlbWVudCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJVbmFibGUgdG8gbG9jYXRlIEVuY3J5cHRlZEtleSB3aXRoIEBJZD0nJGlkJy4iKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBYTUxTZWN1cml0eUtleTo6ZnJvbUVuY3J5cHRlZEtleUVsZW1lbnQoJGtleUVsZW1lbnQpOwogICAgICAgICAgICAgICAgY2FzZSAnRW5jcnlwdGVkS2V5JzoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gWE1MU2VjdXJpdHlLZXk6OmZyb21FbmNyeXB0ZWRLZXlFbGVtZW50KCRjaGlsZCk7CiAgICAgICAgICAgICAgICBjYXNlICdYNTA5RGF0YSc6CiAgICAgICAgICAgICAgICAgICAgaWYgKCR4NTA5Y2VydE5vZGVzID0gJGNoaWxkLT5nZXRFbGVtZW50c0J5VGFnTmFtZSgnWDUwOUNlcnRpZmljYXRlJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR4NTA5Y2VydE5vZGVzLT5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeDUwOWNlcnQgPSAkeDUwOWNlcnROb2Rlcy0+aXRlbSgwKS0+dGV4dENvbnRlbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeDUwOWNlcnQgPSBzdHJfcmVwbGFjZShhcnJheSgiXHIiLCAiXG4iLCAiICIsICJcdCIpLCAiIiwgJHg1MDljZXJ0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR4NTA5Y2VydCA9ICItLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS1cbiIuY2h1bmtfc3BsaXQoJHg1MDljZXJ0LCA2NCwgIlxuIikuIi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS1cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb2JqQmFzZUtleS0+bG9hZEtleSgkeDUwOWNlcnQsIGZhbHNlLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJG9iakJhc2VLZXk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbnVsbHxYTUxTZWN1cml0eUtleSAkb2JqQmFzZUtleQogICAgICogQHBhcmFtIG51bGx8RE9NTm9kZSAkbm9kZQogICAgICogQHJldHVybiBudWxsfFhNTFNlY3VyaXR5S2V5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2NhdGVLZXlJbmZvKCRvYmpCYXNlS2V5PW51bGwsICRub2RlPW51bGwpCiAgICB7CiAgICAgICAgaWYgKGVtcHR5KCRub2RlKSkgewogICAgICAgICAgICAkbm9kZSA9ICR0aGlzLT5yYXdOb2RlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZjo6c3RhdGljTG9jYXRlS2V5SW5mbygkb2JqQmFzZUtleSwgJG5vZGUpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/robrichards/xmlseclibs/src/XMLSecurityDSig.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFJvYlJpY2hhcmRzXFhNTFNlY0xpYnM7Cgp1c2UgRE9NRG9jdW1lbnQ7CnVzZSBET01FbGVtZW50Owp1c2UgRE9NTm9kZTsKdXNlIERPTVhQYXRoOwp1c2UgRXhjZXB0aW9uOwp1c2UgUm9iUmljaGFyZHNcWE1MU2VjTGlic1xVdGlsc1xYUGF0aCBhcyBYUGF0aDsKCi8qKgogKiB4bWxzZWNsaWJzLnBocAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAyNCwgUm9iZXJ0IFJpY2hhcmRzIDxycmljaGFyZHNAY2RhdGF6b25lLm9yZz4uCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICogYXJlIG1ldDoKICoKICogICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCiAqICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAqICAgICBkaXN0cmlidXRpb24uCiAqCiAqICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIFJvYmVydCBSaWNoYXJkcyBub3IgdGhlIG5hbWVzIG9mIGhpcwogKiAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAogKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAogKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCiAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCiAqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQogKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICoKICogQGF1dGhvciAgICBSb2JlcnQgUmljaGFyZHMgPHJyaWNoYXJkc0BjZGF0YXpvbmUub3JnPgogKiBAY29weXJpZ2h0IDIwMDctMjAyNCBSb2JlcnQgUmljaGFyZHMgPHJyaWNoYXJkc0BjZGF0YXpvbmUub3JnPgogKiBAbGljZW5zZSAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwICBCU0QgTGljZW5zZQogKi8KCmNsYXNzIFhNTFNlY3VyaXR5RFNpZwp7CiAgICBjb25zdCBYTUxEU0lHTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyc7CiAgICBjb25zdCBTSEExID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNzaGExJzsKICAgIGNvbnN0IFNIQTI1NiA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNzaGEyNTYnOwogICAgY29uc3QgU0hBMzg0ID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZHNpZy1tb3JlI3NoYTM4NCc7CiAgICBjb25zdCBTSEE1MTIgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjc2hhNTEyJzsKICAgIGNvbnN0IFJJUEVNRDE2MCA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNyaXBlbWQxNjAnOwoKICAgIGNvbnN0IEMxNE4gPSAnaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMS9SRUMteG1sLWMxNG4tMjAwMTAzMTUnOwogICAgY29uc3QgQzE0Tl9DT01NRU5UUyA9ICdodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy14bWwtYzE0bi0yMDAxMDMxNSNXaXRoQ29tbWVudHMnOwogICAgY29uc3QgRVhDX0MxNE4gPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jJzsKICAgIGNvbnN0IEVYQ19DMTROX0NPTU1FTlRTID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuI1dpdGhDb21tZW50cyc7CgogICAgY29uc3QgdGVtcGxhdGUgPSAnPGRzOlNpZ25hdHVyZSB4bWxuczpkcz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyI+CiAgPGRzOlNpZ25lZEluZm8+CiAgICA8ZHM6U2lnbmF0dXJlTWV0aG9kIC8+CiAgPC9kczpTaWduZWRJbmZvPgo8L2RzOlNpZ25hdHVyZT4nOwoKICAgIGNvbnN0IEJBU0VfVEVNUExBVEUgPSAnPFNpZ25hdHVyZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyI+CiAgPFNpZ25lZEluZm8+CiAgICA8U2lnbmF0dXJlTWV0aG9kIC8+CiAgPC9TaWduZWRJbmZvPgo8L1NpZ25hdHVyZT4nOwoKICAgIC8qKiBAdmFyIERPTUVsZW1lbnR8bnVsbCAqLwogICAgcHVibGljICRzaWdOb2RlID0gbnVsbDsKCiAgICAvKiogQHZhciBhcnJheSAqLwogICAgcHVibGljICRpZEtleXMgPSBhcnJheSgpOwoKICAgIC8qKiBAdmFyIGFycmF5ICovCiAgICBwdWJsaWMgJGlkTlMgPSBhcnJheSgpOwoKICAgIC8qKiBAdmFyIHN0cmluZ3xudWxsICovCiAgICBwcml2YXRlICRzaWduZWRJbmZvID0gbnVsbDsKCiAgICAvKiogQHZhciBEb21YUGF0aHxudWxsICovCiAgICBwcml2YXRlICR4UGF0aEN0eCA9IG51bGw7CgogICAgLyoqIEB2YXIgc3RyaW5nfG51bGwgKi8KICAgIHByaXZhdGUgJGNhbm9uaWNhbE1ldGhvZCA9IG51bGw7CgogICAgLyoqIEB2YXIgc3RyaW5nICovCiAgICBwcml2YXRlICRwcmVmaXggPSAnJzsKCiAgICAvKiogQHZhciBzdHJpbmcgKi8KICAgIHByaXZhdGUgJHNlYXJjaHBmeCA9ICdzZWNkc2lnJzsKCiAgICAvKioKICAgICAqIFRoaXMgdmFyaWFibGUgY29udGFpbnMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgdmFsaWRhdGVkIG5vZGVzLgogICAgICogQHZhciBhcnJheXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJHZhbGlkYXRlZE5vZGVzID0gbnVsbDsKCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJHByZWZpeAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHByZWZpeD0nZHMnKQogICAgewogICAgICAgICR0ZW1wbGF0ZSA9IHNlbGY6OkJBU0VfVEVNUExBVEU7CiAgICAgICAgaWYgKCEgZW1wdHkoJHByZWZpeCkpIHsKICAgICAgICAgICAgJHRoaXMtPnByZWZpeCA9ICRwcmVmaXguJzonOwogICAgICAgICAgICAkc2VhcmNoID0gYXJyYXkoIjxTIiwgIjwvUyIsICJ4bWxucz0iKTsKICAgICAgICAgICAgJHJlcGxhY2UgPSBhcnJheSgiPCRwcmVmaXg6UyIsICI8LyRwcmVmaXg6UyIsICJ4bWxuczokcHJlZml4PSIpOwogICAgICAgICAgICAkdGVtcGxhdGUgPSBzdHJfcmVwbGFjZSgkc2VhcmNoLCAkcmVwbGFjZSwgJHRlbXBsYXRlKTsKICAgICAgICB9CiAgICAgICAgJHNpZ2RvYyA9IG5ldyBET01Eb2N1bWVudCgpOwogICAgICAgICRzaWdkb2MtPmxvYWRYTUwoJHRlbXBsYXRlKTsKICAgICAgICAkdGhpcy0+c2lnTm9kZSA9ICRzaWdkb2MtPmRvY3VtZW50RWxlbWVudDsKICAgIH0KCiAgICAvKioKICAgICAqIFJlc2V0IHRoZSBYUGF0aE9iaiB0byBudWxsCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gcmVzZXRYUGF0aE9iaigpCiAgICB7CiAgICAgICAgJHRoaXMtPnhQYXRoQ3R4ID0gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIFhQYXRoT2JqIG9yIG51bGwgaWYgeFBhdGhDdHggaXMgc2V0IGFuZCBzaWdOb2RlIGlzIGVtcHR5LgogICAgICoKICAgICAqIEByZXR1cm4gRE9NWFBhdGh8bnVsbAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldFhQYXRoT2JqKCkKICAgIHsKICAgICAgICBpZiAoZW1wdHkoJHRoaXMtPnhQYXRoQ3R4KSAmJiAhIGVtcHR5KCR0aGlzLT5zaWdOb2RlKSkgewogICAgICAgICAgICAkeHBhdGggPSBuZXcgRE9NWFBhdGgoJHRoaXMtPnNpZ05vZGUtPm93bmVyRG9jdW1lbnQpOwogICAgICAgICAgICAkeHBhdGgtPnJlZ2lzdGVyTmFtZXNwYWNlKCdzZWNkc2lnJywgc2VsZjo6WE1MRFNJR05TKTsKICAgICAgICAgICAgJHRoaXMtPnhQYXRoQ3R4ID0gJHhwYXRoOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHRoaXMtPnhQYXRoQ3R4OwogICAgfQoKICAgIC8qKgogICAgICogR2VuZXJhdGUgZ3VpZAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHByZWZpeCBQcmVmaXggdG8gdXNlIGZvciBndWlkLiBkZWZhdWx0cyB0byBwZngKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgZ2VuZXJhdGVkIGd1aWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZW5lcmF0ZUdVSUQoJHByZWZpeD0ncGZ4JykKICAgIHsKICAgICAgICAkdXVpZCA9IG1kNSh1bmlxaWQobXRfcmFuZCgpLCB0cnVlKSk7CiAgICAgICAgJGd1aWQgPSAkcHJlZml4LnN1YnN0cigkdXVpZCwgMCwgOCkuIi0iLgogICAgICAgICAgICAgICAgc3Vic3RyKCR1dWlkLCA4LCA0KS4iLSIuCiAgICAgICAgICAgICAgICBzdWJzdHIoJHV1aWQsIDEyLCA0KS4iLSIuCiAgICAgICAgICAgICAgICBzdWJzdHIoJHV1aWQsIDE2LCA0KS4iLSIuCiAgICAgICAgICAgICAgICBzdWJzdHIoJHV1aWQsIDIwLCAxMik7CiAgICAgICAgcmV0dXJuICRndWlkOwogICAgfQoKICAgIC8qKgogICAgICogR2VuZXJhdGUgZ3VpZAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHByZWZpeCBQcmVmaXggdG8gdXNlIGZvciBndWlkLiBkZWZhdWx0cyB0byBwZngKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgZ2VuZXJhdGVkIGd1aWQKICAgICAqCiAgICAgKiBAZGVwcmVjYXRlZCBNZXRob2QgZGVwcmVjYXRlZCBpbiBSZWxlYXNlIDEuNC4xCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2VuZXJhdGVfR1VJRCgkcHJlZml4PSdwZngnKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjpnZW5lcmF0ZUdVSUQoJHByZWZpeCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gRE9NRG9jdW1lbnQgJG9iakRvYwogICAgICogQHBhcmFtIGludCAkcG9zCiAgICAgKiBAcmV0dXJuIERPTU5vZGV8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9jYXRlU2lnbmF0dXJlKCRvYmpEb2MsICRwb3M9MCkKICAgIHsKICAgICAgICBpZiAoJG9iakRvYyBpbnN0YW5jZW9mIERPTURvY3VtZW50KSB7CiAgICAgICAgICAgICRkb2MgPSAkb2JqRG9jOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRkb2MgPSAkb2JqRG9jLT5vd25lckRvY3VtZW50OwogICAgICAgIH0KICAgICAgICBpZiAoJGRvYykgewogICAgICAgICAgICAkeHBhdGggPSBuZXcgRE9NWFBhdGgoJGRvYyk7CiAgICAgICAgICAgICR4cGF0aC0+cmVnaXN0ZXJOYW1lc3BhY2UoJ3NlY2RzaWcnLCBzZWxmOjpYTUxEU0lHTlMpOwogICAgICAgICAgICAkcXVlcnkgPSAiLi8vc2VjZHNpZzpTaWduYXR1cmUiOwogICAgICAgICAgICAkbm9kZXNldCA9ICR4cGF0aC0+cXVlcnkoJHF1ZXJ5LCAkb2JqRG9jKTsKICAgICAgICAgICAgJHRoaXMtPnNpZ05vZGUgPSAkbm9kZXNldC0+aXRlbSgkcG9zKTsKICAgICAgICAgICAgJHF1ZXJ5ID0gIi4vc2VjZHNpZzpTaWduZWRJbmZvIjsKICAgICAgICAgICAgJG5vZGVzZXQgPSAkeHBhdGgtPnF1ZXJ5KCRxdWVyeSwgJHRoaXMtPnNpZ05vZGUpOwogICAgICAgICAgICBpZiAoJG5vZGVzZXQtPmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkludmFsaWQgc3RydWN0dXJlIC0gVG9vIG1hbnkgU2lnbmVkSW5mbyBlbGVtZW50cyBmb3VuZCIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+c2lnTm9kZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcGFyYW0gbnVsbHxzdHJpbmcgJHZhbHVlCiAgICAgKiBAcmV0dXJuIERPTUVsZW1lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZU5ld1NpZ25Ob2RlKCRuYW1lLCAkdmFsdWU9bnVsbCkKICAgIHsKICAgICAgICAkZG9jID0gJHRoaXMtPnNpZ05vZGUtPm93bmVyRG9jdW1lbnQ7CiAgICAgICAgaWYgKCEgaXNfbnVsbCgkdmFsdWUpKSB7CiAgICAgICAgICAgICRub2RlID0gJGRvYy0+Y3JlYXRlRWxlbWVudE5TKHNlbGY6OlhNTERTSUdOUywgJHRoaXMtPnByZWZpeC4kbmFtZSwgJHZhbHVlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkbm9kZSA9ICRkb2MtPmNyZWF0ZUVsZW1lbnROUyhzZWxmOjpYTUxEU0lHTlMsICR0aGlzLT5wcmVmaXguJG5hbWUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG5vZGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXRob2QKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDYW5vbmljYWxNZXRob2QoJG1ldGhvZCkKICAgIHsKICAgICAgICBzd2l0Y2ggKCRtZXRob2QpIHsKICAgICAgICAgICAgY2FzZSAnaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMS9SRUMteG1sLWMxNG4tMjAwMTAzMTUnOgogICAgICAgICAgICBjYXNlICdodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy14bWwtYzE0bi0yMDAxMDMxNSNXaXRoQ29tbWVudHMnOgogICAgICAgICAgICBjYXNlICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMnOgogICAgICAgICAgICBjYXNlICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biNXaXRoQ29tbWVudHMnOgogICAgICAgICAgICAgICAgJHRoaXMtPmNhbm9uaWNhbE1ldGhvZCA9ICRtZXRob2Q7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0ludmFsaWQgQ2Fub25pY2FsIE1ldGhvZCcpOwogICAgICAgIH0KICAgICAgICBpZiAoJHhwYXRoID0gJHRoaXMtPmdldFhQYXRoT2JqKCkpIHsKICAgICAgICAgICAgJHF1ZXJ5ID0gJy4vJy4kdGhpcy0+c2VhcmNocGZ4Lic6U2lnbmVkSW5mbyc7CiAgICAgICAgICAgICRub2Rlc2V0ID0gJHhwYXRoLT5xdWVyeSgkcXVlcnksICR0aGlzLT5zaWdOb2RlKTsKICAgICAgICAgICAgaWYgKCRzaW5mbyA9ICRub2Rlc2V0LT5pdGVtKDApKSB7CiAgICAgICAgICAgICAgICAkcXVlcnkgPSAnLi8nLiR0aGlzLT5zZWFyY2hwZnguJ0Nhbm9uaWNhbGl6YXRpb25NZXRob2QnOwogICAgICAgICAgICAgICAgJG5vZGVzZXQgPSAkeHBhdGgtPnF1ZXJ5KCRxdWVyeSwgJHNpbmZvKTsKICAgICAgICAgICAgICAgIGlmICghICgkY2Fub25Ob2RlID0gJG5vZGVzZXQtPml0ZW0oMCkpKSB7CiAgICAgICAgICAgICAgICAgICAgJGNhbm9uTm9kZSA9ICR0aGlzLT5jcmVhdGVOZXdTaWduTm9kZSgnQ2Fub25pY2FsaXphdGlvbk1ldGhvZCcpOwogICAgICAgICAgICAgICAgICAgICRzaW5mby0+aW5zZXJ0QmVmb3JlKCRjYW5vbk5vZGUsICRzaW5mby0+Zmlyc3RDaGlsZCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkY2Fub25Ob2RlLT5zZXRBdHRyaWJ1dGUoJ0FsZ29yaXRobScsICR0aGlzLT5jYW5vbmljYWxNZXRob2QpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIERPTU5vZGUgJG5vZGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNhbm9uaWNhbG1ldGhvZAogICAgICogQHBhcmFtIG51bGx8YXJyYXkgJGFyWFBhdGgKICAgICAqIEBwYXJhbSBudWxsfGFycmF5ICRwcmVmaXhMaXN0CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNhbm9uaWNhbGl6ZURhdGEoJG5vZGUsICRjYW5vbmljYWxtZXRob2QsICRhclhQYXRoPW51bGwsICRwcmVmaXhMaXN0PW51bGwpCiAgICB7CiAgICAgICAgJGV4Y2x1c2l2ZSA9IGZhbHNlOwogICAgICAgICR3aXRoQ29tbWVudHMgPSBmYWxzZTsKICAgICAgICBzd2l0Y2ggKCRjYW5vbmljYWxtZXRob2QpIHsKICAgICAgICAgICAgY2FzZSAnaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMS9SRUMteG1sLWMxNG4tMjAwMTAzMTUnOgogICAgICAgICAgICAgICAgJGV4Y2x1c2l2ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgJHdpdGhDb21tZW50cyA9IGZhbHNlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2h0dHA6Ly93d3cudzMub3JnL1RSLzIwMDEvUkVDLXhtbC1jMTRuLTIwMDEwMzE1I1dpdGhDb21tZW50cyc6CiAgICAgICAgICAgICAgICAkd2l0aENvbW1lbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMnOgogICAgICAgICAgICAgICAgJGV4Y2x1c2l2ZSA9IHRydWU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jV2l0aENvbW1lbnRzJzoKICAgICAgICAgICAgICAgICRleGNsdXNpdmUgPSB0cnVlOwogICAgICAgICAgICAgICAgJHdpdGhDb21tZW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIGlmIChpc19udWxsKCRhclhQYXRoKSAmJiAoJG5vZGUgaW5zdGFuY2VvZiBET01Ob2RlKSAmJiAoJG5vZGUtPm93bmVyRG9jdW1lbnQgIT09IG51bGwpICYmICRub2RlLT5pc1NhbWVOb2RlKCRub2RlLT5vd25lckRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQpKSB7CiAgICAgICAgICAgIC8qIENoZWNrIGZvciBhbnkgUEkgb3IgY29tbWVudHMgYXMgdGhleSB3b3VsZCBoYXZlIGJlZW4gZXhjbHVkZWQgKi8KICAgICAgICAgICAgJGVsZW1lbnQgPSAkbm9kZTsKICAgICAgICAgICAgd2hpbGUgKCRyZWZub2RlID0gJGVsZW1lbnQtPnByZXZpb3VzU2libGluZykgewogICAgICAgICAgICAgICAgaWYgKCRyZWZub2RlLT5ub2RlVHlwZSA9PSBYTUxfUElfTk9ERSB8fCAoKCRyZWZub2RlLT5ub2RlVHlwZSA9PSBYTUxfQ09NTUVOVF9OT0RFKSAmJiAkd2l0aENvbW1lbnRzKSkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGVsZW1lbnQgPSAkcmVmbm9kZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJHJlZm5vZGUgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgJG5vZGUgPSAkbm9kZS0+b3duZXJEb2N1bWVudDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHJldCA9ICRub2RlLT5DMTROKCRleGNsdXNpdmUsICR3aXRoQ29tbWVudHMsICRhclhQYXRoLCAkcHJlZml4TGlzdCk7CiAgICAgICAgaWYgKCRyZXQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkNhbm9uaWNhbGl6YXRpb24gZmFpbGVkIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmV0OyAKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbnVsbHxzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNhbm9uaWNhbGl6ZVNpZ25lZEluZm8oKQogICAgewoKICAgICAgICAkZG9jID0gJHRoaXMtPnNpZ05vZGUtPm93bmVyRG9jdW1lbnQ7CiAgICAgICAgJGNhbm9uaWNhbG1ldGhvZCA9IG51bGw7CiAgICAgICAgaWYgKCRkb2MpIHsKICAgICAgICAgICAgJHhwYXRoID0gJHRoaXMtPmdldFhQYXRoT2JqKCk7CiAgICAgICAgICAgICRxdWVyeSA9ICIuL3NlY2RzaWc6U2lnbmVkSW5mbyI7CiAgICAgICAgICAgICRub2Rlc2V0ID0gJHhwYXRoLT5xdWVyeSgkcXVlcnksICR0aGlzLT5zaWdOb2RlKTsKICAgICAgICAgICAgaWYgKCRub2Rlc2V0LT5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJJbnZhbGlkIHN0cnVjdHVyZSAtIFRvbyBtYW55IFNpZ25lZEluZm8gZWxlbWVudHMgZm91bmQiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJHNpZ25JbmZvTm9kZSA9ICRub2Rlc2V0LT5pdGVtKDApKSB7CiAgICAgICAgICAgICAgICAkcXVlcnkgPSAiLi9zZWNkc2lnOkNhbm9uaWNhbGl6YXRpb25NZXRob2QiOwogICAgICAgICAgICAgICAgJG5vZGVzZXQgPSAkeHBhdGgtPnF1ZXJ5KCRxdWVyeSwgJHNpZ25JbmZvTm9kZSk7CiAgICAgICAgICAgICAgICAkcHJlZml4TGlzdCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZiAoJGNhbm9uTm9kZSA9ICRub2Rlc2V0LT5pdGVtKDApKSB7CiAgICAgICAgICAgICAgICAgICAgJGNhbm9uaWNhbG1ldGhvZCA9ICRjYW5vbk5vZGUtPmdldEF0dHJpYnV0ZSgnQWxnb3JpdGhtJyk7CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGNhbm9uTm9kZS0+Y2hpbGROb2RlcyBhcyAkbm9kZSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbm9kZS0+bG9jYWxOYW1lID09ICdJbmNsdXNpdmVOYW1lc3BhY2VzJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwZnggPSAkbm9kZS0+Z2V0QXR0cmlidXRlKCdQcmVmaXhMaXN0JykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXJwZnggPSBhcnJheV9maWx0ZXIoZXhwbG9kZSgnICcsICRwZngpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQoJGFycGZ4KSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHByZWZpeExpc3QgPSBhcnJheV9tZXJnZSgkcHJlZml4TGlzdCA/ICRwcmVmaXhMaXN0IDogYXJyYXkoKSwgJGFycGZ4KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdGhpcy0+c2lnbmVkSW5mbyA9ICR0aGlzLT5jYW5vbmljYWxpemVEYXRhKCRzaWduSW5mb05vZGUsICRjYW5vbmljYWxtZXRob2QsIG51bGwsICRwcmVmaXhMaXN0KTsKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+c2lnbmVkSW5mbzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRpZ2VzdEFsZ29yaXRobQogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YQogICAgICogQHBhcmFtIGJvb2wgJGVuY29kZQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjYWxjdWxhdGVEaWdlc3QoJGRpZ2VzdEFsZ29yaXRobSwgJGRhdGEsICRlbmNvZGUgPSB0cnVlKQogICAgewogICAgICAgIHN3aXRjaCAoJGRpZ2VzdEFsZ29yaXRobSkgewogICAgICAgICAgICBjYXNlIHNlbGY6OlNIQTE6CiAgICAgICAgICAgICAgICAkYWxnID0gJ3NoYTEnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6U0hBMjU2OgogICAgICAgICAgICAgICAgJGFsZyA9ICdzaGEyNTYnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6U0hBMzg0OgogICAgICAgICAgICAgICAgJGFsZyA9ICdzaGEzODQnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6U0hBNTEyOgogICAgICAgICAgICAgICAgJGFsZyA9ICdzaGE1MTInOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6UklQRU1EMTYwOgogICAgICAgICAgICAgICAgJGFsZyA9ICdyaXBlbWQxNjAnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJDYW5ub3QgdmFsaWRhdGUgZGlnZXN0OiBVbnN1cHBvcnRlZCBBbGdvcml0aG0gPCRkaWdlc3RBbGdvcml0aG0+Iik7CiAgICAgICAgfQoKICAgICAgICAkZGlnZXN0ID0gaGFzaCgkYWxnLCAkZGF0YSwgdHJ1ZSk7CiAgICAgICAgaWYgKCRlbmNvZGUpIHsKICAgICAgICAgICAgJGRpZ2VzdCA9IGJhc2U2NF9lbmNvZGUoJGRpZ2VzdCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkZGlnZXN0OwoKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSAkcmVmTm9kZQogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YQogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZGF0ZURpZ2VzdCgkcmVmTm9kZSwgJGRhdGEpCiAgICB7CiAgICAgICAgJHhwYXRoID0gbmV3IERPTVhQYXRoKCRyZWZOb2RlLT5vd25lckRvY3VtZW50KTsKICAgICAgICAkeHBhdGgtPnJlZ2lzdGVyTmFtZXNwYWNlKCdzZWNkc2lnJywgc2VsZjo6WE1MRFNJR05TKTsKICAgICAgICAkcXVlcnkgPSAnc3RyaW5nKC4vc2VjZHNpZzpEaWdlc3RNZXRob2QvQEFsZ29yaXRobSknOwogICAgICAgICRkaWdlc3RBbGdvcml0aG0gPSAkeHBhdGgtPmV2YWx1YXRlKCRxdWVyeSwgJHJlZk5vZGUpOwogICAgICAgICRkaWdWYWx1ZSA9ICR0aGlzLT5jYWxjdWxhdGVEaWdlc3QoJGRpZ2VzdEFsZ29yaXRobSwgJGRhdGEsIGZhbHNlKTsKICAgICAgICAkcXVlcnkgPSAnc3RyaW5nKC4vc2VjZHNpZzpEaWdlc3RWYWx1ZSknOwogICAgICAgICRkaWdlc3RWYWx1ZSA9ICR4cGF0aC0+ZXZhbHVhdGUoJHF1ZXJ5LCAkcmVmTm9kZSk7CiAgICAgICAgcmV0dXJuICgkZGlnVmFsdWUgPT09IGJhc2U2NF9kZWNvZGUoJGRpZ2VzdFZhbHVlKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gJHJlZk5vZGUKICAgICAqIEBwYXJhbSBET01Ob2RlICRvYmpEYXRhCiAgICAgKiBAcGFyYW0gYm9vbCAkaW5jbHVkZUNvbW1lbnROb2RlcwogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByb2Nlc3NUcmFuc2Zvcm1zKCRyZWZOb2RlLCAkb2JqRGF0YSwgJGluY2x1ZGVDb21tZW50Tm9kZXMgPSB0cnVlKQogICAgewogICAgICAgICRkYXRhID0gJG9iakRhdGE7CiAgICAgICAgJHhwYXRoID0gbmV3IERPTVhQYXRoKCRyZWZOb2RlLT5vd25lckRvY3VtZW50KTsKICAgICAgICAkeHBhdGgtPnJlZ2lzdGVyTmFtZXNwYWNlKCdzZWNkc2lnJywgc2VsZjo6WE1MRFNJR05TKTsKICAgICAgICAkcXVlcnkgPSAnLi9zZWNkc2lnOlRyYW5zZm9ybXMvc2VjZHNpZzpUcmFuc2Zvcm0nOwogICAgICAgICRub2RlbGlzdCA9ICR4cGF0aC0+cXVlcnkoJHF1ZXJ5LCAkcmVmTm9kZSk7CiAgICAgICAgJGNhbm9uaWNhbE1ldGhvZCA9ICdodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy14bWwtYzE0bi0yMDAxMDMxNSc7CiAgICAgICAgJGFyWFBhdGggPSBudWxsOwogICAgICAgICRwcmVmaXhMaXN0ID0gbnVsbDsKICAgICAgICBmb3JlYWNoICgkbm9kZWxpc3QgQVMgJHRyYW5zZm9ybSkgewogICAgICAgICAgICAkYWxnb3JpdGhtID0gJHRyYW5zZm9ybS0+Z2V0QXR0cmlidXRlKCJBbGdvcml0aG0iKTsKICAgICAgICAgICAgc3dpdGNoICgkYWxnb3JpdGhtKSB7CiAgICAgICAgICAgICAgICBjYXNlICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMnOgogICAgICAgICAgICAgICAgY2FzZSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jV2l0aENvbW1lbnRzJzoKCiAgICAgICAgICAgICAgICAgICAgaWYgKCEkaW5jbHVkZUNvbW1lbnROb2RlcykgewogICAgICAgICAgICAgICAgICAgICAgICAvKiBXZSByZW1vdmUgY29tbWVudCBub2RlcyBieSBmb3JjaW5nIGl0IHRvIHVzZSBhIGNhbm9uaWNhbGl6YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICogd2l0aG91dCBjb21tZW50cy4KICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgICAgICRjYW5vbmljYWxNZXRob2QgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jJzsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkY2Fub25pY2FsTWV0aG9kID0gJGFsZ29yaXRobTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRub2RlID0gJHRyYW5zZm9ybS0+Zmlyc3RDaGlsZDsKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoJG5vZGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRub2RlLT5sb2NhbE5hbWUgPT0gJ0luY2x1c2l2ZU5hbWVzcGFjZXMnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBmeCA9ICRub2RlLT5nZXRBdHRyaWJ1dGUoJ1ByZWZpeExpc3QnKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhcnBmeCA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBmeGxpc3QgPSBleHBsb2RlKCIgIiwgJHBmeCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHBmeGxpc3QgQVMgJHBmeCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdmFsID0gdHJpbSgkcGZ4KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEgZW1wdHkoJHZhbCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhcnBmeFtdID0gJHZhbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQoJGFycGZ4KSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHByZWZpeExpc3QgPSAkYXJwZng7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJG5vZGUgPSAkbm9kZS0+bmV4dFNpYmxpbmc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2h0dHA6Ly93d3cudzMub3JnL1RSLzIwMDEvUkVDLXhtbC1jMTRuLTIwMDEwMzE1JzoKICAgICAgICAgICAgICAgIGNhc2UgJ2h0dHA6Ly93d3cudzMub3JnL1RSLzIwMDEvUkVDLXhtbC1jMTRuLTIwMDEwMzE1I1dpdGhDb21tZW50cyc6CiAgICAgICAgICAgICAgICAgICAgaWYgKCEkaW5jbHVkZUNvbW1lbnROb2RlcykgewogICAgICAgICAgICAgICAgICAgICAgICAvKiBXZSByZW1vdmUgY29tbWVudCBub2RlcyBieSBmb3JjaW5nIGl0IHRvIHVzZSBhIGNhbm9uaWNhbGl6YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICogd2l0aG91dCBjb21tZW50cy4KICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgICAgICRjYW5vbmljYWxNZXRob2QgPSAnaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMS9SRUMteG1sLWMxNG4tMjAwMTAzMTUnOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjYW5vbmljYWxNZXRob2QgPSAkYWxnb3JpdGhtOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdodHRwOi8vd3d3LnczLm9yZy9UUi8xOTk5L1JFQy14cGF0aC0xOTk5MTExNic6CiAgICAgICAgICAgICAgICAgICAgJG5vZGUgPSAkdHJhbnNmb3JtLT5maXJzdENoaWxkOwogICAgICAgICAgICAgICAgICAgIHdoaWxlICgkbm9kZSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG5vZGUtPmxvY2FsTmFtZSA9PSAnWFBhdGgnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXJYUGF0aCA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXJYUGF0aFsncXVlcnknXSA9ICcoLi8vLiB8IC4vL0AqIHwgLi8vbmFtZXNwYWNlOjoqKVsnLiRub2RlLT5ub2RlVmFsdWUuJ10nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFyWFBhdGhbJ25hbWVzcGFjZXMnXSA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbnNsaXN0ID0gJHhwYXRoLT5xdWVyeSgnLi9uYW1lc3BhY2U6OionLCAkbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkbnNsaXN0IEFTICRuc25vZGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG5zbm9kZS0+bG9jYWxOYW1lICE9ICJ4bWwiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhclhQYXRoWyduYW1lc3BhY2VzJ11bJG5zbm9kZS0+bG9jYWxOYW1lXSA9ICRuc25vZGUtPm5vZGVWYWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAkbm9kZSA9ICRub2RlLT5uZXh0U2libGluZzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCRkYXRhIGluc3RhbmNlb2YgRE9NTm9kZSkgewogICAgICAgICAgICAkZGF0YSA9ICR0aGlzLT5jYW5vbmljYWxpemVEYXRhKCRvYmpEYXRhLCAkY2Fub25pY2FsTWV0aG9kLCAkYXJYUGF0aCwgJHByZWZpeExpc3QpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGRhdGE7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gRE9NTm9kZSAkcmVmTm9kZQogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcm9jZXNzUmVmTm9kZSgkcmVmTm9kZSkKICAgIHsKICAgICAgICAkZGF0YU9iamVjdCA9IG51bGw7CgogICAgICAgIC8qCiAgICAgICAgICogRGVwZW5kaW5nIG9uIHRoZSBVUkksIHdlIG1heSBub3Qgd2FudCB0byBpbmNsdWRlIGNvbW1lbnRzIGluIHRoZSByZXN1bHQKICAgICAgICAgKiBTZWU6IGh0dHA6Ly93d3cudzMub3JnL1RSL3htbGRzaWctY29yZS8jc2VjLVJlZmVyZW5jZVByb2Nlc3NpbmdNb2RlbAogICAgICAgICAqLwogICAgICAgICRpbmNsdWRlQ29tbWVudE5vZGVzID0gdHJ1ZTsKCiAgICAgICAgaWYgKCR1cmkgPSAkcmVmTm9kZS0+Z2V0QXR0cmlidXRlKCJVUkkiKSkgewogICAgICAgICAgICAkYXJVcmwgPSBwYXJzZV91cmwoJHVyaSk7CiAgICAgICAgICAgIGlmIChlbXB0eSgkYXJVcmxbJ3BhdGgnXSkpIHsKICAgICAgICAgICAgICAgIGlmICgkaWRlbnRpZmllciA9ICRhclVybFsnZnJhZ21lbnQnXSkgewoKICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIHJlZmVyZW5jZSBpZGVudGlmaWVzIGEgbm9kZSB3aXRoIHRoZSBnaXZlbiBpZCBieSB1c2luZwogICAgICAgICAgICAgICAgICAgICAqIGEgVVJJIG9uIHRoZSBmb3JtICIjaWRlbnRpZmllciIuIFRoaXMgc2hvdWxkIG5vdCBpbmNsdWRlIGNvbW1lbnRzLgogICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICRpbmNsdWRlQ29tbWVudE5vZGVzID0gZmFsc2U7CgogICAgICAgICAgICAgICAgICAgICR4UGF0aCA9IG5ldyBET01YUGF0aCgkcmVmTm9kZS0+b3duZXJEb2N1bWVudCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5pZE5TICYmIGlzX2FycmF5KCR0aGlzLT5pZE5TKSkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+aWROUyBhcyAkbnNwZiA9PiAkbnMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR4UGF0aC0+cmVnaXN0ZXJOYW1lc3BhY2UoJG5zcGYsICRucyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJGlEbGlzdCA9ICdASWQ9IicuWFBhdGg6OmZpbHRlckF0dHJWYWx1ZSgkaWRlbnRpZmllciwgWFBhdGg6OkRPVUJMRV9RVU9URSkuJyInOwogICAgICAgICAgICAgICAgICAgIGlmIChpc19hcnJheSgkdGhpcy0+aWRLZXlzKSkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+aWRLZXlzIGFzICRpZEtleSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlEbGlzdCAuPSAiIG9yIEAiLlhQYXRoOjpmaWx0ZXJBdHRyTmFtZSgkaWRLZXkpLic9IicuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFBhdGg6OmZpbHRlckF0dHJWYWx1ZSgkaWRlbnRpZmllciwgWFBhdGg6OkRPVUJMRV9RVU9URSkuJyInOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRxdWVyeSA9ICcvLypbJy4kaURsaXN0LiddJzsKICAgICAgICAgICAgICAgICAgICAkZGF0YU9iamVjdCA9ICR4UGF0aC0+cXVlcnkoJHF1ZXJ5KS0+aXRlbSgwKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJGRhdGFPYmplY3QgPSAkcmVmTm9kZS0+b3duZXJEb2N1bWVudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8qIFRoaXMgcmVmZXJlbmNlIGlkZW50aWZpZXMgdGhlIHJvb3Qgbm9kZSB3aXRoIGFuIGVtcHR5IFVSSS4gVGhpcyBzaG91bGQKICAgICAgICAgICAgICogbm90IGluY2x1ZGUgY29tbWVudHMuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICAkaW5jbHVkZUNvbW1lbnROb2RlcyA9IGZhbHNlOwoKICAgICAgICAgICAgJGRhdGFPYmplY3QgPSAkcmVmTm9kZS0+b3duZXJEb2N1bWVudDsKICAgICAgICB9CiAgICAgICAgJGRhdGEgPSAkdGhpcy0+cHJvY2Vzc1RyYW5zZm9ybXMoJHJlZk5vZGUsICRkYXRhT2JqZWN0LCAkaW5jbHVkZUNvbW1lbnROb2Rlcyk7CiAgICAgICAgaWYgKCEkdGhpcy0+dmFsaWRhdGVEaWdlc3QoJHJlZk5vZGUsICRkYXRhKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGRhdGFPYmplY3QgaW5zdGFuY2VvZiBET01Ob2RlKSB7CiAgICAgICAgICAgIC8qIEFkZCB0aGlzIG5vZGUgdG8gdGhlIGxpc3Qgb2YgdmFsaWRhdGVkIG5vZGVzLiAqLwogICAgICAgICAgICBpZiAoISBlbXB0eSgkaWRlbnRpZmllcikpIHsKICAgICAgICAgICAgICAgICR0aGlzLT52YWxpZGF0ZWROb2Rlc1skaWRlbnRpZmllcl0gPSAkZGF0YU9iamVjdDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0aGlzLT52YWxpZGF0ZWROb2Rlc1tdID0gJGRhdGFPYmplY3Q7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIERPTU5vZGUgJHJlZk5vZGUKICAgICAqIEByZXR1cm4gbnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVmTm9kZUlEKCRyZWZOb2RlKQogICAgewogICAgICAgIGlmICgkdXJpID0gJHJlZk5vZGUtPmdldEF0dHJpYnV0ZSgiVVJJIikpIHsKICAgICAgICAgICAgJGFyVXJsID0gcGFyc2VfdXJsKCR1cmkpOwogICAgICAgICAgICBpZiAoZW1wdHkoJGFyVXJsWydwYXRoJ10pKSB7CiAgICAgICAgICAgICAgICBpZiAoJGlkZW50aWZpZXIgPSAkYXJVcmxbJ2ZyYWdtZW50J10pIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGlkZW50aWZpZXI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVmSURzKCkKICAgIHsKICAgICAgICAkcmVmaWRzID0gYXJyYXkoKTsKCiAgICAgICAgJHhwYXRoID0gJHRoaXMtPmdldFhQYXRoT2JqKCk7CiAgICAgICAgJHF1ZXJ5ID0gIi4vc2VjZHNpZzpTaWduZWRJbmZvWzFdL3NlY2RzaWc6UmVmZXJlbmNlIjsKICAgICAgICAkbm9kZXNldCA9ICR4cGF0aC0+cXVlcnkoJHF1ZXJ5LCAkdGhpcy0+c2lnTm9kZSk7CiAgICAgICAgaWYgKCRub2Rlc2V0LT5sZW5ndGggPT0gMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJSZWZlcmVuY2Ugbm9kZXMgbm90IGZvdW5kIik7CiAgICAgICAgfQogICAgICAgIGZvcmVhY2ggKCRub2Rlc2V0IEFTICRyZWZOb2RlKSB7CiAgICAgICAgICAgICRyZWZpZHNbXSA9ICR0aGlzLT5nZXRSZWZOb2RlSUQoJHJlZk5vZGUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHJlZmlkczsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHZhbGlkYXRlUmVmZXJlbmNlKCkKICAgIHsKICAgICAgICAkZG9jRWxlbSA9ICR0aGlzLT5zaWdOb2RlLT5vd25lckRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQ7CiAgICAgICAgaWYgKCEgJGRvY0VsZW0tPmlzU2FtZU5vZGUoJHRoaXMtPnNpZ05vZGUpKSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+c2lnTm9kZS0+cGFyZW50Tm9kZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+c2lnTm9kZS0+cGFyZW50Tm9kZS0+cmVtb3ZlQ2hpbGQoJHRoaXMtPnNpZ05vZGUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICR4cGF0aCA9ICR0aGlzLT5nZXRYUGF0aE9iaigpOwogICAgICAgICRxdWVyeSA9ICIuL3NlY2RzaWc6U2lnbmVkSW5mb1sxXS9zZWNkc2lnOlJlZmVyZW5jZSI7CiAgICAgICAgJG5vZGVzZXQgPSAkeHBhdGgtPnF1ZXJ5KCRxdWVyeSwgJHRoaXMtPnNpZ05vZGUpOwogICAgICAgIGlmICgkbm9kZXNldC0+bGVuZ3RoID09IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiUmVmZXJlbmNlIG5vZGVzIG5vdCBmb3VuZCIpOwogICAgICAgIH0KCiAgICAgICAgLyogSW5pdGlhbGl6ZS9yZXNldCB0aGUgbGlzdCBvZiB2YWxpZGF0ZWQgbm9kZXMuICovCiAgICAgICAgJHRoaXMtPnZhbGlkYXRlZE5vZGVzID0gYXJyYXkoKTsKCiAgICAgICAgZm9yZWFjaCAoJG5vZGVzZXQgQVMgJHJlZk5vZGUpIHsKICAgICAgICAgICAgaWYgKCEgJHRoaXMtPnByb2Nlc3NSZWZOb2RlKCRyZWZOb2RlKSkgewogICAgICAgICAgICAgICAgLyogQ2xlYXIgdGhlIGxpc3Qgb2YgdmFsaWRhdGVkIG5vZGVzLiAqLwogICAgICAgICAgICAgICAgJHRoaXMtPnZhbGlkYXRlZE5vZGVzID0gbnVsbDsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlJlZmVyZW5jZSB2YWxpZGF0aW9uIGZhaWxlZCIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIERPTU5vZGUgJHNpbmZvTm9kZQogICAgICogQHBhcmFtIERPTURvY3VtZW50ICRub2RlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhbGdvcml0aG0KICAgICAqIEBwYXJhbSBudWxsfGFycmF5ICRhclRyYW5zZm9ybXMKICAgICAqIEBwYXJhbSBudWxsfGFycmF5ICRvcHRpb25zCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkUmVmSW50ZXJuYWwoJHNpbmZvTm9kZSwgJG5vZGUsICRhbGdvcml0aG0sICRhclRyYW5zZm9ybXM9bnVsbCwgJG9wdGlvbnM9bnVsbCkKICAgIHsKICAgICAgICAkcHJlZml4ID0gbnVsbDsKICAgICAgICAkcHJlZml4X25zID0gbnVsbDsKICAgICAgICAkaWRfbmFtZSA9ICdJZCc7CiAgICAgICAgJG92ZXJ3cml0ZV9pZCAgPSB0cnVlOwogICAgICAgICRmb3JjZV91cmkgPSBmYWxzZTsKCiAgICAgICAgaWYgKGlzX2FycmF5KCRvcHRpb25zKSkgewogICAgICAgICAgICAkcHJlZml4ID0gZW1wdHkoJG9wdGlvbnNbJ3ByZWZpeCddKSA/IG51bGwgOiAkb3B0aW9uc1sncHJlZml4J107CiAgICAgICAgICAgICRwcmVmaXhfbnMgPSBlbXB0eSgkb3B0aW9uc1sncHJlZml4X25zJ10pID8gbnVsbCA6ICRvcHRpb25zWydwcmVmaXhfbnMnXTsKICAgICAgICAgICAgJGlkX25hbWUgPSBlbXB0eSgkb3B0aW9uc1snaWRfbmFtZSddKSA/ICdJZCcgOiAkb3B0aW9uc1snaWRfbmFtZSddOwogICAgICAgICAgICAkb3ZlcndyaXRlX2lkID0gIWlzc2V0KCRvcHRpb25zWydvdmVyd3JpdGUnXSkgPyB0cnVlIDogKGJvb2wpICRvcHRpb25zWydvdmVyd3JpdGUnXTsKICAgICAgICAgICAgJGZvcmNlX3VyaSA9ICFpc3NldCgkb3B0aW9uc1snZm9yY2VfdXJpJ10pID8gZmFsc2UgOiAoYm9vbCkgJG9wdGlvbnNbJ2ZvcmNlX3VyaSddOwogICAgICAgIH0KCiAgICAgICAgJGF0dG5hbWUgPSAkaWRfbmFtZTsKICAgICAgICBpZiAoISBlbXB0eSgkcHJlZml4KSkgewogICAgICAgICAgICAkYXR0bmFtZSA9ICRwcmVmaXguJzonLiRhdHRuYW1lOwogICAgICAgIH0KCiAgICAgICAgJHJlZk5vZGUgPSAkdGhpcy0+Y3JlYXRlTmV3U2lnbk5vZGUoJ1JlZmVyZW5jZScpOwogICAgICAgICRzaW5mb05vZGUtPmFwcGVuZENoaWxkKCRyZWZOb2RlKTsKCiAgICAgICAgaWYgKCEgJG5vZGUgaW5zdGFuY2VvZiBET01Eb2N1bWVudCkgewogICAgICAgICAgICAkdXJpID0gbnVsbDsKICAgICAgICAgICAgaWYgKCEgJG92ZXJ3cml0ZV9pZCkgewogICAgICAgICAgICAgICAgJHVyaSA9ICRwcmVmaXhfbnMgPyAkbm9kZS0+Z2V0QXR0cmlidXRlTlMoJHByZWZpeF9ucywgJGlkX25hbWUpIDogJG5vZGUtPmdldEF0dHJpYnV0ZSgkaWRfbmFtZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGVtcHR5KCR1cmkpKSB7CiAgICAgICAgICAgICAgICAkdXJpID0gc2VsZjo6Z2VuZXJhdGVHVUlEKCk7CiAgICAgICAgICAgICAgICAkbm9kZS0+c2V0QXR0cmlidXRlTlMoJHByZWZpeF9ucywgJGF0dG5hbWUsICR1cmkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZWZOb2RlLT5zZXRBdHRyaWJ1dGUoIlVSSSIsICcjJy4kdXJpKTsKICAgICAgICB9IGVsc2VpZiAoJGZvcmNlX3VyaSkgewogICAgICAgICAgICAkcmVmTm9kZS0+c2V0QXR0cmlidXRlKCJVUkkiLCAnJyk7CiAgICAgICAgfQoKICAgICAgICAkdHJhbnNOb2RlcyA9ICR0aGlzLT5jcmVhdGVOZXdTaWduTm9kZSgnVHJhbnNmb3JtcycpOwogICAgICAgICRyZWZOb2RlLT5hcHBlbmRDaGlsZCgkdHJhbnNOb2Rlcyk7CgogICAgICAgIGlmIChpc19hcnJheSgkYXJUcmFuc2Zvcm1zKSkgewogICAgICAgICAgICBmb3JlYWNoICgkYXJUcmFuc2Zvcm1zIEFTICR0cmFuc2Zvcm0pIHsKICAgICAgICAgICAgICAgICR0cmFuc05vZGUgPSAkdGhpcy0+Y3JlYXRlTmV3U2lnbk5vZGUoJ1RyYW5zZm9ybScpOwogICAgICAgICAgICAgICAgJHRyYW5zTm9kZXMtPmFwcGVuZENoaWxkKCR0cmFuc05vZGUpOwogICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCR0cmFuc2Zvcm0pICYmCiAgICAgICAgICAgICAgICAgICAgKCEgZW1wdHkoJHRyYW5zZm9ybVsnaHR0cDovL3d3dy53My5vcmcvVFIvMTk5OS9SRUMteHBhdGgtMTk5OTExMTYnXSkpICYmCiAgICAgICAgICAgICAgICAgICAgKCEgZW1wdHkoJHRyYW5zZm9ybVsnaHR0cDovL3d3dy53My5vcmcvVFIvMTk5OS9SRUMteHBhdGgtMTk5OTExMTYnXVsncXVlcnknXSkpKSB7CiAgICAgICAgICAgICAgICAgICAgJHRyYW5zTm9kZS0+c2V0QXR0cmlidXRlKCdBbGdvcml0aG0nLCAnaHR0cDovL3d3dy53My5vcmcvVFIvMTk5OS9SRUMteHBhdGgtMTk5OTExMTYnKTsKICAgICAgICAgICAgICAgICAgICAkWFBhdGhOb2RlID0gJHRoaXMtPmNyZWF0ZU5ld1NpZ25Ob2RlKCdYUGF0aCcsICR0cmFuc2Zvcm1bJ2h0dHA6Ly93d3cudzMub3JnL1RSLzE5OTkvUkVDLXhwYXRoLTE5OTkxMTE2J11bJ3F1ZXJ5J10pOwogICAgICAgICAgICAgICAgICAgICR0cmFuc05vZGUtPmFwcGVuZENoaWxkKCRYUGF0aE5vZGUpOwogICAgICAgICAgICAgICAgICAgIGlmICghIGVtcHR5KCR0cmFuc2Zvcm1bJ2h0dHA6Ly93d3cudzMub3JnL1RSLzE5OTkvUkVDLXhwYXRoLTE5OTkxMTE2J11bJ25hbWVzcGFjZXMnXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHRyYW5zZm9ybVsnaHR0cDovL3d3dy53My5vcmcvVFIvMTk5OS9SRUMteHBhdGgtMTk5OTExMTYnXVsnbmFtZXNwYWNlcyddIEFTICRwcmVmaXggPT4gJG5hbWVzcGFjZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFhQYXRoTm9kZS0+c2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIiwgInhtbG5zOiRwcmVmaXgiLCAkbmFtZXNwYWNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHRyYW5zTm9kZS0+c2V0QXR0cmlidXRlKCdBbGdvcml0aG0nLCAkdHJhbnNmb3JtKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZWlmICghIGVtcHR5KCR0aGlzLT5jYW5vbmljYWxNZXRob2QpKSB7CiAgICAgICAgICAgICR0cmFuc05vZGUgPSAkdGhpcy0+Y3JlYXRlTmV3U2lnbk5vZGUoJ1RyYW5zZm9ybScpOwogICAgICAgICAgICAkdHJhbnNOb2Rlcy0+YXBwZW5kQ2hpbGQoJHRyYW5zTm9kZSk7CiAgICAgICAgICAgICR0cmFuc05vZGUtPnNldEF0dHJpYnV0ZSgnQWxnb3JpdGhtJywgJHRoaXMtPmNhbm9uaWNhbE1ldGhvZCk7CiAgICAgICAgfQoKICAgICAgICAkY2Fub25pY2FsRGF0YSA9ICR0aGlzLT5wcm9jZXNzVHJhbnNmb3JtcygkcmVmTm9kZSwgJG5vZGUpOwogICAgICAgICRkaWdWYWx1ZSA9ICR0aGlzLT5jYWxjdWxhdGVEaWdlc3QoJGFsZ29yaXRobSwgJGNhbm9uaWNhbERhdGEpOwoKICAgICAgICAkZGlnZXN0TWV0aG9kID0gJHRoaXMtPmNyZWF0ZU5ld1NpZ25Ob2RlKCdEaWdlc3RNZXRob2QnKTsKICAgICAgICAkcmVmTm9kZS0+YXBwZW5kQ2hpbGQoJGRpZ2VzdE1ldGhvZCk7CiAgICAgICAgJGRpZ2VzdE1ldGhvZC0+c2V0QXR0cmlidXRlKCdBbGdvcml0aG0nLCAkYWxnb3JpdGhtKTsKCiAgICAgICAgJGRpZ2VzdFZhbHVlID0gJHRoaXMtPmNyZWF0ZU5ld1NpZ25Ob2RlKCdEaWdlc3RWYWx1ZScsICRkaWdWYWx1ZSk7CiAgICAgICAgJHJlZk5vZGUtPmFwcGVuZENoaWxkKCRkaWdlc3RWYWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gRE9NRG9jdW1lbnQgJG5vZGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFsZ29yaXRobQogICAgICogQHBhcmFtIG51bGx8YXJyYXkgJGFyVHJhbnNmb3JtcwogICAgICogQHBhcmFtIG51bGx8YXJyYXkgJG9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZFJlZmVyZW5jZSgkbm9kZSwgJGFsZ29yaXRobSwgJGFyVHJhbnNmb3Jtcz1udWxsLCAkb3B0aW9ucz1udWxsKQogICAgewogICAgICAgIGlmICgkeHBhdGggPSAkdGhpcy0+Z2V0WFBhdGhPYmooKSkgewogICAgICAgICAgICAkcXVlcnkgPSAiLi9zZWNkc2lnOlNpZ25lZEluZm8iOwogICAgICAgICAgICAkbm9kZXNldCA9ICR4cGF0aC0+cXVlcnkoJHF1ZXJ5LCAkdGhpcy0+c2lnTm9kZSk7CiAgICAgICAgICAgIGlmICgkc0luZm8gPSAkbm9kZXNldC0+aXRlbSgwKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPmFkZFJlZkludGVybmFsKCRzSW5mbywgJG5vZGUsICRhbGdvcml0aG0sICRhclRyYW5zZm9ybXMsICRvcHRpb25zKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheSAkYXJOb2RlcwogICAgICogQHBhcmFtIHN0cmluZyAkYWxnb3JpdGhtCiAgICAgKiBAcGFyYW0gbnVsbHxhcnJheSAkYXJUcmFuc2Zvcm1zCiAgICAgKiBAcGFyYW0gbnVsbHxhcnJheSAkb3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkUmVmZXJlbmNlTGlzdCgkYXJOb2RlcywgJGFsZ29yaXRobSwgJGFyVHJhbnNmb3Jtcz1udWxsLCAkb3B0aW9ucz1udWxsKQogICAgewogICAgICAgIGlmICgkeHBhdGggPSAkdGhpcy0+Z2V0WFBhdGhPYmooKSkgewogICAgICAgICAgICAkcXVlcnkgPSAiLi9zZWNkc2lnOlNpZ25lZEluZm8iOwogICAgICAgICAgICAkbm9kZXNldCA9ICR4cGF0aC0+cXVlcnkoJHF1ZXJ5LCAkdGhpcy0+c2lnTm9kZSk7CiAgICAgICAgICAgIGlmICgkc0luZm8gPSAkbm9kZXNldC0+aXRlbSgwKSkgewogICAgICAgICAgICAgICAgZm9yZWFjaCAoJGFyTm9kZXMgQVMgJG5vZGUpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+YWRkUmVmSW50ZXJuYWwoJHNJbmZvLCAkbm9kZSwgJGFsZ29yaXRobSwgJGFyVHJhbnNmb3JtcywgJG9wdGlvbnMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIERPTUVsZW1lbnR8c3RyaW5nICRkYXRhCiAgICAgKiBAcGFyYW0gbnVsbHxzdHJpbmcgJG1pbWV0eXBlCiAgICAgKiBAcGFyYW0gbnVsbHxzdHJpbmcgJGVuY29kaW5nCiAgICAgKiBAcmV0dXJuIERPTUVsZW1lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZE9iamVjdCgkZGF0YSwgJG1pbWV0eXBlPW51bGwsICRlbmNvZGluZz1udWxsKQogICAgewogICAgICAgICRvYmpOb2RlID0gJHRoaXMtPmNyZWF0ZU5ld1NpZ25Ob2RlKCdPYmplY3QnKTsKICAgICAgICAkdGhpcy0+c2lnTm9kZS0+YXBwZW5kQ2hpbGQoJG9iak5vZGUpOwogICAgICAgIGlmICghIGVtcHR5KCRtaW1ldHlwZSkpIHsKICAgICAgICAgICAgJG9iak5vZGUtPnNldEF0dHJpYnV0ZSgnTWltZVR5cGUnLCAkbWltZXR5cGUpOwogICAgICAgIH0KICAgICAgICBpZiAoISBlbXB0eSgkZW5jb2RpbmcpKSB7CiAgICAgICAgICAgICRvYmpOb2RlLT5zZXRBdHRyaWJ1dGUoJ0VuY29kaW5nJywgJGVuY29kaW5nKTsKICAgICAgICB9CgogICAgICAgIGlmICgkZGF0YSBpbnN0YW5jZW9mIERPTUVsZW1lbnQpIHsKICAgICAgICAgICAgJG5ld0RhdGEgPSAkdGhpcy0+c2lnTm9kZS0+b3duZXJEb2N1bWVudC0+aW1wb3J0Tm9kZSgkZGF0YSwgdHJ1ZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG5ld0RhdGEgPSAkdGhpcy0+c2lnTm9kZS0+b3duZXJEb2N1bWVudC0+Y3JlYXRlVGV4dE5vZGUoJGRhdGEpOwogICAgICAgIH0KICAgICAgICAkb2JqTm9kZS0+YXBwZW5kQ2hpbGQoJG5ld0RhdGEpOwoKICAgICAgICByZXR1cm4gJG9iak5vZGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbnVsbHxET01Ob2RlICRub2RlCiAgICAgKiBAcmV0dXJuIG51bGx8WE1MU2VjdXJpdHlLZXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvY2F0ZUtleSgkbm9kZT1udWxsKQogICAgewogICAgICAgIGlmIChlbXB0eSgkbm9kZSkpIHsKICAgICAgICAgICAgJG5vZGUgPSAkdGhpcy0+c2lnTm9kZTsKICAgICAgICB9CiAgICAgICAgaWYgKCEgJG5vZGUgaW5zdGFuY2VvZiBET01Ob2RlKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAoJGRvYyA9ICRub2RlLT5vd25lckRvY3VtZW50KSB7CiAgICAgICAgICAgICR4cGF0aCA9IG5ldyBET01YUGF0aCgkZG9jKTsKICAgICAgICAgICAgJHhwYXRoLT5yZWdpc3Rlck5hbWVzcGFjZSgnc2VjZHNpZycsIHNlbGY6OlhNTERTSUdOUyk7CiAgICAgICAgICAgICRxdWVyeSA9ICJzdHJpbmcoLi9zZWNkc2lnOlNpZ25lZEluZm8vc2VjZHNpZzpTaWduYXR1cmVNZXRob2QvQEFsZ29yaXRobSkiOwogICAgICAgICAgICAkYWxnb3JpdGhtID0gJHhwYXRoLT5ldmFsdWF0ZSgkcXVlcnksICRub2RlKTsKICAgICAgICAgICAgaWYgKCRhbGdvcml0aG0pIHsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgJG9iaktleSA9IG5ldyBYTUxTZWN1cml0eUtleSgkYWxnb3JpdGhtLCBhcnJheSgndHlwZScgPT4gJ3B1YmxpYycpKTsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuICRvYmpLZXk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zOgogICAgICogIEJvb2wgd2hlbiB2ZXJpZnlpbmcgSE1BQ19TSEExOwogICAgICogIEludCBvdGhlcndpc2UsIHdpdGggZm9sbG93aW5nIG1lYW5pbmdzOgogICAgICogICAgMSBvbiBzdWNjZXNmdWwgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiwKICAgICAqICAgIDAgd2hlbiBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZCwKICAgICAqICAgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHByb2Nlc3NpbmcuCiAgICAgKgogICAgICogTk9URTogYmUgdmVyeSBjYXJlZnVsIHdoZW4gY2hlY2tpbmcgdGhlIGludCByZXR1cm4gdmFsdWUsIGJlY2F1c2UgaW4KICAgICAqIFBIUCwgLTEgd2lsbCBiZSBjYXN0IHRvIFRydWUgd2hlbiBpbiBib29sZWFuIGNvbnRleHQuIEFsd2F5cyBjaGVjayB0aGUKICAgICAqIHJldHVybiB2YWx1ZSBpbiBhIHN0cmljdGx5IHR5cGVkIHdheSwgZS5nLiAiJG9iai0+dmVyaWZ5KC4uLikgPT09IDEiLgogICAgICoKICAgICAqIEBwYXJhbSBYTUxTZWN1cml0eUtleSAkb2JqS2V5CiAgICAgKiBAcmV0dXJuIGJvb2x8aW50CiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmVyaWZ5KCRvYmpLZXkpCiAgICB7CiAgICAgICAgJGRvYyA9ICR0aGlzLT5zaWdOb2RlLT5vd25lckRvY3VtZW50OwogICAgICAgICR4cGF0aCA9IG5ldyBET01YUGF0aCgkZG9jKTsKICAgICAgICAkeHBhdGgtPnJlZ2lzdGVyTmFtZXNwYWNlKCdzZWNkc2lnJywgc2VsZjo6WE1MRFNJR05TKTsKICAgICAgICAkcXVlcnkgPSAic3RyaW5nKC4vc2VjZHNpZzpTaWduYXR1cmVWYWx1ZSkiOwogICAgICAgICRzaWdWYWx1ZSA9ICR4cGF0aC0+ZXZhbHVhdGUoJHF1ZXJ5LCAkdGhpcy0+c2lnTm9kZSk7CiAgICAgICAgaWYgKGVtcHR5KCRzaWdWYWx1ZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVW5hYmxlIHRvIGxvY2F0ZSBTaWduYXR1cmVWYWx1ZSIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG9iaktleS0+dmVyaWZ5U2lnbmF0dXJlKCR0aGlzLT5zaWduZWRJbmZvLCBiYXNlNjRfZGVjb2RlKCRzaWdWYWx1ZSkpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIFhNTFNlY3VyaXR5S2V5ICRvYmpLZXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICAgICAqIEByZXR1cm4gbWl4ZWR8c3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaWduRGF0YSgkb2JqS2V5LCAkZGF0YSkKICAgIHsKICAgICAgICByZXR1cm4gJG9iaktleS0+c2lnbkRhdGEoJGRhdGEpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIFhNTFNlY3VyaXR5S2V5ICRvYmpLZXkKICAgICAqIEBwYXJhbSBudWxsfERPTU5vZGUgJGFwcGVuZFRvTm9kZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2lnbigkb2JqS2V5LCAkYXBwZW5kVG9Ob2RlID0gbnVsbCkKICAgIHsKICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgcGFyZW50IG5vZGUgYXBwZW5kIGl0IG5vdyBzbyBDMTROIHByb3Blcmx5IHdvcmtzCiAgICAgICAgaWYgKCRhcHBlbmRUb05vZGUgIT0gbnVsbCkgewogICAgICAgICAgICAkdGhpcy0+cmVzZXRYUGF0aE9iaigpOwogICAgICAgICAgICAkdGhpcy0+YXBwZW5kU2lnbmF0dXJlKCRhcHBlbmRUb05vZGUpOwogICAgICAgICAgICAkdGhpcy0+c2lnTm9kZSA9ICRhcHBlbmRUb05vZGUtPmxhc3RDaGlsZDsKICAgICAgICB9CiAgICAgICAgaWYgKCR4cGF0aCA9ICR0aGlzLT5nZXRYUGF0aE9iaigpKSB7CiAgICAgICAgICAgICRxdWVyeSA9ICIuL3NlY2RzaWc6U2lnbmVkSW5mbyI7CiAgICAgICAgICAgICRub2Rlc2V0ID0gJHhwYXRoLT5xdWVyeSgkcXVlcnksICR0aGlzLT5zaWdOb2RlKTsKICAgICAgICAgICAgaWYgKCRzSW5mbyA9ICRub2Rlc2V0LT5pdGVtKDApKSB7CiAgICAgICAgICAgICAgICAkcXVlcnkgPSAiLi9zZWNkc2lnOlNpZ25hdHVyZU1ldGhvZCI7CiAgICAgICAgICAgICAgICAkbm9kZXNldCA9ICR4cGF0aC0+cXVlcnkoJHF1ZXJ5LCAkc0luZm8pOwogICAgICAgICAgICAgICAgJHNNZXRob2QgPSAkbm9kZXNldC0+aXRlbSgwKTsKICAgICAgICAgICAgICAgICRzTWV0aG9kLT5zZXRBdHRyaWJ1dGUoJ0FsZ29yaXRobScsICRvYmpLZXktPnR5cGUpOwogICAgICAgICAgICAgICAgJGRhdGEgPSAkdGhpcy0+Y2Fub25pY2FsaXplRGF0YSgkc0luZm8sICR0aGlzLT5jYW5vbmljYWxNZXRob2QpOwogICAgICAgICAgICAgICAgJHNpZ1ZhbHVlID0gYmFzZTY0X2VuY29kZSgkdGhpcy0+c2lnbkRhdGEoJG9iaktleSwgJGRhdGEpKTsKICAgICAgICAgICAgICAgICRzaWdWYWx1ZU5vZGUgPSAkdGhpcy0+Y3JlYXRlTmV3U2lnbk5vZGUoJ1NpZ25hdHVyZVZhbHVlJywgJHNpZ1ZhbHVlKTsKICAgICAgICAgICAgICAgIGlmICgkaW5mb1NpYmxpbmcgPSAkc0luZm8tPm5leHRTaWJsaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgJGluZm9TaWJsaW5nLT5wYXJlbnROb2RlLT5pbnNlcnRCZWZvcmUoJHNpZ1ZhbHVlTm9kZSwgJGluZm9TaWJsaW5nKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnNpZ05vZGUtPmFwcGVuZENoaWxkKCRzaWdWYWx1ZU5vZGUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhcHBlbmRDZXJ0KCkKICAgIHsKCiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gWE1MU2VjdXJpdHlLZXkgJG9iaktleQogICAgICogQHBhcmFtIG51bGx8RE9NTm9kZSAkcGFyZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhcHBlbmRLZXkoJG9iaktleSwgJHBhcmVudD1udWxsKQogICAgewogICAgICAgICRvYmpLZXktPnNlcmlhbGl6ZUtleSgkcGFyZW50KTsKICAgIH0KCgogICAgLyoqCiAgICAgKiBUaGlzIGZ1bmN0aW9uIGluc2VydHMgdGhlIHNpZ25hdHVyZSBlbGVtZW50LgogICAgICoKICAgICAqIFRoZSBzaWduYXR1cmUgZWxlbWVudCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBlbGVtZW50LCB1bmxlc3MgJGJlZm9yZU5vZGUgaXMgc3BlY2lmaWVkLiBJZiAkYmVmb3JlTm9kZQogICAgICogaXMgc3BlY2lmaWVkLCB0aGUgc2lnbmF0dXJlIGVsZW1lbnQgd2lsbCBiZSBpbnNlcnRlZCBhcyB0aGUgbGFzdCBlbGVtZW50IGJlZm9yZSAkYmVmb3JlTm9kZS4KICAgICAqCiAgICAgKiBAcGFyYW0gRE9NTm9kZSAkbm9kZSAgICAgICBUaGUgbm9kZSB0aGUgc2lnbmF0dXJlIGVsZW1lbnQgc2hvdWxkIGJlIGluc2VydGVkIGludG8uCiAgICAgKiBAcGFyYW0gRE9NTm9kZSAkYmVmb3JlTm9kZSBUaGUgbm9kZSB0aGUgc2lnbmF0dXJlIGVsZW1lbnQgc2hvdWxkIGJlIGxvY2F0ZWQgYmVmb3JlLgogICAgICoKICAgICAqIEByZXR1cm4gRE9NTm9kZSBUaGUgc2lnbmF0dXJlIGVsZW1lbnQgbm9kZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5zZXJ0U2lnbmF0dXJlKCRub2RlLCAkYmVmb3JlTm9kZSA9IG51bGwpCiAgICB7CgogICAgICAgICRkb2N1bWVudCA9ICRub2RlLT5vd25lckRvY3VtZW50OwogICAgICAgICRzaWduYXR1cmVFbGVtZW50ID0gJGRvY3VtZW50LT5pbXBvcnROb2RlKCR0aGlzLT5zaWdOb2RlLCB0cnVlKTsKCiAgICAgICAgaWYgKCRiZWZvcmVOb2RlID09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuICRub2RlLT5pbnNlcnRCZWZvcmUoJHNpZ25hdHVyZUVsZW1lbnQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAkbm9kZS0+aW5zZXJ0QmVmb3JlKCRzaWduYXR1cmVFbGVtZW50LCAkYmVmb3JlTm9kZSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIERPTU5vZGUgJHBhcmVudE5vZGUKICAgICAqIEBwYXJhbSBib29sICRpbnNlcnRCZWZvcmUKICAgICAqIEByZXR1cm4gRE9NTm9kZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXBwZW5kU2lnbmF0dXJlKCRwYXJlbnROb2RlLCAkaW5zZXJ0QmVmb3JlID0gZmFsc2UpCiAgICB7CiAgICAgICAgJGJlZm9yZU5vZGUgPSAkaW5zZXJ0QmVmb3JlID8gJHBhcmVudE5vZGUtPmZpcnN0Q2hpbGQgOiBudWxsOwogICAgICAgIHJldHVybiAkdGhpcy0+aW5zZXJ0U2lnbmF0dXJlKCRwYXJlbnROb2RlLCAkYmVmb3JlTm9kZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjZXJ0CiAgICAgKiBAcGFyYW0gYm9vbCAkaXNQRU1Gb3JtYXQKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0NTA5WENlcnQoJGNlcnQsICRpc1BFTUZvcm1hdD10cnVlKQogICAgewogICAgICAgICRjZXJ0cyA9IHNlbGY6OnN0YXRpY0dldDUwOVhDZXJ0cygkY2VydCwgJGlzUEVNRm9ybWF0KTsKICAgICAgICBpZiAoISBlbXB0eSgkY2VydHMpKSB7CiAgICAgICAgICAgIHJldHVybiAkY2VydHNbMF07CiAgICAgICAgfQogICAgICAgIHJldHVybiAnJzsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNlcnRzCiAgICAgKiBAcGFyYW0gYm9vbCAkaXNQRU1Gb3JtYXQKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdGF0aWNHZXQ1MDlYQ2VydHMoJGNlcnRzLCAkaXNQRU1Gb3JtYXQ9dHJ1ZSkKICAgIHsKICAgICAgICBpZiAoJGlzUEVNRm9ybWF0KSB7CiAgICAgICAgICAgICRkYXRhID0gJyc7CiAgICAgICAgICAgICRjZXJ0bGlzdCA9IGFycmF5KCk7CiAgICAgICAgICAgICRhckNlcnQgPSBleHBsb2RlKCJcbiIsICRjZXJ0cyk7CiAgICAgICAgICAgICRpbkRhdGEgPSBmYWxzZTsKICAgICAgICAgICAgZm9yZWFjaCAoJGFyQ2VydCBBUyAkY3VyRGF0YSkgewogICAgICAgICAgICAgICAgaWYgKCEgJGluRGF0YSkgewogICAgICAgICAgICAgICAgICAgIGlmIChzdHJuY21wKCRjdXJEYXRhLCAnLS0tLS1CRUdJTiBDRVJUSUZJQ0FURScsIDIyKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRpbkRhdGEgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cm5jbXAoJGN1ckRhdGEsICctLS0tLUVORCBDRVJUSUZJQ0FURScsIDIwKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRpbkRhdGEgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgJGNlcnRsaXN0W10gPSAkZGF0YTsKICAgICAgICAgICAgICAgICAgICAgICAgJGRhdGEgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRkYXRhIC49IHRyaW0oJGN1ckRhdGEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAkY2VydGxpc3Q7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCRjZXJ0cyk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIERPTUVsZW1lbnQgJHBhcmVudFJlZgogICAgICogQHBhcmFtIHN0cmluZyAkY2VydAogICAgICogQHBhcmFtIGJvb2wgJGlzUEVNRm9ybWF0CiAgICAgKiBAcGFyYW0gYm9vbCAkaXNVUkwKICAgICAqIEBwYXJhbSBudWxsfERPTVhQYXRoICR4cGF0aAogICAgICogQHBhcmFtIG51bGx8YXJyYXkgJG9wdGlvbnMKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RhdGljQWRkNTA5Q2VydCgkcGFyZW50UmVmLCAkY2VydCwgJGlzUEVNRm9ybWF0PXRydWUsICRpc1VSTD1mYWxzZSwgJHhwYXRoPW51bGwsICRvcHRpb25zPW51bGwpCiAgICB7CiAgICAgICAgaWYgKCRpc1VSTCkgewogICAgICAgICAgICAkY2VydCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRjZXJ0KTsKICAgICAgICB9CiAgICAgICAgaWYgKCEgJHBhcmVudFJlZiBpbnN0YW5jZW9mIERPTUVsZW1lbnQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignSW52YWxpZCBwYXJlbnQgTm9kZSBwYXJhbWV0ZXInKTsKICAgICAgICB9CiAgICAgICAgJGJhc2VEb2MgPSAkcGFyZW50UmVmLT5vd25lckRvY3VtZW50OwoKICAgICAgICBpZiAoZW1wdHkoJHhwYXRoKSkgewogICAgICAgICAgICAkeHBhdGggPSBuZXcgRE9NWFBhdGgoJHBhcmVudFJlZi0+b3duZXJEb2N1bWVudCk7CiAgICAgICAgICAgICR4cGF0aC0+cmVnaXN0ZXJOYW1lc3BhY2UoJ3NlY2RzaWcnLCBzZWxmOjpYTUxEU0lHTlMpOwogICAgICAgIH0KCiAgICAgICAgJHF1ZXJ5ID0gIi4vc2VjZHNpZzpLZXlJbmZvIjsKICAgICAgICAkbm9kZXNldCA9ICR4cGF0aC0+cXVlcnkoJHF1ZXJ5LCAkcGFyZW50UmVmKTsKICAgICAgICAka2V5SW5mbyA9ICRub2Rlc2V0LT5pdGVtKDApOwogICAgICAgICRkc2lnX3BmeCA9ICcnOwogICAgICAgIGlmICghICRrZXlJbmZvKSB7CiAgICAgICAgICAgICRwZnggPSAkcGFyZW50UmVmLT5sb29rdXBQcmVmaXgoc2VsZjo6WE1MRFNJR05TKTsKICAgICAgICAgICAgaWYgKCEgZW1wdHkoJHBmeCkpIHsKICAgICAgICAgICAgICAgICRkc2lnX3BmeCA9ICRwZnguIjoiOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRpbnNlcnRlZCA9IGZhbHNlOwogICAgICAgICAgICAka2V5SW5mbyA9ICRiYXNlRG9jLT5jcmVhdGVFbGVtZW50TlMoc2VsZjo6WE1MRFNJR05TLCAkZHNpZ19wZnguJ0tleUluZm8nKTsKCiAgICAgICAgICAgICRxdWVyeSA9ICIuL3NlY2RzaWc6T2JqZWN0IjsKICAgICAgICAgICAgJG5vZGVzZXQgPSAkeHBhdGgtPnF1ZXJ5KCRxdWVyeSwgJHBhcmVudFJlZik7CiAgICAgICAgICAgIGlmICgkc09iamVjdCA9ICRub2Rlc2V0LT5pdGVtKDApKSB7CiAgICAgICAgICAgICAgICAkc09iamVjdC0+cGFyZW50Tm9kZS0+aW5zZXJ0QmVmb3JlKCRrZXlJbmZvLCAkc09iamVjdCk7CiAgICAgICAgICAgICAgICAkaW5zZXJ0ZWQgPSB0cnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoISAkaW5zZXJ0ZWQpIHsKICAgICAgICAgICAgICAgICRwYXJlbnRSZWYtPmFwcGVuZENoaWxkKCRrZXlJbmZvKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRwZnggPSAka2V5SW5mby0+bG9va3VwUHJlZml4KHNlbGY6OlhNTERTSUdOUyk7CiAgICAgICAgICAgIGlmICghIGVtcHR5KCRwZngpKSB7CiAgICAgICAgICAgICAgICAkZHNpZ19wZnggPSAkcGZ4LiI6IjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gQWRkIGFsbCBjZXJ0cyBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZQogICAgICAgICRjZXJ0cyA9IHNlbGY6OnN0YXRpY0dldDUwOVhDZXJ0cygkY2VydCwgJGlzUEVNRm9ybWF0KTsKCiAgICAgICAgLy8gQXR0YWNoIFg1MDkgZGF0YSBub2RlCiAgICAgICAgJHg1MDlEYXRhTm9kZSA9ICRiYXNlRG9jLT5jcmVhdGVFbGVtZW50TlMoc2VsZjo6WE1MRFNJR05TLCAkZHNpZ19wZnguJ1g1MDlEYXRhJyk7CiAgICAgICAgJGtleUluZm8tPmFwcGVuZENoaWxkKCR4NTA5RGF0YU5vZGUpOwoKICAgICAgICAkaXNzdWVyU2VyaWFsID0gZmFsc2U7CiAgICAgICAgJHN1YmplY3ROYW1lID0gZmFsc2U7CiAgICAgICAgaWYgKGlzX2FycmF5KCRvcHRpb25zKSkgewogICAgICAgICAgICBpZiAoISBlbXB0eSgkb3B0aW9uc1snaXNzdWVyU2VyaWFsJ10pKSB7CiAgICAgICAgICAgICAgICAkaXNzdWVyU2VyaWFsID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoISBlbXB0eSgkb3B0aW9uc1snc3ViamVjdE5hbWUnXSkpIHsKICAgICAgICAgICAgICAgICRzdWJqZWN0TmFtZSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIEF0dGFjaCBhbGwgY2VydGlmaWNhdGUgbm9kZXMgYW5kIGFueSBhZGRpdGlvbmFsIGRhdGEKICAgICAgICBmb3JlYWNoICgkY2VydHMgYXMgJFg1MDlDZXJ0KSB7CiAgICAgICAgICAgIGlmICgkaXNzdWVyU2VyaWFsIHx8ICRzdWJqZWN0TmFtZSkgewogICAgICAgICAgICAgICAgaWYgKCRjZXJ0RGF0YSA9IG9wZW5zc2xfeDUwOV9wYXJzZSgiLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tXG4iLmNodW5rX3NwbGl0KCRYNTA5Q2VydCwgNjQsICJcbiIpLiItLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tXG4iKSkgewogICAgICAgICAgICAgICAgICAgIGlmICgkc3ViamVjdE5hbWUgJiYgISBlbXB0eSgkY2VydERhdGFbJ3N1YmplY3QnXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCRjZXJ0RGF0YVsnc3ViamVjdCddKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhcnRzID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRjZXJ0RGF0YVsnc3ViamVjdCddIEFTICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHZhbHVlIGFzICR2YWx1ZUVsZW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X3Vuc2hpZnQoJHBhcnRzLCAiJGtleT0kdmFsdWVFbGVtZW50Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheV91bnNoaWZ0KCRwYXJ0cywgIiRrZXk9JHZhbHVlIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN1YmplY3ROYW1lVmFsdWUgPSBpbXBsb2RlKCcsJywgJHBhcnRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdWJqZWN0TmFtZVZhbHVlID0gJGNlcnREYXRhWydzdWJqZWN0J107CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJHg1MDlTdWJqZWN0Tm9kZSA9ICRiYXNlRG9jLT5jcmVhdGVFbGVtZW50TlMoc2VsZjo6WE1MRFNJR05TLCAkZHNpZ19wZnguJ1g1MDlTdWJqZWN0TmFtZScsICRzdWJqZWN0TmFtZVZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHg1MDlEYXRhTm9kZS0+YXBwZW5kQ2hpbGQoJHg1MDlTdWJqZWN0Tm9kZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICgkaXNzdWVyU2VyaWFsICYmICEgZW1wdHkoJGNlcnREYXRhWydpc3N1ZXInXSkgJiYgISBlbXB0eSgkY2VydERhdGFbJ3NlcmlhbE51bWJlciddKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfYXJyYXkoJGNlcnREYXRhWydpc3N1ZXInXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJ0cyA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkY2VydERhdGFbJ2lzc3VlciddIEFTICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlfdW5zaGlmdCgkcGFydHMsICIka2V5PSR2YWx1ZSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlzc3Vlck5hbWUgPSBpbXBsb2RlKCcsJywgJHBhcnRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpc3N1ZXJOYW1lID0gJGNlcnREYXRhWydpc3N1ZXInXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgJHg1MDlJc3N1ZXJOb2RlID0gJGJhc2VEb2MtPmNyZWF0ZUVsZW1lbnROUyhzZWxmOjpYTUxEU0lHTlMsICRkc2lnX3BmeC4nWDUwOUlzc3VlclNlcmlhbCcpOwogICAgICAgICAgICAgICAgICAgICAgICAkeDUwOURhdGFOb2RlLT5hcHBlbmRDaGlsZCgkeDUwOUlzc3Vlck5vZGUpOwoKICAgICAgICAgICAgICAgICAgICAgICAgJHg1MDlOb2RlID0gJGJhc2VEb2MtPmNyZWF0ZUVsZW1lbnROUyhzZWxmOjpYTUxEU0lHTlMsICRkc2lnX3BmeC4nWDUwOUlzc3Vlck5hbWUnLCAkaXNzdWVyTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICR4NTA5SXNzdWVyTm9kZS0+YXBwZW5kQ2hpbGQoJHg1MDlOb2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHg1MDlOb2RlID0gJGJhc2VEb2MtPmNyZWF0ZUVsZW1lbnROUyhzZWxmOjpYTUxEU0lHTlMsICRkc2lnX3BmeC4nWDUwOVNlcmlhbE51bWJlcicsICRjZXJ0RGF0YVsnc2VyaWFsTnVtYmVyJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAkeDUwOUlzc3Vlck5vZGUtPmFwcGVuZENoaWxkKCR4NTA5Tm9kZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQogICAgICAgICAgICAkeDUwOUNlcnROb2RlID0gJGJhc2VEb2MtPmNyZWF0ZUVsZW1lbnROUyhzZWxmOjpYTUxEU0lHTlMsICRkc2lnX3BmeC4nWDUwOUNlcnRpZmljYXRlJywgJFg1MDlDZXJ0KTsKICAgICAgICAgICAgJHg1MDlEYXRhTm9kZS0+YXBwZW5kQ2hpbGQoJHg1MDlDZXJ0Tm9kZSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkY2VydAogICAgICogQHBhcmFtIGJvb2wgJGlzUEVNRm9ybWF0CiAgICAgKiBAcGFyYW0gYm9vbCAkaXNVUkwKICAgICAqIEBwYXJhbSBudWxsfGFycmF5ICRvcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQ1MDlDZXJ0KCRjZXJ0LCAkaXNQRU1Gb3JtYXQ9dHJ1ZSwgJGlzVVJMPWZhbHNlLCAkb3B0aW9ucz1udWxsKQogICAgewogICAgICAgIGlmICgkeHBhdGggPSAkdGhpcy0+Z2V0WFBhdGhPYmooKSkgewogICAgICAgICAgICBzZWxmOjpzdGF0aWNBZGQ1MDlDZXJ0KCR0aGlzLT5zaWdOb2RlLCAkY2VydCwgJGlzUEVNRm9ybWF0LCAkaXNVUkwsICR4cGF0aCwgJG9wdGlvbnMpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFRoaXMgZnVuY3Rpb24gYXBwZW5kcyBhIG5vZGUgdG8gdGhlIEtleUluZm8uCiAgICAgKgogICAgICogVGhlIEtleUluZm8gZWxlbWVudCB3aWxsIGJlIGNyZWF0ZWQgaWYgb25lIGRvZXMgbm90IGV4aXN0IGluIHRoZSBkb2N1bWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gRE9NTm9kZSAkbm9kZSBUaGUgbm9kZSB0byBhcHBlbmQgdG8gdGhlIEtleUluZm8uCiAgICAgKgogICAgICogQHJldHVybiBET01Ob2RlIFRoZSBLZXlJbmZvIGVsZW1lbnQgbm9kZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXBwZW5kVG9LZXlJbmZvKCRub2RlKQogICAgewogICAgICAgICRwYXJlbnRSZWYgPSAkdGhpcy0+c2lnTm9kZTsKICAgICAgICAkYmFzZURvYyA9ICRwYXJlbnRSZWYtPm93bmVyRG9jdW1lbnQ7CgogICAgICAgICR4cGF0aCA9ICR0aGlzLT5nZXRYUGF0aE9iaigpOwogICAgICAgIGlmIChlbXB0eSgkeHBhdGgpKSB7CiAgICAgICAgICAgICR4cGF0aCA9IG5ldyBET01YUGF0aCgkcGFyZW50UmVmLT5vd25lckRvY3VtZW50KTsKICAgICAgICAgICAgJHhwYXRoLT5yZWdpc3Rlck5hbWVzcGFjZSgnc2VjZHNpZycsIHNlbGY6OlhNTERTSUdOUyk7CiAgICAgICAgfQoKICAgICAgICAkcXVlcnkgPSAiLi9zZWNkc2lnOktleUluZm8iOwogICAgICAgICRub2Rlc2V0ID0gJHhwYXRoLT5xdWVyeSgkcXVlcnksICRwYXJlbnRSZWYpOwogICAgICAgICRrZXlJbmZvID0gJG5vZGVzZXQtPml0ZW0oMCk7CiAgICAgICAgaWYgKCEgJGtleUluZm8pIHsKICAgICAgICAgICAgJGRzaWdfcGZ4ID0gJyc7CiAgICAgICAgICAgICRwZnggPSAkcGFyZW50UmVmLT5sb29rdXBQcmVmaXgoc2VsZjo6WE1MRFNJR05TKTsKICAgICAgICAgICAgaWYgKCEgZW1wdHkoJHBmeCkpIHsKICAgICAgICAgICAgICAgICRkc2lnX3BmeCA9ICRwZnguIjoiOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRpbnNlcnRlZCA9IGZhbHNlOwogICAgICAgICAgICAka2V5SW5mbyA9ICRiYXNlRG9jLT5jcmVhdGVFbGVtZW50TlMoc2VsZjo6WE1MRFNJR05TLCAkZHNpZ19wZnguJ0tleUluZm8nKTsKCiAgICAgICAgICAgICRxdWVyeSA9ICIuL3NlY2RzaWc6T2JqZWN0IjsKICAgICAgICAgICAgJG5vZGVzZXQgPSAkeHBhdGgtPnF1ZXJ5KCRxdWVyeSwgJHBhcmVudFJlZik7CiAgICAgICAgICAgIGlmICgkc09iamVjdCA9ICRub2Rlc2V0LT5pdGVtKDApKSB7CiAgICAgICAgICAgICAgICAkc09iamVjdC0+cGFyZW50Tm9kZS0+aW5zZXJ0QmVmb3JlKCRrZXlJbmZvLCAkc09iamVjdCk7CiAgICAgICAgICAgICAgICAkaW5zZXJ0ZWQgPSB0cnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoISAkaW5zZXJ0ZWQpIHsKICAgICAgICAgICAgICAgICRwYXJlbnRSZWYtPmFwcGVuZENoaWxkKCRrZXlJbmZvKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJGtleUluZm8tPmFwcGVuZENoaWxkKCRub2RlKTsKCiAgICAgICAgcmV0dXJuICRrZXlJbmZvOwogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgdGhlIHZhbGlkYXRlZCBub2Rlcy4KICAgICAqCiAgICAgKiBUaGUgYXJyYXkgd2lsbCBjb250YWluIHRoZSBpZCBvZiB0aGUgcmVmZXJlbmNlZCBub2RlIGFzIHRoZSBrZXkgYW5kIHRoZSBub2RlIGl0c2VsZgogICAgICogYXMgdGhlIHZhbHVlLgogICAgICoKICAgICAqIFJldHVybnM6CiAgICAgKiAgQW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgdmFsaWRhdGVkIG5vZGVzIG9yIG51bGwgaWYgbm8gbm9kZXMgaGF2ZSBiZWVuIHZhbGlkYXRlZC4KICAgICAqCiAgICAgKiAgQHJldHVybiBhcnJheSBBc3NvY2lhdGl2ZSBhcnJheSBvZiB2YWxpZGF0ZWQgbm9kZXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFZhbGlkYXRlZE5vZGVzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnZhbGlkYXRlZE5vZGVzOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/robrichards/xmlseclibs/src/XMLSecurityKey.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFJvYlJpY2hhcmRzXFhNTFNlY0xpYnM7Cgp1c2UgRE9NRWxlbWVudDsKdXNlIEV4Y2VwdGlvbjsKCi8qKgogKiB4bWxzZWNsaWJzLnBocAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAyNCwgUm9iZXJ0IFJpY2hhcmRzIDxycmljaGFyZHNAY2RhdGF6b25lLm9yZz4uCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICogYXJlIG1ldDoKICoKICogICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCiAqICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAqICAgICBkaXN0cmlidXRpb24uCiAqCiAqICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIFJvYmVydCBSaWNoYXJkcyBub3IgdGhlIG5hbWVzIG9mIGhpcwogKiAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAogKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAogKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCiAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCiAqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQogKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICoKICogQGF1dGhvciAgICBSb2JlcnQgUmljaGFyZHMgPHJyaWNoYXJkc0BjZGF0YXpvbmUub3JnPgogKiBAY29weXJpZ2h0IDIwMDctMjAyNCBSb2JlcnQgUmljaGFyZHMgPHJyaWNoYXJkc0BjZGF0YXpvbmUub3JnPgogKiBAbGljZW5zZSAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwICBCU0QgTGljZW5zZQogKi8KCmNsYXNzIFhNTFNlY3VyaXR5S2V5CnsKICAgIGNvbnN0IFRSSVBMRURFU19DQkMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjdHJpcGxlZGVzLWNiYyc7CiAgICBjb25zdCBBRVMxMjhfQ0JDID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI2FlczEyOC1jYmMnOwogICAgY29uc3QgQUVTMTkyX0NCQyA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNhZXMxOTItY2JjJzsKICAgIGNvbnN0IEFFUzI1Nl9DQkMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjYWVzMjU2LWNiYyc7CiAgICBjb25zdCBBRVMxMjhfR0NNID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDkveG1sZW5jMTEjYWVzMTI4LWdjbSc7CiAgICBjb25zdCBBRVMxOTJfR0NNID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDkveG1sZW5jMTEjYWVzMTkyLWdjbSc7CiAgICBjb25zdCBBRVMyNTZfR0NNID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDkveG1sZW5jMTEjYWVzMjU2LWdjbSc7CiAgICBjb25zdCBSU0FfMV81ID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3JzYS0xXzUnOwogICAgY29uc3QgUlNBX09BRVBfTUdGMVAgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjcnNhLW9hZXAtbWdmMXAnOwogICAgY29uc3QgUlNBX09BRVAgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwOS94bWxlbmMxMSNyc2Etb2FlcCc7CiAgICBjb25zdCBEU0FfU0hBMSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjZHNhLXNoYTEnOwogICAgY29uc3QgUlNBX1NIQTEgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3JzYS1zaGExJzsKICAgIGNvbnN0IFJTQV9TSEEyNTYgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxkc2lnLW1vcmUjcnNhLXNoYTI1Nic7CiAgICBjb25zdCBSU0FfU0hBMzg0ID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZHNpZy1tb3JlI3JzYS1zaGEzODQnOwogICAgY29uc3QgUlNBX1NIQTUxMiA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhNTEyJzsKICAgIGNvbnN0IEhNQUNfU0hBMSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjaG1hYy1zaGExJzsKICAgIGNvbnN0IEFVVEhUQUdfTEVOR1RIID0gMTY7CgogICAgLyoqIEB2YXIgYXJyYXkgKi8KICAgIHByaXZhdGUgJGNyeXB0UGFyYW1zID0gYXJyYXkoKTsKCiAgICAvKiogQHZhciBpbnR8c3RyaW5nICovCiAgICBwdWJsaWMgJHR5cGUgPSAwOwoKICAgIC8qKiBAdmFyIG1peGVkfG51bGwgKi8KICAgIHB1YmxpYyAka2V5ID0gbnVsbDsKCiAgICAvKiogQHZhciBzdHJpbmcgICovCiAgICBwdWJsaWMgJHBhc3NwaHJhc2UgPSAiIjsKCiAgICAvKiogQHZhciBzdHJpbmd8bnVsbCAqLwogICAgcHVibGljICRpdiA9IG51bGw7CgogICAgLyoqIEB2YXIgc3RyaW5nfG51bGwgKi8KICAgIHB1YmxpYyAkbmFtZSA9IG51bGw7CgogICAgLyoqIEB2YXIgbWl4ZWR8bnVsbCAqLwogICAgcHVibGljICRrZXlDaGFpbiA9IG51bGw7CgogICAgLyoqIEB2YXIgYm9vbCAqLwogICAgcHVibGljICRpc0VuY3J5cHRlZCA9IGZhbHNlOwoKICAgIC8qKiBAdmFyIFhNTFNlY0VuY3xudWxsICovCiAgICBwdWJsaWMgJGVuY3J5cHRlZEN0eCA9IG51bGw7CgogICAgLyoqIEB2YXIgbWl4ZWR8bnVsbCAqLwogICAgcHVibGljICRndWlkID0gbnVsbDsKCiAgICAvKioKICAgICAqIFRoaXMgdmFyaWFibGUgY29udGFpbnMgdGhlIGNlcnRpZmljYXRlIGFzIGEgc3RyaW5nIGlmIHRoaXMga2V5IHJlcHJlc2VudHMgYW4gWDUwOS1jZXJ0aWZpY2F0ZS4KICAgICAqIElmIHRoaXMga2V5IGRvZXNuJ3QgcmVwcmVzZW50IGEgY2VydGlmaWNhdGUsIHRoaXMgd2lsbCBiZSBudWxsLgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICR4NTA5Q2VydGlmaWNhdGUgPSBudWxsOwoKICAgIC8qKgogICAgICogVGhpcyB2YXJpYWJsZSBjb250YWlucyB0aGUgY2VydGlmaWNhdGUgdGh1bWJwcmludCBpZiB3ZSBoYXZlIGxvYWRlZCBhbiBYNTA5LWNlcnRpZmljYXRlLgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRYNTA5VGh1bWJwcmludCA9IG51bGw7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0eXBlCiAgICAgKiBAcGFyYW0gbnVsbHxhcnJheSAkcGFyYW1zCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHR5cGUsICRwYXJhbXM9bnVsbCkKICAgIHsKICAgICAgICBzd2l0Y2ggKCR0eXBlKSB7CiAgICAgICAgICAgIGNhc2UgKHNlbGY6OlRSSVBMRURFU19DQkMpOgogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydsaWJyYXJ5J10gPSAnb3BlbnNzbCc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ2NpcGhlciddID0gJ2Rlcy1lZGUzLWNiYyc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ3R5cGUnXSA9ICdzeW1tZXRyaWMnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydtZXRob2QnXSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyN0cmlwbGVkZXMtY2JjJzsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1sna2V5c2l6ZSddID0gMjQ7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ2Jsb2Nrc2l6ZSddID0gODsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIChzZWxmOjpBRVMxMjhfQ0JDKToKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snbGlicmFyeSddID0gJ29wZW5zc2wnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydjaXBoZXInXSA9ICdhZXMtMTI4LWNiYyc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ3R5cGUnXSA9ICdzeW1tZXRyaWMnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydtZXRob2QnXSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNhZXMxMjgtY2JjJzsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1sna2V5c2l6ZSddID0gMTY7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ2Jsb2Nrc2l6ZSddID0gMTY7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAoc2VsZjo6QUVTMTkyX0NCQyk6CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ2xpYnJhcnknXSA9ICdvcGVuc3NsJzsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snY2lwaGVyJ10gPSAnYWVzLTE5Mi1jYmMnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWyd0eXBlJ10gPSAnc3ltbWV0cmljJzsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snbWV0aG9kJ10gPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjYWVzMTkyLWNiYyc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ2tleXNpemUnXSA9IDI0OwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydibG9ja3NpemUnXSA9IDE2OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgKHNlbGY6OkFFUzI1Nl9DQkMpOgogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydsaWJyYXJ5J10gPSAnb3BlbnNzbCc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ2NpcGhlciddID0gJ2Flcy0yNTYtY2JjJzsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1sndHlwZSddID0gJ3N5bW1ldHJpYyc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ21ldGhvZCddID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI2FlczI1Ni1jYmMnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydrZXlzaXplJ10gPSAzMjsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snYmxvY2tzaXplJ10gPSAxNjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIChzZWxmOjpBRVMxMjhfR0NNKToKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snbGlicmFyeSddID0gJ29wZW5zc2wnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydjaXBoZXInXSA9ICdhZXMtMTI4LWdjbSc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ3R5cGUnXSA9ICdzeW1tZXRyaWMnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydtZXRob2QnXSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDA5L3htbGVuYzExI2FlczEyOC1nY20nOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydrZXlzaXplJ10gPSAxNjsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snYmxvY2tzaXplJ10gPSAxNjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIChzZWxmOjpBRVMxOTJfR0NNKToKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snbGlicmFyeSddID0gJ29wZW5zc2wnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydjaXBoZXInXSA9ICdhZXMtMTkyLWdjbSc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ3R5cGUnXSA9ICdzeW1tZXRyaWMnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydtZXRob2QnXSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDA5L3htbGVuYzExI2FlczE5Mi1nY20nOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydrZXlzaXplJ10gPSAyNDsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snYmxvY2tzaXplJ10gPSAxNjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIChzZWxmOjpBRVMyNTZfR0NNKToKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snbGlicmFyeSddID0gJ29wZW5zc2wnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydjaXBoZXInXSA9ICdhZXMtMjU2LWdjbSc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ3R5cGUnXSA9ICdzeW1tZXRyaWMnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydtZXRob2QnXSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDA5L3htbGVuYzExI2FlczI1Ni1nY20nOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydrZXlzaXplJ10gPSAzMjsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snYmxvY2tzaXplJ10gPSAxNjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIChzZWxmOjpSU0FfMV81KToKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snbGlicmFyeSddID0gJ29wZW5zc2wnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydwYWRkaW5nJ10gPSBPUEVOU1NMX1BLQ1MxX1BBRERJTkc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ21ldGhvZCddID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3JzYS0xXzUnOwogICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCRwYXJhbXMpICYmICEgZW1wdHkoJHBhcmFtc1sndHlwZSddKSkgewogICAgICAgICAgICAgICAgICAgIGlmICgkcGFyYW1zWyd0eXBlJ10gPT0gJ3B1YmxpYycgfHwgJHBhcmFtc1sndHlwZSddID09ICdwcml2YXRlJykgewogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ3R5cGUnXSA9ICRwYXJhbXNbJ3R5cGUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignQ2VydGlmaWNhdGUgInR5cGUiIChwcml2YXRlL3B1YmxpYykgbXVzdCBiZSBwYXNzZWQgdmlhIHBhcmFtZXRlcnMnKTsKICAgICAgICAgICAgY2FzZSAoc2VsZjo6UlNBX09BRVBfTUdGMVApOgogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydsaWJyYXJ5J10gPSAnb3BlbnNzbCc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ3BhZGRpbmcnXSA9IE9QRU5TU0xfUEtDUzFfT0FFUF9QQURESU5HOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydtZXRob2QnXSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNyc2Etb2FlcC1tZ2YxcCc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ2hhc2gnXSA9IG51bGw7CiAgICAgICAgICAgICAgICBpZiAoaXNfYXJyYXkoJHBhcmFtcykgJiYgISBlbXB0eSgkcGFyYW1zWyd0eXBlJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRwYXJhbXNbJ3R5cGUnXSA9PSAncHVibGljJyB8fCAkcGFyYW1zWyd0eXBlJ10gPT0gJ3ByaXZhdGUnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1sndHlwZSddID0gJHBhcmFtc1sndHlwZSddOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdDZXJ0aWZpY2F0ZSAidHlwZSIgKHByaXZhdGUvcHVibGljKSBtdXN0IGJlIHBhc3NlZCB2aWEgcGFyYW1ldGVycycpOwogICAgICAgICAgICBjYXNlIChzZWxmOjpSU0FfT0FFUCk6CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ2xpYnJhcnknXSA9ICdvcGVuc3NsJzsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1sncGFkZGluZyddID0gT1BFTlNTTF9QS0NTMV9PQUVQX1BBRERJTkc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ21ldGhvZCddID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDkveG1sZW5jMTEjcnNhLW9hZXAnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydoYXNoJ10gPSAnaHR0cDovL3d3dy53My5vcmcvMjAwOS94bWxlbmMxMSNtZ2Yxc2hhMSc7CiAgICAgICAgICAgICAgICBpZiAoaXNfYXJyYXkoJHBhcmFtcykgJiYgISBlbXB0eSgkcGFyYW1zWyd0eXBlJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRwYXJhbXNbJ3R5cGUnXSA9PSAncHVibGljJyB8fCAkcGFyYW1zWyd0eXBlJ10gPT0gJ3ByaXZhdGUnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1sndHlwZSddID0gJHBhcmFtc1sndHlwZSddOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdDZXJ0aWZpY2F0ZSAidHlwZSIgKHByaXZhdGUvcHVibGljKSBtdXN0IGJlIHBhc3NlZCB2aWEgcGFyYW1ldGVycycpOwogICAgICAgICAgICBjYXNlIChzZWxmOjpSU0FfU0hBMSk6CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ2xpYnJhcnknXSA9ICdvcGVuc3NsJzsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snbWV0aG9kJ10gPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3JzYS1zaGExJzsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1sncGFkZGluZyddID0gT1BFTlNTTF9QS0NTMV9QQURESU5HOwogICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCRwYXJhbXMpICYmICEgZW1wdHkoJHBhcmFtc1sndHlwZSddKSkgewogICAgICAgICAgICAgICAgICAgIGlmICgkcGFyYW1zWyd0eXBlJ10gPT0gJ3B1YmxpYycgfHwgJHBhcmFtc1sndHlwZSddID09ICdwcml2YXRlJykgewogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ3R5cGUnXSA9ICRwYXJhbXNbJ3R5cGUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignQ2VydGlmaWNhdGUgInR5cGUiIChwcml2YXRlL3B1YmxpYykgbXVzdCBiZSBwYXNzZWQgdmlhIHBhcmFtZXRlcnMnKTsKICAgICAgICAgICAgY2FzZSAoc2VsZjo6UlNBX1NIQTI1Nik6CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ2xpYnJhcnknXSA9ICdvcGVuc3NsJzsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snbWV0aG9kJ10gPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxkc2lnLW1vcmUjcnNhLXNoYTI1Nic7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ3BhZGRpbmcnXSA9IE9QRU5TU0xfUEtDUzFfUEFERElORzsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snZGlnZXN0J10gPSAnU0hBMjU2JzsKICAgICAgICAgICAgICAgIGlmIChpc19hcnJheSgkcGFyYW1zKSAmJiAhIGVtcHR5KCRwYXJhbXNbJ3R5cGUnXSkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJHBhcmFtc1sndHlwZSddID09ICdwdWJsaWMnIHx8ICRwYXJhbXNbJ3R5cGUnXSA9PSAncHJpdmF0ZScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWyd0eXBlJ10gPSAkcGFyYW1zWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0NlcnRpZmljYXRlICJ0eXBlIiAocHJpdmF0ZS9wdWJsaWMpIG11c3QgYmUgcGFzc2VkIHZpYSBwYXJhbWV0ZXJzJyk7CiAgICAgICAgICAgIGNhc2UgKHNlbGY6OlJTQV9TSEEzODQpOgogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydsaWJyYXJ5J10gPSAnb3BlbnNzbCc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ21ldGhvZCddID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZHNpZy1tb3JlI3JzYS1zaGEzODQnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydwYWRkaW5nJ10gPSBPUEVOU1NMX1BLQ1MxX1BBRERJTkc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ2RpZ2VzdCddID0gJ1NIQTM4NCc7CiAgICAgICAgICAgICAgICBpZiAoaXNfYXJyYXkoJHBhcmFtcykgJiYgISBlbXB0eSgkcGFyYW1zWyd0eXBlJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRwYXJhbXNbJ3R5cGUnXSA9PSAncHVibGljJyB8fCAkcGFyYW1zWyd0eXBlJ10gPT0gJ3ByaXZhdGUnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1sndHlwZSddID0gJHBhcmFtc1sndHlwZSddOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdDZXJ0aWZpY2F0ZSAidHlwZSIgKHByaXZhdGUvcHVibGljKSBtdXN0IGJlIHBhc3NlZCB2aWEgcGFyYW1ldGVycycpOwogICAgICAgICAgICBjYXNlIChzZWxmOjpSU0FfU0hBNTEyKToKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snbGlicmFyeSddID0gJ29wZW5zc2wnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydtZXRob2QnXSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhNTEyJzsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1sncGFkZGluZyddID0gT1BFTlNTTF9QS0NTMV9QQURESU5HOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydkaWdlc3QnXSA9ICdTSEE1MTInOwogICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCRwYXJhbXMpICYmICEgZW1wdHkoJHBhcmFtc1sndHlwZSddKSkgewogICAgICAgICAgICAgICAgICAgIGlmICgkcGFyYW1zWyd0eXBlJ10gPT0gJ3B1YmxpYycgfHwgJHBhcmFtc1sndHlwZSddID09ICdwcml2YXRlJykgewogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ3R5cGUnXSA9ICRwYXJhbXNbJ3R5cGUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignQ2VydGlmaWNhdGUgInR5cGUiIChwcml2YXRlL3B1YmxpYykgbXVzdCBiZSBwYXNzZWQgdmlhIHBhcmFtZXRlcnMnKTsKICAgICAgICAgICAgY2FzZSAoc2VsZjo6SE1BQ19TSEExKToKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snbGlicmFyeSddID0gJHR5cGU7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ21ldGhvZCddID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNobWFjLXNoYTEnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIEtleSBUeXBlJyk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT50eXBlID0gJHR5cGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUga2V5IHNpemUgZm9yIHRoZSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBhbGdvcml0aG0uLgogICAgICoKICAgICAqIElmIHRoZSBrZXkgc2l6ZSBpcyB1bmtub3duLCBvciB0aGlzIGlzbid0IGEgc3ltbWV0cmljIGVuY3J5cHRpb24gYWxnb3JpdGhtLAogICAgICogbnVsbCBpcyByZXR1cm5lZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludHxudWxsICBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBrZXkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTeW1tZXRyaWNLZXlTaXplKCkKICAgIHsKICAgICAgICBpZiAoISBpc3NldCgkdGhpcy0+Y3J5cHRQYXJhbXNbJ2tleXNpemUnXSkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkdGhpcy0+Y3J5cHRQYXJhbXNbJ2tleXNpemUnXTsKICAgIH0KCiAgICAvKioKICAgICAqIEdlbmVyYXRlcyBhIHNlc3Npb24ga2V5IHVzaW5nIHRoZSBvcGVuc3NsLWV4dGVuc2lvbi4KICAgICAqIEluIGNhc2Ugb2YgdXNpbmcgREVTMy1DQkMgdGhlIGtleSBpcyBjaGVja2VkIGZvciBhIHByb3BlciBwYXJpdHkgYml0cyBzZXQuCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdlbmVyYXRlU2Vzc2lvbktleSgpCiAgICB7CiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+Y3J5cHRQYXJhbXNbJ2tleXNpemUnXSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVW5rbm93biBrZXkgc2l6ZSBmb3IgdHlwZSAiJyAuICR0aGlzLT50eXBlIC4gJyIuJyk7CiAgICAgICAgfQogICAgICAgICRrZXlzaXplID0gJHRoaXMtPmNyeXB0UGFyYW1zWydrZXlzaXplJ107CiAgICAgICAgCiAgICAgICAgJGtleSA9IG9wZW5zc2xfcmFuZG9tX3BzZXVkb19ieXRlcygka2V5c2l6ZSk7CiAgICAgICAgCiAgICAgICAgaWYgKCR0aGlzLT50eXBlID09PSBzZWxmOjpUUklQTEVERVNfQ0JDKSB7CiAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBnZW5lcmF0ZWQga2V5IGhhcyB0aGUgcHJvcGVyIHBhcml0eSBiaXRzIHNldC4KICAgICAgICAgICAgICogTWNyeXB0IGRvZXNuJ3QgY2FyZSBhYm91dCB0aGUgcGFyaXR5IGJpdHMsIGJ1dCBvdGhlcnMgbWF5IGNhcmUuCiAgICAgICAgICAgICovCiAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IHN0cmxlbigka2V5KTsgJGkrKykgewogICAgICAgICAgICAgICAgJGJ5dGUgPSBvcmQoJGtleVskaV0pICYgMHhmZTsKICAgICAgICAgICAgICAgICRwYXJpdHkgPSAxOwogICAgICAgICAgICAgICAgZm9yICgkaiA9IDE7ICRqIDwgODsgJGorKykgewogICAgICAgICAgICAgICAgICAgICRwYXJpdHkgXj0gKCRieXRlID4+ICRqKSAmIDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkYnl0ZSB8PSAkcGFyaXR5OwogICAgICAgICAgICAgICAgJGtleVskaV0gPSBjaHIoJGJ5dGUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgICR0aGlzLT5rZXkgPSAka2V5OwogICAgICAgIHJldHVybiAka2V5OwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSByYXcgdGh1bWJwcmludCBvZiBhIGNlcnRpZmljYXRlCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY2VydAogICAgICogQHJldHVybiBudWxsfHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFJhd1RodW1icHJpbnQoJGNlcnQpCiAgICB7CgogICAgICAgICRhckNlcnQgPSBleHBsb2RlKCJcbiIsICRjZXJ0KTsKICAgICAgICAkZGF0YSA9ICcnOwogICAgICAgICRpbkRhdGEgPSBmYWxzZTsKCiAgICAgICAgZm9yZWFjaCAoJGFyQ2VydCBBUyAkY3VyRGF0YSkgewogICAgICAgICAgICBpZiAoISAkaW5EYXRhKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RybmNtcCgkY3VyRGF0YSwgJy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUnLCAyMikgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICRpbkRhdGEgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKHN0cm5jbXAoJGN1ckRhdGEsICctLS0tLUVORCBDRVJUSUZJQ0FURScsIDIwKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkZGF0YSAuPSB0cmltKCRjdXJEYXRhKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCEgZW1wdHkoJGRhdGEpKSB7CiAgICAgICAgICAgIHJldHVybiBzdHJ0b2xvd2VyKHNoYTEoYmFzZTY0X2RlY29kZSgkZGF0YSkpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogTG9hZHMgdGhlIGdpdmVuIGtleSwgb3IgLSB3aXRoIGlzRmlsZSBzZXQgdHJ1ZSAtIHRoZSBrZXkgZnJvbSB0aGUga2V5ZmlsZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSBib29sICRpc0ZpbGUKICAgICAqIEBwYXJhbSBib29sICRpc0NlcnQKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkS2V5KCRrZXksICRpc0ZpbGU9ZmFsc2UsICRpc0NlcnQgPSBmYWxzZSkKICAgIHsKICAgICAgICBpZiAoJGlzRmlsZSkgewogICAgICAgICAgICAkdGhpcy0+a2V5ID0gZmlsZV9nZXRfY29udGVudHMoJGtleSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPmtleSA9ICRrZXk7CiAgICAgICAgfQogICAgICAgIGlmICgkaXNDZXJ0KSB7CiAgICAgICAgICAgICR0aGlzLT5rZXkgPSBvcGVuc3NsX3g1MDlfcmVhZCgkdGhpcy0+a2V5KTsKICAgICAgICAgICAgb3BlbnNzbF94NTA5X2V4cG9ydCgkdGhpcy0+a2V5LCAkc3RyX2NlcnQpOwogICAgICAgICAgICAkdGhpcy0+eDUwOUNlcnRpZmljYXRlID0gJHN0cl9jZXJ0OwogICAgICAgICAgICAkdGhpcy0+a2V5ID0gJHN0cl9jZXJ0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT54NTA5Q2VydGlmaWNhdGUgPSBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAoJHRoaXMtPmNyeXB0UGFyYW1zWydsaWJyYXJ5J10gPT0gJ29wZW5zc2wnKSB7CiAgICAgICAgICAgIHN3aXRjaCAoJHRoaXMtPmNyeXB0UGFyYW1zWyd0eXBlJ10pIHsKICAgICAgICAgICAgICAgIGNhc2UgJ3B1YmxpYyc6CgkgICAgICAgICAgICAgICAgaWYgKCRpc0NlcnQpIHsKCSAgICAgICAgICAgICAgICAgICAgLyogTG9hZCB0aGUgdGh1bWJwcmludCBpZiB0aGlzIGlzIGFuIFg1MDkgY2VydGlmaWNhdGUuICovCgkgICAgICAgICAgICAgICAgICAgICR0aGlzLT5YNTA5VGh1bWJwcmludCA9IHNlbGY6OmdldFJhd1RodW1icHJpbnQoJHRoaXMtPmtleSk7CgkgICAgICAgICAgICAgICAgfQoJICAgICAgICAgICAgICAgICR0aGlzLT5rZXkgPSBvcGVuc3NsX2dldF9wdWJsaWNrZXkoJHRoaXMtPmtleSk7CgkgICAgICAgICAgICAgICAgaWYgKCEgJHRoaXMtPmtleSkgewoJICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmFibGUgdG8gZXh0cmFjdCBwdWJsaWMga2V5Jyk7CgkgICAgICAgICAgICAgICAgfQoJICAgICAgICAgICAgICAgIGJyZWFrOwoKCSAgICAgICAgICAgIGNhc2UgJ3ByaXZhdGUnOgogICAgICAgICAgICAgICAgICAgICR0aGlzLT5rZXkgPSBvcGVuc3NsX2dldF9wcml2YXRla2V5KCR0aGlzLT5rZXksICR0aGlzLT5wYXNzcGhyYXNlKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlJ3N5bW1ldHJpYyc6CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmxlbigkdGhpcy0+a2V5KSA8ICR0aGlzLT5jcnlwdFBhcmFtc1sna2V5c2l6ZSddKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0tleSBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJy4kdGhpcy0+Y3J5cHRQYXJhbXNbJ2tleXNpemUnXS4nIGNoYXJhY3RlcnMgZm9yIHRoaXMgY2lwaGVyLCBjb250YWlucyAnLnN0cmxlbigkdGhpcy0+a2V5KSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVW5rbm93biB0eXBlJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBJU08gMTAxMjYgUGFkZGluZwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICAgICAqIEBwYXJhbSBpbnRlZ2VyICRibG9ja1NpemUKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHBhZElTTzEwMTI2KCRkYXRhLCAkYmxvY2tTaXplKQogICAgewogICAgICAgIGlmICgkYmxvY2tTaXplID4gMjU2KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0Jsb2NrIHNpemUgaGlnaGVyIHRoYW4gMjU2IG5vdCBhbGxvd2VkJyk7CiAgICAgICAgfQogICAgICAgICRwYWRDaHIgPSAkYmxvY2tTaXplIC0gKHN0cmxlbigkZGF0YSkgJSAkYmxvY2tTaXplKTsKICAgICAgICAkcGF0dGVybiA9IGNocigkcGFkQ2hyKTsKICAgICAgICByZXR1cm4gJGRhdGEgLiBzdHJfcmVwZWF0KCRwYXR0ZXJuLCAkcGFkQ2hyKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlbW92ZSBJU08gMTAxMjYgUGFkZGluZwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gdW5wYWRJU08xMDEyNigkZGF0YSkKICAgIHsKICAgICAgICAkcGFkQ2hyID0gc3Vic3RyKCRkYXRhLCAtMSk7CiAgICAgICAgJHBhZExlbiA9IG9yZCgkcGFkQ2hyKTsKICAgICAgICByZXR1cm4gc3Vic3RyKCRkYXRhLCAwLCAtJHBhZExlbik7CiAgICB9CgogICAgLyoqCiAgICAgKiBFbmNyeXB0cyB0aGUgZ2l2ZW4gZGF0YSAoc3RyaW5nKSB1c2luZyB0aGUgb3BlbnNzbC1leHRlbnNpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGVuY3J5cHRTeW1tZXRyaWMoJGRhdGEpCiAgICB7CiAgICAgICAgJHRoaXMtPml2ID0gb3BlbnNzbF9yYW5kb21fcHNldWRvX2J5dGVzKG9wZW5zc2xfY2lwaGVyX2l2X2xlbmd0aCgkdGhpcy0+Y3J5cHRQYXJhbXNbJ2NpcGhlciddKSk7CiAgICAgICAgJGF1dGhUYWcgPSBudWxsOwogICAgICAgIGlmKGluX2FycmF5KCR0aGlzLT5jcnlwdFBhcmFtc1snY2lwaGVyJ10sIFsnYWVzLTEyOC1nY20nLCAnYWVzLTE5Mi1nY20nLCAnYWVzLTI1Ni1nY20nXSkpIHsKICAgICAgICAgICAgaWYgKHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwgJzcuMS4wJykgPCAwKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdQSFAgNy4xLjAgaXMgcmVxdWlyZWQgdG8gdXNlIEFFUyBHQ00gYWxnb3JpdGhtcycpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRhdXRoVGFnID0gb3BlbnNzbF9yYW5kb21fcHNldWRvX2J5dGVzKHNlbGY6OkFVVEhUQUdfTEVOR1RIKTsKICAgICAgICAgICAgJGVuY3J5cHRlZCA9IG9wZW5zc2xfZW5jcnlwdCgkZGF0YSwgJHRoaXMtPmNyeXB0UGFyYW1zWydjaXBoZXInXSwgJHRoaXMtPmtleSwgT1BFTlNTTF9SQVdfREFUQSwgJHRoaXMtPml2LCAkYXV0aFRhZyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGRhdGEgPSAkdGhpcy0+cGFkSVNPMTAxMjYoJGRhdGEsICR0aGlzLT5jcnlwdFBhcmFtc1snYmxvY2tzaXplJ10pOwogICAgICAgICAgICAkZW5jcnlwdGVkID0gb3BlbnNzbF9lbmNyeXB0KCRkYXRhLCAkdGhpcy0+Y3J5cHRQYXJhbXNbJ2NpcGhlciddLCAkdGhpcy0+a2V5LCBPUEVOU1NMX1JBV19EQVRBIHwgT1BFTlNTTF9aRVJPX1BBRERJTkcsICR0aGlzLT5pdik7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmIChmYWxzZSA9PT0gJGVuY3J5cHRlZCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdGYWlsdXJlIGVuY3J5cHRpbmcgRGF0YSAob3BlbnNzbCBzeW1tZXRyaWMpIC0gJyAuIG9wZW5zc2xfZXJyb3Jfc3RyaW5nKCkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHRoaXMtPml2IC4gJGVuY3J5cHRlZCAuICRhdXRoVGFnOwogICAgfQoKICAgIC8qKgogICAgICogRGVjcnlwdHMgdGhlIGdpdmVuIGRhdGEgKHN0cmluZykgdXNpbmcgdGhlIG9wZW5zc2wtZXh0ZW5zaW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBkZWNyeXB0U3ltbWV0cmljKCRkYXRhKQogICAgewogICAgICAgICRpdl9sZW5ndGggPSBvcGVuc3NsX2NpcGhlcl9pdl9sZW5ndGgoJHRoaXMtPmNyeXB0UGFyYW1zWydjaXBoZXInXSk7CiAgICAgICAgJHRoaXMtPml2ID0gc3Vic3RyKCRkYXRhLCAwLCAkaXZfbGVuZ3RoKTsKICAgICAgICAkZGF0YSA9IHN1YnN0cigkZGF0YSwgJGl2X2xlbmd0aCk7CiAgICAgICAgJGF1dGhUYWcgPSBudWxsOwogICAgICAgIGlmKGluX2FycmF5KCR0aGlzLT5jcnlwdFBhcmFtc1snY2lwaGVyJ10sIFsnYWVzLTEyOC1nY20nLCAnYWVzLTE5Mi1nY20nLCAnYWVzLTI1Ni1nY20nXSkpIHsKICAgICAgICAgICAgaWYgKHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwgJzcuMS4wJykgPCAwKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdQSFAgNy4xLjAgaXMgcmVxdWlyZWQgdG8gdXNlIEFFUyBHQ00gYWxnb3JpdGhtcycpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIG9idGFpbiBhbmQgcmVtb3ZlIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcKICAgICAgICAgICAgJG9mZnNldCA9IDAgLSBzZWxmOjpBVVRIVEFHX0xFTkdUSDsKICAgICAgICAgICAgJGF1dGhUYWcgPSBzdWJzdHIoJGRhdGEsICRvZmZzZXQpOwogICAgICAgICAgICBpZiAoc3RybGVuKCRhdXRoVGFnKSAhPT0gc2VsZjo6QVVUSFRBR19MRU5HVEgpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0F1dGhlbnRpY2F0aW9uIHRhZyBsZW5ndGggaXMgaW52YWxpZCcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRkYXRhID0gc3Vic3RyKCRkYXRhLCAwLCAkb2Zmc2V0KTsKICAgICAgICAgICAgJGRlY3J5cHRlZCA9IG9wZW5zc2xfZGVjcnlwdCgkZGF0YSwgJHRoaXMtPmNyeXB0UGFyYW1zWydjaXBoZXInXSwgJHRoaXMtPmtleSwgT1BFTlNTTF9SQVdfREFUQSwgJHRoaXMtPml2LCAkYXV0aFRhZyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGRlY3J5cHRlZCA9IG9wZW5zc2xfZGVjcnlwdCgkZGF0YSwgJHRoaXMtPmNyeXB0UGFyYW1zWydjaXBoZXInXSwgJHRoaXMtPmtleSwgT1BFTlNTTF9SQVdfREFUQSB8IE9QRU5TU0xfWkVST19QQURESU5HLCAkdGhpcy0+aXYpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoZmFsc2UgPT09ICRkZWNyeXB0ZWQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignRmFpbHVyZSBkZWNyeXB0aW5nIERhdGEgKG9wZW5zc2wgc3ltbWV0cmljKSAtICcgLiBvcGVuc3NsX2Vycm9yX3N0cmluZygpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGwgIT09ICRhdXRoVGFnID8gJGRlY3J5cHRlZCA6ICR0aGlzLT51bnBhZElTTzEwMTI2KCRkZWNyeXB0ZWQpOwogICAgfQoKICAgIC8qKgogICAgICogRW5jcnlwdHMgdGhlIGdpdmVuIHB1YmxpYyBkYXRhIChzdHJpbmcpIHVzaW5nIHRoZSBvcGVuc3NsLWV4dGVuc2lvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGVuY3J5cHRQdWJsaWMoJGRhdGEpCiAgICB7CiAgICAgICAgaWYgKCEgb3BlbnNzbF9wdWJsaWNfZW5jcnlwdCgkZGF0YSwgJGVuY3J5cHRlZCwgJHRoaXMtPmtleSwgJHRoaXMtPmNyeXB0UGFyYW1zWydwYWRkaW5nJ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0ZhaWx1cmUgZW5jcnlwdGluZyBEYXRhIChvcGVuc3NsIHB1YmxpYykgLSAnIC4gb3BlbnNzbF9lcnJvcl9zdHJpbmcoKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkZW5jcnlwdGVkOwogICAgfQoKICAgIC8qKgogICAgICogRGVjcnlwdHMgdGhlIGdpdmVuIHB1YmxpYyBkYXRhIChzdHJpbmcpIHVzaW5nIHRoZSBvcGVuc3NsLWV4dGVuc2lvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGRlY3J5cHRQdWJsaWMoJGRhdGEpCiAgICB7CiAgICAgICAgaWYgKCEgb3BlbnNzbF9wdWJsaWNfZGVjcnlwdCgkZGF0YSwgJGRlY3J5cHRlZCwgJHRoaXMtPmtleSwgJHRoaXMtPmNyeXB0UGFyYW1zWydwYWRkaW5nJ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0ZhaWx1cmUgZGVjcnlwdGluZyBEYXRhIChvcGVuc3NsIHB1YmxpYykgLSAnIC4gb3BlbnNzbF9lcnJvcl9zdHJpbmcoKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkZGVjcnlwdGVkOwogICAgfQoKICAgIC8qKgogICAgICogRW5jcnlwdHMgdGhlIGdpdmVuIHByaXZhdGUgZGF0YSAoc3RyaW5nKSB1c2luZyB0aGUgb3BlbnNzbC1leHRlbnNpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBlbmNyeXB0UHJpdmF0ZSgkZGF0YSkKICAgIHsKICAgICAgICBpZiAoISBvcGVuc3NsX3ByaXZhdGVfZW5jcnlwdCgkZGF0YSwgJGVuY3J5cHRlZCwgJHRoaXMtPmtleSwgJHRoaXMtPmNyeXB0UGFyYW1zWydwYWRkaW5nJ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0ZhaWx1cmUgZW5jcnlwdGluZyBEYXRhIChvcGVuc3NsIHByaXZhdGUpIC0gJyAuIG9wZW5zc2xfZXJyb3Jfc3RyaW5nKCkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGVuY3J5cHRlZDsKICAgIH0KCiAgICAvKioKICAgICAqIERlY3J5cHRzIHRoZSBnaXZlbiBwcml2YXRlIGRhdGEgKHN0cmluZykgdXNpbmcgdGhlIG9wZW5zc2wtZXh0ZW5zaW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZGVjcnlwdFByaXZhdGUoJGRhdGEpCiAgICB7CiAgICAgICAgaWYgKCEgb3BlbnNzbF9wcml2YXRlX2RlY3J5cHQoJGRhdGEsICRkZWNyeXB0ZWQsICR0aGlzLT5rZXksICR0aGlzLT5jcnlwdFBhcmFtc1sncGFkZGluZyddKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdGYWlsdXJlIGRlY3J5cHRpbmcgRGF0YSAob3BlbnNzbCBwcml2YXRlKSAtICcgLiBvcGVuc3NsX2Vycm9yX3N0cmluZygpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRkZWNyeXB0ZWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBTaWducyB0aGUgZ2l2ZW4gZGF0YSAoc3RyaW5nKSB1c2luZyB0aGUgb3BlbnNzbC1leHRlbnNpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBzaWduT3BlblNTTCgkZGF0YSkKICAgIHsKICAgICAgICAkYWxnbyA9IE9QRU5TU0xfQUxHT19TSEExOwogICAgICAgIGlmICghIGVtcHR5KCR0aGlzLT5jcnlwdFBhcmFtc1snZGlnZXN0J10pKSB7CiAgICAgICAgICAgICRhbGdvID0gJHRoaXMtPmNyeXB0UGFyYW1zWydkaWdlc3QnXTsKICAgICAgICB9CiAgICAgICAgaWYgKCEgb3BlbnNzbF9zaWduKCRkYXRhLCAkc2lnbmF0dXJlLCAkdGhpcy0+a2V5LCAkYWxnbykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignRmFpbHVyZSBTaWduaW5nIERhdGE6ICcgLiBvcGVuc3NsX2Vycm9yX3N0cmluZygpIC4gJyAtICcgLiAkYWxnbyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkc2lnbmF0dXJlOwogICAgfQoKICAgIC8qKgogICAgICogVmVyaWZpZXMgdGhlIGdpdmVuIGRhdGEgKHN0cmluZykgYmVsb25naW5nIHRvIHRoZSBnaXZlbiBzaWduYXR1cmUgdXNpbmcgdGhlIG9wZW5zc2wtZXh0ZW5zaW9uCiAgICAgKgogICAgICogUmV0dXJuczoKICAgICAqICAxIG9uIHN1Y2Nlc2Z1bCBzaWduYXR1cmUgdmVyaWZpY2F0aW9uLAogICAgICogIDAgd2hlbiBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZCwKICAgICAqICAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcHJvY2Vzc2luZy4KICAgICAqCiAgICAgKiBOT1RFOiBiZSB2ZXJ5IGNhcmVmdWwgd2hlbiBjaGVja2luZyB0aGUgcmV0dXJuIHZhbHVlLCBiZWNhdXNlIGluIFBIUCwKICAgICAqIC0xIHdpbGwgYmUgY2FzdCB0byBUcnVlIHdoZW4gaW4gYm9vbGVhbiBjb250ZXh0LiBTbyBhbHdheXMgY2hlY2sgdGhlCiAgICAgKiByZXR1cm4gdmFsdWUgaW4gYSBzdHJpY3RseSB0eXBlZCB3YXksIGUuZy4gIiRvYmotPnZlcmlmeSguLi4pID09PSAxIi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzaWduYXR1cmUKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gdmVyaWZ5T3BlblNTTCgkZGF0YSwgJHNpZ25hdHVyZSkKICAgIHsKICAgICAgICAkYWxnbyA9IE9QRU5TU0xfQUxHT19TSEExOwogICAgICAgIGlmICghIGVtcHR5KCR0aGlzLT5jcnlwdFBhcmFtc1snZGlnZXN0J10pKSB7CiAgICAgICAgICAgICRhbGdvID0gJHRoaXMtPmNyeXB0UGFyYW1zWydkaWdlc3QnXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9wZW5zc2xfdmVyaWZ5KCRkYXRhLCAkc2lnbmF0dXJlLCAkdGhpcy0+a2V5LCAkYWxnbyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBFbmNyeXB0cyB0aGUgZ2l2ZW4gZGF0YSAoc3RyaW5nKSB1c2luZyB0aGUgcmVnYXJkaW5nIHBocC1leHRlbnNpb24sIGRlcGVuZGluZyBvbiB0aGUgbGlicmFyeSBhc3NpZ25lZCB0byBhbGdvcml0aG0gaW4gdGhlIGNvbnRydWN0b3IuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YQogICAgICogQHJldHVybiBtaXhlZHxzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVuY3J5cHREYXRhKCRkYXRhKQogICAgewogICAgICAgIGlmICgkdGhpcy0+Y3J5cHRQYXJhbXNbJ2xpYnJhcnknXSA9PT0gJ29wZW5zc2wnKSB7CiAgICAgICAgICAgIHN3aXRjaCAoJHRoaXMtPmNyeXB0UGFyYW1zWyd0eXBlJ10pIHsKICAgICAgICAgICAgICAgIGNhc2UgJ3N5bW1ldHJpYyc6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5lbmNyeXB0U3ltbWV0cmljKCRkYXRhKTsKICAgICAgICAgICAgICAgIGNhc2UgJ3B1YmxpYyc6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5lbmNyeXB0UHVibGljKCRkYXRhKTsKICAgICAgICAgICAgICAgIGNhc2UgJ3ByaXZhdGUnOgogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZW5jcnlwdFByaXZhdGUoJGRhdGEpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRGVjcnlwdHMgdGhlIGdpdmVuIGRhdGEgKHN0cmluZykgdXNpbmcgdGhlIHJlZ2FyZGluZyBwaHAtZXh0ZW5zaW9uLCBkZXBlbmRpbmcgb24gdGhlIGxpYnJhcnkgYXNzaWduZWQgdG8gYWxnb3JpdGhtIGluIHRoZSBjb250cnVjdG9yLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICAgICAqIEByZXR1cm4gbWl4ZWR8c3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWNyeXB0RGF0YSgkZGF0YSkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmNyeXB0UGFyYW1zWydsaWJyYXJ5J10gPT09ICdvcGVuc3NsJykgewogICAgICAgICAgICBzd2l0Y2ggKCR0aGlzLT5jcnlwdFBhcmFtc1sndHlwZSddKSB7CiAgICAgICAgICAgICAgICBjYXNlICdzeW1tZXRyaWMnOgogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZGVjcnlwdFN5bW1ldHJpYygkZGF0YSk7CiAgICAgICAgICAgICAgICBjYXNlICdwdWJsaWMnOgogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZGVjcnlwdFB1YmxpYygkZGF0YSk7CiAgICAgICAgICAgICAgICBjYXNlICdwcml2YXRlJzoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPmRlY3J5cHRQcml2YXRlKCRkYXRhKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFNpZ25zIHRoZSBkYXRhIChzdHJpbmcpIHVzaW5nIHRoZSBleHRlbnNpb24gYXNzaWduZWQgdG8gdGhlIHR5cGUgaW4gdGhlIGNvbnN0cnVjdG9yLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICAgICAqIEByZXR1cm4gbWl4ZWR8c3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaWduRGF0YSgkZGF0YSkKICAgIHsKICAgICAgICBzd2l0Y2ggKCR0aGlzLT5jcnlwdFBhcmFtc1snbGlicmFyeSddKSB7CiAgICAgICAgICAgIGNhc2UgJ29wZW5zc2wnOgogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5zaWduT3BlblNTTCgkZGF0YSk7CiAgICAgICAgICAgIGNhc2UgKHNlbGY6OkhNQUNfU0hBMSk6CiAgICAgICAgICAgICAgICByZXR1cm4gaGFzaF9obWFjKCJzaGExIiwgJGRhdGEsICR0aGlzLT5rZXksIHRydWUpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFZlcmlmaWVzIHRoZSBkYXRhIChzdHJpbmcpIGFnYWluc3QgdGhlIGdpdmVuIHNpZ25hdHVyZSB1c2luZyB0aGUgZXh0ZW5zaW9uIGFzc2lnbmVkIHRvIHRoZSB0eXBlIGluIHRoZSBjb25zdHJ1Y3Rvci4KICAgICAqCiAgICAgKiBSZXR1cm5zIGluIGNhc2Ugb2Ygb3BlblNTTDoKICAgICAqICAxIG9uIHN1Y2Nlc2Z1bCBzaWduYXR1cmUgdmVyaWZpY2F0aW9uLAogICAgICogIDAgd2hlbiBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZCwKICAgICAqICAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcHJvY2Vzc2luZy4KICAgICAqCiAgICAgKiBOT1RFOiBiZSB2ZXJ5IGNhcmVmdWwgd2hlbiBjaGVja2luZyB0aGUgcmV0dXJuIHZhbHVlLCBiZWNhdXNlIGluIFBIUCwKICAgICAqIC0xIHdpbGwgYmUgY2FzdCB0byBUcnVlIHdoZW4gaW4gYm9vbGVhbiBjb250ZXh0LiBTbyBhbHdheXMgY2hlY2sgdGhlCiAgICAgKiByZXR1cm4gdmFsdWUgaW4gYSBzdHJpY3RseSB0eXBlZCB3YXksIGUuZy4gIiRvYmotPnZlcmlmeSguLi4pID09PSAxIi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzaWduYXR1cmUKICAgICAqIEByZXR1cm4gYm9vbHxpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHZlcmlmeVNpZ25hdHVyZSgkZGF0YSwgJHNpZ25hdHVyZSkKICAgIHsKICAgICAgICBzd2l0Y2ggKCR0aGlzLT5jcnlwdFBhcmFtc1snbGlicmFyeSddKSB7CiAgICAgICAgICAgIGNhc2UgJ29wZW5zc2wnOgogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT52ZXJpZnlPcGVuU1NMKCRkYXRhLCAkc2lnbmF0dXJlKTsKICAgICAgICAgICAgY2FzZSAoc2VsZjo6SE1BQ19TSEExKToKICAgICAgICAgICAgICAgICRleHBlY3RlZFNpZ25hdHVyZSA9IGhhc2hfaG1hYygic2hhMSIsICRkYXRhLCAkdGhpcy0+a2V5LCB0cnVlKTsKICAgICAgICAgICAgICAgIHJldHVybiBzdHJjbXAoJHNpZ25hdHVyZSwgJGV4cGVjdGVkU2lnbmF0dXJlKSA9PSAwOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKiBAc2VlIGdldEFsZ29yaXRobSgpCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBbGdvcml0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRBbGdvcml0aG0oKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEFsZ29yaXRobSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jcnlwdFBhcmFtc1snbWV0aG9kJ107CiAgICB9CgogICAgLyoqCiAgICAgKgogICAgICogQHBhcmFtIGludCAkdHlwZQogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nCiAgICAgKiBAcmV0dXJuIG51bGx8c3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWFrZUFzblNlZ21lbnQoJHR5cGUsICRzdHJpbmcpCiAgICB7CiAgICAgICAgc3dpdGNoICgkdHlwZSkgewogICAgICAgICAgICBjYXNlIDB4MDI6CiAgICAgICAgICAgICAgICBpZiAob3JkKCRzdHJpbmcpID4gMHg3ZikKICAgICAgICAgICAgICAgICAgICAkc3RyaW5nID0gY2hyKDApLiRzdHJpbmc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAweDAzOgogICAgICAgICAgICAgICAgJHN0cmluZyA9IGNocigwKS4kc3RyaW5nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICAkbGVuZ3RoID0gc3RybGVuKCRzdHJpbmcpOwoKICAgICAgICBpZiAoJGxlbmd0aCA8IDEyOCkgewogICAgICAgICAgICAkb3V0cHV0ID0gc3ByaW50ZigiJWMlYyVzIiwgJHR5cGUsICRsZW5ndGgsICRzdHJpbmcpOwogICAgICAgIH0gZWxzZSBpZiAoJGxlbmd0aCA8IDB4MDEwMCkgewogICAgICAgICAgICAkb3V0cHV0ID0gc3ByaW50ZigiJWMlYyVjJXMiLCAkdHlwZSwgMHg4MSwgJGxlbmd0aCwgJHN0cmluZyk7CiAgICAgICAgfSBlbHNlIGlmICgkbGVuZ3RoIDwgMHgwMTAwMDApIHsKICAgICAgICAgICAgJG91dHB1dCA9IHNwcmludGYoIiVjJWMlYyVjJXMiLCAkdHlwZSwgMHg4MiwgJGxlbmd0aCAvIDB4MDEwMCwgJGxlbmd0aCAlIDB4MDEwMCwgJHN0cmluZyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG91dHB1dCA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkb3V0cHV0OwogICAgfQoKICAgIC8qKgogICAgICoKICAgICAqIEhpbnQ6IE1vZHVsdXMgYW5kIEV4cG9uZW50IG11c3QgYWxyZWFkeSBiZSBiYXNlNjQgZGVjb2RlZAogICAgICogQHBhcmFtIHN0cmluZyAkbW9kdWx1cwogICAgICogQHBhcmFtIHN0cmluZyAkZXhwb25lbnQKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29udmVydFJTQSgkbW9kdWx1cywgJGV4cG9uZW50KQogICAgewogICAgICAgIC8qIG1ha2UgYW4gQVNOIHB1YmxpY0tleUluZm8gKi8KICAgICAgICAkZXhwb25lbnRFbmNvZGluZyA9IHNlbGY6Om1ha2VBc25TZWdtZW50KDB4MDIsICRleHBvbmVudCk7CiAgICAgICAgJG1vZHVsdXNFbmNvZGluZyA9IHNlbGY6Om1ha2VBc25TZWdtZW50KDB4MDIsICRtb2R1bHVzKTsKICAgICAgICAkc2VxdWVuY2VFbmNvZGluZyA9IHNlbGY6Om1ha2VBc25TZWdtZW50KDB4MzAsICRtb2R1bHVzRW5jb2RpbmcuJGV4cG9uZW50RW5jb2RpbmcpOwogICAgICAgICRiaXRzdHJpbmdFbmNvZGluZyA9IHNlbGY6Om1ha2VBc25TZWdtZW50KDB4MDMsICRzZXF1ZW5jZUVuY29kaW5nKTsKICAgICAgICAkcnNhQWxnb3JpdGhtSWRlbnRpZmllciA9IHBhY2soIkgqIiwgIjMwMEQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMCIpOwogICAgICAgICRwdWJsaWNLZXlJbmZvID0gc2VsZjo6bWFrZUFzblNlZ21lbnQoMHgzMCwgJHJzYUFsZ29yaXRobUlkZW50aWZpZXIuJGJpdHN0cmluZ0VuY29kaW5nKTsKCiAgICAgICAgLyogZW5jb2RlIHRoZSBwdWJsaWNLZXlJbmZvIGluIGJhc2U2NCBhbmQgYWRkIFBFTSBicmFja2V0cyAqLwogICAgICAgICRwdWJsaWNLZXlJbmZvQmFzZTY0ID0gYmFzZTY0X2VuY29kZSgkcHVibGljS2V5SW5mbyk7CiAgICAgICAgJGVuY29kaW5nID0gIi0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXG4iOwogICAgICAgICRvZmZzZXQgPSAwOwogICAgICAgIHdoaWxlICgkc2VnbWVudCA9IHN1YnN0cigkcHVibGljS2V5SW5mb0Jhc2U2NCwgJG9mZnNldCwgNjQpKSB7CiAgICAgICAgICAgICRlbmNvZGluZyA9ICRlbmNvZGluZy4kc2VnbWVudC4iXG4iOwogICAgICAgICAgICAkb2Zmc2V0ICs9IDY0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGVuY29kaW5nLiItLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1cbiI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHBhcmVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VyaWFsaXplS2V5KCRwYXJlbnQpCiAgICB7CgogICAgfQoKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIFg1MDkgY2VydGlmaWNhdGUgdGhpcyBrZXkgcmVwcmVzZW50cy4KICAgICAqCiAgICAgKiBXaWxsIHJldHVybiB0aGUgWDUwOSBjZXJ0aWZpY2F0ZSBpbiBQRU0tZm9ybWF0IGlmIHRoaXMga2V5IHJlcHJlc2VudHMKICAgICAqIGFuIFg1MDkgY2VydGlmaWNhdGUuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIFg1MDkgY2VydGlmaWNhdGUgb3IgbnVsbCBpZiB0aGlzIGtleSBkb2Vzbid0IHJlcHJlc2VudCBhbiBYNTA5LWNlcnRpZmljYXRlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0WDUwOUNlcnRpZmljYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPng1MDlDZXJ0aWZpY2F0ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgdGh1bWJwcmludCBvZiB0aGlzIFg1MDkgY2VydGlmaWNhdGUuCiAgICAgKgogICAgICogUmV0dXJuczoKICAgICAqICBUaGUgdGh1bWJwcmludCBhcyBhIGxvd2VyY2FzZSA0MC1jaGFyYWN0ZXIgaGV4YWRlY2ltYWwgbnVtYmVyLCBvciBudWxsCiAgICAgKiAgaWYgdGhpcyBpc24ndCBhIFg1MDkgY2VydGlmaWNhdGUuCiAgICAgKgogICAgICogIEByZXR1cm4gc3RyaW5nIExvd2VyY2FzZSA0MC1jaGFyYWN0ZXIgaGV4YWRlY2ltYWwgbnVtYmVyIG9mIHRodW1icHJpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFg1MDlUaHVtYnByaW50KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPlg1MDlUaHVtYnByaW50OwogICAgfQoKCiAgICAvKioKICAgICAqIENyZWF0ZSBrZXkgZnJvbSBhbiBFbmNyeXB0ZWRLZXktZWxlbWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gRE9NRWxlbWVudCAkZWxlbWVudCBUaGUgRW5jcnlwdGVkS2V5LWVsZW1lbnQuCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICoKICAgICAqIEByZXR1cm4gWE1MU2VjdXJpdHlLZXkgVGhlIG5ldyBrZXkuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUVuY3J5cHRlZEtleUVsZW1lbnQoRE9NRWxlbWVudCAkZWxlbWVudCkKICAgIHsKCiAgICAgICAgJG9iamVuYyA9IG5ldyBYTUxTZWNFbmMoKTsKICAgICAgICAkb2JqZW5jLT5zZXROb2RlKCRlbGVtZW50KTsKICAgICAgICBpZiAoISAkb2JqS2V5ID0gJG9iamVuYy0+bG9jYXRlS2V5KCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVW5hYmxlIHRvIGxvY2F0ZSBhbGdvcml0aG0gZm9yIHRoaXMgRW5jcnlwdGVkIEtleSIpOwogICAgICAgIH0KICAgICAgICAkb2JqS2V5LT5pc0VuY3J5cHRlZCA9IHRydWU7CiAgICAgICAgJG9iaktleS0+ZW5jcnlwdGVkQ3R4ID0gJG9iamVuYzsKICAgICAgICBYTUxTZWNFbmM6OnN0YXRpY0xvY2F0ZUtleUluZm8oJG9iaktleSwgJGVsZW1lbnQpOwogICAgICAgIHJldHVybiAkb2JqS2V5OwogICAgfQoKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/robrichards/xmlseclibs/xmlseclibs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIHhtbHNlY2xpYnMucGhwCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNy0yMDI0LCBSb2JlcnQgUmljaGFyZHMgPHJyaWNoYXJkc0BjZGF0YXpvbmUub3JnPi4KICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0OgogKgogKiAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICoKICogICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KICogICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKICogICAgIGRpc3RyaWJ1dGlvbi4KICoKICogICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgUm9iZXJ0IFJpY2hhcmRzIG5vciB0aGUgbmFtZXMgb2YgaGlzCiAqICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwogKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQogKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCiAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCiAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgogKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KICogQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAYXV0aG9yICAgIFJvYmVydCBSaWNoYXJkcyA8cnJpY2hhcmRzQGNkYXRhem9uZS5vcmc+CiAqIEBjb3B5cmlnaHQgMjAwNy0yMDI0IFJvYmVydCBSaWNoYXJkcyA8cnJpY2hhcmRzQGNkYXRhem9uZS5vcmc+CiAqIEBsaWNlbnNlICAgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHAgIEJTRCBMaWNlbnNlCiAqIEB2ZXJzaW9uICAgMy4xLjMKICovCgokeG1sc2VjbGlic19zcmNkaXIgPSBkaXJuYW1lKF9fRklMRV9fKSAuICcvc3JjLyc7CnJlcXVpcmUgJHhtbHNlY2xpYnNfc3JjZGlyIC4gJy9YTUxTZWN1cml0eUtleS5waHAnOwpyZXF1aXJlICR4bWxzZWNsaWJzX3NyY2RpciAuICcvWE1MU2VjdXJpdHlEU2lnLnBocCc7CnJlcXVpcmUgJHhtbHNlY2xpYnNfc3JjZGlyIC4gJy9YTUxTZWNFbmMucGhwJzsKcmVxdWlyZSAkeG1sc2VjbGlic19zcmNkaXIgLiAnL1V0aWxzL1hQYXRoLnBocCc7Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/base64url/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/base64url/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAic3BvbWt5LWxhYnMvYmFzZTY0dXJsIiwKICAgICJkZXNjcmlwdGlvbiI6ICJCYXNlIDY0IFVSTCBTYWZlIEVuY29kaW5nL0RlY29kaW5nIFBIUCBMaWJyYXJ5IiwKICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICJrZXl3b3JkcyI6IFsiQmFzZTY0IiwgIlVSTCIsICJTYWZlIiwgIlJGQzQ2NDgiXSwKICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5LUxhYnMvYmFzZTY0dXJsIiwKICAgICJhdXRob3JzIjogWwogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiRmxvcmVudCBNb3JzZWxsaSIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5LUxhYnMvYmFzZTY0dXJsL2NvbnRyaWJ1dG9ycyIKICAgICAgICB9CiAgICBdLAogICAgImF1dG9sb2FkIjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIkJhc2U2NFVybFxcIjogICJzcmMvIgogICAgICAgIH0KICAgIH0sCiAgICAiYXV0b2xvYWQtZGV2IjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIkJhc2U2NFVybFxcVGVzdFxcIjogICJ0ZXN0cy8iCiAgICAgICAgfQogICAgfSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiOiAiPj03LjEiCiAgICB9LAogICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICJwaHBzdGFuL2V4dGVuc2lvbi1pbnN0YWxsZXIiOiAiXjEuMCIsCiAgICAgICAgInBocHN0YW4vcGhwc3RhbiI6ICJeMC4xMXxeMC4xMiIsCiAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1iZWJlcmxlaS1hc3NlcnQiOiAiXjAuMTF8XjAuMTIiLAogICAgICAgICJwaHBzdGFuL3BocHN0YW4tZGVwcmVjYXRpb24tcnVsZXMiOiAiXjAuMTF8XjAuMTIiLAogICAgICAgICJwaHBzdGFuL3BocHN0YW4tcGhwdW5pdCI6ICJeMC4xMXxeMC4xMiIsCiAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1zdHJpY3QtcnVsZXMiOiAiXjAuMTF8XjAuMTIiCiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/base64url/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOCBTcG9ta3ktTGFicwoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4KCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/base64url/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/base64url/src/Base64Url.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEJhc2U2NFVybDsKCnVzZSBmdW5jdGlvbiBiYXNlNjRfZGVjb2RlOwp1c2UgZnVuY3Rpb24gYmFzZTY0X2VuY29kZTsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIGZ1bmN0aW9uIHJ0cmltOwp1c2UgZnVuY3Rpb24gc3RydHI7CgovKioKICogRW5jb2RlIGFuZCBkZWNvZGUgZGF0YSBpbnRvIEJhc2U2NCBVcmwgU2FmZS4KICovCmZpbmFsIGNsYXNzIEJhc2U2NFVybAp7CiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgICAgICAgVGhlIGRhdGEgdG8gZW5jb2RlCiAgICAgKiBAcGFyYW0gYm9vbCAgICR1c2VQYWRkaW5nIElmIHRydWUsIHRoZSAiPSIgcGFkZGluZyBhdCBlbmQgb2YgdGhlIGVuY29kZWQgdmFsdWUgYXJlIGtlcHQsIGVsc2UgaXQgaXMgcmVtb3ZlZAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBkYXRhIGVuY29kZWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBlbmNvZGUoc3RyaW5nICRkYXRhLCBib29sICR1c2VQYWRkaW5nID0gZmFsc2UpOiBzdHJpbmcKICAgIHsKICAgICAgICAkZW5jb2RlZCA9IHN0cnRyKGJhc2U2NF9lbmNvZGUoJGRhdGEpLCAnKy8nLCAnLV8nKTsKCiAgICAgICAgcmV0dXJuIHRydWUgPT09ICR1c2VQYWRkaW5nID8gJGVuY29kZWQgOiBydHJpbSgkZW5jb2RlZCwgJz0nKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIGRhdGEgdG8gZGVjb2RlCiAgICAgKgogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgZGF0YSBkZWNvZGVkCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGVjb2RlKHN0cmluZyAkZGF0YSk6IHN0cmluZwogICAgewogICAgICAgICRkZWNvZGVkID0gYmFzZTY0X2RlY29kZShzdHJ0cigkZGF0YSwgJy1fJywgJysvJyksIHRydWUpOwogICAgICAgIGlmIChmYWxzZSA9PT0gJGRlY29kZWQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBkYXRhIHByb3ZpZGVkJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGRlY29kZWQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAic3BvbWt5LWxhYnMvY2Jvci1waHAiLAogICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImtleXdvcmRzIjogWyJDQk9SIiwgIkNvbmNpc2UgQmluYXJ5IE9iamVjdCBSZXByZXNlbnRhdGlvbiIsICJSRkM3MDQ5Il0sCiAgICAiZGVzY3JpcHRpb24iOiAiQ0JPUiBFbmNvZGVyL0RlY29kZXIgZm9yIFBIUCIsCiAgICAiYXV0aG9ycyI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIkZsb3JlbnQgTW9yc2VsbGkiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reSIKICAgICAgICB9LHsKICAgICAgICAgICAgIm5hbWUiOiAiQWxsIGNvbnRyaWJ1dG9ycyIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5LUxhYnMvY2Jvci1waHAvY29udHJpYnV0b3JzIgogICAgICAgIH0KICAgIF0sCiAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiQ0JPUlxcIjogInNyYy8iCiAgICAgICAgfQogICAgfSwKICAgICJhdXRvbG9hZC1kZXYiOiB7CiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiQ0JPUlxcVGVzdFxcIjogInRlc3RzLyIKICAgICAgICB9CiAgICB9LAogICAgInJlcXVpcmUiOiB7CiAgICAgICAgInBocCI6ICI+PTcuMyIsCiAgICAgICAgImJyaWNrL21hdGgiOiAiXjAuOC4xNXxeMC45LjAiLAogICAgICAgICJleHQtbWJzdHJpbmciOiAiKiIKICAgIH0sCiAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgImV4dC1qc29uIjogIioiLAogICAgICAgICJla2luby9waHBzdGFuLWJhbm5lZC1jb2RlIjogIl4xLjAiLAogICAgICAgICJpbmZlY3Rpb24vaW5mZWN0aW9uIjogIl4wLjE4fF4wLjI1IiwKICAgICAgICAicGhwc3Rhbi9leHRlbnNpb24taW5zdGFsbGVyIjogIl4xLjEiLAogICAgICAgICJwaHBzdGFuL3BocHN0YW4iOiAiXjEuMCIsCiAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1iZWJlcmxlaS1hc3NlcnQiOiAiXjEuMCIsCiAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1kZXByZWNhdGlvbi1ydWxlcyI6ICJeMS4wIiwKICAgICAgICAicGhwc3Rhbi9waHBzdGFuLXBocHVuaXQiOiAiXjEuMCIsCiAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1zdHJpY3QtcnVsZXMiOiAiXjEuMCIsCiAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeOS41IiwKICAgICAgICAicmVjdG9yL3JlY3RvciI6ICJeMC4xMiIsCiAgICAgICAgInJvYXZlL3NlY3VyaXR5LWFkdmlzb3JpZXMiOiAiZGV2LWxhdGVzdCIsCiAgICAgICAgInN5bXBsaWZ5L2Vhc3ktY29kaW5nLXN0YW5kYXJkIjogIl4xMC4wIgogICAgfSwKICAgICJjb25maWciOiB7CiAgICAgICAgInNvcnQtcGFja2FnZXMiOiB0cnVlCiAgICB9LAogICAgInN1Z2dlc3QiOiB7CiAgICAgICAgImV4dC1nbXAiOiAiR01QIG9yIEJDTWF0aCBleHRlbnNpb25zIHdpbGwgZHJhc3RpY2FsbHkgaW1wcm92ZSB0aGUgbGlicmFyeSBwZXJmb3JtYW5jZSIsCiAgICAgICAgImV4dC1iY21hdGgiOiAiR01QIG9yIEJDTWF0aCBleHRlbnNpb25zIHdpbGwgZHJhc3RpY2FsbHkgaW1wcm92ZSB0aGUgbGlicmFyeSBwZXJmb3JtYW5jZS4gQkNNYXRoIGV4dGVuc2lvbiBuZWVkZWQgdG8gaGFuZGxlIHRoZSBCaWcgRmxvYXQgYW5kIERlY2ltYWwgRnJhY3Rpb24gVGFncyIKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[TUlUIExpY2Vuc2UKCkNvcHlyaWdodCAoYykgMjAxOCBTcG9ta3ktTGFicwoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/AbstractCBORObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7Cgp1c2UgZnVuY3Rpb24gY2hyOwoKYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RDQk9ST2JqZWN0IGltcGxlbWVudHMgQ0JPUk9iamVjdAp7CiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByb3RlY3RlZCAkYWRkaXRpb25hbEluZm9ybWF0aW9uOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkbWFqb3JUeXBlOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpbnQgJG1ham9yVHlwZSwgaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24pCiAgICB7CiAgICAgICAgJHRoaXMtPm1ham9yVHlwZSA9ICRtYWpvclR5cGU7CiAgICAgICAgJHRoaXMtPmFkZGl0aW9uYWxJbmZvcm1hdGlvbiA9ICRhZGRpdGlvbmFsSW5mb3JtYXRpb247CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIGNocigkdGhpcy0+bWFqb3JUeXBlIDw8IDUgfCAkdGhpcy0+YWRkaXRpb25hbEluZm9ybWF0aW9uKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWFqb3JUeXBlKCk6IGludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bWFqb3JUeXBlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBZGRpdGlvbmFsSW5mb3JtYXRpb24oKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hZGRpdGlvbmFsSW5mb3JtYXRpb247CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/ByteStringObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgpmaW5hbCBjbGFzcyBCeXRlU3RyaW5nT2JqZWN0IGV4dGVuZHMgQWJzdHJhY3RDQk9ST2JqZWN0IGltcGxlbWVudHMgTm9ybWFsaXphYmxlCnsKICAgIHByaXZhdGUgY29uc3QgTUFKT1JfVFlQRSA9IHNlbGY6Ok1BSk9SX1RZUEVfQllURV9TVFJJTkc7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICR2YWx1ZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkbGVuZ3RoOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJGRhdGEpCiAgICB7CiAgICAgICAgWyRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRsZW5ndGhdID0gTGVuZ3RoQ2FsY3VsYXRvcjo6Z2V0TGVuZ3RoT2ZTdHJpbmcoJGRhdGEpOwoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KHNlbGY6Ok1BSk9SX1RZUEUsICRhZGRpdGlvbmFsSW5mb3JtYXRpb24pOwogICAgICAgICR0aGlzLT5sZW5ndGggPSAkbGVuZ3RoOwogICAgICAgICR0aGlzLT52YWx1ZSA9ICRkYXRhOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgICRyZXN1bHQgPSBwYXJlbnQ6Ol9fdG9TdHJpbmcoKTsKICAgICAgICBpZiAoJHRoaXMtPmxlbmd0aCAhPT0gbnVsbCkgewogICAgICAgICAgICAkcmVzdWx0IC49ICR0aGlzLT5sZW5ndGg7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdCAuICR0aGlzLT52YWx1ZTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShzdHJpbmcgJGRhdGEpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRkYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmFsdWUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGVuZ3RoKCk6IGludAogICAgewogICAgICAgIHJldHVybiBtYl9zdHJsZW4oJHRoaXMtPnZhbHVlLCAnOGJpdCcpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBub3JtYWxpemUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoZSBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIG9uIHYzLjAuIFBsZWFzZSByZWx5IG9uIHRoZSBDQk9SXE5vcm1hbGl6YWJsZSBpbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vcm1hbGl6ZWREYXRhKGJvb2wgJGlnbm9yZVRhZ3MgPSBmYWxzZSk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWU7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/ByteStringWithChunkObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgovKioKICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGluIHYzLjAuIFBsZWFzZSB1c2UgSW5kZWZpbml0ZUxlbmd0aEJ5dGVTdHJpbmdPYmplY3QgaW5zdGVhZAogKi8KZmluYWwgY2xhc3MgQnl0ZVN0cmluZ1dpdGhDaHVua09iamVjdCBleHRlbmRzIEluZGVmaW5pdGVMZW5ndGhCeXRlU3RyaW5nT2JqZWN0CnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/CBORObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgppbnRlcmZhY2UgQ0JPUk9iamVjdAp7CiAgICBwdWJsaWMgY29uc3QgTUFKT1JfVFlQRV9VTlNJR05FRF9JTlRFR0VSID0gMGIwMDA7CgogICAgcHVibGljIGNvbnN0IE1BSk9SX1RZUEVfTkVHQVRJVkVfSU5URUdFUiA9IDBiMDAxOwoKICAgIHB1YmxpYyBjb25zdCBNQUpPUl9UWVBFX0JZVEVfU1RSSU5HID0gMGIwMTA7CgogICAgcHVibGljIGNvbnN0IE1BSk9SX1RZUEVfVEVYVF9TVFJJTkcgPSAwYjAxMTsKCiAgICBwdWJsaWMgY29uc3QgTUFKT1JfVFlQRV9MSVNUID0gMGIxMDA7CgogICAgcHVibGljIGNvbnN0IE1BSk9SX1RZUEVfTUFQID0gMGIxMDE7CgogICAgcHVibGljIGNvbnN0IE1BSk9SX1RZUEVfVEFHID0gMGIxMTA7CgogICAgcHVibGljIGNvbnN0IE1BSk9SX1RZUEVfT1RIRVJfVFlQRSA9IDBiMTExOwoKICAgIHB1YmxpYyBjb25zdCBMRU5HVEhfMV9CWVRFID0gMGIwMDAxMTAwMDsKCiAgICBwdWJsaWMgY29uc3QgTEVOR1RIXzJfQllURVMgPSAwYjAwMDExMDAxOwoKICAgIHB1YmxpYyBjb25zdCBMRU5HVEhfNF9CWVRFUyA9IDBiMDAwMTEwMTA7CgogICAgcHVibGljIGNvbnN0IExFTkdUSF84X0JZVEVTID0gMGIwMDAxMTAxMTsKCiAgICBwdWJsaWMgY29uc3QgTEVOR1RIX0lOREVGSU5JVEUgPSAwYjAwMDExMTExOwoKICAgIHB1YmxpYyBjb25zdCBGVVRVUkVfVVNFXzEgPSAwYjAwMDExMTAwOwoKICAgIHB1YmxpYyBjb25zdCBGVVRVUkVfVVNFXzIgPSAwYjAwMDExMTAxOwoKICAgIHB1YmxpYyBjb25zdCBGVVRVUkVfVVNFXzMgPSAwYjAwMDExMTEwOwoKICAgIHB1YmxpYyBjb25zdCBPQkpFQ1RfRkFMU0UgPSAyMDsKCiAgICBwdWJsaWMgY29uc3QgT0JKRUNUX1RSVUUgPSAyMTsKCiAgICBwdWJsaWMgY29uc3QgT0JKRUNUX05VTEwgPSAyMjsKCiAgICBwdWJsaWMgY29uc3QgT0JKRUNUX1VOREVGSU5FRCA9IDIzOwoKICAgIHB1YmxpYyBjb25zdCBPQkpFQ1RfU0lNUExFX1ZBTFVFID0gMjQ7CgogICAgcHVibGljIGNvbnN0IE9CSkVDVF9IQUxGX1BSRUNJU0lPTl9GTE9BVCA9IDI1OwoKICAgIHB1YmxpYyBjb25zdCBPQkpFQ1RfU0lOR0xFX1BSRUNJU0lPTl9GTE9BVCA9IDI2OwoKICAgIHB1YmxpYyBjb25zdCBPQkpFQ1RfRE9VQkxFX1BSRUNJU0lPTl9GTE9BVCA9IDI3OwoKICAgIHB1YmxpYyBjb25zdCBPQkpFQ1RfQlJFQUsgPSAwYjAwMDExMTExOwoKICAgIHB1YmxpYyBjb25zdCBUQUdfU1RBTkRBUkRfREFURVRJTUUgPSAwOwoKICAgIHB1YmxpYyBjb25zdCBUQUdfRVBPQ0hfREFURVRJTUUgPSAxOwoKICAgIHB1YmxpYyBjb25zdCBUQUdfVU5TSUdORURfQklHX05VTSA9IDI7CgogICAgcHVibGljIGNvbnN0IFRBR19ORUdBVElWRV9CSUdfTlVNID0gMzsKCiAgICBwdWJsaWMgY29uc3QgVEFHX0RFQ0lNQUxfRlJBQ1RJT04gPSA0OwoKICAgIHB1YmxpYyBjb25zdCBUQUdfQklHX0ZMT0FUID0gNTsKCiAgICBwdWJsaWMgY29uc3QgVEFHX0VOQ09ERURfQkFTRTY0X1VSTCA9IDIxOwoKICAgIHB1YmxpYyBjb25zdCBUQUdfRU5DT0RFRF9CQVNFNjQgPSAyMjsKCiAgICBwdWJsaWMgY29uc3QgVEFHX0VOQ09ERURfQkFTRTE2ID0gMjM7CgogICAgcHVibGljIGNvbnN0IFRBR19FTkNPREVEX0NCT1IgPSAyNDsKCiAgICBwdWJsaWMgY29uc3QgVEFHX1VSSSA9IDMyOwoKICAgIHB1YmxpYyBjb25zdCBUQUdfQkFTRTY0X1VSTCA9IDMzOwoKICAgIHB1YmxpYyBjb25zdCBUQUdfQkFTRTY0ID0gMzQ7CgogICAgcHVibGljIGNvbnN0IFRBR19NSU1FID0gMzY7CgogICAgcHVibGljIGNvbnN0IFRBR19DQk9SID0gNTU3OTk7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKTogc3RyaW5nOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNYWpvclR5cGUoKTogaW50OwoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBZGRpdGlvbmFsSW5mb3JtYXRpb24oKTogaW50OwoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWR8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGEoYm9vbCAkaWdub3JlVGFncyA9IGZhbHNlKTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Decoder.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7Cgp1c2UgQ0JPUlxPdGhlck9iamVjdFxCcmVha09iamVjdDsKdXNlIENCT1JcT3RoZXJPYmplY3RcRG91YmxlUHJlY2lzaW9uRmxvYXRPYmplY3Q7CnVzZSBDQk9SXE90aGVyT2JqZWN0XEZhbHNlT2JqZWN0Owp1c2UgQ0JPUlxPdGhlck9iamVjdFxIYWxmUHJlY2lzaW9uRmxvYXRPYmplY3Q7CnVzZSBDQk9SXE90aGVyT2JqZWN0XE51bGxPYmplY3Q7CnVzZSBDQk9SXE90aGVyT2JqZWN0XE90aGVyT2JqZWN0TWFuYWdlcjsKdXNlIENCT1JcT3RoZXJPYmplY3RcT3RoZXJPYmplY3RNYW5hZ2VySW50ZXJmYWNlOwp1c2UgQ0JPUlxPdGhlck9iamVjdFxTaW1wbGVPYmplY3Q7CnVzZSBDQk9SXE90aGVyT2JqZWN0XFNpbmdsZVByZWNpc2lvbkZsb2F0T2JqZWN0Owp1c2UgQ0JPUlxPdGhlck9iamVjdFxUcnVlT2JqZWN0Owp1c2UgQ0JPUlxPdGhlck9iamVjdFxVbmRlZmluZWRPYmplY3Q7CnVzZSBDQk9SXFRhZ1xCYXNlMTZFbmNvZGluZ1RhZzsKdXNlIENCT1JcVGFnXEJhc2U2NEVuY29kaW5nVGFnOwp1c2UgQ0JPUlxUYWdcQmFzZTY0VGFnOwp1c2UgQ0JPUlxUYWdcQmFzZTY0VXJsRW5jb2RpbmdUYWc7CnVzZSBDQk9SXFRhZ1xCYXNlNjRVcmxUYWc7CnVzZSBDQk9SXFRhZ1xCaWdGbG9hdFRhZzsKdXNlIENCT1JcVGFnXENCT1JFbmNvZGluZ1RhZzsKdXNlIENCT1JcVGFnXENCT1JUYWc7CnVzZSBDQk9SXFRhZ1xEYXRldGltZVRhZzsKdXNlIENCT1JcVGFnXERlY2ltYWxGcmFjdGlvblRhZzsKdXNlIENCT1JcVGFnXE1pbWVUYWc7CnVzZSBDQk9SXFRhZ1xOZWdhdGl2ZUJpZ0ludGVnZXJUYWc7CnVzZSBDQk9SXFRhZ1xUYWdNYW5hZ2VyOwp1c2UgQ0JPUlxUYWdcVGFnTWFuYWdlckludGVyZmFjZTsKdXNlIENCT1JcVGFnXFRpbWVzdGFtcFRhZzsKdXNlIENCT1JcVGFnXFVuc2lnbmVkQmlnSW50ZWdlclRhZzsKdXNlIENCT1JcVGFnXFVyaVRhZzsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIGZ1bmN0aW9uIG9yZDsKdXNlIFJ1bnRpbWVFeGNlcHRpb247CnVzZSBjb25zdCBTVFJfUEFEX0xFRlQ7CgpmaW5hbCBjbGFzcyBEZWNvZGVyIGltcGxlbWVudHMgRGVjb2RlckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgVGFnXFRhZ01hbmFnZXJJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkdGFnTWFuYWdlcjsKCiAgICAvKioKICAgICAqIEB2YXIgT3RoZXJPYmplY3RcT3RoZXJPYmplY3RNYW5hZ2VySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJG90aGVyT2JqZWN0TWFuYWdlcjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgP1RhZ01hbmFnZXJJbnRlcmZhY2UgJHRhZ01hbmFnZXIgPSBudWxsLAogICAgICAgID9PdGhlck9iamVjdE1hbmFnZXJJbnRlcmZhY2UgJG90aGVyVHlwZU1hbmFnZXIgPSBudWxsCiAgICApIHsKICAgICAgICAkdGhpcy0+dGFnTWFuYWdlciA9ICR0YWdNYW5hZ2VyID8/ICR0aGlzLT5nZW5lcmF0ZVRhZ01hbmFnZXIoKTsKICAgICAgICAkdGhpcy0+b3RoZXJPYmplY3RNYW5hZ2VyID0gJG90aGVyVHlwZU1hbmFnZXIgPz8gJHRoaXMtPmdlbmVyYXRlT3RoZXJPYmplY3RNYW5hZ2VyKCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoCiAgICAgICAgP1RhZ01hbmFnZXJJbnRlcmZhY2UgJHRhZ01hbmFnZXIgPSBudWxsLAogICAgICAgID9PdGhlck9iamVjdE1hbmFnZXJJbnRlcmZhY2UgJG90aGVyT2JqZWN0TWFuYWdlciA9IG51bGwKICAgICk6IHNlbGYgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkdGFnTWFuYWdlciwgJG90aGVyT2JqZWN0TWFuYWdlcik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhUYWdNYW5hZ2VyKFRhZ01hbmFnZXJJbnRlcmZhY2UgJHRhZ01hbmFnZXIpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPnRhZ01hbmFnZXIgPSAkdGFnTWFuYWdlcjsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoT3RoZXJPYmplY3RNYW5hZ2VyKE90aGVyT2JqZWN0TWFuYWdlckludGVyZmFjZSAkb3RoZXJPYmplY3RNYW5hZ2VyKTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5vdGhlck9iamVjdE1hbmFnZXIgPSAkb3RoZXJPYmplY3RNYW5hZ2VyOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGRlY29kZShTdHJlYW0gJHN0cmVhbSk6IENCT1JPYmplY3QKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnByb2Nlc3MoJHN0cmVhbSwgZmFsc2UpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcHJvY2VzcyhTdHJlYW0gJHN0cmVhbSwgYm9vbCAkYnJlYWthYmxlKTogQ0JPUk9iamVjdAogICAgewogICAgICAgICRpYiA9IG9yZCgkc3RyZWFtLT5yZWFkKDEpKTsKICAgICAgICAkbXQgPSAkaWIgPj4gNTsKICAgICAgICAkYWkgPSAkaWIgJiAwYjAwMDExMTExOwogICAgICAgICR2YWwgPSBudWxsOwogICAgICAgIHN3aXRjaCAoJGFpKSB7CiAgICAgICAgICAgIGNhc2UgQ0JPUk9iamVjdDo6TEVOR1RIXzFfQllURTogLy8yNAogICAgICAgICAgICBjYXNlIENCT1JPYmplY3Q6OkxFTkdUSF8yX0JZVEVTOiAvLzI1CiAgICAgICAgICAgIGNhc2UgQ0JPUk9iamVjdDo6TEVOR1RIXzRfQllURVM6IC8vMjYKICAgICAgICAgICAgY2FzZSBDQk9ST2JqZWN0OjpMRU5HVEhfOF9CWVRFUzogLy8yNwogICAgICAgICAgICAgICAgJHZhbCA9ICRzdHJlYW0tPnJlYWQoMiAqKiAoJGFpICYgMGIwMDAwMDExMSkpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgQ0JPUk9iamVjdDo6RlVUVVJFX1VTRV8xOiAvLzI4CiAgICAgICAgICAgIGNhc2UgQ0JPUk9iamVjdDo6RlVUVVJFX1VTRV8yOiAvLzI5CiAgICAgICAgICAgIGNhc2UgQ0JPUk9iamVjdDo6RlVUVVJFX1VTRV8zOiAvLzMwCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoCiAgICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBwYXJzZSB0aGUgZGF0YS4gRm91bmQgaW52YWxpZCBBZGRpdGlvbmFsIEluZm9ybWF0aW9uICIlcyIgKCVkKS4nLAogICAgICAgICAgICAgICAgICAgIHN0cl9wYWQoZGVjYmluKCRhaSksIDgsICcwJywgU1RSX1BBRF9MRUZUKSwKICAgICAgICAgICAgICAgICAgICAkYWkKICAgICAgICAgICAgICAgICkpOwogICAgICAgICAgICBjYXNlIENCT1JPYmplY3Q6OkxFTkdUSF9JTkRFRklOSVRFOiAvLzMxCiAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnByb2Nlc3NJbmZpbml0ZSgkc3RyZWFtLCAkbXQsICRicmVha2FibGUpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5wcm9jZXNzRmluaXRlKCRzdHJlYW0sICRtdCwgJGFpLCAkdmFsKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHByb2Nlc3NGaW5pdGUoU3RyZWFtICRzdHJlYW0sIGludCAkbXQsIGludCAkYWksID9zdHJpbmcgJHZhbCk6IENCT1JPYmplY3QKICAgIHsKICAgICAgICBzd2l0Y2ggKCRtdCkgewogICAgICAgICAgICBjYXNlIENCT1JPYmplY3Q6Ok1BSk9SX1RZUEVfVU5TSUdORURfSU5URUdFUjogLy8wCiAgICAgICAgICAgICAgICByZXR1cm4gVW5zaWduZWRJbnRlZ2VyT2JqZWN0OjpjcmVhdGVPYmplY3RGb3JWYWx1ZSgkYWksICR2YWwpOwogICAgICAgICAgICBjYXNlIENCT1JPYmplY3Q6Ok1BSk9SX1RZUEVfTkVHQVRJVkVfSU5URUdFUjogLy8xCiAgICAgICAgICAgICAgICByZXR1cm4gTmVnYXRpdmVJbnRlZ2VyT2JqZWN0OjpjcmVhdGVPYmplY3RGb3JWYWx1ZSgkYWksICR2YWwpOwogICAgICAgICAgICBjYXNlIENCT1JPYmplY3Q6Ok1BSk9SX1RZUEVfQllURV9TVFJJTkc6IC8vMgogICAgICAgICAgICAgICAgJGxlbmd0aCA9ICR2YWwgPT09IG51bGwgPyAkYWkgOiBVdGlsczo6YmluVG9JbnQoJHZhbCk7CgogICAgICAgICAgICAgICAgcmV0dXJuIEJ5dGVTdHJpbmdPYmplY3Q6OmNyZWF0ZSgkc3RyZWFtLT5yZWFkKCRsZW5ndGgpKTsKICAgICAgICAgICAgY2FzZSBDQk9ST2JqZWN0OjpNQUpPUl9UWVBFX1RFWFRfU1RSSU5HOiAvLzMKICAgICAgICAgICAgICAgICRsZW5ndGggPSAkdmFsID09PSBudWxsID8gJGFpIDogVXRpbHM6OmJpblRvSW50KCR2YWwpOwoKICAgICAgICAgICAgICAgIHJldHVybiBUZXh0U3RyaW5nT2JqZWN0OjpjcmVhdGUoJHN0cmVhbS0+cmVhZCgkbGVuZ3RoKSk7CiAgICAgICAgICAgIGNhc2UgQ0JPUk9iamVjdDo6TUFKT1JfVFlQRV9MSVNUOiAvLzQKICAgICAgICAgICAgICAgICRvYmplY3QgPSBMaXN0T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgICAgICRuYkl0ZW1zID0gJHZhbCA9PT0gbnVsbCA/ICRhaSA6IFV0aWxzOjpiaW5Ub0ludCgkdmFsKTsKICAgICAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRuYkl0ZW1zOyArKyRpKSB7CiAgICAgICAgICAgICAgICAgICAgJG9iamVjdC0+YWRkKCR0aGlzLT5wcm9jZXNzKCRzdHJlYW0sIGZhbHNlKSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuICRvYmplY3Q7CiAgICAgICAgICAgIGNhc2UgQ0JPUk9iamVjdDo6TUFKT1JfVFlQRV9NQVA6IC8vNQogICAgICAgICAgICAgICAgJG9iamVjdCA9IE1hcE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICAkbmJJdGVtcyA9ICR2YWwgPT09IG51bGwgPyAkYWkgOiBVdGlsczo6YmluVG9JbnQoJHZhbCk7CiAgICAgICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkbmJJdGVtczsgKyskaSkgewogICAgICAgICAgICAgICAgICAgICRvYmplY3QtPmFkZCgkdGhpcy0+cHJvY2Vzcygkc3RyZWFtLCBmYWxzZSksICR0aGlzLT5wcm9jZXNzKCRzdHJlYW0sIGZhbHNlKSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuICRvYmplY3Q7CiAgICAgICAgICAgIGNhc2UgQ0JPUk9iamVjdDo6TUFKT1JfVFlQRV9UQUc6IC8vNgogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT50YWdNYW5hZ2VyLT5jcmVhdGVPYmplY3RGb3JWYWx1ZSgkYWksICR2YWwsICR0aGlzLT5wcm9jZXNzKCRzdHJlYW0sIGZhbHNlKSk7CiAgICAgICAgICAgIGNhc2UgQ0JPUk9iamVjdDo6TUFKT1JfVFlQRV9PVEhFUl9UWVBFOiAvLzcKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+b3RoZXJPYmplY3RNYW5hZ2VyLT5jcmVhdGVPYmplY3RGb3JWYWx1ZSgkYWksICR2YWwpOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oc3ByaW50ZigKICAgICAgICAgICAgICAgICAgICAnVW5zdXBwb3J0ZWQgbWFqb3IgdHlwZSAiJXMiICglZCkuJywKICAgICAgICAgICAgICAgICAgICBzdHJfcGFkKGRlY2JpbigkbXQpLCA1LCAnMCcsIFNUUl9QQURfTEVGVCksCiAgICAgICAgICAgICAgICAgICAgJG10CiAgICAgICAgICAgICAgICApKTsgLy8gU2hvdWxkIG5ldmVyIGFwcGVuZAogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHByb2Nlc3NJbmZpbml0ZShTdHJlYW0gJHN0cmVhbSwgaW50ICRtdCwgYm9vbCAkYnJlYWthYmxlKTogQ0JPUk9iamVjdAogICAgewogICAgICAgIHN3aXRjaCAoJG10KSB7CiAgICAgICAgICAgIGNhc2UgQ0JPUk9iamVjdDo6TUFKT1JfVFlQRV9CWVRFX1NUUklORzogLy8yCiAgICAgICAgICAgICAgICAkb2JqZWN0ID0gSW5kZWZpbml0ZUxlbmd0aEJ5dGVTdHJpbmdPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgd2hpbGUgKCEgKCRpdCA9ICR0aGlzLT5wcm9jZXNzKCRzdHJlYW0sIHRydWUpKSBpbnN0YW5jZW9mIEJyZWFrT2JqZWN0KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCEgJGl0IGluc3RhbmNlb2YgQnl0ZVN0cmluZ09iamVjdCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdVbmFibGUgdG8gcGFyc2UgdGhlIGRhdGEuIEluZmluaXRlIEJ5dGUgU3RyaW5nIG9iamVjdCBjYW4gb25seSBnZXQgQnl0ZSBTdHJpbmcgb2JqZWN0cy4nCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRvYmplY3QtPmFkZCgkaXQpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiAkb2JqZWN0OwogICAgICAgICAgICBjYXNlIENCT1JPYmplY3Q6Ok1BSk9SX1RZUEVfVEVYVF9TVFJJTkc6IC8vMwogICAgICAgICAgICAgICAgJG9iamVjdCA9IEluZGVmaW5pdGVMZW5ndGhUZXh0U3RyaW5nT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgICAgIHdoaWxlICghICgkaXQgPSAkdGhpcy0+cHJvY2Vzcygkc3RyZWFtLCB0cnVlKSkgaW5zdGFuY2VvZiBCcmVha09iamVjdCkgewogICAgICAgICAgICAgICAgICAgIGlmICghICRpdCBpbnN0YW5jZW9mIFRleHRTdHJpbmdPYmplY3QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVW5hYmxlIHRvIHBhcnNlIHRoZSBkYXRhLiBJbmZpbml0ZSBUZXh0IFN0cmluZyBvYmplY3QgY2FuIG9ubHkgZ2V0IFRleHQgU3RyaW5nIG9iamVjdHMuJwogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkb2JqZWN0LT5hZGQoJGl0KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gJG9iamVjdDsKICAgICAgICAgICAgY2FzZSBDQk9ST2JqZWN0OjpNQUpPUl9UWVBFX0xJU1Q6IC8vNAogICAgICAgICAgICAgICAgJG9iamVjdCA9IEluZGVmaW5pdGVMZW5ndGhMaXN0T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgICAgICRpdCA9ICR0aGlzLT5wcm9jZXNzKCRzdHJlYW0sIHRydWUpOwogICAgICAgICAgICAgICAgd2hpbGUgKCEgJGl0IGluc3RhbmNlb2YgQnJlYWtPYmplY3QpIHsKICAgICAgICAgICAgICAgICAgICAkb2JqZWN0LT5hZGQoJGl0KTsKICAgICAgICAgICAgICAgICAgICAkaXQgPSAkdGhpcy0+cHJvY2Vzcygkc3RyZWFtLCB0cnVlKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gJG9iamVjdDsKICAgICAgICAgICAgY2FzZSBDQk9ST2JqZWN0OjpNQUpPUl9UWVBFX01BUDogLy81CiAgICAgICAgICAgICAgICAkb2JqZWN0ID0gSW5kZWZpbml0ZUxlbmd0aE1hcE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICB3aGlsZSAoISAoJGl0ID0gJHRoaXMtPnByb2Nlc3MoJHN0cmVhbSwgdHJ1ZSkpIGluc3RhbmNlb2YgQnJlYWtPYmplY3QpIHsKICAgICAgICAgICAgICAgICAgICAkb2JqZWN0LT5hZGQoJGl0LCAkdGhpcy0+cHJvY2Vzcygkc3RyZWFtLCBmYWxzZSkpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiAkb2JqZWN0OwogICAgICAgICAgICBjYXNlIENCT1JPYmplY3Q6Ok1BSk9SX1RZUEVfT1RIRVJfVFlQRTogLy83CiAgICAgICAgICAgICAgICBpZiAoISAkYnJlYWthYmxlKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignQ2Fubm90IHBhcnNlIHRoZSBkYXRhLiBObyBlbmNsb3NpbmcgaW5kZWZpbml0ZS4nKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gQnJlYWtPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICBjYXNlIENCT1JPYmplY3Q6Ok1BSk9SX1RZUEVfVU5TSUdORURfSU5URUdFUjogLy8wCiAgICAgICAgICAgIGNhc2UgQ0JPUk9iamVjdDo6TUFKT1JfVFlQRV9ORUdBVElWRV9JTlRFR0VSOiAvLzEKICAgICAgICAgICAgY2FzZSBDQk9ST2JqZWN0OjpNQUpPUl9UWVBFX1RBRzogLy82CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoCiAgICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBwYXJzZSB0aGUgZGF0YS4gRm91bmQgaW5maW5pdGUgbGVuZ3RoIGZvciBNYWpvciBUeXBlICIlcyIgKCVkKS4nLAogICAgICAgICAgICAgICAgICAgIHN0cl9wYWQoZGVjYmluKCRtdCksIDUsICcwJywgU1RSX1BBRF9MRUZUKSwKICAgICAgICAgICAgICAgICAgICAkbXQKICAgICAgICAgICAgICAgICkpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdlbmVyYXRlVGFnTWFuYWdlcigpOiBUYWdNYW5hZ2VySW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuIFRhZ01hbmFnZXI6OmNyZWF0ZSgpCiAgICAgICAgICAgIC0+YWRkKERhdGV0aW1lVGFnOjpjbGFzcykKICAgICAgICAgICAgLT5hZGQoVGltZXN0YW1wVGFnOjpjbGFzcykKCiAgICAgICAgICAgIC0+YWRkKFVuc2lnbmVkQmlnSW50ZWdlclRhZzo6Y2xhc3MpCiAgICAgICAgICAgIC0+YWRkKE5lZ2F0aXZlQmlnSW50ZWdlclRhZzo6Y2xhc3MpCgogICAgICAgICAgICAtPmFkZChEZWNpbWFsRnJhY3Rpb25UYWc6OmNsYXNzKQogICAgICAgICAgICAtPmFkZChCaWdGbG9hdFRhZzo6Y2xhc3MpCgogICAgICAgICAgICAtPmFkZChCYXNlNjRVcmxFbmNvZGluZ1RhZzo6Y2xhc3MpCiAgICAgICAgICAgIC0+YWRkKEJhc2U2NEVuY29kaW5nVGFnOjpjbGFzcykKICAgICAgICAgICAgLT5hZGQoQmFzZTE2RW5jb2RpbmdUYWc6OmNsYXNzKQogICAgICAgICAgICAtPmFkZChDQk9SRW5jb2RpbmdUYWc6OmNsYXNzKQoKICAgICAgICAgICAgLT5hZGQoVXJpVGFnOjpjbGFzcykKICAgICAgICAgICAgLT5hZGQoQmFzZTY0VXJsVGFnOjpjbGFzcykKICAgICAgICAgICAgLT5hZGQoQmFzZTY0VGFnOjpjbGFzcykKICAgICAgICAgICAgLT5hZGQoTWltZVRhZzo6Y2xhc3MpCgogICAgICAgICAgICAtPmFkZChDQk9SVGFnOjpjbGFzcykKICAgICAgICA7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZW5lcmF0ZU90aGVyT2JqZWN0TWFuYWdlcigpOiBPdGhlck9iamVjdE1hbmFnZXJJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gT3RoZXJPYmplY3RNYW5hZ2VyOjpjcmVhdGUoKQogICAgICAgICAgICAtPmFkZChCcmVha09iamVjdDo6Y2xhc3MpCiAgICAgICAgICAgIC0+YWRkKFNpbXBsZU9iamVjdDo6Y2xhc3MpCiAgICAgICAgICAgIC0+YWRkKEZhbHNlT2JqZWN0OjpjbGFzcykKICAgICAgICAgICAgLT5hZGQoVHJ1ZU9iamVjdDo6Y2xhc3MpCiAgICAgICAgICAgIC0+YWRkKE51bGxPYmplY3Q6OmNsYXNzKQogICAgICAgICAgICAtPmFkZChVbmRlZmluZWRPYmplY3Q6OmNsYXNzKQogICAgICAgICAgICAtPmFkZChIYWxmUHJlY2lzaW9uRmxvYXRPYmplY3Q6OmNsYXNzKQogICAgICAgICAgICAtPmFkZChTaW5nbGVQcmVjaXNpb25GbG9hdE9iamVjdDo6Y2xhc3MpCiAgICAgICAgICAgIC0+YWRkKERvdWJsZVByZWNpc2lvbkZsb2F0T2JqZWN0OjpjbGFzcykKICAgICAgICAgICAgOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/DecoderInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgppbnRlcmZhY2UgRGVjb2RlckludGVyZmFjZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gZGVjb2RlKFN0cmVhbSAkc3RyZWFtKTogQ0JPUk9iamVjdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/IndefiniteLengthByteStringObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgovKioKICogQGZpbmFsCiAqLwpjbGFzcyBJbmRlZmluaXRlTGVuZ3RoQnl0ZVN0cmluZ09iamVjdCBleHRlbmRzIEFic3RyYWN0Q0JPUk9iamVjdCBpbXBsZW1lbnRzIE5vcm1hbGl6YWJsZQp7CiAgICBwcml2YXRlIGNvbnN0IE1BSk9SX1RZUEUgPSBzZWxmOjpNQUpPUl9UWVBFX0JZVEVfU1RSSU5HOwoKICAgIHByaXZhdGUgY29uc3QgQURESVRJT05BTF9JTkZPUk1BVElPTiA9IHNlbGY6OkxFTkdUSF9JTkRFRklOSVRFOwoKICAgIC8qKgogICAgICogQHZhciBCeXRlU3RyaW5nT2JqZWN0W10KICAgICAqLwogICAgcHJpdmF0ZSAkY2h1bmtzID0gW107CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KHNlbGY6Ok1BSk9SX1RZUEUsIHNlbGY6OkFERElUSU9OQUxfSU5GT1JNQVRJT04pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgICRyZXN1bHQgPSBwYXJlbnQ6Ol9fdG9TdHJpbmcoKTsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+Y2h1bmtzIGFzICRjaHVuaykgewogICAgICAgICAgICAkcmVzdWx0IC49ICRjaHVuay0+X190b1N0cmluZygpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQgLiAiXHhGRiI7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoQnl0ZVN0cmluZ09iamVjdCAkY2h1bmspOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPmNodW5rc1tdID0gJGNodW5rOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFwcGVuZChzdHJpbmcgJGNodW5rKTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5hZGQoQnl0ZVN0cmluZ09iamVjdDo6Y3JlYXRlKCRjaHVuaykpOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFZhbHVlKCk6IHN0cmluZwogICAgewogICAgICAgICRyZXN1bHQgPSAnJzsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+Y2h1bmtzIGFzICRjaHVuaykgewogICAgICAgICAgICAkcmVzdWx0IC49ICRjaHVuay0+Z2V0VmFsdWUoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMZW5ndGgoKTogaW50CiAgICB7CiAgICAgICAgJGxlbmd0aCA9IDA7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmNodW5rcyBhcyAkY2h1bmspIHsKICAgICAgICAgICAgJGxlbmd0aCArPSAkY2h1bmstPmdldExlbmd0aCgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRsZW5ndGg7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5vcm1hbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcmVzdWx0ID0gJyc7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmNodW5rcyBhcyAkY2h1bmspIHsKICAgICAgICAgICAgJHJlc3VsdCAuPSAkY2h1bmstPm5vcm1hbGl6ZSgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBUaGUgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBvbiB2My4wLiBQbGVhc2UgcmVseSBvbiB0aGUgQ0JPUlxOb3JtYWxpemFibGUgaW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxpemVkRGF0YShib29sICRpZ25vcmVUYWdzID0gZmFsc2UpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcmVzdWx0ID0gJyc7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmNodW5rcyBhcyAkY2h1bmspIHsKICAgICAgICAgICAgJHJlc3VsdCAuPSAkY2h1bmstPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/IndefiniteLengthListObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7Cgp1c2UgZnVuY3Rpb24gYXJyYXlfa2V5X2V4aXN0czsKdXNlIEFycmF5QWNjZXNzOwp1c2UgQXJyYXlJdGVyYXRvcjsKdXNlIGZ1bmN0aW9uIGNvdW50Owp1c2UgQ291bnRhYmxlOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgSXRlcmF0b3I7CnVzZSBJdGVyYXRvckFnZ3JlZ2F0ZTsKCi8qKgogKiBAcGhwc3Rhbi1pbXBsZW1lbnRzIEFycmF5QWNjZXNzPGludCwgQ0JPUk9iamVjdD4KICogQHBocHN0YW4taW1wbGVtZW50cyBJdGVyYXRvckFnZ3JlZ2F0ZTxpbnQsIENCT1JPYmplY3Q+CiAqIEBmaW5hbAogKi8KY2xhc3MgSW5kZWZpbml0ZUxlbmd0aExpc3RPYmplY3QgZXh0ZW5kcyBBYnN0cmFjdENCT1JPYmplY3QgaW1wbGVtZW50cyBDb3VudGFibGUsIEl0ZXJhdG9yQWdncmVnYXRlLCBOb3JtYWxpemFibGUsIEFycmF5QWNjZXNzCnsKICAgIHByaXZhdGUgY29uc3QgTUFKT1JfVFlQRSA9IHNlbGY6Ok1BSk9SX1RZUEVfTElTVDsKCiAgICBwcml2YXRlIGNvbnN0IEFERElUSU9OQUxfSU5GT1JNQVRJT04gPSBzZWxmOjpMRU5HVEhfSU5ERUZJTklURTsKCiAgICAvKioKICAgICAqIEB2YXIgQ0JPUk9iamVjdFtdCiAgICAgKi8KICAgIHByaXZhdGUgJGRhdGEgPSBbXTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3Qoc2VsZjo6TUFKT1JfVFlQRSwgc2VsZjo6QURESVRJT05BTF9JTkZPUk1BVElPTik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKTogc3RyaW5nCiAgICB7CiAgICAgICAgJHJlc3VsdCA9IHBhcmVudDo6X190b1N0cmluZygpOwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5kYXRhIGFzICRvYmplY3QpIHsKICAgICAgICAgICAgJHJlc3VsdCAuPSAoc3RyaW5nKSAkb2JqZWN0OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQgLiAiXHhGRiI7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBtaXhlZFtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBub3JtYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfbWFwKHN0YXRpYyBmdW5jdGlvbiAoQ0JPUk9iamVjdCAkb2JqZWN0KSB7CiAgICAgICAgICAgIHJldHVybiAkb2JqZWN0IGluc3RhbmNlb2YgTm9ybWFsaXphYmxlID8gJG9iamVjdC0+bm9ybWFsaXplKCkgOiAkb2JqZWN0OwogICAgICAgIH0sICR0aGlzLT5kYXRhKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoZSBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIG9uIHYzLjAuIFBsZWFzZSByZWx5IG9uIHRoZSBDQk9SXE5vcm1hbGl6YWJsZSBpbnRlcmZhY2UKICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vcm1hbGl6ZWREYXRhKGJvb2wgJGlnbm9yZVRhZ3MgPSBmYWxzZSk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X21hcChzdGF0aWMgZnVuY3Rpb24gKENCT1JPYmplY3QgJG9iamVjdCkgdXNlICgkaWdub3JlVGFncykgewogICAgICAgICAgICByZXR1cm4gJG9iamVjdC0+Z2V0Tm9ybWFsaXplZERhdGEoJGlnbm9yZVRhZ3MpOwogICAgICAgIH0sICR0aGlzLT5kYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKENCT1JPYmplY3QgJGl0ZW0pOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPmRhdGFbXSA9ICRpdGVtOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGhhcyhpbnQgJGluZGV4KTogYm9vbAogICAgewogICAgICAgIHJldHVybiBhcnJheV9rZXlfZXhpc3RzKCRpbmRleCwgJHRoaXMtPmRhdGEpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmUoaW50ICRpbmRleCk6IHNlbGYKICAgIHsKICAgICAgICBpZiAoISAkdGhpcy0+aGFzKCRpbmRleCkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KICAgICAgICB1bnNldCgkdGhpcy0+ZGF0YVskaW5kZXhdKTsKICAgICAgICAkdGhpcy0+ZGF0YSA9IGFycmF5X3ZhbHVlcygkdGhpcy0+ZGF0YSk7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0KGludCAkaW5kZXgpOiBDQk9ST2JqZWN0CiAgICB7CiAgICAgICAgaWYgKCEgJHRoaXMtPmhhcygkaW5kZXgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0luZGV4IG5vdCBmb3VuZC4nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YVskaW5kZXhdOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXQoaW50ICRpbmRleCwgQ0JPUk9iamVjdCAkb2JqZWN0KTogc2VsZgogICAgewogICAgICAgIGlmICghICR0aGlzLT5oYXMoJGluZGV4KSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbmRleCBub3QgZm91bmQuJyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+ZGF0YVskaW5kZXhdID0gJG9iamVjdDsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gTm8gcmVwbGFjZW1lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvdW50KCk6IGludAogICAgewogICAgICAgIHJldHVybiBjb3VudCgkdGhpcy0+ZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEl0ZXJhdG9yPGludCwgQ0JPUk9iamVjdD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEl0ZXJhdG9yKCk6IEl0ZXJhdG9yCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBBcnJheUl0ZXJhdG9yKCR0aGlzLT5kYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0RXhpc3RzKCRvZmZzZXQpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oYXMoJG9mZnNldCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldEdldCgkb2Zmc2V0KTogQ0JPUk9iamVjdAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0KCRvZmZzZXQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRTZXQoJG9mZnNldCwgJHZhbHVlKTogdm9pZAogICAgewogICAgICAgIGlmICgkb2Zmc2V0ID09PSBudWxsKSB7CiAgICAgICAgICAgICR0aGlzLT5hZGQoJHZhbHVlKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5zZXQoJG9mZnNldCwgJHZhbHVlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0VW5zZXQoJG9mZnNldCk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+cmVtb3ZlKCRvZmZzZXQpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/IndefiniteLengthMapObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7Cgp1c2UgZnVuY3Rpb24gYXJyYXlfa2V5X2V4aXN0czsKdXNlIEFycmF5QWNjZXNzOwp1c2UgQXJyYXlJdGVyYXRvcjsKdXNlIGZ1bmN0aW9uIGNvdW50Owp1c2UgQ291bnRhYmxlOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgSXRlcmF0b3I7CnVzZSBJdGVyYXRvckFnZ3JlZ2F0ZTsKCi8qKgogKiBAcGhwc3Rhbi1pbXBsZW1lbnRzIEFycmF5QWNjZXNzPGludCwgQ0JPUk9iamVjdD4KICogQHBocHN0YW4taW1wbGVtZW50cyBJdGVyYXRvckFnZ3JlZ2F0ZTxpbnQsIE1hcEl0ZW0+CiAqIEBmaW5hbAogKi8KY2xhc3MgSW5kZWZpbml0ZUxlbmd0aE1hcE9iamVjdCBleHRlbmRzIEFic3RyYWN0Q0JPUk9iamVjdCBpbXBsZW1lbnRzIENvdW50YWJsZSwgSXRlcmF0b3JBZ2dyZWdhdGUsIE5vcm1hbGl6YWJsZSwgQXJyYXlBY2Nlc3MKewogICAgcHJpdmF0ZSBjb25zdCBNQUpPUl9UWVBFID0gc2VsZjo6TUFKT1JfVFlQRV9NQVA7CgogICAgcHJpdmF0ZSBjb25zdCBBRERJVElPTkFMX0lORk9STUFUSU9OID0gc2VsZjo6TEVOR1RIX0lOREVGSU5JVEU7CgogICAgLyoqCiAgICAgKiBAdmFyIE1hcEl0ZW1bXQogICAgICovCiAgICBwcml2YXRlICRkYXRhID0gW107CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KHNlbGY6Ok1BSk9SX1RZUEUsIHNlbGY6OkFERElUSU9OQUxfSU5GT1JNQVRJT04pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgICRyZXN1bHQgPSBwYXJlbnQ6Ol9fdG9TdHJpbmcoKTsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+ZGF0YSBhcyAkb2JqZWN0KSB7CiAgICAgICAgICAgICRyZXN1bHQgLj0gKHN0cmluZykgJG9iamVjdC0+Z2V0S2V5KCk7CiAgICAgICAgICAgICRyZXN1bHQgLj0gKHN0cmluZykgJG9iamVjdC0+Z2V0VmFsdWUoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0IC4gIlx4RkYiOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKCk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoZSBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIG9uIHYzLjAuIFBsZWFzZSB1c2UgImFkZCIgaW5zdGVhZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXBwZW5kKENCT1JPYmplY3QgJGtleSwgQ0JPUk9iamVjdCAkdmFsdWUpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hZGQoJGtleSwgJHZhbHVlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKENCT1JPYmplY3QgJGtleSwgQ0JPUk9iamVjdCAkdmFsdWUpOiBzZWxmCiAgICB7CiAgICAgICAgaWYgKCEgJGtleSBpbnN0YW5jZW9mIE5vcm1hbGl6YWJsZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIGtleS4gU2hhbGwgYmUgbm9ybWFsaXphYmxlJyk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5kYXRhWyRrZXktPm5vcm1hbGl6ZSgpXSA9IE1hcEl0ZW06OmNyZWF0ZSgka2V5LCAkdmFsdWUpOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAka2V5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXMoJGtleSk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkdGhpcy0+ZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkaW5kZXgKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZSgkaW5kZXgpOiBzZWxmCiAgICB7CiAgICAgICAgaWYgKCEgJHRoaXMtPmhhcygkaW5kZXgpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CiAgICAgICAgdW5zZXQoJHRoaXMtPmRhdGFbJGluZGV4XSk7CiAgICAgICAgJHRoaXMtPmRhdGEgPSBhcnJheV92YWx1ZXMoJHRoaXMtPmRhdGEpOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkaW5kZXgKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldCgkaW5kZXgpOiBDQk9ST2JqZWN0CiAgICB7CiAgICAgICAgaWYgKCEgJHRoaXMtPmhhcygkaW5kZXgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0luZGV4IG5vdCBmb3VuZC4nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YVskaW5kZXhdLT5nZXRWYWx1ZSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXQoTWFwSXRlbSAkb2JqZWN0KTogc2VsZgogICAgewogICAgICAgICRrZXkgPSAkb2JqZWN0LT5nZXRLZXkoKTsKICAgICAgICBpZiAoISAka2V5IGluc3RhbmNlb2YgTm9ybWFsaXphYmxlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQga2V5LiBTaGFsbCBiZSBub3JtYWxpemFibGUnKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5kYXRhWyRrZXktPm5vcm1hbGl6ZSgpXSA9ICRvYmplY3Q7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoZSBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIG9uIHYzLjAuIE5vIHJlcGxhY2VtZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb3VudCgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gY291bnQoJHRoaXMtPmRhdGEpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBJdGVyYXRvcjxpbnQsIE1hcEl0ZW0+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJdGVyYXRvcigpOiBJdGVyYXRvcgogICAgewogICAgICAgIHJldHVybiBuZXcgQXJyYXlJdGVyYXRvcigkdGhpcy0+ZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5vcm1hbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBhcnJheV9yZWR1Y2UoJHRoaXMtPmRhdGEsIHN0YXRpYyBmdW5jdGlvbiAoYXJyYXkgJGNhcnJ5LCBNYXBJdGVtICRpdGVtKTogYXJyYXkgewogICAgICAgICAgICAka2V5ID0gJGl0ZW0tPmdldEtleSgpOwogICAgICAgICAgICBpZiAoISAka2V5IGluc3RhbmNlb2YgTm9ybWFsaXphYmxlKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIGtleS4gU2hhbGwgYmUgbm9ybWFsaXphYmxlJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHZhbHVlT2JqZWN0ID0gJGl0ZW0tPmdldFZhbHVlKCk7CiAgICAgICAgICAgICRjYXJyeVska2V5LT5ub3JtYWxpemUoKV0gPSAkdmFsdWVPYmplY3QgaW5zdGFuY2VvZiBOb3JtYWxpemFibGUgPyAkdmFsdWVPYmplY3QtPm5vcm1hbGl6ZSgpIDogJHZhbHVlT2JqZWN0OwoKICAgICAgICAgICAgcmV0dXJuICRjYXJyeTsKICAgICAgICB9LCBbXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBUaGUgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBvbiB2My4wLiBQbGVhc2UgcmVseSBvbiB0aGUgQ0JPUlxOb3JtYWxpemFibGUgaW50ZXJmYWNlCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZFtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxpemVkRGF0YShib29sICRpZ25vcmVUYWdzID0gZmFsc2UpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBhcnJheV9yZWR1Y2UoJHRoaXMtPmRhdGEsIHN0YXRpYyBmdW5jdGlvbiAoYXJyYXkgJGNhcnJ5LCBNYXBJdGVtICRpdGVtKSB1c2UgKCRpZ25vcmVUYWdzKTogYXJyYXkgewogICAgICAgICAgICAka2V5ID0gJGl0ZW0tPmdldEtleSgpOwogICAgICAgICAgICAkdmFsdWVPYmplY3QgPSAkaXRlbS0+Z2V0VmFsdWUoKTsKICAgICAgICAgICAgJGNhcnJ5WyRrZXktPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKV0gPSAkdmFsdWVPYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKTsKCiAgICAgICAgICAgIHJldHVybiAkY2Fycnk7CiAgICAgICAgfSwgW10pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRFeGlzdHMoJG9mZnNldCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmhhcygkb2Zmc2V0KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0R2V0KCRvZmZzZXQpOiBDQk9ST2JqZWN0CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXQoJG9mZnNldCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFNldCgkb2Zmc2V0LCAkdmFsdWUpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCEgJG9mZnNldCBpbnN0YW5jZW9mIENCT1JPYmplY3QpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBrZXknKTsKICAgICAgICB9CiAgICAgICAgaWYgKCEgJHZhbHVlIGluc3RhbmNlb2YgQ0JPUk9iamVjdCkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIHZhbHVlJyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+c2V0KE1hcEl0ZW06OmNyZWF0ZSgkb2Zmc2V0LCAkdmFsdWUpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0VW5zZXQoJG9mZnNldCk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+cmVtb3ZlKCRvZmZzZXQpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/IndefiniteLengthTextStringObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgovKioKICogQGZpbmFsCiAqLwpjbGFzcyBJbmRlZmluaXRlTGVuZ3RoVGV4dFN0cmluZ09iamVjdCBleHRlbmRzIEFic3RyYWN0Q0JPUk9iamVjdCBpbXBsZW1lbnRzIE5vcm1hbGl6YWJsZQp7CiAgICBwcml2YXRlIGNvbnN0IE1BSk9SX1RZUEUgPSBzZWxmOjpNQUpPUl9UWVBFX1RFWFRfU1RSSU5HOwoKICAgIHByaXZhdGUgY29uc3QgQURESVRJT05BTF9JTkZPUk1BVElPTiA9IHNlbGY6OkxFTkdUSF9JTkRFRklOSVRFOwoKICAgIC8qKgogICAgICogQHZhciBUZXh0U3RyaW5nT2JqZWN0W10KICAgICAqLwogICAgcHJpdmF0ZSAkZGF0YSA9IFtdOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdChzZWxmOjpNQUpPUl9UWVBFLCBzZWxmOjpBRERJVElPTkFMX0lORk9STUFUSU9OKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcmVzdWx0ID0gcGFyZW50OjpfX3RvU3RyaW5nKCk7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmRhdGEgYXMgJG9iamVjdCkgewogICAgICAgICAgICAkcmVzdWx0IC49IChzdHJpbmcpICRvYmplY3Q7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdCAuICJceEZGIjsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZSgpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFkZChUZXh0U3RyaW5nT2JqZWN0ICRjaHVuayk6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+ZGF0YVtdID0gJGNodW5rOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFwcGVuZChzdHJpbmcgJGNodW5rKTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5hZGQoVGV4dFN0cmluZ09iamVjdDo6Y3JlYXRlKCRjaHVuaykpOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFZhbHVlKCk6IHN0cmluZwogICAgewogICAgICAgICRyZXN1bHQgPSAnJzsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+ZGF0YSBhcyAkb2JqZWN0KSB7CiAgICAgICAgICAgICRyZXN1bHQgLj0gJG9iamVjdC0+Z2V0VmFsdWUoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMZW5ndGgoKTogaW50CiAgICB7CiAgICAgICAgJGxlbmd0aCA9IDA7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmRhdGEgYXMgJG9iamVjdCkgewogICAgICAgICAgICAkbGVuZ3RoICs9ICRvYmplY3QtPmdldExlbmd0aCgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRsZW5ndGg7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5vcm1hbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcmVzdWx0ID0gJyc7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmRhdGEgYXMgJG9iamVjdCkgewogICAgICAgICAgICAkcmVzdWx0IC49ICRvYmplY3QtPm5vcm1hbGl6ZSgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBUaGUgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBvbiB2My4wLiBQbGVhc2UgcmVseSBvbiB0aGUgQ0JPUlxOb3JtYWxpemFibGUgaW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxpemVkRGF0YShib29sICRpZ25vcmVUYWdzID0gZmFsc2UpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcmVzdWx0ID0gJyc7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmRhdGEgYXMgJG9iamVjdCkgewogICAgICAgICAgICAkcmVzdWx0IC49ICRvYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/InfiniteListObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgovKioKICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGluIHYzLjAuIFBsZWFzZSB1c2UgSW5kZWZpbml0ZUxlbmd0aExpc3RPYmplY3QgaW5zdGVhZAogKi8KZmluYWwgY2xhc3MgSW5maW5pdGVMaXN0T2JqZWN0IGV4dGVuZHMgSW5kZWZpbml0ZUxlbmd0aExpc3RPYmplY3QKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/InfiniteMapObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgovKioKICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGluIHYzLjAuIFBsZWFzZSB1c2UgSW5kZWZpbml0ZUxlbmd0aE1hcE9iamVjdCBpbnN0ZWFkCiAqLwpmaW5hbCBjbGFzcyBJbmZpbml0ZU1hcE9iamVjdCBleHRlbmRzIEluZGVmaW5pdGVMZW5ndGhNYXBPYmplY3QKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/LengthCalculator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7Cgp1c2UgQnJpY2tcTWF0aFxCaWdJbnRlZ2VyOwp1c2UgZnVuY3Rpb24gY2hyOwp1c2UgZnVuY3Rpb24gY291bnQ7CnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBjb25zdCBTVFJfUEFEX0xFRlQ7CgpmaW5hbCBjbGFzcyBMZW5ndGhDYWxjdWxhdG9yCnsKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheXtpbnQsIG51bGx8c3RyaW5nfQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldExlbmd0aE9mU3RyaW5nKHN0cmluZyAkZGF0YSk6IGFycmF5CiAgICB7CiAgICAgICAgJGxlbmd0aCA9IG1iX3N0cmxlbigkZGF0YSwgJzhiaXQnKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmNvbXB1dGVMZW5ndGgoJGxlbmd0aCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXk8aW50fHN0cmluZywgbWl4ZWQ+ICRkYXRhCiAgICAgKgogICAgICogQHJldHVybiBhcnJheXtpbnQsIG51bGx8c3RyaW5nfQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldExlbmd0aE9mQXJyYXkoYXJyYXkgJGRhdGEpOiBhcnJheQogICAgewogICAgICAgICRsZW5ndGggPSBjb3VudCgkZGF0YSk7CgogICAgICAgIHJldHVybiBzZWxmOjpjb21wdXRlTGVuZ3RoKCRsZW5ndGgpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheXtpbnQsIG51bGx8c3RyaW5nfQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBjb21wdXRlTGVuZ3RoKGludCAkbGVuZ3RoKTogYXJyYXkKICAgIHsKICAgICAgICBzd2l0Y2ggKHRydWUpIHsKICAgICAgICAgICAgY2FzZSAkbGVuZ3RoIDw9IDIzOgogICAgICAgICAgICAgICAgcmV0dXJuIFskbGVuZ3RoLCBudWxsXTsKICAgICAgICAgICAgY2FzZSAkbGVuZ3RoIDw9IDB4RkY6CiAgICAgICAgICAgICAgICByZXR1cm4gW0NCT1JPYmplY3Q6OkxFTkdUSF8xX0JZVEUsIGNocigkbGVuZ3RoKV07CiAgICAgICAgICAgIGNhc2UgJGxlbmd0aCA8PSAweEZGRkY6CiAgICAgICAgICAgICAgICByZXR1cm4gW0NCT1JPYmplY3Q6OkxFTkdUSF8yX0JZVEVTLCBzZWxmOjpoZXgyYmluKGRlY2hleCgkbGVuZ3RoKSldOwogICAgICAgICAgICBjYXNlICRsZW5ndGggPD0gMHhGRkZGRkZGRjoKICAgICAgICAgICAgICAgIHJldHVybiBbQ0JPUk9iamVjdDo6TEVOR1RIXzRfQllURVMsIHNlbGY6OmhleDJiaW4oZGVjaGV4KCRsZW5ndGgpKV07CiAgICAgICAgICAgIGNhc2UgQmlnSW50ZWdlcjo6b2YoJGxlbmd0aCktPmlzTGVzc1RoYW5PckVxdWFsVG8oQmlnSW50ZWdlcjo6ZnJvbUJhc2UoJ0ZGRkZGRkZGRkZGRkZGRkYnLCAxNikpOgogICAgICAgICAgICAgICAgcmV0dXJuIFtDQk9ST2JqZWN0OjpMRU5HVEhfOF9CWVRFUywgc2VsZjo6aGV4MmJpbihkZWNoZXgoJGxlbmd0aCkpXTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHJldHVybiBbQ0JPUk9iamVjdDo6TEVOR1RIX0lOREVGSU5JVEUsIG51bGxdOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBoZXgyYmluKHN0cmluZyAkZGF0YSk6IHN0cmluZwogICAgewogICAgICAgICRkYXRhID0gc3RyX3BhZCgkZGF0YSwgKGludCkgKDIgKiogY2VpbChsb2cobWJfc3RybGVuKCRkYXRhLCAnOGJpdCcpLCAyKSkpLCAnMCcsIFNUUl9QQURfTEVGVCk7CiAgICAgICAgJHJlc3VsdCA9IGhleDJiaW4oJGRhdGEpOwogICAgICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdVbmFibGUgdG8gY29udmVydCB0aGUgZGF0YScpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/ListObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7Cgp1c2UgZnVuY3Rpb24gYXJyYXlfa2V5X2V4aXN0czsKdXNlIEFycmF5QWNjZXNzOwp1c2UgQXJyYXlJdGVyYXRvcjsKdXNlIGZ1bmN0aW9uIGNvdW50Owp1c2UgQ291bnRhYmxlOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgSXRlcmF0b3I7CnVzZSBJdGVyYXRvckFnZ3JlZ2F0ZTsKCi8qKgogKiBAcGhwc3Rhbi1pbXBsZW1lbnRzIEFycmF5QWNjZXNzPGludCwgQ0JPUk9iamVjdD4KICogQHBocHN0YW4taW1wbGVtZW50cyBJdGVyYXRvckFnZ3JlZ2F0ZTxpbnQsIENCT1JPYmplY3Q+CiAqLwpjbGFzcyBMaXN0T2JqZWN0IGV4dGVuZHMgQWJzdHJhY3RDQk9ST2JqZWN0IGltcGxlbWVudHMgQ291bnRhYmxlLCBJdGVyYXRvckFnZ3JlZ2F0ZSwgTm9ybWFsaXphYmxlLCBBcnJheUFjY2Vzcwp7CiAgICBwcml2YXRlIGNvbnN0IE1BSk9SX1RZUEUgPSBzZWxmOjpNQUpPUl9UWVBFX0xJU1Q7CgogICAgLyoqCiAgICAgKiBAdmFyIENCT1JPYmplY3RbXQogICAgICovCiAgICBwcml2YXRlICRkYXRhOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRsZW5ndGg7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gQ0JPUk9iamVjdFtdICRkYXRhCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkZGF0YSA9IFtdKQogICAgewogICAgICAgIFskYWRkaXRpb25hbEluZm9ybWF0aW9uLCAkbGVuZ3RoXSA9IExlbmd0aENhbGN1bGF0b3I6OmdldExlbmd0aE9mQXJyYXkoJGRhdGEpOwogICAgICAgIGFycmF5X21hcChzdGF0aWMgZnVuY3Rpb24gKCRpdGVtKTogdm9pZCB7CiAgICAgICAgICAgIGlmICghICRpdGVtIGluc3RhbmNlb2YgQ0JPUk9iamVjdCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVGhlIGxpc3QgbXVzdCBjb250YWluIG9ubHkgQ0JPUk9iamVjdCBvYmplY3RzLicpOwogICAgICAgICAgICB9CiAgICAgICAgfSwgJGRhdGEpOwoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KHNlbGY6Ok1BSk9SX1RZUEUsICRhZGRpdGlvbmFsSW5mb3JtYXRpb24pOwogICAgICAgICR0aGlzLT5kYXRhID0gYXJyYXlfdmFsdWVzKCRkYXRhKTsKICAgICAgICAkdGhpcy0+bGVuZ3RoID0gJGxlbmd0aDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcmVzdWx0ID0gcGFyZW50OjpfX3RvU3RyaW5nKCk7CiAgICAgICAgaWYgKCR0aGlzLT5sZW5ndGggIT09IG51bGwpIHsKICAgICAgICAgICAgJHJlc3VsdCAuPSAkdGhpcy0+bGVuZ3RoOwogICAgICAgIH0KICAgICAgICBmb3JlYWNoICgkdGhpcy0+ZGF0YSBhcyAkb2JqZWN0KSB7CiAgICAgICAgICAgICRyZXN1bHQgLj0gKHN0cmluZykgJG9iamVjdDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIENCT1JPYmplY3RbXSAkZGF0YQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShhcnJheSAkZGF0YSA9IFtdKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkZGF0YSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFkZChDQk9ST2JqZWN0ICRvYmplY3QpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPmRhdGFbXSA9ICRvYmplY3Q7CiAgICAgICAgWyR0aGlzLT5hZGRpdGlvbmFsSW5mb3JtYXRpb24sICR0aGlzLT5sZW5ndGhdID0gTGVuZ3RoQ2FsY3VsYXRvcjo6Z2V0TGVuZ3RoT2ZBcnJheSgkdGhpcy0+ZGF0YSk7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzKGludCAkaW5kZXgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X2tleV9leGlzdHMoJGluZGV4LCAkdGhpcy0+ZGF0YSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZShpbnQgJGluZGV4KTogc2VsZgogICAgewogICAgICAgIGlmICghICR0aGlzLT5oYXMoJGluZGV4KSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQogICAgICAgIHVuc2V0KCR0aGlzLT5kYXRhWyRpbmRleF0pOwogICAgICAgICR0aGlzLT5kYXRhID0gYXJyYXlfdmFsdWVzKCR0aGlzLT5kYXRhKTsKICAgICAgICBbJHRoaXMtPmFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgJHRoaXMtPmxlbmd0aF0gPSBMZW5ndGhDYWxjdWxhdG9yOjpnZXRMZW5ndGhPZkFycmF5KCR0aGlzLT5kYXRhKTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXQoaW50ICRpbmRleCk6IENCT1JPYmplY3QKICAgIHsKICAgICAgICBpZiAoISAkdGhpcy0+aGFzKCRpbmRleCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW5kZXggbm90IGZvdW5kLicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhWyRpbmRleF07CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldChpbnQgJGluZGV4LCBDQk9ST2JqZWN0ICRvYmplY3QpOiBzZWxmCiAgICB7CiAgICAgICAgaWYgKCEgJHRoaXMtPmhhcygkaW5kZXgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0luZGV4IG5vdCBmb3VuZC4nKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5kYXRhWyRpbmRleF0gPSAkb2JqZWN0OwogICAgICAgIFskdGhpcy0+YWRkaXRpb25hbEluZm9ybWF0aW9uLCAkdGhpcy0+bGVuZ3RoXSA9IExlbmd0aENhbGN1bGF0b3I6OmdldExlbmd0aE9mQXJyYXkoJHRoaXMtPmRhdGEpOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5PGludCwgbWl4ZWQ+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBub3JtYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfbWFwKHN0YXRpYyBmdW5jdGlvbiAoQ0JPUk9iamVjdCAkb2JqZWN0KSB7CiAgICAgICAgICAgIHJldHVybiAkb2JqZWN0IGluc3RhbmNlb2YgTm9ybWFsaXphYmxlID8gJG9iamVjdC0+bm9ybWFsaXplKCkgOiAkb2JqZWN0OwogICAgICAgIH0sICR0aGlzLT5kYXRhKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoZSBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIG9uIHYzLjAuIFBsZWFzZSByZWx5IG9uIHRoZSBDQk9SXE5vcm1hbGl6YWJsZSBpbnRlcmZhY2UKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5PGludHxzdHJpbmcsIG1peGVkPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGEoYm9vbCAkaWdub3JlVGFncyA9IGZhbHNlKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfbWFwKHN0YXRpYyBmdW5jdGlvbiAoQ0JPUk9iamVjdCAkb2JqZWN0KSB1c2UgKCRpZ25vcmVUYWdzKSB7CiAgICAgICAgICAgIHJldHVybiAkb2JqZWN0LT5nZXROb3JtYWxpemVkRGF0YSgkaWdub3JlVGFncyk7CiAgICAgICAgfSwgJHRoaXMtPmRhdGEpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjb3VudCgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gY291bnQoJHRoaXMtPmRhdGEpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBJdGVyYXRvcjxpbnQsIENCT1JPYmplY3Q+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJdGVyYXRvcigpOiBJdGVyYXRvcgogICAgewogICAgICAgIHJldHVybiBuZXcgQXJyYXlJdGVyYXRvcigkdGhpcy0+ZGF0YSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldEV4aXN0cygkb2Zmc2V0KTogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aGFzKCRvZmZzZXQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRHZXQoJG9mZnNldCk6IENCT1JPYmplY3QKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldCgkb2Zmc2V0KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0U2V0KCRvZmZzZXQsICR2YWx1ZSk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoJG9mZnNldCA9PT0gbnVsbCkgewogICAgICAgICAgICAkdGhpcy0+YWRkKCR2YWx1ZSk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+c2V0KCRvZmZzZXQsICR2YWx1ZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFVuc2V0KCRvZmZzZXQpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPnJlbW92ZSgkb2Zmc2V0KTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/MapItem.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgpjbGFzcyBNYXBJdGVtCnsKICAgIC8qKgogICAgICogQHZhciBDQk9ST2JqZWN0CiAgICAgKi8KICAgIHByaXZhdGUgJGtleTsKCiAgICAvKioKICAgICAqIEB2YXIgQ0JPUk9iamVjdAogICAgICovCiAgICBwcml2YXRlICR2YWx1ZTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoQ0JPUk9iamVjdCAka2V5LCBDQk9ST2JqZWN0ICR2YWx1ZSkKICAgIHsKICAgICAgICAkdGhpcy0+a2V5ID0gJGtleTsKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkdmFsdWU7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoQ0JPUk9iamVjdCAka2V5LCBDQk9ST2JqZWN0ICR2YWx1ZSk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGtleSwgJHZhbHVlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0S2V5KCk6IENCT1JPYmplY3QKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmtleTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmFsdWUoKTogQ0JPUk9iamVjdAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWU7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/MapObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7Cgp1c2UgZnVuY3Rpb24gYXJyYXlfa2V5X2V4aXN0czsKdXNlIEFycmF5QWNjZXNzOwp1c2UgQXJyYXlJdGVyYXRvcjsKdXNlIGZ1bmN0aW9uIGNvdW50Owp1c2UgQ291bnRhYmxlOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgSXRlcmF0b3I7CnVzZSBJdGVyYXRvckFnZ3JlZ2F0ZTsKCi8qKgogKiBAcGhwc3Rhbi1pbXBsZW1lbnRzIEFycmF5QWNjZXNzPGludCwgQ0JPUk9iamVjdD4KICogQHBocHN0YW4taW1wbGVtZW50cyBJdGVyYXRvckFnZ3JlZ2F0ZTxpbnQsIE1hcEl0ZW0+CiAqLwpmaW5hbCBjbGFzcyBNYXBPYmplY3QgZXh0ZW5kcyBBYnN0cmFjdENCT1JPYmplY3QgaW1wbGVtZW50cyBDb3VudGFibGUsIEl0ZXJhdG9yQWdncmVnYXRlLCBOb3JtYWxpemFibGUsIEFycmF5QWNjZXNzCnsKICAgIHByaXZhdGUgY29uc3QgTUFKT1JfVFlQRSA9IHNlbGY6Ok1BSk9SX1RZUEVfTUFQOwoKICAgIC8qKgogICAgICogQHZhciBNYXBJdGVtW10KICAgICAqLwogICAgcHJpdmF0ZSAkZGF0YTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkbGVuZ3RoOwoKICAgIC8qKgogICAgICogQHBhcmFtIE1hcEl0ZW1bXSAkZGF0YQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJGRhdGEgPSBbXSkKICAgIHsKICAgICAgICBbJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgJGxlbmd0aF0gPSBMZW5ndGhDYWxjdWxhdG9yOjpnZXRMZW5ndGhPZkFycmF5KCRkYXRhKTsKICAgICAgICBhcnJheV9tYXAoc3RhdGljIGZ1bmN0aW9uICgkaXRlbSk6IHZvaWQgewogICAgICAgICAgICBpZiAoISAkaXRlbSBpbnN0YW5jZW9mIE1hcEl0ZW0pIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSBsaXN0IG11c3QgY29udGFpbiBvbmx5IE1hcEl0ZW0gb2JqZWN0cy4nKTsKICAgICAgICAgICAgfQogICAgICAgIH0sICRkYXRhKTsKCiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdChzZWxmOjpNQUpPUl9UWVBFLCAkYWRkaXRpb25hbEluZm9ybWF0aW9uKTsKICAgICAgICAkdGhpcy0+ZGF0YSA9ICRkYXRhOwogICAgICAgICR0aGlzLT5sZW5ndGggPSAkbGVuZ3RoOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgICRyZXN1bHQgPSBwYXJlbnQ6Ol9fdG9TdHJpbmcoKTsKICAgICAgICBpZiAoJHRoaXMtPmxlbmd0aCAhPT0gbnVsbCkgewogICAgICAgICAgICAkcmVzdWx0IC49ICR0aGlzLT5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5kYXRhIGFzICRvYmplY3QpIHsKICAgICAgICAgICAgJHJlc3VsdCAuPSAkb2JqZWN0LT5nZXRLZXkoKQogICAgICAgICAgICAgICAgLT5fX3RvU3RyaW5nKCkKICAgICAgICAgICAgOwogICAgICAgICAgICAkcmVzdWx0IC49ICRvYmplY3QtPmdldFZhbHVlKCkKICAgICAgICAgICAgICAgIC0+X190b1N0cmluZygpCiAgICAgICAgICAgIDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIE1hcEl0ZW1bXSAkZGF0YQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShhcnJheSAkZGF0YSA9IFtdKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkZGF0YSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFkZChDQk9ST2JqZWN0ICRrZXksIENCT1JPYmplY3QgJHZhbHVlKTogc2VsZgogICAgewogICAgICAgIGlmICghICRrZXkgaW5zdGFuY2VvZiBOb3JtYWxpemFibGUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBrZXkuIFNoYWxsIGJlIG5vcm1hbGl6YWJsZScpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+ZGF0YVska2V5LT5ub3JtYWxpemUoKV0gPSBNYXBJdGVtOjpjcmVhdGUoJGtleSwgJHZhbHVlKTsKICAgICAgICBbJHRoaXMtPmFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgJHRoaXMtPmxlbmd0aF0gPSBMZW5ndGhDYWxjdWxhdG9yOjpnZXRMZW5ndGhPZkFycmF5KCR0aGlzLT5kYXRhKTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGtleQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzKCRrZXkpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X2tleV9leGlzdHMoJGtleSwgJHRoaXMtPmRhdGEpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGluZGV4CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmUoJGluZGV4KTogc2VsZgogICAgewogICAgICAgIGlmICghICR0aGlzLT5oYXMoJGluZGV4KSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQogICAgICAgIHVuc2V0KCR0aGlzLT5kYXRhWyRpbmRleF0pOwogICAgICAgICR0aGlzLT5kYXRhID0gYXJyYXlfdmFsdWVzKCR0aGlzLT5kYXRhKTsKICAgICAgICBbJHRoaXMtPmFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgJHRoaXMtPmxlbmd0aF0gPSBMZW5ndGhDYWxjdWxhdG9yOjpnZXRMZW5ndGhPZkFycmF5KCR0aGlzLT5kYXRhKTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGluZGV4CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXQoJGluZGV4KTogQ0JPUk9iamVjdAogICAgewogICAgICAgIGlmICghICR0aGlzLT5oYXMoJGluZGV4KSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbmRleCBub3QgZm91bmQuJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPmRhdGFbJGluZGV4XS0+Z2V0VmFsdWUoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0KE1hcEl0ZW0gJG9iamVjdCk6IHNlbGYKICAgIHsKICAgICAgICAka2V5ID0gJG9iamVjdC0+Z2V0S2V5KCk7CiAgICAgICAgaWYgKCEgJGtleSBpbnN0YW5jZW9mIE5vcm1hbGl6YWJsZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIGtleS4gU2hhbGwgYmUgbm9ybWFsaXphYmxlJyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+ZGF0YVska2V5LT5ub3JtYWxpemUoKV0gPSAkb2JqZWN0OwogICAgICAgIFskdGhpcy0+YWRkaXRpb25hbEluZm9ybWF0aW9uLCAkdGhpcy0+bGVuZ3RoXSA9IExlbmd0aENhbGN1bGF0b3I6OmdldExlbmd0aE9mQXJyYXkoJHRoaXMtPmRhdGEpOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNvdW50KCk6IGludAogICAgewogICAgICAgIHJldHVybiBjb3VudCgkdGhpcy0+ZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEl0ZXJhdG9yPGludCwgTWFwSXRlbT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEl0ZXJhdG9yKCk6IEl0ZXJhdG9yCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBBcnJheUl0ZXJhdG9yKCR0aGlzLT5kYXRhKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXk8aW50fHN0cmluZywgbWl4ZWQ+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBub3JtYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfcmVkdWNlKCR0aGlzLT5kYXRhLCBzdGF0aWMgZnVuY3Rpb24gKGFycmF5ICRjYXJyeSwgTWFwSXRlbSAkaXRlbSk6IGFycmF5IHsKICAgICAgICAgICAgJGtleSA9ICRpdGVtLT5nZXRLZXkoKTsKICAgICAgICAgICAgaWYgKCEgJGtleSBpbnN0YW5jZW9mIE5vcm1hbGl6YWJsZSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBrZXkuIFNoYWxsIGJlIG5vcm1hbGl6YWJsZScpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR2YWx1ZU9iamVjdCA9ICRpdGVtLT5nZXRWYWx1ZSgpOwogICAgICAgICAgICAkY2FycnlbJGtleS0+bm9ybWFsaXplKCldID0gJHZhbHVlT2JqZWN0IGluc3RhbmNlb2YgTm9ybWFsaXphYmxlID8gJHZhbHVlT2JqZWN0LT5ub3JtYWxpemUoKSA6ICR2YWx1ZU9iamVjdDsKCiAgICAgICAgICAgIHJldHVybiAkY2Fycnk7CiAgICAgICAgfSwgW10pOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXk8aW50fHN0cmluZywgbWl4ZWQ+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxpemVkRGF0YShib29sICRpZ25vcmVUYWdzID0gZmFsc2UpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBhcnJheV9yZWR1Y2UoJHRoaXMtPmRhdGEsIHN0YXRpYyBmdW5jdGlvbiAoYXJyYXkgJGNhcnJ5LCBNYXBJdGVtICRpdGVtKSB1c2UgKCRpZ25vcmVUYWdzKTogYXJyYXkgewogICAgICAgICAgICAka2V5ID0gJGl0ZW0tPmdldEtleSgpOwogICAgICAgICAgICAkdmFsdWVPYmplY3QgPSAkaXRlbS0+Z2V0VmFsdWUoKTsKICAgICAgICAgICAgJGNhcnJ5WyRrZXktPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKV0gPSAkdmFsdWVPYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKTsKCiAgICAgICAgICAgIHJldHVybiAkY2Fycnk7CiAgICAgICAgfSwgW10pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRFeGlzdHMoJG9mZnNldCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmhhcygkb2Zmc2V0KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0R2V0KCRvZmZzZXQpOiBDQk9ST2JqZWN0CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXQoJG9mZnNldCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFNldCgkb2Zmc2V0LCAkdmFsdWUpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCEgJG9mZnNldCBpbnN0YW5jZW9mIENCT1JPYmplY3QpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBrZXknKTsKICAgICAgICB9CiAgICAgICAgaWYgKCEgJHZhbHVlIGluc3RhbmNlb2YgQ0JPUk9iamVjdCkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIHZhbHVlJyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+c2V0KE1hcEl0ZW06OmNyZWF0ZSgkb2Zmc2V0LCAkdmFsdWUpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0VW5zZXQoJG9mZnNldCk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+cmVtb3ZlKCRvZmZzZXQpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/NegativeIntegerObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7Cgp1c2UgQnJpY2tcTWF0aFxCaWdJbnRlZ2VyOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgY29uc3QgU1RSX1BBRF9MRUZUOwoKLyoqCiAqIEBmaW5hbAogKi8KY2xhc3MgTmVnYXRpdmVJbnRlZ2VyT2JqZWN0IGV4dGVuZHMgQWJzdHJhY3RDQk9ST2JqZWN0IGltcGxlbWVudHMgTm9ybWFsaXphYmxlCnsKICAgIHByaXZhdGUgY29uc3QgTUFKT1JfVFlQRSA9IHNlbGY6Ok1BSk9SX1RZUEVfTkVHQVRJVkVfSU5URUdFUjsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkZGF0YTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdChzZWxmOjpNQUpPUl9UWVBFLCAkYWRkaXRpb25hbEluZm9ybWF0aW9uKTsKICAgICAgICAkdGhpcy0+ZGF0YSA9ICRkYXRhOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgICRyZXN1bHQgPSBwYXJlbnQ6Ol9fdG9TdHJpbmcoKTsKICAgICAgICBpZiAoJHRoaXMtPmRhdGEgIT09IG51bGwpIHsKICAgICAgICAgICAgJHJlc3VsdCAuPSAkdGhpcy0+ZGF0YTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlT2JqZWN0Rm9yVmFsdWUoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShpbnQgJHZhbHVlKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBzZWxmOjpjcmVhdGVGcm9tU3RyaW5nKChzdHJpbmcpICR2YWx1ZSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tU3RyaW5nKHN0cmluZyAkdmFsdWUpOiBzZWxmCiAgICB7CiAgICAgICAgJGludGVnZXIgPSBCaWdJbnRlZ2VyOjpvZigkdmFsdWUpOwoKICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlQmlnSW50ZWdlcigkaW50ZWdlcik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFZhbHVlKCk6IHN0cmluZwogICAgewogICAgICAgIGlmICgkdGhpcy0+ZGF0YSA9PT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgKC0xIC0gJHRoaXMtPmFkZGl0aW9uYWxJbmZvcm1hdGlvbik7CiAgICAgICAgfQoKICAgICAgICAkcmVzdWx0ID0gVXRpbHM6OmJpblRvQmlnSW50ZWdlcigkdGhpcy0+ZGF0YSk7CiAgICAgICAgJG1pbnVzT25lID0gQmlnSW50ZWdlcjo6b2YoLTEpOwoKICAgICAgICByZXR1cm4gJG1pbnVzT25lLT5taW51cygkcmVzdWx0KQogICAgICAgICAgICAtPnRvQmFzZSgxMCkKICAgICAgICA7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5vcm1hbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldFZhbHVlKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBUaGUgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBvbiB2My4wLiBQbGVhc2UgcmVseSBvbiB0aGUgQ0JPUlxOb3JtYWxpemFibGUgaW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxpemVkRGF0YShib29sICRpZ25vcmVUYWdzID0gZmFsc2UpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldFZhbHVlKCk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlQmlnSW50ZWdlcihCaWdJbnRlZ2VyICRpbnRlZ2VyKTogc2VsZgogICAgewogICAgICAgIGlmICgkaW50ZWdlci0+aXNHcmVhdGVyVGhhbk9yRXF1YWxUbyhCaWdJbnRlZ2VyOjp6ZXJvKCkpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSB2YWx1ZSBtdXN0IGJlIGEgbmVnYXRpdmUgaW50ZWdlci4nKTsKICAgICAgICB9CgogICAgICAgICRtaW51c09uZSA9IEJpZ0ludGVnZXI6Om9mKC0xKTsKICAgICAgICAkY29tcHV0ZWRfdmFsdWUgPSAkbWludXNPbmUtPm1pbnVzKCRpbnRlZ2VyKTsKCiAgICAgICAgc3dpdGNoICh0cnVlKSB7CiAgICAgICAgICAgIGNhc2UgJGNvbXB1dGVkX3ZhbHVlLT5pc0xlc3NUaGFuKEJpZ0ludGVnZXI6Om9mKDI0KSk6CiAgICAgICAgICAgICAgICAkYWkgPSAkY29tcHV0ZWRfdmFsdWUtPnRvSW50KCk7CiAgICAgICAgICAgICAgICAkZGF0YSA9IG51bGw7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAkY29tcHV0ZWRfdmFsdWUtPmlzTGVzc1RoYW4oQmlnSW50ZWdlcjo6ZnJvbUJhc2UoJ0ZGJywgMTYpKToKICAgICAgICAgICAgICAgICRhaSA9IDI0OwogICAgICAgICAgICAgICAgJGRhdGEgPSBzZWxmOjpoZXgyYmluKHN0cl9wYWQoJGNvbXB1dGVkX3ZhbHVlLT50b0Jhc2UoMTYpLCAyLCAnMCcsIFNUUl9QQURfTEVGVCkpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJGNvbXB1dGVkX3ZhbHVlLT5pc0xlc3NUaGFuKEJpZ0ludGVnZXI6OmZyb21CYXNlKCdGRkZGJywgMTYpKToKICAgICAgICAgICAgICAgICRhaSA9IDI1OwogICAgICAgICAgICAgICAgJGRhdGEgPSBzZWxmOjpoZXgyYmluKHN0cl9wYWQoJGNvbXB1dGVkX3ZhbHVlLT50b0Jhc2UoMTYpLCA0LCAnMCcsIFNUUl9QQURfTEVGVCkpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJGNvbXB1dGVkX3ZhbHVlLT5pc0xlc3NUaGFuKEJpZ0ludGVnZXI6OmZyb21CYXNlKCdGRkZGRkZGRicsIDE2KSk6CiAgICAgICAgICAgICAgICAkYWkgPSAyNjsKICAgICAgICAgICAgICAgICRkYXRhID0gc2VsZjo6aGV4MmJpbihzdHJfcGFkKCRjb21wdXRlZF92YWx1ZS0+dG9CYXNlKDE2KSwgOCwgJzAnLCBTVFJfUEFEX0xFRlQpKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAnT3V0IG9mIHJhbmdlLiBQbGVhc2UgdXNlIE5lZ2F0aXZlQmlnSW50ZWdlclRhZyB0YWcgd2l0aCBCeXRlU3RyaW5nT2JqZWN0IG9iamVjdCBpbnN0ZWFkLicKICAgICAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGFpLCAkZGF0YSk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gaGV4MmJpbihzdHJpbmcgJGRhdGEpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcmVzdWx0ID0gaGV4MmJpbigkZGF0YSk7CiAgICAgICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VuYWJsZSB0byBjb252ZXJ0IHRoZSBkYXRhJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Normalizable.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgppbnRlcmZhY2UgTm9ybWFsaXphYmxlCnsKICAgIC8qKgogICAgICogQHJldHVybiBtaXhlZHxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBub3JtYWxpemUoKTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/OtherObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgphYnN0cmFjdCBjbGFzcyBPdGhlck9iamVjdCBleHRlbmRzIEFic3RyYWN0Q0JPUk9iamVjdAp7CiAgICBwcml2YXRlIGNvbnN0IE1BSk9SX1RZUEUgPSBzZWxmOjpNQUpPUl9UWVBFX09USEVSX1RZUEU7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByb3RlY3RlZCAkZGF0YTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdChzZWxmOjpNQUpPUl9UWVBFLCAkYWRkaXRpb25hbEluZm9ybWF0aW9uKTsKICAgICAgICAkdGhpcy0+ZGF0YSA9ICRkYXRhOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgICRyZXN1bHQgPSBwYXJlbnQ6Ol9fdG9TdHJpbmcoKTsKICAgICAgICBpZiAoJHRoaXMtPmRhdGEgIT09IG51bGwpIHsKICAgICAgICAgICAgJHJlc3VsdCAuPSAkdGhpcy0+ZGF0YTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50KCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmRhdGE7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGludFtdCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3VwcG9ydGVkQWRkaXRpb25hbEluZm9ybWF0aW9uKCk6IGFycmF5OwoKICAgIGFic3RyYWN0IHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUxvYWRlZERhdGEoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEpOiBzZWxmOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/OtherObject/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/OtherObject/BreakObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcT3RoZXJPYmplY3Q7Cgp1c2UgQ0JPUlxPdGhlck9iamVjdCBhcyBCYXNlOwoKZmluYWwgY2xhc3MgQnJlYWtPYmplY3QgZXh0ZW5kcyBCYXNlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdChzZWxmOjpPQkpFQ1RfQlJFQUssIG51bGwpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKCk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN1cHBvcnRlZEFkZGl0aW9uYWxJbmZvcm1hdGlvbigpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbc2VsZjo6T0JKRUNUX0JSRUFLXTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21Mb2FkZWREYXRhKGludCAkYWRkaXRpb25hbEluZm9ybWF0aW9uLCA/c3RyaW5nICRkYXRhKTogQmFzZQogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGEoYm9vbCAkaWdub3JlVGFncyA9IGZhbHNlKTogYm9vbAogICAgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/OtherObject/DoublePrecisionFloatObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcT3RoZXJPYmplY3Q7Cgp1c2UgQnJpY2tcTWF0aFxCaWdJbnRlZ2VyOwp1c2UgQ0JPUlxOb3JtYWxpemFibGU7CnVzZSBDQk9SXE90aGVyT2JqZWN0IGFzIEJhc2U7CnVzZSBDQk9SXFV0aWxzOwp1c2UgY29uc3QgSU5GOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgY29uc3QgTkFOOwoKZmluYWwgY2xhc3MgRG91YmxlUHJlY2lzaW9uRmxvYXRPYmplY3QgZXh0ZW5kcyBCYXNlIGltcGxlbWVudHMgTm9ybWFsaXphYmxlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3VwcG9ydGVkQWRkaXRpb25hbEluZm9ybWF0aW9uKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFtzZWxmOjpPQkpFQ1RfRE9VQkxFX1BSRUNJU0lPTl9GTE9BVF07CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tTG9hZGVkRGF0YShpbnQgJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgP3N0cmluZyAkZGF0YSk6IEJhc2UKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgJGRhdGEpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKHN0cmluZyAkdmFsdWUpOiBzZWxmCiAgICB7CiAgICAgICAgaWYgKG1iX3N0cmxlbigkdmFsdWUsICc4Yml0JykgIT09IDgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVGhlIHZhbHVlIGlzIG5vdCBhIHZhbGlkIGRvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgc2VsZihzZWxmOjpPQkpFQ1RfRE9VQkxFX1BSRUNJU0lPTl9GTE9BVCwgJHZhbHVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoZSBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIG9uIHYzLjAuIFBsZWFzZSByZWx5IG9uIHRoZSBDQk9SXE5vcm1hbGl6YWJsZSBpbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vcm1hbGl6ZWREYXRhKGJvb2wgJGlnbm9yZVRhZ3MgPSBmYWxzZSkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm5vcm1hbGl6ZSgpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBmbG9hdHxpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5vcm1hbGl6ZSgpCiAgICB7CiAgICAgICAgJGV4cG9uZW50ID0gJHRoaXMtPmdldEV4cG9uZW50KCk7CiAgICAgICAgJG1hbnRpc3NhID0gJHRoaXMtPmdldE1hbnRpc3NhKCk7CiAgICAgICAgJHNpZ24gPSAkdGhpcy0+Z2V0U2lnbigpOwoKICAgICAgICBpZiAoJGV4cG9uZW50ID09PSAwKSB7CiAgICAgICAgICAgICR2YWwgPSAkbWFudGlzc2EgKiAyICoqICgtKDEwMjIgKyA1MikpOwogICAgICAgIH0gZWxzZWlmICgkZXhwb25lbnQgIT09IDBiMTExMTExMTExMTEpIHsKICAgICAgICAgICAgJHZhbCA9ICgkbWFudGlzc2EgKyAoMSA8PCA1MikpICogMiAqKiAoJGV4cG9uZW50IC0gKDEwMjMgKyA1MikpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR2YWwgPSAkbWFudGlzc2EgPT09IDAgPyBJTkYgOiBOQU47CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHNpZ24gKiAkdmFsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFeHBvbmVudCgpOiBpbnQKICAgIHsKICAgICAgICAkZGF0YSA9ICR0aGlzLT5kYXRhOwogICAgICAgIFV0aWxzOjphc3NlcnRTdHJpbmcoJGRhdGEsICdJbnZhbGlkIGRhdGEnKTsKCiAgICAgICAgcmV0dXJuIFV0aWxzOjpiaW5Ub0JpZ0ludGVnZXIoJGRhdGEpLT5zaGlmdGVkUmlnaHQoNTIpLT5hbmQoVXRpbHM6OmhleFRvQmlnSW50ZWdlcignN2ZmJykpLT50b0ludCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNYW50aXNzYSgpOiBpbnQKICAgIHsKICAgICAgICAkZGF0YSA9ICR0aGlzLT5kYXRhOwogICAgICAgIFV0aWxzOjphc3NlcnRTdHJpbmcoJGRhdGEsICdJbnZhbGlkIGRhdGEnKTsKCiAgICAgICAgcmV0dXJuIFV0aWxzOjpiaW5Ub0JpZ0ludGVnZXIoJGRhdGEpLT5hbmQoVXRpbHM6OmhleFRvQmlnSW50ZWdlcignZmZmZmZmZmZmZmZmZicpKS0+dG9JbnQoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2lnbigpOiBpbnQKICAgIHsKICAgICAgICAkZGF0YSA9ICR0aGlzLT5kYXRhOwogICAgICAgIFV0aWxzOjphc3NlcnRTdHJpbmcoJGRhdGEsICdJbnZhbGlkIGRhdGEnKTsKICAgICAgICAkc2lnbiA9IFV0aWxzOjpiaW5Ub0JpZ0ludGVnZXIoJGRhdGEpLT5zaGlmdGVkUmlnaHQoNjMpOwoKICAgICAgICByZXR1cm4gJHNpZ24tPmlzRXF1YWxUbyhCaWdJbnRlZ2VyOjpvbmUoKSkgPyAtMSA6IDE7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/OtherObject/FalseObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcT3RoZXJPYmplY3Q7Cgp1c2UgQ0JPUlxOb3JtYWxpemFibGU7CnVzZSBDQk9SXE90aGVyT2JqZWN0IGFzIEJhc2U7CgpmaW5hbCBjbGFzcyBGYWxzZU9iamVjdCBleHRlbmRzIEJhc2UgaW1wbGVtZW50cyBOb3JtYWxpemFibGUKewogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KHNlbGY6Ok9CSkVDVF9GQUxTRSwgbnVsbCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3VwcG9ydGVkQWRkaXRpb25hbEluZm9ybWF0aW9uKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFtzZWxmOjpPQkpFQ1RfRkFMU0VdOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUxvYWRlZERhdGEoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEpOiBCYXNlCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5vcm1hbGl6ZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGEoYm9vbCAkaWdub3JlVGFncyA9IGZhbHNlKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bm9ybWFsaXplKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/OtherObject/GenericObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcT3RoZXJPYmplY3Q7Cgp1c2UgQ0JPUlxPdGhlck9iamVjdCBhcyBCYXNlOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgZnVuY3Rpb24gb3JkOwoKZmluYWwgY2xhc3MgR2VuZXJpY09iamVjdCBleHRlbmRzIEJhc2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdXBwb3J0ZWRBZGRpdGlvbmFsSW5mb3JtYXRpb24oKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gW107CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tTG9hZGVkRGF0YShpbnQgJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgP3N0cmluZyAkZGF0YSk6IEJhc2UKICAgIHsKICAgICAgICBpZiAoJGRhdGEgIT09IG51bGwgJiYgb3JkKCRkYXRhKSA8IDMyKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgc2ltcGxlIHZhbHVlLiBDb250ZW50IGRhdGEgc2hvdWxkIG5vdCBiZSBwcmVzZW50LicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoZSBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIG9uIHYzLjAuIFBsZWFzZSByZWx5IG9uIHRoZSBDQk9SXE5vcm1hbGl6YWJsZSBpbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vcm1hbGl6ZWREYXRhKGJvb2wgJGlnbm9yZVRhZ3MgPSBmYWxzZSkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmRhdGE7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/OtherObject/HalfPrecisionFloatObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcT3RoZXJPYmplY3Q7Cgp1c2UgQnJpY2tcTWF0aFxCaWdJbnRlZ2VyOwp1c2UgQ0JPUlxOb3JtYWxpemFibGU7CnVzZSBDQk9SXE90aGVyT2JqZWN0IGFzIEJhc2U7CnVzZSBDQk9SXFV0aWxzOwp1c2UgY29uc3QgSU5GOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgY29uc3QgTkFOOwoKZmluYWwgY2xhc3MgSGFsZlByZWNpc2lvbkZsb2F0T2JqZWN0IGV4dGVuZHMgQmFzZSBpbXBsZW1lbnRzIE5vcm1hbGl6YWJsZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN1cHBvcnRlZEFkZGl0aW9uYWxJbmZvcm1hdGlvbigpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbc2VsZjo6T0JKRUNUX0hBTEZfUFJFQ0lTSU9OX0ZMT0FUXTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21Mb2FkZWREYXRhKGludCAkYWRkaXRpb25hbEluZm9ybWF0aW9uLCA/c3RyaW5nICRkYXRhKTogQmFzZQogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkYWRkaXRpb25hbEluZm9ybWF0aW9uLCAkZGF0YSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoc3RyaW5nICR2YWx1ZSk6IHNlbGYKICAgIHsKICAgICAgICBpZiAobWJfc3RybGVuKCR2YWx1ZSwgJzhiaXQnKSAhPT0gMikgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGUgdmFsdWUgaXMgbm90IGEgdmFsaWQgaGFsZiBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgc2VsZihzZWxmOjpPQkpFQ1RfSEFMRl9QUkVDSVNJT05fRkxPQVQsICR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBUaGUgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBvbiB2My4wLiBQbGVhc2UgcmVseSBvbiB0aGUgQ0JPUlxOb3JtYWxpemFibGUgaW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxpemVkRGF0YShib29sICRpZ25vcmVUYWdzID0gZmFsc2UpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5ub3JtYWxpemUoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gZmxvYXR8aW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBub3JtYWxpemUoKQogICAgewogICAgICAgICRleHBvbmVudCA9ICR0aGlzLT5nZXRFeHBvbmVudCgpOwogICAgICAgICRtYW50aXNzYSA9ICR0aGlzLT5nZXRNYW50aXNzYSgpOwogICAgICAgICRzaWduID0gJHRoaXMtPmdldFNpZ24oKTsKCiAgICAgICAgaWYgKCRleHBvbmVudCA9PT0gMCkgewogICAgICAgICAgICAkdmFsID0gJG1hbnRpc3NhICogMiAqKiAoLTI0KTsKICAgICAgICB9IGVsc2VpZiAoJGV4cG9uZW50ICE9PSAwYjExMTExKSB7CiAgICAgICAgICAgICR2YWwgPSAoJG1hbnRpc3NhICsgKDEgPDwgMTApKSAqIDIgKiogKCRleHBvbmVudCAtIDI1KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdmFsID0gJG1hbnRpc3NhID09PSAwID8gSU5GIDogTkFOOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRzaWduICogJHZhbDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXhwb25lbnQoKTogaW50CiAgICB7CiAgICAgICAgJGRhdGEgPSAkdGhpcy0+ZGF0YTsKICAgICAgICBVdGlsczo6YXNzZXJ0U3RyaW5nKCRkYXRhLCAnSW52YWxpZCBkYXRhJyk7CgogICAgICAgIHJldHVybiBVdGlsczo6YmluVG9CaWdJbnRlZ2VyKCRkYXRhKS0+c2hpZnRlZFJpZ2h0KDEwKS0+YW5kKFV0aWxzOjpoZXhUb0JpZ0ludGVnZXIoJzFmJykpLT50b0ludCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNYW50aXNzYSgpOiBpbnQKICAgIHsKICAgICAgICAkZGF0YSA9ICR0aGlzLT5kYXRhOwogICAgICAgIFV0aWxzOjphc3NlcnRTdHJpbmcoJGRhdGEsICdJbnZhbGlkIGRhdGEnKTsKCiAgICAgICAgcmV0dXJuIFV0aWxzOjpiaW5Ub0JpZ0ludGVnZXIoJGRhdGEpLT5hbmQoVXRpbHM6OmhleFRvQmlnSW50ZWdlcignM2ZmJykpLT50b0ludCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaWduKCk6IGludAogICAgewogICAgICAgICRkYXRhID0gJHRoaXMtPmRhdGE7CiAgICAgICAgVXRpbHM6OmFzc2VydFN0cmluZygkZGF0YSwgJ0ludmFsaWQgZGF0YScpOwogICAgICAgICRzaWduID0gVXRpbHM6OmJpblRvQmlnSW50ZWdlcigkZGF0YSktPnNoaWZ0ZWRSaWdodCgxNSk7CgogICAgICAgIHJldHVybiAkc2lnbi0+aXNFcXVhbFRvKEJpZ0ludGVnZXI6Om9uZSgpKSA/IC0xIDogMTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/OtherObject/NullObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcT3RoZXJPYmplY3Q7Cgp1c2UgQ0JPUlxOb3JtYWxpemFibGU7CnVzZSBDQk9SXE90aGVyT2JqZWN0IGFzIEJhc2U7CgpmaW5hbCBjbGFzcyBOdWxsT2JqZWN0IGV4dGVuZHMgQmFzZSBpbXBsZW1lbnRzIE5vcm1hbGl6YWJsZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3Qoc2VsZjo6T0JKRUNUX05VTEwsIG51bGwpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKCk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN1cHBvcnRlZEFkZGl0aW9uYWxJbmZvcm1hdGlvbigpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbc2VsZjo6T0JKRUNUX05VTExdOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUxvYWRlZERhdGEoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEpOiBCYXNlCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5vcm1hbGl6ZSgpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBUaGUgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBvbiB2My4wLiBQbGVhc2UgcmVseSBvbiB0aGUgQ0JPUlxOb3JtYWxpemFibGUgaW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxpemVkRGF0YShib29sICRpZ25vcmVUYWdzID0gZmFsc2UpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5ub3JtYWxpemUoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/OtherObject/OtherObjectManager.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcT3RoZXJPYmplY3Q7Cgp1c2UgZnVuY3Rpb24gYXJyYXlfa2V5X2V4aXN0czsKdXNlIENCT1JcT3RoZXJPYmplY3Q7CnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CgovKioKICogQGZpbmFsCiAqLwpjbGFzcyBPdGhlck9iamVjdE1hbmFnZXIgaW1wbGVtZW50cyBPdGhlck9iamVjdE1hbmFnZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ1tdCiAgICAgKi8KICAgIHByaXZhdGUgJGNsYXNzZXMgPSBbXTsKCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZSgpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFkZChzdHJpbmcgJGNsYXNzKTogc2VsZgogICAgewogICAgICAgIGZvcmVhY2ggKCRjbGFzczo6c3VwcG9ydGVkQWRkaXRpb25hbEluZm9ybWF0aW9uKCkgYXMgJGFpKSB7CiAgICAgICAgICAgIGlmICgkYWkgPCAwKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPmNsYXNzZXNbJGFpXSA9ICRjbGFzczsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xhc3NGb3JWYWx1ZShpbnQgJHZhbHVlKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X2tleV9leGlzdHMoJHZhbHVlLCAkdGhpcy0+Y2xhc3NlcykgPyAkdGhpcy0+Y2xhc3Nlc1skdmFsdWVdIDogR2VuZXJpY09iamVjdDo6Y2xhc3M7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdEZvclZhbHVlKGludCAkdmFsdWUsID9zdHJpbmcgJGRhdGEpOiBPdGhlck9iamVjdAogICAgewogICAgICAgIC8qKiBAdmFyIE90aGVyT2JqZWN0ICRjbGFzcyAqLwogICAgICAgICRjbGFzcyA9ICR0aGlzLT5nZXRDbGFzc0ZvclZhbHVlKCR2YWx1ZSk7CgogICAgICAgIHJldHVybiAkY2xhc3M6OmNyZWF0ZUZyb21Mb2FkZWREYXRhKCR2YWx1ZSwgJGRhdGEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/OtherObject/OtherObjectManagerInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcT3RoZXJPYmplY3Q7Cgp1c2UgQ0JPUlxPdGhlck9iamVjdDsKCmludGVyZmFjZSBPdGhlck9iamVjdE1hbmFnZXJJbnRlcmZhY2UKewogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdEZvclZhbHVlKGludCAkdmFsdWUsID9zdHJpbmcgJGRhdGEpOiBPdGhlck9iamVjdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/OtherObject/SimpleObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcT3RoZXJPYmplY3Q7Cgp1c2UgQ0JPUlxOb3JtYWxpemFibGU7CnVzZSBDQk9SXE90aGVyT2JqZWN0IGFzIEJhc2U7CnVzZSBDQk9SXFV0aWxzOwp1c2UgZnVuY3Rpb24gY2hyOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgZnVuY3Rpb24gb3JkOwoKZmluYWwgY2xhc3MgU2ltcGxlT2JqZWN0IGV4dGVuZHMgQmFzZSBpbXBsZW1lbnRzIE5vcm1hbGl6YWJsZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN1cHBvcnRlZEFkZGl0aW9uYWxJbmZvcm1hdGlvbigpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBhcnJheV9tZXJnZShyYW5nZSgwLCAxOSksIFsyNF0pOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUxvYWRlZERhdGEoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEpOiBCYXNlCiAgICB7CiAgICAgICAgaWYgKCRhZGRpdGlvbmFsSW5mb3JtYXRpb24gPT09IDI0KSB7CiAgICAgICAgICAgIGlmICgkZGF0YSA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBzaW1wbGUgdmFsdWUuIENvbnRlbnQgZGF0YSBpcyBtaXNzaW5nLicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChtYl9zdHJsZW4oJGRhdGEsICc4Yml0JykgIT09IDEpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgc2ltcGxlIHZhbHVlLiBDb250ZW50IGRhdGEgaXMgdG9vIGxvbmcuJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKG9yZCgkZGF0YSkgPCAzMikgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBzaW1wbGUgdmFsdWUuIENvbnRlbnQgZGF0YSBtdXN0IGJlIGJldHdlZW4gMzIgYW5kIDI1NS4nKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZWlmICgkYWRkaXRpb25hbEluZm9ybWF0aW9uIDwgMjApIHsKICAgICAgICAgICAgaWYgKCRkYXRhICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIHNpbXBsZSB2YWx1ZS4gQ29udGVudCBkYXRhIHNob3VsZCBub3QgYmUgcHJlc2VudC4nKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbm9ybWFsaXplKCk6IGludAogICAgewogICAgICAgIGlmICgkdGhpcy0+ZGF0YSA9PT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmdldEFkZGl0aW9uYWxJbmZvcm1hdGlvbigpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFV0aWxzOjpiaW5Ub0ludCgkdGhpcy0+ZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBUaGUgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBvbiB2My4wLiBQbGVhc2UgcmVseSBvbiB0aGUgQ0JPUlxOb3JtYWxpemFibGUgaW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxpemVkRGF0YShib29sICRpZ25vcmVUYWdzID0gZmFsc2UpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm5vcm1hbGl6ZSgpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKGludCAkdmFsdWUpOiBzZWxmCiAgICB7CiAgICAgICAgc3dpdGNoICh0cnVlKSB7CiAgICAgICAgICAgIGNhc2UgJHZhbHVlIDwgMzI6CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHNlbGYoJHZhbHVlLCBudWxsKTsKICAgICAgICAgICAgY2FzZSAkdmFsdWUgPCAyNTY6CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHNlbGYoMjQsIGNocigkdmFsdWUpKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSB2YWx1ZSBpcyBub3QgYSB2YWxpZCBzaW1wbGUgdmFsdWUuJyk7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/OtherObject/SinglePrecisionFloatObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcT3RoZXJPYmplY3Q7Cgp1c2UgQnJpY2tcTWF0aFxCaWdJbnRlZ2VyOwp1c2UgQ0JPUlxPdGhlck9iamVjdCBhcyBCYXNlOwp1c2UgQ0JPUlxVdGlsczsKdXNlIGNvbnN0IElORjsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIGNvbnN0IE5BTjsKCmZpbmFsIGNsYXNzIFNpbmdsZVByZWNpc2lvbkZsb2F0T2JqZWN0IGV4dGVuZHMgQmFzZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN1cHBvcnRlZEFkZGl0aW9uYWxJbmZvcm1hdGlvbigpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbc2VsZjo6T0JKRUNUX1NJTkdMRV9QUkVDSVNJT05fRkxPQVRdOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUxvYWRlZERhdGEoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEpOiBCYXNlCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShzdHJpbmcgJHZhbHVlKTogc2VsZgogICAgewogICAgICAgIGlmIChtYl9zdHJsZW4oJHZhbHVlLCAnOGJpdCcpICE9PSA0KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSB2YWx1ZSBpcyBub3QgYSB2YWxpZCBzaW5nbGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50Jyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoc2VsZjo6T0JKRUNUX1NJTkdMRV9QUkVDSVNJT05fRkxPQVQsICR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBUaGUgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBvbiB2My4wLiBQbGVhc2UgcmVseSBvbiB0aGUgQ0JPUlxOb3JtYWxpemFibGUgaW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxpemVkRGF0YShib29sICRpZ25vcmVUYWdzID0gZmFsc2UpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5ub3JtYWxpemUoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gZmxvYXR8aW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBub3JtYWxpemUoKQogICAgewogICAgICAgICRleHBvbmVudCA9ICR0aGlzLT5nZXRFeHBvbmVudCgpOwogICAgICAgICRtYW50aXNzYSA9ICR0aGlzLT5nZXRNYW50aXNzYSgpOwogICAgICAgICRzaWduID0gJHRoaXMtPmdldFNpZ24oKTsKCiAgICAgICAgaWYgKCRleHBvbmVudCA9PT0gMCkgewogICAgICAgICAgICAkdmFsID0gJG1hbnRpc3NhICogMiAqKiAoLSgxMjYgKyAyMykpOwogICAgICAgIH0gZWxzZWlmICgkZXhwb25lbnQgIT09IDBiMTExMTExMTEpIHsKICAgICAgICAgICAgJHZhbCA9ICgkbWFudGlzc2EgKyAoMSA8PCAyMykpICogMiAqKiAoJGV4cG9uZW50IC0gKDEyNyArIDIzKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHZhbCA9ICRtYW50aXNzYSA9PT0gMCA/IElORiA6IE5BTjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkc2lnbiAqICR2YWw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEV4cG9uZW50KCk6IGludAogICAgewogICAgICAgICRkYXRhID0gJHRoaXMtPmRhdGE7CiAgICAgICAgVXRpbHM6OmFzc2VydFN0cmluZygkZGF0YSwgJ0ludmFsaWQgZGF0YScpOwoKICAgICAgICByZXR1cm4gVXRpbHM6OmJpblRvQmlnSW50ZWdlcigkZGF0YSktPnNoaWZ0ZWRSaWdodCgyMyktPmFuZChVdGlsczo6aGV4VG9CaWdJbnRlZ2VyKCdmZicpKS0+dG9JbnQoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWFudGlzc2EoKTogaW50CiAgICB7CiAgICAgICAgJGRhdGEgPSAkdGhpcy0+ZGF0YTsKICAgICAgICBVdGlsczo6YXNzZXJ0U3RyaW5nKCRkYXRhLCAnSW52YWxpZCBkYXRhJyk7CgogICAgICAgIHJldHVybiBVdGlsczo6YmluVG9CaWdJbnRlZ2VyKCRkYXRhKS0+YW5kKFV0aWxzOjpoZXhUb0JpZ0ludGVnZXIoJzdmZmZmZicpKS0+dG9JbnQoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2lnbigpOiBpbnQKICAgIHsKICAgICAgICAkZGF0YSA9ICR0aGlzLT5kYXRhOwogICAgICAgIFV0aWxzOjphc3NlcnRTdHJpbmcoJGRhdGEsICdJbnZhbGlkIGRhdGEnKTsKICAgICAgICAkc2lnbiA9IFV0aWxzOjpiaW5Ub0JpZ0ludGVnZXIoJGRhdGEpLT5zaGlmdGVkUmlnaHQoMzEpOwoKICAgICAgICByZXR1cm4gJHNpZ24tPmlzRXF1YWxUbyhCaWdJbnRlZ2VyOjpvbmUoKSkgPyAtMSA6IDE7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/OtherObject/TrueObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcT3RoZXJPYmplY3Q7Cgp1c2UgQ0JPUlxOb3JtYWxpemFibGU7CnVzZSBDQk9SXE90aGVyT2JqZWN0IGFzIEJhc2U7CgpmaW5hbCBjbGFzcyBUcnVlT2JqZWN0IGV4dGVuZHMgQmFzZSBpbXBsZW1lbnRzIE5vcm1hbGl6YWJsZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3Qoc2VsZjo6T0JKRUNUX1RSVUUsIG51bGwpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKCk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN1cHBvcnRlZEFkZGl0aW9uYWxJbmZvcm1hdGlvbigpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbc2VsZjo6T0JKRUNUX1RSVUVdOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUxvYWRlZERhdGEoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEpOiBCYXNlCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5vcm1hbGl6ZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBUaGUgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBvbiB2My4wLiBQbGVhc2UgcmVseSBvbiB0aGUgQ0JPUlxOb3JtYWxpemFibGUgaW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxpemVkRGF0YShib29sICRpZ25vcmVUYWdzID0gZmFsc2UpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5ub3JtYWxpemUoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/OtherObject/UndefinedObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcT3RoZXJPYmplY3Q7Cgp1c2UgQ0JPUlxPdGhlck9iamVjdCBhcyBCYXNlOwoKZmluYWwgY2xhc3MgVW5kZWZpbmVkT2JqZWN0IGV4dGVuZHMgQmFzZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3Qoc2VsZjo6T0JKRUNUX1VOREVGSU5FRCwgbnVsbCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3VwcG9ydGVkQWRkaXRpb25hbEluZm9ybWF0aW9uKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFtzZWxmOjpPQkpFQ1RfVU5ERUZJTkVEXTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21Mb2FkZWREYXRhKGludCAkYWRkaXRpb25hbEluZm9ybWF0aW9uLCA/c3RyaW5nICRkYXRhKTogQmFzZQogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxpemVkRGF0YShib29sICRpZ25vcmVUYWdzID0gZmFsc2UpCiAgICB7CiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/SignedIntegerObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgovKioKICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGluIHYzLjAuIFBsZWFzZSB1c2UgTmVnYXRpdmVJbnRlZ2VyT2JqZWN0IGluc3RlYWQKICovCmZpbmFsIGNsYXNzIFNpZ25lZEludGVnZXJPYmplY3QgZXh0ZW5kcyBOZWdhdGl2ZUludGVnZXJPYmplY3QKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Stream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgppbnRlcmZhY2UgU3RyZWFtCnsKICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkKGludCAkbGVuZ3RoKTogc3RyaW5nOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/StringStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7Cgp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgUnVudGltZUV4Y2VwdGlvbjsKCmZpbmFsIGNsYXNzIFN0cmluZ1N0cmVhbSBpbXBsZW1lbnRzIFN0cmVhbQp7CiAgICAvKioKICAgICAqIEB2YXIgcmVzb3VyY2UKICAgICAqLwogICAgcHJpdmF0ZSAkcmVzb3VyY2U7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkZGF0YSkKICAgIHsKICAgICAgICAkcmVzb3VyY2UgPSBmb3BlbigncGhwOi8vbWVtb3J5JywgJ3JiKycpOwogICAgICAgIGlmICgkcmVzb3VyY2UgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdVbmFibGUgdG8gb3BlbiB0aGUgbWVtb3J5Jyk7CiAgICAgICAgfQogICAgICAgICRyZXN1bHQgPSBmd3JpdGUoJHJlc291cmNlLCAkZGF0YSk7CiAgICAgICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdVbmFibGUgdG8gd3JpdGUgdGhlIG1lbW9yeScpOwogICAgICAgIH0KICAgICAgICAkcmVzdWx0ID0gcmV3aW5kKCRyZXNvdXJjZSk7CiAgICAgICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdVbmFibGUgdG8gcmV3aW5kIHRoZSBtZW1vcnknKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPnJlc291cmNlID0gJHJlc291cmNlOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKHN0cmluZyAkZGF0YSk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGRhdGEpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkKGludCAkbGVuZ3RoKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCRsZW5ndGggPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KCiAgICAgICAgJGFscmVhZHlSZWFkID0gMDsKICAgICAgICAkZGF0YSA9ICcnOwogICAgICAgIHdoaWxlICgkYWxyZWFkeVJlYWQgPCAkbGVuZ3RoKSB7CiAgICAgICAgICAgICRsZWZ0ID0gJGxlbmd0aCAtICRhbHJlYWR5UmVhZDsKICAgICAgICAgICAgJHNpemVUb1JlYWQgPSAkbGVmdCA8IDEwMjQgJiYgJGxlZnQgPiAwID8gJGxlZnQgOiAxMDI0OwogICAgICAgICAgICAkbmV3RGF0YSA9IGZyZWFkKCR0aGlzLT5yZXNvdXJjZSwgJHNpemVUb1JlYWQpOwogICAgICAgICAgICAkYWxyZWFkeVJlYWQgKz0gJHNpemVUb1JlYWQ7CgogICAgICAgICAgICBpZiAoJG5ld0RhdGEgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbignVW5hYmxlIHRvIHJlYWQgdGhlIG1lbW9yeScpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChtYl9zdHJsZW4oJG5ld0RhdGEsICc4Yml0JykgPCAkc2l6ZVRvUmVhZCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihzcHJpbnRmKAogICAgICAgICAgICAgICAgICAgICdPdXQgb2YgcmFuZ2UuIEV4cGVjdGVkOiAlZCwgcmVhZDogJWQuJywKICAgICAgICAgICAgICAgICAgICAkbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgIG1iX3N0cmxlbigkZGF0YSwgJzhiaXQnKQogICAgICAgICAgICAgICAgKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGRhdGEgLj0gJG5ld0RhdGE7CiAgICAgICAgfQoKICAgICAgICBpZiAobWJfc3RybGVuKCRkYXRhLCAnOGJpdCcpICE9PSAkbGVuZ3RoKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oc3ByaW50ZigKICAgICAgICAgICAgICAgICdPdXQgb2YgcmFuZ2UuIEV4cGVjdGVkOiAlZCwgcmVhZDogJWQuJywKICAgICAgICAgICAgICAgICRsZW5ndGgsCiAgICAgICAgICAgICAgICBtYl9zdHJsZW4oJGRhdGEsICc4Yml0JykKICAgICAgICAgICAgKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGRhdGE7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7Cgp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwoKYWJzdHJhY3QgY2xhc3MgVGFnIGV4dGVuZHMgQWJzdHJhY3RDQk9ST2JqZWN0CnsKICAgIHByaXZhdGUgY29uc3QgTUFKT1JfVFlQRSA9IHNlbGY6Ok1BSk9SX1RZUEVfVEFHOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcm90ZWN0ZWQgJGRhdGE7CgogICAgLyoqCiAgICAgKiBAdmFyIENCT1JPYmplY3QKICAgICAqLwogICAgcHJvdGVjdGVkICRvYmplY3Q7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGludCAkYWRkaXRpb25hbEluZm9ybWF0aW9uLCA/c3RyaW5nICRkYXRhLCBDQk9ST2JqZWN0ICRvYmplY3QpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdChzZWxmOjpNQUpPUl9UWVBFLCAkYWRkaXRpb25hbEluZm9ybWF0aW9uKTsKICAgICAgICAkdGhpcy0+ZGF0YSA9ICRkYXRhOwogICAgICAgICR0aGlzLT5vYmplY3QgPSAkb2JqZWN0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgICRyZXN1bHQgPSBwYXJlbnQ6Ol9fdG9TdHJpbmcoKTsKICAgICAgICBpZiAoJHRoaXMtPmRhdGEgIT09IG51bGwpIHsKICAgICAgICAgICAgJHJlc3VsdCAuPSAkdGhpcy0+ZGF0YTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0IC4gJHRoaXMtPm9iamVjdDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGF0YSgpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhOwogICAgfQoKICAgIGFic3RyYWN0IHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VGFnSWQoKTogaW50OwoKICAgIGFic3RyYWN0IHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUxvYWRlZERhdGEoCiAgICAgICAgaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sCiAgICAgICAgP3N0cmluZyAkZGF0YSwKICAgICAgICBDQk9ST2JqZWN0ICRvYmplY3QKICAgICk6IHNlbGY7CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFZhbHVlKCk6IENCT1JPYmplY3QKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm9iamVjdDsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXl7aW50LCBudWxsfHN0cmluZ30KICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBkZXRlcm1pbmVDb21wb25lbnRzKGludCAkdGFnKTogYXJyYXkKICAgIHsKICAgICAgICBzd2l0Y2ggKHRydWUpIHsKICAgICAgICAgICAgY2FzZSAkdGFnIDwgMDoKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSB2YWx1ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlci4nKTsKICAgICAgICAgICAgY2FzZSAkdGFnIDwgMjQ6CiAgICAgICAgICAgICAgICByZXR1cm4gWyR0YWcsIG51bGxdOwogICAgICAgICAgICBjYXNlICR0YWcgPCAweEZGOgogICAgICAgICAgICAgICAgcmV0dXJuIFsyNCwgc2VsZjo6aGV4MmJpbihkZWNoZXgoJHRhZykpXTsKICAgICAgICAgICAgY2FzZSAkdGFnIDwgMHhGRkZGOgogICAgICAgICAgICAgICAgcmV0dXJuIFsyNSwgc2VsZjo6aGV4MmJpbihkZWNoZXgoJHRhZykpXTsKICAgICAgICAgICAgY2FzZSAkdGFnIDwgMHhGRkZGRkZGRjoKICAgICAgICAgICAgICAgIHJldHVybiBbMjYsIHNlbGY6OmhleDJiaW4oZGVjaGV4KCR0YWcpKV07CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICdPdXQgb2YgcmFuZ2UuIFBsZWFzZSB1c2UgUG9zaXRpdmVCaWdJbnRlZ2VyVGFnIHRhZyB3aXRoIEJ5dGVTdHJpbmdPYmplY3Qgb2JqZWN0IGluc3RlYWQuJwogICAgICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gaGV4MmJpbihzdHJpbmcgJGRhdGEpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcmVzdWx0ID0gaGV4MmJpbigkZGF0YSk7CiAgICAgICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VuYWJsZSB0byBjb252ZXJ0IHRoZSBkYXRhJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/Base16EncodingTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQnl0ZVN0cmluZ09iamVjdDsKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcSW5kZWZpbml0ZUxlbmd0aEJ5dGVTdHJpbmdPYmplY3Q7CnVzZSBDQk9SXEluZGVmaW5pdGVMZW5ndGhUZXh0U3RyaW5nT2JqZWN0Owp1c2UgQ0JPUlxUYWc7CnVzZSBDQk9SXFRleHRTdHJpbmdPYmplY3Q7CgpmaW5hbCBjbGFzcyBCYXNlMTZFbmNvZGluZ1RhZyBleHRlbmRzIFRhZwp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRhZ0lkKCk6IGludAogICAgewogICAgICAgIHJldHVybiBzZWxmOjpUQUdfRU5DT0RFRF9CQVNFMTY7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tTG9hZGVkRGF0YShpbnQgJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgP3N0cmluZyAkZGF0YSwgQ0JPUk9iamVjdCAkb2JqZWN0KTogVGFnCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShDQk9ST2JqZWN0ICRvYmplY3QpOiBUYWcKICAgIHsKICAgICAgICBbJGFpLCAkZGF0YV0gPSBzZWxmOjpkZXRlcm1pbmVDb21wb25lbnRzKHNlbGY6OlRBR19FTkNPREVEX0JBU0UxNik7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkYWksICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoZSBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIG9uIHYzLjAuIFBsZWFzZSByZWx5IG9uIHRoZSBDQk9SXE5vcm1hbGl6YWJsZSBpbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vcm1hbGl6ZWREYXRhKGJvb2wgJGlnbm9yZVRhZ3MgPSBmYWxzZSkKICAgIHsKICAgICAgICBpZiAoJGlnbm9yZVRhZ3MpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5vYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKTsKICAgICAgICB9CgogICAgICAgIGlmICghICR0aGlzLT5vYmplY3QgaW5zdGFuY2VvZiBCeXRlU3RyaW5nT2JqZWN0ICYmICEgJHRoaXMtPm9iamVjdCBpbnN0YW5jZW9mIEluZGVmaW5pdGVMZW5ndGhCeXRlU3RyaW5nT2JqZWN0ICYmICEgJHRoaXMtPm9iamVjdCBpbnN0YW5jZW9mIFRleHRTdHJpbmdPYmplY3QgJiYgISAkdGhpcy0+b2JqZWN0IGluc3RhbmNlb2YgSW5kZWZpbml0ZUxlbmd0aFRleHRTdHJpbmdPYmplY3QpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5vYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBiaW4yaGV4KCR0aGlzLT5vYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/Base64EncodingTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQnl0ZVN0cmluZ09iamVjdDsKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcSW5kZWZpbml0ZUxlbmd0aEJ5dGVTdHJpbmdPYmplY3Q7CnVzZSBDQk9SXEluZGVmaW5pdGVMZW5ndGhUZXh0U3RyaW5nT2JqZWN0Owp1c2UgQ0JPUlxUYWc7CnVzZSBDQk9SXFRleHRTdHJpbmdPYmplY3Q7CnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CgpmaW5hbCBjbGFzcyBCYXNlNjRFbmNvZGluZ1RhZyBleHRlbmRzIFRhZwp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRhZ0lkKCk6IGludAogICAgewogICAgICAgIHJldHVybiBzZWxmOjpUQUdfRU5DT0RFRF9CQVNFNjQ7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tTG9hZGVkRGF0YShpbnQgJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgP3N0cmluZyAkZGF0YSwgQ0JPUk9iamVjdCAkb2JqZWN0KTogVGFnCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShDQk9ST2JqZWN0ICRvYmplY3QpOiBUYWcKICAgIHsKICAgICAgICBbJGFpLCAkZGF0YV0gPSBzZWxmOjpkZXRlcm1pbmVDb21wb25lbnRzKHNlbGY6OlRBR19FTkNPREVEX0JBU0U2NCk7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkYWksICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoZSBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIG9uIHYzLjAuIFBsZWFzZSByZWx5IG9uIHRoZSBDQk9SXE5vcm1hbGl6YWJsZSBpbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vcm1hbGl6ZWREYXRhKGJvb2wgJGlnbm9yZVRhZ3MgPSBmYWxzZSkKICAgIHsKICAgICAgICBpZiAoJGlnbm9yZVRhZ3MpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5vYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKTsKICAgICAgICB9CgogICAgICAgIGlmICghICR0aGlzLT5vYmplY3QgaW5zdGFuY2VvZiBCeXRlU3RyaW5nT2JqZWN0ICYmICEgJHRoaXMtPm9iamVjdCBpbnN0YW5jZW9mIEluZGVmaW5pdGVMZW5ndGhCeXRlU3RyaW5nT2JqZWN0ICYmICEgJHRoaXMtPm9iamVjdCBpbnN0YW5jZW9mIFRleHRTdHJpbmdPYmplY3QgJiYgISAkdGhpcy0+b2JqZWN0IGluc3RhbmNlb2YgSW5kZWZpbml0ZUxlbmd0aFRleHRTdHJpbmdPYmplY3QpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5vYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKTsKICAgICAgICB9CgogICAgICAgICRyZXN1bHQgPSBiYXNlNjRfZGVjb2RlKCR0aGlzLT5vYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKSwgdHJ1ZSk7CiAgICAgICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VuYWJsZSB0byBkZWNvZGUgdGhlIGRhdGEnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/Base64Tag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcSW5kZWZpbml0ZUxlbmd0aFRleHRTdHJpbmdPYmplY3Q7CnVzZSBDQk9SXFRhZzsKdXNlIENCT1JcVGV4dFN0cmluZ09iamVjdDsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKCmZpbmFsIGNsYXNzIEJhc2U2NFRhZyBleHRlbmRzIFRhZwp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEsIENCT1JPYmplY3QgJG9iamVjdCkKICAgIHsKICAgICAgICBpZiAoISAkb2JqZWN0IGluc3RhbmNlb2YgVGV4dFN0cmluZ09iamVjdCAmJiAhICRvYmplY3QgaW5zdGFuY2VvZiBJbmRlZmluaXRlTGVuZ3RoVGV4dFN0cmluZ09iamVjdCkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGlzIHRhZyBvbmx5IGFjY2VwdHMgYSBUZXh0IFN0cmluZyBvYmplY3QuJyk7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRhZ0lkKCk6IGludAogICAgewogICAgICAgIHJldHVybiBzZWxmOjpUQUdfQkFTRTY0OwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUxvYWRlZERhdGEoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEsIENCT1JPYmplY3QgJG9iamVjdCk6IFRhZwogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkYWRkaXRpb25hbEluZm9ybWF0aW9uLCAkZGF0YSwgJG9iamVjdCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoQ0JPUk9iamVjdCAkb2JqZWN0KTogVGFnCiAgICB7CiAgICAgICAgWyRhaSwgJGRhdGFdID0gc2VsZjo6ZGV0ZXJtaW5lQ29tcG9uZW50cyhzZWxmOjpUQUdfQkFTRTY0KTsKCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRhaSwgJGRhdGEsICRvYmplY3QpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGEoYm9vbCAkaWdub3JlVGFncyA9IGZhbHNlKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+b2JqZWN0LT5nZXROb3JtYWxpemVkRGF0YSgkaWdub3JlVGFncyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/Base64UrlEncodingTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQnl0ZVN0cmluZ09iamVjdDsKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcSW5kZWZpbml0ZUxlbmd0aEJ5dGVTdHJpbmdPYmplY3Q7CnVzZSBDQk9SXEluZGVmaW5pdGVMZW5ndGhUZXh0U3RyaW5nT2JqZWN0Owp1c2UgQ0JPUlxUYWc7CnVzZSBDQk9SXFRleHRTdHJpbmdPYmplY3Q7CnVzZSBDQk9SXFV0aWxzOwoKZmluYWwgY2xhc3MgQmFzZTY0VXJsRW5jb2RpbmdUYWcgZXh0ZW5kcyBUYWcKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRUYWdJZCgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6VEFHX0VOQ09ERURfQkFTRTY0X1VSTDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21Mb2FkZWREYXRhKGludCAkYWRkaXRpb25hbEluZm9ybWF0aW9uLCA/c3RyaW5nICRkYXRhLCBDQk9ST2JqZWN0ICRvYmplY3QpOiBUYWcKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgJGRhdGEsICRvYmplY3QpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKENCT1JPYmplY3QgJG9iamVjdCk6IFRhZwogICAgewogICAgICAgIFskYWksICRkYXRhXSA9IHNlbGY6OmRldGVybWluZUNvbXBvbmVudHMoc2VsZjo6VEFHX0VOQ09ERURfQkFTRTY0X1VSTCk7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkYWksICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoZSBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIG9uIHYzLjAuIFBsZWFzZSByZWx5IG9uIHRoZSBDQk9SXE5vcm1hbGl6YWJsZSBpbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vcm1hbGl6ZWREYXRhKGJvb2wgJGlnbm9yZVRhZ3MgPSBmYWxzZSkKICAgIHsKICAgICAgICBpZiAoJGlnbm9yZVRhZ3MpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5vYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKTsKICAgICAgICB9CgogICAgICAgIGlmICghICR0aGlzLT5vYmplY3QgaW5zdGFuY2VvZiBCeXRlU3RyaW5nT2JqZWN0ICYmICEgJHRoaXMtPm9iamVjdCBpbnN0YW5jZW9mIEluZGVmaW5pdGVMZW5ndGhCeXRlU3RyaW5nT2JqZWN0ICYmICEgJHRoaXMtPm9iamVjdCBpbnN0YW5jZW9mIFRleHRTdHJpbmdPYmplY3QgJiYgISAkdGhpcy0+b2JqZWN0IGluc3RhbmNlb2YgSW5kZWZpbml0ZUxlbmd0aFRleHRTdHJpbmdPYmplY3QpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5vYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBVdGlsczo6ZGVjb2RlKCR0aGlzLT5vYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/Base64UrlTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcSW5kZWZpbml0ZUxlbmd0aFRleHRTdHJpbmdPYmplY3Q7CnVzZSBDQk9SXFRhZzsKdXNlIENCT1JcVGV4dFN0cmluZ09iamVjdDsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKCmZpbmFsIGNsYXNzIEJhc2U2NFVybFRhZyBleHRlbmRzIFRhZwp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEsIENCT1JPYmplY3QgJG9iamVjdCkKICAgIHsKICAgICAgICBpZiAoISAkb2JqZWN0IGluc3RhbmNlb2YgVGV4dFN0cmluZ09iamVjdCAmJiAhICRvYmplY3QgaW5zdGFuY2VvZiBJbmRlZmluaXRlTGVuZ3RoVGV4dFN0cmluZ09iamVjdCkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGlzIHRhZyBvbmx5IGFjY2VwdHMgYSBUZXh0IFN0cmluZyBvYmplY3QuJyk7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRhZ0lkKCk6IGludAogICAgewogICAgICAgIHJldHVybiBzZWxmOjpUQUdfQkFTRTY0X1VSTDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21Mb2FkZWREYXRhKGludCAkYWRkaXRpb25hbEluZm9ybWF0aW9uLCA/c3RyaW5nICRkYXRhLCBDQk9ST2JqZWN0ICRvYmplY3QpOiBUYWcKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgJGRhdGEsICRvYmplY3QpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKENCT1JPYmplY3QgJG9iamVjdCk6IFRhZwogICAgewogICAgICAgIFskYWksICRkYXRhXSA9IHNlbGY6OmRldGVybWluZUNvbXBvbmVudHMoc2VsZjo6VEFHX0JBU0U2NF9VUkwpOwoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGFpLCAkZGF0YSwgJG9iamVjdCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBUaGUgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBvbiB2My4wLiBQbGVhc2UgcmVseSBvbiB0aGUgQ0JPUlxOb3JtYWxpemFibGUgaW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxpemVkRGF0YShib29sICRpZ25vcmVUYWdzID0gZmFsc2UpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5vYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/BigFloatTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcTGlzdE9iamVjdDsKdXNlIENCT1JcTmVnYXRpdmVJbnRlZ2VyT2JqZWN0Owp1c2UgQ0JPUlxOb3JtYWxpemFibGU7CnVzZSBDQk9SXFRhZzsKdXNlIENCT1JcVW5zaWduZWRJbnRlZ2VyT2JqZWN0Owp1c2UgZnVuY3Rpb24gY291bnQ7CnVzZSBmdW5jdGlvbiBleHRlbnNpb25fbG9hZGVkOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgUnVudGltZUV4Y2VwdGlvbjsKCmZpbmFsIGNsYXNzIEJpZ0Zsb2F0VGFnIGV4dGVuZHMgVGFnIGltcGxlbWVudHMgTm9ybWFsaXphYmxlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpbnQgJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgP3N0cmluZyAkZGF0YSwgQ0JPUk9iamVjdCAkb2JqZWN0KQogICAgewogICAgICAgIGlmICghIGV4dGVuc2lvbl9sb2FkZWQoJ2JjbWF0aCcpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdUaGUgZXh0ZW5zaW9uICJiY21hdGgiIGlzIHJlcXVpcmVkIHRvIHVzZSB0aGlzIHRhZycpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCEgJG9iamVjdCBpbnN0YW5jZW9mIExpc3RPYmplY3QgfHwgY291bnQoJG9iamVjdCkgIT09IDIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdUaGlzIHRhZyBvbmx5IGFjY2VwdHMgYSBMaXN0T2JqZWN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFuIGV4cG9uZW50IGFuZCBhIG1hbnRpc3NhLicKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJGUgPSAkb2JqZWN0LT5nZXQoMCk7CiAgICAgICAgaWYgKCEgJGUgaW5zdGFuY2VvZiBVbnNpZ25lZEludGVnZXJPYmplY3QgJiYgISAkZSBpbnN0YW5jZW9mIE5lZ2F0aXZlSW50ZWdlck9iamVjdCkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGUgZXhwb25lbnQgbXVzdCBiZSBhIFNpZ25lZCBJbnRlZ2VyIG9yIGFuIFVuc2lnbmVkIEludGVnZXIgb2JqZWN0LicpOwogICAgICAgIH0KICAgICAgICAkbSA9ICRvYmplY3QtPmdldCgxKTsKICAgICAgICBpZiAoISAkbSBpbnN0YW5jZW9mIFVuc2lnbmVkSW50ZWdlck9iamVjdCAmJiAhICRtIGluc3RhbmNlb2YgTmVnYXRpdmVJbnRlZ2VyT2JqZWN0ICYmICEgJG0gaW5zdGFuY2VvZiBOZWdhdGl2ZUJpZ0ludGVnZXJUYWcgJiYgISAkbSBpbnN0YW5jZW9mIFVuc2lnbmVkQmlnSW50ZWdlclRhZykgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ1RoZSBtYW50aXNzYSBtdXN0IGJlIGEgUG9zaXRpdmUgb3IgTmVnYXRpdmUgU2lnbmVkIEludGVnZXIgb3IgYW4gVW5zaWduZWQgSW50ZWdlciBvYmplY3QuJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkYWRkaXRpb25hbEluZm9ybWF0aW9uLCAkZGF0YSwgJG9iamVjdCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRUYWdJZCgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6VEFHX0JJR19GTE9BVDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21Mb2FkZWREYXRhKGludCAkYWRkaXRpb25hbEluZm9ybWF0aW9uLCA/c3RyaW5nICRkYXRhLCBDQk9ST2JqZWN0ICRvYmplY3QpOiBUYWcKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgJGRhdGEsICRvYmplY3QpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKENCT1JPYmplY3QgJG9iamVjdCk6IFRhZwogICAgewogICAgICAgIFskYWksICRkYXRhXSA9IHNlbGY6OmRldGVybWluZUNvbXBvbmVudHMoc2VsZjo6VEFHX0JJR19GTE9BVCk7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkYWksICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21FeHBvbmVudEFuZE1hbnRpc3NhKENCT1JPYmplY3QgJGUsIENCT1JPYmplY3QgJG0pOiBUYWcKICAgIHsKICAgICAgICAkb2JqZWN0ID0gTGlzdE9iamVjdDo6Y3JlYXRlKCkKICAgICAgICAgICAgLT5hZGQoJGUpCiAgICAgICAgICAgIC0+YWRkKCRtKQogICAgICAgIDsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZSgkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbm9ybWFsaXplKCkKICAgIHsKICAgICAgICAvKiogQHZhciBMaXN0T2JqZWN0ICRvYmplY3QgKi8KICAgICAgICAkb2JqZWN0ID0gJHRoaXMtPm9iamVjdDsKICAgICAgICAvKiogQHZhciBVbnNpZ25lZEludGVnZXJPYmplY3R8TmVnYXRpdmVJbnRlZ2VyT2JqZWN0ICRlICovCiAgICAgICAgJGUgPSAkb2JqZWN0LT5nZXQoMCk7CiAgICAgICAgLyoqIEB2YXIgVW5zaWduZWRJbnRlZ2VyT2JqZWN0fE5lZ2F0aXZlSW50ZWdlck9iamVjdHxOZWdhdGl2ZUJpZ0ludGVnZXJUYWd8VW5zaWduZWRCaWdJbnRlZ2VyVGFnICRtICovCiAgICAgICAgJG0gPSAkb2JqZWN0LT5nZXQoMSk7CgogICAgICAgIHJldHVybiBydHJpbShiY211bCgkbS0+bm9ybWFsaXplKCksIGJjcG93KCcyJywgJGUtPm5vcm1hbGl6ZSgpLCAxMDApLCAxMDApLCAnMCcpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGEoYm9vbCAkaWdub3JlVGFncyA9IGZhbHNlKQogICAgewogICAgICAgIGlmICgkaWdub3JlVGFncykgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPm9iamVjdC0+Z2V0Tm9ybWFsaXplZERhdGEoJGlnbm9yZVRhZ3MpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCEgJHRoaXMtPm9iamVjdCBpbnN0YW5jZW9mIExpc3RPYmplY3QgfHwgY291bnQoJHRoaXMtPm9iamVjdCkgIT09IDIpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5vYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+bm9ybWFsaXplKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/CBOREncodingTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQnl0ZVN0cmluZ09iamVjdDsKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcSW5kZWZpbml0ZUxlbmd0aEJ5dGVTdHJpbmdPYmplY3Q7CnVzZSBDQk9SXFRhZzsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKCmZpbmFsIGNsYXNzIENCT1JFbmNvZGluZ1RhZyBleHRlbmRzIFRhZwp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEsIENCT1JPYmplY3QgJG9iamVjdCkKICAgIHsKICAgICAgICBpZiAoISAkb2JqZWN0IGluc3RhbmNlb2YgQnl0ZVN0cmluZ09iamVjdCAmJiAhICRvYmplY3QgaW5zdGFuY2VvZiBJbmRlZmluaXRlTGVuZ3RoQnl0ZVN0cmluZ09iamVjdCkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGlzIHRhZyBvbmx5IGFjY2VwdHMgYSBCeXRlIFN0cmluZyBvYmplY3QuJyk7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRhZ0lkKCk6IGludAogICAgewogICAgICAgIHJldHVybiBzZWxmOjpUQUdfRU5DT0RFRF9DQk9SOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUxvYWRlZERhdGEoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEsIENCT1JPYmplY3QgJG9iamVjdCk6IFRhZwogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkYWRkaXRpb25hbEluZm9ybWF0aW9uLCAkZGF0YSwgJG9iamVjdCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoQ0JPUk9iamVjdCAkb2JqZWN0KTogVGFnCiAgICB7CiAgICAgICAgWyRhaSwgJGRhdGFdID0gc2VsZjo6ZGV0ZXJtaW5lQ29tcG9uZW50cyhzZWxmOjpUQUdfRU5DT0RFRF9DQk9SKTsKCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRhaSwgJGRhdGEsICRvYmplY3QpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGEoYm9vbCAkaWdub3JlVGFncyA9IGZhbHNlKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+b2JqZWN0LT5nZXROb3JtYWxpemVkRGF0YSgkaWdub3JlVGFncyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/CBORTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcTm9ybWFsaXphYmxlOwp1c2UgQ0JPUlxUYWc7CgpmaW5hbCBjbGFzcyBDQk9SVGFnIGV4dGVuZHMgVGFnIGltcGxlbWVudHMgTm9ybWFsaXphYmxlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VGFnSWQoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OlRBR19DQk9SOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUxvYWRlZERhdGEoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEsIENCT1JPYmplY3QgJG9iamVjdCk6IFRhZwogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkYWRkaXRpb25hbEluZm9ybWF0aW9uLCAkZGF0YSwgJG9iamVjdCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoQ0JPUk9iamVjdCAkb2JqZWN0KTogVGFnCiAgICB7CiAgICAgICAgWyRhaSwgJGRhdGFdID0gc2VsZjo6ZGV0ZXJtaW5lQ29tcG9uZW50cyhzZWxmOjpUQUdfQ0JPUik7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkYWksICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWR8Q0JPUk9iamVjdHxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBub3JtYWxpemUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+b2JqZWN0IGluc3RhbmNlb2YgTm9ybWFsaXphYmxlID8gJHRoaXMtPm9iamVjdC0+bm9ybWFsaXplKCkgOiAkdGhpcy0+b2JqZWN0OwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGEoYm9vbCAkaWdub3JlVGFncyA9IGZhbHNlKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+b2JqZWN0LT5nZXROb3JtYWxpemVkRGF0YSgkaWdub3JlVGFncyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/DatetimeTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcSW5kZWZpbml0ZUxlbmd0aFRleHRTdHJpbmdPYmplY3Q7CnVzZSBDQk9SXE5vcm1hbGl6YWJsZTsKdXNlIENCT1JcVGFnOwp1c2UgQ0JPUlxUZXh0U3RyaW5nT2JqZWN0Owp1c2UgY29uc3QgREFURV9SRkMzMzM5Owp1c2UgRGF0ZVRpbWVJbW11dGFibGU7CnVzZSBEYXRlVGltZUludGVyZmFjZTsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKCi8qKgogKiBAZmluYWwKICovCmNsYXNzIERhdGV0aW1lVGFnIGV4dGVuZHMgVGFnIGltcGxlbWVudHMgTm9ybWFsaXphYmxlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpbnQgJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgP3N0cmluZyAkZGF0YSwgQ0JPUk9iamVjdCAkb2JqZWN0KQogICAgewogICAgICAgIGlmICghICRvYmplY3QgaW5zdGFuY2VvZiBUZXh0U3RyaW5nT2JqZWN0ICYmICEgJG9iamVjdCBpbnN0YW5jZW9mIEluZGVmaW5pdGVMZW5ndGhUZXh0U3RyaW5nT2JqZWN0KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoaXMgdGFnIG9ubHkgYWNjZXB0cyBhIEJ5dGUgU3RyaW5nIG9iamVjdC4nKTsKICAgICAgICB9CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkYWRkaXRpb25hbEluZm9ybWF0aW9uLCAkZGF0YSwgJG9iamVjdCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRUYWdJZCgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6VEFHX1NUQU5EQVJEX0RBVEVUSU1FOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUxvYWRlZERhdGEoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEsIENCT1JPYmplY3QgJG9iamVjdCk6IFRhZwogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkYWRkaXRpb25hbEluZm9ybWF0aW9uLCAkZGF0YSwgJG9iamVjdCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoQ0JPUk9iamVjdCAkb2JqZWN0KTogVGFnCiAgICB7CiAgICAgICAgWyRhaSwgJGRhdGFdID0gc2VsZjo6ZGV0ZXJtaW5lQ29tcG9uZW50cyhzZWxmOjpUQUdfU1RBTkRBUkRfREFURVRJTUUpOwoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGFpLCAkZGF0YSwgJG9iamVjdCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5vcm1hbGl6ZSgpOiBEYXRlVGltZUludGVyZmFjZQogICAgewogICAgICAgIC8qKiBAdmFyIFRleHRTdHJpbmdPYmplY3R8SW5kZWZpbml0ZUxlbmd0aFRleHRTdHJpbmdPYmplY3QgJG9iamVjdCAqLwogICAgICAgICRvYmplY3QgPSAkdGhpcy0+b2JqZWN0OwogICAgICAgICRyZXN1bHQgPSBEYXRlVGltZUltbXV0YWJsZTo6Y3JlYXRlRnJvbUZvcm1hdChEQVRFX1JGQzMzMzksICRvYmplY3QtPm5vcm1hbGl6ZSgpKTsKICAgICAgICBpZiAoJHJlc3VsdCAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICAgICAgfQoKICAgICAgICAkZm9ybWF0dGVkID0gRGF0ZVRpbWVJbW11dGFibGU6OmNyZWF0ZUZyb21Gb3JtYXQoJ1ktbS1kXFRIOmk6cy51UCcsICRvYmplY3QtPm5vcm1hbGl6ZSgpKTsKICAgICAgICBpZiAoJGZvcm1hdHRlZCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBkYXRhLiBDYW5ub3QgYmUgY29udmVydGVkIGludG8gYSBkYXRldGltZSBvYmplY3QnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkZm9ybWF0dGVkOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGEoYm9vbCAkaWdub3JlVGFncyA9IGZhbHNlKQogICAgewogICAgICAgIGlmICgkaWdub3JlVGFncykgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPm9iamVjdC0+Z2V0Tm9ybWFsaXplZERhdGEoJGlnbm9yZVRhZ3MpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5ub3JtYWxpemUoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/DecimalFractionTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcTGlzdE9iamVjdDsKdXNlIENCT1JcTmVnYXRpdmVJbnRlZ2VyT2JqZWN0Owp1c2UgQ0JPUlxOb3JtYWxpemFibGU7CnVzZSBDQk9SXFRhZzsKdXNlIENCT1JcVW5zaWduZWRJbnRlZ2VyT2JqZWN0Owp1c2UgZnVuY3Rpb24gY291bnQ7CnVzZSBmdW5jdGlvbiBleHRlbnNpb25fbG9hZGVkOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgUnVudGltZUV4Y2VwdGlvbjsKCmZpbmFsIGNsYXNzIERlY2ltYWxGcmFjdGlvblRhZyBleHRlbmRzIFRhZyBpbXBsZW1lbnRzIE5vcm1hbGl6YWJsZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoQ0JPUk9iamVjdCAkb2JqZWN0KQogICAgewogICAgICAgIGlmICghIGV4dGVuc2lvbl9sb2FkZWQoJ2JjbWF0aCcpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdUaGUgZXh0ZW5zaW9uICJiY21hdGgiIGlzIHJlcXVpcmVkIHRvIHVzZSB0aGlzIHRhZycpOwogICAgICAgIH0KICAgICAgICBpZiAoISAkb2JqZWN0IGluc3RhbmNlb2YgTGlzdE9iamVjdCB8fCBjb3VudCgkb2JqZWN0KSAhPT0gMikgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ1RoaXMgdGFnIG9ubHkgYWNjZXB0cyBhIExpc3RPYmplY3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYW4gZXhwb25lbnQgYW5kIGEgbWFudGlzc2EuJwogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkZSA9ICRvYmplY3QtPmdldCgwKTsKICAgICAgICBpZiAoISAkZSBpbnN0YW5jZW9mIFVuc2lnbmVkSW50ZWdlck9iamVjdCAmJiAhICRlIGluc3RhbmNlb2YgTmVnYXRpdmVJbnRlZ2VyT2JqZWN0KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSBleHBvbmVudCBtdXN0IGJlIGEgU2lnbmVkIEludGVnZXIgb3IgYW4gVW5zaWduZWQgSW50ZWdlciBvYmplY3QuJyk7CiAgICAgICAgfQogICAgICAgICRtID0gJG9iamVjdC0+Z2V0KDEpOwogICAgICAgIGlmICghICRtIGluc3RhbmNlb2YgVW5zaWduZWRJbnRlZ2VyT2JqZWN0ICYmICEgJG0gaW5zdGFuY2VvZiBOZWdhdGl2ZUludGVnZXJPYmplY3QgJiYgISAkbSBpbnN0YW5jZW9mIE5lZ2F0aXZlQmlnSW50ZWdlclRhZyAmJiAhICRtIGluc3RhbmNlb2YgVW5zaWduZWRCaWdJbnRlZ2VyVGFnKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnVGhlIG1hbnRpc3NhIG11c3QgYmUgYSBQb3NpdGl2ZSBvciBOZWdhdGl2ZSBTaWduZWQgSW50ZWdlciBvciBhbiBVbnNpZ25lZCBJbnRlZ2VyIG9iamVjdC4nCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KHNlbGY6OlRBR19ERUNJTUFMX0ZSQUNUSU9OLCBudWxsLCAkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShDQk9ST2JqZWN0ICRvYmplY3QpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRvYmplY3QpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VGFnSWQoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OlRBR19ERUNJTUFMX0ZSQUNUSU9OOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUxvYWRlZERhdGEoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEsIENCT1JPYmplY3QgJG9iamVjdCk6IFRhZwogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21FeHBvbmVudEFuZE1hbnRpc3NhKENCT1JPYmplY3QgJGUsIENCT1JPYmplY3QgJG0pOiBUYWcKICAgIHsKICAgICAgICAkb2JqZWN0ID0gTGlzdE9iamVjdDo6Y3JlYXRlKCkKICAgICAgICAgICAgLT5hZGQoJGUpCiAgICAgICAgICAgIC0+YWRkKCRtKQogICAgICAgIDsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZSgkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbm9ybWFsaXplKCkKICAgIHsKICAgICAgICAvKiogQHZhciBMaXN0T2JqZWN0ICRvYmplY3QgKi8KICAgICAgICAkb2JqZWN0ID0gJHRoaXMtPm9iamVjdDsKICAgICAgICAvKiogQHZhciBVbnNpZ25lZEludGVnZXJPYmplY3R8TmVnYXRpdmVJbnRlZ2VyT2JqZWN0ICRlICovCiAgICAgICAgJGUgPSAkb2JqZWN0LT5nZXQoMCk7CiAgICAgICAgLyoqIEB2YXIgVW5zaWduZWRJbnRlZ2VyT2JqZWN0fE5lZ2F0aXZlSW50ZWdlck9iamVjdHxOZWdhdGl2ZUJpZ0ludGVnZXJUYWd8VW5zaWduZWRCaWdJbnRlZ2VyVGFnICRtICovCiAgICAgICAgJG0gPSAkb2JqZWN0LT5nZXQoMSk7CgogICAgICAgIHJldHVybiBydHJpbShiY211bCgkbS0+bm9ybWFsaXplKCksIGJjcG93KCcxMCcsICRlLT5ub3JtYWxpemUoKSwgMTAwKSwgMTAwKSwgJzAnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoZSBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIG9uIHYzLjAuIFBsZWFzZSByZWx5IG9uIHRoZSBDQk9SXE5vcm1hbGl6YWJsZSBpbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vcm1hbGl6ZWREYXRhKGJvb2wgJGlnbm9yZVRhZ3MgPSBmYWxzZSkKICAgIHsKICAgICAgICBpZiAoJGlnbm9yZVRhZ3MpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5vYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKTsKICAgICAgICB9CgogICAgICAgIGlmICghICR0aGlzLT5vYmplY3QgaW5zdGFuY2VvZiBMaXN0T2JqZWN0IHx8IGNvdW50KCR0aGlzLT5vYmplY3QpICE9PSAyKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+b2JqZWN0LT5nZXROb3JtYWxpemVkRGF0YSgkaWdub3JlVGFncyk7CiAgICAgICAgfQogICAgICAgICRlID0gJHRoaXMtPm9iamVjdC0+Z2V0KDApOwogICAgICAgICRtID0gJHRoaXMtPm9iamVjdC0+Z2V0KDEpOwoKICAgICAgICBpZiAoISAkZSBpbnN0YW5jZW9mIFVuc2lnbmVkSW50ZWdlck9iamVjdCAmJiAhICRlIGluc3RhbmNlb2YgTmVnYXRpdmVJbnRlZ2VyT2JqZWN0KSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+b2JqZWN0LT5nZXROb3JtYWxpemVkRGF0YSgkaWdub3JlVGFncyk7CiAgICAgICAgfQogICAgICAgIGlmICghICRtIGluc3RhbmNlb2YgVW5zaWduZWRJbnRlZ2VyT2JqZWN0ICYmICEgJG0gaW5zdGFuY2VvZiBOZWdhdGl2ZUludGVnZXJPYmplY3QgJiYgISAkbSBpbnN0YW5jZW9mIE5lZ2F0aXZlQmlnSW50ZWdlclRhZyAmJiAhICRtIGluc3RhbmNlb2YgVW5zaWduZWRCaWdJbnRlZ2VyVGFnKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+b2JqZWN0LT5nZXROb3JtYWxpemVkRGF0YSgkaWdub3JlVGFncyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPm5vcm1hbGl6ZSgpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/EpochTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKLyoqCiAqIEBkZXByZWNhdGVkIFRoZSBjbGFzcyBFcG9jaFRhZyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdjMuMC4gUGxlYXNlIHVzZSBEYXRldGltZVRhZyBpbnN0ZWFkCiAqLwpmaW5hbCBjbGFzcyBFcG9jaFRhZyBleHRlbmRzIERhdGV0aW1lVGFnCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/GenericTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcVGFnOwoKZmluYWwgY2xhc3MgR2VuZXJpY1RhZyBleHRlbmRzIFRhZwp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRhZ0lkKCk6IGludAogICAgewogICAgICAgIHJldHVybiAtMTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21Mb2FkZWREYXRhKGludCAkYWRkaXRpb25hbEluZm9ybWF0aW9uLCA/c3RyaW5nICRkYXRhLCBDQk9ST2JqZWN0ICRvYmplY3QpOiBUYWcKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgJGRhdGEsICRvYmplY3QpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGEoYm9vbCAkaWdub3JlVGFncyA9IGZhbHNlKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+b2JqZWN0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/MimeTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcSW5kZWZpbml0ZUxlbmd0aFRleHRTdHJpbmdPYmplY3Q7CnVzZSBDQk9SXE5vcm1hbGl6YWJsZTsKdXNlIENCT1JcVGFnOwp1c2UgQ0JPUlxUZXh0U3RyaW5nT2JqZWN0Owp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwoKZmluYWwgY2xhc3MgTWltZVRhZyBleHRlbmRzIFRhZyBpbXBsZW1lbnRzIE5vcm1hbGl6YWJsZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEsIENCT1JPYmplY3QgJG9iamVjdCkKICAgIHsKICAgICAgICBpZiAoISAkb2JqZWN0IGluc3RhbmNlb2YgVGV4dFN0cmluZ09iamVjdCAmJiAhICRvYmplY3QgaW5zdGFuY2VvZiBJbmRlZmluaXRlTGVuZ3RoVGV4dFN0cmluZ09iamVjdCkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGlzIHRhZyBvbmx5IGFjY2VwdHMgYSBCeXRlIFN0cmluZyBvYmplY3QuJyk7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRhZ0lkKCk6IGludAogICAgewogICAgICAgIHJldHVybiBzZWxmOjpUQUdfTUlNRTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21Mb2FkZWREYXRhKGludCAkYWRkaXRpb25hbEluZm9ybWF0aW9uLCA/c3RyaW5nICRkYXRhLCBDQk9ST2JqZWN0ICRvYmplY3QpOiBUYWcKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgJGRhdGEsICRvYmplY3QpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKENCT1JPYmplY3QgJG9iamVjdCk6IFRhZwogICAgewogICAgICAgIFskYWksICRkYXRhXSA9IHNlbGY6OmRldGVybWluZUNvbXBvbmVudHMoc2VsZjo6VEFHX01JTUUpOwoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGFpLCAkZGF0YSwgJG9iamVjdCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5vcm1hbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICAvKiogQHZhciBUZXh0U3RyaW5nT2JqZWN0fEluZGVmaW5pdGVMZW5ndGhUZXh0U3RyaW5nT2JqZWN0ICRvYmplY3QgKi8KICAgICAgICAkb2JqZWN0ID0gJHRoaXMtPm9iamVjdDsKCiAgICAgICAgcmV0dXJuICRvYmplY3QtPm5vcm1hbGl6ZSgpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGEoYm9vbCAkaWdub3JlVGFncyA9IGZhbHNlKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+b2JqZWN0LT5nZXROb3JtYWxpemVkRGF0YSgkaWdub3JlVGFncyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/NegativeBigIntegerTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIEJyaWNrXE1hdGhcQmlnSW50ZWdlcjsKdXNlIENCT1JcQnl0ZVN0cmluZ09iamVjdDsKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcSW5kZWZpbml0ZUxlbmd0aEJ5dGVTdHJpbmdPYmplY3Q7CnVzZSBDQk9SXE5vcm1hbGl6YWJsZTsKdXNlIENCT1JcVGFnOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwoKZmluYWwgY2xhc3MgTmVnYXRpdmVCaWdJbnRlZ2VyVGFnIGV4dGVuZHMgVGFnIGltcGxlbWVudHMgTm9ybWFsaXphYmxlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpbnQgJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgP3N0cmluZyAkZGF0YSwgQ0JPUk9iamVjdCAkb2JqZWN0KQogICAgewogICAgICAgIGlmICghICRvYmplY3QgaW5zdGFuY2VvZiBCeXRlU3RyaW5nT2JqZWN0ICYmICEgJG9iamVjdCBpbnN0YW5jZW9mIEluZGVmaW5pdGVMZW5ndGhCeXRlU3RyaW5nT2JqZWN0KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoaXMgdGFnIG9ubHkgYWNjZXB0cyBhIEJ5dGUgU3RyaW5nIG9iamVjdC4nKTsKICAgICAgICB9CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgJGRhdGEsICRvYmplY3QpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VGFnSWQoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OlRBR19ORUdBVElWRV9CSUdfTlVNOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUxvYWRlZERhdGEoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEsIENCT1JPYmplY3QgJG9iamVjdCk6IFRhZwogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkYWRkaXRpb25hbEluZm9ybWF0aW9uLCAkZGF0YSwgJG9iamVjdCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoQ0JPUk9iamVjdCAkb2JqZWN0KTogVGFnCiAgICB7CiAgICAgICAgWyRhaSwgJGRhdGFdID0gc2VsZjo6ZGV0ZXJtaW5lQ29tcG9uZW50cyhzZWxmOjpUQUdfTkVHQVRJVkVfQklHX05VTSk7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkYWksICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbm9ybWFsaXplKCk6IHN0cmluZwogICAgewogICAgICAgIC8qKiBAdmFyIEJ5dGVTdHJpbmdPYmplY3R8SW5kZWZpbml0ZUxlbmd0aEJ5dGVTdHJpbmdPYmplY3QgJG9iamVjdCAqLwogICAgICAgICRvYmplY3QgPSAkdGhpcy0+b2JqZWN0OwogICAgICAgICRpbnRlZ2VyID0gQmlnSW50ZWdlcjo6ZnJvbUJhc2UoYmluMmhleCgkb2JqZWN0LT5nZXRWYWx1ZSgpKSwgMTYpOwogICAgICAgICRtaW51c09uZSA9IEJpZ0ludGVnZXI6Om9mKC0xKTsKCiAgICAgICAgcmV0dXJuICRtaW51c09uZS0+bWludXMoJGludGVnZXIpCiAgICAgICAgICAgIC0+dG9CYXNlKDEwKQogICAgICAgIDsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoZSBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIG9uIHYzLjAuIFBsZWFzZSByZWx5IG9uIHRoZSBDQk9SXE5vcm1hbGl6YWJsZSBpbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vcm1hbGl6ZWREYXRhKGJvb2wgJGlnbm9yZVRhZ3MgPSBmYWxzZSkKICAgIHsKICAgICAgICBpZiAoJGlnbm9yZVRhZ3MpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5vYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKTsKICAgICAgICB9CgogICAgICAgIGlmICghICR0aGlzLT5vYmplY3QgaW5zdGFuY2VvZiBCeXRlU3RyaW5nT2JqZWN0KSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+b2JqZWN0LT5nZXROb3JtYWxpemVkRGF0YSgkaWdub3JlVGFncyk7CiAgICAgICAgfQogICAgICAgICRpbnRlZ2VyID0gQmlnSW50ZWdlcjo6ZnJvbUJhc2UoYmluMmhleCgkdGhpcy0+b2JqZWN0LT5nZXRWYWx1ZSgpKSwgMTYpOwogICAgICAgICRtaW51c09uZSA9IEJpZ0ludGVnZXI6Om9mKC0xKTsKCiAgICAgICAgcmV0dXJuICRtaW51c09uZS0+bWludXMoJGludGVnZXIpCiAgICAgICAgICAgIC0+dG9CYXNlKDEwKQogICAgICAgIDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/PositiveBigIntegerTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKLyoqCiAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCBpbiB2My4wLiBQbGVhc2UgdXNlIFVuc2lnbmVkQmlnSW50ZWdlclRhZyBpbnN0ZWFkCiAqLwpmaW5hbCBjbGFzcyBQb3NpdGl2ZUJpZ0ludGVnZXJUYWcgZXh0ZW5kcyBVbnNpZ25lZEJpZ0ludGVnZXJUYWcKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/TagManager.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIGZ1bmN0aW9uIGFycmF5X2tleV9leGlzdHM7CnVzZSBDQk9SXENCT1JPYmplY3Q7CnVzZSBDQk9SXFRhZzsKdXNlIENCT1JcVXRpbHM7CnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CgovKioKICogQGZpbmFsCiAqLwpjbGFzcyBUYWdNYW5hZ2VyIGltcGxlbWVudHMgVGFnTWFuYWdlckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nW10KICAgICAqLwogICAgcHJpdmF0ZSAkY2xhc3NlcyA9IFtdOwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKCk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKHN0cmluZyAkY2xhc3MpOiBzZWxmCiAgICB7CiAgICAgICAgaWYgKCRjbGFzczo6Z2V0VGFnSWQoKSA8IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCB0YWcgSUQuJyk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5jbGFzc2VzWyRjbGFzczo6Z2V0VGFnSWQoKV0gPSAkY2xhc3M7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xhc3NGb3JWYWx1ZShpbnQgJHZhbHVlKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X2tleV9leGlzdHMoJHZhbHVlLCAkdGhpcy0+Y2xhc3NlcykgPyAkdGhpcy0+Y2xhc3Nlc1skdmFsdWVdIDogR2VuZXJpY1RhZzo6Y2xhc3M7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdEZvclZhbHVlKGludCAkYWRkaXRpb25hbEluZm9ybWF0aW9uLCA/c3RyaW5nICRkYXRhLCBDQk9ST2JqZWN0ICRvYmplY3QpOiBUYWcKICAgIHsKICAgICAgICAkdmFsdWUgPSAkYWRkaXRpb25hbEluZm9ybWF0aW9uOwogICAgICAgIGlmICgkYWRkaXRpb25hbEluZm9ybWF0aW9uID49IDI0KSB7CiAgICAgICAgICAgIFV0aWxzOjphc3NlcnRTdHJpbmcoJGRhdGEsICdJbnZhbGlkIGRhdGEnKTsKICAgICAgICAgICAgJHZhbHVlID0gVXRpbHM6OmJpblRvSW50KCRkYXRhKTsKICAgICAgICB9CiAgICAgICAgLyoqIEB2YXIgVGFnICRjbGFzcyAqLwogICAgICAgICRjbGFzcyA9ICR0aGlzLT5nZXRDbGFzc0ZvclZhbHVlKCR2YWx1ZSk7CgogICAgICAgIHJldHVybiAkY2xhc3M6OmNyZWF0ZUZyb21Mb2FkZWREYXRhKCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/TagManagerInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcVGFnOwoKaW50ZXJmYWNlIFRhZ01hbmFnZXJJbnRlcmZhY2UKewogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdEZvclZhbHVlKGludCAkYWRkaXRpb25hbEluZm9ybWF0aW9uLCA/c3RyaW5nICRkYXRhLCBDQk9ST2JqZWN0ICRvYmplY3QpOiBUYWc7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/TagObjectManager.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKLyoqCiAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCBpbiB2My4wLiBQbGVhc2UgdXNlIFRhZ01hbmFnZXIgaW5zdGVhZAogKi8KY2xhc3MgVGFnT2JqZWN0TWFuYWdlciBleHRlbmRzIFRhZ01hbmFnZXIKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/TimestampTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcTmVnYXRpdmVJbnRlZ2VyT2JqZWN0Owp1c2UgQ0JPUlxOb3JtYWxpemFibGU7CnVzZSBDQk9SXE90aGVyT2JqZWN0XERvdWJsZVByZWNpc2lvbkZsb2F0T2JqZWN0Owp1c2UgQ0JPUlxPdGhlck9iamVjdFxIYWxmUHJlY2lzaW9uRmxvYXRPYmplY3Q7CnVzZSBDQk9SXE90aGVyT2JqZWN0XFNpbmdsZVByZWNpc2lvbkZsb2F0T2JqZWN0Owp1c2UgQ0JPUlxUYWc7CnVzZSBDQk9SXFVuc2lnbmVkSW50ZWdlck9iamVjdDsKdXNlIERhdGVUaW1lSW1tdXRhYmxlOwp1c2UgRGF0ZVRpbWVJbnRlcmZhY2U7CnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBjb25zdCBTVFJfUEFEX1JJR0hUOwoKZmluYWwgY2xhc3MgVGltZXN0YW1wVGFnIGV4dGVuZHMgVGFnIGltcGxlbWVudHMgTm9ybWFsaXphYmxlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpbnQgJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgP3N0cmluZyAkZGF0YSwgQ0JPUk9iamVjdCAkb2JqZWN0KQogICAgewogICAgICAgIGlmICghICRvYmplY3QgaW5zdGFuY2VvZiBVbnNpZ25lZEludGVnZXJPYmplY3QgJiYgISAkb2JqZWN0IGluc3RhbmNlb2YgTmVnYXRpdmVJbnRlZ2VyT2JqZWN0ICYmICEgJG9iamVjdCBpbnN0YW5jZW9mIEhhbGZQcmVjaXNpb25GbG9hdE9iamVjdCAmJiAhICRvYmplY3QgaW5zdGFuY2VvZiBTaW5nbGVQcmVjaXNpb25GbG9hdE9iamVjdCAmJiAhICRvYmplY3QgaW5zdGFuY2VvZiBEb3VibGVQcmVjaXNpb25GbG9hdE9iamVjdCkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGlzIHRhZyBvbmx5IGFjY2VwdHMgaW50ZWdlci1iYXNlZCBvciBmbG9hdC1iYXNlZCBvYmplY3RzLicpOwogICAgICAgIH0KICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRhZ0lkKCk6IGludAogICAgewogICAgICAgIHJldHVybiBzZWxmOjpUQUdfRVBPQ0hfREFURVRJTUU7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tTG9hZGVkRGF0YShpbnQgJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgP3N0cmluZyAkZGF0YSwgQ0JPUk9iamVjdCAkb2JqZWN0KTogVGFnCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShDQk9ST2JqZWN0ICRvYmplY3QpOiBUYWcKICAgIHsKICAgICAgICBbJGFpLCAkZGF0YV0gPSBzZWxmOjpkZXRlcm1pbmVDb21wb25lbnRzKHNlbGY6OlRBR19FUE9DSF9EQVRFVElNRSk7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkYWksICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbm9ybWFsaXplKCk6IERhdGVUaW1lSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJG9iamVjdCA9ICR0aGlzLT5vYmplY3Q7CgogICAgICAgIHN3aXRjaCAodHJ1ZSkgewogICAgICAgICAgICBjYXNlICRvYmplY3QgaW5zdGFuY2VvZiBVbnNpZ25lZEludGVnZXJPYmplY3Q6CiAgICAgICAgICAgIGNhc2UgJG9iamVjdCBpbnN0YW5jZW9mIE5lZ2F0aXZlSW50ZWdlck9iamVjdDoKICAgICAgICAgICAgICAgICRmb3JtYXR0ZWQgPSBEYXRlVGltZUltbXV0YWJsZTo6Y3JlYXRlRnJvbUZvcm1hdCgnVScsICRvYmplY3QtPm5vcm1hbGl6ZSgpKTsKCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICRvYmplY3QgaW5zdGFuY2VvZiBIYWxmUHJlY2lzaW9uRmxvYXRPYmplY3Q6CiAgICAgICAgICAgIGNhc2UgJG9iamVjdCBpbnN0YW5jZW9mIFNpbmdsZVByZWNpc2lvbkZsb2F0T2JqZWN0OgogICAgICAgICAgICBjYXNlICRvYmplY3QgaW5zdGFuY2VvZiBEb3VibGVQcmVjaXNpb25GbG9hdE9iamVjdDoKICAgICAgICAgICAgICAgICR2YWx1ZSA9IChzdHJpbmcpICRvYmplY3QtPm5vcm1hbGl6ZSgpOwogICAgICAgICAgICAgICAgJHBhcnRzID0gZXhwbG9kZSgnLicsICR2YWx1ZSk7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHBhcnRzWzFdKSkgewogICAgICAgICAgICAgICAgICAgIGlmIChtYl9zdHJsZW4oJHBhcnRzWzFdLCAnOGJpdCcpID4gNikgewogICAgICAgICAgICAgICAgICAgICAgICAkcGFydHNbMV0gPSBtYl9zdWJzdHIoJHBhcnRzWzFdLCAwLCA2LCAnOGJpdCcpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRwYXJ0c1sxXSA9IHN0cl9wYWQoJHBhcnRzWzFdLCA2LCAnMCcsIFNUUl9QQURfUklHSFQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRmb3JtYXR0ZWQgPSBEYXRlVGltZUltbXV0YWJsZTo6Y3JlYXRlRnJvbUZvcm1hdCgnVS51JywgaW1wbG9kZSgnLicsICRwYXJ0cykpOwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5hYmxlIHRvIG5vcm1hbGl6ZSB0aGUgb2JqZWN0Jyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGZvcm1hdHRlZCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBkYXRhLiBDYW5ub3QgYmUgY29udmVydGVkIGludG8gYSBkYXRldGltZSBvYmplY3QnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkZm9ybWF0dGVkOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGEoYm9vbCAkaWdub3JlVGFncyA9IGZhbHNlKQogICAgewogICAgICAgIGlmICgkaWdub3JlVGFncykgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPm9iamVjdC0+Z2V0Tm9ybWFsaXplZERhdGEoJGlnbm9yZVRhZ3MpOwogICAgICAgIH0KICAgICAgICBzd2l0Y2ggKHRydWUpIHsKICAgICAgICAgICAgY2FzZSAkdGhpcy0+b2JqZWN0IGluc3RhbmNlb2YgVW5zaWduZWRJbnRlZ2VyT2JqZWN0OgogICAgICAgICAgICBjYXNlICR0aGlzLT5vYmplY3QgaW5zdGFuY2VvZiBOZWdhdGl2ZUludGVnZXJPYmplY3Q6CiAgICAgICAgICAgIGNhc2UgJHRoaXMtPm9iamVjdCBpbnN0YW5jZW9mIEhhbGZQcmVjaXNpb25GbG9hdE9iamVjdDoKICAgICAgICAgICAgY2FzZSAkdGhpcy0+b2JqZWN0IGluc3RhbmNlb2YgU2luZ2xlUHJlY2lzaW9uRmxvYXRPYmplY3Q6CiAgICAgICAgICAgIGNhc2UgJHRoaXMtPm9iamVjdCBpbnN0YW5jZW9mIERvdWJsZVByZWNpc2lvbkZsb2F0T2JqZWN0OgogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5ub3JtYWxpemUoKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+b2JqZWN0LT5nZXROb3JtYWxpemVkRGF0YSgkaWdub3JlVGFncyk7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/UnsignedBigIntegerTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQnl0ZVN0cmluZ09iamVjdDsKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcSW5kZWZpbml0ZUxlbmd0aEJ5dGVTdHJpbmdPYmplY3Q7CnVzZSBDQk9SXE5vcm1hbGl6YWJsZTsKdXNlIENCT1JcVGFnOwp1c2UgQ0JPUlxVdGlsczsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKCi8qKgogKiBAZmluYWwKICovCmNsYXNzIFVuc2lnbmVkQmlnSW50ZWdlclRhZyBleHRlbmRzIFRhZyBpbXBsZW1lbnRzIE5vcm1hbGl6YWJsZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEsIENCT1JPYmplY3QgJG9iamVjdCkKICAgIHsKICAgICAgICBpZiAoISAkb2JqZWN0IGluc3RhbmNlb2YgQnl0ZVN0cmluZ09iamVjdCAmJiAhICRvYmplY3QgaW5zdGFuY2VvZiBJbmRlZmluaXRlTGVuZ3RoQnl0ZVN0cmluZ09iamVjdCkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGlzIHRhZyBvbmx5IGFjY2VwdHMgYSBCeXRlIFN0cmluZyBvYmplY3QuJyk7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRhZ0lkKCk6IGludAogICAgewogICAgICAgIHJldHVybiBzZWxmOjpUQUdfVU5TSUdORURfQklHX05VTTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21Mb2FkZWREYXRhKGludCAkYWRkaXRpb25hbEluZm9ybWF0aW9uLCA/c3RyaW5nICRkYXRhLCBDQk9ST2JqZWN0ICRvYmplY3QpOiBUYWcKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgJGRhdGEsICRvYmplY3QpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKENCT1JPYmplY3QgJG9iamVjdCk6IFRhZwogICAgewogICAgICAgIFskYWksICRkYXRhXSA9IHNlbGY6OmRldGVybWluZUNvbXBvbmVudHMoc2VsZjo6VEFHX1VOU0lHTkVEX0JJR19OVU0pOwoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGFpLCAkZGF0YSwgJG9iamVjdCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5vcm1hbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICAvKiogQHZhciBCeXRlU3RyaW5nT2JqZWN0fEluZGVmaW5pdGVMZW5ndGhCeXRlU3RyaW5nT2JqZWN0ICRvYmplY3QgKi8KICAgICAgICAkb2JqZWN0ID0gJHRoaXMtPm9iamVjdDsKCiAgICAgICAgcmV0dXJuIFV0aWxzOjpoZXhUb1N0cmluZygkb2JqZWN0LT5ub3JtYWxpemUoKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBUaGUgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBvbiB2My4wLiBQbGVhc2UgcmVseSBvbiB0aGUgQ0JPUlxOb3JtYWxpemFibGUgaW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxpemVkRGF0YShib29sICRpZ25vcmVUYWdzID0gZmFsc2UpCiAgICB7CiAgICAgICAgaWYgKCRpZ25vcmVUYWdzKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+b2JqZWN0LT5nZXROb3JtYWxpemVkRGF0YSgkaWdub3JlVGFncyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoISAkdGhpcy0+b2JqZWN0IGluc3RhbmNlb2YgQnl0ZVN0cmluZ09iamVjdCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPm9iamVjdC0+Z2V0Tm9ybWFsaXplZERhdGEoJGlnbm9yZVRhZ3MpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFV0aWxzOjpoZXhUb1N0cmluZygkdGhpcy0+b2JqZWN0LT5nZXRWYWx1ZSgpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/UriTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcSW5kZWZpbml0ZUxlbmd0aFRleHRTdHJpbmdPYmplY3Q7CnVzZSBDQk9SXE5vcm1hbGl6YWJsZTsKdXNlIENCT1JcVGFnOwp1c2UgQ0JPUlxUZXh0U3RyaW5nT2JqZWN0Owp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwoKZmluYWwgY2xhc3MgVXJpVGFnIGV4dGVuZHMgVGFnIGltcGxlbWVudHMgTm9ybWFsaXphYmxlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpbnQgJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgP3N0cmluZyAkZGF0YSwgQ0JPUk9iamVjdCAkb2JqZWN0KQogICAgewogICAgICAgIGlmICghICRvYmplY3QgaW5zdGFuY2VvZiBUZXh0U3RyaW5nT2JqZWN0ICYmICEgJG9iamVjdCBpbnN0YW5jZW9mIEluZGVmaW5pdGVMZW5ndGhUZXh0U3RyaW5nT2JqZWN0KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoaXMgdGFnIG9ubHkgYWNjZXB0cyBhIFRleHQgU3RyaW5nIG9iamVjdC4nKTsKICAgICAgICB9CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgJGRhdGEsICRvYmplY3QpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VGFnSWQoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OlRBR19VUkk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tTG9hZGVkRGF0YShpbnQgJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgP3N0cmluZyAkZGF0YSwgQ0JPUk9iamVjdCAkb2JqZWN0KTogVGFnCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShDQk9ST2JqZWN0ICRvYmplY3QpOiBUYWcKICAgIHsKICAgICAgICBbJGFpLCAkZGF0YV0gPSBzZWxmOjpkZXRlcm1pbmVDb21wb25lbnRzKHNlbGY6OlRBR19VUkkpOwoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGFpLCAkZGF0YSwgJG9iamVjdCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5vcm1hbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICAvKiogQHZhciBUZXh0U3RyaW5nT2JqZWN0fEluZGVmaW5pdGVMZW5ndGhUZXh0U3RyaW5nT2JqZWN0ICRvYmplY3QgKi8KICAgICAgICAkb2JqZWN0ID0gJHRoaXMtPm9iamVjdDsKCiAgICAgICAgcmV0dXJuICRvYmplY3QtPm5vcm1hbGl6ZSgpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGEoYm9vbCAkaWdub3JlVGFncyA9IGZhbHNlKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+b2JqZWN0LT5nZXROb3JtYWxpemVkRGF0YSgkaWdub3JlVGFncyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/TagObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgovKioKICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGluIHYzLjAuIFBsZWFzZSB1c2UgVGFnIGluc3RlYWQKICovCmFic3RyYWN0IGNsYXNzIFRhZ09iamVjdCBleHRlbmRzIFRhZwp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/TextStringObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgpmaW5hbCBjbGFzcyBUZXh0U3RyaW5nT2JqZWN0IGV4dGVuZHMgQWJzdHJhY3RDQk9ST2JqZWN0IGltcGxlbWVudHMgTm9ybWFsaXphYmxlCnsKICAgIHByaXZhdGUgY29uc3QgTUFKT1JfVFlQRSA9IHNlbGY6Ok1BSk9SX1RZUEVfVEVYVF9TVFJJTkc7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGxlbmd0aDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJGRhdGE7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkZGF0YSkKICAgIHsKICAgICAgICBbJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgJGxlbmd0aF0gPSBMZW5ndGhDYWxjdWxhdG9yOjpnZXRMZW5ndGhPZlN0cmluZygkZGF0YSk7CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3Qoc2VsZjo6TUFKT1JfVFlQRSwgJGFkZGl0aW9uYWxJbmZvcm1hdGlvbik7CiAgICAgICAgJHRoaXMtPmRhdGEgPSAkZGF0YTsKICAgICAgICAkdGhpcy0+bGVuZ3RoID0gJGxlbmd0aDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcmVzdWx0ID0gcGFyZW50OjpfX3RvU3RyaW5nKCk7CiAgICAgICAgaWYgKCR0aGlzLT5sZW5ndGggIT09IG51bGwpIHsKICAgICAgICAgICAgJHJlc3VsdCAuPSAkdGhpcy0+bGVuZ3RoOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQgLiAkdGhpcy0+ZGF0YTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShzdHJpbmcgJGRhdGEpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRkYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmFsdWUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMZW5ndGgoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIG1iX3N0cmxlbigkdGhpcy0+ZGF0YSwgJ3V0ZjgnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoZSBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIG9uIHYzLjAuIFBsZWFzZSByZWx5IG9uIHRoZSBDQk9SXE5vcm1hbGl6YWJsZSBpbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vcm1hbGl6ZWREYXRhKGJvb2wgJGlnbm9yZVRhZ3MgPSBmYWxzZSk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbm9ybWFsaXplKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmRhdGE7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/TextStringWithChunkObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgovKioKICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGluIHYzLjAuIFBsZWFzZSB1c2UgSW5kZWZpbml0ZUxlbmd0aFRleHRTdHJpbmdPYmplY3QgaW5zdGVhZAogKi8KZmluYWwgY2xhc3MgVGV4dFN0cmluZ1dpdGhDaHVua09iamVjdCBleHRlbmRzIEluZGVmaW5pdGVMZW5ndGhUZXh0U3RyaW5nT2JqZWN0CnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/UnsignedIntegerObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7Cgp1c2UgQnJpY2tcTWF0aFxCaWdJbnRlZ2VyOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgY29uc3QgU1RSX1BBRF9MRUZUOwoKZmluYWwgY2xhc3MgVW5zaWduZWRJbnRlZ2VyT2JqZWN0IGV4dGVuZHMgQWJzdHJhY3RDQk9ST2JqZWN0IGltcGxlbWVudHMgTm9ybWFsaXphYmxlCnsKICAgIHByaXZhdGUgY29uc3QgTUFKT1JfVFlQRSA9IHNlbGY6Ok1BSk9SX1RZUEVfVU5TSUdORURfSU5URUdFUjsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkZGF0YTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdChzZWxmOjpNQUpPUl9UWVBFLCAkYWRkaXRpb25hbEluZm9ybWF0aW9uKTsKICAgICAgICAkdGhpcy0+ZGF0YSA9ICRkYXRhOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgICRyZXN1bHQgPSBwYXJlbnQ6Ol9fdG9TdHJpbmcoKTsKICAgICAgICBpZiAoJHRoaXMtPmRhdGEgIT09IG51bGwpIHsKICAgICAgICAgICAgJHJlc3VsdCAuPSAkdGhpcy0+ZGF0YTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlT2JqZWN0Rm9yVmFsdWUoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShpbnQgJHZhbHVlKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBzZWxmOjpjcmVhdGVGcm9tU3RyaW5nKChzdHJpbmcpICR2YWx1ZSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tSGV4KHN0cmluZyAkdmFsdWUpOiBzZWxmCiAgICB7CiAgICAgICAgJGludGVnZXIgPSBCaWdJbnRlZ2VyOjpmcm9tQmFzZSgkdmFsdWUsIDE2KTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZUJpZ0ludGVnZXIoJGludGVnZXIpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVN0cmluZyhzdHJpbmcgJHZhbHVlKTogc2VsZgogICAgewogICAgICAgICRpbnRlZ2VyID0gQmlnSW50ZWdlcjo6b2YoJHZhbHVlKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZUJpZ0ludGVnZXIoJGludGVnZXIpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNYWpvclR5cGUoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6Ok1BSk9SX1RZUEU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFZhbHVlKCk6IHN0cmluZwogICAgewogICAgICAgIGlmICgkdGhpcy0+ZGF0YSA9PT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgJHRoaXMtPmFkZGl0aW9uYWxJbmZvcm1hdGlvbjsKICAgICAgICB9CgogICAgICAgICRpbnRlZ2VyID0gQmlnSW50ZWdlcjo6ZnJvbUJhc2UoYmluMmhleCgkdGhpcy0+ZGF0YSksIDE2KTsKCiAgICAgICAgcmV0dXJuICRpbnRlZ2VyLT50b0Jhc2UoMTApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBub3JtYWxpemUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRWYWx1ZSgpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGEoYm9vbCAkaWdub3JlVGFncyA9IGZhbHNlKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRWYWx1ZSgpOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUJpZ0ludGVnZXIoQmlnSW50ZWdlciAkaW50ZWdlcik6IHNlbGYKICAgIHsKICAgICAgICBpZiAoJGludGVnZXItPmlzTGVzc1RoYW4oQmlnSW50ZWdlcjo6emVybygpKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGUgdmFsdWUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIuJyk7CiAgICAgICAgfQoKICAgICAgICBzd2l0Y2ggKHRydWUpIHsKICAgICAgICAgICAgY2FzZSAkaW50ZWdlci0+aXNMZXNzVGhhbihCaWdJbnRlZ2VyOjpvZigyNCkpOgogICAgICAgICAgICAgICAgJGFpID0gJGludGVnZXItPnRvSW50KCk7CiAgICAgICAgICAgICAgICAkZGF0YSA9IG51bGw7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAkaW50ZWdlci0+aXNMZXNzVGhhbihCaWdJbnRlZ2VyOjpmcm9tQmFzZSgnRkYnLCAxNikpOgogICAgICAgICAgICAgICAgJGFpID0gMjQ7CiAgICAgICAgICAgICAgICAkZGF0YSA9IHNlbGY6OmhleDJiaW4oc3RyX3BhZCgkaW50ZWdlci0+dG9CYXNlKDE2KSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICRpbnRlZ2VyLT5pc0xlc3NUaGFuKEJpZ0ludGVnZXI6OmZyb21CYXNlKCdGRkZGJywgMTYpKToKICAgICAgICAgICAgICAgICRhaSA9IDI1OwogICAgICAgICAgICAgICAgJGRhdGEgPSBzZWxmOjpoZXgyYmluKHN0cl9wYWQoJGludGVnZXItPnRvQmFzZSgxNiksIDQsICcwJywgU1RSX1BBRF9MRUZUKSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAkaW50ZWdlci0+aXNMZXNzVGhhbihCaWdJbnRlZ2VyOjpmcm9tQmFzZSgnRkZGRkZGRkYnLCAxNikpOgogICAgICAgICAgICAgICAgJGFpID0gMjY7CiAgICAgICAgICAgICAgICAkZGF0YSA9IHNlbGY6OmhleDJiaW4oc3RyX3BhZCgkaW50ZWdlci0+dG9CYXNlKDE2KSwgOCwgJzAnLCBTVFJfUEFEX0xFRlQpKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAnT3V0IG9mIHJhbmdlLiBQbGVhc2UgdXNlIFBvc2l0aXZlQmlnSW50ZWdlclRhZyB0YWcgd2l0aCBCeXRlU3RyaW5nT2JqZWN0IG9iamVjdCBpbnN0ZWFkLicKICAgICAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGFpLCAkZGF0YSk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gaGV4MmJpbihzdHJpbmcgJGRhdGEpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcmVzdWx0ID0gaGV4MmJpbigkZGF0YSk7CiAgICAgICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VuYWJsZSB0byBjb252ZXJ0IHRoZSBkYXRhJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7Cgp1c2UgQnJpY2tcTWF0aFxCaWdJbnRlZ2VyOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgZnVuY3Rpb24gaXNfc3RyaW5nOwoKLyoqCiAqIEBpbnRlcm5hbAogKi8KYWJzdHJhY3QgY2xhc3MgVXRpbHMKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBiaW5Ub0ludChzdHJpbmcgJHZhbHVlKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmJpblRvQmlnSW50ZWdlcigkdmFsdWUpLT50b0ludCgpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYmluVG9CaWdJbnRlZ2VyKHN0cmluZyAkdmFsdWUpOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmhleFRvQmlnSW50ZWdlcihiaW4yaGV4KCR2YWx1ZSkpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGV4VG9JbnQoc3RyaW5nICR2YWx1ZSk6IGludAogICAgewogICAgICAgIHJldHVybiBzZWxmOjpoZXhUb0JpZ0ludGVnZXIoJHZhbHVlKS0+dG9JbnQoKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhleFRvQmlnSW50ZWdlcihzdHJpbmcgJHZhbHVlKTogQmlnSW50ZWdlcgogICAgewogICAgICAgIHJldHVybiBCaWdJbnRlZ2VyOjpmcm9tQmFzZSgkdmFsdWUsIDE2KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhleFRvU3RyaW5nKHN0cmluZyAkdmFsdWUpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gQmlnSW50ZWdlcjo6ZnJvbUJhc2UoYmluMmhleCgkdmFsdWUpLCAxNiktPnRvQmFzZSgxMCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWNvZGUoc3RyaW5nICRkYXRhKTogc3RyaW5nCiAgICB7CiAgICAgICAgJGRlY29kZWQgPSBiYXNlNjRfZGVjb2RlKHN0cnRyKCRkYXRhLCAnLV8nLCAnKy8nKSwgdHJ1ZSk7CiAgICAgICAgaWYgKCRkZWNvZGVkID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIGRhdGEgcHJvdmlkZWQnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkZGVjb2RlZDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZHxudWxsICRkYXRhCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYXNzZXJ0U3RyaW5nKCRkYXRhLCA/c3RyaW5nICRtZXNzYWdlID0gbnVsbCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoISBpc19zdHJpbmcoJGRhdGEpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJG1lc3NhZ2UgPz8gJycpOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/symfony/deprecation-contracts/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/symfony/deprecation-contracts/CHANGELOG.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q0hBTkdFTE9HCj09PT09PT09PQoKVGhlIGNoYW5nZWxvZyBpcyBtYWludGFpbmVkIGZvciBhbGwgU3ltZm9ueSBjb250cmFjdHMgYXQgdGhlIGZvbGxvd2luZyBVUkw6Cmh0dHBzOi8vZ2l0aHViLmNvbS9zeW1mb255L2NvbnRyYWN0cy9ibG9iL21haW4vQ0hBTkdFTE9HLm1kCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/deprecation-contracts/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAic3ltZm9ueS9kZXByZWNhdGlvbi1jb250cmFjdHMiLAogICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAiZGVzY3JpcHRpb24iOiAiQSBnZW5lcmljIGZ1bmN0aW9uIGFuZCBjb252ZW50aW9uIHRvIHRyaWdnZXIgZGVwcmVjYXRpb24gbm90aWNlcyIsCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbSIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJOaWNvbGFzIEdyZWthcyIsCiAgICAgICAgICAgICJlbWFpbCI6ICJwQHRjaHdvcmsuY29tIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJTeW1mb255IENvbW11bml0eSIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3N5bWZvbnkuY29tL2NvbnRyaWJ1dG9ycyIKICAgICAgICB9CiAgICBdLAogICAgInJlcXVpcmUiOiB7CiAgICAgICAgInBocCI6ICI+PTcuMSIKICAgIH0sCiAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgImZpbGVzIjogWwogICAgICAgICAgICAiZnVuY3Rpb24ucGhwIgogICAgICAgIF0KICAgIH0sCiAgICAibWluaW11bS1zdGFiaWxpdHkiOiAiZGV2IiwKICAgICJleHRyYSI6IHsKICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAiZGV2LW1haW4iOiAiMi41LWRldiIKICAgICAgICB9LAogICAgICAgICJ0aGFua3MiOiB7CiAgICAgICAgICAgICJuYW1lIjogInN5bWZvbnkvY29udHJhY3RzIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9jb250cmFjdHMiCiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/deprecation-contracts/function.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmlmICghZnVuY3Rpb25fZXhpc3RzKCd0cmlnZ2VyX2RlcHJlY2F0aW9uJykpIHsKICAgIC8qKgogICAgICogVHJpZ2dlcnMgYSBzaWxlbmNlZCBkZXByZWNhdGlvbiBub3RpY2UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcGFja2FnZSBUaGUgbmFtZSBvZiB0aGUgQ29tcG9zZXIgcGFja2FnZSB0aGF0IGlzIHRyaWdnZXJpbmcgdGhlIGRlcHJlY2F0aW9uCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2ZXJzaW9uIFRoZSB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlIHRoYXQgaW50cm9kdWNlZCB0aGUgZGVwcmVjYXRpb24KICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UgVGhlIG1lc3NhZ2Ugb2YgdGhlIGRlcHJlY2F0aW9uCiAgICAgKiBAcGFyYW0gbWl4ZWQgIC4uLiRhcmdzIFZhbHVlcyB0byBpbnNlcnQgaW4gdGhlIG1lc3NhZ2UgdXNpbmcgcHJpbnRmKCkgZm9ybWF0dGluZwogICAgICoKICAgICAqIEBhdXRob3IgTmljb2xhcyBHcmVrYXMgPHBAdGNod29yay5jb20+CiAgICAgKi8KICAgIGZ1bmN0aW9uIHRyaWdnZXJfZGVwcmVjYXRpb24oc3RyaW5nICRwYWNrYWdlLCBzdHJpbmcgJHZlcnNpb24sIHN0cmluZyAkbWVzc2FnZSwgLi4uJGFyZ3MpOiB2b2lkCiAgICB7CiAgICAgICAgQHRyaWdnZXJfZXJyb3IoKCRwYWNrYWdlIHx8ICR2ZXJzaW9uID8gIlNpbmNlICRwYWNrYWdlICR2ZXJzaW9uOiAiIDogJycpLigkYXJncyA/IHZzcHJpbnRmKCRtZXNzYWdlLCAkYXJncykgOiAkbWVzc2FnZSksIFxFX1VTRVJfREVQUkVDQVRFRCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/deprecation-contracts/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDIwLXByZXNlbnQgRmFiaWVuIFBvdGVuY2llcgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZAp0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/deprecation-contracts/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[U3ltZm9ueSBEZXByZWNhdGlvbiBDb250cmFjdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkEgZ2VuZXJpYyBmdW5jdGlvbiBhbmQgY29udmVudGlvbiB0byB0cmlnZ2VyIGRlcHJlY2F0aW9uIG5vdGljZXMuCgpUaGlzIHBhY2thZ2UgcHJvdmlkZXMgYSBzaW5nbGUgZ2xvYmFsIGZ1bmN0aW9uIG5hbWVkIGB0cmlnZ2VyX2RlcHJlY2F0aW9uKClgIHRoYXQgdHJpZ2dlcnMgc2lsZW5jZWQgZGVwcmVjYXRpb24gbm90aWNlcy4KCkJ5IHVzaW5nIGEgY3VzdG9tIFBIUCBlcnJvciBoYW5kbGVyIHN1Y2ggYXMgdGhlIG9uZSBwcm92aWRlZCBieSB0aGUgU3ltZm9ueSBFcnJvckhhbmRsZXIgY29tcG9uZW50LAp0aGUgdHJpZ2dlcmVkIGRlcHJlY2F0aW9ucyBjYW4gYmUgY2F1Z2h0IGFuZCBsb2dnZWQgZm9yIGxhdGVyIGRpc2NvdmVyeSwgYm90aCBvbiBkZXYgYW5kIHByb2QgZW52aXJvbm1lbnRzLgoKVGhlIGZ1bmN0aW9uIHJlcXVpcmVzIGF0IGxlYXN0IDMgYXJndW1lbnRzOgogLSB0aGUgbmFtZSBvZiB0aGUgQ29tcG9zZXIgcGFja2FnZSB0aGF0IGlzIHRyaWdnZXJpbmcgdGhlIGRlcHJlY2F0aW9uCiAtIHRoZSB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlIHRoYXQgaW50cm9kdWNlZCB0aGUgZGVwcmVjYXRpb24KIC0gdGhlIG1lc3NhZ2Ugb2YgdGhlIGRlcHJlY2F0aW9uCiAtIG1vcmUgYXJndW1lbnRzIGNhbiBiZSBwcm92aWRlZDogdGhleSB3aWxsIGJlIGluc2VydGVkIGluIHRoZSBtZXNzYWdlIHVzaW5nIGBwcmludGYoKWAgZm9ybWF0dGluZwoKRXhhbXBsZToKYGBgcGhwCnRyaWdnZXJfZGVwcmVjYXRpb24oJ3N5bWZvbnkvYmxvY2tjaGFpbicsICc4LjknLCAnVXNpbmcgIiVzIiBpcyBkZXByZWNhdGVkLCB1c2UgIiVzIiBpbnN0ZWFkLicsICdiaXRjb2luJywgJ2ZhYmNvaW4nKTsKYGBgCgpUaGlzIHdpbGwgZ2VuZXJhdGUgdGhlIGZvbGxvd2luZyBtZXNzYWdlOgpgU2luY2Ugc3ltZm9ueS9ibG9ja2NoYWluIDguOTogVXNpbmcgImJpdGNvaW4iIGlzIGRlcHJlY2F0ZWQsIHVzZSAiZmFiY29pbiIgaW5zdGVhZC5gCgpXaGlsZSBub3QgbmVjZXNzYXJpbHkgcmVjb21tZW5kZWQsIHRoZSBkZXByZWNhdGlvbiBub3RpY2VzIGNhbiBiZSBjb21wbGV0ZWx5IGlnbm9yZWQgYnkgZGVjbGFyaW5nIGFuIGVtcHR5CmBmdW5jdGlvbiB0cmlnZ2VyX2RlcHJlY2F0aW9uKCkge31gIGluIHlvdXIgYXBwbGljYXRpb24uCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-ctype/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-ctype/bootstrap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCnVzZSBTeW1mb255XFBvbHlmaWxsXEN0eXBlIGFzIHA7CgppZiAoXFBIUF9WRVJTSU9OX0lEID49IDgwMDAwKSB7CiAgICByZXR1cm4gcmVxdWlyZSBfX0RJUl9fLicvYm9vdHN0cmFwODAucGhwJzsKfQoKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2N0eXBlX2FsbnVtJykpIHsKICAgIGZ1bmN0aW9uIGN0eXBlX2FsbnVtKCR0ZXh0KSB7IHJldHVybiBwXEN0eXBlOjpjdHlwZV9hbG51bSgkdGV4dCk7IH0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnY3R5cGVfYWxwaGEnKSkgewogICAgZnVuY3Rpb24gY3R5cGVfYWxwaGEoJHRleHQpIHsgcmV0dXJuIHBcQ3R5cGU6OmN0eXBlX2FscGhhKCR0ZXh0KTsgfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCdjdHlwZV9jbnRybCcpKSB7CiAgICBmdW5jdGlvbiBjdHlwZV9jbnRybCgkdGV4dCkgeyByZXR1cm4gcFxDdHlwZTo6Y3R5cGVfY250cmwoJHRleHQpOyB9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2N0eXBlX2RpZ2l0JykpIHsKICAgIGZ1bmN0aW9uIGN0eXBlX2RpZ2l0KCR0ZXh0KSB7IHJldHVybiBwXEN0eXBlOjpjdHlwZV9kaWdpdCgkdGV4dCk7IH0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnY3R5cGVfZ3JhcGgnKSkgewogICAgZnVuY3Rpb24gY3R5cGVfZ3JhcGgoJHRleHQpIHsgcmV0dXJuIHBcQ3R5cGU6OmN0eXBlX2dyYXBoKCR0ZXh0KTsgfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCdjdHlwZV9sb3dlcicpKSB7CiAgICBmdW5jdGlvbiBjdHlwZV9sb3dlcigkdGV4dCkgeyByZXR1cm4gcFxDdHlwZTo6Y3R5cGVfbG93ZXIoJHRleHQpOyB9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2N0eXBlX3ByaW50JykpIHsKICAgIGZ1bmN0aW9uIGN0eXBlX3ByaW50KCR0ZXh0KSB7IHJldHVybiBwXEN0eXBlOjpjdHlwZV9wcmludCgkdGV4dCk7IH0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnY3R5cGVfcHVuY3QnKSkgewogICAgZnVuY3Rpb24gY3R5cGVfcHVuY3QoJHRleHQpIHsgcmV0dXJuIHBcQ3R5cGU6OmN0eXBlX3B1bmN0KCR0ZXh0KTsgfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCdjdHlwZV9zcGFjZScpKSB7CiAgICBmdW5jdGlvbiBjdHlwZV9zcGFjZSgkdGV4dCkgeyByZXR1cm4gcFxDdHlwZTo6Y3R5cGVfc3BhY2UoJHRleHQpOyB9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2N0eXBlX3VwcGVyJykpIHsKICAgIGZ1bmN0aW9uIGN0eXBlX3VwcGVyKCR0ZXh0KSB7IHJldHVybiBwXEN0eXBlOjpjdHlwZV91cHBlcigkdGV4dCk7IH0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnY3R5cGVfeGRpZ2l0JykpIHsKICAgIGZ1bmN0aW9uIGN0eXBlX3hkaWdpdCgkdGV4dCkgeyByZXR1cm4gcFxDdHlwZTo6Y3R5cGVfeGRpZ2l0KCR0ZXh0KTsgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-ctype/bootstrap80.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCnVzZSBTeW1mb255XFBvbHlmaWxsXEN0eXBlIGFzIHA7CgppZiAoIWZ1bmN0aW9uX2V4aXN0cygnY3R5cGVfYWxudW0nKSkgewogICAgZnVuY3Rpb24gY3R5cGVfYWxudW0obWl4ZWQgJHRleHQpOiBib29sIHsgcmV0dXJuIHBcQ3R5cGU6OmN0eXBlX2FsbnVtKCR0ZXh0KTsgfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCdjdHlwZV9hbHBoYScpKSB7CiAgICBmdW5jdGlvbiBjdHlwZV9hbHBoYShtaXhlZCAkdGV4dCk6IGJvb2wgeyByZXR1cm4gcFxDdHlwZTo6Y3R5cGVfYWxwaGEoJHRleHQpOyB9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2N0eXBlX2NudHJsJykpIHsKICAgIGZ1bmN0aW9uIGN0eXBlX2NudHJsKG1peGVkICR0ZXh0KTogYm9vbCB7IHJldHVybiBwXEN0eXBlOjpjdHlwZV9jbnRybCgkdGV4dCk7IH0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnY3R5cGVfZGlnaXQnKSkgewogICAgZnVuY3Rpb24gY3R5cGVfZGlnaXQobWl4ZWQgJHRleHQpOiBib29sIHsgcmV0dXJuIHBcQ3R5cGU6OmN0eXBlX2RpZ2l0KCR0ZXh0KTsgfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCdjdHlwZV9ncmFwaCcpKSB7CiAgICBmdW5jdGlvbiBjdHlwZV9ncmFwaChtaXhlZCAkdGV4dCk6IGJvb2wgeyByZXR1cm4gcFxDdHlwZTo6Y3R5cGVfZ3JhcGgoJHRleHQpOyB9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2N0eXBlX2xvd2VyJykpIHsKICAgIGZ1bmN0aW9uIGN0eXBlX2xvd2VyKG1peGVkICR0ZXh0KTogYm9vbCB7IHJldHVybiBwXEN0eXBlOjpjdHlwZV9sb3dlcigkdGV4dCk7IH0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnY3R5cGVfcHJpbnQnKSkgewogICAgZnVuY3Rpb24gY3R5cGVfcHJpbnQobWl4ZWQgJHRleHQpOiBib29sIHsgcmV0dXJuIHBcQ3R5cGU6OmN0eXBlX3ByaW50KCR0ZXh0KTsgfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCdjdHlwZV9wdW5jdCcpKSB7CiAgICBmdW5jdGlvbiBjdHlwZV9wdW5jdChtaXhlZCAkdGV4dCk6IGJvb2wgeyByZXR1cm4gcFxDdHlwZTo6Y3R5cGVfcHVuY3QoJHRleHQpOyB9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2N0eXBlX3NwYWNlJykpIHsKICAgIGZ1bmN0aW9uIGN0eXBlX3NwYWNlKG1peGVkICR0ZXh0KTogYm9vbCB7IHJldHVybiBwXEN0eXBlOjpjdHlwZV9zcGFjZSgkdGV4dCk7IH0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnY3R5cGVfdXBwZXInKSkgewogICAgZnVuY3Rpb24gY3R5cGVfdXBwZXIobWl4ZWQgJHRleHQpOiBib29sIHsgcmV0dXJuIHBcQ3R5cGU6OmN0eXBlX3VwcGVyKCR0ZXh0KTsgfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCdjdHlwZV94ZGlnaXQnKSkgewogICAgZnVuY3Rpb24gY3R5cGVfeGRpZ2l0KG1peGVkICR0ZXh0KTogYm9vbCB7IHJldHVybiBwXEN0eXBlOjpjdHlwZV94ZGlnaXQoJHRleHQpOyB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-ctype/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAic3ltZm9ueS9wb2x5ZmlsbC1jdHlwZSIsCiAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICJkZXNjcmlwdGlvbiI6ICJTeW1mb255IHBvbHlmaWxsIGZvciBjdHlwZSBmdW5jdGlvbnMiLAogICAgImtleXdvcmRzIjogWyJwb2x5ZmlsbCIsICJjb21wYXRpYmlsaXR5IiwgInBvcnRhYmxlIiwgImN0eXBlIl0sCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbSIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJHZXJ0IGRlIFBhZ3RlciIsCiAgICAgICAgICAgICJlbWFpbCI6ICJCYWNrRW5kVGVhQGdtYWlsLmNvbSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiU3ltZm9ueSBDb21tdW5pdHkiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9jb250cmlidXRvcnMiCiAgICAgICAgfQogICAgXSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiOiAiPj03LjIiCiAgICB9LAogICAgInByb3ZpZGUiOiB7CiAgICAgICAgImV4dC1jdHlwZSI6ICIqIgogICAgfSwKICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAicHNyLTQiOiB7ICJTeW1mb255XFxQb2x5ZmlsbFxcQ3R5cGVcXCI6ICIiIH0sCiAgICAgICAgImZpbGVzIjogWyAiYm9vdHN0cmFwLnBocCIgXQogICAgfSwKICAgICJzdWdnZXN0IjogewogICAgICAgICJleHQtY3R5cGUiOiAiRm9yIGJlc3QgcGVyZm9ybWFuY2UiCiAgICB9LAogICAgIm1pbmltdW0tc3RhYmlsaXR5IjogImRldiIsCiAgICAiZXh0cmEiOiB7CiAgICAgICAgInRoYW5rcyI6IHsKICAgICAgICAgICAgIm5hbWUiOiAic3ltZm9ueS9wb2x5ZmlsbCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvcG9seWZpbGwiCiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-ctype/Ctype.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XFBvbHlmaWxsXEN0eXBlOwoKLyoqCiAqIEN0eXBlIGltcGxlbWVudGF0aW9uIHRocm91Z2ggcmVnZXguCiAqCiAqIEBpbnRlcm5hbAogKgogKiBAYXV0aG9yIEdlcnQgZGUgUGFndGVyIDxCYWNrRW5kVGVhQGdtYWlsLmNvbT4KICovCmZpbmFsIGNsYXNzIEN0eXBlCnsKICAgIC8qKgogICAgICogUmV0dXJucyBUUlVFIGlmIGV2ZXJ5IGNoYXJhY3RlciBpbiB0ZXh0IGlzIGVpdGhlciBhIGxldHRlciBvciBhIGRpZ2l0LCBGQUxTRSBvdGhlcndpc2UuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3BocC5uZXQvY3R5cGUtYWxudW0KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHRleHQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjdHlwZV9hbG51bSgkdGV4dCkKICAgIHsKICAgICAgICAkdGV4dCA9IHNlbGY6OmNvbnZlcnRfaW50X3RvX2NoYXJfZm9yX2N0eXBlKCR0ZXh0LCBfX0ZVTkNUSU9OX18pOwoKICAgICAgICByZXR1cm4gXGlzX3N0cmluZygkdGV4dCkgJiYgJycgIT09ICR0ZXh0ICYmICFwcmVnX21hdGNoKCcvW15BLVphLXowLTldLycsICR0ZXh0KTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgVFJVRSBpZiBldmVyeSBjaGFyYWN0ZXIgaW4gdGV4dCBpcyBhIGxldHRlciwgRkFMU0Ugb3RoZXJ3aXNlLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L2N0eXBlLWFscGhhCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR0ZXh0CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3R5cGVfYWxwaGEoJHRleHQpCiAgICB7CiAgICAgICAgJHRleHQgPSBzZWxmOjpjb252ZXJ0X2ludF90b19jaGFyX2Zvcl9jdHlwZSgkdGV4dCwgX19GVU5DVElPTl9fKTsKCiAgICAgICAgcmV0dXJuIFxpc19zdHJpbmcoJHRleHQpICYmICcnICE9PSAkdGV4dCAmJiAhcHJlZ19tYXRjaCgnL1teQS1aYS16XS8nLCAkdGV4dCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIFRSVUUgaWYgZXZlcnkgY2hhcmFjdGVyIGluIHRleHQgaXMgYSBjb250cm9sIGNoYXJhY3RlciBmcm9tIHRoZSBjdXJyZW50IGxvY2FsZSwgRkFMU0Ugb3RoZXJ3aXNlLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L2N0eXBlLWNudHJsCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR0ZXh0CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3R5cGVfY250cmwoJHRleHQpCiAgICB7CiAgICAgICAgJHRleHQgPSBzZWxmOjpjb252ZXJ0X2ludF90b19jaGFyX2Zvcl9jdHlwZSgkdGV4dCwgX19GVU5DVElPTl9fKTsKCiAgICAgICAgcmV0dXJuIFxpc19zdHJpbmcoJHRleHQpICYmICcnICE9PSAkdGV4dCAmJiAhcHJlZ19tYXRjaCgnL1teXHgwMC1ceDFmXHg3Zl0vJywgJHRleHQpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBUUlVFIGlmIGV2ZXJ5IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nIHRleHQgaXMgYSBkZWNpbWFsIGRpZ2l0LCBGQUxTRSBvdGhlcndpc2UuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3BocC5uZXQvY3R5cGUtZGlnaXQKICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHRleHQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjdHlwZV9kaWdpdCgkdGV4dCkKICAgIHsKICAgICAgICAkdGV4dCA9IHNlbGY6OmNvbnZlcnRfaW50X3RvX2NoYXJfZm9yX2N0eXBlKCR0ZXh0LCBfX0ZVTkNUSU9OX18pOwoKICAgICAgICByZXR1cm4gXGlzX3N0cmluZygkdGV4dCkgJiYgJycgIT09ICR0ZXh0ICYmICFwcmVnX21hdGNoKCcvW14wLTldLycsICR0ZXh0KTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgVFJVRSBpZiBldmVyeSBjaGFyYWN0ZXIgaW4gdGV4dCBpcyBwcmludGFibGUgYW5kIGFjdHVhbGx5IGNyZWF0ZXMgdmlzaWJsZSBvdXRwdXQgKG5vIHdoaXRlIHNwYWNlKSwgRkFMU0Ugb3RoZXJ3aXNlLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L2N0eXBlLWdyYXBoCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR0ZXh0CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3R5cGVfZ3JhcGgoJHRleHQpCiAgICB7CiAgICAgICAgJHRleHQgPSBzZWxmOjpjb252ZXJ0X2ludF90b19jaGFyX2Zvcl9jdHlwZSgkdGV4dCwgX19GVU5DVElPTl9fKTsKCiAgICAgICAgcmV0dXJuIFxpc19zdHJpbmcoJHRleHQpICYmICcnICE9PSAkdGV4dCAmJiAhcHJlZ19tYXRjaCgnL1teIS1+XS8nLCAkdGV4dCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIFRSVUUgaWYgZXZlcnkgY2hhcmFjdGVyIGluIHRleHQgaXMgYSBsb3dlcmNhc2UgbGV0dGVyLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L2N0eXBlLWxvd2VyCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR0ZXh0CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3R5cGVfbG93ZXIoJHRleHQpCiAgICB7CiAgICAgICAgJHRleHQgPSBzZWxmOjpjb252ZXJ0X2ludF90b19jaGFyX2Zvcl9jdHlwZSgkdGV4dCwgX19GVU5DVElPTl9fKTsKCiAgICAgICAgcmV0dXJuIFxpc19zdHJpbmcoJHRleHQpICYmICcnICE9PSAkdGV4dCAmJiAhcHJlZ19tYXRjaCgnL1teYS16XS8nLCAkdGV4dCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIFRSVUUgaWYgZXZlcnkgY2hhcmFjdGVyIGluIHRleHQgd2lsbCBhY3R1YWxseSBjcmVhdGUgb3V0cHV0IChpbmNsdWRpbmcgYmxhbmtzKS4gUmV0dXJucyBGQUxTRSBpZiB0ZXh0IGNvbnRhaW5zIGNvbnRyb2wgY2hhcmFjdGVycyBvciBjaGFyYWN0ZXJzIHRoYXQgZG8gbm90IGhhdmUgYW55IG91dHB1dCBvciBjb250cm9sIGZ1bmN0aW9uIGF0IGFsbC4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9jdHlwZS1wcmludAogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdGV4dAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGN0eXBlX3ByaW50KCR0ZXh0KQogICAgewogICAgICAgICR0ZXh0ID0gc2VsZjo6Y29udmVydF9pbnRfdG9fY2hhcl9mb3JfY3R5cGUoJHRleHQsIF9fRlVOQ1RJT05fXyk7CgogICAgICAgIHJldHVybiBcaXNfc3RyaW5nKCR0ZXh0KSAmJiAnJyAhPT0gJHRleHQgJiYgIXByZWdfbWF0Y2goJy9bXiAtfl0vJywgJHRleHQpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBUUlVFIGlmIGV2ZXJ5IGNoYXJhY3RlciBpbiB0ZXh0IGlzIHByaW50YWJsZSwgYnV0IG5laXRoZXIgbGV0dGVyLCBkaWdpdCBvciBibGFuaywgRkFMU0Ugb3RoZXJ3aXNlLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L2N0eXBlLXB1bmN0CiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR0ZXh0CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3R5cGVfcHVuY3QoJHRleHQpCiAgICB7CiAgICAgICAgJHRleHQgPSBzZWxmOjpjb252ZXJ0X2ludF90b19jaGFyX2Zvcl9jdHlwZSgkdGV4dCwgX19GVU5DVElPTl9fKTsKCiAgICAgICAgcmV0dXJuIFxpc19zdHJpbmcoJHRleHQpICYmICcnICE9PSAkdGV4dCAmJiAhcHJlZ19tYXRjaCgnL1teIS1cL1w6LUBcWy1gXHstfl0vJywgJHRleHQpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBUUlVFIGlmIGV2ZXJ5IGNoYXJhY3RlciBpbiB0ZXh0IGNyZWF0ZXMgc29tZSBzb3J0IG9mIHdoaXRlIHNwYWNlLCBGQUxTRSBvdGhlcndpc2UuIEJlc2lkZXMgdGhlIGJsYW5rIGNoYXJhY3RlciB0aGlzIGFsc28gaW5jbHVkZXMgdGFiLCB2ZXJ0aWNhbCB0YWIsIGxpbmUgZmVlZCwgY2FycmlhZ2UgcmV0dXJuIGFuZCBmb3JtIGZlZWQgY2hhcmFjdGVycy4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9jdHlwZS1zcGFjZQogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdGV4dAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGN0eXBlX3NwYWNlKCR0ZXh0KQogICAgewogICAgICAgICR0ZXh0ID0gc2VsZjo6Y29udmVydF9pbnRfdG9fY2hhcl9mb3JfY3R5cGUoJHRleHQsIF9fRlVOQ1RJT05fXyk7CgogICAgICAgIHJldHVybiBcaXNfc3RyaW5nKCR0ZXh0KSAmJiAnJyAhPT0gJHRleHQgJiYgIXByZWdfbWF0Y2goJy9bXlxzXS8nLCAkdGV4dCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIFRSVUUgaWYgZXZlcnkgY2hhcmFjdGVyIGluIHRleHQgaXMgYW4gdXBwZXJjYXNlIGxldHRlci4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9jdHlwZS11cHBlcgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdGV4dAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGN0eXBlX3VwcGVyKCR0ZXh0KQogICAgewogICAgICAgICR0ZXh0ID0gc2VsZjo6Y29udmVydF9pbnRfdG9fY2hhcl9mb3JfY3R5cGUoJHRleHQsIF9fRlVOQ1RJT05fXyk7CgogICAgICAgIHJldHVybiBcaXNfc3RyaW5nKCR0ZXh0KSAmJiAnJyAhPT0gJHRleHQgJiYgIXByZWdfbWF0Y2goJy9bXkEtWl0vJywgJHRleHQpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBUUlVFIGlmIGV2ZXJ5IGNoYXJhY3RlciBpbiB0ZXh0IGlzIGEgaGV4YWRlY2ltYWwgJ2RpZ2l0JywgdGhhdCBpcyBhIGRlY2ltYWwgZGlnaXQgb3IgYSBjaGFyYWN0ZXIgZnJvbSBbQS1GYS1mXSAsIEZBTFNFIG90aGVyd2lzZS4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9jdHlwZS14ZGlnaXQKICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHRleHQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjdHlwZV94ZGlnaXQoJHRleHQpCiAgICB7CiAgICAgICAgJHRleHQgPSBzZWxmOjpjb252ZXJ0X2ludF90b19jaGFyX2Zvcl9jdHlwZSgkdGV4dCwgX19GVU5DVElPTl9fKTsKCiAgICAgICAgcmV0dXJuIFxpc19zdHJpbmcoJHRleHQpICYmICcnICE9PSAkdGV4dCAmJiAhcHJlZ19tYXRjaCgnL1teQS1GYS1mMC05XS8nLCAkdGV4dCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyBpbnRlZ2VycyB0byB0aGVpciBjaGFyIHZlcnNpb25zIGFjY29yZGluZyB0byBub3JtYWwgY3R5cGUgYmVoYXZpb3VyLCBpZiBuZWVkZWQuCiAgICAgKgogICAgICogSWYgYW4gaW50ZWdlciBiZXR3ZWVuIC0xMjggYW5kIDI1NSBpbmNsdXNpdmUgaXMgcHJvdmlkZWQsCiAgICAgKiBpdCBpcyBpbnRlcnByZXRlZCBhcyB0aGUgQVNDSUkgdmFsdWUgb2YgYSBzaW5nbGUgY2hhcmFjdGVyCiAgICAgKiAobmVnYXRpdmUgdmFsdWVzIGhhdmUgMjU2IGFkZGVkIGluIG9yZGVyIHRvIGFsbG93IGNoYXJhY3RlcnMgaW4gdGhlIEV4dGVuZGVkIEFTQ0lJIHJhbmdlKS4KICAgICAqIEFueSBvdGhlciBpbnRlZ2VyIGlzIGludGVycHJldGVkIGFzIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGRlY2ltYWwgZGlnaXRzIG9mIHRoZSBpbnRlZ2VyLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAgJGludAogICAgICogQHBhcmFtIHN0cmluZyAkZnVuY3Rpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGNvbnZlcnRfaW50X3RvX2NoYXJfZm9yX2N0eXBlKCRpbnQsICRmdW5jdGlvbikKICAgIHsKICAgICAgICBpZiAoXFBIUF9WRVJTSU9OX0lEID49IDgwMTAwICYmICFcaXNfc3RyaW5nKCRpbnQpKSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCRmdW5jdGlvbi4nKCk6IEFyZ3VtZW50IG9mIHR5cGUgJy5nZXRfZGVidWdfdHlwZSgkaW50KS4nIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgc3RyaW5nIGluIHRoZSBmdXR1cmUnLCBcRV9VU0VSX0RFUFJFQ0FURUQpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFcaXNfaW50KCRpbnQpKSB7CiAgICAgICAgICAgIHJldHVybiAkaW50OwogICAgICAgIH0KCiAgICAgICAgaWYgKCRpbnQgPCAtMTI4IHx8ICRpbnQgPiAyNTUpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpICRpbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGludCA8IDApIHsKICAgICAgICAgICAgJGludCArPSAyNTY7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gXGNocigkaW50KTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-ctype/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDE4LXByZXNlbnQgRmFiaWVuIFBvdGVuY2llcgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZAp0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-ctype/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[U3ltZm9ueSBQb2x5ZmlsbCAvIEN0eXBlCj09PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyBjb21wb25lbnQgcHJvdmlkZXMgYGN0eXBlXypgIGZ1bmN0aW9ucyB0byB1c2VycyB3aG8gcnVuIHBocCB2ZXJzaW9ucyB3aXRob3V0IHRoZSBjdHlwZSBleHRlbnNpb24uCgpNb3JlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUKW21haW4gUG9seWZpbGwgUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9wb2x5ZmlsbC9ibG9iL21haW4vUkVBRE1FLm1kKS4KCkxpY2Vuc2UKPT09PT09PQoKVGhpcyBsaWJyYXJ5IGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBbTUlUIGxpY2Vuc2VdKExJQ0VOU0UpLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php80/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php80/bootstrap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCnVzZSBTeW1mb255XFBvbHlmaWxsXFBocDgwIGFzIHA7CgppZiAoXFBIUF9WRVJTSU9OX0lEID49IDgwMDAwKSB7CiAgICByZXR1cm47Cn0KCmlmICghZGVmaW5lZCgnRklMVEVSX1ZBTElEQVRFX0JPT0wnKSAmJiBkZWZpbmVkKCdGSUxURVJfVkFMSURBVEVfQk9PTEVBTicpKSB7CiAgICBkZWZpbmUoJ0ZJTFRFUl9WQUxJREFURV9CT09MJywgXEZJTFRFUl9WQUxJREFURV9CT09MRUFOKTsKfQoKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2ZkaXYnKSkgewogICAgZnVuY3Rpb24gZmRpdihmbG9hdCAkbnVtMSwgZmxvYXQgJG51bTIpOiBmbG9hdCB7IHJldHVybiBwXFBocDgwOjpmZGl2KCRudW0xLCAkbnVtMik7IH0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygncHJlZ19sYXN0X2Vycm9yX21zZycpKSB7CiAgICBmdW5jdGlvbiBwcmVnX2xhc3RfZXJyb3JfbXNnKCk6IHN0cmluZyB7IHJldHVybiBwXFBocDgwOjpwcmVnX2xhc3RfZXJyb3JfbXNnKCk7IH0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnc3RyX2NvbnRhaW5zJykpIHsKICAgIGZ1bmN0aW9uIHN0cl9jb250YWlucyg/c3RyaW5nICRoYXlzdGFjaywgP3N0cmluZyAkbmVlZGxlKTogYm9vbCB7IHJldHVybiBwXFBocDgwOjpzdHJfY29udGFpbnMoJGhheXN0YWNrID8/ICcnLCAkbmVlZGxlID8/ICcnKTsgfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCdzdHJfc3RhcnRzX3dpdGgnKSkgewogICAgZnVuY3Rpb24gc3RyX3N0YXJ0c193aXRoKD9zdHJpbmcgJGhheXN0YWNrLCA/c3RyaW5nICRuZWVkbGUpOiBib29sIHsgcmV0dXJuIHBcUGhwODA6OnN0cl9zdGFydHNfd2l0aCgkaGF5c3RhY2sgPz8gJycsICRuZWVkbGUgPz8gJycpOyB9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ3N0cl9lbmRzX3dpdGgnKSkgewogICAgZnVuY3Rpb24gc3RyX2VuZHNfd2l0aCg/c3RyaW5nICRoYXlzdGFjaywgP3N0cmluZyAkbmVlZGxlKTogYm9vbCB7IHJldHVybiBwXFBocDgwOjpzdHJfZW5kc193aXRoKCRoYXlzdGFjayA/PyAnJywgJG5lZWRsZSA/PyAnJyk7IH0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnZ2V0X2RlYnVnX3R5cGUnKSkgewogICAgZnVuY3Rpb24gZ2V0X2RlYnVnX3R5cGUoJHZhbHVlKTogc3RyaW5nIHsgcmV0dXJuIHBcUGhwODA6OmdldF9kZWJ1Z190eXBlKCR2YWx1ZSk7IH0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnZ2V0X3Jlc291cmNlX2lkJykpIHsKICAgIGZ1bmN0aW9uIGdldF9yZXNvdXJjZV9pZCgkcmVzb3VyY2UpOiBpbnQgeyByZXR1cm4gcFxQaHA4MDo6Z2V0X3Jlc291cmNlX2lkKCRyZXNvdXJjZSk7IH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php80/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAic3ltZm9ueS9wb2x5ZmlsbC1waHA4MCIsCiAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICJkZXNjcmlwdGlvbiI6ICJTeW1mb255IHBvbHlmaWxsIGJhY2twb3J0aW5nIHNvbWUgUEhQIDguMCsgZmVhdHVyZXMgdG8gbG93ZXIgUEhQIHZlcnNpb25zIiwKICAgICJrZXl3b3JkcyI6IFsicG9seWZpbGwiLCAic2hpbSIsICJjb21wYXRpYmlsaXR5IiwgInBvcnRhYmxlIl0sCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbSIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJJb24gQmF6YW4iLAogICAgICAgICAgICAiZW1haWwiOiAiaW9uLmJhemFuQGdtYWlsLmNvbSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiTmljb2xhcyBHcmVrYXMiLAogICAgICAgICAgICAiZW1haWwiOiAicEB0Y2h3b3JrLmNvbSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiU3ltZm9ueSBDb21tdW5pdHkiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9jb250cmlidXRvcnMiCiAgICAgICAgfQogICAgXSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiOiAiPj03LjIiCiAgICB9LAogICAgImF1dG9sb2FkIjogewogICAgICAgICJwc3ItNCI6IHsgIlN5bWZvbnlcXFBvbHlmaWxsXFxQaHA4MFxcIjogIiIgfSwKICAgICAgICAiZmlsZXMiOiBbICJib290c3RyYXAucGhwIiBdLAogICAgICAgICJjbGFzc21hcCI6IFsgIlJlc291cmNlcy9zdHVicyIgXQogICAgfSwKICAgICJtaW5pbXVtLXN0YWJpbGl0eSI6ICJkZXYiLAogICAgImV4dHJhIjogewogICAgICAgICJ0aGFua3MiOiB7CiAgICAgICAgICAgICJuYW1lIjogInN5bWZvbnkvcG9seWZpbGwiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zeW1mb255L3BvbHlmaWxsIgogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php80/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDIwLXByZXNlbnQgRmFiaWVuIFBvdGVuY2llcgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZAp0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php80/Php80.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XFBvbHlmaWxsXFBocDgwOwoKLyoqCiAqIEBhdXRob3IgSW9uIEJhemFuIDxpb24uYmF6YW5AZ21haWwuY29tPgogKiBAYXV0aG9yIE5pY28gT2VsZ2FydCA8bmljb3N3ZEBnbWFpbC5jb20+CiAqIEBhdXRob3IgTmljb2xhcyBHcmVrYXMgPHBAdGNod29yay5jb20+CiAqCiAqIEBpbnRlcm5hbAogKi8KZmluYWwgY2xhc3MgUGhwODAKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmZGl2KGZsb2F0ICRkaXZpZGVuZCwgZmxvYXQgJGRpdmlzb3IpOiBmbG9hdAogICAgewogICAgICAgIHJldHVybiBAKCRkaXZpZGVuZCAvICRkaXZpc29yKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9kZWJ1Z190eXBlKCR2YWx1ZSk6IHN0cmluZwogICAgewogICAgICAgIHN3aXRjaCAodHJ1ZSkgewogICAgICAgICAgICBjYXNlIG51bGwgPT09ICR2YWx1ZTogcmV0dXJuICdudWxsJzsKICAgICAgICAgICAgY2FzZSBcaXNfYm9vbCgkdmFsdWUpOiByZXR1cm4gJ2Jvb2wnOwogICAgICAgICAgICBjYXNlIFxpc19zdHJpbmcoJHZhbHVlKTogcmV0dXJuICdzdHJpbmcnOwogICAgICAgICAgICBjYXNlIFxpc19hcnJheSgkdmFsdWUpOiByZXR1cm4gJ2FycmF5JzsKICAgICAgICAgICAgY2FzZSBcaXNfaW50KCR2YWx1ZSk6IHJldHVybiAnaW50JzsKICAgICAgICAgICAgY2FzZSBcaXNfZmxvYXQoJHZhbHVlKTogcmV0dXJuICdmbG9hdCc7CiAgICAgICAgICAgIGNhc2UgXGlzX29iamVjdCgkdmFsdWUpOiBicmVhazsKICAgICAgICAgICAgY2FzZSAkdmFsdWUgaW5zdGFuY2VvZiBcX19QSFBfSW5jb21wbGV0ZV9DbGFzczogcmV0dXJuICdfX1BIUF9JbmNvbXBsZXRlX0NsYXNzJzsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIGlmIChudWxsID09PSAkdHlwZSA9IEBnZXRfcmVzb3VyY2VfdHlwZSgkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd1bmtub3duJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJ1Vua25vd24nID09PSAkdHlwZSkgewogICAgICAgICAgICAgICAgICAgICR0eXBlID0gJ2Nsb3NlZCc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuICJyZXNvdXJjZSAoJHR5cGUpIjsKICAgICAgICB9CgogICAgICAgICRjbGFzcyA9IFxnZXRfY2xhc3MoJHZhbHVlKTsKCiAgICAgICAgaWYgKGZhbHNlID09PSBzdHJwb3MoJGNsYXNzLCAnQCcpKSB7CiAgICAgICAgICAgIHJldHVybiAkY2xhc3M7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gKGdldF9wYXJlbnRfY2xhc3MoJGNsYXNzKSA/OiBrZXkoY2xhc3NfaW1wbGVtZW50cygkY2xhc3MpKSA/OiAnY2xhc3MnKS4nQGFub255bW91cyc7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfcmVzb3VyY2VfaWQoJHJlcyk6IGludAogICAgewogICAgICAgIGlmICghXGlzX3Jlc291cmNlKCRyZXMpICYmIG51bGwgPT09IEBnZXRfcmVzb3VyY2VfdHlwZSgkcmVzKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFR5cGVFcnJvcihcc3ByaW50ZignQXJndW1lbnQgMSBwYXNzZWQgdG8gZ2V0X3Jlc291cmNlX2lkKCkgbXVzdCBiZSBvZiB0aGUgdHlwZSByZXNvdXJjZSwgJXMgZ2l2ZW4nLCBnZXRfZGVidWdfdHlwZSgkcmVzKSkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIChpbnQpICRyZXM7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwcmVnX2xhc3RfZXJyb3JfbXNnKCk6IHN0cmluZwogICAgewogICAgICAgIHN3aXRjaCAocHJlZ19sYXN0X2Vycm9yKCkpIHsKICAgICAgICAgICAgY2FzZSBcUFJFR19JTlRFUk5BTF9FUlJPUjoKICAgICAgICAgICAgICAgIHJldHVybiAnSW50ZXJuYWwgZXJyb3InOwogICAgICAgICAgICBjYXNlIFxQUkVHX0JBRF9VVEY4X0VSUk9SOgogICAgICAgICAgICAgICAgcmV0dXJuICdNYWxmb3JtZWQgVVRGLTggY2hhcmFjdGVycywgcG9zc2libHkgaW5jb3JyZWN0bHkgZW5jb2RlZCc7CiAgICAgICAgICAgIGNhc2UgXFBSRUdfQkFEX1VURjhfT0ZGU0VUX0VSUk9SOgogICAgICAgICAgICAgICAgcmV0dXJuICdUaGUgb2Zmc2V0IGRpZCBub3QgY29ycmVzcG9uZCB0byB0aGUgYmVnaW5uaW5nIG9mIGEgdmFsaWQgVVRGLTggY29kZSBwb2ludCc7CiAgICAgICAgICAgIGNhc2UgXFBSRUdfQkFDS1RSQUNLX0xJTUlUX0VSUk9SOgogICAgICAgICAgICAgICAgcmV0dXJuICdCYWNrdHJhY2sgbGltaXQgZXhoYXVzdGVkJzsKICAgICAgICAgICAgY2FzZSBcUFJFR19SRUNVUlNJT05fTElNSVRfRVJST1I6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1JlY3Vyc2lvbiBsaW1pdCBleGhhdXN0ZWQnOwogICAgICAgICAgICBjYXNlIFxQUkVHX0pJVF9TVEFDS0xJTUlUX0VSUk9SOgogICAgICAgICAgICAgICAgcmV0dXJuICdKSVQgc3RhY2sgbGltaXQgZXhoYXVzdGVkJzsKICAgICAgICAgICAgY2FzZSBcUFJFR19OT19FUlJPUjoKICAgICAgICAgICAgICAgIHJldHVybiAnTm8gZXJyb3InOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgcmV0dXJuICdVbmtub3duIGVycm9yJzsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdHJfY29udGFpbnMoc3RyaW5nICRoYXlzdGFjaywgc3RyaW5nICRuZWVkbGUpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICcnID09PSAkbmVlZGxlIHx8IGZhbHNlICE9PSBzdHJwb3MoJGhheXN0YWNrLCAkbmVlZGxlKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN0cl9zdGFydHNfd2l0aChzdHJpbmcgJGhheXN0YWNrLCBzdHJpbmcgJG5lZWRsZSk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gMCA9PT0gc3RybmNtcCgkaGF5c3RhY2ssICRuZWVkbGUsIFxzdHJsZW4oJG5lZWRsZSkpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RyX2VuZHNfd2l0aChzdHJpbmcgJGhheXN0YWNrLCBzdHJpbmcgJG5lZWRsZSk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoJycgPT09ICRuZWVkbGUgfHwgJG5lZWRsZSA9PT0gJGhheXN0YWNrKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKCcnID09PSAkaGF5c3RhY2spIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJG5lZWRsZUxlbmd0aCA9IFxzdHJsZW4oJG5lZWRsZSk7CgogICAgICAgIHJldHVybiAkbmVlZGxlTGVuZ3RoIDw9IFxzdHJsZW4oJGhheXN0YWNrKSAmJiAwID09PSBzdWJzdHJfY29tcGFyZSgkaGF5c3RhY2ssICRuZWVkbGUsIC0kbmVlZGxlTGVuZ3RoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php80/PhpToken.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XFBvbHlmaWxsXFBocDgwOwoKLyoqCiAqIEBhdXRob3IgRmVkb255dWsgQW50b24gPGluZm9AZW5zb3N0dWRpby5ydT4KICoKICogQGludGVybmFsCiAqLwpjbGFzcyBQaHBUb2tlbiBpbXBsZW1lbnRzIFxTdHJpbmdhYmxlCnsKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRpZDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkdGV4dDsKCiAgICAvKioKICAgICAqIEB2YXIgLTF8cG9zaXRpdmUtaW50CiAgICAgKi8KICAgIHB1YmxpYyAkbGluZTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkcG9zOwoKICAgIC8qKgogICAgICogQHBhcmFtIC0xfHBvc2l0aXZlLWludCAkbGluZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoaW50ICRpZCwgc3RyaW5nICR0ZXh0LCBpbnQgJGxpbmUgPSAtMSwgaW50ICRwb3NpdGlvbiA9IC0xKQogICAgewogICAgICAgICR0aGlzLT5pZCA9ICRpZDsKICAgICAgICAkdGhpcy0+dGV4dCA9ICR0ZXh0OwogICAgICAgICR0aGlzLT5saW5lID0gJGxpbmU7CiAgICAgICAgJHRoaXMtPnBvcyA9ICRwb3NpdGlvbjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VG9rZW5OYW1lKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICBpZiAoJ1VOS05PV04nID09PSAkbmFtZSA9IHRva2VuX25hbWUoJHRoaXMtPmlkKSkgewogICAgICAgICAgICAkbmFtZSA9IFxzdHJsZW4oJHRoaXMtPnRleHQpID4gMSB8fCBcb3JkKCR0aGlzLT50ZXh0KSA8IDMyID8gbnVsbCA6ICR0aGlzLT50ZXh0OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRuYW1lOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGludHxzdHJpbmd8YXJyYXkgJGtpbmQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzKCRraW5kKTogYm9vbAogICAgewogICAgICAgIGZvcmVhY2ggKChhcnJheSkgJGtpbmQgYXMgJHZhbHVlKSB7CiAgICAgICAgICAgIGlmIChcaW5fYXJyYXkoJHZhbHVlLCBbJHRoaXMtPmlkLCAkdGhpcy0+dGV4dF0sIHRydWUpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc0lnbm9yYWJsZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIFxpbl9hcnJheSgkdGhpcy0+aWQsIFtcVF9XSElURVNQQUNFLCBcVF9DT01NRU5ULCBcVF9ET0NfQ09NTUVOVCwgXFRfT1BFTl9UQUddLCB0cnVlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gKHN0cmluZykgJHRoaXMtPnRleHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGxpc3Q8c3RhdGljPgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRva2VuaXplKHN0cmluZyAkY29kZSwgaW50ICRmbGFncyA9IDApOiBhcnJheQogICAgewogICAgICAgICRsaW5lID0gMTsKICAgICAgICAkcG9zaXRpb24gPSAwOwogICAgICAgICR0b2tlbnMgPSB0b2tlbl9nZXRfYWxsKCRjb2RlLCAkZmxhZ3MpOwogICAgICAgIGZvcmVhY2ggKCR0b2tlbnMgYXMgJGluZGV4ID0+ICR0b2tlbikgewogICAgICAgICAgICBpZiAoXGlzX3N0cmluZygkdG9rZW4pKSB7CiAgICAgICAgICAgICAgICAkaWQgPSBcb3JkKCR0b2tlbik7CiAgICAgICAgICAgICAgICAkdGV4dCA9ICR0b2tlbjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIFskaWQsICR0ZXh0LCAkbGluZV0gPSAkdG9rZW47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRva2Vuc1skaW5kZXhdID0gbmV3IHN0YXRpYygkaWQsICR0ZXh0LCAkbGluZSwgJHBvc2l0aW9uKTsKICAgICAgICAgICAgJHBvc2l0aW9uICs9IFxzdHJsZW4oJHRleHQpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0b2tlbnM7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php80/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[U3ltZm9ueSBQb2x5ZmlsbCAvIFBocDgwCj09PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyBjb21wb25lbnQgcHJvdmlkZXMgZmVhdHVyZXMgYWRkZWQgdG8gUEhQIDguMCBjb3JlOgoKLSBbYFN0cmluZ2FibGVgXShodHRwczovL3BocC5uZXQvc3RyaW5nYWJsZSkgaW50ZXJmYWNlCi0gW2BmZGl2YF0oaHR0cHM6Ly9waHAubmV0L2ZkaXYpCi0gW2BWYWx1ZUVycm9yYF0oaHR0cHM6Ly9waHAubmV0L3ZhbHVlZXJyb3IpIGNsYXNzCi0gW2BVbmhhbmRsZWRNYXRjaEVycm9yYF0oaHR0cHM6Ly9waHAubmV0L3VuaGFuZGxlZG1hdGNoZXJyb3IpIGNsYXNzCi0gYEZJTFRFUl9WQUxJREFURV9CT09MYCBjb25zdGFudAotIFtgZ2V0X2RlYnVnX3R5cGVgXShodHRwczovL3BocC5uZXQvZ2V0X2RlYnVnX3R5cGUpCi0gW2BQaHBUb2tlbmBdKGh0dHBzOi8vcGhwLm5ldC9waHB0b2tlbikgY2xhc3MKLSBbYHByZWdfbGFzdF9lcnJvcl9tc2dgXShodHRwczovL3BocC5uZXQvcHJlZ19sYXN0X2Vycm9yX21zZykKLSBbYHN0cl9jb250YWluc2BdKGh0dHBzOi8vcGhwLm5ldC9zdHJfY29udGFpbnMpCi0gW2BzdHJfc3RhcnRzX3dpdGhgXShodHRwczovL3BocC5uZXQvc3RyX3N0YXJ0c193aXRoKQotIFtgc3RyX2VuZHNfd2l0aGBdKGh0dHBzOi8vcGhwLm5ldC9zdHJfZW5kc193aXRoKQotIFtgZ2V0X3Jlc291cmNlX2lkYF0oaHR0cHM6Ly9waHAubmV0L2dldF9yZXNvdXJjZV9pZCkKCk1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZQpbbWFpbiBQb2x5ZmlsbCBSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9zeW1mb255L3BvbHlmaWxsL2Jsb2IvbWFpbi9SRUFETUUubWQpLgoKTGljZW5zZQo9PT09PT09CgpUaGlzIGxpYnJhcnkgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFtNSVQgbGljZW5zZV0oTElDRU5TRSkuCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php80/Resources/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php80/Resources/stubs/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCiNbQXR0cmlidXRlKEF0dHJpYnV0ZTo6VEFSR0VUX0NMQVNTKV0KZmluYWwgY2xhc3MgQXR0cmlidXRlCnsKICAgIHB1YmxpYyBjb25zdCBUQVJHRVRfQ0xBU1MgPSAxOwogICAgcHVibGljIGNvbnN0IFRBUkdFVF9GVU5DVElPTiA9IDI7CiAgICBwdWJsaWMgY29uc3QgVEFSR0VUX01FVEhPRCA9IDQ7CiAgICBwdWJsaWMgY29uc3QgVEFSR0VUX1BST1BFUlRZID0gODsKICAgIHB1YmxpYyBjb25zdCBUQVJHRVRfQ0xBU1NfQ09OU1RBTlQgPSAxNjsKICAgIHB1YmxpYyBjb25zdCBUQVJHRVRfUEFSQU1FVEVSID0gMzI7CiAgICBwdWJsaWMgY29uc3QgVEFSR0VUX0FMTCA9IDYzOwogICAgcHVibGljIGNvbnN0IElTX1JFUEVBVEFCTEUgPSA2NDsKCiAgICAvKiogQHZhciBpbnQgKi8KICAgIHB1YmxpYyAkZmxhZ3M7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGludCAkZmxhZ3MgPSBzZWxmOjpUQVJHRVRfQUxMKQogICAgewogICAgICAgICR0aGlzLT5mbGFncyA9ICRmbGFnczsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmlmIChcUEhQX1ZFUlNJT05fSUQgPCA4MDAwMCAmJiBleHRlbnNpb25fbG9hZGVkKCd0b2tlbml6ZXInKSkgewogICAgY2xhc3MgUGhwVG9rZW4gZXh0ZW5kcyBTeW1mb255XFBvbHlmaWxsXFBocDgwXFBocFRva2VuCiAgICB7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmlmIChcUEhQX1ZFUlNJT05fSUQgPCA4MDAwMCkgewogICAgaW50ZXJmYWNlIFN0cmluZ2FibGUKICAgIHsKICAgICAgICAvKioKICAgICAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmlmIChcUEhQX1ZFUlNJT05fSUQgPCA4MDAwMCkgewogICAgY2xhc3MgVW5oYW5kbGVkTWF0Y2hFcnJvciBleHRlbmRzIEVycm9yCiAgICB7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmlmIChcUEhQX1ZFUlNJT05fSUQgPCA4MDAwMCkgewogICAgY2xhc3MgVmFsdWVFcnJvciBleHRlbmRzIEVycm9yCiAgICB7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php81/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php81/bootstrap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCnVzZSBTeW1mb255XFBvbHlmaWxsXFBocDgxIGFzIHA7CgppZiAoXFBIUF9WRVJTSU9OX0lEID49IDgwMTAwKSB7CiAgICByZXR1cm47Cn0KCmlmIChkZWZpbmVkKCdNWVNRTElfUkVGUkVTSF9TTEFWRScpICYmICFkZWZpbmVkKCdNWVNRTElfUkVGUkVTSF9SRVBMSUNBJykpIHsKICAgIGRlZmluZSgnTVlTUUxJX1JFRlJFU0hfUkVQTElDQScsIDY0KTsKfQoKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2FycmF5X2lzX2xpc3QnKSkgewogICAgZnVuY3Rpb24gYXJyYXlfaXNfbGlzdChhcnJheSAkYXJyYXkpOiBib29sIHsgcmV0dXJuIHBcUGhwODE6OmFycmF5X2lzX2xpc3QoJGFycmF5KTsgfQp9CgppZiAoIWZ1bmN0aW9uX2V4aXN0cygnZW51bV9leGlzdHMnKSkgewogICAgZnVuY3Rpb24gZW51bV9leGlzdHMoc3RyaW5nICRlbnVtLCBib29sICRhdXRvbG9hZCA9IHRydWUpOiBib29sIHsgcmV0dXJuICRhdXRvbG9hZCAmJiBjbGFzc19leGlzdHMoJGVudW0pICYmIGZhbHNlOyB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php81/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAic3ltZm9ueS9wb2x5ZmlsbC1waHA4MSIsCiAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICJkZXNjcmlwdGlvbiI6ICJTeW1mb255IHBvbHlmaWxsIGJhY2twb3J0aW5nIHNvbWUgUEhQIDguMSsgZmVhdHVyZXMgdG8gbG93ZXIgUEhQIHZlcnNpb25zIiwKICAgICJrZXl3b3JkcyI6IFsicG9seWZpbGwiLCAic2hpbSIsICJjb21wYXRpYmlsaXR5IiwgInBvcnRhYmxlIl0sCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbSIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJOaWNvbGFzIEdyZWthcyIsCiAgICAgICAgICAgICJlbWFpbCI6ICJwQHRjaHdvcmsuY29tIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJTeW1mb255IENvbW11bml0eSIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3N5bWZvbnkuY29tL2NvbnRyaWJ1dG9ycyIKICAgICAgICB9CiAgICBdLAogICAgInJlcXVpcmUiOiB7CiAgICAgICAgInBocCI6ICI+PTcuMiIKICAgIH0sCiAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgInBzci00IjogeyAiU3ltZm9ueVxcUG9seWZpbGxcXFBocDgxXFwiOiAiIiB9LAogICAgICAgICJmaWxlcyI6IFsgImJvb3RzdHJhcC5waHAiIF0sCiAgICAgICAgImNsYXNzbWFwIjogWyAiUmVzb3VyY2VzL3N0dWJzIiBdCiAgICB9LAogICAgIm1pbmltdW0tc3RhYmlsaXR5IjogImRldiIsCiAgICAiZXh0cmEiOiB7CiAgICAgICAgInRoYW5rcyI6IHsKICAgICAgICAgICAgIm5hbWUiOiAic3ltZm9ueS9wb2x5ZmlsbCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvcG9seWZpbGwiCiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php81/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDIxLXByZXNlbnQgRmFiaWVuIFBvdGVuY2llcgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZAp0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php81/Php81.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XFBvbHlmaWxsXFBocDgxOwoKLyoqCiAqIEBhdXRob3IgTmljb2xhcyBHcmVrYXMgPHBAdGNod29yay5jb20+CiAqCiAqIEBpbnRlcm5hbAogKi8KZmluYWwgY2xhc3MgUGhwODEKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhcnJheV9pc19saXN0KGFycmF5ICRhcnJheSk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoW10gPT09ICRhcnJheSB8fCAkYXJyYXkgPT09IGFycmF5X3ZhbHVlcygkYXJyYXkpKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgJG5leHRLZXkgPSAtMTsKCiAgICAgICAgZm9yZWFjaCAoJGFycmF5IGFzICRrID0+ICR2KSB7CiAgICAgICAgICAgIGlmICgkayAhPT0gKyskbmV4dEtleSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php81/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[U3ltZm9ueSBQb2x5ZmlsbCAvIFBocDgxCj09PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyBjb21wb25lbnQgcHJvdmlkZXMgZmVhdHVyZXMgYWRkZWQgdG8gUEhQIDguMSBjb3JlOgoKLSBbYGFycmF5X2lzX2xpc3RgXShodHRwczovL3BocC5uZXQvYXJyYXlfaXNfbGlzdCkKLSBbYGVudW1fZXhpc3RzYF0oaHR0cHM6Ly9waHAubmV0L2VudW0tZXhpc3RzKQotIFtgTVlTUUxJX1JFRlJFU0hfUkVQTElDQWBdKGh0dHBzOi8vcGhwLm5ldC9teXNxbGkuY29uc3RhbnRzI2NvbnN0YW50bXlzcWxpLXJlZnJlc2gtcmVwbGljYSkgY29uc3RhbnQKLSBbYFJldHVyblR5cGVXaWxsQ2hhbmdlYF0oaHR0cHM6Ly93aWtpLnBocC5uZXQvcmZjL2ludGVybmFsX21ldGhvZF9yZXR1cm5fdHlwZXMpCi0gW2BDVVJMU3RyaW5nRmlsZWBdKGh0dHBzOi8vcGhwLm5ldC9DVVJMU3RyaW5nRmlsZSkgKGJ1dCBvbmx5IGlmIFBIUCA+PSA3LjQgaXMgdXNlZCkKCk1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZQpbbWFpbiBQb2x5ZmlsbCBSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9zeW1mb255L3BvbHlmaWxsL2Jsb2IvbWFpbi9SRUFETUUubWQpLgoKTGljZW5zZQo9PT09PT09CgpUaGlzIGxpYnJhcnkgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFtNSVQgbGljZW5zZV0oTElDRU5TRSkuCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php81/Resources/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php81/Resources/stubs/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmlmIChcUEhQX1ZFUlNJT05fSUQgPj0gNzA0MDAgJiYgZXh0ZW5zaW9uX2xvYWRlZCgnY3VybCcpKSB7CiAgICAvKioKICAgICAqIEBwcm9wZXJ0eSBzdHJpbmcgJGRhdGEKICAgICAqLwogICAgY2xhc3MgQ1VSTFN0cmluZ0ZpbGUgZXh0ZW5kcyBDVVJMRmlsZQogICAgewogICAgICAgIHByaXZhdGUgJGRhdGE7CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJGRhdGEsIHN0cmluZyAkcG9zdG5hbWUsIHN0cmluZyAkbWltZSA9ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKQogICAgICAgIHsKICAgICAgICAgICAgJHRoaXMtPmRhdGEgPSAkZGF0YTsKICAgICAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgnZGF0YTovL2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsJy5iYXNlNjRfZW5jb2RlKCRkYXRhKSwgJG1pbWUsICRwb3N0bmFtZSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gX19zZXQoc3RyaW5nICRuYW1lLCAkdmFsdWUpOiB2b2lkCiAgICAgICAgewogICAgICAgICAgICBpZiAoJ2RhdGEnICE9PSAkbmFtZSkgewogICAgICAgICAgICAgICAgJHRoaXMtPiRuYW1lID0gJHZhbHVlOwoKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGlzX29iamVjdCgkdmFsdWUpID8gIW1ldGhvZF9leGlzdHMoJHZhbHVlLCAnX190b1N0cmluZycpIDogIWlzX3NjYWxhcigkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgYXNzaWduICcuZ2V0dHlwZSgkdmFsdWUpLicgdG8gcHJvcGVydHkgQ1VSTFN0cmluZ0ZpbGU6OiRkYXRhIG9mIHR5cGUgc3RyaW5nJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5uYW1lID0gJ2RhdGE6Ly9hcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCcuYmFzZTY0X2VuY29kZSgkdmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIF9faXNzZXQoc3RyaW5nICRuYW1lKTogYm9vbAogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIGlzc2V0KCR0aGlzLT4kbmFtZSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gJl9fZ2V0KHN0cmluZyAkbmFtZSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+JG5hbWU7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmlmIChcUEhQX1ZFUlNJT05fSUQgPCA4MDEwMCkgewogICAgI1tBdHRyaWJ1dGUoQXR0cmlidXRlOjpUQVJHRVRfTUVUSE9EKV0KICAgIGZpbmFsIGNsYXNzIFJldHVyblR5cGVXaWxsQ2hhbmdlCiAgICB7CiAgICAgICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgICAgICB7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/symfony/process/CHANGELOG.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q0hBTkdFTE9HCj09PT09PT09PQoKNS4yLjAKLS0tLS0KCiAqIGFkZGVkIGBQcm9jZXNzOjpzZXRPcHRpb25zKClgIHRvIHNldCBgUHJvY2Vzc2Agc3BlY2lmaWMgb3B0aW9ucwogKiBhZGRlZCBvcHRpb24gYGNyZWF0ZV9uZXdfY29uc29sZWAgdG8gYWxsb3cgYSBzdWJwcm9jZXNzIHRvIGNvbnRpbnVlCiAgIHRvIHJ1biBhZnRlciB0aGUgbWFpbiBzY3JpcHQgZXhpdGVkLCBib3RoIG9uIExpbnV4IGFuZCBvbiBXaW5kb3dzCgo1LjEuMAotLS0tLQoKICogYWRkZWQgYFByb2Nlc3M6OmdldFN0YXJ0VGltZSgpYCB0byByZXRyaWV2ZSB0aGUgc3RhcnQgdGltZSBvZiB0aGUgcHJvY2VzcyBhcyBmbG9hdAoKNS4wLjAKLS0tLS0KCiAqIHJlbW92ZWQgYFByb2Nlc3M6OmluaGVyaXRFbnZpcm9ubWVudFZhcmlhYmxlcygpYAogKiByZW1vdmVkIGBQaHBQcm9jZXNzOjpzZXRQaHBCaW5hcnkoKWAKICogYFByb2Nlc3NgIG11c3QgYmUgaW5zdGFudGlhdGVkIHdpdGggYSBjb21tYW5kIGFycmF5LCB1c2UgYFByb2Nlc3M6OmZyb21TaGVsbENvbW1hbmRsaW5lKClgIHdoZW4gdGhlIGNvbW1hbmQgc2hvdWxkIGJlIHBhcnNlZCBieSB0aGUgc2hlbGwKICogcmVtb3ZlZCBgUHJvY2Vzczo6c2V0Q29tbWFuZExpbmUoKWAKCjQuNC4wCi0tLS0tCgogKiBkZXByZWNhdGVkIGBQcm9jZXNzOjppbmhlcml0RW52aXJvbm1lbnRWYXJpYWJsZXMoKWA6IGVudiB2YXJpYWJsZXMgYXJlIGFsd2F5cyBpbmhlcml0ZWQuCiAqIGFkZGVkIGBQcm9jZXNzOjpnZXRMYXN0T3V0cHV0VGltZSgpYCBtZXRob2QKCjQuMi4wCi0tLS0tCgogKiBhZGRlZCB0aGUgYFByb2Nlc3M6OmZyb21TaGVsbENvbW1hbmRsaW5lKClgIHRvIHJ1biBjb21tYW5kcyBpbiBhIHNoZWxsIHdyYXBwZXIKICogZGVwcmVjYXRlZCBwYXNzaW5nIGEgY29tbWFuZCBhcyBzdHJpbmcgd2hlbiBjcmVhdGluZyBhIGBQcm9jZXNzYCBpbnN0YW5jZQogKiBkZXByZWNhdGVkIHRoZSBgUHJvY2Vzczo6c2V0Q29tbWFuZGxpbmUoKWAgYW5kIHRoZSBgUGhwUHJvY2Vzczo6c2V0UGhwQmluYXJ5KClgIG1ldGhvZHMKICogYWRkZWQgdGhlIGBQcm9jZXNzOjp3YWl0VW50aWwoKWAgbWV0aG9kIHRvIHdhaXQgZm9yIHRoZSBwcm9jZXNzIG9ubHkgZm9yIGEKICAgc3BlY2lmaWMgb3V0cHV0LCB0aGVuIGNvbnRpbnVlIHRoZSBub3JtYWwgZXhlY3V0aW9uIG9mIHlvdXIgYXBwbGljYXRpb24KCjQuMS4wCi0tLS0tCgogKiBhZGRlZCB0aGUgYFByb2Nlc3M6OmlzVHR5U3VwcG9ydGVkKClgIG1ldGhvZCB0aGF0IGFsbG93cyB0byBjaGVjayBmb3IgVFRZIHN1cHBvcnQKICogbWFkZSBgUGhwRXhlY3V0YWJsZUZpbmRlcmAgbG9vayBmb3IgdGhlIGBQSFBfQklOQVJZYCBlbnYgdmFyIHdoZW4gc2VhcmNoaW5nIHRoZSBwaHAgYmluYXJ5CiAqIGFkZGVkIHRoZSBgUHJvY2Vzc1NpZ25hbGVkRXhjZXB0aW9uYCBjbGFzcyB0byBwcm9wZXJseSBjYXRjaCBzaWduYWxlZCBwcm9jZXNzIGVycm9ycwoKNC4wLjAKLS0tLS0KCiAqIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aWxsIGFsd2F5cyBiZSBpbmhlcml0ZWQKICogYWRkZWQgYSBzZWNvbmQgYGFycmF5ICRlbnYgPSBbXWAgYXJndW1lbnQgdG8gdGhlIGBzdGFydCgpYCwgYHJ1bigpYCwKICAgYG11c3RSdW4oKWAsIGFuZCBgcmVzdGFydCgpYCBtZXRob2RzIG9mIHRoZSBgUHJvY2Vzc2AgY2xhc3MKICogYWRkZWQgYSBzZWNvbmQgYGFycmF5ICRlbnYgPSBbXWAgYXJndW1lbnQgdG8gdGhlIGBzdGFydCgpYCBtZXRob2Qgb2YgdGhlCiAgIGBQaHBQcm9jZXNzYCBjbGFzcwogKiB0aGUgYFByb2Nlc3NVdGlsczo6ZXNjYXBlQXJndW1lbnQoKWAgbWV0aG9kIGhhcyBiZWVuIHJlbW92ZWQKICogdGhlIGBhcmVFbnZpcm9ubWVudFZhcmlhYmxlc0luaGVyaXRlZCgpYCwgYGdldE9wdGlvbnMoKWAsIGFuZCBgc2V0T3B0aW9ucygpYAogICBtZXRob2RzIG9mIHRoZSBgUHJvY2Vzc2AgY2xhc3MgaGF2ZSBiZWVuIHJlbW92ZWQKICogc3VwcG9ydCBmb3IgcGFzc2luZyBgcHJvY19vcGVuKClgIG9wdGlvbnMgaGFzIGJlZW4gcmVtb3ZlZAogKiByZW1vdmVkIHRoZSBgUHJvY2Vzc0J1aWxkZXJgIGNsYXNzLCB1c2UgdGhlIGBQcm9jZXNzYCBjbGFzcyBpbnN0ZWFkCiAqIHJlbW92ZWQgdGhlIGBnZXRFbmhhbmNlV2luZG93c0NvbXBhdGliaWxpdHkoKWAgYW5kIGBzZXRFbmhhbmNlV2luZG93c0NvbXBhdGliaWxpdHkoKWAgbWV0aG9kcyBvZiB0aGUgYFByb2Nlc3NgIGNsYXNzCiAqIHBhc3NpbmcgYSBub3QgZXhpc3Rpbmcgd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBgU3ltZm9ueVxDb21wb25lbnRcUHJvY2Vzc1xQcm9jZXNzYCBjbGFzcyBpcyBub3QKICAgc3VwcG9ydGVkIGFueW1vcmUKCjMuNC4wCi0tLS0tCgogKiBkZXByZWNhdGVkIHRoZSBQcm9jZXNzQnVpbGRlciBjbGFzcwogKiBkZXByZWNhdGVkIGNhbGxpbmcgYFByb2Nlc3M6OnN0YXJ0KClgIHdpdGhvdXQgc2V0dGluZyBhIHZhbGlkIHdvcmtpbmcgZGlyZWN0b3J5IGJlZm9yZWhhbmQgKHZpYSBgc2V0V29ya2luZ0RpcmVjdG9yeSgpYCBvciBjb25zdHJ1Y3RvcikKCjMuMy4wCi0tLS0tCgogKiBhZGRlZCBjb21tYW5kIGxpbmUgYXJyYXlzIGluIHRoZSBgUHJvY2Vzc2AgY2xhc3MKICogYWRkZWQgYCRlbnZgIGFyZ3VtZW50IHRvIGBQcm9jZXNzOjpzdGFydCgpYCwgYHJ1bigpYCwgYG11c3RSdW4oKWAgYW5kIGByZXN0YXJ0KClgIG1ldGhvZHMKICogZGVwcmVjYXRlZCB0aGUgYFByb2Nlc3NVdGlsczo6ZXNjYXBlQXJndW1lbnQoKWAgbWV0aG9kCiAqIGRlcHJlY2F0ZWQgbm90IGluaGVyaXRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzCiAqIGRlcHJlY2F0ZWQgY29uZmlndXJpbmcgYHByb2Nfb3BlbigpYCBvcHRpb25zCiAqIGRlcHJlY2F0ZWQgY29uZmlndXJpbmcgZW5oYW5jZWQgV2luZG93cyBjb21wYXRpYmlsaXR5CiAqIGRlcHJlY2F0ZWQgY29uZmlndXJpbmcgZW5oYW5jZWQgc2lnY2hpbGQgY29tcGF0aWJpbGl0eQoKMi41LjAKLS0tLS0KCiAqIGFkZGVkIHN1cHBvcnQgZm9yIFBUWSBtb2RlCiAqIGFkZGVkIHRoZSBjb252ZW5pZW5jZSBtZXRob2QgIm11c3RSdW4iCiAqIGRlcHJlY2F0aW9uOiBQcm9jZXNzOjpzZXRTdGRpbigpIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgUHJvY2Vzczo6c2V0SW5wdXQoKQogKiBkZXByZWNhdGlvbjogUHJvY2Vzczo6Z2V0U3RkaW4oKSBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIFByb2Nlc3M6OmdldElucHV0KCkKICogZGVwcmVjYXRpb246IFByb2Nlc3M6OnNldElucHV0KCkgYW5kIFByb2Nlc3NCdWlsZGVyOjpzZXRJbnB1dCgpIGRvIG5vdCBhY2NlcHQgbm9uLXNjYWxhciB0eXBlcwoKMi40LjAKLS0tLS0KCiAqIGFkZGVkIHRoZSBhYmlsaXR5IHRvIGRlZmluZSBhbiBpZGxlIHRpbWVvdXQKCjIuMy4wCi0tLS0tCgogKiBhZGRlZCBQcm9jZXNzVXRpbHM6OmVzY2FwZUFyZ3VtZW50KCkgdG8gZml4IHRoZSBidWcgaW4gZXNjYXBlc2hlbGxhcmcoKSBmdW5jdGlvbiBvbiBXaW5kb3dzCiAqIGFkZGVkIFByb2Nlc3M6OnNpZ25hbCgpCiAqIGFkZGVkIFByb2Nlc3M6OmdldFBpZCgpCiAqIGFkZGVkIHN1cHBvcnQgZm9yIGEgVFRZIG1vZGUKCjIuMi4wCi0tLS0tCgogKiBhZGRlZCBQcm9jZXNzQnVpbGRlcjo6c2V0QXJndW1lbnRzKCkgdG8gcmVzZXQgdGhlIGFyZ3VtZW50cyBvbiBhIGJ1aWxkZXIKICogYWRkZWQgYSB3YXkgdG8gcmV0cmlldmUgdGhlIHN0YW5kYXJkIGFuZCBlcnJvciBvdXRwdXQgaW5jcmVtZW50YWxseQogKiBhZGRlZCBQcm9jZXNzOnJlc3RhcnQoKQoKMi4xLjAKLS0tLS0KCiAqIGFkZGVkIHN1cHBvcnQgZm9yIG5vbi1ibG9ja2luZyBwcm9jZXNzZXMgKHN0YXJ0KCksIHdhaXQoKSwgaXNSdW5uaW5nKCksIHN0b3AoKSkKICogZW5oYW5jZWQgV2luZG93cyBjb21wYXRpYmlsaXR5CiAqIGFkZGVkIFByb2Nlc3M6OmdldEV4aXRDb2RlVGV4dCgpIHRoYXQgcmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IKICAgdGhlIGV4aXQgY29kZSByZXR1cm5lZCBieSB0aGUgcHJvY2VzcwogKiBhZGRlZCBQcm9jZXNzQnVpbGRlcgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAic3ltZm9ueS9wcm9jZXNzIiwKICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgImRlc2NyaXB0aW9uIjogIkV4ZWN1dGVzIGNvbW1hbmRzIGluIHN1Yi1wcm9jZXNzZXMiLAogICAgImtleXdvcmRzIjogW10sCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbSIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJGYWJpZW4gUG90ZW5jaWVyIiwKICAgICAgICAgICAgImVtYWlsIjogImZhYmllbkBzeW1mb255LmNvbSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiU3ltZm9ueSBDb21tdW5pdHkiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9jb250cmlidXRvcnMiCiAgICAgICAgfQogICAgXSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiOiAiPj03LjIuNSIsCiAgICAgICAgInN5bWZvbnkvcG9seWZpbGwtcGhwODAiOiAiXjEuMTYiCiAgICB9LAogICAgImF1dG9sb2FkIjogewogICAgICAgICJwc3ItNCI6IHsgIlN5bWZvbnlcXENvbXBvbmVudFxcUHJvY2Vzc1xcIjogIiIgfSwKICAgICAgICAiZXhjbHVkZS1mcm9tLWNsYXNzbWFwIjogWwogICAgICAgICAgICAiL1Rlc3RzLyIKICAgICAgICBdCiAgICB9LAogICAgIm1pbmltdW0tc3RhYmlsaXR5IjogImRldiIKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/Exception/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/symfony/process/Exception/ExceptionInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXEV4Y2VwdGlvbjsKCi8qKgogKiBNYXJrZXIgSW50ZXJmYWNlIGZvciB0aGUgUHJvY2VzcyBDb21wb25lbnQuCiAqCiAqIEBhdXRob3IgSm9oYW5uZXMgTS4gU2NobWl0dCA8c2NobWl0dGpvaEBnbWFpbC5jb20+CiAqLwppbnRlcmZhY2UgRXhjZXB0aW9uSW50ZXJmYWNlIGV4dGVuZHMgXFRocm93YWJsZQp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/Exception/InvalidArgumentException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXEV4Y2VwdGlvbjsKCi8qKgogKiBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9yIHRoZSBQcm9jZXNzIENvbXBvbmVudC4KICoKICogQGF1dGhvciBSb21haW4gTmV1dHJvbiA8aW1wcmVjQGdtYWlsLmNvbT4KICovCmNsYXNzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBleHRlbmRzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaW1wbGVtZW50cyBFeGNlcHRpb25JbnRlcmZhY2UKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/Exception/LogicException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXEV4Y2VwdGlvbjsKCi8qKgogKiBMb2dpY0V4Y2VwdGlvbiBmb3IgdGhlIFByb2Nlc3MgQ29tcG9uZW50LgogKgogKiBAYXV0aG9yIFJvbWFpbiBOZXV0cm9uIDxpbXByZWNAZ21haWwuY29tPgogKi8KY2xhc3MgTG9naWNFeGNlcHRpb24gZXh0ZW5kcyBcTG9naWNFeGNlcHRpb24gaW1wbGVtZW50cyBFeGNlcHRpb25JbnRlcmZhY2UKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/Exception/ProcessFailedException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXEV4Y2VwdGlvbjsKCnVzZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXFByb2Nlc3M7CgovKioKICogRXhjZXB0aW9uIGZvciBmYWlsZWQgcHJvY2Vzc2VzLgogKgogKiBAYXV0aG9yIEpvaGFubmVzIE0uIFNjaG1pdHQgPHNjaG1pdHRqb2hAZ21haWwuY29tPgogKi8KY2xhc3MgUHJvY2Vzc0ZhaWxlZEV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24KewogICAgcHJpdmF0ZSAkcHJvY2VzczsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoUHJvY2VzcyAkcHJvY2VzcykKICAgIHsKICAgICAgICBpZiAoJHByb2Nlc3MtPmlzU3VjY2Vzc2Z1bCgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0V4cGVjdGVkIGEgZmFpbGVkIHByb2Nlc3MsIGJ1dCB0aGUgZ2l2ZW4gcHJvY2VzcyB3YXMgc3VjY2Vzc2Z1bC4nKTsKICAgICAgICB9CgogICAgICAgICRlcnJvciA9IHNwcmludGYoJ1RoZSBjb21tYW5kICIlcyIgZmFpbGVkLicuIlxuXG5FeGl0IENvZGU6ICVzKCVzKVxuXG5Xb3JraW5nIGRpcmVjdG9yeTogJXMiLAogICAgICAgICAgICAkcHJvY2Vzcy0+Z2V0Q29tbWFuZExpbmUoKSwKICAgICAgICAgICAgJHByb2Nlc3MtPmdldEV4aXRDb2RlKCksCiAgICAgICAgICAgICRwcm9jZXNzLT5nZXRFeGl0Q29kZVRleHQoKSwKICAgICAgICAgICAgJHByb2Nlc3MtPmdldFdvcmtpbmdEaXJlY3RvcnkoKQogICAgICAgICk7CgogICAgICAgIGlmICghJHByb2Nlc3MtPmlzT3V0cHV0RGlzYWJsZWQoKSkgewogICAgICAgICAgICAkZXJyb3IgLj0gc3ByaW50ZigiXG5cbk91dHB1dDpcbj09PT09PT09PT09PT09PT1cbiVzXG5cbkVycm9yIE91dHB1dDpcbj09PT09PT09PT09PT09PT1cbiVzIiwKICAgICAgICAgICAgICAgICRwcm9jZXNzLT5nZXRPdXRwdXQoKSwKICAgICAgICAgICAgICAgICRwcm9jZXNzLT5nZXRFcnJvck91dHB1dCgpCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRlcnJvcik7CgogICAgICAgICR0aGlzLT5wcm9jZXNzID0gJHByb2Nlc3M7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFByb2Nlc3MoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cHJvY2VzczsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/Exception/ProcessSignaledException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXEV4Y2VwdGlvbjsKCnVzZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXFByb2Nlc3M7CgovKioKICogRXhjZXB0aW9uIHRoYXQgaXMgdGhyb3duIHdoZW4gYSBwcm9jZXNzIGhhcyBiZWVuIHNpZ25hbGVkLgogKgogKiBAYXV0aG9yIFN1bGxpdmFuIFNlbmVjaGFsIDxzb3VsbGl2YW5ldWhAZ21haWwuY29tPgogKi8KZmluYWwgY2xhc3MgUHJvY2Vzc1NpZ25hbGVkRXhjZXB0aW9uIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbgp7CiAgICBwcml2YXRlICRwcm9jZXNzOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChQcm9jZXNzICRwcm9jZXNzKQogICAgewogICAgICAgICR0aGlzLT5wcm9jZXNzID0gJHByb2Nlc3M7CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3Qoc3ByaW50ZignVGhlIHByb2Nlc3MgaGFzIGJlZW4gc2lnbmFsZWQgd2l0aCBzaWduYWwgIiVzIi4nLCAkcHJvY2Vzcy0+Z2V0VGVybVNpZ25hbCgpKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFByb2Nlc3MoKTogUHJvY2VzcwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cHJvY2VzczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2lnbmFsKCk6IGludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0UHJvY2VzcygpLT5nZXRUZXJtU2lnbmFsKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/Exception/ProcessTimedOutException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXEV4Y2VwdGlvbjsKCnVzZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXFByb2Nlc3M7CgovKioKICogRXhjZXB0aW9uIHRoYXQgaXMgdGhyb3duIHdoZW4gYSBwcm9jZXNzIHRpbWVzIG91dC4KICoKICogQGF1dGhvciBKb2hhbm5lcyBNLiBTY2htaXR0IDxzY2htaXR0am9oQGdtYWlsLmNvbT4KICovCmNsYXNzIFByb2Nlc3NUaW1lZE91dEV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24KewogICAgcHVibGljIGNvbnN0IFRZUEVfR0VORVJBTCA9IDE7CiAgICBwdWJsaWMgY29uc3QgVFlQRV9JRExFID0gMjsKCiAgICBwcml2YXRlICRwcm9jZXNzOwogICAgcHJpdmF0ZSAkdGltZW91dFR5cGU7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFByb2Nlc3MgJHByb2Nlc3MsIGludCAkdGltZW91dFR5cGUpCiAgICB7CiAgICAgICAgJHRoaXMtPnByb2Nlc3MgPSAkcHJvY2VzczsKICAgICAgICAkdGhpcy0+dGltZW91dFR5cGUgPSAkdGltZW91dFR5cGU7CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3Qoc3ByaW50ZigKICAgICAgICAgICAgJ1RoZSBwcm9jZXNzICIlcyIgZXhjZWVkZWQgdGhlIHRpbWVvdXQgb2YgJXMgc2Vjb25kcy4nLAogICAgICAgICAgICAkcHJvY2Vzcy0+Z2V0Q29tbWFuZExpbmUoKSwKICAgICAgICAgICAgJHRoaXMtPmdldEV4Y2VlZGVkVGltZW91dCgpCiAgICAgICAgKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFByb2Nlc3MoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cHJvY2VzczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNHZW5lcmFsVGltZW91dCgpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OlRZUEVfR0VORVJBTCA9PT0gJHRoaXMtPnRpbWVvdXRUeXBlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc0lkbGVUaW1lb3V0KCkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6VFlQRV9JRExFID09PSAkdGhpcy0+dGltZW91dFR5cGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEV4Y2VlZGVkVGltZW91dCgpCiAgICB7CiAgICAgICAgc3dpdGNoICgkdGhpcy0+dGltZW91dFR5cGUpIHsKICAgICAgICAgICAgY2FzZSBzZWxmOjpUWVBFX0dFTkVSQUw6CiAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnByb2Nlc3MtPmdldFRpbWVvdXQoKTsKCiAgICAgICAgICAgIGNhc2Ugc2VsZjo6VFlQRV9JRExFOgogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5wcm9jZXNzLT5nZXRJZGxlVGltZW91dCgpOwoKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oc3ByaW50ZignVW5rbm93biB0aW1lb3V0IHR5cGUgIiVkIi4nLCAkdGhpcy0+dGltZW91dFR5cGUpKTsKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/Exception/RuntimeException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXEV4Y2VwdGlvbjsKCi8qKgogKiBSdW50aW1lRXhjZXB0aW9uIGZvciB0aGUgUHJvY2VzcyBDb21wb25lbnQuCiAqCiAqIEBhdXRob3IgSm9oYW5uZXMgTS4gU2NobWl0dCA8c2NobWl0dGpvaEBnbWFpbC5jb20+CiAqLwpjbGFzcyBSdW50aW1lRXhjZXB0aW9uIGV4dGVuZHMgXFJ1bnRpbWVFeGNlcHRpb24gaW1wbGVtZW50cyBFeGNlcHRpb25JbnRlcmZhY2UKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/ExecutableFinder.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzOwoKLyoqCiAqIEdlbmVyaWMgZXhlY3V0YWJsZSBmaW5kZXIuCiAqCiAqIEBhdXRob3IgRmFiaWVuIFBvdGVuY2llciA8ZmFiaWVuQHN5bWZvbnkuY29tPgogKiBAYXV0aG9yIEpvaGFubmVzIE0uIFNjaG1pdHQgPHNjaG1pdHRqb2hAZ21haWwuY29tPgogKi8KY2xhc3MgRXhlY3V0YWJsZUZpbmRlcgp7CiAgICBwcml2YXRlIGNvbnN0IENNRF9CVUlMVElOUyA9IFsKICAgICAgICAnYXNzb2MnLCAnYnJlYWsnLCAnY2FsbCcsICdjZCcsICdjaGRpcicsICdjbHMnLCAnY29sb3InLCAnY29weScsICdkYXRlJywKICAgICAgICAnZGVsJywgJ2RpcicsICdlY2hvJywgJ2VuZGxvY2FsJywgJ2VyYXNlJywgJ2V4aXQnLCAnZm9yJywgJ2Z0eXBlJywgJ2dvdG8nLAogICAgICAgICdoZWxwJywgJ2lmJywgJ2xhYmVsJywgJ21kJywgJ21rZGlyJywgJ21rbGluaycsICdtb3ZlJywgJ3BhdGgnLCAncGF1c2UnLAogICAgICAgICdwb3BkJywgJ3Byb21wdCcsICdwdXNoZCcsICdyZCcsICdyZW0nLCAncmVuJywgJ3JlbmFtZScsICdybWRpcicsICdzZXQnLAogICAgICAgICdzZXRsb2NhbCcsICdzaGlmdCcsICdzdGFydCcsICd0aW1lJywgJ3RpdGxlJywgJ3R5cGUnLCAndmVyJywgJ3ZvbCcsCiAgICBdOwoKICAgIHByaXZhdGUgJHN1ZmZpeGVzID0gW107CgogICAgLyoqCiAgICAgKiBSZXBsYWNlcyBkZWZhdWx0IHN1ZmZpeGVzIG9mIGV4ZWN1dGFibGUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRTdWZmaXhlcyhhcnJheSAkc3VmZml4ZXMpCiAgICB7CiAgICAgICAgJHRoaXMtPnN1ZmZpeGVzID0gJHN1ZmZpeGVzOwogICAgfQoKICAgIC8qKgogICAgICogQWRkcyBuZXcgcG9zc2libGUgc3VmZml4IHRvIGNoZWNrIGZvciBleGVjdXRhYmxlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkU3VmZml4KHN0cmluZyAkc3VmZml4KQogICAgewogICAgICAgICR0aGlzLT5zdWZmaXhlc1tdID0gJHN1ZmZpeDsKICAgIH0KCiAgICAvKioKICAgICAqIEZpbmRzIGFuIGV4ZWN1dGFibGUgYnkgbmFtZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgJG5hbWUgICAgICBUaGUgZXhlY3V0YWJsZSBuYW1lICh3aXRob3V0IHRoZSBleHRlbnNpb24pCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGRlZmF1bHQgICBUaGUgZGVmYXVsdCB0byByZXR1cm4gaWYgbm8gZXhlY3V0YWJsZSBpcyBmb3VuZAogICAgICogQHBhcmFtIGFycmF5ICAgICAgICRleHRyYURpcnMgQWRkaXRpb25hbCBkaXJzIHRvIGNoZWNrIGludG8KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaW5kKHN0cmluZyAkbmFtZSwgP3N0cmluZyAkZGVmYXVsdCA9IG51bGwsIGFycmF5ICRleHRyYURpcnMgPSBbXSkKICAgIHsKICAgICAgICAvLyB3aW5kb3dzIGJ1aWx0LWluIGNvbW1hbmRzIHRoYXQgYXJlIHByZXNlbnQgaW4gY21kLmV4ZSBzaG91bGQgbm90IGJlIHJlc29sdmVkIHVzaW5nIFBBVEggYXMgdGhleSBkbyBub3QgZXhpc3QgYXMgZXhlcwogICAgICAgIGlmICgnXFwnID09PSBcRElSRUNUT1JZX1NFUEFSQVRPUiAmJiBcaW5fYXJyYXkoc3RydG9sb3dlcigkbmFtZSksIHNlbGY6OkNNRF9CVUlMVElOUywgdHJ1ZSkpIHsKICAgICAgICAgICAgcmV0dXJuICRuYW1lOwogICAgICAgIH0KCiAgICAgICAgJGRpcnMgPSBhcnJheV9tZXJnZSgKICAgICAgICAgICAgZXhwbG9kZShcUEFUSF9TRVBBUkFUT1IsIGdldGVudignUEFUSCcpID86IGdldGVudignUGF0aCcpKSwKICAgICAgICAgICAgJGV4dHJhRGlycwogICAgICAgICk7CgogICAgICAgICRzdWZmaXhlcyA9IFtdOwogICAgICAgIGlmICgnXFwnID09PSBcRElSRUNUT1JZX1NFUEFSQVRPUikgewogICAgICAgICAgICAkcGF0aEV4dCA9IGdldGVudignUEFUSEVYVCcpOwogICAgICAgICAgICAkc3VmZml4ZXMgPSAkdGhpcy0+c3VmZml4ZXM7CiAgICAgICAgICAgICRzdWZmaXhlcyA9IGFycmF5X21lcmdlKCRzdWZmaXhlcywgJHBhdGhFeHQgPyBleHBsb2RlKFxQQVRIX1NFUEFSQVRPUiwgJHBhdGhFeHQpIDogWycuZXhlJywgJy5iYXQnLCAnLmNtZCcsICcuY29tJ10pOwogICAgICAgIH0KICAgICAgICAkc3VmZml4ZXMgPSAnJyAhPT0gcGF0aGluZm8oJG5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikgPyBhcnJheV9tZXJnZShbJyddLCAkc3VmZml4ZXMpIDogYXJyYXlfbWVyZ2UoJHN1ZmZpeGVzLCBbJyddKTsKICAgICAgICBmb3JlYWNoICgkc3VmZml4ZXMgYXMgJHN1ZmZpeCkgewogICAgICAgICAgICBmb3JlYWNoICgkZGlycyBhcyAkZGlyKSB7CiAgICAgICAgICAgICAgICBpZiAoJycgPT09ICRkaXIpIHsKICAgICAgICAgICAgICAgICAgICAkZGlyID0gJy4nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKEBpc19maWxlKCRmaWxlID0gJGRpci5cRElSRUNUT1JZX1NFUEFSQVRPUi4kbmFtZS4kc3VmZml4KSAmJiAoJ1xcJyA9PT0gXERJUkVDVE9SWV9TRVBBUkFUT1IgfHwgQGlzX2V4ZWN1dGFibGUoJGZpbGUpKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkZmlsZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIUBpc19kaXIoJGRpcikgJiYgYmFzZW5hbWUoJGRpcikgPT09ICRuYW1lLiRzdWZmaXggJiYgQGlzX2V4ZWN1dGFibGUoJGRpcikpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGRpcjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCdcXCcgPT09IFxESVJFQ1RPUllfU0VQQVJBVE9SIHx8ICFcZnVuY3Rpb25fZXhpc3RzKCdleGVjJykgfHwgXHN0cmxlbigkbmFtZSkgIT09IHN0cmNzcG4oJG5hbWUsICcvJy5cRElSRUNUT1JZX1NFUEFSQVRPUikpIHsKICAgICAgICAgICAgcmV0dXJuICRkZWZhdWx0OwogICAgICAgIH0KCiAgICAgICAgJGV4ZWNSZXN1bHQgPSBleGVjKCdjb21tYW5kIC12IC0tICcuZXNjYXBlc2hlbGxhcmcoJG5hbWUpKTsKCiAgICAgICAgaWYgKCgkZXhlY3V0YWJsZVBhdGggPSBzdWJzdHIoJGV4ZWNSZXN1bHQsIDAsIHN0cnBvcygkZXhlY1Jlc3VsdCwgXFBIUF9FT0wpID86IG51bGwpKSAmJiBAaXNfZXhlY3V0YWJsZSgkZXhlY3V0YWJsZVBhdGgpKSB7CiAgICAgICAgICAgIHJldHVybiAkZXhlY3V0YWJsZVBhdGg7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGRlZmF1bHQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/InputStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb247CgovKioKICogUHJvdmlkZXMgYSB3YXkgdG8gY29udGludW91c2x5IHdyaXRlIHRvIHRoZSBpbnB1dCBvZiBhIFByb2Nlc3MgdW50aWwgdGhlIElucHV0U3RyZWFtIGlzIGNsb3NlZC4KICoKICogQGF1dGhvciBOaWNvbGFzIEdyZWthcyA8cEB0Y2h3b3JrLmNvbT4KICoKICogQGltcGxlbWVudHMgXEl0ZXJhdG9yQWdncmVnYXRlPGludCwgc3RyaW5nPgogKi8KY2xhc3MgSW5wdXRTdHJlYW0gaW1wbGVtZW50cyBcSXRlcmF0b3JBZ2dyZWdhdGUKewogICAgLyoqIEB2YXIgY2FsbGFibGV8bnVsbCAqLwogICAgcHJpdmF0ZSAkb25FbXB0eSA9IG51bGw7CiAgICBwcml2YXRlICRpbnB1dCA9IFtdOwogICAgcHJpdmF0ZSAkb3BlbiA9IHRydWU7CgogICAgLyoqCiAgICAgKiBTZXRzIGEgY2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgd3JpdGUgYnVmZmVyIGJlY29tZXMgZW1wdHkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvbkVtcHR5KD9jYWxsYWJsZSAkb25FbXB0eSA9IG51bGwpCiAgICB7CiAgICAgICAgJHRoaXMtPm9uRW1wdHkgPSAkb25FbXB0eTsKICAgIH0KCiAgICAvKioKICAgICAqIEFwcGVuZHMgYW4gaW5wdXQgdG8gdGhlIHdyaXRlIGJ1ZmZlci4KICAgICAqCiAgICAgKiBAcGFyYW0gcmVzb3VyY2V8c3RyaW5nfGludHxmbG9hdHxib29sfFxUcmF2ZXJzYWJsZXxudWxsICRpbnB1dCBUaGUgaW5wdXQgdG8gYXBwZW5kIGFzIHNjYWxhciwKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSByZXNvdXJjZSBvciBcVHJhdmVyc2FibGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlKCRpbnB1dCkKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJGlucHV0KSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKCR0aGlzLT5pc0Nsb3NlZCgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKHNwcmludGYoJyIlcyIgaXMgY2xvc2VkLicsIHN0YXRpYzo6Y2xhc3MpKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPmlucHV0W10gPSBQcm9jZXNzVXRpbHM6OnZhbGlkYXRlSW5wdXQoX19NRVRIT0RfXywgJGlucHV0KTsKICAgIH0KCiAgICAvKioKICAgICAqIENsb3NlcyB0aGUgd3JpdGUgYnVmZmVyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKQogICAgewogICAgICAgICR0aGlzLT5vcGVuID0gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBUZWxscyB3aGV0aGVyIHRoZSB3cml0ZSBidWZmZXIgaXMgY2xvc2VkIG9yIG5vdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzQ2xvc2VkKCkKICAgIHsKICAgICAgICByZXR1cm4gISR0aGlzLT5vcGVuOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBcVHJhdmVyc2FibGU8aW50LCBzdHJpbmc+CiAgICAgKi8KICAgICNbXFJldHVyblR5cGVXaWxsQ2hhbmdlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEl0ZXJhdG9yKCkKICAgIHsKICAgICAgICAkdGhpcy0+b3BlbiA9IHRydWU7CgogICAgICAgIHdoaWxlICgkdGhpcy0+b3BlbiB8fCAkdGhpcy0+aW5wdXQpIHsKICAgICAgICAgICAgaWYgKCEkdGhpcy0+aW5wdXQpIHsKICAgICAgICAgICAgICAgIHlpZWxkICcnOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGN1cnJlbnQgPSBhcnJheV9zaGlmdCgkdGhpcy0+aW5wdXQpOwoKICAgICAgICAgICAgaWYgKCRjdXJyZW50IGluc3RhbmNlb2YgXEl0ZXJhdG9yKSB7CiAgICAgICAgICAgICAgICB5aWVsZCBmcm9tICRjdXJyZW50OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgeWllbGQgJGN1cnJlbnQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCEkdGhpcy0+aW5wdXQgJiYgJHRoaXMtPm9wZW4gJiYgbnVsbCAhPT0gJG9uRW1wdHkgPSAkdGhpcy0+b25FbXB0eSkgewogICAgICAgICAgICAgICAgJHRoaXMtPndyaXRlKCRvbkVtcHR5KCR0aGlzKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDA0LXByZXNlbnQgRmFiaWVuIFBvdGVuY2llcgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZAp0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/PhpExecutableFinder.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzOwoKLyoqCiAqIEFuIGV4ZWN1dGFibGUgZmluZGVyIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdGhlIFBIUCBleGVjdXRhYmxlLgogKgogKiBAYXV0aG9yIEZhYmllbiBQb3RlbmNpZXIgPGZhYmllbkBzeW1mb255LmNvbT4KICogQGF1dGhvciBKb2hhbm5lcyBNLiBTY2htaXR0IDxzY2htaXR0am9oQGdtYWlsLmNvbT4KICovCmNsYXNzIFBocEV4ZWN1dGFibGVGaW5kZXIKewogICAgcHJpdmF0ZSAkZXhlY3V0YWJsZUZpbmRlcjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgICR0aGlzLT5leGVjdXRhYmxlRmluZGVyID0gbmV3IEV4ZWN1dGFibGVGaW5kZXIoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEZpbmRzIFRoZSBQSFAgZXhlY3V0YWJsZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmluZChib29sICRpbmNsdWRlQXJncyA9IHRydWUpCiAgICB7CiAgICAgICAgaWYgKCRwaHAgPSBnZXRlbnYoJ1BIUF9CSU5BUlknKSkgewogICAgICAgICAgICBpZiAoIWlzX2V4ZWN1dGFibGUoJHBocCkgJiYgISRwaHAgPSAkdGhpcy0+ZXhlY3V0YWJsZUZpbmRlci0+ZmluZCgkcGhwKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoQGlzX2RpcigkcGhwKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gJHBocDsKICAgICAgICB9CgogICAgICAgICRhcmdzID0gJHRoaXMtPmZpbmRBcmd1bWVudHMoKTsKICAgICAgICAkYXJncyA9ICRpbmNsdWRlQXJncyAmJiAkYXJncyA/ICcgJy5pbXBsb2RlKCcgJywgJGFyZ3MpIDogJyc7CgogICAgICAgIC8vIFBIUF9CSU5BUlkgcmV0dXJuIHRoZSBjdXJyZW50IHNhcGkgZXhlY3V0YWJsZQogICAgICAgIGlmIChcUEhQX0JJTkFSWSAmJiBcaW5fYXJyYXkoXFBIUF9TQVBJLCBbJ2NsaScsICdjbGktc2VydmVyJywgJ3BocGRiZyddLCB0cnVlKSkgewogICAgICAgICAgICByZXR1cm4gXFBIUF9CSU5BUlkuJGFyZ3M7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHBocCA9IGdldGVudignUEhQX1BBVEgnKSkgewogICAgICAgICAgICBpZiAoIUBpc19leGVjdXRhYmxlKCRwaHApIHx8IEBpc19kaXIoJHBocCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICRwaHA7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHBocCA9IGdldGVudignUEhQX1BFQVJfUEhQX0JJTicpKSB7CiAgICAgICAgICAgIGlmIChAaXNfZXhlY3V0YWJsZSgkcGhwKSAmJiAhQGlzX2RpcigkcGhwKSkgewogICAgICAgICAgICAgICAgcmV0dXJuICRwaHA7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChAaXNfZXhlY3V0YWJsZSgkcGhwID0gXFBIUF9CSU5ESVIuKCdcXCcgPT09IFxESVJFQ1RPUllfU0VQQVJBVE9SID8gJ1xccGhwLmV4ZScgOiAnL3BocCcpKSAmJiAhQGlzX2RpcigkcGhwKSkgewogICAgICAgICAgICByZXR1cm4gJHBocDsKICAgICAgICB9CgogICAgICAgICRkaXJzID0gW1xQSFBfQklORElSXTsKICAgICAgICBpZiAoJ1xcJyA9PT0gXERJUkVDVE9SWV9TRVBBUkFUT1IpIHsKICAgICAgICAgICAgJGRpcnNbXSA9ICdDOlx4YW1wcFxwaHBcXCc7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPmV4ZWN1dGFibGVGaW5kZXItPmZpbmQoJ3BocCcsIGZhbHNlLCAkZGlycyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBGaW5kcyB0aGUgUEhQIGV4ZWN1dGFibGUgYXJndW1lbnRzLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZpbmRBcmd1bWVudHMoKQogICAgewogICAgICAgICRhcmd1bWVudHMgPSBbXTsKICAgICAgICBpZiAoJ3BocGRiZycgPT09IFxQSFBfU0FQSSkgewogICAgICAgICAgICAkYXJndW1lbnRzW10gPSAnLXFycic7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGFyZ3VtZW50czsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/PhpProcess.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcRXhjZXB0aW9uXExvZ2ljRXhjZXB0aW9uOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcUHJvY2Vzc1xFeGNlcHRpb25cUnVudGltZUV4Y2VwdGlvbjsKCi8qKgogKiBQaHBQcm9jZXNzIHJ1bnMgYSBQSFAgc2NyaXB0IGluIGFuIGluZGVwZW5kZW50IHByb2Nlc3MuCiAqCiAqICAgICAkcCA9IG5ldyBQaHBQcm9jZXNzKCc8P3BocCBlY2hvICJmb28iOyA/PicpOwogKiAgICAgJHAtPnJ1bigpOwogKiAgICAgcHJpbnQgJHAtPmdldE91dHB1dCgpLiJcbiI7CiAqCiAqIEBhdXRob3IgRmFiaWVuIFBvdGVuY2llciA8ZmFiaWVuQHN5bWZvbnkuY29tPgogKi8KY2xhc3MgUGhwUHJvY2VzcyBleHRlbmRzIFByb2Nlc3MKewogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgJHNjcmlwdCAgVGhlIFBIUCBzY3JpcHQgdG8gcnVuIChhcyBhIHN0cmluZykKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkY3dkICAgICBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb3IgbnVsbCB0byB1c2UgdGhlIHdvcmtpbmcgZGlyIG9mIHRoZSBjdXJyZW50IFBIUCBwcm9jZXNzCiAgICAgKiBAcGFyYW0gYXJyYXl8bnVsbCAgJGVudiAgICAgVGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBvciBudWxsIHRvIHVzZSB0aGUgc2FtZSBlbnZpcm9ubWVudCBhcyB0aGUgY3VycmVudCBQSFAgcHJvY2VzcwogICAgICogQHBhcmFtIGludCAgICAgICAgICR0aW1lb3V0IFRoZSB0aW1lb3V0IGluIHNlY29uZHMKICAgICAqIEBwYXJhbSBhcnJheXxudWxsICAkcGhwICAgICBQYXRoIHRvIHRoZSBQSFAgYmluYXJ5IHRvIHVzZSB3aXRoIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRzY3JpcHQsID9zdHJpbmcgJGN3ZCA9IG51bGwsID9hcnJheSAkZW52ID0gbnVsbCwgaW50ICR0aW1lb3V0ID0gNjAsID9hcnJheSAkcGhwID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJHBocCkgewogICAgICAgICAgICAkZXhlY3V0YWJsZUZpbmRlciA9IG5ldyBQaHBFeGVjdXRhYmxlRmluZGVyKCk7CiAgICAgICAgICAgICRwaHAgPSAkZXhlY3V0YWJsZUZpbmRlci0+ZmluZChmYWxzZSk7CiAgICAgICAgICAgICRwaHAgPSBmYWxzZSA9PT0gJHBocCA/IG51bGwgOiBhcnJheV9tZXJnZShbJHBocF0sICRleGVjdXRhYmxlRmluZGVyLT5maW5kQXJndW1lbnRzKCkpOwogICAgICAgIH0KICAgICAgICBpZiAoJ3BocGRiZycgPT09IFxQSFBfU0FQSSkgewogICAgICAgICAgICAkZmlsZSA9IHRlbXBuYW0oc3lzX2dldF90ZW1wX2RpcigpLCAnZGJnJyk7CiAgICAgICAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKCRmaWxlLCAkc2NyaXB0KTsKICAgICAgICAgICAgcmVnaXN0ZXJfc2h1dGRvd25fZnVuY3Rpb24oJ3VubGluaycsICRmaWxlKTsKICAgICAgICAgICAgJHBocFtdID0gJGZpbGU7CiAgICAgICAgICAgICRzY3JpcHQgPSBudWxsOwogICAgICAgIH0KCiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkcGhwLCAkY3dkLCAkZW52LCAkc2NyaXB0LCAkdGltZW91dCk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbVNoZWxsQ29tbWFuZGxpbmUoc3RyaW5nICRjb21tYW5kLCA/c3RyaW5nICRjd2QgPSBudWxsLCA/YXJyYXkgJGVudiA9IG51bGwsICRpbnB1dCA9IG51bGwsID9mbG9hdCAkdGltZW91dCA9IDYwKQogICAgewogICAgICAgIHRocm93IG5ldyBMb2dpY0V4Y2VwdGlvbihzcHJpbnRmKCdUaGUgIiVzKCkiIG1ldGhvZCBjYW5ub3QgYmUgY2FsbGVkIHdoZW4gdXNpbmcgIiVzIi4nLCBfX01FVEhPRF9fLCBzZWxmOjpjbGFzcykpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RhcnQoP2NhbGxhYmxlICRjYWxsYmFjayA9IG51bGwsIGFycmF5ICRlbnYgPSBbXSkKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJHRoaXMtPmdldENvbW1hbmRMaW5lKCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oJ1VuYWJsZSB0byBmaW5kIHRoZSBQSFAgZXhlY3V0YWJsZS4nKTsKICAgICAgICB9CgogICAgICAgIHBhcmVudDo6c3RhcnQoJGNhbGxiYWNrLCAkZW52KTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/Pipes/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/symfony/process/Pipes/AbstractPipes.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXFBpcGVzOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKCi8qKgogKiBAYXV0aG9yIFJvbWFpbiBOZXV0cm9uIDxpbXByZWNAZ21haWwuY29tPgogKgogKiBAaW50ZXJuYWwKICovCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0UGlwZXMgaW1wbGVtZW50cyBQaXBlc0ludGVyZmFjZQp7CiAgICBwdWJsaWMgJHBpcGVzID0gW107CgogICAgcHJpdmF0ZSAkaW5wdXRCdWZmZXIgPSAnJzsKICAgIHByaXZhdGUgJGlucHV0OwogICAgcHJpdmF0ZSAkYmxvY2tlZCA9IHRydWU7CiAgICBwcml2YXRlICRsYXN0RXJyb3I7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gcmVzb3VyY2V8c3RyaW5nfGludHxmbG9hdHxib29sfFxJdGVyYXRvcnxudWxsICRpbnB1dAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGlucHV0KQogICAgewogICAgICAgIGlmIChcaXNfcmVzb3VyY2UoJGlucHV0KSB8fCAkaW5wdXQgaW5zdGFuY2VvZiBcSXRlcmF0b3IpIHsKICAgICAgICAgICAgJHRoaXMtPmlucHV0ID0gJGlucHV0OwogICAgICAgIH0gZWxzZWlmIChcaXNfc3RyaW5nKCRpbnB1dCkpIHsKICAgICAgICAgICAgJHRoaXMtPmlucHV0QnVmZmVyID0gJGlucHV0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5pbnB1dEJ1ZmZlciA9IChzdHJpbmcpICRpbnB1dDsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbG9zZSgpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnBpcGVzIGFzICRwaXBlKSB7CiAgICAgICAgICAgIGlmIChcaXNfcmVzb3VyY2UoJHBpcGUpKSB7CiAgICAgICAgICAgICAgICBmY2xvc2UoJHBpcGUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICR0aGlzLT5waXBlcyA9IFtdOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIGEgc3lzdGVtIGNhbGwgaGFzIGJlZW4gaW50ZXJydXB0ZWQuCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBoYXNTeXN0ZW1DYWxsQmVlbkludGVycnVwdGVkKCk6IGJvb2wKICAgIHsKICAgICAgICAkbGFzdEVycm9yID0gJHRoaXMtPmxhc3RFcnJvcjsKICAgICAgICAkdGhpcy0+bGFzdEVycm9yID0gbnVsbDsKCiAgICAgICAgLy8gc3RyZWFtX3NlbGVjdCByZXR1cm5zIGZhbHNlIHdoZW4gdGhlIGBzZWxlY3RgIHN5c3RlbSBjYWxsIGlzIGludGVycnVwdGVkIGJ5IGFuIGluY29taW5nIHNpZ25hbAogICAgICAgIHJldHVybiBudWxsICE9PSAkbGFzdEVycm9yICYmIGZhbHNlICE9PSBzdHJpcG9zKCRsYXN0RXJyb3IsICdpbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbCcpOwogICAgfQoKICAgIC8qKgogICAgICogVW5ibG9ja3Mgc3RyZWFtcy4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHVuYmxvY2soKQogICAgewogICAgICAgIGlmICghJHRoaXMtPmJsb2NrZWQpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnBpcGVzIGFzICRwaXBlKSB7CiAgICAgICAgICAgIHN0cmVhbV9zZXRfYmxvY2tpbmcoJHBpcGUsIDApOwogICAgICAgIH0KICAgICAgICBpZiAoXGlzX3Jlc291cmNlKCR0aGlzLT5pbnB1dCkpIHsKICAgICAgICAgICAgc3RyZWFtX3NldF9ibG9ja2luZygkdGhpcy0+aW5wdXQsIDApOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmJsb2NrZWQgPSBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIFdyaXRlcyBpbnB1dCB0byBzdGRpbi4KICAgICAqCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBXaGVuIGFuIGlucHV0IGl0ZXJhdG9yIHlpZWxkcyBhIG5vbiBzdXBwb3J0ZWQgdmFsdWUKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHdyaXRlKCk6ID9hcnJheQogICAgewogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPnBpcGVzWzBdKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgJGlucHV0ID0gJHRoaXMtPmlucHV0OwoKICAgICAgICBpZiAoJGlucHV0IGluc3RhbmNlb2YgXEl0ZXJhdG9yKSB7CiAgICAgICAgICAgIGlmICghJGlucHV0LT52YWxpZCgpKSB7CiAgICAgICAgICAgICAgICAkaW5wdXQgPSBudWxsOwogICAgICAgICAgICB9IGVsc2VpZiAoXGlzX3Jlc291cmNlKCRpbnB1dCA9ICRpbnB1dC0+Y3VycmVudCgpKSkgewogICAgICAgICAgICAgICAgc3RyZWFtX3NldF9ibG9ja2luZygkaW5wdXQsIDApOwogICAgICAgICAgICB9IGVsc2VpZiAoIWlzc2V0KCR0aGlzLT5pbnB1dEJ1ZmZlclswXSkpIHsKICAgICAgICAgICAgICAgIGlmICghXGlzX3N0cmluZygkaW5wdXQpKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFcaXNfc2NhbGFyKCRpbnB1dCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihzcHJpbnRmKCciJXMiIHlpZWxkZWQgYSB2YWx1ZSBvZiB0eXBlICIlcyIsIGJ1dCBvbmx5IHNjYWxhcnMgYW5kIHN0cmVhbSByZXNvdXJjZXMgYXJlIHN1cHBvcnRlZC4nLCBnZXRfZGVidWdfdHlwZSgkdGhpcy0+aW5wdXQpLCBnZXRfZGVidWdfdHlwZSgkaW5wdXQpKSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRpbnB1dCA9IChzdHJpbmcpICRpbnB1dDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICR0aGlzLT5pbnB1dEJ1ZmZlciA9ICRpbnB1dDsKICAgICAgICAgICAgICAgICR0aGlzLT5pbnB1dC0+bmV4dCgpOwogICAgICAgICAgICAgICAgJGlucHV0ID0gbnVsbDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRpbnB1dCA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRyID0gJGUgPSBbXTsKICAgICAgICAkdyA9IFskdGhpcy0+cGlwZXNbMF1dOwoKICAgICAgICAvLyBsZXQncyBoYXZlIGEgbG9vayBpZiBzb21ldGhpbmcgY2hhbmdlZCBpbiBzdHJlYW1zCiAgICAgICAgaWYgKGZhbHNlID09PSBAc3RyZWFtX3NlbGVjdCgkciwgJHcsICRlLCAwLCAwKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCR3IGFzICRzdGRpbikgewogICAgICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPmlucHV0QnVmZmVyWzBdKSkgewogICAgICAgICAgICAgICAgJHdyaXR0ZW4gPSBmd3JpdGUoJHN0ZGluLCAkdGhpcy0+aW5wdXRCdWZmZXIpOwogICAgICAgICAgICAgICAgJHRoaXMtPmlucHV0QnVmZmVyID0gc3Vic3RyKCR0aGlzLT5pbnB1dEJ1ZmZlciwgJHdyaXR0ZW4pOwogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5pbnB1dEJ1ZmZlclswXSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyR0aGlzLT5waXBlc1swXV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkaW5wdXQpIHsKICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgJGRhdGEgPSBmcmVhZCgkaW5wdXQsIHNlbGY6OkNIVU5LX1NJWkUpOwogICAgICAgICAgICAgICAgICAgIGlmICghaXNzZXQoJGRhdGFbMF0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkd3JpdHRlbiA9IGZ3cml0ZSgkc3RkaW4sICRkYXRhKTsKICAgICAgICAgICAgICAgICAgICAkZGF0YSA9IHN1YnN0cigkZGF0YSwgJHdyaXR0ZW4pOwogICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkZGF0YVswXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmlucHV0QnVmZmVyID0gJGRhdGE7CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyR0aGlzLT5waXBlc1swXV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGZlb2YoJGlucHV0KSkgewogICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+aW5wdXQgaW5zdGFuY2VvZiBcSXRlcmF0b3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmlucHV0LT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmlucHV0ID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIG5vIGlucHV0IHRvIHJlYWQgb24gcmVzb3VyY2UsIGJ1ZmZlciBpcyBlbXB0eQogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmlucHV0QnVmZmVyWzBdKSAmJiAhKCR0aGlzLT5pbnB1dCBpbnN0YW5jZW9mIFxJdGVyYXRvciA/ICR0aGlzLT5pbnB1dC0+dmFsaWQoKSA6ICR0aGlzLT5pbnB1dCkpIHsKICAgICAgICAgICAgJHRoaXMtPmlucHV0ID0gbnVsbDsKICAgICAgICAgICAgZmNsb3NlKCR0aGlzLT5waXBlc1swXSk7CiAgICAgICAgICAgIHVuc2V0KCR0aGlzLT5waXBlc1swXSk7CiAgICAgICAgfSBlbHNlaWYgKCEkdykgewogICAgICAgICAgICByZXR1cm4gWyR0aGlzLT5waXBlc1swXV07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFuZGxlRXJyb3IoaW50ICR0eXBlLCBzdHJpbmcgJG1zZykKICAgIHsKICAgICAgICAkdGhpcy0+bGFzdEVycm9yID0gJG1zZzsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/Pipes/PipesInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXFBpcGVzOwoKLyoqCiAqIFBpcGVzSW50ZXJmYWNlIG1hbmFnZXMgZGVzY3JpcHRvcnMgYW5kIHBpcGVzIGZvciB0aGUgdXNlIG9mIHByb2Nfb3Blbi4KICoKICogQGF1dGhvciBSb21haW4gTmV1dHJvbiA8aW1wcmVjQGdtYWlsLmNvbT4KICoKICogQGludGVybmFsCiAqLwppbnRlcmZhY2UgUGlwZXNJbnRlcmZhY2UKewogICAgcHVibGljIGNvbnN0IENIVU5LX1NJWkUgPSAxNjM4NDsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgZGVzY3JpcHRvcnMgZm9yIHRoZSB1c2Ugb2YgcHJvY19vcGVuLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGVzY3JpcHRvcnMoKTogYXJyYXk7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGZpbGVuYW1lcyBpbmRleGVkIGJ5IHRoZWlyIHJlbGF0ZWQgc3RyZWFtIGluIGNhc2UgdGhlc2UgcGlwZXMgdXNlIHRlbXBvcmFyeSBmaWxlcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGaWxlcygpOiBhcnJheTsKCiAgICAvKioKICAgICAqIFJlYWRzIGRhdGEgaW4gZmlsZSBoYW5kbGVzIGFuZCBwaXBlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkYmxvY2tpbmcgV2hldGhlciB0byB1c2UgYmxvY2tpbmcgY2FsbHMgb3Igbm90CiAgICAgKiBAcGFyYW0gYm9vbCAkY2xvc2UgICAgV2hldGhlciB0byBjbG9zZSBwaXBlcyBpZiB0aGV5J3ZlIHJlYWNoZWQgRU9GCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmdbXSBBbiBhcnJheSBvZiByZWFkIGRhdGEgaW5kZXhlZCBieSB0aGVpciBmZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVhZEFuZFdyaXRlKGJvb2wgJGJsb2NraW5nLCBib29sICRjbG9zZSA9IGZhbHNlKTogYXJyYXk7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGlmIHRoZSBjdXJyZW50IHN0YXRlIGhhcyBvcGVuIGZpbGUgaGFuZGxlcyBvciBwaXBlcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFyZU9wZW4oKTogYm9vbDsKCiAgICAvKioKICAgICAqIFJldHVybnMgaWYgcGlwZXMgYXJlIGFibGUgdG8gcmVhZCBvdXRwdXQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXZlUmVhZFN1cHBvcnQoKTogYm9vbDsKCiAgICAvKioKICAgICAqIENsb3NlcyBmaWxlIGhhbmRsZXMgYW5kIHBpcGVzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/Pipes/UnixPipes.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXFBpcGVzOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcUHJvY2VzczsKCi8qKgogKiBVbml4UGlwZXMgaW1wbGVtZW50YXRpb24gdXNlcyB1bml4IHBpcGVzIGFzIGhhbmRsZXMuCiAqCiAqIEBhdXRob3IgUm9tYWluIE5ldXRyb24gPGltcHJlY0BnbWFpbC5jb20+CiAqCiAqIEBpbnRlcm5hbAogKi8KY2xhc3MgVW5peFBpcGVzIGV4dGVuZHMgQWJzdHJhY3RQaXBlcwp7CiAgICBwcml2YXRlICR0dHlNb2RlOwogICAgcHJpdmF0ZSAkcHR5TW9kZTsKICAgIHByaXZhdGUgJGhhdmVSZWFkU3VwcG9ydDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoP2Jvb2wgJHR0eU1vZGUsIGJvb2wgJHB0eU1vZGUsICRpbnB1dCwgYm9vbCAkaGF2ZVJlYWRTdXBwb3J0KQogICAgewogICAgICAgICR0aGlzLT50dHlNb2RlID0gJHR0eU1vZGU7CiAgICAgICAgJHRoaXMtPnB0eU1vZGUgPSAkcHR5TW9kZTsKICAgICAgICAkdGhpcy0+aGF2ZVJlYWRTdXBwb3J0ID0gJGhhdmVSZWFkU3VwcG9ydDsKCiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkaW5wdXQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3NsZWVwKCk6IGFycmF5CiAgICB7CiAgICAgICAgdGhyb3cgbmV3IFxCYWRNZXRob2RDYWxsRXhjZXB0aW9uKCdDYW5ub3Qgc2VyaWFsaXplICcuX19DTEFTU19fKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX193YWtldXAoKQogICAgewogICAgICAgIHRocm93IG5ldyBcQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbignQ2Fubm90IHVuc2VyaWFsaXplICcuX19DTEFTU19fKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19kZXN0cnVjdCgpCiAgICB7CiAgICAgICAgJHRoaXMtPmNsb3NlKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREZXNjcmlwdG9ycygpOiBhcnJheQogICAgewogICAgICAgIGlmICghJHRoaXMtPmhhdmVSZWFkU3VwcG9ydCkgewogICAgICAgICAgICAkbnVsbHN0cmVhbSA9IGZvcGVuKCcvZGV2L251bGwnLCAnYycpOwoKICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgIFsncGlwZScsICdyJ10sCiAgICAgICAgICAgICAgICAkbnVsbHN0cmVhbSwKICAgICAgICAgICAgICAgICRudWxsc3RyZWFtLAogICAgICAgICAgICBdOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT50dHlNb2RlKSB7CiAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgICBbJ2ZpbGUnLCAnL2Rldi90dHknLCAnciddLAogICAgICAgICAgICAgICAgWydmaWxlJywgJy9kZXYvdHR5JywgJ3cnXSwKICAgICAgICAgICAgICAgIFsnZmlsZScsICcvZGV2L3R0eScsICd3J10sCiAgICAgICAgICAgIF07CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoaXMtPnB0eU1vZGUgJiYgUHJvY2Vzczo6aXNQdHlTdXBwb3J0ZWQoKSkgewogICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgWydwdHknXSwKICAgICAgICAgICAgICAgIFsncHR5J10sCiAgICAgICAgICAgICAgICBbJ3B0eSddLAogICAgICAgICAgICBdOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgWydwaXBlJywgJ3InXSwKICAgICAgICAgICAgWydwaXBlJywgJ3cnXSwgLy8gc3Rkb3V0CiAgICAgICAgICAgIFsncGlwZScsICd3J10sIC8vIHN0ZGVycgogICAgICAgIF07CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGaWxlcygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbXTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlYWRBbmRXcml0ZShib29sICRibG9ja2luZywgYm9vbCAkY2xvc2UgPSBmYWxzZSk6IGFycmF5CiAgICB7CiAgICAgICAgJHRoaXMtPnVuYmxvY2soKTsKICAgICAgICAkdyA9ICR0aGlzLT53cml0ZSgpOwoKICAgICAgICAkcmVhZCA9ICRlID0gW107CiAgICAgICAgJHIgPSAkdGhpcy0+cGlwZXM7CiAgICAgICAgdW5zZXQoJHJbMF0pOwoKICAgICAgICAvLyBsZXQncyBoYXZlIGEgbG9vayBpZiBzb21ldGhpbmcgY2hhbmdlZCBpbiBzdHJlYW1zCiAgICAgICAgc2V0X2Vycm9yX2hhbmRsZXIoWyR0aGlzLCAnaGFuZGxlRXJyb3InXSk7CiAgICAgICAgaWYgKCgkciB8fCAkdykgJiYgZmFsc2UgPT09IHN0cmVhbV9zZWxlY3QoJHIsICR3LCAkZSwgMCwgJGJsb2NraW5nID8gUHJvY2Vzczo6VElNRU9VVF9QUkVDSVNJT04gKiAxRTYgOiAwKSkgewogICAgICAgICAgICByZXN0b3JlX2Vycm9yX2hhbmRsZXIoKTsKICAgICAgICAgICAgLy8gaWYgYSBzeXN0ZW0gY2FsbCBoYXMgYmVlbiBpbnRlcnJ1cHRlZCwgZm9yZ2V0IGFib3V0IGl0LCBsZXQncyB0cnkgYWdhaW4KICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCBhbiBlcnJvciBvY2N1cnJlZCwgbGV0J3MgcmVzZXQgcGlwZXMKICAgICAgICAgICAgaWYgKCEkdGhpcy0+aGFzU3lzdGVtQ2FsbEJlZW5JbnRlcnJ1cHRlZCgpKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+cGlwZXMgPSBbXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICRyZWFkOwogICAgICAgIH0KICAgICAgICByZXN0b3JlX2Vycm9yX2hhbmRsZXIoKTsKCiAgICAgICAgZm9yZWFjaCAoJHIgYXMgJHBpcGUpIHsKICAgICAgICAgICAgLy8gcHJpb3IgUEhQIDUuNCB0aGUgYXJyYXkgcGFzc2VkIHRvIHN0cmVhbV9zZWxlY3QgaXMgbW9kaWZpZWQgYW5kCiAgICAgICAgICAgIC8vIGxvc2Uga2V5IGFzc29jaWF0aW9uLCB3ZSBoYXZlIHRvIGZpbmQgYmFjayB0aGUga2V5CiAgICAgICAgICAgICRyZWFkWyR0eXBlID0gYXJyYXlfc2VhcmNoKCRwaXBlLCAkdGhpcy0+cGlwZXMsIHRydWUpXSA9ICcnOwoKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgJGRhdGEgPSBAZnJlYWQoJHBpcGUsIHNlbGY6OkNIVU5LX1NJWkUpOwogICAgICAgICAgICAgICAgJHJlYWRbJHR5cGVdIC49ICRkYXRhOwogICAgICAgICAgICB9IHdoaWxlIChpc3NldCgkZGF0YVswXSkgJiYgKCRjbG9zZSB8fCBpc3NldCgkZGF0YVtzZWxmOjpDSFVOS19TSVpFIC0gMV0pKSk7CgogICAgICAgICAgICBpZiAoIWlzc2V0KCRyZWFkWyR0eXBlXVswXSkpIHsKICAgICAgICAgICAgICAgIHVuc2V0KCRyZWFkWyR0eXBlXSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkY2xvc2UgJiYgZmVvZigkcGlwZSkpIHsKICAgICAgICAgICAgICAgIGZjbG9zZSgkcGlwZSk7CiAgICAgICAgICAgICAgICB1bnNldCgkdGhpcy0+cGlwZXNbJHR5cGVdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZWFkOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGF2ZVJlYWRTdXBwb3J0KCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmhhdmVSZWFkU3VwcG9ydDsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFyZU9wZW4oKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAoYm9vbCkgJHRoaXMtPnBpcGVzOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/Pipes/WindowsPipes.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXFBpcGVzOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb247CnVzZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXFByb2Nlc3M7CgovKioKICogV2luZG93c1BpcGVzIGltcGxlbWVudGF0aW9uIHVzZXMgdGVtcG9yYXJ5IGZpbGVzIGFzIGhhbmRsZXMuCiAqCiAqIEBzZWUgaHR0cHM6Ly9idWdzLnBocC5uZXQvNTE4MDAKICogQHNlZSBodHRwczovL2J1Z3MucGhwLm5ldC82NTY1MAogKgogKiBAYXV0aG9yIFJvbWFpbiBOZXV0cm9uIDxpbXByZWNAZ21haWwuY29tPgogKgogKiBAaW50ZXJuYWwKICovCmNsYXNzIFdpbmRvd3NQaXBlcyBleHRlbmRzIEFic3RyYWN0UGlwZXMKewogICAgcHJpdmF0ZSAkZmlsZXMgPSBbXTsKICAgIHByaXZhdGUgJGZpbGVIYW5kbGVzID0gW107CiAgICBwcml2YXRlICRsb2NrSGFuZGxlcyA9IFtdOwogICAgcHJpdmF0ZSAkcmVhZEJ5dGVzID0gWwogICAgICAgIFByb2Nlc3M6OlNURE9VVCA9PiAwLAogICAgICAgIFByb2Nlc3M6OlNUREVSUiA9PiAwLAogICAgXTsKICAgIHByaXZhdGUgJGhhdmVSZWFkU3VwcG9ydDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGlucHV0LCBib29sICRoYXZlUmVhZFN1cHBvcnQpCiAgICB7CiAgICAgICAgJHRoaXMtPmhhdmVSZWFkU3VwcG9ydCA9ICRoYXZlUmVhZFN1cHBvcnQ7CgogICAgICAgIGlmICgkdGhpcy0+aGF2ZVJlYWRTdXBwb3J0KSB7CiAgICAgICAgICAgIC8vIEZpeCBmb3IgUEhQIGJ1ZyAjNTE4MDA6IHJlYWRpbmcgZnJvbSBTVERPVVQgcGlwZSBoYW5ncyBmb3JldmVyIG9uIFdpbmRvd3MgaWYgdGhlIG91dHB1dCBpcyB0b28gYmlnLgogICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciB0aGlzIHByb2JsZW0gaXMgdG8gdXNlIHRlbXBvcmFyeSBmaWxlcyBpbnN0ZWFkIG9mIHBpcGVzIG9uIFdpbmRvd3MgcGxhdGZvcm0uCiAgICAgICAgICAgIC8vCiAgICAgICAgICAgIC8vIEBzZWUgaHR0cHM6Ly9idWdzLnBocC5uZXQvNTE4MDAKICAgICAgICAgICAgJHBpcGVzID0gWwogICAgICAgICAgICAgICAgUHJvY2Vzczo6U1RET1VUID0+IFByb2Nlc3M6Ok9VVCwKICAgICAgICAgICAgICAgIFByb2Nlc3M6OlNUREVSUiA9PiBQcm9jZXNzOjpFUlIsCiAgICAgICAgICAgIF07CiAgICAgICAgICAgICR0bXBEaXIgPSBzeXNfZ2V0X3RlbXBfZGlyKCk7CiAgICAgICAgICAgICRsYXN0RXJyb3IgPSAndW5rbm93biByZWFzb24nOwogICAgICAgICAgICBzZXRfZXJyb3JfaGFuZGxlcihmdW5jdGlvbiAoJHR5cGUsICRtc2cpIHVzZSAoJiRsYXN0RXJyb3IpIHsgJGxhc3RFcnJvciA9ICRtc2c7IH0pOwogICAgICAgICAgICBmb3IgKCRpID0gMDs7ICsrJGkpIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwaXBlcyBhcyAkcGlwZSA9PiAkbmFtZSkgewogICAgICAgICAgICAgICAgICAgICRmaWxlID0gc3ByaW50ZignJXNcXHNmX3Byb2NfJTAyWC4lcycsICR0bXBEaXIsICRpLCAkbmFtZSk7CgogICAgICAgICAgICAgICAgICAgIGlmICghJGggPSBmb3BlbigkZmlsZS4nLmxvY2snLCAndycpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZmlsZS4nLmxvY2snKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgMjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICByZXN0b3JlX2Vycm9yX2hhbmRsZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oJ0EgdGVtcG9yYXJ5IGZpbGUgY291bGQgbm90IGJlIG9wZW5lZCB0byB3cml0ZSB0aGUgcHJvY2VzcyBvdXRwdXQ6ICcuJGxhc3RFcnJvcik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICghZmxvY2soJGgsIFxMT0NLX0VYIHwgXExPQ0tfTkIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIDI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkdGhpcy0+bG9ja0hhbmRsZXNbJHBpcGVdKSkgewogICAgICAgICAgICAgICAgICAgICAgICBmbG9jaygkdGhpcy0+bG9ja0hhbmRsZXNbJHBpcGVdLCBcTE9DS19VTik7CiAgICAgICAgICAgICAgICAgICAgICAgIGZjbG9zZSgkdGhpcy0+bG9ja0hhbmRsZXNbJHBpcGVdKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmxvY2tIYW5kbGVzWyRwaXBlXSA9ICRoOwoKICAgICAgICAgICAgICAgICAgICBpZiAoISgkaCA9IGZvcGVuKCRmaWxlLCAndycpKSB8fCAhZmNsb3NlKCRoKSB8fCAhJGggPSBmb3BlbigkZmlsZSwgJ3InKSkgewogICAgICAgICAgICAgICAgICAgICAgICBmbG9jaygkdGhpcy0+bG9ja0hhbmRsZXNbJHBpcGVdLCBcTE9DS19VTik7CiAgICAgICAgICAgICAgICAgICAgICAgIGZjbG9zZSgkdGhpcy0+bG9ja0hhbmRsZXNbJHBpcGVdKTsKICAgICAgICAgICAgICAgICAgICAgICAgdW5zZXQoJHRoaXMtPmxvY2tIYW5kbGVzWyRwaXBlXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIDI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5maWxlSGFuZGxlc1skcGlwZV0gPSAkaDsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmlsZXNbJHBpcGVdID0gJGZpbGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXN0b3JlX2Vycm9yX2hhbmRsZXIoKTsKICAgICAgICB9CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJGlucHV0KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zbGVlcCgpOiBhcnJheQogICAgewogICAgICAgIHRocm93IG5ldyBcQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbignQ2Fubm90IHNlcmlhbGl6ZSAnLl9fQ0xBU1NfXyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fd2FrZXVwKCkKICAgIHsKICAgICAgICB0aHJvdyBuZXcgXEJhZE1ldGhvZENhbGxFeGNlcHRpb24oJ0Nhbm5vdCB1bnNlcmlhbGl6ZSAnLl9fQ0xBU1NfXyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fZGVzdHJ1Y3QoKQogICAgewogICAgICAgICR0aGlzLT5jbG9zZSgpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGVzY3JpcHRvcnMoKTogYXJyYXkKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5oYXZlUmVhZFN1cHBvcnQpIHsKICAgICAgICAgICAgJG51bGxzdHJlYW0gPSBmb3BlbignTlVMJywgJ2MnKTsKCiAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgICBbJ3BpcGUnLCAnciddLAogICAgICAgICAgICAgICAgJG51bGxzdHJlYW0sCiAgICAgICAgICAgICAgICAkbnVsbHN0cmVhbSwKICAgICAgICAgICAgXTsKICAgICAgICB9CgogICAgICAgIC8vIFdlJ3JlIG5vdCB1c2luZyBwaXBlIG9uIFdpbmRvd3MgcGxhdGZvcm0gYXMgaXQgaGFuZ3MgKGh0dHBzOi8vYnVncy5waHAubmV0LzUxODAwKQogICAgICAgIC8vIFdlJ3JlIG5vdCB1c2luZyBmaWxlIGhhbmRsZXMgYXMgaXQgY2FuIHByb2R1Y2UgY29ycnVwdGVkIG91dHB1dCBodHRwczovL2J1Z3MucGhwLm5ldC82NTY1MAogICAgICAgIC8vIFNvIHdlIHJlZGlyZWN0IG91dHB1dCB3aXRoaW4gdGhlIGNvbW1hbmRsaW5lIGFuZCBwYXNzIHRoZSBudWwgZGV2aWNlIHRvIHRoZSBwcm9jZXNzCiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgWydwaXBlJywgJ3InXSwKICAgICAgICAgICAgWydmaWxlJywgJ05VTCcsICd3J10sCiAgICAgICAgICAgIFsnZmlsZScsICdOVUwnLCAndyddLAogICAgICAgIF07CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGaWxlcygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZmlsZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkQW5kV3JpdGUoYm9vbCAkYmxvY2tpbmcsIGJvb2wgJGNsb3NlID0gZmFsc2UpOiBhcnJheQogICAgewogICAgICAgICR0aGlzLT51bmJsb2NrKCk7CiAgICAgICAgJHcgPSAkdGhpcy0+d3JpdGUoKTsKICAgICAgICAkcmVhZCA9ICRyID0gJGUgPSBbXTsKCiAgICAgICAgaWYgKCRibG9ja2luZykgewogICAgICAgICAgICBpZiAoJHcpIHsKICAgICAgICAgICAgICAgIEBzdHJlYW1fc2VsZWN0KCRyLCAkdywgJGUsIDAsIFByb2Nlc3M6OlRJTUVPVVRfUFJFQ0lTSU9OICogMUU2KTsKICAgICAgICAgICAgfSBlbHNlaWYgKCR0aGlzLT5maWxlSGFuZGxlcykgewogICAgICAgICAgICAgICAgdXNsZWVwKChpbnQpIChQcm9jZXNzOjpUSU1FT1VUX1BSRUNJU0lPTiAqIDFFNikpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5maWxlSGFuZGxlcyBhcyAkdHlwZSA9PiAkZmlsZUhhbmRsZSkgewogICAgICAgICAgICAkZGF0YSA9IHN0cmVhbV9nZXRfY29udGVudHMoJGZpbGVIYW5kbGUsIC0xLCAkdGhpcy0+cmVhZEJ5dGVzWyR0eXBlXSk7CgogICAgICAgICAgICBpZiAoaXNzZXQoJGRhdGFbMF0pKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+cmVhZEJ5dGVzWyR0eXBlXSArPSBcc3RybGVuKCRkYXRhKTsKICAgICAgICAgICAgICAgICRyZWFkWyR0eXBlXSA9ICRkYXRhOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkY2xvc2UpIHsKICAgICAgICAgICAgICAgIGZ0cnVuY2F0ZSgkZmlsZUhhbmRsZSwgMCk7CiAgICAgICAgICAgICAgICBmY2xvc2UoJGZpbGVIYW5kbGUpOwogICAgICAgICAgICAgICAgZmxvY2soJHRoaXMtPmxvY2tIYW5kbGVzWyR0eXBlXSwgXExPQ0tfVU4pOwogICAgICAgICAgICAgICAgZmNsb3NlKCR0aGlzLT5sb2NrSGFuZGxlc1skdHlwZV0pOwogICAgICAgICAgICAgICAgdW5zZXQoJHRoaXMtPmZpbGVIYW5kbGVzWyR0eXBlXSwgJHRoaXMtPmxvY2tIYW5kbGVzWyR0eXBlXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVhZDsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhdmVSZWFkU3VwcG9ydCgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oYXZlUmVhZFN1cHBvcnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhcmVPcGVuKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnBpcGVzICYmICR0aGlzLT5maWxlSGFuZGxlczsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNsb3NlKCkKICAgIHsKICAgICAgICBwYXJlbnQ6OmNsb3NlKCk7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmZpbGVIYW5kbGVzIGFzICR0eXBlID0+ICRoYW5kbGUpIHsKICAgICAgICAgICAgZnRydW5jYXRlKCRoYW5kbGUsIDApOwogICAgICAgICAgICBmY2xvc2UoJGhhbmRsZSk7CiAgICAgICAgICAgIGZsb2NrKCR0aGlzLT5sb2NrSGFuZGxlc1skdHlwZV0sIFxMT0NLX1VOKTsKICAgICAgICAgICAgZmNsb3NlKCR0aGlzLT5sb2NrSGFuZGxlc1skdHlwZV0pOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+ZmlsZUhhbmRsZXMgPSAkdGhpcy0+bG9ja0hhbmRsZXMgPSBbXTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/Process.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcRXhjZXB0aW9uXExvZ2ljRXhjZXB0aW9uOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcUHJvY2Vzc1xFeGNlcHRpb25cUHJvY2Vzc0ZhaWxlZEV4Y2VwdGlvbjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcRXhjZXB0aW9uXFByb2Nlc3NTaWduYWxlZEV4Y2VwdGlvbjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcRXhjZXB0aW9uXFByb2Nlc3NUaW1lZE91dEV4Y2VwdGlvbjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb247CnVzZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXFBpcGVzXFBpcGVzSW50ZXJmYWNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcUHJvY2Vzc1xQaXBlc1xVbml4UGlwZXM7CnVzZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXFBpcGVzXFdpbmRvd3NQaXBlczsKCi8qKgogKiBQcm9jZXNzIGlzIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBwcm9jXyogZnVuY3Rpb25zIHRvIGVhc2lseQogKiBzdGFydCBpbmRlcGVuZGVudCBQSFAgcHJvY2Vzc2VzLgogKgogKiBAYXV0aG9yIEZhYmllbiBQb3RlbmNpZXIgPGZhYmllbkBzeW1mb255LmNvbT4KICogQGF1dGhvciBSb21haW4gTmV1dHJvbiA8aW1wcmVjQGdtYWlsLmNvbT4KICoKICogQGltcGxlbWVudHMgXEl0ZXJhdG9yQWdncmVnYXRlPHN0cmluZywgc3RyaW5nPgogKi8KY2xhc3MgUHJvY2VzcyBpbXBsZW1lbnRzIFxJdGVyYXRvckFnZ3JlZ2F0ZQp7CiAgICBwdWJsaWMgY29uc3QgRVJSID0gJ2Vycic7CiAgICBwdWJsaWMgY29uc3QgT1VUID0gJ291dCc7CgogICAgcHVibGljIGNvbnN0IFNUQVRVU19SRUFEWSA9ICdyZWFkeSc7CiAgICBwdWJsaWMgY29uc3QgU1RBVFVTX1NUQVJURUQgPSAnc3RhcnRlZCc7CiAgICBwdWJsaWMgY29uc3QgU1RBVFVTX1RFUk1JTkFURUQgPSAndGVybWluYXRlZCc7CgogICAgcHVibGljIGNvbnN0IFNURElOID0gMDsKICAgIHB1YmxpYyBjb25zdCBTVERPVVQgPSAxOwogICAgcHVibGljIGNvbnN0IFNUREVSUiA9IDI7CgogICAgLy8gVGltZW91dCBQcmVjaXNpb24gaW4gc2Vjb25kcy4KICAgIHB1YmxpYyBjb25zdCBUSU1FT1VUX1BSRUNJU0lPTiA9IDAuMjsKCiAgICBwdWJsaWMgY29uc3QgSVRFUl9OT05fQkxPQ0tJTkcgPSAxOyAvLyBCeSBkZWZhdWx0LCBpdGVyYXRpbmcgb3ZlciBvdXRwdXRzIGlzIGEgYmxvY2tpbmcgY2FsbCwgdXNlIHRoaXMgZmxhZyB0byBtYWtlIGl0IG5vbi1ibG9ja2luZwogICAgcHVibGljIGNvbnN0IElURVJfS0VFUF9PVVRQVVQgPSAyOyAgLy8gQnkgZGVmYXVsdCwgb3V0cHV0cyBhcmUgY2xlYXJlZCB3aGlsZSBpdGVyYXRpbmcsIHVzZSB0aGlzIGZsYWcgdG8ga2VlcCB0aGVtIGluIG1lbW9yeQogICAgcHVibGljIGNvbnN0IElURVJfU0tJUF9PVVQgPSA0OyAgICAgLy8gVXNlIHRoaXMgZmxhZyB0byBza2lwIFNURE9VVCB3aGlsZSBpdGVyYXRpbmcKICAgIHB1YmxpYyBjb25zdCBJVEVSX1NLSVBfRVJSID0gODsgICAgIC8vIFVzZSB0aGlzIGZsYWcgdG8gc2tpcCBTVERFUlIgd2hpbGUgaXRlcmF0aW5nCgogICAgcHJpdmF0ZSAkY2FsbGJhY2s7CiAgICBwcml2YXRlICRoYXNDYWxsYmFjayA9IGZhbHNlOwogICAgcHJpdmF0ZSAkY29tbWFuZGxpbmU7CiAgICBwcml2YXRlICRjd2Q7CiAgICBwcml2YXRlICRlbnYgPSBbXTsKICAgIHByaXZhdGUgJGlucHV0OwogICAgcHJpdmF0ZSAkc3RhcnR0aW1lOwogICAgcHJpdmF0ZSAkbGFzdE91dHB1dFRpbWU7CiAgICBwcml2YXRlICR0aW1lb3V0OwogICAgcHJpdmF0ZSAkaWRsZVRpbWVvdXQ7CiAgICBwcml2YXRlICRleGl0Y29kZTsKICAgIHByaXZhdGUgJGZhbGxiYWNrU3RhdHVzID0gW107CiAgICBwcml2YXRlICRwcm9jZXNzSW5mb3JtYXRpb247CiAgICBwcml2YXRlICRvdXRwdXREaXNhYmxlZCA9IGZhbHNlOwogICAgcHJpdmF0ZSAkc3Rkb3V0OwogICAgcHJpdmF0ZSAkc3RkZXJyOwogICAgcHJpdmF0ZSAkcHJvY2VzczsKICAgIHByaXZhdGUgJHN0YXR1cyA9IHNlbGY6OlNUQVRVU19SRUFEWTsKICAgIHByaXZhdGUgJGluY3JlbWVudGFsT3V0cHV0T2Zmc2V0ID0gMDsKICAgIHByaXZhdGUgJGluY3JlbWVudGFsRXJyb3JPdXRwdXRPZmZzZXQgPSAwOwogICAgcHJpdmF0ZSAkdHR5ID0gZmFsc2U7CiAgICBwcml2YXRlICRwdHk7CiAgICBwcml2YXRlICRvcHRpb25zID0gWydzdXBwcmVzc19lcnJvcnMnID0+IHRydWUsICdieXBhc3Nfc2hlbGwnID0+IHRydWVdOwoKICAgIHByaXZhdGUgJHVzZUZpbGVIYW5kbGVzID0gZmFsc2U7CiAgICAvKiogQHZhciBQaXBlc0ludGVyZmFjZSAqLwogICAgcHJpdmF0ZSAkcHJvY2Vzc1BpcGVzOwoKICAgIHByaXZhdGUgJGxhdGVzdFNpZ25hbDsKICAgIHByaXZhdGUgJGNhY2hlZEV4aXRDb2RlOwoKICAgIHByaXZhdGUgc3RhdGljICRzaWdjaGlsZDsKCiAgICAvKioKICAgICAqIEV4aXQgY29kZXMgdHJhbnNsYXRpb24gdGFibGUuCiAgICAgKgogICAgICogVXNlci1kZWZpbmVkIGVycm9ycyBtdXN0IHVzZSBleGl0IGNvZGVzIGluIHRoZSA2NC0xMTMgcmFuZ2UuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgJGV4aXRDb2RlcyA9IFsKICAgICAgICAwID0+ICdPSycsCiAgICAgICAgMSA9PiAnR2VuZXJhbCBlcnJvcicsCiAgICAgICAgMiA9PiAnTWlzdXNlIG9mIHNoZWxsIGJ1aWx0aW5zJywKCiAgICAgICAgMTI2ID0+ICdJbnZva2VkIGNvbW1hbmQgY2Fubm90IGV4ZWN1dGUnLAogICAgICAgIDEyNyA9PiAnQ29tbWFuZCBub3QgZm91bmQnLAogICAgICAgIDEyOCA9PiAnSW52YWxpZCBleGl0IGFyZ3VtZW50JywKCiAgICAgICAgLy8gc2lnbmFscwogICAgICAgIDEyOSA9PiAnSGFuZ3VwJywKICAgICAgICAxMzAgPT4gJ0ludGVycnVwdCcsCiAgICAgICAgMTMxID0+ICdRdWl0IGFuZCBkdW1wIGNvcmUnLAogICAgICAgIDEzMiA9PiAnSWxsZWdhbCBpbnN0cnVjdGlvbicsCiAgICAgICAgMTMzID0+ICdUcmFjZS9icmVha3BvaW50IHRyYXAnLAogICAgICAgIDEzNCA9PiAnUHJvY2VzcyBhYm9ydGVkJywKICAgICAgICAxMzUgPT4gJ0J1cyBlcnJvcjogImFjY2VzcyB0byB1bmRlZmluZWQgcG9ydGlvbiBvZiBtZW1vcnkgb2JqZWN0IicsCiAgICAgICAgMTM2ID0+ICdGbG9hdGluZyBwb2ludCBleGNlcHRpb246ICJlcnJvbmVvdXMgYXJpdGhtZXRpYyBvcGVyYXRpb24iJywKICAgICAgICAxMzcgPT4gJ0tpbGwgKHRlcm1pbmF0ZSBpbW1lZGlhdGVseSknLAogICAgICAgIDEzOCA9PiAnVXNlci1kZWZpbmVkIDEnLAogICAgICAgIDEzOSA9PiAnU2VnbWVudGF0aW9uIHZpb2xhdGlvbicsCiAgICAgICAgMTQwID0+ICdVc2VyLWRlZmluZWQgMicsCiAgICAgICAgMTQxID0+ICdXcml0ZSB0byBwaXBlIHdpdGggbm8gb25lIHJlYWRpbmcnLAogICAgICAgIDE0MiA9PiAnU2lnbmFsIHJhaXNlZCBieSBhbGFybScsCiAgICAgICAgMTQzID0+ICdUZXJtaW5hdGlvbiAocmVxdWVzdCB0byB0ZXJtaW5hdGUpJywKICAgICAgICAvLyAxNDQgLSBub3QgZGVmaW5lZAogICAgICAgIDE0NSA9PiAnQ2hpbGQgcHJvY2VzcyB0ZXJtaW5hdGVkLCBzdG9wcGVkIChvciBjb250aW51ZWQqKScsCiAgICAgICAgMTQ2ID0+ICdDb250aW51ZSBpZiBzdG9wcGVkJywKICAgICAgICAxNDcgPT4gJ1N0b3AgZXhlY3V0aW5nIHRlbXBvcmFyaWx5JywKICAgICAgICAxNDggPT4gJ1Rlcm1pbmFsIHN0b3Agc2lnbmFsJywKICAgICAgICAxNDkgPT4gJ0JhY2tncm91bmQgcHJvY2VzcyBhdHRlbXB0aW5nIHRvIHJlYWQgZnJvbSB0dHkgKCJpbiIpJywKICAgICAgICAxNTAgPT4gJ0JhY2tncm91bmQgcHJvY2VzcyBhdHRlbXB0aW5nIHRvIHdyaXRlIHRvIHR0eSAoIm91dCIpJywKICAgICAgICAxNTEgPT4gJ1VyZ2VudCBkYXRhIGF2YWlsYWJsZSBvbiBzb2NrZXQnLAogICAgICAgIDE1MiA9PiAnQ1BVIHRpbWUgbGltaXQgZXhjZWVkZWQnLAogICAgICAgIDE1MyA9PiAnRmlsZSBzaXplIGxpbWl0IGV4Y2VlZGVkJywKICAgICAgICAxNTQgPT4gJ1NpZ25hbCByYWlzZWQgYnkgdGltZXIgY291bnRpbmcgdmlydHVhbCB0aW1lOiAidmlydHVhbCB0aW1lciBleHBpcmVkIicsCiAgICAgICAgMTU1ID0+ICdQcm9maWxpbmcgdGltZXIgZXhwaXJlZCcsCiAgICAgICAgLy8gMTU2IC0gbm90IGRlZmluZWQKICAgICAgICAxNTcgPT4gJ1BvbGxhYmxlIGV2ZW50JywKICAgICAgICAvLyAxNTggLSBub3QgZGVmaW5lZAogICAgICAgIDE1OSA9PiAnQmFkIHN5c2NhbGwnLAogICAgXTsKCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAkY29tbWFuZCBUaGUgY29tbWFuZCB0byBydW4gYW5kIGl0cyBhcmd1bWVudHMgbGlzdGVkIGFzIHNlcGFyYXRlIGVudHJpZXMKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAgICAkY3dkICAgICBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb3IgbnVsbCB0byB1c2UgdGhlIHdvcmtpbmcgZGlyIG9mIHRoZSBjdXJyZW50IFBIUCBwcm9jZXNzCiAgICAgKiBAcGFyYW0gYXJyYXl8bnVsbCAgICAgJGVudiAgICAgVGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBvciBudWxsIHRvIHVzZSB0aGUgc2FtZSBlbnZpcm9ubWVudCBhcyB0aGUgY3VycmVudCBQSFAgcHJvY2VzcwogICAgICogQHBhcmFtIG1peGVkICAgICAgICAgICRpbnB1dCAgIFRoZSBpbnB1dCBhcyBzdHJlYW0gcmVzb3VyY2UsIHNjYWxhciBvciBcVHJhdmVyc2FibGUsIG9yIG51bGwgZm9yIG5vIGlucHV0CiAgICAgKiBAcGFyYW0gaW50fGZsb2F0fG51bGwgJHRpbWVvdXQgVGhlIHRpbWVvdXQgaW4gc2Vjb25kcyBvciBudWxsIHRvIGRpc2FibGUKICAgICAqCiAgICAgKiBAdGhyb3dzIExvZ2ljRXhjZXB0aW9uIFdoZW4gcHJvY19vcGVuIGlzIG5vdCBpbnN0YWxsZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRjb21tYW5kLCA/c3RyaW5nICRjd2QgPSBudWxsLCA/YXJyYXkgJGVudiA9IG51bGwsICRpbnB1dCA9IG51bGwsID9mbG9hdCAkdGltZW91dCA9IDYwKQogICAgewogICAgICAgIGlmICghXGZ1bmN0aW9uX2V4aXN0cygncHJvY19vcGVuJykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IExvZ2ljRXhjZXB0aW9uKCdUaGUgUHJvY2VzcyBjbGFzcyByZWxpZXMgb24gcHJvY19vcGVuLCB3aGljaCBpcyBub3QgYXZhaWxhYmxlIG9uIHlvdXIgUEhQIGluc3RhbGxhdGlvbi4nKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5jb21tYW5kbGluZSA9ICRjb21tYW5kOwogICAgICAgICR0aGlzLT5jd2QgPSAkY3dkOwoKICAgICAgICAvLyBvbiBXaW5kb3dzLCBpZiB0aGUgY3dkIGNoYW5nZWQgdmlhIGNoZGlyKCksIHByb2Nfb3BlbiBkZWZhdWx0cyB0byB0aGUgZGlyIHdoZXJlIFBIUCB3YXMgc3RhcnRlZAogICAgICAgIC8vIG9uIEdudS9MaW51eCwgUEhQIGJ1aWxkcyB3aXRoIC0tZW5hYmxlLW1haW50YWluZXItenRzIGFyZSBhbHNvIGFmZmVjdGVkCiAgICAgICAgLy8gQHNlZSA6IGh0dHBzOi8vYnVncy5waHAubmV0LzUxODAwCiAgICAgICAgLy8gQHNlZSA6IGh0dHBzOi8vYnVncy5waHAubmV0LzUwNTI0CiAgICAgICAgaWYgKG51bGwgPT09ICR0aGlzLT5jd2QgJiYgKFxkZWZpbmVkKCdaRU5EX1RIUkVBRF9TQUZFJykgfHwgJ1xcJyA9PT0gXERJUkVDVE9SWV9TRVBBUkFUT1IpKSB7CiAgICAgICAgICAgICR0aGlzLT5jd2QgPSBnZXRjd2QoKTsKICAgICAgICB9CiAgICAgICAgaWYgKG51bGwgIT09ICRlbnYpIHsKICAgICAgICAgICAgJHRoaXMtPnNldEVudigkZW52KTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5zZXRJbnB1dCgkaW5wdXQpOwogICAgICAgICR0aGlzLT5zZXRUaW1lb3V0KCR0aW1lb3V0KTsKICAgICAgICAkdGhpcy0+dXNlRmlsZUhhbmRsZXMgPSAnXFwnID09PSBcRElSRUNUT1JZX1NFUEFSQVRPUjsKICAgICAgICAkdGhpcy0+cHR5ID0gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgUHJvY2VzcyBpbnN0YW5jZSBhcyBhIGNvbW1hbmQtbGluZSB0byBiZSBydW4gaW4gYSBzaGVsbCB3cmFwcGVyLgogICAgICoKICAgICAqIENvbW1hbmQtbGluZXMgYXJlIHBhcnNlZCBieSB0aGUgc2hlbGwgb2YgeW91ciBPUyAoL2Jpbi9zaCBvbiBVbml4LWxpa2UsIGNtZC5leGUgb24gV2luZG93cy4pCiAgICAgKiBUaGlzIGFsbG93cyB1c2luZyBlLmcuIHBpcGVzIG9yIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbi4gSW4gdGhpcyBtb2RlLCBzaWduYWxzIGFyZSBzZW50IHRvIHRoZQogICAgICogc2hlbGwgd3JhcHBlciBhbmQgbm90IHRvIHlvdXIgY29tbWFuZHMuCiAgICAgKgogICAgICogSW4gb3JkZXIgdG8gaW5qZWN0IGR5bmFtaWMgdmFsdWVzIGludG8gY29tbWFuZC1saW5lcywgd2Ugc3Ryb25nbHkgcmVjb21tZW5kIHVzaW5nIHBsYWNlaG9sZGVycy4KICAgICAqIFRoaXMgd2lsbCBzYXZlIGVzY2FwaW5nIHZhbHVlcywgd2hpY2ggaXMgbm90IHBvcnRhYmxlIG5vciBzZWN1cmUgYW55d2F5OgogICAgICoKICAgICAqICAgJHByb2Nlc3MgPSBQcm9jZXNzOjpmcm9tU2hlbGxDb21tYW5kbGluZSgnbXlfY29tbWFuZCAiJHs6TVlfVkFSfSInKTsKICAgICAqICAgJHByb2Nlc3MtPnJ1bihudWxsLCBbJ01ZX1ZBUicgPT4gJHRoZVZhbHVlXSk7CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICRjb21tYW5kIFRoZSBjb21tYW5kIGxpbmUgdG8gcGFzcyB0byB0aGUgc2hlbGwgb2YgdGhlIE9TCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgICAgJGN3ZCAgICAgVGhlIHdvcmtpbmcgZGlyZWN0b3J5IG9yIG51bGwgdG8gdXNlIHRoZSB3b3JraW5nIGRpciBvZiB0aGUgY3VycmVudCBQSFAgcHJvY2VzcwogICAgICogQHBhcmFtIGFycmF5fG51bGwgICAgICRlbnYgICAgIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb3IgbnVsbCB0byB1c2UgdGhlIHNhbWUgZW52aXJvbm1lbnQgYXMgdGhlIGN1cnJlbnQgUEhQIHByb2Nlc3MKICAgICAqIEBwYXJhbSBtaXhlZCAgICAgICAgICAkaW5wdXQgICBUaGUgaW5wdXQgYXMgc3RyZWFtIHJlc291cmNlLCBzY2FsYXIgb3IgXFRyYXZlcnNhYmxlLCBvciBudWxsIGZvciBubyBpbnB1dAogICAgICogQHBhcmFtIGludHxmbG9hdHxudWxsICR0aW1lb3V0IFRoZSB0aW1lb3V0IGluIHNlY29uZHMgb3IgbnVsbCB0byBkaXNhYmxlCiAgICAgKgogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqCiAgICAgKiBAdGhyb3dzIExvZ2ljRXhjZXB0aW9uIFdoZW4gcHJvY19vcGVuIGlzIG5vdCBpbnN0YWxsZWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tU2hlbGxDb21tYW5kbGluZShzdHJpbmcgJGNvbW1hbmQsID9zdHJpbmcgJGN3ZCA9IG51bGwsID9hcnJheSAkZW52ID0gbnVsbCwgJGlucHV0ID0gbnVsbCwgP2Zsb2F0ICR0aW1lb3V0ID0gNjApCiAgICB7CiAgICAgICAgJHByb2Nlc3MgPSBuZXcgc3RhdGljKFtdLCAkY3dkLCAkZW52LCAkaW5wdXQsICR0aW1lb3V0KTsKICAgICAgICAkcHJvY2Vzcy0+Y29tbWFuZGxpbmUgPSAkY29tbWFuZDsKCiAgICAgICAgcmV0dXJuICRwcm9jZXNzOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zbGVlcCgpCiAgICB7CiAgICAgICAgdGhyb3cgbmV3IFxCYWRNZXRob2RDYWxsRXhjZXB0aW9uKCdDYW5ub3Qgc2VyaWFsaXplICcuX19DTEFTU19fKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX193YWtldXAoKQogICAgewogICAgICAgIHRocm93IG5ldyBcQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbignQ2Fubm90IHVuc2VyaWFsaXplICcuX19DTEFTU19fKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19kZXN0cnVjdCgpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5vcHRpb25zWydjcmVhdGVfbmV3X2NvbnNvbGUnXSA/PyBmYWxzZSkgewogICAgICAgICAgICAkdGhpcy0+cHJvY2Vzc1BpcGVzLT5jbG9zZSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5zdG9wKDApOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jbG9uZSgpCiAgICB7CiAgICAgICAgJHRoaXMtPnJlc2V0UHJvY2Vzc0RhdGEoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJ1bnMgdGhlIHByb2Nlc3MuCiAgICAgKgogICAgICogVGhlIGNhbGxiYWNrIHJlY2VpdmVzIHRoZSB0eXBlIG9mIG91dHB1dCAob3V0IG9yIGVycikgYW5kCiAgICAgKiBzb21lIGJ5dGVzIGZyb20gdGhlIG91dHB1dCBpbiByZWFsLXRpbWUuIEl0IGFsbG93cyB0byBoYXZlIGZlZWRiYWNrCiAgICAgKiBmcm9tIHRoZSBpbmRlcGVuZGVudCBwcm9jZXNzIGR1cmluZyBleGVjdXRpb24uCiAgICAgKgogICAgICogVGhlIFNURE9VVCBhbmQgU1RERVJSIGFyZSBhbHNvIGF2YWlsYWJsZSBhZnRlciB0aGUgcHJvY2VzcyBpcyBmaW5pc2hlZAogICAgICogdmlhIHRoZSBnZXRPdXRwdXQoKSBhbmQgZ2V0RXJyb3JPdXRwdXQoKSBtZXRob2RzLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZXxudWxsICRjYWxsYmFjayBBIFBIUCBjYWxsYmFjayB0byBydW4gd2hlbmV2ZXIgdGhlcmUgaXMgc29tZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBhdmFpbGFibGUgb24gU1RET1VUIG9yIFNUREVSUgogICAgICoKICAgICAqIEByZXR1cm4gaW50IFRoZSBleGl0IHN0YXR1cyBjb2RlCiAgICAgKgogICAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uICAgICAgICAgV2hlbiBwcm9jZXNzIGNhbid0IGJlIGxhdW5jaGVkCiAgICAgKiBAdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gICAgICAgICBXaGVuIHByb2Nlc3MgaXMgYWxyZWFkeSBydW5uaW5nCiAgICAgKiBAdGhyb3dzIFByb2Nlc3NUaW1lZE91dEV4Y2VwdGlvbiBXaGVuIHByb2Nlc3MgdGltZWQgb3V0CiAgICAgKiBAdGhyb3dzIFByb2Nlc3NTaWduYWxlZEV4Y2VwdGlvbiBXaGVuIHByb2Nlc3Mgc3RvcHBlZCBhZnRlciByZWNlaXZpbmcgc2lnbmFsCiAgICAgKiBAdGhyb3dzIExvZ2ljRXhjZXB0aW9uICAgICAgICAgICBJbiBjYXNlIGEgY2FsbGJhY2sgaXMgcHJvdmlkZWQgYW5kIG91dHB1dCBoYXMgYmVlbiBkaXNhYmxlZAogICAgICoKICAgICAqIEBmaW5hbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcnVuKD9jYWxsYWJsZSAkY2FsbGJhY2sgPSBudWxsLCBhcnJheSAkZW52ID0gW10pOiBpbnQKICAgIHsKICAgICAgICAkdGhpcy0+c3RhcnQoJGNhbGxiYWNrLCAkZW52KTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT53YWl0KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSdW5zIHRoZSBwcm9jZXNzLgogICAgICoKICAgICAqIFRoaXMgaXMgaWRlbnRpY2FsIHRvIHJ1bigpIGV4Y2VwdCB0aGF0IGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gaWYgdGhlIHByb2Nlc3MKICAgICAqIGV4aXRzIHdpdGggYSBub24temVybyBleGl0IGNvZGUuCiAgICAgKgogICAgICogQHJldHVybiAkdGhpcwogICAgICoKICAgICAqIEB0aHJvd3MgUHJvY2Vzc0ZhaWxlZEV4Y2VwdGlvbiBpZiB0aGUgcHJvY2VzcyBkaWRuJ3QgdGVybWluYXRlIHN1Y2Nlc3NmdWxseQogICAgICoKICAgICAqIEBmaW5hbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbXVzdFJ1big/Y2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCwgYXJyYXkgJGVudiA9IFtdKTogc2VsZgogICAgewogICAgICAgIGlmICgwICE9PSAkdGhpcy0+cnVuKCRjYWxsYmFjaywgJGVudikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFByb2Nlc3NGYWlsZWRFeGNlcHRpb24oJHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogU3RhcnRzIHRoZSBwcm9jZXNzIGFuZCByZXR1cm5zIGFmdGVyIHdyaXRpbmcgdGhlIGlucHV0IHRvIFNURElOLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIGJsb2NrcyB1bnRpbCBhbGwgU1RESU4gZGF0YSBpcyBzZW50IHRvIHRoZSBwcm9jZXNzIHRoZW4gaXQKICAgICAqIHJldHVybnMgd2hpbGUgdGhlIHByb2Nlc3MgcnVucyBpbiB0aGUgYmFja2dyb3VuZC4KICAgICAqCiAgICAgKiBUaGUgdGVybWluYXRpb24gb2YgdGhlIHByb2Nlc3MgY2FuIGJlIGF3YWl0ZWQgd2l0aCB3YWl0KCkuCiAgICAgKgogICAgICogVGhlIGNhbGxiYWNrIHJlY2VpdmVzIHRoZSB0eXBlIG9mIG91dHB1dCAob3V0IG9yIGVycikgYW5kIHNvbWUgYnl0ZXMgZnJvbQogICAgICogdGhlIG91dHB1dCBpbiByZWFsLXRpbWUgd2hpbGUgd3JpdGluZyB0aGUgc3RhbmRhcmQgaW5wdXQgdG8gdGhlIHByb2Nlc3MuCiAgICAgKiBJdCBhbGxvd3MgdG8gaGF2ZSBmZWVkYmFjayBmcm9tIHRoZSBpbmRlcGVuZGVudCBwcm9jZXNzIGR1cmluZyBleGVjdXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlfG51bGwgJGNhbGxiYWNrIEEgUEhQIGNhbGxiYWNrIHRvIHJ1biB3aGVuZXZlciB0aGVyZSBpcyBzb21lCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGF2YWlsYWJsZSBvbiBTVERPVVQgb3IgU1RERVJSCiAgICAgKgogICAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIFdoZW4gcHJvY2VzcyBjYW4ndCBiZSBsYXVuY2hlZAogICAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIFdoZW4gcHJvY2VzcyBpcyBhbHJlYWR5IHJ1bm5pbmcKICAgICAqIEB0aHJvd3MgTG9naWNFeGNlcHRpb24gICBJbiBjYXNlIGEgY2FsbGJhY2sgaXMgcHJvdmlkZWQgYW5kIG91dHB1dCBoYXMgYmVlbiBkaXNhYmxlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RhcnQoP2NhbGxhYmxlICRjYWxsYmFjayA9IG51bGwsIGFycmF5ICRlbnYgPSBbXSkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmlzUnVubmluZygpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdQcm9jZXNzIGlzIGFscmVhZHkgcnVubmluZy4nKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5yZXNldFByb2Nlc3NEYXRhKCk7CiAgICAgICAgJHRoaXMtPnN0YXJ0dGltZSA9ICR0aGlzLT5sYXN0T3V0cHV0VGltZSA9IG1pY3JvdGltZSh0cnVlKTsKICAgICAgICAkdGhpcy0+Y2FsbGJhY2sgPSAkdGhpcy0+YnVpbGRDYWxsYmFjaygkY2FsbGJhY2spOwogICAgICAgICR0aGlzLT5oYXNDYWxsYmFjayA9IG51bGwgIT09ICRjYWxsYmFjazsKICAgICAgICAkZGVzY3JpcHRvcnMgPSAkdGhpcy0+Z2V0RGVzY3JpcHRvcnMoKTsKCiAgICAgICAgaWYgKCR0aGlzLT5lbnYpIHsKICAgICAgICAgICAgJGVudiArPSAnXFwnID09PSBcRElSRUNUT1JZX1NFUEFSQVRPUiA/IGFycmF5X2RpZmZfdWtleSgkdGhpcy0+ZW52LCAkZW52LCAnc3RyY2FzZWNtcCcpIDogJHRoaXMtPmVudjsKICAgICAgICB9CgogICAgICAgICRlbnYgKz0gJ1xcJyA9PT0gXERJUkVDVE9SWV9TRVBBUkFUT1IgPyBhcnJheV9kaWZmX3VrZXkoJHRoaXMtPmdldERlZmF1bHRFbnYoKSwgJGVudiwgJ3N0cmNhc2VjbXAnKSA6ICR0aGlzLT5nZXREZWZhdWx0RW52KCk7CgogICAgICAgIGlmIChcaXNfYXJyYXkoJGNvbW1hbmRsaW5lID0gJHRoaXMtPmNvbW1hbmRsaW5lKSkgewogICAgICAgICAgICAkY29tbWFuZGxpbmUgPSBpbXBsb2RlKCcgJywgYXJyYXlfbWFwKFskdGhpcywgJ2VzY2FwZUFyZ3VtZW50J10sICRjb21tYW5kbGluZSkpOwoKICAgICAgICAgICAgaWYgKCdcXCcgIT09IFxESVJFQ1RPUllfU0VQQVJBVE9SKSB7CiAgICAgICAgICAgICAgICAvLyBleGVjIGlzIG1hbmRhdG9yeSB0byBkZWFsIHdpdGggc2VuZGluZyBhIHNpZ25hbCB0byB0aGUgcHJvY2VzcwogICAgICAgICAgICAgICAgJGNvbW1hbmRsaW5lID0gJ2V4ZWMgJy4kY29tbWFuZGxpbmU7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkY29tbWFuZGxpbmUgPSAkdGhpcy0+cmVwbGFjZVBsYWNlaG9sZGVycygkY29tbWFuZGxpbmUsICRlbnYpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCdcXCcgPT09IFxESVJFQ1RPUllfU0VQQVJBVE9SKSB7CiAgICAgICAgICAgICRjb21tYW5kbGluZSA9ICR0aGlzLT5wcmVwYXJlV2luZG93c0NvbW1hbmRMaW5lKCRjb21tYW5kbGluZSwgJGVudik7CiAgICAgICAgfSBlbHNlaWYgKCEkdGhpcy0+dXNlRmlsZUhhbmRsZXMgJiYgJHRoaXMtPmlzU2lnY2hpbGRFbmFibGVkKCkpIHsKICAgICAgICAgICAgLy8gbGFzdCBleGl0IGNvZGUgaXMgb3V0cHV0IG9uIHRoZSBmb3VydGggcGlwZSBhbmQgY2F1Z2h0IHRvIHdvcmsgYXJvdW5kIC0tZW5hYmxlLXNpZ2NoaWxkCiAgICAgICAgICAgICRkZXNjcmlwdG9yc1szXSA9IFsncGlwZScsICd3J107CgogICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly91bml4LnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy83MTIwNS9iYWNrZ3JvdW5kLXByb2Nlc3MtcGlwZS1pbnB1dAogICAgICAgICAgICAkY29tbWFuZGxpbmUgPSAneyAoJy4kY29tbWFuZGxpbmUuJykgPCYzIDM8Ji0gMz4vZGV2L251bGwgJiB9IDM8JjA7JzsKICAgICAgICAgICAgJGNvbW1hbmRsaW5lIC49ICdwaWQ9JCE7IGVjaG8gJHBpZCA+JjM7IHdhaXQgJHBpZCAyPi9kZXYvbnVsbDsgY29kZT0kPzsgZWNobyAkY29kZSA+JjM7IGV4aXQgJGNvZGUnOwoKICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdGhlIGJ1Zywgd2hlbiBQVFMgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkLgogICAgICAgICAgICAvLyBAc2VlIDogaHR0cHM6Ly9idWdzLnBocC5uZXQvNjk0NDIKICAgICAgICAgICAgJHB0c1dvcmthcm91bmQgPSBmb3BlbihfX0ZJTEVfXywgJ3InKTsKICAgICAgICB9CgogICAgICAgICRlbnZQYWlycyA9IFtdOwogICAgICAgIGZvcmVhY2ggKCRlbnYgYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgaWYgKGZhbHNlICE9PSAkdiAmJiBmYWxzZSA9PT0gXGluX2FycmF5KCRrLCBbJ2FyZ2MnLCAnYXJndicsICdBUkdDJywgJ0FSR1YnXSwgdHJ1ZSkpIHsKICAgICAgICAgICAgICAgICRlbnZQYWlyc1tdID0gJGsuJz0nLiR2OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIWlzX2RpcigkdGhpcy0+Y3dkKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihzcHJpbnRmKCdUaGUgcHJvdmlkZWQgY3dkICIlcyIgZG9lcyBub3QgZXhpc3QuJywgJHRoaXMtPmN3ZCkpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnByb2Nlc3MgPSBAcHJvY19vcGVuKCRjb21tYW5kbGluZSwgJGRlc2NyaXB0b3JzLCAkdGhpcy0+cHJvY2Vzc1BpcGVzLT5waXBlcywgJHRoaXMtPmN3ZCwgJGVudlBhaXJzLCAkdGhpcy0+b3B0aW9ucyk7CgogICAgICAgIGlmICghJHRoaXMtPnByb2Nlc3MpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oJ1VuYWJsZSB0byBsYXVuY2ggYSBuZXcgcHJvY2Vzcy4nKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPnN0YXR1cyA9IHNlbGY6OlNUQVRVU19TVEFSVEVEOwoKICAgICAgICBpZiAoaXNzZXQoJGRlc2NyaXB0b3JzWzNdKSkgewogICAgICAgICAgICAkdGhpcy0+ZmFsbGJhY2tTdGF0dXNbJ3BpZCddID0gKGludCkgZmdldHMoJHRoaXMtPnByb2Nlc3NQaXBlcy0+cGlwZXNbM10pOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT50dHkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnVwZGF0ZVN0YXR1cyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmNoZWNrVGltZW91dCgpOwogICAgfQoKICAgIC8qKgogICAgICogUmVzdGFydHMgdGhlIHByb2Nlc3MuCiAgICAgKgogICAgICogQmUgd2FybmVkIHRoYXQgdGhlIHByb2Nlc3MgaXMgY2xvbmVkIGJlZm9yZSBiZWluZyBzdGFydGVkLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZXxudWxsICRjYWxsYmFjayBBIFBIUCBjYWxsYmFjayB0byBydW4gd2hlbmV2ZXIgdGhlcmUgaXMgc29tZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBhdmFpbGFibGUgb24gU1RET1VUIG9yIFNUREVSUgogICAgICoKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKgogICAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIFdoZW4gcHJvY2VzcyBjYW4ndCBiZSBsYXVuY2hlZAogICAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIFdoZW4gcHJvY2VzcyBpcyBhbHJlYWR5IHJ1bm5pbmcKICAgICAqCiAgICAgKiBAc2VlIHN0YXJ0KCkKICAgICAqCiAgICAgKiBAZmluYWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlc3RhcnQoP2NhbGxhYmxlICRjYWxsYmFjayA9IG51bGwsIGFycmF5ICRlbnYgPSBbXSk6IHNlbGYKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmlzUnVubmluZygpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdQcm9jZXNzIGlzIGFscmVhZHkgcnVubmluZy4nKTsKICAgICAgICB9CgogICAgICAgICRwcm9jZXNzID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJHByb2Nlc3MtPnN0YXJ0KCRjYWxsYmFjaywgJGVudik7CgogICAgICAgIHJldHVybiAkcHJvY2VzczsKICAgIH0KCiAgICAvKioKICAgICAqIFdhaXRzIGZvciB0aGUgcHJvY2VzcyB0byB0ZXJtaW5hdGUuCiAgICAgKgogICAgICogVGhlIGNhbGxiYWNrIHJlY2VpdmVzIHRoZSB0eXBlIG9mIG91dHB1dCAob3V0IG9yIGVycikgYW5kIHNvbWUgYnl0ZXMKICAgICAqIGZyb20gdGhlIG91dHB1dCBpbiByZWFsLXRpbWUgd2hpbGUgd3JpdGluZyB0aGUgc3RhbmRhcmQgaW5wdXQgdG8gdGhlIHByb2Nlc3MuCiAgICAgKiBJdCBhbGxvd3MgdG8gaGF2ZSBmZWVkYmFjayBmcm9tIHRoZSBpbmRlcGVuZGVudCBwcm9jZXNzIGR1cmluZyBleGVjdXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlfG51bGwgJGNhbGxiYWNrIEEgdmFsaWQgUEhQIGNhbGxiYWNrCiAgICAgKgogICAgICogQHJldHVybiBpbnQgVGhlIGV4aXRjb2RlIG9mIHRoZSBwcm9jZXNzCiAgICAgKgogICAgICogQHRocm93cyBQcm9jZXNzVGltZWRPdXRFeGNlcHRpb24gV2hlbiBwcm9jZXNzIHRpbWVkIG91dAogICAgICogQHRocm93cyBQcm9jZXNzU2lnbmFsZWRFeGNlcHRpb24gV2hlbiBwcm9jZXNzIHN0b3BwZWQgYWZ0ZXIgcmVjZWl2aW5nIHNpZ25hbAogICAgICogQHRocm93cyBMb2dpY0V4Y2VwdGlvbiAgICAgICAgICAgV2hlbiBwcm9jZXNzIGlzIG5vdCB5ZXQgc3RhcnRlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2FpdCg/Y2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+cmVxdWlyZVByb2Nlc3NJc1N0YXJ0ZWQoX19GVU5DVElPTl9fKTsKCiAgICAgICAgJHRoaXMtPnVwZGF0ZVN0YXR1cyhmYWxzZSk7CgogICAgICAgIGlmIChudWxsICE9PSAkY2FsbGJhY2spIHsKICAgICAgICAgICAgaWYgKCEkdGhpcy0+cHJvY2Vzc1BpcGVzLT5oYXZlUmVhZFN1cHBvcnQoKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPnN0b3AoMCk7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTG9naWNFeGNlcHRpb24oJ1Bhc3MgdGhlIGNhbGxiYWNrIHRvIHRoZSAiUHJvY2Vzczo6c3RhcnQiIG1ldGhvZCBvciBjYWxsIGVuYWJsZU91dHB1dCB0byB1c2UgYSBjYWxsYmFjayB3aXRoICJQcm9jZXNzOjp3YWl0Ii4nKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdGhpcy0+Y2FsbGJhY2sgPSAkdGhpcy0+YnVpbGRDYWxsYmFjaygkY2FsbGJhY2spOwogICAgICAgIH0KCiAgICAgICAgZG8gewogICAgICAgICAgICAkdGhpcy0+Y2hlY2tUaW1lb3V0KCk7CiAgICAgICAgICAgICRydW5uaW5nID0gJHRoaXMtPmlzUnVubmluZygpICYmICgnXFwnID09PSBcRElSRUNUT1JZX1NFUEFSQVRPUiB8fCAkdGhpcy0+cHJvY2Vzc1BpcGVzLT5hcmVPcGVuKCkpOwogICAgICAgICAgICAkdGhpcy0+cmVhZFBpcGVzKCRydW5uaW5nLCAnXFwnICE9PSBcRElSRUNUT1JZX1NFUEFSQVRPUiB8fCAhJHJ1bm5pbmcpOwogICAgICAgIH0gd2hpbGUgKCRydW5uaW5nKTsKCiAgICAgICAgd2hpbGUgKCR0aGlzLT5pc1J1bm5pbmcoKSkgewogICAgICAgICAgICAkdGhpcy0+Y2hlY2tUaW1lb3V0KCk7CiAgICAgICAgICAgIHVzbGVlcCgxMDAwKTsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+cHJvY2Vzc0luZm9ybWF0aW9uWydzaWduYWxlZCddICYmICR0aGlzLT5wcm9jZXNzSW5mb3JtYXRpb25bJ3Rlcm1zaWcnXSAhPT0gJHRoaXMtPmxhdGVzdFNpZ25hbCkgewogICAgICAgICAgICB0aHJvdyBuZXcgUHJvY2Vzc1NpZ25hbGVkRXhjZXB0aW9uKCR0aGlzKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+ZXhpdGNvZGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBXYWl0cyB1bnRpbCB0aGUgY2FsbGJhY2sgcmV0dXJucyB0cnVlLgogICAgICoKICAgICAqIFRoZSBjYWxsYmFjayByZWNlaXZlcyB0aGUgdHlwZSBvZiBvdXRwdXQgKG91dCBvciBlcnIpIGFuZCBzb21lIGJ5dGVzCiAgICAgKiBmcm9tIHRoZSBvdXRwdXQgaW4gcmVhbC10aW1lIHdoaWxlIHdyaXRpbmcgdGhlIHN0YW5kYXJkIGlucHV0IHRvIHRoZSBwcm9jZXNzLgogICAgICogSXQgYWxsb3dzIHRvIGhhdmUgZmVlZGJhY2sgZnJvbSB0aGUgaW5kZXBlbmRlbnQgcHJvY2VzcyBkdXJpbmcgZXhlY3V0aW9uLgogICAgICoKICAgICAqIEB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiAgICAgICAgIFdoZW4gcHJvY2VzcyB0aW1lZCBvdXQKICAgICAqIEB0aHJvd3MgTG9naWNFeGNlcHRpb24gICAgICAgICAgIFdoZW4gcHJvY2VzcyBpcyBub3QgeWV0IHN0YXJ0ZWQKICAgICAqIEB0aHJvd3MgUHJvY2Vzc1RpbWVkT3V0RXhjZXB0aW9uIEluIGNhc2UgdGhlIHRpbWVvdXQgd2FzIHJlYWNoZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdhaXRVbnRpbChjYWxsYWJsZSAkY2FsbGJhY2spOiBib29sCiAgICB7CiAgICAgICAgJHRoaXMtPnJlcXVpcmVQcm9jZXNzSXNTdGFydGVkKF9fRlVOQ1RJT05fXyk7CiAgICAgICAgJHRoaXMtPnVwZGF0ZVN0YXR1cyhmYWxzZSk7CgogICAgICAgIGlmICghJHRoaXMtPnByb2Nlc3NQaXBlcy0+aGF2ZVJlYWRTdXBwb3J0KCkpIHsKICAgICAgICAgICAgJHRoaXMtPnN0b3AoMCk7CiAgICAgICAgICAgIHRocm93IG5ldyBMb2dpY0V4Y2VwdGlvbignUGFzcyB0aGUgY2FsbGJhY2sgdG8gdGhlICJQcm9jZXNzOjpzdGFydCIgbWV0aG9kIG9yIGNhbGwgZW5hYmxlT3V0cHV0IHRvIHVzZSBhIGNhbGxiYWNrIHdpdGggIlByb2Nlc3M6OndhaXRVbnRpbCIuJyk7CiAgICAgICAgfQogICAgICAgICRjYWxsYmFjayA9ICR0aGlzLT5idWlsZENhbGxiYWNrKCRjYWxsYmFjayk7CgogICAgICAgICRyZWFkeSA9IGZhbHNlOwogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICR0aGlzLT5jaGVja1RpbWVvdXQoKTsKICAgICAgICAgICAgJHJ1bm5pbmcgPSAnXFwnID09PSBcRElSRUNUT1JZX1NFUEFSQVRPUiA/ICR0aGlzLT5pc1J1bm5pbmcoKSA6ICR0aGlzLT5wcm9jZXNzUGlwZXMtPmFyZU9wZW4oKTsKICAgICAgICAgICAgJG91dHB1dCA9ICR0aGlzLT5wcm9jZXNzUGlwZXMtPnJlYWRBbmRXcml0ZSgkcnVubmluZywgJ1xcJyAhPT0gXERJUkVDVE9SWV9TRVBBUkFUT1IgfHwgISRydW5uaW5nKTsKCiAgICAgICAgICAgIGZvcmVhY2ggKCRvdXRwdXQgYXMgJHR5cGUgPT4gJGRhdGEpIHsKICAgICAgICAgICAgICAgIGlmICgzICE9PSAkdHlwZSkgewogICAgICAgICAgICAgICAgICAgICRyZWFkeSA9ICRjYWxsYmFjayhzZWxmOjpTVERPVVQgPT09ICR0eXBlID8gc2VsZjo6T1VUIDogc2VsZjo6RVJSLCAkZGF0YSkgfHwgJHJlYWR5OwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKCFpc3NldCgkdGhpcy0+ZmFsbGJhY2tTdGF0dXNbJ3NpZ25hbGVkJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmZhbGxiYWNrU3RhdHVzWydleGl0Y29kZSddID0gKGludCkgJGRhdGE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRyZWFkeSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCEkcnVubmluZykgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICB1c2xlZXAoMTAwMCk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgUGlkIChwcm9jZXNzIGlkZW50aWZpZXIpLCBpZiBhcHBsaWNhYmxlLgogICAgICoKICAgICAqIEByZXR1cm4gaW50fG51bGwgVGhlIHByb2Nlc3MgaWQgaWYgcnVubmluZywgbnVsbCBvdGhlcndpc2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBpZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5pc1J1bm5pbmcoKSA/ICR0aGlzLT5wcm9jZXNzSW5mb3JtYXRpb25bJ3BpZCddIDogbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIFNlbmRzIGEgUE9TSVggc2lnbmFsIHRvIHRoZSBwcm9jZXNzLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHNpZ25hbCBBIHZhbGlkIFBPU0lYIHNpZ25hbCAoc2VlIGh0dHBzOi8vcGhwLm5ldC9wY250bC5jb25zdGFudHMpCiAgICAgKgogICAgICogQHJldHVybiAkdGhpcwogICAgICoKICAgICAqIEB0aHJvd3MgTG9naWNFeGNlcHRpb24gICBJbiBjYXNlIHRoZSBwcm9jZXNzIGlzIG5vdCBydW5uaW5nCiAgICAgKiBAdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gSW4gY2FzZSAtLWVuYWJsZS1zaWdjaGlsZCBpcyBhY3RpdmF0ZWQgYW5kIHRoZSBwcm9jZXNzIGNhbid0IGJlIGtpbGxlZAogICAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIEluIGNhc2Ugb2YgZmFpbHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2lnbmFsKGludCAkc2lnbmFsKQogICAgewogICAgICAgICR0aGlzLT5kb1NpZ25hbCgkc2lnbmFsLCB0cnVlKTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogRGlzYWJsZXMgZmV0Y2hpbmcgb3V0cHV0IGFuZCBlcnJvciBvdXRwdXQgZnJvbSB0aGUgdW5kZXJseWluZyBwcm9jZXNzLgogICAgICoKICAgICAqIEByZXR1cm4gJHRoaXMKICAgICAqCiAgICAgKiBAdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gSW4gY2FzZSB0aGUgcHJvY2VzcyBpcyBhbHJlYWR5IHJ1bm5pbmcKICAgICAqIEB0aHJvd3MgTG9naWNFeGNlcHRpb24gICBpZiBhbiBpZGxlIHRpbWVvdXQgaXMgc2V0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaXNhYmxlT3V0cHV0KCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmlzUnVubmluZygpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdEaXNhYmxpbmcgb3V0cHV0IHdoaWxlIHRoZSBwcm9jZXNzIGlzIHJ1bm5pbmcgaXMgbm90IHBvc3NpYmxlLicpOwogICAgICAgIH0KICAgICAgICBpZiAobnVsbCAhPT0gJHRoaXMtPmlkbGVUaW1lb3V0KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBMb2dpY0V4Y2VwdGlvbignT3V0cHV0IGNhbm5vdCBiZSBkaXNhYmxlZCB3aGlsZSBhbiBpZGxlIHRpbWVvdXQgaXMgc2V0LicpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPm91dHB1dERpc2FibGVkID0gdHJ1ZTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogRW5hYmxlcyBmZXRjaGluZyBvdXRwdXQgYW5kIGVycm9yIG91dHB1dCBmcm9tIHRoZSB1bmRlcmx5aW5nIHByb2Nlc3MuCiAgICAgKgogICAgICogQHJldHVybiAkdGhpcwogICAgICoKICAgICAqIEB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiBJbiBjYXNlIHRoZSBwcm9jZXNzIGlzIGFscmVhZHkgcnVubmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5hYmxlT3V0cHV0KCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmlzUnVubmluZygpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdFbmFibGluZyBvdXRwdXQgd2hpbGUgdGhlIHByb2Nlc3MgaXMgcnVubmluZyBpcyBub3QgcG9zc2libGUuJyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+b3V0cHV0RGlzYWJsZWQgPSBmYWxzZTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGluIGNhc2UgdGhlIG91dHB1dCBpcyBkaXNhYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNPdXRwdXREaXNhYmxlZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5vdXRwdXREaXNhYmxlZDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgb3V0cHV0IG9mIHRoZSBwcm9jZXNzIChTVERPVVQpLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKgogICAgICogQHRocm93cyBMb2dpY0V4Y2VwdGlvbiBpbiBjYXNlIHRoZSBvdXRwdXQgaGFzIGJlZW4gZGlzYWJsZWQKICAgICAqIEB0aHJvd3MgTG9naWNFeGNlcHRpb24gSW4gY2FzZSB0aGUgcHJvY2VzcyBpcyBub3Qgc3RhcnRlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0T3V0cHV0KCkKICAgIHsKICAgICAgICAkdGhpcy0+cmVhZFBpcGVzRm9yT3V0cHV0KF9fRlVOQ1RJT05fXyk7CgogICAgICAgIGlmIChmYWxzZSA9PT0gJHJldCA9IHN0cmVhbV9nZXRfY29udGVudHMoJHRoaXMtPnN0ZG91dCwgLTEsIDApKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmV0OwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgb3V0cHV0IGluY3JlbWVudGFsbHkuCiAgICAgKgogICAgICogSW4gY29tcGFyaXNvbiB3aXRoIHRoZSBnZXRPdXRwdXQgbWV0aG9kIHdoaWNoIGFsd2F5cyByZXR1cm4gdGhlIHdob2xlCiAgICAgKiBvdXRwdXQsIHRoaXMgb25lIHJldHVybnMgdGhlIG5ldyBvdXRwdXQgc2luY2UgdGhlIGxhc3QgY2FsbC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICoKICAgICAqIEB0aHJvd3MgTG9naWNFeGNlcHRpb24gaW4gY2FzZSB0aGUgb3V0cHV0IGhhcyBiZWVuIGRpc2FibGVkCiAgICAgKiBAdGhyb3dzIExvZ2ljRXhjZXB0aW9uIEluIGNhc2UgdGhlIHByb2Nlc3MgaXMgbm90IHN0YXJ0ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEluY3JlbWVudGFsT3V0cHV0KCkKICAgIHsKICAgICAgICAkdGhpcy0+cmVhZFBpcGVzRm9yT3V0cHV0KF9fRlVOQ1RJT05fXyk7CgogICAgICAgICRsYXRlc3QgPSBzdHJlYW1fZ2V0X2NvbnRlbnRzKCR0aGlzLT5zdGRvdXQsIC0xLCAkdGhpcy0+aW5jcmVtZW50YWxPdXRwdXRPZmZzZXQpOwogICAgICAgICR0aGlzLT5pbmNyZW1lbnRhbE91dHB1dE9mZnNldCA9IGZ0ZWxsKCR0aGlzLT5zdGRvdXQpOwoKICAgICAgICBpZiAoZmFsc2UgPT09ICRsYXRlc3QpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRsYXRlc3Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIHRvIHRoZSBvdXRwdXQgb2YgdGhlIHByb2Nlc3MsIHdpdGggdGhlIG91dHB1dCB0eXBlIGFzIGtleXMgKFByb2Nlc3M6Ok9VVC9FUlIpLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGZsYWdzIEEgYml0IGZpZWxkIG9mIFByb2Nlc3M6OklURVJfKiBmbGFncwogICAgICoKICAgICAqIEByZXR1cm4gXEdlbmVyYXRvcjxzdHJpbmcsIHN0cmluZz4KICAgICAqCiAgICAgKiBAdGhyb3dzIExvZ2ljRXhjZXB0aW9uIGluIGNhc2UgdGhlIG91dHB1dCBoYXMgYmVlbiBkaXNhYmxlZAogICAgICogQHRocm93cyBMb2dpY0V4Y2VwdGlvbiBJbiBjYXNlIHRoZSBwcm9jZXNzIGlzIG5vdCBzdGFydGVkCiAgICAgKi8KICAgICNbXFJldHVyblR5cGVXaWxsQ2hhbmdlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEl0ZXJhdG9yKGludCAkZmxhZ3MgPSAwKQogICAgewogICAgICAgICR0aGlzLT5yZWFkUGlwZXNGb3JPdXRwdXQoX19GVU5DVElPTl9fLCBmYWxzZSk7CgogICAgICAgICRjbGVhck91dHB1dCA9ICEoc2VsZjo6SVRFUl9LRUVQX09VVFBVVCAmICRmbGFncyk7CiAgICAgICAgJGJsb2NraW5nID0gIShzZWxmOjpJVEVSX05PTl9CTE9DS0lORyAmICRmbGFncyk7CiAgICAgICAgJHlpZWxkT3V0ID0gIShzZWxmOjpJVEVSX1NLSVBfT1VUICYgJGZsYWdzKTsKICAgICAgICAkeWllbGRFcnIgPSAhKHNlbGY6OklURVJfU0tJUF9FUlIgJiAkZmxhZ3MpOwoKICAgICAgICB3aGlsZSAobnVsbCAhPT0gJHRoaXMtPmNhbGxiYWNrIHx8ICgkeWllbGRPdXQgJiYgIWZlb2YoJHRoaXMtPnN0ZG91dCkpIHx8ICgkeWllbGRFcnIgJiYgIWZlb2YoJHRoaXMtPnN0ZGVycikpKSB7CiAgICAgICAgICAgIGlmICgkeWllbGRPdXQpIHsKICAgICAgICAgICAgICAgICRvdXQgPSBzdHJlYW1fZ2V0X2NvbnRlbnRzKCR0aGlzLT5zdGRvdXQsIC0xLCAkdGhpcy0+aW5jcmVtZW50YWxPdXRwdXRPZmZzZXQpOwoKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkb3V0WzBdKSkgewogICAgICAgICAgICAgICAgICAgIGlmICgkY2xlYXJPdXRwdXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmNsZWFyT3V0cHV0KCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmluY3JlbWVudGFsT3V0cHV0T2Zmc2V0ID0gZnRlbGwoJHRoaXMtPnN0ZG91dCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB5aWVsZCBzZWxmOjpPVVQgPT4gJG91dDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCR5aWVsZEVycikgewogICAgICAgICAgICAgICAgJGVyciA9IHN0cmVhbV9nZXRfY29udGVudHMoJHRoaXMtPnN0ZGVyciwgLTEsICR0aGlzLT5pbmNyZW1lbnRhbEVycm9yT3V0cHV0T2Zmc2V0KTsKCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGVyclswXSkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJGNsZWFyT3V0cHV0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5jbGVhckVycm9yT3V0cHV0KCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmluY3JlbWVudGFsRXJyb3JPdXRwdXRPZmZzZXQgPSBmdGVsbCgkdGhpcy0+c3RkZXJyKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHlpZWxkIHNlbGY6OkVSUiA9PiAkZXJyOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoISRibG9ja2luZyAmJiAhaXNzZXQoJG91dFswXSkgJiYgIWlzc2V0KCRlcnJbMF0pKSB7CiAgICAgICAgICAgICAgICB5aWVsZCBzZWxmOjpPVVQgPT4gJyc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5jaGVja1RpbWVvdXQoKTsKICAgICAgICAgICAgJHRoaXMtPnJlYWRQaXBlc0Zvck91dHB1dChfX0ZVTkNUSU9OX18sICRibG9ja2luZyk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQ2xlYXJzIHRoZSBwcm9jZXNzIG91dHB1dC4KICAgICAqCiAgICAgKiBAcmV0dXJuICR0aGlzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhck91dHB1dCgpCiAgICB7CiAgICAgICAgZnRydW5jYXRlKCR0aGlzLT5zdGRvdXQsIDApOwogICAgICAgIGZzZWVrKCR0aGlzLT5zdGRvdXQsIDApOwogICAgICAgICR0aGlzLT5pbmNyZW1lbnRhbE91dHB1dE9mZnNldCA9IDA7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgZXJyb3Igb3V0cHV0IG9mIHRoZSBwcm9jZXNzIChTVERFUlIpLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKgogICAgICogQHRocm93cyBMb2dpY0V4Y2VwdGlvbiBpbiBjYXNlIHRoZSBvdXRwdXQgaGFzIGJlZW4gZGlzYWJsZWQKICAgICAqIEB0aHJvd3MgTG9naWNFeGNlcHRpb24gSW4gY2FzZSB0aGUgcHJvY2VzcyBpcyBub3Qgc3RhcnRlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JPdXRwdXQoKQogICAgewogICAgICAgICR0aGlzLT5yZWFkUGlwZXNGb3JPdXRwdXQoX19GVU5DVElPTl9fKTsKCiAgICAgICAgaWYgKGZhbHNlID09PSAkcmV0ID0gc3RyZWFtX2dldF9jb250ZW50cygkdGhpcy0+c3RkZXJyLCAtMSwgMCkpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBlcnJvck91dHB1dCBpbmNyZW1lbnRhbGx5LgogICAgICoKICAgICAqIEluIGNvbXBhcmlzb24gd2l0aCB0aGUgZ2V0RXJyb3JPdXRwdXQgbWV0aG9kIHdoaWNoIGFsd2F5cyByZXR1cm4gdGhlCiAgICAgKiB3aG9sZSBlcnJvciBvdXRwdXQsIHRoaXMgb25lIHJldHVybnMgdGhlIG5ldyBlcnJvciBvdXRwdXQgc2luY2UgdGhlIGxhc3QKICAgICAqIGNhbGwuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqCiAgICAgKiBAdGhyb3dzIExvZ2ljRXhjZXB0aW9uIGluIGNhc2UgdGhlIG91dHB1dCBoYXMgYmVlbiBkaXNhYmxlZAogICAgICogQHRocm93cyBMb2dpY0V4Y2VwdGlvbiBJbiBjYXNlIHRoZSBwcm9jZXNzIGlzIG5vdCBzdGFydGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbmNyZW1lbnRhbEVycm9yT3V0cHV0KCkKICAgIHsKICAgICAgICAkdGhpcy0+cmVhZFBpcGVzRm9yT3V0cHV0KF9fRlVOQ1RJT05fXyk7CgogICAgICAgICRsYXRlc3QgPSBzdHJlYW1fZ2V0X2NvbnRlbnRzKCR0aGlzLT5zdGRlcnIsIC0xLCAkdGhpcy0+aW5jcmVtZW50YWxFcnJvck91dHB1dE9mZnNldCk7CiAgICAgICAgJHRoaXMtPmluY3JlbWVudGFsRXJyb3JPdXRwdXRPZmZzZXQgPSBmdGVsbCgkdGhpcy0+c3RkZXJyKTsKCiAgICAgICAgaWYgKGZhbHNlID09PSAkbGF0ZXN0KSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbGF0ZXN0OwogICAgfQoKICAgIC8qKgogICAgICogQ2xlYXJzIHRoZSBwcm9jZXNzIG91dHB1dC4KICAgICAqCiAgICAgKiBAcmV0dXJuICR0aGlzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhckVycm9yT3V0cHV0KCkKICAgIHsKICAgICAgICBmdHJ1bmNhdGUoJHRoaXMtPnN0ZGVyciwgMCk7CiAgICAgICAgZnNlZWsoJHRoaXMtPnN0ZGVyciwgMCk7CiAgICAgICAgJHRoaXMtPmluY3JlbWVudGFsRXJyb3JPdXRwdXRPZmZzZXQgPSAwOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBleGl0IGNvZGUgcmV0dXJuZWQgYnkgdGhlIHByb2Nlc3MuCiAgICAgKgogICAgICogQHJldHVybiBpbnR8bnVsbCBUaGUgZXhpdCBzdGF0dXMgY29kZSwgbnVsbCBpZiB0aGUgUHJvY2VzcyBpcyBub3QgdGVybWluYXRlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXhpdENvZGUoKQogICAgewogICAgICAgICR0aGlzLT51cGRhdGVTdGF0dXMoZmFsc2UpOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmV4aXRjb2RlOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGV4aXQgY29kZSByZXR1cm5lZCBieSB0aGUgcHJvY2Vzcy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCByZWxpZXMgb24gdGhlIFVuaXggZXhpdCBjb2RlIHN0YXR1cyBzdGFuZGFyZGl6YXRpb24KICAgICAqIGFuZCBtaWdodCBub3QgYmUgcmVsZXZhbnQgZm9yIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBleGl0IHN0YXR1cyBjb2RlLCBudWxsIGlmIHRoZSBQcm9jZXNzIGlzIG5vdCB0ZXJtaW5hdGVkCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vdGxkcC5vcmcvTERQL2Ficy9odG1sL2V4aXRjb2Rlcy5odG1sCiAgICAgKiBAc2VlIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVW5peF9zaWduYWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEV4aXRDb2RlVGV4dCgpCiAgICB7CiAgICAgICAgaWYgKG51bGwgPT09ICRleGl0Y29kZSA9ICR0aGlzLT5nZXRFeGl0Q29kZSgpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHNlbGY6OiRleGl0Q29kZXNbJGV4aXRjb2RlXSA/PyAnVW5rbm93biBlcnJvcic7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgdGhlIHByb2Nlc3MgZW5kZWQgc3VjY2Vzc2Z1bGx5LgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNTdWNjZXNzZnVsKCkKICAgIHsKICAgICAgICByZXR1cm4gMCA9PT0gJHRoaXMtPmdldEV4aXRDb2RlKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNoaWxkIHByb2Nlc3MgaGFzIGJlZW4gdGVybWluYXRlZCBieSBhbiB1bmNhdWdodCBzaWduYWwuCiAgICAgKgogICAgICogSXQgYWx3YXlzIHJldHVybnMgZmFsc2Ugb24gV2luZG93cy4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIExvZ2ljRXhjZXB0aW9uIEluIGNhc2UgdGhlIHByb2Nlc3MgaXMgbm90IHRlcm1pbmF0ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhc0JlZW5TaWduYWxlZCgpCiAgICB7CiAgICAgICAgJHRoaXMtPnJlcXVpcmVQcm9jZXNzSXNUZXJtaW5hdGVkKF9fRlVOQ1RJT05fXyk7CgogICAgICAgIHJldHVybiAkdGhpcy0+cHJvY2Vzc0luZm9ybWF0aW9uWydzaWduYWxlZCddOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBzaWduYWwgdGhhdCBjYXVzZWQgdGhlIGNoaWxkIHByb2Nlc3MgdG8gdGVybWluYXRlIGl0cyBleGVjdXRpb24uCiAgICAgKgogICAgICogSXQgaXMgb25seSBtZWFuaW5nZnVsIGlmIGhhc0JlZW5TaWduYWxlZCgpIHJldHVybnMgdHJ1ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICoKICAgICAqIEB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiBJbiBjYXNlIC0tZW5hYmxlLXNpZ2NoaWxkIGlzIGFjdGl2YXRlZAogICAgICogQHRocm93cyBMb2dpY0V4Y2VwdGlvbiAgIEluIGNhc2UgdGhlIHByb2Nlc3MgaXMgbm90IHRlcm1pbmF0ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRlcm1TaWduYWwoKQogICAgewogICAgICAgICR0aGlzLT5yZXF1aXJlUHJvY2Vzc0lzVGVybWluYXRlZChfX0ZVTkNUSU9OX18pOwoKICAgICAgICBpZiAoJHRoaXMtPmlzU2lnY2hpbGRFbmFibGVkKCkgJiYgLTEgPT09ICR0aGlzLT5wcm9jZXNzSW5mb3JtYXRpb25bJ3Rlcm1zaWcnXSkgewogICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbignVGhpcyBQSFAgaGFzIGJlZW4gY29tcGlsZWQgd2l0aCAtLWVuYWJsZS1zaWdjaGlsZC4gVGVybSBzaWduYWwgY2Fubm90IGJlIHJldHJpZXZlZC4nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+cHJvY2Vzc0luZm9ybWF0aW9uWyd0ZXJtc2lnJ107CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNoaWxkIHByb2Nlc3MgaGFzIGJlZW4gc3RvcHBlZCBieSBhIHNpZ25hbC4KICAgICAqCiAgICAgKiBJdCBhbHdheXMgcmV0dXJucyBmYWxzZSBvbiBXaW5kb3dzLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgTG9naWNFeGNlcHRpb24gSW4gY2FzZSB0aGUgcHJvY2VzcyBpcyBub3QgdGVybWluYXRlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzQmVlblN0b3BwZWQoKQogICAgewogICAgICAgICR0aGlzLT5yZXF1aXJlUHJvY2Vzc0lzVGVybWluYXRlZChfX0ZVTkNUSU9OX18pOwoKICAgICAgICByZXR1cm4gJHRoaXMtPnByb2Nlc3NJbmZvcm1hdGlvblsnc3RvcHBlZCddOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBzaWduYWwgdGhhdCBjYXVzZWQgdGhlIGNoaWxkIHByb2Nlc3MgdG8gc3RvcCBpdHMgZXhlY3V0aW9uLgogICAgICoKICAgICAqIEl0IGlzIG9ubHkgbWVhbmluZ2Z1bCBpZiBoYXNCZWVuU3RvcHBlZCgpIHJldHVybnMgdHJ1ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICoKICAgICAqIEB0aHJvd3MgTG9naWNFeGNlcHRpb24gSW4gY2FzZSB0aGUgcHJvY2VzcyBpcyBub3QgdGVybWluYXRlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3RvcFNpZ25hbCgpCiAgICB7CiAgICAgICAgJHRoaXMtPnJlcXVpcmVQcm9jZXNzSXNUZXJtaW5hdGVkKF9fRlVOQ1RJT05fXyk7CgogICAgICAgIHJldHVybiAkdGhpcy0+cHJvY2Vzc0luZm9ybWF0aW9uWydzdG9wc2lnJ107CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgdGhlIHByb2Nlc3MgaXMgY3VycmVudGx5IHJ1bm5pbmcuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1J1bm5pbmcoKQogICAgewogICAgICAgIGlmIChzZWxmOjpTVEFUVVNfU1RBUlRFRCAhPT0gJHRoaXMtPnN0YXR1cykgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+dXBkYXRlU3RhdHVzKGZhbHNlKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5wcm9jZXNzSW5mb3JtYXRpb25bJ3J1bm5pbmcnXTsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrcyBpZiB0aGUgcHJvY2VzcyBoYXMgYmVlbiBzdGFydGVkIHdpdGggbm8gcmVnYXJkIHRvIHRoZSBjdXJyZW50IHN0YXRlLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNTdGFydGVkKCkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6U1RBVFVTX1JFQURZICE9ICR0aGlzLT5zdGF0dXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgdGhlIHByb2Nlc3MgaXMgdGVybWluYXRlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzVGVybWluYXRlZCgpCiAgICB7CiAgICAgICAgJHRoaXMtPnVwZGF0ZVN0YXR1cyhmYWxzZSk7CgogICAgICAgIHJldHVybiBzZWxmOjpTVEFUVVNfVEVSTUlOQVRFRCA9PSAkdGhpcy0+c3RhdHVzOwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgcHJvY2VzcyBzdGF0dXMuCiAgICAgKgogICAgICogVGhlIHN0YXR1cyBpcyBvbmUgb2Y6IHJlYWR5LCBzdGFydGVkLCB0ZXJtaW5hdGVkLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdGF0dXMoKQogICAgewogICAgICAgICR0aGlzLT51cGRhdGVTdGF0dXMoZmFsc2UpOwoKICAgICAgICByZXR1cm4gJHRoaXMtPnN0YXR1czsKICAgIH0KCiAgICAvKioKICAgICAqIFN0b3BzIHRoZSBwcm9jZXNzLgogICAgICoKICAgICAqIEBwYXJhbSBpbnR8ZmxvYXQgJHRpbWVvdXQgVGhlIHRpbWVvdXQgaW4gc2Vjb25kcwogICAgICogQHBhcmFtIGludHxudWxsICAkc2lnbmFsICBBIFBPU0lYIHNpZ25hbCB0byBzZW5kIGluIGNhc2UgdGhlIHByb2Nlc3MgaGFzIG5vdCBzdG9wIGF0IHRpbWVvdXQsIGRlZmF1bHQgaXMgU0lHS0lMTCAoOSkKICAgICAqCiAgICAgKiBAcmV0dXJuIGludHxudWxsIFRoZSBleGl0LWNvZGUgb2YgdGhlIHByb2Nlc3Mgb3IgbnVsbCBpZiBpdCdzIG5vdCBydW5uaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzdG9wKGZsb2F0ICR0aW1lb3V0ID0gMTAsID9pbnQgJHNpZ25hbCA9IG51bGwpCiAgICB7CiAgICAgICAgJHRpbWVvdXRNaWNybyA9IG1pY3JvdGltZSh0cnVlKSArICR0aW1lb3V0OwogICAgICAgIGlmICgkdGhpcy0+aXNSdW5uaW5nKCkpIHsKICAgICAgICAgICAgLy8gZ2l2ZW4gU0lHVEVSTSBtYXkgbm90IGJlIGRlZmluZWQgYW5kIHRoYXQgInByb2NfdGVybWluYXRlIiB1c2VzIHRoZSBjb25zdGFudCB2YWx1ZSBhbmQgbm90IHRoZSBjb25zdGFudCBpdHNlbGYsIHdlIHVzZSB0aGUgc2FtZSBoZXJlCiAgICAgICAgICAgICR0aGlzLT5kb1NpZ25hbCgxNSwgZmFsc2UpOwogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICB1c2xlZXAoMTAwMCk7CiAgICAgICAgICAgIH0gd2hpbGUgKCR0aGlzLT5pc1J1bm5pbmcoKSAmJiBtaWNyb3RpbWUodHJ1ZSkgPCAkdGltZW91dE1pY3JvKTsKCiAgICAgICAgICAgIGlmICgkdGhpcy0+aXNSdW5uaW5nKCkpIHsKICAgICAgICAgICAgICAgIC8vIEF2b2lkIGV4Y2VwdGlvbiBoZXJlOiBwcm9jZXNzIGlzIHN1cHBvc2VkIHRvIGJlIHJ1bm5pbmcsIGJ1dCBpdCBtaWdodCBoYXZlIHN0b3BwZWQganVzdAogICAgICAgICAgICAgICAgLy8gYWZ0ZXIgdGhpcyBsaW5lLiBJbiBhbnkgY2FzZSwgbGV0J3Mgc2lsZW50bHkgZGlzY2FyZCB0aGUgZXJyb3IsIHdlIGNhbm5vdCBkbyBhbnl0aGluZy4KICAgICAgICAgICAgICAgICR0aGlzLT5kb1NpZ25hbCgkc2lnbmFsID86IDksIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT5pc1J1bm5pbmcoKSkgewogICAgICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPmZhbGxiYWNrU3RhdHVzWydwaWQnXSkpIHsKICAgICAgICAgICAgICAgIHVuc2V0KCR0aGlzLT5mYWxsYmFja1N0YXR1c1sncGlkJ10pOwoKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+c3RvcCgwLCAkc2lnbmFsKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdGhpcy0+Y2xvc2UoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+ZXhpdGNvZGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGRzIGEgbGluZSB0byB0aGUgU1RET1VUIHN0cmVhbS4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZE91dHB1dChzdHJpbmcgJGxpbmUpCiAgICB7CiAgICAgICAgJHRoaXMtPmxhc3RPdXRwdXRUaW1lID0gbWljcm90aW1lKHRydWUpOwoKICAgICAgICBmc2VlaygkdGhpcy0+c3Rkb3V0LCAwLCBcU0VFS19FTkQpOwogICAgICAgIGZ3cml0ZSgkdGhpcy0+c3Rkb3V0LCAkbGluZSk7CiAgICAgICAgZnNlZWsoJHRoaXMtPnN0ZG91dCwgJHRoaXMtPmluY3JlbWVudGFsT3V0cHV0T2Zmc2V0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZHMgYSBsaW5lIHRvIHRoZSBTVERFUlIgc3RyZWFtLgogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkRXJyb3JPdXRwdXQoc3RyaW5nICRsaW5lKQogICAgewogICAgICAgICR0aGlzLT5sYXN0T3V0cHV0VGltZSA9IG1pY3JvdGltZSh0cnVlKTsKCiAgICAgICAgZnNlZWsoJHRoaXMtPnN0ZGVyciwgMCwgXFNFRUtfRU5EKTsKICAgICAgICBmd3JpdGUoJHRoaXMtPnN0ZGVyciwgJGxpbmUpOwogICAgICAgIGZzZWVrKCR0aGlzLT5zdGRlcnIsICR0aGlzLT5pbmNyZW1lbnRhbEVycm9yT3V0cHV0T2Zmc2V0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldHMgdGhlIGxhc3Qgb3V0cHV0IHRpbWUgaW4gc2Vjb25kcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldExhc3RPdXRwdXRUaW1lKCk6ID9mbG9hdAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bGFzdE91dHB1dFRpbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBjb21tYW5kIGxpbmUgdG8gYmUgZXhlY3V0ZWQuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbW1hbmRMaW5lKCkKICAgIHsKICAgICAgICByZXR1cm4gXGlzX2FycmF5KCR0aGlzLT5jb21tYW5kbGluZSkgPyBpbXBsb2RlKCcgJywgYXJyYXlfbWFwKFskdGhpcywgJ2VzY2FwZUFyZ3VtZW50J10sICR0aGlzLT5jb21tYW5kbGluZSkpIDogJHRoaXMtPmNvbW1hbmRsaW5lOwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgcHJvY2VzcyB0aW1lb3V0IGluIHNlY29uZHMgKG1heC4gcnVudGltZSkuCiAgICAgKgogICAgICogQHJldHVybiBmbG9hdHxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lb3V0KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRpbWVvdXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBwcm9jZXNzIGlkbGUgdGltZW91dCBpbiBzZWNvbmRzIChtYXguIHRpbWUgc2luY2UgbGFzdCBvdXRwdXQpLgogICAgICoKICAgICAqIEByZXR1cm4gZmxvYXR8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SWRsZVRpbWVvdXQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aWRsZVRpbWVvdXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBwcm9jZXNzIHRpbWVvdXQgKG1heC4gcnVudGltZSkgaW4gc2Vjb25kcy4KICAgICAqCiAgICAgKiBUbyBkaXNhYmxlIHRoZSB0aW1lb3V0LCBzZXQgdGhpcyB2YWx1ZSB0byBudWxsLgogICAgICoKICAgICAqIEByZXR1cm4gJHRoaXMKICAgICAqCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgdGltZW91dCBpcyBuZWdhdGl2ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VGltZW91dCg/ZmxvYXQgJHRpbWVvdXQpCiAgICB7CiAgICAgICAgJHRoaXMtPnRpbWVvdXQgPSAkdGhpcy0+dmFsaWRhdGVUaW1lb3V0KCR0aW1lb3V0KTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgcHJvY2VzcyBpZGxlIHRpbWVvdXQgKG1heC4gdGltZSBzaW5jZSBsYXN0IG91dHB1dCkgaW4gc2Vjb25kcy4KICAgICAqCiAgICAgKiBUbyBkaXNhYmxlIHRoZSB0aW1lb3V0LCBzZXQgdGhpcyB2YWx1ZSB0byBudWxsLgogICAgICoKICAgICAqIEByZXR1cm4gJHRoaXMKICAgICAqCiAgICAgKiBAdGhyb3dzIExvZ2ljRXhjZXB0aW9uICAgICAgICAgICBpZiB0aGUgb3V0cHV0IGlzIGRpc2FibGVkCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgdGltZW91dCBpcyBuZWdhdGl2ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SWRsZVRpbWVvdXQoP2Zsb2F0ICR0aW1lb3V0KQogICAgewogICAgICAgIGlmIChudWxsICE9PSAkdGltZW91dCAmJiAkdGhpcy0+b3V0cHV0RGlzYWJsZWQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IExvZ2ljRXhjZXB0aW9uKCdJZGxlIHRpbWVvdXQgY2Fubm90IGJlIHNldCB3aGlsZSB0aGUgb3V0cHV0IGlzIGRpc2FibGVkLicpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmlkbGVUaW1lb3V0ID0gJHRoaXMtPnZhbGlkYXRlVGltZW91dCgkdGltZW91dCk7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIFRUWSBtb2RlLgogICAgICoKICAgICAqIEByZXR1cm4gJHRoaXMKICAgICAqCiAgICAgKiBAdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gSW4gY2FzZSB0aGUgVFRZIG1vZGUgaXMgbm90IHN1cHBvcnRlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VHR5KGJvb2wgJHR0eSkKICAgIHsKICAgICAgICBpZiAoJ1xcJyA9PT0gXERJUkVDVE9SWV9TRVBBUkFUT1IgJiYgJHR0eSkgewogICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbignVFRZIG1vZGUgaXMgbm90IHN1cHBvcnRlZCBvbiBXaW5kb3dzIHBsYXRmb3JtLicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0dHkgJiYgIXNlbGY6OmlzVHR5U3VwcG9ydGVkKCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oJ1RUWSBtb2RlIHJlcXVpcmVzIC9kZXYvdHR5IHRvIGJlIHJlYWQvd3JpdGFibGUuJyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+dHR5ID0gJHR0eTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2tzIGlmIHRoZSBUVFkgbW9kZSBpcyBlbmFibGVkLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNUdHkoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dHR5OwogICAgfQoKICAgIC8qKgogICAgICogU2V0cyBQVFkgbW9kZS4KICAgICAqCiAgICAgKiBAcmV0dXJuICR0aGlzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQdHkoYm9vbCAkYm9vbCkKICAgIHsKICAgICAgICAkdGhpcy0+cHR5ID0gJGJvb2w7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgUFRZIHN0YXRlLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNQdHkoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cHR5OwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgd29ya2luZyBkaXJlY3RvcnkuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0V29ya2luZ0RpcmVjdG9yeSgpCiAgICB7CiAgICAgICAgaWYgKG51bGwgPT09ICR0aGlzLT5jd2QpIHsKICAgICAgICAgICAgLy8gZ2V0Y3dkKCkgd2lsbCByZXR1cm4gZmFsc2UgaWYgYW55IG9uZSBvZiB0aGUgcGFyZW50IGRpcmVjdG9yaWVzIGRvZXMgbm90IGhhdmUKICAgICAgICAgICAgLy8gdGhlIHJlYWRhYmxlIG9yIHNlYXJjaCBtb2RlIHNldCwgZXZlbiBpZiB0aGUgY3VycmVudCBkaXJlY3RvcnkgZG9lcwogICAgICAgICAgICByZXR1cm4gZ2V0Y3dkKCkgPzogbnVsbDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+Y3dkOwogICAgfQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KICAgICAqCiAgICAgKiBAcmV0dXJuICR0aGlzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRXb3JraW5nRGlyZWN0b3J5KHN0cmluZyAkY3dkKQogICAgewogICAgICAgICR0aGlzLT5jd2QgPSAkY3dkOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RW52KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmVudjsKICAgIH0KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXk8c3RyaW5nfFxTdHJpbmdhYmxlPiAkZW52IFRoZSBuZXcgZW52aXJvbm1lbnQgdmFyaWFibGVzCiAgICAgKgogICAgICogQHJldHVybiAkdGhpcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0RW52KGFycmF5ICRlbnYpCiAgICB7CiAgICAgICAgJHRoaXMtPmVudiA9ICRlbnY7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIEdldHMgdGhlIFByb2Nlc3MgaW5wdXQuCiAgICAgKgogICAgICogQHJldHVybiByZXNvdXJjZXxzdHJpbmd8XEl0ZXJhdG9yfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldElucHV0KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmlucHV0OwogICAgfQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgaW5wdXQuCiAgICAgKgogICAgICogVGhpcyBjb250ZW50IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSB1bmRlcmx5aW5nIHByb2Nlc3Mgc3RhbmRhcmQgaW5wdXQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xpbnR8ZmxvYXR8Ym9vbHxyZXNvdXJjZXxcVHJhdmVyc2FibGV8bnVsbCAkaW5wdXQgVGhlIGNvbnRlbnQKICAgICAqCiAgICAgKiBAcmV0dXJuICR0aGlzCiAgICAgKgogICAgICogQHRocm93cyBMb2dpY0V4Y2VwdGlvbiBJbiBjYXNlIHRoZSBwcm9jZXNzIGlzIHJ1bm5pbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldElucHV0KCRpbnB1dCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmlzUnVubmluZygpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBMb2dpY0V4Y2VwdGlvbignSW5wdXQgY2Fubm90IGJlIHNldCB3aGlsZSB0aGUgcHJvY2VzcyBpcyBydW5uaW5nLicpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmlucHV0ID0gUHJvY2Vzc1V0aWxzOjp2YWxpZGF0ZUlucHV0KF9fTUVUSE9EX18sICRpbnB1dCk7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIFBlcmZvcm1zIGEgY2hlY2sgYmV0d2VlbiB0aGUgdGltZW91dCBkZWZpbml0aW9uIGFuZCB0aGUgdGltZSB0aGUgcHJvY2VzcyBzdGFydGVkLgogICAgICoKICAgICAqIEluIGNhc2UgeW91IHJ1biBhIGJhY2tncm91bmQgcHJvY2VzcyAod2l0aCB0aGUgc3RhcnQgbWV0aG9kKSwgeW91IHNob3VsZAogICAgICogdHJpZ2dlciB0aGlzIG1ldGhvZCByZWd1bGFybHkgdG8gZW5zdXJlIHRoZSBwcm9jZXNzIHRpbWVvdXQKICAgICAqCiAgICAgKiBAdGhyb3dzIFByb2Nlc3NUaW1lZE91dEV4Y2VwdGlvbiBJbiBjYXNlIHRoZSB0aW1lb3V0IHdhcyByZWFjaGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjaGVja1RpbWVvdXQoKQogICAgewogICAgICAgIGlmIChzZWxmOjpTVEFUVVNfU1RBUlRFRCAhPT0gJHRoaXMtPnN0YXR1cykgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAobnVsbCAhPT0gJHRoaXMtPnRpbWVvdXQgJiYgJHRoaXMtPnRpbWVvdXQgPCBtaWNyb3RpbWUodHJ1ZSkgLSAkdGhpcy0+c3RhcnR0aW1lKSB7CiAgICAgICAgICAgICR0aGlzLT5zdG9wKDApOwoKICAgICAgICAgICAgdGhyb3cgbmV3IFByb2Nlc3NUaW1lZE91dEV4Y2VwdGlvbigkdGhpcywgUHJvY2Vzc1RpbWVkT3V0RXhjZXB0aW9uOjpUWVBFX0dFTkVSQUwpOwogICAgICAgIH0KCiAgICAgICAgaWYgKG51bGwgIT09ICR0aGlzLT5pZGxlVGltZW91dCAmJiAkdGhpcy0+aWRsZVRpbWVvdXQgPCBtaWNyb3RpbWUodHJ1ZSkgLSAkdGhpcy0+bGFzdE91dHB1dFRpbWUpIHsKICAgICAgICAgICAgJHRoaXMtPnN0b3AoMCk7CgogICAgICAgICAgICB0aHJvdyBuZXcgUHJvY2Vzc1RpbWVkT3V0RXhjZXB0aW9uKCR0aGlzLCBQcm9jZXNzVGltZWRPdXRFeGNlcHRpb246OlRZUEVfSURMRSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHRocm93cyBMb2dpY0V4Y2VwdGlvbiBpbiBjYXNlIHByb2Nlc3MgaXMgbm90IHN0YXJ0ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0YXJ0VGltZSgpOiBmbG9hdAogICAgewogICAgICAgIGlmICghJHRoaXMtPmlzU3RhcnRlZCgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBMb2dpY0V4Y2VwdGlvbignU3RhcnQgdGltZSBpcyBvbmx5IGF2YWlsYWJsZSBhZnRlciBwcm9jZXNzIHN0YXJ0LicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5zdGFydHRpbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZWZpbmVzIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgdW5kZXJseWluZyBwcm9jX29wZW4oKS4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9wcm9jX29wZW4gZm9yIHRoZSBvcHRpb25zIHN1cHBvcnRlZCBieSBQSFAuCiAgICAgKgogICAgICogRW5hYmxpbmcgdGhlICJjcmVhdGVfbmV3X2NvbnNvbGUiIG9wdGlvbiBhbGxvd3MgYSBzdWJwcm9jZXNzIHRvIGNvbnRpbnVlCiAgICAgKiB0byBydW4gYWZ0ZXIgdGhlIG1haW4gcHJvY2VzcyBleGl0ZWQsIG9uIGJvdGggV2luZG93cyBhbmQgKm5peAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0T3B0aW9ucyhhcnJheSAkb3B0aW9ucykKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmlzUnVubmluZygpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdTZXR0aW5nIG9wdGlvbnMgd2hpbGUgdGhlIHByb2Nlc3MgaXMgcnVubmluZyBpcyBub3QgcG9zc2libGUuJyk7CiAgICAgICAgfQoKICAgICAgICAkZGVmYXVsdE9wdGlvbnMgPSAkdGhpcy0+b3B0aW9uczsKICAgICAgICAkZXhpc3RpbmdPcHRpb25zID0gWydibG9ja2luZ19waXBlcycsICdjcmVhdGVfcHJvY2Vzc19ncm91cCcsICdjcmVhdGVfbmV3X2NvbnNvbGUnXTsKCiAgICAgICAgZm9yZWFjaCAoJG9wdGlvbnMgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgaWYgKCFcaW5fYXJyYXkoJGtleSwgJGV4aXN0aW5nT3B0aW9ucykpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5vcHRpb25zID0gJGRlZmF1bHRPcHRpb25zOwogICAgICAgICAgICAgICAgdGhyb3cgbmV3IExvZ2ljRXhjZXB0aW9uKHNwcmludGYoJ0ludmFsaWQgb3B0aW9uICIlcyIgcGFzc2VkIHRvICIlcygpIi4gU3VwcG9ydGVkIG9wdGlvbnMgYXJlICIlcyIuJywgJGtleSwgX19NRVRIT0RfXywgaW1wbG9kZSgnIiwgIicsICRleGlzdGluZ09wdGlvbnMpKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPm9wdGlvbnNbJGtleV0gPSAkdmFsdWU7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB3aGV0aGVyIFRUWSBpcyBzdXBwb3J0ZWQgb24gdGhlIGN1cnJlbnQgb3BlcmF0aW5nIHN5c3RlbS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc1R0eVN1cHBvcnRlZCgpOiBib29sCiAgICB7CiAgICAgICAgc3RhdGljICRpc1R0eVN1cHBvcnRlZDsKCiAgICAgICAgaWYgKG51bGwgPT09ICRpc1R0eVN1cHBvcnRlZCkgewogICAgICAgICAgICAkaXNUdHlTdXBwb3J0ZWQgPSAoYm9vbCkgQHByb2Nfb3BlbignZWNobyAxID4vZGV2L251bGwnLCBbWydmaWxlJywgJy9kZXYvdHR5JywgJ3InXSwgWydmaWxlJywgJy9kZXYvdHR5JywgJ3cnXSwgWydmaWxlJywgJy9kZXYvdHR5JywgJ3cnXV0sICRwaXBlcyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGlzVHR5U3VwcG9ydGVkOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB3aGV0aGVyIFBUWSBpcyBzdXBwb3J0ZWQgb24gdGhlIGN1cnJlbnQgb3BlcmF0aW5nIHN5c3RlbS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc1B0eVN1cHBvcnRlZCgpCiAgICB7CiAgICAgICAgc3RhdGljICRyZXN1bHQ7CgogICAgICAgIGlmIChudWxsICE9PSAkcmVzdWx0KSB7CiAgICAgICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgICAgIH0KCiAgICAgICAgaWYgKCdcXCcgPT09IFxESVJFQ1RPUllfU0VQQVJBVE9SKSB7CiAgICAgICAgICAgIHJldHVybiAkcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdCA9IChib29sKSBAcHJvY19vcGVuKCdlY2hvIDEgPi9kZXYvbnVsbCcsIFtbJ3B0eSddLCBbJ3B0eSddLCBbJ3B0eSddXSwgJHBpcGVzKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgdGhlIGRlc2NyaXB0b3JzIG5lZWRlZCBieSB0aGUgcHJvY19vcGVuLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldERlc2NyaXB0b3JzKCk6IGFycmF5CiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5pbnB1dCBpbnN0YW5jZW9mIFxJdGVyYXRvcikgewogICAgICAgICAgICAkdGhpcy0+aW5wdXQtPnJld2luZCgpOwogICAgICAgIH0KICAgICAgICBpZiAoJ1xcJyA9PT0gXERJUkVDVE9SWV9TRVBBUkFUT1IpIHsKICAgICAgICAgICAgJHRoaXMtPnByb2Nlc3NQaXBlcyA9IG5ldyBXaW5kb3dzUGlwZXMoJHRoaXMtPmlucHV0LCAhJHRoaXMtPm91dHB1dERpc2FibGVkIHx8ICR0aGlzLT5oYXNDYWxsYmFjayk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPnByb2Nlc3NQaXBlcyA9IG5ldyBVbml4UGlwZXMoJHRoaXMtPmlzVHR5KCksICR0aGlzLT5pc1B0eSgpLCAkdGhpcy0+aW5wdXQsICEkdGhpcy0+b3V0cHV0RGlzYWJsZWQgfHwgJHRoaXMtPmhhc0NhbGxiYWNrKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+cHJvY2Vzc1BpcGVzLT5nZXREZXNjcmlwdG9ycygpOwogICAgfQoKICAgIC8qKgogICAgICogQnVpbGRzIHVwIHRoZSBjYWxsYmFjayB1c2VkIGJ5IHdhaXQoKS4KICAgICAqCiAgICAgKiBUaGUgY2FsbGJhY2tzIGFkZHMgYWxsIG9jY3VycmVkIG91dHB1dCB0byB0aGUgc3BlY2lmaWMgYnVmZmVyIGFuZCBjYWxscwogICAgICogdGhlIHVzZXIgY2FsbGJhY2sgKGlmIHByZXNlbnQpIHdpdGggdGhlIHJlY2VpdmVkIG91dHB1dC4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGV8bnVsbCAkY2FsbGJhY2sgVGhlIHVzZXIgZGVmaW5lZCBQSFAgY2FsbGJhY2sKICAgICAqCiAgICAgKiBAcmV0dXJuIFxDbG9zdXJlCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBidWlsZENhbGxiYWNrKD9jYWxsYWJsZSAkY2FsbGJhY2sgPSBudWxsKQogICAgewogICAgICAgIGlmICgkdGhpcy0+b3V0cHV0RGlzYWJsZWQpIHsKICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgkdHlwZSwgJGRhdGEpIHVzZSAoJGNhbGxiYWNrKTogYm9vbCB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbCAhPT0gJGNhbGxiYWNrICYmICRjYWxsYmFjaygkdHlwZSwgJGRhdGEpOwogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgJG91dCA9IHNlbGY6Ok9VVDsKCiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgkdHlwZSwgJGRhdGEpIHVzZSAoJGNhbGxiYWNrLCAkb3V0KTogYm9vbCB7CiAgICAgICAgICAgIGlmICgkb3V0ID09ICR0eXBlKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+YWRkT3V0cHV0KCRkYXRhKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0aGlzLT5hZGRFcnJvck91dHB1dCgkZGF0YSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBudWxsICE9PSAkY2FsbGJhY2sgJiYgJGNhbGxiYWNrKCR0eXBlLCAkZGF0YSk7CiAgICAgICAgfTsKICAgIH0KCiAgICAvKioKICAgICAqIFVwZGF0ZXMgdGhlIHN0YXR1cyBvZiB0aGUgcHJvY2VzcywgcmVhZHMgcGlwZXMuCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJGJsb2NraW5nIFdoZXRoZXIgdG8gdXNlIGEgYmxvY2tpbmcgcmVhZCBjYWxsCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiB1cGRhdGVTdGF0dXMoYm9vbCAkYmxvY2tpbmcpCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OlNUQVRVU19TVEFSVEVEICE9PSAkdGhpcy0+c3RhdHVzKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5wcm9jZXNzSW5mb3JtYXRpb24gPSBwcm9jX2dldF9zdGF0dXMoJHRoaXMtPnByb2Nlc3MpOwogICAgICAgICRydW5uaW5nID0gJHRoaXMtPnByb2Nlc3NJbmZvcm1hdGlvblsncnVubmluZyddOwoKICAgICAgICAvLyBJbiBQSFAgPCA4LjMsICJwcm9jX2dldF9zdGF0dXMiIG9ubHkgcmV0dXJucyB0aGUgY29ycmVjdCBleGl0IHN0YXR1cyBvbiB0aGUgZmlyc3QgY2FsbC4KICAgICAgICAvLyBTdWJzZXF1ZW50IGNhbGxzIHJldHVybiAtMSBhcyB0aGUgcHJvY2VzcyBpcyBkaXNjYXJkZWQuIFRoaXMgd29ya2Fyb3VuZCBjYWNoZXMgdGhlIGZpcnN0CiAgICAgICAgLy8gcmV0cmlldmVkIGV4aXQgc3RhdHVzIGZvciBjb25zaXN0ZW50IHJlc3VsdHMgaW4gbGF0ZXIgY2FsbHMsIG1pbWlja2luZyBQSFAgOC4zIGJlaGF2aW9yLgogICAgICAgIGlmIChcUEhQX1ZFUlNJT05fSUQgPCA4MDMwMCkgewogICAgICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5jYWNoZWRFeGl0Q29kZSkgJiYgISRydW5uaW5nICYmIC0xICE9PSAkdGhpcy0+cHJvY2Vzc0luZm9ybWF0aW9uWydleGl0Y29kZSddKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y2FjaGVkRXhpdENvZGUgPSAkdGhpcy0+cHJvY2Vzc0luZm9ybWF0aW9uWydleGl0Y29kZSddOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPmNhY2hlZEV4aXRDb2RlKSAmJiAhJHJ1bm5pbmcgJiYgLTEgPT09ICR0aGlzLT5wcm9jZXNzSW5mb3JtYXRpb25bJ2V4aXRjb2RlJ10pIHsKICAgICAgICAgICAgICAgICR0aGlzLT5wcm9jZXNzSW5mb3JtYXRpb25bJ2V4aXRjb2RlJ10gPSAkdGhpcy0+Y2FjaGVkRXhpdENvZGU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICR0aGlzLT5yZWFkUGlwZXMoJHJ1bm5pbmcgJiYgJGJsb2NraW5nLCAnXFwnICE9PSBcRElSRUNUT1JZX1NFUEFSQVRPUiB8fCAhJHJ1bm5pbmcpOwoKICAgICAgICBpZiAoJHRoaXMtPmZhbGxiYWNrU3RhdHVzICYmICR0aGlzLT5pc1NpZ2NoaWxkRW5hYmxlZCgpKSB7CiAgICAgICAgICAgICR0aGlzLT5wcm9jZXNzSW5mb3JtYXRpb24gPSAkdGhpcy0+ZmFsbGJhY2tTdGF0dXMgKyAkdGhpcy0+cHJvY2Vzc0luZm9ybWF0aW9uOwogICAgICAgIH0KCiAgICAgICAgaWYgKCEkcnVubmluZykgewogICAgICAgICAgICAkdGhpcy0+Y2xvc2UoKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgUEhQIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggdGhlICctLWVuYWJsZS1zaWdjaGlsZCcgb3B0aW9uIG9yIG5vdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGlzU2lnY2hpbGRFbmFibGVkKCkKICAgIHsKICAgICAgICBpZiAobnVsbCAhPT0gc2VsZjo6JHNpZ2NoaWxkKSB7CiAgICAgICAgICAgIHJldHVybiBzZWxmOjokc2lnY2hpbGQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoIVxmdW5jdGlvbl9leGlzdHMoJ3BocGluZm8nKSkgewogICAgICAgICAgICByZXR1cm4gc2VsZjo6JHNpZ2NoaWxkID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBvYl9zdGFydCgpOwogICAgICAgIHBocGluZm8oXElORk9fR0VORVJBTCk7CgogICAgICAgIHJldHVybiBzZWxmOjokc2lnY2hpbGQgPSBzdHJfY29udGFpbnMob2JfZ2V0X2NsZWFuKCksICctLWVuYWJsZS1zaWdjaGlsZCcpOwogICAgfQoKICAgIC8qKgogICAgICogUmVhZHMgcGlwZXMgZm9yIHRoZSBmcmVzaGVzdCBvdXRwdXQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY2FsbGVyICAgVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IG5lZWRzIGZyZXNoIG91dHB1dHMKICAgICAqIEBwYXJhbSBib29sICAgJGJsb2NraW5nIFdoZXRoZXIgdG8gdXNlIGJsb2NraW5nIGNhbGxzIG9yIG5vdAogICAgICoKICAgICAqIEB0aHJvd3MgTG9naWNFeGNlcHRpb24gaW4gY2FzZSBvdXRwdXQgaGFzIGJlZW4gZGlzYWJsZWQgb3IgcHJvY2VzcyBpcyBub3Qgc3RhcnRlZAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlYWRQaXBlc0Zvck91dHB1dChzdHJpbmcgJGNhbGxlciwgYm9vbCAkYmxvY2tpbmcgPSBmYWxzZSkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPm91dHB1dERpc2FibGVkKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBMb2dpY0V4Y2VwdGlvbignT3V0cHV0IGhhcyBiZWVuIGRpc2FibGVkLicpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnJlcXVpcmVQcm9jZXNzSXNTdGFydGVkKCRjYWxsZXIpOwoKICAgICAgICAkdGhpcy0+dXBkYXRlU3RhdHVzKCRibG9ja2luZyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBWYWxpZGF0ZXMgYW5kIHJldHVybnMgdGhlIGZpbHRlcmVkIHRpbWVvdXQuCiAgICAgKgogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIGdpdmVuIHRpbWVvdXQgaXMgYSBuZWdhdGl2ZSBudW1iZXIKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiB2YWxpZGF0ZVRpbWVvdXQoP2Zsb2F0ICR0aW1lb3V0KTogP2Zsb2F0CiAgICB7CiAgICAgICAgJHRpbWVvdXQgPSAoZmxvYXQpICR0aW1lb3V0OwoKICAgICAgICBpZiAoMC4wID09PSAkdGltZW91dCkgewogICAgICAgICAgICAkdGltZW91dCA9IG51bGw7CiAgICAgICAgfSBlbHNlaWYgKCR0aW1lb3V0IDwgMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGUgdGltZW91dCB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgcG9zaXRpdmUgaW50ZWdlciBvciBmbG9hdCBudW1iZXIuJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRpbWVvdXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZWFkcyBwaXBlcywgZXhlY3V0ZXMgY2FsbGJhY2suCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJGJsb2NraW5nIFdoZXRoZXIgdG8gdXNlIGJsb2NraW5nIGNhbGxzIG9yIG5vdAogICAgICogQHBhcmFtIGJvb2wgJGNsb3NlICAgIFdoZXRoZXIgdG8gY2xvc2UgZmlsZSBoYW5kbGVzIG9yIG5vdAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlYWRQaXBlcyhib29sICRibG9ja2luZywgYm9vbCAkY2xvc2UpCiAgICB7CiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wcm9jZXNzUGlwZXMtPnJlYWRBbmRXcml0ZSgkYmxvY2tpbmcsICRjbG9zZSk7CgogICAgICAgICRjYWxsYmFjayA9ICR0aGlzLT5jYWxsYmFjazsKICAgICAgICBmb3JlYWNoICgkcmVzdWx0IGFzICR0eXBlID0+ICRkYXRhKSB7CiAgICAgICAgICAgIGlmICgzICE9PSAkdHlwZSkgewogICAgICAgICAgICAgICAgJGNhbGxiYWNrKHNlbGY6OlNURE9VVCA9PT0gJHR5cGUgPyBzZWxmOjpPVVQgOiBzZWxmOjpFUlIsICRkYXRhKTsKICAgICAgICAgICAgfSBlbHNlaWYgKCFpc3NldCgkdGhpcy0+ZmFsbGJhY2tTdGF0dXNbJ3NpZ25hbGVkJ10pKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+ZmFsbGJhY2tTdGF0dXNbJ2V4aXRjb2RlJ10gPSAoaW50KSAkZGF0YTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIENsb3NlcyBwcm9jZXNzIHJlc291cmNlLCBjbG9zZXMgZmlsZSBoYW5kbGVzLCBzZXRzIHRoZSBleGl0Y29kZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludCBUaGUgZXhpdGNvZGUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBjbG9zZSgpOiBpbnQKICAgIHsKICAgICAgICAkdGhpcy0+cHJvY2Vzc1BpcGVzLT5jbG9zZSgpOwogICAgICAgIGlmICgkdGhpcy0+cHJvY2VzcykgewogICAgICAgICAgICBwcm9jX2Nsb3NlKCR0aGlzLT5wcm9jZXNzKTsKICAgICAgICAgICAgJHRoaXMtPnByb2Nlc3MgPSBudWxsOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+ZXhpdGNvZGUgPSAkdGhpcy0+cHJvY2Vzc0luZm9ybWF0aW9uWydleGl0Y29kZSddOwogICAgICAgICR0aGlzLT5zdGF0dXMgPSBzZWxmOjpTVEFUVVNfVEVSTUlOQVRFRDsKCiAgICAgICAgaWYgKC0xID09PSAkdGhpcy0+ZXhpdGNvZGUpIHsKICAgICAgICAgICAgaWYgKCR0aGlzLT5wcm9jZXNzSW5mb3JtYXRpb25bJ3NpZ25hbGVkJ10gJiYgMCA8ICR0aGlzLT5wcm9jZXNzSW5mb3JtYXRpb25bJ3Rlcm1zaWcnXSkgewogICAgICAgICAgICAgICAgLy8gaWYgcHJvY2VzcyBoYXMgYmVlbiBzaWduYWxlZCwgbm8gZXhpdGNvZGUgYnV0IGEgdmFsaWQgdGVybXNpZywgYXBwbHkgVW5peCBjb252ZW50aW9uCiAgICAgICAgICAgICAgICAkdGhpcy0+ZXhpdGNvZGUgPSAxMjggKyAkdGhpcy0+cHJvY2Vzc0luZm9ybWF0aW9uWyd0ZXJtc2lnJ107CiAgICAgICAgICAgIH0gZWxzZWlmICgkdGhpcy0+aXNTaWdjaGlsZEVuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPnByb2Nlc3NJbmZvcm1hdGlvblsnc2lnbmFsZWQnXSA9IHRydWU7CiAgICAgICAgICAgICAgICAkdGhpcy0+cHJvY2Vzc0luZm9ybWF0aW9uWyd0ZXJtc2lnJ10gPSAtMTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gRnJlZSBtZW1vcnkgZnJvbSBzZWxmLXJlZmVyZW5jZSBjYWxsYmFjayBjcmVhdGVkIGJ5IGJ1aWxkQ2FsbGJhY2sKICAgICAgICAvLyBEb2luZyBzbyBpbiBvdGhlciBjb250ZXh0cyBsaWtlIF9fZGVzdHJ1Y3Qgb3IgYnkgZ2FyYmFnZSBjb2xsZWN0b3IgaXMgaW5lZmZlY3RpdmUKICAgICAgICAvLyBOb3cgcGlwZXMgYXJlIGNsb3NlZCwgc28gdGhlIGNhbGxiYWNrIGlzIG5vIGxvbmdlciBuZWNlc3NhcnkKICAgICAgICAkdGhpcy0+Y2FsbGJhY2sgPSBudWxsOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmV4aXRjb2RlOwogICAgfQoKICAgIC8qKgogICAgICogUmVzZXRzIGRhdGEgcmVsYXRlZCB0byB0aGUgbGF0ZXN0IHJ1biBvZiB0aGUgcHJvY2Vzcy4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiByZXNldFByb2Nlc3NEYXRhKCkKICAgIHsKICAgICAgICAkdGhpcy0+c3RhcnR0aW1lID0gbnVsbDsKICAgICAgICAkdGhpcy0+Y2FsbGJhY2sgPSBudWxsOwogICAgICAgICR0aGlzLT5leGl0Y29kZSA9IG51bGw7CiAgICAgICAgJHRoaXMtPmZhbGxiYWNrU3RhdHVzID0gW107CiAgICAgICAgJHRoaXMtPnByb2Nlc3NJbmZvcm1hdGlvbiA9IG51bGw7CiAgICAgICAgJHRoaXMtPnN0ZG91dCA9IGZvcGVuKCdwaHA6Ly90ZW1wL21heG1lbW9yeTonLigxMDI0ICogMTAyNCksICd3KycpOwogICAgICAgICR0aGlzLT5zdGRlcnIgPSBmb3BlbigncGhwOi8vdGVtcC9tYXhtZW1vcnk6Jy4oMTAyNCAqIDEwMjQpLCAndysnKTsKICAgICAgICAkdGhpcy0+cHJvY2VzcyA9IG51bGw7CiAgICAgICAgJHRoaXMtPmxhdGVzdFNpZ25hbCA9IG51bGw7CiAgICAgICAgJHRoaXMtPnN0YXR1cyA9IHNlbGY6OlNUQVRVU19SRUFEWTsKICAgICAgICAkdGhpcy0+aW5jcmVtZW50YWxPdXRwdXRPZmZzZXQgPSAwOwogICAgICAgICR0aGlzLT5pbmNyZW1lbnRhbEVycm9yT3V0cHV0T2Zmc2V0ID0gMDsKICAgIH0KCiAgICAvKioKICAgICAqIFNlbmRzIGEgUE9TSVggc2lnbmFsIHRvIHRoZSBwcm9jZXNzLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgICRzaWduYWwgICAgICAgICBBIHZhbGlkIFBPU0lYIHNpZ25hbCAoc2VlIGh0dHBzOi8vcGhwLm5ldC9wY250bC5jb25zdGFudHMpCiAgICAgKiBAcGFyYW0gYm9vbCAkdGhyb3dFeGNlcHRpb24gV2hldGhlciB0byB0aHJvdyBleGNlcHRpb24gaW4gY2FzZSBzaWduYWwgZmFpbGVkCiAgICAgKgogICAgICogQHRocm93cyBMb2dpY0V4Y2VwdGlvbiAgIEluIGNhc2UgdGhlIHByb2Nlc3MgaXMgbm90IHJ1bm5pbmcKICAgICAqIEB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiBJbiBjYXNlIC0tZW5hYmxlLXNpZ2NoaWxkIGlzIGFjdGl2YXRlZCBhbmQgdGhlIHByb2Nlc3MgY2FuJ3QgYmUga2lsbGVkCiAgICAgKiBAdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gSW4gY2FzZSBvZiBmYWlsdXJlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZG9TaWduYWwoaW50ICRzaWduYWwsIGJvb2wgJHRocm93RXhjZXB0aW9uKTogYm9vbAogICAgewogICAgICAgIGlmIChudWxsID09PSAkcGlkID0gJHRoaXMtPmdldFBpZCgpKSB7CiAgICAgICAgICAgIGlmICgkdGhyb3dFeGNlcHRpb24pIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBMb2dpY0V4Y2VwdGlvbignQ2Fubm90IHNlbmQgc2lnbmFsIG9uIGEgbm9uIHJ1bm5pbmcgcHJvY2Vzcy4nKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgaWYgKCdcXCcgPT09IFxESVJFQ1RPUllfU0VQQVJBVE9SKSB7CiAgICAgICAgICAgIGV4ZWMoc3ByaW50ZigndGFza2tpbGwgL0YgL1QgL1BJRCAlZCAyPiYxJywgJHBpZCksICRvdXRwdXQsICRleGl0Q29kZSk7CiAgICAgICAgICAgIGlmICgkZXhpdENvZGUgJiYgJHRoaXMtPmlzUnVubmluZygpKSB7CiAgICAgICAgICAgICAgICBpZiAoJHRocm93RXhjZXB0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oc3ByaW50ZignVW5hYmxlIHRvIGtpbGwgdGhlIHByb2Nlc3MgKCVzKS4nLCBpbXBsb2RlKCcgJywgJG91dHB1dCkpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoISR0aGlzLT5pc1NpZ2NoaWxkRW5hYmxlZCgpKSB7CiAgICAgICAgICAgICAgICAkb2sgPSBAcHJvY190ZXJtaW5hdGUoJHRoaXMtPnByb2Nlc3MsICRzaWduYWwpOwogICAgICAgICAgICB9IGVsc2VpZiAoXGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfa2lsbCcpKSB7CiAgICAgICAgICAgICAgICAkb2sgPSBAcG9zaXhfa2lsbCgkcGlkLCAkc2lnbmFsKTsKICAgICAgICAgICAgfSBlbHNlaWYgKCRvayA9IHByb2Nfb3BlbihzcHJpbnRmKCdraWxsIC0lZCAlZCcsICRzaWduYWwsICRwaWQpLCBbMiA9PiBbJ3BpcGUnLCAndyddXSwgJHBpcGVzKSkgewogICAgICAgICAgICAgICAgJG9rID0gZmFsc2UgPT09IGZnZXRzKCRwaXBlc1syXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCEkb2spIHsKICAgICAgICAgICAgICAgIGlmICgkdGhyb3dFeGNlcHRpb24pIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihzcHJpbnRmKCdFcnJvciB3aGlsZSBzZW5kaW5nIHNpZ25hbCAiJXMiLicsICRzaWduYWwpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICR0aGlzLT5sYXRlc3RTaWduYWwgPSAkc2lnbmFsOwogICAgICAgICR0aGlzLT5mYWxsYmFja1N0YXR1c1snc2lnbmFsZWQnXSA9IHRydWU7CiAgICAgICAgJHRoaXMtPmZhbGxiYWNrU3RhdHVzWydleGl0Y29kZSddID0gLTE7CiAgICAgICAgJHRoaXMtPmZhbGxiYWNrU3RhdHVzWyd0ZXJtc2lnJ10gPSAkdGhpcy0+bGF0ZXN0U2lnbmFsOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHByZXBhcmVXaW5kb3dzQ29tbWFuZExpbmUoc3RyaW5nICRjbWQsIGFycmF5ICYkZW52KTogc3RyaW5nCiAgICB7CiAgICAgICAgJHVpZCA9IHVuaXFpZCgnJywgdHJ1ZSk7CiAgICAgICAgJHZhckNvdW50ID0gMDsKICAgICAgICAkdmFyQ2FjaGUgPSBbXTsKICAgICAgICAkY21kID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKAogICAgICAgICAgICAnLyIoPzooCiAgICAgICAgICAgICAgICBbXiIlIV5dKisKICAgICAgICAgICAgICAgICg/OgogICAgICAgICAgICAgICAgICAgICg/OiAhTEYhIHwgIig/OlxeWyUhXl0pPysiICkKICAgICAgICAgICAgICAgICAgICBbXiIlIV5dKisKICAgICAgICAgICAgICAgICkrKwogICAgICAgICAgICApIHwgW14iXSorICkiL3gnLAogICAgICAgICAgICBmdW5jdGlvbiAoJG0pIHVzZSAoJiRlbnYsICYkdmFyQ2FjaGUsICYkdmFyQ291bnQsICR1aWQpIHsKICAgICAgICAgICAgICAgIGlmICghaXNzZXQoJG1bMV0pKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRtWzBdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR2YXJDYWNoZVskbVswXV0pKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR2YXJDYWNoZVskbVswXV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RyX2NvbnRhaW5zKCR2YWx1ZSA9ICRtWzFdLCAiXDAiKSkgewogICAgICAgICAgICAgICAgICAgICR2YWx1ZSA9IHN0cl9yZXBsYWNlKCJcMCIsICc/JywgJHZhbHVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChmYWxzZSA9PT0gc3RycGJyaygkdmFsdWUsICJcIiUhXG4iKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAnIicuJHZhbHVlLiciJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkdmFsdWUgPSBzdHJfcmVwbGFjZShbJyFMRiEnLCAnIl4hIicsICciXiUiJywgJyJeXiInLCAnIiInXSwgWyJcbiIsICchJywgJyUnLCAnXicsICciJ10sICR2YWx1ZSk7CiAgICAgICAgICAgICAgICAkdmFsdWUgPSAnIicucHJlZ19yZXBsYWNlKCcvKFxcXFwqKSIvJywgJyQxJDFcXCInLCAkdmFsdWUpLiciJzsKICAgICAgICAgICAgICAgICR2YXIgPSAkdWlkLisrJHZhckNvdW50OwoKICAgICAgICAgICAgICAgICRlbnZbJHZhcl0gPSAkdmFsdWU7CgogICAgICAgICAgICAgICAgcmV0dXJuICR2YXJDYWNoZVskbVswXV0gPSAnIScuJHZhci4nISc7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICRjbWQKICAgICAgICApOwoKICAgICAgICBzdGF0aWMgJGNvbVNwZWM7CgogICAgICAgIGlmICghJGNvbVNwZWMgJiYgJGNvbVNwZWMgPSAobmV3IEV4ZWN1dGFibGVGaW5kZXIoKSktPmZpbmQoJ2NtZC5leGUnKSkgewogICAgICAgICAgICAvLyBFc2NhcGUgYWNjb3JkaW5nIHRvIENvbW1hbmRMaW5lVG9Bcmd2VyBydWxlcwogICAgICAgICAgICAkY29tU3BlYyA9ICciJy5wcmVnX3JlcGxhY2UoJ3soXFxcXCorKSJ9JywgJyQxJDFcIicsICRjb21TcGVjKSAuJyInOwogICAgICAgIH0KCiAgICAgICAgJGNtZCA9ICgkY29tU3BlYyA/PyAnY21kJykuJyAvVjpPTiAvRTpPTiAvRCAvQyAoJy5zdHJfcmVwbGFjZSgiXG4iLCAnICcsICRjbWQpLicpJzsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+cHJvY2Vzc1BpcGVzLT5nZXRGaWxlcygpIGFzICRvZmZzZXQgPT4gJGZpbGVuYW1lKSB7CiAgICAgICAgICAgICRjbWQgLj0gJyAnLiRvZmZzZXQuJz4iJy4kZmlsZW5hbWUuJyInOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRjbWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBFbnN1cmVzIHRoZSBwcm9jZXNzIGlzIHJ1bm5pbmcgb3IgdGVybWluYXRlZCwgdGhyb3dzIGEgTG9naWNFeGNlcHRpb24gaWYgdGhlIHByb2Nlc3MgaGFzIGEgbm90IHN0YXJ0ZWQuCiAgICAgKgogICAgICogQHRocm93cyBMb2dpY0V4Y2VwdGlvbiBpZiB0aGUgcHJvY2VzcyBoYXMgbm90IHJ1bgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlcXVpcmVQcm9jZXNzSXNTdGFydGVkKHN0cmluZyAkZnVuY3Rpb25OYW1lKQogICAgewogICAgICAgIGlmICghJHRoaXMtPmlzU3RhcnRlZCgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBMb2dpY0V4Y2VwdGlvbihzcHJpbnRmKCdQcm9jZXNzIG11c3QgYmUgc3RhcnRlZCBiZWZvcmUgY2FsbGluZyAiJXMoKSIuJywgJGZ1bmN0aW9uTmFtZSkpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEVuc3VyZXMgdGhlIHByb2Nlc3MgaXMgdGVybWluYXRlZCwgdGhyb3dzIGEgTG9naWNFeGNlcHRpb24gaWYgdGhlIHByb2Nlc3MgaGFzIGEgc3RhdHVzIGRpZmZlcmVudCB0aGFuICJ0ZXJtaW5hdGVkIi4KICAgICAqCiAgICAgKiBAdGhyb3dzIExvZ2ljRXhjZXB0aW9uIGlmIHRoZSBwcm9jZXNzIGlzIG5vdCB5ZXQgdGVybWluYXRlZAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlcXVpcmVQcm9jZXNzSXNUZXJtaW5hdGVkKHN0cmluZyAkZnVuY3Rpb25OYW1lKQogICAgewogICAgICAgIGlmICghJHRoaXMtPmlzVGVybWluYXRlZCgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBMb2dpY0V4Y2VwdGlvbihzcHJpbnRmKCdQcm9jZXNzIG11c3QgYmUgdGVybWluYXRlZCBiZWZvcmUgY2FsbGluZyAiJXMoKSIuJywgJGZ1bmN0aW9uTmFtZSkpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEVzY2FwZXMgYSBzdHJpbmcgdG8gYmUgdXNlZCBhcyBhIHNoZWxsIGFyZ3VtZW50LgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGVzY2FwZUFyZ3VtZW50KD9zdHJpbmcgJGFyZ3VtZW50KTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCcnID09PSAkYXJndW1lbnQgfHwgbnVsbCA9PT0gJGFyZ3VtZW50KSB7CiAgICAgICAgICAgIHJldHVybiAnIiInOwogICAgICAgIH0KICAgICAgICBpZiAoJ1xcJyAhPT0gXERJUkVDVE9SWV9TRVBBUkFUT1IpIHsKICAgICAgICAgICAgcmV0dXJuICInIi5zdHJfcmVwbGFjZSgiJyIsICInXFwnJyIsICRhcmd1bWVudCkuIiciOwogICAgICAgIH0KICAgICAgICBpZiAoc3RyX2NvbnRhaW5zKCRhcmd1bWVudCwgIlwwIikpIHsKICAgICAgICAgICAgJGFyZ3VtZW50ID0gc3RyX3JlcGxhY2UoIlwwIiwgJz8nLCAkYXJndW1lbnQpOwogICAgICAgIH0KICAgICAgICBpZiAoIXByZWdfbWF0Y2goJy9bKCklIV4iPD4mfFxzW1xdPTsqP1wnJF0vJywgJGFyZ3VtZW50KSkgewogICAgICAgICAgICByZXR1cm4gJGFyZ3VtZW50OwogICAgICAgIH0KICAgICAgICAkYXJndW1lbnQgPSBwcmVnX3JlcGxhY2UoJy8oXFxcXCspJC8nLCAnJDEkMScsICRhcmd1bWVudCk7CgogICAgICAgIHJldHVybiAnIicuc3RyX3JlcGxhY2UoWyciJywgJ14nLCAnJScsICchJywgIlxuIl0sIFsnIiInLCAnIl5eIicsICciXiUiJywgJyJeISInLCAnIUxGISddLCAkYXJndW1lbnQpLiciJzsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlcGxhY2VQbGFjZWhvbGRlcnMoc3RyaW5nICRjb21tYW5kbGluZSwgYXJyYXkgJGVudikKICAgIHsKICAgICAgICByZXR1cm4gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCcvIlwkXHs6KFtfYS16QS1aXSsrW19hLXpBLVowLTldKispXH0iLycsIGZ1bmN0aW9uICgkbWF0Y2hlcykgdXNlICgkY29tbWFuZGxpbmUsICRlbnYpIHsKICAgICAgICAgICAgaWYgKCFpc3NldCgkZW52WyRtYXRjaGVzWzFdXSkgfHwgZmFsc2UgPT09ICRlbnZbJG1hdGNoZXNbMV1dKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoJ0NvbW1hbmQgbGluZSBpcyBtaXNzaW5nIGEgdmFsdWUgZm9yIHBhcmFtZXRlciAiJXMiOiAnLCAkbWF0Y2hlc1sxXSkuJGNvbW1hbmRsaW5lKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5lc2NhcGVBcmd1bWVudCgkZW52WyRtYXRjaGVzWzFdXSk7CiAgICAgICAgfSwgJGNvbW1hbmRsaW5lKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldERlZmF1bHRFbnYoKTogYXJyYXkKICAgIHsKICAgICAgICAkZW52ID0gZ2V0ZW52KCk7CiAgICAgICAgJGVudiA9ICgnXFwnID09PSBcRElSRUNUT1JZX1NFUEFSQVRPUiA/IGFycmF5X2ludGVyc2VjdF91a2V5KCRlbnYsICRfU0VSVkVSLCAnc3RyY2FzZWNtcCcpIDogYXJyYXlfaW50ZXJzZWN0X2tleSgkZW52LCAkX1NFUlZFUikpID86ICRlbnY7CgogICAgICAgIHJldHVybiAkX0VOViArICgnXFwnID09PSBcRElSRUNUT1JZX1NFUEFSQVRPUiA/IGFycmF5X2RpZmZfdWtleSgkZW52LCAkX0VOViwgJ3N0cmNhc2VjbXAnKSA6ICRlbnYpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/ProcessUtils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKCi8qKgogKiBQcm9jZXNzVXRpbHMgaXMgYSBidW5jaCBvZiB1dGlsaXR5IG1ldGhvZHMuCiAqCiAqIFRoaXMgY2xhc3MgY29udGFpbnMgc3RhdGljIG1ldGhvZHMgb25seSBhbmQgaXMgbm90IG1lYW50IHRvIGJlIGluc3RhbnRpYXRlZC4KICoKICogQGF1dGhvciBNYXJ0aW4gSGFzb8WIIDxtYXJ0aW4uaGFzb25AZ21haWwuY29tPgogKi8KY2xhc3MgUHJvY2Vzc1V0aWxzCnsKICAgIC8qKgogICAgICogVGhpcyBjbGFzcyBzaG91bGQgbm90IGJlIGluc3RhbnRpYXRlZC4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICB9CgogICAgLyoqCiAgICAgKiBWYWxpZGF0ZXMgYW5kIG5vcm1hbGl6ZXMgYSBQcm9jZXNzIGlucHV0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNhbGxlciBUaGUgbmFtZSBvZiBtZXRob2QgY2FsbCB0aGF0IHZhbGlkYXRlcyB0aGUgaW5wdXQKICAgICAqIEBwYXJhbSBtaXhlZCAgJGlucHV0ICBUaGUgaW5wdXQgdG8gdmFsaWRhdGUKICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKgogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gSW4gY2FzZSB0aGUgaW5wdXQgaXMgbm90IHZhbGlkCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdmFsaWRhdGVJbnB1dChzdHJpbmcgJGNhbGxlciwgJGlucHV0KQogICAgewogICAgICAgIGlmIChudWxsICE9PSAkaW5wdXQpIHsKICAgICAgICAgICAgaWYgKFxpc19yZXNvdXJjZSgkaW5wdXQpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGlucHV0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChcaXNfc3RyaW5nKCRpbnB1dCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkaW5wdXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKFxpc19zY2FsYXIoJGlucHV0KSkgewogICAgICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpICRpbnB1dDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJGlucHV0IGluc3RhbmNlb2YgUHJvY2VzcykgewogICAgICAgICAgICAgICAgcmV0dXJuICRpbnB1dC0+Z2V0SXRlcmF0b3IoJGlucHV0OjpJVEVSX1NLSVBfRVJSKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJGlucHV0IGluc3RhbmNlb2YgXEl0ZXJhdG9yKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGlucHV0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkaW5wdXQgaW5zdGFuY2VvZiBcVHJhdmVyc2FibGUpIHsKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgXEl0ZXJhdG9ySXRlcmF0b3IoJGlucHV0KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihzcHJpbnRmKCciJXMiIG9ubHkgYWNjZXB0cyBzdHJpbmdzLCBUcmF2ZXJzYWJsZSBvYmplY3RzIG9yIHN0cmVhbSByZXNvdXJjZXMuJywgJGNhbGxlcikpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRpbnB1dDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[UHJvY2VzcyBDb21wb25lbnQKPT09PT09PT09PT09PT09PT0KClRoZSBQcm9jZXNzIGNvbXBvbmVudCBleGVjdXRlcyBjb21tYW5kcyBpbiBzdWItcHJvY2Vzc2VzLgoKU3BvbnNvcgotLS0tLS0tCgpUaGUgUHJvY2VzcyBjb21wb25lbnQgZm9yIFN5bWZvbnkgNS40LzYuMCBpcyBbYmFja2VkXVsxXSBieSBbU2Vuc2lvTGFic11bMl0uCgpBcyB0aGUgY3JlYXRvciBvZiBTeW1mb255LCBTZW5zaW9MYWJzIHN1cHBvcnRzIGNvbXBhbmllcyB1c2luZyBTeW1mb255LCB3aXRoIGFuCm9mZmVyaW5nIGVuY29tcGFzc2luZyBjb25zdWx0YW5jeSwgZXhwZXJ0aXNlLCBzZXJ2aWNlcywgdHJhaW5pbmcsIGFuZCB0ZWNobmljYWwKYXNzaXN0YW5jZSB0byBlbnN1cmUgdGhlIHN1Y2Nlc3Mgb2Ygd2ViIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50IHByb2plY3RzLgoKSGVscCBTeW1mb255IGJ5IFtzcG9uc29yaW5nXVszXSBpdHMgZGV2ZWxvcG1lbnQhCgpSZXNvdXJjZXMKLS0tLS0tLS0tCgogKiBbRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9zeW1mb255LmNvbS9kb2MvY3VycmVudC9jb21wb25lbnRzL3Byb2Nlc3MuaHRtbCkKICogW0NvbnRyaWJ1dGluZ10oaHR0cHM6Ly9zeW1mb255LmNvbS9kb2MvY3VycmVudC9jb250cmlidXRpbmcvaW5kZXguaHRtbCkKICogW1JlcG9ydCBpc3N1ZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9zeW1mb255L3N5bWZvbnkvaXNzdWVzKSBhbmQKICAgW3NlbmQgUHVsbCBSZXF1ZXN0c10oaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvc3ltZm9ueS9wdWxscykKICAgaW4gdGhlIFttYWluIFN5bWZvbnkgcmVwb3NpdG9yeV0oaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvc3ltZm9ueSkKClsxXTogaHR0cHM6Ly9zeW1mb255LmNvbS9iYWNrZXJzClsyXTogaHR0cHM6Ly9zZW5zaW9sYWJzLmNvbQpbM106IGh0dHBzOi8vc3ltZm9ueS5jb20vc3BvbnNvcgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAidGhlY29kaW5nbWFjaGluZS9zYWZlIiwKICAgICJkZXNjcmlwdGlvbiI6ICJQSFAgY29yZSBmdW5jdGlvbnMgdGhhdCB0aHJvdyBleGNlcHRpb25zIGluc3RlYWQgb2YgcmV0dXJuaW5nIEZBTFNFIG9uIGVycm9yIiwKICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiU2FmZVxcIjogWwogICAgICAgICAgICAgICAgImxpYi8iLAogICAgICAgICAgICAgICAgImRlcHJlY2F0ZWQvIiwKICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvIgogICAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICJkZXByZWNhdGVkL2FwYy5waHAiLAogICAgICAgICAgICAiZGVwcmVjYXRlZC9saWJldmVudC5waHAiLAogICAgICAgICAgICAiZGVwcmVjYXRlZC9tc3NxbC5waHAiLAogICAgICAgICAgICAiZGVwcmVjYXRlZC9zdGF0cy5waHAiLAogICAgICAgICAgICAibGliL3NwZWNpYWxfY2FzZXMucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9hcGFjaGUucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9hcGN1LnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvYXJyYXkucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9iemlwMi5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL2NhbGVuZGFyLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvY2xhc3NvYmoucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9jb20ucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9jdWJyaWQucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9jdXJsLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvZGF0ZXRpbWUucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9kaXIucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9laW8ucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9lcnJvcmZ1bmMucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9leGVjLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvZmlsZWluZm8ucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9maWxlc3lzdGVtLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvZmlsdGVyLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvZnBtLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvZnRwLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvZnVuY2hhbmQucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9nbXAucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9nbnVwZy5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL2hhc2gucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9pYmFzZS5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL2libURiMi5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL2ljb252LnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvaW1hZ2UucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9pbWFwLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvaW5mby5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL2luZ3Jlcy1paS5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL2lub3RpZnkucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9qc29uLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvbGRhcC5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL2xpYnhtbC5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL2x6Zi5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL21haWxwYXJzZS5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL21ic3RyaW5nLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvbWlzYy5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL21zcWwucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9teXNxbC5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL215c3FsaS5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL215c3FsbmRNcy5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL215c3FsbmRRYy5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL25ldHdvcmsucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9vY2k4LnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvb3BjYWNoZS5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL29wZW5zc2wucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9vdXRjb250cm9sLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvcGFzc3dvcmQucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9wY250bC5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL3BjcmUucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9wZGYucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9wZ3NxbC5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL3Bvc2l4LnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvcHMucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9wc3BlbGwucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9yZWFkbGluZS5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL3JwbWluZm8ucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9ycmQucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9zZW0ucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9zZXNzaW9uLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvc2htb3AucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9zaW1wbGV4bWwucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9zb2NrZXRzLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvc29kaXVtLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvc29sci5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL3NwbC5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL3NxbHNydi5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL3NzZGVlcC5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL3NzaDIucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9zdHJlYW0ucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9zdHJpbmdzLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvc3dvb2xlLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvdW9kYmMucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC91b3B6LnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvdXJsLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvdmFyLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQveGRpZmYucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC94bWwucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC94bWxycGMucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC95YW1sLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQveWF6LnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvemlwLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvemxpYi5waHAiCiAgICAgICAgXQogICAgfSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiOiAiPj03LjIiCiAgICB9LAogICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICJwaHBzdGFuL3BocHN0YW4iOiAiXjAuMTIiLAogICAgICAgICJ0aGVjb2RpbmdtYWNoaW5lL3BocHN0YW4tc3RyaWN0LXJ1bGVzIjogIl4wLjEyIiwKICAgICAgICAic3F1aXpsYWJzL3BocF9jb2Rlc25pZmZlciI6ICJeMy4yIgogICAgfSwKICAgICJzY3JpcHRzIjogewogICAgICAgICJwaHBzdGFuIjogInBocHN0YW4gYW5hbHlzZSBsaWIgLWMgcGhwc3Rhbi5uZW9uIC0tbGV2ZWw9bWF4IC0tbm8tcHJvZ3Jlc3MgLXZ2diIsCiAgICAgICAgImNzLWZpeCI6ICJwaHBjYmYiLAogICAgICAgICJjcy1jaGVjayI6ICJwaHBjcyIKICAgIH0sCiAgICAiZXh0cmEiOiB7CiAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMC4xLWRldiIKICAgICAgICB9CiAgICB9Cn0=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/deprecated/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/deprecated/apc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xBcGNFeGNlcHRpb247CgovKioKICogUmV0cmlldmVzIGNhY2hlZCBpbmZvcm1hdGlvbiBhbmQgbWV0YS1kYXRhIGZyb20gQVBDJ3MgZGF0YSBzdG9yZS4KICoKICogQHBhcmFtIHN0cmluZyAkY2FjaGVfdHlwZSBJZiBjYWNoZV90eXBlIGlzICJ1c2VyIiwKICogaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVzZXIgY2FjaGUgd2lsbCBiZSByZXR1cm5lZC4KICoKICogSWYgY2FjaGVfdHlwZSBpcyAiZmlsZWhpdHMiLAogKiBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCBmaWxlcyBoYXZlIGJlZW4gc2VydmVkIGZyb20gdGhlIGJ5dGVjb2RlIGNhY2hlCiAqIGZvciB0aGUgY3VycmVudCByZXF1ZXN0IHdpbGwgYmUgcmV0dXJuZWQuIFRoaXMgZmVhdHVyZSBtdXN0IGJlIGVuYWJsZWQgYXQKICogY29tcGlsZSB0aW1lIHVzaW5nIC0tZW5hYmxlLWZpbGVoaXRzLgogKgogKiBJZiBhbiBpbnZhbGlkIG9yIG5vIGNhY2hlX3R5cGUgaXMgc3BlY2lmaWVkLCBpbmZvcm1hdGlvbiBhYm91dAogKiB0aGUgc3lzdGVtIGNhY2hlIChjYWNoZWQgZmlsZXMpIHdpbGwgYmUgcmV0dXJuZWQuCiAqIEBwYXJhbSBib29sICRsaW1pdGVkIElmIGxpbWl0ZWQgaXMgVFJVRSwgdGhlCiAqIHJldHVybiB2YWx1ZSB3aWxsIGV4Y2x1ZGUgdGhlIGluZGl2aWR1YWwgbGlzdCBvZiBjYWNoZSBlbnRyaWVzLiAgVGhpcwogKiBpcyB1c2VmdWwgd2hlbiB0cnlpbmcgdG8gb3B0aW1pemUgY2FsbHMgZm9yIHN0YXRpc3RpY3MgZ2F0aGVyaW5nLgogKiBAcmV0dXJuIGFycmF5IEFycmF5IG9mIGNhY2hlZCBkYXRhIChhbmQgbWV0YS1kYXRhKQogKiBAdGhyb3dzIEFwY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gYXBjX2NhY2hlX2luZm8oc3RyaW5nICRjYWNoZV90eXBlID0gJycsIGJvb2wgJGxpbWl0ZWQgPSBmYWxzZSk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcYXBjX2NhY2hlX2luZm8oJGNhY2hlX3R5cGUsICRsaW1pdGVkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEFwY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBhcGNfY2FzIHVwZGF0ZXMgYW4gYWxyZWFkeSBleGlzdGluZyBpbnRlZ2VyIHZhbHVlIGlmIHRoZQogKiBvbGQgcGFyYW1ldGVyIG1hdGNoZXMgdGhlIGN1cnJlbnRseSBzdG9yZWQgdmFsdWUKICogd2l0aCB0aGUgdmFsdWUgb2YgdGhlIG5ldyBwYXJhbWV0ZXIuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSBiZWluZyB1cGRhdGVkLgogKiBAcGFyYW0gaW50ICRvbGQgVGhlIG9sZCB2YWx1ZSAodGhlIHZhbHVlIGN1cnJlbnRseSBzdG9yZWQpLgogKiBAcGFyYW0gaW50ICRuZXcgVGhlIG5ldyB2YWx1ZSB0byB1cGRhdGUgdG8uCiAqIEB0aHJvd3MgQXBjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBhcGNfY2FzKHN0cmluZyAka2V5LCBpbnQgJG9sZCwgaW50ICRuZXcpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcYXBjX2Nhcygka2V5LCAkb2xkLCAkbmV3KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEFwY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU3RvcmVzIGEgZmlsZSBpbiB0aGUgYnl0ZWNvZGUgY2FjaGUsIGJ5cGFzc2luZyBhbGwgZmlsdGVycy4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgRnVsbCBvciByZWxhdGl2ZSBwYXRoIHRvIGEgUEhQIGZpbGUgdGhhdCB3aWxsIGJlIGNvbXBpbGVkIGFuZCBzdG9yZWQgaW4KICogdGhlIGJ5dGVjb2RlIGNhY2hlLgogKiBAcGFyYW0gYm9vbCAkYXRvbWljCiAqIEByZXR1cm4gbWl4ZWQgUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgQXBjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBhcGNfY29tcGlsZV9maWxlKHN0cmluZyAkZmlsZW5hbWUsIGJvb2wgJGF0b21pYyA9IHRydWUpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcYXBjX2NvbXBpbGVfZmlsZSgkZmlsZW5hbWUsICRhdG9taWMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQXBjRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIERlY3JlYXNlcyBhIHN0b3JlZCBpbnRlZ2VyIHZhbHVlLgogKgogKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgYmVpbmcgZGVjcmVhc2VkLgogKiBAcGFyYW0gaW50ICRzdGVwIFRoZSBzdGVwLCBvciB2YWx1ZSB0byBkZWNyZWFzZS4KICogQHBhcmFtIGJvb2x8bnVsbCAkc3VjY2VzcyBPcHRpb25hbGx5IHBhc3MgdGhlIHN1Y2Nlc3Mgb3IgZmFpbCBib29sZWFuIHZhbHVlIHRvCiAqIHRoaXMgcmVmZXJlbmNlZCB2YXJpYWJsZS4KICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiBrZXkncyB2YWx1ZSBvbiBzdWNjZXNzCiAqIEB0aHJvd3MgQXBjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBhcGNfZGVjKHN0cmluZyAka2V5LCBpbnQgJHN0ZXAgPSAxLCA/Ym9vbCAmJHN1Y2Nlc3MgPSBudWxsKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcYXBjX2RlYygka2V5LCAkc3RlcCwgJHN1Y2Nlc3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQXBjRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGRlZmluZSBpcyBub3RvcmlvdXNseSBzbG93LiBTaW5jZSB0aGUgbWFpbiBiZW5lZml0IG9mCiAqIEFQQyBpcyB0byBpbmNyZWFzZSB0aGUgcGVyZm9ybWFuY2Ugb2Ygc2NyaXB0cy9hcHBsaWNhdGlvbnMsIHRoaXMgbWVjaGFuaXNtCiAqIGlzIHByb3ZpZGVkIHRvIHN0cmVhbWxpbmUgdGhlIHByb2Nlc3Mgb2YgbWFzcyBjb25zdGFudCBkZWZpbml0aW9uLiBIb3dldmVyLAogKiB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHBlcmZvcm0gYXMgd2VsbCBhcyBhbnRpY2lwYXRlZC4KICoKICogRm9yIGEgYmV0dGVyLXBlcmZvcm1pbmcgc29sdXRpb24sIHRyeSB0aGUKICogaGlkZWYgZXh0ZW5zaW9uIGZyb20gUEVDTC4KICoKICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkgc2VydmVzIGFzIHRoZSBuYW1lIG9mIHRoZSBjb25zdGFudCBzZXQKICogYmVpbmcgc3RvcmVkLiBUaGlzIGtleSBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZQogKiBzdG9yZWQgY29uc3RhbnRzIGluIGFwY19sb2FkX2NvbnN0YW50cy4KICogQHBhcmFtIGFycmF5ICRjb25zdGFudHMgQW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgY29uc3RhbnRfbmFtZSA9Jmd0OyB2YWx1ZQogKiBwYWlycy4gVGhlIGNvbnN0YW50X25hbWUgbXVzdCBmb2xsb3cgdGhlIG5vcm1hbAogKiBjb25zdGFudCBuYW1pbmcgcnVsZXMuCiAqIHZhbHVlIG11c3QgZXZhbHVhdGUgdG8gYSBzY2FsYXIgdmFsdWUuCiAqIEBwYXJhbSBib29sICRjYXNlX3NlbnNpdGl2ZSBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgZm9yIGNvbnN0YW50cyBpcyB0byBiZSBkZWNsYXJlZCBjYXNlLXNlbnNpdGl2ZTsKICogaS5lLiBDT05TVEFOVCBhbmQgQ29uc3RhbnQKICogcmVwcmVzZW50IGRpZmZlcmVudCB2YWx1ZXMuIElmIHRoaXMgcGFyYW1ldGVyIGV2YWx1YXRlcyB0byBGQUxTRSB0aGUKICogY29uc3RhbnRzIHdpbGwgYmUgZGVjbGFyZWQgYXMgY2FzZS1pbnNlbnNpdGl2ZSBzeW1ib2xzLgogKiBAdGhyb3dzIEFwY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gYXBjX2RlZmluZV9jb25zdGFudHMoc3RyaW5nICRrZXksIGFycmF5ICRjb25zdGFudHMsIGJvb2wgJGNhc2Vfc2Vuc2l0aXZlID0gdHJ1ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxhcGNfZGVmaW5lX2NvbnN0YW50cygka2V5LCAkY29uc3RhbnRzLCAkY2FzZV9zZW5zaXRpdmUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQXBjRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBEZWxldGVzIHRoZSBnaXZlbiBmaWxlcyBmcm9tIHRoZSBvcGNvZGUgY2FjaGUuCiAqCiAqIEBwYXJhbSBtaXhlZCAka2V5cyBUaGUgZmlsZXMgdG8gYmUgZGVsZXRlZC4gQWNjZXB0cyBhIHN0cmluZywKICogYXJyYXkgb2Ygc3RyaW5ncywgb3IgYW4gQVBDSXRlcmF0b3IKICogb2JqZWN0LgogKiBAcmV0dXJuIG1peGVkIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKiBPciBpZiBrZXlzIGlzIGFuIGFycmF5LCB0aGVuCiAqIGFuIGVtcHR5IGFycmF5IGlzIHJldHVybmVkIG9uIHN1Y2Nlc3MsIG9yIGFuIGFycmF5IG9mIGZhaWxlZCBmaWxlcwogKiBpcyByZXR1cm5lZC4KICogQHRocm93cyBBcGNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGFwY19kZWxldGVfZmlsZSgka2V5cykKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxhcGNfZGVsZXRlX2ZpbGUoJGtleXMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQXBjRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJlbW92ZXMgYSBzdG9yZWQgdmFyaWFibGUgZnJvbSB0aGUgY2FjaGUuCiAqCiAqIEBwYXJhbSBzdHJpbmd8c3RyaW5nW118XEFQQ0l0ZXJhdG9yICRrZXkgVGhlIGtleSB1c2VkIHRvIHN0b3JlIHRoZSB2YWx1ZSAod2l0aAogKiBhcGNfc3RvcmUpLgogKiBAdGhyb3dzIEFwY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gYXBjX2RlbGV0ZSgka2V5KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGFwY19kZWxldGUoJGtleSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBBcGNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEluY3JlYXNlcyBhIHN0b3JlZCBudW1iZXIuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSBiZWluZyBpbmNyZWFzZWQuCiAqIEBwYXJhbSBpbnQgJHN0ZXAgVGhlIHN0ZXAsIG9yIHZhbHVlIHRvIGluY3JlYXNlLgogKiBAcGFyYW0gYm9vbHxudWxsICRzdWNjZXNzIE9wdGlvbmFsbHkgcGFzcyB0aGUgc3VjY2VzcyBvciBmYWlsIGJvb2xlYW4gdmFsdWUgdG8KICogdGhpcyByZWZlcmVuY2VkIHZhcmlhYmxlLgogKiBAcmV0dXJuIGludCBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIGtleSdzIHZhbHVlIG9uIHN1Y2Nlc3MKICogQHRocm93cyBBcGNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGFwY19pbmMoc3RyaW5nICRrZXksIGludCAkc3RlcCA9IDEsID9ib29sICYkc3VjY2VzcyA9IG51bGwpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxhcGNfaW5jKCRrZXksICRzdGVwLCAkc3VjY2Vzcyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBBcGNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogTG9hZHMgYSBzZXQgb2YgY29uc3RhbnRzIGZyb20gdGhlIGNhY2hlLgogKgogKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIG5hbWUgb2YgdGhlIGNvbnN0YW50IHNldCAodGhhdCB3YXMgc3RvcmVkIHdpdGgKICogYXBjX2RlZmluZV9jb25zdGFudHMpIHRvIGJlIHJldHJpZXZlZC4KICogQHBhcmFtIGJvb2wgJGNhc2Vfc2Vuc2l0aXZlIFRoZSBkZWZhdWx0IGJlaGF2aW91ciBmb3IgY29uc3RhbnRzIGlzIHRvIGJlIGRlY2xhcmVkIGNhc2Utc2Vuc2l0aXZlOwogKiBpLmUuIENPTlNUQU5UIGFuZCBDb25zdGFudAogKiByZXByZXNlbnQgZGlmZmVyZW50IHZhbHVlcy4gSWYgdGhpcyBwYXJhbWV0ZXIgZXZhbHVhdGVzIHRvIEZBTFNFIHRoZQogKiBjb25zdGFudHMgd2lsbCBiZSBkZWNsYXJlZCBhcyBjYXNlLWluc2Vuc2l0aXZlIHN5bWJvbHMuCiAqIEB0aHJvd3MgQXBjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBhcGNfbG9hZF9jb25zdGFudHMoc3RyaW5nICRrZXksIGJvb2wgJGNhc2Vfc2Vuc2l0aXZlID0gdHJ1ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxhcGNfbG9hZF9jb25zdGFudHMoJGtleSwgJGNhc2Vfc2Vuc2l0aXZlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEFwY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUmV0cmlldmVzIEFQQydzIFNoYXJlZCBNZW1vcnkgQWxsb2NhdGlvbiBpbmZvcm1hdGlvbi4KICoKICogQHBhcmFtIGJvb2wgJGxpbWl0ZWQgV2hlbiBzZXQgdG8gRkFMU0UgKGRlZmF1bHQpIGFwY19zbWFfaW5mbyB3aWxsCiAqIHJldHVybiBhIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggc2VnbWVudC4KICogQHJldHVybiBhcnJheSBBcnJheSBvZiBTaGFyZWQgTWVtb3J5IEFsbG9jYXRpb24gZGF0YTsgRkFMU0Ugb24gZmFpbHVyZS4KICogQHRocm93cyBBcGNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGFwY19zbWFfaW5mbyhib29sICRsaW1pdGVkID0gZmFsc2UpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGFwY19zbWFfaW5mbygkbGltaXRlZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBBcGNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/deprecated/Exceptions/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/deprecated/Exceptions/ApcException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEFwY0V4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/deprecated/Exceptions/LibeventException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIExpYmV2ZW50RXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/deprecated/Exceptions/MssqlException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIE1zc3FsRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/deprecated/Exceptions/StatsException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFN0YXRzRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/deprecated/functionsList.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCnJldHVybiBbCiAgICAnYXBjX2NhY2hlX2luZm8nLAogICAgJ2FwY19jYXMnLAogICAgJ2FwY19jb21waWxlX2ZpbGUnLAogICAgJ2FwY19kZWMnLAogICAgJ2FwY19kZWZpbmVfY29uc3RhbnRzJywKICAgICdhcGNfZGVsZXRlJywKICAgICdhcGNfZGVsZXRlX2ZpbGUnLAogICAgJ2FwY19pbmMnLAogICAgJ2FwY19sb2FkX2NvbnN0YW50cycsCiAgICAnYXBjX3NtYV9pbmZvJywKICAgICdldmVudF9hZGQnLAogICAgJ2V2ZW50X2Jhc2VfbG9vcGJyZWFrJywKICAgICdldmVudF9iYXNlX2xvb3BleGl0JywKICAgICdldmVudF9iYXNlX25ldycsCiAgICAnZXZlbnRfYmFzZV9wcmlvcml0eV9pbml0JywKICAgICdldmVudF9iYXNlX3JlaW5pdCcsCiAgICAnZXZlbnRfYmFzZV9zZXQnLAogICAgJ2V2ZW50X2J1ZmZlcl9iYXNlX3NldCcsCiAgICAnZXZlbnRfYnVmZmVyX2Rpc2FibGUnLAogICAgJ2V2ZW50X2J1ZmZlcl9lbmFibGUnLAogICAgJ2V2ZW50X2J1ZmZlcl9uZXcnLAogICAgJ2V2ZW50X2J1ZmZlcl9wcmlvcml0eV9zZXQnLAogICAgJ2V2ZW50X2J1ZmZlcl9zZXRfY2FsbGJhY2snLAogICAgJ2V2ZW50X2J1ZmZlcl93cml0ZScsCiAgICAnZXZlbnRfZGVsJywKICAgICdldmVudF9uZXcnLAogICAgJ2V2ZW50X3ByaW9yaXR5X3NldCcsCiAgICAnZXZlbnRfc2V0JywKICAgICdldmVudF90aW1lcl9zZXQnLAogICAgJ2ltYWdlcHNlbmNvZGVmb250JywKICAgICdpbWFnZXBzZXh0ZW5kZm9udCcsCiAgICAnaW1hZ2Vwc2ZyZWVmb250JywKICAgICdpbWFnZXBzc2xhbnRmb250JywKICAgICdtc3NxbF9iaW5kJywKICAgICdtc3NxbF9jbG9zZScsCiAgICAnbXNzcWxfY29ubmVjdCcsCiAgICAnbXNzcWxfZGF0YV9zZWVrJywKICAgICdtc3NxbF9maWVsZF9sZW5ndGgnLAogICAgJ21zc3FsX2ZpZWxkX25hbWUnLAogICAgJ21zc3FsX2ZpZWxkX3NlZWsnLAogICAgJ21zc3FsX2ZpZWxkX3R5cGUnLAogICAgJ21zc3FsX2ZyZWVfcmVzdWx0JywKICAgICdtc3NxbF9mcmVlX3N0YXRlbWVudCcsCiAgICAnbXNzcWxfaW5pdCcsCiAgICAnbXNzcWxfcGNvbm5lY3QnLAogICAgJ21zc3FsX3F1ZXJ5JywKICAgICdtc3NxbF9zZWxlY3RfZGInLAogICAgJ3N0YXRzX2NvdmFyaWFuY2UnLAogICAgJ3N0YXRzX3N0YW5kYXJkX2RldmlhdGlvbicsCiAgICAnc3RhdHNfc3RhdF9jb3JyZWxhdGlvbicsCiAgICAnc3RhdHNfc3RhdF9pbm5lcnByb2R1Y3QnLAogICAgJ3N0YXRzX3ZhcmlhbmNlJywKXTsK]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/deprecated/libevent.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xMaWJldmVudEV4Y2VwdGlvbjsKCi8qKgogKiBldmVudF9hZGQgc2NoZWR1bGVzIHRoZSBleGVjdXRpb24gb2YgdGhlIGV2ZW50CiAqIHdoZW4gdGhlIGV2ZW50IHNwZWNpZmllZCBpbiBldmVudF9zZXQgb2NjdXJzIG9yIGluIGF0IGxlYXN0IHRoZSB0aW1lCiAqIHNwZWNpZmllZCBieSB0aGUgdGltZW91dCBhcmd1bWVudC4gSWYKICogdGltZW91dCB3YXMgbm90IHNwZWNpZmllZCwgbm90IHRpbWVvdXQgaXMgc2V0LiBUaGUKICogZXZlbnQgbXVzdCBiZSBhbHJlYWR5IGluaXRhbGl6ZWQgYnkgZXZlbnRfc2V0CiAqIGFuZCBldmVudF9iYXNlX3NldCBmdW5jdGlvbnMuIElmIHRoZQogKiBldmVudCBhbHJlYWR5IGhhcyBhIHRpbWVvdXQgc2V0LCBpdCBpcyByZXBsYWNlZCBieQogKiB0aGUgbmV3IG9uZS4KICoKICogQHBhcmFtIHJlc291cmNlICRldmVudCBWYWxpZCBldmVudCByZXNvdXJjZS4KICogQHBhcmFtIGludCAkdGltZW91dCBPcHRpb25hbCB0aW1lb3V0IChpbiBtaWNyb3NlY29uZHMpLgogKiBAdGhyb3dzIExpYmV2ZW50RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBldmVudF9hZGQoJGV2ZW50LCBpbnQgJHRpbWVvdXQgPSAtMSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxldmVudF9hZGQoJGV2ZW50LCAkdGltZW91dCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBMaWJldmVudEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQWJvcnQgdGhlIGFjdGl2ZSBldmVudCBsb29wIGltbWVkaWF0ZWx5LiBUaGUgYmVoYXZpb3VyIGlzIHNpbWlsYXIgdG8KICogYnJlYWsgc3RhdGVtZW50LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGV2ZW50X2Jhc2UgVmFsaWQgZXZlbnQgYmFzZSByZXNvdXJjZS4KICogQHRocm93cyBMaWJldmVudEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZXZlbnRfYmFzZV9sb29wYnJlYWsoJGV2ZW50X2Jhc2UpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZXZlbnRfYmFzZV9sb29wYnJlYWsoJGV2ZW50X2Jhc2UpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGliZXZlbnRFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoZSBuZXh0IGV2ZW50IGxvb3AgaXRlcmF0aW9uIGFmdGVyIHRoZSBnaXZlbiB0aW1lciBleHBpcmVzIHdpbGwgY29tcGxldGUKICogbm9ybWFsbHksIHRoZW4gZXhpdCB3aXRob3V0IGJsb2NraW5nIGZvciBldmVudHMgYWdhaW4uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZXZlbnRfYmFzZSBWYWxpZCBldmVudCBiYXNlIHJlc291cmNlLgogKiBAcGFyYW0gaW50ICR0aW1lb3V0IE9wdGlvbmFsIHRpbWVvdXQgcGFyYW1ldGVyIChpbiBtaWNyb3NlY29uZHMpLgogKiBAdGhyb3dzIExpYmV2ZW50RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBldmVudF9iYXNlX2xvb3BleGl0KCRldmVudF9iYXNlLCBpbnQgJHRpbWVvdXQgPSAtMSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxldmVudF9iYXNlX2xvb3BleGl0KCRldmVudF9iYXNlLCAkdGltZW91dCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBMaWJldmVudEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUmV0dXJucyBuZXcgZXZlbnQgYmFzZSwgd2hpY2ggY2FuIGJlIHVzZWQgbGF0ZXIgaW4gZXZlbnRfYmFzZV9zZXQsCiAqIGV2ZW50X2Jhc2VfbG9vcCBhbmQgb3RoZXIgZnVuY3Rpb25zLgogKgogKiBAcmV0dXJuIHJlc291cmNlIGV2ZW50X2Jhc2VfbmV3IHJldHVybnMgdmFsaWQgZXZlbnQgYmFzZSByZXNvdXJjZSBvbgogKiBzdWNjZXNzLgogKiBAdGhyb3dzIExpYmV2ZW50RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBldmVudF9iYXNlX25ldygpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZXZlbnRfYmFzZV9uZXcoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExpYmV2ZW50RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNldHMgdGhlIG51bWJlciBvZiBkaWZmZXJlbnQgZXZlbnQgcHJpb3JpdHkgbGV2ZWxzLgogKgogKiBCeSBkZWZhdWx0IGFsbCBldmVudHMgYXJlIHNjaGVkdWxlZCB3aXRoIHRoZSBzYW1lIHByaW9yaXR5CiAqIChucHJpb3JpdGllcy8yKS4KICogVXNpbmcgZXZlbnRfYmFzZV9wcmlvcml0eV9pbml0IHlvdSBjYW4gY2hhbmdlIHRoZSBudW1iZXIKICogb2YgZXZlbnQgcHJpb3JpdHkgbGV2ZWxzIGFuZCB0aGVuIHNldCBhIGRlc2lyZWQgcHJpb3JpdHkgZm9yIGVhY2ggZXZlbnQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZXZlbnRfYmFzZSBWYWxpZCBldmVudCBiYXNlIHJlc291cmNlLgogKiBAcGFyYW0gaW50ICRucHJpb3JpdGllcyBUaGUgbnVtYmVyIG9mIGV2ZW50IHByaW9yaXR5IGxldmVscy4KICogQHRocm93cyBMaWJldmVudEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZXZlbnRfYmFzZV9wcmlvcml0eV9pbml0KCRldmVudF9iYXNlLCBpbnQgJG5wcmlvcml0aWVzKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGV2ZW50X2Jhc2VfcHJpb3JpdHlfaW5pdCgkZXZlbnRfYmFzZSwgJG5wcmlvcml0aWVzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExpYmV2ZW50RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTb21lIGV2ZW50IG1lY2hhbmlzbXMgZG8gbm90IHN1cnZpdmUgYWNyb3NzIGZvcmsuIFRoZQogKiBldmVudF9iYXNlIG5lZWRzIHRvIGJlIHJlaW5pdGlhbGl6ZWQgd2l0aCB0aGlzCiAqIGZ1bmN0aW9uLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGV2ZW50X2Jhc2UgVmFsaWQgZXZlbnQgYmFzZSByZXNvdXJjZSB0aGF0IG5lZWRzIHRvIGJlIHJlLWluaXRpYWxpemVkLgogKiBAdGhyb3dzIExpYmV2ZW50RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBldmVudF9iYXNlX3JlaW5pdCgkZXZlbnRfYmFzZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxldmVudF9iYXNlX3JlaW5pdCgkZXZlbnRfYmFzZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBMaWJldmVudEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQXNzb2NpYXRlcyB0aGUgZXZlbnRfYmFzZSB3aXRoIHRoZQogKiBldmVudC4KICoKICogQHBhcmFtIHJlc291cmNlICRldmVudCBWYWxpZCBldmVudCByZXNvdXJjZS4KICogQHBhcmFtIHJlc291cmNlICRldmVudF9iYXNlIFZhbGlkIGV2ZW50IGJhc2UgcmVzb3VyY2UuCiAqIEB0aHJvd3MgTGliZXZlbnRFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGV2ZW50X2Jhc2Vfc2V0KCRldmVudCwgJGV2ZW50X2Jhc2UpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZXZlbnRfYmFzZV9zZXQoJGV2ZW50LCAkZXZlbnRfYmFzZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBMaWJldmVudEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQXNzaWduIHRoZSBzcGVjaWZpZWQgYmV2ZW50IHRvIHRoZQogKiBldmVudF9iYXNlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGJldmVudCBWYWxpZCBidWZmZXJlZCBldmVudCByZXNvdXJjZS4KICogQHBhcmFtIHJlc291cmNlICRldmVudF9iYXNlIFZhbGlkIGV2ZW50IGJhc2UgcmVzb3VyY2UuCiAqIEB0aHJvd3MgTGliZXZlbnRFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGV2ZW50X2J1ZmZlcl9iYXNlX3NldCgkYmV2ZW50LCAkZXZlbnRfYmFzZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxldmVudF9idWZmZXJfYmFzZV9zZXQoJGJldmVudCwgJGV2ZW50X2Jhc2UpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGliZXZlbnRFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERpc2FibGVzIHRoZSBzcGVjaWZpZWQgYnVmZmVyZWQgZXZlbnQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYmV2ZW50IFZhbGlkIGJ1ZmZlcmVkIGV2ZW50IHJlc291cmNlLgogKiBAcGFyYW0gaW50ICRldmVudHMgQW55IGNvbWJpbmF0aW9uIG9mIEVWX1JFQUQgYW5kCiAqIEVWX1dSSVRFLgogKiBAdGhyb3dzIExpYmV2ZW50RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBldmVudF9idWZmZXJfZGlzYWJsZSgkYmV2ZW50LCBpbnQgJGV2ZW50cyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxldmVudF9idWZmZXJfZGlzYWJsZSgkYmV2ZW50LCAkZXZlbnRzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExpYmV2ZW50RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBFbmFibGVzIHRoZSBzcGVjaWZpZWQgYnVmZmVyZWQgZXZlbnQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYmV2ZW50IFZhbGlkIGJ1ZmZlcmVkIGV2ZW50IHJlc291cmNlLgogKiBAcGFyYW0gaW50ICRldmVudHMgQW55IGNvbWJpbmF0aW9uIG9mIEVWX1JFQUQgYW5kCiAqIEVWX1dSSVRFLgogKiBAdGhyb3dzIExpYmV2ZW50RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBldmVudF9idWZmZXJfZW5hYmxlKCRiZXZlbnQsIGludCAkZXZlbnRzKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGV2ZW50X2J1ZmZlcl9lbmFibGUoJGJldmVudCwgJGV2ZW50cyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBMaWJldmVudEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogTGliZXZlbnQgcHJvdmlkZXMgYW4gYWJzdHJhY3Rpb24gbGF5ZXIgb24gdG9wIG9mIHRoZSByZWd1bGFyIGV2ZW50IEFQSS4KICogVXNpbmcgYnVmZmVyZWQgZXZlbnQgeW91IGRvbid0IG5lZWQgdG8gZGVhbCB3aXRoIHRoZSBJL08gbWFudWFsbHksIGluc3RlYWQKICogaXQgcHJvdmlkZXMgaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzIHRoYXQgZ2V0IGZpbGxlZCBhbmQgZHJhaW5lZAogKiBhdXRvbWF0aWNhbGx5LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0cmVhbSBWYWxpZCBQSFAgc3RyZWFtIHJlc291cmNlLiBNdXN0IGJlIGNhc3RhYmxlIHRvIGZpbGUgZGVzY3JpcHRvci4KICogQHBhcmFtIG1peGVkICRyZWFkY2IgQ2FsbGJhY2sgdG8gaW52b2tlIHdoZXJlIHRoZXJlIGlzIGRhdGEgdG8gcmVhZCwgb3IgTlVMTCBpZgogKiBubyBjYWxsYmFjayBpcyBkZXNpcmVkLgogKiBAcGFyYW0gbWl4ZWQgJHdyaXRlY2IgQ2FsbGJhY2sgdG8gaW52b2tlIHdoZXJlIHRoZSBkZXNjcmlwdG9yIGlzIHJlYWR5IGZvciB3cml0aW5nLAogKiBvciBOVUxMIGlmIG5vIGNhbGxiYWNrIGlzIGRlc2lyZWQuCiAqIEBwYXJhbSBtaXhlZCAkZXJyb3JjYiBDYWxsYmFjayB0byBpbnZva2Ugd2hlcmUgdGhlcmUgaXMgYW4gZXJyb3Igb24gdGhlIGRlc2NyaXB0b3IsIGNhbm5vdCBiZQogKiBOVUxMLgogKiBAcGFyYW0gbWl4ZWQgJGFyZyBBbiBhcmd1bWVudCB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIGVhY2ggb2YgdGhlIGNhbGxiYWNrcyAob3B0aW9uYWwpLgogKiBAcmV0dXJuIHJlc291cmNlIGV2ZW50X2J1ZmZlcl9uZXcgcmV0dXJucyBuZXcgYnVmZmVyZWQgZXZlbnQgcmVzb3VyY2UKICogb24gc3VjY2Vzcy4KICogQHRocm93cyBMaWJldmVudEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZXZlbnRfYnVmZmVyX25ldygkc3RyZWFtLCAkcmVhZGNiLCAkd3JpdGVjYiwgJGVycm9yY2IsICRhcmcgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGFyZyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcZXZlbnRfYnVmZmVyX25ldygkc3RyZWFtLCAkcmVhZGNiLCAkd3JpdGVjYiwgJGVycm9yY2IsICRhcmcpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGV2ZW50X2J1ZmZlcl9uZXcoJHN0cmVhbSwgJHJlYWRjYiwgJHdyaXRlY2IsICRlcnJvcmNiKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExpYmV2ZW50RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEFzc2lnbiBhIHByaW9yaXR5IHRvIHRoZSBiZXZlbnQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYmV2ZW50IFZhbGlkIGJ1ZmZlcmVkIGV2ZW50IHJlc291cmNlLgogKiBAcGFyYW0gaW50ICRwcmlvcml0eSBQcmlvcml0eSBsZXZlbC4gQ2Fubm90IGJlIGxlc3MgdGhhbiB6ZXJvIGFuZCBjYW5ub3QgZXhjZWVkIG1heGltdW0KICogcHJpb3JpdHkgbGV2ZWwgb2YgdGhlIGV2ZW50IGJhc2UgKHNlZSBldmVudF9iYXNlX3ByaW9yaXR5X2luaXQpLgogKiBAdGhyb3dzIExpYmV2ZW50RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBldmVudF9idWZmZXJfcHJpb3JpdHlfc2V0KCRiZXZlbnQsIGludCAkcHJpb3JpdHkpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZXZlbnRfYnVmZmVyX3ByaW9yaXR5X3NldCgkYmV2ZW50LCAkcHJpb3JpdHkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGliZXZlbnRFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgb3IgY2hhbmdlcyBleGlzdGluZyBjYWxsYmFja3MgZm9yIHRoZSBidWZmZXJlZCBldmVudC4KICoKICogQHBhcmFtIHJlc291cmNlICRldmVudCBWYWxpZCBidWZmZXJlZCBldmVudCByZXNvdXJjZS4KICogQHBhcmFtIG1peGVkICRyZWFkY2IgQ2FsbGJhY2sgdG8gaW52b2tlIHdoZXJlIHRoZXJlIGlzIGRhdGEgdG8gcmVhZCwgb3IgTlVMTCBpZgogKiBubyBjYWxsYmFjayBpcyBkZXNpcmVkLgogKiBAcGFyYW0gbWl4ZWQgJHdyaXRlY2IgQ2FsbGJhY2sgdG8gaW52b2tlIHdoZXJlIHRoZSBkZXNjcmlwdG9yIGlzIHJlYWR5IGZvciB3cml0aW5nLAogKiBvciBOVUxMIGlmIG5vIGNhbGxiYWNrIGlzIGRlc2lyZWQuCiAqIEBwYXJhbSBtaXhlZCAkZXJyb3JjYiBDYWxsYmFjayB0byBpbnZva2Ugd2hlcmUgdGhlcmUgaXMgYW4gZXJyb3Igb24gdGhlIGRlc2NyaXB0b3IsIGNhbm5vdCBiZQogKiBOVUxMLgogKiBAcGFyYW0gbWl4ZWQgJGFyZyBBbiBhcmd1bWVudCB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIGVhY2ggb2YgdGhlIGNhbGxiYWNrcyAob3B0aW9uYWwpLgogKiBAdGhyb3dzIExpYmV2ZW50RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBldmVudF9idWZmZXJfc2V0X2NhbGxiYWNrKCRldmVudCwgJHJlYWRjYiwgJHdyaXRlY2IsICRlcnJvcmNiLCAkYXJnID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRhcmcgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGV2ZW50X2J1ZmZlcl9zZXRfY2FsbGJhY2soJGV2ZW50LCAkcmVhZGNiLCAkd3JpdGVjYiwgJGVycm9yY2IsICRhcmcpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGV2ZW50X2J1ZmZlcl9zZXRfY2FsbGJhY2soJGV2ZW50LCAkcmVhZGNiLCAkd3JpdGVjYiwgJGVycm9yY2IpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGliZXZlbnRFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFdyaXRlcyBkYXRhIHRvIHRoZSBzcGVjaWZpZWQgYnVmZmVyZWQgZXZlbnQuIFRoZSBkYXRhIGlzIGFwcGVuZGVkIHRvIHRoZQogKiBvdXRwdXQgYnVmZmVyIGFuZCB3cml0dGVuIHRvIHRoZSBkZXNjcmlwdG9yIHdoZW4gaXQgYmVjb21lcyBhdmFpbGFibGUgZm9yCiAqIHdyaXRpbmcuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYmV2ZW50IFZhbGlkIGJ1ZmZlcmVkIGV2ZW50IHJlc291cmNlLgogKiBAcGFyYW0gc3RyaW5nICRkYXRhIFRoZSBkYXRhIHRvIGJlIHdyaXR0ZW4uCiAqIEBwYXJhbSBpbnQgJGRhdGFfc2l6ZSBPcHRpb25hbCBzaXplIHBhcmFtZXRlci4gZXZlbnRfYnVmZmVyX3dyaXRlIHdyaXRlcwogKiBhbGwgdGhlIGRhdGEgYnkgZGVmYXVsdC4KICogQHRocm93cyBMaWJldmVudEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZXZlbnRfYnVmZmVyX3dyaXRlKCRiZXZlbnQsIHN0cmluZyAkZGF0YSwgaW50ICRkYXRhX3NpemUgPSAtMSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxldmVudF9idWZmZXJfd3JpdGUoJGJldmVudCwgJGRhdGEsICRkYXRhX3NpemUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGliZXZlbnRFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENhbmNlbHMgdGhlIGV2ZW50LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGV2ZW50IFZhbGlkIGV2ZW50IHJlc291cmNlLgogKiBAdGhyb3dzIExpYmV2ZW50RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBldmVudF9kZWwoJGV2ZW50KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGV2ZW50X2RlbCgkZXZlbnQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGliZXZlbnRFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgZXZlbnQgcmVzb3VyY2UuCiAqCiAqIEByZXR1cm4gcmVzb3VyY2UgZXZlbnRfbmV3IHJldHVybnMgYSBuZXcgZXZlbnQgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICogQHRocm93cyBMaWJldmVudEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZXZlbnRfbmV3KCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxldmVudF9uZXcoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExpYmV2ZW50RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEFzc2lnbiBhIHByaW9yaXR5IHRvIHRoZSBldmVudC4KICoKICogQHBhcmFtIHJlc291cmNlICRldmVudCBWYWxpZCBldmVudCByZXNvdXJjZS4KICogQHBhcmFtIGludCAkcHJpb3JpdHkgUHJpb3JpdHkgbGV2ZWwuIENhbm5vdCBiZSBsZXNzIHRoYW4gemVybyBhbmQgY2Fubm90IGV4Y2VlZCBtYXhpbXVtCiAqIHByaW9yaXR5IGxldmVsIG9mIHRoZSBldmVudCBiYXNlIChzZWUKICogZXZlbnRfYmFzZV9wcmlvcml0eV9pbml0KS4KICogQHRocm93cyBMaWJldmVudEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZXZlbnRfcHJpb3JpdHlfc2V0KCRldmVudCwgaW50ICRwcmlvcml0eSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxldmVudF9wcmlvcml0eV9zZXQoJGV2ZW50LCAkcHJpb3JpdHkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGliZXZlbnRFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFByZXBhcmVzIHRoZSBldmVudCB0byBiZSB1c2VkIGluIGV2ZW50X2FkZC4gVGhlIGV2ZW50CiAqIGlzIHByZXBhcmVkIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIHNwZWNpZmllZCBieSB0aGUgY2FsbGJhY2sKICogb24gdGhlIGV2ZW50cyBzcGVjaWZpZWQgaW4gcGFyYW1ldGVyIGV2ZW50cywgd2hpY2gKICogaXMgYSBzZXQgb2YgdGhlIGZvbGxvd2luZyBmbGFnczogRVZfVElNRU9VVCwKICogRVZfU0lHTkFMLCBFVl9SRUFELAogKiBFVl9XUklURSBhbmQgRVZfUEVSU0lTVC4KICoKICogSWYgRVZfU0lHTkFMIGJpdCBpcyBzZXQgaW4gcGFyYW1ldGVyIGV2ZW50cywKICogdGhlIGZkIGlzIGludGVycHJldGVkIGFzIHNpZ25hbCBudW1iZXIuCiAqCiAqIEFmdGVyIGluaXRpYWxpemluZyB0aGUgZXZlbnQsIHVzZSBldmVudF9iYXNlX3NldCB0bwogKiBhc3NvY2lhdGUgdGhlIGV2ZW50IHdpdGggaXRzIGV2ZW50IGJhc2UuCiAqCiAqIEluIGNhc2Ugb2YgbWF0Y2hpbmcgZXZlbnQsIHRoZXNlIHRocmVlIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIHRoZQogKiBjYWxsYmFjayBmdW5jdGlvbjoKICoKICoKICogZmQKICoKICoKICogU2lnbmFsIG51bWJlciBvciByZXNvdXJjZSBpbmRpY2F0aW5nIHRoZSBzdHJlYW0uCiAqCiAqCiAqCiAqCiAqIGV2ZW50cwogKgogKgogKiBBIGZsYWcgaW5kaWNhdGluZyB0aGUgZXZlbnQuIENvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZmxhZ3M6CiAqIEVWX1RJTUVPVVQsIEVWX1NJR05BTCwKICogRVZfUkVBRCwgRVZfV1JJVEUKICogYW5kIEVWX1BFUlNJU1QuCiAqCiAqCiAqCiAqCiAqIGFyZwogKgogKgogKiBPcHRpb25hbCBwYXJhbWV0ZXIsIHByZXZpb3VzbHkgcGFzc2VkIHRvIGV2ZW50X3NldAogKiBhcyBhcmcuCiAqCiAqCiAqCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZXZlbnQgVmFsaWQgZXZlbnQgcmVzb3VyY2UuCiAqIEBwYXJhbSBtaXhlZCAkZmQgVmFsaWQgUEhQIHN0cmVhbSByZXNvdXJjZS4gVGhlIHN0cmVhbSBtdXN0IGJlIGNhc3RhYmxlIHRvIGZpbGUKICogZGVzY3JpcHRvciwgc28geW91IG1vc3QgbGlrZWx5IHdvbid0IGJlIGFibGUgdG8gdXNlIGFueSBvZiBmaWx0ZXJlZAogKiBzdHJlYW1zLgogKiBAcGFyYW0gaW50ICRldmVudHMgQSBzZXQgb2YgZmxhZ3MgaW5kaWNhdGluZyB0aGUgZGVzaXJlZCBldmVudCwgY2FuIGJlCiAqIEVWX1JFQUQgYW5kL29yIEVWX1dSSVRFLgogKiBUaGUgYWRkaXRpb25hbCBmbGFnIEVWX1BFUlNJU1QgbWFrZXMgdGhlIGV2ZW50CiAqIHRvIHBlcnNpc3QgdW50aWwgZXZlbnRfZGVsIGlzIGNhbGxlZCwgb3RoZXJ3aXNlCiAqIHRoZSBjYWxsYmFjayBpcyBpbnZva2VkIG9ubHkgb25jZS4KICogQHBhcmFtIG1peGVkICRjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgbWF0Y2hpbmcgZXZlbnQgb2NjdXJzLgogKiBAcGFyYW0gbWl4ZWQgJGFyZyBPcHRpb25hbCBjYWxsYmFjayBwYXJhbWV0ZXIuCiAqIEB0aHJvd3MgTGliZXZlbnRFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGV2ZW50X3NldCgkZXZlbnQsICRmZCwgaW50ICRldmVudHMsICRjYWxsYmFjaywgJGFyZyA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkYXJnICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxldmVudF9zZXQoJGV2ZW50LCAkZmQsICRldmVudHMsICRjYWxsYmFjaywgJGFyZyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcZXZlbnRfc2V0KCRldmVudCwgJGZkLCAkZXZlbnRzLCAkY2FsbGJhY2spOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGliZXZlbnRFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFByZXBhcmVzIHRoZSB0aW1lciBldmVudCB0byBiZSB1c2VkIGluIGV2ZW50X2FkZC4gVGhlCiAqIGV2ZW50IGlzIHByZXBhcmVkIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIHNwZWNpZmllZCBieSB0aGUKICogY2FsbGJhY2sgd2hlbiB0aGUgZXZlbnQgdGltZW91dCBlbGFwc2VzLgogKgogKiBBZnRlciBpbml0aWFsaXppbmcgdGhlIGV2ZW50LCB1c2UgZXZlbnRfYmFzZV9zZXQgdG8KICogYXNzb2NpYXRlIHRoZSBldmVudCB3aXRoIGl0cyBldmVudCBiYXNlLgogKgogKiBJbiBjYXNlIG9mIG1hdGNoaW5nIGV2ZW50LCB0aGVzZSB0aHJlZSBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGUKICogY2FsbGJhY2sgZnVuY3Rpb246CiAqCiAqCiAqIGZkCiAqCiAqCiAqIFNpZ25hbCBudW1iZXIgb3IgcmVzb3VyY2UgaW5kaWNhdGluZyB0aGUgc3RyZWFtLgogKgogKgogKgogKgogKiBldmVudHMKICoKICoKICogQSBmbGFnIGluZGljYXRpbmcgdGhlIGV2ZW50LiBUaGlzIHdpbGwgYWx3YXlzIGJlCiAqIEVWX1RJTUVPVVQgZm9yIHRpbWVyIGV2ZW50cy4KICoKICoKICoKICoKICogYXJnCiAqCiAqCiAqIE9wdGlvbmFsIHBhcmFtZXRlciwgcHJldmlvdXNseSBwYXNzZWQgdG8KICogZXZlbnRfdGltZXJfc2V0IGFzIGFyZy4KICoKICoKICoKICoKICoKICogQHBhcmFtIHJlc291cmNlICRldmVudCBWYWxpZCBldmVudCByZXNvdXJjZS4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgbWF0Y2hpbmcgZXZlbnQgb2NjdXJzLgogKiBAcGFyYW0gbWl4ZWQgJGFyZyBPcHRpb25hbCBjYWxsYmFjayBwYXJhbWV0ZXIuCiAqIEB0aHJvd3MgTGliZXZlbnRFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGV2ZW50X3RpbWVyX3NldCgkZXZlbnQsIGNhbGxhYmxlICRjYWxsYmFjaywgJGFyZyA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkYXJnICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxldmVudF90aW1lcl9zZXQoJGV2ZW50LCAkY2FsbGJhY2ssICRhcmcpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGV2ZW50X3RpbWVyX3NldCgkZXZlbnQsICRjYWxsYmFjayk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBMaWJldmVudEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/deprecated/mssql.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xNc3NxbEV4Y2VwdGlvbjsKCi8qKgogKiBCaW5kcyBhIHBhcmFtZXRlciB0byBhIHN0b3JlZCBwcm9jZWR1cmUgb3IgYSByZW1vdGUgc3RvcmVkIHByb2NlZHVyZS4KICoKICogQHBhcmFtIHJlc291cmNlICRzdG10IFN0YXRlbWVudCByZXNvdXJjZSwgb2J0YWluZWQgd2l0aCBtc3NxbF9pbml0LgogKiBAcGFyYW0gc3RyaW5nICRwYXJhbV9uYW1lIFRoZSBwYXJhbWV0ZXIgbmFtZSwgYXMgYSBzdHJpbmcuCiAqCiAqIFlvdSBoYXZlIHRvIGluY2x1ZGUgdGhlIEAgY2hhcmFjdGVyLCBsaWtlIGluIHRoZQogKiBULVNRTCBzeW50YXguIFNlZSB0aGUgZXhwbGFuYXRpb24gaW5jbHVkZWQgaW4KICogbXNzcWxfZXhlY3V0ZS4KICogQHBhcmFtIG1peGVkICR2YXIgVGhlIFBIUCB2YXJpYWJsZSB5b3UnbGwgYmluZCB0aGUgTVNTUUwgcGFyYW1ldGVyIHRvLiBJdCBpcyBwYXNzZWQgYnkKICogcmVmZXJlbmNlLCB0byByZXRyaWV2ZSBPVVRQVVQgYW5kIFJFVFZBTCB2YWx1ZXMgYWZ0ZXIKICogdGhlIHByb2NlZHVyZSBleGVjdXRpb24uCiAqIEBwYXJhbSBpbnQgJHR5cGUgT25lIG9mOiBTUUxURVhULAogKiBTUUxWQVJDSEFSLCBTUUxDSEFSLAogKiBTUUxJTlQxLCBTUUxJTlQyLAogKiBTUUxJTlQ0LCBTUUxCSVQsCiAqIFNRTEZMVDQsIFNRTEZMVDgsCiAqIFNRTEZMVE4uCiAqIEBwYXJhbSBib29sICRpc19vdXRwdXQgV2hldGhlciB0aGUgdmFsdWUgaXMgYW4gT1VUUFVUIHBhcmFtZXRlciBvciBub3QuIElmIGl0J3MgYW4gT1VUUFVUCiAqIHBhcmFtZXRlciBhbmQgeW91IGRvbid0IG1lbnRpb24gaXQsIGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBhIG5vcm1hbAogKiBpbnB1dCBwYXJhbWV0ZXIgYW5kIG5vIGVycm9yIHdpbGwgYmUgdGhyb3duLgogKiBAcGFyYW0gYm9vbCAkaXNfbnVsbCBXaGV0aGVyIHRoZSBwYXJhbWV0ZXIgaXMgTlVMTCBvciBub3QuIFBhc3NpbmcgdGhlIE5VTEwgdmFsdWUgYXMKICogdmFyIHdpbGwgbm90IGRvIHRoZSBqb2IuCiAqIEBwYXJhbSBpbnQgJG1heGxlbiBVc2VkIHdpdGggY2hhci92YXJjaGFyIHZhbHVlcy4gWW91IGhhdmUgdG8gaW5kaWNhdGUgdGhlIGxlbmd0aCBvZiB0aGUKICogZGF0YSBzbyBpZiB0aGUgcGFyYW1ldGVyIGlzIGEgdmFyY2hhcig1MCksIHRoZSB0eXBlIG11c3QgYmUKICogU1FMVkFSQ0hBUiBhbmQgdGhpcyB2YWx1ZSA1MC4KICogQHRocm93cyBNc3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXNzcWxfYmluZCgkc3RtdCwgc3RyaW5nICRwYXJhbV9uYW1lLCAmJHZhciwgaW50ICR0eXBlLCBib29sICRpc19vdXRwdXQgPSBmYWxzZSwgYm9vbCAkaXNfbnVsbCA9IGZhbHNlLCBpbnQgJG1heGxlbiA9IC0xKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG1zc3FsX2JpbmQoJHN0bXQsICRwYXJhbV9uYW1lLCAkdmFyLCAkdHlwZSwgJGlzX291dHB1dCwgJGlzX251bGwsICRtYXhsZW4pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXNzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENsb3NlcyB0aGUgbGluayB0byBhIE1TIFNRTCBTZXJ2ZXIgZGF0YWJhc2UgdGhhdCdzIGFzc29jaWF0ZWQgd2l0aCB0aGUKICogc3BlY2lmaWVkIGxpbmsgaWRlbnRpZmllci4gIElmIHRoZSBsaW5rIGlkZW50aWZpZXIgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUKICogbGFzdCBvcGVuZWQgbGluayBpcyBhc3N1bWVkLgogKgogKiBOb3RlIHRoYXQgdGhpcyBpc24ndCB1c3VhbGx5IG5lY2Vzc2FyeSwgYXMgbm9uLXBlcnNpc3RlbnQgb3BlbgogKiBsaW5rcyBhcmUgYXV0b21hdGljYWxseSBjbG9zZWQgYXQgdGhlIGVuZCBvZiB0aGUgc2NyaXB0J3MKICogZXhlY3V0aW9uLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBBIE1TIFNRTCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5CiAqIG1zc3FsX2Nvbm5lY3QuCiAqCiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBub3QgY2xvc2UgcGVyc2lzdGVudCBsaW5rcyBnZW5lcmF0ZWQgYnkKICogbXNzcWxfcGNvbm5lY3QuCiAqIEB0aHJvd3MgTXNzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1zc3FsX2Nsb3NlKCRsaW5rX2lkZW50aWZpZXIgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGxpbmtfaWRlbnRpZmllciAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcbXNzcWxfY2xvc2UoJGxpbmtfaWRlbnRpZmllcik7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcbXNzcWxfY2xvc2UoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1zc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBtc3NxbF9jb25uZWN0IGVzdGFibGlzaGVzIGEgY29ubmVjdGlvbiB0byBhCiAqIE1TIFNRTCBzZXJ2ZXIuCiAqCiAqIFRoZSBsaW5rIHRvIHRoZSBzZXJ2ZXIgd2lsbCBiZSBjbG9zZWQgYXMgc29vbiBhcyB0aGUgZXhlY3V0aW9uIG9mCiAqIHRoZSBzY3JpcHQgZW5kcywgdW5sZXNzIGl0J3MgY2xvc2VkIGVhcmxpZXIgYnkgZXhwbGljaXRseSBjYWxsaW5nCiAqIG1zc3FsX2Nsb3NlLgogKgogKiBAcGFyYW0gc3RyaW5nICRzZXJ2ZXJuYW1lIFRoZSBNUyBTUUwgc2VydmVyLiBJdCBjYW4gYWxzbyBpbmNsdWRlIGEgcG9ydCBudW1iZXIsIGUuZy4KICogaG9zdG5hbWU6cG9ydCAoTGludXgpLCBvcgogKiBob3N0bmFtZSxwb3J0IChXaW5kb3dzKS4KICogQHBhcmFtIHN0cmluZyAkdXNlcm5hbWUgVGhlIHVzZXJuYW1lLgogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZCBUaGUgcGFzc3dvcmQuCiAqIEBwYXJhbSBib29sICRuZXdfbGluayBJZiBhIHNlY29uZCBjYWxsIGlzIG1hZGUgdG8gbXNzcWxfY29ubmVjdCB3aXRoIHRoZQogKiBzYW1lIGFyZ3VtZW50cywgbm8gbmV3IGxpbmsgd2lsbCBiZSBlc3RhYmxpc2hlZCwgYnV0IGluc3RlYWQsIHRoZSBsaW5rCiAqIGlkZW50aWZpZXIgb2YgdGhlIGFscmVhZHkgb3BlbmVkIGxpbmsgd2lsbCBiZSByZXR1cm5lZC4gVGhpcyBwYXJhbWV0ZXIKICogbW9kaWZpZXMgdGhpcyBiZWhhdmlvciBhbmQgbWFrZXMgbXNzcWxfY29ubmVjdAogKiBhbHdheXMgb3BlbiBhIG5ldyBsaW5rLCBldmVuIGlmIG1zc3FsX2Nvbm5lY3Qgd2FzCiAqIGNhbGxlZCBiZWZvcmUgd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBNUyBTUUwgbGluayBpZGVudGlmaWVyIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgTXNzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1zc3FsX2Nvbm5lY3Qoc3RyaW5nICRzZXJ2ZXJuYW1lID0gbnVsbCwgc3RyaW5nICR1c2VybmFtZSA9IG51bGwsIHN0cmluZyAkcGFzc3dvcmQgPSBudWxsLCBib29sICRuZXdfbGluayA9IGZhbHNlKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJG5ld19saW5rICE9PSBmYWxzZSkgewogICAgICAgICRyZXN1bHQgPSBcbXNzcWxfY29ubmVjdCgkc2VydmVybmFtZSwgJHVzZXJuYW1lLCAkcGFzc3dvcmQsICRuZXdfbGluayk7CiAgICB9IGVsc2VpZiAoJHBhc3N3b3JkICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3NxbF9jb25uZWN0KCRzZXJ2ZXJuYW1lLCAkdXNlcm5hbWUsICRwYXNzd29yZCk7CiAgICB9IGVsc2VpZiAoJHVzZXJuYW1lICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3NxbF9jb25uZWN0KCRzZXJ2ZXJuYW1lLCAkdXNlcm5hbWUpOwogICAgfSBlbHNlaWYgKCRzZXJ2ZXJuYW1lICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3NxbF9jb25uZWN0KCRzZXJ2ZXJuYW1lKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3NxbF9jb25uZWN0KCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNc3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBtc3NxbF9kYXRhX3NlZWsgbW92ZXMgdGhlIGludGVybmFsIHJvdwogKiBwb2ludGVyIG9mIHRoZSBNUyBTUUwgcmVzdWx0IGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIHJlc3VsdAogKiBpZGVudGlmaWVyIHRvIHBvaW50IHRvIHRoZSBzcGVjaWZpZWQgcm93IG51bWJlciwgZmlyc3Qgcm93IGJlaW5nCiAqIG51bWJlciAwLiBUaGUgbmV4dCBjYWxsIHRvIG1zc3FsX2ZldGNoX3JvdwogKiB3b3VsZCByZXR1cm4gdGhhdCByb3cuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0X2lkZW50aWZpZXIgVGhlIHJlc3VsdCByZXNvdXJjZSB0aGF0IGlzIGJlaW5nIGV2YWx1YXRlZC4KICogQHBhcmFtIGludCAkcm93X251bWJlciBUaGUgZGVzaXJlZCByb3cgbnVtYmVyIG9mIHRoZSBuZXcgcmVzdWx0IHBvaW50ZXIuCiAqIEB0aHJvd3MgTXNzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1zc3FsX2RhdGFfc2VlaygkcmVzdWx0X2lkZW50aWZpZXIsIGludCAkcm93X251bWJlcik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtc3NxbF9kYXRhX3NlZWsoJHJlc3VsdF9pZGVudGlmaWVyLCAkcm93X251bWJlcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNc3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIGZpZWxkIG5vLiBvZmZzZXQgaW4KICogcmVzdWx0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBUaGUgcmVzdWx0IHJlc291cmNlIHRoYXQgaXMgYmVpbmcgZXZhbHVhdGVkLiBUaGlzIHJlc3VsdCBjb21lcyBmcm9tIGEKICogY2FsbCB0byBtc3NxbF9xdWVyeS4KICogQHBhcmFtIGludCAkb2Zmc2V0IFRoZSBmaWVsZCBvZmZzZXQsIHN0YXJ0cyBhdCAwLiBJZiBvbWl0dGVkLCB0aGUgY3VycmVudCBmaWVsZCBpcyB1c2VkLgogKiBAcmV0dXJuIGludCBUaGUgbGVuZ3RoIG9mIHRoZSBzcGVjaWZpZWQgZmllbGQgaW5kZXggb24gc3VjY2Vzcy4KICogQHRocm93cyBNc3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXNzcWxfZmllbGRfbGVuZ3RoKCRyZXN1bHQsIGludCAkb2Zmc2V0ID0gLTEpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtc3NxbF9maWVsZF9sZW5ndGgoJHJlc3VsdCwgJG9mZnNldCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNc3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIHRoZSBuYW1lIG9mIGZpZWxkIG5vLiBvZmZzZXQgaW4KICogcmVzdWx0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBUaGUgcmVzdWx0IHJlc291cmNlIHRoYXQgaXMgYmVpbmcgZXZhbHVhdGVkLiBUaGlzIHJlc3VsdCBjb21lcyBmcm9tIGEKICogY2FsbCB0byBtc3NxbF9xdWVyeS4KICogQHBhcmFtIGludCAkb2Zmc2V0IFRoZSBmaWVsZCBvZmZzZXQsIHN0YXJ0cyBhdCAwLiBJZiBvbWl0dGVkLCB0aGUgY3VycmVudCBmaWVsZCBpcyB1c2VkLgogKiBAcmV0dXJuIHN0cmluZyBUaGUgbmFtZSBvZiB0aGUgc3BlY2lmaWVkIGZpZWxkIGluZGV4IG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgTXNzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1zc3FsX2ZpZWxkX25hbWUoJHJlc3VsdCwgaW50ICRvZmZzZXQgPSAtMSk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG1zc3FsX2ZpZWxkX25hbWUoJHJlc3VsdCwgJG9mZnNldCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNc3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBTZWVrcyB0byB0aGUgc3BlY2lmaWVkIGZpZWxkIG9mZnNldC4gIElmIHRoZSBuZXh0IGNhbGwgdG8KICogbXNzcWxfZmV0Y2hfZmllbGQgd29uJ3QgaW5jbHVkZSBhIGZpZWxkCiAqIG9mZnNldCwgdGhpcyBmaWVsZCB3b3VsZCBiZSByZXR1cm5lZC4KICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgVGhlIHJlc3VsdCByZXNvdXJjZSB0aGF0IGlzIGJlaW5nIGV2YWx1YXRlZC4gVGhpcyByZXN1bHQgY29tZXMgZnJvbSBhCiAqIGNhbGwgdG8gbXNzcWxfcXVlcnkuCiAqIEBwYXJhbSBpbnQgJGZpZWxkX29mZnNldCBUaGUgZmllbGQgb2Zmc2V0LCBzdGFydHMgYXQgMC4KICogQHRocm93cyBNc3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXNzcWxfZmllbGRfc2VlaygkcmVzdWx0LCBpbnQgJGZpZWxkX29mZnNldCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtc3NxbF9maWVsZF9zZWVrKCRyZXN1bHQsICRmaWVsZF9vZmZzZXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXNzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJldHVybnMgdGhlIHR5cGUgb2YgZmllbGQgbm8uIG9mZnNldCBpbgogKiByZXN1bHQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IFRoZSByZXN1bHQgcmVzb3VyY2UgdGhhdCBpcyBiZWluZyBldmFsdWF0ZWQuIFRoaXMgcmVzdWx0IGNvbWVzIGZyb20gYQogKiBjYWxsIHRvIG1zc3FsX3F1ZXJ5LgogKiBAcGFyYW0gaW50ICRvZmZzZXQgVGhlIGZpZWxkIG9mZnNldCwgc3RhcnRzIGF0IDAuIElmIG9taXR0ZWQsIHRoZSBjdXJyZW50IGZpZWxkIGlzIHVzZWQuCiAqIEByZXR1cm4gc3RyaW5nIFRoZSB0eXBlIG9mIHRoZSBzcGVjaWZpZWQgZmllbGQgaW5kZXggb24gc3VjY2Vzcy4KICogQHRocm93cyBNc3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXNzcWxfZmllbGRfdHlwZSgkcmVzdWx0LCBpbnQgJG9mZnNldCA9IC0xKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXNzcWxfZmllbGRfdHlwZSgkcmVzdWx0LCAkb2Zmc2V0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1zc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIG1zc3FsX2ZyZWVfcmVzdWx0IG9ubHkgbmVlZHMgdG8gYmUgY2FsbGVkCiAqIGlmIHlvdSBhcmUgd29ycmllZCBhYm91dCB1c2luZyB0b28gbXVjaCBtZW1vcnkgd2hpbGUgeW91ciBzY3JpcHQKICogaXMgcnVubmluZy4gQWxsIHJlc3VsdCBtZW1vcnkgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGZyZWVkIHdoZW4KICogdGhlIHNjcmlwdCBlbmRzLiBZb3UgbWF5IGNhbGwgbXNzcWxfZnJlZV9yZXN1bHQKICogd2l0aCB0aGUgcmVzdWx0IGlkZW50aWZpZXIgYXMgYW4gYXJndW1lbnQgYW5kIHRoZSBhc3NvY2lhdGVkCiAqIHJlc3VsdCBtZW1vcnkgd2lsbCBiZSBmcmVlZC4KICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgVGhlIHJlc3VsdCByZXNvdXJjZSB0aGF0IGlzIGJlaW5nIGZyZWVkLiBUaGlzIHJlc3VsdCBjb21lcyBmcm9tIGEKICogY2FsbCB0byBtc3NxbF9xdWVyeS4KICogQHRocm93cyBNc3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXNzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtc3NxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1zc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBtc3NxbF9mcmVlX3N0YXRlbWVudCBvbmx5IG5lZWRzIHRvIGJlIGNhbGxlZAogKiBpZiB5b3UgYXJlIHdvcnJpZWQgYWJvdXQgdXNpbmcgdG9vIG11Y2ggbWVtb3J5IHdoaWxlIHlvdXIgc2NyaXB0CiAqIGlzIHJ1bm5pbmcuIEFsbCBzdGF0ZW1lbnQgbWVtb3J5IHdpbGwgYXV0b21hdGljYWxseSBiZSBmcmVlZCB3aGVuCiAqIHRoZSBzY3JpcHQgZW5kcy4gWW91IG1heSBjYWxsIG1zc3FsX2ZyZWVfc3RhdGVtZW50CiAqIHdpdGggdGhlIHN0YXRlbWVudCBpZGVudGlmaWVyIGFzIGFuIGFyZ3VtZW50IGFuZCB0aGUgYXNzb2NpYXRlZAogKiBzdGF0ZW1lbnQgbWVtb3J5IHdpbGwgYmUgZnJlZWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RtdCBTdGF0ZW1lbnQgcmVzb3VyY2UsIG9idGFpbmVkIHdpdGggbXNzcWxfaW5pdC4KICogQHRocm93cyBNc3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXNzcWxfZnJlZV9zdGF0ZW1lbnQoJHN0bXQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXNzcWxfZnJlZV9zdGF0ZW1lbnQoJHN0bXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXNzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEluaXRpYWxpemVzIGEgc3RvcmVkIHByb2NlZHVyZSBvciBhIHJlbW90ZSBzdG9yZWQgcHJvY2VkdXJlLgogKgogKiBAcGFyYW0gc3RyaW5nICRzcF9uYW1lIFN0b3JlZCBwcm9jZWR1cmUgbmFtZSwgbGlrZSBvd25ldy5zcF9uYW1lIG9yCiAqIG90aGVyZGIub3duZXIuc3BfbmFtZS4KICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgQSBNUyBTUUwgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieQogKiBtc3NxbF9jb25uZWN0LgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSByZXNvdXJjZSBpZGVudGlmaWVyICJzdGF0ZW1lbnQiLCB1c2VkIGluIHN1YnNlcXVlbnQgY2FsbHMgdG8KICogbXNzcWxfYmluZCBhbmQgbXNzcWxfZXhlY3V0ZXMuCiAqIEB0aHJvd3MgTXNzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1zc3FsX2luaXQoc3RyaW5nICRzcF9uYW1lLCAkbGlua19pZGVudGlmaWVyID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRsaW5rX2lkZW50aWZpZXIgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG1zc3FsX2luaXQoJHNwX25hbWUsICRsaW5rX2lkZW50aWZpZXIpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG1zc3FsX2luaXQoJHNwX25hbWUpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXNzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogbXNzcWxfcGNvbm5lY3QgYWN0cyB2ZXJ5IG11Y2ggbGlrZQogKiBtc3NxbF9jb25uZWN0IHdpdGggdHdvIG1ham9yIGRpZmZlcmVuY2VzLgogKgogKiBGaXJzdCwgd2hlbiBjb25uZWN0aW5nLCB0aGUgZnVuY3Rpb24gd291bGQgZmlyc3QgdHJ5IHRvIGZpbmQgYQogKiAocGVyc2lzdGVudCkgbGluayB0aGF0J3MgYWxyZWFkeSBvcGVuIHdpdGggdGhlIHNhbWUgaG9zdCwKICogdXNlcm5hbWUgYW5kIHBhc3N3b3JkLiAgSWYgb25lIGlzIGZvdW5kLCBhbiBpZGVudGlmaWVyIGZvciBpdAogKiB3aWxsIGJlIHJldHVybmVkIGluc3RlYWQgb2Ygb3BlbmluZyBhIG5ldyBjb25uZWN0aW9uLgogKgogKiBTZWNvbmQsIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBTUUwgc2VydmVyIHdpbGwgbm90IGJlIGNsb3NlZCB3aGVuCiAqIHRoZSBleGVjdXRpb24gb2YgdGhlIHNjcmlwdCBlbmRzLiAgSW5zdGVhZCwgdGhlIGxpbmsgd2lsbCByZW1haW4KICogb3BlbiBmb3IgZnV0dXJlIHVzZSAobXNzcWxfY2xvc2Ugd2lsbCBub3QKICogY2xvc2UgbGlua3MgZXN0YWJsaXNoZWQgYnkgbXNzcWxfcGNvbm5lY3QpLgogKgogKiBUaGlzIHR5cGUgb2YgbGlua3MgaXMgdGhlcmVmb3JlIGNhbGxlZCAncGVyc2lzdGVudCcuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHNlcnZlcm5hbWUgVGhlIE1TIFNRTCBzZXJ2ZXIuIEl0IGNhbiBhbHNvIGluY2x1ZGUgYSBwb3J0IG51bWJlci4gZS5nLgogKiBob3N0bmFtZTpwb3J0LgogKiBAcGFyYW0gc3RyaW5nICR1c2VybmFtZSBUaGUgdXNlcm5hbWUuCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkIFRoZSBwYXNzd29yZC4KICogQHBhcmFtIGJvb2wgJG5ld19saW5rIElmIGEgc2Vjb25kIGNhbGwgaXMgbWFkZSB0byBtc3NxbF9wY29ubmVjdCB3aXRoCiAqIHRoZSBzYW1lIGFyZ3VtZW50cywgbm8gbmV3IGxpbmsgd2lsbCBiZSBlc3RhYmxpc2hlZCwgYnV0IGluc3RlYWQsIHRoZQogKiBsaW5rIGlkZW50aWZpZXIgb2YgdGhlIGFscmVhZHkgb3BlbmVkIGxpbmsgd2lsbCBiZSByZXR1cm5lZC4gVGhpcwogKiBwYXJhbWV0ZXIgbW9kaWZpZXMgdGhpcyBiZWhhdmlvciBhbmQgbWFrZXMKICogbXNzcWxfcGNvbm5lY3QgYWx3YXlzIG9wZW4gYSBuZXcgbGluaywgZXZlbiBpZgogKiBtc3NxbF9wY29ubmVjdCB3YXMgY2FsbGVkIGJlZm9yZSB3aXRoIHRoZSBzYW1lCiAqIHBhcmFtZXRlcnMuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhIHBvc2l0aXZlIE1TIFNRTCBwZXJzaXN0ZW50IGxpbmsgaWRlbnRpZmllciBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIE1zc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtc3NxbF9wY29ubmVjdChzdHJpbmcgJHNlcnZlcm5hbWUgPSBudWxsLCBzdHJpbmcgJHVzZXJuYW1lID0gbnVsbCwgc3RyaW5nICRwYXNzd29yZCA9IG51bGwsIGJvb2wgJG5ld19saW5rID0gZmFsc2UpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkbmV3X2xpbmsgIT09IGZhbHNlKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3NxbF9wY29ubmVjdCgkc2VydmVybmFtZSwgJHVzZXJuYW1lLCAkcGFzc3dvcmQsICRuZXdfbGluayk7CiAgICB9IGVsc2VpZiAoJHBhc3N3b3JkICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3NxbF9wY29ubmVjdCgkc2VydmVybmFtZSwgJHVzZXJuYW1lLCAkcGFzc3dvcmQpOwogICAgfSBlbHNlaWYgKCR1c2VybmFtZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcbXNzcWxfcGNvbm5lY3QoJHNlcnZlcm5hbWUsICR1c2VybmFtZSk7CiAgICB9IGVsc2VpZiAoJHNlcnZlcm5hbWUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG1zc3FsX3Bjb25uZWN0KCRzZXJ2ZXJuYW1lKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3NxbF9wY29ubmVjdCgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXNzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogbXNzcWxfcXVlcnkgc2VuZHMgYSBxdWVyeSB0byB0aGUgY3VycmVudGx5IGFjdGl2ZQogKiBkYXRhYmFzZSBvbiB0aGUgc2VydmVyIHRoYXQncyBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBsaW5rCiAqIGlkZW50aWZpZXIuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHF1ZXJ5IEFuIFNRTCBxdWVyeS4KICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgQSBNUyBTUUwgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieQogKiBtc3NxbF9jb25uZWN0IG9yCiAqIG1zc3FsX3Bjb25uZWN0LgogKgogKiBJZiB0aGUgbGluayBpZGVudGlmaWVyIGlzbid0IHNwZWNpZmllZCwgdGhlIGxhc3Qgb3BlbmVkIGxpbmsgaXMKICogYXNzdW1lZC4gIElmIG5vIGxpbmsgaXMgb3BlbiwgdGhlIGZ1bmN0aW9uIHRyaWVzIHRvIGVzdGFibGlzaCBhIGxpbmsKICogYXMgaWYgbXNzcWxfY29ubmVjdCB3YXMgY2FsbGVkLCBhbmQgdXNlIGl0LgogKiBAcGFyYW0gaW50ICRiYXRjaF9zaXplIFRoZSBudW1iZXIgb2YgcmVjb3JkcyB0byBiYXRjaCBpbiB0aGUgYnVmZmVyLgogKiBAcmV0dXJuIG1peGVkIFJldHVybnMgYSBNUyBTUUwgcmVzdWx0IHJlc291cmNlIG9uIHN1Y2Nlc3MsIFRSVUUgaWYgbm8gcm93cyB3ZXJlCiAqIHJldHVybmVkLgogKiBAdGhyb3dzIE1zc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtc3NxbF9xdWVyeShzdHJpbmcgJHF1ZXJ5LCAkbGlua19pZGVudGlmaWVyID0gbnVsbCwgaW50ICRiYXRjaF9zaXplID0gMCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRiYXRjaF9zaXplICE9PSAwKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3NxbF9xdWVyeSgkcXVlcnksICRsaW5rX2lkZW50aWZpZXIsICRiYXRjaF9zaXplKTsKICAgIH0gZWxzZWlmICgkbGlua19pZGVudGlmaWVyICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3NxbF9xdWVyeSgkcXVlcnksICRsaW5rX2lkZW50aWZpZXIpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG1zc3FsX3F1ZXJ5KCRxdWVyeSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNc3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBtc3NxbF9zZWxlY3RfZGIgc2V0cyB0aGUgY3VycmVudCBhY3RpdmUKICogZGF0YWJhc2Ugb24gdGhlIHNlcnZlciB0aGF0J3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgbGluawogKiBpZGVudGlmaWVyLgogKgogKiBFdmVyeSBzdWJzZXF1ZW50IGNhbGwgdG8gbXNzcWxfcXVlcnkgd2lsbCBiZQogKiBtYWRlIG9uIHRoZSBhY3RpdmUgZGF0YWJhc2UuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGFiYXNlX25hbWUgVGhlIGRhdGFiYXNlIG5hbWUuCiAqCiAqIFRvIGVzY2FwZSB0aGUgbmFtZSBvZiBhIGRhdGFiYXNlIHRoYXQgY29udGFpbnMgc3BhY2VzLCBoeXBoZW5zICgiLSIpLAogKiBvciBhbnkgb3RoZXIgZXhjZXB0aW9uYWwgY2hhcmFjdGVycywgdGhlIGRhdGFiYXNlIG5hbWUgbXVzdCBiZQogKiBlbmNsb3NlZCBpbiBicmFja2V0cywgYXMgaXMgc2hvd24gaW4gdGhlIGV4YW1wbGUsIGJlbG93LiBUaGlzCiAqIHRlY2huaXF1ZSBtdXN0IGFsc28gYmUgYXBwbGllZCB3aGVuIHNlbGVjdGluZyBhIGRhdGFiYXNlIG5hbWUgdGhhdCBpcwogKiBhbHNvIGEgcmVzZXJ2ZWQgd29yZCAoc3VjaCBhcyBwcmltYXJ5KS4KICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgQSBNUyBTUUwgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieQogKiBtc3NxbF9jb25uZWN0IG9yCiAqIG1zc3FsX3Bjb25uZWN0LgogKgogKiBJZiBubyBsaW5rIGlkZW50aWZpZXIgaXMgc3BlY2lmaWVkLCB0aGUgbGFzdCBvcGVuZWQgbGluayBpcyBhc3N1bWVkLgogKiBJZiBubyBsaW5rIGlzIG9wZW4sIHRoZSBmdW5jdGlvbiB3aWxsIHRyeSB0byBlc3RhYmxpc2ggYSBsaW5rIGFzIGlmCiAqIG1zc3FsX2Nvbm5lY3Qgd2FzIGNhbGxlZCwgYW5kIHVzZSBpdC4KICogQHRocm93cyBNc3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXNzcWxfc2VsZWN0X2RiKHN0cmluZyAkZGF0YWJhc2VfbmFtZSwgJGxpbmtfaWRlbnRpZmllciA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkbGlua19pZGVudGlmaWVyICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3NxbF9zZWxlY3RfZGIoJGRhdGFiYXNlX25hbWUsICRsaW5rX2lkZW50aWZpZXIpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG1zc3FsX3NlbGVjdF9kYigkZGF0YWJhc2VfbmFtZSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNc3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/deprecated/stats.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTdGF0c0V4Y2VwdGlvbjsKCi8qKgogKiBSZXR1cm5zIHRoZSBjb3ZhcmlhbmNlIG9mIGEgYW5kIGIuCiAqCiAqIEBwYXJhbSBhcnJheSAkYSBUaGUgZmlyc3QgYXJyYXkKICogQHBhcmFtIGFycmF5ICRiIFRoZSBzZWNvbmQgYXJyYXkKICogQHJldHVybiBmbG9hdCBSZXR1cm5zIHRoZSBjb3ZhcmlhbmNlIG9mIGEgYW5kIGIuCiAqIEB0aHJvd3MgU3RhdHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHN0YXRzX2NvdmFyaWFuY2UoYXJyYXkgJGEsIGFycmF5ICRiKTogZmxvYXQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzdGF0c19jb3ZhcmlhbmNlKCRhLCAkYik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTdGF0c0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIHZhbHVlcyBpbiBhLgogKgogKiBAcGFyYW0gYXJyYXkgJGEgVGhlIGFycmF5IG9mIGRhdGEgdG8gZmluZCB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIGZvci4gTm90ZSB0aGF0IGFsbAogKiB2YWx1ZXMgb2YgdGhlIGFycmF5IHdpbGwgYmUgY2FzdCB0byBmbG9hdC4KICogQHBhcmFtIGJvb2wgJHNhbXBsZSBJbmRpY2F0ZXMgaWYgYSByZXByZXNlbnRzIGEgc2FtcGxlIG9mIHRoZQogKiBwb3B1bGF0aW9uOyBkZWZhdWx0cyB0byBGQUxTRS4KICogQHJldHVybiBmbG9hdCBSZXR1cm5zIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gb24gc3VjY2VzczsgRkFMU0Ugb24gZmFpbHVyZS4KICogQHRocm93cyBTdGF0c0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3RhdHNfc3RhbmRhcmRfZGV2aWF0aW9uKGFycmF5ICRhLCBib29sICRzYW1wbGUgPSBmYWxzZSk6IGZsb2F0CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc3RhdHNfc3RhbmRhcmRfZGV2aWF0aW9uKCRhLCAkc2FtcGxlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFN0YXRzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJldHVybnMgdGhlIFBlYXJzb24gY29ycmVsYXRpb24gY29lZmZpY2llbnQgYmV0d2VlbiBhcnIxIGFuZCBhcnIyLgogKgogKiBAcGFyYW0gYXJyYXkgJGFycjEgVGhlIGZpcnN0IGFycmF5CiAqIEBwYXJhbSBhcnJheSAkYXJyMiBUaGUgc2Vjb25kIGFycmF5CiAqIEByZXR1cm4gZmxvYXQgUmV0dXJucyB0aGUgUGVhcnNvbiBjb3JyZWxhdGlvbiBjb2VmZmljaWVudCBiZXR3ZWVuIGFycjEgYW5kIGFycjIuCiAqIEB0aHJvd3MgU3RhdHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHN0YXRzX3N0YXRfY29ycmVsYXRpb24oYXJyYXkgJGFycjEsIGFycmF5ICRhcnIyKTogZmxvYXQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzdGF0c19zdGF0X2NvcnJlbGF0aW9uKCRhcnIxLCAkYXJyMik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTdGF0c0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIHRoZSBpbm5lciBwcm9kdWN0IG9mIGFycjEgYW5kIGFycjIuCiAqCiAqIEBwYXJhbSBhcnJheSAkYXJyMSBUaGUgZmlyc3QgYXJyYXkKICogQHBhcmFtIGFycmF5ICRhcnIyIFRoZSBzZWNvbmQgYXJyYXkKICogQHJldHVybiBmbG9hdCBSZXR1cm5zIHRoZSBpbm5lciBwcm9kdWN0IG9mIGFycjEgYW5kIGFycjIuCiAqIEB0aHJvd3MgU3RhdHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHN0YXRzX3N0YXRfaW5uZXJwcm9kdWN0KGFycmF5ICRhcnIxLCBhcnJheSAkYXJyMik6IGZsb2F0CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc3RhdHNfc3RhdF9pbm5lcnByb2R1Y3QoJGFycjEsICRhcnIyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFN0YXRzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJldHVybnMgdGhlIHZhcmlhbmNlIG9mIHRoZSB2YWx1ZXMgaW4gYS4KICoKICogQHBhcmFtIGFycmF5ICRhIFRoZSBhcnJheSBvZiBkYXRhIHRvIGZpbmQgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBmb3IuIE5vdGUgdGhhdCBhbGwKICogdmFsdWVzIG9mIHRoZSBhcnJheSB3aWxsIGJlIGNhc3QgdG8gZmxvYXQuCiAqIEBwYXJhbSBib29sICRzYW1wbGUgSW5kaWNhdGVzIGlmIGEgcmVwcmVzZW50cyBhIHNhbXBsZSBvZiB0aGUKICogcG9wdWxhdGlvbjsgZGVmYXVsdHMgdG8gRkFMU0UuCiAqIEByZXR1cm4gZmxvYXQgUmV0dXJucyB0aGUgdmFyaWFuY2Ugb24gc3VjY2VzczsgRkFMU0Ugb24gZmFpbHVyZS4KICogQHRocm93cyBTdGF0c0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3RhdHNfdmFyaWFuY2UoYXJyYXkgJGEsIGJvb2wgJHNhbXBsZSA9IGZhbHNlKTogZmxvYXQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzdGF0c192YXJpYW5jZSgkYSwgJHNhbXBsZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTdGF0c0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/apache.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xBcGFjaGVFeGNlcHRpb247CgovKioKICogRmV0Y2ggdGhlIEFwYWNoZSB2ZXJzaW9uLgogKgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBBcGFjaGUgdmVyc2lvbiBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEFwYWNoZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gYXBhY2hlX2dldF92ZXJzaW9uKCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGFwYWNoZV9nZXRfdmVyc2lvbigpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQXBhY2hlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJldHJpZXZlIGFuIEFwYWNoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBzcGVjaWZpZWQgYnkKICogdmFyaWFibGUuCiAqCiAqIFRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgQXBhY2hlIDIgb3RoZXJ3aXNlIGl0J3MgdW5kZWZpbmVkLgogKgogKiBAcGFyYW0gc3RyaW5nICR2YXJpYWJsZSBUaGUgQXBhY2hlIGVudmlyb25tZW50IHZhcmlhYmxlCiAqIEBwYXJhbSBib29sICR3YWxrX3RvX3RvcCBXaGV0aGVyIHRvIGdldCB0aGUgdG9wLWxldmVsIHZhcmlhYmxlIGF2YWlsYWJsZSB0byBhbGwgQXBhY2hlIGxheWVycy4KICogQHJldHVybiBzdHJpbmcgVGhlIHZhbHVlIG9mIHRoZSBBcGFjaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgb24gc3VjY2VzcwogKiBAdGhyb3dzIEFwYWNoZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gYXBhY2hlX2dldGVudihzdHJpbmcgJHZhcmlhYmxlLCBib29sICR3YWxrX3RvX3RvcCA9IGZhbHNlKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcYXBhY2hlX2dldGVudigkdmFyaWFibGUsICR3YWxrX3RvX3RvcCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBBcGFjaGVFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogRmV0Y2hlcyBhbGwgSFRUUCByZXF1ZXN0IGhlYWRlcnMgZnJvbSB0aGUgY3VycmVudCByZXF1ZXN0LiBXb3JrcyBpbiB0aGUKICogQXBhY2hlLCBGYXN0Q0dJLCBDTEksIEZQTSBhbmQgTlNBUEkgc2VydmVyIG1vZHVsZQogKiBpbiBOZXRzY2FwZS9pUGxhbmV0L1N1bk9ORSB3ZWJzZXJ2ZXJzLgogKgogKiBAcmV0dXJuIGFycmF5IEFuIGFzc29jaWF0aXZlIGFycmF5IG9mIGFsbCB0aGUgSFRUUCBoZWFkZXJzIGluIHRoZSBjdXJyZW50IHJlcXVlc3QuCiAqIEB0aHJvd3MgQXBhY2hlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBhcGFjaGVfcmVxdWVzdF9oZWFkZXJzKCk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcYXBhY2hlX3JlcXVlc3RfaGVhZGVycygpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQXBhY2hlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGFwYWNoZV9yZXNldF90aW1lb3V0IHJlc2V0cyB0aGUgQXBhY2hlIHdyaXRlIHRpbWVyLAogKiB3aGljaCBkZWZhdWx0cyB0byAzMDAgc2Vjb25kcy4gV2l0aCBzZXRfdGltZV9saW1pdCgwKTsKICogaWdub3JlX3VzZXJfYWJvcnQodHJ1ZSkgYW5kIHBlcmlvZGljCiAqIGFwYWNoZV9yZXNldF90aW1lb3V0IGNhbGxzLCBBcGFjaGUgY2FuIHRoZW9yZXRpY2FsbHkKICogcnVuIGZvcmV2ZXIuCiAqCiAqIFRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgQXBhY2hlIDEuCiAqCiAqIEB0aHJvd3MgQXBhY2hlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBhcGFjaGVfcmVzZXRfdGltZW91dCgpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcYXBhY2hlX3Jlc2V0X3RpbWVvdXQoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEFwYWNoZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRmV0Y2ggYWxsIEhUVFAgcmVzcG9uc2UgaGVhZGVycy4gIFdvcmtzIGluIHRoZQogKiBBcGFjaGUsIEZhc3RDR0ksIENMSSwgRlBNIGFuZCBOU0FQSSBzZXJ2ZXIgbW9kdWxlCiAqIGluIE5ldHNjYXBlL2lQbGFuZXQvU3VuT05FIHdlYnNlcnZlcnMuCiAqCiAqIEByZXR1cm4gYXJyYXkgQW4gYXJyYXkgb2YgYWxsIEFwYWNoZSByZXNwb25zZSBoZWFkZXJzIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgQXBhY2hlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBhcGFjaGVfcmVzcG9uc2VfaGVhZGVycygpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGFwYWNoZV9yZXNwb25zZV9oZWFkZXJzKCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBBcGFjaGVFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogYXBhY2hlX3NldGVudiBzZXRzIHRoZSB2YWx1ZSBvZiB0aGUgQXBhY2hlCiAqIGVudmlyb25tZW50IHZhcmlhYmxlIHNwZWNpZmllZCBieQogKiB2YXJpYWJsZS4KICoKICogQHBhcmFtIHN0cmluZyAkdmFyaWFibGUgVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHRoYXQncyBiZWluZyBzZXQuCiAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIFRoZSBuZXcgdmFyaWFibGUgdmFsdWUuCiAqIEBwYXJhbSBib29sICR3YWxrX3RvX3RvcCBXaGV0aGVyIHRvIHNldCB0aGUgdG9wLWxldmVsIHZhcmlhYmxlIGF2YWlsYWJsZSB0byBhbGwgQXBhY2hlIGxheWVycy4KICogQHRocm93cyBBcGFjaGVFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGFwYWNoZV9zZXRlbnYoc3RyaW5nICR2YXJpYWJsZSwgc3RyaW5nICR2YWx1ZSwgYm9vbCAkd2Fsa190b190b3AgPSBmYWxzZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxhcGFjaGVfc2V0ZW52KCR2YXJpYWJsZSwgJHZhbHVlLCAkd2Fsa190b190b3ApOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQXBhY2hlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBGZXRjaGVzIGFsbCBIVFRQIGhlYWRlcnMgZnJvbSB0aGUgY3VycmVudCByZXF1ZXN0LgogKgogKiBUaGlzIGZ1bmN0aW9uIGlzIGFuIGFsaWFzIGZvciBhcGFjaGVfcmVxdWVzdF9oZWFkZXJzLgogKiBQbGVhc2UgcmVhZCB0aGUgYXBhY2hlX3JlcXVlc3RfaGVhZGVycwogKiBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLgogKgogKiBAcmV0dXJuIGFycmF5IEFuIGFzc29jaWF0aXZlIGFycmF5IG9mIGFsbCB0aGUgSFRUUCBoZWFkZXJzIGluIHRoZSBjdXJyZW50IHJlcXVlc3QuCiAqIEB0aHJvd3MgQXBhY2hlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnZXRhbGxoZWFkZXJzKCk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZ2V0YWxsaGVhZGVycygpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQXBhY2hlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHZpcnR1YWwgaXMgYW4gQXBhY2hlLXNwZWNpZmljIGZ1bmN0aW9uIHdoaWNoCiAqIGlzIHNpbWlsYXIgdG8gJmx0OyEtLSNpbmNsdWRlIHZpcnR1YWwuLi4tLSZndDsgaW4KICogbW9kX2luY2x1ZGUuCiAqIEl0IHBlcmZvcm1zIGFuIEFwYWNoZSBzdWItcmVxdWVzdC4gIEl0IGlzIHVzZWZ1bCBmb3IgaW5jbHVkaW5nCiAqIENHSSBzY3JpcHRzIG9yIC5zaHRtbCBmaWxlcywgb3IgYW55dGhpbmcgZWxzZSB0aGF0IHlvdSB3b3VsZAogKiBwYXJzZSB0aHJvdWdoIEFwYWNoZS4gTm90ZSB0aGF0IGZvciBhIENHSSBzY3JpcHQsIHRoZSBzY3JpcHQKICogbXVzdCBnZW5lcmF0ZSB2YWxpZCBDR0kgaGVhZGVycy4gIEF0IHRoZSBtaW5pbXVtIHRoYXQgbWVhbnMgaXQKICogbXVzdCBnZW5lcmF0ZSBhIENvbnRlbnQtVHlwZSBoZWFkZXIuCiAqCiAqIFRvIHJ1biB0aGUgc3ViLXJlcXVlc3QsIGFsbCBidWZmZXJzIGFyZSB0ZXJtaW5hdGVkIGFuZCBmbHVzaGVkIHRvIHRoZQogKiBicm93c2VyLCBwZW5kaW5nIGhlYWRlcnMgYXJlIHNlbnQgdG9vLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgZmlsZSB0aGF0IHRoZSB2aXJ0dWFsIGNvbW1hbmQgd2lsbCBiZSBwZXJmb3JtZWQgb24uCiAqIEB0aHJvd3MgQXBhY2hlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB2aXJ0dWFsKHN0cmluZyAkZmlsZW5hbWUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcdmlydHVhbCgkZmlsZW5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQXBhY2hlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/apcu.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xBcGN1RXhjZXB0aW9uOwoKLyoqCiAqIFJldHJpZXZlcyBjYWNoZWQgaW5mb3JtYXRpb24gYW5kIG1ldGEtZGF0YSBmcm9tIEFQQydzIGRhdGEgc3RvcmUuCiAqCiAqIEBwYXJhbSBib29sICRsaW1pdGVkIElmIGxpbWl0ZWQgaXMgVFJVRSwgdGhlCiAqIHJldHVybiB2YWx1ZSB3aWxsIGV4Y2x1ZGUgdGhlIGluZGl2aWR1YWwgbGlzdCBvZiBjYWNoZSBlbnRyaWVzLiAgVGhpcwogKiBpcyB1c2VmdWwgd2hlbiB0cnlpbmcgdG8gb3B0aW1pemUgY2FsbHMgZm9yIHN0YXRpc3RpY3MgZ2F0aGVyaW5nLgogKiBAcmV0dXJuIGFycmF5IEFycmF5IG9mIGNhY2hlZCBkYXRhIChhbmQgbWV0YS1kYXRhKQogKiBAdGhyb3dzIEFwY3VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGFwY3VfY2FjaGVfaW5mbyhib29sICRsaW1pdGVkID0gZmFsc2UpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGFwY3VfY2FjaGVfaW5mbygkbGltaXRlZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBBcGN1RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGFwY3VfY2FzIHVwZGF0ZXMgYW4gYWxyZWFkeSBleGlzdGluZyBpbnRlZ2VyIHZhbHVlIGlmIHRoZQogKiBvbGQgcGFyYW1ldGVyIG1hdGNoZXMgdGhlIGN1cnJlbnRseSBzdG9yZWQgdmFsdWUKICogd2l0aCB0aGUgdmFsdWUgb2YgdGhlIG5ldyBwYXJhbWV0ZXIuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSBiZWluZyB1cGRhdGVkLgogKiBAcGFyYW0gaW50ICRvbGQgVGhlIG9sZCB2YWx1ZSAodGhlIHZhbHVlIGN1cnJlbnRseSBzdG9yZWQpLgogKiBAcGFyYW0gaW50ICRuZXcgVGhlIG5ldyB2YWx1ZSB0byB1cGRhdGUgdG8uCiAqIEB0aHJvd3MgQXBjdUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gYXBjdV9jYXMoc3RyaW5nICRrZXksIGludCAkb2xkLCBpbnQgJG5ldyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxhcGN1X2Nhcygka2V5LCAkb2xkLCAkbmV3KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEFwY3VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERlY3JlYXNlcyBhIHN0b3JlZCBpbnRlZ2VyIHZhbHVlLgogKgogKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgYmVpbmcgZGVjcmVhc2VkLgogKiBAcGFyYW0gaW50ICRzdGVwIFRoZSBzdGVwLCBvciB2YWx1ZSB0byBkZWNyZWFzZS4KICogQHBhcmFtIGJvb2x8bnVsbCAkc3VjY2VzcyBPcHRpb25hbGx5IHBhc3MgdGhlIHN1Y2Nlc3Mgb3IgZmFpbCBib29sZWFuIHZhbHVlIHRvCiAqIHRoaXMgcmVmZXJlbmNlZCB2YXJpYWJsZS4KICogQHBhcmFtIGludCAkdHRsIFRUTCB0byB1c2UgaWYgdGhlIG9wZXJhdGlvbiBpbnNlcnRzIGEgbmV3IHZhbHVlIChyYXRoZXIgdGhhbiBkZWNyZW1lbnRpbmcgYW4gZXhpc3Rpbmcgb25lKS4KICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiBrZXkncyB2YWx1ZSBvbiBzdWNjZXNzCiAqIEB0aHJvd3MgQXBjdUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gYXBjdV9kZWMoc3RyaW5nICRrZXksIGludCAkc3RlcCA9IDEsID9ib29sICYkc3VjY2VzcyA9IG51bGwsIGludCAkdHRsID0gMCk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGFwY3VfZGVjKCRrZXksICRzdGVwLCAkc3VjY2VzcywgJHR0bCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBBcGN1RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEluY3JlYXNlcyBhIHN0b3JlZCBudW1iZXIuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSBiZWluZyBpbmNyZWFzZWQuCiAqIEBwYXJhbSBpbnQgJHN0ZXAgVGhlIHN0ZXAsIG9yIHZhbHVlIHRvIGluY3JlYXNlLgogKiBAcGFyYW0gYm9vbHxudWxsICRzdWNjZXNzIE9wdGlvbmFsbHkgcGFzcyB0aGUgc3VjY2VzcyBvciBmYWlsIGJvb2xlYW4gdmFsdWUgdG8KICogdGhpcyByZWZlcmVuY2VkIHZhcmlhYmxlLgogKiBAcGFyYW0gaW50ICR0dGwgVFRMIHRvIHVzZSBpZiB0aGUgb3BlcmF0aW9uIGluc2VydHMgYSBuZXcgdmFsdWUgKHJhdGhlciB0aGFuIGluY3JlbWVudGluZyBhbiBleGlzdGluZyBvbmUpLgogKiBAcmV0dXJuIGludCBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIGtleSdzIHZhbHVlIG9uIHN1Y2Nlc3MKICogQHRocm93cyBBcGN1RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBhcGN1X2luYyhzdHJpbmcgJGtleSwgaW50ICRzdGVwID0gMSwgP2Jvb2wgJiRzdWNjZXNzID0gbnVsbCwgaW50ICR0dGwgPSAwKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcYXBjdV9pbmMoJGtleSwgJHN0ZXAsICRzdWNjZXNzLCAkdHRsKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEFwY3VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0cmlldmVzIEFQQ3UgU2hhcmVkIE1lbW9yeSBBbGxvY2F0aW9uIGluZm9ybWF0aW9uLgogKgogKiBAcGFyYW0gYm9vbCAkbGltaXRlZCBXaGVuIHNldCB0byBGQUxTRSAoZGVmYXVsdCkgYXBjdV9zbWFfaW5mbyB3aWxsCiAqIHJldHVybiBhIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggc2VnbWVudC4KICogQHJldHVybiBhcnJheSBBcnJheSBvZiBTaGFyZWQgTWVtb3J5IEFsbG9jYXRpb24gZGF0YTsgRkFMU0Ugb24gZmFpbHVyZS4KICogQHRocm93cyBBcGN1RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBhcGN1X3NtYV9pbmZvKGJvb2wgJGxpbWl0ZWQgPSBmYWxzZSk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcYXBjdV9zbWFfaW5mbygkbGltaXRlZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBBcGN1RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/array.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xBcnJheUV4Y2VwdGlvbjsKCi8qKgogKiBDcmVhdGVzIGFuIGFycmF5IGJ5IHVzaW5nIHRoZSB2YWx1ZXMgZnJvbSB0aGUKICoga2V5cyBhcnJheSBhcyBrZXlzIGFuZCB0aGUgdmFsdWVzIGZyb20gdGhlCiAqIHZhbHVlcyBhcnJheSBhcyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMuCiAqCiAqIEBwYXJhbSBhcnJheSAka2V5cyBBcnJheSBvZiBrZXlzIHRvIGJlIHVzZWQuIElsbGVnYWwgdmFsdWVzIGZvciBrZXkgd2lsbCBiZQogKiBjb252ZXJ0ZWQgdG8gc3RyaW5nLgogKiBAcGFyYW0gYXJyYXkgJHZhbHVlcyBBcnJheSBvZiB2YWx1ZXMgdG8gYmUgdXNlZAogKiBAcmV0dXJuIGFycmF5IFJldHVybnMgdGhlIGNvbWJpbmVkIGFycmF5LCBGQUxTRSBpZiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzCiAqIGZvciBlYWNoIGFycmF5IGlzbid0IGVxdWFsLgogKiBAdGhyb3dzIEFycmF5RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBhcnJheV9jb21iaW5lKGFycmF5ICRrZXlzLCBhcnJheSAkdmFsdWVzKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxhcnJheV9jb21iaW5lKCRrZXlzLCAkdmFsdWVzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEFycmF5RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGFycmF5X2ZsaXAgcmV0dXJucyBhbiBhcnJheSBpbiBmbGlwCiAqIG9yZGVyLCBpLmUuIGtleXMgZnJvbSBhcnJheSBiZWNvbWUgdmFsdWVzIGFuZCB2YWx1ZXMKICogZnJvbSBhcnJheSBiZWNvbWUga2V5cy4KICoKICogTm90ZSB0aGF0IHRoZSB2YWx1ZXMgb2YgYXJyYXkgbmVlZCB0byBiZSB2YWxpZAogKiBrZXlzLCBpLmUuIHRoZXkgbmVlZCB0byBiZSBlaXRoZXIgaW50ZWdlciBvcgogKiBzdHJpbmcuIEEgd2FybmluZyB3aWxsIGJlIGVtaXR0ZWQgaWYgYSB2YWx1ZSBoYXMgdGhlIHdyb25nCiAqIHR5cGUsIGFuZCB0aGUga2V5L3ZhbHVlIHBhaXIgaW4gcXVlc3Rpb24gd2lsbCBub3QgYmUgaW5jbHVkZWQKICogaW4gdGhlIHJlc3VsdC4KICoKICogSWYgYSB2YWx1ZSBoYXMgc2V2ZXJhbCBvY2N1cnJlbmNlcywgdGhlIGxhdGVzdCBrZXkgd2lsbCBiZQogKiB1c2VkIGFzIGl0cyB2YWx1ZSwgYW5kIGFsbCBvdGhlcnMgd2lsbCBiZSBsb3N0LgogKgogKiBAcGFyYW0gYXJyYXkgJGFycmF5IEFuIGFycmF5IG9mIGtleS92YWx1ZSBwYWlycyB0byBiZSBmbGlwcGVkLgogKiBAcmV0dXJuIGFycmF5IFJldHVybnMgdGhlIGZsaXBwZWQgYXJyYXkgb24gc3VjY2Vzcy4KICogQHRocm93cyBBcnJheUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gYXJyYXlfZmxpcChhcnJheSAkYXJyYXkpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGFycmF5X2ZsaXAoJGFycmF5KTsKICAgIGlmICgkcmVzdWx0ID09PSBudWxsKSB7CiAgICAgICAgdGhyb3cgQXJyYXlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogYXJyYXlfcmVwbGFjZV9yZWN1cnNpdmUgcmVwbGFjZXMgdGhlIHZhbHVlcyBvZgogKiBhcnJheTEgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgZnJvbSBhbGwgdGhlIGZvbGxvd2luZwogKiBhcnJheXMuIElmIGEga2V5IGZyb20gdGhlIGZpcnN0IGFycmF5IGV4aXN0cyBpbiB0aGUgc2Vjb25kIGFycmF5LCBpdHMgdmFsdWUKICogd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgdmFsdWUgZnJvbSB0aGUgc2Vjb25kIGFycmF5LiBJZiB0aGUga2V5IGV4aXN0cyBpbiB0aGUKICogc2Vjb25kIGFycmF5LCBhbmQgbm90IHRoZSBmaXJzdCwgaXQgd2lsbCBiZSBjcmVhdGVkIGluIHRoZSBmaXJzdCBhcnJheS4KICogSWYgYSBrZXkgb25seSBleGlzdHMgaW4gdGhlIGZpcnN0IGFycmF5LCBpdCB3aWxsIGJlIGxlZnQgYXMgaXMuCiAqIElmIHNldmVyYWwgYXJyYXlzIGFyZSBwYXNzZWQgZm9yIHJlcGxhY2VtZW50LCB0aGV5IHdpbGwgYmUgcHJvY2Vzc2VkCiAqIGluIG9yZGVyLCB0aGUgbGF0ZXIgYXJyYXkgb3ZlcndyaXRpbmcgdGhlIHByZXZpb3VzIHZhbHVlcy4KICoKICogYXJyYXlfcmVwbGFjZV9yZWN1cnNpdmUgaXMgcmVjdXJzaXZlIDogaXQgd2lsbCByZWN1cnNlIGludG8KICogYXJyYXlzIGFuZCBhcHBseSB0aGUgc2FtZSBwcm9jZXNzIHRvIHRoZSBpbm5lciB2YWx1ZS4KICoKICogV2hlbiB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IGFycmF5IGlzIHNjYWxhciwgaXQgd2lsbCBiZSByZXBsYWNlZAogKiBieSB0aGUgdmFsdWUgaW4gdGhlIHNlY29uZCBhcnJheSwgbWF5IGl0IGJlIHNjYWxhciBvciBhcnJheS4KICogV2hlbiB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IGFycmF5IGFuZCB0aGUgc2Vjb25kIGFycmF5CiAqIGFyZSBib3RoIGFycmF5cywgYXJyYXlfcmVwbGFjZV9yZWN1cnNpdmUgd2lsbCByZXBsYWNlCiAqIHRoZWlyIHJlc3BlY3RpdmUgdmFsdWUgcmVjdXJzaXZlbHkuCiAqCiAqIEBwYXJhbSBhcnJheSAkYXJyYXkxIFRoZSBhcnJheSBpbiB3aGljaCBlbGVtZW50cyBhcmUgcmVwbGFjZWQuCiAqIEBwYXJhbSBhcnJheSAkcGFyYW1zIE9wdGlvbmFsLiBBcnJheXMgZnJvbSB3aGljaCBlbGVtZW50cyB3aWxsIGJlIGV4dHJhY3RlZC4KICogQHJldHVybiBhcnJheSBSZXR1cm5zIGFuIGFycmF5LgogKiBAdGhyb3dzIEFycmF5RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBhcnJheV9yZXBsYWNlX3JlY3Vyc2l2ZShhcnJheSAkYXJyYXkxLCBhcnJheSAgLi4uJHBhcmFtcyk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkcGFyYW1zICE9PSBbXSkgewogICAgICAgICRyZXN1bHQgPSBcYXJyYXlfcmVwbGFjZV9yZWN1cnNpdmUoJGFycmF5MSwgLi4uJHBhcmFtcyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcYXJyYXlfcmVwbGFjZV9yZWN1cnNpdmUoJGFycmF5MSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gbnVsbCkgewogICAgICAgIHRocm93IEFycmF5RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGFycmF5X3JlcGxhY2UgcmVwbGFjZXMgdGhlIHZhbHVlcyBvZgogKiBhcnJheTEgd2l0aCB2YWx1ZXMgaGF2aW5nIHRoZSBzYW1lIGtleXMgaW4gZWFjaCBvZiB0aGUgZm9sbG93aW5nCiAqIGFycmF5cy4gSWYgYSBrZXkgZnJvbSB0aGUgZmlyc3QgYXJyYXkgZXhpc3RzIGluIHRoZSBzZWNvbmQgYXJyYXksIGl0cyB2YWx1ZQogKiB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSB2YWx1ZSBmcm9tIHRoZSBzZWNvbmQgYXJyYXkuIElmIHRoZSBrZXkgZXhpc3RzIGluIHRoZQogKiBzZWNvbmQgYXJyYXksIGFuZCBub3QgdGhlIGZpcnN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIGZpcnN0IGFycmF5LgogKiBJZiBhIGtleSBvbmx5IGV4aXN0cyBpbiB0aGUgZmlyc3QgYXJyYXksIGl0IHdpbGwgYmUgbGVmdCBhcyBpcy4KICogSWYgc2V2ZXJhbCBhcnJheXMgYXJlIHBhc3NlZCBmb3IgcmVwbGFjZW1lbnQsIHRoZXkgd2lsbCBiZSBwcm9jZXNzZWQKICogaW4gb3JkZXIsIHRoZSBsYXRlciBhcnJheXMgb3ZlcndyaXRpbmcgdGhlIHByZXZpb3VzIHZhbHVlcy4KICoKICogYXJyYXlfcmVwbGFjZSBpcyBub3QgcmVjdXJzaXZlIDogaXQgd2lsbCByZXBsYWNlCiAqIHZhbHVlcyBpbiB0aGUgZmlyc3QgYXJyYXkgYnkgd2hhdGV2ZXIgdHlwZSBpcyBpbiB0aGUgc2Vjb25kIGFycmF5LgogKgogKiBAcGFyYW0gYXJyYXkgJGFycmF5MSBUaGUgYXJyYXkgaW4gd2hpY2ggZWxlbWVudHMgYXJlIHJlcGxhY2VkLgogKiBAcGFyYW0gYXJyYXkgJHBhcmFtcyBBcnJheXMgZnJvbSB3aGljaCBlbGVtZW50cyB3aWxsIGJlIGV4dHJhY3RlZC4KICogVmFsdWVzIGZyb20gbGF0ZXIgYXJyYXlzIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgdmFsdWVzLgogKiBAcmV0dXJuIGFycmF5IFJldHVybnMgYW4gYXJyYXkuCiAqIEB0aHJvd3MgQXJyYXlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGFycmF5X3JlcGxhY2UoYXJyYXkgJGFycmF5MSwgYXJyYXkgIC4uLiRwYXJhbXMpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHBhcmFtcyAhPT0gW10pIHsKICAgICAgICAkcmVzdWx0ID0gXGFycmF5X3JlcGxhY2UoJGFycmF5MSwgLi4uJHBhcmFtcyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcYXJyYXlfcmVwbGFjZSgkYXJyYXkxKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBudWxsKSB7CiAgICAgICAgdGhyb3cgQXJyYXlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQXBwbGllcyB0aGUgdXNlci1kZWZpbmVkIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGVhY2gKICogZWxlbWVudCBvZiB0aGUgYXJyYXkuIFRoaXMgZnVuY3Rpb24gd2lsbCByZWN1cnNlCiAqIGludG8gZGVlcGVyIGFycmF5cy4KICoKICogQHBhcmFtIGFycmF5ICRhcnJheSBUaGUgaW5wdXQgYXJyYXkuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sgVHlwaWNhbGx5LCBjYWxsYmFjayB0YWtlcyBvbiB0d28gcGFyYW1ldGVycy4KICogVGhlIGFycmF5IHBhcmFtZXRlcidzIHZhbHVlIGJlaW5nIHRoZSBmaXJzdCwgYW5kCiAqIHRoZSBrZXkvaW5kZXggc2Vjb25kLgogKgogKiBJZiBjYWxsYmFjayBuZWVkcyB0byBiZSB3b3JraW5nIHdpdGggdGhlCiAqIGFjdHVhbCB2YWx1ZXMgb2YgdGhlIGFycmF5LCBzcGVjaWZ5IHRoZSBmaXJzdCBwYXJhbWV0ZXIgb2YKICogY2FsbGJhY2sgYXMgYQogKiByZWZlcmVuY2UuIFRoZW4sCiAqIGFueSBjaGFuZ2VzIG1hZGUgdG8gdGhvc2UgZWxlbWVudHMgd2lsbCBiZSBtYWRlIGluIHRoZQogKiBvcmlnaW5hbCBhcnJheSBpdHNlbGYuCiAqIEBwYXJhbSBtaXhlZCAkdXNlcmRhdGEgSWYgdGhlIG9wdGlvbmFsIHVzZXJkYXRhIHBhcmFtZXRlciBpcyBzdXBwbGllZCwKICogaXQgd2lsbCBiZSBwYXNzZWQgYXMgdGhlIHRoaXJkIHBhcmFtZXRlciB0byB0aGUKICogY2FsbGJhY2suCiAqIEB0aHJvd3MgQXJyYXlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGFycmF5X3dhbGtfcmVjdXJzaXZlKGFycmF5ICYkYXJyYXksIGNhbGxhYmxlICRjYWxsYmFjaywgJHVzZXJkYXRhID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxhcnJheV93YWxrX3JlY3Vyc2l2ZSgkYXJyYXksICRjYWxsYmFjaywgJHVzZXJkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEFycmF5RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHNvcnRzIGFuIGFycmF5IHN1Y2ggdGhhdCBhcnJheSBpbmRpY2VzIG1haW50YWluIHRoZWlyCiAqIGNvcnJlbGF0aW9uIHdpdGggdGhlIGFycmF5IGVsZW1lbnRzIHRoZXkgYXJlIGFzc29jaWF0ZWQgd2l0aC4KICoKICogVGhpcyBpcyB1c2VkIG1haW5seSB3aGVuIHNvcnRpbmcgYXNzb2NpYXRpdmUgYXJyYXlzIHdoZXJlIHRoZSBhY3R1YWwKICogZWxlbWVudCBvcmRlciBpcyBzaWduaWZpY2FudC4KICoKICogQHBhcmFtIGFycmF5ICRhcnJheSBUaGUgaW5wdXQgYXJyYXkuCiAqIEBwYXJhbSBpbnQgJHNvcnRfZmxhZ3MgWW91IG1heSBtb2RpZnkgdGhlIGJlaGF2aW9yIG9mIHRoZSBzb3J0IHVzaW5nIHRoZSBvcHRpb25hbCBwYXJhbWV0ZXIKICogc29ydF9mbGFncywgZm9yIGRldGFpbHMgc2VlCiAqIHNvcnQuCiAqIEB0aHJvd3MgQXJyYXlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGFyc29ydChhcnJheSAmJGFycmF5LCBpbnQgJHNvcnRfZmxhZ3MgPSBTT1JUX1JFR1VMQVIpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcYXJzb3J0KCRhcnJheSwgJHNvcnRfZmxhZ3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQXJyYXlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gc29ydHMgYW4gYXJyYXkgc3VjaCB0aGF0IGFycmF5IGluZGljZXMgbWFpbnRhaW4KICogdGhlaXIgY29ycmVsYXRpb24gd2l0aCB0aGUgYXJyYXkgZWxlbWVudHMgdGhleSBhcmUgYXNzb2NpYXRlZAogKiB3aXRoLiAgVGhpcyBpcyB1c2VkIG1haW5seSB3aGVuIHNvcnRpbmcgYXNzb2NpYXRpdmUgYXJyYXlzIHdoZXJlCiAqIHRoZSBhY3R1YWwgZWxlbWVudCBvcmRlciBpcyBzaWduaWZpY2FudC4KICoKICogQHBhcmFtIGFycmF5ICRhcnJheSBUaGUgaW5wdXQgYXJyYXkuCiAqIEBwYXJhbSBpbnQgJHNvcnRfZmxhZ3MgWW91IG1heSBtb2RpZnkgdGhlIGJlaGF2aW9yIG9mIHRoZSBzb3J0IHVzaW5nIHRoZSBvcHRpb25hbAogKiBwYXJhbWV0ZXIgc29ydF9mbGFncywgZm9yIGRldGFpbHMKICogc2VlIHNvcnQuCiAqIEB0aHJvd3MgQXJyYXlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGFzb3J0KGFycmF5ICYkYXJyYXksIGludCAkc29ydF9mbGFncyA9IFNPUlRfUkVHVUxBUik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxhc29ydCgkYXJyYXksICRzb3J0X2ZsYWdzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEFycmF5RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTb3J0cyBhbiBhcnJheSBieSBrZXkgaW4gcmV2ZXJzZSBvcmRlciwgbWFpbnRhaW5pbmcga2V5IHRvIGRhdGEKICogY29ycmVsYXRpb25zLiBUaGlzIGlzIHVzZWZ1bCBtYWlubHkgZm9yIGFzc29jaWF0aXZlIGFycmF5cy4KICoKICogQHBhcmFtIGFycmF5ICRhcnJheSBUaGUgaW5wdXQgYXJyYXkuCiAqIEBwYXJhbSBpbnQgJHNvcnRfZmxhZ3MgWW91IG1heSBtb2RpZnkgdGhlIGJlaGF2aW9yIG9mIHRoZSBzb3J0IHVzaW5nIHRoZSBvcHRpb25hbCBwYXJhbWV0ZXIKICogc29ydF9mbGFncywgZm9yIGRldGFpbHMgc2VlCiAqIHNvcnQuCiAqIEB0aHJvd3MgQXJyYXlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGtyc29ydChhcnJheSAmJGFycmF5LCBpbnQgJHNvcnRfZmxhZ3MgPSBTT1JUX1JFR1VMQVIpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBca3Jzb3J0KCRhcnJheSwgJHNvcnRfZmxhZ3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQXJyYXlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNvcnRzIGFuIGFycmF5IGJ5IGtleSwgbWFpbnRhaW5pbmcga2V5IHRvIGRhdGEgY29ycmVsYXRpb25zLiBUaGlzIGlzCiAqIHVzZWZ1bCBtYWlubHkgZm9yIGFzc29jaWF0aXZlIGFycmF5cy4KICoKICogQHBhcmFtIGFycmF5ICRhcnJheSBUaGUgaW5wdXQgYXJyYXkuCiAqIEBwYXJhbSBpbnQgJHNvcnRfZmxhZ3MgWW91IG1heSBtb2RpZnkgdGhlIGJlaGF2aW9yIG9mIHRoZSBzb3J0IHVzaW5nIHRoZSBvcHRpb25hbAogKiBwYXJhbWV0ZXIgc29ydF9mbGFncywgZm9yIGRldGFpbHMKICogc2VlIHNvcnQuCiAqIEB0aHJvd3MgQXJyYXlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGtzb3J0KGFycmF5ICYkYXJyYXksIGludCAkc29ydF9mbGFncyA9IFNPUlRfUkVHVUxBUik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxrc29ydCgkYXJyYXksICRzb3J0X2ZsYWdzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEFycmF5RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBuYXRjYXNlc29ydCBpcyBhIGNhc2UgaW5zZW5zaXRpdmUgdmVyc2lvbiBvZgogKiBuYXRzb3J0LgogKgogKiBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgYSBzb3J0IGFsZ29yaXRobSB0aGF0IG9yZGVycwogKiBhbHBoYW51bWVyaWMgc3RyaW5ncyBpbiB0aGUgd2F5IGEgaHVtYW4gYmVpbmcgd291bGQgd2hpbGUgbWFpbnRhaW5pbmcKICoga2V5L3ZhbHVlIGFzc29jaWF0aW9ucy4gIFRoaXMgaXMgZGVzY3JpYmVkIGFzIGEgIm5hdHVyYWwgb3JkZXJpbmciLgogKgogKiBAcGFyYW0gYXJyYXkgJGFycmF5IFRoZSBpbnB1dCBhcnJheS4KICogQHRocm93cyBBcnJheUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbmF0Y2FzZXNvcnQoYXJyYXkgJiRhcnJheSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxuYXRjYXNlc29ydCgkYXJyYXkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQXJyYXlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyBhIHNvcnQgYWxnb3JpdGhtIHRoYXQgb3JkZXJzIGFscGhhbnVtZXJpYyBzdHJpbmdzCiAqIGluIHRoZSB3YXkgYSBodW1hbiBiZWluZyB3b3VsZCB3aGlsZSBtYWludGFpbmluZyBrZXkvdmFsdWUgYXNzb2NpYXRpb25zLgogKiBUaGlzIGlzIGRlc2NyaWJlZCBhcyBhICJuYXR1cmFsIG9yZGVyaW5nIi4gIEFuIGV4YW1wbGUgb2YgdGhlIGRpZmZlcmVuY2UKICogYmV0d2VlbiB0aGlzIGFsZ29yaXRobSBhbmQgdGhlIHJlZ3VsYXIgY29tcHV0ZXIgc3RyaW5nIHNvcnRpbmcgYWxnb3JpdGhtcwogKiAodXNlZCBpbiBzb3J0KSBjYW4gYmUgc2VlbiBpbiB0aGUgZXhhbXBsZSBiZWxvdy4KICoKICogQHBhcmFtIGFycmF5ICRhcnJheSBUaGUgaW5wdXQgYXJyYXkuCiAqIEB0aHJvd3MgQXJyYXlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG5hdHNvcnQoYXJyYXkgJiRhcnJheSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxuYXRzb3J0KCRhcnJheSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBBcnJheUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBzb3J0cyBhbiBhcnJheSBpbiByZXZlcnNlIG9yZGVyIChoaWdoZXN0IHRvIGxvd2VzdCkuCiAqCiAqIEBwYXJhbSBhcnJheSAkYXJyYXkgVGhlIGlucHV0IGFycmF5LgogKiBAcGFyYW0gaW50ICRzb3J0X2ZsYWdzIFlvdSBtYXkgbW9kaWZ5IHRoZSBiZWhhdmlvciBvZiB0aGUgc29ydCB1c2luZyB0aGUgb3B0aW9uYWwKICogcGFyYW1ldGVyIHNvcnRfZmxhZ3MsIGZvciBkZXRhaWxzIHNlZQogKiBzb3J0LgogKiBAdGhyb3dzIEFycmF5RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiByc29ydChhcnJheSAmJGFycmF5LCBpbnQgJHNvcnRfZmxhZ3MgPSBTT1JUX1JFR1VMQVIpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccnNvcnQoJGFycmF5LCAkc29ydF9mbGFncyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBBcnJheUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBzaHVmZmxlcyAocmFuZG9taXplcyB0aGUgb3JkZXIgb2YgdGhlIGVsZW1lbnRzIGluKSBhbiBhcnJheS4KICogSXQgdXNlcyBhIHBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB0aGF0IGlzIG5vdCBzdWl0YWJsZSBmb3IKICogY3J5cHRvZ3JhcGhpYyBwdXJwb3Nlcy4KICoKICogQHBhcmFtIGFycmF5ICRhcnJheSBUaGUgYXJyYXkuCiAqIEB0aHJvd3MgQXJyYXlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNodWZmbGUoYXJyYXkgJiRhcnJheSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzaHVmZmxlKCRhcnJheSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBBcnJheUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBzb3J0cyBhbiBhcnJheS4gIEVsZW1lbnRzIHdpbGwgYmUgYXJyYW5nZWQgZnJvbQogKiBsb3dlc3QgdG8gaGlnaGVzdCB3aGVuIHRoaXMgZnVuY3Rpb24gaGFzIGNvbXBsZXRlZC4KICoKICogQHBhcmFtIGFycmF5ICRhcnJheSBUaGUgaW5wdXQgYXJyYXkuCiAqIEBwYXJhbSBpbnQgJHNvcnRfZmxhZ3MgVGhlIG9wdGlvbmFsIHNlY29uZCBwYXJhbWV0ZXIgc29ydF9mbGFncwogKiBtYXkgYmUgdXNlZCB0byBtb2RpZnkgdGhlIHNvcnRpbmcgYmVoYXZpb3IgdXNpbmcgdGhlc2UgdmFsdWVzOgogKgogKiBTb3J0aW5nIHR5cGUgZmxhZ3M6CiAqCiAqCiAqIFNPUlRfUkVHVUxBUiAtIGNvbXBhcmUgaXRlbXMgbm9ybWFsbHk7CiAqIHRoZSBkZXRhaWxzIGFyZSBkZXNjcmliZWQgaW4gdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzIHNlY3Rpb24KICoKICoKICogU09SVF9OVU1FUklDIC0gY29tcGFyZSBpdGVtcyBudW1lcmljYWxseQogKgogKgogKiBTT1JUX1NUUklORyAtIGNvbXBhcmUgaXRlbXMgYXMgc3RyaW5ncwogKgogKgogKgogKiBTT1JUX0xPQ0FMRV9TVFJJTkcgLSBjb21wYXJlIGl0ZW1zIGFzCiAqIHN0cmluZ3MsIGJhc2VkIG9uIHRoZSBjdXJyZW50IGxvY2FsZS4gSXQgdXNlcyB0aGUgbG9jYWxlLAogKiB3aGljaCBjYW4gYmUgY2hhbmdlZCB1c2luZyBzZXRsb2NhbGUKICoKICoKICoKICoKICogU09SVF9OQVRVUkFMIC0gY29tcGFyZSBpdGVtcyBhcyBzdHJpbmdzCiAqIHVzaW5nICJuYXR1cmFsIG9yZGVyaW5nIiBsaWtlIG5hdHNvcnQKICoKICoKICoKICoKICogU09SVF9GTEFHX0NBU0UgLSBjYW4gYmUgY29tYmluZWQKICogKGJpdHdpc2UgT1IpIHdpdGgKICogU09SVF9TVFJJTkcgb3IKICogU09SVF9OQVRVUkFMIHRvIHNvcnQgc3RyaW5ncyBjYXNlLWluc2Vuc2l0aXZlbHkKICoKICoKICoKICogQHRocm93cyBBcnJheUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc29ydChhcnJheSAmJGFycmF5LCBpbnQgJHNvcnRfZmxhZ3MgPSBTT1JUX1JFR1VMQVIpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc29ydCgkYXJyYXksICRzb3J0X2ZsYWdzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEFycmF5RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHNvcnRzIGFuIGFycmF5IHN1Y2ggdGhhdCBhcnJheSBpbmRpY2VzIG1haW50YWluIHRoZWlyCiAqIGNvcnJlbGF0aW9uIHdpdGggdGhlIGFycmF5IGVsZW1lbnRzIHRoZXkgYXJlIGFzc29jaWF0ZWQgd2l0aCwgdXNpbmcgYQogKiB1c2VyLWRlZmluZWQgY29tcGFyaXNvbiBmdW5jdGlvbi4KICoKICogVGhpcyBpcyB1c2VkIG1haW5seSB3aGVuIHNvcnRpbmcgYXNzb2NpYXRpdmUgYXJyYXlzIHdoZXJlIHRoZSBhY3R1YWwKICogZWxlbWVudCBvcmRlciBpcyBzaWduaWZpY2FudC4KICoKICogQHBhcmFtIGFycmF5ICRhcnJheSBUaGUgaW5wdXQgYXJyYXkuCiAqIEBwYXJhbSBjYWxsYWJsZSAkdmFsdWVfY29tcGFyZV9mdW5jIFNlZSB1c29ydCBhbmQgdWtzb3J0IGZvcgogKiBleGFtcGxlcyBvZiB1c2VyLWRlZmluZWQgY29tcGFyaXNvbiBmdW5jdGlvbnMuCiAqIEB0aHJvd3MgQXJyYXlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHVhc29ydChhcnJheSAmJGFycmF5LCBjYWxsYWJsZSAkdmFsdWVfY29tcGFyZV9mdW5jKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHVhc29ydCgkYXJyYXksICR2YWx1ZV9jb21wYXJlX2Z1bmMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQXJyYXlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIHVrc29ydCB3aWxsIHNvcnQgdGhlIGtleXMgb2YgYW4gYXJyYXkgdXNpbmcgYQogKiB1c2VyLXN1cHBsaWVkIGNvbXBhcmlzb24gZnVuY3Rpb24uICBJZiB0aGUgYXJyYXkgeW91IHdpc2ggdG8gc29ydAogKiBuZWVkcyB0byBiZSBzb3J0ZWQgYnkgc29tZSBub24tdHJpdmlhbCBjcml0ZXJpYSwgeW91IHNob3VsZCB1c2UKICogdGhpcyBmdW5jdGlvbi4KICoKICogQHBhcmFtIGFycmF5ICRhcnJheSBUaGUgaW5wdXQgYXJyYXkuCiAqIEBwYXJhbSBjYWxsYWJsZSAka2V5X2NvbXBhcmVfZnVuYyBUaGUgY29tcGFyaXNvbiBmdW5jdGlvbiBtdXN0IHJldHVybiBhbiBpbnRlZ2VyIGxlc3MgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiB6ZXJvIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBjb25zaWRlcmVkIHRvIGJlIHJlc3BlY3RpdmVseSBsZXNzIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4gdGhlIHNlY29uZC4KICogTm90ZSB0aGF0IGJlZm9yZSBQSFAgNy4wLjAgdGhpcyBpbnRlZ2VyIGhhZCB0byBiZSBpbiB0aGUgcmFuZ2UgZnJvbSAtMjE0NzQ4MzY0OCB0byAyMTQ3NDgzNjQ3LgogKiBAdGhyb3dzIEFycmF5RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB1a3NvcnQoYXJyYXkgJiRhcnJheSwgY2FsbGFibGUgJGtleV9jb21wYXJlX2Z1bmMpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcdWtzb3J0KCRhcnJheSwgJGtleV9jb21wYXJlX2Z1bmMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQXJyYXlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzb3J0IGFuIGFycmF5IGJ5IGl0cyB2YWx1ZXMgdXNpbmcgYSB1c2VyLXN1cHBsaWVkCiAqIGNvbXBhcmlzb24gZnVuY3Rpb24uICBJZiB0aGUgYXJyYXkgeW91IHdpc2ggdG8gc29ydCBuZWVkcyB0byBiZSBzb3J0ZWQgYnkKICogc29tZSBub24tdHJpdmlhbCBjcml0ZXJpYSwgeW91IHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvbi4KICoKICogQHBhcmFtIGFycmF5ICRhcnJheSBUaGUgaW5wdXQgYXJyYXkuCiAqIEBwYXJhbSBjYWxsYWJsZSAkdmFsdWVfY29tcGFyZV9mdW5jIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGFuIGludGVnZXIgbGVzcyB0aGFuLCBlcXVhbCB0bywgb3IgZ3JlYXRlciB0aGFuIHplcm8gaWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGNvbnNpZGVyZWQgdG8gYmUgcmVzcGVjdGl2ZWx5IGxlc3MgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiB0aGUgc2Vjb25kLgogKiBOb3RlIHRoYXQgYmVmb3JlIFBIUCA3LjAuMCB0aGlzIGludGVnZXIgaGFkIHRvIGJlIGluIHRoZSByYW5nZSBmcm9tIC0yMTQ3NDgzNjQ4IHRvIDIxNDc0ODM2NDcuCiAqCiAqIFJldHVybmluZyBub24taW50ZWdlciB2YWx1ZXMgZnJvbSB0aGUgY29tcGFyaXNvbgogKiBmdW5jdGlvbiwgc3VjaCBhcyBmbG9hdCwgd2lsbCByZXN1bHQgaW4gYW4gaW50ZXJuYWwgY2FzdCB0bwogKiBpbnRlZ2VyIG9mIHRoZSBjYWxsYmFjaydzIHJldHVybiB2YWx1ZS4gU28gdmFsdWVzIHN1Y2ggYXMKICogMC45OSBhbmQgMC4xIHdpbGwgYm90aCBiZSBjYXN0IHRvIGFuIGludGVnZXIgdmFsdWUgb2YgMCwgd2hpY2ggd2lsbAogKiBjb21wYXJlIHN1Y2ggdmFsdWVzIGFzIGVxdWFsLgogKiBAdGhyb3dzIEFycmF5RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB1c29ydChhcnJheSAmJGFycmF5LCBjYWxsYWJsZSAkdmFsdWVfY29tcGFyZV9mdW5jKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHVzb3J0KCRhcnJheSwgJHZhbHVlX2NvbXBhcmVfZnVuYyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBBcnJheUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/bzip2.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xCemlwMkV4Y2VwdGlvbjsKCi8qKgogKiBDbG9zZXMgdGhlIGdpdmVuIGJ6aXAyIGZpbGUgcG9pbnRlci4KICoKICogQHBhcmFtIHJlc291cmNlICRieiBUaGUgZmlsZSBwb2ludGVyLiBJdCBtdXN0IGJlIHZhbGlkIGFuZCBtdXN0IHBvaW50IHRvIGEgZmlsZQogKiBzdWNjZXNzZnVsbHkgb3BlbmVkIGJ5IGJ6b3Blbi4KICogQHRocm93cyBCemlwMkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gYnpjbG9zZSgkYnopOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcYnpjbG9zZSgkYnopOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQnppcDJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEZvcmNlcyBhIHdyaXRlIG9mIGFsbCBidWZmZXJlZCBiemlwMiBkYXRhIGZvciB0aGUgZmlsZSBwb2ludGVyCiAqIGJ6LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGJ6IFRoZSBmaWxlIHBvaW50ZXIuIEl0IG11c3QgYmUgdmFsaWQgYW5kIG11c3QgcG9pbnQgdG8gYSBmaWxlCiAqIHN1Y2Nlc3NmdWxseSBvcGVuZWQgYnkgYnpvcGVuLgogKiBAdGhyb3dzIEJ6aXAyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBiemZsdXNoKCRieik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxiemZsdXNoKCRieik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBCemlwMkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogYnpyZWFkIHJlYWRzIGZyb20gdGhlIGdpdmVuIGJ6aXAyIGZpbGUgcG9pbnRlci4KICoKICogUmVhZGluZyBzdG9wcyB3aGVuIGxlbmd0aCAodW5jb21wcmVzc2VkKSBieXRlcyBoYXZlCiAqIGJlZW4gcmVhZCBvciBFT0YgaXMgcmVhY2hlZCwgd2hpY2hldmVyIGNvbWVzIGZpcnN0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGJ6IFRoZSBmaWxlIHBvaW50ZXIuIEl0IG11c3QgYmUgdmFsaWQgYW5kIG11c3QgcG9pbnQgdG8gYSBmaWxlCiAqIHN1Y2Nlc3NmdWxseSBvcGVuZWQgYnkgYnpvcGVuLgogKiBAcGFyYW0gaW50ICRsZW5ndGggSWYgbm90IHNwZWNpZmllZCwgYnpyZWFkIHdpbGwgcmVhZCAxMDI0CiAqICh1bmNvbXByZXNzZWQpIGJ5dGVzIGF0IGEgdGltZS4gQSBtYXhpbXVtIG9mIDgxOTIKICogdW5jb21wcmVzc2VkIGJ5dGVzIHdpbGwgYmUgcmVhZCBhdCBhIHRpbWUuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIHVuY29tcHJlc3NlZCBkYXRhLgogKiBAdGhyb3dzIEJ6aXAyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBienJlYWQoJGJ6LCBpbnQgJGxlbmd0aCA9IDEwMjQpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxienJlYWQoJGJ6LCAkbGVuZ3RoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEJ6aXAyRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGJ6d3JpdGUgd3JpdGVzIGEgc3RyaW5nIGludG8gdGhlIGdpdmVuIGJ6aXAyIGZpbGUKICogc3RyZWFtLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGJ6IFRoZSBmaWxlIHBvaW50ZXIuIEl0IG11c3QgYmUgdmFsaWQgYW5kIG11c3QgcG9pbnQgdG8gYSBmaWxlCiAqIHN1Y2Nlc3NmdWxseSBvcGVuZWQgYnkgYnpvcGVuLgogKiBAcGFyYW0gc3RyaW5nICRkYXRhIFRoZSB3cml0dGVuIGRhdGEuCiAqIEBwYXJhbSBpbnQgJGxlbmd0aCBJZiBzdXBwbGllZCwgd3JpdGluZyB3aWxsIHN0b3AgYWZ0ZXIgbGVuZ3RoCiAqICh1bmNvbXByZXNzZWQpIGJ5dGVzIGhhdmUgYmVlbiB3cml0dGVuIG9yIHRoZSBlbmQgb2YKICogZGF0YSBpcyByZWFjaGVkLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLgogKiBAdGhyb3dzIEJ6aXAyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBiendyaXRlKCRieiwgc3RyaW5nICRkYXRhLCBpbnQgJGxlbmd0aCA9IG51bGwpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRsZW5ndGggIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGJ6d3JpdGUoJGJ6LCAkZGF0YSwgJGxlbmd0aCk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcYnp3cml0ZSgkYnosICRkYXRhKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEJ6aXAyRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/calendar.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xDYWxlbmRhckV4Y2VwdGlvbjsKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgVW5peCB0aW1lc3RhbXAgY29ycmVzcG9uZGluZyB0byB0aGUKICogSnVsaWFuIERheSBnaXZlbiBpbiBqZGF5IG9yIEZBTFNFIGlmCiAqIGpkYXkgaXMgb3V0c2lkZSBvZiB0aGUgYWxsb3dlZCByYW5nZS4gVGhlIHRpbWUgcmV0dXJuZWQgaXMKICogVVRDLgogKgogKiBAcGFyYW0gaW50ICRqZGF5IEEganVsaWFuIGRheSBudW1iZXIgYmV0d2VlbiAyNDQwNTg4IGFuZCAxMDY3NTE5OTM2MDc4ODgKICogb24gNjRiaXQgc3lzdGVtcywgb3IgYmV0d2VlbiAyNDQwNTg4IGFuZCAyNDY1NDQzIG9uIDMyYml0IHN5c3RlbXMuCiAqIEByZXR1cm4gaW50IFRoZSB1bml4IHRpbWVzdGFtcCBmb3IgdGhlIHN0YXJ0IChtaWRuaWdodCwgbm90IG5vb24pIG9mIHRoZSBnaXZlbiBKdWxpYW4gZGF5LgogKiBAdGhyb3dzIENhbGVuZGFyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBqZHRvdW5peChpbnQgJGpkYXkpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxqZHRvdW5peCgkamRheSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBDYWxlbmRhckV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/classobj.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xDbGFzc29iakV4Y2VwdGlvbjsKCi8qKgogKiBDcmVhdGVzIGFuIGFsaWFzIG5hbWVkIGFsaWFzCiAqIGJhc2VkIG9uIHRoZSB1c2VyIGRlZmluZWQgY2xhc3Mgb3JpZ2luYWwuCiAqIFRoZSBhbGlhc2VkIGNsYXNzIGlzIGV4YWN0bHkgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsIGNsYXNzLgogKgogKiBAcGFyYW0gc3RyaW5nICRvcmlnaW5hbCBUaGUgb3JpZ2luYWwgY2xhc3MuCiAqIEBwYXJhbSBzdHJpbmcgJGFsaWFzIFRoZSBhbGlhcyBuYW1lIGZvciB0aGUgY2xhc3MuCiAqIEBwYXJhbSBib29sICRhdXRvbG9hZCBXaGV0aGVyIHRvIGF1dG9sb2FkIGlmIHRoZSBvcmlnaW5hbCBjbGFzcyBpcyBub3QgZm91bmQuCiAqIEB0aHJvd3MgQ2xhc3NvYmpFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGNsYXNzX2FsaWFzKHN0cmluZyAkb3JpZ2luYWwsIHN0cmluZyAkYWxpYXMsIGJvb2wgJGF1dG9sb2FkID0gdHJ1ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxjbGFzc19hbGlhcygkb3JpZ2luYWwsICRhbGlhcywgJGF1dG9sb2FkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IENsYXNzb2JqRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/com.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xDb21FeGNlcHRpb247CgovKioKICogSW5zdHJ1Y3RzIENPTSB0byBzaW5rIGV2ZW50cyBnZW5lcmF0ZWQgYnkKICogY29tb2JqZWN0IGludG8gdGhlIFBIUCBvYmplY3QKICogc2lua29iamVjdC4KICoKICogQmUgY2FyZWZ1bCBob3cgeW91IHVzZSB0aGlzIGZlYXR1cmU7IGlmIHlvdSBhcmUgZG9pbmcgc29tZXRoaW5nIHNpbWlsYXIKICogdG8gdGhlIGV4YW1wbGUgYmVsb3csIHRoZW4gaXQgZG9lc24ndCByZWFsbHkgbWFrZSBzZW5zZSB0byBydW4gaXQgaW4gYQogKiB3ZWIgc2VydmVyIGNvbnRleHQuCiAqCiAqIEBwYXJhbSBvYmplY3QgJGNvbW9iamVjdAogKiBAcGFyYW0gb2JqZWN0ICRzaW5rb2JqZWN0IHNpbmtvYmplY3Qgc2hvdWxkIGJlIGFuIGluc3RhbmNlIG9mIGEgY2xhc3Mgd2l0aAogKiBtZXRob2RzIG5hbWVkIGFmdGVyIHRob3NlIG9mIHRoZSBkZXNpcmVkIGRpc3BpbnRlcmZhY2U7IHlvdSBtYXkgdXNlCiAqIGNvbV9wcmludF90eXBlaW5mbyB0byBoZWxwIGdlbmVyYXRlIGEgdGVtcGxhdGUgY2xhc3MKICogZm9yIHRoaXMgcHVycG9zZS4KICogQHBhcmFtIG1peGVkICRzaW5raW50ZXJmYWNlIFBIUCB3aWxsIGF0dGVtcHQgdG8gdXNlIHRoZSBkZWZhdWx0IGRpc3BpbnRlcmZhY2UgdHlwZSBzcGVjaWZpZWQgYnkKICogdGhlIHR5cGVsaWJyYXJ5IGFzc29jaWF0ZWQgd2l0aCBjb21vYmplY3QsIGJ1dAogKiB5b3UgbWF5IG92ZXJyaWRlIHRoaXMgY2hvaWNlIGJ5IHNldHRpbmcKICogc2lua2ludGVyZmFjZSB0byB0aGUgbmFtZSBvZiB0aGUgZGlzcGludGVyZmFjZQogKiB0aGF0IHlvdSB3YW50IHRvIHVzZS4KICogQHRocm93cyBDb21FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGNvbV9ldmVudF9zaW5rKG9iamVjdCAkY29tb2JqZWN0LCBvYmplY3QgJHNpbmtvYmplY3QsICRzaW5raW50ZXJmYWNlID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRzaW5raW50ZXJmYWNlICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxjb21fZXZlbnRfc2luaygkY29tb2JqZWN0LCAkc2lua29iamVjdCwgJHNpbmtpbnRlcmZhY2UpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGNvbV9ldmVudF9zaW5rKCRjb21vYmplY3QsICRzaW5rb2JqZWN0KTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IENvbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogTG9hZHMgYSB0eXBlLWxpYnJhcnkgYW5kIHJlZ2lzdGVycyBpdHMgY29uc3RhbnRzIGluIHRoZSBlbmdpbmUsIGFzIHRob3VnaAogKiB0aGV5IHdlcmUgZGVmaW5lZCB1c2luZyBkZWZpbmUuCiAqCiAqIE5vdGUgdGhhdCBpdCBpcyBtdWNoIG1vcmUgZWZmaWNpZW50IHRvIHVzZSB0aGUgIGNvbmZpZ3VyYXRpb24gc2V0dGluZyB0byBwcmUtbG9hZCBhbmQKICogcmVnaXN0ZXIgdGhlIGNvbnN0YW50cywgYWx0aG91Z2ggbm90IHNvIGZsZXhpYmxlLgogKgogKiBJZiB5b3UgaGF2ZSB0dXJuZWQgb24gLCB0aGVuCiAqIFBIUCB3aWxsIGF0dGVtcHQgdG8gYXV0b21hdGljYWxseSByZWdpc3RlciB0aGUgY29uc3RhbnRzIGFzc29jaWF0ZWQgd2l0aCBhCiAqIENPTSBvYmplY3Qgd2hlbiB5b3UgaW5zdGFudGlhdGUgaXQuICBUaGlzIGRlcGVuZHMgb24gdGhlIGludGVyZmFjZXMKICogcHJvdmlkZWQgYnkgdGhlIENPTSBvYmplY3QgaXRzZWxmLCBhbmQgbWF5IG5vdCBhbHdheXMgYmUgcG9zc2libGUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHR5cGVsaWJfbmFtZSB0eXBlbGliX25hbWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogKgogKgogKgogKiBUaGUgZmlsZW5hbWUgb2YgYSAudGxiIGZpbGUgb3IgdGhlIGV4ZWN1dGFibGUgbW9kdWxlCiAqIHRoYXQgY29udGFpbnMgdGhlIHR5cGUgbGlicmFyeS4KICoKICoKICoKICoKICogVGhlIHR5cGUgbGlicmFyeSBHVUlELCBmb2xsb3dlZCBieSBpdHMgdmVyc2lvbiBudW1iZXIsIGZvciBleGFtcGxlCiAqIHswMDAwMDIwMC0wMDAwLTAwMTAtODAwMC0wMEFBMDA2RDJFQTR9LDIsMC4KICoKICoKICoKICoKICogVGhlIHR5cGUgbGlicmFyeSBuYW1lLCBlLmcuIE1pY3Jvc29mdCBPTEUgREIgQWN0aXZlWCBEYXRhCiAqIE9iamVjdHMgMS4wIExpYnJhcnkuCiAqCiAqCiAqCiAqIFBIUCB3aWxsIGF0dGVtcHQgdG8gcmVzb2x2ZSB0aGUgdHlwZSBsaWJyYXJ5IGluIHRoaXMgb3JkZXIsIGFzIHRoZQogKiBwcm9jZXNzIGdldHMgbW9yZSBhbmQgbW9yZSBleHBlbnNpdmUgYXMgeW91IHByb2dyZXNzIGRvd24gdGhlIGxpc3Q7CiAqIHNlYXJjaGluZyBmb3IgdGhlIHR5cGUgbGlicmFyeSBieSBuYW1lIGlzIGhhbmRsZWQgYnkgcGh5c2ljYWxseQogKiBlbnVtZXJhdGluZyB0aGUgcmVnaXN0cnkgdW50aWwgd2UgZmluZCBhIG1hdGNoLgogKgogKiBUaGUgZmlsZW5hbWUgb2YgYSAudGxiIGZpbGUgb3IgdGhlIGV4ZWN1dGFibGUgbW9kdWxlCiAqIHRoYXQgY29udGFpbnMgdGhlIHR5cGUgbGlicmFyeS4KICoKICogVGhlIHR5cGUgbGlicmFyeSBHVUlELCBmb2xsb3dlZCBieSBpdHMgdmVyc2lvbiBudW1iZXIsIGZvciBleGFtcGxlCiAqIHswMDAwMDIwMC0wMDAwLTAwMTAtODAwMC0wMEFBMDA2RDJFQTR9LDIsMC4KICoKICogVGhlIHR5cGUgbGlicmFyeSBuYW1lLCBlLmcuIE1pY3Jvc29mdCBPTEUgREIgQWN0aXZlWCBEYXRhCiAqIE9iamVjdHMgMS4wIExpYnJhcnkuCiAqIEBwYXJhbSBib29sICRjYXNlX3NlbnNpdGl2ZSBUaGUgY2FzZV9zZW5zaXRpdmUgYmVoYXZlcyBpbnZlcnNlbHkgdG8KICogdGhlIHBhcmFtZXRlciAkY2FzZV9pbnNlbnNpdGl2ZSBpbiB0aGUgZGVmaW5lCiAqIGZ1bmN0aW9uLgogKiBAdGhyb3dzIENvbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gY29tX2xvYWRfdHlwZWxpYihzdHJpbmcgJHR5cGVsaWJfbmFtZSwgYm9vbCAkY2FzZV9zZW5zaXRpdmUgPSB0cnVlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGNvbV9sb2FkX3R5cGVsaWIoJHR5cGVsaWJfbmFtZSwgJGNhc2Vfc2Vuc2l0aXZlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IENvbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBoZWxwIGdlbmVyYXRlIGEgc2tlbGV0b24gY2xhc3MgZm9yIHVzZQogKiBhcyBhbiBldmVudCBzaW5rLiAgWW91IG1heSBhbHNvIHVzZSBpdCB0byBnZW5lcmF0ZSBhIGR1bXAgb2YgYW55IENPTQogKiBvYmplY3QsIHByb3ZpZGVkIHRoYXQgaXQgc3VwcG9ydHMgZW5vdWdoIG9mIHRoZSBpbnRyb3NwZWN0aW9uIGludGVyZmFjZXMsCiAqIGFuZCB0aGF0IHlvdSBrbm93IHRoZSBuYW1lIG9mIHRoZSBpbnRlcmZhY2UgeW91IHdhbnQgdG8gZGlzcGxheS4KICoKICogQHBhcmFtIG9iamVjdCAkY29tb2JqZWN0IGNvbW9iamVjdCBzaG91bGQgYmUgZWl0aGVyIGFuIGluc3RhbmNlIG9mIGEgQ09NCiAqIG9iamVjdCwgb3IgYmUgdGhlIG5hbWUgb2YgYSB0eXBlbGlicmFyeSAod2hpY2ggd2lsbCBiZSByZXNvbHZlZCBhY2NvcmRpbmcKICogdG8gdGhlIHJ1bGVzIHNldCBvdXQgaW4gY29tX2xvYWRfdHlwZWxpYikuCiAqIEBwYXJhbSBzdHJpbmcgJGRpc3BpbnRlcmZhY2UgVGhlIG5hbWUgb2YgYW4gSURpc3BhdGNoIGRlc2NlbmRhbnQgaW50ZXJmYWNlIHRoYXQgeW91IHdhbnQgdG8gZGlzcGxheS4KICogQHBhcmFtIGJvb2wgJHdhbnRzaW5rIElmIHNldCB0byBUUlVFLCB0aGUgY29ycmVzcG9uZGluZyBzaW5rIGludGVyZmFjZSB3aWxsIGJlIGRpc3BsYXllZAogKiBpbnN0ZWFkLgogKiBAdGhyb3dzIENvbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gY29tX3ByaW50X3R5cGVpbmZvKG9iamVjdCAkY29tb2JqZWN0LCBzdHJpbmcgJGRpc3BpbnRlcmZhY2UgPSBudWxsLCBib29sICR3YW50c2luayA9IGZhbHNlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGNvbV9wcmludF90eXBlaW5mbygkY29tb2JqZWN0LCAkZGlzcGludGVyZmFjZSwgJHdhbnRzaW5rKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IENvbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/cubrid.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xDdWJyaWRFeGNlcHRpb247CgovKioKICogVGhpcyBmdW5jdGlvbiBmcmVlcyB0aGUgbWVtb3J5IG9jY3VwaWVkIGJ5IHRoZSByZXN1bHQgZGF0YS4gSXQgcmV0dXJucwogKiBUUlVFIG9uIHN1Y2Nlc3MuIE5vdGUgdGhhdCBpdCBjYW4gb25seSBmcmVlcyB0aGUKICogY2xpZW50IGZldGNoIGJ1ZmZlciBub3csIGFuZCBpZiB5b3Ugd2FudCBmcmVlIGFsbCBtZW1vcnksIHVzZSBmdW5jdGlvbgogKiBjdWJyaWRfY2xvc2VfcmVxdWVzdC4KICoKICogQHBhcmFtIHJlc291cmNlICRyZXFfaWRlbnRpZmllciBUaGlzIGlzIHRoZSByZXF1ZXN0IGlkZW50aWZpZXIuCiAqIEB0aHJvd3MgQ3VicmlkRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjdWJyaWRfZnJlZV9yZXN1bHQoJHJlcV9pZGVudGlmaWVyKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGN1YnJpZF9mcmVlX3Jlc3VsdCgkcmVxX2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQ3VicmlkRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGN1cnJlbnQgQ1VCUklEIGNvbm5lY3Rpb24gY2hhcnNldCBhbmQgaXMgc2ltaWxhcgogKiB0byB0aGUgQ1VCUklEIE15U1FMIGNvbXBhdGlibGUgZnVuY3Rpb24KICogY3VicmlkX2NsaWVudF9lbmNvZGluZy4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uX2lkZW50aWZpZXIgVGhlIENVQlJJRCBjb25uZWN0aW9uLgogKiBAcmV0dXJuIHN0cmluZyBBIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIENVQlJJRCBjb25uZWN0aW9uIGNoYXJzZXQ7IG9uIHN1Y2Nlc3MuCiAqCiAqIEZBTFNFIG9uIGZhaWx1cmUuCiAqIEB0aHJvd3MgQ3VicmlkRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjdWJyaWRfZ2V0X2NoYXJzZXQoJGNvbm5faWRlbnRpZmllcik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGN1YnJpZF9nZXRfY2hhcnNldCgkY29ubl9pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEN1YnJpZEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBzdHJpbmcgdGhhdCByZXByZXNlbnRzIHRoZSBjbGllbnQgbGlicmFyeSB2ZXJzaW9uLgogKgogKiBAcmV0dXJuIHN0cmluZyBBIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIGNsaWVudCBsaWJyYXJ5IHZlcnNpb247IG9uIHN1Y2Nlc3MuCiAqCiAqIEZBTFNFIG9uIGZhaWx1cmUuCiAqIEB0aHJvd3MgQ3VicmlkRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjdWJyaWRfZ2V0X2NsaWVudF9pbmZvKCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGN1YnJpZF9nZXRfY2xpZW50X2luZm8oKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEN1YnJpZEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIENVQlJJRCBkYXRhYmFzZSBwYXJhbWV0ZXJzIG9yIGl0IHJldHVybnMgRkFMU0Ugb24KICogZmFpbHVyZS4gSXQgcmV0dXJucyBhbiBhc3NvY2lhdGl2ZSBhcnJheSB3aXRoIHRoZSB2YWx1ZXMgZm9yIHRoZSBmb2xsb3dpbmcKICogcGFyYW1ldGVyczoKICoKICoKICogUEFSQU1fSVNPTEFUSU9OX0xFVkVMCiAqIFBBUkFNX0xPQ0tfVElNRU9VVAogKiBQQVJBTV9NQVhfU1RSSU5HX0xFTkdUSAogKiBQQVJBTV9BVVRPX0NPTU1JVAogKgogKgogKgogKiBEYXRhYmFzZSBwYXJhbWV0ZXJzCiAqCiAqCiAqCiAqIFBhcmFtZXRlcgogKiBEZXNjcmlwdGlvbgogKgogKgogKgogKgogKiBQQVJBTV9JU09MQVRJT05fTEVWRUwKICogVGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KICoKICoKICogTE9DS19USU1FT1VUCiAqIENVQlJJRCBwcm92aWRlcyB0aGUgbG9jayB0aW1lb3V0IGZlYXR1cmUsIHdoaWNoIHNldHMgdGhlIHdhaXRpbmcKICogdGltZSAoaW4gc2Vjb25kcykgZm9yIHRoZSBsb2NrIHVudGlsIHRoZSB0cmFuc2FjdGlvbiBsb2NrIHNldHRpbmcgaXMKICogYWxsb3dlZC4gVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGxvY2tfdGltZW91dF9pbl9zZWNzIHBhcmFtZXRlciBpcwogKiAtMSwgd2hpY2ggbWVhbnMgdGhlIGFwcGxpY2F0aW9uIGNsaWVudCB3aWxsIHdhaXQgaW5kZWZpbml0ZWx5IHVudGlsCiAqIHRoZSB0cmFuc2FjdGlvbiBsb2NrIGlzIGFsbG93ZWQuCiAqCiAqCiAqCiAqIFBBUkFNX0FVVE9fQ09NTUlUCiAqIEluIENVQlJJRCBQSFAsIGF1dG8tY29tbWl0IG1vZGUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBmb3IKICogdHJhbnNhY3Rpb24gbWFuYWdlbWVudC4gSXQgY2FuIGJlIHNldCBieSB1c2luZwogKiBjdWJyaWRfc2V0X2F1dG9jb21taXQuCiAqCiAqCiAqCiAqCiAqCiAqCiAqIFRoZSBmb2xsb3dpbmcgdGFibGUgc2hvd3MgdGhlIGlzb2xhdGlvbiBsZXZlbHMgZnJvbSAxIHRvIDYuIEl0IGNvbnNpc3RzIG9mCiAqIHRhYmxlIHNjaGVtYSAocm93KSBhbmQgaXNvbGF0aW9uIGxldmVsOgogKgogKiBMZXZlbHMgb2YgSXNvbGF0aW9uIFN1cHBvcnRlZCBieSBDVUJSSUQKICoKICoKICoKICogTmFtZQogKiBEZXNjcmlwdGlvbgogKgogKgogKgogKgogKiBTRVJJQUxJWkFCTEUgKDYpCiAqIEluIHRoaXMgaXNvbGF0aW9uIGxldmVsLCBwcm9ibGVtcyBjb25jZXJuaW5nIGNvbmN1cnJlbmN5IChlLmcuCiAqIGRpcnR5IHJlYWQsIG5vbi1yZXBlYXRhYmxlIHJlYWQsIHBoYW50b20gcmVhZCwgZXRjLikgZG8gbm90CiAqIG9jY3VyLgogKgogKgogKiBSRVBFQVRBQkxFIFJFQUQgQ0xBU1Mgd2l0aCBSRVBFQVRBQkxFIFJFQUQgSU5TVEFOQ0VTICg1KQogKiBBbm90aGVyIHRyYW5zYWN0aW9uIFQyIGNhbm5vdCB1cGRhdGUgdGhlIHNjaGVtYSBvZiB0YWJsZSBBIHdoaWxlCiAqIHRyYW5zYWN0aW9uIFQxIGlzIHZpZXdpbmcgdGFibGUgQS4KICogVHJhbnNhY3Rpb24gVDEgbWF5IGV4cGVyaWVuY2UgcGhhbnRvbSByZWFkIGZvciB0aGUgcmVjb3JkIFIgdGhhdCB3YXMKICogaW5zZXJ0ZWQgYnkgYW5vdGhlciB0cmFuc2FjdGlvbiBUMiB3aGVuIGl0IGlzIHJlcGVhdGVkbHkgcmV0cmlldmluZyBhCiAqIHNwZWNpZmljIHJlY29yZC4KICoKICoKICogUkVQRUFUQUJMRSBSRUFEIENMQVNTIHdpdGggUkVBRCBDT01NSVRURUQgSU5TVEFOQ0VTIChvciBDVVJTT1IgU1RBQklMSVRZKSAoNCkKICogQW5vdGhlciB0cmFuc2FjdGlvbiBUMiBjYW5ub3QgdXBkYXRlIHRoZSBzY2hlbWEgb2YgdGFibGUgQSB3aGlsZQogKiB0cmFuc2FjdGlvbiBUMSBpcyB2aWV3aW5nIHRhYmxlIEEuCiAqIFRyYW5zYWN0aW9uIFQxIG1heSBleHBlcmllbmNlIFIgcmVhZCAobm9uLXJlcGVhdGFibGUgcmVhZCkgdGhhdCB3YXMKICogdXBkYXRlZCBhbmQgY29tbWl0dGVkIGJ5IGFub3RoZXIgdHJhbnNhY3Rpb24gVDIgd2hlbiBpdCBpcyByZXBlYXRlZGx5CiAqIHJldHJpZXZpbmcgdGhlIHJlY29yZCBSLgogKgogKgogKiBSRVBFQVRBQkxFIFJFQUQgQ0xBU1Mgd2l0aCBSRUFEIFVOQ09NTUlUVEVEIElOU1RBTkNFUyAoMykKICogRGVmYXVsdCBpc29sYXRpb24gbGV2ZWwuICBBbm90aGVyIHRyYW5zYWN0aW9uIFQyIGNhbm5vdCB1cGRhdGUKICogdGhlIHNjaGVtYSBvZiB0YWJsZSBBICB3aGlsZSB0cmFuc2FjdGlvbiBUMSBpcyB2aWV3aW5nIHRhYmxlIEEuCiAqIFRyYW5zYWN0aW9uIFQxIG1heSBleHBlcmllbmNlIFInIHJlYWQgKGRpcnR5IHJlYWQpIGZvciB0aGUgcmVjb3JkIHRoYXQKICogd2FzIHVwZGF0ZWQgYnV0IG5vdCBjb21taXR0ZWQgYnkgYW5vdGhlciB0cmFuc2FjdGlvbiBUMi4KICoKICoKICogUkVBRCBDT01NSVRURUQgQ0xBU1Mgd2l0aCBSRUFEIENPTU1JVFRFRCBJTlNUQU5DRVMgKDIpCiAqIFRyYW5zYWN0aW9uIFQxIG1heSBleHBlcmllbmNlIEEnIHJlYWQgKG5vbi1yZXBlYXRhYmxlIHJlYWQpIGZvcgogKiB0aGUgdGFibGUgdGhhdCB3YXMgdXBkYXRlZCBhbmQgY29tbWl0dGVkIGJ5IGFub3RoZXIgdHJhbnNhY3Rpb24gIFQyCiAqIHdoaWxlIGl0IGlzIHZpZXdpbmcgdGFibGUgQSByZXBlYXRlZGx5LiAgVHJhbnNhY3Rpb24gVDEgbWF5IGV4cGVyaWVuY2UKICogUicgcmVhZCAobm9uLXJlcGVhdGFibGUgcmVhZCkgZm9yIHRoZSByZWNvcmQgdGhhdCB3YXMgdXBkYXRlZCBhbmQKICogY29tbWl0dGVkIGJ5IGFub3RoZXIgdHJhbnNhY3Rpb24gVDIgd2hpbGUgaXQgaXMgcmV0cmlldmluZyB0aGUgcmVjb3JkCiAqIFIgcmVwZWF0ZWRseS4KICoKICoKICogUkVBRCBDT01NSVRURUQgQ0xBU1Mgd2l0aCBSRUFEIFVOQ09NTUlUVEVEIElOU1RBTkNFUyAoMSkKICogVHJhbnNhY3Rpb24gVDEgbWF5IGV4cGVyaWVuY2UgQScgcmVhZCAobm9uLXJlcGVhdGFibGUgcmVhZCkgZm9yCiAqIHRoZSB0YWJsZSB0aGF0IHdhcyB1cGRhdGVkIGFuZCBjb21taXR0ZWQgYnkgYW5vdGhlciB0cmFuc2FjdGlvbiBUMgogKiB3aGlsZSBpdCBpcyByZXBlYXRlZGx5IHZpZXdpbmcgdGFibGUgQS4gIFRyYW5zYWN0aW9uIFQxIG1heSBleHBlcmllbmNlCiAqIFInIHJlYWQgKGRpcnR5IHJlYWQpIGZvciB0aGUgcmVjb3JkIHRoYXQgd2FzIHVwZGF0ZWQgYnV0IG5vdCBjb21taXR0ZWQKICogYnkgYW5vdGhlciB0cmFuc2FjdGlvbiBUMi4KICoKICoKICoKICoKICoKICogQHBhcmFtIHJlc291cmNlICRjb25uX2lkZW50aWZpZXIgVGhlIENVQlJJRCBjb25uZWN0aW9uLiBJZiB0aGUgY29ubmVjdGlvbiBpZGVudGlmaWVyIGlzIG5vdCBzcGVjaWZpZWQsCiAqIHRoZSBsYXN0IGxpbmsgb3BlbmVkIGJ5IGN1YnJpZF9jb25uZWN0IGlzIGFzc3VtZWQuCiAqIEByZXR1cm4gYXJyYXkgQW4gYXNzb2NpYXRpdmUgYXJyYXkgd2l0aCBDVUJSSUQgZGF0YWJhc2UgcGFyYW1ldGVyczsgb24gc3VjY2Vzcy4KICoKICogRkFMU0Ugb24gZmFpbHVyZS4KICogQHRocm93cyBDdWJyaWRFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGN1YnJpZF9nZXRfZGJfcGFyYW1ldGVyKCRjb25uX2lkZW50aWZpZXIpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGN1YnJpZF9nZXRfZGJfcGFyYW1ldGVyKCRjb25uX2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQ3VicmlkRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIENVQlJJRCBzZXJ2ZXIgdmVyc2lvbi4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uX2lkZW50aWZpZXIgVGhlIENVQlJJRCBjb25uZWN0aW9uLgogKiBAcmV0dXJuIHN0cmluZyBBIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIENVQlJJRCBzZXJ2ZXIgdmVyc2lvbjsgb24gc3VjY2Vzcy4KICoKICogRkFMU0Ugb24gZmFpbHVyZS4KICogQHRocm93cyBDdWJyaWRFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGN1YnJpZF9nZXRfc2VydmVyX2luZm8oJGNvbm5faWRlbnRpZmllcik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGN1YnJpZF9nZXRfc2VydmVyX2luZm8oJGNvbm5faWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBDdWJyaWRFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhlIGN1YnJpZF9pbnNlcnRfaWQgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBJRAogKiBnZW5lcmF0ZWQgZm9yIHRoZSBBVVRPX0lOQ1JFTUVOVCBjb2x1bW4gd2hpY2ggaXMgdXBkYXRlZCBieSB0aGUgcHJldmlvdXMKICogSU5TRVJUIHF1ZXJ5LiBJdCByZXR1cm5zIDAgaWYgdGhlIHByZXZpb3VzIHF1ZXJ5IGRvZXMgbm90IGdlbmVyYXRlIG5ldwogKiByb3dzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5faWRlbnRpZmllciBUaGUgY29ubmVjdGlvbiBpZGVudGlmaWVyIHByZXZpb3VzbHkgb2J0YWluZWQgYnkgYSBjYWxsIHRvCiAqIGN1YnJpZF9jb25uZWN0LgogKiBAcmV0dXJuIHN0cmluZyBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIElEIGdlbmVyYXRlZCBmb3IgYW4gQVVUT19JTkNSRU1FTlQgY29sdW1uIGJ5IHRoZQogKiBwcmV2aW91cyBxdWVyeSwgb24gc3VjY2Vzcy4KICoKICogMCwgaWYgdGhlIHByZXZpb3VzIHF1ZXJ5IGRvZXMgbm90IGdlbmVyYXRlIG5ldyByb3dzLgogKgogKiBGQUxTRSBvbiBmYWlsdXJlLgogKiBAdGhyb3dzIEN1YnJpZEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gY3VicmlkX2luc2VydF9pZCgkY29ubl9pZGVudGlmaWVyID0gbnVsbCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGNvbm5faWRlbnRpZmllciAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcY3VicmlkX2luc2VydF9pZCgkY29ubl9pZGVudGlmaWVyKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxjdWJyaWRfaW5zZXJ0X2lkKCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBDdWJyaWRFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhlIGN1YnJpZF9sb2IyX25ldyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNyZWF0ZSBhIGxvYiBvYmplY3QgKGJvdGggQkxPQiBhbmQgQ0xPQikuCiAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgYmVmb3JlIHlvdSBiaW5kIGEgbG9iIG9iamVjdC4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uX2lkZW50aWZpZXIgQ29ubmVjdGlvbiBpZGVudGlmaWVyLiBJZiB0aGUgY29ubmVjdGlvbiBpZGVudGlmaWVyIGlzIG5vdCBzcGVjaWZpZWQsCiAqIHRoZSBsYXN0IGNvbm5lY3Rpb24gb3BlbmVkIGJ5IGN1YnJpZF9jb25uZWN0IG9yCiAqIGN1YnJpZF9jb25uZWN0X3dpdGhfdXJsIGlzIGFzc3VtZWQuCiAqIEBwYXJhbSBzdHJpbmcgJHR5cGUgSXQgbWF5IGJlICJCTE9CIiBvciAiQ0xPQiIsIGl0IHdvbid0IGJlIGNhc2Utc2Vuc2l0aXZlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAiQkxPQiIuCiAqIEByZXR1cm4gcmVzb3VyY2UgTG9iIGlkZW50aWZpZXIgd2hlbiBpdCBpcyBzdWNjZXNzZnVsLgogKgogKiBGQUxTRSAgb24gZmFpbHVyZS4KICogQHRocm93cyBDdWJyaWRFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGN1YnJpZF9sb2IyX25ldygkY29ubl9pZGVudGlmaWVyID0gbnVsbCwgc3RyaW5nICR0eXBlID0gIkJMT0IiKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHR5cGUgIT09ICJCTE9CIikgewogICAgICAgICRyZXN1bHQgPSBcY3VicmlkX2xvYjJfbmV3KCRjb25uX2lkZW50aWZpZXIsICR0eXBlKTsKICAgIH0gZWxzZWlmICgkY29ubl9pZGVudGlmaWVyICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxjdWJyaWRfbG9iMl9uZXcoJGNvbm5faWRlbnRpZmllcik7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcY3VicmlkX2xvYjJfbmV3KCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBDdWJyaWRFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhlIGN1YnJpZF9sb2IyX3NpemUgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgdGhlIHNpemUgb2YgYSBsb2Igb2JqZWN0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxvYl9pZGVudGlmaWVyIExvYiBpZGVudGlmaWVyIGFzIGEgcmVzdWx0IG9mIGN1YnJpZF9sb2IyX25ldyBvciBnZXQgZnJvbSB0aGUgcmVzdWx0IHNldC4KICogQHJldHVybiBpbnQgSXQgd2lsbCByZXR1cm4gdGhlIHNpemUgb2YgdGhlIExPQiBvYmplY3Qgd2hlbiBpdCBwcm9jZXNzZXMgc3VjY2Vzc2Z1bGx5LgogKgogKiBGQUxTRSBvbiBmYWlsdXJlLgogKiBAdGhyb3dzIEN1YnJpZEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gY3VicmlkX2xvYjJfc2l6ZSgkbG9iX2lkZW50aWZpZXIpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxjdWJyaWRfbG9iMl9zaXplKCRsb2JfaWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBDdWJyaWRFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhlIGN1YnJpZF9sb2IyX3NpemU2NCBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCB0aGUKICogc2l6ZSBvZiBhIGxvYiBvYmplY3QuICBJZiB0aGUgc2l6ZSBvZiBhIGxvYiBvYmplY3QgaXMgbGFyZ2VyIHRoYW4gYW4KICogaW50ZWdlciBkYXRhIGNhbiBiZSBzdG9yZWQsIHlvdSBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gYW5kIGl0IHdpbGwgcmV0dXJuCiAqIHRoZSBzaXplIGFzIGEgc3RyaW5nLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxvYl9pZGVudGlmaWVyIExvYiBpZGVudGlmaWVyIGFzIGEgcmVzdWx0IG9mIGN1YnJpZF9sb2IyX25ldyBvciBnZXQgZnJvbSB0aGUgcmVzdWx0IHNldC4KICogQHJldHVybiBzdHJpbmcgSXQgd2lsbCByZXR1cm4gdGhlIHNpemUgb2YgdGhlIExPQiBvYmplY3QgYXMgYSBzdHJpbmcgd2hlbiBpdCBwcm9jZXNzZXMgc3VjY2Vzc2Z1bGx5LgogKgogKiBGQUxTRSBvbiBmYWlsdXJlLgogKiBAdGhyb3dzIEN1YnJpZEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gY3VicmlkX2xvYjJfc2l6ZTY0KCRsb2JfaWRlbnRpZmllcik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGN1YnJpZF9sb2IyX3NpemU2NCgkbG9iX2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQ3VicmlkRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoZSBjdWJyaWRfbG9iMl90ZWxsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdGVsbCB0aGUgY3Vyc29yIHBvc2l0aW9uIG9mIHRoZSBMT0Igb2JqZWN0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxvYl9pZGVudGlmaWVyIExvYiBpZGVudGlmaWVyIGFzIGEgcmVzdWx0IG9mIGN1YnJpZF9sb2IyX25ldyBvciBnZXQgZnJvbSB0aGUgcmVzdWx0IHNldC4KICogQHJldHVybiBpbnQgSXQgd2lsbCByZXR1cm4gdGhlIGN1cnNvciBwb3NpdGlvbiBvbiB0aGUgTE9CIG9iamVjdCB3aGVuIGl0IHByb2Nlc3NlcyBzdWNjZXNzZnVsbHkuCiAqCiAqIEZBTFNFIG9uIGZhaWx1cmUuCiAqIEB0aHJvd3MgQ3VicmlkRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjdWJyaWRfbG9iMl90ZWxsKCRsb2JfaWRlbnRpZmllcik6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGN1YnJpZF9sb2IyX3RlbGwoJGxvYl9pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEN1YnJpZEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUaGUgY3VicmlkX2xvYjJfdGVsbDY0IGZ1bmN0aW9uIGlzIHVzZWQgdG8gdGVsbCB0aGUKICogY3Vyc29yIHBvc2l0aW9uIG9mIHRoZSBMT0Igb2JqZWN0LiBJZiB0aGUgc2l6ZSBvZiBhIGxvYiBvYmplY3QgaXMgbGFyZ2VyCiAqIHRoYW4gYW4gaW50ZWdlciBkYXRhIGNhbiBiZSBzdG9yZWQsIHlvdSBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gYW5kIGl0IHdpbGwKICogcmV0dXJuIHRoZSBwb3NpdGlvbiBpbmZvcm1hdGlvbiBhcyBhIHN0cmluZy4KICoKICogQHBhcmFtIHJlc291cmNlICRsb2JfaWRlbnRpZmllciBMb2IgaWRlbnRpZmllciBhcyBhIHJlc3VsdCBvZiBjdWJyaWRfbG9iMl9uZXcgb3IgZ2V0IGZyb20gdGhlIHJlc3VsdCBzZXQuCiAqIEByZXR1cm4gc3RyaW5nIEl0IHdpbGwgcmV0dXJuIHRoZSBjdXJzb3IgcG9zaXRpb24gb24gdGhlIExPQiBvYmplY3QgYXMgYSBzdHJpbmcgd2hlbiBpdCBwcm9jZXNzZXMgc3VjY2Vzc2Z1bGx5LgogKgogKiBGQUxTRSBvbiBmYWlsdXJlLgogKiBAdGhyb3dzIEN1YnJpZEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gY3VicmlkX2xvYjJfdGVsbDY0KCRsb2JfaWRlbnRpZmllcik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGN1YnJpZF9sb2IyX3RlbGw2NCgkbG9iX2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQ3VicmlkRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoZSBjdWJyaWRfc2V0X2RiX3BhcmFtZXRlciBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldAogKiB0aGUgQ1VCUklEIGRhdGFiYXNlIHBhcmFtZXRlcnMuIEl0IGNhbiBzZXQgdGhlIGZvbGxvd2luZyBDVUJSSUQgZGF0YWJhc2UKICogcGFyYW1ldGVyczoKICoKICoKICogUEFSQU1fSVNPTEFUSU9OX0xFVkVMCiAqIFBBUkFNX0xPQ0tfVElNRU9VVAogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5faWRlbnRpZmllciBUaGUgQ1VCUklEIGNvbm5lY3Rpb24uIElmIHRoZSBjb25uZWN0aW9uIGlkZW50aWZpZXIgaXMgbm90IHNwZWNpZmllZCwKICogdGhlIGxhc3QgbGluayBvcGVuZWQgYnkgY3VicmlkX2Nvbm5lY3QgaXMgYXNzdW1lZC4KICogQHBhcmFtIGludCAkcGFyYW1fdHlwZSBEYXRhYmFzZSBwYXJhbWV0ZXIgdHlwZS4KICogQHBhcmFtIGludCAkcGFyYW1fdmFsdWUgSXNvbGF0aW9uIGxldmVsIHZhbHVlICgxLTYpIG9yIGxvY2sgdGltZW91dCAoaW4gc2Vjb25kcykgdmFsdWUuCiAqIEB0aHJvd3MgQ3VicmlkRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjdWJyaWRfc2V0X2RiX3BhcmFtZXRlcigkY29ubl9pZGVudGlmaWVyLCBpbnQgJHBhcmFtX3R5cGUsIGludCAkcGFyYW1fdmFsdWUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcY3VicmlkX3NldF9kYl9wYXJhbWV0ZXIoJGNvbm5faWRlbnRpZmllciwgJHBhcmFtX3R5cGUsICRwYXJhbV92YWx1ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBDdWJyaWRFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/curl.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xDdXJsRXhjZXB0aW9uOwoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gVVJMIGVuY29kZXMgdGhlIGdpdmVuIHN0cmluZyBhY2NvcmRpbmcgdG8gUkZDIDM5ODYuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY2ggQSBjVVJMIGhhbmRsZSByZXR1cm5lZCBieQogKiBjdXJsX2luaXQuCiAqIEBwYXJhbSBzdHJpbmcgJHN0ciBUaGUgc3RyaW5nIHRvIGJlIGVuY29kZWQuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgZXNjYXBlZCBzdHJpbmcuCiAqIEB0aHJvd3MgQ3VybEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gY3VybF9lc2NhcGUoJGNoLCBzdHJpbmcgJHN0cik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGN1cmxfZXNjYXBlKCRjaCwgJHN0cik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBDdXJsRXhjZXB0aW9uOjpjcmVhdGVGcm9tQ3VybFJlc291cmNlKCRjaCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBFeGVjdXRlIHRoZSBnaXZlbiBjVVJMIHNlc3Npb24uCiAqCiAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBpbml0aWFsaXppbmcgYSBjVVJMIHNlc3Npb24gYW5kIGFsbAogKiB0aGUgb3B0aW9ucyBmb3IgdGhlIHNlc3Npb24gYXJlIHNldC4KICoKICogQHBhcmFtIHJlc291cmNlICRjaCBBIGNVUkwgaGFuZGxlIHJldHVybmVkIGJ5CiAqIGN1cmxfaW5pdC4KICogQHJldHVybiBib29sfHN0cmluZyBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4gSG93ZXZlciwgaWYgdGhlIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIKICogb3B0aW9uIGlzIHNldCwgaXQgd2lsbCByZXR1cm4KICogdGhlIHJlc3VsdCBvbiBzdWNjZXNzLCBGQUxTRSBvbiBmYWlsdXJlLgogKiBAdGhyb3dzIEN1cmxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGN1cmxfZXhlYygkY2gpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcY3VybF9leGVjKCRjaCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBDdXJsRXhjZXB0aW9uOjpjcmVhdGVGcm9tQ3VybFJlc291cmNlKCRjaCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsYXN0IHRyYW5zZmVyLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNoIEEgY1VSTCBoYW5kbGUgcmV0dXJuZWQgYnkKICogY3VybF9pbml0LgogKiBAcGFyYW0gaW50ICRvcHQgVGhpcyBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzOgogKgogKgogKgogKiBDVVJMSU5GT19FRkZFQ1RJVkVfVVJMIC0gTGFzdCBlZmZlY3RpdmUgVVJMCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX0hUVFBfQ09ERSAtICBUaGUgbGFzdCByZXNwb25zZSBjb2RlLgogKiBBcyBvZiBQSFAgNS41LjAgYW5kIGNVUkwgNy4xMC44LCB0aGlzIGlzIGEgbGVnYWN5IGFsaWFzIG9mCiAqIENVUkxJTkZPX1JFU1BPTlNFX0NPREUKICoKICoKICoKICoKICogQ1VSTElORk9fRklMRVRJTUUgLSBSZW1vdGUgdGltZSBvZiB0aGUgcmV0cmlldmVkIGRvY3VtZW50LCB3aXRoIHRoZSBDVVJMT1BUX0ZJTEVUSU1FIGVuYWJsZWQ7IGlmIC0xIGlzIHJldHVybmVkIHRoZSB0aW1lIG9mIHRoZSBkb2N1bWVudCBpcyB1bmtub3duCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX1RPVEFMX1RJTUUgLSBUb3RhbCB0cmFuc2FjdGlvbiB0aW1lIGluIHNlY29uZHMgZm9yIGxhc3QgdHJhbnNmZXIKICoKICoKICoKICoKICogQ1VSTElORk9fTkFNRUxPT0tVUF9USU1FIC0gVGltZSBpbiBzZWNvbmRzIHVudGlsIG5hbWUgcmVzb2x2aW5nIHdhcyBjb21wbGV0ZQogKgogKgogKgogKgogKiBDVVJMSU5GT19DT05ORUNUX1RJTUUgLSBUaW1lIGluIHNlY29uZHMgaXQgdG9vayB0byBlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24KICoKICoKICoKICoKICogQ1VSTElORk9fUFJFVFJBTlNGRVJfVElNRSAtIFRpbWUgaW4gc2Vjb25kcyBmcm9tIHN0YXJ0IHVudGlsIGp1c3QgYmVmb3JlIGZpbGUgdHJhbnNmZXIgYmVnaW5zCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX1NUQVJUVFJBTlNGRVJfVElNRSAtIFRpbWUgaW4gc2Vjb25kcyB1bnRpbCB0aGUgZmlyc3QgYnl0ZSBpcyBhYm91dCB0byBiZSB0cmFuc2ZlcnJlZAogKgogKgogKgogKgogKiBDVVJMSU5GT19SRURJUkVDVF9DT1VOVCAtIE51bWJlciBvZiByZWRpcmVjdHMsIHdpdGggdGhlIENVUkxPUFRfRk9MTE9XTE9DQVRJT04gb3B0aW9uIGVuYWJsZWQKICoKICoKICoKICoKICogQ1VSTElORk9fUkVESVJFQ1RfVElNRSAtIFRpbWUgaW4gc2Vjb25kcyBvZiBhbGwgcmVkaXJlY3Rpb24gc3RlcHMgYmVmb3JlIGZpbmFsIHRyYW5zYWN0aW9uIHdhcyBzdGFydGVkLCB3aXRoIHRoZSBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OIG9wdGlvbiBlbmFibGVkCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX1JFRElSRUNUX1VSTCAtIFdpdGggdGhlIENVUkxPUFRfRk9MTE9XTE9DQVRJT04gb3B0aW9uIGRpc2FibGVkOiByZWRpcmVjdCBVUkwgZm91bmQgaW4gdGhlIGxhc3QgdHJhbnNhY3Rpb24sIHRoYXQgc2hvdWxkIGJlIHJlcXVlc3RlZCBtYW51YWxseSBuZXh0LiBXaXRoIHRoZSBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OIG9wdGlvbiBlbmFibGVkOiB0aGlzIGlzIGVtcHR5LiBUaGUgcmVkaXJlY3QgVVJMIGluIHRoaXMgY2FzZSBpcyBhdmFpbGFibGUgaW4gQ1VSTElORk9fRUZGRUNUSVZFX1VSTAogKgogKgogKgogKgogKiBDVVJMSU5GT19QUklNQVJZX0lQIC0gSVAgYWRkcmVzcyBvZiB0aGUgbW9zdCByZWNlbnQgY29ubmVjdGlvbgogKgogKgogKgogKgogKiBDVVJMSU5GT19QUklNQVJZX1BPUlQgLSBEZXN0aW5hdGlvbiBwb3J0IG9mIHRoZSBtb3N0IHJlY2VudCBjb25uZWN0aW9uCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX0xPQ0FMX0lQIC0gTG9jYWwgKHNvdXJjZSkgSVAgYWRkcmVzcyBvZiB0aGUgbW9zdCByZWNlbnQgY29ubmVjdGlvbgogKgogKgogKgogKgogKiBDVVJMSU5GT19MT0NBTF9QT1JUIC0gTG9jYWwgKHNvdXJjZSkgcG9ydCBvZiB0aGUgbW9zdCByZWNlbnQgY29ubmVjdGlvbgogKgogKgogKgogKgogKiBDVVJMSU5GT19TSVpFX1VQTE9BRCAtIFRvdGFsIG51bWJlciBvZiBieXRlcyB1cGxvYWRlZAogKgogKgogKgogKgogKiBDVVJMSU5GT19TSVpFX0RPV05MT0FEIC0gVG90YWwgbnVtYmVyIG9mIGJ5dGVzIGRvd25sb2FkZWQKICoKICoKICoKICoKICogQ1VSTElORk9fU1BFRURfRE9XTkxPQUQgLSBBdmVyYWdlIGRvd25sb2FkIHNwZWVkCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX1NQRUVEX1VQTE9BRCAtIEF2ZXJhZ2UgdXBsb2FkIHNwZWVkCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX0hFQURFUl9TSVpFIC0gVG90YWwgc2l6ZSBvZiBhbGwgaGVhZGVycyByZWNlaXZlZAogKgogKgogKgogKgogKiBDVVJMSU5GT19IRUFERVJfT1VUIC0gVGhlIHJlcXVlc3Qgc3RyaW5nIHNlbnQuIEZvciB0aGlzIHRvCiAqIHdvcmssIGFkZCB0aGUgQ1VSTElORk9fSEVBREVSX09VVCBvcHRpb24gdG8gdGhlIGhhbmRsZSBieSBjYWxsaW5nCiAqIGN1cmxfc2V0b3B0CiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX1JFUVVFU1RfU0laRSAtIFRvdGFsIHNpemUgb2YgaXNzdWVkIHJlcXVlc3RzLCBjdXJyZW50bHkgb25seSBmb3IgSFRUUCByZXF1ZXN0cwogKgogKgogKgogKgogKiBDVVJMSU5GT19TU0xfVkVSSUZZUkVTVUxUIC0gUmVzdWx0IG9mIFNTTCBjZXJ0aWZpY2F0aW9uIHZlcmlmaWNhdGlvbiByZXF1ZXN0ZWQgYnkgc2V0dGluZyBDVVJMT1BUX1NTTF9WRVJJRllQRUVSCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX0NPTlRFTlRfTEVOR1RIX0RPV05MT0FEIC0gQ29udGVudCBsZW5ndGggb2YgZG93bmxvYWQsIHJlYWQgZnJvbSBDb250ZW50LUxlbmd0aDogZmllbGQKICoKICoKICoKICoKICogQ1VSTElORk9fQ09OVEVOVF9MRU5HVEhfVVBMT0FEIC0gU3BlY2lmaWVkIHNpemUgb2YgdXBsb2FkCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX0NPTlRFTlRfVFlQRSAtIENvbnRlbnQtVHlwZTogb2YgdGhlIHJlcXVlc3RlZCBkb2N1bWVudC4gTlVMTCBpbmRpY2F0ZXMgc2VydmVyIGRpZCBub3Qgc2VuZCB2YWxpZCBDb250ZW50LVR5cGU6IGhlYWRlcgogKgogKgogKgogKgogKiBDVVJMSU5GT19QUklWQVRFIC0gUHJpdmF0ZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNVUkwgaGFuZGxlLCBwcmV2aW91c2x5IHNldCB3aXRoIHRoZSBDVVJMT1BUX1BSSVZBVEUgb3B0aW9uIG9mIGN1cmxfc2V0b3B0CiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX1JFU1BPTlNFX0NPREUgLSBUaGUgbGFzdCByZXNwb25zZSBjb2RlCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX0hUVFBfQ09OTkVDVENPREUgLSBUaGUgQ09OTkVDVCByZXNwb25zZSBjb2RlCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX0hUVFBBVVRIX0FWQUlMIC0gQml0bWFzayBpbmRpY2F0aW5nIHRoZSBhdXRoZW50aWNhdGlvbiBtZXRob2QocykgYXZhaWxhYmxlIGFjY29yZGluZyB0byB0aGUgcHJldmlvdXMgcmVzcG9uc2UKICoKICoKICoKICoKICogQ1VSTElORk9fUFJPWFlBVVRIX0FWQUlMIC0gQml0bWFzayBpbmRpY2F0aW5nIHRoZSBwcm94eSBhdXRoZW50aWNhdGlvbiBtZXRob2QocykgYXZhaWxhYmxlIGFjY29yZGluZyB0byB0aGUgcHJldmlvdXMgcmVzcG9uc2UKICoKICoKICoKICoKICogQ1VSTElORk9fT1NfRVJSTk8gLSBFcnJubyBmcm9tIGEgY29ubmVjdCBmYWlsdXJlLiBUaGUgbnVtYmVyIGlzIE9TIGFuZCBzeXN0ZW0gc3BlY2lmaWMuCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX05VTV9DT05ORUNUUyAtIE51bWJlciBvZiBjb25uZWN0aW9ucyBjdXJsIGhhZCB0byBjcmVhdGUgdG8gYWNoaWV2ZSB0aGUgcHJldmlvdXMgdHJhbnNmZXIKICoKICoKICoKICoKICogQ1VSTElORk9fU1NMX0VOR0lORVMgLSBPcGVuU1NMIGNyeXB0by1lbmdpbmVzIHN1cHBvcnRlZAogKgogKgogKgogKgogKiBDVVJMSU5GT19DT09LSUVMSVNUIC0gQWxsIGtub3duIGNvb2tpZXMKICoKICoKICoKICoKICogQ1VSTElORk9fRlRQX0VOVFJZX1BBVEggLSBFbnRyeSBwYXRoIGluIEZUUCBzZXJ2ZXIKICoKICoKICoKICoKICogQ1VSTElORk9fQVBQQ09OTkVDVF9USU1FIC0gVGltZSBpbiBzZWNvbmRzIGl0IHRvb2sgZnJvbSB0aGUgc3RhcnQgdW50aWwgdGhlIFNTTC9TU0ggY29ubmVjdC9oYW5kc2hha2UgdG8gdGhlIHJlbW90ZSBob3N0IHdhcyBjb21wbGV0ZWQKICoKICoKICoKICoKICogQ1VSTElORk9fQ0VSVElORk8gLSBUTFMgY2VydGlmaWNhdGUgY2hhaW4KICoKICoKICoKICoKICogQ1VSTElORk9fQ09ORElUSU9OX1VOTUVUIC0gSW5mbyBvbiB1bm1ldCB0aW1lIGNvbmRpdGlvbmFsCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX1JUU1BfQ0xJRU5UX0NTRVEgLSBOZXh0IFJUU1AgY2xpZW50IENTZXEKICoKICoKICoKICoKICogQ1VSTElORk9fUlRTUF9DU0VRX1JFQ1YgLSBSZWNlbnRseSByZWNlaXZlZCBDU2VxCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX1JUU1BfU0VSVkVSX0NTRVEgLSBOZXh0IFJUU1Agc2VydmVyIENTZXEKICoKICoKICoKICoKICogQ1VSTElORk9fUlRTUF9TRVNTSU9OX0lEIC0gUlRTUCBzZXNzaW9uIElECiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX0NPTlRFTlRfTEVOR1RIX0RPV05MT0FEX1QgLSBUaGUgY29udGVudC1sZW5ndGggb2YgdGhlIGRvd25sb2FkLiBUaGlzIGlzIHRoZSB2YWx1ZSByZWFkIGZyb20gdGhlIENvbnRlbnQtVHlwZTogZmllbGQuIC0xIGlmIHRoZSBzaXplIGlzbid0IGtub3duCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX0NPTlRFTlRfTEVOR1RIX1VQTE9BRF9UIC0gVGhlIHNwZWNpZmllZCBzaXplIG9mIHRoZSB1cGxvYWQuIC0xIGlmIHRoZSBzaXplIGlzbid0IGtub3duCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX0hUVFBfVkVSU0lPTiAtIFRoZSB2ZXJzaW9uIHVzZWQgaW4gdGhlIGxhc3QgSFRUUCBjb25uZWN0aW9uLiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgb25lIG9mIHRoZSBkZWZpbmVkIENVUkxfSFRUUF9WRVJTSU9OXyogY29uc3RhbnRzIG9yIDAgaWYgdGhlIHZlcnNpb24gY2FuJ3QgYmUgZGV0ZXJtaW5lZAogKgogKgogKgogKgogKiBDVVJMSU5GT19QUk9UT0NPTCAtIFRoZSBwcm90b2NvbCB1c2VkIGluIHRoZSBsYXN0IEhUVFAgY29ubmVjdGlvbi4gVGhlIHJldHVybmVkIHZhbHVlIHdpbGwgYmUgZXhhY3RseSBvbmUgb2YgdGhlIENVUkxQUk9UT18qIHZhbHVlcwogKgogKgogKgogKgogKiBDVVJMSU5GT19QUk9YWV9TU0xfVkVSSUZZUkVTVUxUIC0gVGhlIHJlc3VsdCBvZiB0aGUgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIHRoYXQgd2FzIHJlcXVlc3RlZCAodXNpbmcgdGhlIENVUkxPUFRfUFJPWFlfU1NMX1ZFUklGWVBFRVIgb3B0aW9uKS4gT25seSB1c2VkIGZvciBIVFRQUyBwcm94aWVzCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX1NDSEVNRSAtIFRoZSBVUkwgc2NoZW1lIHVzZWQgZm9yIHRoZSBtb3N0IHJlY2VudCBjb25uZWN0aW9uCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX1NJWkVfRE9XTkxPQURfVCAtIFRvdGFsIG51bWJlciBvZiBieXRlcyB0aGF0IHdlcmUgZG93bmxvYWRlZC4gVGhlIG51bWJlciBpcyBvbmx5IGZvciB0aGUgbGF0ZXN0IHRyYW5zZmVyIGFuZCB3aWxsIGJlIHJlc2V0IGFnYWluIGZvciBlYWNoIG5ldyB0cmFuc2ZlcgogKgogKgogKgogKgogKiBDVVJMSU5GT19TSVpFX1VQTE9BRF9UIC0gVG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2VyZSB1cGxvYWRlZAogKgogKgogKgogKgogKiBDVVJMSU5GT19TUEVFRF9ET1dOTE9BRF9UIC0gVGhlIGF2ZXJhZ2UgZG93bmxvYWQgc3BlZWQgaW4gYnl0ZXMvc2Vjb25kIHRoYXQgY3VybCBtZWFzdXJlZCBmb3IgdGhlIGNvbXBsZXRlIGRvd25sb2FkCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX1NQRUVEX1VQTE9BRF9UIC0gVGhlIGF2ZXJhZ2UgdXBsb2FkIHNwZWVkIGluIGJ5dGVzL3NlY29uZCB0aGF0IGN1cmwgbWVhc3VyZWQgZm9yIHRoZSBjb21wbGV0ZSB1cGxvYWQKICoKICoKICoKICoKICogQ1VSTElORk9fQVBQQ09OTkVDVF9USU1FX1QgLSBUaW1lLCBpbiBtaWNyb3NlY29uZHMsIGl0IHRvb2sgZnJvbSB0aGUgc3RhcnQgdW50aWwgdGhlIFNTTC9TU0ggY29ubmVjdC9oYW5kc2hha2UgdG8gdGhlIHJlbW90ZSBob3N0IHdhcyBjb21wbGV0ZWQKICoKICoKICoKICoKICogQ1VSTElORk9fQ09OTkVDVF9USU1FX1QgLSBUb3RhbCB0aW1lIHRha2VuLCBpbiBtaWNyb3NlY29uZHMsIGZyb20gdGhlIHN0YXJ0IHVudGlsIHRoZSBjb25uZWN0aW9uIHRvIHRoZSByZW1vdGUgaG9zdCAob3IgcHJveHkpIHdhcyBjb21wbGV0ZWQKICoKICoKICoKICoKICogQ1VSTElORk9fRklMRVRJTUVfVCAtIFJlbW90ZSB0aW1lIG9mIHRoZSByZXRyaWV2ZWQgZG9jdW1lbnQgKGFzIFVuaXggdGltZXN0YW1wKSwgYW4gYWx0ZXJuYXRpdmUgdG8gQ1VSTElORk9fRklMRVRJTUUgdG8gYWxsb3cgc3lzdGVtcyB3aXRoIDMyIGJpdCBsb25nIHZhcmlhYmxlcyB0byBleHRyYWN0IGRhdGVzIG91dHNpZGUgb2YgdGhlIDMyYml0IHRpbWVzdGFtcCByYW5nZQogKgogKgogKgogKgogKiBDVVJMSU5GT19OQU1FTE9PS1VQX1RJTUVfVCAtIFRpbWUgaW4gbWljcm9zZWNvbmRzIGZyb20gdGhlIHN0YXJ0IHVudGlsIHRoZSBuYW1lIHJlc29sdmluZyB3YXMgY29tcGxldGVkCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX1BSRVRSQU5TRkVSX1RJTUVfVCAtIFRpbWUgdGFrZW4gZnJvbSB0aGUgc3RhcnQgdW50aWwgdGhlIGZpbGUgdHJhbnNmZXIgaXMganVzdCBhYm91dCB0byBiZWdpbiwgaW4gbWljcm9zZWNvbmRzCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX1JFRElSRUNUX1RJTUVfVCAtIFRvdGFsIHRpbWUsIGluIG1pY3Jvc2Vjb25kcywgaXQgdG9vayBmb3IgYWxsIHJlZGlyZWN0aW9uIHN0ZXBzIGluY2x1ZGUgbmFtZSBsb29rdXAsIGNvbm5lY3QsIHByZXRyYW5zZmVyIGFuZCB0cmFuc2ZlciBiZWZvcmUgZmluYWwgdHJhbnNhY3Rpb24gd2FzIHN0YXJ0ZWQKICoKICoKICoKICoKICogQ1VSTElORk9fU1RBUlRUUkFOU0ZFUl9USU1FX1QgLSBUaW1lLCBpbiBtaWNyb3NlY29uZHMsIGl0IHRvb2sgZnJvbSB0aGUgc3RhcnQgdW50aWwgdGhlIGZpcnN0IGJ5dGUgaXMgcmVjZWl2ZWQKICoKICoKICoKICoKICogQ1VSTElORk9fVE9UQUxfVElNRV9UIC0gVG90YWwgdGltZSBpbiBtaWNyb3NlY29uZHMgZm9yIHRoZSBwcmV2aW91cyB0cmFuc2ZlciwgaW5jbHVkaW5nIG5hbWUgcmVzb2x2aW5nLCBUQ1AgY29ubmVjdCBldGMuCiAqCiAqCiAqCiAqIEByZXR1cm4gbWl4ZWQgSWYgb3B0IGlzIGdpdmVuLCByZXR1cm5zIGl0cyB2YWx1ZS4KICogT3RoZXJ3aXNlLCByZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IHdpdGggdGhlIGZvbGxvd2luZyBlbGVtZW50cwogKiAod2hpY2ggY29ycmVzcG9uZCB0byBvcHQpOgogKgogKgogKgogKiAidXJsIgogKgogKgogKgogKgogKiAiY29udGVudF90eXBlIgogKgogKgogKgogKgogKiAiaHR0cF9jb2RlIgogKgogKgogKgogKgogKiAiaGVhZGVyX3NpemUiCiAqCiAqCiAqCiAqCiAqICJyZXF1ZXN0X3NpemUiCiAqCiAqCiAqCiAqCiAqICJmaWxldGltZSIKICoKICoKICoKICoKICogInNzbF92ZXJpZnlfcmVzdWx0IgogKgogKgogKgogKgogKiAicmVkaXJlY3RfY291bnQiCiAqCiAqCiAqCiAqCiAqICJ0b3RhbF90aW1lIgogKgogKgogKgogKgogKiAibmFtZWxvb2t1cF90aW1lIgogKgogKgogKgogKgogKiAiY29ubmVjdF90aW1lIgogKgogKgogKgogKgogKiAicHJldHJhbnNmZXJfdGltZSIKICoKICoKICoKICoKICogInNpemVfdXBsb2FkIgogKgogKgogKgogKgogKiAic2l6ZV9kb3dubG9hZCIKICoKICoKICoKICoKICogInNwZWVkX2Rvd25sb2FkIgogKgogKgogKgogKgogKiAic3BlZWRfdXBsb2FkIgogKgogKgogKgogKgogKiAiZG93bmxvYWRfY29udGVudF9sZW5ndGgiCiAqCiAqCiAqCiAqCiAqICJ1cGxvYWRfY29udGVudF9sZW5ndGgiCiAqCiAqCiAqCiAqCiAqICJzdGFydHRyYW5zZmVyX3RpbWUiCiAqCiAqCiAqCiAqCiAqICJyZWRpcmVjdF90aW1lIgogKgogKgogKgogKgogKiAiY2VydGluZm8iCiAqCiAqCiAqCiAqCiAqICJwcmltYXJ5X2lwIgogKgogKgogKgogKgogKiAicHJpbWFyeV9wb3J0IgogKgogKgogKgogKgogKiAibG9jYWxfaXAiCiAqCiAqCiAqCiAqCiAqICJsb2NhbF9wb3J0IgogKgogKgogKgogKgogKiAicmVkaXJlY3RfdXJsIgogKgogKgogKgogKgogKiAicmVxdWVzdF9oZWFkZXIiIChUaGlzIGlzIG9ubHkgc2V0IGlmIHRoZSBDVVJMSU5GT19IRUFERVJfT1VUCiAqIGlzIHNldCBieSBhIHByZXZpb3VzIGNhbGwgdG8gY3VybF9zZXRvcHQpCiAqCiAqCiAqCiAqIE5vdGUgdGhhdCBwcml2YXRlIGRhdGEgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBhc3NvY2lhdGl2ZSBhcnJheSBhbmQgbXVzdCBiZSByZXRyaWV2ZWQgaW5kaXZpZHVhbGx5IHdpdGggdGhlIENVUkxJTkZPX1BSSVZBVEUgb3B0aW9uLgogKiBAdGhyb3dzIEN1cmxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGN1cmxfZ2V0aW5mbygkY2gsIGludCAkb3B0ID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRvcHQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGN1cmxfZ2V0aW5mbygkY2gsICRvcHQpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGN1cmxfZ2V0aW5mbygkY2gpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQ3VybEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbUN1cmxSZXNvdXJjZSgkY2gpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogSW5pdGlhbGl6ZXMgYSBuZXcgc2Vzc2lvbiBhbmQgcmV0dXJuIGEgY1VSTCBoYW5kbGUgZm9yIHVzZSB3aXRoIHRoZQogKiBjdXJsX3NldG9wdCwgY3VybF9leGVjLAogKiBhbmQgY3VybF9jbG9zZSBmdW5jdGlvbnMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHVybCBJZiBwcm92aWRlZCwgdGhlIENVUkxPUFRfVVJMIG9wdGlvbiB3aWxsIGJlIHNldAogKiB0byBpdHMgdmFsdWUuIFlvdSBjYW4gbWFudWFsbHkgc2V0IHRoaXMgdXNpbmcgdGhlCiAqIGN1cmxfc2V0b3B0IGZ1bmN0aW9uLgogKgogKiBUaGUgZmlsZSBwcm90b2NvbCBpcyBkaXNhYmxlZCBieSBjVVJMIGlmCiAqIG9wZW5fYmFzZWRpciBpcyBzZXQuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhIGNVUkwgaGFuZGxlIG9uIHN1Y2Nlc3MsIEZBTFNFIG9uIGVycm9ycy4KICogQHRocm93cyBDdXJsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjdXJsX2luaXQoc3RyaW5nICR1cmwgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGN1cmxfaW5pdCgkdXJsKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEN1cmxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0dXJuIGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgbGFzdCBtdWx0aSBjdXJsIGVycm9yIG51bWJlci4KICoKICogQHBhcmFtIHJlc291cmNlICRtaCBBIGNVUkwgbXVsdGkgaGFuZGxlIHJldHVybmVkIGJ5CiAqIGN1cmxfbXVsdGlfaW5pdC4KICogQHJldHVybiBpbnQgUmV0dXJuIGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgbGFzdCBtdWx0aSBjdXJsIGVycm9yIG51bWJlci4KICogQHRocm93cyBDdXJsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjdXJsX211bHRpX2Vycm5vKCRtaCk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGN1cmxfbXVsdGlfZXJybm8oJG1oKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEN1cmxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQXNrIHRoZSBtdWx0aSBoYW5kbGUgaWYgdGhlcmUgYXJlIGFueSBtZXNzYWdlcyBvciBpbmZvcm1hdGlvbiBmcm9tIHRoZSBpbmRpdmlkdWFsIHRyYW5zZmVycy4KICogTWVzc2FnZXMgbWF5IGluY2x1ZGUgaW5mb3JtYXRpb24gc3VjaCBhcyBhbiBlcnJvciBjb2RlIGZyb20gdGhlIHRyYW5zZmVyIG9yIGp1c3QgdGhlIGZhY3QKICogdGhhdCBhIHRyYW5zZmVyIGlzIGNvbXBsZXRlZC4KICoKICogUmVwZWF0ZWQgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhIG5ldyByZXN1bHQgZWFjaCB0aW1lLCB1bnRpbCBhIEZBTFNFIGlzIHJldHVybmVkCiAqIGFzIGEgc2lnbmFsIHRoYXQgdGhlcmUgaXMgbm8gbW9yZSB0byBnZXQgYXQgdGhpcyBwb2ludC4gVGhlIGludGVnZXIgcG9pbnRlZCB0byB3aXRoCiAqIG1zZ3NfaW5fcXVldWUgd2lsbCBjb250YWluIHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIG1lc3NhZ2VzIGFmdGVyIHRoaXMKICogZnVuY3Rpb24gd2FzIGNhbGxlZC4KICoKICogQHBhcmFtIHJlc291cmNlICRtaCBBIGNVUkwgbXVsdGkgaGFuZGxlIHJldHVybmVkIGJ5CiAqIGN1cmxfbXVsdGlfaW5pdC4KICogQHBhcmFtIGludHxudWxsICRtc2dzX2luX3F1ZXVlIE51bWJlciBvZiBtZXNzYWdlcyB0aGF0IGFyZSBzdGlsbCBpbiB0aGUgcXVldWUKICogQHJldHVybiBhcnJheSBPbiBzdWNjZXNzLCByZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IGZvciB0aGUgbWVzc2FnZSwgRkFMU0Ugb24gZmFpbHVyZS4KICoKICoKICogQ29udGVudHMgb2YgdGhlIHJldHVybmVkIGFycmF5CiAqCiAqCiAqCiAqIEtleToKICogVmFsdWU6CiAqCiAqCiAqCiAqCiAqIG1zZwogKiBUaGUgQ1VSTE1TR19ET05FIGNvbnN0YW50LiBPdGhlciByZXR1cm4gdmFsdWVzCiAqIGFyZSBjdXJyZW50bHkgbm90IGF2YWlsYWJsZS4KICoKICoKICogcmVzdWx0CiAqIE9uZSBvZiB0aGUgQ1VSTEVfKiBjb25zdGFudHMuIElmIGV2ZXJ5dGhpbmcgaXMKICogT0ssIHRoZSBDVVJMRV9PSyB3aWxsIGJlIHRoZSByZXN1bHQuCiAqCiAqCiAqIGhhbmRsZQogKiBSZXNvdXJjZSBvZiB0eXBlIGN1cmwgaW5kaWNhdGVzIHRoZSBoYW5kbGUgd2hpY2ggaXQgY29uY2VybnMuCiAqCiAqCiAqCiAqCiAqIEB0aHJvd3MgQ3VybEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gY3VybF9tdWx0aV9pbmZvX3JlYWQoJG1oLCA/aW50ICYkbXNnc19pbl9xdWV1ZSA9IG51bGwpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGN1cmxfbXVsdGlfaW5mb19yZWFkKCRtaCwgJG1zZ3NfaW5fcXVldWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQ3VybEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBBbGxvd3MgdGhlIHByb2Nlc3Npbmcgb2YgbXVsdGlwbGUgY1VSTCBoYW5kbGVzIGFzeW5jaHJvbm91c2x5LgogKgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBjVVJMIG11bHRpIGhhbmRsZSByZXNvdXJjZSBvbiBzdWNjZXNzLCBGQUxTRSBvbiBmYWlsdXJlLgogKiBAdGhyb3dzIEN1cmxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGN1cmxfbXVsdGlfaW5pdCgpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcY3VybF9tdWx0aV9pbml0KCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBDdXJsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNldHMgYW4gb3B0aW9uIG9uIHRoZSBnaXZlbiBjVVJMIHNlc3Npb24gaGFuZGxlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNoIEEgY1VSTCBoYW5kbGUgcmV0dXJuZWQgYnkKICogY3VybF9pbml0LgogKiBAcGFyYW0gaW50ICRvcHRpb24gVGhlIENVUkxPUFRfWFhYIG9wdGlvbiB0byBzZXQuCiAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgVGhlIHZhbHVlIHRvIGJlIHNldCBvbiBvcHRpb24uCiAqCiAqIHZhbHVlIHNob3VsZCBiZSBhIGJvb2wgZm9yIHRoZQogKiBmb2xsb3dpbmcgdmFsdWVzIG9mIHRoZSBvcHRpb24gcGFyYW1ldGVyOgogKgogKgogKgogKgogKiBPcHRpb24KICogU2V0IHZhbHVlIHRvCiAqIE5vdGVzCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfQVVUT1JFRkVSRVIKICoKICogVFJVRSB0byBhdXRvbWF0aWNhbGx5IHNldCB0aGUgUmVmZXJlcjogZmllbGQgaW4KICogcmVxdWVzdHMgd2hlcmUgaXQgZm9sbG93cyBhIExvY2F0aW9uOiByZWRpcmVjdC4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9CSU5BUllUUkFOU0ZFUgogKgogKiBUUlVFIHRvIHJldHVybiB0aGUgcmF3IG91dHB1dCB3aGVuCiAqIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIgaXMgdXNlZC4KICoKICoKICogRnJvbSBQSFAgNS4xLjMsIHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Q6IHRoZSByYXcgb3V0cHV0IHdpbGwKICogYWx3YXlzIGJlIHJldHVybmVkIHdoZW4KICogQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiBpcyB1c2VkLgogKgogKgogKgogKiBDVVJMT1BUX0NPT0tJRVNFU1NJT04KICoKICogVFJVRSB0byBtYXJrIHRoaXMgYXMgYSBuZXcgY29va2llICJzZXNzaW9uIi4gSXQgd2lsbCBmb3JjZSBsaWJjdXJsCiAqIHRvIGlnbm9yZSBhbGwgY29va2llcyBpdCBpcyBhYm91dCB0byBsb2FkIHRoYXQgYXJlICJzZXNzaW9uIGNvb2tpZXMiCiAqIGZyb20gdGhlIHByZXZpb3VzIHNlc3Npb24uIEJ5IGRlZmF1bHQsIGxpYmN1cmwgYWx3YXlzIHN0b3JlcyBhbmQKICogbG9hZHMgYWxsIGNvb2tpZXMsIGluZGVwZW5kZW50IGlmIHRoZXkgYXJlIHNlc3Npb24gY29va2llcyBvciBub3QuCiAqIFNlc3Npb24gY29va2llcyBhcmUgY29va2llcyB3aXRob3V0IGV4cGlyeSBkYXRlIGFuZCB0aGV5IGFyZSBtZWFudAogKiB0byBiZSBhbGl2ZSBhbmQgZXhpc3RpbmcgZm9yIHRoaXMgInNlc3Npb24iIG9ubHkuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfQ0VSVElORk8KICoKICogVFJVRSB0byBvdXRwdXQgU1NMIGNlcnRpZmljYXRpb24gaW5mb3JtYXRpb24gdG8gU1RERVJSCiAqIG9uIHNlY3VyZSB0cmFuc2ZlcnMuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4xOS4xLgogKiBBdmFpbGFibGUgc2luY2UgUEhQIDUuMy4yLgogKiBSZXF1aXJlcyBDVVJMT1BUX1ZFUkJPU0UgdG8gYmUgb24gdG8gaGF2ZSBhbiBlZmZlY3QuCiAqCiAqCiAqCiAqIENVUkxPUFRfQ09OTkVDVF9PTkxZCiAqCiAqIFRSVUUgdGVsbHMgdGhlIGxpYnJhcnkgdG8gcGVyZm9ybSBhbGwgdGhlIHJlcXVpcmVkIHByb3h5IGF1dGhlbnRpY2F0aW9uCiAqIGFuZCBjb25uZWN0aW9uIHNldHVwLCBidXQgbm8gZGF0YSB0cmFuc2Zlci4gVGhpcyBvcHRpb24gaXMgaW1wbGVtZW50ZWQgZm9yCiAqIEhUVFAsIFNNVFAgYW5kIFBPUDMuCiAqCiAqCiAqIEFkZGVkIGluIDcuMTUuMi4KICogQXZhaWxhYmxlIHNpbmNlIFBIUCA1LjUuMC4KICoKICoKICoKICogQ1VSTE9QVF9DUkxGCiAqCiAqIFRSVUUgdG8gY29udmVydCBVbml4IG5ld2xpbmVzIHRvIENSTEYgbmV3bGluZXMKICogb24gdHJhbnNmZXJzLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX0RJU0FMTE9XX1VTRVJOQU1FX0lOX1VSTAogKgogKiBUUlVFIHRvIG5vdCBhbGxvdyBVUkxzIHRoYXQgaW5jbHVkZSBhIHVzZXJuYW1lLiBVc2VybmFtZXMgYXJlIGFsbG93ZWQgYnkgZGVmYXVsdCAoMCkuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy42MS4wLiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMy4wLgogKgogKgogKgogKiBDVVJMT1BUX0ROU19TSFVGRkxFX0FERFJFU1NFUwogKgogKiBUUlVFIHRvIHNodWZmbGUgdGhlIG9yZGVyIG9mIGFsbCByZXR1cm5lZCBhZGRyZXNzZXMgc28gdGhhdCB0aGV5IHdpbGwgYmUgdXNlZAogKiBpbiBhIHJhbmRvbSBvcmRlciwgd2hlbiBhIG5hbWUgaXMgcmVzb2x2ZWQgYW5kIG1vcmUgdGhhbiBvbmUgSVAgYWRkcmVzcyBpcyByZXR1cm5lZC4KICogVGhpcyBtYXkgY2F1c2UgSVB2NCB0byBiZSB1c2VkIGJlZm9yZSBJUHY2IG9yIHZpY2UgdmVyc2EuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy42MC4wLiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMy4wLgogKgogKgogKgogKiBDVVJMT1BUX0hBUFJPWFlQUk9UT0NPTAogKgogKiBUUlVFIHRvIHNlbmQgYW4gSEFQcm94eSBQUk9YWSBwcm90b2NvbCB2MSBoZWFkZXIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBjb25uZWN0aW9uLgogKiBUaGUgZGVmYXVsdCBhY3Rpb24gaXMgbm90IHRvIHNlbmQgdGhpcyBoZWFkZXIuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy42MC4wLiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMy4wLgogKgogKgogKgogKiBDVVJMT1BUX1NTSF9DT01QUkVTU0lPTgogKgogKiBUUlVFIHRvIGVuYWJsZSBidWlsdC1pbiBTU0ggY29tcHJlc3Npb24uIFRoaXMgaXMgYSByZXF1ZXN0LCBub3QgYW4gb3JkZXI7CiAqIHRoZSBzZXJ2ZXIgbWF5IG9yIG1heSBub3QgZG8gaXQuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy41Ni4wLiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMy4wLgogKgogKgogKgogKiBDVVJMT1BUX0ROU19VU0VfR0xPQkFMX0NBQ0hFCiAqCiAqIFRSVUUgdG8gdXNlIGEgZ2xvYmFsIEROUyBjYWNoZS4gVGhpcyBvcHRpb24gaXMgbm90IHRocmVhZC1zYWZlLgogKiBJdCBpcyBjb25kaXRpb25hbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCBpZiBQSFAgaXMgYnVpbHQgZm9yIG5vbi10aHJlYWRlZCB1c2UKICogKENMSSwgRkNHSSwgQXBhY2hlMi1QcmVmb3JrLCBldGMuKS4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9GQUlMT05FUlJPUgogKgogKiBUUlVFIHRvIGZhaWwgdmVyYm9zZWx5IGlmIHRoZSBIVFRQIGNvZGUgcmV0dXJuZWQKICogaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDQwMC4gVGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gcmV0dXJuCiAqIHRoZSBwYWdlIG5vcm1hbGx5LCBpZ25vcmluZyB0aGUgY29kZS4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9TU0xfRkFMU0VTVEFSVAogKgogKiBUUlVFIHRvIGVuYWJsZSBUTFMgZmFsc2Ugc3RhcnQuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy40Mi4wLiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMC43LgogKgogKgogKgogKiBDVVJMT1BUX0ZJTEVUSU1FCiAqCiAqIFRSVUUgdG8gYXR0ZW1wdCB0byByZXRyaWV2ZSB0aGUgbW9kaWZpY2F0aW9uCiAqIGRhdGUgb2YgdGhlIHJlbW90ZSBkb2N1bWVudC4gVGhpcyB2YWx1ZSBjYW4gYmUgcmV0cmlldmVkIHVzaW5nCiAqIHRoZSBDVVJMSU5GT19GSUxFVElNRSBvcHRpb24gd2l0aAogKiBjdXJsX2dldGluZm8uCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfRk9MTE9XTE9DQVRJT04KICoKICogVFJVRSB0byBmb2xsb3cgYW55CiAqICJMb2NhdGlvbjogIiBoZWFkZXIgdGhhdCB0aGUgc2VydmVyIHNlbmRzIGFzCiAqIHBhcnQgb2YgdGhlIEhUVFAgaGVhZGVyIChub3RlIHRoaXMgaXMgcmVjdXJzaXZlLCBQSFAgd2lsbCBmb2xsb3cgYXMKICogbWFueSAiTG9jYXRpb246ICIgaGVhZGVycyB0aGF0IGl0IGlzIHNlbnQsCiAqIHVubGVzcyBDVVJMT1BUX01BWFJFRElSUyBpcyBzZXQpLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX0ZPUkJJRF9SRVVTRQogKgogKiBUUlVFIHRvIGZvcmNlIHRoZSBjb25uZWN0aW9uIHRvIGV4cGxpY2l0bHkKICogY2xvc2Ugd2hlbiBpdCBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZywgYW5kIG5vdCBiZSBwb29sZWQgZm9yIHJldXNlLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX0ZSRVNIX0NPTk5FQ1QKICoKICogVFJVRSB0byBmb3JjZSB0aGUgdXNlIG9mIGEgbmV3IGNvbm5lY3Rpb24KICogaW5zdGVhZCBvZiBhIGNhY2hlZCBvbmUuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfRlRQX1VTRV9FUFJUCiAqCiAqIFRSVUUgdG8gdXNlIEVQUlQgKGFuZCBMUFJUKSB3aGVuIGRvaW5nIGFjdGl2ZQogKiBGVFAgZG93bmxvYWRzLiBVc2UgRkFMU0UgdG8gZGlzYWJsZSBFUFJUIGFuZCBMUFJUIGFuZCB1c2UgUE9SVAogKiBvbmx5LgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX0ZUUF9VU0VfRVBTVgogKgogKiBUUlVFIHRvIGZpcnN0IHRyeSBhbiBFUFNWIGNvbW1hbmQgZm9yIEZUUAogKiB0cmFuc2ZlcnMgYmVmb3JlIHJldmVydGluZyBiYWNrIHRvIFBBU1YuIFNldCB0byBGQUxTRQogKiB0byBkaXNhYmxlIEVQU1YuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfRlRQX0NSRUFURV9NSVNTSU5HX0RJUlMKICoKICogVFJVRSB0byBjcmVhdGUgbWlzc2luZyBkaXJlY3RvcmllcyB3aGVuIGFuIEZUUCBvcGVyYXRpb24KICogZW5jb3VudGVycyBhIHBhdGggdGhhdCBjdXJyZW50bHkgZG9lc24ndCBleGlzdC4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9GVFBBUFBFTkQKICoKICogVFJVRSB0byBhcHBlbmQgdG8gdGhlIHJlbW90ZSBmaWxlIGluc3RlYWQgb2YKICogb3ZlcndyaXRpbmcgaXQuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfVENQX05PREVMQVkKICoKICogVFJVRSB0byBkaXNhYmxlIFRDUCdzIE5hZ2xlIGFsZ29yaXRobSwgd2hpY2ggdHJpZXMgdG8gbWluaW1pemUKICogdGhlIG51bWJlciBvZiBzbWFsbCBwYWNrZXRzIG9uIHRoZSBuZXR3b3JrLgogKgogKgogKiBBdmFpbGFibGUgc2luY2UgUEhQIDUuMi4xIGZvciB2ZXJzaW9ucyBjb21waWxlZCB3aXRoIGxpYmN1cmwgNy4xMS4yIG9yCiAqIGdyZWF0ZXIuCiAqCiAqCiAqCiAqIENVUkxPUFRfRlRQQVNDSUkKICoKICogQW4gYWxpYXMgb2YKICogQ1VSTE9QVF9UUkFOU0ZFUlRFWFQuIFVzZSB0aGF0IGluc3RlYWQuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfRlRQTElTVE9OTFkKICoKICogVFJVRSB0byBvbmx5IGxpc3QgdGhlIG5hbWVzIG9mIGFuIEZUUAogKiBkaXJlY3RvcnkuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfSEVBREVSCiAqCiAqIFRSVUUgdG8gaW5jbHVkZSB0aGUgaGVhZGVyIGluIHRoZSBvdXRwdXQuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX0hFQURFUl9PVVQKICoKICogVFJVRSB0byB0cmFjayB0aGUgaGFuZGxlJ3MgcmVxdWVzdCBzdHJpbmcuCiAqCiAqCiAqIEF2YWlsYWJsZSBzaW5jZSBQSFAgNS4xLjMuIFRoZSBDVVJMSU5GT18KICogcHJlZml4IGlzIGludGVudGlvbmFsLgogKgogKgogKgogKiBDVVJMT1BUX0hUVFAwOV9BTExPV0VECiAqCiAqIFdoZXRoZXIgdG8gYWxsb3cgSFRUUC8wLjkgcmVzcG9uc2VzLiBEZWZhdWx0cyB0byBGQUxTRSBhcyBvZiBsaWJjdXJsIDcuNjYuMDsKICogZm9ybWVybHkgaXQgZGVmYXVsdGVkIHRvIFRSVUUuCiAqCiAqCiAqIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4zLjE1IGFuZCA3LjQuMywgcmVzcGVjdGl2ZWx5LCBpZiBidWlsdCBhZ2FpbnN0IGxpYmN1cmwgJmd0Oz0gNy42NC4wCiAqCiAqCiAqCiAqIENVUkxPUFRfSFRUUEdFVAogKgogKiBUUlVFIHRvIHJlc2V0IHRoZSBIVFRQIHJlcXVlc3QgbWV0aG9kIHRvIEdFVC4KICogU2luY2UgR0VUIGlzIHRoZSBkZWZhdWx0LCB0aGlzIGlzIG9ubHkgbmVjZXNzYXJ5IGlmIHRoZSByZXF1ZXN0CiAqIG1ldGhvZCBoYXMgYmVlbiBjaGFuZ2VkLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX0hUVFBQUk9YWVRVTk5FTAogKgogKiBUUlVFIHRvIHR1bm5lbCB0aHJvdWdoIGEgZ2l2ZW4gSFRUUCBwcm94eS4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9IVFRQX0NPTlRFTlRfREVDT0RJTkcKICoKICogRkFMU0UgdG8gZ2V0IHRoZSByYXcgSFRUUCByZXNwb25zZSBib2R5LgogKgogKgogKiBBdmFpbGFibGUgYXMgb2YgUEhQIDUuNS4wIGlmIGJ1aWx0IGFnYWluc3QgbGliY3VybCAmZ3Q7PSA3LjE2LjIuCiAqCiAqCiAqCiAqIENVUkxPUFRfS0VFUF9TRU5ESU5HX09OX0VSUk9SCiAqCiAqIFRSVUUgdG8ga2VlcCBzZW5kaW5nIHRoZSByZXF1ZXN0IGJvZHkgaWYgdGhlIEhUVFAgY29kZSByZXR1cm5lZCBpcwogKiBlcXVhbCB0byBvciBsYXJnZXIgdGhhbiAzMDAuIFRoZSBkZWZhdWx0IGFjdGlvbiB3b3VsZCBiZSB0byBzdG9wIHNlbmRpbmcKICogYW5kIGNsb3NlIHRoZSBzdHJlYW0gb3IgY29ubmVjdGlvbi4gU3VpdGFibGUgZm9yIG1hbnVhbCBOVExNIGF1dGhlbnRpY2F0aW9uLgogKiBNb3N0IGFwcGxpY2F0aW9ucyBkbyBub3QgbmVlZCB0aGlzIG9wdGlvbi4KICoKICoKICogQXZhaWxhYmxlIGFzIG9mIFBIUCA3LjMuMCBpZiBidWlsdCBhZ2FpbnN0IGxpYmN1cmwgJmd0Oz0gNy41MS4wLgogKgogKgogKgogKiBDVVJMT1BUX01VVEUKICoKICogVFJVRSB0byBiZSBjb21wbGV0ZWx5IHNpbGVudCB3aXRoIHJlZ2FyZHMgdG8KICogdGhlIGNVUkwgZnVuY3Rpb25zLgogKgogKgogKiBSZW1vdmVkIGluIGNVUkwgNy4xNS41IChZb3UgY2FuIHVzZSBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSIGluc3RlYWQpCiAqCiAqCiAqCiAqIENVUkxPUFRfTkVUUkMKICoKICogVFJVRSB0byBzY2FuIHRoZSB+Ly5uZXRyYwogKiBmaWxlIHRvIGZpbmQgYSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZm9yIHRoZSByZW1vdGUgc2l0ZSB0aGF0CiAqIGEgY29ubmVjdGlvbiBpcyBiZWluZyBlc3RhYmxpc2hlZCB3aXRoLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX05PQk9EWQogKgogKiBUUlVFIHRvIGV4Y2x1ZGUgdGhlIGJvZHkgZnJvbSB0aGUgb3V0cHV0LgogKiBSZXF1ZXN0IG1ldGhvZCBpcyB0aGVuIHNldCB0byBIRUFELiBDaGFuZ2luZyB0aGlzIHRvIEZBTFNFIGRvZXMKICogbm90IGNoYW5nZSBpdCB0byBHRVQuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfTk9QUk9HUkVTUwogKgogKiBUUlVFIHRvIGRpc2FibGUgdGhlIHByb2dyZXNzIG1ldGVyIGZvciBjVVJMIHRyYW5zZmVycy4KICoKICoKICogUEhQIGF1dG9tYXRpY2FsbHkgc2V0cyB0aGlzIG9wdGlvbiB0byBUUlVFLCB0aGlzIHNob3VsZCBvbmx5IGJlCiAqIGNoYW5nZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KICoKICoKICoKICoKICoKICoKICoKICogQ1VSTE9QVF9OT1NJR05BTAogKgogKiBUUlVFIHRvIGlnbm9yZSBhbnkgY1VSTCBmdW5jdGlvbiB0aGF0IGNhdXNlcyBhCiAqIHNpZ25hbCB0byBiZSBzZW50IHRvIHRoZSBQSFAgcHJvY2Vzcy4gVGhpcyBpcyB0dXJuZWQgb24gYnkgZGVmYXVsdAogKiBpbiBtdWx0aS10aHJlYWRlZCBTQVBJcyBzbyB0aW1lb3V0IG9wdGlvbnMgY2FuIHN0aWxsIGJlIHVzZWQuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4xMC4KICoKICoKICoKICogQ1VSTE9QVF9QQVRIX0FTX0lTCiAqCiAqIFRSVUUgdG8gbm90IGhhbmRsZSBkb3QgZG90IHNlcXVlbmNlcy4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjQyLjAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4wLjcuCiAqCiAqCiAqCiAqIENVUkxPUFRfUElQRVdBSVQKICoKICogVFJVRSB0byB3YWl0IGZvciBwaXBlbGluaW5nL211bHRpcGxleGluZy4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjQzLjAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4wLjcuCiAqCiAqCiAqCiAqIENVUkxPUFRfUE9TVAogKgogKiBUUlVFIHRvIGRvIGEgcmVndWxhciBIVFRQIFBPU1QuIFRoaXMgUE9TVCBpcyB0aGUKICogbm9ybWFsIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBraW5kLAogKiBtb3N0IGNvbW1vbmx5IHVzZWQgYnkgSFRNTCBmb3Jtcy4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9QVVQKICoKICogVFJVRSB0byBIVFRQIFBVVCBhIGZpbGUuIFRoZSBmaWxlIHRvIFBVVCBtdXN0CiAqIGJlIHNldCB3aXRoIENVUkxPUFRfSU5GSUxFIGFuZAogKiBDVVJMT1BUX0lORklMRVNJWkUuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIKICoKICogVFJVRSB0byByZXR1cm4gdGhlIHRyYW5zZmVyIGFzIGEgc3RyaW5nIG9mIHRoZQogKiByZXR1cm4gdmFsdWUgb2YgY3VybF9leGVjIGluc3RlYWQgb2Ygb3V0cHV0dGluZwogKiBpdCBkaXJlY3RseS4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9TQUZFX1VQTE9BRAogKgogKiBUUlVFIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgdGhlIEAgcHJlZml4IGZvcgogKiB1cGxvYWRpbmcgZmlsZXMgaW4gQ1VSTE9QVF9QT1NURklFTERTLCB3aGljaAogKiBtZWFucyB0aGF0IHZhbHVlcyBzdGFydGluZyB3aXRoIEAgY2FuIGJlIHNhZmVseQogKiBwYXNzZWQgYXMgZmllbGRzLiBDVVJMRmlsZSBtYXkgYmUgdXNlZCBmb3IKICogdXBsb2FkcyBpbnN0ZWFkLgogKgogKgogKiBBZGRlZCBpbiBQSFAgNS41LjAgd2l0aCBGQUxTRSBhcyB0aGUgZGVmYXVsdCB2YWx1ZS4gUEhQIDUuNi4wCiAqIGNoYW5nZXMgdGhlIGRlZmF1bHQgdmFsdWUgdG8gVFJVRS4gUEhQIDcgcmVtb3ZlcyB0aGlzIG9wdGlvbjsKICogdGhlIENVUkxGaWxlIGludGVyZmFjZSBtdXN0IGJlIHVzZWQgdG8gdXBsb2FkIGZpbGVzLgogKgogKgogKgogKiBDVVJMT1BUX1NBU0xfSVIKICoKICogVFJVRSB0byBlbmFibGUgc2VuZGluZyB0aGUgaW5pdGlhbCByZXNwb25zZSBpbiB0aGUgZmlyc3QgcGFja2V0LgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMzEuMTAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4wLjcuCiAqCiAqCiAqCiAqIENVUkxPUFRfU1NMX0VOQUJMRV9BTFBOCiAqCiAqIEZBTFNFIHRvIGRpc2FibGUgQUxQTiBpbiB0aGUgU1NMIGhhbmRzaGFrZSAoaWYgdGhlIFNTTCBiYWNrZW5kCiAqIGxpYmN1cmwgaXMgYnVpbHQgdG8gdXNlIHN1cHBvcnRzIGl0KSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8KICogbmVnb3RpYXRlIGh0dHAyLgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMzYuMC4gQXZhaWxhYmxlIHNpbmNlIFBIUCA3LjAuNy4KICoKICoKICoKICogQ1VSTE9QVF9TU0xfRU5BQkxFX05QTgogKgogKiBGQUxTRSB0byBkaXNhYmxlIE5QTiBpbiB0aGUgU1NMIGhhbmRzaGFrZSAoaWYgdGhlIFNTTCBiYWNrZW5kCiAqIGxpYmN1cmwgaXMgYnVpbHQgdG8gdXNlIHN1cHBvcnRzIGl0KSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8KICogbmVnb3RpYXRlIGh0dHAyLgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMzYuMC4gQXZhaWxhYmxlIHNpbmNlIFBIUCA3LjAuNy4KICoKICoKICoKICogQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUgogKgogKiBGQUxTRSB0byBzdG9wIGNVUkwgZnJvbSB2ZXJpZnlpbmcgdGhlIHBlZXIncwogKiBjZXJ0aWZpY2F0ZS4gQWx0ZXJuYXRlIGNlcnRpZmljYXRlcyB0byB2ZXJpZnkgYWdhaW5zdCBjYW4gYmUKICogc3BlY2lmaWVkIHdpdGggdGhlIENVUkxPUFRfQ0FJTkZPIG9wdGlvbgogKiBvciBhIGNlcnRpZmljYXRlIGRpcmVjdG9yeSBjYW4gYmUgc3BlY2lmaWVkIHdpdGggdGhlCiAqIENVUkxPUFRfQ0FQQVRIIG9wdGlvbi4KICoKICoKICogVFJVRSBieSBkZWZhdWx0IGFzIG9mIGNVUkwgNy4xMC4gRGVmYXVsdCBidW5kbGUgaW5zdGFsbGVkIGFzIG9mCiAqIGNVUkwgNy4xMC4KICoKICoKICoKICogQ1VSTE9QVF9TU0xfVkVSSUZZU1RBVFVTCiAqCiAqIFRSVUUgdG8gdmVyaWZ5IHRoZSBjZXJ0aWZpY2F0ZSdzIHN0YXR1cy4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjQxLjAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4wLjcuCiAqCiAqCiAqCiAqIENVUkxPUFRfUFJPWFlfU1NMX1ZFUklGWVBFRVIKICoKICogRkFMU0UgdG8gc3RvcCBjVVJMIGZyb20gdmVyaWZ5aW5nIHRoZSBwZWVyJ3MgY2VydGlmaWNhdGUuCiAqIEFsdGVybmF0ZSBjZXJ0aWZpY2F0ZXMgdG8gdmVyaWZ5IGFnYWluc3QgY2FuIGJlCiAqIHNwZWNpZmllZCB3aXRoIHRoZSBDVVJMT1BUX0NBSU5GTyBvcHRpb24KICogb3IgYSBjZXJ0aWZpY2F0ZSBkaXJlY3RvcnkgY2FuIGJlIHNwZWNpZmllZCB3aXRoIHRoZQogKiBDVVJMT1BUX0NBUEFUSCBvcHRpb24uCiAqIFdoZW4gc2V0IHRvIGZhbHNlLCB0aGUgcGVlciBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gc3VjY2VlZHMgcmVnYXJkbGVzcy4KICoKICoKICogVFJVRSBieSBkZWZhdWx0LiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMy4wIGFuZCBsaWJjdXJsICZndDs9IGNVUkwgNy41Mi4wLgogKgogKgogKgogKiBDVVJMT1BUX1NVUFBSRVNTX0NPTk5FQ1RfSEVBREVSUwogKgogKiBUUlVFIHRvIHN1cHByZXNzIHByb3h5IENPTk5FQ1QgcmVzcG9uc2UgaGVhZGVycyBmcm9tIHRoZSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9ucwogKiBDVVJMT1BUX0hFQURFUkZVTkNUSU9OIGFuZCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sCiAqIHdoZW4gQ1VSTE9QVF9IVFRQUFJPWFlUVU5ORUwgaXMgdXNlZCBhbmQgYSBDT05ORUNUIHJlcXVlc3QgaXMgbWFkZS4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjU0LjAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4zLjAuCiAqCiAqCiAqCiAqIENVUkxPUFRfVENQX0ZBU1RPUEVOCiAqCiAqIFRSVUUgdG8gZW5hYmxlIFRDUCBGYXN0IE9wZW4uCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy40OS4wLiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMC43LgogKgogKgogKgogKiBDVVJMT1BUX1RGVFBfTk9fT1BUSU9OUwogKgogKiBUUlVFIHRvIG5vdCBzZW5kIFRGVFAgb3B0aW9ucyByZXF1ZXN0cy4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjQ4LjAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4wLjcuCiAqCiAqCiAqCiAqIENVUkxPUFRfVFJBTlNGRVJURVhUCiAqCiAqIFRSVUUgdG8gdXNlIEFTQ0lJIG1vZGUgZm9yIEZUUCB0cmFuc2ZlcnMuCiAqIEZvciBMREFQLCBpdCByZXRyaWV2ZXMgZGF0YSBpbiBwbGFpbiB0ZXh0IGluc3RlYWQgb2YgSFRNTC4gT24KICogV2luZG93cyBzeXN0ZW1zLCBpdCB3aWxsIG5vdCBzZXQgU1RET1VUIHRvIGJpbmFyeQogKiBtb2RlLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX1VOUkVTVFJJQ1RFRF9BVVRICiAqCiAqIFRSVUUgdG8ga2VlcCBzZW5kaW5nIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQKICogd2hlbiBmb2xsb3dpbmcgbG9jYXRpb25zICh1c2luZwogKiBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OKSwgZXZlbiB3aGVuIHRoZQogKiBob3N0bmFtZSBoYXMgY2hhbmdlZC4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9VUExPQUQKICoKICogVFJVRSB0byBwcmVwYXJlIGZvciBhbiB1cGxvYWQuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfVkVSQk9TRQogKgogKiBUUlVFIHRvIG91dHB1dCB2ZXJib3NlIGluZm9ybWF0aW9uLiBXcml0ZXMKICogb3V0cHV0IHRvIFNUREVSUiwgb3IgdGhlIGZpbGUgc3BlY2lmaWVkIHVzaW5nCiAqIENVUkxPUFRfU1RERVJSLgogKgogKgogKgogKgogKgogKgogKgogKgogKiBUUlVFIHRvIGRpc2FibGUgdGhlIHByb2dyZXNzIG1ldGVyIGZvciBjVVJMIHRyYW5zZmVycy4KICoKICoKICogUEhQIGF1dG9tYXRpY2FsbHkgc2V0cyB0aGlzIG9wdGlvbiB0byBUUlVFLCB0aGlzIHNob3VsZCBvbmx5IGJlCiAqIGNoYW5nZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KICoKICoKICoKICogUEhQIGF1dG9tYXRpY2FsbHkgc2V0cyB0aGlzIG9wdGlvbiB0byBUUlVFLCB0aGlzIHNob3VsZCBvbmx5IGJlCiAqIGNoYW5nZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KICoKICogdmFsdWUgc2hvdWxkIGJlIGFuIGludGVnZXIgZm9yIHRoZQogKiBmb2xsb3dpbmcgdmFsdWVzIG9mIHRoZSBvcHRpb24gcGFyYW1ldGVyOgogKgogKgogKgogKgogKiBPcHRpb24KICogU2V0IHZhbHVlIHRvCiAqIE5vdGVzCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfQlVGRkVSU0laRQogKgogKiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHRvIHVzZSBmb3IgZWFjaCByZWFkLiBUaGVyZSBpcyBubyBndWFyYW50ZWUKICogdGhpcyByZXF1ZXN0IHdpbGwgYmUgZnVsZmlsbGVkLCBob3dldmVyLgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMTAuCiAqCiAqCiAqCiAqIENVUkxPUFRfQ0xPU0VQT0xJQ1kKICoKICogT25lIG9mIHRoZSBDVVJMQ0xPU0VQT0xJQ1lfKiB2YWx1ZXMuCiAqCiAqCiAqIFRoaXMgb3B0aW9uIGlzIGRlcHJlY2F0ZWQsIGFzIGl0IHdhcyBuZXZlciBpbXBsZW1lbnRlZCBpbiBjVVJMIGFuZAogKiBuZXZlciBoYWQgYW55IGVmZmVjdC4KICoKICoKICoKICoKICogUmVtb3ZlZCBpbiBQSFAgNS42LjAuCiAqCiAqCiAqCiAqIENVUkxPUFRfQ09OTkVDVFRJTUVPVVQKICoKICogVGhlIG51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgd2hpbGUgdHJ5aW5nIHRvIGNvbm5lY3QuIFVzZSAwIHRvCiAqIHdhaXQgaW5kZWZpbml0ZWx5LgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX0NPTk5FQ1RUSU1FT1VUX01TCiAqCiAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgd2hpbGUgdHJ5aW5nIHRvIGNvbm5lY3QuIFVzZSAwIHRvCiAqIHdhaXQgaW5kZWZpbml0ZWx5LgogKgogKiBJZiBsaWJjdXJsIGlzIGJ1aWx0IHRvIHVzZSB0aGUgc3RhbmRhcmQgc3lzdGVtIG5hbWUgcmVzb2x2ZXIsIHRoYXQKICogcG9ydGlvbiBvZiB0aGUgY29ubmVjdCB3aWxsIHN0aWxsIHVzZSBmdWxsLXNlY29uZCByZXNvbHV0aW9uIGZvcgogKiB0aW1lb3V0cyB3aXRoIGEgbWluaW11bSB0aW1lb3V0IGFsbG93ZWQgb2Ygb25lIHNlY29uZC4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjE2LjIuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNS4yLjMuCiAqCiAqCiAqCiAqIENVUkxPUFRfRE5TX0NBQ0hFX1RJTUVPVVQKICoKICogVGhlIG51bWJlciBvZiBzZWNvbmRzIHRvIGtlZXAgRE5TIGVudHJpZXMgaW4gbWVtb3J5LiBUaGlzCiAqIG9wdGlvbiBpcyBzZXQgdG8gMTIwICgyIG1pbnV0ZXMpIGJ5IGRlZmF1bHQuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfRVhQRUNUXzEwMF9USU1FT1VUX01TCiAqCiAqIFRoZSB0aW1lb3V0IGZvciBFeHBlY3Q6IDEwMC1jb250aW51ZSByZXNwb25zZXMgaW4gbWlsbGlzZWNvbmRzLgogKiBEZWZhdWx0cyB0byAxMDAwIG1pbGxpc2Vjb25kcy4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjM2LjAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4wLjcuCiAqCiAqCiAqCiAqIENVUkxPUFRfSEFQUFlfRVlFQkFMTFNfVElNRU9VVF9NUwogKgogKiBIZWFkIHN0YXJ0IGZvciBpcHY2IGZvciB0aGUgaGFwcHkgZXllYmFsbHMgYWxnb3JpdGhtLiBIYXBweSBleWViYWxscyBhdHRlbXB0cwogKiB0byBjb25uZWN0IHRvIGJvdGggSVB2NCBhbmQgSVB2NiBhZGRyZXNzZXMgZm9yIGR1YWwtc3RhY2sgaG9zdHMsCiAqIHByZWZlcnJpbmcgSVB2NiBmaXJzdCBmb3IgdGltZW91dCBtaWxsaXNlY29uZHMuCiAqIERlZmF1bHRzIHRvIENVUkxfSEVUX0RFRkFVTFQsIHdoaWNoIGlzIGN1cnJlbnRseSAyMDAgbWlsbGlzZWNvbmRzLgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuNTkuMC4gQXZhaWxhYmxlIHNpbmNlIFBIUCA3LjMuMC4KICoKICoKICoKICogQ1VSTE9QVF9GVFBTU0xBVVRICiAqCiAqIFRoZSBGVFAgYXV0aGVudGljYXRpb24gbWV0aG9kICh3aGVuIGlzIGFjdGl2YXRlZCk6CiAqIENVUkxGVFBBVVRIX1NTTCAodHJ5IFNTTCBmaXJzdCksCiAqIENVUkxGVFBBVVRIX1RMUyAodHJ5IFRMUyBmaXJzdCksIG9yCiAqIENVUkxGVFBBVVRIX0RFRkFVTFQgKGxldCBjVVJMIGRlY2lkZSkuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4xMi4yLgogKgogKgogKgogKiBDVVJMT1BUX0hFQURFUk9QVAogKgogKiBIb3cgdG8gZGVhbCB3aXRoIGhlYWRlcnMuIE9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbnN0YW50czoKICoKICogQ1VSTEhFQURFUl9VTklGSUVEOiB0aGUgaGVhZGVycyBzcGVjaWZpZWQgaW4KICogQ1VSTE9QVF9IVFRQSEVBREVSIHdpbGwgYmUgdXNlZCBpbiByZXF1ZXN0cwogKiBib3RoIHRvIHNlcnZlcnMgYW5kIHByb3hpZXMuIFdpdGggdGhpcyBvcHRpb24gZW5hYmxlZCwKICogQ1VSTE9QVF9QUk9YWUhFQURFUiB3aWxsIG5vdCBoYXZlIGFueSBlZmZlY3QuCiAqCiAqCiAqIENVUkxIRUFERVJfU0VQQVJBVEU6IG1ha2VzCiAqIENVUkxPUFRfSFRUUEhFQURFUiBoZWFkZXJzIG9ubHkgZ2V0IHNlbnQgdG8KICogYSBzZXJ2ZXIgYW5kIG5vdCB0byBhIHByb3h5LiBQcm94eSBoZWFkZXJzIG11c3QgYmUgc2V0IHdpdGgKICogQ1VSTE9QVF9QUk9YWUhFQURFUiB0byBnZXQgdXNlZC4gTm90ZSB0aGF0IGlmCiAqIGEgbm9uLUNPTk5FQ1QgcmVxdWVzdCBpcyBzZW50IHRvIGEgcHJveHksIGxpYmN1cmwgd2lsbCBzZW5kIGJvdGgKICogc2VydmVyIGhlYWRlcnMgYW5kIHByb3h5IGhlYWRlcnMuIFdoZW4gZG9pbmcgQ09OTkVDVCwgbGliY3VybCB3aWxsCiAqIHNlbmQgQ1VSTE9QVF9QUk9YWUhFQURFUiBoZWFkZXJzIG9ubHkgdG8gdGhlCiAqIHByb3h5IGFuZCB0aGVuIENVUkxPUFRfSFRUUEhFQURFUiBoZWFkZXJzCiAqIG9ubHkgdG8gdGhlIHNlcnZlci4KICoKICoKICogRGVmYXVsdHMgdG8gQ1VSTEhFQURFUl9TRVBBUkFURSBhcyBvZiBjVVJMCiAqIDcuNDIuMSwgYW5kIENVUkxIRUFERVJfVU5JRklFRCBiZWZvcmUuCiAqCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4zNy4wLiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMC43LgogKgogKgogKgogKiBDVVJMT1BUX0hUVFBfVkVSU0lPTgogKgogKiBDVVJMX0hUVFBfVkVSU0lPTl9OT05FIChkZWZhdWx0LCBsZXRzIENVUkwKICogZGVjaWRlIHdoaWNoIHZlcnNpb24gdG8gdXNlKSwKICogQ1VSTF9IVFRQX1ZFUlNJT05fMV8wIChmb3JjZXMgSFRUUC8xLjApLAogKiBDVVJMX0hUVFBfVkVSU0lPTl8xXzEgKGZvcmNlcyBIVFRQLzEuMSksCiAqIENVUkxfSFRUUF9WRVJTSU9OXzJfMCAoYXR0ZW1wdHMgSFRUUCAyKSwKICogQ1VSTF9IVFRQX1ZFUlNJT05fMiAgKGFsaWFzIG9mIENVUkxfSFRUUF9WRVJTSU9OXzJfMCksCiAqIENVUkxfSFRUUF9WRVJTSU9OXzJUTFMgKGF0dGVtcHRzIEhUVFAgMiBvdmVyIFRMUyAoSFRUUFMpIG9ubHkpIG9yCiAqIENVUkxfSFRUUF9WRVJTSU9OXzJfUFJJT1JfS05PV0xFREdFIChpc3N1ZXMgbm9uLVRMUyBIVFRQIHJlcXVlc3RzIHVzaW5nIEhUVFAvMiB3aXRob3V0IEhUVFAvMS4xIFVwZ3JhZGUpLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX0hUVFBBVVRICiAqCiAqCiAqIFRoZSBIVFRQIGF1dGhlbnRpY2F0aW9uIG1ldGhvZChzKSB0byB1c2UuIFRoZSBvcHRpb25zIGFyZToKICogQ1VSTEFVVEhfQkFTSUMsCiAqIENVUkxBVVRIX0RJR0VTVCwKICogQ1VSTEFVVEhfR1NTTkVHT1RJQVRFLAogKiBDVVJMQVVUSF9OVExNLAogKiBDVVJMQVVUSF9BTlksIGFuZAogKiBDVVJMQVVUSF9BTllTQUZFLgogKgogKgogKiBUaGUgYml0d2lzZSB8IChvcikgb3BlcmF0b3IgY2FuIGJlIHVzZWQgdG8gY29tYmluZQogKiBtb3JlIHRoYW4gb25lIG1ldGhvZC4gSWYgdGhpcyBpcyBkb25lLCBjVVJMIHdpbGwgcG9sbCB0aGUgc2VydmVyIHRvIHNlZQogKiB3aGF0IG1ldGhvZHMgaXQgc3VwcG9ydHMgYW5kIHBpY2sgdGhlIGJlc3Qgb25lLgogKgogKgogKiBDVVJMQVVUSF9BTlkgaXMgYW4gYWxpYXMgZm9yCiAqIENVUkxBVVRIX0JBU0lDIHwgQ1VSTEFVVEhfRElHRVNUIHwgQ1VSTEFVVEhfR1NTTkVHT1RJQVRFIHwgQ1VSTEFVVEhfTlRMTS4KICoKICoKICogQ1VSTEFVVEhfQU5ZU0FGRSBpcyBhbiBhbGlhcyBmb3IKICogQ1VSTEFVVEhfRElHRVNUIHwgQ1VSTEFVVEhfR1NTTkVHT1RJQVRFIHwgQ1VSTEFVVEhfTlRMTS4KICoKICoKICoKICoKICoKICoKICogQ1VSTE9QVF9JTkZJTEVTSVpFCiAqCiAqIFRoZSBleHBlY3RlZCBzaXplLCBpbiBieXRlcywgb2YgdGhlIGZpbGUgd2hlbiB1cGxvYWRpbmcgYSBmaWxlIHRvCiAqIGEgcmVtb3RlIHNpdGUuIE5vdGUgdGhhdCB1c2luZyB0aGlzIG9wdGlvbiB3aWxsIG5vdCBzdG9wIGxpYmN1cmwKICogZnJvbSBzZW5kaW5nIG1vcmUgZGF0YSwgYXMgZXhhY3RseSB3aGF0IGlzIHNlbnQgZGVwZW5kcyBvbgogKiBDVVJMT1BUX1JFQURGVU5DVElPTi4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9MT1dfU1BFRURfTElNSVQKICoKICogVGhlIHRyYW5zZmVyIHNwZWVkLCBpbiBieXRlcyBwZXIgc2Vjb25kLCB0aGF0IHRoZSB0cmFuc2ZlciBzaG91bGQgYmUKICogYmVsb3cgZHVyaW5nIHRoZSBjb3VudCBvZiBDVVJMT1BUX0xPV19TUEVFRF9USU1FCiAqIHNlY29uZHMgYmVmb3JlIFBIUCBjb25zaWRlcnMgdGhlIHRyYW5zZmVyIHRvbyBzbG93IGFuZCBhYm9ydHMuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfTE9XX1NQRUVEX1RJTUUKICoKICogVGhlIG51bWJlciBvZiBzZWNvbmRzIHRoZSB0cmFuc2ZlciBzcGVlZCBzaG91bGQgYmUgYmVsb3cKICogQ1VSTE9QVF9MT1dfU1BFRURfTElNSVQgYmVmb3JlIFBIUCBjb25zaWRlcnMKICogdGhlIHRyYW5zZmVyIHRvbyBzbG93IGFuZCBhYm9ydHMuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfTUFYQ09OTkVDVFMKICoKICogVGhlIG1heGltdW0gYW1vdW50IG9mIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMgdGhhdCBhcmUgYWxsb3dlZC4KICogV2hlbiB0aGUgbGltaXQgaXMgcmVhY2hlZCwKICogQ1VSTE9QVF9DTE9TRVBPTElDWSBpcyB1c2VkIHRvIGRldGVybWluZQogKiB3aGljaCBjb25uZWN0aW9uIHRvIGNsb3NlLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX01BWFJFRElSUwogKgogKiBUaGUgbWF4aW11bSBhbW91bnQgb2YgSFRUUCByZWRpcmVjdGlvbnMgdG8gZm9sbG93LiBVc2UgdGhpcyBvcHRpb24KICogYWxvbmdzaWRlIENVUkxPUFRfRk9MTE9XTE9DQVRJT04uCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfUE9SVAogKgogKiBBbiBhbHRlcm5hdGl2ZSBwb3J0IG51bWJlciB0byBjb25uZWN0IHRvLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX1BPU1RSRURJUgogKgogKiBBIGJpdG1hc2sgb2YgMSAoMzAxIE1vdmVkIFBlcm1hbmVudGx5KSwgMiAoMzAyIEZvdW5kKQogKiBhbmQgNCAoMzAzIFNlZSBPdGhlcikgaWYgdGhlIEhUVFAgUE9TVCBtZXRob2Qgc2hvdWxkIGJlIG1haW50YWluZWQKICogd2hlbiBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OIGlzIHNldCBhbmQgYQogKiBzcGVjaWZpYyB0eXBlIG9mIHJlZGlyZWN0IG9jY3Vycy4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjE5LjEuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNS4zLjIuCiAqCiAqCiAqCiAqIENVUkxPUFRfUFJPVE9DT0xTCiAqCiAqCiAqIEJpdG1hc2sgb2YgQ1VSTFBST1RPXyogdmFsdWVzLiBJZiB1c2VkLCB0aGlzIGJpdG1hc2sKICogbGltaXRzIHdoYXQgcHJvdG9jb2xzIGxpYmN1cmwgbWF5IHVzZSBpbiB0aGUgdHJhbnNmZXIuIFRoaXMgYWxsb3dzIHlvdSB0byBoYXZlCiAqIGEgbGliY3VybCBidWlsdCB0byBzdXBwb3J0IGEgd2lkZSByYW5nZSBvZiBwcm90b2NvbHMgYnV0IHN0aWxsIGxpbWl0IHNwZWNpZmljCiAqIHRyYW5zZmVycyB0byBvbmx5IGJlIGFsbG93ZWQgdG8gdXNlIGEgc3Vic2V0IG9mIHRoZW0uIEJ5IGRlZmF1bHQgbGliY3VybCB3aWxsCiAqIGFjY2VwdCBhbGwgcHJvdG9jb2xzIGl0IHN1cHBvcnRzLgogKiBTZWUgYWxzbyBDVVJMT1BUX1JFRElSX1BST1RPQ09MUy4KICoKICoKICogVmFsaWQgcHJvdG9jb2wgb3B0aW9ucyBhcmU6CiAqIENVUkxQUk9UT19IVFRQLAogKiBDVVJMUFJPVE9fSFRUUFMsCiAqIENVUkxQUk9UT19GVFAsCiAqIENVUkxQUk9UT19GVFBTLAogKiBDVVJMUFJPVE9fU0NQLAogKiBDVVJMUFJPVE9fU0ZUUCwKICogQ1VSTFBST1RPX1RFTE5FVCwKICogQ1VSTFBST1RPX0xEQVAsCiAqIENVUkxQUk9UT19MREFQUywKICogQ1VSTFBST1RPX0RJQ1QsCiAqIENVUkxQUk9UT19GSUxFLAogKiBDVVJMUFJPVE9fVEZUUCwKICogQ1VSTFBST1RPX0FMTAogKgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMTkuNC4KICoKICoKICoKICogQ1VSTE9QVF9QUk9YWUFVVEgKICoKICogVGhlIEhUVFAgYXV0aGVudGljYXRpb24gbWV0aG9kKHMpIHRvIHVzZSBmb3IgdGhlIHByb3h5IGNvbm5lY3Rpb24uCiAqIFVzZSB0aGUgc2FtZSBiaXRtYXNrcyBhcyBkZXNjcmliZWQgaW4KICogQ1VSTE9QVF9IVFRQQVVUSC4gRm9yIHByb3h5IGF1dGhlbnRpY2F0aW9uLAogKiBvbmx5IENVUkxBVVRIX0JBU0lDIGFuZAogKiBDVVJMQVVUSF9OVExNIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMTAuNy4KICoKICoKICoKICogQ1VSTE9QVF9QUk9YWVBPUlQKICoKICogVGhlIHBvcnQgbnVtYmVyIG9mIHRoZSBwcm94eSB0byBjb25uZWN0IHRvLiBUaGlzIHBvcnQgbnVtYmVyIGNhbgogKiBhbHNvIGJlIHNldCBpbiBDVVJMT1BUX1BST1hZLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX1BST1hZVFlQRQogKgogKiBFaXRoZXIgQ1VSTFBST1hZX0hUVFAgKGRlZmF1bHQpLAogKiBDVVJMUFJPWFlfU09DS1M0LAogKiBDVVJMUFJPWFlfU09DS1M1LAogKiBDVVJMUFJPWFlfU09DS1M0QSBvcgogKiBDVVJMUFJPWFlfU09DS1M1X0hPU1ROQU1FLgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMTAuCiAqCiAqCiAqCiAqIENVUkxPUFRfUkVESVJfUFJPVE9DT0xTCiAqCiAqIEJpdG1hc2sgb2YgQ1VSTFBST1RPXyogdmFsdWVzLiBJZiB1c2VkLCB0aGlzIGJpdG1hc2sKICogbGltaXRzIHdoYXQgcHJvdG9jb2xzIGxpYmN1cmwgbWF5IHVzZSBpbiBhIHRyYW5zZmVyIHRoYXQgaXQgZm9sbG93cyB0byBpbgogKiBhIHJlZGlyZWN0IHdoZW4gQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiBpcyBlbmFibGVkLgogKiBUaGlzIGFsbG93cyB5b3UgdG8gbGltaXQgc3BlY2lmaWMgdHJhbnNmZXJzIHRvIG9ubHkgYmUgYWxsb3dlZCB0byB1c2UgYSBzdWJzZXQKICogb2YgcHJvdG9jb2xzIGluIHJlZGlyZWN0aW9ucy4gQnkgZGVmYXVsdCBsaWJjdXJsIHdpbGwgYWxsb3cgYWxsIHByb3RvY29scwogKiBleGNlcHQgZm9yIEZJTEUgYW5kIFNDUC4gVGhpcyBpcyBhIGRpZmZlcmVuY2UgY29tcGFyZWQgdG8gcHJlLTcuMTkuNCB2ZXJzaW9ucwogKiB3aGljaCB1bmNvbmRpdGlvbmFsbHkgd291bGQgZm9sbG93IHRvIGFsbCBwcm90b2NvbHMgc3VwcG9ydGVkLgogKiBTZWUgYWxzbyBDVVJMT1BUX1BST1RPQ09MUyBmb3IgcHJvdG9jb2wgY29uc3RhbnQgdmFsdWVzLgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMTkuNC4KICoKICoKICoKICogQ1VSTE9QVF9SRVNVTUVfRlJPTQogKgogKiBUaGUgb2Zmc2V0LCBpbiBieXRlcywgdG8gcmVzdW1lIGEgdHJhbnNmZXIgZnJvbS4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9TT0NLUzVfQVVUSAogKgogKgogKiBUaGUgU09DS1M1IGF1dGhlbnRpY2F0aW9uIG1ldGhvZChzKSB0byB1c2UuIFRoZSBvcHRpb25zIGFyZToKICogQ1VSTEFVVEhfQkFTSUMsCiAqIENVUkxBVVRIX0dTU0FQSSwKICogQ1VSTEFVVEhfTk9ORS4KICoKICoKICogVGhlIGJpdHdpc2UgfCAob3IpIG9wZXJhdG9yIGNhbiBiZSB1c2VkIHRvIGNvbWJpbmUKICogbW9yZSB0aGFuIG9uZSBtZXRob2QuIElmIHRoaXMgaXMgZG9uZSwgY1VSTCB3aWxsIHBvbGwgdGhlIHNlcnZlciB0byBzZWUKICogd2hhdCBtZXRob2RzIGl0IHN1cHBvcnRzIGFuZCBwaWNrIHRoZSBiZXN0IG9uZS4KICoKICoKICogQ1VSTEFVVEhfQkFTSUMgYWxsb3dzIHVzZXJuYW1lL3Bhc3N3b3JkIGF1dGhlbnRpY2F0aW9uLgogKgogKgogKiBDVVJMQVVUSF9HU1NBUEkgYWxsb3dzIEdTUy1BUEkgYXV0aGVudGljYXRpb24uCiAqCiAqCiAqIENVUkxBVVRIX05PTkUgYWxsb3dzIG5vIGF1dGhlbnRpY2F0aW9uLgogKgogKgogKiBEZWZhdWx0cyB0byBDVVJMQVVUSF9CQVNJQ3xDVVJMQVVUSF9HU1NBUEkuCiAqIFNldCB0aGUgYWN0dWFsIHVzZXJuYW1lIGFuZCBwYXNzd29yZCB3aXRoIHRoZSBDVVJMT1BUX1BST1hZVVNFUlBXRCBvcHRpb24uCiAqCiAqCiAqCiAqIEF2YWlsYWJsZSBhcyBvZiA3LjMuMCBhbmQgY3VybCAmZ3Q7PSA3LjU1LjAuCiAqCiAqCiAqCiAqIENVUkxPUFRfU1NMX09QVElPTlMKICoKICogU2V0IFNTTCBiZWhhdmlvciBvcHRpb25zLCB3aGljaCBpcyBhIGJpdG1hc2sgb2YgYW55IG9mIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzOgogKgogKiBDVVJMU1NMT1BUX0FMTE9XX0JFQVNUOiBkbyBub3QgYXR0ZW1wdCB0byB1c2UKICogYW55IHdvcmthcm91bmRzIGZvciBhIHNlY3VyaXR5IGZsYXcgaW4gdGhlIFNTTDMgYW5kIFRMUzEuMCBwcm90b2NvbHMuCiAqCiAqCiAqIENVUkxTU0xPUFRfTk9fUkVWT0tFOiBkaXNhYmxlIGNlcnRpZmljYXRlCiAqIHJldm9jYXRpb24gY2hlY2tzIGZvciB0aG9zZSBTU0wgYmFja2VuZHMgd2hlcmUgc3VjaCBiZWhhdmlvciBpcwogKiBwcmVzZW50LgogKgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMjUuMC4gQXZhaWxhYmxlIHNpbmNlIFBIUCA3LjAuNy4KICoKICoKICoKICogQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVAogKgogKiAxIHRvIGNoZWNrIHRoZSBleGlzdGVuY2Ugb2YgYSBjb21tb24gbmFtZSBpbiB0aGUKICogU1NMIHBlZXIgY2VydGlmaWNhdGUuIDIgdG8gY2hlY2sgdGhlIGV4aXN0ZW5jZSBvZgogKiBhIGNvbW1vbiBuYW1lIGFuZCBhbHNvIHZlcmlmeSB0aGF0IGl0IG1hdGNoZXMgdGhlIGhvc3RuYW1lCiAqIHByb3ZpZGVkLiAwIHRvIG5vdCBjaGVjayB0aGUgbmFtZXMuIEluIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHRoZSB2YWx1ZSBvZiB0aGlzIG9wdGlvbgogKiBzaG91bGQgYmUga2VwdCBhdCAyIChkZWZhdWx0IHZhbHVlKS4KICoKICoKICogU3VwcG9ydCBmb3IgdmFsdWUgMSByZW1vdmVkIGluIGNVUkwgNy4yOC4xLgogKgogKgogKgogKiBDVVJMT1BUX1NTTFZFUlNJT04KICoKICogT25lIG9mIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUICgwKSwKICogQ1VSTF9TU0xWRVJTSU9OX1RMU3YxICgxKSwKICogQ1VSTF9TU0xWRVJTSU9OX1NTTHYyICgyKSwKICogQ1VSTF9TU0xWRVJTSU9OX1NTTHYzICgzKSwKICogQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzAgKDQpLAogKiBDVVJMX1NTTFZFUlNJT05fVExTdjFfMSAoNSkgb3IKICogQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzIgKDYpLgogKiBUaGUgbWF4aW11bSBUTFMgdmVyc2lvbiBjYW4gYmUgc2V0IGJ5IHVzaW5nIG9uZSBvZiB0aGUgQ1VSTF9TU0xWRVJTSU9OX01BWF8qCiAqIGNvbnN0YW50cy4gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBPUiBvbmUgb2YgdGhlIENVUkxfU1NMVkVSU0lPTl8qCiAqIGNvbnN0YW50cyB3aXRoIG9uZSBvZiB0aGUgQ1VSTF9TU0xWRVJTSU9OX01BWF8qIGNvbnN0YW50cy4KICogQ1VSTF9TU0xWRVJTSU9OX01BWF9ERUZBVUxUICh0aGUgbWF4aW11bSB2ZXJzaW9uIHN1cHBvcnRlZCBieSB0aGUgbGlicmFyeSksCiAqIENVUkxfU1NMVkVSU0lPTl9NQVhfVExTdjFfMCwKICogQ1VSTF9TU0xWRVJTSU9OX01BWF9UTFN2MV8xLAogKiBDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzIsIG9yCiAqIENVUkxfU1NMVkVSU0lPTl9NQVhfVExTdjFfMy4KICoKICoKICogWW91ciBiZXN0IGJldCBpcyB0byBub3Qgc2V0IHRoaXMgYW5kIGxldCBpdCB1c2UgdGhlIGRlZmF1bHQuCiAqIFNldHRpbmcgaXQgdG8gMiBvciAzIGlzIHZlcnkgZGFuZ2Vyb3VzIGdpdmVuIHRoZSBrbm93bgogKiB2dWxuZXJhYmlsaXRpZXMgaW4gU1NMdjIgYW5kIFNTTHYzLgogKgogKgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX1BST1hZX1NTTF9PUFRJT05TCiAqCiAqIFNldCBwcm94eSBTU0wgYmVoYXZpb3Igb3B0aW9ucywgd2hpY2ggaXMgYSBiaXRtYXNrIG9mIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbnN0YW50czoKICoKICogQ1VSTFNTTE9QVF9BTExPV19CRUFTVDogZG8gbm90IGF0dGVtcHQgdG8gdXNlCiAqIGFueSB3b3JrYXJvdW5kcyBmb3IgYSBzZWN1cml0eSBmbGF3IGluIHRoZSBTU0wzIGFuZCBUTFMxLjAgcHJvdG9jb2xzLgogKgogKgogKiBDVVJMU1NMT1BUX05PX1JFVk9LRTogZGlzYWJsZSBjZXJ0aWZpY2F0ZQogKiByZXZvY2F0aW9uIGNoZWNrcyBmb3IgdGhvc2UgU1NMIGJhY2tlbmRzIHdoZXJlIHN1Y2ggYmVoYXZpb3IgaXMKICogcHJlc2VudC4gKGN1cmwgJmd0Oz0gNy40NC4wKQogKgogKgogKiBDVVJMU1NMT1BUX05PX1BBUlRJQUxDSEFJTjogZG8gbm90IGFjY2VwdCAicGFydGlhbCIKICogY2VydGlmaWNhdGUgY2hhaW5zLCB3aGljaCBpdCBvdGhlcndpc2UgZG9lcyBieSBkZWZhdWx0LiAoY3VybCAmZ3Q7PSA3LjY4LjApCiAqCiAqCiAqCiAqIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4zLjAgYW5kIGxpYmN1cmwgJmd0Oz0gY1VSTCA3LjUyLjAuCiAqCiAqCiAqCiAqIENVUkxPUFRfUFJPWFlfU1NMX1ZFUklGWUhPU1QKICoKICogU2V0IHRvIDIgdG8gdmVyaWZ5IGluIHRoZSBIVFRQUyBwcm94eSdzIGNlcnRpZmljYXRlIG5hbWUgZmllbGRzIGFnYWluc3QgdGhlIHByb3h5IG5hbWUuCiAqIFdoZW4gc2V0IHRvIDAgdGhlIGNvbm5lY3Rpb24gc3VjY2VlZHMgcmVnYXJkbGVzcyBvZiB0aGUgbmFtZXMgdXNlZCBpbiB0aGUgY2VydGlmaWNhdGUuCiAqIFVzZSB0aGF0IGFiaWxpdHkgd2l0aCBjYXV0aW9uIQogKiAxIHRyZWF0ZWQgYXMgYSBkZWJ1ZyBvcHRpb24gaW4gY3VybCA3LjI4LjAgYW5kIGVhcmxpZXIuCiAqIEZyb20gY3VybCA3LjI4LjEgdG8gNy42NS4zIENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVCBpcyByZXR1cm5lZC4KICogRnJvbSBjdXJsIDcuNjYuMCBvbndhcmRzIDEgYW5kIDIgaXMgdHJlYXRlZCBhcyB0aGUgc2FtZSB2YWx1ZS4KICogSW4gcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMgdGhlIHZhbHVlIG9mIHRoaXMgb3B0aW9uIHNob3VsZCBiZSBrZXB0IGF0IDIgKGRlZmF1bHQgdmFsdWUpLgogKgogKgogKiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMy4wIGFuZCBsaWJjdXJsICZndDs9IGNVUkwgNy41Mi4wLgogKgogKgogKgogKiBDVVJMT1BUX1BST1hZX1NTTFZFUlNJT04KICoKICogT25lIG9mIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxULAogKiBDVVJMX1NTTFZFUlNJT05fVExTdjEsCiAqIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8wLAogKiBDVVJMX1NTTFZFUlNJT05fVExTdjFfMSwKICogQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzIsCiAqIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8zLAogKiBDVVJMX1NTTFZFUlNJT05fTUFYX0RFRkFVTFQsCiAqIENVUkxfU1NMVkVSU0lPTl9NQVhfVExTdjFfMCwKICogQ1VSTF9TU0xWRVJTSU9OX01BWF9UTFN2MV8xLAogKiBDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzIsCiAqIENVUkxfU1NMVkVSU0lPTl9NQVhfVExTdjFfMyBvcgogKiBDVVJMX1NTTFZFUlNJT05fU1NMdjMuCiAqCiAqCiAqIFlvdXIgYmVzdCBiZXQgaXMgdG8gbm90IHNldCB0aGlzIGFuZCBsZXQgaXQgdXNlIHRoZSBkZWZhdWx0IENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUCiAqIHdoaWNoIHdpbGwgYXR0ZW1wdCB0byBmaWd1cmUgb3V0IHRoZSByZW1vdGUgU1NMIHByb3RvY29sIHZlcnNpb24uCiAqCiAqCiAqCiAqCiAqIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4zLjAgYW5kIGxpYmN1cmwgJmd0Oz0gY1VSTCA3LjUyLjAuCiAqCiAqCiAqCiAqIENVUkxPUFRfU1RSRUFNX1dFSUdIVAogKgogKiBTZXQgdGhlIG51bWVyaWNhbCBzdHJlYW0gd2VpZ2h0IChhIG51bWJlciBiZXR3ZWVuIDEgYW5kIDI1NikuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy40Ni4wLiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMC43LgogKgogKgogKgogKiBDVVJMT1BUX1RDUF9LRUVQQUxJVkUKICoKICogSWYgc2V0IHRvIDEsIFRDUCBrZWVwYWxpdmUgcHJvYmVzIHdpbGwgYmUgc2VudC4gVGhlIGRlbGF5IGFuZAogKiBmcmVxdWVuY3kgb2YgdGhlc2UgcHJvYmVzIGNhbiBiZSBjb250cm9sbGVkIGJ5IHRoZSBDVVJMT1BUX1RDUF9LRUVQSURMRQogKiBhbmQgQ1VSTE9QVF9UQ1BfS0VFUElOVFZMIG9wdGlvbnMsIHByb3ZpZGVkIHRoZSBvcGVyYXRpbmcgc3lzdGVtCiAqIHN1cHBvcnRzIHRoZW0uIElmIHNldCB0byAwIChkZWZhdWx0KSBrZWVwYWxpdmUgcHJvYmVzIGFyZSBkaXNhYmxlZC4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjI1LjAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNS41LjAuCiAqCiAqCiAqCiAqIENVUkxPUFRfVENQX0tFRVBJRExFCiAqCiAqIFNldHMgdGhlIGRlbGF5LCBpbiBzZWNvbmRzLCB0aGF0IHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpbGwgd2FpdCB3aGlsZSB0aGUgY29ubmVjdGlvbiBpcwogKiBpZGxlIGJlZm9yZSBzZW5kaW5nIGtlZXBhbGl2ZSBwcm9iZXMsIGlmIENVUkxPUFRfVENQX0tFRVBBTElWRSBpcwogKiBlbmFibGVkLiBOb3QgYWxsIG9wZXJhdGluZyBzeXN0ZW1zIHN1cHBvcnQgdGhpcyBvcHRpb24uCiAqIFRoZSBkZWZhdWx0IGlzIDYwLgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMjUuMC4gQXZhaWxhYmxlIHNpbmNlIFBIUCA1LjUuMC4KICoKICoKICoKICogQ1VSTE9QVF9UQ1BfS0VFUElOVFZMCiAqCiAqIFNldHMgdGhlIGludGVydmFsLCBpbiBzZWNvbmRzLCB0aGF0IHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpbGwgd2FpdCBiZXR3ZWVuIHNlbmRpbmcKICoga2VlcGFsaXZlIHByb2JlcywgaWYgQ1VSTE9QVF9UQ1BfS0VFUEFMSVZFIGlzIGVuYWJsZWQuCiAqIE5vdCBhbGwgb3BlcmF0aW5nIHN5c3RlbXMgc3VwcG9ydCB0aGlzIG9wdGlvbi4KICogVGhlIGRlZmF1bHQgaXMgNjAuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4yNS4wLiBBdmFpbGFibGUgc2luY2UgUEhQIDUuNS4wLgogKgogKgogKgogKiBDVVJMT1BUX1RJTUVDT05ESVRJT04KICoKICogSG93IENVUkxPUFRfVElNRVZBTFVFIGlzIHRyZWF0ZWQuCiAqIFVzZSBDVVJMX1RJTUVDT05EX0lGTU9EU0lOQ0UgdG8gcmV0dXJuIHRoZQogKiBwYWdlIG9ubHkgaWYgaXQgaGFzIGJlZW4gbW9kaWZpZWQgc2luY2UgdGhlIHRpbWUgc3BlY2lmaWVkIGluCiAqIENVUkxPUFRfVElNRVZBTFVFLiBJZiBpdCBoYXNuJ3QgYmVlbiBtb2RpZmllZCwKICogYSAiMzA0IE5vdCBNb2RpZmllZCIgaGVhZGVyIHdpbGwgYmUgcmV0dXJuZWQKICogYXNzdW1pbmcgQ1VSTE9QVF9IRUFERVIgaXMgVFJVRS4KICogVXNlIENVUkxfVElNRUNPTkRfSUZVTk1PRFNJTkNFIGZvciB0aGUgcmV2ZXJzZQogKiBlZmZlY3QuIENVUkxfVElNRUNPTkRfSUZNT0RTSU5DRSBpcyB0aGUKICogZGVmYXVsdC4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9USU1FT1VUCiAqCiAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzZWNvbmRzIHRvIGFsbG93IGNVUkwgZnVuY3Rpb25zIHRvIGV4ZWN1dGUuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfVElNRU9VVF9NUwogKgogKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGFsbG93IGNVUkwgZnVuY3Rpb25zIHRvCiAqIGV4ZWN1dGUuCiAqCiAqIElmIGxpYmN1cmwgaXMgYnVpbHQgdG8gdXNlIHRoZSBzdGFuZGFyZCBzeXN0ZW0gbmFtZSByZXNvbHZlciwgdGhhdAogKiBwb3J0aW9uIG9mIHRoZSBjb25uZWN0IHdpbGwgc3RpbGwgdXNlIGZ1bGwtc2Vjb25kIHJlc29sdXRpb24gZm9yCiAqIHRpbWVvdXRzIHdpdGggYSBtaW5pbXVtIHRpbWVvdXQgYWxsb3dlZCBvZiBvbmUgc2Vjb25kLgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMTYuMi4gQXZhaWxhYmxlIHNpbmNlIFBIUCA1LjIuMy4KICoKICoKICoKICogQ1VSTE9QVF9USU1FVkFMVUUKICoKICogVGhlIHRpbWUgaW4gc2Vjb25kcyBzaW5jZSBKYW51YXJ5IDFzdCwgMTk3MC4gVGhlIHRpbWUgd2lsbCBiZSB1c2VkCiAqIGJ5IENVUkxPUFRfVElNRUNPTkRJVElPTi4gQnkgZGVmYXVsdCwKICogQ1VSTF9USU1FQ09ORF9JRk1PRFNJTkNFIGlzIHVzZWQuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfVElNRVZBTFVFX0xBUkdFCiAqCiAqIFRoZSB0aW1lIGluIHNlY29uZHMgc2luY2UgSmFudWFyeSAxc3QsIDE5NzAuIFRoZSB0aW1lIHdpbGwgYmUgdXNlZAogKiBieSBDVVJMT1BUX1RJTUVDT05ESVRJT04uIERlZmF1bHRzIHRvIHplcm8uCiAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBvcHRpb24gYW5kIENVUkxPUFRfVElNRVZBTFVFCiAqIGlzIHRoZSB0eXBlIG9mIHRoZSBhcmd1bWVudC4gT24gc3lzdGVtcyB3aGVyZSAnbG9uZycgaXMgb25seSAzMiBiaXQgd2lkZSwKICogdGhpcyBvcHRpb24gaGFzIHRvIGJlIHVzZWQgdG8gc2V0IGRhdGVzIGJleW9uZCB0aGUgeWVhciAyMDM4LgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuNTkuMC4gQXZhaWxhYmxlIHNpbmNlIFBIUCA3LjMuMC4KICoKICoKICoKICogQ1VSTE9QVF9NQVhfUkVDVl9TUEVFRF9MQVJHRQogKgogKiBJZiBhIGRvd25sb2FkIGV4Y2VlZHMgdGhpcyBzcGVlZCAoY291bnRlZCBpbiBieXRlcyBwZXIgc2Vjb25kKSBvbgogKiBjdW11bGF0aXZlIGF2ZXJhZ2UgZHVyaW5nIHRoZSB0cmFuc2ZlciwgdGhlIHRyYW5zZmVyIHdpbGwgcGF1c2UgdG8KICoga2VlcCB0aGUgYXZlcmFnZSByYXRlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgcGFyYW1ldGVyIHZhbHVlLgogKiBEZWZhdWx0cyB0byB1bmxpbWl0ZWQgc3BlZWQuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4xNS41LiBBdmFpbGFibGUgc2luY2UgUEhQIDUuNC4wLgogKgogKgogKgogKiBDVVJMT1BUX01BWF9TRU5EX1NQRUVEX0xBUkdFCiAqCiAqIElmIGFuIHVwbG9hZCBleGNlZWRzIHRoaXMgc3BlZWQgKGNvdW50ZWQgaW4gYnl0ZXMgcGVyIHNlY29uZCkgb24KICogY3VtdWxhdGl2ZSBhdmVyYWdlIGR1cmluZyB0aGUgdHJhbnNmZXIsIHRoZSB0cmFuc2ZlciB3aWxsIHBhdXNlIHRvCiAqIGtlZXAgdGhlIGF2ZXJhZ2UgcmF0ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHBhcmFtZXRlciB2YWx1ZS4KICogRGVmYXVsdHMgdG8gdW5saW1pdGVkIHNwZWVkLgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMTUuNS4gQXZhaWxhYmxlIHNpbmNlIFBIUCA1LjQuMC4KICoKICoKICoKICogQ1VSTE9QVF9TU0hfQVVUSF9UWVBFUwogKgogKiBBIGJpdG1hc2sgY29uc2lzdGluZyBvZiBvbmUgb3IgbW9yZSBvZgogKiBDVVJMU1NIX0FVVEhfUFVCTElDS0VZLAogKiBDVVJMU1NIX0FVVEhfUEFTU1dPUkQsCiAqIENVUkxTU0hfQVVUSF9IT1NULAogKiBDVVJMU1NIX0FVVEhfS0VZQk9BUkQuIFNldCB0bwogKiBDVVJMU1NIX0FVVEhfQU5ZIHRvIGxldCBsaWJjdXJsIHBpY2sgb25lLgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMTYuMS4KICoKICoKICoKICogQ1VSTE9QVF9JUFJFU09MVkUKICoKICogQWxsb3dzIGFuIGFwcGxpY2F0aW9uIHRvIHNlbGVjdCB3aGF0IGtpbmQgb2YgSVAgYWRkcmVzc2VzIHRvIHVzZSB3aGVuCiAqIHJlc29sdmluZyBob3N0IG5hbWVzLiBUaGlzIGlzIG9ubHkgaW50ZXJlc3Rpbmcgd2hlbiB1c2luZyBob3N0IG5hbWVzIHRoYXQKICogcmVzb2x2ZSBhZGRyZXNzZXMgdXNpbmcgbW9yZSB0aGFuIG9uZSB2ZXJzaW9uIG9mIElQLCBwb3NzaWJsZSB2YWx1ZXMgYXJlCiAqIENVUkxfSVBSRVNPTFZFX1dIQVRFVkVSLAogKiBDVVJMX0lQUkVTT0xWRV9WNCwKICogQ1VSTF9JUFJFU09MVkVfVjYsIGJ5IGRlZmF1bHQKICogQ1VSTF9JUFJFU09MVkVfV0hBVEVWRVIuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4xMC44LgogKgogKgogKgogKiBDVVJMT1BUX0ZUUF9GSUxFTUVUSE9ECiAqCiAqIFRlbGwgY3VybCB3aGljaCBtZXRob2QgdG8gdXNlIHRvIHJlYWNoIGEgZmlsZSBvbiBhIEZUUChTKSBzZXJ2ZXIuIFBvc3NpYmxlIHZhbHVlcyBhcmUKICogQ1VSTEZUUE1FVEhPRF9NVUxUSUNXRCwKICogQ1VSTEZUUE1FVEhPRF9OT0NXRCBhbmQKICogQ1VSTEZUUE1FVEhPRF9TSU5HTEVDV0QuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4xNS4xLiBBdmFpbGFibGUgc2luY2UgUEhQIDUuMy4wLgogKgogKgogKgogKgogKgogKgogKiBUaGlzIG9wdGlvbiBpcyBkZXByZWNhdGVkLCBhcyBpdCB3YXMgbmV2ZXIgaW1wbGVtZW50ZWQgaW4gY1VSTCBhbmQKICogbmV2ZXIgaGFkIGFueSBlZmZlY3QuCiAqCiAqIFRoZSBIVFRQIGF1dGhlbnRpY2F0aW9uIG1ldGhvZChzKSB0byB1c2UuIFRoZSBvcHRpb25zIGFyZToKICogQ1VSTEFVVEhfQkFTSUMsCiAqIENVUkxBVVRIX0RJR0VTVCwKICogQ1VSTEFVVEhfR1NTTkVHT1RJQVRFLAogKiBDVVJMQVVUSF9OVExNLAogKiBDVVJMQVVUSF9BTlksIGFuZAogKiBDVVJMQVVUSF9BTllTQUZFLgogKgogKiBUaGUgYml0d2lzZSB8IChvcikgb3BlcmF0b3IgY2FuIGJlIHVzZWQgdG8gY29tYmluZQogKiBtb3JlIHRoYW4gb25lIG1ldGhvZC4gSWYgdGhpcyBpcyBkb25lLCBjVVJMIHdpbGwgcG9sbCB0aGUgc2VydmVyIHRvIHNlZQogKiB3aGF0IG1ldGhvZHMgaXQgc3VwcG9ydHMgYW5kIHBpY2sgdGhlIGJlc3Qgb25lLgogKgogKiBDVVJMQVVUSF9BTlkgaXMgYW4gYWxpYXMgZm9yCiAqIENVUkxBVVRIX0JBU0lDIHwgQ1VSTEFVVEhfRElHRVNUIHwgQ1VSTEFVVEhfR1NTTkVHT1RJQVRFIHwgQ1VSTEFVVEhfTlRMTS4KICoKICogQ1VSTEFVVEhfQU5ZU0FGRSBpcyBhbiBhbGlhcyBmb3IKICogQ1VSTEFVVEhfRElHRVNUIHwgQ1VSTEFVVEhfR1NTTkVHT1RJQVRFIHwgQ1VSTEFVVEhfTlRMTS4KICoKICogQml0bWFzayBvZiBDVVJMUFJPVE9fKiB2YWx1ZXMuIElmIHVzZWQsIHRoaXMgYml0bWFzawogKiBsaW1pdHMgd2hhdCBwcm90b2NvbHMgbGliY3VybCBtYXkgdXNlIGluIHRoZSB0cmFuc2Zlci4gVGhpcyBhbGxvd3MgeW91IHRvIGhhdmUKICogYSBsaWJjdXJsIGJ1aWx0IHRvIHN1cHBvcnQgYSB3aWRlIHJhbmdlIG9mIHByb3RvY29scyBidXQgc3RpbGwgbGltaXQgc3BlY2lmaWMKICogdHJhbnNmZXJzIHRvIG9ubHkgYmUgYWxsb3dlZCB0byB1c2UgYSBzdWJzZXQgb2YgdGhlbS4gQnkgZGVmYXVsdCBsaWJjdXJsIHdpbGwKICogYWNjZXB0IGFsbCBwcm90b2NvbHMgaXQgc3VwcG9ydHMuCiAqIFNlZSBhbHNvIENVUkxPUFRfUkVESVJfUFJPVE9DT0xTLgogKgogKiBWYWxpZCBwcm90b2NvbCBvcHRpb25zIGFyZToKICogQ1VSTFBST1RPX0hUVFAsCiAqIENVUkxQUk9UT19IVFRQUywKICogQ1VSTFBST1RPX0ZUUCwKICogQ1VSTFBST1RPX0ZUUFMsCiAqIENVUkxQUk9UT19TQ1AsCiAqIENVUkxQUk9UT19TRlRQLAogKiBDVVJMUFJPVE9fVEVMTkVULAogKiBDVVJMUFJPVE9fTERBUCwKICogQ1VSTFBST1RPX0xEQVBTLAogKiBDVVJMUFJPVE9fRElDVCwKICogQ1VSTFBST1RPX0ZJTEUsCiAqIENVUkxQUk9UT19URlRQLAogKiBDVVJMUFJPVE9fQUxMCiAqCiAqIFRoZSBTT0NLUzUgYXV0aGVudGljYXRpb24gbWV0aG9kKHMpIHRvIHVzZS4gVGhlIG9wdGlvbnMgYXJlOgogKiBDVVJMQVVUSF9CQVNJQywKICogQ1VSTEFVVEhfR1NTQVBJLAogKiBDVVJMQVVUSF9OT05FLgogKgogKiBUaGUgYml0d2lzZSB8IChvcikgb3BlcmF0b3IgY2FuIGJlIHVzZWQgdG8gY29tYmluZQogKiBtb3JlIHRoYW4gb25lIG1ldGhvZC4gSWYgdGhpcyBpcyBkb25lLCBjVVJMIHdpbGwgcG9sbCB0aGUgc2VydmVyIHRvIHNlZQogKiB3aGF0IG1ldGhvZHMgaXQgc3VwcG9ydHMgYW5kIHBpY2sgdGhlIGJlc3Qgb25lLgogKgogKiBDVVJMQVVUSF9CQVNJQyBhbGxvd3MgdXNlcm5hbWUvcGFzc3dvcmQgYXV0aGVudGljYXRpb24uCiAqCiAqIENVUkxBVVRIX0dTU0FQSSBhbGxvd3MgR1NTLUFQSSBhdXRoZW50aWNhdGlvbi4KICoKICogQ1VSTEFVVEhfTk9ORSBhbGxvd3Mgbm8gYXV0aGVudGljYXRpb24uCiAqCiAqIERlZmF1bHRzIHRvIENVUkxBVVRIX0JBU0lDfENVUkxBVVRIX0dTU0FQSS4KICogU2V0IHRoZSBhY3R1YWwgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIHdpdGggdGhlIENVUkxPUFRfUFJPWFlVU0VSUFdEIG9wdGlvbi4KICoKICogWW91ciBiZXN0IGJldCBpcyB0byBub3Qgc2V0IHRoaXMgYW5kIGxldCBpdCB1c2UgdGhlIGRlZmF1bHQuCiAqIFNldHRpbmcgaXQgdG8gMiBvciAzIGlzIHZlcnkgZGFuZ2Vyb3VzIGdpdmVuIHRoZSBrbm93bgogKiB2dWxuZXJhYmlsaXRpZXMgaW4gU1NMdjIgYW5kIFNTTHYzLgogKgogKiBZb3VyIGJlc3QgYmV0IGlzIHRvIG5vdCBzZXQgdGhpcyBhbmQgbGV0IGl0IHVzZSB0aGUgZGVmYXVsdCBDVVJMX1NTTFZFUlNJT05fREVGQVVMVAogKiB3aGljaCB3aWxsIGF0dGVtcHQgdG8gZmlndXJlIG91dCB0aGUgcmVtb3RlIFNTTCBwcm90b2NvbCB2ZXJzaW9uLgogKgogKiB2YWx1ZSBzaG91bGQgYmUgYSBzdHJpbmcgZm9yIHRoZQogKiBmb2xsb3dpbmcgdmFsdWVzIG9mIHRoZSBvcHRpb24gcGFyYW1ldGVyOgogKgogKgogKgogKgogKiBPcHRpb24KICogU2V0IHZhbHVlIHRvCiAqIE5vdGVzCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfQUJTVFJBQ1RfVU5JWF9TT0NLRVQKICoKICogRW5hYmxlcyB0aGUgdXNlIG9mIGFuIGFic3RyYWN0IFVuaXggZG9tYWluIHNvY2tldCBpbnN0ZWFkIG9mCiAqIGVzdGFibGlzaGluZyBhIFRDUCBjb25uZWN0aW9uIHRvIGEgaG9zdCBhbmQgc2V0cyB0aGUgcGF0aCB0bwogKiB0aGUgZ2l2ZW4gc3RyaW5nLiBUaGlzIG9wdGlvbiBzaGFyZXMgdGhlIHNhbWUgc2VtYW50aWNzCiAqIGFzIENVUkxPUFRfVU5JWF9TT0NLRVRfUEFUSC4gVGhlc2UgdHdvIG9wdGlvbnMKICogc2hhcmUgdGhlIHNhbWUgc3RvcmFnZSBhbmQgdGhlcmVmb3JlIG9ubHkgb25lIG9mIHRoZW0gY2FuIGJlIHNldAogKiBwZXIgaGFuZGxlLgogKgogKgogKiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMy4wIGFuZCBjVVJMIDcuNTMuMAogKgogKgogKgogKiBDVVJMT1BUX0NBSU5GTwogKgogKiBUaGUgbmFtZSBvZiBhIGZpbGUgaG9sZGluZyBvbmUgb3IgbW9yZSBjZXJ0aWZpY2F0ZXMgdG8gdmVyaWZ5IHRoZQogKiBwZWVyIHdpdGguIFRoaXMgb25seSBtYWtlcyBzZW5zZSB3aGVuIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aAogKiBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLgogKgogKgogKiBNaWdodCByZXF1aXJlIGFuIGFic29sdXRlIHBhdGguCiAqCiAqCiAqCiAqIENVUkxPUFRfQ0FQQVRICiAqCiAqIEEgZGlyZWN0b3J5IHRoYXQgaG9sZHMgbXVsdGlwbGUgQ0EgY2VydGlmaWNhdGVzLiBVc2UgdGhpcyBvcHRpb24KICogYWxvbmdzaWRlIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfQ09PS0lFCiAqCiAqIFRoZSBjb250ZW50cyBvZiB0aGUgIkNvb2tpZTogIiBoZWFkZXIgdG8gYmUKICogdXNlZCBpbiB0aGUgSFRUUCByZXF1ZXN0LgogKiBOb3RlIHRoYXQgbXVsdGlwbGUgY29va2llcyBhcmUgc2VwYXJhdGVkIHdpdGggYSBzZW1pY29sb24gZm9sbG93ZWQKICogYnkgYSBzcGFjZSAoZS5nLiwgImZydWl0PWFwcGxlOyBjb2xvdXI9cmVkIikKICoKICoKICoKICoKICoKICogQ1VSTE9QVF9DT09LSUVGSUxFCiAqCiAqIFRoZSBuYW1lIG9mIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIGNvb2tpZSBkYXRhLiBUaGUgY29va2llIGZpbGUgY2FuCiAqIGJlIGluIE5ldHNjYXBlIGZvcm1hdCwgb3IganVzdCBwbGFpbiBIVFRQLXN0eWxlIGhlYWRlcnMgZHVtcGVkIGludG8KICogYSBmaWxlLgogKiBJZiB0aGUgbmFtZSBpcyBhbiBlbXB0eSBzdHJpbmcsIG5vIGNvb2tpZXMgYXJlIGxvYWRlZCwgYnV0IGNvb2tpZQogKiBoYW5kbGluZyBpcyBzdGlsbCBlbmFibGVkLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX0NPT0tJRUpBUgogKgogKiBUaGUgbmFtZSBvZiBhIGZpbGUgdG8gc2F2ZSBhbGwgaW50ZXJuYWwgY29va2llcyB0byB3aGVuIHRoZSBoYW5kbGUgaXMgY2xvc2VkLAogKiBlLmcuIGFmdGVyIGEgY2FsbCB0byBjdXJsX2Nsb3NlLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX0NPT0tJRUxJU1QKICoKICogQSBjb29raWUgc3RyaW5nIChpLmUuIGEgc2luZ2xlIGxpbmUgaW4gTmV0c2NhcGUvTW96aWxsYSBmb3JtYXQsIG9yIGEgcmVndWxhcgogKiBIVFRQLXN0eWxlIFNldC1Db29raWUgaGVhZGVyKSBhZGRzIHRoYXQgc2luZ2xlIGNvb2tpZSB0byB0aGUgaW50ZXJuYWwgY29va2llIHN0b3JlLgogKiAiQUxMIiBlcmFzZXMgYWxsIGNvb2tpZXMgaGVsZCBpbiBtZW1vcnkuCiAqICJTRVNTIiBlcmFzZXMgYWxsIHNlc3Npb24gY29va2llcyBoZWxkIGluIG1lbW9yeS4KICogIkZMVVNIIiB3cml0ZXMgYWxsIGtub3duIGNvb2tpZXMgdG8gdGhlIGZpbGUgc3BlY2lmaWVkIGJ5IENVUkxPUFRfQ09PS0lFSkFSLgogKiAiUkVMT0FEIiBsb2FkcyBhbGwgY29va2llcyBmcm9tIHRoZSBmaWxlcyBzcGVjaWZpZWQgYnkgQ1VSTE9QVF9DT09LSUVGSUxFLgogKgogKgogKiBBdmFpbGFibGUgc2luY2UgUEhQIDUuNS4wIGFuZCBjVVJMIDcuMTQuMS4KICoKICoKICoKICogQ1VSTE9QVF9DVVNUT01SRVFVRVNUCiAqCiAqIEEgY3VzdG9tIHJlcXVlc3QgbWV0aG9kIHRvIHVzZSBpbnN0ZWFkIG9mCiAqICJHRVQiIG9yICJIRUFEIiB3aGVuIGRvaW5nCiAqIGEgSFRUUCByZXF1ZXN0LiBUaGlzIGlzIHVzZWZ1bCBmb3IgZG9pbmcKICogIkRFTEVURSIgb3Igb3RoZXIsIG1vcmUgb2JzY3VyZSBIVFRQIHJlcXVlc3RzLgogKiBWYWxpZCB2YWx1ZXMgYXJlIHRoaW5ncyBsaWtlICJHRVQiLAogKiAiUE9TVCIsICJDT05ORUNUIiBhbmQgc28gb247CiAqIGkuZS4gRG8gbm90IGVudGVyIGEgd2hvbGUgSFRUUCByZXF1ZXN0IGxpbmUgaGVyZS4gRm9yIGluc3RhbmNlLAogKiBlbnRlcmluZyAiR0VUIC9pbmRleC5odG1sIEhUVFAvMS4wXHJcblxyXG4iCiAqIHdvdWxkIGJlIGluY29ycmVjdC4KICoKICoKICogRG9uJ3QgZG8gdGhpcyB3aXRob3V0IG1ha2luZyBzdXJlIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgdGhlIGN1c3RvbQogKiByZXF1ZXN0IG1ldGhvZCBmaXJzdC4KICoKICoKICoKICoKICoKICoKICoKICogQ1VSTE9QVF9ERUZBVUxUX1BST1RPQ09MCiAqCiAqIFRoZSBkZWZhdWx0IHByb3RvY29sIHRvIHVzZSBpZiB0aGUgVVJMIGlzIG1pc3NpbmcgYSBzY2hlbWUgbmFtZS4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjQ1LjAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4wLjcuCiAqCiAqCiAqCiAqIENVUkxPUFRfRE5TX0lOVEVSRkFDRQogKgogKiBTZXQgdGhlIG5hbWUgb2YgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHRoYXQgdGhlIEROUyByZXNvbHZlciBzaG91bGQgYmluZCB0by4KICogVGhpcyBtdXN0IGJlIGFuIGludGVyZmFjZSBuYW1lIChub3QgYW4gYWRkcmVzcykuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4zMy4wLiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMC43LgogKgogKgogKgogKiBDVVJMT1BUX0ROU19MT0NBTF9JUDQKICoKICogU2V0IHRoZSBsb2NhbCBJUHY0IGFkZHJlc3MgdGhhdCB0aGUgcmVzb2x2ZXIgc2hvdWxkIGJpbmQgdG8uIFRoZSBhcmd1bWVudAogKiBzaG91bGQgY29udGFpbiBhIHNpbmdsZSBudW1lcmljYWwgSVB2NCBhZGRyZXNzIGFzIGEgc3RyaW5nLgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMzMuMC4gQXZhaWxhYmxlIHNpbmNlIFBIUCA3LjAuNy4KICoKICoKICoKICogQ1VSTE9QVF9ETlNfTE9DQUxfSVA2CiAqCiAqIFNldCB0aGUgbG9jYWwgSVB2NiBhZGRyZXNzIHRoYXQgdGhlIHJlc29sdmVyIHNob3VsZCBiaW5kIHRvLiBUaGUgYXJndW1lbnQKICogc2hvdWxkIGNvbnRhaW4gYSBzaW5nbGUgbnVtZXJpY2FsIElQdjYgYWRkcmVzcyBhcyBhIHN0cmluZy4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjMzLjAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4wLjcuCiAqCiAqCiAqCiAqIENVUkxPUFRfRUdEU09DS0VUCiAqCiAqIExpa2UgQ1VSTE9QVF9SQU5ET01fRklMRSwgZXhjZXB0IGEgZmlsZW5hbWUKICogdG8gYW4gRW50cm9weSBHYXRoZXJpbmcgRGFlbW9uIHNvY2tldC4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9FTkNPRElORwogKgogKiBUaGUgY29udGVudHMgb2YgdGhlICJBY2NlcHQtRW5jb2Rpbmc6ICIgaGVhZGVyLgogKiBUaGlzIGVuYWJsZXMgZGVjb2Rpbmcgb2YgdGhlIHJlc3BvbnNlLiBTdXBwb3J0ZWQgZW5jb2RpbmdzIGFyZQogKiAiaWRlbnRpdHkiLCAiZGVmbGF0ZSIsIGFuZAogKiAiZ3ppcCIuIElmIGFuIGVtcHR5IHN0cmluZywgIiIsCiAqIGlzIHNldCwgYSBoZWFkZXIgY29udGFpbmluZyBhbGwgc3VwcG9ydGVkIGVuY29kaW5nIHR5cGVzIGlzIHNlbnQuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4xMC4KICoKICoKICoKICogQ1VSTE9QVF9GVFBQT1JUCiAqCiAqIFRoZSB2YWx1ZSB3aGljaCB3aWxsIGJlIHVzZWQgdG8gZ2V0IHRoZSBJUCBhZGRyZXNzIHRvIHVzZQogKiBmb3IgdGhlIEZUUCAiUE9SVCIgaW5zdHJ1Y3Rpb24uIFRoZSAiUE9SVCIgaW5zdHJ1Y3Rpb24gdGVsbHMKICogdGhlIHJlbW90ZSBzZXJ2ZXIgdG8gY29ubmVjdCB0byBvdXIgc3BlY2lmaWVkIElQIGFkZHJlc3MuICBUaGUKICogc3RyaW5nIG1heSBiZSBhIHBsYWluIElQIGFkZHJlc3MsIGEgaG9zdG5hbWUsIGEgbmV0d29yawogKiBpbnRlcmZhY2UgbmFtZSAodW5kZXIgVW5peCksIG9yIGp1c3QgYSBwbGFpbiAnLScgdG8gdXNlIHRoZQogKiBzeXN0ZW1zIGRlZmF1bHQgSVAgYWRkcmVzcy4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9JTlRFUkZBQ0UKICoKICogVGhlIG5hbWUgb2YgdGhlIG91dGdvaW5nIG5ldHdvcmsgaW50ZXJmYWNlIHRvIHVzZS4gVGhpcyBjYW4gYmUgYW4KICogaW50ZXJmYWNlIG5hbWUsIGFuIElQIGFkZHJlc3Mgb3IgYSBob3N0IG5hbWUuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfS0VZUEFTU1dECiAqCiAqIFRoZSBwYXNzd29yZCByZXF1aXJlZCB0byB1c2UgdGhlIENVUkxPUFRfU1NMS0VZCiAqIG9yIENVUkxPUFRfU1NIX1BSSVZBVEVfS0VZRklMRSBwcml2YXRlIGtleS4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjE2LjEuCiAqCiAqCiAqCiAqIENVUkxPUFRfS1JCNExFVkVMCiAqCiAqIFRoZSBLUkI0IChLZXJiZXJvcyA0KSBzZWN1cml0eSBsZXZlbC4gQW55IG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzCiAqIChpbiBvcmRlciBmcm9tIGxlYXN0IHRvIG1vc3QgcG93ZXJmdWwpIGFyZSB2YWxpZDoKICogImNsZWFyIiwKICogInNhZmUiLAogKiAiY29uZmlkZW50aWFsIiwKICogInByaXZhdGUiLi4KICogSWYgdGhlIHN0cmluZyBkb2VzIG5vdCBtYXRjaCBvbmUgb2YgdGhlc2UsCiAqICJwcml2YXRlIiBpcyB1c2VkLiBTZXR0aW5nIHRoaXMgb3B0aW9uIHRvIE5VTEwKICogd2lsbCBkaXNhYmxlIEtSQjQgc2VjdXJpdHkuIEN1cnJlbnRseSBLUkI0IHNlY3VyaXR5IG9ubHkgd29ya3MKICogd2l0aCBGVFAgdHJhbnNhY3Rpb25zLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX0xPR0lOX09QVElPTlMKICoKICogQ2FuIGJlIHVzZWQgdG8gc2V0IHByb3RvY29sIHNwZWNpZmljIGxvZ2luIG9wdGlvbnMsIHN1Y2ggYXMgdGhlCiAqIHByZWZlcnJlZCBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc20gdmlhICJBVVRIPU5UTE0iIG9yICJBVVRIPSoiLAogKiBhbmQgc2hvdWxkIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKICogQ1VSTE9QVF9VU0VSTkFNRSBvcHRpb24uCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4zNC4wLiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMC43LgogKgogKgogKgogKiBDVVJMT1BUX1BJTk5FRFBVQkxJQ0tFWQogKgogKiBTZXQgdGhlIHBpbm5lZCBwdWJsaWMga2V5LgogKiBUaGUgc3RyaW5nIGNhbiBiZSB0aGUgZmlsZSBuYW1lIG9mIHlvdXIgcGlubmVkIHB1YmxpYyBrZXkuIFRoZSBmaWxlCiAqIGZvcm1hdCBleHBlY3RlZCBpcyAiUEVNIiBvciAiREVSIi4gVGhlIHN0cmluZyBjYW4gYWxzbyBiZSBhbnkKICogbnVtYmVyIG9mIGJhc2U2NCBlbmNvZGVkIHNoYTI1NiBoYXNoZXMgcHJlY2VkZWQgYnkgInNoYTI1Ni8vIiBhbmQKICogc2VwYXJhdGVkIGJ5ICI7Ii4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjM5LjAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4wLjcuCiAqCiAqCiAqCiAqIENVUkxPUFRfUE9TVEZJRUxEUwogKgogKgogKiBUaGUgZnVsbCBkYXRhIHRvIHBvc3QgaW4gYSBIVFRQICJQT1NUIiBvcGVyYXRpb24uCiAqIFRvIHBvc3QgYSBmaWxlLCBwcmVwZW5kIGEgZmlsZW5hbWUgd2l0aCBAIGFuZAogKiB1c2UgdGhlIGZ1bGwgcGF0aC4gVGhlIGZpbGV0eXBlIGNhbiBiZSBleHBsaWNpdGx5IHNwZWNpZmllZCBieQogKiBmb2xsb3dpbmcgdGhlIGZpbGVuYW1lIHdpdGggdGhlIHR5cGUgaW4gdGhlIGZvcm1hdAogKiAnO3R5cGU9bWltZXR5cGUnLiBUaGlzIHBhcmFtZXRlciBjYW4gZWl0aGVyIGJlCiAqIHBhc3NlZCBhcyBhIHVybGVuY29kZWQgc3RyaW5nIGxpa2UgJ3BhcmExPXZhbDEmYW1wO3BhcmEyPXZhbDImYW1wOy4uLicKICogb3IgYXMgYW4gYXJyYXkgd2l0aCB0aGUgZmllbGQgbmFtZSBhcyBrZXkgYW5kIGZpZWxkIGRhdGEgYXMgdmFsdWUuCiAqIElmIHZhbHVlIGlzIGFuIGFycmF5LCB0aGUKICogQ29udGVudC1UeXBlIGhlYWRlciB3aWxsIGJlIHNldCB0bwogKiBtdWx0aXBhcnQvZm9ybS1kYXRhLgogKgogKgogKiBBcyBvZiBQSFAgNS4yLjAsIHZhbHVlIG11c3QgYmUgYW4gYXJyYXkgaWYKICogZmlsZXMgYXJlIHBhc3NlZCB0byB0aGlzIG9wdGlvbiB3aXRoIHRoZSBAIHByZWZpeC4KICoKICoKICogQXMgb2YgUEhQIDUuNS4wLCB0aGUgQCBwcmVmaXggaXMgZGVwcmVjYXRlZCBhbmQKICogZmlsZXMgY2FuIGJlIHNlbnQgdXNpbmcgQ1VSTEZpbGUuIFRoZQogKiBAIHByZWZpeCBjYW4gYmUgZGlzYWJsZWQgZm9yIHNhZmUgcGFzc2luZyBvZgogKiB2YWx1ZXMgYmVnaW5uaW5nIHdpdGggQCBieSBzZXR0aW5nIHRoZQogKiBDVVJMT1BUX1NBRkVfVVBMT0FEIG9wdGlvbiB0byBUUlVFLgogKgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX1BSSVZBVEUKICoKICogQW55IGRhdGEgdGhhdCBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY1VSTCBoYW5kbGUuIFRoaXMgZGF0YQogKiBjYW4gc3Vic2VxdWVudGx5IGJlIHJldHJpZXZlZCB3aXRoIHRoZQogKiBDVVJMSU5GT19QUklWQVRFIG9wdGlvbiBvZgogKiBjdXJsX2dldGluZm8uIGNVUkwgZG9lcyBub3RoaW5nIHdpdGggdGhpcyBkYXRhLgogKiBXaGVuIHVzaW5nIGEgY1VSTCBtdWx0aSBoYW5kbGUsIHRoaXMgcHJpdmF0ZSBkYXRhIGlzIHR5cGljYWxseSBhCiAqIHVuaXF1ZSBrZXkgdG8gaWRlbnRpZnkgYSBzdGFuZGFyZCBjVVJMIGhhbmRsZS4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjEwLjMuCiAqCiAqCiAqCiAqIENVUkxPUFRfUFJFX1BST1hZCiAqCiAqIFNldCBhIHN0cmluZyBob2xkaW5nIHRoZSBob3N0IG5hbWUgb3IgZG90dGVkIG51bWVyaWNhbAogKiBJUCBhZGRyZXNzIHRvIGJlIHVzZWQgYXMgdGhlIHByZXByb3h5IHRoYXQgY3VybCBjb25uZWN0cyB0byBiZWZvcmUKICogaXQgY29ubmVjdHMgdG8gdGhlIEhUVFAoUykgcHJveHkgc3BlY2lmaWVkIGluIHRoZQogKiBDVVJMT1BUX1BST1hZIG9wdGlvbiBmb3IgdGhlIHVwY29taW5nIHJlcXVlc3QuCiAqIFRoZSBwcmVwcm94eSBjYW4gb25seSBiZSBhIFNPQ0tTIHByb3h5IGFuZCBpdCBzaG91bGQgYmUgcHJlZml4ZWQgd2l0aAogKiBbc2NoZW1lXTovLyB0byBzcGVjaWZ5IHdoaWNoIGtpbmQgb2Ygc29ja3MgaXMgdXNlZC4KICogQSBudW1lcmljYWwgSVB2NiBhZGRyZXNzIG11c3QgYmUgd3JpdHRlbiB3aXRoaW4gW2JyYWNrZXRzXS4KICogU2V0dGluZyB0aGUgcHJlcHJveHkgdG8gYW4gZW1wdHkgc3RyaW5nIGV4cGxpY2l0bHkgZGlzYWJsZXMgdGhlIHVzZSBvZiBhIHByZXByb3h5LgogKiBUbyBzcGVjaWZ5IHBvcnQgbnVtYmVyIGluIHRoaXMgc3RyaW5nLCBhcHBlbmQgOltwb3J0XQogKiB0byB0aGUgZW5kIG9mIHRoZSBob3N0IG5hbWUuIFRoZSBwcm94eSdzIHBvcnQgbnVtYmVyIG1heSBvcHRpb25hbGx5IGJlCiAqIHNwZWNpZmllZCB3aXRoIHRoZSBzZXBhcmF0ZSBvcHRpb24gQ1VSTE9QVF9QUk9YWVBPUlQuCiAqIERlZmF1bHRzIHRvIHVzaW5nIHBvcnQgMTA4MCBmb3IgcHJveGllcyBpZiBhIHBvcnQgaXMgbm90IHNwZWNpZmllZC4KICoKICoKICogQXZhaWxhYmxlIHNpbmNlIFBIUCA3LjMuMCBhbmQgbGliY3VybCAmZ3Q7PSBjVVJMIDcuNTIuMC4KICoKICoKICoKICogQ1VSTE9QVF9QUk9YWQogKgogKiBUaGUgSFRUUCBwcm94eSB0byB0dW5uZWwgcmVxdWVzdHMgdGhyb3VnaC4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9QUk9YWV9TRVJWSUNFX05BTUUKICoKICogVGhlIHByb3h5IGF1dGhlbnRpY2F0aW9uIHNlcnZpY2UgbmFtZS4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjM0LjAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4wLjcuCiAqCiAqCiAqCiAqIENVUkxPUFRfUFJPWFlfQ0FJTkZPCiAqCiAqIFRoZSBwYXRoIHRvIHByb3h5IENlcnRpZmljYXRlIEF1dGhvcml0eSAoQ0EpIGJ1bmRsZS4gU2V0IHRoZSBwYXRoIGFzIGEKICogc3RyaW5nIG5hbWluZyBhIGZpbGUgaG9sZGluZyBvbmUgb3IgbW9yZSBjZXJ0aWZpY2F0ZXMgdG8KICogdmVyaWZ5IHRoZSBIVFRQUyBwcm94eSB3aXRoLgogKiBUaGlzIG9wdGlvbiBpcyBmb3IgY29ubmVjdGluZyB0byBhbiBIVFRQUyBwcm94eSwgbm90IGFuIEhUVFBTIHNlcnZlci4KICogRGVmYXVsdHMgc2V0IHRvIHRoZSBzeXN0ZW0gcGF0aCB3aGVyZSBsaWJjdXJsJ3MgY2FjZXJ0IGJ1bmRsZSBpcyBhc3N1bWVkCiAqIHRvIGJlIHN0b3JlZC4KICoKICoKICogQXZhaWxhYmxlIHNpbmNlIFBIUCA3LjMuMCBhbmQgbGliY3VybCAmZ3Q7PSBjVVJMIDcuNTIuMC4KICoKICoKICoKICogQ1VSTE9QVF9QUk9YWV9DQVBBVEgKICoKICogVGhlIGRpcmVjdG9yeSBob2xkaW5nIG11bHRpcGxlIENBIGNlcnRpZmljYXRlcyB0byB2ZXJpZnkgdGhlIEhUVFBTIHByb3h5IHdpdGguCiAqCiAqCiAqIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4zLjAgYW5kIGxpYmN1cmwgJmd0Oz0gY1VSTCA3LjUyLjAuCiAqCiAqCiAqCiAqIENVUkxPUFRfUFJPWFlfQ1JMRklMRQogKgogKiBTZXQgdGhlIGZpbGUgbmFtZSB3aXRoIHRoZSBjb25jYXRlbmF0aW9uIG9mIENSTCAoQ2VydGlmaWNhdGUgUmV2b2NhdGlvbiBMaXN0KQogKiBpbiBQRU0gZm9ybWF0IHRvIHVzZSBpbiB0aGUgY2VydGlmaWNhdGUgdmFsaWRhdGlvbiB0aGF0IG9jY3VycyBkdXJpbmcKICogdGhlIFNTTCBleGNoYW5nZS4KICoKICoKICogQXZhaWxhYmxlIHNpbmNlIFBIUCA3LjMuMCBhbmQgbGliY3VybCAmZ3Q7PSBjVVJMIDcuNTIuMC4KICoKICoKICoKICogQ1VSTE9QVF9QUk9YWV9LRVlQQVNTV0QKICoKICogU2V0IHRoZSBzdHJpbmcgYmUgdXNlZCBhcyB0aGUgcGFzc3dvcmQgcmVxdWlyZWQgdG8gdXNlIHRoZQogKiBDVVJMT1BUX1BST1hZX1NTTEtFWSBwcml2YXRlIGtleS4gWW91IG5ldmVyIG5lZWRlZCBhCiAqIHBhc3NwaHJhc2UgdG8gbG9hZCBhIGNlcnRpZmljYXRlIGJ1dCB5b3UgbmVlZCBvbmUgdG8gbG9hZCB5b3VyIHByaXZhdGUga2V5LgogKiBUaGlzIG9wdGlvbiBpcyBmb3IgY29ubmVjdGluZyB0byBhbiBIVFRQUyBwcm94eSwgbm90IGFuIEhUVFBTIHNlcnZlci4KICoKICoKICogQXZhaWxhYmxlIHNpbmNlIFBIUCA3LjMuMCBhbmQgbGliY3VybCAmZ3Q7PSBjVVJMIDcuNTIuMC4KICoKICoKICoKICogQ1VSTE9QVF9QUk9YWV9QSU5ORURQVUJMSUNLRVkKICoKICogU2V0IHRoZSBwaW5uZWQgcHVibGljIGtleSBmb3IgSFRUUFMgcHJveHkuIFRoZSBzdHJpbmcgY2FuIGJlIHRoZSBmaWxlIG5hbWUKICogb2YgeW91ciBwaW5uZWQgcHVibGljIGtleS4gVGhlIGZpbGUgZm9ybWF0IGV4cGVjdGVkIGlzICJQRU0iIG9yICJERVIiLgogKiBUaGUgc3RyaW5nIGNhbiBhbHNvIGJlIGFueSBudW1iZXIgb2YgYmFzZTY0IGVuY29kZWQgc2hhMjU2IGhhc2hlcyBwcmVjZWRlZCBieQogKiAic2hhMjU2Ly8iIGFuZCBzZXBhcmF0ZWQgYnkgIjsiCiAqCiAqCiAqIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4zLjAgYW5kIGxpYmN1cmwgJmd0Oz0gY1VSTCA3LjUyLjAuCiAqCiAqCiAqCiAqIENVUkxPUFRfUFJPWFlfU1NMQ0VSVAogKgogKiBUaGUgZmlsZSBuYW1lIG9mIHlvdXIgY2xpZW50IGNlcnRpZmljYXRlIHVzZWQgdG8gY29ubmVjdCB0byB0aGUgSFRUUFMgcHJveHkuCiAqIFRoZSBkZWZhdWx0IGZvcm1hdCBpcyAiUDEyIiBvbiBTZWN1cmUgVHJhbnNwb3J0IGFuZCAiUEVNIiBvbiBvdGhlciBlbmdpbmVzLAogKiBhbmQgY2FuIGJlIGNoYW5nZWQgd2l0aCBDVVJMT1BUX1BST1hZX1NTTENFUlRUWVBFLgogKiBXaXRoIE5TUyBvciBTZWN1cmUgVHJhbnNwb3J0LCB0aGlzIGNhbiBhbHNvIGJlIHRoZSBuaWNrbmFtZSBvZiB0aGUgY2VydGlmaWNhdGUKICogeW91IHdpc2ggdG8gYXV0aGVudGljYXRlIHdpdGggYXMgaXQgaXMgbmFtZWQgaW4gdGhlIHNlY3VyaXR5IGRhdGFiYXNlLgogKiBJZiB5b3Ugd2FudCB0byB1c2UgYSBmaWxlIGZyb20gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBwbGVhc2UgcHJlY2VkZSBpdCB3aXRoCiAqICIuLyIgcHJlZml4LCBpbiBvcmRlciB0byBhdm9pZCBjb25mdXNpb24gd2l0aCBhIG5pY2tuYW1lLgogKgogKgogKiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMy4wIGFuZCBsaWJjdXJsICZndDs9IGNVUkwgNy41Mi4wLgogKgogKgogKgogKiBDVVJMT1BUX1BST1hZX1NTTENFUlRUWVBFCiAqCiAqIFRoZSBmb3JtYXQgb2YgeW91ciBjbGllbnQgY2VydGlmaWNhdGUgdXNlZCB3aGVuIGNvbm5lY3RpbmcgdG8gYW4gSFRUUFMgcHJveHkuCiAqIFN1cHBvcnRlZCBmb3JtYXRzIGFyZSAiUEVNIiBhbmQgIkRFUiIsIGV4Y2VwdCB3aXRoIFNlY3VyZSBUcmFuc3BvcnQuCiAqIE9wZW5TU0wgKHZlcnNpb25zIDAuOS4zIGFuZCBsYXRlcikgYW5kIFNlY3VyZSBUcmFuc3BvcnQKICogKG9uIGlPUyA1IG9yIGxhdGVyLCBvciBPUyBYIDEwLjcgb3IgbGF0ZXIpIGFsc28gc3VwcG9ydCAiUDEyIiBmb3IKICogUEtDUyMxMi1lbmNvZGVkIGZpbGVzLiBEZWZhdWx0cyB0byAiUEVNIi4KICoKICoKICogQXZhaWxhYmxlIHNpbmNlIFBIUCA3LjMuMCBhbmQgbGliY3VybCAmZ3Q7PSBjVVJMIDcuNTIuMC4KICoKICoKICoKICogQ1VSTE9QVF9QUk9YWV9TU0xfQ0lQSEVSX0xJU1QKICoKICogVGhlIGxpc3Qgb2YgY2lwaGVycyB0byB1c2UgZm9yIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBIVFRQUyBwcm94eS4KICogVGhlIGxpc3QgbXVzdCBiZSBzeW50YWN0aWNhbGx5IGNvcnJlY3QsIGl0IGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlIGNpcGhlcgogKiBzdHJpbmdzIHNlcGFyYXRlZCBieSBjb2xvbnMuIENvbW1hcyBvciBzcGFjZXMgYXJlIGFsc28gYWNjZXB0YWJsZSBzZXBhcmF0b3JzCiAqIGJ1dCBjb2xvbnMgYXJlIG5vcm1hbGx5IHVzZWQsICEsIC0gYW5kICsgY2FuIGJlIHVzZWQgYXMgb3BlcmF0b3JzLgogKgogKgogKiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMy4wIGFuZCBsaWJjdXJsICZndDs9IGNVUkwgNy41Mi4wLgogKgogKgogKgogKiBDVVJMT1BUX1BST1hZX1RMUzEzX0NJUEhFUlMKICoKICogVGhlIGxpc3Qgb2YgY2lwaGVyIHN1aXRlcyB0byB1c2UgZm9yIHRoZSBUTFMgMS4zIGNvbm5lY3Rpb24gdG8gYSBwcm94eS4KICogVGhlIGxpc3QgbXVzdCBiZSBzeW50YWN0aWNhbGx5IGNvcnJlY3QsIGl0IGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlCiAqIGNpcGhlciBzdWl0ZSBzdHJpbmdzIHNlcGFyYXRlZCBieSBjb2xvbnMuIFRoaXMgb3B0aW9uIGlzIGN1cnJlbnRseSB1c2VkCiAqIG9ubHkgd2hlbiBjdXJsIGlzIGJ1aWx0IHRvIHVzZSBPcGVuU1NMIDEuMS4xIG9yIGxhdGVyLgogKiBJZiB5b3UgYXJlIHVzaW5nIGEgZGlmZmVyZW50IFNTTCBiYWNrZW5kIHlvdSBjYW4gdHJ5IHNldHRpbmcKICogVExTIDEuMyBjaXBoZXIgc3VpdGVzIGJ5IHVzaW5nIHRoZSBDVVJMT1BUX1BST1hZX1NTTF9DSVBIRVJfTElTVCBvcHRpb24uCiAqCiAqCiAqIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4zLjAgYW5kIGxpYmN1cmwgJmd0Oz0gY1VSTCA3LjYxLjAuIEF2YWlsYWJsZSB3aGVuIGJ1aWx0IHdpdGggT3BlblNTTCAmZ3Q7PSAxLjEuMS4KICoKICoKICoKICogQ1VSTE9QVF9QUk9YWV9TU0xLRVkKICoKICogVGhlIGZpbGUgbmFtZSBvZiB5b3VyIHByaXZhdGUga2V5IHVzZWQgZm9yIGNvbm5lY3RpbmcgdG8gdGhlIEhUVFBTIHByb3h5LgogKiBUaGUgZGVmYXVsdCBmb3JtYXQgaXMgIlBFTSIgYW5kIGNhbiBiZSBjaGFuZ2VkIHdpdGgKICogQ1VSTE9QVF9QUk9YWV9TU0xLRVlUWVBFLgogKiAoaU9TIGFuZCBNYWMgT1MgWCBvbmx5KSBUaGlzIG9wdGlvbiBpcyBpZ25vcmVkIGlmIGN1cmwgd2FzIGJ1aWx0IGFnYWluc3QgU2VjdXJlIFRyYW5zcG9ydC4KICoKICoKICogQXZhaWxhYmxlIHNpbmNlIFBIUCA3LjMuMCBhbmQgbGliY3VybCAmZ3Q7PSBjVVJMIDcuNTIuMC4gQXZhaWxhYmxlIGlmIGJ1aWx0IFRMUyBlbmFibGVkLgogKgogKgogKgogKiBDVVJMT1BUX1BST1hZX1NTTEtFWVRZUEUKICoKICogVGhlIGZvcm1hdCBvZiB5b3VyIHByaXZhdGUga2V5LiBTdXBwb3J0ZWQgZm9ybWF0cyBhcmUgIlBFTSIsICJERVIiIGFuZCAiRU5HIi4KICoKICoKICogQXZhaWxhYmxlIHNpbmNlIFBIUCA3LjMuMCBhbmQgbGliY3VybCAmZ3Q7PSBjVVJMIDcuNTIuMC4KICoKICoKICoKICogQ1VSTE9QVF9QUk9YWV9UTFNBVVRIX1BBU1NXT1JECiAqCiAqIFRoZSBwYXNzd29yZCB0byB1c2UgZm9yIHRoZSBUTFMgYXV0aGVudGljYXRpb24gbWV0aG9kIHNwZWNpZmllZCB3aXRoIHRoZQogKiBDVVJMT1BUX1BST1hZX1RMU0FVVEhfVFlQRSBvcHRpb24uIFJlcXVpcmVzIHRoYXQgdGhlCiAqIENVUkxPUFRfUFJPWFlfVExTQVVUSF9VU0VSTkFNRSBvcHRpb24gdG8gYWxzbyBiZSBzZXQuCiAqCiAqCiAqIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4zLjAgYW5kIGxpYmN1cmwgJmd0Oz0gY1VSTCA3LjUyLjAuCiAqCiAqCiAqCiAqIENVUkxPUFRfUFJPWFlfVExTQVVUSF9UWVBFCiAqCiAqIFRoZSBtZXRob2Qgb2YgdGhlIFRMUyBhdXRoZW50aWNhdGlvbiB1c2VkIGZvciB0aGUgSFRUUFMgY29ubmVjdGlvbi4gU3VwcG9ydGVkIG1ldGhvZCBpcyAiU1JQIi4KICoKICoKICogU2VjdXJlIFJlbW90ZSBQYXNzd29yZCAoU1JQKSBhdXRoZW50aWNhdGlvbiBmb3IgVExTIHByb3ZpZGVzIG11dHVhbCBhdXRoZW50aWNhdGlvbgogKiBpZiBib3RoIHNpZGVzIGhhdmUgYSBzaGFyZWQgc2VjcmV0LiBUbyB1c2UgVExTLVNSUCwgeW91IG11c3QgYWxzbyBzZXQgdGhlCiAqIENVUkxPUFRfUFJPWFlfVExTQVVUSF9VU0VSTkFNRSBhbmQKICogQ1VSTE9QVF9QUk9YWV9UTFNBVVRIX1BBU1NXT1JEIG9wdGlvbnMuCiAqCiAqCiAqCiAqCiAqIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4zLjAgYW5kIGxpYmN1cmwgJmd0Oz0gY1VSTCA3LjUyLjAuCiAqCiAqCiAqCiAqIENVUkxPUFRfUFJPWFlfVExTQVVUSF9VU0VSTkFNRQogKgogKiBUdXNlcm5hbWUgdG8gdXNlIGZvciB0aGUgSFRUUFMgcHJveHkgVExTIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBzcGVjaWZpZWQgd2l0aCB0aGUKICogQ1VSTE9QVF9QUk9YWV9UTFNBVVRIX1RZUEUgb3B0aW9uLiBSZXF1aXJlcyB0aGF0IHRoZQogKiBDVVJMT1BUX1BST1hZX1RMU0FVVEhfUEFTU1dPUkQgb3B0aW9uIHRvIGFsc28gYmUgc2V0LgogKgogKgogKiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMy4wIGFuZCBsaWJjdXJsICZndDs9IGNVUkwgNy41Mi4wLgogKgogKgogKgogKiBDVVJMT1BUX1BST1hZVVNFUlBXRAogKgogKiBBIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBmb3JtYXR0ZWQgYXMKICogIlt1c2VybmFtZV06W3Bhc3N3b3JkXSIgdG8gdXNlIGZvciB0aGUKICogY29ubmVjdGlvbiB0byB0aGUgcHJveHkuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfUkFORE9NX0ZJTEUKICoKICogQSBmaWxlbmFtZSB0byBiZSB1c2VkIHRvIHNlZWQgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGZvciBTU0wuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfUkFOR0UKICoKICogUmFuZ2Uocykgb2YgZGF0YSB0byByZXRyaWV2ZSBpbiB0aGUgZm9ybWF0CiAqICJYLVkiIHdoZXJlIFggb3IgWSBhcmUgb3B0aW9uYWwuIEhUVFAgdHJhbnNmZXJzCiAqIGFsc28gc3VwcG9ydCBzZXZlcmFsIGludGVydmFscywgc2VwYXJhdGVkIHdpdGggY29tbWFzIGluIHRoZSBmb3JtYXQKICogIlgtWSxOLU0iLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX1JFRkVSRVIKICoKICogVGhlIGNvbnRlbnRzIG9mIHRoZSAiUmVmZXJlcjogIiBoZWFkZXIgdG8gYmUgdXNlZAogKiBpbiBhIEhUVFAgcmVxdWVzdC4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9TRVJWSUNFX05BTUUKICoKICogVGhlIGF1dGhlbnRpY2F0aW9uIHNlcnZpY2UgbmFtZS4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjQzLjAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4wLjcuCiAqCiAqCiAqCiAqIENVUkxPUFRfU1NIX0hPU1RfUFVCTElDX0tFWV9NRDUKICoKICogQSBzdHJpbmcgY29udGFpbmluZyAzMiBoZXhhZGVjaW1hbCBkaWdpdHMuIFRoZSBzdHJpbmcgc2hvdWxkIGJlIHRoZQogKiBNRDUgY2hlY2tzdW0gb2YgdGhlIHJlbW90ZSBob3N0J3MgcHVibGljIGtleSwgYW5kIGxpYmN1cmwgd2lsbCByZWplY3QKICogdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGhvc3QgdW5sZXNzIHRoZSBtZDVzdW1zIG1hdGNoLgogKiBUaGlzIG9wdGlvbiBpcyBvbmx5IGZvciBTQ1AgYW5kIFNGVFAgdHJhbnNmZXJzLgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMTcuMS4KICoKICoKICoKICogQ1VSTE9QVF9TU0hfUFVCTElDX0tFWUZJTEUKICoKICogVGhlIGZpbGUgbmFtZSBmb3IgeW91ciBwdWJsaWMga2V5LiBJZiBub3QgdXNlZCwgbGliY3VybCBkZWZhdWx0cyB0bwogKiAkSE9NRS8uc3NoL2lkX2RzYS5wdWIgaWYgdGhlIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LAogKiBhbmQganVzdCAiaWRfZHNhLnB1YiIgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlmIEhPTUUgaXMgbm90IHNldC4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjE2LjEuCiAqCiAqCiAqCiAqIENVUkxPUFRfU1NIX1BSSVZBVEVfS0VZRklMRQogKgogKiBUaGUgZmlsZSBuYW1lIGZvciB5b3VyIHByaXZhdGUga2V5LiBJZiBub3QgdXNlZCwgbGliY3VybCBkZWZhdWx0cyB0bwogKiAkSE9NRS8uc3NoL2lkX2RzYSBpZiB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsCiAqIGFuZCBqdXN0ICJpZF9kc2EiIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpZiBIT01FIGlzIG5vdCBzZXQuCiAqIElmIHRoZSBmaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCwgc2V0IHRoZSBwYXNzd29yZCB3aXRoCiAqIENVUkxPUFRfS0VZUEFTU1dELgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMTYuMS4KICoKICoKICoKICogQ1VSTE9QVF9TU0xfQ0lQSEVSX0xJU1QKICoKICogQSBsaXN0IG9mIGNpcGhlcnMgdG8gdXNlIGZvciBTU0wuIEZvciBleGFtcGxlLAogKiBSQzQtU0hBIGFuZCBUTFN2MSBhcmUgdmFsaWQKICogY2lwaGVyIGxpc3RzLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX1NTTENFUlQKICoKICogVGhlIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBQRU0gZm9ybWF0dGVkIGNlcnRpZmljYXRlLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX1NTTENFUlRQQVNTV0QKICoKICogVGhlIHBhc3N3b3JkIHJlcXVpcmVkIHRvIHVzZSB0aGUKICogQ1VSTE9QVF9TU0xDRVJUIGNlcnRpZmljYXRlLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX1NTTENFUlRUWVBFCiAqCiAqIFRoZSBmb3JtYXQgb2YgdGhlIGNlcnRpZmljYXRlLiBTdXBwb3J0ZWQgZm9ybWF0cyBhcmUKICogIlBFTSIgKGRlZmF1bHQpLCAiREVSIiwKICogYW5kICJFTkciLgogKiBBcyBvZiBPcGVuU1NMIDAuOS4zLCAiUDEyIiAoZm9yIFBLQ1MjMTItZW5jb2RlZCBmaWxlcykKICogaXMgYWxzbyBzdXBwb3J0ZWQuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy45LjMuCiAqCiAqCiAqCiAqIENVUkxPUFRfU1NMRU5HSU5FCiAqCiAqIFRoZSBpZGVudGlmaWVyIGZvciB0aGUgY3J5cHRvIGVuZ2luZSBvZiB0aGUgcHJpdmF0ZSBTU0wga2V5CiAqIHNwZWNpZmllZCBpbiBDVVJMT1BUX1NTTEtFWS4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9TU0xFTkdJTkVfREVGQVVMVAogKgogKiBUaGUgaWRlbnRpZmllciBmb3IgdGhlIGNyeXB0byBlbmdpbmUgdXNlZCBmb3IgYXN5bW1ldHJpYyBjcnlwdG8KICogb3BlcmF0aW9ucy4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9TU0xLRVkKICoKICogVGhlIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBwcml2YXRlIFNTTCBrZXkuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfU1NMS0VZUEFTU1dECiAqCiAqIFRoZSBzZWNyZXQgcGFzc3dvcmQgbmVlZGVkIHRvIHVzZSB0aGUgcHJpdmF0ZSBTU0wga2V5IHNwZWNpZmllZCBpbgogKiBDVVJMT1BUX1NTTEtFWS4KICoKICoKICogU2luY2UgdGhpcyBvcHRpb24gY29udGFpbnMgYSBzZW5zaXRpdmUgcGFzc3dvcmQsIHJlbWVtYmVyIHRvIGtlZXAKICogdGhlIFBIUCBzY3JpcHQgaXQgaXMgY29udGFpbmVkIHdpdGhpbiBzYWZlLgogKgogKgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX1NTTEtFWVRZUEUKICoKICogVGhlIGtleSB0eXBlIG9mIHRoZSBwcml2YXRlIFNTTCBrZXkgc3BlY2lmaWVkIGluCiAqIENVUkxPUFRfU1NMS0VZLiBTdXBwb3J0ZWQga2V5IHR5cGVzIGFyZQogKiAiUEVNIiAoZGVmYXVsdCksICJERVIiLAogKiBhbmQgIkVORyIuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfVExTMTNfQ0lQSEVSUwogKgogKiBUaGUgbGlzdCBvZiBjaXBoZXIgc3VpdGVzIHRvIHVzZSBmb3IgdGhlIFRMUyAxLjMgY29ubmVjdGlvbi4gVGhlIGxpc3QgbXVzdCBiZQogKiBzeW50YWN0aWNhbGx5IGNvcnJlY3QsIGl0IGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlIGNpcGhlciBzdWl0ZSBzdHJpbmdzIHNlcGFyYXRlZCBieSBjb2xvbnMuCiAqIFRoaXMgb3B0aW9uIGlzIGN1cnJlbnRseSB1c2VkIG9ubHkgd2hlbiBjdXJsIGlzIGJ1aWx0IHRvIHVzZSBPcGVuU1NMIDEuMS4xIG9yIGxhdGVyLgogKiBJZiB5b3UgYXJlIHVzaW5nIGEgZGlmZmVyZW50IFNTTCBiYWNrZW5kIHlvdSBjYW4gdHJ5IHNldHRpbmcKICogVExTIDEuMyBjaXBoZXIgc3VpdGVzIGJ5IHVzaW5nIHRoZSBDVVJMT1BUX1NTTF9DSVBIRVJfTElTVCBvcHRpb24uCiAqCiAqCiAqIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4zLjAgYW5kIGxpYmN1cmwgJmd0Oz0gY1VSTCA3LjYxLjAuIEF2YWlsYWJsZSB3aGVuIGJ1aWx0IHdpdGggT3BlblNTTCAmZ3Q7PSAxLjEuMS4KICoKICoKICoKICogQ1VSTE9QVF9VTklYX1NPQ0tFVF9QQVRICiAqCiAqIEVuYWJsZXMgdGhlIHVzZSBvZiBVbml4IGRvbWFpbiBzb2NrZXRzIGFzIGNvbm5lY3Rpb24gZW5kcG9pbnQgYW5kCiAqIHNldHMgdGhlIHBhdGggdG8gdGhlIGdpdmVuIHN0cmluZy4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjQwLjAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4wLjcuCiAqCiAqCiAqCiAqIENVUkxPUFRfVVJMCiAqCiAqIFRoZSBVUkwgdG8gZmV0Y2guIFRoaXMgY2FuIGFsc28gYmUgc2V0IHdoZW4gaW5pdGlhbGl6aW5nIGEKICogc2Vzc2lvbiB3aXRoIGN1cmxfaW5pdC4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9VU0VSQUdFTlQKICoKICogVGhlIGNvbnRlbnRzIG9mIHRoZSAiVXNlci1BZ2VudDogIiBoZWFkZXIgdG8gYmUKICogdXNlZCBpbiBhIEhUVFAgcmVxdWVzdC4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9VU0VSTkFNRQogKgogKiBUaGUgdXNlciBuYW1lIHRvIHVzZSBpbiBhdXRoZW50aWNhdGlvbi4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjE5LjEuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNS41LjAuCiAqCiAqCiAqCiAqIENVUkxPUFRfVVNFUlBXRAogKgogKiBBIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBmb3JtYXR0ZWQgYXMKICogIlt1c2VybmFtZV06W3Bhc3N3b3JkXSIgdG8gdXNlIGZvciB0aGUKICogY29ubmVjdGlvbi4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9YT0FVVEgyX0JFQVJFUgogKgogKiBTcGVjaWZpZXMgdGhlIE9BdXRoIDIuMCBhY2Nlc3MgdG9rZW4uCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4zMy4wLiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMC43LgogKgogKgogKgogKgogKgogKgogKiBBIGN1c3RvbSByZXF1ZXN0IG1ldGhvZCB0byB1c2UgaW5zdGVhZCBvZgogKiAiR0VUIiBvciAiSEVBRCIgd2hlbiBkb2luZwogKiBhIEhUVFAgcmVxdWVzdC4gVGhpcyBpcyB1c2VmdWwgZm9yIGRvaW5nCiAqICJERUxFVEUiIG9yIG90aGVyLCBtb3JlIG9ic2N1cmUgSFRUUCByZXF1ZXN0cy4KICogVmFsaWQgdmFsdWVzIGFyZSB0aGluZ3MgbGlrZSAiR0VUIiwKICogIlBPU1QiLCAiQ09OTkVDVCIgYW5kIHNvIG9uOwogKiBpLmUuIERvIG5vdCBlbnRlciBhIHdob2xlIEhUVFAgcmVxdWVzdCBsaW5lIGhlcmUuIEZvciBpbnN0YW5jZSwKICogZW50ZXJpbmcgIkdFVCAvaW5kZXguaHRtbCBIVFRQLzEuMFxyXG5cclxuIgogKiB3b3VsZCBiZSBpbmNvcnJlY3QuCiAqCiAqCiAqIERvbid0IGRvIHRoaXMgd2l0aG91dCBtYWtpbmcgc3VyZSB0aGUgc2VydmVyIHN1cHBvcnRzIHRoZSBjdXN0b20KICogcmVxdWVzdCBtZXRob2QgZmlyc3QuCiAqCiAqCiAqCiAqIERvbid0IGRvIHRoaXMgd2l0aG91dCBtYWtpbmcgc3VyZSB0aGUgc2VydmVyIHN1cHBvcnRzIHRoZSBjdXN0b20KICogcmVxdWVzdCBtZXRob2QgZmlyc3QuCiAqCiAqIFRoZSBkZWZhdWx0IHByb3RvY29sIHRvIHVzZSBpZiB0aGUgVVJMIGlzIG1pc3NpbmcgYSBzY2hlbWUgbmFtZS4KICoKICogU2V0IHRoZSBuYW1lIG9mIHRoZSBuZXR3b3JrIGludGVyZmFjZSB0aGF0IHRoZSBETlMgcmVzb2x2ZXIgc2hvdWxkIGJpbmQgdG8uCiAqIFRoaXMgbXVzdCBiZSBhbiBpbnRlcmZhY2UgbmFtZSAobm90IGFuIGFkZHJlc3MpLgogKgogKiBTZXQgdGhlIGxvY2FsIElQdjQgYWRkcmVzcyB0aGF0IHRoZSByZXNvbHZlciBzaG91bGQgYmluZCB0by4gVGhlIGFyZ3VtZW50CiAqIHNob3VsZCBjb250YWluIGEgc2luZ2xlIG51bWVyaWNhbCBJUHY0IGFkZHJlc3MgYXMgYSBzdHJpbmcuCiAqCiAqIFNldCB0aGUgbG9jYWwgSVB2NiBhZGRyZXNzIHRoYXQgdGhlIHJlc29sdmVyIHNob3VsZCBiaW5kIHRvLiBUaGUgYXJndW1lbnQKICogc2hvdWxkIGNvbnRhaW4gYSBzaW5nbGUgbnVtZXJpY2FsIElQdjYgYWRkcmVzcyBhcyBhIHN0cmluZy4KICoKICogU2VjdXJlIFJlbW90ZSBQYXNzd29yZCAoU1JQKSBhdXRoZW50aWNhdGlvbiBmb3IgVExTIHByb3ZpZGVzIG11dHVhbCBhdXRoZW50aWNhdGlvbgogKiBpZiBib3RoIHNpZGVzIGhhdmUgYSBzaGFyZWQgc2VjcmV0LiBUbyB1c2UgVExTLVNSUCwgeW91IG11c3QgYWxzbyBzZXQgdGhlCiAqIENVUkxPUFRfUFJPWFlfVExTQVVUSF9VU0VSTkFNRSBhbmQKICogQ1VSTE9QVF9QUk9YWV9UTFNBVVRIX1BBU1NXT1JEIG9wdGlvbnMuCiAqCiAqIFRoZSBzZWNyZXQgcGFzc3dvcmQgbmVlZGVkIHRvIHVzZSB0aGUgcHJpdmF0ZSBTU0wga2V5IHNwZWNpZmllZCBpbgogKiBDVVJMT1BUX1NTTEtFWS4KICoKICoKICogU2luY2UgdGhpcyBvcHRpb24gY29udGFpbnMgYSBzZW5zaXRpdmUgcGFzc3dvcmQsIHJlbWVtYmVyIHRvIGtlZXAKICogdGhlIFBIUCBzY3JpcHQgaXQgaXMgY29udGFpbmVkIHdpdGhpbiBzYWZlLgogKgogKgogKgogKiBTaW5jZSB0aGlzIG9wdGlvbiBjb250YWlucyBhIHNlbnNpdGl2ZSBwYXNzd29yZCwgcmVtZW1iZXIgdG8ga2VlcAogKiB0aGUgUEhQIHNjcmlwdCBpdCBpcyBjb250YWluZWQgd2l0aGluIHNhZmUuCiAqCiAqIHZhbHVlIHNob3VsZCBiZSBhbiBhcnJheSBmb3IgdGhlCiAqIGZvbGxvd2luZyB2YWx1ZXMgb2YgdGhlIG9wdGlvbiBwYXJhbWV0ZXI6CiAqCiAqCiAqCiAqCiAqIE9wdGlvbgogKiBTZXQgdmFsdWUgdG8KICogTm90ZXMKICoKICoKICoKICoKICogQ1VSTE9QVF9DT05ORUNUX1RPCiAqCiAqIENvbm5lY3QgdG8gYSBzcGVjaWZpYyBob3N0IGFuZCBwb3J0IGluc3RlYWQgb2YgdGhlIFVSTCdzIGhvc3QgYW5kIHBvcnQuCiAqIEFjY2VwdHMgYW4gYXJyYXkgb2Ygc3RyaW5ncyB3aXRoIHRoZSBmb3JtYXQKICogSE9TVDpQT1JUOkNPTk5FQ1QtVE8tSE9TVDpDT05ORUNULVRPLVBPUlQuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy40OS4wLiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMC43LgogKgogKgogKgogKiBDVVJMT1BUX0hUVFAyMDBBTElBU0VTCiAqCiAqIEFuIGFycmF5IG9mIEhUVFAgMjAwIHJlc3BvbnNlcyB0aGF0IHdpbGwgYmUgdHJlYXRlZCBhcyB2YWxpZAogKiByZXNwb25zZXMgYW5kIG5vdCBhcyBlcnJvcnMuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4xMC4zLgogKgogKgogKgogKiBDVVJMT1BUX0hUVFBIRUFERVIKICoKICogQW4gYXJyYXkgb2YgSFRUUCBoZWFkZXIgZmllbGRzIHRvIHNldCwgaW4gdGhlIGZvcm1hdAogKgogKiBhcnJheSgnQ29udGVudC10eXBlOiB0ZXh0L3BsYWluJywgJ0NvbnRlbnQtbGVuZ3RoOiAxMDAnKQogKgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX1BPU1RRVU9URQogKgogKiBBbiBhcnJheSBvZiBGVFAgY29tbWFuZHMgdG8gZXhlY3V0ZSBvbiB0aGUgc2VydmVyIGFmdGVyIHRoZSBGVFAKICogcmVxdWVzdCBoYXMgYmVlbiBwZXJmb3JtZWQuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfUFJPWFlIRUFERVIKICoKICogQW4gYXJyYXkgb2YgY3VzdG9tIEhUVFAgaGVhZGVycyB0byBwYXNzIHRvIHByb3hpZXMuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4zNy4wLiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMC43LgogKgogKgogKgogKiBDVVJMT1BUX1FVT1RFCiAqCiAqIEFuIGFycmF5IG9mIEZUUCBjb21tYW5kcyB0byBleGVjdXRlIG9uIHRoZSBzZXJ2ZXIgcHJpb3IgdG8gdGhlIEZUUAogKiByZXF1ZXN0LgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX1JFU09MVkUKICoKICogUHJvdmlkZSBhIGN1c3RvbSBhZGRyZXNzIGZvciBhIHNwZWNpZmljIGhvc3QgYW5kIHBvcnQgcGFpci4gQW4gYXJyYXkKICogb2YgaG9zdG5hbWUsIHBvcnQsIGFuZCBJUCBhZGRyZXNzIHN0cmluZ3MsIGVhY2ggZWxlbWVudCBzZXBhcmF0ZWQgYnkKICogYSBjb2xvbi4gSW4gdGhlIGZvcm1hdDoKICoKICogYXJyYXkoImV4YW1wbGUuY29tOjgwOjEyNy4wLjAuMSIpCiAqCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4yMS4zLiBBdmFpbGFibGUgc2luY2UgUEhQIDUuNS4wLgogKgogKgogKgogKgogKgogKgogKiB2YWx1ZSBzaG91bGQgYmUgYSBzdHJlYW0gcmVzb3VyY2UgKHVzaW5nCiAqIGZvcGVuLCBmb3IgZXhhbXBsZSkgZm9yIHRoZSBmb2xsb3dpbmcgdmFsdWVzIG9mIHRoZQogKiBvcHRpb24gcGFyYW1ldGVyOgogKgogKgogKgogKgogKiBPcHRpb24KICogU2V0IHZhbHVlIHRvCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfRklMRQogKgogKiBUaGUgZmlsZSB0aGF0IHRoZSB0cmFuc2ZlciBzaG91bGQgYmUgd3JpdHRlbiB0by4gVGhlIGRlZmF1bHQKICogaXMgU1RET1VUICh0aGUgYnJvd3NlciB3aW5kb3cpLgogKgogKgogKgogKiBDVVJMT1BUX0lORklMRQogKgogKiBUaGUgZmlsZSB0aGF0IHRoZSB0cmFuc2ZlciBzaG91bGQgYmUgcmVhZCBmcm9tIHdoZW4gdXBsb2FkaW5nLgogKgogKgogKgogKiBDVVJMT1BUX1NUREVSUgogKgogKiBBbiBhbHRlcm5hdGl2ZSBsb2NhdGlvbiB0byBvdXRwdXQgZXJyb3JzIHRvIGluc3RlYWQgb2YKICogU1RERVJSLgogKgogKgogKgogKiBDVVJMT1BUX1dSSVRFSEVBREVSCiAqCiAqIFRoZSBmaWxlIHRoYXQgdGhlIGhlYWRlciBwYXJ0IG9mIHRoZSB0cmFuc2ZlciBpcyB3cml0dGVuIHRvLgogKgogKgogKgogKgogKgogKgogKiB2YWx1ZSBzaG91bGQgYmUgdGhlIG5hbWUgb2YgYSB2YWxpZCBmdW5jdGlvbiBvciBhIENsb3N1cmUKICogZm9yIHRoZSBmb2xsb3dpbmcgdmFsdWVzIG9mIHRoZSBvcHRpb24gcGFyYW1ldGVyOgogKgogKgogKgogKgogKiBPcHRpb24KICogU2V0IHZhbHVlIHRvCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfSEVBREVSRlVOQ1RJT04KICoKICogQSBjYWxsYmFjayBhY2NlcHRpbmcgdHdvIHBhcmFtZXRlcnMuCiAqIFRoZSBmaXJzdCBpcyB0aGUgY1VSTCByZXNvdXJjZSwgdGhlIHNlY29uZCBpcyBhCiAqIHN0cmluZyB3aXRoIHRoZSBoZWFkZXIgZGF0YSB0byBiZSB3cml0dGVuLiBUaGUgaGVhZGVyIGRhdGEgbXVzdAogKiBiZSB3cml0dGVuIGJ5IHRoaXMgY2FsbGJhY2suIFJldHVybiB0aGUgbnVtYmVyIG9mCiAqIGJ5dGVzIHdyaXR0ZW4uCiAqCiAqCiAqCiAqIENVUkxPUFRfUEFTU1dERlVOQ1RJT04KICoKICogQSBjYWxsYmFjayBhY2NlcHRpbmcgdGhyZWUgcGFyYW1ldGVycy4KICogVGhlIGZpcnN0IGlzIHRoZSBjVVJMIHJlc291cmNlLCB0aGUgc2Vjb25kIGlzIGEKICogc3RyaW5nIGNvbnRhaW5pbmcgYSBwYXNzd29yZCBwcm9tcHQsIGFuZCB0aGUgdGhpcmQgaXMgdGhlIG1heGltdW0KICogcGFzc3dvcmQgbGVuZ3RoLiBSZXR1cm4gdGhlIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXNzd29yZC4KICoKICoKICoKICogQ1VSTE9QVF9QUk9HUkVTU0ZVTkNUSU9OCiAqCiAqCiAqIEEgY2FsbGJhY2sgYWNjZXB0aW5nIGZpdmUgcGFyYW1ldGVycy4KICogVGhlIGZpcnN0IGlzIHRoZSBjVVJMIHJlc291cmNlLCB0aGUgc2Vjb25kIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YKICogYnl0ZXMgZXhwZWN0ZWQgdG8gYmUgZG93bmxvYWRlZCBpbiB0aGlzIHRyYW5zZmVyLCB0aGUgdGhpcmQgaXMKICogdGhlIG51bWJlciBvZiBieXRlcyBkb3dubG9hZGVkIHNvIGZhciwgdGhlIGZvdXJ0aCBpcyB0aGUgdG90YWwKICogbnVtYmVyIG9mIGJ5dGVzIGV4cGVjdGVkIHRvIGJlIHVwbG9hZGVkIGluIHRoaXMgdHJhbnNmZXIsIGFuZCB0aGUKICogZmlmdGggaXMgdGhlIG51bWJlciBvZiBieXRlcyB1cGxvYWRlZCBzbyBmYXIuCiAqCiAqCiAqCiAqIFRoZSBjYWxsYmFjayBpcyBvbmx5IGNhbGxlZCB3aGVuIHRoZSBDVVJMT1BUX05PUFJPR1JFU1MKICogb3B0aW9uIGlzIHNldCB0byBGQUxTRS4KICoKICoKICoKICogUmV0dXJuIGEgbm9uLXplcm8gdmFsdWUgdG8gYWJvcnQgdGhlIHRyYW5zZmVyLiBJbiB3aGljaCBjYXNlLCB0aGUKICogdHJhbnNmZXIgd2lsbCBzZXQgYSBDVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLCiAqIGVycm9yLgogKgogKgogKgogKgogKiBDVVJMT1BUX1JFQURGVU5DVElPTgogKgogKiBBIGNhbGxiYWNrIGFjY2VwdGluZyB0aHJlZSBwYXJhbWV0ZXJzLgogKiBUaGUgZmlyc3QgaXMgdGhlIGNVUkwgcmVzb3VyY2UsIHRoZSBzZWNvbmQgaXMgYQogKiBzdHJlYW0gcmVzb3VyY2UgcHJvdmlkZWQgdG8gY1VSTCB0aHJvdWdoIHRoZSBvcHRpb24KICogQ1VSTE9QVF9JTkZJTEUsIGFuZCB0aGUgdGhpcmQgaXMgdGhlIG1heGltdW0KICogYW1vdW50IG9mIGRhdGEgdG8gYmUgcmVhZC4gVGhlIGNhbGxiYWNrIG11c3QgcmV0dXJuIGEgc3RyaW5nCiAqIHdpdGggYSBsZW5ndGggZXF1YWwgb3Igc21hbGxlciB0aGFuIHRoZSBhbW91bnQgb2YgZGF0YSByZXF1ZXN0ZWQsCiAqIHR5cGljYWxseSBieSByZWFkaW5nIGl0IGZyb20gdGhlIHBhc3NlZCBzdHJlYW0gcmVzb3VyY2UuIEl0IHNob3VsZAogKiByZXR1cm4gYW4gZW1wdHkgc3RyaW5nIHRvIHNpZ25hbCBFT0YuCiAqCiAqCiAqCiAqIENVUkxPUFRfV1JJVEVGVU5DVElPTgogKgogKiBBIGNhbGxiYWNrIGFjY2VwdGluZyB0d28gcGFyYW1ldGVycy4KICogVGhlIGZpcnN0IGlzIHRoZSBjVVJMIHJlc291cmNlLCBhbmQgdGhlIHNlY29uZCBpcyBhCiAqIHN0cmluZyB3aXRoIHRoZSBkYXRhIHRvIGJlIHdyaXR0ZW4uIFRoZSBkYXRhIG11c3QgYmUgc2F2ZWQgYnkKICogdGhpcyBjYWxsYmFjay4gSXQgbXVzdCByZXR1cm4gdGhlIGV4YWN0IG51bWJlciBvZiBieXRlcyB3cml0dGVuCiAqIG9yIHRoZSB0cmFuc2ZlciB3aWxsIGJlIGFib3J0ZWQgd2l0aCBhbiBlcnJvci4KICoKICoKICoKICoKICoKICoKICogQSBjYWxsYmFjayBhY2NlcHRpbmcgZml2ZSBwYXJhbWV0ZXJzLgogKiBUaGUgZmlyc3QgaXMgdGhlIGNVUkwgcmVzb3VyY2UsIHRoZSBzZWNvbmQgaXMgdGhlIHRvdGFsIG51bWJlciBvZgogKiBieXRlcyBleHBlY3RlZCB0byBiZSBkb3dubG9hZGVkIGluIHRoaXMgdHJhbnNmZXIsIHRoZSB0aGlyZCBpcwogKiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGRvd25sb2FkZWQgc28gZmFyLCB0aGUgZm91cnRoIGlzIHRoZSB0b3RhbAogKiBudW1iZXIgb2YgYnl0ZXMgZXhwZWN0ZWQgdG8gYmUgdXBsb2FkZWQgaW4gdGhpcyB0cmFuc2ZlciwgYW5kIHRoZQogKiBmaWZ0aCBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHVwbG9hZGVkIHNvIGZhci4KICoKICogVGhlIGNhbGxiYWNrIGlzIG9ubHkgY2FsbGVkIHdoZW4gdGhlIENVUkxPUFRfTk9QUk9HUkVTUwogKiBvcHRpb24gaXMgc2V0IHRvIEZBTFNFLgogKgogKiBSZXR1cm4gYSBub24temVybyB2YWx1ZSB0byBhYm9ydCB0aGUgdHJhbnNmZXIuIEluIHdoaWNoIGNhc2UsIHRoZQogKiB0cmFuc2ZlciB3aWxsIHNldCBhIENVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0sKICogZXJyb3IuCiAqCiAqIE90aGVyIHZhbHVlczoKICoKICoKICoKICoKICogT3B0aW9uCiAqIFNldCB2YWx1ZSB0bwogKgogKgogKgogKgogKiBDVVJMT1BUX1NIQVJFCiAqCiAqIEEgcmVzdWx0IG9mIGN1cmxfc2hhcmVfaW5pdC4gTWFrZXMgdGhlIGNVUkwKICogaGFuZGxlIHRvIHVzZSB0aGUgZGF0YSBmcm9tIHRoZSBzaGFyZWQgaGFuZGxlLgogKgogKgogKgogKgogKgogKiBAdGhyb3dzIEN1cmxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGN1cmxfc2V0b3B0KCRjaCwgaW50ICRvcHRpb24sICR2YWx1ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxjdXJsX3NldG9wdCgkY2gsICRvcHRpb24sICR2YWx1ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBDdXJsRXhjZXB0aW9uOjpjcmVhdGVGcm9tQ3VybFJlc291cmNlKCRjaCk7CiAgICB9Cn0KCgovKioKICogUmV0dXJuIGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgbGFzdCBzaGFyZSBjdXJsIGVycm9yIG51bWJlci4KICoKICogQHBhcmFtIHJlc291cmNlICRzaCBBIGNVUkwgc2hhcmUgaGFuZGxlIHJldHVybmVkIGJ5IGN1cmxfc2hhcmVfaW5pdC4KICogQHJldHVybiBpbnQgUmV0dXJucyBhbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIGxhc3Qgc2hhcmUgY3VybCBlcnJvciBudW1iZXIuCiAqIEB0aHJvd3MgQ3VybEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gY3VybF9zaGFyZV9lcnJubygkc2gpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxjdXJsX3NoYXJlX2Vycm5vKCRzaCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBDdXJsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNldHMgYW4gb3B0aW9uIG9uIHRoZSBnaXZlbiBjVVJMIHNoYXJlIGhhbmRsZS4KICoKICogQHBhcmFtIHJlc291cmNlICRzaCBBIGNVUkwgc2hhcmUgaGFuZGxlIHJldHVybmVkIGJ5IGN1cmxfc2hhcmVfaW5pdC4KICogQHBhcmFtIGludCAkb3B0aW9uCiAqCiAqCiAqCiAqIE9wdGlvbgogKiBEZXNjcmlwdGlvbgogKgogKgogKgogKgogKiBDVVJMU0hPUFRfU0hBUkUKICoKICogU3BlY2lmaWVzIGEgdHlwZSBvZiBkYXRhIHRoYXQgc2hvdWxkIGJlIHNoYXJlZC4KICoKICoKICoKICogQ1VSTFNIT1BUX1VOU0hBUkUKICoKICogU3BlY2lmaWVzIGEgdHlwZSBvZiBkYXRhIHRoYXQgd2lsbCBiZSBubyBsb25nZXIgc2hhcmVkLgogKgogKgogKgogKgogKgogKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQogKgogKgogKgogKiBWYWx1ZQogKiBEZXNjcmlwdGlvbgogKgogKgogKgogKgogKiBDVVJMX0xPQ0tfREFUQV9DT09LSUUKICoKICogU2hhcmVzIGNvb2tpZSBkYXRhLgogKgogKgogKgogKiBDVVJMX0xPQ0tfREFUQV9ETlMKICoKICogU2hhcmVzIEROUyBjYWNoZS4gTm90ZSB0aGF0IHdoZW4geW91IHVzZSBjVVJMIG11bHRpIGhhbmRsZXMsCiAqIGFsbCBoYW5kbGVzIGFkZGVkIHRvIHRoZSBzYW1lIG11bHRpIGhhbmRsZSB3aWxsIHNoYXJlIEROUyBjYWNoZQogKiBieSBkZWZhdWx0LgogKgogKgogKgogKiBDVVJMX0xPQ0tfREFUQV9TU0xfU0VTU0lPTgogKgogKiBTaGFyZXMgU1NMIHNlc3Npb24gSURzLCByZWR1Y2luZyB0aGUgdGltZSBzcGVudCBvbiB0aGUgU1NMCiAqIGhhbmRzaGFrZSB3aGVuIHJlY29ubmVjdGluZyB0byB0aGUgc2FtZSBzZXJ2ZXIuIE5vdGUgdGhhdCBTU0wKICogc2Vzc2lvbiBJRHMgYXJlIHJldXNlZCB3aXRoaW4gdGhlIHNhbWUgaGFuZGxlIGJ5IGRlZmF1bHQuCiAqCiAqCiAqCiAqCiAqCiAqIEB0aHJvd3MgQ3VybEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gY3VybF9zaGFyZV9zZXRvcHQoJHNoLCBpbnQgJG9wdGlvbiwgc3RyaW5nICR2YWx1ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxjdXJsX3NoYXJlX3NldG9wdCgkc2gsICRvcHRpb24sICR2YWx1ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBDdXJsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGRlY29kZXMgdGhlIGdpdmVuIFVSTCBlbmNvZGVkIHN0cmluZy4KICoKICogQHBhcmFtIHJlc291cmNlICRjaCBBIGNVUkwgaGFuZGxlIHJldHVybmVkIGJ5CiAqIGN1cmxfaW5pdC4KICogQHBhcmFtIHN0cmluZyAkc3RyIFRoZSBVUkwgZW5jb2RlZCBzdHJpbmcgdG8gYmUgZGVjb2RlZC4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBkZWNvZGVkIHN0cmluZy4KICogQHRocm93cyBDdXJsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjdXJsX3VuZXNjYXBlKCRjaCwgc3RyaW5nICRzdHIpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxjdXJsX3VuZXNjYXBlKCRjaCwgJHN0cik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBDdXJsRXhjZXB0aW9uOjpjcmVhdGVGcm9tQ3VybFJlc291cmNlKCRjaCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/datetime.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xEYXRldGltZUV4Y2VwdGlvbjsKCi8qKgogKiBSZXR1cm5zIGFzc29jaWF0aXZlIGFycmF5IHdpdGggZGV0YWlsZWQgaW5mbyBhYm91dCBnaXZlbiBkYXRlL3RpbWUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZvcm1hdCBGb3JtYXQgYWNjZXB0ZWQgYnkgRGF0ZVRpbWU6OmNyZWF0ZUZyb21Gb3JtYXQuCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGV0aW1lIFN0cmluZyByZXByZXNlbnRpbmcgdGhlIGRhdGUvdGltZS4KICogQHJldHVybiBhcnJheSBSZXR1cm5zIGFzc29jaWF0aXZlIGFycmF5IHdpdGggZGV0YWlsZWQgaW5mbyBhYm91dCBnaXZlbiBkYXRlL3RpbWUuCiAqIEB0aHJvd3MgRGF0ZXRpbWVFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGRhdGVfcGFyc2VfZnJvbV9mb3JtYXQoc3RyaW5nICRmb3JtYXQsIHN0cmluZyAkZGF0ZXRpbWUpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGRhdGVfcGFyc2VfZnJvbV9mb3JtYXQoJGZvcm1hdCwgJGRhdGV0aW1lKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IERhdGV0aW1lRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGV0aW1lIERhdGUvdGltZSBpbiBmb3JtYXQgYWNjZXB0ZWQgYnkKICogRGF0ZVRpbWVJbW11dGFibGU6Ol9fY29uc3RydWN0LgogKiBAcmV0dXJuIGFycmF5IFJldHVybnMgYXJyYXkgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFyc2VkIGRhdGUvdGltZQogKiBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIERhdGV0aW1lRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBkYXRlX3BhcnNlKHN0cmluZyAkZGF0ZXRpbWUpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGRhdGVfcGFyc2UoJGRhdGV0aW1lKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IERhdGV0aW1lRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSBpbnQgJHRpbWVzdGFtcCBVbml4IHRpbWVzdGFtcC4KICogQHBhcmFtIGZsb2F0ICRsYXRpdHVkZSBMYXRpdHVkZSBpbiBkZWdyZWVzLgogKiBAcGFyYW0gZmxvYXQgJGxvbmdpdHVkZSBMb25naXR1ZGUgaW4gZGVncmVlcy4KICogQHJldHVybiBhcnJheSBSZXR1cm5zIGFycmF5IG9uIHN1Y2Nlc3MuCiAqIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGFycmF5IGlzIGRldGFpbGVkIGluIHRoZSBmb2xsb3dpbmcgbGlzdDoKICoKICoKICoKICogc3VucmlzZQogKgogKgogKiBUaGUgdGltZXN0YW1wIG9mIHRoZSBzdW5yaXNlICh6ZW5pdGggYW5nbGUgPSA5MMKwMzUnKS4KICoKICoKICoKICoKICogc3Vuc2V0CiAqCiAqCiAqIFRoZSB0aW1lc3RhbXAgb2YgdGhlIHN1bnNldCAoemVuaXRoIGFuZ2xlID0gOTDCsDM1JykuCiAqCiAqCiAqCiAqCiAqIHRyYW5zaXQKICoKICoKICogVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSBzdW4gaXMgYXQgaXRzIHplbml0aCwgaS5lLiBoYXMgcmVhY2hlZCBpdHMgdG9wbW9zdAogKiBwb2ludC4KICoKICoKICoKICoKICogY2l2aWxfdHdpbGlnaHRfYmVnaW4KICoKICoKICogVGhlIHN0YXJ0IG9mIHRoZSBjaXZpbCBkYXduICh6ZW5pdGggYW5nbGUgPSA5NsKwKS4gSXQgZW5kcyBhdCBzdW5yaXNlLgogKgogKgogKgogKgogKiBjaXZpbF90d2lsaWdodF9lbmQKICoKICoKICogVGhlIGVuZCBvZiB0aGUgY2l2aWwgZHVzayAoemVuaXRoIGFuZ2xlID0gOTbCsCkuIEl0IHN0YXJ0cyBhdCBzdW5zZXQuCiAqCiAqCiAqCiAqCiAqIG5hdXRpY2FsX3R3aWxpZ2h0X2JlZ2luCiAqCiAqCiAqIFRoZSBzdGFydCBvZiB0aGUgbmF1dGljYWwgZGF3biAoemVuaXRoIGFuZ2xlID0gMTAywrApLiBJdCBlbmRzIGF0CiAqIGNpdmlsX3R3aWxpZ2h0X2JlZ2luLgogKgogKgogKgogKgogKiBuYXV0aWNhbF90d2lsaWdodF9lbmQKICoKICoKICogVGhlIGVuZCBvZiB0aGUgbmF1dGljYWwgZHVzayAoemVuaXRoIGFuZ2xlID0gMTAywrApLiBJdCBzdGFydHMgYXQKICogY2l2aWxfdHdpbGlnaHRfZW5kLgogKgogKgogKgogKgogKiBhc3Ryb25vbWljYWxfdHdpbGlnaHRfYmVnaW4KICoKICoKICogVGhlIHN0YXJ0IG9mIHRoZSBhc3Ryb25vbWljYWwgZGF3biAoemVuaXRoIGFuZ2xlID0gMTA4wrApLiBJdCBlbmRzIGF0CiAqIG5hdXRpY2FsX3R3aWxpZ2h0X2JlZ2luLgogKgogKgogKgogKgogKiBhc3Ryb25vbWljYWxfdHdpbGlnaHRfZW5kCiAqCiAqCiAqIFRoZSBlbmQgb2YgdGhlIGFzdHJvbm9taWNhbCBkdXNrICh6ZW5pdGggYW5nbGUgPSAxMDjCsCkuIEl0IHN0YXJ0cyBhdAogKiBuYXV0aWNhbF90d2lsaWdodF9lbmQuCiAqCiAqCiAqCiAqCiAqCiAqIFRoZSB2YWx1ZXMgb2YgdGhlIGFycmF5IGVsZW1lbnRzIGFyZSBlaXRoZXIgVU5JWCB0aW1lc3RhbXBzLCBGQUxTRSBpZiB0aGUKICogc3VuIGlzIGJlbG93IHRoZSByZXNwZWN0aXZlIHplbml0aCBmb3IgdGhlIHdob2xlIGRheSwgb3IgVFJVRSBpZiB0aGUgc3VuIGlzCiAqIGFib3ZlIHRoZSByZXNwZWN0aXZlIHplbml0aCBmb3IgdGhlIHdob2xlIGRheS4KICogQHRocm93cyBEYXRldGltZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZGF0ZV9zdW5faW5mbyhpbnQgJHRpbWVzdGFtcCwgZmxvYXQgJGxhdGl0dWRlLCBmbG9hdCAkbG9uZ2l0dWRlKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxkYXRlX3N1bl9pbmZvKCR0aW1lc3RhbXAsICRsYXRpdHVkZSwgJGxvbmdpdHVkZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBEYXRldGltZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBkYXRlX3N1bnJpc2UgcmV0dXJucyB0aGUgc3VucmlzZSB0aW1lIGZvciBhIGdpdmVuCiAqIGRheSAoc3BlY2lmaWVkIGFzIGEgdGltZXN0YW1wKSBhbmQgbG9jYXRpb24uCiAqCiAqIEBwYXJhbSBpbnQgJHRpbWVzdGFtcCBUaGUgdGltZXN0YW1wIG9mIHRoZSBkYXkgZnJvbSB3aGljaCB0aGUgc3VucmlzZQogKiB0aW1lIGlzIHRha2VuLgogKiBAcGFyYW0gaW50ICRyZXR1cm5Gb3JtYXQKICogcmV0dXJuRm9ybWF0IGNvbnN0YW50cwogKgogKgogKgogKiBjb25zdGFudAogKiBkZXNjcmlwdGlvbgogKiBleGFtcGxlCiAqCiAqCiAqCiAqCiAqIFNVTkZVTkNTX1JFVF9TVFJJTkcKICogcmV0dXJucyB0aGUgcmVzdWx0IGFzIHN0cmluZwogKiAxNjo0NgogKgogKgogKiBTVU5GVU5DU19SRVRfRE9VQkxFCiAqIHJldHVybnMgdGhlIHJlc3VsdCBhcyBmbG9hdAogKiAxNi43ODI0MzEzMgogKgogKgogKiBTVU5GVU5DU19SRVRfVElNRVNUQU1QCiAqIHJldHVybnMgdGhlIHJlc3VsdCBhcyBpbnRlZ2VyICh0aW1lc3RhbXApCiAqIDEwOTUwMzQ2MDYKICoKICoKICoKICoKICogQHBhcmFtIGZsb2F0ICRsYXRpdHVkZSBEZWZhdWx0cyB0byBOb3J0aCwgcGFzcyBpbiBhIG5lZ2F0aXZlIHZhbHVlIGZvciBTb3V0aC4KICogU2VlIGFsc286IGRhdGUuZGVmYXVsdF9sYXRpdHVkZQogKiBAcGFyYW0gZmxvYXQgJGxvbmdpdHVkZSBEZWZhdWx0cyB0byBFYXN0LCBwYXNzIGluIGEgbmVnYXRpdmUgdmFsdWUgZm9yIFdlc3QuCiAqIFNlZSBhbHNvOiBkYXRlLmRlZmF1bHRfbG9uZ2l0dWRlCiAqIEBwYXJhbSBmbG9hdCAkemVuaXRoIHplbml0aCBpcyB0aGUgYW5nbGUgYmV0d2VlbiB0aGUgY2VudGVyIG9mIHRoZSBzdW4KICogYW5kIGEgbGluZSBwZXJwZW5kaWN1bGFyIHRvIGVhcnRoJ3Mgc3VyZmFjZS4gSXQgZGVmYXVsdHMgdG8KICogZGF0ZS5zdW5yaXNlX3plbml0aAogKgogKiBDb21tb24gemVuaXRoIGFuZ2xlcwogKgogKgogKgogKiBBbmdsZQogKiBEZXNjcmlwdGlvbgogKgogKgogKgogKgogKiA5MMKwNTAnCiAqIFN1bnJpc2U6IHRoZSBwb2ludCB3aGVyZSB0aGUgc3VuIGJlY29tZXMgdmlzaWJsZS4KICoKICoKICogOTbCsAogKiBDaXZpbCB0d2lsaWdodDogY29udmVudGlvbmFsbHkgdXNlZCB0byBzaWduaWZ5IHRoZSBzdGFydCBvZiBkYXduLgogKgogKgogKiAxMDLCsAogKiBOYXV0aWNhbCB0d2lsaWdodDogdGhlIHBvaW50IGF0IHdoaWNoIHRoZSBob3Jpem9uIHN0YXJ0cyBiZWluZyB2aXNpYmxlIGF0IHNlYS4KICoKICoKICogMTA4wrAKICogQXN0cm9ub21pY2FsIHR3aWxpZ2h0OiB0aGUgcG9pbnQgYXQgd2hpY2ggdGhlIHN1biBzdGFydHMgYmVpbmcgdGhlIHNvdXJjZSBvZiBhbnkgaWxsdW1pbmF0aW9uLgogKgogKgogKgogKgogKiBAcGFyYW0gZmxvYXQgJHV0Y09mZnNldCBTcGVjaWZpZWQgaW4gaG91cnMuCiAqIFRoZSB1dGNPZmZzZXQgaXMgaWdub3JlZCwgaWYKICogcmV0dXJuRm9ybWF0IGlzCiAqIFNVTkZVTkNTX1JFVF9USU1FU1RBTVAuCiAqIEByZXR1cm4gbWl4ZWQgUmV0dXJucyB0aGUgc3VucmlzZSB0aW1lIGluIGEgc3BlY2lmaWVkIHJldHVybkZvcm1hdCBvbgogKiBzdWNjZXNzLiBPbmUgcG90ZW50aWFsIHJlYXNvbiBmb3IgZmFpbHVyZSBpcyB0aGF0IHRoZQogKiBzdW4gZG9lcyBub3QgcmlzZSBhdCBhbGwsIHdoaWNoIGhhcHBlbnMgaW5zaWRlIHRoZSBwb2xhciBjaXJjbGVzIGZvciBwYXJ0IG9mCiAqIHRoZSB5ZWFyLgogKiBAdGhyb3dzIERhdGV0aW1lRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBkYXRlX3N1bnJpc2UoaW50ICR0aW1lc3RhbXAsIGludCAkcmV0dXJuRm9ybWF0ID0gU1VORlVOQ1NfUkVUX1NUUklORywgZmxvYXQgJGxhdGl0dWRlID0gbnVsbCwgZmxvYXQgJGxvbmdpdHVkZSA9IG51bGwsIGZsb2F0ICR6ZW5pdGggPSBudWxsLCBmbG9hdCAkdXRjT2Zmc2V0ID0gMCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCR1dGNPZmZzZXQgIT09IDApIHsKICAgICAgICAkcmVzdWx0ID0gXGRhdGVfc3VucmlzZSgkdGltZXN0YW1wLCAkcmV0dXJuRm9ybWF0LCAkbGF0aXR1ZGUsICRsb25naXR1ZGUsICR6ZW5pdGgsICR1dGNPZmZzZXQpOwogICAgfSBlbHNlaWYgKCR6ZW5pdGggIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGRhdGVfc3VucmlzZSgkdGltZXN0YW1wLCAkcmV0dXJuRm9ybWF0LCAkbGF0aXR1ZGUsICRsb25naXR1ZGUsICR6ZW5pdGgpOwogICAgfSBlbHNlaWYgKCRsb25naXR1ZGUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGRhdGVfc3VucmlzZSgkdGltZXN0YW1wLCAkcmV0dXJuRm9ybWF0LCAkbGF0aXR1ZGUsICRsb25naXR1ZGUpOwogICAgfSBlbHNlaWYgKCRsYXRpdHVkZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcZGF0ZV9zdW5yaXNlKCR0aW1lc3RhbXAsICRyZXR1cm5Gb3JtYXQsICRsYXRpdHVkZSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcZGF0ZV9zdW5yaXNlKCR0aW1lc3RhbXAsICRyZXR1cm5Gb3JtYXQpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRGF0ZXRpbWVFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZGF0ZV9zdW5zZXQgcmV0dXJucyB0aGUgc3Vuc2V0IHRpbWUgZm9yIGEgZ2l2ZW4KICogZGF5IChzcGVjaWZpZWQgYXMgYSB0aW1lc3RhbXApIGFuZCBsb2NhdGlvbi4KICoKICogQHBhcmFtIGludCAkdGltZXN0YW1wIFRoZSB0aW1lc3RhbXAgb2YgdGhlIGRheSBmcm9tIHdoaWNoIHRoZSBzdW5zZXQKICogdGltZSBpcyB0YWtlbi4KICogQHBhcmFtIGludCAkcmV0dXJuRm9ybWF0CiAqIHJldHVybkZvcm1hdCBjb25zdGFudHMKICoKICoKICoKICogY29uc3RhbnQKICogZGVzY3JpcHRpb24KICogZXhhbXBsZQogKgogKgogKgogKgogKiBTVU5GVU5DU19SRVRfU1RSSU5HCiAqIHJldHVybnMgdGhlIHJlc3VsdCBhcyBzdHJpbmcKICogMTY6NDYKICoKICoKICogU1VORlVOQ1NfUkVUX0RPVUJMRQogKiByZXR1cm5zIHRoZSByZXN1bHQgYXMgZmxvYXQKICogMTYuNzgyNDMxMzIKICoKICoKICogU1VORlVOQ1NfUkVUX1RJTUVTVEFNUAogKiByZXR1cm5zIHRoZSByZXN1bHQgYXMgaW50ZWdlciAodGltZXN0YW1wKQogKiAxMDk1MDM0NjA2CiAqCiAqCiAqCiAqCiAqIEBwYXJhbSBmbG9hdCAkbGF0aXR1ZGUgRGVmYXVsdHMgdG8gTm9ydGgsIHBhc3MgaW4gYSBuZWdhdGl2ZSB2YWx1ZSBmb3IgU291dGguCiAqIFNlZSBhbHNvOiBkYXRlLmRlZmF1bHRfbGF0aXR1ZGUKICogQHBhcmFtIGZsb2F0ICRsb25naXR1ZGUgRGVmYXVsdHMgdG8gRWFzdCwgcGFzcyBpbiBhIG5lZ2F0aXZlIHZhbHVlIGZvciBXZXN0LgogKiBTZWUgYWxzbzogZGF0ZS5kZWZhdWx0X2xvbmdpdHVkZQogKiBAcGFyYW0gZmxvYXQgJHplbml0aCB6ZW5pdGggaXMgdGhlIGFuZ2xlIGJldHdlZW4gdGhlIGNlbnRlciBvZiB0aGUgc3VuCiAqIGFuZCBhIGxpbmUgcGVycGVuZGljdWxhciB0byBlYXJ0aCdzIHN1cmZhY2UuIEl0IGRlZmF1bHRzIHRvCiAqIGRhdGUuc3Vuc2V0X3plbml0aAogKgogKiBDb21tb24gemVuaXRoIGFuZ2xlcwogKgogKgogKgogKiBBbmdsZQogKiBEZXNjcmlwdGlvbgogKgogKgogKgogKgogKiA5MMKwNTAnCiAqIFN1bnNldDogdGhlIHBvaW50IHdoZXJlIHRoZSBzdW4gYmVjb21lcyBpbnZpc2libGUuCiAqCiAqCiAqIDk2wrAKICogQ2l2aWwgdHdpbGlnaHQ6IGNvbnZlbnRpb25hbGx5IHVzZWQgdG8gc2lnbmlmeSB0aGUgZW5kIG9mIGR1c2suCiAqCiAqCiAqIDEwMsKwCiAqIE5hdXRpY2FsIHR3aWxpZ2h0OiB0aGUgcG9pbnQgYXQgd2hpY2ggdGhlIGhvcml6b24gZW5kcyBiZWluZyB2aXNpYmxlIGF0IHNlYS4KICoKICoKICogMTA4wrAKICogQXN0cm9ub21pY2FsIHR3aWxpZ2h0OiB0aGUgcG9pbnQgYXQgd2hpY2ggdGhlIHN1biBlbmRzIGJlaW5nIHRoZSBzb3VyY2Ugb2YgYW55IGlsbHVtaW5hdGlvbi4KICoKICoKICoKICoKICogQHBhcmFtIGZsb2F0ICR1dGNPZmZzZXQgU3BlY2lmaWVkIGluIGhvdXJzLgogKiBUaGUgdXRjT2Zmc2V0IGlzIGlnbm9yZWQsIGlmCiAqIHJldHVybkZvcm1hdCBpcwogKiBTVU5GVU5DU19SRVRfVElNRVNUQU1QLgogKiBAcmV0dXJuIG1peGVkIFJldHVybnMgdGhlIHN1bnNldCB0aW1lIGluIGEgc3BlY2lmaWVkIHJldHVybkZvcm1hdCBvbgogKiBzdWNjZXNzLiBPbmUgcG90ZW50aWFsIHJlYXNvbiBmb3IgZmFpbHVyZSBpcyB0aGF0IHRoZQogKiBzdW4gZG9lcyBub3Qgc2V0IGF0IGFsbCwgd2hpY2ggaGFwcGVucyBpbnNpZGUgdGhlIHBvbGFyIGNpcmNsZXMgZm9yIHBhcnQgb2YKICogdGhlIHllYXIuCiAqIEB0aHJvd3MgRGF0ZXRpbWVFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGRhdGVfc3Vuc2V0KGludCAkdGltZXN0YW1wLCBpbnQgJHJldHVybkZvcm1hdCA9IFNVTkZVTkNTX1JFVF9TVFJJTkcsIGZsb2F0ICRsYXRpdHVkZSA9IG51bGwsIGZsb2F0ICRsb25naXR1ZGUgPSBudWxsLCBmbG9hdCAkemVuaXRoID0gbnVsbCwgZmxvYXQgJHV0Y09mZnNldCA9IDApCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkdXRjT2Zmc2V0ICE9PSAwKSB7CiAgICAgICAgJHJlc3VsdCA9IFxkYXRlX3N1bnNldCgkdGltZXN0YW1wLCAkcmV0dXJuRm9ybWF0LCAkbGF0aXR1ZGUsICRsb25naXR1ZGUsICR6ZW5pdGgsICR1dGNPZmZzZXQpOwogICAgfSBlbHNlaWYgKCR6ZW5pdGggIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGRhdGVfc3Vuc2V0KCR0aW1lc3RhbXAsICRyZXR1cm5Gb3JtYXQsICRsYXRpdHVkZSwgJGxvbmdpdHVkZSwgJHplbml0aCk7CiAgICB9IGVsc2VpZiAoJGxvbmdpdHVkZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcZGF0ZV9zdW5zZXQoJHRpbWVzdGFtcCwgJHJldHVybkZvcm1hdCwgJGxhdGl0dWRlLCAkbG9uZ2l0dWRlKTsKICAgIH0gZWxzZWlmICgkbGF0aXR1ZGUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGRhdGVfc3Vuc2V0KCR0aW1lc3RhbXAsICRyZXR1cm5Gb3JtYXQsICRsYXRpdHVkZSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcZGF0ZV9zdW5zZXQoJHRpbWVzdGFtcCwgJHJldHVybkZvcm1hdCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBEYXRldGltZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIGEgc3RyaW5nIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGZvcm1hdCBzdHJpbmcgdXNpbmcgdGhlCiAqIGdpdmVuIGludGVnZXIgdGltZXN0YW1wIG9yIHRoZSBjdXJyZW50IHRpbWUKICogaWYgbm8gdGltZXN0YW1wIGlzIGdpdmVuLiAgSW4gb3RoZXIgd29yZHMsIHRpbWVzdGFtcAogKiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mIHRpbWUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZvcm1hdCBGb3JtYXQgYWNjZXB0ZWQgYnkgRGF0ZVRpbWVJbnRlcmZhY2U6OmZvcm1hdC4KICogQHBhcmFtIGludCAkdGltZXN0YW1wIFRoZSBvcHRpb25hbCB0aW1lc3RhbXAgcGFyYW1ldGVyIGlzIGFuCiAqIGludGVnZXIgVW5peCB0aW1lc3RhbXAgdGhhdCBkZWZhdWx0cyB0byB0aGUgY3VycmVudAogKiBsb2NhbCB0aW1lIGlmIGEgdGltZXN0YW1wIGlzIG5vdCBnaXZlbi4gSW4gb3RoZXIKICogd29yZHMsIGl0IGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiB0aW1lLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGEgZm9ybWF0dGVkIGRhdGUgc3RyaW5nLiBJZiBhIG5vbi1udW1lcmljIHZhbHVlIGlzIHVzZWQgZm9yCiAqIHRpbWVzdGFtcCwgRkFMU0UgaXMgcmV0dXJuZWQgYW5kIGFuCiAqIEVfV0FSTklORyBsZXZlbCBlcnJvciBpcyBlbWl0dGVkLgogKiBAdGhyb3dzIERhdGV0aW1lRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBkYXRlKHN0cmluZyAkZm9ybWF0LCBpbnQgJHRpbWVzdGFtcCA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCR0aW1lc3RhbXAgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGRhdGUoJGZvcm1hdCwgJHRpbWVzdGFtcCk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcZGF0ZSgkZm9ybWF0KTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IERhdGV0aW1lRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIElkZW50aWNhbCB0byB0aGUgZGF0ZSBmdW5jdGlvbiBleGNlcHQgdGhhdAogKiB0aGUgdGltZSByZXR1cm5lZCBpcyBHcmVlbndpY2ggTWVhbiBUaW1lIChHTVQpLgogKgogKiBAcGFyYW0gc3RyaW5nICRmb3JtYXQgVGhlIGZvcm1hdCBvZiB0aGUgb3V0cHV0dGVkIGRhdGUgc3RyaW5nLiBTZWUgdGhlIGZvcm1hdHRpbmcKICogb3B0aW9ucyBmb3IgdGhlIGRhdGUgZnVuY3Rpb24uCiAqIEBwYXJhbSBpbnQgJHRpbWVzdGFtcCBUaGUgb3B0aW9uYWwgdGltZXN0YW1wIHBhcmFtZXRlciBpcyBhbgogKiBpbnRlZ2VyIFVuaXggdGltZXN0YW1wIHRoYXQgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQKICogbG9jYWwgdGltZSBpZiBhIHRpbWVzdGFtcCBpcyBub3QgZ2l2ZW4uIEluIG90aGVyCiAqIHdvcmRzLCBpdCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgb2YgdGltZS4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBhIGZvcm1hdHRlZCBkYXRlIHN0cmluZy4gSWYgYSBub24tbnVtZXJpYyB2YWx1ZSBpcyB1c2VkIGZvcgogKiB0aW1lc3RhbXAsIEZBTFNFIGlzIHJldHVybmVkIGFuZCBhbgogKiBFX1dBUk5JTkcgbGV2ZWwgZXJyb3IgaXMgZW1pdHRlZC4KICogQHRocm93cyBEYXRldGltZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZ21kYXRlKHN0cmluZyAkZm9ybWF0LCBpbnQgJHRpbWVzdGFtcCA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCR0aW1lc3RhbXAgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGdtZGF0ZSgkZm9ybWF0LCAkdGltZXN0YW1wKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxnbWRhdGUoJGZvcm1hdCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBEYXRldGltZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIHRoZSBVbml4IHRpbWVzdGFtcCBjb3JyZXNwb25kaW5nIHRvIHRoZSBhcmd1bWVudHMKICogZ2l2ZW4uIFRoaXMgdGltZXN0YW1wIGlzIGEgbG9uZyBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZgogKiBzZWNvbmRzIGJldHdlZW4gdGhlIFVuaXggRXBvY2ggKEphbnVhcnkgMSAxOTcwIDAwOjAwOjAwIEdNVCkgYW5kIHRoZSB0aW1lCiAqIHNwZWNpZmllZC4KICoKICogQXJndW1lbnRzIG1heSBiZSBsZWZ0IG91dCBpbiBvcmRlciBmcm9tIHJpZ2h0IHRvIGxlZnQ7IGFueQogKiBhcmd1bWVudHMgdGh1cyBvbWl0dGVkIHdpbGwgYmUgc2V0IHRvIHRoZSBjdXJyZW50IHZhbHVlIGFjY29yZGluZwogKiB0byB0aGUgbG9jYWwgZGF0ZSBhbmQgdGltZS4KICoKICogQHBhcmFtIGludCAkaG91ciBUaGUgbnVtYmVyIG9mIHRoZSBob3VyIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgZGF5IGRldGVybWluZWQgYnkKICogbW9udGgsIGRheSBhbmQgeWVhci4KICogTmVnYXRpdmUgdmFsdWVzIHJlZmVyZW5jZSB0aGUgaG91ciBiZWZvcmUgbWlkbmlnaHQgb2YgdGhlIGRheSBpbiBxdWVzdGlvbi4KICogVmFsdWVzIGdyZWF0ZXIgdGhhbiAyMyByZWZlcmVuY2UgdGhlIGFwcHJvcHJpYXRlIGhvdXIgaW4gdGhlIGZvbGxvd2luZyBkYXkocykuCiAqIEBwYXJhbSBpbnQgJG1pbnV0ZSBUaGUgbnVtYmVyIG9mIHRoZSBtaW51dGUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBob3VyLgogKiBOZWdhdGl2ZSB2YWx1ZXMgcmVmZXJlbmNlIHRoZSBtaW51dGUgaW4gdGhlIHByZXZpb3VzIGhvdXIuCiAqIFZhbHVlcyBncmVhdGVyIHRoYW4gNTkgcmVmZXJlbmNlIHRoZSBhcHByb3ByaWF0ZSBtaW51dGUgaW4gdGhlIGZvbGxvd2luZyBob3VyKHMpLgogKiBAcGFyYW0gaW50ICRzZWNvbmQgVGhlIG51bWJlciBvZiBzZWNvbmRzIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgbWludXRlLgogKiBOZWdhdGl2ZSB2YWx1ZXMgcmVmZXJlbmNlIHRoZSBzZWNvbmQgaW4gdGhlIHByZXZpb3VzIG1pbnV0ZS4KICogVmFsdWVzIGdyZWF0ZXIgdGhhbiA1OSByZWZlcmVuY2UgdGhlIGFwcHJvcHJpYXRlIHNlY29uZCBpbiB0aGUgZm9sbG93aW5nIG1pbnV0ZShzKS4KICogQHBhcmFtIGludCAkbW9udGggVGhlIG51bWJlciBvZiB0aGUgbW9udGggcmVsYXRpdmUgdG8gdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgeWVhci4KICogVmFsdWVzIDEgdG8gMTIgcmVmZXJlbmNlIHRoZSBub3JtYWwgY2FsZW5kYXIgbW9udGhzIG9mIHRoZSB5ZWFyIGluIHF1ZXN0aW9uLgogKiBWYWx1ZXMgbGVzcyB0aGFuIDEgKGluY2x1ZGluZyBuZWdhdGl2ZSB2YWx1ZXMpIHJlZmVyZW5jZSB0aGUgbW9udGhzIGluIHRoZSBwcmV2aW91cyB5ZWFyIGluIHJldmVyc2Ugb3JkZXIsIHNvIDAgaXMgRGVjZW1iZXIsIC0xIGlzIE5vdmVtYmVyLCBldGMuCiAqIFZhbHVlcyBncmVhdGVyIHRoYW4gMTIgcmVmZXJlbmNlIHRoZSBhcHByb3ByaWF0ZSBtb250aCBpbiB0aGUgZm9sbG93aW5nIHllYXIocykuCiAqIEBwYXJhbSBpbnQgJGRheSBUaGUgbnVtYmVyIG9mIHRoZSBkYXkgcmVsYXRpdmUgdG8gdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgbW9udGguCiAqIFZhbHVlcyAxIHRvIDI4LCAyOSwgMzAgb3IgMzEgKGRlcGVuZGluZyB1cG9uIHRoZSBtb250aCkgcmVmZXJlbmNlIHRoZSBub3JtYWwgZGF5cyBpbiB0aGUgcmVsZXZhbnQgbW9udGguCiAqIFZhbHVlcyBsZXNzIHRoYW4gMSAoaW5jbHVkaW5nIG5lZ2F0aXZlIHZhbHVlcykgcmVmZXJlbmNlIHRoZSBkYXlzIGluIHRoZSBwcmV2aW91cyBtb250aCwgc28gMCBpcyB0aGUgbGFzdCBkYXkgb2YgdGhlIHByZXZpb3VzIG1vbnRoLCAtMSBpcyB0aGUgZGF5IGJlZm9yZSB0aGF0LCBldGMuCiAqIFZhbHVlcyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBkYXlzIGluIHRoZSByZWxldmFudCBtb250aCByZWZlcmVuY2UgdGhlIGFwcHJvcHJpYXRlIGRheSBpbiB0aGUgZm9sbG93aW5nIG1vbnRoKHMpLgogKiBAcGFyYW0gaW50ICR5ZWFyIFRoZSBudW1iZXIgb2YgdGhlIHllYXIsIG1heSBiZSBhIHR3byBvciBmb3VyIGRpZ2l0IHZhbHVlLAogKiB3aXRoIHZhbHVlcyBiZXR3ZWVuIDAtNjkgbWFwcGluZyB0byAyMDAwLTIwNjkgYW5kIDcwLTEwMCB0bwogKiAxOTcwLTIwMDAuIE9uIHN5c3RlbXMgd2hlcmUgdGltZV90IGlzIGEgMzJiaXQgc2lnbmVkIGludGVnZXIsIGFzCiAqIG1vc3QgY29tbW9uIHRvZGF5LCB0aGUgdmFsaWQgcmFuZ2UgZm9yIHllYXIKICogaXMgc29tZXdoZXJlIGJldHdlZW4gMTkwMSBhbmQgMjAzOC4gSG93ZXZlciwgYmVmb3JlIFBIUCA1LjEuMCB0aGlzCiAqIHJhbmdlIHdhcyBsaW1pdGVkIGZyb20gMTk3MCB0byAyMDM4IG9uIHNvbWUgc3lzdGVtcyAoZS5nLiBXaW5kb3dzKS4KICogQHJldHVybiBpbnQgbWt0aW1lIHJldHVybnMgdGhlIFVuaXggdGltZXN0YW1wIG9mIHRoZSBhcmd1bWVudHMKICogZ2l2ZW4uCiAqIElmIHRoZSBhcmd1bWVudHMgYXJlIGludmFsaWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEZBTFNFIChiZWZvcmUgUEhQIDUuMQogKiBpdCByZXR1cm5lZCAtMSkuCiAqIEB0aHJvd3MgRGF0ZXRpbWVFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1rdGltZShpbnQgJGhvdXIgPSBudWxsLCBpbnQgJG1pbnV0ZSA9IG51bGwsIGludCAkc2Vjb25kID0gbnVsbCwgaW50ICRtb250aCA9IG51bGwsIGludCAkZGF5ID0gbnVsbCwgaW50ICR5ZWFyID0gbnVsbCk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHllYXIgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG1rdGltZSgkaG91ciwgJG1pbnV0ZSwgJHNlY29uZCwgJG1vbnRoLCAkZGF5LCAkeWVhcik7CiAgICB9IGVsc2VpZiAoJGRheSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcbWt0aW1lKCRob3VyLCAkbWludXRlLCAkc2Vjb25kLCAkbW9udGgsICRkYXkpOwogICAgfSBlbHNlaWYgKCRtb250aCAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcbWt0aW1lKCRob3VyLCAkbWludXRlLCAkc2Vjb25kLCAkbW9udGgpOwogICAgfSBlbHNlaWYgKCRzZWNvbmQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG1rdGltZSgkaG91ciwgJG1pbnV0ZSwgJHNlY29uZCk7CiAgICB9IGVsc2VpZiAoJG1pbnV0ZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcbWt0aW1lKCRob3VyLCAkbWludXRlKTsKICAgIH0gZWxzZWlmICgkaG91ciAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcbWt0aW1lKCRob3VyKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxta3RpbWUoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IERhdGV0aW1lRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHN0cnB0aW1lIHJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUKICogZGF0ZSBwYXJzZWQuCiAqCiAqIE1vbnRoIGFuZCB3ZWVrZGF5IG5hbWVzIGFuZCBvdGhlciBsYW5ndWFnZSBkZXBlbmRlbnQgc3RyaW5ncyByZXNwZWN0IHRoZQogKiBjdXJyZW50IGxvY2FsZSBzZXQgd2l0aCBzZXRsb2NhbGUgKExDX1RJTUUpLgogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRlIFRoZSBzdHJpbmcgdG8gcGFyc2UgKGUuZy4gcmV0dXJuZWQgZnJvbSBzdHJmdGltZSkuCiAqIEBwYXJhbSBzdHJpbmcgJGZvcm1hdCBUaGUgZm9ybWF0IHVzZWQgaW4gZGF0ZSAoZS5nLiB0aGUgc2FtZSBhcwogKiB1c2VkIGluIHN0cmZ0aW1lKS4gTm90ZSB0aGF0IHNvbWUgb2YgdGhlIGZvcm1hdAogKiBvcHRpb25zIGF2YWlsYWJsZSB0byBzdHJmdGltZSBtYXkgbm90IGhhdmUgYW55CiAqIGVmZmVjdCB3aXRoaW4gc3RycHRpbWU7IHRoZSBleGFjdCBzdWJzZXQgdGhhdCBhcmUKICogc3VwcG9ydGVkIHdpbGwgdmFyeSBiYXNlZCBvbiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBhbmQgQyBsaWJyYXJ5IGluCiAqIHVzZS4KICoKICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZvcm1hdCBvcHRpb25zLCByZWFkIHRoZQogKiBzdHJmdGltZSBwYWdlLgogKiBAcmV0dXJuIGFycmF5IFJldHVybnMgYW4gYXJyYXkuCiAqCiAqCiAqIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgcmV0dXJuZWQgaW4gdGhlIGFycmF5CiAqCiAqCiAqCiAqIHBhcmFtZXRlcnMKICogRGVzY3JpcHRpb24KICoKICoKICoKICoKICogInRtX3NlYyIKICogU2Vjb25kcyBhZnRlciB0aGUgbWludXRlICgwLTYxKQogKgogKgogKiAidG1fbWluIgogKiBNaW51dGVzIGFmdGVyIHRoZSBob3VyICgwLTU5KQogKgogKgogKiAidG1faG91ciIKICogSG91ciBzaW5jZSBtaWRuaWdodCAoMC0yMykKICoKICoKICogInRtX21kYXkiCiAqIERheSBvZiB0aGUgbW9udGggKDEtMzEpCiAqCiAqCiAqICJ0bV9tb24iCiAqIE1vbnRocyBzaW5jZSBKYW51YXJ5ICgwLTExKQogKgogKgogKiAidG1feWVhciIKICogWWVhcnMgc2luY2UgMTkwMAogKgogKgogKiAidG1fd2RheSIKICogRGF5cyBzaW5jZSBTdW5kYXkgKDAtNikKICoKICoKICogInRtX3lkYXkiCiAqIERheXMgc2luY2UgSmFudWFyeSAxICgwLTM2NSkKICoKICoKICogInVucGFyc2VkIgogKiB0aGUgZGF0ZSBwYXJ0IHdoaWNoIHdhcyBub3QKICogcmVjb2duaXplZCB1c2luZyB0aGUgc3BlY2lmaWVkIGZvcm1hdAogKgogKgogKgogKgogKiBAdGhyb3dzIERhdGV0aW1lRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJwdGltZShzdHJpbmcgJGRhdGUsIHN0cmluZyAkZm9ybWF0KTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzdHJwdGltZSgkZGF0ZSwgJGZvcm1hdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBEYXRldGltZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBFYWNoIHBhcmFtZXRlciBvZiB0aGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGRlZmF1bHQgdGltZSB6b25lIHVubGVzcyBhCiAqIHRpbWUgem9uZSBpcyBzcGVjaWZpZWQgaW4gdGhhdCBwYXJhbWV0ZXIuICBCZSBjYXJlZnVsIG5vdCB0byB1c2UKICogZGlmZmVyZW50IHRpbWUgem9uZXMgaW4gZWFjaCBwYXJhbWV0ZXIgdW5sZXNzIHRoYXQgaXMgaW50ZW5kZWQuCiAqIFNlZSBkYXRlX2RlZmF1bHRfdGltZXpvbmVfZ2V0IG9uIHRoZSB2YXJpb3VzCiAqIHdheXMgdG8gZGVmaW5lIHRoZSBkZWZhdWx0IHRpbWUgem9uZS4KICoKICogQHBhcmFtIHN0cmluZyAkZGF0ZXRpbWUgQSBkYXRlL3RpbWUgc3RyaW5nLiBWYWxpZCBmb3JtYXRzIGFyZSBleHBsYWluZWQgaW4gRGF0ZSBhbmQgVGltZSBGb3JtYXRzLgogKiBAcGFyYW0gaW50ICRub3cgVGhlIHRpbWVzdGFtcCB3aGljaCBpcyB1c2VkIGFzIGEgYmFzZSBmb3IgdGhlIGNhbGN1bGF0aW9uIG9mIHJlbGF0aXZlCiAqIGRhdGVzLgogKiBAcmV0dXJuIGludCBSZXR1cm5zIGEgdGltZXN0YW1wIG9uIHN1Y2Nlc3MsIEZBTFNFIG90aGVyd2lzZS4gUHJldmlvdXMgdG8gUEhQIDUuMS4wLAogKiB0aGlzIGZ1bmN0aW9uIHdvdWxkIHJldHVybiAtMSBvbiBmYWlsdXJlLgogKiBAdGhyb3dzIERhdGV0aW1lRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJ0b3RpbWUoc3RyaW5nICRkYXRldGltZSwgaW50ICRub3cgPSBudWxsKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkbm93ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzdHJ0b3RpbWUoJGRhdGV0aW1lLCAkbm93KTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxzdHJ0b3RpbWUoJGRhdGV0aW1lKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IERhdGV0aW1lRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGFiYnIgVGltZSB6b25lIGFiYnJldmlhdGlvbi4KICogQHBhcmFtIGludCAkdXRjT2Zmc2V0IE9mZnNldCBmcm9tIEdNVCBpbiBzZWNvbmRzLiBEZWZhdWx0cyB0byAtMSB3aGljaCBtZWFucyB0aGF0IGZpcnN0IGZvdW5kCiAqIHRpbWUgem9uZSBjb3JyZXNwb25kaW5nIHRvIGFiYnIgaXMgcmV0dXJuZWQuCiAqIE90aGVyd2lzZSBleGFjdCBvZmZzZXQgaXMgc2VhcmNoZWQgYW5kIG9ubHkgaWYgbm90IGZvdW5kIHRoZW4gdGhlIGZpcnN0CiAqIHRpbWUgem9uZSB3aXRoIGFueSBvZmZzZXQgaXMgcmV0dXJuZWQuCiAqIEBwYXJhbSBpbnQgJGlzRFNUIERheWxpZ2h0IHNhdmluZyB0aW1lIGluZGljYXRvci4gRGVmYXVsdHMgdG8gLTEsIHdoaWNoIG1lYW5zIHRoYXQKICogd2hldGhlciB0aGUgdGltZSB6b25lIGhhcyBkYXlsaWdodCBzYXZpbmcgb3Igbm90IGlzIG5vdCB0YWtlbiBpbnRvCiAqIGNvbnNpZGVyYXRpb24gd2hlbiBzZWFyY2hpbmcuIElmIHRoaXMgaXMgc2V0IHRvIDEsIHRoZW4gdGhlCiAqIHV0Y09mZnNldCBpcyBhc3N1bWVkIHRvIGJlIGFuIG9mZnNldCB3aXRoCiAqIGRheWxpZ2h0IHNhdmluZyBpbiBlZmZlY3Q7IGlmIDAsIHRoZW4gdXRjT2Zmc2V0CiAqIGlzIGFzc3VtZWQgdG8gYmUgYW4gb2Zmc2V0IHdpdGhvdXQgZGF5bGlnaHQgc2F2aW5nIGluIGVmZmVjdC4gSWYKICogYWJiciBkb2Vzbid0IGV4aXN0IHRoZW4gdGhlIHRpbWUgem9uZSBpcwogKiBzZWFyY2hlZCBzb2xlbHkgYnkgdGhlIHV0Y09mZnNldCBhbmQKICogaXNEU1QuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGltZSB6b25lIG5hbWUgb24gc3VjY2Vzcy4KICogQHRocm93cyBEYXRldGltZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gdGltZXpvbmVfbmFtZV9mcm9tX2FiYnIoc3RyaW5nICRhYmJyLCBpbnQgJHV0Y09mZnNldCA9IC0xLCBpbnQgJGlzRFNUID0gLTEpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFx0aW1lem9uZV9uYW1lX2Zyb21fYWJicigkYWJiciwgJHV0Y09mZnNldCwgJGlzRFNUKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IERhdGV0aW1lRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/dir.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xEaXJFeGNlcHRpb247CgovKioKICogQ2hhbmdlcyBQSFAncyBjdXJyZW50IGRpcmVjdG9yeSB0bwogKiBkaXJlY3RvcnkuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRpcmVjdG9yeSBUaGUgbmV3IGN1cnJlbnQgZGlyZWN0b3J5CiAqIEB0aHJvd3MgRGlyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjaGRpcihzdHJpbmcgJGRpcmVjdG9yeSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxjaGRpcigkZGlyZWN0b3J5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IERpckV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ2hhbmdlcyB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcyB0bwogKiBkaXJlY3RvcnksIGFuZCBjaGFuZ2VzIHRoZSBjdXJyZW50CiAqIHdvcmtpbmcgZGlyZWN0b3J5IHRvICIvIi4KICoKICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSB0byBHTlUgYW5kIEJTRCBzeXN0ZW1zLCBhbmQKICogb25seSB3aGVuIHVzaW5nIHRoZSBDTEksIENHSSBvciBFbWJlZCBTQVBJLiBBbHNvLCB0aGlzIGZ1bmN0aW9uCiAqIHJlcXVpcmVzIHJvb3QgcHJpdmlsZWdlcy4KICoKICogQHBhcmFtIHN0cmluZyAkZGlyZWN0b3J5IFRoZSBwYXRoIHRvIGNoYW5nZSB0aGUgcm9vdCBkaXJlY3RvcnkgdG8uCiAqIEB0aHJvd3MgRGlyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjaHJvb3Qoc3RyaW5nICRkaXJlY3RvcnkpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcY2hyb290KCRkaXJlY3RvcnkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRGlyRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBHZXRzIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgogKgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG9uIHN1Y2Nlc3MuCiAqCiAqIE9uIHNvbWUgVW5peCB2YXJpYW50cywgZ2V0Y3dkIHdpbGwgcmV0dXJuCiAqIEZBTFNFIGlmIGFueSBvbmUgb2YgdGhlIHBhcmVudCBkaXJlY3RvcmllcyBkb2VzIG5vdCBoYXZlIHRoZQogKiByZWFkYWJsZSBvciBzZWFyY2ggbW9kZSBzZXQsIGV2ZW4gaWYgdGhlIGN1cnJlbnQgZGlyZWN0b3J5CiAqIGRvZXMuIFNlZSBjaG1vZCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbgogKiBtb2RlcyBhbmQgcGVybWlzc2lvbnMuCiAqIEB0aHJvd3MgRGlyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnZXRjd2QoKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZ2V0Y3dkKCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBEaXJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogT3BlbnMgdXAgYSBkaXJlY3RvcnkgaGFuZGxlIHRvIGJlIHVzZWQgaW4gc3Vic2VxdWVudAogKiBjbG9zZWRpciwgcmVhZGRpciwgYW5kCiAqIHJld2luZGRpciBjYWxscy4KICoKICogQHBhcmFtIHN0cmluZyAkcGF0aCBUaGUgZGlyZWN0b3J5IHBhdGggdGhhdCBpcyB0byBiZSBvcGVuZWQKICogQHBhcmFtIHJlc291cmNlICRjb250ZXh0IEZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBjb250ZXh0IHBhcmFtZXRlciwKICogcmVmZXIgdG8gdGhlIHN0cmVhbXMgc2VjdGlvbiBvZgogKiB0aGUgbWFudWFsLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBkaXJlY3RvcnkgaGFuZGxlIHJlc291cmNlIG9uIHN1Y2Nlc3MKICogQHRocm93cyBEaXJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wZW5kaXIoc3RyaW5nICRwYXRoLCAkY29udGV4dCA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkY29udGV4dCAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcb3BlbmRpcigkcGF0aCwgJGNvbnRleHQpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG9wZW5kaXIoJHBhdGgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRGlyRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJlc2V0cyB0aGUgZGlyZWN0b3J5IHN0cmVhbSBpbmRpY2F0ZWQgYnkKICogZGlyX2hhbmRsZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZQogKiBkaXJlY3RvcnkuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZGlyX2hhbmRsZSBUaGUgZGlyZWN0b3J5IGhhbmRsZSByZXNvdXJjZSBwcmV2aW91c2x5IG9wZW5lZAogKiB3aXRoIG9wZW5kaXIuIElmIHRoZSBkaXJlY3RvcnkgaGFuZGxlIGlzCiAqIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXN0IGxpbmsgb3BlbmVkIGJ5IG9wZW5kaXIKICogaXMgYXNzdW1lZC4KICogQHRocm93cyBEaXJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHJld2luZGRpcigkZGlyX2hhbmRsZSA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkZGlyX2hhbmRsZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccmV3aW5kZGlyKCRkaXJfaGFuZGxlKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxyZXdpbmRkaXIoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IERpckV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUmV0dXJucyBhbiBhcnJheSBvZiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgZnJvbSB0aGUKICogZGlyZWN0b3J5LgogKgogKiBAcGFyYW0gc3RyaW5nICRkaXJlY3RvcnkgVGhlIGRpcmVjdG9yeSB0aGF0IHdpbGwgYmUgc2Nhbm5lZC4KICogQHBhcmFtIGludCAkc29ydGluZ19vcmRlciBCeSBkZWZhdWx0LCB0aGUgc29ydGVkIG9yZGVyIGlzIGFscGhhYmV0aWNhbCBpbiBhc2NlbmRpbmcgb3JkZXIuICBJZgogKiB0aGUgb3B0aW9uYWwgc29ydGluZ19vcmRlciBpcyBzZXQgdG8KICogU0NBTkRJUl9TT1JUX0RFU0NFTkRJTkcsIHRoZW4gdGhlIHNvcnQgb3JkZXIgaXMKICogYWxwaGFiZXRpY2FsIGluIGRlc2NlbmRpbmcgb3JkZXIuIElmIGl0IGlzIHNldCB0bwogKiBTQ0FORElSX1NPUlRfTk9ORSB0aGVuIHRoZSByZXN1bHQgaXMgdW5zb3J0ZWQuCiAqIEBwYXJhbSByZXNvdXJjZSAkY29udGV4dCBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgY29udGV4dCBwYXJhbWV0ZXIsCiAqIHJlZmVyIHRvIHRoZSBzdHJlYW1zIHNlY3Rpb24gb2YKICogdGhlIG1hbnVhbC4KICogQHJldHVybiBhcnJheSBSZXR1cm5zIGFuIGFycmF5IG9mIGZpbGVuYW1lcyBvbiBzdWNjZXNzLiBJZiBkaXJlY3RvcnkgaXMgbm90IGEgZGlyZWN0b3J5LCB0aGVuCiAqIGJvb2xlYW4gRkFMU0UgaXMgcmV0dXJuZWQsIGFuZCBhbiBlcnJvciBvZiBsZXZlbAogKiBFX1dBUk5JTkcgaXMgZ2VuZXJhdGVkLgogKiBAdGhyb3dzIERpckV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc2NhbmRpcihzdHJpbmcgJGRpcmVjdG9yeSwgaW50ICRzb3J0aW5nX29yZGVyID0gU0NBTkRJUl9TT1JUX0FTQ0VORElORywgJGNvbnRleHQgPSBudWxsKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb250ZXh0ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzY2FuZGlyKCRkaXJlY3RvcnksICRzb3J0aW5nX29yZGVyLCAkY29udGV4dCk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcc2NhbmRpcigkZGlyZWN0b3J5LCAkc29ydGluZ19vcmRlcik7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBEaXJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/eio.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xFaW9FeGNlcHRpb247CgovKioKICogZWlvX2J1c3kgYXJ0aWZpY2lhbGx5IGluY3JlYXNlcyBsb2FkIHRha2luZwogKiBkZWxheSBzZWNvbmRzIHRvIGV4ZWN1dGUuIE1heSBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcsCiAqIG9yIGJlbmNobWFya2luZy4KICoKICogQHBhcmFtIGludCAkZGVsYXkgRGVsYXkgaW4gc2Vjb25kcwogKiBAcGFyYW0gaW50ICRwcmkgVGhlIHJlcXVlc3QgcHJpb3JpdHk6IEVJT19QUklfREVGQVVMVCwgRUlPX1BSSV9NSU4sIEVJT19QUklfTUFYLCBvciBOVUxMLgogKiBJZiBOVUxMIHBhc3NlZCwgcHJpIGludGVybmFsbHkgaXMgc2V0IHRvCiAqIEVJT19QUklfREVGQVVMVC4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjayBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIGFsbCB0aGUgZ3JvdXAgcmVxdWVzdHMgYXJlIGRvbmUuCiAqIEBwYXJhbSBtaXhlZCAkZGF0YSBBcmJpdHJhcnkgdmFyaWFibGUgcGFzc2VkIHRvIGNhbGxiYWNrLgogKiBAcmV0dXJuIHJlc291cmNlIGVpb19idXN5IHJldHVybnMgcmVxdWVzdCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX2J1c3koaW50ICRkZWxheSwgaW50ICRwcmkgPSBFSU9fUFJJX0RFRkFVTFQsIGNhbGxhYmxlICRjYWxsYmFjayA9IG51bGwsICRkYXRhID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxlaW9fYnVzeSgkZGVsYXksICRwcmksICRjYWxsYmFjaywgJGRhdGEpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRWlvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGVpb19jaG1vZCBjaGFuZ2VzIGZpbGUsIG9yIGRpcmVjdG9yeSBwZXJtaXNzaW9ucy4gVGhlCiAqIG5ldyBwZXJtaXNzaW9ucyBhcmUgc3BlY2lmaWVkIGJ5IG1vZGUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGggUGF0aCB0byB0aGUgdGFyZ2V0IGZpbGUgb3IgZGlyZWN0b3J5CiAqIEF2b2lkIHJlbGF0aXZlCiAqIHBhdGhzCiAqIEBwYXJhbSBpbnQgJG1vZGUgVGhlIG5ldyBwZXJtaXNzaW9ucy4gRS5nLiAwNjQ0LgogKiBAcGFyYW0gaW50ICRwcmkgVGhlIHJlcXVlc3QgcHJpb3JpdHk6IEVJT19QUklfREVGQVVMVCwgRUlPX1BSSV9NSU4sIEVJT19QUklfTUFYLCBvciBOVUxMLgogKiBJZiBOVUxMIHBhc3NlZCwgcHJpIGludGVybmFsbHkgaXMgc2V0IHRvCiAqIEVJT19QUklfREVGQVVMVC4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKiBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBkb25lLgogKiBJdCBzaG91bGQgbWF0Y2ggdGhlIGZvbGxvd2luZyBwcm90b3R5cGU6CiAqCiAqCiAqIGRhdGEKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKgogKiByZXN1bHQKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqCiAqIHJlcQogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqCiAqCiAqCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICogQHBhcmFtIG1peGVkICRkYXRhIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICogQHJldHVybiByZXNvdXJjZSBlaW9fY2htb2QgcmV0dXJucyByZXF1ZXN0IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRWlvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBlaW9fY2htb2Qoc3RyaW5nICRwYXRoLCBpbnQgJG1vZGUsIGludCAkcHJpID0gRUlPX1BSSV9ERUZBVUxULCBjYWxsYWJsZSAkY2FsbGJhY2sgPSBudWxsLCAkZGF0YSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZWlvX2NobW9kKCRwYXRoLCAkbW9kZSwgJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQ2hhbmdlcyBmaWxlLCBvciBkaXJlY3RvcnkgcGVybWlzc2lvbnMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGggUGF0aCB0byBmaWxlIG9yIGRpcmVjdG9yeS4KICogQXZvaWQgcmVsYXRpdmUKICogcGF0aHMKICogQHBhcmFtIGludCAkdWlkIFVzZXIgSUQuIElzIGlnbm9yZWQgd2hlbiBlcXVhbCB0byAtMS4KICogQHBhcmFtIGludCAkZ2lkIEdyb3VwIElELiBJcyBpZ25vcmVkIHdoZW4gZXF1YWwgdG8gLTEuCiAqIEBwYXJhbSBpbnQgJHByaSBUaGUgcmVxdWVzdCBwcmlvcml0eTogRUlPX1BSSV9ERUZBVUxULCBFSU9fUFJJX01JTiwgRUlPX1BSSV9NQVgsIG9yIE5VTEwuCiAqIElmIE5VTEwgcGFzc2VkLCBwcmkgaW50ZXJuYWxseSBpcyBzZXQgdG8KICogRUlPX1BSSV9ERUZBVUxULgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGRvbmUuCiAqIEl0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToKICoKICoKICogZGF0YQogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqCiAqIHJlc3VsdAogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICoKICogcmVxCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICoKICoKICoKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKiBAcGFyYW0gbWl4ZWQgJGRhdGEgaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIGVpb19jaG93biByZXR1cm5zIHJlcXVlc3QgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICogQHRocm93cyBFaW9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGVpb19jaG93bihzdHJpbmcgJHBhdGgsIGludCAkdWlkLCBpbnQgJGdpZCA9IC0xLCBpbnQgJHByaSA9IEVJT19QUklfREVGQVVMVCwgY2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCwgJGRhdGEgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGVpb19jaG93bigkcGF0aCwgJHVpZCwgJGdpZCwgJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZWlvX2Nsb3NlIGNsb3NlcyBmaWxlIHNwZWNpZmllZCBieQogKiBmZC4KICoKICogQHBhcmFtIG1peGVkICRmZCBTdHJlYW0sIFNvY2tldCByZXNvdXJjZSwgb3IgbnVtZXJpYyBmaWxlIGRlc2NyaXB0b3IKICogQHBhcmFtIGludCAkcHJpIFRoZSByZXF1ZXN0IHByaW9yaXR5OiBFSU9fUFJJX0RFRkFVTFQsIEVJT19QUklfTUlOLCBFSU9fUFJJX01BWCwgb3IgTlVMTC4KICogSWYgTlVMTCBwYXNzZWQsIHByaSBpbnRlcm5hbGx5IGlzIHNldCB0bwogKiBFSU9fUFJJX0RFRkFVTFQuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICogY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaXMgZG9uZS4KICogSXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOgogKgogKgogKiBkYXRhCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICoKICogcmVzdWx0CiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKgogKiByZXEKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKgogKgogKgogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqIEBwYXJhbSBtaXhlZCAkZGF0YSBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqIEByZXR1cm4gcmVzb3VyY2UgZWlvX2Nsb3NlIHJldHVybnMgcmVxdWVzdCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX2Nsb3NlKCRmZCwgaW50ICRwcmkgPSBFSU9fUFJJX0RFRkFVTFQsIGNhbGxhYmxlICRjYWxsYmFjayA9IG51bGwsICRkYXRhID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxlaW9fY2xvc2UoJGZkLCAkcHJpLCAkY2FsbGJhY2ssICRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEVpb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBlaW9fY3VzdG9tIGV4ZWN1dGVzIGN1c3RvbSBmdW5jdGlvbiBzcGVjaWZpZWQgYnkKICogZXhlY3V0ZSBwcm9jZXNzaW5nIGl0IGp1c3QgbGlrZSBhbnkgb3RoZXIgZWlvXyogY2FsbC4KICoKICogQHBhcmFtIGNhbGxhYmxlICRleGVjdXRlIFNwZWNpZmllcyB0aGUgcmVxdWVzdCBmdW5jdGlvbiB0aGF0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToKICoKICoKICogY2FsbGJhY2sgaXMgZXZlbnQgY29tcGxldGlvbiBjYWxsYmFjayB0aGF0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nCiAqIHByb3RvdHlwZToKICoKICoKICogZGF0YSBpcyB0aGUgZGF0YSBwYXNzZWQgdG8KICogZXhlY3V0ZSB2aWEgZGF0YSBhcmd1bWVudAogKiB3aXRob3V0IG1vZGlmaWNhdGlvbnMKICogcmVzdWx0IHZhbHVlIHJldHVybmVkIGJ5IGV4ZWN1dGUKICogQHBhcmFtIGludCAkcHJpIFRoZSByZXF1ZXN0IHByaW9yaXR5OiBFSU9fUFJJX0RFRkFVTFQsIEVJT19QUklfTUlOLCBFSU9fUFJJX01BWCwgb3IgTlVMTC4KICogSWYgTlVMTCBwYXNzZWQsIHByaSBpbnRlcm5hbGx5IGlzIHNldCB0bwogKiBFSU9fUFJJX0RFRkFVTFQuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICogY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaXMgZG9uZS4KICogSXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOgogKgogKgogKiBkYXRhCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICoKICogcmVzdWx0CiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKgogKiByZXEKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKgogKgogKgogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqIEBwYXJhbSBtaXhlZCAkZGF0YSBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqIEByZXR1cm4gcmVzb3VyY2UgZWlvX2N1c3RvbSByZXR1cm5zIHJlcXVlc3QgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICogQHRocm93cyBFaW9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGVpb19jdXN0b20oY2FsbGFibGUgJGV4ZWN1dGUsIGludCAkcHJpLCBjYWxsYWJsZSAkY2FsbGJhY2ssICRkYXRhID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxlaW9fY3VzdG9tKCRleGVjdXRlLCAkcHJpLCAkY2FsbGJhY2ssICRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEVpb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBlaW9fZHVwMiBkdXBsaWNhdGVzIGZpbGUgZGVzY3JpcHRvci4KICoKICogQHBhcmFtIG1peGVkICRmZCBTb3VyY2Ugc3RyZWFtLCBTb2NrZXQgcmVzb3VyY2UsIG9yIG51bWVyaWMgZmlsZSBkZXNjcmlwdG9yCiAqIEBwYXJhbSBtaXhlZCAkZmQyIFRhcmdldCBzdHJlYW0sIFNvY2tldCByZXNvdXJjZSwgb3IgbnVtZXJpYyBmaWxlIGRlc2NyaXB0b3IKICogQHBhcmFtIGludCAkcHJpIFRoZSByZXF1ZXN0IHByaW9yaXR5OiBFSU9fUFJJX0RFRkFVTFQsIEVJT19QUklfTUlOLCBFSU9fUFJJX01BWCwgb3IgTlVMTC4KICogSWYgTlVMTCBwYXNzZWQsIHByaSBpbnRlcm5hbGx5IGlzIHNldCB0bwogKiBFSU9fUFJJX0RFRkFVTFQuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICogY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaXMgZG9uZS4KICogSXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOgogKgogKgogKiBkYXRhCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICoKICogcmVzdWx0CiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKgogKiByZXEKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKgogKgogKgogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqIEBwYXJhbSBtaXhlZCAkZGF0YSBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqIEByZXR1cm4gcmVzb3VyY2UgZWlvX2R1cDIgcmV0dXJucyByZXF1ZXN0IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRWlvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBlaW9fZHVwMigkZmQsICRmZDIsIGludCAkcHJpID0gRUlPX1BSSV9ERUZBVUxULCBjYWxsYWJsZSAkY2FsbGJhY2sgPSBudWxsLCAkZGF0YSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZWlvX2R1cDIoJGZkLCAkZmQyLCAkcHJpLCAkY2FsbGJhY2ssICRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEVpb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBlaW9fZXZlbnRfbG9vcCBwb2xscyBsaWJlaW8gdW50aWwgYWxsIHJlcXVlc3RzIHByb2NlZWRlZC4KICoKICogQHRocm93cyBFaW9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGVpb19ldmVudF9sb29wKCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxlaW9fZXZlbnRfbG9vcCgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRWlvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBlaW9fZmFsbG9jYXRlIGFsbG93cyB0aGUgY2FsbGVyIHRvIGRpcmVjdGx5IG1hbmlwdWxhdGUgdGhlIGFsbG9jYXRlZCBkaXNrIHNwYWNlIGZvciB0aGUKICogZmlsZSBzcGVjaWZpZWQgYnkgZmQgZmlsZSBkZXNjcmlwdG9yIGZvciB0aGUgYnl0ZQogKiByYW5nZSBzdGFydGluZyBhdCBvZmZzZXQgYW5kIGNvbnRpbnVpbmcgZm9yCiAqIGxlbmd0aCBieXRlcy4KICoKICogQHBhcmFtIG1peGVkICRmZCBTdHJlYW0sIFNvY2tldCByZXNvdXJjZSwgb3IgbnVtZXJpYyBmaWxlIGRlc2NyaXB0b3IsIGUuZy4gcmV0dXJuZWQgYnkgZWlvX29wZW4uCiAqIEBwYXJhbSBpbnQgJG1vZGUgQ3VycmVudGx5IG9ubHkgb25lIGZsYWcgaXMgc3VwcG9ydGVkIGZvciBtb2RlOgogKiBFSU9fRkFMTE9DX0ZMX0tFRVBfU0laRSAodGhlIHNhbWUgYXMgUE9TSVggY29uc3RhbnQKICogRkFMTE9DX0ZMX0tFRVBfU0laRSkuCiAqIEBwYXJhbSBpbnQgJG9mZnNldCBTcGVjaWZpZXMgc3RhcnQgb2YgdGhlIGJ5dGUgcmFuZ2UuCiAqIEBwYXJhbSBpbnQgJGxlbmd0aCBTcGVjaWZpZXMgbGVuZ3RoIHRoZSBieXRlIHJhbmdlLgogKiBAcGFyYW0gaW50ICRwcmkgVGhlIHJlcXVlc3QgcHJpb3JpdHk6IEVJT19QUklfREVGQVVMVCwgRUlPX1BSSV9NSU4sIEVJT19QUklfTUFYLCBvciBOVUxMLgogKiBJZiBOVUxMIHBhc3NlZCwgcHJpIGludGVybmFsbHkgaXMgc2V0IHRvCiAqIEVJT19QUklfREVGQVVMVC4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKiBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBkb25lLgogKiBJdCBzaG91bGQgbWF0Y2ggdGhlIGZvbGxvd2luZyBwcm90b3R5cGU6CiAqCiAqCiAqIGRhdGEKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKgogKiByZXN1bHQKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqCiAqIHJlcQogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqCiAqCiAqCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICogQHBhcmFtIG1peGVkICRkYXRhIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICogQHJldHVybiByZXNvdXJjZSBlaW9fZmFsbG9jYXRlIHJldHVybnMgcmVxdWVzdCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX2ZhbGxvY2F0ZSgkZmQsIGludCAkbW9kZSwgaW50ICRvZmZzZXQsIGludCAkbGVuZ3RoLCBpbnQgJHByaSA9IEVJT19QUklfREVGQVVMVCwgY2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCwgJGRhdGEgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGVpb19mYWxsb2NhdGUoJGZkLCAkbW9kZSwgJG9mZnNldCwgJGxlbmd0aCwgJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZWlvX2ZjaG1vZCBjaGFuZ2VzIHBlcm1pc3Npb25zIGZvciB0aGUgZmlsZSBzcGVjaWZpZWQKICogYnkgZmQgZmlsZSBkZXNjcmlwdG9yLgogKgogKiBAcGFyYW0gbWl4ZWQgJGZkIFN0cmVhbSwgU29ja2V0IHJlc291cmNlLCBvciBudW1lcmljIGZpbGUgZGVzY3JpcHRvciwgZS5nLiByZXR1cm5lZCBieSBlaW9fb3Blbi4KICogQHBhcmFtIGludCAkbW9kZSBUaGUgbmV3IHBlcm1pc3Npb25zLiBFLmcuIDA2NDQuCiAqIEBwYXJhbSBpbnQgJHByaSBUaGUgcmVxdWVzdCBwcmlvcml0eTogRUlPX1BSSV9ERUZBVUxULCBFSU9fUFJJX01JTiwgRUlPX1BSSV9NQVgsIG9yIE5VTEwuCiAqIElmIE5VTEwgcGFzc2VkLCBwcmkgaW50ZXJuYWxseSBpcyBzZXQgdG8KICogRUlPX1BSSV9ERUZBVUxULgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGRvbmUuCiAqIEl0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToKICoKICoKICogZGF0YQogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqCiAqIHJlc3VsdAogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICoKICogcmVxCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICoKICoKICoKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKiBAcGFyYW0gbWl4ZWQgJGRhdGEgaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIGVpb19mY2htb2QgcmV0dXJucyByZXF1ZXN0IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRWlvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBlaW9fZmNobW9kKCRmZCwgaW50ICRtb2RlLCBpbnQgJHByaSA9IEVJT19QUklfREVGQVVMVCwgY2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCwgJGRhdGEgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGVpb19mY2htb2QoJGZkLCAkbW9kZSwgJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZWlvX2ZkYXRhc3luYyBzeW5jaHJvbml6ZXMgYSBmaWxlJ3MgaW4tY29yZSBzdGF0ZSB3aXRoIHN0b3JhZ2UgZGV2aWNlLgogKgogKiBAcGFyYW0gbWl4ZWQgJGZkIFN0cmVhbSwgU29ja2V0IHJlc291cmNlLCBvciBudW1lcmljIGZpbGUgZGVzY3JpcHRvciwgZS5nLiByZXR1cm5lZCBieSBlaW9fb3Blbi4KICogQHBhcmFtIGludCAkcHJpIFRoZSByZXF1ZXN0IHByaW9yaXR5OiBFSU9fUFJJX0RFRkFVTFQsIEVJT19QUklfTUlOLCBFSU9fUFJJX01BWCwgb3IgTlVMTC4KICogSWYgTlVMTCBwYXNzZWQsIHByaSBpbnRlcm5hbGx5IGlzIHNldCB0bwogKiBFSU9fUFJJX0RFRkFVTFQuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICogY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaXMgZG9uZS4KICogSXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOgogKgogKgogKiBkYXRhCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICoKICogcmVzdWx0CiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKgogKiByZXEKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKgogKgogKgogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqIEBwYXJhbSBtaXhlZCAkZGF0YSBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqIEByZXR1cm4gcmVzb3VyY2UgZWlvX2ZkYXRhc3luYyByZXR1cm5zIHJlcXVlc3QgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICogQHRocm93cyBFaW9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGVpb19mZGF0YXN5bmMoJGZkLCBpbnQgJHByaSA9IEVJT19QUklfREVGQVVMVCwgY2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCwgJGRhdGEgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGVpb19mZGF0YXN5bmMoJGZkLCAkcHJpLCAkY2FsbGJhY2ssICRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEVpb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBlaW9fZnN0YXQgcmV0dXJucyBmaWxlIHN0YXR1cyBpbmZvcm1hdGlvbiBpbgogKiByZXN1bHQgYXJndW1lbnQgb2YgY2FsbGJhY2sKICoKICogQHBhcmFtIG1peGVkICRmZCBTdHJlYW0sIFNvY2tldCByZXNvdXJjZSwgb3IgbnVtZXJpYyBmaWxlIGRlc2NyaXB0b3IuCiAqIEBwYXJhbSBpbnQgJHByaSBUaGUgcmVxdWVzdCBwcmlvcml0eTogRUlPX1BSSV9ERUZBVUxULCBFSU9fUFJJX01JTiwgRUlPX1BSSV9NQVgsIG9yIE5VTEwuCiAqIElmIE5VTEwgcGFzc2VkLCBwcmkgaW50ZXJuYWxseSBpcyBzZXQgdG8KICogRUlPX1BSSV9ERUZBVUxULgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGRvbmUuCiAqIEl0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToKICoKICoKICogZGF0YQogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqCiAqIHJlc3VsdAogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICoKICogcmVxCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICoKICoKICoKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKiBAcGFyYW0gbWl4ZWQgJGRhdGEgaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIGVpb19idXN5IHJldHVybnMgcmVxdWVzdCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX2ZzdGF0KCRmZCwgaW50ICRwcmksIGNhbGxhYmxlICRjYWxsYmFjaywgJGRhdGEgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGRhdGEgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGVpb19mc3RhdCgkZmQsICRwcmksICRjYWxsYmFjaywgJGRhdGEpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGVpb19mc3RhdCgkZmQsICRwcmksICRjYWxsYmFjayk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZWlvX2ZzdGF0dmZzIHJldHVybnMgZmlsZSBzeXN0ZW0gc3RhdGlzdGljcyBpbgogKiByZXN1bHQgb2YgY2FsbGJhY2suCiAqCiAqIEBwYXJhbSBtaXhlZCAkZmQgQSBmaWxlIGRlc2NyaXB0b3Igb2YgYSBmaWxlIHdpdGhpbiB0aGUgbW91bnRlZCBmaWxlIHN5c3RlbS4KICogQHBhcmFtIGludCAkcHJpIFRoZSByZXF1ZXN0IHByaW9yaXR5OiBFSU9fUFJJX0RFRkFVTFQsIEVJT19QUklfTUlOLCBFSU9fUFJJX01BWCwgb3IgTlVMTC4KICogSWYgTlVMTCBwYXNzZWQsIHByaSBpbnRlcm5hbGx5IGlzIHNldCB0bwogKiBFSU9fUFJJX0RFRkFVTFQuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICogY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaXMgZG9uZS4KICogSXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOgogKgogKgogKiBkYXRhCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICoKICogcmVzdWx0CiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKgogKiByZXEKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKgogKgogKgogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqIEBwYXJhbSBtaXhlZCAkZGF0YSBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqIEByZXR1cm4gcmVzb3VyY2UgZWlvX2ZzdGF0dmZzIHJldHVybnMgcmVxdWVzdCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX2ZzdGF0dmZzKCRmZCwgaW50ICRwcmksIGNhbGxhYmxlICRjYWxsYmFjaywgJGRhdGEgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGRhdGEgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGVpb19mc3RhdHZmcygkZmQsICRwcmksICRjYWxsYmFjaywgJGRhdGEpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGVpb19mc3RhdHZmcygkZmQsICRwcmksICRjYWxsYmFjayk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogU3luY2hyb25pemUgYSBmaWxlJ3MgaW4tY29yZSBzdGF0ZSB3aXRoIHN0b3JhZ2UgZGV2aWNlCiAqCiAqIEBwYXJhbSBtaXhlZCAkZmQgU3RyZWFtLCBTb2NrZXQgcmVzb3VyY2UsIG9yIG51bWVyaWMgZmlsZSBkZXNjcmlwdG9yLgogKiBAcGFyYW0gaW50ICRwcmkgVGhlIHJlcXVlc3QgcHJpb3JpdHk6IEVJT19QUklfREVGQVVMVCwgRUlPX1BSSV9NSU4sIEVJT19QUklfTUFYLCBvciBOVUxMLgogKiBJZiBOVUxMIHBhc3NlZCwgcHJpIGludGVybmFsbHkgaXMgc2V0IHRvCiAqIEVJT19QUklfREVGQVVMVC4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKiBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBkb25lLgogKiBJdCBzaG91bGQgbWF0Y2ggdGhlIGZvbGxvd2luZyBwcm90b3R5cGU6CiAqCiAqCiAqIGRhdGEKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKgogKiByZXN1bHQKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqCiAqIHJlcQogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqCiAqCiAqCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICogQHBhcmFtIG1peGVkICRkYXRhIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICogQHJldHVybiByZXNvdXJjZSBlaW9fZnN5bmMgcmV0dXJucyByZXF1ZXN0IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRWlvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBlaW9fZnN5bmMoJGZkLCBpbnQgJHByaSA9IEVJT19QUklfREVGQVVMVCwgY2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCwgJGRhdGEgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGVpb19mc3luYygkZmQsICRwcmksICRjYWxsYmFjaywgJGRhdGEpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRWlvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGVpb19mdHJ1bmNhdGUgY2F1c2VzIGEgcmVndWxhciBmaWxlIHJlZmVyZW5jZWQgYnkKICogZmQgZmlsZSBkZXNjcmlwdG9yIHRvIGJlIHRydW5jYXRlZCB0byBwcmVjaXNlbHkKICogbGVuZ3RoIGJ5dGVzLgogKgogKiBAcGFyYW0gbWl4ZWQgJGZkIFN0cmVhbSwgU29ja2V0IHJlc291cmNlLCBvciBudW1lcmljIGZpbGUgZGVzY3JpcHRvci4KICogQHBhcmFtIGludCAkb2Zmc2V0IE9mZnNldCBmcm9tIGJlZ2lubmluZyBvZiB0aGUgZmlsZQogKiBAcGFyYW0gaW50ICRwcmkgVGhlIHJlcXVlc3QgcHJpb3JpdHk6IEVJT19QUklfREVGQVVMVCwgRUlPX1BSSV9NSU4sIEVJT19QUklfTUFYLCBvciBOVUxMLgogKiBJZiBOVUxMIHBhc3NlZCwgcHJpIGludGVybmFsbHkgaXMgc2V0IHRvCiAqIEVJT19QUklfREVGQVVMVC4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKiBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBkb25lLgogKiBJdCBzaG91bGQgbWF0Y2ggdGhlIGZvbGxvd2luZyBwcm90b3R5cGU6CiAqCiAqCiAqIGRhdGEKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKgogKiByZXN1bHQKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqCiAqIHJlcQogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqCiAqCiAqCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICogQHBhcmFtIG1peGVkICRkYXRhIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICogQHJldHVybiByZXNvdXJjZSBlaW9fZnRydW5jYXRlIHJldHVybnMgcmVxdWVzdCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX2Z0cnVuY2F0ZSgkZmQsIGludCAkb2Zmc2V0ID0gMCwgaW50ICRwcmkgPSBFSU9fUFJJX0RFRkFVTFQsIGNhbGxhYmxlICRjYWxsYmFjayA9IG51bGwsICRkYXRhID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxlaW9fZnRydW5jYXRlKCRmZCwgJG9mZnNldCwgJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZWlvX2Z1dGltZSBjaGFuZ2VzIGZpbGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbgogKiB0aW1lcy4KICoKICogQHBhcmFtIG1peGVkICRmZCBTdHJlYW0sIFNvY2tldCByZXNvdXJjZSwgb3IgbnVtZXJpYyBmaWxlIGRlc2NyaXB0b3IsIGUuZy4gcmV0dXJuZWQgYnkgZWlvX29wZW4KICogQHBhcmFtIGZsb2F0ICRhdGltZSBBY2Nlc3MgdGltZQogKiBAcGFyYW0gZmxvYXQgJG10aW1lIE1vZGlmaWNhdGlvbiB0aW1lCiAqIEBwYXJhbSBpbnQgJHByaSBUaGUgcmVxdWVzdCBwcmlvcml0eTogRUlPX1BSSV9ERUZBVUxULCBFSU9fUFJJX01JTiwgRUlPX1BSSV9NQVgsIG9yIE5VTEwuCiAqIElmIE5VTEwgcGFzc2VkLCBwcmkgaW50ZXJuYWxseSBpcyBzZXQgdG8KICogRUlPX1BSSV9ERUZBVUxULgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGRvbmUuCiAqIEl0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToKICoKICoKICogZGF0YQogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqCiAqIHJlc3VsdAogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICoKICogcmVxCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICoKICoKICoKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKiBAcGFyYW0gbWl4ZWQgJGRhdGEgaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIGVpb19mdXRpbWUgcmV0dXJucyByZXF1ZXN0IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRWlvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBlaW9fZnV0aW1lKCRmZCwgZmxvYXQgJGF0aW1lLCBmbG9hdCAkbXRpbWUsIGludCAkcHJpID0gRUlPX1BSSV9ERUZBVUxULCBjYWxsYWJsZSAkY2FsbGJhY2sgPSBudWxsLCAkZGF0YSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZWlvX2Z1dGltZSgkZmQsICRhdGltZSwgJG10aW1lLCAkcHJpLCAkY2FsbGJhY2ssICRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEVpb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBlaW9fZ3JwIGNyZWF0ZXMgYSByZXF1ZXN0IGdyb3VwLgogKgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGRvbmUuCiAqIEl0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToKICoKICoKICogZGF0YQogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqCiAqIHJlc3VsdAogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICoKICogcmVxCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICoKICoKICoKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKiBAcGFyYW0gc3RyaW5nICRkYXRhIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICogQHJldHVybiByZXNvdXJjZSBlaW9fZ3JwIHJldHVybnMgcmVxdWVzdCBncm91cCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX2dycChjYWxsYWJsZSAkY2FsbGJhY2ssIHN0cmluZyAkZGF0YSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZWlvX2dycCgkY2FsbGJhY2ssICRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEVpb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBlaW9fbHN0YXQgcmV0dXJucyBmaWxlIHN0YXR1cyBpbmZvcm1hdGlvbiBpbgogKiByZXN1bHQgYXJndW1lbnQgb2YgY2FsbGJhY2sKICoKICogQHBhcmFtIHN0cmluZyAkcGF0aCBUaGUgZmlsZSBwYXRoCiAqIEBwYXJhbSBpbnQgJHByaSBUaGUgcmVxdWVzdCBwcmlvcml0eTogRUlPX1BSSV9ERUZBVUxULCBFSU9fUFJJX01JTiwgRUlPX1BSSV9NQVgsIG9yIE5VTEwuCiAqIElmIE5VTEwgcGFzc2VkLCBwcmkgaW50ZXJuYWxseSBpcyBzZXQgdG8KICogRUlPX1BSSV9ERUZBVUxULgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGRvbmUuCiAqIEl0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToKICoKICoKICogZGF0YQogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqCiAqIHJlc3VsdAogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICoKICogcmVxCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICoKICoKICoKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKiBAcGFyYW0gbWl4ZWQgJGRhdGEgaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIGVpb19sc3RhdCByZXR1cm5zIHJlcXVlc3QgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICogQHRocm93cyBFaW9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGVpb19sc3RhdChzdHJpbmcgJHBhdGgsIGludCAkcHJpLCBjYWxsYWJsZSAkY2FsbGJhY2ssICRkYXRhID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxlaW9fbHN0YXQoJHBhdGgsICRwcmksICRjYWxsYmFjaywgJGRhdGEpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRWlvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGVpb19ta2RpciBjcmVhdGVzIGRpcmVjdG9yeSB3aXRoIHNwZWNpZmllZCBhY2Nlc3MKICogbW9kZS4KICoKICogQHBhcmFtIHN0cmluZyAkcGF0aCBQYXRoIGZvciB0aGUgbmV3IGRpcmVjdG9yeS4KICogQHBhcmFtIGludCAkbW9kZSBBY2Nlc3MgbW9kZSwgZS5nLiAwNzU1CiAqIEBwYXJhbSBpbnQgJHByaSBUaGUgcmVxdWVzdCBwcmlvcml0eTogRUlPX1BSSV9ERUZBVUxULCBFSU9fUFJJX01JTiwgRUlPX1BSSV9NQVgsIG9yIE5VTEwuCiAqIElmIE5VTEwgcGFzc2VkLCBwcmkgaW50ZXJuYWxseSBpcyBzZXQgdG8KICogRUlPX1BSSV9ERUZBVUxULgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGRvbmUuCiAqIEl0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToKICoKICoKICogZGF0YQogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqCiAqIHJlc3VsdAogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICoKICogcmVxCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICoKICoKICoKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKiBAcGFyYW0gbWl4ZWQgJGRhdGEgaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIGVpb19ta2RpciByZXR1cm5zIHJlcXVlc3QgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICogQHRocm93cyBFaW9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGVpb19ta2RpcihzdHJpbmcgJHBhdGgsIGludCAkbW9kZSwgaW50ICRwcmkgPSBFSU9fUFJJX0RFRkFVTFQsIGNhbGxhYmxlICRjYWxsYmFjayA9IG51bGwsICRkYXRhID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxlaW9fbWtkaXIoJHBhdGgsICRtb2RlLCAkcHJpLCAkY2FsbGJhY2ssICRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEVpb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBlaW9fbWtub2QgY3JlYXRlcyBvcmRpbmFyeSBvciBzcGVjaWFsKG9mdGVuKSBmaWxlLgogKgogKiBAcGFyYW0gc3RyaW5nICRwYXRoIFBhdGggZm9yIHRoZSBuZXcgbm9kZShmaWxlKS4KICogQHBhcmFtIGludCAkbW9kZSBTcGVjaWZpZXMgYm90aCB0aGUgcGVybWlzc2lvbnMgdG8gdXNlIGFuZCB0aGUgdHlwZSBvZiBub2RlIHRvIGJlCiAqIGNyZWF0ZWQuIEl0IHNob3VsZCBiZSBhIGNvbWJpbmF0aW9uICh1c2luZyBiaXR3aXNlIE9SKSBvZiBvbmUgb2YgdGhlCiAqIGZpbGUgdHlwZXMgbGlzdGVkIGJlbG93IGFuZCB0aGUgcGVybWlzc2lvbnMgZm9yIHRoZSBuZXcgbm9kZShlLmcuIDA2NDApLgogKgogKiBQb3NzaWJsZSBmaWxlIHR5cGVzIGFyZTogRUlPX1NfSUZSRUcocmVndWxhciBmaWxlKSwKICogRUlPX1NfSUZDSFIoY2hhcmFjdGVyIGZpbGUpLAogKiBFSU9fU19JRkJMSyhibG9jayBzcGVjaWFsIGZpbGUpLAogKiBFSU9fU19JRklGTyhGSUZPIC0gbmFtZWQgcGlwZSkgYW5kCiAqIEVJT19TX0lGU09DSyhVTklYIGRvbWFpbiBzb2NrZXQpLgogKgogKiBUbyBzcGVjaWZ5IHBlcm1pc3Npb25zIEVJT19TX0kqIGNvbnN0YW50cyBjb3VsZCBiZQogKiB1c2VkLgogKiBAcGFyYW0gaW50ICRkZXYgSWYgIHRoZSAgZmlsZSB0eXBlIGlzIEVJT19TX0lGQ0hSIG9yCiAqIEVJT19TX0lGQkxLIHRoZW4gZGV2IHNwZWNpZmllcyB0aGUgbWFqb3IgYW5kIG1pbm9yCiAqIG51bWJlcnMgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgZGV2aWNlIHNwZWNpYWwgZmlsZS4gT3RoZXJ3aXNlCiAqIGRldiBpZ25vcmVkLiBTZWUgbWtub2QoMikgbWFuIHBhZ2UgZm9yCiAqIGRldGFpbHMuCiAqIEBwYXJhbSBpbnQgJHByaSBUaGUgcmVxdWVzdCBwcmlvcml0eTogRUlPX1BSSV9ERUZBVUxULCBFSU9fUFJJX01JTiwgRUlPX1BSSV9NQVgsIG9yIE5VTEwuCiAqIElmIE5VTEwgcGFzc2VkLCBwcmkgaW50ZXJuYWxseSBpcyBzZXQgdG8KICogRUlPX1BSSV9ERUZBVUxULgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGRvbmUuCiAqIEl0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToKICoKICoKICogZGF0YQogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqCiAqIHJlc3VsdAogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICoKICogcmVxCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICoKICoKICoKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKiBAcGFyYW0gbWl4ZWQgJGRhdGEgaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIGVpb19ta25vZCByZXR1cm5zIHJlcXVlc3QgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICogQHRocm93cyBFaW9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGVpb19ta25vZChzdHJpbmcgJHBhdGgsIGludCAkbW9kZSwgaW50ICRkZXYsIGludCAkcHJpID0gRUlPX1BSSV9ERUZBVUxULCBjYWxsYWJsZSAkY2FsbGJhY2sgPSBudWxsLCAkZGF0YSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZWlvX21rbm9kKCRwYXRoLCAkbW9kZSwgJGRldiwgJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZWlvX25vcCBkb2VzIG5vdGhpbmcsIGV4Y2VwdCBnbyB0aHJvdWdoIHRoZSB3aG9sZQogKiByZXF1ZXN0IGN5Y2xlLiBDb3VsZCBiZSB1c2VmdWwgaW4gZGVidWdnaW5nLgogKgogKiBAcGFyYW0gaW50ICRwcmkgVGhlIHJlcXVlc3QgcHJpb3JpdHk6IEVJT19QUklfREVGQVVMVCwgRUlPX1BSSV9NSU4sIEVJT19QUklfTUFYLCBvciBOVUxMLgogKiBJZiBOVUxMIHBhc3NlZCwgcHJpIGludGVybmFsbHkgaXMgc2V0IHRvCiAqIEVJT19QUklfREVGQVVMVC4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKiBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBkb25lLgogKiBJdCBzaG91bGQgbWF0Y2ggdGhlIGZvbGxvd2luZyBwcm90b3R5cGU6CiAqCiAqCiAqIGRhdGEKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKgogKiByZXN1bHQKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqCiAqIHJlcQogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqCiAqCiAqCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICogQHBhcmFtIG1peGVkICRkYXRhIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICogQHJldHVybiByZXNvdXJjZSBlaW9fbm9wIHJldHVybnMgcmVxdWVzdCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX25vcChpbnQgJHByaSA9IEVJT19QUklfREVGQVVMVCwgY2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCwgJGRhdGEgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGVpb19ub3AoJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZWlvX3JlYWRhaGVhZCBwb3B1bGF0ZXMgdGhlIHBhZ2UgY2FjaGUgd2l0aCBkYXRhIGZyb20gYSBmaWxlIHNvIHRoYXQgc3Vic2VxdWVudCByZWFkcyBmcm9tCiAqIHRoYXQgZmlsZSB3aWxsIG5vdCBibG9jayBvbiBkaXNrIEkvTy4gU2VlIFJFQURBSEVBRCgyKSBtYW4gcGFnZSBmb3IgZGV0YWlscy4KICoKICogQHBhcmFtIG1peGVkICRmZCBTdHJlYW0sIFNvY2tldCByZXNvdXJjZSwgb3IgbnVtZXJpYyBmaWxlIGRlc2NyaXB0b3IKICogQHBhcmFtIGludCAkb2Zmc2V0IFN0YXJ0aW5nIHBvaW50IGZyb20gd2hpY2ggZGF0YSBpcyB0byBiZSByZWFkLgogKiBAcGFyYW0gaW50ICRsZW5ndGggTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHJlYWQuCiAqIEBwYXJhbSBpbnQgJHByaSBUaGUgcmVxdWVzdCBwcmlvcml0eTogRUlPX1BSSV9ERUZBVUxULCBFSU9fUFJJX01JTiwgRUlPX1BSSV9NQVgsIG9yIE5VTEwuCiAqIElmIE5VTEwgcGFzc2VkLCBwcmkgaW50ZXJuYWxseSBpcyBzZXQgdG8KICogRUlPX1BSSV9ERUZBVUxULgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGRvbmUuCiAqIEl0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToKICoKICoKICogZGF0YQogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqCiAqIHJlc3VsdAogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICoKICogcmVxCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICoKICoKICoKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKiBAcGFyYW0gbWl4ZWQgJGRhdGEgaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIGVpb19yZWFkYWhlYWQgcmV0dXJucyByZXF1ZXN0IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRWlvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBlaW9fcmVhZGFoZWFkKCRmZCwgaW50ICRvZmZzZXQsIGludCAkbGVuZ3RoLCBpbnQgJHByaSA9IEVJT19QUklfREVGQVVMVCwgY2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCwgJGRhdGEgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGVpb19yZWFkYWhlYWQoJGZkLCAkb2Zmc2V0LCAkbGVuZ3RoLCAkcHJpLCAkY2FsbGJhY2ssICRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEVpb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZWFkcyB0aHJvdWdoIGEgd2hvbGUgZGlyZWN0b3J5KHZpYSB0aGUgb3BlbmRpciwgcmVhZGRpciBhbmQKICogY2xvc2VkaXIgc3lzdGVtIGNhbGxzKSBhbmQgcmV0dXJucyBlaXRoZXIgdGhlIG5hbWVzIG9yIGFuIGFycmF5IGluCiAqIHJlc3VsdCBhcmd1bWVudCBvZiBjYWxsYmFjawogKiBmdW5jdGlvbiwgZGVwZW5kaW5nIG9uIHRoZSBmbGFncyBhcmd1bWVudC4KICoKICogQHBhcmFtIHN0cmluZyAkcGF0aCBEaXJlY3RvcnkgcGF0aC4KICogQHBhcmFtIGludCAkZmxhZ3MgQ29tYmluYXRpb24gb2YgRUlPX1JFQURESVJfKiBjb25zdGFudHMuCiAqIEBwYXJhbSBpbnQgJHByaSBUaGUgcmVxdWVzdCBwcmlvcml0eTogRUlPX1BSSV9ERUZBVUxULCBFSU9fUFJJX01JTiwgRUlPX1BSSV9NQVgsIG9yIE5VTEwuCiAqIElmIE5VTEwgcGFzc2VkLCBwcmkgaW50ZXJuYWxseSBpcyBzZXQgdG8KICogRUlPX1BSSV9ERUZBVUxULgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGRvbmUuCiAqIEl0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToKICoKICoKICogZGF0YQogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqCiAqIHJlc3VsdAogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICoKICogcmVxCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICoKICoKICoKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKiBAcGFyYW0gc3RyaW5nICRkYXRhIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICogQHJldHVybiByZXNvdXJjZSBlaW9fcmVhZGRpciByZXR1cm5zIHJlcXVlc3QgcmVzb3VyY2Ugb24gc3VjY2Vzcy4gU2V0cyByZXN1bHQgYXJndW1lbnQgb2YKICogY2FsbGJhY2sgZnVuY3Rpb24gYWNjb3JkaW5nIHRvCiAqIGZsYWdzOgogKgogKgogKgogKgogKgogKgogKiBFSU9fUkVBRERJUl9ERU5UUwogKiAoaW50ZWdlcikKICoKICoKICoKICogZWlvX3JlYWRkaXIgZmxhZy4gSWYgc3BlY2lmaWVkLCB0aGUgcmVzdWx0IGFyZ3VtZW50IG9mIHRoZSBjYWxsYmFjawogKiBiZWNvbWVzIGFuIGFycmF5IHdpdGggdGhlIGZvbGxvd2luZyBrZXlzOgogKiAnbmFtZXMnIC0gYXJyYXkgb2YgZGlyZWN0b3J5IG5hbWVzCiAqICdkZW50cycgLSBhcnJheSBvZiBzdHJ1Y3QKICogZWlvX2RpcmVudC1saWtlIGFycmF5cyBoYXZpbmcgdGhlIGZvbGxvd2luZyBrZXlzIGVhY2g6CiAqICduYW1lJyAtIHRoZSBkaXJlY3RvcnkgbmFtZTsKICogJ3R5cGUnIC0gb25lIG9mIEVJT19EVF8qCiAqIGNvbnN0YW50czsKICogJ2lub2RlJyAtIHRoZSBpbm9kZSBudW1iZXIsIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlCiAqIHVuc3BlY2lmaWVkOwogKgogKgogKgogKgogKgogKiBFSU9fUkVBRERJUl9ESVJTX0ZJUlNUCiAqIChpbnRlZ2VyKQogKgogKgogKgogKiBXaGVuIHRoaXMgZmxhZyBpcyBzcGVjaWZpZWQsIHRoZSBuYW1lcyB3aWxsIGJlIHJldHVybmVkIGluIGFuIG9yZGVyCiAqIHdoZXJlIGxpa2VseSBkaXJlY3RvcmllcyBjb21lIGZpcnN0LCBpbiBvcHRpbWFsIHN0YXQgb3JkZXIuCiAqCiAqCiAqCiAqCiAqCiAqIEVJT19SRUFERElSX1NUQVRfT1JERVIKICogKGludGVnZXIpCiAqCiAqCiAqCiAqIFdoZW4gdGhpcyBmbGFnIGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgbmFtZXMgd2lsbCBiZSByZXR1cm5lZCBpbiBhbiBvcmRlcgogKiBzdWl0YWJsZSBmb3Igc3RhdCdpbmcgZWFjaCBvbmUuIFdoZW4gcGxhbm5pbmcgdG8KICogc3RhdCBhbGwgZmlsZXMgaW4gdGhlIGdpdmVuIGRpcmVjdG9yeSwgdGhlCiAqIHJldHVybmVkIG9yZGVyIHdpbGwgbGlrZWx5IGJlCiAqIGZhc3Rlc3QuCiAqCiAqCiAqCiAqCiAqCiAqIEVJT19SRUFERElSX0ZPVU5EX1VOS05PV04KICogKGludGVnZXIpCiAqCiAqCiAqCiAqCiAqCiAqCiAqCiAqCiAqCiAqCiAqCiAqIE5vZGUgdHlwZXM6CiAqCiAqCiAqCiAqCiAqCiAqIEVJT19EVF9VTktOT1dOCiAqIChpbnRlZ2VyKQogKgogKgogKgogKiBVbmtub3duIG5vZGUgdHlwZSh2ZXJ5IGNvbW1vbikuIEZ1cnRoZXIgc3RhdCBuZWVkZWQuCiAqCiAqCiAqCiAqCiAqCiAqIEVJT19EVF9GSUZPCiAqIChpbnRlZ2VyKQogKgogKgogKgogKiBGSUZPIG5vZGUgdHlwZQogKgogKgogKgogKgogKgogKiBFSU9fRFRfQ0hSCiAqIChpbnRlZ2VyKQogKgogKgogKgogKiBOb2RlIHR5cGUKICoKICoKICoKICoKICoKICogRUlPX0RUX01QQwogKiAoaW50ZWdlcikKICoKICoKICoKICogTXVsdGlwbGV4ZWQgY2hhciBkZXZpY2UgKHY3K2NvaGVyZW50KSBub2RlIHR5cGUKICoKICoKICoKICoKICoKICogRUlPX0RUX0RJUgogKiAoaW50ZWdlcikKICoKICoKICoKICogRGlyZWN0b3J5IG5vZGUgdHlwZQogKgogKgogKgogKgogKgogKiBFSU9fRFRfTkFNCiAqIChpbnRlZ2VyKQogKgogKgogKgogKiBYZW5peCBzcGVjaWFsIG5hbWVkIGZpbGUgbm9kZSB0eXBlCiAqCiAqCiAqCiAqCiAqCiAqIEVJT19EVF9CTEsKICogKGludGVnZXIpCiAqCiAqCiAqCiAqIE5vZGUgdHlwZQogKgogKgogKgogKgogKgogKiBFSU9fRFRfTVBCCiAqIChpbnRlZ2VyKQogKgogKgogKgogKiBNdWx0aXBsZXhlZCBibG9jayBkZXZpY2UgKHY3K2NvaGVyZW50KQogKgogKgogKgogKgogKgogKiBFSU9fRFRfUkVHCiAqIChpbnRlZ2VyKQogKgogKgogKgogKiBOb2RlIHR5cGUKICoKICoKICoKICoKICoKICogRUlPX0RUX05XSwogKiAoaW50ZWdlcikKICoKICoKICoKICoKICoKICoKICoKICoKICogRUlPX0RUX0NNUAogKiAoaW50ZWdlcikKICoKICoKICoKICogSFAtVVggbmV0d29yayBzcGVjaWFsIG5vZGUgdHlwZQogKgogKgogKgogKgogKgogKiBFSU9fRFRfTE5LCiAqIChpbnRlZ2VyKQogKgogKgogKgogKiBMaW5rIG5vZGUgdHlwZQogKgogKgogKgogKgogKgogKiBFSU9fRFRfU09DSwogKiAoaW50ZWdlcikKICoKICoKICoKICogU29ja2V0IG5vZGUgdHlwZQogKgogKgogKgogKgogKgogKiBFSU9fRFRfRE9PUgogKiAoaW50ZWdlcikKICoKICoKICoKICogU29sYXJpcyBkb29yIG5vZGUgdHlwZQogKgogKgogKgogKgogKgogKiBFSU9fRFRfV0hUCiAqIChpbnRlZ2VyKQogKgogKgogKgogKiBOb2RlIHR5cGUKICoKICoKICoKICoKICoKICogRUlPX0RUX01BWAogKiAoaW50ZWdlcikKICoKICoKICoKICogSGlnaGVzdCBub2RlIHR5cGUgdmFsdWUKICoKICoKICoKICoKICoKICoKICoKICogQHRocm93cyBFaW9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGVpb19yZWFkZGlyKHN0cmluZyAkcGF0aCwgaW50ICRmbGFncywgaW50ICRwcmksIGNhbGxhYmxlICRjYWxsYmFjaywgc3RyaW5nICRkYXRhID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxlaW9fcmVhZGRpcigkcGF0aCwgJGZsYWdzLCAkcHJpLCAkY2FsbGJhY2ssICRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEVpb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKgogKgogKiBAcGFyYW0gc3RyaW5nICRwYXRoIFNvdXJjZSBzeW1ib2xpYyBsaW5rIHBhdGgKICogQHBhcmFtIGludCAkcHJpIFRoZSByZXF1ZXN0IHByaW9yaXR5OiBFSU9fUFJJX0RFRkFVTFQsIEVJT19QUklfTUlOLCBFSU9fUFJJX01BWCwgb3IgTlVMTC4KICogSWYgTlVMTCBwYXNzZWQsIHByaSBpbnRlcm5hbGx5IGlzIHNldCB0bwogKiBFSU9fUFJJX0RFRkFVTFQuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICogY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaXMgZG9uZS4KICogSXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOgogKgogKgogKiBkYXRhCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICoKICogcmVzdWx0CiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKgogKiByZXEKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKgogKgogKgogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIGVpb19yZWFkbGluayByZXR1cm5zIHJlcXVlc3QgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICogQHRocm93cyBFaW9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGVpb19yZWFkbGluayhzdHJpbmcgJHBhdGgsIGludCAkcHJpLCBjYWxsYWJsZSAkY2FsbGJhY2ssIHN0cmluZyAkZGF0YSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZWlvX3JlYWRsaW5rKCRwYXRoLCAkcHJpLCAkY2FsbGJhY2ssICRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEVpb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBlaW9fcmVuYW1lIHJlbmFtZXMgb3IgbW92ZXMgYSBmaWxlIHRvIG5ldyBsb2NhdGlvbi4KICoKICogQHBhcmFtIHN0cmluZyAkcGF0aCBTb3VyY2UgcGF0aAogKiBAcGFyYW0gc3RyaW5nICRuZXdfcGF0aCBUYXJnZXQgcGF0aAogKiBAcGFyYW0gaW50ICRwcmkgVGhlIHJlcXVlc3QgcHJpb3JpdHk6IEVJT19QUklfREVGQVVMVCwgRUlPX1BSSV9NSU4sIEVJT19QUklfTUFYLCBvciBOVUxMLgogKiBJZiBOVUxMIHBhc3NlZCwgcHJpIGludGVybmFsbHkgaXMgc2V0IHRvCiAqIEVJT19QUklfREVGQVVMVC4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKiBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBkb25lLgogKiBJdCBzaG91bGQgbWF0Y2ggdGhlIGZvbGxvd2luZyBwcm90b3R5cGU6CiAqCiAqCiAqIGRhdGEKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKgogKiByZXN1bHQKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqCiAqIHJlcQogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqCiAqCiAqCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICogQHBhcmFtIG1peGVkICRkYXRhIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICogQHJldHVybiByZXNvdXJjZSBlaW9fcmVuYW1lIHJldHVybnMgcmVxdWVzdCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX3JlbmFtZShzdHJpbmcgJHBhdGgsIHN0cmluZyAkbmV3X3BhdGgsIGludCAkcHJpID0gRUlPX1BSSV9ERUZBVUxULCBjYWxsYWJsZSAkY2FsbGJhY2sgPSBudWxsLCAkZGF0YSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZWlvX3JlbmFtZSgkcGF0aCwgJG5ld19wYXRoLCAkcHJpLCAkY2FsbGJhY2ssICRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEVpb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBlaW9fcm1kaXIgcmVtb3ZlcyBhIGRpcmVjdG9yeS4KICoKICogQHBhcmFtIHN0cmluZyAkcGF0aCBEaXJlY3RvcnkgcGF0aAogKiBAcGFyYW0gaW50ICRwcmkgVGhlIHJlcXVlc3QgcHJpb3JpdHk6IEVJT19QUklfREVGQVVMVCwgRUlPX1BSSV9NSU4sIEVJT19QUklfTUFYLCBvciBOVUxMLgogKiBJZiBOVUxMIHBhc3NlZCwgcHJpIGludGVybmFsbHkgaXMgc2V0IHRvCiAqIEVJT19QUklfREVGQVVMVC4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKiBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBkb25lLgogKiBJdCBzaG91bGQgbWF0Y2ggdGhlIGZvbGxvd2luZyBwcm90b3R5cGU6CiAqCiAqCiAqIGRhdGEKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKgogKiByZXN1bHQKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqCiAqIHJlcQogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqCiAqCiAqCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICogQHBhcmFtIG1peGVkICRkYXRhIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICogQHJldHVybiByZXNvdXJjZSBlaW9fcm1kaXIgcmV0dXJucyByZXF1ZXN0IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRWlvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBlaW9fcm1kaXIoc3RyaW5nICRwYXRoLCBpbnQgJHByaSA9IEVJT19QUklfREVGQVVMVCwgY2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCwgJGRhdGEgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGVpb19ybWRpcigkcGF0aCwgJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZWlvX3NlZWsgcmVwb3NpdGlvbnMgdGhlIG9mZnNldCBvZiB0aGUgb3BlbiBmaWxlIGFzc29jaWF0ZWQgd2l0aAogKiBzdHJlYW0sIFNvY2tldCByZXNvdXJjZSwgb3IgZmlsZSBkZXNjcmlwdG9yIHNwZWNpZmllZCBieSBmZCB0byB0aGUgYXJndW1lbnQgb2Zmc2V0IGFjY29yZGluZyB0byB0aGUgZGlyZWN0aXZlIHdoZW5jZSBhcyBmb2xsb3dzOgogKgogKiBFSU9fU0VFS19TRVQgLSBTZXQgcG9zaXRpb24gZXF1YWwgdG8gb2Zmc2V0IGJ5dGVzLgogKiBFSU9fU0VFS19DVVIgLSBTZXQgcG9zaXRpb24gdG8gY3VycmVudCBsb2NhdGlvbiBwbHVzIG9mZnNldC4KICogRUlPX1NFRUtfRU5EIC0gU2V0IHBvc2l0aW9uIHRvIGVuZC1vZi1maWxlIHBsdXMgb2Zmc2V0LgogKgogKgogKiBAcGFyYW0gbWl4ZWQgJGZkIFN0cmVhbSwgU29ja2V0IHJlc291cmNlLCBvciBudW1lcmljIGZpbGUgZGVzY3JpcHRvcgogKiBAcGFyYW0gaW50ICRvZmZzZXQgU3RhcnRpbmcgcG9pbnQgZnJvbSB3aGljaCBkYXRhIGlzIHRvIGJlIHJlYWQuCiAqIEBwYXJhbSBpbnQgJHdoZW5jZSBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgcmVhZC4KICogQHBhcmFtIGludCAkcHJpIFRoZSByZXF1ZXN0IHByaW9yaXR5OiBFSU9fUFJJX0RFRkFVTFQsIEVJT19QUklfTUlOLCBFSU9fUFJJX01BWCwgb3IgTlVMTC4KICogSWYgTlVMTCBwYXNzZWQsIHByaSBpbnRlcm5hbGx5IGlzIHNldCB0bwogKiBFSU9fUFJJX0RFRkFVTFQuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICogY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaXMgZG9uZS4KICogSXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOgogKgogKgogKiBkYXRhCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICoKICogcmVzdWx0CiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKgogKiByZXEKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKgogKgogKgogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqIEBwYXJhbSBtaXhlZCAkZGF0YSBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqIEByZXR1cm4gcmVzb3VyY2UgZWlvX3NlZWsgcmV0dXJucyByZXF1ZXN0IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRWlvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBlaW9fc2VlaygkZmQsIGludCAkb2Zmc2V0LCBpbnQgJHdoZW5jZSwgaW50ICRwcmkgPSBFSU9fUFJJX0RFRkFVTFQsIGNhbGxhYmxlICRjYWxsYmFjayA9IG51bGwsICRkYXRhID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxlaW9fc2VlaygkZmQsICRvZmZzZXQsICR3aGVuY2UsICRwcmksICRjYWxsYmFjaywgJGRhdGEpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRWlvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGVpb19zZW5kZmlsZSBjb3BpZXMgIGRhdGEgYmV0d2VlbiBvbmUgZmlsZSBkZXNjcmlwdG9yCiAqIGFuZCBhbm90aGVyLiBTZWUgU0VOREZJTEUoMikgbWFuIHBhZ2UgZm9yIGRldGFpbHMuCiAqCiAqIEBwYXJhbSBtaXhlZCAkb3V0X2ZkIE91dHB1dCBzdHJlYW0sIFNvY2tldCByZXNvdXJjZSwgb3IgZmlsZSBkZXNjcmlwdG9yLiBTaG91bGQgYmUgb3BlbmVkIGZvciB3cml0aW5nLgogKiBAcGFyYW0gbWl4ZWQgJGluX2ZkIElucHV0IHN0cmVhbSwgU29ja2V0IHJlc291cmNlLCBvciBmaWxlIGRlc2NyaXB0b3IuIFNob3VsZCBiZSBvcGVuZWQgZm9yIHJlYWRpbmcuCiAqIEBwYXJhbSBpbnQgJG9mZnNldCBPZmZzZXQgd2l0aGluIHRoZSBzb3VyY2UgZmlsZS4KICogQHBhcmFtIGludCAkbGVuZ3RoIE51bWJlciBvZiBieXRlcyB0byBjb3B5LgogKiBAcGFyYW0gaW50ICRwcmkgVGhlIHJlcXVlc3QgcHJpb3JpdHk6IEVJT19QUklfREVGQVVMVCwgRUlPX1BSSV9NSU4sIEVJT19QUklfTUFYLCBvciBOVUxMLgogKiBJZiBOVUxMIHBhc3NlZCwgcHJpIGludGVybmFsbHkgaXMgc2V0IHRvCiAqIEVJT19QUklfREVGQVVMVC4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKiBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBkb25lLgogKiBJdCBzaG91bGQgbWF0Y2ggdGhlIGZvbGxvd2luZyBwcm90b3R5cGU6CiAqCiAqCiAqIGRhdGEKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKgogKiByZXN1bHQKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqCiAqIHJlcQogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqCiAqCiAqCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICogQHBhcmFtIHN0cmluZyAkZGF0YSBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqIEByZXR1cm4gcmVzb3VyY2UgZWlvX3NlbmRmaWxlIHJldHVybnMgcmVxdWVzdCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX3NlbmRmaWxlKCRvdXRfZmQsICRpbl9mZCwgaW50ICRvZmZzZXQsIGludCAkbGVuZ3RoLCBpbnQgJHByaSA9IG51bGwsIGNhbGxhYmxlICRjYWxsYmFjayA9IG51bGwsIHN0cmluZyAkZGF0YSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkZGF0YSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcZWlvX3NlbmRmaWxlKCRvdXRfZmQsICRpbl9mZCwgJG9mZnNldCwgJGxlbmd0aCwgJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICB9IGVsc2VpZiAoJGNhbGxiYWNrICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxlaW9fc2VuZGZpbGUoJG91dF9mZCwgJGluX2ZkLCAkb2Zmc2V0LCAkbGVuZ3RoLCAkcHJpLCAkY2FsbGJhY2spOwogICAgfSBlbHNlaWYgKCRwcmkgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGVpb19zZW5kZmlsZSgkb3V0X2ZkLCAkaW5fZmQsICRvZmZzZXQsICRsZW5ndGgsICRwcmkpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGVpb19zZW5kZmlsZSgkb3V0X2ZkLCAkaW5fZmQsICRvZmZzZXQsICRsZW5ndGgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRWlvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGVpb19zdGF0IHJldHVybnMgZmlsZSBzdGF0dXMgaW5mb3JtYXRpb24gaW4KICogcmVzdWx0IGFyZ3VtZW50IG9mIGNhbGxiYWNrCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGggVGhlIGZpbGUgcGF0aAogKiBAcGFyYW0gaW50ICRwcmkgVGhlIHJlcXVlc3QgcHJpb3JpdHk6IEVJT19QUklfREVGQVVMVCwgRUlPX1BSSV9NSU4sIEVJT19QUklfTUFYLCBvciBOVUxMLgogKiBJZiBOVUxMIHBhc3NlZCwgcHJpIGludGVybmFsbHkgaXMgc2V0IHRvCiAqIEVJT19QUklfREVGQVVMVC4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKiBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBkb25lLgogKiBJdCBzaG91bGQgbWF0Y2ggdGhlIGZvbGxvd2luZyBwcm90b3R5cGU6CiAqCiAqCiAqIGRhdGEKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKgogKiByZXN1bHQKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqCiAqIHJlcQogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqCiAqCiAqCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICogQHBhcmFtIG1peGVkICRkYXRhIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICogQHJldHVybiByZXNvdXJjZSBlaW9fc3RhdCByZXR1cm5zIHJlcXVlc3QgcmVzb3VyY2Ugb24gc3VjY2Vzcy4gT24gc3VjY2VzcyBhc3NpZ25zIHJlc3VsdCBhcmd1bWVudCBvZgogKiBjYWxsYmFjayB0byBhbiBhcnJheS4KICogQHRocm93cyBFaW9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGVpb19zdGF0KHN0cmluZyAkcGF0aCwgaW50ICRwcmksIGNhbGxhYmxlICRjYWxsYmFjaywgJGRhdGEgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGVpb19zdGF0KCRwYXRoLCAkcHJpLCAkY2FsbGJhY2ssICRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEVpb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBlaW9fc3RhdHZmcyByZXR1cm5zIGZpbGUgc3lzdGVtIHN0YXRpc3RpY3MgaW5mb3JtYXRpb24gaW4KICogcmVzdWx0IGFyZ3VtZW50IG9mIGNhbGxiYWNrCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGggUGF0aG5hbWUgb2YgYW55IGZpbGUgd2l0aGluIHRoZSBtb3VudGVkIGZpbGUgc3lzdGVtCiAqIEBwYXJhbSBpbnQgJHByaSBUaGUgcmVxdWVzdCBwcmlvcml0eTogRUlPX1BSSV9ERUZBVUxULCBFSU9fUFJJX01JTiwgRUlPX1BSSV9NQVgsIG9yIE5VTEwuCiAqIElmIE5VTEwgcGFzc2VkLCBwcmkgaW50ZXJuYWxseSBpcyBzZXQgdG8KICogRUlPX1BSSV9ERUZBVUxULgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGRvbmUuCiAqIEl0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToKICoKICoKICogZGF0YQogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqCiAqIHJlc3VsdAogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICoKICogcmVxCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICoKICoKICoKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKiBAcGFyYW0gbWl4ZWQgJGRhdGEgaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIGVpb19zdGF0dmZzIHJldHVybnMgcmVxdWVzdCByZXNvdXJjZSBvbiBzdWNjZXNzLiBPbiBzdWNjZXNzIGFzc2lnbnMgcmVzdWx0IGFyZ3VtZW50IG9mCiAqIGNhbGxiYWNrIHRvIGFuIGFycmF5LgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX3N0YXR2ZnMoc3RyaW5nICRwYXRoLCBpbnQgJHByaSwgY2FsbGFibGUgJGNhbGxiYWNrLCAkZGF0YSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkZGF0YSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcZWlvX3N0YXR2ZnMoJHBhdGgsICRwcmksICRjYWxsYmFjaywgJGRhdGEpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGVpb19zdGF0dmZzKCRwYXRoLCAkcHJpLCAkY2FsbGJhY2spOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRWlvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGVpb19zeW1saW5rIGNyZWF0ZXMgYSBzeW1ib2xpYyBsaW5rCiAqIG5ld19wYXRoIHRvIHBhdGguCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGggU291cmNlIHBhdGgKICogQHBhcmFtIHN0cmluZyAkbmV3X3BhdGggVGFyZ2V0IHBhdGgKICogQHBhcmFtIGludCAkcHJpIFRoZSByZXF1ZXN0IHByaW9yaXR5OiBFSU9fUFJJX0RFRkFVTFQsIEVJT19QUklfTUlOLCBFSU9fUFJJX01BWCwgb3IgTlVMTC4KICogSWYgTlVMTCBwYXNzZWQsIHByaSBpbnRlcm5hbGx5IGlzIHNldCB0bwogKiBFSU9fUFJJX0RFRkFVTFQuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICogY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaXMgZG9uZS4KICogSXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOgogKgogKgogKiBkYXRhCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICoKICogcmVzdWx0CiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKgogKiByZXEKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKgogKgogKgogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqIEBwYXJhbSBtaXhlZCAkZGF0YSBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqIEByZXR1cm4gcmVzb3VyY2UgZWlvX3N5bWxpbmsgcmV0dXJucyByZXF1ZXN0IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRWlvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBlaW9fc3ltbGluayhzdHJpbmcgJHBhdGgsIHN0cmluZyAkbmV3X3BhdGgsIGludCAkcHJpID0gRUlPX1BSSV9ERUZBVUxULCBjYWxsYWJsZSAkY2FsbGJhY2sgPSBudWxsLCAkZGF0YSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZWlvX3N5bWxpbmsoJHBhdGgsICRuZXdfcGF0aCwgJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZWlvX3N5bmNfZmlsZV9yYW5nZSBwZXJtaXRzIGZpbmUgY29udHJvbCB3aGVuIHN5bmNocm9uaXppbmcgdGhlIG9wZW4gZmlsZSByZWZlcnJlZCB0byBieSB0aGUgZmlsZQogKiBkZXNjcmlwdG9yIGZkIHdpdGggZGlzay4KICoKICogQHBhcmFtIG1peGVkICRmZCBGaWxlIGRlc2NyaXB0b3IKICogQHBhcmFtIGludCAkb2Zmc2V0IFRoZSBzdGFydGluZyBieXRlIG9mIHRoZSBmaWxlIHJhbmdlIHRvIGJlIHN5bmNocm9uaXplZAogKiBAcGFyYW0gaW50ICRuYnl0ZXMgU3BlY2lmaWVzIHRoZSBsZW5ndGggb2YgdGhlIHJhbmdlIHRvIGJlIHN5bmNocm9uaXplZCwgaW4gYnl0ZXMuIElmCiAqIG5ieXRlcyBpcyB6ZXJvLCB0aGVuIGFsbCBieXRlcyBmcm9tIG9mZnNldCB0aHJvdWdoCiAqIHRvIHRoZSBlbmQgb2YgZmlsZSBhcmUgc3luY2hyb25pemVkLgogKiBAcGFyYW0gaW50ICRmbGFncyBBIGJpdC1tYXNrLiBDYW4gaW5jbHVkZSBhbnkgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAqIEVJT19TWU5DX0ZJTEVfUkFOR0VfV0FJVF9CRUZPUkUsCiAqIEVJT19TWU5DX0ZJTEVfUkFOR0VfV1JJVEUsCiAqIEVJT19TWU5DX0ZJTEVfUkFOR0VfV0FJVF9BRlRFUi4gVGhlc2UgZmxhZ3MgaGF2ZQogKiB0aGUgc2FtZSBtZWFuaW5nIGFzIHRoZWlyIFNZTkNfRklMRV9SQU5HRV8qCiAqIGNvdW50ZXJwYXJ0cyhzZWUgU1lOQ19GSUxFX1JBTkdFKDIpIG1hbiBwYWdlKS4KICogQHBhcmFtIGludCAkcHJpIFRoZSByZXF1ZXN0IHByaW9yaXR5OiBFSU9fUFJJX0RFRkFVTFQsIEVJT19QUklfTUlOLCBFSU9fUFJJX01BWCwgb3IgTlVMTC4KICogSWYgTlVMTCBwYXNzZWQsIHByaSBpbnRlcm5hbGx5IGlzIHNldCB0bwogKiBFSU9fUFJJX0RFRkFVTFQuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICogY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaXMgZG9uZS4KICogSXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOgogKgogKgogKiBkYXRhCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICoKICogcmVzdWx0CiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKgogKiByZXEKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKgogKgogKgogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqIEBwYXJhbSBtaXhlZCAkZGF0YSBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqIEByZXR1cm4gcmVzb3VyY2UgZWlvX3N5bmNfZmlsZV9yYW5nZSByZXR1cm5zIHJlcXVlc3QgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICogQHRocm93cyBFaW9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGVpb19zeW5jX2ZpbGVfcmFuZ2UoJGZkLCBpbnQgJG9mZnNldCwgaW50ICRuYnl0ZXMsIGludCAkZmxhZ3MsIGludCAkcHJpID0gRUlPX1BSSV9ERUZBVUxULCBjYWxsYWJsZSAkY2FsbGJhY2sgPSBudWxsLCAkZGF0YSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZWlvX3N5bmNfZmlsZV9yYW5nZSgkZmQsICRvZmZzZXQsICRuYnl0ZXMsICRmbGFncywgJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICoKICoKICogQHBhcmFtIGludCAkcHJpCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICogQHBhcmFtIG1peGVkICRkYXRhCiAqIEByZXR1cm4gcmVzb3VyY2UgZWlvX3N5bmMgcmV0dXJucyByZXF1ZXN0IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRWlvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBlaW9fc3luYyhpbnQgJHByaSA9IEVJT19QUklfREVGQVVMVCwgY2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCwgJGRhdGEgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGVpb19zeW5jKCRwcmksICRjYWxsYmFjaywgJGRhdGEpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRWlvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSBtaXhlZCAkZmQgRmlsZSBkZXNjcmlwdG9yCiAqIEBwYXJhbSBpbnQgJHByaSBUaGUgcmVxdWVzdCBwcmlvcml0eTogRUlPX1BSSV9ERUZBVUxULCBFSU9fUFJJX01JTiwgRUlPX1BSSV9NQVgsIG9yIE5VTEwuCiAqIElmIE5VTEwgcGFzc2VkLCBwcmkgaW50ZXJuYWxseSBpcyBzZXQgdG8KICogRUlPX1BSSV9ERUZBVUxULgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGRvbmUuCiAqIEl0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToKICoKICoKICogZGF0YQogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqCiAqIHJlc3VsdAogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICoKICogcmVxCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICoKICoKICoKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKiBAcGFyYW0gbWl4ZWQgJGRhdGEgaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIGVpb19zeW5jZnMgcmV0dXJucyByZXF1ZXN0IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRWlvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBlaW9fc3luY2ZzKCRmZCwgaW50ICRwcmkgPSBFSU9fUFJJX0RFRkFVTFQsIGNhbGxhYmxlICRjYWxsYmFjayA9IG51bGwsICRkYXRhID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxlaW9fc3luY2ZzKCRmZCwgJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZWlvX3RydW5jYXRlIGNhdXNlcyB0aGUgcmVndWxhciBmaWxlIG5hbWVkIGJ5IHBhdGggdG8gYmUgdHJ1bmNhdGVkIHRvCiAqIGEgc2l6ZSBvZiBwcmVjaXNlbHkgbGVuZ3RoIGJ5dGVzCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGggRmlsZSBwYXRoCiAqIEBwYXJhbSBpbnQgJG9mZnNldCBPZmZzZXQgZnJvbSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuCiAqIEBwYXJhbSBpbnQgJHByaSBUaGUgcmVxdWVzdCBwcmlvcml0eTogRUlPX1BSSV9ERUZBVUxULCBFSU9fUFJJX01JTiwgRUlPX1BSSV9NQVgsIG9yIE5VTEwuCiAqIElmIE5VTEwgcGFzc2VkLCBwcmkgaW50ZXJuYWxseSBpcyBzZXQgdG8KICogRUlPX1BSSV9ERUZBVUxULgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGRvbmUuCiAqIEl0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToKICoKICoKICogZGF0YQogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqCiAqIHJlc3VsdAogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICoKICogcmVxCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICoKICoKICoKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKiBAcGFyYW0gbWl4ZWQgJGRhdGEgaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIGVpb19idXN5IHJldHVybnMgcmVxdWVzdCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX3RydW5jYXRlKHN0cmluZyAkcGF0aCwgaW50ICRvZmZzZXQgPSAwLCBpbnQgJHByaSA9IEVJT19QUklfREVGQVVMVCwgY2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCwgJGRhdGEgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGVpb190cnVuY2F0ZSgkcGF0aCwgJG9mZnNldCwgJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZWlvX3VubGluayBkZWxldGVzICBhICBuYW1lIGZyb20gdGhlIGZpbGUgc3lzdGVtLgogKgogKiBAcGFyYW0gc3RyaW5nICRwYXRoIFBhdGggdG8gZmlsZQogKiBAcGFyYW0gaW50ICRwcmkgVGhlIHJlcXVlc3QgcHJpb3JpdHk6IEVJT19QUklfREVGQVVMVCwgRUlPX1BSSV9NSU4sIEVJT19QUklfTUFYLCBvciBOVUxMLgogKiBJZiBOVUxMIHBhc3NlZCwgcHJpIGludGVybmFsbHkgaXMgc2V0IHRvCiAqIEVJT19QUklfREVGQVVMVC4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKiBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBkb25lLgogKiBJdCBzaG91bGQgbWF0Y2ggdGhlIGZvbGxvd2luZyBwcm90b3R5cGU6CiAqCiAqCiAqIGRhdGEKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKgogKiByZXN1bHQKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqCiAqIHJlcQogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqCiAqCiAqCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICogQHBhcmFtIG1peGVkICRkYXRhIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICogQHJldHVybiByZXNvdXJjZSBlaW9fdW5saW5rIHJldHVybnMgcmVxdWVzdCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX3VubGluayhzdHJpbmcgJHBhdGgsIGludCAkcHJpID0gRUlPX1BSSV9ERUZBVUxULCBjYWxsYWJsZSAkY2FsbGJhY2sgPSBudWxsLCAkZGF0YSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZWlvX3VubGluaygkcGF0aCwgJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICoKICoKICogQHBhcmFtIHN0cmluZyAkcGF0aCBQYXRoIHRvIHRoZSBmaWxlLgogKiBAcGFyYW0gZmxvYXQgJGF0aW1lIEFjY2VzcyB0aW1lCiAqIEBwYXJhbSBmbG9hdCAkbXRpbWUgTW9kaWZpY2F0aW9uIHRpbWUKICogQHBhcmFtIGludCAkcHJpIFRoZSByZXF1ZXN0IHByaW9yaXR5OiBFSU9fUFJJX0RFRkFVTFQsIEVJT19QUklfTUlOLCBFSU9fUFJJX01BWCwgb3IgTlVMTC4KICogSWYgTlVMTCBwYXNzZWQsIHByaSBpbnRlcm5hbGx5IGlzIHNldCB0bwogKiBFSU9fUFJJX0RFRkFVTFQuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICogY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaXMgZG9uZS4KICogSXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOgogKgogKgogKiBkYXRhCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICoKICogcmVzdWx0CiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKgogKiByZXEKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKgogKgogKgogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqIEBwYXJhbSBtaXhlZCAkZGF0YSBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqIEByZXR1cm4gcmVzb3VyY2UgZWlvX3V0aW1lIHJldHVybnMgcmVxdWVzdCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX3V0aW1lKHN0cmluZyAkcGF0aCwgZmxvYXQgJGF0aW1lLCBmbG9hdCAkbXRpbWUsIGludCAkcHJpID0gRUlPX1BSSV9ERUZBVUxULCBjYWxsYWJsZSAkY2FsbGJhY2sgPSBudWxsLCAkZGF0YSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZWlvX3V0aW1lKCRwYXRoLCAkYXRpbWUsICRtdGltZSwgJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZWlvX3dyaXRlIHdyaXRlcyB1cCB0byBsZW5ndGgKICogYnl0ZXMgZnJvbSBzdHIgYXQgb2Zmc2V0CiAqIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuCiAqCiAqIEBwYXJhbSBtaXhlZCAkZmQgU3RyZWFtLCBTb2NrZXQgcmVzb3VyY2UsIG9yIG51bWVyaWMgZmlsZSBkZXNjcmlwdG9yLCBlLmcuIHJldHVybmVkIGJ5IGVpb19vcGVuCiAqIEBwYXJhbSBzdHJpbmcgJHN0ciBTb3VyY2Ugc3RyaW5nCiAqIEBwYXJhbSBpbnQgJGxlbmd0aCBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byB3cml0ZS4KICogQHBhcmFtIGludCAkb2Zmc2V0IE9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgZmlsZS4KICogQHBhcmFtIGludCAkcHJpIFRoZSByZXF1ZXN0IHByaW9yaXR5OiBFSU9fUFJJX0RFRkFVTFQsIEVJT19QUklfTUlOLCBFSU9fUFJJX01BWCwgb3IgTlVMTC4KICogSWYgTlVMTCBwYXNzZWQsIHByaSBpbnRlcm5hbGx5IGlzIHNldCB0bwogKiBFSU9fUFJJX0RFRkFVTFQuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICogY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaXMgZG9uZS4KICogSXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOgogKgogKgogKiBkYXRhCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICoKICogcmVzdWx0CiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKgogKiByZXEKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKgogKgogKgogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqIEBwYXJhbSBtaXhlZCAkZGF0YSBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqIEByZXR1cm4gcmVzb3VyY2UgZWlvX3dyaXRlIHJldHVybnMgcmVxdWVzdCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX3dyaXRlKCRmZCwgc3RyaW5nICRzdHIsIGludCAkbGVuZ3RoID0gMCwgaW50ICRvZmZzZXQgPSAwLCBpbnQgJHByaSA9IEVJT19QUklfREVGQVVMVCwgY2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCwgJGRhdGEgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGVpb193cml0ZSgkZmQsICRzdHIsICRsZW5ndGgsICRvZmZzZXQsICRwcmksICRjYWxsYmFjaywgJGRhdGEpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRWlvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/errorfunc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xFcnJvcmZ1bmNFeGNlcHRpb247CgovKioKICogU2VuZHMgYW4gZXJyb3IgbWVzc2FnZSB0byB0aGUgd2ViIHNlcnZlcidzIGVycm9yIGxvZyBvciB0byBhIGZpbGUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UgdGhhdCBzaG91bGQgYmUgbG9nZ2VkLgogKiBAcGFyYW0gaW50ICRtZXNzYWdlX3R5cGUgU2F5cyB3aGVyZSB0aGUgZXJyb3Igc2hvdWxkIGdvLiBUaGUgcG9zc2libGUgbWVzc2FnZSB0eXBlcyBhcmUgYXMKICogZm9sbG93czoKICoKICoKICogZXJyb3JfbG9nIGxvZyB0eXBlcwogKgogKgogKgogKiAwCiAqCiAqIG1lc3NhZ2UgaXMgc2VudCB0byBQSFAncyBzeXN0ZW0gbG9nZ2VyLCB1c2luZwogKiB0aGUgT3BlcmF0aW5nIFN5c3RlbSdzIHN5c3RlbSBsb2dnaW5nIG1lY2hhbmlzbSBvciBhIGZpbGUsIGRlcGVuZGluZwogKiBvbiB3aGF0IHRoZSBlcnJvcl9sb2cKICogY29uZmlndXJhdGlvbiBkaXJlY3RpdmUgaXMgc2V0IHRvLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBvcHRpb24uCiAqCiAqCiAqCiAqIDEKICoKICogbWVzc2FnZSBpcyBzZW50IGJ5IGVtYWlsIHRvIHRoZSBhZGRyZXNzIGluCiAqIHRoZSBkZXN0aW5hdGlvbiBwYXJhbWV0ZXIuICBUaGlzIGlzIHRoZSBvbmx5CiAqIG1lc3NhZ2UgdHlwZSB3aGVyZSB0aGUgZm91cnRoIHBhcmFtZXRlciwKICogZXh0cmFfaGVhZGVycyBpcyB1c2VkLgogKgogKgogKgogKiAyCiAqCiAqIE5vIGxvbmdlciBhbiBvcHRpb24uCiAqCiAqCiAqCiAqIDMKICoKICogbWVzc2FnZSBpcyBhcHBlbmRlZCB0byB0aGUgZmlsZQogKiBkZXN0aW5hdGlvbi4gQSBuZXdsaW5lIGlzIG5vdCBhdXRvbWF0aWNhbGx5CiAqIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIG1lc3NhZ2Ugc3RyaW5nLgogKgogKgogKgogKiA0CiAqCiAqIG1lc3NhZ2UgaXMgc2VudCBkaXJlY3RseSB0byB0aGUgU0FQSSBsb2dnaW5nCiAqIGhhbmRsZXIuCiAqCiAqCiAqCiAqCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRlc3RpbmF0aW9uIFRoZSBkZXN0aW5hdGlvbi4gSXRzIG1lYW5pbmcgZGVwZW5kcyBvbiB0aGUKICogbWVzc2FnZV90eXBlIHBhcmFtZXRlciBhcyBkZXNjcmliZWQgYWJvdmUuCiAqIEBwYXJhbSBzdHJpbmcgJGV4dHJhX2hlYWRlcnMgVGhlIGV4dHJhIGhlYWRlcnMuIEl0J3MgdXNlZCB3aGVuIHRoZSBtZXNzYWdlX3R5cGUKICogcGFyYW1ldGVyIGlzIHNldCB0byAxLgogKiBUaGlzIG1lc3NhZ2UgdHlwZSB1c2VzIHRoZSBzYW1lIGludGVybmFsIGZ1bmN0aW9uIGFzCiAqIG1haWwgZG9lcy4KICogQHRocm93cyBFcnJvcmZ1bmNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGVycm9yX2xvZyhzdHJpbmcgJG1lc3NhZ2UsIGludCAkbWVzc2FnZV90eXBlID0gMCwgc3RyaW5nICRkZXN0aW5hdGlvbiA9IG51bGwsIHN0cmluZyAkZXh0cmFfaGVhZGVycyA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkZXh0cmFfaGVhZGVycyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcZXJyb3JfbG9nKCRtZXNzYWdlLCAkbWVzc2FnZV90eXBlLCAkZGVzdGluYXRpb24sICRleHRyYV9oZWFkZXJzKTsKICAgIH0gZWxzZWlmICgkZGVzdGluYXRpb24gIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGVycm9yX2xvZygkbWVzc2FnZSwgJG1lc3NhZ2VfdHlwZSwgJGRlc3RpbmF0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxlcnJvcl9sb2coJG1lc3NhZ2UsICRtZXNzYWdlX3R5cGUpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRXJyb3JmdW5jRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/ApacheException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEFwYWNoZUV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/ApcuException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEFwY3VFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/ArrayException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEFycmF5RXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/Bzip2Exception.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEJ6aXAyRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/CalendarException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIENhbGVuZGFyRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/ClassobjException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIENsYXNzb2JqRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/ComException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIENvbUV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/CubridException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEN1YnJpZEV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/DatetimeException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIERhdGV0aW1lRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/DirException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIERpckV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/EioException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEVpb0V4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/ErrorfuncException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEVycm9yZnVuY0V4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/ExecException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEV4ZWNFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/FileinfoException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEZpbGVpbmZvRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/FilesystemException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEZpbGVzeXN0ZW1FeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/FilterException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEZpbHRlckV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/FpmException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEZwbUV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/FtpException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEZ0cEV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/FunchandException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEZ1bmNoYW5kRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/GmpException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEdtcEV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/GnupgException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEdudXBnRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/HashException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEhhc2hFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/IbaseException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEliYXNlRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/IbmDb2Exception.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIElibURiMkV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/IconvException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEljb252RXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/ImageException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEltYWdlRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/ImapException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEltYXBFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/InfoException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEluZm9FeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/IngresiiException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEluZ3Jlc2lpRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/InotifyException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIElub3RpZnlFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/LdapException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIExkYXBFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/LibxmlException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIExpYnhtbEV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/LzfException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEx6ZkV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/MailparseException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIE1haWxwYXJzZUV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/MbstringException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIE1ic3RyaW5nRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/MiscException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIE1pc2NFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/MsqlException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIE1zcWxFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/MysqlException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIE15c3FsRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/MysqliException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIE15c3FsaUV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/MysqlndMsException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIE15c3FsbmRNc0V4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/MysqlndQcException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIE15c3FsbmRRY0V4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/NetworkException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIE5ldHdvcmtFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/Oci8Exception.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIE9jaThFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/OpcacheException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIE9wY2FjaGVFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/OutcontrolException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIE91dGNvbnRyb2xFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/PasswordException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFBhc3N3b3JkRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/PcntlException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFBjbnRsRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/PdfException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFBkZkV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/PgsqlException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFBnc3FsRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/PosixException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFBvc2l4RXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/PsException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFBzRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/PspellException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFBzcGVsbEV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/ReadlineException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFJlYWRsaW5lRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/RpminfoException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFJwbWluZm9FeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/RrdException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFJyZEV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/SemException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFNlbUV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/SessionException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFNlc3Npb25FeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/ShmopException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFNobW9wRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/SimplexmlException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFNpbXBsZXhtbEV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/SocketsException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFNvY2tldHNFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/SodiumException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFNvZGl1bUV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/SolrException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFNvbHJFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/SplException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFNwbEV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/SqlsrvException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFNxbHNydkV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/SsdeepException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFNzZGVlcEV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/Ssh2Exception.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFNzaDJFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/StreamException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFN0cmVhbUV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/StringsException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFN0cmluZ3NFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/SwooleException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFN3b29sZUV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/UodbcException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFVvZGJjRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/UopzException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFVvcHpFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/UrlException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFVybEV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/VarException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFZhckV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/XdiffException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFhkaWZmRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/XmlException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFhtbEV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/XmlrpcException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFhtbHJwY0V4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/YamlException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFlhbWxFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/YazException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFlhekV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/ZipException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFppcEV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/ZlibException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFpsaWJFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/exec.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xFeGVjRXhjZXB0aW9uOwoKLyoqCiAqIHByb2NfZ2V0X3N0YXR1cyBmZXRjaGVzIGRhdGEgYWJvdXQgYQogKiBwcm9jZXNzIG9wZW5lZCB1c2luZyBwcm9jX29wZW4uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHJvY2VzcyBUaGUgcHJvY19vcGVuIHJlc291cmNlIHRoYXQgd2lsbAogKiBiZSBldmFsdWF0ZWQuCiAqIEByZXR1cm4gYXJyYXkgQW4gYXJyYXkgb2YgY29sbGVjdGVkIGluZm9ybWF0aW9uIG9uIHN1Y2Nlc3MuIFRoZSByZXR1cm5lZCBhcnJheSBjb250YWlucyB0aGUgZm9sbG93aW5nIGVsZW1lbnRzOgogKgogKgogKgogKgogKiBlbGVtZW50dHlwZWRlc2NyaXB0aW9uCiAqCiAqCiAqCiAqIGNvbW1hbmQKICogc3RyaW5nCiAqCiAqIFRoZSBjb21tYW5kIHN0cmluZyB0aGF0IHdhcyBwYXNzZWQgdG8gcHJvY19vcGVuLgogKgogKgogKgogKiBwaWQKICogaW50CiAqIHByb2Nlc3MgaWQKICoKICoKICogcnVubmluZwogKiBib29sCiAqCiAqIFRSVUUgaWYgdGhlIHByb2Nlc3MgaXMgc3RpbGwgcnVubmluZywgRkFMU0UgaWYgaXQgaGFzCiAqIHRlcm1pbmF0ZWQuCiAqCiAqCiAqCiAqIHNpZ25hbGVkCiAqIGJvb2wKICoKICogVFJVRSBpZiB0aGUgY2hpbGQgcHJvY2VzcyBoYXMgYmVlbiB0ZXJtaW5hdGVkIGJ5CiAqIGFuIHVuY2F1Z2h0IHNpZ25hbC4gQWx3YXlzIHNldCB0byBGQUxTRSBvbiBXaW5kb3dzLgogKgogKgogKgogKiBzdG9wcGVkCiAqIGJvb2wKICoKICogVFJVRSBpZiB0aGUgY2hpbGQgcHJvY2VzcyBoYXMgYmVlbiBzdG9wcGVkIGJ5IGEKICogc2lnbmFsLiBBbHdheXMgc2V0IHRvIEZBTFNFIG9uIFdpbmRvd3MuCiAqCiAqCiAqCiAqIGV4aXRjb2RlCiAqIGludAogKgogKiBUaGUgZXhpdCBjb2RlIHJldHVybmVkIGJ5IHRoZSBwcm9jZXNzICh3aGljaCBpcyBvbmx5CiAqIG1lYW5pbmdmdWwgaWYgcnVubmluZyBpcyBGQUxTRSkuCiAqIE9ubHkgZmlyc3QgY2FsbCBvZiB0aGlzIGZ1bmN0aW9uIHJldHVybiByZWFsIHZhbHVlLCBuZXh0IGNhbGxzIHJldHVybgogKiAtMS4KICoKICoKICoKICogdGVybXNpZwogKiBpbnQKICoKICogVGhlIG51bWJlciBvZiB0aGUgc2lnbmFsIHRoYXQgY2F1c2VkIHRoZSBjaGlsZCBwcm9jZXNzIHRvIHRlcm1pbmF0ZQogKiBpdHMgZXhlY3V0aW9uIChvbmx5IG1lYW5pbmdmdWwgaWYgc2lnbmFsZWQgaXMgVFJVRSkuCiAqCiAqCiAqCiAqIHN0b3BzaWcKICogaW50CiAqCiAqIFRoZSBudW1iZXIgb2YgdGhlIHNpZ25hbCB0aGF0IGNhdXNlZCB0aGUgY2hpbGQgcHJvY2VzcyB0byBzdG9wIGl0cwogKiBleGVjdXRpb24gKG9ubHkgbWVhbmluZ2Z1bCBpZiBzdG9wcGVkIGlzIFRSVUUpLgogKgogKgogKgogKgogKgogKiBAdGhyb3dzIEV4ZWNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHByb2NfZ2V0X3N0YXR1cygkcHJvY2Vzcyk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHJvY19nZXRfc3RhdHVzKCRwcm9jZXNzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEV4ZWNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogcHJvY19uaWNlIGNoYW5nZXMgdGhlIHByaW9yaXR5IG9mIHRoZSBjdXJyZW50CiAqIHByb2Nlc3MgYnkgdGhlIGFtb3VudCBzcGVjaWZpZWQgaW4gaW5jcmVtZW50LiBBCiAqIHBvc2l0aXZlIGluY3JlbWVudCB3aWxsIGxvd2VyIHRoZSBwcmlvcml0eSBvZiB0aGUKICogY3VycmVudCBwcm9jZXNzLCB3aGVyZWFzIGEgbmVnYXRpdmUgaW5jcmVtZW50CiAqIHdpbGwgcmFpc2UgdGhlIHByaW9yaXR5LgogKgogKiBwcm9jX25pY2UgaXMgbm90IHJlbGF0ZWQgdG8KICogcHJvY19vcGVuIGFuZCBpdHMgYXNzb2NpYXRlZCBmdW5jdGlvbnMgaW4gYW55IHdheS4KICoKICogQHBhcmFtIGludCAkaW5jcmVtZW50IFRoZSBuZXcgcHJpb3JpdHkgdmFsdWUsIHRoZSB2YWx1ZSBvZiB0aGlzIG1heSBkaWZmZXIgb24gcGxhdGZvcm1zLgogKgogKiBPbiBVbml4LCBhIGxvdyB2YWx1ZSwgc3VjaCBhcyAtMjAgbWVhbnMgaGlnaCBwcmlvcml0eQogKiB3aGVyYXMgYSBwb3NpdGl2ZSB2YWx1ZSBoYXZlIGEgbG93ZXIgcHJpb3JpdHkuCiAqCiAqIEZvciBXaW5kb3dzIHRoZSBpbmNyZW1lbnQgcGFyYW1ldGVyIGhhdmUgdGhlCiAqIGZvbGxvd2luZyBtZWFuaW5nczoKICogQHRocm93cyBFeGVjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwcm9jX25pY2UoaW50ICRpbmNyZW1lbnQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHJvY19uaWNlKCRpbmNyZW1lbnQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRXhlY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogc3lzdGVtIGlzIGp1c3QgbGlrZSB0aGUgQyB2ZXJzaW9uIG9mIHRoZQogKiBmdW5jdGlvbiBpbiB0aGF0IGl0IGV4ZWN1dGVzIHRoZSBnaXZlbgogKiBjb21tYW5kIGFuZCBvdXRwdXRzIHRoZSByZXN1bHQuCiAqCiAqIFRoZSBzeXN0ZW0gY2FsbCBhbHNvIHRyaWVzIHRvIGF1dG9tYXRpY2FsbHkKICogZmx1c2ggdGhlIHdlYiBzZXJ2ZXIncyBvdXRwdXQgYnVmZmVyIGFmdGVyIGVhY2ggbGluZSBvZiBvdXRwdXQgaWYKICogUEhQIGlzIHJ1bm5pbmcgYXMgYSBzZXJ2ZXIgbW9kdWxlLgogKgogKiBJZiB5b3UgbmVlZCB0byBleGVjdXRlIGEgY29tbWFuZCBhbmQgaGF2ZSBhbGwgdGhlIGRhdGEgZnJvbSB0aGUKICogY29tbWFuZCBwYXNzZWQgZGlyZWN0bHkgYmFjayB3aXRob3V0IGFueSBpbnRlcmZlcmVuY2UsIHVzZSB0aGUKICogcGFzc3RocnUgZnVuY3Rpb24uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGNvbW1hbmQgVGhlIGNvbW1hbmQgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkLgogKiBAcGFyYW0gaW50ICRyZXR1cm5fdmFyIElmIHRoZSByZXR1cm5fdmFyIGFyZ3VtZW50IGlzIHByZXNlbnQsIHRoZW4gdGhlCiAqIHJldHVybiBzdGF0dXMgb2YgdGhlIGV4ZWN1dGVkIGNvbW1hbmQgd2lsbCBiZSB3cml0dGVuIHRvIHRoaXMKICogdmFyaWFibGUuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIGxhc3QgbGluZSBvZiB0aGUgY29tbWFuZCBvdXRwdXQgb24gc3VjY2Vzcy4KICogQHRocm93cyBFeGVjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzeXN0ZW0oc3RyaW5nICRjb21tYW5kLCBpbnQgJiRyZXR1cm5fdmFyID0gbnVsbCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHN5c3RlbSgkY29tbWFuZCwgJHJldHVybl92YXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRXhlY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/fileinfo.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xGaWxlaW5mb0V4Y2VwdGlvbjsKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGNsb3NlcyB0aGUgcmVzb3VyY2Ugb3BlbmVkIGJ5IGZpbmZvX29wZW4uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZmluZm8gRmlsZWluZm8gcmVzb3VyY2UgcmV0dXJuZWQgYnkgZmluZm9fb3Blbi4KICogQHRocm93cyBGaWxlaW5mb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZmluZm9fY2xvc2UoJGZpbmZvKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZpbmZvX2Nsb3NlKCRmaW5mbyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGaWxlaW5mb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUHJvY2VkdXJhbCBzdHlsZQogKgogKiBPYmplY3Qgb3JpZW50ZWQgc3R5bGUgKGNvbnN0cnVjdG9yKToKICoKICogVGhpcyBmdW5jdGlvbiBvcGVucyBhIG1hZ2ljIGRhdGFiYXNlIGFuZCByZXR1cm5zIGl0cyByZXNvdXJjZS4KICoKICogQHBhcmFtIGludCAkb3B0aW9ucyBPbmUgb3IgZGlzanVuY3Rpb24gb2YgbW9yZSBGaWxlaW5mbwogKiBjb25zdGFudHMuCiAqIEBwYXJhbSBzdHJpbmcgJG1hZ2ljX2ZpbGUgTmFtZSBvZiBhIG1hZ2ljIGRhdGFiYXNlIGZpbGUsIHVzdWFsbHkgc29tZXRoaW5nIGxpa2UKICogL3BhdGgvdG8vbWFnaWMubWltZS4gSWYgbm90IHNwZWNpZmllZCwgdGhlCiAqIE1BR0lDIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHVzZWQuIElmIHRoZQogKiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpc24ndCBzZXQsIHRoZW4gUEhQJ3MgYnVuZGxlZCBtYWdpYyBkYXRhYmFzZSB3aWxsCiAqIGJlIHVzZWQuCiAqCiAqIFBhc3NpbmcgTlVMTCBvciBhbiBlbXB0eSBzdHJpbmcgd2lsbCBiZSBlcXVpdmFsZW50IHRvIHRoZSBkZWZhdWx0CiAqIHZhbHVlLgogKiBAcmV0dXJuIHJlc291cmNlIChQcm9jZWR1cmFsIHN0eWxlIG9ubHkpCiAqIFJldHVybnMgYSBtYWdpYyBkYXRhYmFzZSByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEZpbGVpbmZvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmaW5mb19vcGVuKGludCAkb3B0aW9ucyA9IEZJTEVJTkZPX05PTkUsIHN0cmluZyAkbWFnaWNfZmlsZSA9ICIiKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZpbmZvX29wZW4oJG9wdGlvbnMsICRtYWdpY19maWxlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVpbmZvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJldHVybnMgdGhlIE1JTUUgY29udGVudCB0eXBlIGZvciBhIGZpbGUgYXMgZGV0ZXJtaW5lZCBieSB1c2luZwogKiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBtYWdpYy5taW1lIGZpbGUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFBhdGggdG8gdGhlIHRlc3RlZCBmaWxlLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBjb250ZW50IHR5cGUgaW4gTUlNRSBmb3JtYXQsIGxpa2UKICogdGV4dC9wbGFpbiBvciBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0uCiAqIEB0aHJvd3MgRmlsZWluZm9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1pbWVfY29udGVudF90eXBlKHN0cmluZyAkZmlsZW5hbWUpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtaW1lX2NvbnRlbnRfdHlwZSgkZmlsZW5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZWluZm9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/filesystem.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xGaWxlc3lzdGVtRXhjZXB0aW9uOwoKLyoqCiAqIEF0dGVtcHRzIHRvIGNoYW5nZSB0aGUgZ3JvdXAgb2YgdGhlIGZpbGUgZmlsZW5hbWUKICogdG8gZ3JvdXAuCiAqCiAqIE9ubHkgdGhlIHN1cGVydXNlciBtYXkgY2hhbmdlIHRoZSBncm91cCBvZiBhIGZpbGUgYXJiaXRyYXJpbHk7IG90aGVyIHVzZXJzCiAqIG1heSBjaGFuZ2UgdGhlIGdyb3VwIG9mIGEgZmlsZSB0byBhbnkgZ3JvdXAgb2Ygd2hpY2ggdGhhdCB1c2VyIGlzIGEgbWVtYmVyLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBQYXRoIHRvIHRoZSBmaWxlLgogKiBAcGFyYW0gc3RyaW5nfGludCAkZ3JvdXAgQSBncm91cCBuYW1lIG9yIG51bWJlci4KICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjaGdycChzdHJpbmcgJGZpbGVuYW1lLCAkZ3JvdXApOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcY2hncnAoJGZpbGVuYW1lLCAkZ3JvdXApOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQXR0ZW1wdHMgdG8gY2hhbmdlIHRoZSBtb2RlIG9mIHRoZSBzcGVjaWZpZWQgZmlsZSB0byB0aGF0IGdpdmVuIGluCiAqIG1vZGUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFBhdGggdG8gdGhlIGZpbGUuCiAqIEBwYXJhbSBpbnQgJG1vZGUgTm90ZSB0aGF0IG1vZGUgaXMgbm90IGF1dG9tYXRpY2FsbHkKICogYXNzdW1lZCB0byBiZSBhbiBvY3RhbCB2YWx1ZSwgc28gdG8gZW5zdXJlIHRoZSBleHBlY3RlZCBvcGVyYXRpb24sCiAqIHlvdSBuZWVkIHRvIHByZWZpeCBtb2RlIHdpdGggYSB6ZXJvICgwKS4KICogU3RyaW5ncyBzdWNoIGFzICJnK3ciIHdpbGwgbm90IHdvcmsgcHJvcGVybHkuCiAqCiAqCiAqCiAqCiAqIF1dPgogKgogKgogKgogKiBUaGUgbW9kZSBwYXJhbWV0ZXIgY29uc2lzdHMgb2YgdGhyZWUgb2N0YWwKICogbnVtYmVyIGNvbXBvbmVudHMgc3BlY2lmeWluZyBhY2Nlc3MgcmVzdHJpY3Rpb25zIGZvciB0aGUgb3duZXIsCiAqIHRoZSB1c2VyIGdyb3VwIGluIHdoaWNoIHRoZSBvd25lciBpcyBpbiwgYW5kIHRvIGV2ZXJ5Ym9keSBlbHNlIGluCiAqIHRoaXMgb3JkZXIuIE9uZSBjb21wb25lbnQgY2FuIGJlIGNvbXB1dGVkIGJ5IGFkZGluZyB1cCB0aGUgbmVlZGVkCiAqIHBlcm1pc3Npb25zIGZvciB0aGF0IHRhcmdldCB1c2VyIGJhc2UuIE51bWJlciAxIG1lYW5zIHRoYXQgeW91CiAqIGdyYW50IGV4ZWN1dGUgcmlnaHRzLCBudW1iZXIgMiBtZWFucyB0aGF0IHlvdSBtYWtlIHRoZSBmaWxlCiAqIHdyaXRlYWJsZSwgbnVtYmVyIDQgbWVhbnMgdGhhdCB5b3UgbWFrZSB0aGUgZmlsZSByZWFkYWJsZS4gQWRkCiAqIHVwIHRoZXNlIG51bWJlcnMgdG8gc3BlY2lmeSBuZWVkZWQgcmlnaHRzLiBZb3UgY2FuIGFsc28gcmVhZCBtb3JlCiAqIGFib3V0IG1vZGVzIG9uIFVuaXggc3lzdGVtcyB3aXRoICdtYW4gMSBjaG1vZCcKICogYW5kICdtYW4gMiBjaG1vZCcuCiAqCiAqCiAqCiAqCiAqLwpmdW5jdGlvbiBjaG1vZChzdHJpbmcgJGZpbGVuYW1lLCBpbnQgJG1vZGUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcY2htb2QoJGZpbGVuYW1lLCAkbW9kZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGaWxlc3lzdGVtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBBdHRlbXB0cyB0byBjaGFuZ2UgdGhlIG93bmVyIG9mIHRoZSBmaWxlIGZpbGVuYW1lCiAqIHRvIHVzZXIgdXNlci4gT25seSB0aGUgc3VwZXJ1c2VyIG1heSBjaGFuZ2UgdGhlCiAqIG93bmVyIG9mIGEgZmlsZS4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgUGF0aCB0byB0aGUgZmlsZS4KICogQHBhcmFtIHN0cmluZ3xpbnQgJHVzZXIgQSB1c2VyIG5hbWUgb3IgbnVtYmVyLgogKiBAdGhyb3dzIEZpbGVzeXN0ZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGNob3duKHN0cmluZyAkZmlsZW5hbWUsICR1c2VyKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGNob3duKCRmaWxlbmFtZSwgJHVzZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogTWFrZXMgYSBjb3B5IG9mIHRoZSBmaWxlIHNvdXJjZSB0bwogKiBkZXN0LgogKgogKiBJZiB5b3Ugd2lzaCB0byBtb3ZlIGEgZmlsZSwgdXNlIHRoZSByZW5hbWUgZnVuY3Rpb24uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHNvdXJjZSBQYXRoIHRvIHRoZSBzb3VyY2UgZmlsZS4KICogQHBhcmFtIHN0cmluZyAkZGVzdCBUaGUgZGVzdGluYXRpb24gcGF0aC4gSWYgZGVzdCBpcyBhIFVSTCwgdGhlCiAqIGNvcHkgb3BlcmF0aW9uIG1heSBmYWlsIGlmIHRoZSB3cmFwcGVyIGRvZXMgbm90IHN1cHBvcnQgb3ZlcndyaXRpbmcgb2YKICogZXhpc3RpbmcgZmlsZXMuCiAqCiAqIElmIHRoZSBkZXN0aW5hdGlvbiBmaWxlIGFscmVhZHkgZXhpc3RzLCBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuLgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbnRleHQgQSB2YWxpZCBjb250ZXh0IHJlc291cmNlIGNyZWF0ZWQgd2l0aAogKiBzdHJlYW1fY29udGV4dF9jcmVhdGUuCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gY29weShzdHJpbmcgJHNvdXJjZSwgc3RyaW5nICRkZXN0LCAkY29udGV4dCA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkY29udGV4dCAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcY29weSgkc291cmNlLCAkZGVzdCwgJGNvbnRleHQpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGNvcHkoJHNvdXJjZSwgJGRlc3QpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogR2l2ZW4gYSBzdHJpbmcgY29udGFpbmluZyBhIGRpcmVjdG9yeSwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUKICogbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBvbiB0aGUgY29ycmVzcG9uZGluZyBmaWxlc3lzdGVtIG9yIGRpc2sKICogcGFydGl0aW9uLgogKgogKiBAcGFyYW0gc3RyaW5nICRkaXJlY3RvcnkgQSBkaXJlY3Rvcnkgb2YgdGhlIGZpbGVzeXN0ZW0gb3IgZGlzayBwYXJ0aXRpb24uCiAqCiAqIEdpdmVuIGEgZmlsZSBuYW1lIGluc3RlYWQgb2YgYSBkaXJlY3RvcnksIHRoZSBiZWhhdmlvdXIgb2YgdGhlCiAqIGZ1bmN0aW9uIGlzIHVuc3BlY2lmaWVkIGFuZCBtYXkgZGlmZmVyIGJldHdlZW4gb3BlcmF0aW5nIHN5c3RlbXMgYW5kCiAqIFBIUCB2ZXJzaW9ucy4KICogQHJldHVybiBmbG9hdCBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGJ5dGVzIGFzIGEgZmxvYXQuCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZGlza19mcmVlX3NwYWNlKHN0cmluZyAkZGlyZWN0b3J5KTogZmxvYXQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxkaXNrX2ZyZWVfc3BhY2UoJGRpcmVjdG9yeSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGaWxlc3lzdGVtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEdpdmVuIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBkaXJlY3RvcnksIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIHRvdGFsCiAqIG51bWJlciBvZiBieXRlcyBvbiB0aGUgY29ycmVzcG9uZGluZyBmaWxlc3lzdGVtIG9yIGRpc2sgcGFydGl0aW9uLgogKgogKiBAcGFyYW0gc3RyaW5nICRkaXJlY3RvcnkgQSBkaXJlY3Rvcnkgb2YgdGhlIGZpbGVzeXN0ZW0gb3IgZGlzayBwYXJ0aXRpb24uCiAqIEByZXR1cm4gZmxvYXQgUmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGFzIGEgZmxvYXQuCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZGlza190b3RhbF9zcGFjZShzdHJpbmcgJGRpcmVjdG9yeSk6IGZsb2F0CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZGlza190b3RhbF9zcGFjZSgkZGlyZWN0b3J5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVzeXN0ZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhlIGZpbGUgcG9pbnRlZCB0byBieSBoYW5kbGUgaXMgY2xvc2VkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGhhbmRsZSBUaGUgZmlsZSBwb2ludGVyIG11c3QgYmUgdmFsaWQsIGFuZCBtdXN0IHBvaW50IHRvIGEgZmlsZSBzdWNjZXNzZnVsbHkKICogb3BlbmVkIGJ5IGZvcGVuIG9yIGZzb2Nrb3Blbi4KICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmY2xvc2UoJGhhbmRsZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxmY2xvc2UoJGhhbmRsZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGaWxlc3lzdGVtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGZvcmNlcyBhIHdyaXRlIG9mIGFsbCBidWZmZXJlZCBvdXRwdXQgdG8gdGhlIHJlc291cmNlCiAqIHBvaW50ZWQgdG8gYnkgdGhlIGZpbGUgaGFuZGxlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGhhbmRsZSBUaGUgZmlsZSBwb2ludGVyIG11c3QgYmUgdmFsaWQsIGFuZCBtdXN0IHBvaW50IHRvCiAqIGEgZmlsZSBzdWNjZXNzZnVsbHkgb3BlbmVkIGJ5IGZvcGVuIG9yCiAqIGZzb2Nrb3BlbiAoYW5kIG5vdCB5ZXQgY2xvc2VkIGJ5CiAqIGZjbG9zZSkuCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZmZsdXNoKCRoYW5kbGUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZmZsdXNoKCRoYW5kbGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIGZpbGUsIGV4Y2VwdCB0aGF0CiAqIGZpbGVfZ2V0X2NvbnRlbnRzIHJldHVybnMgdGhlIGZpbGUgaW4gYQogKiBzdHJpbmcsIHN0YXJ0aW5nIGF0IHRoZSBzcGVjaWZpZWQgb2Zmc2V0CiAqIHVwIHRvIG1heGxlbiBieXRlcy4gT24gZmFpbHVyZSwKICogZmlsZV9nZXRfY29udGVudHMgd2lsbCByZXR1cm4gRkFMU0UuCiAqCiAqIGZpbGVfZ2V0X2NvbnRlbnRzIGlzIHRoZSBwcmVmZXJyZWQgd2F5IHRvIHJlYWQgdGhlCiAqIGNvbnRlbnRzIG9mIGEgZmlsZSBpbnRvIGEgc3RyaW5nLiAgSXQgd2lsbCB1c2UgbWVtb3J5IG1hcHBpbmcgdGVjaG5pcXVlcyBpZgogKiBzdXBwb3J0ZWQgYnkgeW91ciBPUyB0byBlbmhhbmNlIHBlcmZvcm1hbmNlLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBOYW1lIG9mIHRoZSBmaWxlIHRvIHJlYWQuCiAqIEBwYXJhbSBib29sICR1c2VfaW5jbHVkZV9wYXRoIFRoZSBGSUxFX1VTRV9JTkNMVURFX1BBVEggY29uc3RhbnQgY2FuIGJlIHVzZWQKICogdG8gdHJpZ2dlciBpbmNsdWRlIHBhdGgKICogc2VhcmNoLgogKiBUaGlzIGlzIG5vdCBwb3NzaWJsZSBpZiBzdHJpY3QgdHlwaW5nCiAqIGlzIGVuYWJsZWQsIHNpbmNlIEZJTEVfVVNFX0lOQ0xVREVfUEFUSCBpcyBhbgogKiBpbnQuIFVzZSBUUlVFIGluc3RlYWQuCiAqIEBwYXJhbSByZXNvdXJjZXxudWxsICRjb250ZXh0IEEgdmFsaWQgY29udGV4dCByZXNvdXJjZSBjcmVhdGVkIHdpdGgKICogc3RyZWFtX2NvbnRleHRfY3JlYXRlLiBJZiB5b3UgZG9uJ3QgbmVlZCB0byB1c2UgYQogKiBjdXN0b20gY29udGV4dCwgeW91IGNhbiBza2lwIHRoaXMgcGFyYW1ldGVyIGJ5IE5VTEwuCiAqIEBwYXJhbSBpbnQgJG9mZnNldCBUaGUgb2Zmc2V0IHdoZXJlIHRoZSByZWFkaW5nIHN0YXJ0cyBvbiB0aGUgb3JpZ2luYWwgc3RyZWFtLgogKiBOZWdhdGl2ZSBvZmZzZXRzIGNvdW50IGZyb20gdGhlIGVuZCBvZiB0aGUgc3RyZWFtLgogKgogKiBTZWVraW5nIChvZmZzZXQpIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZW1vdGUgZmlsZXMuCiAqIEF0dGVtcHRpbmcgdG8gc2VlayBvbiBub24tbG9jYWwgZmlsZXMgbWF5IHdvcmsgd2l0aCBzbWFsbCBvZmZzZXRzLCBidXQgdGhpcwogKiBpcyB1bnByZWRpY3RhYmxlIGJlY2F1c2UgaXQgd29ya3Mgb24gdGhlIGJ1ZmZlcmVkIHN0cmVhbS4KICogQHBhcmFtIGludCAkbWF4bGVuIE1heGltdW0gbGVuZ3RoIG9mIGRhdGEgcmVhZC4gVGhlIGRlZmF1bHQgaXMgdG8gcmVhZCB1bnRpbCBlbmQKICogb2YgZmlsZSBpcyByZWFjaGVkLiBOb3RlIHRoYXQgdGhpcyBwYXJhbWV0ZXIgaXMgYXBwbGllZCB0byB0aGUKICogc3RyZWFtIHByb2Nlc3NlZCBieSB0aGUgZmlsdGVycy4KICogQHJldHVybiBzdHJpbmcgVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlYWQgZGF0YS4KICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmaWxlX2dldF9jb250ZW50cyhzdHJpbmcgJGZpbGVuYW1lLCBib29sICR1c2VfaW5jbHVkZV9wYXRoID0gZmFsc2UsICRjb250ZXh0ID0gbnVsbCwgaW50ICRvZmZzZXQgPSAwLCBpbnQgJG1heGxlbiA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRtYXhsZW4gIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlbmFtZSwgJHVzZV9pbmNsdWRlX3BhdGgsICRjb250ZXh0LCAkb2Zmc2V0LCAkbWF4bGVuKTsKICAgIH0gZWxzZWlmICgkb2Zmc2V0ICE9PSAwKSB7CiAgICAgICAgJHJlc3VsdCA9IFxmaWxlX2dldF9jb250ZW50cygkZmlsZW5hbWUsICR1c2VfaW5jbHVkZV9wYXRoLCAkY29udGV4dCwgJG9mZnNldCk7CiAgICB9IGVsc2VpZiAoJGNvbnRleHQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlbmFtZSwgJHVzZV9pbmNsdWRlX3BhdGgsICRjb250ZXh0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxmaWxlX2dldF9jb250ZW50cygkZmlsZW5hbWUsICR1c2VfaW5jbHVkZV9wYXRoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVzeXN0ZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gY2FsbGluZyBmb3BlbiwKICogZndyaXRlIGFuZCBmY2xvc2Ugc3VjY2Vzc2l2ZWx5CiAqIHRvIHdyaXRlIGRhdGEgdG8gYSBmaWxlLgogKgogKiBJZiBmaWxlbmFtZSBkb2VzIG5vdCBleGlzdCwgdGhlIGZpbGUgaXMgY3JlYXRlZC4KICogT3RoZXJ3aXNlLCB0aGUgZXhpc3RpbmcgZmlsZSBpcyBvdmVyd3JpdHRlbiwgdW5sZXNzIHRoZQogKiBGSUxFX0FQUEVORCBmbGFnIGlzIHNldC4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgUGF0aCB0byB0aGUgZmlsZSB3aGVyZSB0byB3cml0ZSB0aGUgZGF0YS4KICogQHBhcmFtIG1peGVkICRkYXRhIFRoZSBkYXRhIHRvIHdyaXRlLiBDYW4gYmUgZWl0aGVyIGEgc3RyaW5nLCBhbgogKiBhcnJheSBvciBhIHN0cmVhbSByZXNvdXJjZS4KICoKICogSWYgZGF0YSBpcyBhIHN0cmVhbSByZXNvdXJjZSwgdGhlCiAqIHJlbWFpbmluZyBidWZmZXIgb2YgdGhhdCBzdHJlYW0gd2lsbCBiZSBjb3BpZWQgdG8gdGhlIHNwZWNpZmllZCBmaWxlLgogKiBUaGlzIGlzIHNpbWlsYXIgd2l0aCB1c2luZyBzdHJlYW1fY29weV90b19zdHJlYW0uCiAqCiAqIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IHRoZSBkYXRhIHBhcmFtZXRlciBhcyBhIHNpbmdsZQogKiBkaW1lbnNpb24gYXJyYXkuIFRoaXMgaXMgZXF1aXZhbGVudCB0bwogKiBmaWxlX3B1dF9jb250ZW50cygkZmlsZW5hbWUsIGltcGxvZGUoJycsICRhcnJheSkpLgogKiBAcGFyYW0gaW50ICRmbGFncyBUaGUgdmFsdWUgb2YgZmxhZ3MgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZgogKiB0aGUgZm9sbG93aW5nIGZsYWdzLCBqb2luZWQgd2l0aCB0aGUgYmluYXJ5IE9SICh8KQogKiBvcGVyYXRvci4KICoKICoKICogQXZhaWxhYmxlIGZsYWdzCiAqCiAqCiAqCiAqIEZsYWcKICogRGVzY3JpcHRpb24KICoKICoKICoKICoKICoKICogRklMRV9VU0VfSU5DTFVERV9QQVRICiAqCiAqCiAqIFNlYXJjaCBmb3IgZmlsZW5hbWUgaW4gdGhlIGluY2x1ZGUgZGlyZWN0b3J5LgogKiBTZWUgaW5jbHVkZV9wYXRoIGZvciBtb3JlCiAqIGluZm9ybWF0aW9uLgogKgogKgogKgogKgogKiBGSUxFX0FQUEVORAogKgogKgogKiBJZiBmaWxlIGZpbGVuYW1lIGFscmVhZHkgZXhpc3RzLCBhcHBlbmQKICogdGhlIGRhdGEgdG8gdGhlIGZpbGUgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyBpdC4KICoKICoKICoKICoKICogTE9DS19FWAogKgogKgogKiBBY3F1aXJlIGFuIGV4Y2x1c2l2ZSBsb2NrIG9uIHRoZSBmaWxlIHdoaWxlIHByb2NlZWRpbmcgdG8gdGhlCiAqIHdyaXRpbmcuIEluIG90aGVyIHdvcmRzLCBhIGZsb2NrIGNhbGwgaGFwcGVucwogKiBiZXR3ZWVuIHRoZSBmb3BlbiBjYWxsIGFuZCB0aGUKICogZndyaXRlIGNhbGwuIFRoaXMgaXMgbm90IGlkZW50aWNhbCB0byBhbgogKiBmb3BlbiBjYWxsIHdpdGggbW9kZSAieCIuCiAqCiAqCiAqCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29udGV4dCBBIHZhbGlkIGNvbnRleHQgcmVzb3VyY2UgY3JlYXRlZCB3aXRoCiAqIHN0cmVhbV9jb250ZXh0X2NyZWF0ZS4KICogQHJldHVybiBpbnQgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3ZXJlIHdyaXR0ZW4gdG8gdGhlIGZpbGUuCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZmlsZV9wdXRfY29udGVudHMoc3RyaW5nICRmaWxlbmFtZSwgJGRhdGEsIGludCAkZmxhZ3MgPSAwLCAkY29udGV4dCA9IG51bGwpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb250ZXh0ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxmaWxlX3B1dF9jb250ZW50cygkZmlsZW5hbWUsICRkYXRhLCAkZmxhZ3MsICRjb250ZXh0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxmaWxlX3B1dF9jb250ZW50cygkZmlsZW5hbWUsICRkYXRhLCAkZmxhZ3MpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZWFkcyBhbiBlbnRpcmUgZmlsZSBpbnRvIGFuIGFycmF5LgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBQYXRoIHRvIHRoZSBmaWxlLgogKiBAcGFyYW0gaW50ICRmbGFncyBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIGZsYWdzIGNhbiBiZSBvbmUsIG9yCiAqIG1vcmUsIG9mIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzOgogKgogKgogKgogKiBGSUxFX1VTRV9JTkNMVURFX1BBVEgKICoKICoKICoKICogU2VhcmNoIGZvciB0aGUgZmlsZSBpbiB0aGUgaW5jbHVkZV9wYXRoLgogKgogKgogKgogKgogKgogKiBGSUxFX0lHTk9SRV9ORVdfTElORVMKICoKICoKICoKICogT21pdCBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgZWFjaCBhcnJheSBlbGVtZW50CiAqCiAqCiAqCiAqCiAqCiAqIEZJTEVfU0tJUF9FTVBUWV9MSU5FUwogKgogKgogKgogKiBTa2lwIGVtcHR5IGxpbmVzCiAqCiAqCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29udGV4dAogKiBAcmV0dXJuIGFycmF5IFJldHVybnMgdGhlIGZpbGUgaW4gYW4gYXJyYXkuIEVhY2ggZWxlbWVudCBvZiB0aGUgYXJyYXkgY29ycmVzcG9uZHMgdG8gYQogKiBsaW5lIGluIHRoZSBmaWxlLCB3aXRoIHRoZSBuZXdsaW5lIHN0aWxsIGF0dGFjaGVkLiBVcG9uIGZhaWx1cmUsCiAqIGZpbGUgcmV0dXJucyBGQUxTRS4KICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmaWxlKHN0cmluZyAkZmlsZW5hbWUsIGludCAkZmxhZ3MgPSAwLCAkY29udGV4dCA9IG51bGwpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGNvbnRleHQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGZpbGUoJGZpbGVuYW1lLCAkZmxhZ3MsICRjb250ZXh0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxmaWxlKCRmaWxlbmFtZSwgJGZsYWdzKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVzeXN0ZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICoKICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgUGF0aCB0byB0aGUgZmlsZS4KICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgdGltZSB0aGUgZmlsZSB3YXMgbGFzdCBhY2Nlc3NlZC4KICogVGhlIHRpbWUgaXMgcmV0dXJuZWQgYXMgYSBVbml4IHRpbWVzdGFtcC4KICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmaWxlYXRpbWUoc3RyaW5nICRmaWxlbmFtZSk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZpbGVhdGltZSgkZmlsZW5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBHZXRzIHRoZSBpbm9kZSBjaGFuZ2UgdGltZSBvZiBhIGZpbGUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFBhdGggdG8gdGhlIGZpbGUuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIHRpbWUgdGhlIGZpbGUgd2FzIGxhc3QgY2hhbmdlZC4KICogVGhlIHRpbWUgaXMgcmV0dXJuZWQgYXMgYSBVbml4IHRpbWVzdGFtcC4KICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmaWxlY3RpbWUoc3RyaW5nICRmaWxlbmFtZSk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZpbGVjdGltZSgkZmlsZW5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBHZXRzIHRoZSBmaWxlIGlub2RlLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBQYXRoIHRvIHRoZSBmaWxlLgogKiBAcmV0dXJuIGludCBSZXR1cm5zIHRoZSBpbm9kZSBudW1iZXIgb2YgdGhlIGZpbGUuCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZmlsZWlub2RlKHN0cmluZyAkZmlsZW5hbWUpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxmaWxlaW5vZGUoJGZpbGVuYW1lKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVzeXN0ZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lIHdoZW4gdGhlIGRhdGEgYmxvY2tzIG9mIGEgZmlsZSB3ZXJlIGJlaW5nCiAqIHdyaXR0ZW4gdG8sIHRoYXQgaXMsIHRoZSB0aW1lIHdoZW4gdGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUgd2FzIGNoYW5nZWQuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFBhdGggdG8gdGhlIGZpbGUuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIHRpbWUgdGhlIGZpbGUgd2FzIGxhc3QgbW9kaWZpZWQuCiAqIFRoZSB0aW1lIGlzIHJldHVybmVkIGFzIGEgVW5peCB0aW1lc3RhbXAsIHdoaWNoIGlzCiAqIHN1aXRhYmxlIGZvciB0aGUgZGF0ZSBmdW5jdGlvbi4KICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmaWxlbXRpbWUoc3RyaW5nICRmaWxlbmFtZSk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZpbGVtdGltZSgkZmlsZW5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBHZXRzIHRoZSBmaWxlIG93bmVyLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBQYXRoIHRvIHRoZSBmaWxlLgogKiBAcmV0dXJuIGludCBSZXR1cm5zIHRoZSB1c2VyIElEIG9mIHRoZSBvd25lciBvZiB0aGUgZmlsZS4KICogVGhlIHVzZXIgSUQgaXMgcmV0dXJuZWQgaW4gbnVtZXJpY2FsIGZvcm1hdCwgdXNlCiAqIHBvc2l4X2dldHB3dWlkIHRvIHJlc29sdmUgaXQgdG8gYSB1c2VybmFtZS4KICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmaWxlb3duZXIoc3RyaW5nICRmaWxlbmFtZSk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZpbGVvd25lcigkZmlsZW5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBHZXRzIHRoZSBzaXplIGZvciB0aGUgZ2l2ZW4gZmlsZS4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgUGF0aCB0byB0aGUgZmlsZS4KICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgZmlsZSBpbiBieXRlcywgb3IgRkFMU0UgKGFuZCBnZW5lcmF0ZXMgYW4gZXJyb3IKICogb2YgbGV2ZWwgRV9XQVJOSU5HKSBpbiBjYXNlIG9mIGFuIGVycm9yLgogKiBAdGhyb3dzIEZpbGVzeXN0ZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGZpbGVzaXplKHN0cmluZyAkZmlsZW5hbWUpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxmaWxlc2l6ZSgkZmlsZW5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBmbG9jayBhbGxvd3MgeW91IHRvIHBlcmZvcm0gYSBzaW1wbGUgcmVhZGVyL3dyaXRlcgogKiBtb2RlbCB3aGljaCBjYW4gYmUgdXNlZCBvbiB2aXJ0dWFsbHkgZXZlcnkgcGxhdGZvcm0gKGluY2x1ZGluZyBtb3N0IFVuaXgKICogZGVyaXZhdGl2ZXMgYW5kIGV2ZW4gV2luZG93cykuCiAqCiAqIE9uIHZlcnNpb25zIG9mIFBIUCBiZWZvcmUgNS4zLjIsIHRoZSBsb2NrIGlzIHJlbGVhc2VkIGFsc28gYnkKICogZmNsb3NlICh3aGljaCBpcyBhbHNvIGNhbGxlZCBhdXRvbWF0aWNhbGx5IHdoZW4gc2NyaXB0CiAqIGZpbmlzaGVkKS4KICoKICogUEhQIHN1cHBvcnRzIGEgcG9ydGFibGUgd2F5IG9mIGxvY2tpbmcgY29tcGxldGUgZmlsZXMgaW4gYW4gYWR2aXNvcnkgd2F5CiAqICh3aGljaCBtZWFucyBhbGwgYWNjZXNzaW5nIHByb2dyYW1zIGhhdmUgdG8gdXNlIHRoZSBzYW1lIHdheSBvZiBsb2NraW5nCiAqIG9yIGl0IHdpbGwgbm90IHdvcmspLiBCeSBkZWZhdWx0LCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgdW50aWwgdGhlCiAqIHJlcXVlc3RlZCBsb2NrIGlzIGFjcXVpcmVkOyB0aGlzIG1heSBiZSBjb250cm9sbGVkIHdpdGggdGhlIExPQ0tfTkIgb3B0aW9uIGRvY3VtZW50ZWQgYmVsb3cuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaGFuZGxlIEEgZmlsZSBzeXN0ZW0gcG9pbnRlciByZXNvdXJjZQogKiB0aGF0IGlzIHR5cGljYWxseSBjcmVhdGVkIHVzaW5nIGZvcGVuLgogKiBAcGFyYW0gaW50ICRvcGVyYXRpb24gb3BlcmF0aW9uIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogKgogKgogKgogKiBMT0NLX1NIIHRvIGFjcXVpcmUgYSBzaGFyZWQgbG9jayAocmVhZGVyKS4KICoKICoKICoKICoKICogTE9DS19FWCB0byBhY3F1aXJlIGFuIGV4Y2x1c2l2ZSBsb2NrICh3cml0ZXIpLgogKgogKgogKgogKgogKiBMT0NLX1VOIHRvIHJlbGVhc2UgYSBsb2NrIChzaGFyZWQgb3IgZXhjbHVzaXZlKS4KICoKICoKICoKICoKICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBhZGQgTE9DS19OQiBhcyBhIGJpdG1hc2sgdG8gb25lCiAqIG9mIHRoZSBhYm92ZSBvcGVyYXRpb25zLCBpZiBmbG9jayBzaG91bGQgbm90CiAqIGJsb2NrIGR1cmluZyB0aGUgbG9ja2luZyBhdHRlbXB0LgogKiBAcGFyYW0gaW50fG51bGwgJHdvdWxkYmxvY2sgVGhlIG9wdGlvbmFsIHRoaXJkIGFyZ3VtZW50IGlzIHNldCB0byAxIGlmIHRoZSBsb2NrIHdvdWxkIGJsb2NrCiAqIChFV09VTERCTE9DSyBlcnJubyBjb25kaXRpb24pLgogKiBAdGhyb3dzIEZpbGVzeXN0ZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGZsb2NrKCRoYW5kbGUsIGludCAkb3BlcmF0aW9uLCA/aW50ICYkd291bGRibG9jayA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZmxvY2soJGhhbmRsZSwgJG9wZXJhdGlvbiwgJHdvdWxkYmxvY2spOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogZm9wZW4gYmluZHMgYSBuYW1lZCByZXNvdXJjZSwgc3BlY2lmaWVkIGJ5CiAqIGZpbGVuYW1lLCB0byBhIHN0cmVhbS4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgSWYgZmlsZW5hbWUgaXMgb2YgdGhlIGZvcm0gInNjaGVtZTovLy4uLiIsIGl0CiAqIGlzIGFzc3VtZWQgdG8gYmUgYSBVUkwgYW5kIFBIUCB3aWxsIHNlYXJjaCBmb3IgYSBwcm90b2NvbCBoYW5kbGVyCiAqIChhbHNvIGtub3duIGFzIGEgd3JhcHBlcikgZm9yIHRoYXQgc2NoZW1lLiBJZiBubyB3cmFwcGVycyBmb3IgdGhhdAogKiBwcm90b2NvbCBhcmUgcmVnaXN0ZXJlZCwgUEhQIHdpbGwgZW1pdCBhIG5vdGljZSB0byBoZWxwIHlvdSB0cmFjawogKiBwb3RlbnRpYWwgcHJvYmxlbXMgaW4geW91ciBzY3JpcHQgYW5kIHRoZW4gY29udGludWUgYXMgdGhvdWdoCiAqIGZpbGVuYW1lIHNwZWNpZmllcyBhIHJlZ3VsYXIgZmlsZS4KICoKICogSWYgUEhQIGhhcyBkZWNpZGVkIHRoYXQgZmlsZW5hbWUgc3BlY2lmaWVzCiAqIGEgbG9jYWwgZmlsZSwgdGhlbiBpdCB3aWxsIHRyeSB0byBvcGVuIGEgc3RyZWFtIG9uIHRoYXQgZmlsZS4KICogVGhlIGZpbGUgbXVzdCBiZSBhY2Nlc3NpYmxlIHRvIFBIUCwgc28geW91IG5lZWQgdG8gZW5zdXJlIHRoYXQKICogdGhlIGZpbGUgYWNjZXNzIHBlcm1pc3Npb25zIGFsbG93IHRoaXMgYWNjZXNzLgogKiBJZiB5b3UgaGF2ZSBlbmFibGVkCiAqIG9wZW5fYmFzZWRpciBmdXJ0aGVyCiAqIHJlc3RyaWN0aW9ucyBtYXkgYXBwbHkuCiAqCiAqIElmIFBIUCBoYXMgZGVjaWRlZCB0aGF0IGZpbGVuYW1lIHNwZWNpZmllcwogKiBhIHJlZ2lzdGVyZWQgcHJvdG9jb2wsIGFuZCB0aGF0IHByb3RvY29sIGlzIHJlZ2lzdGVyZWQgYXMgYQogKiBuZXR3b3JrIFVSTCwgUEhQIHdpbGwgY2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQKICogYWxsb3dfdXJsX2ZvcGVuIGlzCiAqIGVuYWJsZWQuIElmIGl0IGlzIHN3aXRjaGVkIG9mZiwgUEhQIHdpbGwgZW1pdCBhIHdhcm5pbmcgYW5kCiAqIHRoZSBmb3BlbiBjYWxsIHdpbGwgZmFpbC4KICoKICogVGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIHByb3RvY29scyBjYW4gYmUgZm91bmQgaW4gLiBTb21lIHByb3RvY29scyAoYWxzbyByZWZlcnJlZCB0byBhcwogKiB3cmFwcGVycykgc3VwcG9ydCBjb250ZXh0CiAqIGFuZC9vciBwaHAuaW5pIG9wdGlvbnMuIFJlZmVyIHRvIHRoZSBzcGVjaWZpYyBwYWdlIGZvciB0aGUKICogcHJvdG9jb2wgaW4gdXNlIGZvciBhIGxpc3Qgb2Ygb3B0aW9ucyB3aGljaCBjYW4gYmUgc2V0LiAoZS5nLgogKiBwaHAuaW5pIHZhbHVlIHVzZXJfYWdlbnQgdXNlZCBieSB0aGUKICogaHR0cCB3cmFwcGVyKS4KICoKICogT24gdGhlIFdpbmRvd3MgcGxhdGZvcm0sIGJlIGNhcmVmdWwgdG8gZXNjYXBlIGFueSBiYWNrc2xhc2hlcwogKiB1c2VkIGluIHRoZSBwYXRoIHRvIHRoZSBmaWxlLCBvciB1c2UgZm9yd2FyZCBzbGFzaGVzLgogKgogKgogKgogKiBdXT4KICoKICoKICogQHBhcmFtIHN0cmluZyAkbW9kZSBUaGUgbW9kZSBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSB0eXBlIG9mIGFjY2VzcwogKiB5b3UgcmVxdWlyZSB0byB0aGUgc3RyZWFtLiAgSXQgbWF5IGJlIGFueSBvZiB0aGUgZm9sbG93aW5nOgogKgogKgogKiBBIGxpc3Qgb2YgcG9zc2libGUgbW9kZXMgZm9yIGZvcGVuCiAqIHVzaW5nIG1vZGUKICoKICoKICoKICoKICogbW9kZQogKiBEZXNjcmlwdGlvbgogKgogKgogKgogKgogKiAncicKICoKICogT3BlbiBmb3IgcmVhZGluZyBvbmx5OyBwbGFjZSB0aGUgZmlsZSBwb2ludGVyIGF0IHRoZQogKiBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuCiAqCiAqCiAqCiAqICdyKycKICoKICogT3BlbiBmb3IgcmVhZGluZyBhbmQgd3JpdGluZzsgcGxhY2UgdGhlIGZpbGUgcG9pbnRlciBhdAogKiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLgogKgogKgogKgogKiAndycKICoKICogT3BlbiBmb3Igd3JpdGluZyBvbmx5OyBwbGFjZSB0aGUgZmlsZSBwb2ludGVyIGF0IHRoZQogKiBiZWdpbm5pbmcgb2YgdGhlIGZpbGUgYW5kIHRydW5jYXRlIHRoZSBmaWxlIHRvIHplcm8gbGVuZ3RoLgogKiBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgYXR0ZW1wdCB0byBjcmVhdGUgaXQuCiAqCiAqCiAqCiAqICd3KycKICoKICogT3BlbiBmb3IgcmVhZGluZyBhbmQgd3JpdGluZzsgcGxhY2UgdGhlIGZpbGUgcG9pbnRlciBhdAogKiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIGFuZCB0cnVuY2F0ZSB0aGUgZmlsZSB0byB6ZXJvCiAqIGxlbmd0aC4gIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LCBhdHRlbXB0IHRvIGNyZWF0ZSBpdC4KICoKICoKICoKICogJ2EnCiAqCiAqIE9wZW4gZm9yIHdyaXRpbmcgb25seTsgcGxhY2UgdGhlIGZpbGUgcG9pbnRlciBhdCB0aGUgZW5kIG9mCiAqIHRoZSBmaWxlLiBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgYXR0ZW1wdCB0byBjcmVhdGUgaXQuCiAqIEluIHRoaXMgbW9kZSwgZnNlZWsgaGFzIG5vIGVmZmVjdCwgd3JpdGVzIGFyZSBhbHdheXMgYXBwZW5kZWQuCiAqCiAqCiAqCiAqICdhKycKICoKICogT3BlbiBmb3IgcmVhZGluZyBhbmQgd3JpdGluZzsgcGxhY2UgdGhlIGZpbGUgcG9pbnRlciBhdAogKiB0aGUgZW5kIG9mIHRoZSBmaWxlLiBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgYXR0ZW1wdCB0bwogKiBjcmVhdGUgaXQuIEluIHRoaXMgbW9kZSwgZnNlZWsgb25seSBhZmZlY3RzCiAqIHRoZSByZWFkaW5nIHBvc2l0aW9uLCB3cml0ZXMgYXJlIGFsd2F5cyBhcHBlbmRlZC4KICoKICoKICoKICogJ3gnCiAqCiAqIENyZWF0ZSBhbmQgb3BlbiBmb3Igd3JpdGluZyBvbmx5OyBwbGFjZSB0aGUgZmlsZSBwb2ludGVyIGF0IHRoZQogKiBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuICBJZiB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cywgdGhlCiAqIGZvcGVuIGNhbGwgd2lsbCBmYWlsIGJ5IHJldHVybmluZyBGQUxTRSBhbmQKICogZ2VuZXJhdGluZyBhbiBlcnJvciBvZiBsZXZlbCBFX1dBUk5JTkcuICBJZgogKiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgYXR0ZW1wdCB0byBjcmVhdGUgaXQuICBUaGlzIGlzIGVxdWl2YWxlbnQKICogdG8gc3BlY2lmeWluZyBPX0VYQ0x8T19DUkVBVCBmbGFncyBmb3IgdGhlCiAqIHVuZGVybHlpbmcgb3BlbigyKSBzeXN0ZW0gY2FsbC4KICoKICoKICoKICogJ3grJwogKgogKiBDcmVhdGUgYW5kIG9wZW4gZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmc7IG90aGVyd2lzZSBpdCBoYXMgdGhlCiAqIHNhbWUgYmVoYXZpb3IgYXMgJ3gnLgogKgogKgogKgogKiAnYycKICoKICogT3BlbiB0aGUgZmlsZSBmb3Igd3JpdGluZyBvbmx5LiBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgaXQgaXMKICogY3JlYXRlZC4gSWYgaXQgZXhpc3RzLCBpdCBpcyBuZWl0aGVyIHRydW5jYXRlZCAoYXMgb3Bwb3NlZCB0bwogKiAndycpLCBub3IgdGhlIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiBmYWlscyAoYXMgaXMKICogdGhlIGNhc2Ugd2l0aCAneCcpLiBUaGUgZmlsZSBwb2ludGVyIGlzCiAqIHBvc2l0aW9uZWQgb24gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4gVGhpcyBtYXkgYmUgdXNlZnVsIGlmIGl0J3MKICogZGVzaXJlZCB0byBnZXQgYW4gYWR2aXNvcnkgbG9jayAoc2VlIGZsb2NrKQogKiBiZWZvcmUgYXR0ZW1wdGluZyB0byBtb2RpZnkgdGhlIGZpbGUsIGFzIHVzaW5nCiAqICd3JyBjb3VsZCB0cnVuY2F0ZSB0aGUgZmlsZSBiZWZvcmUgdGhlIGxvY2sKICogd2FzIG9idGFpbmVkIChpZiB0cnVuY2F0aW9uIGlzIGRlc2lyZWQsCiAqIGZ0cnVuY2F0ZSBjYW4gYmUgdXNlZCBhZnRlciB0aGUgbG9jayBpcwogKiByZXF1ZXN0ZWQpLgogKgogKgogKgogKiAnYysnCiAqCiAqIE9wZW4gdGhlIGZpbGUgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmc7IG90aGVyd2lzZSBpdCBoYXMgdGhlIHNhbWUKICogYmVoYXZpb3IgYXMgJ2MnLgogKgogKgogKgogKiAnZScKICoKICogU2V0IGNsb3NlLW9uLWV4ZWMgZmxhZyBvbiB0aGUgb3BlbmVkIGZpbGUgZGVzY3JpcHRvci4gT25seQogKiBhdmFpbGFibGUgaW4gUEhQIGNvbXBpbGVkIG9uIFBPU0lYLjEtMjAwOCBjb25mb3JtIHN5c3RlbXMuCiAqCiAqCiAqCiAqCiAqCiAqCiAqIERpZmZlcmVudCBvcGVyYXRpbmcgc3lzdGVtIGZhbWlsaWVzIGhhdmUgZGlmZmVyZW50IGxpbmUtZW5kaW5nCiAqIGNvbnZlbnRpb25zLiAgV2hlbiB5b3Ugd3JpdGUgYSB0ZXh0IGZpbGUgYW5kIHdhbnQgdG8gaW5zZXJ0IGEgbGluZQogKiBicmVhaywgeW91IG5lZWQgdG8gdXNlIHRoZSBjb3JyZWN0IGxpbmUtZW5kaW5nIGNoYXJhY3RlcihzKSBmb3IgeW91cgogKiBvcGVyYXRpbmcgc3lzdGVtLiAgVW5peCBiYXNlZCBzeXN0ZW1zIHVzZSBcbiBhcyB0aGUKICogbGluZSBlbmRpbmcgY2hhcmFjdGVyLCBXaW5kb3dzIGJhc2VkIHN5c3RlbXMgdXNlIFxyXG4KICogYXMgdGhlIGxpbmUgZW5kaW5nIGNoYXJhY3RlcnMgYW5kIE1hY2ludG9zaCBiYXNlZCBzeXN0ZW1zIChNYWMgT1MgQ2xhc3NpYykgdXNlZAogKiBcciBhcyB0aGUgbGluZSBlbmRpbmcgY2hhcmFjdGVyLgogKgogKiBJZiB5b3UgdXNlIHRoZSB3cm9uZyBsaW5lIGVuZGluZyBjaGFyYWN0ZXJzIHdoZW4gd3JpdGluZyB5b3VyIGZpbGVzLCB5b3UKICogbWlnaHQgZmluZCB0aGF0IG90aGVyIGFwcGxpY2F0aW9ucyB0aGF0IG9wZW4gdGhvc2UgZmlsZXMgd2lsbCAibG9vawogKiBmdW5ueSIuCiAqCiAqIFdpbmRvd3Mgb2ZmZXJzIGEgdGV4dC1tb2RlIHRyYW5zbGF0aW9uIGZsYWcgKCd0JykKICogd2hpY2ggd2lsbCB0cmFuc3BhcmVudGx5IHRyYW5zbGF0ZSBcbiB0bwogKiBcclxuIHdoZW4gd29ya2luZyB3aXRoIHRoZSBmaWxlLiAgSW4gY29udHJhc3QsIHlvdQogKiBjYW4gYWxzbyB1c2UgJ2InIHRvIGZvcmNlIGJpbmFyeSBtb2RlLCB3aGljaCB3aWxsIG5vdAogKiB0cmFuc2xhdGUgeW91ciBkYXRhLiAgVG8gdXNlIHRoZXNlIGZsYWdzLCBzcGVjaWZ5IGVpdGhlcgogKiAnYicgb3IgJ3QnIGFzIHRoZSBsYXN0IGNoYXJhY3RlcgogKiBvZiB0aGUgbW9kZSBwYXJhbWV0ZXIuCiAqCiAqIFRoZSBkZWZhdWx0IHRyYW5zbGF0aW9uIG1vZGUgaXMgJ2InLgogKiBZb3UgY2FuIHVzZSB0aGUgJ3QnCiAqIG1vZGUgaWYgeW91IGFyZSB3b3JraW5nIHdpdGggcGxhaW4tdGV4dCBmaWxlcyBhbmQgeW91IHVzZQogKiBcbiB0byBkZWxpbWl0IHlvdXIgbGluZSBlbmRpbmdzIGluIHlvdXIgc2NyaXB0LCBidXQKICogZXhwZWN0IHlvdXIgZmlsZXMgdG8gYmUgcmVhZGFibGUgd2l0aCBhcHBsaWNhdGlvbnMgc3VjaCBhcyBvbGQgdmVyc2lvbnMgb2Ygbm90ZXBhZC4gIFlvdQogKiBzaG91bGQgdXNlIHRoZSAnYicgaW4gYWxsIG90aGVyIGNhc2VzLgogKgogKiBJZiB5b3Ugc3BlY2lmeSB0aGUgJ3QnIGZsYWcgd2hlbiB3b3JraW5nIHdpdGggYmluYXJ5IGZpbGVzLCB5b3UKICogbWF5IGV4cGVyaWVuY2Ugc3RyYW5nZSBwcm9ibGVtcyB3aXRoIHlvdXIgZGF0YSwgaW5jbHVkaW5nIGJyb2tlbiBpbWFnZQogKiBmaWxlcyBhbmQgc3RyYW5nZSBwcm9ibGVtcyB3aXRoIFxyXG4gY2hhcmFjdGVycy4KICoKICogRm9yIHBvcnRhYmlsaXR5LCBpdCBpcyBhbHNvIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQKICogeW91IHJlLXdyaXRlIGNvZGUgdGhhdCB1c2VzIG9yIHJlbGllcyB1cG9uIHRoZSAndCcKICogbW9kZSBzbyB0aGF0IGl0IHVzZXMgdGhlIGNvcnJlY3QgbGluZSBlbmRpbmdzIGFuZAogKiAnYicgbW9kZSBpbnN0ZWFkLgogKiBAcGFyYW0gYm9vbCAkdXNlX2luY2x1ZGVfcGF0aCBUaGUgb3B0aW9uYWwgdGhpcmQgdXNlX2luY2x1ZGVfcGF0aCBwYXJhbWV0ZXIKICogY2FuIGJlIHNldCB0byAnMScgb3IgVFJVRSBpZiB5b3Ugd2FudCB0byBzZWFyY2ggZm9yIHRoZSBmaWxlIGluIHRoZQogKiBpbmNsdWRlX3BhdGgsIHRvby4KICogQHBhcmFtIHJlc291cmNlICRjb250ZXh0CiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhIGZpbGUgcG9pbnRlciByZXNvdXJjZSBvbiBzdWNjZXNzCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZm9wZW4oc3RyaW5nICRmaWxlbmFtZSwgc3RyaW5nICRtb2RlLCBib29sICR1c2VfaW5jbHVkZV9wYXRoID0gZmFsc2UsICRjb250ZXh0ID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb250ZXh0ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxmb3BlbigkZmlsZW5hbWUsICRtb2RlLCAkdXNlX2luY2x1ZGVfcGF0aCwgJGNvbnRleHQpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGZvcGVuKCRmaWxlbmFtZSwgJG1vZGUsICR1c2VfaW5jbHVkZV9wYXRoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVzeXN0ZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZnB1dGNzdiBmb3JtYXRzIGEgbGluZSAocGFzc2VkIGFzIGEKICogZmllbGRzIGFycmF5KSBhcyBDU1YgYW5kIHdyaXRlcyBpdCAodGVybWluYXRlZCBieSBhCiAqIG5ld2xpbmUpIHRvIHRoZSBzcGVjaWZpZWQgZmlsZSBoYW5kbGUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaGFuZGxlIFRoZSBmaWxlIHBvaW50ZXIgbXVzdCBiZSB2YWxpZCwgYW5kIG11c3QgcG9pbnQgdG8KICogYSBmaWxlIHN1Y2Nlc3NmdWxseSBvcGVuZWQgYnkgZm9wZW4gb3IKICogZnNvY2tvcGVuIChhbmQgbm90IHlldCBjbG9zZWQgYnkKICogZmNsb3NlKS4KICogQHBhcmFtIGFycmF5ICRmaWVsZHMgQW4gYXJyYXkgb2Ygc3RyaW5ncy4KICogQHBhcmFtIHN0cmluZyAkZGVsaW1pdGVyIFRoZSBvcHRpb25hbCBkZWxpbWl0ZXIgcGFyYW1ldGVyIHNldHMgdGhlIGZpZWxkCiAqIGRlbGltaXRlciAob25lIGNoYXJhY3RlciBvbmx5KS4KICogQHBhcmFtIHN0cmluZyAkZW5jbG9zdXJlIFRoZSBvcHRpb25hbCBlbmNsb3N1cmUgcGFyYW1ldGVyIHNldHMgdGhlIGZpZWxkCiAqIGVuY2xvc3VyZSAob25lIGNoYXJhY3RlciBvbmx5KS4KICogQHBhcmFtIHN0cmluZyAkZXNjYXBlX2NoYXIgVGhlIG9wdGlvbmFsIGVzY2FwZV9jaGFyIHBhcmFtZXRlciBzZXRzIHRoZQogKiBlc2NhcGUgY2hhcmFjdGVyIChhdCBtb3N0IG9uZSBjaGFyYWN0ZXIpLgogKiBBbiBlbXB0eSBzdHJpbmcgKCIiKSBkaXNhYmxlcyB0aGUgcHJvcHJpZXRhcnkgZXNjYXBlIG1lY2hhbmlzbS4KICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSB3cml0dGVuIHN0cmluZy4KICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmcHV0Y3N2KCRoYW5kbGUsIGFycmF5ICRmaWVsZHMsIHN0cmluZyAkZGVsaW1pdGVyID0gIiwiLCBzdHJpbmcgJGVuY2xvc3VyZSA9ICciJywgc3RyaW5nICRlc2NhcGVfY2hhciA9ICJcXCIpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxmcHV0Y3N2KCRoYW5kbGUsICRmaWVsZHMsICRkZWxpbWl0ZXIsICRlbmNsb3N1cmUsICRlc2NhcGVfY2hhcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGaWxlc3lzdGVtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGZyZWFkIHJlYWRzIHVwIHRvCiAqIGxlbmd0aCBieXRlcyBmcm9tIHRoZSBmaWxlIHBvaW50ZXIKICogcmVmZXJlbmNlZCBieSBoYW5kbGUuIFJlYWRpbmcgc3RvcHMgYXMgc29vbiBhcyBvbmUKICogb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIG1ldDoKICoKICoKICoKICogbGVuZ3RoIGJ5dGVzIGhhdmUgYmVlbiByZWFkCiAqCiAqCiAqCiAqCiAqIEVPRiAoZW5kIG9mIGZpbGUpIGlzIHJlYWNoZWQKICoKICoKICoKICoKICogYSBwYWNrZXQgYmVjb21lcyBhdmFpbGFibGUgb3IgdGhlCiAqIHNvY2tldCB0aW1lb3V0IG9jY3VycyAoZm9yIG5ldHdvcmsgc3RyZWFtcykKICoKICoKICoKICoKICogaWYgdGhlIHN0cmVhbSBpcyByZWFkIGJ1ZmZlcmVkIGFuZCBpdCBkb2VzIG5vdCByZXByZXNlbnQgYSBwbGFpbiBmaWxlLCBhdAogKiBtb3N0IG9uZSByZWFkIG9mIHVwIHRvIGEgbnVtYmVyIG9mIGJ5dGVzIGVxdWFsIHRvIHRoZSBjaHVuayBzaXplICh1c3VhbGx5CiAqIDgxOTIpIGlzIG1hZGU7IGRlcGVuZGluZyBvbiB0aGUgcHJldmlvdXNseSBidWZmZXJlZCBkYXRhLCB0aGUgc2l6ZSBvZiB0aGUKICogcmV0dXJuZWQgZGF0YSBtYXkgYmUgbGFyZ2VyIHRoYW4gdGhlIGNodW5rIHNpemUuCiAqCiAqCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaGFuZGxlIEEgZmlsZSBzeXN0ZW0gcG9pbnRlciByZXNvdXJjZQogKiB0aGF0IGlzIHR5cGljYWxseSBjcmVhdGVkIHVzaW5nIGZvcGVuLgogKiBAcGFyYW0gaW50ICRsZW5ndGggVXAgdG8gbGVuZ3RoIG51bWJlciBvZiBieXRlcyByZWFkLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSByZWFkIHN0cmluZy4KICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmcmVhZCgkaGFuZGxlLCBpbnQgJGxlbmd0aCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZyZWFkKCRoYW5kbGUsICRsZW5ndGgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUYWtlcyB0aGUgZmlsZXBvaW50ZXIsIGhhbmRsZSwgYW5kIHRydW5jYXRlcyB0aGUgZmlsZSB0bwogKiBsZW5ndGgsIHNpemUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaGFuZGxlIFRoZSBmaWxlIHBvaW50ZXIuCiAqCiAqIFRoZSBoYW5kbGUgbXVzdCBiZSBvcGVuIGZvciB3cml0aW5nLgogKiBAcGFyYW0gaW50ICRzaXplIFRoZSBzaXplIHRvIHRydW5jYXRlIHRvLgogKgogKiBJZiBzaXplIGlzIGxhcmdlciB0aGFuIHRoZSBmaWxlIHRoZW4gdGhlIGZpbGUKICogaXMgZXh0ZW5kZWQgd2l0aCBudWxsIGJ5dGVzLgogKgogKiBJZiBzaXplIGlzIHNtYWxsZXIgdGhhbiB0aGUgZmlsZSB0aGVuIHRoZSBmaWxlCiAqIGlzIHRydW5jYXRlZCB0byB0aGF0IHNpemUuCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZnRydW5jYXRlKCRoYW5kbGUsIGludCAkc2l6ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxmdHJ1bmNhdGUoJGhhbmRsZSwgJHNpemUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICoKICoKICogQHBhcmFtIHJlc291cmNlICRoYW5kbGUgQSBmaWxlIHN5c3RlbSBwb2ludGVyIHJlc291cmNlCiAqIHRoYXQgaXMgdHlwaWNhbGx5IGNyZWF0ZWQgdXNpbmcgZm9wZW4uCiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyBUaGUgc3RyaW5nIHRoYXQgaXMgdG8gYmUgd3JpdHRlbi4KICogQHBhcmFtIGludCAkbGVuZ3RoIElmIHRoZSBsZW5ndGggYXJndW1lbnQgaXMgZ2l2ZW4sIHdyaXRpbmcgd2lsbAogKiBzdG9wIGFmdGVyIGxlbmd0aCBieXRlcyBoYXZlIGJlZW4gd3JpdHRlbiBvcgogKiB0aGUgZW5kIG9mIHN0cmluZyBpcyByZWFjaGVkLCB3aGljaGV2ZXIgY29tZXMKICogZmlyc3QuCiAqCiAqIE5vdGUgdGhhdCBpZiB0aGUgbGVuZ3RoIGFyZ3VtZW50IGlzIGdpdmVuLAogKiB0aGVuIHRoZSBtYWdpY19xdW90ZXNfcnVudGltZQogKiBjb25maWd1cmF0aW9uIG9wdGlvbiB3aWxsIGJlIGlnbm9yZWQgYW5kIG5vIHNsYXNoZXMgd2lsbCBiZQogKiBzdHJpcHBlZCBmcm9tIHN0cmluZy4KICogQHJldHVybiBpbnQKICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmd3JpdGUoJGhhbmRsZSwgc3RyaW5nICRzdHJpbmcsIGludCAkbGVuZ3RoID0gbnVsbCk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGxlbmd0aCAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcZndyaXRlKCRoYW5kbGUsICRzdHJpbmcsICRsZW5ndGgpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGZ3cml0ZSgkaGFuZGxlLCAkc3RyaW5nKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVzeXN0ZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhlIGdsb2IgZnVuY3Rpb24gc2VhcmNoZXMgZm9yIGFsbCB0aGUgcGF0aG5hbWVzCiAqIG1hdGNoaW5nIHBhdHRlcm4gYWNjb3JkaW5nIHRvIHRoZSBydWxlcyB1c2VkIGJ5CiAqIHRoZSBsaWJjIGdsb2IoKSBmdW5jdGlvbiwgd2hpY2ggaXMgc2ltaWxhciB0byB0aGUgcnVsZXMgdXNlZCBieSBjb21tb24KICogc2hlbGxzLgogKgogKiBAcGFyYW0gc3RyaW5nICRwYXR0ZXJuIFRoZSBwYXR0ZXJuLiBObyB0aWxkZSBleHBhbnNpb24gb3IgcGFyYW1ldGVyIHN1YnN0aXR1dGlvbiBpcyBkb25lLgogKgogKiBTcGVjaWFsIGNoYXJhY3RlcnM6CiAqCiAqCiAqCiAqICogLSBNYXRjaGVzIHplcm8gb3IgbW9yZSBjaGFyYWN0ZXJzLgogKgogKgogKgogKgogKiA/IC0gTWF0Y2hlcyBleGFjdGx5IG9uZSBjaGFyYWN0ZXIgKGFueSBjaGFyYWN0ZXIpLgogKgogKgogKgogKgogKiBbLi4uXSAtIE1hdGNoZXMgb25lIGNoYXJhY3RlciBmcm9tIGEgZ3JvdXAgb2YKICogY2hhcmFjdGVycy4gSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBpcyAhLAogKiBtYXRjaGVzIGFueSBjaGFyYWN0ZXIgbm90IGluIHRoZSBncm91cC4KICoKICoKICoKICoKICogXCAtIEVzY2FwZXMgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIsCiAqIGV4Y2VwdCB3aGVuIHRoZSBHTE9CX05PRVNDQVBFIGZsYWcgaXMgdXNlZC4KICoKICoKICoKICogQHBhcmFtIGludCAkZmxhZ3MgVmFsaWQgZmxhZ3M6CiAqCiAqCiAqCiAqIEdMT0JfTUFSSyAtIEFkZHMgYSBzbGFzaCAoYSBiYWNrc2xhc2ggb24gV2luZG93cykgdG8gZWFjaCBkaXJlY3RvcnkgcmV0dXJuZWQKICoKICoKICoKICoKICogR0xPQl9OT1NPUlQgLSBSZXR1cm4gZmlsZXMgYXMgdGhleSBhcHBlYXIgaW4gdGhlCiAqIGRpcmVjdG9yeSAobm8gc29ydGluZykuIFdoZW4gdGhpcyBmbGFnIGlzIG5vdCB1c2VkLCB0aGUgcGF0aG5hbWVzIGFyZQogKiBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkKICoKICoKICoKICoKICogR0xPQl9OT0NIRUNLIC0gUmV0dXJuIHRoZSBzZWFyY2ggcGF0dGVybiBpZiBubwogKiBmaWxlcyBtYXRjaGluZyBpdCB3ZXJlIGZvdW5kCiAqCiAqCiAqCiAqCiAqIEdMT0JfTk9FU0NBUEUgLSBCYWNrc2xhc2hlcyBkbyBub3QgcXVvdGUKICogbWV0YWNoYXJhY3RlcnMKICoKICoKICoKICoKICogR0xPQl9CUkFDRSAtIEV4cGFuZHMge2EsYixjfSB0byBtYXRjaCAnYScsICdiJywKICogb3IgJ2MnCiAqCiAqCiAqCiAqCiAqIEdMT0JfT05MWURJUiAtIFJldHVybiBvbmx5IGRpcmVjdG9yeSBlbnRyaWVzCiAqIHdoaWNoIG1hdGNoIHRoZSBwYXR0ZXJuCiAqCiAqCiAqCiAqCiAqIEdMT0JfRVJSIC0gU3RvcCBvbiByZWFkIGVycm9ycyAobGlrZSB1bnJlYWRhYmxlCiAqIGRpcmVjdG9yaWVzKSwgYnkgZGVmYXVsdCBlcnJvcnMgYXJlIGlnbm9yZWQuCiAqCiAqCiAqCiAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBtYXRjaGVkIGZpbGVzL2RpcmVjdG9yaWVzLCBhbiBlbXB0eSBhcnJheQogKiBpZiBubyBmaWxlIG1hdGNoZWQuCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZ2xvYihzdHJpbmcgJHBhdHRlcm4sIGludCAkZmxhZ3MgPSAwKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxnbG9iKCRwYXR0ZXJuLCAkZmxhZ3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBBdHRlbXB0cyB0byBjaGFuZ2UgdGhlIGdyb3VwIG9mIHRoZSBzeW1saW5rIGZpbGVuYW1lCiAqIHRvIGdyb3VwLgogKgogKiBPbmx5IHRoZSBzdXBlcnVzZXIgbWF5IGNoYW5nZSB0aGUgZ3JvdXAgb2YgYSBzeW1saW5rIGFyYml0cmFyaWx5OyBvdGhlcgogKiB1c2VycyBtYXkgY2hhbmdlIHRoZSBncm91cCBvZiBhIHN5bWxpbmsgdG8gYW55IGdyb3VwIG9mIHdoaWNoIHRoYXQgdXNlciBpcwogKiBhIG1lbWJlci4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgUGF0aCB0byB0aGUgc3ltbGluay4KICogQHBhcmFtIHN0cmluZ3xpbnQgJGdyb3VwIFRoZSBncm91cCBzcGVjaWZpZWQgYnkgbmFtZSBvciBudW1iZXIuCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGNoZ3JwKHN0cmluZyAkZmlsZW5hbWUsICRncm91cCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsY2hncnAoJGZpbGVuYW1lLCAkZ3JvdXApOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQXR0ZW1wdHMgdG8gY2hhbmdlIHRoZSBvd25lciBvZiB0aGUgc3ltbGluayBmaWxlbmFtZQogKiB0byB1c2VyIHVzZXIuCiAqCiAqIE9ubHkgdGhlIHN1cGVydXNlciBtYXkgY2hhbmdlIHRoZSBvd25lciBvZiBhIHN5bWxpbmsuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFBhdGggdG8gdGhlIGZpbGUuCiAqIEBwYXJhbSBzdHJpbmd8aW50ICR1c2VyIFVzZXIgbmFtZSBvciBudW1iZXIuCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGNob3duKHN0cmluZyAkZmlsZW5hbWUsICR1c2VyKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGxjaG93bigkZmlsZW5hbWUsICR1c2VyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVzeXN0ZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGxpbmsgY3JlYXRlcyBhIGhhcmQgbGluay4KICoKICogQHBhcmFtIHN0cmluZyAkdGFyZ2V0IFRhcmdldCBvZiB0aGUgbGluay4KICogQHBhcmFtIHN0cmluZyAkbGluayBUaGUgbGluayBuYW1lLgogKiBAdGhyb3dzIEZpbGVzeXN0ZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGxpbmsoc3RyaW5nICR0YXJnZXQsIHN0cmluZyAkbGluayk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsaW5rKCR0YXJnZXQsICRsaW5rKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVzeXN0ZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEF0dGVtcHRzIHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IHNwZWNpZmllZCBieSBwYXRobmFtZS4KICoKICogQHBhcmFtIHN0cmluZyAkcGF0aG5hbWUgVGhlIGRpcmVjdG9yeSBwYXRoLgogKiBAcGFyYW0gaW50ICRtb2RlIFRoZSBtb2RlIGlzIDA3NzcgYnkgZGVmYXVsdCwgd2hpY2ggbWVhbnMgdGhlIHdpZGVzdCBwb3NzaWJsZQogKiBhY2Nlc3MuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIG1vZGVzLCByZWFkIHRoZSBkZXRhaWxzCiAqIG9uIHRoZSBjaG1vZCBwYWdlLgogKgogKiBtb2RlIGlzIGlnbm9yZWQgb24gV2luZG93cy4KICoKICogTm90ZSB0aGF0IHlvdSBwcm9iYWJseSB3YW50IHRvIHNwZWNpZnkgdGhlIG1vZGUgYXMgYW4gb2N0YWwgbnVtYmVyLAogKiB3aGljaCBtZWFucyBpdCBzaG91bGQgaGF2ZSBhIGxlYWRpbmcgemVyby4gVGhlIG1vZGUgaXMgYWxzbyBtb2RpZmllZAogKiBieSB0aGUgY3VycmVudCB1bWFzaywgd2hpY2ggeW91IGNhbiBjaGFuZ2UgdXNpbmcKICogdW1hc2suCiAqIEBwYXJhbSBib29sICRyZWN1cnNpdmUgQWxsb3dzIHRoZSBjcmVhdGlvbiBvZiBuZXN0ZWQgZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGluIHRoZQogKiBwYXRobmFtZS4KICogQHBhcmFtIHJlc291cmNlICRjb250ZXh0CiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbWtkaXIoc3RyaW5nICRwYXRobmFtZSwgaW50ICRtb2RlID0gMDc3NywgYm9vbCAkcmVjdXJzaXZlID0gZmFsc2UsICRjb250ZXh0ID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb250ZXh0ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxta2RpcigkcGF0aG5hbWUsICRtb2RlLCAkcmVjdXJzaXZlLCAkY29udGV4dCk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcbWtkaXIoJHBhdGhuYW1lLCAkbW9kZSwgJHJlY3Vyc2l2ZSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGaWxlc3lzdGVtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBwYXJzZV9pbmlfZmlsZSBsb2FkcyBpbiB0aGUKICogaW5pIGZpbGUgc3BlY2lmaWVkIGluIGZpbGVuYW1lLAogKiBhbmQgcmV0dXJucyB0aGUgc2V0dGluZ3MgaW4gaXQgaW4gYW4gYXNzb2NpYXRpdmUgYXJyYXkuCiAqCiAqIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGluaSBmaWxlIGlzIHRoZSBzYW1lIGFzIHRoZSBwaHAuaW5pJ3MuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFRoZSBmaWxlbmFtZSBvZiB0aGUgaW5pIGZpbGUgYmVpbmcgcGFyc2VkLiBJZiBhIHJlbGF0aXZlIHBhdGggaXMgdXNlZCwKICogaXQgaXMgZXZhbHVhdGVkIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LCB0aGVuIHRoZQogKiBpbmNsdWRlX3BhdGguCiAqIEBwYXJhbSBib29sICRwcm9jZXNzX3NlY3Rpb25zIEJ5IHNldHRpbmcgdGhlIHByb2Nlc3Nfc2VjdGlvbnMKICogcGFyYW1ldGVyIHRvIFRSVUUsIHlvdSBnZXQgYSBtdWx0aWRpbWVuc2lvbmFsIGFycmF5LCB3aXRoCiAqIHRoZSBzZWN0aW9uIG5hbWVzIGFuZCBzZXR0aW5ncyBpbmNsdWRlZC4gVGhlIGRlZmF1bHQKICogZm9yIHByb2Nlc3Nfc2VjdGlvbnMgaXMgRkFMU0UKICogQHBhcmFtIGludCAkc2Nhbm5lcl9tb2RlIENhbiBlaXRoZXIgYmUgSU5JX1NDQU5ORVJfTk9STUFMIChkZWZhdWx0KSBvcgogKiBJTklfU0NBTk5FUl9SQVcuIElmIElOSV9TQ0FOTkVSX1JBVwogKiBpcyBzdXBwbGllZCwgdGhlbiBvcHRpb24gdmFsdWVzIHdpbGwgbm90IGJlIHBhcnNlZC4KICoKICoKICogQXMgb2YgUEhQIDUuNi4xIGNhbiBhbHNvIGJlIHNwZWNpZmllZCBhcyBJTklfU0NBTk5FUl9UWVBFRC4KICogSW4gdGhpcyBtb2RlIGJvb2xlYW4sIG51bGwgYW5kIGludGVnZXIgdHlwZXMgYXJlIHByZXNlcnZlZCB3aGVuIHBvc3NpYmxlLgogKiBTdHJpbmcgdmFsdWVzICJ0cnVlIiwgIm9uIiBhbmQgInllcyIKICogYXJlIGNvbnZlcnRlZCB0byBUUlVFLiAiZmFsc2UiLCAib2ZmIiwgIm5vIgogKiBhbmQgIm5vbmUiIGFyZSBjb25zaWRlcmVkIEZBTFNFLiAibnVsbCIgaXMgY29udmVydGVkIHRvIE5VTEwKICogaW4gdHlwZWQgbW9kZS4gQWxzbywgYWxsIG51bWVyaWMgc3RyaW5ncyBhcmUgY29udmVydGVkIHRvIGludGVnZXIgdHlwZSBpZiBpdCBpcyBwb3NzaWJsZS4KICogQHJldHVybiBhcnJheSBUaGUgc2V0dGluZ3MgYXJlIHJldHVybmVkIGFzIGFuIGFzc29jaWF0aXZlIGFycmF5IG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGFyc2VfaW5pX2ZpbGUoc3RyaW5nICRmaWxlbmFtZSwgYm9vbCAkcHJvY2Vzc19zZWN0aW9ucyA9IGZhbHNlLCBpbnQgJHNjYW5uZXJfbW9kZSA9IElOSV9TQ0FOTkVSX05PUk1BTCk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccGFyc2VfaW5pX2ZpbGUoJGZpbGVuYW1lLCAkcHJvY2Vzc19zZWN0aW9ucywgJHNjYW5uZXJfbW9kZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGaWxlc3lzdGVtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHBhcnNlX2luaV9zdHJpbmcgcmV0dXJucyB0aGUgc2V0dGluZ3MgaW4gc3RyaW5nCiAqIGluaSBpbiBhbiBhc3NvY2lhdGl2ZSBhcnJheS4KICoKICogVGhlIHN0cnVjdHVyZSBvZiB0aGUgaW5pIHN0cmluZyBpcyB0aGUgc2FtZSBhcyB0aGUgcGhwLmluaSdzLgogKgogKiBAcGFyYW0gc3RyaW5nICRpbmkgVGhlIGNvbnRlbnRzIG9mIHRoZSBpbmkgZmlsZSBiZWluZyBwYXJzZWQuCiAqIEBwYXJhbSBib29sICRwcm9jZXNzX3NlY3Rpb25zIEJ5IHNldHRpbmcgdGhlIHByb2Nlc3Nfc2VjdGlvbnMKICogcGFyYW1ldGVyIHRvIFRSVUUsIHlvdSBnZXQgYSBtdWx0aWRpbWVuc2lvbmFsIGFycmF5LCB3aXRoCiAqIHRoZSBzZWN0aW9uIG5hbWVzIGFuZCBzZXR0aW5ncyBpbmNsdWRlZC4gVGhlIGRlZmF1bHQKICogZm9yIHByb2Nlc3Nfc2VjdGlvbnMgaXMgRkFMU0UKICogQHBhcmFtIGludCAkc2Nhbm5lcl9tb2RlIENhbiBlaXRoZXIgYmUgSU5JX1NDQU5ORVJfTk9STUFMIChkZWZhdWx0KSBvcgogKiBJTklfU0NBTk5FUl9SQVcuIElmIElOSV9TQ0FOTkVSX1JBVwogKiBpcyBzdXBwbGllZCwgdGhlbiBvcHRpb24gdmFsdWVzIHdpbGwgbm90IGJlIHBhcnNlZC4KICoKICoKICogQXMgb2YgUEhQIDUuNi4xIGNhbiBhbHNvIGJlIHNwZWNpZmllZCBhcyBJTklfU0NBTk5FUl9UWVBFRC4KICogSW4gdGhpcyBtb2RlIGJvb2xlYW4sIG51bGwgYW5kIGludGVnZXIgdHlwZXMgYXJlIHByZXNlcnZlZCB3aGVuIHBvc3NpYmxlLgogKiBTdHJpbmcgdmFsdWVzICJ0cnVlIiwgIm9uIiBhbmQgInllcyIKICogYXJlIGNvbnZlcnRlZCB0byBUUlVFLiAiZmFsc2UiLCAib2ZmIiwgIm5vIgogKiBhbmQgIm5vbmUiIGFyZSBjb25zaWRlcmVkIEZBTFNFLiAibnVsbCIgaXMgY29udmVydGVkIHRvIE5VTEwKICogaW4gdHlwZWQgbW9kZS4gQWxzbywgYWxsIG51bWVyaWMgc3RyaW5ncyBhcmUgY29udmVydGVkIHRvIGludGVnZXIgdHlwZSBpZiBpdCBpcyBwb3NzaWJsZS4KICogQHJldHVybiBhcnJheSBUaGUgc2V0dGluZ3MgYXJlIHJldHVybmVkIGFzIGFuIGFzc29jaWF0aXZlIGFycmF5IG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGFyc2VfaW5pX3N0cmluZyhzdHJpbmcgJGluaSwgYm9vbCAkcHJvY2Vzc19zZWN0aW9ucyA9IGZhbHNlLCBpbnQgJHNjYW5uZXJfbW9kZSA9IElOSV9TQ0FOTkVSX05PUk1BTCk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccGFyc2VfaW5pX3N0cmluZygkaW5pLCAkcHJvY2Vzc19zZWN0aW9ucywgJHNjYW5uZXJfbW9kZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGaWxlc3lzdGVtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJlYWRzIGEgZmlsZSBhbmQgd3JpdGVzIGl0IHRvIHRoZSBvdXRwdXQgYnVmZmVyLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgZmlsZW5hbWUgYmVpbmcgcmVhZC4KICogQHBhcmFtIGJvb2wgJHVzZV9pbmNsdWRlX3BhdGggWW91IGNhbiB1c2UgdGhlIG9wdGlvbmFsIHNlY29uZCBwYXJhbWV0ZXIgYW5kIHNldCBpdCB0byBUUlVFLCBpZgogKiB5b3Ugd2FudCB0byBzZWFyY2ggZm9yIHRoZSBmaWxlIGluIHRoZSBpbmNsdWRlX3BhdGgsIHRvby4KICogQHBhcmFtIHJlc291cmNlICRjb250ZXh0IEEgY29udGV4dCBzdHJlYW0gcmVzb3VyY2UuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkIGZyb20gdGhlIGZpbGUgb24gc3VjY2VzcwogKiBAdGhyb3dzIEZpbGVzeXN0ZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHJlYWRmaWxlKHN0cmluZyAkZmlsZW5hbWUsIGJvb2wgJHVzZV9pbmNsdWRlX3BhdGggPSBmYWxzZSwgJGNvbnRleHQgPSBudWxsKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkY29udGV4dCAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccmVhZGZpbGUoJGZpbGVuYW1lLCAkdXNlX2luY2x1ZGVfcGF0aCwgJGNvbnRleHQpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHJlYWRmaWxlKCRmaWxlbmFtZSwgJHVzZV9pbmNsdWRlX3BhdGgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiByZWFkbGluayBkb2VzIHRoZSBzYW1lIGFzIHRoZSByZWFkbGluayBDIGZ1bmN0aW9uLgogKgogKiBAcGFyYW0gc3RyaW5nICRwYXRoIFRoZSBzeW1ib2xpYyBsaW5rIHBhdGguCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIGNvbnRlbnRzIG9mIHRoZSBzeW1ib2xpYyBsaW5rIHBhdGguCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcmVhZGxpbmsoc3RyaW5nICRwYXRoKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccmVhZGxpbmsoJHBhdGgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiByZWFscGF0aCBleHBhbmRzIGFsbCBzeW1ib2xpYyBsaW5rcyBhbmQKICogcmVzb2x2ZXMgcmVmZXJlbmNlcyB0byAvLi8sIC8uLi8gYW5kIGV4dHJhIC8gY2hhcmFjdGVycyBpbgogKiB0aGUgaW5wdXQgcGF0aCBhbmQgcmV0dXJucyB0aGUgY2Fub25pY2FsaXplZAogKiBhYnNvbHV0ZSBwYXRobmFtZS4KICoKICogQHBhcmFtIHN0cmluZyAkcGF0aCBUaGUgcGF0aCBiZWluZyBjaGVja2VkLgogKgogKgogKiBXaGlsc3QgYSBwYXRoIG11c3QgYmUgc3VwcGxpZWQsIHRoZSB2YWx1ZSBjYW4gYmUgYW4gZW1wdHkgc3RyaW5nLgogKiBJbiB0aGlzIGNhc2UsIHRoZSB2YWx1ZSBpcyBpbnRlcnByZXRlZCBhcyB0aGUgY3VycmVudCBkaXJlY3RvcnkuCiAqCiAqCiAqCiAqIFdoaWxzdCBhIHBhdGggbXVzdCBiZSBzdXBwbGllZCwgdGhlIHZhbHVlIGNhbiBiZSBhbiBlbXB0eSBzdHJpbmcuCiAqIEluIHRoaXMgY2FzZSwgdGhlIHZhbHVlIGlzIGludGVycHJldGVkIGFzIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgY2Fub25pY2FsaXplZCBhYnNvbHV0ZSBwYXRobmFtZSBvbiBzdWNjZXNzLiBUaGUgcmVzdWx0aW5nIHBhdGgKICogd2lsbCBoYXZlIG5vIHN5bWJvbGljIGxpbmssIC8uLyBvciAvLi4vIGNvbXBvbmVudHMuIFRyYWlsaW5nIGRlbGltaXRlcnMsCiAqIHN1Y2ggYXMgXCBhbmQgLywgYXJlIGFsc28gcmVtb3ZlZC4KICoKICogcmVhbHBhdGggcmV0dXJucyBGQUxTRSBvbiBmYWlsdXJlLCBlLmcuIGlmCiAqIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LgogKiBAdGhyb3dzIEZpbGVzeXN0ZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHJlYWxwYXRoKHN0cmluZyAkcGF0aCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHJlYWxwYXRoKCRwYXRoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVzeXN0ZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQXR0ZW1wdHMgdG8gcmVuYW1lIG9sZG5hbWUgdG8KICogbmV3bmFtZSwgbW92aW5nIGl0IGJldHdlZW4gZGlyZWN0b3JpZXMgaWYgbmVjZXNzYXJ5LgogKiBJZiByZW5hbWluZyBhIGZpbGUgYW5kIG5ld25hbWUgZXhpc3RzLAogKiBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuLiBJZiByZW5hbWluZyBhIGRpcmVjdG9yeSBhbmQKICogbmV3bmFtZSBleGlzdHMsCiAqIHRoaXMgZnVuY3Rpb24gd2lsbCBlbWl0IGEgd2FybmluZy4KICoKICogQHBhcmFtIHN0cmluZyAkb2xkbmFtZSBUaGUgb2xkIG5hbWUuCiAqCiAqIFRoZSB3cmFwcGVyIHVzZWQgaW4gb2xkbmFtZQogKiBtdXN0IG1hdGNoIHRoZSB3cmFwcGVyIHVzZWQgaW4KICogbmV3bmFtZS4KICogQHBhcmFtIHN0cmluZyAkbmV3bmFtZSBUaGUgbmV3IG5hbWUuCiAqIEBwYXJhbSByZXNvdXJjZSAkY29udGV4dAogKiBAdGhyb3dzIEZpbGVzeXN0ZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHJlbmFtZShzdHJpbmcgJG9sZG5hbWUsIHN0cmluZyAkbmV3bmFtZSwgJGNvbnRleHQgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGNvbnRleHQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHJlbmFtZSgkb2xkbmFtZSwgJG5ld25hbWUsICRjb250ZXh0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxyZW5hbWUoJG9sZG5hbWUsICRuZXduYW1lKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVzeXN0ZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgdGhlIGZpbGUgcG9zaXRpb24gaW5kaWNhdG9yIGZvciBoYW5kbGUKICogdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSBzdHJlYW0uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaGFuZGxlIFRoZSBmaWxlIHBvaW50ZXIgbXVzdCBiZSB2YWxpZCwgYW5kIG11c3QgcG9pbnQgdG8gYSBmaWxlCiAqIHN1Y2Nlc3NmdWxseSBvcGVuZWQgYnkgZm9wZW4uCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcmV3aW5kKCRoYW5kbGUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccmV3aW5kKCRoYW5kbGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQXR0ZW1wdHMgdG8gcmVtb3ZlIHRoZSBkaXJlY3RvcnkgbmFtZWQgYnkgZGlybmFtZS4KICogVGhlIGRpcmVjdG9yeSBtdXN0IGJlIGVtcHR5LCBhbmQgdGhlIHJlbGV2YW50IHBlcm1pc3Npb25zIG11c3QgcGVybWl0IHRoaXMuCiAqIEEgRV9XQVJOSU5HIGxldmVsIGVycm9yIHdpbGwgYmUgZ2VuZXJhdGVkIG9uIGZhaWx1cmUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRpcm5hbWUgUGF0aCB0byB0aGUgZGlyZWN0b3J5LgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbnRleHQKICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBybWRpcihzdHJpbmcgJGRpcm5hbWUsICRjb250ZXh0ID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb250ZXh0ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxybWRpcigkZGlybmFtZSwgJGNvbnRleHQpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHJtZGlyKCRkaXJuYW1lKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVzeXN0ZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIHN5bWxpbmsgY3JlYXRlcyBhIHN5bWJvbGljIGxpbmsgdG8gdGhlIGV4aXN0aW5nCiAqIHRhcmdldCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZQogKiBsaW5rLgogKgogKiBAcGFyYW0gc3RyaW5nICR0YXJnZXQgVGFyZ2V0IG9mIHRoZSBsaW5rLgogKiBAcGFyYW0gc3RyaW5nICRsaW5rIFRoZSBsaW5rIG5hbWUuCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3ltbGluayhzdHJpbmcgJHRhcmdldCwgc3RyaW5nICRsaW5rKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHN5bWxpbmsoJHRhcmdldCwgJGxpbmspOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ3JlYXRlcyBhIGZpbGUgd2l0aCBhIHVuaXF1ZSBmaWxlbmFtZSwgd2l0aCBhY2Nlc3MgcGVybWlzc2lvbiBzZXQgdG8gMDYwMCwgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkuCiAqIElmIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IHdyaXRhYmxlLCB0ZW1wbmFtIG1heQogKiBnZW5lcmF0ZSBhIGZpbGUgaW4gdGhlIHN5c3RlbSdzIHRlbXBvcmFyeSBkaXJlY3RvcnksIGFuZCByZXR1cm4KICogdGhlIGZ1bGwgcGF0aCB0byB0aGF0IGZpbGUsIGluY2x1ZGluZyBpdHMgbmFtZS4KICoKICogQHBhcmFtIHN0cmluZyAkZGlyIFRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHRlbXBvcmFyeSBmaWxlbmFtZSB3aWxsIGJlIGNyZWF0ZWQuCiAqIEBwYXJhbSBzdHJpbmcgJHByZWZpeCBUaGUgcHJlZml4IG9mIHRoZSBnZW5lcmF0ZWQgdGVtcG9yYXJ5IGZpbGVuYW1lLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBuZXcgdGVtcG9yYXJ5IGZpbGVuYW1lICh3aXRoIHBhdGgpLgogKiBAdGhyb3dzIEZpbGVzeXN0ZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHRlbXBuYW0oc3RyaW5nICRkaXIsIHN0cmluZyAkcHJlZml4KTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcdGVtcG5hbSgkZGlyLCAkcHJlZml4KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVzeXN0ZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQ3JlYXRlcyBhIHRlbXBvcmFyeSBmaWxlIHdpdGggYSB1bmlxdWUgbmFtZSBpbiByZWFkLXdyaXRlICh3KykgbW9kZSBhbmQKICogcmV0dXJucyBhIGZpbGUgaGFuZGxlLgogKgogKiBUaGUgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgd2hlbiBjbG9zZWQgKGZvciBleGFtcGxlLCBieSBjYWxsaW5nCiAqIGZjbG9zZSwgb3Igd2hlbiB0aGVyZSBhcmUgbm8gcmVtYWluaW5nIHJlZmVyZW5jZXMgdG8KICogdGhlIGZpbGUgaGFuZGxlIHJldHVybmVkIGJ5IHRtcGZpbGUpLCBvciB3aGVuIHRoZQogKiBzY3JpcHQgZW5kcy4KICoKICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgZmlsZSBoYW5kbGUsIHNpbWlsYXIgdG8gdGhlIG9uZSByZXR1cm5lZCBieQogKiBmb3BlbiwgZm9yIHRoZSBuZXcgZmlsZS4KICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB0bXBmaWxlKCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFx0bXBmaWxlKCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGaWxlc3lzdGVtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEF0dGVtcHRzIHRvIHNldCB0aGUgYWNjZXNzIGFuZCBtb2RpZmljYXRpb24gdGltZXMgb2YgdGhlIGZpbGUgbmFtZWQgaW4gdGhlCiAqIGZpbGVuYW1lIHBhcmFtZXRlciB0byB0aGUgdmFsdWUgZ2l2ZW4gaW4KICogdGltZS4KICogTm90ZSB0aGF0IHRoZSBhY2Nlc3MgdGltZSBpcyBhbHdheXMgbW9kaWZpZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIG51bWJlcgogKiBvZiBwYXJhbWV0ZXJzLgogKgogKiBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgbmFtZSBvZiB0aGUgZmlsZSBiZWluZyB0b3VjaGVkLgogKiBAcGFyYW0gaW50ICR0aW1lIFRoZSB0b3VjaCB0aW1lLiBJZiB0aW1lIGlzIG5vdCBzdXBwbGllZCwKICogdGhlIGN1cnJlbnQgc3lzdGVtIHRpbWUgaXMgdXNlZC4KICogQHBhcmFtIGludCAkYXRpbWUgSWYgcHJlc2VudCwgdGhlIGFjY2VzcyB0aW1lIG9mIHRoZSBnaXZlbiBmaWxlbmFtZSBpcyBzZXQgdG8KICogdGhlIHZhbHVlIG9mIGF0aW1lLiBPdGhlcndpc2UsIGl0IGlzIHNldCB0bwogKiB0aGUgdmFsdWUgcGFzc2VkIHRvIHRoZSB0aW1lIHBhcmFtZXRlci4KICogSWYgbmVpdGhlciBhcmUgcHJlc2VudCwgdGhlIGN1cnJlbnQgc3lzdGVtIHRpbWUgaXMgdXNlZC4KICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB0b3VjaChzdHJpbmcgJGZpbGVuYW1lLCBpbnQgJHRpbWUgPSBudWxsLCBpbnQgJGF0aW1lID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRhdGltZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcdG91Y2goJGZpbGVuYW1lLCAkdGltZSwgJGF0aW1lKTsKICAgIH0gZWxzZWlmICgkdGltZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcdG91Y2goJGZpbGVuYW1lLCAkdGltZSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcdG91Y2goJGZpbGVuYW1lKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVzeXN0ZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERlbGV0ZXMgZmlsZW5hbWUuICBTaW1pbGFyIHRvIHRoZSBVbml4IEMgdW5saW5rKCkKICogZnVuY3Rpb24uIEFuIEVfV0FSTklORyBsZXZlbCBlcnJvciB3aWxsIGJlIGdlbmVyYXRlZCBvbgogKiBmYWlsdXJlLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBQYXRoIHRvIHRoZSBmaWxlLgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbnRleHQKICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB1bmxpbmsoc3RyaW5nICRmaWxlbmFtZSwgJGNvbnRleHQgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGNvbnRleHQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHVubGluaygkZmlsZW5hbWUsICRjb250ZXh0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFx1bmxpbmsoJGZpbGVuYW1lKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVzeXN0ZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/filter.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xGaWx0ZXJFeGNlcHRpb247CgovKioKICogVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yIHJldHJpZXZpbmcgbWFueSB2YWx1ZXMgd2l0aG91dAogKiByZXBldGl0aXZlbHkgY2FsbGluZyBmaWx0ZXJfaW5wdXQuCiAqCiAqIEBwYXJhbSBpbnQgJHR5cGUgT25lIG9mIElOUFVUX0dFVCwgSU5QVVRfUE9TVCwKICogSU5QVVRfQ09PS0lFLCBJTlBVVF9TRVJWRVIsIG9yCiAqIElOUFVUX0VOVi4KICogQHBhcmFtIGludHxhcnJheSAkZGVmaW5pdGlvbiBBbiBhcnJheSBkZWZpbmluZyB0aGUgYXJndW1lbnRzLiBBIHZhbGlkIGtleSBpcyBhIHN0cmluZwogKiBjb250YWluaW5nIGEgdmFyaWFibGUgbmFtZSBhbmQgYSB2YWxpZCB2YWx1ZSBpcyBlaXRoZXIgYSBmaWx0ZXIgdHlwZSwgb3IgYW4gYXJyYXkKICogb3B0aW9uYWxseSBzcGVjaWZ5aW5nIHRoZSBmaWx0ZXIsIGZsYWdzIGFuZCBvcHRpb25zLiBJZiB0aGUgdmFsdWUgaXMgYW4KICogYXJyYXksIHZhbGlkIGtleXMgYXJlIGZpbHRlciB3aGljaCBzcGVjaWZpZXMgdGhlCiAqIGZpbHRlciB0eXBlLAogKiBmbGFncyB3aGljaCBzcGVjaWZpZXMgYW55IGZsYWdzIHRoYXQgYXBwbHkgdG8gdGhlCiAqIGZpbHRlciwgYW5kIG9wdGlvbnMgd2hpY2ggc3BlY2lmaWVzIGFueSBvcHRpb25zIHRoYXQKICogYXBwbHkgdG8gdGhlIGZpbHRlci4gU2VlIHRoZSBleGFtcGxlIGJlbG93IGZvciBhIGJldHRlciB1bmRlcnN0YW5kaW5nLgogKgogKiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYWxzbyBhbiBpbnRlZ2VyIGhvbGRpbmcgYSBmaWx0ZXIgY29uc3RhbnQuIFRoZW4gYWxsIHZhbHVlcyBpbiB0aGUKICogaW5wdXQgYXJyYXkgYXJlIGZpbHRlcmVkIGJ5IHRoaXMgZmlsdGVyLgogKiBAcGFyYW0gYm9vbCAkYWRkX2VtcHR5IEFkZCBtaXNzaW5nIGtleXMgYXMgTlVMTCB0byB0aGUgcmV0dXJuIHZhbHVlLgogKiBAcmV0dXJuIG1peGVkIEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHZhbHVlcyBvZiB0aGUgcmVxdWVzdGVkIHZhcmlhYmxlcyBvbiBzdWNjZXNzLgogKiBJZiB0aGUgaW5wdXQgYXJyYXkgZGVzaWduYXRlZCBieSB0eXBlIGlzIG5vdCBwb3B1bGF0ZWQsCiAqIHRoZSBmdW5jdGlvbiByZXR1cm5zIE5VTEwgaWYgdGhlIEZJTFRFUl9OVUxMX09OX0ZBSUxVUkUKICogZmxhZyBpcyBub3QgZ2l2ZW4sIG9yIEZBTFNFIG90aGVyd2lzZS4gRm9yIG90aGVyIGZhaWx1cmVzLCBGQUxTRSBpcyByZXR1cm5lZC4KICoKICogQW4gYXJyYXkgdmFsdWUgd2lsbCBiZSBGQUxTRSBpZiB0aGUgZmlsdGVyIGZhaWxzLCBvciBOVUxMIGlmCiAqIHRoZSB2YXJpYWJsZSBpcyBub3Qgc2V0LiBPciBpZiB0aGUgZmxhZyBGSUxURVJfTlVMTF9PTl9GQUlMVVJFCiAqIGlzIHVzZWQsIGl0IHJldHVybnMgRkFMU0UgaWYgdGhlIHZhcmlhYmxlIGlzIG5vdCBzZXQgYW5kIE5VTEwgaWYgdGhlIGZpbHRlcgogKiBmYWlscy4gSWYgdGhlIGFkZF9lbXB0eSBwYXJhbWV0ZXIgaXMgRkFMU0UsIG5vIGFycmF5CiAqIGVsZW1lbnQgd2lsbCBiZSBhZGRlZCBmb3IgdW5zZXQgdmFyaWFibGVzLgogKiBAdGhyb3dzIEZpbHRlckV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZmlsdGVyX2lucHV0X2FycmF5KGludCAkdHlwZSwgJGRlZmluaXRpb24gPSBudWxsLCBib29sICRhZGRfZW1wdHkgPSB0cnVlKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGFkZF9lbXB0eSAhPT0gdHJ1ZSkgewogICAgICAgICRyZXN1bHQgPSBcZmlsdGVyX2lucHV0X2FycmF5KCR0eXBlLCAkZGVmaW5pdGlvbiwgJGFkZF9lbXB0eSk7CiAgICB9IGVsc2VpZiAoJGRlZmluaXRpb24gIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGZpbHRlcl9pbnB1dF9hcnJheSgkdHlwZSwgJGRlZmluaXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGZpbHRlcl9pbnB1dF9hcnJheSgkdHlwZSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGaWx0ZXJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yIHJldHJpZXZpbmcgbWFueSB2YWx1ZXMgd2l0aG91dAogKiByZXBldGl0aXZlbHkgY2FsbGluZyBmaWx0ZXJfdmFyLgogKgogKiBAcGFyYW0gYXJyYXkgJGRhdGEgQW4gYXJyYXkgd2l0aCBzdHJpbmcga2V5cyBjb250YWluaW5nIHRoZSBkYXRhIHRvIGZpbHRlci4KICogQHBhcmFtIG1peGVkICRkZWZpbml0aW9uIEFuIGFycmF5IGRlZmluaW5nIHRoZSBhcmd1bWVudHMuIEEgdmFsaWQga2V5IGlzIGEgc3RyaW5nCiAqIGNvbnRhaW5pbmcgYSB2YXJpYWJsZSBuYW1lIGFuZCBhIHZhbGlkIHZhbHVlIGlzIGVpdGhlciBhCiAqIGZpbHRlciB0eXBlLCBvciBhbgogKiBhcnJheSBvcHRpb25hbGx5IHNwZWNpZnlpbmcgdGhlIGZpbHRlciwgZmxhZ3MgYW5kIG9wdGlvbnMuCiAqIElmIHRoZSB2YWx1ZSBpcyBhbiBhcnJheSwgdmFsaWQga2V5cyBhcmUgZmlsdGVyCiAqIHdoaWNoIHNwZWNpZmllcyB0aGUgZmlsdGVyIHR5cGUsCiAqIGZsYWdzIHdoaWNoIHNwZWNpZmllcyBhbnkgZmxhZ3MgdGhhdCBhcHBseSB0byB0aGUKICogZmlsdGVyLCBhbmQgb3B0aW9ucyB3aGljaCBzcGVjaWZpZXMgYW55IG9wdGlvbnMgdGhhdAogKiBhcHBseSB0byB0aGUgZmlsdGVyLiBTZWUgdGhlIGV4YW1wbGUgYmVsb3cgZm9yIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcuCiAqCiAqIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbHNvIGFuIGludGVnZXIgaG9sZGluZyBhIGZpbHRlciBjb25zdGFudC4gVGhlbiBhbGwgdmFsdWVzIGluIHRoZQogKiBpbnB1dCBhcnJheSBhcmUgZmlsdGVyZWQgYnkgdGhpcyBmaWx0ZXIuCiAqIEBwYXJhbSBib29sICRhZGRfZW1wdHkgQWRkIG1pc3Npbmcga2V5cyBhcyBOVUxMIHRvIHRoZSByZXR1cm4gdmFsdWUuCiAqIEByZXR1cm4gbWl4ZWQgQW4gYXJyYXkgY29udGFpbmluZyB0aGUgdmFsdWVzIG9mIHRoZSByZXF1ZXN0ZWQgdmFyaWFibGVzIG9uIHN1Y2Nlc3MuIEFuIGFycmF5IHZhbHVlIHdpbGwgYmUgRkFMU0UgaWYgdGhlIGZpbHRlciBmYWlscywgb3IgTlVMTCBpZgogKiB0aGUgdmFyaWFibGUgaXMgbm90IHNldC4KICogQHRocm93cyBGaWx0ZXJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGZpbHRlcl92YXJfYXJyYXkoYXJyYXkgJGRhdGEsICRkZWZpbml0aW9uID0gbnVsbCwgYm9vbCAkYWRkX2VtcHR5ID0gdHJ1ZSkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRhZGRfZW1wdHkgIT09IHRydWUpIHsKICAgICAgICAkcmVzdWx0ID0gXGZpbHRlcl92YXJfYXJyYXkoJGRhdGEsICRkZWZpbml0aW9uLCAkYWRkX2VtcHR5KTsKICAgIH0gZWxzZWlmICgkZGVmaW5pdGlvbiAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcZmlsdGVyX3Zhcl9hcnJheSgkZGF0YSwgJGRlZmluaXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGZpbHRlcl92YXJfYXJyYXkoJGRhdGEpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsdGVyRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/fpm.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xGcG1FeGNlcHRpb247CgovKioKICogVGhpcyBmdW5jdGlvbiBmbHVzaGVzIGFsbCByZXNwb25zZSBkYXRhIHRvIHRoZSBjbGllbnQgYW5kIGZpbmlzaGVzIHRoZQogKiByZXF1ZXN0LiBUaGlzIGFsbG93cyBmb3IgdGltZSBjb25zdW1pbmcgdGFza3MgdG8gYmUgcGVyZm9ybWVkIHdpdGhvdXQKICogbGVhdmluZyB0aGUgY29ubmVjdGlvbiB0byB0aGUgY2xpZW50IG9wZW4uCiAqCiAqIEB0aHJvd3MgRnBtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmYXN0Y2dpX2ZpbmlzaF9yZXF1ZXN0KCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxmYXN0Y2dpX2ZpbmlzaF9yZXF1ZXN0KCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGcG1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/ftp.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xGdHBFeGNlcHRpb247CgovKioKICogU2VuZHMgYW4gQUxMTyBjb21tYW5kIHRvIHRoZSByZW1vdGUgRlRQIHNlcnZlciB0bwogKiBhbGxvY2F0ZSBzcGFjZSBmb3IgYSBmaWxlIHRvIGJlIHVwbG9hZGVkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGZ0cF9zdHJlYW0gVGhlIGxpbmsgaWRlbnRpZmllciBvZiB0aGUgRlRQIGNvbm5lY3Rpb24uCiAqIEBwYXJhbSBpbnQgJGZpbGVzaXplIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYWxsb2NhdGUuCiAqIEBwYXJhbSBzdHJpbmcgJHJlc3VsdCBBIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNlcnZlcnMgcmVzcG9uc2Ugd2lsbCBiZSByZXR1cm5lZCBieQogKiByZWZlcmVuY2UgaW4gcmVzdWx0IGlmIGEgdmFyaWFibGUgaXMgcHJvdmlkZWQuCiAqIEB0aHJvd3MgRnRwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmdHBfYWxsb2MoJGZ0cF9zdHJlYW0sIGludCAkZmlsZXNpemUsIHN0cmluZyAmJHJlc3VsdCA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZnRwX2FsbG9jKCRmdHBfc3RyZWFtLCAkZmlsZXNpemUsICRyZXN1bHQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRnRwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGZ0cAogKiBAcGFyYW0gc3RyaW5nICRyZW1vdGVfZmlsZQogKiBAcGFyYW0gc3RyaW5nICRsb2NhbF9maWxlCiAqIEBwYXJhbSBpbnQgJG1vZGUKICogQHRocm93cyBGdHBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGZ0cF9hcHBlbmQoJGZ0cCwgc3RyaW5nICRyZW1vdGVfZmlsZSwgc3RyaW5nICRsb2NhbF9maWxlLCBpbnQgJG1vZGUgPSBGVFBfQklOQVJZKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZ0cF9hcHBlbmQoJGZ0cCwgJHJlbW90ZV9maWxlLCAkbG9jYWxfZmlsZSwgJG1vZGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRnRwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBDaGFuZ2VzIHRvIHRoZSBwYXJlbnQgZGlyZWN0b3J5LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGZ0cF9zdHJlYW0gVGhlIGxpbmsgaWRlbnRpZmllciBvZiB0aGUgRlRQIGNvbm5lY3Rpb24uCiAqIEB0aHJvd3MgRnRwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmdHBfY2R1cCgkZnRwX3N0cmVhbSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxmdHBfY2R1cCgkZnRwX3N0cmVhbSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGdHBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHRvIHRoZSBzcGVjaWZpZWQgb25lLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGZ0cF9zdHJlYW0gVGhlIGxpbmsgaWRlbnRpZmllciBvZiB0aGUgRlRQIGNvbm5lY3Rpb24uCiAqIEBwYXJhbSBzdHJpbmcgJGRpcmVjdG9yeSBUaGUgdGFyZ2V0IGRpcmVjdG9yeS4KICogQHRocm93cyBGdHBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGZ0cF9jaGRpcigkZnRwX3N0cmVhbSwgc3RyaW5nICRkaXJlY3RvcnkpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZnRwX2NoZGlyKCRmdHBfc3RyZWFtLCAkZGlyZWN0b3J5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZ0cEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyB0aGUgcGVybWlzc2lvbnMgb24gdGhlIHNwZWNpZmllZCByZW1vdGUgZmlsZSB0bwogKiBtb2RlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGZ0cF9zdHJlYW0gVGhlIGxpbmsgaWRlbnRpZmllciBvZiB0aGUgRlRQIGNvbm5lY3Rpb24uCiAqIEBwYXJhbSBpbnQgJG1vZGUgVGhlIG5ldyBwZXJtaXNzaW9ucywgZ2l2ZW4gYXMgYW4gb2N0YWwgdmFsdWUuCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFRoZSByZW1vdGUgZmlsZS4KICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgbmV3IGZpbGUgcGVybWlzc2lvbnMgb24gc3VjY2Vzcy4KICogQHRocm93cyBGdHBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGZ0cF9jaG1vZCgkZnRwX3N0cmVhbSwgaW50ICRtb2RlLCBzdHJpbmcgJGZpbGVuYW1lKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZnRwX2NobW9kKCRmdHBfc3RyZWFtLCAkbW9kZSwgJGZpbGVuYW1lKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZ0cEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBmdHBfY2xvc2UgY2xvc2VzIHRoZSBnaXZlbiBsaW5rIGlkZW50aWZpZXIKICogYW5kIHJlbGVhc2VzIHRoZSByZXNvdXJjZS4KICoKICogQHBhcmFtIHJlc291cmNlICRmdHBfc3RyZWFtIFRoZSBsaW5rIGlkZW50aWZpZXIgb2YgdGhlIEZUUCBjb25uZWN0aW9uLgogKiBAdGhyb3dzIEZ0cEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZnRwX2Nsb3NlKCRmdHBfc3RyZWFtKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZ0cF9jbG9zZSgkZnRwX3N0cmVhbSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGdHBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGZ0cF9jb25uZWN0IG9wZW5zIGFuIEZUUCBjb25uZWN0aW9uIHRvIHRoZQogKiBzcGVjaWZpZWQgaG9zdC4KICoKICogQHBhcmFtIHN0cmluZyAkaG9zdCBUaGUgRlRQIHNlcnZlciBhZGRyZXNzLiBUaGlzIHBhcmFtZXRlciBzaG91bGRuJ3QgaGF2ZSBhbnkgdHJhaWxpbmcKICogc2xhc2hlcyBhbmQgc2hvdWxkbid0IGJlIHByZWZpeGVkIHdpdGggZnRwOi8vLgogKiBAcGFyYW0gaW50ICRwb3J0IFRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyBhbiBhbHRlcm5hdGUgcG9ydCB0byBjb25uZWN0IHRvLiBJZiBpdCBpcwogKiBvbWl0dGVkIG9yIHNldCB0byB6ZXJvLCB0aGVuIHRoZSBkZWZhdWx0IEZUUCBwb3J0LCAyMSwgd2lsbCBiZSB1c2VkLgogKiBAcGFyYW0gaW50ICR0aW1lb3V0IFRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgdGltZW91dCBpbiBzZWNvbmRzIGZvciBhbGwgc3Vic2VxdWVudCBuZXR3b3JrIG9wZXJhdGlvbnMuCiAqIElmIG9taXR0ZWQsIHRoZSBkZWZhdWx0IHZhbHVlIGlzIDkwIHNlY29uZHMuIFRoZSB0aW1lb3V0IGNhbiBiZSBjaGFuZ2VkIGFuZAogKiBxdWVyaWVkIGF0IGFueSB0aW1lIHdpdGggZnRwX3NldF9vcHRpb24gYW5kCiAqIGZ0cF9nZXRfb3B0aW9uLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBGVFAgc3RyZWFtIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRnRwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmdHBfY29ubmVjdChzdHJpbmcgJGhvc3QsIGludCAkcG9ydCA9IDIxLCBpbnQgJHRpbWVvdXQgPSA5MCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxmdHBfY29ubmVjdCgkaG9zdCwgJHBvcnQsICR0aW1lb3V0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZ0cEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBmdHBfZGVsZXRlIGRlbGV0ZXMgdGhlIGZpbGUgc3BlY2lmaWVkIGJ5CiAqIHBhdGggZnJvbSB0aGUgRlRQIHNlcnZlci4KICoKICogQHBhcmFtIHJlc291cmNlICRmdHBfc3RyZWFtIFRoZSBsaW5rIGlkZW50aWZpZXIgb2YgdGhlIEZUUCBjb25uZWN0aW9uLgogKiBAcGFyYW0gc3RyaW5nICRwYXRoIFRoZSBmaWxlIHRvIGRlbGV0ZS4KICogQHRocm93cyBGdHBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGZ0cF9kZWxldGUoJGZ0cF9zdHJlYW0sIHN0cmluZyAkcGF0aCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxmdHBfZGVsZXRlKCRmdHBfc3RyZWFtLCAkcGF0aCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGdHBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGZ0cF9mZ2V0IHJldHJpZXZlcyByZW1vdGVfZmlsZQogKiBmcm9tIHRoZSBGVFAgc2VydmVyLCBhbmQgd3JpdGVzIGl0IHRvIHRoZSBnaXZlbiBmaWxlIHBvaW50ZXIuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZnRwX3N0cmVhbSBUaGUgbGluayBpZGVudGlmaWVyIG9mIHRoZSBGVFAgY29ubmVjdGlvbi4KICogQHBhcmFtIHJlc291cmNlICRoYW5kbGUgQW4gb3BlbiBmaWxlIHBvaW50ZXIgaW4gd2hpY2ggd2Ugc3RvcmUgdGhlIGRhdGEuCiAqIEBwYXJhbSBzdHJpbmcgJHJlbW90ZV9maWxlIFRoZSByZW1vdGUgZmlsZSBwYXRoLgogKiBAcGFyYW0gaW50ICRtb2RlIFRoZSB0cmFuc2ZlciBtb2RlLiBNdXN0IGJlIGVpdGhlciBGVFBfQVNDSUkgb3IKICogRlRQX0JJTkFSWS4KICogQHBhcmFtIGludCAkcmVzdW1lcG9zIFRoZSBwb3NpdGlvbiBpbiB0aGUgcmVtb3RlIGZpbGUgdG8gc3RhcnQgZG93bmxvYWRpbmcgZnJvbS4KICogQHRocm93cyBGdHBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGZ0cF9mZ2V0KCRmdHBfc3RyZWFtLCAkaGFuZGxlLCBzdHJpbmcgJHJlbW90ZV9maWxlLCBpbnQgJG1vZGUgPSBGVFBfQklOQVJZLCBpbnQgJHJlc3VtZXBvcyA9IDApOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZnRwX2ZnZXQoJGZ0cF9zdHJlYW0sICRoYW5kbGUsICRyZW1vdGVfZmlsZSwgJG1vZGUsICRyZXN1bWVwb3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRnRwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBmdHBfZnB1dCB1cGxvYWRzIHRoZSBkYXRhIGZyb20gYSBmaWxlIHBvaW50ZXIKICogdG8gYSByZW1vdGUgZmlsZSBvbiB0aGUgRlRQIHNlcnZlci4KICoKICogQHBhcmFtIHJlc291cmNlICRmdHBfc3RyZWFtIFRoZSBsaW5rIGlkZW50aWZpZXIgb2YgdGhlIEZUUCBjb25uZWN0aW9uLgogKiBAcGFyYW0gc3RyaW5nICRyZW1vdGVfZmlsZSBUaGUgcmVtb3RlIGZpbGUgcGF0aC4KICogQHBhcmFtIHJlc291cmNlICRoYW5kbGUgQW4gb3BlbiBmaWxlIHBvaW50ZXIgb24gdGhlIGxvY2FsIGZpbGUuIFJlYWRpbmcgc3RvcHMgYXQgZW5kIG9mIGZpbGUuCiAqIEBwYXJhbSBpbnQgJG1vZGUgVGhlIHRyYW5zZmVyIG1vZGUuIE11c3QgYmUgZWl0aGVyIEZUUF9BU0NJSSBvcgogKiBGVFBfQklOQVJZLgogKiBAcGFyYW0gaW50ICRzdGFydHBvcyBUaGUgcG9zaXRpb24gaW4gdGhlIHJlbW90ZSBmaWxlIHRvIHN0YXJ0IHVwbG9hZGluZyB0by4KICogQHRocm93cyBGdHBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGZ0cF9mcHV0KCRmdHBfc3RyZWFtLCBzdHJpbmcgJHJlbW90ZV9maWxlLCAkaGFuZGxlLCBpbnQgJG1vZGUgPSBGVFBfQklOQVJZLCBpbnQgJHN0YXJ0cG9zID0gMCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxmdHBfZnB1dCgkZnRwX3N0cmVhbSwgJHJlbW90ZV9maWxlLCAkaGFuZGxlLCAkbW9kZSwgJHN0YXJ0cG9zKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZ0cEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogZnRwX2dldCByZXRyaWV2ZXMgYSByZW1vdGUgZmlsZSBmcm9tIHRoZSBGVFAgc2VydmVyLAogKiBhbmQgc2F2ZXMgaXQgaW50byBhIGxvY2FsIGZpbGUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZnRwX3N0cmVhbSBUaGUgbGluayBpZGVudGlmaWVyIG9mIHRoZSBGVFAgY29ubmVjdGlvbi4KICogQHBhcmFtIHN0cmluZyAkbG9jYWxfZmlsZSBUaGUgbG9jYWwgZmlsZSBwYXRoICh3aWxsIGJlIG92ZXJ3cml0dGVuIGlmIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzKS4KICogQHBhcmFtIHN0cmluZyAkcmVtb3RlX2ZpbGUgVGhlIHJlbW90ZSBmaWxlIHBhdGguCiAqIEBwYXJhbSBpbnQgJG1vZGUgVGhlIHRyYW5zZmVyIG1vZGUuIE11c3QgYmUgZWl0aGVyIEZUUF9BU0NJSSBvcgogKiBGVFBfQklOQVJZLgogKiBAcGFyYW0gaW50ICRyZXN1bWVwb3MgVGhlIHBvc2l0aW9uIGluIHRoZSByZW1vdGUgZmlsZSB0byBzdGFydCBkb3dubG9hZGluZyBmcm9tLgogKiBAdGhyb3dzIEZ0cEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZnRwX2dldCgkZnRwX3N0cmVhbSwgc3RyaW5nICRsb2NhbF9maWxlLCBzdHJpbmcgJHJlbW90ZV9maWxlLCBpbnQgJG1vZGUgPSBGVFBfQklOQVJZLCBpbnQgJHJlc3VtZXBvcyA9IDApOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZnRwX2dldCgkZnRwX3N0cmVhbSwgJGxvY2FsX2ZpbGUsICRyZW1vdGVfZmlsZSwgJG1vZGUsICRyZXN1bWVwb3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRnRwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBMb2dzIGluIHRvIHRoZSBnaXZlbiBGVFAgc3RyZWFtLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGZ0cF9zdHJlYW0gVGhlIGxpbmsgaWRlbnRpZmllciBvZiB0aGUgRlRQIGNvbm5lY3Rpb24uCiAqIEBwYXJhbSBzdHJpbmcgJHVzZXJuYW1lIFRoZSB1c2VybmFtZSAoVVNFUikuCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkIFRoZSBwYXNzd29yZCAoUEFTUykuCiAqIEB0aHJvd3MgRnRwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmdHBfbG9naW4oJGZ0cF9zdHJlYW0sIHN0cmluZyAkdXNlcm5hbWUsIHN0cmluZyAkcGFzc3dvcmQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZnRwX2xvZ2luKCRmdHBfc3RyZWFtLCAkdXNlcm5hbWUsICRwYXNzd29yZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGdHBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENyZWF0ZXMgdGhlIHNwZWNpZmllZCBkaXJlY3Rvcnkgb24gdGhlIEZUUCBzZXJ2ZXIuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZnRwX3N0cmVhbSBUaGUgbGluayBpZGVudGlmaWVyIG9mIHRoZSBGVFAgY29ubmVjdGlvbi4KICogQHBhcmFtIHN0cmluZyAkZGlyZWN0b3J5IFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCB3aWxsIGJlIGNyZWF0ZWQuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIG5ld2x5IGNyZWF0ZWQgZGlyZWN0b3J5IG5hbWUgb24gc3VjY2Vzcy4KICogQHRocm93cyBGdHBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGZ0cF9ta2RpcigkZnRwX3N0cmVhbSwgc3RyaW5nICRkaXJlY3RvcnkpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxmdHBfbWtkaXIoJGZ0cF9zdHJlYW0sICRkaXJlY3RvcnkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRnRwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZnRwX3N0cmVhbSBUaGUgbGluayBpZGVudGlmaWVyIG9mIHRoZSBGVFAgY29ubmVjdGlvbi4KICogQHBhcmFtIHN0cmluZyAkZGlyZWN0b3J5IFRoZSBkaXJlY3RvcnkgdG8gYmUgbGlzdGVkLgogKiBAcmV0dXJuIGFycmF5IFJldHVybnMgYW4gYXJyYXkgb2YgYXJyYXlzIHdpdGggZmlsZSBpbmZvcyBmcm9tIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRnRwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmdHBfbWxzZCgkZnRwX3N0cmVhbSwgc3RyaW5nICRkaXJlY3RvcnkpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZ0cF9tbHNkKCRmdHBfc3RyZWFtLCAkZGlyZWN0b3J5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZ0cEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGZ0cF9zdHJlYW0gVGhlIGxpbmsgaWRlbnRpZmllciBvZiB0aGUgRlRQIGNvbm5lY3Rpb24uCiAqIEBwYXJhbSBzdHJpbmcgJGRpcmVjdG9yeSBUaGUgZGlyZWN0b3J5IHRvIGJlIGxpc3RlZC4gVGhpcyBwYXJhbWV0ZXIgY2FuIGFsc28gaW5jbHVkZSBhcmd1bWVudHMsIGVnLgogKiBmdHBfbmxpc3QoJGNvbm5faWQsICItbGEgL3lvdXIvZGlyIik7CiAqIE5vdGUgdGhhdCB0aGlzIHBhcmFtZXRlciBpc24ndCBlc2NhcGVkIHNvIHRoZXJlIG1heSBiZSBzb21lIGlzc3VlcyB3aXRoCiAqIGZpbGVuYW1lcyBjb250YWluaW5nIHNwYWNlcyBhbmQgb3RoZXIgY2hhcmFjdGVycy4KICogQHJldHVybiBhcnJheSBSZXR1cm5zIGFuIGFycmF5IG9mIGZpbGVuYW1lcyBmcm9tIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRnRwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmdHBfbmxpc3QoJGZ0cF9zdHJlYW0sIHN0cmluZyAkZGlyZWN0b3J5KTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxmdHBfbmxpc3QoJGZ0cF9zdHJlYW0sICRkaXJlY3RvcnkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRnRwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGZ0cF9wYXN2IHR1cm5zIG9uIG9yIG9mZiBwYXNzaXZlIG1vZGUuIEluCiAqIHBhc3NpdmUgbW9kZSwgZGF0YSBjb25uZWN0aW9ucyBhcmUgaW5pdGlhdGVkIGJ5IHRoZSBjbGllbnQsCiAqIHJhdGhlciB0aGFuIGJ5IHRoZSBzZXJ2ZXIuCiAqIEl0IG1heSBiZSBuZWVkZWQgaWYgdGhlIGNsaWVudCBpcyBiZWhpbmQgZmlyZXdhbGwuCiAqCiAqIFBsZWFzZSBub3RlIHRoYXQgZnRwX3Bhc3YgY2FuIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGEKICogc3VjY2Vzc2Z1bCBsb2dpbiBvciBvdGhlcndpc2UgaXQgd2lsbCBmYWlsLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGZ0cF9zdHJlYW0gVGhlIGxpbmsgaWRlbnRpZmllciBvZiB0aGUgRlRQIGNvbm5lY3Rpb24uCiAqIEBwYXJhbSBib29sICRwYXN2IElmIFRSVUUsIHRoZSBwYXNzaXZlIG1vZGUgaXMgdHVybmVkIG9uLCBlbHNlIGl0J3MgdHVybmVkIG9mZi4KICogQHRocm93cyBGdHBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGZ0cF9wYXN2KCRmdHBfc3RyZWFtLCBib29sICRwYXN2KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZ0cF9wYXN2KCRmdHBfc3RyZWFtLCAkcGFzdik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGdHBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGZ0cF9wdXQgc3RvcmVzIGEgbG9jYWwgZmlsZSBvbiB0aGUgRlRQIHNlcnZlci4KICoKICogQHBhcmFtIHJlc291cmNlICRmdHBfc3RyZWFtIFRoZSBsaW5rIGlkZW50aWZpZXIgb2YgdGhlIEZUUCBjb25uZWN0aW9uLgogKiBAcGFyYW0gc3RyaW5nICRyZW1vdGVfZmlsZSBUaGUgcmVtb3RlIGZpbGUgcGF0aC4KICogQHBhcmFtIHN0cmluZyAkbG9jYWxfZmlsZSBUaGUgbG9jYWwgZmlsZSBwYXRoLgogKiBAcGFyYW0gaW50ICRtb2RlIFRoZSB0cmFuc2ZlciBtb2RlLiBNdXN0IGJlIGVpdGhlciBGVFBfQVNDSUkgb3IKICogRlRQX0JJTkFSWS4KICogQHBhcmFtIGludCAkc3RhcnRwb3MgVGhlIHBvc2l0aW9uIGluIHRoZSByZW1vdGUgZmlsZSB0byBzdGFydCB1cGxvYWRpbmcgdG8uCiAqIEB0aHJvd3MgRnRwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmdHBfcHV0KCRmdHBfc3RyZWFtLCBzdHJpbmcgJHJlbW90ZV9maWxlLCBzdHJpbmcgJGxvY2FsX2ZpbGUsIGludCAkbW9kZSA9IEZUUF9CSU5BUlksIGludCAkc3RhcnRwb3MgPSAwKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZ0cF9wdXQoJGZ0cF9zdHJlYW0sICRyZW1vdGVfZmlsZSwgJGxvY2FsX2ZpbGUsICRtb2RlLCAkc3RhcnRwb3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRnRwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGZ0cF9zdHJlYW0gVGhlIGxpbmsgaWRlbnRpZmllciBvZiB0aGUgRlRQIGNvbm5lY3Rpb24uCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG5hbWUuCiAqIEB0aHJvd3MgRnRwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmdHBfcHdkKCRmdHBfc3RyZWFtKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZnRwX3B3ZCgkZnRwX3N0cmVhbSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGdHBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZnRwX3JlbmFtZSByZW5hbWVzIGEgZmlsZSBvciBhIGRpcmVjdG9yeSBvbiB0aGUgRlRQCiAqIHNlcnZlci4KICoKICogQHBhcmFtIHJlc291cmNlICRmdHBfc3RyZWFtIFRoZSBsaW5rIGlkZW50aWZpZXIgb2YgdGhlIEZUUCBjb25uZWN0aW9uLgogKiBAcGFyYW0gc3RyaW5nICRvbGRuYW1lIFRoZSBvbGQgZmlsZS9kaXJlY3RvcnkgbmFtZS4KICogQHBhcmFtIHN0cmluZyAkbmV3bmFtZSBUaGUgbmV3IG5hbWUuCiAqIEB0aHJvd3MgRnRwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmdHBfcmVuYW1lKCRmdHBfc3RyZWFtLCBzdHJpbmcgJG9sZG5hbWUsIHN0cmluZyAkbmV3bmFtZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxmdHBfcmVuYW1lKCRmdHBfc3RyZWFtLCAkb2xkbmFtZSwgJG5ld25hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRnRwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IG9uIHRoZSBGVFAgc2VydmVyLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGZ0cF9zdHJlYW0gVGhlIGxpbmsgaWRlbnRpZmllciBvZiB0aGUgRlRQIGNvbm5lY3Rpb24uCiAqIEBwYXJhbSBzdHJpbmcgJGRpcmVjdG9yeSBUaGUgZGlyZWN0b3J5IHRvIGRlbGV0ZS4gVGhpcyBtdXN0IGJlIGVpdGhlciBhbiBhYnNvbHV0ZSBvciByZWxhdGl2ZQogKiBwYXRoIHRvIGFuIGVtcHR5IGRpcmVjdG9yeS4KICogQHRocm93cyBGdHBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGZ0cF9ybWRpcigkZnRwX3N0cmVhbSwgc3RyaW5nICRkaXJlY3RvcnkpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZnRwX3JtZGlyKCRmdHBfc3RyZWFtLCAkZGlyZWN0b3J5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZ0cEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogZnRwX3NpdGUgc2VuZHMgdGhlIGdpdmVuIFNJVEUKICogY29tbWFuZCB0byB0aGUgRlRQIHNlcnZlci4KICoKICogU0lURSBjb21tYW5kcyBhcmUgbm90IHN0YW5kYXJkaXplZCwgYW5kIHZhcnkgZnJvbSBzZXJ2ZXIKICogdG8gc2VydmVyLiBUaGV5IGFyZSB1c2VmdWwgZm9yIGhhbmRsaW5nIHN1Y2ggdGhpbmdzIGFzIGZpbGUgcGVybWlzc2lvbnMgYW5kCiAqIGdyb3VwIG1lbWJlcnNoaXAuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZnRwX3N0cmVhbSBUaGUgbGluayBpZGVudGlmaWVyIG9mIHRoZSBGVFAgY29ubmVjdGlvbi4KICogQHBhcmFtIHN0cmluZyAkY29tbWFuZCBUaGUgU0lURSBjb21tYW5kLiBOb3RlIHRoYXQgdGhpcyBwYXJhbWV0ZXIgaXNuJ3QgZXNjYXBlZCBzbyB0aGVyZSBtYXkKICogYmUgc29tZSBpc3N1ZXMgd2l0aCBmaWxlbmFtZXMgY29udGFpbmluZyBzcGFjZXMgYW5kIG90aGVyIGNoYXJhY3RlcnMuCiAqIEB0aHJvd3MgRnRwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmdHBfc2l0ZSgkZnRwX3N0cmVhbSwgc3RyaW5nICRjb21tYW5kKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZ0cF9zaXRlKCRmdHBfc3RyZWFtLCAkY29tbWFuZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGdHBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGZ0cF9zc2xfY29ubmVjdCBvcGVucyBhbiBleHBsaWNpdCBTU0wtRlRQIGNvbm5lY3Rpb24gdG8gdGhlCiAqIHNwZWNpZmllZCBob3N0LiBUaGF0IGltcGxpZXMgdGhhdAogKiBmdHBfc3NsX2Nvbm5lY3Qgd2lsbCBzdWNjZWVkIGV2ZW4gaWYgdGhlIHNlcnZlciBpcyBub3QKICogY29uZmlndXJlZCBmb3IgU1NMLUZUUCwgb3IgaXRzIGNlcnRpZmljYXRlIGlzIGludmFsaWQuIE9ubHkgd2hlbgogKiBmdHBfbG9naW4gaXMgY2FsbGVkLCB0aGUgY2xpZW50IHdpbGwgc2VuZCB0aGUKICogYXBwcm9wcmlhdGUgQVVUSCBGVFAgY29tbWFuZCwgc28gZnRwX2xvZ2luIHdpbGwgZmFpbCBpbgogKiB0aGUgbWVudGlvbmVkIGNhc2VzLgogKgogKiBAcGFyYW0gc3RyaW5nICRob3N0IFRoZSBGVFAgc2VydmVyIGFkZHJlc3MuIFRoaXMgcGFyYW1ldGVyIHNob3VsZG4ndCBoYXZlIGFueSB0cmFpbGluZwogKiBzbGFzaGVzIGFuZCBzaG91bGRuJ3QgYmUgcHJlZml4ZWQgd2l0aCBmdHA6Ly8uCiAqIEBwYXJhbSBpbnQgJHBvcnQgVGhpcyBwYXJhbWV0ZXIgc3BlY2lmaWVzIGFuIGFsdGVybmF0ZSBwb3J0IHRvIGNvbm5lY3QgdG8uIElmIGl0IGlzCiAqIG9taXR0ZWQgb3Igc2V0IHRvIHplcm8sIHRoZW4gdGhlIGRlZmF1bHQgRlRQIHBvcnQsIDIxLCB3aWxsIGJlIHVzZWQuCiAqIEBwYXJhbSBpbnQgJHRpbWVvdXQgVGhpcyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSB0aW1lb3V0IGZvciBhbGwgc3Vic2VxdWVudCBuZXR3b3JrIG9wZXJhdGlvbnMuCiAqIElmIG9taXR0ZWQsIHRoZSBkZWZhdWx0IHZhbHVlIGlzIDkwIHNlY29uZHMuIFRoZSB0aW1lb3V0IGNhbiBiZSBjaGFuZ2VkIGFuZAogKiBxdWVyaWVkIGF0IGFueSB0aW1lIHdpdGggZnRwX3NldF9vcHRpb24gYW5kCiAqIGZ0cF9nZXRfb3B0aW9uLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBTU0wtRlRQIHN0cmVhbSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEZ0cEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZnRwX3NzbF9jb25uZWN0KHN0cmluZyAkaG9zdCwgaW50ICRwb3J0ID0gMjEsIGludCAkdGltZW91dCA9IDkwKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZ0cF9zc2xfY29ubmVjdCgkaG9zdCwgJHBvcnQsICR0aW1lb3V0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZ0cEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIHRoZSBzeXN0ZW0gdHlwZSBpZGVudGlmaWVyIG9mIHRoZSByZW1vdGUgRlRQIHNlcnZlci4KICoKICogQHBhcmFtIHJlc291cmNlICRmdHBfc3RyZWFtIFRoZSBsaW5rIGlkZW50aWZpZXIgb2YgdGhlIEZUUCBjb25uZWN0aW9uLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSByZW1vdGUgc3lzdGVtIHR5cGUuCiAqIEB0aHJvd3MgRnRwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmdHBfc3lzdHlwZSgkZnRwX3N0cmVhbSk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZ0cF9zeXN0eXBlKCRmdHBfc3RyZWFtKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZ0cEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/funchand.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xGdW5jaGFuZEV4Y2VwdGlvbjsKCi8qKgogKiBDcmVhdGVzIGFuIGFub255bW91cyBmdW5jdGlvbiBmcm9tIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCwgYW5kCiAqIHJldHVybnMgYSB1bmlxdWUgbmFtZSBmb3IgaXQuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGFyZ3MgVGhlIGZ1bmN0aW9uIGFyZ3VtZW50cy4KICogQHBhcmFtIHN0cmluZyAkY29kZSBUaGUgZnVuY3Rpb24gY29kZS4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBhIHVuaXF1ZSBmdW5jdGlvbiBuYW1lIGFzIGEgc3RyaW5nLgogKiBAdGhyb3dzIEZ1bmNoYW5kRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjcmVhdGVfZnVuY3Rpb24oc3RyaW5nICRhcmdzLCBzdHJpbmcgJGNvZGUpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxjcmVhdGVfZnVuY3Rpb24oJGFyZ3MsICRjb2RlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZ1bmNoYW5kRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSBjYWxsYWJsZSgpOiB2b2lkICRmdW5jdGlvbiBUaGUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuCiAqIEBwYXJhbSBtaXhlZCAkcGFyYW1zCiAqIEB0aHJvd3MgRnVuY2hhbmRFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHJlZ2lzdGVyX3RpY2tfZnVuY3Rpb24oY2FsbGFibGUgJGZ1bmN0aW9uLCAuLi4kcGFyYW1zKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHBhcmFtcyAhPT0gW10pIHsKICAgICAgICAkcmVzdWx0ID0gXHJlZ2lzdGVyX3RpY2tfZnVuY3Rpb24oJGZ1bmN0aW9uLCAuLi4kcGFyYW1zKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxyZWdpc3Rlcl90aWNrX2Z1bmN0aW9uKCRmdW5jdGlvbik7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGdW5jaGFuZEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/functionsList.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCnJldHVybiBbCiAgICAnYXBhY2hlX2dldGVudicsCiAgICAnYXBhY2hlX2dldF92ZXJzaW9uJywKICAgICdhcGFjaGVfcmVxdWVzdF9oZWFkZXJzJywKICAgICdhcGFjaGVfcmVzZXRfdGltZW91dCcsCiAgICAnYXBhY2hlX3Jlc3BvbnNlX2hlYWRlcnMnLAogICAgJ2FwYWNoZV9zZXRlbnYnLAogICAgJ2FwY3VfY2FjaGVfaW5mbycsCiAgICAnYXBjdV9jYXMnLAogICAgJ2FwY3VfZGVjJywKICAgICdhcGN1X2ZldGNoJywKICAgICdhcGN1X2luYycsCiAgICAnYXBjdV9zbWFfaW5mbycsCiAgICAnYXBjX2ZldGNoJywKICAgICdhcnJheV9jb21iaW5lJywKICAgICdhcnJheV9mbGlwJywKICAgICdhcnJheV9yZXBsYWNlJywKICAgICdhcnJheV9yZXBsYWNlX3JlY3Vyc2l2ZScsCiAgICAnYXJyYXlfd2Fsa19yZWN1cnNpdmUnLAogICAgJ2Fyc29ydCcsCiAgICAnYXNvcnQnLAogICAgJ2Jhc2U2NF9kZWNvZGUnLAogICAgJ2J6Y2xvc2UnLAogICAgJ2J6Zmx1c2gnLAogICAgJ2J6cmVhZCcsCiAgICAnYnp3cml0ZScsCiAgICAnY2hkaXInLAogICAgJ2NoZ3JwJywKICAgICdjaG1vZCcsCiAgICAnY2hvd24nLAogICAgJ2Nocm9vdCcsCiAgICAnY2xhc3NfYWxpYXMnLAogICAgJ2NsYXNzX2ltcGxlbWVudHMnLAogICAgJ2NsYXNzX3BhcmVudHMnLAogICAgJ2NsYXNzX3VzZXMnLAogICAgJ2NsaV9zZXRfcHJvY2Vzc190aXRsZScsCiAgICAnY2xvc2Vsb2cnLAogICAgJ2NvbV9ldmVudF9zaW5rJywKICAgICdjb21fbG9hZF90eXBlbGliJywKICAgICdjb21fcHJpbnRfdHlwZWluZm8nLAogICAgJ2NvbnZlcnRfdXVkZWNvZGUnLAogICAgJ2NvbnZlcnRfdXVlbmNvZGUnLAogICAgJ2NvcHknLAogICAgJ2NyZWF0ZV9mdW5jdGlvbicsCiAgICAnY3VicmlkX2ZyZWVfcmVzdWx0JywKICAgICdjdWJyaWRfZ2V0X2NoYXJzZXQnLAogICAgJ2N1YnJpZF9nZXRfY2xpZW50X2luZm8nLAogICAgJ2N1YnJpZF9nZXRfZGJfcGFyYW1ldGVyJywKICAgICdjdWJyaWRfZ2V0X3NlcnZlcl9pbmZvJywKICAgICdjdWJyaWRfaW5zZXJ0X2lkJywKICAgICdjdWJyaWRfbG9iMl9uZXcnLAogICAgJ2N1YnJpZF9sb2IyX3NpemUnLAogICAgJ2N1YnJpZF9sb2IyX3NpemU2NCcsCiAgICAnY3VicmlkX2xvYjJfdGVsbCcsCiAgICAnY3VicmlkX2xvYjJfdGVsbDY0JywKICAgICdjdWJyaWRfc2V0X2RiX3BhcmFtZXRlcicsCiAgICAnY3VybF9lc2NhcGUnLAogICAgJ2N1cmxfZXhlYycsCiAgICAnY3VybF9nZXRpbmZvJywKICAgICdjdXJsX2luaXQnLAogICAgJ2N1cmxfbXVsdGlfZXJybm8nLAogICAgJ2N1cmxfbXVsdGlfaW5mb19yZWFkJywKICAgICdjdXJsX211bHRpX2luaXQnLAogICAgJ2N1cmxfc2V0b3B0JywKICAgICdjdXJsX3NoYXJlX2Vycm5vJywKICAgICdjdXJsX3NoYXJlX3NldG9wdCcsCiAgICAnY3VybF91bmVzY2FwZScsCiAgICAnZGF0ZScsCiAgICAnZGF0ZV9wYXJzZScsCiAgICAnZGF0ZV9wYXJzZV9mcm9tX2Zvcm1hdCcsCiAgICAnZGF0ZV9zdW5yaXNlJywKICAgICdkYXRlX3N1bnNldCcsCiAgICAnZGF0ZV9zdW5faW5mbycsCiAgICAnZGIyX2F1dG9jb21taXQnLAogICAgJ2RiMl9iaW5kX3BhcmFtJywKICAgICdkYjJfY2xpZW50X2luZm8nLAogICAgJ2RiMl9jbG9zZScsCiAgICAnZGIyX2NvbW1pdCcsCiAgICAnZGIyX2V4ZWN1dGUnLAogICAgJ2RiMl9mcmVlX3Jlc3VsdCcsCiAgICAnZGIyX2ZyZWVfc3RtdCcsCiAgICAnZGIyX2dldF9vcHRpb24nLAogICAgJ2RiMl9wY2xvc2UnLAogICAgJ2RiMl9yb2xsYmFjaycsCiAgICAnZGIyX3NlcnZlcl9pbmZvJywKICAgICdkYjJfc2V0X29wdGlvbicsCiAgICAnZGVmaW5lJywKICAgICdkZWZsYXRlX2FkZCcsCiAgICAnZGVmbGF0ZV9pbml0JywKICAgICdkaXNrX2ZyZWVfc3BhY2UnLAogICAgJ2Rpc2tfdG90YWxfc3BhY2UnLAogICAgJ2RsJywKICAgICdkbnNfZ2V0X3JlY29yZCcsCiAgICAnZWlvX2J1c3knLAogICAgJ2Vpb19jaG1vZCcsCiAgICAnZWlvX2Nob3duJywKICAgICdlaW9fY2xvc2UnLAogICAgJ2Vpb19jdXN0b20nLAogICAgJ2Vpb19kdXAyJywKICAgICdlaW9fZXZlbnRfbG9vcCcsCiAgICAnZWlvX2ZhbGxvY2F0ZScsCiAgICAnZWlvX2ZjaG1vZCcsCiAgICAnZWlvX2ZkYXRhc3luYycsCiAgICAnZWlvX2ZzdGF0JywKICAgICdlaW9fZnN0YXR2ZnMnLAogICAgJ2Vpb19mc3luYycsCiAgICAnZWlvX2Z0cnVuY2F0ZScsCiAgICAnZWlvX2Z1dGltZScsCiAgICAnZWlvX2dycCcsCiAgICAnZWlvX2xzdGF0JywKICAgICdlaW9fbWtkaXInLAogICAgJ2Vpb19ta25vZCcsCiAgICAnZWlvX25vcCcsCiAgICAnZWlvX3JlYWRhaGVhZCcsCiAgICAnZWlvX3JlYWRkaXInLAogICAgJ2Vpb19yZWFkbGluaycsCiAgICAnZWlvX3JlbmFtZScsCiAgICAnZWlvX3JtZGlyJywKICAgICdlaW9fc2VlaycsCiAgICAnZWlvX3NlbmRmaWxlJywKICAgICdlaW9fc3RhdCcsCiAgICAnZWlvX3N0YXR2ZnMnLAogICAgJ2Vpb19zeW1saW5rJywKICAgICdlaW9fc3luYycsCiAgICAnZWlvX3N5bmNmcycsCiAgICAnZWlvX3N5bmNfZmlsZV9yYW5nZScsCiAgICAnZWlvX3RydW5jYXRlJywKICAgICdlaW9fdW5saW5rJywKICAgICdlaW9fdXRpbWUnLAogICAgJ2Vpb193cml0ZScsCiAgICAnZXJyb3JfbG9nJywKICAgICdmYXN0Y2dpX2ZpbmlzaF9yZXF1ZXN0JywKICAgICdmYmlyZF9ibG9iX2NhbmNlbCcsCiAgICAnZmNsb3NlJywKICAgICdmZmx1c2gnLAogICAgJ2ZpbGUnLAogICAgJ2ZpbGVhdGltZScsCiAgICAnZmlsZWN0aW1lJywKICAgICdmaWxlaW5vZGUnLAogICAgJ2ZpbGVtdGltZScsCiAgICAnZmlsZW93bmVyJywKICAgICdmaWxlc2l6ZScsCiAgICAnZmlsZV9nZXRfY29udGVudHMnLAogICAgJ2ZpbGVfcHV0X2NvbnRlbnRzJywKICAgICdmaWx0ZXJfaW5wdXRfYXJyYXknLAogICAgJ2ZpbHRlcl92YXJfYXJyYXknLAogICAgJ2ZpbmZvX2Nsb3NlJywKICAgICdmaW5mb19vcGVuJywKICAgICdmbG9jaycsCiAgICAnZm9wZW4nLAogICAgJ2ZwdXRjc3YnLAogICAgJ2ZyZWFkJywKICAgICdmc29ja29wZW4nLAogICAgJ2Z0cF9hbGxvYycsCiAgICAnZnRwX2FwcGVuZCcsCiAgICAnZnRwX2NkdXAnLAogICAgJ2Z0cF9jaGRpcicsCiAgICAnZnRwX2NobW9kJywKICAgICdmdHBfY2xvc2UnLAogICAgJ2Z0cF9jb25uZWN0JywKICAgICdmdHBfZGVsZXRlJywKICAgICdmdHBfZmdldCcsCiAgICAnZnRwX2ZwdXQnLAogICAgJ2Z0cF9nZXQnLAogICAgJ2Z0cF9sb2dpbicsCiAgICAnZnRwX21rZGlyJywKICAgICdmdHBfbWxzZCcsCiAgICAnZnRwX25saXN0JywKICAgICdmdHBfcGFzdicsCiAgICAnZnRwX3B1dCcsCiAgICAnZnRwX3B3ZCcsCiAgICAnZnRwX3JlbmFtZScsCiAgICAnZnRwX3JtZGlyJywKICAgICdmdHBfc2l0ZScsCiAgICAnZnRwX3NzbF9jb25uZWN0JywKICAgICdmdHBfc3lzdHlwZScsCiAgICAnZnRydW5jYXRlJywKICAgICdmd3JpdGUnLAogICAgJ2dldGFsbGhlYWRlcnMnLAogICAgJ2dldGN3ZCcsCiAgICAnZ2V0aG9zdG5hbWUnLAogICAgJ2dldGltYWdlc2l6ZScsCiAgICAnZ2V0bGFzdG1vZCcsCiAgICAnZ2V0bXlnaWQnLAogICAgJ2dldG15aW5vZGUnLAogICAgJ2dldG15cGlkJywKICAgICdnZXRteXVpZCcsCiAgICAnZ2V0b3B0JywKICAgICdnZXRwcm90b2J5bmFtZScsCiAgICAnZ2V0cHJvdG9ieW51bWJlcicsCiAgICAnZ2V0X2hlYWRlcnMnLAogICAgJ2dsb2InLAogICAgJ2dtZGF0ZScsCiAgICAnZ21wX2Jpbm9taWFsJywKICAgICdnbXBfZXhwb3J0JywKICAgICdnbXBfaW1wb3J0JywKICAgICdnbXBfcmFuZG9tX3NlZWQnLAogICAgJ2dudXBnX2FkZGRlY3J5cHRrZXknLAogICAgJ2dudXBnX2FkZGVuY3J5cHRrZXknLAogICAgJ2dudXBnX2FkZHNpZ25rZXknLAogICAgJ2dudXBnX2NsZWFyZGVjcnlwdGtleXMnLAogICAgJ2dudXBnX2NsZWFyZW5jcnlwdGtleXMnLAogICAgJ2dudXBnX2NsZWFyc2lnbmtleXMnLAogICAgJ2dudXBnX3NldGFybW9yJywKICAgICdnbnVwZ19zZXRzaWdubW9kZScsCiAgICAnZ3pjbG9zZScsCiAgICAnZ3pjb21wcmVzcycsCiAgICAnZ3pkZWNvZGUnLAogICAgJ2d6ZGVmbGF0ZScsCiAgICAnZ3plbmNvZGUnLAogICAgJ2d6Z2V0cycsCiAgICAnZ3pnZXRzcycsCiAgICAnZ3ppbmZsYXRlJywKICAgICdnenBhc3N0aHJ1JywKICAgICdnenJld2luZCcsCiAgICAnZ3p1bmNvbXByZXNzJywKICAgICdoYXNoX2hrZGYnLAogICAgJ2hhc2hfdXBkYXRlX2ZpbGUnLAogICAgJ2hlYWRlcl9yZWdpc3Rlcl9jYWxsYmFjaycsCiAgICAnaGV4MmJpbicsCiAgICAnaGlnaGxpZ2h0X2ZpbGUnLAogICAgJ2hpZ2hsaWdodF9zdHJpbmcnLAogICAgJ2liYXNlX2FkZF91c2VyJywKICAgICdpYmFzZV9iYWNrdXAnLAogICAgJ2liYXNlX2Jsb2JfY2FuY2VsJywKICAgICdpYmFzZV9ibG9iX2NyZWF0ZScsCiAgICAnaWJhc2VfYmxvYl9nZXQnLAogICAgJ2liYXNlX2Nsb3NlJywKICAgICdpYmFzZV9jb21taXQnLAogICAgJ2liYXNlX2NvbW1pdF9yZXQnLAogICAgJ2liYXNlX2Nvbm5lY3QnLAogICAgJ2liYXNlX2RlbGV0ZV91c2VyJywKICAgICdpYmFzZV9kcm9wX2RiJywKICAgICdpYmFzZV9mcmVlX2V2ZW50X2hhbmRsZXInLAogICAgJ2liYXNlX2ZyZWVfcXVlcnknLAogICAgJ2liYXNlX2ZyZWVfcmVzdWx0JywKICAgICdpYmFzZV9tYWludGFpbl9kYicsCiAgICAnaWJhc2VfbW9kaWZ5X3VzZXInLAogICAgJ2liYXNlX25hbWVfcmVzdWx0JywKICAgICdpYmFzZV9wY29ubmVjdCcsCiAgICAnaWJhc2VfcmVzdG9yZScsCiAgICAnaWJhc2Vfcm9sbGJhY2snLAogICAgJ2liYXNlX3JvbGxiYWNrX3JldCcsCiAgICAnaWJhc2Vfc2VydmljZV9hdHRhY2gnLAogICAgJ2liYXNlX3NlcnZpY2VfZGV0YWNoJywKICAgICdpY29udicsCiAgICAnaWNvbnZfZ2V0X2VuY29kaW5nJywKICAgICdpY29udl9zZXRfZW5jb2RpbmcnLAogICAgJ2ltYWdlMndibXAnLAogICAgJ2ltYWdlYWZmaW5lJywKICAgICdpbWFnZWFmZmluZW1hdHJpeGNvbmNhdCcsCiAgICAnaW1hZ2VhZmZpbmVtYXRyaXhnZXQnLAogICAgJ2ltYWdlYWxwaGFibGVuZGluZycsCiAgICAnaW1hZ2VhbnRpYWxpYXMnLAogICAgJ2ltYWdlYXJjJywKICAgICdpbWFnZWJtcCcsCiAgICAnaW1hZ2VjaGFyJywKICAgICdpbWFnZWNoYXJ1cCcsCiAgICAnaW1hZ2Vjb2xvcmF0JywKICAgICdpbWFnZWNvbG9yZGVhbGxvY2F0ZScsCiAgICAnaW1hZ2Vjb2xvcm1hdGNoJywKICAgICdpbWFnZWNvbnZvbHV0aW9uJywKICAgICdpbWFnZWNvcHknLAogICAgJ2ltYWdlY29weW1lcmdlJywKICAgICdpbWFnZWNvcHltZXJnZWdyYXknLAogICAgJ2ltYWdlY29weXJlc2FtcGxlZCcsCiAgICAnaW1hZ2Vjb3B5cmVzaXplZCcsCiAgICAnaW1hZ2VjcmVhdGUnLAogICAgJ2ltYWdlY3JlYXRlZnJvbWJtcCcsCiAgICAnaW1hZ2VjcmVhdGVmcm9tZ2QnLAogICAgJ2ltYWdlY3JlYXRlZnJvbWdkMicsCiAgICAnaW1hZ2VjcmVhdGVmcm9tZ2QycGFydCcsCiAgICAnaW1hZ2VjcmVhdGVmcm9tZ2lmJywKICAgICdpbWFnZWNyZWF0ZWZyb21qcGVnJywKICAgICdpbWFnZWNyZWF0ZWZyb21wbmcnLAogICAgJ2ltYWdlY3JlYXRlZnJvbXdibXAnLAogICAgJ2ltYWdlY3JlYXRlZnJvbXdlYnAnLAogICAgJ2ltYWdlY3JlYXRlZnJvbXhibScsCiAgICAnaW1hZ2VjcmVhdGVmcm9teHBtJywKICAgICdpbWFnZWNyZWF0ZXRydWVjb2xvcicsCiAgICAnaW1hZ2Vjcm9wJywKICAgICdpbWFnZWNyb3BhdXRvJywKICAgICdpbWFnZWRhc2hlZGxpbmUnLAogICAgJ2ltYWdlZGVzdHJveScsCiAgICAnaW1hZ2VlbGxpcHNlJywKICAgICdpbWFnZWZpbGwnLAogICAgJ2ltYWdlZmlsbGVkYXJjJywKICAgICdpbWFnZWZpbGxlZGVsbGlwc2UnLAogICAgJ2ltYWdlZmlsbGVkcG9seWdvbicsCiAgICAnaW1hZ2VmaWxsZWRyZWN0YW5nbGUnLAogICAgJ2ltYWdlZmlsbHRvYm9yZGVyJywKICAgICdpbWFnZWZpbHRlcicsCiAgICAnaW1hZ2VmbGlwJywKICAgICdpbWFnZWdhbW1hY29ycmVjdCcsCiAgICAnaW1hZ2VnZCcsCiAgICAnaW1hZ2VnZDInLAogICAgJ2ltYWdlZ2lmJywKICAgICdpbWFnZWdyYWJzY3JlZW4nLAogICAgJ2ltYWdlZ3JhYndpbmRvdycsCiAgICAnaW1hZ2VqcGVnJywKICAgICdpbWFnZWxheWVyZWZmZWN0JywKICAgICdpbWFnZWxpbmUnLAogICAgJ2ltYWdlbG9hZGZvbnQnLAogICAgJ2ltYWdlb3BlbnBvbHlnb24nLAogICAgJ2ltYWdlcG5nJywKICAgICdpbWFnZXBvbHlnb24nLAogICAgJ2ltYWdlcmVjdGFuZ2xlJywKICAgICdpbWFnZXJvdGF0ZScsCiAgICAnaW1hZ2VzYXZlYWxwaGEnLAogICAgJ2ltYWdlc2NhbGUnLAogICAgJ2ltYWdlc2V0YnJ1c2gnLAogICAgJ2ltYWdlc2V0Y2xpcCcsCiAgICAnaW1hZ2VzZXRpbnRlcnBvbGF0aW9uJywKICAgICdpbWFnZXNldHBpeGVsJywKICAgICdpbWFnZXNldHN0eWxlJywKICAgICdpbWFnZXNldHRoaWNrbmVzcycsCiAgICAnaW1hZ2VzZXR0aWxlJywKICAgICdpbWFnZXN0cmluZycsCiAgICAnaW1hZ2VzdHJpbmd1cCcsCiAgICAnaW1hZ2VzeCcsCiAgICAnaW1hZ2VzeScsCiAgICAnaW1hZ2V0cnVlY29sb3J0b3BhbGV0dGUnLAogICAgJ2ltYWdldHRmYmJveCcsCiAgICAnaW1hZ2V0dGZ0ZXh0JywKICAgICdpbWFnZXdibXAnLAogICAgJ2ltYWdld2VicCcsCiAgICAnaW1hZ2V4Ym0nLAogICAgJ2ltYXBfYXBwZW5kJywKICAgICdpbWFwX2NoZWNrJywKICAgICdpbWFwX2NsZWFyZmxhZ19mdWxsJywKICAgICdpbWFwX2Nsb3NlJywKICAgICdpbWFwX2NyZWF0ZW1haWxib3gnLAogICAgJ2ltYXBfZGVsZXRlbWFpbGJveCcsCiAgICAnaW1hcF9mZXRjaHN0cnVjdHVyZScsCiAgICAnaW1hcF9nYycsCiAgICAnaW1hcF9oZWFkZXJpbmZvJywKICAgICdpbWFwX21haWwnLAogICAgJ2ltYXBfbWFpbGJveG1zZ2luZm8nLAogICAgJ2ltYXBfbWFpbF9jb21wb3NlJywKICAgICdpbWFwX21haWxfY29weScsCiAgICAnaW1hcF9tYWlsX21vdmUnLAogICAgJ2ltYXBfbXV0ZjdfdG9fdXRmOCcsCiAgICAnaW1hcF9udW1fbXNnJywKICAgICdpbWFwX29wZW4nLAogICAgJ2ltYXBfcmVuYW1lbWFpbGJveCcsCiAgICAnaW1hcF9zYXZlYm9keScsCiAgICAnaW1hcF9zZXRhY2wnLAogICAgJ2ltYXBfc2V0ZmxhZ19mdWxsJywKICAgICdpbWFwX3NldF9xdW90YScsCiAgICAnaW1hcF9zb3J0JywKICAgICdpbWFwX3N1YnNjcmliZScsCiAgICAnaW1hcF90aHJlYWQnLAogICAgJ2ltYXBfdGltZW91dCcsCiAgICAnaW1hcF91bmRlbGV0ZScsCiAgICAnaW1hcF91bnN1YnNjcmliZScsCiAgICAnaW1hcF91dGY4X3RvX211dGY3JywKICAgICdpbmV0X250b3AnLAogICAgJ2luZmxhdGVfYWRkJywKICAgICdpbmZsYXRlX2dldF9yZWFkX2xlbicsCiAgICAnaW5mbGF0ZV9nZXRfc3RhdHVzJywKICAgICdpbmZsYXRlX2luaXQnLAogICAgJ2luZ3Jlc19hdXRvY29tbWl0JywKICAgICdpbmdyZXNfY2xvc2UnLAogICAgJ2luZ3Jlc19jb21taXQnLAogICAgJ2luZ3Jlc19jb25uZWN0JywKICAgICdpbmdyZXNfZXhlY3V0ZScsCiAgICAnaW5ncmVzX2ZpZWxkX25hbWUnLAogICAgJ2luZ3Jlc19maWVsZF90eXBlJywKICAgICdpbmdyZXNfZnJlZV9yZXN1bHQnLAogICAgJ2luZ3Jlc19wY29ubmVjdCcsCiAgICAnaW5ncmVzX3Jlc3VsdF9zZWVrJywKICAgICdpbmdyZXNfcm9sbGJhY2snLAogICAgJ2luZ3Jlc19zZXRfZW52aXJvbm1lbnQnLAogICAgJ2luaV9nZXQnLAogICAgJ2luaV9zZXQnLAogICAgJ2lub3RpZnlfaW5pdCcsCiAgICAnaW5vdGlmeV9ybV93YXRjaCcsCiAgICAnaXB0Y2VtYmVkJywKICAgICdpcHRjcGFyc2UnLAogICAgJ2pkdG91bml4JywKICAgICdqcGVnMndibXAnLAogICAgJ2pzb25fZGVjb2RlJywKICAgICdqc29uX2VuY29kZScsCiAgICAnanNvbl9sYXN0X2Vycm9yX21zZycsCiAgICAna3Jzb3J0JywKICAgICdrc29ydCcsCiAgICAnbGNoZ3JwJywKICAgICdsY2hvd24nLAogICAgJ2xkYXBfYWRkJywKICAgICdsZGFwX2FkZF9leHQnLAogICAgJ2xkYXBfYmluZCcsCiAgICAnbGRhcF9iaW5kX2V4dCcsCiAgICAnbGRhcF9jb250cm9sX3BhZ2VkX3Jlc3VsdCcsCiAgICAnbGRhcF9jb250cm9sX3BhZ2VkX3Jlc3VsdF9yZXNwb25zZScsCiAgICAnbGRhcF9jb3VudF9lbnRyaWVzJywKICAgICdsZGFwX2RlbGV0ZScsCiAgICAnbGRhcF9kZWxldGVfZXh0JywKICAgICdsZGFwX2V4b3AnLAogICAgJ2xkYXBfZXhvcF9wYXNzd2QnLAogICAgJ2xkYXBfZXhvcF93aG9hbWknLAogICAgJ2xkYXBfZXhwbG9kZV9kbicsCiAgICAnbGRhcF9maXJzdF9hdHRyaWJ1dGUnLAogICAgJ2xkYXBfZmlyc3RfZW50cnknLAogICAgJ2xkYXBfZnJlZV9yZXN1bHQnLAogICAgJ2xkYXBfZ2V0X2F0dHJpYnV0ZXMnLAogICAgJ2xkYXBfZ2V0X2RuJywKICAgICdsZGFwX2dldF9lbnRyaWVzJywKICAgICdsZGFwX2dldF9vcHRpb24nLAogICAgJ2xkYXBfZ2V0X3ZhbHVlcycsCiAgICAnbGRhcF9nZXRfdmFsdWVzX2xlbicsCiAgICAnbGRhcF9saXN0JywKICAgICdsZGFwX21vZGlmeV9iYXRjaCcsCiAgICAnbGRhcF9tb2RfYWRkJywKICAgICdsZGFwX21vZF9hZGRfZXh0JywKICAgICdsZGFwX21vZF9kZWwnLAogICAgJ2xkYXBfbW9kX2RlbF9leHQnLAogICAgJ2xkYXBfbW9kX3JlcGxhY2UnLAogICAgJ2xkYXBfbW9kX3JlcGxhY2VfZXh0JywKICAgICdsZGFwX25leHRfYXR0cmlidXRlJywKICAgICdsZGFwX3BhcnNlX2V4b3AnLAogICAgJ2xkYXBfcGFyc2VfcmVzdWx0JywKICAgICdsZGFwX3JlYWQnLAogICAgJ2xkYXBfcmVuYW1lJywKICAgICdsZGFwX3JlbmFtZV9leHQnLAogICAgJ2xkYXBfc2FzbF9iaW5kJywKICAgICdsZGFwX3NlYXJjaCcsCiAgICAnbGRhcF9zZXRfb3B0aW9uJywKICAgICdsZGFwX3VuYmluZCcsCiAgICAnbGlieG1sX2dldF9sYXN0X2Vycm9yJywKICAgICdsaWJ4bWxfc2V0X2V4dGVybmFsX2VudGl0eV9sb2FkZXInLAogICAgJ2xpbmsnLAogICAgJ2x6Zl9jb21wcmVzcycsCiAgICAnbHpmX2RlY29tcHJlc3MnLAogICAgJ21haWxwYXJzZV9tc2dfZXh0cmFjdF9wYXJ0X2ZpbGUnLAogICAgJ21haWxwYXJzZV9tc2dfZnJlZScsCiAgICAnbWFpbHBhcnNlX21zZ19wYXJzZScsCiAgICAnbWFpbHBhcnNlX21zZ19wYXJzZV9maWxlJywKICAgICdtYWlscGFyc2Vfc3RyZWFtX2VuY29kZScsCiAgICAnbWJfY2hyJywKICAgICdtYl9kZXRlY3Rfb3JkZXInLAogICAgJ21iX2VuY29kaW5nX2FsaWFzZXMnLAogICAgJ21iX2VyZWdpX3JlcGxhY2UnLAogICAgJ21iX2VyZWdfcmVwbGFjZScsCiAgICAnbWJfZXJlZ19yZXBsYWNlX2NhbGxiYWNrJywKICAgICdtYl9lcmVnX3NlYXJjaF9nZXRyZWdzJywKICAgICdtYl9lcmVnX3NlYXJjaF9pbml0JywKICAgICdtYl9lcmVnX3NlYXJjaF9yZWdzJywKICAgICdtYl9lcmVnX3NlYXJjaF9zZXRwb3MnLAogICAgJ21iX2h0dHBfb3V0cHV0JywKICAgICdtYl9pbnRlcm5hbF9lbmNvZGluZycsCiAgICAnbWJfb3JkJywKICAgICdtYl9wYXJzZV9zdHInLAogICAgJ21iX3JlZ2V4X2VuY29kaW5nJywKICAgICdtYl9zZW5kX21haWwnLAogICAgJ21iX3NwbGl0JywKICAgICdtYl9zdHJfc3BsaXQnLAogICAgJ21kNV9maWxlJywKICAgICdtZXRhcGhvbmUnLAogICAgJ21pbWVfY29udGVudF90eXBlJywKICAgICdta2RpcicsCiAgICAnbWt0aW1lJywKICAgICdtc2dfcXVldWVfZXhpc3RzJywKICAgICdtc2dfcmVjZWl2ZScsCiAgICAnbXNnX3JlbW92ZV9xdWV1ZScsCiAgICAnbXNnX3NlbmQnLAogICAgJ21zZ19zZXRfcXVldWUnLAogICAgJ21zcWxfYWZmZWN0ZWRfcm93cycsCiAgICAnbXNxbF9jbG9zZScsCiAgICAnbXNxbF9jb25uZWN0JywKICAgICdtc3FsX2NyZWF0ZV9kYicsCiAgICAnbXNxbF9kYXRhX3NlZWsnLAogICAgJ21zcWxfZGJfcXVlcnknLAogICAgJ21zcWxfZHJvcF9kYicsCiAgICAnbXNxbF9maWVsZF9sZW4nLAogICAgJ21zcWxfZmllbGRfbmFtZScsCiAgICAnbXNxbF9maWVsZF9zZWVrJywKICAgICdtc3FsX2ZpZWxkX3RhYmxlJywKICAgICdtc3FsX2ZpZWxkX3R5cGUnLAogICAgJ21zcWxfZnJlZV9yZXN1bHQnLAogICAgJ21zcWxfcGNvbm5lY3QnLAogICAgJ21zcWxfcXVlcnknLAogICAgJ21zcWxfc2VsZWN0X2RiJywKICAgICdteXNxbGlfZ2V0X2NhY2hlX3N0YXRzJywKICAgICdteXNxbGlfZ2V0X2NsaWVudF9zdGF0cycsCiAgICAnbXlzcWxuZF9tc19kdW1wX3NlcnZlcnMnLAogICAgJ215c3FsbmRfbXNfZmFicmljX3NlbGVjdF9nbG9iYWwnLAogICAgJ215c3FsbmRfbXNfZmFicmljX3NlbGVjdF9zaGFyZCcsCiAgICAnbXlzcWxuZF9tc19nZXRfbGFzdF91c2VkX2Nvbm5lY3Rpb24nLAogICAgJ215c3FsbmRfcWNfY2xlYXJfY2FjaGUnLAogICAgJ215c3FsbmRfcWNfc2V0X2lzX3NlbGVjdCcsCiAgICAnbXlzcWxuZF9xY19zZXRfc3RvcmFnZV9oYW5kbGVyJywKICAgICdteXNxbF9jbG9zZScsCiAgICAnbXlzcWxfY29ubmVjdCcsCiAgICAnbXlzcWxfY3JlYXRlX2RiJywKICAgICdteXNxbF9kYXRhX3NlZWsnLAogICAgJ215c3FsX2RiX25hbWUnLAogICAgJ215c3FsX2RiX3F1ZXJ5JywKICAgICdteXNxbF9kcm9wX2RiJywKICAgICdteXNxbF9mZXRjaF9sZW5ndGhzJywKICAgICdteXNxbF9maWVsZF9mbGFncycsCiAgICAnbXlzcWxfZmllbGRfbGVuJywKICAgICdteXNxbF9maWVsZF9uYW1lJywKICAgICdteXNxbF9maWVsZF9zZWVrJywKICAgICdteXNxbF9mcmVlX3Jlc3VsdCcsCiAgICAnbXlzcWxfZ2V0X2hvc3RfaW5mbycsCiAgICAnbXlzcWxfZ2V0X3Byb3RvX2luZm8nLAogICAgJ215c3FsX2dldF9zZXJ2ZXJfaW5mbycsCiAgICAnbXlzcWxfaW5mbycsCiAgICAnbXlzcWxfbGlzdF9kYnMnLAogICAgJ215c3FsX2xpc3RfZmllbGRzJywKICAgICdteXNxbF9saXN0X3Byb2Nlc3NlcycsCiAgICAnbXlzcWxfbGlzdF90YWJsZXMnLAogICAgJ215c3FsX251bV9maWVsZHMnLAogICAgJ215c3FsX251bV9yb3dzJywKICAgICdteXNxbF9xdWVyeScsCiAgICAnbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nJywKICAgICdteXNxbF9yZXN1bHQnLAogICAgJ215c3FsX3NlbGVjdF9kYicsCiAgICAnbXlzcWxfc2V0X2NoYXJzZXQnLAogICAgJ215c3FsX3RhYmxlbmFtZScsCiAgICAnbXlzcWxfdGhyZWFkX2lkJywKICAgICdteXNxbF91bmJ1ZmZlcmVkX3F1ZXJ5JywKICAgICduYXRjYXNlc29ydCcsCiAgICAnbmF0c29ydCcsCiAgICAnb2JfZW5kX2NsZWFuJywKICAgICdvYl9lbmRfZmx1c2gnLAogICAgJ29jaV9iaW5kX2FycmF5X2J5X25hbWUnLAogICAgJ29jaV9iaW5kX2J5X25hbWUnLAogICAgJ29jaV9jYW5jZWwnLAogICAgJ29jaV9jbG9zZScsCiAgICAnb2NpX2NvbW1pdCcsCiAgICAnb2NpX2Nvbm5lY3QnLAogICAgJ29jaV9kZWZpbmVfYnlfbmFtZScsCiAgICAnb2NpX2V4ZWN1dGUnLAogICAgJ29jaV9mZXRjaF9hbGwnLAogICAgJ29jaV9maWVsZF9uYW1lJywKICAgICdvY2lfZmllbGRfcHJlY2lzaW9uJywKICAgICdvY2lfZmllbGRfc2NhbGUnLAogICAgJ29jaV9maWVsZF9zaXplJywKICAgICdvY2lfZmllbGRfdHlwZScsCiAgICAnb2NpX2ZpZWxkX3R5cGVfcmF3JywKICAgICdvY2lfZnJlZV9kZXNjcmlwdG9yJywKICAgICdvY2lfZnJlZV9zdGF0ZW1lbnQnLAogICAgJ29jaV9uZXdfY29sbGVjdGlvbicsCiAgICAnb2NpX25ld19jb25uZWN0JywKICAgICdvY2lfbmV3X2N1cnNvcicsCiAgICAnb2NpX25ld19kZXNjcmlwdG9yJywKICAgICdvY2lfbnVtX2ZpZWxkcycsCiAgICAnb2NpX251bV9yb3dzJywKICAgICdvY2lfcGFyc2UnLAogICAgJ29jaV9wY29ubmVjdCcsCiAgICAnb2NpX3Jlc3VsdCcsCiAgICAnb2NpX3JvbGxiYWNrJywKICAgICdvY2lfc2VydmVyX3ZlcnNpb24nLAogICAgJ29jaV9zZXRfYWN0aW9uJywKICAgICdvY2lfc2V0X2NhbGxfdGltZW91dCcsCiAgICAnb2NpX3NldF9jbGllbnRfaWRlbnRpZmllcicsCiAgICAnb2NpX3NldF9jbGllbnRfaW5mbycsCiAgICAnb2NpX3NldF9kYl9vcGVyYXRpb24nLAogICAgJ29jaV9zZXRfZWRpdGlvbicsCiAgICAnb2NpX3NldF9tb2R1bGVfbmFtZScsCiAgICAnb2NpX3NldF9wcmVmZXRjaCcsCiAgICAnb2NpX3N0YXRlbWVudF90eXBlJywKICAgICdvY2lfdW5yZWdpc3Rlcl90YWZfY2FsbGJhY2snLAogICAgJ29kYmNfYXV0b2NvbW1pdCcsCiAgICAnb2RiY19iaW5tb2RlJywKICAgICdvZGJjX2NvbHVtbnByaXZpbGVnZXMnLAogICAgJ29kYmNfY29sdW1ucycsCiAgICAnb2RiY19jb21taXQnLAogICAgJ29kYmNfZGF0YV9zb3VyY2UnLAogICAgJ29kYmNfZXhlYycsCiAgICAnb2RiY19leGVjdXRlJywKICAgICdvZGJjX2ZldGNoX2ludG8nLAogICAgJ29kYmNfZmllbGRfbGVuJywKICAgICdvZGJjX2ZpZWxkX25hbWUnLAogICAgJ29kYmNfZmllbGRfbnVtJywKICAgICdvZGJjX2ZpZWxkX3NjYWxlJywKICAgICdvZGJjX2ZpZWxkX3R5cGUnLAogICAgJ29kYmNfZm9yZWlnbmtleXMnLAogICAgJ29kYmNfZ2V0dHlwZWluZm8nLAogICAgJ29kYmNfbG9uZ3JlYWRsZW4nLAogICAgJ29kYmNfcHJlcGFyZScsCiAgICAnb2RiY19wcmltYXJ5a2V5cycsCiAgICAnb2RiY19yZXN1bHQnLAogICAgJ29kYmNfcmVzdWx0X2FsbCcsCiAgICAnb2RiY19yb2xsYmFjaycsCiAgICAnb2RiY19zZXRvcHRpb24nLAogICAgJ29kYmNfc3BlY2lhbGNvbHVtbnMnLAogICAgJ29kYmNfc3RhdGlzdGljcycsCiAgICAnb2RiY190YWJsZXByaXZpbGVnZXMnLAogICAgJ29kYmNfdGFibGVzJywKICAgICdvcGNhY2hlX2NvbXBpbGVfZmlsZScsCiAgICAnb3BjYWNoZV9nZXRfc3RhdHVzJywKICAgICdvcGVuZGlyJywKICAgICdvcGVubG9nJywKICAgICdvcGVuc3NsX2NpcGhlcl9pdl9sZW5ndGgnLAogICAgJ29wZW5zc2xfY3NyX2V4cG9ydCcsCiAgICAnb3BlbnNzbF9jc3JfZXhwb3J0X3RvX2ZpbGUnLAogICAgJ29wZW5zc2xfY3NyX2dldF9zdWJqZWN0JywKICAgICdvcGVuc3NsX2Nzcl9uZXcnLAogICAgJ29wZW5zc2xfY3NyX3NpZ24nLAogICAgJ29wZW5zc2xfZGVjcnlwdCcsCiAgICAnb3BlbnNzbF9kaF9jb21wdXRlX2tleScsCiAgICAnb3BlbnNzbF9kaWdlc3QnLAogICAgJ29wZW5zc2xfZW5jcnlwdCcsCiAgICAnb3BlbnNzbF9vcGVuJywKICAgICdvcGVuc3NsX3Bia2RmMicsCiAgICAnb3BlbnNzbF9wa2NzN19kZWNyeXB0JywKICAgICdvcGVuc3NsX3BrY3M3X2VuY3J5cHQnLAogICAgJ29wZW5zc2xfcGtjczdfcmVhZCcsCiAgICAnb3BlbnNzbF9wa2NzN19zaWduJywKICAgICdvcGVuc3NsX3BrY3MxMl9leHBvcnQnLAogICAgJ29wZW5zc2xfcGtjczEyX2V4cG9ydF90b19maWxlJywKICAgICdvcGVuc3NsX3BrY3MxMl9yZWFkJywKICAgICdvcGVuc3NsX3BrZXlfZXhwb3J0JywKICAgICdvcGVuc3NsX3BrZXlfZXhwb3J0X3RvX2ZpbGUnLAogICAgJ29wZW5zc2xfcGtleV9nZXRfcHJpdmF0ZScsCiAgICAnb3BlbnNzbF9wa2V5X2dldF9wdWJsaWMnLAogICAgJ29wZW5zc2xfcGtleV9uZXcnLAogICAgJ29wZW5zc2xfcHJpdmF0ZV9kZWNyeXB0JywKICAgICdvcGVuc3NsX3ByaXZhdGVfZW5jcnlwdCcsCiAgICAnb3BlbnNzbF9wdWJsaWNfZGVjcnlwdCcsCiAgICAnb3BlbnNzbF9wdWJsaWNfZW5jcnlwdCcsCiAgICAnb3BlbnNzbF9yYW5kb21fcHNldWRvX2J5dGVzJywKICAgICdvcGVuc3NsX3NlYWwnLAogICAgJ29wZW5zc2xfc2lnbicsCiAgICAnb3BlbnNzbF94NTA5X2V4cG9ydCcsCiAgICAnb3BlbnNzbF94NTA5X2V4cG9ydF90b19maWxlJywKICAgICdvcGVuc3NsX3g1MDlfZmluZ2VycHJpbnQnLAogICAgJ29wZW5zc2xfeDUwOV9yZWFkJywKICAgICdvdXRwdXRfYWRkX3Jld3JpdGVfdmFyJywKICAgICdvdXRwdXRfcmVzZXRfcmV3cml0ZV92YXJzJywKICAgICdwYWNrJywKICAgICdwYXJzZV9pbmlfZmlsZScsCiAgICAncGFyc2VfaW5pX3N0cmluZycsCiAgICAncGFyc2VfdXJsJywKICAgICdwYXNzd29yZF9oYXNoJywKICAgICdwY250bF9leGVjJywKICAgICdwY250bF9nZXRwcmlvcml0eScsCiAgICAncGNudGxfc2V0cHJpb3JpdHknLAogICAgJ3BjbnRsX3NpZ25hbF9kaXNwYXRjaCcsCiAgICAncGNudGxfc2lncHJvY21hc2snLAogICAgJ3BjbnRsX3N0cmVycm9yJywKICAgICdQREZfYWN0aXZhdGVfaXRlbScsCiAgICAnUERGX2FkZF9sb2NhbGxpbmsnLAogICAgJ1BERl9hZGRfbmFtZWRkZXN0JywKICAgICdQREZfYWRkX25vdGUnLAogICAgJ1BERl9hZGRfcGRmbGluaycsCiAgICAnUERGX2FkZF90aHVtYm5haWwnLAogICAgJ1BERl9hZGRfd2VibGluaycsCiAgICAnUERGX2F0dGFjaF9maWxlJywKICAgICdQREZfYmVnaW5fbGF5ZXInLAogICAgJ1BERl9iZWdpbl9wYWdlJywKICAgICdQREZfYmVnaW5fcGFnZV9leHQnLAogICAgJ1BERl9jaXJjbGUnLAogICAgJ1BERl9jbGlwJywKICAgICdQREZfY2xvc2UnLAogICAgJ1BERl9jbG9zZXBhdGgnLAogICAgJ1BERl9jbG9zZXBhdGhfZmlsbF9zdHJva2UnLAogICAgJ1BERl9jbG9zZXBhdGhfc3Ryb2tlJywKICAgICdQREZfY2xvc2VfcGRpJywKICAgICdQREZfY2xvc2VfcGRpX3BhZ2UnLAogICAgJ1BERl9jb25jYXQnLAogICAgJ1BERl9jb250aW51ZV90ZXh0JywKICAgICdQREZfY3VydmV0bycsCiAgICAnUERGX2RlbGV0ZScsCiAgICAnUERGX2VuZF9sYXllcicsCiAgICAnUERGX2VuZF9wYWdlJywKICAgICdQREZfZW5kX3BhZ2VfZXh0JywKICAgICdQREZfZW5kX3BhdHRlcm4nLAogICAgJ1BERl9lbmRfdGVtcGxhdGUnLAogICAgJ1BERl9maWxsJywKICAgICdQREZfZmlsbF9zdHJva2UnLAogICAgJ1BERl9maXRfaW1hZ2UnLAogICAgJ1BERl9maXRfcGRpX3BhZ2UnLAogICAgJ1BERl9maXRfdGV4dGxpbmUnLAogICAgJ1BERl9pbml0Z3JhcGhpY3MnLAogICAgJ1BERl9saW5ldG8nLAogICAgJ1BERl9tYWtlc3BvdGNvbG9yJywKICAgICdQREZfbW92ZXRvJywKICAgICdQREZfb3Blbl9maWxlJywKICAgICdQREZfcGxhY2VfaW1hZ2UnLAogICAgJ1BERl9wbGFjZV9wZGlfcGFnZScsCiAgICAnUERGX3JlY3QnLAogICAgJ1BERl9yZXN0b3JlJywKICAgICdQREZfcm90YXRlJywKICAgICdQREZfc2F2ZScsCiAgICAnUERGX3NjYWxlJywKICAgICdQREZfc2V0Y29sb3InLAogICAgJ1BERl9zZXRkYXNoJywKICAgICdQREZfc2V0ZGFzaHBhdHRlcm4nLAogICAgJ1BERl9zZXRmbGF0JywKICAgICdQREZfc2V0Zm9udCcsCiAgICAnUERGX3NldGdyYXknLAogICAgJ1BERl9zZXRncmF5X2ZpbGwnLAogICAgJ1BERl9zZXRncmF5X3N0cm9rZScsCiAgICAnUERGX3NldGxpbmVqb2luJywKICAgICdQREZfc2V0bGluZXdpZHRoJywKICAgICdQREZfc2V0bWF0cml4JywKICAgICdQREZfc2V0bWl0ZXJsaW1pdCcsCiAgICAnUERGX3NldHJnYmNvbG9yJywKICAgICdQREZfc2V0cmdiY29sb3JfZmlsbCcsCiAgICAnUERGX3NldHJnYmNvbG9yX3N0cm9rZScsCiAgICAnUERGX3NldF9ib3JkZXJfY29sb3InLAogICAgJ1BERl9zZXRfYm9yZGVyX2Rhc2gnLAogICAgJ1BERl9zZXRfYm9yZGVyX3N0eWxlJywKICAgICdQREZfc2V0X2luZm8nLAogICAgJ1BERl9zZXRfbGF5ZXJfZGVwZW5kZW5jeScsCiAgICAnUERGX3NldF9wYXJhbWV0ZXInLAogICAgJ1BERl9zZXRfdGV4dF9wb3MnLAogICAgJ1BERl9zZXRfdmFsdWUnLAogICAgJ1BERl9zaG93JywKICAgICdQREZfc2hvd194eScsCiAgICAnUERGX3NrZXcnLAogICAgJ1BERl9zdHJva2UnLAogICAgJ3BnX2NhbmNlbF9xdWVyeScsCiAgICAncGdfY2xpZW50X2VuY29kaW5nJywKICAgICdwZ19jbG9zZScsCiAgICAncGdfY29ubmVjdCcsCiAgICAncGdfY29ubmVjdGlvbl9yZXNldCcsCiAgICAncGdfY29udmVydCcsCiAgICAncGdfY29weV9mcm9tJywKICAgICdwZ19jb3B5X3RvJywKICAgICdwZ19kYm5hbWUnLAogICAgJ3BnX2RlbGV0ZScsCiAgICAncGdfZW5kX2NvcHknLAogICAgJ3BnX2V4ZWN1dGUnLAogICAgJ3BnX2ZpZWxkX25hbWUnLAogICAgJ3BnX2ZpZWxkX3RhYmxlJywKICAgICdwZ19maWVsZF90eXBlJywKICAgICdwZ19mbHVzaCcsCiAgICAncGdfZnJlZV9yZXN1bHQnLAogICAgJ3BnX2hvc3QnLAogICAgJ3BnX2luc2VydCcsCiAgICAncGdfbGFzdF9lcnJvcicsCiAgICAncGdfbGFzdF9ub3RpY2UnLAogICAgJ3BnX2xhc3Rfb2lkJywKICAgICdwZ19sb19jbG9zZScsCiAgICAncGdfbG9fZXhwb3J0JywKICAgICdwZ19sb19pbXBvcnQnLAogICAgJ3BnX2xvX29wZW4nLAogICAgJ3BnX2xvX3JlYWQnLAogICAgJ3BnX2xvX3JlYWRfYWxsJywKICAgICdwZ19sb19zZWVrJywKICAgICdwZ19sb190cnVuY2F0ZScsCiAgICAncGdfbG9fdW5saW5rJywKICAgICdwZ19sb193cml0ZScsCiAgICAncGdfbWV0YV9kYXRhJywKICAgICdwZ19vcHRpb25zJywKICAgICdwZ19wYXJhbWV0ZXJfc3RhdHVzJywKICAgICdwZ19wY29ubmVjdCcsCiAgICAncGdfcGluZycsCiAgICAncGdfcG9ydCcsCiAgICAncGdfcHJlcGFyZScsCiAgICAncGdfcHV0X2xpbmUnLAogICAgJ3BnX3F1ZXJ5JywKICAgICdwZ19xdWVyeV9wYXJhbXMnLAogICAgJ3BnX3Jlc3VsdF9lcnJvcl9maWVsZCcsCiAgICAncGdfcmVzdWx0X3NlZWsnLAogICAgJ3BnX3NlbGVjdCcsCiAgICAncGdfc2VuZF9leGVjdXRlJywKICAgICdwZ19zZW5kX3ByZXBhcmUnLAogICAgJ3BnX3NlbmRfcXVlcnknLAogICAgJ3BnX3NlbmRfcXVlcnlfcGFyYW1zJywKICAgICdwZ19zb2NrZXQnLAogICAgJ3BnX3RyYWNlJywKICAgICdwZ190dHknLAogICAgJ3BnX3VwZGF0ZScsCiAgICAncGdfdmVyc2lvbicsCiAgICAncGhwY3JlZGl0cycsCiAgICAncGhwaW5mbycsCiAgICAncG5nMndibXAnLAogICAgJ3Bvc2l4X2FjY2VzcycsCiAgICAncG9zaXhfZ2V0Z3JuYW0nLAogICAgJ3Bvc2l4X2dldHBnaWQnLAogICAgJ3Bvc2l4X2luaXRncm91cHMnLAogICAgJ3Bvc2l4X2tpbGwnLAogICAgJ3Bvc2l4X21rZmlmbycsCiAgICAncG9zaXhfbWtub2QnLAogICAgJ3Bvc2l4X3NldGVnaWQnLAogICAgJ3Bvc2l4X3NldGV1aWQnLAogICAgJ3Bvc2l4X3NldGdpZCcsCiAgICAncG9zaXhfc2V0cGdpZCcsCiAgICAncG9zaXhfc2V0cmxpbWl0JywKICAgICdwb3NpeF9zZXR1aWQnLAogICAgJ3ByZWdfbWF0Y2gnLAogICAgJ3ByZWdfbWF0Y2hfYWxsJywKICAgICdwcmVnX3JlcGxhY2UnLAogICAgJ3ByZWdfc3BsaXQnLAogICAgJ3Byb2NfZ2V0X3N0YXR1cycsCiAgICAncHJvY19uaWNlJywKICAgICdwc3BlbGxfYWRkX3RvX3BlcnNvbmFsJywKICAgICdwc3BlbGxfYWRkX3RvX3Nlc3Npb24nLAogICAgJ3BzcGVsbF9jbGVhcl9zZXNzaW9uJywKICAgICdwc3BlbGxfY29uZmlnX2NyZWF0ZScsCiAgICAncHNwZWxsX2NvbmZpZ19kYXRhX2RpcicsCiAgICAncHNwZWxsX2NvbmZpZ19kaWN0X2RpcicsCiAgICAncHNwZWxsX2NvbmZpZ19pZ25vcmUnLAogICAgJ3BzcGVsbF9jb25maWdfbW9kZScsCiAgICAncHNwZWxsX2NvbmZpZ19wZXJzb25hbCcsCiAgICAncHNwZWxsX2NvbmZpZ19yZXBsJywKICAgICdwc3BlbGxfY29uZmlnX3J1bnRvZ2V0aGVyJywKICAgICdwc3BlbGxfY29uZmlnX3NhdmVfcmVwbCcsCiAgICAncHNwZWxsX25ldycsCiAgICAncHNwZWxsX25ld19jb25maWcnLAogICAgJ3BzcGVsbF9zYXZlX3dvcmRsaXN0JywKICAgICdwc3BlbGxfc3RvcmVfcmVwbGFjZW1lbnQnLAogICAgJ3BzX2FkZF9sYXVuY2hsaW5rJywKICAgICdwc19hZGRfbG9jYWxsaW5rJywKICAgICdwc19hZGRfbm90ZScsCiAgICAncHNfYWRkX3BkZmxpbmsnLAogICAgJ3BzX2FkZF93ZWJsaW5rJywKICAgICdwc19hcmMnLAogICAgJ3BzX2FyY24nLAogICAgJ3BzX2JlZ2luX3BhZ2UnLAogICAgJ3BzX2JlZ2luX3BhdHRlcm4nLAogICAgJ3BzX2JlZ2luX3RlbXBsYXRlJywKICAgICdwc19jaXJjbGUnLAogICAgJ3BzX2NsaXAnLAogICAgJ3BzX2Nsb3NlJywKICAgICdwc19jbG9zZXBhdGgnLAogICAgJ3BzX2Nsb3NlcGF0aF9zdHJva2UnLAogICAgJ3BzX2Nsb3NlX2ltYWdlJywKICAgICdwc19jb250aW51ZV90ZXh0JywKICAgICdwc19jdXJ2ZXRvJywKICAgICdwc19kZWxldGUnLAogICAgJ3BzX2VuZF9wYWdlJywKICAgICdwc19lbmRfcGF0dGVybicsCiAgICAncHNfZW5kX3RlbXBsYXRlJywKICAgICdwc19maWxsJywKICAgICdwc19maWxsX3N0cm9rZScsCiAgICAncHNfZ2V0X3BhcmFtZXRlcicsCiAgICAncHNfaHlwaGVuYXRlJywKICAgICdwc19pbmNsdWRlX2ZpbGUnLAogICAgJ3BzX2xpbmV0bycsCiAgICAncHNfbW92ZXRvJywKICAgICdwc19uZXcnLAogICAgJ3BzX29wZW5fZmlsZScsCiAgICAncHNfcGxhY2VfaW1hZ2UnLAogICAgJ3BzX3JlY3QnLAogICAgJ3BzX3Jlc3RvcmUnLAogICAgJ3BzX3JvdGF0ZScsCiAgICAncHNfc2F2ZScsCiAgICAncHNfc2NhbGUnLAogICAgJ3BzX3NldGNvbG9yJywKICAgICdwc19zZXRkYXNoJywKICAgICdwc19zZXRmbGF0JywKICAgICdwc19zZXRmb250JywKICAgICdwc19zZXRncmF5JywKICAgICdwc19zZXRsaW5lY2FwJywKICAgICdwc19zZXRsaW5lam9pbicsCiAgICAncHNfc2V0bGluZXdpZHRoJywKICAgICdwc19zZXRtaXRlcmxpbWl0JywKICAgICdwc19zZXRvdmVycHJpbnRtb2RlJywKICAgICdwc19zZXRwb2x5ZGFzaCcsCiAgICAncHNfc2V0X2JvcmRlcl9jb2xvcicsCiAgICAncHNfc2V0X2JvcmRlcl9kYXNoJywKICAgICdwc19zZXRfYm9yZGVyX3N0eWxlJywKICAgICdwc19zZXRfaW5mbycsCiAgICAncHNfc2V0X3BhcmFtZXRlcicsCiAgICAncHNfc2V0X3RleHRfcG9zJywKICAgICdwc19zZXRfdmFsdWUnLAogICAgJ3BzX3NoYWRpbmcnLAogICAgJ3BzX3NoYWRpbmdfcGF0dGVybicsCiAgICAncHNfc2hmaWxsJywKICAgICdwc19zaG93JywKICAgICdwc19zaG93MicsCiAgICAncHNfc2hvd194eScsCiAgICAncHNfc2hvd194eTInLAogICAgJ3BzX3N0cm9rZScsCiAgICAncHNfc3ltYm9sJywKICAgICdwc190cmFuc2xhdGUnLAogICAgJ3B1dGVudicsCiAgICAncmVhZGZpbGUnLAogICAgJ3JlYWRnemZpbGUnLAogICAgJ3JlYWRsaW5lX2FkZF9oaXN0b3J5JywKICAgICdyZWFkbGluZV9jYWxsYmFja19oYW5kbGVyX2luc3RhbGwnLAogICAgJ3JlYWRsaW5lX2NsZWFyX2hpc3RvcnknLAogICAgJ3JlYWRsaW5lX2NvbXBsZXRpb25fZnVuY3Rpb24nLAogICAgJ3JlYWRsaW5lX3JlYWRfaGlzdG9yeScsCiAgICAncmVhZGxpbmVfd3JpdGVfaGlzdG9yeScsCiAgICAncmVhZGxpbmsnLAogICAgJ3JlYWxwYXRoJywKICAgICdyZWdpc3Rlcl90aWNrX2Z1bmN0aW9uJywKICAgICdyZW5hbWUnLAogICAgJ3Jld2luZCcsCiAgICAncmV3aW5kZGlyJywKICAgICdybWRpcicsCiAgICAncnBtYWRkdGFnJywKICAgICdycmRfY3JlYXRlJywKICAgICdyc29ydCcsCiAgICAnc2FwaV93aW5kb3dzX2NwX2NvbnYnLAogICAgJ3NhcGlfd2luZG93c19jcF9zZXQnLAogICAgJ3NhcGlfd2luZG93c19nZW5lcmF0ZV9jdHJsX2V2ZW50JywKICAgICdzYXBpX3dpbmRvd3NfdnQxMDBfc3VwcG9ydCcsCiAgICAnc2NhbmRpcicsCiAgICAnc2VtX2FjcXVpcmUnLAogICAgJ3NlbV9nZXQnLAogICAgJ3NlbV9yZWxlYXNlJywKICAgICdzZW1fcmVtb3ZlJywKICAgICdzZXNzaW9uX2Fib3J0JywKICAgICdzZXNzaW9uX2RlY29kZScsCiAgICAnc2Vzc2lvbl9kZXN0cm95JywKICAgICdzZXNzaW9uX3JlZ2VuZXJhdGVfaWQnLAogICAgJ3Nlc3Npb25fcmVzZXQnLAogICAgJ3Nlc3Npb25fdW5zZXQnLAogICAgJ3Nlc3Npb25fd3JpdGVfY2xvc2UnLAogICAgJ3NldHR5cGUnLAogICAgJ3NldF9pbmNsdWRlX3BhdGgnLAogICAgJ3NldF90aW1lX2xpbWl0JywKICAgICdzaGExX2ZpbGUnLAogICAgJ3NobW9wX2RlbGV0ZScsCiAgICAnc2htb3BfcmVhZCcsCiAgICAnc2htb3Bfd3JpdGUnLAogICAgJ3NobV9wdXRfdmFyJywKICAgICdzaG1fcmVtb3ZlJywKICAgICdzaG1fcmVtb3ZlX3ZhcicsCiAgICAnc2h1ZmZsZScsCiAgICAnc2ltcGxleG1sX2ltcG9ydF9kb20nLAogICAgJ3NpbXBsZXhtbF9sb2FkX2ZpbGUnLAogICAgJ3NpbXBsZXhtbF9sb2FkX3N0cmluZycsCiAgICAnc2xlZXAnLAogICAgJ3NvY2tldF9hY2NlcHQnLAogICAgJ3NvY2tldF9hZGRyaW5mb19iaW5kJywKICAgICdzb2NrZXRfYWRkcmluZm9fY29ubmVjdCcsCiAgICAnc29ja2V0X2JpbmQnLAogICAgJ3NvY2tldF9jb25uZWN0JywKICAgICdzb2NrZXRfY3JlYXRlJywKICAgICdzb2NrZXRfY3JlYXRlX2xpc3RlbicsCiAgICAnc29ja2V0X2NyZWF0ZV9wYWlyJywKICAgICdzb2NrZXRfZXhwb3J0X3N0cmVhbScsCiAgICAnc29ja2V0X2dldHBlZXJuYW1lJywKICAgICdzb2NrZXRfZ2V0c29ja25hbWUnLAogICAgJ3NvY2tldF9nZXRfb3B0aW9uJywKICAgICdzb2NrZXRfaW1wb3J0X3N0cmVhbScsCiAgICAnc29ja2V0X2xpc3RlbicsCiAgICAnc29ja2V0X3JlYWQnLAogICAgJ3NvY2tldF9zZW5kJywKICAgICdzb2NrZXRfc2VuZG1zZycsCiAgICAnc29ja2V0X3NlbmR0bycsCiAgICAnc29ja2V0X3NldF9ibG9jaycsCiAgICAnc29ja2V0X3NldF9ub25ibG9jaycsCiAgICAnc29ja2V0X3NldF9vcHRpb24nLAogICAgJ3NvY2tldF9zaHV0ZG93bicsCiAgICAnc29ja2V0X3dyaXRlJywKICAgICdzb2NrZXRfd3NhcHJvdG9jb2xfaW5mb19leHBvcnQnLAogICAgJ3NvY2tldF93c2Fwcm90b2NvbF9pbmZvX2ltcG9ydCcsCiAgICAnc29ja2V0X3dzYXByb3RvY29sX2luZm9fcmVsZWFzZScsCiAgICAnc29kaXVtX2NyeXB0b19wd2hhc2gnLAogICAgJ3NvZGl1bV9jcnlwdG9fcHdoYXNoX3N0cicsCiAgICAnc29scl9nZXRfdmVyc2lvbicsCiAgICAnc29ydCcsCiAgICAnc291bmRleCcsCiAgICAnc3BsX2F1dG9sb2FkX3JlZ2lzdGVyJywKICAgICdzcGxfYXV0b2xvYWRfdW5yZWdpc3RlcicsCiAgICAnc3ByaW50ZicsCiAgICAnc3Fsc3J2X2JlZ2luX3RyYW5zYWN0aW9uJywKICAgICdzcWxzcnZfY2FuY2VsJywKICAgICdzcWxzcnZfY2xpZW50X2luZm8nLAogICAgJ3NxbHNydl9jbG9zZScsCiAgICAnc3Fsc3J2X2NvbW1pdCcsCiAgICAnc3Fsc3J2X2NvbmZpZ3VyZScsCiAgICAnc3Fsc3J2X2V4ZWN1dGUnLAogICAgJ3NxbHNydl9mcmVlX3N0bXQnLAogICAgJ3NxbHNydl9nZXRfZmllbGQnLAogICAgJ3NxbHNydl9uZXh0X3Jlc3VsdCcsCiAgICAnc3Fsc3J2X251bV9maWVsZHMnLAogICAgJ3NxbHNydl9udW1fcm93cycsCiAgICAnc3Fsc3J2X3ByZXBhcmUnLAogICAgJ3NxbHNydl9xdWVyeScsCiAgICAnc3Fsc3J2X3JvbGxiYWNrJywKICAgICdzc2RlZXBfZnV6enlfY29tcGFyZScsCiAgICAnc3NkZWVwX2Z1enp5X2hhc2gnLAogICAgJ3NzZGVlcF9mdXp6eV9oYXNoX2ZpbGVuYW1lJywKICAgICdzc2gyX2F1dGhfYWdlbnQnLAogICAgJ3NzaDJfYXV0aF9ob3N0YmFzZWRfZmlsZScsCiAgICAnc3NoMl9hdXRoX3Bhc3N3b3JkJywKICAgICdzc2gyX2F1dGhfcHVia2V5X2ZpbGUnLAogICAgJ3NzaDJfY29ubmVjdCcsCiAgICAnc3NoMl9kaXNjb25uZWN0JywKICAgICdzc2gyX2V4ZWMnLAogICAgJ3NzaDJfcHVibGlja2V5X2FkZCcsCiAgICAnc3NoMl9wdWJsaWNrZXlfaW5pdCcsCiAgICAnc3NoMl9wdWJsaWNrZXlfcmVtb3ZlJywKICAgICdzc2gyX3NjcF9yZWN2JywKICAgICdzc2gyX3NjcF9zZW5kJywKICAgICdzc2gyX3NmdHAnLAogICAgJ3NzaDJfc2Z0cF9jaG1vZCcsCiAgICAnc3NoMl9zZnRwX21rZGlyJywKICAgICdzc2gyX3NmdHBfcmVuYW1lJywKICAgICdzc2gyX3NmdHBfcm1kaXInLAogICAgJ3NzaDJfc2Z0cF9zeW1saW5rJywKICAgICdzc2gyX3NmdHBfdW5saW5rJywKICAgICdzdHJlYW1fY29udGV4dF9zZXRfcGFyYW1zJywKICAgICdzdHJlYW1fY29weV90b19zdHJlYW0nLAogICAgJ3N0cmVhbV9maWx0ZXJfYXBwZW5kJywKICAgICdzdHJlYW1fZmlsdGVyX3ByZXBlbmQnLAogICAgJ3N0cmVhbV9maWx0ZXJfcmVnaXN0ZXInLAogICAgJ3N0cmVhbV9maWx0ZXJfcmVtb3ZlJywKICAgICdzdHJlYW1fZ2V0X2NvbnRlbnRzJywKICAgICdzdHJlYW1faXNhdHR5JywKICAgICdzdHJlYW1fcmVzb2x2ZV9pbmNsdWRlX3BhdGgnLAogICAgJ3N0cmVhbV9zZXRfYmxvY2tpbmcnLAogICAgJ3N0cmVhbV9zZXRfdGltZW91dCcsCiAgICAnc3RyZWFtX3NvY2tldF9hY2NlcHQnLAogICAgJ3N0cmVhbV9zb2NrZXRfY2xpZW50JywKICAgICdzdHJlYW1fc29ja2V0X3BhaXInLAogICAgJ3N0cmVhbV9zb2NrZXRfc2VydmVyJywKICAgICdzdHJlYW1fc29ja2V0X3NodXRkb3duJywKICAgICdzdHJlYW1fc3VwcG9ydHNfbG9jaycsCiAgICAnc3RyZWFtX3dyYXBwZXJfcmVnaXN0ZXInLAogICAgJ3N0cmVhbV93cmFwcGVyX3Jlc3RvcmUnLAogICAgJ3N0cmVhbV93cmFwcGVyX3VucmVnaXN0ZXInLAogICAgJ3N0cnB0aW1lJywKICAgICdzdHJ0b3RpbWUnLAogICAgJ3N1YnN0cicsCiAgICAnc3dvb2xlX2FzeW5jX3dyaXRlJywKICAgICdzd29vbGVfYXN5bmNfd3JpdGVmaWxlJywKICAgICdzd29vbGVfZXZlbnRfZGVmZXInLAogICAgJ3N3b29sZV9ldmVudF9kZWwnLAogICAgJ3N3b29sZV9ldmVudF93cml0ZScsCiAgICAnc3ltbGluaycsCiAgICAnc3lzbG9nJywKICAgICdzeXN0ZW0nLAogICAgJ3RlbXBuYW0nLAogICAgJ3RpbWV6b25lX25hbWVfZnJvbV9hYmJyJywKICAgICd0aW1lX25hbm9zbGVlcCcsCiAgICAndGltZV9zbGVlcF91bnRpbCcsCiAgICAndG1wZmlsZScsCiAgICAndG91Y2gnLAogICAgJ3Vhc29ydCcsCiAgICAndWtzb3J0JywKICAgICd1bmxpbmsnLAogICAgJ3VucGFjaycsCiAgICAndW9wel9leHRlbmQnLAogICAgJ3VvcHpfaW1wbGVtZW50JywKICAgICd1c29ydCcsCiAgICAndmlydHVhbCcsCiAgICAndnNwcmludGYnLAogICAgJ3hkaWZmX2ZpbGVfYmRpZmYnLAogICAgJ3hkaWZmX2ZpbGVfYnBhdGNoJywKICAgICd4ZGlmZl9maWxlX2RpZmYnLAogICAgJ3hkaWZmX2ZpbGVfZGlmZl9iaW5hcnknLAogICAgJ3hkaWZmX2ZpbGVfcGF0Y2hfYmluYXJ5JywKICAgICd4ZGlmZl9maWxlX3JhYmRpZmYnLAogICAgJ3hkaWZmX3N0cmluZ19icGF0Y2gnLAogICAgJ3hkaWZmX3N0cmluZ19wYXRjaCcsCiAgICAneGRpZmZfc3RyaW5nX3BhdGNoX2JpbmFyeScsCiAgICAneG1scnBjX3NldF90eXBlJywKICAgICd4bWxfcGFyc2VyX2NyZWF0ZScsCiAgICAneG1sX3BhcnNlcl9jcmVhdGVfbnMnLAogICAgJ3htbF9zZXRfb2JqZWN0JywKICAgICd5YW1sX3BhcnNlJywKICAgICd5YW1sX3BhcnNlX2ZpbGUnLAogICAgJ3lhbWxfcGFyc2VfdXJsJywKICAgICd5YXpfY2NsX3BhcnNlJywKICAgICd5YXpfY2xvc2UnLAogICAgJ3lhel9jb25uZWN0JywKICAgICd5YXpfZGF0YWJhc2UnLAogICAgJ3lhel9lbGVtZW50JywKICAgICd5YXpfcHJlc2VudCcsCiAgICAneWF6X3NlYXJjaCcsCiAgICAneWF6X3dhaXQnLAogICAgJ3ppcF9lbnRyeV9jbG9zZScsCiAgICAnemlwX2VudHJ5X29wZW4nLAogICAgJ3ppcF9lbnRyeV9yZWFkJywKICAgICd6bGliX2RlY29kZScsCl07Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/gmp.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xHbXBFeGNlcHRpb247CgovKioKICogQ2FsY3VsYXRlcyB0aGUgYmlub21pYWwgY29lZmZpY2llbnQgQyhuLCBrKS4KICoKICogQHBhcmFtIFxHTVB8c3RyaW5nfGludCAkbiBFaXRoZXIgYSBHTVAgbnVtYmVyIHJlc291cmNlIGluIFBIUCA1LjUgYW5kIGVhcmxpZXIsIGEgR01QIG9iamVjdCBpbiBQSFAgNS42IGFuZCBsYXRlciwgb3IgYSBudW1lcmljIHN0cmluZyBwcm92aWRlZCB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGNvbnZlcnQgdGhlIGxhdHRlciB0byBhIG51bWJlci4KICogQHBhcmFtIGludCAkawogKiBAcmV0dXJuIFxHTVAgUmV0dXJucyB0aGUgYmlub21pYWwgY29lZmZpY2llbnQgQyhuLCBrKS4KICogQHRocm93cyBHbXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGdtcF9iaW5vbWlhbCgkbiwgaW50ICRrKTogXEdNUAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGdtcF9iaW5vbWlhbCgkbiwgJGspOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgR21wRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEV4cG9ydCBhIEdNUCBudW1iZXIgdG8gYSBiaW5hcnkgc3RyaW5nCiAqCiAqIEBwYXJhbSBcR01QfHN0cmluZ3xpbnQgJGdtcG51bWJlciBUaGUgR01QIG51bWJlciBiZWluZyBleHBvcnRlZAogKiBAcGFyYW0gaW50ICR3b3JkX3NpemUgRGVmYXVsdCB2YWx1ZSBpcyAxLiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGVhY2ggY2h1bmsgb2YgYmluYXJ5IGRhdGEuIFRoaXMgaXMgbWFpbmx5IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgb3B0aW9ucyBwYXJhbWV0ZXIuCiAqIEBwYXJhbSBpbnQgJG9wdGlvbnMgRGVmYXVsdCB2YWx1ZSBpcyBHTVBfTVNXX0ZJUlNUIHwgR01QX05BVElWRV9FTkRJQU4uCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgYSBzdHJpbmcuCiAqIEB0aHJvd3MgR21wRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnbXBfZXhwb3J0KCRnbXBudW1iZXIsIGludCAkd29yZF9zaXplID0gMSwgaW50ICRvcHRpb25zID0gR01QX01TV19GSVJTVCB8IEdNUF9OQVRJVkVfRU5ESUFOKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZ21wX2V4cG9ydCgkZ21wbnVtYmVyLCAkd29yZF9zaXplLCAkb3B0aW9ucyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBHbXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogSW1wb3J0IGEgR01QIG51bWJlciBmcm9tIGEgYmluYXJ5IHN0cmluZwogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhIFRoZSBiaW5hcnkgc3RyaW5nIGJlaW5nIGltcG9ydGVkCiAqIEBwYXJhbSBpbnQgJHdvcmRfc2l6ZSBEZWZhdWx0IHZhbHVlIGlzIDEuIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gZWFjaCBjaHVuayBvZiBiaW5hcnkgZGF0YS4gVGhpcyBpcyBtYWlubHkgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBvcHRpb25zIHBhcmFtZXRlci4KICogQHBhcmFtIGludCAkb3B0aW9ucyBEZWZhdWx0IHZhbHVlIGlzIEdNUF9NU1dfRklSU1QgfCBHTVBfTkFUSVZFX0VORElBTi4KICogQHJldHVybiBcR01QIFJldHVybnMgYSBHTVAgbnVtYmVyLgogKiBAdGhyb3dzIEdtcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZ21wX2ltcG9ydChzdHJpbmcgJGRhdGEsIGludCAkd29yZF9zaXplID0gMSwgaW50ICRvcHRpb25zID0gR01QX01TV19GSVJTVCB8IEdNUF9OQVRJVkVfRU5ESUFOKTogXEdNUAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGdtcF9pbXBvcnQoJGRhdGEsICR3b3JkX3NpemUsICRvcHRpb25zKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEdtcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKgogKgogKiBAcGFyYW0gXEdNUHxzdHJpbmd8aW50ICRzZWVkIFRoZSBzZWVkIHRvIGJlIHNldCBmb3IgdGhlIGdtcF9yYW5kb20sCiAqIGdtcF9yYW5kb21fYml0cywgYW5kCiAqIGdtcF9yYW5kb21fcmFuZ2UgZnVuY3Rpb25zLgogKgogKiBFaXRoZXIgYSBHTVAgbnVtYmVyIHJlc291cmNlIGluIFBIUCA1LjUgYW5kIGVhcmxpZXIsIGEgR01QIG9iamVjdCBpbiBQSFAgNS42IGFuZCBsYXRlciwgb3IgYSBudW1lcmljIHN0cmluZyBwcm92aWRlZCB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGNvbnZlcnQgdGhlIGxhdHRlciB0byBhIG51bWJlci4KICogQHRocm93cyBHbXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGdtcF9yYW5kb21fc2VlZCgkc2VlZCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxnbXBfcmFuZG9tX3NlZWQoJHNlZWQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgR21wRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/gnupg.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xHbnVwZ0V4Y2VwdGlvbjsKCi8qKgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGlkZW50aWZpZXIgVGhlIGdudXBnIGlkZW50aWZpZXIsIGZyb20gYSBjYWxsIHRvCiAqIGdudXBnX2luaXQgb3IgZ251cGcuCiAqIEBwYXJhbSBzdHJpbmcgJGZpbmdlcnByaW50IFRoZSBmaW5nZXJwcmludCBrZXkuCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3NwaHJhc2UgVGhlIHBhc3MgcGhyYXNlLgogKiBAdGhyb3dzIEdudXBnRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnbnVwZ19hZGRkZWNyeXB0a2V5KCRpZGVudGlmaWVyLCBzdHJpbmcgJGZpbmdlcnByaW50LCBzdHJpbmcgJHBhc3NwaHJhc2UpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZ251cGdfYWRkZGVjcnlwdGtleSgkaWRlbnRpZmllciwgJGZpbmdlcnByaW50LCAkcGFzc3BocmFzZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBHbnVwZ0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICoKICoKICogQHBhcmFtIHJlc291cmNlICRpZGVudGlmaWVyIFRoZSBnbnVwZyBpZGVudGlmaWVyLCBmcm9tIGEgY2FsbCB0bwogKiBnbnVwZ19pbml0IG9yIGdudXBnLgogKiBAcGFyYW0gc3RyaW5nICRmaW5nZXJwcmludCBUaGUgZmluZ2VycHJpbnQga2V5LgogKiBAdGhyb3dzIEdudXBnRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnbnVwZ19hZGRlbmNyeXB0a2V5KCRpZGVudGlmaWVyLCBzdHJpbmcgJGZpbmdlcnByaW50KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGdudXBnX2FkZGVuY3J5cHRrZXkoJGlkZW50aWZpZXIsICRmaW5nZXJwcmludCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBHbnVwZ0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICoKICoKICogQHBhcmFtIHJlc291cmNlICRpZGVudGlmaWVyIFRoZSBnbnVwZyBpZGVudGlmaWVyLCBmcm9tIGEgY2FsbCB0bwogKiBnbnVwZ19pbml0IG9yIGdudXBnLgogKiBAcGFyYW0gc3RyaW5nICRmaW5nZXJwcmludCBUaGUgZmluZ2VycHJpbnQga2V5LgogKiBAcGFyYW0gc3RyaW5nICRwYXNzcGhyYXNlIFRoZSBwYXNzIHBocmFzZS4KICogQHRocm93cyBHbnVwZ0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZ251cGdfYWRkc2lnbmtleSgkaWRlbnRpZmllciwgc3RyaW5nICRmaW5nZXJwcmludCwgc3RyaW5nICRwYXNzcGhyYXNlID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRwYXNzcGhyYXNlICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxnbnVwZ19hZGRzaWdua2V5KCRpZGVudGlmaWVyLCAkZmluZ2VycHJpbnQsICRwYXNzcGhyYXNlKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxnbnVwZ19hZGRzaWdua2V5KCRpZGVudGlmaWVyLCAkZmluZ2VycHJpbnQpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgR251cGdFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaWRlbnRpZmllciBUaGUgZ251cGcgaWRlbnRpZmllciwgZnJvbSBhIGNhbGwgdG8KICogZ251cGdfaW5pdCBvciBnbnVwZy4KICogQHRocm93cyBHbnVwZ0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZ251cGdfY2xlYXJkZWNyeXB0a2V5cygkaWRlbnRpZmllcik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxnbnVwZ19jbGVhcmRlY3J5cHRrZXlzKCRpZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEdudXBnRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGlkZW50aWZpZXIgVGhlIGdudXBnIGlkZW50aWZpZXIsIGZyb20gYSBjYWxsIHRvCiAqIGdudXBnX2luaXQgb3IgZ251cGcuCiAqIEB0aHJvd3MgR251cGdFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGdudXBnX2NsZWFyZW5jcnlwdGtleXMoJGlkZW50aWZpZXIpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZ251cGdfY2xlYXJlbmNyeXB0a2V5cygkaWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBHbnVwZ0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICoKICoKICogQHBhcmFtIHJlc291cmNlICRpZGVudGlmaWVyIFRoZSBnbnVwZyBpZGVudGlmaWVyLCBmcm9tIGEgY2FsbCB0bwogKiBnbnVwZ19pbml0IG9yIGdudXBnLgogKiBAdGhyb3dzIEdudXBnRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnbnVwZ19jbGVhcnNpZ25rZXlzKCRpZGVudGlmaWVyKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGdudXBnX2NsZWFyc2lnbmtleXMoJGlkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgR251cGdFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRvZ2dsZSB0aGUgYXJtb3JlZCBvdXRwdXQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaWRlbnRpZmllciBUaGUgZ251cGcgaWRlbnRpZmllciwgZnJvbSBhIGNhbGwgdG8KICogZ251cGdfaW5pdCBvciBnbnVwZy4KICogQHBhcmFtIGludCAkYXJtb3IgUGFzcyBhIG5vbi16ZXJvIGludGVnZXItdmFsdWUgdG8gdGhpcyBmdW5jdGlvbiB0byBlbmFibGUgYXJtb3JlZC1vdXRwdXQKICogKGRlZmF1bHQpLgogKiBQYXNzIDAgdG8gZGlzYWJsZSBhcm1vcmVkIG91dHB1dC4KICogQHRocm93cyBHbnVwZ0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZ251cGdfc2V0YXJtb3IoJGlkZW50aWZpZXIsIGludCAkYXJtb3IpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZ251cGdfc2V0YXJtb3IoJGlkZW50aWZpZXIsICRhcm1vcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBHbnVwZ0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyB0aGUgbW9kZSBmb3Igc2lnbmluZy4KICoKICogQHBhcmFtIHJlc291cmNlICRpZGVudGlmaWVyIFRoZSBnbnVwZyBpZGVudGlmaWVyLCBmcm9tIGEgY2FsbCB0bwogKiBnbnVwZ19pbml0IG9yIGdudXBnLgogKiBAcGFyYW0gaW50ICRzaWdubW9kZSBUaGUgbW9kZSBmb3Igc2lnbmluZy4KICoKICogc2lnbm1vZGUgdGFrZXMgYSBjb25zdGFudCBpbmRpY2F0aW5nIHdoYXQgdHlwZSBvZgogKiBzaWduYXR1cmUgc2hvdWxkIGJlIHByb2R1Y2VkLiBUaGUgcG9zc2libGUgdmFsdWVzIGFyZQogKiBHTlVQR19TSUdfTU9ERV9OT1JNQUwsCiAqIEdOVVBHX1NJR19NT0RFX0RFVEFDSCBhbmQKICogR05VUEdfU0lHX01PREVfQ0xFQVIuCiAqIEJ5IGRlZmF1bHQgR05VUEdfU0lHX01PREVfQ0xFQVIgaXMgdXNlZC4KICogQHRocm93cyBHbnVwZ0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZ251cGdfc2V0c2lnbm1vZGUoJGlkZW50aWZpZXIsIGludCAkc2lnbm1vZGUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZ251cGdfc2V0c2lnbm1vZGUoJGlkZW50aWZpZXIsICRzaWdubW9kZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBHbnVwZ0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/hash.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xIYXNoRXhjZXB0aW9uOwoKLyoqCiAqCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGFsZ28gTmFtZSBvZiBzZWxlY3RlZCBoYXNoaW5nIGFsZ29yaXRobSAoaS5lLiAic2hhMjU2IiwgInNoYTUxMiIsICJoYXZhbDE2MCw0IiwgZXRjLi4pCiAqIFNlZSBoYXNoX2FsZ29zIGZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGFsZ29yaXRobXMuCiAqCiAqCiAqIE5vbi1jcnlwdG9ncmFwaGljIGhhc2ggZnVuY3Rpb25zIGFyZSBub3QgYWxsb3dlZC4KICoKICoKICoKICogTm9uLWNyeXB0b2dyYXBoaWMgaGFzaCBmdW5jdGlvbnMgYXJlIG5vdCBhbGxvd2VkLgogKiBAcGFyYW0gc3RyaW5nICRpa20gSW5wdXQga2V5aW5nIG1hdGVyaWFsIChyYXcgYmluYXJ5KS4gQ2Fubm90IGJlIGVtcHR5LgogKiBAcGFyYW0gaW50ICRsZW5ndGggRGVzaXJlZCBvdXRwdXQgbGVuZ3RoIGluIGJ5dGVzLgogKiBDYW5ub3QgYmUgZ3JlYXRlciB0aGFuIDI1NSB0aW1lcyB0aGUgY2hvc2VuIGhhc2ggZnVuY3Rpb24gc2l6ZS4KICoKICogSWYgbGVuZ3RoIGlzIDAsIHRoZSBvdXRwdXQgbGVuZ3RoCiAqIHdpbGwgZGVmYXVsdCB0byB0aGUgY2hvc2VuIGhhc2ggZnVuY3Rpb24gc2l6ZS4KICogQHBhcmFtIHN0cmluZyAkaW5mbyBBcHBsaWNhdGlvbi9jb250ZXh0LXNwZWNpZmljIGluZm8gc3RyaW5nLgogKiBAcGFyYW0gc3RyaW5nICRzYWx0IFNhbHQgdG8gdXNlIGR1cmluZyBkZXJpdmF0aW9uLgogKgogKiBXaGlsZSBvcHRpb25hbCwgYWRkaW5nIHJhbmRvbSBzYWx0IHNpZ25pZmljYW50bHkgaW1wcm92ZXMgdGhlIHN0cmVuZ3RoIG9mIEhLREYuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyBhIHJhdyBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRlcml2ZWQga2V5CiAqIChhbHNvIGtub3duIGFzIG91dHB1dCBrZXlpbmcgbWF0ZXJpYWwgLSBPS00pOy4KICogQHRocm93cyBIYXNoRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBoYXNoX2hrZGYoc3RyaW5nICRhbGdvLCBzdHJpbmcgJGlrbSwgaW50ICRsZW5ndGggPSAwLCBzdHJpbmcgJGluZm8gPSAnJywgc3RyaW5nICRzYWx0ID0gJycpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxoYXNoX2hrZGYoJGFsZ28sICRpa20sICRsZW5ndGgsICRpbmZvLCAkc2FsdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBIYXNoRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSBcSGFzaENvbnRleHQgJGhjb250ZXh0IEhhc2hpbmcgY29udGV4dCByZXR1cm5lZCBieSBoYXNoX2luaXQuCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFVSTCBkZXNjcmliaW5nIGxvY2F0aW9uIG9mIGZpbGUgdG8gYmUgaGFzaGVkOyBTdXBwb3J0cyBmb3BlbiB3cmFwcGVycy4KICogQHBhcmFtIFxIYXNoQ29udGV4dHxudWxsICRzY29udGV4dCBTdHJlYW0gY29udGV4dCBhcyByZXR1cm5lZCBieSBzdHJlYW1fY29udGV4dF9jcmVhdGUuCiAqIEB0aHJvd3MgSGFzaEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaGFzaF91cGRhdGVfZmlsZShcSGFzaENvbnRleHQgJGhjb250ZXh0LCBzdHJpbmcgJGZpbGVuYW1lLCA/XEhhc2hDb250ZXh0ICRzY29udGV4dCA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaGFzaF91cGRhdGVfZmlsZSgkaGNvbnRleHQsICRmaWxlbmFtZSwgJHNjb250ZXh0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEhhc2hFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/ibase.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xJYmFzZUV4Y2VwdGlvbjsKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZGlzY2FyZCBhIEJMT0IgaWYgaXQgaGFzIG5vdCB5ZXQgYmVlbiBjbG9zZWQgYnkKICogZmJpcmRfYmxvYl9jbG9zZS4KICoKICogQHBhcmFtIHJlc291cmNlICRibG9iX2hhbmRsZSBBIEJMT0IgaGFuZGxlIG9wZW5lZCB3aXRoIGZiaXJkX2Jsb2JfY3JlYXRlLgogKiBAdGhyb3dzIEliYXNlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmYmlyZF9ibG9iX2NhbmNlbCgkYmxvYl9oYW5kbGUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZmJpcmRfYmxvYl9jYW5jZWwoJGJsb2JfaGFuZGxlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEliYXNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNlcnZpY2VfaGFuZGxlIFRoZSBoYW5kbGUgb24gdGhlIGRhdGFiYXNlIHNlcnZlciBzZXJ2aWNlLgogKiBAcGFyYW0gc3RyaW5nICR1c2VyX25hbWUgVGhlIGxvZ2luIG5hbWUgb2YgdGhlIG5ldyBkYXRhYmFzZSB1c2VyLgogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZCBUaGUgcGFzc3dvcmQgb2YgdGhlIG5ldyB1c2VyLgogKiBAcGFyYW0gc3RyaW5nICRmaXJzdF9uYW1lIFRoZSBmaXJzdCBuYW1lIG9mIHRoZSBuZXcgZGF0YWJhc2UgdXNlci4KICogQHBhcmFtIHN0cmluZyAkbWlkZGxlX25hbWUgVGhlIG1pZGRsZSBuYW1lIG9mIHRoZSBuZXcgZGF0YWJhc2UgdXNlci4KICogQHBhcmFtIHN0cmluZyAkbGFzdF9uYW1lIFRoZSBsYXN0IG5hbWUgb2YgdGhlIG5ldyBkYXRhYmFzZSB1c2VyLgogKiBAdGhyb3dzIEliYXNlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpYmFzZV9hZGRfdXNlcigkc2VydmljZV9oYW5kbGUsIHN0cmluZyAkdXNlcl9uYW1lLCBzdHJpbmcgJHBhc3N3b3JkLCBzdHJpbmcgJGZpcnN0X25hbWUgPSBudWxsLCBzdHJpbmcgJG1pZGRsZV9uYW1lID0gbnVsbCwgc3RyaW5nICRsYXN0X25hbWUgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGxhc3RfbmFtZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcaWJhc2VfYWRkX3VzZXIoJHNlcnZpY2VfaGFuZGxlLCAkdXNlcl9uYW1lLCAkcGFzc3dvcmQsICRmaXJzdF9uYW1lLCAkbWlkZGxlX25hbWUsICRsYXN0X25hbWUpOwogICAgfSBlbHNlaWYgKCRtaWRkbGVfbmFtZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcaWJhc2VfYWRkX3VzZXIoJHNlcnZpY2VfaGFuZGxlLCAkdXNlcl9uYW1lLCAkcGFzc3dvcmQsICRmaXJzdF9uYW1lLCAkbWlkZGxlX25hbWUpOwogICAgfSBlbHNlaWYgKCRmaXJzdF9uYW1lICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpYmFzZV9hZGRfdXNlcigkc2VydmljZV9oYW5kbGUsICR1c2VyX25hbWUsICRwYXNzd29yZCwgJGZpcnN0X25hbWUpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGliYXNlX2FkZF91c2VyKCRzZXJ2aWNlX2hhbmRsZSwgJHVzZXJfbmFtZSwgJHBhc3N3b3JkKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEliYXNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHBhc3NlcyB0aGUgYXJndW1lbnRzIHRvIHRoZSAocmVtb3RlKSBkYXRhYmFzZSBzZXJ2ZXIuIFRoZXJlIGl0IHN0YXJ0cyBhIG5ldyBiYWNrdXAgcHJvY2Vzcy4gVGhlcmVmb3JlIHlvdQogKiB3b24ndCBnZXQgYW55IHJlc3BvbnNlcy4KICoKICogQHBhcmFtIHJlc291cmNlICRzZXJ2aWNlX2hhbmRsZSBBIHByZXZpb3VzbHkgb3BlbmVkIGNvbm5lY3Rpb24gdG8gdGhlIGRhdGFiYXNlIHNlcnZlci4KICogQHBhcmFtIHN0cmluZyAkc291cmNlX2RiIFRoZSBhYnNvbHV0ZSBmaWxlIHBhdGggdG8gdGhlIGRhdGFiYXNlIG9uIHRoZSBkYXRhYmFzZSBzZXJ2ZXIuIFlvdSBjYW4gYWxzbyB1c2UgYSBkYXRhYmFzZSBhbGlhcy4KICogQHBhcmFtIHN0cmluZyAkZGVzdF9maWxlIFRoZSBwYXRoIHRvIHRoZSBiYWNrdXAgZmlsZSBvbiB0aGUgZGF0YWJhc2Ugc2VydmVyLgogKiBAcGFyYW0gaW50ICRvcHRpb25zIEFkZGl0aW9uYWwgb3B0aW9ucyB0byBwYXNzIHRvIHRoZSBkYXRhYmFzZSBzZXJ2ZXIgZm9yIGJhY2t1cC4KICogVGhlIG9wdGlvbnMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uCiAqIG9mIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzOgogKiBJQkFTRV9CS1BfSUdOT1JFX0NIRUNLU1VNUywKICogSUJBU0VfQktQX0lHTk9SRV9MSU1CTywKICogSUJBU0VfQktQX01FVEFEQVRBX09OTFksCiAqIElCQVNFX0JLUF9OT19HQVJCQUdFX0NPTExFQ1QsCiAqIElCQVNFX0JLUF9PTERfREVTQ1JJUFRJT05TLAogKiBJQkFTRV9CS1BfTk9OX1RSQU5TUE9SVEFCTEUgb3IKICogSUJBU0VfQktQX0NPTlZFUlQuCiAqIFJlYWQgdGhlIHNlY3Rpb24gYWJvdXQgIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgogKiBAcGFyYW0gYm9vbCAkdmVyYm9zZSBTaW5jZSB0aGUgYmFja3VwIHByb2Nlc3MgaXMgZG9uZSBvbiB0aGUgZGF0YWJhc2Ugc2VydmVyLCB5b3UgZG9uJ3QgaGF2ZSBhbnkgY2hhbmNlCiAqIHRvIGdldCBpdHMgb3V0cHV0LiBUaGlzIGFyZ3VtZW50IGlzIHVzZWxlc3MuCiAqIEByZXR1cm4gbWl4ZWQgUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIFNpbmNlIHRoZSBiYWNrdXAgcHJvY2VzcyBpcyBkb25lIG9uIHRoZSAocmVtb3RlKSBzZXJ2ZXIsIHRoaXMgZnVuY3Rpb24ganVzdCBwYXNzZXMgdGhlIGFyZ3VtZW50cyB0byBpdC4KICogV2hpbGUgdGhlIGFyZ3VtZW50cyBhcmUgbGVnYWwsIHlvdSB3b24ndCBnZXQgRkFMU0UuCiAqIEB0aHJvd3MgSWJhc2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGliYXNlX2JhY2t1cCgkc2VydmljZV9oYW5kbGUsIHN0cmluZyAkc291cmNlX2RiLCBzdHJpbmcgJGRlc3RfZmlsZSwgaW50ICRvcHRpb25zID0gMCwgYm9vbCAkdmVyYm9zZSA9IGZhbHNlKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGliYXNlX2JhY2t1cCgkc2VydmljZV9oYW5kbGUsICRzb3VyY2VfZGIsICRkZXN0X2ZpbGUsICRvcHRpb25zLCAkdmVyYm9zZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYmFzZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZGlzY2FyZCBhIEJMT0IgaWYgaXQgaGFzIG5vdCB5ZXQgYmVlbiBjbG9zZWQgYnkKICogaWJhc2VfYmxvYl9jbG9zZS4KICoKICogQHBhcmFtIHJlc291cmNlICRibG9iX2hhbmRsZSBBIEJMT0IgaGFuZGxlIG9wZW5lZCB3aXRoIGliYXNlX2Jsb2JfY3JlYXRlLgogKiBAdGhyb3dzIEliYXNlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpYmFzZV9ibG9iX2NhbmNlbCgkYmxvYl9oYW5kbGUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaWJhc2VfYmxvYl9jYW5jZWwoJGJsb2JfaGFuZGxlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEliYXNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBpYmFzZV9ibG9iX2NyZWF0ZSBjcmVhdGVzIGEgbmV3IEJMT0IgZm9yIGZpbGxpbmcgd2l0aAogKiBkYXRhLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBBbiBJbnRlckJhc2UgbGluayBpZGVudGlmaWVyLiBJZiBvbWl0dGVkLCB0aGUgbGFzdCBvcGVuZWQgbGluayBpcwogKiBhc3N1bWVkLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBCTE9CIGhhbmRsZSBmb3IgbGF0ZXIgdXNlIHdpdGgKICogaWJhc2VfYmxvYl9hZGQuCiAqIEB0aHJvd3MgSWJhc2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGliYXNlX2Jsb2JfY3JlYXRlKCRsaW5rX2lkZW50aWZpZXIgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGliYXNlX2Jsb2JfY3JlYXRlKCRsaW5rX2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSWJhc2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGF0IG1vc3QgbGVuIGJ5dGVzIGZyb20gYSBCTE9CCiAqIHRoYXQgaGFzIGJlZW4gb3BlbmVkIGZvciByZWFkaW5nIGJ5IGliYXNlX2Jsb2Jfb3Blbi4KICoKICogQHBhcmFtIHJlc291cmNlICRibG9iX2hhbmRsZSBBIEJMT0IgaGFuZGxlIG9wZW5lZCB3aXRoIGliYXNlX2Jsb2Jfb3Blbi4KICogQHBhcmFtIGludCAkbGVuIFNpemUgb2YgcmV0dXJuZWQgZGF0YS4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBhdCBtb3N0IGxlbiBieXRlcyBmcm9tIHRoZSBCTE9CLgogKiBAdGhyb3dzIEliYXNlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpYmFzZV9ibG9iX2dldCgkYmxvYl9oYW5kbGUsIGludCAkbGVuKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaWJhc2VfYmxvYl9nZXQoJGJsb2JfaGFuZGxlLCAkbGVuKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEliYXNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIENsb3NlcyB0aGUgbGluayB0byBhbiBJbnRlckJhc2UgZGF0YWJhc2UgdGhhdCdzIGFzc29jaWF0ZWQgd2l0aAogKiBhIGNvbm5lY3Rpb24gaWQgcmV0dXJuZWQgZnJvbSBpYmFzZV9jb25uZWN0LgogKiBEZWZhdWx0IHRyYW5zYWN0aW9uIG9uIGxpbmsgaXMgY29tbWl0dGVkLCBvdGhlciB0cmFuc2FjdGlvbnMgYXJlCiAqIHJvbGxlZCBiYWNrLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb25faWQgQW4gSW50ZXJCYXNlIGxpbmsgaWRlbnRpZmllciByZXR1cm5lZCBmcm9tCiAqIGliYXNlX2Nvbm5lY3QuIElmIG9taXR0ZWQsIHRoZSBsYXN0IG9wZW5lZCBsaW5rCiAqIGlzIGFzc3VtZWQuCiAqIEB0aHJvd3MgSWJhc2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGliYXNlX2Nsb3NlKCRjb25uZWN0aW9uX2lkID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpYmFzZV9jbG9zZSgkY29ubmVjdGlvbl9pZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYmFzZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ29tbWl0cyBhIHRyYW5zYWN0aW9uIHdpdGhvdXQgY2xvc2luZyBpdC4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX29yX3RyYW5zX2lkZW50aWZpZXIgSWYgY2FsbGVkIHdpdGhvdXQgYW4gYXJndW1lbnQsIHRoaXMgZnVuY3Rpb24gY29tbWl0cyB0aGUgZGVmYXVsdAogKiB0cmFuc2FjdGlvbiBvZiB0aGUgZGVmYXVsdCBsaW5rLiBJZiB0aGUgYXJndW1lbnQgaXMgYSBjb25uZWN0aW9uCiAqIGlkZW50aWZpZXIsIHRoZSBkZWZhdWx0IHRyYW5zYWN0aW9uIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNvbm5lY3Rpb24KICogd2lsbCBiZSBjb21taXR0ZWQuIElmIHRoZSBhcmd1bWVudCBpcyBhIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIsIHRoZQogKiBjb3JyZXNwb25kaW5nIHRyYW5zYWN0aW9uIHdpbGwgYmUgY29tbWl0dGVkLiBUaGUgdHJhbnNhY3Rpb24gY29udGV4dAogKiB3aWxsIGJlIHJldGFpbmVkLCBzbyBzdGF0ZW1lbnRzIGV4ZWN1dGVkIGZyb20gd2l0aGluIHRoaXMgdHJhbnNhY3Rpb24KICogd2lsbCBub3QgYmUgaW52YWxpZGF0ZWQuCiAqIEB0aHJvd3MgSWJhc2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGliYXNlX2NvbW1pdF9yZXQoJGxpbmtfb3JfdHJhbnNfaWRlbnRpZmllciA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaWJhc2VfY29tbWl0X3JldCgkbGlua19vcl90cmFuc19pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEliYXNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBDb21taXRzIGEgdHJhbnNhY3Rpb24uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19vcl90cmFuc19pZGVudGlmaWVyIElmIGNhbGxlZCB3aXRob3V0IGFuIGFyZ3VtZW50LCB0aGlzIGZ1bmN0aW9uIGNvbW1pdHMgdGhlIGRlZmF1bHQKICogdHJhbnNhY3Rpb24gb2YgdGhlIGRlZmF1bHQgbGluay4gSWYgdGhlIGFyZ3VtZW50IGlzIGEgY29ubmVjdGlvbgogKiBpZGVudGlmaWVyLCB0aGUgZGVmYXVsdCB0cmFuc2FjdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZyBjb25uZWN0aW9uCiAqIHdpbGwgYmUgY29tbWl0dGVkLiBJZiB0aGUgYXJndW1lbnQgaXMgYSB0cmFuc2FjdGlvbiBpZGVudGlmaWVyLCB0aGUKICogY29ycmVzcG9uZGluZyB0cmFuc2FjdGlvbiB3aWxsIGJlIGNvbW1pdHRlZC4KICogQHRocm93cyBJYmFzZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaWJhc2VfY29tbWl0KCRsaW5rX29yX3RyYW5zX2lkZW50aWZpZXIgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGliYXNlX2NvbW1pdCgkbGlua19vcl90cmFuc19pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEliYXNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBFc3RhYmxpc2hlcyBhIGNvbm5lY3Rpb24gdG8gYW4gRmlyZWJpcmQvSW50ZXJCYXNlIHNlcnZlci4KICoKICogSW4gY2FzZSBhIHNlY29uZCBjYWxsIGlzIG1hZGUgdG8gaWJhc2VfY29ubmVjdCB3aXRoCiAqIHRoZSBzYW1lIGFyZ3VtZW50cywgbm8gbmV3IGxpbmsgd2lsbCBiZSBlc3RhYmxpc2hlZCwgYnV0IGluc3RlYWQsIHRoZSBsaW5rCiAqIGlkZW50aWZpZXIgb2YgdGhlIGFscmVhZHkgb3BlbmVkIGxpbmsgd2lsbCBiZSByZXR1cm5lZC4gVGhlIGxpbmsgdG8gdGhlCiAqIHNlcnZlciB3aWxsIGJlIGNsb3NlZCBhcyBzb29uIGFzIHRoZSBleGVjdXRpb24gb2YgdGhlIHNjcmlwdCBlbmRzLCB1bmxlc3MKICogaXQncyBjbG9zZWQgZWFybGllciBieSBleHBsaWNpdGx5IGNhbGxpbmcgaWJhc2VfY2xvc2UuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGFiYXNlIFRoZSBkYXRhYmFzZSBhcmd1bWVudCBoYXMgdG8gYmUgYSB2YWxpZCBwYXRoIHRvCiAqIGRhdGFiYXNlIGZpbGUgb24gdGhlIHNlcnZlciBpdCByZXNpZGVzIG9uLiBJZiB0aGUgc2VydmVyIGlzIG5vdCBsb2NhbCwKICogaXQgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIGVpdGhlciAnaG9zdG5hbWU6JyAoVENQL0lQKSwgJ2hvc3RuYW1lL3BvcnQ6JwogKiAoVENQL0lQIHdpdGggaW50ZXJiYXNlIHNlcnZlciBvbiBjdXN0b20gVENQIHBvcnQpLCAnLy9ob3N0bmFtZS8nCiAqIChOZXRCRVVJKSwgZGVwZW5kaW5nIG9uIHRoZSBjb25uZWN0aW9uCiAqIHByb3RvY29sIHVzZWQuCiAqIEBwYXJhbSBzdHJpbmcgJHVzZXJuYW1lIFRoZSB1c2VyIG5hbWUuIENhbiBiZSBzZXQgd2l0aCB0aGUKICogaWJhc2UuZGVmYXVsdF91c2VyIHBocC5pbmkgZGlyZWN0aXZlLgogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZCBUaGUgcGFzc3dvcmQgZm9yIHVzZXJuYW1lLiBDYW4gYmUgc2V0IHdpdGggdGhlCiAqIGliYXNlLmRlZmF1bHRfcGFzc3dvcmQgcGhwLmluaSBkaXJlY3RpdmUuCiAqIEBwYXJhbSBzdHJpbmcgJGNoYXJzZXQgY2hhcnNldCBpcyB0aGUgZGVmYXVsdCBjaGFyYWN0ZXIgc2V0IGZvciBhCiAqIGRhdGFiYXNlLgogKiBAcGFyYW0gaW50ICRidWZmZXJzIGJ1ZmZlcnMgaXMgdGhlIG51bWJlciBvZiBkYXRhYmFzZSBidWZmZXJzIHRvCiAqIGFsbG9jYXRlIGZvciB0aGUgc2VydmVyLXNpZGUgY2FjaGUuIElmIDAgb3Igb21pdHRlZCwgc2VydmVyIGNob29zZXMKICogaXRzIG93biBkZWZhdWx0LgogKiBAcGFyYW0gaW50ICRkaWFsZWN0IGRpYWxlY3Qgc2VsZWN0cyB0aGUgZGVmYXVsdCBTUUwgZGlhbGVjdCBmb3IgYW55CiAqIHN0YXRlbWVudCBleGVjdXRlZCB3aXRoaW4gYSBjb25uZWN0aW9uLCBhbmQgaXQgZGVmYXVsdHMgdG8gdGhlIGhpZ2hlc3QKICogb25lIHN1cHBvcnRlZCBieSBjbGllbnQgbGlicmFyaWVzLgogKiBAcGFyYW0gc3RyaW5nICRyb2xlIEZ1bmN0aW9uYWwgb25seSB3aXRoIEludGVyQmFzZSA1IGFuZCB1cC4KICogQHBhcmFtIGludCAkc3luYwogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYW4gRmlyZWJpcmQvSW50ZXJCYXNlIGxpbmsgaWRlbnRpZmllciBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEliYXNlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpYmFzZV9jb25uZWN0KHN0cmluZyAkZGF0YWJhc2UgPSBudWxsLCBzdHJpbmcgJHVzZXJuYW1lID0gbnVsbCwgc3RyaW5nICRwYXNzd29yZCA9IG51bGwsIHN0cmluZyAkY2hhcnNldCA9IG51bGwsIGludCAkYnVmZmVycyA9IG51bGwsIGludCAkZGlhbGVjdCA9IG51bGwsIHN0cmluZyAkcm9sZSA9IG51bGwsIGludCAkc3luYyA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkc3luYyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcaWJhc2VfY29ubmVjdCgkZGF0YWJhc2UsICR1c2VybmFtZSwgJHBhc3N3b3JkLCAkY2hhcnNldCwgJGJ1ZmZlcnMsICRkaWFsZWN0LCAkcm9sZSwgJHN5bmMpOwogICAgfSBlbHNlaWYgKCRyb2xlICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpYmFzZV9jb25uZWN0KCRkYXRhYmFzZSwgJHVzZXJuYW1lLCAkcGFzc3dvcmQsICRjaGFyc2V0LCAkYnVmZmVycywgJGRpYWxlY3QsICRyb2xlKTsKICAgIH0gZWxzZWlmICgkZGlhbGVjdCAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcaWJhc2VfY29ubmVjdCgkZGF0YWJhc2UsICR1c2VybmFtZSwgJHBhc3N3b3JkLCAkY2hhcnNldCwgJGJ1ZmZlcnMsICRkaWFsZWN0KTsKICAgIH0gZWxzZWlmICgkYnVmZmVycyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcaWJhc2VfY29ubmVjdCgkZGF0YWJhc2UsICR1c2VybmFtZSwgJHBhc3N3b3JkLCAkY2hhcnNldCwgJGJ1ZmZlcnMpOwogICAgfSBlbHNlaWYgKCRjaGFyc2V0ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpYmFzZV9jb25uZWN0KCRkYXRhYmFzZSwgJHVzZXJuYW1lLCAkcGFzc3dvcmQsICRjaGFyc2V0KTsKICAgIH0gZWxzZWlmICgkcGFzc3dvcmQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGliYXNlX2Nvbm5lY3QoJGRhdGFiYXNlLCAkdXNlcm5hbWUsICRwYXNzd29yZCk7CiAgICB9IGVsc2VpZiAoJHVzZXJuYW1lICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpYmFzZV9jb25uZWN0KCRkYXRhYmFzZSwgJHVzZXJuYW1lKTsKICAgIH0gZWxzZWlmICgkZGF0YWJhc2UgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGliYXNlX2Nvbm5lY3QoJGRhdGFiYXNlKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxpYmFzZV9jb25uZWN0KCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYmFzZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNlcnZpY2VfaGFuZGxlIFRoZSBoYW5kbGUgb24gdGhlIGRhdGFiYXNlIHNlcnZlciBzZXJ2aWNlLgogKiBAcGFyYW0gc3RyaW5nICR1c2VyX25hbWUgVGhlIGxvZ2luIG5hbWUgb2YgdGhlIHVzZXIgeW91IHdhbnQgdG8gZGVsZXRlIGZyb20gdGhlIGRhdGFiYXNlLgogKiBAdGhyb3dzIEliYXNlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpYmFzZV9kZWxldGVfdXNlcigkc2VydmljZV9oYW5kbGUsIHN0cmluZyAkdXNlcl9uYW1lKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGliYXNlX2RlbGV0ZV91c2VyKCRzZXJ2aWNlX2hhbmRsZSwgJHVzZXJfbmFtZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYmFzZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbnMgZHJvcHMgYSBkYXRhYmFzZSB0aGF0IHdhcyBvcGVuZWQgYnkgZWl0aGVyIGliYXNlX2Nvbm5lY3QKICogb3IgaWJhc2VfcGNvbm5lY3QuIFRoZSBkYXRhYmFzZSBpcyBjbG9zZWQgYW5kIGRlbGV0ZWQgZnJvbSB0aGUgc2VydmVyLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gQW4gSW50ZXJCYXNlIGxpbmsgaWRlbnRpZmllci4gSWYgb21pdHRlZCwgdGhlIGxhc3Qgb3BlbmVkIGxpbmsgaXMKICogYXNzdW1lZC4KICogQHRocm93cyBJYmFzZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaWJhc2VfZHJvcF9kYigkY29ubmVjdGlvbiA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaWJhc2VfZHJvcF9kYigkY29ubmVjdGlvbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYmFzZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBjYXVzZXMgdGhlIHJlZ2lzdGVyZWQgZXZlbnQgaGFuZGxlciBzcGVjaWZpZWQgYnkKICogZXZlbnQgdG8gYmUgY2FuY2VsbGVkLiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbAogKiBubyBsb25nZXIgYmUgY2FsbGVkIGZvciB0aGUgZXZlbnRzIGl0IHdhcyByZWdpc3RlcmVkIHRvIGhhbmRsZS4KICoKICogQHBhcmFtIHJlc291cmNlICRldmVudCBBbiBldmVudCByZXNvdXJjZSwgY3JlYXRlZCBieQogKiBpYmFzZV9zZXRfZXZlbnRfaGFuZGxlci4KICogQHRocm93cyBJYmFzZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaWJhc2VfZnJlZV9ldmVudF9oYW5kbGVyKCRldmVudCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpYmFzZV9mcmVlX2V2ZW50X2hhbmRsZXIoJGV2ZW50KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEliYXNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBGcmVlcyBhIHByZXBhcmVkIHF1ZXJ5LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHF1ZXJ5IEEgcXVlcnkgcHJlcGFyZWQgd2l0aCBpYmFzZV9wcmVwYXJlLgogKiBAdGhyb3dzIEliYXNlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpYmFzZV9mcmVlX3F1ZXJ5KCRxdWVyeSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpYmFzZV9mcmVlX3F1ZXJ5KCRxdWVyeSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYmFzZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRnJlZXMgYSByZXN1bHQgc2V0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdF9pZGVudGlmaWVyIEEgcmVzdWx0IHNldCBjcmVhdGVkIGJ5IGliYXNlX3F1ZXJ5IG9yCiAqIGliYXNlX2V4ZWN1dGUuCiAqIEB0aHJvd3MgSWJhc2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGliYXNlX2ZyZWVfcmVzdWx0KCRyZXN1bHRfaWRlbnRpZmllcik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpYmFzZV9mcmVlX3Jlc3VsdCgkcmVzdWx0X2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSWJhc2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc2VydmljZV9oYW5kbGUKICogQHBhcmFtIHN0cmluZyAkZGIKICogQHBhcmFtIGludCAkYWN0aW9uCiAqIEBwYXJhbSBpbnQgJGFyZ3VtZW50CiAqIEB0aHJvd3MgSWJhc2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGliYXNlX21haW50YWluX2RiKCRzZXJ2aWNlX2hhbmRsZSwgc3RyaW5nICRkYiwgaW50ICRhY3Rpb24sIGludCAkYXJndW1lbnQgPSAwKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGliYXNlX21haW50YWluX2RiKCRzZXJ2aWNlX2hhbmRsZSwgJGRiLCAkYWN0aW9uLCAkYXJndW1lbnQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSWJhc2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc2VydmljZV9oYW5kbGUgVGhlIGhhbmRsZSBvbiB0aGUgZGF0YWJhc2Ugc2VydmVyIHNlcnZpY2UuCiAqIEBwYXJhbSBzdHJpbmcgJHVzZXJfbmFtZSBUaGUgbG9naW4gbmFtZSBvZiB0aGUgZGF0YWJhc2UgdXNlciB0byBtb2RpZnkuCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkIFRoZSB1c2VyJ3MgbmV3IHBhc3N3b3JkLgogKiBAcGFyYW0gc3RyaW5nICRmaXJzdF9uYW1lIFRoZSB1c2VyJ3MgbmV3IGZpcnN0IG5hbWUuCiAqIEBwYXJhbSBzdHJpbmcgJG1pZGRsZV9uYW1lIFRoZSB1c2VyJ3MgbmV3IG1pZGRsZSBuYW1lLgogKiBAcGFyYW0gc3RyaW5nICRsYXN0X25hbWUgVGhlIHVzZXIncyBuZXcgbGFzdCBuYW1lLgogKiBAdGhyb3dzIEliYXNlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpYmFzZV9tb2RpZnlfdXNlcigkc2VydmljZV9oYW5kbGUsIHN0cmluZyAkdXNlcl9uYW1lLCBzdHJpbmcgJHBhc3N3b3JkLCBzdHJpbmcgJGZpcnN0X25hbWUgPSBudWxsLCBzdHJpbmcgJG1pZGRsZV9uYW1lID0gbnVsbCwgc3RyaW5nICRsYXN0X25hbWUgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGxhc3RfbmFtZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcaWJhc2VfbW9kaWZ5X3VzZXIoJHNlcnZpY2VfaGFuZGxlLCAkdXNlcl9uYW1lLCAkcGFzc3dvcmQsICRmaXJzdF9uYW1lLCAkbWlkZGxlX25hbWUsICRsYXN0X25hbWUpOwogICAgfSBlbHNlaWYgKCRtaWRkbGVfbmFtZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcaWJhc2VfbW9kaWZ5X3VzZXIoJHNlcnZpY2VfaGFuZGxlLCAkdXNlcl9uYW1lLCAkcGFzc3dvcmQsICRmaXJzdF9uYW1lLCAkbWlkZGxlX25hbWUpOwogICAgfSBlbHNlaWYgKCRmaXJzdF9uYW1lICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpYmFzZV9tb2RpZnlfdXNlcigkc2VydmljZV9oYW5kbGUsICR1c2VyX25hbWUsICRwYXNzd29yZCwgJGZpcnN0X25hbWUpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGliYXNlX21vZGlmeV91c2VyKCRzZXJ2aWNlX2hhbmRsZSwgJHVzZXJfbmFtZSwgJHBhc3N3b3JkKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEliYXNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGFzc2lnbnMgYSBuYW1lIHRvIGEgcmVzdWx0IHNldC4gVGhpcyBuYW1lIGNhbiBiZSB1c2VkIGxhdGVyIGluCiAqIFVQREFURXxERUxFVEUgLi4uIFdIRVJFIENVUlJFTlQgT0YgbmFtZSBzdGF0ZW1lbnRzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBBbiBJbnRlckJhc2UgcmVzdWx0IHNldC4KICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSB0byBiZSBhc3NpZ25lZC4KICogQHRocm93cyBJYmFzZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaWJhc2VfbmFtZV9yZXN1bHQoJHJlc3VsdCwgc3RyaW5nICRuYW1lKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGliYXNlX25hbWVfcmVzdWx0KCRyZXN1bHQsICRuYW1lKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEliYXNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBPcGVucyBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbiB0byBhbiBJbnRlckJhc2UgZGF0YWJhc2UuCiAqCiAqIGliYXNlX3Bjb25uZWN0IGFjdHMgdmVyeSBtdWNoIGxpa2UKICogaWJhc2VfY29ubmVjdCB3aXRoIHR3byBtYWpvciBkaWZmZXJlbmNlcy4KICoKICogRmlyc3QsIHdoZW4gY29ubmVjdGluZywgdGhlIGZ1bmN0aW9uIHdpbGwgZmlyc3QgdHJ5IHRvIGZpbmQgYSAocGVyc2lzdGVudCkKICogbGluayB0aGF0J3MgYWxyZWFkeSBvcGVuZWQgd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzLiBJZiBvbmUgaXMgZm91bmQsIGFuCiAqIGlkZW50aWZpZXIgZm9yIGl0IHdpbGwgYmUgcmV0dXJuZWQgaW5zdGVhZCBvZiBvcGVuaW5nIGEgbmV3IGNvbm5lY3Rpb24uCiAqCiAqIFNlY29uZCwgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIEludGVyQmFzZSBzZXJ2ZXIgd2lsbCBub3QgYmUgY2xvc2VkIHdoZW4gdGhlCiAqIGV4ZWN1dGlvbiBvZiB0aGUgc2NyaXB0IGVuZHMuIEluc3RlYWQsIHRoZSBsaW5rIHdpbGwgcmVtYWluIG9wZW4gZm9yCiAqIGZ1dHVyZSB1c2UgKGliYXNlX2Nsb3NlIHdpbGwgbm90IGNsb3NlIGxpbmtzCiAqIGVzdGFibGlzaGVkIGJ5IGliYXNlX3Bjb25uZWN0KS4gVGhpcyB0eXBlIG9mIGxpbmsgaXMKICogdGhlcmVmb3JlIGNhbGxlZCAncGVyc2lzdGVudCcuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGFiYXNlIFRoZSBkYXRhYmFzZSBhcmd1bWVudCBoYXMgdG8gYmUgYSB2YWxpZCBwYXRoIHRvCiAqIGRhdGFiYXNlIGZpbGUgb24gdGhlIHNlcnZlciBpdCByZXNpZGVzIG9uLiBJZiB0aGUgc2VydmVyIGlzIG5vdCBsb2NhbCwKICogaXQgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIGVpdGhlciAnaG9zdG5hbWU6JyAoVENQL0lQKSwgJy8vaG9zdG5hbWUvJwogKiAoTmV0QkVVSSkgb3IgJ2hvc3RuYW1lQCcgKElQWC9TUFgpLCBkZXBlbmRpbmcgb24gdGhlIGNvbm5lY3Rpb24KICogcHJvdG9jb2wgdXNlZC4KICogQHBhcmFtIHN0cmluZyAkdXNlcm5hbWUgVGhlIHVzZXIgbmFtZS4gQ2FuIGJlIHNldCB3aXRoIHRoZQogKiBpYmFzZS5kZWZhdWx0X3VzZXIgcGhwLmluaSBkaXJlY3RpdmUuCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkIFRoZSBwYXNzd29yZCBmb3IgdXNlcm5hbWUuIENhbiBiZSBzZXQgd2l0aCB0aGUKICogaWJhc2UuZGVmYXVsdF9wYXNzd29yZCBwaHAuaW5pIGRpcmVjdGl2ZS4KICogQHBhcmFtIHN0cmluZyAkY2hhcnNldCBjaGFyc2V0IGlzIHRoZSBkZWZhdWx0IGNoYXJhY3RlciBzZXQgZm9yIGEKICogZGF0YWJhc2UuCiAqIEBwYXJhbSBpbnQgJGJ1ZmZlcnMgYnVmZmVycyBpcyB0aGUgbnVtYmVyIG9mIGRhdGFiYXNlIGJ1ZmZlcnMgdG8KICogYWxsb2NhdGUgZm9yIHRoZSBzZXJ2ZXItc2lkZSBjYWNoZS4gSWYgMCBvciBvbWl0dGVkLCBzZXJ2ZXIgY2hvb3NlcwogKiBpdHMgb3duIGRlZmF1bHQuCiAqIEBwYXJhbSBpbnQgJGRpYWxlY3QgZGlhbGVjdCBzZWxlY3RzIHRoZSBkZWZhdWx0IFNRTCBkaWFsZWN0IGZvciBhbnkKICogc3RhdGVtZW50IGV4ZWN1dGVkIHdpdGhpbiBhIGNvbm5lY3Rpb24sIGFuZCBpdCBkZWZhdWx0cyB0byB0aGUgaGlnaGVzdAogKiBvbmUgc3VwcG9ydGVkIGJ5IGNsaWVudCBsaWJyYXJpZXMuIEZ1bmN0aW9uYWwgb25seSB3aXRoIEludGVyQmFzZSA2CiAqIGFuZCB1cC4KICogQHBhcmFtIHN0cmluZyAkcm9sZSBGdW5jdGlvbmFsIG9ubHkgd2l0aCBJbnRlckJhc2UgNSBhbmQgdXAuCiAqIEBwYXJhbSBpbnQgJHN5bmMKICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGFuIEludGVyQmFzZSBsaW5rIGlkZW50aWZpZXIgb24gc3VjY2Vzcy4KICogQHRocm93cyBJYmFzZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaWJhc2VfcGNvbm5lY3Qoc3RyaW5nICRkYXRhYmFzZSA9IG51bGwsIHN0cmluZyAkdXNlcm5hbWUgPSBudWxsLCBzdHJpbmcgJHBhc3N3b3JkID0gbnVsbCwgc3RyaW5nICRjaGFyc2V0ID0gbnVsbCwgaW50ICRidWZmZXJzID0gbnVsbCwgaW50ICRkaWFsZWN0ID0gbnVsbCwgc3RyaW5nICRyb2xlID0gbnVsbCwgaW50ICRzeW5jID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRzeW5jICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpYmFzZV9wY29ubmVjdCgkZGF0YWJhc2UsICR1c2VybmFtZSwgJHBhc3N3b3JkLCAkY2hhcnNldCwgJGJ1ZmZlcnMsICRkaWFsZWN0LCAkcm9sZSwgJHN5bmMpOwogICAgfSBlbHNlaWYgKCRyb2xlICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpYmFzZV9wY29ubmVjdCgkZGF0YWJhc2UsICR1c2VybmFtZSwgJHBhc3N3b3JkLCAkY2hhcnNldCwgJGJ1ZmZlcnMsICRkaWFsZWN0LCAkcm9sZSk7CiAgICB9IGVsc2VpZiAoJGRpYWxlY3QgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGliYXNlX3Bjb25uZWN0KCRkYXRhYmFzZSwgJHVzZXJuYW1lLCAkcGFzc3dvcmQsICRjaGFyc2V0LCAkYnVmZmVycywgJGRpYWxlY3QpOwogICAgfSBlbHNlaWYgKCRidWZmZXJzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpYmFzZV9wY29ubmVjdCgkZGF0YWJhc2UsICR1c2VybmFtZSwgJHBhc3N3b3JkLCAkY2hhcnNldCwgJGJ1ZmZlcnMpOwogICAgfSBlbHNlaWYgKCRjaGFyc2V0ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpYmFzZV9wY29ubmVjdCgkZGF0YWJhc2UsICR1c2VybmFtZSwgJHBhc3N3b3JkLCAkY2hhcnNldCk7CiAgICB9IGVsc2VpZiAoJHBhc3N3b3JkICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpYmFzZV9wY29ubmVjdCgkZGF0YWJhc2UsICR1c2VybmFtZSwgJHBhc3N3b3JkKTsKICAgIH0gZWxzZWlmICgkdXNlcm5hbWUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGliYXNlX3Bjb25uZWN0KCRkYXRhYmFzZSwgJHVzZXJuYW1lKTsKICAgIH0gZWxzZWlmICgkZGF0YWJhc2UgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGliYXNlX3Bjb25uZWN0KCRkYXRhYmFzZSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcaWJhc2VfcGNvbm5lY3QoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEliYXNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gcGFzc2VzIHRoZSBhcmd1bWVudHMgdG8gdGhlIChyZW1vdGUpIGRhdGFiYXNlIHNlcnZlci4gVGhlcmUgaXQgc3RhcnRzIGEgbmV3IHJlc3RvcmUgcHJvY2Vzcy4gVGhlcmVmb3JlIHlvdQogKiB3b24ndCBnZXQgYW55IHJlc3BvbnNlcy4KICoKICogQHBhcmFtIHJlc291cmNlICRzZXJ2aWNlX2hhbmRsZSBBIHByZXZpb3VzbHkgb3BlbmVkIGNvbm5lY3Rpb24gdG8gdGhlIGRhdGFiYXNlIHNlcnZlci4KICogQHBhcmFtIHN0cmluZyAkc291cmNlX2ZpbGUgVGhlIGFic29sdXRlIHBhdGggb24gdGhlIHNlcnZlciB3aGVyZSB0aGUgYmFja3VwIGZpbGUgaXMgbG9jYXRlZC4KICogQHBhcmFtIHN0cmluZyAkZGVzdF9kYiBUaGUgcGF0aCB0byBjcmVhdGUgdGhlIG5ldyBkYXRhYmFzZSBvbiB0aGUgc2VydmVyLiBZb3UgY2FuIGFsc28gdXNlIGRhdGFiYXNlIGFsaWFzLgogKiBAcGFyYW0gaW50ICRvcHRpb25zIEFkZGl0aW9uYWwgb3B0aW9ucyB0byBwYXNzIHRvIHRoZSBkYXRhYmFzZSBzZXJ2ZXIgZm9yIHJlc3RvcmUuCiAqIFRoZSBvcHRpb25zIHBhcmFtZXRlciBjYW4gYmUgYSBjb21iaW5hdGlvbgogKiBvZiB0aGUgZm9sbG93aW5nIGNvbnN0YW50czoKICogSUJBU0VfUkVTX0RFQUNUSVZBVEVfSURYLAogKiBJQkFTRV9SRVNfTk9fU0hBRE9XLAogKiBJQkFTRV9SRVNfTk9fVkFMSURJVFksCiAqIElCQVNFX1JFU19PTkVfQVRfQV9USU1FLAogKiBJQkFTRV9SRVNfUkVQTEFDRSwKICogSUJBU0VfUkVTX0NSRUFURSwKICogSUJBU0VfUkVTX1VTRV9BTExfU1BBQ0UsCiAqIElCQVNFX1BSUF9QQUdFX0JVRkZFUlMsCiAqIElCQVNFX1BSUF9TV0VFUF9JTlRFUlZBTCwKICogSUJBU0VfUkVTX0NSRUFURS4KICogUmVhZCB0aGUgc2VjdGlvbiBhYm91dCAgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uCiAqIEBwYXJhbSBib29sICR2ZXJib3NlIFNpbmNlIHRoZSByZXN0b3JlIHByb2Nlc3MgaXMgZG9uZSBvbiB0aGUgZGF0YWJhc2Ugc2VydmVyLCB5b3UgZG9uJ3QgaGF2ZSBhbnkgY2hhbmNlCiAqIHRvIGdldCBpdHMgb3V0cHV0LiBUaGlzIGFyZ3VtZW50IGlzIHVzZWxlc3MuCiAqIEByZXR1cm4gbWl4ZWQgUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIFNpbmNlIHRoZSByZXN0b3JlIHByb2Nlc3MgaXMgZG9uZSBvbiB0aGUgKHJlbW90ZSkgc2VydmVyLCB0aGlzIGZ1bmN0aW9uIGp1c3QgcGFzc2VzIHRoZSBhcmd1bWVudHMgdG8gaXQuCiAqIFdoaWxlIHRoZSBhcmd1bWVudHMgYXJlIGxlZ2FsLCB5b3Ugd29uJ3QgZ2V0IEZBTFNFLgogKiBAdGhyb3dzIEliYXNlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpYmFzZV9yZXN0b3JlKCRzZXJ2aWNlX2hhbmRsZSwgc3RyaW5nICRzb3VyY2VfZmlsZSwgc3RyaW5nICRkZXN0X2RiLCBpbnQgJG9wdGlvbnMgPSAwLCBib29sICR2ZXJib3NlID0gZmFsc2UpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaWJhc2VfcmVzdG9yZSgkc2VydmljZV9oYW5kbGUsICRzb3VyY2VfZmlsZSwgJGRlc3RfZGIsICRvcHRpb25zLCAkdmVyYm9zZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYmFzZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSb2xscyBiYWNrIGEgdHJhbnNhY3Rpb24gd2l0aG91dCBjbG9zaW5nIGl0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfb3JfdHJhbnNfaWRlbnRpZmllciBJZiBjYWxsZWQgd2l0aG91dCBhbiBhcmd1bWVudCwgdGhpcyBmdW5jdGlvbiByb2xscyBiYWNrIHRoZSBkZWZhdWx0CiAqIHRyYW5zYWN0aW9uIG9mIHRoZSBkZWZhdWx0IGxpbmsuIElmIHRoZSBhcmd1bWVudCBpcyBhIGNvbm5lY3Rpb24KICogaWRlbnRpZmllciwgdGhlIGRlZmF1bHQgdHJhbnNhY3Rpb24gb2YgdGhlIGNvcnJlc3BvbmRpbmcgY29ubmVjdGlvbgogKiB3aWxsIGJlIHJvbGxlZCBiYWNrLiBJZiB0aGUgYXJndW1lbnQgaXMgYSB0cmFuc2FjdGlvbiBpZGVudGlmaWVyLCB0aGUKICogY29ycmVzcG9uZGluZyB0cmFuc2FjdGlvbiB3aWxsIGJlIHJvbGxlZCBiYWNrLiBUaGUgdHJhbnNhY3Rpb24gY29udGV4dAogKiB3aWxsIGJlIHJldGFpbmVkLCBzbyBzdGF0ZW1lbnRzIGV4ZWN1dGVkIGZyb20gd2l0aGluIHRoaXMgdHJhbnNhY3Rpb24KICogd2lsbCBub3QgYmUgaW52YWxpZGF0ZWQuCiAqIEB0aHJvd3MgSWJhc2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGliYXNlX3JvbGxiYWNrX3JldCgkbGlua19vcl90cmFuc19pZGVudGlmaWVyID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpYmFzZV9yb2xsYmFja19yZXQoJGxpbmtfb3JfdHJhbnNfaWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYmFzZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUm9sbHMgYmFjayBhIHRyYW5zYWN0aW9uLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfb3JfdHJhbnNfaWRlbnRpZmllciBJZiBjYWxsZWQgd2l0aG91dCBhbiBhcmd1bWVudCwgdGhpcyBmdW5jdGlvbiByb2xscyBiYWNrIHRoZSBkZWZhdWx0CiAqIHRyYW5zYWN0aW9uIG9mIHRoZSBkZWZhdWx0IGxpbmsuIElmIHRoZSBhcmd1bWVudCBpcyBhIGNvbm5lY3Rpb24KICogaWRlbnRpZmllciwgdGhlIGRlZmF1bHQgdHJhbnNhY3Rpb24gb2YgdGhlIGNvcnJlc3BvbmRpbmcgY29ubmVjdGlvbgogKiB3aWxsIGJlIHJvbGxlZCBiYWNrLiBJZiB0aGUgYXJndW1lbnQgaXMgYSB0cmFuc2FjdGlvbiBpZGVudGlmaWVyLCB0aGUKICogY29ycmVzcG9uZGluZyB0cmFuc2FjdGlvbiB3aWxsIGJlIHJvbGxlZCBiYWNrLgogKiBAdGhyb3dzIEliYXNlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpYmFzZV9yb2xsYmFjaygkbGlua19vcl90cmFuc19pZGVudGlmaWVyID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpYmFzZV9yb2xsYmFjaygkbGlua19vcl90cmFuc19pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEliYXNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKgogKgogKiBAcGFyYW0gc3RyaW5nICRob3N0IFRoZSBuYW1lIG9yIGlwIGFkZHJlc3Mgb2YgdGhlIGRhdGFiYXNlIGhvc3QuIFlvdSBjYW4gZGVmaW5lIHRoZSBwb3J0IGJ5IGFkZGluZwogKiAnLycgYW5kIHBvcnQgbnVtYmVyLiBJZiBubyBwb3J0IGlzIHNwZWNpZmllZCwgcG9ydCAzMDUwIHdpbGwgYmUgdXNlZC4KICogQHBhcmFtIHN0cmluZyAkZGJhX3VzZXJuYW1lIFRoZSBuYW1lIG9mIGFueSB2YWxpZCB1c2VyLgogKiBAcGFyYW0gc3RyaW5nICRkYmFfcGFzc3dvcmQgVGhlIHVzZXIncyBwYXNzd29yZC4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgSW50ZXJiYXNlIC8gRmlyZWJpcmQgbGluayBpZGVudGlmaWVyIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgSWJhc2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGliYXNlX3NlcnZpY2VfYXR0YWNoKHN0cmluZyAkaG9zdCwgc3RyaW5nICRkYmFfdXNlcm5hbWUsIHN0cmluZyAkZGJhX3Bhc3N3b3JkKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGliYXNlX3NlcnZpY2VfYXR0YWNoKCRob3N0LCAkZGJhX3VzZXJuYW1lLCAkZGJhX3Bhc3N3b3JkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEliYXNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc2VydmljZV9oYW5kbGUgQSBwcmV2aW91c2x5IGNyZWF0ZWQgY29ubmVjdGlvbiB0byB0aGUgZGF0YWJhc2Ugc2VydmVyLgogKiBAdGhyb3dzIEliYXNlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpYmFzZV9zZXJ2aWNlX2RldGFjaCgkc2VydmljZV9oYW5kbGUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaWJhc2Vfc2VydmljZV9kZXRhY2goJHNlcnZpY2VfaGFuZGxlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEliYXNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/ibmDb2.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xJYm1EYjJFeGNlcHRpb247CgovKioKICogU2V0cyBvciBnZXRzIHRoZSBBVVRPQ09NTUlUIGJlaGF2aW9yIG9mIHRoZSBzcGVjaWZpZWQgY29ubmVjdGlvbiByZXNvdXJjZS4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIEEgdmFsaWQgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZSB2YXJpYWJsZSBhcyByZXR1cm5lZCBmcm9tCiAqIGRiMl9jb25uZWN0IG9yIGRiMl9wY29ubmVjdC4KICogQHBhcmFtIGludCAkdmFsdWUgT25lIG9mIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzOgogKgogKgogKiBEQjJfQVVUT0NPTU1JVF9PRkYKICoKICoKICogVHVybnMgQVVUT0NPTU1JVCBvZmYuCiAqCiAqCiAqCiAqCiAqIERCMl9BVVRPQ09NTUlUX09OCiAqCiAqCiAqIFR1cm5zIEFVVE9DT01NSVQgb24uCiAqCiAqCiAqCiAqCiAqCiAqIFR1cm5zIEFVVE9DT01NSVQgb2ZmLgogKgogKiBUdXJucyBBVVRPQ09NTUlUIG9uLgogKiBAcmV0dXJuIG1peGVkIFdoZW4gZGIyX2F1dG9jb21taXQgcmVjZWl2ZXMgb25seSB0aGUKICogY29ubmVjdGlvbiBwYXJhbWV0ZXIsIGl0IHJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUKICogb2YgQVVUT0NPTU1JVCBmb3IgdGhlIHJlcXVlc3RlZCBjb25uZWN0aW9uIGFzIGFuIGludGVnZXIgdmFsdWUuIEEgdmFsdWUgb2YKICogREIyX0FVVE9DT01NSVRfT0ZGIGluZGljYXRlcyB0aGF0IEFVVE9DT01NSVQgaXMgb2ZmLCB3aGlsZSBhIHZhbHVlIG9mIERCMl9BVVRPQ09NTUlUX09OIGluZGljYXRlcyB0aGF0CiAqIEFVVE9DT01NSVQgaXMgb24uCiAqCiAqIFdoZW4gZGIyX2F1dG9jb21taXQgcmVjZWl2ZXMgYm90aCB0aGUKICogY29ubmVjdGlvbiBwYXJhbWV0ZXIgYW5kCiAqIGF1dG9jb21taXQgcGFyYW1ldGVyLCBpdCBhdHRlbXB0cyB0byBzZXQgdGhlCiAqIEFVVE9DT01NSVQgc3RhdGUgb2YgdGhlIHJlcXVlc3RlZCBjb25uZWN0aW9uIHRvIHRoZSBjb3JyZXNwb25kaW5nIHN0YXRlLgogKiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICogQHRocm93cyBJYm1EYjJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGRiMl9hdXRvY29tbWl0KCRjb25uZWN0aW9uLCBpbnQgJHZhbHVlID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCR2YWx1ZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcZGIyX2F1dG9jb21taXQoJGNvbm5lY3Rpb24sICR2YWx1ZSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcZGIyX2F1dG9jb21taXQoJGNvbm5lY3Rpb24pOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSWJtRGIyRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEJpbmRzIGEgUEhQIHZhcmlhYmxlIHRvIGFuIFNRTCBzdGF0ZW1lbnQgcGFyYW1ldGVyIGluIGEgc3RhdGVtZW50IHJlc291cmNlCiAqIHJldHVybmVkIGJ5IGRiMl9wcmVwYXJlLiBUaGlzIGZ1bmN0aW9uIGdpdmVzIHlvdSBtb3JlCiAqIGNvbnRyb2wgb3ZlciB0aGUgcGFyYW1ldGVyIHR5cGUsIGRhdGEgdHlwZSwgcHJlY2lzaW9uLCBhbmQgc2NhbGUgZm9yIHRoZQogKiBwYXJhbWV0ZXIgdGhhbiBzaW1wbHkgcGFzc2luZyB0aGUgdmFyaWFibGUgYXMgcGFydCBvZiB0aGUgb3B0aW9uYWwgaW5wdXQKICogYXJyYXkgdG8gZGIyX2V4ZWN1dGUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RtdCBBIHByZXBhcmVkIHN0YXRlbWVudCByZXR1cm5lZCBmcm9tIGRiMl9wcmVwYXJlLgogKiBAcGFyYW0gaW50ICRwYXJhbWV0ZXJfbnVtYmVyIFNwZWNpZmllcyB0aGUgMS1pbmRleGVkIHBvc2l0aW9uIG9mIHRoZSBwYXJhbWV0ZXIgaW4gdGhlIHByZXBhcmVkCiAqIHN0YXRlbWVudC4KICogQHBhcmFtIHN0cmluZyAkdmFyaWFibGVfbmFtZSBBIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBuYW1lIG9mIHRoZSBQSFAgdmFyaWFibGUgdG8gYmluZCB0byB0aGUKICogcGFyYW1ldGVyIHNwZWNpZmllZCBieSBwYXJhbWV0ZXJfbnVtYmVyLgogKiBAcGFyYW0gaW50ICRwYXJhbWV0ZXJfdHlwZSBBIGNvbnN0YW50IHNwZWNpZnlpbmcgd2hldGhlciB0aGUgUEhQIHZhcmlhYmxlIHNob3VsZCBiZSBib3VuZCB0byB0aGUKICogU1FMIHBhcmFtZXRlciBhcyBhbiBpbnB1dCBwYXJhbWV0ZXIgKERCMl9QQVJBTV9JTiksCiAqIGFuIG91dHB1dCBwYXJhbWV0ZXIgKERCMl9QQVJBTV9PVVQpLCBvciBhcyBhCiAqIHBhcmFtZXRlciB0aGF0IGFjY2VwdHMgaW5wdXQgYW5kIHJldHVybnMgb3V0cHV0CiAqIChEQjJfUEFSQU1fSU5PVVQpLiBUbyBhdm9pZCBtZW1vcnkgb3ZlcmhlYWQsIHlvdSBjYW4KICogYWxzbyBzcGVjaWZ5IERCMl9QQVJBTV9GSUxFIHRvIGJpbmQgdGhlIFBIUCB2YXJpYWJsZQogKiB0byB0aGUgbmFtZSBvZiBhIGZpbGUgdGhhdCBjb250YWlucyBsYXJnZSBvYmplY3QgKEJMT0IsIENMT0IsIG9yIERCQ0xPQikKICogZGF0YS4KICogQHBhcmFtIGludCAkZGF0YV90eXBlIEEgY29uc3RhbnQgc3BlY2lmeWluZyB0aGUgU1FMIGRhdGEgdHlwZSB0aGF0IHRoZSBQSFAgdmFyaWFibGUgc2hvdWxkIGJlCiAqIGJvdW5kIGFzOiBvbmUgb2YgREIyX0JJTkFSWSwKICogREIyX0NIQVIsIERCMl9ET1VCTEUsIG9yCiAqIERCMl9MT05HIC4KICogQHBhcmFtIGludCAkcHJlY2lzaW9uIFNwZWNpZmllcyB0aGUgcHJlY2lzaW9uIHdpdGggd2hpY2ggdGhlIHZhcmlhYmxlIHNob3VsZCBiZSBib3VuZCB0byB0aGUKICogZGF0YWJhc2UuIFRoaXMgcGFyYW1ldGVyIGNhbiBhbHNvIGJlIHVzZWQgZm9yIHJldHJpZXZpbmcgWE1MIG91dHB1dCB2YWx1ZXMKICogZnJvbSBzdG9yZWQgcHJvY2VkdXJlcy4gQSBub24tbmVnYXRpdmUgdmFsdWUgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIHNpemUgb2YKICogdGhlIFhNTCBkYXRhIHRoYXQgd2lsbCBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgZGF0YWJhc2UuIElmIHRoaXMgcGFyYW1ldGVyCiAqIGlzIG5vdCB1c2VkLCBhIGRlZmF1bHQgb2YgMU1CIHdpbGwgYmUgYXNzdW1lZCBmb3IgcmV0cmlldmluZyB0aGUgWE1MCiAqIG91dHB1dCB2YWx1ZSBmcm9tIHRoZSBzdG9yZWQgcHJvY2VkdXJlLgogKiBAcGFyYW0gaW50ICRzY2FsZSBTcGVjaWZpZXMgdGhlIHNjYWxlIHdpdGggd2hpY2ggdGhlIHZhcmlhYmxlIHNob3VsZCBiZSBib3VuZCB0byB0aGUKICogZGF0YWJhc2UuCiAqIEB0aHJvd3MgSWJtRGIyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBkYjJfYmluZF9wYXJhbSgkc3RtdCwgaW50ICRwYXJhbWV0ZXJfbnVtYmVyLCBzdHJpbmcgJHZhcmlhYmxlX25hbWUsIGludCAkcGFyYW1ldGVyX3R5cGUgPSBudWxsLCBpbnQgJGRhdGFfdHlwZSA9IDAsIGludCAkcHJlY2lzaW9uID0gLTEsIGludCAkc2NhbGUgPSAwKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHNjYWxlICE9PSAwKSB7CiAgICAgICAgJHJlc3VsdCA9IFxkYjJfYmluZF9wYXJhbSgkc3RtdCwgJHBhcmFtZXRlcl9udW1iZXIsICR2YXJpYWJsZV9uYW1lLCAkcGFyYW1ldGVyX3R5cGUsICRkYXRhX3R5cGUsICRwcmVjaXNpb24sICRzY2FsZSk7CiAgICB9IGVsc2VpZiAoJHByZWNpc2lvbiAhPT0gLTEpIHsKICAgICAgICAkcmVzdWx0ID0gXGRiMl9iaW5kX3BhcmFtKCRzdG10LCAkcGFyYW1ldGVyX251bWJlciwgJHZhcmlhYmxlX25hbWUsICRwYXJhbWV0ZXJfdHlwZSwgJGRhdGFfdHlwZSwgJHByZWNpc2lvbik7CiAgICB9IGVsc2VpZiAoJGRhdGFfdHlwZSAhPT0gMCkgewogICAgICAgICRyZXN1bHQgPSBcZGIyX2JpbmRfcGFyYW0oJHN0bXQsICRwYXJhbWV0ZXJfbnVtYmVyLCAkdmFyaWFibGVfbmFtZSwgJHBhcmFtZXRlcl90eXBlLCAkZGF0YV90eXBlKTsKICAgIH0gZWxzZWlmICgkcGFyYW1ldGVyX3R5cGUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGRiMl9iaW5kX3BhcmFtKCRzdG10LCAkcGFyYW1ldGVyX251bWJlciwgJHZhcmlhYmxlX25hbWUsICRwYXJhbWV0ZXJfdHlwZSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcZGIyX2JpbmRfcGFyYW0oJHN0bXQsICRwYXJhbWV0ZXJfbnVtYmVyLCAkdmFyaWFibGVfbmFtZSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYm1EYjJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2l0aCByZWFkLW9ubHkgcHJvcGVydGllcyB0aGF0IHJldHVybgogKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgREIyIGRhdGFiYXNlIGNsaWVudC4gVGhlIGZvbGxvd2luZyB0YWJsZSBsaXN0cwogKiB0aGUgREIyIGNsaWVudCBwcm9wZXJ0aWVzOgogKgogKiBEQjIgY2xpZW50IHByb3BlcnRpZXMKICoKICoKICoKICogUHJvcGVydHkgbmFtZQogKiBSZXR1cm4gdHlwZQogKiBEZXNjcmlwdGlvbgogKgogKgogKgogKgogKiBBUFBMX0NPREVQQUdFCiAqIGludAogKiBUaGUgYXBwbGljYXRpb24gY29kZSBwYWdlLgogKgogKgogKiBDT05OX0NPREVQQUdFCiAqIGludAogKiBUaGUgY29kZSBwYWdlIGZvciB0aGUgY3VycmVudCBjb25uZWN0aW9uLgogKgogKgogKiBEQVRBX1NPVVJDRV9OQU1FCiAqIHN0cmluZwogKiBUaGUgZGF0YSBzb3VyY2UgbmFtZSAoRFNOKSB1c2VkIHRvIGNyZWF0ZSB0aGUgY3VycmVudCBjb25uZWN0aW9uCiAqIHRvIHRoZSBkYXRhYmFzZS4KICoKICoKICogRFJJVkVSX05BTUUKICogc3RyaW5nCiAqIFRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IHRoYXQgaW1wbGVtZW50cyB0aGUgREIyIENhbGwKICogTGV2ZWwgSW50ZXJmYWNlIChDTEkpIHNwZWNpZmljYXRpb24uCiAqCiAqCiAqIERSSVZFUl9PREJDX1ZFUgogKiBzdHJpbmcKICogVGhlIHZlcnNpb24gb2YgT0RCQyB0aGF0IHRoZSBEQjIgY2xpZW50IHN1cHBvcnRzLiBUaGlzIHJldHVybnMgYQogKiBzdHJpbmcgIk1NLm1tIiB3aGVyZSBNTSBpcyB0aGUgbWFqb3IgdmVyc2lvbiBhbmQKICogbW0gaXMgdGhlIG1pbm9yIHZlcnNpb24uIFRoZSBEQjIgY2xpZW50IGFsd2F5cwogKiByZXR1cm5zICIwMy41MSIuCiAqCiAqCiAqCiAqIERSSVZFUl9WRVIKICogc3RyaW5nCiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBjbGllbnQsIGluIHRoZSBmb3JtIG9mIGEgc3RyaW5nICJNTS5tbS51dXV1IiB3aGVyZQogKiBNTSBpcyB0aGUgbWFqb3IgdmVyc2lvbiwKICogbW0gaXMgdGhlIG1pbm9yIHZlcnNpb24sCiAqIGFuZCB1dXV1IGlzIHRoZSB1cGRhdGUuIEZvciBleGFtcGxlLCAiMDguMDIuMDAwMSIKICogcmVwcmVzZW50cyBtYWpvciB2ZXJzaW9uIDgsIG1pbm9yIHZlcnNpb24gMiwgdXBkYXRlIDEuCiAqCiAqCiAqCiAqIE9EQkNfU1FMX0NPTkZPUk1BTkNFCiAqIHN0cmluZwogKgogKiBUaGUgbGV2ZWwgb2YgT0RCQyBTUUwgZ3JhbW1hciBzdXBwb3J0ZWQgYnkgdGhlIGNsaWVudDoKICoKICoKICogTUlOSU1VTQogKgogKgogKiBTdXBwb3J0cyB0aGUgbWluaW11bSBPREJDIFNRTCBncmFtbWFyLgogKgogKgogKgogKgogKiBDT1JFCiAqCiAqCiAqIFN1cHBvcnRzIHRoZSBjb3JlIE9EQkMgU1FMIGdyYW1tYXIuCiAqCiAqCiAqCiAqCiAqIEVYVEVOREVECiAqCiAqCiAqIFN1cHBvcnRzIGV4dGVuZGVkIE9EQkMgU1FMIGdyYW1tYXIuCiAqCiAqCiAqCiAqCiAqCiAqCiAqCiAqCiAqIE9EQkNfVkVSCiAqIHN0cmluZwogKiBUaGUgdmVyc2lvbiBvZiBPREJDIHRoYXQgdGhlIE9EQkMgZHJpdmVyIG1hbmFnZXIgc3VwcG9ydHMuIFRoaXMKICogcmV0dXJucyBhIHN0cmluZyAiTU0ubW0ucnJyciIgd2hlcmUgTU0gaXMgdGhlIG1ham9yCiAqIHZlcnNpb24sIG1tIGlzIHRoZSBtaW5vciB2ZXJzaW9uLCBhbmQKICogcnJyciBpcyB0aGUgcmVsZWFzZS4gVGhlIERCMiBjbGllbnQgYWx3YXlzIHJldHVybnMKICogIjAzLjAxLjAwMDAiLgogKgogKgogKgogKgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gU3BlY2lmaWVzIGFuIGFjdGl2ZSBEQjIgY2xpZW50IGNvbm5lY3Rpb24uCiAqIEByZXR1cm4gb2JqZWN0IFJldHVybnMgYW4gb2JqZWN0IG9uIGEgc3VjY2Vzc2Z1bCBjYWxsLiBSZXR1cm5zIEZBTFNFIG9uIGZhaWx1cmUuCiAqIEB0aHJvd3MgSWJtRGIyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBkYjJfY2xpZW50X2luZm8oJGNvbm5lY3Rpb24pOiBvYmplY3QKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxkYjJfY2xpZW50X2luZm8oJGNvbm5lY3Rpb24pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSWJtRGIyRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gY2xvc2VzIGEgREIyIGNsaWVudCBjb25uZWN0aW9uIGNyZWF0ZWQgd2l0aAogKiBkYjJfY29ubmVjdCBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZwogKiByZXNvdXJjZXMgdG8gdGhlIGRhdGFiYXNlIHNlcnZlci4KICoKICogSWYgeW91IGF0dGVtcHQgdG8gY2xvc2UgYSBwZXJzaXN0ZW50IERCMiBjbGllbnQgY29ubmVjdGlvbiBjcmVhdGVkIHdpdGgKICogZGIyX3Bjb25uZWN0LCB0aGUgY2xvc2UgcmVxdWVzdCBpcyBpZ25vcmVkIGFuZCB0aGUKICogcGVyc2lzdGVudCBEQjIgY2xpZW50IGNvbm5lY3Rpb24gcmVtYWlucyBhdmFpbGFibGUgZm9yIHRoZSBuZXh0IGNhbGxlci4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFNwZWNpZmllcyBhbiBhY3RpdmUgREIyIGNsaWVudCBjb25uZWN0aW9uLgogKiBAdGhyb3dzIElibURiMkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZGIyX2Nsb3NlKCRjb25uZWN0aW9uKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGRiMl9jbG9zZSgkY29ubmVjdGlvbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYm1EYjJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENvbW1pdHMgYW4gaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb24gb24gdGhlIHNwZWNpZmllZCBjb25uZWN0aW9uIHJlc291cmNlIGFuZAogKiBiZWdpbnMgYSBuZXcgdHJhbnNhY3Rpb24uIFBIUCBhcHBsaWNhdGlvbnMgbm9ybWFsbHkgZGVmYXVsdCB0byBBVVRPQ09NTUlUCiAqIG1vZGUsIHNvIGRiMl9jb21taXQgaXMgbm90IG5lY2Vzc2FyeSB1bmxlc3MgQVVUT0NPTU1JVAogKiBoYXMgYmVlbiB0dXJuZWQgb2ZmIGZvciB0aGUgY29ubmVjdGlvbiByZXNvdXJjZS4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIEEgdmFsaWQgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZSB2YXJpYWJsZSBhcyByZXR1cm5lZCBmcm9tCiAqIGRiMl9jb25uZWN0IG9yIGRiMl9wY29ubmVjdC4KICogQHRocm93cyBJYm1EYjJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGRiMl9jb21taXQoJGNvbm5lY3Rpb24pOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZGIyX2NvbW1pdCgkY29ubmVjdGlvbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYm1EYjJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGRiMl9leGVjdXRlIGV4ZWN1dGVzIGFuIFNRTCBzdGF0ZW1lbnQgdGhhdCB3YXMKICogcHJlcGFyZWQgYnkgZGIyX3ByZXBhcmUuCiAqCiAqIElmIHRoZSBTUUwgc3RhdGVtZW50IHJldHVybnMgYSByZXN1bHQgc2V0LCBmb3IgZXhhbXBsZSwgYSBTRUxFQ1Qgc3RhdGVtZW50CiAqIG9yIGEgQ0FMTCB0byBhIHN0b3JlZCBwcm9jZWR1cmUgdGhhdCByZXR1cm5zIG9uZSBvciBtb3JlIHJlc3VsdCBzZXRzLCB5b3UKICogY2FuIHJldHJpZXZlIGEgcm93IGFzIGFuIGFycmF5IGZyb20gdGhlIHN0bXQgcmVzb3VyY2UKICogdXNpbmcgZGIyX2ZldGNoX2Fzc29jLAogKiBkYjJfZmV0Y2hfYm90aCwgb3IKICogZGIyX2ZldGNoX2FycmF5LiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZQogKiBkYjJfZmV0Y2hfcm93IHRvIG1vdmUgdGhlIHJlc3VsdCBzZXQgcG9pbnRlciB0byB0aGUKICogbmV4dCByb3cgYW5kIGZldGNoIGEgY29sdW1uIGF0IGEgdGltZSBmcm9tIHRoYXQgcm93IHdpdGgKICogZGIyX3Jlc3VsdC4KICoKICogUmVmZXIgdG8gZGIyX3ByZXBhcmUgZm9yIGEgYnJpZWYgZGlzY3Vzc2lvbiBvZiB0aGUKICogYWR2YW50YWdlcyBvZiB1c2luZyBkYjJfcHJlcGFyZSBhbmQKICogZGIyX2V4ZWN1dGUgcmF0aGVyIHRoYW4gZGIyX2V4ZWMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RtdCBBIHByZXBhcmVkIHN0YXRlbWVudCByZXR1cm5lZCBmcm9tIGRiMl9wcmVwYXJlLgogKiBAcGFyYW0gYXJyYXkgJHBhcmFtZXRlcnMgQW4gYXJyYXkgb2YgaW5wdXQgcGFyYW1ldGVycyBtYXRjaGluZyBhbnkgcGFyYW1ldGVyIG1hcmtlcnMgY29udGFpbmVkCiAqIGluIHRoZSBwcmVwYXJlZCBzdGF0ZW1lbnQuCiAqIEB0aHJvd3MgSWJtRGIyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBkYjJfZXhlY3V0ZSgkc3RtdCwgYXJyYXkgJHBhcmFtZXRlcnMgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHBhcmFtZXRlcnMgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGRiMl9leGVjdXRlKCRzdG10LCAkcGFyYW1ldGVycyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcZGIyX2V4ZWN1dGUoJHN0bXQpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSWJtRGIyRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBGcmVlcyB0aGUgc3lzdGVtIGFuZCBkYXRhYmFzZSByZXNvdXJjZXMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIGEgcmVzdWx0CiAqIHNldC4gVGhlc2UgcmVzb3VyY2VzIGFyZSBmcmVlZCBpbXBsaWNpdGx5IHdoZW4gYSBzY3JpcHQgZmluaXNoZXMsIGJ1dCB5b3UKICogY2FuIGNhbGwgZGIyX2ZyZWVfcmVzdWx0IHRvIGV4cGxpY2l0bHkgZnJlZSB0aGUgcmVzdWx0CiAqIHNldCByZXNvdXJjZXMgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIHNjcmlwdC4KICoKICogQHBhcmFtIHJlc291cmNlICRzdG10IEEgdmFsaWQgc3RhdGVtZW50IHJlc291cmNlLgogKiBAdGhyb3dzIElibURiMkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZGIyX2ZyZWVfcmVzdWx0KCRzdG10KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGRiMl9mcmVlX3Jlc3VsdCgkc3RtdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYm1EYjJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEZyZWVzIHRoZSBzeXN0ZW0gYW5kIGRhdGFiYXNlIHJlc291cmNlcyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggYSBzdGF0ZW1lbnQKICogcmVzb3VyY2UuIFRoZXNlIHJlc291cmNlcyBhcmUgZnJlZWQgaW1wbGljaXRseSB3aGVuIGEgc2NyaXB0IGZpbmlzaGVzLCBidXQKICogeW91IGNhbiBjYWxsIGRiMl9mcmVlX3N0bXQgdG8gZXhwbGljaXRseSBmcmVlIHRoZQogKiBzdGF0ZW1lbnQgcmVzb3VyY2VzIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBzY3JpcHQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RtdCBBIHZhbGlkIHN0YXRlbWVudCByZXNvdXJjZS4KICogQHRocm93cyBJYm1EYjJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGRiMl9mcmVlX3N0bXQoJHN0bXQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZGIyX2ZyZWVfc3RtdCgkc3RtdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYm1EYjJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJldHJpZXZlcyB0aGUgdmFsdWUgb2YgYSBzcGVjaWZpZWQgb3B0aW9uIHZhbHVlIGZvciBhIHN0YXRlbWVudCByZXNvdXJjZQogKiBvciBhIGNvbm5lY3Rpb24gcmVzb3VyY2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzb3VyY2UgQSB2YWxpZCBzdGF0ZW1lbnQgcmVzb3VyY2UgYXMgcmV0dXJuZWQgZnJvbQogKiBkYjJfcHJlcGFyZSBvciBhIHZhbGlkIGNvbm5lY3Rpb24gcmVzb3VyY2UgYXMKICogcmV0dXJuZWQgZnJvbSBkYjJfY29ubmVjdCBvcgogKiBkYjJfcGNvbm5lY3QuCiAqIEBwYXJhbSBzdHJpbmcgJG9wdGlvbiBBIHZhbGlkIHN0YXRlbWVudCBvciBjb25uZWN0aW9uIG9wdGlvbnMuIFRoZSBmb2xsb3dpbmcgbmV3IG9wdGlvbnMgYXJlIGF2YWlsYWJsZQogKiBhcyBvZiBpYm1fZGIyIHZlcnNpb24gMS42LjAuIFRoZXkgcHJvdmlkZSB1c2VmdWwgdHJhY2tpbmcgaW5mb3JtYXRpb24KICogdGhhdCBjYW4gYmUgc2V0IGR1cmluZyBleGVjdXRpb24gd2l0aCBkYjJfZ2V0X29wdGlvbi4KICoKICoKICogUHJpb3IgdmVyc2lvbnMgb2YgaWJtX2RiMiBkbyBub3Qgc3VwcG9ydCB0aGVzZSBuZXcgb3B0aW9ucy4KICoKICoKICogV2hlbiB0aGUgdmFsdWUgaW4gZWFjaCBvcHRpb24gaXMgYmVpbmcgc2V0LCBzb21lIHNlcnZlcnMgbWlnaHQgbm90IGhhbmRsZQogKiB0aGUgZW50aXJlIGxlbmd0aCBwcm92aWRlZCBhbmQgbWlnaHQgdHJ1bmNhdGUgdGhlIHZhbHVlLgogKgogKgogKiBUbyBlbnN1cmUgdGhhdCB0aGUgZGF0YSBzcGVjaWZpZWQgaW4gZWFjaCBvcHRpb24gaXMgY29udmVydGVkIGNvcnJlY3RseQogKiB3aGVuIHRyYW5zbWl0dGVkIHRvIGEgaG9zdCBzeXN0ZW0sIHVzZSBvbmx5IHRoZSBjaGFyYWN0ZXJzIEEgdGhyb3VnaCBaLAogKiAwIHRocm91Z2ggOSwgYW5kIHRoZSB1bmRlcnNjb3JlIChfKSBvciBwZXJpb2QgKC4pLgogKgogKgogKgogKgogKiB1c2VyaWQKICoKICoKICogU1FMX0FUVFJfSU5GT19VU0VSSUQgLSBBIHBvaW50ZXIgdG8gYSBudWxsLXRlcm1pbmF0ZWQKICogY2hhcmFjdGVyIHN0cmluZyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBjbGllbnQgdXNlciBJRCBzZW50IHRvIHRoZSBob3N0CiAqIGRhdGFiYXNlIHNlcnZlciB3aGVuIHVzaW5nIERCMiBDb25uZWN0LgogKgogKgogKiBEQjIgZm9yIHovT1MgYW5kIE9TLzM5MCBzZXJ2ZXJzIHN1cHBvcnQgdXAgdG8gYSBsZW5ndGggb2YgMTYgY2hhcmFjdGVycy4KICogVGhpcyB1c2VyLWlkIGlzIG5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHRoZSBhdXRoZW50aWNhdGlvbiB1c2VyLWlkLCBpdCBpcyBmb3IKICogaWRlbnRpZmljYXRpb24gcHVycG9zZXMgb25seSBhbmQgaXMgbm90IHVzZWQgZm9yIGFueSBhdXRob3JpemF0aW9uLgogKgogKgogKgogKgogKgogKgogKiBhY2N0c3RyCiAqCiAqCiAqIFNRTF9BVFRSX0lORk9fQUNDVFNUUiAtIEEgcG9pbnRlciB0byBhIG51bGwtdGVybWluYXRlZAogKiBjaGFyYWN0ZXIgc3RyaW5nIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGNsaWVudCBhY2NvdW50aW5nIHN0cmluZyBzZW50IHRvIHRoZQogKiBob3N0IGRhdGFiYXNlIHNlcnZlciB3aGVuIHVzaW5nIERCMiBDb25uZWN0LgogKgogKgogKiBEQjIgZm9yIHovT1MgYW5kIE9TLzM5MCBzZXJ2ZXJzIHN1cHBvcnQgdXAgdG8gYSBsZW5ndGggb2YgMjAwIGNoYXJhY3RlcnMuCiAqCiAqCiAqCiAqCiAqCiAqCiAqIGFwcGxuYW1lCiAqCiAqCiAqIFNRTF9BVFRSX0lORk9fQVBQTE5BTUUgLSBBIHBvaW50ZXIgdG8gYSBudWxsLXRlcm1pbmF0ZWQKICogY2hhcmFjdGVyIHN0cmluZyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBjbGllbnQgYXBwbGljYXRpb24gbmFtZSBzZW50IHRvIHRoZQogKiBob3N0IGRhdGFiYXNlIHNlcnZlciB3aGVuIHVzaW5nIERCMiBDb25uZWN0LgogKgogKgogKiBEQjIgZm9yIHovT1MgYW5kIE9TLzM5MCBzZXJ2ZXJzIHN1cHBvcnQgdXAgdG8gYSBsZW5ndGggb2YgMzIgY2hhcmFjdGVycy4KICoKICoKICoKICoKICoKICoKICogd3Jrc3RubmFtZQogKgogKgogKiBTUUxfQVRUUl9JTkZPX1dSS1NUTk5BTUUgLSBBIHBvaW50ZXIgdG8gYSBudWxsLXRlcm1pbmF0ZWQKICogY2hhcmFjdGVyIHN0cmluZyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBjbGllbnQgd29ya3N0YXRpb24gbmFtZSBzZW50IHRvIHRoZQogKiBob3N0IGRhdGFiYXNlIHNlcnZlciB3aGVuIHVzaW5nIERCMiBDb25uZWN0LgogKgogKgogKiBEQjIgZm9yIHovT1MgYW5kIE9TLzM5MCBzZXJ2ZXJzIHN1cHBvcnQgdXAgdG8gYSBsZW5ndGggb2YgMTggY2hhcmFjdGVycy4KICoKICoKICoKICoKICoKICoKICoKICogUHJpb3IgdmVyc2lvbnMgb2YgaWJtX2RiMiBkbyBub3Qgc3VwcG9ydCB0aGVzZSBuZXcgb3B0aW9ucy4KICoKICogV2hlbiB0aGUgdmFsdWUgaW4gZWFjaCBvcHRpb24gaXMgYmVpbmcgc2V0LCBzb21lIHNlcnZlcnMgbWlnaHQgbm90IGhhbmRsZQogKiB0aGUgZW50aXJlIGxlbmd0aCBwcm92aWRlZCBhbmQgbWlnaHQgdHJ1bmNhdGUgdGhlIHZhbHVlLgogKgogKiBUbyBlbnN1cmUgdGhhdCB0aGUgZGF0YSBzcGVjaWZpZWQgaW4gZWFjaCBvcHRpb24gaXMgY29udmVydGVkIGNvcnJlY3RseQogKiB3aGVuIHRyYW5zbWl0dGVkIHRvIGEgaG9zdCBzeXN0ZW0sIHVzZSBvbmx5IHRoZSBjaGFyYWN0ZXJzIEEgdGhyb3VnaCBaLAogKiAwIHRocm91Z2ggOSwgYW5kIHRoZSB1bmRlcnNjb3JlIChfKSBvciBwZXJpb2QgKC4pLgogKgogKiBTUUxfQVRUUl9JTkZPX1VTRVJJRCAtIEEgcG9pbnRlciB0byBhIG51bGwtdGVybWluYXRlZAogKiBjaGFyYWN0ZXIgc3RyaW5nIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGNsaWVudCB1c2VyIElEIHNlbnQgdG8gdGhlIGhvc3QKICogZGF0YWJhc2Ugc2VydmVyIHdoZW4gdXNpbmcgREIyIENvbm5lY3QuCiAqCiAqCiAqIERCMiBmb3Igei9PUyBhbmQgT1MvMzkwIHNlcnZlcnMgc3VwcG9ydCB1cCB0byBhIGxlbmd0aCBvZiAxNiBjaGFyYWN0ZXJzLgogKiBUaGlzIHVzZXItaWQgaXMgbm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggdGhlIGF1dGhlbnRpY2F0aW9uIHVzZXItaWQsIGl0IGlzIGZvcgogKiBpZGVudGlmaWNhdGlvbiBwdXJwb3NlcyBvbmx5IGFuZCBpcyBub3QgdXNlZCBmb3IgYW55IGF1dGhvcml6YXRpb24uCiAqCiAqCiAqCiAqIERCMiBmb3Igei9PUyBhbmQgT1MvMzkwIHNlcnZlcnMgc3VwcG9ydCB1cCB0byBhIGxlbmd0aCBvZiAxNiBjaGFyYWN0ZXJzLgogKiBUaGlzIHVzZXItaWQgaXMgbm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggdGhlIGF1dGhlbnRpY2F0aW9uIHVzZXItaWQsIGl0IGlzIGZvcgogKiBpZGVudGlmaWNhdGlvbiBwdXJwb3NlcyBvbmx5IGFuZCBpcyBub3QgdXNlZCBmb3IgYW55IGF1dGhvcml6YXRpb24uCiAqCiAqIFNRTF9BVFRSX0lORk9fQUNDVFNUUiAtIEEgcG9pbnRlciB0byBhIG51bGwtdGVybWluYXRlZAogKiBjaGFyYWN0ZXIgc3RyaW5nIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGNsaWVudCBhY2NvdW50aW5nIHN0cmluZyBzZW50IHRvIHRoZQogKiBob3N0IGRhdGFiYXNlIHNlcnZlciB3aGVuIHVzaW5nIERCMiBDb25uZWN0LgogKgogKgogKiBEQjIgZm9yIHovT1MgYW5kIE9TLzM5MCBzZXJ2ZXJzIHN1cHBvcnQgdXAgdG8gYSBsZW5ndGggb2YgMjAwIGNoYXJhY3RlcnMuCiAqCiAqCiAqCiAqIERCMiBmb3Igei9PUyBhbmQgT1MvMzkwIHNlcnZlcnMgc3VwcG9ydCB1cCB0byBhIGxlbmd0aCBvZiAyMDAgY2hhcmFjdGVycy4KICoKICogU1FMX0FUVFJfSU5GT19BUFBMTkFNRSAtIEEgcG9pbnRlciB0byBhIG51bGwtdGVybWluYXRlZAogKiBjaGFyYWN0ZXIgc3RyaW5nIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiBuYW1lIHNlbnQgdG8gdGhlCiAqIGhvc3QgZGF0YWJhc2Ugc2VydmVyIHdoZW4gdXNpbmcgREIyIENvbm5lY3QuCiAqCiAqCiAqIERCMiBmb3Igei9PUyBhbmQgT1MvMzkwIHNlcnZlcnMgc3VwcG9ydCB1cCB0byBhIGxlbmd0aCBvZiAzMiBjaGFyYWN0ZXJzLgogKgogKgogKgogKiBEQjIgZm9yIHovT1MgYW5kIE9TLzM5MCBzZXJ2ZXJzIHN1cHBvcnQgdXAgdG8gYSBsZW5ndGggb2YgMzIgY2hhcmFjdGVycy4KICoKICogU1FMX0FUVFJfSU5GT19XUktTVE5OQU1FIC0gQSBwb2ludGVyIHRvIGEgbnVsbC10ZXJtaW5hdGVkCiAqIGNoYXJhY3RlciBzdHJpbmcgdXNlZCB0byBpZGVudGlmeSB0aGUgY2xpZW50IHdvcmtzdGF0aW9uIG5hbWUgc2VudCB0byB0aGUKICogaG9zdCBkYXRhYmFzZSBzZXJ2ZXIgd2hlbiB1c2luZyBEQjIgQ29ubmVjdC4KICoKICoKICogREIyIGZvciB6L09TIGFuZCBPUy8zOTAgc2VydmVycyBzdXBwb3J0IHVwIHRvIGEgbGVuZ3RoIG9mIDE4IGNoYXJhY3RlcnMuCiAqCiAqCiAqCiAqIERCMiBmb3Igei9PUyBhbmQgT1MvMzkwIHNlcnZlcnMgc3VwcG9ydCB1cCB0byBhIGxlbmd0aCBvZiAxOCBjaGFyYWN0ZXJzLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBjdXJyZW50IHNldHRpbmcgb2YgdGhlIGNvbm5lY3Rpb24gYXR0cmlidXRlIHByb3ZpZGVkIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgSWJtRGIyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBkYjJfZ2V0X29wdGlvbigkcmVzb3VyY2UsIHN0cmluZyAkb3B0aW9uKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZGIyX2dldF9vcHRpb24oJHJlc291cmNlLCAkb3B0aW9uKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IElibURiMkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGNsb3NlcyBhIERCMiBjbGllbnQgY29ubmVjdGlvbiBjcmVhdGVkIHdpdGgKICogZGIyX3Bjb25uZWN0IGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJlc291cmNlcwogKiB0byB0aGUgZGF0YWJhc2Ugc2VydmVyLgogKgogKgogKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIG9uIGk1L09TIGluIHJlc3BvbnNlIHRvIGk1L09TIHN5c3RlbQogKiBhZG1pbmlzdHJhdGlvbiByZXF1ZXN0cy4KICoKICoKICoKICogSWYgeW91IGhhdmUgYSBwZXJzaXN0ZW50IERCMiBjbGllbnQgY29ubmVjdGlvbiBjcmVhdGVkIHdpdGgKICogZGIyX3Bjb25uZWN0LCB5b3UgbWF5IHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNsb3NlIHRoZQogKiBjb25uZWN0aW9uLiBUbyBhdm9pZCBzdWJzdGFudGlhbCBjb25uZWN0aW9uIHBlcmZvcm1hbmNlIHBlbmFsdGllcywgdGhpcwogKiBmdW5jdGlvbiBzaG91bGQgb25seSBiZSB1c2VkIGluIHJhcmUgY2FzZXMgd2hlbiB0aGUgcGVyc2lzdGVudCBjb25uZWN0aW9uCiAqIGhhcyBiZWNvbWUgdW5yZXNwb25zaXZlIG9yIHRoZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gd2lsbCBub3QgYmUgbmVlZGVkIGZvcgogKiBhIGxvbmcgcGVyaW9kIG9mIHRpbWUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzb3VyY2UgU3BlY2lmaWVzIGFuIGFjdGl2ZSBEQjIgY2xpZW50IGNvbm5lY3Rpb24uCiAqIEB0aHJvd3MgSWJtRGIyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBkYjJfcGNsb3NlKCRyZXNvdXJjZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxkYjJfcGNsb3NlKCRyZXNvdXJjZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYm1EYjJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJvbGxzIGJhY2sgYW4gaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb24gb24gdGhlIHNwZWNpZmllZCBjb25uZWN0aW9uIHJlc291cmNlIGFuZAogKiBiZWdpbnMgYSBuZXcgdHJhbnNhY3Rpb24uIFBIUCBhcHBsaWNhdGlvbnMgbm9ybWFsbHkgZGVmYXVsdCB0byBBVVRPQ09NTUlUCiAqIG1vZGUsIHNvIGRiMl9yb2xsYmFjayBub3JtYWxseSBoYXMgbm8gZWZmZWN0IHVubGVzcwogKiBBVVRPQ09NTUlUIGhhcyBiZWVuIHR1cm5lZCBvZmYgZm9yIHRoZSBjb25uZWN0aW9uIHJlc291cmNlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gQSB2YWxpZCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlIHZhcmlhYmxlIGFzIHJldHVybmVkIGZyb20KICogZGIyX2Nvbm5lY3Qgb3IgZGIyX3Bjb25uZWN0LgogKiBAdGhyb3dzIElibURiMkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZGIyX3JvbGxiYWNrKCRjb25uZWN0aW9uKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGRiMl9yb2xsYmFjaygkY29ubmVjdGlvbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYm1EYjJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2l0aCByZWFkLW9ubHkgcHJvcGVydGllcyB0aGF0IHJldHVybgogKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgSUJNIERCMiwgQ2xvdWRzY2FwZSwgb3IgQXBhY2hlIERlcmJ5IGRhdGFiYXNlIHNlcnZlci4KICogVGhlIGZvbGxvd2luZyB0YWJsZSBsaXN0cyB0aGUgZGF0YWJhc2Ugc2VydmVyIHByb3BlcnRpZXM6CiAqCiAqIERhdGFiYXNlIHNlcnZlciBwcm9wZXJ0aWVzCiAqCiAqCiAqCiAqIFByb3BlcnR5IG5hbWUKICogUmV0dXJuIHR5cGUKICogRGVzY3JpcHRpb24KICoKICoKICoKICoKICogREJNU19OQU1FCiAqIHN0cmluZwogKiBUaGUgbmFtZSBvZiB0aGUgZGF0YWJhc2Ugc2VydmVyIHRvIHdoaWNoIHlvdSBhcmUKICogY29ubmVjdGVkLiBGb3IgREIyIHNlcnZlcnMgdGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mCiAqIERCMiBmb2xsb3dlZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaAogKiB0aGUgZGF0YWJhc2Ugc2VydmVyIGlzIHJ1bm5pbmcuCiAqCiAqCiAqIERCTVNfVkVSCiAqIHN0cmluZwogKiBUaGUgdmVyc2lvbiBvZiB0aGUgZGF0YWJhc2Ugc2VydmVyLCBpbiB0aGUgZm9ybSBvZiBhIHN0cmluZwogKiAiTU0ubW0udXV1dSIgd2hlcmUgTU0gaXMgdGhlIG1ham9yIHZlcnNpb24sCiAqIG1tIGlzIHRoZSBtaW5vciB2ZXJzaW9uLAogKiBhbmQgdXV1dSBpcyB0aGUgdXBkYXRlLiBGb3IgZXhhbXBsZSwgIjA4LjAyLjAwMDEiCiAqIHJlcHJlc2VudHMgbWFqb3IgdmVyc2lvbiA4LCBtaW5vciB2ZXJzaW9uIDIsIHVwZGF0ZSAxLgogKgogKgogKgogKiBEQl9DT0RFUEFHRQogKiBpbnQKICogVGhlIGNvZGUgcGFnZSBvZiB0aGUgZGF0YWJhc2UgdG8gd2hpY2ggeW91IGFyZSBjb25uZWN0ZWQuCiAqCiAqCiAqIERCX05BTUUKICogc3RyaW5nCiAqIFRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZSB0byB3aGljaCB5b3UgYXJlIGNvbm5lY3RlZC4KICoKICoKICogREZUX0lTT0xBVElPTgogKiBzdHJpbmcKICoKICogVGhlIGRlZmF1bHQgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIHN1cHBvcnRlZCBieSB0aGUKICogc2VydmVyOgogKgogKgogKiBVUgogKgogKgogKiBVbmNvbW1pdHRlZCByZWFkOiBjaGFuZ2VzIGFyZSBpbW1lZGlhdGVseSB2aXNpYmxlIGJ5IGFsbAogKiBjb25jdXJyZW50IHRyYW5zYWN0aW9ucy4KICoKICoKICoKICoKICogQ1MKICoKICoKICogQ3Vyc29yIHN0YWJpbGl0eTogYSByb3cgcmVhZCBieSBvbmUgdHJhbnNhY3Rpb24gY2FuIGJlIGFsdGVyZWQgYW5kCiAqIGNvbW1pdHRlZCBieSBhIHNlY29uZCBjb25jdXJyZW50IHRyYW5zYWN0aW9uLgogKgogKgogKgogKgogKiBSUwogKgogKgogKiBSZWFkIHN0YWJpbGl0eTogYSB0cmFuc2FjdGlvbiBjYW4gYWRkIG9yIHJlbW92ZSByb3dzIG1hdGNoaW5nIGEKICogc2VhcmNoIGNvbmRpdGlvbiBvciBhIHBlbmRpbmcgdHJhbnNhY3Rpb24uCiAqCiAqCiAqCiAqCiAqIFJSCiAqCiAqCiAqIFJlcGVhdGFibGUgcmVhZDogZGF0YSBhZmZlY3RlZCBieSBwZW5kaW5nIHRyYW5zYWN0aW9uIGlzIG5vdAogKiBhdmFpbGFibGUgdG8gb3RoZXIgdHJhbnNhY3Rpb25zLgogKgogKgogKgogKgogKiBOQwogKgogKgogKiBObyBjb21taXQ6IGFueSBjaGFuZ2VzIGFyZSB2aXNpYmxlIGF0IHRoZSBlbmQgb2YgYSBzdWNjZXNzZnVsCiAqIG9wZXJhdGlvbi4gRXhwbGljaXQgY29tbWl0cyBhbmQgcm9sbGJhY2tzIGFyZSBub3QgYWxsb3dlZC4KICoKICoKICoKICoKICoKICoKICoKICoKICogSURFTlRJRklFUl9RVU9URV9DSEFSCiAqIHN0cmluZwogKiBUaGUgY2hhcmFjdGVyIHVzZWQgdG8gZGVsaW1pdCBhbiBpZGVudGlmaWVyLgogKgogKgogKiBJTlNUX05BTUUKICogc3RyaW5nCiAqIFRoZSBpbnN0YW5jZSBvbiB0aGUgZGF0YWJhc2Ugc2VydmVyIHRoYXQgY29udGFpbnMgdGhlCiAqIGRhdGFiYXNlLgogKgogKgogKiBJU09MQVRJT05fT1BUSU9OCiAqIGFycmF5CiAqIEFuIGFycmF5IG9mIHRoZSBpc29sYXRpb24gb3B0aW9ucyBzdXBwb3J0ZWQgYnkgdGhlCiAqIGRhdGFiYXNlIHNlcnZlci4gVGhlIGlzb2xhdGlvbiBvcHRpb25zIGFyZSBkZXNjcmliZWQgaW4KICogdGhlIERGVF9JU09MQVRJT04gcHJvcGVydHkuCiAqCiAqCiAqIEtFWVdPUkRTCiAqIGFycmF5CiAqIEFuIGFycmF5IG9mIHRoZSBrZXl3b3JkcyByZXNlcnZlZCBieSB0aGUgZGF0YWJhc2UKICogc2VydmVyLgogKgogKgogKiBMSUtFX0VTQ0FQRV9DTEFVU0UKICogYm9vbAogKiBUUlVFIGlmIHRoZSBkYXRhYmFzZSBzZXJ2ZXIgc3VwcG9ydHMgdGhlCiAqIHVzZSBvZiAlIGFuZCBfIHdpbGRjYXJkCiAqIGNoYXJhY3RlcnMuIEZBTFNFIGlmIHRoZSBkYXRhYmFzZSBzZXJ2ZXIgZG9lcyBub3QKICogc3VwcG9ydCB0aGVzZSB3aWxkY2FyZCBjaGFyYWN0ZXJzLgogKgogKgogKiBNQVhfQ09MX05BTUVfTEVOCiAqIGludAogKiBNYXhpbXVtIGxlbmd0aCBvZiBhIGNvbHVtbiBuYW1lIHN1cHBvcnRlZCBieSB0aGUgZGF0YWJhc2UKICogc2VydmVyLCBleHByZXNzZWQgaW4gYnl0ZXMuCiAqCiAqCiAqIE1BWF9JREVOVElGSUVSX0xFTgogKiBpbnQKICogTWF4aW11bSBsZW5ndGggb2YgYW4gU1FMIGlkZW50aWZpZXIgc3VwcG9ydGVkIGJ5IHRoZSBkYXRhYmFzZQogKiBzZXJ2ZXIsIGV4cHJlc3NlZCBpbiBjaGFyYWN0ZXJzLgogKgogKgogKiBNQVhfSU5ERVhfU0laRQogKiBpbnQKICogTWF4aW11bSBzaXplIG9mIGNvbHVtbnMgY29tYmluZWQgaW4gYW4gaW5kZXggc3VwcG9ydGVkIGJ5IHRoZQogKiBkYXRhYmFzZSBzZXJ2ZXIsIGV4cHJlc3NlZCBpbiBieXRlcy4KICoKICoKICogTUFYX1BST0NfTkFNRV9MRU4KICogaW50CiAqIE1heGltdW0gbGVuZ3RoIG9mIGEgcHJvY2VkdXJlIG5hbWUgc3VwcG9ydGVkIGJ5IHRoZSBkYXRhYmFzZQogKiBzZXJ2ZXIsIGV4cHJlc3NlZCBpbiBieXRlcy4KICoKICoKICogTUFYX1JPV19TSVpFCiAqIGludAogKiBNYXhpbXVtIGxlbmd0aCBvZiBhIHJvdyBpbiBhIGJhc2UgdGFibGUgc3VwcG9ydGVkIGJ5IHRoZQogKiBkYXRhYmFzZSBzZXJ2ZXIsIGV4cHJlc3NlZCBpbiBieXRlcy4KICoKICoKICogTUFYX1NDSEVNQV9OQU1FX0xFTgogKiBpbnQKICogTWF4aW11bSBsZW5ndGggb2YgYSBzY2hlbWEgbmFtZSBzdXBwb3J0ZWQgYnkgdGhlIGRhdGFiYXNlCiAqIHNlcnZlciwgZXhwcmVzc2VkIGluIGJ5dGVzLgogKgogKgogKiBNQVhfU1RBVEVNRU5UX0xFTgogKiBpbnQKICogTWF4aW11bSBsZW5ndGggb2YgYW4gU1FMIHN0YXRlbWVudCBzdXBwb3J0ZWQgYnkgdGhlIGRhdGFiYXNlCiAqIHNlcnZlciwgZXhwcmVzc2VkIGluIGJ5dGVzLgogKgogKgogKiBNQVhfVEFCTEVfTkFNRV9MRU4KICogaW50CiAqIE1heGltdW0gbGVuZ3RoIG9mIGEgdGFibGUgbmFtZSBzdXBwb3J0ZWQgYnkgdGhlIGRhdGFiYXNlCiAqIHNlcnZlciwgZXhwcmVzc2VkIGluIGJ5dGVzLgogKgogKgogKiBOT05fTlVMTEFCTEVfQ09MVU1OUwogKiBib29sCiAqIFRSVUUgaWYgdGhlIGRhdGFiYXNlIHNlcnZlciBzdXBwb3J0cyBjb2x1bW5zIHRoYXQgY2FuIGJlCiAqIGRlZmluZWQgYXMgTk9UIE5VTEwsIEZBTFNFIGlmIHRoZSBkYXRhYmFzZSBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydAogKiBjb2x1bW5zIGRlZmluZWQgYXMgTk9UIE5VTEwuCiAqCiAqCiAqIFBST0NFRFVSRVMKICogYm9vbAogKiBUUlVFIGlmIHRoZSBkYXRhYmFzZSBzZXJ2ZXIgc3VwcG9ydHMgdGhlIHVzZSBvZiB0aGUgQ0FMTAogKiBzdGF0ZW1lbnQgdG8gY2FsbCBzdG9yZWQgcHJvY2VkdXJlcywgRkFMU0UgaWYgdGhlIGRhdGFiYXNlCiAqIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBDQUxMIHN0YXRlbWVudC4KICoKICoKICogU1BFQ0lBTF9DSEFSUwogKiBzdHJpbmcKICogQSBzdHJpbmcgY29udGFpbmluZyBhbGwgb2YgdGhlIGNoYXJhY3RlcnMgb3RoZXIgdGhhbgogKiBhLVosIDAtOSwgYW5kIHVuZGVyc2NvcmUgdGhhdCBjYW4gYmUgdXNlZCBpbiBhbiBpZGVudGlmaWVyIG5hbWUuCiAqCiAqCiAqIFNRTF9DT05GT1JNQU5DRQogKiBzdHJpbmcKICoKICogVGhlIGxldmVsIG9mIGNvbmZvcm1hbmNlIHRvIHRoZSBBTlNJL0lTTyBTUUwtOTIgc3BlY2lmaWNhdGlvbgogKiBvZmZlcmVkIGJ5IHRoZSBkYXRhYmFzZSBzZXJ2ZXI6CiAqCiAqCiAqIEVOVFJZCiAqCiAqCiAqIEVudHJ5LWxldmVsIFNRTC05MiBjb21wbGlhbmNlLgogKgogKgogKgogKgogKiBGSVBTMTI3CiAqCiAqCiAqIEZJUFMtMTI3LTIgdHJhbnNpdGlvbmFsIGNvbXBsaWFuY2UuCiAqCiAqCiAqCiAqCiAqIEZVTEwKICoKICoKICogRnVsbCBsZXZlbCBTUUwtOTIgY29tcGxpYW5jZS4KICoKICoKICoKICoKICogSU5URVJNRURJQVRFCiAqCiAqCiAqIEludGVybWVkaWF0ZSBsZXZlbCBTUUwtOTIgY29tcGxpYW5jZS4KICoKICoKICoKICoKICoKICoKICoKICoKICoKICoKICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFNwZWNpZmllcyBhbiBhY3RpdmUgREIyIGNsaWVudCBjb25uZWN0aW9uLgogKiBAcmV0dXJuIG9iamVjdCBSZXR1cm5zIGFuIG9iamVjdCBvbiBhIHN1Y2Nlc3NmdWwgY2FsbC4gUmV0dXJucyBGQUxTRSBvbiBmYWlsdXJlLgogKiBAdGhyb3dzIElibURiMkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZGIyX3NlcnZlcl9pbmZvKCRjb25uZWN0aW9uKTogb2JqZWN0CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZGIyX3NlcnZlcl9pbmZvKCRjb25uZWN0aW9uKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IElibURiMkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBTZXRzIG9wdGlvbnMgZm9yIGEgc3RhdGVtZW50IHJlc291cmNlIG9yIGEgY29ubmVjdGlvbiByZXNvdXJjZS4gWW91CiAqIGNhbm5vdCBzZXQgb3B0aW9ucyBmb3IgcmVzdWx0IHNldCByZXNvdXJjZXMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzb3VyY2UgQSB2YWxpZCBzdGF0ZW1lbnQgcmVzb3VyY2UgYXMgcmV0dXJuZWQgZnJvbQogKiBkYjJfcHJlcGFyZSBvciBhIHZhbGlkIGNvbm5lY3Rpb24gcmVzb3VyY2UgYXMKICogcmV0dXJuZWQgZnJvbSBkYjJfY29ubmVjdCBvcgogKiBkYjJfcGNvbm5lY3QuCiAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBBbiBhc3NvY2lhdGl2ZSBhcnJheSBjb250YWluaW5nIHZhbGlkIHN0YXRlbWVudCBvciBjb25uZWN0aW9uCiAqIG9wdGlvbnMuIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSBhdXRvY29tbWl0IHZhbHVlcywKICogY3Vyc29yIHR5cGVzIChzY3JvbGxhYmxlIG9yIGZvcndhcmQpLCBhbmQgdG8gc3BlY2lmeSB0aGUgY2FzZSBvZgogKiB0aGUgY29sdW1uIG5hbWVzIChsb3dlciwgdXBwZXIsIG9yIG5hdHVyYWwpIHRoYXQgd2lsbCBhcHBlYXIgaW4gYQogKiByZXN1bHQgc2V0LgogKgogKgogKiBhdXRvY29tbWl0CiAqCiAqCiAqIFBhc3NpbmcgREIyX0FVVE9DT01NSVRfT04gdHVybnMKICogYXV0b2NvbW1pdCBvbiBmb3IgdGhlIHNwZWNpZmllZCBjb25uZWN0aW9uIHJlc291cmNlLgogKgogKgogKiBQYXNzaW5nIERCMl9BVVRPQ09NTUlUX09GRiB0dXJucwogKiBhdXRvY29tbWl0IG9mZiBmb3IgdGhlIHNwZWNpZmllZCBjb25uZWN0aW9uIHJlc291cmNlLgogKgogKgogKgogKgogKiBjdXJzb3IKICoKICoKICogUGFzc2luZyBEQjJfRk9SV0FSRF9PTkxZIHNwZWNpZmllcyBhCiAqIGZvcndhcmQtb25seSBjdXJzb3IgZm9yIGEgc3RhdGVtZW50IHJlc291cmNlLiBUaGlzIGlzIHRoZQogKiBkZWZhdWx0IGN1cnNvciB0eXBlLCBhbmQgaXMgc3VwcG9ydGVkIGJ5IGFsbCBkYXRhYmFzZQogKiBzZXJ2ZXJzLgogKgogKgogKiBQYXNzaW5nIERCMl9TQ1JPTExBQkxFIHNwZWNpZmllcyBhCiAqIHNjcm9sbGFibGUgY3Vyc29yIGZvciBhIHN0YXRlbWVudCByZXNvdXJjZS4gU2Nyb2xsYWJsZQogKiBjdXJzb3JzIGVuYWJsZSByZXN1bHQgc2V0IHJvd3MgdG8gYmUgYWNjZXNzZWQgaW4KICogbm9uLXNlcXVlbnRpYWwgb3JkZXIsIGJ1dCBhcmUgb25seSBzdXBwb3J0ZWQgYnkKICogSUJNIERCMiBVbml2ZXJzYWwgRGF0YWJhc2UgZGF0YWJhc2VzLgogKgogKgogKgogKgogKiBiaW5tb2RlCiAqCiAqCiAqIFBhc3NpbmcgREIyX0JJTkFSWSBzcGVjaWZpZXMgdGhhdAogKiBiaW5hcnkgZGF0YSB3aWxsIGJlIHJldHVybmVkIGFzIGlzLiBUaGlzIGlzIHRoZSBkZWZhdWx0CiAqIG1vZGUuIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2Ygc2V0dGluZwogKiBpYm1fZGIyLmJpbm1vZGU9MSBpbiBwaHAuaW5pLgogKgogKgogKiBQYXNzaW5nIERCMl9DT05WRVJUIHNwZWNpZmllcyB0aGF0CiAqIGJpbmFyeSBkYXRhIHdpbGwgYmUgY29udmVydGVkIHRvIGhleGFkZWNpbWFsIGVuY29kaW5nLAogKiBhbmQgd2lsbCBiZSByZXR1cm5lZCBhcyBzdWNoLiBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mCiAqIHNldHRpbmcgaWJtX2RiMi5iaW5tb2RlPTIgaW4gcGhwLmluaS4KICoKICoKICogUGFzc2luZyBEQjJfUEFTU1RIUlUgc3BlY2lmaWVzIHRoYXQKICogYmluYXJ5IGRhdGEgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gTlVMTC4gVGhpcyBpcyB0aGUKICogZXF1aXZhbGVudCBvZiBzZXR0aW5nIGlibV9kYjIuYmlubW9kZT0zCiAqIGluIHBocC5pbmkuCiAqCiAqCiAqCiAqCiAqIGRiMl9hdHRyX2Nhc2UKICoKICoKICogUGFzc2luZyBEQjJfQ0FTRV9MT1dFUiBzcGVjaWZpZXMgdGhhdAogKiBjb2x1bW4gbmFtZXMgb2YgdGhlIHJlc3VsdCBzZXQgYXJlIHJldHVybmVkIGluIGxvd2VyIGNhc2UuCiAqCiAqCiAqIFBhc3NpbmcgREIyX0NBU0VfVVBQRVIgc3BlY2lmaWVzIHRoYXQKICogY29sdW1uIG5hbWVzIG9mIHRoZSByZXN1bHQgc2V0IGFyZSByZXR1cm5lZCBpbiB1cHBlciBjYXNlLgogKgogKgogKiBQYXNzaW5nIERCMl9DQVNFX05BVFVSQUwgc3BlY2lmaWVzIHRoYXQKICogY29sdW1uIG5hbWVzIG9mIHRoZSByZXN1bHQgc2V0IGFyZSByZXR1cm5lZCBpbiBuYXR1cmFsCiAqIGNhc2UuCiAqCiAqCiAqCiAqCiAqIGRlZmVycmVkX3ByZXBhcmUKICoKICoKICogUGFzc2luZyBEQjJfREVGRVJSRURfUFJFUEFSRV9PTiB0dXJucyBkZWZlcnJlZAogKiBwcmVwYXJlIG9uIGZvciB0aGUgc3BlY2lmaWVkIHN0YXRlbWVudCByZXNvdXJjZS4KICoKICoKICogUGFzc2luZyBEQjJfREVGRVJSRURfUFJFUEFSRV9PRkYgdHVybnMgZGVmZXJyZWQKICogcHJlcGFyZSBvZmYgZm9yIHRoZSBzcGVjaWZpZWQgc3RhdGVtZW50IHJlc291cmNlLgogKgogKgogKgogKgogKgogKiBQYXNzaW5nIERCMl9BVVRPQ09NTUlUX09OIHR1cm5zCiAqIGF1dG9jb21taXQgb24gZm9yIHRoZSBzcGVjaWZpZWQgY29ubmVjdGlvbiByZXNvdXJjZS4KICoKICogUGFzc2luZyBEQjJfQVVUT0NPTU1JVF9PRkYgdHVybnMKICogYXV0b2NvbW1pdCBvZmYgZm9yIHRoZSBzcGVjaWZpZWQgY29ubmVjdGlvbiByZXNvdXJjZS4KICoKICogUGFzc2luZyBEQjJfRk9SV0FSRF9PTkxZIHNwZWNpZmllcyBhCiAqIGZvcndhcmQtb25seSBjdXJzb3IgZm9yIGEgc3RhdGVtZW50IHJlc291cmNlLiBUaGlzIGlzIHRoZQogKiBkZWZhdWx0IGN1cnNvciB0eXBlLCBhbmQgaXMgc3VwcG9ydGVkIGJ5IGFsbCBkYXRhYmFzZQogKiBzZXJ2ZXJzLgogKgogKiBQYXNzaW5nIERCMl9TQ1JPTExBQkxFIHNwZWNpZmllcyBhCiAqIHNjcm9sbGFibGUgY3Vyc29yIGZvciBhIHN0YXRlbWVudCByZXNvdXJjZS4gU2Nyb2xsYWJsZQogKiBjdXJzb3JzIGVuYWJsZSByZXN1bHQgc2V0IHJvd3MgdG8gYmUgYWNjZXNzZWQgaW4KICogbm9uLXNlcXVlbnRpYWwgb3JkZXIsIGJ1dCBhcmUgb25seSBzdXBwb3J0ZWQgYnkKICogSUJNIERCMiBVbml2ZXJzYWwgRGF0YWJhc2UgZGF0YWJhc2VzLgogKgogKiBQYXNzaW5nIERCMl9CSU5BUlkgc3BlY2lmaWVzIHRoYXQKICogYmluYXJ5IGRhdGEgd2lsbCBiZSByZXR1cm5lZCBhcyBpcy4gVGhpcyBpcyB0aGUgZGVmYXVsdAogKiBtb2RlLiBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHNldHRpbmcKICogaWJtX2RiMi5iaW5tb2RlPTEgaW4gcGhwLmluaS4KICoKICogUGFzc2luZyBEQjJfQ09OVkVSVCBzcGVjaWZpZXMgdGhhdAogKiBiaW5hcnkgZGF0YSB3aWxsIGJlIGNvbnZlcnRlZCB0byBoZXhhZGVjaW1hbCBlbmNvZGluZywKICogYW5kIHdpbGwgYmUgcmV0dXJuZWQgYXMgc3VjaC4gVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZgogKiBzZXR0aW5nIGlibV9kYjIuYmlubW9kZT0yIGluIHBocC5pbmkuCiAqCiAqIFBhc3NpbmcgREIyX1BBU1NUSFJVIHNwZWNpZmllcyB0aGF0CiAqIGJpbmFyeSBkYXRhIHdpbGwgYmUgY29udmVydGVkIHRvIE5VTEwuIFRoaXMgaXMgdGhlCiAqIGVxdWl2YWxlbnQgb2Ygc2V0dGluZyBpYm1fZGIyLmJpbm1vZGU9MwogKiBpbiBwaHAuaW5pLgogKgogKiBQYXNzaW5nIERCMl9DQVNFX0xPV0VSIHNwZWNpZmllcyB0aGF0CiAqIGNvbHVtbiBuYW1lcyBvZiB0aGUgcmVzdWx0IHNldCBhcmUgcmV0dXJuZWQgaW4gbG93ZXIgY2FzZS4KICoKICogUGFzc2luZyBEQjJfQ0FTRV9VUFBFUiBzcGVjaWZpZXMgdGhhdAogKiBjb2x1bW4gbmFtZXMgb2YgdGhlIHJlc3VsdCBzZXQgYXJlIHJldHVybmVkIGluIHVwcGVyIGNhc2UuCiAqCiAqIFBhc3NpbmcgREIyX0NBU0VfTkFUVVJBTCBzcGVjaWZpZXMgdGhhdAogKiBjb2x1bW4gbmFtZXMgb2YgdGhlIHJlc3VsdCBzZXQgYXJlIHJldHVybmVkIGluIG5hdHVyYWwKICogY2FzZS4KICoKICogUGFzc2luZyBEQjJfREVGRVJSRURfUFJFUEFSRV9PTiB0dXJucyBkZWZlcnJlZAogKiBwcmVwYXJlIG9uIGZvciB0aGUgc3BlY2lmaWVkIHN0YXRlbWVudCByZXNvdXJjZS4KICoKICogUGFzc2luZyBEQjJfREVGRVJSRURfUFJFUEFSRV9PRkYgdHVybnMgZGVmZXJyZWQKICogcHJlcGFyZSBvZmYgZm9yIHRoZSBzcGVjaWZpZWQgc3RhdGVtZW50IHJlc291cmNlLgogKgogKiBUaGUgZm9sbG93aW5nIG5ldyBpNS9PUyBvcHRpb25zIGFyZSBhdmFpbGFibGUgaW4gaWJtX2RiMiB2ZXJzaW9uIDEuNS4xCiAqIGFuZCBsYXRlci4gVGhlc2Ugb3B0aW9ucyBhcHBseSBvbmx5IHdoZW4gcnVubmluZyBQSFAgYW5kIGlibV9kYjIgbmF0aXZlbHkgb24gaTUgc3lzdGVtcy4KICoKICoKICogaTVfZmV0Y2hfb25seQogKgogKgogKiBEQjJfSTVfRkVUQ0hfT04gLSBDdXJzb3JzIGFyZSByZWFkLW9ubHkKICogYW5kIGNhbm5vdCBiZSB1c2VkIGZvciBwb3NpdGlvbmVkIHVwZGF0ZXMgb3IgZGVsZXRlcy4gVGhpcwogKiBpcyB0aGUgZGVmYXVsdCB1bmxlc3MgU1FMX0FUVFJfRk9SX0ZFVENIX09OTFkKICogZW52aXJvbm1lbnQgaGFzIGJlZW4gc2V0IHRvIFNRTF9GQUxTRS4KICoKICoKICogREIyX0k1X0ZFVENIX09GRiAtIEN1cnNvcnMgY2FuIGJlIHVzZWQKICogZm9yIHBvc2l0aW9uZWQgdXBkYXRlcyBhbmQgZGVsZXRlcy4KICoKICoKICoKICoKICoKICogREIyX0k1X0ZFVENIX09OIC0gQ3Vyc29ycyBhcmUgcmVhZC1vbmx5CiAqIGFuZCBjYW5ub3QgYmUgdXNlZCBmb3IgcG9zaXRpb25lZCB1cGRhdGVzIG9yIGRlbGV0ZXMuIFRoaXMKICogaXMgdGhlIGRlZmF1bHQgdW5sZXNzIFNRTF9BVFRSX0ZPUl9GRVRDSF9PTkxZCiAqIGVudmlyb25tZW50IGhhcyBiZWVuIHNldCB0byBTUUxfRkFMU0UuCiAqCiAqIERCMl9JNV9GRVRDSF9PRkYgLSBDdXJzb3JzIGNhbiBiZSB1c2VkCiAqIGZvciBwb3NpdGlvbmVkIHVwZGF0ZXMgYW5kIGRlbGV0ZXMuCiAqCiAqIFRoZSBmb2xsb3dpbmcgbmV3IG9wdGlvbiBpcyBhdmFpbGFibGUgaW4gaWJtX2RiMiB2ZXJzaW9uIDEuOC4wIGFuZCBsYXRlci4KICoKICoKICogcm93Y291bnQKICoKICoKICogREIyX1JPV0NPVU5UX1BSRUZFVENIX09OIC0gQ2xpZW50IGNhbiByZXF1ZXN0CiAqIHRoZSBmdWxsIHJvdyBjb3VudCBwcmlvciB0byBmZXRjaGluZywgd2hpY2ggbWVhbnMgdGhhdAogKiBkYjJfbnVtX3Jvd3MgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJvd3Mgc2VsZWN0ZWQKICogZXZlbiB3aGVuIGEgUk9MTEZPUldBUkRfT05MWSBjdXJzb3IgaXMgdXNlZC4KICoKICoKICogREIyX1JPV0NPVU5UX1BSRUZFVENIX09GRiAtIENsaWVudCBjYW5ub3QgcmVxdWVzdAogKiB0aGUgZnVsbCByb3cgY291bnQgcHJpb3IgdG8gZmV0Y2hpbmcuCiAqCiAqCiAqCiAqCiAqCiAqIERCMl9ST1dDT1VOVF9QUkVGRVRDSF9PTiAtIENsaWVudCBjYW4gcmVxdWVzdAogKiB0aGUgZnVsbCByb3cgY291bnQgcHJpb3IgdG8gZmV0Y2hpbmcsIHdoaWNoIG1lYW5zIHRoYXQKICogZGIyX251bV9yb3dzIHJldHVybnMgdGhlIG51bWJlciBvZiByb3dzIHNlbGVjdGVkCiAqIGV2ZW4gd2hlbiBhIFJPTExGT1JXQVJEX09OTFkgY3Vyc29yIGlzIHVzZWQuCiAqCiAqIERCMl9ST1dDT1VOVF9QUkVGRVRDSF9PRkYgLSBDbGllbnQgY2Fubm90IHJlcXVlc3QKICogdGhlIGZ1bGwgcm93IGNvdW50IHByaW9yIHRvIGZldGNoaW5nLgogKgogKiBUaGUgZm9sbG93aW5nIG5ldyBvcHRpb25zIGFyZSBhdmFpbGFibGUgaW4gaWJtX2RiMiB2ZXJzaW9uIDEuNy4wIGFuZCBsYXRlci4KICoKICoKICogdHJ1c3RlZF91c2VyCiAqCiAqCiAqIFRvIHN3aXRjaCB0aGUgdXNlciB0byBhIHRydXN0ZWQgdXNlciwgcGFzcyB0aGUgVXNlciBJRCAoU3RyaW5nKQogKiBvZiB0aGUgdHJ1c3RlZCB1c2VyIGFzIHRoZSB2YWx1ZSBvZiB0aGlzIGtleS4gVGhpcyBvcHRpb24gY2FuCiAqIGJlIHNldCBvbiBhIGNvbm5lY3Rpb24gcmVzb3VyY2Ugb25seS4gVG8gdXNlIHRoaXMgb3B0aW9uLCB0cnVzdGVkCiAqIGNvbnRleHQgbXVzdCBiZSBlbmFibGVkIG9uIHRoZSBjb25uZWN0aW9uIHJlc291cmNlLgogKgogKgogKgogKgogKiB0cnVzdGVkX3Bhc3N3b3JkCiAqCiAqCiAqIFRoZSBwYXNzd29yZCAoU3RyaW5nKSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSB1c2VyIHNwZWNpZmllZAogKiBieSB0aGUgdHJ1c3RlZF91c2VyIGtleS4KICoKICoKICoKICoKICoKICogVG8gc3dpdGNoIHRoZSB1c2VyIHRvIGEgdHJ1c3RlZCB1c2VyLCBwYXNzIHRoZSBVc2VyIElEIChTdHJpbmcpCiAqIG9mIHRoZSB0cnVzdGVkIHVzZXIgYXMgdGhlIHZhbHVlIG9mIHRoaXMga2V5LiBUaGlzIG9wdGlvbiBjYW4KICogYmUgc2V0IG9uIGEgY29ubmVjdGlvbiByZXNvdXJjZSBvbmx5LiBUbyB1c2UgdGhpcyBvcHRpb24sIHRydXN0ZWQKICogY29udGV4dCBtdXN0IGJlIGVuYWJsZWQgb24gdGhlIGNvbm5lY3Rpb24gcmVzb3VyY2UuCiAqCiAqIFRoZSBwYXNzd29yZCAoU3RyaW5nKSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSB1c2VyIHNwZWNpZmllZAogKiBieSB0aGUgdHJ1c3RlZF91c2VyIGtleS4KICoKICogVGhlIGZvbGxvd2luZyBuZXcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGluIGlibV9kYjIgdmVyc2lvbiAxLjYuMCBhbmQgbGF0ZXIuCiAqIFRoZXNlIG9wdGlvbnMgcHJvdmlkZSB1c2VmdWwgdHJhY2tpbmcgaW5mb3JtYXRpb24gdGhhdCBjYW4gYmUgYWNjZXNzZWQgZHVyaW5nCiAqIGV4ZWN1dGlvbiB3aXRoIGRiMl9nZXRfb3B0aW9uLgogKgogKgogKiBXaGVuIHRoZSB2YWx1ZSBpbiBlYWNoIG9wdGlvbiBpcyBiZWluZyBzZXQsIHNvbWUgc2VydmVycyBtaWdodCBub3QgaGFuZGxlCiAqIHRoZSBlbnRpcmUgbGVuZ3RoIHByb3ZpZGVkIGFuZCBtaWdodCB0cnVuY2F0ZSB0aGUgdmFsdWUuCiAqCiAqCiAqIFRvIGVuc3VyZSB0aGF0IHRoZSBkYXRhIHNwZWNpZmllZCBpbiBlYWNoIG9wdGlvbiBpcyBjb252ZXJ0ZWQgY29ycmVjdGx5CiAqIHdoZW4gdHJhbnNtaXR0ZWQgdG8gYSBob3N0IHN5c3RlbSwgdXNlIG9ubHkgdGhlIGNoYXJhY3RlcnMgQSB0aHJvdWdoIFosCiAqIDAgdGhyb3VnaCA5LCBhbmQgdGhlIHVuZGVyc2NvcmUgKF8pIG9yIHBlcmlvZCAoLikuCiAqCiAqCiAqCiAqCiAqIHVzZXJpZAogKgogKgogKiBTUUxfQVRUUl9JTkZPX1VTRVJJRCAtIEEgcG9pbnRlciB0byBhIG51bGwtdGVybWluYXRlZAogKiBjaGFyYWN0ZXIgc3RyaW5nIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGNsaWVudCB1c2VyIElEIHNlbnQgdG8gdGhlIGhvc3QKICogZGF0YWJhc2Ugc2VydmVyIHdoZW4gdXNpbmcgREIyIENvbm5lY3QuCiAqCiAqCiAqIERCMiBmb3Igei9PUyBhbmQgT1MvMzkwIHNlcnZlcnMgc3VwcG9ydCB1cCB0byBhIGxlbmd0aCBvZiAxNiBjaGFyYWN0ZXJzLgogKiBUaGlzIHVzZXItaWQgaXMgbm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggdGhlIGF1dGhlbnRpY2F0aW9uIHVzZXItaWQsIGl0IGlzIGZvcgogKiBpZGVudGlmaWNhdGlvbiBwdXJwb3NlcyBvbmx5IGFuZCBpcyBub3QgdXNlZCBmb3IgYW55IGF1dGhvcml6YXRpb24uCiAqCiAqCiAqCiAqCiAqCiAqCiAqIGFjY3RzdHIKICoKICoKICogU1FMX0FUVFJfSU5GT19BQ0NUU1RSIC0gQSBwb2ludGVyIHRvIGEgbnVsbC10ZXJtaW5hdGVkCiAqIGNoYXJhY3RlciBzdHJpbmcgdXNlZCB0byBpZGVudGlmeSB0aGUgY2xpZW50IGFjY291bnRpbmcgc3RyaW5nIHNlbnQgdG8gdGhlCiAqIGhvc3QgZGF0YWJhc2Ugc2VydmVyIHdoZW4gdXNpbmcgREIyIENvbm5lY3QuCiAqCiAqCiAqIERCMiBmb3Igei9PUyBhbmQgT1MvMzkwIHNlcnZlcnMgc3VwcG9ydCB1cCB0byBhIGxlbmd0aCBvZiAyMDAgY2hhcmFjdGVycy4KICoKICoKICoKICoKICoKICoKICogYXBwbG5hbWUKICoKICoKICogU1FMX0FUVFJfSU5GT19BUFBMTkFNRSAtIEEgcG9pbnRlciB0byBhIG51bGwtdGVybWluYXRlZAogKiBjaGFyYWN0ZXIgc3RyaW5nIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiBuYW1lIHNlbnQgdG8gdGhlCiAqIGhvc3QgZGF0YWJhc2Ugc2VydmVyIHdoZW4gdXNpbmcgREIyIENvbm5lY3QuCiAqCiAqCiAqIERCMiBmb3Igei9PUyBhbmQgT1MvMzkwIHNlcnZlcnMgc3VwcG9ydCB1cCB0byBhIGxlbmd0aCBvZiAzMiBjaGFyYWN0ZXJzLgogKgogKgogKgogKgogKgogKgogKiB3cmtzdG5uYW1lCiAqCiAqCiAqIFNRTF9BVFRSX0lORk9fV1JLU1ROTkFNRSAtIEEgcG9pbnRlciB0byBhIG51bGwtdGVybWluYXRlZAogKiBjaGFyYWN0ZXIgc3RyaW5nIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGNsaWVudCB3b3Jrc3RhdGlvbiBuYW1lIHNlbnQgdG8gdGhlCiAqIGhvc3QgZGF0YWJhc2Ugc2VydmVyIHdoZW4gdXNpbmcgREIyIENvbm5lY3QuCiAqCiAqCiAqIERCMiBmb3Igei9PUyBhbmQgT1MvMzkwIHNlcnZlcnMgc3VwcG9ydCB1cCB0byBhIGxlbmd0aCBvZiAxOCBjaGFyYWN0ZXJzLgogKgogKgogKgogKgogKgogKgogKgogKiBXaGVuIHRoZSB2YWx1ZSBpbiBlYWNoIG9wdGlvbiBpcyBiZWluZyBzZXQsIHNvbWUgc2VydmVycyBtaWdodCBub3QgaGFuZGxlCiAqIHRoZSBlbnRpcmUgbGVuZ3RoIHByb3ZpZGVkIGFuZCBtaWdodCB0cnVuY2F0ZSB0aGUgdmFsdWUuCiAqCiAqIFRvIGVuc3VyZSB0aGF0IHRoZSBkYXRhIHNwZWNpZmllZCBpbiBlYWNoIG9wdGlvbiBpcyBjb252ZXJ0ZWQgY29ycmVjdGx5CiAqIHdoZW4gdHJhbnNtaXR0ZWQgdG8gYSBob3N0IHN5c3RlbSwgdXNlIG9ubHkgdGhlIGNoYXJhY3RlcnMgQSB0aHJvdWdoIFosCiAqIDAgdGhyb3VnaCA5LCBhbmQgdGhlIHVuZGVyc2NvcmUgKF8pIG9yIHBlcmlvZCAoLikuCiAqCiAqIFNRTF9BVFRSX0lORk9fVVNFUklEIC0gQSBwb2ludGVyIHRvIGEgbnVsbC10ZXJtaW5hdGVkCiAqIGNoYXJhY3RlciBzdHJpbmcgdXNlZCB0byBpZGVudGlmeSB0aGUgY2xpZW50IHVzZXIgSUQgc2VudCB0byB0aGUgaG9zdAogKiBkYXRhYmFzZSBzZXJ2ZXIgd2hlbiB1c2luZyBEQjIgQ29ubmVjdC4KICoKICoKICogREIyIGZvciB6L09TIGFuZCBPUy8zOTAgc2VydmVycyBzdXBwb3J0IHVwIHRvIGEgbGVuZ3RoIG9mIDE2IGNoYXJhY3RlcnMuCiAqIFRoaXMgdXNlci1pZCBpcyBub3QgdG8gYmUgY29uZnVzZWQgd2l0aCB0aGUgYXV0aGVudGljYXRpb24gdXNlci1pZCwgaXQgaXMgZm9yCiAqIGlkZW50aWZpY2F0aW9uIHB1cnBvc2VzIG9ubHkgYW5kIGlzIG5vdCB1c2VkIGZvciBhbnkgYXV0aG9yaXphdGlvbi4KICoKICoKICoKICogREIyIGZvciB6L09TIGFuZCBPUy8zOTAgc2VydmVycyBzdXBwb3J0IHVwIHRvIGEgbGVuZ3RoIG9mIDE2IGNoYXJhY3RlcnMuCiAqIFRoaXMgdXNlci1pZCBpcyBub3QgdG8gYmUgY29uZnVzZWQgd2l0aCB0aGUgYXV0aGVudGljYXRpb24gdXNlci1pZCwgaXQgaXMgZm9yCiAqIGlkZW50aWZpY2F0aW9uIHB1cnBvc2VzIG9ubHkgYW5kIGlzIG5vdCB1c2VkIGZvciBhbnkgYXV0aG9yaXphdGlvbi4KICoKICogU1FMX0FUVFJfSU5GT19BQ0NUU1RSIC0gQSBwb2ludGVyIHRvIGEgbnVsbC10ZXJtaW5hdGVkCiAqIGNoYXJhY3RlciBzdHJpbmcgdXNlZCB0byBpZGVudGlmeSB0aGUgY2xpZW50IGFjY291bnRpbmcgc3RyaW5nIHNlbnQgdG8gdGhlCiAqIGhvc3QgZGF0YWJhc2Ugc2VydmVyIHdoZW4gdXNpbmcgREIyIENvbm5lY3QuCiAqCiAqCiAqIERCMiBmb3Igei9PUyBhbmQgT1MvMzkwIHNlcnZlcnMgc3VwcG9ydCB1cCB0byBhIGxlbmd0aCBvZiAyMDAgY2hhcmFjdGVycy4KICoKICoKICoKICogREIyIGZvciB6L09TIGFuZCBPUy8zOTAgc2VydmVycyBzdXBwb3J0IHVwIHRvIGEgbGVuZ3RoIG9mIDIwMCBjaGFyYWN0ZXJzLgogKgogKiBTUUxfQVRUUl9JTkZPX0FQUExOQU1FIC0gQSBwb2ludGVyIHRvIGEgbnVsbC10ZXJtaW5hdGVkCiAqIGNoYXJhY3RlciBzdHJpbmcgdXNlZCB0byBpZGVudGlmeSB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIG5hbWUgc2VudCB0byB0aGUKICogaG9zdCBkYXRhYmFzZSBzZXJ2ZXIgd2hlbiB1c2luZyBEQjIgQ29ubmVjdC4KICoKICoKICogREIyIGZvciB6L09TIGFuZCBPUy8zOTAgc2VydmVycyBzdXBwb3J0IHVwIHRvIGEgbGVuZ3RoIG9mIDMyIGNoYXJhY3RlcnMuCiAqCiAqCiAqCiAqIERCMiBmb3Igei9PUyBhbmQgT1MvMzkwIHNlcnZlcnMgc3VwcG9ydCB1cCB0byBhIGxlbmd0aCBvZiAzMiBjaGFyYWN0ZXJzLgogKgogKiBTUUxfQVRUUl9JTkZPX1dSS1NUTk5BTUUgLSBBIHBvaW50ZXIgdG8gYSBudWxsLXRlcm1pbmF0ZWQKICogY2hhcmFjdGVyIHN0cmluZyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBjbGllbnQgd29ya3N0YXRpb24gbmFtZSBzZW50IHRvIHRoZQogKiBob3N0IGRhdGFiYXNlIHNlcnZlciB3aGVuIHVzaW5nIERCMiBDb25uZWN0LgogKgogKgogKiBEQjIgZm9yIHovT1MgYW5kIE9TLzM5MCBzZXJ2ZXJzIHN1cHBvcnQgdXAgdG8gYSBsZW5ndGggb2YgMTggY2hhcmFjdGVycy4KICoKICoKICoKICogREIyIGZvciB6L09TIGFuZCBPUy8zOTAgc2VydmVycyBzdXBwb3J0IHVwIHRvIGEgbGVuZ3RoIG9mIDE4IGNoYXJhY3RlcnMuCiAqIEBwYXJhbSBpbnQgJHR5cGUgUGFzc2luZyBEQjJfQVVUT0NPTU1JVF9PTiB0dXJucwogKiBhdXRvY29tbWl0IG9uIGZvciB0aGUgc3BlY2lmaWVkIGNvbm5lY3Rpb24gcmVzb3VyY2UuCiAqCiAqIFBhc3NpbmcgREIyX0FVVE9DT01NSVRfT0ZGIHR1cm5zCiAqIGF1dG9jb21taXQgb2ZmIGZvciB0aGUgc3BlY2lmaWVkIGNvbm5lY3Rpb24gcmVzb3VyY2UuCiAqIEB0aHJvd3MgSWJtRGIyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBkYjJfc2V0X29wdGlvbigkcmVzb3VyY2UsIGFycmF5ICRvcHRpb25zLCBpbnQgJHR5cGUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZGIyX3NldF9vcHRpb24oJHJlc291cmNlLCAkb3B0aW9ucywgJHR5cGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSWJtRGIyRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/iconv.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xJY29udkV4Y2VwdGlvbjsKCi8qKgogKiBSZXRyaWV2ZSBpbnRlcm5hbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBvZiBpY29udiBleHRlbnNpb24uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHR5cGUgVGhlIHZhbHVlIG9mIHRoZSBvcHRpb25hbCB0eXBlIGNhbiBiZToKICoKICogYWxsCiAqIGlucHV0X2VuY29kaW5nCiAqIG91dHB1dF9lbmNvZGluZwogKiBpbnRlcm5hbF9lbmNvZGluZwogKgogKiBAcmV0dXJuIG1peGVkIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGludGVybmFsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaWYKICogc3VjY2Vzc2Z1bC4KICoKICogSWYgdHlwZSBpcyBvbWl0dGVkIG9yIHNldCB0byAiYWxsIiwKICogaWNvbnZfZ2V0X2VuY29kaW5nIHJldHVybnMgYW4gYXJyYXkgdGhhdAogKiBzdG9yZXMgYWxsIHRoZXNlIHZhcmlhYmxlcy4KICogQHRocm93cyBJY29udkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaWNvbnZfZ2V0X2VuY29kaW5nKHN0cmluZyAkdHlwZSA9ICJhbGwiKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGljb252X2dldF9lbmNvZGluZygkdHlwZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJY29udkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBDaGFuZ2VzIHRoZSB2YWx1ZSBvZiB0aGUgaW50ZXJuYWwgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBzcGVjaWZpZWQgYnkKICogdHlwZSB0byBjaGFyc2V0LgogKgogKiBAcGFyYW0gc3RyaW5nICR0eXBlIFRoZSB2YWx1ZSBvZiB0eXBlIGNhbiBiZSBhbnkgb25lIG9mIHRoZXNlOgogKgogKiBpbnB1dF9lbmNvZGluZwogKiBvdXRwdXRfZW5jb2RpbmcKICogaW50ZXJuYWxfZW5jb2RpbmcKICoKICogQHBhcmFtIHN0cmluZyAkY2hhcnNldCBUaGUgY2hhcmFjdGVyIHNldC4KICogQHRocm93cyBJY29udkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaWNvbnZfc2V0X2VuY29kaW5nKHN0cmluZyAkdHlwZSwgc3RyaW5nICRjaGFyc2V0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGljb252X3NldF9lbmNvZGluZygkdHlwZSwgJGNoYXJzZXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSWNvbnZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFBlcmZvcm1zIGEgY2hhcmFjdGVyIHNldCBjb252ZXJzaW9uIG9uIHRoZSBzdHJpbmcKICogc3RyIGZyb20gaW5fY2hhcnNldAogKiB0byBvdXRfY2hhcnNldC4KICoKICogQHBhcmFtIHN0cmluZyAkaW5fY2hhcnNldCBUaGUgaW5wdXQgY2hhcnNldC4KICogQHBhcmFtIHN0cmluZyAkb3V0X2NoYXJzZXQgVGhlIG91dHB1dCBjaGFyc2V0LgogKgogKiBJZiB5b3UgYXBwZW5kIHRoZSBzdHJpbmcgLy9UUkFOU0xJVCB0bwogKiBvdXRfY2hhcnNldCB0cmFuc2xpdGVyYXRpb24gaXMgYWN0aXZhdGVkLiBUaGlzCiAqIG1lYW5zIHRoYXQgd2hlbiBhIGNoYXJhY3RlciBjYW4ndCBiZSByZXByZXNlbnRlZCBpbiB0aGUgdGFyZ2V0IGNoYXJzZXQsCiAqIGl0IGNhbiBiZSBhcHByb3hpbWF0ZWQgdGhyb3VnaCBvbmUgb3Igc2V2ZXJhbCBzaW1pbGFybHkgbG9va2luZwogKiBjaGFyYWN0ZXJzLiBJZiB5b3UgYXBwZW5kIHRoZSBzdHJpbmcgLy9JR05PUkUsCiAqIGNoYXJhY3RlcnMgdGhhdCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gdGhlIHRhcmdldCBjaGFyc2V0IGFyZSBzaWxlbnRseQogKiBkaXNjYXJkZWQuIE90aGVyd2lzZSwgRV9OT1RJQ0UgaXMgZ2VuZXJhdGVkIGFuZCB0aGUgZnVuY3Rpb24KICogd2lsbCByZXR1cm4gRkFMU0UuCiAqCiAqIElmIGFuZCBob3cgLy9UUkFOU0xJVCB3b3JrcyBleGFjdGx5IGRlcGVuZHMgb24gdGhlCiAqIHN5c3RlbSdzIGljb252KCkgaW1wbGVtZW50YXRpb24gKGNmLiBJQ09OVl9JTVBMKS4KICogU29tZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGtub3duIHRvIGlnbm9yZSAvL1RSQU5TTElULAogKiBzbyB0aGUgY29udmVyc2lvbiBpcyBsaWtlbHkgdG8gZmFpbCBmb3IgY2hhcmFjdGVycyB3aGljaCBhcmUgaWxsZWdhbCBmb3IKICogdGhlIG91dF9jaGFyc2V0LgogKiBAcGFyYW0gc3RyaW5nICRzdHIgVGhlIHN0cmluZyB0byBiZSBjb252ZXJ0ZWQuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuCiAqIEB0aHJvd3MgSWNvbnZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGljb252KHN0cmluZyAkaW5fY2hhcnNldCwgc3RyaW5nICRvdXRfY2hhcnNldCwgc3RyaW5nICRzdHIpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpY29udigkaW5fY2hhcnNldCwgJG91dF9jaGFyc2V0LCAkc3RyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEljb252RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/image.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xJbWFnZUV4Y2VwdGlvbjsKCi8qKgogKiBUaGUgZ2V0aW1hZ2VzaXplIGZ1bmN0aW9uIHdpbGwgZGV0ZXJtaW5lIHRoZQogKiBzaXplIG9mIGFueSBzdXBwb3J0ZWQgZ2l2ZW4gaW1hZ2UgZmlsZSBhbmQgcmV0dXJuIHRoZSBkaW1lbnNpb25zIGFsb25nIHdpdGgKICogdGhlIGZpbGUgdHlwZSBhbmQgYSBoZWlnaHQvd2lkdGggdGV4dCBzdHJpbmcgdG8gYmUgdXNlZCBpbnNpZGUgYQogKiBub3JtYWwgSFRNTCBJTUcgdGFnIGFuZCB0aGUKICogY29ycmVzcG9uZGVudCBIVFRQIGNvbnRlbnQgdHlwZS4KICoKICogZ2V0aW1hZ2VzaXplIGNhbiBhbHNvIHJldHVybiBzb21lIG1vcmUgaW5mb3JtYXRpb24KICogaW4gaW1hZ2VpbmZvIHBhcmFtZXRlci4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgVGhpcyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBmaWxlIHlvdSB3aXNoIHRvIHJldHJpZXZlIGluZm9ybWF0aW9uCiAqIGFib3V0LiBJdCBjYW4gcmVmZXJlbmNlIGEgbG9jYWwgZmlsZSBvciAoY29uZmlndXJhdGlvbiBwZXJtaXR0aW5nKSBhCiAqIHJlbW90ZSBmaWxlIHVzaW5nIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHN0cmVhbXMuCiAqIEBwYXJhbSBhcnJheSAkaW1hZ2VpbmZvIFRoaXMgb3B0aW9uYWwgcGFyYW1ldGVyIGFsbG93cyB5b3UgdG8gZXh0cmFjdCBzb21lIGV4dGVuZGVkCiAqIGluZm9ybWF0aW9uIGZyb20gdGhlIGltYWdlIGZpbGUuIEN1cnJlbnRseSwgdGhpcyB3aWxsIHJldHVybiB0aGUKICogZGlmZmVyZW50IEpQRyBBUFAgbWFya2VycyBhcyBhbiBhc3NvY2lhdGl2ZSBhcnJheS4KICogU29tZSBwcm9ncmFtcyB1c2UgdGhlc2UgQVBQIG1hcmtlcnMgdG8gZW1iZWQgdGV4dCBpbmZvcm1hdGlvbiBpbgogKiBpbWFnZXMuIEEgdmVyeSBjb21tb24gb25lIGlzIHRvIGVtYmVkCiAqIElQVEMgaW5mb3JtYXRpb24gaW4gdGhlIEFQUDEzIG1hcmtlci4KICogWW91IGNhbiB1c2UgdGhlIGlwdGNwYXJzZSBmdW5jdGlvbiB0byBwYXJzZSB0aGUKICogYmluYXJ5IEFQUDEzIG1hcmtlciBpbnRvIHNvbWV0aGluZyByZWFkYWJsZS4KICoKICogVGhlIGltYWdlaW5mbyBvbmx5IHN1cHBvcnRzCiAqIEpGSUYgZmlsZXMuCiAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBhbiBhcnJheSB3aXRoIHVwIHRvIDcgZWxlbWVudHMuIE5vdCBhbGwgaW1hZ2UgdHlwZXMgd2lsbCBpbmNsdWRlCiAqIHRoZSBjaGFubmVscyBhbmQgYml0cyBlbGVtZW50cy4KICoKICogSW5kZXggMCBhbmQgMSBjb250YWlucyByZXNwZWN0aXZlbHkgdGhlIHdpZHRoIGFuZCB0aGUgaGVpZ2h0IG9mIHRoZSBpbWFnZS4KICoKICogSW5kZXggMiBpcyBvbmUgb2YgdGhlIElNQUdFVFlQRV9YWFggY29uc3RhbnRzIGluZGljYXRpbmcKICogdGhlIHR5cGUgb2YgdGhlIGltYWdlLgogKgogKiBJbmRleCAzIGlzIGEgdGV4dCBzdHJpbmcgd2l0aCB0aGUgY29ycmVjdAogKiBoZWlnaHQ9Inl5eSIgd2lkdGg9Inh4eCIgc3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQKICogZGlyZWN0bHkgaW4gYW4gSU1HIHRhZy4KICoKICogbWltZSBpcyB0aGUgY29ycmVzcG9uZGFudCBNSU1FIHR5cGUgb2YgdGhlIGltYWdlLgogKiBUaGlzIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VkIHRvIGRlbGl2ZXIgaW1hZ2VzIHdpdGggdGhlIGNvcnJlY3QgSFRUUAogKiBDb250ZW50LXR5cGUgaGVhZGVyOgogKgogKiBnZXRpbWFnZXNpemUgYW5kIE1JTUUgdHlwZXMKICoKICoKICogXV0+CiAqCiAqCiAqCiAqIGNoYW5uZWxzIHdpbGwgYmUgMyBmb3IgUkdCIHBpY3R1cmVzIGFuZCA0IGZvciBDTVlLCiAqIHBpY3R1cmVzLgogKgogKiBiaXRzIGlzIHRoZSBudW1iZXIgb2YgYml0cyBmb3IgZWFjaCBjb2xvci4KICoKICogRm9yIHNvbWUgaW1hZ2UgdHlwZXMsIHRoZSBwcmVzZW5jZSBvZiBjaGFubmVscyBhbmQKICogYml0cyB2YWx1ZXMgY2FuIGJlIGEgYml0CiAqIGNvbmZ1c2luZy4gQXMgYW4gZXhhbXBsZSwgR0lGIGFsd2F5cyB1c2VzIDMgY2hhbm5lbHMKICogcGVyIHBpeGVsLCBidXQgdGhlIG51bWJlciBvZiBiaXRzIHBlciBwaXhlbCBjYW5ub3QgYmUgY2FsY3VsYXRlZCBmb3IgYW4KICogYW5pbWF0ZWQgR0lGIHdpdGggYSBnbG9iYWwgY29sb3IgdGFibGUuCiAqCiAqIE9uIGZhaWx1cmUsIEZBTFNFIGlzIHJldHVybmVkLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnZXRpbWFnZXNpemUoc3RyaW5nICRmaWxlbmFtZSwgYXJyYXkgJiRpbWFnZWluZm8gPSBudWxsKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxnZXRpbWFnZXNpemUoJGZpbGVuYW1lLCAkaW1hZ2VpbmZvKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGltYWdlMndibXAgb3V0cHV0cyBvciBzYXZlIGEgV0JNUAogKiB2ZXJzaW9uIG9mIHRoZSBnaXZlbiBpbWFnZS4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkZmlsZW5hbWUgUGF0aCB0byB0aGUgc2F2ZWQgZmlsZS4gSWYgbm90IGdpdmVuLCB0aGUgcmF3IGltYWdlIHN0cmVhbSB3aWxsIGJlCiAqIG91dHB1dCBkaXJlY3RseS4KICogQHBhcmFtIGludCAkZm9yZWdyb3VuZCBZb3UgY2FuIHNldCB0aGUgZm9yZWdyb3VuZCBjb2xvciB3aXRoIHRoaXMgcGFyYW1ldGVyIGJ5IHNldHRpbmcgYW4KICogaWRlbnRpZmllciBvYnRhaW5lZCBmcm9tIGltYWdlY29sb3JhbGxvY2F0ZS4KICogVGhlIGRlZmF1bHQgZm9yZWdyb3VuZCBjb2xvciBpcyBibGFjay4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2Uyd2JtcCgkaW1hZ2UsID9zdHJpbmcgJGZpbGVuYW1lID0gbnVsbCwgaW50ICRmb3JlZ3JvdW5kID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRmb3JlZ3JvdW5kICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpbWFnZTJ3Ym1wKCRpbWFnZSwgJGZpbGVuYW1lLCAkZm9yZWdyb3VuZCk7CiAgICB9IGVsc2VpZiAoJGZpbGVuYW1lICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpbWFnZTJ3Ym1wKCRpbWFnZSwgJGZpbGVuYW1lKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxpbWFnZTJ3Ym1wKCRpbWFnZSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICoKICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBhcnJheSAkYWZmaW5lIEFycmF5IHdpdGgga2V5cyAwIHRvIDUuCiAqIEBwYXJhbSBhcnJheSAkY2xpcCBBcnJheSB3aXRoIGtleXMgIngiLCAieSIsICJ3aWR0aCIgYW5kICJoZWlnaHQiLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybiBhZmZpbmVkIGltYWdlIHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlYWZmaW5lKCRpbWFnZSwgYXJyYXkgJGFmZmluZSwgYXJyYXkgJGNsaXAgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGNsaXAgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGltYWdlYWZmaW5lKCRpbWFnZSwgJGFmZmluZSwgJGNsaXApOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGltYWdlYWZmaW5lKCRpbWFnZSwgJGFmZmluZSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIHRoZSBjb25jYXRlbmF0aW9uIG9mIHR3byBhZmZpbmUgdHJhbnNmb3JtYXRpb24gbWF0cmljZXMsCiAqIHdoYXQgaXMgdXNlZnVsIGlmIG11bHRpcGxlIHRyYW5zZm9ybWF0aW9ucyBzaG91bGQgYmUgYXBwbGllZCB0byB0aGUgc2FtZQogKiBpbWFnZSBpbiBvbmUgZ28uCiAqCiAqIEBwYXJhbSBhcnJheSAkbTEgQW4gYWZmaW5lIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCAoYW4gYXJyYXkgd2l0aCBrZXlzCiAqIDAgdG8gNSBhbmQgZmxvYXQgdmFsdWVzKS4KICogQHBhcmFtIGFycmF5ICRtMiBBbiBhZmZpbmUgdHJhbnNmb3JtYXRpb24gbWF0cml4IChhbiBhcnJheSB3aXRoIGtleXMKICogMCB0byA1IGFuZCBmbG9hdCB2YWx1ZXMpLgogKiBAcmV0dXJuIGFycmF5ezA6ZmxvYXQsMTpmbG9hdCwyOmZsb2F0LDM6ZmxvYXQsNDpmbG9hdCw1OmZsb2F0fSBBbiBhZmZpbmUgdHJhbnNmb3JtYXRpb24gbWF0cml4IChhbiBhcnJheSB3aXRoIGtleXMKICogMCB0byA1IGFuZCBmbG9hdCB2YWx1ZXMpLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWFmZmluZW1hdHJpeGNvbmNhdChhcnJheSAkbTEsIGFycmF5ICRtMik6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VhZmZpbmVtYXRyaXhjb25jYXQoJG0xLCAkbTIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0dXJucyBhbiBhZmZpbmUgdHJhbnNmb3JtYXRpb24gbWF0cml4LgogKgogKiBAcGFyYW0gaW50ICR0eXBlIE9uZSBvZiB0aGUgSU1HX0FGRklORV8qIGNvbnN0YW50cy4KICogQHBhcmFtIGFycmF5fGZsb2F0ICRvcHRpb25zIElmIHR5cGUgaXMgSU1HX0FGRklORV9UUkFOU0xBVEUKICogb3IgSU1HX0FGRklORV9TQ0FMRSwKICogb3B0aW9ucyBoYXMgdG8gYmUgYW4gYXJyYXkgd2l0aCBrZXlzIHgKICogYW5kIHksIGJvdGggaGF2aW5nIGZsb2F0IHZhbHVlcy4KICoKICogSWYgdHlwZSBpcyBJTUdfQUZGSU5FX1JPVEFURSwKICogSU1HX0FGRklORV9TSEVBUl9IT1JJWk9OVEFMIG9yIElNR19BRkZJTkVfU0hFQVJfVkVSVElDQUwsCiAqIG9wdGlvbnMgaGFzIHRvIGJlIGEgZmxvYXQgc3BlY2lmeWluZyB0aGUgYW5nbGUuCiAqIEByZXR1cm4gYXJyYXl7MDpmbG9hdCwxOmZsb2F0LDI6ZmxvYXQsMzpmbG9hdCw0OmZsb2F0LDU6ZmxvYXR9IEFuIGFmZmluZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggKGFuIGFycmF5IHdpdGgga2V5cwogKiAwIHRvIDUgYW5kIGZsb2F0IHZhbHVlcykuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlYWZmaW5lbWF0cml4Z2V0KGludCAkdHlwZSwgJG9wdGlvbnMgPSBudWxsKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRvcHRpb25zICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpbWFnZWFmZmluZW1hdHJpeGdldCgkdHlwZSwgJG9wdGlvbnMpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGltYWdlYWZmaW5lbWF0cml4Z2V0KCR0eXBlKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGltYWdlYWxwaGFibGVuZGluZyBhbGxvd3MgZm9yIHR3byBkaWZmZXJlbnQKICogbW9kZXMgb2YgZHJhd2luZyBvbiB0cnVlY29sb3IgaW1hZ2VzLiBJbiBibGVuZGluZyBtb2RlLCB0aGUKICogYWxwaGEgY2hhbm5lbCBjb21wb25lbnQgb2YgdGhlIGNvbG9yIHN1cHBsaWVkIHRvIGFsbCBkcmF3aW5nIGZ1bmN0aW9uLAogKiBzdWNoIGFzIGltYWdlc2V0cGl4ZWwgZGV0ZXJtaW5lcyBob3cgbXVjaCBvZiB0aGUKICogdW5kZXJseWluZyBjb2xvciBzaG91bGQgYmUgYWxsb3dlZCB0byBzaGluZSB0aHJvdWdoLiAgQXMgYSByZXN1bHQsIGdkCiAqIGF1dG9tYXRpY2FsbHkgYmxlbmRzIHRoZSBleGlzdGluZyBjb2xvciBhdCB0aGF0IHBvaW50IHdpdGggdGhlIGRyYXdpbmcgY29sb3IsCiAqIGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiB0aGUgaW1hZ2UuICBUaGUgcmVzdWx0aW5nIHBpeGVsIGlzIG9wYXF1ZS4gIEluCiAqIG5vbi1ibGVuZGluZyBtb2RlLCB0aGUgZHJhd2luZyBjb2xvciBpcyBjb3BpZWQgbGl0ZXJhbGx5IHdpdGggaXRzIGFscGhhIGNoYW5uZWwKICogaW5mb3JtYXRpb24sIHJlcGxhY2luZyB0aGUgZGVzdGluYXRpb24gcGl4ZWwuICBCbGVuZGluZyBtb2RlIGlzIG5vdCBhdmFpbGFibGUKICogd2hlbiBkcmF3aW5nIG9uIHBhbGV0dGUgaW1hZ2VzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIGJvb2wgJGJsZW5kbW9kZSBXaGV0aGVyIHRvIGVuYWJsZSB0aGUgYmxlbmRpbmcgbW9kZSBvciBub3QuIE9uIHRydWUgY29sb3IgaW1hZ2VzCiAqIHRoZSBkZWZhdWx0IHZhbHVlIGlzIFRSVUUgb3RoZXJ3aXNlIHRoZSBkZWZhdWx0IHZhbHVlIGlzIEZBTFNFCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlYWxwaGFibGVuZGluZygkaW1hZ2UsIGJvb2wgJGJsZW5kbW9kZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWFscGhhYmxlbmRpbmcoJGltYWdlLCAkYmxlbmRtb2RlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBBY3RpdmF0ZSB0aGUgZmFzdCBkcmF3aW5nIGFudGlhbGlhc2VkIG1ldGhvZHMgZm9yIGxpbmVzIGFuZCB3aXJlZCBwb2x5Z29ucy4KICogSXQgZG9lcyBub3Qgc3VwcG9ydCBhbHBoYSBjb21wb25lbnRzLiBJdCB3b3JrcyB1c2luZyBhIGRpcmVjdCBibGVuZAogKiBvcGVyYXRpb24uIEl0IHdvcmtzIG9ubHkgd2l0aCB0cnVlY29sb3IgaW1hZ2VzLgogKgogKiBUaGlja25lc3MgYW5kIHN0eWxlZCBhcmUgbm90IHN1cHBvcnRlZC4KICoKICogVXNpbmcgYW50aWFsaWFzZWQgcHJpbWl0aXZlcyB3aXRoIHRyYW5zcGFyZW50IGJhY2tncm91bmQgY29sb3IgY2FuIGVuZCB3aXRoCiAqIHNvbWUgdW5leHBlY3RlZCByZXN1bHRzLiBUaGUgYmxlbmQgbWV0aG9kIHVzZXMgdGhlIGJhY2tncm91bmQgY29sb3IgYXMgYW55CiAqIG90aGVyIGNvbG9ycy4gVGhlIGxhY2sgb2YgYWxwaGEgY29tcG9uZW50IHN1cHBvcnQgZG9lcyBub3QgYWxsb3cgYW4gYWxwaGEKICogYmFzZWQgYW50aWFsaWFzaW5nIG1ldGhvZC4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBib29sICRlbmFibGVkIFdoZXRoZXIgdG8gZW5hYmxlIGFudGlhbGlhc2luZyBvciBub3QuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlYW50aWFsaWFzKCRpbWFnZSwgYm9vbCAkZW5hYmxlZCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWFudGlhbGlhcygkaW1hZ2UsICRlbmFibGVkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBpbWFnZWFyYyBkcmF3cyBhbiBhcmMgb2YgY2lyY2xlIGNlbnRlcmVkIGF0IHRoZSBnaXZlbgogKiBjb29yZGluYXRlcy4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBpbnQgJGN4IHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyLgogKiBAcGFyYW0gaW50ICRjeSB5LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlci4KICogQHBhcmFtIGludCAkd2lkdGggVGhlIGFyYyB3aWR0aC4KICogQHBhcmFtIGludCAkaGVpZ2h0IFRoZSBhcmMgaGVpZ2h0LgogKiBAcGFyYW0gaW50ICRzdGFydCBUaGUgYXJjIHN0YXJ0IGFuZ2xlLCBpbiBkZWdyZWVzLgogKiBAcGFyYW0gaW50ICRlbmQgVGhlIGFyYyBlbmQgYW5nbGUsIGluIGRlZ3JlZXMuCiAqIDDCsCBpcyBsb2NhdGVkIGF0IHRoZSB0aHJlZS1vJ2Nsb2NrIHBvc2l0aW9uLCBhbmQgdGhlIGFyYyBpcyBkcmF3bgogKiBjbG9ja3dpc2UuCiAqIEBwYXJhbSBpbnQgJGNvbG9yIEEgY29sb3IgaWRlbnRpZmllciBjcmVhdGVkIHdpdGggaW1hZ2Vjb2xvcmFsbG9jYXRlLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWFyYygkaW1hZ2UsIGludCAkY3gsIGludCAkY3ksIGludCAkd2lkdGgsIGludCAkaGVpZ2h0LCBpbnQgJHN0YXJ0LCBpbnQgJGVuZCwgaW50ICRjb2xvcik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWFyYygkaW1hZ2UsICRjeCwgJGN5LCAkd2lkdGgsICRoZWlnaHQsICRzdGFydCwgJGVuZCwgJGNvbG9yKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBPdXRwdXRzIG9yIHNhdmVzIGEgQk1QIHZlcnNpb24gb2YgdGhlIGdpdmVuIGltYWdlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIG1peGVkICR0byBUaGUgcGF0aCBvciBhbiBvcGVuIHN0cmVhbSByZXNvdXJjZSAod2hpY2ggaXMgYXV0b21hdGljYWxseSBiZWluZyBjbG9zZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zKSB0byBzYXZlIHRoZSBmaWxlIHRvLiBJZiBub3Qgc2V0IG9yIE5VTEwsIHRoZSByYXcgaW1hZ2Ugc3RyZWFtIHdpbGwgYmUgb3V0cHV0dGVkIGRpcmVjdGx5LgogKgogKiBOVUxMIGlzIGludmFsaWQgaWYgdGhlIGNvbXByZXNzZWQgYXJndW1lbnRzIGlzCiAqIG5vdCB1c2VkLgogKiBAcGFyYW0gYm9vbCAkY29tcHJlc3NlZCBXaGV0aGVyIHRoZSBCTVAgc2hvdWxkIGJlIGNvbXByZXNzZWQgd2l0aCBydW4tbGVuZ3RoIGVuY29kaW5nIChSTEUpLCBvciBub3QuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlYm1wKCRpbWFnZSwgJHRvID0gbnVsbCwgYm9vbCAkY29tcHJlc3NlZCA9IHRydWUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VibXAoJGltYWdlLCAkdG8sICRjb21wcmVzc2VkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBpbWFnZWNoYXIgZHJhd3MgdGhlIGZpcnN0IGNoYXJhY3RlciBvZgogKiBjIGluIHRoZSBpbWFnZSBpZGVudGlmaWVkIGJ5CiAqIGltYWdlIHdpdGggaXRzIHVwcGVyLWxlZnQgYXQKICogeCx5ICh0b3AgbGVmdCBpcyAwLAogKiAwKSB3aXRoIHRoZSBjb2xvciBjb2xvci4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBpbnQgJGZvbnQgQ2FuIGJlIDEsIDIsIDMsIDQsIDUgZm9yIGJ1aWx0LWluCiAqIGZvbnRzIGluIGxhdGluMiBlbmNvZGluZyAod2hlcmUgaGlnaGVyIG51bWJlcnMgY29ycmVzcG9uZGluZyB0byBsYXJnZXIgZm9udHMpIG9yIGFueSBvZiB5b3VyCiAqIG93biBmb250IGlkZW50aWZpZXJzIHJlZ2lzdGVyZWQgd2l0aCBpbWFnZWxvYWRmb250LgogKiBAcGFyYW0gaW50ICR4IHgtY29vcmRpbmF0ZSBvZiB0aGUgc3RhcnQuCiAqIEBwYXJhbSBpbnQgJHkgeS1jb29yZGluYXRlIG9mIHRoZSBzdGFydC4KICogQHBhcmFtIHN0cmluZyAkYyBUaGUgY2hhcmFjdGVyIHRvIGRyYXcuCiAqIEBwYXJhbSBpbnQgJGNvbG9yIEEgY29sb3IgaWRlbnRpZmllciBjcmVhdGVkIHdpdGggaW1hZ2Vjb2xvcmFsbG9jYXRlLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWNoYXIoJGltYWdlLCBpbnQgJGZvbnQsIGludCAkeCwgaW50ICR5LCBzdHJpbmcgJGMsIGludCAkY29sb3IpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VjaGFyKCRpbWFnZSwgJGZvbnQsICR4LCAkeSwgJGMsICRjb2xvcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRHJhd3MgdGhlIGNoYXJhY3RlciBjIHZlcnRpY2FsbHkgYXQgdGhlIHNwZWNpZmllZAogKiBjb29yZGluYXRlIG9uIHRoZSBnaXZlbiBpbWFnZS4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBpbnQgJGZvbnQgQ2FuIGJlIDEsIDIsIDMsIDQsIDUgZm9yIGJ1aWx0LWluCiAqIGZvbnRzIGluIGxhdGluMiBlbmNvZGluZyAod2hlcmUgaGlnaGVyIG51bWJlcnMgY29ycmVzcG9uZGluZyB0byBsYXJnZXIgZm9udHMpIG9yIGFueSBvZiB5b3VyCiAqIG93biBmb250IGlkZW50aWZpZXJzIHJlZ2lzdGVyZWQgd2l0aCBpbWFnZWxvYWRmb250LgogKiBAcGFyYW0gaW50ICR4IHgtY29vcmRpbmF0ZSBvZiB0aGUgc3RhcnQuCiAqIEBwYXJhbSBpbnQgJHkgeS1jb29yZGluYXRlIG9mIHRoZSBzdGFydC4KICogQHBhcmFtIHN0cmluZyAkYyBUaGUgY2hhcmFjdGVyIHRvIGRyYXcuCiAqIEBwYXJhbSBpbnQgJGNvbG9yIEEgY29sb3IgaWRlbnRpZmllciBjcmVhdGVkIHdpdGggaW1hZ2Vjb2xvcmFsbG9jYXRlLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWNoYXJ1cCgkaW1hZ2UsIGludCAkZm9udCwgaW50ICR4LCBpbnQgJHksIHN0cmluZyAkYywgaW50ICRjb2xvcik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWNoYXJ1cCgkaW1hZ2UsICRmb250LCAkeCwgJHksICRjLCAkY29sb3IpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBjb2xvciBvZiB0aGUgcGl4ZWwgYXQgdGhlCiAqIHNwZWNpZmllZCBsb2NhdGlvbiBpbiB0aGUgaW1hZ2Ugc3BlY2lmaWVkIGJ5IGltYWdlLgogKgogKiBJZiB0aGUgaW1hZ2UgaXMgYQogKiB0cnVlY29sb3IgaW1hZ2UsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgUkdCIHZhbHVlIG9mIHRoYXQgcGl4ZWwgYXMKICogaW50ZWdlci4gVXNlIGJpdHNoaWZ0aW5nIGFuZCBtYXNraW5nIHRvIGFjY2VzcyB0aGUgZGlzdGluY3QgcmVkLCBncmVlbiBhbmQgYmx1ZQogKiBjb21wb25lbnQgdmFsdWVzOgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIGludCAkeCB4LWNvb3JkaW5hdGUgb2YgdGhlIHBvaW50LgogKiBAcGFyYW0gaW50ICR5IHktY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBjb2xvci4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2Vjb2xvcmF0KCRpbWFnZSwgaW50ICR4LCBpbnQgJHkpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWNvbG9yYXQoJGltYWdlLCAkeCwgJHkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogRGUtYWxsb2NhdGVzIGEgY29sb3IgcHJldmlvdXNseSBhbGxvY2F0ZWQgd2l0aAogKiBpbWFnZWNvbG9yYWxsb2NhdGUgb3IKICogaW1hZ2Vjb2xvcmFsbG9jYXRlYWxwaGEuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gaW50ICRjb2xvciBUaGUgY29sb3IgaWRlbnRpZmllci4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2Vjb2xvcmRlYWxsb2NhdGUoJGltYWdlLCBpbnQgJGNvbG9yKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlY29sb3JkZWFsbG9jYXRlKCRpbWFnZSwgJGNvbG9yKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBNYWtlcyB0aGUgY29sb3JzIG9mIHRoZSBwYWxldHRlIHZlcnNpb24gb2YgYW4gaW1hZ2UgbW9yZSBjbG9zZWx5IG1hdGNoIHRoZSB0cnVlIGNvbG9yIHZlcnNpb24uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UxIEEgdHJ1ZWNvbG9yIGltYWdlIHJlc291cmNlLgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlMiBBIHBhbGV0dGUgaW1hZ2UgcmVzb3VyY2UgcG9pbnRpbmcgdG8gYW4gaW1hZ2UgdGhhdCBoYXMgdGhlIHNhbWUKICogc2l6ZSBhcyBpbWFnZTEuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlY29sb3JtYXRjaCgkaW1hZ2UxLCAkaW1hZ2UyKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlY29sb3JtYXRjaCgkaW1hZ2UxLCAkaW1hZ2UyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBBcHBsaWVzIGEgY29udm9sdXRpb24gbWF0cml4IG9uIHRoZSBpbWFnZSwgdXNpbmcgdGhlIGdpdmVuIGNvZWZmaWNpZW50IGFuZAogKiBvZmZzZXQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gYXJyYXkgJG1hdHJpeCBBIDN4MyBtYXRyaXg6IGFuIGFycmF5IG9mIHRocmVlIGFycmF5cyBvZiB0aHJlZSBmbG9hdHMuCiAqIEBwYXJhbSBmbG9hdCAkZGl2IFRoZSBkaXZpc29yIG9mIHRoZSByZXN1bHQgb2YgdGhlIGNvbnZvbHV0aW9uLCB1c2VkIGZvciBub3JtYWxpemF0aW9uLgogKiBAcGFyYW0gZmxvYXQgJG9mZnNldCBDb2xvciBvZmZzZXQuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlY29udm9sdXRpb24oJGltYWdlLCBhcnJheSAkbWF0cml4LCBmbG9hdCAkZGl2LCBmbG9hdCAkb2Zmc2V0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlY29udm9sdXRpb24oJGltYWdlLCAkbWF0cml4LCAkZGl2LCAkb2Zmc2V0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBDb3B5IGEgcGFydCBvZiBzcmNfaW0gb250bwogKiBkc3RfaW0gc3RhcnRpbmcgYXQgdGhlIHgseSBjb29yZGluYXRlcwogKiBzcmNfeCwgc3JjX3kgIHdpdGgKICogYSB3aWR0aCBvZiBzcmNfdyBhbmQgYSBoZWlnaHQgb2YKICogc3JjX2guICBUaGUgcG9ydGlvbiBkZWZpbmVkIHdpbGwgYmUgY29waWVkCiAqIG9udG8gdGhlIHgseSBjb29yZGluYXRlcywgZHN0X3ggYW5kCiAqIGRzdF95LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGRzdF9pbSBEZXN0aW5hdGlvbiBpbWFnZSByZXNvdXJjZS4KICogQHBhcmFtIHJlc291cmNlICRzcmNfaW0gU291cmNlIGltYWdlIHJlc291cmNlLgogKiBAcGFyYW0gaW50ICRkc3RfeCB4LWNvb3JkaW5hdGUgb2YgZGVzdGluYXRpb24gcG9pbnQuCiAqIEBwYXJhbSBpbnQgJGRzdF95IHktY29vcmRpbmF0ZSBvZiBkZXN0aW5hdGlvbiBwb2ludC4KICogQHBhcmFtIGludCAkc3JjX3ggeC1jb29yZGluYXRlIG9mIHNvdXJjZSBwb2ludC4KICogQHBhcmFtIGludCAkc3JjX3kgeS1jb29yZGluYXRlIG9mIHNvdXJjZSBwb2ludC4KICogQHBhcmFtIGludCAkc3JjX3cgU291cmNlIHdpZHRoLgogKiBAcGFyYW0gaW50ICRzcmNfaCBTb3VyY2UgaGVpZ2h0LgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWNvcHkoJGRzdF9pbSwgJHNyY19pbSwgaW50ICRkc3RfeCwgaW50ICRkc3RfeSwgaW50ICRzcmNfeCwgaW50ICRzcmNfeSwgaW50ICRzcmNfdywgaW50ICRzcmNfaCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWNvcHkoJGRzdF9pbSwgJHNyY19pbSwgJGRzdF94LCAkZHN0X3ksICRzcmNfeCwgJHNyY195LCAkc3JjX3csICRzcmNfaCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ29weSBhIHBhcnQgb2Ygc3JjX2ltIG9udG8KICogZHN0X2ltIHN0YXJ0aW5nIGF0IHRoZSB4LHkgY29vcmRpbmF0ZXMKICogc3JjX3gsIHNyY195ICB3aXRoCiAqIGEgd2lkdGggb2Ygc3JjX3cgYW5kIGEgaGVpZ2h0IG9mCiAqIHNyY19oLiAgVGhlIHBvcnRpb24gZGVmaW5lZCB3aWxsIGJlIGNvcGllZAogKiBvbnRvIHRoZSB4LHkgY29vcmRpbmF0ZXMsIGRzdF94IGFuZAogKiBkc3RfeS4KICoKICogQHBhcmFtIHJlc291cmNlICRkc3RfaW0gRGVzdGluYXRpb24gaW1hZ2UgcmVzb3VyY2UuCiAqIEBwYXJhbSByZXNvdXJjZSAkc3JjX2ltIFNvdXJjZSBpbWFnZSByZXNvdXJjZS4KICogQHBhcmFtIGludCAkZHN0X3ggeC1jb29yZGluYXRlIG9mIGRlc3RpbmF0aW9uIHBvaW50LgogKiBAcGFyYW0gaW50ICRkc3RfeSB5LWNvb3JkaW5hdGUgb2YgZGVzdGluYXRpb24gcG9pbnQuCiAqIEBwYXJhbSBpbnQgJHNyY194IHgtY29vcmRpbmF0ZSBvZiBzb3VyY2UgcG9pbnQuCiAqIEBwYXJhbSBpbnQgJHNyY195IHktY29vcmRpbmF0ZSBvZiBzb3VyY2UgcG9pbnQuCiAqIEBwYXJhbSBpbnQgJHNyY193IFNvdXJjZSB3aWR0aC4KICogQHBhcmFtIGludCAkc3JjX2ggU291cmNlIGhlaWdodC4KICogQHBhcmFtIGludCAkcGN0IFRoZSB0d28gaW1hZ2VzIHdpbGwgYmUgbWVyZ2VkIGFjY29yZGluZyB0byBwY3QKICogd2hpY2ggY2FuIHJhbmdlIGZyb20gMCB0byAxMDAuICBXaGVuIHBjdCA9IDAsCiAqIG5vIGFjdGlvbiBpcyB0YWtlbiwgd2hlbiAxMDAgdGhpcyBmdW5jdGlvbiBiZWhhdmVzIGlkZW50aWNhbGx5CiAqIHRvIGltYWdlY29weSBmb3IgcGFsbGV0ZSBpbWFnZXMsIGV4Y2VwdCBmb3IKICogaWdub3JpbmcgYWxwaGEgY29tcG9uZW50cywgd2hpbGUgaXQgaW1wbGVtZW50cyBhbHBoYSB0cmFuc3BhcmVuY3kKICogZm9yIHRydWUgY29sb3VyIGltYWdlcy4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2Vjb3B5bWVyZ2UoJGRzdF9pbSwgJHNyY19pbSwgaW50ICRkc3RfeCwgaW50ICRkc3RfeSwgaW50ICRzcmNfeCwgaW50ICRzcmNfeSwgaW50ICRzcmNfdywgaW50ICRzcmNfaCwgaW50ICRwY3QpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2Vjb3B5bWVyZ2UoJGRzdF9pbSwgJHNyY19pbSwgJGRzdF94LCAkZHN0X3ksICRzcmNfeCwgJHNyY195LCAkc3JjX3csICRzcmNfaCwgJHBjdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogaW1hZ2Vjb3B5bWVyZ2VncmF5IGNvcHkgYSBwYXJ0IG9mIHNyY19pbSBvbnRvCiAqIGRzdF9pbSBzdGFydGluZyBhdCB0aGUgeCx5IGNvb3JkaW5hdGVzCiAqIHNyY194LCBzcmNfeSAgd2l0aAogKiBhIHdpZHRoIG9mIHNyY193IGFuZCBhIGhlaWdodCBvZgogKiBzcmNfaC4gIFRoZSBwb3J0aW9uIGRlZmluZWQgd2lsbCBiZSBjb3BpZWQKICogb250byB0aGUgeCx5IGNvb3JkaW5hdGVzLCBkc3RfeCBhbmQKICogZHN0X3kuCiAqCiAqIFRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGltYWdlY29weW1lcmdlIGV4Y2VwdAogKiB0aGF0IHdoZW4gbWVyZ2luZyBpdCBwcmVzZXJ2ZXMgdGhlIGh1ZSBvZiB0aGUgc291cmNlIGJ5IGNvbnZlcnRpbmcKICogdGhlIGRlc3RpbmF0aW9uIHBpeGVscyB0byBncmF5IHNjYWxlIGJlZm9yZSB0aGUgY29weSBvcGVyYXRpb24uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZHN0X2ltIERlc3RpbmF0aW9uIGltYWdlIHJlc291cmNlLgogKiBAcGFyYW0gcmVzb3VyY2UgJHNyY19pbSBTb3VyY2UgaW1hZ2UgcmVzb3VyY2UuCiAqIEBwYXJhbSBpbnQgJGRzdF94IHgtY29vcmRpbmF0ZSBvZiBkZXN0aW5hdGlvbiBwb2ludC4KICogQHBhcmFtIGludCAkZHN0X3kgeS1jb29yZGluYXRlIG9mIGRlc3RpbmF0aW9uIHBvaW50LgogKiBAcGFyYW0gaW50ICRzcmNfeCB4LWNvb3JkaW5hdGUgb2Ygc291cmNlIHBvaW50LgogKiBAcGFyYW0gaW50ICRzcmNfeSB5LWNvb3JkaW5hdGUgb2Ygc291cmNlIHBvaW50LgogKiBAcGFyYW0gaW50ICRzcmNfdyBTb3VyY2Ugd2lkdGguCiAqIEBwYXJhbSBpbnQgJHNyY19oIFNvdXJjZSBoZWlnaHQuCiAqIEBwYXJhbSBpbnQgJHBjdCBUaGUgc3JjX2ltIHdpbGwgYmUgY2hhbmdlZCB0byBncmF5c2NhbGUgYWNjb3JkaW5nCiAqIHRvIHBjdCB3aGVyZSAwIGlzIGZ1bGx5IGdyYXlzY2FsZSBhbmQgMTAwIGlzCiAqIHVuY2hhbmdlZC4gV2hlbiBwY3QgPSAxMDAgdGhpcyBmdW5jdGlvbiBiZWhhdmVzCiAqIGlkZW50aWNhbGx5IHRvIGltYWdlY29weSBmb3IgcGFsbGV0ZSBpbWFnZXMsIGV4Y2VwdCBmb3IKICogaWdub3JpbmcgYWxwaGEgY29tcG9uZW50cywgd2hpbGUKICogaXQgaW1wbGVtZW50cyBhbHBoYSB0cmFuc3BhcmVuY3kgZm9yIHRydWUgY29sb3VyIGltYWdlcy4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2Vjb3B5bWVyZ2VncmF5KCRkc3RfaW0sICRzcmNfaW0sIGludCAkZHN0X3gsIGludCAkZHN0X3ksIGludCAkc3JjX3gsIGludCAkc3JjX3ksIGludCAkc3JjX3csIGludCAkc3JjX2gsIGludCAkcGN0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlY29weW1lcmdlZ3JheSgkZHN0X2ltLCAkc3JjX2ltLCAkZHN0X3gsICRkc3RfeSwgJHNyY194LCAkc3JjX3ksICRzcmNfdywgJHNyY19oLCAkcGN0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBpbWFnZWNvcHlyZXNhbXBsZWQgY29waWVzIGEgcmVjdGFuZ3VsYXIKICogcG9ydGlvbiBvZiBvbmUgaW1hZ2UgdG8gYW5vdGhlciBpbWFnZSwgc21vb3RobHkgaW50ZXJwb2xhdGluZyBwaXhlbAogKiB2YWx1ZXMgc28gdGhhdCwgaW4gcGFydGljdWxhciwgcmVkdWNpbmcgdGhlIHNpemUgb2YgYW4gaW1hZ2Ugc3RpbGwKICogcmV0YWlucyBhIGdyZWF0IGRlYWwgb2YgY2xhcml0eS4KICoKICogSW4gb3RoZXIgd29yZHMsIGltYWdlY29weXJlc2FtcGxlZCB3aWxsIHRha2UgYQogKiByZWN0YW5ndWxhciBhcmVhIGZyb20gc3JjX2ltYWdlIG9mIHdpZHRoCiAqIHNyY193IGFuZCBoZWlnaHQgc3JjX2ggYXQKICogcG9zaXRpb24gKHNyY194LHNyY195KQogKiBhbmQgcGxhY2UgaXQgaW4gYSByZWN0YW5ndWxhciBhcmVhIG9mIGRzdF9pbWFnZQogKiBvZiB3aWR0aCBkc3RfdyBhbmQgaGVpZ2h0IGRzdF9oCiAqIGF0IHBvc2l0aW9uIChkc3RfeCxkc3RfeSkuCiAqCiAqIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGNvb3JkaW5hdGVzIGFuZCB3aWR0aCBhbmQgaGVpZ2h0cwogKiBkaWZmZXIsIGFwcHJvcHJpYXRlIHN0cmV0Y2hpbmcgb3Igc2hyaW5raW5nIG9mIHRoZSBpbWFnZSBmcmFnbWVudAogKiB3aWxsIGJlIHBlcmZvcm1lZC4gVGhlIGNvb3JkaW5hdGVzIHJlZmVyIHRvIHRoZSB1cHBlciBsZWZ0CiAqIGNvcm5lci4gIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY29weSByZWdpb25zIHdpdGhpbiB0aGUKICogc2FtZSBpbWFnZSAoaWYgZHN0X2ltYWdlIGlzIHRoZSBzYW1lIGFzCiAqIHNyY19pbWFnZSkgYnV0IGlmIHRoZSByZWdpb25zIG92ZXJsYXAgdGhlCiAqIHJlc3VsdHMgd2lsbCBiZSB1bnByZWRpY3RhYmxlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGRzdF9pbWFnZSBEZXN0aW5hdGlvbiBpbWFnZSByZXNvdXJjZS4KICogQHBhcmFtIHJlc291cmNlICRzcmNfaW1hZ2UgU291cmNlIGltYWdlIHJlc291cmNlLgogKiBAcGFyYW0gaW50ICRkc3RfeCB4LWNvb3JkaW5hdGUgb2YgZGVzdGluYXRpb24gcG9pbnQuCiAqIEBwYXJhbSBpbnQgJGRzdF95IHktY29vcmRpbmF0ZSBvZiBkZXN0aW5hdGlvbiBwb2ludC4KICogQHBhcmFtIGludCAkc3JjX3ggeC1jb29yZGluYXRlIG9mIHNvdXJjZSBwb2ludC4KICogQHBhcmFtIGludCAkc3JjX3kgeS1jb29yZGluYXRlIG9mIHNvdXJjZSBwb2ludC4KICogQHBhcmFtIGludCAkZHN0X3cgRGVzdGluYXRpb24gd2lkdGguCiAqIEBwYXJhbSBpbnQgJGRzdF9oIERlc3RpbmF0aW9uIGhlaWdodC4KICogQHBhcmFtIGludCAkc3JjX3cgU291cmNlIHdpZHRoLgogKiBAcGFyYW0gaW50ICRzcmNfaCBTb3VyY2UgaGVpZ2h0LgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWNvcHlyZXNhbXBsZWQoJGRzdF9pbWFnZSwgJHNyY19pbWFnZSwgaW50ICRkc3RfeCwgaW50ICRkc3RfeSwgaW50ICRzcmNfeCwgaW50ICRzcmNfeSwgaW50ICRkc3RfdywgaW50ICRkc3RfaCwgaW50ICRzcmNfdywgaW50ICRzcmNfaCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWNvcHlyZXNhbXBsZWQoJGRzdF9pbWFnZSwgJHNyY19pbWFnZSwgJGRzdF94LCAkZHN0X3ksICRzcmNfeCwgJHNyY195LCAkZHN0X3csICRkc3RfaCwgJHNyY193LCAkc3JjX2gpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGltYWdlY29weXJlc2l6ZWQgY29waWVzIGEgcmVjdGFuZ3VsYXIKICogcG9ydGlvbiBvZiBvbmUgaW1hZ2UgdG8gYW5vdGhlciBpbWFnZS4KICogZHN0X2ltYWdlIGlzIHRoZSBkZXN0aW5hdGlvbiBpbWFnZSwKICogc3JjX2ltYWdlIGlzIHRoZSBzb3VyY2UgaW1hZ2UgaWRlbnRpZmllci4KICoKICogSW4gb3RoZXIgd29yZHMsIGltYWdlY29weXJlc2l6ZWQgd2lsbCB0YWtlIGEKICogcmVjdGFuZ3VsYXIgYXJlYSBmcm9tIHNyY19pbWFnZSBvZiB3aWR0aAogKiBzcmNfdyBhbmQgaGVpZ2h0IHNyY19oIGF0CiAqIHBvc2l0aW9uIChzcmNfeCxzcmNfeSkKICogYW5kIHBsYWNlIGl0IGluIGEgcmVjdGFuZ3VsYXIgYXJlYSBvZiBkc3RfaW1hZ2UKICogb2Ygd2lkdGggZHN0X3cgYW5kIGhlaWdodCBkc3RfaAogKiBhdCBwb3NpdGlvbiAoZHN0X3gsZHN0X3kpLgogKgogKiBJZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBjb29yZGluYXRlcyBhbmQgd2lkdGggYW5kIGhlaWdodHMKICogZGlmZmVyLCBhcHByb3ByaWF0ZSBzdHJldGNoaW5nIG9yIHNocmlua2luZyBvZiB0aGUgaW1hZ2UgZnJhZ21lbnQKICogd2lsbCBiZSBwZXJmb3JtZWQuIFRoZSBjb29yZGluYXRlcyByZWZlciB0byB0aGUgdXBwZXIgbGVmdAogKiBjb3JuZXIuIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY29weSByZWdpb25zIHdpdGhpbiB0aGUKICogc2FtZSBpbWFnZSAoaWYgZHN0X2ltYWdlIGlzIHRoZSBzYW1lIGFzCiAqIHNyY19pbWFnZSkgYnV0IGlmIHRoZSByZWdpb25zIG92ZXJsYXAgdGhlCiAqIHJlc3VsdHMgd2lsbCBiZSB1bnByZWRpY3RhYmxlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGRzdF9pbWFnZSBEZXN0aW5hdGlvbiBpbWFnZSByZXNvdXJjZS4KICogQHBhcmFtIHJlc291cmNlICRzcmNfaW1hZ2UgU291cmNlIGltYWdlIHJlc291cmNlLgogKiBAcGFyYW0gaW50ICRkc3RfeCB4LWNvb3JkaW5hdGUgb2YgZGVzdGluYXRpb24gcG9pbnQuCiAqIEBwYXJhbSBpbnQgJGRzdF95IHktY29vcmRpbmF0ZSBvZiBkZXN0aW5hdGlvbiBwb2ludC4KICogQHBhcmFtIGludCAkc3JjX3ggeC1jb29yZGluYXRlIG9mIHNvdXJjZSBwb2ludC4KICogQHBhcmFtIGludCAkc3JjX3kgeS1jb29yZGluYXRlIG9mIHNvdXJjZSBwb2ludC4KICogQHBhcmFtIGludCAkZHN0X3cgRGVzdGluYXRpb24gd2lkdGguCiAqIEBwYXJhbSBpbnQgJGRzdF9oIERlc3RpbmF0aW9uIGhlaWdodC4KICogQHBhcmFtIGludCAkc3JjX3cgU291cmNlIHdpZHRoLgogKiBAcGFyYW0gaW50ICRzcmNfaCBTb3VyY2UgaGVpZ2h0LgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWNvcHlyZXNpemVkKCRkc3RfaW1hZ2UsICRzcmNfaW1hZ2UsIGludCAkZHN0X3gsIGludCAkZHN0X3ksIGludCAkc3JjX3gsIGludCAkc3JjX3ksIGludCAkZHN0X3csIGludCAkZHN0X2gsIGludCAkc3JjX3csIGludCAkc3JjX2gpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2Vjb3B5cmVzaXplZCgkZHN0X2ltYWdlLCAkc3JjX2ltYWdlLCAkZHN0X3gsICRkc3RfeSwgJHNyY194LCAkc3JjX3ksICRkc3RfdywgJGRzdF9oLCAkc3JjX3csICRzcmNfaCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogaW1hZ2VjcmVhdGUgcmV0dXJucyBhbiBpbWFnZSBpZGVudGlmaWVyCiAqIHJlcHJlc2VudGluZyBhIGJsYW5rIGltYWdlIG9mIHNwZWNpZmllZCBzaXplLgogKgogKiBJbiBnZW5lcmFsLCB3ZSByZWNvbW1lbmQgdGhlIHVzZSBvZgogKiBpbWFnZWNyZWF0ZXRydWVjb2xvciBpbnN0ZWFkIG9mCiAqIGltYWdlY3JlYXRlIHNvIHRoYXQgaW1hZ2UgcHJvY2Vzc2luZyBvY2N1cnMgb24gdGhlCiAqIGhpZ2hlc3QgcXVhbGl0eSBpbWFnZSBwb3NzaWJsZS4gSWYgeW91IHdhbnQgdG8gb3V0cHV0IGEgcGFsZXR0ZSBpbWFnZSwgdGhlbgogKiBpbWFnZXRydWVjb2xvcnRvcGFsZXR0ZSBzaG91bGQgYmUgY2FsbGVkIGltbWVkaWF0ZWx5CiAqIGJlZm9yZSBzYXZpbmcgdGhlIGltYWdlIHdpdGggaW1hZ2Vwbmcgb3IKICogaW1hZ2VnaWYuCiAqCiAqIEBwYXJhbSBpbnQgJHdpZHRoIFRoZSBpbWFnZSB3aWR0aC4KICogQHBhcmFtIGludCAkaGVpZ2h0IFRoZSBpbWFnZSBoZWlnaHQuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhbiBpbWFnZSByZXNvdXJjZSBpZGVudGlmaWVyIG9uIHN1Y2Nlc3MsIEZBTFNFIG9uIGVycm9ycy4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VjcmVhdGUoaW50ICR3aWR0aCwgaW50ICRoZWlnaHQpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VjcmVhdGUoJHdpZHRoLCAkaGVpZ2h0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGltYWdlY3JlYXRlZnJvbWJtcCByZXR1cm5zIGFuIGltYWdlIGlkZW50aWZpZXIKICogcmVwcmVzZW50aW5nIHRoZSBpbWFnZSBvYnRhaW5lZCBmcm9tIHRoZSBnaXZlbiBmaWxlbmFtZS4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgUGF0aCB0byB0aGUgQk1QIGltYWdlLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYW4gaW1hZ2UgcmVzb3VyY2UgaWRlbnRpZmllciBvbiBzdWNjZXNzLCBGQUxTRSBvbiBlcnJvcnMuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlY3JlYXRlZnJvbWJtcChzdHJpbmcgJGZpbGVuYW1lKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlY3JlYXRlZnJvbWJtcCgkZmlsZW5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQ3JlYXRlIGEgbmV3IGltYWdlIGZyb20gR0QgZmlsZSBvciBVUkwuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFBhdGggdG8gdGhlIEdEIGZpbGUuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhbiBpbWFnZSByZXNvdXJjZSBpZGVudGlmaWVyIG9uIHN1Y2Nlc3MsIEZBTFNFIG9uIGVycm9ycy4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VjcmVhdGVmcm9tZ2Qoc3RyaW5nICRmaWxlbmFtZSkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWNyZWF0ZWZyb21nZCgkZmlsZW5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQ3JlYXRlIGEgbmV3IGltYWdlIGZyb20gR0QyIGZpbGUgb3IgVVJMLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBQYXRoIHRvIHRoZSBHRDIgaW1hZ2UuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhbiBpbWFnZSByZXNvdXJjZSBpZGVudGlmaWVyIG9uIHN1Y2Nlc3MsIEZBTFNFIG9uIGVycm9ycy4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VjcmVhdGVmcm9tZ2QyKHN0cmluZyAkZmlsZW5hbWUpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VjcmVhdGVmcm9tZ2QyKCRmaWxlbmFtZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBDcmVhdGUgYSBuZXcgaW1hZ2UgZnJvbSBhIGdpdmVuIHBhcnQgb2YgR0QyIGZpbGUgb3IgVVJMLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBQYXRoIHRvIHRoZSBHRDIgaW1hZ2UuCiAqIEBwYXJhbSBpbnQgJHNyY1ggeC1jb29yZGluYXRlIG9mIHNvdXJjZSBwb2ludC4KICogQHBhcmFtIGludCAkc3JjWSB5LWNvb3JkaW5hdGUgb2Ygc291cmNlIHBvaW50LgogKiBAcGFyYW0gaW50ICR3aWR0aCBTb3VyY2Ugd2lkdGguCiAqIEBwYXJhbSBpbnQgJGhlaWdodCBTb3VyY2UgaGVpZ2h0LgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYW4gaW1hZ2UgcmVzb3VyY2UgaWRlbnRpZmllciBvbiBzdWNjZXNzLCBGQUxTRSBvbiBlcnJvcnMuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlY3JlYXRlZnJvbWdkMnBhcnQoc3RyaW5nICRmaWxlbmFtZSwgaW50ICRzcmNYLCBpbnQgJHNyY1ksIGludCAkd2lkdGgsIGludCAkaGVpZ2h0KQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlY3JlYXRlZnJvbWdkMnBhcnQoJGZpbGVuYW1lLCAkc3JjWCwgJHNyY1ksICR3aWR0aCwgJGhlaWdodCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBpbWFnZWNyZWF0ZWZyb21naWYgcmV0dXJucyBhbiBpbWFnZSBpZGVudGlmaWVyCiAqIHJlcHJlc2VudGluZyB0aGUgaW1hZ2Ugb2J0YWluZWQgZnJvbSB0aGUgZ2l2ZW4gZmlsZW5hbWUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFBhdGggdG8gdGhlIEdJRiBpbWFnZS4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGFuIGltYWdlIHJlc291cmNlIGlkZW50aWZpZXIgb24gc3VjY2VzcywgRkFMU0Ugb24gZXJyb3JzLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWNyZWF0ZWZyb21naWYoc3RyaW5nICRmaWxlbmFtZSkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWNyZWF0ZWZyb21naWYoJGZpbGVuYW1lKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGltYWdlY3JlYXRlZnJvbWpwZWcgcmV0dXJucyBhbiBpbWFnZSBpZGVudGlmaWVyCiAqIHJlcHJlc2VudGluZyB0aGUgaW1hZ2Ugb2J0YWluZWQgZnJvbSB0aGUgZ2l2ZW4gZmlsZW5hbWUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFBhdGggdG8gdGhlIEpQRUcgaW1hZ2UuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhbiBpbWFnZSByZXNvdXJjZSBpZGVudGlmaWVyIG9uIHN1Y2Nlc3MsIEZBTFNFIG9uIGVycm9ycy4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VjcmVhdGVmcm9tanBlZyhzdHJpbmcgJGZpbGVuYW1lKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlY3JlYXRlZnJvbWpwZWcoJGZpbGVuYW1lKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGltYWdlY3JlYXRlZnJvbXBuZyByZXR1cm5zIGFuIGltYWdlIGlkZW50aWZpZXIKICogcmVwcmVzZW50aW5nIHRoZSBpbWFnZSBvYnRhaW5lZCBmcm9tIHRoZSBnaXZlbiBmaWxlbmFtZS4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgUGF0aCB0byB0aGUgUE5HIGltYWdlLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYW4gaW1hZ2UgcmVzb3VyY2UgaWRlbnRpZmllciBvbiBzdWNjZXNzLCBGQUxTRSBvbiBlcnJvcnMuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlY3JlYXRlZnJvbXBuZyhzdHJpbmcgJGZpbGVuYW1lKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlY3JlYXRlZnJvbXBuZygkZmlsZW5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogaW1hZ2VjcmVhdGVmcm9td2JtcCByZXR1cm5zIGFuIGltYWdlIGlkZW50aWZpZXIKICogcmVwcmVzZW50aW5nIHRoZSBpbWFnZSBvYnRhaW5lZCBmcm9tIHRoZSBnaXZlbiBmaWxlbmFtZS4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgUGF0aCB0byB0aGUgV0JNUCBpbWFnZS4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGFuIGltYWdlIHJlc291cmNlIGlkZW50aWZpZXIgb24gc3VjY2VzcywgRkFMU0Ugb24gZXJyb3JzLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWNyZWF0ZWZyb213Ym1wKHN0cmluZyAkZmlsZW5hbWUpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VjcmVhdGVmcm9td2JtcCgkZmlsZW5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogaW1hZ2VjcmVhdGVmcm9td2VicCByZXR1cm5zIGFuIGltYWdlIGlkZW50aWZpZXIKICogcmVwcmVzZW50aW5nIHRoZSBpbWFnZSBvYnRhaW5lZCBmcm9tIHRoZSBnaXZlbiBmaWxlbmFtZS4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgUGF0aCB0byB0aGUgV2ViUCBpbWFnZS4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGFuIGltYWdlIHJlc291cmNlIGlkZW50aWZpZXIgb24gc3VjY2VzcywgRkFMU0Ugb24gZXJyb3JzLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWNyZWF0ZWZyb213ZWJwKHN0cmluZyAkZmlsZW5hbWUpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VjcmVhdGVmcm9td2VicCgkZmlsZW5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogaW1hZ2VjcmVhdGVmcm9teGJtIHJldHVybnMgYW4gaW1hZ2UgaWRlbnRpZmllcgogKiByZXByZXNlbnRpbmcgdGhlIGltYWdlIG9idGFpbmVkIGZyb20gdGhlIGdpdmVuIGZpbGVuYW1lLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBQYXRoIHRvIHRoZSBYQk0gaW1hZ2UuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhbiBpbWFnZSByZXNvdXJjZSBpZGVudGlmaWVyIG9uIHN1Y2Nlc3MsIEZBTFNFIG9uIGVycm9ycy4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VjcmVhdGVmcm9teGJtKHN0cmluZyAkZmlsZW5hbWUpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VjcmVhdGVmcm9teGJtKCRmaWxlbmFtZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBpbWFnZWNyZWF0ZWZyb214cG0gcmV0dXJucyBhbiBpbWFnZSBpZGVudGlmaWVyCiAqIHJlcHJlc2VudGluZyB0aGUgaW1hZ2Ugb2J0YWluZWQgZnJvbSB0aGUgZ2l2ZW4gZmlsZW5hbWUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFBhdGggdG8gdGhlIFhQTSBpbWFnZS4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGFuIGltYWdlIHJlc291cmNlIGlkZW50aWZpZXIgb24gc3VjY2VzcywgRkFMU0Ugb24gZXJyb3JzLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWNyZWF0ZWZyb214cG0oc3RyaW5nICRmaWxlbmFtZSkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWNyZWF0ZWZyb214cG0oJGZpbGVuYW1lKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGltYWdlY3JlYXRldHJ1ZWNvbG9yIHJldHVybnMgYW4gaW1hZ2UgaWRlbnRpZmllcgogKiByZXByZXNlbnRpbmcgYSBibGFjayBpbWFnZSBvZiB0aGUgc3BlY2lmaWVkIHNpemUuCiAqCiAqIEBwYXJhbSBpbnQgJHdpZHRoIEltYWdlIHdpZHRoLgogKiBAcGFyYW0gaW50ICRoZWlnaHQgSW1hZ2UgaGVpZ2h0LgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYW4gaW1hZ2UgcmVzb3VyY2UgaWRlbnRpZmllciBvbiBzdWNjZXNzLCBGQUxTRSBvbiBlcnJvcnMuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlY3JlYXRldHJ1ZWNvbG9yKGludCAkd2lkdGgsIGludCAkaGVpZ2h0KQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlY3JlYXRldHJ1ZWNvbG9yKCR3aWR0aCwgJGhlaWdodCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBDcm9wcyBhbiBpbWFnZSB0byB0aGUgZ2l2ZW4gcmVjdGFuZ3VsYXIgYXJlYSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0aW5nIGltYWdlLgogKiBUaGUgZ2l2ZW4gaW1hZ2UgaXMgbm90IG1vZGlmaWVkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIGFycmF5ICRyZWN0IFRoZSBjcm9wcGluZyByZWN0YW5nbGUgYXMgYXJyYXkgd2l0aCBrZXlzCiAqIHgsIHksIHdpZHRoIGFuZAogKiBoZWlnaHQuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJuIGNyb3BwZWQgaW1hZ2UgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2Vjcm9wKCRpbWFnZSwgYXJyYXkgJHJlY3QpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2Vjcm9wKCRpbWFnZSwgJHJlY3QpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQXV0b21hdGljYWxseSBjcm9wcyBhbiBpbWFnZSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuCiAqIG1vZGUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gaW50ICRtb2RlIE9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbnN0YW50czoKICogQHBhcmFtIGZsb2F0ICR0aHJlc2hvbGQKICogQHBhcmFtIGludCAkY29sb3IKICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgY3JvcHBlZCBpbWFnZSByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBJZiB0aGUgY29tcGxldGUgaW1hZ2Ugd2FzIGNyb3BwZWQsIGltYWdlY3JvcCByZXR1cm5zIEZBTFNFLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWNyb3BhdXRvKCRpbWFnZSwgaW50ICRtb2RlID0gSU1HX0NST1BfREVGQVVMVCwgZmxvYXQgJHRocmVzaG9sZCA9IC41LCBpbnQgJGNvbG9yID0gLTEpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2Vjcm9wYXV0bygkaW1hZ2UsICRtb2RlLCAkdGhyZXNob2xkLCAkY29sb3IpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLiBVc2UgY29tYmluYXRpb24gb2YKICogaW1hZ2VzZXRzdHlsZSBhbmQgaW1hZ2VsaW5lCiAqIGluc3RlYWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gaW50ICR4MSBVcHBlciBsZWZ0IHggY29vcmRpbmF0ZS4KICogQHBhcmFtIGludCAkeTEgVXBwZXIgbGVmdCB5IGNvb3JkaW5hdGUgMCwgMCBpcyB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBpbWFnZS4KICogQHBhcmFtIGludCAkeDIgQm90dG9tIHJpZ2h0IHggY29vcmRpbmF0ZS4KICogQHBhcmFtIGludCAkeTIgQm90dG9tIHJpZ2h0IHkgY29vcmRpbmF0ZS4KICogQHBhcmFtIGludCAkY29sb3IgVGhlIGZpbGwgY29sb3IuIEEgY29sb3IgaWRlbnRpZmllciBjcmVhdGVkIHdpdGggaW1hZ2Vjb2xvcmFsbG9jYXRlLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWRhc2hlZGxpbmUoJGltYWdlLCBpbnQgJHgxLCBpbnQgJHkxLCBpbnQgJHgyLCBpbnQgJHkyLCBpbnQgJGNvbG9yKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlZGFzaGVkbGluZSgkaW1hZ2UsICR4MSwgJHkxLCAkeDIsICR5MiwgJGNvbG9yKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBpbWFnZWRlc3Ryb3kgZnJlZXMgYW55IG1lbW9yeSBhc3NvY2lhdGVkCiAqIHdpdGggaW1hZ2UgaW1hZ2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWRlc3Ryb3koJGltYWdlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlZGVzdHJveSgkaW1hZ2UpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERyYXdzIGFuIGVsbGlwc2UgY2VudGVyZWQgYXQgdGhlIHNwZWNpZmllZCBjb29yZGluYXRlcy4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBpbnQgJGN4IHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyLgogKiBAcGFyYW0gaW50ICRjeSB5LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlci4KICogQHBhcmFtIGludCAkd2lkdGggVGhlIGVsbGlwc2Ugd2lkdGguCiAqIEBwYXJhbSBpbnQgJGhlaWdodCBUaGUgZWxsaXBzZSBoZWlnaHQuCiAqIEBwYXJhbSBpbnQgJGNvbG9yIFRoZSBjb2xvciBvZiB0aGUgZWxsaXBzZS4gQSBjb2xvciBpZGVudGlmaWVyIGNyZWF0ZWQgd2l0aCBpbWFnZWNvbG9yYWxsb2NhdGUuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlZWxsaXBzZSgkaW1hZ2UsIGludCAkY3gsIGludCAkY3ksIGludCAkd2lkdGgsIGludCAkaGVpZ2h0LCBpbnQgJGNvbG9yKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlZWxsaXBzZSgkaW1hZ2UsICRjeCwgJGN5LCAkd2lkdGgsICRoZWlnaHQsICRjb2xvcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUGVyZm9ybXMgYSBmbG9vZCBmaWxsIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBjb29yZGluYXRlICh0b3AgbGVmdCBpcyAwLCAwKQogKiB3aXRoIHRoZSBnaXZlbiBjb2xvciBpbiB0aGUKICogaW1hZ2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gaW50ICR4IHgtY29vcmRpbmF0ZSBvZiBzdGFydCBwb2ludC4KICogQHBhcmFtIGludCAkeSB5LWNvb3JkaW5hdGUgb2Ygc3RhcnQgcG9pbnQuCiAqIEBwYXJhbSBpbnQgJGNvbG9yIFRoZSBmaWxsIGNvbG9yLiBBIGNvbG9yIGlkZW50aWZpZXIgY3JlYXRlZCB3aXRoIGltYWdlY29sb3JhbGxvY2F0ZS4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VmaWxsKCRpbWFnZSwgaW50ICR4LCBpbnQgJHksIGludCAkY29sb3IpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VmaWxsKCRpbWFnZSwgJHgsICR5LCAkY29sb3IpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERyYXdzIGEgcGFydGlhbCBhcmMgY2VudGVyZWQgYXQgdGhlIHNwZWNpZmllZCBjb29yZGluYXRlIGluIHRoZQogKiBnaXZlbiBpbWFnZS4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBpbnQgJGN4IHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyLgogKiBAcGFyYW0gaW50ICRjeSB5LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlci4KICogQHBhcmFtIGludCAkd2lkdGggVGhlIGFyYyB3aWR0aC4KICogQHBhcmFtIGludCAkaGVpZ2h0IFRoZSBhcmMgaGVpZ2h0LgogKiBAcGFyYW0gaW50ICRzdGFydCBUaGUgYXJjIHN0YXJ0IGFuZ2xlLCBpbiBkZWdyZWVzLgogKiBAcGFyYW0gaW50ICRlbmQgVGhlIGFyYyBlbmQgYW5nbGUsIGluIGRlZ3JlZXMuCiAqIDDCsCBpcyBsb2NhdGVkIGF0IHRoZSB0aHJlZS1vJ2Nsb2NrIHBvc2l0aW9uLCBhbmQgdGhlIGFyYyBpcyBkcmF3bgogKiBjbG9ja3dpc2UuCiAqIEBwYXJhbSBpbnQgJGNvbG9yIEEgY29sb3IgaWRlbnRpZmllciBjcmVhdGVkIHdpdGggaW1hZ2Vjb2xvcmFsbG9jYXRlLgogKiBAcGFyYW0gaW50ICRzdHlsZSBBIGJpdHdpc2UgT1Igb2YgdGhlIGZvbGxvd2luZyBwb3NzaWJpbGl0aWVzOgogKgogKiBJTUdfQVJDX1BJRQogKiBJTUdfQVJDX0NIT1JECiAqIElNR19BUkNfTk9GSUxMCiAqIElNR19BUkNfRURHRUQKICoKICogSU1HX0FSQ19QSUUgYW5kIElNR19BUkNfQ0hPUkQgYXJlCiAqIG11dHVhbGx5IGV4Y2x1c2l2ZTsgSU1HX0FSQ19DSE9SRCBqdXN0CiAqIGNvbm5lY3RzIHRoZSBzdGFydGluZyBhbmQgZW5kaW5nIGFuZ2xlcyB3aXRoIGEgc3RyYWlnaHQgbGluZSwgd2hpbGUKICogSU1HX0FSQ19QSUUgcHJvZHVjZXMgYSByb3VuZGVkIGVkZ2UuCiAqIElNR19BUkNfTk9GSUxMIGluZGljYXRlcyB0aGF0IHRoZSBhcmMKICogb3IgY2hvcmQgc2hvdWxkIGJlIG91dGxpbmVkLCBub3QgZmlsbGVkLiAgSU1HX0FSQ19FREdFRCwKICogdXNlZCB0b2dldGhlciB3aXRoIElNR19BUkNfTk9GSUxMLCBpbmRpY2F0ZXMgdGhhdCB0aGUKICogYmVnaW5uaW5nIGFuZCBlbmRpbmcgYW5nbGVzIHNob3VsZCBiZSBjb25uZWN0ZWQgdG8gdGhlIGNlbnRlciAtIHRoaXMgaXMgYQogKiBnb29kIHdheSB0byBvdXRsaW5lIChyYXRoZXIgdGhhbiBmaWxsKSBhICdwaWUgc2xpY2UnLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWZpbGxlZGFyYygkaW1hZ2UsIGludCAkY3gsIGludCAkY3ksIGludCAkd2lkdGgsIGludCAkaGVpZ2h0LCBpbnQgJHN0YXJ0LCBpbnQgJGVuZCwgaW50ICRjb2xvciwgaW50ICRzdHlsZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWZpbGxlZGFyYygkaW1hZ2UsICRjeCwgJGN5LCAkd2lkdGgsICRoZWlnaHQsICRzdGFydCwgJGVuZCwgJGNvbG9yLCAkc3R5bGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERyYXdzIGFuIGVsbGlwc2UgY2VudGVyZWQgYXQgdGhlIHNwZWNpZmllZCBjb29yZGluYXRlIG9uIHRoZSBnaXZlbgogKiBpbWFnZS4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBpbnQgJGN4IHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyLgogKiBAcGFyYW0gaW50ICRjeSB5LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlci4KICogQHBhcmFtIGludCAkd2lkdGggVGhlIGVsbGlwc2Ugd2lkdGguCiAqIEBwYXJhbSBpbnQgJGhlaWdodCBUaGUgZWxsaXBzZSBoZWlnaHQuCiAqIEBwYXJhbSBpbnQgJGNvbG9yIFRoZSBmaWxsIGNvbG9yLiBBIGNvbG9yIGlkZW50aWZpZXIgY3JlYXRlZCB3aXRoIGltYWdlY29sb3JhbGxvY2F0ZS4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VmaWxsZWRlbGxpcHNlKCRpbWFnZSwgaW50ICRjeCwgaW50ICRjeSwgaW50ICR3aWR0aCwgaW50ICRoZWlnaHQsIGludCAkY29sb3IpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VmaWxsZWRlbGxpcHNlKCRpbWFnZSwgJGN4LCAkY3ksICR3aWR0aCwgJGhlaWdodCwgJGNvbG9yKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBpbWFnZWZpbGxlZHBvbHlnb24gY3JlYXRlcyBhIGZpbGxlZCBwb2x5Z29uCiAqIGluIHRoZSBnaXZlbiBpbWFnZS4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBhcnJheSAkcG9pbnRzIEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHggYW5kIHkKICogY29vcmRpbmF0ZXMgb2YgdGhlIHBvbHlnb25zIHZlcnRpY2VzIGNvbnNlY3V0aXZlbHkuCiAqIEBwYXJhbSBpbnQgJG51bV9wb2ludHMgVG90YWwgbnVtYmVyIG9mIHBvaW50cyAodmVydGljZXMpLCB3aGljaCBtdXN0IGJlIGF0IGxlYXN0IDMuCiAqIEBwYXJhbSBpbnQgJGNvbG9yIEEgY29sb3IgaWRlbnRpZmllciBjcmVhdGVkIHdpdGggaW1hZ2Vjb2xvcmFsbG9jYXRlLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWZpbGxlZHBvbHlnb24oJGltYWdlLCBhcnJheSAkcG9pbnRzLCBpbnQgJG51bV9wb2ludHMsIGludCAkY29sb3IpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VmaWxsZWRwb2x5Z29uKCRpbWFnZSwgJHBvaW50cywgJG51bV9wb2ludHMsICRjb2xvcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ3JlYXRlcyBhIHJlY3RhbmdsZSBmaWxsZWQgd2l0aCBjb2xvciBpbiB0aGUgZ2l2ZW4KICogaW1hZ2Ugc3RhcnRpbmcgYXQgcG9pbnQgMSBhbmQgZW5kaW5nIGF0IHBvaW50IDIuCiAqIDAsIDAgaXMgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgaW1hZ2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gaW50ICR4MSB4LWNvb3JkaW5hdGUgZm9yIHBvaW50IDEuCiAqIEBwYXJhbSBpbnQgJHkxIHktY29vcmRpbmF0ZSBmb3IgcG9pbnQgMS4KICogQHBhcmFtIGludCAkeDIgeC1jb29yZGluYXRlIGZvciBwb2ludCAyLgogKiBAcGFyYW0gaW50ICR5MiB5LWNvb3JkaW5hdGUgZm9yIHBvaW50IDIuCiAqIEBwYXJhbSBpbnQgJGNvbG9yIFRoZSBmaWxsIGNvbG9yLiBBIGNvbG9yIGlkZW50aWZpZXIgY3JlYXRlZCB3aXRoIGltYWdlY29sb3JhbGxvY2F0ZS4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VmaWxsZWRyZWN0YW5nbGUoJGltYWdlLCBpbnQgJHgxLCBpbnQgJHkxLCBpbnQgJHgyLCBpbnQgJHkyLCBpbnQgJGNvbG9yKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlZmlsbGVkcmVjdGFuZ2xlKCRpbWFnZSwgJHgxLCAkeTEsICR4MiwgJHkyLCAkY29sb3IpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGltYWdlZmlsbHRvYm9yZGVyIHBlcmZvcm1zIGEgZmxvb2QgZmlsbAogKiB3aG9zZSBib3JkZXIgY29sb3IgaXMgZGVmaW5lZCBieSBib3JkZXIuCiAqIFRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhlIGZpbGwgaXMgeCwKICogeSAodG9wIGxlZnQgaXMgMCwgMCkgYW5kIHRoZSByZWdpb24gaXMKICogZmlsbGVkIHdpdGggY29sb3IgY29sb3IuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gaW50ICR4IHgtY29vcmRpbmF0ZSBvZiBzdGFydC4KICogQHBhcmFtIGludCAkeSB5LWNvb3JkaW5hdGUgb2Ygc3RhcnQuCiAqIEBwYXJhbSBpbnQgJGJvcmRlciBUaGUgYm9yZGVyIGNvbG9yLiBBIGNvbG9yIGlkZW50aWZpZXIgY3JlYXRlZCB3aXRoIGltYWdlY29sb3JhbGxvY2F0ZS4KICogQHBhcmFtIGludCAkY29sb3IgVGhlIGZpbGwgY29sb3IuIEEgY29sb3IgaWRlbnRpZmllciBjcmVhdGVkIHdpdGggaW1hZ2Vjb2xvcmFsbG9jYXRlLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWZpbGx0b2JvcmRlcigkaW1hZ2UsIGludCAkeCwgaW50ICR5LCBpbnQgJGJvcmRlciwgaW50ICRjb2xvcik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWZpbGx0b2JvcmRlcigkaW1hZ2UsICR4LCAkeSwgJGJvcmRlciwgJGNvbG9yKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBpbWFnZWZpbHRlciBhcHBsaWVzIHRoZSBnaXZlbiBmaWx0ZXIKICogZmlsdGVydHlwZSBvbiB0aGUgaW1hZ2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gaW50ICRmaWx0ZXJ0eXBlIGZpbHRlcnR5cGUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogKgogKgogKgogKiBJTUdfRklMVEVSX05FR0FURTogUmV2ZXJzZXMgYWxsIGNvbG9ycyBvZgogKiB0aGUgaW1hZ2UuCiAqCiAqCiAqCiAqCiAqIElNR19GSUxURVJfR1JBWVNDQUxFOiBDb252ZXJ0cyB0aGUgaW1hZ2UgaW50bwogKiBncmF5c2NhbGUgYnkgY2hhbmdpbmcgdGhlIHJlZCwgZ3JlZW4gYW5kIGJsdWUgY29tcG9uZW50cyB0byB0aGVpcgogKiB3ZWlnaHRlZCBzdW0gdXNpbmcgdGhlIHNhbWUgY29lZmZpY2llbnRzIGFzIHRoZSBSRUMuNjAxIGx1bWEgKFknKQogKiBjYWxjdWxhdGlvbi4gVGhlIGFscGhhIGNvbXBvbmVudHMgYXJlIHJldGFpbmVkLiBGb3IgcGFsZXR0ZSBpbWFnZXMgdGhlCiAqIHJlc3VsdCBtYXkgZGlmZmVyIGR1ZSB0byBwYWxldHRlIGxpbWl0YXRpb25zLgogKgogKgogKgogKgogKiBJTUdfRklMVEVSX0JSSUdIVE5FU1M6IENoYW5nZXMgdGhlIGJyaWdodG5lc3MKICogb2YgdGhlIGltYWdlLiBVc2UgYXJnMSB0byBzZXQgdGhlIGxldmVsIG9mCiAqIGJyaWdodG5lc3MuIFRoZSByYW5nZSBmb3IgdGhlIGJyaWdodG5lc3MgaXMgLTI1NSB0byAyNTUuCiAqCiAqCiAqCiAqCiAqIElNR19GSUxURVJfQ09OVFJBU1Q6IENoYW5nZXMgdGhlIGNvbnRyYXN0IG9mCiAqIHRoZSBpbWFnZS4gVXNlIGFyZzEgdG8gc2V0IHRoZSBsZXZlbCBvZgogKiBjb250cmFzdC4KICoKICoKICoKICoKICogSU1HX0ZJTFRFUl9DT0xPUklaRTogTGlrZQogKiBJTUdfRklMVEVSX0dSQVlTQ0FMRSwgZXhjZXB0IHlvdSBjYW4gc3BlY2lmeSB0aGUKICogY29sb3IuIFVzZSBhcmcxLCBhcmcyIGFuZAogKiBhcmczIGluIHRoZSBmb3JtIG9mCiAqIHJlZCwgZ3JlZW4sCiAqIGJsdWUgYW5kIGFyZzQgZm9yIHRoZQogKiBhbHBoYSBjaGFubmVsLiBUaGUgcmFuZ2UgZm9yIGVhY2ggY29sb3IgaXMgMCB0byAyNTUuCiAqCiAqCiAqCiAqCiAqIElNR19GSUxURVJfRURHRURFVEVDVDogVXNlcyBlZGdlIGRldGVjdGlvbiB0bwogKiBoaWdobGlnaHQgdGhlIGVkZ2VzIGluIHRoZSBpbWFnZS4KICoKICoKICoKICoKICogSU1HX0ZJTFRFUl9FTUJPU1M6IEVtYm9zc2VzIHRoZSBpbWFnZS4KICoKICoKICoKICoKICogSU1HX0ZJTFRFUl9HQVVTU0lBTl9CTFVSOiBCbHVycyB0aGUgaW1hZ2UgdXNpbmcKICogdGhlIEdhdXNzaWFuIG1ldGhvZC4KICoKICoKICoKICoKICogSU1HX0ZJTFRFUl9TRUxFQ1RJVkVfQkxVUjogQmx1cnMgdGhlIGltYWdlLgogKgogKgogKgogKgogKiBJTUdfRklMVEVSX01FQU5fUkVNT1ZBTDogVXNlcyBtZWFuIHJlbW92YWwgdG8KICogYWNoaWV2ZSBhICJza2V0Y2h5IiBlZmZlY3QuCiAqCiAqCiAqCiAqCiAqIElNR19GSUxURVJfU01PT1RIOiBNYWtlcyB0aGUgaW1hZ2Ugc21vb3RoZXIuCiAqIFVzZSBhcmcxIHRvIHNldCB0aGUgbGV2ZWwgb2Ygc21vb3RobmVzcy4KICoKICoKICoKICoKICogSU1HX0ZJTFRFUl9QSVhFTEFURTogQXBwbGllcyBwaXhlbGF0aW9uIGVmZmVjdAogKiB0byB0aGUgaW1hZ2UsIHVzZSBhcmcxIHRvIHNldCB0aGUgYmxvY2sgc2l6ZQogKiBhbmQgYXJnMiB0byBzZXQgdGhlIHBpeGVsYXRpb24gZWZmZWN0IG1vZGUuCiAqCiAqCiAqCiAqCiAqIElNR19GSUxURVJfU0NBVFRFUjogQXBwbGllcyBzY2F0dGVyIGVmZmVjdAogKiB0byB0aGUgaW1hZ2UsIHVzZSBhcmcxIGFuZAogKiBhcmcyIHRvIGRlZmluZSB0aGUgZWZmZWN0IHN0cmVuZ3RoIGFuZAogKiBhZGRpdGlvbmFsbHkgYXJnMyB0byBvbmx5IGFwcGx5IHRoZQogKiBvbiBzZWxlY3QgcGl4ZWwgY29sb3JzLgogKgogKgogKgogKiBAcGFyYW0gaW50ICRhcmcxCiAqCiAqCiAqIElNR19GSUxURVJfQlJJR0hUTkVTUzogQnJpZ2h0bmVzcyBsZXZlbC4KICoKICoKICoKICoKICogSU1HX0ZJTFRFUl9DT05UUkFTVDogQ29udHJhc3QgbGV2ZWwuCiAqCiAqCiAqCiAqCiAqIElNR19GSUxURVJfQ09MT1JJWkU6IFZhbHVlIG9mIHJlZCBjb21wb25lbnQuCiAqCiAqCiAqCiAqCiAqIElNR19GSUxURVJfU01PT1RIOiBTbW9vdGhuZXNzIGxldmVsLgogKgogKgogKgogKgogKiBJTUdfRklMVEVSX1BJWEVMQVRFOiBCbG9jayBzaXplIGluIHBpeGVscy4KICoKICoKICoKICoKICogSU1HX0ZJTFRFUl9TQ0FUVEVSOiBFZmZlY3Qgc3Vic3RyYWN0aW9uIGxldmVsLgogKiBUaGlzIG11c3Qgbm90IGJlIGhpZ2hlciBvciBlcXVhbCB0byB0aGUgYWRkaXRpb24gbGV2ZWwgc2V0IHdpdGgKICogYXJnMi4KICoKICoKICoKICogQHBhcmFtIGludCAkYXJnMgogKgogKgogKiBJTUdfRklMVEVSX0NPTE9SSVpFOiBWYWx1ZSBvZiBncmVlbiBjb21wb25lbnQuCiAqCiAqCiAqCiAqCiAqIElNR19GSUxURVJfUElYRUxBVEU6IFdoZXRoZXIgdG8gdXNlIGFkdmFuY2VkIHBpeGVsYXRpb24KICogZWZmZWN0IG9yIG5vdCAoZGVmYXVsdHMgdG8gRkFMU0UpLgogKgogKgogKgogKgogKiBJTUdfRklMVEVSX1NDQVRURVI6IEVmZmVjdCBhZGRpdGlvbiBsZXZlbC4KICoKICoKICoKICogQHBhcmFtIGludCAkYXJnMwogKgogKgogKiBJTUdfRklMVEVSX0NPTE9SSVpFOiBWYWx1ZSBvZiBibHVlIGNvbXBvbmVudC4KICoKICoKICoKICoKICogSU1HX0ZJTFRFUl9TQ0FUVEVSOiBPcHRpb25hbCBhcnJheSBpbmRleGVkIGNvbG9yIHZhbHVlcwogKiB0byBhcHBseSBlZmZlY3QgYXQuCiAqCiAqCiAqCiAqIEBwYXJhbSBpbnQgJGFyZzQKICoKICoKICogSU1HX0ZJTFRFUl9DT0xPUklaRTogQWxwaGEgY2hhbm5lbCwgQSB2YWx1ZQogKiBiZXR3ZWVuIDAgYW5kIDEyNy4gMCBpbmRpY2F0ZXMgY29tcGxldGVseSBvcGFxdWUgd2hpbGUgMTI3IGluZGljYXRlcwogKiBjb21wbGV0ZWx5IHRyYW5zcGFyZW50LgogKgogKgogKgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWZpbHRlcigkaW1hZ2UsIGludCAkZmlsdGVydHlwZSwgaW50ICRhcmcxID0gbnVsbCwgaW50ICRhcmcyID0gbnVsbCwgaW50ICRhcmczID0gbnVsbCwgaW50ICRhcmc0ID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRhcmc0ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpbWFnZWZpbHRlcigkaW1hZ2UsICRmaWx0ZXJ0eXBlLCAkYXJnMSwgJGFyZzIsICRhcmczLCAkYXJnNCk7CiAgICB9IGVsc2VpZiAoJGFyZzMgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGltYWdlZmlsdGVyKCRpbWFnZSwgJGZpbHRlcnR5cGUsICRhcmcxLCAkYXJnMiwgJGFyZzMpOwogICAgfSBlbHNlaWYgKCRhcmcyICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpbWFnZWZpbHRlcigkaW1hZ2UsICRmaWx0ZXJ0eXBlLCAkYXJnMSwgJGFyZzIpOwogICAgfSBlbHNlaWYgKCRhcmcxICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpbWFnZWZpbHRlcigkaW1hZ2UsICRmaWx0ZXJ0eXBlLCAkYXJnMSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcaW1hZ2VmaWx0ZXIoJGltYWdlLCAkZmlsdGVydHlwZSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRmxpcHMgdGhlIGltYWdlIGltYWdlIHVzaW5nIHRoZSBnaXZlbgogKiBtb2RlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIGludCAkbW9kZSBGbGlwIG1vZGUsIHRoaXMgY2FuIGJlIG9uZSBvZiB0aGUgSU1HX0ZMSVBfKiBjb25zdGFudHM6CiAqCiAqCiAqCiAqCiAqCiAqIENvbnN0YW50CiAqIE1lYW5pbmcKICoKICoKICoKICoKICogSU1HX0ZMSVBfSE9SSVpPTlRBTAogKgogKiBGbGlwcyB0aGUgaW1hZ2UgaG9yaXpvbnRhbGx5LgogKgogKgogKgogKiBJTUdfRkxJUF9WRVJUSUNBTAogKgogKiBGbGlwcyB0aGUgaW1hZ2UgdmVydGljYWxseS4KICoKICoKICoKICogSU1HX0ZMSVBfQk9USAogKgogKiBGbGlwcyB0aGUgaW1hZ2UgYm90aCBob3Jpem9udGFsbHkgYW5kIHZlcnRpY2FsbHkuCiAqCiAqCiAqCiAqCiAqCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlZmxpcCgkaW1hZ2UsIGludCAkbW9kZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWZsaXAoJGltYWdlLCAkbW9kZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQXBwbGllcyBnYW1tYSBjb3JyZWN0aW9uIHRvIHRoZSBnaXZlbiBnZCBpbWFnZQogKiBnaXZlbiBhbiBpbnB1dCBhbmQgYW4gb3V0cHV0IGdhbW1hLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIGZsb2F0ICRpbnB1dGdhbW1hIFRoZSBpbnB1dCBnYW1tYS4KICogQHBhcmFtIGZsb2F0ICRvdXRwdXRnYW1tYSBUaGUgb3V0cHV0IGdhbW1hLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWdhbW1hY29ycmVjdCgkaW1hZ2UsIGZsb2F0ICRpbnB1dGdhbW1hLCBmbG9hdCAkb3V0cHV0Z2FtbWEpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VnYW1tYWNvcnJlY3QoJGltYWdlLCAkaW5wdXRnYW1tYSwgJG91dHB1dGdhbW1hKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBPdXRwdXRzIGEgR0QgaW1hZ2UgdG8gdGhlIGdpdmVuIHRvLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIG1peGVkICR0byBUaGUgcGF0aCBvciBhbiBvcGVuIHN0cmVhbSByZXNvdXJjZSAod2hpY2ggaXMgYXV0b21hdGljYWxseSBiZWluZyBjbG9zZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zKSB0byBzYXZlIHRoZSBmaWxlIHRvLiBJZiBub3Qgc2V0IG9yIE5VTEwsIHRoZSByYXcgaW1hZ2Ugc3RyZWFtIHdpbGwgYmUgb3V0cHV0dGVkIGRpcmVjdGx5LgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWdkKCRpbWFnZSwgJHRvID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWdkKCRpbWFnZSwgJHRvKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBPdXRwdXRzIGEgR0QyIGltYWdlIHRvIHRoZSBnaXZlbiB0by4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBtaXhlZCAkdG8gVGhlIHBhdGggb3IgYW4gb3BlbiBzdHJlYW0gcmVzb3VyY2UgKHdoaWNoIGlzIGF1dG9tYXRpY2FsbHkgYmVpbmcgY2xvc2VkIGFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJucykgdG8gc2F2ZSB0aGUgZmlsZSB0by4gSWYgbm90IHNldCBvciBOVUxMLCB0aGUgcmF3IGltYWdlIHN0cmVhbSB3aWxsIGJlIG91dHB1dHRlZCBkaXJlY3RseS4KICogQHBhcmFtIGludCAkY2h1bmtfc2l6ZSBDaHVuayBzaXplLgogKiBAcGFyYW0gaW50ICR0eXBlIEVpdGhlciBJTUdfR0QyX1JBVyBvcgogKiBJTUdfR0QyX0NPTVBSRVNTRUQuIERlZmF1bHQgaXMKICogSU1HX0dEMl9SQVcuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlZ2QyKCRpbWFnZSwgJHRvID0gbnVsbCwgaW50ICRjaHVua19zaXplID0gMTI4LCBpbnQgJHR5cGUgPSBJTUdfR0QyX1JBVyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWdkMigkaW1hZ2UsICR0bywgJGNodW5rX3NpemUsICR0eXBlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBpbWFnZWdpZiBjcmVhdGVzIHRoZSBHSUYKICogZmlsZSBpbiB0byBmcm9tIHRoZSBpbWFnZSBpbWFnZS4gVGhlCiAqIGltYWdlIGFyZ3VtZW50IGlzIHRoZSByZXR1cm4gZnJvbSB0aGUKICogaW1hZ2VjcmVhdGUgb3IgaW1hZ2VjcmVhdGVmcm9tKgogKiBmdW5jdGlvbi4KICoKICogVGhlIGltYWdlIGZvcm1hdCB3aWxsIGJlIEdJRjg3YSB1bmxlc3MgdGhlCiAqIGltYWdlIGhhcyBiZWVuIG1hZGUgdHJhbnNwYXJlbnQgd2l0aAogKiBpbWFnZWNvbG9ydHJhbnNwYXJlbnQsIGluIHdoaWNoIGNhc2UgdGhlCiAqIGltYWdlIGZvcm1hdCB3aWxsIGJlIEdJRjg5YS4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBtaXhlZCAkdG8gVGhlIHBhdGggb3IgYW4gb3BlbiBzdHJlYW0gcmVzb3VyY2UgKHdoaWNoIGlzIGF1dG9tYXRpY2FsbHkgYmVpbmcgY2xvc2VkIGFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJucykgdG8gc2F2ZSB0aGUgZmlsZSB0by4gSWYgbm90IHNldCBvciBOVUxMLCB0aGUgcmF3IGltYWdlIHN0cmVhbSB3aWxsIGJlIG91dHB1dHRlZCBkaXJlY3RseS4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VnaWYoJGltYWdlLCAkdG8gPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlZ2lmKCRpbWFnZSwgJHRvKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBHcmFicyBhIHNjcmVlbnNob3Qgb2YgdGhlIHdob2xlIHNjcmVlbi4KICoKICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGFuIGltYWdlIHJlc291cmNlIGlkZW50aWZpZXIgb24gc3VjY2VzcywgRkFMU0Ugb24gZmFpbHVyZS4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VncmFic2NyZWVuKCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWdyYWJzY3JlZW4oKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEdyYWJzIGEgd2luZG93IG9yIGl0cyBjbGllbnQgYXJlYSB1c2luZyBhIHdpbmRvd3MgaGFuZGxlIChIV05EIHByb3BlcnR5IGluIENPTSBpbnN0YW5jZSkKICoKICogQHBhcmFtIGludCAkd2luZG93X2hhbmRsZSBUaGUgSFdORCB3aW5kb3cgSUQuCiAqIEBwYXJhbSBpbnQgJGNsaWVudF9hcmVhIEluY2x1ZGUgdGhlIGNsaWVudCBhcmVhIG9mIHRoZSBhcHBsaWNhdGlvbiB3aW5kb3cuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhbiBpbWFnZSByZXNvdXJjZSBpZGVudGlmaWVyIG9uIHN1Y2Nlc3MsIEZBTFNFIG9uIGZhaWx1cmUuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlZ3JhYndpbmRvdyhpbnQgJHdpbmRvd19oYW5kbGUsIGludCAkY2xpZW50X2FyZWEgPSAwKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlZ3JhYndpbmRvdygkd2luZG93X2hhbmRsZSwgJGNsaWVudF9hcmVhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGltYWdlanBlZyBjcmVhdGVzIGEgSlBFRyBmaWxlIGZyb20KICogdGhlIGdpdmVuIGltYWdlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIG1peGVkICR0byBUaGUgcGF0aCBvciBhbiBvcGVuIHN0cmVhbSByZXNvdXJjZSAod2hpY2ggaXMgYXV0b21hdGljYWxseSBiZWluZyBjbG9zZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zKSB0byBzYXZlIHRoZSBmaWxlIHRvLiBJZiBub3Qgc2V0IG9yIE5VTEwsIHRoZSByYXcgaW1hZ2Ugc3RyZWFtIHdpbGwgYmUgb3V0cHV0dGVkIGRpcmVjdGx5LgogKiBAcGFyYW0gaW50ICRxdWFsaXR5IHF1YWxpdHkgaXMgb3B0aW9uYWwsIGFuZCByYW5nZXMgZnJvbSAwICh3b3JzdAogKiBxdWFsaXR5LCBzbWFsbGVyIGZpbGUpIHRvIDEwMCAoYmVzdCBxdWFsaXR5LCBiaWdnZXN0IGZpbGUpLiBUaGUKICogZGVmYXVsdCAoLTEpIHVzZXMgdGhlIGRlZmF1bHQgSUpHIHF1YWxpdHkgdmFsdWUgKGFib3V0IDc1KS4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VqcGVnKCRpbWFnZSwgJHRvID0gbnVsbCwgaW50ICRxdWFsaXR5ID0gLTEpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VqcGVnKCRpbWFnZSwgJHRvLCAkcXVhbGl0eSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0IHRoZSBhbHBoYSBibGVuZGluZyBmbGFnIHRvIHVzZSBsYXllcmluZyBlZmZlY3RzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIGludCAkZWZmZWN0IE9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbnN0YW50czoKICoKICoKICogSU1HX0VGRkVDVF9SRVBMQUNFCiAqCiAqCiAqIFVzZSBwaXhlbCByZXBsYWNlbWVudCAoZXF1aXZhbGVudCBvZiBwYXNzaW5nIFRSVUUgdG8KICogaW1hZ2VhbHBoYWJsZW5kaW5nKQogKgogKgogKgogKgogKiBJTUdfRUZGRUNUX0FMUEhBQkxFTkQKICoKICoKICogVXNlIG5vcm1hbCBwaXhlbCBibGVuZGluZyAoZXF1aXZhbGVudCBvZiBwYXNzaW5nIEZBTFNFIHRvCiAqIGltYWdlYWxwaGFibGVuZGluZykKICoKICoKICoKICoKICogSU1HX0VGRkVDVF9OT1JNQUwKICoKICoKICogU2FtZSBhcyBJTUdfRUZGRUNUX0FMUEhBQkxFTkQuCiAqCiAqCiAqCiAqCiAqIElNR19FRkZFQ1RfT1ZFUkxBWQogKgogKgogKiBPdmVybGF5IGhhcyB0aGUgZWZmZWN0IHRoYXQgYmxhY2sgYmFja2dyb3VuZCBwaXhlbHMgd2lsbCByZW1haW4KICogYmxhY2ssIHdoaXRlIGJhY2tncm91bmQgcGl4ZWxzIHdpbGwgcmVtYWluIHdoaXRlLCBidXQgZ3JleQogKiBiYWNrZ3JvdW5kIHBpeGVscyB3aWxsIHRha2UgdGhlIGNvbG91ciBvZiB0aGUgZm9yZWdyb3VuZCBwaXhlbC4KICoKICoKICoKICoKICogSU1HX0VGRkVDVF9NVUxUSVBMWQogKgogKgogKiBPdmVybGF5cyB3aXRoIGEgbXVsdGlwbHkgZWZmZWN0LgogKgogKgogKgogKgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWxheWVyZWZmZWN0KCRpbWFnZSwgaW50ICRlZmZlY3QpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VsYXllcmVmZmVjdCgkaW1hZ2UsICRlZmZlY3QpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERyYXdzIGEgbGluZSBiZXR3ZWVuIHRoZSB0d28gZ2l2ZW4gcG9pbnRzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIGludCAkeDEgeC1jb29yZGluYXRlIGZvciBmaXJzdCBwb2ludC4KICogQHBhcmFtIGludCAkeTEgeS1jb29yZGluYXRlIGZvciBmaXJzdCBwb2ludC4KICogQHBhcmFtIGludCAkeDIgeC1jb29yZGluYXRlIGZvciBzZWNvbmQgcG9pbnQuCiAqIEBwYXJhbSBpbnQgJHkyIHktY29vcmRpbmF0ZSBmb3Igc2Vjb25kIHBvaW50LgogKiBAcGFyYW0gaW50ICRjb2xvciBUaGUgbGluZSBjb2xvci4gQSBjb2xvciBpZGVudGlmaWVyIGNyZWF0ZWQgd2l0aCBpbWFnZWNvbG9yYWxsb2NhdGUuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlbGluZSgkaW1hZ2UsIGludCAkeDEsIGludCAkeTEsIGludCAkeDIsIGludCAkeTIsIGludCAkY29sb3IpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VsaW5lKCRpbWFnZSwgJHgxLCAkeTEsICR4MiwgJHkyLCAkY29sb3IpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGltYWdlbG9hZGZvbnQgbG9hZHMgYSB1c2VyLWRlZmluZWQgYml0bWFwIGFuZCByZXR1cm5zCiAqIGl0cyBpZGVudGlmaWVyLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlIFRoZSBmb250IGZpbGUgZm9ybWF0IGlzIGN1cnJlbnRseSBiaW5hcnkgYW5kIGFyY2hpdGVjdHVyZQogKiBkZXBlbmRlbnQuICBUaGlzIG1lYW5zIHlvdSBzaG91bGQgZ2VuZXJhdGUgdGhlIGZvbnQgZmlsZXMgb24gdGhlCiAqIHNhbWUgdHlwZSBvZiBDUFUgYXMgdGhlIG1hY2hpbmUgeW91IGFyZSBydW5uaW5nIFBIUCBvbi4KICoKICoKICogRm9udCBmaWxlIGZvcm1hdAogKgogKgogKgogKiBieXRlIHBvc2l0aW9uCiAqIEMgZGF0YSB0eXBlCiAqIGRlc2NyaXB0aW9uCiAqCiAqCiAqCiAqCiAqIGJ5dGUgMC0zCiAqIGludAogKiBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUgZm9udAogKgogKgogKiBieXRlIDQtNwogKiBpbnQKICoKICogdmFsdWUgb2YgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBmb250IChvZnRlbiAzMiBmb3Igc3BhY2UpCiAqCiAqCiAqCiAqIGJ5dGUgOC0xMQogKiBpbnQKICogcGl4ZWwgd2lkdGggb2YgZWFjaCBjaGFyYWN0ZXIKICoKICoKICogYnl0ZSAxMi0xNQogKiBpbnQKICogcGl4ZWwgaGVpZ2h0IG9mIGVhY2ggY2hhcmFjdGVyCiAqCiAqCiAqIGJ5dGUgMTYtCiAqIGNoYXIKICoKICogYXJyYXkgd2l0aCBjaGFyYWN0ZXIgZGF0YSwgb25lIGJ5dGUgcGVyIHBpeGVsIGluIGVhY2gKICogY2hhcmFjdGVyLCBmb3IgYSB0b3RhbCBvZiAobmNoYXJzKndpZHRoKmhlaWdodCkgYnl0ZXMuCiAqCiAqCiAqCiAqCiAqCiAqIEByZXR1cm4gaW50IFRoZSBmb250IGlkZW50aWZpZXIgd2hpY2ggaXMgYWx3YXlzIGJpZ2dlciB0aGFuIDUgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGgKICogYnVpbHQtaW4gZm9udHNzLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWxvYWRmb250KHN0cmluZyAkZmlsZSk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlbG9hZGZvbnQoJGZpbGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogaW1hZ2VvcGVucG9seWdvbiBkcmF3cyBhbiBvcGVuIHBvbHlnb24gb24gdGhlIGdpdmVuCiAqIGltYWdlLiBDb250cmFyeSB0byBpbWFnZXBvbHlnb24sCiAqIG5vIGxpbmUgaXMgZHJhd24gYmV0d2VlbiB0aGUgbGFzdCBhbmQgdGhlIGZpcnN0IHBvaW50LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIGFycmF5ICRwb2ludHMgQW4gYXJyYXkgY29udGFpbmluZyB0aGUgcG9seWdvbidzIHZlcnRpY2VzLCBlLmcuOgogKgogKgogKgogKgogKiBwb2ludHNbMF0KICogPSB4MAogKgogKgogKiBwb2ludHNbMV0KICogPSB5MAogKgogKgogKiBwb2ludHNbMl0KICogPSB4MQogKgogKgogKiBwb2ludHNbM10KICogPSB5MQogKgogKgogKgogKgogKiBAcGFyYW0gaW50ICRudW1fcG9pbnRzIFRvdGFsIG51bWJlciBvZiBwb2ludHMgKHZlcnRpY2VzKSwgd2hpY2ggbXVzdCBiZSBhdCBsZWFzdCAzLgogKiBAcGFyYW0gaW50ICRjb2xvciBBIGNvbG9yIGlkZW50aWZpZXIgY3JlYXRlZCB3aXRoIGltYWdlY29sb3JhbGxvY2F0ZS4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VvcGVucG9seWdvbigkaW1hZ2UsIGFycmF5ICRwb2ludHMsIGludCAkbnVtX3BvaW50cywgaW50ICRjb2xvcik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZW9wZW5wb2x5Z29uKCRpbWFnZSwgJHBvaW50cywgJG51bV9wb2ludHMsICRjb2xvcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogT3V0cHV0cyBvciBzYXZlcyBhIFBORyBpbWFnZSBmcm9tIHRoZSBnaXZlbgogKiBpbWFnZS4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBtaXhlZCAkdG8gVGhlIHBhdGggb3IgYW4gb3BlbiBzdHJlYW0gcmVzb3VyY2UgKHdoaWNoIGlzIGF1dG9tYXRpY2FsbHkgYmVpbmcgY2xvc2VkIGFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJucykgdG8gc2F2ZSB0aGUgZmlsZSB0by4gSWYgbm90IHNldCBvciBOVUxMLCB0aGUgcmF3IGltYWdlIHN0cmVhbSB3aWxsIGJlIG91dHB1dHRlZCBkaXJlY3RseS4KICoKICogTlVMTCBpcyBpbnZhbGlkIGlmIHRoZSBxdWFsaXR5IGFuZAogKiBmaWx0ZXJzIGFyZ3VtZW50cyBhcmUgbm90IHVzZWQuCiAqIEBwYXJhbSBpbnQgJHF1YWxpdHkgQ29tcHJlc3Npb24gbGV2ZWw6IGZyb20gMCAobm8gY29tcHJlc3Npb24pIHRvIDkuCiAqIFRoZSBkZWZhdWx0ICgtMSkgdXNlcyB0aGUgemxpYiBjb21wcmVzc2lvbiBkZWZhdWx0LgogKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlIHpsaWIgbWFudWFsLgogKiBAcGFyYW0gaW50ICRmaWx0ZXJzIEFsbG93cyByZWR1Y2luZyB0aGUgUE5HIGZpbGUgc2l6ZS4gSXQgaXMgYSBiaXRtYXNrIGZpZWxkIHdoaWNoIG1heSBiZQogKiBzZXQgdG8gYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBQTkdfRklMVEVSX1hYWAogKiBjb25zdGFudHMuIFBOR19OT19GSUxURVIgb3IKICogUE5HX0FMTF9GSUxURVJTIG1heSBhbHNvIGJlIHVzZWQgdG8gcmVzcGVjdGl2ZWx5CiAqIGRpc2FibGUgb3IgYWN0aXZhdGUgYWxsIGZpbHRlcnMuCiAqIFRoZSBkZWZhdWx0IHZhbHVlICgtMSkgZGlzYWJsZXMgZmlsdGVyaW5nLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZXBuZygkaW1hZ2UsICR0byA9IG51bGwsIGludCAkcXVhbGl0eSA9IC0xLCBpbnQgJGZpbHRlcnMgPSAtMSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZXBuZygkaW1hZ2UsICR0bywgJHF1YWxpdHksICRmaWx0ZXJzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBpbWFnZXBvbHlnb24gY3JlYXRlcyBhIHBvbHlnb24gaW4gdGhlIGdpdmVuCiAqIGltYWdlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIGFycmF5ICRwb2ludHMgQW4gYXJyYXkgY29udGFpbmluZyB0aGUgcG9seWdvbidzIHZlcnRpY2VzLCBlLmcuOgogKgogKgogKgogKgogKiBwb2ludHNbMF0KICogPSB4MAogKgogKgogKiBwb2ludHNbMV0KICogPSB5MAogKgogKgogKiBwb2ludHNbMl0KICogPSB4MQogKgogKgogKiBwb2ludHNbM10KICogPSB5MQogKgogKgogKgogKgogKiBAcGFyYW0gaW50ICRudW1fcG9pbnRzIFRvdGFsIG51bWJlciBvZiBwb2ludHMgKHZlcnRpY2VzKSwgd2hpY2ggbXVzdCBiZSBhdCBsZWFzdCAzLgogKiBAcGFyYW0gaW50ICRjb2xvciBBIGNvbG9yIGlkZW50aWZpZXIgY3JlYXRlZCB3aXRoIGltYWdlY29sb3JhbGxvY2F0ZS4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2Vwb2x5Z29uKCRpbWFnZSwgYXJyYXkgJHBvaW50cywgaW50ICRudW1fcG9pbnRzLCBpbnQgJGNvbG9yKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlcG9seWdvbigkaW1hZ2UsICRwb2ludHMsICRudW1fcG9pbnRzLCAkY29sb3IpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGltYWdlcmVjdGFuZ2xlIGNyZWF0ZXMgYSByZWN0YW5nbGUgc3RhcnRpbmcgYXQKICogdGhlIHNwZWNpZmllZCBjb29yZGluYXRlcy4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBpbnQgJHgxIFVwcGVyIGxlZnQgeCBjb29yZGluYXRlLgogKiBAcGFyYW0gaW50ICR5MSBVcHBlciBsZWZ0IHkgY29vcmRpbmF0ZQogKiAwLCAwIGlzIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIGltYWdlLgogKiBAcGFyYW0gaW50ICR4MiBCb3R0b20gcmlnaHQgeCBjb29yZGluYXRlLgogKiBAcGFyYW0gaW50ICR5MiBCb3R0b20gcmlnaHQgeSBjb29yZGluYXRlLgogKiBAcGFyYW0gaW50ICRjb2xvciBBIGNvbG9yIGlkZW50aWZpZXIgY3JlYXRlZCB3aXRoIGltYWdlY29sb3JhbGxvY2F0ZS4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VyZWN0YW5nbGUoJGltYWdlLCBpbnQgJHgxLCBpbnQgJHkxLCBpbnQgJHgyLCBpbnQgJHkyLCBpbnQgJGNvbG9yKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlcmVjdGFuZ2xlKCRpbWFnZSwgJHgxLCAkeTEsICR4MiwgJHkyLCAkY29sb3IpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJvdGF0ZXMgdGhlIGltYWdlIGltYWdlIHVzaW5nIHRoZSBnaXZlbgogKiBhbmdsZSBpbiBkZWdyZWVzLgogKgogKiBUaGUgY2VudGVyIG9mIHJvdGF0aW9uIGlzIHRoZSBjZW50ZXIgb2YgdGhlIGltYWdlLCBhbmQgdGhlIHJvdGF0ZWQKICogaW1hZ2UgbWF5IGhhdmUgZGlmZmVyZW50IGRpbWVuc2lvbnMgdGhhbiB0aGUgb3JpZ2luYWwgaW1hZ2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gZmxvYXQgJGFuZ2xlIFJvdGF0aW9uIGFuZ2xlLCBpbiBkZWdyZWVzLiBUaGUgcm90YXRpb24gYW5nbGUgaXMgaW50ZXJwcmV0ZWQgYXMgdGhlCiAqIG51bWJlciBvZiBkZWdyZWVzIHRvIHJvdGF0ZSB0aGUgaW1hZ2UgYW50aWNsb2Nrd2lzZS4KICogQHBhcmFtIGludCAkYmdkX2NvbG9yIFNwZWNpZmllcyB0aGUgY29sb3Igb2YgdGhlIHVuY292ZXJlZCB6b25lIGFmdGVyIHRoZSByb3RhdGlvbgogKiBAcGFyYW0gaW50ICRkdW1teSBUaGlzIHBhcmFtZXRlciBpcyB1bnVzZWQuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhbiBpbWFnZSByZXNvdXJjZSBmb3IgdGhlIHJvdGF0ZWQgaW1hZ2UuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlcm90YXRlKCRpbWFnZSwgZmxvYXQgJGFuZ2xlLCBpbnQgJGJnZF9jb2xvciwgaW50ICRkdW1teSA9IDApCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2Vyb3RhdGUoJGltYWdlLCAkYW5nbGUsICRiZ2RfY29sb3IsICRkdW1teSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBpbWFnZXNhdmVhbHBoYSBzZXRzIHRoZSBmbGFnIHdoaWNoIGRldGVybWluZXMgd2hldGhlciB0byByZXRhaW4KICogZnVsbCBhbHBoYSBjaGFubmVsIGluZm9ybWF0aW9uIChhcyBvcHBvc2VkIHRvIHNpbmdsZS1jb2xvciB0cmFuc3BhcmVuY3kpCiAqIHdoZW4gc2F2aW5nIFBORyBpbWFnZXMuCiAqCiAqIEFscGhhYmxlbmRpbmcgaGFzIHRvIGJlIGRpc2FibGVkIChpbWFnZWFscGhhYmxlbmRpbmcoJGltLCBmYWxzZSkpCiAqIHRvIHJldGFpbiB0aGUgYWxwaGEtY2hhbm5lbCBpbiB0aGUgZmlyc3QgcGxhY2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gYm9vbCAkc2F2ZWZsYWcgV2hldGhlciB0byBzYXZlIHRoZSBhbHBoYSBjaGFubmVsIG9yIG5vdC4gRGVmYXVsdHMgdG8gRkFMU0UuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlc2F2ZWFscGhhKCRpbWFnZSwgYm9vbCAkc2F2ZWZsYWcpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VzYXZlYWxwaGEoJGltYWdlLCAkc2F2ZWZsYWcpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGltYWdlc2NhbGUgc2NhbGVzIGFuIGltYWdlIHVzaW5nIHRoZSBnaXZlbgogKiBpbnRlcnBvbGF0aW9uIGFsZ29yaXRobS4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBpbnQgJG5ld193aWR0aCBUaGUgd2lkdGggdG8gc2NhbGUgdGhlIGltYWdlIHRvLgogKiBAcGFyYW0gaW50ICRuZXdfaGVpZ2h0IFRoZSBoZWlnaHQgdG8gc2NhbGUgdGhlIGltYWdlIHRvLiBJZiBvbWl0dGVkIG9yIG5lZ2F0aXZlLCB0aGUgYXNwZWN0CiAqIHJhdGlvIHdpbGwgYmUgcHJlc2VydmVkLgogKiBAcGFyYW0gaW50ICRtb2RlIE9uZSBvZiBJTUdfTkVBUkVTVF9ORUlHSEJPVVIsCiAqIElNR19CSUxJTkVBUl9GSVhFRCwKICogSU1HX0JJQ1VCSUMsCiAqIElNR19CSUNVQklDX0ZJWEVEIG9yIGFueXRoaW5nIGVsc2UgKHdpbGwgdXNlIHR3bwogKiBwYXNzKS4KICoKICoKICogSU1HX1dFSUdIVEVENCBpcyBub3QgeWV0IHN1cHBvcnRlZC4KICoKICoKICogQHJldHVybiByZXNvdXJjZSBSZXR1cm4gdGhlIHNjYWxlZCBpbWFnZSByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZXNjYWxlKCRpbWFnZSwgaW50ICRuZXdfd2lkdGgsIGludCAkbmV3X2hlaWdodCA9IC0xLCBpbnQgJG1vZGUgPSBJTUdfQklMSU5FQVJfRklYRUQpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VzY2FsZSgkaW1hZ2UsICRuZXdfd2lkdGgsICRuZXdfaGVpZ2h0LCAkbW9kZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBpbWFnZXNldGJydXNoIHNldHMgdGhlIGJydXNoIGltYWdlIHRvIGJlCiAqIHVzZWQgYnkgYWxsIGxpbmUgZHJhd2luZyBmdW5jdGlvbnMgKHN1Y2ggYXMgaW1hZ2VsaW5lCiAqIGFuZCBpbWFnZXBvbHlnb24pIHdoZW4gZHJhd2luZyB3aXRoIHRoZSBzcGVjaWFsCiAqIGNvbG9ycyBJTUdfQ09MT1JfQlJVU0hFRCBvcgogKiBJTUdfQ09MT1JfU1RZTEVEQlJVU0hFRC4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSByZXNvdXJjZSAkYnJ1c2ggQW4gaW1hZ2UgcmVzb3VyY2UuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlc2V0YnJ1c2goJGltYWdlLCAkYnJ1c2gpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VzZXRicnVzaCgkaW1hZ2UsICRicnVzaCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogaW1hZ2VzZXRjbGlwIHNldHMgdGhlIGN1cnJlbnQgY2xpcHBpbmcgcmVjdGFuZ2xlLCBpLmUuCiAqIHRoZSBhcmVhIGJleW9uZCB3aGljaCBubyBwaXhlbHMgd2lsbCBiZSBkcmF3bi4KICoKICogQHBhcmFtIHJlc291cmNlICRpbSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBpbnQgJHgxIFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyIGxlZnQgY29ybmVyLgogKiBAcGFyYW0gaW50ICR5MSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSB1cHBlciBsZWZ0IGNvcm5lci4KICogQHBhcmFtIGludCAkeDIgVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgbG93ZXIgcmlnaHQgY29ybmVyLgogKiBAcGFyYW0gaW50ICR5MiBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBsb3dlciByaWdodCBjb3JuZXIuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlc2V0Y2xpcCgkaW0sIGludCAkeDEsIGludCAkeTEsIGludCAkeDIsIGludCAkeTIpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VzZXRjbGlwKCRpbSwgJHgxLCAkeTEsICR4MiwgJHkyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIHRoZSBpbnRlcnBvbGF0aW9uIG1ldGhvZCwgc2V0dGluZyBhbiBpbnRlcnBvbGF0aW9uIG1ldGhvZCBhZmZlY3RzIHRoZSByZW5kZXJpbmcKICogb2YgdmFyaW91cyBmdW5jdGlvbnMgaW4gR0QsIHN1Y2ggYXMgdGhlIGltYWdlcm90YXRlIGZ1bmN0aW9uLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIGludCAkbWV0aG9kIFRoZSBpbnRlcnBvbGF0aW9uIG1ldGhvZCwgd2hpY2ggY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogKgogKgogKgogKiBJTUdfQkVMTDogQmVsbCBmaWx0ZXIuCiAqCiAqCiAqCiAqCiAqIElNR19CRVNTRUw6IEJlc3NlbCBmaWx0ZXIuCiAqCiAqCiAqCiAqCiAqIElNR19CSUNVQklDOiBCaWN1YmljIGludGVycG9sYXRpb24uCiAqCiAqCiAqCiAqCiAqIElNR19CSUNVQklDX0ZJWEVEOiBGaXhlZCBwb2ludCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYmljdWJpYyBpbnRlcnBvbGF0aW9uLgogKgogKgogKgogKgogKiBJTUdfQklMSU5FQVJfRklYRUQ6IEZpeGVkIHBvaW50IGltcGxlbWVudGF0aW9uIG9mIHRoZSAgYmlsaW5lYXIgaW50ZXJwb2xhdGlvbiAoZGVmYXVsdCAoYWxzbyBvbiBpbWFnZSBjcmVhdGlvbikpLgogKgogKgogKgogKgogKiBJTUdfQkxBQ0tNQU46IEJsYWNrbWFuIHdpbmRvdyBmdW5jdGlvbi4KICoKICoKICoKICoKICogSU1HX0JPWDogQm94IGJsdXIgZmlsdGVyLgogKgogKgogKgogKgogKiBJTUdfQlNQTElORTogU3BsaW5lIGludGVycG9sYXRpb24uCiAqCiAqCiAqCiAqCiAqIElNR19DQVRNVUxMUk9NOiBDdWJpYyBIZXJtaXRlIHNwbGluZSBpbnRlcnBvbGF0aW9uLgogKgogKgogKgogKgogKiBJTUdfR0FVU1NJQU46IEdhdXNzaWFuIGZ1bmN0aW9uLgogKgogKgogKgogKgogKiBJTUdfR0VORVJBTElaRURfQ1VCSUM6IEdlbmVyYWxpemVkIGN1YmljIHNwbGluZSBmcmFjdGFsIGludGVycG9sYXRpb24uCiAqCiAqCiAqCiAqCiAqIElNR19IRVJNSVRFOiBIZXJtaXRlIGludGVycG9sYXRpb24uCiAqCiAqCiAqCiAqCiAqIElNR19IQU1NSU5HOiBIYW1taW5nIGZpbHRlci4KICoKICoKICoKICoKICogSU1HX0hBTk5JTkc6IEhhbm5pbmcgZmlsdGVyLgogKgogKgogKgogKgogKiBJTUdfTUlUQ0hFTEw6IE1pdGNoZWxsIGZpbHRlci4KICoKICoKICoKICoKICogSU1HX1BPV0VSOiBQb3dlciBpbnRlcnBvbGF0aW9uLgogKgogKgogKgogKgogKiBJTUdfUVVBRFJBVElDOiBJbnZlcnNlIHF1YWRyYXRpYyBpbnRlcnBvbGF0aW9uLgogKgogKgogKgogKgogKiBJTUdfU0lOQzogU2luYyBmdW5jdGlvbi4KICoKICoKICoKICoKICogSU1HX05FQVJFU1RfTkVJR0hCT1VSOiBOZWFyZXN0IG5laWdoYm91ciBpbnRlcnBvbGF0aW9uLgogKgogKgogKgogKgogKiBJTUdfV0VJR0hURUQ0OiBXZWlnaHRpbmcgZmlsdGVyLgogKgogKgogKgogKgogKiBJTUdfVFJJQU5HTEU6IFRyaWFuZ2xlIGludGVycG9sYXRpb24uCiAqCiAqCiAqCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlc2V0aW50ZXJwb2xhdGlvbigkaW1hZ2UsIGludCAkbWV0aG9kID0gSU1HX0JJTElORUFSX0ZJWEVEKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlc2V0aW50ZXJwb2xhdGlvbigkaW1hZ2UsICRtZXRob2QpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGltYWdlc2V0cGl4ZWwgZHJhd3MgYSBwaXhlbCBhdCB0aGUgc3BlY2lmaWVkCiAqIGNvb3JkaW5hdGUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gaW50ICR4IHgtY29vcmRpbmF0ZS4KICogQHBhcmFtIGludCAkeSB5LWNvb3JkaW5hdGUuCiAqIEBwYXJhbSBpbnQgJGNvbG9yIEEgY29sb3IgaWRlbnRpZmllciBjcmVhdGVkIHdpdGggaW1hZ2Vjb2xvcmFsbG9jYXRlLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZXNldHBpeGVsKCRpbWFnZSwgaW50ICR4LCBpbnQgJHksIGludCAkY29sb3IpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VzZXRwaXhlbCgkaW1hZ2UsICR4LCAkeSwgJGNvbG9yKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBpbWFnZXNldHN0eWxlIHNldHMgdGhlIHN0eWxlIHRvIGJlIHVzZWQgYnkgYWxsCiAqIGxpbmUgZHJhd2luZyBmdW5jdGlvbnMgKHN1Y2ggYXMgaW1hZ2VsaW5lCiAqIGFuZCBpbWFnZXBvbHlnb24pIHdoZW4gZHJhd2luZyB3aXRoIHRoZSBzcGVjaWFsCiAqIGNvbG9yIElNR19DT0xPUl9TVFlMRUQgb3IgbGluZXMgb2YgaW1hZ2VzIHdpdGggY29sb3IKICogSU1HX0NPTE9SX1NUWUxFREJSVVNIRUQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gYXJyYXkgJHN0eWxlIEFuIGFycmF5IG9mIHBpeGVsIGNvbG9ycy4gWW91IGNhbiB1c2UgdGhlCiAqIElNR19DT0xPUl9UUkFOU1BBUkVOVCBjb25zdGFudCB0byBhZGQgYQogKiB0cmFuc3BhcmVudCBwaXhlbC4KICogTm90ZSB0aGF0IHN0eWxlIG11c3Qgbm90IGJlIGFuIGVtcHR5IGFycmF5LgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZXNldHN0eWxlKCRpbWFnZSwgYXJyYXkgJHN0eWxlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlc2V0c3R5bGUoJGltYWdlLCAkc3R5bGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGltYWdlc2V0dGhpY2tuZXNzIHNldHMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgbGluZXMKICogZHJhd24gd2hlbiBkcmF3aW5nIHJlY3RhbmdsZXMsIHBvbHlnb25zLCBhcmNzIGV0Yy4gdG8KICogdGhpY2tuZXNzIHBpeGVscy4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBpbnQgJHRoaWNrbmVzcyBUaGlja25lc3MsIGluIHBpeGVscy4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VzZXR0aGlja25lc3MoJGltYWdlLCBpbnQgJHRoaWNrbmVzcyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZXNldHRoaWNrbmVzcygkaW1hZ2UsICR0aGlja25lc3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGltYWdlc2V0dGlsZSBzZXRzIHRoZSB0aWxlIGltYWdlIHRvIGJlCiAqIHVzZWQgYnkgYWxsIHJlZ2lvbiBmaWxsaW5nIGZ1bmN0aW9ucyAoc3VjaCBhcyBpbWFnZWZpbGwKICogYW5kIGltYWdlZmlsbGVkcG9seWdvbikgd2hlbiBmaWxsaW5nIHdpdGggdGhlIHNwZWNpYWwKICogY29sb3IgSU1HX0NPTE9SX1RJTEVELgogKgogKiBBIHRpbGUgaXMgYW4gaW1hZ2UgdXNlZCB0byBmaWxsIGFuIGFyZWEgd2l0aCBhIHJlcGVhdGVkIHBhdHRlcm4uIEFueQogKiBHRCBpbWFnZSBjYW4gYmUgdXNlZCBhcyBhIHRpbGUsIGFuZCBieSBzZXR0aW5nIHRoZSB0cmFuc3BhcmVudCBjb2xvciBpbmRleCBvZiB0aGUgdGlsZQogKiBpbWFnZSB3aXRoIGltYWdlY29sb3J0cmFuc3BhcmVudCwgYSB0aWxlIGFsbG93cyBjZXJ0YWluIHBhcnRzCiAqIG9mIHRoZSB1bmRlcmx5aW5nIGFyZWEgdG8gc2hpbmUgdGhyb3VnaCBjYW4gYmUgY3JlYXRlZC4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSByZXNvdXJjZSAkdGlsZSBUaGUgaW1hZ2UgcmVzb3VyY2UgdG8gYmUgdXNlZCBhcyBhIHRpbGUuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlc2V0dGlsZSgkaW1hZ2UsICR0aWxlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlc2V0dGlsZSgkaW1hZ2UsICR0aWxlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBEcmF3cyBhIHN0cmluZyBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gaW50ICRmb250IENhbiBiZSAxLCAyLCAzLCA0LCA1IGZvciBidWlsdC1pbgogKiBmb250cyBpbiBsYXRpbjIgZW5jb2RpbmcgKHdoZXJlIGhpZ2hlciBudW1iZXJzIGNvcnJlc3BvbmRpbmcgdG8gbGFyZ2VyIGZvbnRzKSBvciBhbnkgb2YgeW91cgogKiBvd24gZm9udCBpZGVudGlmaWVycyByZWdpc3RlcmVkIHdpdGggaW1hZ2Vsb2FkZm9udC4KICogQHBhcmFtIGludCAkeCB4LWNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyIGxlZnQgY29ybmVyLgogKiBAcGFyYW0gaW50ICR5IHktY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXIgbGVmdCBjb3JuZXIuCiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyBUaGUgc3RyaW5nIHRvIGJlIHdyaXR0ZW4uCiAqIEBwYXJhbSBpbnQgJGNvbG9yIEEgY29sb3IgaWRlbnRpZmllciBjcmVhdGVkIHdpdGggaW1hZ2Vjb2xvcmFsbG9jYXRlLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZXN0cmluZygkaW1hZ2UsIGludCAkZm9udCwgaW50ICR4LCBpbnQgJHksIHN0cmluZyAkc3RyaW5nLCBpbnQgJGNvbG9yKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlc3RyaW5nKCRpbWFnZSwgJGZvbnQsICR4LCAkeSwgJHN0cmluZywgJGNvbG9yKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBEcmF3cyBhIHN0cmluZyB2ZXJ0aWNhbGx5IGF0IHRoZSBnaXZlbgogKiBjb29yZGluYXRlcy4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBpbnQgJGZvbnQgQ2FuIGJlIDEsIDIsIDMsIDQsIDUgZm9yIGJ1aWx0LWluCiAqIGZvbnRzIGluIGxhdGluMiBlbmNvZGluZyAod2hlcmUgaGlnaGVyIG51bWJlcnMgY29ycmVzcG9uZGluZyB0byBsYXJnZXIgZm9udHMpIG9yIGFueSBvZiB5b3VyCiAqIG93biBmb250IGlkZW50aWZpZXJzIHJlZ2lzdGVyZWQgd2l0aCBpbWFnZWxvYWRmb250LgogKiBAcGFyYW0gaW50ICR4IHgtY29vcmRpbmF0ZSBvZiB0aGUgYm90dG9tIGxlZnQgY29ybmVyLgogKiBAcGFyYW0gaW50ICR5IHktY29vcmRpbmF0ZSBvZiB0aGUgYm90dG9tIGxlZnQgY29ybmVyLgogKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgVGhlIHN0cmluZyB0byBiZSB3cml0dGVuLgogKiBAcGFyYW0gaW50ICRjb2xvciBBIGNvbG9yIGlkZW50aWZpZXIgY3JlYXRlZCB3aXRoIGltYWdlY29sb3JhbGxvY2F0ZS4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VzdHJpbmd1cCgkaW1hZ2UsIGludCAkZm9udCwgaW50ICR4LCBpbnQgJHksIHN0cmluZyAkc3RyaW5nLCBpbnQgJGNvbG9yKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlc3RyaW5ndXAoJGltYWdlLCAkZm9udCwgJHgsICR5LCAkc3RyaW5nLCAkY29sb3IpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJldHVybnMgdGhlIHdpZHRoIG9mIHRoZSBnaXZlbiBpbWFnZSByZXNvdXJjZS4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEByZXR1cm4gaW50IFJldHVybiB0aGUgd2lkdGggb2YgdGhlIGltYWdlcy4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VzeCgkaW1hZ2UpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZXN4KCRpbWFnZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIHRoZSBoZWlnaHQgb2YgdGhlIGdpdmVuIGltYWdlIHJlc291cmNlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHJldHVybiBpbnQgUmV0dXJuIHRoZSBoZWlnaHQgb2YgdGhlIGltYWdlcy4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VzeSgkaW1hZ2UpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZXN5KCRpbWFnZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBpbWFnZXRydWVjb2xvcnRvcGFsZXR0ZSBjb252ZXJ0cyBhIHRydWVjb2xvciBpbWFnZQogKiB0byBhIHBhbGV0dGUgaW1hZ2UuIFRoZSBjb2RlIGZvciB0aGlzIGZ1bmN0aW9uIHdhcyBvcmlnaW5hbGx5IGRyYXduIGZyb20KICogdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAgbGlicmFyeSBjb2RlLCB3aGljaCBpcyBleGNlbGxlbnQuIFRoZSBjb2RlCiAqIGhhcyBiZWVuIG1vZGlmaWVkIHRvIHByZXNlcnZlIGFzIG11Y2ggYWxwaGEgY2hhbm5lbCBpbmZvcm1hdGlvbiBhcwogKiBwb3NzaWJsZSBpbiB0aGUgcmVzdWx0aW5nIHBhbGV0dGUsIGluIGFkZGl0aW9uIHRvIHByZXNlcnZpbmcgY29sb3JzIGFzCiAqIHdlbGwgYXMgcG9zc2libGUuIFRoaXMgZG9lcyBub3Qgd29yayBhcyB3ZWxsIGFzIG1pZ2h0IGJlIGhvcGVkLiBJdCBpcwogKiB1c3VhbGx5IGJlc3QgdG8gc2ltcGx5IHByb2R1Y2UgYSB0cnVlY29sb3Igb3V0cHV0IGltYWdlIGluc3RlYWQsIHdoaWNoCiAqIGd1YXJhbnRlZXMgdGhlIGhpZ2hlc3Qgb3V0cHV0IHF1YWxpdHkuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gYm9vbCAkZGl0aGVyIEluZGljYXRlcyBpZiB0aGUgaW1hZ2Ugc2hvdWxkIGJlIGRpdGhlcmVkIC0gaWYgaXQgaXMgVFJVRSB0aGVuCiAqIGRpdGhlcmluZyB3aWxsIGJlIHVzZWQgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSBtb3JlIHNwZWNrbGVkIGltYWdlIGJ1dAogKiB3aXRoIGJldHRlciBjb2xvciBhcHByb3hpbWF0aW9uLgogKiBAcGFyYW0gaW50ICRuY29sb3JzIFNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbG9ycyB0aGF0IHNob3VsZCBiZSByZXRhaW5lZCBpbiB0aGUgcGFsZXR0ZS4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2V0cnVlY29sb3J0b3BhbGV0dGUoJGltYWdlLCBib29sICRkaXRoZXIsIGludCAkbmNvbG9ycyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZXRydWVjb2xvcnRvcGFsZXR0ZSgkaW1hZ2UsICRkaXRoZXIsICRuY29sb3JzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgYW5kIHJldHVybnMgdGhlIGJvdW5kaW5nIGJveCBpbiBwaXhlbHMKICogZm9yIGEgVHJ1ZVR5cGUgdGV4dC4KICoKICogQHBhcmFtIGZsb2F0ICRzaXplIFRoZSBmb250IHNpemUgaW4gcG9pbnRzLgogKiBAcGFyYW0gZmxvYXQgJGFuZ2xlIEFuZ2xlIGluIGRlZ3JlZXMgaW4gd2hpY2ggdGV4dCB3aWxsIGJlIG1lYXN1cmVkLgogKiBAcGFyYW0gc3RyaW5nICRmb250ZmlsZSBUaGUgcGF0aCB0byB0aGUgVHJ1ZVR5cGUgZm9udCB5b3Ugd2lzaCB0byB1c2UuCiAqCiAqIERlcGVuZGluZyBvbiB3aGljaCB2ZXJzaW9uIG9mIHRoZSBHRCBsaWJyYXJ5IFBIUCBpcyB1c2luZywgd2hlbgogKiBmb250ZmlsZSBkb2VzIG5vdCBiZWdpbiB3aXRoIGEgbGVhZGluZwogKiAvIHRoZW4gLnR0ZiB3aWxsIGJlIGFwcGVuZGVkCiAqIHRvIHRoZSBmaWxlbmFtZSBhbmQgdGhlIGxpYnJhcnkgd2lsbCBhdHRlbXB0IHRvIHNlYXJjaCBmb3IgdGhhdAogKiBmaWxlbmFtZSBhbG9uZyBhIGxpYnJhcnktZGVmaW5lZCBmb250IHBhdGguCiAqCiAqIFdoZW4gdXNpbmcgdmVyc2lvbnMgb2YgdGhlIEdEIGxpYnJhcnkgbG93ZXIgdGhhbiAyLjAuMTgsIGEgc3BhY2UgY2hhcmFjdGVyLAogKiByYXRoZXIgdGhhbiBhIHNlbWljb2xvbiwgd2FzIHVzZWQgYXMgdGhlICdwYXRoIHNlcGFyYXRvcicgZm9yIGRpZmZlcmVudCBmb250IGZpbGVzLgogKiBVbmludGVudGlvbmFsIHVzZSBvZiB0aGlzIGZlYXR1cmUgd2lsbCByZXN1bHQgaW4gdGhlIHdhcm5pbmcgbWVzc2FnZToKICogV2FybmluZzogQ291bGQgbm90IGZpbmQvb3BlbiBmb250LiBGb3IgdGhlc2UgYWZmZWN0ZWQgdmVyc2lvbnMsIHRoZQogKiBvbmx5IHNvbHV0aW9uIGlzIG1vdmluZyB0aGUgZm9udCB0byBhIHBhdGggd2hpY2ggZG9lcyBub3QgY29udGFpbiBzcGFjZXMuCiAqCiAqIEluIG1hbnkgY2FzZXMgd2hlcmUgYSBmb250IHJlc2lkZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBzY3JpcHQgdXNpbmcgaXQKICogdGhlIGZvbGxvd2luZyB0cmljayB3aWxsIGFsbGV2aWF0ZSBhbnkgaW5jbHVkZSBwcm9ibGVtcy4KICoKICoKICogXV0+CiAqCiAqCiAqIE5vdGUgdGhhdCBvcGVuX2Jhc2VkaXIgZG9lcwogKiBub3QgYXBwbHkgdG8gZm9udGZpbGUuCiAqIEBwYXJhbSBzdHJpbmcgJHRleHQgVGhlIHN0cmluZyB0byBiZSBtZWFzdXJlZC4KICogQHJldHVybiBhcnJheSBpbWFnZXR0ZmJib3ggcmV0dXJucyBhbiBhcnJheSB3aXRoIDgKICogZWxlbWVudHMgcmVwcmVzZW50aW5nIGZvdXIgcG9pbnRzIG1ha2luZyB0aGUgYm91bmRpbmcgYm94IG9mIHRoZQogKiB0ZXh0IG9uIHN1Y2Nlc3MgYW5kIEZBTFNFIG9uIGVycm9yLgogKgogKgogKgogKgogKiBrZXkKICogY29udGVudHMKICoKICoKICoKICoKICogMAogKiBsb3dlciBsZWZ0IGNvcm5lciwgWCBwb3NpdGlvbgogKgogKgogKiAxCiAqIGxvd2VyIGxlZnQgY29ybmVyLCBZIHBvc2l0aW9uCiAqCiAqCiAqIDIKICogbG93ZXIgcmlnaHQgY29ybmVyLCBYIHBvc2l0aW9uCiAqCiAqCiAqIDMKICogbG93ZXIgcmlnaHQgY29ybmVyLCBZIHBvc2l0aW9uCiAqCiAqCiAqIDQKICogdXBwZXIgcmlnaHQgY29ybmVyLCBYIHBvc2l0aW9uCiAqCiAqCiAqIDUKICogdXBwZXIgcmlnaHQgY29ybmVyLCBZIHBvc2l0aW9uCiAqCiAqCiAqIDYKICogdXBwZXIgbGVmdCBjb3JuZXIsIFggcG9zaXRpb24KICoKICoKICogNwogKiB1cHBlciBsZWZ0IGNvcm5lciwgWSBwb3NpdGlvbgogKgogKgogKgogKgogKgogKiBUaGUgcG9pbnRzIGFyZSByZWxhdGl2ZSB0byB0aGUgdGV4dCByZWdhcmRsZXNzIG9mIHRoZQogKiBhbmdsZSwgc28gInVwcGVyIGxlZnQiIG1lYW5zIGluIHRoZSB0b3AgbGVmdC1oYW5kCiAqIGNvcm5lciBzZWVpbmcgdGhlIHRleHQgaG9yaXpvbnRhbGx5LgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZXR0ZmJib3goZmxvYXQgJHNpemUsIGZsb2F0ICRhbmdsZSwgc3RyaW5nICRmb250ZmlsZSwgc3RyaW5nICR0ZXh0KTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZXR0ZmJib3goJHNpemUsICRhbmdsZSwgJGZvbnRmaWxlLCAkdGV4dCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBXcml0ZXMgdGhlIGdpdmVuIHRleHQgaW50byB0aGUgaW1hZ2UgdXNpbmcgVHJ1ZVR5cGUKICogZm9udHMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gZmxvYXQgJHNpemUgVGhlIGZvbnQgc2l6ZSBpbiBwb2ludHMuCiAqIEBwYXJhbSBmbG9hdCAkYW5nbGUgVGhlIGFuZ2xlIGluIGRlZ3JlZXMsIHdpdGggMCBkZWdyZWVzIGJlaW5nIGxlZnQtdG8tcmlnaHQgcmVhZGluZyB0ZXh0LgogKiBIaWdoZXIgdmFsdWVzIHJlcHJlc2VudCBhIGNvdW50ZXItY2xvY2t3aXNlIHJvdGF0aW9uLiBGb3IgZXhhbXBsZSwgYQogKiB2YWx1ZSBvZiA5MCB3b3VsZCByZXN1bHQgaW4gYm90dG9tLXRvLXRvcCByZWFkaW5nIHRleHQuCiAqIEBwYXJhbSBpbnQgJHggVGhlIGNvb3JkaW5hdGVzIGdpdmVuIGJ5IHggYW5kCiAqIHkgd2lsbCBkZWZpbmUgdGhlIGJhc2Vwb2ludCBvZiB0aGUgZmlyc3QKICogY2hhcmFjdGVyIChyb3VnaGx5IHRoZSBsb3dlci1sZWZ0IGNvcm5lciBvZiB0aGUgY2hhcmFjdGVyKS4gVGhpcwogKiBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgaW1hZ2VzdHJpbmcsIHdoZXJlCiAqIHggYW5kIHkgZGVmaW5lIHRoZQogKiB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyLiBGb3IgZXhhbXBsZSwgInRvcCBsZWZ0IgogKiBpcyAwLCAwLgogKiBAcGFyYW0gaW50ICR5IFRoZSB5LW9yZGluYXRlLiBUaGlzIHNldHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBmb250cyBiYXNlbGluZSwgbm90IHRoZQogKiB2ZXJ5IGJvdHRvbSBvZiB0aGUgY2hhcmFjdGVyLgogKiBAcGFyYW0gaW50ICRjb2xvciBUaGUgY29sb3IgaW5kZXguIFVzaW5nIHRoZSBuZWdhdGl2ZSBvZiBhIGNvbG9yIGluZGV4IGhhcyB0aGUgZWZmZWN0IG9mCiAqIHR1cm5pbmcgb2ZmIGFudGlhbGlhc2luZy4gU2VlIGltYWdlY29sb3JhbGxvY2F0ZS4KICogQHBhcmFtIHN0cmluZyAkZm9udGZpbGUgVGhlIHBhdGggdG8gdGhlIFRydWVUeXBlIGZvbnQgeW91IHdpc2ggdG8gdXNlLgogKgogKiBEZXBlbmRpbmcgb24gd2hpY2ggdmVyc2lvbiBvZiB0aGUgR0QgbGlicmFyeSBQSFAgaXMgdXNpbmcsIHdoZW4KICogZm9udGZpbGUgZG9lcyBub3QgYmVnaW4gd2l0aCBhIGxlYWRpbmcKICogLyB0aGVuIC50dGYgd2lsbCBiZSBhcHBlbmRlZAogKiB0byB0aGUgZmlsZW5hbWUgYW5kIHRoZSBsaWJyYXJ5IHdpbGwgYXR0ZW1wdCB0byBzZWFyY2ggZm9yIHRoYXQKICogZmlsZW5hbWUgYWxvbmcgYSBsaWJyYXJ5LWRlZmluZWQgZm9udCBwYXRoLgogKgogKiBXaGVuIHVzaW5nIHZlcnNpb25zIG9mIHRoZSBHRCBsaWJyYXJ5IGxvd2VyIHRoYW4gMi4wLjE4LCBhIHNwYWNlIGNoYXJhY3RlciwKICogcmF0aGVyIHRoYW4gYSBzZW1pY29sb24sIHdhcyB1c2VkIGFzIHRoZSAncGF0aCBzZXBhcmF0b3InIGZvciBkaWZmZXJlbnQgZm9udCBmaWxlcy4KICogVW5pbnRlbnRpb25hbCB1c2Ugb2YgdGhpcyBmZWF0dXJlIHdpbGwgcmVzdWx0IGluIHRoZSB3YXJuaW5nIG1lc3NhZ2U6CiAqIFdhcm5pbmc6IENvdWxkIG5vdCBmaW5kL29wZW4gZm9udC4gRm9yIHRoZXNlIGFmZmVjdGVkIHZlcnNpb25zLCB0aGUKICogb25seSBzb2x1dGlvbiBpcyBtb3ZpbmcgdGhlIGZvbnQgdG8gYSBwYXRoIHdoaWNoIGRvZXMgbm90IGNvbnRhaW4gc3BhY2VzLgogKgogKiBJbiBtYW55IGNhc2VzIHdoZXJlIGEgZm9udCByZXNpZGVzIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgc2NyaXB0IHVzaW5nIGl0CiAqIHRoZSBmb2xsb3dpbmcgdHJpY2sgd2lsbCBhbGxldmlhdGUgYW55IGluY2x1ZGUgcHJvYmxlbXMuCiAqCiAqCiAqIF1dPgogKgogKgogKiBOb3RlIHRoYXQgb3Blbl9iYXNlZGlyIGRvZXMKICogbm90IGFwcGx5IHRvIGZvbnRmaWxlLgogKiBAcGFyYW0gc3RyaW5nICR0ZXh0IFRoZSB0ZXh0IHN0cmluZyBpbiBVVEYtOCBlbmNvZGluZy4KICoKICogTWF5IGluY2x1ZGUgZGVjaW1hbCBudW1lcmljIGNoYXJhY3RlciByZWZlcmVuY2VzIChvZiB0aGUgZm9ybToKICogJmFtcDsjODM2NDspIHRvIGFjY2VzcyBjaGFyYWN0ZXJzIGluIGEgZm9udCBiZXlvbmQgcG9zaXRpb24gMTI3LgogKiBUaGUgaGV4YWRlY2ltYWwgZm9ybWF0IChsaWtlICZhbXA7I3hBOTspIGlzIHN1cHBvcnRlZC4KICogU3RyaW5ncyBpbiBVVEYtOCBlbmNvZGluZyBjYW4gYmUgcGFzc2VkIGRpcmVjdGx5LgogKgogKiBOYW1lZCBlbnRpdGllcywgc3VjaCBhcyAmYW1wO2NvcHk7LCBhcmUgbm90IHN1cHBvcnRlZC4gQ29uc2lkZXIgdXNpbmcKICogaHRtbF9lbnRpdHlfZGVjb2RlCiAqIHRvIGRlY29kZSB0aGVzZSBuYW1lZCBlbnRpdGllcyBpbnRvIFVURi04IHN0cmluZ3MuCiAqCiAqIElmIGEgY2hhcmFjdGVyIGlzIHVzZWQgaW4gdGhlIHN0cmluZyB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZQogKiBmb250LCBhIGhvbGxvdyByZWN0YW5nbGUgd2lsbCByZXBsYWNlIHRoZSBjaGFyYWN0ZXIuCiAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBhbiBhcnJheSB3aXRoIDggZWxlbWVudHMgcmVwcmVzZW50aW5nIGZvdXIgcG9pbnRzIG1ha2luZyB0aGUKICogYm91bmRpbmcgYm94IG9mIHRoZSB0ZXh0LiBUaGUgb3JkZXIgb2YgdGhlIHBvaW50cyBpcyBsb3dlciBsZWZ0LCBsb3dlcgogKiByaWdodCwgdXBwZXIgcmlnaHQsIHVwcGVyIGxlZnQuIFRoZSBwb2ludHMgYXJlIHJlbGF0aXZlIHRvIHRoZSB0ZXh0CiAqIHJlZ2FyZGxlc3Mgb2YgdGhlIGFuZ2xlLCBzbyAidXBwZXIgbGVmdCIgbWVhbnMgaW4gdGhlIHRvcCBsZWZ0LWhhbmQKICogY29ybmVyIHdoZW4geW91IHNlZSB0aGUgdGV4dCBob3Jpem9udGFsbHkuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdldHRmdGV4dCgkaW1hZ2UsIGZsb2F0ICRzaXplLCBmbG9hdCAkYW5nbGUsIGludCAkeCwgaW50ICR5LCBpbnQgJGNvbG9yLCBzdHJpbmcgJGZvbnRmaWxlLCBzdHJpbmcgJHRleHQpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdldHRmdGV4dCgkaW1hZ2UsICRzaXplLCAkYW5nbGUsICR4LCAkeSwgJGNvbG9yLCAkZm9udGZpbGUsICR0ZXh0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGltYWdld2JtcCBvdXRwdXRzIG9yIHNhdmUgYSBXQk1QCiAqIHZlcnNpb24gb2YgdGhlIGdpdmVuIGltYWdlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIG1peGVkICR0byBUaGUgcGF0aCBvciBhbiBvcGVuIHN0cmVhbSByZXNvdXJjZSAod2hpY2ggaXMgYXV0b21hdGljYWxseSBiZWluZyBjbG9zZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zKSB0byBzYXZlIHRoZSBmaWxlIHRvLiBJZiBub3Qgc2V0IG9yIE5VTEwsIHRoZSByYXcgaW1hZ2Ugc3RyZWFtIHdpbGwgYmUgb3V0cHV0dGVkIGRpcmVjdGx5LgogKiBAcGFyYW0gaW50ICRmb3JlZ3JvdW5kIFlvdSBjYW4gc2V0IHRoZSBmb3JlZ3JvdW5kIGNvbG9yIHdpdGggdGhpcyBwYXJhbWV0ZXIgYnkgc2V0dGluZyBhbgogKiBpZGVudGlmaWVyIG9idGFpbmVkIGZyb20gaW1hZ2Vjb2xvcmFsbG9jYXRlLgogKiBUaGUgZGVmYXVsdCBmb3JlZ3JvdW5kIGNvbG9yIGlzIGJsYWNrLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZXdibXAoJGltYWdlLCAkdG8gPSBudWxsLCBpbnQgJGZvcmVncm91bmQgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGZvcmVncm91bmQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGltYWdld2JtcCgkaW1hZ2UsICR0bywgJGZvcmVncm91bmQpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGltYWdld2JtcCgkaW1hZ2UsICR0byk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogT3V0cHV0cyBvciBzYXZlcyBhIFdlYlAgdmVyc2lvbiBvZiB0aGUgZ2l2ZW4gaW1hZ2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gbWl4ZWQgJHRvIFRoZSBwYXRoIG9yIGFuIG9wZW4gc3RyZWFtIHJlc291cmNlICh3aGljaCBpcyBhdXRvbWF0aWNhbGx5IGJlaW5nIGNsb3NlZCBhZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVybnMpIHRvIHNhdmUgdGhlIGZpbGUgdG8uIElmIG5vdCBzZXQgb3IgTlVMTCwgdGhlIHJhdyBpbWFnZSBzdHJlYW0gd2lsbCBiZSBvdXRwdXR0ZWQgZGlyZWN0bHkuCiAqIEBwYXJhbSBpbnQgJHF1YWxpdHkgcXVhbGl0eSByYW5nZXMgZnJvbSAwICh3b3JzdAogKiBxdWFsaXR5LCBzbWFsbGVyIGZpbGUpIHRvIDEwMCAoYmVzdCBxdWFsaXR5LCBiaWdnZXN0IGZpbGUpLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZXdlYnAoJGltYWdlLCAkdG8gPSBudWxsLCBpbnQgJHF1YWxpdHkgPSA4MCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZXdlYnAoJGltYWdlLCAkdG8sICRxdWFsaXR5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBPdXRwdXRzIG9yIHNhdmUgYW4gWEJNIHZlcnNpb24gb2YgdGhlIGdpdmVuCiAqIGltYWdlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIHN0cmluZ3xudWxsICRmaWxlbmFtZSBUaGUgcGF0aCB0byBzYXZlIHRoZSBmaWxlIHRvLCBnaXZlbiBhcyBzdHJpbmcuIElmIE5VTEwsIHRoZSByYXcgaW1hZ2Ugc3RyZWFtIHdpbGwgYmUgb3V0cHV0IGRpcmVjdGx5LgogKgogKiBUaGUgZmlsZW5hbWUgKHdpdGhvdXQgdGhlIC54Ym0gZXh0ZW5zaW9uKSBpcyBhbHNvCiAqIHVzZWQgZm9yIHRoZSBDIGlkZW50aWZpZXJzIG9mIHRoZSBYQk0sIHdoZXJlYnkgbm9uCiAqIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIG9mIHRoZSBjdXJyZW50IGxvY2FsZSBhcmUgc3Vic3RpdHV0ZWQgYnkKICogdW5kZXJzY29yZXMuIElmIGZpbGVuYW1lIGlzIHNldCB0byBOVUxMLAogKiBpbWFnZSBpcyB1c2VkIHRvIGJ1aWxkIHRoZSBDIGlkZW50aWZpZXJzLgogKiBAcGFyYW0gaW50ICRmb3JlZ3JvdW5kIFlvdSBjYW4gc2V0IHRoZSBmb3JlZ3JvdW5kIGNvbG9yIHdpdGggdGhpcyBwYXJhbWV0ZXIgYnkgc2V0dGluZyBhbgogKiBpZGVudGlmaWVyIG9idGFpbmVkIGZyb20gaW1hZ2Vjb2xvcmFsbG9jYXRlLgogKiBUaGUgZGVmYXVsdCBmb3JlZ3JvdW5kIGNvbG9yIGlzIGJsYWNrLiBBbGwgb3RoZXIgY29sb3JzIGFyZSB0cmVhdGVkIGFzCiAqIGJhY2tncm91bmQuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdleGJtKCRpbWFnZSwgP3N0cmluZyAkZmlsZW5hbWUsIGludCAkZm9yZWdyb3VuZCA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkZm9yZWdyb3VuZCAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcaW1hZ2V4Ym0oJGltYWdlLCAkZmlsZW5hbWUsICRmb3JlZ3JvdW5kKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxpbWFnZXhibSgkaW1hZ2UsICRmaWxlbmFtZSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRW1iZWRzIGJpbmFyeSBJUFRDIGRhdGEgaW50byBhIEpQRUcgaW1hZ2UuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGlwdGNkYXRhIFRoZSBkYXRhIHRvIGJlIHdyaXR0ZW4uCiAqIEBwYXJhbSBzdHJpbmcgJGpwZWdfZmlsZV9uYW1lIFBhdGggdG8gdGhlIEpQRUcgaW1hZ2UuCiAqIEBwYXJhbSBpbnQgJHNwb29sIFNwb29sIGZsYWcuIElmIHRoZSBzcG9vbCBmbGFnIGlzIGxlc3MgdGhhbiAyIHRoZW4gdGhlIEpQRUcgd2lsbCBiZQogKiByZXR1cm5lZCBhcyBhIHN0cmluZy4gT3RoZXJ3aXNlIHRoZSBKUEVHIHdpbGwgYmUgcHJpbnRlZCB0byBTVERPVVQuCiAqIEByZXR1cm4gc3RyaW5nfGJvb2wgSWYgc3Bvb2wgaXMgbGVzcyB0aGFuIDIsIHRoZSBKUEVHIHdpbGwgYmUgcmV0dXJuZWQuIE90aGVyd2lzZSByZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaXB0Y2VtYmVkKHN0cmluZyAkaXB0Y2RhdGEsIHN0cmluZyAkanBlZ19maWxlX25hbWUsIGludCAkc3Bvb2wgPSAwKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGlwdGNlbWJlZCgkaXB0Y2RhdGEsICRqcGVnX2ZpbGVfbmFtZSwgJHNwb29sKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFBhcnNlcyBhbiBJUFRDIGJsb2NrIGludG8gaXRzIHNpbmdsZSB0YWdzLgogKgogKiBAcGFyYW0gc3RyaW5nICRpcHRjYmxvY2sgQSBiaW5hcnkgSVBUQyBibG9jay4KICogQHJldHVybiBhcnJheSBSZXR1cm5zIGFuIGFycmF5IHVzaW5nIHRoZSB0YWdtYXJrZXIgYXMgYW4gaW5kZXggYW5kIHRoZSB2YWx1ZSBhcyB0aGUKICogdmFsdWUuIEl0IHJldHVybnMgRkFMU0Ugb24gZXJyb3Igb3IgaWYgbm8gSVBUQyBkYXRhIHdhcyBmb3VuZC4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaXB0Y3BhcnNlKHN0cmluZyAkaXB0Y2Jsb2NrKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpcHRjcGFyc2UoJGlwdGNibG9jayk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBDb252ZXJ0cyBhIEpQRUcgZmlsZSBpbnRvIGEgV0JNUCBmaWxlLgogKgogKiBAcGFyYW0gc3RyaW5nICRqcGVnbmFtZSBQYXRoIHRvIEpQRUcgZmlsZS4KICogQHBhcmFtIHN0cmluZyAkd2JtcG5hbWUgUGF0aCB0byBkZXN0aW5hdGlvbiBXQk1QIGZpbGUuCiAqIEBwYXJhbSBpbnQgJGRlc3RfaGVpZ2h0IERlc3RpbmF0aW9uIGltYWdlIGhlaWdodC4KICogQHBhcmFtIGludCAkZGVzdF93aWR0aCBEZXN0aW5hdGlvbiBpbWFnZSB3aWR0aC4KICogQHBhcmFtIGludCAkdGhyZXNob2xkIFRocmVzaG9sZCB2YWx1ZSwgYmV0d2VlbiAwIGFuZCA4IChpbmNsdXNpdmUpLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBqcGVnMndibXAoc3RyaW5nICRqcGVnbmFtZSwgc3RyaW5nICR3Ym1wbmFtZSwgaW50ICRkZXN0X2hlaWdodCwgaW50ICRkZXN0X3dpZHRoLCBpbnQgJHRocmVzaG9sZCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxqcGVnMndibXAoJGpwZWduYW1lLCAkd2JtcG5hbWUsICRkZXN0X2hlaWdodCwgJGRlc3Rfd2lkdGgsICR0aHJlc2hvbGQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENvbnZlcnRzIGEgUE5HIGZpbGUgaW50byBhIFdCTVAgZmlsZS4KICoKICogQHBhcmFtIHN0cmluZyAkcG5nbmFtZSBQYXRoIHRvIFBORyBmaWxlLgogKiBAcGFyYW0gc3RyaW5nICR3Ym1wbmFtZSBQYXRoIHRvIGRlc3RpbmF0aW9uIFdCTVAgZmlsZS4KICogQHBhcmFtIGludCAkZGVzdF9oZWlnaHQgRGVzdGluYXRpb24gaW1hZ2UgaGVpZ2h0LgogKiBAcGFyYW0gaW50ICRkZXN0X3dpZHRoIERlc3RpbmF0aW9uIGltYWdlIHdpZHRoLgogKiBAcGFyYW0gaW50ICR0aHJlc2hvbGQgVGhyZXNob2xkIHZhbHVlLCBiZXR3ZWVuIDAgYW5kIDggKGluY2x1c2l2ZSkuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBuZzJ3Ym1wKHN0cmluZyAkcG5nbmFtZSwgc3RyaW5nICR3Ym1wbmFtZSwgaW50ICRkZXN0X2hlaWdodCwgaW50ICRkZXN0X3dpZHRoLCBpbnQgJHRocmVzaG9sZCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwbmcyd2JtcCgkcG5nbmFtZSwgJHdibXBuYW1lLCAkZGVzdF9oZWlnaHQsICRkZXN0X3dpZHRoLCAkdGhyZXNob2xkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/imap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xJbWFwRXhjZXB0aW9uOwoKLyoqCiAqIEFwcGVuZHMgYSBzdHJpbmcgbWVzc2FnZSB0byB0aGUgc3BlY2lmaWVkIG1haWxib3guCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcF9zdHJlYW0gQW4gSU1BUCBzdHJlYW0gcmV0dXJuZWQgYnkKICogaW1hcF9vcGVuLgogKiBAcGFyYW0gc3RyaW5nICRtYWlsYm94IFRoZSBtYWlsYm94IG5hbWUsIHNlZSBpbWFwX29wZW4gZm9yIG1vcmUKICogaW5mb3JtYXRpb24KICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBiZSBhcHBlbmQsIGFzIGEgc3RyaW5nCiAqCiAqIFdoZW4gdGFsa2luZyB0byB0aGUgQ3lydXMgSU1BUCBzZXJ2ZXIsIHlvdSBtdXN0IHVzZSAiXHJcbiIgYXMKICogeW91ciBlbmQtb2YtbGluZSB0ZXJtaW5hdG9yIGluc3RlYWQgb2YgIlxuIiBvciB0aGUgb3BlcmF0aW9uIHdpbGwKICogZmFpbAogKiBAcGFyYW0gc3RyaW5nICRvcHRpb25zIElmIHByb3ZpZGVkLCB0aGUgb3B0aW9ucyB3aWxsIGFsc28gYmUgd3JpdHRlbgogKiB0byB0aGUgbWFpbGJveAogKiBAcGFyYW0gc3RyaW5nICRpbnRlcm5hbF9kYXRlIElmIHRoaXMgcGFyYW1ldGVyIGlzIHNldCwgaXQgd2lsbCBzZXQgdGhlIElOVEVSTkFMREFURSBvbiB0aGUgYXBwZW5kZWQgbWVzc2FnZS4gIFRoZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIGEgZGF0ZSBzdHJpbmcgdGhhdCBjb25mb3JtcyB0byB0aGUgcmZjMjA2MCBzcGVjaWZpY2F0aW9ucyBmb3IgYSBkYXRlX3RpbWUgdmFsdWUuCiAqIEB0aHJvd3MgSW1hcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hcF9hcHBlbmQoJGltYXBfc3RyZWFtLCBzdHJpbmcgJG1haWxib3gsIHN0cmluZyAkbWVzc2FnZSwgc3RyaW5nICRvcHRpb25zID0gbnVsbCwgc3RyaW5nICRpbnRlcm5hbF9kYXRlID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFwX2FwcGVuZCgkaW1hcF9zdHJlYW0sICRtYWlsYm94LCAkbWVzc2FnZSwgJG9wdGlvbnMsICRpbnRlcm5hbF9kYXRlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENoZWNrcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBtYWlsYm94LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYXBfc3RyZWFtIEFuIElNQVAgc3RyZWFtIHJldHVybmVkIGJ5CiAqIGltYXBfb3Blbi4KICogQHJldHVybiBcc3RkQ2xhc3MgUmV0dXJucyB0aGUgaW5mb3JtYXRpb24gaW4gYW4gb2JqZWN0IHdpdGggZm9sbG93aW5nIHByb3BlcnRpZXM6CiAqCiAqCiAqCiAqIERhdGUgLSBjdXJyZW50IHN5c3RlbSB0aW1lIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gUkZDMjgyMgogKgogKgogKgogKgogKiBEcml2ZXIgLSBwcm90b2NvbCB1c2VkIHRvIGFjY2VzcyB0aGlzIG1haWxib3g6CiAqIFBPUDMsIElNQVAsIE5OVFAKICoKICoKICoKICoKICogTWFpbGJveCAtIHRoZSBtYWlsYm94IG5hbWUKICoKICoKICoKICoKICogTm1zZ3MgLSBudW1iZXIgb2YgbWVzc2FnZXMgaW4gdGhlIG1haWxib3gKICoKICoKICoKICoKICogUmVjZW50IC0gbnVtYmVyIG9mIHJlY2VudCBtZXNzYWdlcyBpbiB0aGUgbWFpbGJveAogKgogKgogKgogKgogKiBSZXR1cm5zIEZBTFNFIG9uIGZhaWx1cmUuCiAqIEB0aHJvd3MgSW1hcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hcF9jaGVjaygkaW1hcF9zdHJlYW0pOiBcc3RkQ2xhc3MKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFwX2NoZWNrKCRpbWFwX3N0cmVhbSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gY2F1c2VzIGEgc3RvcmUgdG8gZGVsZXRlIHRoZSBzcGVjaWZpZWQKICogZmxhZyB0byB0aGUgZmxhZ3Mgc2V0IGZvciB0aGUKICogbWVzc2FnZXMgaW4gdGhlIHNwZWNpZmllZCBzZXF1ZW5jZS4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFwX3N0cmVhbSBBbiBJTUFQIHN0cmVhbSByZXR1cm5lZCBieQogKiBpbWFwX29wZW4uCiAqIEBwYXJhbSBzdHJpbmcgJHNlcXVlbmNlIEEgc2VxdWVuY2Ugb2YgbWVzc2FnZSBudW1iZXJzLiBZb3UgY2FuIGVudW1lcmF0ZSBkZXNpcmVkIG1lc3NhZ2VzCiAqIHdpdGggdGhlIFgsWSBzeW50YXgsIG9yIHJldHJpZXZlIGFsbCBtZXNzYWdlcwogKiB3aXRoaW4gYW4gaW50ZXJ2YWwgd2l0aCB0aGUgWDpZIHN5bnRheAogKiBAcGFyYW0gc3RyaW5nICRmbGFnIFRoZSBmbGFncyB3aGljaCB5b3UgY2FuIHVuc2V0IGFyZSAiXFxTZWVuIiwgIlxcQW5zd2VyZWQiLCAiXFxGbGFnZ2VkIiwKICogIlxcRGVsZXRlZCIsIGFuZCAiXFxEcmFmdCIgKGFzIGRlZmluZWQgYnkgUkZDMjA2MCkKICogQHBhcmFtIGludCAkb3B0aW9ucyBvcHRpb25zIGFyZSBhIGJpdCBtYXNrIGFuZCBtYXkgY29udGFpbgogKiB0aGUgc2luZ2xlIG9wdGlvbjoKICoKICoKICoKICogU1RfVUlEIC0gVGhlIHNlcXVlbmNlIGFyZ3VtZW50IGNvbnRhaW5zIFVJRHMKICogaW5zdGVhZCBvZiBzZXF1ZW5jZSBudW1iZXJzCiAqCiAqCiAqCiAqIEB0aHJvd3MgSW1hcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hcF9jbGVhcmZsYWdfZnVsbCgkaW1hcF9zdHJlYW0sIHN0cmluZyAkc2VxdWVuY2UsIHN0cmluZyAkZmxhZywgaW50ICRvcHRpb25zID0gMCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFwX2NsZWFyZmxhZ19mdWxsKCRpbWFwX3N0cmVhbSwgJHNlcXVlbmNlLCAkZmxhZywgJG9wdGlvbnMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ2xvc2VzIHRoZSBpbWFwIHN0cmVhbS4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFwX3N0cmVhbSBBbiBJTUFQIHN0cmVhbSByZXR1cm5lZCBieQogKiBpbWFwX29wZW4uCiAqIEBwYXJhbSBpbnQgJGZsYWcgSWYgc2V0IHRvIENMX0VYUFVOR0UsIHRoZSBmdW5jdGlvbiB3aWxsIHNpbGVudGx5CiAqIGV4cHVuZ2UgdGhlIG1haWxib3ggYmVmb3JlIGNsb3NpbmcsIHJlbW92aW5nIGFsbCBtZXNzYWdlcyBtYXJrZWQgZm9yCiAqIGRlbGV0aW9uLiBZb3UgY2FuIGFjaGlldmUgdGhlIHNhbWUgdGhpbmcgYnkgdXNpbmcKICogaW1hcF9leHB1bmdlCiAqIEB0aHJvd3MgSW1hcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hcF9jbG9zZSgkaW1hcF9zdHJlYW0sIGludCAkZmxhZyA9IDApOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hcF9jbG9zZSgkaW1hcF9zdHJlYW0sICRmbGFnKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENyZWF0ZXMgYSBuZXcgbWFpbGJveCBzcGVjaWZpZWQgYnkgbWFpbGJveC4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFwX3N0cmVhbSBBbiBJTUFQIHN0cmVhbSByZXR1cm5lZCBieQogKiBpbWFwX29wZW4uCiAqIEBwYXJhbSBzdHJpbmcgJG1haWxib3ggVGhlIG1haWxib3ggbmFtZSwgc2VlIGltYXBfb3BlbiBmb3IgbW9yZQogKiBpbmZvcm1hdGlvbi4gTmFtZXMgY29udGFpbmluZyBpbnRlcm5hdGlvbmFsIGNoYXJhY3RlcnMgc2hvdWxkIGJlCiAqIGVuY29kZWQgYnkgaW1hcF91dGY3X2VuY29kZQogKiBAdGhyb3dzIEltYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYXBfY3JlYXRlbWFpbGJveCgkaW1hcF9zdHJlYW0sIHN0cmluZyAkbWFpbGJveCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFwX2NyZWF0ZW1haWxib3goJGltYXBfc3RyZWFtLCAkbWFpbGJveCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBEZWxldGVzIHRoZSBzcGVjaWZpZWQgbWFpbGJveC4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFwX3N0cmVhbSBBbiBJTUFQIHN0cmVhbSByZXR1cm5lZCBieQogKiBpbWFwX29wZW4uCiAqIEBwYXJhbSBzdHJpbmcgJG1haWxib3ggVGhlIG1haWxib3ggbmFtZSwgc2VlIGltYXBfb3BlbiBmb3IgbW9yZQogKiBpbmZvcm1hdGlvbgogKiBAdGhyb3dzIEltYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYXBfZGVsZXRlbWFpbGJveCgkaW1hcF9zdHJlYW0sIHN0cmluZyAkbWFpbGJveCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFwX2RlbGV0ZW1haWxib3goJGltYXBfc3RyZWFtLCAkbWFpbGJveCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBGZXRjaGVzIGFsbCB0aGUgc3RydWN0dXJlZCBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiBtZXNzYWdlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYXBfc3RyZWFtIEFuIElNQVAgc3RyZWFtIHJldHVybmVkIGJ5CiAqIGltYXBfb3Blbi4KICogQHBhcmFtIGludCAkbXNnX251bWJlciBUaGUgbWVzc2FnZSBudW1iZXIKICogQHBhcmFtIGludCAkb3B0aW9ucyBUaGlzIG9wdGlvbmFsIHBhcmFtZXRlciBvbmx5IGhhcyBhIHNpbmdsZSBvcHRpb24sCiAqIEZUX1VJRCwgd2hpY2ggdGVsbHMgdGhlIGZ1bmN0aW9uIHRvIHRyZWF0IHRoZQogKiBtc2dfbnVtYmVyIGFyZ3VtZW50IGFzIGEKICogVUlELgogKiBAcmV0dXJuIFxzdGRDbGFzcyBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgbGlzdGVkIGluIHRoZSB0YWJsZSBiZWxvdy4KICoKICoKICoKICogUmV0dXJuZWQgT2JqZWN0IGZvciBpbWFwX2ZldGNoc3RydWN0dXJlCiAqCiAqCiAqCiAqCiAqIHR5cGUKICogUHJpbWFyeSBib2R5IHR5cGUKICoKICoKICogZW5jb2RpbmcKICogQm9keSB0cmFuc2ZlciBlbmNvZGluZwogKgogKgogKiBpZnN1YnR5cGUKICogVFJVRSBpZiB0aGVyZSBpcyBhIHN1YnR5cGUgc3RyaW5nCiAqCiAqCiAqIHN1YnR5cGUKICogTUlNRSBzdWJ0eXBlCiAqCiAqCiAqIGlmZGVzY3JpcHRpb24KICogVFJVRSBpZiB0aGVyZSBpcyBhIGRlc2NyaXB0aW9uIHN0cmluZwogKgogKgogKiBkZXNjcmlwdGlvbgogKiBDb250ZW50IGRlc2NyaXB0aW9uIHN0cmluZwogKgogKgogKiBpZmlkCiAqIFRSVUUgaWYgdGhlcmUgaXMgYW4gaWRlbnRpZmljYXRpb24gc3RyaW5nCiAqCiAqCiAqIGlkCiAqIElkZW50aWZpY2F0aW9uIHN0cmluZwogKgogKgogKiBsaW5lcwogKiBOdW1iZXIgb2YgbGluZXMKICoKICoKICogYnl0ZXMKICogTnVtYmVyIG9mIGJ5dGVzCiAqCiAqCiAqIGlmZGlzcG9zaXRpb24KICogVFJVRSBpZiB0aGVyZSBpcyBhIGRpc3Bvc2l0aW9uIHN0cmluZwogKgogKgogKiBkaXNwb3NpdGlvbgogKiBEaXNwb3NpdGlvbiBzdHJpbmcKICoKICoKICogaWZkcGFyYW1ldGVycwogKiBUUlVFIGlmIHRoZSBkcGFyYW1ldGVycyBhcnJheSBleGlzdHMKICoKICoKICogZHBhcmFtZXRlcnMKICogQW4gYXJyYXkgb2Ygb2JqZWN0cyB3aGVyZSBlYWNoIG9iamVjdCBoYXMgYW4KICogImF0dHJpYnV0ZSIgYW5kIGEgInZhbHVlIgogKiBwcm9wZXJ0eSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXJhbWV0ZXJzIG9uIHRoZQogKiBDb250ZW50LWRpc3Bvc2l0aW9uIE1JTUUKICogaGVhZGVyLgogKgogKgogKiBpZnBhcmFtZXRlcnMKICogVFJVRSBpZiB0aGUgcGFyYW1ldGVycyBhcnJheSBleGlzdHMKICoKICoKICogcGFyYW1ldGVycwogKiBBbiBhcnJheSBvZiBvYmplY3RzIHdoZXJlIGVhY2ggb2JqZWN0IGhhcyBhbgogKiAiYXR0cmlidXRlIiBhbmQgYSAidmFsdWUiCiAqIHByb3BlcnR5LgogKgogKgogKiBwYXJ0cwogKiBBbiBhcnJheSBvZiBvYmplY3RzIGlkZW50aWNhbCBpbiBzdHJ1Y3R1cmUgdG8gdGhlIHRvcC1sZXZlbAogKiBvYmplY3QsIGVhY2ggb2Ygd2hpY2ggY29ycmVzcG9uZHMgdG8gYSBNSU1FIGJvZHkKICogcGFydC4KICoKICoKICoKICoKICoKICoKICogUHJpbWFyeSBib2R5IHR5cGUgKHZhbHVlIG1heSB2YXJ5IHdpdGggdXNlZCBsaWJyYXJ5LCB1c2Ugb2YgY29uc3RhbnRzIGlzIHJlY29tbWVuZGVkKQogKgogKgogKiBWYWx1ZVR5cGVDb25zdGFudAogKgogKgogKiAwdGV4dFRZUEVURVhUCiAqIDFtdWx0aXBhcnRUWVBFTVVMVElQQVJUCiAqIDJtZXNzYWdlVFlQRU1FU1NBR0UKICogM2FwcGxpY2F0aW9uVFlQRUFQUExJQ0FUSU9OCiAqIDRhdWRpb1RZUEVBVURJTwogKiA1aW1hZ2VUWVBFSU1BR0UKICogNnZpZGVvVFlQRVZJREVPCiAqIDdtb2RlbFRZUEVNT0RFTAogKiA4b3RoZXJUWVBFT1RIRVIKICoKICoKICoKICoKICoKICogVHJhbnNmZXIgZW5jb2RpbmdzICh2YWx1ZSBtYXkgdmFyeSB3aXRoIHVzZWQgbGlicmFyeSwgdXNlIG9mIGNvbnN0YW50cyBpcyByZWNvbW1lbmRlZCkKICoKICoKICogVmFsdWVUeXBlQ29uc3RhbnQKICoKICoKICogMDdiaXRFTkM3QklUCiAqIDE4Yml0RU5DOEJJVAogKiAyQmluYXJ5RU5DQklOQVJZCiAqIDNCYXNlNjRFTkNCQVNFNjQKICogNFF1b3RlZC1QcmludGFibGVFTkNRVU9URURQUklOVEFCTEUKICogNW90aGVyRU5DT1RIRVIKICoKICoKICoKICogQHRocm93cyBJbWFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFwX2ZldGNoc3RydWN0dXJlKCRpbWFwX3N0cmVhbSwgaW50ICRtc2dfbnVtYmVyLCBpbnQgJG9wdGlvbnMgPSAwKTogXHN0ZENsYXNzCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hcF9mZXRjaHN0cnVjdHVyZSgkaW1hcF9zdHJlYW0sICRtc2dfbnVtYmVyLCAkb3B0aW9ucyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFB1cmdlcyB0aGUgY2FjaGUgb2YgZW50cmllcyBvZiBhIHNwZWNpZmljIHR5cGUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcF9zdHJlYW0gQW4gSU1BUCBzdHJlYW0gcmV0dXJuZWQgYnkKICogaW1hcF9vcGVuLgogKiBAcGFyYW0gaW50ICRjYWNoZXMgU3BlY2lmaWVzIHRoZSBjYWNoZSB0byBwdXJnZS4gSXQgbWF5IG9uZSBvciBhIGNvbWJpbmF0aW9uCiAqIG9mIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzOgogKiBJTUFQX0dDX0VMVCAobWVzc2FnZSBjYWNoZSBlbGVtZW50cyksCiAqIElNQVBfR0NfRU5WIChlbnZlbG9wZSBhbmQgYm9kaWVzKSwKICogSU1BUF9HQ19URVhUUyAodGV4dHMpLgogKiBAdGhyb3dzIEltYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYXBfZ2MoJGltYXBfc3RyZWFtLCBpbnQgJGNhY2hlcyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFwX2djKCRpbWFwX3N0cmVhbSwgJGNhY2hlcyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBnaXZlbiBtZXNzYWdlIG51bWJlciBieSByZWFkaW5nIGl0cyBoZWFkZXJzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYXBfc3RyZWFtIEFuIElNQVAgc3RyZWFtIHJldHVybmVkIGJ5CiAqIGltYXBfb3Blbi4KICogQHBhcmFtIGludCAkbXNnX251bWJlciBUaGUgbWVzc2FnZSBudW1iZXIKICogQHBhcmFtIGludCAkZnJvbWxlbmd0aCBOdW1iZXIgb2YgY2hhcmFjdGVycyBmb3IgdGhlIGZldGNoZnJvbSBwcm9wZXJ0eS4KICogTXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KICogQHBhcmFtIGludCAkc3ViamVjdGxlbmd0aCBOdW1iZXIgb2YgY2hhcmFjdGVycyBmb3IgdGhlIGZldGNoc3ViamVjdCBwcm9wZXJ0eQogKiBNdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLgogKiBAcGFyYW0gc3RyaW5nICRkZWZhdWx0aG9zdAogKiBAcmV0dXJuIFxzdGRDbGFzcyBSZXR1cm5zIEZBTFNFIG9uIGVycm9yIG9yLCBpZiBzdWNjZXNzZnVsLCB0aGUgaW5mb3JtYXRpb24gaW4gYW4gb2JqZWN0IHdpdGggZm9sbG93aW5nIHByb3BlcnRpZXM6CiAqCiAqCiAqCiAqIHRvYWRkcmVzcyAtIGZ1bGwgdG86IGxpbmUsIHVwIHRvIDEwMjQgY2hhcmFjdGVycwogKgogKgogKgogKgogKiB0byAtIGFuIGFycmF5IG9mIG9iamVjdHMgZnJvbSB0aGUgVG86IGxpbmUsIHdpdGggdGhlIGZvbGxvd2luZwogKiBwcm9wZXJ0aWVzOiBwZXJzb25hbCwgYWRsLAogKiBtYWlsYm94LCBhbmQgaG9zdAogKgogKgogKgogKgogKiBmcm9tYWRkcmVzcyAtIGZ1bGwgZnJvbTogbGluZSwgdXAgdG8gMTAyNCBjaGFyYWN0ZXJzCiAqCiAqCiAqCiAqCiAqIGZyb20gLSBhbiBhcnJheSBvZiBvYmplY3RzIGZyb20gdGhlIEZyb206IGxpbmUsIHdpdGggdGhlIGZvbGxvd2luZwogKiBwcm9wZXJ0aWVzOiBwZXJzb25hbCwgYWRsLAogKiBtYWlsYm94LCBhbmQgaG9zdAogKgogKgogKgogKgogKiBjY2FkZHJlc3MgLSBmdWxsIGNjOiBsaW5lLCB1cCB0byAxMDI0IGNoYXJhY3RlcnMKICoKICoKICoKICoKICogY2MgLSBhbiBhcnJheSBvZiBvYmplY3RzIGZyb20gdGhlIENjOiBsaW5lLCB3aXRoIHRoZSBmb2xsb3dpbmcKICogcHJvcGVydGllczogcGVyc29uYWwsIGFkbCwKICogbWFpbGJveCwgYW5kIGhvc3QKICoKICoKICoKICoKICogYmNjYWRkcmVzcyAtIGZ1bGwgYmNjOiBsaW5lLCB1cCB0byAxMDI0IGNoYXJhY3RlcnMKICoKICoKICoKICoKICogYmNjIC0gYW4gYXJyYXkgb2Ygb2JqZWN0cyBmcm9tIHRoZSBCY2M6IGxpbmUsIHdpdGggdGhlIGZvbGxvd2luZwogKiBwcm9wZXJ0aWVzOiBwZXJzb25hbCwgYWRsLAogKiBtYWlsYm94LCBhbmQgaG9zdAogKgogKgogKgogKgogKiByZXBseV90b2FkZHJlc3MgLSBmdWxsIFJlcGx5LVRvOiBsaW5lLCB1cCB0byAxMDI0IGNoYXJhY3RlcnMKICoKICoKICoKICoKICogcmVwbHlfdG8gLSBhbiBhcnJheSBvZiBvYmplY3RzIGZyb20gdGhlIFJlcGx5LVRvOiBsaW5lLCB3aXRoIHRoZSBmb2xsb3dpbmcKICogcHJvcGVydGllczogcGVyc29uYWwsIGFkbCwKICogbWFpbGJveCwgYW5kIGhvc3QKICoKICoKICoKICoKICogc2VuZGVyYWRkcmVzcyAtIGZ1bGwgc2VuZGVyOiBsaW5lLCB1cCB0byAxMDI0IGNoYXJhY3RlcnMKICoKICoKICoKICoKICogc2VuZGVyIC0gYW4gYXJyYXkgb2Ygb2JqZWN0cyBmcm9tIHRoZSBTZW5kZXI6IGxpbmUsIHdpdGggdGhlIGZvbGxvd2luZwogKiBwcm9wZXJ0aWVzOiBwZXJzb25hbCwgYWRsLAogKiBtYWlsYm94LCBhbmQgaG9zdAogKgogKgogKgogKgogKiByZXR1cm5fcGF0aGFkZHJlc3MgLSBmdWxsIFJldHVybi1QYXRoOiBsaW5lLCB1cCB0byAxMDI0IGNoYXJhY3RlcnMKICoKICoKICoKICoKICogcmV0dXJuX3BhdGggLSBhbiBhcnJheSBvZiBvYmplY3RzIGZyb20gdGhlIFJldHVybi1QYXRoOiBsaW5lLCB3aXRoIHRoZQogKiBmb2xsb3dpbmcgcHJvcGVydGllczogcGVyc29uYWwsCiAqIGFkbCwgbWFpbGJveCwgYW5kCiAqIGhvc3QKICoKICoKICoKICoKICogcmVtYWlsIC0KICoKICoKICoKICoKICogZGF0ZSAtIFRoZSBtZXNzYWdlIGRhdGUgYXMgZm91bmQgaW4gaXRzIGhlYWRlcnMKICoKICoKICoKICoKICogRGF0ZSAtIFNhbWUgYXMgZGF0ZQogKgogKgogKgogKgogKiBzdWJqZWN0IC0gVGhlIG1lc3NhZ2Ugc3ViamVjdAogKgogKgogKgogKgogKiBTdWJqZWN0IC0gU2FtZSBhcyBzdWJqZWN0CiAqCiAqCiAqCiAqCiAqIGluX3JlcGx5X3RvIC0KICoKICoKICoKICoKICogbWVzc2FnZV9pZCAtCiAqCiAqCiAqCiAqCiAqIG5ld3Nncm91cHMgLQogKgogKgogKgogKgogKiBmb2xsb3d1cF90byAtCiAqCiAqCiAqCiAqCiAqIHJlZmVyZW5jZXMgLQogKgogKgogKgogKgogKiBSZWNlbnQgLSBSIGlmIHJlY2VudCBhbmQgc2VlbiwgTgogKiBpZiByZWNlbnQgYW5kIG5vdCBzZWVuLCAnICcgaWYgbm90IHJlY2VudC4KICoKICoKICoKICoKICogVW5zZWVuIC0gVSBpZiBub3Qgc2VlbiBBTkQgbm90IHJlY2VudCwgJyAnIGlmIHNlZW4KICogT1Igbm90IHNlZW4gYW5kIHJlY2VudAogKgogKgogKgogKgogKiBGbGFnZ2VkIC0gRiBpZiBmbGFnZ2VkLCAnICcgaWYgbm90IGZsYWdnZWQKICoKICoKICoKICoKICogQW5zd2VyZWQgLSBBIGlmIGFuc3dlcmVkLCAnICcgaWYgdW5hbnN3ZXJlZAogKgogKgogKgogKgogKiBEZWxldGVkIC0gRCBpZiBkZWxldGVkLCAnICcgaWYgbm90IGRlbGV0ZWQKICoKICoKICoKICoKICogRHJhZnQgLSBYIGlmIGRyYWZ0LCAnICcgaWYgbm90IGRyYWZ0CiAqCiAqCiAqCiAqCiAqIE1zZ25vIC0gVGhlIG1lc3NhZ2UgbnVtYmVyCiAqCiAqCiAqCiAqCiAqIE1haWxEYXRlIC0KICoKICoKICoKICoKICogU2l6ZSAtIFRoZSBtZXNzYWdlIHNpemUKICoKICoKICoKICoKICogdWRhdGUgLSBtYWlsIG1lc3NhZ2UgZGF0ZSBpbiBVbml4IHRpbWUKICoKICoKICoKICoKICogZmV0Y2hmcm9tIC0gZnJvbSBsaW5lIGZvcm1hdHRlZCB0byBmaXQgZnJvbWxlbmd0aAogKiBjaGFyYWN0ZXJzCiAqCiAqCiAqCiAqCiAqIGZldGNoc3ViamVjdCAtIHN1YmplY3QgbGluZSBmb3JtYXR0ZWQgdG8gZml0CiAqIHN1YmplY3RsZW5ndGggY2hhcmFjdGVycwogKgogKgogKgogKiBAdGhyb3dzIEltYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYXBfaGVhZGVyaW5mbygkaW1hcF9zdHJlYW0sIGludCAkbXNnX251bWJlciwgaW50ICRmcm9tbGVuZ3RoID0gMCwgaW50ICRzdWJqZWN0bGVuZ3RoID0gMCwgc3RyaW5nICRkZWZhdWx0aG9zdCA9IG51bGwpOiBcc3RkQ2xhc3MKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFwX2hlYWRlcmluZm8oJGltYXBfc3RyZWFtLCAkbXNnX251bWJlciwgJGZyb21sZW5ndGgsICRzdWJqZWN0bGVuZ3RoLCAkZGVmYXVsdGhvc3QpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBDcmVhdGUgYSBNSU1FIG1lc3NhZ2UgYmFzZWQgb24gdGhlIGdpdmVuIGVudmVsb3BlCiAqIGFuZCBib2R5IHNlY3Rpb25zLgogKgogKiBAcGFyYW0gYXJyYXkgJGVudmVsb3BlIEFuIGFzc29jaWF0aXZlIGFycmF5IG9mIGhlYWRlciBmaWVsZHMuIFZhbGlkIGtleXMgYXJlOiAicmVtYWlsIiwKICogInJldHVybl9wYXRoIiwgImRhdGUiLCAiZnJvbSIsICJyZXBseV90byIsICJpbl9yZXBseV90byIsICJzdWJqZWN0IiwKICogInRvIiwgImNjIiwgImJjYyIgYW5kICJtZXNzYWdlX2lkIiwgd2hpY2ggc2V0IHRoZSByZXNwZWN0aXZlIG1lc3NhZ2UgaGVhZGVycyB0byB0aGUgZ2l2ZW4gc3RyaW5nLgogKiBUbyBzZXQgYWRkaXRpb25hbCBoZWFkZXJzLCB0aGUga2V5ICJjdXN0b21faGVhZGVycyIgaXMgc3VwcG9ydGVkLCB3aGljaCBleHBlY3RzCiAqIGFuIGFycmF5IG9mIHRob3NlIGhlYWRlcnMsIGUuZy4gWyJVc2VyLUFnZW50OiBNeSBNYWlsIENsaWVudCJdLgogKiBAcGFyYW0gYXJyYXkgJGJvZHkgQW4gaW5kZXhlZCBhcnJheSBvZiBib2RpZXMuIFRoZSBmaXJzdCBib2R5IGlzIHRoZSBtYWluIGJvZHkgb2YgdGhlIG1lc3NhZ2U7CiAqIG9ubHkgaWYgaXQgaGFzIGEgdHlwZSBvZiBUWVBFTVVMVElQQVJULCBmdXJ0aGVyIGJvZGllcwogKiBhcmUgcHJvY2Vzc2VkOyB0aGVzZSBib2RpZXMgY29uc3RpdHV0ZSB0aGUgYm9kaWVzIG9mIHRoZSBwYXJ0cy4KICoKICoKICogQm9keSBBcnJheSBTdHJ1Y3R1cmUKICoKICoKICoKICogS2V5CiAqIFR5cGUKICogRGVzY3JpcHRpb24KICoKICoKICoKICoKICogdHlwZQogKiBpbnQKICoKICogVGhlIE1JTUUgdHlwZS4KICogT25lIG9mIFRZUEVURVhUIChkZWZhdWx0KSwgVFlQRU1VTFRJUEFSVCwKICogVFlQRU1FU1NBR0UsIFRZUEVBUFBMSUNBVElPTiwKICogVFlQRUFVRElPLCBUWVBFSU1BR0UsCiAqIFRZUEVNT0RFTCBvciBUWVBFT1RIRVIuCiAqCiAqCiAqCiAqIGVuY29kaW5nCiAqIGludAogKgogKiBUaGUgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZy4KICogT25lIG9mIEVOQzdCSVQgKGRlZmF1bHQpLCBFTkM4QklULAogKiBFTkNCSU5BUlksIEVOQ0JBU0U2NCwKICogRU5DUVVPVEVEUFJJTlRBQkxFIG9yIEVOQ09USEVSLgogKgogKgogKgogKiBjaGFyc2V0CiAqIHN0cmluZwogKiBUaGUgY2hhcnNldCBwYXJhbWV0ZXIgb2YgdGhlIE1JTUUgdHlwZS4KICoKICoKICogdHlwZS5wYXJhbWV0ZXJzCiAqIGFycmF5CiAqIEFuIGFzc29jaWF0aXZlIGFycmF5IG9mIENvbnRlbnQtVHlwZSBwYXJhbWV0ZXIgbmFtZXMgYW5kIHRoZWlyIHZhbHVlcy4KICoKICoKICogc3VidHlwZQogKiBzdHJpbmcKICogVGhlIE1JTUUgc3VidHlwZSwgZS5nLiAnanBlZycgZm9yIFRZUEVJTUFHRS4KICoKICoKICogaWQKICogc3RyaW5nCiAqIFRoZSBDb250ZW50LUlELgogKgogKgogKiBkZXNjcmlwdGlvbgogKiBzdHJpbmcKICogVGhlIENvbnRlbnQtRGVzY3JpcHRpb24uCiAqCiAqCiAqIGRpc3Bvc2l0aW9uLnR5cGUKICogc3RyaW5nCiAqIFRoZSBDb250ZW50LURpc3Bvc2l0aW9uLCBlLmcuICdhdHRhY2htZW50Jy4KICoKICoKICogZGlzcG9zaXRpb24KICogYXJyYXkKICogQW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgQ29udGVudC1EaXNwb3NpdGlvbiBwYXJhbWV0ZXIgbmFtZXMgYW5kIHZhbHVlcy4KICoKICoKICogY29udGVudHMuZGF0YQogKiBzdHJpbmcKICogVGhlIHBheWxvYWQuCiAqCiAqCiAqIGxpbmVzCiAqIGludAogKiBUaGUgc2l6ZSBvZiB0aGUgcGF5bG9hZCBpbiBsaW5lcy4KICoKICoKICogYnl0ZXMKICogaW50CiAqIFRoZSBzaXplIG9mIHRoZSBwYXlsb2FkIGluIGJ5dGVzLgogKgogKgogKiBtZDUKICogc3RyaW5nCiAqIFRoZSBNRDUgY2hlY2tzdW0gb2YgdGhlIHBheWxvYWQuCiAqCiAqCiAqCiAqCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIE1JTUUgbWVzc2FnZSBhcyBzdHJpbmcuCiAqIEB0aHJvd3MgSW1hcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hcF9tYWlsX2NvbXBvc2UoYXJyYXkgJGVudmVsb3BlLCBhcnJheSAkYm9keSk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYXBfbWFpbF9jb21wb3NlKCRlbnZlbG9wZSwgJGJvZHkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBDb3BpZXMgbWFpbCBtZXNzYWdlcyBzcGVjaWZpZWQgYnkgbXNnbGlzdAogKiB0byBzcGVjaWZpZWQgbWFpbGJveC4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFwX3N0cmVhbSBBbiBJTUFQIHN0cmVhbSByZXR1cm5lZCBieQogKiBpbWFwX29wZW4uCiAqIEBwYXJhbSBzdHJpbmcgJG1zZ2xpc3QgbXNnbGlzdCBpcyBhIHJhbmdlIG5vdCBqdXN0IG1lc3NhZ2UKICogbnVtYmVycyAoYXMgZGVzY3JpYmVkIGluIFJGQzIwNjApLgogKiBAcGFyYW0gc3RyaW5nICRtYWlsYm94IFRoZSBtYWlsYm94IG5hbWUsIHNlZSBpbWFwX29wZW4gZm9yIG1vcmUKICogaW5mb3JtYXRpb24KICogQHBhcmFtIGludCAkb3B0aW9ucyBvcHRpb25zIGlzIGEgYml0bWFzayBvZiBvbmUgb3IgbW9yZSBvZgogKgogKgogKgogKiBDUF9VSUQgLSB0aGUgc2VxdWVuY2UgbnVtYmVycyBjb250YWluIFVJRFMKICoKICoKICoKICoKICogQ1BfTU9WRSAtIERlbGV0ZSB0aGUgbWVzc2FnZXMgZnJvbQogKiB0aGUgY3VycmVudCBtYWlsYm94IGFmdGVyIGNvcHlpbmcKICoKICoKICoKICogQHRocm93cyBJbWFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFwX21haWxfY29weSgkaW1hcF9zdHJlYW0sIHN0cmluZyAkbXNnbGlzdCwgc3RyaW5nICRtYWlsYm94LCBpbnQgJG9wdGlvbnMgPSAwKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYXBfbWFpbF9jb3B5KCRpbWFwX3N0cmVhbSwgJG1zZ2xpc3QsICRtYWlsYm94LCAkb3B0aW9ucyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBNb3ZlcyBtYWlsIG1lc3NhZ2VzIHNwZWNpZmllZCBieSBtc2dsaXN0IHRvIHRoZQogKiBzcGVjaWZpZWQgbWFpbGJveC4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFwX3N0cmVhbSBBbiBJTUFQIHN0cmVhbSByZXR1cm5lZCBieQogKiBpbWFwX29wZW4uCiAqIEBwYXJhbSBzdHJpbmcgJG1zZ2xpc3QgbXNnbGlzdCBpcyBhIHJhbmdlIG5vdCBqdXN0IG1lc3NhZ2UgbnVtYmVycwogKiAoYXMgZGVzY3JpYmVkIGluIFJGQzIwNjApLgogKiBAcGFyYW0gc3RyaW5nICRtYWlsYm94IFRoZSBtYWlsYm94IG5hbWUsIHNlZSBpbWFwX29wZW4gZm9yIG1vcmUKICogaW5mb3JtYXRpb24KICogQHBhcmFtIGludCAkb3B0aW9ucyBvcHRpb25zIGlzIGEgYml0bWFzayBhbmQgbWF5IGNvbnRhaW4gdGhlIHNpbmdsZSBvcHRpb246CiAqCiAqCiAqCiAqIENQX1VJRCAtIHRoZSBzZXF1ZW5jZSBudW1iZXJzIGNvbnRhaW4gVUlEUwogKgogKgogKgogKiBAdGhyb3dzIEltYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYXBfbWFpbF9tb3ZlKCRpbWFwX3N0cmVhbSwgc3RyaW5nICRtc2dsaXN0LCBzdHJpbmcgJG1haWxib3gsIGludCAkb3B0aW9ucyA9IDApOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hcF9tYWlsX21vdmUoJGltYXBfc3RyZWFtLCAkbXNnbGlzdCwgJG1haWxib3gsICRvcHRpb25zKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHNlbmRpbmcgb2YgZW1haWxzIHdpdGggY29ycmVjdCBoYW5kbGluZyBvZgogKiBDYyBhbmQgQmNjIHJlY2VpdmVycy4KICoKICogVGhlIHBhcmFtZXRlcnMgdG8sIGNjCiAqIGFuZCBiY2MgYXJlIGFsbCBzdHJpbmdzIGFuZCBhcmUgYWxsIHBhcnNlZAogKiBhcyBSRkM4MjIgYWRkcmVzcyBsaXN0cy4KICoKICogQHBhcmFtIHN0cmluZyAkdG8gVGhlIHJlY2VpdmVyCiAqIEBwYXJhbSBzdHJpbmcgJHN1YmplY3QgVGhlIG1haWwgc3ViamVjdAogKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlIFRoZSBtYWlsIGJvZHksIHNlZSBpbWFwX21haWxfY29tcG9zZQogKiBAcGFyYW0gc3RyaW5nICRhZGRpdGlvbmFsX2hlYWRlcnMgQXMgc3RyaW5nIHdpdGggYWRkaXRpb25hbCBoZWFkZXJzIHRvIGJlIHNldCBvbiB0aGUgbWFpbAogKiBAcGFyYW0gc3RyaW5nICRjYwogKiBAcGFyYW0gc3RyaW5nICRiY2MgVGhlIHJlY2VpdmVycyBzcGVjaWZpZWQgaW4gYmNjIHdpbGwgZ2V0IHRoZQogKiBtYWlsLCBidXQgYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIGhlYWRlcnMuCiAqIEBwYXJhbSBzdHJpbmcgJHJwYXRoIFVzZSB0aGlzIHBhcmFtZXRlciB0byBzcGVjaWZ5IHJldHVybiBwYXRoIHVwb24gbWFpbCBkZWxpdmVyeSBmYWlsdXJlLgogKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHVzaW5nIFBIUCBhcyBhIG1haWwgY2xpZW50IGZvciBtdWx0aXBsZSB1c2Vycy4KICogQHRocm93cyBJbWFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFwX21haWwoc3RyaW5nICR0bywgc3RyaW5nICRzdWJqZWN0LCBzdHJpbmcgJG1lc3NhZ2UsIHN0cmluZyAkYWRkaXRpb25hbF9oZWFkZXJzID0gbnVsbCwgc3RyaW5nICRjYyA9IG51bGwsIHN0cmluZyAkYmNjID0gbnVsbCwgc3RyaW5nICRycGF0aCA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hcF9tYWlsKCR0bywgJHN1YmplY3QsICRtZXNzYWdlLCAkYWRkaXRpb25hbF9oZWFkZXJzLCAkY2MsICRiY2MsICRycGF0aCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBDaGVja3MgdGhlIGN1cnJlbnQgbWFpbGJveCBzdGF0dXMgb24gdGhlIHNlcnZlci4gSXQgaXMgc2ltaWxhciB0bwogKiBpbWFwX3N0YXR1cywgYnV0IHdpbGwgYWRkaXRpb25hbGx5IHN1bSB1cCB0aGUgc2l6ZSBvZgogKiBhbGwgbWVzc2FnZXMgaW4gdGhlIG1haWxib3gsIHdoaWNoIHdpbGwgdGFrZSBzb21lIGFkZGl0aW9uYWwgdGltZSB0bwogKiBleGVjdXRlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYXBfc3RyZWFtIEFuIElNQVAgc3RyZWFtIHJldHVybmVkIGJ5CiAqIGltYXBfb3Blbi4KICogQHJldHVybiBcc3RkQ2xhc3MgUmV0dXJucyB0aGUgaW5mb3JtYXRpb24gaW4gYW4gb2JqZWN0IHdpdGggZm9sbG93aW5nIHByb3BlcnRpZXM6CiAqCiAqIE1haWxib3ggcHJvcGVydGllcwogKgogKgogKgogKiBEYXRlCiAqIGRhdGUgb2YgbGFzdCBjaGFuZ2UgKGN1cnJlbnQgZGF0ZXRpbWUpCiAqCiAqCiAqIERyaXZlcgogKiBkcml2ZXIKICoKICoKICogTWFpbGJveAogKiBuYW1lIG9mIHRoZSBtYWlsYm94CiAqCiAqCiAqIE5tc2dzCiAqIG51bWJlciBvZiBtZXNzYWdlcwogKgogKgogKiBSZWNlbnQKICogbnVtYmVyIG9mIHJlY2VudCBtZXNzYWdlcwogKgogKgogKiBVbnJlYWQKICogbnVtYmVyIG9mIHVucmVhZCBtZXNzYWdlcwogKgogKgogKiBEZWxldGVkCiAqIG51bWJlciBvZiBkZWxldGVkIG1lc3NhZ2VzCiAqCiAqCiAqIFNpemUKICogbWFpbGJveCBzaXplCiAqCiAqCiAqCiAqCiAqCiAqIFJldHVybnMgRkFMU0Ugb24gZmFpbHVyZS4KICogQHRocm93cyBJbWFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFwX21haWxib3htc2dpbmZvKCRpbWFwX3N0cmVhbSk6IFxzdGRDbGFzcwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYXBfbWFpbGJveG1zZ2luZm8oJGltYXBfc3RyZWFtKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogRGVjb2RlIGEgbW9kaWZpZWQgVVRGLTcgKGFzIHNwZWNpZmllZCBpbiBSRkMgMjA2MCwgc2VjdGlvbiA1LjEuMykgc3RyaW5nIHRvIFVURi04LgogKgogKiBAcGFyYW0gc3RyaW5nICRpbiBBIHN0cmluZyBlbmNvZGVkIGluIG1vZGlmaWVkIFVURi03LgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGluIGNvbnZlcnRlZCB0byBVVEYtOC4KICogQHRocm93cyBJbWFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFwX211dGY3X3RvX3V0Zjgoc3RyaW5nICRpbik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYXBfbXV0ZjdfdG9fdXRmOCgkaW4pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBHZXRzIHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgaW4gdGhlIGN1cnJlbnQgbWFpbGJveC4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFwX3N0cmVhbSBBbiBJTUFQIHN0cmVhbSByZXR1cm5lZCBieQogKiBpbWFwX29wZW4uCiAqIEByZXR1cm4gaW50IFJldHVybiB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIGluIHRoZSBjdXJyZW50IG1haWxib3gsIGFzIGFuIGludGVnZXIuCiAqIEB0aHJvd3MgSW1hcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hcF9udW1fbXNnKCRpbWFwX3N0cmVhbSk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYXBfbnVtX21zZygkaW1hcF9zdHJlYW0pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBPcGVucyBhbiBJTUFQIHN0cmVhbSB0byBhIG1haWxib3guCiAqCiAqIFRoaXMgZnVuY3Rpb24gY2FuIGFsc28gYmUgdXNlZCB0byBvcGVuIHN0cmVhbXMgdG8gUE9QMyBhbmQKICogTk5UUCBzZXJ2ZXJzLCBidXQgc29tZSBmdW5jdGlvbnMgYW5kIGZlYXR1cmVzIGFyZSBvbmx5CiAqIGF2YWlsYWJsZSBvbiBJTUFQIHNlcnZlcnMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJG1haWxib3ggQSBtYWlsYm94IG5hbWUgY29uc2lzdHMgb2YgYSBzZXJ2ZXIgYW5kIGEgbWFpbGJveCBwYXRoIG9uIHRoaXMgc2VydmVyLgogKiBUaGUgc3BlY2lhbCBuYW1lIElOQk9YIHN0YW5kcyBmb3IgdGhlIGN1cnJlbnQgdXNlcnMKICogcGVyc29uYWwgbWFpbGJveC4gTWFpbGJveCBuYW1lcyB0aGF0IGNvbnRhaW4gaW50ZXJuYXRpb25hbCBjaGFyYWN0ZXJzCiAqIGJlc2lkZXMgdGhvc2UgaW4gdGhlIHByaW50YWJsZSBBU0NJSSBzcGFjZSBoYXZlIHRvIGJlIGVuY29kZWQgd2l0aAogKiBpbWFwX3V0ZjdfZW5jb2RlLgogKgogKiBUaGUgc2VydmVyIHBhcnQsIHdoaWNoIGlzIGVuY2xvc2VkIGluICd7JyBhbmQgJ30nLCBjb25zaXN0cyBvZiB0aGUgc2VydmVycwogKiBuYW1lIG9yIGlwIGFkZHJlc3MsIGFuIG9wdGlvbmFsIHBvcnQgKHByZWZpeGVkIGJ5ICc6JyksIGFuZCBhbiBvcHRpb25hbAogKiBwcm90b2NvbCBzcGVjaWZpY2F0aW9uIChwcmVmaXhlZCBieSAnLycpLgogKgogKiBUaGUgc2VydmVyIHBhcnQgaXMgbWFuZGF0b3J5IGluIGFsbCBtYWlsYm94CiAqIHBhcmFtZXRlcnMuCiAqCiAqIEFsbCBuYW1lcyB3aGljaCBzdGFydCB3aXRoIHsgYXJlIHJlbW90ZSBuYW1lcywgYW5kIGFyZQogKiBpbiB0aGUgZm9ybSAieyIgcmVtb3RlX3N5c3RlbV9uYW1lIFsiOiIgcG9ydF0gW2ZsYWdzXSAifSIKICogW21haWxib3hfbmFtZV0gd2hlcmU6CiAqCiAqCiAqCiAqIHJlbW90ZV9zeXN0ZW1fbmFtZSAtIEludGVybmV0IGRvbWFpbiBuYW1lIG9yCiAqIGJyYWNrZXRlZCBJUCBhZGRyZXNzIG9mIHNlcnZlci4KICoKICoKICoKICoKICogcG9ydCAtIG9wdGlvbmFsIFRDUCBwb3J0IG51bWJlciwgZGVmYXVsdCBpcyB0aGUKICogZGVmYXVsdCBwb3J0IGZvciB0aGF0IHNlcnZpY2UKICoKICoKICoKICoKICogZmxhZ3MgLSBvcHRpb25hbCBmbGFncywgc2VlIGZvbGxvd2luZyB0YWJsZS4KICoKICoKICoKICoKICogbWFpbGJveF9uYW1lIC0gcmVtb3RlIG1haWxib3ggbmFtZSwgZGVmYXVsdCBpcyBJTkJPWAogKgogKgogKgogKgogKgogKiBPcHRpb25hbCBmbGFncyBmb3IgbmFtZXMKICoKICoKICoKICogRmxhZwogKiBEZXNjcmlwdGlvbgogKgogKgogKgogKgogKiAvc2VydmljZT1zZXJ2aWNlCiAqIG1haWxib3ggYWNjZXNzIHNlcnZpY2UsIGRlZmF1bHQgaXMgImltYXAiCiAqCiAqCiAqIC91c2VyPXVzZXIKICogcmVtb3RlIHVzZXIgbmFtZSBmb3IgbG9naW4gb24gdGhlIHNlcnZlcgogKgogKgogKiAvYXV0aHVzZXI9dXNlcgogKiByZW1vdGUgYXV0aGVudGljYXRpb24gdXNlcjsgaWYgc3BlY2lmaWVkIHRoaXMgaXMgdGhlIHVzZXIgbmFtZQogKiB3aG9zZSBwYXNzd29yZCBpcyB1c2VkIChlLmcuIGFkbWluaXN0cmF0b3IpCiAqCiAqCiAqIC9hbm9ueW1vdXMKICogcmVtb3RlIGFjY2VzcyBhcyBhbm9ueW1vdXMgdXNlcgogKgogKgogKiAvZGVidWcKICogcmVjb3JkIHByb3RvY29sIHRlbGVtZXRyeSBpbiBhcHBsaWNhdGlvbidzIGRlYnVnIGxvZwogKgogKgogKiAvc2VjdXJlCiAqIGRvIG5vdCB0cmFuc21pdCBhIHBsYWludGV4dCBwYXNzd29yZCBvdmVyIHRoZSBuZXR3b3JrCiAqCiAqCiAqIC9pbWFwLCAvaW1hcDIsCiAqIC9pbWFwMmJpcywgL2ltYXA0LAogKiAvaW1hcDRyZXYxCiAqIGVxdWl2YWxlbnQgdG8gL3NlcnZpY2U9aW1hcAogKgogKgogKiAvcG9wMwogKiBlcXVpdmFsZW50IHRvIC9zZXJ2aWNlPXBvcDMKICoKICoKICogL25udHAKICogZXF1aXZhbGVudCB0byAvc2VydmljZT1ubnRwCiAqCiAqCiAqIC9ub3JzaAogKiBkbyBub3QgdXNlIHJzaCBvciBzc2ggdG8gZXN0YWJsaXNoIGEgcHJlYXV0aGVudGljYXRlZCBJTUFQCiAqIHNlc3Npb24KICoKICoKICogL3NzbAogKiB1c2UgdGhlIFNlY3VyZSBTb2NrZXQgTGF5ZXIgdG8gZW5jcnlwdCB0aGUgc2Vzc2lvbgogKgogKgogKiAvdmFsaWRhdGUtY2VydAogKiB2YWxpZGF0ZSBjZXJ0aWZpY2F0ZXMgZnJvbSBUTFMvU1NMIHNlcnZlciAodGhpcyBpcyB0aGUgZGVmYXVsdAogKiBiZWhhdmlvcikKICoKICoKICogL25vdmFsaWRhdGUtY2VydAogKiBkbyBub3QgdmFsaWRhdGUgY2VydGlmaWNhdGVzIGZyb20gVExTL1NTTCBzZXJ2ZXIsIG5lZWRlZCBpZgogKiBzZXJ2ZXIgdXNlcyBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZXMKICoKICoKICogL3RscwogKiBmb3JjZSB1c2Ugb2Ygc3RhcnQtVExTIHRvIGVuY3J5cHQgdGhlIHNlc3Npb24sIGFuZCByZWplY3QKICogY29ubmVjdGlvbiB0byBzZXJ2ZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgaXQKICoKICoKICogL25vdGxzCiAqIGRvIG5vdCBkbyBzdGFydC1UTFMgdG8gZW5jcnlwdCB0aGUgc2Vzc2lvbiwgZXZlbiB3aXRoIHNlcnZlcnMKICogdGhhdCBzdXBwb3J0IGl0CiAqCiAqCiAqIC9yZWFkb25seQogKiByZXF1ZXN0IHJlYWQtb25seSBtYWlsYm94IG9wZW4gKElNQVAgb25seTsgaWdub3JlZCBvbiBOTlRQLCBhbmQKICogYW4gZXJyb3Igd2l0aCBTTVRQIGFuZCBQT1AzKQogKgogKgogKgogKgogKiBAcGFyYW0gc3RyaW5nICR1c2VybmFtZSBUaGUgdXNlciBuYW1lCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkIFRoZSBwYXNzd29yZCBhc3NvY2lhdGVkIHdpdGggdGhlIHVzZXJuYW1lCiAqIEBwYXJhbSBpbnQgJG9wdGlvbnMgVGhlIG9wdGlvbnMgYXJlIGEgYml0IG1hc2sgd2l0aCBvbmUgb3IgbW9yZSBvZgogKiB0aGUgZm9sbG93aW5nOgogKgogKgogKgogKiBPUF9SRUFET05MWSAtIE9wZW4gbWFpbGJveCByZWFkLW9ubHkKICoKICoKICoKICoKICogT1BfQU5PTllNT1VTIC0gRG9uJ3QgdXNlIG9yIHVwZGF0ZSBhCiAqIC5uZXdzcmMgZm9yIG5ld3MgKE5OVFAgb25seSkKICoKICoKICoKICoKICogT1BfSEFMRk9QRU4gLSBGb3IgSU1BUAogKiBhbmQgTk5UUCBuYW1lcywgb3BlbiBhIGNvbm5lY3Rpb24gYnV0CiAqIGRvbid0IG9wZW4gYSBtYWlsYm94LgogKgogKgogKgogKgogKiBDTF9FWFBVTkdFIC0gRXhwdW5nZSBtYWlsYm94IGF1dG9tYXRpY2FsbHkgdXBvbiBtYWlsYm94IGNsb3NlCiAqIChzZWUgYWxzbyBpbWFwX2RlbGV0ZSBhbmQKICogaW1hcF9leHB1bmdlKQogKgogKgogKgogKgogKiBPUF9ERUJVRyAtIERlYnVnIHByb3RvY29sIG5lZ290aWF0aW9ucwogKgogKgogKgogKgogKiBPUF9TSE9SVENBQ0hFIC0gU2hvcnQgKGVsdC1vbmx5KSBjYWNoaW5nCiAqCiAqCiAqCiAqCiAqIE9QX1NJTEVOVCAtIERvbid0IHBhc3MgdXAgZXZlbnRzIChpbnRlcm5hbCB1c2UpCiAqCiAqCiAqCiAqCiAqIE9QX1BST1RPVFlQRSAtIFJldHVybiBkcml2ZXIgcHJvdG90eXBlCiAqCiAqCiAqCiAqCiAqIE9QX1NFQ1VSRSAtIERvbid0IGRvIG5vbi1zZWN1cmUgYXV0aGVudGljYXRpb24KICoKICoKICoKICogQHBhcmFtIGludCAkbl9yZXRyaWVzIE51bWJlciBvZiBtYXhpbXVtIGNvbm5lY3QgYXR0ZW1wdHMKICogQHBhcmFtIGFycmF5fG51bGwgJHBhcmFtcyBDb25uZWN0aW9uIHBhcmFtZXRlcnMsIHRoZSBmb2xsb3dpbmcgKHN0cmluZykga2V5cyBtYXliZSB1c2VkCiAqIHRvIHNldCBvbmUgb3IgbW9yZSBjb25uZWN0aW9uIHBhcmFtZXRlcnM6CiAqCiAqCiAqCiAqIERJU0FCTEVfQVVUSEVOVElDQVRPUiAtIERpc2FibGUgYXV0aGVudGljYXRpb24gcHJvcGVydGllcwogKgogKgogKgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYW4gSU1BUCBzdHJlYW0gb24gc3VjY2Vzcy4KICogQHRocm93cyBJbWFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFwX29wZW4oc3RyaW5nICRtYWlsYm94LCBzdHJpbmcgJHVzZXJuYW1lLCBzdHJpbmcgJHBhc3N3b3JkLCBpbnQgJG9wdGlvbnMgPSAwLCBpbnQgJG5fcmV0cmllcyA9IDAsID9hcnJheSAkcGFyYW1zID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFwX29wZW4oJG1haWxib3gsICR1c2VybmFtZSwgJHBhc3N3b3JkLCAkb3B0aW9ucywgJG5fcmV0cmllcywgJHBhcmFtcyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gcmVuYW1lcyBvbiBvbGQgbWFpbGJveCB0byBuZXcgbWFpbGJveCAoc2VlCiAqIGltYXBfb3BlbiBmb3IgdGhlIGZvcm1hdCBvZgogKiBtYm94IG5hbWVzKS4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFwX3N0cmVhbSBBbiBJTUFQIHN0cmVhbSByZXR1cm5lZCBieQogKiBpbWFwX29wZW4uCiAqIEBwYXJhbSBzdHJpbmcgJG9sZF9tYm94IFRoZSBvbGQgbWFpbGJveCBuYW1lLCBzZWUgaW1hcF9vcGVuIGZvciBtb3JlCiAqIGluZm9ybWF0aW9uCiAqIEBwYXJhbSBzdHJpbmcgJG5ld19tYm94IFRoZSBuZXcgbWFpbGJveCBuYW1lLCBzZWUgaW1hcF9vcGVuIGZvciBtb3JlCiAqIGluZm9ybWF0aW9uCiAqIEB0aHJvd3MgSW1hcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hcF9yZW5hbWVtYWlsYm94KCRpbWFwX3N0cmVhbSwgc3RyaW5nICRvbGRfbWJveCwgc3RyaW5nICRuZXdfbWJveCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFwX3JlbmFtZW1haWxib3goJGltYXBfc3RyZWFtLCAkb2xkX21ib3gsICRuZXdfbWJveCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTYXZlcyBhIHBhcnQgb3IgdGhlIHdob2xlIGJvZHkgb2YgdGhlIHNwZWNpZmllZCBtZXNzYWdlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYXBfc3RyZWFtIEFuIElNQVAgc3RyZWFtIHJldHVybmVkIGJ5CiAqIGltYXBfb3Blbi4KICogQHBhcmFtIHN0cmluZ3xyZXNvdXJjZSAkZmlsZSBUaGUgcGF0aCB0byB0aGUgc2F2ZWQgZmlsZSBhcyBhIHN0cmluZywgb3IgYSB2YWxpZCBmaWxlIGRlc2NyaXB0b3IKICogcmV0dXJuZWQgYnkgZm9wZW4uCiAqIEBwYXJhbSBpbnQgJG1zZ19udW1iZXIgVGhlIG1lc3NhZ2UgbnVtYmVyCiAqIEBwYXJhbSBzdHJpbmcgJHBhcnRfbnVtYmVyIFRoZSBwYXJ0IG51bWJlci4gSXQgaXMgYSBzdHJpbmcgb2YgaW50ZWdlcnMgZGVsaW1pdGVkIGJ5IHBlcmlvZCB3aGljaAogKiBpbmRleCBpbnRvIGEgYm9keSBwYXJ0IGxpc3QgYXMgcGVyIHRoZSBJTUFQNCBzcGVjaWZpY2F0aW9uCiAqIEBwYXJhbSBpbnQgJG9wdGlvbnMgQSBiaXRtYXNrIHdpdGggb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZzoKICoKICoKICoKICogRlRfVUlEIC0gVGhlIG1zZ19udW1iZXIgaXMgYSBVSUQKICoKICoKICoKICoKICogRlRfUEVFSyAtIERvIG5vdCBzZXQgdGhlIFxTZWVuIGZsYWcgaWYKICogbm90IGFscmVhZHkgc2V0CiAqCiAqCiAqCiAqCiAqIEZUX0lOVEVSTkFMIC0gVGhlIHJldHVybiBzdHJpbmcgaXMgaW4KICogaW50ZXJuYWwgZm9ybWF0LCB3aWxsIG5vdCBjYW5vbmljYWxpemUgdG8gQ1JMRi4KICoKICoKICoKICogQHRocm93cyBJbWFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFwX3NhdmVib2R5KCRpbWFwX3N0cmVhbSwgJGZpbGUsIGludCAkbXNnX251bWJlciwgc3RyaW5nICRwYXJ0X251bWJlciA9ICIiLCBpbnQgJG9wdGlvbnMgPSAwKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYXBfc2F2ZWJvZHkoJGltYXBfc3RyZWFtLCAkZmlsZSwgJG1zZ19udW1iZXIsICRwYXJ0X251bWJlciwgJG9wdGlvbnMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyBhbiB1cHBlciBsaW1pdCBxdW90YSBvbiBhIHBlciBtYWlsYm94IGJhc2lzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYXBfc3RyZWFtIEFuIElNQVAgc3RyZWFtIHJldHVybmVkIGJ5CiAqIGltYXBfb3Blbi4KICogQHBhcmFtIHN0cmluZyAkcXVvdGFfcm9vdCBUaGUgbWFpbGJveCB0byBoYXZlIGEgcXVvdGEgc2V0LiBUaGlzIHNob3VsZCBmb2xsb3cgdGhlIElNQVAgc3RhbmRhcmQKICogZm9ybWF0IGZvciBhIG1haWxib3g6IHVzZXIubmFtZS4KICogQHBhcmFtIGludCAkcXVvdGFfbGltaXQgVGhlIG1heGltdW0gc2l6ZSAoaW4gS0IpIGZvciB0aGUgcXVvdGFfcm9vdAogKiBAdGhyb3dzIEltYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYXBfc2V0X3F1b3RhKCRpbWFwX3N0cmVhbSwgc3RyaW5nICRxdW90YV9yb290LCBpbnQgJHF1b3RhX2xpbWl0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYXBfc2V0X3F1b3RhKCRpbWFwX3N0cmVhbSwgJHF1b3RhX3Jvb3QsICRxdW90YV9saW1pdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIHRoZSBBQ0wgZm9yIGEgZ2l2aW5nIG1haWxib3guCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcF9zdHJlYW0gQW4gSU1BUCBzdHJlYW0gcmV0dXJuZWQgYnkKICogaW1hcF9vcGVuLgogKiBAcGFyYW0gc3RyaW5nICRtYWlsYm94IFRoZSBtYWlsYm94IG5hbWUsIHNlZSBpbWFwX29wZW4gZm9yIG1vcmUKICogaW5mb3JtYXRpb24KICogQHBhcmFtIHN0cmluZyAkaWQgVGhlIHVzZXIgdG8gZ2l2ZSB0aGUgcmlnaHRzIHRvLgogKiBAcGFyYW0gc3RyaW5nICRyaWdodHMgVGhlIHJpZ2h0cyB0byBnaXZlIHRvIHRoZSB1c2VyLiBQYXNzaW5nIGFuIGVtcHR5IHN0cmluZyB3aWxsIGRlbGV0ZQogKiBhY2wuCiAqIEB0aHJvd3MgSW1hcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hcF9zZXRhY2woJGltYXBfc3RyZWFtLCBzdHJpbmcgJG1haWxib3gsIHN0cmluZyAkaWQsIHN0cmluZyAkcmlnaHRzKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYXBfc2V0YWNsKCRpbWFwX3N0cmVhbSwgJG1haWxib3gsICRpZCwgJHJpZ2h0cyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBDYXVzZXMgYSBzdG9yZSB0byBhZGQgdGhlIHNwZWNpZmllZCBmbGFnIHRvIHRoZQogKiBmbGFncyBzZXQgZm9yIHRoZSBtZXNzYWdlcyBpbiB0aGUgc3BlY2lmaWVkCiAqIHNlcXVlbmNlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYXBfc3RyZWFtIEFuIElNQVAgc3RyZWFtIHJldHVybmVkIGJ5CiAqIGltYXBfb3Blbi4KICogQHBhcmFtIHN0cmluZyAkc2VxdWVuY2UgQSBzZXF1ZW5jZSBvZiBtZXNzYWdlIG51bWJlcnMuIFlvdSBjYW4gZW51bWVyYXRlIGRlc2lyZWQgbWVzc2FnZXMKICogd2l0aCB0aGUgWCxZIHN5bnRheCwgb3IgcmV0cmlldmUgYWxsIG1lc3NhZ2VzCiAqIHdpdGhpbiBhbiBpbnRlcnZhbCB3aXRoIHRoZSBYOlkgc3ludGF4CiAqIEBwYXJhbSBzdHJpbmcgJGZsYWcgVGhlIGZsYWdzIHdoaWNoIHlvdSBjYW4gc2V0IGFyZSBcU2VlbiwKICogXEFuc3dlcmVkLCBcRmxhZ2dlZCwKICogXERlbGV0ZWQsIGFuZCBcRHJhZnQgYXMKICogZGVmaW5lZCBieSBSRkMyMDYwLgogKiBAcGFyYW0gaW50ICRvcHRpb25zIEEgYml0IG1hc2sgdGhhdCBtYXkgY29udGFpbiB0aGUgc2luZ2xlIG9wdGlvbjoKICoKICoKICoKICogU1RfVUlEIC0gVGhlIHNlcXVlbmNlIGFyZ3VtZW50IGNvbnRhaW5zIFVJRHMKICogaW5zdGVhZCBvZiBzZXF1ZW5jZSBudW1iZXJzCiAqCiAqCiAqCiAqIEB0aHJvd3MgSW1hcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hcF9zZXRmbGFnX2Z1bGwoJGltYXBfc3RyZWFtLCBzdHJpbmcgJHNlcXVlbmNlLCBzdHJpbmcgJGZsYWcsIGludCAkb3B0aW9ucyA9IE5JTCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFwX3NldGZsYWdfZnVsbCgkaW1hcF9zdHJlYW0sICRzZXF1ZW5jZSwgJGZsYWcsICRvcHRpb25zKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEdldHMgYW5kIHNvcnRzIG1lc3NhZ2UgbnVtYmVycyBieSB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFwX3N0cmVhbSBBbiBJTUFQIHN0cmVhbSByZXR1cm5lZCBieQogKiBpbWFwX29wZW4uCiAqIEBwYXJhbSBpbnQgJGNyaXRlcmlhIENyaXRlcmlhIGNhbiBiZSBvbmUgKGFuZCBvbmx5IG9uZSkgb2YgdGhlIGZvbGxvd2luZzoKICoKICoKICoKICogU09SVERBVEUgLSBtZXNzYWdlIERhdGUKICoKICoKICoKICoKICogU09SVEFSUklWQUwgLSBhcnJpdmFsIGRhdGUKICoKICoKICoKICoKICogU09SVEZST00gLSBtYWlsYm94IGluIGZpcnN0IEZyb20gYWRkcmVzcwogKgogKgogKgogKgogKiBTT1JUU1VCSkVDVCAtIG1lc3NhZ2Ugc3ViamVjdAogKgogKgogKgogKgogKiBTT1JUVE8gLSBtYWlsYm94IGluIGZpcnN0IFRvIGFkZHJlc3MKICoKICoKICoKICoKICogU09SVENDIC0gbWFpbGJveCBpbiBmaXJzdCBjYyBhZGRyZXNzCiAqCiAqCiAqCiAqCiAqIFNPUlRTSVpFIC0gc2l6ZSBvZiBtZXNzYWdlIGluIG9jdGV0cwogKgogKgogKgogKiBAcGFyYW0gaW50ICRyZXZlcnNlIFNldCB0aGlzIHRvIDEgZm9yIHJldmVyc2Ugc29ydGluZwogKiBAcGFyYW0gaW50ICRvcHRpb25zIFRoZSBvcHRpb25zIGFyZSBhIGJpdG1hc2sgb2Ygb25lIG9yIG1vcmUgb2YgdGhlCiAqIGZvbGxvd2luZzoKICoKICoKICoKICogU0VfVUlEIC0gUmV0dXJuIFVJRHMgaW5zdGVhZCBvZiBzZXF1ZW5jZSBudW1iZXJzCiAqCiAqCiAqCiAqCiAqIFNFX05PUFJFRkVUQ0ggLSBEb24ndCBwcmVmZXRjaCBzZWFyY2hlZCBtZXNzYWdlcwogKgogKgogKgogKiBAcGFyYW0gc3RyaW5nICRzZWFyY2hfY3JpdGVyaWEgSU1BUDItZm9ybWF0IHNlYXJjaCBjcml0ZXJpYSBzdHJpbmcuIEZvciBkZXRhaWxzIHNlZQogKiBpbWFwX3NlYXJjaC4KICogQHBhcmFtIHN0cmluZyAkY2hhcnNldCBNSU1FIGNoYXJhY3RlciBzZXQgdG8gdXNlIHdoZW4gc29ydGluZyBzdHJpbmdzLgogKiBAcmV0dXJuIGFycmF5IFJldHVybnMgYW4gYXJyYXkgb2YgbWVzc2FnZSBudW1iZXJzIHNvcnRlZCBieSB0aGUgZ2l2ZW4KICogcGFyYW1ldGVycy4KICogQHRocm93cyBJbWFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFwX3NvcnQoJGltYXBfc3RyZWFtLCBpbnQgJGNyaXRlcmlhLCBpbnQgJHJldmVyc2UsIGludCAkb3B0aW9ucyA9IDAsIHN0cmluZyAkc2VhcmNoX2NyaXRlcmlhID0gbnVsbCwgc3RyaW5nICRjaGFyc2V0ID0gbnVsbCk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hcF9zb3J0KCRpbWFwX3N0cmVhbSwgJGNyaXRlcmlhLCAkcmV2ZXJzZSwgJG9wdGlvbnMsICRzZWFyY2hfY3JpdGVyaWEsICRjaGFyc2V0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogU3Vic2NyaWJlIHRvIGEgbmV3IG1haWxib3guCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcF9zdHJlYW0gQW4gSU1BUCBzdHJlYW0gcmV0dXJuZWQgYnkKICogaW1hcF9vcGVuLgogKiBAcGFyYW0gc3RyaW5nICRtYWlsYm94IFRoZSBtYWlsYm94IG5hbWUsIHNlZSBpbWFwX29wZW4gZm9yIG1vcmUKICogaW5mb3JtYXRpb24KICogQHRocm93cyBJbWFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFwX3N1YnNjcmliZSgkaW1hcF9zdHJlYW0sIHN0cmluZyAkbWFpbGJveCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFwX3N1YnNjcmliZSgkaW1hcF9zdHJlYW0sICRtYWlsYm94KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEdldHMgYSB0cmVlIG9mIGEgdGhyZWFkZWQgbWVzc2FnZS4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFwX3N0cmVhbSBBbiBJTUFQIHN0cmVhbSByZXR1cm5lZCBieQogKiBpbWFwX29wZW4uCiAqIEBwYXJhbSBpbnQgJG9wdGlvbnMKICogQHJldHVybiBhcnJheSBpbWFwX3RocmVhZCByZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IGNvbnRhaW5pbmcKICogYSB0cmVlIG9mIG1lc3NhZ2VzIHRocmVhZGVkIGJ5IFJFRkVSRU5DRVMuCiAqCiAqIEV2ZXJ5IG1lc3NhZ2UgaW4gdGhlIGN1cnJlbnQgbWFpbGJveCB3aWxsIGJlIHJlcHJlc2VudGVkIGJ5IHRocmVlIGVudHJpZXMKICogaW4gdGhlIHJlc3VsdGluZyBhcnJheToKICoKICoKICogJHRocmVhZFsiWFgubnVtIl0gLSBjdXJyZW50IG1lc3NhZ2UgbnVtYmVyCiAqCiAqCiAqICR0aHJlYWRbIlhYLm5leHQiXQogKgogKgogKiAkdGhyZWFkWyJYWC5icmFuY2giXQogKgogKgogKiBAdGhyb3dzIEltYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYXBfdGhyZWFkKCRpbWFwX3N0cmVhbSwgaW50ICRvcHRpb25zID0gU0VfRlJFRSk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hcF90aHJlYWQoJGltYXBfc3RyZWFtLCAkb3B0aW9ucyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNldHMgb3IgZmV0Y2hlcyB0aGUgaW1hcCB0aW1lb3V0LgogKgogKiBAcGFyYW0gaW50ICR0aW1lb3V0X3R5cGUgT25lIG9mIHRoZSBmb2xsb3dpbmc6CiAqIElNQVBfT1BFTlRJTUVPVVQsCiAqIElNQVBfUkVBRFRJTUVPVVQsCiAqIElNQVBfV1JJVEVUSU1FT1VULCBvcgogKiBJTUFQX0NMT1NFVElNRU9VVC4KICogQHBhcmFtIGludCAkdGltZW91dCBUaGUgdGltZW91dCwgaW4gc2Vjb25kcy4KICogQHJldHVybiBtaXhlZCBJZiB0aGUgdGltZW91dCBwYXJhbWV0ZXIgaXMgc2V0LCB0aGlzIGZ1bmN0aW9uCiAqIHJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBJZiB0aW1lb3V0ICBpcyBub3QgcHJvdmlkZWQgb3IgZXZhbHVhdGVzIHRvIC0xLAogKiB0aGUgY3VycmVudCB0aW1lb3V0IHZhbHVlIG9mIHRpbWVvdXRfdHlwZSBpcwogKiByZXR1cm5lZCBhcyBhbiBpbnRlZ2VyLgogKiBAdGhyb3dzIEltYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYXBfdGltZW91dChpbnQgJHRpbWVvdXRfdHlwZSwgaW50ICR0aW1lb3V0ID0gLTEpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hcF90aW1lb3V0KCR0aW1lb3V0X3R5cGUsICR0aW1lb3V0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmVtb3ZlcyB0aGUgZGVsZXRpb24gZmxhZyBmb3IgYSBzcGVjaWZpZWQgbWVzc2FnZSwgd2hpY2ggaXMgc2V0IGJ5CiAqIGltYXBfZGVsZXRlIG9yIGltYXBfbWFpbF9tb3ZlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYXBfc3RyZWFtIEFuIElNQVAgc3RyZWFtIHJldHVybmVkIGJ5CiAqIGltYXBfb3Blbi4KICogQHBhcmFtIGludCAkbXNnX251bWJlciBUaGUgbWVzc2FnZSBudW1iZXIKICogQHBhcmFtIGludCAkZmxhZ3MKICogQHRocm93cyBJbWFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFwX3VuZGVsZXRlKCRpbWFwX3N0cmVhbSwgaW50ICRtc2dfbnVtYmVyLCBpbnQgJGZsYWdzID0gMCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFwX3VuZGVsZXRlKCRpbWFwX3N0cmVhbSwgJG1zZ19udW1iZXIsICRmbGFncyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBVbnN1YnNjcmliZSBmcm9tIHRoZSBzcGVjaWZpZWQgbWFpbGJveC4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFwX3N0cmVhbSBBbiBJTUFQIHN0cmVhbSByZXR1cm5lZCBieQogKiBpbWFwX29wZW4uCiAqIEBwYXJhbSBzdHJpbmcgJG1haWxib3ggVGhlIG1haWxib3ggbmFtZSwgc2VlIGltYXBfb3BlbiBmb3IgbW9yZQogKiBpbmZvcm1hdGlvbgogKiBAdGhyb3dzIEltYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYXBfdW5zdWJzY3JpYmUoJGltYXBfc3RyZWFtLCBzdHJpbmcgJG1haWxib3gpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hcF91bnN1YnNjcmliZSgkaW1hcF9zdHJlYW0sICRtYWlsYm94KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEVuY29kZSBhIFVURi04IHN0cmluZyB0byBtb2RpZmllZCBVVEYtNyAoYXMgc3BlY2lmaWVkIGluIFJGQyAyMDYwLCBzZWN0aW9uIDUuMS4zKS4KICoKICogQHBhcmFtIHN0cmluZyAkaW4gQSBVVEYtOCBlbmNvZGVkIHN0cmluZy4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBpbiBjb252ZXJ0ZWQgdG8gbW9kaWZpZWQgVVRGLTcuCiAqIEB0aHJvd3MgSW1hcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hcF91dGY4X3RvX211dGY3KHN0cmluZyAkaW4pOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFwX3V0ZjhfdG9fbXV0ZjcoJGluKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/info.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xJbmZvRXhjZXB0aW9uOwoKLyoqCiAqIFNldHMgdGhlIHByb2Nlc3MgdGl0bGUgdmlzaWJsZSBpbiB0b29scyBzdWNoIGFzIHRvcCBhbmQKICogcHMuIFRoaXMgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIG9ubHkgaW4KICogQ0xJIG1vZGUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHRpdGxlIFRoZSBuZXcgdGl0bGUuCiAqIEB0aHJvd3MgSW5mb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gY2xpX3NldF9wcm9jZXNzX3RpdGxlKHN0cmluZyAkdGl0bGUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcY2xpX3NldF9wcm9jZXNzX3RpdGxlKCR0aXRsZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbmZvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBMb2FkcyB0aGUgUEhQIGV4dGVuc2lvbiBnaXZlbiBieSB0aGUgcGFyYW1ldGVyCiAqIGxpYnJhcnkuCiAqCiAqIFVzZSBleHRlbnNpb25fbG9hZGVkIHRvIHRlc3Qgd2hldGhlciBhIGdpdmVuCiAqIGV4dGVuc2lvbiBpcyBhbHJlYWR5IGF2YWlsYWJsZSBvciBub3QuIFRoaXMgd29ya3Mgb24gYm90aCBidWlsdC1pbgogKiBleHRlbnNpb25zIGFuZCBkeW5hbWljYWxseSBsb2FkZWQgb25lcyAoZWl0aGVyIHRocm91Z2ggcGhwLmluaSBvcgogKiBkbCkuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGxpYnJhcnkgVGhpcyBwYXJhbWV0ZXIgaXMgb25seSB0aGUgZmlsZW5hbWUgb2YgdGhlCiAqIGV4dGVuc2lvbiB0byBsb2FkIHdoaWNoIGFsc28gZGVwZW5kcyBvbiB5b3VyIHBsYXRmb3JtLiBGb3IgZXhhbXBsZSwKICogdGhlIHNvY2tldHMgZXh0ZW5zaW9uIChpZiBjb21waWxlZAogKiBhcyBhIHNoYXJlZCBtb2R1bGUsIG5vdCB0aGUgZGVmYXVsdCEpIHdvdWxkIGJlIGNhbGxlZAogKiBzb2NrZXRzLnNvIG9uIFVuaXggcGxhdGZvcm1zIHdoZXJlYXMgaXQgaXMgY2FsbGVkCiAqIHBocF9zb2NrZXRzLmRsbCBvbiB0aGUgV2luZG93cyBwbGF0Zm9ybS4KICoKICogVGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgZXh0ZW5zaW9uIGlzIGxvYWRlZCBmcm9tIGRlcGVuZHMgb24geW91cgogKiBwbGF0Zm9ybToKICoKICogV2luZG93cyAtIElmIG5vdCBleHBsaWNpdGx5IHNldCBpbiB0aGUgcGhwLmluaSwgdGhlIGV4dGVuc2lvbiBpcwogKiBsb2FkZWQgZnJvbSBDOlxwaHA1XCBieSBkZWZhdWx0LgogKgogKiBVbml4IC0gSWYgbm90IGV4cGxpY2l0bHkgc2V0IGluIHRoZSBwaHAuaW5pLCB0aGUgZGVmYXVsdCBleHRlbnNpb24KICogZGlyZWN0b3J5IGRlcGVuZHMgb24KICoKICoKICoKICogd2hldGhlciBQSFAgaGFzIGJlZW4gYnVpbHQgd2l0aCAtLWVuYWJsZS1kZWJ1ZwogKiBvciBub3QKICoKICoKICoKICoKICogd2hldGhlciBQSFAgaGFzIGJlZW4gYnVpbHQgd2l0aCAoZXhwZXJpbWVudGFsKSBaVFMgKFplbmQgVGhyZWFkIFNhZmV0eSkKICogc3VwcG9ydCBvciBub3QKICoKICoKICoKICoKICogdGhlIGN1cnJlbnQgaW50ZXJuYWwgWkVORF9NT0RVTEVfQVBJX05PIChaZW5kCiAqIGludGVybmFsIG1vZHVsZSBBUEkgbnVtYmVyLCB3aGljaCBpcyBiYXNpY2FsbHkgdGhlIGRhdGUgb24gd2hpY2ggYQogKiBtYWpvciBtb2R1bGUgQVBJIGNoYW5nZSBoYXBwZW5lZCwgZS5nLiAyMDAxMDkwMSkKICoKICoKICoKICogVGFraW5nIGludG8gYWNjb3VudCB0aGUgYWJvdmUsIHRoZSBkaXJlY3RvcnkgdGhlbiBkZWZhdWx0cyB0bwogKiAmbHQ7aW5zdGFsbC1kaXImZ3Q7L2xpYi9waHAvZXh0ZW5zaW9ucy8gJmx0O2RlYnVnLW9yLW5vdCZndDstJmx0O3p0cy1vci1ub3QmZ3Q7LVpFTkRfTU9EVUxFX0FQSV9OTywKICogZS5nLgogKiAvdXNyL2xvY2FsL3BocC9saWIvcGhwL2V4dGVuc2lvbnMvZGVidWctbm9uLXp0cy0yMDAxMDkwMQogKiBvcgogKiAvdXNyL2xvY2FsL3BocC9saWIvcGhwL2V4dGVuc2lvbnMvbm8tZGVidWctenRzLTIwMDEwOTAxLgogKiBAdGhyb3dzIEluZm9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGRsKHN0cmluZyAkbGlicmFyeSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxkbCgkbGlicmFyeSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbmZvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBHZXRzIHRoZSB0aW1lIG9mIHRoZSBsYXN0IG1vZGlmaWNhdGlvbiBvZiB0aGUgbWFpbiBzY3JpcHQgb2YgZXhlY3V0aW9uLgogKgogKiBJZiB5b3UncmUgaW50ZXJlc3RlZCBpbiBnZXR0aW5nIHRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lCiAqIG9mIGEgZGlmZmVyZW50IGZpbGUsIGNvbnNpZGVyIHVzaW5nIGZpbGVtdGltZS4KICoKICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgdGltZSBvZiB0aGUgbGFzdCBtb2RpZmljYXRpb24gb2YgdGhlIGN1cnJlbnQKICogcGFnZS4gVGhlIHZhbHVlIHJldHVybmVkIGlzIGEgVW5peCB0aW1lc3RhbXAsIHN1aXRhYmxlIGZvcgogKiBmZWVkaW5nIHRvIGRhdGUuCiAqIEB0aHJvd3MgSW5mb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZ2V0bGFzdG1vZCgpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxnZXRsYXN0bW9kKCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbmZvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqCiAqCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIGdyb3VwIElEIG9mIHRoZSBjdXJyZW50IHNjcmlwdC4KICogQHRocm93cyBJbmZvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnZXRteWdpZCgpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxnZXRteWdpZCgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW5mb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBHZXRzIHRoZSBpbm9kZSBvZiB0aGUgY3VycmVudCBzY3JpcHQuCiAqCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIGN1cnJlbnQgc2NyaXB0J3MgaW5vZGUgYXMgYW4gaW50ZWdlci4KICogQHRocm93cyBJbmZvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnZXRteWlub2RlKCk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGdldG15aW5vZGUoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEluZm9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogR2V0cyB0aGUgY3VycmVudCBQSFAgcHJvY2VzcyBJRC4KICoKICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgY3VycmVudCBQSFAgcHJvY2VzcyBJRC4KICogQHRocm93cyBJbmZvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnZXRteXBpZCgpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxnZXRteXBpZCgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW5mb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKgogKgogKiBAcmV0dXJuIGludCBSZXR1cm5zIHRoZSB1c2VyIElEIG9mIHRoZSBjdXJyZW50IHNjcmlwdC4KICogQHRocm93cyBJbmZvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnZXRteXVpZCgpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxnZXRteXVpZCgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW5mb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBQYXJzZXMgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIHNjcmlwdC4KICoKICogQHBhcmFtIHN0cmluZyAkb3B0aW9ucwogKiBAcGFyYW0gYXJyYXkgJGxvbmdvcHRzCiAqIEBwYXJhbSBpbnR8bnVsbCAkb3B0aW5kCiAqIEByZXR1cm4gYXJyYXl8YXJyYXl8YXJyYXkgVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhbiBhcnJheSBvZiBvcHRpb24gLyBhcmd1bWVudCBwYWlycy4KICogQHRocm93cyBJbmZvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnZXRvcHQoc3RyaW5nICRvcHRpb25zLCBhcnJheSAkbG9uZ29wdHMgPSBudWxsLCA/aW50ICYkb3B0aW5kID0gbnVsbCk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkb3B0aW5kICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxnZXRvcHQoJG9wdGlvbnMsICRsb25nb3B0cywgJG9wdGluZCk7CiAgICB9IGVsc2VpZiAoJGxvbmdvcHRzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxnZXRvcHQoJG9wdGlvbnMsICRsb25nb3B0cyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcZ2V0b3B0KCRvcHRpb25zKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEluZm9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9uIHN1Y2Nlc3MuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHZhcm5hbWUgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG5hbWUuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBhcyBhIHN0cmluZyBvbiBzdWNjZXNzLCBvciBhbgogKiBlbXB0eSBzdHJpbmcgZm9yIG51bGwgdmFsdWVzLiBSZXR1cm5zIEZBTFNFIGlmIHRoZQogKiBjb25maWd1cmF0aW9uIG9wdGlvbiBkb2Vzbid0IGV4aXN0LgogKiBAdGhyb3dzIEluZm9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGluaV9nZXQoc3RyaW5nICR2YXJuYW1lKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW5pX2dldCgkdmFybmFtZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbmZvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uIG9wdGlvbi4gIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbgogKiB3aWxsIGtlZXAgdGhpcyBuZXcgdmFsdWUgZHVyaW5nIHRoZSBzY3JpcHQncyBleGVjdXRpb24sIGFuZCB3aWxsIGJlIHJlc3RvcmVkCiAqIGF0IHRoZSBzY3JpcHQncyBlbmRpbmcuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHZhcm5hbWUgTm90IGFsbCB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgY2FuIGJlIGNoYW5nZWQgdXNpbmcKICogaW5pX3NldC4gVGhlcmUgaXMgYSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgb3B0aW9ucwogKiBpbiB0aGUgYXBwZW5kaXguCiAqIEBwYXJhbSBzdHJpbmd8aW50fGZsb2F0fGJvb2wgJG5ld3ZhbHVlIFRoZSBuZXcgdmFsdWUgZm9yIHRoZSBvcHRpb24uCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIG9sZCB2YWx1ZSBvbiBzdWNjZXNzLCBGQUxTRSBvbiBmYWlsdXJlLgogKiBAdGhyb3dzIEluZm9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGluaV9zZXQoc3RyaW5nICR2YXJuYW1lLCAkbmV3dmFsdWUpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbmlfc2V0KCR2YXJuYW1lLCAkbmV3dmFsdWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW5mb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHByaW50cyBvdXQgdGhlIGNyZWRpdHMgbGlzdGluZyB0aGUgUEhQIGRldmVsb3BlcnMsCiAqIG1vZHVsZXMsIGV0Yy4gSXQgZ2VuZXJhdGVzIHRoZSBhcHByb3ByaWF0ZSBIVE1MIGNvZGVzIHRvIGluc2VydAogKiB0aGUgaW5mb3JtYXRpb24gaW4gYSBwYWdlLgogKgogKiBAcGFyYW0gaW50ICRmbGFnIFRvIGdlbmVyYXRlIGEgY3VzdG9tIGNyZWRpdHMgcGFnZSwgeW91IG1heSB3YW50IHRvIHVzZSB0aGUKICogZmxhZyBwYXJhbWV0ZXIuCiAqCiAqCiAqIFByZS1kZWZpbmVkIHBocGNyZWRpdHMgZmxhZ3MKICoKICoKICoKICogbmFtZQogKiBkZXNjcmlwdGlvbgogKgogKgogKgogKgogKiBDUkVESVRTX0FMTAogKgogKiBBbGwgdGhlIGNyZWRpdHMsIGVxdWl2YWxlbnQgdG8gdXNpbmc6IENSRURJVFNfRE9DUyArCiAqIENSRURJVFNfR0VORVJBTCArIENSRURJVFNfR1JPVVAgKwogKiBDUkVESVRTX01PRFVMRVMgKyBDUkVESVRTX0ZVTExQQUdFLgogKiBJdCBnZW5lcmF0ZXMgYSBjb21wbGV0ZSBzdGFuZC1hbG9uZSBIVE1MIHBhZ2Ugd2l0aCB0aGUgYXBwcm9wcmlhdGUgdGFncy4KICoKICoKICoKICogQ1JFRElUU19ET0NTCiAqIFRoZSBjcmVkaXRzIGZvciB0aGUgZG9jdW1lbnRhdGlvbiB0ZWFtCiAqCiAqCiAqIENSRURJVFNfRlVMTFBBR0UKICoKICogVXN1YWxseSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIG90aGVyIGZsYWdzLiAgSW5kaWNhdGVzCiAqIHRoYXQgYSBjb21wbGV0ZSBzdGFuZC1hbG9uZSBIVE1MIHBhZ2UgbmVlZHMgdG8gYmUKICogcHJpbnRlZCBpbmNsdWRpbmcgdGhlIGluZm9ybWF0aW9uIGluZGljYXRlZCBieSB0aGUgb3RoZXIKICogZmxhZ3MuCiAqCiAqCiAqCiAqIENSRURJVFNfR0VORVJBTAogKgogKiBHZW5lcmFsIGNyZWRpdHM6IExhbmd1YWdlIGRlc2lnbiBhbmQgY29uY2VwdCwgUEhQIGF1dGhvcnMKICogYW5kIFNBUEkgbW9kdWxlLgogKgogKgogKgogKiBDUkVESVRTX0dST1VQCiAqIEEgbGlzdCBvZiB0aGUgY29yZSBkZXZlbG9wZXJzCiAqCiAqCiAqIENSRURJVFNfTU9EVUxFUwogKgogKiBBIGxpc3Qgb2YgdGhlIGV4dGVuc2lvbiBtb2R1bGVzIGZvciBQSFAsIGFuZCB0aGVpciBhdXRob3JzCiAqCiAqCiAqCiAqIENSRURJVFNfU0FQSQogKgogKiBBIGxpc3Qgb2YgdGhlIHNlcnZlciBBUEkgbW9kdWxlcyBmb3IgUEhQLCBhbmQgdGhlaXIgYXV0aG9ycwogKgogKgogKgogKgogKgogKiBAdGhyb3dzIEluZm9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBocGNyZWRpdHMoaW50ICRmbGFnID0gQ1JFRElUU19BTEwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccGhwY3JlZGl0cygkZmxhZyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbmZvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBPdXRwdXRzIGEgbGFyZ2UgYW1vdW50IG9mIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlIG9mICBQSFAuCiAqIFRoaXMgaW5jbHVkZXMgaW5mb3JtYXRpb24gYWJvdXQgUEhQIGNvbXBpbGF0aW9uIG9wdGlvbnMgYW5kIGV4dGVuc2lvbnMsCiAqIHRoZSBQSFAgdmVyc2lvbiwgc2VydmVyIGluZm9ybWF0aW9uIGFuZCBlbnZpcm9ubWVudCAoaWYgY29tcGlsZWQgYXMgYQogKiBtb2R1bGUpLCB0aGUgUEhQIGVudmlyb25tZW50LCBPUyB2ZXJzaW9uIGluZm9ybWF0aW9uLCBwYXRocywgbWFzdGVyIGFuZAogKiBsb2NhbCB2YWx1ZXMgb2YgY29uZmlndXJhdGlvbiBvcHRpb25zLCBIVFRQIGhlYWRlcnMsIGFuZCB0aGUgUEhQIExpY2Vuc2UuCiAqCiAqIEJlY2F1c2UgZXZlcnkgc3lzdGVtIGlzIHNldHVwIGRpZmZlcmVudGx5LCBwaHBpbmZvIGlzCiAqIGNvbW1vbmx5IHVzZWQgdG8gY2hlY2sgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBhbmQgZm9yIGF2YWlsYWJsZQogKiBwcmVkZWZpbmVkIHZhcmlhYmxlcwogKiBvbiBhIGdpdmVuIHN5c3RlbS4KICoKICogcGhwaW5mbyBpcyBhbHNvIGEgdmFsdWFibGUgZGVidWdnaW5nIHRvb2wgYXMgaXQKICogY29udGFpbnMgYWxsIEVHUENTIChFbnZpcm9ubWVudCwgR0VULCBQT1NULCBDb29raWUsIFNlcnZlcikgZGF0YS4KICoKICogQHBhcmFtIGludCAkd2hhdCBUaGUgb3V0cHV0IG1heSBiZSBjdXN0b21pemVkIGJ5IHBhc3Npbmcgb25lIG9yIG1vcmUgb2YgdGhlCiAqIGZvbGxvd2luZyBjb25zdGFudHMgYml0d2lzZSB2YWx1ZXMgc3VtbWVkCiAqIHRvZ2V0aGVyIGluIHRoZSBvcHRpb25hbCB3aGF0IHBhcmFtZXRlci4KICogT25lIGNhbiBhbHNvIGNvbWJpbmUgdGhlIHJlc3BlY3RpdmUgY29uc3RhbnRzIG9yIGJpdHdpc2UgdmFsdWVzCiAqIHRvZ2V0aGVyIHdpdGggdGhlIGJpdHdpc2Ugb3Igb3BlcmF0b3IuCiAqCiAqCiAqIHBocGluZm8gb3B0aW9ucwogKgogKgogKgogKiBOYW1lIChjb25zdGFudCkKICogVmFsdWUKICogRGVzY3JpcHRpb24KICoKICoKICoKICoKICogSU5GT19HRU5FUkFMCiAqIDEKICoKICogVGhlIGNvbmZpZ3VyYXRpb24gbGluZSwgcGhwLmluaSBsb2NhdGlvbiwgYnVpbGQgZGF0ZSwgV2ViCiAqIFNlcnZlciwgU3lzdGVtIGFuZCBtb3JlLgogKgogKgogKgogKiBJTkZPX0NSRURJVFMKICogMgogKgogKiBQSFAgQ3JlZGl0cy4gIFNlZSBhbHNvIHBocGNyZWRpdHMuCiAqCiAqCiAqCiAqIElORk9fQ09ORklHVVJBVElPTgogKiA0CiAqCiAqIEN1cnJlbnQgTG9jYWwgYW5kIE1hc3RlciB2YWx1ZXMgZm9yIFBIUCBkaXJlY3RpdmVzLiAgU2VlCiAqIGFsc28gaW5pX2dldC4KICoKICoKICoKICogSU5GT19NT0RVTEVTCiAqIDgKICoKICogTG9hZGVkIG1vZHVsZXMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgc2V0dGluZ3MuICBTZWUgYWxzbwogKiBnZXRfbG9hZGVkX2V4dGVuc2lvbnMuCiAqCiAqCiAqCiAqIElORk9fRU5WSVJPTk1FTlQKICogMTYKICoKICogRW52aXJvbm1lbnQgVmFyaWFibGUgaW5mb3JtYXRpb24gdGhhdCdzIGFsc28gYXZhaWxhYmxlIGluCiAqICRfRU5WLgogKgogKgogKgogKiBJTkZPX1ZBUklBQkxFUwogKiAzMgogKgogKiBTaG93cyBhbGwKICogcHJlZGVmaW5lZCB2YXJpYWJsZXMgZnJvbSBFR1BDUyAoRW52aXJvbm1lbnQsIEdFVCwKICogUE9TVCwgQ29va2llLCBTZXJ2ZXIpLgogKgogKgogKgogKiBJTkZPX0xJQ0VOU0UKICogNjQKICoKICogUEhQIExpY2Vuc2UgaW5mb3JtYXRpb24uICBTZWUgYWxzbyB0aGUgbGljZW5zZSBGQVEuCiAqCiAqCiAqCiAqIElORk9fQUxMCiAqIC0xCiAqCiAqIFNob3dzIGFsbCBvZiB0aGUgYWJvdmUuCiAqCiAqCiAqCiAqCiAqCiAqIEB0aHJvd3MgSW5mb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGhwaW5mbyhpbnQgJHdoYXQgPSBJTkZPX0FMTCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwaHBpbmZvKCR3aGF0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEluZm9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEFkZHMgc2V0dGluZyB0byB0aGUgc2VydmVyIGVudmlyb25tZW50LiAgVGhlCiAqIGVudmlyb25tZW50IHZhcmlhYmxlIHdpbGwgb25seSBleGlzdCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjdXJyZW50CiAqIHJlcXVlc3QuIEF0IHRoZSBlbmQgb2YgdGhlIHJlcXVlc3QgdGhlIGVudmlyb25tZW50IGlzIHJlc3RvcmVkIHRvIGl0cwogKiBvcmlnaW5hbCBzdGF0ZS4KICoKICogQHBhcmFtIHN0cmluZyAkc2V0dGluZyBUaGUgc2V0dGluZywgbGlrZSAiRk9PPUJBUiIKICogQHRocm93cyBJbmZvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwdXRlbnYoc3RyaW5nICRzZXR0aW5nKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHB1dGVudigkc2V0dGluZyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbmZvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIHRoZSBpbmNsdWRlX3BhdGgKICogY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgc2NyaXB0LgogKgogKiBAcGFyYW0gc3RyaW5nICRuZXdfaW5jbHVkZV9wYXRoIFRoZSBuZXcgdmFsdWUgZm9yIHRoZSBpbmNsdWRlX3BhdGgKICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgb2xkIGluY2x1ZGVfcGF0aCBvbgogKiBzdWNjZXNzLgogKiBAdGhyb3dzIEluZm9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNldF9pbmNsdWRlX3BhdGgoc3RyaW5nICRuZXdfaW5jbHVkZV9wYXRoKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc2V0X2luY2x1ZGVfcGF0aCgkbmV3X2luY2x1ZGVfcGF0aCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbmZvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNldCB0aGUgbnVtYmVyIG9mIHNlY29uZHMgYSBzY3JpcHQgaXMgYWxsb3dlZCB0byBydW4uIElmIHRoaXMgaXMgcmVhY2hlZCwKICogdGhlIHNjcmlwdCByZXR1cm5zIGEgZmF0YWwgZXJyb3IuIFRoZSBkZWZhdWx0IGxpbWl0IGlzIDMwIHNlY29uZHMgb3IsIGlmCiAqIGl0IGV4aXN0cywgdGhlIG1heF9leGVjdXRpb25fdGltZSB2YWx1ZSBkZWZpbmVkIGluIHRoZQogKiBwaHAuaW5pLgogKgogKiBXaGVuIGNhbGxlZCwgc2V0X3RpbWVfbGltaXQgcmVzdGFydHMgdGhlIHRpbWVvdXQKICogY291bnRlciBmcm9tIHplcm8uIEluIG90aGVyIHdvcmRzLCBpZiB0aGUgdGltZW91dCBpcyB0aGUgZGVmYXVsdCAzMAogKiBzZWNvbmRzLCBhbmQgMjUgc2Vjb25kcyBpbnRvIHNjcmlwdCBleGVjdXRpb24gYSBjYWxsIHN1Y2ggYXMKICogc2V0X3RpbWVfbGltaXQoMjApIGlzIG1hZGUsIHRoZSBzY3JpcHQgd2lsbCBydW4gZm9yIGEKICogdG90YWwgb2YgNDUgc2Vjb25kcyBiZWZvcmUgdGltaW5nIG91dC4KICoKICogQHBhcmFtIGludCAkc2Vjb25kcyBUaGUgbWF4aW11bSBleGVjdXRpb24gdGltZSwgaW4gc2Vjb25kcy4gSWYgc2V0IHRvIHplcm8sIG5vIHRpbWUgbGltaXQKICogaXMgaW1wb3NlZC4KICogQHRocm93cyBJbmZvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzZXRfdGltZV9saW1pdChpbnQgJHNlY29uZHMpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc2V0X3RpbWVfbGltaXQoJHNlY29uZHMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW5mb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/ingres-ii.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xJbmdyZXNpaUV4Y2VwdGlvbjsKCi8qKgogKiBpbmdyZXNfYXV0b2NvbW1pdCBpcyBjYWxsZWQgYmVmb3JlIG9wZW5pbmcgYQogKiB0cmFuc2FjdGlvbiAoYmVmb3JlIHRoZSBmaXJzdCBjYWxsIHRvCiAqIGluZ3Jlc19xdWVyeSBvciBqdXN0IGFmdGVyIGEgY2FsbCB0bwogKiBpbmdyZXNfcm9sbGJhY2sgb3IKICogaW5ncmVzX2NvbW1pdCkgdG8gc3dpdGNoIHRoZQogKiBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHNlcnZlciBvbiBvciBvZmYgKHdoZW4gdGhlIHNjcmlwdCBiZWdpbnMKICogdGhlIGF1dG9jb21taXQgbW9kZSBpcyBvZmYpLgogKgogKiBXaGVuIGF1dG9jb21taXQgbW9kZSBpcyBvbiwgZXZlcnkgcXVlcnkgaXMgYXV0b21hdGljYWxseQogKiBjb21taXR0ZWQgYnkgdGhlIHNlcnZlciwgYXMgaWYgaW5ncmVzX2NvbW1pdAogKiB3YXMgY2FsbGVkIGFmdGVyIGV2ZXJ5IGNhbGwgdG8gaW5ncmVzX3F1ZXJ5LgogKiBUbyBzZWUgaWYgYXV0b2NvbW1pdCBpcyBlbmFibGVkIHVzZSwKICogaW5ncmVzX2F1dG9jb21taXRfc3RhdGUuCiAqCiAqIEJ5IGRlZmF1bHQgSW5ncmVzIHdpbGwgcm9sbGJhY2sgYW55IHVuY29tbWl0dGVkIHRyYW5zYWN0aW9ucyBhdCB0aGUgZW5kIG9mCiAqIGEgcmVxdWVzdC4gVXNlIHRoaXMgZnVuY3Rpb24gb3IgaW5ncmVzX2NvbW1pdCB0bwogKiBlbnN1cmUgeW91ciBkYXRhIGlzIGNvbW1pdHRlZCB0byB0aGUgZGF0YWJhc2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGluayBUaGUgY29ubmVjdGlvbiBsaW5rIGlkZW50aWZpZXIKICogQHRocm93cyBJbmdyZXNpaUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW5ncmVzX2F1dG9jb21taXQoJGxpbmspOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW5ncmVzX2F1dG9jb21taXQoJGxpbmspOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW5ncmVzaWlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGluZ3Jlc19jbG9zZSBjbG9zZXMgdGhlIGNvbm5lY3Rpb24gdG8KICogdGhlIEluZ3JlcyBzZXJ2ZXIgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBsaW5rLgogKgogKiBpbmdyZXNfY2xvc2UgaXMgdXN1YWxseSB1bm5lY2Vzc2FyeSwgYXMgaXQKICogd2lsbCBub3QgY2xvc2UgcGVyc2lzdGVudCBjb25uZWN0aW9ucyBhbmQgYWxsIG5vbi1wZXJzaXN0ZW50IGNvbm5lY3Rpb25zCiAqIGFyZSBhdXRvbWF0aWNhbGx5IGNsb3NlZCBhdCB0aGUgZW5kIG9mIHRoZSBzY3JpcHQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGluayBUaGUgY29ubmVjdGlvbiBsaW5rIGlkZW50aWZpZXIKICogQHRocm93cyBJbmdyZXNpaUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW5ncmVzX2Nsb3NlKCRsaW5rKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGluZ3Jlc19jbG9zZSgkbGluayk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbmdyZXNpaUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogaW5ncmVzX2NvbW1pdCBjb21taXRzIHRoZSBjdXJyZW50bHkgb3BlbgogKiB0cmFuc2FjdGlvbiwgbWFraW5nIGFsbCBjaGFuZ2VzIG1hZGUgdG8gdGhlIGRhdGFiYXNlIHBlcm1hbmVudC4KICoKICogVGhpcyBjbG9zZXMgdGhlIHRyYW5zYWN0aW9uLiBBIG5ldyB0cmFuc2FjdGlvbiBjYW4gYmUgb3BlbmVkIGJ5IHNlbmRpbmcgYQogKiBxdWVyeSB3aXRoIGluZ3Jlc19xdWVyeS4KICoKICogWW91IGNhbiBhbHNvIGhhdmUgdGhlIHNlcnZlciBjb21taXQgYXV0b21hdGljYWxseSBhZnRlciBldmVyeQogKiBxdWVyeSBieSBjYWxsaW5nIGluZ3Jlc19hdXRvY29tbWl0IGJlZm9yZQogKiBvcGVuaW5nIHRoZSB0cmFuc2FjdGlvbi4KICoKICogQnkgZGVmYXVsdCBJbmdyZXMgd2lsbCByb2xsIGJhY2sgYW55IHVuY29tbWl0dGVkIHRyYW5zYWN0aW9ucyBhdCB0aGUgZW5kIG9mCiAqIGEgcmVxdWVzdC4gVXNlIHRoaXMgZnVuY3Rpb24gb3IgaW5ncmVzX2F1dG9jb21taXQgdG8KICogZW5zdXJlIHlvdXIgdGhhdCBkYXRhIGlzIGNvbW1pdHRlZCB0byB0aGUgZGF0YWJhc2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGluayBUaGUgY29ubmVjdGlvbiBsaW5rIGlkZW50aWZpZXIKICogQHRocm93cyBJbmdyZXNpaUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW5ncmVzX2NvbW1pdCgkbGluayk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbmdyZXNfY29tbWl0KCRsaW5rKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEluZ3Jlc2lpRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBpbmdyZXNfY29ubmVjdCBvcGVucyBhIGNvbm5lY3Rpb24gd2l0aCB0aGUKICogZ2l2ZW4gSW5ncmVzIGRhdGFiYXNlLgogKgogKiBUaGUgY29ubmVjdGlvbiBpcyBjbG9zZWQgd2hlbiB0aGUgc2NyaXB0IGVuZHMgb3Igd2hlbgogKiBpbmdyZXNfY2xvc2UgaXMgY2FsbGVkIG9uIHRoaXMgbGluay4KICoKICogQHBhcmFtIHN0cmluZyAkZGF0YWJhc2UgVGhlIGRhdGFiYXNlIG5hbWUuIE11c3QgZm9sbG93IHRoZSBzeW50YXg6CiAqCiAqIFt2bm9kZTo6XWRibmFtZVsvc3ZyX2NsYXNzXQogKiBAcGFyYW0gc3RyaW5nICR1c2VybmFtZSBUaGUgSW5ncmVzIHVzZXIgbmFtZQogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZCBUaGUgcGFzc3dvcmQgYXNzb2NpYXRlZCB3aXRoIHVzZXJuYW1lCiAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBpbmdyZXNfY29ubmVjdCBvcHRpb25zCiAqCiAqCiAqCiAqCiAqIE9wdGlvbiBuYW1lCiAqIE9wdGlvbiB0eXBlCiAqIERlc2NyaXB0aW9uCiAqIEV4YW1wbGUKICoKICoKICoKICoKICogZGF0ZV9jZW50dXJ5X2JvdW5kYXJ5CiAqIGludGVnZXIKICogVGhlIHRocmVzaG9sZCBieSB3aGljaCBhIDItZGlnaXQgeWVhciBpcyBkZXRlcm1pbmVkIHRvIGJlIGluCiAqIHRoZSBjdXJyZW50IGNlbnR1cnkgb3IgaW4gdGhlIG5leHQgY2VudHVyeS4gRXF1aXZhbGVudCB0byBJSV9EQVRFX0NFTlRVUllfQk9VTkRBUlkuCiAqIDUwCiAqCiAqCiAqIGdyb3VwCiAqIHN0cmluZwogKiBTcGVjaWZpZXMgdGhlIGdyb3VwIElEIG9mIHRoZSB1c2VyLCBlcXVpdmFsZW50IHRvIHRoZSAiLUciCiAqIGZsYWcKICogcGF5cm9sbAogKgogKgogKiByb2xlCiAqIHN0cmluZwogKiBUaGUgcm9sZSBJRCBvZiB0aGUgYXBwbGljYXRpb24uIElmIGEgcm9sZSBwYXNzd29yZCBpcwogKiByZXF1aXJlZCwgdGhlIHBhcmFtZXRlciB2YWx1ZSBzaG91bGQgYmUgc3BlY2lmaWVkIGFzICJyb2xlL3Bhc3N3b3JkIgogKgogKgogKiBlZmZlY3RpdmVfdXNlcgogKiBzdHJpbmcKICogVGhlIGluZ3JlcyB1c2VyIGFjY291bnQgYmVpbmcgaW1wZXJzb25hdGVkLCBlcXVpdmFsZW50IHRvIHRoZSAiLXUiIGZsYWcKICogYW5vdGhlcl91c2VyCiAqCiAqCiAqIGRibXNfcGFzc3dvcmQKICogc3RyaW5nCiAqIFRoZSBpbnRlcm5hbCBkYXRhYmFzZSBwYXNzd29yZCBmb3IgdGhlIHVzZXIgY29ubmVjdGluZyB0byBJbmdyZXMKICogczNjcjN0CiAqCiAqCiAqIHRhYmxlX3N0cnVjdHVyZQogKiBzdHJpbmcKICoKICogVGhlIGRlZmF1bHQgc3RydWN0dXJlIGZvciBuZXcgdGFibGVzLgogKiBWYWxpZCB2YWx1ZXMgZm9yIHRhYmxlX3N0cnVjdHVyZSBhcmU6CiAqCiAqIElOR1JFU19TVFJVQ1RVUkVfQlRSRUUKICogSU5HUkVTX1NUUlVDVFVSRV9IQVNICiAqIElOR1JFU19TVFJVQ1RVUkVfSEVBUAogKiBJTkdSRVNfU1RSVUNUVVJFX0lTQU0KICogSU5HUkVTX1NUUlVDVFVSRV9DQlRSRUUKICogSU5HUkVTX1NUUlVDVFVSRV9DSVNBTQogKiBJTkdSRVNfU1RSVUNUVVJFX0NIQVNICiAqIElOR1JFU19TVFJVQ1RVUkVfQ0hFQVAKICoKICoKICoKICogSU5HUkVTX1NUUlVDVFVSRV9CVFJFRQogKgogKgogKiBpbmRleF9zdHJ1Y3R1cmUKICogc3RyaW5nCiAqCiAqIFRoZSBkZWZhdWx0IHN0cnVjdHVyZSBmb3IgbmV3IHNlY29uZGFyeSBpbmRleGVzLiBWYWxpZCB2YWx1ZXMKICogZm9yIGluZGV4X3N0cnVjdHVyZSBhcmU6CiAqCiAqIElOR1JFU19TVFJVQ1RVUkVfQ0JUUkVFCiAqIElOR1JFU19TVFJVQ1RVUkVfQ0lTQU0KICogSU5HUkVTX1NUUlVDVFVSRV9DSEFTSAogKiBJTkdSRVNfU1RSVUNUVVJFX0JUUkVFCiAqIElOR1JFU19TVFJVQ1RVUkVfSEFTSAogKiBJTkdSRVNfU1RSVUNUVVJFX0lTQU0KICoKICoKICoKICogSU5HUkVTX1NUUlVDVFVSRV9IQVNICiAqCiAqCiAqIGxvZ2luX2xvY2FsCiAqIGJvb2xlYW4KICogRGV0ZXJtaW5lcyBob3cgdGhlIGNvbm5lY3Rpb24gdXNlciBJRCBhbmQgcGFzc3dvcmQgYXJlCiAqIHVzZWQgd2hlbiBhIFZOT0RFIGlzIGluY2x1ZGVkIGluIHRoZSB0YXJnZXQgZGF0YWJhc2Ugc3RyaW5nLgogKiBJZiBzZXQgdG8gVFJVRSwgdGhlIHVzZXIgSUQgYW5kIHBhc3N3b3JkIGFyZSB1c2VkIHRvIGxvY2FsbHkgYWNjZXNzCiAqIHRoZSBWTk9ERSwgYW5kIHRoZSBWTk9ERSBsb2dpbiBpbmZvcm1hdGlvbiBpcyB1c2VkIHRvIGVzdGFibGlzaCB0aGUgREJNUwogKiBjb25uZWN0aW9uLiBJZiBzZXQgdG8gRkFMU0UsIHRoZSBwcm9jZXNzIHVzZXIgSUQgaXMgdXNlZCB0byBhY2Nlc3MKICogdGhlIFZOT0RFLCBhbmQgdGhlIGNvbm5lY3Rpb24gdXNlciBJRCBhbmQgcGFzc3dvcmQgYXJlIHVzZWQgaW4gcGxhY2UKICogb2YgdGhlIFZOT0RFIGxvZ2luIGluZm9ybWF0aW9uIHRvIGVzdGFibGlzaCB0aGUgREJNUyBjb25uZWN0aW9uLgogKiBUaGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkIGlmIG5vIFZOT0RFIGlzIGluY2x1ZGVkIGluIHRoZSB0YXJnZXQKICogZGF0YWJhc2Ugc3RyaW5nLiBUaGUgZGVmYXVsdCBpcyBGQUxTRS4KICogVFJVRQogKgogKgogKiB0aW1lem9uZQogKiBzdHJpbmcKICogQ29udHJvbHMgdGhlIHRpbWV6b25lIG9mIHRoZSBzZXNzaW9uLiBJZiBub3Qgc2V0IGl0IHdpbGwKICogZGVmYXVsdCB0byB0aGUgdmFsdWUgZGVmaW5lZCBieSBJSV9USU1FWk9ORV9OQU1FLiBJZgogKiBJSV9USU1FWk9ORV9OQU1FIGlzIG5vdCBkZWZpbmVkLCBOQS1QQUNJRklDIChHTVQtOCB3aXRoIERheWxpZ2h0CiAqIFNhdmluZ3MpIGlzIHVzZWQuCiAqCiAqCiAqIGRhdGVfZm9ybWF0CiAqIGludGVnZXIKICogU2V0cyB0aGUgYWxsb3dhYmxlIGlucHV0IGFuZCBvdXRwdXQgZm9ybWF0IGZvciBJbmdyZXMgZGF0ZXMuCiAqIERlZmF1bHRzIHRvIHRoZSB2YWx1ZSBkZWZpbmVkIGJ5IElJX0RBVEVfRk9STUFULiBJZiBJSV9EQVRFX0ZPUk1BVCBpcwogKiBub3Qgc2V0IHRoZSBkZWZhdWx0IGRhdGUgZm9ybWF0IGlzIFVTLCBlLmcuIG1tL2RkL3l5LiBWYWxpZCB2YWx1ZXMKICogZm9yIGRhdGVfZm9ybWF0IGFyZToKICoKICogSU5HUkVTX0RBVEVfRE1ZCiAqIElOR1JFU19EQVRFX0ZJTklTSAogKiBJTkdSRVNfREFURV9HRVJNQU4KICogSU5HUkVTX0RBVEVfSVNPCiAqIElOR1JFU19EQVRFX0lTTzQKICogSU5HUkVTX0RBVEVfTURZCiAqIElOR1JFU19EQVRFX01VTFRJTkFUSU9OQUwKICogSU5HUkVTX0RBVEVfTVVMVElOQVRJT05BTDQKICogSU5HUkVTX0RBVEVfWU1ECiAqIElOR1JFU19EQVRFX1VTCiAqCiAqCiAqCiAqIElOR1JFU19EQVRFX01VTFRJTkFUSU9OQUw0CiAqCiAqCiAqIGRlY2ltYWxfc2VwYXJhdG9yCiAqIHN0cmluZwogKiBUaGUgY2hhcmFjdGVyIGlkZW50aWZpZXIgZm9yIGRlY2ltYWwgZGF0YQogKiAiLCIKICoKICoKICogbW9uZXlfbG9ydAogKiBpbnRlZ2VyCiAqIExlYWRpbmcgb3IgdHJhaWxpbmcgY3VycmVuY3kgc2lnbi4gVmFsaWQgdmFsdWVzIGZvciBtb25leV9sb3J0CiAqIGFyZToKICoKICogSU5HUkVTX01PTkVZX0xFQURJTkcKICogSU5HUkVTX01PTkVZX1RSQUlMSU5HCiAqCiAqCiAqCiAqIElOR1JFU19NT05FWV9UUkFJTElORwogKgogKgogKiBtb25leV9zaWduCiAqIHN0cmluZwogKiBUaGUgY3VycmVuY3kgc3ltYm9sIHRvIGJlIHVzZWQgd2l0aCB0aGUgTU9ORVkgZGF0YXR5cGUKICog4oKsCiAqCiAqCiAqIG1vbmV5X3ByZWNpc2lvbgogKiBpbnRlZ2VyCiAqIFRoZSBwcmVjaXNpb24gb2YgdGhlIE1PTkVZIGRhdGF0eXBlCiAqIDMKICoKICoKICogZmxvYXQ0X3ByZWNpc2lvbgogKiBpbnRlZ2VyCiAqIFByZWNpc2lvbiBvZiB0aGUgRkxPQVQ0IGRhdGF0eXBlCiAqIDEwCiAqCiAqCiAqIGZsb2F0OF9wcmVjaXNpb24KICogaW50ZWdlcgogKiBQcmVjaXNpb24gb2YgdGhlIEZMT0FUOCBkYXRhCiAqIDEwCiAqCiAqCiAqIGJsb2Jfc2VnbWVudF9sZW5ndGgKICogaW50ZWdlcgogKiBUaGUgYW1vdW50IG9mIGRhdGEgaW4gYnl0ZXMgdG8gZmV0Y2ggYXQgYSB0aW1lIHdoZW4gcmV0cmlldmluZwogKiBCTE9CIG9yIENMT0IgZGF0YSwgZGVmYXVsdHMgdG8gNDA5NiBieXRlcyB3aGVuIG5vdCBleHBsaWNpdGx5IHNldAogKiA4MTkyCiAqCiAqCiAqCiAqCiAqCiAqIFRoZSBkZWZhdWx0IHN0cnVjdHVyZSBmb3IgbmV3IHRhYmxlcy4KICogVmFsaWQgdmFsdWVzIGZvciB0YWJsZV9zdHJ1Y3R1cmUgYXJlOgogKgogKiBJTkdSRVNfU1RSVUNUVVJFX0JUUkVFCiAqIElOR1JFU19TVFJVQ1RVUkVfSEFTSAogKiBJTkdSRVNfU1RSVUNUVVJFX0hFQVAKICogSU5HUkVTX1NUUlVDVFVSRV9JU0FNCiAqIElOR1JFU19TVFJVQ1RVUkVfQ0JUUkVFCiAqIElOR1JFU19TVFJVQ1RVUkVfQ0lTQU0KICogSU5HUkVTX1NUUlVDVFVSRV9DSEFTSAogKiBJTkdSRVNfU1RSVUNUVVJFX0NIRUFQCiAqCiAqCiAqIFRoZSBkZWZhdWx0IHN0cnVjdHVyZSBmb3IgbmV3IHNlY29uZGFyeSBpbmRleGVzLiBWYWxpZCB2YWx1ZXMKICogZm9yIGluZGV4X3N0cnVjdHVyZSBhcmU6CiAqCiAqIElOR1JFU19TVFJVQ1RVUkVfQ0JUUkVFCiAqIElOR1JFU19TVFJVQ1RVUkVfQ0lTQU0KICogSU5HUkVTX1NUUlVDVFVSRV9DSEFTSAogKiBJTkdSRVNfU1RSVUNUVVJFX0JUUkVFCiAqIElOR1JFU19TVFJVQ1RVUkVfSEFTSAogKiBJTkdSRVNfU1RSVUNUVVJFX0lTQU0KICoKICoKICogU2V0cyB0aGUgYWxsb3dhYmxlIGlucHV0IGFuZCBvdXRwdXQgZm9ybWF0IGZvciBJbmdyZXMgZGF0ZXMuCiAqIERlZmF1bHRzIHRvIHRoZSB2YWx1ZSBkZWZpbmVkIGJ5IElJX0RBVEVfRk9STUFULiBJZiBJSV9EQVRFX0ZPUk1BVCBpcwogKiBub3Qgc2V0IHRoZSBkZWZhdWx0IGRhdGUgZm9ybWF0IGlzIFVTLCBlLmcuIG1tL2RkL3l5LiBWYWxpZCB2YWx1ZXMKICogZm9yIGRhdGVfZm9ybWF0IGFyZToKICoKICogSU5HUkVTX0RBVEVfRE1ZCiAqIElOR1JFU19EQVRFX0ZJTklTSAogKiBJTkdSRVNfREFURV9HRVJNQU4KICogSU5HUkVTX0RBVEVfSVNPCiAqIElOR1JFU19EQVRFX0lTTzQKICogSU5HUkVTX0RBVEVfTURZCiAqIElOR1JFU19EQVRFX01VTFRJTkFUSU9OQUwKICogSU5HUkVTX0RBVEVfTVVMVElOQVRJT05BTDQKICogSU5HUkVTX0RBVEVfWU1ECiAqIElOR1JFU19EQVRFX1VTCiAqCiAqCiAqIExlYWRpbmcgb3IgdHJhaWxpbmcgY3VycmVuY3kgc2lnbi4gVmFsaWQgdmFsdWVzIGZvciBtb25leV9sb3J0CiAqIGFyZToKICoKICogSU5HUkVTX01PTkVZX0xFQURJTkcKICogSU5HUkVTX01PTkVZX1RSQUlMSU5HCiAqCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhIEluZ3JlcyBsaW5rIHJlc291cmNlIG9uIHN1Y2Nlc3MKICogQHRocm93cyBJbmdyZXNpaUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW5ncmVzX2Nvbm5lY3Qoc3RyaW5nICRkYXRhYmFzZSA9IG51bGwsIHN0cmluZyAkdXNlcm5hbWUgPSBudWxsLCBzdHJpbmcgJHBhc3N3b3JkID0gbnVsbCwgYXJyYXkgJG9wdGlvbnMgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJG9wdGlvbnMgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGluZ3Jlc19jb25uZWN0KCRkYXRhYmFzZSwgJHVzZXJuYW1lLCAkcGFzc3dvcmQsICRvcHRpb25zKTsKICAgIH0gZWxzZWlmICgkcGFzc3dvcmQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGluZ3Jlc19jb25uZWN0KCRkYXRhYmFzZSwgJHVzZXJuYW1lLCAkcGFzc3dvcmQpOwogICAgfSBlbHNlaWYgKCR1c2VybmFtZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcaW5ncmVzX2Nvbm5lY3QoJGRhdGFiYXNlLCAkdXNlcm5hbWUpOwogICAgfSBlbHNlaWYgKCRkYXRhYmFzZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcaW5ncmVzX2Nvbm5lY3QoJGRhdGFiYXNlKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxpbmdyZXNfY29ubmVjdCgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW5ncmVzaWlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogRXhlY3V0ZSBhIHF1ZXJ5IHByZXBhcmVkIHVzaW5nIGluZ3Jlc19wcmVwYXJlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBUaGUgcmVzdWx0IHF1ZXJ5IGlkZW50aWZpZXIKICogQHBhcmFtIGFycmF5ICRwYXJhbXMgQW4gYXJyYXkgb2YgcGFyYW1ldGVyIHZhbHVlcyB0byBiZSB1c2VkIHdpdGggdGhlIHF1ZXJ5CiAqIEBwYXJhbSBzdHJpbmcgJHR5cGVzIEEgc3RyaW5nIGNvbnRhaW5pbmcgYSBzZXF1ZW5jZSBvZiB0eXBlcyBmb3IgdGhlIHBhcmFtZXRlciB2YWx1ZXMKICogcGFzc2VkLiBTZWUgdGhlIHR5cGVzIHBhcmFtZXRlciBpbgogKiBpbmdyZXNfcXVlcnkgZm9yIHRoZSBsaXN0IG9mIHR5cGUgY29kZXMuCiAqIEB0aHJvd3MgSW5ncmVzaWlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGluZ3Jlc19leGVjdXRlKCRyZXN1bHQsIGFycmF5ICRwYXJhbXMgPSBudWxsLCBzdHJpbmcgJHR5cGVzID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCR0eXBlcyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcaW5ncmVzX2V4ZWN1dGUoJHJlc3VsdCwgJHBhcmFtcywgJHR5cGVzKTsKICAgIH0gZWxzZWlmICgkcGFyYW1zICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpbmdyZXNfZXhlY3V0ZSgkcmVzdWx0LCAkcGFyYW1zKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxpbmdyZXNfZXhlY3V0ZSgkcmVzdWx0KTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEluZ3Jlc2lpRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBpbmdyZXNfZmllbGRfbmFtZSByZXR1cm5zIHRoZSBuYW1lIG9mIGEgZmllbGQKICogaW4gYSBxdWVyeSByZXN1bHQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IFRoZSBxdWVyeSByZXN1bHQgaWRlbnRpZmllcgogKiBAcGFyYW0gaW50ICRpbmRleCBpbmRleCBpcyB0aGUgZmllbGQgd2hvc2UgbmFtZSB3aWxsIGJlCiAqIHJldHJpZXZlZC4KICoKICogVGhlIHBvc3NpYmxlIHZhbHVlcyBvZiBpbmRleCBkZXBlbmQgdXBvbgogKiB0aGUgdmFsdWUKICogb2YgaW5ncmVzLmFycmF5X2luZGV4X3N0YXJ0LgogKiBJZiBpbmdyZXMuYXJyYXlfaW5kZXhfc3RhcnQKICogaXMgMSAodGhlIGRlZmF1bHQpCiAqIHRoZW4gaW5kZXggbXVzdCBiZQogKiBiZXR3ZWVuIDEgYW5kIHRoZSB2YWx1ZSByZXR1cm5lZAogKiBieSBpbmdyZXNfbnVtX2ZpZWxkcy4gSWYgaW5ncmVzLmFycmF5X2luZGV4X3N0YXJ0CiAqIGlzIDAgdGhlbiBpbmRleCBtdXN0CiAqIGJlIGJldHdlZW4gMAogKiBhbmQgaW5ncmVzX251bV9maWVsZHMgLQogKiAxLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBuYW1lIG9mIGEgZmllbGQKICogaW4gYSBxdWVyeSByZXN1bHQKICogQHRocm93cyBJbmdyZXNpaUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW5ncmVzX2ZpZWxkX25hbWUoJHJlc3VsdCwgaW50ICRpbmRleCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGluZ3Jlc19maWVsZF9uYW1lKCRyZXN1bHQsICRpbmRleCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbmdyZXNpaUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBHZXQgdGhlIHR5cGUgb2YgYSBmaWVsZCBpbiBhIHF1ZXJ5IHJlc3VsdC4KICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgVGhlIHF1ZXJ5IHJlc3VsdCBpZGVudGlmaWVyCiAqIEBwYXJhbSBpbnQgJGluZGV4IGluZGV4IGlzIHRoZSBmaWVsZCB3aG9zZSB0eXBlIHdpbGwgYmUKICogcmV0cmlldmVkLgogKgogKiBUaGUgcG9zc2libGUgdmFsdWVzIG9mIGluZGV4IGRlcGVuZCB1cG9uCiAqIHRoZSB2YWx1ZQogKiBvZiBpbmdyZXMuYXJyYXlfaW5kZXhfc3RhcnQuCiAqIElmIGluZ3Jlcy5hcnJheV9pbmRleF9zdGFydAogKiBpcyAxICh0aGUgZGVmYXVsdCkKICogdGhlbiBpbmRleCBtdXN0IGJlCiAqIGJldHdlZW4gMSBhbmQgdGhlIHZhbHVlIHJldHVybmVkCiAqIGJ5IGluZ3Jlc19udW1fZmllbGRzLiBJZiBpbmdyZXMuYXJyYXlfaW5kZXhfc3RhcnQKICogaXMgMCB0aGVuIGluZGV4IG11c3QKICogYmUgYmV0d2VlbiAwCiAqIGFuZCBpbmdyZXNfbnVtX2ZpZWxkcyAtCiAqIDEuCiAqIEByZXR1cm4gc3RyaW5nIGluZ3Jlc19maWVsZF90eXBlIHJldHVybnMgdGhlIHR5cGUgb2YgYQogKiBmaWVsZCBpbiBhIHF1ZXJ5IHJlc3VsdC4gIEV4YW1wbGVzIG9mCiAqIHR5cGVzIHJldHVybmVkIGFyZSBJSUFQSV9CWVRFX1RZUEUsCiAqIElJQVBJX0NIQV9UWVBFLCBJSUFQSV9EVEVfVFlQRSwKICogSUlBUElfRkxUX1RZUEUsIElJQVBJX0lOVF9UWVBFLAogKiBJSUFQSV9WQ0hfVFlQRS4gU29tZSBvZiB0aGVzZSB0eXBlcyBjYW4gbWFwIHRvIG1vcmUKICogdGhhbiBvbmUgU1FMIHR5cGUgZGVwZW5kaW5nIG9uIHRoZSBsZW5ndGggb2YgdGhlIGZpZWxkIChzZWUKICogaW5ncmVzX2ZpZWxkX2xlbmd0aCkuIEZvciBleGFtcGxlCiAqIElJQVBJX0ZMVF9UWVBFIGNhbiBiZSBhIGZsb2F0NCBvciBhIGZsb2F0OC4gRm9yIGRldGFpbGVkCiAqIGluZm9ybWF0aW9uLCBzZWUgdGhlIEluZ3JlcyBPcGVuQVBJIFVzZXIgR3VpZGUsIEFwcGVuZGl4CiAqICJEYXRhIFR5cGVzIiBpbiB0aGUgSW5ncmVzIGRvY3VtZW50YXRpb24uCiAqIEB0aHJvd3MgSW5ncmVzaWlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGluZ3Jlc19maWVsZF90eXBlKCRyZXN1bHQsIGludCAkaW5kZXgpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbmdyZXNfZmllbGRfdHlwZSgkcmVzdWx0LCAkaW5kZXgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW5ncmVzaWlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICoKICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgVGhlIHF1ZXJ5IHJlc3VsdCBpZGVudGlmaWVyCiAqIEB0aHJvd3MgSW5ncmVzaWlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGluZ3Jlc19mcmVlX3Jlc3VsdCgkcmVzdWx0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGluZ3Jlc19mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEluZ3Jlc2lpRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBPcGVuIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uIHRvIGFuIEluZ3JlcyBkYXRhYmFzZS4KICoKICogVGhlcmUgYXJlIG9ubHkgdHdvIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhpcyBmdW5jdGlvbiBhbmQKICogaW5ncmVzX2Nvbm5lY3Q6IEZpcnN0LCB3aGVuIGNvbm5lY3RpbmcsIHRoZQogKiBmdW5jdGlvbiB3aWxsIGluaXRpYWxseSB0cnkgdG8gZmluZCBhIChwZXJzaXN0ZW50KSBsaW5rIHRoYXQgaXMKICogYWxyZWFkeSBvcGVuZWQgd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzLiAgSWYgb25lIGlzIGZvdW5kLCBhbgogKiBpZGVudGlmaWVyIGZvciBpdCB3aWxsIGJlIHJldHVybmVkIGluc3RlYWQgb2Ygb3BlbmluZyBhIG5ldwogKiBjb25uZWN0aW9uLiBTZWNvbmQsIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBJbmdyZXMgc2VydmVyIHdpbGwgbm90CiAqIGJlIGNsb3NlZCB3aGVuIHRoZSBleGVjdXRpb24gb2YgdGhlIHNjcmlwdCBlbmRzLiAgSW5zdGVhZCwgdGhlCiAqIGxpbmsgd2lsbCByZW1haW4gb3BlbiBmb3IgZnV0dXJlIHVzZQogKiAoaW5ncmVzX2Nsb3NlIHdpbGwgbm90IGNsb3NlIGxpbmtzCiAqIGVzdGFibGlzaGVkIGJ5IGluZ3Jlc19wY29ubmVjdCkuIFRoaXMgdHlwZQogKiBvZiBsaW5rIGlzIHRoZXJlZm9yZSBjYWxsZWQgInBlcnNpc3RlbnQiLgogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhYmFzZSBUaGUgZGF0YWJhc2UgbmFtZS4gTXVzdCBmb2xsb3cgdGhlIHN5bnRheDoKICoKICogW3Zub2RlOjpdZGJuYW1lWy9zdnJfY2xhc3NdCiAqIEBwYXJhbSBzdHJpbmcgJHVzZXJuYW1lIFRoZSBJbmdyZXMgdXNlciBuYW1lCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkIFRoZSBwYXNzd29yZCBhc3NvY2lhdGVkIHdpdGggdXNlcm5hbWUKICogQHBhcmFtIGFycmF5ICRvcHRpb25zIFNlZSBpbmdyZXNfY29ubmVjdCBmb3IgdGhlIGxpc3Qgb2Ygb3B0aW9ucyB0aGF0CiAqIGNhbiBiZSBwYXNzZWQKICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGFuIEluZ3JlcyBsaW5rIHJlc291cmNlIG9uIHN1Y2Nlc3MKICogQHRocm93cyBJbmdyZXNpaUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW5ncmVzX3Bjb25uZWN0KHN0cmluZyAkZGF0YWJhc2UgPSBudWxsLCBzdHJpbmcgJHVzZXJuYW1lID0gbnVsbCwgc3RyaW5nICRwYXNzd29yZCA9IG51bGwsIGFycmF5ICRvcHRpb25zID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRvcHRpb25zICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpbmdyZXNfcGNvbm5lY3QoJGRhdGFiYXNlLCAkdXNlcm5hbWUsICRwYXNzd29yZCwgJG9wdGlvbnMpOwogICAgfSBlbHNlaWYgKCRwYXNzd29yZCAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcaW5ncmVzX3Bjb25uZWN0KCRkYXRhYmFzZSwgJHVzZXJuYW1lLCAkcGFzc3dvcmQpOwogICAgfSBlbHNlaWYgKCR1c2VybmFtZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcaW5ncmVzX3Bjb25uZWN0KCRkYXRhYmFzZSwgJHVzZXJuYW1lKTsKICAgIH0gZWxzZWlmICgkZGF0YWJhc2UgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGluZ3Jlc19wY29ubmVjdCgkZGF0YWJhc2UpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGluZ3Jlc19wY29ubmVjdCgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW5ncmVzaWlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHBvc2l0aW9uIHRoZSBjdXJzb3IgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXN1bHQKICogcmVzb3VyY2UgYmVmb3JlIGlzc3VpbmcgYSBmZXRjaC4gIElmIGluZ3Jlcy5hcnJheV9pbmRleF9zdGFydAogKiBpcyBzZXQgdG8gMCB0aGVuIHRoZSBmaXJzdCByb3cgaXMgMCBlbHNlIGl0IGlzIDEuCiAqIGluZ3Jlc19yZXN1bHRfc2VlayBjYW4gYmUgdXNlZCBvbmx5IHdpdGggcXVlcmllcyB0aGF0CiAqIG1ha2UgdXNlIG9mIHNjcm9sbGFibGUKICogY3Vyc29ycy4gSXQgY2Fubm90IGJlIHVzZWQgd2l0aAogKiBpbmdyZXNfdW5idWZmZXJlZF9xdWVyeS4KICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgVGhlIHJlc3VsdCBpZGVudGlmaWVyIGZvciBhIHF1ZXJ5CiAqIEBwYXJhbSBpbnQgJHBvc2l0aW9uIFRoZSByb3cgdG8gcG9zaXRpb24gdGhlIGN1cnNvciBvbi4gSWYgaW5ncmVzLmFycmF5X2luZGV4X3N0YXJ0CiAqIGlzIHNldCB0byAwLCB0aGVuIHRoZSBmaXJzdCByb3cgaXMgMCwgZWxzZSBpdCBpcyAxCiAqIEB0aHJvd3MgSW5ncmVzaWlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGluZ3Jlc19yZXN1bHRfc2VlaygkcmVzdWx0LCBpbnQgJHBvc2l0aW9uKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGluZ3Jlc19yZXN1bHRfc2VlaygkcmVzdWx0LCAkcG9zaXRpb24pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW5ncmVzaWlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGluZ3Jlc19yb2xsYmFjayByb2xscyBiYWNrIHRoZSBjdXJyZW50bHkKICogb3BlbiB0cmFuc2FjdGlvbiwgYWN0dWFsbHkgY2FuY2VsbGluZyBhbGwgY2hhbmdlcyBtYWRlIHRvIHRoZQogKiBkYXRhYmFzZSBkdXJpbmcgdGhlIHRyYW5zYWN0aW9uLgogKgogKiBUaGlzIGNsb3NlcyB0aGUgdHJhbnNhY3Rpb24uIEEgbmV3IHRyYW5zYWN0aW9uIGNhbiBiZSBvcGVuZWQgYnkgc2VuZGluZyBhCiAqIHF1ZXJ5IHdpdGggaW5ncmVzX3F1ZXJ5LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmsgVGhlIGNvbm5lY3Rpb24gbGluayBpZGVudGlmaWVyCiAqIEB0aHJvd3MgSW5ncmVzaWlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGluZ3Jlc19yb2xsYmFjaygkbGluayk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbmdyZXNfcm9sbGJhY2soJGxpbmspOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW5ncmVzaWlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGluZ3Jlc19zZXRfZW52aXJvbm1lbnQgaXMgY2FsbGVkIHRvIHNldCBlbnZpcm9ubWVudGFsCiAqIG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIG91dHB1dCBvZiBjZXJ0YWluIHZhbHVlcyBmcm9tIEluZ3Jlcywgc3VjaCBhcyB0aGUKICogdGltZXpvbmUsIGRhdGUgZm9ybWF0LCBkZWNpbWFsIGNoYXJhY3RlciBzZXBhcmF0b3IsIGFuZCBmbG9hdCBwcmVjaXNpb24uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGluayBUaGUgY29ubmVjdGlvbiBsaW5rIGlkZW50aWZpZXIKICogQHBhcmFtIGFycmF5ICRvcHRpb25zIEFuIGVudW1lcmF0ZWQgYXJyYXkgb2Ygb3B0aW9uIG5hbWUvdmFsdWUgcGFpcnMuIFRoZSBmb2xsb3dpbmcgdGFibGUKICogbGlzdHMgdGhlIG9wdGlvbiBuYW1lIGFuZCB0aGUgZXhwZWN0ZWQgdHlwZQogKgogKgogKgogKgogKgogKiBPcHRpb24gbmFtZQogKiBPcHRpb24gdHlwZQogKiBEZXNjcmlwdGlvbgogKiBFeGFtcGxlCiAqCiAqCiAqCiAqCiAqIGRhdGVfY2VudHVyeV9ib3VuZGFyeQogKiBpbnRlZ2VyCiAqIFRoZSB0aHJlc2hvbGQgYnkgd2hpY2ggYSAyLWRpZ2l0IHllYXIgaXMgZGV0ZXJtaW5lZCB0byBiZSBpbgogKiB0aGUgY3VycmVudCBjZW50dXJ5IG9yIGluIHRoZSBuZXh0IGNlbnR1cnkuIEVxdWl2YWxlbnQgdG8gSUlfREFURV9DRU5UVVJZX0JPVU5EQVJZCiAqIDUwCiAqCiAqCiAqIHRpbWV6b25lCiAqIHN0cmluZwogKiBDb250cm9scyB0aGUgdGltZXpvbmUgb2YgdGhlIHNlc3Npb24uIElmIG5vdCBzZXQsIGl0IHdpbGwKICogZGVmYXVsdCB0aGUgdmFsdWUgZGVmaW5lZCBieSBJSV9USU1FWk9ORV9OQU1FLiBJZgogKiBJSV9USU1FWk9ORV9OQU1FIGlzIG5vdCBkZWZpbmVkLCBOQS1QQUNJRklDIChHTVQtOCB3aXRoIERheWxpZ2h0CiAqIFNhdmluZ3MpIGlzIHVzZWQuCiAqIFVOSVRFRC1LSU5HRE9NCiAqCiAqCiAqIGRhdGVfZm9ybWF0CiAqIGludGVnZXIKICogU2V0cyB0aGUgYWxsb3dhYmxlIGlucHV0IGFuZCBvdXRwdXQgZm9ybWF0IGZvciBJbmdyZXMgZGF0ZXMuCiAqIERlZmF1bHRzIHRvIHRoZSB2YWx1ZSBkZWZpbmVkIGJ5IElJX0RBVEVfRk9STUFULiBJZiBJSV9EQVRFX0ZPUk1BVCBpcwogKiBub3Qgc2V0LCB0aGUgZGVmYXVsdCBkYXRlIGZvcm1hdCBpcyBVUywgZm9yIGV4YW1wbGUgbW0vZGQveXkuIFZhbGlkIHZhbHVlcwogKiBmb3IgZGF0ZV9mb3JtYXQgYXJlOgogKgogKiBJTkdSRVNfREFURV9ETVkKICogSU5HUkVTX0RBVEVfRklOSVNICiAqIElOR1JFU19EQVRFX0dFUk1BTgogKiBJTkdSRVNfREFURV9JU08KICogSU5HUkVTX0RBVEVfSVNPNAogKiBJTkdSRVNfREFURV9NRFkKICogSU5HUkVTX0RBVEVfTVVMVElOQVRJT05BTAogKiBJTkdSRVNfREFURV9NVUxUSU5BVElPTkFMNAogKiBJTkdSRVNfREFURV9ZTUQKICogSU5HUkVTX0RBVEVfVVMKICoKICoKICoKICogSU5HUkVTX0RBVEVfSVNPNAogKgogKgogKiBkZWNpbWFsX3NlcGFyYXRvcgogKiBzdHJpbmcKICogVGhlIGNoYXJhY3RlciBpZGVudGlmaWVyIGZvciBkZWNpbWFsIGRhdGEKICogIiwiCiAqCiAqCiAqIG1vbmV5X2xvcnQKICogaW50ZWdlcgogKiBMZWFkaW5nIG9yIHRyYWlsaW5nIGN1cnJlbmN5IHNpZ24uIFZhbGlkIHZhbHVlcyBmb3IgbW9uZXlfbG9ydAogKiBhcmU6CiAqCiAqIElOR1JFU19NT05FWV9MRUFESU5HCiAqIElOR1JFU19NT05FWV9UUkFJTElORwogKgogKgogKgogKiBJTkdSRVNfTU9ORVlfTEVBRElORwogKgogKgogKiBtb25leV9zaWduCiAqIHN0cmluZwogKiBUaGUgY3VycmVuY3kgc3ltYm9sIHRvIGJlIHVzZWQgd2l0aCB0aGUgTU9ORVkgZGF0YXR5cGUKICog4oKsCiAqCiAqCiAqIG1vbmV5X3ByZWNpc2lvbgogKiBpbnRlZ2VyCiAqIFRoZSBwcmVjaXNpb24gb2YgdGhlIE1PTkVZIGRhdGF0eXBlCiAqIDIKICoKICoKICogZmxvYXQ0X3ByZWNpc2lvbgogKiBpbnRlZ2VyCiAqIFByZWNpc2lvbiBvZiB0aGUgRkxPQVQ0IGRhdGF0eXBlCiAqIDEwCiAqCiAqCiAqIGZsb2F0OF9wcmVjaXNpb24KICogaW50ZWdlcgogKiBQcmVjaXNpb24gb2YgdGhlIEZMT0FUOCBkYXRhCiAqIDEwCiAqCiAqCiAqIGJsb2Jfc2VnbWVudF9sZW5ndGgKICogaW50ZWdlcgogKiBUaGUgYW1vdW50IG9mIGRhdGEgaW4gYnl0ZXMgdG8gZmV0Y2ggYXQgYSB0aW1lIHdoZW4gcmV0cmlldmluZwogKiBCTE9CIG9yIENMT0IgZGF0YS4gRGVmYXVsdHMgdG8gNDA5NiBieXRlcyB3aGVuIG5vdCBzZXQgZXhwbGljaXRseQogKiA4MTkyCiAqCiAqCiAqCiAqCiAqCiAqIFNldHMgdGhlIGFsbG93YWJsZSBpbnB1dCBhbmQgb3V0cHV0IGZvcm1hdCBmb3IgSW5ncmVzIGRhdGVzLgogKiBEZWZhdWx0cyB0byB0aGUgdmFsdWUgZGVmaW5lZCBieSBJSV9EQVRFX0ZPUk1BVC4gSWYgSUlfREFURV9GT1JNQVQgaXMKICogbm90IHNldCwgdGhlIGRlZmF1bHQgZGF0ZSBmb3JtYXQgaXMgVVMsIGZvciBleGFtcGxlIG1tL2RkL3l5LiBWYWxpZCB2YWx1ZXMKICogZm9yIGRhdGVfZm9ybWF0IGFyZToKICoKICogSU5HUkVTX0RBVEVfRE1ZCiAqIElOR1JFU19EQVRFX0ZJTklTSAogKiBJTkdSRVNfREFURV9HRVJNQU4KICogSU5HUkVTX0RBVEVfSVNPCiAqIElOR1JFU19EQVRFX0lTTzQKICogSU5HUkVTX0RBVEVfTURZCiAqIElOR1JFU19EQVRFX01VTFRJTkFUSU9OQUwKICogSU5HUkVTX0RBVEVfTVVMVElOQVRJT05BTDQKICogSU5HUkVTX0RBVEVfWU1ECiAqIElOR1JFU19EQVRFX1VTCiAqCiAqCiAqIExlYWRpbmcgb3IgdHJhaWxpbmcgY3VycmVuY3kgc2lnbi4gVmFsaWQgdmFsdWVzIGZvciBtb25leV9sb3J0CiAqIGFyZToKICoKICogSU5HUkVTX01PTkVZX0xFQURJTkcKICogSU5HUkVTX01PTkVZX1RSQUlMSU5HCiAqCiAqIEB0aHJvd3MgSW5ncmVzaWlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGluZ3Jlc19zZXRfZW52aXJvbm1lbnQoJGxpbmssIGFycmF5ICRvcHRpb25zKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGluZ3Jlc19zZXRfZW52aXJvbm1lbnQoJGxpbmssICRvcHRpb25zKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEluZ3Jlc2lpRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/inotify.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xJbm90aWZ5RXhjZXB0aW9uOwoKLyoqCiAqIEluaXRpYWxpemUgYW4gaW5vdGlmeSBpbnN0YW5jZSBmb3IgdXNlIHdpdGgKICogaW5vdGlmeV9hZGRfd2F0Y2gKICoKICogQHJldHVybiByZXNvdXJjZSBBIHN0cmVhbSByZXNvdXJjZS4KICogQHRocm93cyBJbm90aWZ5RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbm90aWZ5X2luaXQoKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGlub3RpZnlfaW5pdCgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW5vdGlmeUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBpbm90aWZ5X3JtX3dhdGNoIHJlbW92ZXMgdGhlIHdhdGNoCiAqIHdhdGNoX2Rlc2NyaXB0b3IgZnJvbSB0aGUgaW5vdGlmeSBpbnN0YW5jZQogKiBpbm90aWZ5X2luc3RhbmNlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGlub3RpZnlfaW5zdGFuY2UgUmVzb3VyY2UgcmV0dXJuZWQgYnkKICogaW5vdGlmeV9pbml0CiAqIEBwYXJhbSBpbnQgJHdhdGNoX2Rlc2NyaXB0b3IgV2F0Y2ggdG8gcmVtb3ZlIGZyb20gdGhlIGluc3RhbmNlCiAqIEB0aHJvd3MgSW5vdGlmeUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW5vdGlmeV9ybV93YXRjaCgkaW5vdGlmeV9pbnN0YW5jZSwgaW50ICR3YXRjaF9kZXNjcmlwdG9yKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGlub3RpZnlfcm1fd2F0Y2goJGlub3RpZnlfaW5zdGFuY2UsICR3YXRjaF9kZXNjcmlwdG9yKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IElub3RpZnlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/json.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xKc29uRXhjZXB0aW9uOwoKLyoqCiAqIFJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQKICogdmFsdWUuCiAqCiAqIFRoZSBlbmNvZGluZyBpcyBhZmZlY3RlZCBieSB0aGUgc3VwcGxpZWQgb3B0aW9ucwogKiBhbmQgYWRkaXRpb25hbGx5IHRoZSBlbmNvZGluZyBvZiBmbG9hdCB2YWx1ZXMgZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YKICogc2VyaWFsaXplX3ByZWNpc2lvbi4KICoKICogQHBhcmFtIG1peGVkICR2YWx1ZSBUaGUgdmFsdWUgYmVpbmcgZW5jb2RlZC4gQ2FuIGJlIGFueSB0eXBlIGV4Y2VwdAogKiBhIHJlc291cmNlLgogKgogKiBBbGwgc3RyaW5nIGRhdGEgbXVzdCBiZSBVVEYtOCBlbmNvZGVkLgogKgogKiBQSFAgaW1wbGVtZW50cyBhIHN1cGVyc2V0IG9mIEpTT04gYXMgc3BlY2lmaWVkIGluIHRoZSBvcmlnaW5hbAogKiBSRkMgNzE1OS4KICogQHBhcmFtIGludCAkb3B0aW9ucyBCaXRtYXNrIGNvbnNpc3Rpbmcgb2YKICogSlNPTl9GT1JDRV9PQkpFQ1QsCiAqIEpTT05fSEVYX1FVT1QsCiAqIEpTT05fSEVYX1RBRywKICogSlNPTl9IRVhfQU1QLAogKiBKU09OX0hFWF9BUE9TLAogKiBKU09OX0lOVkFMSURfVVRGOF9JR05PUkUsCiAqIEpTT05fSU5WQUxJRF9VVEY4X1NVQlNUSVRVVEUsCiAqIEpTT05fTlVNRVJJQ19DSEVDSywKICogSlNPTl9QQVJUSUFMX09VVFBVVF9PTl9FUlJPUiwKICogSlNPTl9QUkVTRVJWRV9aRVJPX0ZSQUNUSU9OLAogKiBKU09OX1BSRVRUWV9QUklOVCwKICogSlNPTl9VTkVTQ0FQRURfTElORV9URVJNSU5BVE9SUywKICogSlNPTl9VTkVTQ0FQRURfU0xBU0hFUywKICogSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSwKICogSlNPTl9USFJPV19PTl9FUlJPUi4KICogVGhlIGJlaGF2aW91ciBvZiB0aGVzZSBjb25zdGFudHMgaXMgZGVzY3JpYmVkIG9uIHRoZQogKiBKU09OIGNvbnN0YW50cyBwYWdlLgogKiBAcGFyYW0gaW50ICRkZXB0aCBTZXQgdGhlIG1heGltdW0gZGVwdGguIE11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgYSBKU09OIGVuY29kZWQgc3RyaW5nIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgSnNvbkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24ganNvbl9lbmNvZGUoJHZhbHVlLCBpbnQgJG9wdGlvbnMgPSAwLCBpbnQgJGRlcHRoID0gNTEyKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcanNvbl9lbmNvZGUoJHZhbHVlLCAkb3B0aW9ucywgJGRlcHRoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEpzb25FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0dXJucyB0aGUgZXJyb3Igc3RyaW5nIG9mIHRoZSBsYXN0IGpzb25fZW5jb2RlIG9yIGpzb25fZGVjb2RlCiAqIGNhbGwsIHdoaWNoIGRpZCBub3Qgc3BlY2lmeSBKU09OX1RIUk9XX09OX0VSUk9SLgogKgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlIG9uIHN1Y2Nlc3MsICJObyBlcnJvciIgaWYgbm8KICogZXJyb3IgaGFzIG9jY3VycmVkLgogKiBAdGhyb3dzIEpzb25FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGpzb25fbGFzdF9lcnJvcl9tc2coKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcanNvbl9sYXN0X2Vycm9yX21zZygpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSnNvbkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/ldap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xMZGFwRXhjZXB0aW9uOwoKLyoqCiAqIERvZXMgdGhlIHNhbWUgdGhpbmcgYXMgbGRhcF9hZGQgYnV0IHJldHVybnMgdGhlIExEQVAgcmVzdWx0IHJlc291cmNlIHRvIGJlIHBhcnNlZCB3aXRoIGxkYXBfcGFyc2VfcmVzdWx0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllcgogKiBAcGFyYW0gc3RyaW5nICRkbgogKiBAcGFyYW0gYXJyYXkgJGVudHJ5CiAqIEBwYXJhbSBhcnJheSAkc2VydmVyY3RybHMKICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGFuIExEQVAgcmVzdWx0IGlkZW50aWZpZXIuCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF9hZGRfZXh0KCRsaW5rX2lkZW50aWZpZXIsIHN0cmluZyAkZG4sIGFycmF5ICRlbnRyeSwgYXJyYXkgJHNlcnZlcmN0cmxzID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsZGFwX2FkZF9leHQoJGxpbmtfaWRlbnRpZmllciwgJGRuLCAkZW50cnksICRzZXJ2ZXJjdHJscyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBMZGFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEFkZCBlbnRyaWVzIGluIHRoZSBMREFQIGRpcmVjdG9yeS4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IGxkYXBfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkZG4gVGhlIGRpc3Rpbmd1aXNoZWQgbmFtZSBvZiBhbiBMREFQIGVudGl0eS4KICogQHBhcmFtIGFycmF5ICRlbnRyeSBBbiBhcnJheSB0aGF0IHNwZWNpZmllcyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVudHJ5LiBUaGUgdmFsdWVzIGluCiAqIHRoZSBlbnRyaWVzIGFyZSBpbmRleGVkIGJ5IGluZGl2aWR1YWwgYXR0cmlidXRlcy4KICogSW4gY2FzZSBvZiBtdWx0aXBsZSB2YWx1ZXMgZm9yIGFuIGF0dHJpYnV0ZSwgdGhleSBhcmUgaW5kZXhlZCB1c2luZwogKiBpbnRlZ2VycyBzdGFydGluZyB3aXRoIDAuCiAqCiAqCiAqCiAqIF1dPgogKgogKgogKiBAcGFyYW0gYXJyYXkgJHNlcnZlcmN0cmxzIEFycmF5IG9mIExEQVAgQ29udHJvbHMgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0LgogKiBAdGhyb3dzIExkYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGxkYXBfYWRkKCRsaW5rX2lkZW50aWZpZXIsIHN0cmluZyAkZG4sIGFycmF5ICRlbnRyeSwgYXJyYXkgJHNlcnZlcmN0cmxzID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsZGFwX2FkZCgkbGlua19pZGVudGlmaWVyLCAkZG4sICRlbnRyeSwgJHNlcnZlcmN0cmxzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExkYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERvZXMgdGhlIHNhbWUgdGhpbmcgYXMgbGRhcF9iaW5kIGJ1dCByZXR1cm5zIHRoZSBMREFQIHJlc3VsdCByZXNvdXJjZSB0byBiZSBwYXJzZWQgd2l0aCBsZGFwX3BhcnNlX3Jlc3VsdC4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIKICogQHBhcmFtIHN0cmluZ3xudWxsICRiaW5kX3JkbgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGJpbmRfcGFzc3dvcmQKICogQHBhcmFtIGFycmF5ICRzZXJ2ZXJjdHJscwogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYW4gTERBUCByZXN1bHQgaWRlbnRpZmllci4KICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX2JpbmRfZXh0KCRsaW5rX2lkZW50aWZpZXIsID9zdHJpbmcgJGJpbmRfcmRuID0gbnVsbCwgP3N0cmluZyAkYmluZF9wYXNzd29yZCA9IG51bGwsIGFycmF5ICRzZXJ2ZXJjdHJscyA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9iaW5kX2V4dCgkbGlua19pZGVudGlmaWVyLCAkYmluZF9yZG4sICRiaW5kX3Bhc3N3b3JkLCAkc2VydmVyY3RybHMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBCaW5kcyB0byB0aGUgTERBUCBkaXJlY3Rvcnkgd2l0aCBzcGVjaWZpZWQgUkROIGFuZCBwYXNzd29yZC4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IGxkYXBfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZ3xudWxsICRiaW5kX3JkbgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGJpbmRfcGFzc3dvcmQKICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX2JpbmQoJGxpbmtfaWRlbnRpZmllciwgP3N0cmluZyAkYmluZF9yZG4gPSBudWxsLCA/c3RyaW5nICRiaW5kX3Bhc3N3b3JkID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsZGFwX2JpbmQoJGxpbmtfaWRlbnRpZmllciwgJGJpbmRfcmRuLCAkYmluZF9wYXNzd29yZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBMZGFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBSZXRyaWV2ZSB0aGUgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbiBzZW5kIGJ5IHRoZSBzZXJ2ZXIuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGluayBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgbGRhcF9jb25uZWN0LgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdAogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGNvb2tpZSBBbiBvcGFxdWUgc3RydWN0dXJlIHNlbnQgYnkgdGhlIHNlcnZlci4KICogQHBhcmFtIGludHxudWxsICRlc3RpbWF0ZWQgVGhlIGVzdGltYXRlZCBudW1iZXIgb2YgZW50cmllcyB0byByZXRyaWV2ZS4KICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX2NvbnRyb2xfcGFnZWRfcmVzdWx0X3Jlc3BvbnNlKCRsaW5rLCAkcmVzdWx0LCA/c3RyaW5nICYkY29va2llID0gbnVsbCwgP2ludCAmJGVzdGltYXRlZCA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9jb250cm9sX3BhZ2VkX3Jlc3VsdF9yZXNwb25zZSgkbGluaywgJHJlc3VsdCwgJGNvb2tpZSwgJGVzdGltYXRlZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBMZGFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBFbmFibGUgTERBUCBwYWdpbmF0aW9uIGJ5IHNlbmRpbmcgdGhlIHBhZ2luYXRpb24gY29udHJvbCAocGFnZSBzaXplLCBjb29raWUuLi4pLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmsgQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IGxkYXBfY29ubmVjdC4KICogQHBhcmFtIGludCAkcGFnZXNpemUgVGhlIG51bWJlciBvZiBlbnRyaWVzIGJ5IHBhZ2UuCiAqIEBwYXJhbSBib29sICRpc2NyaXRpY2FsIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwYWdpbmF0aW9uIGlzIGNyaXRpY2FsIG9yIG5vdC4KICogSWYgdHJ1ZSBhbmQgaWYgdGhlIHNlcnZlciBkb2Vzbid0IHN1cHBvcnQgcGFnaW5hdGlvbiwgdGhlIHNlYXJjaAogKiB3aWxsIHJldHVybiBubyByZXN1bHQuCiAqIEBwYXJhbSBzdHJpbmcgJGNvb2tpZSBBbiBvcGFxdWUgc3RydWN0dXJlIHNlbnQgYnkgdGhlIHNlcnZlcgogKiAobGRhcF9jb250cm9sX3BhZ2VkX3Jlc3VsdF9yZXNwb25zZSkuCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF9jb250cm9sX3BhZ2VkX3Jlc3VsdCgkbGluaywgaW50ICRwYWdlc2l6ZSwgYm9vbCAkaXNjcml0aWNhbCA9IGZhbHNlLCBzdHJpbmcgJGNvb2tpZSA9ICIiKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGxkYXBfY29udHJvbF9wYWdlZF9yZXN1bHQoJGxpbmssICRwYWdlc2l6ZSwgJGlzY3JpdGljYWwsICRjb29raWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc3RvcmVkIGluIHRoZSByZXN1bHQgb2YgcHJldmlvdXMgc2VhcmNoCiAqIG9wZXJhdGlvbnMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSBsZGFwX2Nvbm5lY3QuCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0X2lkZW50aWZpZXIgVGhlIGludGVybmFsIExEQVAgcmVzdWx0LgogKiBAcmV0dXJuIGludCBSZXR1cm5zIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSByZXN1bHQuCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF9jb3VudF9lbnRyaWVzKCRsaW5rX2lkZW50aWZpZXIsICRyZXN1bHRfaWRlbnRpZmllcik6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGxkYXBfY291bnRfZW50cmllcygkbGlua19pZGVudGlmaWVyLCAkcmVzdWx0X2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBEb2VzIHRoZSBzYW1lIHRoaW5nIGFzIGxkYXBfZGVsZXRlIGJ1dCByZXR1cm5zIHRoZSBMREFQIHJlc3VsdCByZXNvdXJjZSB0byBiZSBwYXJzZWQgd2l0aCBsZGFwX3BhcnNlX3Jlc3VsdC4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIKICogQHBhcmFtIHN0cmluZyAkZG4KICogQHBhcmFtIGFycmF5ICRzZXJ2ZXJjdHJscwogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYW4gTERBUCByZXN1bHQgaWRlbnRpZmllci4KICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX2RlbGV0ZV9leHQoJGxpbmtfaWRlbnRpZmllciwgc3RyaW5nICRkbiwgYXJyYXkgJHNlcnZlcmN0cmxzID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsZGFwX2RlbGV0ZV9leHQoJGxpbmtfaWRlbnRpZmllciwgJGRuLCAkc2VydmVyY3RybHMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBEZWxldGVzIGEgcGFydGljdWxhciBlbnRyeSBpbiBMREFQIGRpcmVjdG9yeS4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IGxkYXBfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkZG4gVGhlIGRpc3Rpbmd1aXNoZWQgbmFtZSBvZiBhbiBMREFQIGVudGl0eS4KICogQHBhcmFtIGFycmF5ICRzZXJ2ZXJjdHJscyBBcnJheSBvZiBMREFQIENvbnRyb2xzIHRvIHNlbmQgd2l0aCB0aGUgcmVxdWVzdC4KICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX2RlbGV0ZSgkbGlua19pZGVudGlmaWVyLCBzdHJpbmcgJGRuLCBhcnJheSAkc2VydmVyY3RybHMgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGxkYXBfZGVsZXRlKCRsaW5rX2lkZW50aWZpZXIsICRkbiwgJHNlcnZlcmN0cmxzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExkYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFBlcmZvcm1zIGEgUEFTU1dEIGV4dGVuZGVkIG9wZXJhdGlvbi4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSBsZGFwX2Nvbm5lY3QuCiAqIEBwYXJhbSBzdHJpbmcgJHVzZXIgZG4gb2YgdGhlIHVzZXIgdG8gY2hhbmdlIHRoZSBwYXNzd29yZCBvZi4KICogQHBhcmFtIHN0cmluZyAkb2xkcHcgVGhlIG9sZCBwYXNzd29yZCBvZiB0aGlzIHVzZXIuIE1heSBiZSBvbW1pdGVkIGRlcGVuZGluZyBvZiBzZXJ2ZXIgY29uZmlndXJhdGlvbi4KICogQHBhcmFtIHN0cmluZyAkbmV3cHcgVGhlIG5ldyBwYXNzd29yZCBmb3IgdGhpcyB1c2VyLiBNYXkgYmUgb21pdHRlZCBvciBlbXB0eSB0byBoYXZlIGEgZ2VuZXJhdGVkIHBhc3N3b3JkLgogKiBAcGFyYW0gYXJyYXkgJHNlcnZlcmN0cmxzIElmIHByb3ZpZGVkLCBhIHBhc3N3b3JkIHBvbGljeSByZXF1ZXN0IGNvbnRyb2wgaXMgc2VuZCB3aXRoIHRoZSByZXF1ZXN0IGFuZCB0aGlzIGlzCiAqIGZpbGxlZCB3aXRoIGFuIGFycmF5IG9mIExEQVAgQ29udHJvbHMKICogcmV0dXJuZWQgd2l0aCB0aGUgcmVxdWVzdC4KICogQHJldHVybiBtaXhlZCBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgcGFzc3dvcmQgaWYgbmV3cHcgaXMgZW1wdHkgb3Igb21pdHRlZC4KICogT3RoZXJ3aXNlIHJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIExkYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGxkYXBfZXhvcF9wYXNzd2QoJGxpbmssIHN0cmluZyAkdXNlciA9ICIiLCBzdHJpbmcgJG9sZHB3ID0gIiIsIHN0cmluZyAkbmV3cHcgPSAiIiwgYXJyYXkgJiRzZXJ2ZXJjdHJscyA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9leG9wX3Bhc3N3ZCgkbGluaywgJHVzZXIsICRvbGRwdywgJG5ld3B3LCAkc2VydmVyY3RybHMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBQZXJmb3JtcyBhIFdIT0FNSSBleHRlbmRlZCBvcGVyYXRpb24gYW5kIHJldHVybnMgdGhlIGRhdGEuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGluayBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgbGRhcF9jb25uZWN0LgogKiBAcmV0dXJuIHN0cmluZyBUaGUgZGF0YSByZXR1cm5lZCBieSB0aGUgc2VydmVyLgogKiBAdGhyb3dzIExkYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGxkYXBfZXhvcF93aG9hbWkoJGxpbmspOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsZGFwX2V4b3Bfd2hvYW1pKCRsaW5rKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExkYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUGVyZm9ybXMgYW4gZXh0ZW5kZWQgb3BlcmF0aW9uIG9uIHRoZSBzcGVjaWZpZWQgbGluayB3aXRoCiAqIHJlcW9pZCB0aGUgT0lEIG9mIHRoZSBvcGVyYXRpb24gYW5kCiAqIHJlcWRhdGEgdGhlIGRhdGEuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGluayBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgbGRhcF9jb25uZWN0LgogKiBAcGFyYW0gc3RyaW5nICRyZXFvaWQgVGhlIGV4dGVuZGVkIG9wZXJhdGlvbiByZXF1ZXN0IE9JRC4gWW91IG1heSB1c2Ugb25lIG9mIExEQVBfRVhPUF9TVEFSVF9UTFMsIExEQVBfRVhPUF9NT0RJRllfUEFTU1dELCBMREFQX0VYT1BfUkVGUkVTSCwgTERBUF9FWE9QX1dIT19BTV9JLCBMREFQX0VYT1BfVFVSTiwgb3IgYSBzdHJpbmcgd2l0aCB0aGUgT0lEIG9mIHRoZSBvcGVyYXRpb24geW91IHdhbnQgdG8gc2VuZC4KICogQHBhcmFtIHN0cmluZyAkcmVxZGF0YSBUaGUgZXh0ZW5kZWQgb3BlcmF0aW9uIHJlcXVlc3QgZGF0YS4gTWF5IGJlIE5VTEwgZm9yIHNvbWUgb3BlcmF0aW9ucyBsaWtlIExEQVBfRVhPUF9XSE9fQU1fSSwgbWF5IGFsc28gbmVlZCB0byBiZSBCRVIgZW5jb2RlZC4KICogQHBhcmFtIGFycmF5fG51bGwgJHNlcnZlcmN0cmxzIEFycmF5IG9mIExEQVAgQ29udHJvbHMgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0LgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJHJldGRhdGEgV2lsbCBiZSBmaWxsZWQgd2l0aCB0aGUgZXh0ZW5kZWQgb3BlcmF0aW9uIHJlc3BvbnNlIGRhdGEgaWYgcHJvdmlkZWQuCiAqIElmIG5vdCBwcm92aWRlZCB5b3UgbWF5IHVzZSBsZGFwX3BhcnNlX2V4b3Agb24gdGhlIHJlc3VsdCBvYmplY3QKICogbGF0ZXIgdG8gZ2V0IHRoaXMgZGF0YS4KICogQHBhcmFtIHN0cmluZ3xudWxsICRyZXRvaWQgV2lsbCBiZSBmaWxsZWQgd2l0aCB0aGUgcmVzcG9uc2UgT0lEIGlmIHByb3ZpZGVkLCB1c3VhbGx5IGVxdWFsIHRvIHRoZSByZXF1ZXN0IE9JRC4KICogQHJldHVybiBtaXhlZCBXaGVuIHVzZWQgd2l0aCByZXRkYXRhLCByZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICogV2hlbiB1c2VkIHdpdGhvdXQgcmV0ZGF0YSwgcmV0dXJucyBhIHJlc3VsdCBpZGVudGlmaWVyLgogKiBAdGhyb3dzIExkYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGxkYXBfZXhvcCgkbGluaywgc3RyaW5nICRyZXFvaWQsIHN0cmluZyAkcmVxZGF0YSA9IG51bGwsID9hcnJheSAkc2VydmVyY3RybHMgPSBudWxsLCA/c3RyaW5nICYkcmV0ZGF0YSA9IG51bGwsID9zdHJpbmcgJiRyZXRvaWQgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGxkYXBfZXhvcCgkbGluaywgJHJlcW9pZCwgJHJlcWRhdGEsICRzZXJ2ZXJjdHJscywgJHJldGRhdGEsICRyZXRvaWQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBTcGxpdHMgdGhlIEROIHJldHVybmVkIGJ5IGxkYXBfZ2V0X2RuIGFuZCBicmVha3MgaXQKICogdXAgaW50byBpdHMgY29tcG9uZW50IHBhcnRzLiBFYWNoIHBhcnQgaXMga25vd24gYXMgUmVsYXRpdmUgRGlzdGluZ3Vpc2hlZAogKiBOYW1lLCBvciBSRE4uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRuIFRoZSBkaXN0aW5ndWlzaGVkIG5hbWUgb2YgYW4gTERBUCBlbnRpdHkuCiAqIEBwYXJhbSBpbnQgJHdpdGhfYXR0cmliIFVzZWQgdG8gcmVxdWVzdCBpZiB0aGUgUkROcyBhcmUgcmV0dXJuZWQgd2l0aCBvbmx5IHZhbHVlcyBvciB0aGVpcgogKiBhdHRyaWJ1dGVzIGFzIHdlbGwuICBUbyBnZXQgUkROcyB3aXRoIHRoZSBhdHRyaWJ1dGVzIChpLmUuIGluCiAqIGF0dHJpYnV0ZT12YWx1ZSBmb3JtYXQpIHNldCB3aXRoX2F0dHJpYiB0byAwCiAqIGFuZCB0byBnZXQgb25seSB2YWx1ZXMgc2V0IGl0IHRvIDEuCiAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgRE4gY29tcG9uZW50cy4KICogVGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGFycmF5IGhhcyBjb3VudCBrZXkgYW5kCiAqIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiByZXR1cm5lZCB2YWx1ZXMsIG5leHQgZWxlbWVudHMgYXJlIG51bWVyaWNhbGx5CiAqIGluZGV4ZWQgRE4gY29tcG9uZW50cy4KICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX2V4cGxvZGVfZG4oc3RyaW5nICRkbiwgaW50ICR3aXRoX2F0dHJpYik6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9leHBsb2RlX2RuKCRkbiwgJHdpdGhfYXR0cmliKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExkYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogR2V0cyB0aGUgZmlyc3QgYXR0cmlidXRlIGluIHRoZSBnaXZlbiBlbnRyeS4gUmVtYWluaW5nIGF0dHJpYnV0ZXMgYXJlCiAqIHJldHJpZXZlZCBieSBjYWxsaW5nIGxkYXBfbmV4dF9hdHRyaWJ1dGUgc3VjY2Vzc2l2ZWx5LgogKgogKiBTaW1pbGFyIHRvIHJlYWRpbmcgZW50cmllcywgYXR0cmlidXRlcyBhcmUgYWxzbyByZWFkIG9uZSBieSBvbmUgZnJvbSBhCiAqIHBhcnRpY3VsYXIgZW50cnkuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSBsZGFwX2Nvbm5lY3QuCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0X2VudHJ5X2lkZW50aWZpZXIKICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgZmlyc3QgYXR0cmlidXRlIGluIHRoZSBlbnRyeSBvbiBzdWNjZXNzIGFuZCBGQUxTRSBvbgogKiBlcnJvci4KICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX2ZpcnN0X2F0dHJpYnV0ZSgkbGlua19pZGVudGlmaWVyLCAkcmVzdWx0X2VudHJ5X2lkZW50aWZpZXIpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsZGFwX2ZpcnN0X2F0dHJpYnV0ZSgkbGlua19pZGVudGlmaWVyLCAkcmVzdWx0X2VudHJ5X2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIHRoZSBlbnRyeSBpZGVudGlmaWVyIGZvciBmaXJzdCBlbnRyeSBpbiB0aGUgcmVzdWx0LiBUaGlzIGVudHJ5CiAqIGlkZW50aWZpZXIgaXMgdGhlbiBzdXBwbGllZCB0byBsZGFwX25leHRfZW50cnkKICogcm91dGluZSB0byBnZXQgc3VjY2Vzc2l2ZSBlbnRyaWVzIGZyb20gdGhlIHJlc3VsdC4KICoKICogRW50cmllcyBpbiB0aGUgTERBUCByZXN1bHQgYXJlIHJlYWQgc2VxdWVudGlhbGx5IHVzaW5nIHRoZQogKiBsZGFwX2ZpcnN0X2VudHJ5IGFuZAogKiBsZGFwX25leHRfZW50cnkgZnVuY3Rpb25zLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgbGRhcF9jb25uZWN0LgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdF9pZGVudGlmaWVyCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyB0aGUgcmVzdWx0IGVudHJ5IGlkZW50aWZpZXIgZm9yIHRoZSBmaXJzdCBlbnRyeSBvbiBzdWNjZXNzIGFuZAogKiBGQUxTRSBvbiBlcnJvci4KICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX2ZpcnN0X2VudHJ5KCRsaW5rX2lkZW50aWZpZXIsICRyZXN1bHRfaWRlbnRpZmllcikKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsZGFwX2ZpcnN0X2VudHJ5KCRsaW5rX2lkZW50aWZpZXIsICRyZXN1bHRfaWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBMZGFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEZyZWVzIHVwIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGludGVybmFsbHkgdG8gc3RvcmUgdGhlIHJlc3VsdC4gQWxsIHJlc3VsdAogKiBtZW1vcnkgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGZyZWVkIHdoZW4gdGhlIHNjcmlwdCB0ZXJtaW5hdGVzLgogKgogKiBUeXBpY2FsbHkgYWxsIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUgTERBUCByZXN1bHQgZ2V0cyBmcmVlZCBhdCB0aGUKICogZW5kIG9mIHRoZSBzY3JpcHQuIEluIGNhc2UgdGhlIHNjcmlwdCBpcyBtYWtpbmcgc3VjY2Vzc2l2ZSBzZWFyY2hlcyB3aGljaAogKiByZXR1cm4gbGFyZ2UgcmVzdWx0IHNldHMsIGxkYXBfZnJlZV9yZXN1bHQgY291bGQgYmUKICogY2FsbGVkIHRvIGtlZXAgdGhlIHJ1bnRpbWUgbWVtb3J5IHVzYWdlIGJ5IHRoZSBzY3JpcHQgbG93LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdF9pZGVudGlmaWVyCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF9mcmVlX3Jlc3VsdCgkcmVzdWx0X2lkZW50aWZpZXIpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9mcmVlX3Jlc3VsdCgkcmVzdWx0X2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUmVhZHMgYXR0cmlidXRlcyBhbmQgdmFsdWVzIGZyb20gYW4gZW50cnkgaW4gdGhlIHNlYXJjaCByZXN1bHQuCiAqCiAqIEhhdmluZyBsb2NhdGVkIGEgc3BlY2lmaWMgZW50cnkgaW4gdGhlIGRpcmVjdG9yeSwgeW91IGNhbiBmaW5kIG91dCB3aGF0CiAqIGluZm9ybWF0aW9uIGlzIGhlbGQgZm9yIHRoYXQgZW50cnkgYnkgdXNpbmcgdGhpcyBjYWxsLiBZb3Ugd291bGQgdXNlIHRoaXMKICogY2FsbCBmb3IgYW4gYXBwbGljYXRpb24gd2hpY2ggImJyb3dzZXMiIGRpcmVjdG9yeSBlbnRyaWVzIGFuZC9vciB3aGVyZSB5b3UKICogZG8gbm90IGtub3cgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZGlyZWN0b3J5IGVudHJpZXMuIEluIG1hbnkgYXBwbGljYXRpb25zCiAqIHlvdSB3aWxsIGJlIHNlYXJjaGluZyBmb3IgYSBzcGVjaWZpYyBhdHRyaWJ1dGUgc3VjaCBhcyBhbiBlbWFpbCBhZGRyZXNzIG9yCiAqIGEgc3VybmFtZSwgYW5kIHdvbid0IGNhcmUgd2hhdCBvdGhlciBkYXRhIGlzIGhlbGQuCiAqCiAqCiAqCiAqCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSBsZGFwX2Nvbm5lY3QuCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0X2VudHJ5X2lkZW50aWZpZXIKICogQHJldHVybiBhcnJheSBSZXR1cm5zIGEgY29tcGxldGUgZW50cnkgaW5mb3JtYXRpb24gaW4gYSBtdWx0aS1kaW1lbnNpb25hbCBhcnJheQogKiBvbiBzdWNjZXNzIGFuZCBGQUxTRSBvbiBlcnJvci4KICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX2dldF9hdHRyaWJ1dGVzKCRsaW5rX2lkZW50aWZpZXIsICRyZXN1bHRfZW50cnlfaWRlbnRpZmllcik6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9nZXRfYXR0cmlidXRlcygkbGlua19pZGVudGlmaWVyLCAkcmVzdWx0X2VudHJ5X2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBGaW5kcyBvdXQgdGhlIEROIG9mIGFuIGVudHJ5IGluIHRoZSByZXN1bHQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSBsZGFwX2Nvbm5lY3QuCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0X2VudHJ5X2lkZW50aWZpZXIKICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgRE4gb2YgdGhlIHJlc3VsdCBlbnRyeSBhbmQgRkFMU0Ugb24gZXJyb3IuCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF9nZXRfZG4oJGxpbmtfaWRlbnRpZmllciwgJHJlc3VsdF9lbnRyeV9pZGVudGlmaWVyKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9nZXRfZG4oJGxpbmtfaWRlbnRpZmllciwgJHJlc3VsdF9lbnRyeV9pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExkYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmVhZHMgbXVsdGlwbGUgZW50cmllcyBmcm9tIHRoZSBnaXZlbiByZXN1bHQsIGFuZCB0aGVuIHJlYWRpbmcgdGhlCiAqIGF0dHJpYnV0ZXMgYW5kIG11bHRpcGxlIHZhbHVlcy4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IGxkYXBfY29ubmVjdC4KICogQHBhcmFtIHJlc291cmNlICRyZXN1bHRfaWRlbnRpZmllcgogKiBAcmV0dXJuIGFycmF5IFJldHVybnMgYSBjb21wbGV0ZSByZXN1bHQgaW5mb3JtYXRpb24gaW4gYSBtdWx0aS1kaW1lbnNpb25hbCBhcnJheSBvbgogKiBzdWNjZXNzIGFuZCBGQUxTRSBvbiBlcnJvci4KICoKICogVGhlIHN0cnVjdHVyZSBvZiB0aGUgYXJyYXkgaXMgYXMgZm9sbG93cy4KICogVGhlIGF0dHJpYnV0ZSBpbmRleCBpcyBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlLiAoQXR0cmlidXRlcyBhcmUKICogY2FzZS1pbnNlbnNpdGl2ZSBmb3IgZGlyZWN0b3J5IHNlcnZlcnMsIGJ1dCBub3Qgd2hlbiB1c2VkIGFzCiAqIGFycmF5IGluZGljZXMuKQogKgogKgogKgogKgogKgogKiBAdGhyb3dzIExkYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGxkYXBfZ2V0X2VudHJpZXMoJGxpbmtfaWRlbnRpZmllciwgJHJlc3VsdF9pZGVudGlmaWVyKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsZGFwX2dldF9lbnRyaWVzKCRsaW5rX2lkZW50aWZpZXIsICRyZXN1bHRfaWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBMZGFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNldHMgcmV0dmFsIHRvIHRoZSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIG9wdGlvbi4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IGxkYXBfY29ubmVjdC4KICogQHBhcmFtIGludCAkb3B0aW9uIFRoZSBwYXJhbWV0ZXIgb3B0aW9uIGNhbiBiZSBvbmUgb2Y6CiAqCiAqCiAqCiAqCiAqIE9wdGlvbgogKiBUeXBlCiAqIHNpbmNlCiAqCiAqCiAqCiAqCiAqIExEQVBfT1BUX0RFUkVGCiAqIGludGVnZXIKICoKICoKICoKICogTERBUF9PUFRfU0laRUxJTUlUCiAqIGludGVnZXIKICoKICoKICoKICogTERBUF9PUFRfVElNRUxJTUlUCiAqIGludGVnZXIKICoKICoKICoKICogTERBUF9PUFRfTkVUV09SS19USU1FT1VUCiAqIGludGVnZXIKICoKICoKICoKICogTERBUF9PUFRfUFJPVE9DT0xfVkVSU0lPTgogKiBpbnRlZ2VyCiAqCiAqCiAqCiAqIExEQVBfT1BUX0VSUk9SX05VTUJFUgogKiBpbnRlZ2VyCiAqCiAqCiAqCiAqIExEQVBfT1BUX0RJQUdOT1NUSUNfTUVTU0FHRQogKiBpbnRlZ2VyCiAqCiAqCiAqCiAqIExEQVBfT1BUX1JFRkVSUkFMUwogKiBib29sCiAqCiAqCiAqCiAqIExEQVBfT1BUX1JFU1RBUlQKICogYm9vbAogKgogKgogKgogKiBMREFQX09QVF9IT1NUX05BTUUKICogc3RyaW5nCiAqCiAqCiAqCiAqIExEQVBfT1BUX0VSUk9SX1NUUklORwogKiBzdHJpbmcKICoKICoKICoKICogTERBUF9PUFRfTUFUQ0hFRF9ETgogKiBzdHJpbmcKICoKICoKICoKICogTERBUF9PUFRfU0VSVkVSX0NPTlRST0xTCiAqIGFycmF5CiAqCiAqCiAqCiAqIExEQVBfT1BUX0NMSUVOVF9DT05UUk9MUwogKiBhcnJheQogKgogKgogKgogKiBMREFQX09QVF9YX0tFRVBBTElWRV9JRExFCiAqIGludAogKiA3LjEKICoKICoKICogTERBUF9PUFRfWF9LRUVQQUxJVkVfUFJPQkVTCiAqIGludAogKiA3LjEKICoKICoKICogTERBUF9PUFRfWF9LRUVQQUxJVkVfSU5URVJWQUwKICogaW50CiAqIDcuMQogKgogKgogKiBMREFQX09QVF9YX1RMU19DQUNFUlRESVIKICogc3RyaW5nCiAqIDcuMQogKgogKgogKiBMREFQX09QVF9YX1RMU19DQUNFUlRGSUxFCiAqIHN0cmluZwogKiA3LjEKICoKICoKICogTERBUF9PUFRfWF9UTFNfQ0VSVEZJTEUKICogc3RyaW5nCiAqIDcuMQogKgogKgogKiBMREFQX09QVF9YX1RMU19DSVBIRVJfU1VJVEUKICogc3RyaW5nCiAqIDcuMQogKgogKgogKiBMREFQX09QVF9YX1RMU19DUkxDSEVDSwogKiBpbnRlZ2VyCiAqIDcuMQogKgogKgogKiBMREFQX09QVF9YX1RMU19DUkxfTk9ORQogKiBpbnRlZ2VyCiAqIDcuMQogKgogKgogKiBMREFQX09QVF9YX1RMU19DUkxfUEVFUgogKiBpbnRlZ2VyCiAqIDcuMQogKgogKgogKiBMREFQX09QVF9YX1RMU19DUkxfQUxMCiAqIGludGVnZXIKICogNy4xCiAqCiAqCiAqIExEQVBfT1BUX1hfVExTX0NSTEZJTEUKICogc3RyaW5nCiAqIDcuMQogKgogKgogKiBMREFQX09QVF9YX1RMU19ESEZJTEUKICogc3RyaW5nCiAqIDcuMQogKgogKgogKiBMREFQX09QVF9YX1RMU19LRVlJTEUKICogc3RyaW5nCiAqIDcuMQogKgogKgogKiBMREFQX09QVF9YX1RMU19QQUNLQUdFCiAqIHN0cmluZwogKiA3LjEKICoKICoKICogTERBUF9PUFRfWF9UTFNfUFJPVE9DT0xfTUlOCiAqIGludGVnZXIKICogNy4xCiAqCiAqCiAqIExEQVBfT1BUX1hfVExTX1JBTkRPTV9GSUxFCiAqIHN0cmluZwogKiA3LjEKICoKICoKICogTERBUF9PUFRfWF9UTFNfUkVRVUlSRV9DRVJUCiAqIGludGVnZXIKICoKICoKICoKICoKICoKICogQHBhcmFtIG1peGVkICRyZXR2YWwgVGhpcyB3aWxsIGJlIHNldCB0byB0aGUgb3B0aW9uIHZhbHVlLgogKiBAdGhyb3dzIExkYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGxkYXBfZ2V0X29wdGlvbigkbGlua19pZGVudGlmaWVyLCBpbnQgJG9wdGlvbiwgJiRyZXR2YWwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9nZXRfb3B0aW9uKCRsaW5rX2lkZW50aWZpZXIsICRvcHRpb24sICRyZXR2YWwpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUmVhZHMgYWxsIHRoZSB2YWx1ZXMgb2YgdGhlIGF0dHJpYnV0ZSBpbiB0aGUgZW50cnkgaW4gdGhlIHJlc3VsdC4KICoKICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGV4YWN0bHkgbGlrZSBsZGFwX2dldF92YWx1ZXMKICogZXhjZXB0IHRoYXQgaXQgaGFuZGxlcyBiaW5hcnkgZGF0YSBhbmQgbm90IHN0cmluZyBkYXRhLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgbGRhcF9jb25uZWN0LgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdF9lbnRyeV9pZGVudGlmaWVyCiAqIEBwYXJhbSBzdHJpbmcgJGF0dHJpYnV0ZQogKiBAcmV0dXJuIGFycmF5IFJldHVybnMgYW4gYXJyYXkgb2YgdmFsdWVzIGZvciB0aGUgYXR0cmlidXRlIG9uIHN1Y2Nlc3MgYW5kIEZBTFNFIG9uCiAqIGVycm9yLiBJbmRpdmlkdWFsIHZhbHVlcyBhcmUgYWNjZXNzZWQgYnkgaW50ZWdlciBpbmRleCBpbiB0aGUgYXJyYXkuIFRoZQogKiBmaXJzdCBpbmRleCBpcyAwLiBUaGUgbnVtYmVyIG9mIHZhbHVlcyBjYW4gYmUgZm91bmQgYnkgaW5kZXhpbmcgImNvdW50IgogKiBpbiB0aGUgcmVzdWx0YW50IGFycmF5LgogKiBAdGhyb3dzIExkYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGxkYXBfZ2V0X3ZhbHVlc19sZW4oJGxpbmtfaWRlbnRpZmllciwgJHJlc3VsdF9lbnRyeV9pZGVudGlmaWVyLCBzdHJpbmcgJGF0dHJpYnV0ZSk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9nZXRfdmFsdWVzX2xlbigkbGlua19pZGVudGlmaWVyLCAkcmVzdWx0X2VudHJ5X2lkZW50aWZpZXIsICRhdHRyaWJ1dGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZWFkcyBhbGwgdGhlIHZhbHVlcyBvZiB0aGUgYXR0cmlidXRlIGluIHRoZSBlbnRyeSBpbiB0aGUgcmVzdWx0LgogKgogKiBUaGlzIGNhbGwgbmVlZHMgYSByZXN1bHRfZW50cnlfaWRlbnRpZmllciwKICogc28gbmVlZHMgdG8gYmUgcHJlY2VkZWQgYnkgb25lIG9mIHRoZSBsZGFwIHNlYXJjaCBjYWxscyBhbmQgb25lCiAqIG9mIHRoZSBjYWxscyB0byBnZXQgYW4gaW5kaXZpZHVhbCBlbnRyeS4KICoKICogWW91IGFwcGxpY2F0aW9uIHdpbGwgZWl0aGVyIGJlIGhhcmQgY29kZWQgdG8gbG9vayBmb3IgY2VydGFpbgogKiBhdHRyaWJ1dGVzIChzdWNoIGFzICJzdXJuYW1lIiBvciAibWFpbCIpIG9yIHlvdSB3aWxsIGhhdmUgdG8gdXNlCiAqIHRoZSBsZGFwX2dldF9hdHRyaWJ1dGVzIGNhbGwgdG8gd29yayBvdXQKICogd2hhdCBhdHRyaWJ1dGVzIGV4aXN0IGZvciBhIGdpdmVuIGVudHJ5LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgbGRhcF9jb25uZWN0LgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdF9lbnRyeV9pZGVudGlmaWVyCiAqIEBwYXJhbSBzdHJpbmcgJGF0dHJpYnV0ZQogKiBAcmV0dXJuIGFycmF5IFJldHVybnMgYW4gYXJyYXkgb2YgdmFsdWVzIGZvciB0aGUgYXR0cmlidXRlIG9uIHN1Y2Nlc3MgYW5kIEZBTFNFIG9uCiAqIGVycm9yLiBUaGUgbnVtYmVyIG9mIHZhbHVlcyBjYW4gYmUgZm91bmQgYnkgaW5kZXhpbmcgImNvdW50IiBpbiB0aGUKICogcmVzdWx0YW50IGFycmF5LiBJbmRpdmlkdWFsIHZhbHVlcyBhcmUgYWNjZXNzZWQgYnkgaW50ZWdlciBpbmRleCBpbiB0aGUKICogYXJyYXkuICBUaGUgZmlyc3QgaW5kZXggaXMgMC4KICoKICogTERBUCBhbGxvd3MgbW9yZSB0aGFuIG9uZSBlbnRyeSBmb3IgYW4gYXR0cmlidXRlLCBzbyBpdCBjYW4sIGZvciBleGFtcGxlLAogKiBzdG9yZSBhIG51bWJlciBvZiBlbWFpbCBhZGRyZXNzZXMgZm9yIG9uZSBwZXJzb24ncyBkaXJlY3RvcnkgZW50cnkgYWxsCiAqIGxhYmVsZWQgd2l0aCB0aGUgYXR0cmlidXRlICJtYWlsIgogKgogKgogKiByZXR1cm5fdmFsdWVbImNvdW50Il0gPSBudW1iZXIgb2YgdmFsdWVzIGZvciBhdHRyaWJ1dGUKICogcmV0dXJuX3ZhbHVlWzBdID0gZmlyc3QgdmFsdWUgb2YgYXR0cmlidXRlCiAqIHJldHVybl92YWx1ZVtpXSA9IGl0aCB2YWx1ZSBvZiBhdHRyaWJ1dGUKICoKICoKICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX2dldF92YWx1ZXMoJGxpbmtfaWRlbnRpZmllciwgJHJlc3VsdF9lbnRyeV9pZGVudGlmaWVyLCBzdHJpbmcgJGF0dHJpYnV0ZSk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9nZXRfdmFsdWVzKCRsaW5rX2lkZW50aWZpZXIsICRyZXN1bHRfZW50cnlfaWRlbnRpZmllciwgJGF0dHJpYnV0ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBMZGFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFBlcmZvcm1zIHRoZSBzZWFyY2ggZm9yIGEgc3BlY2lmaWVkIGZpbHRlciBvbiB0aGUKICogZGlyZWN0b3J5IHdpdGggdGhlIHNjb3BlIExEQVBfU0NPUEVfT05FTEVWRUwuCiAqCiAqIExEQVBfU0NPUEVfT05FTEVWRUwgbWVhbnMgdGhhdCB0aGUgc2VhcmNoIHNob3VsZCBvbmx5CiAqIHJldHVybiBpbmZvcm1hdGlvbiB0aGF0IGlzIGF0IHRoZSBsZXZlbCBpbW1lZGlhdGVseSBiZWxvdyB0aGUKICogYmFzZV9kbiBnaXZlbiBpbiB0aGUgY2FsbC4KICogKEVxdWl2YWxlbnQgdG8gdHlwaW5nICJscyIgYW5kIGdldHRpbmcgYSBsaXN0IG9mIGZpbGVzIGFuZCBmb2xkZXJzIGluIHRoZQogKiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LikKICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IGxkYXBfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkYmFzZV9kbiBUaGUgYmFzZSBETiBmb3IgdGhlIGRpcmVjdG9yeS4KICogQHBhcmFtIHN0cmluZyAkZmlsdGVyCiAqIEBwYXJhbSBhcnJheSAkYXR0cmlidXRlcyBBbiBhcnJheSBvZiB0aGUgcmVxdWlyZWQgYXR0cmlidXRlcywgZS5nLiBhcnJheSgibWFpbCIsICJzbiIsICJjbiIpLgogKiBOb3RlIHRoYXQgdGhlICJkbiIgaXMgYWx3YXlzIHJldHVybmVkIGlycmVzcGVjdGl2ZSBvZiB3aGljaCBhdHRyaWJ1dGVzCiAqIHR5cGVzIGFyZSByZXF1ZXN0ZWQuCiAqCiAqIFVzaW5nIHRoaXMgcGFyYW1ldGVyIGlzIG11Y2ggbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgZGVmYXVsdCBhY3Rpb24KICogKHdoaWNoIGlzIHRvIHJldHVybiBhbGwgYXR0cmlidXRlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCB2YWx1ZXMpLgogKiBUaGUgdXNlIG9mIHRoaXMgcGFyYW1ldGVyIHNob3VsZCB0aGVyZWZvcmUgYmUgY29uc2lkZXJlZCBnb29kCiAqIHByYWN0aWNlLgogKiBAcGFyYW0gaW50ICRhdHRyc29ubHkgU2hvdWxkIGJlIHNldCB0byAxIGlmIG9ubHkgYXR0cmlidXRlIHR5cGVzIGFyZSB3YW50ZWQuIElmIHNldCB0byAwCiAqIGJvdGggYXR0cmlidXRlcyB0eXBlcyBhbmQgYXR0cmlidXRlIHZhbHVlcyBhcmUgZmV0Y2hlZCB3aGljaCBpcyB0aGUKICogZGVmYXVsdCBiZWhhdmlvdXIuCiAqIEBwYXJhbSBpbnQgJHNpemVsaW1pdCBFbmFibGVzIHlvdSB0byBsaW1pdCB0aGUgY291bnQgb2YgZW50cmllcyBmZXRjaGVkLiBTZXR0aW5nIHRoaXMgdG8gMAogKiBtZWFucyBubyBsaW1pdC4KICoKICogVGhpcyBwYXJhbWV0ZXIgY2FuIE5PVCBvdmVycmlkZSBzZXJ2ZXItc2lkZSBwcmVzZXQgc2l6ZWxpbWl0LiBZb3UgY2FuCiAqIHNldCBpdCBsb3dlciB0aG91Z2guCiAqCiAqIFNvbWUgZGlyZWN0b3J5IHNlcnZlciBob3N0cyB3aWxsIGJlIGNvbmZpZ3VyZWQgdG8gcmV0dXJuIG5vIG1vcmUgdGhhbgogKiBhIHByZXNldCBudW1iZXIgb2YgZW50cmllcy4gSWYgdGhpcyBvY2N1cnMsIHRoZSBzZXJ2ZXIgd2lsbCBpbmRpY2F0ZQogKiB0aGF0IGl0IGhhcyBvbmx5IHJldHVybmVkIGEgcGFydGlhbCByZXN1bHRzIHNldC4gVGhpcyBhbHNvIG9jY3VycyBpZgogKiB5b3UgdXNlIHRoaXMgcGFyYW1ldGVyIHRvIGxpbWl0IHRoZSBjb3VudCBvZiBmZXRjaGVkIGVudHJpZXMuCiAqIEBwYXJhbSBpbnQgJHRpbWVsaW1pdCBTZXRzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBob3cgbG9uZyBpcyBzcGVuZCBvbiB0aGUgc2VhcmNoLiBTZXR0aW5nCiAqIHRoaXMgdG8gMCBtZWFucyBubyBsaW1pdC4KICoKICogVGhpcyBwYXJhbWV0ZXIgY2FuIE5PVCBvdmVycmlkZSBzZXJ2ZXItc2lkZSBwcmVzZXQgdGltZWxpbWl0LiBZb3UgY2FuCiAqIHNldCBpdCBsb3dlciB0aG91Z2guCiAqIEBwYXJhbSBpbnQgJGRlcmVmIFNwZWNpZmllcyBob3cgYWxpYXNlcyBzaG91bGQgYmUgaGFuZGxlZCBkdXJpbmcgdGhlIHNlYXJjaC4gSXQgY2FuIGJlCiAqIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogKgogKgogKgogKiBMREFQX0RFUkVGX05FVkVSIC0gKGRlZmF1bHQpIGFsaWFzZXMgYXJlIG5ldmVyCiAqIGRlcmVmZXJlbmNlZC4KICoKICoKICoKICoKICogTERBUF9ERVJFRl9TRUFSQ0hJTkcgLSBhbGlhc2VzIHNob3VsZCBiZQogKiBkZXJlZmVyZW5jZWQgZHVyaW5nIHRoZSBzZWFyY2ggYnV0IG5vdCB3aGVuIGxvY2F0aW5nIHRoZSBiYXNlIG9iamVjdAogKiBvZiB0aGUgc2VhcmNoLgogKgogKgogKgogKgogKiBMREFQX0RFUkVGX0ZJTkRJTkcgLSBhbGlhc2VzIHNob3VsZCBiZQogKiBkZXJlZmVyZW5jZWQgd2hlbiBsb2NhdGluZyB0aGUgYmFzZSBvYmplY3QgYnV0IG5vdCBkdXJpbmcgdGhlIHNlYXJjaC4KICoKICoKICoKICoKICogTERBUF9ERVJFRl9BTFdBWVMgLSBhbGlhc2VzIHNob3VsZCBiZSBkZXJlZmVyZW5jZWQKICogYWx3YXlzLgogKgogKgogKgogKiBAcGFyYW0gYXJyYXkgJHNlcnZlcmN0cmxzIEFycmF5IG9mIExEQVAgQ29udHJvbHMgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBzZWFyY2ggcmVzdWx0IGlkZW50aWZpZXIuCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF9saXN0KCRsaW5rX2lkZW50aWZpZXIsIHN0cmluZyAkYmFzZV9kbiwgc3RyaW5nICRmaWx0ZXIsIGFycmF5ICRhdHRyaWJ1dGVzID0gbnVsbCwgaW50ICRhdHRyc29ubHkgPSAwLCBpbnQgJHNpemVsaW1pdCA9IC0xLCBpbnQgJHRpbWVsaW1pdCA9IC0xLCBpbnQgJGRlcmVmID0gTERBUF9ERVJFRl9ORVZFUiwgYXJyYXkgJHNlcnZlcmN0cmxzID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRzZXJ2ZXJjdHJscyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcbGRhcF9saXN0KCRsaW5rX2lkZW50aWZpZXIsICRiYXNlX2RuLCAkZmlsdGVyLCAkYXR0cmlidXRlcywgJGF0dHJzb25seSwgJHNpemVsaW1pdCwgJHRpbWVsaW1pdCwgJGRlcmVmLCAkc2VydmVyY3RybHMpOwogICAgfSBlbHNlaWYgKCRkZXJlZiAhPT0gTERBUF9ERVJFRl9ORVZFUikgewogICAgICAgICRyZXN1bHQgPSBcbGRhcF9saXN0KCRsaW5rX2lkZW50aWZpZXIsICRiYXNlX2RuLCAkZmlsdGVyLCAkYXR0cmlidXRlcywgJGF0dHJzb25seSwgJHNpemVsaW1pdCwgJHRpbWVsaW1pdCwgJGRlcmVmKTsKICAgIH0gZWxzZWlmICgkdGltZWxpbWl0ICE9PSAtMSkgewogICAgICAgICRyZXN1bHQgPSBcbGRhcF9saXN0KCRsaW5rX2lkZW50aWZpZXIsICRiYXNlX2RuLCAkZmlsdGVyLCAkYXR0cmlidXRlcywgJGF0dHJzb25seSwgJHNpemVsaW1pdCwgJHRpbWVsaW1pdCk7CiAgICB9IGVsc2VpZiAoJHNpemVsaW1pdCAhPT0gLTEpIHsKICAgICAgICAkcmVzdWx0ID0gXGxkYXBfbGlzdCgkbGlua19pZGVudGlmaWVyLCAkYmFzZV9kbiwgJGZpbHRlciwgJGF0dHJpYnV0ZXMsICRhdHRyc29ubHksICRzaXplbGltaXQpOwogICAgfSBlbHNlaWYgKCRhdHRyc29ubHkgIT09IDApIHsKICAgICAgICAkcmVzdWx0ID0gXGxkYXBfbGlzdCgkbGlua19pZGVudGlmaWVyLCAkYmFzZV9kbiwgJGZpbHRlciwgJGF0dHJpYnV0ZXMsICRhdHRyc29ubHkpOwogICAgfSBlbHNlaWYgKCRhdHRyaWJ1dGVzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxsZGFwX2xpc3QoJGxpbmtfaWRlbnRpZmllciwgJGJhc2VfZG4sICRmaWx0ZXIsICRhdHRyaWJ1dGVzKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxsZGFwX2xpc3QoJGxpbmtfaWRlbnRpZmllciwgJGJhc2VfZG4sICRmaWx0ZXIpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBEb2VzIHRoZSBzYW1lIHRoaW5nIGFzIGxkYXBfbW9kX2FkZCBidXQgcmV0dXJucyB0aGUgTERBUCByZXN1bHQgcmVzb3VyY2UgdG8gYmUgcGFyc2VkIHdpdGggbGRhcF9wYXJzZV9yZXN1bHQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyCiAqIEBwYXJhbSBzdHJpbmcgJGRuCiAqIEBwYXJhbSBhcnJheSAkZW50cnkKICogQHBhcmFtIGFycmF5ICRzZXJ2ZXJjdHJscwogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYW4gTERBUCByZXN1bHQgaWRlbnRpZmllci4KICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX21vZF9hZGRfZXh0KCRsaW5rX2lkZW50aWZpZXIsIHN0cmluZyAkZG4sIGFycmF5ICRlbnRyeSwgYXJyYXkgJHNlcnZlcmN0cmxzID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsZGFwX21vZF9hZGRfZXh0KCRsaW5rX2lkZW50aWZpZXIsICRkbiwgJGVudHJ5LCAkc2VydmVyY3RybHMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBBZGRzIG9uZSBvciBtb3JlIGF0dHJpYnV0ZSB2YWx1ZXMgdG8gdGhlIHNwZWNpZmllZCBkbi4KICogVG8gYWRkIGEgd2hvbGUgbmV3IG9iamVjdCBzZWUgbGRhcF9hZGQgZnVuY3Rpb24uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSBsZGFwX2Nvbm5lY3QuCiAqIEBwYXJhbSBzdHJpbmcgJGRuIFRoZSBkaXN0aW5ndWlzaGVkIG5hbWUgb2YgYW4gTERBUCBlbnRpdHkuCiAqIEBwYXJhbSBhcnJheSAkZW50cnkgQW4gYXNzb2NpYXRpdmUgYXJyYXkgbGlzdGluZyB0aGUgYXR0aXJidXRlIHZhbHVlcyB0byBhZGQuIElmIGFuIGF0dHJpYnV0ZSB3YXMgbm90IGV4aXN0aW5nIHlldCBpdCB3aWxsIGJlIGFkZGVkLiBJZiBhbiBhdHRyaWJ1dGUgaXMgZXhpc3RpbmcgeW91IGNhbiBvbmx5IGFkZCB2YWx1ZXMgdG8gaXQgaWYgaXQgc3VwcG9ydHMgbXVsdGlwbGUgdmFsdWVzLgogKiBAcGFyYW0gYXJyYXkgJHNlcnZlcmN0cmxzIEFycmF5IG9mIExEQVAgQ29udHJvbHMgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0LgogKiBAdGhyb3dzIExkYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGxkYXBfbW9kX2FkZCgkbGlua19pZGVudGlmaWVyLCBzdHJpbmcgJGRuLCBhcnJheSAkZW50cnksIGFycmF5ICRzZXJ2ZXJjdHJscyA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9tb2RfYWRkKCRsaW5rX2lkZW50aWZpZXIsICRkbiwgJGVudHJ5LCAkc2VydmVyY3RybHMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRG9lcyB0aGUgc2FtZSB0aGluZyBhcyBsZGFwX21vZF9kZWwgYnV0IHJldHVybnMgdGhlIExEQVAgcmVzdWx0IHJlc291cmNlIHRvIGJlIHBhcnNlZCB3aXRoIGxkYXBfcGFyc2VfcmVzdWx0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllcgogKiBAcGFyYW0gc3RyaW5nICRkbgogKiBAcGFyYW0gYXJyYXkgJGVudHJ5CiAqIEBwYXJhbSBhcnJheSAkc2VydmVyY3RybHMKICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGFuIExEQVAgcmVzdWx0IGlkZW50aWZpZXIuCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF9tb2RfZGVsX2V4dCgkbGlua19pZGVudGlmaWVyLCBzdHJpbmcgJGRuLCBhcnJheSAkZW50cnksIGFycmF5ICRzZXJ2ZXJjdHJscyA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9tb2RfZGVsX2V4dCgkbGlua19pZGVudGlmaWVyLCAkZG4sICRlbnRyeSwgJHNlcnZlcmN0cmxzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExkYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmVtb3ZlcyBvbmUgb3IgbW9yZSBhdHRyaWJ1dGUgdmFsdWVzIGZyb20gdGhlIHNwZWNpZmllZCBkbi4KICogT2JqZWN0IGRlbGV0aW9ucyBhcmUgZG9uZSBieSB0aGUKICogbGRhcF9kZWxldGUgZnVuY3Rpb24uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSBsZGFwX2Nvbm5lY3QuCiAqIEBwYXJhbSBzdHJpbmcgJGRuIFRoZSBkaXN0aW5ndWlzaGVkIG5hbWUgb2YgYW4gTERBUCBlbnRpdHkuCiAqIEBwYXJhbSBhcnJheSAkZW50cnkKICogQHBhcmFtIGFycmF5ICRzZXJ2ZXJjdHJscyBBcnJheSBvZiBMREFQIENvbnRyb2xzIHRvIHNlbmQgd2l0aCB0aGUgcmVxdWVzdC4KICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX21vZF9kZWwoJGxpbmtfaWRlbnRpZmllciwgc3RyaW5nICRkbiwgYXJyYXkgJGVudHJ5LCBhcnJheSAkc2VydmVyY3RybHMgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGxkYXBfbW9kX2RlbCgkbGlua19pZGVudGlmaWVyLCAkZG4sICRlbnRyeSwgJHNlcnZlcmN0cmxzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExkYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERvZXMgdGhlIHNhbWUgdGhpbmcgYXMgbGRhcF9tb2RfcmVwbGFjZSBidXQgcmV0dXJucyB0aGUgTERBUCByZXN1bHQgcmVzb3VyY2UgdG8gYmUgcGFyc2VkIHdpdGggbGRhcF9wYXJzZV9yZXN1bHQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyCiAqIEBwYXJhbSBzdHJpbmcgJGRuCiAqIEBwYXJhbSBhcnJheSAkZW50cnkKICogQHBhcmFtIGFycmF5ICRzZXJ2ZXJjdHJscwogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYW4gTERBUCByZXN1bHQgaWRlbnRpZmllci4KICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX21vZF9yZXBsYWNlX2V4dCgkbGlua19pZGVudGlmaWVyLCBzdHJpbmcgJGRuLCBhcnJheSAkZW50cnksIGFycmF5ICRzZXJ2ZXJjdHJscyA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9tb2RfcmVwbGFjZV9leHQoJGxpbmtfaWRlbnRpZmllciwgJGRuLCAkZW50cnksICRzZXJ2ZXJjdHJscyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBMZGFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJlcGxhY2VzIG9uZSBvciBtb3JlIGF0dHJpYnV0ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIGRuLgogKiBJdCBtYXkgYWxzbyBhZGQgb3IgcmVtb3ZlIGF0dHJpYnV0ZXMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSBsZGFwX2Nvbm5lY3QuCiAqIEBwYXJhbSBzdHJpbmcgJGRuIFRoZSBkaXN0aW5ndWlzaGVkIG5hbWUgb2YgYW4gTERBUCBlbnRpdHkuCiAqIEBwYXJhbSBhcnJheSAkZW50cnkgQW4gYXNzb2NpYXRpdmUgYXJyYXkgbGlzdGluZyB0aGUgYXR0cmlidXRlcyB0byByZXBsYWNlLiBTZW5kaW5nIGFuIGVtcHR5IGFycmF5IGFzIHZhbHVlIHdpbGwgcmVtb3ZlIHRoZSBhdHRyaWJ1dGUsIHdoaWxlIHNlbmRpbmcgYW4gYXR0cmlidXRlIG5vdCBleGlzdGluZyB5ZXQgb24gdGhpcyBlbnRyeSB3aWxsIGFkZCBpdC4KICogQHBhcmFtIGFycmF5ICRzZXJ2ZXJjdHJscyBBcnJheSBvZiBMREFQIENvbnRyb2xzIHRvIHNlbmQgd2l0aCB0aGUgcmVxdWVzdC4KICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX21vZF9yZXBsYWNlKCRsaW5rX2lkZW50aWZpZXIsIHN0cmluZyAkZG4sIGFycmF5ICRlbnRyeSwgYXJyYXkgJHNlcnZlcmN0cmxzID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsZGFwX21vZF9yZXBsYWNlKCRsaW5rX2lkZW50aWZpZXIsICRkbiwgJGVudHJ5LCAkc2VydmVyY3RybHMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogTW9kaWZpZXMgYW4gZXhpc3RpbmcgZW50cnkgaW4gdGhlIExEQVAgZGlyZWN0b3J5LiBBbGxvd3MgZGV0YWlsZWQKICogc3BlY2lmaWNhdGlvbiBvZiB0aGUgbW9kaWZpY2F0aW9ucyB0byBwZXJmb3JtLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgbGRhcF9jb25uZWN0LgogKiBAcGFyYW0gc3RyaW5nICRkbiBUaGUgZGlzdGluZ3Vpc2hlZCBuYW1lIG9mIGFuIExEQVAgZW50aXR5LgogKiBAcGFyYW0gYXJyYXkgJGVudHJ5IEFuIGFycmF5IHRoYXQgc3BlY2lmaWVzIHRoZSBtb2RpZmljYXRpb25zIHRvIG1ha2UuIEVhY2ggZW50cnkgaW4gdGhpcwogKiBhcnJheSBpcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSB3aXRoIHR3byBvciB0aHJlZSBrZXlzOgogKiBhdHRyaWIgbWFwcyB0byB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIG1vZGlmeSwKICogbW9kdHlwZSBtYXBzIHRvIHRoZSB0eXBlIG9mIG1vZGlmaWNhdGlvbiB0byBwZXJmb3JtLAogKiBhbmQgKGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBtb2RpZmljYXRpb24pIHZhbHVlcwogKiBtYXBzIHRvIGFuIGFycmF5IG9mIGF0dHJpYnV0ZSB2YWx1ZXMgcmVsZXZhbnQgdG8gdGhlIG1vZGlmaWNhdGlvbi4KICoKICogUG9zc2libGUgdmFsdWVzIGZvciBtb2R0eXBlIGluY2x1ZGU6CiAqCiAqCiAqIExEQVBfTU9ESUZZX0JBVENIX0FERAogKgogKgogKiBFYWNoIHZhbHVlIHNwZWNpZmllZCB0aHJvdWdoIHZhbHVlcyBpcyBhZGRlZCAoYXMKICogYW4gYWRkaXRpb25hbCB2YWx1ZSkgdG8gdGhlIGF0dHJpYnV0ZSBuYW1lZCBieQogKiBhdHRyaWIuCiAqCiAqCiAqCiAqCiAqIExEQVBfTU9ESUZZX0JBVENIX1JFTU9WRQogKgogKgogKiBFYWNoIHZhbHVlIHNwZWNpZmllZCB0aHJvdWdoIHZhbHVlcyBpcyByZW1vdmVkCiAqIGZyb20gdGhlIGF0dHJpYnV0ZSBuYW1lZCBieSBhdHRyaWIuIEFueSB2YWx1ZSBvZgogKiB0aGUgYXR0cmlidXRlIG5vdCBjb250YWluZWQgaW4gdGhlIHZhbHVlcyBhcnJheQogKiB3aWxsIHJlbWFpbiB1bnRvdWNoZWQuCiAqCiAqCiAqCiAqCiAqIExEQVBfTU9ESUZZX0JBVENIX1JFTU9WRV9BTEwKICoKICoKICogQWxsIHZhbHVlcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBhdHRyaWJ1dGUgbmFtZWQgYnkKICogYXR0cmliLiBBIHZhbHVlcyBlbnRyeSBtdXN0CiAqIG5vdCBiZSBwcm92aWRlZC4KICoKICoKICoKICoKICogTERBUF9NT0RJRllfQkFUQ0hfUkVQTEFDRQogKgogKgogKiBBbGwgY3VycmVudCB2YWx1ZXMgb2YgdGhlIGF0dHJpYnV0ZSBuYW1lZCBieQogKiBhdHRyaWIgYXJlIHJlcGxhY2VkIHdpdGggdGhlIHZhbHVlcyBzcGVjaWZpZWQKICogdGhyb3VnaCB2YWx1ZXMuCiAqCiAqCiAqCiAqCiAqCiAqIEVhY2ggdmFsdWUgc3BlY2lmaWVkIHRocm91Z2ggdmFsdWVzIGlzIGFkZGVkIChhcwogKiBhbiBhZGRpdGlvbmFsIHZhbHVlKSB0byB0aGUgYXR0cmlidXRlIG5hbWVkIGJ5CiAqIGF0dHJpYi4KICoKICogRWFjaCB2YWx1ZSBzcGVjaWZpZWQgdGhyb3VnaCB2YWx1ZXMgaXMgcmVtb3ZlZAogKiBmcm9tIHRoZSBhdHRyaWJ1dGUgbmFtZWQgYnkgYXR0cmliLiBBbnkgdmFsdWUgb2YKICogdGhlIGF0dHJpYnV0ZSBub3QgY29udGFpbmVkIGluIHRoZSB2YWx1ZXMgYXJyYXkKICogd2lsbCByZW1haW4gdW50b3VjaGVkLgogKgogKiBBbGwgdmFsdWVzIGFyZSByZW1vdmVkIGZyb20gdGhlIGF0dHJpYnV0ZSBuYW1lZCBieQogKiBhdHRyaWIuIEEgdmFsdWVzIGVudHJ5IG11c3QKICogbm90IGJlIHByb3ZpZGVkLgogKgogKiBBbGwgY3VycmVudCB2YWx1ZXMgb2YgdGhlIGF0dHJpYnV0ZSBuYW1lZCBieQogKiBhdHRyaWIgYXJlIHJlcGxhY2VkIHdpdGggdGhlIHZhbHVlcyBzcGVjaWZpZWQKICogdGhyb3VnaCB2YWx1ZXMuCiAqCiAqIE5vdGUgdGhhdCBhbnkgdmFsdWUgZm9yIGF0dHJpYiBtdXN0IGJlIGEgc3RyaW5nLCBhbnkKICogdmFsdWUgZm9yIHZhbHVlcyBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MsIGFuZAogKiBhbnkgdmFsdWUgZm9yIG1vZHR5cGUgbXVzdCBiZSBvbmUgb2YgdGhlCiAqIExEQVBfTU9ESUZZX0JBVENIXyogY29uc3RhbnRzIGxpc3RlZCBhYm92ZS4KICogQHBhcmFtIGFycmF5ICRzZXJ2ZXJjdHJscyBFYWNoIHZhbHVlIHNwZWNpZmllZCB0aHJvdWdoIHZhbHVlcyBpcyBhZGRlZCAoYXMKICogYW4gYWRkaXRpb25hbCB2YWx1ZSkgdG8gdGhlIGF0dHJpYnV0ZSBuYW1lZCBieQogKiBhdHRyaWIuCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF9tb2RpZnlfYmF0Y2goJGxpbmtfaWRlbnRpZmllciwgc3RyaW5nICRkbiwgYXJyYXkgJGVudHJ5LCBhcnJheSAkc2VydmVyY3RybHMgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGxkYXBfbW9kaWZ5X2JhdGNoKCRsaW5rX2lkZW50aWZpZXIsICRkbiwgJGVudHJ5LCAkc2VydmVyY3RybHMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUmV0cmlldmVzIHRoZSBhdHRyaWJ1dGVzIGluIGFuIGVudHJ5LiBUaGUgZmlyc3QgY2FsbCB0bwogKiBsZGFwX25leHRfYXR0cmlidXRlIGlzIG1hZGUgd2l0aCB0aGUKICogcmVzdWx0X2VudHJ5X2lkZW50aWZpZXIgcmV0dXJuZWQgZnJvbQogKiBsZGFwX2ZpcnN0X2F0dHJpYnV0ZS4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IGxkYXBfY29ubmVjdC4KICogQHBhcmFtIHJlc291cmNlICRyZXN1bHRfZW50cnlfaWRlbnRpZmllcgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBuZXh0IGF0dHJpYnV0ZSBpbiBhbiBlbnRyeSBvbiBzdWNjZXNzIGFuZCBGQUxTRSBvbgogKiBlcnJvci4KICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX25leHRfYXR0cmlidXRlKCRsaW5rX2lkZW50aWZpZXIsICRyZXN1bHRfZW50cnlfaWRlbnRpZmllcik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGxkYXBfbmV4dF9hdHRyaWJ1dGUoJGxpbmtfaWRlbnRpZmllciwgJHJlc3VsdF9lbnRyeV9pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExkYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUGFyc2UgTERBUCBleHRlbmRlZCBvcGVyYXRpb24gZGF0YSBmcm9tIHJlc3VsdCBvYmplY3QgcmVzdWx0CiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGluayBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgbGRhcF9jb25uZWN0LgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBBbiBMREFQIHJlc3VsdCByZXNvdXJjZSwgcmV0dXJuZWQgYnkgbGRhcF9leG9wLgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJHJldGRhdGEgV2lsbCBiZSBmaWxsZWQgYnkgdGhlIHJlc3BvbnNlIGRhdGEuCiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcmV0b2lkIFdpbGwgYmUgZmlsbGVkIGJ5IHRoZSByZXNwb25zZSBPSUQuCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF9wYXJzZV9leG9wKCRsaW5rLCAkcmVzdWx0LCA/c3RyaW5nICYkcmV0ZGF0YSA9IG51bGwsID9zdHJpbmcgJiRyZXRvaWQgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGxkYXBfcGFyc2VfZXhvcCgkbGluaywgJHJlc3VsdCwgJHJldGRhdGEsICRyZXRvaWQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUGFyc2VzIGFuIExEQVAgc2VhcmNoIHJlc3VsdC4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSBsZGFwX2Nvbm5lY3QuCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IEFuIExEQVAgcmVzdWx0IHJlc291cmNlLCByZXR1cm5lZCBieSBsZGFwX2xpc3Qgb3IKICogbGRhcF9zZWFyY2guCiAqIEBwYXJhbSBpbnR8bnVsbCAkZXJyY29kZSBBIHJlZmVyZW5jZSB0byBhIHZhcmlhYmxlIHRoYXQgd2lsbCBiZSBzZXQgdG8gdGhlIExEQVAgZXJyb3IgY29kZSBpbgogKiB0aGUgcmVzdWx0LCBvciAwIGlmIG5vIGVycm9yIG9jY3VycmVkLgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJG1hdGNoZWRkbiBBIHJlZmVyZW5jZSB0byBhIHZhcmlhYmxlIHRoYXQgd2lsbCBiZSBzZXQgdG8gYSBtYXRjaGVkIEROIGlmIG9uZSB3YXMKICogcmVjb2duaXNlZCB3aXRoaW4gdGhlIHJlcXVlc3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIHNldCB0byBOVUxMLgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGVycm1zZyBBIHJlZmVyZW5jZSB0byBhIHZhcmlhYmxlIHRoYXQgd2lsbCBiZSBzZXQgdG8gdGhlIExEQVAgZXJyb3IgbWVzc2FnZSBpbgogKiB0aGUgcmVzdWx0LCBvciBhbiBlbXB0eSBzdHJpbmcgaWYgbm8gZXJyb3Igb2NjdXJyZWQuCiAqIEBwYXJhbSBhcnJheXxudWxsICRyZWZlcnJhbHMgQSByZWZlcmVuY2UgdG8gYSB2YXJpYWJsZSB0aGF0IHdpbGwgYmUgc2V0IHRvIGFuIGFycmF5IHNldAogKiB0byBhbGwgb2YgdGhlIHJlZmVycmFsIHN0cmluZ3MgaW4gdGhlIHJlc3VsdCwgb3IgYW4gZW1wdHkgYXJyYXkgaWYgbm8KICogcmVmZXJyYWxzIHdlcmUgcmV0dXJuZWQuCiAqIEBwYXJhbSBhcnJheXxudWxsICRzZXJ2ZXJjdHJscyBBbiBhcnJheSBvZiBMREFQIENvbnRyb2xzIHdoaWNoIGhhdmUgYmVlbiBzZW50IHdpdGggdGhlIHJlc3BvbnNlLgogKiBAdGhyb3dzIExkYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGxkYXBfcGFyc2VfcmVzdWx0KCRsaW5rLCAkcmVzdWx0LCA/aW50ICYkZXJyY29kZSwgP3N0cmluZyAmJG1hdGNoZWRkbiA9IG51bGwsID9zdHJpbmcgJiRlcnJtc2cgPSBudWxsLCA/YXJyYXkgJiRyZWZlcnJhbHMgPSBudWxsLCA/YXJyYXkgJiRzZXJ2ZXJjdHJscyA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9wYXJzZV9yZXN1bHQoJGxpbmssICRyZXN1bHQsICRlcnJjb2RlLCAkbWF0Y2hlZGRuLCAkZXJybXNnLCAkcmVmZXJyYWxzLCAkc2VydmVyY3RybHMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUGVyZm9ybXMgdGhlIHNlYXJjaCBmb3IgYSBzcGVjaWZpZWQgZmlsdGVyIG9uIHRoZQogKiBkaXJlY3Rvcnkgd2l0aCB0aGUgc2NvcGUgTERBUF9TQ09QRV9CQVNFLiBTbyBpdCBpcwogKiBlcXVpdmFsZW50IHRvIHJlYWRpbmcgYW4gZW50cnkgZnJvbSB0aGUgZGlyZWN0b3J5LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgbGRhcF9jb25uZWN0LgogKiBAcGFyYW0gc3RyaW5nICRiYXNlX2RuIFRoZSBiYXNlIEROIGZvciB0aGUgZGlyZWN0b3J5LgogKiBAcGFyYW0gc3RyaW5nICRmaWx0ZXIgQW4gZW1wdHkgZmlsdGVyIGlzIG5vdCBhbGxvd2VkLiBJZiB5b3Ugd2FudCB0byByZXRyaWV2ZSBhYnNvbHV0ZWx5IGFsbAogKiBpbmZvcm1hdGlvbiBmb3IgdGhpcyBlbnRyeSwgdXNlIGEgZmlsdGVyIG9mCiAqIG9iamVjdENsYXNzPSouIElmIHlvdSBrbm93IHdoaWNoIGVudHJ5IHR5cGVzIGFyZQogKiB1c2VkIG9uIHRoZSBkaXJlY3Rvcnkgc2VydmVyLCB5b3UgbWlnaHQgdXNlIGFuIGFwcHJvcHJpYXRlIGZpbHRlciBzdWNoCiAqIGFzIG9iamVjdENsYXNzPWluZXRPcmdQZXJzb24uCiAqIEBwYXJhbSBhcnJheSAkYXR0cmlidXRlcyBBbiBhcnJheSBvZiB0aGUgcmVxdWlyZWQgYXR0cmlidXRlcywgZS5nLiBhcnJheSgibWFpbCIsICJzbiIsICJjbiIpLgogKiBOb3RlIHRoYXQgdGhlICJkbiIgaXMgYWx3YXlzIHJldHVybmVkIGlycmVzcGVjdGl2ZSBvZiB3aGljaCBhdHRyaWJ1dGVzCiAqIHR5cGVzIGFyZSByZXF1ZXN0ZWQuCiAqCiAqIFVzaW5nIHRoaXMgcGFyYW1ldGVyIGlzIG11Y2ggbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgZGVmYXVsdCBhY3Rpb24KICogKHdoaWNoIGlzIHRvIHJldHVybiBhbGwgYXR0cmlidXRlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCB2YWx1ZXMpLgogKiBUaGUgdXNlIG9mIHRoaXMgcGFyYW1ldGVyIHNob3VsZCB0aGVyZWZvcmUgYmUgY29uc2lkZXJlZCBnb29kCiAqIHByYWN0aWNlLgogKiBAcGFyYW0gaW50ICRhdHRyc29ubHkgU2hvdWxkIGJlIHNldCB0byAxIGlmIG9ubHkgYXR0cmlidXRlIHR5cGVzIGFyZSB3YW50ZWQuIElmIHNldCB0byAwCiAqIGJvdGggYXR0cmlidXRlcyB0eXBlcyBhbmQgYXR0cmlidXRlIHZhbHVlcyBhcmUgZmV0Y2hlZCB3aGljaCBpcyB0aGUKICogZGVmYXVsdCBiZWhhdmlvdXIuCiAqIEBwYXJhbSBpbnQgJHNpemVsaW1pdCBFbmFibGVzIHlvdSB0byBsaW1pdCB0aGUgY291bnQgb2YgZW50cmllcyBmZXRjaGVkLiBTZXR0aW5nIHRoaXMgdG8gMAogKiBtZWFucyBubyBsaW1pdC4KICoKICogVGhpcyBwYXJhbWV0ZXIgY2FuIE5PVCBvdmVycmlkZSBzZXJ2ZXItc2lkZSBwcmVzZXQgc2l6ZWxpbWl0LiBZb3UgY2FuCiAqIHNldCBpdCBsb3dlciB0aG91Z2guCiAqCiAqIFNvbWUgZGlyZWN0b3J5IHNlcnZlciBob3N0cyB3aWxsIGJlIGNvbmZpZ3VyZWQgdG8gcmV0dXJuIG5vIG1vcmUgdGhhbgogKiBhIHByZXNldCBudW1iZXIgb2YgZW50cmllcy4gSWYgdGhpcyBvY2N1cnMsIHRoZSBzZXJ2ZXIgd2lsbCBpbmRpY2F0ZQogKiB0aGF0IGl0IGhhcyBvbmx5IHJldHVybmVkIGEgcGFydGlhbCByZXN1bHRzIHNldC4gVGhpcyBhbHNvIG9jY3VycyBpZgogKiB5b3UgdXNlIHRoaXMgcGFyYW1ldGVyIHRvIGxpbWl0IHRoZSBjb3VudCBvZiBmZXRjaGVkIGVudHJpZXMuCiAqIEBwYXJhbSBpbnQgJHRpbWVsaW1pdCBTZXRzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBob3cgbG9uZyBpcyBzcGVuZCBvbiB0aGUgc2VhcmNoLiBTZXR0aW5nCiAqIHRoaXMgdG8gMCBtZWFucyBubyBsaW1pdC4KICoKICogVGhpcyBwYXJhbWV0ZXIgY2FuIE5PVCBvdmVycmlkZSBzZXJ2ZXItc2lkZSBwcmVzZXQgdGltZWxpbWl0LiBZb3UgY2FuCiAqIHNldCBpdCBsb3dlciB0aG91Z2guCiAqIEBwYXJhbSBpbnQgJGRlcmVmIFNwZWNpZmllcyBob3cgYWxpYXNlcyBzaG91bGQgYmUgaGFuZGxlZCBkdXJpbmcgdGhlIHNlYXJjaC4gSXQgY2FuIGJlCiAqIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogKgogKgogKgogKiBMREFQX0RFUkVGX05FVkVSIC0gKGRlZmF1bHQpIGFsaWFzZXMgYXJlIG5ldmVyCiAqIGRlcmVmZXJlbmNlZC4KICoKICoKICoKICoKICogTERBUF9ERVJFRl9TRUFSQ0hJTkcgLSBhbGlhc2VzIHNob3VsZCBiZQogKiBkZXJlZmVyZW5jZWQgZHVyaW5nIHRoZSBzZWFyY2ggYnV0IG5vdCB3aGVuIGxvY2F0aW5nIHRoZSBiYXNlIG9iamVjdAogKiBvZiB0aGUgc2VhcmNoLgogKgogKgogKgogKgogKiBMREFQX0RFUkVGX0ZJTkRJTkcgLSBhbGlhc2VzIHNob3VsZCBiZQogKiBkZXJlZmVyZW5jZWQgd2hlbiBsb2NhdGluZyB0aGUgYmFzZSBvYmplY3QgYnV0IG5vdCBkdXJpbmcgdGhlIHNlYXJjaC4KICoKICoKICoKICoKICogTERBUF9ERVJFRl9BTFdBWVMgLSBhbGlhc2VzIHNob3VsZCBiZSBkZXJlZmVyZW5jZWQKICogYWx3YXlzLgogKgogKgogKgogKiBAcGFyYW0gYXJyYXkgJHNlcnZlcmN0cmxzIEFycmF5IG9mIExEQVAgQ29udHJvbHMgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBzZWFyY2ggcmVzdWx0IGlkZW50aWZpZXIuCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF9yZWFkKCRsaW5rX2lkZW50aWZpZXIsIHN0cmluZyAkYmFzZV9kbiwgc3RyaW5nICRmaWx0ZXIsIGFycmF5ICRhdHRyaWJ1dGVzID0gbnVsbCwgaW50ICRhdHRyc29ubHkgPSAwLCBpbnQgJHNpemVsaW1pdCA9IC0xLCBpbnQgJHRpbWVsaW1pdCA9IC0xLCBpbnQgJGRlcmVmID0gTERBUF9ERVJFRl9ORVZFUiwgYXJyYXkgJHNlcnZlcmN0cmxzID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRzZXJ2ZXJjdHJscyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcbGRhcF9yZWFkKCRsaW5rX2lkZW50aWZpZXIsICRiYXNlX2RuLCAkZmlsdGVyLCAkYXR0cmlidXRlcywgJGF0dHJzb25seSwgJHNpemVsaW1pdCwgJHRpbWVsaW1pdCwgJGRlcmVmLCAkc2VydmVyY3RybHMpOwogICAgfSBlbHNlaWYgKCRkZXJlZiAhPT0gTERBUF9ERVJFRl9ORVZFUikgewogICAgICAgICRyZXN1bHQgPSBcbGRhcF9yZWFkKCRsaW5rX2lkZW50aWZpZXIsICRiYXNlX2RuLCAkZmlsdGVyLCAkYXR0cmlidXRlcywgJGF0dHJzb25seSwgJHNpemVsaW1pdCwgJHRpbWVsaW1pdCwgJGRlcmVmKTsKICAgIH0gZWxzZWlmICgkdGltZWxpbWl0ICE9PSAtMSkgewogICAgICAgICRyZXN1bHQgPSBcbGRhcF9yZWFkKCRsaW5rX2lkZW50aWZpZXIsICRiYXNlX2RuLCAkZmlsdGVyLCAkYXR0cmlidXRlcywgJGF0dHJzb25seSwgJHNpemVsaW1pdCwgJHRpbWVsaW1pdCk7CiAgICB9IGVsc2VpZiAoJHNpemVsaW1pdCAhPT0gLTEpIHsKICAgICAgICAkcmVzdWx0ID0gXGxkYXBfcmVhZCgkbGlua19pZGVudGlmaWVyLCAkYmFzZV9kbiwgJGZpbHRlciwgJGF0dHJpYnV0ZXMsICRhdHRyc29ubHksICRzaXplbGltaXQpOwogICAgfSBlbHNlaWYgKCRhdHRyc29ubHkgIT09IDApIHsKICAgICAgICAkcmVzdWx0ID0gXGxkYXBfcmVhZCgkbGlua19pZGVudGlmaWVyLCAkYmFzZV9kbiwgJGZpbHRlciwgJGF0dHJpYnV0ZXMsICRhdHRyc29ubHkpOwogICAgfSBlbHNlaWYgKCRhdHRyaWJ1dGVzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxsZGFwX3JlYWQoJGxpbmtfaWRlbnRpZmllciwgJGJhc2VfZG4sICRmaWx0ZXIsICRhdHRyaWJ1dGVzKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxsZGFwX3JlYWQoJGxpbmtfaWRlbnRpZmllciwgJGJhc2VfZG4sICRmaWx0ZXIpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBEb2VzIHRoZSBzYW1lIHRoaW5nIGFzIGxkYXBfcmVuYW1lIGJ1dCByZXR1cm5zIHRoZSBMREFQIHJlc3VsdCByZXNvdXJjZSB0byBiZSBwYXJzZWQgd2l0aCBsZGFwX3BhcnNlX3Jlc3VsdC4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIKICogQHBhcmFtIHN0cmluZyAkZG4KICogQHBhcmFtIHN0cmluZyAkbmV3cmRuCiAqIEBwYXJhbSBzdHJpbmcgJG5ld3BhcmVudAogKiBAcGFyYW0gYm9vbCAkZGVsZXRlb2xkcmRuCiAqIEBwYXJhbSBhcnJheSAkc2VydmVyY3RybHMKICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGFuIExEQVAgcmVzdWx0IGlkZW50aWZpZXIuCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF9yZW5hbWVfZXh0KCRsaW5rX2lkZW50aWZpZXIsIHN0cmluZyAkZG4sIHN0cmluZyAkbmV3cmRuLCBzdHJpbmcgJG5ld3BhcmVudCwgYm9vbCAkZGVsZXRlb2xkcmRuLCBhcnJheSAkc2VydmVyY3RybHMgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGxkYXBfcmVuYW1lX2V4dCgkbGlua19pZGVudGlmaWVyLCAkZG4sICRuZXdyZG4sICRuZXdwYXJlbnQsICRkZWxldGVvbGRyZG4sICRzZXJ2ZXJjdHJscyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBMZGFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoZSBlbnRyeSBzcGVjaWZpZWQgYnkgZG4gaXMgcmVuYW1lZC9tb3ZlZC4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IGxkYXBfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkZG4gVGhlIGRpc3Rpbmd1aXNoZWQgbmFtZSBvZiBhbiBMREFQIGVudGl0eS4KICogQHBhcmFtIHN0cmluZyAkbmV3cmRuIFRoZSBuZXcgUkROLgogKiBAcGFyYW0gc3RyaW5nICRuZXdwYXJlbnQgVGhlIG5ldyBwYXJlbnQvc3VwZXJpb3IgZW50cnkuCiAqIEBwYXJhbSBib29sICRkZWxldGVvbGRyZG4gSWYgVFJVRSB0aGUgb2xkIFJETiB2YWx1ZShzKSBpcyByZW1vdmVkLCBlbHNlIHRoZSBvbGQgUkROIHZhbHVlKHMpCiAqIGlzIHJldGFpbmVkIGFzIG5vbi1kaXN0aW5ndWlzaGVkIHZhbHVlcyBvZiB0aGUgZW50cnkuCiAqIEBwYXJhbSBhcnJheSAkc2VydmVyY3RybHMgQXJyYXkgb2YgTERBUCBDb250cm9scyB0byBzZW5kIHdpdGggdGhlIHJlcXVlc3QuCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF9yZW5hbWUoJGxpbmtfaWRlbnRpZmllciwgc3RyaW5nICRkbiwgc3RyaW5nICRuZXdyZG4sIHN0cmluZyAkbmV3cGFyZW50LCBib29sICRkZWxldGVvbGRyZG4sIGFycmF5ICRzZXJ2ZXJjdHJscyA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9yZW5hbWUoJGxpbmtfaWRlbnRpZmllciwgJGRuLCAkbmV3cmRuLCAkbmV3cGFyZW50LCAkZGVsZXRlb2xkcmRuLCAkc2VydmVyY3RybHMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICoKICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rCiAqIEBwYXJhbSBzdHJpbmcgJGJpbmRkbgogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZAogKiBAcGFyYW0gc3RyaW5nICRzYXNsX21lY2gKICogQHBhcmFtIHN0cmluZyAkc2FzbF9yZWFsbQogKiBAcGFyYW0gc3RyaW5nICRzYXNsX2F1dGhjX2lkCiAqIEBwYXJhbSBzdHJpbmcgJHNhc2xfYXV0aHpfaWQKICogQHBhcmFtIHN0cmluZyAkcHJvcHMKICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX3Nhc2xfYmluZCgkbGluaywgc3RyaW5nICRiaW5kZG4gPSBudWxsLCBzdHJpbmcgJHBhc3N3b3JkID0gbnVsbCwgc3RyaW5nICRzYXNsX21lY2ggPSBudWxsLCBzdHJpbmcgJHNhc2xfcmVhbG0gPSBudWxsLCBzdHJpbmcgJHNhc2xfYXV0aGNfaWQgPSBudWxsLCBzdHJpbmcgJHNhc2xfYXV0aHpfaWQgPSBudWxsLCBzdHJpbmcgJHByb3BzID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsZGFwX3Nhc2xfYmluZCgkbGluaywgJGJpbmRkbiwgJHBhc3N3b3JkLCAkc2FzbF9tZWNoLCAkc2FzbF9yZWFsbSwgJHNhc2xfYXV0aGNfaWQsICRzYXNsX2F1dGh6X2lkLCAkcHJvcHMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUGVyZm9ybXMgdGhlIHNlYXJjaCBmb3IgYSBzcGVjaWZpZWQgZmlsdGVyIG9uIHRoZSBkaXJlY3Rvcnkgd2l0aCB0aGUgc2NvcGUKICogb2YgTERBUF9TQ09QRV9TVUJUUkVFLiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gc2VhcmNoaW5nCiAqIHRoZSBlbnRpcmUgZGlyZWN0b3J5LgogKgogKiBGcm9tIDQuMC41IG9uIGl0J3MgYWxzbyBwb3NzaWJsZSB0byBkbyBwYXJhbGxlbCBzZWFyY2hlcy4gVG8gZG8gdGhpcwogKiB5b3UgdXNlIGFuIGFycmF5IG9mIGxpbmsgaWRlbnRpZmllcnMsIHJhdGhlciB0aGFuIGEgc2luZ2xlIGlkZW50aWZpZXIsCiAqIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4gSWYgeW91IGRvbid0IHdhbnQgdGhlIHNhbWUgYmFzZSBETiBhbmQgdGhlCiAqIHNhbWUgZmlsdGVyIGZvciBhbGwgdGhlIHNlYXJjaGVzLCB5b3UgY2FuIGFsc28gdXNlIGFuIGFycmF5IG9mIGJhc2UgRE5zCiAqIGFuZC9vciBhbiBhcnJheSBvZiBmaWx0ZXJzLiBUaG9zZSBhcnJheXMgbXVzdCBiZSBvZiB0aGUgc2FtZSBzaXplIGFzCiAqIHRoZSBsaW5rIGlkZW50aWZpZXIgYXJyYXkgc2luY2UgdGhlIGZpcnN0IGVudHJpZXMgb2YgdGhlIGFycmF5cyBhcmUKICogdXNlZCBmb3Igb25lIHNlYXJjaCwgdGhlIHNlY29uZCBlbnRyaWVzIGFyZSB1c2VkIGZvciBhbm90aGVyLCBhbmQgc28KICogb24uIFdoZW4gZG9pbmcgcGFyYWxsZWwgc2VhcmNoZXMgYW4gYXJyYXkgb2Ygc2VhcmNoIHJlc3VsdAogKiBpZGVudGlmaWVycyBpcyByZXR1cm5lZCwgZXhjZXB0IGluIGNhc2Ugb2YgZXJyb3IsIHRoZW4gdGhlIGVudHJ5CiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNlYXJjaCB3aWxsIGJlIEZBTFNFLiBUaGlzIGlzIHZlcnkgbXVjaCBsaWtlCiAqIHRoZSB2YWx1ZSBub3JtYWxseSByZXR1cm5lZCwgZXhjZXB0IHRoYXQgYSByZXN1bHQgaWRlbnRpZmllciBpcyBhbHdheXMKICogcmV0dXJuZWQgd2hlbiBhIHNlYXJjaCB3YXMgbWFkZS4gVGhlcmUgYXJlIHNvbWUgcmFyZSBjYXNlcyB3aGVyZSB0aGUKICogbm9ybWFsIHNlYXJjaCByZXR1cm5zIEZBTFNFIHdoaWxlIHRoZSBwYXJhbGxlbCBzZWFyY2ggcmV0dXJucyBhbgogKiBpZGVudGlmaWVyLgogKgogKiBAcGFyYW0gcmVzb3VyY2V8YXJyYXkgJGxpbmtfaWRlbnRpZmllciBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgbGRhcF9jb25uZWN0LgogKiBAcGFyYW0gc3RyaW5nICRiYXNlX2RuIFRoZSBiYXNlIEROIGZvciB0aGUgZGlyZWN0b3J5LgogKiBAcGFyYW0gc3RyaW5nICRmaWx0ZXIgVGhlIHNlYXJjaCBmaWx0ZXIgY2FuIGJlIHNpbXBsZSBvciBhZHZhbmNlZCwgdXNpbmcgYm9vbGVhbiBvcGVyYXRvcnMgaW4KICogdGhlIGZvcm1hdCBkZXNjcmliZWQgaW4gdGhlIExEQVAgZG9jdW1lbnRhdGlvbiAoc2VlIHRoZSBOZXRzY2FwZSBEaXJlY3RvcnkgU0RLIG9yCiAqIFJGQzQ1MTUgZm9yIGZ1bGwKICogaW5mb3JtYXRpb24gb24gZmlsdGVycykuCiAqIEBwYXJhbSBhcnJheSAkYXR0cmlidXRlcyBBbiBhcnJheSBvZiB0aGUgcmVxdWlyZWQgYXR0cmlidXRlcywgZS5nLiBhcnJheSgibWFpbCIsICJzbiIsICJjbiIpLgogKiBOb3RlIHRoYXQgdGhlICJkbiIgaXMgYWx3YXlzIHJldHVybmVkIGlycmVzcGVjdGl2ZSBvZiB3aGljaCBhdHRyaWJ1dGVzCiAqIHR5cGVzIGFyZSByZXF1ZXN0ZWQuCiAqCiAqIFVzaW5nIHRoaXMgcGFyYW1ldGVyIGlzIG11Y2ggbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgZGVmYXVsdCBhY3Rpb24KICogKHdoaWNoIGlzIHRvIHJldHVybiBhbGwgYXR0cmlidXRlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCB2YWx1ZXMpLgogKiBUaGUgdXNlIG9mIHRoaXMgcGFyYW1ldGVyIHNob3VsZCB0aGVyZWZvcmUgYmUgY29uc2lkZXJlZCBnb29kCiAqIHByYWN0aWNlLgogKiBAcGFyYW0gaW50ICRhdHRyc29ubHkgU2hvdWxkIGJlIHNldCB0byAxIGlmIG9ubHkgYXR0cmlidXRlIHR5cGVzIGFyZSB3YW50ZWQuIElmIHNldCB0byAwCiAqIGJvdGggYXR0cmlidXRlcyB0eXBlcyBhbmQgYXR0cmlidXRlIHZhbHVlcyBhcmUgZmV0Y2hlZCB3aGljaCBpcyB0aGUKICogZGVmYXVsdCBiZWhhdmlvdXIuCiAqIEBwYXJhbSBpbnQgJHNpemVsaW1pdCBFbmFibGVzIHlvdSB0byBsaW1pdCB0aGUgY291bnQgb2YgZW50cmllcyBmZXRjaGVkLiBTZXR0aW5nIHRoaXMgdG8gMAogKiBtZWFucyBubyBsaW1pdC4KICoKICogVGhpcyBwYXJhbWV0ZXIgY2FuIE5PVCBvdmVycmlkZSBzZXJ2ZXItc2lkZSBwcmVzZXQgc2l6ZWxpbWl0LiBZb3UgY2FuCiAqIHNldCBpdCBsb3dlciB0aG91Z2guCiAqCiAqIFNvbWUgZGlyZWN0b3J5IHNlcnZlciBob3N0cyB3aWxsIGJlIGNvbmZpZ3VyZWQgdG8gcmV0dXJuIG5vIG1vcmUgdGhhbgogKiBhIHByZXNldCBudW1iZXIgb2YgZW50cmllcy4gSWYgdGhpcyBvY2N1cnMsIHRoZSBzZXJ2ZXIgd2lsbCBpbmRpY2F0ZQogKiB0aGF0IGl0IGhhcyBvbmx5IHJldHVybmVkIGEgcGFydGlhbCByZXN1bHRzIHNldC4gVGhpcyBhbHNvIG9jY3VycyBpZgogKiB5b3UgdXNlIHRoaXMgcGFyYW1ldGVyIHRvIGxpbWl0IHRoZSBjb3VudCBvZiBmZXRjaGVkIGVudHJpZXMuCiAqIEBwYXJhbSBpbnQgJHRpbWVsaW1pdCBTZXRzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBob3cgbG9uZyBpcyBzcGVuZCBvbiB0aGUgc2VhcmNoLiBTZXR0aW5nCiAqIHRoaXMgdG8gMCBtZWFucyBubyBsaW1pdC4KICoKICogVGhpcyBwYXJhbWV0ZXIgY2FuIE5PVCBvdmVycmlkZSBzZXJ2ZXItc2lkZSBwcmVzZXQgdGltZWxpbWl0LiBZb3UgY2FuCiAqIHNldCBpdCBsb3dlciB0aG91Z2guCiAqIEBwYXJhbSBpbnQgJGRlcmVmIFNwZWNpZmllcyBob3cgYWxpYXNlcyBzaG91bGQgYmUgaGFuZGxlZCBkdXJpbmcgdGhlIHNlYXJjaC4gSXQgY2FuIGJlCiAqIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogKgogKgogKgogKiBMREFQX0RFUkVGX05FVkVSIC0gKGRlZmF1bHQpIGFsaWFzZXMgYXJlIG5ldmVyCiAqIGRlcmVmZXJlbmNlZC4KICoKICoKICoKICoKICogTERBUF9ERVJFRl9TRUFSQ0hJTkcgLSBhbGlhc2VzIHNob3VsZCBiZQogKiBkZXJlZmVyZW5jZWQgZHVyaW5nIHRoZSBzZWFyY2ggYnV0IG5vdCB3aGVuIGxvY2F0aW5nIHRoZSBiYXNlIG9iamVjdAogKiBvZiB0aGUgc2VhcmNoLgogKgogKgogKgogKgogKiBMREFQX0RFUkVGX0ZJTkRJTkcgLSBhbGlhc2VzIHNob3VsZCBiZQogKiBkZXJlZmVyZW5jZWQgd2hlbiBsb2NhdGluZyB0aGUgYmFzZSBvYmplY3QgYnV0IG5vdCBkdXJpbmcgdGhlIHNlYXJjaC4KICoKICoKICoKICoKICogTERBUF9ERVJFRl9BTFdBWVMgLSBhbGlhc2VzIHNob3VsZCBiZSBkZXJlZmVyZW5jZWQKICogYWx3YXlzLgogKgogKgogKgogKiBAcGFyYW0gYXJyYXkgJHNlcnZlcmN0cmxzIEFycmF5IG9mIExEQVAgQ29udHJvbHMgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBzZWFyY2ggcmVzdWx0IGlkZW50aWZpZXIuCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF9zZWFyY2goJGxpbmtfaWRlbnRpZmllciwgc3RyaW5nICRiYXNlX2RuLCBzdHJpbmcgJGZpbHRlciwgYXJyYXkgJGF0dHJpYnV0ZXMgPSBudWxsLCBpbnQgJGF0dHJzb25seSA9IDAsIGludCAkc2l6ZWxpbWl0ID0gLTEsIGludCAkdGltZWxpbWl0ID0gLTEsIGludCAkZGVyZWYgPSBMREFQX0RFUkVGX05FVkVSLCBhcnJheSAkc2VydmVyY3RybHMgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHNlcnZlcmN0cmxzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxsZGFwX3NlYXJjaCgkbGlua19pZGVudGlmaWVyLCAkYmFzZV9kbiwgJGZpbHRlciwgJGF0dHJpYnV0ZXMsICRhdHRyc29ubHksICRzaXplbGltaXQsICR0aW1lbGltaXQsICRkZXJlZiwgJHNlcnZlcmN0cmxzKTsKICAgIH0gZWxzZWlmICgkZGVyZWYgIT09IExEQVBfREVSRUZfTkVWRVIpIHsKICAgICAgICAkcmVzdWx0ID0gXGxkYXBfc2VhcmNoKCRsaW5rX2lkZW50aWZpZXIsICRiYXNlX2RuLCAkZmlsdGVyLCAkYXR0cmlidXRlcywgJGF0dHJzb25seSwgJHNpemVsaW1pdCwgJHRpbWVsaW1pdCwgJGRlcmVmKTsKICAgIH0gZWxzZWlmICgkdGltZWxpbWl0ICE9PSAtMSkgewogICAgICAgICRyZXN1bHQgPSBcbGRhcF9zZWFyY2goJGxpbmtfaWRlbnRpZmllciwgJGJhc2VfZG4sICRmaWx0ZXIsICRhdHRyaWJ1dGVzLCAkYXR0cnNvbmx5LCAkc2l6ZWxpbWl0LCAkdGltZWxpbWl0KTsKICAgIH0gZWxzZWlmICgkc2l6ZWxpbWl0ICE9PSAtMSkgewogICAgICAgICRyZXN1bHQgPSBcbGRhcF9zZWFyY2goJGxpbmtfaWRlbnRpZmllciwgJGJhc2VfZG4sICRmaWx0ZXIsICRhdHRyaWJ1dGVzLCAkYXR0cnNvbmx5LCAkc2l6ZWxpbWl0KTsKICAgIH0gZWxzZWlmICgkYXR0cnNvbmx5ICE9PSAwKSB7CiAgICAgICAgJHJlc3VsdCA9IFxsZGFwX3NlYXJjaCgkbGlua19pZGVudGlmaWVyLCAkYmFzZV9kbiwgJGZpbHRlciwgJGF0dHJpYnV0ZXMsICRhdHRyc29ubHkpOwogICAgfSBlbHNlaWYgKCRhdHRyaWJ1dGVzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxsZGFwX3NlYXJjaCgkbGlua19pZGVudGlmaWVyLCAkYmFzZV9kbiwgJGZpbHRlciwgJGF0dHJpYnV0ZXMpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGxkYXBfc2VhcmNoKCRsaW5rX2lkZW50aWZpZXIsICRiYXNlX2RuLCAkZmlsdGVyKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExkYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBvcHRpb24gdG8gYmUgbmV3dmFsLgogKgogKiBAcGFyYW0gcmVzb3VyY2V8bnVsbCAkbGlua19pZGVudGlmaWVyIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSBsZGFwX2Nvbm5lY3QuCiAqIEBwYXJhbSBpbnQgJG9wdGlvbiBUaGUgcGFyYW1ldGVyIG9wdGlvbiBjYW4gYmUgb25lIG9mOgogKgogKgogKgogKgogKiBPcHRpb24KICogVHlwZQogKiBBdmFpbGFibGUgc2luY2UKICoKICoKICoKICoKICogTERBUF9PUFRfREVSRUYKICogaW50ZWdlcgogKgogKgogKgogKiBMREFQX09QVF9TSVpFTElNSVQKICogaW50ZWdlcgogKgogKgogKgogKiBMREFQX09QVF9USU1FTElNSVQKICogaW50ZWdlcgogKgogKgogKgogKiBMREFQX09QVF9ORVRXT1JLX1RJTUVPVVQKICogaW50ZWdlcgogKiBQSFAgNS4zLjAKICoKICoKICogTERBUF9PUFRfUFJPVE9DT0xfVkVSU0lPTgogKiBpbnRlZ2VyCiAqCiAqCiAqCiAqIExEQVBfT1BUX0VSUk9SX05VTUJFUgogKiBpbnRlZ2VyCiAqCiAqCiAqCiAqIExEQVBfT1BUX1JFRkVSUkFMUwogKiBib29sCiAqCiAqCiAqCiAqIExEQVBfT1BUX1JFU1RBUlQKICogYm9vbAogKgogKgogKgogKiBMREFQX09QVF9IT1NUX05BTUUKICogc3RyaW5nCiAqCiAqCiAqCiAqIExEQVBfT1BUX0VSUk9SX1NUUklORwogKiBzdHJpbmcKICoKICoKICoKICogTERBUF9PUFRfRElBR05PU1RJQ19NRVNTQUdFCiAqIHN0cmluZwogKgogKgogKgogKiBMREFQX09QVF9NQVRDSEVEX0ROCiAqIHN0cmluZwogKgogKgogKgogKiBMREFQX09QVF9TRVJWRVJfQ09OVFJPTFMKICogYXJyYXkKICoKICoKICoKICogTERBUF9PUFRfQ0xJRU5UX0NPTlRST0xTCiAqIGFycmF5CiAqCiAqCiAqCiAqIExEQVBfT1BUX1hfS0VFUEFMSVZFX0lETEUKICogaW50CiAqIFBIUCA3LjEuMAogKgogKgogKiBMREFQX09QVF9YX0tFRVBBTElWRV9QUk9CRVMKICogaW50CiAqIFBIUCA3LjEuMAogKgogKgogKiBMREFQX09QVF9YX0tFRVBBTElWRV9JTlRFUlZBTAogKiBpbnQKICogUEhQIDcuMS4wCiAqCiAqCiAqIExEQVBfT1BUX1hfVExTX0NBQ0VSVERJUgogKiBzdHJpbmcKICogUEhQIDcuMS4wCiAqCiAqCiAqIExEQVBfT1BUX1hfVExTX0NBQ0VSVEZJTEUKICogc3RyaW5nCiAqIFBIUCA3LjEuMAogKgogKgogKiBMREFQX09QVF9YX1RMU19DRVJURklMRQogKiBzdHJpbmcKICogUEhQIDcuMS4wCiAqCiAqCiAqIExEQVBfT1BUX1hfVExTX0NJUEhFUl9TVUlURQogKiBzdHJpbmcKICogUEhQIDcuMS4wCiAqCiAqCiAqIExEQVBfT1BUX1hfVExTX0NSTENIRUNLCiAqIGludGVnZXIKICogUEhQIDcuMS4wCiAqCiAqCiAqIExEQVBfT1BUX1hfVExTX0NSTEZJTEUKICogc3RyaW5nCiAqIFBIUCA3LjEuMAogKgogKgogKiBMREFQX09QVF9YX1RMU19ESEZJTEUKICogc3RyaW5nCiAqIFBIUCA3LjEuMAogKgogKgogKiBMREFQX09QVF9YX1RMU19LRVlGSUxFCiAqIHN0cmluZwogKiBQSFAgNy4xLjAKICoKICoKICogTERBUF9PUFRfWF9UTFNfUFJPVE9DT0xfTUlOCiAqIGludGVnZXIKICogUEhQIDcuMS4wCiAqCiAqCiAqIExEQVBfT1BUX1hfVExTX1JBTkRPTV9GSUxFCiAqIHN0cmluZwogKiBQSFAgNy4xLjAKICoKICoKICogTERBUF9PUFRfWF9UTFNfUkVRVUlSRV9DRVJUCiAqIGludGVnZXIKICogUEhQIDcuMC41CiAqCiAqCiAqCiAqCiAqCiAqIExEQVBfT1BUX1NFUlZFUl9DT05UUk9MUyBhbmQKICogTERBUF9PUFRfQ0xJRU5UX0NPTlRST0xTIHJlcXVpcmUgYSBsaXN0IG9mCiAqIGNvbnRyb2xzLCB0aGlzIG1lYW5zIHRoYXQgdGhlIHZhbHVlIG11c3QgYmUgYW4gYXJyYXkgb2YgY29udHJvbHMuIEEKICogY29udHJvbCBjb25zaXN0cyBvZiBhbiBvaWQgaWRlbnRpZnlpbmcgdGhlIGNvbnRyb2wsCiAqIGFuIG9wdGlvbmFsIHZhbHVlLCBhbmQgYW4gb3B0aW9uYWwgZmxhZyBmb3IKICogY3JpdGljYWxpdHkuIEluIFBIUCBhIGNvbnRyb2wgaXMgZ2l2ZW4gYnkgYW4KICogYXJyYXkgY29udGFpbmluZyBhbiBlbGVtZW50IHdpdGggdGhlIGtleSBvaWQKICogYW5kIHN0cmluZyB2YWx1ZSwgYW5kIHR3byBvcHRpb25hbCBlbGVtZW50cy4gVGhlIG9wdGlvbmFsCiAqIGVsZW1lbnRzIGFyZSBrZXkgdmFsdWUgd2l0aCBzdHJpbmcgdmFsdWUKICogYW5kIGtleSBpc2NyaXRpY2FsIHdpdGggYm9vbGVhbiB2YWx1ZS4KICogaXNjcml0aWNhbCBkZWZhdWx0cyB0byBGQUxTRQogKiBpZiBub3Qgc3VwcGxpZWQuIFNlZSBkcmFmdC1pZXRmLWxkYXBleHQtbGRhcC1jLWFwaS14eC50eHQKICogZm9yIGRldGFpbHMuIFNlZSBhbHNvIHRoZSBzZWNvbmQgZXhhbXBsZSBiZWxvdy4KICogQHBhcmFtIG1peGVkICRuZXd2YWwgVGhlIG5ldyB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBvcHRpb24uCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF9zZXRfb3B0aW9uKCRsaW5rX2lkZW50aWZpZXIsIGludCAkb3B0aW9uLCAkbmV3dmFsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGxkYXBfc2V0X29wdGlvbigkbGlua19pZGVudGlmaWVyLCAkb3B0aW9uLCAkbmV3dmFsKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExkYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFVuYmluZHMgZnJvbSB0aGUgTERBUCBkaXJlY3RvcnkuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSBsZGFwX2Nvbm5lY3QuCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF91bmJpbmQoJGxpbmtfaWRlbnRpZmllcik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsZGFwX3VuYmluZCgkbGlua19pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExkYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/libxml.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xMaWJ4bWxFeGNlcHRpb247CgovKioKICogUmV0cmlldmUgbGFzdCBlcnJvciBmcm9tIGxpYnhtbC4KICoKICogQHJldHVybiBcTGliWE1MRXJyb3IgUmV0dXJucyBhIExpYlhNTEVycm9yIG9iamVjdCBpZiB0aGVyZSBpcyBhbnkgZXJyb3IgaW4gdGhlCiAqIGJ1ZmZlciwgRkFMU0Ugb3RoZXJ3aXNlLgogKiBAdGhyb3dzIExpYnhtbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGlieG1sX2dldF9sYXN0X2Vycm9yKCk6IFxMaWJYTUxFcnJvcgp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGxpYnhtbF9nZXRfbGFzdF9lcnJvcigpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGlieG1sRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIENoYW5nZXMgdGhlIGRlZmF1bHQgZXh0ZXJuYWwgZW50aXR5IGxvYWRlci4KICoKICogQHBhcmFtIGNhbGxhYmxlICRyZXNvbHZlcl9mdW5jdGlvbiBBIGNhbGxhYmxlIHRoYXQgdGFrZXMgdGhyZWUgYXJndW1lbnRzLiBUd28gc3RyaW5ncywgYSBwdWJsaWMgaWQKICogYW5kIHN5c3RlbSBpZCwgYW5kIGEgY29udGV4dCAoYW4gYXJyYXkgd2l0aCBmb3VyIGtleXMpIGFzIHRoZSB0aGlyZCBhcmd1bWVudC4KICogVGhpcyBjYWxsYmFjayBzaG91bGQgcmV0dXJuIGEgcmVzb3VyY2UsIGEgc3RyaW5nIGZyb20gd2hpY2ggYSByZXNvdXJjZSBjYW4gYmUKICogb3BlbmVkLCBvciBOVUxMLgogKiBAdGhyb3dzIExpYnhtbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGlieG1sX3NldF9leHRlcm5hbF9lbnRpdHlfbG9hZGVyKGNhbGxhYmxlICRyZXNvbHZlcl9mdW5jdGlvbik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsaWJ4bWxfc2V0X2V4dGVybmFsX2VudGl0eV9sb2FkZXIoJHJlc29sdmVyX2Z1bmN0aW9uKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExpYnhtbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/lzf.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xMemZFeGNlcHRpb247CgovKioKICogbHpmX2NvbXByZXNzIGNvbXByZXNzZXMgdGhlIGdpdmVuCiAqIGRhdGEgc3RyaW5nIHVzaW5nIExaRiBlbmNvZGluZy4KICoKICogQHBhcmFtIHN0cmluZyAkZGF0YSBUaGUgc3RyaW5nIHRvIGNvbXByZXNzLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBjb21wcmVzc2VkIGRhdGEuCiAqIEB0aHJvd3MgTHpmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsemZfY29tcHJlc3Moc3RyaW5nICRkYXRhKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbHpmX2NvbXByZXNzKCRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEx6ZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBsemZfY29tcHJlc3MgZGVjb21wcmVzc2VzIHRoZSBnaXZlbgogKiBkYXRhIHN0cmluZyBjb250YWluaW5nIGx6ZiBlbmNvZGVkIGRhdGEuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIGNvbXByZXNzZWQgc3RyaW5nLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBkZWNvbXByZXNzZWQgZGF0YS4KICogQHRocm93cyBMemZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGx6Zl9kZWNvbXByZXNzKHN0cmluZyAkZGF0YSk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGx6Zl9kZWNvbXByZXNzKCRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEx6ZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/mailparse.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xNYWlscGFyc2VFeGNlcHRpb247CgovKioKICogRXh0cmFjdHMvZGVjb2RlcyBhIG1lc3NhZ2Ugc2VjdGlvbiBmcm9tIHRoZSBzdXBwbGllZCBmaWxlbmFtZS4KICoKICogVGhlIGNvbnRlbnRzIG9mIHRoZSBzZWN0aW9uIHdpbGwgYmUgZGVjb2RlZCBhY2NvcmRpbmcgdG8gdGhlaXIgdHJhbnNmZXIKICogZW5jb2RpbmcgLSBiYXNlNjQsIHF1b3RlZC1wcmludGFibGUgYW5kIHV1ZW5jb2RlZCB0ZXh0IGFyZSBzdXBwb3J0ZWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbWltZW1haWwgQSB2YWxpZCBNSU1FIHJlc291cmNlLCBjcmVhdGVkIHdpdGgKICogbWFpbHBhcnNlX21zZ19jcmVhdGUuCiAqIEBwYXJhbSBtaXhlZCAkZmlsZW5hbWUgQ2FuIGJlIGEgZmlsZSBuYW1lIG9yIGEgdmFsaWQgc3RyZWFtIHJlc291cmNlLgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrZnVuYyBJZiBzZXQsIHRoaXMgbXVzdCBiZSBlaXRoZXIgYSB2YWxpZCBjYWxsYmFjayB0aGF0IHdpbGwgYmUgcGFzc2VkIHRoZQogKiBleHRyYWN0ZWQgc2VjdGlvbiwgb3IgTlVMTCB0byBtYWtlIHRoaXMgZnVuY3Rpb24gcmV0dXJuIHRoZQogKiBleHRyYWN0ZWQgc2VjdGlvbi4KICoKICogSWYgbm90IHNwZWNpZmllZCwgdGhlIGNvbnRlbnRzIHdpbGwgYmUgc2VudCB0byAic3Rkb3V0Ii4KICogQHJldHVybiBzdHJpbmcgSWYgY2FsbGJhY2tmdW5jIGlzIG5vdCBOVUxMIHJldHVybnMgVFJVRSBvbgogKiBzdWNjZXNzLgogKgogKiBJZiBjYWxsYmFja2Z1bmMgaXMgc2V0IHRvIE5VTEwsIHJldHVybnMgdGhlCiAqIGV4dHJhY3RlZCBzZWN0aW9uIGFzIGEgc3RyaW5nLgogKiBAdGhyb3dzIE1haWxwYXJzZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbWFpbHBhcnNlX21zZ19leHRyYWN0X3BhcnRfZmlsZSgkbWltZW1haWwsICRmaWxlbmFtZSwgY2FsbGFibGUgJGNhbGxiYWNrZnVuYyA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjYWxsYmFja2Z1bmMgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG1haWxwYXJzZV9tc2dfZXh0cmFjdF9wYXJ0X2ZpbGUoJG1pbWVtYWlsLCAkZmlsZW5hbWUsICRjYWxsYmFja2Z1bmMpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG1haWxwYXJzZV9tc2dfZXh0cmFjdF9wYXJ0X2ZpbGUoJG1pbWVtYWlsLCAkZmlsZW5hbWUpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTWFpbHBhcnNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEZyZWVzIGEgTUlNRSByZXNvdXJjZS4KICoKICogQHBhcmFtIHJlc291cmNlICRtaW1lbWFpbCBBIHZhbGlkIE1JTUUgcmVzb3VyY2UgYWxsb2NhdGVkIGJ5CiAqIG1haWxwYXJzZV9tc2dfY3JlYXRlIG9yCiAqIG1haWxwYXJzZV9tc2dfcGFyc2VfZmlsZS4KICogQHRocm93cyBNYWlscGFyc2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1haWxwYXJzZV9tc2dfZnJlZSgkbWltZW1haWwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbWFpbHBhcnNlX21zZ19mcmVlKCRtaW1lbWFpbCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNYWlscGFyc2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFBhcnNlcyBhIGZpbGUuCiAqIFRoaXMgaXMgdGhlIG9wdGltYWwgd2F5IG9mIHBhcnNpbmcgYSBtYWlsIGZpbGUgdGhhdCB5b3UgaGF2ZSBvbiBkaXNrLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBQYXRoIHRvIHRoZSBmaWxlIGhvbGRpbmcgdGhlIG1lc3NhZ2UuCiAqIFRoZSBmaWxlIGlzIG9wZW5lZCBhbmQgc3RyZWFtZWQgdGhyb3VnaCB0aGUgcGFyc2VyLgogKgogKiBUaGUgbWVzc2FnZSBjb250YWluZWQgaW4gZmlsZW5hbWUgaXMgc3VwcG9zZWQgdG8gZW5kIHdpdGggYSBuZXdsaW5lCiAqIChDUkxGKTsgb3RoZXJ3aXNlIHRoZSBsYXN0IGxpbmUgb2YgdGhlIG1lc3NhZ2Ugd2lsbCBub3QgYmUgcGFyc2VkLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBNSU1FIHJlc291cmNlIHJlcHJlc2VudGluZyB0aGUgc3RydWN0dXJlLgogKiBAdGhyb3dzIE1haWxwYXJzZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbWFpbHBhcnNlX21zZ19wYXJzZV9maWxlKHN0cmluZyAkZmlsZW5hbWUpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbWFpbHBhcnNlX21zZ19wYXJzZV9maWxlKCRmaWxlbmFtZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNYWlscGFyc2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogSW5jcmVtZW50YWxseSBwYXJzZSBkYXRhIGludG8gdGhlIHN1cHBsaWVkIG1pbWUgbWFpbCByZXNvdXJjZS4KICoKICogVGhpcyBmdW5jdGlvbiBhbGxvdyB5b3UgdG8gc3RyZWFtIHBvcnRpb25zIG9mIGEgZmlsZSBhdCBhIHRpbWUsIHJhdGhlcgogKiB0aGFuIHJlYWQgYW5kIHBhcnNlIHRoZSB3aG9sZSB0aGluZy4KICoKICogQHBhcmFtIHJlc291cmNlICRtaW1lbWFpbCBBIHZhbGlkIE1JTUUgcmVzb3VyY2UuCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIGZpbmFsIGNodW5rIG9mIGRhdGEgaXMgc3VwcG9zZWQgdG8gZW5kIHdpdGggYSBuZXdsaW5lCiAqIChDUkxGKTsgb3RoZXJ3aXNlIHRoZSBsYXN0IGxpbmUgb2YgdGhlIG1lc3NhZ2Ugd2lsbCBub3QgYmUgcGFyc2VkLgogKiBAdGhyb3dzIE1haWxwYXJzZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbWFpbHBhcnNlX21zZ19wYXJzZSgkbWltZW1haWwsIHN0cmluZyAkZGF0YSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtYWlscGFyc2VfbXNnX3BhcnNlKCRtaW1lbWFpbCwgJGRhdGEpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTWFpbHBhcnNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTdHJlYW1zIGRhdGEgZnJvbSB0aGUgc291cmNlIGZpbGUgcG9pbnRlciwgYXBwbHkKICogZW5jb2RpbmcgYW5kIHdyaXRlIHRvIHRoZSBkZXN0aW5hdGlvbiBmaWxlIHBvaW50ZXIuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc291cmNlZnAgQSB2YWxpZCBmaWxlIGhhbmRsZS4gVGhlIGZpbGUgaXMgc3RyZWFtZWQgdGhyb3VnaCB0aGUgcGFyc2VyLgogKiBAcGFyYW0gcmVzb3VyY2UgJGRlc3RmcCBUaGUgZGVzdGluYXRpb24gZmlsZSBoYW5kbGUgaW4gd2hpY2ggdGhlIGVuY29kZWQgZGF0YSB3aWxsIGJlIHdyaXR0ZW4uCiAqIEBwYXJhbSBzdHJpbmcgJGVuY29kaW5nIE9uZSBvZiB0aGUgY2hhcmFjdGVyIGVuY29kaW5ncyBzdXBwb3J0ZWQgYnkgdGhlCiAqIG1ic3RyaW5nIG1vZHVsZS4KICogQHRocm93cyBNYWlscGFyc2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1haWxwYXJzZV9zdHJlYW1fZW5jb2RlKCRzb3VyY2VmcCwgJGRlc3RmcCwgc3RyaW5nICRlbmNvZGluZyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtYWlscGFyc2Vfc3RyZWFtX2VuY29kZSgkc291cmNlZnAsICRkZXN0ZnAsICRlbmNvZGluZyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNYWlscGFyc2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/mbstring.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xNYnN0cmluZ0V4Y2VwdGlvbjsKCi8qKgogKgogKgogKiBAcGFyYW0gaW50ICRjcAogKiBAcGFyYW0gc3RyaW5nICRlbmNvZGluZwogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGEgc3BlY2lmaWMgY2hhcmFjdGVyLgogKiBAdGhyb3dzIE1ic3RyaW5nRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtYl9jaHIoaW50ICRjcCwgc3RyaW5nICRlbmNvZGluZyA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRlbmNvZGluZyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcbWJfY2hyKCRjcCwgJGVuY29kaW5nKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxtYl9jaHIoJGNwKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1ic3RyaW5nRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNldHMgdGhlIGF1dG9tYXRpYyBjaGFyYWN0ZXIKICogZW5jb2RpbmcgZGV0ZWN0aW9uIG9yZGVyIHRvIGVuY29kaW5nX2xpc3QuCiAqCiAqIEBwYXJhbSBtaXhlZCAkZW5jb2RpbmdfbGlzdCBlbmNvZGluZ19saXN0IGlzIGFuIGFycmF5IG9yCiAqIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGNoYXJhY3RlciBlbmNvZGluZy4gU2VlIHN1cHBvcnRlZCBlbmNvZGluZ3MuCiAqCiAqIElmIGVuY29kaW5nX2xpc3QgaXMgb21pdHRlZCwgaXQgcmV0dXJucwogKiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgZW5jb2RpbmcgZGV0ZWN0aW9uIG9yZGVyIGFzIGFycmF5LgogKgogKiBUaGlzIHNldHRpbmcgYWZmZWN0cyBtYl9kZXRlY3RfZW5jb2RpbmcgYW5kCiAqIG1iX3NlbmRfbWFpbC4KICoKICogbWJzdHJpbmcgY3VycmVudGx5IGltcGxlbWVudHMgdGhlIGZvbGxvd2luZwogKiBlbmNvZGluZyBkZXRlY3Rpb24gZmlsdGVycy4gSWYgdGhlcmUgaXMgYW4gaW52YWxpZCBieXRlIHNlcXVlbmNlCiAqIGZvciB0aGUgZm9sbG93aW5nIGVuY29kaW5ncywgZW5jb2RpbmcgZGV0ZWN0aW9uIHdpbGwgZmFpbC4KICoKICogRm9yIElTTy04ODU5LSosIG1ic3RyaW5nCiAqIGFsd2F5cyBkZXRlY3RzIGFzIElTTy04ODU5LSouCiAqCiAqIEZvciBVVEYtMTYsIFVURi0zMiwKICogVUNTMiBhbmQgVUNTNCwgZW5jb2RpbmcKICogZGV0ZWN0aW9uIHdpbGwgZmFpbCBhbHdheXMuCiAqIEByZXR1cm4gYm9vbHxhcnJheSBXaGVuIHNldHRpbmcgdGhlIGVuY29kaW5nIGRldGVjdGlvbiBvcmRlciwgVFJVRSBpcyByZXR1cm5lZCBvbiBzdWNjZXNzLgogKgogKiBXaGVuIGdldHRpbmcgdGhlIGVuY29kaW5nIGRldGVjdGlvbiBvcmRlciwgYW4gb3JkZXJlZCBhcnJheSBvZiB0aGUgZW5jb2RpbmdzIGlzIHJldHVybmVkLgogKiBAdGhyb3dzIE1ic3RyaW5nRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtYl9kZXRlY3Rfb3JkZXIoJGVuY29kaW5nX2xpc3QgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGVuY29kaW5nX2xpc3QgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG1iX2RldGVjdF9vcmRlcigkZW5jb2RpbmdfbGlzdCk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcbWJfZGV0ZWN0X29yZGVyKCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNYnN0cmluZ0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIGFuIGFycmF5IG9mIGFsaWFzZXMgZm9yIGEga25vd24gZW5jb2RpbmcgdHlwZS4KICoKICogQHBhcmFtIHN0cmluZyAkZW5jb2RpbmcgVGhlIGVuY29kaW5nIHR5cGUgYmVpbmcgY2hlY2tlZCwgZm9yIGFsaWFzZXMuCiAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBhIG51bWVyaWNhbGx5IGluZGV4ZWQgYXJyYXkgb2YgZW5jb2RpbmcgYWxpYXNlcyBvbiBzdWNjZXNzCiAqIEB0aHJvd3MgTWJzdHJpbmdFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1iX2VuY29kaW5nX2FsaWFzZXMoc3RyaW5nICRlbmNvZGluZyk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbWJfZW5jb2RpbmdfYWxpYXNlcygkZW5jb2RpbmcpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTWJzdHJpbmdFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogU2NhbnMgc3RyaW5nIGZvciBtYXRjaGVzIHRvCiAqIHBhdHRlcm4sIHRoZW4gcmVwbGFjZXMgdGhlIG1hdGNoZWQgdGV4dAogKiB3aXRoIHRoZSBvdXRwdXQgb2YgY2FsbGJhY2sgZnVuY3Rpb24uCiAqCiAqIFRoZSBiZWhhdmlvciBvZiB0aGlzIGZ1bmN0aW9uIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gbWJfZXJlZ19yZXBsYWNlLAogKiBleGNlcHQgZm9yIHRoZSBmYWN0IHRoYXQgaW5zdGVhZCBvZgogKiByZXBsYWNlbWVudCBwYXJhbWV0ZXIsIG9uZSBzaG91bGQgc3BlY2lmeSBhCiAqIGNhbGxiYWNrLgogKgogKiBAcGFyYW0gc3RyaW5nICRwYXR0ZXJuIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybi4KICoKICogTXVsdGlieXRlIGNoYXJhY3RlcnMgbWF5IGJlIHVzZWQgaW4gcGF0dGVybi4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjayBBIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgYW5kIHBhc3NlZCBhbiBhcnJheSBvZiBtYXRjaGVkIGVsZW1lbnRzCiAqIGluIHRoZSAgc3ViamVjdCBzdHJpbmcuIFRoZSBjYWxsYmFjayBzaG91bGQKICogcmV0dXJuIHRoZSByZXBsYWNlbWVudCBzdHJpbmcuCiAqCiAqIFlvdSdsbCBvZnRlbiBuZWVkIHRoZSBjYWxsYmFjayBmdW5jdGlvbgogKiBmb3IgYSBtYl9lcmVnX3JlcGxhY2VfY2FsbGJhY2sgaW4ganVzdCBvbmUgcGxhY2UuCiAqIEluIHRoaXMgY2FzZSB5b3UgY2FuIHVzZSBhbgogKiBhbm9ueW1vdXMgZnVuY3Rpb24gdG8KICogZGVjbGFyZSB0aGUgY2FsbGJhY2sgd2l0aGluIHRoZSBjYWxsIHRvCiAqIG1iX2VyZWdfcmVwbGFjZV9jYWxsYmFjay4gQnkgZG9pbmcgaXQgdGhpcyB3YXkKICogeW91IGhhdmUgYWxsIGluZm9ybWF0aW9uIGZvciB0aGUgY2FsbCBpbiBvbmUgcGxhY2UgYW5kIGRvIG5vdAogKiBjbHV0dGVyIHRoZSBmdW5jdGlvbiBuYW1lc3BhY2Ugd2l0aCBhIGNhbGxiYWNrIGZ1bmN0aW9uJ3MgbmFtZQogKiBub3QgdXNlZCBhbnl3aGVyZSBlbHNlLgogKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgVGhlIHN0cmluZyBiZWluZyBjaGVja2VkLgogKiBAcGFyYW0gc3RyaW5nICRvcHRpb24gVGhlIHNlYXJjaCBvcHRpb24uIFNlZSBtYl9yZWdleF9zZXRfb3B0aW9ucyBmb3IgZXhwbGFuYXRpb24uCiAqIEByZXR1cm4gc3RyaW5nIFRoZSByZXN1bHRhbnQgc3RyaW5nIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgTWJzdHJpbmdFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1iX2VyZWdfcmVwbGFjZV9jYWxsYmFjayhzdHJpbmcgJHBhdHRlcm4sIGNhbGxhYmxlICRjYWxsYmFjaywgc3RyaW5nICRzdHJpbmcsIHN0cmluZyAkb3B0aW9uID0gIm1zciIpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtYl9lcmVnX3JlcGxhY2VfY2FsbGJhY2soJHBhdHRlcm4sICRjYWxsYmFjaywgJHN0cmluZywgJG9wdGlvbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNYnN0cmluZ0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKgogKgogKiBAcGFyYW0gc3RyaW5nICRwYXR0ZXJuIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybi4KICoKICogTXVsdGlieXRlIGNoYXJhY3RlcnMgbWF5IGJlIHVzZWQgaW4gcGF0dGVybi4KICogQHBhcmFtIHN0cmluZyAkcmVwbGFjZW1lbnQgVGhlIHJlcGxhY2VtZW50IHRleHQuCiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyBUaGUgc3RyaW5nIGJlaW5nIGNoZWNrZWQuCiAqIEBwYXJhbSBzdHJpbmcgJG9wdGlvbgogKiBAcmV0dXJuIHN0cmluZyBUaGUgcmVzdWx0YW50IHN0cmluZyBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIE1ic3RyaW5nRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtYl9lcmVnX3JlcGxhY2Uoc3RyaW5nICRwYXR0ZXJuLCBzdHJpbmcgJHJlcGxhY2VtZW50LCBzdHJpbmcgJHN0cmluZywgc3RyaW5nICRvcHRpb24gPSAibXNyIik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG1iX2VyZWdfcmVwbGFjZSgkcGF0dGVybiwgJHJlcGxhY2VtZW50LCAkc3RyaW5nLCAkb3B0aW9uKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1ic3RyaW5nRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqCiAqCiAqIEByZXR1cm4gYXJyYXkKICogQHRocm93cyBNYnN0cmluZ0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbWJfZXJlZ19zZWFyY2hfZ2V0cmVncygpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG1iX2VyZWdfc2VhcmNoX2dldHJlZ3MoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1ic3RyaW5nRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIG1iX2VyZWdfc2VhcmNoX2luaXQgc2V0cwogKiBzdHJpbmcgYW5kIHBhdHRlcm4KICogZm9yIGEgbXVsdGlieXRlIHJlZ3VsYXIgZXhwcmVzc2lvbi4gVGhlc2UgdmFsdWVzIGFyZSB1c2VkIGZvcgogKiBtYl9lcmVnX3NlYXJjaCwKICogbWJfZXJlZ19zZWFyY2hfcG9zLCBhbmQKICogbWJfZXJlZ19zZWFyY2hfcmVncy4KICoKICogQHBhcmFtIHN0cmluZyAkc3RyaW5nIFRoZSBzZWFyY2ggc3RyaW5nLgogKiBAcGFyYW0gc3RyaW5nICRwYXR0ZXJuIFRoZSBzZWFyY2ggcGF0dGVybi4KICogQHBhcmFtIHN0cmluZyAkb3B0aW9uIFRoZSBzZWFyY2ggb3B0aW9uLiBTZWUgbWJfcmVnZXhfc2V0X29wdGlvbnMgZm9yIGV4cGxhbmF0aW9uLgogKiBAdGhyb3dzIE1ic3RyaW5nRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtYl9lcmVnX3NlYXJjaF9pbml0KHN0cmluZyAkc3RyaW5nLCBzdHJpbmcgJHBhdHRlcm4gPSBudWxsLCBzdHJpbmcgJG9wdGlvbiA9ICJtc3IiKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJG9wdGlvbiAhPT0gIm1zciIpIHsKICAgICAgICAkcmVzdWx0ID0gXG1iX2VyZWdfc2VhcmNoX2luaXQoJHN0cmluZywgJHBhdHRlcm4sICRvcHRpb24pOwogICAgfSBlbHNlaWYgKCRwYXR0ZXJuICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtYl9lcmVnX3NlYXJjaF9pbml0KCRzdHJpbmcsICRwYXR0ZXJuKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxtYl9lcmVnX3NlYXJjaF9pbml0KCRzdHJpbmcpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTWJzdHJpbmdFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJldHVybnMgdGhlIG1hdGNoZWQgcGFydCBvZiBhIG11bHRpYnl0ZSByZWd1bGFyIGV4cHJlc3Npb24uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4gVGhlIHNlYXJjaCBwYXR0ZXJuLgogKiBAcGFyYW0gc3RyaW5nICRvcHRpb24gVGhlIHNlYXJjaCBvcHRpb24uIFNlZSBtYl9yZWdleF9zZXRfb3B0aW9ucyBmb3IgZXhwbGFuYXRpb24uCiAqIEByZXR1cm4gYXJyYXkKICogQHRocm93cyBNYnN0cmluZ0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbWJfZXJlZ19zZWFyY2hfcmVncyhzdHJpbmcgJHBhdHRlcm4gPSBudWxsLCBzdHJpbmcgJG9wdGlvbiA9ICJtcyIpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJG9wdGlvbiAhPT0gIm1zIikgewogICAgICAgICRyZXN1bHQgPSBcbWJfZXJlZ19zZWFyY2hfcmVncygkcGF0dGVybiwgJG9wdGlvbik7CiAgICB9IGVsc2VpZiAoJHBhdHRlcm4gIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG1iX2VyZWdfc2VhcmNoX3JlZ3MoJHBhdHRlcm4pOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG1iX2VyZWdfc2VhcmNoX3JlZ3MoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1ic3RyaW5nRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSBpbnQgJHBvc2l0aW9uIFRoZSBwb3NpdGlvbiB0byBzZXQuIElmIGl0IGlzIG5lZ2F0aXZlLCBpdCBjb3VudHMgZnJvbSB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuCiAqIEB0aHJvd3MgTWJzdHJpbmdFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1iX2VyZWdfc2VhcmNoX3NldHBvcyhpbnQgJHBvc2l0aW9uKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG1iX2VyZWdfc2VhcmNoX3NldHBvcygkcG9zaXRpb24pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTWJzdHJpbmdFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLiAgTXVsdGlieXRlIGNoYXJhY3RlcnMgbWF5IGJlIHVzZWQuIFRoZSBjYXNlIHdpbGwgYmUgaWdub3JlZC4KICogQHBhcmFtIHN0cmluZyAkcmVwbGFjZSBUaGUgcmVwbGFjZW1lbnQgdGV4dC4KICogQHBhcmFtIHN0cmluZyAkc3RyaW5nIFRoZSBzZWFyY2hlZCBzdHJpbmcuCiAqIEBwYXJhbSBzdHJpbmcgJG9wdGlvbgogKiBAcmV0dXJuIHN0cmluZyBUaGUgcmVzdWx0YW50IHN0cmluZy4KICogQHRocm93cyBNYnN0cmluZ0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbWJfZXJlZ2lfcmVwbGFjZShzdHJpbmcgJHBhdHRlcm4sIHN0cmluZyAkcmVwbGFjZSwgc3RyaW5nICRzdHJpbmcsIHN0cmluZyAkb3B0aW9uID0gIm1zcmkiKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbWJfZXJlZ2lfcmVwbGFjZSgkcGF0dGVybiwgJHJlcGxhY2UsICRzdHJpbmcsICRvcHRpb24pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTWJzdHJpbmdFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogU2V0L0dldCB0aGUgSFRUUCBvdXRwdXQgY2hhcmFjdGVyIGVuY29kaW5nLgogKiBPdXRwdXQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2lsbCBiZSBjb252ZXJ0ZWQgZnJvbSB0aGUgc2V0IGludGVybmFsIGVuY29kaW5nIHRvIGVuY29kaW5nLgogKgogKiBAcGFyYW0gc3RyaW5nICRlbmNvZGluZyBJZiBlbmNvZGluZyBpcyBzZXQsCiAqIG1iX2h0dHBfb3V0cHV0IHNldHMgdGhlIEhUVFAgb3V0cHV0IGNoYXJhY3RlcgogKiBlbmNvZGluZyB0byBlbmNvZGluZy4KICoKICogSWYgZW5jb2RpbmcgaXMgb21pdHRlZCwKICogbWJfaHR0cF9vdXRwdXQgcmV0dXJucyB0aGUgY3VycmVudCBIVFRQIG91dHB1dAogKiBjaGFyYWN0ZXIgZW5jb2RpbmcuCiAqIEByZXR1cm4gc3RyaW5nfGJvb2wgSWYgZW5jb2RpbmcgaXMgb21pdHRlZCwKICogbWJfaHR0cF9vdXRwdXQgcmV0dXJucyB0aGUgY3VycmVudCBIVFRQIG91dHB1dAogKiBjaGFyYWN0ZXIgZW5jb2RpbmcuIE90aGVyd2lzZSwKICogUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgTWJzdHJpbmdFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1iX2h0dHBfb3V0cHV0KHN0cmluZyAkZW5jb2RpbmcgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGVuY29kaW5nICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtYl9odHRwX291dHB1dCgkZW5jb2RpbmcpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG1iX2h0dHBfb3V0cHV0KCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNYnN0cmluZ0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBTZXQvR2V0IHRoZSBpbnRlcm5hbCBjaGFyYWN0ZXIgZW5jb2RpbmcKICoKICogQHBhcmFtIHN0cmluZyAkZW5jb2RpbmcgZW5jb2RpbmcgaXMgdGhlIGNoYXJhY3RlciBlbmNvZGluZyBuYW1lCiAqIHVzZWQgZm9yIHRoZSBIVFRQIGlucHV0IGNoYXJhY3RlciBlbmNvZGluZyBjb252ZXJzaW9uLCBIVFRQIG91dHB1dAogKiBjaGFyYWN0ZXIgZW5jb2RpbmcgY29udmVyc2lvbiwgYW5kIHRoZSBkZWZhdWx0IGNoYXJhY3RlciBlbmNvZGluZwogKiBmb3Igc3RyaW5nIGZ1bmN0aW9ucyBkZWZpbmVkIGJ5IHRoZSBtYnN0cmluZyBtb2R1bGUuCiAqIFlvdSBzaG91bGQgbm90aWNlIHRoYXQgdGhlIGludGVybmFsIGVuY29kaW5nIGlzIHRvdGFsbHkgZGlmZmVyZW50IGZyb20gdGhlIG9uZSBmb3IgbXVsdGlieXRlIHJlZ2V4LgogKiBAcmV0dXJuIHN0cmluZ3xib29sIElmIGVuY29kaW5nIGlzIHNldCwgdGhlbgogKiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICogSW4gdGhpcyBjYXNlLCB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIGZvciBtdWx0aWJ5dGUgcmVnZXggaXMgTk9UIGNoYW5nZWQuCiAqIElmIGVuY29kaW5nIGlzIG9taXR0ZWQsIHRoZW4KICogdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGVuY29kaW5nIG5hbWUgaXMgcmV0dXJuZWQuCiAqIEB0aHJvd3MgTWJzdHJpbmdFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1iX2ludGVybmFsX2VuY29kaW5nKHN0cmluZyAkZW5jb2RpbmcgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGVuY29kaW5nICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtYl9pbnRlcm5hbF9lbmNvZGluZygkZW5jb2RpbmcpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG1iX2ludGVybmFsX2VuY29kaW5nKCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNYnN0cmluZ0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKgogKgogKiBAcGFyYW0gc3RyaW5nICRzdHIKICogQHBhcmFtIHN0cmluZyAkZW5jb2RpbmcKICogQHJldHVybiBpbnQgUmV0dXJucyBhIGNvZGUgcG9pbnQgb2YgY2hhcmFjdGVyLgogKiBAdGhyb3dzIE1ic3RyaW5nRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtYl9vcmQoc3RyaW5nICRzdHIsIHN0cmluZyAkZW5jb2RpbmcgPSBudWxsKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkZW5jb2RpbmcgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG1iX29yZCgkc3RyLCAkZW5jb2RpbmcpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG1iX29yZCgkc3RyKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1ic3RyaW5nRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFBhcnNlcyBHRVQvUE9TVC9DT09LSUUgZGF0YSBhbmQKICogc2V0cyBnbG9iYWwgdmFyaWFibGVzLiBTaW5jZSBQSFAgZG9lcyBub3QgcHJvdmlkZSByYXcgUE9TVC9DT09LSUUKICogZGF0YSwgaXQgY2FuIG9ubHkgYmUgdXNlZCBmb3IgR0VUIGRhdGEgZm9yIG5vdy4gSXQgcGFyc2VzIFVSTAogKiBlbmNvZGVkIGRhdGEsIGRldGVjdHMgZW5jb2RpbmcsIGNvbnZlcnRzIGNvZGluZyB0byBpbnRlcm5hbAogKiBlbmNvZGluZyBhbmQgc2V0IHZhbHVlcyB0byB0aGUgcmVzdWx0IGFycmF5IG9yCiAqIGdsb2JhbCB2YXJpYWJsZXMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGVuY29kZWRfc3RyaW5nIFRoZSBVUkwgZW5jb2RlZCBkYXRhLgogKiBAcGFyYW0gYXJyYXl8bnVsbCAkcmVzdWx0IEFuIGFycmF5IGNvbnRhaW5pbmcgZGVjb2RlZCBhbmQgY2hhcmFjdGVyIGVuY29kZWQgY29udmVydGVkIHZhbHVlcy4KICogQHRocm93cyBNYnN0cmluZ0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbWJfcGFyc2Vfc3RyKHN0cmluZyAkZW5jb2RlZF9zdHJpbmcsID9hcnJheSAmJHJlc3VsdCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtYl9wYXJzZV9zdHIoJGVuY29kZWRfc3RyaW5nLCAkcmVzdWx0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1ic3RyaW5nRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXQvR2V0IGNoYXJhY3RlciBlbmNvZGluZyBmb3IgYSBtdWx0aWJ5dGUgcmVnZXguCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGVuY29kaW5nIFRoZSBlbmNvZGluZwogKiBwYXJhbWV0ZXIgaXMgdGhlIGNoYXJhY3RlciBlbmNvZGluZy4gSWYgaXQgaXMgb21pdHRlZCwgdGhlIGludGVybmFsIGNoYXJhY3RlcgogKiBlbmNvZGluZyB2YWx1ZSB3aWxsIGJlIHVzZWQuCiAqIEByZXR1cm4gc3RyaW5nfGJvb2wKICogQHRocm93cyBNYnN0cmluZ0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbWJfcmVnZXhfZW5jb2Rpbmcoc3RyaW5nICRlbmNvZGluZyA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkZW5jb2RpbmcgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG1iX3JlZ2V4X2VuY29kaW5nKCRlbmNvZGluZyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcbWJfcmVnZXhfZW5jb2RpbmcoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1ic3RyaW5nRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNlbmRzIGVtYWlsLiBIZWFkZXJzIGFuZCBtZXNzYWdlcyBhcmUgY29udmVydGVkIGFuZCBlbmNvZGVkIGFjY29yZGluZwogKiB0byB0aGUgbWJfbGFuZ3VhZ2Ugc2V0dGluZy4gSXQncyBhIHdyYXBwZXIgZnVuY3Rpb24KICogZm9yIG1haWwsIHNvIHNlZSBhbHNvIG1haWwgZm9yIGRldGFpbHMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHRvIFRoZSBtYWlsIGFkZHJlc3NlcyBiZWluZyBzZW50IHRvLiBNdWx0aXBsZQogKiByZWNpcGllbnRzIG1heSBiZSBzcGVjaWZpZWQgYnkgcHV0dGluZyBhIGNvbW1hIGJldHdlZW4gZWFjaAogKiBhZGRyZXNzIGluIHRvLgogKiBUaGlzIHBhcmFtZXRlciBpcyBub3QgYXV0b21hdGljYWxseSBlbmNvZGVkLgogKiBAcGFyYW0gc3RyaW5nICRzdWJqZWN0IFRoZSBzdWJqZWN0IG9mIHRoZSBtYWlsLgogKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlIFRoZSBtZXNzYWdlIG9mIHRoZSBtYWlsLgogKiBAcGFyYW0gc3RyaW5nfGFycmF5fG51bGwgJGFkZGl0aW9uYWxfaGVhZGVycyBTdHJpbmcgb3IgYXJyYXkgdG8gYmUgaW5zZXJ0ZWQgYXQgdGhlIGVuZCBvZiB0aGUgZW1haWwgaGVhZGVyLgogKgogKiBUaGlzIGlzIHR5cGljYWxseSB1c2VkIHRvIGFkZCBleHRyYSBoZWFkZXJzIChGcm9tLCBDYywgYW5kIEJjYykuCiAqIE11bHRpcGxlIGV4dHJhIGhlYWRlcnMgc2hvdWxkIGJlIHNlcGFyYXRlZCB3aXRoIGEgQ1JMRiAoXHJcbikuCiAqIFZhbGlkYXRlIHBhcmFtZXRlciBub3QgdG8gYmUgaW5qZWN0ZWQgdW53YW50ZWQgaGVhZGVycyBieSBhdHRhY2tlcnMuCiAqCiAqIElmIGFuIGFycmF5IGlzIHBhc3NlZCwgaXRzIGtleXMgYXJlIHRoZSBoZWFkZXIgbmFtZXMgYW5kIGl0cwogKiB2YWx1ZXMgYXJlIHRoZSByZXNwZWN0aXZlIGhlYWRlciB2YWx1ZXMuCiAqCiAqIFdoZW4gc2VuZGluZyBtYWlsLCB0aGUgbWFpbCBtdXN0IGNvbnRhaW4KICogYSBGcm9tIGhlYWRlci4gVGhpcyBjYW4gYmUgc2V0IHdpdGggdGhlCiAqIGFkZGl0aW9uYWxfaGVhZGVycyBwYXJhbWV0ZXIsIG9yIGEgZGVmYXVsdAogKiBjYW4gYmUgc2V0IGluIHBocC5pbmkuCiAqCiAqIEZhaWxpbmcgdG8gZG8gdGhpcyB3aWxsIHJlc3VsdCBpbiBhbiBlcnJvcgogKiBtZXNzYWdlIHNpbWlsYXIgdG8gV2FybmluZzogbWFpbCgpOiAic2VuZG1haWxfZnJvbSIgbm90CiAqIHNldCBpbiBwaHAuaW5pIG9yIGN1c3RvbSAiRnJvbToiIGhlYWRlciBtaXNzaW5nLgogKiBUaGUgRnJvbSBoZWFkZXIgc2V0cyBhbHNvCiAqIFJldHVybi1QYXRoIHVuZGVyIFdpbmRvd3MuCiAqCiAqIElmIG1lc3NhZ2VzIGFyZSBub3QgcmVjZWl2ZWQsIHRyeSB1c2luZyBhIExGIChcbikgb25seS4KICogU29tZSBVbml4IG1haWwgdHJhbnNmZXIgYWdlbnRzIChtb3N0IG5vdGFibHkKICogcW1haWwpIHJlcGxhY2UgTEYgYnkgQ1JMRgogKiBhdXRvbWF0aWNhbGx5ICh3aGljaCBsZWFkcyB0byBkb3VibGluZyBDUiBpZiBDUkxGIGlzIHVzZWQpLgogKiBUaGlzIHNob3VsZCBiZSBhIGxhc3QgcmVzb3J0LCBhcyBpdCBkb2VzIG5vdCBjb21wbHkgd2l0aAogKiBSRkMgMjgyMi4KICogQHBhcmFtIHN0cmluZyAkYWRkaXRpb25hbF9wYXJhbWV0ZXIgYWRkaXRpb25hbF9wYXJhbWV0ZXIgaXMgYSBNVEEgY29tbWFuZCBsaW5lCiAqIHBhcmFtZXRlci4gSXQgaXMgdXNlZnVsIHdoZW4gc2V0dGluZyB0aGUgY29ycmVjdCBSZXR1cm4tUGF0aAogKiBoZWFkZXIgd2hlbiB1c2luZyBzZW5kbWFpbC4KICoKICogVGhpcyBwYXJhbWV0ZXIgaXMgZXNjYXBlZCBieSBlc2NhcGVzaGVsbGNtZCBpbnRlcm5hbGx5CiAqIHRvIHByZXZlbnQgY29tbWFuZCBleGVjdXRpb24uIGVzY2FwZXNoZWxsY21kIHByZXZlbnRzCiAqIGNvbW1hbmQgZXhlY3V0aW9uLCBidXQgYWxsb3dzIHRvIGFkZCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMuIEZvciBzZWN1cml0eSByZWFzb24sCiAqIHRoaXMgcGFyYW1ldGVyIHNob3VsZCBiZSB2YWxpZGF0ZWQuCiAqCiAqIFNpbmNlIGVzY2FwZXNoZWxsY21kIGlzIGFwcGxpZWQgYXV0b21hdGljYWxseSwgc29tZSBjaGFyYWN0ZXJzCiAqIHRoYXQgYXJlIGFsbG93ZWQgYXMgZW1haWwgYWRkcmVzc2VzIGJ5IGludGVybmV0IFJGQ3MgY2Fubm90IGJlIHVzZWQuIFByb2dyYW1zCiAqIHRoYXQgYXJlIHJlcXVpcmVkIHRvIHVzZSB0aGVzZSBjaGFyYWN0ZXJzIG1haWwgY2Fubm90IGJlIHVzZWQuCiAqCiAqIFRoZSB1c2VyIHRoYXQgdGhlIHdlYnNlcnZlciBydW5zIGFzIHNob3VsZCBiZSBhZGRlZCBhcyBhIHRydXN0ZWQgdXNlciB0byB0aGUKICogc2VuZG1haWwgY29uZmlndXJhdGlvbiB0byBwcmV2ZW50IGEgJ1gtV2FybmluZycgaGVhZGVyIGZyb20gYmVpbmcgYWRkZWQKICogdG8gdGhlIG1lc3NhZ2Ugd2hlbiB0aGUgZW52ZWxvcGUgc2VuZGVyICgtZikgaXMgc2V0IHVzaW5nIHRoaXMgbWV0aG9kLgogKiBGb3Igc2VuZG1haWwgdXNlcnMsIHRoaXMgZmlsZSBpcyAvZXRjL21haWwvdHJ1c3RlZC11c2Vycy4KICogQHRocm93cyBNYnN0cmluZ0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbWJfc2VuZF9tYWlsKHN0cmluZyAkdG8sIHN0cmluZyAkc3ViamVjdCwgc3RyaW5nICRtZXNzYWdlLCAkYWRkaXRpb25hbF9oZWFkZXJzID0gbnVsbCwgc3RyaW5nICRhZGRpdGlvbmFsX3BhcmFtZXRlciA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbWJfc2VuZF9tYWlsKCR0bywgJHN1YmplY3QsICRtZXNzYWdlLCAkYWRkaXRpb25hbF9oZWFkZXJzLCAkYWRkaXRpb25hbF9wYXJhbWV0ZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTWJzdHJpbmdFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLgogKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgVGhlIHN0cmluZyBiZWluZyBzcGxpdC4KICogQHBhcmFtIGludCAkbGltaXQKICogQHJldHVybiBhcnJheSBUaGUgcmVzdWx0IGFzIGFuIGFycmF5LgogKiBAdGhyb3dzIE1ic3RyaW5nRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtYl9zcGxpdChzdHJpbmcgJHBhdHRlcm4sIHN0cmluZyAkc3RyaW5nLCBpbnQgJGxpbWl0ID0gLTEpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG1iX3NwbGl0KCRwYXR0ZXJuLCAkc3RyaW5nLCAkbGltaXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTWJzdHJpbmdFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhbiBhcnJheSBvZiBzdHJpbmdzLCBpdCBpcyBhIHZlcnNpb24gb2Ygc3RyX3NwbGl0IHdpdGggc3VwcG9ydCBmb3IgZW5jb2RpbmdzIG9mIHZhcmlhYmxlIGNoYXJhY3RlciBzaXplIGFzIHdlbGwgYXMgZml4ZWQtc2l6ZSBlbmNvZGluZ3Mgb2YgMSwyIG9yIDQgYnl0ZSBjaGFyYWN0ZXJzLgogKiBJZiB0aGUgc3BsaXRfbGVuZ3RoIHBhcmFtZXRlciBpcyBzcGVjaWZpZWQsIHRoZSBzdHJpbmcgaXMgYnJva2VuIGRvd24gaW50byBjaHVua3Mgb2YgdGhlIHNwZWNpZmllZCBsZW5ndGggaW4gY2hhcmFjdGVycyAobm90IGJ5dGVzKS4KICogVGhlIGVuY29kaW5nIHBhcmFtZXRlciBjYW4gYmUgb3B0aW9uYWxseSBzcGVjaWZpZWQgYW5kIGl0IGlzIGdvb2QgcHJhY3RpY2UgdG8gZG8gc28uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyBUaGUgc3RyaW5nIHRvIHNwbGl0IGludG8gY2hhcmFjdGVycyBvciBjaHVua3MuCiAqIEBwYXJhbSBpbnQgJHNwbGl0X2xlbmd0aCBJZiBzcGVjaWZpZWQsIGVhY2ggZWxlbWVudCBvZiB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBiZSBjb21wb3NlZCBvZiBtdWx0aXBsZSBjaGFyYWN0ZXJzIGluc3RlYWQgb2YgYSBzaW5nbGUgY2hhcmFjdGVyLgogKiBAcGFyYW0gc3RyaW5nICRlbmNvZGluZyBUaGUgZW5jb2RpbmcKICogcGFyYW1ldGVyIGlzIHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcuIElmIGl0IGlzIG9taXR0ZWQsIHRoZSBpbnRlcm5hbCBjaGFyYWN0ZXIKICogZW5jb2RpbmcgdmFsdWUgd2lsbCBiZSB1c2VkLgogKgogKiBBIHN0cmluZyBzcGVjaWZ5aW5nIG9uZSBvZiB0aGUgc3VwcG9ydGVkIGVuY29kaW5ncy4KICogQHJldHVybiBhcnJheSBtYl9zdHJfc3BsaXQgcmV0dXJucyBhbiBhcnJheSBvZiBzdHJpbmdzLgogKiBAdGhyb3dzIE1ic3RyaW5nRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtYl9zdHJfc3BsaXQoc3RyaW5nICRzdHJpbmcsIGludCAkc3BsaXRfbGVuZ3RoID0gMSwgc3RyaW5nICRlbmNvZGluZyA9IG51bGwpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGVuY29kaW5nICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtYl9zdHJfc3BsaXQoJHN0cmluZywgJHNwbGl0X2xlbmd0aCwgJGVuY29kaW5nKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxtYl9zdHJfc3BsaXQoJHN0cmluZywgJHNwbGl0X2xlbmd0aCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNYnN0cmluZ0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/misc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xNaXNjRXhjZXB0aW9uOwoKLyoqCiAqIERlZmluZXMgYSBuYW1lZCBjb25zdGFudCBhdCBydW50aW1lLgogKgogKiBAcGFyYW0gc3RyaW5nICRuYW1lIFRoZSBuYW1lIG9mIHRoZSBjb25zdGFudC4KICoKICogSXQgaXMgcG9zc2libGUgdG8gZGVmaW5lIGNvbnN0YW50cyB3aXRoIHJlc2VydmVkIG9yCiAqIGV2ZW4gaW52YWxpZCBuYW1lcywgd2hvc2UgdmFsdWUgY2FuIChvbmx5KSBiZSByZXRyaWV2ZWQgd2l0aAogKiBjb25zdGFudC4gSG93ZXZlciwgZG9pbmcgc28gaXMgbm90IHJlY29tbWVuZGVkLgogKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgY29uc3RhbnQuIEluIFBIUCA1LCB2YWx1ZSBtdXN0CiAqIGJlIGEgc2NhbGFyIHZhbHVlIChpbnRlZ2VyLAogKiBmbG9hdCwgc3RyaW5nLCBib29sZWFuLCBvcgogKiBOVUxMKS4gSW4gUEhQIDcsIGFycmF5IHZhbHVlcyBhcmUgYWxzbyBhY2NlcHRlZC4KICoKICogV2hpbGUgaXQgaXMgcG9zc2libGUgdG8gZGVmaW5lIHJlc291cmNlIGNvbnN0YW50cywgaXQgaXMKICogbm90IHJlY29tbWVuZGVkIGFuZCBtYXkgY2F1c2UgdW5wcmVkaWN0YWJsZSBiZWhhdmlvci4KICogQHBhcmFtIGJvb2wgJGNhc2VfaW5zZW5zaXRpdmUgSWYgc2V0IHRvIFRSVUUsIHRoZSBjb25zdGFudCB3aWxsIGJlIGRlZmluZWQgY2FzZS1pbnNlbnNpdGl2ZS4KICogVGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgY2FzZS1zZW5zaXRpdmU7IGkuZS4KICogQ09OU1RBTlQgYW5kIENvbnN0YW50IHJlcHJlc2VudAogKiBkaWZmZXJlbnQgdmFsdWVzLgogKgogKiBDYXNlLWluc2Vuc2l0aXZlIGNvbnN0YW50cyBhcmUgc3RvcmVkIGFzIGxvd2VyLWNhc2UuCiAqIEB0aHJvd3MgTWlzY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZGVmaW5lKHN0cmluZyAkbmFtZSwgJHZhbHVlLCBib29sICRjYXNlX2luc2Vuc2l0aXZlID0gZmFsc2UpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZGVmaW5lKCRuYW1lLCAkdmFsdWUsICRjYXNlX2luc2Vuc2l0aXZlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1pc2NFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFByaW50cyBvdXQgb3IgcmV0dXJucyBhIHN5bnRheCBoaWdobGlnaHRlZCB2ZXJzaW9uIG9mIHRoZSBjb2RlIGNvbnRhaW5lZAogKiBpbiBmaWxlbmFtZSB1c2luZyB0aGUgY29sb3JzIGRlZmluZWQgaW4gdGhlCiAqIGJ1aWx0LWluIHN5bnRheCBoaWdobGlnaHRlciBmb3IgUEhQLgogKgogKiBNYW55IHNlcnZlcnMgYXJlIGNvbmZpZ3VyZWQgdG8gYXV0b21hdGljYWxseSBoaWdobGlnaHQgZmlsZXMKICogd2l0aCBhIHBocHMgZXh0ZW5zaW9uLiBGb3IgZXhhbXBsZSwKICogZXhhbXBsZS5waHBzIHdoZW4gdmlld2VkIHdpbGwgc2hvdyB0aGUKICogc3ludGF4IGhpZ2hsaWdodGVkIHNvdXJjZSBvZiB0aGUgZmlsZS4gVG8gZW5hYmxlIHRoaXMsIGFkZCB0aGlzCiAqIGxpbmUgdG8gdGhlIGh0dHBkLmNvbmY6CiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFBhdGggdG8gdGhlIFBIUCBmaWxlIHRvIGJlIGhpZ2hsaWdodGVkLgogKiBAcGFyYW0gYm9vbCAkcmV0dXJuIFNldCB0aGlzIHBhcmFtZXRlciB0byBUUlVFIHRvIG1ha2UgdGhpcyBmdW5jdGlvbiByZXR1cm4gdGhlCiAqIGhpZ2hsaWdodGVkIGNvZGUuCiAqIEByZXR1cm4gc3RyaW5nfGJvb2wgSWYgcmV0dXJuIGlzIHNldCB0byBUUlVFLCByZXR1cm5zIHRoZSBoaWdobGlnaHRlZAogKiBjb2RlIGFzIGEgc3RyaW5nIGluc3RlYWQgb2YgcHJpbnRpbmcgaXQgb3V0LiBPdGhlcndpc2UsIGl0IHdpbGwgcmV0dXJuCiAqIFRSVUUgb24gc3VjY2VzcywgRkFMU0Ugb24gZmFpbHVyZS4KICogQHRocm93cyBNaXNjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBoaWdobGlnaHRfZmlsZShzdHJpbmcgJGZpbGVuYW1lLCBib29sICRyZXR1cm4gPSBmYWxzZSkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxoaWdobGlnaHRfZmlsZSgkZmlsZW5hbWUsICRyZXR1cm4pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTWlzY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKgogKgogKiBAcGFyYW0gc3RyaW5nICRzdHIgVGhlIFBIUCBjb2RlIHRvIGJlIGhpZ2hsaWdodGVkLiBUaGlzIHNob3VsZCBpbmNsdWRlIHRoZSBvcGVuaW5nIHRhZy4KICogQHBhcmFtIGJvb2wgJHJldHVybiBTZXQgdGhpcyBwYXJhbWV0ZXIgdG8gVFJVRSB0byBtYWtlIHRoaXMgZnVuY3Rpb24gcmV0dXJuIHRoZQogKiBoaWdobGlnaHRlZCBjb2RlLgogKiBAcmV0dXJuIHN0cmluZ3xib29sIElmIHJldHVybiBpcyBzZXQgdG8gVFJVRSwgcmV0dXJucyB0aGUgaGlnaGxpZ2h0ZWQKICogY29kZSBhcyBhIHN0cmluZyBpbnN0ZWFkIG9mIHByaW50aW5nIGl0IG91dC4gT3RoZXJ3aXNlLCBpdCB3aWxsIHJldHVybgogKiBUUlVFIG9uIHN1Y2Nlc3MsIEZBTFNFIG9uIGZhaWx1cmUuCiAqIEB0aHJvd3MgTWlzY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaGlnaGxpZ2h0X3N0cmluZyhzdHJpbmcgJHN0ciwgYm9vbCAkcmV0dXJuID0gZmFsc2UpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaGlnaGxpZ2h0X3N0cmluZygkc3RyLCAkcmV0dXJuKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1pc2NFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUGFjayBnaXZlbiBhcmd1bWVudHMgaW50byBhIGJpbmFyeSBzdHJpbmcgYWNjb3JkaW5nIHRvCiAqIGZvcm1hdC4KICoKICogVGhlIGlkZWEgZm9yIHRoaXMgZnVuY3Rpb24gd2FzIHRha2VuIGZyb20gUGVybCBhbmQgYWxsIGZvcm1hdHRpbmcgY29kZXMKICogd29yayB0aGUgc2FtZSBhcyBpbiBQZXJsLiBIb3dldmVyLCB0aGVyZSBhcmUgc29tZSBmb3JtYXR0aW5nIGNvZGVzIHRoYXQgYXJlCiAqIG1pc3Npbmcgc3VjaCBhcyBQZXJsJ3MgInUiIGZvcm1hdCBjb2RlLgogKgogKiBOb3RlIHRoYXQgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gc2lnbmVkIGFuZCB1bnNpZ25lZCB2YWx1ZXMgb25seQogKiBhZmZlY3RzIHRoZSBmdW5jdGlvbiB1bnBhY2ssIHdoZXJlIGFzCiAqIGZ1bmN0aW9uIHBhY2sgZ2l2ZXMgdGhlIHNhbWUgcmVzdWx0IGZvcgogKiBzaWduZWQgYW5kIHVuc2lnbmVkIGZvcm1hdCBjb2Rlcy4KICoKICogQHBhcmFtIHN0cmluZyAkZm9ybWF0IFRoZSBmb3JtYXQgc3RyaW5nIGNvbnNpc3RzIG9mIGZvcm1hdCBjb2RlcwogKiBmb2xsb3dlZCBieSBhbiBvcHRpb25hbCByZXBlYXRlciBhcmd1bWVudC4gVGhlIHJlcGVhdGVyIGFyZ3VtZW50IGNhbgogKiBiZSBlaXRoZXIgYW4gaW50ZWdlciB2YWx1ZSBvciAqIGZvciByZXBlYXRpbmcgdG8KICogdGhlIGVuZCBvZiB0aGUgaW5wdXQgZGF0YS4gRm9yIGEsIEEsIGgsIEggdGhlIHJlcGVhdCBjb3VudCBzcGVjaWZpZXMKICogaG93IG1hbnkgY2hhcmFjdGVycyBvZiBvbmUgZGF0YSBhcmd1bWVudCBhcmUgdGFrZW4sIGZvciBAIGl0IGlzIHRoZQogKiBhYnNvbHV0ZSBwb3NpdGlvbiB3aGVyZSB0byBwdXQgdGhlIG5leHQgZGF0YSwgZm9yIGV2ZXJ5dGhpbmcgZWxzZSB0aGUKICogcmVwZWF0IGNvdW50IHNwZWNpZmllcyBob3cgbWFueSBkYXRhIGFyZ3VtZW50cyBhcmUgY29uc3VtZWQgYW5kIHBhY2tlZAogKiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IHN0cmluZy4KICoKICogQ3VycmVudGx5IGltcGxlbWVudGVkIGZvcm1hdHMgYXJlOgogKgogKiBwYWNrIGZvcm1hdCBjaGFyYWN0ZXJzCiAqCiAqCiAqCiAqIENvZGUKICogRGVzY3JpcHRpb24KICoKICoKICoKICoKICogYQogKiBOVUwtcGFkZGVkIHN0cmluZwogKgogKgogKiBBCiAqIFNQQUNFLXBhZGRlZCBzdHJpbmcKICoKICogaAogKiBIZXggc3RyaW5nLCBsb3cgbmliYmxlIGZpcnN0CiAqCiAqIEgKICogSGV4IHN0cmluZywgaGlnaCBuaWJibGUgZmlyc3QKICogY3NpZ25lZCBjaGFyCiAqCiAqIEMKICogdW5zaWduZWQgY2hhcgogKgogKiBzCiAqIHNpZ25lZCBzaG9ydCAoYWx3YXlzIDE2IGJpdCwgbWFjaGluZSBieXRlIG9yZGVyKQogKgogKgogKiBTCiAqIHVuc2lnbmVkIHNob3J0IChhbHdheXMgMTYgYml0LCBtYWNoaW5lIGJ5dGUgb3JkZXIpCiAqCiAqCiAqIG4KICogdW5zaWduZWQgc2hvcnQgKGFsd2F5cyAxNiBiaXQsIGJpZyBlbmRpYW4gYnl0ZSBvcmRlcikKICoKICoKICogdgogKiB1bnNpZ25lZCBzaG9ydCAoYWx3YXlzIDE2IGJpdCwgbGl0dGxlIGVuZGlhbiBieXRlIG9yZGVyKQogKgogKgogKiBpCiAqIHNpZ25lZCBpbnRlZ2VyIChtYWNoaW5lIGRlcGVuZGVudCBzaXplIGFuZCBieXRlIG9yZGVyKQogKgogKgogKiBJCiAqIHVuc2lnbmVkIGludGVnZXIgKG1hY2hpbmUgZGVwZW5kZW50IHNpemUgYW5kIGJ5dGUgb3JkZXIpCiAqCiAqCiAqIGwKICogc2lnbmVkIGxvbmcgKGFsd2F5cyAzMiBiaXQsIG1hY2hpbmUgYnl0ZSBvcmRlcikKICoKICoKICogTAogKiB1bnNpZ25lZCBsb25nIChhbHdheXMgMzIgYml0LCBtYWNoaW5lIGJ5dGUgb3JkZXIpCiAqCiAqCiAqIE4KICogdW5zaWduZWQgbG9uZyAoYWx3YXlzIDMyIGJpdCwgYmlnIGVuZGlhbiBieXRlIG9yZGVyKQogKgogKgogKiBWCiAqIHVuc2lnbmVkIGxvbmcgKGFsd2F5cyAzMiBiaXQsIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlcikKICoKICoKICogcQogKiBzaWduZWQgbG9uZyBsb25nIChhbHdheXMgNjQgYml0LCBtYWNoaW5lIGJ5dGUgb3JkZXIpCiAqCiAqCiAqIFEKICogdW5zaWduZWQgbG9uZyBsb25nIChhbHdheXMgNjQgYml0LCBtYWNoaW5lIGJ5dGUgb3JkZXIpCiAqCiAqCiAqIEoKICogdW5zaWduZWQgbG9uZyBsb25nIChhbHdheXMgNjQgYml0LCBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIpCiAqCiAqCiAqIFAKICogdW5zaWduZWQgbG9uZyBsb25nIChhbHdheXMgNjQgYml0LCBsaXR0bGUgZW5kaWFuIGJ5dGUgb3JkZXIpCiAqCiAqCiAqIGYKICogZmxvYXQgKG1hY2hpbmUgZGVwZW5kZW50IHNpemUgYW5kIHJlcHJlc2VudGF0aW9uKQogKgogKgogKiBnCiAqIGZsb2F0IChtYWNoaW5lIGRlcGVuZGVudCBzaXplLCBsaXR0bGUgZW5kaWFuIGJ5dGUgb3JkZXIpCiAqCiAqCiAqIEcKICogZmxvYXQgKG1hY2hpbmUgZGVwZW5kZW50IHNpemUsIGJpZyBlbmRpYW4gYnl0ZSBvcmRlcikKICoKICoKICogZAogKiBkb3VibGUgKG1hY2hpbmUgZGVwZW5kZW50IHNpemUgYW5kIHJlcHJlc2VudGF0aW9uKQogKgogKgogKiBlCiAqIGRvdWJsZSAobWFjaGluZSBkZXBlbmRlbnQgc2l6ZSwgbGl0dGxlIGVuZGlhbiBieXRlIG9yZGVyKQogKgogKgogKiBFCiAqIGRvdWJsZSAobWFjaGluZSBkZXBlbmRlbnQgc2l6ZSwgYmlnIGVuZGlhbiBieXRlIG9yZGVyKQogKgogKgogKiB4CiAqIE5VTCBieXRlCiAqCiAqCiAqIFgKICogQmFjayB1cCBvbmUgYnl0ZQogKgogKgogKiBaCiAqIE5VTC1wYWRkZWQgc3RyaW5nIChuZXcgaW4gUEhQIDUuNSkKICoKICoKICogQAogKiBOVUwtZmlsbCB0byBhYnNvbHV0ZSBwb3NpdGlvbgogKgogKgogKgogKgogKiBAcGFyYW0gbWl4ZWQgJHBhcmFtcwogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGEgYmluYXJ5IHN0cmluZyBjb250YWluaW5nIGRhdGEuCiAqIEB0aHJvd3MgTWlzY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGFjayhzdHJpbmcgJGZvcm1hdCwgLi4uJHBhcmFtcyk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHBhcmFtcyAhPT0gW10pIHsKICAgICAgICAkcmVzdWx0ID0gXHBhY2soJGZvcm1hdCwgLi4uJHBhcmFtcyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBccGFjaygkZm9ybWF0KTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1pc2NFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQ29udmVydCBzdHJpbmcgZnJvbSBvbmUgY29kZXBhZ2UgdG8gYW5vdGhlci4KICoKICogQHBhcmFtIGludHxzdHJpbmcgJGluX2NvZGVwYWdlIFRoZSBjb2RlcGFnZSBvZiB0aGUgc3ViamVjdCBzdHJpbmcuCiAqIEVpdGhlciB0aGUgY29kZXBhZ2UgbmFtZSBvciBpZGVudGlmaWVyLgogKiBAcGFyYW0gaW50fHN0cmluZyAkb3V0X2NvZGVwYWdlIFRoZSBjb2RlcGFnZSB0byBjb252ZXJ0IHRoZSBzdWJqZWN0IHN0cmluZyB0by4KICogRWl0aGVyIHRoZSBjb2RlcGFnZSBuYW1lIG9yIGlkZW50aWZpZXIuCiAqIEBwYXJhbSBzdHJpbmcgJHN1YmplY3QgVGhlIHN0cmluZyB0byBjb252ZXJ0LgogKiBAcmV0dXJuIHN0cmluZyBUaGUgc3ViamVjdCBzdHJpbmcgY29udmVydGVkIHRvCiAqIG91dF9jb2RlcGFnZS4KICogQHRocm93cyBNaXNjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzYXBpX3dpbmRvd3NfY3BfY29udigkaW5fY29kZXBhZ2UsICRvdXRfY29kZXBhZ2UsIHN0cmluZyAkc3ViamVjdCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNhcGlfd2luZG93c19jcF9jb252KCRpbl9jb2RlcGFnZSwgJG91dF9jb2RlcGFnZSwgJHN1YmplY3QpOwogICAgaWYgKCRyZXN1bHQgPT09IG51bGwpIHsKICAgICAgICB0aHJvdyBNaXNjRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNldCB0aGUgY29kZXBhZ2Ugb2YgdGhlIGN1cnJlbnQgcHJvY2Vzcy4KICoKICogQHBhcmFtIGludCAkY3AgQSBjb2RlcGFnZSBpZGVudGlmaWVyLgogKiBAdGhyb3dzIE1pc2NFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNhcGlfd2luZG93c19jcF9zZXQoaW50ICRjcCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzYXBpX3dpbmRvd3NfY3Bfc2V0KCRjcCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNaXNjRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZW5kcyBhIENUUkwgZXZlbnQgdG8gYW5vdGhlciBwcm9jZXNzIGluIHRoZSBzYW1lIHByb2Nlc3MgZ3JvdXAuCiAqCiAqIEBwYXJhbSBpbnQgJGV2ZW50IFRoZSBDVFJMIGV2ZW4gdG8gc2VuZDsKICogZWl0aGVyIFBIUF9XSU5ET1dTX0VWRU5UX0NUUkxfQwogKiBvciBQSFBfV0lORE9XU19FVkVOVF9DVFJMX0JSRUFLLgogKiBAcGFyYW0gaW50ICRwaWQgVGhlIElEIG9mIHRoZSBwcm9jZXNzIHRvIHdoaWNoIHRvIHNlbmQgdGhlIGV2ZW50IHRvLiBJZiAwCiAqIGlzIGdpdmVuLCB0aGUgZXZlbnQgaXMgc2VudCB0byBhbGwgcHJvY2Vzc2VzIG9mIHRoZSBwcm9jZXNzIGdyb3VwLgogKiBAdGhyb3dzIE1pc2NFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNhcGlfd2luZG93c19nZW5lcmF0ZV9jdHJsX2V2ZW50KGludCAkZXZlbnQsIGludCAkcGlkID0gMCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzYXBpX3dpbmRvd3NfZ2VuZXJhdGVfY3RybF9ldmVudCgkZXZlbnQsICRwaWQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTWlzY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogSWYgZW5hYmxlIGlzIG9taXR0ZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIFRSVUUgaWYgdGhlIHN0cmVhbSBzdHJlYW0gaGFzIFZUMTAwIGNvbnRyb2wgY29kZXMgZW5hYmxlZCwgRkFMU0Ugb3RoZXJ3aXNlLgogKgogKiBJZiBlbmFibGUgaXMgc3BlY2lmaWVkLCB0aGUgZnVuY3Rpb24gd2lsbCB0cnkgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIFZUMTAwIGZlYXR1cmVzIG9mIHRoZSBzdHJlYW0gc3RyZWFtLgogKiBJZiB0aGUgZmVhdHVyZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZW5hYmxlZCAob3IgZGlzYWJsZWQpLgogKgogKiBBdCBzdGFydHVwLCBQSFAgdHJpZXMgdG8gZW5hYmxlIHRoZSBWVDEwMCBmZWF0dXJlIG9mIHRoZSBTVERPVVQvU1RERVJSIHN0cmVhbXMuIEJ5IHRoZSB3YXksIGlmIHRob3NlIHN0cmVhbXMgYXJlIHJlZGlyZWN0ZWQgdG8gYSBmaWxlLCB0aGUgVlQxMDAgZmVhdHVyZXMgbWF5IG5vdCBiZSBlbmFibGVkLgogKgogKiBJZiBWVDEwMCBzdXBwb3J0IGlzIGVuYWJsZWQsIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSBjb250cm9sIHNlcXVlbmNlcyBhcyB0aGV5IGFyZSBrbm93biBmcm9tIHRoZSBWVDEwMCB0ZXJtaW5hbC4KICogVGhleSBhbGxvdyB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSB0ZXJtaW5hbCdzIG91dHB1dC4gT24gV2luZG93cyB0aGVzZSBzZXF1ZW5jZXMgYXJlIGNhbGxlZCBDb25zb2xlIFZpcnR1YWwgVGVybWluYWwgU2VxdWVuY2VzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0cmVhbSBUaGUgc3RyZWFtIG9uIHdoaWNoIHRoZSBmdW5jdGlvbiB3aWxsIG9wZXJhdGUuCiAqIEBwYXJhbSBib29sICRlbmFibGUgSWYgc3BlY2lmaWVkLCB0aGUgVlQxMDAgZmVhdHVyZSB3aWxsIGJlIGVuYWJsZWQgKGlmIFRSVUUpIG9yIGRpc2FibGVkIChpZiBGQUxTRSkuCiAqIEB0aHJvd3MgTWlzY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc2FwaV93aW5kb3dzX3Z0MTAwX3N1cHBvcnQoJHN0cmVhbSwgYm9vbCAkZW5hYmxlID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRlbmFibGUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHNhcGlfd2luZG93c192dDEwMF9zdXBwb3J0KCRzdHJlYW0sICRlbmFibGUpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHNhcGlfd2luZG93c192dDEwMF9zdXBwb3J0KCRzdHJlYW0pOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTWlzY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICoKICoKICogQHBhcmFtIGludCAkc2Vjb25kcyBIYWx0IHRpbWUgaW4gc2Vjb25kcy4KICogQHJldHVybiBpbnQgUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MuCiAqCiAqIElmIHRoZSBjYWxsIHdhcyBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCwgc2xlZXAgcmV0dXJucwogKiBhIG5vbi16ZXJvIHZhbHVlLiBPbiBXaW5kb3dzLCB0aGlzIHZhbHVlIHdpbGwgYWx3YXlzIGJlCiAqIDE5MiAodGhlIHZhbHVlIG9mIHRoZQogKiBXQUlUX0lPX0NPTVBMRVRJT04gY29uc3RhbnQgd2l0aGluIHRoZSBXaW5kb3dzIEFQSSkuCiAqIE9uIG90aGVyIHBsYXRmb3JtcywgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBsZWZ0IHRvCiAqIHNsZWVwLgogKiBAdGhyb3dzIE1pc2NFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNsZWVwKGludCAkc2Vjb25kcyk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNsZWVwKCRzZWNvbmRzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1pc2NFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogRGVsYXlzIHByb2dyYW0gZXhlY3V0aW9uIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mCiAqIHNlY29uZHMgYW5kIG5hbm9zZWNvbmRzLgogKgogKiBAcGFyYW0gaW50ICRzZWNvbmRzIE11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlci4KICogQHBhcmFtIGludCAkbmFub3NlY29uZHMgTXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIGxlc3MgdGhhbiAxIGJpbGxpb24uCiAqIEByZXR1cm4gYXJyYXl7MDppbnQsMTppbnR9fGJvb2wgUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIElmIHRoZSBkZWxheSB3YXMgaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwsIGFuIGFzc29jaWF0aXZlIGFycmF5IHdpbGwgYmUKICogcmV0dXJuZWQgd2l0aCB0aGUgY29tcG9uZW50czoKICoKICoKICoKICogc2Vjb25kcyAtIG51bWJlciBvZiBzZWNvbmRzIHJlbWFpbmluZyBpbgogKiB0aGUgZGVsYXkKICoKICoKICoKICoKICogbmFub3NlY29uZHMgLSBudW1iZXIgb2YgbmFub3NlY29uZHMKICogcmVtYWluaW5nIGluIHRoZSBkZWxheQogKgogKgogKgogKiBAdGhyb3dzIE1pc2NFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHRpbWVfbmFub3NsZWVwKGludCAkc2Vjb25kcywgaW50ICRuYW5vc2Vjb25kcykKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFx0aW1lX25hbm9zbGVlcCgkc2Vjb25kcywgJG5hbm9zZWNvbmRzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1pc2NFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogTWFrZXMgdGhlIHNjcmlwdCBzbGVlcCB1bnRpbCB0aGUgc3BlY2lmaWVkCiAqIHRpbWVzdGFtcC4KICoKICogQHBhcmFtIGZsb2F0ICR0aW1lc3RhbXAgVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSBzY3JpcHQgc2hvdWxkIHdha2UuCiAqIEB0aHJvd3MgTWlzY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gdGltZV9zbGVlcF91bnRpbChmbG9hdCAkdGltZXN0YW1wKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHRpbWVfc2xlZXBfdW50aWwoJHRpbWVzdGFtcCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNaXNjRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBVbnBhY2tzIGZyb20gYSBiaW5hcnkgc3RyaW5nIGludG8gYW4gYXJyYXkgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbgogKiBmb3JtYXQuCiAqCiAqIFRoZSB1bnBhY2tlZCBkYXRhIGlzIHN0b3JlZCBpbiBhbiBhc3NvY2lhdGl2ZSBhcnJheS4gVG8KICogYWNjb21wbGlzaCB0aGlzIHlvdSBoYXZlIHRvIG5hbWUgdGhlIGRpZmZlcmVudCBmb3JtYXQgY29kZXMgYW5kCiAqIHNlcGFyYXRlIHRoZW0gYnkgYSBzbGFzaCAvLiBJZiBhIHJlcGVhdGVyIGFyZ3VtZW50IGlzIHByZXNlbnQsCiAqIHRoZW4gZWFjaCBvZiB0aGUgYXJyYXkga2V5cyB3aWxsIGhhdmUgYSBzZXF1ZW5jZSBudW1iZXIgYmVoaW5kCiAqIHRoZSBnaXZlbiBuYW1lLgogKgogKiBAcGFyYW0gc3RyaW5nICRmb3JtYXQgU2VlIHBhY2sgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBmb3JtYXQgY29kZXMuCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIHBhY2tlZCBkYXRhLgogKiBAcGFyYW0gaW50ICRvZmZzZXQgVGhlIG9mZnNldCB0byBiZWdpbiB1bnBhY2tpbmcgZnJvbS4KICogQHJldHVybiBhcnJheSBSZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IGNvbnRhaW5pbmcgdW5wYWNrZWQgZWxlbWVudHMgb2YgYmluYXJ5CiAqIHN0cmluZy4KICogQHRocm93cyBNaXNjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB1bnBhY2soc3RyaW5nICRmb3JtYXQsIHN0cmluZyAkZGF0YSwgaW50ICRvZmZzZXQgPSAwKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFx1bnBhY2soJGZvcm1hdCwgJGRhdGEsICRvZmZzZXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTWlzY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/msql.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xNc3FsRXhjZXB0aW9uOwoKLyoqCiAqIFJldHVybnMgbnVtYmVyIG9mIGFmZmVjdGVkIHJvd3MgYnkgdGhlIGxhc3QgU0VMRUNULCBVUERBVEUgb3IgREVMRVRFCiAqIHF1ZXJ5IGFzc29jaWF0ZWQgd2l0aCByZXN1bHQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IFRoZSByZXN1bHQgcmVzb3VyY2UgdGhhdAogKiBpcyBiZWluZyBldmFsdWF0ZWQuIFRoaXMgcmVzdWx0IGNvbWVzIGZyb20gYSBjYWxsIHRvCiAqIG1zcWxfcXVlcnkuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIG51bWJlciBvZiBhZmZlY3RlZCByb3dzIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgTXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXNxbF9hZmZlY3RlZF9yb3dzKCRyZXN1bHQpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtc3FsX2FmZmVjdGVkX3Jvd3MoJHJlc3VsdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIG1zcWxfY2xvc2UgY2xvc2VzIHRoZSBub24tcGVyc2lzdGVudCBjb25uZWN0aW9uIHRvCiAqIHRoZSBtU1FMIHNlcnZlciB0aGF0J3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgbGluayBpZGVudGlmaWVyLgogKgogKiBVc2luZyBtc3FsX2Nsb3NlIGlzbid0IHVzdWFsbHkgbmVjZXNzYXJ5LCBhcwogKiBub24tcGVyc2lzdGVudCBvcGVuIGxpbmtzIGFyZSBhdXRvbWF0aWNhbGx5IGNsb3NlZCBhdCB0aGUgZW5kIG9mIHRoZQogKiBzY3JpcHQncyBleGVjdXRpb24uIFNlZSBhbHNvIGZyZWVpbmcgcmVzb3VyY2VzLgogKgogKiBAcGFyYW0gcmVzb3VyY2V8bnVsbCAkbGlua19pZGVudGlmaWVyIFRoZSBtU1FMIGNvbm5lY3Rpb24uCiAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXN0IGxpbmsgb3BlbmVkIGJ5IG1zcWxfY29ubmVjdAogKiBpcyBhc3N1bWVkLiBJZiBubyBzdWNoIGxpbmsgaXMgZm91bmQsIHRoZSBmdW5jdGlvbiB3aWxsIHRyeSB0byBlc3RhYmxpc2ggYQogKiBsaW5rIGFzIGlmIG1zcWxfY29ubmVjdCB3YXMgY2FsbGVkLCBhbmQgdXNlIGl0LgogKiBAdGhyb3dzIE1zcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1zcWxfY2xvc2UoJGxpbmtfaWRlbnRpZmllciA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkbGlua19pZGVudGlmaWVyICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3FsX2Nsb3NlKCRsaW5rX2lkZW50aWZpZXIpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG1zcWxfY2xvc2UoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1zcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIG1zcWxfY29ubmVjdCBlc3RhYmxpc2hlcyBhIGNvbm5lY3Rpb24gdG8gYSBtU1FMCiAqIHNlcnZlci4KICoKICogSWYgYSBzZWNvbmQgY2FsbCBpcyBtYWRlIHRvIG1zcWxfY29ubmVjdCB3aXRoCiAqIHRoZSBzYW1lIGFyZ3VtZW50cywgbm8gbmV3IGxpbmsgd2lsbCBiZSBlc3RhYmxpc2hlZCwgYnV0IGluc3RlYWQsIHRoZQogKiBsaW5rIGlkZW50aWZpZXIgb2YgdGhlIGFscmVhZHkgb3BlbmVkIGxpbmsgd2lsbCBiZSByZXR1cm5lZC4KICoKICogVGhlIGxpbmsgdG8gdGhlIHNlcnZlciB3aWxsIGJlIGNsb3NlZCBhcyBzb29uIGFzIHRoZSBleGVjdXRpb24gb2YgdGhlCiAqIHNjcmlwdCBlbmRzLCB1bmxlc3MgaXQncyBjbG9zZWQgZWFybGllciBieSBleHBsaWNpdGx5IGNhbGxpbmcKICogbXNxbF9jbG9zZS4KICoKICogQHBhcmFtIHN0cmluZyAkaG9zdG5hbWUgVGhlIGhvc3RuYW1lIGNhbiBhbHNvIGluY2x1ZGUgYSBwb3J0IG51bWJlci4gZS5nLgogKiBob3N0bmFtZSxwb3J0LgogKgogKiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCBieSB0aGUgbWVhbnMgb2YgYSBVbml4CiAqIGRvbWFpbiBzb2NrZXQsIGJlaW5nIHRoZW4gbW9yZSBlZmZpY2llbnQgdGhlbiBhIGxvY2FsaG9zdCBUQ1Agc29ja2V0CiAqIGNvbm5lY3Rpb24uCiAqCiAqIFdoaWxlIHRoaXMgZnVuY3Rpb24gd2lsbCBhY2NlcHQgYSBjb2xvbiAoOikgYXMgYQogKiBob3N0L3BvcnQgc2VwYXJhdG9yLCBhIGNvbW1hICgsKSBpcyB0aGUgcHJlZmVycmVkCiAqIG1ldGhvZC4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgcG9zaXRpdmUgbVNRTCBsaW5rIGlkZW50aWZpZXIgb24gc3VjY2Vzcy4KICogQHRocm93cyBNc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtc3FsX2Nvbm5lY3Qoc3RyaW5nICRob3N0bmFtZSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkaG9zdG5hbWUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG1zcWxfY29ubmVjdCgkaG9zdG5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG1zcWxfY29ubmVjdCgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBtc3FsX2NyZWF0ZV9kYiBhdHRlbXB0cyB0byBjcmVhdGUgYSBuZXcgZGF0YWJhc2Ugb24KICogdGhlIG1TUUwgc2VydmVyLgogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhYmFzZV9uYW1lIFRoZSBuYW1lIG9mIHRoZSBtU1FMIGRhdGFiYXNlLgogKiBAcGFyYW0gcmVzb3VyY2V8bnVsbCAkbGlua19pZGVudGlmaWVyIFRoZSBtU1FMIGNvbm5lY3Rpb24uCiAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXN0IGxpbmsgb3BlbmVkIGJ5IG1zcWxfY29ubmVjdAogKiBpcyBhc3N1bWVkLiBJZiBubyBzdWNoIGxpbmsgaXMgZm91bmQsIHRoZSBmdW5jdGlvbiB3aWxsIHRyeSB0byBlc3RhYmxpc2ggYQogKiBsaW5rIGFzIGlmIG1zcWxfY29ubmVjdCB3YXMgY2FsbGVkLCBhbmQgdXNlIGl0LgogKiBAdGhyb3dzIE1zcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1zcWxfY3JlYXRlX2RiKHN0cmluZyAkZGF0YWJhc2VfbmFtZSwgJGxpbmtfaWRlbnRpZmllciA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkbGlua19pZGVudGlmaWVyICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3FsX2NyZWF0ZV9kYigkZGF0YWJhc2VfbmFtZSwgJGxpbmtfaWRlbnRpZmllcik7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcbXNxbF9jcmVhdGVfZGIoJGRhdGFiYXNlX25hbWUpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogbXNxbF9kYXRhX3NlZWsgbW92ZXMgdGhlIGludGVybmFsIHJvdwogKiBwb2ludGVyIG9mIHRoZSBtU1FMIHJlc3VsdCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBxdWVyeQogKiBpZGVudGlmaWVyIHRvIHBvaW50IHRvIHRoZSBzcGVjaWZpZWQgcm93IG51bWJlci4gIFRoZSBuZXh0IGNhbGwKICogdG8gbXNxbF9mZXRjaF9yb3cgd291bGQgcmV0dXJuIHRoYXQKICogcm93LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBUaGUgcmVzdWx0IHJlc291cmNlIHRoYXQKICogaXMgYmVpbmcgZXZhbHVhdGVkLiBUaGlzIHJlc3VsdCBjb21lcyBmcm9tIGEgY2FsbCB0bwogKiBtc3FsX3F1ZXJ5LgogKiBAcGFyYW0gaW50ICRyb3dfbnVtYmVyIFRoZSBzZWVrZWQgcm93IG51bWJlci4KICogQHRocm93cyBNc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtc3FsX2RhdGFfc2VlaygkcmVzdWx0LCBpbnQgJHJvd19udW1iZXIpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXNxbF9kYXRhX3NlZWsoJHJlc3VsdCwgJHJvd19udW1iZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogbXNxbF9kYl9xdWVyeSBzZWxlY3RzIGEgZGF0YWJhc2UgYW5kIGV4ZWN1dGVzIGEgcXVlcnkKICogb24gaXQuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGFiYXNlIFRoZSBuYW1lIG9mIHRoZSBtU1FMIGRhdGFiYXNlLgogKiBAcGFyYW0gc3RyaW5nICRxdWVyeSBUaGUgU1FMIHF1ZXJ5LgogKiBAcGFyYW0gcmVzb3VyY2V8bnVsbCAkbGlua19pZGVudGlmaWVyIFRoZSBtU1FMIGNvbm5lY3Rpb24uCiAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXN0IGxpbmsgb3BlbmVkIGJ5IG1zcWxfY29ubmVjdAogKiBpcyBhc3N1bWVkLiBJZiBubyBzdWNoIGxpbmsgaXMgZm91bmQsIHRoZSBmdW5jdGlvbiB3aWxsIHRyeSB0byBlc3RhYmxpc2ggYQogKiBsaW5rIGFzIGlmIG1zcWxfY29ubmVjdCB3YXMgY2FsbGVkLCBhbmQgdXNlIGl0LgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBwb3NpdGl2ZSBtU1FMIHF1ZXJ5IGlkZW50aWZpZXIgdG8gdGhlIHF1ZXJ5IHJlc3VsdC4KICogQHRocm93cyBNc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtc3FsX2RiX3F1ZXJ5KHN0cmluZyAkZGF0YWJhc2UsIHN0cmluZyAkcXVlcnksICRsaW5rX2lkZW50aWZpZXIgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGxpbmtfaWRlbnRpZmllciAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcbXNxbF9kYl9xdWVyeSgkZGF0YWJhc2UsICRxdWVyeSwgJGxpbmtfaWRlbnRpZmllcik7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcbXNxbF9kYl9xdWVyeSgkZGF0YWJhc2UsICRxdWVyeSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIG1zcWxfZHJvcF9kYiBhdHRlbXB0cyB0byBkcm9wIChyZW1vdmUpIGEgZGF0YWJhc2UKICogZnJvbSB0aGUgbVNRTCBzZXJ2ZXIuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGFiYXNlX25hbWUgVGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlLgogKiBAcGFyYW0gcmVzb3VyY2V8bnVsbCAkbGlua19pZGVudGlmaWVyIFRoZSBtU1FMIGNvbm5lY3Rpb24uCiAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXN0IGxpbmsgb3BlbmVkIGJ5IG1zcWxfY29ubmVjdAogKiBpcyBhc3N1bWVkLiBJZiBubyBzdWNoIGxpbmsgaXMgZm91bmQsIHRoZSBmdW5jdGlvbiB3aWxsIHRyeSB0byBlc3RhYmxpc2ggYQogKiBsaW5rIGFzIGlmIG1zcWxfY29ubmVjdCB3YXMgY2FsbGVkLCBhbmQgdXNlIGl0LgogKiBAdGhyb3dzIE1zcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1zcWxfZHJvcF9kYihzdHJpbmcgJGRhdGFiYXNlX25hbWUsICRsaW5rX2lkZW50aWZpZXIgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGxpbmtfaWRlbnRpZmllciAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcbXNxbF9kcm9wX2RiKCRkYXRhYmFzZV9uYW1lLCAkbGlua19pZGVudGlmaWVyKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3FsX2Ryb3BfZGIoJGRhdGFiYXNlX25hbWUpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogbXNxbF9maWVsZF9sZW4gcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBzcGVjaWZpZWQKICogZmllbGQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IFRoZSByZXN1bHQgcmVzb3VyY2UgdGhhdAogKiBpcyBiZWluZyBldmFsdWF0ZWQuIFRoaXMgcmVzdWx0IGNvbWVzIGZyb20gYSBjYWxsIHRvCiAqIG1zcWxfcXVlcnkuCiAqIEBwYXJhbSBpbnQgJGZpZWxkX29mZnNldCBUaGUgbnVtZXJpY2FsIGZpZWxkIG9mZnNldC4gVGhlCiAqIGZpZWxkX29mZnNldCBzdGFydHMgYXQgMS4KICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBzcGVjaWZpZWQgZmllbGQuCiAqIEB0aHJvd3MgTXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXNxbF9maWVsZF9sZW4oJHJlc3VsdCwgaW50ICRmaWVsZF9vZmZzZXQpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtc3FsX2ZpZWxkX2xlbigkcmVzdWx0LCAkZmllbGRfb2Zmc2V0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1zcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogbXNxbF9maWVsZF9uYW1lIGdldHMgdGhlIG5hbWUgb2YgdGhlIHNwZWNpZmllZCBmaWVsZAogKiBpbmRleC4KICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgVGhlIHJlc3VsdCByZXNvdXJjZSB0aGF0CiAqIGlzIGJlaW5nIGV2YWx1YXRlZC4gVGhpcyByZXN1bHQgY29tZXMgZnJvbSBhIGNhbGwgdG8KICogbXNxbF9xdWVyeS4KICogQHBhcmFtIGludCAkZmllbGRfb2Zmc2V0IFRoZSBudW1lcmljYWwgZmllbGQgb2Zmc2V0LiBUaGUKICogZmllbGRfb2Zmc2V0IHN0YXJ0cyBhdCAxLgogKiBAcmV0dXJuIHN0cmluZyBUaGUgbmFtZSBvZiB0aGUgZmllbGQuCiAqIEB0aHJvd3MgTXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXNxbF9maWVsZF9uYW1lKCRyZXN1bHQsIGludCAkZmllbGRfb2Zmc2V0KTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXNxbF9maWVsZF9uYW1lKCRyZXN1bHQsICRmaWVsZF9vZmZzZXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBTZWVrcyB0byB0aGUgc3BlY2lmaWVkIGZpZWxkIG9mZnNldC4gSWYgdGhlIG5leHQgY2FsbCB0bwogKiBtc3FsX2ZldGNoX2ZpZWxkIHdvbid0IGluY2x1ZGUgYSBmaWVsZCBvZmZzZXQsIHRoaXMKICogZmllbGQgd291bGQgYmUgcmV0dXJuZWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IFRoZSByZXN1bHQgcmVzb3VyY2UgdGhhdAogKiBpcyBiZWluZyBldmFsdWF0ZWQuIFRoaXMgcmVzdWx0IGNvbWVzIGZyb20gYSBjYWxsIHRvCiAqIG1zcWxfcXVlcnkuCiAqIEBwYXJhbSBpbnQgJGZpZWxkX29mZnNldCBUaGUgbnVtZXJpY2FsIGZpZWxkIG9mZnNldC4gVGhlCiAqIGZpZWxkX29mZnNldCBzdGFydHMgYXQgMS4KICogQHRocm93cyBNc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtc3FsX2ZpZWxkX3NlZWsoJHJlc3VsdCwgaW50ICRmaWVsZF9vZmZzZXQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXNxbF9maWVsZF9zZWVrKCRyZXN1bHQsICRmaWVsZF9vZmZzZXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgdGFibGUgdGhhdCB0aGUgc3BlY2lmaWVkIGZpZWxkIGlzIGluLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBUaGUgcmVzdWx0IHJlc291cmNlIHRoYXQKICogaXMgYmVpbmcgZXZhbHVhdGVkLiBUaGlzIHJlc3VsdCBjb21lcyBmcm9tIGEgY2FsbCB0bwogKiBtc3FsX3F1ZXJ5LgogKiBAcGFyYW0gaW50ICRmaWVsZF9vZmZzZXQgVGhlIG51bWVyaWNhbCBmaWVsZCBvZmZzZXQuIFRoZQogKiBmaWVsZF9vZmZzZXQgc3RhcnRzIGF0IDEuCiAqIEByZXR1cm4gaW50IFRoZSBuYW1lIG9mIHRoZSB0YWJsZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIE1zcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1zcWxfZmllbGRfdGFibGUoJHJlc3VsdCwgaW50ICRmaWVsZF9vZmZzZXQpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtc3FsX2ZpZWxkX3RhYmxlKCRyZXN1bHQsICRmaWVsZF9vZmZzZXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBtc3FsX2ZpZWxkX3R5cGUgZ2V0cyB0aGUgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIGZpZWxkCiAqIGluZGV4LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBUaGUgcmVzdWx0IHJlc291cmNlIHRoYXQKICogaXMgYmVpbmcgZXZhbHVhdGVkLiBUaGlzIHJlc3VsdCBjb21lcyBmcm9tIGEgY2FsbCB0bwogKiBtc3FsX3F1ZXJ5LgogKiBAcGFyYW0gaW50ICRmaWVsZF9vZmZzZXQgVGhlIG51bWVyaWNhbCBmaWVsZCBvZmZzZXQuIFRoZQogKiBmaWVsZF9vZmZzZXQgc3RhcnRzIGF0IDEuCiAqIEByZXR1cm4gc3RyaW5nIFRoZSB0eXBlIG9mIHRoZSBmaWVsZC4gT25lIG9mIGludCwKICogY2hhciwgcmVhbCwgaWRlbnQsCiAqIG51bGwgb3IgdW5rbm93bi4gVGhpcyBmdW5jdGlvbnMgd2lsbAogKiByZXR1cm4gRkFMU0Ugb24gZmFpbHVyZS4KICogQHRocm93cyBNc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtc3FsX2ZpZWxkX3R5cGUoJHJlc3VsdCwgaW50ICRmaWVsZF9vZmZzZXQpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtc3FsX2ZpZWxkX3R5cGUoJHJlc3VsdCwgJGZpZWxkX29mZnNldCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIG1zcWxfZnJlZV9yZXN1bHQgZnJlZXMgdGhlIG1lbW9yeSBhc3NvY2lhdGVkCiAqIHdpdGggcXVlcnlfaWRlbnRpZmllci4gIFdoZW4gUEhQIGNvbXBsZXRlcyBhCiAqIHJlcXVlc3QsIHRoaXMgbWVtb3J5IGlzIGZyZWVkIGF1dG9tYXRpY2FsbHksIHNvIHlvdSBvbmx5IG5lZWQgdG8KICogY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4geW91IHdhbnQgdG8gbWFrZSBzdXJlIHlvdSBkb24ndCB1c2UgdG9vCiAqIG11Y2ggbWVtb3J5IHdoaWxlIHRoZSBzY3JpcHQgaXMgcnVubmluZy4KICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgVGhlIHJlc3VsdCByZXNvdXJjZSB0aGF0CiAqIGlzIGJlaW5nIGV2YWx1YXRlZC4gVGhpcyByZXN1bHQgY29tZXMgZnJvbSBhIGNhbGwgdG8KICogbXNxbF9xdWVyeS4KICogQHRocm93cyBNc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtc3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1zcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIG1zcWxfcGNvbm5lY3QgYWN0cyB2ZXJ5IG11Y2ggbGlrZQogKiBtc3FsX2Nvbm5lY3Qgd2l0aCB0d28gbWFqb3IgZGlmZmVyZW5jZXMuCiAqCiAqIEZpcnN0LCB3aGVuIGNvbm5lY3RpbmcsIHRoZSBmdW5jdGlvbiB3b3VsZCBmaXJzdCB0cnkgdG8gZmluZCBhCiAqIChwZXJzaXN0ZW50KSBsaW5rIHRoYXQncyBhbHJlYWR5IG9wZW4gd2l0aCB0aGUgc2FtZSBob3N0LgogKiBJZiBvbmUgaXMgZm91bmQsIGFuIGlkZW50aWZpZXIgZm9yIGl0IHdpbGwgYmUgcmV0dXJuZWQgaW5zdGVhZCBvZiBvcGVuaW5nCiAqIGEgbmV3IGNvbm5lY3Rpb24uCiAqCiAqIFNlY29uZCwgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIFNRTCBzZXJ2ZXIgd2lsbCBub3QgYmUgY2xvc2VkIHdoZW4gdGhlCiAqIGV4ZWN1dGlvbiBvZiB0aGUgc2NyaXB0IGVuZHMuICBJbnN0ZWFkLCB0aGUgbGluayB3aWxsIHJlbWFpbiBvcGVuIGZvcgogKiBmdXR1cmUgdXNlIChtc3FsX2Nsb3NlIHdpbGwgbm90IGNsb3NlIGxpbmtzCiAqIGVzdGFibGlzaGVkIGJ5IHRoaXMgZnVuY3Rpb24pLgogKgogKiBAcGFyYW0gc3RyaW5nICRob3N0bmFtZSBUaGUgaG9zdG5hbWUgY2FuIGFsc28gaW5jbHVkZSBhIHBvcnQgbnVtYmVyLiBlLmcuCiAqIGhvc3RuYW1lLHBvcnQuCiAqCiAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkIGJ5IHRoZSBtZWFucyBvZiBhIFVuaXgKICogZG9tYWluIHNvY2tldCwgYmVpbmcgbW9yZSBlZmZpY2llbnQgdGhhbiBhIGxvY2FsaG9zdCBUQ1Agc29ja2V0CiAqIGNvbm5lY3Rpb24uCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhIHBvc2l0aXZlIG1TUUwgbGluayBpZGVudGlmaWVyIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgTXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXNxbF9wY29ubmVjdChzdHJpbmcgJGhvc3RuYW1lID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRob3N0bmFtZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcbXNxbF9wY29ubmVjdCgkaG9zdG5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG1zcWxfcGNvbm5lY3QoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1zcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogbXNxbF9xdWVyeSBzZW5kcyBhIHF1ZXJ5IHRvIHRoZSBjdXJyZW50bHkgYWN0aXZlCiAqIGRhdGFiYXNlIG9uIHRoZSBzZXJ2ZXIgdGhhdCdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGxpbmsKICogaWRlbnRpZmllci4KICoKICogQHBhcmFtIHN0cmluZyAkcXVlcnkgVGhlIFNRTCBxdWVyeS4KICogQHBhcmFtIHJlc291cmNlfG51bGwgJGxpbmtfaWRlbnRpZmllciBUaGUgbVNRTCBjb25uZWN0aW9uLgogKiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgbGFzdCBsaW5rIG9wZW5lZCBieSBtc3FsX2Nvbm5lY3QKICogaXMgYXNzdW1lZC4gSWYgbm8gc3VjaCBsaW5rIGlzIGZvdW5kLCB0aGUgZnVuY3Rpb24gd2lsbCB0cnkgdG8gZXN0YWJsaXNoIGEKICogbGluayBhcyBpZiBtc3FsX2Nvbm5lY3Qgd2FzIGNhbGxlZCwgYW5kIHVzZSBpdC4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgcG9zaXRpdmUgbVNRTCBxdWVyeSBpZGVudGlmaWVyIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgTXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXNxbF9xdWVyeShzdHJpbmcgJHF1ZXJ5LCAkbGlua19pZGVudGlmaWVyID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRsaW5rX2lkZW50aWZpZXIgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG1zcWxfcXVlcnkoJHF1ZXJ5LCAkbGlua19pZGVudGlmaWVyKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3FsX3F1ZXJ5KCRxdWVyeSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIG1zcWxfc2VsZWN0X2RiIHNldHMgdGhlIGN1cnJlbnQgYWN0aXZlIGRhdGFiYXNlIG9uCiAqIHRoZSBzZXJ2ZXIgdGhhdCdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCiAqIGxpbmtfaWRlbnRpZmllci4KICoKICogU3Vic2VxdWVudCBjYWxscyB0byBtc3FsX3F1ZXJ5IHdpbGwgYmUgbWFkZSBvbiB0aGUKICogYWN0aXZlIGRhdGFiYXNlLgogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhYmFzZV9uYW1lIFRoZSBkYXRhYmFzZSBuYW1lLgogKiBAcGFyYW0gcmVzb3VyY2V8bnVsbCAkbGlua19pZGVudGlmaWVyIFRoZSBtU1FMIGNvbm5lY3Rpb24uCiAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXN0IGxpbmsgb3BlbmVkIGJ5IG1zcWxfY29ubmVjdAogKiBpcyBhc3N1bWVkLiBJZiBubyBzdWNoIGxpbmsgaXMgZm91bmQsIHRoZSBmdW5jdGlvbiB3aWxsIHRyeSB0byBlc3RhYmxpc2ggYQogKiBsaW5rIGFzIGlmIG1zcWxfY29ubmVjdCB3YXMgY2FsbGVkLCBhbmQgdXNlIGl0LgogKiBAdGhyb3dzIE1zcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1zcWxfc2VsZWN0X2RiKHN0cmluZyAkZGF0YWJhc2VfbmFtZSwgJGxpbmtfaWRlbnRpZmllciA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkbGlua19pZGVudGlmaWVyICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3FsX3NlbGVjdF9kYigkZGF0YWJhc2VfbmFtZSwgJGxpbmtfaWRlbnRpZmllcik7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcbXNxbF9zZWxlY3RfZGIoJGRhdGFiYXNlX25hbWUpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/mysql.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xNeXNxbEV4Y2VwdGlvbjsKCi8qKgogKiBteXNxbF9jbG9zZSBjbG9zZXMgdGhlIG5vbi1wZXJzaXN0ZW50IGNvbm5lY3Rpb24gdG8KICogdGhlIE15U1FMIHNlcnZlciB0aGF0J3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgbGluayBpZGVudGlmaWVyLiBJZgogKiBsaW5rX2lkZW50aWZpZXIgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgbGFzdCBvcGVuZWQKICogbGluayBpcyB1c2VkLgogKgogKgogKiBPcGVuIG5vbi1wZXJzaXN0ZW50IE15U1FMIGNvbm5lY3Rpb25zIGFuZCByZXN1bHQgc2V0cyBhcmUgYXV0b21hdGljYWxseSBkZXN0cm95ZWQgd2hlbiBhCiAqIFBIUCBzY3JpcHQgZmluaXNoZXMgaXRzIGV4ZWN1dGlvbi4gU28sIHdoaWxlIGV4cGxpY2l0bHkgY2xvc2luZyBvcGVuCiAqIGNvbm5lY3Rpb25zIGFuZCBmcmVlaW5nIHJlc3VsdCBzZXRzIGlzIG9wdGlvbmFsLCBkb2luZyBzbyBpcyByZWNvbW1lbmRlZC4KICogVGhpcyB3aWxsIGltbWVkaWF0ZWx5IHJldHVybiByZXNvdXJjZXMgdG8gUEhQIGFuZCBNeVNRTCwgd2hpY2ggY2FuCiAqIGltcHJvdmUgcGVyZm9ybWFuY2UuIEZvciByZWxhdGVkIGluZm9ybWF0aW9uLCBzZWUKICogZnJlZWluZyByZXNvdXJjZXMKICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgVGhlIE15U1FMIGNvbm5lY3Rpb24uIElmIHRoZQogKiBsaW5rIGlkZW50aWZpZXIgaXMgbm90IHNwZWNpZmllZCwgdGhlIGxhc3QgbGluayBvcGVuZWQgYnkKICogbXlzcWxfY29ubmVjdCBpcyBhc3N1bWVkLiBJZiBubyBjb25uZWN0aW9uIGlzIGZvdW5kIG9yCiAqIGVzdGFibGlzaGVkLCBhbiBFX1dBUk5JTkcgbGV2ZWwgZXJyb3IgaXMKICogZ2VuZXJhdGVkLgogKiBAdGhyb3dzIE15c3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBteXNxbF9jbG9zZSgkbGlua19pZGVudGlmaWVyID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxteXNxbF9jbG9zZSgkbGlua19pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE15c3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBPcGVucyBvciByZXVzZXMgYSBjb25uZWN0aW9uIHRvIGEgTXlTUUwgc2VydmVyLgogKgogKiBAcGFyYW0gc3RyaW5nICRzZXJ2ZXIgVGhlIE15U1FMIHNlcnZlci4gSXQgY2FuIGFsc28gaW5jbHVkZSBhIHBvcnQgbnVtYmVyLiBlLmcuCiAqICJob3N0bmFtZTpwb3J0IiBvciBhIHBhdGggdG8gYSBsb2NhbCBzb2NrZXQgZS5nLiAiOi9wYXRoL3RvL3NvY2tldCIgZm9yCiAqIHRoZSBsb2NhbGhvc3QuCiAqCiAqIElmIHRoZSBQSFAgZGlyZWN0aXZlCiAqIG15c3FsLmRlZmF1bHRfaG9zdCBpcyB1bmRlZmluZWQgKGRlZmF1bHQpLCB0aGVuIHRoZSBkZWZhdWx0CiAqIHZhbHVlIGlzICdsb2NhbGhvc3Q6MzMwNicuIEluIFNRTCBzYWZlIG1vZGUsIHRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQKICogYW5kIHZhbHVlICdsb2NhbGhvc3Q6MzMwNicgaXMgYWx3YXlzIHVzZWQuCiAqIEBwYXJhbSBzdHJpbmcgJHVzZXJuYW1lIFRoZSB1c2VybmFtZS4gRGVmYXVsdCB2YWx1ZSBpcyBkZWZpbmVkIGJ5IG15c3FsLmRlZmF1bHRfdXNlci4gSW4KICogU1FMIHNhZmUgbW9kZSwgdGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZCBhbmQgdGhlIG5hbWUgb2YgdGhlIHVzZXIgdGhhdAogKiBvd25zIHRoZSBzZXJ2ZXIgcHJvY2VzcyBpcyB1c2VkLgogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZCBUaGUgcGFzc3dvcmQuIERlZmF1bHQgdmFsdWUgaXMgZGVmaW5lZCBieSBteXNxbC5kZWZhdWx0X3Bhc3N3b3JkLiBJbgogKiBTUUwgc2FmZSBtb2RlLCB0aGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkIGFuZCBlbXB0eSBwYXNzd29yZCBpcyB1c2VkLgogKiBAcGFyYW0gYm9vbCAkbmV3X2xpbmsgSWYgYSBzZWNvbmQgY2FsbCBpcyBtYWRlIHRvIG15c3FsX2Nvbm5lY3QKICogd2l0aCB0aGUgc2FtZSBhcmd1bWVudHMsIG5vIG5ldyBsaW5rIHdpbGwgYmUgZXN0YWJsaXNoZWQsIGJ1dAogKiBpbnN0ZWFkLCB0aGUgbGluayBpZGVudGlmaWVyIG9mIHRoZSBhbHJlYWR5IG9wZW5lZCBsaW5rIHdpbGwgYmUKICogcmV0dXJuZWQuIFRoZSBuZXdfbGluayBwYXJhbWV0ZXIgbW9kaWZpZXMgdGhpcwogKiBiZWhhdmlvciBhbmQgbWFrZXMgbXlzcWxfY29ubmVjdCBhbHdheXMgb3BlbgogKiBhIG5ldyBsaW5rLCBldmVuIGlmIG15c3FsX2Nvbm5lY3Qgd2FzIGNhbGxlZAogKiBiZWZvcmUgd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzLgogKiBJbiBTUUwgc2FmZSBtb2RlLCB0aGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkLgogKiBAcGFyYW0gaW50ICRjbGllbnRfZmxhZ3MgVGhlIGNsaWVudF9mbGFncyBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24KICogb2YgdGhlIGZvbGxvd2luZyBjb25zdGFudHM6CiAqIDEyOCAoZW5hYmxlIExPQUQgREFUQSBMT0NBTCBoYW5kbGluZyksCiAqIE1ZU1FMX0NMSUVOVF9TU0wsCiAqIE1ZU1FMX0NMSUVOVF9DT01QUkVTUywKICogTVlTUUxfQ0xJRU5UX0lHTk9SRV9TUEFDRSBvcgogKiBNWVNRTF9DTElFTlRfSU5URVJBQ1RJVkUuCiAqIFJlYWQgdGhlIHNlY3Rpb24gYWJvdXQgIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgogKiBJbiBTUUwgc2FmZSBtb2RlLCB0aGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBNeVNRTCBsaW5rIGlkZW50aWZpZXIgb24gc3VjY2Vzcy4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfY29ubmVjdChzdHJpbmcgJHNlcnZlciA9IG51bGwsIHN0cmluZyAkdXNlcm5hbWUgPSBudWxsLCBzdHJpbmcgJHBhc3N3b3JkID0gbnVsbCwgYm9vbCAkbmV3X2xpbmsgPSBmYWxzZSwgaW50ICRjbGllbnRfZmxhZ3MgPSAwKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGNsaWVudF9mbGFncyAhPT0gMCkgewogICAgICAgICRyZXN1bHQgPSBcbXlzcWxfY29ubmVjdCgkc2VydmVyLCAkdXNlcm5hbWUsICRwYXNzd29yZCwgJG5ld19saW5rLCAkY2xpZW50X2ZsYWdzKTsKICAgIH0gZWxzZWlmICgkbmV3X2xpbmsgIT09IGZhbHNlKSB7CiAgICAgICAgJHJlc3VsdCA9IFxteXNxbF9jb25uZWN0KCRzZXJ2ZXIsICR1c2VybmFtZSwgJHBhc3N3b3JkLCAkbmV3X2xpbmspOwogICAgfSBlbHNlaWYgKCRwYXNzd29yZCAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcbXlzcWxfY29ubmVjdCgkc2VydmVyLCAkdXNlcm5hbWUsICRwYXNzd29yZCk7CiAgICB9IGVsc2VpZiAoJHVzZXJuYW1lICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxteXNxbF9jb25uZWN0KCRzZXJ2ZXIsICR1c2VybmFtZSk7CiAgICB9IGVsc2VpZiAoJHNlcnZlciAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcbXlzcWxfY29ubmVjdCgkc2VydmVyKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxteXNxbF9jb25uZWN0KCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNeXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBteXNxbF9jcmVhdGVfZGIgYXR0ZW1wdHMgdG8gY3JlYXRlIGEgbmV3CiAqIGRhdGFiYXNlIG9uIHRoZSBzZXJ2ZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgbGluawogKiBpZGVudGlmaWVyLgogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhYmFzZV9uYW1lIFRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZSBiZWluZyBjcmVhdGVkLgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBUaGUgTXlTUUwgY29ubmVjdGlvbi4gSWYgdGhlCiAqIGxpbmsgaWRlbnRpZmllciBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgbGFzdCBsaW5rIG9wZW5lZCBieQogKiBteXNxbF9jb25uZWN0IGlzIGFzc3VtZWQuIElmIG5vIHN1Y2ggbGluayBpcyBmb3VuZCwgaXQKICogd2lsbCB0cnkgdG8gY3JlYXRlIG9uZSBhcyBpZiBteXNxbF9jb25uZWN0IGhhZCBiZWVuIGNhbGxlZAogKiB3aXRoIG5vIGFyZ3VtZW50cy4gSWYgbm8gY29ubmVjdGlvbiBpcyBmb3VuZCBvciBlc3RhYmxpc2hlZCwgYW4KICogRV9XQVJOSU5HIGxldmVsIGVycm9yIGlzIGdlbmVyYXRlZC4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfY3JlYXRlX2RiKHN0cmluZyAkZGF0YWJhc2VfbmFtZSwgJGxpbmtfaWRlbnRpZmllciA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXlzcWxfY3JlYXRlX2RiKCRkYXRhYmFzZV9uYW1lLCAkbGlua19pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE15c3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBteXNxbF9kYXRhX3NlZWsgbW92ZXMgdGhlIGludGVybmFsIHJvdwogKiBwb2ludGVyIG9mIHRoZSBNeVNRTCByZXN1bHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgcmVzdWx0CiAqIGlkZW50aWZpZXIgdG8gcG9pbnQgdG8gdGhlIHNwZWNpZmllZCByb3cgbnVtYmVyLiAgVGhlIG5leHQgY2FsbAogKiB0byBhIE15U1FMIGZldGNoIGZ1bmN0aW9uLCBzdWNoIGFzIG15c3FsX2ZldGNoX2Fzc29jLAogKiB3b3VsZCByZXR1cm4gdGhhdCByb3cuCiAqCiAqIHJvd19udW1iZXIgc3RhcnRzIGF0IDAuIFRoZQogKiByb3dfbnVtYmVyIHNob3VsZCBiZSBhIHZhbHVlIGluIHRoZSByYW5nZSBmcm9tIDAgdG8KICogbXlzcWxfbnVtX3Jvd3MgLSAxLiBIb3dldmVyIGlmIHRoZSByZXN1bHQgc2V0CiAqIGlzIGVtcHR5IChteXNxbF9udW1fcm93cyA9PSAwKSwgYSBzZWVrIHRvIDAgd2lsbAogKiBmYWlsIHdpdGggYW4gRV9XQVJOSU5HIGFuZAogKiBteXNxbF9kYXRhX3NlZWsgd2lsbCByZXR1cm4gRkFMU0UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IFRoZSByZXN1bHQgcmVzb3VyY2UgdGhhdAogKiBpcyBiZWluZyBldmFsdWF0ZWQuIFRoaXMgcmVzdWx0IGNvbWVzIGZyb20gYSBjYWxsIHRvCiAqIG15c3FsX3F1ZXJ5LgogKiBAcGFyYW0gaW50ICRyb3dfbnVtYmVyIFRoZSBkZXNpcmVkIHJvdyBudW1iZXIgb2YgdGhlIG5ldyByZXN1bHQgcG9pbnRlci4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfZGF0YV9zZWVrKCRyZXN1bHQsIGludCAkcm93X251bWJlcik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxteXNxbF9kYXRhX3NlZWsoJHJlc3VsdCwgJHJvd19udW1iZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXlzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJldHJpZXZlIHRoZSBkYXRhYmFzZSBuYW1lIGZyb20gYSBjYWxsIHRvCiAqIG15c3FsX2xpc3RfZGJzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBUaGUgcmVzdWx0IHBvaW50ZXIgZnJvbSBhIGNhbGwgdG8gbXlzcWxfbGlzdF9kYnMuCiAqIEBwYXJhbSBpbnQgJHJvdyBUaGUgaW5kZXggaW50byB0aGUgcmVzdWx0IHNldC4KICogQHBhcmFtIG1peGVkICRmaWVsZCBUaGUgZmllbGQgbmFtZS4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgZGF0YWJhc2UgbmFtZSBvbiBzdWNjZXNzLiBJZiBGQUxTRQogKiBpcyByZXR1cm5lZCwgdXNlIG15c3FsX2Vycm9yIHRvIGRldGVybWluZSB0aGUgbmF0dXJlCiAqIG9mIHRoZSBlcnJvci4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfZGJfbmFtZSgkcmVzdWx0LCBpbnQgJHJvdywgJGZpZWxkID0gbnVsbCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG15c3FsX2RiX25hbWUoJHJlc3VsdCwgJHJvdywgJGZpZWxkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE15c3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIG15c3FsX2RiX3F1ZXJ5IHNlbGVjdHMgYSBkYXRhYmFzZSwgYW5kIGV4ZWN1dGVzIGEKICogcXVlcnkgb24gaXQuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGFiYXNlIFRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZSB0aGF0IHdpbGwgYmUgc2VsZWN0ZWQuCiAqIEBwYXJhbSBzdHJpbmcgJHF1ZXJ5IFRoZSBNeVNRTCBxdWVyeS4KICoKICogRGF0YSBpbnNpZGUgdGhlIHF1ZXJ5IHNob3VsZCBiZSBwcm9wZXJseSBlc2NhcGVkLgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBUaGUgTXlTUUwgY29ubmVjdGlvbi4gSWYgdGhlCiAqIGxpbmsgaWRlbnRpZmllciBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgbGFzdCBsaW5rIG9wZW5lZCBieQogKiBteXNxbF9jb25uZWN0IGlzIGFzc3VtZWQuIElmIG5vIHN1Y2ggbGluayBpcyBmb3VuZCwgaXQKICogd2lsbCB0cnkgdG8gY3JlYXRlIG9uZSBhcyBpZiBteXNxbF9jb25uZWN0IGhhZCBiZWVuIGNhbGxlZAogKiB3aXRoIG5vIGFyZ3VtZW50cy4gSWYgbm8gY29ubmVjdGlvbiBpcyBmb3VuZCBvciBlc3RhYmxpc2hlZCwgYW4KICogRV9XQVJOSU5HIGxldmVsIGVycm9yIGlzIGdlbmVyYXRlZC4KICogQHJldHVybiByZXNvdXJjZXxib29sIFJldHVybnMgYSBwb3NpdGl2ZSBNeVNRTCByZXN1bHQgcmVzb3VyY2UgdG8gdGhlIHF1ZXJ5IHJlc3VsdC4gVGhlIGZ1bmN0aW9uIGFsc28gcmV0dXJucyBUUlVFL0ZBTFNFIGZvcgogKiBJTlNFUlQvVVBEQVRFL0RFTEVURQogKiBxdWVyaWVzIHRvIGluZGljYXRlIHN1Y2Nlc3MvZmFpbHVyZS4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfZGJfcXVlcnkoc3RyaW5nICRkYXRhYmFzZSwgc3RyaW5nICRxdWVyeSwgJGxpbmtfaWRlbnRpZmllciA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXlzcWxfZGJfcXVlcnkoJGRhdGFiYXNlLCAkcXVlcnksICRsaW5rX2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXlzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogbXlzcWxfZHJvcF9kYiBhdHRlbXB0cyB0byBkcm9wIChyZW1vdmUpIGFuCiAqIGVudGlyZSBkYXRhYmFzZSBmcm9tIHRoZSBzZXJ2ZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQKICogbGluayBpZGVudGlmaWVyLiBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQsIGl0IGlzIHByZWZlcmFibGUgdG8gdXNlCiAqIG15c3FsX3F1ZXJ5IHRvIGlzc3VlIGFuIHNxbAogKiBEUk9QIERBVEFCQVNFIHN0YXRlbWVudCBpbnN0ZWFkLgogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhYmFzZV9uYW1lIFRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZSB0aGF0IHdpbGwgYmUgZGVsZXRlZC4KICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgVGhlIE15U1FMIGNvbm5lY3Rpb24uIElmIHRoZQogKiBsaW5rIGlkZW50aWZpZXIgaXMgbm90IHNwZWNpZmllZCwgdGhlIGxhc3QgbGluayBvcGVuZWQgYnkKICogbXlzcWxfY29ubmVjdCBpcyBhc3N1bWVkLiBJZiBubyBzdWNoIGxpbmsgaXMgZm91bmQsIGl0CiAqIHdpbGwgdHJ5IHRvIGNyZWF0ZSBvbmUgYXMgaWYgbXlzcWxfY29ubmVjdCBoYWQgYmVlbiBjYWxsZWQKICogd2l0aCBubyBhcmd1bWVudHMuIElmIG5vIGNvbm5lY3Rpb24gaXMgZm91bmQgb3IgZXN0YWJsaXNoZWQsIGFuCiAqIEVfV0FSTklORyBsZXZlbCBlcnJvciBpcyBnZW5lcmF0ZWQuCiAqIEB0aHJvd3MgTXlzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG15c3FsX2Ryb3BfZGIoc3RyaW5nICRkYXRhYmFzZV9uYW1lLCAkbGlua19pZGVudGlmaWVyID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxteXNxbF9kcm9wX2RiKCRkYXRhYmFzZV9uYW1lLCAkbGlua19pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE15c3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBSZXR1cm5zIGFuIGFycmF5IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGxlbmd0aHMgb2YgZWFjaCBmaWVsZAogKiBpbiB0aGUgbGFzdCByb3cgZmV0Y2hlZCBieSBNeVNRTC4KICoKICogbXlzcWxfZmV0Y2hfbGVuZ3RocyBzdG9yZXMgdGhlIGxlbmd0aHMgb2YKICogZWFjaCByZXN1bHQgY29sdW1uIGluIHRoZSBsYXN0IHJvdyByZXR1cm5lZCBieQogKiBteXNxbF9mZXRjaF9yb3csCiAqIG15c3FsX2ZldGNoX2Fzc29jLAogKiBteXNxbF9mZXRjaF9hcnJheSwgYW5kCiAqIG15c3FsX2ZldGNoX29iamVjdCBpbiBhbiBhcnJheSwgc3RhcnRpbmcgYXQKICogb2Zmc2V0IDAuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IFRoZSByZXN1bHQgcmVzb3VyY2UgdGhhdAogKiBpcyBiZWluZyBldmFsdWF0ZWQuIFRoaXMgcmVzdWx0IGNvbWVzIGZyb20gYSBjYWxsIHRvCiAqIG15c3FsX3F1ZXJ5LgogKiBAcmV0dXJuIGFycmF5IEFuIGFycmF5IG9mIGxlbmd0aHMgb24gc3VjY2Vzcy4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfZmV0Y2hfbGVuZ3RocygkcmVzdWx0KTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxteXNxbF9mZXRjaF9sZW5ndGhzKCRyZXN1bHQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXlzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogbXlzcWxfZmllbGRfZmxhZ3MgcmV0dXJucyB0aGUgZmllbGQgZmxhZ3Mgb2YKICogdGhlIHNwZWNpZmllZCBmaWVsZC4gVGhlIGZsYWdzIGFyZSByZXBvcnRlZCBhcyBhIHNpbmdsZSB3b3JkCiAqIHBlciBmbGFnIHNlcGFyYXRlZCBieSBhIHNpbmdsZSBzcGFjZSwgc28gdGhhdCB5b3UgY2FuIHNwbGl0IHRoZQogKiByZXR1cm5lZCB2YWx1ZSB1c2luZyBleHBsb2RlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBUaGUgcmVzdWx0IHJlc291cmNlIHRoYXQKICogaXMgYmVpbmcgZXZhbHVhdGVkLiBUaGlzIHJlc3VsdCBjb21lcyBmcm9tIGEgY2FsbCB0bwogKiBteXNxbF9xdWVyeS4KICogQHBhcmFtIGludCAkZmllbGRfb2Zmc2V0IFRoZSBudW1lcmljYWwgZmllbGQgb2Zmc2V0LiBUaGUKICogZmllbGRfb2Zmc2V0IHN0YXJ0cyBhdCAwLiBJZgogKiBmaWVsZF9vZmZzZXQgZG9lcyBub3QgZXhpc3QsIGFuIGVycm9yIG9mIGxldmVsCiAqIEVfV0FSTklORyBpcyBhbHNvIGlzc3VlZC4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBhIHN0cmluZyBvZiBmbGFncyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc3VsdC4KICoKICogVGhlIGZvbGxvd2luZyBmbGFncyBhcmUgcmVwb3J0ZWQsIGlmIHlvdXIgdmVyc2lvbiBvZiBNeVNRTAogKiBpcyBjdXJyZW50IGVub3VnaCB0byBzdXBwb3J0IHRoZW06ICJub3RfbnVsbCIsCiAqICJwcmltYXJ5X2tleSIsICJ1bmlxdWVfa2V5IiwKICogIm11bHRpcGxlX2tleSIsICJibG9iIiwKICogInVuc2lnbmVkIiwgInplcm9maWxsIiwKICogImJpbmFyeSIsICJlbnVtIiwKICogImF1dG9faW5jcmVtZW50IiBhbmQgInRpbWVzdGFtcCIuCiAqIEB0aHJvd3MgTXlzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG15c3FsX2ZpZWxkX2ZsYWdzKCRyZXN1bHQsIGludCAkZmllbGRfb2Zmc2V0KTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXlzcWxfZmllbGRfZmxhZ3MoJHJlc3VsdCwgJGZpZWxkX29mZnNldCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNeXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBteXNxbF9maWVsZF9sZW4gcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZQogKiBzcGVjaWZpZWQgZmllbGQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IFRoZSByZXN1bHQgcmVzb3VyY2UgdGhhdAogKiBpcyBiZWluZyBldmFsdWF0ZWQuIFRoaXMgcmVzdWx0IGNvbWVzIGZyb20gYSBjYWxsIHRvCiAqIG15c3FsX3F1ZXJ5LgogKiBAcGFyYW0gaW50ICRmaWVsZF9vZmZzZXQgVGhlIG51bWVyaWNhbCBmaWVsZCBvZmZzZXQuIFRoZQogKiBmaWVsZF9vZmZzZXQgc3RhcnRzIGF0IDAuIElmCiAqIGZpZWxkX29mZnNldCBkb2VzIG5vdCBleGlzdCwgYW4gZXJyb3Igb2YgbGV2ZWwKICogRV9XQVJOSU5HIGlzIGFsc28gaXNzdWVkLgogKiBAcmV0dXJuIGludCBUaGUgbGVuZ3RoIG9mIHRoZSBzcGVjaWZpZWQgZmllbGQgaW5kZXggb24gc3VjY2Vzcy4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfZmllbGRfbGVuKCRyZXN1bHQsIGludCAkZmllbGRfb2Zmc2V0KTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXlzcWxfZmllbGRfbGVuKCRyZXN1bHQsICRmaWVsZF9vZmZzZXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXlzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogbXlzcWxfZmllbGRfbmFtZSByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZQogKiBzcGVjaWZpZWQgZmllbGQgaW5kZXguCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IFRoZSByZXN1bHQgcmVzb3VyY2UgdGhhdAogKiBpcyBiZWluZyBldmFsdWF0ZWQuIFRoaXMgcmVzdWx0IGNvbWVzIGZyb20gYSBjYWxsIHRvCiAqIG15c3FsX3F1ZXJ5LgogKiBAcGFyYW0gaW50ICRmaWVsZF9vZmZzZXQgVGhlIG51bWVyaWNhbCBmaWVsZCBvZmZzZXQuIFRoZQogKiBmaWVsZF9vZmZzZXQgc3RhcnRzIGF0IDAuIElmCiAqIGZpZWxkX29mZnNldCBkb2VzIG5vdCBleGlzdCwgYW4gZXJyb3Igb2YgbGV2ZWwKICogRV9XQVJOSU5HIGlzIGFsc28gaXNzdWVkLgogKiBAcmV0dXJuIHN0cmluZyBUaGUgbmFtZSBvZiB0aGUgc3BlY2lmaWVkIGZpZWxkIGluZGV4IG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgTXlzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG15c3FsX2ZpZWxkX25hbWUoJHJlc3VsdCwgaW50ICRmaWVsZF9vZmZzZXQpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxteXNxbF9maWVsZF9uYW1lKCRyZXN1bHQsICRmaWVsZF9vZmZzZXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXlzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogU2Vla3MgdG8gdGhlIHNwZWNpZmllZCBmaWVsZCBvZmZzZXQuICBJZiB0aGUgbmV4dCBjYWxsIHRvCiAqIG15c3FsX2ZldGNoX2ZpZWxkIGRvZXNuJ3QgaW5jbHVkZSBhIGZpZWxkCiAqIG9mZnNldCwgdGhlIGZpZWxkIG9mZnNldCBzcGVjaWZpZWQgaW4KICogbXlzcWxfZmllbGRfc2VlayB3aWxsIGJlIHJldHVybmVkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBUaGUgcmVzdWx0IHJlc291cmNlIHRoYXQKICogaXMgYmVpbmcgZXZhbHVhdGVkLiBUaGlzIHJlc3VsdCBjb21lcyBmcm9tIGEgY2FsbCB0bwogKiBteXNxbF9xdWVyeS4KICogQHBhcmFtIGludCAkZmllbGRfb2Zmc2V0IFRoZSBudW1lcmljYWwgZmllbGQgb2Zmc2V0LiBUaGUKICogZmllbGRfb2Zmc2V0IHN0YXJ0cyBhdCAwLiBJZgogKiBmaWVsZF9vZmZzZXQgZG9lcyBub3QgZXhpc3QsIGFuIGVycm9yIG9mIGxldmVsCiAqIEVfV0FSTklORyBpcyBhbHNvIGlzc3VlZC4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfZmllbGRfc2VlaygkcmVzdWx0LCBpbnQgJGZpZWxkX29mZnNldCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxteXNxbF9maWVsZF9zZWVrKCRyZXN1bHQsICRmaWVsZF9vZmZzZXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXlzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIG15c3FsX2ZyZWVfcmVzdWx0IHdpbGwgZnJlZSBhbGwgbWVtb3J5CiAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzdWx0IGlkZW50aWZpZXIgcmVzdWx0LgogKgogKiBteXNxbF9mcmVlX3Jlc3VsdCBvbmx5IG5lZWRzIHRvIGJlIGNhbGxlZCBpZgogKiB5b3UgYXJlIGNvbmNlcm5lZCBhYm91dCBob3cgbXVjaCBtZW1vcnkgaXMgYmVpbmcgdXNlZCBmb3IgcXVlcmllcwogKiB0aGF0IHJldHVybiBsYXJnZSByZXN1bHQgc2V0cy4gIEFsbCBhc3NvY2lhdGVkIHJlc3VsdCBtZW1vcnkgaXMKICogYXV0b21hdGljYWxseSBmcmVlZCBhdCB0aGUgZW5kIG9mIHRoZSBzY3JpcHQncyBleGVjdXRpb24uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IFRoZSByZXN1bHQgcmVzb3VyY2UgdGhhdAogKiBpcyBiZWluZyBldmFsdWF0ZWQuIFRoaXMgcmVzdWx0IGNvbWVzIGZyb20gYSBjYWxsIHRvCiAqIG15c3FsX3F1ZXJ5LgogKiBAdGhyb3dzIE15c3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXlzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERlc2NyaWJlcyB0aGUgdHlwZSBvZiBjb25uZWN0aW9uIGluIHVzZSBmb3IgdGhlIGNvbm5lY3Rpb24sIGluY2x1ZGluZyB0aGUKICogc2VydmVyIGhvc3QgbmFtZS4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgVGhlIE15U1FMIGNvbm5lY3Rpb24uIElmIHRoZQogKiBsaW5rIGlkZW50aWZpZXIgaXMgbm90IHNwZWNpZmllZCwgdGhlIGxhc3QgbGluayBvcGVuZWQgYnkKICogbXlzcWxfY29ubmVjdCBpcyBhc3N1bWVkLiBJZiBubyBzdWNoIGxpbmsgaXMgZm91bmQsIGl0CiAqIHdpbGwgdHJ5IHRvIGNyZWF0ZSBvbmUgYXMgaWYgbXlzcWxfY29ubmVjdCBoYWQgYmVlbiBjYWxsZWQKICogd2l0aCBubyBhcmd1bWVudHMuIElmIG5vIGNvbm5lY3Rpb24gaXMgZm91bmQgb3IgZXN0YWJsaXNoZWQsIGFuCiAqIEVfV0FSTklORyBsZXZlbCBlcnJvciBpcyBnZW5lcmF0ZWQuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiBNeVNRTCBjb25uZWN0aW9uIGluIHVzZSBmb3IgdGhlCiAqIGNvbm5lY3Rpb24uCiAqIEB0aHJvd3MgTXlzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG15c3FsX2dldF9ob3N0X2luZm8oJGxpbmtfaWRlbnRpZmllciA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxteXNxbF9nZXRfaG9zdF9pbmZvKCRsaW5rX2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXlzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0cmlldmVzIHRoZSBNeVNRTCBwcm90b2NvbC4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgVGhlIE15U1FMIGNvbm5lY3Rpb24uIElmIHRoZQogKiBsaW5rIGlkZW50aWZpZXIgaXMgbm90IHNwZWNpZmllZCwgdGhlIGxhc3QgbGluayBvcGVuZWQgYnkKICogbXlzcWxfY29ubmVjdCBpcyBhc3N1bWVkLiBJZiBubyBzdWNoIGxpbmsgaXMgZm91bmQsIGl0CiAqIHdpbGwgdHJ5IHRvIGNyZWF0ZSBvbmUgYXMgaWYgbXlzcWxfY29ubmVjdCBoYWQgYmVlbiBjYWxsZWQKICogd2l0aCBubyBhcmd1bWVudHMuIElmIG5vIGNvbm5lY3Rpb24gaXMgZm91bmQgb3IgZXN0YWJsaXNoZWQsIGFuCiAqIEVfV0FSTklORyBsZXZlbCBlcnJvciBpcyBnZW5lcmF0ZWQuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIE15U1FMIHByb3RvY29sIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgTXlzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG15c3FsX2dldF9wcm90b19pbmZvKCRsaW5rX2lkZW50aWZpZXIgPSBudWxsKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXlzcWxfZ2V0X3Byb3RvX2luZm8oJGxpbmtfaWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNeXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXRyaWV2ZXMgdGhlIE15U1FMIHNlcnZlciB2ZXJzaW9uLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBUaGUgTXlTUUwgY29ubmVjdGlvbi4gSWYgdGhlCiAqIGxpbmsgaWRlbnRpZmllciBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgbGFzdCBsaW5rIG9wZW5lZCBieQogKiBteXNxbF9jb25uZWN0IGlzIGFzc3VtZWQuIElmIG5vIHN1Y2ggbGluayBpcyBmb3VuZCwgaXQKICogd2lsbCB0cnkgdG8gY3JlYXRlIG9uZSBhcyBpZiBteXNxbF9jb25uZWN0IGhhZCBiZWVuIGNhbGxlZAogKiB3aXRoIG5vIGFyZ3VtZW50cy4gSWYgbm8gY29ubmVjdGlvbiBpcyBmb3VuZCBvciBlc3RhYmxpc2hlZCwgYW4KICogRV9XQVJOSU5HIGxldmVsIGVycm9yIGlzIGdlbmVyYXRlZC4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgTXlTUUwgc2VydmVyIHZlcnNpb24gb24gc3VjY2Vzcy4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfZ2V0X3NlcnZlcl9pbmZvKCRsaW5rX2lkZW50aWZpZXIgPSBudWxsKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXlzcWxfZ2V0X3NlcnZlcl9pbmZvKCRsaW5rX2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXlzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0dXJucyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGFzdCBxdWVyeS4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgVGhlIE15U1FMIGNvbm5lY3Rpb24uIElmIHRoZQogKiBsaW5rIGlkZW50aWZpZXIgaXMgbm90IHNwZWNpZmllZCwgdGhlIGxhc3QgbGluayBvcGVuZWQgYnkKICogbXlzcWxfY29ubmVjdCBpcyBhc3N1bWVkLiBJZiBubyBzdWNoIGxpbmsgaXMgZm91bmQsIGl0CiAqIHdpbGwgdHJ5IHRvIGNyZWF0ZSBvbmUgYXMgaWYgbXlzcWxfY29ubmVjdCBoYWQgYmVlbiBjYWxsZWQKICogd2l0aCBubyBhcmd1bWVudHMuIElmIG5vIGNvbm5lY3Rpb24gaXMgZm91bmQgb3IgZXN0YWJsaXNoZWQsIGFuCiAqIEVfV0FSTklORyBsZXZlbCBlcnJvciBpcyBnZW5lcmF0ZWQuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXRlbWVudCBvbiBzdWNjZXNzLiBTZWUgdGhlIGV4YW1wbGUgYmVsb3cgZm9yIHdoaWNoIHN0YXRlbWVudHMgcHJvdmlkZSBpbmZvcm1hdGlvbiwKICogYW5kIHdoYXQgdGhlIHJldHVybmVkIHZhbHVlIG1heSBsb29rIGxpa2UuIFN0YXRlbWVudHMgdGhhdCBhcmUgbm90IGxpc3RlZAogKiB3aWxsIHJldHVybiBGQUxTRS4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfaW5mbygkbGlua19pZGVudGlmaWVyID0gbnVsbCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG15c3FsX2luZm8oJGxpbmtfaWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNeXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIGEgcmVzdWx0IHBvaW50ZXIgY29udGFpbmluZyB0aGUgZGF0YWJhc2VzIGF2YWlsYWJsZSBmcm9tIHRoZQogKiBjdXJyZW50IG15c3FsIGRhZW1vbi4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgVGhlIE15U1FMIGNvbm5lY3Rpb24uIElmIHRoZQogKiBsaW5rIGlkZW50aWZpZXIgaXMgbm90IHNwZWNpZmllZCwgdGhlIGxhc3QgbGluayBvcGVuZWQgYnkKICogbXlzcWxfY29ubmVjdCBpcyBhc3N1bWVkLiBJZiBubyBzdWNoIGxpbmsgaXMgZm91bmQsIGl0CiAqIHdpbGwgdHJ5IHRvIGNyZWF0ZSBvbmUgYXMgaWYgbXlzcWxfY29ubmVjdCBoYWQgYmVlbiBjYWxsZWQKICogd2l0aCBubyBhcmd1bWVudHMuIElmIG5vIGNvbm5lY3Rpb24gaXMgZm91bmQgb3IgZXN0YWJsaXNoZWQsIGFuCiAqIEVfV0FSTklORyBsZXZlbCBlcnJvciBpcyBnZW5lcmF0ZWQuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhIHJlc3VsdCBwb2ludGVyIHJlc291cmNlIG9uIHN1Y2Nlc3MuIFVzZSB0aGUgbXlzcWxfdGFibGVuYW1lIGZ1bmN0aW9uIHRvIHRyYXZlcnNlCiAqIHRoaXMgcmVzdWx0IHBvaW50ZXIsIG9yIGFueSBmdW5jdGlvbiBmb3IgcmVzdWx0IHRhYmxlcywgc3VjaCBhcwogKiBteXNxbF9mZXRjaF9hcnJheS4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfbGlzdF9kYnMoJGxpbmtfaWRlbnRpZmllciA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXlzcWxfbGlzdF9kYnMoJGxpbmtfaWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNeXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXRyaWV2ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGdpdmVuIHRhYmxlIG5hbWUuCiAqCiAqIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZC4gSXQgaXMgcHJlZmVyYWJsZSB0byB1c2UKICogbXlzcWxfcXVlcnkgdG8gaXNzdWUgYW4gU1FMIFNIT1cgQ09MVU1OUyBGUk9NCiAqIHRhYmxlIFtMSUtFICduYW1lJ10gc3RhdGVtZW50IGluc3RlYWQuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGFiYXNlX25hbWUgVGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlIHRoYXQncyBiZWluZyBxdWVyaWVkLgogKiBAcGFyYW0gc3RyaW5nICR0YWJsZV9uYW1lIFRoZSBuYW1lIG9mIHRoZSB0YWJsZSB0aGF0J3MgYmVpbmcgcXVlcmllZC4KICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgVGhlIE15U1FMIGNvbm5lY3Rpb24uIElmIHRoZQogKiBsaW5rIGlkZW50aWZpZXIgaXMgbm90IHNwZWNpZmllZCwgdGhlIGxhc3QgbGluayBvcGVuZWQgYnkKICogbXlzcWxfY29ubmVjdCBpcyBhc3N1bWVkLiBJZiBubyBzdWNoIGxpbmsgaXMgZm91bmQsIGl0CiAqIHdpbGwgdHJ5IHRvIGNyZWF0ZSBvbmUgYXMgaWYgbXlzcWxfY29ubmVjdCBoYWQgYmVlbiBjYWxsZWQKICogd2l0aCBubyBhcmd1bWVudHMuIElmIG5vIGNvbm5lY3Rpb24gaXMgZm91bmQgb3IgZXN0YWJsaXNoZWQsIGFuCiAqIEVfV0FSTklORyBsZXZlbCBlcnJvciBpcyBnZW5lcmF0ZWQuCiAqIEByZXR1cm4gcmVzb3VyY2UgQSByZXN1bHQgcG9pbnRlciByZXNvdXJjZSBvbiBzdWNjZXNzLgogKgogKiBUaGUgcmV0dXJuZWQgcmVzdWx0IGNhbiBiZSB1c2VkIHdpdGggbXlzcWxfZmllbGRfZmxhZ3MsCiAqIG15c3FsX2ZpZWxkX2xlbiwKICogbXlzcWxfZmllbGRfbmFtZSBhbmQKICogbXlzcWxfZmllbGRfdHlwZS4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfbGlzdF9maWVsZHMoc3RyaW5nICRkYXRhYmFzZV9uYW1lLCBzdHJpbmcgJHRhYmxlX25hbWUsICRsaW5rX2lkZW50aWZpZXIgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG15c3FsX2xpc3RfZmllbGRzKCRkYXRhYmFzZV9uYW1lLCAkdGFibGVfbmFtZSwgJGxpbmtfaWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNeXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgTXlTUUwgc2VydmVyIHRocmVhZHMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIFRoZSBNeVNRTCBjb25uZWN0aW9uLiBJZiB0aGUKICogbGluayBpZGVudGlmaWVyIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXN0IGxpbmsgb3BlbmVkIGJ5CiAqIG15c3FsX2Nvbm5lY3QgaXMgYXNzdW1lZC4gSWYgbm8gc3VjaCBsaW5rIGlzIGZvdW5kLCBpdAogKiB3aWxsIHRyeSB0byBjcmVhdGUgb25lIGFzIGlmIG15c3FsX2Nvbm5lY3QgaGFkIGJlZW4gY2FsbGVkCiAqIHdpdGggbm8gYXJndW1lbnRzLiBJZiBubyBjb25uZWN0aW9uIGlzIGZvdW5kIG9yIGVzdGFibGlzaGVkLCBhbgogKiBFX1dBUk5JTkcgbGV2ZWwgZXJyb3IgaXMgZ2VuZXJhdGVkLgogKiBAcmV0dXJuIHJlc291cmNlIEEgcmVzdWx0IHBvaW50ZXIgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfbGlzdF9wcm9jZXNzZXMoJGxpbmtfaWRlbnRpZmllciA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXlzcWxfbGlzdF9wcm9jZXNzZXMoJGxpbmtfaWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNeXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXRyaWV2ZXMgYSBsaXN0IG9mIHRhYmxlIG5hbWVzIGZyb20gYSBNeVNRTCBkYXRhYmFzZS4KICoKICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLiBJdCBpcyBwcmVmZXJhYmxlIHRvIHVzZQogKiBteXNxbF9xdWVyeSB0byBpc3N1ZSBhbiBTUUwgU0hPVyBUQUJMRVMKICogW0ZST00gZGJfbmFtZV0gW0xJS0UgJ3BhdHRlcm4nXSBzdGF0ZW1lbnQgaW5zdGVhZC4KICoKICogQHBhcmFtIHN0cmluZyAkZGF0YWJhc2UgVGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIFRoZSBNeVNRTCBjb25uZWN0aW9uLiBJZiB0aGUKICogbGluayBpZGVudGlmaWVyIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXN0IGxpbmsgb3BlbmVkIGJ5CiAqIG15c3FsX2Nvbm5lY3QgaXMgYXNzdW1lZC4gSWYgbm8gc3VjaCBsaW5rIGlzIGZvdW5kLCBpdAogKiB3aWxsIHRyeSB0byBjcmVhdGUgb25lIGFzIGlmIG15c3FsX2Nvbm5lY3QgaGFkIGJlZW4gY2FsbGVkCiAqIHdpdGggbm8gYXJndW1lbnRzLiBJZiBubyBjb25uZWN0aW9uIGlzIGZvdW5kIG9yIGVzdGFibGlzaGVkLCBhbgogKiBFX1dBUk5JTkcgbGV2ZWwgZXJyb3IgaXMgZ2VuZXJhdGVkLgogKiBAcmV0dXJuIHJlc291cmNlIEEgcmVzdWx0IHBvaW50ZXIgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICoKICogVXNlIHRoZSBteXNxbF90YWJsZW5hbWUgZnVuY3Rpb24gdG8KICogdHJhdmVyc2UgdGhpcyByZXN1bHQgcG9pbnRlciwgb3IgYW55IGZ1bmN0aW9uIGZvciByZXN1bHQgdGFibGVzLAogKiBzdWNoIGFzIG15c3FsX2ZldGNoX2FycmF5LgogKiBAdGhyb3dzIE15c3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBteXNxbF9saXN0X3RhYmxlcyhzdHJpbmcgJGRhdGFiYXNlLCAkbGlua19pZGVudGlmaWVyID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxteXNxbF9saXN0X3RhYmxlcygkZGF0YWJhc2UsICRsaW5rX2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXlzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0cmlldmVzIHRoZSBudW1iZXIgb2YgZmllbGRzIGZyb20gYSBxdWVyeS4KICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgVGhlIHJlc3VsdCByZXNvdXJjZSB0aGF0CiAqIGlzIGJlaW5nIGV2YWx1YXRlZC4gVGhpcyByZXN1bHQgY29tZXMgZnJvbSBhIGNhbGwgdG8KICogbXlzcWxfcXVlcnkuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIG51bWJlciBvZiBmaWVsZHMgaW4gdGhlIHJlc3VsdCBzZXQgcmVzb3VyY2Ugb24KICogc3VjY2Vzcy4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE15c3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJldHJpZXZlcyB0aGUgbnVtYmVyIG9mIHJvd3MgZnJvbSBhIHJlc3VsdCBzZXQuIFRoaXMgY29tbWFuZCBpcyBvbmx5IHZhbGlkCiAqIGZvciBzdGF0ZW1lbnRzIGxpa2UgU0VMRUNUIG9yIFNIT1cgdGhhdCByZXR1cm4gYW4gYWN0dWFsIHJlc3VsdCBzZXQuCiAqIFRvIHJldHJpZXZlIHRoZSBudW1iZXIgb2Ygcm93cyBhZmZlY3RlZCBieSBhIElOU0VSVCwgVVBEQVRFLCBSRVBMQUNFIG9yCiAqIERFTEVURSBxdWVyeSwgdXNlIG15c3FsX2FmZmVjdGVkX3Jvd3MuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IFRoZSByZXN1bHQgcmVzb3VyY2UgdGhhdAogKiBpcyBiZWluZyBldmFsdWF0ZWQuIFRoaXMgcmVzdWx0IGNvbWVzIGZyb20gYSBjYWxsIHRvCiAqIG15c3FsX3F1ZXJ5LgogKiBAcmV0dXJuIGludCBUaGUgbnVtYmVyIG9mIHJvd3MgaW4gYSByZXN1bHQgc2V0IG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgTXlzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG15c3FsX251bV9yb3dzKCRyZXN1bHQpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxteXNxbF9udW1fcm93cygkcmVzdWx0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE15c3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIG15c3FsX3F1ZXJ5IHNlbmRzIGEgdW5pcXVlIHF1ZXJ5IChtdWx0aXBsZSBxdWVyaWVzCiAqIGFyZSBub3Qgc3VwcG9ydGVkKSB0byB0aGUgY3VycmVudGx5CiAqIGFjdGl2ZSBkYXRhYmFzZSBvbiB0aGUgc2VydmVyIHRoYXQncyBhc3NvY2lhdGVkIHdpdGggdGhlCiAqIHNwZWNpZmllZCBsaW5rX2lkZW50aWZpZXIuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHF1ZXJ5IEFuIFNRTCBxdWVyeQogKgogKiBUaGUgcXVlcnkgc3RyaW5nIHNob3VsZCBub3QgZW5kIHdpdGggYSBzZW1pY29sb24uCiAqIERhdGEgaW5zaWRlIHRoZSBxdWVyeSBzaG91bGQgYmUgcHJvcGVybHkgZXNjYXBlZC4KICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgVGhlIE15U1FMIGNvbm5lY3Rpb24uIElmIHRoZQogKiBsaW5rIGlkZW50aWZpZXIgaXMgbm90IHNwZWNpZmllZCwgdGhlIGxhc3QgbGluayBvcGVuZWQgYnkKICogbXlzcWxfY29ubmVjdCBpcyBhc3N1bWVkLiBJZiBubyBzdWNoIGxpbmsgaXMgZm91bmQsIGl0CiAqIHdpbGwgdHJ5IHRvIGNyZWF0ZSBvbmUgYXMgaWYgbXlzcWxfY29ubmVjdCBoYWQgYmVlbiBjYWxsZWQKICogd2l0aCBubyBhcmd1bWVudHMuIElmIG5vIGNvbm5lY3Rpb24gaXMgZm91bmQgb3IgZXN0YWJsaXNoZWQsIGFuCiAqIEVfV0FSTklORyBsZXZlbCBlcnJvciBpcyBnZW5lcmF0ZWQuCiAqIEByZXR1cm4gcmVzb3VyY2V8Ym9vbCBGb3IgU0VMRUNULCBTSE9XLCBERVNDUklCRSwgRVhQTEFJTiBhbmQgb3RoZXIgc3RhdGVtZW50cyByZXR1cm5pbmcgcmVzdWx0c2V0LAogKiBteXNxbF9xdWVyeQogKiByZXR1cm5zIGEgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICoKICogRm9yIG90aGVyIHR5cGUgb2YgU1FMIHN0YXRlbWVudHMsIElOU0VSVCwgVVBEQVRFLCBERUxFVEUsIERST1AsIGV0YywKICogbXlzcWxfcXVlcnkgcmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIFRoZSByZXR1cm5lZCByZXN1bHQgcmVzb3VyY2Ugc2hvdWxkIGJlIHBhc3NlZCB0bwogKiBteXNxbF9mZXRjaF9hcnJheSwgYW5kIG90aGVyCiAqIGZ1bmN0aW9ucyBmb3IgZGVhbGluZyB3aXRoIHJlc3VsdCB0YWJsZXMsIHRvIGFjY2VzcyB0aGUgcmV0dXJuZWQgZGF0YS4KICoKICogVXNlIG15c3FsX251bV9yb3dzIHRvIGZpbmQgb3V0IGhvdyBtYW55IHJvd3MKICogd2VyZSByZXR1cm5lZCBmb3IgYSBTRUxFQ1Qgc3RhdGVtZW50IG9yCiAqIG15c3FsX2FmZmVjdGVkX3Jvd3MgdG8gZmluZCBvdXQgaG93IG1hbnkKICogcm93cyB3ZXJlIGFmZmVjdGVkIGJ5IGEgREVMRVRFLCBJTlNFUlQsIFJFUExBQ0UsIG9yIFVQREFURQogKiBzdGF0ZW1lbnQuCiAqCiAqIG15c3FsX3F1ZXJ5IHdpbGwgYWxzbyBmYWlsIGFuZCByZXR1cm4gRkFMU0UKICogaWYgdGhlIHVzZXIgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgdGFibGUocykgcmVmZXJlbmNlZCBieQogKiB0aGUgcXVlcnkuCiAqIEB0aHJvd3MgTXlzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG15c3FsX3F1ZXJ5KHN0cmluZyAkcXVlcnksICRsaW5rX2lkZW50aWZpZXIgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG15c3FsX3F1ZXJ5KCRxdWVyeSwgJGxpbmtfaWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNeXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBFc2NhcGVzIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgdW5lc2NhcGVkX3N0cmluZywKICogdGFraW5nIGludG8gYWNjb3VudCB0aGUgY3VycmVudCBjaGFyYWN0ZXIgc2V0IG9mIHRoZSBjb25uZWN0aW9uIHNvIHRoYXQgaXQKICogaXMgc2FmZSB0byBwbGFjZSBpdCBpbiBhIG15c3FsX3F1ZXJ5LiBJZiBiaW5hcnkgZGF0YQogKiBpcyB0byBiZSBpbnNlcnRlZCwgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIHVzZWQuCiAqCiAqIG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZyBjYWxscyBNeVNRTCdzIGxpYnJhcnkgZnVuY3Rpb24KICogbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nLCB3aGljaCBwcmVwZW5kcyBiYWNrc2xhc2hlcyB0byB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6CiAqIFx4MDAsIFxuLAogKiBcciwgXCwgJywKICogIiBhbmQgXHgxYS4KICoKICogVGhpcyBmdW5jdGlvbiBtdXN0IGFsd2F5cyAod2l0aCBmZXcgZXhjZXB0aW9ucykgYmUgdXNlZCB0byBtYWtlIGRhdGEKICogc2FmZSBiZWZvcmUgc2VuZGluZyBhIHF1ZXJ5IHRvIE15U1FMLgogKgogKiBAcGFyYW0gc3RyaW5nICR1bmVzY2FwZWRfc3RyaW5nIFRoZSBzdHJpbmcgdGhhdCBpcyB0byBiZSBlc2NhcGVkLgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBUaGUgTXlTUUwgY29ubmVjdGlvbi4gSWYgdGhlCiAqIGxpbmsgaWRlbnRpZmllciBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgbGFzdCBsaW5rIG9wZW5lZCBieQogKiBteXNxbF9jb25uZWN0IGlzIGFzc3VtZWQuIElmIG5vIHN1Y2ggbGluayBpcyBmb3VuZCwgaXQKICogd2lsbCB0cnkgdG8gY3JlYXRlIG9uZSBhcyBpZiBteXNxbF9jb25uZWN0IGhhZCBiZWVuIGNhbGxlZAogKiB3aXRoIG5vIGFyZ3VtZW50cy4gSWYgbm8gY29ubmVjdGlvbiBpcyBmb3VuZCBvciBlc3RhYmxpc2hlZCwgYW4KICogRV9XQVJOSU5HIGxldmVsIGVycm9yIGlzIGdlbmVyYXRlZC4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgZXNjYXBlZCBzdHJpbmcuCiAqIEB0aHJvd3MgTXlzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZyhzdHJpbmcgJHVuZXNjYXBlZF9zdHJpbmcsICRsaW5rX2lkZW50aWZpZXIgPSBudWxsKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR1bmVzY2FwZWRfc3RyaW5nLCAkbGlua19pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE15c3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJldHJpZXZlcyB0aGUgY29udGVudHMgb2Ygb25lIGNlbGwgZnJvbSBhIE15U1FMIHJlc3VsdCBzZXQuCiAqCiAqIFdoZW4gd29ya2luZyBvbiBsYXJnZSByZXN1bHQgc2V0cywgeW91IHNob3VsZCBjb25zaWRlciB1c2luZyBvbmUKICogb2YgdGhlIGZ1bmN0aW9ucyB0aGF0IGZldGNoIGFuIGVudGlyZSByb3cgKHNwZWNpZmllZCBiZWxvdykuICBBcwogKiB0aGVzZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBjb250ZW50cyBvZiBtdWx0aXBsZSBjZWxscyBpbiBvbmUKICogZnVuY3Rpb24gY2FsbCwgdGhleSdyZSBNVUNIIHF1aWNrZXIgdGhhbgogKiBteXNxbF9yZXN1bHQuICBBbHNvLCBub3RlIHRoYXQgc3BlY2lmeWluZyBhCiAqIG51bWVyaWMgb2Zmc2V0IGZvciB0aGUgZmllbGQgYXJndW1lbnQgaXMgbXVjaCBxdWlja2VyIHRoYW4KICogc3BlY2lmeWluZyBhIGZpZWxkbmFtZSBvciB0YWJsZW5hbWUuZmllbGRuYW1lIGFyZ3VtZW50LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBUaGUgcmVzdWx0IHJlc291cmNlIHRoYXQKICogaXMgYmVpbmcgZXZhbHVhdGVkLiBUaGlzIHJlc3VsdCBjb21lcyBmcm9tIGEgY2FsbCB0bwogKiBteXNxbF9xdWVyeS4KICogQHBhcmFtIGludCAkcm93IFRoZSByb3cgbnVtYmVyIGZyb20gdGhlIHJlc3VsdCB0aGF0J3MgYmVpbmcgcmV0cmlldmVkLiBSb3cgbnVtYmVycwogKiBzdGFydCBhdCAwLgogKiBAcGFyYW0gbWl4ZWQgJGZpZWxkIFRoZSBuYW1lIG9yIG9mZnNldCBvZiB0aGUgZmllbGQgYmVpbmcgcmV0cmlldmVkLgogKgogKiBJdCBjYW4gYmUgdGhlIGZpZWxkJ3Mgb2Zmc2V0LCB0aGUgZmllbGQncyBuYW1lLCBvciB0aGUgZmllbGQncyB0YWJsZQogKiBkb3QgZmllbGQgbmFtZSAodGFibGVuYW1lLmZpZWxkbmFtZSkuIElmIHRoZSBjb2x1bW4gbmFtZSBoYXMgYmVlbgogKiBhbGlhc2VkICgnc2VsZWN0IGZvbyBhcyBiYXIgZnJvbS4uLicpLCB1c2UgdGhlIGFsaWFzIGluc3RlYWQgb2YgdGhlCiAqIGNvbHVtbiBuYW1lLiBJZiB1bmRlZmluZWQsIHRoZSBmaXJzdCBmaWVsZCBpcyByZXRyaWV2ZWQuCiAqIEByZXR1cm4gc3RyaW5nIFRoZSBjb250ZW50cyBvZiBvbmUgY2VsbCBmcm9tIGEgTXlTUUwgcmVzdWx0IHNldCBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIE15c3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBteXNxbF9yZXN1bHQoJHJlc3VsdCwgaW50ICRyb3csICRmaWVsZCA9IDApOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxteXNxbF9yZXN1bHQoJHJlc3VsdCwgJHJvdywgJGZpZWxkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE15c3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNldHMgdGhlIGN1cnJlbnQgYWN0aXZlIGRhdGFiYXNlIG9uIHRoZSBzZXJ2ZXIgdGhhdCdzIGFzc29jaWF0ZWQgd2l0aCB0aGUKICogc3BlY2lmaWVkIGxpbmsgaWRlbnRpZmllci4gRXZlcnkgc3Vic2VxdWVudCBjYWxsIHRvCiAqIG15c3FsX3F1ZXJ5IHdpbGwgYmUgbWFkZSBvbiB0aGUgYWN0aXZlIGRhdGFiYXNlLgogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhYmFzZV9uYW1lIFRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZSB0aGF0IGlzIHRvIGJlIHNlbGVjdGVkLgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBUaGUgTXlTUUwgY29ubmVjdGlvbi4gSWYgdGhlCiAqIGxpbmsgaWRlbnRpZmllciBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgbGFzdCBsaW5rIG9wZW5lZCBieQogKiBteXNxbF9jb25uZWN0IGlzIGFzc3VtZWQuIElmIG5vIHN1Y2ggbGluayBpcyBmb3VuZCwgaXQKICogd2lsbCB0cnkgdG8gY3JlYXRlIG9uZSBhcyBpZiBteXNxbF9jb25uZWN0IGhhZCBiZWVuIGNhbGxlZAogKiB3aXRoIG5vIGFyZ3VtZW50cy4gSWYgbm8gY29ubmVjdGlvbiBpcyBmb3VuZCBvciBlc3RhYmxpc2hlZCwgYW4KICogRV9XQVJOSU5HIGxldmVsIGVycm9yIGlzIGdlbmVyYXRlZC4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfc2VsZWN0X2RiKHN0cmluZyAkZGF0YWJhc2VfbmFtZSwgJGxpbmtfaWRlbnRpZmllciA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXlzcWxfc2VsZWN0X2RiKCRkYXRhYmFzZV9uYW1lLCAkbGlua19pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE15c3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIHRoZSBkZWZhdWx0IGNoYXJhY3RlciBzZXQgZm9yIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGNoYXJzZXQgQSB2YWxpZCBjaGFyYWN0ZXIgc2V0IG5hbWUuCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIFRoZSBNeVNRTCBjb25uZWN0aW9uLiBJZiB0aGUKICogbGluayBpZGVudGlmaWVyIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXN0IGxpbmsgb3BlbmVkIGJ5CiAqIG15c3FsX2Nvbm5lY3QgaXMgYXNzdW1lZC4gSWYgbm8gc3VjaCBsaW5rIGlzIGZvdW5kLCBpdAogKiB3aWxsIHRyeSB0byBjcmVhdGUgb25lIGFzIGlmIG15c3FsX2Nvbm5lY3QgaGFkIGJlZW4gY2FsbGVkCiAqIHdpdGggbm8gYXJndW1lbnRzLiBJZiBubyBjb25uZWN0aW9uIGlzIGZvdW5kIG9yIGVzdGFibGlzaGVkLCBhbgogKiBFX1dBUk5JTkcgbGV2ZWwgZXJyb3IgaXMgZ2VuZXJhdGVkLgogKiBAdGhyb3dzIE15c3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBteXNxbF9zZXRfY2hhcnNldChzdHJpbmcgJGNoYXJzZXQsICRsaW5rX2lkZW50aWZpZXIgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG15c3FsX3NldF9jaGFyc2V0KCRjaGFyc2V0LCAkbGlua19pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE15c3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBSZXRyaWV2ZXMgdGhlIHRhYmxlIG5hbWUgZnJvbSBhIHJlc3VsdC4KICoKICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLiBJdCBpcyBwcmVmZXJhYmxlIHRvIHVzZQogKiBteXNxbF9xdWVyeSB0byBpc3N1ZSBhbiBTUUwgU0hPVyBUQUJMRVMKICogW0ZST00gZGJfbmFtZV0gW0xJS0UgJ3BhdHRlcm4nXSBzdGF0ZW1lbnQgaW5zdGVhZC4KICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgQSByZXN1bHQgcG9pbnRlciByZXNvdXJjZSB0aGF0J3MgcmV0dXJuZWQgZnJvbQogKiBteXNxbF9saXN0X3RhYmxlcy4KICogQHBhcmFtIGludCAkaSBUaGUgaW50ZWdlciBpbmRleCAocm93L3RhYmxlIG51bWJlcikKICogQHJldHVybiBzdHJpbmcgVGhlIG5hbWUgb2YgdGhlIHRhYmxlIG9uIHN1Y2Nlc3MuCiAqCiAqIFVzZSB0aGUgbXlzcWxfdGFibGVuYW1lIGZ1bmN0aW9uIHRvCiAqIHRyYXZlcnNlIHRoaXMgcmVzdWx0IHBvaW50ZXIsIG9yIGFueSBmdW5jdGlvbiBmb3IgcmVzdWx0IHRhYmxlcywKICogc3VjaCBhcyBteXNxbF9mZXRjaF9hcnJheS4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfdGFibGVuYW1lKCRyZXN1bHQsIGludCAkaSk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG15c3FsX3RhYmxlbmFtZSgkcmVzdWx0LCAkaSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNeXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgdGhyZWFkIElELiBJZiB0aGUgY29ubmVjdGlvbiBpcyBsb3N0LCBhbmQgYSByZWNvbm5lY3QKICogd2l0aCBteXNxbF9waW5nIGlzIGV4ZWN1dGVkLCB0aGUgdGhyZWFkIElEIHdpbGwKICogY2hhbmdlLiBUaGlzIG1lYW5zIG9ubHkgcmV0cmlldmUgdGhlIHRocmVhZCBJRCB3aGVuIG5lZWRlZC4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgVGhlIE15U1FMIGNvbm5lY3Rpb24uIElmIHRoZQogKiBsaW5rIGlkZW50aWZpZXIgaXMgbm90IHNwZWNpZmllZCwgdGhlIGxhc3QgbGluayBvcGVuZWQgYnkKICogbXlzcWxfY29ubmVjdCBpcyBhc3N1bWVkLiBJZiBubyBzdWNoIGxpbmsgaXMgZm91bmQsIGl0CiAqIHdpbGwgdHJ5IHRvIGNyZWF0ZSBvbmUgYXMgaWYgbXlzcWxfY29ubmVjdCBoYWQgYmVlbiBjYWxsZWQKICogd2l0aCBubyBhcmd1bWVudHMuIElmIG5vIGNvbm5lY3Rpb24gaXMgZm91bmQgb3IgZXN0YWJsaXNoZWQsIGFuCiAqIEVfV0FSTklORyBsZXZlbCBlcnJvciBpcyBnZW5lcmF0ZWQuCiAqIEByZXR1cm4gaW50IFRoZSB0aHJlYWQgSUQgb24gc3VjY2Vzcy4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfdGhyZWFkX2lkKCRsaW5rX2lkZW50aWZpZXIgPSBudWxsKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXlzcWxfdGhyZWFkX2lkKCRsaW5rX2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXlzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogbXlzcWxfdW5idWZmZXJlZF9xdWVyeSBzZW5kcyB0aGUgU1FMIHF1ZXJ5CiAqIHF1ZXJ5IHRvIE15U1FMIHdpdGhvdXQgYXV0b21hdGljYWxseQogKiBmZXRjaGluZyBhbmQgYnVmZmVyaW5nIHRoZSByZXN1bHQgcm93cyBhcwogKiBteXNxbF9xdWVyeSBkb2VzLiAgVGhpcyBzYXZlcyBhIGNvbnNpZGVyYWJsZQogKiBhbW91bnQgb2YgbWVtb3J5IHdpdGggU1FMIHF1ZXJpZXMgdGhhdCBwcm9kdWNlIGxhcmdlIHJlc3VsdCBzZXRzLAogKiBhbmQgeW91IGNhbiBzdGFydCB3b3JraW5nIG9uIHRoZSByZXN1bHQgc2V0IGltbWVkaWF0ZWx5IGFmdGVyIHRoZQogKiBmaXJzdCByb3cgaGFzIGJlZW4gcmV0cmlldmVkIGFzIHlvdSBkb24ndCBoYXZlIHRvIHdhaXQgdW50aWwgdGhlCiAqIGNvbXBsZXRlIFNRTCBxdWVyeSBoYXMgYmVlbiBwZXJmb3JtZWQuICBUbyB1c2UKICogbXlzcWxfdW5idWZmZXJlZF9xdWVyeSB3aGlsZSBtdWx0aXBsZSBkYXRhYmFzZQogKiBjb25uZWN0aW9ucyBhcmUgb3BlbiwgeW91IG11c3Qgc3BlY2lmeSB0aGUgb3B0aW9uYWwgcGFyYW1ldGVyCiAqIGxpbmtfaWRlbnRpZmllciB0byBpZGVudGlmeSB3aGljaCBjb25uZWN0aW9uCiAqIHlvdSB3YW50IHRvIHVzZS4KICoKICogQHBhcmFtIHN0cmluZyAkcXVlcnkgVGhlIFNRTCBxdWVyeSB0byBleGVjdXRlLgogKgogKiBEYXRhIGluc2lkZSB0aGUgcXVlcnkgc2hvdWxkIGJlIHByb3Blcmx5IGVzY2FwZWQuCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIFRoZSBNeVNRTCBjb25uZWN0aW9uLiBJZiB0aGUKICogbGluayBpZGVudGlmaWVyIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXN0IGxpbmsgb3BlbmVkIGJ5CiAqIG15c3FsX2Nvbm5lY3QgaXMgYXNzdW1lZC4gSWYgbm8gc3VjaCBsaW5rIGlzIGZvdW5kLCBpdAogKiB3aWxsIHRyeSB0byBjcmVhdGUgb25lIGFzIGlmIG15c3FsX2Nvbm5lY3QgaGFkIGJlZW4gY2FsbGVkCiAqIHdpdGggbm8gYXJndW1lbnRzLiBJZiBubyBjb25uZWN0aW9uIGlzIGZvdW5kIG9yIGVzdGFibGlzaGVkLCBhbgogKiBFX1dBUk5JTkcgbGV2ZWwgZXJyb3IgaXMgZ2VuZXJhdGVkLgogKiBAcmV0dXJuIHJlc291cmNlfGJvb2wgRm9yIFNFTEVDVCwgU0hPVywgREVTQ1JJQkUgb3IgRVhQTEFJTiBzdGF0ZW1lbnRzLAogKiBteXNxbF91bmJ1ZmZlcmVkX3F1ZXJ5CiAqIHJldHVybnMgYSByZXNvdXJjZSBvbiBzdWNjZXNzLgogKgogKiBGb3Igb3RoZXIgdHlwZSBvZiBTUUwgc3RhdGVtZW50cywgVVBEQVRFLCBERUxFVEUsIERST1AsIGV0YywKICogbXlzcWxfdW5idWZmZXJlZF9xdWVyeSByZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfdW5idWZmZXJlZF9xdWVyeShzdHJpbmcgJHF1ZXJ5LCAkbGlua19pZGVudGlmaWVyID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxteXNxbF91bmJ1ZmZlcmVkX3F1ZXJ5KCRxdWVyeSwgJGxpbmtfaWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNeXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/mysqli.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xNeXNxbGlFeGNlcHRpb247CgovKioKICogUmV0dXJucyBhbiBlbXB0eSBhcnJheS4KICogQXZhaWxhYmxlIG9ubHkgd2l0aCBteXNxbG5kLgogKgogKiBAcmV0dXJuIGFycmF5IFJldHVybnMgYW4gZW1wdHkgYXJyYXkgb24gc3VjY2VzcywgRkFMU0Ugb3RoZXJ3aXNlLgogKiBAdGhyb3dzIE15c3FsaUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxpX2dldF9jYWNoZV9zdGF0cygpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG15c3FsaV9nZXRfY2FjaGVfc3RhdHMoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE15c3FsaUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIGNsaWVudCBwZXItcHJvY2VzcyBzdGF0aXN0aWNzLgogKiBBdmFpbGFibGUgb25seSB3aXRoIG15c3FsbmQuCiAqCiAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBhbiBhcnJheSB3aXRoIGNsaWVudCBzdGF0cyBpZiBzdWNjZXNzLCBGQUxTRSBvdGhlcndpc2UuCiAqIEB0aHJvd3MgTXlzcWxpRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBteXNxbGlfZ2V0X2NsaWVudF9zdGF0cygpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG15c3FsaV9nZXRfY2xpZW50X3N0YXRzKCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNeXNxbGlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/mysqlndMs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xNeXNxbG5kTXNFeGNlcHRpb247CgovKioKICogUmV0dXJucyBhIGxpc3Qgb2YgY3VycmVudGx5IGNvbmZpZ3VyZWQgc2VydmVycy4KICoKICogQHBhcmFtIG1peGVkICRjb25uZWN0aW9uIEEgTXlTUUwgY29ubmVjdGlvbiBoYW5kbGUgb2J0YWluZWQgZnJvbSBhbnkgb2YgdGhlCiAqIGNvbm5lY3QgZnVuY3Rpb25zIG9mIHRoZSBteXNxbGksCiAqIG15c3FsIG9yCiAqIFBET19NWVNRTCBleHRlbnNpb25zLgogKiBAcmV0dXJuIGFycmF5IEZBTFNFIG9uIGVycm9yLiBPdGhlcndpc2UsIHJldHVybnMgYW4gYXJyYXkgd2l0aCB0d28gZW50cmllcwogKiBtYXN0ZXJzIGFuZCBzbGF2ZXMgZWFjaCBvZiB3aGljaCBjb250YWlucwogKiBhbiBhcnJheSBsaXN0aW5nIGFsbCBjb3JyZXNwb25kaW5nIHNlcnZlcnMuCiAqCiAqIFRoZSBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBjaGVjayBhbmQgZGVidWcgdGhlIGxpc3Qgb2Ygc2VydmVycyBjdXJyZW50bHkKICogdXNlZCBieSB0aGUgcGx1Z2luLiBJdCBpcyBtb3N0bHkgdXNlZnVsIHdoZW4gdGhlIGxpc3Qgb2Ygc2VydmVycyBjaGFuZ2VzIGF0CiAqIHJ1bnRpbWUsIGZvciBleGFtcGxlLCB3aGVuIHVzaW5nIE15U1FMIEZhYnJpYy4KICoKICogbWFzdGVycyBhbmQgc2xhdmVzIHNlcnZlciBlbnRyaWVzCiAqIEB0aHJvd3MgTXlzcWxuZE1zRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBteXNxbG5kX21zX2R1bXBfc2VydmVycygkY29ubmVjdGlvbik6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXlzcWxuZF9tc19kdW1wX3NlcnZlcnMoJGNvbm5lY3Rpb24pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXlzcWxuZE1zRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIE15U1FMIEZhYnJpYyByZWxhdGVkLgogKgogKiBTd2l0Y2ggdGhlIGNvbm5lY3Rpb24gdG8gdGhlIG5vZGVzIGhhbmRsaW5nIGdsb2JhbCBzaGFyZGluZyBxdWVyaWVzCiAqIGZvciB0aGUgZ2l2ZW4gdGFibGUgbmFtZS4KICoKICogQHBhcmFtIG1peGVkICRjb25uZWN0aW9uIEEgTXlTUUwgY29ubmVjdGlvbiBoYW5kbGUgb2J0YWluZWQgZnJvbSBhbnkgb2YgdGhlCiAqIGNvbm5lY3QgZnVuY3Rpb25zIG9mIHRoZSBteXNxbGksCiAqIG15c3FsIG9yCiAqIFBET19NWVNRTCBleHRlbnNpb25zLgogKiBAcGFyYW0gbWl4ZWQgJHRhYmxlX25hbWUgVGhlIHRhYmxlIG5hbWUgdG8gYXNrIEZhYnJpYyBhYm91dC4KICogQHJldHVybiBhcnJheSBGQUxTRSBvbiBlcnJvci4gT3RoZXJ3aXNlLCBUUlVFCiAqIEB0aHJvd3MgTXlzcWxuZE1zRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBteXNxbG5kX21zX2ZhYnJpY19zZWxlY3RfZ2xvYmFsKCRjb25uZWN0aW9uLCAkdGFibGVfbmFtZSk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXlzcWxuZF9tc19mYWJyaWNfc2VsZWN0X2dsb2JhbCgkY29ubmVjdGlvbiwgJHRhYmxlX25hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXlzcWxuZE1zRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIE15U1FMIEZhYnJpYyByZWxhdGVkLgogKgogKiBTd2l0Y2ggdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNoYXJkcyByZXNwb25zaWJsZSBmb3IgdGhlCiAqIGdpdmVuIHRhYmxlIG5hbWUgYW5kIHNoYXJkIGtleS4KICoKICogQHBhcmFtIG1peGVkICRjb25uZWN0aW9uIEEgTXlTUUwgY29ubmVjdGlvbiBoYW5kbGUgb2J0YWluZWQgZnJvbSBhbnkgb2YgdGhlCiAqIGNvbm5lY3QgZnVuY3Rpb25zIG9mIHRoZSBteXNxbGksCiAqIG15c3FsIG9yCiAqIFBET19NWVNRTCBleHRlbnNpb25zLgogKiBAcGFyYW0gbWl4ZWQgJHRhYmxlX25hbWUgVGhlIHRhYmxlIG5hbWUgdG8gYXNrIEZhYnJpYyBhYm91dC4KICogQHBhcmFtIG1peGVkICRzaGFyZF9rZXkgVGhlIHNoYXJkIGtleSB0byBhc2sgRmFicmljIGFib3V0LgogKiBAcmV0dXJuIGFycmF5IEZBTFNFIG9uIGVycm9yLiBPdGhlcndpc2UsIFRSVUUKICogQHRocm93cyBNeXNxbG5kTXNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG15c3FsbmRfbXNfZmFicmljX3NlbGVjdF9zaGFyZCgkY29ubmVjdGlvbiwgJHRhYmxlX25hbWUsICRzaGFyZF9rZXkpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG15c3FsbmRfbXNfZmFicmljX3NlbGVjdF9zaGFyZCgkY29ubmVjdGlvbiwgJHRhYmxlX25hbWUsICRzaGFyZF9rZXkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXlzcWxuZE1zRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJldHVybnMgYW4gYXJyYXkgd2hpY2ggZGVzY3JpYmVzIHRoZSBsYXN0IHVzZWQgY29ubmVjdGlvbiBmcm9tIHRoZSBwbHVnaW5zCiAqIGNvbm5lY3Rpb24gcG9vbCBjdXJyZW50bHkgcG9pbnRlZCB0byBieSB0aGUgdXNlciBjb25uZWN0aW9uIGhhbmRsZS4gSWYgdXNpbmcgdGhlCiAqIHBsdWdpbiwgYSB1c2VyIGNvbm5lY3Rpb24gaGFuZGxlIHJlcHJlc2VudHMgYSBwb29sIG9mIGRhdGFiYXNlIGNvbm5lY3Rpb25zLgogKiBJdCBpcyBub3QgcG9zc2libGUgdG8gdGVsbCBmcm9tIHRoZSB1c2VyIGNvbm5lY3Rpb24gaGFuZGxlcyBwcm9wZXJ0aWVzIHRvIHdoaWNoCiAqIGRhdGFiYXNlIHNlcnZlciBmcm9tIHRoZSBwb29sIHRoZSB1c2VyIGNvbm5lY3Rpb24gaGFuZGxlIHBvaW50cy4KICoKICogVGhlIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGRlYnVnIG9yIG1vbml0b3IgUEVDTCBteXNxbG5kX21zLgogKgogKiBAcGFyYW0gbWl4ZWQgJGNvbm5lY3Rpb24gQSBNeVNRTCBjb25uZWN0aW9uIGhhbmRsZSBvYnRhaW5lZCBmcm9tIGFueSBvZiB0aGUKICogY29ubmVjdCBmdW5jdGlvbnMgb2YgdGhlIG15c3FsaSwKICogbXlzcWwgb3IKICogUERPX01ZU1FMIGV4dGVuc2lvbnMuCiAqIEByZXR1cm4gYXJyYXkgRkFMU0Ugb24gZXJyb3IuIE90aGVyd2lzZSwgYW4KICogYXJyYXkgd2hpY2ggZGVzY3JpYmVzIHRoZSBjb25uZWN0aW9uIHVzZWQgdG8KICogZXhlY3V0ZSB0aGUgbGFzdCBzdGF0ZW1lbnQgb24uCiAqCiAqIEFycmF5IHdoaWNoIGRlc2NyaWJlcyB0aGUgY29ubmVjdGlvbi4KICogQHRocm93cyBNeXNxbG5kTXNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG15c3FsbmRfbXNfZ2V0X2xhc3RfdXNlZF9jb25uZWN0aW9uKCRjb25uZWN0aW9uKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxteXNxbG5kX21zX2dldF9sYXN0X3VzZWRfY29ubmVjdGlvbigkY29ubmVjdGlvbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNeXNxbG5kTXNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/mysqlndQc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xNeXNxbG5kUWNFeGNlcHRpb247CgovKioKICogRmx1c2ggYWxsIGNhY2hlIGNvbnRlbnRzLgogKgogKiBGbHVzaGluZyB0aGUgY2FjaGUgaXMgYSBzdG9yYWdlIGhhbmRsZXIgcmVzcG9uc2liaWxpdHkuCiAqIEFsbCBidWlsdC1pbiBzdG9yYWdlIGhhbmRsZXIgYnV0IHRoZQogKiBtZW1jYWNoZSBzdG9yYWdlCiAqIGhhbmRsZXIgc3VwcG9ydCBmbHVzaGluZyB0aGUgY2FjaGUuIFRoZQogKiBtZW1jYWNoZQogKiBzdG9yYWdlIGhhbmRsZXIgY2Fubm90IGZsdXNoIGl0cyBjYWNoZSBjb250ZW50cy4KICoKICogVXNlci1kZWZpbmVkIHN0b3JhZ2UgaGFuZGxlciBtYXkgb3IgbWF5IG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24uCiAqCiAqIEB0aHJvd3MgTXlzcWxuZFFjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBteXNxbG5kX3FjX2NsZWFyX2NhY2hlKCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxteXNxbG5kX3FjX2NsZWFyX2NhY2hlKCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNeXNxbG5kUWNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEluc3RhbGxzIGEgY2FsbGJhY2sgd2hpY2ggZGVjaWRlcyB3aGV0aGVyIGEgc3RhdGVtZW50IGlzIGNhY2hlZC4KICoKICogVGhlcmUgYXJlIHNldmVyYWwgd2F5cyBvZiBoaW50aW5nIFBFTEMvbXlzcWxuZF9xYyB0byBjYWNoZSBhIHF1ZXJ5LgogKiBCeSBkZWZhdWx0LCBQRUNML215c3FsbmRfcWMgYXR0ZW1wdHMgdG8gY2FjaGUgYSBpZiBjYWNoaW5nIG9mIGFsbCBzdGF0ZW1lbnRzCiAqIGlzIGVuYWJsZWQgb3IgdGhlIHF1ZXJ5IHN0cmluZyBiZWdpbnMgd2l0aCBhIGNlcnRhaW4gU1FMIGhpbnQuCiAqIFRoZSBwbHVnaW4gaW50ZXJuYWxseSBjYWxscyBhIGZ1bmN0aW9uIG5hbWVkIGlzX3NlbGVjdCgpCiAqIHRvIGZpbmQgb3V0LiBUaGlzIGludGVybmFsIGZ1bmN0aW9uIGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgdXNlci1kZWZpbmVkIGNhbGxiYWNrLgogKiBUaGVuLCB0aGUgdXNlci1kZWZpbmVkIGNhbGxiYWNrIGlzIHJlc3BvbnNpYmxlIHRvIGRlY2lkZSB3aGV0aGVyIHRoZSBwbHVnaW4KICogYXR0ZW1wdHMgdG8gY2FjaGUgYSBzdGF0ZW1lbnQuIEJlY2F1c2UgdGhlIGludGVybmFsIGZ1bmN0aW9uIGlzIHJlcGxhY2VkCiAqIHdpdGggdGhlIGNhbGxiYWNrLCB0aGUgY2FsbGJhY2sgZ2FpbnMgZnVsbCBjb250cm9sLiBUaGUgY2FsbGJhY2sgaXMgZnJlZQogKiB0byBpZ25vcmUgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBteXNxbG5kX3FjLmNhY2hlX2J5X2RlZmF1bHQKICogYW5kIFNRTCBoaW50cy4KICoKICogVGhlIGNhbGxiYWNrIGlzIGludm9rZWQgZm9yIGV2ZXJ5IHN0YXRlbWVudCBpbnNwZWN0ZWQgYnkgdGhlIHBsdWdpbi4KICogSXQgaXMgZ2l2ZW4gdGhlIHN0YXRlbWVudHMgc3RyaW5nIGFzIGEgcGFyYW1ldGVyLiBUaGUgY2FsbGJhY2sgcmV0dXJucwogKiBGQUxTRSBpZiB0aGUgc3RhdGVtZW50IHNoYWxsIG5vdCBiZSBjYWNoZWQuIEl0IHJldHVybnMgVFJVRSB0bwogKiBtYWtlIHRoZSBwbHVnaW4gYXR0ZW1wdCB0byBjYWNoZSB0aGUgc3RhdGVtZW50cyByZXN1bHQgc2V0LCBpZiBhbnkuCiAqIEEgc28tY3JlYXRlZCBjYWNoZSBlbnRyeSBpcyBnaXZlbiB0aGUgZGVmYXVsdCBUVEwgc2V0IHdpdGggdGhlCiAqIFBIUCBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZSBteXNxbG5kX3FjLnR0bC4KICogSWYgYSBkaWZmZXJlbnQgVFRMIHNoYWxsIGJlIHVzZWQsIHRoZSBjYWxsYmFjayByZXR1cm5zIGEgbnVtZXJpYwogKiB2YWx1ZSB0byBiZSB1c2VkIGFzIHRoZSBUVEwuCiAqCiAqIFRoZSBpbnRlcm5hbCBpc19zZWxlY3QgZnVuY3Rpb24gaXMgcGFydCBvZiB0aGUgaW50ZXJuYWwKICogY2FjaGUgc3RvcmFnZSBoYW5kbGVyIGludGVyZmFjZS4gVGh1cywgYSB1c2VyLWRlZmluZWQgc3RvcmFnZSBoYW5kbGVyCiAqIG9mZmVycyB0aGUgc2FtZSBjYXBhYmlsaXRpZXMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGNhbGxiYWNrCiAqIEByZXR1cm4gbWl4ZWQgUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgTXlzcWxuZFFjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBteXNxbG5kX3FjX3NldF9pc19zZWxlY3Qoc3RyaW5nICRjYWxsYmFjaykKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxteXNxbG5kX3FjX3NldF9pc19zZWxlY3QoJGNhbGxiYWNrKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE15c3FsbmRRY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBTZXRzIHRoZSBzdG9yYWdlIGhhbmRsZXIgdXNlZCBieSB0aGUgcXVlcnkgY2FjaGUuIEEgbGlzdCBvZiBhdmFpbGFibGUKICogc3RvcmFnZSBoYW5kbGVyIGNhbiBiZSBvYnRhaW5lZCBmcm9tCiAqIG15c3FsbmRfcWNfZ2V0X2F2YWlsYWJsZV9oYW5kbGVycy4KICogV2hpY2ggc3RvcmFnZSBhcmUgYXZhaWxhYmxlIGRlcGVuZHMgb24gdGhlIGNvbXBpbGUgdGltZQogKiBjb25maWd1cmF0aW9uIG9mIHRoZSBxdWVyeSBjYWNoZSBwbHVnaW4uIFRoZQogKiBkZWZhdWx0IHN0b3JhZ2UgaGFuZGxlciBpcyBhbHdheXMgYXZhaWxhYmxlLgogKiBBbGwgb3RoZXIgc3RvcmFnZSBoYW5kbGVyIG11c3QgYmUgZW5hYmxlZCBleHBsaWNpdGx5IHdoZW4gYnVpbGRpbmcgdGhlCiAqIGV4dGVuc2lvbi4KICoKICogQHBhcmFtIHN0cmluZyAkaGFuZGxlciBIYW5kbGVyIGNhbiBiZSBvZiB0eXBlIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgYQogKiBidWlsdC1pbiBzdG9yYWdlIGhhbmRsZXIgb3IgYW4gb2JqZWN0IG9mIHR5cGUKICogbXlzcWxuZF9xY19oYW5kbGVyX2RlZmF1bHQuCiAqIFRoZSBuYW1lcyBvZiB0aGUgYnVpbHQtaW4gc3RvcmFnZSBoYW5kbGVyIGFyZQogKiBkZWZhdWx0LAogKiBBUEMsCiAqIE1FTUNBQ0hFLAogKiBzcWxpdGUuCiAqIEB0aHJvd3MgTXlzcWxuZFFjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBteXNxbG5kX3FjX3NldF9zdG9yYWdlX2hhbmRsZXIoc3RyaW5nICRoYW5kbGVyKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG15c3FsbmRfcWNfc2V0X3N0b3JhZ2VfaGFuZGxlcigkaGFuZGxlcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNeXNxbG5kUWNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/network.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xOZXR3b3JrRXhjZXB0aW9uOwoKLyoqCiAqIGNsb3NlbG9nIGNsb3NlcyB0aGUgZGVzY3JpcHRvciBiZWluZyB1c2VkIHRvIHdyaXRlIHRvCiAqIHRoZSBzeXN0ZW0gbG9nZ2VyLiAgVGhlIHVzZSBvZiBjbG9zZWxvZyBpcyBvcHRpb25hbC4KICoKICogQHRocm93cyBOZXR3b3JrRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjbG9zZWxvZygpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcY2xvc2Vsb2coKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE5ldHdvcmtFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEZldGNoIEROUyBSZXNvdXJjZSBSZWNvcmRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4KICogaG9zdG5hbWUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGhvc3RuYW1lIGhvc3RuYW1lIHNob3VsZCBiZSBhIHZhbGlkIEROUyBob3N0bmFtZSBzdWNoCiAqIGFzICJ3d3cuZXhhbXBsZS5jb20iLiBSZXZlcnNlIGxvb2t1cHMgY2FuIGJlIGdlbmVyYXRlZAogKiB1c2luZyBpbi1hZGRyLmFycGEgbm90YXRpb24sIGJ1dAogKiBnZXRob3N0YnlhZGRyIGlzIG1vcmUgc3VpdGFibGUgZm9yCiAqIHRoZSBtYWpvcml0eSBvZiByZXZlcnNlIGxvb2t1cHMuCiAqCiAqIFBlciBETlMgc3RhbmRhcmRzLCBlbWFpbCBhZGRyZXNzZXMgYXJlIGdpdmVuIGluIHVzZXIuaG9zdCBmb3JtYXQgKGZvcgogKiBleGFtcGxlOiBob3N0bWFzdGVyLmV4YW1wbGUuY29tIGFzIG9wcG9zZWQgdG8gaG9zdG1hc3RlckBleGFtcGxlLmNvbSksCiAqIGJlIHN1cmUgdG8gY2hlY2sgdGhpcyB2YWx1ZSBhbmQgbW9kaWZ5IGlmIG5lY2Vzc2FyeSBiZWZvcmUgdXNpbmcgaXQKICogd2l0aCBhIGZ1bmN0aW9ucyBzdWNoIGFzIG1haWwuCiAqIEBwYXJhbSBpbnQgJHR5cGUgQnkgZGVmYXVsdCwgZG5zX2dldF9yZWNvcmQgd2lsbCBzZWFyY2ggZm9yIGFueQogKiByZXNvdXJjZSByZWNvcmRzIGFzc29jaWF0ZWQgd2l0aCBob3N0bmFtZS4KICogVG8gbGltaXQgdGhlIHF1ZXJ5LCBzcGVjaWZ5IHRoZSBvcHRpb25hbCB0eXBlCiAqIHBhcmFtZXRlci4gTWF5IGJlIGFueSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICogRE5TX0EsIEROU19DTkFNRSwKICogRE5TX0hJTkZPLCBETlNfQ0FBLAogKiBETlNfTVgsIEROU19OUywKICogRE5TX1BUUiwgRE5TX1NPQSwKICogRE5TX1RYVCwgRE5TX0FBQUEsCiAqIEROU19TUlYsIEROU19OQVBUUiwKICogRE5TX0E2LCBETlNfQUxMCiAqIG9yIEROU19BTlkuCiAqCiAqIEJlY2F1c2Ugb2YgZWNjZW50cmljaXRpZXMgaW4gdGhlIHBlcmZvcm1hbmNlIG9mIGxpYnJlc29sdgogKiBiZXR3ZWVuIHBsYXRmb3JtcywgRE5TX0FOWSB3aWxsIG5vdAogKiBhbHdheXMgcmV0dXJuIGV2ZXJ5IHJlY29yZCwgdGhlIHNsb3dlciBETlNfQUxMCiAqIHdpbGwgY29sbGVjdCBhbGwgcmVjb3JkcyBtb3JlIHJlbGlhYmx5LgogKgogKiBETlNfQ0FBIGlzIG5vdCBzdXBwb3J0ZWQgb24gV2luZG93cy4KICogQHBhcmFtIGFycmF5fG51bGwgJGF1dGhucyBQYXNzZWQgYnkgcmVmZXJlbmNlIGFuZCwgaWYgZ2l2ZW4sIHdpbGwgYmUgcG9wdWxhdGVkIHdpdGggUmVzb3VyY2UKICogUmVjb3JkcyBmb3IgdGhlIEF1dGhvcml0YXRpdmUgTmFtZSBTZXJ2ZXJzLgogKiBAcGFyYW0gYXJyYXl8bnVsbCAkYWRkdGwgUGFzc2VkIGJ5IHJlZmVyZW5jZSBhbmQsIGlmIGdpdmVuLCB3aWxsIGJlIHBvcHVsYXRlZCB3aXRoIGFueQogKiBBZGRpdGlvbmFsIFJlY29yZHMuCiAqIEBwYXJhbSBib29sICRyYXcgVGhlIHR5cGUgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhIHJhdyBETlMgdHlwZSBJRAogKiAodGhlIEROU18qIGNvbnN0YW50cyBjYW5ub3QgYmUgdXNlZCkuCiAqIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBjb250YWluIGEgZGF0YSBrZXksIHdoaWNoIG5lZWRzCiAqIHRvIGJlIG1hbnVhbGx5IHBhcnNlZC4KICogQHJldHVybiBhcnJheSBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gYXJyYXkgb2YgYXNzb2NpYXRpdmUgYXJyYXlzLiBFYWNoIGFzc29jaWF0aXZlIGFycmF5IGNvbnRhaW5zCiAqIGF0IG1pbmltdW0gdGhlIGZvbGxvd2luZyBrZXlzOgogKgogKiBCYXNpYyBETlMgYXR0cmlidXRlcwogKgogKgogKgogKiBBdHRyaWJ1dGUKICogTWVhbmluZwogKgogKgogKgogKgogKiBob3N0CiAqCiAqIFRoZSByZWNvcmQgaW4gdGhlIEROUyBuYW1lc3BhY2UgdG8gd2hpY2ggdGhlIHJlc3Qgb2YgdGhlIGFzc29jaWF0ZWQgZGF0YSByZWZlcnMuCiAqCiAqCiAqCiAqIGNsYXNzCiAqCiAqIGRuc19nZXRfcmVjb3JkIG9ubHkgcmV0dXJucyBJbnRlcm5ldCBjbGFzcyByZWNvcmRzIGFuZCBhcwogKiBzdWNoIHRoaXMgcGFyYW1ldGVyIHdpbGwgYWx3YXlzIHJldHVybiBJTi4KICoKICoKICoKICogdHlwZQogKgogKiBTdHJpbmcgY29udGFpbmluZyB0aGUgcmVjb3JkIHR5cGUuICBBZGRpdGlvbmFsIGF0dHJpYnV0ZXMgd2lsbCBhbHNvIGJlIGNvbnRhaW5lZAogKiBpbiB0aGUgcmVzdWx0aW5nIGFycmF5IGRlcGVuZGFudCBvbiB0aGUgdmFsdWUgb2YgdHlwZS4gU2VlIHRhYmxlIGJlbG93LgogKgogKgogKgogKiB0dGwKICoKICogIlRpbWUgVG8gTGl2ZSIgcmVtYWluaW5nIGZvciB0aGlzIHJlY29yZC4gVGhpcyB3aWxsIG5vdCBlcXVhbAogKiB0aGUgcmVjb3JkJ3Mgb3JpZ2luYWwgdHRsLCBidXQgd2lsbCByYXRoZXIgZXF1YWwgdGhlIG9yaWdpbmFsIHR0bCBtaW51cyB3aGF0ZXZlcgogKiBsZW5ndGggb2YgdGltZSBoYXMgcGFzc2VkIHNpbmNlIHRoZSBhdXRob3JpdGF0aXZlIG5hbWUgc2VydmVyIHdhcyBxdWVyaWVkLgogKgogKgogKgogKgogKgogKgogKgogKiBPdGhlciBrZXlzIGluIGFzc29jaWF0aXZlIGFycmF5cyBkZXBlbmRhbnQgb24gJ3R5cGUnCiAqCiAqCiAqCiAqIFR5cGUKICogRXh0cmEgQ29sdW1ucwogKgogKgogKgogKgogKiBBCiAqCiAqIGlwOiBBbiBJUHY0IGFkZHJlc3NlcyBpbiBkb3R0ZWQgZGVjaW1hbCBub3RhdGlvbi4KICoKICoKICoKICogTVgKICoKICogcHJpOiBQcmlvcml0eSBvZiBtYWlsIGV4Y2hhbmdlci4KICogTG93ZXIgbnVtYmVycyBpbmRpY2F0ZSBncmVhdGVyIHByaW9yaXR5LgogKiB0YXJnZXQ6IEZRRE4gb2YgdGhlIG1haWwgZXhjaGFuZ2VyLgogKiBTZWUgYWxzbyBkbnNfZ2V0X214LgogKgogKgogKgogKiBDTkFNRQogKgogKiB0YXJnZXQ6IEZRRE4gb2YgbG9jYXRpb24gaW4gRE5TIG5hbWVzcGFjZSB0byB3aGljaAogKiB0aGUgcmVjb3JkIGlzIGFsaWFzZWQuCiAqCiAqCiAqCiAqIE5TCiAqCiAqIHRhcmdldDogRlFETiBvZiB0aGUgbmFtZSBzZXJ2ZXIgd2hpY2ggaXMgYXV0aG9yaXRhdGl2ZQogKiBmb3IgdGhpcyBob3N0bmFtZS4KICoKICoKICoKICogUFRSCiAqCiAqIHRhcmdldDogTG9jYXRpb24gd2l0aGluIHRoZSBETlMgbmFtZXNwYWNlIHRvIHdoaWNoCiAqIHRoaXMgcmVjb3JkIHBvaW50cy4KICoKICoKICoKICogVFhUCiAqCiAqIHR4dDogQXJiaXRyYXJ5IHN0cmluZyBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlY29yZC4KICoKICoKICoKICogSElORk8KICoKICogY3B1OiBJQU5BIG51bWJlciBkZXNpZ25hdGluZyB0aGUgQ1BVIG9mIHRoZSBtYWNoaW5lCiAqIHJlZmVyZW5jZWQgYnkgdGhpcyByZWNvcmQuCiAqIG9zOiBJQU5BIG51bWJlciBkZXNpZ25hdGluZyB0aGUgT3BlcmF0aW5nIFN5c3RlbSBvbgogKiB0aGUgbWFjaGluZSByZWZlcmVuY2VkIGJ5IHRoaXMgcmVjb3JkLgogKiBTZWUgSUFOQSdzIE9wZXJhdGluZyBTeXN0ZW0KICogTmFtZXMgZm9yIHRoZSBtZWFuaW5nIG9mIHRoZXNlIHZhbHVlcy4KICoKICoKICoKICogQ0FBCiAqCiAqIGZsYWdzOiBBIG9uZS1ieXRlIGJpdGZpZWxkOyBjdXJyZW50bHkgb25seSBiaXQgMCBpcyBkZWZpbmVkLAogKiBtZWFuaW5nICdjcml0aWNhbCc7IG90aGVyIGJpdHMgYXJlIHJlc2VydmVkIGFuZCBzaG91bGQgYmUgaWdub3JlZC4KICogdGFnOiBUaGUgQ0FBIHRhZyBuYW1lIChhbHBoYW51bWVyaWMgQVNDSUkgc3RyaW5nKS4KICogdmFsdWU6IFRoZSBDQUEgdGFnIHZhbHVlIChiaW5hcnkgc3RyaW5nLCBtYXkgdXNlIHN1YmZvcm1hdHMpLgogKiBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBzZWU6IFJGQyA2ODQ0CiAqCiAqCiAqCiAqIFNPQQogKgogKiBtbmFtZTogRlFETiBvZiB0aGUgbWFjaGluZSBmcm9tIHdoaWNoIHRoZSByZXNvdXJjZQogKiByZWNvcmRzIG9yaWdpbmF0ZWQuCiAqIHJuYW1lOiBFbWFpbCBhZGRyZXNzIG9mIHRoZSBhZG1pbmlzdHJhdGl2ZSBjb250YWN0CiAqIGZvciB0aGlzIGRvbWFpbi4KICogc2VyaWFsOiBTZXJpYWwgIyBvZiB0aGlzIHJldmlzaW9uIG9mIHRoZSByZXF1ZXN0ZWQKICogZG9tYWluLgogKiByZWZyZXNoOiBSZWZyZXNoIGludGVydmFsIChzZWNvbmRzKSBzZWNvbmRhcnkgbmFtZQogKiBzZXJ2ZXJzIHNob3VsZCB1c2Ugd2hlbiB1cGRhdGluZyByZW1vdGUgY29waWVzIG9mIHRoaXMgZG9tYWluLgogKiByZXRyeTogTGVuZ3RoIG9mIHRpbWUgKHNlY29uZHMpIHRvIHdhaXQgYWZ0ZXIgYQogKiBmYWlsZWQgcmVmcmVzaCBiZWZvcmUgbWFraW5nIGEgc2Vjb25kIGF0dGVtcHQuCiAqIGV4cGlyZTogTWF4aW11bSBsZW5ndGggb2YgdGltZSAoc2Vjb25kcykgYSBzZWNvbmRhcnkKICogRE5TIHNlcnZlciBzaG91bGQgcmV0YWluIHJlbW90ZSBjb3BpZXMgb2YgdGhlIHpvbmUgZGF0YSB3aXRob3V0IGEKICogc3VjY2Vzc2Z1bCByZWZyZXNoIGJlZm9yZSBkaXNjYXJkaW5nLgogKiBtaW5pbXVtLXR0bDogTWluaW11bSBsZW5ndGggb2YgdGltZSAoc2Vjb25kcykgYQogKiBjbGllbnQgY2FuIGNvbnRpbnVlIHRvIHVzZSBhIEROUyByZXNvbHV0aW9uIGJlZm9yZSBpdCBzaG91bGQgcmVxdWVzdAogKiBhIG5ldyByZXNvbHV0aW9uIGZyb20gdGhlIHNlcnZlci4gIENhbiBiZSBvdmVycmlkZGVuIGJ5IGluZGl2aWR1YWwKICogcmVzb3VyY2UgcmVjb3Jkcy4KICoKICoKICoKICogQUFBQQogKgogKiBpcHY2OiBJUHY2IGFkZHJlc3MKICoKICoKICoKICogQTYoUEhQICZndDs9IDUuMS4wKQogKgogKiBtYXNrbGVuOiBMZW5ndGggKGluIGJpdHMpIHRvIGluaGVyaXQgZnJvbSB0aGUgdGFyZ2V0CiAqIHNwZWNpZmllZCBieSBjaGFpbi4KICogaXB2NjogQWRkcmVzcyBmb3IgdGhpcyBzcGVjaWZpYyByZWNvcmQgdG8gbWVyZ2Ugd2l0aAogKiBjaGFpbi4KICogY2hhaW46IFBhcmVudCByZWNvcmQgdG8gbWVyZ2Ugd2l0aAogKiBpcHY2IGRhdGEuCiAqCiAqCiAqCiAqIFNSVgogKgogKiBwcmk6IChQcmlvcml0eSkgbG93ZXN0IHByaW9yaXRpZXMgc2hvdWxkIGJlIHVzZWQgZmlyc3QuCiAqIHdlaWdodDogUmFua2luZyB0byB3ZWlnaHQgd2hpY2ggb2YgY29tbW9ubHkgcHJpb3JpdGl6ZWQKICogdGFyZ2V0cyBzaG91bGQgYmUgY2hvc2VuIGF0IHJhbmRvbS4KICogdGFyZ2V0IGFuZCBwb3J0OiBob3N0bmFtZSBhbmQgcG9ydAogKiB3aGVyZSB0aGUgcmVxdWVzdGVkIHNlcnZpY2UgY2FuIGJlIGZvdW5kLgogKiBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBzZWU6IFJGQyAyNzgyCiAqCiAqCiAqCiAqIE5BUFRSCiAqCiAqIG9yZGVyIGFuZCBwcmVmOiBFcXVpdmFsZW50IHRvCiAqIHByaSBhbmQgd2VpZ2h0IGFib3ZlLgogKiBmbGFncywgc2VydmljZXMsIHJlZ2V4LAogKiBhbmQgcmVwbGFjZW1lbnQ6IFBhcmFtZXRlcnMgYXMgZGVmaW5lZCBieQogKiBSRkMgMjkxNS4KICoKICoKICoKICoKICoKICogQHRocm93cyBOZXR3b3JrRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBkbnNfZ2V0X3JlY29yZChzdHJpbmcgJGhvc3RuYW1lLCBpbnQgJHR5cGUgPSBETlNfQU5ZLCA/YXJyYXkgJiRhdXRobnMgPSBudWxsLCA/YXJyYXkgJiRhZGR0bCA9IG51bGwsIGJvb2wgJHJhdyA9IGZhbHNlKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxkbnNfZ2V0X3JlY29yZCgkaG9zdG5hbWUsICR0eXBlLCAkYXV0aG5zLCAkYWRkdGwsICRyYXcpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTmV0d29ya0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBJbml0aWF0ZXMgYSBzb2NrZXQgY29ubmVjdGlvbiB0byB0aGUgcmVzb3VyY2Ugc3BlY2lmaWVkIGJ5CiAqIGhvc3RuYW1lLgogKgogKiBQSFAgc3VwcG9ydHMgdGFyZ2V0cyBpbiB0aGUgSW50ZXJuZXQgYW5kIFVuaXggZG9tYWlucyBhcyBkZXNjcmliZWQgaW4KICogLiAgQSBsaXN0IG9mIHN1cHBvcnRlZCB0cmFuc3BvcnRzIGNhbiBhbHNvIGJlCiAqIHJldHJpZXZlZCB1c2luZyBzdHJlYW1fZ2V0X3RyYW5zcG9ydHMuCiAqCiAqIFRoZSBzb2NrZXQgd2lsbCBieSBkZWZhdWx0IGJlIG9wZW5lZCBpbiBibG9ja2luZyBtb2RlLiAgWW91IGNhbgogKiBzd2l0Y2ggaXQgdG8gbm9uLWJsb2NraW5nIG1vZGUgYnkgdXNpbmcKICogc3RyZWFtX3NldF9ibG9ja2luZy4KICoKICogVGhlIGZ1bmN0aW9uIHN0cmVhbV9zb2NrZXRfY2xpZW50IGlzIHNpbWlsYXIgYnV0CiAqIHByb3ZpZGVzIGEgcmljaGVyIHNldCBvZiBvcHRpb25zLCBpbmNsdWRpbmcgbm9uLWJsb2NraW5nIGNvbm5lY3Rpb24gYW5kIHRoZQogKiBhYmlsaXR5IHRvIHByb3ZpZGUgYSBzdHJlYW0gY29udGV4dC4KICoKICogQHBhcmFtIHN0cmluZyAkaG9zdG5hbWUgSWYgT3BlblNTTCBzdXBwb3J0IGlzCiAqIGluc3RhbGxlZCwgeW91IG1heSBwcmVmaXggdGhlIGhvc3RuYW1lCiAqIHdpdGggZWl0aGVyIHNzbDovLyBvciB0bHM6Ly8gdG8KICogdXNlIGFuIFNTTCBvciBUTFMgY2xpZW50IGNvbm5lY3Rpb24gb3ZlciBUQ1AvSVAgdG8gY29ubmVjdCB0byB0aGUKICogcmVtb3RlIGhvc3QuCiAqIEBwYXJhbSBpbnQgJHBvcnQgVGhlIHBvcnQgbnVtYmVyLiBUaGlzIGNhbiBiZSBvbWl0dGVkIGFuZCBza2lwcGVkIHdpdGgKICogLTEgZm9yIHRyYW5zcG9ydHMgdGhhdCBkbyBub3QgdXNlIHBvcnRzLCBzdWNoIGFzCiAqIHVuaXg6Ly8uCiAqIEBwYXJhbSBpbnR8bnVsbCAkZXJybm8gSWYgcHJvdmlkZWQsIGhvbGRzIHRoZSBzeXN0ZW0gbGV2ZWwgZXJyb3IgbnVtYmVyIHRoYXQgb2NjdXJyZWQgaW4gdGhlCiAqIHN5c3RlbS1sZXZlbCBjb25uZWN0KCkgY2FsbC4KICoKICogSWYgdGhlIHZhbHVlIHJldHVybmVkIGluIGVycm5vIGlzCiAqIDAgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5lZCBGQUxTRSwgaXQgaXMgYW4KICogaW5kaWNhdGlvbiB0aGF0IHRoZSBlcnJvciBvY2N1cnJlZCBiZWZvcmUgdGhlCiAqIGNvbm5lY3QoKSBjYWxsLiBUaGlzIGlzIG1vc3QgbGlrZWx5IGR1ZSB0byBhCiAqIHByb2JsZW0gaW5pdGlhbGl6aW5nIHRoZSBzb2NrZXQuCiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkZXJyc3RyIFRoZSBlcnJvciBtZXNzYWdlIGFzIGEgc3RyaW5nLgogKiBAcGFyYW0gZmxvYXQgJHRpbWVvdXQgVGhlIGNvbm5lY3Rpb24gdGltZW91dCwgaW4gc2Vjb25kcy4KICoKICogSWYgeW91IG5lZWQgdG8gc2V0IGEgdGltZW91dCBmb3IgcmVhZGluZy93cml0aW5nIGRhdGEgb3ZlciB0aGUKICogc29ja2V0LCB1c2Ugc3RyZWFtX3NldF90aW1lb3V0LCBhcyB0aGUKICogdGltZW91dCBwYXJhbWV0ZXIgdG8KICogZnNvY2tvcGVuIG9ubHkgYXBwbGllcyB3aGlsZSBjb25uZWN0aW5nIHRoZQogKiBzb2NrZXQuCiAqIEByZXR1cm4gcmVzb3VyY2UgZnNvY2tvcGVuIHJldHVybnMgYSBmaWxlIHBvaW50ZXIgd2hpY2ggbWF5IGJlIHVzZWQKICogdG9nZXRoZXIgd2l0aCB0aGUgb3RoZXIgZmlsZSBmdW5jdGlvbnMgKHN1Y2ggYXMKICogZmdldHMsIGZnZXRzcywKICogZndyaXRlLCBmY2xvc2UsIGFuZAogKiBmZW9mKS4gSWYgdGhlIGNhbGwgZmFpbHMsIGl0IHdpbGwgcmV0dXJuIEZBTFNFCiAqIEB0aHJvd3MgTmV0d29ya0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZnNvY2tvcGVuKHN0cmluZyAkaG9zdG5hbWUsIGludCAkcG9ydCA9IC0xLCA/aW50ICYkZXJybm8gPSBudWxsLCA/c3RyaW5nICYkZXJyc3RyID0gbnVsbCwgZmxvYXQgJHRpbWVvdXQgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHRpbWVvdXQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGZzb2Nrb3BlbigkaG9zdG5hbWUsICRwb3J0LCAkZXJybm8sICRlcnJzdHIsICR0aW1lb3V0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxmc29ja29wZW4oJGhvc3RuYW1lLCAkcG9ydCwgJGVycm5vLCAkZXJyc3RyKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE5ldHdvcmtFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZ2V0aG9zdG5hbWUgZ2V0cyB0aGUgc3RhbmRhcmQgaG9zdCBuYW1lIGZvcgogKiB0aGUgbG9jYWwgbWFjaGluZS4KICoKICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBhIHN0cmluZyB3aXRoIHRoZSBob3N0bmFtZSBvbiBzdWNjZXNzLCBvdGhlcndpc2UgRkFMU0UgaXMKICogcmV0dXJuZWQuCiAqIEB0aHJvd3MgTmV0d29ya0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZ2V0aG9zdG5hbWUoKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZ2V0aG9zdG5hbWUoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE5ldHdvcmtFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZ2V0cHJvdG9ieW5hbWUgcmV0dXJucyB0aGUgcHJvdG9jb2wgbnVtYmVyCiAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJvdG9jb2wgbmFtZSBhcyBwZXIKICogL2V0Yy9wcm90b2NvbHMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIHByb3RvY29sIG5hbWUuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIHByb3RvY29sIG51bWJlci4KICogQHRocm93cyBOZXR3b3JrRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnZXRwcm90b2J5bmFtZShzdHJpbmcgJG5hbWUpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxnZXRwcm90b2J5bmFtZSgkbmFtZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBOZXR3b3JrRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGdldHByb3RvYnludW1iZXIgcmV0dXJucyB0aGUgcHJvdG9jb2wgbmFtZQogKiBhc3NvY2lhdGVkIHdpdGggcHJvdG9jb2wgbnVtYmVyIGFzIHBlcgogKiAvZXRjL3Byb3RvY29scy4KICoKICogQHBhcmFtIGludCAkbnVtYmVyIFRoZSBwcm90b2NvbCBudW1iZXIuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIHByb3RvY29sIG5hbWUgYXMgYSBzdHJpbmcuCiAqIEB0aHJvd3MgTmV0d29ya0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZ2V0cHJvdG9ieW51bWJlcihpbnQgJG51bWJlcik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGdldHByb3RvYnludW1iZXIoJG51bWJlcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBOZXR3b3JrRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJlZ2lzdGVycyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBQSFAgc3RhcnRzIHNlbmRpbmcgb3V0cHV0LgogKgogKiBUaGUgY2FsbGJhY2sgaXMgZXhlY3V0ZWQganVzdCBhZnRlciBQSFAgcHJlcGFyZXMgYWxsCiAqIGhlYWRlcnMgdG8gYmUgc2VudCwgYW5kIGJlZm9yZSBhbnkgb3RoZXIgb3V0cHV0IGlzIHNlbnQsIGNyZWF0aW5nIGEgd2luZG93CiAqIHRvIG1hbmlwdWxhdGUgdGhlIG91dGdvaW5nIGhlYWRlcnMgYmVmb3JlIGJlaW5nIHNlbnQuCiAqCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sgRnVuY3Rpb24gY2FsbGVkIGp1c3QgYmVmb3JlIHRoZSBoZWFkZXJzIGFyZSBzZW50LiBJdCBnZXRzIG5vIHBhcmFtZXRlcnMKICogYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMgaWdub3JlZC4KICogQHRocm93cyBOZXR3b3JrRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBoZWFkZXJfcmVnaXN0ZXJfY2FsbGJhY2soY2FsbGFibGUgJGNhbGxiYWNrKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGhlYWRlcl9yZWdpc3Rlcl9jYWxsYmFjaygkY2FsbGJhY2spOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTmV0d29ya0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICoKICoKICogQHBhcmFtIHN0cmluZyAkaW5fYWRkciBBIDMyYml0IElQdjQsIG9yIDEyOGJpdCBJUHY2IGFkZHJlc3MuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFkZHJlc3MuCiAqIEB0aHJvd3MgTmV0d29ya0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW5ldF9udG9wKHN0cmluZyAkaW5fYWRkcik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGluZXRfbnRvcCgkaW5fYWRkcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBOZXR3b3JrRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIG9wZW5sb2cgb3BlbnMgYSBjb25uZWN0aW9uIHRvIHRoZSBzeXN0ZW0KICogbG9nZ2VyIGZvciBhIHByb2dyYW0uCiAqCiAqIFRoZSB1c2Ugb2Ygb3BlbmxvZyBpcyBvcHRpb25hbC4gSXQKICogd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGNhbGxlZCBieSBzeXNsb2cgaWYKICogbmVjZXNzYXJ5LCBpbiB3aGljaCBjYXNlIGlkZW50IHdpbGwgZGVmYXVsdAogKiB0byBGQUxTRS4KICoKICogQHBhcmFtIHN0cmluZyAkaWRlbnQgVGhlIHN0cmluZyBpZGVudCBpcyBhZGRlZCB0byBlYWNoIG1lc3NhZ2UuCiAqIEBwYXJhbSBpbnQgJG9wdGlvbiBUaGUgb3B0aW9uIGFyZ3VtZW50IGlzIHVzZWQgdG8gaW5kaWNhdGUKICogd2hhdCBsb2dnaW5nIG9wdGlvbnMgd2lsbCBiZSB1c2VkIHdoZW4gZ2VuZXJhdGluZyBhIGxvZyBtZXNzYWdlLgogKgogKiBvcGVubG9nIE9wdGlvbnMKICoKICoKICoKICogQ29uc3RhbnQKICogRGVzY3JpcHRpb24KICoKICoKICoKICoKICogTE9HX0NPTlMKICoKICogaWYgdGhlcmUgaXMgYW4gZXJyb3Igd2hpbGUgc2VuZGluZyBkYXRhIHRvIHRoZSBzeXN0ZW0gbG9nZ2VyLAogKiB3cml0ZSBkaXJlY3RseSB0byB0aGUgc3lzdGVtIGNvbnNvbGUKICoKICoKICoKICogTE9HX05ERUxBWQogKgogKiBvcGVuIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBsb2dnZXIgaW1tZWRpYXRlbHkKICoKICoKICoKICogTE9HX09ERUxBWQogKgogKiAoZGVmYXVsdCkgZGVsYXkgb3BlbmluZyB0aGUgY29ubmVjdGlvbiB1bnRpbCB0aGUgZmlyc3QKICogbWVzc2FnZSBpcyBsb2dnZWQKICoKICoKICoKICogTE9HX1BFUlJPUgogKiBwcmludCBsb2cgbWVzc2FnZSBhbHNvIHRvIHN0YW5kYXJkIGVycm9yCiAqCiAqCiAqIExPR19QSUQKICogaW5jbHVkZSBQSUQgd2l0aCBlYWNoIG1lc3NhZ2UKICoKICoKICoKICoKICogWW91IGNhbiB1c2Ugb25lIG9yIG1vcmUgb2YgdGhlc2Ugb3B0aW9ucy4gV2hlbiB1c2luZyBtdWx0aXBsZSBvcHRpb25zCiAqIHlvdSBuZWVkIHRvIE9SIHRoZW0sIGkuZS4gdG8gb3BlbiB0aGUgY29ubmVjdGlvbgogKiBpbW1lZGlhdGVseSwgd3JpdGUgdG8gdGhlIGNvbnNvbGUgYW5kIGluY2x1ZGUgdGhlIFBJRCBpbiBlYWNoIG1lc3NhZ2UsCiAqIHlvdSB3aWxsIHVzZTogTE9HX0NPTlMgfCBMT0dfTkRFTEFZIHwgTE9HX1BJRAogKiBAcGFyYW0gaW50ICRmYWNpbGl0eSBUaGUgZmFjaWxpdHkgYXJndW1lbnQgaXMgdXNlZCB0byBzcGVjaWZ5IHdoYXQKICogdHlwZSBvZiBwcm9ncmFtIGlzIGxvZ2dpbmcgdGhlIG1lc3NhZ2UuIFRoaXMgYWxsb3dzIHlvdSB0byBzcGVjaWZ5CiAqIChpbiB5b3VyIG1hY2hpbmUncyBzeXNsb2cgY29uZmlndXJhdGlvbikgaG93IG1lc3NhZ2VzIGNvbWluZyBmcm9tCiAqIGRpZmZlcmVudCBmYWNpbGl0aWVzIHdpbGwgYmUgaGFuZGxlZC4KICoKICogb3BlbmxvZyBGYWNpbGl0aWVzCiAqCiAqCiAqCiAqIENvbnN0YW50CiAqIERlc2NyaXB0aW9uCiAqCiAqCiAqCiAqCiAqIExPR19BVVRICiAqCiAqIHNlY3VyaXR5L2F1dGhvcml6YXRpb24gbWVzc2FnZXMgKHVzZQogKiBMT0dfQVVUSFBSSVYgaW5zdGVhZAogKiBpbiBzeXN0ZW1zIHdoZXJlIHRoYXQgY29uc3RhbnQgaXMgZGVmaW5lZCkKICoKICoKICoKICogTE9HX0FVVEhQUklWCiAqIHNlY3VyaXR5L2F1dGhvcml6YXRpb24gbWVzc2FnZXMgKHByaXZhdGUpCiAqCiAqCiAqIExPR19DUk9OCiAqIGNsb2NrIGRhZW1vbiAoY3JvbiBhbmQgYXQpCiAqCiAqCiAqIExPR19EQUVNT04KICogb3RoZXIgc3lzdGVtIGRhZW1vbnMKICoKICoKICogTE9HX0tFUk4KICoga2VybmVsIG1lc3NhZ2VzCiAqCiAqCiAqIExPR19MT0NBTDAgLi4uIExPR19MT0NBTDcKICogcmVzZXJ2ZWQgZm9yIGxvY2FsIHVzZSwgdGhlc2UgYXJlIG5vdCBhdmFpbGFibGUgaW4gV2luZG93cwogKgogKgogKiBMT0dfTFBSCiAqIGxpbmUgcHJpbnRlciBzdWJzeXN0ZW0KICoKICoKICogTE9HX01BSUwKICogbWFpbCBzdWJzeXN0ZW0KICoKICoKICogTE9HX05FV1MKICogVVNFTkVUIG5ld3Mgc3Vic3lzdGVtCiAqCiAqCiAqIExPR19TWVNMT0cKICogbWVzc2FnZXMgZ2VuZXJhdGVkIGludGVybmFsbHkgYnkgc3lzbG9nZAogKgogKgogKiBMT0dfVVNFUgogKiBnZW5lcmljIHVzZXItbGV2ZWwgbWVzc2FnZXMKICoKICoKICogTE9HX1VVQ1AKICogVVVDUCBzdWJzeXN0ZW0KICoKICoKICoKICoKICoKICogTE9HX1VTRVIgaXMgdGhlIG9ubHkgdmFsaWQgbG9nIHR5cGUgdW5kZXIgV2luZG93cwogKiBvcGVyYXRpbmcgc3lzdGVtcwogKiBAdGhyb3dzIE5ldHdvcmtFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wZW5sb2coc3RyaW5nICRpZGVudCwgaW50ICRvcHRpb24sIGludCAkZmFjaWxpdHkpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb3BlbmxvZygkaWRlbnQsICRvcHRpb24sICRmYWNpbGl0eSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBOZXR3b3JrRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBzeXNsb2cgZ2VuZXJhdGVzIGEgbG9nIG1lc3NhZ2UgdGhhdCB3aWxsIGJlCiAqIGRpc3RyaWJ1dGVkIGJ5IHRoZSBzeXN0ZW0gbG9nZ2VyLgogKgogKiBGb3IgaW5mb3JtYXRpb24gb24gc2V0dGluZyB1cCBhIHVzZXIgZGVmaW5lZCBsb2cgaGFuZGxlciwgc2VlIHRoZQogKiBzeXNsb2cuY29uZgogKiA1IFVuaXggbWFudWFsIHBhZ2UuICBNb3JlCiAqIGluZm9ybWF0aW9uIG9uIHRoZSBzeXNsb2cgZmFjaWxpdGllcyBhbmQgb3B0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUgbWFuCiAqIHBhZ2VzIGZvciBzeXNsb2cKICogMyBvbiBVbml4IG1hY2hpbmVzLgogKgogKiBAcGFyYW0gaW50ICRwcmlvcml0eSBwcmlvcml0eSBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmYWNpbGl0eSBhbmQKICogdGhlIGxldmVsLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOgogKgogKiBzeXNsb2cgUHJpb3JpdGllcyAoaW4gZGVzY2VuZGluZyBvcmRlcikKICoKICoKICoKICogQ29uc3RhbnQKICogRGVzY3JpcHRpb24KICoKICoKICoKICoKICogTE9HX0VNRVJHCiAqIHN5c3RlbSBpcyB1bnVzYWJsZQogKgogKgogKiBMT0dfQUxFUlQKICogYWN0aW9uIG11c3QgYmUgdGFrZW4gaW1tZWRpYXRlbHkKICoKICoKICogTE9HX0NSSVQKICogY3JpdGljYWwgY29uZGl0aW9ucwogKgogKgogKiBMT0dfRVJSCiAqIGVycm9yIGNvbmRpdGlvbnMKICoKICoKICogTE9HX1dBUk5JTkcKICogd2FybmluZyBjb25kaXRpb25zCiAqCiAqCiAqIExPR19OT1RJQ0UKICogbm9ybWFsLCBidXQgc2lnbmlmaWNhbnQsIGNvbmRpdGlvbgogKgogKgogKiBMT0dfSU5GTwogKiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UKICoKICoKICogTE9HX0RFQlVHCiAqIGRlYnVnLWxldmVsIG1lc3NhZ2UKICoKICoKICoKICoKICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBzZW5kLCBleGNlcHQgdGhhdCB0aGUgdHdvIGNoYXJhY3RlcnMKICogJW0gd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgZXJyb3IgbWVzc2FnZSBzdHJpbmcKICogKHN0cmVycm9yKSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcmVzZW50IHZhbHVlIG9mCiAqIGVycm5vLgogKiBAdGhyb3dzIE5ldHdvcmtFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHN5c2xvZyhpbnQgJHByaW9yaXR5LCBzdHJpbmcgJG1lc3NhZ2UpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc3lzbG9nKCRwcmlvcml0eSwgJG1lc3NhZ2UpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTmV0d29ya0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/oci8.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xPY2k4RXhjZXB0aW9uOwoKLyoqCiAqIEJpbmRzIHRoZSBQSFAgYXJyYXkgdmFyX2FycmF5IHRvIHRoZSBPcmFjbGUKICogcGxhY2Vob2xkZXIgbmFtZSwgd2hpY2ggcG9pbnRzIHRvIGFuIE9yYWNsZSBQTC9TUUwKICogYXJyYXkuIFdoZXRoZXIgaXQgd2lsbCBiZSB1c2VkIGZvciBpbnB1dCBvciBvdXRwdXQgd2lsbCBiZSBkZXRlcm1pbmVkIGF0CiAqIHJ1bi10aW1lLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0YXRlbWVudCBBIHZhbGlkIE9DSSBzdGF0ZW1lbnQgaWRlbnRpZmllci4KICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgT3JhY2xlIHBsYWNlaG9sZGVyLgogKiBAcGFyYW0gYXJyYXkgJHZhcl9hcnJheSBBbiBhcnJheS4KICogQHBhcmFtIGludCAkbWF4X3RhYmxlX2xlbmd0aCBTZXRzIHRoZSBtYXhpbXVtIGxlbmd0aCBib3RoIGZvciBpbmNvbWluZyBhbmQgcmVzdWx0IGFycmF5cy4KICogQHBhcmFtIGludCAkbWF4X2l0ZW1fbGVuZ3RoIFNldHMgbWF4aW11bSBsZW5ndGggZm9yIGFycmF5IGl0ZW1zLiBJZiBub3Qgc3BlY2lmaWVkIG9yIGVxdWFscyB0byAtMSwKICogb2NpX2JpbmRfYXJyYXlfYnlfbmFtZSB3aWxsIGZpbmQgdGhlIGxvbmdlc3QKICogZWxlbWVudCBpbiB0aGUgaW5jb21pbmcgYXJyYXkgYW5kIHdpbGwgdXNlIGl0IGFzIHRoZSBtYXhpbXVtIGxlbmd0aC4KICogQHBhcmFtIGludCAkdHlwZSBTaG91bGQgYmUgdXNlZCB0byBzZXQgdGhlIHR5cGUgb2YgUEwvU1FMIGFycmF5IGl0ZW1zLiBTZWUgbGlzdCBvZgogKiBhdmFpbGFibGUgdHlwZXMgYmVsb3c6CiAqCiAqCiAqCiAqCiAqIFNRTFRfTlVNIC0gZm9yIGFycmF5cyBvZiBOVU1CRVIuCiAqCiAqCiAqCiAqCiAqIFNRTFRfSU5UIC0gZm9yIGFycmF5cyBvZiBJTlRFR0VSIChOb3RlOiBJTlRFR0VSCiAqIGl0IGlzIGFjdHVhbGx5IGEgc3lub255bSBmb3IgTlVNQkVSKDM4KSwgYnV0CiAqIFNRTFRfTlVNIHR5cGUgd29uJ3Qgd29yayBpbiB0aGlzIGNhc2UgZXZlbgogKiB0aG91Z2ggdGhleSBhcmUgc3lub255bXMpLgogKgogKgogKgogKgogKiBTUUxUX0ZMVCAtIGZvciBhcnJheXMgb2YgRkxPQVQuCiAqCiAqCiAqCiAqCiAqIFNRTFRfQUZDIC0gZm9yIGFycmF5cyBvZiBDSEFSLgogKgogKgogKgogKgogKiBTUUxUX0NIUiAtIGZvciBhcnJheXMgb2YgVkFSQ0hBUjIuCiAqCiAqCiAqCiAqCiAqIFNRTFRfVkNTIC0gZm9yIGFycmF5cyBvZiBWQVJDSEFSLgogKgogKgogKgogKgogKiBTUUxUX0FWQyAtIGZvciBhcnJheXMgb2YgQ0hBUlouCiAqCiAqCiAqCiAqCiAqIFNRTFRfU1RSIC0gZm9yIGFycmF5cyBvZiBTVFJJTkcuCiAqCiAqCiAqCiAqCiAqIFNRTFRfTFZDIC0gZm9yIGFycmF5cyBvZiBMT05HIFZBUkNIQVIuCiAqCiAqCiAqCiAqCiAqIFNRTFRfT0RUIC0gZm9yIGFycmF5cyBvZiBEQVRFLgogKgogKgogKgogKgogKiBTUUxUX05VTSAtIGZvciBhcnJheXMgb2YgTlVNQkVSLgogKgogKiBTUUxUX0lOVCAtIGZvciBhcnJheXMgb2YgSU5URUdFUiAoTm90ZTogSU5URUdFUgogKiBpdCBpcyBhY3R1YWxseSBhIHN5bm9ueW0gZm9yIE5VTUJFUigzOCksIGJ1dAogKiBTUUxUX05VTSB0eXBlIHdvbid0IHdvcmsgaW4gdGhpcyBjYXNlIGV2ZW4KICogdGhvdWdoIHRoZXkgYXJlIHN5bm9ueW1zKS4KICoKICogU1FMVF9GTFQgLSBmb3IgYXJyYXlzIG9mIEZMT0FULgogKgogKiBTUUxUX0FGQyAtIGZvciBhcnJheXMgb2YgQ0hBUi4KICoKICogU1FMVF9DSFIgLSBmb3IgYXJyYXlzIG9mIFZBUkNIQVIyLgogKgogKiBTUUxUX1ZDUyAtIGZvciBhcnJheXMgb2YgVkFSQ0hBUi4KICoKICogU1FMVF9BVkMgLSBmb3IgYXJyYXlzIG9mIENIQVJaLgogKgogKiBTUUxUX1NUUiAtIGZvciBhcnJheXMgb2YgU1RSSU5HLgogKgogKiBTUUxUX0xWQyAtIGZvciBhcnJheXMgb2YgTE9ORyBWQVJDSEFSLgogKgogKiBTUUxUX09EVCAtIGZvciBhcnJheXMgb2YgREFURS4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfYmluZF9hcnJheV9ieV9uYW1lKCRzdGF0ZW1lbnQsIHN0cmluZyAkbmFtZSwgYXJyYXkgJiR2YXJfYXJyYXksIGludCAkbWF4X3RhYmxlX2xlbmd0aCwgaW50ICRtYXhfaXRlbV9sZW5ndGggPSAtMSwgaW50ICR0eXBlID0gU1FMVF9BRkMpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX2JpbmRfYXJyYXlfYnlfbmFtZSgkc3RhdGVtZW50LCAkbmFtZSwgJHZhcl9hcnJheSwgJG1heF90YWJsZV9sZW5ndGgsICRtYXhfaXRlbV9sZW5ndGgsICR0eXBlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9jaThFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEJpbmRzIGEgUEhQIHZhcmlhYmxlIHZhcmlhYmxlIHRvIHRoZSBPcmFjbGUKICogYmluZCB2YXJpYWJsZSBwbGFjZWhvbGRlciBidl9uYW1lLiAgQmluZGluZwogKiBpcyBpbXBvcnRhbnQgZm9yIE9yYWNsZSBkYXRhYmFzZSBwZXJmb3JtYW5jZSBhbmQgYWxzbyBhcyBhIHdheSB0bwogKiBhdm9pZCBTUUwgSW5qZWN0aW9uIHNlY3VyaXR5IGlzc3Vlcy4KICoKICogQmluZGluZyBhbGxvd3MgdGhlIGRhdGFiYXNlIHRvIHJldXNlIHRoZSBzdGF0ZW1lbnQgY29udGV4dCBhbmQKICogY2FjaGVzIGZyb20gcHJldmlvdXMgZXhlY3V0aW9ucyBvZiB0aGUgc3RhdGVtZW50LCBldmVuIGlmIGFub3RoZXIKICogdXNlciBvciBwcm9jZXNzIG9yaWdpbmFsbHkgZXhlY3V0ZWQgaXQuICBCaW5kaW5nIHJlZHVjZXMgU1FMCiAqIEluamVjdGlvbiBjb25jZXJucyBiZWNhdXNlIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIGJpbmQKICogdmFyaWFibGUgaXMgbmV2ZXIgdHJlYXRlZCBhcyBwYXJ0IG9mIHRoZSBTUUwgc3RhdGVtZW50LiAgSXQgZG9lcwogKiBub3QgbmVlZCBxdW90aW5nIG9yIGVzY2FwaW5nLgogKgogKiBQSFAgdmFyaWFibGVzIHRoYXQgaGF2ZSBiZWVuIGJvdW5kIGNhbiBiZSBjaGFuZ2VkIGFuZCB0aGUKICogc3RhdGVtZW50IHJlLWV4ZWN1dGVkIHdpdGhvdXQgbmVlZGluZyB0byByZS1wYXJzZSB0aGUgc3RhdGVtZW50IG9yCiAqIHJlLWJpbmQuCiAqCiAqIEluIE9yYWNsZSwgYmluZCB2YXJpYWJsZXMgYXJlIGNvbW1vbmx5IGRpdmlkZWQKICogaW50byBJTiBiaW5kcyBmb3IgdmFsdWVzIHRoYXQgYXJlIHBhc3NlZCBpbnRvCiAqIHRoZSBkYXRhYmFzZSwgYW5kIE9VVCBiaW5kcyBmb3IgdmFsdWVzIHRoYXQgYXJlCiAqIHJldHVybmVkIHRvIFBIUC4gIEEgYmluZCB2YXJpYWJsZSBtYXkgYmUKICogYm90aCBJTiBhbmQgT1VULiAgV2hldGhlciBhCiAqIGJpbmQgdmFyaWFibGUgd2lsbCBiZSB1c2VkIGZvciBpbnB1dCBvciBvdXRwdXQgaXMgZGV0ZXJtaW5lZCBhdAogKiBydW4tdGltZS4KICoKICogWW91IG11c3Qgc3BlY2lmeSBtYXhsZW5ndGggd2hlbiB1c2luZwogKiBhbiBPVVQgYmluZCBzbyB0aGF0IFBIUCBhbGxvY2F0ZXMgZW5vdWdoIG1lbW9yeQogKiB0byBob2xkIHRoZSByZXR1cm5lZCB2YWx1ZS4KICoKICogRm9yIElOIGJpbmRzIGl0IGlzIHJlY29tbWVuZGVkIHRvIHNldAogKiB0aGUgbWF4bGVuZ3RoIGxlbmd0aCBpZiB0aGUgc3RhdGVtZW50IGlzCiAqIHJlLWV4ZWN1dGVkIG11bHRpcGxlIHRpbWVzIHdpdGggZGlmZmVyZW50IHZhbHVlcyBmb3IgdGhlIFBIUAogKiB2YXJpYWJsZS4gIE90aGVyd2lzZSBPcmFjbGUgbWF5IHRydW5jYXRlIGRhdGEgdG8gdGhlIGxlbmd0aCBvZiB0aGUKICogaW5pdGlhbCBQSFAgdmFyaWFibGUgdmFsdWUuICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRoZSBtYXhpbXVtCiAqIGxlbmd0aCB3aWxsIGJlLCB0aGVuIHJlLWNhbGwgb2NpX2JpbmRfYnlfbmFtZQogKiB3aXRoIHRoZSBjdXJyZW50IGRhdGEgc2l6ZSBwcmlvciB0bwogKiBlYWNoIG9jaV9leGVjdXRlIGNhbGwuIEJpbmRpbmcgYW4KICogdW5uZWNlc3NhcmlseSBsYXJnZSBsZW5ndGggd2lsbCBoYXZlIGFuIGltcGFjdCBvbiBwcm9jZXNzIG1lbW9yeQogKiBpbiB0aGUgZGF0YWJhc2UuCiAqCiAqIEEgYmluZCBjYWxsIHRlbGxzIE9yYWNsZSB3aGljaCBtZW1vcnkgYWRkcmVzcyB0byByZWFkIGRhdGEgZnJvbS4KICogRm9yIElOIGJpbmRzIHRoYXQgYWRkcmVzcyBuZWVkcyB0byBjb250YWluCiAqIHZhbGlkIGRhdGEgd2hlbiBvY2lfZXhlY3V0ZSBpcyBjYWxsZWQuICBUaGlzCiAqIG1lYW5zIHRoYXQgdGhlIHZhcmlhYmxlIGJvdW5kIG11c3QgcmVtYWluIGluIHNjb3BlIHVudGlsCiAqIGV4ZWN1dGlvbi4gIElmIGl0IGRvZXNuJ3QsIHVuZXhwZWN0ZWQgcmVzdWx0cyBvciBlcnJvcnMgc3VjaCBhcwogKiAiT1JBLTAxNDYwOiB1bmltcGxlbWVudGVkIG9yIHVucmVhc29uYWJsZSBjb252ZXJzaW9uIHJlcXVlc3RlZCIKICogbWF5IG9jY3VyLiAgRm9yIE9VVCBiaW5kcyBvbmUgc3ltcHRvbSBpcyBubwogKiB2YWx1ZSBiZWluZyBzZXQgaW4gdGhlIFBIUCB2YXJpYWJsZS4KICoKICogRm9yIGEgc3RhdGVtZW50IHRoYXQgaXMgcmVwZWF0ZWRseSBleGVjdXRlZCwgYmluZGluZyB2YWx1ZXMgdGhhdAogKiBuZXZlciBjaGFuZ2UgbWF5IHJlZHVjZSB0aGUgYWJpbGl0eSBvZiB0aGUgT3JhY2xlIG9wdGltaXplciB0bwogKiBjaG9vc2UgdGhlIGJlc3Qgc3RhdGVtZW50IGV4ZWN1dGlvbiBwbGFuLiAgTG9uZyBydW5uaW5nIHN0YXRlbWVudHMKICogdGhhdCBhcmUgcmFyZWx5IHJlLWV4ZWN1dGVkIG1heSBub3QgYmVuZWZpdCBmcm9tIGJpbmRpbmcuICBIb3dldmVyCiAqIGluIGJvdGggY2FzZXMsIGJpbmRpbmcgbWlnaHQgYmUgc2FmZXIgdGhhbiBqb2luaW5nIHN0cmluZ3MgaW50byBhCiAqIFNRTCBzdGF0ZW1lbnQsIGFzIHRoaXMgY2FuIGJlIGEgc2VjdXJpdHkgcmlzayBpZiB1bmZpbHRlcmVkIHVzZXIKICogdGV4dCBpcyBjb25jYXRlbmF0ZWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50IEEgdmFsaWQgT0NJOCBzdGF0ZW1lbnQgaWRlbnRpZmVyLgogKiBAcGFyYW0gc3RyaW5nICRidl9uYW1lIFRoZSBjb2xvbi1wcmVmaXhlZCBiaW5kIHZhcmlhYmxlIHBsYWNlaG9sZGVyIHVzZWQgaW4gdGhlCiAqIHN0YXRlbWVudC4gIFRoZSBjb2xvbiBpcyBvcHRpb25hbAogKiBpbiBidl9uYW1lLiBPcmFjbGUgZG9lcyBub3QgdXNlIHF1ZXN0aW9uCiAqIG1hcmtzIGZvciBwbGFjZWhvbGRlcnMuCiAqIEBwYXJhbSBtaXhlZCAkdmFyaWFibGUgVGhlIFBIUCB2YXJpYWJsZSB0byBiZSBhc3NvY2lhdGVkIHdpdGggYnZfbmFtZQogKiBAcGFyYW0gaW50ICRtYXhsZW5ndGggU2V0cyB0aGUgbWF4aW11bSBsZW5ndGggZm9yIHRoZSBkYXRhLiBJZiB5b3Ugc2V0IGl0IHRvIC0xLCB0aGlzCiAqIGZ1bmN0aW9uIHdpbGwgdXNlIHRoZSBjdXJyZW50IGxlbmd0aAogKiBvZiB2YXJpYWJsZSB0byBzZXQgdGhlIG1heGltdW0KICogbGVuZ3RoLiBJbiB0aGlzIGNhc2UgdGhlIHZhcmlhYmxlIG11c3QKICogZXhpc3QgYW5kIGNvbnRhaW4gZGF0YQogKiB3aGVuIG9jaV9iaW5kX2J5X25hbWUgaXMgY2FsbGVkLgogKiBAcGFyYW0gaW50ICR0eXBlIFRoZSBkYXRhdHlwZSB0aGF0IE9yYWNsZSB3aWxsIHRyZWF0IHRoZSBkYXRhIGFzLiAgVGhlCiAqIGRlZmF1bHQgdHlwZSB1c2VkCiAqIGlzIFNRTFRfQ0hSLiBPcmFjbGUgd2lsbCBjb252ZXJ0IHRoZSBkYXRhCiAqIGJldHdlZW4gdGhpcyB0eXBlIGFuZCB0aGUgZGF0YWJhc2UgY29sdW1uIChvciBQTC9TUUwgdmFyaWFibGUKICogdHlwZSksIHdoZW4gcG9zc2libGUuCiAqCiAqIElmIHlvdSBuZWVkIHRvIGJpbmQgYW4gYWJzdHJhY3QgZGF0YXR5cGUgKExPQi9ST1dJRC9CRklMRSkgeW91CiAqIG5lZWQgdG8gYWxsb2NhdGUgaXQgZmlyc3QgdXNpbmcgdGhlCiAqIG9jaV9uZXdfZGVzY3JpcHRvciBmdW5jdGlvbi4gVGhlCiAqIGxlbmd0aCBpcyBub3QgdXNlZCBmb3IgYWJzdHJhY3QgZGF0YXR5cGVzCiAqIGFuZCBzaG91bGQgYmUgc2V0IHRvIC0xLgogKgogKiBQb3NzaWJsZSB2YWx1ZXMgZm9yIHR5cGUgYXJlOgogKgogKgogKgogKiBTUUxUX0JGSUxFRSBvciBPQ0lfQl9CRklMRQogKiAtIGZvciBCRklMRXM7CiAqCiAqCiAqCiAqCiAqIFNRTFRfQ0ZJTEVFIG9yIE9DSV9CX0NGSUxFRQogKiAtIGZvciBDRklMRXM7CiAqCiAqCiAqCiAqCiAqIFNRTFRfQ0xPQiBvciBPQ0lfQl9DTE9CCiAqIC0gZm9yIENMT0JzOwogKgogKgogKgogKgogKiBTUUxUX0JMT0Igb3IgT0NJX0JfQkxPQgogKiAtIGZvciBCTE9CczsKICoKICoKICoKICoKICogU1FMVF9SREQgb3IgT0NJX0JfUk9XSUQKICogLSBmb3IgUk9XSURzOwogKgogKgogKgogKgogKiBTUUxUX05UWSBvciBPQ0lfQl9OVFkKICogLSBmb3IgbmFtZWQgZGF0YXR5cGVzOwogKgogKgogKgogKgogKiBTUUxUX0lOVCBvciBPQ0lfQl9JTlQgLSBmb3IgaW50ZWdlcnM7CiAqCiAqCiAqCiAqCiAqIFNRTFRfQ0hSIC0gZm9yIFZBUkNIQVJzOwogKgogKgogKgogKgogKiBTUUxUX0JJTiBvciBPQ0lfQl9CSU4KICogLSBmb3IgUkFXIGNvbHVtbnM7CiAqCiAqCiAqCiAqCiAqIFNRTFRfTE5HIC0gZm9yIExPTkcgY29sdW1uczsKICoKICoKICoKICoKICogU1FMVF9MQkkgLSBmb3IgTE9ORyBSQVcgY29sdW1uczsKICoKICoKICoKICoKICogU1FMVF9SU0VUIC0gZm9yIGN1cnNvcnMgY3JlYXRlZAogKiB3aXRoIG9jaV9uZXdfY3Vyc29yOwogKgogKgogKgogKgogKiBTUUxUX0JPTCBvciBPQ0lfQl9CT0wKICogLSBmb3IgUEwvU1FMIEJPT0xFQU5zIChSZXF1aXJlcyBPQ0k4IDIuMC43IGFuZCBPcmFjbGUgRGF0YWJhc2UgMTJjKQogKgogKgogKgogKgogKiBTUUxUX0JGSUxFRSBvciBPQ0lfQl9CRklMRQogKiAtIGZvciBCRklMRXM7CiAqCiAqIFNRTFRfQ0ZJTEVFIG9yIE9DSV9CX0NGSUxFRQogKiAtIGZvciBDRklMRXM7CiAqCiAqIFNRTFRfQ0xPQiBvciBPQ0lfQl9DTE9CCiAqIC0gZm9yIENMT0JzOwogKgogKiBTUUxUX0JMT0Igb3IgT0NJX0JfQkxPQgogKiAtIGZvciBCTE9CczsKICoKICogU1FMVF9SREQgb3IgT0NJX0JfUk9XSUQKICogLSBmb3IgUk9XSURzOwogKgogKiBTUUxUX05UWSBvciBPQ0lfQl9OVFkKICogLSBmb3IgbmFtZWQgZGF0YXR5cGVzOwogKgogKiBTUUxUX0lOVCBvciBPQ0lfQl9JTlQgLSBmb3IgaW50ZWdlcnM7CiAqCiAqIFNRTFRfQ0hSIC0gZm9yIFZBUkNIQVJzOwogKgogKiBTUUxUX0JJTiBvciBPQ0lfQl9CSU4KICogLSBmb3IgUkFXIGNvbHVtbnM7CiAqCiAqIFNRTFRfTE5HIC0gZm9yIExPTkcgY29sdW1uczsKICoKICogU1FMVF9MQkkgLSBmb3IgTE9ORyBSQVcgY29sdW1uczsKICoKICogU1FMVF9SU0VUIC0gZm9yIGN1cnNvcnMgY3JlYXRlZAogKiB3aXRoIG9jaV9uZXdfY3Vyc29yOwogKgogKiBTUUxUX0JPTCBvciBPQ0lfQl9CT0wKICogLSBmb3IgUEwvU1FMIEJPT0xFQU5zIChSZXF1aXJlcyBPQ0k4IDIuMC43IGFuZCBPcmFjbGUgRGF0YWJhc2UgMTJjKQogKiBAdGhyb3dzIE9jaThFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9jaV9iaW5kX2J5X25hbWUoJHN0YXRlbWVudCwgc3RyaW5nICRidl9uYW1lLCAmJHZhcmlhYmxlLCBpbnQgJG1heGxlbmd0aCA9IC0xLCBpbnQgJHR5cGUgPSBTUUxUX0NIUik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvY2lfYmluZF9ieV9uYW1lKCRzdGF0ZW1lbnQsICRidl9uYW1lLCAkdmFyaWFibGUsICRtYXhsZW5ndGgsICR0eXBlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9jaThFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEludmFsaWRhdGVzIGEgY3Vyc29yLCBmcmVlaW5nIGFsbCBhc3NvY2lhdGVkIHJlc291cmNlcyBhbmQgY2FuY2VscyB0aGUKICogYWJpbGl0eSB0byByZWFkIGZyb20gaXQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50IEFuIE9DSSBzdGF0ZW1lbnQuCiAqIEB0aHJvd3MgT2NpOEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2NpX2NhbmNlbCgkc3RhdGVtZW50KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9jaV9jYW5jZWwoJHN0YXRlbWVudCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBVbnNldHMgY29ubmVjdGlvbi4gIFRoZSB1bmRlcmx5aW5nIGRhdGFiYXNlCiAqIGNvbm5lY3Rpb24gaXMgY2xvc2VkIGlmIG5vIG90aGVyIHJlc291cmNlcyBhcmUgdXNpbmcgaXQgYW5kIGlmIGl0CiAqIHdhcyBjcmVhdGVkIHdpdGggb2NpX2Nvbm5lY3QKICogb3Igb2NpX25ld19jb25uZWN0LgogKgogKiBJdCBpcyByZWNvbW1lbmRlZCB0byBjbG9zZSBjb25uZWN0aW9ucyB0aGF0IGFyZSBubyBsb25nZXIgbmVlZGVkCiAqIGJlY2F1c2UgdGhpcyBtYWtlcyBkYXRhYmFzZSByZXNvdXJjZXMgYXZhaWxhYmxlIGZvciBvdGhlciB1c2Vycy4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIEFuIE9yYWNsZSBjb25uZWN0aW9uIGlkZW50aWZpZXIgcmV0dXJuZWQgYnkKICogb2NpX2Nvbm5lY3QsIG9jaV9wY29ubmVjdCwKICogb3Igb2NpX25ld19jb25uZWN0LgogKiBAdGhyb3dzIE9jaThFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9jaV9jbG9zZSgkY29ubmVjdGlvbik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvY2lfY2xvc2UoJGNvbm5lY3Rpb24pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT2NpOEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ29tbWl0cyB0aGUgb3V0c3RhbmRpbmcgdHJhbnNhY3Rpb24gZm9yIHRoZQogKiBPcmFjbGUgY29ubmVjdGlvbi4gIEEgY29tbWl0IGVuZHMgdGhlCiAqIGN1cnJlbnQgdHJhbnNhY3Rpb24gYW5kIG1ha2VzIHBlcm1hbmVudCBhbGwgY2hhbmdlcy4gIEl0IHJlbGVhc2VzCiAqIGFsbCBsb2NrcyBoZWxkLgogKgogKiBBIHRyYW5zYWN0aW9uIGJlZ2lucyB3aGVuIHRoZSBmaXJzdCBTUUwgc3RhdGVtZW50IHRoYXQgY2hhbmdlcyBkYXRhCiAqIGlzIGV4ZWN1dGVkIHdpdGggb2NpX2V4ZWN1dGUgdXNpbmcKICogdGhlIE9DSV9OT19BVVRPX0NPTU1JVCBmbGFnLiAgRnVydGhlciBkYXRhCiAqIGNoYW5nZXMgbWFkZSBieSBvdGhlciBzdGF0ZW1lbnRzIGJlY29tZSBwYXJ0IG9mIHRoZSBzYW1lCiAqIHRyYW5zYWN0aW9uLiAgRGF0YSBjaGFuZ2VzIG1hZGUgaW4gYSB0cmFuc2FjdGlvbiBhcmUgdGVtcG9yYXJ5CiAqIHVudGlsIHRoZSB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb3Igcm9sbGVkIGJhY2suICBPdGhlciB1c2VycyBvZgogKiB0aGUgZGF0YWJhc2Ugd2lsbCBub3Qgc2VlIHRoZSBjaGFuZ2VzIHVudGlsIHRoZXkgYXJlIGNvbW1pdHRlZC4KICoKICogV2hlbiBpbnNlcnRpbmcgb3IgdXBkYXRpbmcgZGF0YSwgdXNpbmcgdHJhbnNhY3Rpb25zIGlzIHJlY29tbWVuZGVkCiAqIGZvciByZWxhdGlvbmFsIGRhdGEgY29uc2lzdGVuY3kgYW5kIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gQW4gT3JhY2xlIGNvbm5lY3Rpb24gaWRlbnRpZmllciwgcmV0dXJuZWQgYnkKICogb2NpX2Nvbm5lY3QsIG9jaV9wY29ubmVjdCwgb3Igb2NpX25ld19jb25uZWN0LgogKiBAdGhyb3dzIE9jaThFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9jaV9jb21taXQoJGNvbm5lY3Rpb24pOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX2NvbW1pdCgkY29ubmVjdGlvbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBSZXR1cm5zIGEgY29ubmVjdGlvbiBpZGVudGlmaWVyIG5lZWRlZCBmb3IgbW9zdCBvdGhlciBPQ0k4IG9wZXJhdGlvbnMuCiAqCiAqIFNlZSBDb25uZWN0aW9uIEhhbmRsaW5nIGZvcgogKiBnZW5lcmFsIGluZm9ybWF0aW9uIG9uIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBhbmQgY29ubmVjdGlvbgogKiBwb29saW5nLgogKgogKiBGcm9tIFBIUCA1LjEuMiAoUEVDTCBPQ0k4IDEuMSkgb2NpX2Nsb3NlIGNhbgogKiBiZSB1c2VkIHRvIGNsb3NlIHRoZSBjb25uZWN0aW9uLgogKgogKiBUaGUgc2Vjb25kIGFuZCBzdWJzZXF1ZW50IGNhbGxzIHRvIG9jaV9jb25uZWN0CiAqIHdpdGggdGhlIHNhbWUgcGFyYW1ldGVycyB3aWxsIHJldHVybiB0aGUgY29ubmVjdGlvbiBoYW5kbGUgcmV0dXJuZWQKICogZnJvbSB0aGUgZmlyc3QgY2FsbC4gVGhpcyBtZWFucyB0aGF0IHRyYW5zYWN0aW9ucyBpbiBvbmUgaGFuZGxlIGFyZQogKiBhbHNvIGluIHRoZSBvdGhlciBoYW5kbGVzLCBiZWNhdXNlIHRoZXkgdXNlIHRoZQogKiBzYW1lIHVuZGVybHlpbmcgZGF0YWJhc2UgY29ubmVjdGlvbi4gSWYgdHdvCiAqIGhhbmRsZXMgbmVlZCB0byBiZSB0cmFuc2FjdGlvbmFsbHkgaXNvbGF0ZWQgZnJvbSBlYWNoIG90aGVyLCB1c2UKICogb2NpX25ld19jb25uZWN0IGluc3RlYWQuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHVzZXJuYW1lIFRoZSBPcmFjbGUgdXNlciBuYW1lLgogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZCBUaGUgcGFzc3dvcmQgZm9yIHVzZXJuYW1lLgogKiBAcGFyYW0gc3RyaW5nICRjb25uZWN0aW9uX3N0cmluZyBDb250YWlucwogKiB0aGUgT3JhY2xlIGluc3RhbmNlIHRvIGNvbm5lY3QgdG8uIEl0IGNhbiBiZQogKiBhbiBFYXN5IENvbm5lY3QKICogc3RyaW5nLCBvciBhIENvbm5lY3QgTmFtZSBmcm9tCiAqIHRoZSB0bnNuYW1lcy5vcmEgZmlsZSwgb3IgdGhlIG5hbWUgb2YgYSBsb2NhbAogKiBPcmFjbGUgaW5zdGFuY2UuCiAqCiAqIElmIG5vdCBzcGVjaWZpZWQsIFBIUCB1c2VzCiAqIGVudmlyb25tZW50IHZhcmlhYmxlcyBzdWNoIGFzIFRXT19UQVNLIChvbiBMaW51eCkKICogb3IgTE9DQUwgKG9uIFdpbmRvd3MpCiAqIGFuZCBPUkFDTEVfU0lEIHRvIGRldGVybWluZSB0aGUKICogT3JhY2xlIGluc3RhbmNlIHRvIGNvbm5lY3QgdG8uCiAqCiAqCiAqIFRvIHVzZSB0aGUgRWFzeSBDb25uZWN0IG5hbWluZyBtZXRob2QsIFBIUCBtdXN0IGJlIGxpbmtlZCB3aXRoIE9yYWNsZQogKiAxMGcgb3IgZ3JlYXRlciBDbGllbnQgbGlicmFyaWVzLiBUaGUgRWFzeSBDb25uZWN0IHN0cmluZyBmb3IgT3JhY2xlCiAqIDEwZyBpcyBvZiB0aGUgZm9ybToKICogWy8vXWhvc3RfbmFtZVs6cG9ydF1bL3NlcnZpY2VfbmFtZV0uIEZyb20gT3JhY2xlCiAqIDExZywgdGhlIHN5bnRheCBpczoKICogWy8vXWhvc3RfbmFtZVs6cG9ydF1bL3NlcnZpY2VfbmFtZV1bOnNlcnZlcl90eXBlXVsvaW5zdGFuY2VfbmFtZV0uCiAqIFNlcnZpY2UgbmFtZXMgY2FuIGJlIGZvdW5kIGJ5IHJ1bm5pbmcgdGhlIE9yYWNsZQogKiB1dGlsaXR5IGxzbnJjdGwgc3RhdHVzIG9uIHRoZSBkYXRhYmFzZSBzZXJ2ZXIKICogbWFjaGluZS4KICoKICoKICogVGhlIHRuc25hbWVzLm9yYSBmaWxlIGNhbiBiZSBpbiB0aGUgT3JhY2xlIE5ldAogKiBzZWFyY2ggcGF0aCwgd2hpY2gKICogaW5jbHVkZXMgJE9SQUNMRV9IT01FL25ldHdvcmsvYWRtaW4KICogYW5kIC9ldGMuICBBbHRlcm5hdGl2ZWx5CiAqIHNldCBUTlNfQURNSU4gc28KICogdGhhdCAkVE5TX0FETUlOL3Ruc25hbWVzLm9yYSBpcyByZWFkLiAgTWFrZSBzdXJlCiAqIHRoZSB3ZWIgZGFlbW9uIGhhcyByZWFkIGFjY2VzcyB0byB0aGUgZmlsZS4KICogQHBhcmFtIHN0cmluZyAkY2hhcmFjdGVyX3NldCBEZXRlcm1pbmVzCiAqIHRoZSBjaGFyYWN0ZXIgc2V0IHVzZWQgYnkgdGhlIE9yYWNsZSBDbGllbnQgbGlicmFyaWVzLiAgVGhlIGNoYXJhY3RlcgogKiBzZXQgZG9lcyBub3QgbmVlZCB0byBtYXRjaCB0aGUgY2hhcmFjdGVyIHNldCB1c2VkIGJ5IHRoZSBkYXRhYmFzZS4gIElmCiAqIGl0IGRvZXNuJ3QgbWF0Y2gsIE9yYWNsZSB3aWxsIGRvIGl0cyBiZXN0IHRvIGNvbnZlcnQgZGF0YSB0byBhbmQgZnJvbQogKiB0aGUgZGF0YWJhc2UgY2hhcmFjdGVyIHNldC4gIERlcGVuZGluZyBvbiB0aGUgY2hhcmFjdGVyIHNldHMgdGhpcyBtYXkKICogbm90IGdpdmUgdXNhYmxlIHJlc3VsdHMuICBDb252ZXJzaW9uIGFsc28gYWRkcyBzb21lIHRpbWUgb3ZlcmhlYWQuCiAqCiAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZQogKiBPcmFjbGUgQ2xpZW50IGxpYnJhcmllcyBkZXRlcm1pbmUgYSBjaGFyYWN0ZXIgc2V0IGZyb20KICogdGhlIE5MU19MQU5HIGVudmlyb25tZW50IHZhcmlhYmxlLgogKgogKiBQYXNzaW5nIHRoaXMgcGFyYW1ldGVyIGNhbgogKiByZWR1Y2UgdGhlIHRpbWUgdGFrZW4gdG8gY29ubmVjdC4KICogQHBhcmFtIGludCAkc2Vzc2lvbl9tb2RlIFRoaXMKICogcGFyYW1ldGVyIGlzIGF2YWlsYWJsZSBzaW5jZSB2ZXJzaW9uIFBIUCA1IChQRUNMIE9DSTggMS4xKSBhbmQgYWNjZXB0cyB0aGUKICogZm9sbG93aW5nIHZhbHVlczogT0NJX0RFRkFVTFQsCiAqIE9DSV9TWVNPUEVSIGFuZCBPQ0lfU1lTREJBLgogKiBJZiBlaXRoZXIgT0NJX1NZU09QRVIgb3IKICogT0NJX1NZU0RCQSB3ZXJlIHNwZWNpZmllZCwgdGhpcyBmdW5jdGlvbiB3aWxsIHRyeQogKiB0byBlc3RhYmxpc2ggcHJpdmlsZWdlZCBjb25uZWN0aW9uIHVzaW5nIGV4dGVybmFsIGNyZWRlbnRpYWxzLgogKiBQcml2aWxlZ2VkIGNvbm5lY3Rpb25zIGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0LiBUbyBlbmFibGUgdGhlbSB5b3UKICogbmVlZCB0byBzZXQgb2NpOC5wcml2aWxlZ2VkX2Nvbm5lY3QKICogdG8gT24uCiAqCiAqCiAqIFBIUCA1LjMgKFBFQ0wgT0NJOCAxLjMuNCkgaW50cm9kdWNlZCB0aGUKICogT0NJX0NSRURfRVhUIG1vZGUgdmFsdWUuIFRoaXMgdGVsbHMgT3JhY2xlIHRvIHVzZQogKiBFeHRlcm5hbCBvciBPUyBhdXRoZW50aWNhdGlvbiwgd2hpY2ggbXVzdCBiZSBjb25maWd1cmVkIGluIHRoZQogKiBkYXRhYmFzZS4gIFRoZSBPQ0lfQ1JFRF9FWFQgZmxhZyBjYW4gb25seSBiZSB1c2VkCiAqIHdpdGggdXNlcm5hbWUgb2YgIi8iIGFuZCBhIGVtcHR5IHBhc3N3b3JkLgogKiBvY2k4LnByaXZpbGVnZWRfY29ubmVjdAogKiBtYXkgYmUgT24gb3IgT2ZmLgogKgogKgogKiBPQ0lfQ1JFRF9FWFQgbWF5IGJlIGNvbWJpbmVkIHdpdGggdGhlCiAqIE9DSV9TWVNPUEVSIG9yCiAqIE9DSV9TWVNEQkEgbW9kZXMuCiAqCiAqCiAqIE9DSV9DUkVEX0VYVCBpcyBub3Qgc3VwcG9ydGVkIG9uIFdpbmRvd3MgZm9yCiAqIHNlY3VyaXR5IHJlYXNvbnMuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhIGNvbm5lY3Rpb24gaWRlbnRpZmllci4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfY29ubmVjdChzdHJpbmcgJHVzZXJuYW1lLCBzdHJpbmcgJHBhc3N3b3JkLCBzdHJpbmcgJGNvbm5lY3Rpb25fc3RyaW5nID0gbnVsbCwgc3RyaW5nICRjaGFyYWN0ZXJfc2V0ID0gbnVsbCwgaW50ICRzZXNzaW9uX21vZGUgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHNlc3Npb25fbW9kZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcb2NpX2Nvbm5lY3QoJHVzZXJuYW1lLCAkcGFzc3dvcmQsICRjb25uZWN0aW9uX3N0cmluZywgJGNoYXJhY3Rlcl9zZXQsICRzZXNzaW9uX21vZGUpOwogICAgfSBlbHNlaWYgKCRjaGFyYWN0ZXJfc2V0ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvY2lfY29ubmVjdCgkdXNlcm5hbWUsICRwYXNzd29yZCwgJGNvbm5lY3Rpb25fc3RyaW5nLCAkY2hhcmFjdGVyX3NldCk7CiAgICB9IGVsc2VpZiAoJGNvbm5lY3Rpb25fc3RyaW5nICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvY2lfY29ubmVjdCgkdXNlcm5hbWUsICRwYXNzd29yZCwgJGNvbm5lY3Rpb25fc3RyaW5nKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxvY2lfY29ubmVjdCgkdXNlcm5hbWUsICRwYXNzd29yZCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEFzc29jaWF0ZXMgYSBQSFAgdmFyaWFibGUgd2l0aCBhIGNvbHVtbiBmb3IgcXVlcnkgZmV0Y2hlcyB1c2luZyBvY2lfZmV0Y2guCiAqCiAqIFRoZSBvY2lfZGVmaW5lX2J5X25hbWUgY2FsbCBtdXN0IG9jY3VyIGJlZm9yZQogKiBleGVjdXRpbmcgb2NpX2V4ZWN1dGUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50IEEgdmFsaWQgT0NJOCBzdGF0ZW1lbnQKICogaWRlbnRpZmllciBjcmVhdGVkIGJ5IG9jaV9wYXJzZSBhbmQgZXhlY3V0ZWQKICogYnkgb2NpX2V4ZWN1dGUsIG9yIGEgUkVGCiAqIENVUlNPUiBzdGF0ZW1lbnQgaWRlbnRpZmllci4KICogQHBhcmFtIHN0cmluZyAkY29sdW1uX25hbWUgVGhlIGNvbHVtbiBuYW1lIHVzZWQgaW4gdGhlIHF1ZXJ5LgogKgogKiBVc2UgdXBwZXJjYXNlIGZvciBPcmFjbGUncyBkZWZhdWx0LCBub24tY2FzZSBzZW5zaXRpdmUgY29sdW1uCiAqIG5hbWVzLiAgVXNlIHRoZSBleGFjdCBjb2x1bW4gbmFtZSBjYXNlIGZvciBjYXNlLXNlbnNpdGl2ZQogKiBjb2x1bW4gbmFtZXMuCiAqIEBwYXJhbSBtaXhlZCAkdmFyaWFibGUgVGhlIFBIUCB2YXJpYWJsZSB0aGF0IHdpbGwgY29udGFpbiB0aGUgcmV0dXJuZWQgY29sdW1uIHZhbHVlLgogKiBAcGFyYW0gaW50ICR0eXBlIFRoZSBkYXRhIHR5cGUgdG8gYmUgcmV0dXJuZWQuICBHZW5lcmFsbHkgbm90IG5lZWRlZC4gIE5vdGUgdGhhdAogKiBPcmFjbGUtc3R5bGUgZGF0YSBjb252ZXJzaW9ucyBhcmUgbm90IHBlcmZvcm1lZC4gIEZvciBleGFtcGxlLAogKiBTUUxUX0lOVCB3aWxsIGJlIGlnbm9yZWQgYW5kIHRoZSByZXR1cm5lZAogKiBkYXRhIHR5cGUgd2lsbCBzdGlsbCBiZSBTUUxUX0NIUi4KICoKICogWW91IGNhbiBvcHRpb25hbGx5IHVzZSBvY2lfbmV3X2Rlc2NyaXB0b3IKICogdG8gYWxsb2NhdGUgTE9CL1JPV0lEL0JGSUxFIGRlc2NyaXB0b3JzLgogKiBAdGhyb3dzIE9jaThFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9jaV9kZWZpbmVfYnlfbmFtZSgkc3RhdGVtZW50LCBzdHJpbmcgJGNvbHVtbl9uYW1lLCAmJHZhcmlhYmxlLCBpbnQgJHR5cGUgPSBTUUxUX0NIUik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvY2lfZGVmaW5lX2J5X25hbWUoJHN0YXRlbWVudCwgJGNvbHVtbl9uYW1lLCAkdmFyaWFibGUsICR0eXBlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9jaThFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEV4ZWN1dGVzIGEgc3RhdGVtZW50IHByZXZpb3VzbHkgcmV0dXJuZWQKICogZnJvbSBvY2lfcGFyc2UuCiAqCiAqIEFmdGVyIGV4ZWN1dGlvbiwgc3RhdGVtZW50cyBsaWtlIElOU0VSVCB3aWxsCiAqIGhhdmUgZGF0YSBjb21taXR0ZWQgdG8gdGhlIGRhdGFiYXNlIGJ5IGRlZmF1bHQuICBGb3Igc3RhdGVtZW50cwogKiBsaWtlIFNFTEVDVCwgZXhlY3V0aW9uIHBlcmZvcm1zIHRoZSBsb2dpYyBvZiB0aGUKICogcXVlcnkuIFF1ZXJ5IHJlc3VsdHMgY2FuIHN1YnNlcXVlbnRseSBiZSBmZXRjaGVkIGluIFBIUCB3aXRoCiAqIGZ1bmN0aW9ucyBsaWtlIG9jaV9mZXRjaF9hcnJheS4KICoKICogRWFjaCBwYXJzZWQgc3RhdGVtZW50IG1heSBiZSBleGVjdXRlZCBtdWx0aXBsZSB0aW1lcywgc2F2aW5nIHRoZQogKiBjb3N0IG9mIHJlLXBhcnNpbmcuICBUaGlzIGlzIGNvbW1vbmx5IHVzZWQKICogZm9yIElOU0VSVCBzdGF0ZW1lbnRzIHdoZW4gZGF0YSBpcyBib3VuZAogKiB3aXRoIG9jaV9iaW5kX2J5X25hbWUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50IEEgdmFsaWQgT0NJIHN0YXRlbWVudCBpZGVudGlmaWVyLgogKiBAcGFyYW0gaW50ICRtb2RlIEFuIG9wdGlvbmFsIHNlY29uZCBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbnN0YW50czoKICoKICogRXhlY3V0aW9uIE1vZGVzCiAqCiAqCiAqCiAqIENvbnN0YW50CiAqIERlc2NyaXB0aW9uCiAqCiAqCiAqCiAqCiAqIE9DSV9DT01NSVRfT05fU1VDQ0VTUwogKiBBdXRvbWF0aWNhbGx5IGNvbW1pdCBhbGwgb3V0c3RhbmRpbmcgY2hhbmdlcyBmb3IKICogdGhpcyBjb25uZWN0aW9uIHdoZW4gdGhlIHN0YXRlbWVudCBoYXMgc3VjY2VlZGVkLiBUaGlzCiAqIGlzIHRoZSBkZWZhdWx0LgogKgogKgogKiBPQ0lfREVTQ1JJQkVfT05MWQogKiBNYWtlIHF1ZXJ5IG1ldGEgZGF0YSBhdmFpbGFibGUgdG8gZnVuY3Rpb25zCiAqIGxpa2Ugb2NpX2ZpZWxkX25hbWUgYnV0IGRvIG5vdAogKiBjcmVhdGUgYSByZXN1bHQgc2V0LiBBbnkgc3Vic2VxdWVudCBmZXRjaCBjYWxsIHN1Y2gKICogYXMgb2NpX2ZldGNoX2FycmF5IHdpbGwKICogZmFpbC4KICoKICoKICogT0NJX05PX0FVVE9fQ09NTUlUCiAqIERvIG5vdCBhdXRvbWF0aWNhbGx5IGNvbW1pdCBjaGFuZ2VzLiAgUHJpb3IgdG8gUEhQCiAqIDUuMy4yIChQRUNMIE9DSTggMS40KQogKiB1c2UgT0NJX0RFRkFVTFQgd2hpY2ggaXMgZXF1aXZhbGVudAogKiB0byBPQ0lfTk9fQVVUT19DT01NSVQuCiAqCiAqCiAqCiAqCiAqCiAqIFVzaW5nIE9DSV9OT19BVVRPX0NPTU1JVCBtb2RlIHN0YXJ0cyBvciBjb250aW51ZXMgYQogKiB0cmFuc2FjdGlvbi4gVHJhbnNhY3Rpb25zIGFyZSBhdXRvbWF0aWNhbGx5IHJvbGxlZCBiYWNrIHdoZW4KICogdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkLCBvciB3aGVuIHRoZSBzY3JpcHQgZW5kcy4gIEV4cGxpY2l0bHkKICogY2FsbCBvY2lfY29tbWl0IHRvIGNvbW1pdCBhIHRyYW5zYWN0aW9uLAogKiBvciBvY2lfcm9sbGJhY2sgdG8gYWJvcnQgaXQuCiAqCiAqIFdoZW4gaW5zZXJ0aW5nIG9yIHVwZGF0aW5nIGRhdGEsIHVzaW5nIHRyYW5zYWN0aW9ucyBpcwogKiByZWNvbW1lbmRlZCBmb3IgcmVsYXRpb25hbCBkYXRhIGNvbnNpc3RlbmN5IGFuZCBmb3IgcGVyZm9ybWFuY2UKICogcmVhc29ucy4KICoKICogSWYgT0NJX05PX0FVVE9fQ09NTUlUIG1vZGUgaXMgdXNlZCBmb3IgYW55CiAqIHN0YXRlbWVudCBpbmNsdWRpbmcgcXVlcmllcywgYW5kCiAqIG9jaV9jb21taXQKICogb3Igb2NpX3JvbGxiYWNrIGlzIG5vdCBzdWJzZXF1ZW50bHkKICogY2FsbGVkLCB0aGVuIE9DSTggd2lsbCBwZXJmb3JtIGEgcm9sbGJhY2sgYXQgdGhlIGVuZCBvZiB0aGUKICogc2NyaXB0IGV2ZW4gaWYgbm8gZGF0YSB3YXMgY2hhbmdlZC4gIFRvIGF2b2lkIGFuIHVubmVjZXNzYXJ5CiAqIHJvbGxiYWNrLCBtYW55IHNjcmlwdHMgZG8gbm90CiAqIHVzZSBPQ0lfTk9fQVVUT19DT01NSVQgbW9kZSBmb3IgcXVlcmllcyBvcgogKiBQTC9TUUwuICBCZSBjYXJlZnVsIHRvIGVuc3VyZSB0aGUgYXBwcm9wcmlhdGUgdHJhbnNhY3Rpb25hbAogKiBjb25zaXN0ZW5jeSBmb3IgdGhlIGFwcGxpY2F0aW9uIHdoZW4KICogdXNpbmcgb2NpX2V4ZWN1dGUgd2l0aCBkaWZmZXJlbnQgbW9kZXMgaW4KICogdGhlIHNhbWUgc2NyaXB0LgogKiBAdGhyb3dzIE9jaThFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9jaV9leGVjdXRlKCRzdGF0ZW1lbnQsIGludCAkbW9kZSA9IE9DSV9DT01NSVRfT05fU1VDQ0VTUyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvY2lfZXhlY3V0ZSgkc3RhdGVtZW50LCAkbW9kZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBGZXRjaGVzIG11bHRpcGxlIHJvd3MgZnJvbSBhIHF1ZXJ5IGludG8gYSB0d28tZGltZW5zaW9uYWwgYXJyYXkuCiAqIEJ5IGRlZmF1bHQsIGFsbCByb3dzIGFyZSByZXR1cm5lZC4KICoKICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIG9ubHkgb25jZSBmb3IgZWFjaCBxdWVyeSBleGVjdXRlZAogKiB3aXRoIG9jaV9leGVjdXRlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0YXRlbWVudCBBIHZhbGlkIE9DSTggc3RhdGVtZW50CiAqIGlkZW50aWZpZXIgY3JlYXRlZCBieSBvY2lfcGFyc2UgYW5kIGV4ZWN1dGVkCiAqIGJ5IG9jaV9leGVjdXRlLCBvciBhIFJFRgogKiBDVVJTT1Igc3RhdGVtZW50IGlkZW50aWZpZXIuCiAqIEBwYXJhbSBhcnJheXxudWxsICRvdXRwdXQgVGhlIHZhcmlhYmxlIHRvIGNvbnRhaW4gdGhlIHJldHVybmVkIHJvd3MuCiAqCiAqIExPQiBjb2x1bW5zIGFyZSByZXR1cm5lZCBhcyBzdHJpbmdzLCB3aGVyZSBPcmFjbGUgc3VwcG9ydHMKICogY29udmVyc2lvbi4KICoKICogU2VlIG9jaV9mZXRjaF9hcnJheSBmb3IgbW9yZSBpbmZvcm1hdGlvbgogKiBvbiBob3cgZGF0YSBhbmQgdHlwZXMgYXJlIGZldGNoZWQuCiAqIEBwYXJhbSBpbnQgJHNraXAgVGhlIG51bWJlciBvZiBpbml0aWFsIHJvd3MgdG8gZGlzY2FyZCB3aGVuIGZldGNoaW5nIHRoZQogKiByZXN1bHQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDAsIHNvIHRoZSBmaXJzdCByb3cgb253YXJkcyBpcwogKiByZXR1cm5lZC4KICogQHBhcmFtIGludCAkbWF4cm93cyBUaGUgbnVtYmVyIG9mIHJvd3MgdG8gcmV0dXJuLiAgVGhlIGRlZmF1bHQgaXMgLTEgbWVhbmluZyByZXR1cm4KICogYWxsIHRoZSByb3dzIGZyb20gc2tpcCArIDEgb253YXJkcy4KICogQHBhcmFtIGludCAkZmxhZ3MgUGFyYW1ldGVyIGZsYWdzIGluZGljYXRlcyB0aGUgYXJyYXkKICogc3RydWN0dXJlIGFuZCB3aGV0aGVyIGFzc29jaWF0aXZlIGFycmF5cyBzaG91bGQgYmUgdXNlZC4KICoKICogb2NpX2ZldGNoX2FsbCBBcnJheSBTdHJ1Y3R1cmUgTW9kZXMKICoKICoKICoKICogQ29uc3RhbnQKICogRGVzY3JpcHRpb24KICoKICoKICoKICoKICogT0NJX0ZFVENIU1RBVEVNRU5UX0JZX1JPVwogKiBUaGUgb3V0ZXIgYXJyYXkgd2lsbCBjb250YWluIG9uZSBzdWItYXJyYXkgcGVyIHF1ZXJ5CiAqIHJvdy4KICoKICoKICogT0NJX0ZFVENIU1RBVEVNRU5UX0JZX0NPTFVNTgogKiBUaGUgb3V0ZXIgYXJyYXkgd2lsbCBjb250YWluIG9uZSBzdWItYXJyYXkgcGVyIHF1ZXJ5CiAqIGNvbHVtbi4gVGhpcyBpcyB0aGUgZGVmYXVsdC4KICoKICoKICoKICoKICoKICogQXJyYXlzIGNhbiBiZSBpbmRleGVkIGVpdGhlciBieSBjb2x1bW4gaGVhZGluZyBvciBudW1lcmljYWxseS4KICogT25seSBvbmUgaW5kZXggbW9kZSB3aWxsIGJlIHJldHVybmVkLgogKgogKiBvY2lfZmV0Y2hfYWxsIEFycmF5IEluZGV4IE1vZGVzCiAqCiAqCiAqCiAqIENvbnN0YW50CiAqIERlc2NyaXB0aW9uCiAqCiAqCiAqCiAqCiAqIE9DSV9OVU0KICogTnVtZXJpYyBpbmRleGVzIGFyZSB1c2VkIGZvciBlYWNoIGNvbHVtbidzIGFycmF5LgogKgogKgogKiBPQ0lfQVNTT0MKICogQXNzb2NpYXRpdmUgaW5kZXhlcyBhcmUgdXNlZCBmb3IgZWFjaCBjb2x1bW4ncwogKiBhcnJheS4gVGhpcyBpcyB0aGUgZGVmYXVsdC4KICoKICoKICoKICoKICoKICogVXNlIHRoZSBhZGRpdGlvbiBvcGVyYXRvciAiKyIgdG8gY2hvb3NlIGEgY29tYmluYXRpb24KICogb2YgYXJyYXkgc3RydWN0dXJlIGFuZCBpbmRleCBtb2Rlcy4KICoKICogT3JhY2xlJ3MgZGVmYXVsdCwgbm9uLWNhc2Ugc2Vuc2l0aXZlIGNvbHVtbiBuYW1lcyB3aWxsIGhhdmUKICogdXBwZXJjYXNlIGFycmF5IGtleXMuICBDYXNlLXNlbnNpdGl2ZSBjb2x1bW4gbmFtZXMgd2lsbCBoYXZlCiAqIGFycmF5IGtleXMgdXNpbmcgdGhlIGV4YWN0IGNvbHVtbiBjYXNlLgogKiBVc2UgdmFyX2R1bXAKICogb24gb3V0cHV0IHRvIHZlcmlmeSB0aGUgYXBwcm9wcmlhdGUgY2FzZQogKiB0byB1c2UgZm9yIGVhY2ggcXVlcnkuCiAqCiAqIFF1ZXJpZXMgdGhhdCBoYXZlIG1vcmUgdGhhbiBvbmUgY29sdW1uIHdpdGggdGhlIHNhbWUgbmFtZQogKiBzaG91bGQgdXNlIGNvbHVtbiBhbGlhc2VzLiAgT3RoZXJ3aXNlIG9ubHkgb25lIG9mIHRoZSBjb2x1bW5zCiAqIHdpbGwgYXBwZWFyIGluIGFuIGFzc29jaWF0aXZlIGFycmF5LgogKiBAcmV0dXJuIGludCBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygcm93cyBpbiBvdXRwdXQsIHdoaWNoCiAqIG1heSBiZSAwIG9yIG1vcmUuCiAqIEB0aHJvd3MgT2NpOEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2NpX2ZldGNoX2FsbCgkc3RhdGVtZW50LCA/YXJyYXkgJiRvdXRwdXQsIGludCAkc2tpcCA9IDAsIGludCAkbWF4cm93cyA9IC0xLCBpbnQgJGZsYWdzID0gT0NJX0ZFVENIU1RBVEVNRU5UX0JZX0NPTFVNTiArIE9DSV9BU1NPQyk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9jaV9mZXRjaF9hbGwoJHN0YXRlbWVudCwgJG91dHB1dCwgJHNraXAsICRtYXhyb3dzLCAkZmxhZ3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT2NpOEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBmaWVsZC4KICoKICogQHBhcmFtIHJlc291cmNlICRzdGF0ZW1lbnQgQSB2YWxpZCBPQ0kgc3RhdGVtZW50IGlkZW50aWZpZXIuCiAqIEBwYXJhbSBtaXhlZCAkZmllbGQgQ2FuIGJlIHRoZSBmaWVsZCdzIGluZGV4ICgxLWJhc2VkKSBvciBuYW1lLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBuYW1lIGFzIGEgc3RyaW5ncy4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfZmllbGRfbmFtZSgkc3RhdGVtZW50LCAkZmllbGQpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvY2lfZmllbGRfbmFtZSgkc3RhdGVtZW50LCAkZmllbGQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT2NpOEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIHByZWNpc2lvbiBvZiB0aGUgZmllbGQuCiAqCiAqIEZvciBGTE9BVCBjb2x1bW5zLCBwcmVjaXNpb24gaXMgbm9uemVybyBhbmQgc2NhbGUgaXMgLTEyNy4KICogSWYgcHJlY2lzaW9uIGlzIDAsIHRoZW4gY29sdW1uIGlzIE5VTUJFUi4gRWxzZSBpdCdzCiAqIE5VTUJFUihwcmVjaXNpb24sIHNjYWxlKS4KICoKICogQHBhcmFtIHJlc291cmNlICRzdGF0ZW1lbnQgQSB2YWxpZCBPQ0kgc3RhdGVtZW50IGlkZW50aWZpZXIuCiAqIEBwYXJhbSBtaXhlZCAkZmllbGQgQ2FuIGJlIHRoZSBmaWVsZCdzIGluZGV4ICgxLWJhc2VkKSBvciBuYW1lLgogKiBAcmV0dXJuIGludCBSZXR1cm5zIHRoZSBwcmVjaXNpb24gYXMgYW4gaW50ZWdlcnMuCiAqIEB0aHJvd3MgT2NpOEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2NpX2ZpZWxkX3ByZWNpc2lvbigkc3RhdGVtZW50LCAkZmllbGQpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvY2lfZmllbGRfcHJlY2lzaW9uKCRzdGF0ZW1lbnQsICRmaWVsZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJldHVybnMgdGhlIHNjYWxlIG9mIHRoZSBjb2x1bW4gd2l0aCBmaWVsZCBpbmRleC4KICoKICogRm9yIEZMT0FUIGNvbHVtbnMsIHByZWNpc2lvbiBpcyBub256ZXJvIGFuZCBzY2FsZSBpcyAtMTI3LgogKiBJZiBwcmVjaXNpb24gaXMgMCwgdGhlbiBjb2x1bW4gaXMgTlVNQkVSLiBFbHNlIGl0J3MKICogTlVNQkVSKHByZWNpc2lvbiwgc2NhbGUpLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0YXRlbWVudCBBIHZhbGlkIE9DSSBzdGF0ZW1lbnQgaWRlbnRpZmllci4KICogQHBhcmFtIG1peGVkICRmaWVsZCBDYW4gYmUgdGhlIGZpZWxkJ3MgaW5kZXggKDEtYmFzZWQpIG9yIG5hbWUuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIHNjYWxlIGFzIGFuIGludGVnZXJzLgogKiBAdGhyb3dzIE9jaThFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9jaV9maWVsZF9zY2FsZSgkc3RhdGVtZW50LCAkZmllbGQpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvY2lfZmllbGRfc2NhbGUoJHN0YXRlbWVudCwgJGZpZWxkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9jaThFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0dXJucyB0aGUgc2l6ZSBvZiBhIGZpZWxkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0YXRlbWVudCBBIHZhbGlkIE9DSSBzdGF0ZW1lbnQgaWRlbnRpZmllci4KICogQHBhcmFtIG1peGVkICRmaWVsZCBDYW4gYmUgdGhlIGZpZWxkJ3MgaW5kZXggKDEtYmFzZWQpIG9yIG5hbWUuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIHNpemUgb2YgYSBmaWVsZCBpbiBieXRlc3MuCiAqIEB0aHJvd3MgT2NpOEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2NpX2ZpZWxkX3NpemUoJHN0YXRlbWVudCwgJGZpZWxkKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX2ZpZWxkX3NpemUoJHN0YXRlbWVudCwgJGZpZWxkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9jaThFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0dXJucyBPcmFjbGUncyByYXcgIlNRTFQiIGRhdGEgdHlwZSBvZiB0aGUgZmllbGQuCiAqCiAqIElmIHlvdSB3YW50IGEgZmllbGQncyB0eXBlIG5hbWUsIHRoZW4gdXNlIG9jaV9maWVsZF90eXBlIGluc3RlYWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50IEEgdmFsaWQgT0NJIHN0YXRlbWVudCBpZGVudGlmaWVyLgogKiBAcGFyYW0gbWl4ZWQgJGZpZWxkIENhbiBiZSB0aGUgZmllbGQncyBpbmRleCAoMS1iYXNlZCkgb3IgbmFtZS4KICogQHJldHVybiBpbnQgUmV0dXJucyBPcmFjbGUncyByYXcgZGF0YSB0eXBlIGFzIGEgbnVtYmVycy4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfZmllbGRfdHlwZV9yYXcoJHN0YXRlbWVudCwgJGZpZWxkKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX2ZpZWxkX3R5cGVfcmF3KCRzdGF0ZW1lbnQsICRmaWVsZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJldHVybnMgYSBmaWVsZCdzIGRhdGEgdHlwZSBuYW1lLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0YXRlbWVudCBBIHZhbGlkIE9DSSBzdGF0ZW1lbnQgaWRlbnRpZmllci4KICogQHBhcmFtIG1peGVkICRmaWVsZCBDYW4gYmUgdGhlIGZpZWxkJ3MgaW5kZXggKDEtYmFzZWQpIG9yIG5hbWUuCiAqIEByZXR1cm4gbWl4ZWQgUmV0dXJucyB0aGUgZmllbGQgZGF0YSB0eXBlIGFzIGEgc3RyaW5ncy4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfZmllbGRfdHlwZSgkc3RhdGVtZW50LCAkZmllbGQpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX2ZpZWxkX3R5cGUoJHN0YXRlbWVudCwgJGZpZWxkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9jaThFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogRnJlZXMgYSBkZXNjcmlwdG9yIGFsbG9jYXRlZCBieSBvY2lfbmV3X2Rlc2NyaXB0b3IuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZGVzY3JpcHRvcgogKiBAdGhyb3dzIE9jaThFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9jaV9mcmVlX2Rlc2NyaXB0b3IoJGRlc2NyaXB0b3IpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX2ZyZWVfZGVzY3JpcHRvcigkZGVzY3JpcHRvcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBGcmVlcyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIE9yYWNsZSdzIGN1cnNvciBvciBzdGF0ZW1lbnQsIHdoaWNoIHdhcwogKiByZWNlaXZlZCBmcm9tIGFzIGEgcmVzdWx0IG9mIG9jaV9wYXJzZSBvciBvYnRhaW5lZAogKiBmcm9tIE9yYWNsZS4KICoKICogQHBhcmFtIHJlc291cmNlICRzdGF0ZW1lbnQgQSB2YWxpZCBPQ0kgc3RhdGVtZW50IGlkZW50aWZpZXIuCiAqIEB0aHJvd3MgT2NpOEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2NpX2ZyZWVfc3RhdGVtZW50KCRzdGF0ZW1lbnQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX2ZyZWVfc3RhdGVtZW50KCRzdGF0ZW1lbnQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT2NpOEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQWxsb2NhdGVzIGEgbmV3IGNvbGxlY3Rpb24gb2JqZWN0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gQW4gT3JhY2xlIGNvbm5lY3Rpb24gaWRlbnRpZmllciwgcmV0dXJuZWQgYnkKICogb2NpX2Nvbm5lY3Qgb3Igb2NpX3Bjb25uZWN0LgogKiBAcGFyYW0gc3RyaW5nICR0ZG8gU2hvdWxkIGJlIGEgdmFsaWQgbmFtZWQgdHlwZSAodXBwZXJjYXNlKS4KICogQHBhcmFtIHN0cmluZyAkc2NoZW1hIFNob3VsZCBwb2ludCB0byB0aGUgc2NoZW1lLCB3aGVyZSB0aGUgbmFtZWQgdHlwZSB3YXMgY3JlYXRlZC4gVGhlIG5hbWUKICogb2YgdGhlIGN1cnJlbnQgdXNlciBpcyB0aGUgZGVmYXVsdCB2YWx1ZS4KICogQHJldHVybiBcT0NJLUNvbGxlY3Rpb24gUmV0dXJucyBhIG5ldyBPQ0lDb2xsZWN0aW9uIG9iamVjdC4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfbmV3X2NvbGxlY3Rpb24oJGNvbm5lY3Rpb24sIHN0cmluZyAkdGRvLCBzdHJpbmcgJHNjaGVtYSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX25ld19jb2xsZWN0aW9uKCRjb25uZWN0aW9uLCAkdGRvLCAkc2NoZW1hKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9jaThFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogRXN0YWJsaXNoZXMgYSBuZXcgY29ubmVjdGlvbiB0byBhbiBPcmFjbGUgc2VydmVyIGFuZCBsb2dzIG9uLgogKgogKiBVbmxpa2Ugb2NpX2Nvbm5lY3QgYW5kCiAqIG9jaV9wY29ubmVjdCwgb2NpX25ld19jb25uZWN0CiAqIGRvZXMgbm90IGNhY2hlIGNvbm5lY3Rpb25zIGFuZCB3aWxsIGFsd2F5cyByZXR1cm4gYSBicmFuZC1uZXcgZnJlc2hseQogKiBvcGVuZWQgY29ubmVjdGlvbiBoYW5kbGUuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdXIgYXBwbGljYXRpb24gbmVlZHMKICogdHJhbnNhY3Rpb25hbCBpc29sYXRpb24gYmV0d2VlbiB0d28gc2V0cyBvZiBxdWVyaWVzLgogKgogKiBAcGFyYW0gc3RyaW5nICR1c2VybmFtZSBUaGUgT3JhY2xlIHVzZXIgbmFtZS4KICogQHBhcmFtIHN0cmluZyAkcGFzc3dvcmQgVGhlIHBhc3N3b3JkIGZvciB1c2VybmFtZS4KICogQHBhcmFtIHN0cmluZyAkY29ubmVjdGlvbl9zdHJpbmcgQ29udGFpbnMKICogdGhlIE9yYWNsZSBpbnN0YW5jZSB0byBjb25uZWN0IHRvLiBJdCBjYW4gYmUKICogYW4gRWFzeSBDb25uZWN0CiAqIHN0cmluZywgb3IgYSBDb25uZWN0IE5hbWUgZnJvbQogKiB0aGUgdG5zbmFtZXMub3JhIGZpbGUsIG9yIHRoZSBuYW1lIG9mIGEgbG9jYWwKICogT3JhY2xlIGluc3RhbmNlLgogKgogKiBJZiBub3Qgc3BlY2lmaWVkLCBQSFAgdXNlcwogKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc3VjaCBhcyBUV09fVEFTSyAob24gTGludXgpCiAqIG9yIExPQ0FMIChvbiBXaW5kb3dzKQogKiBhbmQgT1JBQ0xFX1NJRCB0byBkZXRlcm1pbmUgdGhlCiAqIE9yYWNsZSBpbnN0YW5jZSB0byBjb25uZWN0IHRvLgogKgogKgogKiBUbyB1c2UgdGhlIEVhc3kgQ29ubmVjdCBuYW1pbmcgbWV0aG9kLCBQSFAgbXVzdCBiZSBsaW5rZWQgd2l0aCBPcmFjbGUKICogMTBnIG9yIGdyZWF0ZXIgQ2xpZW50IGxpYnJhcmllcy4gVGhlIEVhc3kgQ29ubmVjdCBzdHJpbmcgZm9yIE9yYWNsZQogKiAxMGcgaXMgb2YgdGhlIGZvcm06CiAqIFsvL11ob3N0X25hbWVbOnBvcnRdWy9zZXJ2aWNlX25hbWVdLiBGcm9tIE9yYWNsZQogKiAxMWcsIHRoZSBzeW50YXggaXM6CiAqIFsvL11ob3N0X25hbWVbOnBvcnRdWy9zZXJ2aWNlX25hbWVdWzpzZXJ2ZXJfdHlwZV1bL2luc3RhbmNlX25hbWVdLgogKiBTZXJ2aWNlIG5hbWVzIGNhbiBiZSBmb3VuZCBieSBydW5uaW5nIHRoZSBPcmFjbGUKICogdXRpbGl0eSBsc25yY3RsIHN0YXR1cyBvbiB0aGUgZGF0YWJhc2Ugc2VydmVyCiAqIG1hY2hpbmUuCiAqCiAqCiAqIFRoZSB0bnNuYW1lcy5vcmEgZmlsZSBjYW4gYmUgaW4gdGhlIE9yYWNsZSBOZXQKICogc2VhcmNoIHBhdGgsIHdoaWNoCiAqIGluY2x1ZGVzICRPUkFDTEVfSE9NRS9uZXR3b3JrL2FkbWluCiAqIGFuZCAvZXRjLiAgQWx0ZXJuYXRpdmVseQogKiBzZXQgVE5TX0FETUlOIHNvCiAqIHRoYXQgJFROU19BRE1JTi90bnNuYW1lcy5vcmEgaXMgcmVhZC4gIE1ha2Ugc3VyZQogKiB0aGUgd2ViIGRhZW1vbiBoYXMgcmVhZCBhY2Nlc3MgdG8gdGhlIGZpbGUuCiAqIEBwYXJhbSBzdHJpbmcgJGNoYXJhY3Rlcl9zZXQgRGV0ZXJtaW5lcwogKiB0aGUgY2hhcmFjdGVyIHNldCB1c2VkIGJ5IHRoZSBPcmFjbGUgQ2xpZW50IGxpYnJhcmllcy4gIFRoZSBjaGFyYWN0ZXIKICogc2V0IGRvZXMgbm90IG5lZWQgdG8gbWF0Y2ggdGhlIGNoYXJhY3RlciBzZXQgdXNlZCBieSB0aGUgZGF0YWJhc2UuICBJZgogKiBpdCBkb2Vzbid0IG1hdGNoLCBPcmFjbGUgd2lsbCBkbyBpdHMgYmVzdCB0byBjb252ZXJ0IGRhdGEgdG8gYW5kIGZyb20KICogdGhlIGRhdGFiYXNlIGNoYXJhY3RlciBzZXQuICBEZXBlbmRpbmcgb24gdGhlIGNoYXJhY3RlciBzZXRzIHRoaXMgbWF5CiAqIG5vdCBnaXZlIHVzYWJsZSByZXN1bHRzLiAgQ29udmVyc2lvbiBhbHNvIGFkZHMgc29tZSB0aW1lIG92ZXJoZWFkLgogKgogKiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUKICogT3JhY2xlIENsaWVudCBsaWJyYXJpZXMgZGV0ZXJtaW5lIGEgY2hhcmFjdGVyIHNldCBmcm9tCiAqIHRoZSBOTFNfTEFORyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KICoKICogUGFzc2luZyB0aGlzIHBhcmFtZXRlciBjYW4KICogcmVkdWNlIHRoZSB0aW1lIHRha2VuIHRvIGNvbm5lY3QuCiAqIEBwYXJhbSBpbnQgJHNlc3Npb25fbW9kZSBUaGlzCiAqIHBhcmFtZXRlciBpcyBhdmFpbGFibGUgc2luY2UgdmVyc2lvbiBQSFAgNSAoUEVDTCBPQ0k4IDEuMSkgYW5kIGFjY2VwdHMgdGhlCiAqIGZvbGxvd2luZyB2YWx1ZXM6IE9DSV9ERUZBVUxULAogKiBPQ0lfU1lTT1BFUiBhbmQgT0NJX1NZU0RCQS4KICogSWYgZWl0aGVyIE9DSV9TWVNPUEVSIG9yCiAqIE9DSV9TWVNEQkEgd2VyZSBzcGVjaWZpZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCB0cnkKICogdG8gZXN0YWJsaXNoIHByaXZpbGVnZWQgY29ubmVjdGlvbiB1c2luZyBleHRlcm5hbCBjcmVkZW50aWFscy4KICogUHJpdmlsZWdlZCBjb25uZWN0aW9ucyBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdC4gVG8gZW5hYmxlIHRoZW0geW91CiAqIG5lZWQgdG8gc2V0IG9jaTgucHJpdmlsZWdlZF9jb25uZWN0CiAqIHRvIE9uLgogKgogKgogKiBQSFAgNS4zIChQRUNMIE9DSTggMS4zLjQpIGludHJvZHVjZWQgdGhlCiAqIE9DSV9DUkVEX0VYVCBtb2RlIHZhbHVlLiBUaGlzIHRlbGxzIE9yYWNsZSB0byB1c2UKICogRXh0ZXJuYWwgb3IgT1MgYXV0aGVudGljYXRpb24sIHdoaWNoIG11c3QgYmUgY29uZmlndXJlZCBpbiB0aGUKICogZGF0YWJhc2UuICBUaGUgT0NJX0NSRURfRVhUIGZsYWcgY2FuIG9ubHkgYmUgdXNlZAogKiB3aXRoIHVzZXJuYW1lIG9mICIvIiBhbmQgYSBlbXB0eSBwYXNzd29yZC4KICogb2NpOC5wcml2aWxlZ2VkX2Nvbm5lY3QKICogbWF5IGJlIE9uIG9yIE9mZi4KICoKICoKICogT0NJX0NSRURfRVhUIG1heSBiZSBjb21iaW5lZCB3aXRoIHRoZQogKiBPQ0lfU1lTT1BFUiBvcgogKiBPQ0lfU1lTREJBIG1vZGVzLgogKgogKgogKiBPQ0lfQ1JFRF9FWFQgaXMgbm90IHN1cHBvcnRlZCBvbiBXaW5kb3dzIGZvcgogKiBzZWN1cml0eSByZWFzb25zLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBjb25uZWN0aW9uIGlkZW50aWZpZXIuCiAqIEB0aHJvd3MgT2NpOEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2NpX25ld19jb25uZWN0KHN0cmluZyAkdXNlcm5hbWUsIHN0cmluZyAkcGFzc3dvcmQsIHN0cmluZyAkY29ubmVjdGlvbl9zdHJpbmcgPSBudWxsLCBzdHJpbmcgJGNoYXJhY3Rlcl9zZXQgPSBudWxsLCBpbnQgJHNlc3Npb25fbW9kZSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkc2Vzc2lvbl9tb2RlICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvY2lfbmV3X2Nvbm5lY3QoJHVzZXJuYW1lLCAkcGFzc3dvcmQsICRjb25uZWN0aW9uX3N0cmluZywgJGNoYXJhY3Rlcl9zZXQsICRzZXNzaW9uX21vZGUpOwogICAgfSBlbHNlaWYgKCRjaGFyYWN0ZXJfc2V0ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvY2lfbmV3X2Nvbm5lY3QoJHVzZXJuYW1lLCAkcGFzc3dvcmQsICRjb25uZWN0aW9uX3N0cmluZywgJGNoYXJhY3Rlcl9zZXQpOwogICAgfSBlbHNlaWYgKCRjb25uZWN0aW9uX3N0cmluZyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcb2NpX25ld19jb25uZWN0KCR1c2VybmFtZSwgJHBhc3N3b3JkLCAkY29ubmVjdGlvbl9zdHJpbmcpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG9jaV9uZXdfY29ubmVjdCgkdXNlcm5hbWUsICRwYXNzd29yZCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEFsbG9jYXRlcyBhIG5ldyBzdGF0ZW1lbnQgaGFuZGxlIG9uIHRoZSBzcGVjaWZpZWQgY29ubmVjdGlvbi4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIEFuIE9yYWNsZSBjb25uZWN0aW9uIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5CiAqIG9jaV9jb25uZWN0IG9yIG9jaV9wY29ubmVjdC4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgbmV3IHN0YXRlbWVudCBoYW5kbGUuCiAqIEB0aHJvd3MgT2NpOEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2NpX25ld19jdXJzb3IoJGNvbm5lY3Rpb24pCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX25ld19jdXJzb3IoJGNvbm5lY3Rpb24pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT2NpOEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBBbGxvY2F0ZXMgcmVzb3VyY2VzIHRvIGhvbGQgZGVzY3JpcHRvciBvciBMT0IgbG9jYXRvci4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIEFuIE9yYWNsZSBjb25uZWN0aW9uIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5CiAqIG9jaV9jb25uZWN0IG9yIG9jaV9wY29ubmVjdC4KICogQHBhcmFtIGludCAkdHlwZSBWYWxpZCB2YWx1ZXMgZm9yIHR5cGUgYXJlOgogKiBPQ0lfRFRZUEVfRklMRSwgT0NJX0RUWVBFX0xPQiBhbmQKICogT0NJX0RUWVBFX1JPV0lELgogKiBAcmV0dXJuIFxPQ0ktTG9iIFJldHVybnMgYSBuZXcgTE9CIG9yIEZJTEUgZGVzY3JpcHRvciBvbiBzdWNjZXNzLCBGQUxTRSBvbiBlcnJvci4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfbmV3X2Rlc2NyaXB0b3IoJGNvbm5lY3Rpb24sIGludCAkdHlwZSA9IE9DSV9EVFlQRV9MT0IpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX25ld19kZXNjcmlwdG9yKCRjb25uZWN0aW9uLCAkdHlwZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEdldHMgdGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBnaXZlbiBzdGF0ZW1lbnQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50IEEgdmFsaWQgT0NJIHN0YXRlbWVudCBpZGVudGlmaWVyLgogKiBAcmV0dXJuIGludCBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY29sdW1ucyBhcyBhbiBpbnRlZ2Vycy4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfbnVtX2ZpZWxkcygkc3RhdGVtZW50KTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX251bV9maWVsZHMoJHN0YXRlbWVudCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEdldHMgdGhlIG51bWJlciBvZiByb3dzIGFmZmVjdGVkIGR1cmluZyBzdGF0ZW1lbnQgZXhlY3V0aW9uLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0YXRlbWVudCBBIHZhbGlkIE9DSSBzdGF0ZW1lbnQgaWRlbnRpZmllci4KICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJvd3MgYWZmZWN0ZWQgYXMgYW4gaW50ZWdlcnMuCiAqIEB0aHJvd3MgT2NpOEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2NpX251bV9yb3dzKCRzdGF0ZW1lbnQpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvY2lfbnVtX3Jvd3MoJHN0YXRlbWVudCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFByZXBhcmVzIHNxbF90ZXh0IHVzaW5nCiAqIGNvbm5lY3Rpb24gYW5kIHJldHVybnMgdGhlIHN0YXRlbWVudCBpZGVudGlmaWVyLAogKiB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIG9jaV9iaW5kX2J5X25hbWUsCiAqIG9jaV9leGVjdXRlIGFuZCBvdGhlciBmdW5jdGlvbnMuCiAqCiAqIFN0YXRlbWVudCBpZGVudGlmaWVycyBjYW4gYmUgZnJlZWQKICogd2l0aCBvY2lfZnJlZV9zdGF0ZW1lbnQgb3IgYnkgc2V0dGluZyB0aGUKICogdmFyaWFibGUgdG8gTlVMTC4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIEFuIE9yYWNsZSBjb25uZWN0aW9uIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5CiAqIG9jaV9jb25uZWN0LCBvY2lfcGNvbm5lY3QsIG9yIG9jaV9uZXdfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkc3FsX3RleHQgVGhlIFNRTCBvciBQTC9TUUwgc3RhdGVtZW50LgogKgogKiBTUUwgc3RhdGVtZW50cyBzaG91bGQgbm90IGVuZCB3aXRoIGEKICogc2VtaS1jb2xvbiAoIjsiKS4gIFBML1NRTAogKiBzdGF0ZW1lbnRzIHNob3VsZCBlbmQgd2l0aCBhIHNlbWktY29sb24KICogKCI7IikuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhIHN0YXRlbWVudCBoYW5kbGUgb24gc3VjY2Vzcy4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfcGFyc2UoJGNvbm5lY3Rpb24sIHN0cmluZyAkc3FsX3RleHQpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX3BhcnNlKCRjb25uZWN0aW9uLCAkc3FsX3RleHQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT2NpOEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBDcmVhdGVzIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uIHRvIGFuIE9yYWNsZSBzZXJ2ZXIgYW5kIGxvZ3Mgb24uCiAqCiAqIFBlcnNpc3RlbnQgY29ubmVjdGlvbnMgYXJlIGNhY2hlZCBhbmQgcmUtdXNlZCBiZXR3ZWVuIHJlcXVlc3RzLCByZXN1bHRpbmcKICogaW4gcmVkdWNlZCBvdmVyaGVhZCBvbiBlYWNoIHBhZ2UgbG9hZDsgYSB0eXBpY2FsIFBIUCBhcHBsaWNhdGlvbiB3aWxsIGhhdmUKICogYSBzaW5nbGUgcGVyc2lzdGVudCBjb25uZWN0aW9uIG9wZW4gYWdhaW5zdCBhbiAgT3JhY2xlIHNlcnZlciBwZXIgQXBhY2hlCiAqIGNoaWxkIHByb2Nlc3MgKG9yIFBIUCBGYXN0Q0dJL0NHSSBwcm9jZXNzKS4gU2VlIHRoZSBQZXJzaXN0ZW50IERhdGFiYXNlCiAqIENvbm5lY3Rpb25zIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHVzZXJuYW1lIFRoZSBPcmFjbGUgdXNlciBuYW1lLgogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZCBUaGUgcGFzc3dvcmQgZm9yIHVzZXJuYW1lLgogKiBAcGFyYW0gc3RyaW5nICRjb25uZWN0aW9uX3N0cmluZyBDb250YWlucwogKiB0aGUgT3JhY2xlIGluc3RhbmNlIHRvIGNvbm5lY3QgdG8uIEl0IGNhbiBiZQogKiBhbiBFYXN5IENvbm5lY3QKICogc3RyaW5nLCBvciBhIENvbm5lY3QgTmFtZSBmcm9tCiAqIHRoZSB0bnNuYW1lcy5vcmEgZmlsZSwgb3IgdGhlIG5hbWUgb2YgYSBsb2NhbAogKiBPcmFjbGUgaW5zdGFuY2UuCiAqCiAqIElmIG5vdCBzcGVjaWZpZWQsIFBIUCB1c2VzCiAqIGVudmlyb25tZW50IHZhcmlhYmxlcyBzdWNoIGFzIFRXT19UQVNLIChvbiBMaW51eCkKICogb3IgTE9DQUwgKG9uIFdpbmRvd3MpCiAqIGFuZCBPUkFDTEVfU0lEIHRvIGRldGVybWluZSB0aGUKICogT3JhY2xlIGluc3RhbmNlIHRvIGNvbm5lY3QgdG8uCiAqCiAqCiAqIFRvIHVzZSB0aGUgRWFzeSBDb25uZWN0IG5hbWluZyBtZXRob2QsIFBIUCBtdXN0IGJlIGxpbmtlZCB3aXRoIE9yYWNsZQogKiAxMGcgb3IgZ3JlYXRlciBDbGllbnQgbGlicmFyaWVzLiBUaGUgRWFzeSBDb25uZWN0IHN0cmluZyBmb3IgT3JhY2xlCiAqIDEwZyBpcyBvZiB0aGUgZm9ybToKICogWy8vXWhvc3RfbmFtZVs6cG9ydF1bL3NlcnZpY2VfbmFtZV0uIEZyb20gT3JhY2xlCiAqIDExZywgdGhlIHN5bnRheCBpczoKICogWy8vXWhvc3RfbmFtZVs6cG9ydF1bL3NlcnZpY2VfbmFtZV1bOnNlcnZlcl90eXBlXVsvaW5zdGFuY2VfbmFtZV0uCiAqIFNlcnZpY2UgbmFtZXMgY2FuIGJlIGZvdW5kIGJ5IHJ1bm5pbmcgdGhlIE9yYWNsZQogKiB1dGlsaXR5IGxzbnJjdGwgc3RhdHVzIG9uIHRoZSBkYXRhYmFzZSBzZXJ2ZXIKICogbWFjaGluZS4KICoKICoKICogVGhlIHRuc25hbWVzLm9yYSBmaWxlIGNhbiBiZSBpbiB0aGUgT3JhY2xlIE5ldAogKiBzZWFyY2ggcGF0aCwgd2hpY2gKICogaW5jbHVkZXMgJE9SQUNMRV9IT01FL25ldHdvcmsvYWRtaW4KICogYW5kIC9ldGMuICBBbHRlcm5hdGl2ZWx5CiAqIHNldCBUTlNfQURNSU4gc28KICogdGhhdCAkVE5TX0FETUlOL3Ruc25hbWVzLm9yYSBpcyByZWFkLiAgTWFrZSBzdXJlCiAqIHRoZSB3ZWIgZGFlbW9uIGhhcyByZWFkIGFjY2VzcyB0byB0aGUgZmlsZS4KICogQHBhcmFtIHN0cmluZyAkY2hhcmFjdGVyX3NldCBEZXRlcm1pbmVzCiAqIHRoZSBjaGFyYWN0ZXIgc2V0IHVzZWQgYnkgdGhlIE9yYWNsZSBDbGllbnQgbGlicmFyaWVzLiAgVGhlIGNoYXJhY3RlcgogKiBzZXQgZG9lcyBub3QgbmVlZCB0byBtYXRjaCB0aGUgY2hhcmFjdGVyIHNldCB1c2VkIGJ5IHRoZSBkYXRhYmFzZS4gIElmCiAqIGl0IGRvZXNuJ3QgbWF0Y2gsIE9yYWNsZSB3aWxsIGRvIGl0cyBiZXN0IHRvIGNvbnZlcnQgZGF0YSB0byBhbmQgZnJvbQogKiB0aGUgZGF0YWJhc2UgY2hhcmFjdGVyIHNldC4gIERlcGVuZGluZyBvbiB0aGUgY2hhcmFjdGVyIHNldHMgdGhpcyBtYXkKICogbm90IGdpdmUgdXNhYmxlIHJlc3VsdHMuICBDb252ZXJzaW9uIGFsc28gYWRkcyBzb21lIHRpbWUgb3ZlcmhlYWQuCiAqCiAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZQogKiBPcmFjbGUgQ2xpZW50IGxpYnJhcmllcyBkZXRlcm1pbmUgYSBjaGFyYWN0ZXIgc2V0IGZyb20KICogdGhlIE5MU19MQU5HIGVudmlyb25tZW50IHZhcmlhYmxlLgogKgogKiBQYXNzaW5nIHRoaXMgcGFyYW1ldGVyIGNhbgogKiByZWR1Y2UgdGhlIHRpbWUgdGFrZW4gdG8gY29ubmVjdC4KICogQHBhcmFtIGludCAkc2Vzc2lvbl9tb2RlIFRoaXMKICogcGFyYW1ldGVyIGlzIGF2YWlsYWJsZSBzaW5jZSB2ZXJzaW9uIFBIUCA1IChQRUNMIE9DSTggMS4xKSBhbmQgYWNjZXB0cyB0aGUKICogZm9sbG93aW5nIHZhbHVlczogT0NJX0RFRkFVTFQsCiAqIE9DSV9TWVNPUEVSIGFuZCBPQ0lfU1lTREJBLgogKiBJZiBlaXRoZXIgT0NJX1NZU09QRVIgb3IKICogT0NJX1NZU0RCQSB3ZXJlIHNwZWNpZmllZCwgdGhpcyBmdW5jdGlvbiB3aWxsIHRyeQogKiB0byBlc3RhYmxpc2ggcHJpdmlsZWdlZCBjb25uZWN0aW9uIHVzaW5nIGV4dGVybmFsIGNyZWRlbnRpYWxzLgogKiBQcml2aWxlZ2VkIGNvbm5lY3Rpb25zIGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0LiBUbyBlbmFibGUgdGhlbSB5b3UKICogbmVlZCB0byBzZXQgb2NpOC5wcml2aWxlZ2VkX2Nvbm5lY3QKICogdG8gT24uCiAqCiAqCiAqIFBIUCA1LjMgKFBFQ0wgT0NJOCAxLjMuNCkgaW50cm9kdWNlZCB0aGUKICogT0NJX0NSRURfRVhUIG1vZGUgdmFsdWUuIFRoaXMgdGVsbHMgT3JhY2xlIHRvIHVzZQogKiBFeHRlcm5hbCBvciBPUyBhdXRoZW50aWNhdGlvbiwgd2hpY2ggbXVzdCBiZSBjb25maWd1cmVkIGluIHRoZQogKiBkYXRhYmFzZS4gIFRoZSBPQ0lfQ1JFRF9FWFQgZmxhZyBjYW4gb25seSBiZSB1c2VkCiAqIHdpdGggdXNlcm5hbWUgb2YgIi8iIGFuZCBhIGVtcHR5IHBhc3N3b3JkLgogKiBvY2k4LnByaXZpbGVnZWRfY29ubmVjdAogKiBtYXkgYmUgT24gb3IgT2ZmLgogKgogKgogKiBPQ0lfQ1JFRF9FWFQgbWF5IGJlIGNvbWJpbmVkIHdpdGggdGhlCiAqIE9DSV9TWVNPUEVSIG9yCiAqIE9DSV9TWVNEQkEgbW9kZXMuCiAqCiAqCiAqIE9DSV9DUkVEX0VYVCBpcyBub3Qgc3VwcG9ydGVkIG9uIFdpbmRvd3MgZm9yCiAqIHNlY3VyaXR5IHJlYXNvbnMuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhIGNvbm5lY3Rpb24gaWRlbnRpZmllci4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfcGNvbm5lY3Qoc3RyaW5nICR1c2VybmFtZSwgc3RyaW5nICRwYXNzd29yZCwgc3RyaW5nICRjb25uZWN0aW9uX3N0cmluZyA9IG51bGwsIHN0cmluZyAkY2hhcmFjdGVyX3NldCA9IG51bGwsIGludCAkc2Vzc2lvbl9tb2RlID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRzZXNzaW9uX21vZGUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG9jaV9wY29ubmVjdCgkdXNlcm5hbWUsICRwYXNzd29yZCwgJGNvbm5lY3Rpb25fc3RyaW5nLCAkY2hhcmFjdGVyX3NldCwgJHNlc3Npb25fbW9kZSk7CiAgICB9IGVsc2VpZiAoJGNoYXJhY3Rlcl9zZXQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG9jaV9wY29ubmVjdCgkdXNlcm5hbWUsICRwYXNzd29yZCwgJGNvbm5lY3Rpb25fc3RyaW5nLCAkY2hhcmFjdGVyX3NldCk7CiAgICB9IGVsc2VpZiAoJGNvbm5lY3Rpb25fc3RyaW5nICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvY2lfcGNvbm5lY3QoJHVzZXJuYW1lLCAkcGFzc3dvcmQsICRjb25uZWN0aW9uX3N0cmluZyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcb2NpX3Bjb25uZWN0KCR1c2VybmFtZSwgJHBhc3N3b3JkKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9jaThFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0dXJucyB0aGUgZGF0YSBmcm9tIGZpZWxkIGluIHRoZSBjdXJyZW50IHJvdywKICogZmV0Y2hlZCBieSBvY2lfZmV0Y2guCiAqCiAqIEZvciBkZXRhaWxzIG9uIHRoZSBkYXRhIHR5cGUgbWFwcGluZyBwZXJmb3JtZWQgYnkKICogdGhlIE9DSTggZXh0ZW5zaW9uLCBzZWUgdGhlIGRhdGF0eXBlcwogKiBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlcgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0YXRlbWVudAogKiBAcGFyYW0gbWl4ZWQgJGZpZWxkIENhbiBiZSBlaXRoZXIgdXNlIHRoZSBjb2x1bW4gbnVtYmVyICgxLWJhc2VkKSBvciB0aGUgY29sdW1uIG5hbWUuCiAqIFRoZSBjYXNlIG9mIHRoZSBjb2x1bW4gbmFtZSBtdXN0IGJlIHRoZSBjYXNlIHRoYXQgT3JhY2xlIG1ldGEgZGF0YQogKiBkZXNjcmliZXMgdGhlIGNvbHVtbiBhcywgd2hpY2ggaXMgdXBwZXJjYXNlIGZvciBjb2x1bW5zIGNyZWF0ZWQKICogY2FzZSBpbnNlbnNpdGl2ZWx5LgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYXMgc3RyaW5ncyBleGNlcHQgZm9yIGFic3RyYWN0IHR5cGVzIChST1dJRHMsIExPQnMgYW5kCiAqIEZJTEVzKS4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfcmVzdWx0KCRzdGF0ZW1lbnQsICRmaWVsZCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9jaV9yZXN1bHQoJHN0YXRlbWVudCwgJGZpZWxkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9jaThFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV2ZXJ0cyBhbGwgdW5jb21taXR0ZWQgY2hhbmdlcyBmb3IgdGhlIE9yYWNsZQogKiBjb25uZWN0aW9uIGFuZCBlbmRzIHRoZSB0cmFuc2FjdGlvbi4gIEl0CiAqIHJlbGVhc2VzIGFsbCBsb2NrcyBoZWxkLiAgQWxsIE9yYWNsZSBTQVZFUE9JTlRTCiAqIGFyZSBlcmFzZWQuCiAqCiAqIEEgdHJhbnNhY3Rpb24gYmVnaW5zIHdoZW4gdGhlIGZpcnN0IFNRTCBzdGF0ZW1lbnQgdGhhdCBjaGFuZ2VzIGRhdGEKICogaXMgZXhlY3V0ZWQgd2l0aCBvY2lfZXhlY3V0ZSB1c2luZwogKiB0aGUgT0NJX05PX0FVVE9fQ09NTUlUIGZsYWcuICBGdXJ0aGVyIGRhdGEKICogY2hhbmdlcyBtYWRlIGJ5IG90aGVyIHN0YXRlbWVudHMgYmVjb21lIHBhcnQgb2YgdGhlIHNhbWUKICogdHJhbnNhY3Rpb24uICBEYXRhIGNoYW5nZXMgbWFkZSBpbiBhIHRyYW5zYWN0aW9uIGFyZSB0ZW1wb3JhcnkKICogdW50aWwgdGhlIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvciByb2xsZWQgYmFjay4gIE90aGVyIHVzZXJzIG9mCiAqIHRoZSBkYXRhYmFzZSB3aWxsIG5vdCBzZWUgdGhlIGNoYW5nZXMgdW50aWwgdGhleSBhcmUgY29tbWl0dGVkLgogKgogKiBXaGVuIGluc2VydGluZyBvciB1cGRhdGluZyBkYXRhLCB1c2luZyB0cmFuc2FjdGlvbnMgaXMgcmVjb21tZW5kZWQKICogZm9yIHJlbGF0aW9uYWwgZGF0YSBjb25zaXN0ZW5jeSBhbmQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBBbiBPcmFjbGUgY29ubmVjdGlvbiBpZGVudGlmaWVyLCByZXR1cm5lZCBieQogKiBvY2lfY29ubmVjdCwgb2NpX3Bjb25uZWN0CiAqIG9yIG9jaV9uZXdfY29ubmVjdC4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfcm9sbGJhY2soJGNvbm5lY3Rpb24pOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX3JvbGxiYWNrKCRjb25uZWN0aW9uKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9jaThFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJldHVybnMgYSBzdHJpbmcgd2l0aCB0aGUgT3JhY2xlIERhdGFiYXNlIHZlcnNpb24gYW5kIGF2YWlsYWJsZSBvcHRpb25zCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFzIGEgc3RyaW5nLgogKiBAdGhyb3dzIE9jaThFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9jaV9zZXJ2ZXJfdmVyc2lvbigkY29ubmVjdGlvbik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9jaV9zZXJ2ZXJfdmVyc2lvbigkY29ubmVjdGlvbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNldHMgdGhlIGFjdGlvbiBuYW1lIGZvciBPcmFjbGUgdHJhY2luZy4KICoKICogVGhlIGFjdGlvbiBuYW1lIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgZGF0YWJhc2Ugd2hlbiB0aGUgbmV4dAogKiAncm91bmQtdHJpcCcgZnJvbSBQSFAgdG8gdGhlIGRhdGFiYXNlIG9jY3VycywgdHlwaWNhbGx5IHdoZW4gYW4gU1FMCiAqIHN0YXRlbWVudCBpcyBleGVjdXRlZC4KICoKICogVGhlIGFjdGlvbiBuYW1lIGNhbiBzdWJzZXF1ZW50bHkgYmUgcXVlcmllZCBmcm9tIGRhdGFiYXNlIGFkbWluaXN0cmF0aW9uCiAqIHZpZXdzIHN1Y2ggYXMgViRTRVNTSU9OLiAgSXQgY2FuIGJlIHVzZWQgZm9yCiAqIHRyYWNpbmcgYW5kIG1vbml0b3Jpbmcgc3VjaCBhcyB3aXRoIFYkU1FMQVJFQQogKiBhbmQgREJNU19NT05JVE9SLlNFUlZfTU9EX0FDVF9TVEFUX0VOQUJMRS4KICoKICogVGhlIHZhbHVlIG1heSBiZSByZXRhaW5lZCBhY3Jvc3MgcGVyc2lzdGVudCBjb25uZWN0aW9ucy4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIEFuIE9yYWNsZSBjb25uZWN0aW9uIGlkZW50aWZpZXIsCiAqIHJldHVybmVkIGJ5IG9jaV9jb25uZWN0LCBvY2lfcGNvbm5lY3QsCiAqIG9yIG9jaV9uZXdfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkYWN0aW9uX25hbWUgVXNlciBjaG9zZW4gc3RyaW5nIHVwIHRvIDMyIGJ5dGVzIGxvbmcuCiAqIEB0aHJvd3MgT2NpOEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2NpX3NldF9hY3Rpb24oJGNvbm5lY3Rpb24sIHN0cmluZyAkYWN0aW9uX25hbWUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX3NldF9hY3Rpb24oJGNvbm5lY3Rpb24sICRhY3Rpb25fbmFtZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIGEgdGltZW91dCBsaW1pdGluZyB0aGUgbWF4aXVtIHRpbWUgYSBkYXRhYmFzZSByb3VuZC10cmlwIHVzaW5nIHRoaXMgY29ubmVjdGlvbiBtYXkgdGFrZS4KICoKICogRWFjaCBPQ0k4IG9wZXJhdGlvbiBtYXkgbWFrZSB6ZXJvIG9yIG1vcmUgY2FsbHMgdG8gT3JhY2xlJ3MgY2xpZW50CiAqIGxpYnJhcnkuICBUaGVzZSBpbnRlcm5hbCBjYWxscyBtYXkgdGhlbiBtYXkgbWFrZSB6ZXJvIG9yIG1vcmUKICogcm91bmQtdHJpcHMgdG8gT3JhY2xlIERhdGFiYXNlLiAgSWYgYW55IG9uZSBvZiB0aG9zZSByb3VuZC10cmlwcwogKiB0YWtlcyBtb3JlIHRoYW4gdGltZV9vdXQgbWlsbGlzZWNvbmRzLCB0aGVuIHRoZQogKiBvcGVyYXRpb24gaXMgY2FuY2VsbGVkIGFuZCBhbiBlcnJvciBpcyByZXR1cm5lZCB0byB0aGUgYXBwbGljYXRpb24uCiAqCiAqIFRoZSB0aW1lX291dCB2YWx1ZSBhcHBsaWVzIHRvIGVhY2ggcm91bmQtdHJpcAogKiBpbmRpdmlkdWFsbHksIG5vdCB0byB0aGUgc3VtIG9mIGFsbCByb3VuZC10cmlwcy4gIFRpbWUgc3BlbnQKICogcHJvY2Vzc2luZyBpbiBQSFAgT0NJOCBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGNvbXBsZXRpb24gb2YgZWFjaAogKiByb3VuZC10cmlwIGlzIG5vdCBjb3VudGVkLgogKgogKiBXaGVuIGEgY2FsbCBpcyBpbnRlcnJ1cHRlZCwgT3JhY2xlIHdpbGwgYXR0ZW1wdCB0byBjbGVhbiB1cCB0aGUKICogY29ubmVjdGlvbiBmb3IgcmV1c2UuICBUaGlzIG9wZXJhdGlvbiBpcyBhbGxvd2VkIHRvIHJ1biBmb3IKICogYW5vdGhlciB0aW1lX291dCBwZXJpb2QuICBEZXBlbmRpbmcgb24gdGhlCiAqIG91dGNvbWUgb2YgdGhlIGNsZWFudXAsIHRoZSBjb25uZWN0aW9uIG1heSBvciBtYXkgbm90IGJlIHJldXNhYmxlLgogKgogKiBXaGVuIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMgYXJlIHVzZWQsIHRoZSB0aW1lb3V0IHZhbHVlIHdpbGwgYmUKICogcmV0YWluZWQgYWNyb3NzIFBIUCByZXF1ZXN0cy4KICoKICogVGhlIG9jaV9zZXRfY2FsbF90aW1lb3V0IGZ1bmN0aW9uIGlzIGF2YWlsYWJsZQogKiB3aGVuIE9DSTggdXNlcyBPcmFjbGUgMTggKG9yIGxhdGVyKSBDbGllbnQgbGlicmFyaWVzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gQW4gT3JhY2xlIGNvbm5lY3Rpb24gaWRlbnRpZmllciwKICogcmV0dXJuZWQgYnkgb2NpX2Nvbm5lY3QsIG9jaV9wY29ubmVjdCwKICogb3Igb2NpX25ld19jb25uZWN0LgogKiBAcGFyYW0gaW50ICR0aW1lX291dCBUaGUgbWF4aW11bSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0aGF0IGFueSBzaW5nbGUgcm91bmQtdHJpcCBiZXR3ZWVuIFBIUCBhbmQgT3JhY2xlIERhdGFiYXNlIG1heSB0YWtlLgogKiBAdGhyb3dzIE9jaThFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9jaV9zZXRfY2FsbF90aW1lb3V0KCRjb25uZWN0aW9uLCBpbnQgJHRpbWVfb3V0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9jaV9zZXRfY2FsbF90aW1lb3V0KCRjb25uZWN0aW9uLCAkdGltZV9vdXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT2NpOEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyB0aGUgY2xpZW50IGlkZW50aWZpZXIgdXNlZCBieSB2YXJpb3VzIGRhdGFiYXNlIGNvbXBvbmVudHMgdG8KICogaWRlbnRpZnkgbGlnaHR3ZWlnaHQgYXBwbGljYXRpb24gdXNlcnMgd2hvIGF1dGhlbnRpY2F0ZSBhcyB0aGUgc2FtZQogKiBkYXRhYmFzZSB1c2VyLgogKgogKiBUaGUgY2xpZW50IGlkZW50aWZpZXIgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBkYXRhYmFzZSB3aGVuIHRoZSBuZXh0CiAqICdyb3VuZC10cmlwJyBmcm9tIFBIUCB0byB0aGUgZGF0YWJhc2Ugb2NjdXJzLCB0eXBpY2FsbHkgd2hlbiBhbiBTUUwKICogc3RhdGVtZW50IGlzIGV4ZWN1dGVkLgogKgogKiBUaGUgaWRlbnRpZmllciBjYW4gc3Vic2VxdWVudGx5IGJlIHF1ZXJpZWQsIGZvciBleGFtcGxlCiAqIHdpdGggU0VMRUNUIFNZU19DT05URVhUKCdVU0VSRU5WJywnQ0xJRU5UX0lERU5USUZJRVInKQogKiBGUk9NIERVQUwuICBEYXRhYmFzZSBhZG1pbmlzdHJhdGlvbiB2aWV3cyBzdWNoCiAqIGFzIFYkU0VTU0lPTiB3aWxsIGFsc28gY29udGFpbiB0aGUgdmFsdWUuICBJdAogKiBjYW4gYmUgdXNlZCB3aXRoIERCTVNfTU9OSVRPUi5DTElFTlRfSURfVFJBQ0VfRU5BQkxFCiAqIGZvciB0cmFjaW5nIGFuZCBjYW4gYWxzbyBiZSB1c2VkIGZvciBhdWRpdGluZy4KICoKICogVGhlIHZhbHVlIG1heSBiZSByZXRhaW5lZCBhY3Jvc3MgcGFnZSByZXF1ZXN0cyB0aGF0IHVzZSB0aGUgc2FtZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBBbiBPcmFjbGUgY29ubmVjdGlvbiBpZGVudGlmaWVyLAogKiByZXR1cm5lZCBieSBvY2lfY29ubmVjdCwgb2NpX3Bjb25uZWN0LAogKiBvciBvY2lfbmV3X2Nvbm5lY3QuCiAqIEBwYXJhbSBzdHJpbmcgJGNsaWVudF9pZGVudGlmaWVyIFVzZXIgY2hvc2VuIHN0cmluZyB1cCB0byA2NCBieXRlcyBsb25nLgogKiBAdGhyb3dzIE9jaThFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9jaV9zZXRfY2xpZW50X2lkZW50aWZpZXIoJGNvbm5lY3Rpb24sIHN0cmluZyAkY2xpZW50X2lkZW50aWZpZXIpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX3NldF9jbGllbnRfaWRlbnRpZmllcigkY29ubmVjdGlvbiwgJGNsaWVudF9pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9jaThFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgdGhlIGNsaWVudCBpbmZvcm1hdGlvbiBmb3IgT3JhY2xlIHRyYWNpbmcuCiAqCiAqIFRoZSBjbGllbnQgaW5mb3JtYXRpb24gaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBkYXRhYmFzZSB3aGVuIHRoZSBuZXh0CiAqICdyb3VuZC10cmlwJyBmcm9tIFBIUCB0byB0aGUgZGF0YWJhc2Ugb2NjdXJzLCB0eXBpY2FsbHkgd2hlbiBhbiBTUUwKICogc3RhdGVtZW50IGlzIGV4ZWN1dGVkLgogKgogKiBUaGUgY2xpZW50IGluZm9ybWF0aW9uIGNhbiBzdWJzZXF1ZW50bHkgYmUgcXVlcmllZCBmcm9tIGRhdGFiYXNlCiAqIGFkbWluaXN0cmF0aW9uIHZpZXdzIHN1Y2ggYXMgViRTRVNTSU9OLgogKgogKiBUaGUgdmFsdWUgbWF5IGJlIHJldGFpbmVkIGFjcm9zcyBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gQW4gT3JhY2xlIGNvbm5lY3Rpb24gaWRlbnRpZmllciwKICogcmV0dXJuZWQgYnkgb2NpX2Nvbm5lY3QsIG9jaV9wY29ubmVjdCwKICogb3Igb2NpX25ld19jb25uZWN0LgogKiBAcGFyYW0gc3RyaW5nICRjbGllbnRfaW5mbyBVc2VyIGNob3NlbiBzdHJpbmcgdXAgdG8gNjQgYnl0ZXMgbG9uZy4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfc2V0X2NsaWVudF9pbmZvKCRjb25uZWN0aW9uLCBzdHJpbmcgJGNsaWVudF9pbmZvKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9jaV9zZXRfY2xpZW50X2luZm8oJGNvbm5lY3Rpb24sICRjbGllbnRfaW5mbyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIHRoZSBEQk9QIGZvciBPcmFjbGUgdHJhY2luZy4KICoKICogVGhlIGRhdGFiYXNlIG9wZXJhdGlvbiBuYW1lIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgZGF0YWJhc2Ugd2hlbiB0aGUgbmV4dAogKiAncm91bmQtdHJpcCcgZnJvbSBQSFAgdG8gdGhlIGRhdGFiYXNlIG9jY3VycywgdHlwaWNhbGx5IHdoZW4gYSBTUUwKICogc3RhdGVtZW50IGlzIGV4ZWN1dGVkLgogKgogKiBUaGUgZGF0YWJhc2Ugb3BlcmF0aW9uIGNhbiBzdWJzZXF1ZW50bHkgYmUgcXVlcmllZCBmcm9tIGRhdGFiYXNlIGFkbWluaXN0cmF0aW9uCiAqIHZpZXdzIHN1Y2ggYXMgViRTUUxfTU9OSVRPUi4KICoKICogVGhlIG9jaV9zZXRfZGJfb3BlcmF0aW9uIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZQogKiB3aGVuIE9DSTggdXNlcyBPcmFjbGUgMTIgKG9yIGxhdGVyKSBDbGllbnQgbGlicmFyaWVzIGFuZCBPcmFjbGUgRGF0YWJhc2UgMTIgKG9yIGxhdGVyKS4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIEFuIE9yYWNsZSBjb25uZWN0aW9uIGlkZW50aWZpZXIsCiAqIHJldHVybmVkIGJ5IG9jaV9jb25uZWN0LCBvY2lfcGNvbm5lY3QsCiAqIG9yIG9jaV9uZXdfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkZGJvcCBVc2VyIGNob3NlbiBzdHJpbmcuCiAqIEB0aHJvd3MgT2NpOEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2NpX3NldF9kYl9vcGVyYXRpb24oJGNvbm5lY3Rpb24sIHN0cmluZyAkZGJvcCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvY2lfc2V0X2RiX29wZXJhdGlvbigkY29ubmVjdGlvbiwgJGRib3ApOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT2NpOEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyB0aGUgZGF0YWJhc2UgImVkaXRpb24iIG9mIG9iamVjdHMgdG8gYmUgdXNlZCBieSBhIHN1YnNlcXVlbnQKICogY29ubmVjdGlvbnMuCiAqCiAqIE9yYWNsZSBFZGl0aW9ucyBhbGxvdyBjb25jdXJyZW50IHZlcnNpb25zIG9mIGFwcGxpY2F0aW9ucyB0byBydW4KICogdXNpbmcgdGhlIHNhbWUgc2NoZW1hIGFuZCBvYmplY3QgbmFtZXMuICBUaGlzIGlzIHVzZWZ1bCBmb3IKICogdXBncmFkaW5nIGxpdmUgc3lzdGVtcy4KICoKICogQ2FsbCBvY2lfc2V0X2VkaXRpb24gYmVmb3JlIGNhbGxpbmcKICogb2NpX2Nvbm5lY3QsIG9jaV9wY29ubmVjdAogKiBvciBvY2lfbmV3X2Nvbm5lY3QuCiAqCiAqIElmIGFuIGVkaXRpb24gaXMgc2V0IHRoYXQgaXMgbm90IHZhbGlkIGluIHRoZSBkYXRhYmFzZSwgY29ubmVjdGlvbgogKiB3aWxsIGZhaWwgZXZlbiBpZiBvY2lfc2V0X2VkaXRpb24gcmV0dXJucyBzdWNjZXNzLgogKgogKiBXaGVuIHVzaW5nIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMsIGlmIGEgY29ubmVjdGlvbiB3aXRoIHRoZQogKiByZXF1ZXN0ZWQgZWRpdGlvbiBzZXR0aW5nIGFscmVhZHkgZXhpc3RzLCBpdCBpcyByZXVzZWQuICBPdGhlcndpc2UsCiAqIGEgZGlmZmVyZW50IHBlcnNpc3RlbnQgY29ubmVjdGlvbiBpcyBjcmVhdGVkCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGVkaXRpb24gT3JhY2xlIERhdGFiYXNlIGVkaXRpb24gbmFtZSBwcmV2aW91c2x5IGNyZWF0ZWQgd2l0aCB0aGUgU1FMCiAqICJDUkVBVEUgRURJVElPTiIgY29tbWFuZC4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfc2V0X2VkaXRpb24oc3RyaW5nICRlZGl0aW9uKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9jaV9zZXRfZWRpdGlvbigkZWRpdGlvbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIHRoZSBtb2R1bGUgbmFtZSBmb3IgT3JhY2xlIHRyYWNpbmcuCiAqCiAqIFRoZSBtb2R1bGUgbmFtZSBpcyByZWdpc3RlcmVkIHdpdGggdGhlIGRhdGFiYXNlIHdoZW4gdGhlIG5leHQKICogJ3JvdW5kLXRyaXAnIGZyb20gUEhQIHRvIHRoZSBkYXRhYmFzZSBvY2N1cnMsIHR5cGljYWxseSB3aGVuIGFuIFNRTAogKiBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQuCiAqCiAqIFRoZSBuYW1lIGNhbiBzdWJzZXF1ZW50bHkgYmUgcXVlcmllZCBmcm9tIGRhdGFiYXNlIGFkbWluaXN0cmF0aW9uCiAqIHZpZXdzIHN1Y2ggYXMgViRTRVNTSU9OLiAgSXQgY2FuIGJlIHVzZWQgZm9yCiAqIHRyYWNpbmcgYW5kIG1vbml0b3Jpbmcgc3VjaCBhcyB3aXRoIFYkU1FMQVJFQQogKiBhbmQgREJNU19NT05JVE9SLlNFUlZfTU9EX0FDVF9TVEFUX0VOQUJMRS4KICoKICogVGhlIHZhbHVlIG1heSBiZSByZXRhaW5lZCBhY3Jvc3MgcGVyc2lzdGVudCBjb25uZWN0aW9ucy4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIEFuIE9yYWNsZSBjb25uZWN0aW9uIGlkZW50aWZpZXIsCiAqIHJldHVybmVkIGJ5IG9jaV9jb25uZWN0LCBvY2lfcGNvbm5lY3QsCiAqIG9yIG9jaV9uZXdfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkbW9kdWxlX25hbWUgVXNlciBjaG9zZW4gc3RyaW5nIHVwIHRvIDQ4IGJ5dGVzIGxvbmcuCiAqIEB0aHJvd3MgT2NpOEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2NpX3NldF9tb2R1bGVfbmFtZSgkY29ubmVjdGlvbiwgc3RyaW5nICRtb2R1bGVfbmFtZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvY2lfc2V0X21vZHVsZV9uYW1lKCRjb25uZWN0aW9uLCAkbW9kdWxlX25hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT2NpOEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyB0aGUgbnVtYmVyIG9mIHJvd3MgdG8gYmUgYnVmZmVyZWQgYnkgdGhlIE9yYWNsZSBDbGllbnQKICogbGlicmFyaWVzIGFmdGVyIGEgc3VjY2Vzc2Z1bCBxdWVyeSBjYWxsCiAqIHRvIG9jaV9leGVjdXRlIGFuZCBmb3IgZWFjaCBzdWJzZXF1ZW50CiAqIGludGVybmFsIGZldGNoIHJlcXVlc3QgdG8gdGhlIGRhdGFiYXNlLiAgRm9yIHF1ZXJpZXMgcmV0dXJuaW5nIGEKICogbGFyZ2UgbnVtYmVyIG9mIHJvd3MsIHBlcmZvcm1hbmNlIGNhbiBiZSBzaWduaWZpY2FudGx5IGltcHJvdmVkIGJ5CiAqIGluY3JlYXNpbmcgdGhlIHByZWZldGNoIGNvdW50IGFib3ZlIHRoZQogKiBkZWZhdWx0IG9jaTguZGVmYXVsdF9wcmVmZXRjaAogKiB2YWx1ZS4KICoKICogUHJlZmV0Y2hpbmcgaXMgT3JhY2xlJ3MgZWZmaWNpZW50IHdheSBvZiByZXR1cm5pbmcgbW9yZSB0aGFuIG9uZQogKiBkYXRhIHJvdyBmcm9tIHRoZSBkYXRhYmFzZSBpbiBlYWNoIG5ldHdvcmsgcmVxdWVzdC4gIFRoaXMgY2FuCiAqIHJlc3VsdCBpbiBiZXR0ZXIgbmV0d29yayBhbmQgQ1BVIHV0aWxpemF0aW9uLiAgVGhlIGJ1ZmZlcmluZyBvZgogKiByb3dzIGlzIGludGVybmFsIHRvIE9DSTggYW5kIHRoZSBiZWhhdmlvciBvZiBPQ0k4IGZldGNoaW5nCiAqIGZ1bmN0aW9ucyBpcyB1bmNoYW5nZWQgcmVnYXJkbGVzcyBvZiB0aGUgcHJlZmV0Y2ggY291bnQuIEZvcgogKiBleGFtcGxlLCBvY2lfZmV0Y2hfcm93IHdpbGwgYWx3YXlzIHJldHVybiBvbmUKICogcm93LiAgVGhlIHByZWZldGNoIGJ1ZmZlciBpcyBwZXItc3RhdGVtZW50IGFuZCBpcyBub3QgdXNlZCBieQogKiByZS1leGVjdXRlZCBzdGF0ZW1lbnRzIG9yIGJ5IG90aGVyIGNvbm5lY3Rpb25zLgogKgogKiBDYWxsIG9jaV9zZXRfcHJlZmV0Y2ggYmVmb3JlCiAqIGNhbGxpbmcgb2NpX2V4ZWN1dGUuCiAqCiAqIEEgdHVuaW5nIGdvYWwgaXMgdG8gc2V0IHRoZSBwcmVmZXRjaCB2YWx1ZSB0byBhIHJlYXNvbmFibGUgc2l6ZSBmb3IKICogdGhlIG5ldHdvcmsgYW5kIGRhdGFiYXNlIHRvIGhhbmRsZS4gIEZvciBxdWVyaWVzIHJldHVybmluZyBhIHZlcnkKICogbGFyZ2UgbnVtYmVyIG9mIHJvd3MsIG92ZXJhbGwgc3lzdGVtIGVmZmljaWVuY3kgbWlnaHQgYmUgYmV0dGVyIGlmCiAqIHJvd3MgYXJlIHJldHJpZXZlZCBmcm9tIHRoZSBkYXRhYmFzZSBpbiBzZXZlcmFsIGNodW5rcyAoaS5lIHNldCB0aGUKICogcHJlZmV0Y2ggdmFsdWUgc21hbGxlciB0aGFuIHRoZSBudW1iZXIgb2Ygcm93cykuICBUaGlzIGFsbG93cyB0aGUKICogZGF0YWJhc2UgdG8gaGFuZGxlIG90aGVyIHVzZXJzJyBzdGF0ZW1lbnRzIHdoaWxlIHRoZSBQSFAgc2NyaXB0IGlzCiAqIHByb2Nlc3NpbmcgdGhlIGN1cnJlbnQgc2V0IG9mIHJvd3MuCiAqCiAqIFF1ZXJ5IHByZWZldGNoaW5nIHdhcyBpbnRyb2R1Y2VkIGluIE9yYWNsZSA4aS4gIFJFRiBDVVJTT1IKICogcHJlZmV0Y2hpbmcgd2FzIGludHJvZHVjZWQgaW4gT3JhY2xlIDExZ1IyIGFuZCBvY2N1cnMgd2hlbiBQSFAgaXMKICogbGlua2VkIHdpdGggT3JhY2xlIDExZ1IyIChvciBsYXRlcikgQ2xpZW50IGxpYnJhcmllcy4KICogTmVzdGVkIGN1cnNvciBwcmVmZXRjaGluZyB3YXMKICogaW50cm9kdWNlZCBpbiBPcmFjbGUgMTFnUjIgYW5kIHJlcXVpcmVzIGJvdGggdGhlIE9yYWNsZSBDbGllbnQKICogbGlicmFyaWVzIGFuZCB0aGUgZGF0YWJhc2UgdG8gYmUgdmVyc2lvbiAxMWdSMiBvciBncmVhdGVyLgogKgogKiBQcmVmZXRjaGluZyBpcyBub3Qgc3VwcG9ydGVkIHdoZW4gcXVlcmllcyBjb250YWluIExPTkcgb3IgTE9CCiAqIGNvbHVtbnMuICBUaGUgcHJlZmV0Y2ggdmFsdWUgaXMgaWdub3JlZCBhbmQgc2luZ2xlLXJvdyBmZXRjaGVzIHdpbGwKICogYmUgdXNlZCBpbiBhbGwgdGhlIHNpdHVhdGlvbnMgd2hlbiBwcmVmZXRjaGluZyBpcyBub3Qgc3VwcG9ydGVkLgogKgogKiBXaGVuIHVzaW5nIE9yYWNsZSBEYXRhYmFzZSAxMmMsIHRoZSBwcmVmZXRjaAogKiB2YWx1ZSBzZXQgYnkgUEhQIGNhbiBiZSBvdmVycmlkZGVuIGJ5IE9yYWNsZSdzCiAqIGNsaWVudCBvcmFhY2Nlc3MueG1sIGNvbmZpZ3VyYXRpb24gZmlsZS4gIFJlZmVyCiAqIHRvIE9yYWNsZSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGRldGFpbC4KICoKICogQHBhcmFtIHJlc291cmNlICRzdGF0ZW1lbnQgQSB2YWxpZCBPQ0k4IHN0YXRlbWVudAogKiBpZGVudGlmaWVyIGNyZWF0ZWQgYnkgb2NpX3BhcnNlIGFuZCBleGVjdXRlZAogKiBieSBvY2lfZXhlY3V0ZSwgb3IgYSBSRUYKICogQ1VSU09SIHN0YXRlbWVudCBpZGVudGlmaWVyLgogKiBAcGFyYW0gaW50ICRyb3dzIFRoZSBudW1iZXIgb2Ygcm93cyB0byBiZSBwcmVmZXRjaGVkLCAmZ3Q7PSAwCiAqIEB0aHJvd3MgT2NpOEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2NpX3NldF9wcmVmZXRjaCgkc3RhdGVtZW50LCBpbnQgJHJvd3MpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX3NldF9wcmVmZXRjaCgkc3RhdGVtZW50LCAkcm93cyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBSZXR1cm5zIGEga2V5d29yZCBpZGVudGlmeWluZyB0aGUgdHlwZSBvZiB0aGUKICogT0NJOCBzdGF0ZW1lbnQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50IEEgdmFsaWQgT0NJOCBzdGF0ZW1lbnQgaWRlbnRpZmllciBmcm9tIG9jaV9wYXJzZS4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgdHlwZSBvZiBzdGF0ZW1lbnQgYXMgb25lIG9mIHRoZQogKiBmb2xsb3dpbmcgc3RyaW5ncy4KICoKICogU3RhdGVtZW50IHR5cGUKICoKICoKICoKICogUmV0dXJuIFN0cmluZwogKiBOb3RlcwogKgogKgogKgogKgogKiBBTFRFUgogKgogKgogKgogKiBCRUdJTgogKgogKgogKgogKiBDQUxMCiAqIEludHJvZHVjZWQgaW4gUEhQIDUuMi4xIChQRUNMIE9DSTggMS4yLjMpCiAqCiAqCiAqIENSRUFURQogKgogKgogKgogKiBERUNMQVJFCiAqCiAqCiAqCiAqIERFTEVURQogKgogKgogKgogKiBEUk9QCiAqCiAqCiAqCiAqIElOU0VSVAogKgogKgogKgogKiBTRUxFQ1QKICoKICoKICoKICogVVBEQVRFCiAqCiAqCiAqCiAqIFVOS05PVy4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfc3RhdGVtZW50X3R5cGUoJHN0YXRlbWVudCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9jaV9zdGF0ZW1lbnRfdHlwZSgkc3RhdGVtZW50KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9jaThFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVW5yZWdpc3RlciB0aGUgdXNlci1kZWZpbmVkIGNhbGxiYWNrIGZ1bmN0aW9uIHJlZ2lzdGVyZWQgdG8gY29ubmVjdGlvbgogKiBieSBvY2lfcmVnaXN0ZXJfdGFmX2NhbGxiYWNrLiBTZWUKICogT0NJOCBUcmFuc3BhcmVudCBBcHBsaWNhdGlvbiBGYWlsb3ZlciAoVEFGKSBTdXBwb3J0CiAqIGZvciBpbmZvcm1hdGlvbi4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIEFuIE9yYWNsZSBjb25uZWN0aW9uIGlkZW50aWZpZXIuCiAqIEB0aHJvd3MgT2NpOEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2NpX3VucmVnaXN0ZXJfdGFmX2NhbGxiYWNrKCRjb25uZWN0aW9uKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9jaV91bnJlZ2lzdGVyX3RhZl9jYWxsYmFjaygkY29ubmVjdGlvbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/opcache.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xPcGNhY2hlRXhjZXB0aW9uOwoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gY29tcGlsZXMgYSBQSFAgc2NyaXB0IGFuZCBhZGRzIGl0IHRvIHRoZSBvcGNvZGUgY2FjaGUgd2l0aG91dAogKiBleGVjdXRpbmcgaXQuIFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJpbWUgdGhlIGNhY2hlIGFmdGVyIGEgV2ViIHNlcnZlcgogKiByZXN0YXJ0IGJ5IHByZS1jYWNoaW5nIGZpbGVzIHRoYXQgd2lsbCBiZSBpbmNsdWRlZCBpbiBsYXRlciByZXF1ZXN0cy4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZSBUaGUgcGF0aCB0byB0aGUgUEhQIHNjcmlwdCB0byBiZSBjb21waWxlZC4KICogQHRocm93cyBPcGNhY2hlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvcGNhY2hlX2NvbXBpbGVfZmlsZShzdHJpbmcgJGZpbGUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb3BjYWNoZV9jb21waWxlX2ZpbGUoJGZpbGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3BjYWNoZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHN0YXRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjYWNoZSBpbnN0YW5jZQogKgogKiBAcGFyYW0gYm9vbCAkZ2V0X3NjcmlwdHMgSW5jbHVkZSBzY3JpcHQgc3BlY2lmaWMgc3RhdGUgaW5mb3JtYXRpb24KICogQHJldHVybiBhcnJheSBSZXR1cm5zIGFuIGFycmF5IG9mIGluZm9ybWF0aW9uLCBvcHRpb25hbGx5IGNvbnRhaW5pbmcgc2NyaXB0IHNwZWNpZmljIHN0YXRlIGluZm9ybWF0aW9uLgogKiBAdGhyb3dzIE9wY2FjaGVFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wY2FjaGVfZ2V0X3N0YXR1cyhib29sICRnZXRfc2NyaXB0cyA9IHRydWUpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9wY2FjaGVfZ2V0X3N0YXR1cygkZ2V0X3NjcmlwdHMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3BjYWNoZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/openssl.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xPcGVuc3NsRXhjZXB0aW9uOwoKLyoqCiAqIEdldHMgdGhlIGNpcGhlciBpbml0aWFsaXphdGlvbiB2ZWN0b3IgKGl2KSBsZW5ndGguCiAqCiAqIEBwYXJhbSBzdHJpbmcgJG1ldGhvZCBUaGUgY2lwaGVyIG1ldGhvZCwgc2VlIG9wZW5zc2xfZ2V0X2NpcGhlcl9tZXRob2RzIGZvciBhIGxpc3Qgb2YgcG90ZW50aWFsIHZhbHVlcy4KICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgY2lwaGVyIGxlbmd0aCBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIE9wZW5zc2xFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wZW5zc2xfY2lwaGVyX2l2X2xlbmd0aChzdHJpbmcgJG1ldGhvZCk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9wZW5zc2xfY2lwaGVyX2l2X2xlbmd0aCgkbWV0aG9kKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9wZW5zc2xFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogb3BlbnNzbF9jc3JfZXhwb3J0X3RvX2ZpbGUgdGFrZXMgdGhlIENlcnRpZmljYXRlCiAqIFNpZ25pbmcgUmVxdWVzdCByZXByZXNlbnRlZCBieSBjc3IgYW5kIHNhdmVzIGl0CiAqIGluIFBFTSBmb3JtYXQgaW50byB0aGUgZmlsZSBuYW1lZCBieSBvdXRmaWxlbmFtZS4KICoKICogQHBhcmFtIHN0cmluZ3xyZXNvdXJjZSAkY3NyIFNlZSBDU1IgcGFyYW1ldGVycyBmb3IgYSBsaXN0IG9mIHZhbGlkIHZhbHVlcy4KICogQHBhcmFtIHN0cmluZyAkb3V0ZmlsZW5hbWUgUGF0aCB0byB0aGUgb3V0cHV0IGZpbGUuCiAqIEBwYXJhbSBib29sICRub3RleHQKICogVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBub3RleHQgYWZmZWN0cwogKiB0aGUgdmVyYm9zaXR5IG9mIHRoZSBvdXRwdXQ7IGlmIGl0IGlzIEZBTFNFLCB0aGVuIGFkZGl0aW9uYWwgaHVtYW4tcmVhZGFibGUKICogaW5mb3JtYXRpb24gaXMgaW5jbHVkZWQgaW4gdGhlIG91dHB1dC4gVGhlIGRlZmF1bHQgdmFsdWUgb2YKICogbm90ZXh0IGlzIFRSVUUuCiAqIEB0aHJvd3MgT3BlbnNzbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb3BlbnNzbF9jc3JfZXhwb3J0X3RvX2ZpbGUoJGNzciwgc3RyaW5nICRvdXRmaWxlbmFtZSwgYm9vbCAkbm90ZXh0ID0gdHJ1ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvcGVuc3NsX2Nzcl9leHBvcnRfdG9fZmlsZSgkY3NyLCAkb3V0ZmlsZW5hbWUsICRub3RleHQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3BlbnNzbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogb3BlbnNzbF9jc3JfZXhwb3J0IHRha2VzIHRoZSBDZXJ0aWZpY2F0ZSBTaWduaW5nCiAqIFJlcXVlc3QgcmVwcmVzZW50ZWQgYnkgY3NyIGFuZCBzdG9yZXMgaXQgaW4KICogUEVNIGZvcm1hdCBpbiBvdXQsIHdoaWNoIGlzIHBhc3NlZCBieQogKiByZWZlcmVuY2UuCiAqCiAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2UgJGNzciBTZWUgQ1NSIHBhcmFtZXRlcnMgZm9yIGEgbGlzdCBvZiB2YWxpZCB2YWx1ZXMuCiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkb3V0IG9uIHN1Y2Nlc3MsIHRoaXMgc3RyaW5nIHdpbGwgY29udGFpbiB0aGUgUEVNIGVuY29kZWQgQ1NSCiAqIEBwYXJhbSBib29sICRub3RleHQKICogVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBub3RleHQgYWZmZWN0cwogKiB0aGUgdmVyYm9zaXR5IG9mIHRoZSBvdXRwdXQ7IGlmIGl0IGlzIEZBTFNFLCB0aGVuIGFkZGl0aW9uYWwgaHVtYW4tcmVhZGFibGUKICogaW5mb3JtYXRpb24gaXMgaW5jbHVkZWQgaW4gdGhlIG91dHB1dC4gVGhlIGRlZmF1bHQgdmFsdWUgb2YKICogbm90ZXh0IGlzIFRSVUUuCiAqIEB0aHJvd3MgT3BlbnNzbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb3BlbnNzbF9jc3JfZXhwb3J0KCRjc3IsID9zdHJpbmcgJiRvdXQsIGJvb2wgJG5vdGV4dCA9IHRydWUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb3BlbnNzbF9jc3JfZXhwb3J0KCRjc3IsICRvdXQsICRub3RleHQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3BlbnNzbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogb3BlbnNzbF9jc3JfZ2V0X3N1YmplY3QgcmV0dXJucyBzdWJqZWN0CiAqIGRpc3Rpbmd1aXNoZWQgbmFtZSBpbmZvcm1hdGlvbiBlbmNvZGVkIGluIHRoZSBjc3IKICogaW5jbHVkaW5nIGZpZWxkcyBjb21tb25OYW1lIChDTiksIG9yZ2FuaXphdGlvbk5hbWUgKE8pLCBjb3VudHJ5TmFtZSAoQykgZXRjLgogKgogKiBAcGFyYW0gc3RyaW5nfHJlc291cmNlICRjc3IgU2VlIENTUiBwYXJhbWV0ZXJzIGZvciBhIGxpc3Qgb2YgdmFsaWQgdmFsdWVzLgogKiBAcGFyYW0gYm9vbCAkdXNlX3Nob3J0bmFtZXMgc2hvcnRuYW1lcyBjb250cm9scyBob3cgdGhlIGRhdGEgaXMgaW5kZXhlZCBpbiB0aGUKICogYXJyYXkgLSBpZiBzaG9ydG5hbWVzIGlzIFRSVUUgKHRoZSBkZWZhdWx0KSB0aGVuCiAqIGZpZWxkcyB3aWxsIGJlIGluZGV4ZWQgd2l0aCB0aGUgc2hvcnQgbmFtZSBmb3JtLCBvdGhlcndpc2UsIHRoZSBsb25nIG5hbWUKICogZm9ybSB3aWxsIGJlIHVzZWQgLSBlLmcuOiBDTiBpcyB0aGUgc2hvcnRuYW1lIGZvcm0gb2YgY29tbW9uTmFtZS4KICogQHJldHVybiBhcnJheSBSZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IHdpdGggc3ViamVjdCBkZXNjcmlwdGlvbi4KICogQHRocm93cyBPcGVuc3NsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvcGVuc3NsX2Nzcl9nZXRfc3ViamVjdCgkY3NyLCBib29sICR1c2Vfc2hvcnRuYW1lcyA9IHRydWUpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9wZW5zc2xfY3NyX2dldF9zdWJqZWN0KCRjc3IsICR1c2Vfc2hvcnRuYW1lcyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIG9wZW5zc2xfY3NyX25ldyBnZW5lcmF0ZXMgYSBuZXcgQ1NSIChDZXJ0aWZpY2F0ZSBTaWduaW5nIFJlcXVlc3QpCiAqIGJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCBieSBkbi4KICoKICogQHBhcmFtIGFycmF5ICRkbiBUaGUgRGlzdGluZ3Vpc2hlZCBOYW1lIG9yIHN1YmplY3QgZmllbGRzIHRvIGJlIHVzZWQgaW4gdGhlIGNlcnRpZmljYXRlLgogKiBAcGFyYW0gcmVzb3VyY2UgJHByaXZrZXkgcHJpdmtleSBzaG91bGQgYmUgc2V0IHRvIGEgcHJpdmF0ZSBrZXkgdGhhdCB3YXMKICogcHJldmlvdXNseSBnZW5lcmF0ZWQgYnkgb3BlbnNzbF9wa2V5X25ldyAob3IKICogb3RoZXJ3aXNlIG9idGFpbmVkIGZyb20gdGhlIG90aGVyIG9wZW5zc2xfcGtleSBmYW1pbHkgb2YgZnVuY3Rpb25zKS4KICogVGhlIGNvcnJlc3BvbmRpbmcgcHVibGljIHBvcnRpb24gb2YgdGhlIGtleSB3aWxsIGJlIHVzZWQgdG8gc2lnbiB0aGUKICogQ1NSLgogKiBAcGFyYW0gYXJyYXkgJGNvbmZpZ2FyZ3MgQnkgZGVmYXVsdCwgdGhlIGluZm9ybWF0aW9uIGluIHlvdXIgc3lzdGVtIG9wZW5zc2wuY29uZgogKiBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHJlcXVlc3Q7IHlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gZmlsZQogKiBzZWN0aW9uIGJ5IHNldHRpbmcgdGhlIGNvbmZpZ19zZWN0aW9uX3NlY3Rpb24ga2V5IG9mCiAqIGNvbmZpZ2FyZ3MuICBZb3UgY2FuIGFsc28gc3BlY2lmeSBhbiBhbHRlcm5hdGl2ZQogKiBvcGVuc3NsIGNvbmZpZ3VyYXRpb24gZmlsZSBieSBzZXR0aW5nIHRoZSB2YWx1ZSBvZiB0aGUKICogY29uZmlnIGtleSB0byB0aGUgcGF0aCBvZiB0aGUgZmlsZSB5b3Ugd2FudCB0byB1c2UuCiAqIFRoZSBmb2xsb3dpbmcga2V5cywgaWYgcHJlc2VudCBpbiBjb25maWdhcmdzCiAqIGJlaGF2ZSBhcyB0aGVpciBlcXVpdmFsZW50cyBpbiB0aGUgb3BlbnNzbC5jb25mLCBhcwogKiBsaXN0ZWQgaW4gdGhlIHRhYmxlIGJlbG93LgogKgogKiBDb25maWd1cmF0aW9uIG92ZXJyaWRlcwogKgogKgogKgogKiBjb25maWdhcmdzIGtleQogKiB0eXBlCiAqIG9wZW5zc2wuY29uZiBlcXVpdmFsZW50CiAqIGRlc2NyaXB0aW9uCiAqCiAqCiAqCiAqCiAqIGRpZ2VzdF9hbGcKICogc3RyaW5nCiAqIGRlZmF1bHRfbWQKICogRGlnZXN0IG1ldGhvZCBvciBzaWduYXR1cmUgaGFzaCwgdXN1YWxseSBvbmUgb2Ygb3BlbnNzbF9nZXRfbWRfbWV0aG9kcwogKgogKgogKiB4NTA5X2V4dGVuc2lvbnMKICogc3RyaW5nCiAqIHg1MDlfZXh0ZW5zaW9ucwogKiBTZWxlY3RzIHdoaWNoIGV4dGVuc2lvbnMgc2hvdWxkIGJlIHVzZWQgd2hlbiBjcmVhdGluZyBhbiB4NTA5CiAqIGNlcnRpZmljYXRlCiAqCiAqCiAqIHJlcV9leHRlbnNpb25zCiAqIHN0cmluZwogKiByZXFfZXh0ZW5zaW9ucwogKiBTZWxlY3RzIHdoaWNoIGV4dGVuc2lvbnMgc2hvdWxkIGJlIHVzZWQgd2hlbiBjcmVhdGluZyBhIENTUgogKgogKgogKiBwcml2YXRlX2tleV9iaXRzCiAqIGludGVnZXIKICogZGVmYXVsdF9iaXRzCiAqIFNwZWNpZmllcyBob3cgbWFueSBiaXRzIHNob3VsZCBiZSB1c2VkIHRvIGdlbmVyYXRlIGEgcHJpdmF0ZQogKiBrZXkKICoKICoKICogcHJpdmF0ZV9rZXlfdHlwZQogKiBpbnRlZ2VyCiAqIG5vbmUKICogU3BlY2lmaWVzIHRoZSB0eXBlIG9mIHByaXZhdGUga2V5IHRvIGNyZWF0ZS4gIFRoaXMgY2FuIGJlIG9uZQogKiBvZiBPUEVOU1NMX0tFWVRZUEVfRFNBLAogKiBPUEVOU1NMX0tFWVRZUEVfREgsCiAqIE9QRU5TU0xfS0VZVFlQRV9SU0Egb3IKICogT1BFTlNTTF9LRVlUWVBFX0VDLgogKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBPUEVOU1NMX0tFWVRZUEVfUlNBLgogKgogKgogKgogKiBlbmNyeXB0X2tleQogKiBib29sZWFuCiAqIGVuY3J5cHRfa2V5CiAqIFNob3VsZCBhbiBleHBvcnRlZCBrZXkgKHdpdGggcGFzc3BocmFzZSkgYmUgZW5jcnlwdGVkPwogKgogKgogKiBlbmNyeXB0X2tleV9jaXBoZXIKICogaW50ZWdlcgogKiBub25lCiAqCiAqIE9uZSBvZiBjaXBoZXIgY29uc3RhbnRzLgogKgogKgogKgogKiBjdXJ2ZV9uYW1lCiAqIHN0cmluZwogKiBub25lCiAqCiAqIE9uZSBvZiBvcGVuc3NsX2dldF9jdXJ2ZV9uYW1lcy4KICoKICoKICoKICogY29uZmlnCiAqIHN0cmluZwogKiBOL0EKICoKICogUGF0aCB0byB5b3VyIG93biBhbHRlcm5hdGl2ZSBvcGVuc3NsLmNvbmYgZmlsZS4KICoKICoKICoKICoKICoKICogQHBhcmFtIGFycmF5ICRleHRyYWF0dHJpYnMgZXh0cmFhdHRyaWJzIGlzIHVzZWQgdG8gc3BlY2lmeSBhZGRpdGlvbmFsCiAqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIENTUi4gIEJvdGggZG4gYW5kCiAqIGV4dHJhYXR0cmlicyBhcmUgYXNzb2NpYXRpdmUgYXJyYXlzIHdob3NlIGtleXMgYXJlCiAqIGNvbnZlcnRlZCB0byBPSURzIGFuZCBhcHBsaWVkIHRvIHRoZSByZWxldmFudCBwYXJ0IG9mIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgdGhlIENTUi4KICogQHRocm93cyBPcGVuc3NsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvcGVuc3NsX2Nzcl9uZXcoYXJyYXkgJGRuLCAmJHByaXZrZXksIGFycmF5ICRjb25maWdhcmdzID0gbnVsbCwgYXJyYXkgJGV4dHJhYXR0cmlicyA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkZXh0cmFhdHRyaWJzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvcGVuc3NsX2Nzcl9uZXcoJGRuLCAkcHJpdmtleSwgJGNvbmZpZ2FyZ3MsICRleHRyYWF0dHJpYnMpOwogICAgfSBlbHNlaWYgKCRjb25maWdhcmdzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvcGVuc3NsX2Nzcl9uZXcoJGRuLCAkcHJpdmtleSwgJGNvbmZpZ2FyZ3MpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG9wZW5zc2xfY3NyX25ldygkZG4sICRwcml2a2V5KTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9wZW5zc2xFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogb3BlbnNzbF9jc3Jfc2lnbiBnZW5lcmF0ZXMgYW4geDUwOSBjZXJ0aWZpY2F0ZQogKiByZXNvdXJjZSBmcm9tIHRoZSBnaXZlbiBDU1IuCiAqCiAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2UgJGNzciBBIENTUiBwcmV2aW91c2x5IGdlbmVyYXRlZCBieSBvcGVuc3NsX2Nzcl9uZXcuCiAqIEl0IGNhbiBhbHNvIGJlIHRoZSBwYXRoIHRvIGEgUEVNIGVuY29kZWQgQ1NSIHdoZW4gc3BlY2lmaWVkIGFzCiAqIGZpbGU6Ly9wYXRoL3RvL2NzciBvciBhbiBleHBvcnRlZCBzdHJpbmcgZ2VuZXJhdGVkCiAqIGJ5IG9wZW5zc2xfY3NyX2V4cG9ydC4KICogQHBhcmFtIG1peGVkICRjYWNlcnQgVGhlIGdlbmVyYXRlZCBjZXJ0aWZpY2F0ZSB3aWxsIGJlIHNpZ25lZCBieSBjYWNlcnQuCiAqIElmIGNhY2VydCBpcyBOVUxMLCB0aGUgZ2VuZXJhdGVkIGNlcnRpZmljYXRlCiAqIHdpbGwgYmUgYSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZS4KICogQHBhcmFtIHN0cmluZ3xyZXNvdXJjZXxhcnJheSAkcHJpdl9rZXkgcHJpdl9rZXkgaXMgdGhlIHByaXZhdGUga2V5IHRoYXQgY29ycmVzcG9uZHMgdG8KICogY2FjZXJ0LgogKiBAcGFyYW0gaW50ICRkYXlzIGRheXMgc3BlY2lmaWVzIHRoZSBsZW5ndGggb2YgdGltZSBmb3Igd2hpY2ggdGhlCiAqIGdlbmVyYXRlZCBjZXJ0aWZpY2F0ZSB3aWxsIGJlIHZhbGlkLCBpbiBkYXlzLgogKiBAcGFyYW0gYXJyYXkgJGNvbmZpZ2FyZ3MgWW91IGNhbiBmaW5ldHVuZSB0aGUgQ1NSIHNpZ25pbmcgYnkgY29uZmlnYXJncy4KICogU2VlIG9wZW5zc2xfY3NyX25ldyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dAogKiBjb25maWdhcmdzLgogKiBAcGFyYW0gaW50ICRzZXJpYWwgQW4gb3B0aW9uYWwgdGhlIHNlcmlhbCBudW1iZXIgb2YgaXNzdWVkIGNlcnRpZmljYXRlLiBJZiBub3Qgc3BlY2lmaWVkCiAqIGl0IHdpbGwgZGVmYXVsdCB0byAwLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYW4geDUwOSBjZXJ0aWZpY2F0ZSByZXNvdXJjZSBvbiBzdWNjZXNzLCBGQUxTRSBvbiBmYWlsdXJlLgogKiBAdGhyb3dzIE9wZW5zc2xFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wZW5zc2xfY3NyX3NpZ24oJGNzciwgJGNhY2VydCwgJHByaXZfa2V5LCBpbnQgJGRheXMsIGFycmF5ICRjb25maWdhcmdzID0gbnVsbCwgaW50ICRzZXJpYWwgPSAwKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHNlcmlhbCAhPT0gMCkgewogICAgICAgICRyZXN1bHQgPSBcb3BlbnNzbF9jc3Jfc2lnbigkY3NyLCAkY2FjZXJ0LCAkcHJpdl9rZXksICRkYXlzLCAkY29uZmlnYXJncywgJHNlcmlhbCk7CiAgICB9IGVsc2VpZiAoJGNvbmZpZ2FyZ3MgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG9wZW5zc2xfY3NyX3NpZ24oJGNzciwgJGNhY2VydCwgJHByaXZfa2V5LCAkZGF5cywgJGNvbmZpZ2FyZ3MpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG9wZW5zc2xfY3NyX3NpZ24oJGNzciwgJGNhY2VydCwgJHByaXZfa2V5LCAkZGF5cyk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRha2VzIGEgcmF3IG9yIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBhbmQgZGVjcnlwdHMgaXQgdXNpbmcgYSBnaXZlbiBtZXRob2QgYW5kIGtleS4KICoKICogQHBhcmFtIHN0cmluZyAkZGF0YSBUaGUgZW5jcnlwdGVkIG1lc3NhZ2UgdG8gYmUgZGVjcnlwdGVkLgogKiBAcGFyYW0gc3RyaW5nICRtZXRob2QgVGhlIGNpcGhlciBtZXRob2QuIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIGNpcGhlciBtZXRob2RzLCB1c2UKICogb3BlbnNzbF9nZXRfY2lwaGVyX21ldGhvZHMuCiAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5LgogKiBAcGFyYW0gaW50ICRvcHRpb25zIG9wdGlvbnMgY2FuIGJlIG9uZSBvZgogKiBPUEVOU1NMX1JBV19EQVRBLAogKiBPUEVOU1NMX1pFUk9fUEFERElORy4KICogQHBhcmFtIHN0cmluZyAkaXYgQSBub24tTlVMTCBJbml0aWFsaXphdGlvbiBWZWN0b3IuCiAqIEBwYXJhbSBzdHJpbmcgJHRhZyBUaGUgYXV0aGVudGljYXRpb24gdGFnIGluIEFFQUQgY2lwaGVyIG1vZGUuIElmIGl0IGlzIGluY29ycmVjdCwgdGhlIGF1dGhlbnRpY2F0aW9uIGZhaWxzIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyBGQUxTRS4KICogQHBhcmFtIHN0cmluZyAkYWFkIEFkZGl0aW9uYWwgYXV0aGVudGljYXRpb24gZGF0YS4KICogQHJldHVybiBzdHJpbmcgVGhlIGRlY3J5cHRlZCBzdHJpbmcgb24gc3VjY2Vzcy4KICogQHRocm93cyBPcGVuc3NsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvcGVuc3NsX2RlY3J5cHQoc3RyaW5nICRkYXRhLCBzdHJpbmcgJG1ldGhvZCwgc3RyaW5nICRrZXksIGludCAkb3B0aW9ucyA9IDAsIHN0cmluZyAkaXYgPSAiIiwgc3RyaW5nICR0YWcgPSAiIiwgc3RyaW5nICRhYWQgPSAiIik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9wZW5zc2xfZGVjcnlwdCgkZGF0YSwgJG1ldGhvZCwgJGtleSwgJG9wdGlvbnMsICRpdiwgJHRhZywgJGFhZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoZSBzaGFyZWQgc2VjcmV0IHJldHVybmVkIGJ5IG9wZW5zc2xfZGhfY29tcHV0ZV9rZXkgaXMKICogb2Z0ZW4gdXNlZCBhcyBhbiBlbmNyeXB0aW9uIGtleSB0byBzZWNyZXRseSBjb21tdW5pY2F0ZSB3aXRoIGEgcmVtb3RlIHBhcnR5LgogKiBUaGlzIGlzIGtub3duIGFzIHRoZSBEaWZmaWUtSGVsbG1hbiBrZXkgZXhjaGFuZ2UuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHB1Yl9rZXkgREggUHVibGljIGtleSBvZiB0aGUgcmVtb3RlIHBhcnR5LgogKiBAcGFyYW0gcmVzb3VyY2UgJGRoX2tleSBBIGxvY2FsIERIIHByaXZhdGUga2V5LCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwdWJsaWMga2V5IHRvIGJlIHNoYXJlZCB3aXRoIHRoZSByZW1vdGUgcGFydHkuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgc2hhcmVkIHNlY3JldCBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIE9wZW5zc2xFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wZW5zc2xfZGhfY29tcHV0ZV9rZXkoc3RyaW5nICRwdWJfa2V5LCAkZGhfa2V5KTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb3BlbnNzbF9kaF9jb21wdXRlX2tleSgkcHViX2tleSwgJGRoX2tleSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIENvbXB1dGVzIGEgZGlnZXN0IGhhc2ggdmFsdWUgZm9yIHRoZSBnaXZlbiBkYXRhIHVzaW5nIGEgZ2l2ZW4gbWV0aG9kLAogKiBhbmQgcmV0dXJucyBhIHJhdyBvciBiaW5oZXggZW5jb2RlZCBzdHJpbmcuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIGRhdGEuCiAqIEBwYXJhbSBzdHJpbmcgJG1ldGhvZCBUaGUgZGlnZXN0IG1ldGhvZCB0byB1c2UsIGUuZy4gInNoYTI1NiIsIHNlZSBvcGVuc3NsX2dldF9tZF9tZXRob2RzIGZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIGRpZ2VzdCBtZXRob2RzLgogKiBAcGFyYW0gYm9vbCAkcmF3X291dHB1dCBTZXR0aW5nIHRvIFRSVUUgd2lsbCByZXR1cm4gYXMgcmF3IG91dHB1dCBkYXRhLCBvdGhlcndpc2UgdGhlIHJldHVybgogKiB2YWx1ZSBpcyBiaW5oZXggZW5jb2RlZC4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgZGlnZXN0ZWQgaGFzaCB2YWx1ZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIE9wZW5zc2xFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wZW5zc2xfZGlnZXN0KHN0cmluZyAkZGF0YSwgc3RyaW5nICRtZXRob2QsIGJvb2wgJHJhd19vdXRwdXQgPSBmYWxzZSk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9wZW5zc2xfZGlnZXN0KCRkYXRhLCAkbWV0aG9kLCAkcmF3X291dHB1dCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIG9wZW5zc2xfb3BlbiBvcGVucyAoZGVjcnlwdHMpCiAqIHNlYWxlZF9kYXRhIHVzaW5nIHRoZSBwcml2YXRlIGtleSBhc3NvY2lhdGVkIHdpdGgKICogdGhlIGtleSBpZGVudGlmaWVyIHByaXZfa2V5X2lkIGFuZCB0aGUgZW52ZWxvcGUga2V5CiAqIGVudl9rZXksIGFuZCBmaWxscwogKiBvcGVuX2RhdGEgd2l0aCB0aGUgZGVjcnlwdGVkIGRhdGEuCiAqIFRoZSBlbnZlbG9wZSBrZXkgaXMgZ2VuZXJhdGVkIHdoZW4gdGhlCiAqIGRhdGEgYXJlIHNlYWxlZCBhbmQgY2FuIG9ubHkgYmUgdXNlZCBieSBvbmUgc3BlY2lmaWMgcHJpdmF0ZSBrZXkuIFNlZQogKiBvcGVuc3NsX3NlYWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHNlYWxlZF9kYXRhCiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkb3Blbl9kYXRhIElmIHRoZSBjYWxsIGlzIHN1Y2Nlc3NmdWwgdGhlIG9wZW5lZCBkYXRhIGlzIHJldHVybmVkIGluIHRoaXMKICogcGFyYW1ldGVyLgogKiBAcGFyYW0gc3RyaW5nICRlbnZfa2V5CiAqIEBwYXJhbSBzdHJpbmd8YXJyYXl8cmVzb3VyY2UgJHByaXZfa2V5X2lkCiAqIEBwYXJhbSBzdHJpbmcgJG1ldGhvZCBUaGUgY2lwaGVyIG1ldGhvZC4KICogQHBhcmFtIHN0cmluZyAkaXYgVGhlIGluaXRpYWxpemF0aW9uIHZlY3Rvci4KICogQHRocm93cyBPcGVuc3NsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvcGVuc3NsX29wZW4oc3RyaW5nICRzZWFsZWRfZGF0YSwgP3N0cmluZyAmJG9wZW5fZGF0YSwgc3RyaW5nICRlbnZfa2V5LCAkcHJpdl9rZXlfaWQsIHN0cmluZyAkbWV0aG9kID0gIlJDNCIsIHN0cmluZyAkaXYgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGl2ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvcGVuc3NsX29wZW4oJHNlYWxlZF9kYXRhLCAkb3Blbl9kYXRhLCAkZW52X2tleSwgJHByaXZfa2V5X2lkLCAkbWV0aG9kLCAkaXYpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG9wZW5zc2xfb3Blbigkc2VhbGVkX2RhdGEsICRvcGVuX2RhdGEsICRlbnZfa2V5LCAkcHJpdl9rZXlfaWQsICRtZXRob2QpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3BlbnNzbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogb3BlbnNzbF9wYmtkZjIgY29tcHV0ZXMgUEJLREYyIChQYXNzd29yZC1CYXNlZCBLZXkgRGVyaXZhdGlvbiBGdW5jdGlvbiAyKSwKICogYSBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbiBkZWZpbmVkIGluIFBLQ1M1IHYyLgogKgogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZCBQYXNzd29yZCBmcm9tIHdoaWNoIHRoZSBkZXJpdmVkIGtleSBpcyBnZW5lcmF0ZWQuCiAqIEBwYXJhbSBzdHJpbmcgJHNhbHQgUEJLREYyIHJlY29tbWVuZHMgYSBjcnl0b2dyYXBoaWMgc2FsdCBvZiBhdCBsZWFzdCA2NCBiaXRzICg4IGJ5dGVzKS4KICogQHBhcmFtIGludCAka2V5X2xlbmd0aCBMZW5ndGggb2YgZGVzaXJlZCBvdXRwdXQga2V5LgogKiBAcGFyYW0gaW50ICRpdGVyYXRpb25zIFRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBkZXNpcmVkLiBOSVNUCiAqIHJlY29tbWVuZHMgYXQgbGVhc3QgMTAsMDAwLgogKiBAcGFyYW0gc3RyaW5nICRkaWdlc3RfYWxnb3JpdGhtIE9wdGlvbmFsIGhhc2ggb3IgZGlnZXN0IGFsZ29yaXRobSBmcm9tIG9wZW5zc2xfZ2V0X21kX21ldGhvZHMuICBEZWZhdWx0cyB0byBTSEEtMS4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyByYXcgYmluYXJ5IHN0cmluZy4KICogQHRocm93cyBPcGVuc3NsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvcGVuc3NsX3Bia2RmMihzdHJpbmcgJHBhc3N3b3JkLCBzdHJpbmcgJHNhbHQsIGludCAka2V5X2xlbmd0aCwgaW50ICRpdGVyYXRpb25zLCBzdHJpbmcgJGRpZ2VzdF9hbGdvcml0aG0gPSAic2hhMSIpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvcGVuc3NsX3Bia2RmMigkcGFzc3dvcmQsICRzYWx0LCAka2V5X2xlbmd0aCwgJGl0ZXJhdGlvbnMsICRkaWdlc3RfYWxnb3JpdGhtKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9wZW5zc2xFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogb3BlbnNzbF9wa2NzMTJfZXhwb3J0X3RvX2ZpbGUgc3RvcmVzCiAqIHg1MDkgaW50byBhIGZpbGUgbmFtZWQgYnkKICogZmlsZW5hbWUgaW4gYSBQS0NTIzEyIGZpbGUgZm9ybWF0LgogKgogKiBAcGFyYW0gc3RyaW5nfHJlc291cmNlICR4NTA5IFNlZSBLZXkvQ2VydGlmaWNhdGUgcGFyYW1ldGVycyBmb3IgYSBsaXN0IG9mIHZhbGlkIHZhbHVlcy4KICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgUGF0aCB0byB0aGUgb3V0cHV0IGZpbGUuCiAqIEBwYXJhbSBzdHJpbmd8YXJyYXl8cmVzb3VyY2UgJHByaXZfa2V5IFByaXZhdGUga2V5IGNvbXBvbmVudCBvZiBQS0NTIzEyIGZpbGUuCiAqIFNlZSBQdWJsaWMvUHJpdmF0ZSBLZXkgcGFyYW1ldGVycyBmb3IgYSBsaXN0IG9mIHZhbGlkIHZhbHVlcy4KICogQHBhcmFtIHN0cmluZyAkcGFzcyBFbmNyeXB0aW9uIHBhc3N3b3JkIGZvciB1bmxvY2tpbmcgdGhlIFBLQ1MjMTIgZmlsZS4KICogQHBhcmFtIGFycmF5ICRhcmdzIE9wdGlvbmFsIGFycmF5LCBvdGhlciBrZXlzIHdpbGwgYmUgaWdub3JlZC4KICoKICoKICoKICoKICogS2V5CiAqIERlc2NyaXB0aW9uCiAqCiAqCiAqCiAqCiAqICJleHRyYWNlcnRzIgogKiBhcnJheSBvZiBleHRyYSBjZXJ0aWZpY2F0ZXMgb3IgYSBzaW5nbGUgY2VydGlmaWNhdGUgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIFBLQ1MjMTIgZmlsZS4KICoKICoKICogImZyaWVuZGx5bmFtZSIKICogc3RyaW5nIHRvIGJlIHVzZWQgZm9yIHRoZSBzdXBwbGllZCBjZXJ0aWZpY2F0ZSBhbmQga2V5CiAqCiAqCiAqCiAqCiAqIEB0aHJvd3MgT3BlbnNzbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb3BlbnNzbF9wa2NzMTJfZXhwb3J0X3RvX2ZpbGUoJHg1MDksIHN0cmluZyAkZmlsZW5hbWUsICRwcml2X2tleSwgc3RyaW5nICRwYXNzLCBhcnJheSAkYXJncyA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkYXJncyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcb3BlbnNzbF9wa2NzMTJfZXhwb3J0X3RvX2ZpbGUoJHg1MDksICRmaWxlbmFtZSwgJHByaXZfa2V5LCAkcGFzcywgJGFyZ3MpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG9wZW5zc2xfcGtjczEyX2V4cG9ydF90b19maWxlKCR4NTA5LCAkZmlsZW5hbWUsICRwcml2X2tleSwgJHBhc3MpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3BlbnNzbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogb3BlbnNzbF9wa2NzMTJfZXhwb3J0IHN0b3JlcwogKiB4NTA5IGludG8gYSBzdHJpbmcgbmFtZWQgYnkKICogb3V0IGluIGEgUEtDUyMxMiBmaWxlIGZvcm1hdC4KICoKICogQHBhcmFtIHN0cmluZ3xyZXNvdXJjZSAkeDUwOSBTZWUgS2V5L0NlcnRpZmljYXRlIHBhcmFtZXRlcnMgZm9yIGEgbGlzdCBvZiB2YWxpZCB2YWx1ZXMuCiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkb3V0IE9uIHN1Y2Nlc3MsIHRoaXMgd2lsbCBob2xkIHRoZSBQS0NTIzEyLgogKiBAcGFyYW0gc3RyaW5nfGFycmF5fHJlc291cmNlICRwcml2X2tleSBQcml2YXRlIGtleSBjb21wb25lbnQgb2YgUEtDUyMxMiBmaWxlLgogKiBTZWUgUHVibGljL1ByaXZhdGUgS2V5IHBhcmFtZXRlcnMgZm9yIGEgbGlzdCBvZiB2YWxpZCB2YWx1ZXMuCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3MgRW5jcnlwdGlvbiBwYXNzd29yZCBmb3IgdW5sb2NraW5nIHRoZSBQS0NTIzEyIGZpbGUuCiAqIEBwYXJhbSBhcnJheSAkYXJncyBPcHRpb25hbCBhcnJheSwgb3RoZXIga2V5cyB3aWxsIGJlIGlnbm9yZWQuCiAqCiAqCiAqCiAqCiAqIEtleQogKiBEZXNjcmlwdGlvbgogKgogKgogKgogKgogKiAiZXh0cmFjZXJ0cyIKICogYXJyYXkgb2YgZXh0cmEgY2VydGlmaWNhdGVzIG9yIGEgc2luZ2xlIGNlcnRpZmljYXRlIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBQS0NTIzEyIGZpbGUuCiAqCiAqCiAqICJmcmllbmRseW5hbWUiCiAqIHN0cmluZyB0byBiZSB1c2VkIGZvciB0aGUgc3VwcGxpZWQgY2VydGlmaWNhdGUgYW5kIGtleQogKgogKgogKgogKgogKiBAdGhyb3dzIE9wZW5zc2xFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wZW5zc2xfcGtjczEyX2V4cG9ydCgkeDUwOSwgP3N0cmluZyAmJG91dCwgJHByaXZfa2V5LCBzdHJpbmcgJHBhc3MsIGFycmF5ICRhcmdzID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRhcmdzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvcGVuc3NsX3BrY3MxMl9leHBvcnQoJHg1MDksICRvdXQsICRwcml2X2tleSwgJHBhc3MsICRhcmdzKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxvcGVuc3NsX3BrY3MxMl9leHBvcnQoJHg1MDksICRvdXQsICRwcml2X2tleSwgJHBhc3MpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3BlbnNzbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogb3BlbnNzbF9wa2NzMTJfcmVhZCBwYXJzZXMgdGhlIFBLQ1MjMTIgY2VydGlmaWNhdGUgc3RvcmUgc3VwcGxpZWQgYnkKICogcGtjczEyIGludG8gYSBhcnJheSBuYW1lZAogKiBjZXJ0cy4KICoKICogQHBhcmFtIHN0cmluZyAkcGtjczEyIFRoZSBjZXJ0aWZpY2F0ZSBzdG9yZSBjb250ZW50cywgbm90IGl0cyBmaWxlIG5hbWUuCiAqIEBwYXJhbSBhcnJheXxudWxsICRjZXJ0cyBPbiBzdWNjZXNzLCB0aGlzIHdpbGwgaG9sZCB0aGUgQ2VydGlmaWNhdGUgU3RvcmUgRGF0YS4KICogQHBhcmFtIHN0cmluZyAkcGFzcyBFbmNyeXB0aW9uIHBhc3N3b3JkIGZvciB1bmxvY2tpbmcgdGhlIFBLQ1MjMTIgZmlsZS4KICogQHRocm93cyBPcGVuc3NsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvcGVuc3NsX3BrY3MxMl9yZWFkKHN0cmluZyAkcGtjczEyLCA/YXJyYXkgJiRjZXJ0cywgc3RyaW5nICRwYXNzKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9wZW5zc2xfcGtjczEyX3JlYWQoJHBrY3MxMiwgJGNlcnRzLCAkcGFzcyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBEZWNyeXB0cyB0aGUgUy9NSU1FIGVuY3J5cHRlZCBtZXNzYWdlIGNvbnRhaW5lZCBpbiB0aGUgZmlsZSBzcGVjaWZpZWQgYnkKICogaW5maWxlbmFtZSB1c2luZyB0aGUgY2VydGlmaWNhdGUgYW5kIGl0cwogKiBhc3NvY2lhdGVkIHByaXZhdGUga2V5IHNwZWNpZmllZCBieSByZWNpcGNlcnQgYW5kCiAqIHJlY2lwa2V5LgogKgogKiBAcGFyYW0gc3RyaW5nICRpbmZpbGVuYW1lCiAqIEBwYXJhbSBzdHJpbmcgJG91dGZpbGVuYW1lIFRoZSBkZWNyeXB0ZWQgbWVzc2FnZSBpcyB3cml0dGVuIHRvIHRoZSBmaWxlIHNwZWNpZmllZCBieQogKiBvdXRmaWxlbmFtZS4KICogQHBhcmFtIHN0cmluZ3xyZXNvdXJjZSAkcmVjaXBjZXJ0CiAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2V8YXJyYXkgJHJlY2lwa2V5CiAqIEB0aHJvd3MgT3BlbnNzbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb3BlbnNzbF9wa2NzN19kZWNyeXB0KHN0cmluZyAkaW5maWxlbmFtZSwgc3RyaW5nICRvdXRmaWxlbmFtZSwgJHJlY2lwY2VydCwgJHJlY2lwa2V5ID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRyZWNpcGtleSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcb3BlbnNzbF9wa2NzN19kZWNyeXB0KCRpbmZpbGVuYW1lLCAkb3V0ZmlsZW5hbWUsICRyZWNpcGNlcnQsICRyZWNpcGtleSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcb3BlbnNzbF9wa2NzN19kZWNyeXB0KCRpbmZpbGVuYW1lLCAkb3V0ZmlsZW5hbWUsICRyZWNpcGNlcnQpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3BlbnNzbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogb3BlbnNzbF9wa2NzN19lbmNyeXB0IHRha2VzIHRoZSBjb250ZW50cyBvZiB0aGUKICogZmlsZSBuYW1lZCBpbmZpbGUgYW5kIGVuY3J5cHRzIHRoZW0gdXNpbmcgYW4gUkMyCiAqIDQwLWJpdCBjaXBoZXIgc28gdGhhdCB0aGV5IGNhbiBvbmx5IGJlIHJlYWQgYnkgdGhlIGludGVuZGVkIHJlY2lwaWVudHMKICogc3BlY2lmaWVkIGJ5IHJlY2lwY2VydHMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGluZmlsZQogKiBAcGFyYW0gc3RyaW5nICRvdXRmaWxlCiAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2V8YXJyYXkgJHJlY2lwY2VydHMgRWl0aGVyIGEgbG9uZSBYLjUwOSBjZXJ0aWZpY2F0ZSwgb3IgYW4gYXJyYXkgb2YgWC41MDkgY2VydGlmaWNhdGVzLgogKiBAcGFyYW0gYXJyYXkgJGhlYWRlcnMgaGVhZGVycyBpcyBhbiBhcnJheSBvZiBoZWFkZXJzIHRoYXQKICogd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhlIGRhdGEgYWZ0ZXIgaXQgaGFzIGJlZW4gZW5jcnlwdGVkLgogKgogKiBoZWFkZXJzIGNhbiBiZSBlaXRoZXIgYW4gYXNzb2NpYXRpdmUgYXJyYXkKICoga2V5ZWQgYnkgaGVhZGVyIG5hbWUsIG9yIGFuIGluZGV4ZWQgYXJyYXksIHdoZXJlIGVhY2ggZWxlbWVudCBjb250YWlucwogKiBhIHNpbmdsZSBoZWFkZXIgbGluZS4KICogQHBhcmFtIGludCAkZmxhZ3MgZmxhZ3MgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvcHRpb25zIHRoYXQgYWZmZWN0CiAqIHRoZSBlbmNvZGluZyBwcm9jZXNzIC0gc2VlIFBLQ1M3CiAqIGNvbnN0YW50cy4KICogQHBhcmFtIGludCAkY2lwaGVyaWQgT25lIG9mIGNpcGhlciBjb25zdGFudHMuCiAqIEB0aHJvd3MgT3BlbnNzbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb3BlbnNzbF9wa2NzN19lbmNyeXB0KHN0cmluZyAkaW5maWxlLCBzdHJpbmcgJG91dGZpbGUsICRyZWNpcGNlcnRzLCBhcnJheSAkaGVhZGVycywgaW50ICRmbGFncyA9IDAsIGludCAkY2lwaGVyaWQgPSBPUEVOU1NMX0NJUEhFUl9SQzJfNDApOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb3BlbnNzbF9wa2NzN19lbmNyeXB0KCRpbmZpbGUsICRvdXRmaWxlLCAkcmVjaXBjZXJ0cywgJGhlYWRlcnMsICRmbGFncywgJGNpcGhlcmlkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9wZW5zc2xFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGluZmlsZW5hbWUKICogQHBhcmFtIGFycmF5fG51bGwgJGNlcnRzCiAqIEB0aHJvd3MgT3BlbnNzbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb3BlbnNzbF9wa2NzN19yZWFkKHN0cmluZyAkaW5maWxlbmFtZSwgP2FycmF5ICYkY2VydHMpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb3BlbnNzbF9wa2NzN19yZWFkKCRpbmZpbGVuYW1lLCAkY2VydHMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3BlbnNzbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogb3BlbnNzbF9wa2NzN19zaWduIHRha2VzIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZQogKiBuYW1lZCBpbmZpbGVuYW1lIGFuZCBzaWducyB0aGVtIHVzaW5nIHRoZQogKiBjZXJ0aWZpY2F0ZSBhbmQgaXRzIG1hdGNoaW5nIHByaXZhdGUga2V5IHNwZWNpZmllZCBieQogKiBzaWduY2VydCBhbmQgcHJpdmtleQogKiBwYXJhbWV0ZXJzLgogKgogKiBAcGFyYW0gc3RyaW5nICRpbmZpbGVuYW1lIFRoZSBpbnB1dCBmaWxlIHlvdSBhcmUgaW50ZW5kaW5nIHRvIGRpZ2l0YWxseSBzaWduLgogKiBAcGFyYW0gc3RyaW5nICRvdXRmaWxlbmFtZSBUaGUgZmlsZSB3aGljaCB0aGUgZGlnaXRhbCBzaWduYXR1cmUgd2lsbCBiZSB3cml0dGVuIHRvLgogKiBAcGFyYW0gc3RyaW5nfHJlc291cmNlICRzaWduY2VydCBUaGUgWC41MDkgY2VydGlmaWNhdGUgdXNlZCB0byBkaWdpdGFsbHkgc2lnbiBpbmZpbGVuYW1lLgogKiBTZWUgS2V5L0NlcnRpZmljYXRlIHBhcmFtZXRlcnMgZm9yIGEgbGlzdCBvZiB2YWxpZCB2YWx1ZXMuCiAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2V8YXJyYXkgJHByaXZrZXkgcHJpdmtleSBpcyB0aGUgcHJpdmF0ZSBrZXkgY29ycmVzcG9uZGluZyB0byBzaWduY2VydC4KICogU2VlIFB1YmxpYy9Qcml2YXRlIEtleSBwYXJhbWV0ZXJzIGZvciBhIGxpc3Qgb2YgdmFsaWQgdmFsdWVzLgogKiBAcGFyYW0gYXJyYXkgJGhlYWRlcnMgaGVhZGVycyBpcyBhbiBhcnJheSBvZiBoZWFkZXJzIHRoYXQKICogd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhlIGRhdGEgYWZ0ZXIgaXQgaGFzIGJlZW4gc2lnbmVkIChzZWUKICogb3BlbnNzbF9wa2NzN19lbmNyeXB0IGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0CiAqIHRoZSBmb3JtYXQgb2YgdGhpcyBwYXJhbWV0ZXIpLgogKiBAcGFyYW0gaW50ICRmbGFncyBmbGFncyBjYW4gYmUgdXNlZCB0byBhbHRlciB0aGUgb3V0cHV0IC0gc2VlIFBLQ1M3IGNvbnN0YW50cy4KICogQHBhcmFtIHN0cmluZyAkZXh0cmFjZXJ0cyBleHRyYWNlcnRzIHNwZWNpZmllcyB0aGUgbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZwogKiBhIGJ1bmNoIG9mIGV4dHJhIGNlcnRpZmljYXRlcyB0byBpbmNsdWRlIGluIHRoZSBzaWduYXR1cmUgd2hpY2ggY2FuIGZvcgogKiBleGFtcGxlIGJlIHVzZWQgdG8gaGVscCB0aGUgcmVjaXBpZW50IHRvIHZlcmlmeSB0aGUgY2VydGlmaWNhdGUgdGhhdCB5b3UgdXNlZC4KICogQHRocm93cyBPcGVuc3NsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvcGVuc3NsX3BrY3M3X3NpZ24oc3RyaW5nICRpbmZpbGVuYW1lLCBzdHJpbmcgJG91dGZpbGVuYW1lLCAkc2lnbmNlcnQsICRwcml2a2V5LCBhcnJheSAkaGVhZGVycywgaW50ICRmbGFncyA9IFBLQ1M3X0RFVEFDSEVELCBzdHJpbmcgJGV4dHJhY2VydHMgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGV4dHJhY2VydHMgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG9wZW5zc2xfcGtjczdfc2lnbigkaW5maWxlbmFtZSwgJG91dGZpbGVuYW1lLCAkc2lnbmNlcnQsICRwcml2a2V5LCAkaGVhZGVycywgJGZsYWdzLCAkZXh0cmFjZXJ0cyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcb3BlbnNzbF9wa2NzN19zaWduKCRpbmZpbGVuYW1lLCAkb3V0ZmlsZW5hbWUsICRzaWduY2VydCwgJHByaXZrZXksICRoZWFkZXJzLCAkZmxhZ3MpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3BlbnNzbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogb3BlbnNzbF9wa2V5X2V4cG9ydF90b19maWxlIHNhdmVzIGFuIGFzY2lpLWFybW91cmVkCiAqIChQRU0gZW5jb2RlZCkgcmVuZGl0aW9uIG9mIGtleSBpbnRvIHRoZSBmaWxlIG5hbWVkCiAqIGJ5IG91dGZpbGVuYW1lLgogKgogKiBAcGFyYW0gcmVzb3VyY2V8c3RyaW5nfGFycmF5ICRrZXkKICogQHBhcmFtIHN0cmluZyAkb3V0ZmlsZW5hbWUgUGF0aCB0byB0aGUgb3V0cHV0IGZpbGUuCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3NwaHJhc2UgVGhlIGtleSBjYW4gYmUgb3B0aW9uYWxseSBwcm90ZWN0ZWQgYnkgYQogKiBwYXNzcGhyYXNlLgogKiBAcGFyYW0gYXJyYXkgJGNvbmZpZ2FyZ3MgY29uZmlnYXJncyBjYW4gYmUgdXNlZCB0byBmaW5lLXR1bmUgdGhlIGV4cG9ydAogKiBwcm9jZXNzIGJ5IHNwZWNpZnlpbmcgYW5kL29yIG92ZXJyaWRpbmcgb3B0aW9ucyBmb3IgdGhlIG9wZW5zc2wKICogY29uZmlndXJhdGlvbiBmaWxlLiBTZWUgb3BlbnNzbF9jc3JfbmV3IGZvciBtb3JlCiAqIGluZm9ybWF0aW9uIGFib3V0IGNvbmZpZ2FyZ3MuCiAqIEB0aHJvd3MgT3BlbnNzbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb3BlbnNzbF9wa2V5X2V4cG9ydF90b19maWxlKCRrZXksIHN0cmluZyAkb3V0ZmlsZW5hbWUsIHN0cmluZyAkcGFzc3BocmFzZSA9IG51bGwsIGFycmF5ICRjb25maWdhcmdzID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb25maWdhcmdzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvcGVuc3NsX3BrZXlfZXhwb3J0X3RvX2ZpbGUoJGtleSwgJG91dGZpbGVuYW1lLCAkcGFzc3BocmFzZSwgJGNvbmZpZ2FyZ3MpOwogICAgfSBlbHNlaWYgKCRwYXNzcGhyYXNlICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvcGVuc3NsX3BrZXlfZXhwb3J0X3RvX2ZpbGUoJGtleSwgJG91dGZpbGVuYW1lLCAkcGFzc3BocmFzZSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcb3BlbnNzbF9wa2V5X2V4cG9ydF90b19maWxlKCRrZXksICRvdXRmaWxlbmFtZSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBvcGVuc3NsX3BrZXlfZXhwb3J0IGV4cG9ydHMKICoga2V5IGFzIGEgUEVNIGVuY29kZWQgc3RyaW5nIGFuZCBzdG9yZXMgaXQgaW50bwogKiBvdXQgKHdoaWNoIGlzIHBhc3NlZCBieSByZWZlcmVuY2UpLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGtleQogKiBAcGFyYW0gc3RyaW5nfG51bGwgJG91dAogKiBAcGFyYW0gc3RyaW5nICRwYXNzcGhyYXNlIFRoZSBrZXkgaXMgb3B0aW9uYWxseSBwcm90ZWN0ZWQgYnkgcGFzc3BocmFzZS4KICogQHBhcmFtIGFycmF5ICRjb25maWdhcmdzIGNvbmZpZ2FyZ3MgY2FuIGJlIHVzZWQgdG8gZmluZS10dW5lIHRoZSBleHBvcnQKICogcHJvY2VzcyBieSBzcGVjaWZ5aW5nIGFuZC9vciBvdmVycmlkaW5nIG9wdGlvbnMgZm9yIHRoZSBvcGVuc3NsCiAqIGNvbmZpZ3VyYXRpb24gZmlsZS4gIFNlZSBvcGVuc3NsX2Nzcl9uZXcgZm9yIG1vcmUKICogaW5mb3JtYXRpb24gYWJvdXQgY29uZmlnYXJncy4KICogQHRocm93cyBPcGVuc3NsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvcGVuc3NsX3BrZXlfZXhwb3J0KCRrZXksID9zdHJpbmcgJiRvdXQsIHN0cmluZyAkcGFzc3BocmFzZSA9IG51bGwsIGFycmF5ICRjb25maWdhcmdzID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb25maWdhcmdzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvcGVuc3NsX3BrZXlfZXhwb3J0KCRrZXksICRvdXQsICRwYXNzcGhyYXNlLCAkY29uZmlnYXJncyk7CiAgICB9IGVsc2VpZiAoJHBhc3NwaHJhc2UgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG9wZW5zc2xfcGtleV9leHBvcnQoJGtleSwgJG91dCwgJHBhc3NwaHJhc2UpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG9wZW5zc2xfcGtleV9leHBvcnQoJGtleSwgJG91dCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBvcGVuc3NsX3BrZXlfZ2V0X3ByaXZhdGUgcGFyc2VzCiAqIGtleSBhbmQgcHJlcGFyZXMgaXQgZm9yIHVzZSBieSBvdGhlciBmdW5jdGlvbnMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGtleSBrZXkgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogKgogKiBhIHN0cmluZyBoYXZpbmcgdGhlIGZvcm1hdAogKiBmaWxlOi8vcGF0aC90by9maWxlLnBlbS4gVGhlIG5hbWVkIGZpbGUgbXVzdAogKiBjb250YWluIGEgUEVNIGVuY29kZWQgY2VydGlmaWNhdGUvcHJpdmF0ZSBrZXkgKGl0IG1heSBjb250YWluIGJvdGgpLgogKgogKgogKiBBIFBFTSBmb3JtYXR0ZWQgcHJpdmF0ZSBrZXkuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3NwaHJhc2UgVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBwYXNzcGhyYXNlIG11c3QgYmUgdXNlZAogKiBpZiB0aGUgc3BlY2lmaWVkIGtleSBpcyBlbmNyeXB0ZWQgKHByb3RlY3RlZCBieSBhIHBhc3NwaHJhc2UpLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBwb3NpdGl2ZSBrZXkgcmVzb3VyY2UgaWRlbnRpZmllciBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIE9wZW5zc2xFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wZW5zc2xfcGtleV9nZXRfcHJpdmF0ZShzdHJpbmcgJGtleSwgc3RyaW5nICRwYXNzcGhyYXNlID0gIiIpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb3BlbnNzbF9wa2V5X2dldF9wcml2YXRlKCRrZXksICRwYXNzcGhyYXNlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9wZW5zc2xFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogb3BlbnNzbF9wa2V5X2dldF9wdWJsaWMgZXh0cmFjdHMgdGhlIHB1YmxpYyBrZXkgZnJvbQogKiBjZXJ0aWZpY2F0ZSBhbmQgcHJlcGFyZXMgaXQgZm9yIHVzZSBieSBvdGhlcgogKiBmdW5jdGlvbnMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZXxzdHJpbmcgJGNlcnRpZmljYXRlIGNlcnRpZmljYXRlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICoKICogYW4gWC41MDkgY2VydGlmaWNhdGUgcmVzb3VyY2UKICogYSBzdHJpbmcgaGF2aW5nIHRoZSBmb3JtYXQKICogZmlsZTovL3BhdGgvdG8vZmlsZS5wZW0uIFRoZSBuYW1lZCBmaWxlIG11c3QKICogY29udGFpbiBhIFBFTSBlbmNvZGVkIGNlcnRpZmljYXRlL3B1YmxpYyBrZXkgKGl0IG1heSBjb250YWluIGJvdGgpLgogKgogKgogKiBBIFBFTSBmb3JtYXR0ZWQgcHVibGljIGtleS4KICoKICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgcG9zaXRpdmUga2V5IHJlc291cmNlIGlkZW50aWZpZXIgb24gc3VjY2Vzcy4KICogQHRocm93cyBPcGVuc3NsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvcGVuc3NsX3BrZXlfZ2V0X3B1YmxpYygkY2VydGlmaWNhdGUpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb3BlbnNzbF9wa2V5X2dldF9wdWJsaWMoJGNlcnRpZmljYXRlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9wZW5zc2xFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogb3BlbnNzbF9wa2V5X25ldyBnZW5lcmF0ZXMgYSBuZXcgcHJpdmF0ZSBhbmQgcHVibGljCiAqIGtleSBwYWlyLiAgVGhlIHB1YmxpYyBjb21wb25lbnQgb2YgdGhlIGtleSBjYW4gYmUgb2J0YWluZWQgdXNpbmcKICogb3BlbnNzbF9wa2V5X2dldF9wdWJsaWMuCiAqCiAqIEBwYXJhbSBhcnJheSAkY29uZmlnYXJncyBZb3UgY2FuIGZpbmV0dW5lIHRoZSBrZXkgZ2VuZXJhdGlvbiAoc3VjaCBhcyBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YKICogYml0cykgdXNpbmcgY29uZmlnYXJncy4gIFNlZQogKiBvcGVuc3NsX2Nzcl9uZXcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQKICogY29uZmlnYXJncy4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgcmVzb3VyY2UgaWRlbnRpZmllciBmb3IgdGhlIHBrZXkgb24gc3VjY2Vzcy4KICogQHRocm93cyBPcGVuc3NsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvcGVuc3NsX3BrZXlfbmV3KGFycmF5ICRjb25maWdhcmdzID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb25maWdhcmdzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvcGVuc3NsX3BrZXlfbmV3KCRjb25maWdhcmdzKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxvcGVuc3NsX3BrZXlfbmV3KCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIG9wZW5zc2xfcHJpdmF0ZV9kZWNyeXB0IGRlY3J5cHRzCiAqIGRhdGEgdGhhdCB3YXMgcHJldmlvdXNseSBlbmNyeXB0ZWQgdmlhCiAqIG9wZW5zc2xfcHVibGljX2VuY3J5cHQgYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGludG8KICogZGVjcnlwdGVkLgogKgogKiBZb3UgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIGUuZy4gdG8gZGVjcnlwdCBkYXRhIHdoaWNoIGlzIHN1cHBvc2VkIHRvIG9ubHkgYmUgYXZhaWxhYmxlIHRvIHlvdS4KICoKICogQHBhcmFtIHN0cmluZyAkZGF0YQogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGRlY3J5cHRlZAogKiBAcGFyYW0gc3RyaW5nfHJlc291cmNlfGFycmF5ICRrZXkga2V5IG11c3QgYmUgdGhlIHByaXZhdGUga2V5IGNvcnJlc3BvbmRpbmcgdGhhdAogKiB3YXMgdXNlZCB0byBlbmNyeXB0IHRoZSBkYXRhLgogKiBAcGFyYW0gaW50ICRwYWRkaW5nIHBhZGRpbmcgY2FuIGJlIG9uZSBvZgogKiBPUEVOU1NMX1BLQ1MxX1BBRERJTkcsCiAqIE9QRU5TU0xfU1NMVjIzX1BBRERJTkcsCiAqIE9QRU5TU0xfUEtDUzFfT0FFUF9QQURESU5HLAogKiBPUEVOU1NMX05PX1BBRERJTkcuCiAqIEB0aHJvd3MgT3BlbnNzbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb3BlbnNzbF9wcml2YXRlX2RlY3J5cHQoc3RyaW5nICRkYXRhLCA/c3RyaW5nICYkZGVjcnlwdGVkLCAka2V5LCBpbnQgJHBhZGRpbmcgPSBPUEVOU1NMX1BLQ1MxX1BBRERJTkcpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb3BlbnNzbF9wcml2YXRlX2RlY3J5cHQoJGRhdGEsICRkZWNyeXB0ZWQsICRrZXksICRwYWRkaW5nKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9wZW5zc2xFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIG9wZW5zc2xfcHJpdmF0ZV9lbmNyeXB0IGVuY3J5cHRzIGRhdGEKICogd2l0aCBwcml2YXRlIGtleSBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW50bwogKiBjcnlwdGVkLiBFbmNyeXB0ZWQgZGF0YSBjYW4gYmUgZGVjcnlwdGVkIHZpYQogKiBvcGVuc3NsX3B1YmxpY19kZWNyeXB0LgogKgogKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGUuZy4gdG8gc2lnbiBkYXRhIChvciBpdHMgaGFzaCkgdG8gcHJvdmUgdGhhdCBpdAogKiBpcyBub3Qgd3JpdHRlbiBieSBzb21lb25lIGVsc2UuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICogQHBhcmFtIHN0cmluZ3xudWxsICRjcnlwdGVkCiAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2V8YXJyYXkgJGtleQogKiBAcGFyYW0gaW50ICRwYWRkaW5nIHBhZGRpbmcgY2FuIGJlIG9uZSBvZgogKiBPUEVOU1NMX1BLQ1MxX1BBRERJTkcsCiAqIE9QRU5TU0xfTk9fUEFERElORy4KICogQHRocm93cyBPcGVuc3NsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvcGVuc3NsX3ByaXZhdGVfZW5jcnlwdChzdHJpbmcgJGRhdGEsID9zdHJpbmcgJiRjcnlwdGVkLCAka2V5LCBpbnQgJHBhZGRpbmcgPSBPUEVOU1NMX1BLQ1MxX1BBRERJTkcpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb3BlbnNzbF9wcml2YXRlX2VuY3J5cHQoJGRhdGEsICRjcnlwdGVkLCAka2V5LCAkcGFkZGluZyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBvcGVuc3NsX3B1YmxpY19kZWNyeXB0IGRlY3J5cHRzCiAqIGRhdGEgdGhhdCB3YXMgcHJldmlvdXMgZW5jcnlwdGVkIHZpYQogKiBvcGVuc3NsX3ByaXZhdGVfZW5jcnlwdCBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW50bwogKiBkZWNyeXB0ZWQuCiAqCiAqIFlvdSBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gZS5nLiB0byBjaGVjayBpZiB0aGUgbWVzc2FnZSB3YXMgd3JpdHRlbiBieSB0aGUKICogb3duZXIgb2YgdGhlIHByaXZhdGUga2V5LgogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhCiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkZGVjcnlwdGVkCiAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2UgJGtleSBrZXkgbXVzdCBiZSB0aGUgcHVibGljIGtleSBjb3JyZXNwb25kaW5nIHRoYXQKICogd2FzIHVzZWQgdG8gZW5jcnlwdCB0aGUgZGF0YS4KICogQHBhcmFtIGludCAkcGFkZGluZyBwYWRkaW5nIGNhbiBiZSBvbmUgb2YKICogT1BFTlNTTF9QS0NTMV9QQURESU5HLAogKiBPUEVOU1NMX05PX1BBRERJTkcuCiAqIEB0aHJvd3MgT3BlbnNzbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb3BlbnNzbF9wdWJsaWNfZGVjcnlwdChzdHJpbmcgJGRhdGEsID9zdHJpbmcgJiRkZWNyeXB0ZWQsICRrZXksIGludCAkcGFkZGluZyA9IE9QRU5TU0xfUEtDUzFfUEFERElORyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvcGVuc3NsX3B1YmxpY19kZWNyeXB0KCRkYXRhLCAkZGVjcnlwdGVkLCAka2V5LCAkcGFkZGluZyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBvcGVuc3NsX3B1YmxpY19lbmNyeXB0IGVuY3J5cHRzIGRhdGEKICogd2l0aCBwdWJsaWMga2V5IGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbnRvCiAqIGNyeXB0ZWQuIEVuY3J5cHRlZCBkYXRhIGNhbiBiZSBkZWNyeXB0ZWQgdmlhCiAqIG9wZW5zc2xfcHJpdmF0ZV9kZWNyeXB0LgogKgogKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGUuZy4gdG8gZW5jcnlwdCBtZXNzYWdlIHdoaWNoIGNhbiBiZSB0aGVuIHJlYWQKICogb25seSBieSBvd25lciBvZiB0aGUgcHJpdmF0ZSBrZXkuIEl0IGNhbiBiZSBhbHNvIHVzZWQgdG8gc3RvcmUgc2VjdXJlIGRhdGEKICogaW4gZGF0YWJhc2UuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICogQHBhcmFtIHN0cmluZ3xudWxsICRjcnlwdGVkIFRoaXMgd2lsbCBob2xkIHRoZSByZXN1bHQgb2YgdGhlIGVuY3J5cHRpb24uCiAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2UgJGtleSBUaGUgcHVibGljIGtleS4KICogQHBhcmFtIGludCAkcGFkZGluZyBwYWRkaW5nIGNhbiBiZSBvbmUgb2YKICogT1BFTlNTTF9QS0NTMV9QQURESU5HLAogKiBPUEVOU1NMX1NTTFYyM19QQURESU5HLAogKiBPUEVOU1NMX1BLQ1MxX09BRVBfUEFERElORywKICogT1BFTlNTTF9OT19QQURESU5HLgogKiBAdGhyb3dzIE9wZW5zc2xFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wZW5zc2xfcHVibGljX2VuY3J5cHQoc3RyaW5nICRkYXRhLCA/c3RyaW5nICYkY3J5cHRlZCwgJGtleSwgaW50ICRwYWRkaW5nID0gT1BFTlNTTF9QS0NTMV9QQURESU5HKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9wZW5zc2xfcHVibGljX2VuY3J5cHQoJGRhdGEsICRjcnlwdGVkLCAka2V5LCAkcGFkZGluZyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBHZW5lcmF0ZXMgYSBzdHJpbmcgb2YgcHNldWRvLXJhbmRvbSBieXRlcywgd2l0aCB0aGUgbnVtYmVyIG9mIGJ5dGVzCiAqIGRldGVybWluZWQgYnkgdGhlIGxlbmd0aCBwYXJhbWV0ZXIuCiAqCiAqIEl0IGFsc28gaW5kaWNhdGVzIGlmIGEgY3J5cHRvZ3JhcGhpY2FsbHkgc3Ryb25nIGFsZ29yaXRobSB3YXMgdXNlZCB0byBwcm9kdWNlIHRoZQogKiBwc2V1ZG8tcmFuZG9tIGJ5dGVzLCBhbmQgZG9lcyB0aGlzIHZpYSB0aGUgb3B0aW9uYWwgY3J5cHRvX3N0cm9uZwogKiBwYXJhbWV0ZXIuIEl0J3MgcmFyZSBmb3IgdGhpcyB0byBiZSBGQUxTRSwgYnV0IHNvbWUgc3lzdGVtcyBtYXkgYmUgYnJva2VuIG9yIG9sZC4KICoKICogQHBhcmFtIGludCAkbGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIGRlc2lyZWQgc3RyaW5nIG9mIGJ5dGVzLiBNdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlci4gUEhQIHdpbGwKICogdHJ5IHRvIGNhc3QgdGhpcyBwYXJhbWV0ZXIgdG8gYSBub24tbnVsbCBpbnRlZ2VyIHRvIHVzZSBpdC4KICogQHBhcmFtIGJvb2x8bnVsbCAkY3J5cHRvX3N0cm9uZyBJZiBwYXNzZWQgaW50byB0aGUgZnVuY3Rpb24sIHRoaXMgd2lsbCBob2xkIGEgYm9vbGVhbiB2YWx1ZSB0aGF0IGRldGVybWluZXMKICogaWYgdGhlIGFsZ29yaXRobSB1c2VkIHdhcyAiY3J5cHRvZ3JhcGhpY2FsbHkgc3Ryb25nIiwgZS5nLiwgc2FmZSBmb3IgdXNhZ2Ugd2l0aCBHUEcsCiAqIHBhc3N3b3JkcywgZXRjLiBUUlVFIGlmIGl0IGRpZCwgb3RoZXJ3aXNlIEZBTFNFCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIGdlbmVyYXRlZCBzdHJpbmcgb2YgYnl0ZXMgb24gc3VjY2Vzcy4KICogQHRocm93cyBPcGVuc3NsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvcGVuc3NsX3JhbmRvbV9wc2V1ZG9fYnl0ZXMoaW50ICRsZW5ndGgsID9ib29sICYkY3J5cHRvX3N0cm9uZyA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvcGVuc3NsX3JhbmRvbV9wc2V1ZG9fYnl0ZXMoJGxlbmd0aCwgJGNyeXB0b19zdHJvbmcpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3BlbnNzbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBvcGVuc3NsX3NlYWwgc2VhbHMgKGVuY3J5cHRzKQogKiBkYXRhIGJ5IHVzaW5nIHRoZSBnaXZlbiBtZXRob2Qgd2l0aCBhIHJhbmRvbWx5IGdlbmVyYXRlZAogKiBzZWNyZXQga2V5LiBUaGUga2V5IGlzIGVuY3J5cHRlZCB3aXRoIGVhY2ggb2YgdGhlIHB1YmxpYyBrZXlzCiAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgaWRlbnRpZmllcnMgaW4gcHViX2tleV9pZHMKICogYW5kIGVhY2ggZW5jcnlwdGVkIGtleSBpcyByZXR1cm5lZAogKiBpbiBlbnZfa2V5cy4gVGhpcyBtZWFucyB0aGF0IG9uZSBjYW4gc2VuZAogKiBzZWFsZWQgZGF0YSB0byBtdWx0aXBsZSByZWNpcGllbnRzIChwcm92aWRlZCBvbmUgaGFzIG9idGFpbmVkIHRoZWlyCiAqIHB1YmxpYyBrZXlzKS4gRWFjaCByZWNpcGllbnQgbXVzdCByZWNlaXZlIGJvdGggdGhlIHNlYWxlZCBkYXRhIGFuZAogKiB0aGUgZW52ZWxvcGUga2V5IHRoYXQgd2FzIGVuY3J5cHRlZCB3aXRoIHRoZSByZWNpcGllbnQncyBwdWJsaWMga2V5LgogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhIFRoZSBkYXRhIHRvIHNlYWwuCiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkc2VhbGVkX2RhdGEgVGhlIHNlYWxlZCBkYXRhLgogKiBAcGFyYW0gYXJyYXkgJGVudl9rZXlzIEFycmF5IG9mIGVuY3J5cHRlZCBrZXlzLgogKiBAcGFyYW0gYXJyYXkgJHB1Yl9rZXlfaWRzIEFycmF5IG9mIHB1YmxpYyBrZXkgcmVzb3VyY2UgaWRlbnRpZmllcnMuCiAqIEBwYXJhbSBzdHJpbmcgJG1ldGhvZCBUaGUgY2lwaGVyIG1ldGhvZC4KICogQHBhcmFtIHN0cmluZyAkaXYgVGhlIGluaXRpYWxpemF0aW9uIHZlY3Rvci4KICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBzZWFsZWQgZGF0YSBvbiBzdWNjZXNzLgogKiBJZiBzdWNjZXNzZnVsIHRoZSBzZWFsZWQgZGF0YSBpcyByZXR1cm5lZCBpbgogKiBzZWFsZWRfZGF0YSwgYW5kIHRoZSBlbnZlbG9wZSBrZXlzIGluCiAqIGVudl9rZXlzLgogKiBAdGhyb3dzIE9wZW5zc2xFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wZW5zc2xfc2VhbChzdHJpbmcgJGRhdGEsID9zdHJpbmcgJiRzZWFsZWRfZGF0YSwgYXJyYXkgJiRlbnZfa2V5cywgYXJyYXkgJHB1Yl9rZXlfaWRzLCBzdHJpbmcgJG1ldGhvZCA9ICJSQzQiLCBzdHJpbmcgJiRpdiA9IG51bGwpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvcGVuc3NsX3NlYWwoJGRhdGEsICRzZWFsZWRfZGF0YSwgJGVudl9rZXlzLCAkcHViX2tleV9pZHMsICRtZXRob2QsICRpdik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIG9wZW5zc2xfc2lnbiBjb21wdXRlcyBhIHNpZ25hdHVyZSBmb3IgdGhlCiAqIHNwZWNpZmllZCBkYXRhIGJ5IGdlbmVyYXRpbmcgYSBjcnlwdG9ncmFwaGljCiAqIGRpZ2l0YWwgc2lnbmF0dXJlIHVzaW5nIHRoZSBwcml2YXRlIGtleSBhc3NvY2lhdGVkIHdpdGgKICogcHJpdl9rZXlfaWQuIE5vdGUgdGhhdCB0aGUgZGF0YSBpdHNlbGYgaXMKICogbm90IGVuY3J5cHRlZC4KICoKICogQHBhcmFtIHN0cmluZyAkZGF0YSBUaGUgc3RyaW5nIG9mIGRhdGEgeW91IHdpc2ggdG8gc2lnbgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJHNpZ25hdHVyZSBJZiB0aGUgY2FsbCB3YXMgc3VjY2Vzc2Z1bCB0aGUgc2lnbmF0dXJlIGlzIHJldHVybmVkIGluCiAqIHNpZ25hdHVyZS4KICogQHBhcmFtIHJlc291cmNlfHN0cmluZyAkcHJpdl9rZXlfaWQgcmVzb3VyY2UgLSBhIGtleSwgcmV0dXJuZWQgYnkgb3BlbnNzbF9nZXRfcHJpdmF0ZWtleQogKgogKiBzdHJpbmcgLSBhIFBFTSBmb3JtYXR0ZWQga2V5CiAqIEBwYXJhbSBpbnR8c3RyaW5nICRzaWduYXR1cmVfYWxnIGludCAtIG9uZSBvZiB0aGVzZSBTaWduYXR1cmUgQWxnb3JpdGhtcy4KICoKICogc3RyaW5nIC0gYSB2YWxpZCBzdHJpbmcgcmV0dXJuZWQgYnkgb3BlbnNzbF9nZXRfbWRfbWV0aG9kcyBleGFtcGxlLCAic2hhMjU2V2l0aFJTQUVuY3J5cHRpb24iIG9yICJzaGEzODQiLgogKiBAdGhyb3dzIE9wZW5zc2xFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wZW5zc2xfc2lnbihzdHJpbmcgJGRhdGEsID9zdHJpbmcgJiRzaWduYXR1cmUsICRwcml2X2tleV9pZCwgJHNpZ25hdHVyZV9hbGcgPSBPUEVOU1NMX0FMR09fU0hBMSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvcGVuc3NsX3NpZ24oJGRhdGEsICRzaWduYXR1cmUsICRwcml2X2tleV9pZCwgJHNpZ25hdHVyZV9hbGcpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3BlbnNzbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogb3BlbnNzbF94NTA5X2V4cG9ydF90b19maWxlIHN0b3JlcwogKiB4NTA5IGludG8gYSBmaWxlIG5hbWVkIGJ5CiAqIG91dGZpbGVuYW1lIGluIGEgUEVNIGVuY29kZWQgZm9ybWF0LgogKgogKiBAcGFyYW0gc3RyaW5nfHJlc291cmNlICR4NTA5IFNlZSBLZXkvQ2VydGlmaWNhdGUgcGFyYW1ldGVycyBmb3IgYSBsaXN0IG9mIHZhbGlkIHZhbHVlcy4KICogQHBhcmFtIHN0cmluZyAkb3V0ZmlsZW5hbWUgUGF0aCB0byB0aGUgb3V0cHV0IGZpbGUuCiAqIEBwYXJhbSBib29sICRub3RleHQKICogVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBub3RleHQgYWZmZWN0cwogKiB0aGUgdmVyYm9zaXR5IG9mIHRoZSBvdXRwdXQ7IGlmIGl0IGlzIEZBTFNFLCB0aGVuIGFkZGl0aW9uYWwgaHVtYW4tcmVhZGFibGUKICogaW5mb3JtYXRpb24gaXMgaW5jbHVkZWQgaW4gdGhlIG91dHB1dC4gVGhlIGRlZmF1bHQgdmFsdWUgb2YKICogbm90ZXh0IGlzIFRSVUUuCiAqIEB0aHJvd3MgT3BlbnNzbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb3BlbnNzbF94NTA5X2V4cG9ydF90b19maWxlKCR4NTA5LCBzdHJpbmcgJG91dGZpbGVuYW1lLCBib29sICRub3RleHQgPSB0cnVlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9wZW5zc2xfeDUwOV9leHBvcnRfdG9fZmlsZSgkeDUwOSwgJG91dGZpbGVuYW1lLCAkbm90ZXh0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9wZW5zc2xFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIG9wZW5zc2xfeDUwOV9leHBvcnQgc3RvcmVzCiAqIHg1MDkgaW50byBhIHN0cmluZyBuYW1lZCBieQogKiBvdXRwdXQgaW4gYSBQRU0gZW5jb2RlZCBmb3JtYXQuCiAqCiAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2UgJHg1MDkgU2VlIEtleS9DZXJ0aWZpY2F0ZSBwYXJhbWV0ZXJzIGZvciBhIGxpc3Qgb2YgdmFsaWQgdmFsdWVzLgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJG91dHB1dCBPbiBzdWNjZXNzLCB0aGlzIHdpbGwgaG9sZCB0aGUgUEVNLgogKiBAcGFyYW0gYm9vbCAkbm90ZXh0CiAqIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgbm90ZXh0IGFmZmVjdHMKICogdGhlIHZlcmJvc2l0eSBvZiB0aGUgb3V0cHV0OyBpZiBpdCBpcyBGQUxTRSwgdGhlbiBhZGRpdGlvbmFsIGh1bWFuLXJlYWRhYmxlCiAqIGluZm9ybWF0aW9uIGlzIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQuIFRoZSBkZWZhdWx0IHZhbHVlIG9mCiAqIG5vdGV4dCBpcyBUUlVFLgogKiBAdGhyb3dzIE9wZW5zc2xFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wZW5zc2xfeDUwOV9leHBvcnQoJHg1MDksID9zdHJpbmcgJiRvdXRwdXQsIGJvb2wgJG5vdGV4dCA9IHRydWUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb3BlbnNzbF94NTA5X2V4cG9ydCgkeDUwOSwgJG91dHB1dCwgJG5vdGV4dCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBvcGVuc3NsX3g1MDlfZmluZ2VycHJpbnQgcmV0dXJucyB0aGUgZGlnZXN0IG9mCiAqIHg1MDkgYXMgYSBzdHJpbmcuCiAqCiAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2UgJHg1MDkgU2VlIEtleS9DZXJ0aWZpY2F0ZSBwYXJhbWV0ZXJzIGZvciBhIGxpc3Qgb2YgdmFsaWQgdmFsdWVzLgogKiBAcGFyYW0gc3RyaW5nICRoYXNoX2FsZ29yaXRobSBUaGUgZGlnZXN0IG1ldGhvZCBvciBoYXNoIGFsZ29yaXRobSB0byB1c2UsIGUuZy4gInNoYTI1NiIsIG9uZSBvZiBvcGVuc3NsX2dldF9tZF9tZXRob2RzLgogKiBAcGFyYW0gYm9vbCAkcmF3X291dHB1dCBXaGVuIHNldCB0byBUUlVFLCBvdXRwdXRzIHJhdyBiaW5hcnkgZGF0YS4gRkFMU0Ugb3V0cHV0cyBsb3dlcmNhc2UgaGV4aXRzLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNhbGN1bGF0ZWQgY2VydGlmaWNhdGUgZmluZ2VycHJpbnQgYXMgbG93ZXJjYXNlIGhleGl0cyB1bmxlc3MgcmF3X291dHB1dCBpcyBzZXQgdG8gVFJVRSBpbiB3aGljaCBjYXNlIHRoZSByYXcgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtZXNzYWdlIGRpZ2VzdCBpcyByZXR1cm5lZC4KICoKICogUmV0dXJucyBGQUxTRSBvbiBmYWlsdXJlLgogKiBAdGhyb3dzIE9wZW5zc2xFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wZW5zc2xfeDUwOV9maW5nZXJwcmludCgkeDUwOSwgc3RyaW5nICRoYXNoX2FsZ29yaXRobSA9ICJzaGExIiwgYm9vbCAkcmF3X291dHB1dCA9IGZhbHNlKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb3BlbnNzbF94NTA5X2ZpbmdlcnByaW50KCR4NTA5LCAkaGFzaF9hbGdvcml0aG0sICRyYXdfb3V0cHV0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9wZW5zc2xFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogb3BlbnNzbF94NTA5X3JlYWQgcGFyc2VzIHRoZSBjZXJ0aWZpY2F0ZSBzdXBwbGllZCBieQogKiB4NTA5Y2VydGRhdGEgYW5kIHJldHVybnMgYSByZXNvdXJjZSBpZGVudGlmaWVyIGZvcgogKiBpdC4KICoKICogQHBhcmFtIHN0cmluZ3xyZXNvdXJjZSAkeDUwOWNlcnRkYXRhIFg1MDkgY2VydGlmaWNhdGUuIFNlZSBLZXkvQ2VydGlmaWNhdGUgcGFyYW1ldGVycyBmb3IgYSBsaXN0IG9mIHZhbGlkIHZhbHVlcy4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgcmVzb3VyY2UgaWRlbnRpZmllciBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIE9wZW5zc2xFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wZW5zc2xfeDUwOV9yZWFkKCR4NTA5Y2VydGRhdGEpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb3BlbnNzbF94NTA5X3JlYWQoJHg1MDljZXJ0ZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/outcontrol.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xPdXRjb250cm9sRXhjZXB0aW9uOwoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gZGlzY2FyZHMgdGhlIGNvbnRlbnRzIG9mIHRoZSB0b3Btb3N0IG91dHB1dCBidWZmZXIgYW5kIHR1cm5zCiAqIG9mZiB0aGlzIG91dHB1dCBidWZmZXJpbmcuIElmIHlvdSB3YW50IHRvIGZ1cnRoZXIgcHJvY2VzcyB0aGUgYnVmZmVyJ3MKICogY29udGVudHMgeW91IGhhdmUgdG8gY2FsbCBvYl9nZXRfY29udGVudHMgYmVmb3JlCiAqIG9iX2VuZF9jbGVhbiBhcyB0aGUgYnVmZmVyIGNvbnRlbnRzIGFyZSBkaXNjYXJkZWQKICogd2hlbiBvYl9lbmRfY2xlYW4gaXMgY2FsbGVkLgogKgogKiBUaGUgb3V0cHV0IGJ1ZmZlciBtdXN0IGJlIHN0YXJ0ZWQgYnkKICogb2Jfc3RhcnQgd2l0aCBQSFBfT1VUUFVUX0hBTkRMRVJfQ0xFQU5BQkxFCiAqIGFuZCBQSFBfT1VUUFVUX0hBTkRMRVJfUkVNT1ZBQkxFCiAqIGZsYWdzLiBPdGhlcndpc2Ugb2JfZW5kX2NsZWFuIHdpbGwgbm90IHdvcmsuCiAqCiAqIEB0aHJvd3MgT3V0Y29udHJvbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2JfZW5kX2NsZWFuKCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvYl9lbmRfY2xlYW4oKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE91dGNvbnRyb2xFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzZW5kIHRoZSBjb250ZW50cyBvZiB0aGUgdG9wbW9zdCBvdXRwdXQgYnVmZmVyIChpZgogKiBhbnkpIGFuZCB0dXJuIHRoaXMgb3V0cHV0IGJ1ZmZlciBvZmYuICBJZiB5b3Ugd2FudCB0byBmdXJ0aGVyCiAqIHByb2Nlc3MgdGhlIGJ1ZmZlcidzIGNvbnRlbnRzIHlvdSBoYXZlIHRvIGNhbGwKICogb2JfZ2V0X2NvbnRlbnRzIGJlZm9yZQogKiBvYl9lbmRfZmx1c2ggYXMgdGhlIGJ1ZmZlciBjb250ZW50cyBhcmUKICogZGlzY2FyZGVkIGFmdGVyIG9iX2VuZF9mbHVzaCBpcyBjYWxsZWQuCiAqCiAqIFRoZSBvdXRwdXQgYnVmZmVyIG11c3QgYmUgc3RhcnRlZCBieQogKiBvYl9zdGFydCB3aXRoIFBIUF9PVVRQVVRfSEFORExFUl9GTFVTSEFCTEUKICogYW5kIFBIUF9PVVRQVVRfSEFORExFUl9SRU1PVkFCTEUKICogZmxhZ3MuIE90aGVyd2lzZSBvYl9lbmRfZmx1c2ggd2lsbCBub3Qgd29yay4KICoKICogQHRocm93cyBPdXRjb250cm9sRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvYl9lbmRfZmx1c2goKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9iX2VuZF9mbHVzaCgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3V0Y29udHJvbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBhZGRzIGFub3RoZXIgbmFtZS92YWx1ZSBwYWlyIHRvIHRoZSBVUkwgcmV3cml0ZSBtZWNoYW5pc20uCiAqIFRoZSBuYW1lIGFuZCB2YWx1ZSB3aWxsIGJlIGFkZGVkIHRvIFVSTHMgKGFzIEdFVCBwYXJhbWV0ZXIpIGFuZCBmb3JtcwogKiAoYXMgaGlkZGVuIGlucHV0IGZpZWxkcykgdGhlIHNhbWUgd2F5IGFzIHRoZSBzZXNzaW9uIElEIHdoZW4gdHJhbnNwYXJlbnQKICogVVJMIHJld3JpdGluZyBpcyBlbmFibGVkIHdpdGggc2Vzc2lvbi51c2VfdHJhbnNfc2lkLgogKgogKiBUaGlzIGZ1bmN0aW9uJ3MgYmVoYXZpb3VyIGlzIGNvbnRyb2xsZWQgYnkgdGhlIHVybF9yZXdyaXRlci50YWdzIGFuZAogKiB1cmxfcmV3cml0ZXIuaG9zdHMgcGhwLmluaQogKiBwYXJhbWV0ZXJzLgogKgogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gYmUgc3VjY2Vzc2Z1bGx5IGNhbGxlZCBhdCBtb3N0IG9uY2UgcGVyIHJlcXVlc3QuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIHZhcmlhYmxlIG5hbWUuCiAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIFRoZSB2YXJpYWJsZSB2YWx1ZS4KICogQHRocm93cyBPdXRjb250cm9sRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvdXRwdXRfYWRkX3Jld3JpdGVfdmFyKHN0cmluZyAkbmFtZSwgc3RyaW5nICR2YWx1ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvdXRwdXRfYWRkX3Jld3JpdGVfdmFyKCRuYW1lLCAkdmFsdWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3V0Y29udHJvbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiByZXNldHMgdGhlIFVSTCByZXdyaXRlciBhbmQgcmVtb3ZlcyBhbGwgcmV3cml0ZQogKiB2YXJpYWJsZXMgcHJldmlvdXNseSBzZXQgYnkgdGhlIG91dHB1dF9hZGRfcmV3cml0ZV92YXIKICogZnVuY3Rpb24uCiAqCiAqIEB0aHJvd3MgT3V0Y29udHJvbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb3V0cHV0X3Jlc2V0X3Jld3JpdGVfdmFycygpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb3V0cHV0X3Jlc2V0X3Jld3JpdGVfdmFycygpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3V0Y29udHJvbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/password.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xQYXNzd29yZEV4Y2VwdGlvbjsKCi8qKgogKiBwYXNzd29yZF9oYXNoIGNyZWF0ZXMgYSBuZXcgcGFzc3dvcmQgaGFzaCB1c2luZyBhIHN0cm9uZyBvbmUtd2F5IGhhc2hpbmcKICogYWxnb3JpdGhtLiBwYXNzd29yZF9oYXNoIGlzIGNvbXBhdGlibGUgd2l0aCBjcnlwdC4KICogVGhlcmVmb3JlLCBwYXNzd29yZCBoYXNoZXMgY3JlYXRlZCBieSBjcnlwdCBjYW4gYmUgdXNlZCB3aXRoCiAqIHBhc3N3b3JkX2hhc2guCiAqCiAqCiAqCiAqCiAqIFBBU1NXT1JEX0RFRkFVTFQgLSBVc2UgdGhlIGJjcnlwdCBhbGdvcml0aG0gKGRlZmF1bHQgYXMgb2YgUEhQIDUuNS4wKS4KICogTm90ZSB0aGF0IHRoaXMgY29uc3RhbnQgaXMgZGVzaWduZWQgdG8gY2hhbmdlIG92ZXIgdGltZSBhcyBuZXcgYW5kIHN0cm9uZ2VyIGFsZ29yaXRobXMgYXJlIGFkZGVkCiAqIHRvIFBIUC4gRm9yIHRoYXQgcmVhc29uLCB0aGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQgZnJvbSB1c2luZyB0aGlzIGlkZW50aWZpZXIgY2FuIGNoYW5nZSBvdmVyCiAqIHRpbWUuIFRoZXJlZm9yZSwgaXQgaXMgcmVjb21tZW5kZWQgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbiBhIGRhdGFiYXNlIGNvbHVtbiB0aGF0IGNhbiBleHBhbmQKICogYmV5b25kIDYwIGNoYXJhY3RlcnMgKDI1NSBjaGFyYWN0ZXJzIHdvdWxkIGJlIGEgZ29vZCBjaG9pY2UpLgogKgogKgogKgogKgogKiBQQVNTV09SRF9CQ1JZUFQgLSBVc2UgdGhlIENSWVBUX0JMT1dGSVNIIGFsZ29yaXRobSB0bwogKiBjcmVhdGUgdGhlIGhhc2guIFRoaXMgd2lsbCBwcm9kdWNlIGEgc3RhbmRhcmQgY3J5cHQgY29tcGF0aWJsZSBoYXNoIHVzaW5nCiAqIHRoZSAiJDJ5JCIgaWRlbnRpZmllci4gVGhlIHJlc3VsdCB3aWxsIGFsd2F5cyBiZSBhIDYwIGNoYXJhY3RlciBzdHJpbmcuCiAqCiAqCiAqCiAqCiAqIFBBU1NXT1JEX0FSR09OMkkgLSBVc2UgdGhlIEFyZ29uMmkgaGFzaGluZyBhbGdvcml0aG0gdG8gY3JlYXRlIHRoZSBoYXNoLgogKiBUaGlzIGFsZ29yaXRobSBpcyBvbmx5IGF2YWlsYWJsZSBpZiBQSFAgaGFzIGJlZW4gY29tcGlsZWQgd2l0aCBBcmdvbjIgc3VwcG9ydC4KICoKICoKICoKICoKICogUEFTU1dPUkRfQVJHT04ySUQgLSBVc2UgdGhlIEFyZ29uMmlkIGhhc2hpbmcgYWxnb3JpdGhtIHRvIGNyZWF0ZSB0aGUgaGFzaC4KICogVGhpcyBhbGdvcml0aG0gaXMgb25seSBhdmFpbGFibGUgaWYgUEhQIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggQXJnb24yIHN1cHBvcnQuCiAqCiAqCiAqCiAqCiAqCiAqCiAqCiAqIHNhbHQgKHN0cmluZykgLSB0byBtYW51YWxseSBwcm92aWRlIGEgc2FsdCB0byB1c2Ugd2hlbiBoYXNoaW5nIHRoZSBwYXNzd29yZC4KICogTm90ZSB0aGF0IHRoaXMgd2lsbCBvdmVycmlkZSBhbmQgcHJldmVudCBhIHNhbHQgZnJvbSBiZWluZyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC4KICoKICoKICogSWYgb21pdHRlZCwgYSByYW5kb20gc2FsdCB3aWxsIGJlIGdlbmVyYXRlZCBieSBwYXNzd29yZF9oYXNoIGZvcgogKiBlYWNoIHBhc3N3b3JkIGhhc2hlZC4gVGhpcyBpcyB0aGUgaW50ZW5kZWQgbW9kZSBvZiBvcGVyYXRpb24uCiAqCiAqCiAqCiAqIFRoZSBzYWx0IG9wdGlvbiBoYXMgYmVlbiBkZXByZWNhdGVkIGFzIG9mIFBIUCA3LjAuMC4gSXQgaXMgbm93CiAqIHByZWZlcnJlZCB0byBzaW1wbHkgdXNlIHRoZSBzYWx0IHRoYXQgaXMgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQuCiAqCiAqCiAqCiAqCiAqCiAqIGNvc3QgKGludGVnZXIpIC0gd2hpY2ggZGVub3RlcyB0aGUgYWxnb3JpdGhtaWMgY29zdCB0aGF0IHNob3VsZCBiZSB1c2VkLgogKiBFeGFtcGxlcyBvZiB0aGVzZSB2YWx1ZXMgY2FuIGJlIGZvdW5kIG9uIHRoZSBjcnlwdCBwYWdlLgogKgogKgogKiBJZiBvbWl0dGVkLCBhIGRlZmF1bHQgdmFsdWUgb2YgMTAgd2lsbCBiZSB1c2VkLiBUaGlzIGlzIGEgZ29vZAogKiBiYXNlbGluZSBjb3N0LCBidXQgeW91IG1heSB3YW50IHRvIGNvbnNpZGVyIGluY3JlYXNpbmcgaXQgZGVwZW5kaW5nIG9uIHlvdXIgaGFyZHdhcmUuCiAqCiAqCiAqCiAqCiAqCiAqCiAqCiAqIG1lbW9yeV9jb3N0IChpbnRlZ2VyKSAtIE1heGltdW0gbWVtb3J5IChpbiBraWJpYnl0ZXMpIHRoYXQgbWF5CiAqIGJlIHVzZWQgdG8gY29tcHV0ZSB0aGUgQXJnb24yIGhhc2guIERlZmF1bHRzIHRvIFBBU1NXT1JEX0FSR09OMl9ERUZBVUxUX01FTU9SWV9DT1NULgogKgogKgogKgogKgogKiB0aW1lX2Nvc3QgKGludGVnZXIpIC0gTWF4aW11bSBhbW91bnQgb2YgdGltZSBpdCBtYXkKICogdGFrZSB0byBjb21wdXRlIHRoZSBBcmdvbjIgaGFzaC4gRGVmYXVsdHMgdG8gUEFTU1dPUkRfQVJHT04yX0RFRkFVTFRfVElNRV9DT1NULgogKgogKgogKgogKgogKiB0aHJlYWRzIChpbnRlZ2VyKSAtIE51bWJlciBvZiB0aHJlYWRzIHRvIHVzZSBmb3IgY29tcHV0aW5nCiAqIHRoZSBBcmdvbjIgaGFzaC4gRGVmYXVsdHMgdG8gUEFTU1dPUkRfQVJHT04yX0RFRkFVTFRfVEhSRUFEUy4KICoKICoKICoKICoKICogQHBhcmFtIHN0cmluZyAkcGFzc3dvcmQgVGhlIHVzZXIncyBwYXNzd29yZC4KICoKICogVXNpbmcgdGhlIFBBU1NXT1JEX0JDUllQVCBhcyB0aGUKICogYWxnb3JpdGhtLCB3aWxsIHJlc3VsdAogKiBpbiB0aGUgcGFzc3dvcmQgcGFyYW1ldGVyIGJlaW5nIHRydW5jYXRlZCB0byBhCiAqIG1heGltdW0gbGVuZ3RoIG9mIDcyIGNoYXJhY3RlcnMuCiAqIEBwYXJhbSBpbnR8c3RyaW5nfG51bGwgJGFsZ28gQSBwYXNzd29yZCBhbGdvcml0aG0gY29uc3RhbnQgZGVub3RpbmcgdGhlIGFsZ29yaXRobSB0byB1c2Ugd2hlbiBoYXNoaW5nIHRoZSBwYXNzd29yZC4KICogQHBhcmFtIGFycmF5ICRvcHRpb25zIEFuIGFzc29jaWF0aXZlIGFycmF5IGNvbnRhaW5pbmcgb3B0aW9ucy4gU2VlIHRoZSBwYXNzd29yZCBhbGdvcml0aG0gY29uc3RhbnRzIGZvciBkb2N1bWVudGF0aW9uIG9uIHRoZSBzdXBwb3J0ZWQgb3B0aW9ucyBmb3IgZWFjaCBhbGdvcml0aG0uCiAqCiAqIElmIG9taXR0ZWQsIGEgcmFuZG9tIHNhbHQgd2lsbCBiZSBjcmVhdGVkIGFuZCB0aGUgZGVmYXVsdCBjb3N0IHdpbGwgYmUKICogdXNlZC4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgaGFzaGVkIHBhc3N3b3JkLgogKgogKiBUaGUgdXNlZCBhbGdvcml0aG0sIGNvc3QgYW5kIHNhbHQgYXJlIHJldHVybmVkIGFzIHBhcnQgb2YgdGhlIGhhc2guIFRoZXJlZm9yZSwKICogYWxsIGluZm9ybWF0aW9uIHRoYXQncyBuZWVkZWQgdG8gdmVyaWZ5IHRoZSBoYXNoIGlzIGluY2x1ZGVkIGluIGl0LiBUaGlzIGFsbG93cwogKiB0aGUgcGFzc3dvcmRfdmVyaWZ5IGZ1bmN0aW9uIHRvIHZlcmlmeSB0aGUgaGFzaCB3aXRob3V0CiAqIG5lZWRpbmcgc2VwYXJhdGUgc3RvcmFnZSBmb3IgdGhlIHNhbHQgb3IgYWxnb3JpdGhtIGluZm9ybWF0aW9uLgogKiBAdGhyb3dzIFBhc3N3b3JkRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwYXNzd29yZF9oYXNoKHN0cmluZyAkcGFzc3dvcmQsICRhbGdvLCBhcnJheSAkb3B0aW9ucyA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRvcHRpb25zICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwYXNzd29yZF9oYXNoKCRwYXNzd29yZCwgJGFsZ28sICRvcHRpb25zKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxwYXNzd29yZF9oYXNoKCRwYXNzd29yZCwgJGFsZ28pOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGFzc3dvcmRFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/pcntl.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xQY250bEV4Y2VwdGlvbjsKCi8qKgogKiBFeGVjdXRlcyB0aGUgcHJvZ3JhbSB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGggcGF0aCBtdXN0IGJlIHRoZSBwYXRoIHRvIGEgYmluYXJ5IGV4ZWN1dGFibGUgb3IgYQogKiBzY3JpcHQgd2l0aCBhIHZhbGlkIHBhdGggcG9pbnRpbmcgdG8gYW4gZXhlY3V0YWJsZSBpbiB0aGUgc2hlYmFuZyAoCiAqICMhL3Vzci9sb2NhbC9iaW4vcGVybCBmb3IgZXhhbXBsZSkgYXMgdGhlIGZpcnN0IGxpbmUuICBTZWUgeW91ciBzeXN0ZW0ncwogKiBtYW4gZXhlY3ZlKDIpIHBhZ2UgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCiAqIEBwYXJhbSBhcnJheSAkYXJncyBhcmdzIGlzIGFuIGFycmF5IG9mIGFyZ3VtZW50IHN0cmluZ3MgcGFzc2VkIHRvIHRoZQogKiBwcm9ncmFtLgogKiBAcGFyYW0gYXJyYXkgJGVudnMgZW52cyBpcyBhbiBhcnJheSBvZiBzdHJpbmdzIHdoaWNoIGFyZSBwYXNzZWQgYXMKICogZW52aXJvbm1lbnQgdG8gdGhlIHByb2dyYW0uICBUaGUgYXJyYXkgaXMgaW4gdGhlIGZvcm1hdCBvZiBuYW1lID0mZ3Q7IHZhbHVlLAogKiB0aGUga2V5IGJlaW5nIHRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudGFsIHZhcmlhYmxlIGFuZCB0aGUgdmFsdWUgYmVpbmcKICogdGhlIHZhbHVlIG9mIHRoYXQgdmFyaWFibGUuCiAqIEB0aHJvd3MgUGNudGxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBjbnRsX2V4ZWMoc3RyaW5nICRwYXRoLCBhcnJheSAkYXJncyA9IG51bGwsIGFycmF5ICRlbnZzID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRlbnZzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwY250bF9leGVjKCRwYXRoLCAkYXJncywgJGVudnMpOwogICAgfSBlbHNlaWYgKCRhcmdzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwY250bF9leGVjKCRwYXRoLCAkYXJncyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBccGNudGxfZXhlYygkcGF0aCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQY250bEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogcGNudGxfZ2V0cHJpb3JpdHkgZ2V0cyB0aGUgcHJpb3JpdHkgb2YKICogcGlkLiBCZWNhdXNlIHByaW9yaXR5IGxldmVscyBjYW4gZGlmZmVyIGJldHdlZW4KICogc3lzdGVtIHR5cGVzIGFuZCBrZXJuZWwgdmVyc2lvbnMsIHBsZWFzZSBzZWUgeW91ciBzeXN0ZW0ncyBnZXRwcmlvcml0eSgyKQogKiBtYW4gcGFnZSBmb3Igc3BlY2lmaWMgZGV0YWlscy4KICoKICogQHBhcmFtIGludCAkcGlkIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBwaWQgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcyBpcyB1c2VkLgogKiBAcGFyYW0gaW50ICRwcm9jZXNzX2lkZW50aWZpZXIgT25lIG9mIFBSSU9fUEdSUCwgUFJJT19VU0VSCiAqIG9yIFBSSU9fUFJPQ0VTUy4KICogQHJldHVybiBpbnQgcGNudGxfZ2V0cHJpb3JpdHkgcmV0dXJucyB0aGUgcHJpb3JpdHkgb2YgdGhlIHByb2Nlc3MuICBBIGxvd2VyIG51bWVyaWNhbCB2YWx1ZSBjYXVzZXMgbW9yZSBmYXZvcmFibGUKICogc2NoZWR1bGluZy4KICogQHRocm93cyBQY250bEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGNudGxfZ2V0cHJpb3JpdHkoaW50ICRwaWQgPSBudWxsLCBpbnQgJHByb2Nlc3NfaWRlbnRpZmllciA9IFBSSU9fUFJPQ0VTUyk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHByb2Nlc3NfaWRlbnRpZmllciAhPT0gUFJJT19QUk9DRVNTKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwY250bF9nZXRwcmlvcml0eSgkcGlkLCAkcHJvY2Vzc19pZGVudGlmaWVyKTsKICAgIH0gZWxzZWlmICgkcGlkICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwY250bF9nZXRwcmlvcml0eSgkcGlkKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxwY250bF9nZXRwcmlvcml0eSgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGNudGxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogcGNudGxfc2V0cHJpb3JpdHkgc2V0cyB0aGUgcHJpb3JpdHkgb2YKICogcGlkLgogKgogKiBAcGFyYW0gaW50ICRwcmlvcml0eSBwcmlvcml0eSBpcyBnZW5lcmFsbHkgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UKICogLTIwIHRvIDIwLiBUaGUgZGVmYXVsdCBwcmlvcml0eQogKiBpcyAwIHdoaWxlIGEgbG93ZXIgbnVtZXJpY2FsIHZhbHVlIGNhdXNlcyBtb3JlCiAqIGZhdm9yYWJsZSBzY2hlZHVsaW5nLiAgQmVjYXVzZSBwcmlvcml0eSBsZXZlbHMgY2FuIGRpZmZlciBiZXR3ZWVuCiAqIHN5c3RlbSB0eXBlcyBhbmQga2VybmVsIHZlcnNpb25zLCBwbGVhc2Ugc2VlIHlvdXIgc3lzdGVtJ3Mgc2V0cHJpb3JpdHkoMikKICogbWFuIHBhZ2UgZm9yIHNwZWNpZmljIGRldGFpbHMuCiAqIEBwYXJhbSBpbnQgJHBpZCBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgcGlkIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MgaXMgdXNlZC4KICogQHBhcmFtIGludCAkcHJvY2Vzc19pZGVudGlmaWVyIE9uZSBvZiBQUklPX1BHUlAsIFBSSU9fVVNFUgogKiBvciBQUklPX1BST0NFU1MuCiAqIEB0aHJvd3MgUGNudGxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBjbnRsX3NldHByaW9yaXR5KGludCAkcHJpb3JpdHksIGludCAkcGlkID0gbnVsbCwgaW50ICRwcm9jZXNzX2lkZW50aWZpZXIgPSBQUklPX1BST0NFU1MpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkcHJvY2Vzc19pZGVudGlmaWVyICE9PSBQUklPX1BST0NFU1MpIHsKICAgICAgICAkcmVzdWx0ID0gXHBjbnRsX3NldHByaW9yaXR5KCRwcmlvcml0eSwgJHBpZCwgJHByb2Nlc3NfaWRlbnRpZmllcik7CiAgICB9IGVsc2VpZiAoJHBpZCAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGNudGxfc2V0cHJpb3JpdHkoJHByaW9yaXR5LCAkcGlkKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxwY250bF9zZXRwcmlvcml0eSgkcHJpb3JpdHkpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGNudGxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoZSBwY250bF9zaWduYWxfZGlzcGF0Y2ggZnVuY3Rpb24gY2FsbHMgdGhlIHNpZ25hbAogKiBoYW5kbGVycyBpbnN0YWxsZWQgYnkgcGNudGxfc2lnbmFsIGZvciBlYWNoIHBlbmRpbmcKICogc2lnbmFsLgogKgogKiBAdGhyb3dzIFBjbnRsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwY250bF9zaWduYWxfZGlzcGF0Y2goKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBjbnRsX3NpZ25hbF9kaXNwYXRjaCgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGNudGxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoZSBwY250bF9zaWdwcm9jbWFzayBmdW5jdGlvbiBhZGRzLCByZW1vdmVzIG9yIHNldHMgYmxvY2tlZAogKiBzaWduYWxzLCBkZXBlbmRpbmcgb24gdGhlIGhvdyBwYXJhbWV0ZXIuCiAqCiAqIEBwYXJhbSBpbnQgJGhvdyBTZXRzIHRoZSBiZWhhdmlvciBvZiBwY250bF9zaWdwcm9jbWFzay4gUG9zc2libGUKICogdmFsdWVzOgogKgogKiBTSUdfQkxPQ0s6IEFkZCB0aGUgc2lnbmFscyB0byB0aGUKICogY3VycmVudGx5IGJsb2NrZWQgc2lnbmFscy4KICogU0lHX1VOQkxPQ0s6IFJlbW92ZSB0aGUgc2lnbmFscyBmcm9tIHRoZQogKiBjdXJyZW50bHkgYmxvY2tlZCBzaWduYWxzLgogKiBTSUdfU0VUTUFTSzogUmVwbGFjZSB0aGUgY3VycmVudGx5CiAqIGJsb2NrZWQgc2lnbmFscyBieSB0aGUgZ2l2ZW4gbGlzdCBvZiBzaWduYWxzLgogKgogKiBAcGFyYW0gYXJyYXkgJHNldCBMaXN0IG9mIHNpZ25hbHMuCiAqIEBwYXJhbSBhcnJheXxudWxsICRvbGRzZXQgVGhlIG9sZHNldCBwYXJhbWV0ZXIgaXMgc2V0IHRvIGFuIGFycmF5CiAqIGNvbnRhaW5pbmcgdGhlIGxpc3Qgb2YgdGhlIHByZXZpb3VzbHkgYmxvY2tlZCBzaWduYWxzLgogKiBAdGhyb3dzIFBjbnRsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwY250bF9zaWdwcm9jbWFzayhpbnQgJGhvdywgYXJyYXkgJHNldCwgP2FycmF5ICYkb2xkc2V0ID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwY250bF9zaWdwcm9jbWFzaygkaG93LCAkc2V0LCAkb2xkc2V0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBjbnRsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKgogKgogKiBAcGFyYW0gaW50ICRlcnJubwogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGVycm9yIGRlc2NyaXB0aW9uIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgUGNudGxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBjbnRsX3N0cmVycm9yKGludCAkZXJybm8pOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwY250bF9zdHJlcnJvcigkZXJybm8pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGNudGxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/pcre.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xQY3JlRXhjZXB0aW9uOwoKLyoqCiAqIFNlYXJjaGVzIHN1YmplY3QgZm9yIGFsbCBtYXRjaGVzIHRvIHRoZSByZWd1bGFyCiAqIGV4cHJlc3Npb24gZ2l2ZW4gaW4gcGF0dGVybiBhbmQgcHV0cyB0aGVtIGluCiAqIG1hdGNoZXMgaW4gdGhlIG9yZGVyIHNwZWNpZmllZCBieQogKiBmbGFncy4KICoKICogQWZ0ZXIgdGhlIGZpcnN0IG1hdGNoIGlzIGZvdW5kLCB0aGUgc3Vic2VxdWVudCBzZWFyY2hlcyAgYXJlIGNvbnRpbnVlZAogKiBvbiBmcm9tIGVuZCBvZiB0aGUgbGFzdCBtYXRjaC4KICoKICogQHBhcmFtIHN0cmluZyAkcGF0dGVybiBUaGUgcGF0dGVybiB0byBzZWFyY2ggZm9yLCBhcyBhIHN0cmluZy4KICogQHBhcmFtIHN0cmluZyAkc3ViamVjdCBUaGUgaW5wdXQgc3RyaW5nLgogKiBAcGFyYW0gYXJyYXkgJG1hdGNoZXMgQXJyYXkgb2YgYWxsIG1hdGNoZXMgaW4gbXVsdGktZGltZW5zaW9uYWwgYXJyYXkgb3JkZXJlZCBhY2NvcmRpbmcgdG8KICogZmxhZ3MuCiAqIEBwYXJhbSBpbnQgJGZsYWdzIENhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgZmxhZ3MgKG5vdGUgdGhhdCBpdCBkb2Vzbid0IG1ha2UKICogc2Vuc2UgdG8gdXNlIFBSRUdfUEFUVEVSTl9PUkRFUiB0b2dldGhlciB3aXRoCiAqIFBSRUdfU0VUX09SREVSKToKICoKICoKICogUFJFR19QQVRURVJOX09SREVSCiAqCiAqCiAqIE9yZGVycyByZXN1bHRzIHNvIHRoYXQgJG1hdGNoZXNbMF0gaXMgYW4gYXJyYXkgb2YgZnVsbAogKiBwYXR0ZXJuIG1hdGNoZXMsICRtYXRjaGVzWzFdIGlzIGFuIGFycmF5IG9mIHN0cmluZ3MgbWF0Y2hlZCBieQogKiB0aGUgZmlyc3QgcGFyZW50aGVzaXplZCBzdWJwYXR0ZXJuLCBhbmQgc28gb24uCiAqCiAqCiAqCiAqCiAqCiAqIF1dPgogKgogKiBUaGUgYWJvdmUgZXhhbXBsZSB3aWxsIG91dHB1dDoKICoKICogZXhhbXBsZTogLCB0aGlzIGlzIGEgdGVzdAogKiBleGFtcGxlOiAsIHRoaXMgaXMgYSB0ZXN0CiAqIF1dPgogKgogKgogKiBTbywgJG91dFswXSBjb250YWlucyBhcnJheSBvZiBzdHJpbmdzIHRoYXQgbWF0Y2hlZCBmdWxsIHBhdHRlcm4sCiAqIGFuZCAkb3V0WzFdIGNvbnRhaW5zIGFycmF5IG9mIHN0cmluZ3MgZW5jbG9zZWQgYnkgdGFncy4KICoKICoKICoKICoKICogSWYgdGhlIHBhdHRlcm4gY29udGFpbnMgbmFtZWQgc3VicGF0dGVybnMsICRtYXRjaGVzCiAqIGFkZGl0aW9uYWxseSBjb250YWlucyBlbnRyaWVzIGZvciBrZXlzIHdpdGggdGhlIHN1YnBhdHRlcm4gbmFtZS4KICoKICoKICogSWYgdGhlIHBhdHRlcm4gY29udGFpbnMgZHVwbGljYXRlIG5hbWVkIHN1YnBhdHRlcm5zLCBvbmx5IHRoZSByaWdodG1vc3QKICogc3VicGF0dGVybiBpcyBzdG9yZWQgaW4gJG1hdGNoZXNbTkFNRV0uCiAqCiAqCiAqCiAqIF1dPgogKgogKiBUaGUgYWJvdmUgZXhhbXBsZSB3aWxsIG91dHB1dDoKICoKICoKICogWzFdID0+IGJhcgogKiApCiAqIF1dPgogKgogKgogKgogKgogKgogKgogKiBQUkVHX1NFVF9PUkRFUgogKgogKgogKiBPcmRlcnMgcmVzdWx0cyBzbyB0aGF0ICRtYXRjaGVzWzBdIGlzIGFuIGFycmF5IG9mIGZpcnN0IHNldAogKiBvZiBtYXRjaGVzLCAkbWF0Y2hlc1sxXSBpcyBhbiBhcnJheSBvZiBzZWNvbmQgc2V0IG9mIG1hdGNoZXMsCiAqIGFuZCBzbyBvbi4KICoKICoKICoKICogXV0+CiAqCiAqIFRoZSBhYm92ZSBleGFtcGxlIHdpbGwgb3V0cHV0OgogKgogKiBleGFtcGxlOiAsIGV4YW1wbGU6CiAqIHRoaXMgaXMgYSB0ZXN0LCB0aGlzIGlzIGEgdGVzdAogKiBdXT4KICoKICoKICoKICoKICoKICoKICogUFJFR19PRkZTRVRfQ0FQVFVSRQogKgogKgogKiBJZiB0aGlzIGZsYWcgaXMgcGFzc2VkLCBmb3IgZXZlcnkgb2NjdXJyaW5nIG1hdGNoIHRoZSBhcHBlbmRhbnQgc3RyaW5nCiAqIG9mZnNldCAoaW4gYnl0ZXMpIHdpbGwgYWxzbyBiZSByZXR1cm5lZC4gTm90ZSB0aGF0IHRoaXMgY2hhbmdlcyB0aGUgdmFsdWUgb2YKICogbWF0Y2hlcyBpbnRvIGFuIGFycmF5IG9mIGFycmF5cyB3aGVyZSBldmVyeSBlbGVtZW50IGlzIGFuCiAqIGFycmF5IGNvbnNpc3Rpbmcgb2YgdGhlIG1hdGNoZWQgc3RyaW5nIGF0IG9mZnNldCAwCiAqIGFuZCBpdHMgc3RyaW5nIG9mZnNldCBpbnRvIHN1YmplY3QgYXQgb2Zmc2V0CiAqIDEuCiAqCiAqCiAqCiAqIF1dPgogKgogKiBUaGUgYWJvdmUgZXhhbXBsZSB3aWxsIG91dHB1dDoKICoKICogQXJyYXkKICogKAogKiBbMF0gPT4gQXJyYXkKICogKAogKiBbMF0gPT4gZm9vYmFyYmF6CiAqIFsxXSA9PiAwCiAqICkKICoKICogKQogKgogKiBbMV0gPT4gQXJyYXkKICogKAogKiBbMF0gPT4gQXJyYXkKICogKAogKiBbMF0gPT4gZm9vCiAqIFsxXSA9PiAwCiAqICkKICoKICogKQogKgogKiBbMl0gPT4gQXJyYXkKICogKAogKiBbMF0gPT4gQXJyYXkKICogKAogKiBbMF0gPT4gYmFyCiAqIFsxXSA9PiAzCiAqICkKICoKICogKQogKgogKiBbM10gPT4gQXJyYXkKICogKAogKiBbMF0gPT4gQXJyYXkKICogKAogKiBbMF0gPT4gYmF6CiAqIFsxXSA9PiA2CiAqICkKICoKICogKQogKgogKiApCiAqIF1dPgogKgogKgogKgogKgogKgogKgogKiBQUkVHX1VOTUFUQ0hFRF9BU19OVUxMCiAqCiAqCiAqIElmIHRoaXMgZmxhZyBpcyBwYXNzZWQsIHVubWF0Y2hlZCBzdWJwYXR0ZXJucyBhcmUgcmVwb3J0ZWQgYXMgTlVMTDsKICogb3RoZXJ3aXNlIHRoZXkgYXJlIHJlcG9ydGVkIGFzIGFuIGVtcHR5IHN0cmluZy4KICoKICoKICoKICoKICoKICogT3JkZXJzIHJlc3VsdHMgc28gdGhhdCAkbWF0Y2hlc1swXSBpcyBhbiBhcnJheSBvZiBmdWxsCiAqIHBhdHRlcm4gbWF0Y2hlcywgJG1hdGNoZXNbMV0gaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncyBtYXRjaGVkIGJ5CiAqIHRoZSBmaXJzdCBwYXJlbnRoZXNpemVkIHN1YnBhdHRlcm4sIGFuZCBzbyBvbi4KICoKICoKICoKICoKICogXV0+CiAqCiAqIFRoZSBhYm92ZSBleGFtcGxlIHdpbGwgb3V0cHV0OgogKgogKiBleGFtcGxlOiAsIHRoaXMgaXMgYSB0ZXN0CiAqIGV4YW1wbGU6ICwgdGhpcyBpcyBhIHRlc3QKICogXV0+CiAqCiAqCiAqIFNvLCAkb3V0WzBdIGNvbnRhaW5zIGFycmF5IG9mIHN0cmluZ3MgdGhhdCBtYXRjaGVkIGZ1bGwgcGF0dGVybiwKICogYW5kICRvdXRbMV0gY29udGFpbnMgYXJyYXkgb2Ygc3RyaW5ncyBlbmNsb3NlZCBieSB0YWdzLgogKgogKgogKgogKiBUaGUgYWJvdmUgZXhhbXBsZSB3aWxsIG91dHB1dDoKICoKICogU28sICRvdXRbMF0gY29udGFpbnMgYXJyYXkgb2Ygc3RyaW5ncyB0aGF0IG1hdGNoZWQgZnVsbCBwYXR0ZXJuLAogKiBhbmQgJG91dFsxXSBjb250YWlucyBhcnJheSBvZiBzdHJpbmdzIGVuY2xvc2VkIGJ5IHRhZ3MuCiAqCiAqIElmIHRoZSBwYXR0ZXJuIGNvbnRhaW5zIG5hbWVkIHN1YnBhdHRlcm5zLCAkbWF0Y2hlcwogKiBhZGRpdGlvbmFsbHkgY29udGFpbnMgZW50cmllcyBmb3Iga2V5cyB3aXRoIHRoZSBzdWJwYXR0ZXJuIG5hbWUuCiAqCiAqIElmIHRoZSBwYXR0ZXJuIGNvbnRhaW5zIGR1cGxpY2F0ZSBuYW1lZCBzdWJwYXR0ZXJucywgb25seSB0aGUgcmlnaHRtb3N0CiAqIHN1YnBhdHRlcm4gaXMgc3RvcmVkIGluICRtYXRjaGVzW05BTUVdLgogKgogKgogKgogKiBdXT4KICoKICogVGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBvdXRwdXQ6CiAqCiAqCiAqIFsxXSA9PiBiYXIKICogKQogKiBdXT4KICoKICoKICoKICogVGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBvdXRwdXQ6CiAqCiAqIE9yZGVycyByZXN1bHRzIHNvIHRoYXQgJG1hdGNoZXNbMF0gaXMgYW4gYXJyYXkgb2YgZmlyc3Qgc2V0CiAqIG9mIG1hdGNoZXMsICRtYXRjaGVzWzFdIGlzIGFuIGFycmF5IG9mIHNlY29uZCBzZXQgb2YgbWF0Y2hlcywKICogYW5kIHNvIG9uLgogKgogKgogKgogKiBdXT4KICoKICogVGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBvdXRwdXQ6CiAqCiAqIGV4YW1wbGU6ICwgZXhhbXBsZToKICogdGhpcyBpcyBhIHRlc3QsIHRoaXMgaXMgYSB0ZXN0CiAqIF1dPgogKgogKgogKgogKiBUaGUgYWJvdmUgZXhhbXBsZSB3aWxsIG91dHB1dDoKICoKICogSWYgdGhpcyBmbGFnIGlzIHBhc3NlZCwgZm9yIGV2ZXJ5IG9jY3VycmluZyBtYXRjaCB0aGUgYXBwZW5kYW50IHN0cmluZwogKiBvZmZzZXQgKGluIGJ5dGVzKSB3aWxsIGFsc28gYmUgcmV0dXJuZWQuIE5vdGUgdGhhdCB0aGlzIGNoYW5nZXMgdGhlIHZhbHVlIG9mCiAqIG1hdGNoZXMgaW50byBhbiBhcnJheSBvZiBhcnJheXMgd2hlcmUgZXZlcnkgZWxlbWVudCBpcyBhbgogKiBhcnJheSBjb25zaXN0aW5nIG9mIHRoZSBtYXRjaGVkIHN0cmluZyBhdCBvZmZzZXQgMAogKiBhbmQgaXRzIHN0cmluZyBvZmZzZXQgaW50byBzdWJqZWN0IGF0IG9mZnNldAogKiAxLgogKgogKgogKgogKiBdXT4KICoKICogVGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBvdXRwdXQ6CiAqCiAqIEFycmF5CiAqICgKICogWzBdID0+IEFycmF5CiAqICgKICogWzBdID0+IGZvb2JhcmJhegogKiBbMV0gPT4gMAogKiApCiAqCiAqICkKICoKICogWzFdID0+IEFycmF5CiAqICgKICogWzBdID0+IEFycmF5CiAqICgKICogWzBdID0+IGZvbwogKiBbMV0gPT4gMAogKiApCiAqCiAqICkKICoKICogWzJdID0+IEFycmF5CiAqICgKICogWzBdID0+IEFycmF5CiAqICgKICogWzBdID0+IGJhcgogKiBbMV0gPT4gMwogKiApCiAqCiAqICkKICoKICogWzNdID0+IEFycmF5CiAqICgKICogWzBdID0+IEFycmF5CiAqICgKICogWzBdID0+IGJhegogKiBbMV0gPT4gNgogKiApCiAqCiAqICkKICoKICogKQogKiBdXT4KICoKICoKICoKICogVGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBvdXRwdXQ6CiAqCiAqIElmIHRoaXMgZmxhZyBpcyBwYXNzZWQsIHVubWF0Y2hlZCBzdWJwYXR0ZXJucyBhcmUgcmVwb3J0ZWQgYXMgTlVMTDsKICogb3RoZXJ3aXNlIHRoZXkgYXJlIHJlcG9ydGVkIGFzIGFuIGVtcHR5IHN0cmluZy4KICoKICogSWYgbm8gb3JkZXIgZmxhZyBpcyBnaXZlbiwgUFJFR19QQVRURVJOX09SREVSIGlzCiAqIGFzc3VtZWQuCiAqIEBwYXJhbSBpbnQgJG9mZnNldCBPcmRlcnMgcmVzdWx0cyBzbyB0aGF0ICRtYXRjaGVzWzBdIGlzIGFuIGFycmF5IG9mIGZ1bGwKICogcGF0dGVybiBtYXRjaGVzLCAkbWF0Y2hlc1sxXSBpcyBhbiBhcnJheSBvZiBzdHJpbmdzIG1hdGNoZWQgYnkKICogdGhlIGZpcnN0IHBhcmVudGhlc2l6ZWQgc3VicGF0dGVybiwgYW5kIHNvIG9uLgogKgogKgogKgogKgogKiBdXT4KICoKICogVGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBvdXRwdXQ6CiAqCiAqIGV4YW1wbGU6ICwgdGhpcyBpcyBhIHRlc3QKICogZXhhbXBsZTogLCB0aGlzIGlzIGEgdGVzdAogKiBdXT4KICoKICoKICogU28sICRvdXRbMF0gY29udGFpbnMgYXJyYXkgb2Ygc3RyaW5ncyB0aGF0IG1hdGNoZWQgZnVsbCBwYXR0ZXJuLAogKiBhbmQgJG91dFsxXSBjb250YWlucyBhcnJheSBvZiBzdHJpbmdzIGVuY2xvc2VkIGJ5IHRhZ3MuCiAqCiAqCiAqCiAqIFRoZSBhYm92ZSBleGFtcGxlIHdpbGwgb3V0cHV0OgogKgogKiBTbywgJG91dFswXSBjb250YWlucyBhcnJheSBvZiBzdHJpbmdzIHRoYXQgbWF0Y2hlZCBmdWxsIHBhdHRlcm4sCiAqIGFuZCAkb3V0WzFdIGNvbnRhaW5zIGFycmF5IG9mIHN0cmluZ3MgZW5jbG9zZWQgYnkgdGFncy4KICoKICogSWYgdGhlIHBhdHRlcm4gY29udGFpbnMgbmFtZWQgc3VicGF0dGVybnMsICRtYXRjaGVzCiAqIGFkZGl0aW9uYWxseSBjb250YWlucyBlbnRyaWVzIGZvciBrZXlzIHdpdGggdGhlIHN1YnBhdHRlcm4gbmFtZS4KICoKICogSWYgdGhlIHBhdHRlcm4gY29udGFpbnMgZHVwbGljYXRlIG5hbWVkIHN1YnBhdHRlcm5zLCBvbmx5IHRoZSByaWdodG1vc3QKICogc3VicGF0dGVybiBpcyBzdG9yZWQgaW4gJG1hdGNoZXNbTkFNRV0uCiAqCiAqCiAqCiAqIF1dPgogKgogKiBUaGUgYWJvdmUgZXhhbXBsZSB3aWxsIG91dHB1dDoKICoKICoKICogWzFdID0+IGJhcgogKiApCiAqIF1dPgogKgogKgogKgogKiBUaGUgYWJvdmUgZXhhbXBsZSB3aWxsIG91dHB1dDoKICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGZ1bGwgcGF0dGVybiBtYXRjaGVzICh3aGljaCBtaWdodCBiZSB6ZXJvKS4KICogQHRocm93cyBQY3JlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwcmVnX21hdGNoX2FsbChzdHJpbmcgJHBhdHRlcm4sIHN0cmluZyAkc3ViamVjdCwgYXJyYXkgJiRtYXRjaGVzID0gbnVsbCwgaW50ICRmbGFncyA9IFBSRUdfUEFUVEVSTl9PUkRFUiwgaW50ICRvZmZzZXQgPSAwKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHJlZ19tYXRjaF9hbGwoJHBhdHRlcm4sICRzdWJqZWN0LCAkbWF0Y2hlcywgJGZsYWdzLCAkb2Zmc2V0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBjcmVFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogU2VhcmNoZXMgc3ViamVjdCBmb3IgYSBtYXRjaCB0byB0aGUgcmVndWxhcgogKiBleHByZXNzaW9uIGdpdmVuIGluIHBhdHRlcm4uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4gVGhlIHBhdHRlcm4gdG8gc2VhcmNoIGZvciwgYXMgYSBzdHJpbmcuCiAqIEBwYXJhbSBzdHJpbmcgJHN1YmplY3QgVGhlIGlucHV0IHN0cmluZy4KICogQHBhcmFtIGFycmF5ICRtYXRjaGVzIElmIG1hdGNoZXMgaXMgcHJvdmlkZWQsIHRoZW4gaXQgaXMgZmlsbGVkIHdpdGgKICogdGhlIHJlc3VsdHMgb2Ygc2VhcmNoLiAkbWF0Y2hlc1swXSB3aWxsIGNvbnRhaW4gdGhlCiAqIHRleHQgdGhhdCBtYXRjaGVkIHRoZSBmdWxsIHBhdHRlcm4sICRtYXRjaGVzWzFdCiAqIHdpbGwgaGF2ZSB0aGUgdGV4dCB0aGF0IG1hdGNoZWQgdGhlIGZpcnN0IGNhcHR1cmVkIHBhcmVudGhlc2l6ZWQKICogc3VicGF0dGVybiwgYW5kIHNvIG9uLgogKiBAcGFyYW0gaW50ICRmbGFncyBmbGFncyBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIGZsYWdzOgogKgogKgogKiBQUkVHX09GRlNFVF9DQVBUVVJFCiAqCiAqCiAqIElmIHRoaXMgZmxhZyBpcyBwYXNzZWQsIGZvciBldmVyeSBvY2N1cnJpbmcgbWF0Y2ggdGhlIGFwcGVuZGFudCBzdHJpbmcKICogb2Zmc2V0IChpbiBieXRlcykgd2lsbCBhbHNvIGJlIHJldHVybmVkLiBOb3RlIHRoYXQgdGhpcyBjaGFuZ2VzIHRoZSB2YWx1ZSBvZgogKiBtYXRjaGVzIGludG8gYW4gYXJyYXkgd2hlcmUgZXZlcnkgZWxlbWVudCBpcyBhbgogKiBhcnJheSBjb25zaXN0aW5nIG9mIHRoZSBtYXRjaGVkIHN0cmluZyBhdCBvZmZzZXQgMAogKiBhbmQgaXRzIHN0cmluZyBvZmZzZXQgaW50byBzdWJqZWN0IGF0IG9mZnNldAogKiAxLgogKgogKgogKgogKiBdXT4KICoKICogVGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBvdXRwdXQ6CiAqCiAqIEFycmF5CiAqICgKICogWzBdID0+IGZvb2JhcmJhegogKiBbMV0gPT4gMAogKiApCiAqCiAqIFsxXSA9PiBBcnJheQogKiAoCiAqIFswXSA9PiBmb28KICogWzFdID0+IDAKICogKQogKgogKiBbMl0gPT4gQXJyYXkKICogKAogKiBbMF0gPT4gYmFyCiAqIFsxXSA9PiAzCiAqICkKICoKICogWzNdID0+IEFycmF5CiAqICgKICogWzBdID0+IGJhegogKiBbMV0gPT4gNgogKiApCiAqCiAqICkKICogXV0+CiAqCiAqCiAqCiAqCiAqCiAqCiAqIFBSRUdfVU5NQVRDSEVEX0FTX05VTEwKICoKICoKICogSWYgdGhpcyBmbGFnIGlzIHBhc3NlZCwgdW5tYXRjaGVkIHN1YnBhdHRlcm5zIGFyZSByZXBvcnRlZCBhcyBOVUxMOwogKiBvdGhlcndpc2UgdGhleSBhcmUgcmVwb3J0ZWQgYXMgYW4gZW1wdHkgc3RyaW5nLgogKgogKgogKgogKiBdXT4KICoKICogVGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBvdXRwdXQ6CiAqCiAqCiAqIHN0cmluZygyKSAiYWMiCiAqIFsxXT0+CiAqIHN0cmluZygxKSAiYSIKICogWzJdPT4KICogc3RyaW5nKDApICIiCiAqIFszXT0+CiAqIHN0cmluZygxKSAiYyIKICogfQogKiBhcnJheSg0KSB7CiAqIFswXT0+CiAqIHN0cmluZygyKSAiYWMiCiAqIFsxXT0+CiAqIHN0cmluZygxKSAiYSIKICogWzJdPT4KICogTlVMTAogKiBbM109PgogKiBzdHJpbmcoMSkgImMiCiAqIH0KICogXV0+CiAqCiAqCiAqCiAqCiAqCiAqCiAqCiAqIElmIHRoaXMgZmxhZyBpcyBwYXNzZWQsIGZvciBldmVyeSBvY2N1cnJpbmcgbWF0Y2ggdGhlIGFwcGVuZGFudCBzdHJpbmcKICogb2Zmc2V0IChpbiBieXRlcykgd2lsbCBhbHNvIGJlIHJldHVybmVkLiBOb3RlIHRoYXQgdGhpcyBjaGFuZ2VzIHRoZSB2YWx1ZSBvZgogKiBtYXRjaGVzIGludG8gYW4gYXJyYXkgd2hlcmUgZXZlcnkgZWxlbWVudCBpcyBhbgogKiBhcnJheSBjb25zaXN0aW5nIG9mIHRoZSBtYXRjaGVkIHN0cmluZyBhdCBvZmZzZXQgMAogKiBhbmQgaXRzIHN0cmluZyBvZmZzZXQgaW50byBzdWJqZWN0IGF0IG9mZnNldAogKiAxLgogKgogKgogKgogKiBdXT4KICoKICogVGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBvdXRwdXQ6CiAqCiAqIEFycmF5CiAqICgKICogWzBdID0+IGZvb2JhcmJhegogKiBbMV0gPT4gMAogKiApCiAqCiAqIFsxXSA9PiBBcnJheQogKiAoCiAqIFswXSA9PiBmb28KICogWzFdID0+IDAKICogKQogKgogKiBbMl0gPT4gQXJyYXkKICogKAogKiBbMF0gPT4gYmFyCiAqIFsxXSA9PiAzCiAqICkKICoKICogWzNdID0+IEFycmF5CiAqICgKICogWzBdID0+IGJhegogKiBbMV0gPT4gNgogKiApCiAqCiAqICkKICogXV0+CiAqCiAqCiAqCiAqIFRoZSBhYm92ZSBleGFtcGxlIHdpbGwgb3V0cHV0OgogKgogKiBJZiB0aGlzIGZsYWcgaXMgcGFzc2VkLCB1bm1hdGNoZWQgc3VicGF0dGVybnMgYXJlIHJlcG9ydGVkIGFzIE5VTEw7CiAqIG90aGVyd2lzZSB0aGV5IGFyZSByZXBvcnRlZCBhcyBhbiBlbXB0eSBzdHJpbmcuCiAqCiAqCiAqCiAqIF1dPgogKgogKiBUaGUgYWJvdmUgZXhhbXBsZSB3aWxsIG91dHB1dDoKICoKICoKICogc3RyaW5nKDIpICJhYyIKICogWzFdPT4KICogc3RyaW5nKDEpICJhIgogKiBbMl09PgogKiBzdHJpbmcoMCkgIiIKICogWzNdPT4KICogc3RyaW5nKDEpICJjIgogKiB9CiAqIGFycmF5KDQpIHsKICogWzBdPT4KICogc3RyaW5nKDIpICJhYyIKICogWzFdPT4KICogc3RyaW5nKDEpICJhIgogKiBbMl09PgogKiBOVUxMCiAqIFszXT0+CiAqIHN0cmluZygxKSAiYyIKICogfQogKiBdXT4KICoKICoKICoKICogVGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBvdXRwdXQ6CiAqIEBwYXJhbSBpbnQgJG9mZnNldCBJZiB0aGlzIGZsYWcgaXMgcGFzc2VkLCBmb3IgZXZlcnkgb2NjdXJyaW5nIG1hdGNoIHRoZSBhcHBlbmRhbnQgc3RyaW5nCiAqIG9mZnNldCAoaW4gYnl0ZXMpIHdpbGwgYWxzbyBiZSByZXR1cm5lZC4gTm90ZSB0aGF0IHRoaXMgY2hhbmdlcyB0aGUgdmFsdWUgb2YKICogbWF0Y2hlcyBpbnRvIGFuIGFycmF5IHdoZXJlIGV2ZXJ5IGVsZW1lbnQgaXMgYW4KICogYXJyYXkgY29uc2lzdGluZyBvZiB0aGUgbWF0Y2hlZCBzdHJpbmcgYXQgb2Zmc2V0IDAKICogYW5kIGl0cyBzdHJpbmcgb2Zmc2V0IGludG8gc3ViamVjdCBhdCBvZmZzZXQKICogMS4KICoKICoKICoKICogXV0+CiAqCiAqIFRoZSBhYm92ZSBleGFtcGxlIHdpbGwgb3V0cHV0OgogKgogKiBBcnJheQogKiAoCiAqIFswXSA9PiBmb29iYXJiYXoKICogWzFdID0+IDAKICogKQogKgogKiBbMV0gPT4gQXJyYXkKICogKAogKiBbMF0gPT4gZm9vCiAqIFsxXSA9PiAwCiAqICkKICoKICogWzJdID0+IEFycmF5CiAqICgKICogWzBdID0+IGJhcgogKiBbMV0gPT4gMwogKiApCiAqCiAqIFszXSA9PiBBcnJheQogKiAoCiAqIFswXSA9PiBiYXoKICogWzFdID0+IDYKICogKQogKgogKiApCiAqIF1dPgogKgogKgogKgogKiBUaGUgYWJvdmUgZXhhbXBsZSB3aWxsIG91dHB1dDoKICogQHJldHVybiBpbnQgcHJlZ19tYXRjaCByZXR1cm5zIDEgaWYgdGhlIHBhdHRlcm4KICogbWF0Y2hlcyBnaXZlbiBzdWJqZWN0LCAwIGlmIGl0IGRvZXMgbm90LgogKiBAdGhyb3dzIFBjcmVFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHByZWdfbWF0Y2goc3RyaW5nICRwYXR0ZXJuLCBzdHJpbmcgJHN1YmplY3QsIGFycmF5ICYkbWF0Y2hlcyA9IG51bGwsIGludCAkZmxhZ3MgPSAwLCBpbnQgJG9mZnNldCA9IDApOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwcmVnX21hdGNoKCRwYXR0ZXJuLCAkc3ViamVjdCwgJG1hdGNoZXMsICRmbGFncywgJG9mZnNldCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQY3JlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNwbGl0IHRoZSBnaXZlbiBzdHJpbmcgYnkgYSByZWd1bGFyIGV4cHJlc3Npb24uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4gVGhlIHBhdHRlcm4gdG8gc2VhcmNoIGZvciwgYXMgYSBzdHJpbmcuCiAqIEBwYXJhbSBzdHJpbmcgJHN1YmplY3QgVGhlIGlucHV0IHN0cmluZy4KICogQHBhcmFtIGludHxudWxsICRsaW1pdCBJZiBzcGVjaWZpZWQsIHRoZW4gb25seSBzdWJzdHJpbmdzIHVwIHRvIGxpbWl0CiAqIGFyZSByZXR1cm5lZCB3aXRoIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgYmVpbmcgcGxhY2VkIGluIHRoZSBsYXN0CiAqIHN1YnN0cmluZy4gIEEgbGltaXQgb2YgLTEgb3IgMCBtZWFucyAibm8gbGltaXQiLgogKiBAcGFyYW0gaW50ICRmbGFncyBmbGFncyBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcKICogZmxhZ3MgKGNvbWJpbmVkIHdpdGggdGhlIHwgYml0d2lzZSBvcGVyYXRvcik6CiAqCiAqCiAqIFBSRUdfU1BMSVRfTk9fRU1QVFkKICoKICoKICogSWYgdGhpcyBmbGFnIGlzIHNldCwgb25seSBub24tZW1wdHkgcGllY2VzIHdpbGwgYmUgcmV0dXJuZWQgYnkKICogcHJlZ19zcGxpdC4KICoKICoKICoKICoKICogUFJFR19TUExJVF9ERUxJTV9DQVBUVVJFCiAqCiAqCiAqIElmIHRoaXMgZmxhZyBpcyBzZXQsIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbiBpbiB0aGUgZGVsaW1pdGVyIHBhdHRlcm4KICogd2lsbCBiZSBjYXB0dXJlZCBhbmQgcmV0dXJuZWQgYXMgd2VsbC4KICoKICoKICoKICoKICogUFJFR19TUExJVF9PRkZTRVRfQ0FQVFVSRQogKgogKgogKiBJZiB0aGlzIGZsYWcgaXMgc2V0LCBmb3IgZXZlcnkgb2NjdXJyaW5nIG1hdGNoIHRoZSBhcHBlbmRhbnQgc3RyaW5nCiAqIG9mZnNldCB3aWxsIGFsc28gYmUgcmV0dXJuZWQuIE5vdGUgdGhhdCB0aGlzIGNoYW5nZXMgdGhlIHJldHVybgogKiB2YWx1ZSBpbiBhbiBhcnJheSB3aGVyZSBldmVyeSBlbGVtZW50IGlzIGFuIGFycmF5IGNvbnNpc3Rpbmcgb2YgdGhlCiAqIG1hdGNoZWQgc3RyaW5nIGF0IG9mZnNldCAwIGFuZCBpdHMgc3RyaW5nIG9mZnNldAogKiBpbnRvIHN1YmplY3QgYXQgb2Zmc2V0IDEuCiAqCiAqCiAqCiAqCiAqCiAqIElmIHRoaXMgZmxhZyBpcyBzZXQsIGZvciBldmVyeSBvY2N1cnJpbmcgbWF0Y2ggdGhlIGFwcGVuZGFudCBzdHJpbmcKICogb2Zmc2V0IHdpbGwgYWxzbyBiZSByZXR1cm5lZC4gTm90ZSB0aGF0IHRoaXMgY2hhbmdlcyB0aGUgcmV0dXJuCiAqIHZhbHVlIGluIGFuIGFycmF5IHdoZXJlIGV2ZXJ5IGVsZW1lbnQgaXMgYW4gYXJyYXkgY29uc2lzdGluZyBvZiB0aGUKICogbWF0Y2hlZCBzdHJpbmcgYXQgb2Zmc2V0IDAgYW5kIGl0cyBzdHJpbmcgb2Zmc2V0CiAqIGludG8gc3ViamVjdCBhdCBvZmZzZXQgMS4KICogQHJldHVybiBhcnJheSBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgc3Vic3RyaW5ncyBvZiBzdWJqZWN0CiAqIHNwbGl0IGFsb25nIGJvdW5kYXJpZXMgbWF0Y2hlZCBieSBwYXR0ZXJuLgogKiBAdGhyb3dzIFBjcmVFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHByZWdfc3BsaXQoc3RyaW5nICRwYXR0ZXJuLCBzdHJpbmcgJHN1YmplY3QsID9pbnQgJGxpbWl0ID0gLTEsIGludCAkZmxhZ3MgPSAwKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwcmVnX3NwbGl0KCRwYXR0ZXJuLCAkc3ViamVjdCwgJGxpbWl0LCAkZmxhZ3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGNyZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/pdf.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xQZGZFeGNlcHRpb247CgovKioKICogQWN0aXZhdGVzIGEgcHJldmlvdXNseSBjcmVhdGVkIHN0cnVjdHVyZSBlbGVtZW50IG9yIG90aGVyIGNvbnRlbnQgaXRlbS4KICogUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmZG9jCiAqIEBwYXJhbSBpbnQgJGlkCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfYWN0aXZhdGVfaXRlbSgkcGRmZG9jLCBpbnQgJGlkKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9hY3RpdmF0ZV9pdGVtKCRwZGZkb2MsICRpZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEFkZCBhIGxpbmsgYW5ub3RhdGlvbiB0byBhIHRhcmdldCB3aXRoaW4gdGhlIGN1cnJlbnQgUERGIGZpbGUuCiAqIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgc2luY2UgUERGbGliIHZlcnNpb24gNiwgdXNlCiAqIFBERl9jcmVhdGVfYWN0aW9uIHdpdGggdHlwZT1Hb1RvCiAqIGFuZCBQREZfY3JlYXRlX2Fubm90YXRpb24gd2l0aAogKiB0eXBlPUxpbmsgaW5zdGVhZC4KICoKICogQHBhcmFtIHJlc291cmNlICRwZGZkb2MKICogQHBhcmFtIGZsb2F0ICRsb3dlcmxlZnR4CiAqIEBwYXJhbSBmbG9hdCAkbG93ZXJsZWZ0eQogKiBAcGFyYW0gZmxvYXQgJHVwcGVycmlnaHR4CiAqIEBwYXJhbSBmbG9hdCAkdXBwZXJyaWdodHkKICogQHBhcmFtIGludCAkcGFnZQogKiBAcGFyYW0gc3RyaW5nICRkZXN0CiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfYWRkX2xvY2FsbGluaygkcGRmZG9jLCBmbG9hdCAkbG93ZXJsZWZ0eCwgZmxvYXQgJGxvd2VybGVmdHksIGZsb2F0ICR1cHBlcnJpZ2h0eCwgZmxvYXQgJHVwcGVycmlnaHR5LCBpbnQgJHBhZ2UsIHN0cmluZyAkZGVzdCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfYWRkX2xvY2FsbGluaygkcGRmZG9jLCAkbG93ZXJsZWZ0eCwgJGxvd2VybGVmdHksICR1cHBlcnJpZ2h0eCwgJHVwcGVycmlnaHR5LCAkcGFnZSwgJGRlc3QpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBDcmVhdGVzIGEgbmFtZWQgZGVzdGluYXRpb24gb24gYW4gYXJiaXRyYXJ5IHBhZ2UgaW4gdGhlIGN1cnJlbnQgZG9jdW1lbnQuCiAqIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9hZGRfbmFtZWRkZXN0KCRwZGZkb2MsIHN0cmluZyAkbmFtZSwgc3RyaW5nICRvcHRsaXN0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9hZGRfbmFtZWRkZXN0KCRwZGZkb2MsICRuYW1lLCAkb3B0bGlzdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgYW4gYW5ub3RhdGlvbiBmb3IgdGhlIGN1cnJlbnQgcGFnZS4gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBzaW5jZSBQREZsaWIgdmVyc2lvbiA2LCB1c2UKICogUERGX2NyZWF0ZV9hbm5vdGF0aW9uIHdpdGgKICogdHlwZT1UZXh0IGluc3RlYWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmZG9jCiAqIEBwYXJhbSBmbG9hdCAkbGx4CiAqIEBwYXJhbSBmbG9hdCAkbGx5CiAqIEBwYXJhbSBmbG9hdCAkdXJ4CiAqIEBwYXJhbSBmbG9hdCAkdXJ5CiAqIEBwYXJhbSBzdHJpbmcgJGNvbnRlbnRzCiAqIEBwYXJhbSBzdHJpbmcgJHRpdGxlCiAqIEBwYXJhbSBzdHJpbmcgJGljb24KICogQHBhcmFtIGludCAkb3BlbgogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX2FkZF9ub3RlKCRwZGZkb2MsIGZsb2F0ICRsbHgsIGZsb2F0ICRsbHksIGZsb2F0ICR1cngsIGZsb2F0ICR1cnksIHN0cmluZyAkY29udGVudHMsIHN0cmluZyAkdGl0bGUsIHN0cmluZyAkaWNvbiwgaW50ICRvcGVuKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9hZGRfbm90ZSgkcGRmZG9jLCAkbGx4LCAkbGx5LCAkdXJ4LCAkdXJ5LCAkY29udGVudHMsICR0aXRsZSwgJGljb24sICRvcGVuKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQWRkIGEgZmlsZSBsaW5rIGFubm90YXRpb24gdG8gYSBQREYgdGFyZ2V0LgogKiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIFBERmxpYiB2ZXJzaW9uIDYsIHVzZQogKiBQREZfY3JlYXRlX2FjdGlvbiB3aXRoCiAqIHR5cGU9R29Ub1IgYW5kCiAqIFBERl9jcmVhdGVfYW5ub3RhdGlvbiB3aXRoCiAqIHR5cGU9TGluayBpbnN0ZWFkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gZmxvYXQgJGJvdHRvbV9sZWZ0X3gKICogQHBhcmFtIGZsb2F0ICRib3R0b21fbGVmdF95CiAqIEBwYXJhbSBmbG9hdCAkdXBfcmlnaHRfeAogKiBAcGFyYW0gZmxvYXQgJHVwX3JpZ2h0X3kKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUKICogQHBhcmFtIGludCAkcGFnZQogKiBAcGFyYW0gc3RyaW5nICRkZXN0CiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfYWRkX3BkZmxpbmsoJHBkZmRvYywgZmxvYXQgJGJvdHRvbV9sZWZ0X3gsIGZsb2F0ICRib3R0b21fbGVmdF95LCBmbG9hdCAkdXBfcmlnaHRfeCwgZmxvYXQgJHVwX3JpZ2h0X3ksIHN0cmluZyAkZmlsZW5hbWUsIGludCAkcGFnZSwgc3RyaW5nICRkZXN0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9hZGRfcGRmbGluaygkcGRmZG9jLCAkYm90dG9tX2xlZnRfeCwgJGJvdHRvbV9sZWZ0X3ksICR1cF9yaWdodF94LCAkdXBfcmlnaHRfeSwgJGZpbGVuYW1lLCAkcGFnZSwgJGRlc3QpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBBZGRzIGFuIGV4aXN0aW5nIGltYWdlIGFzIHRodW1ibmFpbCBmb3IgdGhlIGN1cnJlbnQgcGFnZS4KICogUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmZG9jCiAqIEBwYXJhbSBpbnQgJGltYWdlCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfYWRkX3RodW1ibmFpbCgkcGRmZG9jLCBpbnQgJGltYWdlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9hZGRfdGh1bWJuYWlsKCRwZGZkb2MsICRpbWFnZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEFkZHMgYSB3ZWJsaW5rIGFubm90YXRpb24gdG8gYSB0YXJnZXQgdXJsIG9uIHRoZSBXZWIuCiAqIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgc2luY2UgUERGbGliIHZlcnNpb24gNiwgdXNlCiAqIFBERl9jcmVhdGVfYWN0aW9uIHdpdGggdHlwZT1VUkkKICogYW5kIFBERl9jcmVhdGVfYW5ub3RhdGlvbiB3aXRoCiAqIHR5cGU9TGluayBpbnN0ZWFkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gZmxvYXQgJGxvd2VybGVmdHgKICogQHBhcmFtIGZsb2F0ICRsb3dlcmxlZnR5CiAqIEBwYXJhbSBmbG9hdCAkdXBwZXJyaWdodHgKICogQHBhcmFtIGZsb2F0ICR1cHBlcnJpZ2h0eQogKiBAcGFyYW0gc3RyaW5nICR1cmwKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9hZGRfd2VibGluaygkcGRmZG9jLCBmbG9hdCAkbG93ZXJsZWZ0eCwgZmxvYXQgJGxvd2VybGVmdHksIGZsb2F0ICR1cHBlcnJpZ2h0eCwgZmxvYXQgJHVwcGVycmlnaHR5LCBzdHJpbmcgJHVybCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfYWRkX3dlYmxpbmsoJHBkZmRvYywgJGxvd2VybGVmdHgsICRsb3dlcmxlZnR5LCAkdXBwZXJyaWdodHgsICR1cHBlcnJpZ2h0eSwgJHVybCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEFkZHMgYSBmaWxlIGF0dGFjaG1lbnQgYW5ub3RhdGlvbi4gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBzaW5jZSBQREZsaWIgdmVyc2lvbiA2LCB1c2UKICogUERGX2NyZWF0ZV9hbm5vdGF0aW9uIHdpdGgKICogdHlwZT1GaWxlQXR0YWNobWVudCBpbnN0ZWFkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gZmxvYXQgJGxseAogKiBAcGFyYW0gZmxvYXQgJGxseQogKiBAcGFyYW0gZmxvYXQgJHVyeAogKiBAcGFyYW0gZmxvYXQgJHVyeQogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogKiBAcGFyYW0gc3RyaW5nICRkZXNjcmlwdGlvbgogKiBAcGFyYW0gc3RyaW5nICRhdXRob3IKICogQHBhcmFtIHN0cmluZyAkbWltZXR5cGUKICogQHBhcmFtIHN0cmluZyAkaWNvbgogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX2F0dGFjaF9maWxlKCRwZGZkb2MsIGZsb2F0ICRsbHgsIGZsb2F0ICRsbHksIGZsb2F0ICR1cngsIGZsb2F0ICR1cnksIHN0cmluZyAkZmlsZW5hbWUsIHN0cmluZyAkZGVzY3JpcHRpb24sIHN0cmluZyAkYXV0aG9yLCBzdHJpbmcgJG1pbWV0eXBlLCBzdHJpbmcgJGljb24pOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX2F0dGFjaF9maWxlKCRwZGZkb2MsICRsbHgsICRsbHksICR1cngsICR1cnksICRmaWxlbmFtZSwgJGRlc2NyaXB0aW9uLCAkYXV0aG9yLCAkbWltZXR5cGUsICRpY29uKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU3RhcnRzIGEgbGF5ZXIgZm9yIHN1YnNlcXVlbnQgb3V0cHV0IG9uIHRoZSBwYWdlLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogVGhpcyBmdW5jdGlvbiByZXF1aXJlcyBQREYgMS41LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gaW50ICRsYXllcgogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX2JlZ2luX2xheWVyKCRwZGZkb2MsIGludCAkbGF5ZXIpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX2JlZ2luX2xheWVyKCRwZGZkb2MsICRsYXllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEFkZHMgYSBuZXcgcGFnZSB0byB0aGUgZG9jdW1lbnQsIGFuZCBzcGVjaWZpZXMgdmFyaW91cyBvcHRpb25zLgogKiBUaGUgcGFyYW1ldGVycyB3aWR0aCBhbmQgaGVpZ2h0CiAqIGFyZSB0aGUgZGltZW5zaW9ucyBvZiB0aGUgbmV3IHBhZ2UgaW4gcG9pbnRzLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICoKICogQ29tbW9uIFBhZ2UgU2l6ZXMgaW4gUG9pbnRzCiAqCiAqCiAqCiAqIG5hbWUKICogc2l6ZQogKgogKgogKgogKgogKiBBMAogKiAyMzgwIHggMzM2OAogKgogKgogKiBBMQogKiAxNjg0IHggMjM4MAogKgogKgogKiBBMgogKiAxMTkwIHggMTY4NAogKgogKgogKiBBMwogKiA4NDIgeCAxMTkwCiAqCiAqCiAqIEE0CiAqIDU5NSB4IDg0MgogKgogKgogKiBBNQogKiA0MjEgeCA1OTUKICoKICoKICogQTYKICogMjk3IHggNDIxCiAqCiAqCiAqIEI1CiAqIDUwMSB4IDcwOQogKgogKgogKiBsZXR0ZXIgKDguNSIgeCAxMSIpCiAqIDYxMiB4IDc5MgogKgogKgogKiBsZWdhbCAoOC41IiB4IDE0IikKICogNjEyIHggMTAwOAogKgogKgogKiBsZWRnZXIgKDE3IiB4IDExIikKICogMTIyNCB4IDc5MgogKgogKgogKiAxMSIgeCAxNyIKICogNzkyIHggMTIyNAogKgogKgogKgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gZmxvYXQgJHdpZHRoCiAqIEBwYXJhbSBmbG9hdCAkaGVpZ2h0CiAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9iZWdpbl9wYWdlX2V4dCgkcGRmZG9jLCBmbG9hdCAkd2lkdGgsIGZsb2F0ICRoZWlnaHQsIHN0cmluZyAkb3B0bGlzdCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfYmVnaW5fcGFnZV9leHQoJHBkZmRvYywgJHdpZHRoLCAkaGVpZ2h0LCAkb3B0bGlzdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEFkZHMgYSBuZXcgcGFnZSB0byB0aGUgZG9jdW1lbnQuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgc2luY2UgUERGbGliIHZlcnNpb24gNiwgdXNlCiAqIFBERl9iZWdpbl9wYWdlX2V4dCBpbnN0ZWFkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gZmxvYXQgJHdpZHRoCiAqIEBwYXJhbSBmbG9hdCAkaGVpZ2h0CiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfYmVnaW5fcGFnZSgkcGRmZG9jLCBmbG9hdCAkd2lkdGgsIGZsb2F0ICRoZWlnaHQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX2JlZ2luX3BhZ2UoJHBkZmRvYywgJHdpZHRoLCAkaGVpZ2h0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQWRkcyBhIGNpcmNsZS4gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmZG9jCiAqIEBwYXJhbSBmbG9hdCAkeAogKiBAcGFyYW0gZmxvYXQgJHkKICogQHBhcmFtIGZsb2F0ICRyCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfY2lyY2xlKCRwZGZkb2MsIGZsb2F0ICR4LCBmbG9hdCAkeSwgZmxvYXQgJHIpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX2NpcmNsZSgkcGRmZG9jLCAkeCwgJHksICRyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVXNlcyB0aGUgY3VycmVudCBwYXRoIGFzIGNsaXBwaW5nIHBhdGgsIGFuZCB0ZXJtaW5hdGUgdGhlIHBhdGguIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHAKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9jbGlwKCRwKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9jbGlwKCRwKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ2xvc2VzIHRoZSBwYWdlIGhhbmRsZSwgYW5kIGZyZWVzIGFsbCBwYWdlLXJlbGF0ZWQgcmVzb3VyY2VzLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBpbnQgJHBhZ2UKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9jbG9zZV9wZGlfcGFnZSgkcCwgaW50ICRwYWdlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9jbG9zZV9wZGlfcGFnZSgkcCwgJHBhZ2UpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBDbG9zZXMgYWxsIG9wZW4gcGFnZSBoYW5kbGVzLCBhbmQgY2xvc2VzIHRoZSBpbnB1dCBQREYgZG9jdW1lbnQuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgc2luY2UgUERGbGliIHZlcnNpb24gNywKICogdXNlIFBERl9jbG9zZV9wZGlfZG9jdW1lbnQgaW5zdGVhZC4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBpbnQgJGRvYwogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX2Nsb3NlX3BkaSgkcCwgaW50ICRkb2MpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX2Nsb3NlX3BkaSgkcCwgJGRvYyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENsb3NlcyB0aGUgZ2VuZXJhdGVkIFBERiBmaWxlLCBhbmQgZnJlZXMgYWxsIGRvY3VtZW50LXJlbGF0ZWQgcmVzb3VyY2VzLgogKiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIFBERmxpYiB2ZXJzaW9uIDYsIHVzZQogKiBQREZfZW5kX2RvY3VtZW50IGluc3RlYWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcAogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX2Nsb3NlKCRwKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9jbG9zZSgkcCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENsb3NlcyB0aGUgcGF0aCwgZmlsbHMsIGFuZCBzdHJva2VzIGl0LiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfY2xvc2VwYXRoX2ZpbGxfc3Ryb2tlKCRwKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9jbG9zZXBhdGhfZmlsbF9zdHJva2UoJHApOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBDbG9zZXMgdGhlIHBhdGgsIGFuZCBzdHJva2VzIGl0LiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfY2xvc2VwYXRoX3N0cm9rZSgkcCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfY2xvc2VwYXRoX3N0cm9rZSgkcCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENsb3NlcyB0aGUgY3VycmVudCBwYXRoLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfY2xvc2VwYXRoKCRwKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9jbG9zZXBhdGgoJHApOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBDb25jYXRlbmF0ZXMgYSBtYXRyaXggdG8gdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gbWF0cml4IChDVE0pLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBmbG9hdCAkYQogKiBAcGFyYW0gZmxvYXQgJGIKICogQHBhcmFtIGZsb2F0ICRjCiAqIEBwYXJhbSBmbG9hdCAkZAogKiBAcGFyYW0gZmxvYXQgJGUKICogQHBhcmFtIGZsb2F0ICRmCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfY29uY2F0KCRwLCBmbG9hdCAkYSwgZmxvYXQgJGIsIGZsb2F0ICRjLCBmbG9hdCAkZCwgZmxvYXQgJGUsIGZsb2F0ICRmKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9jb25jYXQoJHAsICRhLCAkYiwgJGMsICRkLCAkZSwgJGYpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBQcmludHMgdGV4dCBhdCB0aGUgbmV4dCBsaW5lLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBzdHJpbmcgJHRleHQKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9jb250aW51ZV90ZXh0KCRwLCBzdHJpbmcgJHRleHQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX2NvbnRpbnVlX3RleHQoJHAsICR0ZXh0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRHJhd3MgYSBCZXppZXIgY3VydmUgZnJvbSB0aGUgY3VycmVudCBwb2ludCwgdXNpbmcgMyBtb3JlIGNvbnRyb2wgcG9pbnRzLgogKiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBmbG9hdCAkeDEKICogQHBhcmFtIGZsb2F0ICR5MQogKiBAcGFyYW0gZmxvYXQgJHgyCiAqIEBwYXJhbSBmbG9hdCAkeTIKICogQHBhcmFtIGZsb2F0ICR4MwogKiBAcGFyYW0gZmxvYXQgJHkzCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfY3VydmV0bygkcCwgZmxvYXQgJHgxLCBmbG9hdCAkeTEsIGZsb2F0ICR4MiwgZmxvYXQgJHkyLCBmbG9hdCAkeDMsIGZsb2F0ICR5Myk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfY3VydmV0bygkcCwgJHgxLCAkeTEsICR4MiwgJHkyLCAkeDMsICR5Myk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERlbGV0ZXMgYSBQREZsaWIgb2JqZWN0LCBhbmQgZnJlZXMgYWxsIGludGVybmFsIHJlc291cmNlcy4gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmZG9jCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfZGVsZXRlKCRwZGZkb2MpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX2RlbGV0ZSgkcGRmZG9jKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRGVhY3RpdmF0ZXMgYWxsIGFjdGl2ZSBsYXllcnMuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBUaGlzIGZ1bmN0aW9uIHJlcXVpcmVzIFBERiAxLjUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmZG9jCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfZW5kX2xheWVyKCRwZGZkb2MpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX2VuZF9sYXllcigkcGRmZG9jKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRmluaXNoZXMgYSBwYWdlLCBhbmQgYXBwbGllcyB2YXJpb3VzIG9wdGlvbnMuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfZW5kX3BhZ2VfZXh0KCRwZGZkb2MsIHN0cmluZyAkb3B0bGlzdCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfZW5kX3BhZ2VfZXh0KCRwZGZkb2MsICRvcHRsaXN0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRmluaXNoZXMgdGhlIHBhZ2UuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHAKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9lbmRfcGFnZSgkcCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfZW5kX3BhZ2UoJHApOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBGaW5pc2hlcyB0aGUgcGF0dGVybiBkZWZpbml0aW9uLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfZW5kX3BhdHRlcm4oJHApOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX2VuZF9wYXR0ZXJuKCRwKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRmluaXNoZXMgYSB0ZW1wbGF0ZSBkZWZpbml0aW9uLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfZW5kX3RlbXBsYXRlKCRwKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9lbmRfdGVtcGxhdGUoJHApOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBGaWxscyBhbmQgc3Ryb2tlcyB0aGUgY3VycmVudCBwYXRoIHdpdGggdGhlIGN1cnJlbnQgZmlsbCBhbmQgc3Ryb2tlIGNvbG9yLgogKiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfZmlsbF9zdHJva2UoJHApOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX2ZpbGxfc3Ryb2tlKCRwKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRmlsbHMgdGhlIGludGVyaW9yIG9mIHRoZSBjdXJyZW50IHBhdGggd2l0aCB0aGUgY3VycmVudCBmaWxsIGNvbG9yLgogKiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfZmlsbCgkcCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfZmlsbCgkcCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFBsYWNlcyBhbiBpbWFnZSBvciB0ZW1wbGF0ZSBvbiB0aGUgcGFnZSwgc3ViamVjdCB0byB2YXJpb3VzIG9wdGlvbnMuCiAqIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gaW50ICRpbWFnZQogKiBAcGFyYW0gZmxvYXQgJHgKICogQHBhcmFtIGZsb2F0ICR5CiAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9maXRfaW1hZ2UoJHBkZmRvYywgaW50ICRpbWFnZSwgZmxvYXQgJHgsIGZsb2F0ICR5LCBzdHJpbmcgJG9wdGxpc3QpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX2ZpdF9pbWFnZSgkcGRmZG9jLCAkaW1hZ2UsICR4LCAkeSwgJG9wdGxpc3QpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBQbGFjZXMgYW4gaW1wb3J0ZWQgUERGIHBhZ2Ugb24gdGhlIHBhZ2UsIHN1YmplY3QgdG8gdmFyaW91cyBvcHRpb25zLgogKiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwZGZkb2MKICogQHBhcmFtIGludCAkcGFnZQogKiBAcGFyYW0gZmxvYXQgJHgKICogQHBhcmFtIGZsb2F0ICR5CiAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9maXRfcGRpX3BhZ2UoJHBkZmRvYywgaW50ICRwYWdlLCBmbG9hdCAkeCwgZmxvYXQgJHksIHN0cmluZyAkb3B0bGlzdCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfZml0X3BkaV9wYWdlKCRwZGZkb2MsICRwYWdlLCAkeCwgJHksICRvcHRsaXN0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUGxhY2VzIGEgc2luZ2xlIGxpbmUgb2YgdGV4dCBvbiB0aGUgcGFnZSwgc3ViamVjdCB0byB2YXJpb3VzIG9wdGlvbnMuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gc3RyaW5nICR0ZXh0CiAqIEBwYXJhbSBmbG9hdCAkeAogKiBAcGFyYW0gZmxvYXQgJHkKICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX2ZpdF90ZXh0bGluZSgkcGRmZG9jLCBzdHJpbmcgJHRleHQsIGZsb2F0ICR4LCBmbG9hdCAkeSwgc3RyaW5nICRvcHRsaXN0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9maXRfdGV4dGxpbmUoJHBkZmRvYywgJHRleHQsICR4LCAkeSwgJG9wdGxpc3QpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBSZXNldCBhbGwgY29sb3IgYW5kIGdyYXBoaWNzIHN0YXRlIHBhcmFtZXRlcnMgdG8gdGhlaXIgZGVmYXVsdHMuCiAqIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHAKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9pbml0Z3JhcGhpY3MoJHApOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX2luaXRncmFwaGljcygkcCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERyYXdzIGEgbGluZSBmcm9tIHRoZSBjdXJyZW50IHBvaW50IHRvIGFub3RoZXIgcG9pbnQuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHAKICogQHBhcmFtIGZsb2F0ICR4CiAqIEBwYXJhbSBmbG9hdCAkeQogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX2xpbmV0bygkcCwgZmxvYXQgJHgsIGZsb2F0ICR5KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9saW5ldG8oJHAsICR4LCAkeSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEZpbmRzIGEgYnVpbHQtaW4gc3BvdCBjb2xvciBuYW1lLCBvciBtYWtlcyBhIG5hbWVkIHNwb3QgY29sb3IgZnJvbSB0aGUKICogY3VycmVudCBmaWxsIGNvbG9yLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBzdHJpbmcgJHNwb3RuYW1lCiAqIEByZXR1cm4gaW50CiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfbWFrZXNwb3Rjb2xvcigkcCwgc3RyaW5nICRzcG90bmFtZSk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9tYWtlc3BvdGNvbG9yKCRwLCAkc3BvdG5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNldHMgdGhlIGN1cnJlbnQgcG9pbnQgZm9yIGdyYXBoaWNzIG91dHB1dC4gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcAogKiBAcGFyYW0gZmxvYXQgJHgKICogQHBhcmFtIGZsb2F0ICR5CiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfbW92ZXRvKCRwLCBmbG9hdCAkeCwgZmxvYXQgJHkpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX21vdmV0bygkcCwgJHgsICR5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ3JlYXRlcyBhIG5ldyBQREYgZmlsZSB1c2luZyB0aGUgc3VwcGxpZWQgZmlsZSBuYW1lLgogKiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIFBERmxpYiB2ZXJzaW9uIDYsIHVzZQogKiBQREZfYmVnaW5fZG9jdW1lbnQgaW5zdGVhZC4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfb3Blbl9maWxlKCRwLCBzdHJpbmcgJGZpbGVuYW1lKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9vcGVuX2ZpbGUoJHAsICRmaWxlbmFtZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFBsYWNlcyBhbiBpbWFnZSBhbmQgc2NhbGVzIGl0LiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIFBERmxpYiB2ZXJzaW9uIDUsIHVzZQogKiBQREZfZml0X2ltYWdlIGluc3RlYWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmZG9jCiAqIEBwYXJhbSBpbnQgJGltYWdlCiAqIEBwYXJhbSBmbG9hdCAkeAogKiBAcGFyYW0gZmxvYXQgJHkKICogQHBhcmFtIGZsb2F0ICRzY2FsZQogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX3BsYWNlX2ltYWdlKCRwZGZkb2MsIGludCAkaW1hZ2UsIGZsb2F0ICR4LCBmbG9hdCAkeSwgZmxvYXQgJHNjYWxlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9wbGFjZV9pbWFnZSgkcGRmZG9jLCAkaW1hZ2UsICR4LCAkeSwgJHNjYWxlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUGxhY2VzIGEgUERGIHBhZ2UgYW5kIHNjYWxlcyBpdC4gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBzaW5jZSBQREZsaWIgdmVyc2lvbiA1LCB1c2UKICogUERGX2ZpdF9wZGlfcGFnZSBpbnN0ZWFkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gaW50ICRwYWdlCiAqIEBwYXJhbSBmbG9hdCAkeAogKiBAcGFyYW0gZmxvYXQgJHkKICogQHBhcmFtIGZsb2F0ICRzeAogKiBAcGFyYW0gZmxvYXQgJHN5CiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfcGxhY2VfcGRpX3BhZ2UoJHBkZmRvYywgaW50ICRwYWdlLCBmbG9hdCAkeCwgZmxvYXQgJHksIGZsb2F0ICRzeCwgZmxvYXQgJHN5KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9wbGFjZV9wZGlfcGFnZSgkcGRmZG9jLCAkcGFnZSwgJHgsICR5LCAkc3gsICRzeSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERyYXdzIGEgcmVjdGFuZ2xlLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBmbG9hdCAkeAogKiBAcGFyYW0gZmxvYXQgJHkKICogQHBhcmFtIGZsb2F0ICR3aWR0aAogKiBAcGFyYW0gZmxvYXQgJGhlaWdodAogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX3JlY3QoJHAsIGZsb2F0ICR4LCBmbG9hdCAkeSwgZmxvYXQgJHdpZHRoLCBmbG9hdCAkaGVpZ2h0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9yZWN0KCRwLCAkeCwgJHksICR3aWR0aCwgJGhlaWdodCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJlc3RvcmVzIHRoZSBtb3N0IHJlY2VudGx5IHNhdmVkIGdyYXBoaWNzIHN0YXRlLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfcmVzdG9yZSgkcCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfcmVzdG9yZSgkcCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJvdGF0ZXMgdGhlIGNvb3JkaW5hdGUgc3lzdGVtLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBmbG9hdCAkcGhpCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfcm90YXRlKCRwLCBmbG9hdCAkcGhpKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9yb3RhdGUoJHAsICRwaGkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTYXZlcyB0aGUgY3VycmVudCBncmFwaGljcyBzdGF0ZS4gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcAogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX3NhdmUoJHApOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3NhdmUoJHApOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTY2FsZXMgdGhlIGNvb3JkaW5hdGUgc3lzdGVtLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBmbG9hdCAkc3gKICogQHBhcmFtIGZsb2F0ICRzeQogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX3NjYWxlKCRwLCBmbG9hdCAkc3gsIGZsb2F0ICRzeSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfc2NhbGUoJHAsICRzeCwgJHN5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyB0aGUgYm9yZGVyIGNvbG9yIGZvciBhbGwga2luZHMgb2YgYW5ub3RhdGlvbnMuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgc2luY2UgUERGbGliIHZlcnNpb24gNiwgdXNlCiAqIHRoZSBvcHRpb24gYW5ub3Rjb2xvciBpbgogKiBQREZfY3JlYXRlX2Fubm90YXRpb24gaW5zdGVhZC4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBmbG9hdCAkcmVkCiAqIEBwYXJhbSBmbG9hdCAkZ3JlZW4KICogQHBhcmFtIGZsb2F0ICRibHVlCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfc2V0X2JvcmRlcl9jb2xvcigkcCwgZmxvYXQgJHJlZCwgZmxvYXQgJGdyZWVuLCBmbG9hdCAkYmx1ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfc2V0X2JvcmRlcl9jb2xvcigkcCwgJHJlZCwgJGdyZWVuLCAkYmx1ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgdGhlIGJvcmRlciBkYXNoIHN0eWxlIGZvciBhbGwga2luZHMgb2YgYW5ub3RhdGlvbnMuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgc2luY2UgUERGbGliIHZlcnNpb24gNiwgdXNlCiAqIHRoZSBvcHRpb24gZGFzaGFycmF5IGluCiAqIFBERl9jcmVhdGVfYW5ub3RhdGlvbiBpbnN0ZWFkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gZmxvYXQgJGJsYWNrCiAqIEBwYXJhbSBmbG9hdCAkd2hpdGUKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9zZXRfYm9yZGVyX2Rhc2goJHBkZmRvYywgZmxvYXQgJGJsYWNrLCBmbG9hdCAkd2hpdGUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3NldF9ib3JkZXJfZGFzaCgkcGRmZG9jLCAkYmxhY2ssICR3aGl0ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgdGhlIGJvcmRlciBzdHlsZSBmb3IgYWxsIGtpbmRzIG9mIGFubm90YXRpb25zLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIFBERmxpYiB2ZXJzaW9uIDYsIHVzZQogKiB0aGUgb3B0aW9ucyBib3JkZXJzdHlsZSBhbmQKICogbGluZXdpZHRoIGluCiAqIFBERl9jcmVhdGVfYW5ub3RhdGlvbiBpbnN0ZWFkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gc3RyaW5nICRzdHlsZQogKiBAcGFyYW0gZmxvYXQgJHdpZHRoCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfc2V0X2JvcmRlcl9zdHlsZSgkcGRmZG9jLCBzdHJpbmcgJHN0eWxlLCBmbG9hdCAkd2lkdGgpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3NldF9ib3JkZXJfc3R5bGUoJHBkZmRvYywgJHN0eWxlLCAkd2lkdGgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBGaWxsIGRvY3VtZW50IGluZm9ybWF0aW9uIGZpZWxkIGtleSB3aXRoCiAqIHZhbHVlLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBzdHJpbmcgJGtleQogKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX3NldF9pbmZvKCRwLCBzdHJpbmcgJGtleSwgc3RyaW5nICR2YWx1ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfc2V0X2luZm8oJHAsICRrZXksICR2YWx1ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERlZmluZXMgaGllcmFyY2hpY2FsIGFuZCBncm91cCByZWxhdGlvbnNoaXBzIGFtb25nIGxheWVycy4gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIFRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgUERGIDEuNS4KICoKICogQHBhcmFtIHJlc291cmNlICRwZGZkb2MKICogQHBhcmFtIHN0cmluZyAkdHlwZQogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfc2V0X2xheWVyX2RlcGVuZGVuY3koJHBkZmRvYywgc3RyaW5nICR0eXBlLCBzdHJpbmcgJG9wdGxpc3QpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3NldF9sYXllcl9kZXBlbmRlbmN5KCRwZGZkb2MsICR0eXBlLCAkb3B0bGlzdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgc29tZSBQREZsaWIgcGFyYW1ldGVyIHdpdGggc3RyaW5nIHR5cGUuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHAKICogQHBhcmFtIHN0cmluZyAka2V5CiAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfc2V0X3BhcmFtZXRlcigkcCwgc3RyaW5nICRrZXksIHN0cmluZyAkdmFsdWUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3NldF9wYXJhbWV0ZXIoJHAsICRrZXksICR2YWx1ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgdGhlIHBvc2l0aW9uIGZvciB0ZXh0IG91dHB1dCBvbiB0aGUgcGFnZS4gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcAogKiBAcGFyYW0gZmxvYXQgJHgKICogQHBhcmFtIGZsb2F0ICR5CiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfc2V0X3RleHRfcG9zKCRwLCBmbG9hdCAkeCwgZmxvYXQgJHkpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3NldF90ZXh0X3BvcygkcCwgJHgsICR5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyB0aGUgdmFsdWUgb2Ygc29tZSBQREZsaWIgcGFyYW1ldGVyIHdpdGggbnVtZXJpY2FsIHR5cGUuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHAKICogQHBhcmFtIHN0cmluZyAka2V5CiAqIEBwYXJhbSBmbG9hdCAkdmFsdWUKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9zZXRfdmFsdWUoJHAsIHN0cmluZyAka2V5LCBmbG9hdCAkdmFsdWUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3NldF92YWx1ZSgkcCwgJGtleSwgJHZhbHVlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyB0aGUgY3VycmVudCBjb2xvciBzcGFjZSBhbmQgY29sb3IuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHAKICogQHBhcmFtIHN0cmluZyAkZnN0eXBlCiAqIEBwYXJhbSBzdHJpbmcgJGNvbG9yc3BhY2UKICogQHBhcmFtIGZsb2F0ICRjMQogKiBAcGFyYW0gZmxvYXQgJGMyCiAqIEBwYXJhbSBmbG9hdCAkYzMKICogQHBhcmFtIGZsb2F0ICRjNAogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX3NldGNvbG9yKCRwLCBzdHJpbmcgJGZzdHlwZSwgc3RyaW5nICRjb2xvcnNwYWNlLCBmbG9hdCAkYzEsIGZsb2F0ICRjMiwgZmxvYXQgJGMzLCBmbG9hdCAkYzQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3NldGNvbG9yKCRwLCAkZnN0eXBlLCAkY29sb3JzcGFjZSwgJGMxLCAkYzIsICRjMywgJGM0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyB0aGUgY3VycmVudCBkYXNoIHBhdHRlcm4gdG8gYiBibGFjawogKiBhbmQgdyB3aGl0ZSB1bml0cy4gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmZG9jCiAqIEBwYXJhbSBmbG9hdCAkYgogKiBAcGFyYW0gZmxvYXQgJHcKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9zZXRkYXNoKCRwZGZkb2MsIGZsb2F0ICRiLCBmbG9hdCAkdyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfc2V0ZGFzaCgkcGRmZG9jLCAkYiwgJHcpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIGEgZGFzaCBwYXR0ZXJuIGRlZmluZWQgYnkgYW4gb3B0aW9uIGxpc3QuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfc2V0ZGFzaHBhdHRlcm4oJHBkZmRvYywgc3RyaW5nICRvcHRsaXN0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9zZXRkYXNocGF0dGVybigkcGRmZG9jLCAkb3B0bGlzdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgdGhlIGZsYXRuZXNzIHBhcmFtZXRlci4gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmZG9jCiAqIEBwYXJhbSBmbG9hdCAkZmxhdG5lc3MKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9zZXRmbGF0KCRwZGZkb2MsIGZsb2F0ICRmbGF0bmVzcyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfc2V0ZmxhdCgkcGRmZG9jLCAkZmxhdG5lc3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIHRoZSBjdXJyZW50IGZvbnQgaW4gdGhlIHNwZWNpZmllZCBmb250c2l6ZSwgdXNpbmcgYQogKiBmb250IGhhbmRsZSByZXR1cm5lZCBieSBQREZfbG9hZF9mb250LgogKiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwZGZkb2MKICogQHBhcmFtIGludCAkZm9udAogKiBAcGFyYW0gZmxvYXQgJGZvbnRzaXplCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfc2V0Zm9udCgkcGRmZG9jLCBpbnQgJGZvbnQsIGZsb2F0ICRmb250c2l6ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfc2V0Zm9udCgkcGRmZG9jLCAkZm9udCwgJGZvbnRzaXplKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyB0aGUgY3VycmVudCBmaWxsIGNvbG9yIHRvIGEgZ3JheSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEgaW5jbHVzaXZlLgogKiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIFBERmxpYiB2ZXJzaW9uIDQsIHVzZQogKiBQREZfc2V0Y29sb3IgaW5zdGVhZC4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBmbG9hdCAkZwogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX3NldGdyYXlfZmlsbCgkcCwgZmxvYXQgJGcpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3NldGdyYXlfZmlsbCgkcCwgJGcpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIHRoZSBjdXJyZW50IHN0cm9rZSBjb2xvciB0byBhIGdyYXkgdmFsdWUgYmV0d2VlbiAwIGFuZCAxIGluY2x1c2l2ZS4KICogUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBzaW5jZSBQREZsaWIgdmVyc2lvbiA0LCB1c2UKICogUERGX3NldGNvbG9yIGluc3RlYWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcAogKiBAcGFyYW0gZmxvYXQgJGcKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9zZXRncmF5X3N0cm9rZSgkcCwgZmxvYXQgJGcpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3NldGdyYXlfc3Ryb2tlKCRwLCAkZyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgdGhlIGN1cnJlbnQgZmlsbCBhbmQgc3Ryb2tlIGNvbG9yIHRvIGEgZ3JheSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEgaW5jbHVzaXZlLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIFBERmxpYiB2ZXJzaW9uIDQsIHVzZQogKiBQREZfc2V0Y29sb3IgaW5zdGVhZC4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBmbG9hdCAkZwogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX3NldGdyYXkoJHAsIGZsb2F0ICRnKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9zZXRncmF5KCRwLCAkZyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgdGhlIGxpbmVqb2luIHBhcmFtZXRlciB0byBzcGVjaWZ5IHRoZSBzaGFwZQogKiBhdCB0aGUgY29ybmVycyBvZiBwYXRocyB0aGF0IGFyZSBzdHJva2VkLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBpbnQgJHZhbHVlCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfc2V0bGluZWpvaW4oJHAsIGludCAkdmFsdWUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3NldGxpbmVqb2luKCRwLCAkdmFsdWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIHRoZSBjdXJyZW50IGxpbmUgd2lkdGguIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHAKICogQHBhcmFtIGZsb2F0ICR3aWR0aAogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX3NldGxpbmV3aWR0aCgkcCwgZmxvYXQgJHdpZHRoKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9zZXRsaW5ld2lkdGgoJHAsICR3aWR0aCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEV4cGxpY2l0bHkgc2V0cyB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBtYXRyaXguIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHAKICogQHBhcmFtIGZsb2F0ICRhCiAqIEBwYXJhbSBmbG9hdCAkYgogKiBAcGFyYW0gZmxvYXQgJGMKICogQHBhcmFtIGZsb2F0ICRkCiAqIEBwYXJhbSBmbG9hdCAkZQogKiBAcGFyYW0gZmxvYXQgJGYKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9zZXRtYXRyaXgoJHAsIGZsb2F0ICRhLCBmbG9hdCAkYiwgZmxvYXQgJGMsIGZsb2F0ICRkLCBmbG9hdCAkZSwgZmxvYXQgJGYpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3NldG1hdHJpeCgkcCwgJGEsICRiLCAkYywgJGQsICRlLCAkZik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgdGhlIG1pdGVyIGxpbWl0LlJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gZmxvYXQgJG1pdGVyCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfc2V0bWl0ZXJsaW1pdCgkcGRmZG9jLCBmbG9hdCAkbWl0ZXIpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3NldG1pdGVybGltaXQoJHBkZmRvYywgJG1pdGVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyB0aGUgY3VycmVudCBmaWxsIGNvbG9yIHRvIHRoZSBzdXBwbGllZCBSR0IgdmFsdWVzLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIFBERmxpYiB2ZXJzaW9uIDQsIHVzZQogKiBQREZfc2V0Y29sb3IgaW5zdGVhZC4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBmbG9hdCAkcmVkCiAqIEBwYXJhbSBmbG9hdCAkZ3JlZW4KICogQHBhcmFtIGZsb2F0ICRibHVlCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfc2V0cmdiY29sb3JfZmlsbCgkcCwgZmxvYXQgJHJlZCwgZmxvYXQgJGdyZWVuLCBmbG9hdCAkYmx1ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfc2V0cmdiY29sb3JfZmlsbCgkcCwgJHJlZCwgJGdyZWVuLCAkYmx1ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgdGhlIGN1cnJlbnQgc3Ryb2tlIGNvbG9yIHRvIHRoZSBzdXBwbGllZCBSR0IgdmFsdWVzLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIFBERmxpYiB2ZXJzaW9uIDQsIHVzZQogKiBQREZfc2V0Y29sb3IgaW5zdGVhZC4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBmbG9hdCAkcmVkCiAqIEBwYXJhbSBmbG9hdCAkZ3JlZW4KICogQHBhcmFtIGZsb2F0ICRibHVlCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfc2V0cmdiY29sb3Jfc3Ryb2tlKCRwLCBmbG9hdCAkcmVkLCBmbG9hdCAkZ3JlZW4sIGZsb2F0ICRibHVlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9zZXRyZ2Jjb2xvcl9zdHJva2UoJHAsICRyZWQsICRncmVlbiwgJGJsdWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIHRoZSBjdXJyZW50IGZpbGwgYW5kIHN0cm9rZSBjb2xvciB0byB0aGUgc3VwcGxpZWQgUkdCIHZhbHVlcy4KICogUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBzaW5jZSBQREZsaWIgdmVyc2lvbiA0LCB1c2UKICogUERGX3NldGNvbG9yIGluc3RlYWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcAogKiBAcGFyYW0gZmxvYXQgJHJlZAogKiBAcGFyYW0gZmxvYXQgJGdyZWVuCiAqIEBwYXJhbSBmbG9hdCAkYmx1ZQogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX3NldHJnYmNvbG9yKCRwLCBmbG9hdCAkcmVkLCBmbG9hdCAkZ3JlZW4sIGZsb2F0ICRibHVlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9zZXRyZ2Jjb2xvcigkcCwgJHJlZCwgJGdyZWVuLCAkYmx1ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFByaW50cyB0ZXh0IGluIHRoZSBjdXJyZW50IGZvbnQuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHAKICogQHBhcmFtIHN0cmluZyAkdGV4dAogKiBAcGFyYW0gZmxvYXQgJHgKICogQHBhcmFtIGZsb2F0ICR5CiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfc2hvd194eSgkcCwgc3RyaW5nICR0ZXh0LCBmbG9hdCAkeCwgZmxvYXQgJHkpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3Nob3dfeHkoJHAsICR0ZXh0LCAkeCwgJHkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBQcmludHMgdGV4dCBpbiB0aGUgY3VycmVudCBmb250IGFuZCBzaXplIGF0CiAqIHRoZSBjdXJyZW50IHBvc2l0aW9uLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwZGZkb2MKICogQHBhcmFtIHN0cmluZyAkdGV4dAogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX3Nob3coJHBkZmRvYywgc3RyaW5nICR0ZXh0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9zaG93KCRwZGZkb2MsICR0ZXh0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2tld3MgdGhlIGNvb3JkaW5hdGUgc3lzdGVtIGluIHggYW5kIHkgZGlyZWN0aW9uIGJ5IGFscGhhCiAqIGFuZCBiZXRhIGRlZ3JlZXMsIHJlc3BlY3RpdmVseS4gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcAogKiBAcGFyYW0gZmxvYXQgJGFscGhhCiAqIEBwYXJhbSBmbG9hdCAkYmV0YQogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX3NrZXcoJHAsIGZsb2F0ICRhbHBoYSwgZmxvYXQgJGJldGEpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3NrZXcoJHAsICRhbHBoYSwgJGJldGEpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTdHJva2VzIHRoZSBwYXRoIHdpdGggdGhlIGN1cnJlbnQgY29sb3IgYW5kIGxpbmUgd2lkdGgsIGFuZCBjbGVhciBpdC4KICogUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcAogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX3N0cm9rZSgkcCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfc3Ryb2tlKCRwKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/pgsql.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xQZ3NxbEV4Y2VwdGlvbjsKCi8qKgogKiBwZ19jYW5jZWxfcXVlcnkgY2FuY2VscyBhbiBhc3luY2hyb25vdXMgcXVlcnkgc2VudCB3aXRoCiAqIHBnX3NlbmRfcXVlcnksIHBnX3NlbmRfcXVlcnlfcGFyYW1zCiAqIG9yIHBnX3NlbmRfZXhlY3V0ZS4gWW91IGNhbm5vdCBjYW5jZWwgYSBxdWVyeSBleGVjdXRlZCB1c2luZwogKiBwZ19xdWVyeS4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfY2FuY2VsX3F1ZXJ5KCRjb25uZWN0aW9uKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBnX2NhbmNlbF9xdWVyeSgkY29ubmVjdGlvbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUG9zdGdyZVNRTCBzdXBwb3J0cyBhdXRvbWF0aWMgY2hhcmFjdGVyIHNldCBjb252ZXJzaW9uIGJldHdlZW4KICogc2VydmVyIGFuZCBjbGllbnQgZm9yIGNlcnRhaW4gY2hhcmFjdGVyIHNldHMuCiAqIHBnX2NsaWVudF9lbmNvZGluZyByZXR1cm5zIHRoZSBjbGllbnQKICogZW5jb2RpbmcgYXMgYSBzdHJpbmcuIFRoZSByZXR1cm5lZCBzdHJpbmcgd2lsbCBiZSBvbmUgb2YgdGhlCiAqIHN0YW5kYXJkIFBvc3RncmVTUUwgZW5jb2RpbmcgaWRlbnRpZmllcnMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuICBXaGVuCiAqIGNvbm5lY3Rpb24gaXMgbm90IHByZXNlbnQsIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24KICogaXMgdXNlZC4gVGhlIGRlZmF1bHQgY29ubmVjdGlvbiBpcyB0aGUgbGFzdCBjb25uZWN0aW9uIG1hZGUgYnkKICogcGdfY29ubmVjdCBvciBwZ19wY29ubmVjdC4KICogQHJldHVybiBzdHJpbmcgVGhlIGNsaWVudCBlbmNvZGluZy4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfY2xpZW50X2VuY29kaW5nKCRjb25uZWN0aW9uID0gbnVsbCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGNvbm5lY3Rpb24gIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX2NsaWVudF9lbmNvZGluZygkY29ubmVjdGlvbik7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBccGdfY2xpZW50X2VuY29kaW5nKCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBwZ19jbG9zZSBjbG9zZXMgdGhlIG5vbi1wZXJzaXN0ZW50CiAqIGNvbm5lY3Rpb24gdG8gYSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4KICogY29ubmVjdGlvbiByZXNvdXJjZS4KICoKICogSWYgdGhlcmUgaXMgb3BlbiBsYXJnZSBvYmplY3QgcmVzb3VyY2Ugb24gdGhlIGNvbm5lY3Rpb24sIGRvIG5vdAogKiBjbG9zZSB0aGUgY29ubmVjdGlvbiBiZWZvcmUgY2xvc2luZyBhbGwgbGFyZ2Ugb2JqZWN0IHJlc291cmNlcy4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gIFdoZW4KICogY29ubmVjdGlvbiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiBwZ19jb25uZWN0IG9yIHBnX3Bjb25uZWN0LgogKiBAdGhyb3dzIFBnc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwZ19jbG9zZSgkY29ubmVjdGlvbiA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkY29ubmVjdGlvbiAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfY2xvc2UoJGNvbm5lY3Rpb24pOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX2Nsb3NlKCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogcGdfY29ubmVjdCBvcGVucyBhIGNvbm5lY3Rpb24gdG8gYQogKiBQb3N0Z3JlU1FMIGRhdGFiYXNlIHNwZWNpZmllZCBieSB0aGUKICogY29ubmVjdGlvbl9zdHJpbmcuCiAqCiAqIElmIGEgc2Vjb25kIGNhbGwgaXMgbWFkZSB0byBwZ19jb25uZWN0IHdpdGgKICogdGhlIHNhbWUgY29ubmVjdGlvbl9zdHJpbmcgYXMgYW4gZXhpc3RpbmcgY29ubmVjdGlvbiwgdGhlCiAqIGV4aXN0aW5nIGNvbm5lY3Rpb24gd2lsbCBiZSByZXR1cm5lZCB1bmxlc3MgeW91IHBhc3MKICogUEdTUUxfQ09OTkVDVF9GT1JDRV9ORVcgYXMKICogY29ubmVjdF90eXBlLgogKgogKiBUaGUgb2xkIHN5bnRheCB3aXRoIG11bHRpcGxlIHBhcmFtZXRlcnMKICogJGNvbm4gPSBwZ19jb25uZWN0KCJob3N0IiwgInBvcnQiLCAib3B0aW9ucyIsICJ0dHkiLCAiZGJuYW1lIikKICogaGFzIGJlZW4gZGVwcmVjYXRlZC4KICoKICogQHBhcmFtIHN0cmluZyAkY29ubmVjdGlvbl9zdHJpbmcgVGhlIGNvbm5lY3Rpb25fc3RyaW5nIGNhbiBiZSBlbXB0eSB0byB1c2UgYWxsIGRlZmF1bHQgcGFyYW1ldGVycywgb3IgaXQKICogY2FuIGNvbnRhaW4gb25lIG9yIG1vcmUgcGFyYW1ldGVyIHNldHRpbmdzIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlLgogKiBFYWNoIHBhcmFtZXRlciBzZXR0aW5nIGlzIGluIHRoZSBmb3JtIGtleXdvcmQgPSB2YWx1ZS4gU3BhY2VzIGFyb3VuZAogKiB0aGUgZXF1YWwgc2lnbiBhcmUgb3B0aW9uYWwuIFRvIHdyaXRlIGFuIGVtcHR5IHZhbHVlIG9yIGEgdmFsdWUKICogY29udGFpbmluZyBzcGFjZXMsIHN1cnJvdW5kIGl0IHdpdGggc2luZ2xlIHF1b3RlcywgZS5nLiwga2V5d29yZCA9CiAqICdhIHZhbHVlJy4gU2luZ2xlIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMgd2l0aGluIHRoZSB2YWx1ZSBtdXN0IGJlCiAqIGVzY2FwZWQgd2l0aCBhIGJhY2tzbGFzaCwgaS5lLiwgXCcgYW5kIFxcLgogKgogKiBUaGUgY3VycmVudGx5IHJlY29nbml6ZWQgcGFyYW1ldGVyIGtleXdvcmRzIGFyZToKICogaG9zdCwgaG9zdGFkZHIsIHBvcnQsCiAqIGRibmFtZSAoZGVmYXVsdHMgdG8gdmFsdWUgb2YgdXNlciksCiAqIHVzZXIsCiAqIHBhc3N3b3JkLCBjb25uZWN0X3RpbWVvdXQsCiAqIG9wdGlvbnMsIHR0eSAoaWdub3JlZCksIHNzbG1vZGUsCiAqIHJlcXVpcmVzc2wgKGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2Ygc3NsbW9kZSksIGFuZAogKiBzZXJ2aWNlLiAgV2hpY2ggb2YgdGhlc2UgYXJndW1lbnRzIGV4aXN0IGRlcGVuZHMKICogb24geW91ciBQb3N0Z3JlU1FMIHZlcnNpb24uCiAqCiAqIFRoZSBvcHRpb25zIHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBzZXQgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMKICogdG8gYmUgaW52b2tlZCBieSB0aGUgc2VydmVyLgogKiBAcGFyYW0gaW50ICRjb25uZWN0X3R5cGUgSWYgUEdTUUxfQ09OTkVDVF9GT1JDRV9ORVcgaXMgcGFzc2VkLCB0aGVuIGEgbmV3IGNvbm5lY3Rpb24KICogaXMgY3JlYXRlZCwgZXZlbiBpZiB0aGUgY29ubmVjdGlvbl9zdHJpbmcgaXMgaWRlbnRpY2FsIHRvCiAqIGFuIGV4aXN0aW5nIGNvbm5lY3Rpb24uCiAqCiAqIElmIFBHU1FMX0NPTk5FQ1RfQVNZTkMgaXMgZ2l2ZW4sIHRoZW4gdGhlCiAqIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgYXN5bmNocm9ub3VzbHkuIFRoZSBzdGF0ZSBvZiB0aGUgY29ubmVjdGlvbgogKiBjYW4gdGhlbiBiZSBjaGVja2VkIHZpYSBwZ19jb25uZWN0X3BvbGwgb3IKICogcGdfY29ubmVjdGlvbl9zdGF0dXMuCiAqIEByZXR1cm4gcmVzb3VyY2UgUG9zdGdyZVNRTCBjb25uZWN0aW9uIHJlc291cmNlIG9uIHN1Y2Nlc3MsIEZBTFNFIG9uIGZhaWx1cmUuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX2Nvbm5lY3Qoc3RyaW5nICRjb25uZWN0aW9uX3N0cmluZywgaW50ICRjb25uZWN0X3R5cGUgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGNvbm5lY3RfdHlwZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfY29ubmVjdCgkY29ubmVjdGlvbl9zdHJpbmcsICRjb25uZWN0X3R5cGUpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX2Nvbm5lY3QoJGNvbm5lY3Rpb25fc3RyaW5nKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHBnX2Nvbm5lY3Rpb25fcmVzZXQgcmVzZXRzIHRoZSBjb25uZWN0aW9uLgogKiBJdCBpcyB1c2VmdWwgZm9yIGVycm9yIHJlY292ZXJ5LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLgogKiBAdGhyb3dzIFBnc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwZ19jb25uZWN0aW9uX3Jlc2V0KCRjb25uZWN0aW9uKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBnX2Nvbm5lY3Rpb25fcmVzZXQoJGNvbm5lY3Rpb24pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIHBnX2NvbnZlcnQgY2hlY2tzIGFuZCBjb252ZXJ0cyB0aGUgdmFsdWVzIGluCiAqIGFzc29jX2FycmF5IGludG8gc3VpdGFibGUgdmFsdWVzIGZvciB1c2UgaW4gYW4gU1FMCiAqIHN0YXRlbWVudC4gUHJlY29uZGl0aW9uIGZvciBwZ19jb252ZXJ0IGlzIHRoZQogKiBleGlzdGVuY2Ugb2YgYSB0YWJsZSB0YWJsZV9uYW1lIHdoaWNoIGhhcyBhdCBsZWFzdAogKiBhcyBtYW55IGNvbHVtbnMgYXMgYXNzb2NfYXJyYXkgaGFzIGVsZW1lbnRzLiBUaGUKICogZmllbGRuYW1lcyBpbiB0YWJsZV9uYW1lIG11c3QgbWF0Y2ggdGhlIGluZGljZXMgaW4KICogYXNzb2NfYXJyYXkgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGRhdGF0eXBlcyBtdXN0IGJlCiAqIGNvbXBhdGlibGUuIFJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgY29udmVydGVkIHZhbHVlcyBvbiBzdWNjZXNzLCBGQUxTRQogKiBvdGhlcndpc2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuCiAqIEBwYXJhbSBzdHJpbmcgJHRhYmxlX25hbWUgTmFtZSBvZiB0aGUgdGFibGUgYWdhaW5zdCB3aGljaCB0byBjb252ZXJ0IHR5cGVzLgogKiBAcGFyYW0gYXJyYXkgJGFzc29jX2FycmF5IERhdGEgdG8gYmUgY29udmVydGVkLgogKiBAcGFyYW0gaW50ICRvcHRpb25zIEFueSBudW1iZXIgb2YgUEdTUUxfQ09OVl9JR05PUkVfREVGQVVMVCwKICogUEdTUUxfQ09OVl9GT1JDRV9OVUxMIG9yCiAqIFBHU1FMX0NPTlZfSUdOT1JFX05PVF9OVUxMLCBjb21iaW5lZC4KICogQHJldHVybiBhcnJheSBBbiBhcnJheSBvZiBjb252ZXJ0ZWQgdmFsdWVzLgogKiBAdGhyb3dzIFBnc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwZ19jb252ZXJ0KCRjb25uZWN0aW9uLCBzdHJpbmcgJHRhYmxlX25hbWUsIGFycmF5ICRhc3NvY19hcnJheSwgaW50ICRvcHRpb25zID0gMCk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccGdfY29udmVydCgkY29ubmVjdGlvbiwgJHRhYmxlX25hbWUsICRhc3NvY19hcnJheSwgJG9wdGlvbnMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogcGdfY29weV9mcm9tIGluc2VydHMgcmVjb3JkcyBpbnRvIGEgdGFibGUgZnJvbQogKiByb3dzLiBJdCBpc3N1ZXMgYSBDT1BZIEZST00gU1FMIGNvbW1hbmQKICogaW50ZXJuYWxseSB0byBpbnNlcnQgcmVjb3Jkcy4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4KICogQHBhcmFtIHN0cmluZyAkdGFibGVfbmFtZSBOYW1lIG9mIHRoZSB0YWJsZSBpbnRvIHdoaWNoIHRvIGNvcHkgdGhlIHJvd3MuCiAqIEBwYXJhbSBhcnJheSAkcm93cyBBbiBhcnJheSBvZiBkYXRhIHRvIGJlIGNvcGllZCBpbnRvIHRhYmxlX25hbWUuCiAqIEVhY2ggdmFsdWUgaW4gcm93cyBiZWNvbWVzIGEgcm93IGluIHRhYmxlX25hbWUuCiAqIEVhY2ggdmFsdWUgaW4gcm93cyBzaG91bGQgYmUgYSBkZWxpbWl0ZWQgc3RyaW5nIG9mIHRoZSB2YWx1ZXMKICogdG8gaW5zZXJ0IGludG8gZWFjaCBmaWVsZC4gIFZhbHVlcyBzaG91bGQgYmUgbGluZWZlZWQgdGVybWluYXRlZC4KICogQHBhcmFtIHN0cmluZyAkZGVsaW1pdGVyIFRoZSB0b2tlbiB0aGF0IHNlcGFyYXRlcyB2YWx1ZXMgZm9yIGVhY2ggZmllbGQgaW4gZWFjaCBlbGVtZW50IG9mCiAqIHJvd3MuICBEZWZhdWx0IGlzIFRBQi4KICogQHBhcmFtIHN0cmluZyAkbnVsbF9hcyBIb3cgU1FMIE5VTEwgdmFsdWVzIGFyZSByZXByZXNlbnRlZCBpbiB0aGUKICogcm93cy4gIERlZmF1bHQgaXMgXE4gKCJcXE4iKS4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfY29weV9mcm9tKCRjb25uZWN0aW9uLCBzdHJpbmcgJHRhYmxlX25hbWUsIGFycmF5ICRyb3dzLCBzdHJpbmcgJGRlbGltaXRlciA9IG51bGwsIHN0cmluZyAkbnVsbF9hcyA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkbnVsbF9hcyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfY29weV9mcm9tKCRjb25uZWN0aW9uLCAkdGFibGVfbmFtZSwgJHJvd3MsICRkZWxpbWl0ZXIsICRudWxsX2FzKTsKICAgIH0gZWxzZWlmICgkZGVsaW1pdGVyICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19jb3B5X2Zyb20oJGNvbm5lY3Rpb24sICR0YWJsZV9uYW1lLCAkcm93cywgJGRlbGltaXRlcik7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBccGdfY29weV9mcm9tKCRjb25uZWN0aW9uLCAkdGFibGVfbmFtZSwgJHJvd3MpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIHBnX2NvcHlfdG8gY29waWVzIGEgdGFibGUgdG8gYW4gYXJyYXkuIEl0CiAqIGlzc3VlcyBDT1BZIFRPIFNRTCBjb21tYW5kIGludGVybmFsbHkgdG8KICogcmV0cmlldmUgcmVjb3Jkcy4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4KICogQHBhcmFtIHN0cmluZyAkdGFibGVfbmFtZSBOYW1lIG9mIHRoZSB0YWJsZSBmcm9tIHdoaWNoIHRvIGNvcHkgdGhlIGRhdGEgaW50byByb3dzLgogKiBAcGFyYW0gc3RyaW5nICRkZWxpbWl0ZXIgVGhlIHRva2VuIHRoYXQgc2VwYXJhdGVzIHZhbHVlcyBmb3IgZWFjaCBmaWVsZCBpbiBlYWNoIGVsZW1lbnQgb2YKICogcm93cy4gIERlZmF1bHQgaXMgVEFCLgogKiBAcGFyYW0gc3RyaW5nICRudWxsX2FzIEhvdyBTUUwgTlVMTCB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIGluIHRoZQogKiByb3dzLiAgRGVmYXVsdCBpcyBcTiAoIlxcTiIpLgogKiBAcmV0dXJuIGFycmF5IEFuIGFycmF5IHdpdGggb25lIGVsZW1lbnQgZm9yIGVhY2ggbGluZSBvZiBDT1BZIGRhdGEuCiAqIEl0IHJldHVybnMgRkFMU0Ugb24gZmFpbHVyZS4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfY29weV90bygkY29ubmVjdGlvbiwgc3RyaW5nICR0YWJsZV9uYW1lLCBzdHJpbmcgJGRlbGltaXRlciA9IG51bGwsIHN0cmluZyAkbnVsbF9hcyA9IG51bGwpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJG51bGxfYXMgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX2NvcHlfdG8oJGNvbm5lY3Rpb24sICR0YWJsZV9uYW1lLCAkZGVsaW1pdGVyLCAkbnVsbF9hcyk7CiAgICB9IGVsc2VpZiAoJGRlbGltaXRlciAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfY29weV90bygkY29ubmVjdGlvbiwgJHRhYmxlX25hbWUsICRkZWxpbWl0ZXIpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX2NvcHlfdG8oJGNvbm5lY3Rpb24sICR0YWJsZV9uYW1lKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHBnX2RibmFtZSByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZQogKiB0aGF0IHRoZSBnaXZlbiBQb3N0Z3JlU1FMIGNvbm5lY3Rpb24KICogcmVzb3VyY2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuICBXaGVuCiAqIGNvbm5lY3Rpb24gaXMgbm90IHByZXNlbnQsIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24KICogaXMgdXNlZC4gVGhlIGRlZmF1bHQgY29ubmVjdGlvbiBpcyB0aGUgbGFzdCBjb25uZWN0aW9uIG1hZGUgYnkKICogcGdfY29ubmVjdCBvciBwZ19wY29ubmVjdC4KICogQHJldHVybiBzdHJpbmcgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UgdGhlCiAqIGNvbm5lY3Rpb24gaXMgdG8uCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX2RibmFtZSgkY29ubmVjdGlvbiA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb25uZWN0aW9uICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19kYm5hbWUoJGNvbm5lY3Rpb24pOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX2RibmFtZSgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogcGdfZGVsZXRlIGRlbGV0ZXMgcmVjb3JkcyBmcm9tIGEgdGFibGUKICogc3BlY2lmaWVkIGJ5IHRoZSBrZXlzIGFuZCB2YWx1ZXMKICogaW4gYXNzb2NfYXJyYXkuIElmIG9wdGlvbnMKICogaXMgc3BlY2lmaWVkLCBwZ19jb252ZXJ0IGlzIGFwcGxpZWQKICogdG8gYXNzb2NfYXJyYXkgd2l0aCB0aGUgc3BlY2lmaWVkIG9wdGlvbnMuCiAqCiAqIElmIG9wdGlvbnMgaXMgc3BlY2lmaWVkLAogKiBwZ19jb252ZXJ0IGlzIGFwcGxpZWQgdG8KICogYXNzb2NfYXJyYXkgd2l0aCB0aGUgc3BlY2lmaWVkIGZsYWdzLgogKgogKiBCeSBkZWZhdWx0IHBnX2RlbGV0ZSBwYXNzZXMgcmF3IHZhbHVlcy4gVmFsdWVzCiAqIG11c3QgYmUgZXNjYXBlZCBvciBQR1NRTF9ETUxfRVNDQVBFIG9wdGlvbiBtdXN0IGJlCiAqIHNwZWNpZmllZC4gUEdTUUxfRE1MX0VTQ0FQRSBxdW90ZXMgYW5kIGVzY2FwZXMKICogcGFyYW1ldGVycy9pZGVudGlmaWVycy4gVGhlcmVmb3JlLCB0YWJsZS9jb2x1bW4gbmFtZXMgYmVjYW1lIGNhc2UKICogc2Vuc2l0aXZlLgogKgogKiBOb3RlIHRoYXQgbmVpdGhlciBlc2NhcGUgbm9yIHByZXBhcmVkIHF1ZXJ5IGNhbiBwcm90ZWN0IExJS0UgcXVlcnksCiAqIEpTT04sIEFycmF5LCBSZWdleCwgZXRjLiBUaGVzZSBwYXJhbWV0ZXJzIHNob3VsZCBiZSBoYW5kbGVkCiAqIGFjY29yZGluZyB0byB0aGVpciBjb250ZXh0cy4gaS5lLiBFc2NhcGUvdmFsaWRhdGUgdmFsdWVzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLgogKiBAcGFyYW0gc3RyaW5nICR0YWJsZV9uYW1lIE5hbWUgb2YgdGhlIHRhYmxlIGZyb20gd2hpY2ggdG8gZGVsZXRlIHJvd3MuCiAqIEBwYXJhbSBhcnJheSAkYXNzb2NfYXJyYXkgQW4gYXJyYXkgd2hvc2Uga2V5cyBhcmUgZmllbGQgbmFtZXMgaW4gdGhlIHRhYmxlIHRhYmxlX25hbWUsCiAqIGFuZCB3aG9zZSB2YWx1ZXMgYXJlIHRoZSB2YWx1ZXMgb2YgdGhvc2UgZmllbGRzIHRoYXQgYXJlIHRvIGJlIGRlbGV0ZWQuCiAqIEBwYXJhbSBpbnQgJG9wdGlvbnMgQW55IG51bWJlciBvZiBQR1NRTF9DT05WX0ZPUkNFX05VTEwsCiAqIFBHU1FMX0RNTF9OT19DT05WLAogKiBQR1NRTF9ETUxfRVNDQVBFLAogKiBQR1NRTF9ETUxfRVhFQywKICogUEdTUUxfRE1MX0FTWU5DIG9yCiAqIFBHU1FMX0RNTF9TVFJJTkcgY29tYmluZWQuIElmIFBHU1FMX0RNTF9TVFJJTkcgaXMgcGFydCBvZiB0aGUKICogb3B0aW9ucyB0aGVuIHF1ZXJ5IHN0cmluZyBpcyByZXR1cm5lZC4gV2hlbiBQR1NRTF9ETUxfTk9fQ09OVgogKiBvciBQR1NRTF9ETUxfRVNDQVBFIGlzIHNldCwgaXQgZG9lcyBub3QgY2FsbCBwZ19jb252ZXJ0IGludGVybmFsbHkuCiAqIEByZXR1cm4gbWl4ZWQgUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuICBSZXR1cm5zIHN0cmluZyBpZiBQR1NRTF9ETUxfU1RSSU5HIGlzIHBhc3NlZAogKiB2aWEgb3B0aW9ucy4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfZGVsZXRlKCRjb25uZWN0aW9uLCBzdHJpbmcgJHRhYmxlX25hbWUsIGFycmF5ICRhc3NvY19hcnJheSwgaW50ICRvcHRpb25zID0gUEdTUUxfRE1MX0VYRUMpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccGdfZGVsZXRlKCRjb25uZWN0aW9uLCAkdGFibGVfbmFtZSwgJGFzc29jX2FycmF5LCAkb3B0aW9ucyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBwZ19lbmRfY29weSBzeW5jcyB0aGUgUG9zdGdyZVNRTCBmcm9udGVuZAogKiAodXN1YWxseSBhIHdlYiBzZXJ2ZXIgcHJvY2Vzcykgd2l0aCB0aGUgUG9zdGdyZVNRTCBzZXJ2ZXIgYWZ0ZXIKICogZG9pbmcgYSBjb3B5IG9wZXJhdGlvbiBwZXJmb3JtZWQgYnkKICogcGdfcHV0X2xpbmUuIHBnX2VuZF9jb3B5CiAqIG11c3QgYmUgaXNzdWVkLCBvdGhlcndpc2UgdGhlIFBvc3RncmVTUUwgc2VydmVyIG1heSBnZXQgb3V0IG9mCiAqIHN5bmMgd2l0aCB0aGUgZnJvbnRlbmQgYW5kIHdpbGwgcmVwb3J0IGFuIGVycm9yLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLiAgV2hlbgogKiBjb25uZWN0aW9uIGlzIG5vdCBwcmVzZW50LCB0aGUgZGVmYXVsdCBjb25uZWN0aW9uCiAqIGlzIHVzZWQuIFRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gaXMgdGhlIGxhc3QgY29ubmVjdGlvbiBtYWRlIGJ5CiAqIHBnX2Nvbm5lY3Qgb3IgcGdfcGNvbm5lY3QuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX2VuZF9jb3B5KCRjb25uZWN0aW9uID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb25uZWN0aW9uICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19lbmRfY29weSgkY29ubmVjdGlvbik7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBccGdfZW5kX2NvcHkoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZW5kcyBhIHJlcXVlc3QgdG8gZXhlY3V0ZSBhIHByZXBhcmVkIHN0YXRlbWVudCB3aXRoIGdpdmVuIHBhcmFtZXRlcnMsIGFuZAogKiB3YWl0cyBmb3IgdGhlIHJlc3VsdC4KICoKICogcGdfZXhlY3V0ZSBpcyBsaWtlIHBnX3F1ZXJ5X3BhcmFtcywKICogYnV0IHRoZSBjb21tYW5kIHRvIGJlIGV4ZWN1dGVkIGlzCiAqIHNwZWNpZmllZCBieSBuYW1pbmcgYSBwcmV2aW91c2x5LXByZXBhcmVkIHN0YXRlbWVudCwgaW5zdGVhZCBvZiBnaXZpbmcgYQogKiBxdWVyeSBzdHJpbmcuIFRoaXMgZmVhdHVyZSBhbGxvd3MgY29tbWFuZHMgdGhhdCB3aWxsIGJlIHVzZWQgcmVwZWF0ZWRseSB0bwogKiBiZSBwYXJzZWQgYW5kIHBsYW5uZWQganVzdCBvbmNlLCByYXRoZXIgdGhhbiBlYWNoIHRpbWUgdGhleSBhcmUgZXhlY3V0ZWQuCiAqIFRoZSBzdGF0ZW1lbnQgbXVzdCBoYXZlIGJlZW4gcHJlcGFyZWQgcHJldmlvdXNseSBpbiB0aGUgY3VycmVudCBzZXNzaW9uLgogKiBwZ19leGVjdXRlIGlzIHN1cHBvcnRlZCBvbmx5IGFnYWluc3QgUG9zdGdyZVNRTCA3LjQgb3IKICogaGlnaGVyIGNvbm5lY3Rpb25zOyBpdCB3aWxsIGZhaWwgd2hlbiB1c2luZyBlYXJsaWVyIHZlcnNpb25zLgogKgogKiBUaGUgcGFyYW1ldGVycyBhcmUgaWRlbnRpY2FsIHRvIHBnX3F1ZXJ5X3BhcmFtcywgZXhjZXB0IHRoYXQgdGhlIG5hbWUgb2YgYQogKiBwcmVwYXJlZCBzdGF0ZW1lbnQgaXMgZ2l2ZW4gaW5zdGVhZCBvZiBhIHF1ZXJ5IHN0cmluZy4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gIFdoZW4KICogY29ubmVjdGlvbiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiBwZ19jb25uZWN0IG9yIHBnX3Bjb25uZWN0LgogKiBAcGFyYW0gc3RyaW5nICRzdG10bmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJlcGFyZWQgc3RhdGVtZW50IHRvIGV4ZWN1dGUuICBpZgogKiAiIiBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIHVubmFtZWQgc3RhdGVtZW50IGlzIGV4ZWN1dGVkLiAgVGhlIG5hbWUgbXVzdCBoYXZlCiAqIGJlZW4gcHJldmlvdXNseSBwcmVwYXJlZCB1c2luZyBwZ19wcmVwYXJlLAogKiBwZ19zZW5kX3ByZXBhcmUgb3IgYSBQUkVQQVJFIFNRTAogKiBjb21tYW5kLgogKiBAcGFyYW0gYXJyYXkgJHBhcmFtcyBBbiBhcnJheSBvZiBwYXJhbWV0ZXIgdmFsdWVzIHRvIHN1YnN0aXR1dGUgZm9yIHRoZSAkMSwgJDIsIGV0Yy4gcGxhY2Vob2xkZXJzCiAqIGluIHRoZSBvcmlnaW5hbCBwcmVwYXJlZCBxdWVyeSBzdHJpbmcuICBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheQogKiBtdXN0IG1hdGNoIHRoZSBudW1iZXIgb2YgcGxhY2Vob2xkZXJzLgogKgogKiBFbGVtZW50cyBhcmUgY29udmVydGVkIHRvIHN0cmluZ3MgYnkgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgogKiBAcmV0dXJuIHJlc291cmNlIEEgcXVlcnkgcmVzdWx0IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX2V4ZWN1dGUoJGNvbm5lY3Rpb24gPSBudWxsLCBzdHJpbmcgJHN0bXRuYW1lID0gbnVsbCwgYXJyYXkgJHBhcmFtcyA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkcGFyYW1zICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19leGVjdXRlKCRjb25uZWN0aW9uLCAkc3RtdG5hbWUsICRwYXJhbXMpOwogICAgfSBlbHNlaWYgKCRzdG10bmFtZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfZXhlY3V0ZSgkY29ubmVjdGlvbiwgJHN0bXRuYW1lKTsKICAgIH0gZWxzZWlmICgkY29ubmVjdGlvbiAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfZXhlY3V0ZSgkY29ubmVjdGlvbik7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBccGdfZXhlY3V0ZSgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogcGdfZmllbGRfbmFtZSByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBmaWVsZAogKiBvY2N1cHlpbmcgdGhlIGdpdmVuIGZpZWxkX251bWJlciBpbiB0aGUKICogZ2l2ZW4gUG9zdGdyZVNRTCByZXN1bHQgcmVzb3VyY2UuICBGaWVsZAogKiBudW1iZXJpbmcgc3RhcnRzIGZyb20gMC4KICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgUG9zdGdyZVNRTCBxdWVyeSByZXN1bHQgcmVzb3VyY2UsIHJldHVybmVkIGJ5IHBnX3F1ZXJ5LAogKiBwZ19xdWVyeV9wYXJhbXMgb3IgcGdfZXhlY3V0ZQogKiAoYW1vbmcgb3RoZXJzKS4KICogQHBhcmFtIGludCAkZmllbGRfbnVtYmVyIEZpZWxkIG51bWJlciwgc3RhcnRpbmcgZnJvbSAwLgogKiBAcmV0dXJuIHN0cmluZyBUaGUgZmllbGQgbmFtZS4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfZmllbGRfbmFtZSgkcmVzdWx0LCBpbnQgJGZpZWxkX251bWJlcik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBnX2ZpZWxkX25hbWUoJHJlc3VsdCwgJGZpZWxkX251bWJlcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBwZ19maWVsZF90YWJsZSByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSB0YWJsZSB0aGF0IGZpZWxkCiAqIGJlbG9uZ3MgdG8sIG9yIHRoZSB0YWJsZSdzIG9pZCBpZiBvaWRfb25seSBpcyBUUlVFLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBQb3N0Z3JlU1FMIHF1ZXJ5IHJlc3VsdCByZXNvdXJjZSwgcmV0dXJuZWQgYnkgcGdfcXVlcnksCiAqIHBnX3F1ZXJ5X3BhcmFtcyBvciBwZ19leGVjdXRlCiAqIChhbW9uZyBvdGhlcnMpLgogKiBAcGFyYW0gaW50ICRmaWVsZF9udW1iZXIgRmllbGQgbnVtYmVyLCBzdGFydGluZyBmcm9tIDAuCiAqIEBwYXJhbSBib29sICRvaWRfb25seSBCeSBkZWZhdWx0IHRoZSB0YWJsZXMgbmFtZSB0aGF0IGZpZWxkIGJlbG9uZ3MgdG8gaXMgcmV0dXJuZWQgYnV0CiAqIGlmIG9pZF9vbmx5IGlzIHNldCB0byBUUlVFLCB0aGVuIHRoZQogKiBvaWQgd2lsbCBpbnN0ZWFkIGJlIHJldHVybmVkLgogKiBAcmV0dXJuIG1peGVkIE9uIHN1Y2Nlc3MgZWl0aGVyIHRoZSBmaWVsZHMgdGFibGUgbmFtZSBvciBvaWQuIE9yLCBGQUxTRSBvbiBmYWlsdXJlLgogKiBAdGhyb3dzIFBnc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwZ19maWVsZF90YWJsZSgkcmVzdWx0LCBpbnQgJGZpZWxkX251bWJlciwgYm9vbCAkb2lkX29ubHkgPSBmYWxzZSkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwZ19maWVsZF90YWJsZSgkcmVzdWx0LCAkZmllbGRfbnVtYmVyLCAkb2lkX29ubHkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogcGdfZmllbGRfdHlwZSByZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlCiAqIGJhc2UgdHlwZSBuYW1lIG9mIHRoZSBnaXZlbiBmaWVsZF9udW1iZXIgaW4gdGhlCiAqIGdpdmVuIFBvc3RncmVTUUwgcmVzdWx0IHJlc291cmNlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBQb3N0Z3JlU1FMIHF1ZXJ5IHJlc3VsdCByZXNvdXJjZSwgcmV0dXJuZWQgYnkgcGdfcXVlcnksCiAqIHBnX3F1ZXJ5X3BhcmFtcyBvciBwZ19leGVjdXRlCiAqIChhbW9uZyBvdGhlcnMpLgogKiBAcGFyYW0gaW50ICRmaWVsZF9udW1iZXIgRmllbGQgbnVtYmVyLCBzdGFydGluZyBmcm9tIDAuCiAqIEByZXR1cm4gc3RyaW5nIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGJhc2UgbmFtZSBvZiB0aGUgZmllbGQncyB0eXBlLgogKiBAdGhyb3dzIFBnc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwZ19maWVsZF90eXBlKCRyZXN1bHQsIGludCAkZmllbGRfbnVtYmVyKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccGdfZmllbGRfdHlwZSgkcmVzdWx0LCAkZmllbGRfbnVtYmVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHBnX2ZsdXNoIGZsdXNoZXMgYW55IG91dGJvdW5kIHF1ZXJ5IGRhdGEgd2FpdGluZyB0byBiZQogKiBzZW50IG9uIHRoZSBjb25uZWN0aW9uLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLgogKiBAcmV0dXJuIG1peGVkIFJldHVybnMgVFJVRSBpZiB0aGUgZmx1c2ggd2FzIHN1Y2Nlc3NmdWwgb3Igbm8gZGF0YSB3YXMgd2FpdGluZyB0byBiZQogKiBmbHVzaGVkLCAwIGlmIHBhcnQgb2YgdGhlIHBlbmRpbmcgZGF0YSB3YXMgZmx1c2hlZCBidXQKICogbW9yZSByZW1haW5zLgogKiBAdGhyb3dzIFBnc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwZ19mbHVzaCgkY29ubmVjdGlvbikKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwZ19mbHVzaCgkY29ubmVjdGlvbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBwZ19mcmVlX3Jlc3VsdCBmcmVlcyB0aGUgbWVtb3J5IGFuZCBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUKICogc3BlY2lmaWVkIFBvc3RncmVTUUwgcXVlcnkgcmVzdWx0IHJlc291cmNlLgogKgogKiBUaGlzIGZ1bmN0aW9uIG5lZWQgb25seSBiZSBjYWxsZWQgaWYgbWVtb3J5CiAqIGNvbnN1bXB0aW9uIGR1cmluZyBzY3JpcHQgZXhlY3V0aW9uIGlzIGEgcHJvYmxlbS4gICBPdGhlcndpc2UsIGFsbCByZXN1bHQgbWVtb3J5IHdpbGwKICogYmUgYXV0b21hdGljYWxseSBmcmVlZCB3aGVuIHRoZSBzY3JpcHQgZW5kcy4KICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgUG9zdGdyZVNRTCBxdWVyeSByZXN1bHQgcmVzb3VyY2UsIHJldHVybmVkIGJ5IHBnX3F1ZXJ5LAogKiBwZ19xdWVyeV9wYXJhbXMgb3IgcGdfZXhlY3V0ZQogKiAoYW1vbmcgb3RoZXJzKS4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfZnJlZV9yZXN1bHQoJHJlc3VsdCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwZ19mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBwZ19ob3N0IHJldHVybnMgdGhlIGhvc3QgbmFtZSBvZiB0aGUgZ2l2ZW4KICogUG9zdGdyZVNRTCBjb25uZWN0aW9uIHJlc291cmNlIGlzCiAqIGNvbm5lY3RlZCB0by4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gIFdoZW4KICogY29ubmVjdGlvbiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiBwZ19jb25uZWN0IG9yIHBnX3Bjb25uZWN0LgogKiBAcmV0dXJuIHN0cmluZyBBIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBob3N0IHRoZQogKiBjb25uZWN0aW9uIGlzIHRvLgogKiBAdGhyb3dzIFBnc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwZ19ob3N0KCRjb25uZWN0aW9uID0gbnVsbCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGNvbm5lY3Rpb24gIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX2hvc3QoJGNvbm5lY3Rpb24pOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX2hvc3QoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHBnX2luc2VydCBpbnNlcnRzIHRoZSB2YWx1ZXMKICogb2YgYXNzb2NfYXJyYXkgaW50byB0aGUgdGFibGUgc3BlY2lmaWVkCiAqIGJ5IHRhYmxlX25hbWUuIElmIG9wdGlvbnMKICogaXMgc3BlY2lmaWVkLCBwZ19jb252ZXJ0IGlzIGFwcGxpZWQKICogdG8gYXNzb2NfYXJyYXkgd2l0aCB0aGUgc3BlY2lmaWVkIG9wdGlvbnMuCiAqCiAqIElmIG9wdGlvbnMgaXMgc3BlY2lmaWVkLAogKiBwZ19jb252ZXJ0IGlzIGFwcGxpZWQgdG8KICogYXNzb2NfYXJyYXkgd2l0aCB0aGUgc3BlY2lmaWVkIGZsYWdzLgogKgogKiBCeSBkZWZhdWx0IHBnX2luc2VydCBwYXNzZXMgcmF3IHZhbHVlcy4gVmFsdWVzCiAqIG11c3QgYmUgZXNjYXBlZCBvciBQR1NRTF9ETUxfRVNDQVBFIG9wdGlvbiBtdXN0IGJlCiAqIHNwZWNpZmllZC4gUEdTUUxfRE1MX0VTQ0FQRSBxdW90ZXMgYW5kIGVzY2FwZXMKICogcGFyYW1ldGVycy9pZGVudGlmaWVycy4gVGhlcmVmb3JlLCB0YWJsZS9jb2x1bW4gbmFtZXMgYmVjYW1lIGNhc2UKICogc2Vuc2l0aXZlLgogKgogKiBOb3RlIHRoYXQgbmVpdGhlciBlc2NhcGUgbm9yIHByZXBhcmVkIHF1ZXJ5IGNhbiBwcm90ZWN0IExJS0UgcXVlcnksCiAqIEpTT04sIEFycmF5LCBSZWdleCwgZXRjLiBUaGVzZSBwYXJhbWV0ZXJzIHNob3VsZCBiZSBoYW5kbGVkCiAqIGFjY29yZGluZyB0byB0aGVpciBjb250ZXh0cy4gaS5lLiBFc2NhcGUvdmFsaWRhdGUgdmFsdWVzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLgogKiBAcGFyYW0gc3RyaW5nICR0YWJsZV9uYW1lIE5hbWUgb2YgdGhlIHRhYmxlIGludG8gd2hpY2ggdG8gaW5zZXJ0IHJvd3MuICBUaGUgdGFibGUgdGFibGVfbmFtZSBtdXN0IGF0IGxlYXN0CiAqIGhhdmUgYXMgbWFueSBjb2x1bW5zIGFzIGFzc29jX2FycmF5IGhhcyBlbGVtZW50cy4KICogQHBhcmFtIGFycmF5ICRhc3NvY19hcnJheSBBbiBhcnJheSB3aG9zZSBrZXlzIGFyZSBmaWVsZCBuYW1lcyBpbiB0aGUgdGFibGUgdGFibGVfbmFtZSwKICogYW5kIHdob3NlIHZhbHVlcyBhcmUgdGhlIHZhbHVlcyBvZiB0aG9zZSBmaWVsZHMgdGhhdCBhcmUgdG8gYmUgaW5zZXJ0ZWQuCiAqIEBwYXJhbSBpbnQgJG9wdGlvbnMgQW55IG51bWJlciBvZiBQR1NRTF9DT05WX09QVFMsCiAqIFBHU1FMX0RNTF9OT19DT05WLAogKiBQR1NRTF9ETUxfRVNDQVBFLAogKiBQR1NRTF9ETUxfRVhFQywKICogUEdTUUxfRE1MX0FTWU5DIG9yCiAqIFBHU1FMX0RNTF9TVFJJTkcgY29tYmluZWQuIElmIFBHU1FMX0RNTF9TVFJJTkcgaXMgcGFydCBvZiB0aGUKICogb3B0aW9ucyB0aGVuIHF1ZXJ5IHN0cmluZyBpcyByZXR1cm5lZC4gV2hlbiBQR1NRTF9ETUxfTk9fQ09OVgogKiBvciBQR1NRTF9ETUxfRVNDQVBFIGlzIHNldCwgaXQgZG9lcyBub3QgY2FsbCBwZ19jb252ZXJ0IGludGVybmFsbHkuCiAqIEByZXR1cm4gbWl4ZWQgUmV0dXJucyB0aGUgY29ubmVjdGlvbiByZXNvdXJjZSBvbiBzdWNjZXNzLiBSZXR1cm5zIHN0cmluZyBpZiBQR1NRTF9ETUxfU1RSSU5HIGlzIHBhc3NlZAogKiB2aWEgb3B0aW9ucy4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfaW5zZXJ0KCRjb25uZWN0aW9uLCBzdHJpbmcgJHRhYmxlX25hbWUsIGFycmF5ICRhc3NvY19hcnJheSwgaW50ICRvcHRpb25zID0gUEdTUUxfRE1MX0VYRUMpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccGdfaW5zZXJ0KCRjb25uZWN0aW9uLCAkdGFibGVfbmFtZSwgJGFzc29jX2FycmF5LCAkb3B0aW9ucyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBwZ19sYXN0X2Vycm9yIHJldHVybnMgdGhlIGxhc3QgZXJyb3IgbWVzc2FnZQogKiBmb3IgYSBnaXZlbiBjb25uZWN0aW9uLgogKgogKiBFcnJvciBtZXNzYWdlcyBtYXkgYmUgb3ZlcndyaXR0ZW4gYnkgaW50ZXJuYWwgUG9zdGdyZVNRTCAobGlicHEpCiAqIGZ1bmN0aW9uIGNhbGxzLiBJdCBtYXkgbm90IHJldHVybiBhbiBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlIGlmCiAqIG11bHRpcGxlIGVycm9ycyBvY2N1ciBpbnNpZGUgYSBQb3N0Z3JlU1FMIG1vZHVsZSBmdW5jdGlvbi4KICoKICogVXNlIHBnX3Jlc3VsdF9lcnJvciwgcGdfcmVzdWx0X2Vycm9yX2ZpZWxkLAogKiBwZ19yZXN1bHRfc3RhdHVzIGFuZAogKiBwZ19jb25uZWN0aW9uX3N0YXR1cyBmb3IgYmV0dGVyIGVycm9yIGhhbmRsaW5nLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLiAgV2hlbgogKiBjb25uZWN0aW9uIGlzIG5vdCBwcmVzZW50LCB0aGUgZGVmYXVsdCBjb25uZWN0aW9uCiAqIGlzIHVzZWQuIFRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gaXMgdGhlIGxhc3QgY29ubmVjdGlvbiBtYWRlIGJ5CiAqIHBnX2Nvbm5lY3Qgb3IgcGdfcGNvbm5lY3QuCiAqIEByZXR1cm4gc3RyaW5nIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGxhc3QgZXJyb3IgbWVzc2FnZSBvbiB0aGUKICogZ2l2ZW4gY29ubmVjdGlvbi4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfbGFzdF9lcnJvcigkY29ubmVjdGlvbiA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb25uZWN0aW9uICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19sYXN0X2Vycm9yKCRjb25uZWN0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19sYXN0X2Vycm9yKCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBwZ19sYXN0X25vdGljZSByZXR1cm5zIHRoZSBsYXN0IG5vdGljZQogKiBtZXNzYWdlIGZyb20gdGhlIFBvc3RncmVTUUwgc2VydmVyIG9uIHRoZSBzcGVjaWZpZWQKICogY29ubmVjdGlvbi4gVGhlIFBvc3RncmVTUUwgc2VydmVyIHNlbmRzIG5vdGljZQogKiBtZXNzYWdlcyBpbiBzZXZlcmFsIGNhc2VzLCBmb3IgaW5zdGFuY2Ugd2hlbiBjcmVhdGluZyBhIFNFUklBTAogKiBjb2x1bW4gaW4gYSB0YWJsZS4KICoKICogV2l0aCBwZ19sYXN0X25vdGljZSwgeW91IGNhbiBhdm9pZCBpc3N1aW5nIHVzZWxlc3MKICogcXVlcmllcyBieSBjaGVja2luZyB3aGV0aGVyIG9yIG5vdCB0aGUgbm90aWNlIGlzIHJlbGF0ZWQgdG8geW91ciB0cmFuc2FjdGlvbi4KICoKICogTm90aWNlIG1lc3NhZ2UgdHJhY2tpbmcgY2FuIGJlIHNldCB0byBvcHRpb25hbCBieSBzZXR0aW5nIDEgZm9yCiAqIHBnc3FsLmlnbm9yZV9ub3RpY2UgaW4gcGhwLmluaS4KICoKICogTm90aWNlIG1lc3NhZ2UgbG9nZ2luZyBjYW4gYmUgc2V0IHRvIG9wdGlvbmFsIGJ5IHNldHRpbmcgMCBmb3IKICogcGdzcWwubG9nX25vdGljZSBpbiBwaHAuaW5pLgogKiBVbmxlc3MgcGdzcWwuaWdub3JlX25vdGljZSBpcyBzZXQKICogdG8gMCwgbm90aWNlIG1lc3NhZ2UgY2Fubm90IGJlIGxvZ2dlZC4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4KICogQHBhcmFtIGludCAkb3B0aW9uIE9uZSBvZiBQR1NRTF9OT1RJQ0VfTEFTVCAodG8gcmV0dXJuIGxhc3Qgbm90aWNlKSwKICogUEdTUUxfTk9USUNFX0FMTCAodG8gcmV0dXJuIGFsbCBub3RpY2VzKSwKICogb3IgUEdTUUxfTk9USUNFX0NMRUFSICh0byBjbGVhciBub3RpY2VzKS4KICogQHJldHVybiBzdHJpbmcgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgbGFzdCBub3RpY2Ugb24gdGhlCiAqIGdpdmVuIGNvbm5lY3Rpb24gd2l0aAogKiBQR1NRTF9OT1RJQ0VfTEFTVCwKICogYW4gYXJyYXkgd2l0aCBQR1NRTF9OT1RJQ0VfQUxMLAogKiBhIGJvb2xlYW4gd2l0aCBQR1NRTF9OT1RJQ0VfQ0xFQVIuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX2xhc3Rfbm90aWNlKCRjb25uZWN0aW9uLCBpbnQgJG9wdGlvbiA9IFBHU1FMX05PVElDRV9MQVNUKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccGdfbGFzdF9ub3RpY2UoJGNvbm5lY3Rpb24sICRvcHRpb24pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogcGdfbGFzdF9vaWQgaXMgdXNlZCB0byByZXRyaWV2ZSB0aGUKICogT0lEIGFzc2lnbmVkIHRvIGFuIGluc2VydGVkIHJvdy4KICoKICogT0lEIGZpZWxkIGJlY2FtZSBhbiBvcHRpb25hbCBmaWVsZCBmcm9tIFBvc3RncmVTUUwgNy4yIGFuZCB3aWxsCiAqIG5vdCBiZSBwcmVzZW50IGJ5IGRlZmF1bHQgaW4gUG9zdGdyZVNRTCA4LjEuIFdoZW4gdGhlCiAqIE9JRCBmaWVsZCBpcyBub3QgcHJlc2VudCBpbiBhIHRhYmxlLCB0aGUgcHJvZ3JhbW1lciBtdXN0IHVzZQogKiBwZ19yZXN1bHRfc3RhdHVzIHRvIGNoZWNrIGZvciBzdWNjZXNzZnVsCiAqIGluc2VydGlvbi4KICoKICogVG8gZ2V0IHRoZSB2YWx1ZSBvZiBhIFNFUklBTCBmaWVsZCBpbiBhbiBpbnNlcnRlZAogKiByb3csIGl0IGlzIG5lY2Vzc2FyeSB0byB1c2UgdGhlIFBvc3RncmVTUUwgQ1VSUlZBTAogKiBmdW5jdGlvbiwgbmFtaW5nIHRoZSBzZXF1ZW5jZSB3aG9zZSBsYXN0IHZhbHVlIGlzIHJlcXVpcmVkLiAgSWYgdGhlCiAqIG5hbWUgb2YgdGhlIHNlcXVlbmNlIGlzIHVua25vd24sIHRoZSBwZ19nZXRfc2VyaWFsX3NlcXVlbmNlCiAqIFBvc3RncmVTUUwgOC4wIGZ1bmN0aW9uIGlzIG5lY2Vzc2FyeS4KICoKICogUG9zdGdyZVNRTCA4LjEgaGFzIGEgZnVuY3Rpb24gTEFTVFZBTCB0aGF0IHJldHVybnMKICogdGhlIHZhbHVlIG9mIHRoZSBtb3N0IHJlY2VudGx5IHVzZWQgc2VxdWVuY2UgaW4gdGhlIHNlc3Npb24uICBUaGlzIGF2b2lkcwogKiB0aGUgbmVlZCBmb3IgbmFtaW5nIHRoZSBzZXF1ZW5jZSwgdGFibGUgb3IgY29sdW1uIGFsdG9nZXRoZXIuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IFBvc3RncmVTUUwgcXVlcnkgcmVzdWx0IHJlc291cmNlLCByZXR1cm5lZCBieSBwZ19xdWVyeSwKICogcGdfcXVlcnlfcGFyYW1zIG9yIHBnX2V4ZWN1dGUKICogKGFtb25nIG90aGVycykuCiAqIEByZXR1cm4gc3RyaW5nIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIE9JRCBhc3NpZ25lZCB0byB0aGUgbW9zdCByZWNlbnRseSBpbnNlcnRlZAogKiByb3cgaW4gdGhlIHNwZWNpZmllZCBjb25uZWN0aW9uIG9yCiAqIG5vIGF2YWlsYWJsZSBPSUQuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX2xhc3Rfb2lkKCRyZXN1bHQpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwZ19sYXN0X29pZCgkcmVzdWx0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHBnX2xvX2Nsb3NlIGNsb3NlcyBhIGxhcmdlCiAqIG9iamVjdC4gbGFyZ2Vfb2JqZWN0IGlzIGEgcmVzb3VyY2UgZm9yIHRoZQogKiBsYXJnZSBvYmplY3QgZnJvbSBwZ19sb19vcGVuLgogKgogKiBUbyB1c2UgdGhlIGxhcmdlIG9iamVjdCBpbnRlcmZhY2UsIGl0IGlzIG5lY2Vzc2FyeSB0bwogKiBlbmNsb3NlIGl0IHdpdGhpbiBhIHRyYW5zYWN0aW9uIGJsb2NrLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxhcmdlX29iamVjdCBQb3N0Z3JlU1FMIGxhcmdlIG9iamVjdCAoTE9CKSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgcGdfbG9fb3Blbi4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfbG9fY2xvc2UoJGxhcmdlX29iamVjdCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwZ19sb19jbG9zZSgkbGFyZ2Vfb2JqZWN0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBwZ19sb19leHBvcnQgdGFrZXMgYSBsYXJnZSBvYmplY3QgaW4gYQogKiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGFuZCBzYXZlcyBpdHMgY29udGVudHMgdG8gYSBmaWxlIG9uIHRoZSBsb2NhbAogKiBmaWxlc3lzdGVtLgogKgogKiBUbyB1c2UgdGhlIGxhcmdlIG9iamVjdCBpbnRlcmZhY2UsIGl0IGlzIG5lY2Vzc2FyeSB0bwogKiBlbmNsb3NlIGl0IHdpdGhpbiBhIHRyYW5zYWN0aW9uIGJsb2NrLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLiAgV2hlbgogKiBjb25uZWN0aW9uIGlzIG5vdCBwcmVzZW50LCB0aGUgZGVmYXVsdCBjb25uZWN0aW9uCiAqIGlzIHVzZWQuIFRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gaXMgdGhlIGxhc3QgY29ubmVjdGlvbiBtYWRlIGJ5CiAqIHBnX2Nvbm5lY3Qgb3IgcGdfcGNvbm5lY3QuCiAqIEBwYXJhbSBpbnQgJG9pZCBUaGUgT0lEIG9mIHRoZSBsYXJnZSBvYmplY3QgaW4gdGhlIGRhdGFiYXNlLgogKiBAcGFyYW0gc3RyaW5nICRwYXRobmFtZSBUaGUgZnVsbCBwYXRoIGFuZCBmaWxlIG5hbWUgb2YgdGhlIGZpbGUgaW4gd2hpY2ggdG8gd3JpdGUgdGhlCiAqIGxhcmdlIG9iamVjdCBvbiB0aGUgY2xpZW50IGZpbGVzeXN0ZW0uCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX2xvX2V4cG9ydCgkY29ubmVjdGlvbiA9IG51bGwsIGludCAkb2lkID0gbnVsbCwgc3RyaW5nICRwYXRobmFtZSA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkcGF0aG5hbWUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX2xvX2V4cG9ydCgkY29ubmVjdGlvbiwgJG9pZCwgJHBhdGhuYW1lKTsKICAgIH0gZWxzZWlmICgkb2lkICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19sb19leHBvcnQoJGNvbm5lY3Rpb24sICRvaWQpOwogICAgfSBlbHNlaWYgKCRjb25uZWN0aW9uICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19sb19leHBvcnQoJGNvbm5lY3Rpb24pOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX2xvX2V4cG9ydCgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIHBnX2xvX2ltcG9ydCBjcmVhdGVzIGEgbmV3IGxhcmdlIG9iamVjdAogKiBpbiB0aGUgZGF0YWJhc2UgdXNpbmcgYSBmaWxlIG9uIHRoZSBmaWxlc3lzdGVtIGFzIGl0cyBkYXRhCiAqIHNvdXJjZS4KICoKICogVG8gdXNlIHRoZSBsYXJnZSBvYmplY3QgaW50ZXJmYWNlLCBpdCBpcyBuZWNlc3NhcnkgdG8KICogZW5jbG9zZSBpdCB3aXRoaW4gYSB0cmFuc2FjdGlvbiBibG9jay4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gIFdoZW4KICogY29ubmVjdGlvbiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiBwZ19jb25uZWN0IG9yIHBnX3Bjb25uZWN0LgogKiBAcGFyYW0gc3RyaW5nICRwYXRobmFtZSBUaGUgZnVsbCBwYXRoIGFuZCBmaWxlIG5hbWUgb2YgdGhlIGZpbGUgb24gdGhlIGNsaWVudAogKiBmaWxlc3lzdGVtIGZyb20gd2hpY2ggdG8gcmVhZCB0aGUgbGFyZ2Ugb2JqZWN0IGRhdGEuCiAqIEBwYXJhbSBtaXhlZCAkb2JqZWN0X2lkIElmIGFuIG9iamVjdF9pZCBpcyBnaXZlbiB0aGUgZnVuY3Rpb24KICogd2lsbCB0cnkgdG8gY3JlYXRlIGEgbGFyZ2Ugb2JqZWN0IHdpdGggdGhpcyBpZCwgZWxzZSBhIGZyZWUKICogb2JqZWN0IGlkIGlzIGFzc2lnbmVkIGJ5IHRoZSBzZXJ2ZXIuIFRoZSBwYXJhbWV0ZXIKICogd2FzIGFkZGVkIGluIFBIUCA1LjMgYW5kIHJlbGllcyBvbiBmdW5jdGlvbmFsaXR5IHRoYXQgZmlyc3QKICogYXBwZWFyZWQgaW4gUG9zdGdyZVNRTCA4LjEuCiAqIEByZXR1cm4gaW50IFRoZSBPSUQgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgbGFyZ2Ugb2JqZWN0LgogKiBAdGhyb3dzIFBnc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwZ19sb19pbXBvcnQoJGNvbm5lY3Rpb24gPSBudWxsLCBzdHJpbmcgJHBhdGhuYW1lID0gbnVsbCwgJG9iamVjdF9pZCA9IG51bGwpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRvYmplY3RfaWQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX2xvX2ltcG9ydCgkY29ubmVjdGlvbiwgJHBhdGhuYW1lLCAkb2JqZWN0X2lkKTsKICAgIH0gZWxzZWlmICgkcGF0aG5hbWUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX2xvX2ltcG9ydCgkY29ubmVjdGlvbiwgJHBhdGhuYW1lKTsKICAgIH0gZWxzZWlmICgkY29ubmVjdGlvbiAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfbG9faW1wb3J0KCRjb25uZWN0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19sb19pbXBvcnQoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHBnX2xvX29wZW4gb3BlbnMgYSBsYXJnZSBvYmplY3QgaW4gdGhlIGRhdGFiYXNlCiAqIGFuZCByZXR1cm5zIGxhcmdlIG9iamVjdCByZXNvdXJjZSBzbyB0aGF0IGl0IGNhbiBiZSBtYW5pcHVsYXRlZC4KICoKICogVG8gdXNlIHRoZSBsYXJnZSBvYmplY3QgaW50ZXJmYWNlLCBpdCBpcyBuZWNlc3NhcnkgdG8KICogZW5jbG9zZSBpdCB3aXRoaW4gYSB0cmFuc2FjdGlvbiBibG9jay4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gIFdoZW4KICogY29ubmVjdGlvbiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiBwZ19jb25uZWN0IG9yIHBnX3Bjb25uZWN0LgogKiBAcGFyYW0gaW50ICRvaWQgVGhlIE9JRCBvZiB0aGUgbGFyZ2Ugb2JqZWN0IGluIHRoZSBkYXRhYmFzZS4KICogQHBhcmFtIHN0cmluZyAkbW9kZSBDYW4gYmUgZWl0aGVyICJyIiBmb3IgcmVhZC1vbmx5LCAidyIgZm9yIHdyaXRlIG9ubHkgb3IgInJ3IiBmb3IgcmVhZCBhbmQKICogd3JpdGUuCiAqIEByZXR1cm4gcmVzb3VyY2UgQSBsYXJnZSBvYmplY3QgcmVzb3VyY2UuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX2xvX29wZW4oJGNvbm5lY3Rpb24sIGludCAkb2lkLCBzdHJpbmcgJG1vZGUpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccGdfbG9fb3BlbigkY29ubmVjdGlvbiwgJG9pZCwgJG1vZGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogcGdfbG9fcmVhZF9hbGwgcmVhZHMgYSBsYXJnZSBvYmplY3QgYW5kIHBhc3NlcwogKiBpdCBzdHJhaWdodCB0aHJvdWdoIHRvIHRoZSBicm93c2VyIGFmdGVyIHNlbmRpbmcgYWxsIHBlbmRpbmcKICogaGVhZGVycy4gTWFpbmx5IGludGVuZGVkIGZvciBzZW5kaW5nIGJpbmFyeSBkYXRhIGxpa2UgaW1hZ2VzIG9yCiAqIHNvdW5kLgogKgogKiBUbyB1c2UgdGhlIGxhcmdlIG9iamVjdCBpbnRlcmZhY2UsIGl0IGlzIG5lY2Vzc2FyeSB0bwogKiBlbmNsb3NlIGl0IHdpdGhpbiBhIHRyYW5zYWN0aW9uIGJsb2NrLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxhcmdlX29iamVjdCBQb3N0Z3JlU1FMIGxhcmdlIG9iamVjdCAoTE9CKSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgcGdfbG9fb3Blbi4KICogQHJldHVybiBpbnQgTnVtYmVyIG9mIGJ5dGVzIHJlYWQuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX2xvX3JlYWRfYWxsKCRsYXJnZV9vYmplY3QpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwZ19sb19yZWFkX2FsbCgkbGFyZ2Vfb2JqZWN0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHBnX2xvX3JlYWQgcmVhZHMgYXQgbW9zdAogKiBsZW4gYnl0ZXMgZnJvbSBhIGxhcmdlIG9iamVjdCBhbmQKICogcmV0dXJucyBpdCBhcyBhIHN0cmluZy4KICoKICogVG8gdXNlIHRoZSBsYXJnZSBvYmplY3QgaW50ZXJmYWNlLCBpdCBpcyBuZWNlc3NhcnkgdG8KICogZW5jbG9zZSBpdCB3aXRoaW4gYSB0cmFuc2FjdGlvbiBibG9jay4KICoKICogQHBhcmFtIHJlc291cmNlICRsYXJnZV9vYmplY3QgUG9zdGdyZVNRTCBsYXJnZSBvYmplY3QgKExPQikgcmVzb3VyY2UsIHJldHVybmVkIGJ5IHBnX2xvX29wZW4uCiAqIEBwYXJhbSBpbnQgJGxlbiBBbiBvcHRpb25hbCBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byByZXR1cm4uCiAqIEByZXR1cm4gc3RyaW5nIEEgc3RyaW5nIGNvbnRhaW5pbmcgbGVuIGJ5dGVzIGZyb20gdGhlCiAqIGxhcmdlIG9iamVjdC4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfbG9fcmVhZCgkbGFyZ2Vfb2JqZWN0LCBpbnQgJGxlbiA9IDgxOTIpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwZ19sb19yZWFkKCRsYXJnZV9vYmplY3QsICRsZW4pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogcGdfbG9fc2VlayBzZWVrcyBhIHBvc2l0aW9uIHdpdGhpbiBhIGxhcmdlIG9iamVjdAogKiByZXNvdXJjZS4KICoKICogVG8gdXNlIHRoZSBsYXJnZSBvYmplY3QgaW50ZXJmYWNlLCBpdCBpcyBuZWNlc3NhcnkgdG8KICogZW5jbG9zZSBpdCB3aXRoaW4gYSB0cmFuc2FjdGlvbiBibG9jay4KICoKICogQHBhcmFtIHJlc291cmNlICRsYXJnZV9vYmplY3QgUG9zdGdyZVNRTCBsYXJnZSBvYmplY3QgKExPQikgcmVzb3VyY2UsIHJldHVybmVkIGJ5IHBnX2xvX29wZW4uCiAqIEBwYXJhbSBpbnQgJG9mZnNldCBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNlZWsuCiAqIEBwYXJhbSBpbnQgJHdoZW5jZSBPbmUgb2YgdGhlIGNvbnN0YW50cyBQR1NRTF9TRUVLX1NFVCAoc2VlayBmcm9tIG9iamVjdCBzdGFydCksCiAqIFBHU1FMX1NFRUtfQ1VSIChzZWVrIGZyb20gY3VycmVudCBwb3NpdGlvbikKICogb3IgUEdTUUxfU0VFS19FTkQgKHNlZWsgZnJvbSBvYmplY3QgZW5kKSAuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX2xvX3NlZWsoJGxhcmdlX29iamVjdCwgaW50ICRvZmZzZXQsIGludCAkd2hlbmNlID0gUEdTUUxfU0VFS19DVVIpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccGdfbG9fc2VlaygkbGFyZ2Vfb2JqZWN0LCAkb2Zmc2V0LCAkd2hlbmNlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBwZ19sb190cnVuY2F0ZSB0cnVuY2F0ZXMgYSBsYXJnZSBvYmplY3QKICogcmVzb3VyY2UuCiAqCiAqIFRvIHVzZSB0aGUgbGFyZ2Ugb2JqZWN0IGludGVyZmFjZSwgaXQgaXMgbmVjZXNzYXJ5IHRvCiAqIGVuY2xvc2UgaXQgd2l0aGluIGEgdHJhbnNhY3Rpb24gYmxvY2suCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGFyZ2Vfb2JqZWN0IFBvc3RncmVTUUwgbGFyZ2Ugb2JqZWN0IChMT0IpIHJlc291cmNlLCByZXR1cm5lZCBieSBwZ19sb19vcGVuLgogKiBAcGFyYW0gaW50ICRzaXplIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdHJ1bmNhdGUuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX2xvX3RydW5jYXRlKCRsYXJnZV9vYmplY3QsIGludCAkc2l6ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwZ19sb190cnVuY2F0ZSgkbGFyZ2Vfb2JqZWN0LCAkc2l6ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogcGdfbG9fdW5saW5rIGRlbGV0ZXMgYSBsYXJnZSBvYmplY3Qgd2l0aCB0aGUKICogb2lkLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogVG8gdXNlIHRoZSBsYXJnZSBvYmplY3QgaW50ZXJmYWNlLCBpdCBpcyBuZWNlc3NhcnkgdG8KICogZW5jbG9zZSBpdCB3aXRoaW4gYSB0cmFuc2FjdGlvbiBibG9jay4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gIFdoZW4KICogY29ubmVjdGlvbiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiBwZ19jb25uZWN0IG9yIHBnX3Bjb25uZWN0LgogKiBAcGFyYW0gaW50ICRvaWQgVGhlIE9JRCBvZiB0aGUgbGFyZ2Ugb2JqZWN0IGluIHRoZSBkYXRhYmFzZS4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfbG9fdW5saW5rKCRjb25uZWN0aW9uLCBpbnQgJG9pZCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwZ19sb191bmxpbmsoJGNvbm5lY3Rpb24sICRvaWQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIHBnX2xvX3dyaXRlIHdyaXRlcyBkYXRhIGludG8gYSBsYXJnZSBvYmplY3QKICogYXQgdGhlIGN1cnJlbnQgc2VlayBwb3NpdGlvbi4KICoKICogVG8gdXNlIHRoZSBsYXJnZSBvYmplY3QgaW50ZXJmYWNlLCBpdCBpcyBuZWNlc3NhcnkgdG8KICogZW5jbG9zZSBpdCB3aXRoaW4gYSB0cmFuc2FjdGlvbiBibG9jay4KICoKICogQHBhcmFtIHJlc291cmNlICRsYXJnZV9vYmplY3QgUG9zdGdyZVNRTCBsYXJnZSBvYmplY3QgKExPQikgcmVzb3VyY2UsIHJldHVybmVkIGJ5IHBnX2xvX29wZW4uCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIGRhdGEgdG8gYmUgd3JpdHRlbiB0byB0aGUgbGFyZ2Ugb2JqZWN0LiAgSWYgbGVuIGlzCiAqIHNwZWNpZmllZCBhbmQgaXMgbGVzcyB0aGFuIHRoZSBsZW5ndGggb2YgZGF0YSwgb25seQogKiBsZW4gYnl0ZXMgd2lsbCBiZSB3cml0dGVuLgogKiBAcGFyYW0gaW50ICRsZW4gQW4gb3B0aW9uYWwgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUuICBNdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvCiAqIGFuZCBubyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiBkYXRhLiAgRGVmYXVsdHMgdG8KICogdGhlIGxlbmd0aCBvZiBkYXRhLgogKiBAcmV0dXJuIGludCBUaGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gdG8gdGhlIGxhcmdlIG9iamVjdC4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfbG9fd3JpdGUoJGxhcmdlX29iamVjdCwgc3RyaW5nICRkYXRhLCBpbnQgJGxlbiA9IG51bGwpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRsZW4gIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX2xvX3dyaXRlKCRsYXJnZV9vYmplY3QsICRkYXRhLCAkbGVuKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19sb193cml0ZSgkbGFyZ2Vfb2JqZWN0LCAkZGF0YSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBwZ19tZXRhX2RhdGEgcmV0dXJucyB0YWJsZSBkZWZpbml0aW9uIGZvcgogKiB0YWJsZV9uYW1lIGFzIGFuIGFycmF5LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLgogKiBAcGFyYW0gc3RyaW5nICR0YWJsZV9uYW1lIFRoZSBuYW1lIG9mIHRoZSB0YWJsZS4KICogQHBhcmFtIGJvb2wgJGV4dGVuZGVkIEZsYWcgZm9yIHJldHVybmluZyBleHRlbmRlZCBtZXRhIGRhdGEuIERlZmF1bHQgdG8gRkFMU0UuCiAqIEByZXR1cm4gYXJyYXkgQW4gYXJyYXkgb2YgdGhlIHRhYmxlIGRlZmluaXRpb24uCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX21ldGFfZGF0YSgkY29ubmVjdGlvbiwgc3RyaW5nICR0YWJsZV9uYW1lLCBib29sICRleHRlbmRlZCA9IGZhbHNlKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwZ19tZXRhX2RhdGEoJGNvbm5lY3Rpb24sICR0YWJsZV9uYW1lLCAkZXh0ZW5kZWQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogcGdfb3B0aW9ucyB3aWxsIHJldHVybiBhIHN0cmluZyBjb250YWluaW5nCiAqIHRoZSBvcHRpb25zIHNwZWNpZmllZCBvbiB0aGUgZ2l2ZW4gUG9zdGdyZVNRTAogKiBjb25uZWN0aW9uIHJlc291cmNlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLiAgV2hlbgogKiBjb25uZWN0aW9uIGlzIG5vdCBwcmVzZW50LCB0aGUgZGVmYXVsdCBjb25uZWN0aW9uCiAqIGlzIHVzZWQuIFRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gaXMgdGhlIGxhc3QgY29ubmVjdGlvbiBtYWRlIGJ5CiAqIHBnX2Nvbm5lY3Qgb3IgcGdfcGNvbm5lY3QuCiAqIEByZXR1cm4gc3RyaW5nIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNvbm5lY3Rpb24KICogb3B0aW9ucy4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfb3B0aW9ucygkY29ubmVjdGlvbiA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb25uZWN0aW9uICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19vcHRpb25zKCRjb25uZWN0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19vcHRpb25zKCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBMb29rcyB1cCBhIGN1cnJlbnQgcGFyYW1ldGVyIHNldHRpbmcgb2YgdGhlIHNlcnZlci4KICoKICogQ2VydGFpbiBwYXJhbWV0ZXIgdmFsdWVzIGFyZSByZXBvcnRlZCBieSB0aGUgc2VydmVyIGF1dG9tYXRpY2FsbHkgYXQKICogY29ubmVjdGlvbiBzdGFydHVwIG9yIHdoZW5ldmVyIHRoZWlyIHZhbHVlcyBjaGFuZ2UuIHBnX3BhcmFtZXRlcl9zdGF0dXMgY2FuIGJlCiAqIHVzZWQgdG8gaW50ZXJyb2dhdGUgdGhlc2Ugc2V0dGluZ3MuIEl0IHJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgYQogKiBwYXJhbWV0ZXIgaWYga25vd24sIG9yIEZBTFNFIGlmIHRoZSBwYXJhbWV0ZXIgaXMgbm90IGtub3duLgogKgogKiBQYXJhbWV0ZXJzIHJlcG9ydGVkIGFzIG9mIFBvc3RncmVTUUwgOC4wIGluY2x1ZGUgc2VydmVyX3ZlcnNpb24sCiAqIHNlcnZlcl9lbmNvZGluZywgY2xpZW50X2VuY29kaW5nLAogKiBpc19zdXBlcnVzZXIsIHNlc3Npb25fYXV0aG9yaXphdGlvbiwKICogRGF0ZVN0eWxlLCBUaW1lWm9uZSwgYW5kIGludGVnZXJfZGF0ZXRpbWVzLgogKiAoc2VydmVyX2VuY29kaW5nLCBUaW1lWm9uZSwgYW5kCiAqIGludGVnZXJfZGF0ZXRpbWVzIHdlcmUgbm90IHJlcG9ydGVkIGJ5IHJlbGVhc2VzIGJlZm9yZSA4LjAuKSBOb3RlIHRoYXQKICogc2VydmVyX3ZlcnNpb24sIHNlcnZlcl9lbmNvZGluZyBhbmQgaW50ZWdlcl9kYXRldGltZXMKICogY2Fubm90IGNoYW5nZSBhZnRlciBQb3N0Z3JlU1FMIHN0YXJ0dXAuCiAqCiAqIFBvc3RncmVTUUwgNy4zIG9yIGxvd2VyIHNlcnZlcnMgZG8gbm90IHJlcG9ydCBwYXJhbWV0ZXIgc2V0dGluZ3MsCiAqIHBnX3BhcmFtZXRlcl9zdGF0dXMKICogaW5jbHVkZXMgbG9naWMgdG8gb2J0YWluIHZhbHVlcyBmb3Igc2VydmVyX3ZlcnNpb24gYW5kCiAqIGNsaWVudF9lbmNvZGluZwogKiBhbnl3YXkuIEFwcGxpY2F0aW9ucyBhcmUgZW5jb3VyYWdlZCB0byB1c2UgcGdfcGFyYW1ldGVyX3N0YXR1cyByYXRoZXIgdGhhbiBhZAogKiBob2MgY29kZSB0byBkZXRlcm1pbmUgdGhlc2UgdmFsdWVzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLiAgV2hlbgogKiBjb25uZWN0aW9uIGlzIG5vdCBwcmVzZW50LCB0aGUgZGVmYXVsdCBjb25uZWN0aW9uCiAqIGlzIHVzZWQuIFRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gaXMgdGhlIGxhc3QgY29ubmVjdGlvbiBtYWRlIGJ5CiAqIHBnX2Nvbm5lY3Qgb3IgcGdfcGNvbm5lY3QuCiAqIEBwYXJhbSBzdHJpbmcgJHBhcmFtX25hbWUgUG9zc2libGUgcGFyYW1fbmFtZSB2YWx1ZXMgaW5jbHVkZSBzZXJ2ZXJfdmVyc2lvbiwKICogc2VydmVyX2VuY29kaW5nLCBjbGllbnRfZW5jb2RpbmcsCiAqIGlzX3N1cGVydXNlciwgc2Vzc2lvbl9hdXRob3JpemF0aW9uLAogKiBEYXRlU3R5bGUsIFRpbWVab25lLCBhbmQKICogaW50ZWdlcl9kYXRldGltZXMuICBOb3RlIHRoYXQgdGhpcyB2YWx1ZSBpcyBjYXNlLXNlbnNpdGl2ZS4KICogQHJldHVybiBzdHJpbmcgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgdmFsdWUgb2YgdGhlIHBhcmFtZXRlciwgRkFMU0Ugb24gZmFpbHVyZSBvciBpbnZhbGlkCiAqIHBhcmFtX25hbWUuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX3BhcmFtZXRlcl9zdGF0dXMoJGNvbm5lY3Rpb24gPSBudWxsLCBzdHJpbmcgJHBhcmFtX25hbWUgPSBudWxsKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkcGFyYW1fbmFtZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfcGFyYW1ldGVyX3N0YXR1cygkY29ubmVjdGlvbiwgJHBhcmFtX25hbWUpOwogICAgfSBlbHNlaWYgKCRjb25uZWN0aW9uICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19wYXJhbWV0ZXJfc3RhdHVzKCRjb25uZWN0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19wYXJhbWV0ZXJfc3RhdHVzKCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBwZ19wY29ubmVjdCBvcGVucyBhIGNvbm5lY3Rpb24gdG8gYQogKiBQb3N0Z3JlU1FMIGRhdGFiYXNlLiBJdCByZXR1cm5zIGEgY29ubmVjdGlvbiByZXNvdXJjZSB0aGF0IGlzCiAqIG5lZWRlZCBieSBvdGhlciBQb3N0Z3JlU1FMIGZ1bmN0aW9ucy4KICoKICogSWYgYSBzZWNvbmQgY2FsbCBpcyBtYWRlIHRvIHBnX3Bjb25uZWN0IHdpdGgKICogdGhlIHNhbWUgY29ubmVjdGlvbl9zdHJpbmcgYXMgYW4gZXhpc3RpbmcgY29ubmVjdGlvbiwgdGhlCiAqIGV4aXN0aW5nIGNvbm5lY3Rpb24gd2lsbCBiZSByZXR1cm5lZCB1bmxlc3MgeW91IHBhc3MKICogUEdTUUxfQ09OTkVDVF9GT1JDRV9ORVcgYXMKICogY29ubmVjdF90eXBlLgogKgogKiBUbyBlbmFibGUgcGVyc2lzdGVudCBjb25uZWN0aW9uLCB0aGUgcGdzcWwuYWxsb3dfcGVyc2lzdGVudAogKiBwaHAuaW5pIGRpcmVjdGl2ZSBtdXN0IGJlIHNldCB0byAiT24iICh3aGljaCBpcyB0aGUgZGVmYXVsdCkuCiAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gY2FuIGJlIGRlZmluZWQgd2l0aCB0aGUgcGdzcWwubWF4X3BlcnNpc3RlbnQKICogcGhwLmluaSBkaXJlY3RpdmUgKGRlZmF1bHRzIHRvIC0xIGZvciBubyBsaW1pdCkuIFRoZSB0b3RhbCBudW1iZXIKICogb2YgY29ubmVjdGlvbnMgY2FuIGJlIHNldCB3aXRoIHRoZSBwZ3NxbC5tYXhfbGlua3MKICogcGhwLmluaSBkaXJlY3RpdmUuCiAqCiAqIHBnX2Nsb3NlIHdpbGwgbm90IGNsb3NlIHBlcnNpc3RlbnQgbGlua3MKICogZ2VuZXJhdGVkIGJ5IHBnX3Bjb25uZWN0LgogKgogKiBAcGFyYW0gc3RyaW5nICRjb25uZWN0aW9uX3N0cmluZyBUaGUgY29ubmVjdGlvbl9zdHJpbmcgY2FuIGJlIGVtcHR5IHRvIHVzZSBhbGwgZGVmYXVsdCBwYXJhbWV0ZXJzLCBvciBpdAogKiBjYW4gY29udGFpbiBvbmUgb3IgbW9yZSBwYXJhbWV0ZXIgc2V0dGluZ3Mgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UuCiAqIEVhY2ggcGFyYW1ldGVyIHNldHRpbmcgaXMgaW4gdGhlIGZvcm0ga2V5d29yZCA9IHZhbHVlLiBTcGFjZXMgYXJvdW5kCiAqIHRoZSBlcXVhbCBzaWduIGFyZSBvcHRpb25hbC4gVG8gd3JpdGUgYW4gZW1wdHkgdmFsdWUgb3IgYSB2YWx1ZQogKiBjb250YWluaW5nIHNwYWNlcywgc3Vycm91bmQgaXQgd2l0aCBzaW5nbGUgcXVvdGVzLCBlLmcuLCBrZXl3b3JkID0KICogJ2EgdmFsdWUnLiBTaW5nbGUgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcyB3aXRoaW4gdGhlIHZhbHVlIG11c3QgYmUKICogZXNjYXBlZCB3aXRoIGEgYmFja3NsYXNoLCBpLmUuLCBcJyBhbmQgXFwuCiAqCiAqIFRoZSBjdXJyZW50bHkgcmVjb2duaXplZCBwYXJhbWV0ZXIga2V5d29yZHMgYXJlOgogKiBob3N0LCBob3N0YWRkciwgcG9ydCwKICogZGJuYW1lLCB1c2VyLAogKiBwYXNzd29yZCwgY29ubmVjdF90aW1lb3V0LAogKiBvcHRpb25zLCB0dHkgKGlnbm9yZWQpLCBzc2xtb2RlLAogKiByZXF1aXJlc3NsIChkZXByZWNhdGVkIGluIGZhdm9yIG9mIHNzbG1vZGUpLCBhbmQKICogc2VydmljZS4gIFdoaWNoIG9mIHRoZXNlIGFyZ3VtZW50cyBleGlzdCBkZXBlbmRzCiAqIG9uIHlvdXIgUG9zdGdyZVNRTCB2ZXJzaW9uLgogKiBAcGFyYW0gaW50ICRjb25uZWN0X3R5cGUgSWYgUEdTUUxfQ09OTkVDVF9GT1JDRV9ORVcgaXMgcGFzc2VkLCB0aGVuIGEgbmV3IGNvbm5lY3Rpb24KICogaXMgY3JlYXRlZCwgZXZlbiBpZiB0aGUgY29ubmVjdGlvbl9zdHJpbmcgaXMgaWRlbnRpY2FsIHRvCiAqIGFuIGV4aXN0aW5nIGNvbm5lY3Rpb24uCiAqIEByZXR1cm4gcmVzb3VyY2UgUG9zdGdyZVNRTCBjb25uZWN0aW9uIHJlc291cmNlIG9uIHN1Y2Nlc3MsIEZBTFNFIG9uIGZhaWx1cmUuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX3Bjb25uZWN0KHN0cmluZyAkY29ubmVjdGlvbl9zdHJpbmcsIGludCAkY29ubmVjdF90eXBlID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb25uZWN0X3R5cGUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX3Bjb25uZWN0KCRjb25uZWN0aW9uX3N0cmluZywgJGNvbm5lY3RfdHlwZSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBccGdfcGNvbm5lY3QoJGNvbm5lY3Rpb25fc3RyaW5nKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHBnX3BpbmcgcGluZ3MgYSBkYXRhYmFzZSBjb25uZWN0aW9uIGFuZCB0cmllcyB0bwogKiByZWNvbm5lY3QgaXQgaWYgaXQgaXMgYnJva2VuLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLiAgV2hlbgogKiBjb25uZWN0aW9uIGlzIG5vdCBwcmVzZW50LCB0aGUgZGVmYXVsdCBjb25uZWN0aW9uCiAqIGlzIHVzZWQuIFRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gaXMgdGhlIGxhc3QgY29ubmVjdGlvbiBtYWRlIGJ5CiAqIHBnX2Nvbm5lY3Qgb3IgcGdfcGNvbm5lY3QuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX3BpbmcoJGNvbm5lY3Rpb24gPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGNvbm5lY3Rpb24gIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX3BpbmcoJGNvbm5lY3Rpb24pOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX3BpbmcoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBwZ19wb3J0IHJldHVybnMgdGhlIHBvcnQgbnVtYmVyIHRoYXQgdGhlCiAqIGdpdmVuIFBvc3RncmVTUUwgY29ubmVjdGlvbiByZXNvdXJjZSBpcwogKiBjb25uZWN0ZWQgdG8uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuICBXaGVuCiAqIGNvbm5lY3Rpb24gaXMgbm90IHByZXNlbnQsIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24KICogaXMgdXNlZC4gVGhlIGRlZmF1bHQgY29ubmVjdGlvbiBpcyB0aGUgbGFzdCBjb25uZWN0aW9uIG1hZGUgYnkKICogcGdfY29ubmVjdCBvciBwZ19wY29ubmVjdC4KICogQHJldHVybiBpbnQgQW4gaW50IGNvbnRhaW5pbmcgdGhlIHBvcnQgbnVtYmVyIG9mIHRoZSBkYXRhYmFzZQogKiBzZXJ2ZXIgdGhlIGNvbm5lY3Rpb24gaXMgdG8uCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX3BvcnQoJGNvbm5lY3Rpb24gPSBudWxsKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkY29ubmVjdGlvbiAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfcG9ydCgkY29ubmVjdGlvbik7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBccGdfcG9ydCgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogcGdfcHJlcGFyZSBjcmVhdGVzIGEgcHJlcGFyZWQgc3RhdGVtZW50IGZvciBsYXRlciBleGVjdXRpb24gd2l0aAogKiBwZ19leGVjdXRlIG9yIHBnX3NlbmRfZXhlY3V0ZS4KICogVGhpcyBmZWF0dXJlIGFsbG93cyBjb21tYW5kcyB0aGF0IHdpbGwgYmUgdXNlZCByZXBlYXRlZGx5IHRvCiAqIGJlIHBhcnNlZCBhbmQgcGxhbm5lZCBqdXN0IG9uY2UsIHJhdGhlciB0aGFuIGVhY2ggdGltZSB0aGV5IGFyZSBleGVjdXRlZC4KICogcGdfcHJlcGFyZSBpcyBzdXBwb3J0ZWQgb25seSBhZ2FpbnN0IFBvc3RncmVTUUwgNy40IG9yCiAqIGhpZ2hlciBjb25uZWN0aW9uczsgaXQgd2lsbCBmYWlsIHdoZW4gdXNpbmcgZWFybGllciB2ZXJzaW9ucy4KICoKICogVGhlIGZ1bmN0aW9uIGNyZWF0ZXMgYSBwcmVwYXJlZCBzdGF0ZW1lbnQgbmFtZWQgc3RtdG5hbWUgZnJvbSB0aGUgcXVlcnkKICogc3RyaW5nLCB3aGljaCBtdXN0IGNvbnRhaW4gYSBzaW5nbGUgU1FMIGNvbW1hbmQuIHN0bXRuYW1lIG1heSBiZSAiIiB0bwogKiBjcmVhdGUgYW4gdW5uYW1lZCBzdGF0ZW1lbnQsIGluIHdoaWNoIGNhc2UgYW55IHByZS1leGlzdGluZyB1bm5hbWVkCiAqIHN0YXRlbWVudCBpcyBhdXRvbWF0aWNhbGx5IHJlcGxhY2VkOyBvdGhlcndpc2UgaXQgaXMgYW4gZXJyb3IgaWYgdGhlCiAqIHN0YXRlbWVudCBuYW1lIGlzIGFscmVhZHkgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBzZXNzaW9uLiBJZiBhbnkgcGFyYW1ldGVycwogKiBhcmUgdXNlZCwgdGhleSBhcmUgcmVmZXJyZWQgdG8gaW4gdGhlIHF1ZXJ5IGFzICQxLCAkMiwgZXRjLgogKgogKiBQcmVwYXJlZCBzdGF0ZW1lbnRzIGZvciB1c2Ugd2l0aCBwZ19wcmVwYXJlIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYnkKICogZXhlY3V0aW5nIFNRTCBQUkVQQVJFIHN0YXRlbWVudHMuIChCdXQgcGdfcHJlcGFyZSBpcyBtb3JlIGZsZXhpYmxlIHNpbmNlIGl0CiAqIGRvZXMgbm90IHJlcXVpcmUgcGFyYW1ldGVyIHR5cGVzIHRvIGJlIHByZS1zcGVjaWZpZWQuKSBBbHNvLCBhbHRob3VnaCB0aGVyZQogKiBpcyBubyBQSFAgZnVuY3Rpb24gZm9yIGRlbGV0aW5nIGEgcHJlcGFyZWQgc3RhdGVtZW50LCB0aGUgU1FMIERFQUxMT0NBVEUKICogc3RhdGVtZW50IGNhbiBiZSB1c2VkIGZvciB0aGF0IHB1cnBvc2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuICBXaGVuCiAqIGNvbm5lY3Rpb24gaXMgbm90IHByZXNlbnQsIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24KICogaXMgdXNlZC4gVGhlIGRlZmF1bHQgY29ubmVjdGlvbiBpcyB0aGUgbGFzdCBjb25uZWN0aW9uIG1hZGUgYnkKICogcGdfY29ubmVjdCBvciBwZ19wY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkc3RtdG5hbWUgVGhlIG5hbWUgdG8gZ2l2ZSB0aGUgcHJlcGFyZWQgc3RhdGVtZW50LiAgTXVzdCBiZSB1bmlxdWUgcGVyLWNvbm5lY3Rpb24uICBJZgogKiAiIiBpcyBzcGVjaWZpZWQsIHRoZW4gYW4gdW5uYW1lZCBzdGF0ZW1lbnQgaXMgY3JlYXRlZCwgb3ZlcndyaXRpbmcgYW55CiAqIHByZXZpb3VzbHkgZGVmaW5lZCB1bm5hbWVkIHN0YXRlbWVudC4KICogQHBhcmFtIHN0cmluZyAkcXVlcnkgVGhlIHBhcmFtZXRlcml6ZWQgU1FMIHN0YXRlbWVudC4gIE11c3QgY29udGFpbiBvbmx5IGEgc2luZ2xlIHN0YXRlbWVudC4KICogKG11bHRpcGxlIHN0YXRlbWVudHMgc2VwYXJhdGVkIGJ5IHNlbWktY29sb25zIGFyZSBub3QgYWxsb3dlZC4pICBJZiBhbnkgcGFyYW1ldGVycwogKiBhcmUgdXNlZCwgdGhleSBhcmUgcmVmZXJyZWQgdG8gYXMgJDEsICQyLCBldGMuCiAqIEByZXR1cm4gcmVzb3VyY2UgQSBxdWVyeSByZXN1bHQgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfcHJlcGFyZSgkY29ubmVjdGlvbiA9IG51bGwsIHN0cmluZyAkc3RtdG5hbWUgPSBudWxsLCBzdHJpbmcgJHF1ZXJ5ID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRxdWVyeSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfcHJlcGFyZSgkY29ubmVjdGlvbiwgJHN0bXRuYW1lLCAkcXVlcnkpOwogICAgfSBlbHNlaWYgKCRzdG10bmFtZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfcHJlcGFyZSgkY29ubmVjdGlvbiwgJHN0bXRuYW1lKTsKICAgIH0gZWxzZWlmICgkY29ubmVjdGlvbiAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfcHJlcGFyZSgkY29ubmVjdGlvbik7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBccGdfcHJlcGFyZSgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogcGdfcHV0X2xpbmUgc2VuZHMgYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nCiAqIHRvIHRoZSBQb3N0Z3JlU1FMIGJhY2tlbmQgc2VydmVyLiAgVGhpcyBpcyBuZWVkZWQgaW4gY29uanVuY3Rpb24KICogd2l0aCBQb3N0Z3JlU1FMJ3MgQ09QWSBGUk9NIGNvbW1hbmQuCiAqCiAqIENPUFkgaXMgYSBoaWdoLXNwZWVkIGRhdGEgbG9hZGluZyBpbnRlcmZhY2UKICogc3VwcG9ydGVkIGJ5IFBvc3RncmVTUUwuICBEYXRhIGlzIHBhc3NlZCBpbiB3aXRob3V0IGJlaW5nIHBhcnNlZCwKICogYW5kIGluIGEgc2luZ2xlIHRyYW5zYWN0aW9uLgogKgogKiBBbiBhbHRlcm5hdGl2ZSB0byB1c2luZyByYXcgcGdfcHV0X2xpbmUgY29tbWFuZHMKICogaXMgdG8gdXNlIHBnX2NvcHlfZnJvbS4gIFRoaXMgaXMgYSBmYXIgc2ltcGxlcgogKiBpbnRlcmZhY2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuICBXaGVuCiAqIGNvbm5lY3Rpb24gaXMgbm90IHByZXNlbnQsIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24KICogaXMgdXNlZC4gVGhlIGRlZmF1bHQgY29ubmVjdGlvbiBpcyB0aGUgbGFzdCBjb25uZWN0aW9uIG1hZGUgYnkKICogcGdfY29ubmVjdCBvciBwZ19wY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkZGF0YSBBIGxpbmUgb2YgdGV4dCB0byBiZSBzZW50IGRpcmVjdGx5IHRvIHRoZSBQb3N0Z3JlU1FMIGJhY2tlbmQuICBBIE5VTEwKICogdGVybWluYXRvciBpcyBhZGRlZCBhdXRvbWF0aWNhbGx5LgogKiBAdGhyb3dzIFBnc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwZ19wdXRfbGluZSgkY29ubmVjdGlvbiA9IG51bGwsIHN0cmluZyAkZGF0YSA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkZGF0YSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfcHV0X2xpbmUoJGNvbm5lY3Rpb24sICRkYXRhKTsKICAgIH0gZWxzZWlmICgkY29ubmVjdGlvbiAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfcHV0X2xpbmUoJGNvbm5lY3Rpb24pOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX3B1dF9saW5lKCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU3VibWl0cyBhIGNvbW1hbmQgdG8gdGhlIHNlcnZlciBhbmQgd2FpdHMgZm9yIHRoZSByZXN1bHQsIHdpdGggdGhlIGFiaWxpdHkKICogdG8gcGFzcyBwYXJhbWV0ZXJzIHNlcGFyYXRlbHkgZnJvbSB0aGUgU1FMIGNvbW1hbmQgdGV4dC4KICoKICogcGdfcXVlcnlfcGFyYW1zIGlzIGxpa2UgcGdfcXVlcnksCiAqIGJ1dCBvZmZlcnMgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5OiBwYXJhbWV0ZXIKICogdmFsdWVzIGNhbiBiZSBzcGVjaWZpZWQgc2VwYXJhdGVseSBmcm9tIHRoZSBjb21tYW5kIHN0cmluZyBwcm9wZXIuCiAqIHBnX3F1ZXJ5X3BhcmFtcyBpcyBzdXBwb3J0ZWQgb25seSBhZ2FpbnN0IFBvc3RncmVTUUwgNy40IG9yCiAqIGhpZ2hlciBjb25uZWN0aW9uczsgaXQgd2lsbCBmYWlsIHdoZW4gdXNpbmcgZWFybGllciB2ZXJzaW9ucy4KICoKICogSWYgcGFyYW1ldGVycyBhcmUgdXNlZCwgdGhleSBhcmUgcmVmZXJyZWQgdG8gaW4gdGhlCiAqIHF1ZXJ5IHN0cmluZyBhcyAkMSwgJDIsIGV0Yy4gVGhlIHNhbWUgcGFyYW1ldGVyIG1heQogKiBhcHBlYXIgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIHF1ZXJ5OyB0aGUgc2FtZSB2YWx1ZQogKiB3aWxsIGJlIHVzZWQgaW4gdGhhdCBjYXNlLiBwYXJhbXMgc3BlY2lmaWVzIHRoZQogKiBhY3R1YWwgdmFsdWVzIG9mIHRoZSBwYXJhbWV0ZXJzLiBBIE5VTEwgdmFsdWUgaW4gdGhpcyBhcnJheSBtZWFucyB0aGUKICogY29ycmVzcG9uZGluZyBwYXJhbWV0ZXIgaXMgU1FMIE5VTEwuCiAqCiAqIFRoZSBwcmltYXJ5IGFkdmFudGFnZSBvZiBwZ19xdWVyeV9wYXJhbXMgb3ZlciBwZ19xdWVyeQogKiBpcyB0aGF0IHBhcmFtZXRlciB2YWx1ZXMKICogbWF5IGJlIHNlcGFyYXRlZCBmcm9tIHRoZSBxdWVyeSBzdHJpbmcsIHRodXMgYXZvaWRpbmcgdGhlIG5lZWQgZm9yIHRlZGlvdXMKICogYW5kIGVycm9yLXByb25lIHF1b3RpbmcgYW5kIGVzY2FwaW5nLiBVbmxpa2UgcGdfcXVlcnksCiAqIHBnX3F1ZXJ5X3BhcmFtcyBhbGxvd3MgYXQKICogbW9zdCBvbmUgU1FMIGNvbW1hbmQgaW4gdGhlIGdpdmVuIHN0cmluZy4gKFRoZXJlIGNhbiBiZSBzZW1pY29sb25zIGluIGl0LAogKiBidXQgbm90IG1vcmUgdGhhbiBvbmUgbm9uZW1wdHkgY29tbWFuZC4pCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuICBXaGVuCiAqIGNvbm5lY3Rpb24gaXMgbm90IHByZXNlbnQsIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24KICogaXMgdXNlZC4gVGhlIGRlZmF1bHQgY29ubmVjdGlvbiBpcyB0aGUgbGFzdCBjb25uZWN0aW9uIG1hZGUgYnkKICogcGdfY29ubmVjdCBvciBwZ19wY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkcXVlcnkgVGhlIHBhcmFtZXRlcml6ZWQgU1FMIHN0YXRlbWVudC4gIE11c3QgY29udGFpbiBvbmx5IGEgc2luZ2xlIHN0YXRlbWVudC4KICogKG11bHRpcGxlIHN0YXRlbWVudHMgc2VwYXJhdGVkIGJ5IHNlbWktY29sb25zIGFyZSBub3QgYWxsb3dlZC4pICBJZiBhbnkgcGFyYW1ldGVycwogKiBhcmUgdXNlZCwgdGhleSBhcmUgcmVmZXJyZWQgdG8gYXMgJDEsICQyLCBldGMuCiAqCiAqIFVzZXItc3VwcGxpZWQgdmFsdWVzIHNob3VsZCBhbHdheXMgYmUgcGFzc2VkIGFzIHBhcmFtZXRlcnMsIG5vdAogKiBpbnRlcnBvbGF0ZWQgaW50byB0aGUgcXVlcnkgc3RyaW5nLCB3aGVyZSB0aGV5IGZvcm0gcG9zc2libGUKICogU1FMIGluamVjdGlvbgogKiBhdHRhY2sgdmVjdG9ycyBhbmQgaW50cm9kdWNlIGJ1Z3Mgd2hlbiBoYW5kbGluZyBkYXRhIGNvbnRhaW5pbmcgcXVvdGVzLgogKiBJZiBmb3Igc29tZSByZWFzb24geW91IGNhbm5vdCB1c2UgYSBwYXJhbWV0ZXIsIGVuc3VyZSB0aGF0IGludGVycG9sYXRlZAogKiB2YWx1ZXMgYXJlIHByb3Blcmx5IGVzY2FwZWQuCiAqIEBwYXJhbSBhcnJheSAkcGFyYW1zIEFuIGFycmF5IG9mIHBhcmFtZXRlciB2YWx1ZXMgdG8gc3Vic3RpdHV0ZSBmb3IgdGhlICQxLCAkMiwgZXRjLiBwbGFjZWhvbGRlcnMKICogaW4gdGhlIG9yaWdpbmFsIHByZXBhcmVkIHF1ZXJ5IHN0cmluZy4gIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGFycmF5CiAqIG11c3QgbWF0Y2ggdGhlIG51bWJlciBvZiBwbGFjZWhvbGRlcnMuCiAqCiAqIFZhbHVlcyBpbnRlbmRlZCBmb3IgYnl0ZWEgZmllbGRzIGFyZSBub3Qgc3VwcG9ydGVkIGFzCiAqIHBhcmFtZXRlcnMuIFVzZSBwZ19lc2NhcGVfYnl0ZWEgaW5zdGVhZCwgb3IgdXNlIHRoZQogKiBsYXJnZSBvYmplY3QgZnVuY3Rpb25zLgogKiBAcmV0dXJuIHJlc291cmNlIEEgcXVlcnkgcmVzdWx0IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX3F1ZXJ5X3BhcmFtcygkY29ubmVjdGlvbiA9IG51bGwsIHN0cmluZyAkcXVlcnkgPSBudWxsLCBhcnJheSAkcGFyYW1zID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRwYXJhbXMgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX3F1ZXJ5X3BhcmFtcygkY29ubmVjdGlvbiwgJHF1ZXJ5LCAkcGFyYW1zKTsKICAgIH0gZWxzZWlmICgkcXVlcnkgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX3F1ZXJ5X3BhcmFtcygkY29ubmVjdGlvbiwgJHF1ZXJ5KTsKICAgIH0gZWxzZWlmICgkY29ubmVjdGlvbiAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfcXVlcnlfcGFyYW1zKCRjb25uZWN0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19xdWVyeV9wYXJhbXMoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHBnX3F1ZXJ5IGV4ZWN1dGVzIHRoZSBxdWVyeQogKiBvbiB0aGUgc3BlY2lmaWVkIGRhdGFiYXNlIGNvbm5lY3Rpb24uCiAqIHBnX3F1ZXJ5X3BhcmFtcyBzaG91bGQgYmUgcHJlZmVycmVkCiAqIGluIG1vc3QgY2FzZXMuCiAqCiAqIElmIGFuIGVycm9yIG9jY3VycywgYW5kIEZBTFNFIGlzIHJldHVybmVkLCBkZXRhaWxzIG9mIHRoZSBlcnJvciBjYW4KICogYmUgcmV0cmlldmVkIHVzaW5nIHRoZSBwZ19sYXN0X2Vycm9yCiAqIGZ1bmN0aW9uIGlmIHRoZSBjb25uZWN0aW9uIGlzIHZhbGlkLgogKgogKgogKgogKiBBbHRob3VnaCBjb25uZWN0aW9uIGNhbiBiZSBvbWl0dGVkLCBpdAogKiBpcyBub3QgcmVjb21tZW5kZWQsIHNpbmNlIGl0IGNhbiBiZSB0aGUgY2F1c2Ugb2YgaGFyZCB0byBmaW5kCiAqIGJ1Z3MgaW4gc2NyaXB0cy4KICoKICoKICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gIFdoZW4KICogY29ubmVjdGlvbiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiBwZ19jb25uZWN0IG9yIHBnX3Bjb25uZWN0LgogKiBAcGFyYW0gc3RyaW5nICRxdWVyeSBUaGUgU1FMIHN0YXRlbWVudCBvciBzdGF0ZW1lbnRzIHRvIGJlIGV4ZWN1dGVkLiBXaGVuIG11bHRpcGxlIHN0YXRlbWVudHMgYXJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24sCiAqIHRoZXkgYXJlIGF1dG9tYXRpY2FsbHkgZXhlY3V0ZWQgYXMgb25lIHRyYW5zYWN0aW9uLCB1bmxlc3MgdGhlcmUgYXJlIGV4cGxpY2l0IEJFR0lOL0NPTU1JVCBjb21tYW5kcwogKiBpbmNsdWRlZCBpbiB0aGUgcXVlcnkgc3RyaW5nLiBIb3dldmVyLCB1c2luZyBtdWx0aXBsZSB0cmFuc2FjdGlvbnMgaW4gb25lIGZ1bmN0aW9uIGNhbGwgaXMgbm90IHJlY29tbWVuZGVkLgogKgogKiBTdHJpbmcgaW50ZXJwb2xhdGlvbiBvZiB1c2VyLXN1cHBsaWVkIGRhdGEgaXMgZXh0cmVtZWx5IGRhbmdlcm91cyBhbmQgaXMKICogbGlrZWx5IHRvIGxlYWQgdG8gU1FMCiAqIGluamVjdGlvbiB2dWxuZXJhYmlsaXRpZXMuIEluIG1vc3QgY2FzZXMKICogcGdfcXVlcnlfcGFyYW1zIHNob3VsZCBiZSBwcmVmZXJyZWQsIHBhc3NpbmcKICogdXNlci1zdXBwbGllZCB2YWx1ZXMgYXMgcGFyYW1ldGVycyByYXRoZXIgdGhhbiBzdWJzdGl0dXRpbmcgdGhlbSBpbnRvCiAqIHRoZSBxdWVyeSBzdHJpbmcuCiAqCiAqIEFueSB1c2VyLXN1cHBsaWVkIGRhdGEgc3Vic3RpdHV0ZWQgZGlyZWN0bHkgaW50byBhIHF1ZXJ5IHN0cmluZyBzaG91bGQKICogYmUgcHJvcGVybHkgZXNjYXBlZC4KICogQHJldHVybiByZXNvdXJjZSBBIHF1ZXJ5IHJlc3VsdCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIFBnc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwZ19xdWVyeSgkY29ubmVjdGlvbiA9IG51bGwsIHN0cmluZyAkcXVlcnkgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHF1ZXJ5ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19xdWVyeSgkY29ubmVjdGlvbiwgJHF1ZXJ5KTsKICAgIH0gZWxzZWlmICgkY29ubmVjdGlvbiAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfcXVlcnkoJGNvbm5lY3Rpb24pOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX3F1ZXJ5KCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBwZ19yZXN1bHRfZXJyb3JfZmllbGQgcmV0dXJucyBvbmUgb2YgdGhlIGRldGFpbGVkIGVycm9yIG1lc3NhZ2UKICogZmllbGRzIGFzc29jaWF0ZWQgd2l0aCByZXN1bHQgcmVzb3VyY2UuIEl0IGlzIG9ubHkgYXZhaWxhYmxlCiAqIGFnYWluc3QgYSBQb3N0Z3JlU1FMIDcuNCBvciBhYm92ZSBzZXJ2ZXIuICBUaGUgZXJyb3IgZmllbGQgaXMgc3BlY2lmaWVkIGJ5CiAqIHRoZSBmaWVsZGNvZGUuCiAqCiAqIEJlY2F1c2UgcGdfcXVlcnkgYW5kIHBnX3F1ZXJ5X3BhcmFtcyByZXR1cm4gRkFMU0UgaWYgdGhlIHF1ZXJ5IGZhaWxzLAogKiB5b3UgbXVzdCB1c2UgcGdfc2VuZF9xdWVyeSBhbmQKICogcGdfZ2V0X3Jlc3VsdCB0byBnZXQgdGhlIHJlc3VsdCBoYW5kbGUuCiAqCiAqIElmIHlvdSBuZWVkIHRvIGdldCBhZGRpdGlvbmFsIGVycm9yIGluZm9ybWF0aW9uIGZyb20gZmFpbGVkIHBnX3F1ZXJ5IHF1ZXJpZXMsCiAqIHVzZSBwZ19zZXRfZXJyb3JfdmVyYm9zaXR5IGFuZCBwZ19sYXN0X2Vycm9yCiAqIGFuZCB0aGVuIHBhcnNlIHRoZSByZXN1bHQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IEEgUG9zdGdyZVNRTCBxdWVyeSByZXN1bHQgcmVzb3VyY2UgZnJvbSBhIHByZXZpb3VzbHkgZXhlY3V0ZWQKICogc3RhdGVtZW50LgogKiBAcGFyYW0gaW50ICRmaWVsZGNvZGUgUG9zc2libGUgZmllbGRjb2RlIHZhbHVlcyBhcmU6IFBHU1FMX0RJQUdfU0VWRVJJVFksCiAqIFBHU1FMX0RJQUdfU1FMU1RBVEUsIFBHU1FMX0RJQUdfTUVTU0FHRV9QUklNQVJZLAogKiBQR1NRTF9ESUFHX01FU1NBR0VfREVUQUlMLAogKiBQR1NRTF9ESUFHX01FU1NBR0VfSElOVCwgUEdTUUxfRElBR19TVEFURU1FTlRfUE9TSVRJT04sCiAqIFBHU1FMX0RJQUdfSU5URVJOQUxfUE9TSVRJT04gKFBvc3RncmVTUUwgOC4wKyBvbmx5KSwKICogUEdTUUxfRElBR19JTlRFUk5BTF9RVUVSWSAoUG9zdGdyZVNRTCA4LjArIG9ubHkpLAogKiBQR1NRTF9ESUFHX0NPTlRFWFQsIFBHU1FMX0RJQUdfU09VUkNFX0ZJTEUsCiAqIFBHU1FMX0RJQUdfU09VUkNFX0xJTkUgb3IKICogUEdTUUxfRElBR19TT1VSQ0VfRlVOQ1RJT04uCiAqIEByZXR1cm4gc3RyaW5nfG51bGwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgY29udGVudHMgb2YgdGhlIGVycm9yIGZpZWxkLCBOVUxMIGlmIHRoZSBmaWVsZCBkb2VzIG5vdCBleGlzdC4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfcmVzdWx0X2Vycm9yX2ZpZWxkKCRyZXN1bHQsIGludCAkZmllbGRjb2RlKTogP3N0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBnX3Jlc3VsdF9lcnJvcl9maWVsZCgkcmVzdWx0LCAkZmllbGRjb2RlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHBnX3Jlc3VsdF9zZWVrIHNldHMgdGhlIGludGVybmFsIHJvdyBvZmZzZXQgaW4KICogYSByZXN1bHQgcmVzb3VyY2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IFBvc3RncmVTUUwgcXVlcnkgcmVzdWx0IHJlc291cmNlLCByZXR1cm5lZCBieSBwZ19xdWVyeSwKICogcGdfcXVlcnlfcGFyYW1zIG9yIHBnX2V4ZWN1dGUKICogKGFtb25nIG90aGVycykuCiAqIEBwYXJhbSBpbnQgJG9mZnNldCBSb3cgdG8gbW92ZSB0aGUgaW50ZXJuYWwgb2Zmc2V0IHRvIGluIHRoZSByZXN1bHQgcmVzb3VyY2UuCiAqIFJvd3MgYXJlIG51bWJlcmVkIHN0YXJ0aW5nIGZyb20gemVyby4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfcmVzdWx0X3NlZWsoJHJlc3VsdCwgaW50ICRvZmZzZXQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccGdfcmVzdWx0X3NlZWsoJHJlc3VsdCwgJG9mZnNldCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogcGdfc2VsZWN0IHNlbGVjdHMgcmVjb3JkcyBzcGVjaWZpZWQgYnkKICogYXNzb2NfYXJyYXkgd2hpY2ggaGFzCiAqIGZpZWxkPSZndDt2YWx1ZS4gRm9yIGEgc3VjY2Vzc2Z1bCBxdWVyeSwgaXQgcmV0dXJucyBhbgogKiBhcnJheSBjb250YWluaW5nIGFsbCByZWNvcmRzIGFuZCBmaWVsZHMgdGhhdCBtYXRjaCB0aGUgY29uZGl0aW9uCiAqIHNwZWNpZmllZCBieSBhc3NvY19hcnJheS4KICoKICogSWYgb3B0aW9ucyBpcyBzcGVjaWZpZWQsCiAqIHBnX2NvbnZlcnQgaXMgYXBwbGllZCB0bwogKiBhc3NvY19hcnJheSB3aXRoIHRoZSBzcGVjaWZpZWQgZmxhZ3MuCiAqCiAqIEJ5IGRlZmF1bHQgcGdfc2VsZWN0IHBhc3NlcyByYXcgdmFsdWVzLiBWYWx1ZXMKICogbXVzdCBiZSBlc2NhcGVkIG9yIFBHU1FMX0RNTF9FU0NBUEUgb3B0aW9uIG11c3QgYmUKICogc3BlY2lmaWVkLiBQR1NRTF9ETUxfRVNDQVBFIHF1b3RlcyBhbmQgZXNjYXBlcwogKiBwYXJhbWV0ZXJzL2lkZW50aWZpZXJzLiBUaGVyZWZvcmUsIHRhYmxlL2NvbHVtbiBuYW1lcyBiZWNhbWUgY2FzZQogKiBzZW5zaXRpdmUuCiAqCiAqIE5vdGUgdGhhdCBuZWl0aGVyIGVzY2FwZSBub3IgcHJlcGFyZWQgcXVlcnkgY2FuIHByb3RlY3QgTElLRSBxdWVyeSwKICogSlNPTiwgQXJyYXksIFJlZ2V4LCBldGMuIFRoZXNlIHBhcmFtZXRlcnMgc2hvdWxkIGJlIGhhbmRsZWQKICogYWNjb3JkaW5nIHRvIHRoZWlyIGNvbnRleHRzLiBpLmUuIEVzY2FwZS92YWxpZGF0ZSB2YWx1ZXMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuCiAqIEBwYXJhbSBzdHJpbmcgJHRhYmxlX25hbWUgTmFtZSBvZiB0aGUgdGFibGUgZnJvbSB3aGljaCB0byBzZWxlY3Qgcm93cy4KICogQHBhcmFtIGFycmF5ICRhc3NvY19hcnJheSBBbiBhcnJheSB3aG9zZSBrZXlzIGFyZSBmaWVsZCBuYW1lcyBpbiB0aGUgdGFibGUgdGFibGVfbmFtZSwKICogYW5kIHdob3NlIHZhbHVlcyBhcmUgdGhlIGNvbmRpdGlvbnMgdGhhdCBhIHJvdyBtdXN0IG1lZXQgdG8gYmUgcmV0cmlldmVkLgogKiBAcGFyYW0gaW50ICRvcHRpb25zIEFueSBudW1iZXIgb2YgUEdTUUxfQ09OVl9GT1JDRV9OVUxMLAogKiBQR1NRTF9ETUxfTk9fQ09OViwKICogUEdTUUxfRE1MX0VTQ0FQRSwKICogUEdTUUxfRE1MX0VYRUMsCiAqIFBHU1FMX0RNTF9BU1lOQyBvcgogKiBQR1NRTF9ETUxfU1RSSU5HIGNvbWJpbmVkLiBJZiBQR1NRTF9ETUxfU1RSSU5HIGlzIHBhcnQgb2YgdGhlCiAqIG9wdGlvbnMgdGhlbiBxdWVyeSBzdHJpbmcgaXMgcmV0dXJuZWQuIFdoZW4gUEdTUUxfRE1MX05PX0NPTlYKICogb3IgUEdTUUxfRE1MX0VTQ0FQRSBpcyBzZXQsIGl0IGRvZXMgbm90IGNhbGwgcGdfY29udmVydCBpbnRlcm5hbGx5LgogKiBAcGFyYW0gaW50ICRyZXN1bHRfdHlwZQogKiBAcmV0dXJuIG1peGVkIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLiAgUmV0dXJucyBzdHJpbmcgaWYgUEdTUUxfRE1MX1NUUklORyBpcyBwYXNzZWQKICogdmlhIG9wdGlvbnMuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX3NlbGVjdCgkY29ubmVjdGlvbiwgc3RyaW5nICR0YWJsZV9uYW1lLCBhcnJheSAkYXNzb2NfYXJyYXksIGludCAkb3B0aW9ucyA9IFBHU1FMX0RNTF9FWEVDLCBpbnQgJHJlc3VsdF90eXBlID0gUEdTUUxfQVNTT0MpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccGdfc2VsZWN0KCRjb25uZWN0aW9uLCAkdGFibGVfbmFtZSwgJGFzc29jX2FycmF5LCAkb3B0aW9ucywgJHJlc3VsdF90eXBlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNlbmRzIGEgcmVxdWVzdCB0byBleGVjdXRlIGEgcHJlcGFyZWQgc3RhdGVtZW50IHdpdGggZ2l2ZW4gcGFyYW1ldGVycywKICogd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgcmVzdWx0KHMpLgogKgogKiBUaGlzIGlzIHNpbWlsYXIgdG8gcGdfc2VuZF9xdWVyeV9wYXJhbXMsIGJ1dCB0aGUgY29tbWFuZCB0byBiZSBleGVjdXRlZCBpcyBzcGVjaWZpZWQKICogYnkgbmFtaW5nIGEgcHJldmlvdXNseS1wcmVwYXJlZCBzdGF0ZW1lbnQsIGluc3RlYWQgb2YgZ2l2aW5nIGEgcXVlcnkgc3RyaW5nLiBUaGUKICogZnVuY3Rpb24ncyBwYXJhbWV0ZXJzIGFyZSBoYW5kbGVkIGlkZW50aWNhbGx5IHRvIHBnX2V4ZWN1dGUuCiAqIExpa2UgcGdfZXhlY3V0ZSwgaXQgd2lsbCBub3Qgd29yayBvbiBwcmUtNy40IHZlcnNpb25zIG9mCiAqIFBvc3RncmVTUUwuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuICBXaGVuCiAqIGNvbm5lY3Rpb24gaXMgbm90IHByZXNlbnQsIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24KICogaXMgdXNlZC4gVGhlIGRlZmF1bHQgY29ubmVjdGlvbiBpcyB0aGUgbGFzdCBjb25uZWN0aW9uIG1hZGUgYnkKICogcGdfY29ubmVjdCBvciBwZ19wY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkc3RtdG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByZXBhcmVkIHN0YXRlbWVudCB0byBleGVjdXRlLiAgaWYKICogIiIgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSB1bm5hbWVkIHN0YXRlbWVudCBpcyBleGVjdXRlZC4gIFRoZSBuYW1lIG11c3QgaGF2ZQogKiBiZWVuIHByZXZpb3VzbHkgcHJlcGFyZWQgdXNpbmcgcGdfcHJlcGFyZSwKICogcGdfc2VuZF9wcmVwYXJlIG9yIGEgUFJFUEFSRSBTUUwKICogY29tbWFuZC4KICogQHBhcmFtIGFycmF5ICRwYXJhbXMgQW4gYXJyYXkgb2YgcGFyYW1ldGVyIHZhbHVlcyB0byBzdWJzdGl0dXRlIGZvciB0aGUgJDEsICQyLCBldGMuIHBsYWNlaG9sZGVycwogKiBpbiB0aGUgb3JpZ2luYWwgcHJlcGFyZWQgcXVlcnkgc3RyaW5nLiAgVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgYXJyYXkKICogbXVzdCBtYXRjaCB0aGUgbnVtYmVyIG9mIHBsYWNlaG9sZGVycy4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfc2VuZF9leGVjdXRlKCRjb25uZWN0aW9uLCBzdHJpbmcgJHN0bXRuYW1lLCBhcnJheSAkcGFyYW1zKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBnX3NlbmRfZXhlY3V0ZSgkY29ubmVjdGlvbiwgJHN0bXRuYW1lLCAkcGFyYW1zKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZW5kcyBhIHJlcXVlc3QgdG8gY3JlYXRlIGEgcHJlcGFyZWQgc3RhdGVtZW50IHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMsCiAqIHdpdGhvdXQgd2FpdGluZyBmb3IgY29tcGxldGlvbi4KICoKICogVGhpcyBpcyBhbiBhc3luY2hyb25vdXMgdmVyc2lvbiBvZiBwZ19wcmVwYXJlOiBpdCByZXR1cm5zIFRSVUUgaWYgaXQgd2FzIGFibGUgdG8KICogZGlzcGF0Y2ggdGhlIHJlcXVlc3QsIGFuZCBGQUxTRSBpZiBub3QuIEFmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxsLCBjYWxsCiAqIHBnX2dldF9yZXN1bHQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNlcnZlciBzdWNjZXNzZnVsbHkgY3JlYXRlZCB0aGUKICogcHJlcGFyZWQgc3RhdGVtZW50LiBUaGUgZnVuY3Rpb24ncyBwYXJhbWV0ZXJzIGFyZSBoYW5kbGVkIGlkZW50aWNhbGx5IHRvCiAqIHBnX3ByZXBhcmUuIExpa2UgcGdfcHJlcGFyZSwgaXQgd2lsbCBub3Qgd29yawogKiBvbiBwcmUtNy40IHZlcnNpb25zIG9mIFBvc3RncmVTUUwuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuICBXaGVuCiAqIGNvbm5lY3Rpb24gaXMgbm90IHByZXNlbnQsIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24KICogaXMgdXNlZC4gVGhlIGRlZmF1bHQgY29ubmVjdGlvbiBpcyB0aGUgbGFzdCBjb25uZWN0aW9uIG1hZGUgYnkKICogcGdfY29ubmVjdCBvciBwZ19wY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkc3RtdG5hbWUgVGhlIG5hbWUgdG8gZ2l2ZSB0aGUgcHJlcGFyZWQgc3RhdGVtZW50LiAgTXVzdCBiZSB1bmlxdWUgcGVyLWNvbm5lY3Rpb24uICBJZgogKiAiIiBpcyBzcGVjaWZpZWQsIHRoZW4gYW4gdW5uYW1lZCBzdGF0ZW1lbnQgaXMgY3JlYXRlZCwgb3ZlcndyaXRpbmcgYW55CiAqIHByZXZpb3VzbHkgZGVmaW5lZCB1bm5hbWVkIHN0YXRlbWVudC4KICogQHBhcmFtIHN0cmluZyAkcXVlcnkgVGhlIHBhcmFtZXRlcml6ZWQgU1FMIHN0YXRlbWVudC4gIE11c3QgY29udGFpbiBvbmx5IGEgc2luZ2xlIHN0YXRlbWVudC4KICogKG11bHRpcGxlIHN0YXRlbWVudHMgc2VwYXJhdGVkIGJ5IHNlbWktY29sb25zIGFyZSBub3QgYWxsb3dlZC4pICBJZiBhbnkgcGFyYW1ldGVycwogKiBhcmUgdXNlZCwgdGhleSBhcmUgcmVmZXJyZWQgdG8gYXMgJDEsICQyLCBldGMuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX3NlbmRfcHJlcGFyZSgkY29ubmVjdGlvbiwgc3RyaW5nICRzdG10bmFtZSwgc3RyaW5nICRxdWVyeSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwZ19zZW5kX3ByZXBhcmUoJGNvbm5lY3Rpb24sICRzdG10bmFtZSwgJHF1ZXJ5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTdWJtaXRzIGEgY29tbWFuZCBhbmQgc2VwYXJhdGUgcGFyYW1ldGVycyB0byB0aGUgc2VydmVyIHdpdGhvdXQKICogd2FpdGluZyBmb3IgdGhlIHJlc3VsdChzKS4KICoKICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIHBnX3NlbmRfcXVlcnkgZXhjZXB0IHRoYXQgcXVlcnkKICogcGFyYW1ldGVycyBjYW4gYmUgc3BlY2lmaWVkIHNlcGFyYXRlbHkgZnJvbSB0aGUKICogcXVlcnkgc3RyaW5nLiBUaGUgZnVuY3Rpb24ncyBwYXJhbWV0ZXJzIGFyZQogKiBoYW5kbGVkIGlkZW50aWNhbGx5IHRvIHBnX3F1ZXJ5X3BhcmFtcy4gTGlrZQogKiBwZ19xdWVyeV9wYXJhbXMsIGl0IHdpbGwgbm90IHdvcmsgb24gcHJlLTcuNCBQb3N0Z3JlU1FMCiAqIGNvbm5lY3Rpb25zLCBhbmQgaXQgYWxsb3dzIG9ubHkgb25lIGNvbW1hbmQgaW4gdGhlIHF1ZXJ5IHN0cmluZy4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4KICogQHBhcmFtIHN0cmluZyAkcXVlcnkgVGhlIHBhcmFtZXRlcml6ZWQgU1FMIHN0YXRlbWVudC4gIE11c3QgY29udGFpbiBvbmx5IGEgc2luZ2xlIHN0YXRlbWVudC4KICogKG11bHRpcGxlIHN0YXRlbWVudHMgc2VwYXJhdGVkIGJ5IHNlbWktY29sb25zIGFyZSBub3QgYWxsb3dlZC4pICBJZiBhbnkgcGFyYW1ldGVycwogKiBhcmUgdXNlZCwgdGhleSBhcmUgcmVmZXJyZWQgdG8gYXMgJDEsICQyLCBldGMuCiAqIEBwYXJhbSBhcnJheSAkcGFyYW1zIEFuIGFycmF5IG9mIHBhcmFtZXRlciB2YWx1ZXMgdG8gc3Vic3RpdHV0ZSBmb3IgdGhlICQxLCAkMiwgZXRjLiBwbGFjZWhvbGRlcnMKICogaW4gdGhlIG9yaWdpbmFsIHByZXBhcmVkIHF1ZXJ5IHN0cmluZy4gIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGFycmF5CiAqIG11c3QgbWF0Y2ggdGhlIG51bWJlciBvZiBwbGFjZWhvbGRlcnMuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX3NlbmRfcXVlcnlfcGFyYW1zKCRjb25uZWN0aW9uLCBzdHJpbmcgJHF1ZXJ5LCBhcnJheSAkcGFyYW1zKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBnX3NlbmRfcXVlcnlfcGFyYW1zKCRjb25uZWN0aW9uLCAkcXVlcnksICRwYXJhbXMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIHBnX3NlbmRfcXVlcnkgc2VuZHMgYSBxdWVyeSBvciBxdWVyaWVzIGFzeW5jaHJvbm91c2x5IHRvIHRoZQogKiBjb25uZWN0aW9uLiBVbmxpa2UKICogcGdfcXVlcnksIGl0IGNhbiBzZW5kIG11bHRpcGxlIHF1ZXJpZXMgYXQgb25jZSB0bwogKiBQb3N0Z3JlU1FMIGFuZCBnZXQgdGhlIHJlc3VsdHMgb25lIGJ5IG9uZSB1c2luZwogKiBwZ19nZXRfcmVzdWx0LgogKgogKiBTY3JpcHQgZXhlY3V0aW9uIGlzIG5vdCBibG9ja2VkIHdoaWxlIHRoZSBxdWVyaWVzIGFyZSBleGVjdXRpbmcuIFVzZQogKiBwZ19jb25uZWN0aW9uX2J1c3kgdG8gY2hlY2sgaWYgdGhlIGNvbm5lY3Rpb24gaXMKICogYnVzeSAoaS5lLiB0aGUgcXVlcnkgaXMgZXhlY3V0aW5nKS4gUXVlcmllcyBtYXkgYmUgY2FuY2VsbGVkIHVzaW5nCiAqIHBnX2NhbmNlbF9xdWVyeS4KICoKICogQWx0aG91Z2ggdGhlIHVzZXIgY2FuIHNlbmQgbXVsdGlwbGUgcXVlcmllcyBhdCBvbmNlLCBtdWx0aXBsZSBxdWVyaWVzCiAqIGNhbm5vdCBiZSBzZW50IG92ZXIgYSBidXN5IGNvbm5lY3Rpb24uIElmIGEgcXVlcnkgaXMgc2VudCB3aGlsZQogKiB0aGUgY29ubmVjdGlvbiBpcyBidXN5LCBpdCB3YWl0cyB1bnRpbCB0aGUgbGFzdCBxdWVyeSBpcyBmaW5pc2hlZCBhbmQKICogZGlzY2FyZHMgYWxsIGl0cyByZXN1bHRzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLgogKiBAcGFyYW0gc3RyaW5nICRxdWVyeSBUaGUgU1FMIHN0YXRlbWVudCBvciBzdGF0ZW1lbnRzIHRvIGJlIGV4ZWN1dGVkLgogKgogKiBEYXRhIGluc2lkZSB0aGUgcXVlcnkgc2hvdWxkIGJlIHByb3Blcmx5IGVzY2FwZWQuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX3NlbmRfcXVlcnkoJGNvbm5lY3Rpb24sIHN0cmluZyAkcXVlcnkpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccGdfc2VuZF9xdWVyeSgkY29ubmVjdGlvbiwgJHF1ZXJ5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBwZ19zb2NrZXQgcmV0dXJucyBhIHJlYWQgb25seSByZXNvdXJjZQogKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBzb2NrZXQgdW5kZXJseWluZyB0aGUgZ2l2ZW4gUG9zdGdyZVNRTCBjb25uZWN0aW9uLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLgogKiBAcmV0dXJuIHJlc291cmNlIEEgc29ja2V0IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX3NvY2tldCgkY29ubmVjdGlvbikKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwZ19zb2NrZXQoJGNvbm5lY3Rpb24pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogcGdfdHJhY2UgZW5hYmxlcyB0cmFjaW5nIG9mIHRoZSBQb3N0Z3JlU1FMCiAqIGZyb250ZW5kL2JhY2tlbmQgY29tbXVuaWNhdGlvbiB0byBhIGZpbGUuIFRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHJlc3VsdHMsCiAqIG9uZSBuZWVkcyB0byBiZSBmYW1pbGlhciB3aXRoIHRoZSBpbnRlcm5hbHMgb2YgUG9zdGdyZVNRTAogKiBjb21tdW5pY2F0aW9uIHByb3RvY29sLgogKgogKiBGb3IgdGhvc2Ugd2hvIGFyZSBub3QsIGl0IGNhbiBzdGlsbCBiZQogKiB1c2VmdWwgZm9yIHRyYWNpbmcgZXJyb3JzIGluIHF1ZXJpZXMgc2VudCB0byB0aGUgc2VydmVyLCB5b3UKICogY291bGQgZG8gZm9yIGV4YW1wbGUgZ3JlcCAnXlRvIGJhY2tlbmQnCiAqIHRyYWNlLmxvZyBhbmQgc2VlIHdoYXQgcXVlcmllcyBhY3R1YWxseSB3ZXJlIHNlbnQgdG8gdGhlCiAqIFBvc3RncmVTUUwgc2VydmVyLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVmZXIgdG8gdGhlCiAqIFBvc3RncmVTUUwgRG9jdW1lbnRhdGlvbi4KICoKICogQHBhcmFtIHN0cmluZyAkcGF0aG5hbWUgVGhlIGZ1bGwgcGF0aCBhbmQgZmlsZSBuYW1lIG9mIHRoZSBmaWxlIGluIHdoaWNoIHRvIHdyaXRlIHRoZQogKiB0cmFjZSBsb2cuICBTYW1lIGFzIGluIGZvcGVuLgogKiBAcGFyYW0gc3RyaW5nICRtb2RlIEFuIG9wdGlvbmFsIGZpbGUgYWNjZXNzIG1vZGUsIHNhbWUgYXMgZm9yIGZvcGVuLgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLiAgV2hlbgogKiBjb25uZWN0aW9uIGlzIG5vdCBwcmVzZW50LCB0aGUgZGVmYXVsdCBjb25uZWN0aW9uCiAqIGlzIHVzZWQuIFRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gaXMgdGhlIGxhc3QgY29ubmVjdGlvbiBtYWRlIGJ5CiAqIHBnX2Nvbm5lY3Qgb3IgcGdfcGNvbm5lY3QuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX3RyYWNlKHN0cmluZyAkcGF0aG5hbWUsIHN0cmluZyAkbW9kZSA9ICJ3IiwgJGNvbm5lY3Rpb24gPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGNvbm5lY3Rpb24gIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX3RyYWNlKCRwYXRobmFtZSwgJG1vZGUsICRjb25uZWN0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ190cmFjZSgkcGF0aG5hbWUsICRtb2RlKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBwZ190dHkgcmV0dXJucyB0aGUgVFRZIG5hbWUgdGhhdCBzZXJ2ZXIKICogc2lkZSBkZWJ1Z2dpbmcgb3V0cHV0IGlzIHNlbnQgdG8gb24gdGhlIGdpdmVuIFBvc3RncmVTUUwKICogY29ubmVjdGlvbiByZXNvdXJjZS4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gIFdoZW4KICogY29ubmVjdGlvbiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiBwZ19jb25uZWN0IG9yIHBnX3Bjb25uZWN0LgogKiBAcmV0dXJuIHN0cmluZyBBIHN0cmluZyBjb250YWluaW5nIHRoZSBkZWJ1ZyBUVFkgb2YKICogdGhlIGNvbm5lY3Rpb24uCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX3R0eSgkY29ubmVjdGlvbiA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb25uZWN0aW9uICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ190dHkoJGNvbm5lY3Rpb24pOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX3R0eSgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogcGdfdXBkYXRlIHVwZGF0ZXMgcmVjb3JkcyB0aGF0IG1hdGNoZXMKICogY29uZGl0aW9uIHdpdGggZGF0YS4gSWYKICogb3B0aW9ucyBpcyBzcGVjaWZpZWQsCiAqIHBnX2NvbnZlcnQgaXMgYXBwbGllZCB0bwogKiBkYXRhIHdpdGggc3BlY2lmaWVkIG9wdGlvbnMuCiAqCiAqIHBnX3VwZGF0ZSB1cGRhdGVzIHJlY29yZHMgc3BlY2lmaWVkIGJ5CiAqIGFzc29jX2FycmF5IHdoaWNoIGhhcwogKiBmaWVsZD0mZ3Q7dmFsdWUuCiAqCiAqIElmIG9wdGlvbnMgaXMgc3BlY2lmaWVkLAogKiBwZ19jb252ZXJ0IGlzIGFwcGxpZWQgdG8KICogYXNzb2NfYXJyYXkgd2l0aCB0aGUgc3BlY2lmaWVkIGZsYWdzLgogKgogKiBCeSBkZWZhdWx0IHBnX3VwZGF0ZSBwYXNzZXMgcmF3IHZhbHVlcy4gVmFsdWVzCiAqIG11c3QgYmUgZXNjYXBlZCBvciBQR1NRTF9ETUxfRVNDQVBFIG9wdGlvbiBtdXN0IGJlCiAqIHNwZWNpZmllZC4gUEdTUUxfRE1MX0VTQ0FQRSBxdW90ZXMgYW5kIGVzY2FwZXMKICogcGFyYW1ldGVycy9pZGVudGlmaWVycy4gVGhlcmVmb3JlLCB0YWJsZS9jb2x1bW4gbmFtZXMgYmVjYW1lIGNhc2UKICogc2Vuc2l0aXZlLgogKgogKiBOb3RlIHRoYXQgbmVpdGhlciBlc2NhcGUgbm9yIHByZXBhcmVkIHF1ZXJ5IGNhbiBwcm90ZWN0IExJS0UgcXVlcnksCiAqIEpTT04sIEFycmF5LCBSZWdleCwgZXRjLiBUaGVzZSBwYXJhbWV0ZXJzIHNob3VsZCBiZSBoYW5kbGVkCiAqIGFjY29yZGluZyB0byB0aGVpciBjb250ZXh0cy4gaS5lLiBFc2NhcGUvdmFsaWRhdGUgdmFsdWVzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLgogKiBAcGFyYW0gc3RyaW5nICR0YWJsZV9uYW1lIE5hbWUgb2YgdGhlIHRhYmxlIGludG8gd2hpY2ggdG8gdXBkYXRlIHJvd3MuCiAqIEBwYXJhbSBhcnJheSAkZGF0YSBBbiBhcnJheSB3aG9zZSBrZXlzIGFyZSBmaWVsZCBuYW1lcyBpbiB0aGUgdGFibGUgdGFibGVfbmFtZSwKICogYW5kIHdob3NlIHZhbHVlcyBhcmUgd2hhdCBtYXRjaGVkIHJvd3MgYXJlIHRvIGJlIHVwZGF0ZWQgdG8uCiAqIEBwYXJhbSBhcnJheSAkY29uZGl0aW9uIEFuIGFycmF5IHdob3NlIGtleXMgYXJlIGZpZWxkIG5hbWVzIGluIHRoZSB0YWJsZSB0YWJsZV9uYW1lLAogKiBhbmQgd2hvc2UgdmFsdWVzIGFyZSB0aGUgY29uZGl0aW9ucyB0aGF0IGEgcm93IG11c3QgbWVldCB0byBiZSB1cGRhdGVkLgogKiBAcGFyYW0gaW50ICRvcHRpb25zIEFueSBudW1iZXIgb2YgUEdTUUxfQ09OVl9GT1JDRV9OVUxMLAogKiBQR1NRTF9ETUxfTk9fQ09OViwKICogUEdTUUxfRE1MX0VTQ0FQRSwKICogUEdTUUxfRE1MX0VYRUMsCiAqIFBHU1FMX0RNTF9BU1lOQyBvcgogKiBQR1NRTF9ETUxfU1RSSU5HIGNvbWJpbmVkLiBJZiBQR1NRTF9ETUxfU1RSSU5HIGlzIHBhcnQgb2YgdGhlCiAqIG9wdGlvbnMgdGhlbiBxdWVyeSBzdHJpbmcgaXMgcmV0dXJuZWQuIFdoZW4gUEdTUUxfRE1MX05PX0NPTlYKICogb3IgUEdTUUxfRE1MX0VTQ0FQRSBpcyBzZXQsIGl0IGRvZXMgbm90IGNhbGwgcGdfY29udmVydCBpbnRlcm5hbGx5LgogKiBAcmV0dXJuIG1peGVkIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLiAgUmV0dXJucyBzdHJpbmcgaWYgUEdTUUxfRE1MX1NUUklORyBpcyBwYXNzZWQKICogdmlhIG9wdGlvbnMuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX3VwZGF0ZSgkY29ubmVjdGlvbiwgc3RyaW5nICR0YWJsZV9uYW1lLCBhcnJheSAkZGF0YSwgYXJyYXkgJGNvbmRpdGlvbiwgaW50ICRvcHRpb25zID0gUEdTUUxfRE1MX0VYRUMpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccGdfdXBkYXRlKCRjb25uZWN0aW9uLCAkdGFibGVfbmFtZSwgJGRhdGEsICRjb25kaXRpb24sICRvcHRpb25zKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHBnX3ZlcnNpb24gcmV0dXJucyBhbiBhcnJheSB3aXRoIHRoZSBjbGllbnQsIHByb3RvY29sCiAqIGFuZCBzZXJ2ZXIgdmVyc2lvbi4gUHJvdG9jb2wgYW5kIHNlcnZlciB2ZXJzaW9ucyBhcmUgb25seSBhdmFpbGFibGUgaWYgUEhQCiAqIHdhcyBjb21waWxlZCB3aXRoIFBvc3RncmVTUUwgNy40IG9yIGxhdGVyLgogKgogKiBGb3IgbW9yZSBkZXRhaWxlZCBzZXJ2ZXIgaW5mb3JtYXRpb24sIHVzZSBwZ19wYXJhbWV0ZXJfc3RhdHVzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLiAgV2hlbgogKiBjb25uZWN0aW9uIGlzIG5vdCBwcmVzZW50LCB0aGUgZGVmYXVsdCBjb25uZWN0aW9uCiAqIGlzIHVzZWQuIFRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gaXMgdGhlIGxhc3QgY29ubmVjdGlvbiBtYWRlIGJ5CiAqIHBnX2Nvbm5lY3Qgb3IgcGdfcGNvbm5lY3QuCiAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBhbiBhcnJheSB3aXRoIGNsaWVudCwgcHJvdG9jb2wKICogYW5kIHNlcnZlciBrZXlzIGFuZCB2YWx1ZXMgKGlmIGF2YWlsYWJsZSkgb3IgaW52YWxpZCBjb25uZWN0aW9uLgogKiBAdGhyb3dzIFBnc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwZ192ZXJzaW9uKCRjb25uZWN0aW9uID0gbnVsbCk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkY29ubmVjdGlvbiAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfdmVyc2lvbigkY29ubmVjdGlvbik7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBccGdfdmVyc2lvbigpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/posix.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xQb3NpeEV4Y2VwdGlvbjsKCi8qKgogKiBwb3NpeF9hY2Nlc3MgY2hlY2tzIHRoZSB1c2VyJ3MgcGVybWlzc2lvbiBvZiBhIGZpbGUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGUgVGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgdGVzdGVkLgogKiBAcGFyYW0gaW50ICRtb2RlIEEgbWFzayBjb25zaXN0aW5nIG9mIG9uZSBvciBtb3JlIG9mIFBPU0lYX0ZfT0ssCiAqIFBPU0lYX1JfT0ssIFBPU0lYX1dfT0sgYW5kCiAqIFBPU0lYX1hfT0suCiAqCiAqIFBPU0lYX1JfT0ssIFBPU0lYX1dfT0sgYW5kCiAqIFBPU0lYX1hfT0sgcmVxdWVzdCBjaGVja2luZyB3aGV0aGVyIHRoZSBmaWxlCiAqIGV4aXN0cyBhbmQgaGFzIHJlYWQsIHdyaXRlIGFuZCBleGVjdXRlIHBlcm1pc3Npb25zLCByZXNwZWN0aXZlbHkuCiAqIFBPU0lYX0ZfT0sganVzdCByZXF1ZXN0cyBjaGVja2luZyBmb3IgdGhlCiAqIGV4aXN0ZW5jZSBvZiB0aGUgZmlsZS4KICogQHRocm93cyBQb3NpeEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcG9zaXhfYWNjZXNzKHN0cmluZyAkZmlsZSwgaW50ICRtb2RlID0gUE9TSVhfRl9PSyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwb3NpeF9hY2Nlc3MoJGZpbGUsICRtb2RlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBvc2l4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IGEgZ3JvdXAgcHJvdmlkZWQgaXRzIG5hbWUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIG5hbWUgb2YgdGhlIGdyb3VwCiAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBhbiBhcnJheSBvbiBzdWNjZXNzLgogKiBUaGUgYXJyYXkgZWxlbWVudHMgcmV0dXJuZWQgYXJlOgogKgogKiBUaGUgZ3JvdXAgaW5mb3JtYXRpb24gYXJyYXkKICoKICoKICoKICogRWxlbWVudAogKiBEZXNjcmlwdGlvbgogKgogKgogKgogKgogKiBuYW1lCiAqCiAqIFRoZSBuYW1lIGVsZW1lbnQgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGdyb3VwLiBUaGlzIGlzCiAqIGEgc2hvcnQsIHVzdWFsbHkgbGVzcyB0aGFuIDE2IGNoYXJhY3RlciAiaGFuZGxlIiBvZiB0aGUKICogZ3JvdXAsIG5vdCB0aGUgcmVhbCwgZnVsbCBuYW1lLiAgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgYXMKICogdGhlIG5hbWUgcGFyYW1ldGVyIHVzZWQgd2hlbgogKiBjYWxsaW5nIHRoZSBmdW5jdGlvbiwgYW5kIGhlbmNlIHJlZHVuZGFudC4KICoKICoKICoKICogcGFzc3dkCiAqCiAqIFRoZSBwYXNzd2QgZWxlbWVudCBjb250YWlucyB0aGUgZ3JvdXAncyBwYXNzd29yZCBpbiBhbgogKiBlbmNyeXB0ZWQgZm9ybWF0LiBPZnRlbiwgZm9yIGV4YW1wbGUgb24gYSBzeXN0ZW0gZW1wbG95aW5nCiAqICJzaGFkb3ciIHBhc3N3b3JkcywgYW4gYXN0ZXJpc2sgaXMgcmV0dXJuZWQgaW5zdGVhZC4KICoKICoKICoKICogZ2lkCiAqCiAqIEdyb3VwIElEIG9mIHRoZSBncm91cCBpbiBudW1lcmljIGZvcm0uCiAqCiAqCiAqCiAqIG1lbWJlcnMKICoKICogVGhpcyBjb25zaXN0cyBvZiBhbiBhcnJheSBvZgogKiBzdHJpbmcncyBmb3IgYWxsIHRoZSBtZW1iZXJzIGluIHRoZSBncm91cC4KICoKICoKICoKICoKICoKICogQHRocm93cyBQb3NpeEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcG9zaXhfZ2V0Z3JuYW0oc3RyaW5nICRuYW1lKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwb3NpeF9nZXRncm5hbSgkbmFtZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQb3NpeEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIHRoZSBwcm9jZXNzIGdyb3VwIGlkZW50aWZpZXIgb2YgdGhlIHByb2Nlc3MKICogcGlkLgogKgogKiBAcGFyYW0gaW50ICRwaWQgVGhlIHByb2Nlc3MgaWQuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIGlkZW50aWZpZXIsIGFzIGFuIGludGVnZXIuCiAqIEB0aHJvd3MgUG9zaXhFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBvc2l4X2dldHBnaWQoaW50ICRwaWQpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwb3NpeF9nZXRwZ2lkKCRwaWQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUG9zaXhFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQ2FsY3VsYXRlcyB0aGUgZ3JvdXAgYWNjZXNzIGxpc3QgZm9yIHRoZSB1c2VyIHNwZWNpZmllZCBpbiBuYW1lLgogKgogKiBAcGFyYW0gc3RyaW5nICRuYW1lIFRoZSB1c2VyIHRvIGNhbGN1bGF0ZSB0aGUgbGlzdCBmb3IuCiAqIEBwYXJhbSBpbnQgJGJhc2VfZ3JvdXBfaWQgVHlwaWNhbGx5IHRoZSBncm91cCBudW1iZXIgZnJvbSB0aGUgcGFzc3dvcmQgZmlsZS4KICogQHRocm93cyBQb3NpeEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcG9zaXhfaW5pdGdyb3VwcyhzdHJpbmcgJG5hbWUsIGludCAkYmFzZV9ncm91cF9pZCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwb3NpeF9pbml0Z3JvdXBzKCRuYW1lLCAkYmFzZV9ncm91cF9pZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQb3NpeEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2VuZCB0aGUgc2lnbmFsIHNpZyB0byB0aGUgcHJvY2VzcyB3aXRoCiAqIHRoZSBwcm9jZXNzIGlkZW50aWZpZXIgcGlkLgogKgogKiBAcGFyYW0gaW50ICRwaWQgVGhlIHByb2Nlc3MgaWRlbnRpZmllci4KICogQHBhcmFtIGludCAkc2lnIE9uZSBvZiB0aGUgUENOVEwgc2lnbmFscyBjb25zdGFudHMuCiAqIEB0aHJvd3MgUG9zaXhFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBvc2l4X2tpbGwoaW50ICRwaWQsIGludCAkc2lnKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBvc2l4X2tpbGwoJHBpZCwgJHNpZyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQb3NpeEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogcG9zaXhfbWtmaWZvIGNyZWF0ZXMgYSBzcGVjaWFsCiAqIEZJRk8gZmlsZSB3aGljaCBleGlzdHMgaW4gdGhlIGZpbGUgc3lzdGVtIGFuZCBhY3RzIGFzCiAqIGEgYmlkaXJlY3Rpb25hbCBjb21tdW5pY2F0aW9uIGVuZHBvaW50IGZvciBwcm9jZXNzZXMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhuYW1lIFBhdGggdG8gdGhlIEZJRk8gZmlsZS4KICogQHBhcmFtIGludCAkbW9kZSBUaGUgc2Vjb25kIHBhcmFtZXRlciBtb2RlIGhhcyB0byBiZSBnaXZlbiBpbgogKiBvY3RhbCBub3RhdGlvbiAoZS5nLiAwNjQ0KS4gVGhlIHBlcm1pc3Npb24gb2YgdGhlIG5ld2x5IGNyZWF0ZWQKICogRklGTyBhbHNvIGRlcGVuZHMgb24gdGhlIHNldHRpbmcgb2YgdGhlIGN1cnJlbnQKICogdW1hc2suIFRoZSBwZXJtaXNzaW9ucyBvZiB0aGUgY3JlYXRlZCBmaWxlIGFyZQogKiAobW9kZSAmYW1wOyB+dW1hc2spLgogKiBAdGhyb3dzIFBvc2l4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwb3NpeF9ta2ZpZm8oc3RyaW5nICRwYXRobmFtZSwgaW50ICRtb2RlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBvc2l4X21rZmlmbygkcGF0aG5hbWUsICRtb2RlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBvc2l4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBDcmVhdGVzIGEgc3BlY2lhbCBvciBvcmRpbmFyeSBmaWxlLgogKgogKiBAcGFyYW0gc3RyaW5nICRwYXRobmFtZSBUaGUgZmlsZSB0byBjcmVhdGUKICogQHBhcmFtIGludCAkbW9kZSBUaGlzIHBhcmFtZXRlciBpcyBjb25zdHJ1Y3RlZCBieSBhIGJpdHdpc2UgT1IgYmV0d2VlbiBmaWxlIHR5cGUgKG9uZSBvZgogKiB0aGUgZm9sbG93aW5nIGNvbnN0YW50czogUE9TSVhfU19JRlJFRywKICogUE9TSVhfU19JRkNIUiwgUE9TSVhfU19JRkJMSywKICogUE9TSVhfU19JRklGTyBvcgogKiBQT1NJWF9TX0lGU09DSykgYW5kIHBlcm1pc3Npb25zLgogKiBAcGFyYW0gaW50ICRtYWpvciBUaGUgbWFqb3IgZGV2aWNlIGtlcm5lbCBpZGVudGlmaWVyIChyZXF1aXJlZCB0byBwYXNzIHdoZW4gdXNpbmcKICogU19JRkNIUiBvciBTX0lGQkxLKS4KICogQHBhcmFtIGludCAkbWlub3IgVGhlIG1pbm9yIGRldmljZSBrZXJuZWwgaWRlbnRpZmllci4KICogQHRocm93cyBQb3NpeEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcG9zaXhfbWtub2Qoc3RyaW5nICRwYXRobmFtZSwgaW50ICRtb2RlLCBpbnQgJG1ham9yID0gMCwgaW50ICRtaW5vciA9IDApOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccG9zaXhfbWtub2QoJHBhdGhuYW1lLCAkbW9kZSwgJG1ham9yLCAkbWlub3IpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUG9zaXhFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldCB0aGUgZWZmZWN0aXZlIGdyb3VwIElEIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MuIFRoaXMgaXMgYQogKiBwcml2aWxlZ2VkIGZ1bmN0aW9uIGFuZCBuZWVkcyBhcHByb3ByaWF0ZSBwcml2aWxlZ2VzICh1c3VhbGx5CiAqIHJvb3QpIG9uIHRoZSBzeXN0ZW0gdG8gYmUgYWJsZSB0byBwZXJmb3JtIHRoaXMgZnVuY3Rpb24uCiAqCiAqIEBwYXJhbSBpbnQgJGdpZCBUaGUgZ3JvdXAgaWQuCiAqIEB0aHJvd3MgUG9zaXhFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBvc2l4X3NldGVnaWQoaW50ICRnaWQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccG9zaXhfc2V0ZWdpZCgkZ2lkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBvc2l4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXQgdGhlIGVmZmVjdGl2ZSB1c2VyIElEIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MuIFRoaXMgaXMgYSBwcml2aWxlZ2VkCiAqIGZ1bmN0aW9uIGFuZCBuZWVkcyBhcHByb3ByaWF0ZSBwcml2aWxlZ2VzICh1c3VhbGx5IHJvb3QpIG9uCiAqIHRoZSBzeXN0ZW0gdG8gYmUgYWJsZSB0byBwZXJmb3JtIHRoaXMgZnVuY3Rpb24uCiAqCiAqIEBwYXJhbSBpbnQgJHVpZCBUaGUgdXNlciBpZC4KICogQHRocm93cyBQb3NpeEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcG9zaXhfc2V0ZXVpZChpbnQgJHVpZCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwb3NpeF9zZXRldWlkKCR1aWQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUG9zaXhFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldCB0aGUgcmVhbCBncm91cCBJRCBvZiB0aGUgY3VycmVudCBwcm9jZXNzLiBUaGlzIGlzIGEKICogcHJpdmlsZWdlZCBmdW5jdGlvbiBhbmQgbmVlZHMgYXBwcm9wcmlhdGUgcHJpdmlsZWdlcyAodXN1YWxseQogKiByb290KSBvbiB0aGUgc3lzdGVtIHRvIGJlIGFibGUgdG8gcGVyZm9ybSB0aGlzIGZ1bmN0aW9uLiBUaGUKICogYXBwcm9wcmlhdGUgb3JkZXIgb2YgZnVuY3Rpb24gY2FsbHMgaXMKICogcG9zaXhfc2V0Z2lkIGZpcnN0LAogKiBwb3NpeF9zZXR1aWQgbGFzdC4KICoKICogQHBhcmFtIGludCAkZ2lkIFRoZSBncm91cCBpZC4KICogQHRocm93cyBQb3NpeEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcG9zaXhfc2V0Z2lkKGludCAkZ2lkKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBvc2l4X3NldGdpZCgkZ2lkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBvc2l4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBMZXQgdGhlIHByb2Nlc3MgcGlkIGpvaW4gdGhlIHByb2Nlc3MgZ3JvdXAKICogcGdpZC4KICoKICogQHBhcmFtIGludCAkcGlkIFRoZSBwcm9jZXNzIGlkLgogKiBAcGFyYW0gaW50ICRwZ2lkIFRoZSBwcm9jZXNzIGdyb3VwIGlkLgogKiBAdGhyb3dzIFBvc2l4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwb3NpeF9zZXRwZ2lkKGludCAkcGlkLCBpbnQgJHBnaWQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccG9zaXhfc2V0cGdpZCgkcGlkLCAkcGdpZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQb3NpeEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogcG9zaXhfc2V0cmxpbWl0IHNldHMgdGhlIHNvZnQgYW5kIGhhcmQgbGltaXRzIGZvciBhCiAqIGdpdmVuIHN5c3RlbSByZXNvdXJjZS4KICoKICoKICogRWFjaCByZXNvdXJjZSBoYXMgYW4gYXNzb2NpYXRlZCBzb2Z0IGFuZCBoYXJkIGxpbWl0LiAgVGhlIHNvZnQKICogbGltaXQgaXMgdGhlIHZhbHVlIHRoYXQgdGhlIGtlcm5lbCBlbmZvcmNlcyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcKICogcmVzb3VyY2UuICBUaGUgaGFyZCBsaW1pdCBhY3RzIGFzIGEgY2VpbGluZyBmb3IgdGhlIHNvZnQgbGltaXQuCiAqIEFuIHVucHJpdmlsZWdlZCBwcm9jZXNzIG1heSBvbmx5IHNldCBpdHMgc29mdCBsaW1pdCB0byBhIHZhbHVlCiAqIGZyb20gMCB0byB0aGUgaGFyZCBsaW1pdCwgYW5kIGlycmV2ZXJzaWJseSBsb3dlciBpdHMgaGFyZCBsaW1pdC4KICoKICogQHBhcmFtIGludCAkcmVzb3VyY2UgVGhlCiAqIHJlc291cmNlIGxpbWl0IGNvbnN0YW50CiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxpbWl0IHRoYXQgaXMgYmVpbmcgc2V0LgogKiBAcGFyYW0gaW50ICRzb2Z0bGltaXQgVGhlIHNvZnQgbGltaXQsIGluIHdoYXRldmVyIHVuaXQgdGhlIHJlc291cmNlIGxpbWl0IHJlcXVpcmVzLCBvcgogKiBQT1NJWF9STElNSVRfSU5GSU5JVFkuCiAqIEBwYXJhbSBpbnQgJGhhcmRsaW1pdCBUaGUgaGFyZCBsaW1pdCwgaW4gd2hhdGV2ZXIgdW5pdCB0aGUgcmVzb3VyY2UgbGltaXQgcmVxdWlyZXMsIG9yCiAqIFBPU0lYX1JMSU1JVF9JTkZJTklUWS4KICogQHRocm93cyBQb3NpeEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcG9zaXhfc2V0cmxpbWl0KGludCAkcmVzb3VyY2UsIGludCAkc29mdGxpbWl0LCBpbnQgJGhhcmRsaW1pdCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwb3NpeF9zZXRybGltaXQoJHJlc291cmNlLCAkc29mdGxpbWl0LCAkaGFyZGxpbWl0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBvc2l4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXQgdGhlIHJlYWwgdXNlciBJRCBvZiB0aGUgY3VycmVudCBwcm9jZXNzLiBUaGlzIGlzIGEgcHJpdmlsZWdlZAogKiBmdW5jdGlvbiB0aGF0IG5lZWRzIGFwcHJvcHJpYXRlIHByaXZpbGVnZXMgKHVzdWFsbHkgcm9vdCkgb24KICogdGhlIHN5c3RlbSB0byBiZSBhYmxlIHRvIHBlcmZvcm0gdGhpcyBmdW5jdGlvbi4KICoKICogQHBhcmFtIGludCAkdWlkIFRoZSB1c2VyIGlkLgogKiBAdGhyb3dzIFBvc2l4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwb3NpeF9zZXR1aWQoaW50ICR1aWQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccG9zaXhfc2V0dWlkKCR1aWQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUG9zaXhFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/ps.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xQc0V4Y2VwdGlvbjsKCi8qKgogKiBQbGFjZXMgYSBoeXBlcmxpbmsgYXQgdGhlIGdpdmVuIHBvc2l0aW9uIHBvaW50aW5nIHRvIGEgZmlsZSBwcm9ncmFtCiAqIHdoaWNoIGlzIGJlaW5nIHN0YXJ0ZWQgd2hlbiBjbGlja2VkIG9uLiBUaGUgaHlwZXJsaW5rJ3Mgc291cmNlIHBvc2l0aW9uCiAqIGlzIGEgcmVjdGFuZ2xlCiAqIHdpdGggaXRzIGxvd2VyIGxlZnQgY29ybmVyIGF0IChsbHgsIGxseSkgYW5kIGl0cyB1cHBlciByaWdodCBjb3JuZXIgYXQKICogKHVyeCwgdXJ5KS4gVGhlIHJlY3RhbmdsZSBoYXMgYnkgZGVmYXVsdCBhIHRoaW4gYmx1ZSBib3JkZXIuCiAqCiAqIFRoZSBub3RlIHdpbGwgbm90IGJlIHZpc2libGUgaWYgdGhlIGRvY3VtZW50CiAqIGlzIHByaW50ZWQgb3Igdmlld2VkIGJ1dCBpdCB3aWxsIHNob3cgdXAgaWYgdGhlIGRvY3VtZW50IGlzIGNvbnZlcnRlZCB0bwogKiBwZGYgYnkgZWl0aGVyIEFjcm9iYXQgRGlzdGlsbGVy4oSiIG9yIEdob3N0dmlldy4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gZmxvYXQgJGxseCBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBsb3dlciBsZWZ0IGNvcm5lci4KICogQHBhcmFtIGZsb2F0ICRsbHkgVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgbG93ZXIgbGVmdCBjb3JuZXIuCiAqIEBwYXJhbSBmbG9hdCAkdXJ4IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyIHJpZ2h0IGNvcm5lci4KICogQHBhcmFtIGZsb2F0ICR1cnkgVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXIgcmlnaHQgY29ybmVyLgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgcGF0aCBvZiB0aGUgcHJvZ3JhbSB0byBiZSBzdGFydGVkLCB3aGVuIHRoZSBsaW5rIGlzIGNsaWNrZWQgb24uCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX2FkZF9sYXVuY2hsaW5rKCRwc2RvYywgZmxvYXQgJGxseCwgZmxvYXQgJGxseSwgZmxvYXQgJHVyeCwgZmxvYXQgJHVyeSwgc3RyaW5nICRmaWxlbmFtZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19hZGRfbGF1bmNobGluaygkcHNkb2MsICRsbHgsICRsbHksICR1cngsICR1cnksICRmaWxlbmFtZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUGxhY2VzIGEgaHlwZXJsaW5rIGF0IHRoZSBnaXZlbiBwb3NpdGlvbiBwb2ludGluZyB0byBhIHBhZ2UgaW4gdGhlIHNhbWUKICogZG9jdW1lbnQuIENsaWNraW5nIG9uIHRoZSBsaW5rIHdpbGwganVtcCB0byB0aGUgZ2l2ZW4gcGFnZS4gVGhlIGZpcnN0IHBhZ2UKICogaW4gYSBkb2N1bWVudCBoYXMgbnVtYmVyIDEuCiAqCiAqIFRoZSBoeXBlcmxpbmsncyBzb3VyY2UgcG9zaXRpb24gaXMgYSByZWN0YW5nbGUgd2l0aCBpdHMgbG93ZXIgbGVmdCBjb3JuZXIgYXQKICogKGxseCwgbGx5KSBhbmQgaXRzIHVwcGVyCiAqIHJpZ2h0IGNvcm5lciBhdCAodXJ4LCB1cnkpLgogKiBUaGUgcmVjdGFuZ2xlIGhhcyBieSBkZWZhdWx0IGEgdGhpbiBibHVlIGJvcmRlci4KICoKICogVGhlIG5vdGUgd2lsbCBub3QgYmUgdmlzaWJsZSBpZiB0aGUgZG9jdW1lbnQKICogaXMgcHJpbnRlZCBvciB2aWV3ZWQgYnV0IGl0IHdpbGwgc2hvdyB1cCBpZiB0aGUgZG9jdW1lbnQgaXMgY29udmVydGVkIHRvCiAqIHBkZiBieSBlaXRoZXIgQWNyb2JhdCBEaXN0aWxsZXLihKIgb3IgR2hvc3R2aWV3LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEBwYXJhbSBmbG9hdCAkbGx4IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGxvd2VyIGxlZnQgY29ybmVyLgogKiBAcGFyYW0gZmxvYXQgJGxseSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBsb3dlciBsZWZ0IGNvcm5lci4KICogQHBhcmFtIGZsb2F0ICR1cnggVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXIgcmlnaHQgY29ybmVyLgogKiBAcGFyYW0gZmxvYXQgJHVyeSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSB1cHBlciByaWdodCBjb3JuZXIuCiAqIEBwYXJhbSBpbnQgJHBhZ2UgVGhlIG51bWJlciBvZiB0aGUgcGFnZSBkaXNwbGF5ZWQgd2hlbiBjbGlja2luZyBvbiB0aGUgbGluay4KICogQHBhcmFtIHN0cmluZyAkZGVzdCBUaGUgcGFyYW1ldGVyIGRlc3QgZGV0ZXJtaW5lcyBob3cgdGhlIGRvY3VtZW50CiAqIGlzIGJlaW5nIHZpZXdlZC4gSXQgY2FuIGJlIGZpdHBhZ2UsCiAqIGZpdHdpZHRoLCBmaXRoZWlnaHQsIG9yCiAqIGZpdGJib3guCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX2FkZF9sb2NhbGxpbmsoJHBzZG9jLCBmbG9hdCAkbGx4LCBmbG9hdCAkbGx5LCBmbG9hdCAkdXJ4LCBmbG9hdCAkdXJ5LCBpbnQgJHBhZ2UsIHN0cmluZyAkZGVzdCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19hZGRfbG9jYWxsaW5rKCRwc2RvYywgJGxseCwgJGxseSwgJHVyeCwgJHVyeSwgJHBhZ2UsICRkZXN0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBBZGRzIGEgbm90ZSBhdCBhIGNlcnRhaW4gcG9zaXRpb24gb24gdGhlIHBhZ2UuIE5vdGVzIGFyZSBsaWtlIGxpdHRsZQogKiByZWN0YW5ndWxhciBzaGVldHMgd2l0aCB0ZXh0IG9uIGl0LCB3aGljaCBjYW4gYmUgcGxhY2VkIGFueXdoZXJlIG9uCiAqIGEgcGFnZS4gVGhleQogKiBhcmUgc2hvd24gZWl0aGVyIGZvbGRlZCBvciB1bmZvbGRlZC4gSWYgZm9sZGVkLCB0aGUgc3BlY2lmaWVkIGljb24KICogaXMgdXNlZCBhcyBhIHBsYWNlaG9sZGVyLgogKgogKiBUaGUgbm90ZSB3aWxsIG5vdCBiZSB2aXNpYmxlIGlmIHRoZSBkb2N1bWVudAogKiBpcyBwcmludGVkIG9yIHZpZXdlZCBidXQgaXQgd2lsbCBzaG93IHVwIGlmIHRoZSBkb2N1bWVudCBpcyBjb252ZXJ0ZWQgdG8KICogcGRmIGJ5IGVpdGhlciBBY3JvYmF0IERpc3RpbGxlcuKEoiBvciBHaG9zdHZpZXcuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIGZsb2F0ICRsbHggVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgbG93ZXIgbGVmdCBjb3JuZXIuCiAqIEBwYXJhbSBmbG9hdCAkbGx5IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGxvd2VyIGxlZnQgY29ybmVyLgogKiBAcGFyYW0gZmxvYXQgJHVyeCBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSB1cHBlciByaWdodCBjb3JuZXIuCiAqIEBwYXJhbSBmbG9hdCAkdXJ5IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyIHJpZ2h0IGNvcm5lci4KICogQHBhcmFtIHN0cmluZyAkY29udGVudHMgVGhlIHRleHQgb2YgdGhlIG5vdGUuCiAqIEBwYXJhbSBzdHJpbmcgJHRpdGxlIFRoZSB0aXRsZSBvZiB0aGUgbm90ZSBhcyBkaXNwbGF5ZWQgaW4gdGhlIGhlYWRlciBvZiB0aGUgbm90ZS4KICogQHBhcmFtIHN0cmluZyAkaWNvbiBUaGUgaWNvbiBzaG93biBpZiB0aGUgbm90ZSBpcyBmb2xkZWQuIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBzZXQKICogdG8gY29tbWVudCwgaW5zZXJ0LAogKiBub3RlLCBwYXJhZ3JhcGgsCiAqIG5ld3BhcmFncmFwaCwga2V5LCBvcgogKiBoZWxwLgogKiBAcGFyYW0gaW50ICRvcGVuIElmIG9wZW4gaXMgdW5lcXVhbCB0byB6ZXJvIHRoZSBub3RlIHdpbGwKICogYmUgc2hvd24gdW5mb2xkZWQgYWZ0ZXIgb3BlbmluZyB0aGUgZG9jdW1lbnQgd2l0aCBhIHBkZiB2aWV3ZXIuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX2FkZF9ub3RlKCRwc2RvYywgZmxvYXQgJGxseCwgZmxvYXQgJGxseSwgZmxvYXQgJHVyeCwgZmxvYXQgJHVyeSwgc3RyaW5nICRjb250ZW50cywgc3RyaW5nICR0aXRsZSwgc3RyaW5nICRpY29uLCBpbnQgJG9wZW4pOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfYWRkX25vdGUoJHBzZG9jLCAkbGx4LCAkbGx5LCAkdXJ4LCAkdXJ5LCAkY29udGVudHMsICR0aXRsZSwgJGljb24sICRvcGVuKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBQbGFjZXMgYSBoeXBlcmxpbmsgYXQgdGhlIGdpdmVuIHBvc2l0aW9uIHBvaW50aW5nIHRvIGEgc2Vjb25kIHBkZiBkb2N1bWVudC4KICogQ2xpY2tpbmcgb24gdGhlIGxpbmsgd2lsbCBicmFuY2ggdG8gdGhlIGRvY3VtZW50IGF0IHRoZSBnaXZlbiBwYWdlLiBUaGUKICogZmlyc3QgcGFnZSBpbiBhIGRvY3VtZW50IGhhcyBudW1iZXIgMS4KICoKICogVGhlIGh5cGVybGluaydzIHNvdXJjZSBwb3NpdGlvbiBpcyBhIHJlY3RhbmdsZSB3aXRoIGl0cyBsb3dlciBsZWZ0IGNvcm5lciBhdAogKiAobGx4LCBsbHkpIGFuZCBpdHMgdXBwZXIKICogcmlnaHQgY29ybmVyIGF0ICh1cngsIHVyeSkuCiAqIFRoZSByZWN0YW5nbGUgaGFzIGJ5IGRlZmF1bHQgYSB0aGluIGJsdWUgYm9yZGVyLgogKgogKiBUaGUgbm90ZSB3aWxsIG5vdCBiZSB2aXNpYmxlIGlmIHRoZSBkb2N1bWVudAogKiBpcyBwcmludGVkIG9yIHZpZXdlZCBidXQgaXQgd2lsbCBzaG93IHVwIGlmIHRoZSBkb2N1bWVudCBpcyBjb252ZXJ0ZWQgdG8KICogcGRmIGJ5IGVpdGhlciBBY3JvYmF0IERpc3RpbGxlcuKEoiBvciBHaG9zdHZpZXcuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIGZsb2F0ICRsbHggVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgbG93ZXIgbGVmdCBjb3JuZXIuCiAqIEBwYXJhbSBmbG9hdCAkbGx5IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGxvd2VyIGxlZnQgY29ybmVyLgogKiBAcGFyYW0gZmxvYXQgJHVyeCBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSB1cHBlciByaWdodCBjb3JuZXIuCiAqIEBwYXJhbSBmbG9hdCAkdXJ5IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyIHJpZ2h0IGNvcm5lci4KICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgVGhlIG5hbWUgb2YgdGhlIHBkZiBkb2N1bWVudCB0byBiZSBvcGVuZWQgd2hlbiBjbGlja2luZyBvbgogKiB0aGlzIGxpbmsuCiAqIEBwYXJhbSBpbnQgJHBhZ2UgVGhlIHBhZ2UgbnVtYmVyIG9mIHRoZSBkZXN0aW5hdGlvbiBwZGYgZG9jdW1lbnQKICogQHBhcmFtIHN0cmluZyAkZGVzdCBUaGUgcGFyYW1ldGVyIGRlc3QgZGV0ZXJtaW5lcyBob3cgdGhlIGRvY3VtZW50CiAqIGlzIGJlaW5nIHZpZXdlZC4gSXQgY2FuIGJlIGZpdHBhZ2UsCiAqIGZpdHdpZHRoLCBmaXRoZWlnaHQsIG9yCiAqIGZpdGJib3guCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX2FkZF9wZGZsaW5rKCRwc2RvYywgZmxvYXQgJGxseCwgZmxvYXQgJGxseSwgZmxvYXQgJHVyeCwgZmxvYXQgJHVyeSwgc3RyaW5nICRmaWxlbmFtZSwgaW50ICRwYWdlLCBzdHJpbmcgJGRlc3QpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfYWRkX3BkZmxpbmsoJHBzZG9jLCAkbGx4LCAkbGx5LCAkdXJ4LCAkdXJ5LCAkZmlsZW5hbWUsICRwYWdlLCAkZGVzdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUGxhY2VzIGEgaHlwZXJsaW5rIGF0IHRoZSBnaXZlbiBwb3NpdGlvbiBwb2ludGluZyB0byBhIHdlYiBwYWdlLiBUaGUKICogaHlwZXJsaW5rJ3Mgc291cmNlIHBvc2l0aW9uIGlzIGEgcmVjdGFuZ2xlIHdpdGggaXRzIGxvd2VyIGxlZnQgY29ybmVyIGF0CiAqIChsbHgsIGxseSkgYW5kCiAqIGl0cyB1cHBlciByaWdodCBjb3JuZXIgYXQgKHVyeCwKICogdXJ5KS4gVGhlIHJlY3RhbmdsZSBoYXMgYnkgZGVmYXVsdCBhIHRoaW4KICogYmx1ZSBib3JkZXIuCiAqCiAqIFRoZSBub3RlIHdpbGwgbm90IGJlIHZpc2libGUgaWYgdGhlIGRvY3VtZW50CiAqIGlzIHByaW50ZWQgb3Igdmlld2VkIGJ1dCBpdCB3aWxsIHNob3cgdXAgaWYgdGhlIGRvY3VtZW50IGlzIGNvbnZlcnRlZCB0bwogKiBwZGYgYnkgZWl0aGVyIEFjcm9iYXQgRGlzdGlsbGVy4oSiIG9yIEdob3N0dmlldy4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gZmxvYXQgJGxseCBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBsb3dlciBsZWZ0IGNvcm5lci4KICogQHBhcmFtIGZsb2F0ICRsbHkgVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgbG93ZXIgbGVmdCBjb3JuZXIuCiAqIEBwYXJhbSBmbG9hdCAkdXJ4IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyIHJpZ2h0IGNvcm5lci4KICogQHBhcmFtIGZsb2F0ICR1cnkgVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXIgcmlnaHQgY29ybmVyLgogKiBAcGFyYW0gc3RyaW5nICR1cmwgVGhlIHVybCBvZiB0aGUgaHlwZXJsaW5rIHRvIGJlIG9wZW5lZCB3aGVuIGNsaWNraW5nIG9uCiAqIHRoaXMgbGluaywgZS5nLiBodHRwOi8vd3d3LnBocC5uZXQuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX2FkZF93ZWJsaW5rKCRwc2RvYywgZmxvYXQgJGxseCwgZmxvYXQgJGxseSwgZmxvYXQgJHVyeCwgZmxvYXQgJHVyeSwgc3RyaW5nICR1cmwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfYWRkX3dlYmxpbmsoJHBzZG9jLCAkbGx4LCAkbGx5LCAkdXJ4LCAkdXJ5LCAkdXJsKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBEcmF3cyBhIHBvcnRpb24gb2YgYSBjaXJjbGUgd2l0aCBhdCBtaWRkbGUgcG9pbnQgYXQKICogKHgsIHkpLiBUaGUgYXJjIHN0YXJ0cyBhdCBhbgogKiBhbmdsZSBvZiBhbHBoYSBhbmQgZW5kcyBhdCBhbiBhbmdsZSBvZgogKiBiZXRhLiBJdCBpcyBkcmF3biBjb3VudGVyY2xvY2t3aXNlICh1c2UKICogcHNfYXJjbiB0byBkcmF3IGNsb2Nrd2lzZSkuIFRoZSBzdWJwYXRoIGFkZGVkCiAqIHRvIHRoZSBjdXJyZW50IHBhdGggc3RhcnRzIG9uIHRoZSBhcmMgYXQgYW5nbGUgYWxwaGEKICogYW5kIGVuZHMgb24gdGhlIGFyYyBhdCBhbmdsZSBiZXRhLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEBwYXJhbSBmbG9hdCAkeCBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBjaXJjbGUncyBtaWRkbGUgcG9pbnQuCiAqIEBwYXJhbSBmbG9hdCAkeSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBjaXJjbGUncyBtaWRkbGUgcG9pbnQuCiAqIEBwYXJhbSBmbG9hdCAkcmFkaXVzIFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZQogKiBAcGFyYW0gZmxvYXQgJGFscGhhIFRoZSBzdGFydCBhbmdsZSBnaXZlbiBpbiBkZWdyZWVzLgogKiBAcGFyYW0gZmxvYXQgJGJldGEgVGhlIGVuZCBhbmdsZSBnaXZlbiBpbiBkZWdyZWVzLgogKiBAdGhyb3dzIFBzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc19hcmMoJHBzZG9jLCBmbG9hdCAkeCwgZmxvYXQgJHksIGZsb2F0ICRyYWRpdXMsIGZsb2F0ICRhbHBoYSwgZmxvYXQgJGJldGEpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfYXJjKCRwc2RvYywgJHgsICR5LCAkcmFkaXVzLCAkYWxwaGEsICRiZXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBEcmF3cyBhIHBvcnRpb24gb2YgYSBjaXJjbGUgd2l0aCBhdCBtaWRkbGUgcG9pbnQgYXQKICogKHgsIHkpLiBUaGUgYXJjIHN0YXJ0cyBhdCBhbgogKiBhbmdsZSBvZiBhbHBoYSBhbmQgZW5kcyBhdCBhbiBhbmdsZSBvZgogKiBiZXRhLiBJdCBpcyBkcmF3biBjbG9ja3dpc2UgKHVzZQogKiBwc19hcmMgdG8gZHJhdyBjb3VudGVyY2xvY2t3aXNlKS4gVGhlIHN1YnBhdGggYWRkZWQgdG8KICogdGhlIGN1cnJlbnQgcGF0aCBzdGFydHMgb24gdGhlIGFyYyBhdCBhbmdsZSBiZXRhIGFuZAogKiBlbmRzIG9uIHRoZSBhcmMgYXQgYW5nbGUgYWxwaGEuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIGZsb2F0ICR4IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGNpcmNsZSdzIG1pZGRsZSBwb2ludC4KICogQHBhcmFtIGZsb2F0ICR5IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGNpcmNsZSdzIG1pZGRsZSBwb2ludC4KICogQHBhcmFtIGZsb2F0ICRyYWRpdXMgVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlCiAqIEBwYXJhbSBmbG9hdCAkYWxwaGEgVGhlIHN0YXJ0aW5nIGFuZ2xlIGdpdmVuIGluIGRlZ3JlZXMuCiAqIEBwYXJhbSBmbG9hdCAkYmV0YSBUaGUgZW5kIGFuZ2xlIGdpdmVuIGluIGRlZ3JlZXMuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX2FyY24oJHBzZG9jLCBmbG9hdCAkeCwgZmxvYXQgJHksIGZsb2F0ICRyYWRpdXMsIGZsb2F0ICRhbHBoYSwgZmxvYXQgJGJldGEpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfYXJjbigkcHNkb2MsICR4LCAkeSwgJHJhZGl1cywgJGFscGhhLCAkYmV0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU3RhcnRzIGEgbmV3IHBhZ2UuIEFsdGhvdWdoIHRoZSBwYXJhbWV0ZXJzIHdpZHRoCiAqIGFuZCBoZWlnaHQgaW1wbHkgYSBkaWZmZXJlbnQgcGFnZSBzaXplIGZvciBlYWNoCiAqIHBhZ2UsIHRoaXMgaXMgbm90IHBvc3NpYmxlIGluIFBvc3RTY3JpcHQuIFRoZSBmaXJzdCBjYWxsIG9mCiAqIHBzX2JlZ2luX3BhZ2Ugd2lsbCBzZXQgdGhlIHBhZ2Ugc2l6ZSBmb3IgdGhlIHdob2xlCiAqIGRvY3VtZW50LiBDb25zZWN1dGl2ZSBjYWxscyB3aWxsIGhhdmUgbm8gZWZmZWN0LCBleGNlcHQgZm9yIGNyZWF0aW5nIGEgbmV3CiAqIHBhZ2UuIFRoZSBzaXR1YXRpb24gaXMgZGlmZmVyZW50IGlmIHlvdSBpbnRlbnQgdG8gY29udmVydCB0aGUgUG9zdFNjcmlwdAogKiBkb2N1bWVudCBpbnRvIFBERi4gVGhpcyBmdW5jdGlvbiBwbGFjZXMgcGRmbWFya3MgaW50byB0aGUgZG9jdW1lbnQgd2hpY2gKICogY2FuIHNldCB0aGUgc2l6ZSBmb3IgZWFjaCBwYWdlIGluZGl2aXVhbGx5LiBUaGUgcmVzdWx0aW5nIFBERiBkb2N1bWVudCB3aWxsCiAqIGhhdmUgZGlmZmVyZW50IHBhZ2Ugc2l6ZXMuCiAqCiAqIFRob3VnaCBQb3N0U2NyaXB0IGRvZXMgbm90IGtub3cgZGlmZmVyZW50IHBhZ2Ugc2l6ZXMsIHBzbGliIHBsYWNlcwogKiBhIGJvdW5kaW5nIGJveCBmb3IgZWFjaCBwYWdlIGludG8gdGhlIGRvY3VtZW50LiBUaGlzIHNpemUgaXMgZXZhbHVhdGVkCiAqIGJ5IHNvbWUgUG9zdFNjcmlwdCB2aWV3ZXJzIGFuZCB3aWxsIGhhdmUgcHJlY2VkZW5jZSBvdmVyIHRoZSBCb3VuZGluZ0JveAogKiBpbiB0aGUgSGVhZGVyIG9mIHRoZSBkb2N1bWVudC4gVGhpcyBjYW4gbGVhZCB0byB1bmV4cGVjdGVkIHJlc3VsdHMgd2hlbgogKiB5b3Ugc2V0IGEgQm91bmRpbmdCb3ggd2hvc2UgbG93ZXIgbGVmdCBjb3JuZXIgaXMgbm90ICgwLCAwKSwgYmVjYXVzZSB0aGUKICogYm91bmRpbmcgYm94IG9mIHRoZSBwYWdlIHdpbGwgYWx3YXlzIGhhdmUgYSBsb3dlciBsZWZ0IGNvcm5lciAoMCwgMCkKICogYW5kIG92ZXJ3cml0ZXMgdGhlIGdsb2JhbCBzZXR0aW5nLgogKgogKiBFYWNoIHBhZ2UgaXMgZW5jYXBzdWxhdGVkIGludG8gc2F2ZS9yZXN0b3JlLiBUaGlzIG1lYW5zLCB0aGF0IG1vc3Qgb2YgdGhlCiAqIHNldHRpbmdzIG1hZGUgb24gb25lIHBhZ2Ugd2lsbCBub3QgYmUgcmV0YWluZWQgb24gdGhlIG5leHQgcGFnZS4KICoKICogSWYgdGhlcmUgaXMgdXAgdG8gdGhlIGZpcnN0IGNhbGwgb2YgcHNfYmVnaW5fcGFnZSBubwogKiBjYWxsIG9mIHBzX2ZpbmRmb250LCB0aGVuIHRoZSBoZWFkZXIgb2YgdGhlIFBvc3RTY3JpcHQKICogZG9jdW1lbnQgd2lsbCBiZSBvdXRwdXQgYW5kIHRoZSBib3VuZGluZyBib3ggd2lsbCBiZSBzZXQgdG8gdGhlIHNpemUgb2YKICogdGhlIGZpcnN0IHBhZ2UuIFRoZSBsb3dlciBsZWZ0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgYm94IGlzIHNldCB0byAoMCwgMCkuCiAqIElmIHBzX2ZpbmRmb250IHdhcyBjYWxsZWQgYmVmb3JlLCB0aGVuIHRoZQogKiBoZWFkZXIgaGFzIGJlZW4gb3V0cHV0IGFscmVhZHksIGFuZCB0aGUgZG9jdW1lbnQgd2lsbCBub3QgaGF2ZSBhIHZhbGlkCiAqIGJvdW5kaW5nIGJveC4gSW4gb3JkZXIgdG8gcHJldmVudCB0aGlzLCBvbmUgc2hvdWxkIGNhbGwKICogcHNfc2V0X2luZm8gdG8gc2V0IHRoZSBpbmZvIGZpZWxkCiAqIEJvdW5kaW5nQm94IGFuZCBwb3NzaWJseSBPcmllbnRhdGlvbgogKiBiZWZvcmUgYW55IHBzX2ZpbmRmb250IG9yCiAqIHBzX2JlZ2luX3BhZ2UgY2FsbHMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIGZsb2F0ICR3aWR0aCBUaGUgd2lkdGggb2YgdGhlIHBhZ2UgaW4gcGl4ZWwsIGUuZy4gNTk2IGZvciBBNCBmb3JtYXQuCiAqIEBwYXJhbSBmbG9hdCAkaGVpZ2h0IFRoZSBoZWlnaHQgb2YgdGhlIHBhZ2UgaW4gcGl4ZWwsIGUuZy4gODQyIGZvciBBNCBmb3JtYXQuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX2JlZ2luX3BhZ2UoJHBzZG9jLCBmbG9hdCAkd2lkdGgsIGZsb2F0ICRoZWlnaHQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfYmVnaW5fcGFnZSgkcHNkb2MsICR3aWR0aCwgJGhlaWdodCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU3RhcnRzIGEgbmV3IHBhdHRlcm4uIEEgcGF0dGVybiBpcyBsaWtlIGEgcGFnZSBjb250YWluaW5nIGUuZy4gYSBkcmF3aW5nCiAqIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBmaWxsaW5nIGFyZWFzLiBJdCBpcyB1c2VkIGxpa2UgYSBjb2xvciBieSBjYWxsaW5nCiAqIHBzX3NldGNvbG9yIGFuZCBzZXR0aW5nIHRoZSBjb2xvciBzcGFjZSB0bwogKiBwYXR0ZXJuLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEBwYXJhbSBmbG9hdCAkd2lkdGggVGhlIHdpZHRoIG9mIHRoZSBwYXR0ZXJuIGluIHBpeGVsLgogKiBAcGFyYW0gZmxvYXQgJGhlaWdodCBUaGUgaGVpZ2h0IG9mIHRoZSBwYXR0ZXJuIGluIHBpeGVsLgogKiBAcGFyYW0gZmxvYXQgJHhzdGVwIFRoZSBkaXN0YW5jZSBpbiBwaXhlbCBvZiBwbGFjZW1lbnRzIG9mIHRoZSBwYXR0ZXJuIGluCiAqIGhvcml6b250YWwgZGlyZWN0aW9uLgogKiBAcGFyYW0gZmxvYXQgJHlzdGVwIFRoZSBkaXN0YW5jZSBpbiBwaXhlbCBvZiBwbGFjZW1lbnRzIG9mIHRoZSBwYXR0ZXJuIGluCiAqIHZlcnRpY2FsIGRpcmVjdGlvbi4KICogQHBhcmFtIGludCAkcGFpbnR0eXBlIE11c3QgYmUgMSBvciAyLgogKiBAcmV0dXJuIGludCBUaGUgaWRlbnRpZmllciBvZiB0aGUgcGF0dGVybi4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfYmVnaW5fcGF0dGVybigkcHNkb2MsIGZsb2F0ICR3aWR0aCwgZmxvYXQgJGhlaWdodCwgZmxvYXQgJHhzdGVwLCBmbG9hdCAkeXN0ZXAsIGludCAkcGFpbnR0eXBlKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfYmVnaW5fcGF0dGVybigkcHNkb2MsICR3aWR0aCwgJGhlaWdodCwgJHhzdGVwLCAkeXN0ZXAsICRwYWludHR5cGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogU3RhcnRzIGEgbmV3IHRlbXBsYXRlLiBBIHRlbXBsYXRlIGlzIGNhbGxlZCBhIGZvcm0gaW4gdGhlIHBvc3RzY3JpcHQKICogbGFuZ3VhZ2UuIEl0IGlzIGNyZWF0ZWQgc2ltaWxhciB0byBhIHBhdHRlcm4gYnV0IHVzZWQgbGlrZSBhbiBpbWFnZS4KICogVGVtcGxhdGVzIGFyZSBvZnRlbiB1c2VkIGZvciBkcmF3aW5ncyB3aGljaCBhcmUgcGxhY2VkIHNldmVyYWwgdGltZXMKICogdGhyb3VnaCBvdXQgdGhlIGRvY3VtZW50LCBlLmcuIGxpa2UgYSBjb21wYW55IGxvZ28uIEFsbCBkcmF3aW5nIGZ1bmN0aW9ucwogKiBtYXkgYmUgdXNlZCB3aXRoaW4gYSB0ZW1wbGF0ZS4gVGhlIHRlbXBsYXRlIHdpbGwgbm90IGJlIGRyYXduIHVudGlsCiAqIGl0IGlzIHBsYWNlZCBieSBwc19wbGFjZV9pbWFnZS4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gZmxvYXQgJHdpZHRoIFRoZSB3aWR0aCBvZiB0aGUgdGVtcGxhdGUgaW4gcGl4ZWwuCiAqIEBwYXJhbSBmbG9hdCAkaGVpZ2h0IFRoZSBoZWlnaHQgb2YgdGhlIHRlbXBsYXRlIGluIHBpeGVsLgogKiBAcmV0dXJuIGludCBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfYmVnaW5fdGVtcGxhdGUoJHBzZG9jLCBmbG9hdCAkd2lkdGgsIGZsb2F0ICRoZWlnaHQpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19iZWdpbl90ZW1wbGF0ZSgkcHNkb2MsICR3aWR0aCwgJGhlaWdodCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBEcmF3cyBhIGNpcmNsZSB3aXRoIGl0cyBtaWRkbGUgcG9pbnQgYXQgKHgsCiAqIHkpLiBUaGUgY2lyY2xlIHN0YXJ0cyBhbmQgZW5kcyBhdCBwb3NpdGlvbgogKiAoeCtyYWRpdXMsCiAqIHkpLiBJZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvdXRzaWRlIGEgcGF0aCBpdAogKiB3aWxsIHN0YXJ0IGEgbmV3IHBhdGguIElmIGl0IGlzIGNhbGxlZCB3aXRoaW4gYSBwYXRoIGl0IHdpbGwgYWRkIHRoZSBjaXJjbGUKICogYXMgYSBzdWJwYXRoLiBJZiB0aGUgbGFzdCBkcmF3aW5nIG9wZXJhdGlvbiBkb2VzIG5vdCBlbmQgaW4gcG9pbnQKICogKHgrcmFkaXVzLAogKiB5KSB0aGVuIHRoZXJlIHdpbGwgYmUgYSBnYXAgaW4gdGhlIHBhdGguCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIGZsb2F0ICR4IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGNpcmNsZSdzIG1pZGRsZSBwb2ludC4KICogQHBhcmFtIGZsb2F0ICR5IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGNpcmNsZSdzIG1pZGRsZSBwb2ludC4KICogQHBhcmFtIGZsb2F0ICRyYWRpdXMgVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX2NpcmNsZSgkcHNkb2MsIGZsb2F0ICR4LCBmbG9hdCAkeSwgZmxvYXQgJHJhZGl1cyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19jaXJjbGUoJHBzZG9jLCAkeCwgJHksICRyYWRpdXMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRha2VzIHRoZSBjdXJyZW50IHBhdGggYW5kIHVzZXMgaXQgdG8gZGVmaW5lIHRoZSBib3JkZXIgb2YgYSBjbGlwcGluZyBhcmVhLgogKiBFdmVyeXRoaW5nIGRyYXduIG91dHNpZGUgb2YgdGhhdCBhcmVhIHdpbGwgbm90IGJlIHZpc2libGUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfY2xpcCgkcHNkb2MpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfY2xpcCgkcHNkb2MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENsb3NlcyBhbiBpbWFnZSBhbmQgZnJlZXMgaXRzIHJlc291cmNlcy4gT25jZSBhbiBpbWFnZSBpcyBjbG9zZWQKICogaXQgY2Fubm90IGJlIHVzZWQgYW55bW9yZS4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gaW50ICRpbWFnZWlkIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIGltYWdlIGFzIHJldHVybmVkIGJ5CiAqIHBzX29wZW5faW1hZ2Ugb3IKICogcHNfb3Blbl9pbWFnZV9maWxlLgogKiBAdGhyb3dzIFBzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc19jbG9zZV9pbWFnZSgkcHNkb2MsIGludCAkaW1hZ2VpZCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19jbG9zZV9pbWFnZSgkcHNkb2MsICRpbWFnZWlkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBDbG9zZXMgdGhlIFBvc3RTY3JpcHQgZG9jdW1lbnQuCiAqCiAqIFRoaXMgZnVuY3Rpb24gd3JpdGVzIHRoZSB0cmFpbGVyIG9mIHRoZSBQb3N0U2NyaXB0IGRvY3VtZW50LgogKiBJdCBhbHNvIHdyaXRlcyB0aGUgYm9va21hcmsgdHJlZS4gcHNfY2xvc2UgZG9lcwogKiBub3QgZnJlZSBhbnkgcmVzb3VyY2VzLCB3aGljaCBpcyBkb25lIGJ5IHBzX2RlbGV0ZS4KICoKICogVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCBieSBwc19kZWxldGUgaWYgaXQKICogaGFzIG5vdCBiZWVuIGNhbGxlZCBiZWZvcmUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfY2xvc2UoJHBzZG9jKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX2Nsb3NlKCRwc2RvYyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ29ubmVjdHMgdGhlIGxhc3QgcG9pbnQgd2l0aCBmaXJzdCBwb2ludCBvZiBhIHBhdGggYW5kIGRyYXdzIHRoZSByZXN1bHRpbmcKICogY2xvc2VkIGxpbmUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfY2xvc2VwYXRoX3N0cm9rZSgkcHNkb2MpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfY2xvc2VwYXRoX3N0cm9rZSgkcHNkb2MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENvbm5lY3RzIHRoZSBsYXN0IHBvaW50IHdpdGggdGhlIGZpcnN0IHBvaW50IG9mIGEgcGF0aC4gVGhlIHJlc3VsdGluZwogKiBwYXRoIGNhbiBiZSB1c2VkIGZvciBzdHJva2luZywgZmlsbGluZywgY2xpcHBpbmcsIGV0Yy4uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfY2xvc2VwYXRoKCRwc2RvYyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19jbG9zZXBhdGgoJHBzZG9jKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBPdXRwdXQgYSB0ZXh0IG9uZSBsaW5lIGJlbG93IHRoZSBsYXN0IGxpbmUuIFRoZSBsaW5lIHNwYWNpbmcgaXMKICogdGFrZW4gZnJvbSB0aGUgdmFsdWUgImxlYWRpbmciIHdoaWNoIG11c3QgYmUgc2V0IHdpdGgKICogcHNfc2V0X3ZhbHVlLiBUaGUgYWN0dWFsIHBvc2l0aW9uIG9mIHRoZQogKiB0ZXh0IGlzIGRldGVybWluZWQgYnkgdGhlIHZhbHVlcyAidGV4dHgiIGFuZCAidGV4dHkiIHdoaWNoIGNhbiBiZSByZXF1ZXN0ZWQKICogd2l0aCBwc19nZXRfdmFsdWUKICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gc3RyaW5nICR0ZXh0IFRoZSB0ZXh0IHRvIG91dHB1dC4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfY29udGludWVfdGV4dCgkcHNkb2MsIHN0cmluZyAkdGV4dCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19jb250aW51ZV90ZXh0KCRwc2RvYywgJHRleHQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEFkZCBhIHNlY3Rpb24gb2YgYSBjdWJpYyBCw6l6aWVyIGN1cnZlIGRlc2NyaWJlZCBieSB0aGUgdGhyZWUgZ2l2ZW4gY29udHJvbAogKiBwb2ludHMgdG8gdGhlIGN1cnJlbnQgcGF0aC4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gZmxvYXQgJHgxIHgtY29vcmRpbmF0ZSBvZiBmaXJzdCBjb250cm9sIHBvaW50LgogKiBAcGFyYW0gZmxvYXQgJHkxIHktY29vcmRpbmF0ZSBvZiBmaXJzdCBjb250cm9sIHBvaW50LgogKiBAcGFyYW0gZmxvYXQgJHgyIHgtY29vcmRpbmF0ZSBvZiBzZWNvbmQgY29udHJvbCBwb2ludC4KICogQHBhcmFtIGZsb2F0ICR5MiB5LWNvb3JkaW5hdGUgb2Ygc2Vjb25kIGNvbnRyb2wgcG9pbnQuCiAqIEBwYXJhbSBmbG9hdCAkeDMgeC1jb29yZGluYXRlIG9mIHRoaXJkIGNvbnRyb2wgcG9pbnQuCiAqIEBwYXJhbSBmbG9hdCAkeTMgeS1jb29yZGluYXRlIG9mIHRoaXJkIGNvbnRyb2wgcG9pbnQuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX2N1cnZldG8oJHBzZG9jLCBmbG9hdCAkeDEsIGZsb2F0ICR5MSwgZmxvYXQgJHgyLCBmbG9hdCAkeTIsIGZsb2F0ICR4MywgZmxvYXQgJHkzKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX2N1cnZldG8oJHBzZG9jLCAkeDEsICR5MSwgJHgyLCAkeTIsICR4MywgJHkzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBNYWlubHkgZnJlZXMgbWVtb3J5IHVzZWQgYnkgdGhlIGRvY3VtZW50LiBBbHNvIGNsb3NlcyBhIGZpbGUsIGlmIGl0IHdhcyBub3QKICogY2xvc2VkIGJlZm9yZSB3aXRoIHBzX2Nsb3NlLiBZb3Ugc2hvdWxkIGluIGFueSBjYXNlCiAqIGNsb3NlIHRoZSBmaWxlIHdpdGggcHNfY2xvc2UgYmVmb3JlLCBiZWNhdXNlCiAqIHBzX2Nsb3NlIG5vdCBqdXN0IGNsb3NlcyB0aGUgZmlsZSBidXQgYWxzbyBvdXRwdXRzIGEKICogdHJhaWxvciBjb250YWluaW5nIFBvc3RTY3JpcHQgY29tbWVudHMgbGlrZSB0aGUgbnVtYmVyIG9mIHBhZ2VzIGluIHRoZQogKiBkb2N1bWVudCBhbmQgYWRkaW5nIHRoZSBib29rbWFyayBoaWVyYXJjaHkuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfZGVsZXRlKCRwc2RvYyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19kZWxldGUoJHBzZG9jKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBFbmRzIGEgcGFnZSB3aGljaCB3YXMgc3RhcnRlZCB3aXRoIHBzX2JlZ2luX3BhZ2UuCiAqIEVuZGluZyBhIHBhZ2Ugd2lsbCBsZWF2ZSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHQsIHdoaWNoIGUuZy4gcmVxdWlyZXMKICogdG8gcmVsb2FkIGZvbnRzIGlmIHRoZXkgd2VyZSBsb2FkaW5nIHdpdGhpbiB0aGUgcGFnZSwgYW5kIHRvIHNldCBtYW55CiAqIG90aGVyIGRyYXdpbmcgcGFyYW1ldGVycyBsaWtlIHRoZSBsaW5lIHdpZHRoLCBvciBjb2xvci4uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfZW5kX3BhZ2UoJHBzZG9jKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX2VuZF9wYWdlKCRwc2RvYyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRW5kcyBhIHBhdHRlcm4gd2hpY2ggd2FzIHN0YXJ0ZWQgd2l0aCBwc19iZWdpbl9wYXR0ZXJuLgogKiBPbmNlIGEgcGF0dGVybiBoYXMgYmVlbiBlbmRlZCwgaXQgY2FuIGJlIHVzZWQgbGlrZSBhIGNvbG9yIHRvIGZpbGwKICogYXJlYXMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfZW5kX3BhdHRlcm4oJHBzZG9jKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX2VuZF9wYXR0ZXJuKCRwc2RvYyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRW5kcyBhIHRlbXBsYXRlIHdoaWNoIHdhcyBzdGFydGVkIHdpdGggcHNfYmVnaW5fdGVtcGxhdGUuCiAqIE9uY2UgYSB0ZW1wbGF0ZSBoYXMgYmVlbiBlbmRlZCwgaXQgY2FuIGJlIHVzZWQgbGlrZSBhbiBpbWFnZS4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAdGhyb3dzIFBzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc19lbmRfdGVtcGxhdGUoJHBzZG9jKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX2VuZF90ZW1wbGF0ZSgkcHNkb2MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEZpbGxzIGFuZCBkcmF3cyB0aGUgcGF0aCBjb25zdHJ1Y3RlZCB3aXRoIHByZXZpb3VzbHkgY2FsbGVkIGRyYXdpbmcKICogZnVuY3Rpb25zIGxpa2UgcHNfbGluZXRvLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX2ZpbGxfc3Ryb2tlKCRwc2RvYyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19maWxsX3N0cm9rZSgkcHNkb2MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEZpbGxzIHRoZSBwYXRoIGNvbnN0cnVjdGVkIHdpdGggcHJldmlvdXNseSBjYWxsZWQgZHJhd2luZyBmdW5jdGlvbnMgbGlrZQogKiBwc19saW5ldG8uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfZmlsbCgkcHNkb2MpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfZmlsbCgkcHNkb2MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEdldHMgc2V2ZXJhbCBwYXJhbWV0ZXJzIHdoaWNoIHdlcmUgZGlyZWN0bHkgc2V0IGJ5CiAqIHBzX3NldF9wYXJhbWV0ZXIgb3IgaW5kaXJlY3RseSBieSBvbmUgb2YgdGhlIG90aGVyCiAqIGZ1bmN0aW9ucy4gUGFyYW1ldGVycyBhcmUgYnkgZGVmaW5pdGlvbiBzdHJpbmcKICogdmFsdWVzLiBUaGlzIGZ1bmN0aW9uIGNhbm5vdCBiZSB1c2VkIHRvIHJldHJpZXZlIHJlc291cmNlcyB3aGljaCB3ZXJlIGFsc28KICogc2V0IGJ5IHBzX3NldF9wYXJhbWV0ZXIuCiAqCiAqIFRoZSBwYXJhbWV0ZXIgbmFtZSBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nIHZhbHVlcy4KICoKICoKICoKICogZm9udG5hbWUKICoKICoKICogVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgZm9udCBvciB0aGUgZm9udCB3aG9zZQogKiBpZGVudGlmaWVyIGlzIHBhc3NlZCBpbiBwYXJhbWV0ZXIgbW9kaWZpZXIuCiAqCiAqCiAqCiAqCiAqIGZvbnRlbmNvZGluZwogKgogKgogKiBUaGUgZW5jb2Rpbmcgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgZm9udC4KICoKICoKICoKICoKICogZG90dGVkdmVyc2lvbgogKgogKgogKiBUaGUgdmVyc2lvbiBvZiB0aGUgdW5kZXJseWluZyBwc2xpYiBsaWJyYXJ5IGluIHRoZSBmb3JtYXQKICogJmx0O21ham9yJmd0Oy4mbHQ7bWlub3ImZ3Q7LiZsdDtzdWJtaW5vciZndDsKICoKICoKICoKICoKICogc2NvcGUKICoKICoKICogVGhlIGN1cnJlbnQgZHJhd2luZyBzY29wZS4gQ2FuIGJlIG9iamVjdCwgZG9jdW1lbnQsIG51bGwsIHBhZ2UsCiAqIHBhdHRlcm4sIHBhdGgsIHRlbXBsYXRlLCBwcm9sb2csIGZvbnQsIGdseXBoLgogKgogKgogKgogKgogKiBsaWdhdHVyZWRpc29sdmVjaGFyCiAqCiAqCiAqIFRoZSBjaGFyYWN0ZXIgd2hpY2ggZGlzc29sdmVzIGEgbGlnYXR1cmUuIElmIHlvdXIgYXJlIHVzaW5nIGEgZm9udAogKiB3aGljaCBjb250YWlucyB0aGUgbGlnYXR1cmUgYGZmJyBhbmQgYHwnIGlzIHRoZSBjaGFyIHRvIGRpc3NvbHZlIHRoZQogKiBsaWdhdHVyZSwgdGhlbiBgZnxmJyB3aWxsIHJlc3VsdCBpbiB0d28gYGYnIGluc3RlYWQgb2YgdGhlIGxpZ2F0dXJlIGBmZicuCiAqCiAqCiAqCiAqCiAqIGltYWdlZW5jb2RpbmcKICoKICoKICogVGhlIGVuY29kaW5nIHVzZWQgZm9yIGVuY29kaW5nIGltYWdlcy4gQ2FuIGJlIGVpdGhlcgogKiBoZXggb3IgODUuIGhleCBlbmNvZGluZwogKiB1c2VzIHR3byBieXRlcyBpbiB0aGUgcG9zdHNjcmlwdCBmaWxlIGVhY2ggYnl0ZSBpbiB0aGUgaW1hZ2UuCiAqIDg1IHN0YW5kIGZvciBBc2NpaTg1IGVuY29kaW5nLgogKgogKgogKgogKgogKiBsaW5lbnVtYmVybW9kZQogKgogKgogKiBTZXQgdG8gcGFyYWdyYXBoIGlmIGxpbmVzIGFyZSBudW1iZXJlZAogKiB3aXRoaW4gYSBwYXJhZ3JhcGggb3IgYm94IGlmIHRoZXkgYXJlCiAqIG51bWJlcmVkIHdpdGhpbiB0aGUgc3Vycm91bmRpbmcgYm94LgogKgogKgogKgogKgogKiBsaW5lYnJlYWsKICoKICoKICogT25seSB1c2VkIGlmIHRleHQgaXMgb3V0cHV0IHdpdGggcHNfc2hvd19ib3hlZC4KICogSWYgc2V0IHRvIFRSVUUgYSBjYXJyaWFnZSByZXR1cm4gd2lsbCBhZGQgYSBsaW5lCiAqIGJyZWFrLgogKgogKgogKgogKgogKiBwYXJicmVhawogKgogKgogKiBPbmx5IHVzZWQgaWYgdGV4dCBpcyBvdXRwdXQgd2l0aCBwc19zaG93X2JveGVkLgogKiBJZiBzZXQgdG8gVFJVRSBhIGNhcnJpYWdlIHJldHVybiB3aWxsIHN0YXJ0CiAqIGEgbmV3IHBhcmFncmFwaC4KICoKICoKICoKICoKICogaHlwaGVuYXRpb24KICoKICoKICogT25seSB1c2VkIGlmIHRleHQgaXMgb3V0cHV0IHdpdGggcHNfc2hvd19ib3hlZC4KICogSWYgc2V0IHRvIFRSVUUgdGhlIHBhcmFncmFwaCB3aWxsIGJlIGh5cGhlbmF0ZWQKICogaWYgYSBoeXBlbiBkaWN0aW9uYXJ5IGlzIHNldCBhbmQgZXhpc3RzLgogKgogKgogKgogKgogKiBoeXBoZW5kaWN0CiAqCiAqCiAqIEZpbGVuYW1lIG9mIHRoZSBkaWN0aW9uYXJ5IHVzZWQgZm9yIGh5cGhlbmF0aW9uIHBhdHRlcm4uCiAqCiAqCiAqCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIHN0cmluZyAkbmFtZSBOYW1lIG9mIHRoZSBwYXJhbWV0ZXIuCiAqIEBwYXJhbSBmbG9hdCAkbW9kaWZpZXIgQW4gaWRlbnRpZmllciBuZWVkZWQgaWYgYSBwYXJhbWV0ZXIgb2YgYSByZXNvdXJjZSBpcyByZXF1ZXN0ZWQsCiAqIGUuZy4gdGhlIHNpemUgb2YgYW4gaW1hZ2UuIEluIHN1Y2ggYSBjYXNlIHRoZSByZXNvdXJjZSBpZCBpcwogKiBwYXNzZWQuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX2dldF9wYXJhbWV0ZXIoJHBzZG9jLCBzdHJpbmcgJG5hbWUsIGZsb2F0ICRtb2RpZmllciA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRtb2RpZmllciAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccHNfZ2V0X3BhcmFtZXRlcigkcHNkb2MsICRuYW1lLCAkbW9kaWZpZXIpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHBzX2dldF9wYXJhbWV0ZXIoJHBzZG9jLCAkbmFtZSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBIeXBoZW5hdGVzIHRoZSBwYXNzZWQgd29yZC4gcHNfaHlwaGVuYXRlIGV2YWx1YXRlcyB0aGUKICogdmFsdWUgaHlwaGVubWluY2hhcnMgKHNldCBieSBwc19zZXRfdmFsdWUpIGFuZAogKiB0aGUgcGFyYW1ldGVyIGh5cGhlbmRpY3QgKHNldCBieSBwc19zZXRfcGFyYW1ldGVyKS4KICogaHlwaGVuZGljdCBtdXN0IGJlIHNldCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgogKgogKiBUaGlzIGZ1bmN0aW9uIHJlcXVpcmVzIHRoZSBsb2NhbGUgY2F0ZWdvcnkgTENfQ1RZUEUgdG8gYmUgc2V0IHByb3Blcmx5LgogKiBUaGlzIGlzIGRvbmUgd2hlbiB0aGUgZXh0ZW5zaW9uIGlzIGluaXRpYWxpemVkIGJ5IHVzaW5nIHRoZSBlbnZpcm9ubWVudAogKiB2YXJpYWJsZXMuIE9uIFVuaXggc3lzdGVtcyByZWFkIHRoZSBtYW4gcGFnZSBvZiBsb2NhbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIHN0cmluZyAkdGV4dCB0ZXh0IHNob3VsZCBub3QgY29udGFpbiBhbnkgbm9uIGFscGhhCiAqIGNoYXJhY3RlcnMuIFBvc3NpYmxlIHBvc2l0aW9ucyBmb3IgYnJlYWtzIGFyZSByZXR1cm5lZCBpbiBhbiBhcnJheSBvZgogKiBpbnRlcmdlciBudW1iZXJzLiBFYWNoIG51bWJlciBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIGNoYXIgaW4KICogdGV4dCBhZnRlciB3aGljaCBhIGh5cGhlbmF0aW9uIGNhbiB0YWtlIHBsYWNlLgogKiBAcmV0dXJuIGFycmF5IEFuIGFycmF5IG9mIGludGVnZXJzIGluZGljYXRpbmcgdGhlIHBvc2l0aW9uIG9mIHBvc3NpYmxlIGJyZWFrcyBpbgogKiB0aGUgdGV4dC4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfaHlwaGVuYXRlKCRwc2RvYywgc3RyaW5nICR0ZXh0KTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19oeXBoZW5hdGUoJHBzZG9jLCAkdGV4dCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGlzCiAqIGN1cnJlbnRseSBub3QgZG9jdW1lbnRlZDsgb25seSBpdHMgYXJndW1lbnQgbGlzdCBpcyBhdmFpbGFibGUuCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIHN0cmluZyAkZmlsZQogKiBAdGhyb3dzIFBzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc19pbmNsdWRlX2ZpbGUoJHBzZG9jLCBzdHJpbmcgJGZpbGUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfaW5jbHVkZV9maWxlKCRwc2RvYywgJGZpbGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEFkZHMgYSBzdHJhaWdodCBsaW5lIGZyb20gdGhlIGN1cnJlbnQgcG9pbnQgdG8gdGhlIGdpdmVuIGNvb3JkaW5hdGVzIHRvIHRoZQogKiBjdXJyZW50IHBhdGguIFVzZSBwc19tb3ZldG8gdG8gc2V0IHRoZSBzdGFydGluZyBwb2ludAogKiBvZiB0aGUgbGluZS4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gZmxvYXQgJHggeC1jb29yZGluYXRlIG9mIHRoZSBlbmQgcG9pbnQgb2YgdGhlIGxpbmUuCiAqIEBwYXJhbSBmbG9hdCAkeSB5LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBwb2ludCBvZiB0aGUgbGluZS4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfbGluZXRvKCRwc2RvYywgZmxvYXQgJHgsIGZsb2F0ICR5KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX2xpbmV0bygkcHNkb2MsICR4LCAkeSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyB0aGUgY3VycmVudCBwb2ludCB0byBuZXcgY29vcmRpbmF0ZXMuIElmIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgb2YKICogcHNfbW92ZXRvIGFmdGVyIGEgcHJldmlvdXMgcGF0aCBoYXMgYmVlbiBlbmRlZCB0aGVuIGl0CiAqIHdpbGwgc3RhcnQgYSBuZXcgcGF0aC4gSWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gdGhlIG1pZGRsZSBvZiBhIHBhdGgKICogaXQgd2lsbCBqdXN0IHNldCB0aGUgY3VycmVudCBwb2ludCBhbmQgc3RhcnQgYSBzdWJwYXRoLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEBwYXJhbSBmbG9hdCAkeCB4LWNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIG1vdmUgdG8uCiAqIEBwYXJhbSBmbG9hdCAkeSB5LWNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIG1vdmUgdG8uCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX21vdmV0bygkcHNkb2MsIGZsb2F0ICR4LCBmbG9hdCAkeSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19tb3ZldG8oJHBzZG9jLCAkeCwgJHkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENyZWF0ZXMgYSBuZXcgZG9jdW1lbnQgaW5zdGFuY2UuIEl0IGRvZXMgbm90IGNyZWF0ZSB0aGUgZmlsZSBvbiBkaXNrIG9yIGluCiAqIG1lbW9yeSwgaXQganVzdCBzZXRzIHVwIGV2ZXJ5dGhpbmcuIHBzX25ldyBpcyB1c3VhbGx5CiAqIGZvbGxvd2VkIGJ5IGEgY2FsbCBvZiBwc19vcGVuX2ZpbGUgdG8gYWN0dWFsbHkgY3JlYXRlCiAqIHRoZSBwb3N0c2NyaXB0IGRvY3VtZW50LgogKgogKiBAcmV0dXJuIHJlc291cmNlIFJlc291cmNlIG9mIFBvc3RTY3JpcHQgZG9jdW1lbnQuIFRoZSByZXR1cm4gdmFsdWUKICogaXMgcGFzc2VkIHRvIGFsbCBvdGhlciBmdW5jdGlvbnMgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgogKiBAdGhyb3dzIFBzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc19uZXcoKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX25ldygpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQ3JlYXRlcyBhIG5ldyBmaWxlIG9uIGRpc2sgYW5kIHdyaXRlcyB0aGUgUG9zdFNjcmlwdCBkb2N1bWVudCBpbnRvIGl0LiBUaGUKICogZmlsZSB3aWxsIGJlIGNsb3NlZCB3aGVuIHBzX2Nsb3NlIGlzIGNhbGxlZC4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgbmFtZSBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlLgogKiBJZiBmaWxlbmFtZSBpcyBub3QgcGFzc2VkIHRoZSBkb2N1bWVudCB3aWxsIGJlCiAqIGNyZWF0ZWQgaW4gbWVtb3J5IGFuZCBhbGwgb3V0cHV0IHdpbGwgZ28gc3RyYWlnaHQgdG8gdGhlIGJyb3dzZXIuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX29wZW5fZmlsZSgkcHNkb2MsIHN0cmluZyAkZmlsZW5hbWUgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGZpbGVuYW1lICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwc19vcGVuX2ZpbGUoJHBzZG9jLCAkZmlsZW5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHBzX29wZW5fZmlsZSgkcHNkb2MpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFBsYWNlcyBhIGZvcm1lcmx5IGxvYWRlZCBpbWFnZSBvbiB0aGUgcGFnZS4gVGhlIGltYWdlIGNhbiBiZSBzY2FsZWQuCiAqIElmIHRoZSBpbWFnZSBzaGFsbCBiZSByb3RhdGVkIGFzIHdlbGwsIHlvdSB3aWxsIGhhdmUgdG8gcm90YXRlIHRoZQogKiBjb29yZGluYXRlIHN5c3RlbSBiZWZvcmUgd2l0aCBwc19yb3RhdGUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIGludCAkaW1hZ2VpZCBUaGUgcmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgaW1hZ2UgYXMgcmV0dXJuZWQgYnkKICogcHNfb3Blbl9pbWFnZSBvcgogKiBwc19vcGVuX2ltYWdlX2ZpbGUuCiAqIEBwYXJhbSBmbG9hdCAkeCB4LWNvb3JkaW5hdGUgb2YgdGhlIGxvd2VyIGxlZnQgY29ybmVyIG9mIHRoZSBpbWFnZS4KICogQHBhcmFtIGZsb2F0ICR5IHktY29vcmRpbmF0ZSBvZiB0aGUgbG93ZXIgbGVmdCBjb3JuZXIgb2YgdGhlIGltYWdlLgogKiBAcGFyYW0gZmxvYXQgJHNjYWxlIFRoZSBzY2FsaW5nIGZhY3RvciBmb3IgdGhlIGltYWdlLiBBIHNjYWxlIG9mIDEuMCB3aWxsIHJlc3VsdAogKiBpbiBhIHJlc29sdXRpb24gb2YgNzIgZHBpLCBiZWNhdXNlIGVhY2ggcGl4ZWwgaXMgZXF1aXZhbGVudCB0bwogKiAxIHBvaW50LgogKiBAdGhyb3dzIFBzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc19wbGFjZV9pbWFnZSgkcHNkb2MsIGludCAkaW1hZ2VpZCwgZmxvYXQgJHgsIGZsb2F0ICR5LCBmbG9hdCAkc2NhbGUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfcGxhY2VfaW1hZ2UoJHBzZG9jLCAkaW1hZ2VpZCwgJHgsICR5LCAkc2NhbGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERyYXdzIGEgcmVjdGFuZ2xlIHdpdGggaXRzIGxvd2VyIGxlZnQgY29ybmVyIGF0ICh4LAogKiB5KS4gVGhlIHJlY3RhbmdsZSBzdGFydHMgYW5kIGVuZHMgaW4gaXRzIGxvd2VyIGxlZnQKICogY29ybmVyLiBJZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvdXRzaWRlIGEgcGF0aCBpdCB3aWxsIHN0YXJ0IGEgbmV3IHBhdGguCiAqIElmIGl0IGlzIGNhbGxlZCB3aXRoaW4gYSBwYXRoIGl0IHdpbGwgYWRkIHRoZSByZWN0YW5nbGUgYXMgYSBzdWJwYXRoLiBJZgogKiB0aGUgbGFzdCBkcmF3aW5nIG9wZXJhdGlvbiBkb2VzIG5vdCBlbmQgaW4gdGhlIGxvd2VyIGxlZnQgY29ybmVyIHRoZW4gdGhlcmUKICogd2lsbCBiZSBhIGdhcCBpbiB0aGUgcGF0aC4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gZmxvYXQgJHggeC1jb29yZGluYXRlIG9mIHRoZSBsb3dlciBsZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlLgogKiBAcGFyYW0gZmxvYXQgJHkgeS1jb29yZGluYXRlIG9mIHRoZSBsb3dlciBsZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlLgogKiBAcGFyYW0gZmxvYXQgJHdpZHRoIFRoZSB3aWR0aCBvZiB0aGUgaW1hZ2UuCiAqIEBwYXJhbSBmbG9hdCAkaGVpZ2h0IFRoZSBoZWlnaHQgb2YgdGhlIGltYWdlLgogKiBAdGhyb3dzIFBzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc19yZWN0KCRwc2RvYywgZmxvYXQgJHgsIGZsb2F0ICR5LCBmbG9hdCAkd2lkdGgsIGZsb2F0ICRoZWlnaHQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfcmVjdCgkcHNkb2MsICR4LCAkeSwgJHdpZHRoLCAkaGVpZ2h0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBSZXN0b3JlcyBhIHByZXZpb3VzbHkgc2F2ZWQgZ3JhcGhpY3MgY29udGV4dC4gQW55IGNhbGwgb2YKICogcHNfc2F2ZSBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IGEgY2FsbCB0bwogKiBwc19yZXN0b3JlLiBBbGwgY29vcmRpbmF0ZSB0cmFuc2Zvcm1hdGlvbnMsIGxpbmUKICogc3R5bGUgc2V0dGluZ3MsIGNvbG9yIHNldHRpbmdzLCBldGMuIGFyZSBiZWluZyByZXN0b3JlZCB0byB0aGUgc3RhdGUKICogYmVmb3JlIHRoZSBjYWxsIG9mIHBzX3NhdmUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfcmVzdG9yZSgkcHNkb2MpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfcmVzdG9yZSgkcHNkb2MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgdGhlIHJvdGF0aW9uIG9mIHRoZSBjb29yZGluYXRlIHN5c3RlbS4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gZmxvYXQgJHJvdCBBbmdsZSBvZiByb3RhdGlvbiBpbiBkZWdyZWUuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3JvdGF0ZSgkcHNkb2MsIGZsb2F0ICRyb3QpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfcm90YXRlKCRwc2RvYywgJHJvdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2F2ZXMgdGhlIGN1cnJlbnQgZ3JhcGhpY3MgY29udGV4dCwgY29udGFpbmluZyBjb2xvcnMsIHRyYW5zbGF0aW9uIGFuZAogKiByb3RhdGlvbiBzZXR0aW5ncyBhbmQgc29tZSBtb3JlLiBBIHNhdmVkIGNvbnRleHQgY2FuIGJlIHJlc3RvcmVkIHdpdGgKICogcHNfcmVzdG9yZS4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAdGhyb3dzIFBzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc19zYXZlKCRwc2RvYyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19zYXZlKCRwc2RvYyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBzY2FsaW5nIG9mIHRoZSBjb29yZGluYXRlIHN5c3RlbS4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gZmxvYXQgJHggU2NhbGluZyBmYWN0b3IgaW4gaG9yaXpvbnRhbCBkaXJlY3Rpb24uCiAqIEBwYXJhbSBmbG9hdCAkeSBTY2FsaW5nIGZhY3RvciBpbiB2ZXJ0aWNhbCBkaXJlY3Rpb24uCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3NjYWxlKCRwc2RvYywgZmxvYXQgJHgsIGZsb2F0ICR5KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX3NjYWxlKCRwc2RvYywgJHgsICR5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBMaW5rcyBhZGRlZCB3aXRoIG9uZSBvZiB0aGUgZnVuY3Rpb25zIHBzX2FkZF93ZWJsaW5rLAogKiBwc19hZGRfcGRmbGluaywgZXRjLiB3aWxsIGJlIGRpc3BsYXllZCB3aXRoIGEKICogc3Vyb3VuZGVkIHJlY3RhbmdsZSB3aGVuIHRoZSBwb3N0c2NyaXB0IGRvY3VtZW50IGlzIGNvbnZlcnRlZCB0bwogKiBwZGYgYW5kIHZpZXdlZCBpbiBhIHBkZiB2aWV3ZXIuIFRoaXMgcmVjdGFuZ2xlIGlzIG5vdCB2aXNpYmxlIGluCiAqIHRoZSBwb3N0c2NyaXB0IGRvY3VtZW50LgogKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGNvbG9yIG9mIHRoZSByZWN0YW5nbGUncyBib3JkZXIgbGluZS4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gZmxvYXQgJHJlZCBUaGUgcmVkIGNvbXBvbmVudCBvZiB0aGUgYm9yZGVyIGNvbG9yLgogKiBAcGFyYW0gZmxvYXQgJGdyZWVuIFRoZSBncmVlbiBjb21wb25lbnQgb2YgdGhlIGJvcmRlciBjb2xvci4KICogQHBhcmFtIGZsb2F0ICRibHVlIFRoZSBibHVlIGNvbXBvbmVudCBvZiB0aGUgYm9yZGVyIGNvbG9yLgogKiBAdGhyb3dzIFBzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc19zZXRfYm9yZGVyX2NvbG9yKCRwc2RvYywgZmxvYXQgJHJlZCwgZmxvYXQgJGdyZWVuLCBmbG9hdCAkYmx1ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19zZXRfYm9yZGVyX2NvbG9yKCRwc2RvYywgJHJlZCwgJGdyZWVuLCAkYmx1ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogTGlua3MgYWRkZWQgd2l0aCBvbmUgb2YgdGhlIGZ1bmN0aW9ucyBwc19hZGRfd2VibGluaywKICogcHNfYWRkX3BkZmxpbmssIGV0Yy4gd2lsbCBiZSBkaXNwbGF5ZWQgd2l0aCBhCiAqIHN1cm91bmRlZCByZWN0YW5nbGUgd2hlbiB0aGUgcG9zdHNjcmlwdCBkb2N1bWVudCBpcyBjb252ZXJ0ZWQgdG8KICogcGRmIGFuZCB2aWV3ZWQgaW4gYSBwZGYgdmlld2VyLiBUaGlzIHJlY3RhbmdsZSBpcyBub3QgdmlzaWJsZSBpbgogKiB0aGUgcG9zdHNjcmlwdCBkb2N1bWVudC4KICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBsZW5ndGggb2YgdGhlIGJsYWNrIGFuZCB3aGl0ZSBwb3J0aW9uIG9mIGEKICogZGFzaGVkIGJvcmRlciBsaW5lLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEBwYXJhbSBmbG9hdCAkYmxhY2sgVGhlIGxlbmd0aCBvZiB0aGUgZGFzaC4KICogQHBhcmFtIGZsb2F0ICR3aGl0ZSBUaGUgbGVuZ3RoIG9mIHRoZSBnYXAgYmV0d2VlbiBkYXNoZXMuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3NldF9ib3JkZXJfZGFzaCgkcHNkb2MsIGZsb2F0ICRibGFjaywgZmxvYXQgJHdoaXRlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX3NldF9ib3JkZXJfZGFzaCgkcHNkb2MsICRibGFjaywgJHdoaXRlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBMaW5rcyBhZGRlZCB3aXRoIG9uZSBvZiB0aGUgZnVuY3Rpb25zIHBzX2FkZF93ZWJsaW5rLAogKiBwc19hZGRfcGRmbGluaywgZXRjLiB3aWxsIGJlIGRpc3BsYXllZCB3aXRoIGEKICogc3Vyb3VuZGVkIHJlY3RhbmdsZSB3aGVuIHRoZSBwb3N0c2NyaXB0IGRvY3VtZW50IGlzIGNvbnZlcnRlZCB0bwogKiBwZGYgYW5kIHZpZXdlZCBpbiBhIHBkZiB2aWV3ZXIuIFRoaXMgcmVjdGFuZ2xlIGlzIG5vdCB2aXNpYmxlIGluCiAqIHRoZSBwb3N0c2NyaXB0IGRvY3VtZW50LgogKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGFwcGVhcmFuY2UgYW5kIHdpZHRoIG9mIHRoZSBib3JkZXIgbGluZS4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gc3RyaW5nICRzdHlsZSBzdHlsZSBjYW4gYmUgc29saWQgb3IKICogZGFzaGVkLgogKiBAcGFyYW0gZmxvYXQgJHdpZHRoIFRoZSBsaW5lIHdpZHRoIG9mIHRoZSBib3JkZXIuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3NldF9ib3JkZXJfc3R5bGUoJHBzZG9jLCBzdHJpbmcgJHN0eWxlLCBmbG9hdCAkd2lkdGgpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfc2V0X2JvcmRlcl9zdHlsZSgkcHNkb2MsICRzdHlsZSwgJHdpZHRoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIGNlcnRhaW4gaW5mb3JtYXRpb24gZmllbGRzIG9mIHRoZSBkb2N1bWVudC4gVGhpcyBmaWVsZHMgd2lsbCBiZSBzaG93bgogKiBhcyBhIGNvbW1lbnQgaW4gdGhlIGhlYWRlciBvZiB0aGUgUG9zdFNjcmlwdCBmaWxlLiBJZiB0aGUgZG9jdW1lbnQgaXMKICogY29udmVydGVkIHRvIHBkZiB0aGlzIGZpZWxkcyB3aWxsIGFsc28gYmUgdXNlZCBmb3IgdGhlIGRvY3VtZW50CiAqIGluZm9ybWF0aW9uLgogKgogKiBUaGUgQm91bmRpbmdCb3ggaXMgdXN1YWxseSBzZXQgdG8gdGhlIHZhbHVlIGdpdmVuIHRvIHRoZQogKiBmaXJzdCBwYWdlLiBUaGlzIG9ubHkgd29ya3MgaWYgcHNfZmluZGZvbnQgaGFzIG5vdAogKiBiZWVuIGNhbGxlZCBiZWZvcmUuIEluIHN1Y2ggY2FzZXMgdGhlIEJvdW5kaW5nQm94IHdvdWxkIGJlIGxlZnQgdW5zZXQKICogdW5sZXNzIHlvdSBzZXQgaXQgZXhwbGljaXRseSB3aXRoIHRoaXMgZnVuY3Rpb24uCiAqCiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBoYXZlIG5vIGVmZmVjdCBhbnltb3JlIHdoZW4gdGhlIGhlYWRlciBvZiB0aGUgcG9zdHNjcmlwdAogKiBmaWxlIGhhcyBiZWVuIGFscmVhZHkgd3JpdHRlbi4gSXQgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBmaXJzdCBwYWdlCiAqIG9yIHRoZSBmaXJzdCBjYWxsIG9mIHBzX2ZpbmRmb250LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHAgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBuYW1lIG9mIHRoZSBpbmZvcm1hdGlvbiBmaWVsZCB0byBzZXQuIFRoZSB2YWx1ZXMgd2hpY2ggY2FuIGJlCiAqIHNldCBhcmUgS2V5d29yZHMsIFN1YmplY3QsCiAqIFRpdGxlLCBDcmVhdG9yLAogKiBBdXRob3IsIEJvdW5kaW5nQm94LCBhbmQKICogT3JpZW50YXRpb24uIEJlIGF3YXJlIHRoYXQgc29tZSBvZiB0aGVtIGhhcyBhCiAqIG1lYW5pbmcgdG8gUG9zdFNjcmlwdCB2aWV3ZXJzLgogKiBAcGFyYW0gc3RyaW5nICR2YWwgVGhlIHZhbHVlIG9mIHRoZSBpbmZvcm1hdGlvbiBmaWVsZC4gVGhlIGZpZWxkCiAqIE9yaWVudGF0aW9uIGNhbiBiZSBzZXQgdG8gZWl0aGVyCiAqIFBvcnRyYWl0IG9yIExhbmRzY2FwZS4gVGhlCiAqIEJvdW5kaW5nQm94IGlzIGEgc3RyaW5nIGNvbnNpc3Rpbmcgb2YgZm91ciBudW1iZXJzLgogKiBUaGUgZmlyc3QgdHdvIG51bWJlcnMgYXJlIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgbG93ZXIgbGVmdCBjb3JuZXIgb2YKICogdGhlIHBhZ2UuIFRoZSBsYXN0IHR3byBudW1iZXJzIGFyZSB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHVwcGVyCiAqIHJpZ2h0IGNvcm5lci4KICoKICogVXAgdG8gdmVyc2lvbiAwLjIuNiBvZiBwc2xpYiwgdGhlIEJvdW5kaW5nQm94IGFuZCBPcmllbnRhdGlvbgogKiB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHBzX2JlZ2luX3BhZ2UsCiAqIHVubGVzcyBwc19maW5kZm9udCBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLgogKiBAdGhyb3dzIFBzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc19zZXRfaW5mbygkcCwgc3RyaW5nICRrZXksIHN0cmluZyAkdmFsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX3NldF9pbmZvKCRwLCAka2V5LCAkdmFsKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIHNldmVyYWwgcGFyYW1ldGVycyB3aGljaCBhcmUgdXNlZCBieSBtYW55IGZ1bmN0aW9ucy4gUGFyYW1ldGVycyBhcmUgYnkKICogZGVmaW5pdGlvbiBzdHJpbmcgdmFsdWVzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgRm9yIGEgbGlzdCBvZiBwb3NzaWJsZSBuYW1lcyBzZWUgcHNfZ2V0X3BhcmFtZXRlci4KICogQHBhcmFtIHN0cmluZyAkdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3NldF9wYXJhbWV0ZXIoJHBzZG9jLCBzdHJpbmcgJG5hbWUsIHN0cmluZyAkdmFsdWUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfc2V0X3BhcmFtZXRlcigkcHNkb2MsICRuYW1lLCAkdmFsdWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldCB0aGUgcG9zaXRpb24gZm9yIHRoZSBuZXh0IHRleHQgb3V0cHV0LiBZb3UgbWF5IGFsdGVybmF0aXZlbHkgc2V0IHRoZSB4CiAqIGFuZCB5IHZhbHVlIHNlcGFyYXRlbHkgYnkgY2FsbGluZyBwc19zZXRfdmFsdWUgYW5kCiAqIGNob29zaW5nIHRleHR4IHJlc3BlY3RpdmVseSB0ZXh0eSBhcwogKiB0aGUgdmFsdWUgbmFtZS4KICoKICogSWYgeW91IHdhbnQgdG8gb3V0cHV0IHRleHQgYXQgYSBjZXJ0YWluIHBvc2l0aW9uIGl0IGlzIG1vcmUgY29udmVuaWVudAogKiB0byB1c2UgcHNfc2hvd194eSBpbnN0ZWFkIG9mIHNldHRpbmcgdGhlIHRleHQgcG9zaXRpb24KICogYW5kIGNhbGxpbmcgcHNfc2hvdy4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gZmxvYXQgJHggeC1jb29yZGluYXRlIG9mIHRoZSBuZXcgdGV4dCBwb3NpdGlvbi4KICogQHBhcmFtIGZsb2F0ICR5IHktY29vcmRpbmF0ZSBvZiB0aGUgbmV3IHRleHQgcG9zaXRpb24uCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3NldF90ZXh0X3BvcygkcHNkb2MsIGZsb2F0ICR4LCBmbG9hdCAkeSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19zZXRfdGV4dF9wb3MoJHBzZG9jLCAkeCwgJHkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgc2V2ZXJhbCB2YWx1ZXMgd2hpY2ggYXJlIHVzZWQgYnkgbWFueSBmdW5jdGlvbnMuIFBhcmFtZXRlcnMgYXJlIGJ5CiAqIGRlZmluaXRpb24gZmxvYXQgdmFsdWVzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIG5hbWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogKgogKgogKiB0ZXh0cmVuZGVyaW5nCiAqCiAqCiAqIFRoZSB3YXkgaG93IHRleHQgaXMgc2hvd24uCiAqCiAqCiAqCiAqCiAqIHRleHR4CiAqCiAqCiAqIFRoZSB4IGNvb3JkaW5hdGUgZm9yIHRleHQgb3V0cHV0LgogKgogKgogKgogKgogKiB0ZXh0eQogKgogKgogKiBUaGUgeSBjb29yZGluYXRlIGZvciB0ZXh0IG91dHB1dC4KICoKICoKICoKICoKICogd29yZHNwYWNpbmcKICoKICoKICogVGhlIGRpc3RhbmNlIGJldHdlZW4gd29yZHMgcmVsYXRpdmUgdG8gdGhlIHdpZHRoIG9mIGEgc3BhY2UuCiAqCiAqCiAqCiAqCiAqIGxlYWRpbmcKICoKICoKICogVGhlIGRpc3RhbmNlIGJldHdlZW4gbGluZXMgaW4gcGl4ZWxzLgogKgogKgogKgogKgogKgogKiBUaGUgd2F5IGhvdyB0ZXh0IGlzIHNob3duLgogKgogKiBUaGUgeCBjb29yZGluYXRlIGZvciB0ZXh0IG91dHB1dC4KICoKICogVGhlIHkgY29vcmRpbmF0ZSBmb3IgdGV4dCBvdXRwdXQuCiAqCiAqIFRoZSBkaXN0YW5jZSBiZXR3ZWVuIHdvcmRzIHJlbGF0aXZlIHRvIHRoZSB3aWR0aCBvZiBhIHNwYWNlLgogKgogKiBUaGUgZGlzdGFuY2UgYmV0d2VlbiBsaW5lcyBpbiBwaXhlbHMuCiAqIEBwYXJhbSBmbG9hdCAkdmFsdWUgVGhlIHdheSBob3cgdGV4dCBpcyBzaG93bi4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfc2V0X3ZhbHVlKCRwc2RvYywgc3RyaW5nICRuYW1lLCBmbG9hdCAkdmFsdWUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfc2V0X3ZhbHVlKCRwc2RvYywgJG5hbWUsICR2YWx1ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyB0aGUgY29sb3IgZm9yIGRyYXdpbmcsIGZpbGxpbmcsIG9yIGJvdGguCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIHN0cmluZyAkdHlwZSBUaGUgcGFyYW1ldGVyIHR5cGUgY2FuIGJlCiAqIGJvdGgsIGZpbGwsIG9yCiAqIGZpbGxzdHJva2UuCiAqIEBwYXJhbSBzdHJpbmcgJGNvbG9yc3BhY2UgVGhlIGNvbG9yc3BhY2Ugc2hvdWxkIGJlIG9uZSBvZiBncmF5LAogKiByZ2IsIGNteWssCiAqIHNwb3QsIHBhdHRlcm4uIERlcGVuZGluZyBvbiB0aGUKICogY29sb3JzcGFjZSBlaXRoZXIgb25seSB0aGUgZmlyc3QsIHRoZSBmaXJzdCB0aHJlZSBvciBhbGwgcGFyYW1ldGVycwogKiB3aWxsIGJlIHVzZWQuCiAqIEBwYXJhbSBmbG9hdCAkYzEgRGVwZW5kaW5nIG9uIHRoZSBjb2xvcnNwYWNlIHRoaXMgaXMgZWl0aGVyIHRoZSByZWQgY29tcG9uZW50IChyZ2IpLAogKiB0aGUgY3lhbiBjb21wb25lbnQgKGNteWspLCB0aGUgZ3JheSB2YWx1ZSAoZ3JheSksIHRoZSBpZGVudGlmaWVyIG9mCiAqIHRoZSBzcG90IGNvbG9yIG9yIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBwYXR0ZXJuLgogKiBAcGFyYW0gZmxvYXQgJGMyIERlcGVuZGluZyBvbiB0aGUgY29sb3JzcGFjZSB0aGlzIGlzIGVpdGhlciB0aGUgZ3JlZW4gY29tcG9uZW50IChyZ2IpLAogKiB0aGUgbWFnZW50YSBjb21wb25lbnQgKGNteWspLgogKiBAcGFyYW0gZmxvYXQgJGMzIERlcGVuZGluZyBvbiB0aGUgY29sb3JzcGFjZSB0aGlzIGlzIGVpdGhlciB0aGUgYmx1ZSBjb21wb25lbnQgKHJnYiksCiAqIHRoZSB5ZWxsb3cgY29tcG9uZW50IChjbXlrKS4KICogQHBhcmFtIGZsb2F0ICRjNCBUaGlzIG11c3Qgb25seSBiZSBzZXQgaW4gY215ayBjb2xvcnNwYWNlIGFuZCBzcGVjaWZpZXMgdGhlIGJsYWNrCiAqIGNvbXBvbmVudC4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfc2V0Y29sb3IoJHBzZG9jLCBzdHJpbmcgJHR5cGUsIHN0cmluZyAkY29sb3JzcGFjZSwgZmxvYXQgJGMxLCBmbG9hdCAkYzIsIGZsb2F0ICRjMywgZmxvYXQgJGM0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX3NldGNvbG9yKCRwc2RvYywgJHR5cGUsICRjb2xvcnNwYWNlLCAkYzEsICRjMiwgJGMzLCAkYzQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgdGhlIGxlbmd0aCBvZiB0aGUgYmxhY2sgYW5kIHdoaXRlIHBvcnRpb25zIG9mIGEgZGFzaGVkIGxpbmUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIGZsb2F0ICRvbiBUaGUgbGVuZ3RoIG9mIHRoZSBkYXNoLgogKiBAcGFyYW0gZmxvYXQgJG9mZiBUaGUgbGVuZ3RoIG9mIHRoZSBnYXAgYmV0d2VlbiBkYXNoZXMuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3NldGRhc2goJHBzZG9jLCBmbG9hdCAkb24sIGZsb2F0ICRvZmYpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfc2V0ZGFzaCgkcHNkb2MsICRvbiwgJG9mZik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBpcwogKiBjdXJyZW50bHkgbm90IGRvY3VtZW50ZWQ7IG9ubHkgaXRzIGFyZ3VtZW50IGxpc3QgaXMgYXZhaWxhYmxlLgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEBwYXJhbSBmbG9hdCAkdmFsdWUgVGhlIHZhbHVlIG11c3QgYmUgYmV0d2VlbiAwLjIgYW5kIDEuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3NldGZsYXQoJHBzZG9jLCBmbG9hdCAkdmFsdWUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfc2V0ZmxhdCgkcHNkb2MsICR2YWx1ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyBhIGZvbnQsIHdoaWNoIGhhcyB0byBiZSBsb2FkZWQgYmVmb3JlIHdpdGgKICogcHNfZmluZGZvbnQuIE91dHB1dHRpbmcgdGV4dCB3aXRob3V0IHNldHRpbmcgYSBmb250CiAqIHJlc3VsdHMgaW4gYW4gZXJyb3IuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIGludCAkZm9udGlkIFRoZSBmb250IGlkZW50aWZpZXIgYXMgcmV0dXJuZWQgYnkgcHNfZmluZGZvbnQuCiAqIEBwYXJhbSBmbG9hdCAkc2l6ZSBUaGUgc2l6ZSBvZiB0aGUgZm9udC4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfc2V0Zm9udCgkcHNkb2MsIGludCAkZm9udGlkLCBmbG9hdCAkc2l6ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19zZXRmb250KCRwc2RvYywgJGZvbnRpZCwgJHNpemUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgdGhlIGdyYXkgdmFsdWUgZm9yIGFsbCBmb2xsb3dpbmcgZHJhd2luZyBvcGVyYXRpb25zLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEBwYXJhbSBmbG9hdCAkZ3JheSBUaGUgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgKHdoaXRlKSBhbmQgMSAoYmxhY2spLgogKiBAdGhyb3dzIFBzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc19zZXRncmF5KCRwc2RvYywgZmxvYXQgJGdyYXkpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfc2V0Z3JheSgkcHNkb2MsICRncmF5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIGhvdyBsaW5lIGVuZHMgbG9vayBsaWtlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEBwYXJhbSBpbnQgJHR5cGUgVGhlIHR5cGUgb2YgbGluZSBlbmRzLiBQb3NzaWJsZSB2YWx1ZXMgYXJlCiAqIFBTX0xJTkVDQVBfQlVUVCwKICogUFNfTElORUNBUF9ST1VORCwgb3IKICogUFNfTElORUNBUF9TUVVBUkVELgogKiBAdGhyb3dzIFBzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc19zZXRsaW5lY2FwKCRwc2RvYywgaW50ICR0eXBlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX3NldGxpbmVjYXAoJHBzZG9jLCAkdHlwZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyBob3cgbGluZXMgYXJlIGpvaW5lZC4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gaW50ICR0eXBlIFRoZSB3YXkgbGluZXMgYXJlIGpvaW5lZC4gUG9zc2libGUgdmFsdWVzIGFyZQogKiBQU19MSU5FSk9JTl9NSVRFUiwKICogUFNfTElORUpPSU5fUk9VTkQsIG9yCiAqIFBTX0xJTkVKT0lOX0JFVkVMLgogKiBAdGhyb3dzIFBzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc19zZXRsaW5lam9pbigkcHNkb2MsIGludCAkdHlwZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19zZXRsaW5lam9pbigkcHNkb2MsICR0eXBlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIHRoZSBsaW5lIHdpZHRoIGZvciBhbGwgZm9sbG93aW5nIGRyYXdpbmcgb3BlcmF0aW9ucy4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gZmxvYXQgJHdpZHRoIFRoZSB3aWR0aCBvZiBsaW5lcyBpbiBwb2ludHMuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3NldGxpbmV3aWR0aCgkcHNkb2MsIGZsb2F0ICR3aWR0aCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19zZXRsaW5ld2lkdGgoJHBzZG9jLCAkd2lkdGgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIElmIHR3byBsaW5lcyBqb2luIGluIGEgc21hbGwgYW5nbGUgYW5kIHRoZSBsaW5lIGpvaW4gaXMgc2V0IHRvCiAqIFBTX0xJTkVKT0lOX01JVEVSLCB0aGVuCiAqIHRoZSByZXN1bHRpbmcgc3Bpa2Ugd2lsbCBiZSB2ZXJ5IGxvbmcuIFRoZSBtaXRlciBsaW1pdCBpcyB0aGUgbWF4aW11bQogKiByYXRpbyBvZiB0aGUgbWl0ZXIgbGVuZ3RoICh0aGUgbGVuZ3RoIG9mIHRoZSBzcGlrZSkgYW5kIHRoZSBsaW5lIHdpZHRoLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEBwYXJhbSBmbG9hdCAkdmFsdWUgVGhlIG1heGltdW0gcmF0aW8gYmV0d2VlbiB0aGUgbWl0ZXIgbGVuZ3RoIGFuZCB0aGUgbGluZSB3aWR0aC4gTGFyZ2VyCiAqIHZhbHVlcyAoJmd0OyAxMCkgd2lsbCByZXN1bHQgaW4gdmVyeSBsb25nIHNwaWtlcyB3aGVuIHR3byBsaW5lcyBtZWV0CiAqIGluIGEgc21hbGwgYW5nbGUuIEtlZXAgdGhlIGRlZmF1bHQgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfc2V0bWl0ZXJsaW1pdCgkcHNkb2MsIGZsb2F0ICR2YWx1ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19zZXRtaXRlcmxpbWl0KCRwc2RvYywgJHZhbHVlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGlzCiAqIGN1cnJlbnRseSBub3QgZG9jdW1lbnRlZDsgb25seSBpdHMgYXJndW1lbnQgbGlzdCBpcyBhdmFpbGFibGUuCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIGludCAkbW9kZQogKiBAdGhyb3dzIFBzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc19zZXRvdmVycHJpbnRtb2RlKCRwc2RvYywgaW50ICRtb2RlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX3NldG92ZXJwcmludG1vZGUoJHBzZG9jLCAkbW9kZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyB0aGUgbGVuZ3RoIG9mIHRoZSBibGFjayBhbmQgd2hpdGUgcG9ydGlvbnMgb2YgYSBkYXNoZWQgbGluZS4KICogcHNfc2V0cG9seWRhc2ggaXMgdXNlZCB0byBzZXQgbW9yZSBjb21wbGljYXRlZCBkYXNoCiAqIHBhdHRlcm5zLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEBwYXJhbSBmbG9hdCAkYXJyIGFyciBpcyBhIGxpc3Qgb2YgbGVuZ3RoIGVsZW1lbnRzIGFsdGVybmF0ZWx5IGZvcgogKiB0aGUgYmxhY2sgYW5kIHdoaXRlIHBvcnRpb24uCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3NldHBvbHlkYXNoKCRwc2RvYywgZmxvYXQgJGFycik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19zZXRwb2x5ZGFzaCgkcHNkb2MsICRhcnIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENyZWF0ZXMgYSBwYXR0ZXJuIGJhc2VkIG9uIGEgc2hhZGluZywgd2hpY2ggaGFzIHRvIGJlIGNyZWF0ZWQgYmVmb3JlIHdpdGgKICogcHNfc2hhZGluZy4gU2hhZGluZyBwYXR0ZXJucyBjYW4gYmUgdXNlZCBsaWtlIHJlZ3VsYXIKICogcGF0dGVybnMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIGludCAkc2hhZGluZ2lkIFRoZSBpZGVudGlmaWVyIG9mIGEgc2hhZGluZyBwcmV2aW91c2x5IGNyZWF0ZWQgd2l0aAogKiBwc19zaGFkaW5nLgogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0IFRoaXMgYXJndW1lbnQgaXMgbm90IGN1cnJlbnRseSB1c2VkLgogKiBAcmV0dXJuIGludCBUaGUgaWRlbnRpZmllciBvZiB0aGUgcGF0dGVybi4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfc2hhZGluZ19wYXR0ZXJuKCRwc2RvYywgaW50ICRzaGFkaW5naWQsIHN0cmluZyAkb3B0bGlzdCk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX3NoYWRpbmdfcGF0dGVybigkcHNkb2MsICRzaGFkaW5naWQsICRvcHRsaXN0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIENyZWF0ZXMgYSBzaGFkaW5nLCB3aGljaCBjYW4gYmUgdXNlZCBieSBwc19zaGZpbGwgb3IKICogcHNfc2hhZGluZ19wYXR0ZXJuLgogKgogKiBUaGUgY29sb3Igb2YgdGhlIHNoYWRpbmcgY2FuIGJlIGluIGFueSBjb2xvciBzcGFjZSBleGNlcHQgZm9yCiAqIHBhdHRlcm4uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIHN0cmluZyAkdHlwZSBUaGUgdHlwZSBvZiBzaGFkaW5nIGNhbiBiZSBlaXRoZXIgcmFkaWFsIG9yCiAqIGF4aWFsLiBFYWNoIHNoYWRpbmcgc3RhcnRzIHdpdGggdGhlIGN1cnJlbnQgZmlsbAogKiBjb2xvciBhbmQgZW5kcyB3aXRoIHRoZSBnaXZlbiBjb2xvciB2YWx1ZXMgcGFzc2VkIGluIHRoZSBwYXJhbWV0ZXJzCiAqIGMxIHRvIGM0CiAqIChzZWUgcHNfc2V0Y29sb3IgZm9yIHRoZWlyIG1lYW5pbmcpLgogKiBAcGFyYW0gZmxvYXQgJHgwIFRoZSBjb29yZGluYXRlcyB4MCwgeTAsCiAqIHgxLCB5MSBhcmUgdGhlIHN0YXJ0IGFuZAogKiBlbmQgcG9pbnQgb2YgdGhlIHNoYWRpbmcuIElmIHRoZSB0eXBlIG9mIHNoYWRpbmcgaXMKICogcmFkaWFsIHRoZSB0d28gcG9pbnRzIGFyZSB0aGUgbWlkZGxlIHBvaW50cyBvZgogKiBhIHN0YXJ0aW5nIGFuZCBlbmRpbmcgY2lyY2xlLgogKiBAcGFyYW0gZmxvYXQgJHkwIFNlZSBwc19zZXRjb2xvciBmb3IgdGhlaXIgbWVhbmluZy4KICogQHBhcmFtIGZsb2F0ICR4MSBJZiB0aGUgc2hhZGluZyBpcyBvZiB0eXBlIHJhZGlhbCB0aGUKICogb3B0bGlzdCBtdXN0IGFsc28gY29udGFpbiB0aGUgcGFyYW1ldGVycwogKiByMCBhbmQgcjEgd2l0aCB0aGUgcmFkaXVzIG9mIHRoZQogKiBzdGFydCBhbmQgZW5kIGNpcmNsZS4KICogQHBhcmFtIGZsb2F0ICR5MQogKiBAcGFyYW0gZmxvYXQgJGMxCiAqIEBwYXJhbSBmbG9hdCAkYzIKICogQHBhcmFtIGZsb2F0ICRjMwogKiBAcGFyYW0gZmxvYXQgJGM0CiAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgaWRlbnRpZmllciBvZiB0aGUgcGF0dGVybi4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfc2hhZGluZygkcHNkb2MsIHN0cmluZyAkdHlwZSwgZmxvYXQgJHgwLCBmbG9hdCAkeTAsIGZsb2F0ICR4MSwgZmxvYXQgJHkxLCBmbG9hdCAkYzEsIGZsb2F0ICRjMiwgZmxvYXQgJGMzLCBmbG9hdCAkYzQsIHN0cmluZyAkb3B0bGlzdCk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX3NoYWRpbmcoJHBzZG9jLCAkdHlwZSwgJHgwLCAkeTAsICR4MSwgJHkxLCAkYzEsICRjMiwgJGMzLCAkYzQsICRvcHRsaXN0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEZpbGxzIGFuIGFyZWEgd2l0aCBhIHNoYWRpbmcsIHdoaWNoIGhhcyB0byBiZSBjcmVhdGVkIGJlZm9yZSB3aXRoCiAqIHBzX3NoYWRpbmcuIFRoaXMgaXMgYW4gYWx0ZXJuYXRpdmUgd2F5IHRvIGNyZWF0aW5nCiAqIGEgcGF0dGVybiBmcm9tIGEgc2hhZGluZyBwc19zaGFkaW5nX3BhdHRlcm4gYW5kIHVzaW5nCiAqIHRoZSBwYXR0ZXJuIGFzIHRoZSBmaWxsaW5nIGNvbG9yLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEBwYXJhbSBpbnQgJHNoYWRpbmdpZCBUaGUgaWRlbnRpZmllciBvZiBhIHNoYWRpbmcgcHJldmlvdXNseSBjcmVhdGVkIHdpdGgKICogcHNfc2hhZGluZy4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfc2hmaWxsKCRwc2RvYywgaW50ICRzaGFkaW5naWQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfc2hmaWxsKCRwc2RvYywgJHNoYWRpbmdpZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogT3V0cHV0IGEgdGV4dCBhdCB0aGUgZ2l2ZW4gdGV4dCBwb3NpdGlvbi4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gc3RyaW5nICR0ZXh0IFRoZSB0ZXh0IHRvIGJlIG91dHB1dC4KICogQHBhcmFtIGZsb2F0ICR4IHgtY29vcmRpbmF0ZSBvZiB0aGUgbG93ZXIgbGVmdCBjb3JuZXIgb2YgdGhlIGJveCBzdXJyb3VuZGluZyB0aGUgdGV4dC4KICogQHBhcmFtIGZsb2F0ICR5IHktY29vcmRpbmF0ZSBvZiB0aGUgbG93ZXIgbGVmdCBjb3JuZXIgb2YgdGhlIGJveCBzdXJyb3VuZGluZyB0aGUgdGV4dC4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfc2hvd194eSgkcHNkb2MsIHN0cmluZyAkdGV4dCwgZmxvYXQgJHgsIGZsb2F0ICR5KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX3Nob3dfeHkoJHBzZG9jLCAkdGV4dCwgJHgsICR5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGlzCiAqIGN1cnJlbnRseSBub3QgZG9jdW1lbnRlZDsgb25seSBpdHMgYXJndW1lbnQgbGlzdCBpcyBhdmFpbGFibGUuCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MKICogQHBhcmFtIHN0cmluZyAkdGV4dAogKiBAcGFyYW0gaW50ICRsZW4KICogQHBhcmFtIGZsb2F0ICR4Y29vcgogKiBAcGFyYW0gZmxvYXQgJHljb29yCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3Nob3dfeHkyKCRwc2RvYywgc3RyaW5nICR0ZXh0LCBpbnQgJGxlbiwgZmxvYXQgJHhjb29yLCBmbG9hdCAkeWNvb3IpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfc2hvd194eTIoJHBzZG9jLCAkdGV4dCwgJGxlbiwgJHhjb29yLCAkeWNvb3IpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIE91dHB1dCBhIHRleHQgYXQgdGhlIGN1cnJlbnQgdGV4dCBwb3NpdGlvbi4gVGhlIHRleHQgcG9zaXRpb24gY2FuIGJlIHNldAogKiBieSBzdG9yaW5nIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGludG8gdGhlIHZhbHVlcyB0ZXh0eAogKiBhbmQgdGV4dHkgd2l0aCB0aGUgZnVuY3Rpb24KICogcHNfc2V0X3ZhbHVlLiBUaGUgZnVuY3Rpb24gd2lsbCBpc3N1ZSBhbgogKiBlcnJvciBpZiBhIGZvbnQgd2FzIG5vdCBzZXQgYmVmb3JlIHdpdGggcHNfc2V0Zm9udC4KICoKICogcHNfc2hvdyBldmFsdWF0ZXMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFuZCB2YWx1ZXMKICogYXMgc2V0IGJ5IHBzX3NldF9wYXJhbWV0ZXIgYW5kCiAqIHBzX3NldF92YWx1ZS4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gc3RyaW5nICR0ZXh0IFRoZSB0ZXh0IHRvIGJlIG91dHB1dC4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfc2hvdygkcHNkb2MsIHN0cmluZyAkdGV4dCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19zaG93KCRwc2RvYywgJHRleHQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIE91dHB1dCB0ZXh0IGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLiBEbyBub3QgcHJpbnQgbW9yZSB0aGFuIGxlbiBjaGFyYWN0ZXJzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEBwYXJhbSBzdHJpbmcgJHRleHQgVGhlIHRleHQgdG8gYmUgb3V0cHV0LgogKiBAcGFyYW0gaW50ICRsZW4gVGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gcHJpbnQuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3Nob3cyKCRwc2RvYywgc3RyaW5nICR0ZXh0LCBpbnQgJGxlbik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19zaG93MigkcHNkb2MsICR0ZXh0LCAkbGVuKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBEcmF3cyB0aGUgcGF0aCBjb25zdHJ1Y3RlZCB3aXRoIHByZXZpb3VzbHkgY2FsbGVkIGRyYXdpbmcgZnVuY3Rpb25zIGxpa2UKICogcHNfbGluZXRvLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3N0cm9rZSgkcHNkb2MpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfc3Ryb2tlKCRwc2RvYyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogT3V0cHV0IHRoZSBnbHlwaCBhdCBwb3NpdGlvbiBvcmQgaW4gdGhlIGZvbnQKICogZW5jb2RpbmcgdmVjdG9yIG9mIHRoZSBjdXJyZW50IGZvbnQuIFRoZSBmb250IGVuY29kaW5nIGZvciBhIGZvbnQgY2FuIGJlCiAqIHNldCB3aGVuIGxvYWRpbmcgdGhlIGZvbnQgd2l0aCBwc19maW5kZm9udC4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gaW50ICRvcmQgVGhlIHBvc2l0aW9uIG9mIHRoZSBnbHlwaCBpbiB0aGUgZm9udCBlbmNvZGluZyB2ZWN0b3IuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3N5bWJvbCgkcHNkb2MsIGludCAkb3JkKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX3N5bWJvbCgkcHNkb2MsICRvcmQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgYSBuZXcgaW5pdGlhbCBwb2ludCBvZiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIGZsb2F0ICR4IHgtY29vcmRpbmF0ZSBvZiB0aGUgb3JpZ2luIG9mIHRoZSB0cmFuc2xhdGVkIGNvb3JkaW5hdGUgc3lzdGVtLgogKiBAcGFyYW0gZmxvYXQgJHkgeS1jb29yZGluYXRlIG9mIHRoZSBvcmlnaW4gb2YgdGhlIHRyYW5zbGF0ZWQgY29vcmRpbmF0ZSBzeXN0ZW0uCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3RyYW5zbGF0ZSgkcHNkb2MsIGZsb2F0ICR4LCBmbG9hdCAkeSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc190cmFuc2xhdGUoJHBzZG9jLCAkeCwgJHkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/pspell.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xQc3BlbGxFeGNlcHRpb247CgovKioKICoKICoKICogQHBhcmFtIGludCAkZGljdGlvbmFyeV9saW5rCiAqIEBwYXJhbSBzdHJpbmcgJHdvcmQgVGhlIGFkZGVkIHdvcmQuCiAqIEB0aHJvd3MgUHNwZWxsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc3BlbGxfYWRkX3RvX3BlcnNvbmFsKGludCAkZGljdGlvbmFyeV9saW5rLCBzdHJpbmcgJHdvcmQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNwZWxsX2FkZF90b19wZXJzb25hbCgkZGljdGlvbmFyeV9saW5rLCAkd29yZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc3BlbGxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSBpbnQgJGRpY3Rpb25hcnlfbGluawogKiBAcGFyYW0gc3RyaW5nICR3b3JkIFRoZSBhZGRlZCB3b3JkLgogKiBAdGhyb3dzIFBzcGVsbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNwZWxsX2FkZF90b19zZXNzaW9uKGludCAkZGljdGlvbmFyeV9saW5rLCBzdHJpbmcgJHdvcmQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNwZWxsX2FkZF90b19zZXNzaW9uKCRkaWN0aW9uYXJ5X2xpbmssICR3b3JkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzcGVsbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICoKICoKICogQHBhcmFtIGludCAkZGljdGlvbmFyeV9saW5rCiAqIEB0aHJvd3MgUHNwZWxsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc3BlbGxfY2xlYXJfc2Vzc2lvbihpbnQgJGRpY3Rpb25hcnlfbGluayk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc3BlbGxfY2xlYXJfc2Vzc2lvbigkZGljdGlvbmFyeV9saW5rKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzcGVsbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ3JlYXRlIGEgY29uZmlnIHVzZWQgdG8gb3BlbiBhIGRpY3Rpb25hcnkuCiAqCiAqIHBzcGVsbF9jb25maWdfY3JlYXRlIGhhcyBhIHZlcnkgc2ltaWxhciBzeW50YXggdG8KICogcHNwZWxsX25ldy4gSW4gZmFjdCwgdXNpbmcKICogcHNwZWxsX2NvbmZpZ19jcmVhdGUgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkKICogcHNwZWxsX25ld19jb25maWcgd2lsbCBwcm9kdWNlIHRoZSBleGFjdCBzYW1lIHJlc3VsdC4KICogSG93ZXZlciwgYWZ0ZXIgY3JlYXRpbmcgYSBuZXcgY29uZmlnLCB5b3UgY2FuIGFsc28gdXNlCiAqIHBzcGVsbF9jb25maWdfKiBmdW5jdGlvbnMgYmVmb3JlIGNhbGxpbmcKICogcHNwZWxsX25ld19jb25maWcgdG8gdGFrZSBhZHZhbnRhZ2Ugb2Ygc29tZQogKiBhZHZhbmNlZCBmdW5jdGlvbmFsaXR5LgogKgogKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZXMsIGNoZWNrIG91dCBpbmxpbmUgbWFudWFsIHBzcGVsbAogKiB3ZWJzaXRlOmh0dHA6Ly9hc3BlbGwubmV0Ly4KICoKICogQHBhcmFtIHN0cmluZyAkbGFuZ3VhZ2UgVGhlIGxhbmd1YWdlIHBhcmFtZXRlciBpcyB0aGUgbGFuZ3VhZ2UgY29kZSB3aGljaCBjb25zaXN0cyBvZiB0aGUKICogdHdvIGxldHRlciBJU08gNjM5IGxhbmd1YWdlIGNvZGUgYW5kIGFuIG9wdGlvbmFsIHR3byBsZXR0ZXIgSVNPCiAqIDMxNjYgY291bnRyeSBjb2RlIGFmdGVyIGEgZGFzaCBvciB1bmRlcnNjb3JlLgogKiBAcGFyYW0gc3RyaW5nICRzcGVsbGluZyBUaGUgc3BlbGxpbmcgcGFyYW1ldGVyIGlzIHRoZSByZXF1ZXN0ZWQgc3BlbGxpbmcgZm9yIGxhbmd1YWdlcwogKiB3aXRoIG1vcmUgdGhhbiBvbmUgc3BlbGxpbmcgc3VjaCBhcyBFbmdsaXNoLiBLbm93biB2YWx1ZXMgYXJlCiAqICdhbWVyaWNhbicsICdicml0aXNoJywgYW5kICdjYW5hZGlhbicuCiAqIEBwYXJhbSBzdHJpbmcgJGphcmdvbiBUaGUgamFyZ29uIHBhcmFtZXRlciBjb250YWlucyBleHRyYSBpbmZvcm1hdGlvbiB0byBkaXN0aW5ndWlzaAogKiB0d28gZGlmZmVyZW50IHdvcmRzIGxpc3RzIHRoYXQgaGF2ZSB0aGUgc2FtZSBsYW5ndWFnZSBhbmQKICogc3BlbGxpbmcgcGFyYW1ldGVycy4KICogQHBhcmFtIHN0cmluZyAkZW5jb2RpbmcgVGhlIGVuY29kaW5nIHBhcmFtZXRlciBpcyB0aGUgZW5jb2RpbmcgdGhhdCB3b3JkcyBhcmUgZXhwZWN0ZWQgdG8KICogYmUgaW4uICBWYWxpZCB2YWx1ZXMgYXJlICd1dGYtOCcsICdpc284ODU5LSonLCAna29pOC1yJywKICogJ3Zpc2NpaScsICdjcDEyNTInLCAnbWFjaGluZSB1bnNpZ25lZCAxNicsICdtYWNoaW5lIHVuc2lnbmVkCiAqIDMyJy4gVGhpcyBwYXJhbWV0ZXIgaXMgbGFyZ2VseSB1bnRlc3RlZCwgc28gYmUgY2FyZWZ1bCB3aGVuCiAqIHVzaW5nLgogKiBAcmV0dXJuIGludCBSZXR1cm5zIGEgcHNwZWxsIGNvbmZpZyBpZGVudGlmaWVyLgogKiBAdGhyb3dzIFBzcGVsbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNwZWxsX2NvbmZpZ19jcmVhdGUoc3RyaW5nICRsYW5ndWFnZSwgc3RyaW5nICRzcGVsbGluZyA9IG51bGwsIHN0cmluZyAkamFyZ29uID0gbnVsbCwgc3RyaW5nICRlbmNvZGluZyA9IG51bGwpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRlbmNvZGluZyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccHNwZWxsX2NvbmZpZ19jcmVhdGUoJGxhbmd1YWdlLCAkc3BlbGxpbmcsICRqYXJnb24sICRlbmNvZGluZyk7CiAgICB9IGVsc2VpZiAoJGphcmdvbiAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccHNwZWxsX2NvbmZpZ19jcmVhdGUoJGxhbmd1YWdlLCAkc3BlbGxpbmcsICRqYXJnb24pOwogICAgfSBlbHNlaWYgKCRzcGVsbGluZyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccHNwZWxsX2NvbmZpZ19jcmVhdGUoJGxhbmd1YWdlLCAkc3BlbGxpbmcpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHBzcGVsbF9jb25maWdfY3JlYXRlKCRsYW5ndWFnZSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc3BlbGxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBpcwogKiBjdXJyZW50bHkgbm90IGRvY3VtZW50ZWQ7IG9ubHkgaXRzIGFyZ3VtZW50IGxpc3QgaXMgYXZhaWxhYmxlLgogKgogKgogKiBAcGFyYW0gaW50ICRjb25mCiAqIEBwYXJhbSBzdHJpbmcgJGRpcmVjdG9yeQogKiBAdGhyb3dzIFBzcGVsbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNwZWxsX2NvbmZpZ19kYXRhX2RpcihpbnQgJGNvbmYsIHN0cmluZyAkZGlyZWN0b3J5KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzcGVsbF9jb25maWdfZGF0YV9kaXIoJGNvbmYsICRkaXJlY3RvcnkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNwZWxsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGlzCiAqIGN1cnJlbnRseSBub3QgZG9jdW1lbnRlZDsgb25seSBpdHMgYXJndW1lbnQgbGlzdCBpcyBhdmFpbGFibGUuCiAqCiAqCiAqIEBwYXJhbSBpbnQgJGNvbmYKICogQHBhcmFtIHN0cmluZyAkZGlyZWN0b3J5CiAqIEB0aHJvd3MgUHNwZWxsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc3BlbGxfY29uZmlnX2RpY3RfZGlyKGludCAkY29uZiwgc3RyaW5nICRkaXJlY3RvcnkpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNwZWxsX2NvbmZpZ19kaWN0X2RpcigkY29uZiwgJGRpcmVjdG9yeSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc3BlbGxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSBpbnQgJGRpY3Rpb25hcnlfbGluawogKiBAcGFyYW0gaW50ICRuIFdvcmRzIGxlc3MgdGhhbiBuIGNoYXJhY3RlcnMgd2lsbCBiZSBza2lwcGVkLgogKiBAdGhyb3dzIFBzcGVsbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNwZWxsX2NvbmZpZ19pZ25vcmUoaW50ICRkaWN0aW9uYXJ5X2xpbmssIGludCAkbik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc3BlbGxfY29uZmlnX2lnbm9yZSgkZGljdGlvbmFyeV9saW5rLCAkbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc3BlbGxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSBpbnQgJGRpY3Rpb25hcnlfbGluawogKiBAcGFyYW0gaW50ICRtb2RlIFRoZSBtb2RlIHBhcmFtZXRlciBpcyB0aGUgbW9kZSBpbiB3aGljaCBzcGVsbGNoZWNrZXIgd2lsbCB3b3JrLgogKiBUaGVyZSBhcmUgc2V2ZXJhbCBtb2RlcyBhdmFpbGFibGU6CiAqCiAqCiAqCiAqIFBTUEVMTF9GQVNUIC0gRmFzdCBtb2RlIChsZWFzdCBudW1iZXIgb2YKICogc3VnZ2VzdGlvbnMpCiAqCiAqCiAqCiAqCiAqIFBTUEVMTF9OT1JNQUwgLSBOb3JtYWwgbW9kZSAobW9yZSBzdWdnZXN0aW9ucykKICoKICoKICoKICoKICogUFNQRUxMX0JBRF9TUEVMTEVSUyAtIFNsb3cgbW9kZSAoYSBsb3Qgb2YKICogc3VnZ2VzdGlvbnMpCiAqCiAqCiAqCiAqIEB0aHJvd3MgUHNwZWxsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc3BlbGxfY29uZmlnX21vZGUoaW50ICRkaWN0aW9uYXJ5X2xpbmssIGludCAkbW9kZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc3BlbGxfY29uZmlnX21vZGUoJGRpY3Rpb25hcnlfbGluaywgJG1vZGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNwZWxsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXQgYSBmaWxlIHRoYXQgY29udGFpbnMgcGVyc29uYWwgd29yZGxpc3QuIFRoZSBwZXJzb25hbCB3b3JkbGlzdCB3aWxsIGJlCiAqIGxvYWRlZCBhbmQgdXNlZCBpbiBhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQgb25lIGFmdGVyIHlvdSBjYWxsCiAqIHBzcGVsbF9uZXdfY29uZmlnLiBUaGUgZmlsZSBpcyBhbHNvIHRoZSBmaWxlIHdoZXJlCiAqIHBzcGVsbF9zYXZlX3dvcmRsaXN0IHdpbGwgc2F2ZSBwZXJzb25hbCB3b3JkbGlzdCB0by4KICoKICogcHNwZWxsX2NvbmZpZ19wZXJzb25hbCBzaG91bGQgYmUgdXNlZCBvbiBhIGNvbmZpZwogKiBiZWZvcmUgY2FsbGluZyBwc3BlbGxfbmV3X2NvbmZpZy4KICoKICogQHBhcmFtIGludCAkZGljdGlvbmFyeV9saW5rCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGUgVGhlIHBlcnNvbmFsIHdvcmRsaXN0LiBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkLgogKiBUaGUgZmlsZSBzaG91bGQgYmUgd3JpdGFibGUgYnkgd2hvZXZlciBQSFAgcnVucyBhcyAoZS5nLiBub2JvZHkpLgogKiBAdGhyb3dzIFBzcGVsbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNwZWxsX2NvbmZpZ19wZXJzb25hbChpbnQgJGRpY3Rpb25hcnlfbGluaywgc3RyaW5nICRmaWxlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzcGVsbF9jb25maWdfcGVyc29uYWwoJGRpY3Rpb25hcnlfbGluaywgJGZpbGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNwZWxsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXQgYSBmaWxlIHRoYXQgY29udGFpbnMgcmVwbGFjZW1lbnQgcGFpcnMuCiAqCiAqIFRoZSByZXBsYWNlbWVudCBwYWlycyBpbXByb3ZlIHRoZSBxdWFsaXR5IG9mIHRoZSBzcGVsbGNoZWNrZXIuIFdoZW4gYSB3b3JkCiAqIGlzIG1pc3NwZWxsZWQsIGFuZCBhIHByb3BlciBzdWdnZXN0aW9uIHdhcyBub3QgZm91bmQgaW4gdGhlIGxpc3QsCiAqIHBzcGVsbF9zdG9yZV9yZXBsYWNlbWVudCBjYW4gYmUgdXNlZCB0byBzdG9yZSBhCiAqIHJlcGxhY2VtZW50IHBhaXIgYW5kIHRoZW4gcHNwZWxsX3NhdmVfd29yZGxpc3QgdG8KICogc2F2ZSB0aGUgd29yZGxpc3QgYWxvbmcgd2l0aCB0aGUgcmVwbGFjZW1lbnQgcGFpcnMuCiAqCiAqIHBzcGVsbF9jb25maWdfcmVwbCBzaG91bGQgYmUgdXNlZCBvbiBhIGNvbmZpZwogKiBiZWZvcmUgY2FsbGluZyBwc3BlbGxfbmV3X2NvbmZpZy4KICoKICogQHBhcmFtIGludCAkZGljdGlvbmFyeV9saW5rCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGUgVGhlIGZpbGUgc2hvdWxkIGJlIHdyaXRhYmxlIGJ5IHdob2V2ZXIgUEhQIHJ1bnMgYXMgKGUuZy4gbm9ib2R5KS4KICogQHRocm93cyBQc3BlbGxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzcGVsbF9jb25maWdfcmVwbChpbnQgJGRpY3Rpb25hcnlfbGluaywgc3RyaW5nICRmaWxlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzcGVsbF9jb25maWdfcmVwbCgkZGljdGlvbmFyeV9saW5rLCAkZmlsZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc3BlbGxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIHJ1bi10b2dldGhlciB3b3JkcyB3aWxsIGJlIHRyZWF0ZWQgYXMKICogbGVnYWwgY29tcG91bmRzLiAgVGhhdCBpcywgInRoZWNhdCIgd2lsbCBiZSBhIGxlZ2FsIGNvbXBvdW5kLCBhbHRob3VnaAogKiB0aGVyZSBzaG91bGQgYmUgYSBzcGFjZSBiZXR3ZWVuIHRoZSB0d28gd29yZHMuIENoYW5naW5nIHRoaXMgc2V0dGluZyBvbmx5CiAqIGFmZmVjdHMgdGhlIHJlc3VsdHMgcmV0dXJuZWQgYnkgcHNwZWxsX2NoZWNrOwogKiBwc3BlbGxfc3VnZ2VzdCB3aWxsIHN0aWxsIHJldHVybiBzdWdnZXN0aW9ucy4KICoKICogcHNwZWxsX2NvbmZpZ19ydW50b2dldGhlciBzaG91bGQgYmUgdXNlZCBvbiBhIGNvbmZpZwogKiBiZWZvcmUgY2FsbGluZyBwc3BlbGxfbmV3X2NvbmZpZy4KICoKICogQHBhcmFtIGludCAkZGljdGlvbmFyeV9saW5rCiAqIEBwYXJhbSBib29sICRmbGFnIFRSVUUgaWYgcnVuLXRvZ2V0aGVyIHdvcmRzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGxlZ2FsIGNvbXBvdW5kcywKICogRkFMU0Ugb3RoZXJ3aXNlLgogKiBAdGhyb3dzIFBzcGVsbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNwZWxsX2NvbmZpZ19ydW50b2dldGhlcihpbnQgJGRpY3Rpb25hcnlfbGluaywgYm9vbCAkZmxhZyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc3BlbGxfY29uZmlnX3J1bnRvZ2V0aGVyKCRkaWN0aW9uYXJ5X2xpbmssICRmbGFnKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzcGVsbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogcHNwZWxsX2NvbmZpZ19zYXZlX3JlcGwgZGV0ZXJtaW5lcyB3aGV0aGVyCiAqIHBzcGVsbF9zYXZlX3dvcmRsaXN0IHdpbGwgc2F2ZSB0aGUgcmVwbGFjZW1lbnQgcGFpcnMKICogYWxvbmcgd2l0aCB0aGUgd29yZGxpc3QuIFVzdWFsbHkgdGhlcmUgaXMgbm8gbmVlZCB0byB1c2UgdGhpcyBmdW5jdGlvbgogKiBiZWNhdXNlIGlmIHBzcGVsbF9jb25maWdfcmVwbCBpcyB1c2VkLCB0aGUKICogcmVwbGFjZW1lbnQgcGFpcnMgd2lsbCBiZSBzYXZlZCBieQogKiBwc3BlbGxfc2F2ZV93b3JkbGlzdCBhbnl3YXksIGFuZCBpZiBpdCBpcyBub3QsCiAqIHRoZSByZXBsYWNlbWVudCBwYWlycyB3aWxsIG5vdCBiZSBzYXZlZC4KICoKICogcHNwZWxsX2NvbmZpZ19zYXZlX3JlcGwgc2hvdWxkIGJlIHVzZWQgb24gYSBjb25maWcKICogYmVmb3JlIGNhbGxpbmcgcHNwZWxsX25ld19jb25maWcuCiAqCiAqIEBwYXJhbSBpbnQgJGRpY3Rpb25hcnlfbGluawogKiBAcGFyYW0gYm9vbCAkZmxhZyBUUlVFIGlmIHJlcGxhY2VtZW50IHBhaXJzIHNob3VsZCBiZSBzYXZlZCwgRkFMU0Ugb3RoZXJ3aXNlLgogKiBAdGhyb3dzIFBzcGVsbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNwZWxsX2NvbmZpZ19zYXZlX3JlcGwoaW50ICRkaWN0aW9uYXJ5X2xpbmssIGJvb2wgJGZsYWcpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNwZWxsX2NvbmZpZ19zYXZlX3JlcGwoJGRpY3Rpb25hcnlfbGluaywgJGZsYWcpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNwZWxsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKgogKgogKiBAcGFyYW0gaW50ICRjb25maWcgVGhlIGNvbmZpZyBwYXJhbWV0ZXIgaXMgdGhlIG9uZSByZXR1cm5lZCBieQogKiBwc3BlbGxfY29uZmlnX2NyZWF0ZSB3aGVuIHRoZSBjb25maWcgd2FzIGNyZWF0ZWQuCiAqIEByZXR1cm4gaW50IFJldHVybnMgYSBkaWN0aW9uYXJ5IGxpbmsgaWRlbnRpZmllciBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIFBzcGVsbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNwZWxsX25ld19jb25maWcoaW50ICRjb25maWcpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc3BlbGxfbmV3X2NvbmZpZygkY29uZmlnKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzcGVsbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBwc3BlbGxfbmV3IG9wZW5zIHVwIGEgbmV3IGRpY3Rpb25hcnkgYW5kCiAqIHJldHVybnMgdGhlIGRpY3Rpb25hcnkgbGluayBpZGVudGlmaWVyIGZvciB1c2UgaW4gb3RoZXIgcHNwZWxsCiAqIGZ1bmN0aW9ucy4KICoKICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVzLCBjaGVjayBvdXQgaW5saW5lIG1hbnVhbCBwc3BlbGwKICogd2Vic2l0ZTpodHRwOi8vYXNwZWxsLm5ldC8uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGxhbmd1YWdlIFRoZSBsYW5ndWFnZSBwYXJhbWV0ZXIgaXMgdGhlIGxhbmd1YWdlIGNvZGUgd2hpY2ggY29uc2lzdHMgb2YgdGhlCiAqIHR3byBsZXR0ZXIgSVNPIDYzOSBsYW5ndWFnZSBjb2RlIGFuZCBhbiBvcHRpb25hbCB0d28gbGV0dGVyIElTTwogKiAzMTY2IGNvdW50cnkgY29kZSBhZnRlciBhIGRhc2ggb3IgdW5kZXJzY29yZS4KICogQHBhcmFtIHN0cmluZyAkc3BlbGxpbmcgVGhlIHNwZWxsaW5nIHBhcmFtZXRlciBpcyB0aGUgcmVxdWVzdGVkIHNwZWxsaW5nIGZvciBsYW5ndWFnZXMKICogd2l0aCBtb3JlIHRoYW4gb25lIHNwZWxsaW5nIHN1Y2ggYXMgRW5nbGlzaC4gS25vd24gdmFsdWVzIGFyZQogKiAnYW1lcmljYW4nLCAnYnJpdGlzaCcsIGFuZCAnY2FuYWRpYW4nLgogKiBAcGFyYW0gc3RyaW5nICRqYXJnb24gVGhlIGphcmdvbiBwYXJhbWV0ZXIgY29udGFpbnMgZXh0cmEgaW5mb3JtYXRpb24gdG8gZGlzdGluZ3Vpc2gKICogdHdvIGRpZmZlcmVudCB3b3JkcyBsaXN0cyB0aGF0IGhhdmUgdGhlIHNhbWUgbGFuZ3VhZ2UgYW5kCiAqIHNwZWxsaW5nIHBhcmFtZXRlcnMuCiAqIEBwYXJhbSBzdHJpbmcgJGVuY29kaW5nIFRoZSBlbmNvZGluZyBwYXJhbWV0ZXIgaXMgdGhlIGVuY29kaW5nIHRoYXQgd29yZHMgYXJlIGV4cGVjdGVkIHRvCiAqIGJlIGluLiAgVmFsaWQgdmFsdWVzIGFyZSAndXRmLTgnLCAnaXNvODg1OS0qJywgJ2tvaTgtcicsCiAqICd2aXNjaWknLCAnY3AxMjUyJywgJ21hY2hpbmUgdW5zaWduZWQgMTYnLCAnbWFjaGluZSB1bnNpZ25lZAogKiAzMicuIFRoaXMgcGFyYW1ldGVyIGlzIGxhcmdlbHkgdW50ZXN0ZWQsIHNvIGJlIGNhcmVmdWwgd2hlbgogKiB1c2luZy4KICogQHBhcmFtIGludCAkbW9kZSBUaGUgbW9kZSBwYXJhbWV0ZXIgaXMgdGhlIG1vZGUgaW4gd2hpY2ggc3BlbGxjaGVja2VyIHdpbGwgd29yay4KICogVGhlcmUgYXJlIHNldmVyYWwgbW9kZXMgYXZhaWxhYmxlOgogKgogKgogKgogKiBQU1BFTExfRkFTVCAtIEZhc3QgbW9kZSAobGVhc3QgbnVtYmVyIG9mCiAqIHN1Z2dlc3Rpb25zKQogKgogKgogKgogKgogKiBQU1BFTExfTk9STUFMIC0gTm9ybWFsIG1vZGUgKG1vcmUgc3VnZ2VzdGlvbnMpCiAqCiAqCiAqCiAqCiAqIFBTUEVMTF9CQURfU1BFTExFUlMgLSBTbG93IG1vZGUgKGEgbG90IG9mCiAqIHN1Z2dlc3Rpb25zKQogKgogKgogKgogKgogKiBQU1BFTExfUlVOX1RPR0VUSEVSIC0gQ29uc2lkZXIgcnVuLXRvZ2V0aGVyIHdvcmRzCiAqIGFzIGxlZ2FsIGNvbXBvdW5kcy4gIFRoYXQgaXMsICJ0aGVjYXQiIHdpbGwgYmUgYSBsZWdhbCBjb21wb3VuZCwKICogYWx0aG91Z2ggdGhlcmUgc2hvdWxkIGJlIGEgc3BhY2UgYmV0d2VlbiB0aGUgdHdvIHdvcmRzLiBDaGFuZ2luZyB0aGlzCiAqIHNldHRpbmcgb25seSBhZmZlY3RzIHRoZSByZXN1bHRzIHJldHVybmVkIGJ5CiAqIHBzcGVsbF9jaGVjazsgcHNwZWxsX3N1Z2dlc3QKICogd2lsbCBzdGlsbCByZXR1cm4gc3VnZ2VzdGlvbnMuCiAqCiAqCiAqCiAqIE1vZGUgaXMgYSBiaXRtYXNrIGNvbnN0cnVjdGVkIGZyb20gZGlmZmVyZW50IGNvbnN0YW50cyBsaXN0ZWQgYWJvdmUuCiAqIEhvd2V2ZXIsIFBTUEVMTF9GQVNULAogKiBQU1BFTExfTk9STUFMIGFuZAogKiBQU1BFTExfQkFEX1NQRUxMRVJTIGFyZSBtdXR1YWxseSBleGNsdXNpdmUsIHNvIHlvdQogKiBzaG91bGQgc2VsZWN0IG9ubHkgb25lIG9mIHRoZW0uCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIGRpY3Rpb25hcnkgbGluayBpZGVudGlmaWVyIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgUHNwZWxsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc3BlbGxfbmV3KHN0cmluZyAkbGFuZ3VhZ2UsIHN0cmluZyAkc3BlbGxpbmcgPSBudWxsLCBzdHJpbmcgJGphcmdvbiA9IG51bGwsIHN0cmluZyAkZW5jb2RpbmcgPSBudWxsLCBpbnQgJG1vZGUgPSAwKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkbW9kZSAhPT0gMCkgewogICAgICAgICRyZXN1bHQgPSBccHNwZWxsX25ldygkbGFuZ3VhZ2UsICRzcGVsbGluZywgJGphcmdvbiwgJGVuY29kaW5nLCAkbW9kZSk7CiAgICB9IGVsc2VpZiAoJGVuY29kaW5nICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwc3BlbGxfbmV3KCRsYW5ndWFnZSwgJHNwZWxsaW5nLCAkamFyZ29uLCAkZW5jb2RpbmcpOwogICAgfSBlbHNlaWYgKCRqYXJnb24gIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHBzcGVsbF9uZXcoJGxhbmd1YWdlLCAkc3BlbGxpbmcsICRqYXJnb24pOwogICAgfSBlbHNlaWYgKCRzcGVsbGluZyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccHNwZWxsX25ldygkbGFuZ3VhZ2UsICRzcGVsbGluZyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBccHNwZWxsX25ldygkbGFuZ3VhZ2UpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNwZWxsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSBpbnQgJGRpY3Rpb25hcnlfbGluayBBIGRpY3Rpb25hcnkgbGluayBpZGVudGlmaWVyIG9wZW5lZCB3aXRoCiAqIHBzcGVsbF9uZXdfcGVyc29uYWwuCiAqIEB0aHJvd3MgUHNwZWxsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc3BlbGxfc2F2ZV93b3JkbGlzdChpbnQgJGRpY3Rpb25hcnlfbGluayk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc3BlbGxfc2F2ZV93b3JkbGlzdCgkZGljdGlvbmFyeV9saW5rKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzcGVsbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICoKICoKICogQHBhcmFtIGludCAkZGljdGlvbmFyeV9saW5rIEEgZGljdGlvbmFyeSBsaW5rIGlkZW50aWZpZXIsIG9wZW5lZCB3aXRoCiAqIHBzcGVsbF9uZXdfcGVyc29uYWwKICogQHBhcmFtIHN0cmluZyAkbWlzc3BlbGxlZCBUaGUgbWlzc3BlbGxlZCB3b3JkLgogKiBAcGFyYW0gc3RyaW5nICRjb3JyZWN0IFRoZSBmaXhlZCBzcGVsbGluZyBmb3IgdGhlIG1pc3NwZWxsZWQgd29yZC4KICogQHRocm93cyBQc3BlbGxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzcGVsbF9zdG9yZV9yZXBsYWNlbWVudChpbnQgJGRpY3Rpb25hcnlfbGluaywgc3RyaW5nICRtaXNzcGVsbGVkLCBzdHJpbmcgJGNvcnJlY3QpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNwZWxsX3N0b3JlX3JlcGxhY2VtZW50KCRkaWN0aW9uYXJ5X2xpbmssICRtaXNzcGVsbGVkLCAkY29ycmVjdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc3BlbGxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/readline.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xSZWFkbGluZUV4Y2VwdGlvbjsKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGFkZHMgYSBsaW5lIHRvIHRoZSBjb21tYW5kIGxpbmUgaGlzdG9yeS4KICoKICogQHBhcmFtIHN0cmluZyAkbGluZSBUaGUgbGluZSB0byBiZSBhZGRlZCBpbiB0aGUgaGlzdG9yeS4KICogQHRocm93cyBSZWFkbGluZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcmVhZGxpbmVfYWRkX2hpc3Rvcnkoc3RyaW5nICRsaW5lKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHJlYWRsaW5lX2FkZF9oaXN0b3J5KCRsaW5lKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFJlYWRsaW5lRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIHVwIGEgcmVhZGxpbmUgY2FsbGJhY2sgaW50ZXJmYWNlIHRoZW4gcHJpbnRzCiAqIHByb21wdCBhbmQgaW1tZWRpYXRlbHkgcmV0dXJucy4KICogQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHR3aWNlIHdpdGhvdXQgcmVtb3ZpbmcgdGhlIHByZXZpb3VzCiAqIGNhbGxiYWNrIGludGVyZmFjZSB3aWxsIGF1dG9tYXRpY2FsbHkgYW5kIGNvbnZlbmllbnRseSBvdmVyd3JpdGUgdGhlIG9sZAogKiBpbnRlcmZhY2UuCiAqCiAqIFRoZSBjYWxsYmFjayBmZWF0dXJlIGlzIHVzZWZ1bCB3aGVuIGNvbWJpbmVkIHdpdGgKICogc3RyZWFtX3NlbGVjdCBhcyBpdCBhbGxvd3MgaW50ZXJsZWF2aW5nIG9mIElPIGFuZAogKiB1c2VyIGlucHV0LCB1bmxpa2UgcmVhZGxpbmUuCiAqCiAqCiAqIFJlYWRsaW5lIENhbGxiYWNrIEludGVyZmFjZSBFeGFtcGxlCiAqCiAqIDEwKSB7CiAqICRwcm9tcHRpbmcgPSBmYWxzZTsKICogcmVhZGxpbmVfY2FsbGJhY2tfaGFuZGxlcl9yZW1vdmUoKTsKICogfSBlbHNlIHsKICogcmVhZGxpbmVfY2FsbGJhY2tfaGFuZGxlcl9pbnN0YWxsKCJbJGNdIEVudGVyIHNvbWV0aGluZzogIiwgJ3JsX2NhbGxiYWNrJyk7CiAqIH0KICogfQogKgogKiAkYyA9IDE7CiAqICRwcm9tcHRpbmcgPSB0cnVlOwogKgogKiByZWFkbGluZV9jYWxsYmFja19oYW5kbGVyX2luc3RhbGwoIlskY10gRW50ZXIgc29tZXRoaW5nOiAiLCAncmxfY2FsbGJhY2snKTsKICoKICogd2hpbGUgKCRwcm9tcHRpbmcpIHsKICogJHcgPSBOVUxMOwogKiAkZSA9IE5VTEw7CiAqICRuID0gc3RyZWFtX3NlbGVjdCgkciA9IGFycmF5KFNURElOKSwgJHcsICRlLCBudWxsKTsKICogaWYgKCRuICYmIGluX2FycmF5KFNURElOLCAkcikpIHsKICogLy8gcmVhZCBhIGNoYXJhY3Rlciwgd2lsbCBjYWxsIHRoZSBjYWxsYmFjayB3aGVuIGEgbmV3bGluZSBpcyBlbnRlcmVkCiAqIHJlYWRsaW5lX2NhbGxiYWNrX3JlYWRfY2hhcigpOwogKiB9CiAqIH0KICoKICogZWNobyAiUHJvbXB0aW5nIGRpc2FibGVkLiBBbGwgZG9uZS5cbiI7CiAqID8+CiAqIF1dPgogKgogKgogKgogKiBAcGFyYW0gc3RyaW5nICRwcm9tcHQgVGhlIHByb21wdCBtZXNzYWdlLgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0YWtlcyBvbmUgcGFyYW1ldGVyOyB0aGUKICogdXNlciBpbnB1dCByZXR1cm5lZC4KICogQHRocm93cyBSZWFkbGluZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcmVhZGxpbmVfY2FsbGJhY2tfaGFuZGxlcl9pbnN0YWxsKHN0cmluZyAkcHJvbXB0LCBjYWxsYWJsZSAkY2FsbGJhY2spOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccmVhZGxpbmVfY2FsbGJhY2tfaGFuZGxlcl9pbnN0YWxsKCRwcm9tcHQsICRjYWxsYmFjayk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBSZWFkbGluZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBjbGVhcnMgdGhlIGVudGlyZSBjb21tYW5kIGxpbmUgaGlzdG9yeS4KICoKICogQHRocm93cyBSZWFkbGluZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcmVhZGxpbmVfY2xlYXJfaGlzdG9yeSgpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccmVhZGxpbmVfY2xlYXJfaGlzdG9yeSgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUmVhZGxpbmVFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIGEgY29tcGxldGlvbiBmdW5jdGlvbi4gVGhpcyBpcyB0aGUgc2FtZSBraW5kIG9mCiAqIGZ1bmN0aW9uYWxpdHkgeW91J2QgZ2V0IGlmIHlvdSBoaXQgeW91ciB0YWIga2V5IHdoaWxlIHVzaW5nIEJhc2guCiAqCiAqIEBwYXJhbSBjYWxsYWJsZSAkZnVuY3Rpb24gWW91IG11c3Qgc3VwcGx5IHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGZ1bmN0aW9uIHdoaWNoIGFjY2VwdHMgYQogKiBwYXJ0aWFsIGNvbW1hbmQgbGluZSBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBwb3NzaWJsZSBtYXRjaGVzLgogKiBAdGhyb3dzIFJlYWRsaW5lRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiByZWFkbGluZV9jb21wbGV0aW9uX2Z1bmN0aW9uKGNhbGxhYmxlICRmdW5jdGlvbik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxyZWFkbGluZV9jb21wbGV0aW9uX2Z1bmN0aW9uKCRmdW5jdGlvbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBSZWFkbGluZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiByZWFkcyBhIGNvbW1hbmQgaGlzdG9yeSBmcm9tIGEgZmlsZS4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgUGF0aCB0byB0aGUgZmlsZW5hbWUgY29udGFpbmluZyB0aGUgY29tbWFuZCBoaXN0b3J5LgogKiBAdGhyb3dzIFJlYWRsaW5lRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiByZWFkbGluZV9yZWFkX2hpc3Rvcnkoc3RyaW5nICRmaWxlbmFtZSA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkZmlsZW5hbWUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHJlYWRsaW5lX3JlYWRfaGlzdG9yeSgkZmlsZW5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHJlYWRsaW5lX3JlYWRfaGlzdG9yeSgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUmVhZGxpbmVFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gd3JpdGVzIHRoZSBjb21tYW5kIGhpc3RvcnkgdG8gYSBmaWxlLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBQYXRoIHRvIHRoZSBzYXZlZCBmaWxlLgogKiBAdGhyb3dzIFJlYWRsaW5lRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiByZWFkbGluZV93cml0ZV9oaXN0b3J5KHN0cmluZyAkZmlsZW5hbWUgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGZpbGVuYW1lICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxyZWFkbGluZV93cml0ZV9oaXN0b3J5KCRmaWxlbmFtZSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBccmVhZGxpbmVfd3JpdGVfaGlzdG9yeSgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUmVhZGxpbmVFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/rpminfo.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xScG1pbmZvRXhjZXB0aW9uOwoKLyoqCiAqIEFkZCBhbiBhZGRpdGlvbmFsIHJldHJpZXZlZCB0YWcgaW4gc3Vic2VxdWVudCBxdWVyaWVzLgogKgogKiBAcGFyYW0gaW50ICR0YWcgT25lIG9mIFJQTVRBR18qIGNvbnN0YW50LCBzZWUgdGhlIHJwbWluZm8gY29uc3RhbnRzIHBhZ2UuCiAqIEB0aHJvd3MgUnBtaW5mb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcnBtYWRkdGFnKGludCAkdGFnKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHJwbWFkZHRhZygkdGFnKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFJwbWluZm9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/rrd.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xScmRFeGNlcHRpb247CgovKioKICogQ3JlYXRlcyB0aGUgcmRkIGRhdGFiYXNlIGZpbGUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIEZpbGVuYW1lIGZvciBuZXdseSBjcmVhdGVkIHJyZCBmaWxlLgogKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgT3B0aW9ucyBmb3IgcnJkIGNyZWF0ZSAtIGxpc3Qgb2Ygc3RyaW5ncy4gU2VlIG1hbiBwYWdlIG9mIHJyZCBjcmVhdGUKICogZm9yIHdob2xlIGxpc3Qgb2Ygb3B0aW9ucy4KICogQHRocm93cyBScmRFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHJyZF9jcmVhdGUoc3RyaW5nICRmaWxlbmFtZSwgYXJyYXkgJG9wdGlvbnMpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccnJkX2NyZWF0ZSgkZmlsZW5hbWUsICRvcHRpb25zKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFJyZEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/sem.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTZW1FeGNlcHRpb247CgovKioKICogQ2hlY2tzIHdoZXRoZXIgdGhlIG1lc3NhZ2UgcXVldWUga2V5IGV4aXN0cy4KICoKICogQHBhcmFtIGludCAka2V5IFF1ZXVlIGtleS4KICogQHRocm93cyBTZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1zZ19xdWV1ZV9leGlzdHMoaW50ICRrZXkpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXNnX3F1ZXVlX2V4aXN0cygka2V5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogbXNnX3JlY2VpdmUgd2lsbCByZWNlaXZlIHRoZSBmaXJzdCBtZXNzYWdlIGZyb20gdGhlCiAqIHNwZWNpZmllZCBxdWV1ZSBvZiB0aGUgdHlwZSBzcGVjaWZpZWQgYnkKICogZGVzaXJlZG1zZ3R5cGUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcXVldWUgTWVzc2FnZSBxdWV1ZSByZXNvdXJjZSBoYW5kbGUKICogQHBhcmFtIGludCAkZGVzaXJlZG1zZ3R5cGUgSWYgZGVzaXJlZG1zZ3R5cGUgaXMgMCwgdGhlIG1lc3NhZ2UgZnJvbSB0aGUgZnJvbnQKICogb2YgdGhlIHF1ZXVlIGlzIHJldHVybmVkLiBJZiBkZXNpcmVkbXNndHlwZSBpcwogKiBncmVhdGVyIHRoYW4gMCwgdGhlbiB0aGUgZmlyc3QgbWVzc2FnZSBvZiB0aGF0IHR5cGUgaXMgcmV0dXJuZWQuCiAqIElmIGRlc2lyZWRtc2d0eXBlIGlzIGxlc3MgdGhhbiAwLCB0aGUgZmlyc3QKICogbWVzc2FnZSBvbiB0aGUgcXVldWUgd2l0aCBhIHR5cGUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQogKiBhYnNvbHV0ZSB2YWx1ZSBvZiBkZXNpcmVkbXNndHlwZSB3aWxsIGJlIHJlYWQuCiAqIElmIG5vIG1lc3NhZ2VzIG1hdGNoIHRoZSBjcml0ZXJpYSwgeW91ciBzY3JpcHQgd2lsbCB3YWl0IHVudGlsIGEgc3VpdGFibGUKICogbWVzc2FnZSBhcnJpdmVzIG9uIHRoZSBxdWV1ZS4gIFlvdSBjYW4gcHJldmVudCB0aGUgc2NyaXB0IGZyb20gYmxvY2tpbmcKICogYnkgc3BlY2lmeWluZyBNU0dfSVBDX05PV0FJVCBpbiB0aGUKICogZmxhZ3MgcGFyYW1ldGVyLgogKiBAcGFyYW0gaW50fG51bGwgJG1zZ3R5cGUgVGhlIHR5cGUgb2YgdGhlIG1lc3NhZ2UgdGhhdCB3YXMgcmVjZWl2ZWQgd2lsbCBiZSBzdG9yZWQgaW4gdGhpcwogKiBwYXJhbWV0ZXIuCiAqIEBwYXJhbSBpbnQgJG1heHNpemUgVGhlIG1heGltdW0gc2l6ZSBvZiBtZXNzYWdlIHRvIGJlIGFjY2VwdGVkIGlzIHNwZWNpZmllZCBieSB0aGUKICogbWF4c2l6ZTsgaWYgdGhlIG1lc3NhZ2UgaW4gdGhlIHF1ZXVlIGlzIGxhcmdlcgogKiB0aGFuIHRoaXMgc2l6ZSB0aGUgZnVuY3Rpb24gd2lsbCBmYWlsICh1bmxlc3MgeW91IHNldAogKiBmbGFncyBhcyBkZXNjcmliZWQgYmVsb3cpLgogKiBAcGFyYW0gbWl4ZWQgJG1lc3NhZ2UgVGhlIHJlY2VpdmVkIG1lc3NhZ2Ugd2lsbCBiZSBzdG9yZWQgaW4gbWVzc2FnZSwKICogdW5sZXNzIHRoZXJlIHdlcmUgZXJyb3JzIHJlY2VpdmluZyB0aGUgbWVzc2FnZS4KICogQHBhcmFtIGJvb2wgJHVuc2VyaWFsaXplIElmIHNldCB0bwogKiBUUlVFLCB0aGUgbWVzc2FnZSBpcyB0cmVhdGVkIGFzIHRob3VnaCBpdCB3YXMgc2VyaWFsaXplZCB1c2luZyB0aGUKICogc2FtZSBtZWNoYW5pc20gYXMgdGhlIHNlc3Npb24gbW9kdWxlLiBUaGUgbWVzc2FnZSB3aWxsIGJlIHVuc2VyaWFsaXplZAogKiBhbmQgdGhlbiByZXR1cm5lZCB0byB5b3VyIHNjcmlwdC4gVGhpcyBhbGxvd3MgeW91IHRvIGVhc2lseSByZWNlaXZlCiAqIGFycmF5cyBvciBjb21wbGV4IG9iamVjdCBzdHJ1Y3R1cmVzIGZyb20gb3RoZXIgUEhQIHNjcmlwdHMsIG9yIGlmIHlvdQogKiBhcmUgdXNpbmcgdGhlIFdERFggc2VyaWFsaXplciwgZnJvbSBhbnkgV0REWCBjb21wYXRpYmxlIHNvdXJjZS4KICoKICogSWYgdW5zZXJpYWxpemUgaXMgRkFMU0UsIHRoZSBtZXNzYWdlIHdpbGwgYmUKICogcmV0dXJuZWQgYXMgYSBiaW5hcnktc2FmZSBzdHJpbmcuCiAqIEBwYXJhbSBpbnQgJGZsYWdzIFRoZSBvcHRpb25hbCBmbGFncyBhbGxvd3MgeW91IHRvIHBhc3MgZmxhZ3MgdG8gdGhlCiAqIGxvdy1sZXZlbCBtc2dyY3Ygc3lzdGVtIGNhbGwuICBJdCBkZWZhdWx0cyB0byAwLCBidXQgeW91IG1heSBzcGVjaWZ5IG9uZQogKiBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzIChieSBhZGRpbmcgb3IgT1JpbmcgdGhlbSB0b2dldGhlcikuCiAqCiAqIEZsYWcgdmFsdWVzIGZvciBtc2dfcmVjZWl2ZQogKgogKgogKgogKiBNU0dfSVBDX05PV0FJVAogKiBJZiB0aGVyZSBhcmUgbm8gbWVzc2FnZXMgb2YgdGhlCiAqIGRlc2lyZWRtc2d0eXBlLCByZXR1cm4gaW1tZWRpYXRlbHkgYW5kIGRvIG5vdAogKiB3YWl0LiAgVGhlIGZ1bmN0aW9uIHdpbGwgZmFpbCBhbmQgcmV0dXJuIGFuIGludGVnZXIgdmFsdWUKICogY29ycmVzcG9uZGluZyB0byBNU0dfRU5PTVNHLgogKgogKgogKgogKiBNU0dfRVhDRVBUCiAqIFVzaW5nIHRoaXMgZmxhZyBpbiBjb21iaW5hdGlvbiB3aXRoIGEKICogZGVzaXJlZG1zZ3R5cGUgZ3JlYXRlciB0aGFuIDAgd2lsbCBjYXVzZSB0aGUKICogZnVuY3Rpb24gdG8gcmVjZWl2ZSB0aGUgZmlyc3QgbWVzc2FnZSB0aGF0IGlzIG5vdCBlcXVhbCB0bwogKiBkZXNpcmVkbXNndHlwZS4KICoKICoKICogTVNHX05PRVJST1IKICoKICogSWYgdGhlIG1lc3NhZ2UgaXMgbG9uZ2VyIHRoYW4gbWF4c2l6ZSwKICogc2V0dGluZyB0aGlzIGZsYWcgd2lsbCB0cnVuY2F0ZSB0aGUgbWVzc2FnZSB0bwogKiBtYXhzaXplIGFuZCB3aWxsIG5vdCBzaWduYWwgYW4gZXJyb3IuCiAqCiAqCiAqCiAqCiAqCiAqIEBwYXJhbSBpbnR8bnVsbCAkZXJyb3Jjb2RlIElmIHRoZSBmdW5jdGlvbiBmYWlscywgdGhlIG9wdGlvbmFsIGVycm9yY29kZQogKiB3aWxsIGJlIHNldCB0byB0aGUgdmFsdWUgb2YgdGhlIHN5c3RlbSBlcnJubyB2YXJpYWJsZS4KICogQHRocm93cyBTZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1zZ19yZWNlaXZlKCRxdWV1ZSwgaW50ICRkZXNpcmVkbXNndHlwZSwgP2ludCAmJG1zZ3R5cGUsIGludCAkbWF4c2l6ZSwgJiRtZXNzYWdlLCBib29sICR1bnNlcmlhbGl6ZSA9IHRydWUsIGludCAkZmxhZ3MgPSAwLCA/aW50ICYkZXJyb3Jjb2RlID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtc2dfcmVjZWl2ZSgkcXVldWUsICRkZXNpcmVkbXNndHlwZSwgJG1zZ3R5cGUsICRtYXhzaXplLCAkbWVzc2FnZSwgJHVuc2VyaWFsaXplLCAkZmxhZ3MsICRlcnJvcmNvZGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU2VtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBtc2dfcmVtb3ZlX3F1ZXVlIGRlc3Ryb3lzIHRoZSBtZXNzYWdlIHF1ZXVlIHNwZWNpZmllZAogKiBieSB0aGUgcXVldWUuICBPbmx5IHVzZSB0aGlzIGZ1bmN0aW9uIHdoZW4gYWxsCiAqIHByb2Nlc3NlcyBoYXZlIGZpbmlzaGVkIHdvcmtpbmcgd2l0aCB0aGUgbWVzc2FnZSBxdWV1ZSBhbmQgeW91IG5lZWQgdG8KICogcmVsZWFzZSB0aGUgc3lzdGVtIHJlc291cmNlcyBoZWxkIGJ5IGl0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHF1ZXVlIE1lc3NhZ2UgcXVldWUgcmVzb3VyY2UgaGFuZGxlCiAqIEB0aHJvd3MgU2VtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtc2dfcmVtb3ZlX3F1ZXVlKCRxdWV1ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtc2dfcmVtb3ZlX3F1ZXVlKCRxdWV1ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIG1zZ19zZW5kIHNlbmRzIGEgbWVzc2FnZSBvZiB0eXBlCiAqIG1zZ3R5cGUgKHdoaWNoIE1VU1QgYmUgZ3JlYXRlciB0aGFuIDApIHRvCiAqIHRoZSBtZXNzYWdlIHF1ZXVlIHNwZWNpZmllZCBieSBxdWV1ZS4KICoKICogQHBhcmFtIHJlc291cmNlICRxdWV1ZSBNZXNzYWdlIHF1ZXVlIHJlc291cmNlIGhhbmRsZQogKiBAcGFyYW0gaW50ICRtc2d0eXBlIFRoZSB0eXBlIG9mIHRoZSBtZXNzYWdlIChNVVNUIGJlIGdyZWF0ZXIgdGhhbiAwKQogKiBAcGFyYW0gbWl4ZWQgJG1lc3NhZ2UgVGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2UuCiAqCiAqIElmIHNlcmlhbGl6ZSBzZXQgdG8gRkFMU0UgaXMgc3VwcGxpZWQsCiAqIE1VU1QgYmUgb2YgdHlwZTogc3RyaW5nLCBpbnRlZ2VyLCBmbG9hdAogKiBvciBib29sLiBJbiBvdGhlciBjYXNlIGEgd2FybmluZyB3aWxsIGJlIGlzc3VlZC4KICogQHBhcmFtIGJvb2wgJHNlcmlhbGl6ZSBUaGUgb3B0aW9uYWwgc2VyaWFsaXplIGNvbnRyb2xzIGhvdyB0aGUKICogbWVzc2FnZSBpcyBzZW50LiAgc2VyaWFsaXplCiAqIGRlZmF1bHRzIHRvIFRSVUUgd2hpY2ggbWVhbnMgdGhhdCB0aGUgbWVzc2FnZSBpcwogKiBzZXJpYWxpemVkIHVzaW5nIHRoZSBzYW1lIG1lY2hhbmlzbSBhcyB0aGUgc2Vzc2lvbiBtb2R1bGUgYmVmb3JlIGJlaW5nCiAqIHNlbnQgdG8gdGhlIHF1ZXVlLiAgVGhpcyBhbGxvd3MgY29tcGxleCBhcnJheXMgYW5kIG9iamVjdHMgdG8gYmUgc2VudCB0bwogKiBvdGhlciBQSFAgc2NyaXB0cywgb3IgaWYgeW91IGFyZSB1c2luZyB0aGUgV0REWCBzZXJpYWxpemVyLCB0byBhbnkgV0REWAogKiBjb21wYXRpYmxlIGNsaWVudC4KICogQHBhcmFtIGJvb2wgJGJsb2NraW5nIElmIHRoZSBtZXNzYWdlIGlzIHRvbyBsYXJnZSB0byBmaXQgaW4gdGhlIHF1ZXVlLCB5b3VyIHNjcmlwdCB3aWxsIHdhaXQKICogdW50aWwgYW5vdGhlciBwcm9jZXNzIHJlYWRzIG1lc3NhZ2VzIGZyb20gdGhlIHF1ZXVlIGFuZCBmcmVlcyBlbm91Z2gKICogc3BhY2UgZm9yIHlvdXIgbWVzc2FnZSB0byBiZSBzZW50LgogKiBUaGlzIGlzIGNhbGxlZCBibG9ja2luZzsgeW91IGNhbiBwcmV2ZW50IGJsb2NraW5nIGJ5IHNldHRpbmcgdGhlCiAqIG9wdGlvbmFsIGJsb2NraW5nIHBhcmFtZXRlciB0byBGQUxTRSwgaW4gd2hpY2gKICogY2FzZSBtc2dfc2VuZCB3aWxsIGltbWVkaWF0ZWx5IHJldHVybiBGQUxTRSBpZiB0aGUKICogbWVzc2FnZSBpcyB0b28gYmlnIGZvciB0aGUgcXVldWUsIGFuZCBzZXQgdGhlIG9wdGlvbmFsCiAqIGVycm9yY29kZSB0byBNU0dfRUFHQUlOLAogKiBpbmRpY2F0aW5nIHRoYXQgeW91IHNob3VsZCB0cnkgdG8gc2VuZCB5b3VyIG1lc3NhZ2UgYWdhaW4gYSBsaXR0bGUKICogbGF0ZXIgb24uCiAqIEBwYXJhbSBpbnR8bnVsbCAkZXJyb3Jjb2RlIElmIHRoZSBmdW5jdGlvbiBmYWlscywgdGhlIG9wdGlvbmFsIGVycm9yY29kZSB3aWxsIGJlIHNldCB0byB0aGUgdmFsdWUgb2YgdGhlIHN5c3RlbSBlcnJubyB2YXJpYWJsZS4KICogQHRocm93cyBTZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1zZ19zZW5kKCRxdWV1ZSwgaW50ICRtc2d0eXBlLCAkbWVzc2FnZSwgYm9vbCAkc2VyaWFsaXplID0gdHJ1ZSwgYm9vbCAkYmxvY2tpbmcgPSB0cnVlLCA/aW50ICYkZXJyb3Jjb2RlID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtc2dfc2VuZCgkcXVldWUsICRtc2d0eXBlLCAkbWVzc2FnZSwgJHNlcmlhbGl6ZSwgJGJsb2NraW5nLCAkZXJyb3Jjb2RlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogbXNnX3NldF9xdWV1ZSBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mIHRoZQogKiBtc2dfcGVybS51aWQsIG1zZ19wZXJtLmdpZCwgbXNnX3Blcm0ubW9kZSBhbmQgbXNnX3FieXRlcyBmaWVsZHMgb2YgdGhlCiAqIHVuZGVybHlpbmcgbWVzc2FnZSBxdWV1ZSBkYXRhIHN0cnVjdHVyZS4KICoKICogQ2hhbmdpbmcgdGhlIGRhdGEgc3RydWN0dXJlIHdpbGwgcmVxdWlyZSB0aGF0IFBIUCBiZSBydW5uaW5nIGFzIHRoZSBzYW1lCiAqIHVzZXIgdGhhdCBjcmVhdGVkIHRoZSBxdWV1ZSwgb3ducyB0aGUgcXVldWUgKGFzIGRldGVybWluZWQgYnkgdGhlCiAqIGV4aXN0aW5nIG1zZ19wZXJtLnh4eCBmaWVsZHMpLCBvciBiZSBydW5uaW5nIHdpdGggcm9vdCBwcml2aWxlZ2VzLgogKiByb290IHByaXZpbGVnZXMgYXJlIHJlcXVpcmVkIHRvIHJhaXNlIHRoZSBtc2dfcWJ5dGVzIHZhbHVlcyBhYm92ZSB0aGUKICogc3lzdGVtIGRlZmluZWQgbGltaXQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcXVldWUgTWVzc2FnZSBxdWV1ZSByZXNvdXJjZSBoYW5kbGUKICogQHBhcmFtIGFycmF5ICRkYXRhIFlvdSBzcGVjaWZ5IHRoZSB2YWx1ZXMgeW91IHJlcXVpcmUgYnkgc2V0dGluZyB0aGUgdmFsdWUgb2YgdGhlIGtleXMKICogdGhhdCB5b3UgcmVxdWlyZSBpbiB0aGUgZGF0YSBhcnJheS4KICogQHRocm93cyBTZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1zZ19zZXRfcXVldWUoJHF1ZXVlLCBhcnJheSAkZGF0YSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtc2dfc2V0X3F1ZXVlKCRxdWV1ZSwgJGRhdGEpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU2VtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBzZW1fYWNxdWlyZSBieSBkZWZhdWx0IGJsb2NrcyAoaWYgbmVjZXNzYXJ5KSB1bnRpbCB0aGUKICogc2VtYXBob3JlIGNhbiBiZSBhY3F1aXJlZC4gIEEgcHJvY2VzcyBhdHRlbXB0aW5nIHRvIGFjcXVpcmUgYSBzZW1hcGhvcmUgd2hpY2gKICogaXQgaGFzIGFscmVhZHkgYWNxdWlyZWQgd2lsbCBibG9jayBmb3JldmVyIGlmIGFjcXVpcmluZyB0aGUgc2VtYXBob3JlIHdvdWxkCiAqIGNhdXNlIGl0cyBtYXhpbXVtIG51bWJlciBvZiBzZW1hcGhvcmUgdG8gYmUgZXhjZWVkZWQuCiAqCiAqIEFmdGVyIHByb2Nlc3NpbmcgYSByZXF1ZXN0LCBhbnkgc2VtYXBob3JlcyBhY3F1aXJlZCBieSB0aGUgcHJvY2VzcyBidXQgbm90CiAqIGV4cGxpY2l0bHkgcmVsZWFzZWQgd2lsbCBiZSByZWxlYXNlZCBhdXRvbWF0aWNhbGx5IGFuZCBhIHdhcm5pbmcgd2lsbCBiZQogKiBnZW5lcmF0ZWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc2VtX2lkZW50aWZpZXIgc2VtX2lkZW50aWZpZXIgaXMgYSBzZW1hcGhvcmUgcmVzb3VyY2UsCiAqIG9idGFpbmVkIGZyb20gc2VtX2dldC4KICogQHBhcmFtIGJvb2wgJG5vd2FpdCBTcGVjaWZpZXMgaWYgdGhlIHByb2Nlc3Mgc2hvdWxkbid0IHdhaXQgZm9yIHRoZSBzZW1hcGhvcmUgdG8gYmUgYWNxdWlyZWQuCiAqIElmIHNldCB0byB0cnVlLCB0aGUgY2FsbCB3aWxsIHJldHVybgogKiBmYWxzZSBpbW1lZGlhdGVseSBpZiBhIHNlbWFwaG9yZSBjYW5ub3QgYmUgaW1tZWRpYXRlbHkKICogYWNxdWlyZWQuCiAqIEB0aHJvd3MgU2VtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzZW1fYWNxdWlyZSgkc2VtX2lkZW50aWZpZXIsIGJvb2wgJG5vd2FpdCA9IGZhbHNlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNlbV9hY3F1aXJlKCRzZW1faWRlbnRpZmllciwgJG5vd2FpdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIHNlbV9nZXQgcmV0dXJucyBhbiBpZCB0aGF0IGNhbiBiZSB1c2VkIHRvCiAqIGFjY2VzcyB0aGUgU3lzdGVtIFYgc2VtYXBob3JlIHdpdGggdGhlIGdpdmVuIGtleS4KICoKICogQSBzZWNvbmQgY2FsbCB0byBzZW1fZ2V0IGZvciB0aGUgc2FtZSBrZXkKICogd2lsbCByZXR1cm4gYSBkaWZmZXJlbnQgc2VtYXBob3JlIGlkZW50aWZpZXIsIGJ1dCBib3RoCiAqIGlkZW50aWZpZXJzIGFjY2VzcyB0aGUgc2FtZSB1bmRlcmx5aW5nIHNlbWFwaG9yZS4KICoKICogSWYga2V5IGlzIDAsIGEgbmV3IHByaXZhdGUgc2VtYXBob3JlCiAqIGlzIGNyZWF0ZWQgZm9yIGVhY2ggY2FsbCB0byBzZW1fZ2V0LgogKgogKiBAcGFyYW0gaW50ICRrZXkKICogQHBhcmFtIGludCAkbWF4X2FjcXVpcmUgVGhlIG51bWJlciBvZiBwcm9jZXNzZXMgdGhhdCBjYW4gYWNxdWlyZSB0aGUgc2VtYXBob3JlIHNpbXVsdGFuZW91c2x5CiAqIGlzIHNldCB0byBtYXhfYWNxdWlyZS4KICogQHBhcmFtIGludCAkcGVybSBUaGUgc2VtYXBob3JlIHBlcm1pc3Npb25zLiBBY3R1YWxseSB0aGlzIHZhbHVlIGlzCiAqIHNldCBvbmx5IGlmIHRoZSBwcm9jZXNzIGZpbmRzIGl0IGlzIHRoZSBvbmx5IHByb2Nlc3MgY3VycmVudGx5CiAqIGF0dGFjaGVkIHRvIHRoZSBzZW1hcGhvcmUuCiAqIEBwYXJhbSBpbnQgJGF1dG9fcmVsZWFzZSBTcGVjaWZpZXMgaWYgdGhlIHNlbWFwaG9yZSBzaG91bGQgYmUgYXV0b21hdGljYWxseSByZWxlYXNlZCBvbiByZXF1ZXN0CiAqIHNodXRkb3duLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBwb3NpdGl2ZSBzZW1hcGhvcmUgaWRlbnRpZmllciBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIFNlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc2VtX2dldChpbnQgJGtleSwgaW50ICRtYXhfYWNxdWlyZSA9IDEsIGludCAkcGVybSA9IDA2NjYsIGludCAkYXV0b19yZWxlYXNlID0gMSkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzZW1fZ2V0KCRrZXksICRtYXhfYWNxdWlyZSwgJHBlcm0sICRhdXRvX3JlbGVhc2UpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU2VtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHNlbV9yZWxlYXNlIHJlbGVhc2VzIHRoZSBzZW1hcGhvcmUgaWYgaXQKICogaXMgY3VycmVudGx5IGFjcXVpcmVkIGJ5IHRoZSBjYWxsaW5nIHByb2Nlc3MsIG90aGVyd2lzZQogKiBhIHdhcm5pbmcgaXMgZ2VuZXJhdGVkLgogKgogKiBBZnRlciByZWxlYXNpbmcgdGhlIHNlbWFwaG9yZSwgc2VtX2FjcXVpcmUKICogbWF5IGJlIGNhbGxlZCB0byByZS1hY3F1aXJlIGl0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNlbV9pZGVudGlmaWVyIEEgU2VtYXBob3JlIHJlc291cmNlIGhhbmRsZSBhcyByZXR1cm5lZCBieQogKiBzZW1fZ2V0LgogKiBAdGhyb3dzIFNlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc2VtX3JlbGVhc2UoJHNlbV9pZGVudGlmaWVyKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNlbV9yZWxlYXNlKCRzZW1faWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIHNlbV9yZW1vdmUgcmVtb3ZlcyB0aGUgZ2l2ZW4gc2VtYXBob3JlLgogKgogKiBBZnRlciByZW1vdmluZyB0aGUgc2VtYXBob3JlLCBpdCBpcyBubyBsb25nZXIgYWNjZXNzaWJsZS4KICoKICogQHBhcmFtIHJlc291cmNlICRzZW1faWRlbnRpZmllciBBIHNlbWFwaG9yZSByZXNvdXJjZSBpZGVudGlmaWVyIGFzIHJldHVybmVkCiAqIGJ5IHNlbV9nZXQuCiAqIEB0aHJvd3MgU2VtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzZW1fcmVtb3ZlKCRzZW1faWRlbnRpZmllcik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzZW1fcmVtb3ZlKCRzZW1faWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIHNobV9wdXRfdmFyIGluc2VydHMgb3IgdXBkYXRlcyB0aGUKICogdmFyaWFibGUgd2l0aCB0aGUgZ2l2ZW4KICogdmFyaWFibGVfa2V5LgogKgogKiBXYXJuaW5ncyAoRV9XQVJOSU5HIGxldmVsKSB3aWxsIGJlIGlzc3VlZCBpZgogKiBzaG1faWRlbnRpZmllciBpcyBub3QgYSB2YWxpZCBTeXNWIHNoYXJlZCBtZW1vcnkKICogaW5kZXggb3IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggc2hhcmVkIG1lbW9yeSByZW1haW5pbmcgdG8gY29tcGxldGUgeW91cgogKiByZXF1ZXN0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNobV9pZGVudGlmaWVyIEEgc2hhcmVkIG1lbW9yeSByZXNvdXJjZSBoYW5kbGUgYXMgcmV0dXJuZWQgYnkKICogc2htX2F0dGFjaAogKiBAcGFyYW0gaW50ICR2YXJpYWJsZV9rZXkgVGhlIHZhcmlhYmxlIGtleS4KICogQHBhcmFtIG1peGVkICR2YXJpYWJsZSBUaGUgdmFyaWFibGUuIEFsbCB2YXJpYWJsZSB0eXBlcwogKiB0aGF0IHNlcmlhbGl6ZSBzdXBwb3J0cyBtYXkgYmUgdXNlZDogZ2VuZXJhbGx5CiAqIHRoaXMgbWVhbnMgYWxsIHR5cGVzIGV4Y2VwdCBmb3IgcmVzb3VyY2VzIGFuZCBzb21lIGludGVybmFsIG9iamVjdHMKICogdGhhdCBjYW5ub3QgYmUgc2VyaWFsaXplZC4KICogQHRocm93cyBTZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNobV9wdXRfdmFyKCRzaG1faWRlbnRpZmllciwgaW50ICR2YXJpYWJsZV9rZXksICR2YXJpYWJsZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzaG1fcHV0X3Zhcigkc2htX2lkZW50aWZpZXIsICR2YXJpYWJsZV9rZXksICR2YXJpYWJsZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJlbW92ZXMgYSB2YXJpYWJsZSB3aXRoIGEgZ2l2ZW4gdmFyaWFibGVfa2V5CiAqIGFuZCBmcmVlcyB0aGUgb2NjdXBpZWQgbWVtb3J5LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNobV9pZGVudGlmaWVyIFRoZSBzaGFyZWQgbWVtb3J5IGlkZW50aWZpZXIgYXMgcmV0dXJuZWQgYnkKICogc2htX2F0dGFjaAogKiBAcGFyYW0gaW50ICR2YXJpYWJsZV9rZXkgVGhlIHZhcmlhYmxlIGtleS4KICogQHRocm93cyBTZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNobV9yZW1vdmVfdmFyKCRzaG1faWRlbnRpZmllciwgaW50ICR2YXJpYWJsZV9rZXkpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc2htX3JlbW92ZV92YXIoJHNobV9pZGVudGlmaWVyLCAkdmFyaWFibGVfa2V5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogc2htX3JlbW92ZSByZW1vdmVzIHRoZSBzaGFyZWQgbWVtb3J5CiAqIHNobV9pZGVudGlmaWVyLiBBbGwgZGF0YSB3aWxsIGJlIGRlc3Ryb3llZC4KICoKICogQHBhcmFtIHJlc291cmNlICRzaG1faWRlbnRpZmllciBUaGUgc2hhcmVkIG1lbW9yeSBpZGVudGlmaWVyIGFzIHJldHVybmVkIGJ5CiAqIHNobV9hdHRhY2gKICogQHRocm93cyBTZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNobV9yZW1vdmUoJHNobV9pZGVudGlmaWVyKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNobV9yZW1vdmUoJHNobV9pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/session.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTZXNzaW9uRXhjZXB0aW9uOwoKLyoqCiAqIHNlc3Npb25fYWJvcnQgZmluaXNoZXMgc2Vzc2lvbiB3aXRob3V0IHNhdmluZwogKiBkYXRhLiBUaHVzIHRoZSBvcmlnaW5hbCB2YWx1ZXMgaW4gc2Vzc2lvbiBkYXRhIGFyZSBrZXB0LgogKgogKiBAdGhyb3dzIFNlc3Npb25FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNlc3Npb25fYWJvcnQoKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNlc3Npb25fYWJvcnQoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNlc3Npb25FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIHNlc3Npb25fZGVjb2RlIGRlY29kZXMgdGhlIHNlcmlhbGl6ZWQgc2Vzc2lvbiBkYXRhIHByb3ZpZGVkIGluCiAqICRkYXRhLCBhbmQgcG9wdWxhdGVzIHRoZSAkX1NFU1NJT04gc3VwZXJnbG9iYWwKICogd2l0aCB0aGUgcmVzdWx0LgogKgogKiBCeSBkZWZhdWx0LCB0aGUgdW5zZXJpYWxpemF0aW9uIG1ldGhvZCB1c2VkIGlzIGludGVybmFsIHRvIFBIUCwgYW5kIGlzIG5vdCB0aGUgc2FtZSBhcyB1bnNlcmlhbGl6ZS4KICogVGhlIHNlcmlhbGl6YXRpb24gbWV0aG9kIGNhbiBiZSBzZXQgdXNpbmcgc2Vzc2lvbi5zZXJpYWxpemVfaGFuZGxlci4KICoKICogQHBhcmFtIHN0cmluZyAkZGF0YSBUaGUgZW5jb2RlZCBkYXRhIHRvIGJlIHN0b3JlZC4KICogQHRocm93cyBTZXNzaW9uRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzZXNzaW9uX2RlY29kZShzdHJpbmcgJGRhdGEpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc2Vzc2lvbl9kZWNvZGUoJGRhdGEpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU2Vzc2lvbkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogSW4gb3JkZXIgdG8ga2lsbCB0aGUgc2Vzc2lvbiBhbHRvZ2V0aGVyLCB0aGUKICogc2Vzc2lvbiBJRCBtdXN0IGFsc28gYmUgdW5zZXQuIElmIGEgY29va2llIGlzIHVzZWQgdG8gcHJvcGFnYXRlIHRoZQogKiBzZXNzaW9uIElEIChkZWZhdWx0IGJlaGF2aW9yKSwgdGhlbiB0aGUgc2Vzc2lvbiBjb29raWUgbXVzdCBiZSBkZWxldGVkLgogKiBzZXRjb29raWUgbWF5IGJlIHVzZWQgZm9yIHRoYXQuCiAqCiAqIFdoZW4gc2Vzc2lvbi51c2Vfc3RyaWN0X21vZGUKICogaXMgZW5hYmxlZC4gWW91IGRvIG5vdCBoYXZlIHRvIHJlbW92ZSBvYnNvbGV0ZSBzZXNzaW9uIElEIGNvb2tpZSBiZWNhdXNlCiAqIHNlc3Npb24gbW9kdWxlIHdpbGwgbm90IGFjY2VwdCBzZXNzaW9uIElEIGNvb2tpZSB3aGVuIHRoZXJlIGlzIG5vCiAqIGRhdGEgYXNzb2NpYXRlZCB0byB0aGUgc2Vzc2lvbiBJRCBhbmQgc2V0IG5ldyBzZXNzaW9uIElEIGNvb2tpZS4KICogRW5hYmxpbmcgc2Vzc2lvbi51c2Vfc3RyaWN0X21vZGUKICogaXMgcmVjb21tZW5kZWQgZm9yIGFsbCBzaXRlcy4KICoKICogQHRocm93cyBTZXNzaW9uRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzZXNzaW9uX2Rlc3Ryb3koKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNlc3Npb25fZGVzdHJveSgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU2Vzc2lvbkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogc2Vzc2lvbl9yZWdlbmVyYXRlX2lkIHdpbGwgcmVwbGFjZSB0aGUgY3VycmVudAogKiBzZXNzaW9uIGlkIHdpdGggYSBuZXcgb25lLCBhbmQga2VlcCB0aGUgY3VycmVudCBzZXNzaW9uIGluZm9ybWF0aW9uLgogKgogKiBXaGVuIHNlc3Npb24udXNlX3RyYW5zX3NpZAogKiBpcyBlbmFibGVkLCBvdXRwdXQgbXVzdCBiZSBzdGFydGVkIGFmdGVyIHNlc3Npb25fcmVnZW5lcmF0ZV9pZAogKiBjYWxsLiBPdGhlcndpc2UsIG9sZCBzZXNzaW9uIElEIGlzIHVzZWQuCiAqCiAqIEBwYXJhbSBib29sICRkZWxldGVfb2xkX3Nlc3Npb24gV2hldGhlciB0byBkZWxldGUgdGhlIG9sZCBhc3NvY2lhdGVkIHNlc3Npb24gZmlsZSBvciBub3QuCiAqIFlvdSBzaG91bGQgbm90IGRlbGV0ZSBvbGQgc2Vzc2lvbiBpZiB5b3UgbmVlZCB0byBhdm9pZAogKiByYWNlcyBjYXVzZWQgYnkgZGVsZXRpb24gb3IgZGV0ZWN0L2F2b2lkIHNlc3Npb24gaGlqYWNrCiAqIGF0dGFja3MuCiAqIEB0aHJvd3MgU2Vzc2lvbkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc2Vzc2lvbl9yZWdlbmVyYXRlX2lkKGJvb2wgJGRlbGV0ZV9vbGRfc2Vzc2lvbiA9IGZhbHNlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNlc3Npb25fcmVnZW5lcmF0ZV9pZCgkZGVsZXRlX29sZF9zZXNzaW9uKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNlc3Npb25FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIHNlc3Npb25fcmVzZXQgcmVpbml0aWFsaXplcyBhIHNlc3Npb24gd2l0aAogKiBvcmlnaW5hbCB2YWx1ZXMgc3RvcmVkIGluIHNlc3Npb24gc3RvcmFnZS4gVGhpcyBmdW5jdGlvbiByZXF1aXJlcyBhbiBhY3RpdmUgc2Vzc2lvbiBhbmQKICogZGlzY2FyZHMgY2hhbmdlcyBpbiAkX1NFU1NJT04uCiAqCiAqIEB0aHJvd3MgU2Vzc2lvbkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc2Vzc2lvbl9yZXNldCgpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc2Vzc2lvbl9yZXNldCgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU2Vzc2lvbkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhlIHNlc3Npb25fdW5zZXQgZnVuY3Rpb24gZnJlZXMgYWxsIHNlc3Npb24gdmFyaWFibGVzCiAqIGN1cnJlbnRseSByZWdpc3RlcmVkLgogKgogKiBAdGhyb3dzIFNlc3Npb25FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNlc3Npb25fdW5zZXQoKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNlc3Npb25fdW5zZXQoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNlc3Npb25FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEVuZCB0aGUgY3VycmVudCBzZXNzaW9uIGFuZCBzdG9yZSBzZXNzaW9uIGRhdGEuCiAqCiAqIFNlc3Npb24gZGF0YSBpcyB1c3VhbGx5IHN0b3JlZCBhZnRlciB5b3VyIHNjcmlwdCB0ZXJtaW5hdGVkIHdpdGhvdXQgdGhlCiAqIG5lZWQgdG8gY2FsbCBzZXNzaW9uX3dyaXRlX2Nsb3NlLCBidXQgYXMgc2Vzc2lvbiBkYXRhCiAqIGlzIGxvY2tlZCB0byBwcmV2ZW50IGNvbmN1cnJlbnQgd3JpdGVzIG9ubHkgb25lIHNjcmlwdCBtYXkgb3BlcmF0ZSBvbiBhCiAqIHNlc3Npb24gYXQgYW55IHRpbWUuIFdoZW4gdXNpbmcgZnJhbWVzZXRzIHRvZ2V0aGVyIHdpdGggc2Vzc2lvbnMgeW91IHdpbGwKICogZXhwZXJpZW5jZSB0aGUgZnJhbWVzIGxvYWRpbmcgb25lIGJ5IG9uZSBkdWUgdG8gdGhpcyBsb2NraW5nLiBZb3UgY2FuCiAqIHJlZHVjZSB0aGUgdGltZSBuZWVkZWQgdG8gbG9hZCBhbGwgdGhlIGZyYW1lcyBieSBlbmRpbmcgdGhlIHNlc3Npb24gYXMKICogc29vbiBhcyBhbGwgY2hhbmdlcyB0byBzZXNzaW9uIHZhcmlhYmxlcyBhcmUgZG9uZS4KICoKICogQHRocm93cyBTZXNzaW9uRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzZXNzaW9uX3dyaXRlX2Nsb3NlKCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzZXNzaW9uX3dyaXRlX2Nsb3NlKCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTZXNzaW9uRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/shmop.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTaG1vcEV4Y2VwdGlvbjsKCi8qKgogKiBzaG1vcF9kZWxldGUgaXMgdXNlZCB0byBkZWxldGUgYSBzaGFyZWQgbWVtb3J5IGJsb2NrLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNobWlkIFRoZSBzaGFyZWQgbWVtb3J5IGJsb2NrIHJlc291cmNlIGNyZWF0ZWQgYnkKICogc2htb3Bfb3BlbgogKiBAdGhyb3dzIFNobW9wRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzaG1vcF9kZWxldGUoJHNobWlkKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNobW9wX2RlbGV0ZSgkc2htaWQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU2htb3BFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIHNobW9wX3JlYWQgd2lsbCByZWFkIGEgc3RyaW5nIGZyb20gc2hhcmVkIG1lbW9yeSBibG9jay4KICoKICogQHBhcmFtIHJlc291cmNlICRzaG1pZCBUaGUgc2hhcmVkIG1lbW9yeSBibG9jayBpZGVudGlmaWVyIGNyZWF0ZWQgYnkKICogc2htb3Bfb3BlbgogKiBAcGFyYW0gaW50ICRzdGFydCBPZmZzZXQgZnJvbSB3aGljaCB0byBzdGFydCByZWFkaW5nCiAqIEBwYXJhbSBpbnQgJGNvdW50IFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC4KICogMCByZWFkcyBzaG1vcF9zaXplKCRzaG1pZCkgLSAkc3RhcnQgYnl0ZXMuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIGRhdGEuCiAqIEB0aHJvd3MgU2htb3BFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNobW9wX3JlYWQoJHNobWlkLCBpbnQgJHN0YXJ0LCBpbnQgJGNvdW50KTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc2htb3BfcmVhZCgkc2htaWQsICRzdGFydCwgJGNvdW50KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNobW9wRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHNobW9wX3dyaXRlIHdpbGwgd3JpdGUgYSBzdHJpbmcgaW50byBzaGFyZWQgbWVtb3J5IGJsb2NrLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNobWlkIFRoZSBzaGFyZWQgbWVtb3J5IGJsb2NrIGlkZW50aWZpZXIgY3JlYXRlZCBieQogKiBzaG1vcF9vcGVuCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgQSBzdHJpbmcgdG8gd3JpdGUgaW50byBzaGFyZWQgbWVtb3J5IGJsb2NrCiAqIEBwYXJhbSBpbnQgJG9mZnNldCBTcGVjaWZpZXMgd2hlcmUgdG8gc3RhcnQgd3JpdGluZyBkYXRhIGluc2lkZSB0aGUgc2hhcmVkIG1lbW9yeQogKiBzZWdtZW50LgogKiBAcmV0dXJuIGludCBUaGUgc2l6ZSBvZiB0aGUgd3JpdHRlbiBkYXRhLgogKiBAdGhyb3dzIFNobW9wRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzaG1vcF93cml0ZSgkc2htaWQsIHN0cmluZyAkZGF0YSwgaW50ICRvZmZzZXQpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzaG1vcF93cml0ZSgkc2htaWQsICRkYXRhLCAkb2Zmc2V0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNobW9wRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/simplexml.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTaW1wbGV4bWxFeGNlcHRpb247CgovKioKICogVGhpcyBmdW5jdGlvbiB0YWtlcyBhIG5vZGUgb2YgYSBET00KICogZG9jdW1lbnQgYW5kIG1ha2VzIGl0IGludG8gYSBTaW1wbGVYTUwgbm9kZS4gVGhpcyBuZXcgb2JqZWN0IGNhbgogKiB0aGVuIGJlIHVzZWQgYXMgYSBuYXRpdmUgU2ltcGxlWE1MIGVsZW1lbnQuCiAqCiAqIEBwYXJhbSBcRE9NTm9kZSAkbm9kZSBBIERPTSBFbGVtZW50IG5vZGUKICogQHBhcmFtIHN0cmluZyAkY2xhc3NfbmFtZSBZb3UgbWF5IHVzZSB0aGlzIG9wdGlvbmFsIHBhcmFtZXRlciBzbyB0aGF0CiAqIHNpbXBsZXhtbF9pbXBvcnRfZG9tIHdpbGwgcmV0dXJuIGFuIG9iamVjdCBvZgogKiB0aGUgc3BlY2lmaWVkIGNsYXNzLiBUaGF0IGNsYXNzIHNob3VsZCBleHRlbmQgdGhlCiAqIFNpbXBsZVhNTEVsZW1lbnQgY2xhc3MuCiAqIEByZXR1cm4gXFNpbXBsZVhNTEVsZW1lbnQgUmV0dXJucyBhIFNpbXBsZVhNTEVsZW1lbnQuCiAqIEB0aHJvd3MgU2ltcGxleG1sRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzaW1wbGV4bWxfaW1wb3J0X2RvbShcRE9NTm9kZSAkbm9kZSwgc3RyaW5nICRjbGFzc19uYW1lID0gIlNpbXBsZVhNTEVsZW1lbnQiKTogXFNpbXBsZVhNTEVsZW1lbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzaW1wbGV4bWxfaW1wb3J0X2RvbSgkbm9kZSwgJGNsYXNzX25hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU2ltcGxleG1sRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIENvbnZlcnQgdGhlIHdlbGwtZm9ybWVkIFhNTCBkb2N1bWVudCBpbiB0aGUgZ2l2ZW4gZmlsZSB0byBhbiBvYmplY3QuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFBhdGggdG8gdGhlIFhNTCBmaWxlCiAqCiAqIExpYnhtbCAyIHVuZXNjYXBlcyB0aGUgVVJJLCBzbyBpZiB5b3Ugd2FudCB0byBwYXNzIGUuZy4KICogYiZhbXA7YyBhcyB0aGUgVVJJIHBhcmFtZXRlciBhLAogKiB5b3UgaGF2ZSB0byBjYWxsCiAqIHNpbXBsZXhtbF9sb2FkX2ZpbGUocmF3dXJsZW5jb2RlKCdodHRwOi8vZXhhbXBsZS5jb20vP2E9JyAuCiAqIHVybGVuY29kZSgnYiZhbXA7YycpKSkuIFNpbmNlIFBIUCA1LjEuMCB5b3UgZG9uJ3QgbmVlZCB0byBkbwogKiB0aGlzIGJlY2F1c2UgUEhQIHdpbGwgZG8gaXQgZm9yIHlvdS4KICogQHBhcmFtIHN0cmluZyAkY2xhc3NfbmFtZSBZb3UgbWF5IHVzZSB0aGlzIG9wdGlvbmFsIHBhcmFtZXRlciBzbyB0aGF0CiAqIHNpbXBsZXhtbF9sb2FkX2ZpbGUgd2lsbCByZXR1cm4gYW4gb2JqZWN0IG9mCiAqIHRoZSBzcGVjaWZpZWQgY2xhc3MuIFRoYXQgY2xhc3Mgc2hvdWxkIGV4dGVuZCB0aGUKICogU2ltcGxlWE1MRWxlbWVudCBjbGFzcy4KICogQHBhcmFtIGludCAkb3B0aW9ucyBTaW5jZSBQSFAgNS4xLjAgYW5kIExpYnhtbCAyLjYuMCwgeW91IG1heSBhbHNvIHVzZSB0aGUKICogb3B0aW9ucyBwYXJhbWV0ZXIgdG8gc3BlY2lmeSBhZGRpdGlvbmFsIExpYnhtbCBwYXJhbWV0ZXJzLgogKiBAcGFyYW0gc3RyaW5nICRucyBOYW1lc3BhY2UgcHJlZml4IG9yIFVSSS4KICogQHBhcmFtIGJvb2wgJGlzX3ByZWZpeCBUUlVFIGlmIG5zIGlzIGEgcHJlZml4LCBGQUxTRSBpZiBpdCdzIGEgVVJJOwogKiBkZWZhdWx0cyB0byBGQUxTRS4KICogQHJldHVybiBcU2ltcGxlWE1MRWxlbWVudCBSZXR1cm5zIGFuIG9iamVjdCBvZiBjbGFzcyBTaW1wbGVYTUxFbGVtZW50IHdpdGgKICogcHJvcGVydGllcyBjb250YWluaW5nIHRoZSBkYXRhIGhlbGQgd2l0aGluIHRoZSBYTUwgZG9jdW1lbnQuCiAqIEB0aHJvd3MgU2ltcGxleG1sRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzaW1wbGV4bWxfbG9hZF9maWxlKHN0cmluZyAkZmlsZW5hbWUsIHN0cmluZyAkY2xhc3NfbmFtZSA9ICJTaW1wbGVYTUxFbGVtZW50IiwgaW50ICRvcHRpb25zID0gMCwgc3RyaW5nICRucyA9ICIiLCBib29sICRpc19wcmVmaXggPSBmYWxzZSk6IFxTaW1wbGVYTUxFbGVtZW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc2ltcGxleG1sX2xvYWRfZmlsZSgkZmlsZW5hbWUsICRjbGFzc19uYW1lLCAkb3B0aW9ucywgJG5zLCAkaXNfcHJlZml4KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNpbXBsZXhtbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUYWtlcyBhIHdlbGwtZm9ybWVkIFhNTCBzdHJpbmcgYW5kIHJldHVybnMgaXQgYXMgYW4gb2JqZWN0LgogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhIEEgd2VsbC1mb3JtZWQgWE1MIHN0cmluZwogKiBAcGFyYW0gc3RyaW5nICRjbGFzc19uYW1lIFlvdSBtYXkgdXNlIHRoaXMgb3B0aW9uYWwgcGFyYW1ldGVyIHNvIHRoYXQKICogc2ltcGxleG1sX2xvYWRfc3RyaW5nIHdpbGwgcmV0dXJuIGFuIG9iamVjdCBvZgogKiB0aGUgc3BlY2lmaWVkIGNsYXNzLiBUaGF0IGNsYXNzIHNob3VsZCBleHRlbmQgdGhlCiAqIFNpbXBsZVhNTEVsZW1lbnQgY2xhc3MuCiAqIEBwYXJhbSBpbnQgJG9wdGlvbnMgU2luY2UgUEhQIDUuMS4wIGFuZCBMaWJ4bWwgMi42LjAsIHlvdSBtYXkgYWxzbyB1c2UgdGhlCiAqIG9wdGlvbnMgcGFyYW1ldGVyIHRvIHNwZWNpZnkgYWRkaXRpb25hbCBMaWJ4bWwgcGFyYW1ldGVycy4KICogQHBhcmFtIHN0cmluZyAkbnMgTmFtZXNwYWNlIHByZWZpeCBvciBVUkkuCiAqIEBwYXJhbSBib29sICRpc19wcmVmaXggVFJVRSBpZiBucyBpcyBhIHByZWZpeCwgRkFMU0UgaWYgaXQncyBhIFVSSTsKICogZGVmYXVsdHMgdG8gRkFMU0UuCiAqIEByZXR1cm4gXFNpbXBsZVhNTEVsZW1lbnQgUmV0dXJucyBhbiBvYmplY3Qgb2YgY2xhc3MgU2ltcGxlWE1MRWxlbWVudCB3aXRoCiAqIHByb3BlcnRpZXMgY29udGFpbmluZyB0aGUgZGF0YSBoZWxkIHdpdGhpbiB0aGUgeG1sIGRvY3VtZW50LgogKiBAdGhyb3dzIFNpbXBsZXhtbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc2ltcGxleG1sX2xvYWRfc3RyaW5nKHN0cmluZyAkZGF0YSwgc3RyaW5nICRjbGFzc19uYW1lID0gIlNpbXBsZVhNTEVsZW1lbnQiLCBpbnQgJG9wdGlvbnMgPSAwLCBzdHJpbmcgJG5zID0gIiIsIGJvb2wgJGlzX3ByZWZpeCA9IGZhbHNlKTogXFNpbXBsZVhNTEVsZW1lbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzaW1wbGV4bWxfbG9hZF9zdHJpbmcoJGRhdGEsICRjbGFzc19uYW1lLCAkb3B0aW9ucywgJG5zLCAkaXNfcHJlZml4KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNpbXBsZXhtbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/sockets.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTb2NrZXRzRXhjZXB0aW9uOwoKLyoqCiAqIEFmdGVyIHRoZSBzb2NrZXQgc29ja2V0IGhhcyBiZWVuIGNyZWF0ZWQKICogdXNpbmcgc29ja2V0X2NyZWF0ZSwgYm91bmQgdG8gYSBuYW1lIHdpdGgKICogc29ja2V0X2JpbmQsIGFuZCB0b2xkIHRvIGxpc3RlbiBmb3IgY29ubmVjdGlvbnMKICogd2l0aCBzb2NrZXRfbGlzdGVuLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYWNjZXB0CiAqIGluY29taW5nIGNvbm5lY3Rpb25zIG9uIHRoYXQgc29ja2V0LiBPbmNlIGEgc3VjY2Vzc2Z1bCBjb25uZWN0aW9uCiAqIGlzIG1hZGUsIGEgbmV3IHNvY2tldCByZXNvdXJjZSBpcyByZXR1cm5lZCwgd2hpY2ggbWF5IGJlIHVzZWQKICogZm9yIGNvbW11bmljYXRpb24uIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBjb25uZWN0aW9ucyBxdWV1ZWQgb24KICogdGhlIHNvY2tldCwgdGhlIGZpcnN0IHdpbGwgYmUgdXNlZC4gSWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcKICogY29ubmVjdGlvbnMsIHNvY2tldF9hY2NlcHQgd2lsbCBibG9jayB1bnRpbAogKiBhIGNvbm5lY3Rpb24gYmVjb21lcyBwcmVzZW50LiBJZiBzb2NrZXQKICogaGFzIGJlZW4gbWFkZSBub24tYmxvY2tpbmcgdXNpbmcKICogc29ja2V0X3NldF9ibG9ja2luZyBvcgogKiBzb2NrZXRfc2V0X25vbmJsb2NrLCBGQUxTRSB3aWxsIGJlIHJldHVybmVkLgogKgogKiBUaGUgc29ja2V0IHJlc291cmNlIHJldHVybmVkIGJ5CiAqIHNvY2tldF9hY2NlcHQgbWF5IG5vdCBiZSB1c2VkIHRvIGFjY2VwdCBuZXcKICogY29ubmVjdGlvbnMuIFRoZSBvcmlnaW5hbCBsaXN0ZW5pbmcgc29ja2V0CiAqIHNvY2tldCwgaG93ZXZlciwgcmVtYWlucyBvcGVuIGFuZCBtYXkgYmUKICogcmV1c2VkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNvY2tldCBBIHZhbGlkIHNvY2tldCByZXNvdXJjZSBjcmVhdGVkIHdpdGggc29ja2V0X2NyZWF0ZS4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgbmV3IHNvY2tldCByZXNvdXJjZSBvbiBzdWNjZXNzLiBUaGUgYWN0dWFsCiAqIGVycm9yIGNvZGUgY2FuIGJlIHJldHJpZXZlZCBieSBjYWxsaW5nCiAqIHNvY2tldF9sYXN0X2Vycm9yLiBUaGlzIGVycm9yIGNvZGUgbWF5IGJlIHBhc3NlZCB0bwogKiBzb2NrZXRfc3RyZXJyb3IgdG8gZ2V0IGEgdGV4dHVhbCBleHBsYW5hdGlvbiBvZiB0aGUKICogZXJyb3IuCiAqIEB0aHJvd3MgU29ja2V0c0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc29ja2V0X2FjY2VwdCgkc29ja2V0KQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNvY2tldF9hY2NlcHQoJHNvY2tldCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTb2NrZXRzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIENyZWF0ZSBhIFNvY2tldCByZXNvdXJjZSwgYW5kIGJpbmQgaXQgdG8gdGhlIHByb3ZpZGVkIEFkZHJJbmZvIHJlc291cmNlLiAgVGhlIHJldHVybgogKiB2YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uIG1heSBiZSB1c2VkIHdpdGggc29ja2V0X2xpc3Rlbi4KICoKICogQHBhcmFtIHJlc291cmNlICRhZGRyIFJlc291cmNlIGNyZWF0ZWQgZnJvbSBzb2NrZXRfYWRkcmluZm9fbG9va3VwLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBTb2NrZXQgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICogQHRocm93cyBTb2NrZXRzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2NrZXRfYWRkcmluZm9fYmluZCgkYWRkcikKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzb2NrZXRfYWRkcmluZm9fYmluZCgkYWRkcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gbnVsbCkgewogICAgICAgIHRocm93IFNvY2tldHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQ3JlYXRlIGEgU29ja2V0IHJlc291cmNlLCBhbmQgY29ubmVjdCBpdCB0byB0aGUgcHJvdmlkZWQgQWRkckluZm8gcmVzb3VyY2UuICBUaGUgcmV0dXJuCiAqIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24gbWF5IGJlIHVzZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc29ja2V0IGZ1bmN0aW9ucy4KICoKICogQHBhcmFtIHJlc291cmNlICRhZGRyIFJlc291cmNlIGNyZWF0ZWQgZnJvbSBzb2NrZXRfYWRkcmluZm9fbG9va3VwCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhIFNvY2tldCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIFNvY2tldHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNvY2tldF9hZGRyaW5mb19jb25uZWN0KCRhZGRyKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNvY2tldF9hZGRyaW5mb19jb25uZWN0KCRhZGRyKTsKICAgIGlmICgkcmVzdWx0ID09PSBudWxsKSB7CiAgICAgICAgdGhyb3cgU29ja2V0c0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBCaW5kcyB0aGUgbmFtZSBnaXZlbiBpbiBhZGRyZXNzIHRvIHRoZSBzb2NrZXQKICogZGVzY3JpYmVkIGJ5IHNvY2tldC4gVGhpcyBoYXMgdG8gYmUgZG9uZSBiZWZvcmUKICogYSBjb25uZWN0aW9uIGlzIGJlIGVzdGFibGlzaGVkIHVzaW5nIHNvY2tldF9jb25uZWN0CiAqIG9yIHNvY2tldF9saXN0ZW4uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc29ja2V0IEEgdmFsaWQgc29ja2V0IHJlc291cmNlIGNyZWF0ZWQgd2l0aCBzb2NrZXRfY3JlYXRlLgogKiBAcGFyYW0gc3RyaW5nICRhZGRyZXNzIElmIHRoZSBzb2NrZXQgaXMgb2YgdGhlIEFGX0lORVQgZmFtaWx5LCB0aGUKICogYWRkcmVzcyBpcyBhbiBJUCBpbiBkb3R0ZWQtcXVhZCBub3RhdGlvbgogKiAoZS5nLiAxMjcuMC4wLjEpLgogKgogKiBJZiB0aGUgc29ja2V0IGlzIG9mIHRoZSBBRl9VTklYIGZhbWlseSwgdGhlCiAqIGFkZHJlc3MgaXMgdGhlIHBhdGggb2YgYQogKiBVbml4LWRvbWFpbiBzb2NrZXQgKGUuZy4gL3RtcC9teS5zb2NrKS4KICogQHBhcmFtIGludCAkcG9ydCBUaGUgcG9ydCBwYXJhbWV0ZXIgaXMgb25seSB1c2VkIHdoZW4KICogYmluZGluZyBhbiBBRl9JTkVUIHNvY2tldCwgYW5kIGRlc2lnbmF0ZXMKICogdGhlIHBvcnQgb24gd2hpY2ggdG8gbGlzdGVuIGZvciBjb25uZWN0aW9ucy4KICogQHRocm93cyBTb2NrZXRzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2NrZXRfYmluZCgkc29ja2V0LCBzdHJpbmcgJGFkZHJlc3MsIGludCAkcG9ydCA9IDApOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc29ja2V0X2JpbmQoJHNvY2tldCwgJGFkZHJlc3MsICRwb3J0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNvY2tldHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEluaXRpYXRlIGEgY29ubmVjdGlvbiB0byBhZGRyZXNzIHVzaW5nIHRoZSBzb2NrZXQgcmVzb3VyY2UKICogc29ja2V0LCB3aGljaCBtdXN0IGJlIGEgdmFsaWQgc29ja2V0CiAqIHJlc291cmNlIGNyZWF0ZWQgd2l0aCBzb2NrZXRfY3JlYXRlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNvY2tldAogKiBAcGFyYW0gc3RyaW5nICRhZGRyZXNzIFRoZSBhZGRyZXNzIHBhcmFtZXRlciBpcyBlaXRoZXIgYW4gSVB2NCBhZGRyZXNzCiAqIGluIGRvdHRlZC1xdWFkIG5vdGF0aW9uIChlLmcuIDEyNy4wLjAuMSkgaWYKICogc29ja2V0IGlzIEFGX0lORVQsIGEgdmFsaWQKICogSVB2NiBhZGRyZXNzIChlLmcuIDo6MSkgaWYgSVB2NiBzdXBwb3J0IGlzIGVuYWJsZWQgYW5kCiAqIHNvY2tldCBpcyBBRl9JTkVUNgogKiBvciB0aGUgcGF0aG5hbWUgb2YgYSBVbml4IGRvbWFpbiBzb2NrZXQsIGlmIHRoZSBzb2NrZXQgZmFtaWx5IGlzCiAqIEFGX1VOSVguCiAqIEBwYXJhbSBpbnQgJHBvcnQgVGhlIHBvcnQgcGFyYW1ldGVyIGlzIG9ubHkgdXNlZCBhbmQgaXMgbWFuZGF0b3J5CiAqIHdoZW4gY29ubmVjdGluZyB0byBhbiBBRl9JTkVUIG9yIGFuCiAqIEFGX0lORVQ2IHNvY2tldCwgYW5kIGRlc2lnbmF0ZXMKICogdGhlIHBvcnQgb24gdGhlIHJlbW90ZSBob3N0IHRvIHdoaWNoIGEgY29ubmVjdGlvbiBzaG91bGQgYmUgbWFkZS4KICogQHRocm93cyBTb2NrZXRzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2NrZXRfY29ubmVjdCgkc29ja2V0LCBzdHJpbmcgJGFkZHJlc3MsIGludCAkcG9ydCA9IDApOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc29ja2V0X2Nvbm5lY3QoJHNvY2tldCwgJGFkZHJlc3MsICRwb3J0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNvY2tldHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIHNvY2tldF9jcmVhdGVfbGlzdGVuIGNyZWF0ZXMgYSBuZXcgc29ja2V0IHJlc291cmNlIG9mCiAqIHR5cGUgQUZfSU5FVCBsaXN0ZW5pbmcgb24gYWxsCiAqIGxvY2FsIGludGVyZmFjZXMgb24gdGhlIGdpdmVuIHBvcnQgd2FpdGluZyBmb3IgbmV3IGNvbm5lY3Rpb25zLgogKgogKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGVhc2UgdGhlIHRhc2sgb2YgY3JlYXRpbmcgYSBuZXcgc29ja2V0IHdoaWNoCiAqIG9ubHkgbGlzdGVucyB0byBhY2NlcHQgbmV3IGNvbm5lY3Rpb25zLgogKgogKiBAcGFyYW0gaW50ICRwb3J0IFRoZSBwb3J0IG9uIHdoaWNoIHRvIGxpc3RlbiBvbiBhbGwgaW50ZXJmYWNlcy4KICogQHBhcmFtIGludCAkYmFja2xvZyBUaGUgYmFja2xvZyBwYXJhbWV0ZXIgZGVmaW5lcyB0aGUgbWF4aW11bSBsZW5ndGgKICogdGhlIHF1ZXVlIG9mIHBlbmRpbmcgY29ubmVjdGlvbnMgbWF5IGdyb3cgdG8uCiAqIFNPTUFYQ09OTiBtYXkgYmUgcGFzc2VkIGFzCiAqIGJhY2tsb2cgcGFyYW1ldGVyLCBzZWUKICogc29ja2V0X2xpc3RlbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICogQHJldHVybiByZXNvdXJjZSBzb2NrZXRfY3JlYXRlX2xpc3RlbiByZXR1cm5zIGEgbmV3IHNvY2tldCByZXNvdXJjZQogKiBvbiBzdWNjZXNzLiBUaGUgZXJyb3IgY29kZSBjYW4gYmUgcmV0cmlldmVkIHdpdGgKICogc29ja2V0X2xhc3RfZXJyb3IuIFRoaXMgY29kZSBtYXkgYmUgcGFzc2VkIHRvCiAqIHNvY2tldF9zdHJlcnJvciB0byBnZXQgYSB0ZXh0dWFsIGV4cGxhbmF0aW9uIG9mIHRoZQogKiBlcnJvci4KICogQHRocm93cyBTb2NrZXRzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2NrZXRfY3JlYXRlX2xpc3RlbihpbnQgJHBvcnQsIGludCAkYmFja2xvZyA9IDEyOCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzb2NrZXRfY3JlYXRlX2xpc3RlbigkcG9ydCwgJGJhY2tsb2cpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU29ja2V0c0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBzb2NrZXRfY3JlYXRlX3BhaXIgY3JlYXRlcyB0d28gY29ubmVjdGVkIGFuZAogKiBpbmRpc3Rpbmd1aXNoYWJsZSBzb2NrZXRzLCBhbmQgc3RvcmVzIHRoZW0gaW4gZmQuCiAqIFRoaXMgZnVuY3Rpb24gaXMgY29tbW9ubHkgdXNlZCBpbiBJUEMgKEludGVyUHJvY2VzcyBDb21tdW5pY2F0aW9uKS4KICoKICogQHBhcmFtIGludCAkZG9tYWluIFRoZSBkb21haW4gcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgcHJvdG9jb2wKICogZmFtaWx5IHRvIGJlIHVzZWQgYnkgdGhlIHNvY2tldC4gU2VlIHNvY2tldF9jcmVhdGUKICogZm9yIHRoZSBmdWxsIGxpc3QuCiAqIEBwYXJhbSBpbnQgJHR5cGUgVGhlIHR5cGUgcGFyYW1ldGVyIHNlbGVjdHMgdGhlIHR5cGUgb2YgY29tbXVuaWNhdGlvbgogKiB0byBiZSB1c2VkIGJ5IHRoZSBzb2NrZXQuIFNlZSBzb2NrZXRfY3JlYXRlIGZvciB0aGUKICogZnVsbCBsaXN0LgogKiBAcGFyYW0gaW50ICRwcm90b2NvbCBUaGUgcHJvdG9jb2wgcGFyYW1ldGVyIHNldHMgdGhlIHNwZWNpZmljCiAqIHByb3RvY29sIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGRvbWFpbiB0byBiZSB1c2VkCiAqIHdoZW4gY29tbXVuaWNhdGluZyBvbiB0aGUgcmV0dXJuZWQgc29ja2V0LiBUaGUgcHJvcGVyIHZhbHVlIGNhbiBiZSByZXRyaWV2ZWQgYnkKICogbmFtZSBieSB1c2luZyBnZXRwcm90b2J5bmFtZS4gSWYKICogdGhlIGRlc2lyZWQgcHJvdG9jb2wgaXMgVENQLCBvciBVRFAgdGhlIGNvcnJlc3BvbmRpbmcgY29uc3RhbnRzCiAqIFNPTF9UQ1AsIGFuZCBTT0xfVURQCiAqIGNhbiBhbHNvIGJlIHVzZWQuCiAqCiAqIFNlZSBzb2NrZXRfY3JlYXRlIGZvciB0aGUgZnVsbCBsaXN0IG9mIHN1cHBvcnRlZAogKiBwcm90b2NvbHMuCiAqIEBwYXJhbSByZXNvdXJjZVtdfG51bGwgJGZkIFJlZmVyZW5jZSB0byBhbiBhcnJheSBpbiB3aGljaCB0aGUgdHdvIHNvY2tldCByZXNvdXJjZXMgd2lsbCBiZSBpbnNlcnRlZC4KICogQHRocm93cyBTb2NrZXRzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2NrZXRfY3JlYXRlX3BhaXIoaW50ICRkb21haW4sIGludCAkdHlwZSwgaW50ICRwcm90b2NvbCwgP2l0ZXJhYmxlICYkZmQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc29ja2V0X2NyZWF0ZV9wYWlyKCRkb21haW4sICR0eXBlLCAkcHJvdG9jb2wsICRmZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTb2NrZXRzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBDcmVhdGVzIGFuZCByZXR1cm5zIGEgc29ja2V0IHJlc291cmNlLCBhbHNvIHJlZmVycmVkIHRvIGFzIGFuIGVuZHBvaW50CiAqIG9mIGNvbW11bmljYXRpb24uIEEgdHlwaWNhbCBuZXR3b3JrIGNvbm5lY3Rpb24gaXMgbWFkZSB1cCBvZiAyIHNvY2tldHMsIG9uZQogKiBwZXJmb3JtaW5nIHRoZSByb2xlIG9mIHRoZSBjbGllbnQsIGFuZCBhbm90aGVyIHBlcmZvcm1pbmcgdGhlIHJvbGUgb2YgdGhlIHNlcnZlci4KICoKICogQHBhcmFtIGludCAkZG9tYWluIFRoZSBkb21haW4gcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgcHJvdG9jb2wKICogZmFtaWx5IHRvIGJlIHVzZWQgYnkgdGhlIHNvY2tldC4KICogQHBhcmFtIGludCAkdHlwZSBUaGUgdHlwZSBwYXJhbWV0ZXIgc2VsZWN0cyB0aGUgdHlwZSBvZiBjb21tdW5pY2F0aW9uCiAqIHRvIGJlIHVzZWQgYnkgdGhlIHNvY2tldC4KICogQHBhcmFtIGludCAkcHJvdG9jb2wgVGhlIHByb3RvY29sIHBhcmFtZXRlciBzZXRzIHRoZSBzcGVjaWZpYwogKiBwcm90b2NvbCB3aXRoaW4gdGhlIHNwZWNpZmllZCBkb21haW4gdG8gYmUgdXNlZAogKiB3aGVuIGNvbW11bmljYXRpbmcgb24gdGhlIHJldHVybmVkIHNvY2tldC4gVGhlIHByb3BlciB2YWx1ZSBjYW4gYmUKICogcmV0cmlldmVkIGJ5IG5hbWUgYnkgdXNpbmcgZ2V0cHJvdG9ieW5hbWUuIElmCiAqIHRoZSBkZXNpcmVkIHByb3RvY29sIGlzIFRDUCwgb3IgVURQIHRoZSBjb3JyZXNwb25kaW5nIGNvbnN0YW50cwogKiBTT0xfVENQLCBhbmQgU09MX1VEUAogKiBjYW4gYWxzbyBiZSB1c2VkLgogKiBAcmV0dXJuIHJlc291cmNlIHNvY2tldF9jcmVhdGUgcmV0dXJucyBhIHNvY2tldCByZXNvdXJjZSBvbiBzdWNjZXNzLiBUaGUgYWN0dWFsIGVycm9yIGNvZGUgY2FuIGJlIHJldHJpZXZlZCBieSBjYWxsaW5nCiAqIHNvY2tldF9sYXN0X2Vycm9yLiBUaGlzIGVycm9yIGNvZGUgbWF5IGJlIHBhc3NlZCB0bwogKiBzb2NrZXRfc3RyZXJyb3IgdG8gZ2V0IGEgdGV4dHVhbCBleHBsYW5hdGlvbiBvZiB0aGUKICogZXJyb3IuCiAqIEB0aHJvd3MgU29ja2V0c0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc29ja2V0X2NyZWF0ZShpbnQgJGRvbWFpbiwgaW50ICR0eXBlLCBpbnQgJHByb3RvY29sKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNvY2tldF9jcmVhdGUoJGRvbWFpbiwgJHR5cGUsICRwcm90b2NvbCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTb2NrZXRzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc29ja2V0CiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJuIHJlc291cmNlLgogKiBAdGhyb3dzIFNvY2tldHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNvY2tldF9leHBvcnRfc3RyZWFtKCRzb2NrZXQpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc29ja2V0X2V4cG9ydF9zdHJlYW0oJHNvY2tldCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTb2NrZXRzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoZSBzb2NrZXRfZ2V0X29wdGlvbiBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIHZhbHVlIGZvcgogKiB0aGUgb3B0aW9uIHNwZWNpZmllZCBieSB0aGUgb3B0bmFtZSBwYXJhbWV0ZXIgZm9yIHRoZQogKiBzcGVjaWZpZWQgc29ja2V0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNvY2tldCBBIHZhbGlkIHNvY2tldCByZXNvdXJjZSBjcmVhdGVkIHdpdGggc29ja2V0X2NyZWF0ZQogKiBvciBzb2NrZXRfYWNjZXB0LgogKiBAcGFyYW0gaW50ICRsZXZlbCBUaGUgbGV2ZWwgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgcHJvdG9jb2wKICogbGV2ZWwgYXQgd2hpY2ggdGhlIG9wdGlvbiByZXNpZGVzLiBGb3IgZXhhbXBsZSwgdG8gcmV0cmlldmUgb3B0aW9ucyBhdAogKiB0aGUgc29ja2V0IGxldmVsLCBhIGxldmVsIHBhcmFtZXRlciBvZgogKiBTT0xfU09DS0VUIHdvdWxkIGJlIHVzZWQuIE90aGVyIGxldmVscywgc3VjaCBhcwogKiBUQ1AsIGNhbiBiZSB1c2VkIGJ5CiAqIHNwZWNpZnlpbmcgdGhlIHByb3RvY29sIG51bWJlciBvZiB0aGF0IGxldmVsLiBQcm90b2NvbCBudW1iZXJzIGNhbiBiZQogKiBmb3VuZCBieSB1c2luZyB0aGUgZ2V0cHJvdG9ieW5hbWUgZnVuY3Rpb24uCiAqIEBwYXJhbSBpbnQgJG9wdG5hbWUgUmVwb3J0cyB3aGV0aGVyIHRoZSBzb2NrZXQgbGluZ2VycyBvbgogKiBzb2NrZXRfY2xvc2UgaWYgZGF0YSBpcyBwcmVzZW50LiBCeSBkZWZhdWx0LAogKiB3aGVuIHRoZSBzb2NrZXQgaXMgY2xvc2VkLCBpdCBhdHRlbXB0cyB0byBzZW5kIGFsbCB1bnNlbnQgZGF0YS4KICogSW4gdGhlIGNhc2Ugb2YgYSBjb25uZWN0aW9uLW9yaWVudGVkIHNvY2tldCwKICogc29ja2V0X2Nsb3NlIHdpbGwgd2FpdCBmb3IgaXRzIHBlZXIgdG8KICogYWNrbm93bGVkZ2UgdGhlIGRhdGEuCiAqCiAqIElmIGxfb25vZmYgaXMgbm9uLXplcm8gYW5kCiAqIGxfbGluZ2VyIGlzIHplcm8sIGFsbCB0aGUKICogdW5zZW50IGRhdGEgd2lsbCBiZSBkaXNjYXJkZWQgYW5kIFJTVCAocmVzZXQpIGlzIHNlbnQgdG8gdGhlCiAqIHBlZXIgaW4gdGhlIGNhc2Ugb2YgYSBjb25uZWN0aW9uLW9yaWVudGVkIHNvY2tldC4KICoKICogT24gdGhlIG90aGVyIGhhbmQsIGlmIGxfb25vZmYgaXMKICogbm9uLXplcm8gYW5kIGxfbGluZ2VyIGlzIG5vbi16ZXJvLAogKiBzb2NrZXRfY2xvc2Ugd2lsbCBibG9jayB1bnRpbCBhbGwgdGhlIGRhdGEKICogaXMgc2VudCBvciB0aGUgdGltZSBzcGVjaWZpZWQgaW4gbF9saW5nZXIKICogZWxhcHNlcy4gSWYgdGhlIHNvY2tldCBpcyBub24tYmxvY2tpbmcsCiAqIHNvY2tldF9jbG9zZSB3aWxsIGZhaWwgYW5kIHJldHVybiBhbiBlcnJvci4KICogQHJldHVybiBtaXhlZCBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gb3B0aW9ucy4KICogQHRocm93cyBTb2NrZXRzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2NrZXRfZ2V0X29wdGlvbigkc29ja2V0LCBpbnQgJGxldmVsLCBpbnQgJG9wdG5hbWUpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc29ja2V0X2dldF9vcHRpb24oJHNvY2tldCwgJGxldmVsLCAkb3B0bmFtZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTb2NrZXRzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFF1ZXJpZXMgdGhlIHJlbW90ZSBzaWRlIG9mIHRoZSBnaXZlbiBzb2NrZXQgd2hpY2ggbWF5IGVpdGhlciByZXN1bHQgaW4KICogaG9zdC9wb3J0IG9yIGluIGEgVW5peCBmaWxlc3lzdGVtIHBhdGgsIGRlcGVuZGVudCBvbiBpdHMgdHlwZS4KICoKICogQHBhcmFtIHJlc291cmNlICRzb2NrZXQgQSB2YWxpZCBzb2NrZXQgcmVzb3VyY2UgY3JlYXRlZCB3aXRoIHNvY2tldF9jcmVhdGUKICogb3Igc29ja2V0X2FjY2VwdC4KICogQHBhcmFtIHN0cmluZyAkYWRkcmVzcyBJZiB0aGUgZ2l2ZW4gc29ja2V0IGlzIG9mIHR5cGUgQUZfSU5FVCBvcgogKiBBRl9JTkVUNiwgc29ja2V0X2dldHBlZXJuYW1lCiAqIHdpbGwgcmV0dXJuIHRoZSBwZWVycyAocmVtb3RlKSBJUCBhZGRyZXNzIGluCiAqIGFwcHJvcHJpYXRlIG5vdGF0aW9uIChlLmcuIDEyNy4wLjAuMSBvcgogKiBmZTgwOjoxKSBpbiB0aGUgYWRkcmVzcwogKiBwYXJhbWV0ZXIgYW5kLCBpZiB0aGUgb3B0aW9uYWwgcG9ydCBwYXJhbWV0ZXIgaXMKICogcHJlc2VudCwgYWxzbyB0aGUgYXNzb2NpYXRlZCBwb3J0LgogKgogKiBJZiB0aGUgZ2l2ZW4gc29ja2V0IGlzIG9mIHR5cGUgQUZfVU5JWCwKICogc29ja2V0X2dldHBlZXJuYW1lIHdpbGwgcmV0dXJuIHRoZSBVbml4IGZpbGVzeXN0ZW0KICogcGF0aCAoZS5nLiAvdmFyL3J1bi9kYWVtb24uc29jaykgaW4gdGhlCiAqIGFkZHJlc3MgcGFyYW1ldGVyLgogKiBAcGFyYW0gaW50fG51bGwgJHBvcnQgSWYgZ2l2ZW4sIHRoaXMgd2lsbCBob2xkIHRoZSBwb3J0IGFzc29jaWF0ZWQgdG8KICogYWRkcmVzcy4KICogQHRocm93cyBTb2NrZXRzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2NrZXRfZ2V0cGVlcm5hbWUoJHNvY2tldCwgc3RyaW5nICYkYWRkcmVzcywgP2ludCAmJHBvcnQgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNvY2tldF9nZXRwZWVybmFtZSgkc29ja2V0LCAkYWRkcmVzcywgJHBvcnQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU29ja2V0c0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICoKICoKICogQHBhcmFtIHJlc291cmNlICRzb2NrZXQgQSB2YWxpZCBzb2NrZXQgcmVzb3VyY2UgY3JlYXRlZCB3aXRoIHNvY2tldF9jcmVhdGUKICogb3Igc29ja2V0X2FjY2VwdC4KICogQHBhcmFtIHN0cmluZ3xudWxsICRhZGRyIElmIHRoZSBnaXZlbiBzb2NrZXQgaXMgb2YgdHlwZSBBRl9JTkVUCiAqIG9yIEFGX0lORVQ2LCBzb2NrZXRfZ2V0c29ja25hbWUKICogd2lsbCByZXR1cm4gdGhlIGxvY2FsIElQIGFkZHJlc3MgaW4gYXBwcm9wcmlhdGUgbm90YXRpb24gKGUuZy4KICogMTI3LjAuMC4xIG9yIGZlODA6OjEpIGluIHRoZQogKiBhZGRyZXNzIHBhcmFtZXRlciBhbmQsIGlmIHRoZSBvcHRpb25hbAogKiBwb3J0IHBhcmFtZXRlciBpcyBwcmVzZW50LCBhbHNvIHRoZSBhc3NvY2lhdGVkIHBvcnQuCiAqCiAqIElmIHRoZSBnaXZlbiBzb2NrZXQgaXMgb2YgdHlwZSBBRl9VTklYLAogKiBzb2NrZXRfZ2V0c29ja25hbWUgd2lsbCByZXR1cm4gdGhlIFVuaXggZmlsZXN5c3RlbQogKiBwYXRoIChlLmcuIC92YXIvcnVuL2RhZW1vbi5zb2NrKSBpbiB0aGUKICogYWRkcmVzcyBwYXJhbWV0ZXIuCiAqIEBwYXJhbSBpbnR8bnVsbCAkcG9ydCBJZiBwcm92aWRlZCwgdGhpcyB3aWxsIGhvbGQgdGhlIGFzc29jaWF0ZWQgcG9ydC4KICogQHRocm93cyBTb2NrZXRzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2NrZXRfZ2V0c29ja25hbWUoJHNvY2tldCwgP3N0cmluZyAmJGFkZHIsID9pbnQgJiRwb3J0ID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzb2NrZXRfZ2V0c29ja25hbWUoJHNvY2tldCwgJGFkZHIsICRwb3J0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNvY2tldHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEltcG9ydHMgYSBzdHJlYW0gdGhhdCBlbmNhcHN1bGF0ZXMgYSBzb2NrZXQgaW50byBhIHNvY2tldCBleHRlbnNpb24gcmVzb3VyY2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RyZWFtIFRoZSBzdHJlYW0gcmVzb3VyY2UgdG8gaW1wb3J0LgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIFJldHVybnMgRkFMU0UuCiAqIEB0aHJvd3MgU29ja2V0c0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc29ja2V0X2ltcG9ydF9zdHJlYW0oJHN0cmVhbSkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzb2NrZXRfaW1wb3J0X3N0cmVhbSgkc3RyZWFtKTsKICAgIGlmICgkcmVzdWx0ID09PSBudWxsKSB7CiAgICAgICAgdGhyb3cgU29ja2V0c0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBBZnRlciB0aGUgc29ja2V0IHNvY2tldCBoYXMgYmVlbiBjcmVhdGVkCiAqIHVzaW5nIHNvY2tldF9jcmVhdGUgYW5kIGJvdW5kIHRvIGEgbmFtZSB3aXRoCiAqIHNvY2tldF9iaW5kLCBpdCBtYXkgYmUgdG9sZCB0byBsaXN0ZW4gZm9yIGluY29taW5nCiAqIGNvbm5lY3Rpb25zIG9uIHNvY2tldC4KICoKICogc29ja2V0X2xpc3RlbiBpcyBhcHBsaWNhYmxlIG9ubHkgdG8gc29ja2V0cyBvZgogKiB0eXBlIFNPQ0tfU1RSRUFNIG9yCiAqIFNPQ0tfU0VRUEFDS0VULgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNvY2tldCBBIHZhbGlkIHNvY2tldCByZXNvdXJjZSBjcmVhdGVkIHdpdGggc29ja2V0X2NyZWF0ZQogKiBvciBzb2NrZXRfYWRkcmluZm9fYmluZAogKiBAcGFyYW0gaW50ICRiYWNrbG9nIEEgbWF4aW11bSBvZiBiYWNrbG9nIGluY29taW5nIGNvbm5lY3Rpb25zIHdpbGwgYmUKICogcXVldWVkIGZvciBwcm9jZXNzaW5nLiBJZiBhIGNvbm5lY3Rpb24gcmVxdWVzdCBhcnJpdmVzIHdpdGggdGhlIHF1ZXVlCiAqIGZ1bGwgdGhlIGNsaWVudCBtYXkgcmVjZWl2ZSBhbiBlcnJvciB3aXRoIGFuIGluZGljYXRpb24gb2YKICogRUNPTk5SRUZVU0VELCBvciwgaWYgdGhlIHVuZGVybHlpbmcgcHJvdG9jb2wgc3VwcG9ydHMKICogcmV0cmFuc21pc3Npb24sIHRoZSByZXF1ZXN0IG1heSBiZSBpZ25vcmVkIHNvIHRoYXQgcmV0cmllcyBtYXkgc3VjY2VlZC4KICoKICogVGhlIG1heGltdW0gbnVtYmVyIHBhc3NlZCB0byB0aGUgYmFja2xvZwogKiBwYXJhbWV0ZXIgaGlnaGx5IGRlcGVuZHMgb24gdGhlIHVuZGVybHlpbmcgcGxhdGZvcm0uIE9uIExpbnV4LCBpdCBpcwogKiBzaWxlbnRseSB0cnVuY2F0ZWQgdG8gU09NQVhDT05OLiBPbiB3aW4zMiwgaWYKICogcGFzc2VkIFNPTUFYQ09OTiwgdGhlIHVuZGVybHlpbmcgc2VydmljZSBwcm92aWRlcgogKiByZXNwb25zaWJsZSBmb3IgdGhlIHNvY2tldCB3aWxsIHNldCB0aGUgYmFja2xvZyB0byBhIG1heGltdW0KICogcmVhc29uYWJsZSB2YWx1ZS4gVGhlcmUgaXMgbm8gc3RhbmRhcmQgcHJvdmlzaW9uIHRvCiAqIGZpbmQgb3V0IHRoZSBhY3R1YWwgYmFja2xvZyB2YWx1ZSBvbiB0aGlzIHBsYXRmb3JtLgogKiBAdGhyb3dzIFNvY2tldHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNvY2tldF9saXN0ZW4oJHNvY2tldCwgaW50ICRiYWNrbG9nID0gMCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzb2NrZXRfbGlzdGVuKCRzb2NrZXQsICRiYWNrbG9nKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNvY2tldHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoZSBmdW5jdGlvbiBzb2NrZXRfcmVhZCByZWFkcyBmcm9tIHRoZSBzb2NrZXQKICogcmVzb3VyY2Ugc29ja2V0IGNyZWF0ZWQgYnkgdGhlCiAqIHNvY2tldF9jcmVhdGUgb3IKICogc29ja2V0X2FjY2VwdCBmdW5jdGlvbnMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc29ja2V0IEEgdmFsaWQgc29ja2V0IHJlc291cmNlIGNyZWF0ZWQgd2l0aCBzb2NrZXRfY3JlYXRlCiAqIG9yIHNvY2tldF9hY2NlcHQuCiAqIEBwYXJhbSBpbnQgJGxlbmd0aCBUaGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBpcyBzcGVjaWZpZWQgYnkgdGhlCiAqIGxlbmd0aCBwYXJhbWV0ZXIuIE90aGVyd2lzZSB5b3UgY2FuIHVzZQogKiBcciwgXG4sCiAqIG9yIFwwIHRvIGVuZCByZWFkaW5nIChkZXBlbmRpbmcgb24gdGhlIHR5cGUKICogcGFyYW1ldGVyLCBzZWUgYmVsb3cpLgogKiBAcGFyYW0gaW50ICR0eXBlIE9wdGlvbmFsIHR5cGUgcGFyYW1ldGVyIGlzIGEgbmFtZWQgY29uc3RhbnQ6CiAqCiAqCiAqCiAqIFBIUF9CSU5BUllfUkVBRCAoRGVmYXVsdCkgLSB1c2UgdGhlIHN5c3RlbQogKiByZWN2KCkgZnVuY3Rpb24uIFNhZmUgZm9yIHJlYWRpbmcgYmluYXJ5IGRhdGEuCiAqCiAqCiAqCiAqCiAqIFBIUF9OT1JNQUxfUkVBRCAtIHJlYWRpbmcgc3RvcHMgYXQKICogXG4gb3IgXHIuCiAqCiAqCiAqCiAqIEByZXR1cm4gc3RyaW5nIHNvY2tldF9yZWFkIHJldHVybnMgdGhlIGRhdGEgYXMgYSBzdHJpbmcgb24gc3VjY2VzcyAoaW5jbHVkaW5nIGlmIHRoZSByZW1vdGUgaG9zdCBoYXMgY2xvc2VkIHRoZQogKiBjb25uZWN0aW9uKS4gVGhlIGVycm9yIGNvZGUgY2FuIGJlIHJldHJpZXZlZCB3aXRoCiAqIHNvY2tldF9sYXN0X2Vycm9yLiBUaGlzIGNvZGUgbWF5IGJlIHBhc3NlZCB0bwogKiBzb2NrZXRfc3RyZXJyb3IgdG8gZ2V0IGEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZgogKiB0aGUgZXJyb3IuCiAqIEB0aHJvd3MgU29ja2V0c0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc29ja2V0X3JlYWQoJHNvY2tldCwgaW50ICRsZW5ndGgsIGludCAkdHlwZSA9IFBIUF9CSU5BUllfUkVBRCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNvY2tldF9yZWFkKCRzb2NrZXQsICRsZW5ndGgsICR0eXBlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNvY2tldHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhlIGZ1bmN0aW9uIHNvY2tldF9zZW5kIHNlbmRzCiAqIGxlbiBieXRlcyB0byB0aGUgc29ja2V0CiAqIHNvY2tldCBmcm9tIGJ1Zi4KICoKICogQHBhcmFtIHJlc291cmNlICRzb2NrZXQgQSB2YWxpZCBzb2NrZXQgcmVzb3VyY2UgY3JlYXRlZCB3aXRoIHNvY2tldF9jcmVhdGUKICogb3Igc29ja2V0X2FjY2VwdC4KICogQHBhcmFtIHN0cmluZyAkYnVmIEEgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRhdGEgdGhhdCB3aWxsIGJlIHNlbnQgdG8gdGhlIHJlbW90ZSBob3N0LgogKiBAcGFyYW0gaW50ICRsZW4gVGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdpbGwgYmUgc2VudCB0byB0aGUgcmVtb3RlIGhvc3QgZnJvbQogKiBidWYuCiAqIEBwYXJhbSBpbnQgJGZsYWdzIFRoZSB2YWx1ZSBvZiBmbGFncyBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mCiAqIHRoZSBmb2xsb3dpbmcgZmxhZ3MsIGpvaW5lZCB3aXRoIHRoZSBiaW5hcnkgT1IgKHwpCiAqIG9wZXJhdG9yLgogKgogKiBQb3NzaWJsZSB2YWx1ZXMgZm9yIGZsYWdzCiAqCiAqCiAqCiAqIE1TR19PT0IKICoKICogU2VuZCBPT0IgKG91dC1vZi1iYW5kKSBkYXRhLgogKgogKgogKgogKiBNU0dfRU9SCiAqCiAqIEluZGljYXRlIGEgcmVjb3JkIG1hcmsuIFRoZSBzZW50IGRhdGEgY29tcGxldGVzIHRoZSByZWNvcmQuCiAqCiAqCiAqCiAqIE1TR19FT0YKICoKICogQ2xvc2UgdGhlIHNlbmRlciBzaWRlIG9mIHRoZSBzb2NrZXQgYW5kIGluY2x1ZGUgYW4gYXBwcm9wcmlhdGUKICogbm90aWZpY2F0aW9uIG9mIHRoaXMgYXQgdGhlIGVuZCBvZiB0aGUgc2VudCBkYXRhLiBUaGUgc2VudCBkYXRhCiAqIGNvbXBsZXRlcyB0aGUgdHJhbnNhY3Rpb24uCiAqCiAqCiAqCiAqIE1TR19ET05UUk9VVEUKICoKICogQnlwYXNzIHJvdXRpbmcsIHVzZSBkaXJlY3QgaW50ZXJmYWNlLgogKgogKgogKgogKgogKgogKiBAcmV0dXJuIGludCBzb2NrZXRfc2VuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudC4KICogQHRocm93cyBTb2NrZXRzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2NrZXRfc2VuZCgkc29ja2V0LCBzdHJpbmcgJGJ1ZiwgaW50ICRsZW4sIGludCAkZmxhZ3MpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzb2NrZXRfc2VuZCgkc29ja2V0LCAkYnVmLCAkbGVuLCAkZmxhZ3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU29ja2V0c0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNvY2tldAogKiBAcGFyYW0gYXJyYXkgJG1lc3NhZ2UKICogQHBhcmFtIGludCAkZmxhZ3MKICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQuCiAqIEB0aHJvd3MgU29ja2V0c0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc29ja2V0X3NlbmRtc2coJHNvY2tldCwgYXJyYXkgJG1lc3NhZ2UsIGludCAkZmxhZ3MgPSAwKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc29ja2V0X3NlbmRtc2coJHNvY2tldCwgJG1lc3NhZ2UsICRmbGFncyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTb2NrZXRzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoZSBmdW5jdGlvbiBzb2NrZXRfc2VuZHRvIHNlbmRzCiAqIGxlbiBieXRlcyBmcm9tIGJ1ZgogKiB0aHJvdWdoIHRoZSBzb2NrZXQgc29ja2V0IHRvIHRoZQogKiBwb3J0IGF0IHRoZSBhZGRyZXNzIGFkZHIuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc29ja2V0IEEgdmFsaWQgc29ja2V0IHJlc291cmNlIGNyZWF0ZWQgdXNpbmcgc29ja2V0X2NyZWF0ZS4KICogQHBhcmFtIHN0cmluZyAkYnVmIFRoZSBzZW50IGRhdGEgd2lsbCBiZSB0YWtlbiBmcm9tIGJ1ZmZlciBidWYuCiAqIEBwYXJhbSBpbnQgJGxlbiBsZW4gYnl0ZXMgZnJvbSBidWYgd2lsbCBiZQogKiBzZW50LgogKiBAcGFyYW0gaW50ICRmbGFncyBUaGUgdmFsdWUgb2YgZmxhZ3MgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZgogKiB0aGUgZm9sbG93aW5nIGZsYWdzLCBqb2luZWQgd2l0aCB0aGUgYmluYXJ5IE9SICh8KQogKiBvcGVyYXRvci4KICoKICogUG9zc2libGUgdmFsdWVzIGZvciBmbGFncwogKgogKgogKgogKiBNU0dfT09CCiAqCiAqIFNlbmQgT09CIChvdXQtb2YtYmFuZCkgZGF0YS4KICoKICoKICoKICogTVNHX0VPUgogKgogKiBJbmRpY2F0ZSBhIHJlY29yZCBtYXJrLiBUaGUgc2VudCBkYXRhIGNvbXBsZXRlcyB0aGUgcmVjb3JkLgogKgogKgogKgogKiBNU0dfRU9GCiAqCiAqIENsb3NlIHRoZSBzZW5kZXIgc2lkZSBvZiB0aGUgc29ja2V0IGFuZCBpbmNsdWRlIGFuIGFwcHJvcHJpYXRlCiAqIG5vdGlmaWNhdGlvbiBvZiB0aGlzIGF0IHRoZSBlbmQgb2YgdGhlIHNlbnQgZGF0YS4gVGhlIHNlbnQgZGF0YQogKiBjb21wbGV0ZXMgdGhlIHRyYW5zYWN0aW9uLgogKgogKgogKgogKiBNU0dfRE9OVFJPVVRFCiAqCiAqIEJ5cGFzcyByb3V0aW5nLCB1c2UgZGlyZWN0IGludGVyZmFjZS4KICoKICoKICoKICoKICoKICogQHBhcmFtIHN0cmluZyAkYWRkciBJUCBhZGRyZXNzIG9mIHRoZSByZW1vdGUgaG9zdC4KICogQHBhcmFtIGludCAkcG9ydCBwb3J0IGlzIHRoZSByZW1vdGUgcG9ydCBudW1iZXIgYXQgd2hpY2ggdGhlIGRhdGEKICogd2lsbCBiZSBzZW50LgogKiBAcmV0dXJuIGludCBzb2NrZXRfc2VuZHRvIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBzZW50IHRvIHRoZQogKiByZW1vdGUgaG9zdC4KICogQHRocm93cyBTb2NrZXRzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2NrZXRfc2VuZHRvKCRzb2NrZXQsIHN0cmluZyAkYnVmLCBpbnQgJGxlbiwgaW50ICRmbGFncywgc3RyaW5nICRhZGRyLCBpbnQgJHBvcnQgPSAwKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc29ja2V0X3NlbmR0bygkc29ja2V0LCAkYnVmLCAkbGVuLCAkZmxhZ3MsICRhZGRyLCAkcG9ydCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTb2NrZXRzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoZSBzb2NrZXRfc2V0X2Jsb2NrIGZ1bmN0aW9uIHJlbW92ZXMgdGhlCiAqIE9fTk9OQkxPQ0sgZmxhZyBvbiB0aGUgc29ja2V0IHNwZWNpZmllZCBieSB0aGUKICogc29ja2V0IHBhcmFtZXRlci4KICoKICogV2hlbiBhbiBvcGVyYXRpb24gKGUuZy4gcmVjZWl2ZSwgc2VuZCwgY29ubmVjdCwgYWNjZXB0LCAuLi4pIGlzIHBlcmZvcm1lZCBvbgogKiBhIGJsb2NraW5nIHNvY2tldCwgdGhlIHNjcmlwdCB3aWxsIHBhdXNlIGl0cyBleGVjdXRpb24gdW50aWwgaXQgcmVjZWl2ZXMKICogYSBzaWduYWwgb3IgaXQgY2FuIHBlcmZvcm0gdGhlIG9wZXJhdGlvbi4KICoKICogQHBhcmFtIHJlc291cmNlICRzb2NrZXQgQSB2YWxpZCBzb2NrZXQgcmVzb3VyY2UgY3JlYXRlZCB3aXRoIHNvY2tldF9jcmVhdGUKICogb3Igc29ja2V0X2FjY2VwdC4KICogQHRocm93cyBTb2NrZXRzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2NrZXRfc2V0X2Jsb2NrKCRzb2NrZXQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc29ja2V0X3NldF9ibG9jaygkc29ja2V0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNvY2tldHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoZSBzb2NrZXRfc2V0X25vbmJsb2NrIGZ1bmN0aW9uIHNldHMgdGhlCiAqIE9fTk9OQkxPQ0sgZmxhZyBvbiB0aGUgc29ja2V0IHNwZWNpZmllZCBieQogKiB0aGUgc29ja2V0IHBhcmFtZXRlci4KICoKICogV2hlbiBhbiBvcGVyYXRpb24gKGUuZy4gcmVjZWl2ZSwgc2VuZCwgY29ubmVjdCwgYWNjZXB0LCAuLi4pIGlzIHBlcmZvcm1lZCBvbgogKiBhIG5vbi1ibG9ja2luZyBzb2NrZXQsIHRoZSBzY3JpcHQgd2lsbCBub3QgcGF1c2UgaXRzIGV4ZWN1dGlvbiB1bnRpbCBpdCByZWNlaXZlcyBhCiAqIHNpZ25hbCBvciBpdCBjYW4gcGVyZm9ybSB0aGUgb3BlcmF0aW9uLiBSYXRoZXIsIGlmIHRoZSBvcGVyYXRpb24gd291bGQgcmVzdWx0CiAqIGluIGEgYmxvY2ssIHRoZSBjYWxsZWQgZnVuY3Rpb24gd2lsbCBmYWlsLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNvY2tldCBBIHZhbGlkIHNvY2tldCByZXNvdXJjZSBjcmVhdGVkIHdpdGggc29ja2V0X2NyZWF0ZQogKiBvciBzb2NrZXRfYWNjZXB0LgogKiBAdGhyb3dzIFNvY2tldHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNvY2tldF9zZXRfbm9uYmxvY2soJHNvY2tldCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzb2NrZXRfc2V0X25vbmJsb2NrKCRzb2NrZXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU29ja2V0c0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhlIHNvY2tldF9zZXRfb3B0aW9uIGZ1bmN0aW9uIHNldHMgdGhlIG9wdGlvbgogKiBzcGVjaWZpZWQgYnkgdGhlIG9wdG5hbWUgcGFyYW1ldGVyLCBhdCB0aGUKICogc3BlY2lmaWVkIHByb3RvY29sIGxldmVsLCB0byB0aGUgdmFsdWUgcG9pbnRlZCB0bwogKiBieSB0aGUgb3B0dmFsIHBhcmFtZXRlciBmb3IgdGhlCiAqIHNvY2tldC4KICoKICogQHBhcmFtIHJlc291cmNlICRzb2NrZXQgQSB2YWxpZCBzb2NrZXQgcmVzb3VyY2UgY3JlYXRlZCB3aXRoIHNvY2tldF9jcmVhdGUKICogb3Igc29ja2V0X2FjY2VwdC4KICogQHBhcmFtIGludCAkbGV2ZWwgVGhlIGxldmVsIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIHByb3RvY29sCiAqIGxldmVsIGF0IHdoaWNoIHRoZSBvcHRpb24gcmVzaWRlcy4gRm9yIGV4YW1wbGUsIHRvIHJldHJpZXZlIG9wdGlvbnMgYXQKICogdGhlIHNvY2tldCBsZXZlbCwgYSBsZXZlbCBwYXJhbWV0ZXIgb2YKICogU09MX1NPQ0tFVCB3b3VsZCBiZSB1c2VkLiBPdGhlciBsZXZlbHMsIHN1Y2ggYXMKICogVENQLCBjYW4gYmUgdXNlZCBieSBzcGVjaWZ5aW5nIHRoZSBwcm90b2NvbCBudW1iZXIgb2YgdGhhdCBsZXZlbC4KICogUHJvdG9jb2wgbnVtYmVycyBjYW4gYmUgZm91bmQgYnkgdXNpbmcgdGhlCiAqIGdldHByb3RvYnluYW1lIGZ1bmN0aW9uLgogKiBAcGFyYW0gaW50ICRvcHRuYW1lIFRoZSBhdmFpbGFibGUgc29ja2V0IG9wdGlvbnMgYXJlIHRoZSBzYW1lIGFzIHRob3NlIGZvciB0aGUKICogc29ja2V0X2dldF9vcHRpb24gZnVuY3Rpb24uCiAqIEBwYXJhbSBpbnR8c3RyaW5nfGFycmF5ICRvcHR2YWwgVGhlIG9wdGlvbiB2YWx1ZS4KICogQHRocm93cyBTb2NrZXRzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2NrZXRfc2V0X29wdGlvbigkc29ja2V0LCBpbnQgJGxldmVsLCBpbnQgJG9wdG5hbWUsICRvcHR2YWwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc29ja2V0X3NldF9vcHRpb24oJHNvY2tldCwgJGxldmVsLCAkb3B0bmFtZSwgJG9wdHZhbCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTb2NrZXRzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGUgc29ja2V0X3NodXRkb3duIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc3RvcAogKiBpbmNvbWluZywgb3V0Z29pbmcgb3IgYWxsIGRhdGEgKHRoZSBkZWZhdWx0KSBmcm9tIGJlaW5nIHNlbnQgdGhyb3VnaCB0aGUKICogc29ja2V0CiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc29ja2V0IEEgdmFsaWQgc29ja2V0IHJlc291cmNlIGNyZWF0ZWQgd2l0aCBzb2NrZXRfY3JlYXRlLgogKiBAcGFyYW0gaW50ICRob3cgVGhlIHZhbHVlIG9mIGhvdyBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAqCiAqIHBvc3NpYmxlIHZhbHVlcyBmb3IgaG93CiAqCiAqCiAqCiAqIDAKICoKICogU2h1dGRvd24gc29ja2V0IHJlYWRpbmcKICoKICoKICoKICogMQogKgogKiBTaHV0ZG93biBzb2NrZXQgd3JpdGluZwogKgogKgogKgogKiAyCiAqCiAqIFNodXRkb3duIHNvY2tldCByZWFkaW5nIGFuZCB3cml0aW5nCiAqCiAqCiAqCiAqCiAqCiAqIEB0aHJvd3MgU29ja2V0c0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc29ja2V0X3NodXRkb3duKCRzb2NrZXQsIGludCAkaG93ID0gMik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzb2NrZXRfc2h1dGRvd24oJHNvY2tldCwgJGhvdyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTb2NrZXRzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBFeHBvcnRzIHRoZSBXU0FQUk9UT0NPTF9JTkZPIHN0cnVjdHVyZSBpbnRvIHNoYXJlZCBtZW1vcnkgYW5kIHJldHVybnMKICogYW4gaWRlbnRpZmllciB0byBiZSB1c2VkIHdpdGggc29ja2V0X3dzYXByb3RvY29sX2luZm9faW1wb3J0LiBUaGUKICogZXhwb3J0ZWQgSUQgaXMgb25seSB2YWxpZCBmb3IgdGhlIGdpdmVuIHRhcmdldF9waWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAgJHNvY2tldCBBIHZhbGlkIHNvY2tldCByZXNvdXJjZS4KICogQHBhcmFtIGludCAkdGFyZ2V0X3BpZCBUaGUgSUQgb2YgdGhlIHByb2Nlc3Mgd2hpY2ggd2lsbCBpbXBvcnQgdGhlIHNvY2tldC4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBhbiBpZGVudGlmaWVyIHRvIGJlIHVzZWQgZm9yIHRoZSBpbXBvcnQKICogQHRocm93cyBTb2NrZXRzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2NrZXRfd3NhcHJvdG9jb2xfaW5mb19leHBvcnQoJHNvY2tldCwgaW50ICR0YXJnZXRfcGlkKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc29ja2V0X3dzYXByb3RvY29sX2luZm9fZXhwb3J0KCRzb2NrZXQsICR0YXJnZXRfcGlkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNvY2tldHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogSW1wb3J0cyBhIHNvY2tldCB3aGljaCBoYXMgZm9ybWVybHkgYmVlbiBleHBvcnRlZCBmcm9tIGFub3RoZXIgcHJvY2Vzcy4KICoKICogQHBhcmFtIHN0cmluZyAkaW5mb19pZCBUaGUgSUQgd2hpY2ggaGFzIGJlZW4gcmV0dXJuZWQgYnkgYSBmb3JtZXIgY2FsbCB0bwogKiBzb2NrZXRfd3NhcHJvdG9jb2xfaW5mb19leHBvcnQuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyB0aGUgc29ja2V0IHJlc291cmNlCiAqIEB0aHJvd3MgU29ja2V0c0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc29ja2V0X3dzYXByb3RvY29sX2luZm9faW1wb3J0KHN0cmluZyAkaW5mb19pZCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzb2NrZXRfd3NhcHJvdG9jb2xfaW5mb19pbXBvcnQoJGluZm9faWQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU29ja2V0c0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZWxlYXNlcyB0aGUgc2hhcmVkIG1lbW9yeSBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBpbmZvX2lkLgogKgogKiBAcGFyYW0gc3RyaW5nICRpbmZvX2lkIFRoZSBJRCB3aGljaCBoYXMgYmVlbiByZXR1cm5lZCBieSBhIGZvcm1lciBjYWxsIHRvCiAqIHNvY2tldF93c2Fwcm90b2NvbF9pbmZvX2V4cG9ydC4KICogQHRocm93cyBTb2NrZXRzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2NrZXRfd3NhcHJvdG9jb2xfaW5mb19yZWxlYXNlKHN0cmluZyAkaW5mb19pZCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzb2NrZXRfd3NhcHJvdG9jb2xfaW5mb19yZWxlYXNlKCRpbmZvX2lkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNvY2tldHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/sodium.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTb2RpdW1FeGNlcHRpb247CgovKioKICogVXNlcyBhIENQVS0gYW5kIG1lbW9yeS1oYXJkIGhhc2ggYWxnb3JpdGhtIGFsb25nIHdpdGggYSByYW5kb21seS1nZW5lcmF0ZWQgc2FsdCwgYW5kIG1lbW9yeSBhbmQgQ1BVIGxpbWl0cyB0byBnZW5lcmF0ZSBhbiBBU0NJSS1lbmNvZGVkIGhhc2ggc3VpdGFibGUgZm9yIHBhc3N3b3JkIHN0b3JhZ2UuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkIHN0cmluZzsgVGhlIHBhc3N3b3JkIHRvIGdlbmVyYXRlIGEgaGFzaCBmb3IuCiAqIEBwYXJhbSBpbnQgJG9wc2xpbWl0IFJlcHJlc2VudHMgYSBtYXhpbXVtIGFtb3VudCBvZiBjb21wdXRhdGlvbnMgdG8gcGVyZm9ybS4gUmFpc2luZyB0aGlzIG51bWJlciB3aWxsIG1ha2UgdGhlIGZ1bmN0aW9uIHJlcXVpcmUgbW9yZSBDUFUgY3ljbGVzIHRvIGNvbXB1dGUgYSBrZXkuIFRoZXJlIGFyZSBjb25zdGFudHMgYXZhaWxhYmxlIHRvIHNldCB0aGUgb3BlcmF0aW9ucyBsaW1pdCB0byBhcHByb3ByaWF0ZSB2YWx1ZXMgZGVwZW5kaW5nIG9uIGludGVuZGVkIHVzZSwgaW4gb3JkZXIgb2Ygc3RyZW5ndGg6IFNPRElVTV9DUllQVE9fUFdIQVNIX09QU0xJTUlUX0lOVEVSQUNUSVZFLCBTT0RJVU1fQ1JZUFRPX1BXSEFTSF9PUFNMSU1JVF9NT0RFUkFURSBhbmQgU09ESVVNX0NSWVBUT19QV0hBU0hfT1BTTElNSVRfU0VOU0lUSVZFLgogKiBAcGFyYW0gaW50ICRtZW1saW1pdCBUaGUgbWF4aW11bSBhbW91bnQgb2YgUkFNIHRoYXQgdGhlIGZ1bmN0aW9uIHdpbGwgdXNlLCBpbiBieXRlcy4gVGhlcmUgYXJlIGNvbnN0YW50cyB0byBoZWxwIHlvdSBjaG9vc2UgYW4gYXBwcm9wcmlhdGUgdmFsdWUsIGluIG9yZGVyIG9mIHNpemU6IFNPRElVTV9DUllQVE9fUFdIQVNIX01FTUxJTUlUX0lOVEVSQUNUSVZFLCBTT0RJVU1fQ1JZUFRPX1BXSEFTSF9NRU1MSU1JVF9NT0RFUkFURSwgYW5kIFNPRElVTV9DUllQVE9fUFdIQVNIX01FTUxJTUlUX1NFTlNJVElWRS4gVHlwaWNhbGx5IHRoZXNlIHNob3VsZCBiZSBwYWlyZWQgd2l0aCB0aGUgbWF0Y2hpbmcgb3BzbGltaXQgdmFsdWVzLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBoYXNoZWQgcGFzc3dvcmQuCiAqCiAqIEluIG9yZGVyIHRvIHByb2R1Y2UgdGhlIHNhbWUgcGFzc3dvcmQgaGFzaCBmcm9tIHRoZSBzYW1lIHBhc3N3b3JkLCB0aGUgc2FtZSB2YWx1ZXMgZm9yIG9wc2xpbWl0IGFuZCBtZW1saW1pdCBtdXN0IGJlIHVzZWQuIFRoZXNlIGFyZSBlbWJlZGRlZCB3aXRoaW4gdGhlIGdlbmVyYXRlZCBoYXNoLCBzbwogKiBldmVyeXRoaW5nIHRoYXQncyBuZWVkZWQgdG8gdmVyaWZ5IHRoZSBoYXNoIGlzIGluY2x1ZGVkLiBUaGlzIGFsbG93cwogKiB0aGUgc29kaXVtX2NyeXB0b19wd2hhc2hfc3RyX3ZlcmlmeSBmdW5jdGlvbiB0byB2ZXJpZnkgdGhlIGhhc2ggd2l0aG91dAogKiBuZWVkaW5nIHNlcGFyYXRlIHN0b3JhZ2UgZm9yIHRoZSBvdGhlciBwYXJhbWV0ZXJzLgogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19wd2hhc2hfc3RyKHN0cmluZyAkcGFzc3dvcmQsIGludCAkb3BzbGltaXQsIGludCAkbWVtbGltaXQpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzb2RpdW1fY3J5cHRvX3B3aGFzaF9zdHIoJHBhc3N3b3JkLCAkb3BzbGltaXQsICRtZW1saW1pdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTb2RpdW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBsb3ctbGV2ZWwgYWNjZXNzIHRvIGxpYnNvZGl1bSdzIGNyeXB0b19wd2hhc2gga2V5IGRlcml2YXRpb24gZnVuY3Rpb24uIFVubGVzcyB5b3UgaGF2ZSBzcGVjaWZpYyByZWFzb24gdG8gdXNlIHRoaXMgZnVuY3Rpb24sIHlvdSBzaG91bGQgdXNlIHNvZGl1bV9jcnlwdG9fcHdoYXNoX3N0ciBvciBwYXNzd29yZF9oYXNoIGZ1bmN0aW9ucyBpbnN0ZWFkLgogKgogKiBAcGFyYW0gaW50ICRsZW5ndGggaW50ZWdlcjsgVGhlIGxlbmd0aCBvZiB0aGUgcGFzc3dvcmQgaGFzaCB0byBnZW5lcmF0ZSwgaW4gYnl0ZXMuCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkIHN0cmluZzsgVGhlIHBhc3N3b3JkIHRvIGdlbmVyYXRlIGEgaGFzaCBmb3IuCiAqIEBwYXJhbSBzdHJpbmcgJHNhbHQgc3RyaW5nIEEgc2FsdCB0byBhZGQgdG8gdGhlIHBhc3N3b3JkIGJlZm9yZSBoYXNoaW5nLiBUaGUgc2FsdCBzaG91bGQgYmUgdW5wcmVkaWN0YWJsZSwgaWRlYWxseSBnZW5lcmF0ZWQgZnJvbSBhIGdvb2QgcmFuZG9tIG11bWJlciBzb3VyY2Ugc3VjaCBhcyByYW5kb21fYnl0ZXMsIGFuZCBoYXZlIGEgbGVuZ3RoIG9mIGF0IGxlYXN0IFNPRElVTV9DUllQVE9fUFdIQVNIX1NBTFRCWVRFUyBieXRlcy4KICogQHBhcmFtIGludCAkb3BzbGltaXQgUmVwcmVzZW50cyBhIG1heGltdW0gYW1vdW50IG9mIGNvbXB1dGF0aW9ucyB0byBwZXJmb3JtLiBSYWlzaW5nIHRoaXMgbnVtYmVyIHdpbGwgbWFrZSB0aGUgZnVuY3Rpb24gcmVxdWlyZSBtb3JlIENQVSBjeWNsZXMgdG8gY29tcHV0ZSBhIGtleS4gVGhlcmUgYXJlIHNvbWUgY29uc3RhbnRzIGF2YWlsYWJsZSB0byBzZXQgdGhlIG9wZXJhdGlvbnMgbGltaXQgdG8gYXBwcm9wcmlhdGUgdmFsdWVzIGRlcGVuZGluZyBvbiBpbnRlbmRlZCB1c2UsIGluIG9yZGVyIG9mIHN0cmVuZ3RoOiBTT0RJVU1fQ1JZUFRPX1BXSEFTSF9PUFNMSU1JVF9JTlRFUkFDVElWRSwgU09ESVVNX0NSWVBUT19QV0hBU0hfT1BTTElNSVRfTU9ERVJBVEUgYW5kIFNPRElVTV9DUllQVE9fUFdIQVNIX09QU0xJTUlUX1NFTlNJVElWRS4KICogQHBhcmFtIGludCAkbWVtbGltaXQgVGhlIG1heGltdW0gYW1vdW50IG9mIFJBTSB0aGF0IHRoZSBmdW5jdGlvbiB3aWxsIHVzZSwgaW4gYnl0ZXMuIFRoZXJlIGFyZSBjb25zdGFudHMgdG8gaGVscCB5b3UgY2hvb3NlIGFuIGFwcHJvcHJpYXRlIHZhbHVlLCBpbiBvcmRlciBvZiBzaXplOiBTT0RJVU1fQ1JZUFRPX1BXSEFTSF9NRU1MSU1JVF9JTlRFUkFDVElWRSwgU09ESVVNX0NSWVBUT19QV0hBU0hfTUVNTElNSVRfTU9ERVJBVEUsIGFuZCBTT0RJVU1fQ1JZUFRPX1BXSEFTSF9NRU1MSU1JVF9TRU5TSVRJVkUuIFR5cGljYWxseSB0aGVzZSBzaG91bGQgYmUgcGFpcmVkIHdpdGggdGhlIG1hdGNoaW5nIG9wc2xpbWl0IHZhbHVlcy4KICogQHBhcmFtIGludCAkYWxnIGludGVnZXIgQSBudW1iZXIgaW5kaWNhdGluZyB0aGUgaGFzaCBhbGdvcml0aG0gdG8gdXNlLiBCeSBkZWZhdWx0IFNPRElVTV9DUllQVE9fUFdIQVNIX0FMR19ERUZBVUxUICh0aGUgY3VycmVudGx5IHJlY29tbWVuZGVkIGFsZ29yaXRobSwgd2hpY2ggY2FuIGNoYW5nZSBmcm9tIG9uZSB2ZXJzaW9uIG9mIGxpYnNvZGl1bSB0byBhbm90aGVyKSwgb3IgZXhwbGljaXRseSB1c2luZyBTT0RJVU1fQ1JZUFRPX1BXSEFTSF9BTEdfQVJHT04ySUQxMywgcmVwcmVzZW50aW5nIHRoZSBBcmdvbjJpZCBhbGdvcml0aG0gdmVyc2lvbiAxLjMuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIGRlcml2ZWQga2V5LiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgYmluYXJ5IHN0cmluZyBvZiB0aGUgaGFzaCwgbm90IGFuIEFTQ0lJLWVuY29kZWQgcmVwcmVzZW50YXRpb24sIGFuZCBkb2VzIG5vdCBjb250YWluIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhcmFtZXRlcnMgdXNlZCB0byBjcmVhdGUgdGhlIGhhc2gsIHNvIHlvdSB3aWxsIG5lZWQgdG8ga2VlcCB0aGF0IGluZm9ybWF0aW9uIGlmIHlvdSBhcmUgZXZlciBnb2luZyB0byB2ZXJpZnkgdGhlIHBhc3N3b3JkIGluIGZ1dHVyZS4gVXNlIHNvZGl1bV9jcnlwdG9fcHdoYXNoX3N0ciB0byBhdm9pZCBuZWVkaW5nIHRvIGRvIGFsbCB0aGF0LgogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19wd2hhc2goaW50ICRsZW5ndGgsIHN0cmluZyAkcGFzc3dvcmQsIHN0cmluZyAkc2FsdCwgaW50ICRvcHNsaW1pdCwgaW50ICRtZW1saW1pdCwgaW50ICRhbGcgPSBudWxsKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkYWxnICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzb2RpdW1fY3J5cHRvX3B3aGFzaCgkbGVuZ3RoLCAkcGFzc3dvcmQsICRzYWx0LCAkb3BzbGltaXQsICRtZW1saW1pdCwgJGFsZyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcc29kaXVtX2NyeXB0b19wd2hhc2goJGxlbmd0aCwgJHBhc3N3b3JkLCAkc2FsdCwgJG9wc2xpbWl0LCAkbWVtbGltaXQpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU29kaXVtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/solr.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTb2xyRXhjZXB0aW9uOwoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBleHRlbnNpb24gYXMgYSBzdHJpbmcuCiAqCiAqIEByZXR1cm4gc3RyaW5nIEl0IHJldHVybnMgYSBzdHJpbmcgb24gc3VjY2Vzcy4KICogQHRocm93cyBTb2xyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2xyX2dldF92ZXJzaW9uKCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNvbHJfZ2V0X3ZlcnNpb24oKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNvbHJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/spl.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTcGxFeGNlcHRpb247CgovKioKICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGFycmF5IHdpdGggdGhlIG5hbWVzIG9mIHRoZSBpbnRlcmZhY2VzIHRoYXQgdGhlCiAqIGdpdmVuIGNsYXNzIGFuZCBpdHMgcGFyZW50cyBpbXBsZW1lbnQuCiAqCiAqIEBwYXJhbSBtaXhlZCAkY2xhc3MgQW4gb2JqZWN0IChjbGFzcyBpbnN0YW5jZSkgb3IgYSBzdHJpbmcgKGNsYXNzIG9yIGludGVyZmFjZSBuYW1lKS4KICogQHBhcmFtIGJvb2wgJGF1dG9sb2FkIFdoZXRoZXIgdG8gYWxsb3cgdGhpcyBmdW5jdGlvbiB0byBsb2FkIHRoZSBjbGFzcyBhdXRvbWF0aWNhbGx5IHRocm91Z2gKICogdGhlIF9fYXV0b2xvYWQgbWFnaWMgbWV0aG9kLgogKiBAcmV0dXJuIGFycmF5IEFuIGFycmF5IG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgU3BsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjbGFzc19pbXBsZW1lbnRzKCRjbGFzcywgYm9vbCAkYXV0b2xvYWQgPSB0cnVlKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxjbGFzc19pbXBsZW1lbnRzKCRjbGFzcywgJGF1dG9sb2FkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNwbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgbmFtZSBvZiB0aGUgcGFyZW50IGNsYXNzZXMgb2YKICogdGhlIGdpdmVuIGNsYXNzLgogKgogKiBAcGFyYW0gbWl4ZWQgJGNsYXNzIEFuIG9iamVjdCAoY2xhc3MgaW5zdGFuY2UpIG9yIGEgc3RyaW5nIChjbGFzcyBuYW1lKS4KICogQHBhcmFtIGJvb2wgJGF1dG9sb2FkIFdoZXRoZXIgdG8gYWxsb3cgdGhpcyBmdW5jdGlvbiB0byBsb2FkIHRoZSBjbGFzcyBhdXRvbWF0aWNhbGx5IHRocm91Z2gKICogdGhlIF9fYXV0b2xvYWQgbWFnaWMgbWV0aG9kLgogKiBAcmV0dXJuIGFycmF5IEFuIGFycmF5IG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgU3BsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjbGFzc19wYXJlbnRzKCRjbGFzcywgYm9vbCAkYXV0b2xvYWQgPSB0cnVlKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxjbGFzc19wYXJlbnRzKCRjbGFzcywgJGF1dG9sb2FkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNwbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgbmFtZXMgb2YgdGhlIHRyYWl0cyB0aGF0IHRoZQogKiBnaXZlbiBjbGFzcyB1c2VzLiBUaGlzIGRvZXMgaG93ZXZlciBub3QgaW5jbHVkZQogKiBhbnkgdHJhaXRzIHVzZWQgYnkgYSBwYXJlbnQgY2xhc3MuCiAqCiAqIEBwYXJhbSBtaXhlZCAkY2xhc3MgQW4gb2JqZWN0IChjbGFzcyBpbnN0YW5jZSkgb3IgYSBzdHJpbmcgKGNsYXNzIG5hbWUpLgogKiBAcGFyYW0gYm9vbCAkYXV0b2xvYWQgV2hldGhlciB0byBhbGxvdyB0aGlzIGZ1bmN0aW9uIHRvIGxvYWQgdGhlIGNsYXNzIGF1dG9tYXRpY2FsbHkgdGhyb3VnaAogKiB0aGUgX19hdXRvbG9hZCBtYWdpYyBtZXRob2QuCiAqIEByZXR1cm4gYXJyYXkgQW4gYXJyYXkgb24gc3VjY2Vzcy4KICogQHRocm93cyBTcGxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGNsYXNzX3VzZXMoJGNsYXNzLCBib29sICRhdXRvbG9hZCA9IHRydWUpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGNsYXNzX3VzZXMoJGNsYXNzLCAkYXV0b2xvYWQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3BsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJlZ2lzdGVyIGEgZnVuY3Rpb24gd2l0aCB0aGUgc3BsIHByb3ZpZGVkIF9fYXV0b2xvYWQgcXVldWUuIElmIHRoZSBxdWV1ZQogKiBpcyBub3QgeWV0IGFjdGl2YXRlZCBpdCB3aWxsIGJlIGFjdGl2YXRlZC4KICoKICogSWYgeW91ciBjb2RlIGhhcyBhbiBleGlzdGluZyBfX2F1dG9sb2FkIGZ1bmN0aW9uIHRoZW4KICogdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGV4cGxpY2l0bHkgcmVnaXN0ZXJlZCBvbiB0aGUgX19hdXRvbG9hZCBxdWV1ZS4gVGhpcwogKiBpcyBiZWNhdXNlIHNwbF9hdXRvbG9hZF9yZWdpc3RlciB3aWxsIGVmZmVjdGl2ZWx5CiAqIHJlcGxhY2UgdGhlIGVuZ2luZSBjYWNoZSBmb3IgdGhlIF9fYXV0b2xvYWQgZnVuY3Rpb24KICogYnkgZWl0aGVyIHNwbF9hdXRvbG9hZCBvcgogKiBzcGxfYXV0b2xvYWRfY2FsbC4KICoKICogSWYgdGhlcmUgbXVzdCBiZSBtdWx0aXBsZSBhdXRvbG9hZCBmdW5jdGlvbnMsIHNwbF9hdXRvbG9hZF9yZWdpc3RlcgogKiBhbGxvd3MgZm9yIHRoaXMuIEl0IGVmZmVjdGl2ZWx5IGNyZWF0ZXMgYSBxdWV1ZSBvZiBhdXRvbG9hZCBmdW5jdGlvbnMsIGFuZAogKiBydW5zIHRocm91Z2ggZWFjaCBvZiB0aGVtIGluIHRoZSBvcmRlciB0aGV5IGFyZSBkZWZpbmVkLiBCeSBjb250cmFzdCwKICogX19hdXRvbG9hZCBtYXkgb25seSBiZSBkZWZpbmVkIG9uY2UuCiAqCiAqIEBwYXJhbSBjYWxsYWJsZShzdHJpbmcpOnZvaWQgJGF1dG9sb2FkX2Z1bmN0aW9uIFRoZSBhdXRvbG9hZCBmdW5jdGlvbiBiZWluZyByZWdpc3RlcmVkLgogKiBJZiBubyBwYXJhbWV0ZXIgaXMgcHJvdmlkZWQsIHRoZW4gdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YKICogc3BsX2F1dG9sb2FkIHdpbGwgYmUgcmVnaXN0ZXJlZC4KICogQHBhcmFtIGJvb2wgJHRocm93IFRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB3aGV0aGVyCiAqIHNwbF9hdXRvbG9hZF9yZWdpc3RlciBzaG91bGQgdGhyb3cKICogZXhjZXB0aW9ucyB3aGVuIHRoZSBhdXRvbG9hZF9mdW5jdGlvbgogKiBjYW5ub3QgYmUgcmVnaXN0ZXJlZC4KICogQHBhcmFtIGJvb2wgJHByZXBlbmQgSWYgdHJ1ZSwgc3BsX2F1dG9sb2FkX3JlZ2lzdGVyIHdpbGwgcHJlcGVuZAogKiB0aGUgYXV0b2xvYWRlciBvbiB0aGUgYXV0b2xvYWQgcXVldWUgaW5zdGVhZCBvZiBhcHBlbmRpbmcgaXQuCiAqIEB0aHJvd3MgU3BsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzcGxfYXV0b2xvYWRfcmVnaXN0ZXIoY2FsbGFibGUgJGF1dG9sb2FkX2Z1bmN0aW9uID0gbnVsbCwgYm9vbCAkdGhyb3cgPSB0cnVlLCBib29sICRwcmVwZW5kID0gZmFsc2UpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkcHJlcGVuZCAhPT0gZmFsc2UpIHsKICAgICAgICAkcmVzdWx0ID0gXHNwbF9hdXRvbG9hZF9yZWdpc3RlcigkYXV0b2xvYWRfZnVuY3Rpb24sICR0aHJvdywgJHByZXBlbmQpOwogICAgfSBlbHNlaWYgKCR0aHJvdyAhPT0gdHJ1ZSkgewogICAgICAgICRyZXN1bHQgPSBcc3BsX2F1dG9sb2FkX3JlZ2lzdGVyKCRhdXRvbG9hZF9mdW5jdGlvbiwgJHRocm93KTsKICAgIH0gZWxzZWlmICgkYXV0b2xvYWRfZnVuY3Rpb24gIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHNwbF9hdXRvbG9hZF9yZWdpc3RlcigkYXV0b2xvYWRfZnVuY3Rpb24pOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHNwbF9hdXRvbG9hZF9yZWdpc3RlcigpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3BsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBSZW1vdmVzIGEgZnVuY3Rpb24gZnJvbSB0aGUgYXV0b2xvYWQgcXVldWUuIElmIHRoZSBxdWV1ZQogKiBpcyBhY3RpdmF0ZWQgYW5kIGVtcHR5IGFmdGVyIHJlbW92aW5nIHRoZSBnaXZlbiBmdW5jdGlvbiB0aGVuIGl0IHdpbGwKICogYmUgZGVhY3RpdmF0ZWQuCiAqCiAqIFdoZW4gdGhpcyBmdW5jdGlvbiByZXN1bHRzIGluIHRoZSBxdWV1ZSBiZWluZyBkZWFjdGl2YXRlZCwgYW55CiAqIF9fYXV0b2xvYWQgZnVuY3Rpb24gdGhhdCBwcmV2aW91c2x5IGV4aXN0ZWQgd2lsbCBub3QgYmUgcmVhY3RpdmF0ZWQuCiAqCiAqIEBwYXJhbSBtaXhlZCAkYXV0b2xvYWRfZnVuY3Rpb24gVGhlIGF1dG9sb2FkIGZ1bmN0aW9uIGJlaW5nIHVucmVnaXN0ZXJlZC4KICogQHRocm93cyBTcGxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNwbF9hdXRvbG9hZF91bnJlZ2lzdGVyKCRhdXRvbG9hZF9mdW5jdGlvbik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzcGxfYXV0b2xvYWRfdW5yZWdpc3RlcigkYXV0b2xvYWRfZnVuY3Rpb24pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3BsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/sqlsrv.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTcWxzcnZFeGNlcHRpb247CgovKioKICogVGhlIHRyYW5zYWN0aW9uIGJlZ3VuIGJ5IHNxbHNydl9iZWdpbl90cmFuc2FjdGlvbiBpbmNsdWRlcwogKiBhbGwgc3RhdGVtZW50cyB0aGF0IHdlcmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIGNhbGwgdG8KICogc3Fsc3J2X2JlZ2luX3RyYW5zYWN0aW9uIGFuZCBiZWZvcmUgY2FsbHMgdG8KICogc3Fsc3J2X3JvbGxiYWNrIG9yIHNxbHNydl9jb21taXQuCiAqIEV4cGxpY2l0IHRyYW5zYWN0aW9ucyBzaG91bGQgYmUgc3RhcnRlZCBhbmQgY29tbWl0dGVkIG9yIHJvbGxlZCBiYWNrIHVzaW5nCiAqIHRoZXNlIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIGV4ZWN1dGluZyBTUUwgc3RhdGVtZW50cyB0aGF0IGJlZ2luIGFuZCBjb21taXQvcm9sbAogKiBiYWNrIHRyYW5zYWN0aW9ucy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZQogKiBTUUxTUlYgVHJhbnNhY3Rpb25zLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm4gVGhlIGNvbm5lY3Rpb24gcmVzb3VyY2UgcmV0dXJuZWQgYnkgYSBjYWxsIHRvIHNxbHNydl9jb25uZWN0LgogKiBAdGhyb3dzIFNxbHNydkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3Fsc3J2X2JlZ2luX3RyYW5zYWN0aW9uKCRjb25uKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNxbHNydl9iZWdpbl90cmFuc2FjdGlvbigkY29ubik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTcWxzcnZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENhbmNlbHMgYSBzdGF0ZW1lbnQuIEFueSByZXN1bHRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RhdGVtZW50IHRoYXQgaGF2ZSBub3QKICogYmVlbiBjb25zdW1lZCBhcmUgZGVsZXRlZC4gQWZ0ZXIgc3Fsc3J2X2NhbmNlbCBoYXMgYmVlbgogKiBjYWxsZWQsIHRoZSBzcGVjaWZpZWQgc3RhdGVtZW50IGNhbiBiZSByZS1leGVjdXRlZCBpZiBpdCB3YXMgY3JlYXRlZCB3aXRoCiAqIHNxbHNydl9wcmVwYXJlLiBDYWxsaW5nIHNxbHNydl9jYW5jZWwKICogaXMgbm90IG5lY2Vzc2FyeSBpZiBhbGwgdGhlIHJlc3VsdHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGF0ZW1lbnQgaGF2ZSBiZWVuCiAqIGNvbnN1bWVkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0bXQgVGhlIHN0YXRlbWVudCByZXNvdXJjZSB0byBiZSBjYW5jZWxsZWQuCiAqIEB0aHJvd3MgU3Fsc3J2RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzcWxzcnZfY2FuY2VsKCRzdG10KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNxbHNydl9jYW5jZWwoJHN0bXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3Fsc3J2RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBSZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjbGllbnQgYW5kIHNwZWNpZmllZCBjb25uZWN0aW9uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubiBUaGUgY29ubmVjdGlvbiBhYm91dCB3aGljaCBpbmZvcm1hdGlvbiBpcyByZXR1cm5lZC4KICogQHJldHVybiBhcnJheSBSZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IHdpdGgga2V5cyBkZXNjcmliZWQgaW4gdGhlIHRhYmxlIGJlbG93LgogKgogKiBBcnJheSByZXR1cm5lZCBieSBzcWxzcnZfY2xpZW50X2luZm8KICoKICoKICoKICogS2V5CiAqIERlc2NyaXB0aW9uCiAqCiAqCiAqCiAqCiAqIERyaXZlckRsbE5hbWUKICogU1FMTkNMSTEwLkRMTAogKgogKgogKiBEcml2ZXJPREJDVmVyCiAqIE9EQkMgdmVyc2lvbiAoeHgueXkpCiAqCiAqCiAqIERyaXZlclZlcgogKiBTUUwgU2VydmVyIE5hdGl2ZSBDbGllbnQgRExMIHZlcnNpb24gKDEwLjUueHh4KQogKgogKgogKiBFeHRlbnNpb25WZXIKICogcGhwX3NxbHNydi5kbGwgdmVyc2lvbiAoMi4wLnh4eC54KQogKgogKgogKgogKgogKiBAdGhyb3dzIFNxbHNydkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3Fsc3J2X2NsaWVudF9pbmZvKCRjb25uKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzcWxzcnZfY2xpZW50X2luZm8oJGNvbm4pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3Fsc3J2RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIENsb3NlcyBhbiBvcGVuIGNvbm5lY3Rpb24gYW5kIHJlbGVhc2VzIHJlc291cnNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbm5lY3Rpb24uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubiBUaGUgY29ubmVjdGlvbiB0byBiZSBjbG9zZWQuCiAqIEB0aHJvd3MgU3Fsc3J2RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzcWxzcnZfY2xvc2UoJGNvbm4pOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc3Fsc3J2X2Nsb3NlKCRjb25uKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNxbHNydkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ29tbWl0cyBhIHRyYW5zYWN0aW9uIHRoYXQgd2FzIGJlZ3VuIHdpdGggc3Fsc3J2X2JlZ2luX3RyYW5zYWN0aW9uLgogKiBUaGUgY29ubmVjdGlvbiBpcyByZXR1cm5lZCB0byBhdXRvLWNvbW1pdCBtb2RlIGFmdGVyIHNxbHNydl9jb21taXQKICogaXMgY2FsbGVkLiBUaGUgdHJhbnNhY3Rpb24gdGhhdCBpcyBjb21taXR0ZWQgaW5jbHVkZXMgYWxsIHN0YXRlbWVudHMgdGhhdCB3ZXJlCiAqIGV4ZWN1dGVkIGFmdGVyIHRoZSBjYWxsIHRvIHNxbHNydl9iZWdpbl90cmFuc2FjdGlvbi4KICogRXhwbGljaXQgdHJhbnNhY3Rpb25zIHNob3VsZCBiZSBzdGFydGVkIGFuZCBjb21taXR0ZWQgb3Igcm9sbGVkIGJhY2sgdXNpbmcgdGhlc2UKICogZnVuY3Rpb25zIGluc3RlYWQgb2YgZXhlY3V0aW5nIFNRTCBzdGF0ZW1lbnRzIHRoYXQgYmVnaW4gYW5kIGNvbW1pdC9yb2xsIGJhY2sKICogdHJhbnNhY3Rpb25zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlCiAqIFNRTFNSViBUcmFuc2FjdGlvbnMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubiBUaGUgY29ubmVjdGlvbiBvbiB3aGljaCB0aGUgdHJhbnNhY3Rpb24gaXMgdG8gYmUgY29tbWl0dGVkLgogKiBAdGhyb3dzIFNxbHNydkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3Fsc3J2X2NvbW1pdCgkY29ubik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzcWxzcnZfY29tbWl0KCRjb25uKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNxbHNydkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ2hhbmdlcyB0aGUgZHJpdmVyIGVycm9yIGhhbmRsaW5nIGFuZCBsb2dnaW5nIGNvbmZpZ3VyYXRpb25zLgogKgogKiBAcGFyYW0gc3RyaW5nICRzZXR0aW5nIFRoZSBuYW1lIG9mIHRoZSBzZXR0aW5nIHRvIHNldC4gVGhlIHBvc3NpYmxlIHZhbHVlcyBhcmUKICogIldhcm5pbmdzUmV0dXJuQXNFcnJvcnMiLCAiTG9nU3Vic3lzdGVtcyIsIGFuZCAiTG9nU2V2ZXJpdHkiLgogKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIHNldHRpbmcuIFRoZSBmb2xsb3dpbmcgdGFibGUgc2hvd3MgcG9zc2libGUgdmFsdWVzOgogKgogKiBFcnJvciBhbmQgTG9nZ2luZyBTZXR0aW5nIE9wdGlvbnMKICoKICoKICoKICogU2V0dGluZwogKiBPcHRpb25zCiAqCiAqCiAqCiAqCiAqIFdhcm5pbmdzUmV0dXJuQXNFcnJvcnMKICogMSAoVFJVRSkgb3IgMCAoRkFMU0UpCiAqCiAqCiAqIExvZ1N1YnN5c3RlbXMKICogU1FMU1JWX0xPR19TWVNURU1fQUxMICgtMSkKICogU1FMU1JWX0xPR19TWVNURU1fQ09OTiAoMikKICogU1FMU1JWX0xPR19TWVNURU1fSU5JVCAoMSkKICogU1FMU1JWX0xPR19TWVNURU1fT0ZGICgwKQogKiBTUUxTUlZfTE9HX1NZU1RFTV9TVE1UICg0KQogKiBTUUxTUlZfTE9HX1NZU1RFTV9VVElMICg4KQogKgogKgogKiBMb2dTZXZlcml0eQogKiBTUUxTUlZfTE9HX1NFVkVSSVRZX0FMTCAoLTEpCiAqIFNRTFNSVl9MT0dfU0VWRVJJVFlfRVJST1IgKDEpCiAqIFNRTFNSVl9MT0dfU0VWRVJJVFlfTk9USUNFICg0KQogKiBTUUxTUlZfTE9HX1NFVkVSSVRZX1dBUk5JTkcgKDIpCiAqCiAqCiAqCiAqCiAqIEB0aHJvd3MgU3Fsc3J2RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzcWxzcnZfY29uZmlndXJlKHN0cmluZyAkc2V0dGluZywgJHZhbHVlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNxbHNydl9jb25maWd1cmUoJHNldHRpbmcsICR2YWx1ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTcWxzcnZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEV4ZWN1dGVzIGEgc3RhdGVtZW50IHByZXBhcmVkIHdpdGggc3Fsc3J2X3ByZXBhcmUuIFRoaXMKICogZnVuY3Rpb24gaXMgaWRlYWwgZm9yIGV4ZWN1dGluZyBhIHByZXBhcmVkIHN0YXRlbWVudCBtdWx0aXBsZSB0aW1lcyB3aXRoCiAqIGRpZmZlcmVudCBwYXJhbWV0ZXIgdmFsdWVzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0bXQgQSBzdGF0ZW1lbnQgcmVzb3VyY2UgcmV0dXJuZWQgYnkgc3Fsc3J2X3ByZXBhcmUuCiAqIEB0aHJvd3MgU3Fsc3J2RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzcWxzcnZfZXhlY3V0ZSgkc3RtdCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzcWxzcnZfZXhlY3V0ZSgkc3RtdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTcWxzcnZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEZyZWVzIGFsbCByZXNvdXJjZXMgZm9yIHRoZSBzcGVjaWZpZWQgc3RhdGVtZW50LiBUaGUgc3RhdGVtZW50IGNhbm5vdCBiZSB1c2VkCiAqIGFmdGVyIHNxbHNydl9mcmVlX3N0bXQgaGFzIGJlZW4gY2FsbGVkIG9uIGl0LiBJZgogKiBzcWxzcnZfZnJlZV9zdG10IGlzIGNhbGxlZCBvbiBhbiBpbi1wcm9ncmVzcyBzdGF0ZW1lbnQKICogdGhhdCBhbHRlcnMgc2VydmVyIHN0YXRlLCBzdGF0ZW1lbnQgZXhlY3V0aW9uIGlzIHRlcm1pbmF0ZWQgYW5kIHRoZSBzdGF0ZW1lbnQKICogaXMgcm9sbGVkIGJhY2suCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RtdCBUaGUgc3RhdGVtZW50IGZvciB3aGljaCByZXNvdXJjZXMgYXJlIGZyZWVkLgogKiBOb3RlIHRoYXQgTlVMTCBpcyBhIHZhbGlkIHBhcmFtZXRlciB2YWx1ZS4gVGhpcyBhbGxvd3MgdGhlIGZ1bmN0aW9uIHRvIGJlCiAqIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBpbiBhIHNjcmlwdC4KICogQHRocm93cyBTcWxzcnZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNxbHNydl9mcmVlX3N0bXQoJHN0bXQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc3Fsc3J2X2ZyZWVfc3RtdCgkc3RtdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTcWxzcnZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEdldHMgZmllbGQgZGF0YSBmcm9tIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcm93LiBGaWVsZHMgbXVzdCBiZSBhY2Nlc3NlZCBpbgogKiBvcmRlci4gRmllbGQgaW5kaWNlcyBzdGFydCBhdCAwLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0bXQgQSBzdGF0ZW1lbnQgcmVzb3VyY2UgcmV0dXJuZWQgYnkgc3Fsc3J2X3F1ZXJ5IG9yCiAqIHNxbHNydl9leGVjdXRlLgogKiBAcGFyYW0gaW50ICRmaWVsZEluZGV4IFRoZSBpbmRleCBvZiB0aGUgZmllbGQgdG8gYmUgcmV0cmlldmVkLiBGaWVsZCBpbmRpY2VzIHN0YXJ0IGF0IDAuIEZpZWxkcwogKiBtdXN0IGJlIGFjY2Vzc2VkIGluIG9yZGVyLiBpLmUuIElmIHlvdSBhY2Nlc3MgZmllbGQgaW5kZXggMSwgdGhlbiBmaWVsZAogKiBpbmRleCAwIHdpbGwgbm90IGJlIGF2YWlsYWJsZS4KICogQHBhcmFtIGludCAkZ2V0QXNUeXBlIFRoZSBQSFAgZGF0YSB0eXBlIGZvciB0aGUgcmV0dXJuZWQgZmllbGQgZGF0YS4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm90CiAqIHNldCwgdGhlIGZpZWxkIGRhdGEgd2lsbCBiZSByZXR1cm5lZCBhcyBpdHMgZGVmYXVsdCBQSFAgZGF0YSB0eXBlLgogKiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgZGVmYXVsdCBQSFAgZGF0YSB0eXBlcywgc2VlCiAqIERlZmF1bHQgUEhQIERhdGEgVHlwZXMKICogaW4gdGhlIE1pY3Jvc29mdCBTUUxTUlYgZG9jdW1lbnRhdGlvbi4KICogQHJldHVybiBtaXhlZCBSZXR1cm5zIGRhdGEgZnJvbSB0aGUgc3BlY2lmaWVkIGZpZWxkIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgU3Fsc3J2RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzcWxzcnZfZ2V0X2ZpZWxkKCRzdG10LCBpbnQgJGZpZWxkSW5kZXgsIGludCAkZ2V0QXNUeXBlID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRnZXRBc1R5cGUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHNxbHNydl9nZXRfZmllbGQoJHN0bXQsICRmaWVsZEluZGV4LCAkZ2V0QXNUeXBlKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxzcWxzcnZfZ2V0X2ZpZWxkKCRzdG10LCAkZmllbGRJbmRleCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTcWxzcnZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogTWFrZXMgdGhlIG5leHQgcmVzdWx0IG9mIHRoZSBzcGVjaWZpZWQgc3RhdGVtZW50IGFjdGl2ZS4gUmVzdWx0cyBpbmNsdWRlIHJlc3VsdAogKiBzZXRzLCByb3cgY291bnRzLCBhbmQgb3V0cHV0IHBhcmFtZXRlcnMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RtdCBUaGUgc3RhdGVtZW50IG9uIHdoaWNoIHRoZSBuZXh0IHJlc3VsdCBpcyBiZWluZyBjYWxsZWQuCiAqIEByZXR1cm4gYm9vbHxudWxsIFJldHVybnMgVFJVRSBpZiB0aGUgbmV4dCByZXN1bHQgd2FzIHN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQsIEZBTFNFIGlmIGFuIGVycm9yCiAqIG9jY3VycmVkLCBhbmQgTlVMTCBpZiB0aGVyZSBhcmUgbm8gbW9yZSByZXN1bHRzIHRvIHJldHJpZXZlLgogKiBAdGhyb3dzIFNxbHNydkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3Fsc3J2X25leHRfcmVzdWx0KCRzdG10KTogP2Jvb2wKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzcWxzcnZfbmV4dF9yZXN1bHQoJHN0bXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3Fsc3J2RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJldHJpZXZlcyB0aGUgbnVtYmVyIG9mIGZpZWxkcyAoY29sdW1ucykgb24gYSBzdGF0ZW1lbnQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RtdCBUaGUgc3RhdGVtZW50IGZvciB3aGljaCB0aGUgbnVtYmVyIG9mIGZpZWxkcyBpcyByZXR1cm5lZC4KICogc3Fsc3J2X251bV9maWVsZHMgY2FuIGJlIGNhbGxlZCBvbiBhIHN0YXRlbWVudCBiZWZvcmUKICogb3IgYWZ0ZXIgc3RhdGVtZW50IGV4ZWN1dGlvbi4KICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGZpZWxkcyBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIFNxbHNydkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3Fsc3J2X251bV9maWVsZHMoJHN0bXQpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzcWxzcnZfbnVtX2ZpZWxkcygkc3RtdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTcWxzcnZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0cmlldmVzIHRoZSBudW1iZXIgb2Ygcm93cyBpbiBhIHJlc3VsdCBzZXQuIFRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgdGhhdCB0aGUKICogc3RhdGVtZW50IHJlc291cmNlIGJlIGNyZWF0ZWQgd2l0aCBhIHN0YXRpYyBvciBrZXlzZXQgY3Vyc29yLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwKICogc2VlIHNxbHNydl9xdWVyeSwgc3Fsc3J2X3ByZXBhcmUsCiAqIG9yIFNwZWNpZnlpbmcgYSBDdXJzb3IgVHlwZSBhbmQgU2VsZWN0aW5nIFJvd3MKICogaW4gdGhlIE1pY3Jvc29mdCBTUUxTUlYgZG9jdW1lbnRhdGlvbi4KICoKICogQHBhcmFtIHJlc291cmNlICRzdG10IFRoZSBzdGF0ZW1lbnQgZm9yIHdoaWNoIHRoZSByb3cgY291bnQgaXMgcmV0dXJuZWQuIFRoZSBzdGF0ZW1lbnQgcmVzb3VyY2UKICogbXVzdCBiZSBjcmVhdGVkIHdpdGggYSBzdGF0aWMgb3Iga2V5c2V0IGN1cnNvci4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZQogKiBzcWxzcnZfcXVlcnksIHNxbHNydl9wcmVwYXJlLCBvcgogKiBTcGVjaWZ5aW5nIGEgQ3Vyc29yIFR5cGUgYW5kIFNlbGVjdGluZyBSb3dzCiAqIGluIHRoZSBNaWNyb3NvZnQgU1FMU1JWIGRvY3VtZW50YXRpb24uCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIG51bWJlciBvZiByb3dzIHJldHJpZXZlZCBvbiBzdWNjZXNzLgogKiBJZiBhIGZvcndhcmQgY3Vyc29yICh0aGUgZGVmYXVsdCkgb3IgZHluYW1pYyBjdXJzb3IgaXMgdXNlZCwgRkFMU0UgaXMgcmV0dXJuZWQuCiAqIEB0aHJvd3MgU3Fsc3J2RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzcWxzcnZfbnVtX3Jvd3MoJHN0bXQpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzcWxzcnZfbnVtX3Jvd3MoJHN0bXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3Fsc3J2RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFByZXBhcmVzIGEgcXVlcnkgZm9yIGV4ZWN1dGlvbi4gVGhpcyBmdW5jdGlvbiBpcyBpZGVhbCBmb3IgcHJlcGFyaW5nIGEgcXVlcnkKICogdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIG11bHRpcGxlIHRpbWVzIHdpdGggZGlmZmVyZW50IHBhcmFtZXRlciB2YWx1ZXMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubiBBIGNvbm5lY3Rpb24gcmVzb3VyY2UgcmV0dXJuZWQgYnkgc3Fsc3J2X2Nvbm5lY3QuCiAqIEBwYXJhbSBzdHJpbmcgJHNxbCBUaGUgc3RyaW5nIHRoYXQgZGVmaW5lcyB0aGUgcXVlcnkgdG8gYmUgcHJlcGFyZWQgYW5kIGV4ZWN1dGVkLgogKiBAcGFyYW0gYXJyYXkgJHBhcmFtcyBBbiBhcnJheSBzcGVjaWZ5aW5nIHBhcmFtZXRlciBpbmZvcm1hdGlvbiB3aGVuIGV4ZWN1dGluZyBhIHBhcmFtZXRlcml6ZWQKICogcXVlcnkuIEFycmF5IGVsZW1lbnRzIGNhbiBiZSBhbnkgb2YgdGhlIGZvbGxvd2luZzoKICoKICogQSBsaXRlcmFsIHZhbHVlCiAqIEEgUEhQIHZhcmlhYmxlCiAqIEFuIGFycmF5IHdpdGggdGhpcyBzdHJ1Y3R1cmU6CiAqIGFycmF5KCR2YWx1ZSBbLCAkZGlyZWN0aW9uIFssICRwaHBUeXBlIFssICRzcWxUeXBlXV1dKQogKgogKiBUaGUgZm9sbG93aW5nIHRhYmxlIGRlc2NyaWJlcyB0aGUgZWxlbWVudHMgaW4gdGhlIGFycmF5IHN0cnVjdHVyZSBhYm92ZToKICogQHBhcmFtIGFycmF5ICRvcHRpb25zIEFuIGFycmF5IHNwZWNpZnlpbmcgcXVlcnkgcHJvcGVydHkgb3B0aW9ucy4gVGhlIHN1cHBvcnRlZCBrZXlzIGFyZSBkZXNjcmliZWQKICogaW4gdGhlIGZvbGxvd2luZyB0YWJsZToKICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgc3RhdGVtZW50IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgU3Fsc3J2RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzcWxzcnZfcHJlcGFyZSgkY29ubiwgc3RyaW5nICRzcWwsIGFycmF5ICRwYXJhbXMgPSBudWxsLCBhcnJheSAkb3B0aW9ucyA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkb3B0aW9ucyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcc3Fsc3J2X3ByZXBhcmUoJGNvbm4sICRzcWwsICRwYXJhbXMsICRvcHRpb25zKTsKICAgIH0gZWxzZWlmICgkcGFyYW1zICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzcWxzcnZfcHJlcGFyZSgkY29ubiwgJHNxbCwgJHBhcmFtcyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcc3Fsc3J2X3ByZXBhcmUoJGNvbm4sICRzcWwpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3Fsc3J2RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFByZXBhcmVzIGFuZCBleGVjdXRlcyBhIHF1ZXJ5LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm4gQSBjb25uZWN0aW9uIHJlc291cmNlIHJldHVybmVkIGJ5IHNxbHNydl9jb25uZWN0LgogKiBAcGFyYW0gc3RyaW5nICRzcWwgVGhlIHN0cmluZyB0aGF0IGRlZmluZXMgdGhlIHF1ZXJ5IHRvIGJlIHByZXBhcmVkIGFuZCBleGVjdXRlZC4KICogQHBhcmFtIGFycmF5ICRwYXJhbXMgQW4gYXJyYXkgc3BlY2lmeWluZyBwYXJhbWV0ZXIgaW5mb3JtYXRpb24gd2hlbiBleGVjdXRpbmcgYSBwYXJhbWV0ZXJpemVkIHF1ZXJ5LgogKiBBcnJheSBlbGVtZW50cyBjYW4gYmUgYW55IG9mIHRoZSBmb2xsb3dpbmc6CiAqCiAqIEEgbGl0ZXJhbCB2YWx1ZQogKiBBIFBIUCB2YXJpYWJsZQogKiBBbiBhcnJheSB3aXRoIHRoaXMgc3RydWN0dXJlOgogKiBhcnJheSgkdmFsdWUgWywgJGRpcmVjdGlvbiBbLCAkcGhwVHlwZSBbLCAkc3FsVHlwZV1dXSkKICoKICogVGhlIGZvbGxvd2luZyB0YWJsZSBkZXNjcmliZXMgdGhlIGVsZW1lbnRzIGluIHRoZSBhcnJheSBzdHJ1Y3R1cmUgYWJvdmU6CiAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBBbiBhcnJheSBzcGVjaWZ5aW5nIHF1ZXJ5IHByb3BlcnR5IG9wdGlvbnMuIFRoZSBzdXBwb3J0ZWQga2V5cyBhcmUgZGVzY3JpYmVkCiAqIGluIHRoZSBmb2xsb3dpbmcgdGFibGU6CiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhIHN0YXRlbWVudCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIFNxbHNydkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3Fsc3J2X3F1ZXJ5KCRjb25uLCBzdHJpbmcgJHNxbCwgYXJyYXkgJHBhcmFtcyA9IG51bGwsIGFycmF5ICRvcHRpb25zID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRvcHRpb25zICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzcWxzcnZfcXVlcnkoJGNvbm4sICRzcWwsICRwYXJhbXMsICRvcHRpb25zKTsKICAgIH0gZWxzZWlmICgkcGFyYW1zICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzcWxzcnZfcXVlcnkoJGNvbm4sICRzcWwsICRwYXJhbXMpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHNxbHNydl9xdWVyeSgkY29ubiwgJHNxbCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTcWxzcnZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUm9sbHMgYmFjayBhIHRyYW5zYWN0aW9uIHRoYXQgd2FzIGJlZ3VuIHdpdGggc3Fsc3J2X2JlZ2luX3RyYW5zYWN0aW9uCiAqIGFuZCByZXR1cm5zIHRoZSBjb25uZWN0aW9uIHRvIGF1dG8tY29tbWl0IG1vZGUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubiBUaGUgY29ubmVjdGlvbiByZXNvdXJjZSByZXR1cm5lZCBieSBhIGNhbGwgdG8gc3Fsc3J2X2Nvbm5lY3QuCiAqIEB0aHJvd3MgU3Fsc3J2RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzcWxzcnZfcm9sbGJhY2soJGNvbm4pOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc3Fsc3J2X3JvbGxiYWNrKCRjb25uKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNxbHNydkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/ssdeep.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTc2RlZXBFeGNlcHRpb247CgovKioKICogQ2FsY3VsYXRlcyB0aGUgbWF0Y2ggc2NvcmUgYmV0d2VlbiBzaWduYXR1cmUxCiAqIGFuZCBzaWduYXR1cmUyIHVzaW5nCiAqIGNvbnRleHQtdHJpZ2dlcmVkIHBpZWNld2lzZSBoYXNoaW5nLCBhbmQgcmV0dXJucyB0aGUgbWF0Y2gKICogc2NvcmUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHNpZ25hdHVyZTEgVGhlIGZpcnN0IGZ1enp5IGhhc2ggc2lnbmF0dXJlIHN0cmluZy4KICogQHBhcmFtIHN0cmluZyAkc2lnbmF0dXJlMiBUaGUgc2Vjb25kIGZ1enp5IGhhc2ggc2lnbmF0dXJlIHN0cmluZy4KICogQHJldHVybiBpbnQgUmV0dXJucyBhbiBpbnRlZ2VyIGZyb20gMCB0byAxMDAgb24gc3VjY2VzcywgRkFMU0Ugb3RoZXJ3aXNlLgogKiBAdGhyb3dzIFNzZGVlcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3NkZWVwX2Z1enp5X2NvbXBhcmUoc3RyaW5nICRzaWduYXR1cmUxLCBzdHJpbmcgJHNpZ25hdHVyZTIpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzc2RlZXBfZnV6enlfY29tcGFyZSgkc2lnbmF0dXJlMSwgJHNpZ25hdHVyZTIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3NkZWVwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHNzZGVlcF9mdXp6eV9oYXNoX2ZpbGVuYW1lIGNhbGN1bGF0ZXMgdGhlIGhhc2gKICogb2YgdGhlIGZpbGUgc3BlY2lmaWVkIGJ5IGZpbGVfbmFtZSB1c2luZwogKiBjb250ZXh0LXRyaWdnZXJlZCBwaWVjZXdpc2UKICogaGFzaGluZywgYW5kIHJldHVybnMgdGhhdCBoYXNoLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlX25hbWUgVGhlIGZpbGVuYW1lIG9mIHRoZSBmaWxlIHRvIGhhc2guCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgYSBzdHJpbmcgb24gc3VjY2VzcywgRkFMU0Ugb3RoZXJ3aXNlLgogKiBAdGhyb3dzIFNzZGVlcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3NkZWVwX2Z1enp5X2hhc2hfZmlsZW5hbWUoc3RyaW5nICRmaWxlX25hbWUpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzc2RlZXBfZnV6enlfaGFzaF9maWxlbmFtZSgkZmlsZV9uYW1lKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNzZGVlcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBzc2RlZXBfZnV6enlfaGFzaCBjYWxjdWxhdGVzIHRoZSBoYXNoIG9mCiAqIHRvX2hhc2ggdXNpbmcKICogY29udGV4dC10cmlnZ2VyZWQgcGllY2V3aXNlIGhhc2hpbmcsIGFuZCByZXR1cm5zIHRoYXQgaGFzaC4KICoKICogQHBhcmFtIHN0cmluZyAkdG9faGFzaCBUaGUgaW5wdXQgc3RyaW5nLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGEgc3RyaW5nIG9uIHN1Y2Nlc3MsIEZBTFNFIG90aGVyd2lzZS4KICogQHRocm93cyBTc2RlZXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNzZGVlcF9mdXp6eV9oYXNoKHN0cmluZyAkdG9faGFzaCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNzZGVlcF9mdXp6eV9oYXNoKCR0b19oYXNoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNzZGVlcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/ssh2.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTc2gyRXhjZXB0aW9uOwoKLyoqCiAqIEF1dGhlbnRpY2F0ZSBvdmVyIFNTSCB1c2luZyB0aGUgc3NoIGFnZW50CiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc2Vzc2lvbiBBbiBTU0ggY29ubmVjdGlvbiBsaW5rIGlkZW50aWZpZXIsIG9idGFpbmVkIGZyb20gYSBjYWxsIHRvCiAqIHNzaDJfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkdXNlcm5hbWUgUmVtb3RlIHVzZXIgbmFtZS4KICogQHRocm93cyBTc2gyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzc2gyX2F1dGhfYWdlbnQoJHNlc3Npb24sIHN0cmluZyAkdXNlcm5hbWUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc3NoMl9hdXRoX2FnZW50KCRzZXNzaW9uLCAkdXNlcm5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3NoMkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQXV0aGVudGljYXRlIHVzaW5nIGEgcHVibGljIGhvc3RrZXkgcmVhZCBmcm9tIGEgZmlsZS4KICoKICogQHBhcmFtIHJlc291cmNlICRzZXNzaW9uIEFuIFNTSCBjb25uZWN0aW9uIGxpbmsgaWRlbnRpZmllciwgb2J0YWluZWQgZnJvbSBhIGNhbGwgdG8KICogc3NoMl9jb25uZWN0LgogKiBAcGFyYW0gc3RyaW5nICR1c2VybmFtZQogKiBAcGFyYW0gc3RyaW5nICRob3N0bmFtZQogKiBAcGFyYW0gc3RyaW5nICRwdWJrZXlmaWxlCiAqIEBwYXJhbSBzdHJpbmcgJHByaXZrZXlmaWxlCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3NwaHJhc2UgSWYgcHJpdmtleWZpbGUgaXMgZW5jcnlwdGVkICh3aGljaCBpdCBzaG91bGQKICogYmUpLCB0aGUgcGFzc3BocmFzZSBtdXN0IGJlIHByb3ZpZGVkLgogKiBAcGFyYW0gc3RyaW5nICRsb2NhbF91c2VybmFtZSBJZiBsb2NhbF91c2VybmFtZSBpcyBvbWl0dGVkLCB0aGVuIHRoZSB2YWx1ZQogKiBmb3IgdXNlcm5hbWUgd2lsbCBiZSB1c2VkIGZvciBpdC4KICogQHRocm93cyBTc2gyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzc2gyX2F1dGhfaG9zdGJhc2VkX2ZpbGUoJHNlc3Npb24sIHN0cmluZyAkdXNlcm5hbWUsIHN0cmluZyAkaG9zdG5hbWUsIHN0cmluZyAkcHVia2V5ZmlsZSwgc3RyaW5nICRwcml2a2V5ZmlsZSwgc3RyaW5nICRwYXNzcGhyYXNlID0gbnVsbCwgc3RyaW5nICRsb2NhbF91c2VybmFtZSA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkbG9jYWxfdXNlcm5hbWUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHNzaDJfYXV0aF9ob3N0YmFzZWRfZmlsZSgkc2Vzc2lvbiwgJHVzZXJuYW1lLCAkaG9zdG5hbWUsICRwdWJrZXlmaWxlLCAkcHJpdmtleWZpbGUsICRwYXNzcGhyYXNlLCAkbG9jYWxfdXNlcm5hbWUpOwogICAgfSBlbHNlaWYgKCRwYXNzcGhyYXNlICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzc2gyX2F1dGhfaG9zdGJhc2VkX2ZpbGUoJHNlc3Npb24sICR1c2VybmFtZSwgJGhvc3RuYW1lLCAkcHVia2V5ZmlsZSwgJHByaXZrZXlmaWxlLCAkcGFzc3BocmFzZSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcc3NoMl9hdXRoX2hvc3RiYXNlZF9maWxlKCRzZXNzaW9uLCAkdXNlcm5hbWUsICRob3N0bmFtZSwgJHB1YmtleWZpbGUsICRwcml2a2V5ZmlsZSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTc2gyRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBBdXRoZW50aWNhdGUgb3ZlciBTU0ggdXNpbmcgYSBwbGFpbiBwYXNzd29yZC4gU2luY2UgdmVyc2lvbiAwLjEyIHRoaXMgZnVuY3Rpb24KICogYWxzbyBzdXBwb3J0cyBrZXlib2FyZF9pbnRlcmFjdGl2ZSBtZXRob2QuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc2Vzc2lvbiBBbiBTU0ggY29ubmVjdGlvbiBsaW5rIGlkZW50aWZpZXIsIG9idGFpbmVkIGZyb20gYSBjYWxsIHRvCiAqIHNzaDJfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkdXNlcm5hbWUgUmVtb3RlIHVzZXIgbmFtZS4KICogQHBhcmFtIHN0cmluZyAkcGFzc3dvcmQgUGFzc3dvcmQgZm9yIHVzZXJuYW1lCiAqIEB0aHJvd3MgU3NoMkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3NoMl9hdXRoX3Bhc3N3b3JkKCRzZXNzaW9uLCBzdHJpbmcgJHVzZXJuYW1lLCBzdHJpbmcgJHBhc3N3b3JkKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNzaDJfYXV0aF9wYXNzd29yZCgkc2Vzc2lvbiwgJHVzZXJuYW1lLCAkcGFzc3dvcmQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3NoMkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQXV0aGVudGljYXRlIHVzaW5nIGEgcHVibGljIGtleSByZWFkIGZyb20gYSBmaWxlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNlc3Npb24gQW4gU1NIIGNvbm5lY3Rpb24gbGluayBpZGVudGlmaWVyLCBvYnRhaW5lZCBmcm9tIGEgY2FsbCB0bwogKiBzc2gyX2Nvbm5lY3QuCiAqIEBwYXJhbSBzdHJpbmcgJHVzZXJuYW1lCiAqIEBwYXJhbSBzdHJpbmcgJHB1YmtleWZpbGUgVGhlIHB1YmxpYyBrZXkgZmlsZSBuZWVkcyB0byBiZSBpbiBPcGVuU1NIJ3MgZm9ybWF0LiBJdCBzaG91bGQgbG9vayBzb21ldGhpbmcgbGlrZToKICoKICogc3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUEuLi4uTlg2c3FTbkhBOD0gcnNhLWtleS0yMDEyMTExMAogKiBAcGFyYW0gc3RyaW5nICRwcml2a2V5ZmlsZQogKiBAcGFyYW0gc3RyaW5nICRwYXNzcGhyYXNlIElmIHByaXZrZXlmaWxlIGlzIGVuY3J5cHRlZCAod2hpY2ggaXQgc2hvdWxkCiAqIGJlKSwgdGhlIHBhc3NwaHJhc2UgbXVzdCBiZSBwcm92aWRlZC4KICogQHRocm93cyBTc2gyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzc2gyX2F1dGhfcHVia2V5X2ZpbGUoJHNlc3Npb24sIHN0cmluZyAkdXNlcm5hbWUsIHN0cmluZyAkcHVia2V5ZmlsZSwgc3RyaW5nICRwcml2a2V5ZmlsZSwgc3RyaW5nICRwYXNzcGhyYXNlID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRwYXNzcGhyYXNlICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzc2gyX2F1dGhfcHVia2V5X2ZpbGUoJHNlc3Npb24sICR1c2VybmFtZSwgJHB1YmtleWZpbGUsICRwcml2a2V5ZmlsZSwgJHBhc3NwaHJhc2UpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHNzaDJfYXV0aF9wdWJrZXlfZmlsZSgkc2Vzc2lvbiwgJHVzZXJuYW1lLCAkcHVia2V5ZmlsZSwgJHByaXZrZXlmaWxlKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNzaDJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEVzdGFibGlzaCBhIGNvbm5lY3Rpb24gdG8gYSByZW1vdGUgU1NIIHNlcnZlci4KICoKICogT25jZSBjb25uZWN0ZWQsIHRoZSBjbGllbnQgc2hvdWxkIHZlcmlmeSB0aGUgc2VydmVyJ3MgaG9zdGtleSB1c2luZwogKiBzc2gyX2ZpbmdlcnByaW50LCB0aGVuIGF1dGhlbnRpY2F0ZSB1c2luZyBlaXRoZXIKICogcGFzc3dvcmQgb3IgcHVibGljIGtleS4KICoKICogQHBhcmFtIHN0cmluZyAkaG9zdAogKiBAcGFyYW0gaW50ICRwb3J0CiAqIEBwYXJhbSBhcnJheSAkbWV0aG9kcyBtZXRob2RzIG1heSBiZSBhbiBhc3NvY2lhdGl2ZSBhcnJheSB3aXRoIHVwIHRvIGZvdXIgcGFyYW1ldGVycwogKiBhcyBkZXNjcmliZWQgYmVsb3cuCiAqCiAqCiAqIG1ldGhvZHMgbWF5IGJlIGFuIGFzc29jaWF0aXZlIGFycmF5CiAqIHdpdGggYW55IG9yIGFsbCBvZiB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMuCiAqCiAqCiAqCiAqIEluZGV4CiAqIE1lYW5pbmcKICogU3VwcG9ydGVkIFZhbHVlcyoKICoKICoKICoKICoKICoga2V4CiAqCiAqIExpc3Qgb2Yga2V5IGV4Y2hhbmdlIG1ldGhvZHMgdG8gYWR2ZXJ0aXNlLCBjb21tYSBzZXBhcmF0ZWQKICogaW4gb3JkZXIgb2YgcHJlZmVyZW5jZS4KICoKICoKICogZGlmZmllLWhlbGxtYW4tZ3JvdXAxLXNoYTEsCiAqIGRpZmZpZS1oZWxsbWFuLWdyb3VwMTQtc2hhMSwgYW5kCiAqIGRpZmZpZS1oZWxsbWFuLWdyb3VwLWV4Y2hhbmdlLXNoYTEKICoKICoKICoKICogaG9zdGtleQogKgogKiBMaXN0IG9mIGhvc3RrZXkgbWV0aG9kcyB0byBhZHZlcnRpc2UsIGNvbW1hIHNlcGFyYXRlZAogKiBpbiBvcmRlciBvZiBwcmVmZXJlbmNlLgogKgogKgogKiBzc2gtcnNhIGFuZAogKiBzc2gtZHNzCiAqCiAqCiAqCiAqIGNsaWVudF90b19zZXJ2ZXIKICoKICogQXNzb2NpYXRpdmUgYXJyYXkgY29udGFpbmluZyBjcnlwdCwgY29tcHJlc3Npb24sIGFuZAogKiBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGNvZGUgKE1BQykgbWV0aG9kIHByZWZlcmVuY2VzCiAqIGZvciBtZXNzYWdlcyBzZW50IGZyb20gY2xpZW50IHRvIHNlcnZlci4KICoKICoKICoKICoKICogc2VydmVyX3RvX2NsaWVudAogKgogKiBBc3NvY2lhdGl2ZSBhcnJheSBjb250YWluaW5nIGNyeXB0LCBjb21wcmVzc2lvbiwgYW5kCiAqIG1lc3NhZ2UgYXV0aGVudGljYXRpb24gY29kZSAoTUFDKSBtZXRob2QgcHJlZmVyZW5jZXMKICogZm9yIG1lc3NhZ2VzIHNlbnQgZnJvbSBzZXJ2ZXIgdG8gY2xpZW50LgogKgogKgogKgogKgogKgogKgogKgogKiAqIC0gU3VwcG9ydGVkIFZhbHVlcyBhcmUgZGVwZW5kZW50IG9uIG1ldGhvZHMgc3VwcG9ydGVkIGJ5IHVuZGVybHlpbmcgbGlicmFyeS4KICogU2VlIGxpYnNzaDIgZG9jdW1lbnRhdGlvbiBmb3IgYWRkaXRpb25hbAogKiBpbmZvcm1hdGlvbi4KICoKICoKICoKICogY2xpZW50X3RvX3NlcnZlciBhbmQKICogc2VydmVyX3RvX2NsaWVudCBtYXkgYmUgYW4gYXNzb2NpYXRpdmUgYXJyYXkKICogd2l0aCBhbnkgb3IgYWxsIG9mIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycy4KICoKICoKICoKICoKICogSW5kZXgKICogTWVhbmluZwogKiBTdXBwb3J0ZWQgVmFsdWVzKgogKgogKgogKgogKgogKiBjcnlwdAogKiBMaXN0IG9mIGNyeXB0byBtZXRob2RzIHRvIGFkdmVydGlzZSwgY29tbWEgc2VwYXJhdGVkCiAqIGluIG9yZGVyIG9mIHByZWZlcmVuY2UuCiAqCiAqIHJpam5kYWVsLWNiY0BseXNhdG9yLmxpdS5zZSwKICogYWVzMjU2LWNiYywKICogYWVzMTkyLWNiYywKICogYWVzMTI4LWNiYywKICogM2Rlcy1jYmMsCiAqIGJsb3dmaXNoLWNiYywKICogY2FzdDEyOC1jYmMsCiAqIGFyY2ZvdXIsIGFuZAogKiBub25lKioKICoKICoKICoKICogY29tcAogKiBMaXN0IG9mIGNvbXByZXNzaW9uIG1ldGhvZHMgdG8gYWR2ZXJ0aXNlLCBjb21tYSBzZXBhcmF0ZWQKICogaW4gb3JkZXIgb2YgcHJlZmVyZW5jZS4KICoKICogemxpYiBhbmQKICogbm9uZQogKgogKgogKgogKiBtYWMKICogTGlzdCBvZiBNQUMgbWV0aG9kcyB0byBhZHZlcnRpc2UsIGNvbW1hIHNlcGFyYXRlZAogKiBpbiBvcmRlciBvZiBwcmVmZXJlbmNlLgogKgogKiBobWFjLXNoYTEsCiAqIGhtYWMtc2hhMS05NiwKICogaG1hYy1yaXBlbWQxNjAsCiAqIGhtYWMtcmlwZW1kMTYwQG9wZW5zc2guY29tLCBhbmQKICogbm9uZSoqCiAqCiAqCiAqCiAqCiAqCiAqCiAqCiAqIENyeXB0IGFuZCBNQUMgbWV0aG9kICJub25lIgogKgogKiBGb3Igc2VjdXJpdHkgcmVhc29ucywgbm9uZSBpcyBkaXNhYmxlZCBieSB0aGUgdW5kZXJseWluZwogKiBsaWJzc2gyIGxpYnJhcnkgdW5sZXNzIGV4cGxpY2l0bHkgZW5hYmxlZAogKiBkdXJpbmcgYnVpbGQgdGltZSBieSB1c2luZyB0aGUgYXBwcm9wcmlhdGUgLi9jb25maWd1cmUgb3B0aW9ucy4gIFNlZSBkb2N1bWVudGF0aW9uCiAqIGZvciB0aGUgdW5kZXJseWluZyBsaWJyYXJ5IGZvciBtb3JlIGluZm9ybWF0aW9uLgogKgogKgogKgogKiBGb3Igc2VjdXJpdHkgcmVhc29ucywgbm9uZSBpcyBkaXNhYmxlZCBieSB0aGUgdW5kZXJseWluZwogKiBsaWJzc2gyIGxpYnJhcnkgdW5sZXNzIGV4cGxpY2l0bHkgZW5hYmxlZAogKiBkdXJpbmcgYnVpbGQgdGltZSBieSB1c2luZyB0aGUgYXBwcm9wcmlhdGUgLi9jb25maWd1cmUgb3B0aW9ucy4gIFNlZSBkb2N1bWVudGF0aW9uCiAqIGZvciB0aGUgdW5kZXJseWluZyBsaWJyYXJ5IGZvciBtb3JlIGluZm9ybWF0aW9uLgogKiBAcGFyYW0gYXJyYXkgJGNhbGxiYWNrcyBjYWxsYmFja3MgbWF5IGJlIGFuIGFzc29jaWF0aXZlIGFycmF5IHdpdGggYW55CiAqIG9yIGFsbCBvZiB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMuCiAqCiAqCiAqIENhbGxiYWNrcyBwYXJhbWV0ZXJzCiAqCiAqCiAqCiAqCiAqIEluZGV4CiAqIE1lYW5pbmcKICogUHJvdG90eXBlCiAqCiAqCiAqCiAqCiAqIGlnbm9yZQogKgogKiBOYW1lIG9mIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhbgogKiBTU0gyX01TR19JR05PUkUgcGFja2V0IGlzIHJlY2VpdmVkCiAqCiAqIHZvaWQgaWdub3JlX2NiKCRtZXNzYWdlKQogKgogKgogKiBkZWJ1ZwogKgogKiBOYW1lIG9mIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhbgogKiBTU0gyX01TR19ERUJVRyBwYWNrZXQgaXMgcmVjZWl2ZWQKICoKICogdm9pZCBkZWJ1Z19jYigkbWVzc2FnZSwgJGxhbmd1YWdlLCAkYWx3YXlzX2Rpc3BsYXkpCiAqCiAqCiAqIG1hY2Vycm9yCiAqCiAqIE5hbWUgb2YgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIGEgcGFja2V0IGlzIHJlY2VpdmVkIGJ1dCB0aGUKICogbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBjb2RlIGZhaWxlZC4gIElmIHRoZSBjYWxsYmFjayByZXR1cm5zCiAqIFRSVUUsIHRoZSBtaXNtYXRjaCB3aWxsIGJlIGlnbm9yZWQsIG90aGVyd2lzZSB0aGUgY29ubmVjdGlvbgogKiB3aWxsIGJlIHRlcm1pbmF0ZWQuCiAqCiAqIGJvb2wgbWFjZXJyb3JfY2IoJHBhY2tldCkKICoKICoKICogZGlzY29ubmVjdAogKgogKiBOYW1lIG9mIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhbgogKiBTU0gyX01TR19ESVNDT05ORUNUIHBhY2tldCBpcyByZWNlaXZlZAogKgogKiB2b2lkIGRpc2Nvbm5lY3RfY2IoJHJlYXNvbiwgJG1lc3NhZ2UsICRsYW5ndWFnZSkKICoKICoKICoKICoKICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICogQHRocm93cyBTc2gyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzc2gyX2Nvbm5lY3Qoc3RyaW5nICRob3N0LCBpbnQgJHBvcnQgPSAyMiwgYXJyYXkgJG1ldGhvZHMgPSBudWxsLCBhcnJheSAkY2FsbGJhY2tzID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjYWxsYmFja3MgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHNzaDJfY29ubmVjdCgkaG9zdCwgJHBvcnQsICRtZXRob2RzLCAkY2FsbGJhY2tzKTsKICAgIH0gZWxzZWlmICgkbWV0aG9kcyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcc3NoMl9jb25uZWN0KCRob3N0LCAkcG9ydCwgJG1ldGhvZHMpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHNzaDJfY29ubmVjdCgkaG9zdCwgJHBvcnQpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3NoMkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBDbG9zZSBhIGNvbm5lY3Rpb24gdG8gYSByZW1vdGUgU1NIIHNlcnZlci4KICoKICogQHBhcmFtIHJlc291cmNlICRzZXNzaW9uIEFuIFNTSCBjb25uZWN0aW9uIGxpbmsgaWRlbnRpZmllciwgb2J0YWluZWQgZnJvbSBhIGNhbGwgdG8KICogc3NoMl9jb25uZWN0LgogKiBAdGhyb3dzIFNzaDJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNzaDJfZGlzY29ubmVjdCgkc2Vzc2lvbik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzc2gyX2Rpc2Nvbm5lY3QoJHNlc3Npb24pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3NoMkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRXhlY3V0ZSBhIGNvbW1hbmQgYXQgdGhlIHJlbW90ZSBlbmQgYW5kIGFsbG9jYXRlIGEgY2hhbm5lbCBmb3IgaXQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc2Vzc2lvbiBBbiBTU0ggY29ubmVjdGlvbiBsaW5rIGlkZW50aWZpZXIsIG9idGFpbmVkIGZyb20gYSBjYWxsIHRvCiAqIHNzaDJfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkY29tbWFuZAogKiBAcGFyYW0gc3RyaW5nICRwdHkKICogQHBhcmFtIGFycmF5ICRlbnYgZW52IG1heSBiZSBwYXNzZWQgYXMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YKICogbmFtZS92YWx1ZSBwYWlycyB0byBzZXQgaW4gdGhlIHRhcmdldCBlbnZpcm9ubWVudC4KICogQHBhcmFtIGludCAkd2lkdGggV2lkdGggb2YgdGhlIHZpcnR1YWwgdGVybWluYWwuCiAqIEBwYXJhbSBpbnQgJGhlaWdodCBIZWlnaHQgb2YgdGhlIHZpcnR1YWwgdGVybWluYWwuCiAqIEBwYXJhbSBpbnQgJHdpZHRoX2hlaWdodF90eXBlIHdpZHRoX2hlaWdodF90eXBlIHNob3VsZCBiZSBvbmUgb2YKICogU1NIMl9URVJNX1VOSVRfQ0hBUlMgb3IKICogU1NIMl9URVJNX1VOSVRfUElYRUxTLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBzdHJlYW0gb24gc3VjY2Vzcy4KICogQHRocm93cyBTc2gyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzc2gyX2V4ZWMoJHNlc3Npb24sIHN0cmluZyAkY29tbWFuZCwgc3RyaW5nICRwdHkgPSBudWxsLCBhcnJheSAkZW52ID0gbnVsbCwgaW50ICR3aWR0aCA9IDgwLCBpbnQgJGhlaWdodCA9IDI1LCBpbnQgJHdpZHRoX2hlaWdodF90eXBlID0gU1NIMl9URVJNX1VOSVRfQ0hBUlMpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkd2lkdGhfaGVpZ2h0X3R5cGUgIT09IFNTSDJfVEVSTV9VTklUX0NIQVJTKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzc2gyX2V4ZWMoJHNlc3Npb24sICRjb21tYW5kLCAkcHR5LCAkZW52LCAkd2lkdGgsICRoZWlnaHQsICR3aWR0aF9oZWlnaHRfdHlwZSk7CiAgICB9IGVsc2VpZiAoJGhlaWdodCAhPT0gMjUpIHsKICAgICAgICAkcmVzdWx0ID0gXHNzaDJfZXhlYygkc2Vzc2lvbiwgJGNvbW1hbmQsICRwdHksICRlbnYsICR3aWR0aCwgJGhlaWdodCk7CiAgICB9IGVsc2VpZiAoJHdpZHRoICE9PSA4MCkgewogICAgICAgICRyZXN1bHQgPSBcc3NoMl9leGVjKCRzZXNzaW9uLCAkY29tbWFuZCwgJHB0eSwgJGVudiwgJHdpZHRoKTsKICAgIH0gZWxzZWlmICgkZW52ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzc2gyX2V4ZWMoJHNlc3Npb24sICRjb21tYW5kLCAkcHR5LCAkZW52KTsKICAgIH0gZWxzZWlmICgkcHR5ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzc2gyX2V4ZWMoJHNlc3Npb24sICRjb21tYW5kLCAkcHR5KTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxzc2gyX2V4ZWMoJHNlc3Npb24sICRjb21tYW5kKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNzaDJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICoKICoKICogQHBhcmFtIHJlc291cmNlICRwa2V5IFB1YmxpY2tleSBTdWJzeXN0ZW0gcmVzb3VyY2UgY3JlYXRlZCBieSBzc2gyX3B1YmxpY2tleV9pbml0LgogKiBAcGFyYW0gc3RyaW5nICRhbGdvbmFtZSBQdWJsaWNrZXkgYWxnb3JpdGhtIChlLmcuKTogc3NoLWRzcywgc3NoLXJzYQogKiBAcGFyYW0gc3RyaW5nICRibG9iIFB1YmxpY2tleSBibG9iIGFzIHJhdyBiaW5hcnkgZGF0YQogKiBAcGFyYW0gYm9vbCAkb3ZlcndyaXRlIElmIHRoZSBzcGVjaWZpZWQga2V5IGFscmVhZHkgZXhpc3RzLCBzaG91bGQgaXQgYmUgb3ZlcndyaXR0ZW4/CiAqIEBwYXJhbSBhcnJheSAkYXR0cmlidXRlcyBBc3NvY2lhdGl2ZSBhcnJheSBvZiBhdHRyaWJ1dGVzIHRvIGFzc2lnbiB0byB0aGlzIHB1YmxpYyBrZXkuCiAqIFJlZmVyIHRvIGlldGYtc2Vjc2gtcHVibGlja2V5LXN1YnN5c3RlbSBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCBhdHRyaWJ1dGVzLgogKiBUbyBtYXJrIGFuIGF0dHJpYnV0ZSBhcyBtYW5kYXRvcnksIHByZWNlZGUgaXRzIG5hbWUgd2l0aCBhbiBhc3Rlcmlzay4KICogSWYgdGhlIHNlcnZlciBpcyB1bmFibGUgdG8gc3VwcG9ydCBhbiBhdHRyaWJ1dGUgbWFya2VkIG1hbmRhdG9yeSwKICogaXQgd2lsbCBhYm9ydCB0aGUgYWRkIHByb2Nlc3MuCiAqIEB0aHJvd3MgU3NoMkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3NoMl9wdWJsaWNrZXlfYWRkKCRwa2V5LCBzdHJpbmcgJGFsZ29uYW1lLCBzdHJpbmcgJGJsb2IsIGJvb2wgJG92ZXJ3cml0ZSA9IGZhbHNlLCBhcnJheSAkYXR0cmlidXRlcyA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkYXR0cmlidXRlcyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcc3NoMl9wdWJsaWNrZXlfYWRkKCRwa2V5LCAkYWxnb25hbWUsICRibG9iLCAkb3ZlcndyaXRlLCAkYXR0cmlidXRlcyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcc3NoMl9wdWJsaWNrZXlfYWRkKCRwa2V5LCAkYWxnb25hbWUsICRibG9iLCAkb3ZlcndyaXRlKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNzaDJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJlcXVlc3QgdGhlIFB1YmxpY2tleSBzdWJzeXN0ZW0gZnJvbSBhbiBhbHJlYWR5IGNvbm5lY3RlZCBTU0gyIHNlcnZlci4KICoKICogVGhlIHB1YmxpY2tleSBzdWJzeXN0ZW0gYWxsb3dzIGFuIGFscmVhZHkgY29ubmVjdGVkIGFuZCBhdXRoZW50aWNhdGVkCiAqIGNsaWVudCB0byBtYW5hZ2UgdGhlIGxpc3Qgb2YgYXV0aG9yaXplZCBwdWJsaWMga2V5cyBzdG9yZWQgb24gdGhlCiAqIHRhcmdldCBzZXJ2ZXIgaW4gYW4gaW1wbGVtZW50YXRpb24gYWdub3N0aWMgbWFubmVyLgogKiBJZiB0aGUgcmVtb3RlIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBwdWJsaWNrZXkgc3Vic3lzdGVtLAogKiB0aGUgc3NoMl9wdWJsaWNrZXlfaW5pdCBmdW5jdGlvbiB3aWxsIHJldHVybiBGQUxTRS4KICoKICogQHBhcmFtIHJlc291cmNlICRzZXNzaW9uCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhbiBTU0gyIFB1YmxpY2tleSBTdWJzeXN0ZW0gcmVzb3VyY2UgZm9yIHVzZQogKiB3aXRoIGFsbCBvdGhlciBzc2gyX3B1YmxpY2tleV8qKCkgbWV0aG9kcy4KICogQHRocm93cyBTc2gyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzc2gyX3B1YmxpY2tleV9pbml0KCRzZXNzaW9uKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNzaDJfcHVibGlja2V5X2luaXQoJHNlc3Npb24pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3NoMkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZW1vdmVzIGFuIGF1dGhvcml6ZWQgcHVibGlja2V5LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBrZXkgUHVibGlja2V5IFN1YnN5c3RlbSBSZXNvdXJjZQogKiBAcGFyYW0gc3RyaW5nICRhbGdvbmFtZSBQdWJsaWNrZXkgYWxnb3JpdGhtIChlLmcuKTogc3NoLWRzcywgc3NoLXJzYQogKiBAcGFyYW0gc3RyaW5nICRibG9iIFB1YmxpY2tleSBibG9iIGFzIHJhdyBiaW5hcnkgZGF0YQogKiBAdGhyb3dzIFNzaDJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNzaDJfcHVibGlja2V5X3JlbW92ZSgkcGtleSwgc3RyaW5nICRhbGdvbmFtZSwgc3RyaW5nICRibG9iKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNzaDJfcHVibGlja2V5X3JlbW92ZSgkcGtleSwgJGFsZ29uYW1lLCAkYmxvYik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTc2gyRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBDb3B5IGEgZmlsZSBmcm9tIHRoZSByZW1vdGUgc2VydmVyIHRvIHRoZSBsb2NhbCBmaWxlc3lzdGVtIHVzaW5nIHRoZSBTQ1AgcHJvdG9jb2wuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc2Vzc2lvbiBBbiBTU0ggY29ubmVjdGlvbiBsaW5rIGlkZW50aWZpZXIsIG9idGFpbmVkIGZyb20gYSBjYWxsIHRvCiAqIHNzaDJfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkcmVtb3RlX2ZpbGUgUGF0aCB0byB0aGUgcmVtb3RlIGZpbGUuCiAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsX2ZpbGUgUGF0aCB0byB0aGUgbG9jYWwgZmlsZS4KICogQHRocm93cyBTc2gyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzc2gyX3NjcF9yZWN2KCRzZXNzaW9uLCBzdHJpbmcgJHJlbW90ZV9maWxlLCBzdHJpbmcgJGxvY2FsX2ZpbGUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc3NoMl9zY3BfcmVjdigkc2Vzc2lvbiwgJHJlbW90ZV9maWxlLCAkbG9jYWxfZmlsZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTc2gyRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBDb3B5IGEgZmlsZSBmcm9tIHRoZSBsb2NhbCBmaWxlc3lzdGVtIHRvIHRoZSByZW1vdGUgc2VydmVyIHVzaW5nIHRoZSBTQ1AgcHJvdG9jb2wuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc2Vzc2lvbiBBbiBTU0ggY29ubmVjdGlvbiBsaW5rIGlkZW50aWZpZXIsIG9idGFpbmVkIGZyb20gYSBjYWxsIHRvCiAqIHNzaDJfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkbG9jYWxfZmlsZSBQYXRoIHRvIHRoZSBsb2NhbCBmaWxlLgogKiBAcGFyYW0gc3RyaW5nICRyZW1vdGVfZmlsZSBQYXRoIHRvIHRoZSByZW1vdGUgZmlsZS4KICogQHBhcmFtIGludCAkY3JlYXRlX21vZGUgVGhlIGZpbGUgd2lsbCBiZSBjcmVhdGVkIHdpdGggdGhlIG1vZGUgc3BlY2lmaWVkIGJ5CiAqIGNyZWF0ZV9tb2RlLgogKiBAdGhyb3dzIFNzaDJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNzaDJfc2NwX3NlbmQoJHNlc3Npb24sIHN0cmluZyAkbG9jYWxfZmlsZSwgc3RyaW5nICRyZW1vdGVfZmlsZSwgaW50ICRjcmVhdGVfbW9kZSA9IDA2NDQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc3NoMl9zY3Bfc2VuZCgkc2Vzc2lvbiwgJGxvY2FsX2ZpbGUsICRyZW1vdGVfZmlsZSwgJGNyZWF0ZV9tb2RlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNzaDJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEF0dGVtcHRzIHRvIGNoYW5nZSB0aGUgbW9kZSBvZiB0aGUgc3BlY2lmaWVkIGZpbGUgdG8gdGhhdCBnaXZlbiBpbgogKiBtb2RlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNmdHAgQW4gU1NIMiBTRlRQIHJlc291cmNlIG9wZW5lZCBieSBzc2gyX3NmdHAuCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFBhdGggdG8gdGhlIGZpbGUuCiAqIEBwYXJhbSBpbnQgJG1vZGUgUGVybWlzc2lvbnMgb24gdGhlIGZpbGUuIFNlZSB0aGUgY2htb2QgZm9yIG1vcmUgZGV0YWlscyBvbiB0aGlzIHBhcmFtZXRlci4KICogQHRocm93cyBTc2gyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzc2gyX3NmdHBfY2htb2QoJHNmdHAsIHN0cmluZyAkZmlsZW5hbWUsIGludCAkbW9kZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzc2gyX3NmdHBfY2htb2QoJHNmdHAsICRmaWxlbmFtZSwgJG1vZGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3NoMkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ3JlYXRlcyBhIGRpcmVjdG9yeSBvbiB0aGUgcmVtb3RlIGZpbGUgc2VydmVyIHdpdGggcGVybWlzc2lvbnMgc2V0IHRvCiAqIG1vZGUuCiAqCiAqIFRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0byB1c2luZyBta2RpciB3aXRoIHRoZQogKiBzc2gyLnNmdHA6Ly8gd3JhcHBlci4KICoKICogQHBhcmFtIHJlc291cmNlICRzZnRwIEFuIFNTSDIgU0ZUUCByZXNvdXJjZSBvcGVuZWQgYnkgc3NoMl9zZnRwLgogKiBAcGFyYW0gc3RyaW5nICRkaXJuYW1lIFBhdGggb2YgdGhlIG5ldyBkaXJlY3RvcnkuCiAqIEBwYXJhbSBpbnQgJG1vZGUgUGVybWlzc2lvbnMgb24gdGhlIG5ldyBkaXJlY3RvcnkuCiAqIEBwYXJhbSBib29sICRyZWN1cnNpdmUgSWYgcmVjdXJzaXZlIGlzIFRSVUUgYW55IHBhcmVudCBkaXJlY3RvcmllcwogKiByZXF1aXJlZCBmb3IgZGlybmFtZSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBhcyB3ZWxsLgogKiBAdGhyb3dzIFNzaDJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNzaDJfc2Z0cF9ta2Rpcigkc2Z0cCwgc3RyaW5nICRkaXJuYW1lLCBpbnQgJG1vZGUgPSAwNzc3LCBib29sICRyZWN1cnNpdmUgPSBmYWxzZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzc2gyX3NmdHBfbWtkaXIoJHNmdHAsICRkaXJuYW1lLCAkbW9kZSwgJHJlY3Vyc2l2ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTc2gyRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBSZW5hbWVzIGEgZmlsZSBvbiB0aGUgcmVtb3RlIGZpbGVzeXN0ZW0uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc2Z0cCBBbiBTU0gyIFNGVFAgcmVzb3VyY2Ugb3BlbmVkIGJ5IHNzaDJfc2Z0cC4KICogQHBhcmFtIHN0cmluZyAkZnJvbSBUaGUgY3VycmVudCBmaWxlIHRoYXQgaXMgYmVpbmcgcmVuYW1lZC4KICogQHBhcmFtIHN0cmluZyAkdG8gVGhlIG5ldyBmaWxlIG5hbWUgdGhhdCByZXBsYWNlcyBmcm9tLgogKiBAdGhyb3dzIFNzaDJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNzaDJfc2Z0cF9yZW5hbWUoJHNmdHAsIHN0cmluZyAkZnJvbSwgc3RyaW5nICR0byk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzc2gyX3NmdHBfcmVuYW1lKCRzZnRwLCAkZnJvbSwgJHRvKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNzaDJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJlbW92ZXMgYSBkaXJlY3RvcnkgZnJvbSB0aGUgcmVtb3RlIGZpbGUgc2VydmVyLgogKgogKiBUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gdXNpbmcgcm1kaXIgd2l0aCB0aGUKICogc3NoMi5zZnRwOi8vIHdyYXBwZXIuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc2Z0cCBBbiBTU0gyIFNGVFAgcmVzb3VyY2Ugb3BlbmVkIGJ5IHNzaDJfc2Z0cC4KICogQHBhcmFtIHN0cmluZyAkZGlybmFtZQogKiBAdGhyb3dzIFNzaDJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNzaDJfc2Z0cF9ybWRpcigkc2Z0cCwgc3RyaW5nICRkaXJuYW1lKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNzaDJfc2Z0cF9ybWRpcigkc2Z0cCwgJGRpcm5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3NoMkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ3JlYXRlcyBhIHN5bWJvbGljIGxpbmsgbmFtZWQgbGluayBvbiB0aGUgcmVtb3RlCiAqIGZpbGVzeXN0ZW0gcG9pbnRpbmcgdG8gdGFyZ2V0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNmdHAgQW4gU1NIMiBTRlRQIHJlc291cmNlIG9wZW5lZCBieSBzc2gyX3NmdHAuCiAqIEBwYXJhbSBzdHJpbmcgJHRhcmdldCBUYXJnZXQgb2YgdGhlIHN5bWJvbGljIGxpbmsuCiAqIEBwYXJhbSBzdHJpbmcgJGxpbmsKICogQHRocm93cyBTc2gyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzc2gyX3NmdHBfc3ltbGluaygkc2Z0cCwgc3RyaW5nICR0YXJnZXQsIHN0cmluZyAkbGluayk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzc2gyX3NmdHBfc3ltbGluaygkc2Z0cCwgJHRhcmdldCwgJGxpbmspOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3NoMkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRGVsZXRlcyBhIGZpbGUgb24gdGhlIHJlbW90ZSBmaWxlc3lzdGVtLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNmdHAgQW4gU1NIMiBTRlRQIHJlc291cmNlIG9wZW5lZCBieSBzc2gyX3NmdHAuCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lCiAqIEB0aHJvd3MgU3NoMkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3NoMl9zZnRwX3VubGluaygkc2Z0cCwgc3RyaW5nICRmaWxlbmFtZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzc2gyX3NmdHBfdW5saW5rKCRzZnRwLCAkZmlsZW5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3NoMkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUmVxdWVzdCB0aGUgU0ZUUCBzdWJzeXN0ZW0gZnJvbSBhbiBhbHJlYWR5IGNvbm5lY3RlZCBTU0gyIHNlcnZlci4KICoKICogQHBhcmFtIHJlc291cmNlICRzZXNzaW9uIEFuIFNTSCBjb25uZWN0aW9uIGxpbmsgaWRlbnRpZmllciwgb2J0YWluZWQgZnJvbSBhIGNhbGwgdG8KICogc3NoMl9jb25uZWN0LgogKiBAcmV0dXJuIHJlc291cmNlIFRoaXMgbWV0aG9kIHJldHVybnMgYW4gU1NIMiBTRlRQIHJlc291cmNlIGZvciB1c2Ugd2l0aAogKiBhbGwgb3RoZXIgc3NoMl9zZnRwXyooKSBtZXRob2RzIGFuZCB0aGUKICogc3NoMi5zZnRwOi8vIGZvcGVuIHdyYXBwZXIuCiAqIEB0aHJvd3MgU3NoMkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3NoMl9zZnRwKCRzZXNzaW9uKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNzaDJfc2Z0cCgkc2Vzc2lvbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTc2gyRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/stream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTdHJlYW1FeGNlcHRpb247CgovKioKICogU2V0cyBwYXJhbWV0ZXJzIG9uIHRoZSBzcGVjaWZpZWQgY29udGV4dC4KICoKICogQHBhcmFtIHJlc291cmNlICRzdHJlYW1fb3JfY29udGV4dCBUaGUgc3RyZWFtIG9yIGNvbnRleHQgdG8gYXBwbHkgdGhlIHBhcmFtZXRlcnMgdG9vLgogKiBAcGFyYW0gYXJyYXkgJHBhcmFtcyBBbiBhcnJheSBvZiBwYXJhbWV0ZXJzIHRvIHNldC4KICoKICogcGFyYW1zIHNob3VsZCBiZSBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiB0aGUgc3RydWN0dXJlOgogKiAkcGFyYW1zWydwYXJhbW5hbWUnXSA9ICJwYXJhbXZhbHVlIjsuCiAqIEB0aHJvd3MgU3RyZWFtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJlYW1fY29udGV4dF9zZXRfcGFyYW1zKCRzdHJlYW1fb3JfY29udGV4dCwgYXJyYXkgJHBhcmFtcyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzdHJlYW1fY29udGV4dF9zZXRfcGFyYW1zKCRzdHJlYW1fb3JfY29udGV4dCwgJHBhcmFtcyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTdHJlYW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIE1ha2VzIGEgY29weSBvZiB1cCB0byBtYXhsZW5ndGggYnl0ZXMKICogb2YgZGF0YSBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uIChvciBmcm9tIHRoZQogKiBvZmZzZXQgcG9zaXRpb24sIGlmIHNwZWNpZmllZCkgaW4KICogc291cmNlIHRvIGRlc3QuIElmCiAqIG1heGxlbmd0aCBpcyBub3Qgc3BlY2lmaWVkLCBhbGwgcmVtYWluaW5nIGNvbnRlbnQgaW4KICogc291cmNlIHdpbGwgYmUgY29waWVkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNvdXJjZSBUaGUgc291cmNlIHN0cmVhbQogKiBAcGFyYW0gcmVzb3VyY2UgJGRlc3QgVGhlIGRlc3RpbmF0aW9uIHN0cmVhbQogKiBAcGFyYW0gaW50ICRtYXhsZW5ndGggTWF4aW11bSBieXRlcyB0byBjb3B5CiAqIEBwYXJhbSBpbnQgJG9mZnNldCBUaGUgb2Zmc2V0IHdoZXJlIHRvIHN0YXJ0IHRvIGNvcHkgZGF0YQogKiBAcmV0dXJuIGludCBSZXR1cm5zIHRoZSB0b3RhbCBjb3VudCBvZiBieXRlcyBjb3BpZWQuCiAqIEB0aHJvd3MgU3RyZWFtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJlYW1fY29weV90b19zdHJlYW0oJHNvdXJjZSwgJGRlc3QsIGludCAkbWF4bGVuZ3RoID0gLTEsIGludCAkb2Zmc2V0ID0gMCk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHN0cmVhbV9jb3B5X3RvX3N0cmVhbSgkc291cmNlLCAkZGVzdCwgJG1heGxlbmd0aCwgJG9mZnNldCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTdHJlYW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQWRkcyBmaWx0ZXJuYW1lIHRvIHRoZSBsaXN0IG9mIGZpbHRlcnMKICogYXR0YWNoZWQgdG8gc3RyZWFtLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0cmVhbSBUaGUgdGFyZ2V0IHN0cmVhbS4KICogQHBhcmFtIHN0cmluZyAkZmlsdGVybmFtZSBUaGUgZmlsdGVyIG5hbWUuCiAqIEBwYXJhbSBpbnQgJHJlYWRfd3JpdGUgQnkgZGVmYXVsdCwgc3RyZWFtX2ZpbHRlcl9hcHBlbmQgd2lsbAogKiBhdHRhY2ggdGhlIGZpbHRlciB0byB0aGUgcmVhZCBmaWx0ZXIgY2hhaW4KICogaWYgdGhlIGZpbGUgd2FzIG9wZW5lZCBmb3IgcmVhZGluZyAoaS5lLiBGaWxlIE1vZGU6CiAqIHIsIGFuZC9vciArKS4gIFRoZSBmaWx0ZXIKICogd2lsbCBhbHNvIGJlIGF0dGFjaGVkIHRvIHRoZSB3cml0ZSBmaWx0ZXIgY2hhaW4KICogaWYgdGhlIGZpbGUgd2FzIG9wZW5lZCBmb3Igd3JpdGluZyAoaS5lLiBGaWxlIE1vZGU6CiAqIHcsIGEsIGFuZC9vciArKS4KICogU1RSRUFNX0ZJTFRFUl9SRUFELAogKiBTVFJFQU1fRklMVEVSX1dSSVRFLCBhbmQvb3IKICogU1RSRUFNX0ZJTFRFUl9BTEwgY2FuIGFsc28gYmUgcGFzc2VkIHRvIHRoZQogKiByZWFkX3dyaXRlIHBhcmFtZXRlciB0byBvdmVycmlkZSB0aGlzIGJlaGF2aW9yLgogKiBAcGFyYW0gbWl4ZWQgJHBhcmFtcyBUaGlzIGZpbHRlciB3aWxsIGJlIGFkZGVkIHdpdGggdGhlIHNwZWNpZmllZAogKiBwYXJhbXMgdG8gdGhlIGVuZCBvZgogKiB0aGUgbGlzdCBhbmQgd2lsbCB0aGVyZWZvcmUgYmUgY2FsbGVkIGxhc3QgZHVyaW5nIHN0cmVhbSBvcGVyYXRpb25zLgogKiBUbyBhZGQgYSBmaWx0ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdCwgdXNlCiAqIHN0cmVhbV9maWx0ZXJfcHJlcGVuZC4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgcmVzb3VyY2Ugb24gc3VjY2Vzcy4gVGhlIHJlc291cmNlIGNhbiBiZQogKiB1c2VkIHRvIHJlZmVyIHRvIHRoaXMgZmlsdGVyIGluc3RhbmNlIGR1cmluZyBhIGNhbGwgdG8KICogc3RyZWFtX2ZpbHRlcl9yZW1vdmUuCiAqCiAqIEZBTFNFIGlzIHJldHVybmVkIGlmIHN0cmVhbSBpcyBub3QgYSByZXNvdXJjZSBvcgogKiBpZiBmaWx0ZXJuYW1lIGNhbm5vdCBiZSBsb2NhdGVkLgogKiBAdGhyb3dzIFN0cmVhbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3RyZWFtX2ZpbHRlcl9hcHBlbmQoJHN0cmVhbSwgc3RyaW5nICRmaWx0ZXJuYW1lLCBpbnQgJHJlYWRfd3JpdGUgPSBudWxsLCAkcGFyYW1zID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRwYXJhbXMgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHN0cmVhbV9maWx0ZXJfYXBwZW5kKCRzdHJlYW0sICRmaWx0ZXJuYW1lLCAkcmVhZF93cml0ZSwgJHBhcmFtcyk7CiAgICB9IGVsc2VpZiAoJHJlYWRfd3JpdGUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHN0cmVhbV9maWx0ZXJfYXBwZW5kKCRzdHJlYW0sICRmaWx0ZXJuYW1lLCAkcmVhZF93cml0ZSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcc3RyZWFtX2ZpbHRlcl9hcHBlbmQoJHN0cmVhbSwgJGZpbHRlcm5hbWUpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3RyZWFtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEFkZHMgZmlsdGVybmFtZSB0byB0aGUgbGlzdCBvZiBmaWx0ZXJzCiAqIGF0dGFjaGVkIHRvIHN0cmVhbS4KICoKICogQHBhcmFtIHJlc291cmNlICRzdHJlYW0gVGhlIHRhcmdldCBzdHJlYW0uCiAqIEBwYXJhbSBzdHJpbmcgJGZpbHRlcm5hbWUgVGhlIGZpbHRlciBuYW1lLgogKiBAcGFyYW0gaW50ICRyZWFkX3dyaXRlIEJ5IGRlZmF1bHQsIHN0cmVhbV9maWx0ZXJfcHJlcGVuZCB3aWxsCiAqIGF0dGFjaCB0aGUgZmlsdGVyIHRvIHRoZSByZWFkIGZpbHRlciBjaGFpbgogKiBpZiB0aGUgZmlsZSB3YXMgb3BlbmVkIGZvciByZWFkaW5nIChpLmUuIEZpbGUgTW9kZToKICogciwgYW5kL29yICspLiAgVGhlIGZpbHRlcgogKiB3aWxsIGFsc28gYmUgYXR0YWNoZWQgdG8gdGhlIHdyaXRlIGZpbHRlciBjaGFpbgogKiBpZiB0aGUgZmlsZSB3YXMgb3BlbmVkIGZvciB3cml0aW5nIChpLmUuIEZpbGUgTW9kZToKICogdywgYSwgYW5kL29yICspLgogKiBTVFJFQU1fRklMVEVSX1JFQUQsCiAqIFNUUkVBTV9GSUxURVJfV1JJVEUsIGFuZC9vcgogKiBTVFJFQU1fRklMVEVSX0FMTCBjYW4gYWxzbyBiZSBwYXNzZWQgdG8gdGhlCiAqIHJlYWRfd3JpdGUgcGFyYW1ldGVyIHRvIG92ZXJyaWRlIHRoaXMgYmVoYXZpb3IuCiAqIFNlZSBzdHJlYW1fZmlsdGVyX2FwcGVuZCBmb3IgYW4gZXhhbXBsZSBvZgogKiB1c2luZyB0aGlzIHBhcmFtZXRlci4KICogQHBhcmFtIG1peGVkICRwYXJhbXMgVGhpcyBmaWx0ZXIgd2lsbCBiZSBhZGRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgcGFyYW1zCiAqIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QgYW5kIHdpbGwgdGhlcmVmb3JlIGJlCiAqIGNhbGxlZCBmaXJzdCBkdXJpbmcgc3RyZWFtIG9wZXJhdGlvbnMuICBUbyBhZGQgYSBmaWx0ZXIgdG8gdGhlIGVuZCBvZiB0aGUKICogbGlzdCwgdXNlIHN0cmVhbV9maWx0ZXJfYXBwZW5kLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSByZXNvdXJjZSBvbiBzdWNjZXNzLiBUaGUgcmVzb3VyY2UgY2FuIGJlCiAqIHVzZWQgdG8gcmVmZXIgdG8gdGhpcyBmaWx0ZXIgaW5zdGFuY2UgZHVyaW5nIGEgY2FsbCB0bwogKiBzdHJlYW1fZmlsdGVyX3JlbW92ZS4KICoKICogRkFMU0UgaXMgcmV0dXJuZWQgaWYgc3RyZWFtIGlzIG5vdCBhIHJlc291cmNlIG9yCiAqIGlmIGZpbHRlcm5hbWUgY2Fubm90IGJlIGxvY2F0ZWQuCiAqIEB0aHJvd3MgU3RyZWFtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJlYW1fZmlsdGVyX3ByZXBlbmQoJHN0cmVhbSwgc3RyaW5nICRmaWx0ZXJuYW1lLCBpbnQgJHJlYWRfd3JpdGUgPSBudWxsLCAkcGFyYW1zID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRwYXJhbXMgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHN0cmVhbV9maWx0ZXJfcHJlcGVuZCgkc3RyZWFtLCAkZmlsdGVybmFtZSwgJHJlYWRfd3JpdGUsICRwYXJhbXMpOwogICAgfSBlbHNlaWYgKCRyZWFkX3dyaXRlICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzdHJlYW1fZmlsdGVyX3ByZXBlbmQoJHN0cmVhbSwgJGZpbHRlcm5hbWUsICRyZWFkX3dyaXRlKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxzdHJlYW1fZmlsdGVyX3ByZXBlbmQoJHN0cmVhbSwgJGZpbHRlcm5hbWUpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3RyZWFtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHN0cmVhbV9maWx0ZXJfcmVnaXN0ZXIgYWxsb3dzIHlvdSB0byBpbXBsZW1lbnQKICogeW91ciBvd24gZmlsdGVyIG9uIGFueSByZWdpc3RlcmVkIHN0cmVhbSB1c2VkIHdpdGggYWxsIHRoZSBvdGhlcgogKiBmaWxlc3lzdGVtIGZ1bmN0aW9ucyAoc3VjaCBhcyBmb3BlbiwKICogZnJlYWQgZXRjLikuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbHRlcm5hbWUgVGhlIGZpbHRlciBuYW1lIHRvIGJlIHJlZ2lzdGVyZWQuCiAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzbmFtZSBUbyBpbXBsZW1lbnQgYSBmaWx0ZXIsIHlvdSBuZWVkIHRvIGRlZmluZSBhIGNsYXNzIGFzIGFuIGV4dGVuc2lvbiBvZgogKiBwaHBfdXNlcl9maWx0ZXIgd2l0aCBhIG51bWJlciBvZiBtZW1iZXIKICogZnVuY3Rpb25zLiBXaGVuIHBlcmZvcm1pbmcgcmVhZC93cml0ZSBvcGVyYXRpb25zIG9uIHRoZSBzdHJlYW0KICogdG8gd2hpY2ggeW91ciBmaWx0ZXIgaXMgYXR0YWNoZWQsIFBIUCB3aWxsIHBhc3MgdGhlIGRhdGEgdGhyb3VnaCB5b3VyCiAqIGZpbHRlciAoYW5kIGFueSBvdGhlciBmaWx0ZXJzIGF0dGFjaGVkIHRvIHRoYXQgc3RyZWFtKSBzbyB0aGF0IHRoZQogKiBkYXRhIG1heSBiZSBtb2RpZmllZCBhcyBkZXNpcmVkLiBZb3UgbXVzdCBpbXBsZW1lbnQgdGhlIG1ldGhvZHMKICogZXhhY3RseSBhcyBkZXNjcmliZWQgaW4gcGhwX3VzZXJfZmlsdGVyIC0gZG9pbmcKICogb3RoZXJ3aXNlIHdpbGwgbGVhZCB0byB1bmRlZmluZWQgYmVoYXZpb3VyLgogKiBAdGhyb3dzIFN0cmVhbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3RyZWFtX2ZpbHRlcl9yZWdpc3RlcihzdHJpbmcgJGZpbHRlcm5hbWUsIHN0cmluZyAkY2xhc3NuYW1lKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHN0cmVhbV9maWx0ZXJfcmVnaXN0ZXIoJGZpbHRlcm5hbWUsICRjbGFzc25hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3RyZWFtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBSZW1vdmVzIGEgc3RyZWFtIGZpbHRlciBwcmV2aW91c2x5IGFkZGVkIHRvIGEgc3RyZWFtIHdpdGgKICogc3RyZWFtX2ZpbHRlcl9wcmVwZW5kIG9yCiAqIHN0cmVhbV9maWx0ZXJfYXBwZW5kLiAgQW55IGRhdGEgcmVtYWluaW5nIGluIHRoZQogKiBmaWx0ZXIncyBpbnRlcm5hbCBidWZmZXIgd2lsbCBiZSBmbHVzaGVkIHRocm91Z2ggdG8gdGhlIG5leHQgZmlsdGVyIGJlZm9yZQogKiByZW1vdmluZyBpdC4KICoKICogQHBhcmFtIHJlc291cmNlICRzdHJlYW1fZmlsdGVyIFRoZSBzdHJlYW0gZmlsdGVyIHRvIGJlIHJlbW92ZWQuCiAqIEB0aHJvd3MgU3RyZWFtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJlYW1fZmlsdGVyX3JlbW92ZSgkc3RyZWFtX2ZpbHRlcik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzdHJlYW1fZmlsdGVyX3JlbW92ZSgkc3RyZWFtX2ZpbHRlcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTdHJlYW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIElkZW50aWNhbCB0byBmaWxlX2dldF9jb250ZW50cywgZXhjZXB0IHRoYXQKICogc3RyZWFtX2dldF9jb250ZW50cyBvcGVyYXRlcyBvbiBhbiBhbHJlYWR5IG9wZW4KICogc3RyZWFtIHJlc291cmNlIGFuZCByZXR1cm5zIHRoZSByZW1haW5pbmcgY29udGVudHMgaW4gYSBzdHJpbmcsIHVwIHRvCiAqIG1heGxlbmd0aCBieXRlcyBhbmQgc3RhcnRpbmcgYXQgdGhlIHNwZWNpZmllZAogKiBvZmZzZXQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaGFuZGxlIEEgc3RyZWFtIHJlc291cmNlIChlLmcuIHJldHVybmVkIGZyb20gZm9wZW4pCiAqIEBwYXJhbSBpbnQgJG1heGxlbmd0aCBUaGUgbWF4aW11bSBieXRlcyB0byByZWFkLiBEZWZhdWx0cyB0byAtMSAocmVhZCBhbGwgdGhlIHJlbWFpbmluZwogKiBidWZmZXIpLgogKiBAcGFyYW0gaW50ICRvZmZzZXQgU2VlayB0byB0aGUgc3BlY2lmaWVkIG9mZnNldCBiZWZvcmUgcmVhZGluZy4gSWYgdGhpcyBudW1iZXIgaXMgbmVnYXRpdmUsCiAqIG5vIHNlZWtpbmcgd2lsbCBvY2N1ciBhbmQgcmVhZGluZyB3aWxsIHN0YXJ0IGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24uCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgYSBzdHJpbmcuCiAqIEB0aHJvd3MgU3RyZWFtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJlYW1fZ2V0X2NvbnRlbnRzKCRoYW5kbGUsIGludCAkbWF4bGVuZ3RoID0gLTEsIGludCAkb2Zmc2V0ID0gLTEpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzdHJlYW1fZ2V0X2NvbnRlbnRzKCRoYW5kbGUsICRtYXhsZW5ndGgsICRvZmZzZXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3RyZWFtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIERldGVybWluZXMgaWYgc3RyZWFtIHN0cmVhbSByZWZlcnMgdG8gYSB2YWxpZCB0ZXJtaW5hbCB0eXBlIGRldmljZS4KICogVGhpcyBpcyBhIG1vcmUgcG9ydGFibGUgdmVyc2lvbiBvZiBwb3NpeF9pc2F0dHksIHNpbmNlIGl0IHdvcmtzIG9uIFdpbmRvd3Mgc3lzdGVtcyB0b28uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RyZWFtCiAqIEB0aHJvd3MgU3RyZWFtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJlYW1faXNhdHR5KCRzdHJlYW0pOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc3RyZWFtX2lzYXR0eSgkc3RyZWFtKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFN0cmVhbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUmVzb2x2ZSBmaWxlbmFtZSBhZ2FpbnN0IHRoZSBpbmNsdWRlIHBhdGggYWNjb3JkaW5nIHRvIHRoZSBzYW1lIHJ1bGVzIGFzIGZvcGVuL2luY2x1ZGUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFRoZSBmaWxlbmFtZSB0byByZXNvbHZlLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHJlc29sdmVkIGFic29sdXRlIGZpbGVuYW1lLgogKiBAdGhyb3dzIFN0cmVhbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3RyZWFtX3Jlc29sdmVfaW5jbHVkZV9wYXRoKHN0cmluZyAkZmlsZW5hbWUpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzdHJlYW1fcmVzb2x2ZV9pbmNsdWRlX3BhdGgoJGZpbGVuYW1lKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFN0cmVhbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBTZXRzIGJsb2NraW5nIG9yIG5vbi1ibG9ja2luZyBtb2RlIG9uIGEgc3RyZWFtLgogKgogKiBUaGlzIGZ1bmN0aW9uIHdvcmtzIGZvciBhbnkgc3RyZWFtIHRoYXQgc3VwcG9ydHMgbm9uLWJsb2NraW5nIG1vZGUKICogKGN1cnJlbnRseSwgcmVndWxhciBmaWxlcyBhbmQgc29ja2V0IHN0cmVhbXMpLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0cmVhbSBUaGUgc3RyZWFtLgogKiBAcGFyYW0gYm9vbCAkbW9kZSBJZiBtb2RlIGlzIEZBTFNFLCB0aGUgZ2l2ZW4gc3RyZWFtCiAqIHdpbGwgYmUgc3dpdGNoZWQgdG8gbm9uLWJsb2NraW5nIG1vZGUsIGFuZCBpZiBUUlVFLCBpdAogKiB3aWxsIGJlIHN3aXRjaGVkIHRvIGJsb2NraW5nIG1vZGUuICBUaGlzIGFmZmVjdHMgY2FsbHMgbGlrZQogKiBmZ2V0cyBhbmQgZnJlYWQKICogdGhhdCByZWFkIGZyb20gdGhlIHN0cmVhbS4gIEluIG5vbi1ibG9ja2luZyBtb2RlIGFuCiAqIGZnZXRzIGNhbGwgd2lsbCBhbHdheXMgcmV0dXJuIHJpZ2h0IGF3YXkKICogd2hpbGUgaW4gYmxvY2tpbmcgbW9kZSBpdCB3aWxsIHdhaXQgZm9yIGRhdGEgdG8gYmVjb21lIGF2YWlsYWJsZQogKiBvbiB0aGUgc3RyZWFtLgogKiBAdGhyb3dzIFN0cmVhbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3RyZWFtX3NldF9ibG9ja2luZygkc3RyZWFtLCBib29sICRtb2RlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHN0cmVhbV9zZXRfYmxvY2tpbmcoJHN0cmVhbSwgJG1vZGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3RyZWFtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIHRoZSB0aW1lb3V0IHZhbHVlIG9uIHN0cmVhbSwKICogZXhwcmVzc2VkIGluIHRoZSBzdW0gb2Ygc2Vjb25kcyBhbmQKICogbWljcm9zZWNvbmRzLgogKgogKiBXaGVuIHRoZSBzdHJlYW0gdGltZXMgb3V0LCB0aGUgJ3RpbWVkX291dCcga2V5IG9mIHRoZSBhcnJheSByZXR1cm5lZCBieQogKiBzdHJlYW1fZ2V0X21ldGFfZGF0YSBpcyBzZXQgdG8gVFJVRSwgYWx0aG91Z2ggbm8KICogZXJyb3Ivd2FybmluZyBpcyBnZW5lcmF0ZWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RyZWFtIFRoZSB0YXJnZXQgc3RyZWFtLgogKiBAcGFyYW0gaW50ICRzZWNvbmRzIFRoZSBzZWNvbmRzIHBhcnQgb2YgdGhlIHRpbWVvdXQgdG8gYmUgc2V0LgogKiBAcGFyYW0gaW50ICRtaWNyb3NlY29uZHMgVGhlIG1pY3Jvc2Vjb25kcyBwYXJ0IG9mIHRoZSB0aW1lb3V0IHRvIGJlIHNldC4KICogQHRocm93cyBTdHJlYW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHN0cmVhbV9zZXRfdGltZW91dCgkc3RyZWFtLCBpbnQgJHNlY29uZHMsIGludCAkbWljcm9zZWNvbmRzID0gMCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzdHJlYW1fc2V0X3RpbWVvdXQoJHN0cmVhbSwgJHNlY29uZHMsICRtaWNyb3NlY29uZHMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3RyZWFtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBBY2NlcHQgYSBjb25uZWN0aW9uIG9uIGEgc29ja2V0IHByZXZpb3VzbHkgY3JlYXRlZCBieQogKiBzdHJlYW1fc29ja2V0X3NlcnZlci4KICoKICogQHBhcmFtIHJlc291cmNlICRzZXJ2ZXJfc29ja2V0IFRoZSBzZXJ2ZXIgc29ja2V0IHRvIGFjY2VwdCBhIGNvbm5lY3Rpb24gZnJvbS4KICogQHBhcmFtIGZsb2F0ICR0aW1lb3V0IE92ZXJyaWRlIHRoZSBkZWZhdWx0IHNvY2tldCBhY2NlcHQgdGltZW91dC4gVGltZSBzaG91bGQgYmUgZ2l2ZW4gaW4KICogc2Vjb25kcy4KICogQHBhcmFtIHN0cmluZ3xudWxsICRwZWVybmFtZSBXaWxsIGJlIHNldCB0byB0aGUgbmFtZSAoYWRkcmVzcykgb2YgdGhlIGNsaWVudCB3aGljaCBjb25uZWN0ZWQsIGlmCiAqIGluY2x1ZGVkIGFuZCBhdmFpbGFibGUgZnJvbSB0aGUgc2VsZWN0ZWQgdHJhbnNwb3J0LgogKgogKiBDYW4gYWxzbyBiZSBkZXRlcm1pbmVkIGxhdGVyIHVzaW5nCiAqIHN0cmVhbV9zb2NrZXRfZ2V0X25hbWUuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhIHN0cmVhbSB0byB0aGUgYWNjZXB0ZWQgc29ja2V0IGNvbm5lY3Rpb24uCiAqIEB0aHJvd3MgU3RyZWFtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJlYW1fc29ja2V0X2FjY2VwdCgkc2VydmVyX3NvY2tldCwgZmxvYXQgJHRpbWVvdXQgPSBudWxsLCA/c3RyaW5nICYkcGVlcm5hbWUgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHBlZXJuYW1lICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzdHJlYW1fc29ja2V0X2FjY2VwdCgkc2VydmVyX3NvY2tldCwgJHRpbWVvdXQsICRwZWVybmFtZSk7CiAgICB9IGVsc2VpZiAoJHRpbWVvdXQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHN0cmVhbV9zb2NrZXRfYWNjZXB0KCRzZXJ2ZXJfc29ja2V0LCAkdGltZW91dCk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcc3RyZWFtX3NvY2tldF9hY2NlcHQoJHNlcnZlcl9zb2NrZXQpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3RyZWFtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEluaXRpYXRlcyBhIHN0cmVhbSBvciBkYXRhZ3JhbSBjb25uZWN0aW9uIHRvIHRoZSBkZXN0aW5hdGlvbiBzcGVjaWZpZWQKICogYnkgcmVtb3RlX3NvY2tldC4gIFRoZSB0eXBlIG9mIHNvY2tldCBjcmVhdGVkCiAqIGlzIGRldGVybWluZWQgYnkgdGhlIHRyYW5zcG9ydCBzcGVjaWZpZWQgdXNpbmcgc3RhbmRhcmQgVVJMIGZvcm1hdHRpbmc6CiAqIHRyYW5zcG9ydDovL3RhcmdldC4gIEZvciBJbnRlcm5ldCBEb21haW4gc29ja2V0cwogKiAoQUZfSU5FVCkgc3VjaCBhcyBUQ1AgYW5kIFVEUCwgdGhlIHRhcmdldCBwb3J0aW9uCiAqIG9mIHRoZSByZW1vdGVfc29ja2V0IHBhcmFtZXRlciBzaG91bGQgY29uc2lzdCBvZgogKiBhIGhvc3RuYW1lIG9yIElQIGFkZHJlc3MgZm9sbG93ZWQgYnkgYSBjb2xvbiBhbmQgYSBwb3J0IG51bWJlci4gIEZvciBVbml4CiAqIGRvbWFpbiBzb2NrZXRzLCB0aGUgdGFyZ2V0IHBvcnRpb24gc2hvdWxkIHBvaW50CiAqIHRvIHRoZSBzb2NrZXQgZmlsZSBvbiB0aGUgZmlsZXN5c3RlbS4KICoKICogQHBhcmFtIHN0cmluZyAkcmVtb3RlX3NvY2tldCBBZGRyZXNzIHRvIHRoZSBzb2NrZXQgdG8gY29ubmVjdCB0by4KICogQHBhcmFtIGludCAkZXJybm8gV2lsbCBiZSBzZXQgdG8gdGhlIHN5c3RlbSBsZXZlbCBlcnJvciBudW1iZXIgaWYgY29ubmVjdGlvbiBmYWlscy4KICogQHBhcmFtIHN0cmluZyAkZXJyc3RyIFdpbGwgYmUgc2V0IHRvIHRoZSBzeXN0ZW0gbGV2ZWwgZXJyb3IgbWVzc2FnZSBpZiB0aGUgY29ubmVjdGlvbiBmYWlscy4KICogQHBhcmFtIGZsb2F0ICR0aW1lb3V0IE51bWJlciBvZiBzZWNvbmRzIHVudGlsIHRoZSBjb25uZWN0KCkgc3lzdGVtIGNhbGwKICogc2hvdWxkIHRpbWVvdXQuCiAqCiAqCiAqIFRoaXMgcGFyYW1ldGVyIG9ubHkgYXBwbGllcyB3aGVuIG5vdCBtYWtpbmcgYXN5bmNocm9ub3VzCiAqIGNvbm5lY3Rpb24gYXR0ZW1wdHMuCiAqCiAqCiAqCiAqCiAqIFRvIHNldCBhIHRpbWVvdXQgZm9yIHJlYWRpbmcvd3JpdGluZyBkYXRhIG92ZXIgdGhlIHNvY2tldCwgdXNlIHRoZQogKiBzdHJlYW1fc2V0X3RpbWVvdXQsIGFzIHRoZQogKiB0aW1lb3V0IG9ubHkgYXBwbGllcyB3aGlsZSBtYWtpbmcgY29ubmVjdGluZwogKiB0aGUgc29ja2V0LgogKgogKgogKgogKiBUbyBzZXQgYSB0aW1lb3V0IGZvciByZWFkaW5nL3dyaXRpbmcgZGF0YSBvdmVyIHRoZSBzb2NrZXQsIHVzZSB0aGUKICogc3RyZWFtX3NldF90aW1lb3V0LCBhcyB0aGUKICogdGltZW91dCBvbmx5IGFwcGxpZXMgd2hpbGUgbWFraW5nIGNvbm5lY3RpbmcKICogdGhlIHNvY2tldC4KICogQHBhcmFtIGludCAkZmxhZ3MgQml0bWFzayBmaWVsZCB3aGljaCBtYXkgYmUgc2V0IHRvIGFueSBjb21iaW5hdGlvbiBvZiBjb25uZWN0aW9uIGZsYWdzLgogKiBDdXJyZW50bHkgdGhlIHNlbGVjdCBvZiBjb25uZWN0aW9uIGZsYWdzIGlzIGxpbWl0ZWQgdG8KICogU1RSRUFNX0NMSUVOVF9DT05ORUNUIChkZWZhdWx0KSwKICogU1RSRUFNX0NMSUVOVF9BU1lOQ19DT05ORUNUIGFuZAogKiBTVFJFQU1fQ0xJRU5UX1BFUlNJU1RFTlQuCiAqIEBwYXJhbSByZXNvdXJjZSAkY29udGV4dCBBIHZhbGlkIGNvbnRleHQgcmVzb3VyY2UgY3JlYXRlZCB3aXRoIHN0cmVhbV9jb250ZXh0X2NyZWF0ZS4KICogQHJldHVybiByZXNvdXJjZSBPbiBzdWNjZXNzIGEgc3RyZWFtIHJlc291cmNlIGlzIHJldHVybmVkIHdoaWNoIG1heQogKiBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggdGhlIG90aGVyIGZpbGUgZnVuY3Rpb25zIChzdWNoIGFzCiAqIGZnZXRzLCBmZ2V0c3MsCiAqIGZ3cml0ZSwgZmNsb3NlLCBhbmQKICogZmVvZiksIEZBTFNFIG9uIGZhaWx1cmUuCiAqIEB0aHJvd3MgU3RyZWFtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJlYW1fc29ja2V0X2NsaWVudChzdHJpbmcgJHJlbW90ZV9zb2NrZXQsIGludCAmJGVycm5vID0gbnVsbCwgc3RyaW5nICYkZXJyc3RyID0gbnVsbCwgZmxvYXQgJHRpbWVvdXQgPSBudWxsLCBpbnQgJGZsYWdzID0gU1RSRUFNX0NMSUVOVF9DT05ORUNULCAkY29udGV4dCA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkY29udGV4dCAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcc3RyZWFtX3NvY2tldF9jbGllbnQoJHJlbW90ZV9zb2NrZXQsICRlcnJubywgJGVycnN0ciwgJHRpbWVvdXQsICRmbGFncywgJGNvbnRleHQpOwogICAgfSBlbHNlaWYgKCRmbGFncyAhPT0gU1RSRUFNX0NMSUVOVF9DT05ORUNUKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzdHJlYW1fc29ja2V0X2NsaWVudCgkcmVtb3RlX3NvY2tldCwgJGVycm5vLCAkZXJyc3RyLCAkdGltZW91dCwgJGZsYWdzKTsKICAgIH0gZWxzZWlmICgkdGltZW91dCAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcc3RyZWFtX3NvY2tldF9jbGllbnQoJHJlbW90ZV9zb2NrZXQsICRlcnJubywgJGVycnN0ciwgJHRpbWVvdXQpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHN0cmVhbV9zb2NrZXRfY2xpZW50KCRyZW1vdGVfc29ja2V0LCAkZXJybm8sICRlcnJzdHIpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3RyZWFtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHN0cmVhbV9zb2NrZXRfcGFpciBjcmVhdGVzIGEgcGFpciBvZiBjb25uZWN0ZWQsCiAqIGluZGlzdGluZ3Vpc2hhYmxlIHNvY2tldCBzdHJlYW1zLiBUaGlzIGZ1bmN0aW9uIGlzIGNvbW1vbmx5IHVzZWQgaW4gSVBDCiAqIChJbnRlci1Qcm9jZXNzIENvbW11bmljYXRpb24pLgogKgogKiBAcGFyYW0gaW50ICRkb21haW4gVGhlIHByb3RvY29sIGZhbWlseSB0byBiZSB1c2VkOiBTVFJFQU1fUEZfSU5FVCwKICogU1RSRUFNX1BGX0lORVQ2IG9yCiAqIFNUUkVBTV9QRl9VTklYCiAqIEBwYXJhbSBpbnQgJHR5cGUgVGhlIHR5cGUgb2YgY29tbXVuaWNhdGlvbiB0byBiZSB1c2VkOgogKiBTVFJFQU1fU09DS19ER1JBTSwKICogU1RSRUFNX1NPQ0tfUkFXLAogKiBTVFJFQU1fU09DS19SRE0sCiAqIFNUUkVBTV9TT0NLX1NFUVBBQ0tFVCBvcgogKiBTVFJFQU1fU09DS19TVFJFQU0KICogQHBhcmFtIGludCAkcHJvdG9jb2wgVGhlIHByb3RvY29sIHRvIGJlIHVzZWQ6IFNUUkVBTV9JUFBST1RPX0lDTVAsCiAqIFNUUkVBTV9JUFBST1RPX0lQLAogKiBTVFJFQU1fSVBQUk9UT19SQVcsCiAqIFNUUkVBTV9JUFBST1RPX1RDUCBvcgogKiBTVFJFQU1fSVBQUk9UT19VRFAKICogQHJldHVybiByZXNvdXJjZVtdIFJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgdHdvIHNvY2tldCByZXNvdXJjZXMgb24gc3VjY2Vzcy4KICogQHRocm93cyBTdHJlYW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHN0cmVhbV9zb2NrZXRfcGFpcihpbnQgJGRvbWFpbiwgaW50ICR0eXBlLCBpbnQgJHByb3RvY29sKTogaXRlcmFibGUKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzdHJlYW1fc29ja2V0X3BhaXIoJGRvbWFpbiwgJHR5cGUsICRwcm90b2NvbCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTdHJlYW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQ3JlYXRlcyBhIHN0cmVhbSBvciBkYXRhZ3JhbSBzb2NrZXQgb24gdGhlIHNwZWNpZmllZAogKiBsb2NhbF9zb2NrZXQuCiAqCiAqIFRoaXMgZnVuY3Rpb24gb25seSBjcmVhdGVzIGEgc29ja2V0LCB0byBiZWdpbiBhY2NlcHRpbmcgY29ubmVjdGlvbnMKICogdXNlIHN0cmVhbV9zb2NrZXRfYWNjZXB0LgogKgogKiBAcGFyYW0gc3RyaW5nICRsb2NhbF9zb2NrZXQgVGhlIHR5cGUgb2Ygc29ja2V0IGNyZWF0ZWQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgdHJhbnNwb3J0IHNwZWNpZmllZAogKiB1c2luZyBzdGFuZGFyZCBVUkwgZm9ybWF0dGluZzogdHJhbnNwb3J0Oi8vdGFyZ2V0LgogKgogKiBGb3IgSW50ZXJuZXQgRG9tYWluIHNvY2tldHMgKEFGX0lORVQpIHN1Y2ggYXMgVENQIGFuZCBVRFAsIHRoZQogKiB0YXJnZXQgcG9ydGlvbiBvZiB0aGUKICogcmVtb3RlX3NvY2tldCBwYXJhbWV0ZXIgc2hvdWxkIGNvbnNpc3Qgb2YgYQogKiBob3N0bmFtZSBvciBJUCBhZGRyZXNzIGZvbGxvd2VkIGJ5IGEgY29sb24gYW5kIGEgcG9ydCBudW1iZXIuICBGb3IKICogVW5peCBkb21haW4gc29ja2V0cywgdGhlIHRhcmdldCBwb3J0aW9uIHNob3VsZAogKiBwb2ludCB0byB0aGUgc29ja2V0IGZpbGUgb24gdGhlIGZpbGVzeXN0ZW0uCiAqCiAqIERlcGVuZGluZyBvbiB0aGUgZW52aXJvbm1lbnQsIFVuaXggZG9tYWluIHNvY2tldHMgbWF5IG5vdCBiZSBhdmFpbGFibGUuCiAqIEEgbGlzdCBvZiBhdmFpbGFibGUgdHJhbnNwb3J0cyBjYW4gYmUgcmV0cmlldmVkIHVzaW5nCiAqIHN0cmVhbV9nZXRfdHJhbnNwb3J0cy4gU2VlCiAqIGZvciBhIGxpc3Qgb2YgYnVsaXRpbiB0cmFuc3BvcnRzLgogKiBAcGFyYW0gaW50ICRlcnJubyBJZiB0aGUgb3B0aW9uYWwgZXJybm8gYW5kIGVycnN0cgogKiBhcmd1bWVudHMgYXJlIHByZXNlbnQgdGhleSB3aWxsIGJlIHNldCB0byBpbmRpY2F0ZSB0aGUgYWN0dWFsIHN5c3RlbQogKiBsZXZlbCBlcnJvciB0aGF0IG9jY3VycmVkIGluIHRoZSBzeXN0ZW0tbGV2ZWwgc29ja2V0KCksCiAqIGJpbmQoKSwgYW5kIGxpc3RlbigpIGNhbGxzLiBJZgogKiB0aGUgdmFsdWUgcmV0dXJuZWQgaW4gZXJybm8gaXMKICogMCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybmVkIEZBTFNFLCBpdCBpcyBhbgogKiBpbmRpY2F0aW9uIHRoYXQgdGhlIGVycm9yIG9jY3VycmVkIGJlZm9yZSB0aGUgYmluZCgpCiAqIGNhbGwuIFRoaXMgaXMgbW9zdCBsaWtlbHkgZHVlIHRvIGEgcHJvYmxlbSBpbml0aWFsaXppbmcgdGhlIHNvY2tldC4KICogTm90ZSB0aGF0IHRoZSBlcnJubyBhbmQKICogZXJyc3RyIGFyZ3VtZW50cyB3aWxsIGFsd2F5cyBiZSBwYXNzZWQgYnkgcmVmZXJlbmNlLgogKiBAcGFyYW0gc3RyaW5nICRlcnJzdHIgU2VlIGVycm5vIGRlc2NyaXB0aW9uLgogKiBAcGFyYW0gaW50ICRmbGFncyBBIGJpdG1hc2sgZmllbGQgd2hpY2ggbWF5IGJlIHNldCB0byBhbnkgY29tYmluYXRpb24gb2Ygc29ja2V0IGNyZWF0aW9uCiAqIGZsYWdzLgogKgogKiBGb3IgVURQIHNvY2tldHMsIHlvdSBtdXN0IHVzZSBTVFJFQU1fU0VSVkVSX0JJTkQgYXMKICogdGhlIGZsYWdzIHBhcmFtZXRlci4KICogQHBhcmFtIHJlc291cmNlICRjb250ZXh0CiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyB0aGUgY3JlYXRlZCBzdHJlYW0uCiAqIEB0aHJvd3MgU3RyZWFtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJlYW1fc29ja2V0X3NlcnZlcihzdHJpbmcgJGxvY2FsX3NvY2tldCwgaW50ICYkZXJybm8gPSBudWxsLCBzdHJpbmcgJiRlcnJzdHIgPSBudWxsLCBpbnQgJGZsYWdzID0gU1RSRUFNX1NFUlZFUl9CSU5EIHwgU1RSRUFNX1NFUlZFUl9MSVNURU4sICRjb250ZXh0ID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb250ZXh0ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzdHJlYW1fc29ja2V0X3NlcnZlcigkbG9jYWxfc29ja2V0LCAkZXJybm8sICRlcnJzdHIsICRmbGFncywgJGNvbnRleHQpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHN0cmVhbV9zb2NrZXRfc2VydmVyKCRsb2NhbF9zb2NrZXQsICRlcnJubywgJGVycnN0ciwgJGZsYWdzKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFN0cmVhbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBTaHV0ZG93bnMgKHBhcnRpYWxseSBvciBub3QpIGEgZnVsbC1kdXBsZXggY29ubmVjdGlvbi4KICoKICogQHBhcmFtIHJlc291cmNlICRzdHJlYW0gQW4gb3BlbiBzdHJlYW0gKG9wZW5lZCB3aXRoIHN0cmVhbV9zb2NrZXRfY2xpZW50LAogKiBmb3IgZXhhbXBsZSkKICogQHBhcmFtIGludCAkaG93IE9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbnN0YW50czogU1RSRUFNX1NIVVRfUkQKICogKGRpc2FibGUgZnVydGhlciByZWNlcHRpb25zKSwgU1RSRUFNX1NIVVRfV1IKICogKGRpc2FibGUgZnVydGhlciB0cmFuc21pc3Npb25zKSBvcgogKiBTVFJFQU1fU0hVVF9SRFdSIChkaXNhYmxlIGZ1cnRoZXIgcmVjZXB0aW9ucyBhbmQKICogdHJhbnNtaXNzaW9ucykuCiAqIEB0aHJvd3MgU3RyZWFtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJlYW1fc29ja2V0X3NodXRkb3duKCRzdHJlYW0sIGludCAkaG93KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHN0cmVhbV9zb2NrZXRfc2h1dGRvd24oJHN0cmVhbSwgJGhvdyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTdHJlYW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRlbGxzIHdoZXRoZXIgdGhlIHN0cmVhbSBzdXBwb3J0cyBsb2NraW5nIHRocm91Z2gKICogZmxvY2suCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RyZWFtIFRoZSBzdHJlYW0gdG8gY2hlY2suCiAqIEB0aHJvd3MgU3RyZWFtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJlYW1fc3VwcG9ydHNfbG9jaygkc3RyZWFtKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHN0cmVhbV9zdXBwb3J0c19sb2NrKCRzdHJlYW0pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3RyZWFtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBBbGxvd3MgeW91IHRvIGltcGxlbWVudCB5b3VyIG93biBwcm90b2NvbCBoYW5kbGVycyBhbmQgc3RyZWFtcyBmb3IgdXNlCiAqIHdpdGggYWxsIHRoZSBvdGhlciBmaWxlc3lzdGVtIGZ1bmN0aW9ucyAoc3VjaCBhcyBmb3BlbiwKICogZnJlYWQgZXRjLikuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHByb3RvY29sIFRoZSB3cmFwcGVyIG5hbWUgdG8gYmUgcmVnaXN0ZXJlZC4KICogQHBhcmFtIHN0cmluZyAkY2xhc3NuYW1lIFRoZSBjbGFzc25hbWUgd2hpY2ggaW1wbGVtZW50cyB0aGUgcHJvdG9jb2wuCiAqIEBwYXJhbSBpbnQgJGZsYWdzIFNob3VsZCBiZSBzZXQgdG8gU1RSRUFNX0lTX1VSTCBpZgogKiBwcm90b2NvbCBpcyBhIFVSTCBwcm90b2NvbC4gRGVmYXVsdCBpcyAwLCBsb2NhbAogKiBzdHJlYW0uCiAqIEB0aHJvd3MgU3RyZWFtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJlYW1fd3JhcHBlcl9yZWdpc3RlcihzdHJpbmcgJHByb3RvY29sLCBzdHJpbmcgJGNsYXNzbmFtZSwgaW50ICRmbGFncyA9IDApOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc3RyZWFtX3dyYXBwZXJfcmVnaXN0ZXIoJHByb3RvY29sLCAkY2xhc3NuYW1lLCAkZmxhZ3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3RyZWFtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBSZXN0b3JlcyBhIGJ1aWx0LWluIHdyYXBwZXIgcHJldmlvdXNseSB1bnJlZ2lzdGVyZWQgd2l0aAogKiBzdHJlYW1fd3JhcHBlcl91bnJlZ2lzdGVyLgogKgogKiBAcGFyYW0gc3RyaW5nICRwcm90b2NvbAogKiBAdGhyb3dzIFN0cmVhbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3RyZWFtX3dyYXBwZXJfcmVzdG9yZShzdHJpbmcgJHByb3RvY29sKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHN0cmVhbV93cmFwcGVyX3Jlc3RvcmUoJHByb3RvY29sKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFN0cmVhbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQWxsb3dzIHlvdSB0byBkaXNhYmxlIGFuIGFscmVhZHkgZGVmaW5lZCBzdHJlYW0gd3JhcHBlci4gT25jZSB0aGUgd3JhcHBlcgogKiBoYXMgYmVlbiBkaXNhYmxlZCB5b3UgbWF5IG92ZXJyaWRlIGl0IHdpdGggYSB1c2VyLWRlZmluZWQgd3JhcHBlciB1c2luZwogKiBzdHJlYW1fd3JhcHBlcl9yZWdpc3RlciBvciByZWVuYWJsZSBpdCBsYXRlciBvbiB3aXRoCiAqIHN0cmVhbV93cmFwcGVyX3Jlc3RvcmUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHByb3RvY29sCiAqIEB0aHJvd3MgU3RyZWFtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJlYW1fd3JhcHBlcl91bnJlZ2lzdGVyKHN0cmluZyAkcHJvdG9jb2wpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc3RyZWFtX3dyYXBwZXJfdW5yZWdpc3RlcigkcHJvdG9jb2wpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3RyZWFtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/strings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTdHJpbmdzRXhjZXB0aW9uOwoKLyoqCiAqIGNvbnZlcnRfdXVkZWNvZGUgZGVjb2RlcyBhIHV1ZW5jb2RlZCBzdHJpbmcuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIHV1ZW5jb2RlZCBkYXRhLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBkZWNvZGVkIGRhdGEgYXMgYSBzdHJpbmcuCiAqIEB0aHJvd3MgU3RyaW5nc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gY29udmVydF91dWRlY29kZShzdHJpbmcgJGRhdGEpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxjb252ZXJ0X3V1ZGVjb2RlKCRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFN0cmluZ3NFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogY29udmVydF91dWVuY29kZSBlbmNvZGVzIGEgc3RyaW5nIHVzaW5nIHRoZSB1dWVuY29kZQogKiBhbGdvcml0aG0uCiAqCiAqIFV1ZW5jb2RlIHRyYW5zbGF0ZXMgYWxsIHN0cmluZ3MgKGluY2x1ZGluZyBiaW5hcnkgZGF0YSkgaW50byBwcmludGFibGUKICogY2hhcmFjdGVycywgbWFraW5nIHRoZW0gc2FmZSBmb3IgbmV0d29yayB0cmFuc21pc3Npb25zLiBVdWVuY29kZWQgZGF0YSBpcwogKiBhYm91dCAzNSUgbGFyZ2VyIHRoYW4gdGhlIG9yaWdpbmFsLgogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhIFRoZSBkYXRhIHRvIGJlIGVuY29kZWQuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIHV1ZW5jb2RlZCBkYXRhLgogKiBAdGhyb3dzIFN0cmluZ3NFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGNvbnZlcnRfdXVlbmNvZGUoc3RyaW5nICRkYXRhKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcY29udmVydF91dWVuY29kZSgkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTdHJpbmdzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIERlY29kZXMgYSBoZXhhZGVjaW1hbGx5IGVuY29kZWQgYmluYXJ5IHN0cmluZy4KICoKICogQHBhcmFtIHN0cmluZyAkZGF0YSBIZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBkYXRhLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRhdGEuCiAqIEB0aHJvd3MgU3RyaW5nc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaGV4MmJpbihzdHJpbmcgJGRhdGEpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxoZXgyYmluKCRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFN0cmluZ3NFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQ2FsY3VsYXRlcyB0aGUgTUQ1IGhhc2ggb2YgdGhlIGZpbGUgc3BlY2lmaWVkIGJ5IHRoZQogKiBmaWxlbmFtZSBwYXJhbWV0ZXIgdXNpbmcgdGhlCiAqIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuCiAqIE1ENSBNZXNzYWdlLURpZ2VzdCBBbGdvcml0aG0sIGFuZCByZXR1cm5zIHRoYXQgaGFzaC4KICogVGhlIGhhc2ggaXMgYSAzMi1jaGFyYWN0ZXIgaGV4YWRlY2ltYWwgbnVtYmVyLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgZmlsZW5hbWUKICogQHBhcmFtIGJvb2wgJHJhd19vdXRwdXQgV2hlbiBUUlVFLCByZXR1cm5zIHRoZSBkaWdlc3QgaW4gcmF3IGJpbmFyeSBmb3JtYXQgd2l0aCBhIGxlbmd0aCBvZgogKiAxNi4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBhIHN0cmluZyBvbiBzdWNjZXNzLCBGQUxTRSBvdGhlcndpc2UuCiAqIEB0aHJvd3MgU3RyaW5nc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbWQ1X2ZpbGUoc3RyaW5nICRmaWxlbmFtZSwgYm9vbCAkcmF3X291dHB1dCA9IGZhbHNlKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbWQ1X2ZpbGUoJGZpbGVuYW1lLCAkcmF3X291dHB1dCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTdHJpbmdzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIENhbGN1bGF0ZXMgdGhlIG1ldGFwaG9uZSBrZXkgb2Ygc3RyLgogKgogKiBTaW1pbGFyIHRvIHNvdW5kZXggbWV0YXBob25lIGNyZWF0ZXMgdGhlIHNhbWUga2V5IGZvcgogKiBzaW1pbGFyIHNvdW5kaW5nIHdvcmRzLiBJdCdzIG1vcmUgYWNjdXJhdGUgdGhhbgogKiBzb3VuZGV4IGFzIGl0IGtub3dzIHRoZSBiYXNpYyBydWxlcyBvZiBFbmdsaXNoCiAqIHByb251bmNpYXRpb24uICBUaGUgbWV0YXBob25lIGdlbmVyYXRlZCBrZXlzIGFyZSBvZiB2YXJpYWJsZSBsZW5ndGguCiAqCiAqIE1ldGFwaG9uZSB3YXMgZGV2ZWxvcGVkIGJ5IExhd3JlbmNlIFBoaWxpcHMKICogJmx0O2xwaGlsaXBzIGF0IHZlcml0eSBkb3QgY29tJmd0Oy4gSXQgaXMgZGVzY3JpYmVkIGluIFsiUHJhY3RpY2FsCiAqIEFsZ29yaXRobXMgZm9yIFByb2dyYW1tZXJzIiwgQmluc3RvY2sgJmFtcDsgUmV4LCBBZGRpc29uIFdlc2xleSwKICogMTk5NV0uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHN0ciBUaGUgaW5wdXQgc3RyaW5nLgogKiBAcGFyYW0gaW50ICRwaG9uZW1lcyBUaGlzIHBhcmFtZXRlciByZXN0cmljdHMgdGhlIHJldHVybmVkIG1ldGFwaG9uZSBrZXkgdG8KICogcGhvbmVtZXMgY2hhcmFjdGVycyBpbiBsZW5ndGguCiAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIDAgbWVhbnMgbm8gcmVzdHJpY3Rpb24uCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIG1ldGFwaG9uZSBrZXkgYXMgYSBzdHJpbmcuCiAqIEB0aHJvd3MgU3RyaW5nc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbWV0YXBob25lKHN0cmluZyAkc3RyLCBpbnQgJHBob25lbWVzID0gMCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG1ldGFwaG9uZSgkc3RyLCAkcGhvbmVtZXMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3RyaW5nc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgZmlsZW5hbWUgb2YgdGhlIGZpbGUgdG8gaGFzaC4KICogQHBhcmFtIGJvb2wgJHJhd19vdXRwdXQgV2hlbiBUUlVFLCByZXR1cm5zIHRoZSBkaWdlc3QgaW4gcmF3IGJpbmFyeSBmb3JtYXQgd2l0aCBhIGxlbmd0aCBvZgogKiAyMC4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBhIHN0cmluZyBvbiBzdWNjZXNzLCBGQUxTRSBvdGhlcndpc2UuCiAqIEB0aHJvd3MgU3RyaW5nc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc2hhMV9maWxlKHN0cmluZyAkZmlsZW5hbWUsIGJvb2wgJHJhd19vdXRwdXQgPSBmYWxzZSk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNoYTFfZmlsZSgkZmlsZW5hbWUsICRyYXdfb3V0cHV0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFN0cmluZ3NFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQ2FsY3VsYXRlcyB0aGUgc291bmRleCBrZXkgb2Ygc3RyLgogKgogKiBTb3VuZGV4IGtleXMgaGF2ZSB0aGUgcHJvcGVydHkgdGhhdCB3b3JkcyBwcm9ub3VuY2VkIHNpbWlsYXJseQogKiBwcm9kdWNlIHRoZSBzYW1lIHNvdW5kZXgga2V5LCBhbmQgY2FuIHRodXMgYmUgdXNlZCB0byBzaW1wbGlmeQogKiBzZWFyY2hlcyBpbiBkYXRhYmFzZXMgd2hlcmUgeW91IGtub3cgdGhlIHByb251bmNpYXRpb24gYnV0IG5vdAogKiB0aGUgc3BlbGxpbmcuIFRoaXMgc291bmRleCBmdW5jdGlvbiByZXR1cm5zIGEgc3RyaW5nIDQgY2hhcmFjdGVycwogKiBsb25nLCBzdGFydGluZyB3aXRoIGEgbGV0dGVyLgogKgogKiBUaGlzIHBhcnRpY3VsYXIgc291bmRleCBmdW5jdGlvbiBpcyBvbmUgZGVzY3JpYmVkIGJ5IERvbmFsZCBLbnV0aAogKiBpbiAiVGhlIEFydCBPZiBDb21wdXRlciBQcm9ncmFtbWluZywgdm9sLiAzOiBTb3J0aW5nIEFuZAogKiBTZWFyY2hpbmciLCBBZGRpc29uLVdlc2xleSAoMTk3MyksIHBwLiAzOTEtMzkyLgogKgogKiBAcGFyYW0gc3RyaW5nICRzdHIgVGhlIGlucHV0IHN0cmluZy4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgc291bmRleCBrZXkgYXMgYSBzdHJpbmcuCiAqIEB0aHJvd3MgU3RyaW5nc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc291bmRleChzdHJpbmcgJHN0cik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNvdW5kZXgoJHN0cik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTdHJpbmdzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJldHVybnMgYSBzdHJpbmcgcHJvZHVjZWQgYWNjb3JkaW5nIHRvIHRoZSBmb3JtYXR0aW5nIHN0cmluZwogKiBmb3JtYXQuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZvcm1hdCBUaGUgZm9ybWF0IHN0cmluZyBpcyBjb21wb3NlZCBvZiB6ZXJvIG9yIG1vcmUgZGlyZWN0aXZlczoKICogb3JkaW5hcnkgY2hhcmFjdGVycyAoZXhjbHVkaW5nICUpIHRoYXQgYXJlCiAqIGNvcGllZCBkaXJlY3RseSB0byB0aGUgcmVzdWx0IGFuZCBjb252ZXJzaW9uCiAqIHNwZWNpZmljYXRpb25zLCBlYWNoIG9mIHdoaWNoIHJlc3VsdHMgaW4gZmV0Y2hpbmcgaXRzCiAqIG93biBwYXJhbWV0ZXIuCiAqCiAqIEEgY29udmVyc2lvbiBzcGVjaWZpY2F0aW9uIGZvbGxvd3MgdGhpcyBwcm90b3R5cGU6CiAqICVbYXJnbnVtJF1bZmxhZ3NdW3dpZHRoXVsucHJlY2lzaW9uXXNwZWNpZmllci4KICoKICogQW4gaW50ZWdlciBmb2xsb3dlZCBieSBhIGRvbGxhciBzaWduICQsCiAqIHRvIHNwZWNpZnkgd2hpY2ggbnVtYmVyIGFyZ3VtZW50IHRvIHRyZWF0IGluIHRoZSBjb252ZXJzaW9uLgogKgogKgogKiBGbGFncwogKgogKgogKgogKiBGbGFnCiAqIERlc2NyaXB0aW9uCiAqCiAqCiAqCiAqCiAqIC0KICoKICogTGVmdC1qdXN0aWZ5IHdpdGhpbiB0aGUgZ2l2ZW4gZmllbGQgd2lkdGg7CiAqIFJpZ2h0IGp1c3RpZmljYXRpb24gaXMgdGhlIGRlZmF1bHQKICoKICoKICoKICogKwogKgogKiBQcmVmaXggcG9zaXRpdmUgbnVtYmVycyB3aXRoIGEgcGx1cyBzaWduCiAqICs7IERlZmF1bHQgb25seSBuZWdhdGl2ZQogKiBhcmUgcHJlZml4ZWQgd2l0aCBhIG5lZ2F0aXZlIHNpZ24uCiAqCiAqCiAqCiAqIChzcGFjZSkKICoKICogUGFkcyB0aGUgcmVzdWx0IHdpdGggc3BhY2VzLgogKiBUaGlzIGlzIHRoZSBkZWZhdWx0LgogKgogKgogKgogKiAwCiAqCiAqIE9ubHkgbGVmdC1wYWRzIG51bWJlcnMgd2l0aCB6ZXJvcy4KICogV2l0aCBzIHNwZWNpZmllcnMgdGhpcyBjYW4KICogYWxzbyByaWdodC1wYWQgd2l0aCB6ZXJvcy4KICoKICoKICoKICogJyhjaGFyKQogKgogKiBQYWRzIHRoZSByZXN1bHQgd2l0aCB0aGUgY2hhcmFjdGVyIChjaGFyKS4KICoKICoKICoKICoKICoKICoKICogQW4gaW50ZWdlciB0aGF0IHNheXMgaG93IG1hbnkgY2hhcmFjdGVycyAobWluaW11bSkKICogdGhpcyBjb252ZXJzaW9uIHNob3VsZCByZXN1bHQgaW4uCiAqCiAqIEEgcGVyaW9kIC4gZm9sbG93ZWQgYnkgYW4gaW50ZWdlcgogKiB3aG8ncyBtZWFuaW5nIGRlcGVuZHMgb24gdGhlIHNwZWNpZmllcjoKICoKICoKICoKICogRm9yIGUsIEUsCiAqIGYgYW5kIEYKICogc3BlY2lmaWVyczogdGhpcyBpcyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyB0byBiZSBwcmludGVkCiAqIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50IChieSBkZWZhdWx0LCB0aGlzIGlzIDYpLgogKgogKgogKgogKgogKiBGb3IgZyBhbmQgRwogKiBzcGVjaWZpZXJzOiB0aGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzaWduaWZpY2FudAogKiBkaWdpdHMgdG8gYmUgcHJpbnRlZC4KICoKICoKICoKICoKICogRm9yIHMgc3BlY2lmaWVyOiBpdCBhY3RzIGFzIGEgY3V0b2ZmIHBvaW50LAogKiBzZXR0aW5nIGEgbWF4aW11bSBjaGFyYWN0ZXIgbGltaXQgdG8gdGhlIHN0cmluZy4KICoKICoKICoKICoKICoKICogSWYgdGhlIHBlcmlvZCBpcyBzcGVjaWZpZWQgd2l0aG91dCBhbiBleHBsaWNpdCB2YWx1ZSBmb3IgcHJlY2lzaW9uLAogKiAwIGlzIGFzc3VtZWQuCiAqCiAqCiAqCiAqCiAqIFNwZWNpZmllcnMKICoKICoKICoKICogU3BlY2lmaWVyCiAqIERlc2NyaXB0aW9uCiAqCiAqCiAqCiAqCiAqICUKICoKICogQSBsaXRlcmFsIHBlcmNlbnQgY2hhcmFjdGVyLiBObyBhcmd1bWVudCBpcyByZXF1aXJlZC4KICoKICoKICoKICogYgogKgogKiBUaGUgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhbiBpbnRlZ2VyIGFuZCBwcmVzZW50ZWQKICogYXMgYSBiaW5hcnkgbnVtYmVyLgogKgogKgogKgogKiBjCiAqCiAqIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGFuIGludGVnZXIgYW5kIHByZXNlbnRlZAogKiBhcyB0aGUgY2hhcmFjdGVyIHdpdGggdGhhdCBBU0NJSS4KICoKICoKICoKICogZAogKgogKiBUaGUgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhbiBpbnRlZ2VyIGFuZCBwcmVzZW50ZWQKICogYXMgYSAoc2lnbmVkKSBkZWNpbWFsIG51bWJlci4KICoKICoKICoKICogZQogKgogKiBUaGUgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBzY2llbnRpZmljIG5vdGF0aW9uIChlLmcuIDEuMmUrMikuCiAqIFRoZSBwcmVjaXNpb24gc3BlY2lmaWVyIHN0YW5kcyBmb3IgdGhlIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgdGhlCiAqIGRlY2ltYWwgcG9pbnQgc2luY2UgUEhQIDUuMi4xLiBJbiBlYXJsaWVyIHZlcnNpb25zLCBpdCB3YXMgdGFrZW4gYXMKICogbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyAob25lIGxlc3MpLgogKgogKgogKgogKiBFCiAqCiAqIExpa2UgdGhlIGUgc3BlY2lmaWVyIGJ1dCB1c2VzCiAqIHVwcGVyY2FzZSBsZXR0ZXIgKGUuZy4gMS4yRSsyKS4KICoKICoKICoKICogZgogKgogKiBUaGUgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhIGZsb2F0IGFuZCBwcmVzZW50ZWQKICogYXMgYSBmbG9hdGluZy1wb2ludCBudW1iZXIgKGxvY2FsZSBhd2FyZSkuCiAqCiAqCiAqCiAqIEYKICoKICogVGhlIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgYSBmbG9hdCBhbmQgcHJlc2VudGVkCiAqIGFzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIChub24tbG9jYWxlIGF3YXJlKS4KICogQXZhaWxhYmxlIGFzIG9mIFBIUCA1LjAuMy4KICoKICoKICoKICogZwogKgogKgogKiBHZW5lcmFsIGZvcm1hdC4KICoKICoKICogTGV0IFAgZXF1YWwgdGhlIHByZWNpc2lvbiBpZiBub256ZXJvLCA2IGlmIHRoZSBwcmVjaXNpb24gaXMgb21pdHRlZCwKICogb3IgMSBpZiB0aGUgcHJlY2lzaW9uIGlzIHplcm8uCiAqIFRoZW4sIGlmIGEgY29udmVyc2lvbiB3aXRoIHN0eWxlIEUgd291bGQgaGF2ZSBhbiBleHBvbmVudCBvZiBYOgogKgogKgogKiBJZiBQICZndDsgWCDiiaUg4oiSNCwgdGhlIGNvbnZlcnNpb24gaXMgd2l0aCBzdHlsZSBmIGFuZCBwcmVjaXNpb24gUCDiiJIgKFggKyAxKS4KICogT3RoZXJ3aXNlLCB0aGUgY29udmVyc2lvbiBpcyB3aXRoIHN0eWxlIGUgYW5kIHByZWNpc2lvbiBQIOKIkiAxLgogKgogKgogKgogKgogKiBHCiAqCiAqIExpa2UgdGhlIGcgc3BlY2lmaWVyIGJ1dCB1c2VzCiAqIEUgYW5kIGYuCiAqCiAqCiAqCiAqIG8KICoKICogVGhlIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgYW4gaW50ZWdlciBhbmQgcHJlc2VudGVkCiAqIGFzIGFuIG9jdGFsIG51bWJlci4KICoKICoKICoKICogcwogKgogKiBUaGUgYXJndW1lbnQgaXMgdHJlYXRlZCBhbmQgcHJlc2VudGVkIGFzIGEgc3RyaW5nLgogKgogKgogKgogKiB1CiAqCiAqIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGFuIGludGVnZXIgYW5kIHByZXNlbnRlZAogKiBhcyBhbiB1bnNpZ25lZCBkZWNpbWFsIG51bWJlci4KICoKICoKICoKICogeAogKgogKiBUaGUgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhbiBpbnRlZ2VyIGFuZCBwcmVzZW50ZWQKICogYXMgYSBoZXhhZGVjaW1hbCBudW1iZXIgKHdpdGggbG93ZXJjYXNlIGxldHRlcnMpLgogKgogKgogKgogKiBYCiAqCiAqIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGFuIGludGVnZXIgYW5kIHByZXNlbnRlZAogKiBhcyBhIGhleGFkZWNpbWFsIG51bWJlciAod2l0aCB1cHBlcmNhc2UgbGV0dGVycykuCiAqCiAqCiAqCiAqCiAqCiAqCiAqIEdlbmVyYWwgZm9ybWF0LgogKgogKiBMZXQgUCBlcXVhbCB0aGUgcHJlY2lzaW9uIGlmIG5vbnplcm8sIDYgaWYgdGhlIHByZWNpc2lvbiBpcyBvbWl0dGVkLAogKiBvciAxIGlmIHRoZSBwcmVjaXNpb24gaXMgemVyby4KICogVGhlbiwgaWYgYSBjb252ZXJzaW9uIHdpdGggc3R5bGUgRSB3b3VsZCBoYXZlIGFuIGV4cG9uZW50IG9mIFg6CiAqCiAqIElmIFAgJmd0OyBYIOKJpSDiiJI0LCB0aGUgY29udmVyc2lvbiBpcyB3aXRoIHN0eWxlIGYgYW5kIHByZWNpc2lvbiBQIOKIkiAoWCArIDEpLgogKiBPdGhlcndpc2UsIHRoZSBjb252ZXJzaW9uIGlzIHdpdGggc3R5bGUgZSBhbmQgcHJlY2lzaW9uIFAg4oiSIDEuCiAqCiAqIFRoZSBjIHR5cGUgc3BlY2lmaWVyIGlnbm9yZXMgcGFkZGluZyBhbmQgd2lkdGgKICoKICogQXR0ZW1wdGluZyB0byB1c2UgYSBjb21iaW5hdGlvbiBvZiB0aGUgc3RyaW5nIGFuZCB3aWR0aCBzcGVjaWZpZXJzIHdpdGggY2hhcmFjdGVyIHNldHMgdGhhdCByZXF1aXJlIG1vcmUgdGhhbiBvbmUgYnl0ZSBwZXIgY2hhcmFjdGVyIG1heSByZXN1bHQgaW4gdW5leHBlY3RlZCByZXN1bHRzCiAqCiAqIFZhcmlhYmxlcyB3aWxsIGJlIGNvLWVyY2VkIHRvIGEgc3VpdGFibGUgdHlwZSBmb3IgdGhlIHNwZWNpZmllcjoKICoKICogVHlwZSBIYW5kbGluZwogKgogKgogKgogKiBUeXBlCiAqIFNwZWNpZmllcnMKICoKICoKICoKICoKICogc3RyaW5nCiAqIHMKICoKICoKICogaW50ZWdlcgogKgogKiBkLAogKiB1LAogKiBjLAogKiBvLAogKiB4LAogKiBYLAogKiBiCiAqCiAqCiAqCiAqIGRvdWJsZQogKgogKiBnLAogKiBHLAogKiBlLAogKiBFLAogKiBmLAogKiBGCiAqCiAqCiAqCiAqCiAqCiAqIEBwYXJhbSBtaXhlZCAkcGFyYW1zCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgYSBzdHJpbmcgcHJvZHVjZWQgYWNjb3JkaW5nIHRvIHRoZSBmb3JtYXR0aW5nIHN0cmluZwogKiBmb3JtYXQuCiAqIEB0aHJvd3MgU3RyaW5nc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3ByaW50ZihzdHJpbmcgJGZvcm1hdCwgLi4uJHBhcmFtcyk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHBhcmFtcyAhPT0gW10pIHsKICAgICAgICAkcmVzdWx0ID0gXHNwcmludGYoJGZvcm1hdCwgLi4uJHBhcmFtcyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcc3ByaW50ZigkZm9ybWF0KTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFN0cmluZ3NFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0dXJucyB0aGUgcG9ydGlvbiBvZiBzdHJpbmcgc3BlY2lmaWVkIGJ5IHRoZQogKiBzdGFydCBhbmQgbGVuZ3RoIHBhcmFtZXRlcnMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyBUaGUgaW5wdXQgc3RyaW5nLgogKiBAcGFyYW0gaW50ICRzdGFydCBJZiBzdGFydCBpcyBub24tbmVnYXRpdmUsIHRoZSByZXR1cm5lZCBzdHJpbmcKICogd2lsbCBzdGFydCBhdCB0aGUgc3RhcnQndGggcG9zaXRpb24gaW4KICogc3RyaW5nLCBjb3VudGluZyBmcm9tIHplcm8uIEZvciBpbnN0YW5jZSwKICogaW4gdGhlIHN0cmluZyAnYWJjZGVmJywgdGhlIGNoYXJhY3RlciBhdAogKiBwb3NpdGlvbiAwIGlzICdhJywgdGhlCiAqIGNoYXJhY3RlciBhdCBwb3NpdGlvbiAyIGlzCiAqICdjJywgYW5kIHNvIGZvcnRoLgogKgogKiBJZiBzdGFydCBpcyBuZWdhdGl2ZSwgdGhlIHJldHVybmVkIHN0cmluZwogKiB3aWxsIHN0YXJ0IGF0IHRoZSBzdGFydCd0aCBjaGFyYWN0ZXIKICogZnJvbSB0aGUgZW5kIG9mIHN0cmluZy4KICoKICogSWYgc3RyaW5nIGlzIGxlc3MgdGhhbgogKiBzdGFydCBjaGFyYWN0ZXJzIGxvbmcsIEZBTFNFIHdpbGwgYmUgcmV0dXJuZWQuCiAqCiAqCiAqIFVzaW5nIGEgbmVnYXRpdmUgc3RhcnQKICoKICoKICogXV0+CiAqCiAqCiAqIEBwYXJhbSBpbnQgJGxlbmd0aCBJZiBsZW5ndGggaXMgZ2l2ZW4gYW5kIGlzIHBvc2l0aXZlLCB0aGUgc3RyaW5nCiAqIHJldHVybmVkIHdpbGwgY29udGFpbiBhdCBtb3N0IGxlbmd0aCBjaGFyYWN0ZXJzCiAqIGJlZ2lubmluZyBmcm9tIHN0YXJ0IChkZXBlbmRpbmcgb24gdGhlIGxlbmd0aCBvZgogKiBzdHJpbmcpLgogKgogKiBJZiBsZW5ndGggaXMgZ2l2ZW4gYW5kIGlzIG5lZ2F0aXZlLCB0aGVuIHRoYXQgbWFueQogKiBjaGFyYWN0ZXJzIHdpbGwgYmUgb21pdHRlZCBmcm9tIHRoZSBlbmQgb2Ygc3RyaW5nCiAqIChhZnRlciB0aGUgc3RhcnQgcG9zaXRpb24gaGFzIGJlZW4gY2FsY3VsYXRlZCB3aGVuIGEKICogc3RhcnQgaXMgbmVnYXRpdmUpLiAgSWYKICogc3RhcnQgZGVub3RlcyB0aGUgcG9zaXRpb24gb2YgdGhpcyB0cnVuY2F0aW9uIG9yCiAqIGJleW9uZCwgRkFMU0Ugd2lsbCBiZSByZXR1cm5lZC4KICoKICogSWYgbGVuZ3RoIGlzIGdpdmVuIGFuZCBpcyAwLAogKiBGQUxTRSBvciBOVUxMLCBhbiBlbXB0eSBzdHJpbmcgd2lsbCBiZSByZXR1cm5lZC4KICoKICogSWYgbGVuZ3RoIGlzIG9taXR0ZWQsIHRoZSBzdWJzdHJpbmcgc3RhcnRpbmcgZnJvbQogKiBzdGFydCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgd2lsbCBiZQogKiByZXR1cm5lZC4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgZXh0cmFjdGVkIHBhcnQgb2Ygc3RyaW5nOywgb3IKICogYW4gZW1wdHkgc3RyaW5nLgogKiBAdGhyb3dzIFN0cmluZ3NFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHN1YnN0cihzdHJpbmcgJHN0cmluZywgaW50ICRzdGFydCwgaW50ICRsZW5ndGggPSBudWxsKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkbGVuZ3RoICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzdWJzdHIoJHN0cmluZywgJHN0YXJ0LCAkbGVuZ3RoKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxzdWJzdHIoJHN0cmluZywgJHN0YXJ0KTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFN0cmluZ3NFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogT3BlcmF0ZXMgYXMgc3ByaW50ZiBidXQgYWNjZXB0cyBhbiBhcnJheSBvZgogKiBhcmd1bWVudHMsIHJhdGhlciB0aGFuIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cy4KICoKICogQHBhcmFtIHN0cmluZyAkZm9ybWF0IFRoZSBmb3JtYXQgc3RyaW5nIGlzIGNvbXBvc2VkIG9mIHplcm8gb3IgbW9yZSBkaXJlY3RpdmVzOgogKiBvcmRpbmFyeSBjaGFyYWN0ZXJzIChleGNsdWRpbmcgJSkgdGhhdCBhcmUKICogY29waWVkIGRpcmVjdGx5IHRvIHRoZSByZXN1bHQgYW5kIGNvbnZlcnNpb24KICogc3BlY2lmaWNhdGlvbnMsIGVhY2ggb2Ygd2hpY2ggcmVzdWx0cyBpbiBmZXRjaGluZyBpdHMKICogb3duIHBhcmFtZXRlci4KICoKICogQSBjb252ZXJzaW9uIHNwZWNpZmljYXRpb24gZm9sbG93cyB0aGlzIHByb3RvdHlwZToKICogJVthcmdudW0kXVtmbGFnc11bd2lkdGhdWy5wcmVjaXNpb25dc3BlY2lmaWVyLgogKgogKiBBbiBpbnRlZ2VyIGZvbGxvd2VkIGJ5IGEgZG9sbGFyIHNpZ24gJCwKICogdG8gc3BlY2lmeSB3aGljaCBudW1iZXIgYXJndW1lbnQgdG8gdHJlYXQgaW4gdGhlIGNvbnZlcnNpb24uCiAqCiAqCiAqIEZsYWdzCiAqCiAqCiAqCiAqIEZsYWcKICogRGVzY3JpcHRpb24KICoKICoKICoKICoKICogLQogKgogKiBMZWZ0LWp1c3RpZnkgd2l0aGluIHRoZSBnaXZlbiBmaWVsZCB3aWR0aDsKICogUmlnaHQganVzdGlmaWNhdGlvbiBpcyB0aGUgZGVmYXVsdAogKgogKgogKgogKiArCiAqCiAqIFByZWZpeCBwb3NpdGl2ZSBudW1iZXJzIHdpdGggYSBwbHVzIHNpZ24KICogKzsgRGVmYXVsdCBvbmx5IG5lZ2F0aXZlCiAqIGFyZSBwcmVmaXhlZCB3aXRoIGEgbmVnYXRpdmUgc2lnbi4KICoKICoKICoKICogKHNwYWNlKQogKgogKiBQYWRzIHRoZSByZXN1bHQgd2l0aCBzcGFjZXMuCiAqIFRoaXMgaXMgdGhlIGRlZmF1bHQuCiAqCiAqCiAqCiAqIDAKICoKICogT25seSBsZWZ0LXBhZHMgbnVtYmVycyB3aXRoIHplcm9zLgogKiBXaXRoIHMgc3BlY2lmaWVycyB0aGlzIGNhbgogKiBhbHNvIHJpZ2h0LXBhZCB3aXRoIHplcm9zLgogKgogKgogKgogKiAnKGNoYXIpCiAqCiAqIFBhZHMgdGhlIHJlc3VsdCB3aXRoIHRoZSBjaGFyYWN0ZXIgKGNoYXIpLgogKgogKgogKgogKgogKgogKgogKiBBbiBpbnRlZ2VyIHRoYXQgc2F5cyBob3cgbWFueSBjaGFyYWN0ZXJzIChtaW5pbXVtKQogKiB0aGlzIGNvbnZlcnNpb24gc2hvdWxkIHJlc3VsdCBpbi4KICoKICogQSBwZXJpb2QgLiBmb2xsb3dlZCBieSBhbiBpbnRlZ2VyCiAqIHdobydzIG1lYW5pbmcgZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWVyOgogKgogKgogKgogKiBGb3IgZSwgRSwKICogZiBhbmQgRgogKiBzcGVjaWZpZXJzOiB0aGlzIGlzIHRoZSBudW1iZXIgb2YgZGlnaXRzIHRvIGJlIHByaW50ZWQKICogYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQgKGJ5IGRlZmF1bHQsIHRoaXMgaXMgNikuCiAqCiAqCiAqCiAqCiAqIEZvciBnIGFuZCBHCiAqIHNwZWNpZmllcnM6IHRoaXMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNpZ25pZmljYW50CiAqIGRpZ2l0cyB0byBiZSBwcmludGVkLgogKgogKgogKgogKgogKiBGb3IgcyBzcGVjaWZpZXI6IGl0IGFjdHMgYXMgYSBjdXRvZmYgcG9pbnQsCiAqIHNldHRpbmcgYSBtYXhpbXVtIGNoYXJhY3RlciBsaW1pdCB0byB0aGUgc3RyaW5nLgogKgogKgogKgogKgogKgogKiBJZiB0aGUgcGVyaW9kIGlzIHNwZWNpZmllZCB3aXRob3V0IGFuIGV4cGxpY2l0IHZhbHVlIGZvciBwcmVjaXNpb24sCiAqIDAgaXMgYXNzdW1lZC4KICoKICoKICoKICoKICogU3BlY2lmaWVycwogKgogKgogKgogKiBTcGVjaWZpZXIKICogRGVzY3JpcHRpb24KICoKICoKICoKICoKICogJQogKgogKiBBIGxpdGVyYWwgcGVyY2VudCBjaGFyYWN0ZXIuIE5vIGFyZ3VtZW50IGlzIHJlcXVpcmVkLgogKgogKgogKgogKiBiCiAqCiAqIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGFuIGludGVnZXIgYW5kIHByZXNlbnRlZAogKiBhcyBhIGJpbmFyeSBudW1iZXIuCiAqCiAqCiAqCiAqIGMKICoKICogVGhlIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgYW4gaW50ZWdlciBhbmQgcHJlc2VudGVkCiAqIGFzIHRoZSBjaGFyYWN0ZXIgd2l0aCB0aGF0IEFTQ0lJLgogKgogKgogKgogKiBkCiAqCiAqIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGFuIGludGVnZXIgYW5kIHByZXNlbnRlZAogKiBhcyBhIChzaWduZWQpIGRlY2ltYWwgbnVtYmVyLgogKgogKgogKgogKiBlCiAqCiAqIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIHNjaWVudGlmaWMgbm90YXRpb24gKGUuZy4gMS4yZSsyKS4KICogVGhlIHByZWNpc2lvbiBzcGVjaWZpZXIgc3RhbmRzIGZvciB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0aGUKICogZGVjaW1hbCBwb2ludCBzaW5jZSBQSFAgNS4yLjEuIEluIGVhcmxpZXIgdmVyc2lvbnMsIGl0IHdhcyB0YWtlbiBhcwogKiBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIChvbmUgbGVzcykuCiAqCiAqCiAqCiAqIEUKICoKICogTGlrZSB0aGUgZSBzcGVjaWZpZXIgYnV0IHVzZXMKICogdXBwZXJjYXNlIGxldHRlciAoZS5nLiAxLjJFKzIpLgogKgogKgogKgogKiBmCiAqCiAqIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmxvYXQgYW5kIHByZXNlbnRlZAogKiBhcyBhIGZsb2F0aW5nLXBvaW50IG51bWJlciAobG9jYWxlIGF3YXJlKS4KICoKICoKICoKICogRgogKgogKiBUaGUgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhIGZsb2F0IGFuZCBwcmVzZW50ZWQKICogYXMgYSBmbG9hdGluZy1wb2ludCBudW1iZXIgKG5vbi1sb2NhbGUgYXdhcmUpLgogKiBBdmFpbGFibGUgYXMgb2YgUEhQIDUuMC4zLgogKgogKgogKgogKiBnCiAqCiAqCiAqIEdlbmVyYWwgZm9ybWF0LgogKgogKgogKiBMZXQgUCBlcXVhbCB0aGUgcHJlY2lzaW9uIGlmIG5vbnplcm8sIDYgaWYgdGhlIHByZWNpc2lvbiBpcyBvbWl0dGVkLAogKiBvciAxIGlmIHRoZSBwcmVjaXNpb24gaXMgemVyby4KICogVGhlbiwgaWYgYSBjb252ZXJzaW9uIHdpdGggc3R5bGUgRSB3b3VsZCBoYXZlIGFuIGV4cG9uZW50IG9mIFg6CiAqCiAqCiAqIElmIFAgJmd0OyBYIOKJpSDiiJI0LCB0aGUgY29udmVyc2lvbiBpcyB3aXRoIHN0eWxlIGYgYW5kIHByZWNpc2lvbiBQIOKIkiAoWCArIDEpLgogKiBPdGhlcndpc2UsIHRoZSBjb252ZXJzaW9uIGlzIHdpdGggc3R5bGUgZSBhbmQgcHJlY2lzaW9uIFAg4oiSIDEuCiAqCiAqCiAqCiAqCiAqIEcKICoKICogTGlrZSB0aGUgZyBzcGVjaWZpZXIgYnV0IHVzZXMKICogRSBhbmQgZi4KICoKICoKICoKICogbwogKgogKiBUaGUgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhbiBpbnRlZ2VyIGFuZCBwcmVzZW50ZWQKICogYXMgYW4gb2N0YWwgbnVtYmVyLgogKgogKgogKgogKiBzCiAqCiAqIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFuZCBwcmVzZW50ZWQgYXMgYSBzdHJpbmcuCiAqCiAqCiAqCiAqIHUKICoKICogVGhlIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgYW4gaW50ZWdlciBhbmQgcHJlc2VudGVkCiAqIGFzIGFuIHVuc2lnbmVkIGRlY2ltYWwgbnVtYmVyLgogKgogKgogKgogKiB4CiAqCiAqIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGFuIGludGVnZXIgYW5kIHByZXNlbnRlZAogKiBhcyBhIGhleGFkZWNpbWFsIG51bWJlciAod2l0aCBsb3dlcmNhc2UgbGV0dGVycykuCiAqCiAqCiAqCiAqIFgKICoKICogVGhlIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgYW4gaW50ZWdlciBhbmQgcHJlc2VudGVkCiAqIGFzIGEgaGV4YWRlY2ltYWwgbnVtYmVyICh3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzKS4KICoKICoKICoKICoKICoKICoKICogR2VuZXJhbCBmb3JtYXQuCiAqCiAqIExldCBQIGVxdWFsIHRoZSBwcmVjaXNpb24gaWYgbm9uemVybywgNiBpZiB0aGUgcHJlY2lzaW9uIGlzIG9taXR0ZWQsCiAqIG9yIDEgaWYgdGhlIHByZWNpc2lvbiBpcyB6ZXJvLgogKiBUaGVuLCBpZiBhIGNvbnZlcnNpb24gd2l0aCBzdHlsZSBFIHdvdWxkIGhhdmUgYW4gZXhwb25lbnQgb2YgWDoKICoKICogSWYgUCAmZ3Q7IFgg4omlIOKIkjQsIHRoZSBjb252ZXJzaW9uIGlzIHdpdGggc3R5bGUgZiBhbmQgcHJlY2lzaW9uIFAg4oiSIChYICsgMSkuCiAqIE90aGVyd2lzZSwgdGhlIGNvbnZlcnNpb24gaXMgd2l0aCBzdHlsZSBlIGFuZCBwcmVjaXNpb24gUCDiiJIgMS4KICoKICogVGhlIGMgdHlwZSBzcGVjaWZpZXIgaWdub3JlcyBwYWRkaW5nIGFuZCB3aWR0aAogKgogKiBBdHRlbXB0aW5nIHRvIHVzZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBzdHJpbmcgYW5kIHdpZHRoIHNwZWNpZmllcnMgd2l0aCBjaGFyYWN0ZXIgc2V0cyB0aGF0IHJlcXVpcmUgbW9yZSB0aGFuIG9uZSBieXRlIHBlciBjaGFyYWN0ZXIgbWF5IHJlc3VsdCBpbiB1bmV4cGVjdGVkIHJlc3VsdHMKICoKICogVmFyaWFibGVzIHdpbGwgYmUgY28tZXJjZWQgdG8gYSBzdWl0YWJsZSB0eXBlIGZvciB0aGUgc3BlY2lmaWVyOgogKgogKiBUeXBlIEhhbmRsaW5nCiAqCiAqCiAqCiAqIFR5cGUKICogU3BlY2lmaWVycwogKgogKgogKgogKgogKiBzdHJpbmcKICogcwogKgogKgogKiBpbnRlZ2VyCiAqCiAqIGQsCiAqIHUsCiAqIGMsCiAqIG8sCiAqIHgsCiAqIFgsCiAqIGIKICoKICoKICoKICogZG91YmxlCiAqCiAqIGcsCiAqIEcsCiAqIGUsCiAqIEUsCiAqIGYsCiAqIEYKICoKICoKICoKICoKICoKICogQHBhcmFtIGFycmF5ICRhcmdzCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybiBhcnJheSB2YWx1ZXMgYXMgYSBmb3JtYXR0ZWQgc3RyaW5nIGFjY29yZGluZyB0bwogKiBmb3JtYXQuCiAqIEB0aHJvd3MgU3RyaW5nc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gdnNwcmludGYoc3RyaW5nICRmb3JtYXQsIGFycmF5ICRhcmdzKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcdnNwcmludGYoJGZvcm1hdCwgJGFyZ3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3RyaW5nc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/swoole.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTd29vbGVFeGNlcHRpb247CgovKioKICoKICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgVGhlIGZpbGVuYW1lIGJlaW5nIHdyaXR0ZW4uCiAqIEBwYXJhbSBzdHJpbmcgJGNvbnRlbnQgVGhlIGNvbnRlbnQgd3JpdGluZyB0byB0aGUgZmlsZS4KICogQHBhcmFtIGludCAkb2Zmc2V0IFRoZSBvZmZzZXQuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICogQHRocm93cyBTd29vbGVFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHN3b29sZV9hc3luY193cml0ZShzdHJpbmcgJGZpbGVuYW1lLCBzdHJpbmcgJGNvbnRlbnQsIGludCAkb2Zmc2V0ID0gbnVsbCwgY2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjYWxsYmFjayAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcc3dvb2xlX2FzeW5jX3dyaXRlKCRmaWxlbmFtZSwgJGNvbnRlbnQsICRvZmZzZXQsICRjYWxsYmFjayk7CiAgICB9IGVsc2VpZiAoJG9mZnNldCAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcc3dvb2xlX2FzeW5jX3dyaXRlKCRmaWxlbmFtZSwgJGNvbnRlbnQsICRvZmZzZXQpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHN3b29sZV9hc3luY193cml0ZSgkZmlsZW5hbWUsICRjb250ZW50KTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFN3b29sZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICoKICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgVGhlIGZpbGVuYW1lIGJlaW5nIHdyaXR0ZW4uCiAqIEBwYXJhbSBzdHJpbmcgJGNvbnRlbnQgVGhlIGNvbnRlbnQgd3JpdGluZyB0byB0aGUgZmlsZS4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKiBAcGFyYW0gaW50ICRmbGFncwogKiBAdGhyb3dzIFN3b29sZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3dvb2xlX2FzeW5jX3dyaXRlZmlsZShzdHJpbmcgJGZpbGVuYW1lLCBzdHJpbmcgJGNvbnRlbnQsIGNhbGxhYmxlICRjYWxsYmFjayA9IG51bGwsIGludCAkZmxhZ3MgPSAwKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGZsYWdzICE9PSAwKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzd29vbGVfYXN5bmNfd3JpdGVmaWxlKCRmaWxlbmFtZSwgJGNvbnRlbnQsICRjYWxsYmFjaywgJGZsYWdzKTsKICAgIH0gZWxzZWlmICgkY2FsbGJhY2sgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHN3b29sZV9hc3luY193cml0ZWZpbGUoJGZpbGVuYW1lLCAkY29udGVudCwgJGNhbGxiYWNrKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxzd29vbGVfYXN5bmNfd3JpdGVmaWxlKCRmaWxlbmFtZSwgJGNvbnRlbnQpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3dvb2xlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKgogKgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIEB0aHJvd3MgU3dvb2xlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzd29vbGVfZXZlbnRfZGVmZXIoY2FsbGFibGUgJGNhbGxiYWNrKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHN3b29sZV9ldmVudF9kZWZlcigkY2FsbGJhY2spOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3dvb2xlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKgogKgogKiBAcGFyYW0gaW50ICRmZAogKiBAdGhyb3dzIFN3b29sZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3dvb2xlX2V2ZW50X2RlbChpbnQgJGZkKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHN3b29sZV9ldmVudF9kZWwoJGZkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFN3b29sZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICoKICoKICogQHBhcmFtIGludCAkZmQKICogQHBhcmFtIHN0cmluZyAkZGF0YQogKiBAdGhyb3dzIFN3b29sZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3dvb2xlX2V2ZW50X3dyaXRlKGludCAkZmQsIHN0cmluZyAkZGF0YSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzd29vbGVfZXZlbnRfd3JpdGUoJGZkLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTd29vbGVFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/uodbc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xVb2RiY0V4Y2VwdGlvbjsKCi8qKgogKiBUb2dnbGVzIGF1dG9jb21taXQgYmVoYXZpb3VyLgogKgogKiBCeSBkZWZhdWx0LCBhdXRvLWNvbW1pdCBpcyBvbiBmb3IgYSBjb25uZWN0aW9uLiAgRGlzYWJsaW5nCiAqIGF1dG8tY29tbWl0IGlzIGVxdWl2YWxlbnQgd2l0aCBzdGFydGluZyBhIHRyYW5zYWN0aW9uLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb25faWQgVGhlIE9EQkMgY29ubmVjdGlvbiBpZGVudGlmaWVyLAogKiBzZWUgb2RiY19jb25uZWN0IGZvciBkZXRhaWxzLgogKiBAcGFyYW0gYm9vbCAkT25PZmYgSWYgT25PZmYgaXMgVFJVRSwgYXV0by1jb21taXQgaXMgZW5hYmxlZCwgaWYKICogaXQgaXMgRkFMU0UgYXV0by1jb21taXQgaXMgZGlzYWJsZWQuCiAqIEByZXR1cm4gbWl4ZWQgV2l0aG91dCB0aGUgT25PZmYgcGFyYW1ldGVyLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMKICogYXV0by1jb21taXQgc3RhdHVzIGZvciBjb25uZWN0aW9uX2lkLiBOb24temVybyBpcwogKiByZXR1cm5lZCBpZiBhdXRvLWNvbW1pdCBpcyBvbiwgMCBpZiBpdCBpcyBvZmYsIG9yIEZBTFNFIGlmIGFuIGVycm9yCiAqIG9jY3Vycy4KICoKICogSWYgT25PZmYgaXMgc2V0LCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgVFJVRSBvbgogKiBzdWNjZXNzLgogKiBAdGhyb3dzIFVvZGJjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvZGJjX2F1dG9jb21taXQoJGNvbm5lY3Rpb25faWQsIGJvb2wgJE9uT2ZmID0gZmFsc2UpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2RiY19hdXRvY29tbWl0KCRjb25uZWN0aW9uX2lkLCAkT25PZmYpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgVW9kYmNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQ29udHJvbHMgaGFuZGxpbmcgb2YgYmluYXJ5IGNvbHVtbiBkYXRhLiBPREJDIFNRTCB0eXBlcyBhZmZlY3RlZCBhcmUKICogQklOQVJZLCBWQVJCSU5BUlksIGFuZAogKiBMT05HVkFSQklOQVJZLgogKiBUaGUgZGVmYXVsdCBtb2RlIGNhbiBiZSBzZXQgdXNpbmcgdGhlCiAqIHVvZGJjLmRlZmF1bHRiaW5tb2RlIHBocC5pbmkgZGlyZWN0aXZlLgogKgogKiBXaGVuIGJpbmFyeSBTUUwgZGF0YSBpcyBjb252ZXJ0ZWQgdG8gY2hhcmFjdGVyIEMgZGF0YSAoT0RCQ19CSU5NT0RFX0NPTlZFUlQpLCBlYWNoIGJ5dGUKICogKDggYml0cykgb2Ygc291cmNlIGRhdGEgaXMgcmVwcmVzZW50ZWQgYXMgdHdvIEFTQ0lJIGNoYXJhY3RlcnMuCiAqIFRoZXNlIGNoYXJhY3RlcnMgYXJlIHRoZSBBU0NJSSBjaGFyYWN0ZXIgcmVwcmVzZW50YXRpb24gb2YgdGhlCiAqIG51bWJlciBpbiBpdHMgaGV4YWRlY2ltYWwgZm9ybS4gRm9yIGV4YW1wbGUsIGEgYmluYXJ5CiAqIDAwMDAwMDAxIGlzIGNvbnZlcnRlZCB0bwogKiAiMDEiIGFuZCBhIGJpbmFyeSAxMTExMTExMQogKiBpcyBjb252ZXJ0ZWQgdG8gIkZGIi4KICoKICogV2hpbGUgdGhlIGhhbmRsaW5nIG9mIEJJTkFSWSBhbmQgVkFSQklOQVJZCiAqIGNvbHVtbnMgb25seSBkZXBlbmQgb24gdGhlIGJpbm1vZGUsIHRoZSBoYW5kbGluZyBvZiBMT05HVkFSQklOQVJZCiAqIGNvbHVtbnMgYWxzbyBkZXBlbmRzIG9uIHRoZSBsb25ncmVhZGxlbiBhcyB3ZWxsOgogKgogKiBMT05HVkFSQklOQVJZIGhhbmRsaW5nCiAqCiAqCiAqCiAqIGJpbm1vZGUKICogbG9uZ3JlYWRsZW4KICogcmVzdWx0CiAqCiAqCiAqCiAqCiAqIE9EQkNfQklOTU9ERV9QQVNTVEhSVQogKiAwCiAqIHBhc3N0aHJ1CiAqCiAqCiAqIE9EQkNfQklOTU9ERV9SRVRVUk4KICogMAogKiBwYXNzdGhydQogKgogKgogKiBPREJDX0JJTk1PREVfQ09OVkVSVAogKiAwCiAqIHBhc3N0aHJ1CiAqCiAqCiAqIE9EQkNfQklOTU9ERV9QQVNTVEhSVQogKiAmZ3Q7MAogKiBwYXNzdGhydQogKgogKgogKiBPREJDX0JJTk1PREVfUkVUVVJOCiAqICZndDswCiAqIHJldHVybiBhcyBpcwogKgogKgogKiBPREJDX0JJTk1PREVfQ09OVkVSVAogKiAmZ3Q7MAogKiByZXR1cm4gYXMgY2hhcgogKgogKgogKgogKgogKgogKiBJZiBvZGJjX2ZldGNoX2ludG8gaXMgdXNlZCwgcGFzc3RocnUgbWVhbnMgdGhhdCBhbgogKiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIHRoZXNlIGNvbHVtbnMuCiAqIElmIG9kYmNfcmVzdWx0IGlzIHVzZWQsIHBhc3N0aHJ1IG1lYW5zIHRoYXQgdGhlIGRhdGEgYXJlCiAqIHNlbnQgZGlyZWN0bHkgdG8gdGhlIGNsaWVudCAoaS5lLiBwcmludGVkKS4KICoKICogQHBhcmFtIGludCAkcmVzdWx0X2lkIFRoZSByZXN1bHQgaWRlbnRpZmllci4KICoKICogSWYgcmVzdWx0X2lkIGlzIDAsIHRoZQogKiBzZXR0aW5ncyBhcHBseSBhcyBkZWZhdWx0IGZvciBuZXcgcmVzdWx0cy4KICogQHBhcmFtIGludCAkbW9kZSBQb3NzaWJsZSB2YWx1ZXMgZm9yIG1vZGUgYXJlOgogKgogKgogKgogKiBPREJDX0JJTk1PREVfUEFTU1RIUlU6IFBhc3N0aHJ1IEJJTkFSWSBkYXRhCiAqCiAqCiAqCiAqCiAqIE9EQkNfQklOTU9ERV9SRVRVUk46IFJldHVybiBhcyBpcwogKgogKgogKgogKgogKiBPREJDX0JJTk1PREVfQ09OVkVSVDogQ29udmVydCB0byBjaGFyIGFuZCByZXR1cm4KICoKICoKICoKICoKICoKICogSGFuZGxpbmcgb2YgYmluYXJ5IGxvbmcKICogY29sdW1ucyBpcyBhbHNvIGFmZmVjdGVkIGJ5IG9kYmNfbG9uZ3JlYWRsZW4uCiAqCiAqCiAqIEB0aHJvd3MgVW9kYmNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9kYmNfYmlubW9kZShpbnQgJHJlc3VsdF9pZCwgaW50ICRtb2RlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9kYmNfYmlubW9kZSgkcmVzdWx0X2lkLCAkbW9kZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBVb2RiY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogTGlzdHMgY29sdW1ucyBhbmQgYXNzb2NpYXRlZCBwcml2aWxlZ2VzIGZvciB0aGUgZ2l2ZW4gdGFibGUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbl9pZCBUaGUgT0RCQyBjb25uZWN0aW9uIGlkZW50aWZpZXIsCiAqIHNlZSBvZGJjX2Nvbm5lY3QgZm9yIGRldGFpbHMuCiAqIEBwYXJhbSBzdHJpbmcgJGNhdGFsb2cgVGhlIGNhdGFsb2cgKCdxdWFsaWZpZXInIGluIE9EQkMgMiBwYXJsYW5jZSkuCiAqIEBwYXJhbSBzdHJpbmcgJHNjaGVtYSBUaGUgc2NoZW1hICgnb3duZXInIGluIE9EQkMgMiBwYXJsYW5jZSkuCiAqIFRoaXMgcGFyYW1ldGVyIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBzZWFyY2ggcGF0dGVybnM6CiAqICUgdG8gbWF0Y2ggemVybyBvciBtb3JlIGNoYXJhY3RlcnMsCiAqIGFuZCBfIHRvIG1hdGNoIGEgc2luZ2xlIGNoYXJhY3Rlci4KICogQHBhcmFtIHN0cmluZyAkdGFibGVfbmFtZSBUaGUgdGFibGUgbmFtZS4KICogVGhpcyBwYXJhbWV0ZXIgYWNjZXB0cyB0aGUgZm9sbG93aW5nIHNlYXJjaCBwYXR0ZXJuczoKICogJSB0byBtYXRjaCB6ZXJvIG9yIG1vcmUgY2hhcmFjdGVycywKICogYW5kIF8gdG8gbWF0Y2ggYSBzaW5nbGUgY2hhcmFjdGVyLgogKiBAcGFyYW0gc3RyaW5nICRjb2x1bW5fbmFtZSBUaGUgY29sdW1uIG5hbWUuCiAqIFRoaXMgcGFyYW1ldGVyIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBzZWFyY2ggcGF0dGVybnM6CiAqICUgdG8gbWF0Y2ggemVybyBvciBtb3JlIGNoYXJhY3RlcnMsCiAqIGFuZCBfIHRvIG1hdGNoIGEgc2luZ2xlIGNoYXJhY3Rlci4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGFuIE9EQkMgcmVzdWx0IGlkZW50aWZpZXIuCiAqIFRoaXMgcmVzdWx0IGlkZW50aWZpZXIgY2FuIGJlIHVzZWQgdG8gZmV0Y2ggYSBsaXN0IG9mIGNvbHVtbnMgYW5kCiAqIGFzc29jaWF0ZWQgcHJpdmlsZWdlcy4KICoKICogVGhlIHJlc3VsdCBzZXQgaGFzIHRoZSBmb2xsb3dpbmcgY29sdW1uczoKICoKICogVEFCTEVfQ0FUCiAqIFRBQkxFX1NDSEVNCiAqIFRBQkxFX05BTUUKICogQ09MVU1OX05BTUUKICogR1JBTlRPUgogKiBHUkFOVEVFCiAqIFBSSVZJTEVHRQogKiBJU19HUkFOVEFCTEUKICoKICogRHJpdmVycyBjYW4gcmVwb3J0IGFkZGl0aW9uYWwgY29sdW1ucy4KICogQHRocm93cyBVb2RiY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2RiY19jb2x1bW5wcml2aWxlZ2VzKCRjb25uZWN0aW9uX2lkLCBzdHJpbmcgJGNhdGFsb2csIHN0cmluZyAkc2NoZW1hLCBzdHJpbmcgJHRhYmxlX25hbWUsIHN0cmluZyAkY29sdW1uX25hbWUpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2RiY19jb2x1bW5wcml2aWxlZ2VzKCRjb25uZWN0aW9uX2lkLCAkY2F0YWxvZywgJHNjaGVtYSwgJHRhYmxlX25hbWUsICRjb2x1bW5fbmFtZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBVb2RiY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBMaXN0cyBhbGwgY29sdW1ucyBpbiB0aGUgcmVxdWVzdGVkIHJhbmdlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb25faWQgVGhlIE9EQkMgY29ubmVjdGlvbiBpZGVudGlmaWVyLAogKiBzZWUgb2RiY19jb25uZWN0IGZvciBkZXRhaWxzLgogKiBAcGFyYW0gc3RyaW5nICRjYXRhbG9nIFRoZSBjYXRhbG9nICgncXVhbGlmaWVyJyBpbiBPREJDIDIgcGFybGFuY2UpLgogKiBAcGFyYW0gc3RyaW5nICRzY2hlbWEgVGhlIHNjaGVtYSAoJ293bmVyJyBpbiBPREJDIDIgcGFybGFuY2UpLgogKiBUaGlzIHBhcmFtZXRlciBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgc2VhcmNoIHBhdHRlcm5zOgogKiAlIHRvIG1hdGNoIHplcm8gb3IgbW9yZSBjaGFyYWN0ZXJzLAogKiBhbmQgXyB0byBtYXRjaCBhIHNpbmdsZSBjaGFyYWN0ZXIuCiAqIEBwYXJhbSBzdHJpbmcgJHRhYmxlX25hbWUgVGhlIHRhYmxlIG5hbWUuCiAqIFRoaXMgcGFyYW1ldGVyIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBzZWFyY2ggcGF0dGVybnM6CiAqICUgdG8gbWF0Y2ggemVybyBvciBtb3JlIGNoYXJhY3RlcnMsCiAqIGFuZCBfIHRvIG1hdGNoIGEgc2luZ2xlIGNoYXJhY3Rlci4KICogQHBhcmFtIHN0cmluZyAkY29sdW1uX25hbWUgVGhlIGNvbHVtbiBuYW1lLgogKiBUaGlzIHBhcmFtZXRlciBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgc2VhcmNoIHBhdHRlcm5zOgogKiAlIHRvIG1hdGNoIHplcm8gb3IgbW9yZSBjaGFyYWN0ZXJzLAogKiBhbmQgXyB0byBtYXRjaCBhIHNpbmdsZSBjaGFyYWN0ZXIuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhbiBPREJDIHJlc3VsdCBpZGVudGlmaWVyLgogKgogKiBUaGUgcmVzdWx0IHNldCBoYXMgdGhlIGZvbGxvd2luZyBjb2x1bW5zOgogKgogKiBUQUJMRV9DQVQKICogVEFCTEVfU0NIRU0KICogVEFCTEVfTkFNRQogKiBDT0xVTU5fTkFNRQogKiBEQVRBX1RZUEUKICogVFlQRV9OQU1FCiAqIENPTFVNTl9TSVpFCiAqIEJVRkZFUl9MRU5HVEgKICogREVDSU1BTF9ESUdJVFMKICogTlVNX1BSRUNfUkFESVgKICogTlVMTEFCTEUKICogUkVNQVJLUwogKiBDT0xVTU5fREVGCiAqIFNRTF9EQVRBX1RZUEUKICogU1FMX0RBVEVUSU1FX1NVQgogKiBDSEFSX09DVEVUX0xFTkdUSAogKiBPUkRJTkFMX1BPU0lUSU9OCiAqIElTX05VTExBQkxFCiAqCiAqIERyaXZlcnMgY2FuIHJlcG9ydCBhZGRpdGlvbmFsIGNvbHVtbnMuCiAqIEB0aHJvd3MgVW9kYmNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9kYmNfY29sdW1ucygkY29ubmVjdGlvbl9pZCwgc3RyaW5nICRjYXRhbG9nID0gbnVsbCwgc3RyaW5nICRzY2hlbWEgPSBudWxsLCBzdHJpbmcgJHRhYmxlX25hbWUgPSBudWxsLCBzdHJpbmcgJGNvbHVtbl9uYW1lID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb2x1bW5fbmFtZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcb2RiY19jb2x1bW5zKCRjb25uZWN0aW9uX2lkLCAkY2F0YWxvZywgJHNjaGVtYSwgJHRhYmxlX25hbWUsICRjb2x1bW5fbmFtZSk7CiAgICB9IGVsc2VpZiAoJHRhYmxlX25hbWUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG9kYmNfY29sdW1ucygkY29ubmVjdGlvbl9pZCwgJGNhdGFsb2csICRzY2hlbWEsICR0YWJsZV9uYW1lKTsKICAgIH0gZWxzZWlmICgkc2NoZW1hICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvZGJjX2NvbHVtbnMoJGNvbm5lY3Rpb25faWQsICRjYXRhbG9nLCAkc2NoZW1hKTsKICAgIH0gZWxzZWlmICgkY2F0YWxvZyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcb2RiY19jb2x1bW5zKCRjb25uZWN0aW9uX2lkLCAkY2F0YWxvZyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcb2RiY19jb2x1bW5zKCRjb25uZWN0aW9uX2lkKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFVvZGJjRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIENvbW1pdHMgYWxsIHBlbmRpbmcgdHJhbnNhY3Rpb25zIG9uIHRoZSBjb25uZWN0aW9uLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb25faWQgVGhlIE9EQkMgY29ubmVjdGlvbiBpZGVudGlmaWVyLAogKiBzZWUgb2RiY19jb25uZWN0IGZvciBkZXRhaWxzLgogKiBAdGhyb3dzIFVvZGJjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvZGJjX2NvbW1pdCgkY29ubmVjdGlvbl9pZCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvZGJjX2NvbW1pdCgkY29ubmVjdGlvbl9pZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBVb2RiY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgbGlzdCBvZiBhdmFpbGFibGUgRFNOIChhZnRlciBjYWxsaW5nIGl0CiAqIHNldmVyYWwgdGltZXMpLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb25faWQgVGhlIE9EQkMgY29ubmVjdGlvbiBpZGVudGlmaWVyLAogKiBzZWUgb2RiY19jb25uZWN0IGZvciBkZXRhaWxzLgogKiBAcGFyYW0gaW50ICRmZXRjaF90eXBlIFRoZSBmZXRjaF90eXBlIGNhbiBiZSBvbmUgb2YgdHdvIGNvbnN0YW50IHR5cGVzOgogKiBTUUxfRkVUQ0hfRklSU1QsIFNRTF9GRVRDSF9ORVhULgogKiBVc2UgU1FMX0ZFVENIX0ZJUlNUIHRoZSBmaXJzdCB0aW1lIHRoaXMgZnVuY3Rpb24gaXMKICogY2FsbGVkLCB0aGVyZWFmdGVyIHVzZSB0aGUgU1FMX0ZFVENIX05FWFQuCiAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBGQUxTRSBvbiBlcnJvciwgYW4gYXJyYXkgdXBvbiBzdWNjZXNzLCBhbmQgTlVMTCBhZnRlciBmZXRjaGluZwogKiB0aGUgbGFzdCBhdmFpbGFibGUgRFNOLgogKiBAdGhyb3dzIFVvZGJjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvZGJjX2RhdGFfc291cmNlKCRjb25uZWN0aW9uX2lkLCBpbnQgJGZldGNoX3R5cGUpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9kYmNfZGF0YV9zb3VyY2UoJGNvbm5lY3Rpb25faWQsICRmZXRjaF90eXBlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFVvZGJjRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNlbmRzIGFuIFNRTCBzdGF0ZW1lbnQgdG8gdGhlIGRhdGFiYXNlIHNlcnZlci4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uX2lkIFRoZSBPREJDIGNvbm5lY3Rpb24gaWRlbnRpZmllciwKICogc2VlIG9kYmNfY29ubmVjdCBmb3IgZGV0YWlscy4KICogQHBhcmFtIHN0cmluZyAkcXVlcnlfc3RyaW5nIFRoZSBTUUwgc3RhdGVtZW50LgogKiBAcGFyYW0gaW50ICRmbGFncyBUaGlzIHBhcmFtZXRlciBpcyBjdXJyZW50bHkgbm90IHVzZWQuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhbiBPREJDIHJlc3VsdCBpZGVudGlmaWVyIGlmIHRoZSBTUUwgY29tbWFuZCB3YXMgZXhlY3V0ZWQKICogc3VjY2Vzc2Z1bGx5LgogKiBAdGhyb3dzIFVvZGJjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvZGJjX2V4ZWMoJGNvbm5lY3Rpb25faWQsIHN0cmluZyAkcXVlcnlfc3RyaW5nLCBpbnQgJGZsYWdzID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRmbGFncyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcb2RiY19leGVjKCRjb25uZWN0aW9uX2lkLCAkcXVlcnlfc3RyaW5nLCAkZmxhZ3MpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG9kYmNfZXhlYygkY29ubmVjdGlvbl9pZCwgJHF1ZXJ5X3N0cmluZyk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBVb2RiY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBFeGVjdXRlcyBhIHN0YXRlbWVudCBwcmVwYXJlZCB3aXRoIG9kYmNfcHJlcGFyZS4KICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHRfaWQgVGhlIHJlc3VsdCBpZCByZXNvdXJjZSwgZnJvbSBvZGJjX3ByZXBhcmUuCiAqIEBwYXJhbSBhcnJheSAkcGFyYW1ldGVyc19hcnJheSBQYXJhbWV0ZXJzIGluIHBhcmFtZXRlcl9hcnJheSB3aWxsIGJlCiAqIHN1YnN0aXR1dGVkIGZvciBwbGFjZWhvbGRlcnMgaW4gdGhlIHByZXBhcmVkIHN0YXRlbWVudCBpbiBvcmRlci4KICogRWxlbWVudHMgb2YgdGhpcyBhcnJheSB3aWxsIGJlIGNvbnZlcnRlZCB0byBzdHJpbmdzIGJ5IGNhbGxpbmcgdGhpcwogKiBmdW5jdGlvbi4KICoKICogQW55IHBhcmFtZXRlcnMgaW4gcGFyYW1ldGVyX2FycmF5IHdoaWNoCiAqIHN0YXJ0IGFuZCBlbmQgd2l0aCBzaW5nbGUgcXVvdGVzIHdpbGwgYmUgdGFrZW4gYXMgdGhlIG5hbWUgb2YgYQogKiBmaWxlIHRvIHJlYWQgYW5kIHNlbmQgdG8gdGhlIGRhdGFiYXNlIHNlcnZlciBhcyB0aGUgZGF0YSBmb3IgdGhlCiAqIGFwcHJvcHJpYXRlIHBsYWNlaG9sZGVyLgogKiBAdGhyb3dzIFVvZGJjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvZGJjX2V4ZWN1dGUoJHJlc3VsdF9pZCwgYXJyYXkgJHBhcmFtZXRlcnNfYXJyYXkgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHBhcmFtZXRlcnNfYXJyYXkgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG9kYmNfZXhlY3V0ZSgkcmVzdWx0X2lkLCAkcGFyYW1ldGVyc19hcnJheSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcb2RiY19leGVjdXRlKCRyZXN1bHRfaWQpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgVW9kYmNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEZldGNoIG9uZSByZXN1bHQgcm93IGludG8gYXJyYXkuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0X2lkIFRoZSByZXN1bHQgcmVzb3VyY2UuCiAqIEBwYXJhbSBhcnJheXxudWxsICRyZXN1bHRfYXJyYXkgVGhlIHJlc3VsdCBhcnJheQogKiB0aGF0IGNhbiBiZSBvZiBhbnkgdHlwZSBzaW5jZSBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byB0eXBlCiAqIGFycmF5LiBUaGUgYXJyYXkgd2lsbCBjb250YWluIHRoZSBjb2x1bW4gdmFsdWVzIHN0YXJ0aW5nIGF0IGFycmF5CiAqIGluZGV4IDAuCiAqIEBwYXJhbSBpbnQgJHJvd251bWJlciBUaGUgcm93IG51bWJlci4KICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIHJlc3VsdDsKICogRkFMU0Ugb24gZXJyb3IuCiAqIEB0aHJvd3MgVW9kYmNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9kYmNfZmV0Y2hfaW50bygkcmVzdWx0X2lkLCA/YXJyYXkgJiRyZXN1bHRfYXJyYXksIGludCAkcm93bnVtYmVyID0gbnVsbCk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHJvd251bWJlciAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcb2RiY19mZXRjaF9pbnRvKCRyZXN1bHRfaWQsICRyZXN1bHRfYXJyYXksICRyb3dudW1iZXIpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG9kYmNfZmV0Y2hfaW50bygkcmVzdWx0X2lkLCAkcmVzdWx0X2FycmF5KTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFVvZGJjRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEdldHMgdGhlIGxlbmd0aCBvZiB0aGUgZmllbGQgcmVmZXJlbmNlZCBieSBudW1iZXIgaW4gdGhlIGdpdmVuIHJlc3VsdAogKiBpZGVudGlmaWVyLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdF9pZCBUaGUgcmVzdWx0IGlkZW50aWZpZXIuCiAqIEBwYXJhbSBpbnQgJGZpZWxkX251bWJlciBUaGUgZmllbGQgbnVtYmVyLiBGaWVsZCBudW1iZXJpbmcgc3RhcnRzIGF0IDEuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIGZpZWxkIGxlbmd0aC4KICogQHRocm93cyBVb2RiY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2RiY19maWVsZF9sZW4oJHJlc3VsdF9pZCwgaW50ICRmaWVsZF9udW1iZXIpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvZGJjX2ZpZWxkX2xlbigkcmVzdWx0X2lkLCAkZmllbGRfbnVtYmVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFVvZGJjRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEdldHMgdGhlIG5hbWUgb2YgdGhlIGZpZWxkIG9jY3VweWluZyB0aGUgZ2l2ZW4gY29sdW1uIG51bWJlciBpbiB0aGUgZ2l2ZW4KICogcmVzdWx0IGlkZW50aWZpZXIuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0X2lkIFRoZSByZXN1bHQgaWRlbnRpZmllci4KICogQHBhcmFtIGludCAkZmllbGRfbnVtYmVyIFRoZSBmaWVsZCBudW1iZXIuIEZpZWxkIG51bWJlcmluZyBzdGFydHMgYXQgMS4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgZmllbGQgbmFtZSBhcyBhIHN0cmluZy4KICogQHRocm93cyBVb2RiY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2RiY19maWVsZF9uYW1lKCRyZXN1bHRfaWQsIGludCAkZmllbGRfbnVtYmVyKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2RiY19maWVsZF9uYW1lKCRyZXN1bHRfaWQsICRmaWVsZF9udW1iZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgVW9kYmNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogR2V0cyB0aGUgbnVtYmVyIG9mIHRoZSBjb2x1bW4gc2xvdCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBuYW1lZCBmaWVsZCBpbgogKiB0aGUgZ2l2ZW4gcmVzdWx0IGlkZW50aWZpZXIuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0X2lkIFRoZSByZXN1bHQgaWRlbnRpZmllci4KICogQHBhcmFtIHN0cmluZyAkZmllbGRfbmFtZSBUaGUgZmllbGQgbmFtZS4KICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgZmllbGQgbnVtYmVyIGFzIGEgaW50ZWdlci4KICogRmllbGQgbnVtYmVyaW5nIHN0YXJ0cyBhdCAxLgogKiBAdGhyb3dzIFVvZGJjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvZGJjX2ZpZWxkX251bSgkcmVzdWx0X2lkLCBzdHJpbmcgJGZpZWxkX25hbWUpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvZGJjX2ZpZWxkX251bSgkcmVzdWx0X2lkLCAkZmllbGRfbmFtZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBVb2RiY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBHZXRzIHRoZSBzY2FsZSBvZiB0aGUgZmllbGQgcmVmZXJlbmNlZCBieSBudW1iZXIgaW4gdGhlIGdpdmVuIHJlc3VsdAogKiBpZGVudGlmaWVyLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdF9pZCBUaGUgcmVzdWx0IGlkZW50aWZpZXIuCiAqIEBwYXJhbSBpbnQgJGZpZWxkX251bWJlciBUaGUgZmllbGQgbnVtYmVyLiBGaWVsZCBudW1iZXJpbmcgc3RhcnRzIGF0IDEuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIGZpZWxkIHNjYWxlIGFzIGEgaW50ZWdlci4KICogQHRocm93cyBVb2RiY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2RiY19maWVsZF9zY2FsZSgkcmVzdWx0X2lkLCBpbnQgJGZpZWxkX251bWJlcik6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9kYmNfZmllbGRfc2NhbGUoJHJlc3VsdF9pZCwgJGZpZWxkX251bWJlcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBVb2RiY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBHZXRzIHRoZSBTUUwgdHlwZSBvZiB0aGUgZmllbGQgcmVmZXJlbmNlZCBieSBudW1iZXIgaW4gdGhlIGdpdmVuIHJlc3VsdAogKiBpZGVudGlmaWVyLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdF9pZCBUaGUgcmVzdWx0IGlkZW50aWZpZXIuCiAqIEBwYXJhbSBpbnQgJGZpZWxkX251bWJlciBUaGUgZmllbGQgbnVtYmVyLiBGaWVsZCBudW1iZXJpbmcgc3RhcnRzIGF0IDEuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIGZpZWxkIHR5cGUgYXMgYSBzdHJpbmcuCiAqIEB0aHJvd3MgVW9kYmNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9kYmNfZmllbGRfdHlwZSgkcmVzdWx0X2lkLCBpbnQgJGZpZWxkX251bWJlcik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9kYmNfZmllbGRfdHlwZSgkcmVzdWx0X2lkLCAkZmllbGRfbnVtYmVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFVvZGJjRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJldHJpZXZlcyBhIGxpc3Qgb2YgZm9yZWlnbiBrZXlzIGluIHRoZSBzcGVjaWZpZWQgdGFibGUgb3IgYSBsaXN0IG9mCiAqIGZvcmVpZ24ga2V5cyBpbiBvdGhlciB0YWJsZXMgdGhhdCByZWZlciB0byB0aGUgcHJpbWFyeSBrZXkgaW4gdGhlCiAqIHNwZWNpZmllZCB0YWJsZQogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb25faWQgVGhlIE9EQkMgY29ubmVjdGlvbiBpZGVudGlmaWVyLAogKiBzZWUgb2RiY19jb25uZWN0IGZvciBkZXRhaWxzLgogKiBAcGFyYW0gc3RyaW5nICRwa19jYXRhbG9nIFRoZSBjYXRhbG9nICgncXVhbGlmaWVyJyBpbiBPREJDIDIgcGFybGFuY2UpIG9mIHRoZSBwcmltYXJ5IGtleSB0YWJsZS4KICogQHBhcmFtIHN0cmluZyAkcGtfc2NoZW1hIFRoZSBzY2hlbWEgKCdvd25lcicgaW4gT0RCQyAyIHBhcmxhbmNlKSBvZiB0aGUgcHJpbWFyeSBrZXkgdGFibGUuCiAqIEBwYXJhbSBzdHJpbmcgJHBrX3RhYmxlIFRoZSBwcmltYXJ5IGtleSB0YWJsZS4KICogQHBhcmFtIHN0cmluZyAkZmtfY2F0YWxvZyBUaGUgY2F0YWxvZyAoJ3F1YWxpZmllcicgaW4gT0RCQyAyIHBhcmxhbmNlKSBvZiB0aGUgZm9yZWlnbiBrZXkgdGFibGUuCiAqIEBwYXJhbSBzdHJpbmcgJGZrX3NjaGVtYSBUaGUgc2NoZW1hICgnb3duZXInIGluIE9EQkMgMiBwYXJsYW5jZSkgb2YgdGhlIGZvcmVpZ24ga2V5IHRhYmxlLgogKiBAcGFyYW0gc3RyaW5nICRma190YWJsZSBUaGUgZm9yZWlnbiBrZXkgdGFibGUuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhbiBPREJDIHJlc3VsdCBpZGVudGlmaWVyLgogKgogKiBUaGUgcmVzdWx0IHNldCBoYXMgdGhlIGZvbGxvd2luZyBjb2x1bW5zOgogKgogKiBQS1RBQkxFX0NBVAogKiBQS1RBQkxFX1NDSEVNCiAqIFBLVEFCTEVfTkFNRQogKiBQS0NPTFVNTl9OQU1FCiAqIEZLVEFCTEVfQ0FUCiAqIEZLVEFCTEVfU0NIRU0KICogRktUQUJMRV9OQU1FCiAqIEZLQ09MVU1OX05BTUUKICogS0VZX1NFUQogKiBVUERBVEVfUlVMRQogKiBERUxFVEVfUlVMRQogKiBGS19OQU1FCiAqIFBLX05BTUUKICogREVGRVJSQUJJTElUWQogKgogKiBEcml2ZXJzIGNhbiByZXBvcnQgYWRkaXRpb25hbCBjb2x1bW5zLgogKiBAdGhyb3dzIFVvZGJjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvZGJjX2ZvcmVpZ25rZXlzKCRjb25uZWN0aW9uX2lkLCBzdHJpbmcgJHBrX2NhdGFsb2csIHN0cmluZyAkcGtfc2NoZW1hLCBzdHJpbmcgJHBrX3RhYmxlLCBzdHJpbmcgJGZrX2NhdGFsb2csIHN0cmluZyAkZmtfc2NoZW1hLCBzdHJpbmcgJGZrX3RhYmxlKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9kYmNfZm9yZWlnbmtleXMoJGNvbm5lY3Rpb25faWQsICRwa19jYXRhbG9nLCAkcGtfc2NoZW1hLCAkcGtfdGFibGUsICRma19jYXRhbG9nLCAkZmtfc2NoZW1hLCAkZmtfdGFibGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgVW9kYmNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0cmlldmVzIGluZm9ybWF0aW9uIGFib3V0IGRhdGEgdHlwZXMgc3VwcG9ydGVkIGJ5IHRoZSBkYXRhIHNvdXJjZS4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uX2lkIFRoZSBPREJDIGNvbm5lY3Rpb24gaWRlbnRpZmllciwKICogc2VlIG9kYmNfY29ubmVjdCBmb3IgZGV0YWlscy4KICogQHBhcmFtIGludCAkZGF0YV90eXBlIFRoZSBkYXRhIHR5cGUsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHJlc3RyaWN0IHRoZSBpbmZvcm1hdGlvbiB0byBhCiAqIHNpbmdsZSBkYXRhIHR5cGUuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhbiBPREJDIHJlc3VsdCBpZGVudGlmaWVyLgogKgogKiBUaGUgcmVzdWx0IHNldCBoYXMgdGhlIGZvbGxvd2luZyBjb2x1bW5zOgogKgogKiBUWVBFX05BTUUKICogREFUQV9UWVBFCiAqIFBSRUNJU0lPTgogKiBMSVRFUkFMX1BSRUZJWAogKiBMSVRFUkFMX1NVRkZJWAogKiBDUkVBVEVfUEFSQU1TCiAqIE5VTExBQkxFCiAqIENBU0VfU0VOU0lUSVZFCiAqIFNFQVJDSEFCTEUKICogVU5TSUdORURfQVRUUklCVVRFCiAqIE1PTkVZCiAqIEFVVE9fSU5DUkVNRU5UCiAqIExPQ0FMX1RZUEVfTkFNRQogKiBNSU5JTVVNX1NDQUxFCiAqIE1BWElNVU1fU0NBTEUKICoKICoKICogVGhlIHJlc3VsdCBzZXQgaXMgb3JkZXJlZCBieSBEQVRBX1RZUEUgYW5kIFRZUEVfTkFNRS4KICogQHRocm93cyBVb2RiY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2RiY19nZXR0eXBlaW5mbygkY29ubmVjdGlvbl9pZCwgaW50ICRkYXRhX3R5cGUgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGRhdGFfdHlwZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcb2RiY19nZXR0eXBlaW5mbygkY29ubmVjdGlvbl9pZCwgJGRhdGFfdHlwZSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcb2RiY19nZXR0eXBlaW5mbygkY29ubmVjdGlvbl9pZCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBVb2RiY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBDb250cm9scyBoYW5kbGluZyBvZiBMT05HLCBMT05HVkFSQ0hBUiBhbmQgTE9OR1ZBUkJJTkFSWSBjb2x1bW5zLgogKiBUaGUgZGVmYXVsdCBsZW5ndGggY2FuIGJlIHNldCB1c2luZyB0aGUKICogdW9kYmMuZGVmYXVsdGxybCBwaHAuaW5pIGRpcmVjdGl2ZS4KICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHRfaWQgVGhlIHJlc3VsdCBpZGVudGlmaWVyLgogKiBAcGFyYW0gaW50ICRsZW5ndGggVGhlIG51bWJlciBvZiBieXRlcyByZXR1cm5lZCB0byBQSFAgaXMgY29udHJvbGxlZCBieSB0aGUgcGFyYW1ldGVyCiAqIGxlbmd0aC4gSWYgaXQgaXMgc2V0IHRvIDAsIGxvbmcgY29sdW1uIGRhdGEgaXMgcGFzc2VkIHRocm91Z2ggdG8gdGhlCiAqIGNsaWVudCAoaS5lLiBwcmludGVkKSB3aGVuIHJldHJpZXZlZCB3aXRoIG9kYmNfcmVzdWx0LgogKiBAdGhyb3dzIFVvZGJjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvZGJjX2xvbmdyZWFkbGVuKCRyZXN1bHRfaWQsIGludCAkbGVuZ3RoKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9kYmNfbG9uZ3JlYWRsZW4oJHJlc3VsdF9pZCwgJGxlbmd0aCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBVb2RiY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUHJlcGFyZXMgYSBzdGF0ZW1lbnQgZm9yIGV4ZWN1dGlvbi4gVGhlIHJlc3VsdCBpZGVudGlmaWVyIGNhbiBiZSB1c2VkCiAqIGxhdGVyIHRvIGV4ZWN1dGUgdGhlIHN0YXRlbWVudCB3aXRoIG9kYmNfZXhlY3V0ZS4KICoKICogU29tZSBkYXRhYmFzZXMgKHN1Y2ggYXMgSUJNIERCMiwgTVMgU1FMIFNlcnZlciwgYW5kIE9yYWNsZSkgc3VwcG9ydAogKiBzdG9yZWQgcHJvY2VkdXJlcyB0aGF0IGFjY2VwdCBwYXJhbWV0ZXJzIG9mIHR5cGUgSU4sIElOT1VULCBhbmQgT1VUIGFzCiAqIGRlZmluZWQgYnkgdGhlIE9EQkMgc3BlY2lmaWNhdGlvbi4gIEhvd2V2ZXIsIHRoZSBVbmlmaWVkIE9EQkMgZHJpdmVyCiAqIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIHBhcmFtZXRlcnMgb2YgdHlwZSBJTiB0byBzdG9yZWQgcHJvY2VkdXJlcy4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uX2lkIFRoZSBPREJDIGNvbm5lY3Rpb24gaWRlbnRpZmllciwKICogc2VlIG9kYmNfY29ubmVjdCBmb3IgZGV0YWlscy4KICogQHBhcmFtIHN0cmluZyAkcXVlcnlfc3RyaW5nIFRoZSBxdWVyeSBzdHJpbmcgc3RhdGVtZW50IGJlaW5nIHByZXBhcmVkLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYW4gT0RCQyByZXN1bHQgaWRlbnRpZmllciBpZiB0aGUgU1FMIGNvbW1hbmQgd2FzIHByZXBhcmVkCiAqIHN1Y2Nlc3NmdWxseS4KICogQHRocm93cyBVb2RiY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2RiY19wcmVwYXJlKCRjb25uZWN0aW9uX2lkLCBzdHJpbmcgJHF1ZXJ5X3N0cmluZykKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvZGJjX3ByZXBhcmUoJGNvbm5lY3Rpb25faWQsICRxdWVyeV9zdHJpbmcpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgVW9kYmNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0dXJucyBhIHJlc3VsdCBpZGVudGlmaWVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gZmV0Y2ggdGhlIGNvbHVtbiBuYW1lcwogKiB0aGF0IGNvbXByaXNlIHRoZSBwcmltYXJ5IGtleSBmb3IgYSB0YWJsZS4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uX2lkIFRoZSBPREJDIGNvbm5lY3Rpb24gaWRlbnRpZmllciwKICogc2VlIG9kYmNfY29ubmVjdCBmb3IgZGV0YWlscy4KICogQHBhcmFtIHN0cmluZyAkY2F0YWxvZyBUaGUgY2F0YWxvZyAoJ3F1YWxpZmllcicgaW4gT0RCQyAyIHBhcmxhbmNlKS4KICogQHBhcmFtIHN0cmluZyAkc2NoZW1hIFRoZSBzY2hlbWEgKCdvd25lcicgaW4gT0RCQyAyIHBhcmxhbmNlKS4KICogQHBhcmFtIHN0cmluZyAkdGFibGUKICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGFuIE9EQkMgcmVzdWx0IGlkZW50aWZpZXIuCiAqCiAqIFRoZSByZXN1bHQgc2V0IGhhcyB0aGUgZm9sbG93aW5nIGNvbHVtbnM6CiAqCiAqIFRBQkxFX0NBVAogKiBUQUJMRV9TQ0hFTQogKiBUQUJMRV9OQU1FCiAqIENPTFVNTl9OQU1FCiAqIEtFWV9TRVEKICogUEtfTkFNRQogKgogKiBEcml2ZXJzIGNhbiByZXBvcnQgYWRkaXRpb25hbCBjb2x1bW5zLgogKiBAdGhyb3dzIFVvZGJjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvZGJjX3ByaW1hcnlrZXlzKCRjb25uZWN0aW9uX2lkLCBzdHJpbmcgJGNhdGFsb2csIHN0cmluZyAkc2NoZW1hLCBzdHJpbmcgJHRhYmxlKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9kYmNfcHJpbWFyeWtleXMoJGNvbm5lY3Rpb25faWQsICRjYXRhbG9nLCAkc2NoZW1hLCAkdGFibGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgVW9kYmNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUHJpbnRzIGFsbCByb3dzIGZyb20gYSByZXN1bHQgaWRlbnRpZmllciBwcm9kdWNlZCBieQogKiBvZGJjX2V4ZWMuIFRoZSByZXN1bHQgaXMgcHJpbnRlZCBpbiBIVE1MIHRhYmxlIGZvcm1hdC4KICogVGhlIGRhdGEgaXMgbm90IGVzY2FwZWQuCiAqCiAqIFRoaXMgZnVuY3Rpb24gaXMgbm90IHN1cHBvc2VkIHRvIGJlIHVzZWQgaW4gcHJvZHVjdGlvbiBlbnZpcm9ubWVudHM7IGl0IGlzCiAqIG1lcmVseSBtZWFudCBmb3IgZGV2ZWxvcG1lbnQgcHVycG9zZXMsIHRvIGdldCBhIHJlc3VsdCBzZXQgcXVpY2tseSByZW5kZXJlZC4KICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHRfaWQgVGhlIHJlc3VsdCBpZGVudGlmaWVyLgogKiBAcGFyYW0gc3RyaW5nICRmb3JtYXQgQWRkaXRpb25hbCBvdmVyYWxsIHRhYmxlIGZvcm1hdHRpbmcuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIG51bWJlciBvZiByb3dzIGluIHRoZSByZXN1bHQuCiAqIEB0aHJvd3MgVW9kYmNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9kYmNfcmVzdWx0X2FsbCgkcmVzdWx0X2lkLCBzdHJpbmcgJGZvcm1hdCA9IG51bGwpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRmb3JtYXQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG9kYmNfcmVzdWx0X2FsbCgkcmVzdWx0X2lkLCAkZm9ybWF0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxvZGJjX3Jlc3VsdF9hbGwoJHJlc3VsdF9pZCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBVb2RiY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBHZXQgcmVzdWx0IGRhdGEKICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHRfaWQgVGhlIE9EQkMgcmVzb3VyY2UuCiAqIEBwYXJhbSBtaXhlZCAkZmllbGQgVGhlIGZpZWxkIG5hbWUgYmVpbmcgcmV0cmlldmVkLiBJdCBjYW4gZWl0aGVyIGJlIGFuIGludGVnZXIgY29udGFpbmluZwogKiB0aGUgY29sdW1uIG51bWJlciBvZiB0aGUgZmllbGQgeW91IHdhbnQ7IG9yIGl0IGNhbiBiZSBhIHN0cmluZwogKiBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBmaWVsZC4KICogQHJldHVybiBtaXhlZCBSZXR1cm5zIHRoZSBzdHJpbmcgY29udGVudHMgb2YgdGhlIGZpZWxkLCBGQUxTRSBvbiBlcnJvciwgTlVMTCBmb3IKICogTlVMTCBkYXRhLCBvciBUUlVFIGZvciBiaW5hcnkgZGF0YS4KICogQHRocm93cyBVb2RiY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2RiY19yZXN1bHQoJHJlc3VsdF9pZCwgJGZpZWxkKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9kYmNfcmVzdWx0KCRyZXN1bHRfaWQsICRmaWVsZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBVb2RiY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSb2xscyBiYWNrIGFsbCBwZW5kaW5nIHN0YXRlbWVudHMgb24gdGhlIGNvbm5lY3Rpb24uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbl9pZCBUaGUgT0RCQyBjb25uZWN0aW9uIGlkZW50aWZpZXIsCiAqIHNlZSBvZGJjX2Nvbm5lY3QgZm9yIGRldGFpbHMuCiAqIEB0aHJvd3MgVW9kYmNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9kYmNfcm9sbGJhY2soJGNvbm5lY3Rpb25faWQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2RiY19yb2xsYmFjaygkY29ubmVjdGlvbl9pZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBVb2RiY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZmlkZGxpbmcgd2l0aCB0aGUgT0RCQyBvcHRpb25zIGZvciBhCiAqIHBhcnRpY3VsYXIgY29ubmVjdGlvbiBvciBxdWVyeSByZXN1bHQuICBJdCB3YXMgd3JpdHRlbiB0byBoZWxwCiAqIGZpbmQgd29yayBhcm91bmQgdG8gcHJvYmxlbXMgaW4gcXVpcmt5IE9EQkMgZHJpdmVycy4gIFlvdSBzaG91bGQKICogcHJvYmFibHkgb25seSB1c2UgdGhpcyBmdW5jdGlvbiBpZiB5b3UgYXJlIGFuIE9EQkMgcHJvZ3JhbW1lciBhbmQKICogdW5kZXJzdGFuZCB0aGUgZWZmZWN0cyB0aGUgdmFyaW91cyBvcHRpb25zIHdpbGwgaGF2ZS4gIFlvdSB3aWxsCiAqIGNlcnRhaW5seSBuZWVkIGEgZ29vZCBPREJDIHJlZmVyZW5jZSB0byBleHBsYWluIGFsbCB0aGUgZGlmZmVyZW50CiAqIG9wdGlvbnMgYW5kIHZhbHVlcyB0aGF0IGNhbiBiZSB1c2VkLiAgRGlmZmVyZW50IGRyaXZlciB2ZXJzaW9ucwogKiBzdXBwb3J0IGRpZmZlcmVudCBvcHRpb25zLgogKgogKiBCZWNhdXNlIHRoZSBlZmZlY3RzIG1heSB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgT0RCQyBkcml2ZXIsIHVzZSBvZgogKiB0aGlzIGZ1bmN0aW9uIGluIHNjcmlwdHMgdG8gYmUgbWFkZSBwdWJsaWNseSBhdmFpbGFibGUgaXMKICogc3Ryb25nbHkgZGlzY291cmFnZWQuICBBbHNvLCBzb21lIE9EQkMgb3B0aW9ucyBhcmUgbm90IGF2YWlsYWJsZQogKiB0byB0aGlzIGZ1bmN0aW9uIGJlY2F1c2UgdGhleSBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIGNvbm5lY3Rpb24KICogaXMgZXN0YWJsaXNoZWQgb3IgdGhlIHF1ZXJ5IGlzIHByZXBhcmVkLiAgSG93ZXZlciwgaWYgb24gYQogKiBwYXJ0aWN1bGFyIGpvYiBpdCBjYW4gbWFrZSBQSFAgd29yayBzbyB5b3VyIGJvc3MgZG9lc24ndCB0ZWxsIHlvdQogKiB0byB1c2UgYSBjb21tZXJjaWFsIHByb2R1Y3QsIHRoYXQncyBhbGwgdGhhdCByZWFsbHkKICogbWF0dGVycy4KICoKICogQHBhcmFtIHJlc291cmNlICRpZCBJcyBhIGNvbm5lY3Rpb24gaWQgb3IgcmVzdWx0IGlkIG9uIHdoaWNoIHRvIGNoYW5nZSB0aGUgc2V0dGluZ3MuCiAqIEZvciBTUUxTZXRDb25uZWN0T3B0aW9uKCksIHRoaXMgaXMgYSBjb25uZWN0aW9uIGlkLgogKiBGb3IgU1FMU2V0U3RtdE9wdGlvbigpLCB0aGlzIGlzIGEgcmVzdWx0IGlkLgogKiBAcGFyYW0gaW50ICRmdW5jdGlvbiBJcyB0aGUgT0RCQyBmdW5jdGlvbiB0byB1c2UuIFRoZSB2YWx1ZSBzaG91bGQgYmUKICogMSBmb3IgU1FMU2V0Q29ubmVjdE9wdGlvbigpIGFuZAogKiAyIGZvciBTUUxTZXRTdG10T3B0aW9uKCkuCiAqIEBwYXJhbSBpbnQgJG9wdGlvbiBUaGUgb3B0aW9uIHRvIHNldC4KICogQHBhcmFtIGludCAkcGFyYW0gVGhlIHZhbHVlIGZvciB0aGUgZ2l2ZW4gb3B0aW9uLgogKiBAdGhyb3dzIFVvZGJjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvZGJjX3NldG9wdGlvbigkaWQsIGludCAkZnVuY3Rpb24sIGludCAkb3B0aW9uLCBpbnQgJHBhcmFtKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9kYmNfc2V0b3B0aW9uKCRpZCwgJGZ1bmN0aW9uLCAkb3B0aW9uLCAkcGFyYW0pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgVW9kYmNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJldHJpZXZlcyBlaXRoZXIgdGhlIG9wdGltYWwgc2V0IG9mIGNvbHVtbnMgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIGEKICogcm93IGluIHRoZSB0YWJsZSwgb3IgY29sdW1ucyB0aGF0IGFyZSBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgd2hlbiBhbnkKICogdmFsdWUgaW4gdGhlIHJvdyBpcyB1cGRhdGVkIGJ5IGEgdHJhbnNhY3Rpb24uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbl9pZCBUaGUgT0RCQyBjb25uZWN0aW9uIGlkZW50aWZpZXIsCiAqIHNlZSBvZGJjX2Nvbm5lY3QgZm9yIGRldGFpbHMuCiAqIEBwYXJhbSBpbnQgJHR5cGUKICogQHBhcmFtIHN0cmluZyAkY2F0YWxvZyBUaGUgY2F0YWxvZyAoJ3F1YWxpZmllcicgaW4gT0RCQyAyIHBhcmxhbmNlKS4KICogQHBhcmFtIHN0cmluZyAkc2NoZW1hIFRoZSBzY2hlbWEgKCdvd25lcicgaW4gT0RCQyAyIHBhcmxhbmNlKS4KICogQHBhcmFtIHN0cmluZyAkdGFibGUgVGhlIHRhYmxlLgogKiBAcGFyYW0gaW50ICRzY29wZSBUaGUgc2NvcGUsIHdoaWNoIG9yZGVycyB0aGUgcmVzdWx0IHNldC4KICogT25lIG9mIFNRTF9TQ09QRV9DVVJST1csIFNRTF9TQ09QRV9UUkFOU0FDVElPTgogKiBvciBTUUxfU0NPUEVfU0VTU0lPTi4KICogQHBhcmFtIGludCAkbnVsbGFibGUgRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHJldHVybiBzcGVjaWFsIGNvbHVtbnMgdGhhdCBjYW4gaGF2ZSBhIE5VTEwgdmFsdWUuCiAqIE9uZSBvZiBTUUxfTk9fTlVMTFMgb3IgU1FMX05VTExBQkxFIC4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGFuIE9EQkMgcmVzdWx0IGlkZW50aWZpZXIuCiAqCiAqIFRoZSByZXN1bHQgc2V0IGhhcyB0aGUgZm9sbG93aW5nIGNvbHVtbnM6CiAqCiAqIFNDT1BFCiAqIENPTFVNTl9OQU1FCiAqIERBVEFfVFlQRQogKiBUWVBFX05BTUUKICogQ09MVU1OX1NJWkUKICogQlVGRkVSX0xFTkdUSAogKiBERUNJTUFMX0RJR0lUUwogKiBQU0VVRE9fQ09MVU1OCiAqCiAqIERyaXZlcnMgY2FuIHJlcG9ydCBhZGRpdGlvbmFsIGNvbHVtbnMuCiAqIEB0aHJvd3MgVW9kYmNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9kYmNfc3BlY2lhbGNvbHVtbnMoJGNvbm5lY3Rpb25faWQsIGludCAkdHlwZSwgc3RyaW5nICRjYXRhbG9nLCBzdHJpbmcgJHNjaGVtYSwgc3RyaW5nICR0YWJsZSwgaW50ICRzY29wZSwgaW50ICRudWxsYWJsZSkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvZGJjX3NwZWNpYWxjb2x1bW5zKCRjb25uZWN0aW9uX2lkLCAkdHlwZSwgJGNhdGFsb2csICRzY2hlbWEsICR0YWJsZSwgJHNjb3BlLCAkbnVsbGFibGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgVW9kYmNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogR2V0IHN0YXRpc3RpY3MgYWJvdXQgYSB0YWJsZSBhbmQgaXRzIGluZGV4ZXMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbl9pZCBUaGUgT0RCQyBjb25uZWN0aW9uIGlkZW50aWZpZXIsCiAqIHNlZSBvZGJjX2Nvbm5lY3QgZm9yIGRldGFpbHMuCiAqIEBwYXJhbSBzdHJpbmcgJGNhdGFsb2cgVGhlIGNhdGFsb2cgKCdxdWFsaWZpZXInIGluIE9EQkMgMiBwYXJsYW5jZSkuCiAqIEBwYXJhbSBzdHJpbmcgJHNjaGVtYSBUaGUgc2NoZW1hICgnb3duZXInIGluIE9EQkMgMiBwYXJsYW5jZSkuCiAqIEBwYXJhbSBzdHJpbmcgJHRhYmxlX25hbWUgVGhlIHRhYmxlIG5hbWUuCiAqIEBwYXJhbSBpbnQgJHVuaXF1ZSBUaGUgdHlwZSBvZiB0aGUgaW5kZXguCiAqIE9uZSBvZiBTUUxfSU5ERVhfVU5JUVVFIG9yIFNRTF9JTkRFWF9BTEwuCiAqIEBwYXJhbSBpbnQgJGFjY3VyYWN5IE9uZSBvZiBTUUxfRU5TVVJFIG9yIFNRTF9RVUlDSy4KICogVGhlIGxhdHRlciByZXF1ZXN0cyB0aGF0IHRoZSBkcml2ZXIgcmV0cmlldmUgdGhlIENBUkRJTkFMSVRZIGFuZAogKiBQQUdFUyBvbmx5IGlmIHRoZXkgYXJlIHJlYWRpbHkgYXZhaWxhYmxlIGZyb20gdGhlIHNlcnZlci4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGFuIE9EQkMgcmVzdWx0IGlkZW50aWZpZXIuCiAqCiAqIFRoZSByZXN1bHQgc2V0IGhhcyB0aGUgZm9sbG93aW5nIGNvbHVtbnM6CiAqCiAqIFRBQkxFX0NBVAogKiBUQUJMRV9TQ0hFTQogKiBUQUJMRV9OQU1FCiAqIE5PTl9VTklRVUUKICogSU5ERVhfUVVBTElGSUVSCiAqIElOREVYX05BTUUKICogVFlQRQogKiBPUkRJTkFMX1BPU0lUSU9OCiAqIENPTFVNTl9OQU1FCiAqIEFTQ19PUl9ERVNDCiAqIENBUkRJTkFMSVRZCiAqIFBBR0VTCiAqIEZJTFRFUl9DT05ESVRJT04KICoKICogRHJpdmVycyBjYW4gcmVwb3J0IGFkZGl0aW9uYWwgY29sdW1ucy4KICogQHRocm93cyBVb2RiY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2RiY19zdGF0aXN0aWNzKCRjb25uZWN0aW9uX2lkLCBzdHJpbmcgJGNhdGFsb2csIHN0cmluZyAkc2NoZW1hLCBzdHJpbmcgJHRhYmxlX25hbWUsIGludCAkdW5pcXVlLCBpbnQgJGFjY3VyYWN5KQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9kYmNfc3RhdGlzdGljcygkY29ubmVjdGlvbl9pZCwgJGNhdGFsb2csICRzY2hlbWEsICR0YWJsZV9uYW1lLCAkdW5pcXVlLCAkYWNjdXJhY3kpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgVW9kYmNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogTGlzdHMgdGFibGVzIGluIHRoZSByZXF1ZXN0ZWQgcmFuZ2UgYW5kIHRoZSBwcml2aWxlZ2VzIGFzc29jaWF0ZWQKICogd2l0aCBlYWNoIHRhYmxlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb25faWQgVGhlIE9EQkMgY29ubmVjdGlvbiBpZGVudGlmaWVyLAogKiBzZWUgb2RiY19jb25uZWN0IGZvciBkZXRhaWxzLgogKiBAcGFyYW0gc3RyaW5nICRjYXRhbG9nIFRoZSBjYXRhbG9nICgncXVhbGlmaWVyJyBpbiBPREJDIDIgcGFybGFuY2UpLgogKiBAcGFyYW0gc3RyaW5nICRzY2hlbWEgVGhlIHNjaGVtYSAoJ293bmVyJyBpbiBPREJDIDIgcGFybGFuY2UpLgogKiBUaGlzIHBhcmFtZXRlciBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgc2VhcmNoIHBhdHRlcm5zOgogKiAlIHRvIG1hdGNoIHplcm8gb3IgbW9yZSBjaGFyYWN0ZXJzLAogKiBhbmQgXyB0byBtYXRjaCBhIHNpbmdsZSBjaGFyYWN0ZXIuCiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIG5hbWUuCiAqIFRoaXMgcGFyYW1ldGVyIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBzZWFyY2ggcGF0dGVybnM6CiAqICUgdG8gbWF0Y2ggemVybyBvciBtb3JlIGNoYXJhY3RlcnMsCiAqIGFuZCBfIHRvIG1hdGNoIGEgc2luZ2xlIGNoYXJhY3Rlci4KICogQHJldHVybiByZXNvdXJjZSBBbiBPREJDIHJlc3VsdCBpZGVudGlmaWVyLgogKgogKiBUaGUgcmVzdWx0IHNldCBoYXMgdGhlIGZvbGxvd2luZyBjb2x1bW5zOgogKgogKiBUQUJMRV9DQVQKICogVEFCTEVfU0NIRU0KICogVEFCTEVfTkFNRQogKiBHUkFOVE9SCiAqIEdSQU5URUUKICogUFJJVklMRUdFCiAqIElTX0dSQU5UQUJMRQogKgogKiBEcml2ZXJzIGNhbiByZXBvcnQgYWRkaXRpb25hbCBjb2x1bW5zLgogKiBAdGhyb3dzIFVvZGJjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvZGJjX3RhYmxlcHJpdmlsZWdlcygkY29ubmVjdGlvbl9pZCwgc3RyaW5nICRjYXRhbG9nLCBzdHJpbmcgJHNjaGVtYSwgc3RyaW5nICRuYW1lKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9kYmNfdGFibGVwcml2aWxlZ2VzKCRjb25uZWN0aW9uX2lkLCAkY2F0YWxvZywgJHNjaGVtYSwgJG5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgVW9kYmNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogTGlzdHMgYWxsIHRhYmxlcyBpbiB0aGUgcmVxdWVzdGVkIHJhbmdlLgogKgogKiBUbyBzdXBwb3J0IGVudW1lcmF0aW9uIG9mIHF1YWxpZmllcnMsIG93bmVycywgYW5kIHRhYmxlIHR5cGVzLAogKiB0aGUgZm9sbG93aW5nIHNwZWNpYWwgc2VtYW50aWNzIGZvciB0aGUKICogY2F0YWxvZywgc2NoZW1hLAogKiBuYW1lLCBhbmQKICogdGFibGVfdHlwZSBhcmUgYXZhaWxhYmxlOgogKgogKgogKgogKiBJZiBjYXRhbG9nIGlzIGEgc2luZ2xlIHBlcmNlbnQKICogY2hhcmFjdGVyICglKSBhbmQgc2NoZW1hIGFuZAogKiBuYW1lIGFyZSBlbXB0eSBzdHJpbmdzLCB0aGVuIHRoZSByZXN1bHQKICogc2V0IGNvbnRhaW5zIGEgbGlzdCBvZiB2YWxpZCBxdWFsaWZpZXJzIGZvciB0aGUgZGF0YQogKiBzb3VyY2UuIChBbGwgY29sdW1ucyBleGNlcHQgdGhlIFRBQkxFX1FVQUxJRklFUiBjb2x1bW4gY29udGFpbgogKiBOVUxMcy4pCiAqCiAqCiAqCiAqCiAqIElmIHNjaGVtYSBpcyBhIHNpbmdsZSBwZXJjZW50IGNoYXJhY3RlcgogKiAoJSkgYW5kIGNhdGFsb2cgYW5kCiAqIG5hbWUgYXJlIGVtcHR5IHN0cmluZ3MsIHRoZW4gdGhlIHJlc3VsdAogKiBzZXQgY29udGFpbnMgYSBsaXN0IG9mIHZhbGlkIG93bmVycyBmb3IgdGhlIGRhdGEgc291cmNlLiAoQWxsCiAqIGNvbHVtbnMgZXhjZXB0IHRoZSBUQUJMRV9PV05FUiBjb2x1bW4gY29udGFpbgogKiBOVUxMcy4pCiAqCiAqCiAqCiAqCiAqIElmIHRhYmxlX3R5cGUgaXMgYSBzaW5nbGUgcGVyY2VudAogKiBjaGFyYWN0ZXIgKCUpIGFuZCBjYXRhbG9nLAogKiBzY2hlbWEgYW5kIG5hbWUKICogYXJlIGVtcHR5IHN0cmluZ3MsIHRoZW4gdGhlIHJlc3VsdCBzZXQgY29udGFpbnMgYSBsaXN0IG9mCiAqIHZhbGlkIHRhYmxlIHR5cGVzIGZvciB0aGUgZGF0YSBzb3VyY2UuIChBbGwgY29sdW1ucyBleGNlcHQgdGhlCiAqIFRBQkxFX1RZUEUgY29sdW1uIGNvbnRhaW4gTlVMTHMuKQogKgogKgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb25faWQgVGhlIE9EQkMgY29ubmVjdGlvbiBpZGVudGlmaWVyLAogKiBzZWUgb2RiY19jb25uZWN0IGZvciBkZXRhaWxzLgogKiBAcGFyYW0gc3RyaW5nICRjYXRhbG9nIFRoZSBjYXRhbG9nICgncXVhbGlmaWVyJyBpbiBPREJDIDIgcGFybGFuY2UpLgogKiBAcGFyYW0gc3RyaW5nICRzY2hlbWEgVGhlIHNjaGVtYSAoJ293bmVyJyBpbiBPREJDIDIgcGFybGFuY2UpLgogKiBUaGlzIHBhcmFtZXRlciBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgc2VhcmNoIHBhdHRlcm5zOgogKiAlIHRvIG1hdGNoIHplcm8gb3IgbW9yZSBjaGFyYWN0ZXJzLAogKiBhbmQgXyB0byBtYXRjaCBhIHNpbmdsZSBjaGFyYWN0ZXIuCiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIG5hbWUuCiAqIFRoaXMgcGFyYW1ldGVyIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBzZWFyY2ggcGF0dGVybnM6CiAqICUgdG8gbWF0Y2ggemVybyBvciBtb3JlIGNoYXJhY3RlcnMsCiAqIGFuZCBfIHRvIG1hdGNoIGEgc2luZ2xlIGNoYXJhY3Rlci4KICogQHBhcmFtIHN0cmluZyAkdHlwZXMgSWYgdGFibGVfdHlwZSBpcyBub3QgYW4gZW1wdHkgc3RyaW5nLCBpdAogKiBtdXN0IGNvbnRhaW4gYSBsaXN0IG9mIGNvbW1hLXNlcGFyYXRlZCB2YWx1ZXMgZm9yIHRoZSB0eXBlcyBvZgogKiBpbnRlcmVzdDsgZWFjaCB2YWx1ZSBtYXkgYmUgZW5jbG9zZWQgaW4gc2luZ2xlIHF1b3RlcyAoJykgb3IKICogdW5xdW90ZWQuIEZvciBleGFtcGxlLCAnVEFCTEUnLCdWSUVXJyBvciBUQUJMRSwgVklFVy4gIElmIHRoZQogKiBkYXRhIHNvdXJjZSBkb2VzIG5vdCBzdXBwb3J0IGEgc3BlY2lmaWVkIHRhYmxlIHR5cGUsCiAqIG9kYmNfdGFibGVzIGRvZXMgbm90IHJldHVybiBhbnkgcmVzdWx0cyBmb3IKICogdGhhdCB0eXBlLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYW4gT0RCQyByZXN1bHQgaWRlbnRpZmllciBjb250YWluaW5nIHRoZSBpbmZvcm1hdGlvbi4KICoKICogVGhlIHJlc3VsdCBzZXQgaGFzIHRoZSBmb2xsb3dpbmcgY29sdW1uczoKICoKICogVEFCTEVfQ0FUCiAqIFRBQkxFX1NDSEVNCiAqIFRBQkxFX05BTUUKICogVEFCTEVfVFlQRQogKiBSRU1BUktTCiAqCiAqIERyaXZlcnMgY2FuIHJlcG9ydCBhZGRpdGlvbmFsIGNvbHVtbnMuCiAqIEB0aHJvd3MgVW9kYmNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9kYmNfdGFibGVzKCRjb25uZWN0aW9uX2lkLCBzdHJpbmcgJGNhdGFsb2cgPSBudWxsLCBzdHJpbmcgJHNjaGVtYSA9IG51bGwsIHN0cmluZyAkbmFtZSA9IG51bGwsIHN0cmluZyAkdHlwZXMgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHR5cGVzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvZGJjX3RhYmxlcygkY29ubmVjdGlvbl9pZCwgJGNhdGFsb2csICRzY2hlbWEsICRuYW1lLCAkdHlwZXMpOwogICAgfSBlbHNlaWYgKCRuYW1lICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvZGJjX3RhYmxlcygkY29ubmVjdGlvbl9pZCwgJGNhdGFsb2csICRzY2hlbWEsICRuYW1lKTsKICAgIH0gZWxzZWlmICgkc2NoZW1hICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvZGJjX3RhYmxlcygkY29ubmVjdGlvbl9pZCwgJGNhdGFsb2csICRzY2hlbWEpOwogICAgfSBlbHNlaWYgKCRjYXRhbG9nICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvZGJjX3RhYmxlcygkY29ubmVjdGlvbl9pZCwgJGNhdGFsb2cpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG9kYmNfdGFibGVzKCRjb25uZWN0aW9uX2lkKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFVvZGJjRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/uopz.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xVb3B6RXhjZXB0aW9uOwoKLyoqCiAqIE1ha2VzIGNsYXNzIGV4dGVuZCBwYXJlbnQKICoKICogQHBhcmFtIHN0cmluZyAkY2xhc3MgVGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRvIGV4dGVuZAogKiBAcGFyYW0gc3RyaW5nICRwYXJlbnQgVGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRvIGluaGVyaXQKICogQHRocm93cyBVb3B6RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB1b3B6X2V4dGVuZChzdHJpbmcgJGNsYXNzLCBzdHJpbmcgJHBhcmVudCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFx1b3B6X2V4dGVuZCgkY2xhc3MsICRwYXJlbnQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgVW9wekV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogTWFrZXMgY2xhc3MgaW1wbGVtZW50IGludGVyZmFjZQogKgogKiBAcGFyYW0gc3RyaW5nICRjbGFzcwogKiBAcGFyYW0gc3RyaW5nICRpbnRlcmZhY2UKICogQHRocm93cyBVb3B6RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB1b3B6X2ltcGxlbWVudChzdHJpbmcgJGNsYXNzLCBzdHJpbmcgJGludGVyZmFjZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFx1b3B6X2ltcGxlbWVudCgkY2xhc3MsICRpbnRlcmZhY2UpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgVW9wekV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/url.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xVcmxFeGNlcHRpb247CgovKioKICogRGVjb2RlcyBhIGJhc2U2NCBlbmNvZGVkIGRhdGEuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIGVuY29kZWQgZGF0YS4KICogQHBhcmFtIGJvb2wgJHN0cmljdCBJZiB0aGUgc3RyaWN0IHBhcmFtZXRlciBpcyBzZXQgdG8gVFJVRQogKiB0aGVuIHRoZSBiYXNlNjRfZGVjb2RlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuCiAqIEZBTFNFIGlmIHRoZSBpbnB1dCBjb250YWlucyBjaGFyYWN0ZXIgZnJvbSBvdXRzaWRlIHRoZSBiYXNlNjQKICogYWxwaGFiZXQuIE90aGVyd2lzZSBpbnZhbGlkIGNoYXJhY3RlcnMgd2lsbCBiZSBzaWxlbnRseSBkaXNjYXJkZWQuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIGRlY29kZWQgZGF0YS4gVGhlIHJldHVybmVkIGRhdGEgbWF5IGJlCiAqIGJpbmFyeS4KICogQHRocm93cyBVcmxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGJhc2U2NF9kZWNvZGUoc3RyaW5nICRkYXRhLCBib29sICRzdHJpY3QgPSBmYWxzZSk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGJhc2U2NF9kZWNvZGUoJGRhdGEsICRzdHJpY3QpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgVXJsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGdldF9oZWFkZXJzIHJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgaGVhZGVycyBzZW50CiAqIGJ5IHRoZSBzZXJ2ZXIgaW4gcmVzcG9uc2UgdG8gYSBIVFRQIHJlcXVlc3QuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHVybCBUaGUgdGFyZ2V0IFVSTC4KICogQHBhcmFtIGludCAkZm9ybWF0IElmIHRoZSBvcHRpb25hbCBmb3JtYXQgcGFyYW1ldGVyIGlzIHNldCB0byBub24temVybywKICogZ2V0X2hlYWRlcnMgcGFyc2VzIHRoZSByZXNwb25zZSBhbmQgc2V0cyB0aGUKICogYXJyYXkncyBrZXlzLgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbnRleHQgQSB2YWxpZCBjb250ZXh0IHJlc291cmNlIGNyZWF0ZWQgd2l0aAogKiBzdHJlYW1fY29udGV4dF9jcmVhdGUuCiAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBhbiBpbmRleGVkIG9yIGFzc29jaWF0aXZlIGFycmF5IHdpdGggdGhlIGhlYWRlcnMuCiAqIEB0aHJvd3MgVXJsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnZXRfaGVhZGVycyhzdHJpbmcgJHVybCwgaW50ICRmb3JtYXQgPSAwLCAkY29udGV4dCA9IG51bGwpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGNvbnRleHQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGdldF9oZWFkZXJzKCR1cmwsICRmb3JtYXQsICRjb250ZXh0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxnZXRfaGVhZGVycygkdXJsLCAkZm9ybWF0KTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFVybEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHBhcnNlcyBhIFVSTCBhbmQgcmV0dXJucyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBjb250YWluaW5nIGFueQogKiBvZiB0aGUgdmFyaW91cyBjb21wb25lbnRzIG9mIHRoZSBVUkwgdGhhdCBhcmUgcHJlc2VudC4KICogVGhlIHZhbHVlcyBvZiB0aGUgYXJyYXkgZWxlbWVudHMgYXJlIG5vdCBVUkwgZGVjb2RlZC4KICoKICogVGhpcyBmdW5jdGlvbiBpcyBub3QgbWVhbnQgdG8gdmFsaWRhdGUKICogdGhlIGdpdmVuIFVSTCwgaXQgb25seSBicmVha3MgaXQgdXAgaW50byB0aGUgYWJvdmUgbGlzdGVkIHBhcnRzLiBQYXJ0aWFsCiAqIFVSTHMgYXJlIGFsc28gYWNjZXB0ZWQsIHBhcnNlX3VybCB0cmllcyBpdHMgYmVzdCB0bwogKiBwYXJzZSB0aGVtIGNvcnJlY3RseS4KICoKICogQHBhcmFtIHN0cmluZyAkdXJsIFRoZSBVUkwgdG8gcGFyc2UuIEludmFsaWQgY2hhcmFjdGVycyBhcmUgcmVwbGFjZWQgYnkKICogXy4KICogQHBhcmFtIGludCAkY29tcG9uZW50IFNwZWNpZnkgb25lIG9mIFBIUF9VUkxfU0NIRU1FLAogKiBQSFBfVVJMX0hPU1QsIFBIUF9VUkxfUE9SVCwKICogUEhQX1VSTF9VU0VSLCBQSFBfVVJMX1BBU1MsCiAqIFBIUF9VUkxfUEFUSCwgUEhQX1VSTF9RVUVSWQogKiBvciBQSFBfVVJMX0ZSQUdNRU5UIHRvIHJldHJpZXZlIGp1c3QgYSBzcGVjaWZpYwogKiBVUkwgY29tcG9uZW50IGFzIGEgc3RyaW5nIChleGNlcHQgd2hlbgogKiBQSFBfVVJMX1BPUlQgaXMgZ2l2ZW4sIGluIHdoaWNoIGNhc2UgdGhlIHJldHVybgogKiB2YWx1ZSB3aWxsIGJlIGFuIGludGVnZXIpLgogKiBAcmV0dXJuIG1peGVkIE9uIHNlcmlvdXNseSBtYWxmb3JtZWQgVVJMcywgcGFyc2VfdXJsLgogKgogKiBJZiB0aGUgY29tcG9uZW50IHBhcmFtZXRlciBpcyBvbWl0dGVkLCBhbgogKiBhc3NvY2lhdGl2ZSBhcnJheSBpcyByZXR1cm5lZC4gQXQgbGVhc3Qgb25lIGVsZW1lbnQgd2lsbCBiZQogKiBwcmVzZW50IHdpdGhpbiB0aGUgYXJyYXkuIFBvdGVudGlhbCBrZXlzIHdpdGhpbiB0aGlzIGFycmF5IGFyZToKICoKICoKICoKICogc2NoZW1lIC0gZS5nLiBodHRwCiAqCiAqCiAqCiAqCiAqIGhvc3QKICoKICoKICoKICoKICogcG9ydAogKgogKgogKgogKgogKiB1c2VyCiAqCiAqCiAqCiAqCiAqIHBhc3MKICoKICoKICoKICoKICogcGF0aAogKgogKgogKgogKgogKiBxdWVyeSAtIGFmdGVyIHRoZSBxdWVzdGlvbiBtYXJrID8KICoKICoKICoKICoKICogZnJhZ21lbnQgLSBhZnRlciB0aGUgaGFzaG1hcmsgIwogKgogKgogKgogKgogKiBJZiB0aGUgY29tcG9uZW50IHBhcmFtZXRlciBpcyBzcGVjaWZpZWQsCiAqIHBhcnNlX3VybCByZXR1cm5zIGEgc3RyaW5nIChvciBhbgogKiBpbnRlZ2VyLCBpbiB0aGUgY2FzZSBvZiBQSFBfVVJMX1BPUlQpCiAqIGluc3RlYWQgb2YgYW4gYXJyYXkuIElmIHRoZSByZXF1ZXN0ZWQgY29tcG9uZW50IGRvZXNuJ3QgZXhpc3QKICogd2l0aGluIHRoZSBnaXZlbiBVUkwsIE5VTEwgd2lsbCBiZSByZXR1cm5lZC4KICogQHRocm93cyBVcmxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBhcnNlX3VybChzdHJpbmcgJHVybCwgaW50ICRjb21wb25lbnQgPSAtMSkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwYXJzZV91cmwoJHVybCwgJGNvbXBvbmVudCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBVcmxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/var.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xWYXJFeGNlcHRpb247CgovKioKICogU2V0IHRoZSB0eXBlIG9mIHZhcmlhYmxlIHZhciB0bwogKiB0eXBlLgogKgogKiBAcGFyYW0gbWl4ZWQgJHZhciBUaGUgdmFyaWFibGUgYmVpbmcgY29udmVydGVkLgogKiBAcGFyYW0gc3RyaW5nICR0eXBlIFBvc3NpYmxlcyB2YWx1ZXMgb2YgdHlwZSBhcmU6CiAqCiAqCiAqCiAqICJib29sZWFuIiBvciAiYm9vbCIKICoKICoKICoKICoKICogImludGVnZXIiIG9yICJpbnQiCiAqCiAqCiAqCiAqCiAqICJmbG9hdCIgb3IgImRvdWJsZSIKICoKICoKICoKICoKICogInN0cmluZyIKICoKICoKICoKICoKICogImFycmF5IgogKgogKgogKgogKgogKiAib2JqZWN0IgogKgogKgogKgogKgogKiAibnVsbCIKICoKICoKICoKICogQHRocm93cyBWYXJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNldHR5cGUoJiR2YXIsIHN0cmluZyAkdHlwZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzZXR0eXBlKCR2YXIsICR0eXBlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFZhckV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/xdiff.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xYZGlmZkV4Y2VwdGlvbjsKCi8qKgogKiBNYWtlcyBhIGJpbmFyeSBkaWZmIG9mIHR3byBmaWxlcyBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gYSBwYXRjaCBmaWxlLgogKiBUaGlzIGZ1bmN0aW9uIHdvcmtzIHdpdGggYm90aCB0ZXh0IGFuZCBiaW5hcnkgZmlsZXMuIFJlc3VsdGluZyBwYXRjaAogKiBmaWxlIGNhbiBiZSBsYXRlciBhcHBsaWVkIHVzaW5nIHhkaWZmX2ZpbGVfYnBhdGNoL3hkaWZmX3N0cmluZ19icGF0Y2guCiAqCiAqIEBwYXJhbSBzdHJpbmcgJG9sZF9maWxlIFBhdGggdG8gdGhlIGZpcnN0IGZpbGUuIFRoaXMgZmlsZSBhY3RzIGFzICJvbGQiIGZpbGUuCiAqIEBwYXJhbSBzdHJpbmcgJG5ld19maWxlIFBhdGggdG8gdGhlIHNlY29uZCBmaWxlLiBUaGlzIGZpbGUgYWN0cyBhcyAibmV3IiBmaWxlLgogKiBAcGFyYW0gc3RyaW5nICRkZXN0IFBhdGggb2YgdGhlIHJlc3VsdGluZyBwYXRjaCBmaWxlLiBSZXN1bHRpbmcgZmlsZSBjb250YWlucyBkaWZmZXJlbmNlcwogKiBiZXR3ZWVuICJvbGQiIGFuZCAibmV3IiBmaWxlcy4gSXQgaXMgaW4gYmluYXJ5IGZvcm1hdCBhbmQgaXMgaHVtYW4tdW5yZWFkYWJsZS4KICogQHRocm93cyBYZGlmZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24geGRpZmZfZmlsZV9iZGlmZihzdHJpbmcgJG9sZF9maWxlLCBzdHJpbmcgJG5ld19maWxlLCBzdHJpbmcgJGRlc3QpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBceGRpZmZfZmlsZV9iZGlmZigkb2xkX2ZpbGUsICRuZXdfZmlsZSwgJGRlc3QpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgWGRpZmZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFBhdGNoZXMgYSBmaWxlIHdpdGggYSBiaW5hcnkKICogcGF0Y2ggYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluIGEgZmlsZSBkZXN0LgogKiBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgcGF0Y2hlcyBjcmVhdGVkIGJvdGggdmlhIHhkaWZmX2ZpbGVfYmRpZmYKICogYW5kIHhkaWZmX2ZpbGVfcmFiZGlmZiBmdW5jdGlvbnMgb3IgdGhlaXIgc3RyaW5nIGNvdW50ZXJwYXJ0cy4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZSBUaGUgb3JpZ2luYWwgZmlsZS4KICogQHBhcmFtIHN0cmluZyAkcGF0Y2ggVGhlIGJpbmFyeSBwYXRjaCBmaWxlLgogKiBAcGFyYW0gc3RyaW5nICRkZXN0IFBhdGggb2YgdGhlIHJlc3VsdGluZyBmaWxlLgogKiBAdGhyb3dzIFhkaWZmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB4ZGlmZl9maWxlX2JwYXRjaChzdHJpbmcgJGZpbGUsIHN0cmluZyAkcGF0Y2gsIHN0cmluZyAkZGVzdCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFx4ZGlmZl9maWxlX2JwYXRjaCgkZmlsZSwgJHBhdGNoLCAkZGVzdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBYZGlmZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogTWFrZXMgYSBiaW5hcnkgZGlmZiBvZiB0d28gZmlsZXMgYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluIGEgcGF0Y2ggZmlsZS4KICogVGhpcyBmdW5jdGlvbiB3b3JrcyB3aXRoIGJvdGggdGV4dCBhbmQgYmluYXJ5IGZpbGVzLiBSZXN1bHRpbmcgcGF0Y2gKICogZmlsZSBjYW4gYmUgbGF0ZXIgYXBwbGllZCB1c2luZyB4ZGlmZl9maWxlX2JwYXRjaC4KICoKICogU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDEuNS4wIHRoaXMgZnVuY3Rpb24gaXMgYW4gYWxpYXMgb2YgeGRpZmZfZmlsZV9iZGlmZi4KICoKICogQHBhcmFtIHN0cmluZyAkb2xkX2ZpbGUgUGF0aCB0byB0aGUgZmlyc3QgZmlsZS4gVGhpcyBmaWxlIGFjdHMgYXMgIm9sZCIgZmlsZS4KICogQHBhcmFtIHN0cmluZyAkbmV3X2ZpbGUgUGF0aCB0byB0aGUgc2Vjb25kIGZpbGUuIFRoaXMgZmlsZSBhY3RzIGFzICJuZXciIGZpbGUuCiAqIEBwYXJhbSBzdHJpbmcgJGRlc3QgUGF0aCBvZiB0aGUgcmVzdWx0aW5nIHBhdGNoIGZpbGUuIFJlc3VsdGluZyBmaWxlIGNvbnRhaW5zIGRpZmZlcmVuY2VzCiAqIGJldHdlZW4gIm9sZCIgYW5kICJuZXciIGZpbGVzLiBJdCBpcyBpbiBiaW5hcnkgZm9ybWF0IGFuZCBpcyBodW1hbi11bnJlYWRhYmxlLgogKiBAdGhyb3dzIFhkaWZmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB4ZGlmZl9maWxlX2RpZmZfYmluYXJ5KHN0cmluZyAkb2xkX2ZpbGUsIHN0cmluZyAkbmV3X2ZpbGUsIHN0cmluZyAkZGVzdCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFx4ZGlmZl9maWxlX2RpZmZfYmluYXJ5KCRvbGRfZmlsZSwgJG5ld19maWxlLCAkZGVzdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBYZGlmZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogTWFrZXMgYW4gdW5pZmllZCBkaWZmIGNvbnRhaW5pbmcgZGlmZmVyZW5jZXMgYmV0d2VlbiBvbGRfZmlsZSBhbmQKICogbmV3X2ZpbGUgYW5kIHN0b3JlcyBpdCBpbiBkZXN0IGZpbGUuIFRoZQogKiByZXN1bHRpbmcgZmlsZSBpcyBodW1hbi1yZWFkYWJsZS4gQW4gb3B0aW9uYWwgY29udGV4dCBwYXJhbWV0ZXIKICogc3BlY2lmaWVzIGhvdyBtYW55IGxpbmVzIG9mIGNvbnRleHQgc2hvdWxkIGJlIGFkZGVkIGFyb3VuZCBlYWNoIGNoYW5nZS4KICogU2V0dGluZyBtaW5pbWFsIHBhcmFtZXRlciB0byB0cnVlIHdpbGwgcmVzdWx0IGluIG91dHB1dHRpbmcgdGhlIHNob3J0ZXN0CiAqIHBhdGNoIGZpbGUgcG9zc2libGUgKGNhbiB0YWtlIGEgbG9uZyB0aW1lKS4KICoKICogQHBhcmFtIHN0cmluZyAkb2xkX2ZpbGUgUGF0aCB0byB0aGUgZmlyc3QgZmlsZS4gVGhpcyBmaWxlIGFjdHMgYXMgIm9sZCIgZmlsZS4KICogQHBhcmFtIHN0cmluZyAkbmV3X2ZpbGUgUGF0aCB0byB0aGUgc2Vjb25kIGZpbGUuIFRoaXMgZmlsZSBhY3RzIGFzICJuZXciIGZpbGUuCiAqIEBwYXJhbSBzdHJpbmcgJGRlc3QgUGF0aCBvZiB0aGUgcmVzdWx0aW5nIHBhdGNoIGZpbGUuCiAqIEBwYXJhbSBpbnQgJGNvbnRleHQgSW5kaWNhdGVzIGhvdyBtYW55IGxpbmVzIG9mIGNvbnRleHQgeW91IHdhbnQgdG8gaW5jbHVkZSBpbiBkaWZmCiAqIHJlc3VsdC4KICogQHBhcmFtIGJvb2wgJG1pbmltYWwgU2V0IHRoaXMgcGFyYW1ldGVyIHRvIFRSVUUgaWYgeW91IHdhbnQgdG8gbWluaW1hbGl6ZSBzaXplIG9mIHRoZSByZXN1bHQKICogKGNhbiB0YWtlIGEgbG9uZyB0aW1lKS4KICogQHRocm93cyBYZGlmZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24geGRpZmZfZmlsZV9kaWZmKHN0cmluZyAkb2xkX2ZpbGUsIHN0cmluZyAkbmV3X2ZpbGUsIHN0cmluZyAkZGVzdCwgaW50ICRjb250ZXh0ID0gMywgYm9vbCAkbWluaW1hbCA9IGZhbHNlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHhkaWZmX2ZpbGVfZGlmZigkb2xkX2ZpbGUsICRuZXdfZmlsZSwgJGRlc3QsICRjb250ZXh0LCAkbWluaW1hbCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBYZGlmZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUGF0Y2hlcyBhIGZpbGUgd2l0aCBhIGJpbmFyeQogKiBwYXRjaCBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gYSBmaWxlIGRlc3QuCiAqIFRoaXMgZnVuY3Rpb24gYWNjZXB0cyBwYXRjaGVzIGNyZWF0ZWQgYm90aCB2aWEgeGRpZmZfZmlsZV9iZGlmZgogKiBvciB4ZGlmZl9maWxlX3JhYmRpZmYgZnVuY3Rpb25zIG9yIHRoZWlyIHN0cmluZyBjb3VudGVycGFydHMuCiAqCiAqIFN0YXJ0aW5nIHdpdGggdmVyc2lvbiAxLjUuMCB0aGlzIGZ1bmN0aW9uIGlzIGFuIGFsaWFzIG9mIHhkaWZmX2ZpbGVfYnBhdGNoLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlIFRoZSBvcmlnaW5hbCBmaWxlLgogKiBAcGFyYW0gc3RyaW5nICRwYXRjaCBUaGUgYmluYXJ5IHBhdGNoIGZpbGUuCiAqIEBwYXJhbSBzdHJpbmcgJGRlc3QgUGF0aCBvZiB0aGUgcmVzdWx0aW5nIGZpbGUuCiAqIEB0aHJvd3MgWGRpZmZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHhkaWZmX2ZpbGVfcGF0Y2hfYmluYXJ5KHN0cmluZyAkZmlsZSwgc3RyaW5nICRwYXRjaCwgc3RyaW5nICRkZXN0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHhkaWZmX2ZpbGVfcGF0Y2hfYmluYXJ5KCRmaWxlLCAkcGF0Y2gsICRkZXN0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFhkaWZmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBNYWtlcyBhIGJpbmFyeSBkaWZmIG9mIHR3byBmaWxlcyBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gYSBwYXRjaCBmaWxlLgogKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgZnVuY3Rpb24gYW5kIHhkaWZmX2ZpbGVfYmRpZmYgaXMgZGlmZmVyZW50CiAqIGFsZ29yaXRobSB1c2VkIHdoaWNoIHNob3VsZCByZXN1bHQgaW4gZmFzdGVyIGV4ZWN1dGlvbiBhbmQgc21hbGxlciBkaWZmIHByb2R1Y2VkLgogKiBUaGlzIGZ1bmN0aW9uIHdvcmtzIHdpdGggYm90aCB0ZXh0IGFuZCBiaW5hcnkgZmlsZXMuIFJlc3VsdGluZyBwYXRjaAogKiBmaWxlIGNhbiBiZSBsYXRlciBhcHBsaWVkIHVzaW5nIHhkaWZmX2ZpbGVfYnBhdGNoL3hkaWZmX3N0cmluZ19icGF0Y2guCiAqCiAqIEZvciBtb3JlIGRldGFpbHMgYWJvdXQgZGlmZmVyZW5jZXMgYmV0d2VlbiBhbGdvcml0aG0gdXNlZCBwbGVhc2UgY2hlY2sgbGlieGRpZmYKICogd2Vic2l0ZS4KICoKICogQHBhcmFtIHN0cmluZyAkb2xkX2ZpbGUgUGF0aCB0byB0aGUgZmlyc3QgZmlsZS4gVGhpcyBmaWxlIGFjdHMgYXMgIm9sZCIgZmlsZS4KICogQHBhcmFtIHN0cmluZyAkbmV3X2ZpbGUgUGF0aCB0byB0aGUgc2Vjb25kIGZpbGUuIFRoaXMgZmlsZSBhY3RzIGFzICJuZXciIGZpbGUuCiAqIEBwYXJhbSBzdHJpbmcgJGRlc3QgUGF0aCBvZiB0aGUgcmVzdWx0aW5nIHBhdGNoIGZpbGUuIFJlc3VsdGluZyBmaWxlIGNvbnRhaW5zIGRpZmZlcmVuY2VzCiAqIGJldHdlZW4gIm9sZCIgYW5kICJuZXciIGZpbGVzLiBJdCBpcyBpbiBiaW5hcnkgZm9ybWF0IGFuZCBpcyBodW1hbi11bnJlYWRhYmxlLgogKiBAdGhyb3dzIFhkaWZmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB4ZGlmZl9maWxlX3JhYmRpZmYoc3RyaW5nICRvbGRfZmlsZSwgc3RyaW5nICRuZXdfZmlsZSwgc3RyaW5nICRkZXN0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHhkaWZmX2ZpbGVfcmFiZGlmZigkb2xkX2ZpbGUsICRuZXdfZmlsZSwgJGRlc3QpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgWGRpZmZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFBhdGNoZXMgYSBzdHJpbmcgc3RyIHdpdGggYSBiaW5hcnkgcGF0Y2guCiAqIFRoaXMgZnVuY3Rpb24gYWNjZXB0cyBwYXRjaGVzIGNyZWF0ZWQgYm90aCB2aWEgeGRpZmZfc3RyaW5nX2JkaWZmCiAqIGFuZCB4ZGlmZl9zdHJpbmdfcmFiZGlmZiBmdW5jdGlvbnMgb3IgdGhlaXIgZmlsZSBjb3VudGVycGFydHMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHN0ciBUaGUgb3JpZ2luYWwgYmluYXJ5IHN0cmluZy4KICogQHBhcmFtIHN0cmluZyAkcGF0Y2ggVGhlIGJpbmFyeSBwYXRjaCBzdHJpbmcuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIHBhdGNoZWQgc3RyaW5nLgogKiBAdGhyb3dzIFhkaWZmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB4ZGlmZl9zdHJpbmdfYnBhdGNoKHN0cmluZyAkc3RyLCBzdHJpbmcgJHBhdGNoKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBceGRpZmZfc3RyaW5nX2JwYXRjaCgkc3RyLCAkcGF0Y2gpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgWGRpZmZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUGF0Y2hlcyBhIHN0cmluZyBzdHIgd2l0aCBhIGJpbmFyeSBwYXRjaC4KICogVGhpcyBmdW5jdGlvbiBhY2NlcHRzIHBhdGNoZXMgY3JlYXRlZCBib3RoIHZpYSB4ZGlmZl9zdHJpbmdfYmRpZmYKICogYW5kIHhkaWZmX3N0cmluZ19yYWJkaWZmIGZ1bmN0aW9ucyBvciB0aGVpciBmaWxlIGNvdW50ZXJwYXJ0cy4KICoKICogU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDEuNS4wIHRoaXMgZnVuY3Rpb24gaXMgYW4gYWxpYXMgb2YgeGRpZmZfc3RyaW5nX2JwYXRjaC4KICoKICogQHBhcmFtIHN0cmluZyAkc3RyIFRoZSBvcmlnaW5hbCBiaW5hcnkgc3RyaW5nLgogKiBAcGFyYW0gc3RyaW5nICRwYXRjaCBUaGUgYmluYXJ5IHBhdGNoIHN0cmluZy4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgcGF0Y2hlZCBzdHJpbmcuCiAqIEB0aHJvd3MgWGRpZmZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHhkaWZmX3N0cmluZ19wYXRjaF9iaW5hcnkoc3RyaW5nICRzdHIsIHN0cmluZyAkcGF0Y2gpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFx4ZGlmZl9zdHJpbmdfcGF0Y2hfYmluYXJ5KCRzdHIsICRwYXRjaCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBYZGlmZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBQYXRjaGVzIGEgc3RyIHN0cmluZyB3aXRoIGFuIHVuaWZpZWQgcGF0Y2ggaW4gcGF0Y2ggcGFyYW1ldGVyCiAqIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuIHBhdGNoIGhhcyB0byBiZSBhbiB1bmlmaWVkIGRpZmYgY3JlYXRlZCBieQogKiB4ZGlmZl9maWxlX2RpZmYveGRpZmZfc3RyaW5nX2RpZmYgZnVuY3Rpb24uCiAqIEFuIG9wdGlvbmFsIGZsYWdzIHBhcmFtZXRlciBzcGVjaWZpZXMgbW9kZSBvZiBvcGVyYXRpb24uIEFueQogKiByZWplY3RlZCBwYXJ0cyBvZiB0aGUgcGF0Y2ggd2lsbCBiZSBzdG9yZWQgaW5zaWRlIGVycm9yIHZhcmlhYmxlIGlmCiAqIGl0IGlzIHByb3ZpZGVkLgogKgogKiBAcGFyYW0gc3RyaW5nICRzdHIgVGhlIG9yaWdpbmFsIHN0cmluZy4KICogQHBhcmFtIHN0cmluZyAkcGF0Y2ggVGhlIHVuaWZpZWQgcGF0Y2ggc3RyaW5nLiBJdCBoYXMgdG8gYmUgY3JlYXRlZCB1c2luZyB4ZGlmZl9zdHJpbmdfZGlmZiwKICogeGRpZmZfZmlsZV9kaWZmIGZ1bmN0aW9ucyBvciBjb21wYXRpYmxlIHRvb2xzLgogKiBAcGFyYW0gaW50ICRmbGFncyBmbGFncyBjYW4gYmUgZWl0aGVyCiAqIFhESUZGX1BBVENIX05PUk1BTCAoZGVmYXVsdCBtb2RlLCBub3JtYWwgcGF0Y2gpCiAqIG9yIFhESUZGX1BBVENIX1JFVkVSU0UgKHJldmVyc2VkIHBhdGNoKS4KICoKICogU3RhcnRpbmcgZnJvbSB2ZXJzaW9uIDEuNS4wLCB5b3UgY2FuIGFsc28gdXNlIGJpbmFyeSBPUiB0byBlbmFibGUKICogWERJRkZfUEFUQ0hfSUdOT1JFU1BBQ0UgZmxhZy4KICogQHBhcmFtIHN0cmluZ3xudWxsICRlcnJvciBJZiBwcm92aWRlZCB0aGVuIHJlamVjdGVkIHBhcnRzIGFyZSBzdG9yZWQgaW5zaWRlIHRoaXMgdmFyaWFibGUuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIHBhdGNoZWQgc3RyaW5nLgogKiBAdGhyb3dzIFhkaWZmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB4ZGlmZl9zdHJpbmdfcGF0Y2goc3RyaW5nICRzdHIsIHN0cmluZyAkcGF0Y2gsIGludCAkZmxhZ3MgPSBudWxsLCA/c3RyaW5nICYkZXJyb3IgPSBudWxsKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkZXJyb3IgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHhkaWZmX3N0cmluZ19wYXRjaCgkc3RyLCAkcGF0Y2gsICRmbGFncywgJGVycm9yKTsKICAgIH0gZWxzZWlmICgkZmxhZ3MgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHhkaWZmX3N0cmluZ19wYXRjaCgkc3RyLCAkcGF0Y2gsICRmbGFncyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBceGRpZmZfc3RyaW5nX3BhdGNoKCRzdHIsICRwYXRjaCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBYZGlmZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/xml.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xYbWxFeGNlcHRpb247CgovKioKICogeG1sX3BhcnNlcl9jcmVhdGVfbnMgY3JlYXRlcyBhIG5ldyBYTUwgcGFyc2VyCiAqIHdpdGggWE1MIG5hbWVzcGFjZSBzdXBwb3J0IGFuZCByZXR1cm5zIGEgcmVzb3VyY2UgaGFuZGxlIHJlZmVyZW5jaW5nCiAqIGl0IHRvIGJlIHVzZWQgYnkgdGhlIG90aGVyIFhNTCBmdW5jdGlvbnMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGVuY29kaW5nIFRoZSBpbnB1dCBlbmNvZGluZyBpcyBhdXRvbWF0aWNhbGx5IGRldGVjdGVkLCBzbyB0aGF0IHRoZQogKiBlbmNvZGluZyBwYXJhbWV0ZXIgc3BlY2lmaWVzIG9ubHkgdGhlIG91dHB1dAogKiBlbmNvZGluZy4gSW4gUEhQIDUuMC4wIGFuZCA1LjAuMSwgdGhlIGRlZmF1bHQgb3V0cHV0IGNoYXJzZXQgaXMKICogSVNPLTg4NTktMSwgd2hpbGUgaW4gUEhQIDUuMC4yIGFuZCB1cHBlciBpcyBVVEYtOC4gVGhlIHN1cHBvcnRlZAogKiBlbmNvZGluZ3MgYXJlIElTTy04ODU5LTEsIFVURi04IGFuZAogKiBVUy1BU0NJSS4KICogQHBhcmFtIHN0cmluZyAkc2VwYXJhdG9yIFdpdGggYSBuYW1lc3BhY2UgYXdhcmUgcGFyc2VyIHRhZyBwYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGUgdmFyaW91cwogKiBoYW5kbGVyIGZ1bmN0aW9ucyB3aWxsIGNvbnNpc3Qgb2YgbmFtZXNwYWNlIGFuZCB0YWcgbmFtZSBzZXBhcmF0ZWQgYnkKICogdGhlIHN0cmluZyBzcGVjaWZpZWQgaW4gc2VwYXJhdG9yLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSByZXNvdXJjZSBoYW5kbGUgZm9yIHRoZSBuZXcgWE1MIHBhcnNlci4KICogQHRocm93cyBYbWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHhtbF9wYXJzZXJfY3JlYXRlX25zKHN0cmluZyAkZW5jb2RpbmcgPSBudWxsLCBzdHJpbmcgJHNlcGFyYXRvciA9ICI6IikKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRzZXBhcmF0b3IgIT09ICI6IikgewogICAgICAgICRyZXN1bHQgPSBceG1sX3BhcnNlcl9jcmVhdGVfbnMoJGVuY29kaW5nLCAkc2VwYXJhdG9yKTsKICAgIH0gZWxzZWlmICgkZW5jb2RpbmcgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHhtbF9wYXJzZXJfY3JlYXRlX25zKCRlbmNvZGluZyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBceG1sX3BhcnNlcl9jcmVhdGVfbnMoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFhtbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiB4bWxfcGFyc2VyX2NyZWF0ZSBjcmVhdGVzIGEgbmV3IFhNTCBwYXJzZXIKICogYW5kIHJldHVybnMgYSByZXNvdXJjZSBoYW5kbGUgcmVmZXJlbmNpbmcgaXQgdG8gYmUgdXNlZCBieSB0aGUKICogb3RoZXIgWE1MIGZ1bmN0aW9ucy4KICoKICogQHBhcmFtIHN0cmluZyAkZW5jb2RpbmcgVGhlIG9wdGlvbmFsIGVuY29kaW5nIHNwZWNpZmllcyB0aGUgY2hhcmFjdGVyCiAqIGVuY29kaW5nIGZvciB0aGUgaW5wdXQvb3V0cHV0IGluIFBIUCA0LiBTdGFydGluZyBmcm9tIFBIUCA1LCB0aGUgaW5wdXQKICogZW5jb2RpbmcgaXMgYXV0b21hdGljYWxseSBkZXRlY3RlZCwgc28gdGhhdCB0aGUKICogZW5jb2RpbmcgcGFyYW1ldGVyIHNwZWNpZmllcyBvbmx5IHRoZSBvdXRwdXQKICogZW5jb2RpbmcuIEluIFBIUCA0LCB0aGUgZGVmYXVsdCBvdXRwdXQgZW5jb2RpbmcgaXMgdGhlIHNhbWUgYXMgdGhlCiAqIGlucHV0IGNoYXJzZXQuIElmIGVtcHR5IHN0cmluZyBpcyBwYXNzZWQsIHRoZSBwYXJzZXIgYXR0ZW1wdHMgdG8gaWRlbnRpZnkKICogd2hpY2ggZW5jb2RpbmcgdGhlIGRvY3VtZW50IGlzIGVuY29kZWQgaW4gYnkgbG9va2luZyBhdCB0aGUgaGVhZGluZyAzIG9yCiAqIDQgYnl0ZXMuIEluIFBIUCA1LjAuMCBhbmQgNS4wLjEsIHRoZSBkZWZhdWx0IG91dHB1dCBjaGFyc2V0IGlzCiAqIElTTy04ODU5LTEsIHdoaWxlIGluIFBIUCA1LjAuMiBhbmQgdXBwZXIgaXMgVVRGLTguIFRoZSBzdXBwb3J0ZWQKICogZW5jb2RpbmdzIGFyZSBJU08tODg1OS0xLCBVVEYtOCBhbmQKICogVVMtQVNDSUkuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhIHJlc291cmNlIGhhbmRsZSBmb3IgdGhlIG5ldyBYTUwgcGFyc2VyLgogKiBAdGhyb3dzIFhtbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24geG1sX3BhcnNlcl9jcmVhdGUoc3RyaW5nICRlbmNvZGluZyA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkZW5jb2RpbmcgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHhtbF9wYXJzZXJfY3JlYXRlKCRlbmNvZGluZyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBceG1sX3BhcnNlcl9jcmVhdGUoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFhtbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byB1c2UgcGFyc2VyIGluc2lkZQogKiBvYmplY3QuIEFsbCBjYWxsYmFjayBmdW5jdGlvbnMgY291bGQgYmUgc2V0IHdpdGgKICogeG1sX3NldF9lbGVtZW50X2hhbmRsZXIgZXRjIGFuZCBhc3N1bWVkIHRvIGJlCiAqIG1ldGhvZHMgb2Ygb2JqZWN0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBhcnNlciBBIHJlZmVyZW5jZSB0byB0aGUgWE1MIHBhcnNlciB0byB1c2UgaW5zaWRlIHRoZSBvYmplY3QuCiAqIEBwYXJhbSBvYmplY3QgJG9iamVjdCBUaGUgb2JqZWN0IHdoZXJlIHRvIHVzZSB0aGUgWE1MIHBhcnNlci4KICogQHRocm93cyBYbWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHhtbF9zZXRfb2JqZWN0KCRwYXJzZXIsIG9iamVjdCAmJG9iamVjdCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFx4bWxfc2V0X29iamVjdCgkcGFyc2VyLCAkb2JqZWN0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFhtbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/xmlrpc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xYbWxycGNFeGNlcHRpb247CgovKioKICogU2V0cyB4bWxycGMgdHlwZSwgYmFzZTY0IG9yIGRhdGV0aW1lLCBmb3IgYSBQSFAgc3RyaW5nIHZhbHVlLgogKgogKiBAcGFyYW0gc3RyaW5nfFxEYXRlVGltZSAkdmFsdWUgVmFsdWUgdG8gc2V0IHRoZSB0eXBlCiAqIEBwYXJhbSBzdHJpbmcgJHR5cGUgJ2Jhc2U2NCcgb3IgJ2RhdGV0aW1lJwogKiBAdGhyb3dzIFhtbHJwY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24geG1scnBjX3NldF90eXBlKCYkdmFsdWUsIHN0cmluZyAkdHlwZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFx4bWxycGNfc2V0X3R5cGUoJHZhbHVlLCAkdHlwZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBYbWxycGNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/yaml.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xZYW1sRXhjZXB0aW9uOwoKLyoqCiAqIENvbnZlcnQgYWxsIG9yIHBhcnQgb2YgYSBZQU1MIGRvY3VtZW50IHN0cmVhbSByZWFkIGZyb20gYSBmaWxlIHRvIGEgUEhQIHZhcmlhYmxlLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBQYXRoIHRvIHRoZSBmaWxlLgogKiBAcGFyYW0gaW50ICRwb3MgRG9jdW1lbnQgdG8gZXh0cmFjdCBmcm9tIHN0cmVhbSAoLTEgZm9yIGFsbAogKiBkb2N1bWVudHMsIDAgZm9yIGZpcnN0IGRvY3VtZW50LCAuLi4pLgogKiBAcGFyYW0gaW50fG51bGwgJG5kb2NzIElmIG5kb2NzIGlzIHByb3ZpZGVkLCB0aGVuIGl0IGlzIGZpbGxlZCB3aXRoIHRoZQogKiBudW1iZXIgb2YgZG9jdW1lbnRzIGZvdW5kIGluIHN0cmVhbS4KICogQHBhcmFtIGFycmF5ICRjYWxsYmFja3MgQ29udGVudCBoYW5kbGVycyBmb3IgWUFNTCBub2Rlcy4gQXNzb2NpYXRpdmUgYXJyYXkgb2YgWUFNTAogKiB0YWcgPSZndDsgY2FsbGFibGUgbWFwcGluZ3MuIFNlZQogKiBwYXJzZSBjYWxsYmFja3MgZm9yIG1vcmUKICogZGV0YWlscy4KICogQHJldHVybiBtaXhlZCBSZXR1cm5zIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGlucHV0IGluIGFwcHJvcHJpYXRlCiAqIFBIUCB0eXBlLiBJZiBwb3MgaXMgLTEgYW4KICogYXJyYXkgd2lsbCBiZSByZXR1cm5lZCB3aXRoIG9uZSBlbnRyeSBmb3IgZWFjaCBkb2N1bWVudCBmb3VuZAogKiBpbiB0aGUgc3RyZWFtLgogKiBAdGhyb3dzIFlhbWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHlhbWxfcGFyc2VfZmlsZShzdHJpbmcgJGZpbGVuYW1lLCBpbnQgJHBvcyA9IDAsID9pbnQgJiRuZG9jcyA9IG51bGwsIGFycmF5ICRjYWxsYmFja3MgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHlhbWxfcGFyc2VfZmlsZSgkZmlsZW5hbWUsICRwb3MsICRuZG9jcywgJGNhbGxiYWNrcyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBZYW1sRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIENvbnZlcnQgYWxsIG9yIHBhcnQgb2YgYSBZQU1MIGRvY3VtZW50IHN0cmVhbSByZWFkIGZyb20gYSBVUkwgdG8gYSBQSFAgdmFyaWFibGUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHVybCB1cmwgc2hvdWxkIGJlIG9mIHRoZSBmb3JtICJzY2hlbWU6Ly8uLi4iLiBQSFAKICogd2lsbCBzZWFyY2ggZm9yIGEgcHJvdG9jb2wgaGFuZGxlciAoYWxzbyBrbm93biBhcyBhIHdyYXBwZXIpIGZvciB0aGF0CiAqIHNjaGVtZS4gSWYgbm8gd3JhcHBlcnMgZm9yIHRoYXQgcHJvdG9jb2wgYXJlIHJlZ2lzdGVyZWQsIFBIUCB3aWxsIGVtaXQKICogYSBub3RpY2UgdG8gaGVscCB5b3UgdHJhY2sgcG90ZW50aWFsIHByb2JsZW1zIGluIHlvdXIgc2NyaXB0IGFuZCB0aGVuCiAqIGNvbnRpbnVlIGFzIHRob3VnaCBmaWxlbmFtZSBzcGVjaWZpZXMgYSByZWd1bGFyIGZpbGUuCiAqIEBwYXJhbSBpbnQgJHBvcyBEb2N1bWVudCB0byBleHRyYWN0IGZyb20gc3RyZWFtICgtMSBmb3IgYWxsCiAqIGRvY3VtZW50cywgMCBmb3IgZmlyc3QgZG9jdW1lbnQsIC4uLikuCiAqIEBwYXJhbSBpbnR8bnVsbCAkbmRvY3MgSWYgbmRvY3MgaXMgcHJvdmlkZWQsIHRoZW4gaXQgaXMgZmlsbGVkIHdpdGggdGhlCiAqIG51bWJlciBvZiBkb2N1bWVudHMgZm91bmQgaW4gc3RyZWFtLgogKiBAcGFyYW0gYXJyYXkgJGNhbGxiYWNrcyBDb250ZW50IGhhbmRsZXJzIGZvciBZQU1MIG5vZGVzLiBBc3NvY2lhdGl2ZSBhcnJheSBvZiBZQU1MCiAqIHRhZyA9Jmd0OyBjYWxsYWJsZSBtYXBwaW5ncy4gU2VlCiAqIHBhcnNlIGNhbGxiYWNrcyBmb3IgbW9yZQogKiBAcmV0dXJuIG1peGVkIFJldHVybnMgdGhlIHZhbHVlIGVuY29kZWQgaW4gaW5wdXQgaW4gYXBwcm9wcmlhdGUKICogUEhQIHR5cGUuIElmIHBvcyBpcwogKiAtMSBhbiBhcnJheSB3aWxsIGJlIHJldHVybmVkIHdpdGggb25lIGVudHJ5CiAqIGZvciBlYWNoIGRvY3VtZW50IGZvdW5kIGluIHRoZSBzdHJlYW0uCiAqIEB0aHJvd3MgWWFtbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24geWFtbF9wYXJzZV91cmwoc3RyaW5nICR1cmwsIGludCAkcG9zID0gMCwgP2ludCAmJG5kb2NzID0gbnVsbCwgYXJyYXkgJGNhbGxiYWNrcyA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBceWFtbF9wYXJzZV91cmwoJHVybCwgJHBvcywgJG5kb2NzLCAkY2FsbGJhY2tzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFlhbWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQ29udmVydCBhbGwgb3IgcGFydCBvZiBhIFlBTUwgZG9jdW1lbnQgc3RyZWFtIHRvIGEgUEhQIHZhcmlhYmxlLgogKgogKiBAcGFyYW0gc3RyaW5nICRpbnB1dCBUaGUgc3RyaW5nIHRvIHBhcnNlIGFzIGEgWUFNTCBkb2N1bWVudCBzdHJlYW0uCiAqIEBwYXJhbSBpbnQgJHBvcyBEb2N1bWVudCB0byBleHRyYWN0IGZyb20gc3RyZWFtICgtMSBmb3IgYWxsCiAqIGRvY3VtZW50cywgMCBmb3IgZmlyc3QgZG9jdW1lbnQsIC4uLikuCiAqIEBwYXJhbSBpbnR8bnVsbCAkbmRvY3MgSWYgbmRvY3MgaXMgcHJvdmlkZWQsIHRoZW4gaXQgaXMgZmlsbGVkIHdpdGggdGhlCiAqIG51bWJlciBvZiBkb2N1bWVudHMgZm91bmQgaW4gc3RyZWFtLgogKiBAcGFyYW0gYXJyYXkgJGNhbGxiYWNrcyBDb250ZW50IGhhbmRsZXJzIGZvciBZQU1MIG5vZGVzLiBBc3NvY2lhdGl2ZSBhcnJheSBvZiBZQU1MCiAqIHRhZyA9Jmd0OyBjYWxsYWJsZSBtYXBwaW5ncy4gU2VlCiAqIHBhcnNlIGNhbGxiYWNrcyBmb3IgbW9yZQogKiBkZXRhaWxzLgogKiBAcmV0dXJuIG1peGVkIFJldHVybnMgdGhlIHZhbHVlIGVuY29kZWQgaW4gaW5wdXQgaW4gYXBwcm9wcmlhdGUKICogUEhQIHR5cGUuIElmIHBvcyBpcyAtMSBhbgogKiBhcnJheSB3aWxsIGJlIHJldHVybmVkIHdpdGggb25lIGVudHJ5IGZvciBlYWNoIGRvY3VtZW50IGZvdW5kCiAqIGluIHRoZSBzdHJlYW0uCiAqIEB0aHJvd3MgWWFtbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24geWFtbF9wYXJzZShzdHJpbmcgJGlucHV0LCBpbnQgJHBvcyA9IDAsID9pbnQgJiRuZG9jcyA9IG51bGwsIGFycmF5ICRjYWxsYmFja3MgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHlhbWxfcGFyc2UoJGlucHV0LCAkcG9zLCAkbmRvY3MsICRjYWxsYmFja3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgWWFtbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/yaz.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xZYXpFeGNlcHRpb247CgovKioKICogVGhpcyBmdW5jdGlvbiBpbnZva2VzIGEgQ0NMIHBhcnNlci4gSXQgY29udmVydHMgYSBnaXZlbiBDQ0wgRklORCBxdWVyeSB0bwogKiBhbiBSUE4gcXVlcnkgd2hpY2ggbWF5IGJlIHBhc3NlZCB0byB0aGUgeWF6X3NlYXJjaAogKiBmdW5jdGlvbiB0byBwZXJmb3JtIGEgc2VhcmNoLgogKgogKiBUbyBkZWZpbmUgYSBzZXQgb2YgdmFsaWQgQ0NMIGZpZWxkcyBjYWxsIHlhel9jY2xfY29uZgogKiBwcmlvciB0byB0aGlzIGZ1bmN0aW9uLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGlkIFRoZSBjb25uZWN0aW9uIHJlc291cmNlIHJldHVybmVkIGJ5IHlhel9jb25uZWN0LgogKiBAcGFyYW0gc3RyaW5nICRxdWVyeSBUaGUgQ0NMIEZJTkQgcXVlcnkuCiAqIEBwYXJhbSBhcnJheXxudWxsICRyZXN1bHQgSWYgdGhlIGZ1bmN0aW9uIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHksIHRoaXMgd2lsbCBiZSBhbiBhcnJheQogKiBjb250YWluaW5nIHRoZSB2YWxpZCBSUE4gcXVlcnkgdW5kZXIgdGhlIGtleSBycG4uCiAqCiAqIFVwb24gZmFpbHVyZSwgdGhyZWUgaW5kZXhlcyBhcmUgc2V0IGluIHRoaXMgYXJyYXkgdG8gaW5kaWNhdGUgdGhlIGNhdXNlCiAqIG9mIGZhaWx1cmU6CiAqCiAqCiAqCiAqIGVycm9yY29kZSAtIHRoZSBDQ0wgZXJyb3IgY29kZSAoaW50ZWdlcikKICoKICoKICoKICoKICogZXJyb3JzdHJpbmcgLSB0aGUgQ0NMIGVycm9yIHN0cmluZwogKgogKgogKgogKgogKiBlcnJvcnBvcyAtIGFwcHJveGltYXRlIHBvc2l0aW9uIGluIHF1ZXJ5IG9mIGZhaWx1cmUKICogKGludGVnZXIgaXMgY2hhcmFjdGVyIHBvc2l0aW9uKQogKgogKgogKgogKgogKiBlcnJvcmNvZGUgLSB0aGUgQ0NMIGVycm9yIGNvZGUgKGludGVnZXIpCiAqCiAqIGVycm9yc3RyaW5nIC0gdGhlIENDTCBlcnJvciBzdHJpbmcKICoKICogZXJyb3Jwb3MgLSBhcHByb3hpbWF0ZSBwb3NpdGlvbiBpbiBxdWVyeSBvZiBmYWlsdXJlCiAqIChpbnRlZ2VyIGlzIGNoYXJhY3RlciBwb3NpdGlvbikKICogQHRocm93cyBZYXpFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHlhel9jY2xfcGFyc2UoJGlkLCBzdHJpbmcgJHF1ZXJ5LCA/YXJyYXkgJiRyZXN1bHQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBceWF6X2NjbF9wYXJzZSgkaWQsICRxdWVyeSwgJHJlc3VsdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBZYXpFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENsb3NlcyB0aGUgY29ubmVjdGlvbiBnaXZlbiBieSBwYXJhbWV0ZXIgaWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaWQgVGhlIGNvbm5lY3Rpb24gcmVzb3VyY2UgcmV0dXJuZWQgYnkgeWF6X2Nvbm5lY3QuCiAqIEB0aHJvd3MgWWF6RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB5YXpfY2xvc2UoJGlkKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHlhel9jbG9zZSgkaWQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgWWF6RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBjb25uZWN0aW9uIHJlc291cmNlIG9uIHN1Y2Nlc3MsIHplcm8gb24KICogZmFpbHVyZS4KICoKICogeWF6X2Nvbm5lY3QgcHJlcGFyZXMgZm9yIGEgY29ubmVjdGlvbiB0byBhCiAqIFozOS41MCBzZXJ2ZXIuCiAqIFRoaXMgZnVuY3Rpb24gaXMgbm9uLWJsb2NraW5nIGFuZCBkb2VzIG5vdCBhdHRlbXB0IHRvIGVzdGFibGlzaAogKiBhIGNvbm5lY3Rpb24gIC0gaXQgbWVyZWx5IHByZXBhcmVzIGEgY29ubmVjdCB0byBiZSBwZXJmb3JtZWQgbGF0ZXIgd2hlbgogKiB5YXpfd2FpdCBpcyBjYWxsZWQuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHp1cmwgQSBzdHJpbmcgdGhhdCB0YWtlcyB0aGUgZm9ybSBob3N0Wzpwb3J0XVsvZGF0YWJhc2VdLgogKiBJZiBwb3J0IGlzIG9taXR0ZWQsIHBvcnQgMjEwIGlzIHVzZWQuIElmIGRhdGFiYXNlIGlzIG9taXR0ZWQKICogRGVmYXVsdCBpcyB1c2VkLgogKiBAcGFyYW0gbWl4ZWQgJG9wdGlvbnMgSWYgZ2l2ZW4gYXMgYSBzdHJpbmcsIGl0IGlzIHRyZWF0ZWQgYXMgdGhlIFozOS41MCBWMiBhdXRoZW50aWNhdGlvbgogKiBzdHJpbmcgKE9wZW5BdXRoKS4KICoKICogSWYgZ2l2ZW4gYXMgYW4gYXJyYXksIHRoZSBjb250ZW50cyBvZiB0aGUgYXJyYXkgc2VydmVzIGFzIG9wdGlvbnMuCiAqCiAqCiAqIHVzZXIKICoKICoKICogVXNlcm5hbWUgZm9yIGF1dGhlbnRpY2F0aW9uLgogKgogKgogKgogKgogKiBncm91cAogKgogKgogKiBHcm91cCBmb3IgYXV0aGVudGljYXRpb24uCiAqCiAqCiAqCiAqCiAqIHBhc3N3b3JkCiAqCiAqCiAqIFBhc3N3b3JkIGZvciBhdXRoZW50aWNhdGlvbi4KICoKICoKICoKICoKICogY29va2llCiAqCiAqCiAqIENvb2tpZSBmb3Igc2Vzc2lvbiAoWUFaIHByb3h5KS4KICoKICoKICoKICoKICogcHJveHkKICoKICoKICogUHJveHkgZm9yIGNvbm5lY3Rpb24gKFlBWiBwcm94eSkuCiAqCiAqCiAqCiAqCiAqIHBlcnNpc3RlbnQKICoKICoKICogQSBib29sZWFuLiBJZiBUUlVFIHRoZSBjb25uZWN0aW9uIGlzIHBlcnNpc3RlbnQ7IElmIEZBTFNFIHRoZQogKiBjb25uZWN0aW9uIGlzIG5vdCBwZXJzaXN0ZW50LiBCeSBkZWZhdWx0IGNvbm5lY3Rpb25zIGFyZSBwZXJzaXN0ZW50LgogKgogKgogKgogKiBJZiB5b3Ugb3BlbiBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbiwgeW91IHdvbid0IGJlIGFibGUgdG8gY2xvc2UKICogaXQgbGF0ZXIgd2l0aCB5YXpfY2xvc2UuCiAqCiAqCiAqCiAqCiAqCiAqIHBpZ2d5YmFjawogKgogKgogKiBBIGJvb2xlYW4uIElmIFRSVUUgcGlnZ3liYWNrIGlzIGVuYWJsZWQgZm9yIHNlYXJjaGVzOyBJZiBGQUxTRQogKiBwaWdneWJhY2sgaXMgZGlzYWJsZWQuIEJ5IGRlZmF1bHQgcGlnZ3liYWNrIGlzIGVuYWJsZWQuCiAqCiAqCiAqIEVuYWJsaW5nIHBpZ2d5YmFjayBpcyBtb3JlIGVmZmljaWVudCBhbmQgdXN1YWxseSBzYXZlcyBhCiAqIG5ldHdvcmstcm91bmQtdHJpcCBmb3IgZmlyc3QgdGltZSBmZXRjaGVzIG9mIHJlY29yZHMuIEhvd2V2ZXIsIGEKICogZmV3IFozOS41MCBzZXJ2ZXJzIGRvIG5vdCBzdXBwb3J0IHBpZ2d5YmFjayBvciB0aGV5IGlnbm9yZSBlbGVtZW50CiAqIHNldCBuYW1lcy4gRm9yIHRob3NlLCBwaWdneWJhY2sgc2hvdWxkIGJlIGRpc2FibGVkLgogKgogKgogKgogKgogKiBjaGFyc2V0CiAqCiAqCiAqIEEgc3RyaW5nIHRoYXQgc3BlY2lmaWVzIGNoYXJhY3RlciBzZXQgdG8gYmUgdXNlZCBpbiBaMzkuNTAKICogbGFuZ3VhZ2UgYW5kIGNoYXJhY3RlciBzZXQgbmVnb3RpYXRpb24uIFVzZSBzdHJpbmdzIHN1Y2ggYXM6CiAqIElTTy04ODU5LTEsIFVURi04LAogKiBVVEYtMTYuCiAqCiAqCiAqIE1vc3QgWjM5LjUwIHNlcnZlcnMgZG8gbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlIChhbmQgdGh1cywgdGhpcyBpcwogKiBpZ25vcmVkKS4gTWFueSBzZXJ2ZXJzIHVzZSB0aGUgSVNPLTg4NTktMSBlbmNvZGluZyBmb3IgcXVlcmllcyBhbmQKICogbWVzc2FnZXMuIE1BUkMyMS9VU01BUkMgcmVjb3JkcyBhcmUgbm90IGFmZmVjdGVkIGJ5IHRoaXMgc2V0dGluZy4KICoKICoKICoKICoKICoKICogcHJlZmVycmVkTWVzc2FnZVNpemUKICoKICoKICogQW4gaW50ZWdlciB0aGF0IHNwZWNpZmllcyB0aGUgbWF4aW11bSBieXRlIHNpemUgb2YgYWxsIHJlY29yZHMKICogdG8gYmUgcmV0dXJuZWQgYnkgYSB0YXJnZXQgZHVyaW5nIHJldHJpZXZhbC4gU2VlIHRoZQogKiBaMzkuNTAgc3RhbmRhcmQgZm9yIG1vcmUKICogaW5mb3JtYXRpb24uCiAqCiAqCiAqCiAqIFRoaXMgb3B0aW9uIGlzIHN1cHBvcnRlZCBpbiBQRUNMIFlBWiAxLjAuNSBvciBsYXRlci4KICoKICoKICoKICoKICoKICoKICogbWF4aW11bVJlY29yZFNpemUKICoKICoKICogQW4gaW50ZWdlciB0aGF0IHNwZWNpZmllcyB0aGUgbWF4aW11bSBieXRlIHNpemUgb2YgYSBzaW5nbGUgcmVjb3JkCiAqIHRvIGJlIHJldHVybmVkIGJ5IGEgdGFyZ2V0IGR1cmluZyByZXRyaWV2YWwuIFRoaXMKICogZW50aXR5IGlzIHJlZmVycmVkIHRvIGFzIEV4Y2VwdGlvbmFsLXJlY29yZC1zaXplIGluIHRoZQogKiBaMzkuNTAgc3RhbmRhcmQuCiAqCiAqCiAqCiAqIFRoaXMgb3B0aW9uIGlzIHN1cHBvcnRlZCBpbiBQRUNMIFlBWiAxLjAuNSBvciBsYXRlci4KICoKICoKICoKICoKICoKICoKICoKICogVXNlcm5hbWUgZm9yIGF1dGhlbnRpY2F0aW9uLgogKgogKiBHcm91cCBmb3IgYXV0aGVudGljYXRpb24uCiAqCiAqIFBhc3N3b3JkIGZvciBhdXRoZW50aWNhdGlvbi4KICoKICogQ29va2llIGZvciBzZXNzaW9uIChZQVogcHJveHkpLgogKgogKiBQcm94eSBmb3IgY29ubmVjdGlvbiAoWUFaIHByb3h5KS4KICoKICogQSBib29sZWFuLiBJZiBUUlVFIHRoZSBjb25uZWN0aW9uIGlzIHBlcnNpc3RlbnQ7IElmIEZBTFNFIHRoZQogKiBjb25uZWN0aW9uIGlzIG5vdCBwZXJzaXN0ZW50LiBCeSBkZWZhdWx0IGNvbm5lY3Rpb25zIGFyZSBwZXJzaXN0ZW50LgogKgogKiBJZiB5b3Ugb3BlbiBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbiwgeW91IHdvbid0IGJlIGFibGUgdG8gY2xvc2UKICogaXQgbGF0ZXIgd2l0aCB5YXpfY2xvc2UuCiAqCiAqIEEgYm9vbGVhbi4gSWYgVFJVRSBwaWdneWJhY2sgaXMgZW5hYmxlZCBmb3Igc2VhcmNoZXM7IElmIEZBTFNFCiAqIHBpZ2d5YmFjayBpcyBkaXNhYmxlZC4gQnkgZGVmYXVsdCBwaWdneWJhY2sgaXMgZW5hYmxlZC4KICoKICogRW5hYmxpbmcgcGlnZ3liYWNrIGlzIG1vcmUgZWZmaWNpZW50IGFuZCB1c3VhbGx5IHNhdmVzIGEKICogbmV0d29yay1yb3VuZC10cmlwIGZvciBmaXJzdCB0aW1lIGZldGNoZXMgb2YgcmVjb3Jkcy4gSG93ZXZlciwgYQogKiBmZXcgWjM5LjUwIHNlcnZlcnMgZG8gbm90IHN1cHBvcnQgcGlnZ3liYWNrIG9yIHRoZXkgaWdub3JlIGVsZW1lbnQKICogc2V0IG5hbWVzLiBGb3IgdGhvc2UsIHBpZ2d5YmFjayBzaG91bGQgYmUgZGlzYWJsZWQuCiAqCiAqIEEgc3RyaW5nIHRoYXQgc3BlY2lmaWVzIGNoYXJhY3RlciBzZXQgdG8gYmUgdXNlZCBpbiBaMzkuNTAKICogbGFuZ3VhZ2UgYW5kIGNoYXJhY3RlciBzZXQgbmVnb3RpYXRpb24uIFVzZSBzdHJpbmdzIHN1Y2ggYXM6CiAqIElTTy04ODU5LTEsIFVURi04LAogKiBVVEYtMTYuCiAqCiAqIE1vc3QgWjM5LjUwIHNlcnZlcnMgZG8gbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlIChhbmQgdGh1cywgdGhpcyBpcwogKiBpZ25vcmVkKS4gTWFueSBzZXJ2ZXJzIHVzZSB0aGUgSVNPLTg4NTktMSBlbmNvZGluZyBmb3IgcXVlcmllcyBhbmQKICogbWVzc2FnZXMuIE1BUkMyMS9VU01BUkMgcmVjb3JkcyBhcmUgbm90IGFmZmVjdGVkIGJ5IHRoaXMgc2V0dGluZy4KICoKICogQW4gaW50ZWdlciB0aGF0IHNwZWNpZmllcyB0aGUgbWF4aW11bSBieXRlIHNpemUgb2YgYWxsIHJlY29yZHMKICogdG8gYmUgcmV0dXJuZWQgYnkgYSB0YXJnZXQgZHVyaW5nIHJldHJpZXZhbC4gU2VlIHRoZQogKiBaMzkuNTAgc3RhbmRhcmQgZm9yIG1vcmUKICogaW5mb3JtYXRpb24uCiAqCiAqIFRoaXMgb3B0aW9uIGlzIHN1cHBvcnRlZCBpbiBQRUNMIFlBWiAxLjAuNSBvciBsYXRlci4KICoKICogQW4gaW50ZWdlciB0aGF0IHNwZWNpZmllcyB0aGUgbWF4aW11bSBieXRlIHNpemUgb2YgYSBzaW5nbGUgcmVjb3JkCiAqIHRvIGJlIHJldHVybmVkIGJ5IGEgdGFyZ2V0IGR1cmluZyByZXRyaWV2YWwuIFRoaXMKICogZW50aXR5IGlzIHJlZmVycmVkIHRvIGFzIEV4Y2VwdGlvbmFsLXJlY29yZC1zaXplIGluIHRoZQogKiBaMzkuNTAgc3RhbmRhcmQuCiAqCiAqIFRoaXMgb3B0aW9uIGlzIHN1cHBvcnRlZCBpbiBQRUNMIFlBWiAxLjAuNSBvciBsYXRlci4KICogQHJldHVybiBtaXhlZCBBIGNvbm5lY3Rpb24gcmVzb3VyY2Ugb24gc3VjY2VzcywgRkFMU0Ugb24gZXJyb3IuCiAqIEB0aHJvd3MgWWF6RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB5YXpfY29ubmVjdChzdHJpbmcgJHp1cmwsICRvcHRpb25zID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRvcHRpb25zICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFx5YXpfY29ubmVjdCgkenVybCwgJG9wdGlvbnMpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHlhel9jb25uZWN0KCR6dXJsKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFlhekV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gY2hhbmdlIGRhdGFiYXNlcyB3aXRoaW4gYSBzZXNzaW9uIGJ5CiAqIHNwZWNpZnlpbmcgb25lIG9yIG1vcmUgZGF0YWJhc2VzIHRvIGJlIHVzZWQgaW4gc2VhcmNoLCByZXRyaWV2YWwsIGV0Yy4KICogLSBvdmVycmlkaW5nIGRhdGFiYXNlcyBzcGVjaWZpZWQgaW4gY2FsbCB0bwogKiB5YXpfY29ubmVjdC4KICoKICogQHBhcmFtIHJlc291cmNlICRpZCBUaGUgY29ubmVjdGlvbiByZXNvdXJjZSByZXR1cm5lZCBieSB5YXpfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkZGF0YWJhc2VzIEEgc3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgZGF0YWJhc2VzLiBNdWx0aXBsZSBkYXRhYmFzZXMgYXJlCiAqIHNlcGFyYXRlZCBieSBhIHBsdXMgc2lnbiArLgogKiBAdGhyb3dzIFlhekV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24geWF6X2RhdGFiYXNlKCRpZCwgc3RyaW5nICRkYXRhYmFzZXMpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBceWF6X2RhdGFiYXNlKCRpZCwgJGRhdGFiYXNlcyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBZYXpFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgZWxlbWVudCBzZXQgbmFtZSBmb3IgcmV0cmlldmFsLgogKgogKiBDYWxsIHRoaXMgZnVuY3Rpb24gYmVmb3JlIHlhel9zZWFyY2ggb3IKICogeWF6X3ByZXNlbnQgdG8gc3BlY2lmeSB0aGUgZWxlbWVudCBzZXQgbmFtZSBmb3IKICogcmVjb3JkcyB0byBiZSByZXRyaWV2ZWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaWQgVGhlIGNvbm5lY3Rpb24gcmVzb3VyY2UgcmV0dXJuZWQgYnkgeWF6X2Nvbm5lY3QuCiAqIEBwYXJhbSBzdHJpbmcgJGVsZW1lbnRzZXQgTW9zdCBzZXJ2ZXJzIHN1cHBvcnQgRiAoZm9yIGZ1bGwgcmVjb3JkcykgYW5kCiAqIEIgKGZvciBicmllZiByZWNvcmRzKS4KICogQHRocm93cyBZYXpFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHlhel9lbGVtZW50KCRpZCwgc3RyaW5nICRlbGVtZW50c2V0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHlhel9lbGVtZW50KCRpZCwgJGVsZW1lbnRzZXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgWWF6RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGZvciByZXRyaWV2YWwgb2YgcmVjb3JkcyBhZnRlciBhIHN1Y2Nlc3NmdWwgc2VhcmNoLgogKgogKiBUaGUgeWF6X3JhbmdlIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgcHJpb3IgdG8gdGhpcwogKiBmdW5jdGlvbiB0byBzcGVjaWZ5IHRoZSByYW5nZSBvZiByZWNvcmRzIHRvIGJlIHJldHJpZXZlZC4KICoKICogQHBhcmFtIHJlc291cmNlICRpZCBUaGUgY29ubmVjdGlvbiByZXNvdXJjZSByZXR1cm5lZCBieSB5YXpfY29ubmVjdC4KICogQHRocm93cyBZYXpFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHlhel9wcmVzZW50KCRpZCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFx5YXpfcHJlc2VudCgkaWQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgWWF6RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiB5YXpfc2VhcmNoIHByZXBhcmVzIGZvciBhIHNlYXJjaCBvbiB0aGUgZ2l2ZW4KICogY29ubmVjdGlvbi4KICoKICogTGlrZSB5YXpfY29ubmVjdCB0aGlzIGZ1bmN0aW9uIGlzIG5vbi1ibG9ja2luZyBhbmQKICogb25seSBwcmVwYXJlcyBmb3IgYSBzZWFyY2ggdG8gYmUgZXhlY3V0ZWQgbGF0ZXIgd2hlbgogKiB5YXpfd2FpdCBpcyBjYWxsZWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaWQgVGhlIGNvbm5lY3Rpb24gcmVzb3VyY2UgcmV0dXJuZWQgYnkgeWF6X2Nvbm5lY3QuCiAqIEBwYXJhbSBzdHJpbmcgJHR5cGUgVGhpcyBwYXJhbWV0ZXIgcmVwcmVzZW50cyB0aGUgcXVlcnkgdHlwZSAtIG9ubHkgInJwbiIKICogaXMgc3VwcG9ydGVkIG5vdyBpbiB3aGljaCBjYXNlIHRoZSB0aGlyZCBhcmd1bWVudCBzcGVjaWZpZXMgYSBUeXBlLTEKICogcXVlcnkgaW4gcHJlZml4IHF1ZXJ5IG5vdGF0aW9uLgogKiBAcGFyYW0gc3RyaW5nICRxdWVyeSBUaGUgUlBOIHF1ZXJ5IGlzIGEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgVHlwZS0xIHF1ZXJ5IGFzCiAqIGRlZmluZWQgYnkgdGhlIFozOS41MCBzdGFuZGFyZC4gSG93ZXZlciwgaW4gdGhlIHRleHQgcmVwcmVzZW50YXRpb24KICogYXMgdXNlZCBieSBZQVogYSBwcmVmaXggbm90YXRpb24gaXMgdXNlZCwgdGhhdCBpcyB0aGUgb3BlcmF0b3IKICogcHJlY2VkZXMgdGhlIG9wZXJhbmRzLiBUaGUgcXVlcnkgc3RyaW5nIGlzIGEgc2VxdWVuY2Ugb2YgdG9rZW5zIHdoZXJlCiAqIHdoaXRlIHNwYWNlIGlzIGlnbm9yZWQgdW5sZXNzIHN1cnJvdW5kZWQgYnkgZG91YmxlIHF1b3Rlcy4gVG9rZW5zIGJlZ2lubmluZwogKiB3aXRoIGFuIGF0LWNoYXJhY3RlciAoQCkgYXJlIGNvbnNpZGVyZWQgb3BlcmF0b3JzLAogKiBvdGhlcndpc2UgdGhleSBhcmUgdHJlYXRlZCBhcyBzZWFyY2ggdGVybXMuCiAqCiAqIFlvdSBjYW4gZmluZCBpbmZvcm1hdGlvbiBhYm91dCBhdHRyaWJ1dGVzIGF0IHRoZQogKiBaMzkuNTAgTWFpbnRlbmFuY2UgQWdlbmN5CiAqIHNpdGUuCiAqCiAqIElmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSBhIG1vcmUgZnJpZW5kbHkgbm90YXRpb24sCiAqIHVzZSB0aGUgQ0NMIHBhcnNlciAtIGZ1bmN0aW9ucyB5YXpfY2NsX2NvbmYgYW5kCiAqIHlhel9jY2xfcGFyc2UuCiAqIEB0aHJvd3MgWWF6RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB5YXpfc2VhcmNoKCRpZCwgc3RyaW5nICR0eXBlLCBzdHJpbmcgJHF1ZXJ5KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHlhel9zZWFyY2goJGlkLCAkdHlwZSwgJHF1ZXJ5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFlhekV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBjYXJyaWVzIG91dCBuZXR3b3JrZWQgKGJsb2NrZWQpIGFjdGl2aXR5IGZvciBvdXRzdGFuZGluZwogKiByZXF1ZXN0cyB3aGljaCBoYXZlIGJlZW4gcHJlcGFyZWQgYnkgdGhlIGZ1bmN0aW9ucwogKiB5YXpfY29ubmVjdCwgeWF6X3NlYXJjaCwKICogeWF6X3ByZXNlbnQsIHlhel9zY2FuIGFuZAogKiB5YXpfaXRlbW9yZGVyLgogKgogKiB5YXpfd2FpdCByZXR1cm5zIHdoZW4gYWxsIHNlcnZlcnMgaGF2ZSBlaXRoZXIKICogY29tcGxldGVkIGFsbCByZXF1ZXN0cyBvciBhYm9ydGVkIChpbiBjYXNlIG9mIGVycm9ycykuCiAqCiAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBBbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBvcHRpb25zOgogKgogKgogKiB0aW1lb3V0CiAqCiAqCiAqIFNldHMgdGltZW91dCBpbiBzZWNvbmRzLiBJZiBhIHNlcnZlciBoYXMgbm90IHJlc3BvbmRlZCB3aXRoaW4gdGhlCiAqIHRpbWVvdXQgaXQgaXMgY29uc2lkZXJlZCBkZWFkIGFuZCB5YXpfd2FpdAogKiByZXR1cm5zLiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGltZW91dCBpcyAxNSBzZWNvbmRzLgogKgogKgogKgogKgogKiBldmVudAogKgogKgogKiBBIGJvb2xlYW4uCiAqCiAqCiAqCiAqCiAqCiAqIFNldHMgdGltZW91dCBpbiBzZWNvbmRzLiBJZiBhIHNlcnZlciBoYXMgbm90IHJlc3BvbmRlZCB3aXRoaW4gdGhlCiAqIHRpbWVvdXQgaXQgaXMgY29uc2lkZXJlZCBkZWFkIGFuZCB5YXpfd2FpdAogKiByZXR1cm5zLiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGltZW91dCBpcyAxNSBzZWNvbmRzLgogKgogKiBBIGJvb2xlYW4uCiAqIEByZXR1cm4gbWl4ZWQgUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqIEluIGV2ZW50IG1vZGUsIHJldHVybnMgcmVzb3VyY2UuCiAqIEB0aHJvd3MgWWF6RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB5YXpfd2FpdChhcnJheSAmJG9wdGlvbnMgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHlhel93YWl0KCRvcHRpb25zKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFlhekV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/zip.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xaaXBFeGNlcHRpb247CgovKioKICogQ2xvc2VzIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGVudHJ5LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHppcF9lbnRyeSBBIGRpcmVjdG9yeSBlbnRyeSBwcmV2aW91c2x5IG9wZW5lZCB6aXBfZW50cnlfb3Blbi4KICogQHRocm93cyBaaXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHppcF9lbnRyeV9jbG9zZSgkemlwX2VudHJ5KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHppcF9lbnRyeV9jbG9zZSgkemlwX2VudHJ5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFppcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogT3BlbnMgYSBkaXJlY3RvcnkgZW50cnkgaW4gYSB6aXAgZmlsZSBmb3IgcmVhZGluZy4KICoKICogQHBhcmFtIHJlc291cmNlICR6aXAgQSB2YWxpZCByZXNvdXJjZSBoYW5kbGUgcmV0dXJuZWQgYnkgemlwX29wZW4uCiAqIEBwYXJhbSByZXNvdXJjZSAkemlwX2VudHJ5IEEgZGlyZWN0b3J5IGVudHJ5IHJldHVybmVkIGJ5IHppcF9yZWFkLgogKiBAcGFyYW0gc3RyaW5nICRtb2RlIEFueSBvZiB0aGUgbW9kZXMgc3BlY2lmaWVkIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mCiAqIGZvcGVuLgogKgogKiBDdXJyZW50bHksIG1vZGUgaXMgaWdub3JlZCBhbmQgaXMgYWx3YXlzCiAqICJyYiIuIFRoaXMgaXMgZHVlIHRvIHRoZSBmYWN0IHRoYXQgemlwIHN1cHBvcnQKICogaW4gUEhQIGlzIHJlYWQgb25seSBhY2Nlc3MuCiAqIEB0aHJvd3MgWmlwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB6aXBfZW50cnlfb3BlbigkemlwLCAkemlwX2VudHJ5LCBzdHJpbmcgJG1vZGUgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJG1vZGUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHppcF9lbnRyeV9vcGVuKCR6aXAsICR6aXBfZW50cnksICRtb2RlKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFx6aXBfZW50cnlfb3BlbigkemlwLCAkemlwX2VudHJ5KTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFppcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUmVhZHMgZnJvbSBhbiBvcGVuIGRpcmVjdG9yeSBlbnRyeS4KICoKICogQHBhcmFtIHJlc291cmNlICR6aXBfZW50cnkgQSBkaXJlY3RvcnkgZW50cnkgcmV0dXJuZWQgYnkgemlwX3JlYWQuCiAqIEBwYXJhbSBpbnQgJGxlbmd0aCBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHJldHVybi4KICoKICogVGhpcyBzaG91bGQgYmUgdGhlIHVuY29tcHJlc3NlZCBsZW5ndGggeW91IHdpc2ggdG8gcmVhZC4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgZGF0YSByZWFkLCBlbXB0eSBzdHJpbmcgb24gZW5kIG9mIGEgZmlsZS4KICogQHRocm93cyBaaXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHppcF9lbnRyeV9yZWFkKCR6aXBfZW50cnksIGludCAkbGVuZ3RoID0gMTAyNCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHppcF9lbnRyeV9yZWFkKCR6aXBfZW50cnksICRsZW5ndGgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgWmlwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/zlib.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xabGliRXhjZXB0aW9uOwoKLyoqCiAqIEluY3JlbWVudGFsbHkgZGVmbGF0ZXMgZGF0YSBpbiB0aGUgc3BlY2lmaWVkIGNvbnRleHQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29udGV4dCBBIGNvbnRleHQgY3JlYXRlZCB3aXRoIGRlZmxhdGVfaW5pdC4KICogQHBhcmFtIHN0cmluZyAkZGF0YSBBIGNodW5rIG9mIGRhdGEgdG8gY29tcHJlc3MuCiAqIEBwYXJhbSBpbnQgJGZsdXNoX21vZGUgT25lIG9mIFpMSUJfQkxPQ0ssCiAqIFpMSUJfTk9fRkxVU0gsCiAqIFpMSUJfUEFSVElBTF9GTFVTSCwKICogWkxJQl9TWU5DX0ZMVVNIIChkZWZhdWx0KSwKICogWkxJQl9GVUxMX0ZMVVNILCBaTElCX0ZJTklTSC4KICogTm9ybWFsbHkgeW91IHdpbGwgd2FudCB0byBzZXQgWkxJQl9OT19GTFVTSCB0bwogKiBtYXhpbWl6ZSBjb21wcmVzc2lvbiwgYW5kIFpMSUJfRklOSVNIIHRvIHRlcm1pbmF0ZQogKiB3aXRoIHRoZSBsYXN0IGNodW5rIG9mIGRhdGEuIFNlZSB0aGUgemxpYiBtYW51YWwgZm9yIGEKICogZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlc2UgY29uc3RhbnRzLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGEgY2h1bmsgb2YgY29tcHJlc3NlZCBkYXRhLgogKiBAdGhyb3dzIFpsaWJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGRlZmxhdGVfYWRkKCRjb250ZXh0LCBzdHJpbmcgJGRhdGEsIGludCAkZmx1c2hfbW9kZSA9IFpMSUJfU1lOQ19GTFVTSCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGRlZmxhdGVfYWRkKCRjb250ZXh0LCAkZGF0YSwgJGZsdXNoX21vZGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgWmxpYkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBJbml0aWFsaXplcyBhbiBpbmNyZW1lbnRhbCBkZWZsYXRlIGNvbnRleHQgdXNpbmcgdGhlIHNwZWNpZmllZAogKiBlbmNvZGluZy4KICoKICogTm90ZSB0aGF0IHRoZSB3aW5kb3cgb3B0aW9uIGhlcmUgb25seSBzZXRzIHRoZSB3aW5kb3cgc2l6ZQogKiBvZiB0aGUgYWxnb3JpdGhtLCBkaWZmZXJlbnRseSBmcm9tIHRoZSB6bGliIGZpbHRlcnMgd2hlcmUgdGhlIHNhbWUgcGFyYW1ldGVyCiAqIGFsc28gc2V0cyB0aGUgZW5jb2RpbmcgdG8gdXNlOyB0aGUgZW5jb2RpbmcgbXVzdCBiZSBzZXQgd2l0aCB0aGUKICogZW5jb2RpbmcgcGFyYW1ldGVyLgogKgogKiBMaW1pdGF0aW9uOiB0aGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5IHRvIHNldCB0aGUgaGVhZGVyIGluZm9ybWF0aW9uIG9uIGEgR1pJUAogKiBjb21wcmVzc2VkIHN0cmVhbSwgd2hpY2ggYXJlIHNldCBhcyBmb2xsb3dzOiBHWklQIHNpZ25hdHVyZQogKiAoXHgxZlx4OEIpOyBjb21wcmVzc2lvbiBtZXRob2QgKFx4MDgKICogPT0gREVGTEFURSk7IDYgemVybyBieXRlczsgdGhlIG9wZXJhdGluZyBzeXN0ZW0gc2V0IHRvIHRoZSBjdXJyZW50IHN5c3RlbQogKiAoXHgwMCA9IFdpbmRvd3MsIFx4MDMgPSBVbml4LCBldGMuKQogKgogKiBAcGFyYW0gaW50ICRlbmNvZGluZyBPbmUgb2YgdGhlIFpMSUJfRU5DT0RJTkdfKiBjb25zdGFudHMuCiAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBBbiBhc3NvY2lhdGl2ZSBhcnJheSB3aGljaCBtYXkgY29udGFpbiB0aGUgZm9sbG93aW5nIGVsZW1lbnRzOgogKgogKgogKiBsZXZlbAogKgogKgogKiBUaGUgY29tcHJlc3Npb24gbGV2ZWwgaW4gcmFuZ2UgLTEuLjk7IGRlZmF1bHRzIHRvIC0xLgogKgogKgogKgogKgogKiBtZW1vcnkKICoKICoKICogVGhlIGNvbXByZXNzaW9uIG1lbW9yeSBsZXZlbCBpbiByYW5nZSAxLi45OyBkZWZhdWx0cyB0byA4LgogKgogKgogKgogKgogKiB3aW5kb3cKICoKICoKICogVGhlIHpsaWIgd2luZG93IHNpemUgKGxvZ2FyaXRobWljKSBpbiByYW5nZSA4Li4xNTsgZGVmYXVsdHMgdG8gMTUuCiAqCiAqCiAqCiAqCiAqIHN0cmF0ZWd5CiAqCiAqCiAqIE9uZSBvZiBaTElCX0ZJTFRFUkVELAogKiBaTElCX0hVRkZNQU5fT05MWSwgWkxJQl9STEUsCiAqIFpMSUJfRklYRUQgb3IKICogWkxJQl9ERUZBVUxUX1NUUkFURUdZICh0aGUgZGVmYXVsdCkuCiAqCiAqCiAqCiAqCiAqIGRpY3Rpb25hcnkKICoKICoKICogQSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncwogKiBvZiB0aGUgcHJlc2V0IGRpY3Rpb25hcnkgKGRlZmF1bHQ6IG5vIHByZXNldCBkaWN0aW9uYXJ5KS4KICoKICoKICoKICoKICoKICogVGhlIGNvbXByZXNzaW9uIGxldmVsIGluIHJhbmdlIC0xLi45OyBkZWZhdWx0cyB0byAtMS4KICoKICogVGhlIGNvbXByZXNzaW9uIG1lbW9yeSBsZXZlbCBpbiByYW5nZSAxLi45OyBkZWZhdWx0cyB0byA4LgogKgogKiBUaGUgemxpYiB3aW5kb3cgc2l6ZSAobG9nYXJpdGhtaWMpIGluIHJhbmdlIDguLjE1OyBkZWZhdWx0cyB0byAxNS4KICoKICogT25lIG9mIFpMSUJfRklMVEVSRUQsCiAqIFpMSUJfSFVGRk1BTl9PTkxZLCBaTElCX1JMRSwKICogWkxJQl9GSVhFRCBvcgogKiBaTElCX0RFRkFVTFRfU1RSQVRFR1kgKHRoZSBkZWZhdWx0KS4KICoKICogQSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncwogKiBvZiB0aGUgcHJlc2V0IGRpY3Rpb25hcnkgKGRlZmF1bHQ6IG5vIHByZXNldCBkaWN0aW9uYXJ5KS4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgZGVmbGF0ZSBjb250ZXh0IHJlc291cmNlICh6bGliLmRlZmxhdGUpIG9uCiAqIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgWmxpYkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZGVmbGF0ZV9pbml0KGludCAkZW5jb2RpbmcsIGFycmF5ICRvcHRpb25zID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxkZWZsYXRlX2luaXQoJGVuY29kaW5nLCAkb3B0aW9ucyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBabGliRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIENsb3NlcyB0aGUgZ2l2ZW4gZ3otZmlsZSBwb2ludGVyLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHpwIFRoZSBnei1maWxlIHBvaW50ZXIuIEl0IG11c3QgYmUgdmFsaWQsIGFuZCBtdXN0IHBvaW50IHRvIGEgZmlsZQogKiBzdWNjZXNzZnVsbHkgb3BlbmVkIGJ5IGd6b3Blbi4KICogQHRocm93cyBabGliRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnemNsb3NlKCR6cCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxnemNsb3NlKCR6cCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBabGliRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGNvbXByZXNzZXMgdGhlIGdpdmVuIHN0cmluZyB1c2luZyB0aGUgWkxJQgogKiBkYXRhIGZvcm1hdC4KICoKICogRm9yIGRldGFpbHMgb24gdGhlIFpMSUIgY29tcHJlc3Npb24gYWxnb3JpdGhtIHNlZSB0aGUgZG9jdW1lbnQKICogIlpMSUIgQ29tcHJlc3NlZCBEYXRhIEZvcm1hdAogKiBTcGVjaWZpY2F0aW9uIHZlcnNpb24gMy4zIiAoUkZDIDE5NTApLgogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhIFRoZSBkYXRhIHRvIGNvbXByZXNzLgogKiBAcGFyYW0gaW50ICRsZXZlbCBUaGUgbGV2ZWwgb2YgY29tcHJlc3Npb24uIENhbiBiZSBnaXZlbiBhcyAwIGZvciBubyBjb21wcmVzc2lvbiB1cCB0byA5CiAqIGZvciBtYXhpbXVtIGNvbXByZXNzaW9uLgogKgogKiBJZiAtMSBpcyB1c2VkLCB0aGUgZGVmYXVsdCBjb21wcmVzc2lvbiBvZiB0aGUgemxpYiBsaWJyYXJ5IGlzIHVzZWQgd2hpY2ggaXMgNi4KICogQHBhcmFtIGludCAkZW5jb2RpbmcgT25lIG9mIFpMSUJfRU5DT0RJTkdfKiBjb25zdGFudHMuCiAqIEByZXR1cm4gc3RyaW5nIFRoZSBjb21wcmVzc2VkIHN0cmluZy4KICogQHRocm93cyBabGliRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnemNvbXByZXNzKHN0cmluZyAkZGF0YSwgaW50ICRsZXZlbCA9IC0xLCBpbnQgJGVuY29kaW5nID0gWkxJQl9FTkNPRElOR19ERUZMQVRFKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZ3pjb21wcmVzcygkZGF0YSwgJGxldmVsLCAkZW5jb2RpbmcpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgWmxpYkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBkZWNvZGVkIHZlcnNpb24gb2YgdGhlIGlucHV0CiAqIGRhdGEuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIGRhdGEgdG8gZGVjb2RlLCBlbmNvZGVkIGJ5IGd6ZW5jb2RlLgogKiBAcGFyYW0gaW50ICRsZW5ndGggVGhlIG1heGltdW0gbGVuZ3RoIG9mIGRhdGEgdG8gZGVjb2RlLgogKiBAcmV0dXJuIHN0cmluZyBUaGUgZGVjb2RlZCBzdHJpbmcuCiAqIEB0aHJvd3MgWmxpYkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZ3pkZWNvZGUoc3RyaW5nICRkYXRhLCBpbnQgJGxlbmd0aCA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRsZW5ndGggIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGd6ZGVjb2RlKCRkYXRhLCAkbGVuZ3RoKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxnemRlY29kZSgkZGF0YSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBabGliRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gY29tcHJlc3NlcyB0aGUgZ2l2ZW4gc3RyaW5nIHVzaW5nIHRoZSBERUZMQVRFCiAqIGRhdGEgZm9ybWF0LgogKgogKiBGb3IgZGV0YWlscyBvbiB0aGUgREVGTEFURSBjb21wcmVzc2lvbiBhbGdvcml0aG0gc2VlIHRoZSBkb2N1bWVudAogKiAiREVGTEFURSBDb21wcmVzc2VkIERhdGEgRm9ybWF0CiAqIFNwZWNpZmljYXRpb24gdmVyc2lvbiAxLjMiIChSRkMgMTk1MSkuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIGRhdGEgdG8gZGVmbGF0ZS4KICogQHBhcmFtIGludCAkbGV2ZWwgVGhlIGxldmVsIG9mIGNvbXByZXNzaW9uLiBDYW4gYmUgZ2l2ZW4gYXMgMCBmb3Igbm8gY29tcHJlc3Npb24gdXAgdG8gOQogKiBmb3IgbWF4aW11bSBjb21wcmVzc2lvbi4gSWYgbm90IGdpdmVuLCB0aGUgZGVmYXVsdCBjb21wcmVzc2lvbiBsZXZlbCB3aWxsCiAqIGJlIHRoZSBkZWZhdWx0IGNvbXByZXNzaW9uIGxldmVsIG9mIHRoZSB6bGliIGxpYnJhcnkuCiAqIEBwYXJhbSBpbnQgJGVuY29kaW5nIE9uZSBvZiBaTElCX0VOQ09ESU5HXyogY29uc3RhbnRzLgogKiBAcmV0dXJuIHN0cmluZyBUaGUgZGVmbGF0ZWQgc3RyaW5nLgogKiBAdGhyb3dzIFpsaWJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGd6ZGVmbGF0ZShzdHJpbmcgJGRhdGEsIGludCAkbGV2ZWwgPSAtMSwgaW50ICRlbmNvZGluZyA9IFpMSUJfRU5DT0RJTkdfUkFXKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZ3pkZWZsYXRlKCRkYXRhLCAkbGV2ZWwsICRlbmNvZGluZyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBabGliRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGNvbXByZXNzZWQgdmVyc2lvbiBvZiB0aGUgaW5wdXQKICogZGF0YSBjb21wYXRpYmxlIHdpdGggdGhlIG91dHB1dCBvZiB0aGUKICogZ3ppcCBwcm9ncmFtLgogKgogKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgR1pJUCBmaWxlIGZvcm1hdCwgc2VlIHRoZSBkb2N1bWVudDoKICogR1pJUCBmaWxlIGZvcm1hdCBzcGVjaWZpY2F0aW9uCiAqIHZlcnNpb24gNC4zIChSRkMgMTk1MikuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIGRhdGEgdG8gZW5jb2RlLgogKiBAcGFyYW0gaW50ICRsZXZlbCBUaGUgbGV2ZWwgb2YgY29tcHJlc3Npb24uIENhbiBiZSBnaXZlbiBhcyAwIGZvciBubyBjb21wcmVzc2lvbiB1cCB0byA5CiAqIGZvciBtYXhpbXVtIGNvbXByZXNzaW9uLiBJZiBub3QgZ2l2ZW4sIHRoZSBkZWZhdWx0IGNvbXByZXNzaW9uIGxldmVsIHdpbGwKICogYmUgdGhlIGRlZmF1bHQgY29tcHJlc3Npb24gbGV2ZWwgb2YgdGhlIHpsaWIgbGlicmFyeS4KICogQHBhcmFtIGludCAkZW5jb2RpbmdfbW9kZSBUaGUgZW5jb2RpbmcgbW9kZS4gQ2FuIGJlIEZPUkNFX0daSVAgKHRoZSBkZWZhdWx0KQogKiBvciBGT1JDRV9ERUZMQVRFLgogKgogKiBQcmlvciB0byBQSFAgNS40LjAsIHVzaW5nIEZPUkNFX0RFRkxBVEUgcmVzdWx0cyBpbgogKiBhIHN0YW5kYXJkIHpsaWIgZGVmbGF0ZWQgc3RyaW5nIChpbmNsdXNpdmUgemxpYiBoZWFkZXJzKSBhZnRlciBhIGd6aXAKICogZmlsZSBoZWFkZXIgYnV0IHdpdGhvdXQgdGhlIHRyYWlsaW5nIGNyYzMyIGNoZWNrc3VtLgogKgogKiBJbiBQSFAgNS40LjAgYW5kIGxhdGVyLCBGT1JDRV9ERUZMQVRFIGdlbmVyYXRlcwogKiBSRkMgMTk1MCBjb21wbGlhbnQgb3V0cHV0LCBjb25zaXN0aW5nIG9mIGEgemxpYiBoZWFkZXIsIHRoZSBkZWZsYXRlZAogKiBkYXRhLCBhbmQgYW4gQWRsZXIgY2hlY2tzdW0uCiAqIEByZXR1cm4gc3RyaW5nIFRoZSBlbmNvZGVkIHN0cmluZy4KICogQHRocm93cyBabGliRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnemVuY29kZShzdHJpbmcgJGRhdGEsIGludCAkbGV2ZWwgPSAtMSwgaW50ICRlbmNvZGluZ19tb2RlID0gRk9SQ0VfR1pJUCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGd6ZW5jb2RlKCRkYXRhLCAkbGV2ZWwsICRlbmNvZGluZ19tb2RlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFpsaWJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogR2V0cyBhICh1bmNvbXByZXNzZWQpIHN0cmluZyBvZiB1cCB0byBsZW5ndGggLSAxIGJ5dGVzIHJlYWQgZnJvbSB0aGUgZ2l2ZW4KICogZmlsZSBwb2ludGVyLiBSZWFkaW5nIGVuZHMgd2hlbiBsZW5ndGggLSAxIGJ5dGVzIGhhdmUgYmVlbiByZWFkLCBvbiBhCiAqIG5ld2xpbmUsIG9yIG9uIEVPRiAod2hpY2hldmVyIGNvbWVzIGZpcnN0KS4KICoKICogQHBhcmFtIHJlc291cmNlICR6cCBUaGUgZ3otZmlsZSBwb2ludGVyLiBJdCBtdXN0IGJlIHZhbGlkLCBhbmQgbXVzdCBwb2ludCB0byBhIGZpbGUKICogc3VjY2Vzc2Z1bGx5IG9wZW5lZCBieSBnem9wZW4uCiAqIEBwYXJhbSBpbnQgJGxlbmd0aCBUaGUgbGVuZ3RoIG9mIGRhdGEgdG8gZ2V0LgogKiBAcmV0dXJuIHN0cmluZyBUaGUgdW5jb21wcmVzc2VkIHN0cmluZy4KICogQHRocm93cyBabGliRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnemdldHMoJHpwLCBpbnQgJGxlbmd0aCA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRsZW5ndGggIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGd6Z2V0cygkenAsICRsZW5ndGgpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGd6Z2V0cygkenApOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgWmxpYkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBJZGVudGljYWwgdG8gZ3pnZXRzLCBleGNlcHQgdGhhdAogKiBnemdldHNzIGF0dGVtcHRzIHRvIHN0cmlwIGFueSBIVE1MIGFuZCBQSFAKICogdGFncyBmcm9tIHRoZSB0ZXh0IGl0IHJlYWRzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHpwIFRoZSBnei1maWxlIHBvaW50ZXIuIEl0IG11c3QgYmUgdmFsaWQsIGFuZCBtdXN0IHBvaW50IHRvIGEgZmlsZQogKiBzdWNjZXNzZnVsbHkgb3BlbmVkIGJ5IGd6b3Blbi4KICogQHBhcmFtIGludCAkbGVuZ3RoIFRoZSBsZW5ndGggb2YgZGF0YSB0byBnZXQuCiAqIEBwYXJhbSBzdHJpbmcgJGFsbG93YWJsZV90YWdzIFlvdSBjYW4gdXNlIHRoaXMgb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGFncyB3aGljaCBzaG91bGQgbm90CiAqIGJlIHN0cmlwcGVkLgogKiBAcmV0dXJuIHN0cmluZyBUaGUgdW5jb21wcmVzc2VkIGFuZCBzdHJpcHBlZCBzdHJpbmcuCiAqIEB0aHJvd3MgWmxpYkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZ3pnZXRzcygkenAsIGludCAkbGVuZ3RoLCBzdHJpbmcgJGFsbG93YWJsZV90YWdzID0gbnVsbCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGFsbG93YWJsZV90YWdzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxnemdldHNzKCR6cCwgJGxlbmd0aCwgJGFsbG93YWJsZV90YWdzKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxnemdldHNzKCR6cCwgJGxlbmd0aCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBabGliRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gaW5mbGF0ZXMgYSBkZWZsYXRlZCBzdHJpbmcuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIGRhdGEgY29tcHJlc3NlZCBieSBnemRlZmxhdGUuCiAqIEBwYXJhbSBpbnQgJGxlbmd0aCBUaGUgbWF4aW11bSBsZW5ndGggb2YgZGF0YSB0byBkZWNvZGUuCiAqIEByZXR1cm4gc3RyaW5nIFRoZSBvcmlnaW5hbCB1bmNvbXByZXNzZWQgZGF0YS4KICoKICogVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGFuIGVycm9yIGlmIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBpcyBtb3JlIHRoYW4KICogMzI3NjggdGltZXMgdGhlIGxlbmd0aCBvZiB0aGUgY29tcHJlc3NlZCBpbnB1dCBkYXRhCiAqIG9yIG1vcmUgdGhhbiB0aGUgb3B0aW9uYWwgcGFyYW1ldGVyIGxlbmd0aC4KICogQHRocm93cyBabGliRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnemluZmxhdGUoc3RyaW5nICRkYXRhLCBpbnQgJGxlbmd0aCA9IDApOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxnemluZmxhdGUoJGRhdGEsICRsZW5ndGgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgWmxpYkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZWFkcyB0byBFT0Ygb24gdGhlIGdpdmVuIGd6LWZpbGUgcG9pbnRlciBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uIGFuZAogKiB3cml0ZXMgdGhlICh1bmNvbXByZXNzZWQpIHJlc3VsdHMgdG8gc3RhbmRhcmQgb3V0cHV0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHpwIFRoZSBnei1maWxlIHBvaW50ZXIuIEl0IG11c3QgYmUgdmFsaWQsIGFuZCBtdXN0IHBvaW50IHRvIGEgZmlsZQogKiBzdWNjZXNzZnVsbHkgb3BlbmVkIGJ5IGd6b3Blbi4KICogQHJldHVybiBpbnQgVGhlIG51bWJlciBvZiB1bmNvbXByZXNzZWQgY2hhcmFjdGVycyByZWFkIGZyb20gZ3oKICogYW5kIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBpbnB1dC4KICogQHRocm93cyBabGliRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnenBhc3N0aHJ1KCR6cCk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGd6cGFzc3RocnUoJHpwKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFpsaWJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogU2V0cyB0aGUgZmlsZSBwb3NpdGlvbiBpbmRpY2F0b3Igb2YgdGhlIGdpdmVuIGd6LWZpbGUgcG9pbnRlciB0byB0aGUKICogYmVnaW5uaW5nIG9mIHRoZSBmaWxlIHN0cmVhbS4KICoKICogQHBhcmFtIHJlc291cmNlICR6cCBUaGUgZ3otZmlsZSBwb2ludGVyLiBJdCBtdXN0IGJlIHZhbGlkLCBhbmQgbXVzdCBwb2ludCB0byBhIGZpbGUKICogc3VjY2Vzc2Z1bGx5IG9wZW5lZCBieSBnem9wZW4uCiAqIEB0aHJvd3MgWmxpYkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZ3pyZXdpbmQoJHpwKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGd6cmV3aW5kKCR6cCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBabGliRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHVuY29tcHJlc3MgYSBjb21wcmVzc2VkIHN0cmluZy4KICoKICogQHBhcmFtIHN0cmluZyAkZGF0YSBUaGUgZGF0YSBjb21wcmVzc2VkIGJ5IGd6Y29tcHJlc3MuCiAqIEBwYXJhbSBpbnQgJGxlbmd0aCBUaGUgbWF4aW11bSBsZW5ndGggb2YgZGF0YSB0byBkZWNvZGUuCiAqIEByZXR1cm4gc3RyaW5nIFRoZSBvcmlnaW5hbCB1bmNvbXByZXNzZWQgZGF0YS4KICoKICogVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGFuIGVycm9yIGlmIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBpcyBtb3JlIHRoYW4KICogMzI3NjggdGltZXMgdGhlIGxlbmd0aCBvZiB0aGUgY29tcHJlc3NlZCBpbnB1dCBkYXRhCiAqIG9yIG1vcmUgdGhhbiB0aGUgb3B0aW9uYWwgcGFyYW1ldGVyIGxlbmd0aC4KICogQHRocm93cyBabGliRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnenVuY29tcHJlc3Moc3RyaW5nICRkYXRhLCBpbnQgJGxlbmd0aCA9IDApOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxnenVuY29tcHJlc3MoJGRhdGEsICRsZW5ndGgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgWmxpYkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc291cmNlCiAqIEByZXR1cm4gaW50IFJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgc28gZmFyLgogKiBAdGhyb3dzIFpsaWJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGluZmxhdGVfZ2V0X3JlYWRfbGVuKCRyZXNvdXJjZSk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGluZmxhdGVfZ2V0X3JlYWRfbGVuKCRyZXNvdXJjZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBabGliRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFVzdWFsbHkgcmV0dXJucyBlaXRoZXIgWkxJQl9PSyBvciBaTElCX1NUUkVBTV9FTkQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzb3VyY2UKICogQHJldHVybiBpbnQgUmV0dXJucyBkZWNvbXByZXNzaW9uIHN0YXR1cy4KICogQHRocm93cyBabGliRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbmZsYXRlX2dldF9zdGF0dXMoJHJlc291cmNlKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW5mbGF0ZV9nZXRfc3RhdHVzKCRyZXNvdXJjZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBabGliRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEluY3JlbWVudGFsbHkgaW5mbGF0ZXMgZW5jb2RlZCBkYXRhIGluIHRoZSBzcGVjaWZpZWQgY29udGV4dC4KICoKICogTGltaXRhdGlvbjogaGVhZGVyIGluZm9ybWF0aW9uIGZyb20gR1pJUCBjb21wcmVzc2VkIGRhdGEgYXJlIG5vdCBtYWRlCiAqIGF2YWlsYWJsZS4KICoKICogQHBhcmFtIHJlc291cmNlICRjb250ZXh0IEEgY29udGV4dCBjcmVhdGVkIHdpdGggaW5mbGF0ZV9pbml0LgogKiBAcGFyYW0gc3RyaW5nICRlbmNvZGVkX2RhdGEgQSBjaHVuayBvZiBjb21wcmVzc2VkIGRhdGEuCiAqIEBwYXJhbSBpbnQgJGZsdXNoX21vZGUgT25lIG9mIFpMSUJfQkxPQ0ssCiAqIFpMSUJfTk9fRkxVU0gsCiAqIFpMSUJfUEFSVElBTF9GTFVTSCwKICogWkxJQl9TWU5DX0ZMVVNIIChkZWZhdWx0KSwKICogWkxJQl9GVUxMX0ZMVVNILCBaTElCX0ZJTklTSC4KICogTm9ybWFsbHkgeW91IHdpbGwgd2FudCB0byBzZXQgWkxJQl9OT19GTFVTSCB0bwogKiBtYXhpbWl6ZSBjb21wcmVzc2lvbiwgYW5kIFpMSUJfRklOSVNIIHRvIHRlcm1pbmF0ZQogKiB3aXRoIHRoZSBsYXN0IGNodW5rIG9mIGRhdGEuIFNlZSB0aGUgemxpYiBtYW51YWwgZm9yIGEKICogZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlc2UgY29uc3RhbnRzLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGEgY2h1bmsgb2YgdW5jb21wcmVzc2VkIGRhdGEuCiAqIEB0aHJvd3MgWmxpYkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW5mbGF0ZV9hZGQoJGNvbnRleHQsIHN0cmluZyAkZW5jb2RlZF9kYXRhLCBpbnQgJGZsdXNoX21vZGUgPSBaTElCX1NZTkNfRkxVU0gpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbmZsYXRlX2FkZCgkY29udGV4dCwgJGVuY29kZWRfZGF0YSwgJGZsdXNoX21vZGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgWmxpYkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBJbml0aWFsaXplIGFuIGluY3JlbWVudGFsIGluZmxhdGUgY29udGV4dCB3aXRoIHRoZSBzcGVjaWZpZWQKICogZW5jb2RpbmcuCiAqCiAqIEBwYXJhbSBpbnQgJGVuY29kaW5nIE9uZSBvZiB0aGUgWkxJQl9FTkNPRElOR18qIGNvbnN0YW50cy4KICogQHBhcmFtIGFycmF5ICRvcHRpb25zIEFuIGFzc29jaWF0aXZlIGFycmF5IHdoaWNoIG1heSBjb250YWluIHRoZSBmb2xsb3dpbmcgZWxlbWVudHM6CiAqCiAqCiAqIGxldmVsCiAqCiAqCiAqIFRoZSBjb21wcmVzc2lvbiBsZXZlbCBpbiByYW5nZSAtMS4uOTsgZGVmYXVsdHMgdG8gLTEuCiAqCiAqCiAqCiAqCiAqIG1lbW9yeQogKgogKgogKiBUaGUgY29tcHJlc3Npb24gbWVtb3J5IGxldmVsIGluIHJhbmdlIDEuLjk7IGRlZmF1bHRzIHRvIDguCiAqCiAqCiAqCiAqCiAqIHdpbmRvdwogKgogKgogKiBUaGUgemxpYiB3aW5kb3cgc2l6ZSAobG9nYXJpdGhtaWMpIGluIHJhbmdlIDguLjE1OyBkZWZhdWx0cyB0byAxNS4KICoKICoKICoKICoKICogc3RyYXRlZ3kKICoKICoKICogT25lIG9mIFpMSUJfRklMVEVSRUQsCiAqIFpMSUJfSFVGRk1BTl9PTkxZLCBaTElCX1JMRSwKICogWkxJQl9GSVhFRCBvcgogKiBaTElCX0RFRkFVTFRfU1RSQVRFR1kgKHRoZSBkZWZhdWx0KS4KICoKICoKICoKICoKICogZGljdGlvbmFyeQogKgogKgogKiBBIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzCiAqIG9mIHRoZSBwcmVzZXQgZGljdGlvbmFyeSAoZGVmYXVsdDogbm8gcHJlc2V0IGRpY3Rpb25hcnkpLgogKgogKgogKgogKgogKgogKiBUaGUgY29tcHJlc3Npb24gbGV2ZWwgaW4gcmFuZ2UgLTEuLjk7IGRlZmF1bHRzIHRvIC0xLgogKgogKiBUaGUgY29tcHJlc3Npb24gbWVtb3J5IGxldmVsIGluIHJhbmdlIDEuLjk7IGRlZmF1bHRzIHRvIDguCiAqCiAqIFRoZSB6bGliIHdpbmRvdyBzaXplIChsb2dhcml0aG1pYykgaW4gcmFuZ2UgOC4uMTU7IGRlZmF1bHRzIHRvIDE1LgogKgogKiBPbmUgb2YgWkxJQl9GSUxURVJFRCwKICogWkxJQl9IVUZGTUFOX09OTFksIFpMSUJfUkxFLAogKiBaTElCX0ZJWEVEIG9yCiAqIFpMSUJfREVGQVVMVF9TVFJBVEVHWSAodGhlIGRlZmF1bHQpLgogKgogKiBBIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzCiAqIG9mIHRoZSBwcmVzZXQgZGljdGlvbmFyeSAoZGVmYXVsdDogbm8gcHJlc2V0IGRpY3Rpb25hcnkpLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYW4gaW5mbGF0ZSBjb250ZXh0IHJlc291cmNlICh6bGliLmluZmxhdGUpIG9uCiAqIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgWmxpYkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW5mbGF0ZV9pbml0KGludCAkZW5jb2RpbmcsIGFycmF5ICRvcHRpb25zID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbmZsYXRlX2luaXQoJGVuY29kaW5nLCAkb3B0aW9ucyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBabGliRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJlYWRzIGEgZmlsZSwgZGVjb21wcmVzc2VzIGl0IGFuZCB3cml0ZXMgaXQgdG8gc3RhbmRhcmQgb3V0cHV0LgogKgogKiByZWFkZ3pmaWxlIGNhbiBiZSB1c2VkIHRvIHJlYWQgYSBmaWxlIHdoaWNoIGlzIG5vdCBpbgogKiBnemlwIGZvcm1hdDsgaW4gdGhpcyBjYXNlIHJlYWRnemZpbGUgd2lsbCBkaXJlY3RseQogKiByZWFkIGZyb20gdGhlIGZpbGUgd2l0aG91dCBkZWNvbXByZXNzaW9uLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgZmlsZSBuYW1lLiBUaGlzIGZpbGUgd2lsbCBiZSBvcGVuZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBhbmQgaXRzCiAqIGNvbnRlbnRzIHdyaXR0ZW4gdG8gc3RhbmRhcmQgb3V0cHV0LgogKiBAcGFyYW0gaW50ICR1c2VfaW5jbHVkZV9wYXRoIFlvdSBjYW4gc2V0IHRoaXMgb3B0aW9uYWwgcGFyYW1ldGVyIHRvIDEsIGlmIHlvdQogKiB3YW50IHRvIHNlYXJjaCBmb3IgdGhlIGZpbGUgaW4gdGhlIGluY2x1ZGVfcGF0aCB0b28uCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIG51bWJlciBvZiAodW5jb21wcmVzc2VkKSBieXRlcyByZWFkIGZyb20gdGhlIGZpbGUgb24gc3VjY2VzcwogKiBAdGhyb3dzIFpsaWJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHJlYWRnemZpbGUoc3RyaW5nICRmaWxlbmFtZSwgaW50ICR1c2VfaW5jbHVkZV9wYXRoID0gMCk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHJlYWRnemZpbGUoJGZpbGVuYW1lLCAkdXNlX2luY2x1ZGVfcGF0aCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBabGliRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFVuY29tcHJlc3MgYW55IHJhdy9nemlwL3psaWIgZW5jb2RlZCBkYXRhLgogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhCiAqIEBwYXJhbSBpbnQgJG1heF9kZWNvZGVkX2xlbgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSB1bmNvbXByZXNzZWQgZGF0YS4KICogQHRocm93cyBabGliRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB6bGliX2RlY29kZShzdHJpbmcgJGRhdGEsIGludCAkbWF4X2RlY29kZWRfbGVuID0gbnVsbCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJG1heF9kZWNvZGVkX2xlbiAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcemxpYl9kZWNvZGUoJGRhdGEsICRtYXhfZGVjb2RlZF9sZW4pOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHpsaWJfZGVjb2RlKCRkYXRhKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFpsaWJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/lib/DateTime.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIERhdGVJbnRlcnZhbDsKdXNlIERhdGVUaW1lSW50ZXJmYWNlOwp1c2UgRGF0ZVRpbWVab25lOwp1c2UgU2FmZVxFeGNlcHRpb25zXERhdGV0aW1lRXhjZXB0aW9uOwoKLyoqIHRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIHNhZmUgdmVyc2lvbiBvZiB0aGUgRGF0ZXRpbWUgY2xhc3MgKi8KY2xhc3MgRGF0ZVRpbWUgZXh0ZW5kcyBcRGF0ZVRpbWUKewogICAgLy9zd2l0Y2ggZnJvbSByZWd1bGFyIGRhdGV0aW1lIHRvIHNhZmUgdmVyc2lvbgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVJlZ3VsYXIoXERhdGVUaW1lICRkYXRldGltZSk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGRhdGV0aW1lLT5mb3JtYXQoJ1ktbS1kIEg6aTpzLnUnKSwgJGRhdGV0aW1lLT5nZXRUaW1lem9uZSgpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZvcm1hdAogICAgICogQHBhcmFtIHN0cmluZyAkdGltZQogICAgICogQHBhcmFtIERhdGVUaW1lWm9uZXxudWxsICR0aW1lem9uZQogICAgICogQHRocm93cyBEYXRldGltZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21Gb3JtYXQoJGZvcm1hdCwgJHRpbWUsICR0aW1lem9uZSA9IG51bGwpOiBzZWxmCiAgICB7CiAgICAgICAgJGRhdGV0aW1lID0gcGFyZW50OjpjcmVhdGVGcm9tRm9ybWF0KCRmb3JtYXQsICR0aW1lLCAkdGltZXpvbmUpOwogICAgICAgIGlmICgkZGF0ZXRpbWUgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IERhdGV0aW1lRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZUZyb21SZWd1bGFyKCRkYXRldGltZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gRGF0ZVRpbWVJbnRlcmZhY2UgJGRhdGV0aW1lMiBUaGUgZGF0ZSB0byBjb21wYXJlIHRvLgogICAgICogQHBhcmFtIGJvb2xlYW4gJGFic29sdXRlIFtvcHRpb25hbF0gV2hldGhlciB0byByZXR1cm4gYWJzb2x1dGUgZGlmZmVyZW5jZS4KICAgICAqIEByZXR1cm4gRGF0ZUludGVydmFsIFRoZSBEYXRlSW50ZXJ2YWwgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gZGF0ZXMuCiAgICAgKiBAdGhyb3dzIERhdGV0aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaWZmKCRkYXRldGltZTIsICRhYnNvbHV0ZSA9IGZhbHNlKTogRGF0ZUludGVydmFsCiAgICB7CiAgICAgICAgLyoqIEB2YXIgXERhdGVJbnRlcnZhbHxmYWxzZSAkcmVzdWx0ICovCiAgICAgICAgJHJlc3VsdCA9IHBhcmVudDo6ZGlmZigkZGF0ZXRpbWUyLCAkYWJzb2x1dGUpOwogICAgICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBEYXRldGltZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkbW9kaWZ5IEEgZGF0ZS90aW1lIHN0cmluZy4gVmFsaWQgZm9ybWF0cyBhcmUgZXhwbGFpbmVkIGluIDxhIGhyZWY9Imh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2RhdGV0aW1lLmZvcm1hdHMucGhwIj5EYXRlIGFuZCBUaW1lIEZvcm1hdHM8L2E+LgogICAgICogQHJldHVybiBEYXRlVGltZSBSZXR1cm5zIHRoZSBEYXRlVGltZSBvYmplY3QgZm9yIG1ldGhvZCBjaGFpbmluZy4KICAgICAqIEB0aHJvd3MgRGF0ZXRpbWVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1vZGlmeSgkbW9kaWZ5KTogc2VsZgogICAgewogICAgICAgIC8qKiBAdmFyIERhdGVUaW1lfGZhbHNlICRyZXN1bHQgKi8KICAgICAgICAkcmVzdWx0ID0gcGFyZW50Ojptb2RpZnkoJG1vZGlmeSk7CiAgICAgICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IERhdGV0aW1lRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICR5ZWFyCiAgICAgKiBAcGFyYW0gaW50ICRtb250aAogICAgICogQHBhcmFtIGludCAkZGF5CiAgICAgKiBAcmV0dXJuIERhdGVUaW1lCiAgICAgKiBAdGhyb3dzIERhdGV0aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXREYXRlKCR5ZWFyLCAkbW9udGgsICRkYXkpOiBzZWxmCiAgICB7CiAgICAgICAgLyoqIEB2YXIgRGF0ZVRpbWV8ZmFsc2UgJHJlc3VsdCAqLwogICAgICAgICRyZXN1bHQgPSBwYXJlbnQ6OnNldERhdGUoJHllYXIsICRtb250aCwgJGRheSk7CiAgICAgICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IERhdGV0aW1lRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/lib/DateTimeImmutable.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIERhdGVJbnRlcnZhbDsKdXNlIERhdGVUaW1lOwp1c2UgRGF0ZVRpbWVJbnRlcmZhY2U7CnVzZSBEYXRlVGltZVpvbmU7CnVzZSBTYWZlXEV4Y2VwdGlvbnNcRGF0ZXRpbWVFeGNlcHRpb247CgovKioKICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGltcGxlbWVudCBhIHNhZmUgdmVyc2lvbiBvZiB0aGUgRGF0ZXRpbWVJbW11dGFibGUgY2xhc3MuCiAqIFdoaWxlIGl0IHRlY2huaWNhbGx5IG92ZXJsb2FkcyBcRGF0ZVRpbWVJbW11dGFibGUgZm9yIHR5cGVoaW50IGNvbXBhdGliaWxpdHksCiAqIGl0IGlzIGFjdHVhbGx5IHVzZWQgYXMgYSB3cmFwcGVyIG9mIFxEYXRlVGltZUltbXV0YWJsZSwgbW9zdGx5IHRvIGJlIGFibGUgdG8gb3ZlcndyaXRlIGZ1bmN0aW9ucyBsaWtlIGdldFRpbWVzdGFtcCgpIHdoaWxlIHN0aWxsIGJlaW5nIGFibGUgdG8gZWRpdCBtaWxsaXNlY29uZHMgdmlhIHNldFRpbWUoKS4KICovCmNsYXNzIERhdGVUaW1lSW1tdXRhYmxlIGV4dGVuZHMgXERhdGVUaW1lSW1tdXRhYmxlCnsKICAgIC8qKgogICAgICogQHZhciBcRGF0ZVRpbWVJbW11dGFibGUKICAgICAqLwogICAgcHJpdmF0ZSAkaW5uZXJEYXRlVGltZTsKCiAgICAvKioKICAgICAqIERhdGVUaW1lSW1tdXRhYmxlIGNvbnN0cnVjdG9yLgogICAgICogQHBhcmFtIHN0cmluZyAkdGltZQogICAgICogQHBhcmFtIERhdGVUaW1lWm9uZXxudWxsICR0aW1lem9uZQogICAgICogQHRocm93cyBcRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdGltZSA9ICdub3cnLCAkdGltZXpvbmUgPSBudWxsKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJHRpbWUsICR0aW1lem9uZSk7CiAgICAgICAgJHRoaXMtPmlubmVyRGF0ZVRpbWUgPSBuZXcgcGFyZW50KCR0aW1lLCAkdGltZXpvbmUpOwogICAgfQoKICAgIC8vc3dpdGNoIGJldHdlZW4gcmVndWxhciBkYXRldGltZSBhbmQgc2FmZSB2ZXJzaW9uCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21SZWd1bGFyKFxEYXRlVGltZUltbXV0YWJsZSAkZGF0ZXRpbWUpOiBzZWxmCiAgICB7CiAgICAgICAgJHNhZmVEYXRldGltZSA9IG5ldyBzZWxmKCRkYXRldGltZS0+Zm9ybWF0KCdZLW0tZCBIOmk6cy51JyksICRkYXRldGltZS0+Z2V0VGltZXpvbmUoKSk7IC8vd2UgbmVlZCB0byBhbHNvIHVwZGF0ZSB0aGUgd3JhcHBlciB0byBub3QgYnJlYWsgdGhlIG9wZXJhdG9ycyAnPCcgYW5kICc+JwogICAgICAgICRzYWZlRGF0ZXRpbWUtPmlubmVyRGF0ZVRpbWUgPSAkZGF0ZXRpbWU7IC8vdG8gbWFrZSBzdXJlIHdlIGRvbid0IGxvc2UgaW5mb3JtYXRpb24gYmVjYXVzZSBvZiB0aGUgZm9ybWF0KCkuCiAgICAgICAgcmV0dXJuICRzYWZlRGF0ZXRpbWU7CiAgICB9CgogICAgLy91c2VmdWxsIGlmIHlvdSBuZWVkIHRvIHN3aXRjaCBiYWNrIHRvIHJlZ3VsYXIgRGF0ZVRpbWVJbW11dGFibGUgKGZvciBleGFtcGxlIHdoZW4gdXNpbmcgRGF0ZVBlcmlvZCkKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbm5lckRhdGVUaW1lKCk6IFxEYXRlVGltZUltbXV0YWJsZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aW5uZXJEYXRlVGltZTsKICAgIH0KCiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgLy8gb3ZlcmxvYWQgZnVuY3Rpb25zIHdpdGggZmFsc2UgZXJyb3JzCgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmb3JtYXQKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRpbWUKICAgICAqIEBwYXJhbSBEYXRlVGltZVpvbmV8bnVsbCAkdGltZXpvbmUKICAgICAqIEB0aHJvd3MgRGF0ZXRpbWVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tRm9ybWF0KCRmb3JtYXQsICR0aW1lLCAkdGltZXpvbmUgPSBudWxsKTogc2VsZgogICAgewogICAgICAgICRkYXRldGltZSA9IHBhcmVudDo6Y3JlYXRlRnJvbUZvcm1hdCgkZm9ybWF0LCAkdGltZSwgJHRpbWV6b25lKTsKICAgICAgICBpZiAoJGRhdGV0aW1lID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBEYXRldGltZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmOjpjcmVhdGVGcm9tUmVndWxhcigkZGF0ZXRpbWUpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkZm9ybWF0CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBEYXRldGltZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZm9ybWF0KCRmb3JtYXQpOiBzdHJpbmcKICAgIHsKICAgICAgICAvKiogQHZhciBzdHJpbmd8ZmFsc2UgJHJlc3VsdCAqLwogICAgICAgICRyZXN1bHQgPSAkdGhpcy0+aW5uZXJEYXRlVGltZS0+Zm9ybWF0KCRmb3JtYXQpOwogICAgICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBEYXRldGltZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIERhdGVUaW1lSW50ZXJmYWNlICRkYXRldGltZTIKICAgICAqIEBwYXJhbSBib29sICRhYnNvbHV0ZQogICAgICogQHJldHVybiBEYXRlSW50ZXJ2YWwKICAgICAqIEB0aHJvd3MgRGF0ZXRpbWVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpZmYoJGRhdGV0aW1lMiwgJGFic29sdXRlID0gZmFsc2UpOiBEYXRlSW50ZXJ2YWwKICAgIHsKICAgICAgICAvKiogQHZhciBcRGF0ZUludGVydmFsfGZhbHNlICRyZXN1bHQgKi8KICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPmlubmVyRGF0ZVRpbWUtPmRpZmYoJGRhdGV0aW1lMiwgJGFic29sdXRlKTsKICAgICAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgRGF0ZXRpbWVFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1vZGlmeQogICAgICogQHJldHVybiBEYXRlVGltZUltbXV0YWJsZQogICAgICogQHRocm93cyBEYXRldGltZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbW9kaWZ5KCRtb2RpZnkpOiBzZWxmCiAgICB7CiAgICAgICAgLyoqIEB2YXIgXERhdGVUaW1lSW1tdXRhYmxlfGZhbHNlICRyZXN1bHQgKi8KICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPmlubmVyRGF0ZVRpbWUtPm1vZGlmeSgkbW9kaWZ5KTsKICAgICAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgRGF0ZXRpbWVFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlRnJvbVJlZ3VsYXIoJHJlc3VsdCk7IC8vd2UgaGF2ZSB0byByZWNyZWF0ZSBhIHNhZmUgZGF0ZXRpbWUgYmVjYXVzZSBtb2RpZnkgY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIFxEYXRlVGltZUltbXV0YWJsZQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkeWVhcgogICAgICogQHBhcmFtIGludCAkbW9udGgKICAgICAqIEBwYXJhbSBpbnQgJGRheQogICAgICogQHJldHVybiBEYXRlVGltZUltbXV0YWJsZQogICAgICogQHRocm93cyBEYXRldGltZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0RGF0ZSgkeWVhciwgJG1vbnRoLCAkZGF5KTogc2VsZgogICAgewogICAgICAgIC8qKiBAdmFyIFxEYXRlVGltZUltbXV0YWJsZXxmYWxzZSAkcmVzdWx0ICovCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5pbm5lckRhdGVUaW1lLT5zZXREYXRlKCR5ZWFyLCAkbW9udGgsICRkYXkpOwogICAgICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBEYXRldGltZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmOjpjcmVhdGVGcm9tUmVndWxhcigkcmVzdWx0KTsgLy93ZSBoYXZlIHRvIHJlY3JlYXRlIGEgc2FmZSBkYXRldGltZSBiZWNhdXNlIG1vZGlmeSBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgXERhdGVUaW1lSW1tdXRhYmxlCiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICR5ZWFyCiAgICAgKiBAcGFyYW0gaW50ICR3ZWVrCiAgICAgKiBAcGFyYW0gaW50ICRkYXkKICAgICAqIEByZXR1cm4gRGF0ZVRpbWVJbW11dGFibGUKICAgICAqIEB0aHJvd3MgRGF0ZXRpbWVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldElTT0RhdGUoJHllYXIsICR3ZWVrLCAkZGF5ID0gMSk6IHNlbGYKICAgIHsKICAgICAgICAvKiogQHZhciBcRGF0ZVRpbWVJbW11dGFibGV8ZmFsc2UgJHJlc3VsdCAqLwogICAgICAgICRyZXN1bHQgPSAkdGhpcy0+aW5uZXJEYXRlVGltZS0+c2V0SVNPRGF0ZSgkeWVhciwgJHdlZWssICRkYXkpOwogICAgICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBEYXRldGltZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmOjpjcmVhdGVGcm9tUmVndWxhcigkcmVzdWx0KTsgLy93ZSBoYXZlIHRvIHJlY3JlYXRlIGEgc2FmZSBkYXRldGltZSBiZWNhdXNlIG1vZGlmeSBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgXERhdGVUaW1lSW1tdXRhYmxlCiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICRob3VyCiAgICAgKiBAcGFyYW0gaW50ICRtaW51dGUKICAgICAqIEBwYXJhbSBpbnQgJHNlY29uZAogICAgICogQHBhcmFtIGludCAkbWljcm9zZWNvbmRzCiAgICAgKiBAcmV0dXJuIERhdGVUaW1lSW1tdXRhYmxlCiAgICAgKiBAdGhyb3dzIERhdGV0aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRUaW1lKCRob3VyLCAkbWludXRlLCAkc2Vjb25kID0gMCwgJG1pY3Jvc2Vjb25kcyA9IDApOiBzZWxmCiAgICB7CiAgICAgICAgLyoqIEB2YXIgXERhdGVUaW1lSW1tdXRhYmxlfGZhbHNlICRyZXN1bHQgKi8KICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPmlubmVyRGF0ZVRpbWUtPnNldFRpbWUoJGhvdXIsICRtaW51dGUsICRzZWNvbmQsICRtaWNyb3NlY29uZHMpOwogICAgICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBEYXRldGltZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmOjpjcmVhdGVGcm9tUmVndWxhcigkcmVzdWx0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJHVuaXh0aW1lc3RhbXAKICAgICAqIEByZXR1cm4gRGF0ZVRpbWVJbW11dGFibGUKICAgICAqIEB0aHJvd3MgRGF0ZXRpbWVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFRpbWVzdGFtcCgkdW5peHRpbWVzdGFtcCk6IHNlbGYKICAgIHsKICAgICAgICAvKiogQHZhciBcRGF0ZVRpbWVJbW11dGFibGV8ZmFsc2UgJHJlc3VsdCAqLwogICAgICAgICRyZXN1bHQgPSAkdGhpcy0+aW5uZXJEYXRlVGltZS0+c2V0VGltZXN0YW1wKCR1bml4dGltZXN0YW1wKTsKICAgICAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgRGF0ZXRpbWVFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlRnJvbVJlZ3VsYXIoJHJlc3VsdCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gRGF0ZVRpbWVab25lICR0aW1lem9uZQogICAgICogQHJldHVybiBEYXRlVGltZUltbXV0YWJsZQogICAgICogQHRocm93cyBEYXRldGltZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VGltZXpvbmUoJHRpbWV6b25lKTogc2VsZgogICAgewogICAgICAgIC8qKiBAdmFyIFxEYXRlVGltZUltbXV0YWJsZXxmYWxzZSAkcmVzdWx0ICovCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5pbm5lckRhdGVUaW1lLT5zZXRUaW1lem9uZSgkdGltZXpvbmUpOwogICAgICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBEYXRldGltZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmOjpjcmVhdGVGcm9tUmVndWxhcigkcmVzdWx0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBEYXRlSW50ZXJ2YWwgJGludGVydmFsCiAgICAgKiBAcmV0dXJuIERhdGVUaW1lSW1tdXRhYmxlCiAgICAgKiBAdGhyb3dzIERhdGV0aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzdWIoJGludGVydmFsKTogc2VsZgogICAgewogICAgICAgIC8qKiBAdmFyIFxEYXRlVGltZUltbXV0YWJsZXxmYWxzZSAkcmVzdWx0ICovCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5pbm5lckRhdGVUaW1lLT5zdWIoJGludGVydmFsKTsKICAgICAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgRGF0ZXRpbWVFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlRnJvbVJlZ3VsYXIoJHJlc3VsdCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGhyb3dzIERhdGV0aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPZmZzZXQoKTogaW50CiAgICB7CiAgICAgICAgLyoqIEB2YXIgaW50fGZhbHNlICRyZXN1bHQgKi8KICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPmlubmVyRGF0ZVRpbWUtPmdldE9mZnNldCgpOwogICAgICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBEYXRldGltZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgLy9vdmVybG9hZCBnZXR0ZXJzIHRvIHVzZSB0aGUgaW5uZXIgZGF0ZXRpbWUgaW1tdXRhYmxlIGluc3RlYWQgb2YgaXRzZWxmCgogICAgLyoqCiAgICAgKiBAcGFyYW0gRGF0ZUludGVydmFsICRpbnRlcnZhbAogICAgICogQHJldHVybiBEYXRlVGltZUltbXV0YWJsZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKCRpbnRlcnZhbCk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlRnJvbVJlZ3VsYXIoJHRoaXMtPmlubmVyRGF0ZVRpbWUtPmFkZCgkaW50ZXJ2YWwpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBEYXRlVGltZSAkZGF0ZVRpbWUKICAgICAqIEByZXR1cm4gRGF0ZVRpbWVJbW11dGFibGUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tTXV0YWJsZSgkZGF0ZVRpbWUpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZUZyb21SZWd1bGFyKHBhcmVudDo6Y3JlYXRlRnJvbU11dGFibGUoJGRhdGVUaW1lKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkYXJyYXkKICAgICAqIEByZXR1cm4gRGF0ZVRpbWVJbW11dGFibGUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBfX3NldF9zdGF0ZSgkYXJyYXkpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZUZyb21SZWd1bGFyKHBhcmVudDo6X19zZXRfc3RhdGUoJGFycmF5KSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWV6b25lKCk6IERhdGVUaW1lWm9uZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aW5uZXJEYXRlVGltZS0+Z2V0VGltZXpvbmUoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZXN0YW1wKCk6IGludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aW5uZXJEYXRlVGltZS0+Z2V0VGltZXN0YW1wKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/lib/Exceptions/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/lib/Exceptions/CurlException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCgpuYW1lc3BhY2UgU2FmZVxFeGNlcHRpb25zOwoKY2xhc3MgQ3VybEV4Y2VwdGlvbiBleHRlbmRzIFxFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHBhcmFtIHJlc291cmNlICRjaAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21DdXJsUmVzb3VyY2UoJGNoKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZihcY3VybF9lcnJvcigkY2gpLCBcY3VybF9lcnJubygkY2gpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/lib/Exceptions/JsonException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCgpuYW1lc3BhY2UgU2FmZVxFeGNlcHRpb25zOwoKY2xhc3MgSnNvbkV4Y2VwdGlvbiBleHRlbmRzIFxFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoXGpzb25fbGFzdF9lcnJvcl9tc2coKSwgXGpzb25fbGFzdF9lcnJvcigpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/lib/Exceptions/OpensslException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCgpuYW1lc3BhY2UgU2FmZVxFeGNlcHRpb25zOwoKY2xhc3MgT3BlbnNzbEV4Y2VwdGlvbiBleHRlbmRzIFxFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoXG9wZW5zc2xfZXJyb3Jfc3RyaW5nKCkgPzogJycsIDApOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/lib/Exceptions/PcreException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCgpuYW1lc3BhY2UgU2FmZVxFeGNlcHRpb25zOwoKY2xhc3MgUGNyZUV4Y2VwdGlvbiBleHRlbmRzIFxFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3JNYXAgPSBbCiAgICAgICAgICAgIFBSRUdfSU5URVJOQUxfRVJST1IgPT4gJ1BSRUdfSU5URVJOQUxfRVJST1I6IEludGVybmFsIGVycm9yJywKICAgICAgICAgICAgUFJFR19CQUNLVFJBQ0tfTElNSVRfRVJST1IgPT4gJ1BSRUdfQkFDS1RSQUNLX0xJTUlUX0VSUk9SOiBCYWNrdHJhY2sgbGltaXQgcmVhY2hlZCcsCiAgICAgICAgICAgIFBSRUdfUkVDVVJTSU9OX0xJTUlUX0VSUk9SID0+ICdQUkVHX1JFQ1VSU0lPTl9MSU1JVF9FUlJPUjogUmVjdXJzaW9uIGxpbWl0IHJlYWNoZWQnLAogICAgICAgICAgICBQUkVHX0JBRF9VVEY4X0VSUk9SID0+ICdQUkVHX0JBRF9VVEY4X0VSUk9SOiBJbnZhbGlkIFVURjggY2hhcmFjdGVyJywKICAgICAgICAgICAgUFJFR19CQURfVVRGOF9PRkZTRVRfRVJST1IgPT4gJ1BSRUdfQkFEX1VURjhfT0ZGU0VUX0VSUk9SJywKICAgICAgICAgICAgUFJFR19KSVRfU1RBQ0tMSU1JVF9FUlJPUiA9PiAnUFJFR19KSVRfU1RBQ0tMSU1JVF9FUlJPUicsCiAgICAgICAgXTsKICAgICAgICAkZXJyTXNnID0gJGVycm9yTWFwW3ByZWdfbGFzdF9lcnJvcigpXSA/PyAnVW5rbm93biBQQ1JFIGVycm9yOiAnLnByZWdfbGFzdF9lcnJvcigpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyTXNnLCBccHJlZ19sYXN0X2Vycm9yKCkpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/lib/Exceptions/SafeExceptionInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCgpuYW1lc3BhY2UgU2FmZVxFeGNlcHRpb25zOwoKaW50ZXJmYWNlIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UgZXh0ZW5kcyBcVGhyb3dhYmxlCnsKCn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/lib/special_cases.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBjb250YWlucyBhbGwgdGhlIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIG5vdCBiZSBkZWFsdCB3aXRoIGF1dG9tYXRpY2FsbHkgdXNpbmcgdGhlIGNvZGUgZ2VuZXJhdG9yLgogKiBJZiB5b3UgYWRkIGEgZnVuY3Rpb24gaW4gdGhpcyBsaXN0LCBkbyBub3QgZm9yZ2V0IHRvIGFkZCBpdCBpbiB0aGUgZ2VuZXJhdG9yL2NvbmZpZy9zcGVjaWFsQ2FzZXNGdW5jdGlvbnMucGhwCiAqCiAqLwoKbmFtZXNwYWNlIFNhZmU7Cgp1c2UgU2FmZVxFeGNlcHRpb25zXFNvY2tldHNFeGNlcHRpb247CnVzZSBjb25zdCBQUkVHX05PX0VSUk9SOwp1c2UgU2FmZVxFeGNlcHRpb25zXEFwY0V4Y2VwdGlvbjsKdXNlIFNhZmVcRXhjZXB0aW9uc1xBcGN1RXhjZXB0aW9uOwp1c2UgU2FmZVxFeGNlcHRpb25zXEpzb25FeGNlcHRpb247CnVzZSBTYWZlXEV4Y2VwdGlvbnNcT3BlbnNzbEV4Y2VwdGlvbjsKdXNlIFNhZmVcRXhjZXB0aW9uc1xQY3JlRXhjZXB0aW9uOwoKLyoqCiAqIFdyYXBwZXIgZm9yIGpzb25fZGVjb2RlIHRoYXQgdGhyb3dzIHdoZW4gYW4gZXJyb3Igb2NjdXJzLgogKgogKiBAcGFyYW0gc3RyaW5nICRqc29uICAgIEpTT04gZGF0YSB0byBwYXJzZQogKiBAcGFyYW0gYm9vbCAkYXNzb2MgICAgIFdoZW4gdHJ1ZSwgcmV0dXJuZWQgb2JqZWN0cyB3aWxsIGJlIGNvbnZlcnRlZAogKiAgICAgICAgICAgICAgICAgICAgICAgIGludG8gYXNzb2NpYXRpdmUgYXJyYXlzLgogKiBAcGFyYW0gaW50ICRkZXB0aCAgIFVzZXIgc3BlY2lmaWVkIHJlY3Vyc2lvbiBkZXB0aC4KICogQHBhcmFtIGludCAkb3B0aW9ucyBCaXRtYXNrIG9mIEpTT04gZGVjb2RlIG9wdGlvbnMuCiAqCiAqIEByZXR1cm4gbWl4ZWQKICogQHRocm93cyBKc29uRXhjZXB0aW9uIGlmIHRoZSBKU09OIGNhbm5vdCBiZSBkZWNvZGVkLgogKiBAbGluayBodHRwOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmpzb24tZGVjb2RlLnBocAogKi8KZnVuY3Rpb24ganNvbl9kZWNvZGUoc3RyaW5nICRqc29uLCBib29sICRhc3NvYyA9IGZhbHNlLCBpbnQgJGRlcHRoID0gNTEyLCBpbnQgJG9wdGlvbnMgPSAwKQp7CiAgICAkZGF0YSA9IFxqc29uX2RlY29kZSgkanNvbiwgJGFzc29jLCAkZGVwdGgsICRvcHRpb25zKTsKICAgIGlmIChKU09OX0VSUk9SX05PTkUgIT09IGpzb25fbGFzdF9lcnJvcigpKSB7CiAgICAgICAgdGhyb3cgSnNvbkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJGRhdGE7Cn0KCgovKioKICogRmV0Y2hzIGEgc3RvcmVkIHZhcmlhYmxlIGZyb20gdGhlIGNhY2hlLgogKgogKiBAcGFyYW0gbWl4ZWQgJGtleSBUaGUga2V5IHVzZWQgdG8gc3RvcmUgdGhlIHZhbHVlICh3aXRoCiAqIGFwY19zdG9yZSkuIElmIGFuIGFycmF5IGlzIHBhc3NlZCB0aGVuIGVhY2gKICogZWxlbWVudCBpcyBmZXRjaGVkIGFuZCByZXR1cm5lZC4KICogQHJldHVybiBtaXhlZCBUaGUgc3RvcmVkIHZhcmlhYmxlIG9yIGFycmF5IG9mIHZhcmlhYmxlcyBvbiBzdWNjZXNzOyBGQUxTRSBvbiBmYWlsdXJlCiAqIEB0aHJvd3MgQXBjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBhcGNfZmV0Y2goJGtleSkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxhcGNfZmV0Y2goJGtleSwgJHN1Y2Nlc3MpOwogICAgaWYgKCRzdWNjZXNzID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEFwY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKLyoqCiAqIEZldGNocyBhbiBlbnRyeSBmcm9tIHRoZSBjYWNoZS4KICoKICogQHBhcmFtIHN0cmluZ3xzdHJpbmdbXSAka2V5IFRoZSBrZXkgdXNlZCB0byBzdG9yZSB0aGUgdmFsdWUgKHdpdGgKICogYXBjdV9zdG9yZSkuIElmIGFuIGFycmF5IGlzIHBhc3NlZCB0aGVuIGVhY2gKICogZWxlbWVudCBpcyBmZXRjaGVkIGFuZCByZXR1cm5lZC4KICogQHJldHVybiBtaXhlZCBUaGUgc3RvcmVkIHZhcmlhYmxlIG9yIGFycmF5IG9mIHZhcmlhYmxlcyBvbiBzdWNjZXNzCiAqIEB0aHJvd3MgQXBjdUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gYXBjdV9mZXRjaCgka2V5KQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGFwY3VfZmV0Y2goJGtleSwgJHN1Y2Nlc3MpOwogICAgaWYgKCRzdWNjZXNzID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEFwY3VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCi8qKgogKiBTZWFyY2hlcyBzdWJqZWN0IGZvciBtYXRjaGVzIHRvCiAqIHBhdHRlcm4gYW5kIHJlcGxhY2VzIHRoZW0gd2l0aAogKiByZXBsYWNlbWVudC4KICoKICogQHBhcmFtIG1peGVkICRwYXR0ZXJuIFRoZSBwYXR0ZXJuIHRvIHNlYXJjaCBmb3IuIEl0IGNhbiBiZSBlaXRoZXIgYSBzdHJpbmcgb3IgYW4gYXJyYXkgd2l0aAogKiBzdHJpbmdzLgogKgogKiBTZXZlcmFsIFBDUkUgbW9kaWZpZXJzCiAqIGFyZSBhbHNvIGF2YWlsYWJsZS4KICogQHBhcmFtIG1peGVkICRyZXBsYWNlbWVudCBUaGUgc3RyaW5nIG9yIGFuIGFycmF5IHdpdGggc3RyaW5ncyB0byByZXBsYWNlLiBJZiB0aGlzIHBhcmFtZXRlciBpcyBhCiAqIHN0cmluZyBhbmQgdGhlIHBhdHRlcm4gcGFyYW1ldGVyIGlzIGFuIGFycmF5LAogKiBhbGwgcGF0dGVybnMgd2lsbCBiZSByZXBsYWNlZCBieSB0aGF0IHN0cmluZy4gSWYgYm90aAogKiBwYXR0ZXJuIGFuZCByZXBsYWNlbWVudAogKiBwYXJhbWV0ZXJzIGFyZSBhcnJheXMsIGVhY2ggcGF0dGVybiB3aWxsIGJlCiAqIHJlcGxhY2VkIGJ5IHRoZSByZXBsYWNlbWVudCBjb3VudGVycGFydC4gSWYKICogdGhlcmUgYXJlIGZld2VyIGVsZW1lbnRzIGluIHRoZSByZXBsYWNlbWVudAogKiBhcnJheSB0aGFuIGluIHRoZSBwYXR0ZXJuIGFycmF5LCBhbnkgZXh0cmEKICogcGF0dGVybnMgd2lsbCBiZSByZXBsYWNlZCBieSBhbiBlbXB0eSBzdHJpbmcuCiAqCiAqIHJlcGxhY2VtZW50IG1heSBjb250YWluIHJlZmVyZW5jZXMgb2YgdGhlIGZvcm0KICogXFxuIG9yCiAqICRuLCB3aXRoIHRoZSBsYXR0ZXIgZm9ybQogKiBiZWluZyB0aGUgcHJlZmVycmVkIG9uZS4gRXZlcnkgc3VjaCByZWZlcmVuY2Ugd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgdGV4dAogKiBjYXB0dXJlZCBieSB0aGUgbid0aCBwYXJlbnRoZXNpemVkIHBhdHRlcm4uCiAqIG4gY2FuIGJlIGZyb20gMCB0byA5OSwgYW5kCiAqIFxcMCBvciAkMCByZWZlcnMgdG8gdGhlIHRleHQgbWF0Y2hlZAogKiBieSB0aGUgd2hvbGUgcGF0dGVybi4gT3BlbmluZyBwYXJlbnRoZXNlcyBhcmUgY291bnRlZCBmcm9tIGxlZnQgdG8gcmlnaHQKICogKHN0YXJ0aW5nIGZyb20gMSkgdG8gb2J0YWluIHRoZSBudW1iZXIgb2YgdGhlIGNhcHR1cmluZyBzdWJwYXR0ZXJuLgogKiBUbyB1c2UgYmFja3NsYXNoIGluIHJlcGxhY2VtZW50LCBpdCBtdXN0IGJlIGRvdWJsZWQKICogKCJcXFxcIiBQSFAgc3RyaW5nKS4KICoKICogV2hlbiB3b3JraW5nIHdpdGggYSByZXBsYWNlbWVudCBwYXR0ZXJuIHdoZXJlIGEgYmFja3JlZmVyZW5jZSBpcwogKiBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhbm90aGVyIG51bWJlciAoaS5lLjogcGxhY2luZyBhIGxpdGVyYWwgbnVtYmVyCiAqIGltbWVkaWF0ZWx5IGFmdGVyIGEgbWF0Y2hlZCBwYXR0ZXJuKSwgeW91IGNhbm5vdCB1c2UgdGhlIGZhbWlsaWFyCiAqIFxcMSBub3RhdGlvbiBmb3IgeW91ciBiYWNrcmVmZXJlbmNlLgogKiBcXDExLCBmb3IgZXhhbXBsZSwgd291bGQgY29uZnVzZQogKiBwcmVnX3JlcGxhY2Ugc2luY2UgaXQgZG9lcyBub3Qga25vdyB3aGV0aGVyIHlvdQogKiB3YW50IHRoZSBcXDEgYmFja3JlZmVyZW5jZSBmb2xsb3dlZCBieSBhIGxpdGVyYWwKICogMSwgb3IgdGhlIFxcMTEgYmFja3JlZmVyZW5jZQogKiBmb2xsb3dlZCBieSBub3RoaW5nLiAgSW4gdGhpcyBjYXNlIHRoZSBzb2x1dGlvbiBpcyB0byB1c2UKICogJHsxfTEuICBUaGlzIGNyZWF0ZXMgYW4gaXNvbGF0ZWQKICogJDEgYmFja3JlZmVyZW5jZSwgbGVhdmluZyB0aGUgMQogKiBhcyBhIGxpdGVyYWwuCiAqCiAqIFdoZW4gdXNpbmcgdGhlIGRlcHJlY2F0ZWQgZSBtb2RpZmllciwgdGhpcyBmdW5jdGlvbiBlc2NhcGVzCiAqIHNvbWUgY2hhcmFjdGVycyAobmFtZWx5ICcsICIsCiAqIFwgYW5kIE5VTEwpIGluIHRoZSBzdHJpbmdzIHRoYXQgcmVwbGFjZSB0aGUKICogYmFja3JlZmVyZW5jZXMuIFRoaXMgaXMgZG9uZSB0byBlbnN1cmUgdGhhdCBubyBzeW50YXggZXJyb3JzIGFyaXNlCiAqIGZyb20gYmFja3JlZmVyZW5jZSB1c2FnZSB3aXRoIGVpdGhlciBzaW5nbGUgb3IgZG91YmxlIHF1b3RlcyAoZS5nLgogKiAnc3RybGVuKFwnJDFcJykrc3RybGVuKCIkMiIpJykuIE1ha2Ugc3VyZSB5b3UgYXJlCiAqIGF3YXJlIG9mIFBIUCdzIHN0cmluZwogKiBzeW50YXggdG8ga25vdyBleGFjdGx5IGhvdyB0aGUgaW50ZXJwcmV0ZWQgc3RyaW5nIHdpbGwgbG9vay4KICogQHBhcmFtIHN0cmluZ3xhcnJheXxzdHJpbmdbXSAkc3ViamVjdCBUaGUgc3RyaW5nIG9yIGFuIGFycmF5IHdpdGggc3RyaW5ncyB0byBzZWFyY2ggYW5kIHJlcGxhY2UuCiAqCiAqIElmIHN1YmplY3QgaXMgYW4gYXJyYXksIHRoZW4gdGhlIHNlYXJjaCBhbmQKICogcmVwbGFjZSBpcyBwZXJmb3JtZWQgb24gZXZlcnkgZW50cnkgb2Ygc3ViamVjdCwKICogYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMgYW4gYXJyYXkgYXMgd2VsbC4KICogQHBhcmFtIGludCAkbGltaXQgVGhlIG1heGltdW0gcG9zc2libGUgcmVwbGFjZW1lbnRzIGZvciBlYWNoIHBhdHRlcm4gaW4gZWFjaAogKiBzdWJqZWN0IHN0cmluZy4gRGVmYXVsdHMgdG8KICogLTEgKG5vIGxpbWl0KS4KICogQHBhcmFtIGludCAkY291bnQgSWYgc3BlY2lmaWVkLCB0aGlzIHZhcmlhYmxlIHdpbGwgYmUgZmlsbGVkIHdpdGggdGhlIG51bWJlciBvZgogKiByZXBsYWNlbWVudHMgZG9uZS4KICogQHJldHVybiBzdHJpbmd8YXJyYXl8c3RyaW5nW10gcHJlZ19yZXBsYWNlIHJldHVybnMgYW4gYXJyYXkgaWYgdGhlCiAqIHN1YmplY3QgcGFyYW1ldGVyIGlzIGFuIGFycmF5LCBvciBhIHN0cmluZwogKiBvdGhlcndpc2UuCiAqCiAqIElmIG1hdGNoZXMgYXJlIGZvdW5kLCB0aGUgbmV3IHN1YmplY3Qgd2lsbAogKiBiZSByZXR1cm5lZCwgb3RoZXJ3aXNlIHN1YmplY3Qgd2lsbCBiZQogKiByZXR1cm5lZCB1bmNoYW5nZWQuCiAqCiAqIEB0aHJvd3MgUGNyZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHJlZ19yZXBsYWNlKCRwYXR0ZXJuLCAkcmVwbGFjZW1lbnQsICRzdWJqZWN0LCBpbnQgJGxpbWl0ID0gLTEsIGludCAmJGNvdW50ID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwcmVnX3JlcGxhY2UoJHBhdHRlcm4sICRyZXBsYWNlbWVudCwgJHN1YmplY3QsICRsaW1pdCwgJGNvdW50KTsKICAgIGlmIChwcmVnX2xhc3RfZXJyb3IoKSAhPT0gUFJFR19OT19FUlJPUiB8fCAkcmVzdWx0ID09PSBudWxsKSB7CiAgICAgICAgdGhyb3cgUGNyZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZXxudWxsICRkaXJfaGFuZGxlCiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlCiAqIEBkZXByZWNhdGVkCiAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSBpbiBzYWZlIGJlY2F1c2UgdGhlIHBocCBkb2N1bWVudGF0aW9uIGlzIHdyb25nCiAqLwpmdW5jdGlvbiByZWFkZGlyKCRkaXJfaGFuZGxlID0gbnVsbCkKewogICAgaWYgKCRkaXJfaGFuZGxlICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxyZWFkZGlyKCRkaXJfaGFuZGxlKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxyZWFkZGlyKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKLyoqCiAqIEVuY3J5cHRzIGdpdmVuIGRhdGEgd2l0aCBnaXZlbiBtZXRob2QgYW5kIGtleSwgcmV0dXJucyBhIHJhdwogKiBvciBiYXNlNjQgZW5jb2RlZCBzdHJpbmcKICoKICogQHBhcmFtIHN0cmluZyAkZGF0YSBUaGUgcGxhaW50ZXh0IG1lc3NhZ2UgZGF0YSB0byBiZSBlbmNyeXB0ZWQuCiAqIEBwYXJhbSBzdHJpbmcgJG1ldGhvZCBUaGUgY2lwaGVyIG1ldGhvZC4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgY2lwaGVyIG1ldGhvZHMsIHVzZSBvcGVuc3NsX2dldF9jaXBoZXJfbWV0aG9kcy4KICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkuCiAqIEBwYXJhbSBpbnQgJG9wdGlvbnMgb3B0aW9ucyBpcyBhIGJpdHdpc2UgZGlzanVuY3Rpb24gb2YgdGhlIGZsYWdzCiAqIE9QRU5TU0xfUkFXX0RBVEEgYW5kCiAqIE9QRU5TU0xfWkVST19QQURESU5HLgogKiBAcGFyYW0gc3RyaW5nICRpdiBBIG5vbi1OVUxMIEluaXRpYWxpemF0aW9uIFZlY3Rvci4KICogQHBhcmFtIHN0cmluZyAkdGFnIFRoZSBhdXRoZW50aWNhdGlvbiB0YWcgcGFzc2VkIGJ5IHJlZmVyZW5jZSB3aGVuIHVzaW5nIEFFQUQgY2lwaGVyIG1vZGUgKEdDTSBvciBDQ00pLgogKiBAcGFyYW0gc3RyaW5nICRhYWQgQWRkaXRpb25hbCBhdXRoZW50aWNhdGlvbiBkYXRhLgogKiBAcGFyYW0gaW50ICR0YWdfbGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZy4gSXRzIHZhbHVlIGNhbiBiZSBiZXR3ZWVuIDQgYW5kIDE2IGZvciBHQ00gbW9kZS4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgZW5jcnlwdGVkIHN0cmluZy4KICogQHRocm93cyBPcGVuc3NsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvcGVuc3NsX2VuY3J5cHQoc3RyaW5nICRkYXRhLCBzdHJpbmcgJG1ldGhvZCwgc3RyaW5nICRrZXksIGludCAkb3B0aW9ucyA9IDAsIHN0cmluZyAkaXYgPSAiIiwgc3RyaW5nICYkdGFnID0gIiIsIHN0cmluZyAkYWFkID0gIiIsIGludCAkdGFnX2xlbmd0aCA9IDE2KTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIC8vIFRoZSAkdGFnIHBhcmFtZXRlciBpcyBoYW5kbGVkIGluIGEgd2VpcmQgd2F5IGJ5IG9wZW5zc2xfZW5jcnlwdC4gSXQgY2Fubm90IGJlIHByb3ZpZGVkIHVubGVzcyBlbmNvZGluZyBpcyBBRUFECiAgICBpZiAoZnVuY19udW1fYXJncygpIDw9IDUpIHsKICAgICAgICAkcmVzdWx0ID0gXG9wZW5zc2xfZW5jcnlwdCgkZGF0YSwgJG1ldGhvZCwgJGtleSwgJG9wdGlvbnMsICRpdik7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcb3BlbnNzbF9lbmNyeXB0KCRkYXRhLCAkbWV0aG9kLCAka2V5LCAkb3B0aW9ucywgJGl2LCAkdGFnLCAkYWFkLCAkdGFnX2xlbmd0aCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgovKioKICogVGhlIGZ1bmN0aW9uIHNvY2tldF93cml0ZSB3cml0ZXMgdG8gdGhlCiAqIHNvY2tldCBmcm9tIHRoZSBnaXZlbgogKiBidWZmZXIuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc29ja2V0CiAqIEBwYXJhbSBzdHJpbmcgJGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGJlIHdyaXR0ZW4uCiAqIEBwYXJhbSBpbnQgJGxlbmd0aCBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIGxlbmd0aCBjYW4gc3BlY2lmeSBhbgogKiBhbHRlcm5hdGUgbGVuZ3RoIG9mIGJ5dGVzIHdyaXR0ZW4gdG8gdGhlIHNvY2tldC4gSWYgdGhpcyBsZW5ndGggaXMKICogZ3JlYXRlciB0aGFuIHRoZSBidWZmZXIgbGVuZ3RoLCBpdCBpcyBzaWxlbnRseSB0cnVuY2F0ZWQgdG8gdGhlIGxlbmd0aAogKiBvZiB0aGUgYnVmZmVyLgogKiBAcmV0dXJuIGludCBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gdG8gdGhlIHNvY2tldC4KICogVGhlIGVycm9yIGNvZGUgY2FuIGJlIHJldHJpZXZlZCB3aXRoCiAqIHNvY2tldF9sYXN0X2Vycm9yLiBUaGlzIGNvZGUgbWF5IGJlIHBhc3NlZCB0bwogKiBzb2NrZXRfc3RyZXJyb3IgdG8gZ2V0IGEgdGV4dHVhbCBleHBsYW5hdGlvbiBvZiB0aGUKICogZXJyb3IuCiAqIEB0aHJvd3MgU29ja2V0c0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc29ja2V0X3dyaXRlKCRzb2NrZXQsIHN0cmluZyAkYnVmZmVyLCBpbnQgJGxlbmd0aCA9IDApOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9ICRsZW5ndGggPT09IDAgPyBcc29ja2V0X3dyaXRlKCRzb2NrZXQsICRidWZmZXIpIDogXHNvY2tldF93cml0ZSgkc29ja2V0LCAkYnVmZmVyLCAkbGVuZ3RoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNvY2tldHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[TUlUIExpY2Vuc2UKCkNvcHlyaWdodCAoYykgMjAxOCBUaGVDb2RpbmdNYWNoaW5lCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[WyFbTGF0ZXN0IFN0YWJsZSBWZXJzaW9uXShodHRwczovL3Bvc2VyLnB1Z3gub3JnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS92L3N0YWJsZS5zdmcpXShodHRwczovL3BhY2thZ2lzdC5vcmcvcGFja2FnZXMvdGhlY29kaW5nbWFjaGluZS9zYWZlKQpbIVtUb3RhbCBEb3dubG9hZHNdKGh0dHBzOi8vcG9zZXIucHVneC5vcmcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2Rvd25sb2Fkcy5zdmcpXShodHRwczovL3BhY2thZ2lzdC5vcmcvcGFja2FnZXMvdGhlY29kaW5nbWFjaGluZS9zYWZlKQpbIVtMYXRlc3QgVW5zdGFibGUgVmVyc2lvbl0oaHR0cHM6Ly9wb3Nlci5wdWd4Lm9yZy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvdi91bnN0YWJsZS5zdmcpXShodHRwczovL3BhY2thZ2lzdC5vcmcvcGFja2FnZXMvdGhlY29kaW5nbWFjaGluZS9zYWZlKQpbIVtMaWNlbnNlXShodHRwczovL3Bvc2VyLnB1Z3gub3JnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9saWNlbnNlLnN2ZyldKGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy90aGVjb2RpbmdtYWNoaW5lL3NhZmUpClshW0J1aWxkIFN0YXR1c10oaHR0cHM6Ly90cmF2aXMtY2kub3JnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS5zdmc/YnJhbmNoPW1hc3RlcildKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy90aGVjb2RpbmdtYWNoaW5lL3NhZmUpClshW0NvbnRpbnVvdXMgSW50ZWdyYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS90aGVjb2RpbmdtYWNoaW5lL3NhZmUvd29ya2Zsb3dzL0NvbnRpbnVvdXMlMjBJbnRlZ3JhdGlvbi9iYWRnZS5zdmcpXShodHRwczovL2dpdGh1Yi5jb20vdGhlY29kaW5nbWFjaGluZS9zYWZlL2FjdGlvbnMpClshW2NvZGVjb3ZdKGh0dHBzOi8vY29kZWNvdi5pby9naC90aGVjb2RpbmdtYWNoaW5lL3NhZmUvYnJhbmNoL21hc3Rlci9ncmFwaC9iYWRnZS5zdmcpXShodHRwczovL2NvZGVjb3YuaW8vZ2gvdGhlY29kaW5nbWFjaGluZS9zYWZlKQoKU2FmZSBQSFAKPT09PT09PT0KCioqV29yayBpbiBwcm9ncmVzcyoqCgpBIHNldCBvZiBjb3JlIFBIUCBmdW5jdGlvbnMgcmV3cml0dGVuIHRvIHRocm93IGV4Y2VwdGlvbnMgaW5zdGVhZCBvZiByZXR1cm5pbmcgYGZhbHNlYCB3aGVuIGFuIGVycm9yIGlzIGVuY291bnRlcmVkLgoKIyMgVGhlIHByb2JsZW0KCk1vc3QgUEhQIGNvcmUgZnVuY3Rpb25zIHdlcmUgd3JpdHRlbiBiZWZvcmUgZXhjZXB0aW9uIGhhbmRsaW5nIHdhcyBhZGRlZCB0byB0aGUgbGFuZ3VhZ2UuIFRoZXJlZm9yZSwgbW9zdCBQSFAgZnVuY3Rpb25zCmRvIG5vdCB0aHJvdyBleGNlcHRpb25zLiBJbnN0ZWFkLCB0aGV5IHJldHVybiBgZmFsc2VgIGluIGNhc2Ugb2YgZXJyb3IuCgpCdXQgbW9zdCBvZiB1cyBhcmUgdG9vIGxhenkgdG8gY2hlY2sgZXhwbGljaXRseSBmb3IgZXZlcnkgc2luZ2xlIHJldHVybiBvZiBldmVyeSBjb3JlIFBIUCBmdW5jdGlvbi4KCmBgYHBocAovLyBUaGlzIGNvZGUgaXMgaW5jb3JyZWN0LiBUd2ljZS4KLy8gImZpbGVfZ2V0X2NvbnRlbnRzIiBjYW4gcmV0dXJuIGZhbHNlIGlmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0cwovLyAianNvbl9kZWNvZGUiIGNhbiByZXR1cm4gZmFsc2UgaWYgdGhlIGZpbGUgY29udGVudCBpcyBub3QgdmFsaWQgSlNPTgokY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCdmb29iYXIuanNvbicpOwokZm9vYmFyID0ganNvbl9kZWNvZGUoJGNvbnRlbnQpOwpgYGAKClRoZSBjb3JyZWN0IHZlcnNpb24gb2YgdGhpcyBjb2RlIHdvdWxkIGJlOgoKYGBgcGhwCiRjb250ZW50ID0gZmlsZV9nZXRfY29udGVudHMoJ2Zvb2Jhci5qc29uJyk7CmlmICgkY29udGVudCA9PT0gZmFsc2UpIHsKICAgIHRocm93IG5ldyBGaWxlTG9hZGluZ0V4Y2VwdGlvbignQ291bGQgbm90IGxvYWQgZmlsZSBmb29iYXIuanNvbicpOwp9CiRmb29iYXIgPSBqc29uX2RlY29kZSgkY29udGVudCk7CmlmIChqc29uX2xhc3RfZXJyb3IoKSAhPT0gSlNPTl9FUlJPUl9OT05FKSB7CiAgICB0aHJvdyBuZXcgRmlsZUxvYWRpbmdFeGNlcHRpb24oJ2Zvb2Jhci5qc29uIGRvZXMgbm90IGNvbnRhaW4gdmFsaWQgSlNPTjogJy5qc29uX2xhc3RfZXJyb3JfbXNnKCkpOwp9CmBgYAoKT2J2aW91c2x5LCB3aGlsZSB0aGlzIHNuaXBwZXQgaXMgY29ycmVjdCwgaXQgaXMgbGVzcyBlYXN5IHRvIHJlYWQuCgojIyBUaGUgc29sdXRpb24KCkVudGVyICp0aGVjb2RpbmdtYWNoaW5lL3NhZmUqIGFrYSBTYWZlLVBIUC4KClNhZmUtUEhQIHJlZGVjbGFyZXMgYWxsIGNvcmUgUEhQIGZ1bmN0aW9ucy4gVGhlIG5ldyBQSFAgZnVuY3Rpb25zIGFjdCBleGFjdGx5IGFzIHRoZSBvbGQgb25lcywgZXhjZXB0IHRoZXkKdGhyb3cgZXhjZXB0aW9ucyBwcm9wZXJseSB3aGVuIGFuIGVycm9yIGlzIGVuY291bnRlcmVkLiBUaGUgInNhZmUiIGZ1bmN0aW9ucyBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGNvcmUgUEhQCmZ1bmN0aW9ucywgZXhjZXB0IHRoZXkgYXJlIGluIHRoZSBgU2FmZWAgbmFtZXNwYWNlLgoKYGBgcGhwCnVzZSBmdW5jdGlvbiBTYWZlXGZpbGVfZ2V0X2NvbnRlbnRzOwp1c2UgZnVuY3Rpb24gU2FmZVxqc29uX2RlY29kZTsKCi8vIFRoaXMgY29kZSBpcyBib3RoIHNhZmUgYW5kIHNpbXBsZSEKJGNvbnRlbnQgPSBmaWxlX2dldF9jb250ZW50cygnZm9vYmFyLmpzb24nKTsKJGZvb2JhciA9IGpzb25fZGVjb2RlKCRjb250ZW50KTsKYGBgCgpBbGwgUEhQIGZ1bmN0aW9ucyB0aGF0IGNhbiByZXR1cm4gYGZhbHNlYCBvbiBlcnJvciBhcmUgcGFydCBvZiBTYWZlLgpJbiBhZGRpdGlvbiwgU2FmZSBhbHNvIHByb3ZpZGUgMiAnU2FmZScgY2xhc3NlczogYFNhZmVcRGF0ZVRpbWVgIGFuZCBgU2FmZVxEYXRlVGltZUltbXV0YWJsZWAgd2hvc2UgbWV0aG9kcyB3aWxsIHRocm93IGV4Y2VwdGlvbnMgaW5zdGVhZCBvZiByZXR1cm5pbmcgZmFsc2UuCgojIyBQSFBTdGFuIGludGVncmF0aW9uCgo+IFllYWguLi4gYnV0IEkgbXVzdCBleHBsaWNpdGx5IHRoaW5rIGFib3V0IGltcG9ydGluZyB0aGUgInNhZmUiIHZhcmlhbnQgb2YgdGhlIGZ1bmN0aW9uLCBmb3IgZWFjaCBhbmQgZXZlcnkgZmlsZSBvZiBteSBhcHBsaWNhdGlvbi4KPiBJJ20gc3VyZSBJIHdpbGwgZm9yZ2V0IHNvbWUgInVzZSBmdW5jdGlvbiIgc3RhdGVtZW50cyEKCkZlYXIgbm90ISB0aGVjb2RpbmdtYWNoaW5lL3NhZmUgY29tZXMgd2l0aCBhIFBIUFN0YW4gcnVsZS4KCk5ldmVyIGhlYXJkIG9mIFtQSFBTdGFuXShodHRwczovL2dpdGh1Yi5jb20vcGhwc3Rhbi9waHBzdGFuKSBiZWZvcmU/CkNoZWNrIGl0IG91dCwgaXQncyBhbiBhbWF6aW5nIGNvZGUgYW5hbHl6ZXIgZm9yIFBIUC4KClNpbXBseSBpbnN0YWxsIHRoZSBTYWZlIHJ1bGUgaW4geW91ciBQSFBTdGFuIHNldHVwIChleHBsYWluZWQgaW4gdGhlICJJbnN0YWxsYXRpb24iIHNlY3Rpb24pIGFuZCBQSFBTdGFuIHdpbGwgbGV0IHlvdSBrbm93IGVhY2ggdGltZSB5b3UgYXJlIHVzaW5nIGFuICJ1bnNhZmUiIGZ1bmN0aW9uLgoKVGhlIGNvZGUgYmVsb3cgd2lsbCB0cmlnZ2VyIHRoaXMgd2FybmluZzoKCmBgYHBocAokY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCdmb29iYXIuanNvbicpOwpgYGAKCj4gRnVuY3Rpb24gZmlsZV9nZXRfY29udGVudHMgaXMgdW5zYWZlIHRvIHVzZS4gSXQgY2FuIHJldHVybiBGQUxTRSBpbnN0ZWFkIG9mIHRocm93aW5nIGFuIGV4Y2VwdGlvbi4gUGxlYXNlIGFkZCAndXNlIGZ1bmN0aW9uIFNhZmVcXGZpbGVfZ2V0X2NvbnRlbnRzOycgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSB0byB1c2UgdGhlIHZhcmlhbnQgcHJvdmlkZWQgYnkgdGhlICd0aGVjb2RpbmdtYWNoaW5lL3NhZmUnIGxpYnJhcnkuCgojIyBJbnN0YWxsYXRpb24KClVzZSBjb21wb3NlciB0byBpbnN0YWxsIFNhZmUtUEhQOgoKYGBgYmFzaAokIGNvbXBvc2VyIHJlcXVpcmUgdGhlY29kaW5nbWFjaGluZS9zYWZlCmBgYAoKKkhpZ2hseSByZWNvbW1lbmRlZCo6IGluc3RhbGwgUEhQU3RhbiBhbmQgUEhQU3RhbiBleHRlbnNpb246CgpgYGBiYXNoCiQgY29tcG9zZXIgcmVxdWlyZSAtLWRldiB0aGVjb2RpbmdtYWNoaW5lL3BocHN0YW4tc2FmZS1ydWxlCmBgYAoKTm93LCBlZGl0IHlvdXIgYHBocHN0YW4ubmVvbmAgZmlsZSBhbmQgYWRkIHRoZXNlIHJ1bGVzOgoKYGBgeW1sCmluY2x1ZGVzOgogICAgLSB2ZW5kb3IvdGhlY29kaW5nbWFjaGluZS9waHBzdGFuLXNhZmUtcnVsZS9waHBzdGFuLXNhZmUtcnVsZS5uZW9uCmBgYAoKIyMgQXV0b21hdGVkIHJlZmFjdG9yaW5nCgpZb3UgaGF2ZSBhIGxhcmdlIGxlZ2FjeSBjb2RlYmFzZSBhbmQgd2FudCB0byB1c2UgIlNhZmUtUEhQIiBmdW5jdGlvbnMgdGhyb3VnaG91dCB5b3VyIHByb2plY3Q/IFBIUFN0YW4gd2lsbCBoZWxwIHlvdQpmaW5kIHRoZXNlIGZ1bmN0aW9ucyBidXQgY2hhbmdpbmcgdGhlIG5hbWVzcGFjZSBvZiB0aGUgZnVuY3Rpb25zIG9uZSBmdW5jdGlvbiBhdCBhIHRpbWUgbWlnaHQgYmUgYSB0ZWRpb3VzIHRhc2suCgpGb3J0dW5hdGVseSwgU2FmZSBjb21lcyBidW5kbGVkIHdpdGggYSAiUmVjdG9yIiBjb25maWd1cmF0aW9uIGZpbGUuIFtSZWN0b3JdKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWN0b3JwaHAvcmVjdG9yKSBpcyBhIGNvbW1hbmQtbGluZQp0b29sIHRoYXQgcGVyZm9ybXMgaW5zdGFudCByZWZhY3RvcmluZyBvZiB5b3VyIGFwcGxpY2F0aW9uLgoKUnVuCgpgYGBiYXNoCiQgY29tcG9zZXIgcmVxdWlyZSAtLWRldiByZWN0b3IvcmVjdG9yOl4wLjcKYGBgCgp0byBpbnN0YWxsIGByZWN0b3IvcmVjdG9yYC4KClJ1bgoKYGBgYmFzaAp2ZW5kb3IvYmluL3JlY3RvciBwcm9jZXNzIHNyYy8gLS1jb25maWcgdmVuZG9yL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9yZWN0b3ItbWlncmF0ZS0wLjcucGhwCmBgYAoKdG8gcnVuIGByZWN0b3IvcmVjdG9yYC4KCipOb3RlOiogZG8gbm90IGZvcmdldCB0byByZXBsYWNlICJzcmMvIiB3aXRoIHRoZSBwYXRoIHRvIHlvdXIgc291cmNlIGRpcmVjdG9yeS4KCioqSW1wb3J0YW50OioqIHRoZSByZWZhY3RvcmluZyBvbmx5IHBlcmZvcm1zIGEgImR1bWIiIHJlcGxhY2VtZW50IG9mIGZ1bmN0aW9ucy4gSXQgd2lsbCBub3QgbW9kaWZ5IHRoZSB3YXkKImZhbHNlIiByZXR1cm4gdmFsdWVzIGFyZSBoYW5kbGVkLiBTbyBpZiB5b3VyIGNvZGUgd2FzIGFscmVhZHkgcGVyZm9ybWluZyBlcnJvciBoYW5kbGluZywgeW91IHdpbGwgaGF2ZSB0byBkZWFsCndpdGggaXQgbWFudWFsbHkuCgpFc3BlY2lhbGx5LCB5b3Ugc2hvdWxkIGxvb2sgZm9yIGVycm9yIGhhbmRsaW5nIHRoYXQgd2FzIGFscmVhZHkgcGVyZm9ybWVkLCBsaWtlOgoKYGBgcGhwCmlmICghbWtkaXIoJGRpclBhdGgpKSB7CiAgICAvLyBEbyBzb21ldGhpbmcgb24gZXJyb3IKfQpgYGAKClRoaXMgY29kZSB3aWxsIGJlIHJlZmFjdG9yZWQgYnkgUmVjdG9yIHRvOgoKYGBgcGhwCmlmICghXFNhZmVcbWtkaXIoJGRpclBhdGgpKSB7CiAgICAvLyBEbyBzb21ldGhpbmcgb24gZXJyb3IKfQpgYGAKCllvdSBzaG91bGQgdGhlbiAobWFudWFsbHkpIHJlZmFjdG9yIGl0IHRvOgoKYGBgcGhwCnRyeSB7CiAgICBcU2FmZVxta2RpcigkZGlyUGF0aCkpOwp9IGNhdGNoIChcU2FmZVxGaWxlc3lzdGVtRXhjZXB0aW9uICRlKSB7CiAgICAvLyBEbyBzb21ldGhpbmcgb24gZXJyb3IKfQpgYGAKCiMjIFBlcmZvcm1hbmNlIGltcGFjdAoKU2FmZSBpcyBsb2FkaW5nIDEwMDArIGZ1bmN0aW9ucyBmcm9tIH44NSBmaWxlcyBvbiBlYWNoIHJlcXVlc3QuIFlldCwgdGhlIHBlcmZvcm1hbmNlIGltcGFjdCBvZiB0aGlzIGxvYWRpbmcgaXMgcXVpdGUgbG93LgoKSW4gY2FzZSB5b3Ugd29ycnksIHVzaW5nIFNhZmUgd2lsbCAiY29zdCIgeW91IH43MDDCtXMgb24gZWFjaCByZXF1ZXN0LiBUaGUgW3BlcmZvcm1hbmNlIHNlY3Rpb25dKHBlcmZvcm1hbmNlL1JFQURNRS5tZCkKY29udGFpbnMgbW9yZSBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIHdheSB3ZSB0ZXN0ZWQgdGhlIHBlcmZvcm1hbmNlIGltcGFjdCBvZiBTYWZlLgoKIyMgTGVhcm4gbW9yZQoKUmVhZCBbdGhlIHJlbGVhc2UgYXJ0aWNsZSBvbiBUaGVDb2RpbmdNYWNoaW5lJ3MgYmxvZ10oaHR0cHM6Ly90aGVjb2RpbmdtYWNoaW5lLmlvL2ludHJvZHVjaW5nLXNhZmUtcGhwKSBpZiB5b3Ugd2FudCB0bwpsZWFybiBtb3JlIGFib3V0IHdoYXQgdHJpZ2dlcmVkIHRoZSBkZXZlbG9wbWVudCBvZiBTYWZlLVBIUC4KCiMjIENvbnRyaWJ1dGluZwoKVGhlIGZpbGVzIHRoYXQgY29udGFpbiBhbGwgdGhlIGZ1bmN0aW9ucyBhcmUgYXV0by1nZW5lcmF0ZWQgZnJvbSB0aGUgUEhQIGRvYy4KUmVhZCB0aGUgW0NPTlRSSUJVVElORy5tZF0oQ09OVFJJQlVUSU5HLm1kKSBmaWxlIHRvIGxlYXJuIGhvdyB0byByZWdlbmVyYXRlIHRoZXNlIGZpbGVzIGFuZCB0byBjb250cmlidXRlIHRvIHRoaXMgbGlicmFyeS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/rector-migrate-0.7.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKdXNlIFJlY3RvclxSZW5hbWluZ1xSZWN0b3JcRnVuY0NhbGxcUmVuYW1lRnVuY3Rpb25SZWN0b3I7CnVzZSBTeW1mb255XENvbXBvbmVudFxEZXBlbmRlbmN5SW5qZWN0aW9uXExvYWRlclxDb25maWd1cmF0b3JcQ29udGFpbmVyQ29uZmlndXJhdG9yOwoKIyBUaGlzIGZpbGUgY29uZmlndXJlcyByZWN0b3IvcmVjdG9yOn4wLjcuMCB0byByZXBsYWNlIGFsbCBQSFAgZnVuY3Rpb25zIHdpdGggdGhlaXIgZXF1aXZhbGVudCAic2FmZSIgZnVuY3Rpb25zCnJldHVybiBzdGF0aWMgZnVuY3Rpb24gKENvbnRhaW5lckNvbmZpZ3VyYXRvciAkY29udGFpbmVyQ29uZmlndXJhdG9yKTogdm9pZCB7CiAgICAkc2VydmljZXMgPSAkY29udGFpbmVyQ29uZmlndXJhdG9yLT5zZXJ2aWNlcygpOwoKICAgICRzZXJ2aWNlcy0+c2V0KFJlbmFtZUZ1bmN0aW9uUmVjdG9yOjpjbGFzcykKICAgICAgICAtPmNhbGwoJ2NvbmZpZ3VyZScsIFtbIFJlbmFtZUZ1bmN0aW9uUmVjdG9yOjpPTERfRlVOQ1RJT05fVE9fTkVXX0ZVTkNUSU9OID0+IFsKICAgICAgICAgICAgJ2FwYWNoZV9nZXRlbnYnID0+ICdTYWZlXGFwYWNoZV9nZXRlbnYnLAogICAgICAgICAgICAnYXBhY2hlX2dldF92ZXJzaW9uJyA9PiAnU2FmZVxhcGFjaGVfZ2V0X3ZlcnNpb24nLAogICAgICAgICAgICAnYXBhY2hlX3JlcXVlc3RfaGVhZGVycycgPT4gJ1NhZmVcYXBhY2hlX3JlcXVlc3RfaGVhZGVycycsCiAgICAgICAgICAgICdhcGFjaGVfcmVzZXRfdGltZW91dCcgPT4gJ1NhZmVcYXBhY2hlX3Jlc2V0X3RpbWVvdXQnLAogICAgICAgICAgICAnYXBhY2hlX3Jlc3BvbnNlX2hlYWRlcnMnID0+ICdTYWZlXGFwYWNoZV9yZXNwb25zZV9oZWFkZXJzJywKICAgICAgICAgICAgJ2FwYWNoZV9zZXRlbnYnID0+ICdTYWZlXGFwYWNoZV9zZXRlbnYnLAogICAgICAgICAgICAnYXBjdV9jYWNoZV9pbmZvJyA9PiAnU2FmZVxhcGN1X2NhY2hlX2luZm8nLAogICAgICAgICAgICAnYXBjdV9jYXMnID0+ICdTYWZlXGFwY3VfY2FzJywKICAgICAgICAgICAgJ2FwY3VfZGVjJyA9PiAnU2FmZVxhcGN1X2RlYycsCiAgICAgICAgICAgICdhcGN1X2ZldGNoJyA9PiAnU2FmZVxhcGN1X2ZldGNoJywKICAgICAgICAgICAgJ2FwY3VfaW5jJyA9PiAnU2FmZVxhcGN1X2luYycsCiAgICAgICAgICAgICdhcGN1X3NtYV9pbmZvJyA9PiAnU2FmZVxhcGN1X3NtYV9pbmZvJywKICAgICAgICAgICAgJ2FwY19mZXRjaCcgPT4gJ1NhZmVcYXBjX2ZldGNoJywKICAgICAgICAgICAgJ2FycmF5X2NvbWJpbmUnID0+ICdTYWZlXGFycmF5X2NvbWJpbmUnLAogICAgICAgICAgICAnYXJyYXlfZmxpcCcgPT4gJ1NhZmVcYXJyYXlfZmxpcCcsCiAgICAgICAgICAgICdhcnJheV9yZXBsYWNlJyA9PiAnU2FmZVxhcnJheV9yZXBsYWNlJywKICAgICAgICAgICAgJ2FycmF5X3JlcGxhY2VfcmVjdXJzaXZlJyA9PiAnU2FmZVxhcnJheV9yZXBsYWNlX3JlY3Vyc2l2ZScsCiAgICAgICAgICAgICdhcnJheV93YWxrX3JlY3Vyc2l2ZScgPT4gJ1NhZmVcYXJyYXlfd2Fsa19yZWN1cnNpdmUnLAogICAgICAgICAgICAnYXJzb3J0JyA9PiAnU2FmZVxhcnNvcnQnLAogICAgICAgICAgICAnYXNvcnQnID0+ICdTYWZlXGFzb3J0JywKICAgICAgICAgICAgJ2Jhc2U2NF9kZWNvZGUnID0+ICdTYWZlXGJhc2U2NF9kZWNvZGUnLAogICAgICAgICAgICAnYnpjbG9zZScgPT4gJ1NhZmVcYnpjbG9zZScsCiAgICAgICAgICAgICdiemZsdXNoJyA9PiAnU2FmZVxiemZsdXNoJywKICAgICAgICAgICAgJ2J6cmVhZCcgPT4gJ1NhZmVcYnpyZWFkJywKICAgICAgICAgICAgJ2J6d3JpdGUnID0+ICdTYWZlXGJ6d3JpdGUnLAogICAgICAgICAgICAnY2hkaXInID0+ICdTYWZlXGNoZGlyJywKICAgICAgICAgICAgJ2NoZ3JwJyA9PiAnU2FmZVxjaGdycCcsCiAgICAgICAgICAgICdjaG1vZCcgPT4gJ1NhZmVcY2htb2QnLAogICAgICAgICAgICAnY2hvd24nID0+ICdTYWZlXGNob3duJywKICAgICAgICAgICAgJ2Nocm9vdCcgPT4gJ1NhZmVcY2hyb290JywKICAgICAgICAgICAgJ2NsYXNzX2FsaWFzJyA9PiAnU2FmZVxjbGFzc19hbGlhcycsCiAgICAgICAgICAgICdjbGFzc19pbXBsZW1lbnRzJyA9PiAnU2FmZVxjbGFzc19pbXBsZW1lbnRzJywKICAgICAgICAgICAgJ2NsYXNzX3BhcmVudHMnID0+ICdTYWZlXGNsYXNzX3BhcmVudHMnLAogICAgICAgICAgICAnY2xhc3NfdXNlcycgPT4gJ1NhZmVcY2xhc3NfdXNlcycsCiAgICAgICAgICAgICdjbGlfc2V0X3Byb2Nlc3NfdGl0bGUnID0+ICdTYWZlXGNsaV9zZXRfcHJvY2Vzc190aXRsZScsCiAgICAgICAgICAgICdjbG9zZWxvZycgPT4gJ1NhZmVcY2xvc2Vsb2cnLAogICAgICAgICAgICAnY29tX2V2ZW50X3NpbmsnID0+ICdTYWZlXGNvbV9ldmVudF9zaW5rJywKICAgICAgICAgICAgJ2NvbV9sb2FkX3R5cGVsaWInID0+ICdTYWZlXGNvbV9sb2FkX3R5cGVsaWInLAogICAgICAgICAgICAnY29tX3ByaW50X3R5cGVpbmZvJyA9PiAnU2FmZVxjb21fcHJpbnRfdHlwZWluZm8nLAogICAgICAgICAgICAnY29udmVydF91dWRlY29kZScgPT4gJ1NhZmVcY29udmVydF91dWRlY29kZScsCiAgICAgICAgICAgICdjb252ZXJ0X3V1ZW5jb2RlJyA9PiAnU2FmZVxjb252ZXJ0X3V1ZW5jb2RlJywKICAgICAgICAgICAgJ2NvcHknID0+ICdTYWZlXGNvcHknLAogICAgICAgICAgICAnY3JlYXRlX2Z1bmN0aW9uJyA9PiAnU2FmZVxjcmVhdGVfZnVuY3Rpb24nLAogICAgICAgICAgICAnY3VicmlkX2ZyZWVfcmVzdWx0JyA9PiAnU2FmZVxjdWJyaWRfZnJlZV9yZXN1bHQnLAogICAgICAgICAgICAnY3VicmlkX2dldF9jaGFyc2V0JyA9PiAnU2FmZVxjdWJyaWRfZ2V0X2NoYXJzZXQnLAogICAgICAgICAgICAnY3VicmlkX2dldF9jbGllbnRfaW5mbycgPT4gJ1NhZmVcY3VicmlkX2dldF9jbGllbnRfaW5mbycsCiAgICAgICAgICAgICdjdWJyaWRfZ2V0X2RiX3BhcmFtZXRlcicgPT4gJ1NhZmVcY3VicmlkX2dldF9kYl9wYXJhbWV0ZXInLAogICAgICAgICAgICAnY3VicmlkX2dldF9zZXJ2ZXJfaW5mbycgPT4gJ1NhZmVcY3VicmlkX2dldF9zZXJ2ZXJfaW5mbycsCiAgICAgICAgICAgICdjdWJyaWRfaW5zZXJ0X2lkJyA9PiAnU2FmZVxjdWJyaWRfaW5zZXJ0X2lkJywKICAgICAgICAgICAgJ2N1YnJpZF9sb2IyX25ldycgPT4gJ1NhZmVcY3VicmlkX2xvYjJfbmV3JywKICAgICAgICAgICAgJ2N1YnJpZF9sb2IyX3NpemUnID0+ICdTYWZlXGN1YnJpZF9sb2IyX3NpemUnLAogICAgICAgICAgICAnY3VicmlkX2xvYjJfc2l6ZTY0JyA9PiAnU2FmZVxjdWJyaWRfbG9iMl9zaXplNjQnLAogICAgICAgICAgICAnY3VicmlkX2xvYjJfdGVsbCcgPT4gJ1NhZmVcY3VicmlkX2xvYjJfdGVsbCcsCiAgICAgICAgICAgICdjdWJyaWRfbG9iMl90ZWxsNjQnID0+ICdTYWZlXGN1YnJpZF9sb2IyX3RlbGw2NCcsCiAgICAgICAgICAgICdjdWJyaWRfc2V0X2RiX3BhcmFtZXRlcicgPT4gJ1NhZmVcY3VicmlkX3NldF9kYl9wYXJhbWV0ZXInLAogICAgICAgICAgICAnY3VybF9lc2NhcGUnID0+ICdTYWZlXGN1cmxfZXNjYXBlJywKICAgICAgICAgICAgJ2N1cmxfZXhlYycgPT4gJ1NhZmVcY3VybF9leGVjJywKICAgICAgICAgICAgJ2N1cmxfZ2V0aW5mbycgPT4gJ1NhZmVcY3VybF9nZXRpbmZvJywKICAgICAgICAgICAgJ2N1cmxfaW5pdCcgPT4gJ1NhZmVcY3VybF9pbml0JywKICAgICAgICAgICAgJ2N1cmxfbXVsdGlfZXJybm8nID0+ICdTYWZlXGN1cmxfbXVsdGlfZXJybm8nLAogICAgICAgICAgICAnY3VybF9tdWx0aV9pbmZvX3JlYWQnID0+ICdTYWZlXGN1cmxfbXVsdGlfaW5mb19yZWFkJywKICAgICAgICAgICAgJ2N1cmxfbXVsdGlfaW5pdCcgPT4gJ1NhZmVcY3VybF9tdWx0aV9pbml0JywKICAgICAgICAgICAgJ2N1cmxfc2V0b3B0JyA9PiAnU2FmZVxjdXJsX3NldG9wdCcsCiAgICAgICAgICAgICdjdXJsX3NoYXJlX2Vycm5vJyA9PiAnU2FmZVxjdXJsX3NoYXJlX2Vycm5vJywKICAgICAgICAgICAgJ2N1cmxfc2hhcmVfc2V0b3B0JyA9PiAnU2FmZVxjdXJsX3NoYXJlX3NldG9wdCcsCiAgICAgICAgICAgICdjdXJsX3VuZXNjYXBlJyA9PiAnU2FmZVxjdXJsX3VuZXNjYXBlJywKICAgICAgICAgICAgJ2RhdGUnID0+ICdTYWZlXGRhdGUnLAogICAgICAgICAgICAnZGF0ZV9wYXJzZScgPT4gJ1NhZmVcZGF0ZV9wYXJzZScsCiAgICAgICAgICAgICdkYXRlX3BhcnNlX2Zyb21fZm9ybWF0JyA9PiAnU2FmZVxkYXRlX3BhcnNlX2Zyb21fZm9ybWF0JywKICAgICAgICAgICAgJ2RhdGVfc3VucmlzZScgPT4gJ1NhZmVcZGF0ZV9zdW5yaXNlJywKICAgICAgICAgICAgJ2RhdGVfc3Vuc2V0JyA9PiAnU2FmZVxkYXRlX3N1bnNldCcsCiAgICAgICAgICAgICdkYXRlX3N1bl9pbmZvJyA9PiAnU2FmZVxkYXRlX3N1bl9pbmZvJywKICAgICAgICAgICAgJ2RiMl9hdXRvY29tbWl0JyA9PiAnU2FmZVxkYjJfYXV0b2NvbW1pdCcsCiAgICAgICAgICAgICdkYjJfYmluZF9wYXJhbScgPT4gJ1NhZmVcZGIyX2JpbmRfcGFyYW0nLAogICAgICAgICAgICAnZGIyX2NsaWVudF9pbmZvJyA9PiAnU2FmZVxkYjJfY2xpZW50X2luZm8nLAogICAgICAgICAgICAnZGIyX2Nsb3NlJyA9PiAnU2FmZVxkYjJfY2xvc2UnLAogICAgICAgICAgICAnZGIyX2NvbW1pdCcgPT4gJ1NhZmVcZGIyX2NvbW1pdCcsCiAgICAgICAgICAgICdkYjJfZXhlY3V0ZScgPT4gJ1NhZmVcZGIyX2V4ZWN1dGUnLAogICAgICAgICAgICAnZGIyX2ZyZWVfcmVzdWx0JyA9PiAnU2FmZVxkYjJfZnJlZV9yZXN1bHQnLAogICAgICAgICAgICAnZGIyX2ZyZWVfc3RtdCcgPT4gJ1NhZmVcZGIyX2ZyZWVfc3RtdCcsCiAgICAgICAgICAgICdkYjJfZ2V0X29wdGlvbicgPT4gJ1NhZmVcZGIyX2dldF9vcHRpb24nLAogICAgICAgICAgICAnZGIyX3BjbG9zZScgPT4gJ1NhZmVcZGIyX3BjbG9zZScsCiAgICAgICAgICAgICdkYjJfcm9sbGJhY2snID0+ICdTYWZlXGRiMl9yb2xsYmFjaycsCiAgICAgICAgICAgICdkYjJfc2VydmVyX2luZm8nID0+ICdTYWZlXGRiMl9zZXJ2ZXJfaW5mbycsCiAgICAgICAgICAgICdkYjJfc2V0X29wdGlvbicgPT4gJ1NhZmVcZGIyX3NldF9vcHRpb24nLAogICAgICAgICAgICAnZGVmaW5lJyA9PiAnU2FmZVxkZWZpbmUnLAogICAgICAgICAgICAnZGVmbGF0ZV9hZGQnID0+ICdTYWZlXGRlZmxhdGVfYWRkJywKICAgICAgICAgICAgJ2RlZmxhdGVfaW5pdCcgPT4gJ1NhZmVcZGVmbGF0ZV9pbml0JywKICAgICAgICAgICAgJ2Rpc2tfZnJlZV9zcGFjZScgPT4gJ1NhZmVcZGlza19mcmVlX3NwYWNlJywKICAgICAgICAgICAgJ2Rpc2tfdG90YWxfc3BhY2UnID0+ICdTYWZlXGRpc2tfdG90YWxfc3BhY2UnLAogICAgICAgICAgICAnZGwnID0+ICdTYWZlXGRsJywKICAgICAgICAgICAgJ2Ruc19nZXRfcmVjb3JkJyA9PiAnU2FmZVxkbnNfZ2V0X3JlY29yZCcsCiAgICAgICAgICAgICdlaW9fYnVzeScgPT4gJ1NhZmVcZWlvX2J1c3knLAogICAgICAgICAgICAnZWlvX2NobW9kJyA9PiAnU2FmZVxlaW9fY2htb2QnLAogICAgICAgICAgICAnZWlvX2Nob3duJyA9PiAnU2FmZVxlaW9fY2hvd24nLAogICAgICAgICAgICAnZWlvX2Nsb3NlJyA9PiAnU2FmZVxlaW9fY2xvc2UnLAogICAgICAgICAgICAnZWlvX2N1c3RvbScgPT4gJ1NhZmVcZWlvX2N1c3RvbScsCiAgICAgICAgICAgICdlaW9fZHVwMicgPT4gJ1NhZmVcZWlvX2R1cDInLAogICAgICAgICAgICAnZWlvX2V2ZW50X2xvb3AnID0+ICdTYWZlXGVpb19ldmVudF9sb29wJywKICAgICAgICAgICAgJ2Vpb19mYWxsb2NhdGUnID0+ICdTYWZlXGVpb19mYWxsb2NhdGUnLAogICAgICAgICAgICAnZWlvX2ZjaG1vZCcgPT4gJ1NhZmVcZWlvX2ZjaG1vZCcsCiAgICAgICAgICAgICdlaW9fZmRhdGFzeW5jJyA9PiAnU2FmZVxlaW9fZmRhdGFzeW5jJywKICAgICAgICAgICAgJ2Vpb19mc3RhdCcgPT4gJ1NhZmVcZWlvX2ZzdGF0JywKICAgICAgICAgICAgJ2Vpb19mc3RhdHZmcycgPT4gJ1NhZmVcZWlvX2ZzdGF0dmZzJywKICAgICAgICAgICAgJ2Vpb19mc3luYycgPT4gJ1NhZmVcZWlvX2ZzeW5jJywKICAgICAgICAgICAgJ2Vpb19mdHJ1bmNhdGUnID0+ICdTYWZlXGVpb19mdHJ1bmNhdGUnLAogICAgICAgICAgICAnZWlvX2Z1dGltZScgPT4gJ1NhZmVcZWlvX2Z1dGltZScsCiAgICAgICAgICAgICdlaW9fZ3JwJyA9PiAnU2FmZVxlaW9fZ3JwJywKICAgICAgICAgICAgJ2Vpb19sc3RhdCcgPT4gJ1NhZmVcZWlvX2xzdGF0JywKICAgICAgICAgICAgJ2Vpb19ta2RpcicgPT4gJ1NhZmVcZWlvX21rZGlyJywKICAgICAgICAgICAgJ2Vpb19ta25vZCcgPT4gJ1NhZmVcZWlvX21rbm9kJywKICAgICAgICAgICAgJ2Vpb19ub3AnID0+ICdTYWZlXGVpb19ub3AnLAogICAgICAgICAgICAnZWlvX3JlYWRhaGVhZCcgPT4gJ1NhZmVcZWlvX3JlYWRhaGVhZCcsCiAgICAgICAgICAgICdlaW9fcmVhZGRpcicgPT4gJ1NhZmVcZWlvX3JlYWRkaXInLAogICAgICAgICAgICAnZWlvX3JlYWRsaW5rJyA9PiAnU2FmZVxlaW9fcmVhZGxpbmsnLAogICAgICAgICAgICAnZWlvX3JlbmFtZScgPT4gJ1NhZmVcZWlvX3JlbmFtZScsCiAgICAgICAgICAgICdlaW9fcm1kaXInID0+ICdTYWZlXGVpb19ybWRpcicsCiAgICAgICAgICAgICdlaW9fc2VlaycgPT4gJ1NhZmVcZWlvX3NlZWsnLAogICAgICAgICAgICAnZWlvX3NlbmRmaWxlJyA9PiAnU2FmZVxlaW9fc2VuZGZpbGUnLAogICAgICAgICAgICAnZWlvX3N0YXQnID0+ICdTYWZlXGVpb19zdGF0JywKICAgICAgICAgICAgJ2Vpb19zdGF0dmZzJyA9PiAnU2FmZVxlaW9fc3RhdHZmcycsCiAgICAgICAgICAgICdlaW9fc3ltbGluaycgPT4gJ1NhZmVcZWlvX3N5bWxpbmsnLAogICAgICAgICAgICAnZWlvX3N5bmMnID0+ICdTYWZlXGVpb19zeW5jJywKICAgICAgICAgICAgJ2Vpb19zeW5jZnMnID0+ICdTYWZlXGVpb19zeW5jZnMnLAogICAgICAgICAgICAnZWlvX3N5bmNfZmlsZV9yYW5nZScgPT4gJ1NhZmVcZWlvX3N5bmNfZmlsZV9yYW5nZScsCiAgICAgICAgICAgICdlaW9fdHJ1bmNhdGUnID0+ICdTYWZlXGVpb190cnVuY2F0ZScsCiAgICAgICAgICAgICdlaW9fdW5saW5rJyA9PiAnU2FmZVxlaW9fdW5saW5rJywKICAgICAgICAgICAgJ2Vpb191dGltZScgPT4gJ1NhZmVcZWlvX3V0aW1lJywKICAgICAgICAgICAgJ2Vpb193cml0ZScgPT4gJ1NhZmVcZWlvX3dyaXRlJywKICAgICAgICAgICAgJ2Vycm9yX2xvZycgPT4gJ1NhZmVcZXJyb3JfbG9nJywKICAgICAgICAgICAgJ2Zhc3RjZ2lfZmluaXNoX3JlcXVlc3QnID0+ICdTYWZlXGZhc3RjZ2lfZmluaXNoX3JlcXVlc3QnLAogICAgICAgICAgICAnZmJpcmRfYmxvYl9jYW5jZWwnID0+ICdTYWZlXGZiaXJkX2Jsb2JfY2FuY2VsJywKICAgICAgICAgICAgJ2ZjbG9zZScgPT4gJ1NhZmVcZmNsb3NlJywKICAgICAgICAgICAgJ2ZmbHVzaCcgPT4gJ1NhZmVcZmZsdXNoJywKICAgICAgICAgICAgJ2ZpbGUnID0+ICdTYWZlXGZpbGUnLAogICAgICAgICAgICAnZmlsZWF0aW1lJyA9PiAnU2FmZVxmaWxlYXRpbWUnLAogICAgICAgICAgICAnZmlsZWN0aW1lJyA9PiAnU2FmZVxmaWxlY3RpbWUnLAogICAgICAgICAgICAnZmlsZWlub2RlJyA9PiAnU2FmZVxmaWxlaW5vZGUnLAogICAgICAgICAgICAnZmlsZW10aW1lJyA9PiAnU2FmZVxmaWxlbXRpbWUnLAogICAgICAgICAgICAnZmlsZW93bmVyJyA9PiAnU2FmZVxmaWxlb3duZXInLAogICAgICAgICAgICAnZmlsZXNpemUnID0+ICdTYWZlXGZpbGVzaXplJywKICAgICAgICAgICAgJ2ZpbGVfZ2V0X2NvbnRlbnRzJyA9PiAnU2FmZVxmaWxlX2dldF9jb250ZW50cycsCiAgICAgICAgICAgICdmaWxlX3B1dF9jb250ZW50cycgPT4gJ1NhZmVcZmlsZV9wdXRfY29udGVudHMnLAogICAgICAgICAgICAnZmlsdGVyX2lucHV0X2FycmF5JyA9PiAnU2FmZVxmaWx0ZXJfaW5wdXRfYXJyYXknLAogICAgICAgICAgICAnZmlsdGVyX3Zhcl9hcnJheScgPT4gJ1NhZmVcZmlsdGVyX3Zhcl9hcnJheScsCiAgICAgICAgICAgICdmaW5mb19jbG9zZScgPT4gJ1NhZmVcZmluZm9fY2xvc2UnLAogICAgICAgICAgICAnZmluZm9fb3BlbicgPT4gJ1NhZmVcZmluZm9fb3BlbicsCiAgICAgICAgICAgICdmbG9jaycgPT4gJ1NhZmVcZmxvY2snLAogICAgICAgICAgICAnZm9wZW4nID0+ICdTYWZlXGZvcGVuJywKICAgICAgICAgICAgJ2ZwdXRjc3YnID0+ICdTYWZlXGZwdXRjc3YnLAogICAgICAgICAgICAnZnJlYWQnID0+ICdTYWZlXGZyZWFkJywKICAgICAgICAgICAgJ2Zzb2Nrb3BlbicgPT4gJ1NhZmVcZnNvY2tvcGVuJywKICAgICAgICAgICAgJ2Z0cF9hbGxvYycgPT4gJ1NhZmVcZnRwX2FsbG9jJywKICAgICAgICAgICAgJ2Z0cF9hcHBlbmQnID0+ICdTYWZlXGZ0cF9hcHBlbmQnLAogICAgICAgICAgICAnZnRwX2NkdXAnID0+ICdTYWZlXGZ0cF9jZHVwJywKICAgICAgICAgICAgJ2Z0cF9jaGRpcicgPT4gJ1NhZmVcZnRwX2NoZGlyJywKICAgICAgICAgICAgJ2Z0cF9jaG1vZCcgPT4gJ1NhZmVcZnRwX2NobW9kJywKICAgICAgICAgICAgJ2Z0cF9jbG9zZScgPT4gJ1NhZmVcZnRwX2Nsb3NlJywKICAgICAgICAgICAgJ2Z0cF9jb25uZWN0JyA9PiAnU2FmZVxmdHBfY29ubmVjdCcsCiAgICAgICAgICAgICdmdHBfZGVsZXRlJyA9PiAnU2FmZVxmdHBfZGVsZXRlJywKICAgICAgICAgICAgJ2Z0cF9mZ2V0JyA9PiAnU2FmZVxmdHBfZmdldCcsCiAgICAgICAgICAgICdmdHBfZnB1dCcgPT4gJ1NhZmVcZnRwX2ZwdXQnLAogICAgICAgICAgICAnZnRwX2dldCcgPT4gJ1NhZmVcZnRwX2dldCcsCiAgICAgICAgICAgICdmdHBfbG9naW4nID0+ICdTYWZlXGZ0cF9sb2dpbicsCiAgICAgICAgICAgICdmdHBfbWtkaXInID0+ICdTYWZlXGZ0cF9ta2RpcicsCiAgICAgICAgICAgICdmdHBfbWxzZCcgPT4gJ1NhZmVcZnRwX21sc2QnLAogICAgICAgICAgICAnZnRwX25saXN0JyA9PiAnU2FmZVxmdHBfbmxpc3QnLAogICAgICAgICAgICAnZnRwX3Bhc3YnID0+ICdTYWZlXGZ0cF9wYXN2JywKICAgICAgICAgICAgJ2Z0cF9wdXQnID0+ICdTYWZlXGZ0cF9wdXQnLAogICAgICAgICAgICAnZnRwX3B3ZCcgPT4gJ1NhZmVcZnRwX3B3ZCcsCiAgICAgICAgICAgICdmdHBfcmVuYW1lJyA9PiAnU2FmZVxmdHBfcmVuYW1lJywKICAgICAgICAgICAgJ2Z0cF9ybWRpcicgPT4gJ1NhZmVcZnRwX3JtZGlyJywKICAgICAgICAgICAgJ2Z0cF9zaXRlJyA9PiAnU2FmZVxmdHBfc2l0ZScsCiAgICAgICAgICAgICdmdHBfc3NsX2Nvbm5lY3QnID0+ICdTYWZlXGZ0cF9zc2xfY29ubmVjdCcsCiAgICAgICAgICAgICdmdHBfc3lzdHlwZScgPT4gJ1NhZmVcZnRwX3N5c3R5cGUnLAogICAgICAgICAgICAnZnRydW5jYXRlJyA9PiAnU2FmZVxmdHJ1bmNhdGUnLAogICAgICAgICAgICAnZndyaXRlJyA9PiAnU2FmZVxmd3JpdGUnLAogICAgICAgICAgICAnZ2V0YWxsaGVhZGVycycgPT4gJ1NhZmVcZ2V0YWxsaGVhZGVycycsCiAgICAgICAgICAgICdnZXRjd2QnID0+ICdTYWZlXGdldGN3ZCcsCiAgICAgICAgICAgICdnZXRob3N0bmFtZScgPT4gJ1NhZmVcZ2V0aG9zdG5hbWUnLAogICAgICAgICAgICAnZ2V0aW1hZ2VzaXplJyA9PiAnU2FmZVxnZXRpbWFnZXNpemUnLAogICAgICAgICAgICAnZ2V0bGFzdG1vZCcgPT4gJ1NhZmVcZ2V0bGFzdG1vZCcsCiAgICAgICAgICAgICdnZXRteWdpZCcgPT4gJ1NhZmVcZ2V0bXlnaWQnLAogICAgICAgICAgICAnZ2V0bXlpbm9kZScgPT4gJ1NhZmVcZ2V0bXlpbm9kZScsCiAgICAgICAgICAgICdnZXRteXBpZCcgPT4gJ1NhZmVcZ2V0bXlwaWQnLAogICAgICAgICAgICAnZ2V0bXl1aWQnID0+ICdTYWZlXGdldG15dWlkJywKICAgICAgICAgICAgJ2dldG9wdCcgPT4gJ1NhZmVcZ2V0b3B0JywKICAgICAgICAgICAgJ2dldHByb3RvYnluYW1lJyA9PiAnU2FmZVxnZXRwcm90b2J5bmFtZScsCiAgICAgICAgICAgICdnZXRwcm90b2J5bnVtYmVyJyA9PiAnU2FmZVxnZXRwcm90b2J5bnVtYmVyJywKICAgICAgICAgICAgJ2dldF9oZWFkZXJzJyA9PiAnU2FmZVxnZXRfaGVhZGVycycsCiAgICAgICAgICAgICdnbG9iJyA9PiAnU2FmZVxnbG9iJywKICAgICAgICAgICAgJ2dtZGF0ZScgPT4gJ1NhZmVcZ21kYXRlJywKICAgICAgICAgICAgJ2dtcF9iaW5vbWlhbCcgPT4gJ1NhZmVcZ21wX2Jpbm9taWFsJywKICAgICAgICAgICAgJ2dtcF9leHBvcnQnID0+ICdTYWZlXGdtcF9leHBvcnQnLAogICAgICAgICAgICAnZ21wX2ltcG9ydCcgPT4gJ1NhZmVcZ21wX2ltcG9ydCcsCiAgICAgICAgICAgICdnbXBfcmFuZG9tX3NlZWQnID0+ICdTYWZlXGdtcF9yYW5kb21fc2VlZCcsCiAgICAgICAgICAgICdnbnVwZ19hZGRkZWNyeXB0a2V5JyA9PiAnU2FmZVxnbnVwZ19hZGRkZWNyeXB0a2V5JywKICAgICAgICAgICAgJ2dudXBnX2FkZGVuY3J5cHRrZXknID0+ICdTYWZlXGdudXBnX2FkZGVuY3J5cHRrZXknLAogICAgICAgICAgICAnZ251cGdfYWRkc2lnbmtleScgPT4gJ1NhZmVcZ251cGdfYWRkc2lnbmtleScsCiAgICAgICAgICAgICdnbnVwZ19jbGVhcmRlY3J5cHRrZXlzJyA9PiAnU2FmZVxnbnVwZ19jbGVhcmRlY3J5cHRrZXlzJywKICAgICAgICAgICAgJ2dudXBnX2NsZWFyZW5jcnlwdGtleXMnID0+ICdTYWZlXGdudXBnX2NsZWFyZW5jcnlwdGtleXMnLAogICAgICAgICAgICAnZ251cGdfY2xlYXJzaWdua2V5cycgPT4gJ1NhZmVcZ251cGdfY2xlYXJzaWdua2V5cycsCiAgICAgICAgICAgICdnbnVwZ19zZXRhcm1vcicgPT4gJ1NhZmVcZ251cGdfc2V0YXJtb3InLAogICAgICAgICAgICAnZ251cGdfc2V0c2lnbm1vZGUnID0+ICdTYWZlXGdudXBnX3NldHNpZ25tb2RlJywKICAgICAgICAgICAgJ2d6Y2xvc2UnID0+ICdTYWZlXGd6Y2xvc2UnLAogICAgICAgICAgICAnZ3pjb21wcmVzcycgPT4gJ1NhZmVcZ3pjb21wcmVzcycsCiAgICAgICAgICAgICdnemRlY29kZScgPT4gJ1NhZmVcZ3pkZWNvZGUnLAogICAgICAgICAgICAnZ3pkZWZsYXRlJyA9PiAnU2FmZVxnemRlZmxhdGUnLAogICAgICAgICAgICAnZ3plbmNvZGUnID0+ICdTYWZlXGd6ZW5jb2RlJywKICAgICAgICAgICAgJ2d6Z2V0cycgPT4gJ1NhZmVcZ3pnZXRzJywKICAgICAgICAgICAgJ2d6Z2V0c3MnID0+ICdTYWZlXGd6Z2V0c3MnLAogICAgICAgICAgICAnZ3ppbmZsYXRlJyA9PiAnU2FmZVxnemluZmxhdGUnLAogICAgICAgICAgICAnZ3pwYXNzdGhydScgPT4gJ1NhZmVcZ3pwYXNzdGhydScsCiAgICAgICAgICAgICdnenJld2luZCcgPT4gJ1NhZmVcZ3pyZXdpbmQnLAogICAgICAgICAgICAnZ3p1bmNvbXByZXNzJyA9PiAnU2FmZVxnenVuY29tcHJlc3MnLAogICAgICAgICAgICAnaGFzaF9oa2RmJyA9PiAnU2FmZVxoYXNoX2hrZGYnLAogICAgICAgICAgICAnaGFzaF91cGRhdGVfZmlsZScgPT4gJ1NhZmVcaGFzaF91cGRhdGVfZmlsZScsCiAgICAgICAgICAgICdoZWFkZXJfcmVnaXN0ZXJfY2FsbGJhY2snID0+ICdTYWZlXGhlYWRlcl9yZWdpc3Rlcl9jYWxsYmFjaycsCiAgICAgICAgICAgICdoZXgyYmluJyA9PiAnU2FmZVxoZXgyYmluJywKICAgICAgICAgICAgJ2hpZ2hsaWdodF9maWxlJyA9PiAnU2FmZVxoaWdobGlnaHRfZmlsZScsCiAgICAgICAgICAgICdoaWdobGlnaHRfc3RyaW5nJyA9PiAnU2FmZVxoaWdobGlnaHRfc3RyaW5nJywKICAgICAgICAgICAgJ2liYXNlX2FkZF91c2VyJyA9PiAnU2FmZVxpYmFzZV9hZGRfdXNlcicsCiAgICAgICAgICAgICdpYmFzZV9iYWNrdXAnID0+ICdTYWZlXGliYXNlX2JhY2t1cCcsCiAgICAgICAgICAgICdpYmFzZV9ibG9iX2NhbmNlbCcgPT4gJ1NhZmVcaWJhc2VfYmxvYl9jYW5jZWwnLAogICAgICAgICAgICAnaWJhc2VfYmxvYl9jcmVhdGUnID0+ICdTYWZlXGliYXNlX2Jsb2JfY3JlYXRlJywKICAgICAgICAgICAgJ2liYXNlX2Jsb2JfZ2V0JyA9PiAnU2FmZVxpYmFzZV9ibG9iX2dldCcsCiAgICAgICAgICAgICdpYmFzZV9jbG9zZScgPT4gJ1NhZmVcaWJhc2VfY2xvc2UnLAogICAgICAgICAgICAnaWJhc2VfY29tbWl0JyA9PiAnU2FmZVxpYmFzZV9jb21taXQnLAogICAgICAgICAgICAnaWJhc2VfY29tbWl0X3JldCcgPT4gJ1NhZmVcaWJhc2VfY29tbWl0X3JldCcsCiAgICAgICAgICAgICdpYmFzZV9jb25uZWN0JyA9PiAnU2FmZVxpYmFzZV9jb25uZWN0JywKICAgICAgICAgICAgJ2liYXNlX2RlbGV0ZV91c2VyJyA9PiAnU2FmZVxpYmFzZV9kZWxldGVfdXNlcicsCiAgICAgICAgICAgICdpYmFzZV9kcm9wX2RiJyA9PiAnU2FmZVxpYmFzZV9kcm9wX2RiJywKICAgICAgICAgICAgJ2liYXNlX2ZyZWVfZXZlbnRfaGFuZGxlcicgPT4gJ1NhZmVcaWJhc2VfZnJlZV9ldmVudF9oYW5kbGVyJywKICAgICAgICAgICAgJ2liYXNlX2ZyZWVfcXVlcnknID0+ICdTYWZlXGliYXNlX2ZyZWVfcXVlcnknLAogICAgICAgICAgICAnaWJhc2VfZnJlZV9yZXN1bHQnID0+ICdTYWZlXGliYXNlX2ZyZWVfcmVzdWx0JywKICAgICAgICAgICAgJ2liYXNlX21haW50YWluX2RiJyA9PiAnU2FmZVxpYmFzZV9tYWludGFpbl9kYicsCiAgICAgICAgICAgICdpYmFzZV9tb2RpZnlfdXNlcicgPT4gJ1NhZmVcaWJhc2VfbW9kaWZ5X3VzZXInLAogICAgICAgICAgICAnaWJhc2VfbmFtZV9yZXN1bHQnID0+ICdTYWZlXGliYXNlX25hbWVfcmVzdWx0JywKICAgICAgICAgICAgJ2liYXNlX3Bjb25uZWN0JyA9PiAnU2FmZVxpYmFzZV9wY29ubmVjdCcsCiAgICAgICAgICAgICdpYmFzZV9yZXN0b3JlJyA9PiAnU2FmZVxpYmFzZV9yZXN0b3JlJywKICAgICAgICAgICAgJ2liYXNlX3JvbGxiYWNrJyA9PiAnU2FmZVxpYmFzZV9yb2xsYmFjaycsCiAgICAgICAgICAgICdpYmFzZV9yb2xsYmFja19yZXQnID0+ICdTYWZlXGliYXNlX3JvbGxiYWNrX3JldCcsCiAgICAgICAgICAgICdpYmFzZV9zZXJ2aWNlX2F0dGFjaCcgPT4gJ1NhZmVcaWJhc2Vfc2VydmljZV9hdHRhY2gnLAogICAgICAgICAgICAnaWJhc2Vfc2VydmljZV9kZXRhY2gnID0+ICdTYWZlXGliYXNlX3NlcnZpY2VfZGV0YWNoJywKICAgICAgICAgICAgJ2ljb252JyA9PiAnU2FmZVxpY29udicsCiAgICAgICAgICAgICdpY29udl9nZXRfZW5jb2RpbmcnID0+ICdTYWZlXGljb252X2dldF9lbmNvZGluZycsCiAgICAgICAgICAgICdpY29udl9zZXRfZW5jb2RpbmcnID0+ICdTYWZlXGljb252X3NldF9lbmNvZGluZycsCiAgICAgICAgICAgICdpbWFnZTJ3Ym1wJyA9PiAnU2FmZVxpbWFnZTJ3Ym1wJywKICAgICAgICAgICAgJ2ltYWdlYWZmaW5lJyA9PiAnU2FmZVxpbWFnZWFmZmluZScsCiAgICAgICAgICAgICdpbWFnZWFmZmluZW1hdHJpeGNvbmNhdCcgPT4gJ1NhZmVcaW1hZ2VhZmZpbmVtYXRyaXhjb25jYXQnLAogICAgICAgICAgICAnaW1hZ2VhZmZpbmVtYXRyaXhnZXQnID0+ICdTYWZlXGltYWdlYWZmaW5lbWF0cml4Z2V0JywKICAgICAgICAgICAgJ2ltYWdlYWxwaGFibGVuZGluZycgPT4gJ1NhZmVcaW1hZ2VhbHBoYWJsZW5kaW5nJywKICAgICAgICAgICAgJ2ltYWdlYW50aWFsaWFzJyA9PiAnU2FmZVxpbWFnZWFudGlhbGlhcycsCiAgICAgICAgICAgICdpbWFnZWFyYycgPT4gJ1NhZmVcaW1hZ2VhcmMnLAogICAgICAgICAgICAnaW1hZ2VibXAnID0+ICdTYWZlXGltYWdlYm1wJywKICAgICAgICAgICAgJ2ltYWdlY2hhcicgPT4gJ1NhZmVcaW1hZ2VjaGFyJywKICAgICAgICAgICAgJ2ltYWdlY2hhcnVwJyA9PiAnU2FmZVxpbWFnZWNoYXJ1cCcsCiAgICAgICAgICAgICdpbWFnZWNvbG9yYXQnID0+ICdTYWZlXGltYWdlY29sb3JhdCcsCiAgICAgICAgICAgICdpbWFnZWNvbG9yZGVhbGxvY2F0ZScgPT4gJ1NhZmVcaW1hZ2Vjb2xvcmRlYWxsb2NhdGUnLAogICAgICAgICAgICAnaW1hZ2Vjb2xvcm1hdGNoJyA9PiAnU2FmZVxpbWFnZWNvbG9ybWF0Y2gnLAogICAgICAgICAgICAnaW1hZ2Vjb252b2x1dGlvbicgPT4gJ1NhZmVcaW1hZ2Vjb252b2x1dGlvbicsCiAgICAgICAgICAgICdpbWFnZWNvcHknID0+ICdTYWZlXGltYWdlY29weScsCiAgICAgICAgICAgICdpbWFnZWNvcHltZXJnZScgPT4gJ1NhZmVcaW1hZ2Vjb3B5bWVyZ2UnLAogICAgICAgICAgICAnaW1hZ2Vjb3B5bWVyZ2VncmF5JyA9PiAnU2FmZVxpbWFnZWNvcHltZXJnZWdyYXknLAogICAgICAgICAgICAnaW1hZ2Vjb3B5cmVzYW1wbGVkJyA9PiAnU2FmZVxpbWFnZWNvcHlyZXNhbXBsZWQnLAogICAgICAgICAgICAnaW1hZ2Vjb3B5cmVzaXplZCcgPT4gJ1NhZmVcaW1hZ2Vjb3B5cmVzaXplZCcsCiAgICAgICAgICAgICdpbWFnZWNyZWF0ZScgPT4gJ1NhZmVcaW1hZ2VjcmVhdGUnLAogICAgICAgICAgICAnaW1hZ2VjcmVhdGVmcm9tYm1wJyA9PiAnU2FmZVxpbWFnZWNyZWF0ZWZyb21ibXAnLAogICAgICAgICAgICAnaW1hZ2VjcmVhdGVmcm9tZ2QnID0+ICdTYWZlXGltYWdlY3JlYXRlZnJvbWdkJywKICAgICAgICAgICAgJ2ltYWdlY3JlYXRlZnJvbWdkMicgPT4gJ1NhZmVcaW1hZ2VjcmVhdGVmcm9tZ2QyJywKICAgICAgICAgICAgJ2ltYWdlY3JlYXRlZnJvbWdkMnBhcnQnID0+ICdTYWZlXGltYWdlY3JlYXRlZnJvbWdkMnBhcnQnLAogICAgICAgICAgICAnaW1hZ2VjcmVhdGVmcm9tZ2lmJyA9PiAnU2FmZVxpbWFnZWNyZWF0ZWZyb21naWYnLAogICAgICAgICAgICAnaW1hZ2VjcmVhdGVmcm9tanBlZycgPT4gJ1NhZmVcaW1hZ2VjcmVhdGVmcm9tanBlZycsCiAgICAgICAgICAgICdpbWFnZWNyZWF0ZWZyb21wbmcnID0+ICdTYWZlXGltYWdlY3JlYXRlZnJvbXBuZycsCiAgICAgICAgICAgICdpbWFnZWNyZWF0ZWZyb213Ym1wJyA9PiAnU2FmZVxpbWFnZWNyZWF0ZWZyb213Ym1wJywKICAgICAgICAgICAgJ2ltYWdlY3JlYXRlZnJvbXdlYnAnID0+ICdTYWZlXGltYWdlY3JlYXRlZnJvbXdlYnAnLAogICAgICAgICAgICAnaW1hZ2VjcmVhdGVmcm9teGJtJyA9PiAnU2FmZVxpbWFnZWNyZWF0ZWZyb214Ym0nLAogICAgICAgICAgICAnaW1hZ2VjcmVhdGVmcm9teHBtJyA9PiAnU2FmZVxpbWFnZWNyZWF0ZWZyb214cG0nLAogICAgICAgICAgICAnaW1hZ2VjcmVhdGV0cnVlY29sb3InID0+ICdTYWZlXGltYWdlY3JlYXRldHJ1ZWNvbG9yJywKICAgICAgICAgICAgJ2ltYWdlY3JvcCcgPT4gJ1NhZmVcaW1hZ2Vjcm9wJywKICAgICAgICAgICAgJ2ltYWdlY3JvcGF1dG8nID0+ICdTYWZlXGltYWdlY3JvcGF1dG8nLAogICAgICAgICAgICAnaW1hZ2VkYXNoZWRsaW5lJyA9PiAnU2FmZVxpbWFnZWRhc2hlZGxpbmUnLAogICAgICAgICAgICAnaW1hZ2VkZXN0cm95JyA9PiAnU2FmZVxpbWFnZWRlc3Ryb3knLAogICAgICAgICAgICAnaW1hZ2VlbGxpcHNlJyA9PiAnU2FmZVxpbWFnZWVsbGlwc2UnLAogICAgICAgICAgICAnaW1hZ2VmaWxsJyA9PiAnU2FmZVxpbWFnZWZpbGwnLAogICAgICAgICAgICAnaW1hZ2VmaWxsZWRhcmMnID0+ICdTYWZlXGltYWdlZmlsbGVkYXJjJywKICAgICAgICAgICAgJ2ltYWdlZmlsbGVkZWxsaXBzZScgPT4gJ1NhZmVcaW1hZ2VmaWxsZWRlbGxpcHNlJywKICAgICAgICAgICAgJ2ltYWdlZmlsbGVkcG9seWdvbicgPT4gJ1NhZmVcaW1hZ2VmaWxsZWRwb2x5Z29uJywKICAgICAgICAgICAgJ2ltYWdlZmlsbGVkcmVjdGFuZ2xlJyA9PiAnU2FmZVxpbWFnZWZpbGxlZHJlY3RhbmdsZScsCiAgICAgICAgICAgICdpbWFnZWZpbGx0b2JvcmRlcicgPT4gJ1NhZmVcaW1hZ2VmaWxsdG9ib3JkZXInLAogICAgICAgICAgICAnaW1hZ2VmaWx0ZXInID0+ICdTYWZlXGltYWdlZmlsdGVyJywKICAgICAgICAgICAgJ2ltYWdlZmxpcCcgPT4gJ1NhZmVcaW1hZ2VmbGlwJywKICAgICAgICAgICAgJ2ltYWdlZ2FtbWFjb3JyZWN0JyA9PiAnU2FmZVxpbWFnZWdhbW1hY29ycmVjdCcsCiAgICAgICAgICAgICdpbWFnZWdkJyA9PiAnU2FmZVxpbWFnZWdkJywKICAgICAgICAgICAgJ2ltYWdlZ2QyJyA9PiAnU2FmZVxpbWFnZWdkMicsCiAgICAgICAgICAgICdpbWFnZWdpZicgPT4gJ1NhZmVcaW1hZ2VnaWYnLAogICAgICAgICAgICAnaW1hZ2VncmFic2NyZWVuJyA9PiAnU2FmZVxpbWFnZWdyYWJzY3JlZW4nLAogICAgICAgICAgICAnaW1hZ2VncmFid2luZG93JyA9PiAnU2FmZVxpbWFnZWdyYWJ3aW5kb3cnLAogICAgICAgICAgICAnaW1hZ2VqcGVnJyA9PiAnU2FmZVxpbWFnZWpwZWcnLAogICAgICAgICAgICAnaW1hZ2VsYXllcmVmZmVjdCcgPT4gJ1NhZmVcaW1hZ2VsYXllcmVmZmVjdCcsCiAgICAgICAgICAgICdpbWFnZWxpbmUnID0+ICdTYWZlXGltYWdlbGluZScsCiAgICAgICAgICAgICdpbWFnZWxvYWRmb250JyA9PiAnU2FmZVxpbWFnZWxvYWRmb250JywKICAgICAgICAgICAgJ2ltYWdlb3BlbnBvbHlnb24nID0+ICdTYWZlXGltYWdlb3BlbnBvbHlnb24nLAogICAgICAgICAgICAnaW1hZ2VwbmcnID0+ICdTYWZlXGltYWdlcG5nJywKICAgICAgICAgICAgJ2ltYWdlcG9seWdvbicgPT4gJ1NhZmVcaW1hZ2Vwb2x5Z29uJywKICAgICAgICAgICAgJ2ltYWdlcmVjdGFuZ2xlJyA9PiAnU2FmZVxpbWFnZXJlY3RhbmdsZScsCiAgICAgICAgICAgICdpbWFnZXJvdGF0ZScgPT4gJ1NhZmVcaW1hZ2Vyb3RhdGUnLAogICAgICAgICAgICAnaW1hZ2VzYXZlYWxwaGEnID0+ICdTYWZlXGltYWdlc2F2ZWFscGhhJywKICAgICAgICAgICAgJ2ltYWdlc2NhbGUnID0+ICdTYWZlXGltYWdlc2NhbGUnLAogICAgICAgICAgICAnaW1hZ2VzZXRicnVzaCcgPT4gJ1NhZmVcaW1hZ2VzZXRicnVzaCcsCiAgICAgICAgICAgICdpbWFnZXNldGNsaXAnID0+ICdTYWZlXGltYWdlc2V0Y2xpcCcsCiAgICAgICAgICAgICdpbWFnZXNldGludGVycG9sYXRpb24nID0+ICdTYWZlXGltYWdlc2V0aW50ZXJwb2xhdGlvbicsCiAgICAgICAgICAgICdpbWFnZXNldHBpeGVsJyA9PiAnU2FmZVxpbWFnZXNldHBpeGVsJywKICAgICAgICAgICAgJ2ltYWdlc2V0c3R5bGUnID0+ICdTYWZlXGltYWdlc2V0c3R5bGUnLAogICAgICAgICAgICAnaW1hZ2VzZXR0aGlja25lc3MnID0+ICdTYWZlXGltYWdlc2V0dGhpY2tuZXNzJywKICAgICAgICAgICAgJ2ltYWdlc2V0dGlsZScgPT4gJ1NhZmVcaW1hZ2VzZXR0aWxlJywKICAgICAgICAgICAgJ2ltYWdlc3RyaW5nJyA9PiAnU2FmZVxpbWFnZXN0cmluZycsCiAgICAgICAgICAgICdpbWFnZXN0cmluZ3VwJyA9PiAnU2FmZVxpbWFnZXN0cmluZ3VwJywKICAgICAgICAgICAgJ2ltYWdlc3gnID0+ICdTYWZlXGltYWdlc3gnLAogICAgICAgICAgICAnaW1hZ2VzeScgPT4gJ1NhZmVcaW1hZ2VzeScsCiAgICAgICAgICAgICdpbWFnZXRydWVjb2xvcnRvcGFsZXR0ZScgPT4gJ1NhZmVcaW1hZ2V0cnVlY29sb3J0b3BhbGV0dGUnLAogICAgICAgICAgICAnaW1hZ2V0dGZiYm94JyA9PiAnU2FmZVxpbWFnZXR0ZmJib3gnLAogICAgICAgICAgICAnaW1hZ2V0dGZ0ZXh0JyA9PiAnU2FmZVxpbWFnZXR0ZnRleHQnLAogICAgICAgICAgICAnaW1hZ2V3Ym1wJyA9PiAnU2FmZVxpbWFnZXdibXAnLAogICAgICAgICAgICAnaW1hZ2V3ZWJwJyA9PiAnU2FmZVxpbWFnZXdlYnAnLAogICAgICAgICAgICAnaW1hZ2V4Ym0nID0+ICdTYWZlXGltYWdleGJtJywKICAgICAgICAgICAgJ2ltYXBfYXBwZW5kJyA9PiAnU2FmZVxpbWFwX2FwcGVuZCcsCiAgICAgICAgICAgICdpbWFwX2NoZWNrJyA9PiAnU2FmZVxpbWFwX2NoZWNrJywKICAgICAgICAgICAgJ2ltYXBfY2xlYXJmbGFnX2Z1bGwnID0+ICdTYWZlXGltYXBfY2xlYXJmbGFnX2Z1bGwnLAogICAgICAgICAgICAnaW1hcF9jbG9zZScgPT4gJ1NhZmVcaW1hcF9jbG9zZScsCiAgICAgICAgICAgICdpbWFwX2NyZWF0ZW1haWxib3gnID0+ICdTYWZlXGltYXBfY3JlYXRlbWFpbGJveCcsCiAgICAgICAgICAgICdpbWFwX2RlbGV0ZW1haWxib3gnID0+ICdTYWZlXGltYXBfZGVsZXRlbWFpbGJveCcsCiAgICAgICAgICAgICdpbWFwX2ZldGNoc3RydWN0dXJlJyA9PiAnU2FmZVxpbWFwX2ZldGNoc3RydWN0dXJlJywKICAgICAgICAgICAgJ2ltYXBfZ2MnID0+ICdTYWZlXGltYXBfZ2MnLAogICAgICAgICAgICAnaW1hcF9oZWFkZXJpbmZvJyA9PiAnU2FmZVxpbWFwX2hlYWRlcmluZm8nLAogICAgICAgICAgICAnaW1hcF9tYWlsJyA9PiAnU2FmZVxpbWFwX21haWwnLAogICAgICAgICAgICAnaW1hcF9tYWlsYm94bXNnaW5mbycgPT4gJ1NhZmVcaW1hcF9tYWlsYm94bXNnaW5mbycsCiAgICAgICAgICAgICdpbWFwX21haWxfY29tcG9zZScgPT4gJ1NhZmVcaW1hcF9tYWlsX2NvbXBvc2UnLAogICAgICAgICAgICAnaW1hcF9tYWlsX2NvcHknID0+ICdTYWZlXGltYXBfbWFpbF9jb3B5JywKICAgICAgICAgICAgJ2ltYXBfbWFpbF9tb3ZlJyA9PiAnU2FmZVxpbWFwX21haWxfbW92ZScsCiAgICAgICAgICAgICdpbWFwX211dGY3X3RvX3V0ZjgnID0+ICdTYWZlXGltYXBfbXV0ZjdfdG9fdXRmOCcsCiAgICAgICAgICAgICdpbWFwX251bV9tc2cnID0+ICdTYWZlXGltYXBfbnVtX21zZycsCiAgICAgICAgICAgICdpbWFwX29wZW4nID0+ICdTYWZlXGltYXBfb3BlbicsCiAgICAgICAgICAgICdpbWFwX3JlbmFtZW1haWxib3gnID0+ICdTYWZlXGltYXBfcmVuYW1lbWFpbGJveCcsCiAgICAgICAgICAgICdpbWFwX3NhdmVib2R5JyA9PiAnU2FmZVxpbWFwX3NhdmVib2R5JywKICAgICAgICAgICAgJ2ltYXBfc2V0YWNsJyA9PiAnU2FmZVxpbWFwX3NldGFjbCcsCiAgICAgICAgICAgICdpbWFwX3NldGZsYWdfZnVsbCcgPT4gJ1NhZmVcaW1hcF9zZXRmbGFnX2Z1bGwnLAogICAgICAgICAgICAnaW1hcF9zZXRfcXVvdGEnID0+ICdTYWZlXGltYXBfc2V0X3F1b3RhJywKICAgICAgICAgICAgJ2ltYXBfc29ydCcgPT4gJ1NhZmVcaW1hcF9zb3J0JywKICAgICAgICAgICAgJ2ltYXBfc3Vic2NyaWJlJyA9PiAnU2FmZVxpbWFwX3N1YnNjcmliZScsCiAgICAgICAgICAgICdpbWFwX3RocmVhZCcgPT4gJ1NhZmVcaW1hcF90aHJlYWQnLAogICAgICAgICAgICAnaW1hcF90aW1lb3V0JyA9PiAnU2FmZVxpbWFwX3RpbWVvdXQnLAogICAgICAgICAgICAnaW1hcF91bmRlbGV0ZScgPT4gJ1NhZmVcaW1hcF91bmRlbGV0ZScsCiAgICAgICAgICAgICdpbWFwX3Vuc3Vic2NyaWJlJyA9PiAnU2FmZVxpbWFwX3Vuc3Vic2NyaWJlJywKICAgICAgICAgICAgJ2ltYXBfdXRmOF90b19tdXRmNycgPT4gJ1NhZmVcaW1hcF91dGY4X3RvX211dGY3JywKICAgICAgICAgICAgJ2luZXRfbnRvcCcgPT4gJ1NhZmVcaW5ldF9udG9wJywKICAgICAgICAgICAgJ2luZmxhdGVfYWRkJyA9PiAnU2FmZVxpbmZsYXRlX2FkZCcsCiAgICAgICAgICAgICdpbmZsYXRlX2dldF9yZWFkX2xlbicgPT4gJ1NhZmVcaW5mbGF0ZV9nZXRfcmVhZF9sZW4nLAogICAgICAgICAgICAnaW5mbGF0ZV9nZXRfc3RhdHVzJyA9PiAnU2FmZVxpbmZsYXRlX2dldF9zdGF0dXMnLAogICAgICAgICAgICAnaW5mbGF0ZV9pbml0JyA9PiAnU2FmZVxpbmZsYXRlX2luaXQnLAogICAgICAgICAgICAnaW5ncmVzX2F1dG9jb21taXQnID0+ICdTYWZlXGluZ3Jlc19hdXRvY29tbWl0JywKICAgICAgICAgICAgJ2luZ3Jlc19jbG9zZScgPT4gJ1NhZmVcaW5ncmVzX2Nsb3NlJywKICAgICAgICAgICAgJ2luZ3Jlc19jb21taXQnID0+ICdTYWZlXGluZ3Jlc19jb21taXQnLAogICAgICAgICAgICAnaW5ncmVzX2Nvbm5lY3QnID0+ICdTYWZlXGluZ3Jlc19jb25uZWN0JywKICAgICAgICAgICAgJ2luZ3Jlc19leGVjdXRlJyA9PiAnU2FmZVxpbmdyZXNfZXhlY3V0ZScsCiAgICAgICAgICAgICdpbmdyZXNfZmllbGRfbmFtZScgPT4gJ1NhZmVcaW5ncmVzX2ZpZWxkX25hbWUnLAogICAgICAgICAgICAnaW5ncmVzX2ZpZWxkX3R5cGUnID0+ICdTYWZlXGluZ3Jlc19maWVsZF90eXBlJywKICAgICAgICAgICAgJ2luZ3Jlc19mcmVlX3Jlc3VsdCcgPT4gJ1NhZmVcaW5ncmVzX2ZyZWVfcmVzdWx0JywKICAgICAgICAgICAgJ2luZ3Jlc19wY29ubmVjdCcgPT4gJ1NhZmVcaW5ncmVzX3Bjb25uZWN0JywKICAgICAgICAgICAgJ2luZ3Jlc19yZXN1bHRfc2VlaycgPT4gJ1NhZmVcaW5ncmVzX3Jlc3VsdF9zZWVrJywKICAgICAgICAgICAgJ2luZ3Jlc19yb2xsYmFjaycgPT4gJ1NhZmVcaW5ncmVzX3JvbGxiYWNrJywKICAgICAgICAgICAgJ2luZ3Jlc19zZXRfZW52aXJvbm1lbnQnID0+ICdTYWZlXGluZ3Jlc19zZXRfZW52aXJvbm1lbnQnLAogICAgICAgICAgICAnaW5pX2dldCcgPT4gJ1NhZmVcaW5pX2dldCcsCiAgICAgICAgICAgICdpbmlfc2V0JyA9PiAnU2FmZVxpbmlfc2V0JywKICAgICAgICAgICAgJ2lub3RpZnlfaW5pdCcgPT4gJ1NhZmVcaW5vdGlmeV9pbml0JywKICAgICAgICAgICAgJ2lub3RpZnlfcm1fd2F0Y2gnID0+ICdTYWZlXGlub3RpZnlfcm1fd2F0Y2gnLAogICAgICAgICAgICAnaXB0Y2VtYmVkJyA9PiAnU2FmZVxpcHRjZW1iZWQnLAogICAgICAgICAgICAnaXB0Y3BhcnNlJyA9PiAnU2FmZVxpcHRjcGFyc2UnLAogICAgICAgICAgICAnamR0b3VuaXgnID0+ICdTYWZlXGpkdG91bml4JywKICAgICAgICAgICAgJ2pwZWcyd2JtcCcgPT4gJ1NhZmVcanBlZzJ3Ym1wJywKICAgICAgICAgICAgJ2pzb25fZGVjb2RlJyA9PiAnU2FmZVxqc29uX2RlY29kZScsCiAgICAgICAgICAgICdqc29uX2VuY29kZScgPT4gJ1NhZmVcanNvbl9lbmNvZGUnLAogICAgICAgICAgICAnanNvbl9sYXN0X2Vycm9yX21zZycgPT4gJ1NhZmVcanNvbl9sYXN0X2Vycm9yX21zZycsCiAgICAgICAgICAgICdrcnNvcnQnID0+ICdTYWZlXGtyc29ydCcsCiAgICAgICAgICAgICdrc29ydCcgPT4gJ1NhZmVca3NvcnQnLAogICAgICAgICAgICAnbGNoZ3JwJyA9PiAnU2FmZVxsY2hncnAnLAogICAgICAgICAgICAnbGNob3duJyA9PiAnU2FmZVxsY2hvd24nLAogICAgICAgICAgICAnbGRhcF9hZGQnID0+ICdTYWZlXGxkYXBfYWRkJywKICAgICAgICAgICAgJ2xkYXBfYWRkX2V4dCcgPT4gJ1NhZmVcbGRhcF9hZGRfZXh0JywKICAgICAgICAgICAgJ2xkYXBfYmluZCcgPT4gJ1NhZmVcbGRhcF9iaW5kJywKICAgICAgICAgICAgJ2xkYXBfYmluZF9leHQnID0+ICdTYWZlXGxkYXBfYmluZF9leHQnLAogICAgICAgICAgICAnbGRhcF9jb250cm9sX3BhZ2VkX3Jlc3VsdCcgPT4gJ1NhZmVcbGRhcF9jb250cm9sX3BhZ2VkX3Jlc3VsdCcsCiAgICAgICAgICAgICdsZGFwX2NvbnRyb2xfcGFnZWRfcmVzdWx0X3Jlc3BvbnNlJyA9PiAnU2FmZVxsZGFwX2NvbnRyb2xfcGFnZWRfcmVzdWx0X3Jlc3BvbnNlJywKICAgICAgICAgICAgJ2xkYXBfY291bnRfZW50cmllcycgPT4gJ1NhZmVcbGRhcF9jb3VudF9lbnRyaWVzJywKICAgICAgICAgICAgJ2xkYXBfZGVsZXRlJyA9PiAnU2FmZVxsZGFwX2RlbGV0ZScsCiAgICAgICAgICAgICdsZGFwX2RlbGV0ZV9leHQnID0+ICdTYWZlXGxkYXBfZGVsZXRlX2V4dCcsCiAgICAgICAgICAgICdsZGFwX2V4b3AnID0+ICdTYWZlXGxkYXBfZXhvcCcsCiAgICAgICAgICAgICdsZGFwX2V4b3BfcGFzc3dkJyA9PiAnU2FmZVxsZGFwX2V4b3BfcGFzc3dkJywKICAgICAgICAgICAgJ2xkYXBfZXhvcF93aG9hbWknID0+ICdTYWZlXGxkYXBfZXhvcF93aG9hbWknLAogICAgICAgICAgICAnbGRhcF9leHBsb2RlX2RuJyA9PiAnU2FmZVxsZGFwX2V4cGxvZGVfZG4nLAogICAgICAgICAgICAnbGRhcF9maXJzdF9hdHRyaWJ1dGUnID0+ICdTYWZlXGxkYXBfZmlyc3RfYXR0cmlidXRlJywKICAgICAgICAgICAgJ2xkYXBfZmlyc3RfZW50cnknID0+ICdTYWZlXGxkYXBfZmlyc3RfZW50cnknLAogICAgICAgICAgICAnbGRhcF9mcmVlX3Jlc3VsdCcgPT4gJ1NhZmVcbGRhcF9mcmVlX3Jlc3VsdCcsCiAgICAgICAgICAgICdsZGFwX2dldF9hdHRyaWJ1dGVzJyA9PiAnU2FmZVxsZGFwX2dldF9hdHRyaWJ1dGVzJywKICAgICAgICAgICAgJ2xkYXBfZ2V0X2RuJyA9PiAnU2FmZVxsZGFwX2dldF9kbicsCiAgICAgICAgICAgICdsZGFwX2dldF9lbnRyaWVzJyA9PiAnU2FmZVxsZGFwX2dldF9lbnRyaWVzJywKICAgICAgICAgICAgJ2xkYXBfZ2V0X29wdGlvbicgPT4gJ1NhZmVcbGRhcF9nZXRfb3B0aW9uJywKICAgICAgICAgICAgJ2xkYXBfZ2V0X3ZhbHVlcycgPT4gJ1NhZmVcbGRhcF9nZXRfdmFsdWVzJywKICAgICAgICAgICAgJ2xkYXBfZ2V0X3ZhbHVlc19sZW4nID0+ICdTYWZlXGxkYXBfZ2V0X3ZhbHVlc19sZW4nLAogICAgICAgICAgICAnbGRhcF9saXN0JyA9PiAnU2FmZVxsZGFwX2xpc3QnLAogICAgICAgICAgICAnbGRhcF9tb2RpZnlfYmF0Y2gnID0+ICdTYWZlXGxkYXBfbW9kaWZ5X2JhdGNoJywKICAgICAgICAgICAgJ2xkYXBfbW9kX2FkZCcgPT4gJ1NhZmVcbGRhcF9tb2RfYWRkJywKICAgICAgICAgICAgJ2xkYXBfbW9kX2FkZF9leHQnID0+ICdTYWZlXGxkYXBfbW9kX2FkZF9leHQnLAogICAgICAgICAgICAnbGRhcF9tb2RfZGVsJyA9PiAnU2FmZVxsZGFwX21vZF9kZWwnLAogICAgICAgICAgICAnbGRhcF9tb2RfZGVsX2V4dCcgPT4gJ1NhZmVcbGRhcF9tb2RfZGVsX2V4dCcsCiAgICAgICAgICAgICdsZGFwX21vZF9yZXBsYWNlJyA9PiAnU2FmZVxsZGFwX21vZF9yZXBsYWNlJywKICAgICAgICAgICAgJ2xkYXBfbW9kX3JlcGxhY2VfZXh0JyA9PiAnU2FmZVxsZGFwX21vZF9yZXBsYWNlX2V4dCcsCiAgICAgICAgICAgICdsZGFwX25leHRfYXR0cmlidXRlJyA9PiAnU2FmZVxsZGFwX25leHRfYXR0cmlidXRlJywKICAgICAgICAgICAgJ2xkYXBfcGFyc2VfZXhvcCcgPT4gJ1NhZmVcbGRhcF9wYXJzZV9leG9wJywKICAgICAgICAgICAgJ2xkYXBfcGFyc2VfcmVzdWx0JyA9PiAnU2FmZVxsZGFwX3BhcnNlX3Jlc3VsdCcsCiAgICAgICAgICAgICdsZGFwX3JlYWQnID0+ICdTYWZlXGxkYXBfcmVhZCcsCiAgICAgICAgICAgICdsZGFwX3JlbmFtZScgPT4gJ1NhZmVcbGRhcF9yZW5hbWUnLAogICAgICAgICAgICAnbGRhcF9yZW5hbWVfZXh0JyA9PiAnU2FmZVxsZGFwX3JlbmFtZV9leHQnLAogICAgICAgICAgICAnbGRhcF9zYXNsX2JpbmQnID0+ICdTYWZlXGxkYXBfc2FzbF9iaW5kJywKICAgICAgICAgICAgJ2xkYXBfc2VhcmNoJyA9PiAnU2FmZVxsZGFwX3NlYXJjaCcsCiAgICAgICAgICAgICdsZGFwX3NldF9vcHRpb24nID0+ICdTYWZlXGxkYXBfc2V0X29wdGlvbicsCiAgICAgICAgICAgICdsZGFwX3VuYmluZCcgPT4gJ1NhZmVcbGRhcF91bmJpbmQnLAogICAgICAgICAgICAnbGlieG1sX2dldF9sYXN0X2Vycm9yJyA9PiAnU2FmZVxsaWJ4bWxfZ2V0X2xhc3RfZXJyb3InLAogICAgICAgICAgICAnbGlieG1sX3NldF9leHRlcm5hbF9lbnRpdHlfbG9hZGVyJyA9PiAnU2FmZVxsaWJ4bWxfc2V0X2V4dGVybmFsX2VudGl0eV9sb2FkZXInLAogICAgICAgICAgICAnbGluaycgPT4gJ1NhZmVcbGluaycsCiAgICAgICAgICAgICdsemZfY29tcHJlc3MnID0+ICdTYWZlXGx6Zl9jb21wcmVzcycsCiAgICAgICAgICAgICdsemZfZGVjb21wcmVzcycgPT4gJ1NhZmVcbHpmX2RlY29tcHJlc3MnLAogICAgICAgICAgICAnbWFpbHBhcnNlX21zZ19leHRyYWN0X3BhcnRfZmlsZScgPT4gJ1NhZmVcbWFpbHBhcnNlX21zZ19leHRyYWN0X3BhcnRfZmlsZScsCiAgICAgICAgICAgICdtYWlscGFyc2VfbXNnX2ZyZWUnID0+ICdTYWZlXG1haWxwYXJzZV9tc2dfZnJlZScsCiAgICAgICAgICAgICdtYWlscGFyc2VfbXNnX3BhcnNlJyA9PiAnU2FmZVxtYWlscGFyc2VfbXNnX3BhcnNlJywKICAgICAgICAgICAgJ21haWxwYXJzZV9tc2dfcGFyc2VfZmlsZScgPT4gJ1NhZmVcbWFpbHBhcnNlX21zZ19wYXJzZV9maWxlJywKICAgICAgICAgICAgJ21haWxwYXJzZV9zdHJlYW1fZW5jb2RlJyA9PiAnU2FmZVxtYWlscGFyc2Vfc3RyZWFtX2VuY29kZScsCiAgICAgICAgICAgICdtYl9jaHInID0+ICdTYWZlXG1iX2NocicsCiAgICAgICAgICAgICdtYl9kZXRlY3Rfb3JkZXInID0+ICdTYWZlXG1iX2RldGVjdF9vcmRlcicsCiAgICAgICAgICAgICdtYl9lbmNvZGluZ19hbGlhc2VzJyA9PiAnU2FmZVxtYl9lbmNvZGluZ19hbGlhc2VzJywKICAgICAgICAgICAgJ21iX2VyZWdpX3JlcGxhY2UnID0+ICdTYWZlXG1iX2VyZWdpX3JlcGxhY2UnLAogICAgICAgICAgICAnbWJfZXJlZ19yZXBsYWNlJyA9PiAnU2FmZVxtYl9lcmVnX3JlcGxhY2UnLAogICAgICAgICAgICAnbWJfZXJlZ19yZXBsYWNlX2NhbGxiYWNrJyA9PiAnU2FmZVxtYl9lcmVnX3JlcGxhY2VfY2FsbGJhY2snLAogICAgICAgICAgICAnbWJfZXJlZ19zZWFyY2hfZ2V0cmVncycgPT4gJ1NhZmVcbWJfZXJlZ19zZWFyY2hfZ2V0cmVncycsCiAgICAgICAgICAgICdtYl9lcmVnX3NlYXJjaF9pbml0JyA9PiAnU2FmZVxtYl9lcmVnX3NlYXJjaF9pbml0JywKICAgICAgICAgICAgJ21iX2VyZWdfc2VhcmNoX3JlZ3MnID0+ICdTYWZlXG1iX2VyZWdfc2VhcmNoX3JlZ3MnLAogICAgICAgICAgICAnbWJfZXJlZ19zZWFyY2hfc2V0cG9zJyA9PiAnU2FmZVxtYl9lcmVnX3NlYXJjaF9zZXRwb3MnLAogICAgICAgICAgICAnbWJfaHR0cF9vdXRwdXQnID0+ICdTYWZlXG1iX2h0dHBfb3V0cHV0JywKICAgICAgICAgICAgJ21iX2ludGVybmFsX2VuY29kaW5nJyA9PiAnU2FmZVxtYl9pbnRlcm5hbF9lbmNvZGluZycsCiAgICAgICAgICAgICdtYl9vcmQnID0+ICdTYWZlXG1iX29yZCcsCiAgICAgICAgICAgICdtYl9wYXJzZV9zdHInID0+ICdTYWZlXG1iX3BhcnNlX3N0cicsCiAgICAgICAgICAgICdtYl9yZWdleF9lbmNvZGluZycgPT4gJ1NhZmVcbWJfcmVnZXhfZW5jb2RpbmcnLAogICAgICAgICAgICAnbWJfc2VuZF9tYWlsJyA9PiAnU2FmZVxtYl9zZW5kX21haWwnLAogICAgICAgICAgICAnbWJfc3BsaXQnID0+ICdTYWZlXG1iX3NwbGl0JywKICAgICAgICAgICAgJ21iX3N0cl9zcGxpdCcgPT4gJ1NhZmVcbWJfc3RyX3NwbGl0JywKICAgICAgICAgICAgJ21kNV9maWxlJyA9PiAnU2FmZVxtZDVfZmlsZScsCiAgICAgICAgICAgICdtZXRhcGhvbmUnID0+ICdTYWZlXG1ldGFwaG9uZScsCiAgICAgICAgICAgICdtaW1lX2NvbnRlbnRfdHlwZScgPT4gJ1NhZmVcbWltZV9jb250ZW50X3R5cGUnLAogICAgICAgICAgICAnbWtkaXInID0+ICdTYWZlXG1rZGlyJywKICAgICAgICAgICAgJ21rdGltZScgPT4gJ1NhZmVcbWt0aW1lJywKICAgICAgICAgICAgJ21zZ19xdWV1ZV9leGlzdHMnID0+ICdTYWZlXG1zZ19xdWV1ZV9leGlzdHMnLAogICAgICAgICAgICAnbXNnX3JlY2VpdmUnID0+ICdTYWZlXG1zZ19yZWNlaXZlJywKICAgICAgICAgICAgJ21zZ19yZW1vdmVfcXVldWUnID0+ICdTYWZlXG1zZ19yZW1vdmVfcXVldWUnLAogICAgICAgICAgICAnbXNnX3NlbmQnID0+ICdTYWZlXG1zZ19zZW5kJywKICAgICAgICAgICAgJ21zZ19zZXRfcXVldWUnID0+ICdTYWZlXG1zZ19zZXRfcXVldWUnLAogICAgICAgICAgICAnbXNxbF9hZmZlY3RlZF9yb3dzJyA9PiAnU2FmZVxtc3FsX2FmZmVjdGVkX3Jvd3MnLAogICAgICAgICAgICAnbXNxbF9jbG9zZScgPT4gJ1NhZmVcbXNxbF9jbG9zZScsCiAgICAgICAgICAgICdtc3FsX2Nvbm5lY3QnID0+ICdTYWZlXG1zcWxfY29ubmVjdCcsCiAgICAgICAgICAgICdtc3FsX2NyZWF0ZV9kYicgPT4gJ1NhZmVcbXNxbF9jcmVhdGVfZGInLAogICAgICAgICAgICAnbXNxbF9kYXRhX3NlZWsnID0+ICdTYWZlXG1zcWxfZGF0YV9zZWVrJywKICAgICAgICAgICAgJ21zcWxfZGJfcXVlcnknID0+ICdTYWZlXG1zcWxfZGJfcXVlcnknLAogICAgICAgICAgICAnbXNxbF9kcm9wX2RiJyA9PiAnU2FmZVxtc3FsX2Ryb3BfZGInLAogICAgICAgICAgICAnbXNxbF9maWVsZF9sZW4nID0+ICdTYWZlXG1zcWxfZmllbGRfbGVuJywKICAgICAgICAgICAgJ21zcWxfZmllbGRfbmFtZScgPT4gJ1NhZmVcbXNxbF9maWVsZF9uYW1lJywKICAgICAgICAgICAgJ21zcWxfZmllbGRfc2VlaycgPT4gJ1NhZmVcbXNxbF9maWVsZF9zZWVrJywKICAgICAgICAgICAgJ21zcWxfZmllbGRfdGFibGUnID0+ICdTYWZlXG1zcWxfZmllbGRfdGFibGUnLAogICAgICAgICAgICAnbXNxbF9maWVsZF90eXBlJyA9PiAnU2FmZVxtc3FsX2ZpZWxkX3R5cGUnLAogICAgICAgICAgICAnbXNxbF9mcmVlX3Jlc3VsdCcgPT4gJ1NhZmVcbXNxbF9mcmVlX3Jlc3VsdCcsCiAgICAgICAgICAgICdtc3FsX3Bjb25uZWN0JyA9PiAnU2FmZVxtc3FsX3Bjb25uZWN0JywKICAgICAgICAgICAgJ21zcWxfcXVlcnknID0+ICdTYWZlXG1zcWxfcXVlcnknLAogICAgICAgICAgICAnbXNxbF9zZWxlY3RfZGInID0+ICdTYWZlXG1zcWxfc2VsZWN0X2RiJywKICAgICAgICAgICAgJ215c3FsaV9nZXRfY2FjaGVfc3RhdHMnID0+ICdTYWZlXG15c3FsaV9nZXRfY2FjaGVfc3RhdHMnLAogICAgICAgICAgICAnbXlzcWxpX2dldF9jbGllbnRfc3RhdHMnID0+ICdTYWZlXG15c3FsaV9nZXRfY2xpZW50X3N0YXRzJywKICAgICAgICAgICAgJ215c3FsbmRfbXNfZHVtcF9zZXJ2ZXJzJyA9PiAnU2FmZVxteXNxbG5kX21zX2R1bXBfc2VydmVycycsCiAgICAgICAgICAgICdteXNxbG5kX21zX2ZhYnJpY19zZWxlY3RfZ2xvYmFsJyA9PiAnU2FmZVxteXNxbG5kX21zX2ZhYnJpY19zZWxlY3RfZ2xvYmFsJywKICAgICAgICAgICAgJ215c3FsbmRfbXNfZmFicmljX3NlbGVjdF9zaGFyZCcgPT4gJ1NhZmVcbXlzcWxuZF9tc19mYWJyaWNfc2VsZWN0X3NoYXJkJywKICAgICAgICAgICAgJ215c3FsbmRfbXNfZ2V0X2xhc3RfdXNlZF9jb25uZWN0aW9uJyA9PiAnU2FmZVxteXNxbG5kX21zX2dldF9sYXN0X3VzZWRfY29ubmVjdGlvbicsCiAgICAgICAgICAgICdteXNxbG5kX3FjX2NsZWFyX2NhY2hlJyA9PiAnU2FmZVxteXNxbG5kX3FjX2NsZWFyX2NhY2hlJywKICAgICAgICAgICAgJ215c3FsbmRfcWNfc2V0X2lzX3NlbGVjdCcgPT4gJ1NhZmVcbXlzcWxuZF9xY19zZXRfaXNfc2VsZWN0JywKICAgICAgICAgICAgJ215c3FsbmRfcWNfc2V0X3N0b3JhZ2VfaGFuZGxlcicgPT4gJ1NhZmVcbXlzcWxuZF9xY19zZXRfc3RvcmFnZV9oYW5kbGVyJywKICAgICAgICAgICAgJ215c3FsX2Nsb3NlJyA9PiAnU2FmZVxteXNxbF9jbG9zZScsCiAgICAgICAgICAgICdteXNxbF9jb25uZWN0JyA9PiAnU2FmZVxteXNxbF9jb25uZWN0JywKICAgICAgICAgICAgJ215c3FsX2NyZWF0ZV9kYicgPT4gJ1NhZmVcbXlzcWxfY3JlYXRlX2RiJywKICAgICAgICAgICAgJ215c3FsX2RhdGFfc2VlaycgPT4gJ1NhZmVcbXlzcWxfZGF0YV9zZWVrJywKICAgICAgICAgICAgJ215c3FsX2RiX25hbWUnID0+ICdTYWZlXG15c3FsX2RiX25hbWUnLAogICAgICAgICAgICAnbXlzcWxfZGJfcXVlcnknID0+ICdTYWZlXG15c3FsX2RiX3F1ZXJ5JywKICAgICAgICAgICAgJ215c3FsX2Ryb3BfZGInID0+ICdTYWZlXG15c3FsX2Ryb3BfZGInLAogICAgICAgICAgICAnbXlzcWxfZmV0Y2hfbGVuZ3RocycgPT4gJ1NhZmVcbXlzcWxfZmV0Y2hfbGVuZ3RocycsCiAgICAgICAgICAgICdteXNxbF9maWVsZF9mbGFncycgPT4gJ1NhZmVcbXlzcWxfZmllbGRfZmxhZ3MnLAogICAgICAgICAgICAnbXlzcWxfZmllbGRfbGVuJyA9PiAnU2FmZVxteXNxbF9maWVsZF9sZW4nLAogICAgICAgICAgICAnbXlzcWxfZmllbGRfbmFtZScgPT4gJ1NhZmVcbXlzcWxfZmllbGRfbmFtZScsCiAgICAgICAgICAgICdteXNxbF9maWVsZF9zZWVrJyA9PiAnU2FmZVxteXNxbF9maWVsZF9zZWVrJywKICAgICAgICAgICAgJ215c3FsX2ZyZWVfcmVzdWx0JyA9PiAnU2FmZVxteXNxbF9mcmVlX3Jlc3VsdCcsCiAgICAgICAgICAgICdteXNxbF9nZXRfaG9zdF9pbmZvJyA9PiAnU2FmZVxteXNxbF9nZXRfaG9zdF9pbmZvJywKICAgICAgICAgICAgJ215c3FsX2dldF9wcm90b19pbmZvJyA9PiAnU2FmZVxteXNxbF9nZXRfcHJvdG9faW5mbycsCiAgICAgICAgICAgICdteXNxbF9nZXRfc2VydmVyX2luZm8nID0+ICdTYWZlXG15c3FsX2dldF9zZXJ2ZXJfaW5mbycsCiAgICAgICAgICAgICdteXNxbF9pbmZvJyA9PiAnU2FmZVxteXNxbF9pbmZvJywKICAgICAgICAgICAgJ215c3FsX2xpc3RfZGJzJyA9PiAnU2FmZVxteXNxbF9saXN0X2RicycsCiAgICAgICAgICAgICdteXNxbF9saXN0X2ZpZWxkcycgPT4gJ1NhZmVcbXlzcWxfbGlzdF9maWVsZHMnLAogICAgICAgICAgICAnbXlzcWxfbGlzdF9wcm9jZXNzZXMnID0+ICdTYWZlXG15c3FsX2xpc3RfcHJvY2Vzc2VzJywKICAgICAgICAgICAgJ215c3FsX2xpc3RfdGFibGVzJyA9PiAnU2FmZVxteXNxbF9saXN0X3RhYmxlcycsCiAgICAgICAgICAgICdteXNxbF9udW1fZmllbGRzJyA9PiAnU2FmZVxteXNxbF9udW1fZmllbGRzJywKICAgICAgICAgICAgJ215c3FsX251bV9yb3dzJyA9PiAnU2FmZVxteXNxbF9udW1fcm93cycsCiAgICAgICAgICAgICdteXNxbF9xdWVyeScgPT4gJ1NhZmVcbXlzcWxfcXVlcnknLAogICAgICAgICAgICAnbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nJyA9PiAnU2FmZVxteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcnLAogICAgICAgICAgICAnbXlzcWxfcmVzdWx0JyA9PiAnU2FmZVxteXNxbF9yZXN1bHQnLAogICAgICAgICAgICAnbXlzcWxfc2VsZWN0X2RiJyA9PiAnU2FmZVxteXNxbF9zZWxlY3RfZGInLAogICAgICAgICAgICAnbXlzcWxfc2V0X2NoYXJzZXQnID0+ICdTYWZlXG15c3FsX3NldF9jaGFyc2V0JywKICAgICAgICAgICAgJ215c3FsX3RhYmxlbmFtZScgPT4gJ1NhZmVcbXlzcWxfdGFibGVuYW1lJywKICAgICAgICAgICAgJ215c3FsX3RocmVhZF9pZCcgPT4gJ1NhZmVcbXlzcWxfdGhyZWFkX2lkJywKICAgICAgICAgICAgJ215c3FsX3VuYnVmZmVyZWRfcXVlcnknID0+ICdTYWZlXG15c3FsX3VuYnVmZmVyZWRfcXVlcnknLAogICAgICAgICAgICAnbmF0Y2FzZXNvcnQnID0+ICdTYWZlXG5hdGNhc2Vzb3J0JywKICAgICAgICAgICAgJ25hdHNvcnQnID0+ICdTYWZlXG5hdHNvcnQnLAogICAgICAgICAgICAnb2JfZW5kX2NsZWFuJyA9PiAnU2FmZVxvYl9lbmRfY2xlYW4nLAogICAgICAgICAgICAnb2JfZW5kX2ZsdXNoJyA9PiAnU2FmZVxvYl9lbmRfZmx1c2gnLAogICAgICAgICAgICAnb2NpX2JpbmRfYXJyYXlfYnlfbmFtZScgPT4gJ1NhZmVcb2NpX2JpbmRfYXJyYXlfYnlfbmFtZScsCiAgICAgICAgICAgICdvY2lfYmluZF9ieV9uYW1lJyA9PiAnU2FmZVxvY2lfYmluZF9ieV9uYW1lJywKICAgICAgICAgICAgJ29jaV9jYW5jZWwnID0+ICdTYWZlXG9jaV9jYW5jZWwnLAogICAgICAgICAgICAnb2NpX2Nsb3NlJyA9PiAnU2FmZVxvY2lfY2xvc2UnLAogICAgICAgICAgICAnb2NpX2NvbW1pdCcgPT4gJ1NhZmVcb2NpX2NvbW1pdCcsCiAgICAgICAgICAgICdvY2lfY29ubmVjdCcgPT4gJ1NhZmVcb2NpX2Nvbm5lY3QnLAogICAgICAgICAgICAnb2NpX2RlZmluZV9ieV9uYW1lJyA9PiAnU2FmZVxvY2lfZGVmaW5lX2J5X25hbWUnLAogICAgICAgICAgICAnb2NpX2V4ZWN1dGUnID0+ICdTYWZlXG9jaV9leGVjdXRlJywKICAgICAgICAgICAgJ29jaV9mZXRjaF9hbGwnID0+ICdTYWZlXG9jaV9mZXRjaF9hbGwnLAogICAgICAgICAgICAnb2NpX2ZpZWxkX25hbWUnID0+ICdTYWZlXG9jaV9maWVsZF9uYW1lJywKICAgICAgICAgICAgJ29jaV9maWVsZF9wcmVjaXNpb24nID0+ICdTYWZlXG9jaV9maWVsZF9wcmVjaXNpb24nLAogICAgICAgICAgICAnb2NpX2ZpZWxkX3NjYWxlJyA9PiAnU2FmZVxvY2lfZmllbGRfc2NhbGUnLAogICAgICAgICAgICAnb2NpX2ZpZWxkX3NpemUnID0+ICdTYWZlXG9jaV9maWVsZF9zaXplJywKICAgICAgICAgICAgJ29jaV9maWVsZF90eXBlJyA9PiAnU2FmZVxvY2lfZmllbGRfdHlwZScsCiAgICAgICAgICAgICdvY2lfZmllbGRfdHlwZV9yYXcnID0+ICdTYWZlXG9jaV9maWVsZF90eXBlX3JhdycsCiAgICAgICAgICAgICdvY2lfZnJlZV9kZXNjcmlwdG9yJyA9PiAnU2FmZVxvY2lfZnJlZV9kZXNjcmlwdG9yJywKICAgICAgICAgICAgJ29jaV9mcmVlX3N0YXRlbWVudCcgPT4gJ1NhZmVcb2NpX2ZyZWVfc3RhdGVtZW50JywKICAgICAgICAgICAgJ29jaV9uZXdfY29sbGVjdGlvbicgPT4gJ1NhZmVcb2NpX25ld19jb2xsZWN0aW9uJywKICAgICAgICAgICAgJ29jaV9uZXdfY29ubmVjdCcgPT4gJ1NhZmVcb2NpX25ld19jb25uZWN0JywKICAgICAgICAgICAgJ29jaV9uZXdfY3Vyc29yJyA9PiAnU2FmZVxvY2lfbmV3X2N1cnNvcicsCiAgICAgICAgICAgICdvY2lfbmV3X2Rlc2NyaXB0b3InID0+ICdTYWZlXG9jaV9uZXdfZGVzY3JpcHRvcicsCiAgICAgICAgICAgICdvY2lfbnVtX2ZpZWxkcycgPT4gJ1NhZmVcb2NpX251bV9maWVsZHMnLAogICAgICAgICAgICAnb2NpX251bV9yb3dzJyA9PiAnU2FmZVxvY2lfbnVtX3Jvd3MnLAogICAgICAgICAgICAnb2NpX3BhcnNlJyA9PiAnU2FmZVxvY2lfcGFyc2UnLAogICAgICAgICAgICAnb2NpX3Bjb25uZWN0JyA9PiAnU2FmZVxvY2lfcGNvbm5lY3QnLAogICAgICAgICAgICAnb2NpX3Jlc3VsdCcgPT4gJ1NhZmVcb2NpX3Jlc3VsdCcsCiAgICAgICAgICAgICdvY2lfcm9sbGJhY2snID0+ICdTYWZlXG9jaV9yb2xsYmFjaycsCiAgICAgICAgICAgICdvY2lfc2VydmVyX3ZlcnNpb24nID0+ICdTYWZlXG9jaV9zZXJ2ZXJfdmVyc2lvbicsCiAgICAgICAgICAgICdvY2lfc2V0X2FjdGlvbicgPT4gJ1NhZmVcb2NpX3NldF9hY3Rpb24nLAogICAgICAgICAgICAnb2NpX3NldF9jYWxsX3RpbWVvdXQnID0+ICdTYWZlXG9jaV9zZXRfY2FsbF90aW1lb3V0JywKICAgICAgICAgICAgJ29jaV9zZXRfY2xpZW50X2lkZW50aWZpZXInID0+ICdTYWZlXG9jaV9zZXRfY2xpZW50X2lkZW50aWZpZXInLAogICAgICAgICAgICAnb2NpX3NldF9jbGllbnRfaW5mbycgPT4gJ1NhZmVcb2NpX3NldF9jbGllbnRfaW5mbycsCiAgICAgICAgICAgICdvY2lfc2V0X2RiX29wZXJhdGlvbicgPT4gJ1NhZmVcb2NpX3NldF9kYl9vcGVyYXRpb24nLAogICAgICAgICAgICAnb2NpX3NldF9lZGl0aW9uJyA9PiAnU2FmZVxvY2lfc2V0X2VkaXRpb24nLAogICAgICAgICAgICAnb2NpX3NldF9tb2R1bGVfbmFtZScgPT4gJ1NhZmVcb2NpX3NldF9tb2R1bGVfbmFtZScsCiAgICAgICAgICAgICdvY2lfc2V0X3ByZWZldGNoJyA9PiAnU2FmZVxvY2lfc2V0X3ByZWZldGNoJywKICAgICAgICAgICAgJ29jaV9zdGF0ZW1lbnRfdHlwZScgPT4gJ1NhZmVcb2NpX3N0YXRlbWVudF90eXBlJywKICAgICAgICAgICAgJ29jaV91bnJlZ2lzdGVyX3RhZl9jYWxsYmFjaycgPT4gJ1NhZmVcb2NpX3VucmVnaXN0ZXJfdGFmX2NhbGxiYWNrJywKICAgICAgICAgICAgJ29kYmNfYXV0b2NvbW1pdCcgPT4gJ1NhZmVcb2RiY19hdXRvY29tbWl0JywKICAgICAgICAgICAgJ29kYmNfYmlubW9kZScgPT4gJ1NhZmVcb2RiY19iaW5tb2RlJywKICAgICAgICAgICAgJ29kYmNfY29sdW1ucHJpdmlsZWdlcycgPT4gJ1NhZmVcb2RiY19jb2x1bW5wcml2aWxlZ2VzJywKICAgICAgICAgICAgJ29kYmNfY29sdW1ucycgPT4gJ1NhZmVcb2RiY19jb2x1bW5zJywKICAgICAgICAgICAgJ29kYmNfY29tbWl0JyA9PiAnU2FmZVxvZGJjX2NvbW1pdCcsCiAgICAgICAgICAgICdvZGJjX2RhdGFfc291cmNlJyA9PiAnU2FmZVxvZGJjX2RhdGFfc291cmNlJywKICAgICAgICAgICAgJ29kYmNfZXhlYycgPT4gJ1NhZmVcb2RiY19leGVjJywKICAgICAgICAgICAgJ29kYmNfZXhlY3V0ZScgPT4gJ1NhZmVcb2RiY19leGVjdXRlJywKICAgICAgICAgICAgJ29kYmNfZmV0Y2hfaW50bycgPT4gJ1NhZmVcb2RiY19mZXRjaF9pbnRvJywKICAgICAgICAgICAgJ29kYmNfZmllbGRfbGVuJyA9PiAnU2FmZVxvZGJjX2ZpZWxkX2xlbicsCiAgICAgICAgICAgICdvZGJjX2ZpZWxkX25hbWUnID0+ICdTYWZlXG9kYmNfZmllbGRfbmFtZScsCiAgICAgICAgICAgICdvZGJjX2ZpZWxkX251bScgPT4gJ1NhZmVcb2RiY19maWVsZF9udW0nLAogICAgICAgICAgICAnb2RiY19maWVsZF9zY2FsZScgPT4gJ1NhZmVcb2RiY19maWVsZF9zY2FsZScsCiAgICAgICAgICAgICdvZGJjX2ZpZWxkX3R5cGUnID0+ICdTYWZlXG9kYmNfZmllbGRfdHlwZScsCiAgICAgICAgICAgICdvZGJjX2ZvcmVpZ25rZXlzJyA9PiAnU2FmZVxvZGJjX2ZvcmVpZ25rZXlzJywKICAgICAgICAgICAgJ29kYmNfZ2V0dHlwZWluZm8nID0+ICdTYWZlXG9kYmNfZ2V0dHlwZWluZm8nLAogICAgICAgICAgICAnb2RiY19sb25ncmVhZGxlbicgPT4gJ1NhZmVcb2RiY19sb25ncmVhZGxlbicsCiAgICAgICAgICAgICdvZGJjX3ByZXBhcmUnID0+ICdTYWZlXG9kYmNfcHJlcGFyZScsCiAgICAgICAgICAgICdvZGJjX3ByaW1hcnlrZXlzJyA9PiAnU2FmZVxvZGJjX3ByaW1hcnlrZXlzJywKICAgICAgICAgICAgJ29kYmNfcmVzdWx0JyA9PiAnU2FmZVxvZGJjX3Jlc3VsdCcsCiAgICAgICAgICAgICdvZGJjX3Jlc3VsdF9hbGwnID0+ICdTYWZlXG9kYmNfcmVzdWx0X2FsbCcsCiAgICAgICAgICAgICdvZGJjX3JvbGxiYWNrJyA9PiAnU2FmZVxvZGJjX3JvbGxiYWNrJywKICAgICAgICAgICAgJ29kYmNfc2V0b3B0aW9uJyA9PiAnU2FmZVxvZGJjX3NldG9wdGlvbicsCiAgICAgICAgICAgICdvZGJjX3NwZWNpYWxjb2x1bW5zJyA9PiAnU2FmZVxvZGJjX3NwZWNpYWxjb2x1bW5zJywKICAgICAgICAgICAgJ29kYmNfc3RhdGlzdGljcycgPT4gJ1NhZmVcb2RiY19zdGF0aXN0aWNzJywKICAgICAgICAgICAgJ29kYmNfdGFibGVwcml2aWxlZ2VzJyA9PiAnU2FmZVxvZGJjX3RhYmxlcHJpdmlsZWdlcycsCiAgICAgICAgICAgICdvZGJjX3RhYmxlcycgPT4gJ1NhZmVcb2RiY190YWJsZXMnLAogICAgICAgICAgICAnb3BjYWNoZV9jb21waWxlX2ZpbGUnID0+ICdTYWZlXG9wY2FjaGVfY29tcGlsZV9maWxlJywKICAgICAgICAgICAgJ29wY2FjaGVfZ2V0X3N0YXR1cycgPT4gJ1NhZmVcb3BjYWNoZV9nZXRfc3RhdHVzJywKICAgICAgICAgICAgJ29wZW5kaXInID0+ICdTYWZlXG9wZW5kaXInLAogICAgICAgICAgICAnb3BlbmxvZycgPT4gJ1NhZmVcb3BlbmxvZycsCiAgICAgICAgICAgICdvcGVuc3NsX2NpcGhlcl9pdl9sZW5ndGgnID0+ICdTYWZlXG9wZW5zc2xfY2lwaGVyX2l2X2xlbmd0aCcsCiAgICAgICAgICAgICdvcGVuc3NsX2Nzcl9leHBvcnQnID0+ICdTYWZlXG9wZW5zc2xfY3NyX2V4cG9ydCcsCiAgICAgICAgICAgICdvcGVuc3NsX2Nzcl9leHBvcnRfdG9fZmlsZScgPT4gJ1NhZmVcb3BlbnNzbF9jc3JfZXhwb3J0X3RvX2ZpbGUnLAogICAgICAgICAgICAnb3BlbnNzbF9jc3JfZ2V0X3N1YmplY3QnID0+ICdTYWZlXG9wZW5zc2xfY3NyX2dldF9zdWJqZWN0JywKICAgICAgICAgICAgJ29wZW5zc2xfY3NyX25ldycgPT4gJ1NhZmVcb3BlbnNzbF9jc3JfbmV3JywKICAgICAgICAgICAgJ29wZW5zc2xfY3NyX3NpZ24nID0+ICdTYWZlXG9wZW5zc2xfY3NyX3NpZ24nLAogICAgICAgICAgICAnb3BlbnNzbF9kZWNyeXB0JyA9PiAnU2FmZVxvcGVuc3NsX2RlY3J5cHQnLAogICAgICAgICAgICAnb3BlbnNzbF9kaF9jb21wdXRlX2tleScgPT4gJ1NhZmVcb3BlbnNzbF9kaF9jb21wdXRlX2tleScsCiAgICAgICAgICAgICdvcGVuc3NsX2RpZ2VzdCcgPT4gJ1NhZmVcb3BlbnNzbF9kaWdlc3QnLAogICAgICAgICAgICAnb3BlbnNzbF9lbmNyeXB0JyA9PiAnU2FmZVxvcGVuc3NsX2VuY3J5cHQnLAogICAgICAgICAgICAnb3BlbnNzbF9vcGVuJyA9PiAnU2FmZVxvcGVuc3NsX29wZW4nLAogICAgICAgICAgICAnb3BlbnNzbF9wYmtkZjInID0+ICdTYWZlXG9wZW5zc2xfcGJrZGYyJywKICAgICAgICAgICAgJ29wZW5zc2xfcGtjczdfZGVjcnlwdCcgPT4gJ1NhZmVcb3BlbnNzbF9wa2NzN19kZWNyeXB0JywKICAgICAgICAgICAgJ29wZW5zc2xfcGtjczdfZW5jcnlwdCcgPT4gJ1NhZmVcb3BlbnNzbF9wa2NzN19lbmNyeXB0JywKICAgICAgICAgICAgJ29wZW5zc2xfcGtjczdfcmVhZCcgPT4gJ1NhZmVcb3BlbnNzbF9wa2NzN19yZWFkJywKICAgICAgICAgICAgJ29wZW5zc2xfcGtjczdfc2lnbicgPT4gJ1NhZmVcb3BlbnNzbF9wa2NzN19zaWduJywKICAgICAgICAgICAgJ29wZW5zc2xfcGtjczEyX2V4cG9ydCcgPT4gJ1NhZmVcb3BlbnNzbF9wa2NzMTJfZXhwb3J0JywKICAgICAgICAgICAgJ29wZW5zc2xfcGtjczEyX2V4cG9ydF90b19maWxlJyA9PiAnU2FmZVxvcGVuc3NsX3BrY3MxMl9leHBvcnRfdG9fZmlsZScsCiAgICAgICAgICAgICdvcGVuc3NsX3BrY3MxMl9yZWFkJyA9PiAnU2FmZVxvcGVuc3NsX3BrY3MxMl9yZWFkJywKICAgICAgICAgICAgJ29wZW5zc2xfcGtleV9leHBvcnQnID0+ICdTYWZlXG9wZW5zc2xfcGtleV9leHBvcnQnLAogICAgICAgICAgICAnb3BlbnNzbF9wa2V5X2V4cG9ydF90b19maWxlJyA9PiAnU2FmZVxvcGVuc3NsX3BrZXlfZXhwb3J0X3RvX2ZpbGUnLAogICAgICAgICAgICAnb3BlbnNzbF9wa2V5X2dldF9wcml2YXRlJyA9PiAnU2FmZVxvcGVuc3NsX3BrZXlfZ2V0X3ByaXZhdGUnLAogICAgICAgICAgICAnb3BlbnNzbF9wa2V5X2dldF9wdWJsaWMnID0+ICdTYWZlXG9wZW5zc2xfcGtleV9nZXRfcHVibGljJywKICAgICAgICAgICAgJ29wZW5zc2xfcGtleV9uZXcnID0+ICdTYWZlXG9wZW5zc2xfcGtleV9uZXcnLAogICAgICAgICAgICAnb3BlbnNzbF9wcml2YXRlX2RlY3J5cHQnID0+ICdTYWZlXG9wZW5zc2xfcHJpdmF0ZV9kZWNyeXB0JywKICAgICAgICAgICAgJ29wZW5zc2xfcHJpdmF0ZV9lbmNyeXB0JyA9PiAnU2FmZVxvcGVuc3NsX3ByaXZhdGVfZW5jcnlwdCcsCiAgICAgICAgICAgICdvcGVuc3NsX3B1YmxpY19kZWNyeXB0JyA9PiAnU2FmZVxvcGVuc3NsX3B1YmxpY19kZWNyeXB0JywKICAgICAgICAgICAgJ29wZW5zc2xfcHVibGljX2VuY3J5cHQnID0+ICdTYWZlXG9wZW5zc2xfcHVibGljX2VuY3J5cHQnLAogICAgICAgICAgICAnb3BlbnNzbF9yYW5kb21fcHNldWRvX2J5dGVzJyA9PiAnU2FmZVxvcGVuc3NsX3JhbmRvbV9wc2V1ZG9fYnl0ZXMnLAogICAgICAgICAgICAnb3BlbnNzbF9zZWFsJyA9PiAnU2FmZVxvcGVuc3NsX3NlYWwnLAogICAgICAgICAgICAnb3BlbnNzbF9zaWduJyA9PiAnU2FmZVxvcGVuc3NsX3NpZ24nLAogICAgICAgICAgICAnb3BlbnNzbF94NTA5X2V4cG9ydCcgPT4gJ1NhZmVcb3BlbnNzbF94NTA5X2V4cG9ydCcsCiAgICAgICAgICAgICdvcGVuc3NsX3g1MDlfZXhwb3J0X3RvX2ZpbGUnID0+ICdTYWZlXG9wZW5zc2xfeDUwOV9leHBvcnRfdG9fZmlsZScsCiAgICAgICAgICAgICdvcGVuc3NsX3g1MDlfZmluZ2VycHJpbnQnID0+ICdTYWZlXG9wZW5zc2xfeDUwOV9maW5nZXJwcmludCcsCiAgICAgICAgICAgICdvcGVuc3NsX3g1MDlfcmVhZCcgPT4gJ1NhZmVcb3BlbnNzbF94NTA5X3JlYWQnLAogICAgICAgICAgICAnb3V0cHV0X2FkZF9yZXdyaXRlX3ZhcicgPT4gJ1NhZmVcb3V0cHV0X2FkZF9yZXdyaXRlX3ZhcicsCiAgICAgICAgICAgICdvdXRwdXRfcmVzZXRfcmV3cml0ZV92YXJzJyA9PiAnU2FmZVxvdXRwdXRfcmVzZXRfcmV3cml0ZV92YXJzJywKICAgICAgICAgICAgJ3BhY2snID0+ICdTYWZlXHBhY2snLAogICAgICAgICAgICAncGFyc2VfaW5pX2ZpbGUnID0+ICdTYWZlXHBhcnNlX2luaV9maWxlJywKICAgICAgICAgICAgJ3BhcnNlX2luaV9zdHJpbmcnID0+ICdTYWZlXHBhcnNlX2luaV9zdHJpbmcnLAogICAgICAgICAgICAncGFyc2VfdXJsJyA9PiAnU2FmZVxwYXJzZV91cmwnLAogICAgICAgICAgICAncGFzc3dvcmRfaGFzaCcgPT4gJ1NhZmVccGFzc3dvcmRfaGFzaCcsCiAgICAgICAgICAgICdwY250bF9leGVjJyA9PiAnU2FmZVxwY250bF9leGVjJywKICAgICAgICAgICAgJ3BjbnRsX2dldHByaW9yaXR5JyA9PiAnU2FmZVxwY250bF9nZXRwcmlvcml0eScsCiAgICAgICAgICAgICdwY250bF9zZXRwcmlvcml0eScgPT4gJ1NhZmVccGNudGxfc2V0cHJpb3JpdHknLAogICAgICAgICAgICAncGNudGxfc2lnbmFsX2Rpc3BhdGNoJyA9PiAnU2FmZVxwY250bF9zaWduYWxfZGlzcGF0Y2gnLAogICAgICAgICAgICAncGNudGxfc2lncHJvY21hc2snID0+ICdTYWZlXHBjbnRsX3NpZ3Byb2NtYXNrJywKICAgICAgICAgICAgJ3BjbnRsX3N0cmVycm9yJyA9PiAnU2FmZVxwY250bF9zdHJlcnJvcicsCiAgICAgICAgICAgICdQREZfYWN0aXZhdGVfaXRlbScgPT4gJ1NhZmVcUERGX2FjdGl2YXRlX2l0ZW0nLAogICAgICAgICAgICAnUERGX2FkZF9sb2NhbGxpbmsnID0+ICdTYWZlXFBERl9hZGRfbG9jYWxsaW5rJywKICAgICAgICAgICAgJ1BERl9hZGRfbmFtZWRkZXN0JyA9PiAnU2FmZVxQREZfYWRkX25hbWVkZGVzdCcsCiAgICAgICAgICAgICdQREZfYWRkX25vdGUnID0+ICdTYWZlXFBERl9hZGRfbm90ZScsCiAgICAgICAgICAgICdQREZfYWRkX3BkZmxpbmsnID0+ICdTYWZlXFBERl9hZGRfcGRmbGluaycsCiAgICAgICAgICAgICdQREZfYWRkX3RodW1ibmFpbCcgPT4gJ1NhZmVcUERGX2FkZF90aHVtYm5haWwnLAogICAgICAgICAgICAnUERGX2FkZF93ZWJsaW5rJyA9PiAnU2FmZVxQREZfYWRkX3dlYmxpbmsnLAogICAgICAgICAgICAnUERGX2F0dGFjaF9maWxlJyA9PiAnU2FmZVxQREZfYXR0YWNoX2ZpbGUnLAogICAgICAgICAgICAnUERGX2JlZ2luX2xheWVyJyA9PiAnU2FmZVxQREZfYmVnaW5fbGF5ZXInLAogICAgICAgICAgICAnUERGX2JlZ2luX3BhZ2UnID0+ICdTYWZlXFBERl9iZWdpbl9wYWdlJywKICAgICAgICAgICAgJ1BERl9iZWdpbl9wYWdlX2V4dCcgPT4gJ1NhZmVcUERGX2JlZ2luX3BhZ2VfZXh0JywKICAgICAgICAgICAgJ1BERl9jaXJjbGUnID0+ICdTYWZlXFBERl9jaXJjbGUnLAogICAgICAgICAgICAnUERGX2NsaXAnID0+ICdTYWZlXFBERl9jbGlwJywKICAgICAgICAgICAgJ1BERl9jbG9zZScgPT4gJ1NhZmVcUERGX2Nsb3NlJywKICAgICAgICAgICAgJ1BERl9jbG9zZXBhdGgnID0+ICdTYWZlXFBERl9jbG9zZXBhdGgnLAogICAgICAgICAgICAnUERGX2Nsb3NlcGF0aF9maWxsX3N0cm9rZScgPT4gJ1NhZmVcUERGX2Nsb3NlcGF0aF9maWxsX3N0cm9rZScsCiAgICAgICAgICAgICdQREZfY2xvc2VwYXRoX3N0cm9rZScgPT4gJ1NhZmVcUERGX2Nsb3NlcGF0aF9zdHJva2UnLAogICAgICAgICAgICAnUERGX2Nsb3NlX3BkaScgPT4gJ1NhZmVcUERGX2Nsb3NlX3BkaScsCiAgICAgICAgICAgICdQREZfY2xvc2VfcGRpX3BhZ2UnID0+ICdTYWZlXFBERl9jbG9zZV9wZGlfcGFnZScsCiAgICAgICAgICAgICdQREZfY29uY2F0JyA9PiAnU2FmZVxQREZfY29uY2F0JywKICAgICAgICAgICAgJ1BERl9jb250aW51ZV90ZXh0JyA9PiAnU2FmZVxQREZfY29udGludWVfdGV4dCcsCiAgICAgICAgICAgICdQREZfY3VydmV0bycgPT4gJ1NhZmVcUERGX2N1cnZldG8nLAogICAgICAgICAgICAnUERGX2RlbGV0ZScgPT4gJ1NhZmVcUERGX2RlbGV0ZScsCiAgICAgICAgICAgICdQREZfZW5kX2xheWVyJyA9PiAnU2FmZVxQREZfZW5kX2xheWVyJywKICAgICAgICAgICAgJ1BERl9lbmRfcGFnZScgPT4gJ1NhZmVcUERGX2VuZF9wYWdlJywKICAgICAgICAgICAgJ1BERl9lbmRfcGFnZV9leHQnID0+ICdTYWZlXFBERl9lbmRfcGFnZV9leHQnLAogICAgICAgICAgICAnUERGX2VuZF9wYXR0ZXJuJyA9PiAnU2FmZVxQREZfZW5kX3BhdHRlcm4nLAogICAgICAgICAgICAnUERGX2VuZF90ZW1wbGF0ZScgPT4gJ1NhZmVcUERGX2VuZF90ZW1wbGF0ZScsCiAgICAgICAgICAgICdQREZfZmlsbCcgPT4gJ1NhZmVcUERGX2ZpbGwnLAogICAgICAgICAgICAnUERGX2ZpbGxfc3Ryb2tlJyA9PiAnU2FmZVxQREZfZmlsbF9zdHJva2UnLAogICAgICAgICAgICAnUERGX2ZpdF9pbWFnZScgPT4gJ1NhZmVcUERGX2ZpdF9pbWFnZScsCiAgICAgICAgICAgICdQREZfZml0X3BkaV9wYWdlJyA9PiAnU2FmZVxQREZfZml0X3BkaV9wYWdlJywKICAgICAgICAgICAgJ1BERl9maXRfdGV4dGxpbmUnID0+ICdTYWZlXFBERl9maXRfdGV4dGxpbmUnLAogICAgICAgICAgICAnUERGX2luaXRncmFwaGljcycgPT4gJ1NhZmVcUERGX2luaXRncmFwaGljcycsCiAgICAgICAgICAgICdQREZfbGluZXRvJyA9PiAnU2FmZVxQREZfbGluZXRvJywKICAgICAgICAgICAgJ1BERl9tYWtlc3BvdGNvbG9yJyA9PiAnU2FmZVxQREZfbWFrZXNwb3Rjb2xvcicsCiAgICAgICAgICAgICdQREZfbW92ZXRvJyA9PiAnU2FmZVxQREZfbW92ZXRvJywKICAgICAgICAgICAgJ1BERl9vcGVuX2ZpbGUnID0+ICdTYWZlXFBERl9vcGVuX2ZpbGUnLAogICAgICAgICAgICAnUERGX3BsYWNlX2ltYWdlJyA9PiAnU2FmZVxQREZfcGxhY2VfaW1hZ2UnLAogICAgICAgICAgICAnUERGX3BsYWNlX3BkaV9wYWdlJyA9PiAnU2FmZVxQREZfcGxhY2VfcGRpX3BhZ2UnLAogICAgICAgICAgICAnUERGX3JlY3QnID0+ICdTYWZlXFBERl9yZWN0JywKICAgICAgICAgICAgJ1BERl9yZXN0b3JlJyA9PiAnU2FmZVxQREZfcmVzdG9yZScsCiAgICAgICAgICAgICdQREZfcm90YXRlJyA9PiAnU2FmZVxQREZfcm90YXRlJywKICAgICAgICAgICAgJ1BERl9zYXZlJyA9PiAnU2FmZVxQREZfc2F2ZScsCiAgICAgICAgICAgICdQREZfc2NhbGUnID0+ICdTYWZlXFBERl9zY2FsZScsCiAgICAgICAgICAgICdQREZfc2V0Y29sb3InID0+ICdTYWZlXFBERl9zZXRjb2xvcicsCiAgICAgICAgICAgICdQREZfc2V0ZGFzaCcgPT4gJ1NhZmVcUERGX3NldGRhc2gnLAogICAgICAgICAgICAnUERGX3NldGRhc2hwYXR0ZXJuJyA9PiAnU2FmZVxQREZfc2V0ZGFzaHBhdHRlcm4nLAogICAgICAgICAgICAnUERGX3NldGZsYXQnID0+ICdTYWZlXFBERl9zZXRmbGF0JywKICAgICAgICAgICAgJ1BERl9zZXRmb250JyA9PiAnU2FmZVxQREZfc2V0Zm9udCcsCiAgICAgICAgICAgICdQREZfc2V0Z3JheScgPT4gJ1NhZmVcUERGX3NldGdyYXknLAogICAgICAgICAgICAnUERGX3NldGdyYXlfZmlsbCcgPT4gJ1NhZmVcUERGX3NldGdyYXlfZmlsbCcsCiAgICAgICAgICAgICdQREZfc2V0Z3JheV9zdHJva2UnID0+ICdTYWZlXFBERl9zZXRncmF5X3N0cm9rZScsCiAgICAgICAgICAgICdQREZfc2V0bGluZWpvaW4nID0+ICdTYWZlXFBERl9zZXRsaW5lam9pbicsCiAgICAgICAgICAgICdQREZfc2V0bGluZXdpZHRoJyA9PiAnU2FmZVxQREZfc2V0bGluZXdpZHRoJywKICAgICAgICAgICAgJ1BERl9zZXRtYXRyaXgnID0+ICdTYWZlXFBERl9zZXRtYXRyaXgnLAogICAgICAgICAgICAnUERGX3NldG1pdGVybGltaXQnID0+ICdTYWZlXFBERl9zZXRtaXRlcmxpbWl0JywKICAgICAgICAgICAgJ1BERl9zZXRyZ2Jjb2xvcicgPT4gJ1NhZmVcUERGX3NldHJnYmNvbG9yJywKICAgICAgICAgICAgJ1BERl9zZXRyZ2Jjb2xvcl9maWxsJyA9PiAnU2FmZVxQREZfc2V0cmdiY29sb3JfZmlsbCcsCiAgICAgICAgICAgICdQREZfc2V0cmdiY29sb3Jfc3Ryb2tlJyA9PiAnU2FmZVxQREZfc2V0cmdiY29sb3Jfc3Ryb2tlJywKICAgICAgICAgICAgJ1BERl9zZXRfYm9yZGVyX2NvbG9yJyA9PiAnU2FmZVxQREZfc2V0X2JvcmRlcl9jb2xvcicsCiAgICAgICAgICAgICdQREZfc2V0X2JvcmRlcl9kYXNoJyA9PiAnU2FmZVxQREZfc2V0X2JvcmRlcl9kYXNoJywKICAgICAgICAgICAgJ1BERl9zZXRfYm9yZGVyX3N0eWxlJyA9PiAnU2FmZVxQREZfc2V0X2JvcmRlcl9zdHlsZScsCiAgICAgICAgICAgICdQREZfc2V0X2luZm8nID0+ICdTYWZlXFBERl9zZXRfaW5mbycsCiAgICAgICAgICAgICdQREZfc2V0X2xheWVyX2RlcGVuZGVuY3knID0+ICdTYWZlXFBERl9zZXRfbGF5ZXJfZGVwZW5kZW5jeScsCiAgICAgICAgICAgICdQREZfc2V0X3BhcmFtZXRlcicgPT4gJ1NhZmVcUERGX3NldF9wYXJhbWV0ZXInLAogICAgICAgICAgICAnUERGX3NldF90ZXh0X3BvcycgPT4gJ1NhZmVcUERGX3NldF90ZXh0X3BvcycsCiAgICAgICAgICAgICdQREZfc2V0X3ZhbHVlJyA9PiAnU2FmZVxQREZfc2V0X3ZhbHVlJywKICAgICAgICAgICAgJ1BERl9zaG93JyA9PiAnU2FmZVxQREZfc2hvdycsCiAgICAgICAgICAgICdQREZfc2hvd194eScgPT4gJ1NhZmVcUERGX3Nob3dfeHknLAogICAgICAgICAgICAnUERGX3NrZXcnID0+ICdTYWZlXFBERl9za2V3JywKICAgICAgICAgICAgJ1BERl9zdHJva2UnID0+ICdTYWZlXFBERl9zdHJva2UnLAogICAgICAgICAgICAncGdfY2FuY2VsX3F1ZXJ5JyA9PiAnU2FmZVxwZ19jYW5jZWxfcXVlcnknLAogICAgICAgICAgICAncGdfY2xpZW50X2VuY29kaW5nJyA9PiAnU2FmZVxwZ19jbGllbnRfZW5jb2RpbmcnLAogICAgICAgICAgICAncGdfY2xvc2UnID0+ICdTYWZlXHBnX2Nsb3NlJywKICAgICAgICAgICAgJ3BnX2Nvbm5lY3QnID0+ICdTYWZlXHBnX2Nvbm5lY3QnLAogICAgICAgICAgICAncGdfY29ubmVjdGlvbl9yZXNldCcgPT4gJ1NhZmVccGdfY29ubmVjdGlvbl9yZXNldCcsCiAgICAgICAgICAgICdwZ19jb252ZXJ0JyA9PiAnU2FmZVxwZ19jb252ZXJ0JywKICAgICAgICAgICAgJ3BnX2NvcHlfZnJvbScgPT4gJ1NhZmVccGdfY29weV9mcm9tJywKICAgICAgICAgICAgJ3BnX2NvcHlfdG8nID0+ICdTYWZlXHBnX2NvcHlfdG8nLAogICAgICAgICAgICAncGdfZGJuYW1lJyA9PiAnU2FmZVxwZ19kYm5hbWUnLAogICAgICAgICAgICAncGdfZGVsZXRlJyA9PiAnU2FmZVxwZ19kZWxldGUnLAogICAgICAgICAgICAncGdfZW5kX2NvcHknID0+ICdTYWZlXHBnX2VuZF9jb3B5JywKICAgICAgICAgICAgJ3BnX2V4ZWN1dGUnID0+ICdTYWZlXHBnX2V4ZWN1dGUnLAogICAgICAgICAgICAncGdfZmllbGRfbmFtZScgPT4gJ1NhZmVccGdfZmllbGRfbmFtZScsCiAgICAgICAgICAgICdwZ19maWVsZF90YWJsZScgPT4gJ1NhZmVccGdfZmllbGRfdGFibGUnLAogICAgICAgICAgICAncGdfZmllbGRfdHlwZScgPT4gJ1NhZmVccGdfZmllbGRfdHlwZScsCiAgICAgICAgICAgICdwZ19mbHVzaCcgPT4gJ1NhZmVccGdfZmx1c2gnLAogICAgICAgICAgICAncGdfZnJlZV9yZXN1bHQnID0+ICdTYWZlXHBnX2ZyZWVfcmVzdWx0JywKICAgICAgICAgICAgJ3BnX2hvc3QnID0+ICdTYWZlXHBnX2hvc3QnLAogICAgICAgICAgICAncGdfaW5zZXJ0JyA9PiAnU2FmZVxwZ19pbnNlcnQnLAogICAgICAgICAgICAncGdfbGFzdF9lcnJvcicgPT4gJ1NhZmVccGdfbGFzdF9lcnJvcicsCiAgICAgICAgICAgICdwZ19sYXN0X25vdGljZScgPT4gJ1NhZmVccGdfbGFzdF9ub3RpY2UnLAogICAgICAgICAgICAncGdfbGFzdF9vaWQnID0+ICdTYWZlXHBnX2xhc3Rfb2lkJywKICAgICAgICAgICAgJ3BnX2xvX2Nsb3NlJyA9PiAnU2FmZVxwZ19sb19jbG9zZScsCiAgICAgICAgICAgICdwZ19sb19leHBvcnQnID0+ICdTYWZlXHBnX2xvX2V4cG9ydCcsCiAgICAgICAgICAgICdwZ19sb19pbXBvcnQnID0+ICdTYWZlXHBnX2xvX2ltcG9ydCcsCiAgICAgICAgICAgICdwZ19sb19vcGVuJyA9PiAnU2FmZVxwZ19sb19vcGVuJywKICAgICAgICAgICAgJ3BnX2xvX3JlYWQnID0+ICdTYWZlXHBnX2xvX3JlYWQnLAogICAgICAgICAgICAncGdfbG9fcmVhZF9hbGwnID0+ICdTYWZlXHBnX2xvX3JlYWRfYWxsJywKICAgICAgICAgICAgJ3BnX2xvX3NlZWsnID0+ICdTYWZlXHBnX2xvX3NlZWsnLAogICAgICAgICAgICAncGdfbG9fdHJ1bmNhdGUnID0+ICdTYWZlXHBnX2xvX3RydW5jYXRlJywKICAgICAgICAgICAgJ3BnX2xvX3VubGluaycgPT4gJ1NhZmVccGdfbG9fdW5saW5rJywKICAgICAgICAgICAgJ3BnX2xvX3dyaXRlJyA9PiAnU2FmZVxwZ19sb193cml0ZScsCiAgICAgICAgICAgICdwZ19tZXRhX2RhdGEnID0+ICdTYWZlXHBnX21ldGFfZGF0YScsCiAgICAgICAgICAgICdwZ19vcHRpb25zJyA9PiAnU2FmZVxwZ19vcHRpb25zJywKICAgICAgICAgICAgJ3BnX3BhcmFtZXRlcl9zdGF0dXMnID0+ICdTYWZlXHBnX3BhcmFtZXRlcl9zdGF0dXMnLAogICAgICAgICAgICAncGdfcGNvbm5lY3QnID0+ICdTYWZlXHBnX3Bjb25uZWN0JywKICAgICAgICAgICAgJ3BnX3BpbmcnID0+ICdTYWZlXHBnX3BpbmcnLAogICAgICAgICAgICAncGdfcG9ydCcgPT4gJ1NhZmVccGdfcG9ydCcsCiAgICAgICAgICAgICdwZ19wcmVwYXJlJyA9PiAnU2FmZVxwZ19wcmVwYXJlJywKICAgICAgICAgICAgJ3BnX3B1dF9saW5lJyA9PiAnU2FmZVxwZ19wdXRfbGluZScsCiAgICAgICAgICAgICdwZ19xdWVyeScgPT4gJ1NhZmVccGdfcXVlcnknLAogICAgICAgICAgICAncGdfcXVlcnlfcGFyYW1zJyA9PiAnU2FmZVxwZ19xdWVyeV9wYXJhbXMnLAogICAgICAgICAgICAncGdfcmVzdWx0X2Vycm9yX2ZpZWxkJyA9PiAnU2FmZVxwZ19yZXN1bHRfZXJyb3JfZmllbGQnLAogICAgICAgICAgICAncGdfcmVzdWx0X3NlZWsnID0+ICdTYWZlXHBnX3Jlc3VsdF9zZWVrJywKICAgICAgICAgICAgJ3BnX3NlbGVjdCcgPT4gJ1NhZmVccGdfc2VsZWN0JywKICAgICAgICAgICAgJ3BnX3NlbmRfZXhlY3V0ZScgPT4gJ1NhZmVccGdfc2VuZF9leGVjdXRlJywKICAgICAgICAgICAgJ3BnX3NlbmRfcHJlcGFyZScgPT4gJ1NhZmVccGdfc2VuZF9wcmVwYXJlJywKICAgICAgICAgICAgJ3BnX3NlbmRfcXVlcnknID0+ICdTYWZlXHBnX3NlbmRfcXVlcnknLAogICAgICAgICAgICAncGdfc2VuZF9xdWVyeV9wYXJhbXMnID0+ICdTYWZlXHBnX3NlbmRfcXVlcnlfcGFyYW1zJywKICAgICAgICAgICAgJ3BnX3NvY2tldCcgPT4gJ1NhZmVccGdfc29ja2V0JywKICAgICAgICAgICAgJ3BnX3RyYWNlJyA9PiAnU2FmZVxwZ190cmFjZScsCiAgICAgICAgICAgICdwZ190dHknID0+ICdTYWZlXHBnX3R0eScsCiAgICAgICAgICAgICdwZ191cGRhdGUnID0+ICdTYWZlXHBnX3VwZGF0ZScsCiAgICAgICAgICAgICdwZ192ZXJzaW9uJyA9PiAnU2FmZVxwZ192ZXJzaW9uJywKICAgICAgICAgICAgJ3BocGNyZWRpdHMnID0+ICdTYWZlXHBocGNyZWRpdHMnLAogICAgICAgICAgICAncGhwaW5mbycgPT4gJ1NhZmVccGhwaW5mbycsCiAgICAgICAgICAgICdwbmcyd2JtcCcgPT4gJ1NhZmVccG5nMndibXAnLAogICAgICAgICAgICAncG9zaXhfYWNjZXNzJyA9PiAnU2FmZVxwb3NpeF9hY2Nlc3MnLAogICAgICAgICAgICAncG9zaXhfZ2V0Z3JuYW0nID0+ICdTYWZlXHBvc2l4X2dldGdybmFtJywKICAgICAgICAgICAgJ3Bvc2l4X2dldHBnaWQnID0+ICdTYWZlXHBvc2l4X2dldHBnaWQnLAogICAgICAgICAgICAncG9zaXhfaW5pdGdyb3VwcycgPT4gJ1NhZmVccG9zaXhfaW5pdGdyb3VwcycsCiAgICAgICAgICAgICdwb3NpeF9raWxsJyA9PiAnU2FmZVxwb3NpeF9raWxsJywKICAgICAgICAgICAgJ3Bvc2l4X21rZmlmbycgPT4gJ1NhZmVccG9zaXhfbWtmaWZvJywKICAgICAgICAgICAgJ3Bvc2l4X21rbm9kJyA9PiAnU2FmZVxwb3NpeF9ta25vZCcsCiAgICAgICAgICAgICdwb3NpeF9zZXRlZ2lkJyA9PiAnU2FmZVxwb3NpeF9zZXRlZ2lkJywKICAgICAgICAgICAgJ3Bvc2l4X3NldGV1aWQnID0+ICdTYWZlXHBvc2l4X3NldGV1aWQnLAogICAgICAgICAgICAncG9zaXhfc2V0Z2lkJyA9PiAnU2FmZVxwb3NpeF9zZXRnaWQnLAogICAgICAgICAgICAncG9zaXhfc2V0cGdpZCcgPT4gJ1NhZmVccG9zaXhfc2V0cGdpZCcsCiAgICAgICAgICAgICdwb3NpeF9zZXRybGltaXQnID0+ICdTYWZlXHBvc2l4X3NldHJsaW1pdCcsCiAgICAgICAgICAgICdwb3NpeF9zZXR1aWQnID0+ICdTYWZlXHBvc2l4X3NldHVpZCcsCiAgICAgICAgICAgICdwcmVnX21hdGNoJyA9PiAnU2FmZVxwcmVnX21hdGNoJywKICAgICAgICAgICAgJ3ByZWdfbWF0Y2hfYWxsJyA9PiAnU2FmZVxwcmVnX21hdGNoX2FsbCcsCiAgICAgICAgICAgICdwcmVnX3JlcGxhY2UnID0+ICdTYWZlXHByZWdfcmVwbGFjZScsCiAgICAgICAgICAgICdwcmVnX3NwbGl0JyA9PiAnU2FmZVxwcmVnX3NwbGl0JywKICAgICAgICAgICAgJ3Byb2NfZ2V0X3N0YXR1cycgPT4gJ1NhZmVccHJvY19nZXRfc3RhdHVzJywKICAgICAgICAgICAgJ3Byb2NfbmljZScgPT4gJ1NhZmVccHJvY19uaWNlJywKICAgICAgICAgICAgJ3BzcGVsbF9hZGRfdG9fcGVyc29uYWwnID0+ICdTYWZlXHBzcGVsbF9hZGRfdG9fcGVyc29uYWwnLAogICAgICAgICAgICAncHNwZWxsX2FkZF90b19zZXNzaW9uJyA9PiAnU2FmZVxwc3BlbGxfYWRkX3RvX3Nlc3Npb24nLAogICAgICAgICAgICAncHNwZWxsX2NsZWFyX3Nlc3Npb24nID0+ICdTYWZlXHBzcGVsbF9jbGVhcl9zZXNzaW9uJywKICAgICAgICAgICAgJ3BzcGVsbF9jb25maWdfY3JlYXRlJyA9PiAnU2FmZVxwc3BlbGxfY29uZmlnX2NyZWF0ZScsCiAgICAgICAgICAgICdwc3BlbGxfY29uZmlnX2RhdGFfZGlyJyA9PiAnU2FmZVxwc3BlbGxfY29uZmlnX2RhdGFfZGlyJywKICAgICAgICAgICAgJ3BzcGVsbF9jb25maWdfZGljdF9kaXInID0+ICdTYWZlXHBzcGVsbF9jb25maWdfZGljdF9kaXInLAogICAgICAgICAgICAncHNwZWxsX2NvbmZpZ19pZ25vcmUnID0+ICdTYWZlXHBzcGVsbF9jb25maWdfaWdub3JlJywKICAgICAgICAgICAgJ3BzcGVsbF9jb25maWdfbW9kZScgPT4gJ1NhZmVccHNwZWxsX2NvbmZpZ19tb2RlJywKICAgICAgICAgICAgJ3BzcGVsbF9jb25maWdfcGVyc29uYWwnID0+ICdTYWZlXHBzcGVsbF9jb25maWdfcGVyc29uYWwnLAogICAgICAgICAgICAncHNwZWxsX2NvbmZpZ19yZXBsJyA9PiAnU2FmZVxwc3BlbGxfY29uZmlnX3JlcGwnLAogICAgICAgICAgICAncHNwZWxsX2NvbmZpZ19ydW50b2dldGhlcicgPT4gJ1NhZmVccHNwZWxsX2NvbmZpZ19ydW50b2dldGhlcicsCiAgICAgICAgICAgICdwc3BlbGxfY29uZmlnX3NhdmVfcmVwbCcgPT4gJ1NhZmVccHNwZWxsX2NvbmZpZ19zYXZlX3JlcGwnLAogICAgICAgICAgICAncHNwZWxsX25ldycgPT4gJ1NhZmVccHNwZWxsX25ldycsCiAgICAgICAgICAgICdwc3BlbGxfbmV3X2NvbmZpZycgPT4gJ1NhZmVccHNwZWxsX25ld19jb25maWcnLAogICAgICAgICAgICAncHNwZWxsX3NhdmVfd29yZGxpc3QnID0+ICdTYWZlXHBzcGVsbF9zYXZlX3dvcmRsaXN0JywKICAgICAgICAgICAgJ3BzcGVsbF9zdG9yZV9yZXBsYWNlbWVudCcgPT4gJ1NhZmVccHNwZWxsX3N0b3JlX3JlcGxhY2VtZW50JywKICAgICAgICAgICAgJ3BzX2FkZF9sYXVuY2hsaW5rJyA9PiAnU2FmZVxwc19hZGRfbGF1bmNobGluaycsCiAgICAgICAgICAgICdwc19hZGRfbG9jYWxsaW5rJyA9PiAnU2FmZVxwc19hZGRfbG9jYWxsaW5rJywKICAgICAgICAgICAgJ3BzX2FkZF9ub3RlJyA9PiAnU2FmZVxwc19hZGRfbm90ZScsCiAgICAgICAgICAgICdwc19hZGRfcGRmbGluaycgPT4gJ1NhZmVccHNfYWRkX3BkZmxpbmsnLAogICAgICAgICAgICAncHNfYWRkX3dlYmxpbmsnID0+ICdTYWZlXHBzX2FkZF93ZWJsaW5rJywKICAgICAgICAgICAgJ3BzX2FyYycgPT4gJ1NhZmVccHNfYXJjJywKICAgICAgICAgICAgJ3BzX2FyY24nID0+ICdTYWZlXHBzX2FyY24nLAogICAgICAgICAgICAncHNfYmVnaW5fcGFnZScgPT4gJ1NhZmVccHNfYmVnaW5fcGFnZScsCiAgICAgICAgICAgICdwc19iZWdpbl9wYXR0ZXJuJyA9PiAnU2FmZVxwc19iZWdpbl9wYXR0ZXJuJywKICAgICAgICAgICAgJ3BzX2JlZ2luX3RlbXBsYXRlJyA9PiAnU2FmZVxwc19iZWdpbl90ZW1wbGF0ZScsCiAgICAgICAgICAgICdwc19jaXJjbGUnID0+ICdTYWZlXHBzX2NpcmNsZScsCiAgICAgICAgICAgICdwc19jbGlwJyA9PiAnU2FmZVxwc19jbGlwJywKICAgICAgICAgICAgJ3BzX2Nsb3NlJyA9PiAnU2FmZVxwc19jbG9zZScsCiAgICAgICAgICAgICdwc19jbG9zZXBhdGgnID0+ICdTYWZlXHBzX2Nsb3NlcGF0aCcsCiAgICAgICAgICAgICdwc19jbG9zZXBhdGhfc3Ryb2tlJyA9PiAnU2FmZVxwc19jbG9zZXBhdGhfc3Ryb2tlJywKICAgICAgICAgICAgJ3BzX2Nsb3NlX2ltYWdlJyA9PiAnU2FmZVxwc19jbG9zZV9pbWFnZScsCiAgICAgICAgICAgICdwc19jb250aW51ZV90ZXh0JyA9PiAnU2FmZVxwc19jb250aW51ZV90ZXh0JywKICAgICAgICAgICAgJ3BzX2N1cnZldG8nID0+ICdTYWZlXHBzX2N1cnZldG8nLAogICAgICAgICAgICAncHNfZGVsZXRlJyA9PiAnU2FmZVxwc19kZWxldGUnLAogICAgICAgICAgICAncHNfZW5kX3BhZ2UnID0+ICdTYWZlXHBzX2VuZF9wYWdlJywKICAgICAgICAgICAgJ3BzX2VuZF9wYXR0ZXJuJyA9PiAnU2FmZVxwc19lbmRfcGF0dGVybicsCiAgICAgICAgICAgICdwc19lbmRfdGVtcGxhdGUnID0+ICdTYWZlXHBzX2VuZF90ZW1wbGF0ZScsCiAgICAgICAgICAgICdwc19maWxsJyA9PiAnU2FmZVxwc19maWxsJywKICAgICAgICAgICAgJ3BzX2ZpbGxfc3Ryb2tlJyA9PiAnU2FmZVxwc19maWxsX3N0cm9rZScsCiAgICAgICAgICAgICdwc19nZXRfcGFyYW1ldGVyJyA9PiAnU2FmZVxwc19nZXRfcGFyYW1ldGVyJywKICAgICAgICAgICAgJ3BzX2h5cGhlbmF0ZScgPT4gJ1NhZmVccHNfaHlwaGVuYXRlJywKICAgICAgICAgICAgJ3BzX2luY2x1ZGVfZmlsZScgPT4gJ1NhZmVccHNfaW5jbHVkZV9maWxlJywKICAgICAgICAgICAgJ3BzX2xpbmV0bycgPT4gJ1NhZmVccHNfbGluZXRvJywKICAgICAgICAgICAgJ3BzX21vdmV0bycgPT4gJ1NhZmVccHNfbW92ZXRvJywKICAgICAgICAgICAgJ3BzX25ldycgPT4gJ1NhZmVccHNfbmV3JywKICAgICAgICAgICAgJ3BzX29wZW5fZmlsZScgPT4gJ1NhZmVccHNfb3Blbl9maWxlJywKICAgICAgICAgICAgJ3BzX3BsYWNlX2ltYWdlJyA9PiAnU2FmZVxwc19wbGFjZV9pbWFnZScsCiAgICAgICAgICAgICdwc19yZWN0JyA9PiAnU2FmZVxwc19yZWN0JywKICAgICAgICAgICAgJ3BzX3Jlc3RvcmUnID0+ICdTYWZlXHBzX3Jlc3RvcmUnLAogICAgICAgICAgICAncHNfcm90YXRlJyA9PiAnU2FmZVxwc19yb3RhdGUnLAogICAgICAgICAgICAncHNfc2F2ZScgPT4gJ1NhZmVccHNfc2F2ZScsCiAgICAgICAgICAgICdwc19zY2FsZScgPT4gJ1NhZmVccHNfc2NhbGUnLAogICAgICAgICAgICAncHNfc2V0Y29sb3InID0+ICdTYWZlXHBzX3NldGNvbG9yJywKICAgICAgICAgICAgJ3BzX3NldGRhc2gnID0+ICdTYWZlXHBzX3NldGRhc2gnLAogICAgICAgICAgICAncHNfc2V0ZmxhdCcgPT4gJ1NhZmVccHNfc2V0ZmxhdCcsCiAgICAgICAgICAgICdwc19zZXRmb250JyA9PiAnU2FmZVxwc19zZXRmb250JywKICAgICAgICAgICAgJ3BzX3NldGdyYXknID0+ICdTYWZlXHBzX3NldGdyYXknLAogICAgICAgICAgICAncHNfc2V0bGluZWNhcCcgPT4gJ1NhZmVccHNfc2V0bGluZWNhcCcsCiAgICAgICAgICAgICdwc19zZXRsaW5lam9pbicgPT4gJ1NhZmVccHNfc2V0bGluZWpvaW4nLAogICAgICAgICAgICAncHNfc2V0bGluZXdpZHRoJyA9PiAnU2FmZVxwc19zZXRsaW5ld2lkdGgnLAogICAgICAgICAgICAncHNfc2V0bWl0ZXJsaW1pdCcgPT4gJ1NhZmVccHNfc2V0bWl0ZXJsaW1pdCcsCiAgICAgICAgICAgICdwc19zZXRvdmVycHJpbnRtb2RlJyA9PiAnU2FmZVxwc19zZXRvdmVycHJpbnRtb2RlJywKICAgICAgICAgICAgJ3BzX3NldHBvbHlkYXNoJyA9PiAnU2FmZVxwc19zZXRwb2x5ZGFzaCcsCiAgICAgICAgICAgICdwc19zZXRfYm9yZGVyX2NvbG9yJyA9PiAnU2FmZVxwc19zZXRfYm9yZGVyX2NvbG9yJywKICAgICAgICAgICAgJ3BzX3NldF9ib3JkZXJfZGFzaCcgPT4gJ1NhZmVccHNfc2V0X2JvcmRlcl9kYXNoJywKICAgICAgICAgICAgJ3BzX3NldF9ib3JkZXJfc3R5bGUnID0+ICdTYWZlXHBzX3NldF9ib3JkZXJfc3R5bGUnLAogICAgICAgICAgICAncHNfc2V0X2luZm8nID0+ICdTYWZlXHBzX3NldF9pbmZvJywKICAgICAgICAgICAgJ3BzX3NldF9wYXJhbWV0ZXInID0+ICdTYWZlXHBzX3NldF9wYXJhbWV0ZXInLAogICAgICAgICAgICAncHNfc2V0X3RleHRfcG9zJyA9PiAnU2FmZVxwc19zZXRfdGV4dF9wb3MnLAogICAgICAgICAgICAncHNfc2V0X3ZhbHVlJyA9PiAnU2FmZVxwc19zZXRfdmFsdWUnLAogICAgICAgICAgICAncHNfc2hhZGluZycgPT4gJ1NhZmVccHNfc2hhZGluZycsCiAgICAgICAgICAgICdwc19zaGFkaW5nX3BhdHRlcm4nID0+ICdTYWZlXHBzX3NoYWRpbmdfcGF0dGVybicsCiAgICAgICAgICAgICdwc19zaGZpbGwnID0+ICdTYWZlXHBzX3NoZmlsbCcsCiAgICAgICAgICAgICdwc19zaG93JyA9PiAnU2FmZVxwc19zaG93JywKICAgICAgICAgICAgJ3BzX3Nob3cyJyA9PiAnU2FmZVxwc19zaG93MicsCiAgICAgICAgICAgICdwc19zaG93X3h5JyA9PiAnU2FmZVxwc19zaG93X3h5JywKICAgICAgICAgICAgJ3BzX3Nob3dfeHkyJyA9PiAnU2FmZVxwc19zaG93X3h5MicsCiAgICAgICAgICAgICdwc19zdHJva2UnID0+ICdTYWZlXHBzX3N0cm9rZScsCiAgICAgICAgICAgICdwc19zeW1ib2wnID0+ICdTYWZlXHBzX3N5bWJvbCcsCiAgICAgICAgICAgICdwc190cmFuc2xhdGUnID0+ICdTYWZlXHBzX3RyYW5zbGF0ZScsCiAgICAgICAgICAgICdwdXRlbnYnID0+ICdTYWZlXHB1dGVudicsCiAgICAgICAgICAgICdyZWFkZmlsZScgPT4gJ1NhZmVccmVhZGZpbGUnLAogICAgICAgICAgICAncmVhZGd6ZmlsZScgPT4gJ1NhZmVccmVhZGd6ZmlsZScsCiAgICAgICAgICAgICdyZWFkbGluZV9hZGRfaGlzdG9yeScgPT4gJ1NhZmVccmVhZGxpbmVfYWRkX2hpc3RvcnknLAogICAgICAgICAgICAncmVhZGxpbmVfY2FsbGJhY2tfaGFuZGxlcl9pbnN0YWxsJyA9PiAnU2FmZVxyZWFkbGluZV9jYWxsYmFja19oYW5kbGVyX2luc3RhbGwnLAogICAgICAgICAgICAncmVhZGxpbmVfY2xlYXJfaGlzdG9yeScgPT4gJ1NhZmVccmVhZGxpbmVfY2xlYXJfaGlzdG9yeScsCiAgICAgICAgICAgICdyZWFkbGluZV9jb21wbGV0aW9uX2Z1bmN0aW9uJyA9PiAnU2FmZVxyZWFkbGluZV9jb21wbGV0aW9uX2Z1bmN0aW9uJywKICAgICAgICAgICAgJ3JlYWRsaW5lX3JlYWRfaGlzdG9yeScgPT4gJ1NhZmVccmVhZGxpbmVfcmVhZF9oaXN0b3J5JywKICAgICAgICAgICAgJ3JlYWRsaW5lX3dyaXRlX2hpc3RvcnknID0+ICdTYWZlXHJlYWRsaW5lX3dyaXRlX2hpc3RvcnknLAogICAgICAgICAgICAncmVhZGxpbmsnID0+ICdTYWZlXHJlYWRsaW5rJywKICAgICAgICAgICAgJ3JlYWxwYXRoJyA9PiAnU2FmZVxyZWFscGF0aCcsCiAgICAgICAgICAgICdyZWdpc3Rlcl90aWNrX2Z1bmN0aW9uJyA9PiAnU2FmZVxyZWdpc3Rlcl90aWNrX2Z1bmN0aW9uJywKICAgICAgICAgICAgJ3JlbmFtZScgPT4gJ1NhZmVccmVuYW1lJywKICAgICAgICAgICAgJ3Jld2luZCcgPT4gJ1NhZmVccmV3aW5kJywKICAgICAgICAgICAgJ3Jld2luZGRpcicgPT4gJ1NhZmVccmV3aW5kZGlyJywKICAgICAgICAgICAgJ3JtZGlyJyA9PiAnU2FmZVxybWRpcicsCiAgICAgICAgICAgICdycG1hZGR0YWcnID0+ICdTYWZlXHJwbWFkZHRhZycsCiAgICAgICAgICAgICdycmRfY3JlYXRlJyA9PiAnU2FmZVxycmRfY3JlYXRlJywKICAgICAgICAgICAgJ3Jzb3J0JyA9PiAnU2FmZVxyc29ydCcsCiAgICAgICAgICAgICdzYXBpX3dpbmRvd3NfY3BfY29udicgPT4gJ1NhZmVcc2FwaV93aW5kb3dzX2NwX2NvbnYnLAogICAgICAgICAgICAnc2FwaV93aW5kb3dzX2NwX3NldCcgPT4gJ1NhZmVcc2FwaV93aW5kb3dzX2NwX3NldCcsCiAgICAgICAgICAgICdzYXBpX3dpbmRvd3NfZ2VuZXJhdGVfY3RybF9ldmVudCcgPT4gJ1NhZmVcc2FwaV93aW5kb3dzX2dlbmVyYXRlX2N0cmxfZXZlbnQnLAogICAgICAgICAgICAnc2FwaV93aW5kb3dzX3Z0MTAwX3N1cHBvcnQnID0+ICdTYWZlXHNhcGlfd2luZG93c192dDEwMF9zdXBwb3J0JywKICAgICAgICAgICAgJ3NjYW5kaXInID0+ICdTYWZlXHNjYW5kaXInLAogICAgICAgICAgICAnc2VtX2FjcXVpcmUnID0+ICdTYWZlXHNlbV9hY3F1aXJlJywKICAgICAgICAgICAgJ3NlbV9nZXQnID0+ICdTYWZlXHNlbV9nZXQnLAogICAgICAgICAgICAnc2VtX3JlbGVhc2UnID0+ICdTYWZlXHNlbV9yZWxlYXNlJywKICAgICAgICAgICAgJ3NlbV9yZW1vdmUnID0+ICdTYWZlXHNlbV9yZW1vdmUnLAogICAgICAgICAgICAnc2Vzc2lvbl9hYm9ydCcgPT4gJ1NhZmVcc2Vzc2lvbl9hYm9ydCcsCiAgICAgICAgICAgICdzZXNzaW9uX2RlY29kZScgPT4gJ1NhZmVcc2Vzc2lvbl9kZWNvZGUnLAogICAgICAgICAgICAnc2Vzc2lvbl9kZXN0cm95JyA9PiAnU2FmZVxzZXNzaW9uX2Rlc3Ryb3knLAogICAgICAgICAgICAnc2Vzc2lvbl9yZWdlbmVyYXRlX2lkJyA9PiAnU2FmZVxzZXNzaW9uX3JlZ2VuZXJhdGVfaWQnLAogICAgICAgICAgICAnc2Vzc2lvbl9yZXNldCcgPT4gJ1NhZmVcc2Vzc2lvbl9yZXNldCcsCiAgICAgICAgICAgICdzZXNzaW9uX3Vuc2V0JyA9PiAnU2FmZVxzZXNzaW9uX3Vuc2V0JywKICAgICAgICAgICAgJ3Nlc3Npb25fd3JpdGVfY2xvc2UnID0+ICdTYWZlXHNlc3Npb25fd3JpdGVfY2xvc2UnLAogICAgICAgICAgICAnc2V0dHlwZScgPT4gJ1NhZmVcc2V0dHlwZScsCiAgICAgICAgICAgICdzZXRfaW5jbHVkZV9wYXRoJyA9PiAnU2FmZVxzZXRfaW5jbHVkZV9wYXRoJywKICAgICAgICAgICAgJ3NldF90aW1lX2xpbWl0JyA9PiAnU2FmZVxzZXRfdGltZV9saW1pdCcsCiAgICAgICAgICAgICdzaGExX2ZpbGUnID0+ICdTYWZlXHNoYTFfZmlsZScsCiAgICAgICAgICAgICdzaG1vcF9kZWxldGUnID0+ICdTYWZlXHNobW9wX2RlbGV0ZScsCiAgICAgICAgICAgICdzaG1vcF9yZWFkJyA9PiAnU2FmZVxzaG1vcF9yZWFkJywKICAgICAgICAgICAgJ3NobW9wX3dyaXRlJyA9PiAnU2FmZVxzaG1vcF93cml0ZScsCiAgICAgICAgICAgICdzaG1fcHV0X3ZhcicgPT4gJ1NhZmVcc2htX3B1dF92YXInLAogICAgICAgICAgICAnc2htX3JlbW92ZScgPT4gJ1NhZmVcc2htX3JlbW92ZScsCiAgICAgICAgICAgICdzaG1fcmVtb3ZlX3ZhcicgPT4gJ1NhZmVcc2htX3JlbW92ZV92YXInLAogICAgICAgICAgICAnc2h1ZmZsZScgPT4gJ1NhZmVcc2h1ZmZsZScsCiAgICAgICAgICAgICdzaW1wbGV4bWxfaW1wb3J0X2RvbScgPT4gJ1NhZmVcc2ltcGxleG1sX2ltcG9ydF9kb20nLAogICAgICAgICAgICAnc2ltcGxleG1sX2xvYWRfZmlsZScgPT4gJ1NhZmVcc2ltcGxleG1sX2xvYWRfZmlsZScsCiAgICAgICAgICAgICdzaW1wbGV4bWxfbG9hZF9zdHJpbmcnID0+ICdTYWZlXHNpbXBsZXhtbF9sb2FkX3N0cmluZycsCiAgICAgICAgICAgICdzbGVlcCcgPT4gJ1NhZmVcc2xlZXAnLAogICAgICAgICAgICAnc29ja2V0X2FjY2VwdCcgPT4gJ1NhZmVcc29ja2V0X2FjY2VwdCcsCiAgICAgICAgICAgICdzb2NrZXRfYWRkcmluZm9fYmluZCcgPT4gJ1NhZmVcc29ja2V0X2FkZHJpbmZvX2JpbmQnLAogICAgICAgICAgICAnc29ja2V0X2FkZHJpbmZvX2Nvbm5lY3QnID0+ICdTYWZlXHNvY2tldF9hZGRyaW5mb19jb25uZWN0JywKICAgICAgICAgICAgJ3NvY2tldF9iaW5kJyA9PiAnU2FmZVxzb2NrZXRfYmluZCcsCiAgICAgICAgICAgICdzb2NrZXRfY29ubmVjdCcgPT4gJ1NhZmVcc29ja2V0X2Nvbm5lY3QnLAogICAgICAgICAgICAnc29ja2V0X2NyZWF0ZScgPT4gJ1NhZmVcc29ja2V0X2NyZWF0ZScsCiAgICAgICAgICAgICdzb2NrZXRfY3JlYXRlX2xpc3RlbicgPT4gJ1NhZmVcc29ja2V0X2NyZWF0ZV9saXN0ZW4nLAogICAgICAgICAgICAnc29ja2V0X2NyZWF0ZV9wYWlyJyA9PiAnU2FmZVxzb2NrZXRfY3JlYXRlX3BhaXInLAogICAgICAgICAgICAnc29ja2V0X2V4cG9ydF9zdHJlYW0nID0+ICdTYWZlXHNvY2tldF9leHBvcnRfc3RyZWFtJywKICAgICAgICAgICAgJ3NvY2tldF9nZXRwZWVybmFtZScgPT4gJ1NhZmVcc29ja2V0X2dldHBlZXJuYW1lJywKICAgICAgICAgICAgJ3NvY2tldF9nZXRzb2NrbmFtZScgPT4gJ1NhZmVcc29ja2V0X2dldHNvY2tuYW1lJywKICAgICAgICAgICAgJ3NvY2tldF9nZXRfb3B0aW9uJyA9PiAnU2FmZVxzb2NrZXRfZ2V0X29wdGlvbicsCiAgICAgICAgICAgICdzb2NrZXRfaW1wb3J0X3N0cmVhbScgPT4gJ1NhZmVcc29ja2V0X2ltcG9ydF9zdHJlYW0nLAogICAgICAgICAgICAnc29ja2V0X2xpc3RlbicgPT4gJ1NhZmVcc29ja2V0X2xpc3RlbicsCiAgICAgICAgICAgICdzb2NrZXRfcmVhZCcgPT4gJ1NhZmVcc29ja2V0X3JlYWQnLAogICAgICAgICAgICAnc29ja2V0X3NlbmQnID0+ICdTYWZlXHNvY2tldF9zZW5kJywKICAgICAgICAgICAgJ3NvY2tldF9zZW5kbXNnJyA9PiAnU2FmZVxzb2NrZXRfc2VuZG1zZycsCiAgICAgICAgICAgICdzb2NrZXRfc2VuZHRvJyA9PiAnU2FmZVxzb2NrZXRfc2VuZHRvJywKICAgICAgICAgICAgJ3NvY2tldF9zZXRfYmxvY2snID0+ICdTYWZlXHNvY2tldF9zZXRfYmxvY2snLAogICAgICAgICAgICAnc29ja2V0X3NldF9ub25ibG9jaycgPT4gJ1NhZmVcc29ja2V0X3NldF9ub25ibG9jaycsCiAgICAgICAgICAgICdzb2NrZXRfc2V0X29wdGlvbicgPT4gJ1NhZmVcc29ja2V0X3NldF9vcHRpb24nLAogICAgICAgICAgICAnc29ja2V0X3NodXRkb3duJyA9PiAnU2FmZVxzb2NrZXRfc2h1dGRvd24nLAogICAgICAgICAgICAnc29ja2V0X3dyaXRlJyA9PiAnU2FmZVxzb2NrZXRfd3JpdGUnLAogICAgICAgICAgICAnc29ja2V0X3dzYXByb3RvY29sX2luZm9fZXhwb3J0JyA9PiAnU2FmZVxzb2NrZXRfd3NhcHJvdG9jb2xfaW5mb19leHBvcnQnLAogICAgICAgICAgICAnc29ja2V0X3dzYXByb3RvY29sX2luZm9faW1wb3J0JyA9PiAnU2FmZVxzb2NrZXRfd3NhcHJvdG9jb2xfaW5mb19pbXBvcnQnLAogICAgICAgICAgICAnc29ja2V0X3dzYXByb3RvY29sX2luZm9fcmVsZWFzZScgPT4gJ1NhZmVcc29ja2V0X3dzYXByb3RvY29sX2luZm9fcmVsZWFzZScsCiAgICAgICAgICAgICdzb2RpdW1fY3J5cHRvX3B3aGFzaCcgPT4gJ1NhZmVcc29kaXVtX2NyeXB0b19wd2hhc2gnLAogICAgICAgICAgICAnc29kaXVtX2NyeXB0b19wd2hhc2hfc3RyJyA9PiAnU2FmZVxzb2RpdW1fY3J5cHRvX3B3aGFzaF9zdHInLAogICAgICAgICAgICAnc29scl9nZXRfdmVyc2lvbicgPT4gJ1NhZmVcc29scl9nZXRfdmVyc2lvbicsCiAgICAgICAgICAgICdzb3J0JyA9PiAnU2FmZVxzb3J0JywKICAgICAgICAgICAgJ3NvdW5kZXgnID0+ICdTYWZlXHNvdW5kZXgnLAogICAgICAgICAgICAnc3BsX2F1dG9sb2FkX3JlZ2lzdGVyJyA9PiAnU2FmZVxzcGxfYXV0b2xvYWRfcmVnaXN0ZXInLAogICAgICAgICAgICAnc3BsX2F1dG9sb2FkX3VucmVnaXN0ZXInID0+ICdTYWZlXHNwbF9hdXRvbG9hZF91bnJlZ2lzdGVyJywKICAgICAgICAgICAgJ3NwcmludGYnID0+ICdTYWZlXHNwcmludGYnLAogICAgICAgICAgICAnc3Fsc3J2X2JlZ2luX3RyYW5zYWN0aW9uJyA9PiAnU2FmZVxzcWxzcnZfYmVnaW5fdHJhbnNhY3Rpb24nLAogICAgICAgICAgICAnc3Fsc3J2X2NhbmNlbCcgPT4gJ1NhZmVcc3Fsc3J2X2NhbmNlbCcsCiAgICAgICAgICAgICdzcWxzcnZfY2xpZW50X2luZm8nID0+ICdTYWZlXHNxbHNydl9jbGllbnRfaW5mbycsCiAgICAgICAgICAgICdzcWxzcnZfY2xvc2UnID0+ICdTYWZlXHNxbHNydl9jbG9zZScsCiAgICAgICAgICAgICdzcWxzcnZfY29tbWl0JyA9PiAnU2FmZVxzcWxzcnZfY29tbWl0JywKICAgICAgICAgICAgJ3NxbHNydl9jb25maWd1cmUnID0+ICdTYWZlXHNxbHNydl9jb25maWd1cmUnLAogICAgICAgICAgICAnc3Fsc3J2X2V4ZWN1dGUnID0+ICdTYWZlXHNxbHNydl9leGVjdXRlJywKICAgICAgICAgICAgJ3NxbHNydl9mcmVlX3N0bXQnID0+ICdTYWZlXHNxbHNydl9mcmVlX3N0bXQnLAogICAgICAgICAgICAnc3Fsc3J2X2dldF9maWVsZCcgPT4gJ1NhZmVcc3Fsc3J2X2dldF9maWVsZCcsCiAgICAgICAgICAgICdzcWxzcnZfbmV4dF9yZXN1bHQnID0+ICdTYWZlXHNxbHNydl9uZXh0X3Jlc3VsdCcsCiAgICAgICAgICAgICdzcWxzcnZfbnVtX2ZpZWxkcycgPT4gJ1NhZmVcc3Fsc3J2X251bV9maWVsZHMnLAogICAgICAgICAgICAnc3Fsc3J2X251bV9yb3dzJyA9PiAnU2FmZVxzcWxzcnZfbnVtX3Jvd3MnLAogICAgICAgICAgICAnc3Fsc3J2X3ByZXBhcmUnID0+ICdTYWZlXHNxbHNydl9wcmVwYXJlJywKICAgICAgICAgICAgJ3NxbHNydl9xdWVyeScgPT4gJ1NhZmVcc3Fsc3J2X3F1ZXJ5JywKICAgICAgICAgICAgJ3NxbHNydl9yb2xsYmFjaycgPT4gJ1NhZmVcc3Fsc3J2X3JvbGxiYWNrJywKICAgICAgICAgICAgJ3NzZGVlcF9mdXp6eV9jb21wYXJlJyA9PiAnU2FmZVxzc2RlZXBfZnV6enlfY29tcGFyZScsCiAgICAgICAgICAgICdzc2RlZXBfZnV6enlfaGFzaCcgPT4gJ1NhZmVcc3NkZWVwX2Z1enp5X2hhc2gnLAogICAgICAgICAgICAnc3NkZWVwX2Z1enp5X2hhc2hfZmlsZW5hbWUnID0+ICdTYWZlXHNzZGVlcF9mdXp6eV9oYXNoX2ZpbGVuYW1lJywKICAgICAgICAgICAgJ3NzaDJfYXV0aF9hZ2VudCcgPT4gJ1NhZmVcc3NoMl9hdXRoX2FnZW50JywKICAgICAgICAgICAgJ3NzaDJfYXV0aF9ob3N0YmFzZWRfZmlsZScgPT4gJ1NhZmVcc3NoMl9hdXRoX2hvc3RiYXNlZF9maWxlJywKICAgICAgICAgICAgJ3NzaDJfYXV0aF9wYXNzd29yZCcgPT4gJ1NhZmVcc3NoMl9hdXRoX3Bhc3N3b3JkJywKICAgICAgICAgICAgJ3NzaDJfYXV0aF9wdWJrZXlfZmlsZScgPT4gJ1NhZmVcc3NoMl9hdXRoX3B1YmtleV9maWxlJywKICAgICAgICAgICAgJ3NzaDJfY29ubmVjdCcgPT4gJ1NhZmVcc3NoMl9jb25uZWN0JywKICAgICAgICAgICAgJ3NzaDJfZGlzY29ubmVjdCcgPT4gJ1NhZmVcc3NoMl9kaXNjb25uZWN0JywKICAgICAgICAgICAgJ3NzaDJfZXhlYycgPT4gJ1NhZmVcc3NoMl9leGVjJywKICAgICAgICAgICAgJ3NzaDJfcHVibGlja2V5X2FkZCcgPT4gJ1NhZmVcc3NoMl9wdWJsaWNrZXlfYWRkJywKICAgICAgICAgICAgJ3NzaDJfcHVibGlja2V5X2luaXQnID0+ICdTYWZlXHNzaDJfcHVibGlja2V5X2luaXQnLAogICAgICAgICAgICAnc3NoMl9wdWJsaWNrZXlfcmVtb3ZlJyA9PiAnU2FmZVxzc2gyX3B1YmxpY2tleV9yZW1vdmUnLAogICAgICAgICAgICAnc3NoMl9zY3BfcmVjdicgPT4gJ1NhZmVcc3NoMl9zY3BfcmVjdicsCiAgICAgICAgICAgICdzc2gyX3NjcF9zZW5kJyA9PiAnU2FmZVxzc2gyX3NjcF9zZW5kJywKICAgICAgICAgICAgJ3NzaDJfc2Z0cCcgPT4gJ1NhZmVcc3NoMl9zZnRwJywKICAgICAgICAgICAgJ3NzaDJfc2Z0cF9jaG1vZCcgPT4gJ1NhZmVcc3NoMl9zZnRwX2NobW9kJywKICAgICAgICAgICAgJ3NzaDJfc2Z0cF9ta2RpcicgPT4gJ1NhZmVcc3NoMl9zZnRwX21rZGlyJywKICAgICAgICAgICAgJ3NzaDJfc2Z0cF9yZW5hbWUnID0+ICdTYWZlXHNzaDJfc2Z0cF9yZW5hbWUnLAogICAgICAgICAgICAnc3NoMl9zZnRwX3JtZGlyJyA9PiAnU2FmZVxzc2gyX3NmdHBfcm1kaXInLAogICAgICAgICAgICAnc3NoMl9zZnRwX3N5bWxpbmsnID0+ICdTYWZlXHNzaDJfc2Z0cF9zeW1saW5rJywKICAgICAgICAgICAgJ3NzaDJfc2Z0cF91bmxpbmsnID0+ICdTYWZlXHNzaDJfc2Z0cF91bmxpbmsnLAogICAgICAgICAgICAnc3RyZWFtX2NvbnRleHRfc2V0X3BhcmFtcycgPT4gJ1NhZmVcc3RyZWFtX2NvbnRleHRfc2V0X3BhcmFtcycsCiAgICAgICAgICAgICdzdHJlYW1fY29weV90b19zdHJlYW0nID0+ICdTYWZlXHN0cmVhbV9jb3B5X3RvX3N0cmVhbScsCiAgICAgICAgICAgICdzdHJlYW1fZmlsdGVyX2FwcGVuZCcgPT4gJ1NhZmVcc3RyZWFtX2ZpbHRlcl9hcHBlbmQnLAogICAgICAgICAgICAnc3RyZWFtX2ZpbHRlcl9wcmVwZW5kJyA9PiAnU2FmZVxzdHJlYW1fZmlsdGVyX3ByZXBlbmQnLAogICAgICAgICAgICAnc3RyZWFtX2ZpbHRlcl9yZWdpc3RlcicgPT4gJ1NhZmVcc3RyZWFtX2ZpbHRlcl9yZWdpc3RlcicsCiAgICAgICAgICAgICdzdHJlYW1fZmlsdGVyX3JlbW92ZScgPT4gJ1NhZmVcc3RyZWFtX2ZpbHRlcl9yZW1vdmUnLAogICAgICAgICAgICAnc3RyZWFtX2dldF9jb250ZW50cycgPT4gJ1NhZmVcc3RyZWFtX2dldF9jb250ZW50cycsCiAgICAgICAgICAgICdzdHJlYW1faXNhdHR5JyA9PiAnU2FmZVxzdHJlYW1faXNhdHR5JywKICAgICAgICAgICAgJ3N0cmVhbV9yZXNvbHZlX2luY2x1ZGVfcGF0aCcgPT4gJ1NhZmVcc3RyZWFtX3Jlc29sdmVfaW5jbHVkZV9wYXRoJywKICAgICAgICAgICAgJ3N0cmVhbV9zZXRfYmxvY2tpbmcnID0+ICdTYWZlXHN0cmVhbV9zZXRfYmxvY2tpbmcnLAogICAgICAgICAgICAnc3RyZWFtX3NldF90aW1lb3V0JyA9PiAnU2FmZVxzdHJlYW1fc2V0X3RpbWVvdXQnLAogICAgICAgICAgICAnc3RyZWFtX3NvY2tldF9hY2NlcHQnID0+ICdTYWZlXHN0cmVhbV9zb2NrZXRfYWNjZXB0JywKICAgICAgICAgICAgJ3N0cmVhbV9zb2NrZXRfY2xpZW50JyA9PiAnU2FmZVxzdHJlYW1fc29ja2V0X2NsaWVudCcsCiAgICAgICAgICAgICdzdHJlYW1fc29ja2V0X3BhaXInID0+ICdTYWZlXHN0cmVhbV9zb2NrZXRfcGFpcicsCiAgICAgICAgICAgICdzdHJlYW1fc29ja2V0X3NlcnZlcicgPT4gJ1NhZmVcc3RyZWFtX3NvY2tldF9zZXJ2ZXInLAogICAgICAgICAgICAnc3RyZWFtX3NvY2tldF9zaHV0ZG93bicgPT4gJ1NhZmVcc3RyZWFtX3NvY2tldF9zaHV0ZG93bicsCiAgICAgICAgICAgICdzdHJlYW1fc3VwcG9ydHNfbG9jaycgPT4gJ1NhZmVcc3RyZWFtX3N1cHBvcnRzX2xvY2snLAogICAgICAgICAgICAnc3RyZWFtX3dyYXBwZXJfcmVnaXN0ZXInID0+ICdTYWZlXHN0cmVhbV93cmFwcGVyX3JlZ2lzdGVyJywKICAgICAgICAgICAgJ3N0cmVhbV93cmFwcGVyX3Jlc3RvcmUnID0+ICdTYWZlXHN0cmVhbV93cmFwcGVyX3Jlc3RvcmUnLAogICAgICAgICAgICAnc3RyZWFtX3dyYXBwZXJfdW5yZWdpc3RlcicgPT4gJ1NhZmVcc3RyZWFtX3dyYXBwZXJfdW5yZWdpc3RlcicsCiAgICAgICAgICAgICdzdHJwdGltZScgPT4gJ1NhZmVcc3RycHRpbWUnLAogICAgICAgICAgICAnc3RydG90aW1lJyA9PiAnU2FmZVxzdHJ0b3RpbWUnLAogICAgICAgICAgICAnc3Vic3RyJyA9PiAnU2FmZVxzdWJzdHInLAogICAgICAgICAgICAnc3dvb2xlX2FzeW5jX3dyaXRlJyA9PiAnU2FmZVxzd29vbGVfYXN5bmNfd3JpdGUnLAogICAgICAgICAgICAnc3dvb2xlX2FzeW5jX3dyaXRlZmlsZScgPT4gJ1NhZmVcc3dvb2xlX2FzeW5jX3dyaXRlZmlsZScsCiAgICAgICAgICAgICdzd29vbGVfZXZlbnRfZGVmZXInID0+ICdTYWZlXHN3b29sZV9ldmVudF9kZWZlcicsCiAgICAgICAgICAgICdzd29vbGVfZXZlbnRfZGVsJyA9PiAnU2FmZVxzd29vbGVfZXZlbnRfZGVsJywKICAgICAgICAgICAgJ3N3b29sZV9ldmVudF93cml0ZScgPT4gJ1NhZmVcc3dvb2xlX2V2ZW50X3dyaXRlJywKICAgICAgICAgICAgJ3N5bWxpbmsnID0+ICdTYWZlXHN5bWxpbmsnLAogICAgICAgICAgICAnc3lzbG9nJyA9PiAnU2FmZVxzeXNsb2cnLAogICAgICAgICAgICAnc3lzdGVtJyA9PiAnU2FmZVxzeXN0ZW0nLAogICAgICAgICAgICAndGVtcG5hbScgPT4gJ1NhZmVcdGVtcG5hbScsCiAgICAgICAgICAgICd0aW1lem9uZV9uYW1lX2Zyb21fYWJicicgPT4gJ1NhZmVcdGltZXpvbmVfbmFtZV9mcm9tX2FiYnInLAogICAgICAgICAgICAndGltZV9uYW5vc2xlZXAnID0+ICdTYWZlXHRpbWVfbmFub3NsZWVwJywKICAgICAgICAgICAgJ3RpbWVfc2xlZXBfdW50aWwnID0+ICdTYWZlXHRpbWVfc2xlZXBfdW50aWwnLAogICAgICAgICAgICAndG1wZmlsZScgPT4gJ1NhZmVcdG1wZmlsZScsCiAgICAgICAgICAgICd0b3VjaCcgPT4gJ1NhZmVcdG91Y2gnLAogICAgICAgICAgICAndWFzb3J0JyA9PiAnU2FmZVx1YXNvcnQnLAogICAgICAgICAgICAndWtzb3J0JyA9PiAnU2FmZVx1a3NvcnQnLAogICAgICAgICAgICAndW5saW5rJyA9PiAnU2FmZVx1bmxpbmsnLAogICAgICAgICAgICAndW5wYWNrJyA9PiAnU2FmZVx1bnBhY2snLAogICAgICAgICAgICAndW9wel9leHRlbmQnID0+ICdTYWZlXHVvcHpfZXh0ZW5kJywKICAgICAgICAgICAgJ3VvcHpfaW1wbGVtZW50JyA9PiAnU2FmZVx1b3B6X2ltcGxlbWVudCcsCiAgICAgICAgICAgICd1c29ydCcgPT4gJ1NhZmVcdXNvcnQnLAogICAgICAgICAgICAndmlydHVhbCcgPT4gJ1NhZmVcdmlydHVhbCcsCiAgICAgICAgICAgICd2c3ByaW50ZicgPT4gJ1NhZmVcdnNwcmludGYnLAogICAgICAgICAgICAneGRpZmZfZmlsZV9iZGlmZicgPT4gJ1NhZmVceGRpZmZfZmlsZV9iZGlmZicsCiAgICAgICAgICAgICd4ZGlmZl9maWxlX2JwYXRjaCcgPT4gJ1NhZmVceGRpZmZfZmlsZV9icGF0Y2gnLAogICAgICAgICAgICAneGRpZmZfZmlsZV9kaWZmJyA9PiAnU2FmZVx4ZGlmZl9maWxlX2RpZmYnLAogICAgICAgICAgICAneGRpZmZfZmlsZV9kaWZmX2JpbmFyeScgPT4gJ1NhZmVceGRpZmZfZmlsZV9kaWZmX2JpbmFyeScsCiAgICAgICAgICAgICd4ZGlmZl9maWxlX3BhdGNoX2JpbmFyeScgPT4gJ1NhZmVceGRpZmZfZmlsZV9wYXRjaF9iaW5hcnknLAogICAgICAgICAgICAneGRpZmZfZmlsZV9yYWJkaWZmJyA9PiAnU2FmZVx4ZGlmZl9maWxlX3JhYmRpZmYnLAogICAgICAgICAgICAneGRpZmZfc3RyaW5nX2JwYXRjaCcgPT4gJ1NhZmVceGRpZmZfc3RyaW5nX2JwYXRjaCcsCiAgICAgICAgICAgICd4ZGlmZl9zdHJpbmdfcGF0Y2gnID0+ICdTYWZlXHhkaWZmX3N0cmluZ19wYXRjaCcsCiAgICAgICAgICAgICd4ZGlmZl9zdHJpbmdfcGF0Y2hfYmluYXJ5JyA9PiAnU2FmZVx4ZGlmZl9zdHJpbmdfcGF0Y2hfYmluYXJ5JywKICAgICAgICAgICAgJ3htbHJwY19zZXRfdHlwZScgPT4gJ1NhZmVceG1scnBjX3NldF90eXBlJywKICAgICAgICAgICAgJ3htbF9wYXJzZXJfY3JlYXRlJyA9PiAnU2FmZVx4bWxfcGFyc2VyX2NyZWF0ZScsCiAgICAgICAgICAgICd4bWxfcGFyc2VyX2NyZWF0ZV9ucycgPT4gJ1NhZmVceG1sX3BhcnNlcl9jcmVhdGVfbnMnLAogICAgICAgICAgICAneG1sX3NldF9vYmplY3QnID0+ICdTYWZlXHhtbF9zZXRfb2JqZWN0JywKICAgICAgICAgICAgJ3lhbWxfcGFyc2UnID0+ICdTYWZlXHlhbWxfcGFyc2UnLAogICAgICAgICAgICAneWFtbF9wYXJzZV9maWxlJyA9PiAnU2FmZVx5YW1sX3BhcnNlX2ZpbGUnLAogICAgICAgICAgICAneWFtbF9wYXJzZV91cmwnID0+ICdTYWZlXHlhbWxfcGFyc2VfdXJsJywKICAgICAgICAgICAgJ3lhel9jY2xfcGFyc2UnID0+ICdTYWZlXHlhel9jY2xfcGFyc2UnLAogICAgICAgICAgICAneWF6X2Nsb3NlJyA9PiAnU2FmZVx5YXpfY2xvc2UnLAogICAgICAgICAgICAneWF6X2Nvbm5lY3QnID0+ICdTYWZlXHlhel9jb25uZWN0JywKICAgICAgICAgICAgJ3lhel9kYXRhYmFzZScgPT4gJ1NhZmVceWF6X2RhdGFiYXNlJywKICAgICAgICAgICAgJ3lhel9lbGVtZW50JyA9PiAnU2FmZVx5YXpfZWxlbWVudCcsCiAgICAgICAgICAgICd5YXpfcHJlc2VudCcgPT4gJ1NhZmVceWF6X3ByZXNlbnQnLAogICAgICAgICAgICAneWF6X3NlYXJjaCcgPT4gJ1NhZmVceWF6X3NlYXJjaCcsCiAgICAgICAgICAgICd5YXpfd2FpdCcgPT4gJ1NhZmVceWF6X3dhaXQnLAogICAgICAgICAgICAnemlwX2VudHJ5X2Nsb3NlJyA9PiAnU2FmZVx6aXBfZW50cnlfY2xvc2UnLAogICAgICAgICAgICAnemlwX2VudHJ5X29wZW4nID0+ICdTYWZlXHppcF9lbnRyeV9vcGVuJywKICAgICAgICAgICAgJ3ppcF9lbnRyeV9yZWFkJyA9PiAnU2FmZVx6aXBfZW50cnlfcmVhZCcsCiAgICAgICAgICAgICd6bGliX2RlY29kZScgPT4gJ1NhZmVcemxpYl9kZWNvZGUnLApdXV0pOwp9Owo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAid2ViLWF1dGgvY29zZS1saWIiLAogICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImRlc2NyaXB0aW9uIjogIkNCT1IgT2JqZWN0IFNpZ25pbmcgYW5kIEVuY3J5cHRpb24gKENPU0UpIEZvciBQSFAiLAogICAgImtleXdvcmRzIjogWyJDT1NFIiwgIlJGQzgxNTIiXSwKICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLWF1dGgiLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJGbG9yZW50IE1vcnNlbGxpIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3kiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIkFsbCBjb250cmlidXRvcnMiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi1hdXRoL2Nvc2UvY29udHJpYnV0b3JzIgogICAgICAgIH0KICAgIF0sCiAgICAicmVxdWlyZSI6IHsKICAgICAgICAicGhwIjogIj49Ny4yIiwKICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgImV4dC1vcGVuc3NsIjogIioiLAogICAgICAgICJleHQtbWJzdHJpbmciOiAiKiIsCiAgICAgICAgImZncm9zc2UvcGhwYXNuMSI6ICJeMi4xIiwKICAgICAgICAiYmViZXJsZWkvYXNzZXJ0IjogIl4zLjIiCiAgICB9LAogICAgImF1dG9sb2FkIjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIkNvc2VcXCI6ICJzcmMvIgogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[TUlUIExpY2Vuc2UKCkNvcHlyaWdodCAoYykgMjAxOCBTcG9ta3ktTGFicwoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Algorithm.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtOwoKaW50ZXJmYWNlIEFsZ29yaXRobQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlkZW50aWZpZXIoKTogaW50Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Mac/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Mac/Hmac.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXE1hYzsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgQ29zZVxLZXlcS2V5OwoKYWJzdHJhY3QgY2xhc3MgSG1hYyBpbXBsZW1lbnRzIE1hYwp7CiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzaChzdHJpbmcgJGRhdGEsIEtleSAka2V5KTogc3RyaW5nCiAgICB7CiAgICAgICAgJHRoaXMtPmNoZWNLZXkoJGtleSk7CiAgICAgICAgJHNpZ25hdHVyZSA9IGhhc2hfaG1hYygkdGhpcy0+Z2V0SGFzaEFsZ29yaXRobSgpLCAkZGF0YSwgJGtleS0+Z2V0KC0xKSwgdHJ1ZSk7CgogICAgICAgIHJldHVybiBtYl9zdWJzdHIoJHNpZ25hdHVyZSwgMCwgaW50ZGl2KCR0aGlzLT5nZXRTaWduYXR1cmVMZW5ndGgoKSwgOCksICc4Yml0Jyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHZlcmlmeShzdHJpbmcgJGRhdGEsIEtleSAka2V5LCBzdHJpbmcgJHNpZ25hdHVyZSk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gaGFzaF9lcXVhbHMoJHRoaXMtPmhhc2goJGRhdGEsICRrZXkpLCAkc2lnbmF0dXJlKTsKICAgIH0KCiAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0SGFzaEFsZ29yaXRobSgpOiBzdHJpbmc7CgogICAgYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFNpZ25hdHVyZUxlbmd0aCgpOiBpbnQ7CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVjS2V5KEtleSAka2V5KTogdm9pZAogICAgewogICAgICAgIEFzc2VydGlvbjo6ZXEoJGtleS0+dHlwZSgpLCA0LCAnSW52YWxpZCBrZXkuIE11c3QgYmUgb2YgdHlwZSBzeW1tZXRyaWMnKTsKICAgICAgICBBc3NlcnRpb246OnRydWUoJGtleS0+aGFzKC0xKSwgJ0ludmFsaWQga2V5LiBUaGUgdmFsdWUgb2YgdGhlIGtleSBpcyBtaXNzaW5nJyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Mac/HS256.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXE1hYzsKCmZpbmFsIGNsYXNzIEhTMjU2IGV4dGVuZHMgSG1hYwp7CiAgICBwdWJsaWMgY29uc3QgSUQgPSA1OwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaWRlbnRpZmllcigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6SUQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG0oKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICdzaGEyNTYnOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRTaWduYXR1cmVMZW5ndGgoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIDI1NjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Mac/HS256Truncated64.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXE1hYzsKCmZpbmFsIGNsYXNzIEhTMjU2VHJ1bmNhdGVkNjQgZXh0ZW5kcyBIbWFjCnsKICAgIHB1YmxpYyBjb25zdCBJRCA9IDQ7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpZGVudGlmaWVyKCk6IGludAogICAgewogICAgICAgIHJldHVybiBzZWxmOjpJRDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0SGFzaEFsZ29yaXRobSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJ3NoYTI1Nic7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFNpZ25hdHVyZUxlbmd0aCgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gNjQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Mac/HS384.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXE1hYzsKCmZpbmFsIGNsYXNzIEhTMzg0IGV4dGVuZHMgSG1hYwp7CiAgICBwdWJsaWMgY29uc3QgSUQgPSA2OwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaWRlbnRpZmllcigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6SUQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG0oKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICdzaGEzODQnOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRTaWduYXR1cmVMZW5ndGgoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIDM4NDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Mac/HS512.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXE1hYzsKCmZpbmFsIGNsYXNzIEhTNTEyIGV4dGVuZHMgSG1hYwp7CiAgICBwdWJsaWMgY29uc3QgSUQgPSA3OwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaWRlbnRpZmllcigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6SUQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG0oKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICdzaGE1MTInOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRTaWduYXR1cmVMZW5ndGgoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIDUxMjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Mac/Mac.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXE1hYzsKCnVzZSBDb3NlXEFsZ29yaXRobVxBbGdvcml0aG07CnVzZSBDb3NlXEtleVxLZXk7CgppbnRlcmZhY2UgTWFjIGV4dGVuZHMgQWxnb3JpdGhtCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNoKHN0cmluZyAkZGF0YSwgS2V5ICRrZXkpOiBzdHJpbmc7CgogICAgcHVibGljIGZ1bmN0aW9uIHZlcmlmeShzdHJpbmcgJGRhdGEsIEtleSAka2V5LCBzdHJpbmcgJHNpZ25hdHVyZSk6IGJvb2w7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Manager.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtOwoKdXNlIGZ1bmN0aW9uIGFycmF5X2tleV9leGlzdHM7CnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwoKY2xhc3MgTWFuYWdlcgp7CiAgICAvKioKICAgICAqIEB2YXIgQWxnb3JpdGhtW10KICAgICAqLwogICAgcHJpdmF0ZSAkYWxnb3JpdGhtcyA9IFtdOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoQWxnb3JpdGhtICRhbGdvcml0aG0pOiB2b2lkCiAgICB7CiAgICAgICAgJGlkZW50aWZpZXIgPSAkYWxnb3JpdGhtOjppZGVudGlmaWVyKCk7CiAgICAgICAgJHRoaXMtPmFsZ29yaXRobXNbJGlkZW50aWZpZXJdID0gJGFsZ29yaXRobTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbGlzdCgpOiBpdGVyYWJsZQogICAgewogICAgICAgIHlpZWxkIGZyb20gYXJyYXlfa2V5cygkdGhpcy0+YWxnb3JpdGhtcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEFsZ29yaXRobVtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhbGwoKTogaXRlcmFibGUKICAgIHsKICAgICAgICB5aWVsZCBmcm9tICR0aGlzLT5hbGdvcml0aG1zOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYXMoaW50ICRpZGVudGlmaWVyKTogYm9vbAogICAgewogICAgICAgIHJldHVybiBhcnJheV9rZXlfZXhpc3RzKCRpZGVudGlmaWVyLCAkdGhpcy0+YWxnb3JpdGhtcyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldChpbnQgJGlkZW50aWZpZXIpOiBBbGdvcml0aG0KICAgIHsKICAgICAgICBBc3NlcnRpb246OnRydWUoJHRoaXMtPmhhcygkaWRlbnRpZmllciksICdVbnN1cHBvcnRlZCBhbGdvcml0aG0nKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5hbGdvcml0aG1zWyRpZGVudGlmaWVyXTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/ManagerFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CgpjbGFzcyBNYW5hZ2VyRmFjdG9yeQp7CiAgICAvKioKICAgICAqIEB2YXIgQWxnb3JpdGhtW10KICAgICAqLwogICAgcHJpdmF0ZSAkYWxnb3JpdGhtcyA9IFtdOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoc3RyaW5nICRhbGlhcywgQWxnb3JpdGhtICRhbGdvcml0aG0pOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmFsZ29yaXRobXNbJGFsaWFzXSA9ICRhbGdvcml0aG07CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGxpc3QoKTogaXRlcmFibGUKICAgIHsKICAgICAgICB5aWVsZCBmcm9tIGFycmF5X2tleXMoJHRoaXMtPmFsZ29yaXRobXMpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhbGwoKTogaXRlcmFibGUKICAgIHsKICAgICAgICB5aWVsZCBmcm9tIGFycmF5X2tleXMoJHRoaXMtPmFsZ29yaXRobXMpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoYXJyYXkgJGFsaWFzZXMpOiBNYW5hZ2VyCiAgICB7CiAgICAgICAgJG1hbmFnZXIgPSBuZXcgTWFuYWdlcigpOwogICAgICAgIGZvcmVhY2ggKCRhbGlhc2VzIGFzICRhbGlhcykgewogICAgICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkdGhpcy0+YWxnb3JpdGhtcywgJGFsaWFzLCBzcHJpbnRmKCdUaGUgYWxnb3JpdGhtIHdpdGggYWxpYXMgIiVzIiBpcyBub3Qgc3VwcG9ydGVkJywgJGFsaWFzKSk7CiAgICAgICAgICAgICRtYW5hZ2VyLT5hZGQoJHRoaXMtPmFsZ29yaXRobXNbJGFsaWFzXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG1hbmFnZXI7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/ECDSA/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/ECDSA/ECDSA.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxFQ0RTQTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgQ29zZVxBbGdvcml0aG1cU2lnbmF0dXJlXFNpZ25hdHVyZTsKdXNlIENvc2VcS2V5XEVjMktleTsKdXNlIENvc2VcS2V5XEtleTsKCmFic3RyYWN0IGNsYXNzIEVDRFNBIGltcGxlbWVudHMgU2lnbmF0dXJlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBzaWduKHN0cmluZyAkZGF0YSwgS2V5ICRrZXkpOiBzdHJpbmcKICAgIHsKICAgICAgICAka2V5ID0gJHRoaXMtPmhhbmRsZUtleSgka2V5KTsKICAgICAgICBvcGVuc3NsX3NpZ24oJGRhdGEsICRzaWduYXR1cmUsICRrZXktPmFzUEVNKCksICR0aGlzLT5nZXRIYXNoQWxnb3JpdGhtKCkpOwoKICAgICAgICByZXR1cm4gRUNTaWduYXR1cmU6OmZyb21Bc24xKCRzaWduYXR1cmUsICR0aGlzLT5nZXRTaWduYXR1cmVQYXJ0TGVuZ3RoKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB2ZXJpZnkoc3RyaW5nICRkYXRhLCBLZXkgJGtleSwgc3RyaW5nICRzaWduYXR1cmUpOiBib29sCiAgICB7CiAgICAgICAgJGtleSA9ICR0aGlzLT5oYW5kbGVLZXkoJGtleSk7CiAgICAgICAgJHB1YmxpY0tleSA9ICRrZXktPnRvUHVibGljKCk7CiAgICAgICAgJHNpZ25hdHVyZSA9IEVDU2lnbmF0dXJlOjp0b0FzbjEoJHNpZ25hdHVyZSwgJHRoaXMtPmdldFNpZ25hdHVyZVBhcnRMZW5ndGgoKSk7CgogICAgICAgIHJldHVybiAxID09PSBvcGVuc3NsX3ZlcmlmeSgkZGF0YSwgJHNpZ25hdHVyZSwgJHB1YmxpY0tleS0+YXNQRU0oKSwgJHRoaXMtPmdldEhhc2hBbGdvcml0aG0oKSk7CiAgICB9CgogICAgYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEN1cnZlKCk6IGludDsKCiAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0SGFzaEFsZ29yaXRobSgpOiBpbnQ7CgogICAgYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFNpZ25hdHVyZVBhcnRMZW5ndGgoKTogaW50OwoKICAgIHByaXZhdGUgZnVuY3Rpb24gaGFuZGxlS2V5KEtleSAka2V5KTogRWMyS2V5CiAgICB7CiAgICAgICAgJGtleSA9IG5ldyBFYzJLZXkoJGtleS0+Z2V0RGF0YSgpKTsKICAgICAgICBBc3NlcnRpb246OmVxKCRrZXktPmN1cnZlKCksICR0aGlzLT5nZXRDdXJ2ZSgpLCAnVGhpcyBrZXkgY2Fubm90IGJlIHVzZWQgd2l0aCB0aGlzIGFsZ29yaXRobScpOwoKICAgICAgICByZXR1cm4gJGtleTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/ECDSA/ECSignature.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxFQ0RTQTsKCnVzZSBmdW5jdGlvbiBiaW4yaGV4Owp1c2UgZnVuY3Rpb24gZGVjaGV4Owp1c2UgZnVuY3Rpb24gaGV4ZGVjOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgZnVuY3Rpb24gbWJfc3RybGVuOwp1c2UgZnVuY3Rpb24gbWJfc3Vic3RyOwp1c2UgZnVuY3Rpb24gc3RyX3BhZDsKdXNlIGNvbnN0IFNUUl9QQURfTEVGVDsKCi8qKgogKiBAaW50ZXJuYWwKICovCmZpbmFsIGNsYXNzIEVDU2lnbmF0dXJlCnsKICAgIHByaXZhdGUgY29uc3QgQVNOMV9TRVFVRU5DRSA9ICczMCc7CiAgICBwcml2YXRlIGNvbnN0IEFTTjFfSU5URUdFUiA9ICcwMic7CiAgICBwcml2YXRlIGNvbnN0IEFTTjFfTUFYX1NJTkdMRV9CWVRFID0gMTI4OwogICAgcHJpdmF0ZSBjb25zdCBBU04xX0xFTkdUSF8yQllURVMgPSAnODEnOwogICAgcHJpdmF0ZSBjb25zdCBBU04xX0JJR19JTlRFR0VSX0xJTUlUID0gJzdmJzsKICAgIHByaXZhdGUgY29uc3QgQVNOMV9ORUdBVElWRV9JTlRFR0VSID0gJzAwJzsKICAgIHByaXZhdGUgY29uc3QgQllURV9TSVpFID0gMjsKCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRvQXNuMShzdHJpbmcgJHNpZ25hdHVyZSwgaW50ICRsZW5ndGgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkc2lnbmF0dXJlID0gYmluMmhleCgkc2lnbmF0dXJlKTsKCiAgICAgICAgaWYgKHNlbGY6Om9jdGV0TGVuZ3RoKCRzaWduYXR1cmUpICE9PSAkbGVuZ3RoKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgc2lnbmF0dXJlIGxlbmd0aC4nKTsKICAgICAgICB9CgogICAgICAgICRwb2ludFIgPSBzZWxmOjpwcmVwYXJlUG9zaXRpdmVJbnRlZ2VyKG1iX3N1YnN0cigkc2lnbmF0dXJlLCAwLCAkbGVuZ3RoLCAnOGJpdCcpKTsKICAgICAgICAkcG9pbnRTID0gc2VsZjo6cHJlcGFyZVBvc2l0aXZlSW50ZWdlcihtYl9zdWJzdHIoJHNpZ25hdHVyZSwgJGxlbmd0aCwgbnVsbCwgJzhiaXQnKSk7CgogICAgICAgICRsZW5ndGhSID0gc2VsZjo6b2N0ZXRMZW5ndGgoJHBvaW50Uik7CiAgICAgICAgJGxlbmd0aFMgPSBzZWxmOjpvY3RldExlbmd0aCgkcG9pbnRTKTsKCiAgICAgICAgJHRvdGFsTGVuZ3RoID0gJGxlbmd0aFIgKyAkbGVuZ3RoUyArIHNlbGY6OkJZVEVfU0laRSArIHNlbGY6OkJZVEVfU0laRTsKICAgICAgICAkbGVuZ3RoUHJlZml4ID0gJHRvdGFsTGVuZ3RoID4gc2VsZjo6QVNOMV9NQVhfU0lOR0xFX0JZVEUgPyBzZWxmOjpBU04xX0xFTkdUSF8yQllURVMgOiAnJzsKCiAgICAgICAgJGJpbiA9IGhleDJiaW4oCiAgICAgICAgICAgIHNlbGY6OkFTTjFfU0VRVUVOQ0UKICAgICAgICAgICAgLiRsZW5ndGhQcmVmaXguZGVjaGV4KCR0b3RhbExlbmd0aCkKICAgICAgICAgICAgLnNlbGY6OkFTTjFfSU5URUdFUi5kZWNoZXgoJGxlbmd0aFIpLiRwb2ludFIKICAgICAgICAgICAgLnNlbGY6OkFTTjFfSU5URUdFUi5kZWNoZXgoJGxlbmd0aFMpLiRwb2ludFMKICAgICAgICApOwogICAgICAgIGlmIChmYWxzZSA9PT0gJGJpbikgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdVbmFibGUgdG8gY29udmVydCBpbnRvIEFTTi4xJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGJpbjsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21Bc24xKHN0cmluZyAkc2lnbmF0dXJlLCBpbnQgJGxlbmd0aCk6IHN0cmluZwogICAgewogICAgICAgICRtZXNzYWdlID0gYmluMmhleCgkc2lnbmF0dXJlKTsKICAgICAgICAkcG9zaXRpb24gPSAwOwoKICAgICAgICBpZiAoc2VsZjo6QVNOMV9TRVFVRU5DRSAhPT0gc2VsZjo6cmVhZEFzbjFDb250ZW50KCRtZXNzYWdlLCAkcG9zaXRpb24sIHNlbGY6OkJZVEVfU0laRSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBkYXRhLiBTaG91bGQgc3RhcnQgd2l0aCBhIHNlcXVlbmNlLicpOwogICAgICAgIH0KCiAgICAgICAgLy8gQHBocHN0YW4taWdub3JlLW5leHQtbGluZQogICAgICAgIGlmIChzZWxmOjpBU04xX0xFTkdUSF8yQllURVMgPT09IHNlbGY6OnJlYWRBc24xQ29udGVudCgkbWVzc2FnZSwgJHBvc2l0aW9uLCBzZWxmOjpCWVRFX1NJWkUpKSB7CiAgICAgICAgICAgICRwb3NpdGlvbiArPSBzZWxmOjpCWVRFX1NJWkU7CiAgICAgICAgfQoKICAgICAgICAkcG9pbnRSID0gc2VsZjo6cmV0cmlldmVQb3NpdGl2ZUludGVnZXIoc2VsZjo6cmVhZEFzbjFJbnRlZ2VyKCRtZXNzYWdlLCAkcG9zaXRpb24pKTsKICAgICAgICAkcG9pbnRTID0gc2VsZjo6cmV0cmlldmVQb3NpdGl2ZUludGVnZXIoc2VsZjo6cmVhZEFzbjFJbnRlZ2VyKCRtZXNzYWdlLCAkcG9zaXRpb24pKTsKCiAgICAgICAgJGJpbiA9IGhleDJiaW4oc3RyX3BhZCgkcG9pbnRSLCAkbGVuZ3RoLCAnMCcsIFNUUl9QQURfTEVGVCkuc3RyX3BhZCgkcG9pbnRTLCAkbGVuZ3RoLCAnMCcsIFNUUl9QQURfTEVGVCkpOwogICAgICAgIGlmIChmYWxzZSA9PT0gJGJpbikgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdVbmFibGUgdG8gY29udmVydCBmcm9tIEFTTi4xJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGJpbjsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBvY3RldExlbmd0aChzdHJpbmcgJGRhdGEpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gaW50ZGl2KG1iX3N0cmxlbigkZGF0YSwgJzhiaXQnKSwgc2VsZjo6QllURV9TSVpFKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBwcmVwYXJlUG9zaXRpdmVJbnRlZ2VyKHN0cmluZyAkZGF0YSk6IHN0cmluZwogICAgewogICAgICAgIGlmIChtYl9zdWJzdHIoJGRhdGEsIDAsIHNlbGY6OkJZVEVfU0laRSwgJzhiaXQnKSA+IHNlbGY6OkFTTjFfQklHX0lOVEVHRVJfTElNSVQpIHsKICAgICAgICAgICAgcmV0dXJuIHNlbGY6OkFTTjFfTkVHQVRJVkVfSU5URUdFUi4kZGF0YTsKICAgICAgICB9CgogICAgICAgIHdoaWxlICgKICAgICAgICAgICAgc2VsZjo6QVNOMV9ORUdBVElWRV9JTlRFR0VSID09PSBtYl9zdWJzdHIoJGRhdGEsIDAsIHNlbGY6OkJZVEVfU0laRSwgJzhiaXQnKQogICAgICAgICAgICAmJiBtYl9zdWJzdHIoJGRhdGEsIDIsIHNlbGY6OkJZVEVfU0laRSwgJzhiaXQnKSA8PSBzZWxmOjpBU04xX0JJR19JTlRFR0VSX0xJTUlUCiAgICAgICAgKSB7CiAgICAgICAgICAgICRkYXRhID0gbWJfc3Vic3RyKCRkYXRhLCAyLCBudWxsLCAnOGJpdCcpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRkYXRhOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHJlYWRBc24xQ29udGVudChzdHJpbmcgJG1lc3NhZ2UsIGludCAmJHBvc2l0aW9uLCBpbnQgJGxlbmd0aCk6IHN0cmluZwogICAgewogICAgICAgICRjb250ZW50ID0gbWJfc3Vic3RyKCRtZXNzYWdlLCAkcG9zaXRpb24sICRsZW5ndGgsICc4Yml0Jyk7CiAgICAgICAgJHBvc2l0aW9uICs9ICRsZW5ndGg7CgogICAgICAgIHJldHVybiAkY29udGVudDsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiByZWFkQXNuMUludGVnZXIoc3RyaW5nICRtZXNzYWdlLCBpbnQgJiRwb3NpdGlvbik6IHN0cmluZwogICAgewogICAgICAgIGlmIChzZWxmOjpBU04xX0lOVEVHRVIgIT09IHNlbGY6OnJlYWRBc24xQ29udGVudCgkbWVzc2FnZSwgJHBvc2l0aW9uLCBzZWxmOjpCWVRFX1NJWkUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgZGF0YS4gU2hvdWxkIGNvbnRhaW4gYW4gaW50ZWdlci4nKTsKICAgICAgICB9CgogICAgICAgICRsZW5ndGggPSAoaW50KSBoZXhkZWMoc2VsZjo6cmVhZEFzbjFDb250ZW50KCRtZXNzYWdlLCAkcG9zaXRpb24sIHNlbGY6OkJZVEVfU0laRSkpOwoKICAgICAgICByZXR1cm4gc2VsZjo6cmVhZEFzbjFDb250ZW50KCRtZXNzYWdlLCAkcG9zaXRpb24sICRsZW5ndGggKiBzZWxmOjpCWVRFX1NJWkUpOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHJldHJpZXZlUG9zaXRpdmVJbnRlZ2VyKHN0cmluZyAkZGF0YSk6IHN0cmluZwogICAgewogICAgICAgIHdoaWxlICgKICAgICAgICAgICAgc2VsZjo6QVNOMV9ORUdBVElWRV9JTlRFR0VSID09PSBtYl9zdWJzdHIoJGRhdGEsIDAsIHNlbGY6OkJZVEVfU0laRSwgJzhiaXQnKQogICAgICAgICAgICAmJiBtYl9zdWJzdHIoJGRhdGEsIDIsIHNlbGY6OkJZVEVfU0laRSwgJzhiaXQnKSA+IHNlbGY6OkFTTjFfQklHX0lOVEVHRVJfTElNSVQKICAgICAgICApIHsKICAgICAgICAgICAgJGRhdGEgPSBtYl9zdWJzdHIoJGRhdGEsIDIsIG51bGwsICc4Yml0Jyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGRhdGE7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/ECDSA/ES256.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxFQ0RTQTsKCnVzZSBDb3NlXEtleVxFYzJLZXk7CgpmaW5hbCBjbGFzcyBFUzI1NiBleHRlbmRzIEVDRFNBCnsKICAgIHB1YmxpYyBjb25zdCBJRCA9IC03OwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaWRlbnRpZmllcigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6SUQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG0oKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIE9QRU5TU0xfQUxHT19TSEEyNTY7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEN1cnZlKCk6IGludAogICAgewogICAgICAgIHJldHVybiBFYzJLZXk6OkNVUlZFX1AyNTY7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFNpZ25hdHVyZVBhcnRMZW5ndGgoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIDY0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/ECDSA/ES256K.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxFQ0RTQTsKCnVzZSBDb3NlXEtleVxFYzJLZXk7CgpmaW5hbCBjbGFzcyBFUzI1NksgZXh0ZW5kcyBFQ0RTQQp7CiAgICBwdWJsaWMgY29uc3QgSUQgPSAtNDY7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpZGVudGlmaWVyKCk6IGludAogICAgewogICAgICAgIHJldHVybiBzZWxmOjpJRDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0SGFzaEFsZ29yaXRobSgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gT1BFTlNTTF9BTEdPX1NIQTI1NjsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0Q3VydmUoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIEVjMktleTo6Q1VSVkVfUDI1Nks7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFNpZ25hdHVyZVBhcnRMZW5ndGgoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIDY0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/ECDSA/ES384.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxFQ0RTQTsKCnVzZSBDb3NlXEtleVxFYzJLZXk7CgpmaW5hbCBjbGFzcyBFUzM4NCBleHRlbmRzIEVDRFNBCnsKICAgIHB1YmxpYyBjb25zdCBJRCA9IC0zNTsKCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlkZW50aWZpZXIoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OklEOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRIYXNoQWxnb3JpdGhtKCk6IGludAogICAgewogICAgICAgIHJldHVybiBPUEVOU1NMX0FMR09fU0hBMzg0OwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRDdXJ2ZSgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gRWMyS2V5OjpDVVJWRV9QMzg0OwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRTaWduYXR1cmVQYXJ0TGVuZ3RoKCk6IGludAogICAgewogICAgICAgIHJldHVybiA5NjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/ECDSA/ES512.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxFQ0RTQTsKCnVzZSBDb3NlXEtleVxFYzJLZXk7CgpmaW5hbCBjbGFzcyBFUzUxMiBleHRlbmRzIEVDRFNBCnsKICAgIHB1YmxpYyBjb25zdCBJRCA9IC0zNjsKCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlkZW50aWZpZXIoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OklEOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRIYXNoQWxnb3JpdGhtKCk6IGludAogICAgewogICAgICAgIHJldHVybiBPUEVOU1NMX0FMR09fU0hBNTEyOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRDdXJ2ZSgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gRWMyS2V5OjpDVVJWRV9QNTIxOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRTaWduYXR1cmVQYXJ0TGVuZ3RoKCk6IGludAogICAgewogICAgICAgIHJldHVybiAxMzI7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/EdDSA/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/EdDSA/ED256.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxFZERTQTsKCnVzZSBDb3NlXEtleVxLZXk7CgpmaW5hbCBjbGFzcyBFRDI1NiBleHRlbmRzIEVkRFNBCnsKICAgIHB1YmxpYyBjb25zdCBJRCA9IC0yNjA7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpZGVudGlmaWVyKCk6IGludAogICAgewogICAgICAgIHJldHVybiBzZWxmOjpJRDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2lnbihzdHJpbmcgJGRhdGEsIEtleSAka2V5KTogc3RyaW5nCiAgICB7CiAgICAgICAgJGhhc2hlZERhdGEgPSBoYXNoKCdzaGEyNTYnLCAkZGF0YSwgdHJ1ZSk7CgogICAgICAgIHJldHVybiBwYXJlbnQ6OnNpZ24oJGhhc2hlZERhdGEsICRrZXkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB2ZXJpZnkoc3RyaW5nICRkYXRhLCBLZXkgJGtleSwgc3RyaW5nICRzaWduYXR1cmUpOiBib29sCiAgICB7CiAgICAgICAgJGhhc2hlZERhdGEgPSBoYXNoKCdzaGEyNTYnLCAkZGF0YSwgdHJ1ZSk7CgogICAgICAgIHJldHVybiBwYXJlbnQ6OnZlcmlmeSgkaGFzaGVkRGF0YSwgJGtleSwgJHNpZ25hdHVyZSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/EdDSA/ED512.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxFZERTQTsKCnVzZSBDb3NlXEtleVxLZXk7CgpmaW5hbCBjbGFzcyBFRDUxMiBleHRlbmRzIEVkRFNBCnsKICAgIHB1YmxpYyBjb25zdCBJRCA9IC0yNjE7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpZGVudGlmaWVyKCk6IGludAogICAgewogICAgICAgIHJldHVybiBzZWxmOjpJRDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2lnbihzdHJpbmcgJGRhdGEsIEtleSAka2V5KTogc3RyaW5nCiAgICB7CiAgICAgICAgJGhhc2hlZERhdGEgPSBoYXNoKCdzaGE1MTInLCAkZGF0YSwgdHJ1ZSk7CgogICAgICAgIHJldHVybiBwYXJlbnQ6OnNpZ24oJGhhc2hlZERhdGEsICRrZXkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB2ZXJpZnkoc3RyaW5nICRkYXRhLCBLZXkgJGtleSwgc3RyaW5nICRzaWduYXR1cmUpOiBib29sCiAgICB7CiAgICAgICAgJGhhc2hlZERhdGEgPSBoYXNoKCdzaGE1MTInLCAkZGF0YSwgdHJ1ZSk7CgogICAgICAgIHJldHVybiBwYXJlbnQ6OnZlcmlmeSgkaGFzaGVkRGF0YSwgJGtleSwgJHNpZ25hdHVyZSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/EdDSA/Ed25519.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxFZERTQTsKCmZpbmFsIGNsYXNzIEVkMjU1MTkgZXh0ZW5kcyBFZERTQQp7CiAgICBwdWJsaWMgY29uc3QgSUQgPSAtODsKCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlkZW50aWZpZXIoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OklEOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/EdDSA/EdDSA.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxFZERTQTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgQ29zZVxBbGdvcml0aG1cU2lnbmF0dXJlXFNpZ25hdHVyZTsKdXNlIENvc2VcQWxnb3JpdGhtczsKdXNlIENvc2VcS2V5XEtleTsKdXNlIENvc2VcS2V5XE9rcEtleTsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIGZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fc2lnbl9kZXRhY2hlZDsKdXNlIGZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fc2lnbl92ZXJpZnlfZGV0YWNoZWQ7CgpjbGFzcyBFZERTQSBpbXBsZW1lbnRzIFNpZ25hdHVyZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gc2lnbihzdHJpbmcgJGRhdGEsIEtleSAka2V5KTogc3RyaW5nCiAgICB7CiAgICAgICAgJGtleSA9ICR0aGlzLT5oYW5kbGVLZXkoJGtleSk7CiAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCRrZXktPmlzUHJpdmF0ZSgpLCAnVGhlIGtleSBpcyBub3QgcHJpdmF0ZScpOwoKICAgICAgICAkeCA9ICRrZXktPngoKTsKICAgICAgICAkZCA9ICRrZXktPmQoKTsKICAgICAgICAkc2VjcmV0ID0gJGQuJHg7CgogICAgICAgIHN3aXRjaCAoJGtleS0+Y3VydmUoKSkgewogICAgICAgICAgICBjYXNlIE9rcEtleTo6Q1VSVkVfRUQyNTUxOToKICAgICAgICAgICAgICAgIHJldHVybiBzb2RpdW1fY3J5cHRvX3NpZ25fZGV0YWNoZWQoJGRhdGEsICRzZWNyZXQpOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5zdXBwb3J0ZWQgY3VydmUnKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHZlcmlmeShzdHJpbmcgJGRhdGEsIEtleSAka2V5LCBzdHJpbmcgJHNpZ25hdHVyZSk6IGJvb2wKICAgIHsKICAgICAgICAka2V5ID0gJHRoaXMtPmhhbmRsZUtleSgka2V5KTsKCiAgICAgICAgc3dpdGNoICgka2V5LT5jdXJ2ZSgpKSB7CiAgICAgICAgICAgIGNhc2UgT2twS2V5OjpDVVJWRV9FRDI1NTE5OgogICAgICAgICAgICAgICAgcmV0dXJuIHNvZGl1bV9jcnlwdG9fc2lnbl92ZXJpZnlfZGV0YWNoZWQoJHNpZ25hdHVyZSwgJGRhdGEsICRrZXktPngoKSk7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdVbnN1cHBvcnRlZCBjdXJ2ZScpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlkZW50aWZpZXIoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIEFsZ29yaXRobXM6OkNPU0VfQUxHT1JJVEhNX0VkRFNBOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gaGFuZGxlS2V5KEtleSAka2V5KTogT2twS2V5CiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBPa3BLZXkoJGtleS0+Z2V0RGF0YSgpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/RSA/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/RSA/PS256.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxSU0E7Cgp1c2UgQ29zZVxIYXNoOwoKZmluYWwgY2xhc3MgUFMyNTYgZXh0ZW5kcyBQU1NSU0EKewogICAgcHVibGljIGNvbnN0IElEID0gLTM3OwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaWRlbnRpZmllcigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6SUQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG0oKTogSGFzaAogICAgewogICAgICAgIHJldHVybiBIYXNoOjpzaGEyNTYoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/RSA/PS384.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxSU0E7Cgp1c2UgQ29zZVxIYXNoOwoKZmluYWwgY2xhc3MgUFMzODQgZXh0ZW5kcyBQU1NSU0EKewogICAgcHVibGljIGNvbnN0IElEID0gLTM4OwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaWRlbnRpZmllcigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6SUQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG0oKTogSGFzaAogICAgewogICAgICAgIHJldHVybiBIYXNoOjpzaGEzODQoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/RSA/PS512.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxSU0E7Cgp1c2UgQ29zZVxIYXNoOwoKZmluYWwgY2xhc3MgUFM1MTIgZXh0ZW5kcyBQU1NSU0EKewogICAgcHVibGljIGNvbnN0IElEID0gLTM5OwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaWRlbnRpZmllcigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6SUQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG0oKTogSGFzaAogICAgewogICAgICAgIHJldHVybiBIYXNoOjpzaGE1MTIoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/RSA/PSSRSA.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxSU0E7Cgp1c2UgZnVuY3Rpb24gY2VpbDsKdXNlIGZ1bmN0aW9uIGNocjsKdXNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxTaWduYXR1cmU7CnVzZSBDb3NlXEJpZ0ludGVnZXI7CnVzZSBDb3NlXEhhc2g7CnVzZSBDb3NlXEtleVxLZXk7CnVzZSBDb3NlXEtleVxSc2FLZXk7CnVzZSBmdW5jdGlvbiBoYXNoX2VxdWFsczsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIGZ1bmN0aW9uIG1iX3N0cmxlbjsKdXNlIGZ1bmN0aW9uIG1iX3N1YnN0cjsKdXNlIGZ1bmN0aW9uIG9yZDsKdXNlIGZ1bmN0aW9uIHJhbmRvbV9ieXRlczsKdXNlIFJ1bnRpbWVFeGNlcHRpb247CnVzZSBmdW5jdGlvbiBzdHJfcGFkOwp1c2UgZnVuY3Rpb24gc3RyX3JlcGVhdDsKCi8qKgogKiBAaW50ZXJuYWwKICovCmFic3RyYWN0IGNsYXNzIFBTU1JTQSBpbXBsZW1lbnRzIFNpZ25hdHVyZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gc2lnbihzdHJpbmcgJGRhdGEsIEtleSAka2V5KTogc3RyaW5nCiAgICB7CiAgICAgICAgJGtleSA9ICR0aGlzLT5oYW5kbGVLZXkoJGtleSk7CiAgICAgICAgJG1vZHVsdXNMZW5ndGggPSBtYl9zdHJsZW4oJGtleS0+bigpLCAnOGJpdCcpOwoKICAgICAgICAkZW0gPSAkdGhpcy0+ZW5jb2RlRU1TQVBTUygkZGF0YSwgOCAqICRtb2R1bHVzTGVuZ3RoIC0gMSwgJHRoaXMtPmdldEhhc2hBbGdvcml0aG0oKSk7CiAgICAgICAgJG1lc3NhZ2UgPSBCaWdJbnRlZ2VyOjpjcmVhdGVGcm9tQmluYXJ5U3RyaW5nKCRlbSk7CiAgICAgICAgJHNpZ25hdHVyZSA9ICR0aGlzLT5leHBvbmVudGlhdGUoJGtleSwgJG1lc3NhZ2UpOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmNvbnZlcnRJbnRlZ2VyVG9PY3RldFN0cmluZygkc2lnbmF0dXJlLCAkbW9kdWx1c0xlbmd0aCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHZlcmlmeShzdHJpbmcgJGRhdGEsIEtleSAka2V5LCBzdHJpbmcgJHNpZ25hdHVyZSk6IGJvb2wKICAgIHsKICAgICAgICAka2V5ID0gJHRoaXMtPmhhbmRsZUtleSgka2V5KTsKICAgICAgICAkbW9kdWx1c0xlbmd0aCA9IG1iX3N0cmxlbigka2V5LT5uKCksICc4Yml0Jyk7CgogICAgICAgIGlmIChtYl9zdHJsZW4oJHNpZ25hdHVyZSwgJzhiaXQnKSAhPT0gJG1vZHVsdXNMZW5ndGgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBtb2R1bHVzIGxlbmd0aCcpOwogICAgICAgIH0KICAgICAgICAkczIgPSBCaWdJbnRlZ2VyOjpjcmVhdGVGcm9tQmluYXJ5U3RyaW5nKCRzaWduYXR1cmUpOwogICAgICAgICRtMiA9ICR0aGlzLT5leHBvbmVudGlhdGUoJGtleSwgJHMyKTsKICAgICAgICAkZW0gPSAkdGhpcy0+Y29udmVydEludGVnZXJUb09jdGV0U3RyaW5nKCRtMiwgJG1vZHVsdXNMZW5ndGgpOwogICAgICAgICRtb2RCaXRzID0gOCAqICRtb2R1bHVzTGVuZ3RoOwoKICAgICAgICByZXR1cm4gJHRoaXMtPnZlcmlmeUVNU0FQU1MoJGRhdGEsICRlbSwgJG1vZEJpdHMgLSAxLCAkdGhpcy0+Z2V0SGFzaEFsZ29yaXRobSgpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEV4cG9uZW50aWF0ZSB3aXRoIG9yIHdpdGhvdXQgQ2hpbmVzZSBSZW1haW5kZXIgVGhlb3JlbS4KICAgICAqIE9wZXJhdGlvbiB3aXRoIHByaW1lcyAncCcgYW5kICdxJyBpcyBhcHBveC4gMnggZmFzdGVyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhwb25lbnRpYXRlKFJzYUtleSAka2V5LCBCaWdJbnRlZ2VyICRjKTogQmlnSW50ZWdlcgogICAgewogICAgICAgIGlmICgkYy0+Y29tcGFyZShCaWdJbnRlZ2VyOjpjcmVhdGVGcm9tRGVjaW1hbCgwKSkgPCAwIHx8ICRjLT5jb21wYXJlKEJpZ0ludGVnZXI6OmNyZWF0ZUZyb21CaW5hcnlTdHJpbmcoJGtleS0+bigpKSkgPiAwKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCk7CiAgICAgICAgfQogICAgICAgIGlmICgka2V5LT5pc1B1YmxpYygpIHx8ICEka2V5LT5oYXNQcmltZXMoKSB8fCAhJGtleS0+aGFzRXhwb25lbnRzKCkgfHwgISRrZXktPmhhc0NvZWZmaWNpZW50KCkpIHsKICAgICAgICAgICAgcmV0dXJuICRjLT5tb2RQb3coQmlnSW50ZWdlcjo6Y3JlYXRlRnJvbUJpbmFyeVN0cmluZygka2V5LT5lKCkpLCBCaWdJbnRlZ2VyOjpjcmVhdGVGcm9tQmluYXJ5U3RyaW5nKCRrZXktPm4oKSkpOwogICAgICAgIH0KCiAgICAgICAgWyRwLCAkcV0gPSAka2V5LT5wcmltZXMoKTsKICAgICAgICBbJGRQLCAkZFFdID0gJGtleS0+ZXhwb25lbnRzKCk7CiAgICAgICAgJHFJbnYgPSBCaWdJbnRlZ2VyOjpjcmVhdGVGcm9tQmluYXJ5U3RyaW5nKCRrZXktPlFJbnYoKSk7CgogICAgICAgICRtMSA9ICRjLT5tb2RQb3coJGRQLCAkcCk7CiAgICAgICAgJG0yID0gJGMtPm1vZFBvdygkZFEsICRxKTsKICAgICAgICAkaCA9ICRxSW52LT5tdWx0aXBseSgkbTEtPnN1YnRyYWN0KCRtMiktPmFkZCgkcCkpLT5tb2QoJHApOwoKICAgICAgICByZXR1cm4gJG0yLT5hZGQoJGgtPm11bHRpcGx5KCRxKSk7CiAgICB9CgogICAgYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG0oKTogSGFzaDsKCiAgICBwcml2YXRlIGZ1bmN0aW9uIGhhbmRsZUtleShLZXkgJGtleSk6IFJzYUtleQogICAgewogICAgICAgIHJldHVybiBuZXcgUnNhS2V5KCRrZXktPmdldERhdGEoKSk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjb252ZXJ0SW50ZWdlclRvT2N0ZXRTdHJpbmcoQmlnSW50ZWdlciAkeCwgaW50ICR4TGVuKTogc3RyaW5nCiAgICB7CiAgICAgICAgJHggPSAkeC0+dG9CeXRlcygpOwogICAgICAgIGlmIChtYl9zdHJsZW4oJHgsICc4Yml0JykgPiAkeExlbikgewogICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbignVW5hYmxlIHRvIGNvbnZlcnQgdGhlIGludGVnZXInKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBzdHJfcGFkKCR4LCAkeExlbiwgY2hyKDApLCBTVFJfUEFEX0xFRlQpOwogICAgfQoKICAgIC8qKgogICAgICogTUdGMS4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRNR0YxKHN0cmluZyAkbWdmU2VlZCwgaW50ICRtYXNrTGVuLCBIYXNoICRtZ2ZIYXNoKTogc3RyaW5nCiAgICB7CiAgICAgICAgJHQgPSAnJzsKICAgICAgICAkY291bnQgPSBjZWlsKCRtYXNrTGVuIC8gJG1nZkhhc2gtPmdldExlbmd0aCgpKTsKICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkY291bnQ7ICsrJGkpIHsKICAgICAgICAgICAgJGMgPSBwYWNrKCdOJywgJGkpOwogICAgICAgICAgICAkdCAuPSAkbWdmSGFzaC0+aGFzaCgkbWdmU2VlZC4kYyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbWJfc3Vic3RyKCR0LCAwLCAkbWFza0xlbiwgJzhiaXQnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEVNU0EtUFNTLUVOQ09ERS4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBlbmNvZGVFTVNBUFNTKHN0cmluZyAkbWVzc2FnZSwgaW50ICRtb2R1bHVzTGVuZ3RoLCBIYXNoICRoYXNoKTogc3RyaW5nCiAgICB7CiAgICAgICAgJGVtTGVuID0gKCRtb2R1bHVzTGVuZ3RoICsgMSkgPj4gMzsKICAgICAgICAkc0xlbiA9ICRoYXNoLT5nZXRMZW5ndGgoKTsKICAgICAgICAkbUhhc2ggPSAkaGFzaC0+aGFzaCgkbWVzc2FnZSk7CiAgICAgICAgaWYgKCRlbUxlbiA8PSAkaGFzaC0+Z2V0TGVuZ3RoKCkgKyAkc0xlbiArIDIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oKTsKICAgICAgICB9CiAgICAgICAgJHNhbHQgPSByYW5kb21fYnl0ZXMoJHNMZW4pOwogICAgICAgICRtMiA9ICJcMFwwXDBcMFwwXDBcMFwwIi4kbUhhc2guJHNhbHQ7CiAgICAgICAgJGggPSAkaGFzaC0+aGFzaCgkbTIpOwogICAgICAgICRwcyA9IHN0cl9yZXBlYXQoY2hyKDApLCAkZW1MZW4gLSAkc0xlbiAtICRoYXNoLT5nZXRMZW5ndGgoKSAtIDIpOwogICAgICAgICRkYiA9ICRwcy5jaHIoMSkuJHNhbHQ7CiAgICAgICAgJGRiTWFzayA9ICR0aGlzLT5nZXRNR0YxKCRoLCAkZW1MZW4gLSAkaGFzaC0+Z2V0TGVuZ3RoKCkgLSAxLCAkaGFzaCk7CiAgICAgICAgJG1hc2tlZERCID0gJGRiIF4gJGRiTWFzazsKICAgICAgICAkbWFza2VkREJbMF0gPSB+Y2hyKDB4RkYgPDwgKCRtb2R1bHVzTGVuZ3RoICYgNykpICYgJG1hc2tlZERCWzBdOwoKICAgICAgICByZXR1cm4gJG1hc2tlZERCLiRoLmNocigweEJDKTsKICAgIH0KCiAgICAvKioKICAgICAqIEVNU0EtUFNTLVZFUklGWS4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiB2ZXJpZnlFTVNBUFNTKHN0cmluZyAkbSwgc3RyaW5nICRlbSwgaW50ICRlbUJpdHMsIEhhc2ggJGhhc2gpOiBib29sCiAgICB7CiAgICAgICAgJGVtTGVuID0gKCRlbUJpdHMgKyAxKSA+PiAzOwogICAgICAgICRzTGVuID0gJGhhc2gtPmdldExlbmd0aCgpOwogICAgICAgICRtSGFzaCA9ICRoYXNoLT5oYXNoKCRtKTsKICAgICAgICBpZiAoJGVtTGVuIDwgJGhhc2gtPmdldExlbmd0aCgpICsgJHNMZW4gKyAyKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oKTsKICAgICAgICB9CiAgICAgICAgaWYgKCRlbVttYl9zdHJsZW4oJGVtLCAnOGJpdCcpIC0gMV0gIT09IGNocigweEJDKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCk7CiAgICAgICAgfQogICAgICAgICRtYXNrZWREQiA9IG1iX3N1YnN0cigkZW0sIDAsIC0kaGFzaC0+Z2V0TGVuZ3RoKCkgLSAxLCAnOGJpdCcpOwogICAgICAgICRoID0gbWJfc3Vic3RyKCRlbSwgLSRoYXNoLT5nZXRMZW5ndGgoKSAtIDEsICRoYXNoLT5nZXRMZW5ndGgoKSwgJzhiaXQnKTsKICAgICAgICAkdGVtcCA9IGNocigweEZGIDw8ICgkZW1CaXRzICYgNykpOwogICAgICAgIGlmICgofiRtYXNrZWREQlswXSAmICR0ZW1wKSAhPT0gJHRlbXApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigpOwogICAgICAgIH0KICAgICAgICAkZGJNYXNrID0gJHRoaXMtPmdldE1HRjEoJGgsICRlbUxlbiAtICRoYXNoLT5nZXRMZW5ndGgoKSAtIDEsICRoYXNoLypNR0YqLyk7CiAgICAgICAgJGRiID0gJG1hc2tlZERCIF4gJGRiTWFzazsKICAgICAgICAkZGJbMF0gPSB+Y2hyKDB4RkYgPDwgKCRlbUJpdHMgJiA3KSkgJiAkZGJbMF07CiAgICAgICAgJHRlbXAgPSAkZW1MZW4gLSAkaGFzaC0+Z2V0TGVuZ3RoKCkgLSAkc0xlbiAtIDI7CiAgICAgICAgaWYgKG1iX3N1YnN0cigkZGIsIDAsICR0ZW1wLCAnOGJpdCcpICE9PSBzdHJfcmVwZWF0KGNocigwKSwgJHRlbXApKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oKTsKICAgICAgICB9CiAgICAgICAgaWYgKDEgIT09IG9yZCgkZGJbJHRlbXBdKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCk7CiAgICAgICAgfQogICAgICAgICRzYWx0ID0gbWJfc3Vic3RyKCRkYiwgJHRlbXAgKyAxLCBudWxsLCAnOGJpdCcpOyAvLyBzaG91bGQgYmUgJHNMZW4gbG9uZwogICAgICAgICRtMiA9ICJcMFwwXDBcMFwwXDBcMFwwIi4kbUhhc2guJHNhbHQ7CiAgICAgICAgJGgyID0gJGhhc2gtPmhhc2goJG0yKTsKCiAgICAgICAgcmV0dXJuIGhhc2hfZXF1YWxzKCRoLCAkaDIpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/RSA/RS1.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxSU0E7CgpmaW5hbCBjbGFzcyBSUzEgZXh0ZW5kcyBSU0EKewogICAgcHVibGljIGNvbnN0IElEID0gLTY1NTM1OwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaWRlbnRpZmllcigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6SUQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG0oKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIE9QRU5TU0xfQUxHT19TSEExOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/RSA/RS256.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxSU0E7CgpmaW5hbCBjbGFzcyBSUzI1NiBleHRlbmRzIFJTQQp7CiAgICBwdWJsaWMgY29uc3QgSUQgPSAtMjU3OwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaWRlbnRpZmllcigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6SUQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG0oKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIE9QRU5TU0xfQUxHT19TSEEyNTY7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/RSA/RS384.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxSU0E7CgpmaW5hbCBjbGFzcyBSUzM4NCBleHRlbmRzIFJTQQp7CiAgICBwdWJsaWMgY29uc3QgSUQgPSAtMjU4OwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaWRlbnRpZmllcigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6SUQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG0oKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIE9QRU5TU0xfQUxHT19TSEEzODQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/RSA/RS512.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxSU0E7CgpmaW5hbCBjbGFzcyBSUzUxMiBleHRlbmRzIFJTQQp7CiAgICBwdWJsaWMgY29uc3QgSUQgPSAtMjU5OwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaWRlbnRpZmllcigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6SUQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG0oKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIE9QRU5TU0xfQUxHT19TSEE1MTI7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/RSA/RSA.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxSU0E7Cgp1c2UgQXNzZXJ0XEFzc2VydGlvbjsKdXNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxTaWduYXR1cmU7CnVzZSBDb3NlXEtleVxLZXk7CnVzZSBDb3NlXEtleVxSc2FLZXk7CnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CgphYnN0cmFjdCBjbGFzcyBSU0EgaW1wbGVtZW50cyBTaWduYXR1cmUKewogICAgcHVibGljIGZ1bmN0aW9uIHNpZ24oc3RyaW5nICRkYXRhLCBLZXkgJGtleSk6IHN0cmluZwogICAgewogICAgICAgICRrZXkgPSAkdGhpcy0+aGFuZGxlS2V5KCRrZXkpOwogICAgICAgIEFzc2VydGlvbjo6dHJ1ZSgka2V5LT5pc1ByaXZhdGUoKSwgJ1RoZSBrZXkgaXMgbm90IHByaXZhdGUnKTsKCiAgICAgICAgaWYgKGZhbHNlID09PSBvcGVuc3NsX3NpZ24oJGRhdGEsICRzaWduYXR1cmUsICRrZXktPmFzUGVtKCksICR0aGlzLT5nZXRIYXNoQWxnb3JpdGhtKCkpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VuYWJsZSB0byBzaWduIHRoZSBkYXRhJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHNpZ25hdHVyZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdmVyaWZ5KHN0cmluZyAkZGF0YSwgS2V5ICRrZXksIHN0cmluZyAkc2lnbmF0dXJlKTogYm9vbAogICAgewogICAgICAgICRrZXkgPSAkdGhpcy0+aGFuZGxlS2V5KCRrZXkpOwoKICAgICAgICByZXR1cm4gMSA9PT0gb3BlbnNzbF92ZXJpZnkoJGRhdGEsICRzaWduYXR1cmUsICRrZXktPmFzUGVtKCksICR0aGlzLT5nZXRIYXNoQWxnb3JpdGhtKCkpOwogICAgfQoKICAgIGFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBnZXRIYXNoQWxnb3JpdGhtKCk6IGludDsKCiAgICBwcml2YXRlIGZ1bmN0aW9uIGhhbmRsZUtleShLZXkgJGtleSk6IFJzYUtleQogICAgewogICAgICAgIHJldHVybiBuZXcgUnNhS2V5KCRrZXktPmdldERhdGEoKSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/Signature.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZTsKCnVzZSBDb3NlXEFsZ29yaXRobVxBbGdvcml0aG07CnVzZSBDb3NlXEtleVxLZXk7CgppbnRlcmZhY2UgU2lnbmF0dXJlIGV4dGVuZHMgQWxnb3JpdGhtCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBzaWduKHN0cmluZyAkZGF0YSwgS2V5ICRrZXkpOiBzdHJpbmc7CgogICAgcHVibGljIGZ1bmN0aW9uIHZlcmlmeShzdHJpbmcgJGRhdGEsIEtleSAka2V5LCBzdHJpbmcgJHNpZ25hdHVyZSk6IGJvb2w7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithms.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2U7Cgp1c2UgQXNzZXJ0XEFzc2VydGlvbjsKdXNlIEFzc2VydFxBc3NlcnRpb25GYWlsZWRFeGNlcHRpb247CgovKioKICogQHNlZSBodHRwczovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9jb3NlL2Nvc2UueGh0bWwjYWxnb3JpdGhtcwogKi8KYWJzdHJhY3QgY2xhc3MgQWxnb3JpdGhtcwp7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQUVTX0NDTV82NF8xMjhfMjU2ID0gMzM7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQUVTX0NDTV82NF8xMjhfMTI4ID0gMzI7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQUVTX0NDTV8xNl8xMjhfMjU2ID0gMzE7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQUVTX0NDTV8xNl8xMjhfMTI4ID0gMzA7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQUVTX01BQ18yNTZfMTI4ID0gMjY7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQUVTX01BQ18xMjhfMTI4ID0gMjU7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQ0hBQ0hBMjBfUE9MWTEzMDUgPSAyNDsKICAgIHB1YmxpYyBjb25zdCBDT1NFX0FMR09SSVRITV9BRVNfTUFDXzI1Nl82NCA9IDE1OwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX0FFU19NQUNfMTI4XzY0ID0gMTQ7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQUVTX0NDTV82NF82NF8yNTYgPSAxMzsKICAgIHB1YmxpYyBjb25zdCBDT1NFX0FMR09SSVRITV9BRVNfQ0NNXzY0XzY0XzEyOCA9IDEyOwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX0FFU19DQ01fMTZfNjRfMjU2ID0gMTE7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQUVTX0NDTV8xNl82NF8xMjggPSAxMDsKICAgIHB1YmxpYyBjb25zdCBDT1NFX0FMR09SSVRITV9IUzUxMiA9IDc7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fSFMzODQgPSA2OwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX0hTMjU2ID0gNTsKICAgIHB1YmxpYyBjb25zdCBDT1NFX0FMR09SSVRITV9IUzI1Nl82NCA9IDQ7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQTI1NkdDTSA9IDM7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQTE5MkdDTSA9IDI7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQTEyOEdDTSA9IDE7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQTEyOEtXID0gLTM7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQTE5MktXID0gLTQ7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQTI1NktXID0gLTU7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fRElSRUNUID0gLTY7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fRVMyNTYgPSAtNzsKICAgIHB1YmxpYyBjb25zdCBDT1NFX0FMR09SSVRITV9FZERTQSA9IC04OwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX0VEMjU2ID0gLTI2MDsKICAgIHB1YmxpYyBjb25zdCBDT1NFX0FMR09SSVRITV9FRDUxMiA9IC0yNjE7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fRElSRUNUX0hLREZfU0hBXzI1NiA9IC0xMDsKICAgIHB1YmxpYyBjb25zdCBDT1NFX0FMR09SSVRITV9ESVJFQ1RfSEtERl9TSEFfNTEyID0gLTExOwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX0RJUkVDVF9IS0RGX0FFU18xMjggPSAtMTI7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fRElSRUNUX0hLREZfQUVTXzI1NiA9IC0xMzsKICAgIHB1YmxpYyBjb25zdCBDT1NFX0FMR09SSVRITV9FQ0RIX0VTX0hLREZfMjU2ID0gLTI1OwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX0VDREhfRVNfSEtERl81MTIgPSAtMjY7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fRUNESF9TU19IS0RGXzI1NiA9IC0yNzsKICAgIHB1YmxpYyBjb25zdCBDT1NFX0FMR09SSVRITV9FQ0RIX1NTX0hLREZfNTEyID0gLTI4OwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX0VDREhfRVNfQTEyOEtXID0gLTI5OwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX0VDREhfRVNfQTE5MktXID0gLTMwOwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX0VDREhfRVNfQTI1NktXID0gLTMxOwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX0VDREhfU1NfQTEyOEtXID0gLTMyOwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX0VDREhfU1NfQTE5MktXID0gLTMzOwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX0VDREhfU1NfQTI1NktXID0gLTM0OwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX0VTMzg0ID0gLTM1OwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX0VTNTEyID0gLTM2OwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX1BTMjU2ID0gLTM3OwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX1BTMzg0ID0gLTM4OwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX1BTNTEyID0gLTM5OwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX1JTQUVTX09BRVAgPSAtNDA7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fUlNBRVNfT0FFUF8yNTYgPSAtNDE7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fUlNBRVNfT0FFUF81MTIgPSAtNDI7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fRVMyNTZLID0gLTQ2OwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX1JTMjU2ID0gLTI1NzsKICAgIHB1YmxpYyBjb25zdCBDT1NFX0FMR09SSVRITV9SUzM4NCA9IC0yNTg7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fUlM1MTIgPSAtMjU5OwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX1JTMSA9IC02NTUzNTsKCiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fTUFQID0gWwogICAgICAgIHNlbGY6OkNPU0VfQUxHT1JJVEhNX0VTMjU2ID0+IE9QRU5TU0xfQUxHT19TSEEyNTYsCiAgICAgICAgc2VsZjo6Q09TRV9BTEdPUklUSE1fRVMzODQgPT4gT1BFTlNTTF9BTEdPX1NIQTM4NCwKICAgICAgICBzZWxmOjpDT1NFX0FMR09SSVRITV9FUzUxMiA9PiBPUEVOU1NMX0FMR09fU0hBNTEyLAogICAgICAgIHNlbGY6OkNPU0VfQUxHT1JJVEhNX1JTMjU2ID0+IE9QRU5TU0xfQUxHT19TSEEyNTYsCiAgICAgICAgc2VsZjo6Q09TRV9BTEdPUklUSE1fUlMzODQgPT4gT1BFTlNTTF9BTEdPX1NIQTM4NCwKICAgICAgICBzZWxmOjpDT1NFX0FMR09SSVRITV9SUzUxMiA9PiBPUEVOU1NMX0FMR09fU0hBNTEyLAogICAgICAgIHNlbGY6OkNPU0VfQUxHT1JJVEhNX1JTMSA9PiBPUEVOU1NMX0FMR09fU0hBMSwKICAgIF07CgogICAgcHVibGljIGNvbnN0IENPU0VfSEFTSF9NQVAgPSBbCiAgICAgICAgc2VsZjo6Q09TRV9BTEdPUklUSE1fRVMyNTZLID0+ICdzaGEyNTYnLAogICAgICAgIHNlbGY6OkNPU0VfQUxHT1JJVEhNX0VTMjU2ID0+ICdzaGEyNTYnLAogICAgICAgIHNlbGY6OkNPU0VfQUxHT1JJVEhNX0VTMzg0ID0+ICdzaGEzODQnLAogICAgICAgIHNlbGY6OkNPU0VfQUxHT1JJVEhNX0VTNTEyID0+ICdzaGE1MTInLAogICAgICAgIHNlbGY6OkNPU0VfQUxHT1JJVEhNX1JTMjU2ID0+ICdzaGEyNTYnLAogICAgICAgIHNlbGY6OkNPU0VfQUxHT1JJVEhNX1JTMzg0ID0+ICdzaGEzODQnLAogICAgICAgIHNlbGY6OkNPU0VfQUxHT1JJVEhNX1JTNTEyID0+ICdzaGE1MTInLAogICAgICAgIHNlbGY6OkNPU0VfQUxHT1JJVEhNX1BTMjU2ID0+ICdzaGEyNTYnLAogICAgICAgIHNlbGY6OkNPU0VfQUxHT1JJVEhNX1BTMzg0ID0+ICdzaGEzODQnLAogICAgICAgIHNlbGY6OkNPU0VfQUxHT1JJVEhNX1BTNTEyID0+ICdzaGE1MTInLAogICAgICAgIHNlbGY6OkNPU0VfQUxHT1JJVEhNX1JTMSA9PiAnc2hhMScsCiAgICBdOwoKICAgIC8qKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRPcGVuc3NsQWxnb3JpdGhtRm9yKGludCAkYWxnb3JpdGhtSWRlbnRpZmllcik6IGludAogICAgewogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKHNlbGY6OkNPU0VfQUxHT1JJVEhNX01BUCwgJGFsZ29yaXRobUlkZW50aWZpZXIsICdUaGUgc3BlY2lmaWVkIGFsZ29yaXRobSBpZGVudGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQnKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OkNPU0VfQUxHT1JJVEhNX01BUFskYWxnb3JpdGhtSWRlbnRpZmllcl07CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG1Gb3IoaW50ICRhbGdvcml0aG1JZGVudGlmaWVyKTogc3RyaW5nCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoc2VsZjo6Q09TRV9IQVNIX01BUCwgJGFsZ29yaXRobUlkZW50aWZpZXIsICdUaGUgc3BlY2lmaWVkIGFsZ29yaXRobSBpZGVudGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQnKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OkNPU0VfSEFTSF9NQVBbJGFsZ29yaXRobUlkZW50aWZpZXJdOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/BigInteger.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2U7Cgp1c2UgQnJpY2tcTWF0aFxCaWdJbnRlZ2VyIGFzIEJyaWNrQmlnSW50ZWdlcjsKdXNlIGZ1bmN0aW9uIGNocjsKdXNlIGZ1bmN0aW9uIGhleDJiaW47CnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBmdW5jdGlvbiB1bnBhY2s7CgovKioKICogQGludGVybmFsCiAqLwpjbGFzcyBCaWdJbnRlZ2VyCnsKICAgIC8qKgogICAgICogSG9sZHMgdGhlIEJpZ0ludGVnZXIncyB2YWx1ZS4KICAgICAqCiAgICAgKiBAdmFyIEJyaWNrQmlnSW50ZWdlcgogICAgICovCiAgICBwcml2YXRlICR2YWx1ZTsKCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KEJyaWNrQmlnSW50ZWdlciAkdmFsdWUpCiAgICB7CiAgICAgICAgJHRoaXMtPnZhbHVlID0gJHZhbHVlOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUJpbmFyeVN0cmluZyhzdHJpbmcgJHZhbHVlKTogc2VsZgogICAgewogICAgICAgICRyZXMgPSB1bnBhY2soJ0gqJywgJHZhbHVlKTsKICAgICAgICBpZiAoZmFsc2UgPT09ICRyZXMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5hYmxlIHRvIGNvbnZlcnQgdGhlIGRhdGEgZnJvbSBiaW5hcnknKTsKICAgICAgICB9CiAgICAgICAgJGRhdGEgPSBjdXJyZW50KCRyZXMpOwoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoQnJpY2tCaWdJbnRlZ2VyOjpmcm9tQmFzZSgkZGF0YSwgMTYpKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21EZWNpbWFsKGludCAkdmFsdWUpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKEJyaWNrQmlnSW50ZWdlcjo6b2YoJHZhbHVlKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyBhIEJpZ0ludGVnZXIgdG8gYSBiaW5hcnkgc3RyaW5nLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9CeXRlcygpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPnZhbHVlLT5pc0VxdWFsVG8oQnJpY2tCaWdJbnRlZ2VyOjp6ZXJvKCkpKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CgogICAgICAgICR0ZW1wID0gJHRoaXMtPnZhbHVlLT50b0Jhc2UoMTYpOwogICAgICAgICR0ZW1wID0gMCAhPT0gKG1iX3N0cmxlbigkdGVtcCwgJzhiaXQnKSAmIDEpID8gJzAnLiR0ZW1wIDogJHRlbXA7CiAgICAgICAgJHRlbXAgPSBoZXgyYmluKCR0ZW1wKTsKICAgICAgICBpZiAoZmFsc2UgPT09ICR0ZW1wKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VuYWJsZSB0byBjb252ZXJ0IHRoZSBkYXRhIGludG8gYmluYXJ5Jyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbHRyaW0oJHRlbXAsIGNocigwKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGRzIHR3byBCaWdJbnRlZ2Vycy4KICAgICAqCiAgICAgKiAgQHBhcmFtIEJpZ0ludGVnZXIgJHkKICAgICAqCiAgICAgKiAgQHJldHVybiBCaWdJbnRlZ2VyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoc2VsZiAkeSk6IHNlbGYKICAgIHsKICAgICAgICAkdmFsdWUgPSAkdGhpcy0+dmFsdWUtPnBsdXMoJHktPnZhbHVlKTsKCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTdWJ0cmFjdHMgdHdvIEJpZ0ludGVnZXJzLgogICAgICoKICAgICAqICBAcGFyYW0gQmlnSW50ZWdlciAkeQogICAgICoKICAgICAqICBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN1YnRyYWN0KHNlbGYgJHkpOiBzZWxmCiAgICB7CiAgICAgICAgJHZhbHVlID0gJHRoaXMtPnZhbHVlLT5taW51cygkeS0+dmFsdWUpOwoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJHZhbHVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIE11bHRpcGxpZXMgdHdvIEJpZ0ludGVnZXJzLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdJbnRlZ2VyICR4CiAgICAgKgogICAgICogIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbXVsdGlwbHkoc2VsZiAkeCk6IHNlbGYKICAgIHsKICAgICAgICAkdmFsdWUgPSAkdGhpcy0+dmFsdWUtPm11bHRpcGxpZWRCeSgkeC0+dmFsdWUpOwoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJHZhbHVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFBlcmZvcm1zIG1vZHVsYXIgZXhwb25lbnRpYXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIEJpZ0ludGVnZXIgJGUKICAgICAqIEBwYXJhbSBCaWdJbnRlZ2VyICRuCiAgICAgKgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtb2RQb3coc2VsZiAkZSwgc2VsZiAkbik6IHNlbGYKICAgIHsKICAgICAgICAkdmFsdWUgPSAkdGhpcy0+dmFsdWUtPm1vZFBvdygkZS0+dmFsdWUsICRuLT52YWx1ZSk7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkdmFsdWUpOwogICAgfQoKICAgIC8qKgogICAgICogUGVyZm9ybXMgbW9kdWxhciBleHBvbmVudGlhdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnSW50ZWdlciAkZAogICAgICoKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbW9kKHNlbGYgJGQpOiBzZWxmCiAgICB7CiAgICAgICAgJHZhbHVlID0gJHRoaXMtPnZhbHVlLT5tb2QoJGQtPnZhbHVlKTsKCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb21wYXJlcyB0d28gbnVtYmVycy4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnSW50ZWdlciAkeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcGFyZShzZWxmICR5KTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZS0+Y29tcGFyZVRvKCR5LT52YWx1ZSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Hash.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2U7CgovKioKICogQGludGVybmFsCiAqLwpjbGFzcyBIYXNoCnsKICAgIC8qKgogICAgICogSGFzaCBQYXJhbWV0ZXIuCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkaGFzaDsKCiAgICAvKioKICAgICAqIERFUiBlbmNvZGluZyBULgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJHQ7CgogICAgLyoqCiAgICAgKiBIYXNoIExlbmd0aC4KICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcml2YXRlICRsZW5ndGg7CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJGhhc2gsIGludCAkbGVuZ3RoLCBzdHJpbmcgJHQpCiAgICB7CiAgICAgICAgJHRoaXMtPmhhc2ggPSAkaGFzaDsKICAgICAgICAkdGhpcy0+bGVuZ3RoID0gJGxlbmd0aDsKICAgICAgICAkdGhpcy0+dCA9ICR0OwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBIYXNoCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2hhMSgpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCdzaGExJywgMjAsICJceDMwXHgyMVx4MzBceDA5XHgwNlx4MDVceDJiXHgwZVx4MDNceDAyXHgxYVx4MDVceDAwXHgwNFx4MTQiKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gSGFzaAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNoYTI1NigpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCdzaGEyNTYnLCAzMiwgIlx4MzBceDMxXHgzMFx4MGRceDA2XHgwOVx4NjBceDg2XHg0OFx4MDFceDY1XHgwM1x4MDRceDAyXHgwMVx4MDVceDAwXHgwNFx4MjAiKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gSGFzaAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNoYTM4NCgpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCdzaGEzODQnLCA0OCwgIlx4MzBceDQxXHgzMFx4MGRceDA2XHgwOVx4NjBceDg2XHg0OFx4MDFceDY1XHgwM1x4MDRceDAyXHgwMlx4MDVceDAwXHgwNFx4MzAiKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gSGFzaAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNoYTUxMigpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCdzaGE1MTInLCA2NCwgIlx4MzBceDUxXHgzMFx4MGRceDA2XHgwOVx4NjBceDg2XHg0OFx4MDFceDY1XHgwM1x4MDRceDAyXHgwM1x4MDVceDAwXHgwNFx4NDAiKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGVuZ3RoKCk6IGludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bGVuZ3RoOwogICAgfQoKICAgIC8qKgogICAgICogQ29tcHV0ZSB0aGUgSE1BQy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhc2goc3RyaW5nICR0ZXh0KTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIGhhc2goJHRoaXMtPmhhc2gsICR0ZXh0LCB0cnVlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmhhc2g7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHQoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Key/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Key/Ec2Key.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcS2V5OwoKdXNlIGZ1bmN0aW9uIGFycmF5X2tleV9leGlzdHM7CnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgRkdcQVNOMVxFeHBsaWNpdGx5VGFnZ2VkT2JqZWN0Owp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcQml0U3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcSW50ZWdlcjsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXE9iamVjdElkZW50aWZpZXI7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxPY3RldFN0cmluZzsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXFNlcXVlbmNlOwoKY2xhc3MgRWMyS2V5IGV4dGVuZHMgS2V5CnsKICAgIHB1YmxpYyBjb25zdCBDVVJWRV9QMjU2ID0gMTsKICAgIHB1YmxpYyBjb25zdCBDVVJWRV9QMjU2SyA9IDg7CiAgICBwdWJsaWMgY29uc3QgQ1VSVkVfUDM4NCA9IDI7CiAgICBwdWJsaWMgY29uc3QgQ1VSVkVfUDUyMSA9IDM7CgogICAgcHVibGljIGNvbnN0IERBVEFfQ1VSVkUgPSAtMTsKICAgIHB1YmxpYyBjb25zdCBEQVRBX1ggPSAtMjsKICAgIHB1YmxpYyBjb25zdCBEQVRBX1kgPSAtMzsKICAgIHB1YmxpYyBjb25zdCBEQVRBX0QgPSAtNDsKCiAgICBwcml2YXRlIGNvbnN0IFNVUFBPUlRFRF9DVVJWRVMgPSBbCiAgICAgICAgc2VsZjo6Q1VSVkVfUDI1NiwKICAgICAgICBzZWxmOjpDVVJWRV9QMjU2SywKICAgICAgICBzZWxmOjpDVVJWRV9QMzg0LAogICAgICAgIHNlbGY6OkNVUlZFX1A1MjEsCiAgICBdOwoKICAgIHByaXZhdGUgY29uc3QgTkFNRURfQ1VSVkVfT0lEID0gWwogICAgICAgIHNlbGY6OkNVUlZFX1AyNTYgPT4gJzEuMi44NDAuMTAwNDUuMy4xLjcnLCAvLyBOSVNUIFAtMjU2IC8gc2VjcDI1NnIxCiAgICAgICAgc2VsZjo6Q1VSVkVfUDI1NksgPT4gJzEuMy4xMzIuMC4xMCcsIC8vIE5JU1QgUC0yNTZLIC8gc2VjcDI1NmsxCiAgICAgICAgc2VsZjo6Q1VSVkVfUDM4NCA9PiAnMS4zLjEzMi4wLjM0JywgLy8gTklTVCBQLTM4NCAvIHNlY3AzODRyMQogICAgICAgIHNlbGY6OkNVUlZFX1A1MjEgPT4gJzEuMy4xMzIuMC4zNScsIC8vIE5JU1QgUC01MjEgLyBzZWNwNTIxcjEKICAgIF07CgogICAgcHJpdmF0ZSBjb25zdCBDVVJWRV9LRVlfTEVOR1RIID0gWwogICAgICAgIHNlbGY6OkNVUlZFX1AyNTYgPT4gMzIsCiAgICAgICAgc2VsZjo6Q1VSVkVfUDI1NksgPT4gMzIsCiAgICAgICAgc2VsZjo6Q1VSVkVfUDM4NCA9PiA0OCwKICAgICAgICBzZWxmOjpDVVJWRV9QNTIxID0+IDY2LAogICAgXTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJGRhdGEpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkZGF0YSk7CiAgICAgICAgQXNzZXJ0aW9uOjplcSgkZGF0YVtzZWxmOjpUWVBFXSwgc2VsZjo6VFlQRV9FQzIsICdJbnZhbGlkIEVDMiBrZXkuIFRoZSBrZXkgdHlwZSBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGFuIEVDMiBrZXknKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkZGF0YSwgc2VsZjo6REFUQV9DVVJWRSwgJ0ludmFsaWQgRUMyIGtleS4gVGhlIGN1cnZlIGlzIG1pc3NpbmcnKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkZGF0YSwgc2VsZjo6REFUQV9YLCAnSW52YWxpZCBFQzIga2V5LiBUaGUgeCBjb29yZGluYXRlIGlzIG1pc3NpbmcnKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkZGF0YSwgc2VsZjo6REFUQV9ZLCAnSW52YWxpZCBFQzIga2V5LiBUaGUgeSBjb29yZGluYXRlIGlzIG1pc3NpbmcnKTsKICAgICAgICBBc3NlcnRpb246Omxlbmd0aCgkZGF0YVtzZWxmOjpEQVRBX1hdLCBzZWxmOjpDVVJWRV9LRVlfTEVOR1RIWyRkYXRhW3NlbGY6OkRBVEFfQ1VSVkVdXSwgJ0ludmFsaWQgbGVuZ3RoIGZvciB4IGNvb3JkaW5hdGUnLCBudWxsLCAnOGJpdCcpOwogICAgICAgIEFzc2VydGlvbjo6bGVuZ3RoKCRkYXRhW3NlbGY6OkRBVEFfWV0sIHNlbGY6OkNVUlZFX0tFWV9MRU5HVEhbJGRhdGFbc2VsZjo6REFUQV9DVVJWRV1dLCAnSW52YWxpZCBsZW5ndGggZm9yIHkgY29vcmRpbmF0ZScsIG51bGwsICc4Yml0Jyk7CiAgICAgICAgQXNzZXJ0aW9uOjppbkFycmF5KChpbnQpICRkYXRhW3NlbGY6OkRBVEFfQ1VSVkVdLCBzZWxmOjpTVVBQT1JURURfQ1VSVkVTLCAnVGhlIGN1cnZlIGlzIG5vdCBzdXBwb3J0ZWQnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9QdWJsaWMoKTogc2VsZgogICAgewogICAgICAgICRkYXRhID0gJHRoaXMtPmdldERhdGEoKTsKICAgICAgICB1bnNldCgkZGF0YVtzZWxmOjpEQVRBX0RdKTsKCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRkYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24geCgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldChzZWxmOjpEQVRBX1gpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB5KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0KHNlbGY6OkRBVEFfWSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzUHJpdmF0ZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X2tleV9leGlzdHMoc2VsZjo6REFUQV9ELCAkdGhpcy0+Z2V0RGF0YSgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZCgpOiBzdHJpbmcKICAgIHsKICAgICAgICBBc3NlcnRpb246OnRydWUoJHRoaXMtPmlzUHJpdmF0ZSgpLCAnVGhlIGtleSBpcyBub3QgcHJpdmF0ZScpOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmdldChzZWxmOjpEQVRBX0QpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjdXJ2ZSgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gKGludCkgJHRoaXMtPmdldChzZWxmOjpEQVRBX0NVUlZFKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYXNQRU0oKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5pc1ByaXZhdGUoKSkgewogICAgICAgICAgICAkZGVyID0gbmV3IFNlcXVlbmNlKAogICAgICAgICAgICAgICAgbmV3IEludGVnZXIoMSksCiAgICAgICAgICAgICAgICBuZXcgT2N0ZXRTdHJpbmcoYmluMmhleCgkdGhpcy0+ZCgpKSksCiAgICAgICAgICAgICAgICBuZXcgRXhwbGljaXRseVRhZ2dlZE9iamVjdCgwLCBuZXcgT2JqZWN0SWRlbnRpZmllcigkdGhpcy0+Z2V0Q3VydmVPaWQoKSkpLAogICAgICAgICAgICAgICAgbmV3IEV4cGxpY2l0bHlUYWdnZWRPYmplY3QoMSwgbmV3IEJpdFN0cmluZyhiaW4yaGV4KCR0aGlzLT5nZXRVbmNvbXByZXNzZWRDb29yZGluYXRlcygpKSkpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnBlbSgnRUMgUFJJVkFURSBLRVknLCAkZGVyLT5nZXRCaW5hcnkoKSk7CiAgICAgICAgfQoKICAgICAgICAkZGVyID0gbmV3IFNlcXVlbmNlKAogICAgICAgICAgICBuZXcgU2VxdWVuY2UoCiAgICAgICAgICAgICAgICBuZXcgT2JqZWN0SWRlbnRpZmllcignMS4yLjg0MC4xMDA0NS4yLjEnKSwKICAgICAgICAgICAgICAgIG5ldyBPYmplY3RJZGVudGlmaWVyKCR0aGlzLT5nZXRDdXJ2ZU9pZCgpKQogICAgICAgICAgICApLAogICAgICAgICAgICBuZXcgQml0U3RyaW5nKGJpbjJoZXgoJHRoaXMtPmdldFVuY29tcHJlc3NlZENvb3JkaW5hdGVzKCkpKQogICAgICAgICk7CgogICAgICAgIHJldHVybiAkdGhpcy0+cGVtKCdQVUJMSUMgS0VZJywgJGRlci0+Z2V0QmluYXJ5KCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVbmNvbXByZXNzZWRDb29yZGluYXRlcygpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gIlx4MDQiLiR0aGlzLT54KCkuJHRoaXMtPnkoKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldEN1cnZlT2lkKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBzZWxmOjpOQU1FRF9DVVJWRV9PSURbJHRoaXMtPmN1cnZlKCldOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcGVtKHN0cmluZyAkdHlwZSwgc3RyaW5nICRkZXIpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gc3ByaW50ZigiLS0tLS1CRUdJTiAlcy0tLS0tXG4iLCBtYl9zdHJ0b3VwcGVyKCR0eXBlKSkuCiAgICAgICAgICAgIGNodW5rX3NwbGl0KGJhc2U2NF9lbmNvZGUoJGRlciksIDY0LCAiXG4iKS4KICAgICAgICAgICAgc3ByaW50ZigiLS0tLS1FTkQgJXMtLS0tLVxuIiwgbWJfc3RydG91cHBlcigkdHlwZSkpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Key/Key.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcS2V5OwoKdXNlIGZ1bmN0aW9uIGFycmF5X2tleV9leGlzdHM7CnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwoKY2xhc3MgS2V5CnsKICAgIHB1YmxpYyBjb25zdCBUWVBFID0gMTsKICAgIHB1YmxpYyBjb25zdCBUWVBFX09LUCA9IDE7CiAgICBwdWJsaWMgY29uc3QgVFlQRV9FQzIgPSAyOwogICAgcHVibGljIGNvbnN0IFRZUEVfUlNBID0gMzsKICAgIHB1YmxpYyBjb25zdCBUWVBFX09DVCA9IDQ7CiAgICBwdWJsaWMgY29uc3QgS0lEID0gMjsKICAgIHB1YmxpYyBjb25zdCBBTEcgPSAzOwogICAgcHVibGljIGNvbnN0IEtFWV9PUFMgPSA0OwogICAgcHVibGljIGNvbnN0IEJBU0VfSVYgPSA1OwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICRkYXRhOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkZGF0YSkKICAgIHsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkZGF0YSwgc2VsZjo6VFlQRSwgJ0ludmFsaWQga2V5OiB0aGUgdHlwZSBpcyBub3QgZGVmaW5lZCcpOwogICAgICAgICR0aGlzLT5kYXRhID0gJGRhdGE7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tRGF0YShhcnJheSAkZGF0YSk6IHNlbGYKICAgIHsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkZGF0YSwgc2VsZjo6VFlQRSwgJ0ludmFsaWQga2V5OiB0aGUgdHlwZSBpcyBub3QgZGVmaW5lZCcpOwogICAgICAgIHN3aXRjaCAoJGRhdGFbc2VsZjo6VFlQRV0pIHsKICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPa3BLZXkoJGRhdGEpOwogICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVjMktleSgkZGF0YSk7CiAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUnNhS2V5KCRkYXRhKTsKICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTeW1tZXRyaWNLZXkoJGRhdGEpOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRkYXRhKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGludHxzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHR5cGUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YVtzZWxmOjpUWVBFXTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWxnKCk6IGludAogICAgewogICAgICAgIHJldHVybiAoaW50KSAkdGhpcy0+Z2V0KHNlbGY6OkFMRyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldERhdGEoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmRhdGE7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGhhcyhpbnQgJGtleSk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkdGhpcy0+ZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXQoaW50ICRrZXkpCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJHRoaXMtPmRhdGEsICRrZXksIHNwcmludGYoJ1RoZSBrZXkgaGFzIG5vIGRhdGEgYXQgaW5kZXggJWQnLCAka2V5KSk7CgogICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YVska2V5XTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Key/OkpKey.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcS2V5OwoKdXNlIGZ1bmN0aW9uIGFycmF5X2tleV9leGlzdHM7CnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwoKY2xhc3MgT2twS2V5IGV4dGVuZHMgS2V5CnsKICAgIHB1YmxpYyBjb25zdCBDVVJWRV9YMjU1MTkgPSA0OwogICAgcHVibGljIGNvbnN0IENVUlZFX1g0NDggPSA1OwogICAgcHVibGljIGNvbnN0IENVUlZFX0VEMjU1MTkgPSA2OwogICAgcHVibGljIGNvbnN0IENVUlZFX0VENDQ4ID0gNzsKCiAgICBwdWJsaWMgY29uc3QgREFUQV9DVVJWRSA9IC0xOwogICAgcHVibGljIGNvbnN0IERBVEFfWCA9IC0yOwogICAgcHVibGljIGNvbnN0IERBVEFfRCA9IC00OwoKICAgIHByaXZhdGUgY29uc3QgU1VQUE9SVEVEX0NVUlZFUyA9IFsKICAgICAgICBzZWxmOjpDVVJWRV9YMjU1MTksCiAgICAgICAgc2VsZjo6Q1VSVkVfWDQ0OCwKICAgICAgICBzZWxmOjpDVVJWRV9FRDI1NTE5LAogICAgICAgIHNlbGY6OkNVUlZFX0VENDQ4LAogICAgXTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJGRhdGEpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkZGF0YSk7CiAgICAgICAgQXNzZXJ0aW9uOjplcSgkZGF0YVtzZWxmOjpUWVBFXSwgc2VsZjo6VFlQRV9PS1AsICdJbnZhbGlkIE9LUCBrZXkuIFRoZSBrZXkgdHlwZSBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGFuIE9LUCBrZXknKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkZGF0YSwgc2VsZjo6REFUQV9DVVJWRSwgJ0ludmFsaWQgRUMyIGtleS4gVGhlIGN1cnZlIGlzIG1pc3NpbmcnKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkZGF0YSwgc2VsZjo6REFUQV9YLCAnSW52YWxpZCBPS1Aga2V5LiBUaGUgeCBjb29yZGluYXRlIGlzIG1pc3NpbmcnKTsKICAgICAgICBBc3NlcnRpb246OmluQXJyYXkoKGludCkgJGRhdGFbc2VsZjo6REFUQV9DVVJWRV0sIHNlbGY6OlNVUFBPUlRFRF9DVVJWRVMsICdUaGUgY3VydmUgaXMgbm90IHN1cHBvcnRlZCcpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB4KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0KHNlbGY6OkRBVEFfWCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzUHJpdmF0ZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X2tleV9leGlzdHMoc2VsZjo6REFUQV9ELCAkdGhpcy0+Z2V0RGF0YSgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZCgpOiBzdHJpbmcKICAgIHsKICAgICAgICBBc3NlcnRpb246OnRydWUoJHRoaXMtPmlzUHJpdmF0ZSgpLCAnVGhlIGtleSBpcyBub3QgcHJpdmF0ZScpOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmdldChzZWxmOjpEQVRBX0QpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjdXJ2ZSgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gKGludCkgJHRoaXMtPmdldChzZWxmOjpEQVRBX0NVUlZFKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Key/RsaKey.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcS2V5OwoKdXNlIGZ1bmN0aW9uIGFycmF5X2tleV9leGlzdHM7CnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgQnJpY2tcTWF0aFxCaWdJbnRlZ2VyOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcQml0U3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcSW50ZWdlcjsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXE51bGxPYmplY3Q7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxPYmplY3RJZGVudGlmaWVyOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcU2VxdWVuY2U7CnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CgpjbGFzcyBSc2FLZXkgZXh0ZW5kcyBLZXkKewogICAgcHVibGljIGNvbnN0IERBVEFfTiA9IC0xOwogICAgcHVibGljIGNvbnN0IERBVEFfRSA9IC0yOwogICAgcHVibGljIGNvbnN0IERBVEFfRCA9IC0zOwogICAgcHVibGljIGNvbnN0IERBVEFfUCA9IC00OwogICAgcHVibGljIGNvbnN0IERBVEFfUSA9IC01OwogICAgcHVibGljIGNvbnN0IERBVEFfRFAgPSAtNjsKICAgIHB1YmxpYyBjb25zdCBEQVRBX0RRID0gLTc7CiAgICBwdWJsaWMgY29uc3QgREFUQV9RSSA9IC04OwogICAgcHVibGljIGNvbnN0IERBVEFfT1RIRVIgPSAtOTsKICAgIHB1YmxpYyBjb25zdCBEQVRBX1JJID0gLTEwOwogICAgcHVibGljIGNvbnN0IERBVEFfREkgPSAtMTE7CiAgICBwdWJsaWMgY29uc3QgREFUQV9USSA9IC0xMjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJGRhdGEpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkZGF0YSk7CiAgICAgICAgQXNzZXJ0aW9uOjplcSgkZGF0YVtzZWxmOjpUWVBFXSwgc2VsZjo6VFlQRV9SU0EsICdJbnZhbGlkIFJTQSBrZXkuIFRoZSBrZXkgdHlwZSBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgUlNBIGtleScpOwogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRkYXRhLCBzZWxmOjpEQVRBX04sICdJbnZhbGlkIFJTQSBrZXkuIFRoZSBtb2R1bHVzIGlzIG1pc3NpbmcnKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkZGF0YSwgc2VsZjo6REFUQV9FLCAnSW52YWxpZCBSU0Ega2V5LiBUaGUgZXhwb25lbnQgaXMgbWlzc2luZycpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBuKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0KHNlbGY6OkRBVEFfTik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXQoc2VsZjo6REFUQV9FKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZCgpOiBzdHJpbmcKICAgIHsKICAgICAgICBBc3NlcnRpb246OnRydWUoJHRoaXMtPmlzUHJpdmF0ZSgpLCAnVGhlIGtleSBpcyBub3QgcHJpdmF0ZS4nKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXQoc2VsZjo6REFUQV9EKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcCgpOiBzdHJpbmcKICAgIHsKICAgICAgICBBc3NlcnRpb246OnRydWUoJHRoaXMtPmlzUHJpdmF0ZSgpLCAnVGhlIGtleSBpcyBub3QgcHJpdmF0ZS4nKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXQoc2VsZjo6REFUQV9QKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcSgpOiBzdHJpbmcKICAgIHsKICAgICAgICBBc3NlcnRpb246OnRydWUoJHRoaXMtPmlzUHJpdmF0ZSgpLCAnVGhlIGtleSBpcyBub3QgcHJpdmF0ZS4nKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXQoc2VsZjo6REFUQV9RKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZFAoKTogc3RyaW5nCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCR0aGlzLT5pc1ByaXZhdGUoKSwgJ1RoZSBrZXkgaXMgbm90IHByaXZhdGUuJyk7CgogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0KHNlbGY6OkRBVEFfRFApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkUSgpOiBzdHJpbmcKICAgIHsKICAgICAgICBBc3NlcnRpb246OnRydWUoJHRoaXMtPmlzUHJpdmF0ZSgpLCAnVGhlIGtleSBpcyBub3QgcHJpdmF0ZS4nKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXQoc2VsZjo6REFUQV9EUSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIFFJbnYoKTogc3RyaW5nCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCR0aGlzLT5pc1ByaXZhdGUoKSwgJ1RoZSBrZXkgaXMgbm90IHByaXZhdGUuJyk7CgogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0KHNlbGY6OkRBVEFfUUkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBvdGhlcigpOiBhcnJheQogICAgewogICAgICAgIEFzc2VydGlvbjo6dHJ1ZSgkdGhpcy0+aXNQcml2YXRlKCksICdUaGUga2V5IGlzIG5vdCBwcml2YXRlLicpOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmdldChzZWxmOjpEQVRBX09USEVSKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gckkoKTogc3RyaW5nCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCR0aGlzLT5pc1ByaXZhdGUoKSwgJ1RoZSBrZXkgaXMgbm90IHByaXZhdGUuJyk7CgogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0KHNlbGY6OkRBVEFfUkkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkSSgpOiBzdHJpbmcKICAgIHsKICAgICAgICBBc3NlcnRpb246OnRydWUoJHRoaXMtPmlzUHJpdmF0ZSgpLCAnVGhlIGtleSBpcyBub3QgcHJpdmF0ZS4nKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXQoc2VsZjo6REFUQV9ESSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRJKCk6IHN0cmluZwogICAgewogICAgICAgIEFzc2VydGlvbjo6dHJ1ZSgkdGhpcy0+aXNQcml2YXRlKCksICdUaGUga2V5IGlzIG5vdCBwcml2YXRlLicpOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmdldChzZWxmOjpEQVRBX1RJKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzUHJpbWVzKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmhhcyhzZWxmOjpEQVRBX1ApICYmICR0aGlzLT5oYXMoc2VsZjo6REFUQV9RKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJpbWVzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJHRoaXMtPnAoKSwKICAgICAgICAgICAgJHRoaXMtPnEoKSwKICAgICAgICBdOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNFeHBvbmVudHMoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aGFzKHNlbGY6OkRBVEFfRFApICYmICR0aGlzLT5oYXMoc2VsZjo6REFUQV9EUSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGV4cG9uZW50cygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICR0aGlzLT5kUCgpLAogICAgICAgICAgICAkdGhpcy0+ZFEoKSwKICAgICAgICBdOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNDb2VmZmljaWVudCgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oYXMoc2VsZjo6REFUQV9RSSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzUHVibGljKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gISR0aGlzLT5pc1ByaXZhdGUoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNQcml2YXRlKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfa2V5X2V4aXN0cyhzZWxmOjpEQVRBX0QsICR0aGlzLT5nZXREYXRhKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhc1BlbSgpOiBzdHJpbmcKICAgIHsKICAgICAgICBBc3NlcnRpb246OmZhbHNlKCR0aGlzLT5pc1ByaXZhdGUoKSwgJ1Vuc3VwcG9ydGVkIGZvciBwcml2YXRlIGtleXMuJyk7CiAgICAgICAgJGJpdFNyaW5nID0gbmV3IFNlcXVlbmNlKAogICAgICAgICAgICBuZXcgSW50ZWdlcigkdGhpcy0+ZnJvbUJhc2U2NFRvSW50ZWdlcigkdGhpcy0+bigpKSksCiAgICAgICAgICAgIG5ldyBJbnRlZ2VyKCR0aGlzLT5mcm9tQmFzZTY0VG9JbnRlZ2VyKCR0aGlzLT5lKCkpKQogICAgICAgICk7CgogICAgICAgICRkZXIgPSBuZXcgU2VxdWVuY2UoCiAgICAgICAgICAgIG5ldyBTZXF1ZW5jZSgKICAgICAgICAgICAgICAgIG5ldyBPYmplY3RJZGVudGlmaWVyKCcxLjIuODQwLjExMzU0OS4xLjEuMScpLAogICAgICAgICAgICAgICAgbmV3IE51bGxPYmplY3QoKQogICAgICAgICAgICApLAogICAgICAgICAgICBuZXcgQml0U3RyaW5nKGJpbjJoZXgoJGJpdFNyaW5nLT5nZXRCaW5hcnkoKSkpCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5wZW0oJ1BVQkxJQyBLRVknLCAkZGVyLT5nZXRCaW5hcnkoKSk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBmcm9tQmFzZTY0VG9JbnRlZ2VyKHN0cmluZyAkdmFsdWUpOiBzdHJpbmcKICAgIHsKICAgICAgICAkZGF0YSA9IHVucGFjaygnSConLCAkdmFsdWUpOwogICAgICAgIGlmIChmYWxzZSA9PT0gJGRhdGEpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5hYmxlIHRvIGNvbnZlcnQgdG8gYW4gaW50ZWdlcicpOwogICAgICAgIH0KCiAgICAgICAgJGhleCA9IGN1cnJlbnQoJGRhdGEpOwoKICAgICAgICByZXR1cm4gQmlnSW50ZWdlcjo6ZnJvbUJhc2UoJGhleCwgMTYpLT50b0Jhc2UoMTApOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcGVtKHN0cmluZyAkdHlwZSwgc3RyaW5nICRkZXIpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gc3ByaW50ZigiLS0tLS1CRUdJTiAlcy0tLS0tXG4iLCBtYl9zdHJ0b3VwcGVyKCR0eXBlKSkuCiAgICAgICAgICAgIGNodW5rX3NwbGl0KGJhc2U2NF9lbmNvZGUoJGRlciksIDY0LCAiXG4iKS4KICAgICAgICAgICAgc3ByaW50ZigiLS0tLS1FTkQgJXMtLS0tLVxuIiwgbWJfc3RydG91cHBlcigkdHlwZSkpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Key/SymmetricKey.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcS2V5OwoKdXNlIEFzc2VydFxBc3NlcnRpb247CgpjbGFzcyBTeW1tZXRyaWNLZXkgZXh0ZW5kcyBLZXkKewogICAgcHVibGljIGNvbnN0IERBVEFfSyA9IC0xOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkZGF0YSkKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRkYXRhKTsKICAgICAgICBBc3NlcnRpb246OmVxKCRkYXRhW3NlbGY6OlRZUEVdLCBzZWxmOjpUWVBFX09DVCwgJ0ludmFsaWQgc3ltbWV0cmljIGtleS4gVGhlIGtleSB0eXBlIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBzeW1tZXRyaWMga2V5Jyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGRhdGEsIHNlbGY6OkRBVEFfSywgJ0ludmFsaWQgc3ltbWV0cmljIGtleS4gVGhlIHBhcmFtZXRlciAiayIgaXMgbWlzc2luZycpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBrKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0KHNlbGY6OkRBVEFfSyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Verifier.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2U7CgpjbGFzcyBWZXJpZmllcgp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAid2ViLWF1dGgvbWV0YWRhdGEtc2VydmljZSIsCiAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAiZGVzY3JpcHRpb24iOiAiTWV0YWRhdGEgU2VydmljZSBmb3IgRklETzIvV2ViYXV0aG4iLAogICAgImtleXdvcmRzIjogWyJGSURPIiwgIkZJRE8yIiwgIndlYmF1dGhuIl0sCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi1hdXRoIiwKICAgICJhdXRob3JzIjogWwogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiRmxvcmVudCBNb3JzZWxsaSIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJBbGwgY29udHJpYnV0b3JzIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItYXV0aC9tZXRhZGF0YS1zZXJ2aWNlL2NvbnRyaWJ1dG9ycyIKICAgICAgICB9CiAgICBdLAogICAgInJlcXVpcmUiOiB7CiAgICAgICAgInBocCI6ICI+PTcuMiIsCiAgICAgICAgImV4dC1qc29uIjogIioiLAogICAgICAgICJiZWJlcmxlaS9hc3NlcnQiOiAiXjMuMiIsCiAgICAgICAgImxlYWd1ZS91cmkiOiAiXjYuMCIsCiAgICAgICAgInBzci9odHRwLWNsaWVudCI6ICJeMS4wIiwKICAgICAgICAicHNyL2h0dHAtZmFjdG9yeSI6ICJeMS4wIiwKICAgICAgICAicHNyL2xvZyI6ICJeMS4xIgogICAgfSwKICAgICJzdWdnZXN0IjogewogICAgICAgICJwc3IvbG9nLWltcGxlbWVudGF0aW9uIjogIlJlY29tbWVuZGVkIHRvIHJlY2VpdmUgbG9ncyBmcm9tIHRoZSBsaWJyYXJ5IgogICAgfSwKICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICJXZWJhdXRoblxcTWV0YWRhdGFTZXJ2aWNlXFwiOiAic3JjLyIKICAgICAgICB9CiAgICB9LAogICAgInN1Z2dlc3QiOiB7CiAgICAgICAgIndlYi10b2tlbi9qd3Qta2V5LW1nbXQiOiAiTWFuZGF0b3J5IGZvciBmZXRjaGluZyBNZXRhZGF0YSBTdGF0ZW1lbnQgZnJvbSBkaXN0YW50IHNvdXJjZXMiLAogICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tZWNkc2EiOiAiTWFuZGF0b3J5IGZvciBmZXRjaGluZyBNZXRhZGF0YSBTdGF0ZW1lbnQgZnJvbSBkaXN0YW50IHNvdXJjZXMiCiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[TUlUIExpY2Vuc2UKCkNvcHlyaWdodCAoYykgMjAxOCBTcG9ta3ktTGFicwoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/AbstractDescriptor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgSnNvblNlcmlhbGl6YWJsZTsKCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0RGVzY3JpcHRvciBpbXBsZW1lbnRzIEpzb25TZXJpYWxpemFibGUKewogICAgLyoqCiAgICAgKiBAdmFyIGludHxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJG1heFJldHJpZXM7CgogICAgLyoqCiAgICAgKiBAdmFyIGludHxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGJsb2NrU2xvd2Rvd247CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KD9pbnQgJG1heFJldHJpZXMgPSBudWxsLCA/aW50ICRibG9ja1Nsb3dkb3duID0gbnVsbCkKICAgIHsKICAgICAgICBBc3NlcnRpb246OmdyZWF0ZXJPckVxdWFsVGhhbigkbWF4UmV0cmllcywgMCwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGRhdGEuIFRoZSB2YWx1ZSBvZiAibWF4UmV0cmllcyIgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKSk7CiAgICAgICAgQXNzZXJ0aW9uOjpncmVhdGVyT3JFcXVhbFRoYW4oJGJsb2NrU2xvd2Rvd24sIDAsIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbignSW52YWxpZCBkYXRhLiBUaGUgdmFsdWUgb2YgImJsb2NrU2xvd2Rvd24iIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJykpOwoKICAgICAgICAkdGhpcy0+bWF4UmV0cmllcyA9ICRtYXhSZXRyaWVzOwogICAgICAgICR0aGlzLT5ibG9ja1Nsb3dkb3duID0gJGJsb2NrU2xvd2Rvd247CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE1heFJldHJpZXMoKTogP2ludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bWF4UmV0cmllczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QmxvY2tTbG93ZG93bigpOiA/aW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5ibG9ja1Nsb3dkb3duOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/AuthenticatorStatus.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCmFic3RyYWN0IGNsYXNzIEF1dGhlbnRpY2F0b3JTdGF0dXMKewogICAgcHVibGljIGNvbnN0IE5PVF9GSURPX0NFUlRJRklFRCA9ICdOT1RfRklET19DRVJUSUZJRUQnOwogICAgcHVibGljIGNvbnN0IEZJRE9fQ0VSVElGSUVEID0gJ0ZJRE9fQ0VSVElGSUVEJzsKICAgIHB1YmxpYyBjb25zdCBVU0VSX1ZFUklGSUNBVElPTl9CWVBBU1MgPSAnVVNFUl9WRVJJRklDQVRJT05fQllQQVNTJzsKICAgIHB1YmxpYyBjb25zdCBBVFRFU1RBVElPTl9LRVlfQ09NUFJPTUlTRSA9ICdBVFRFU1RBVElPTl9LRVlfQ09NUFJPTUlTRSc7CiAgICBwdWJsaWMgY29uc3QgVVNFUl9LRVlfUkVNT1RFX0NPTVBST01JU0UgPSAnVVNFUl9LRVlfUkVNT1RFX0NPTVBST01JU0UnOwogICAgcHVibGljIGNvbnN0IFVTRVJfS0VZX1BIWVNJQ0FMX0NPTVBST01JU0UgPSAnVVNFUl9LRVlfUEhZU0lDQUxfQ09NUFJPTUlTRSc7CiAgICBwdWJsaWMgY29uc3QgVVBEQVRFX0FWQUlMQUJMRSA9ICdVUERBVEVfQVZBSUxBQkxFJzsKICAgIHB1YmxpYyBjb25zdCBSRVZPS0VEID0gJ1JFVk9LRUQnOwogICAgcHVibGljIGNvbnN0IFNFTEZfQVNTRVJUSU9OX1NVQk1JVFRFRCA9ICdTRUxGX0FTU0VSVElPTl9TVUJNSVRURUQnOwogICAgcHVibGljIGNvbnN0IEZJRE9fQ0VSVElGSUVEX0wxID0gJ0ZJRE9fQ0VSVElGSUVEX0wxJzsKICAgIHB1YmxpYyBjb25zdCBGSURPX0NFUlRJRklFRF9MMXBsdXMgPSAnRklET19DRVJUSUZJRURfTDFwbHVzJzsKICAgIHB1YmxpYyBjb25zdCBGSURPX0NFUlRJRklFRF9MMiA9ICdGSURPX0NFUlRJRklFRF9MMic7CiAgICBwdWJsaWMgY29uc3QgRklET19DRVJUSUZJRURfTDJwbHVzID0gJ0ZJRE9fQ0VSVElGSUVEX0wycGx1cyc7CiAgICBwdWJsaWMgY29uc3QgRklET19DRVJUSUZJRURfTDMgPSAnRklET19DRVJUSUZJRURfTDMnOwogICAgcHVibGljIGNvbnN0IEZJRE9fQ0VSVElGSUVEX0wzcGx1cyA9ICdGSURPX0NFUlRJRklFRF9MM3BsdXMnOwogICAgcHVibGljIGNvbnN0IEZJRE9fQ0VSVElGSUVEX0w0ID0gJ0ZJRE9fQ0VSVElGSUVEX0w0JzsKICAgIHB1YmxpYyBjb25zdCBGSURPX0NFUlRJRklFRF9MNSA9ICdGSURPX0NFUlRJRklFRF9MNSc7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsaXN0KCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgc2VsZjo6Tk9UX0ZJRE9fQ0VSVElGSUVELAogICAgICAgICAgICBzZWxmOjpGSURPX0NFUlRJRklFRCwKICAgICAgICAgICAgc2VsZjo6VVNFUl9WRVJJRklDQVRJT05fQllQQVNTLAogICAgICAgICAgICBzZWxmOjpBVFRFU1RBVElPTl9LRVlfQ09NUFJPTUlTRSwKICAgICAgICAgICAgc2VsZjo6VVNFUl9LRVlfUkVNT1RFX0NPTVBST01JU0UsCiAgICAgICAgICAgIHNlbGY6OlVTRVJfS0VZX1BIWVNJQ0FMX0NPTVBST01JU0UsCiAgICAgICAgICAgIHNlbGY6OlVQREFURV9BVkFJTEFCTEUsCiAgICAgICAgICAgIHNlbGY6OlJFVk9LRUQsCiAgICAgICAgICAgIHNlbGY6OlNFTEZfQVNTRVJUSU9OX1NVQk1JVFRFRCwKICAgICAgICAgICAgc2VsZjo6RklET19DRVJUSUZJRURfTDEsCiAgICAgICAgICAgIHNlbGY6OkZJRE9fQ0VSVElGSUVEX0wxcGx1cywKICAgICAgICAgICAgc2VsZjo6RklET19DRVJUSUZJRURfTDIsCiAgICAgICAgICAgIHNlbGY6OkZJRE9fQ0VSVElGSUVEX0wycGx1cywKICAgICAgICAgICAgc2VsZjo6RklET19DRVJUSUZJRURfTDMsCiAgICAgICAgICAgIHNlbGY6OkZJRE9fQ0VSVElGSUVEX0wzcGx1cywKICAgICAgICAgICAgc2VsZjo6RklET19DRVJUSUZJRURfTDQsCiAgICAgICAgICAgIHNlbGY6OkZJRE9fQ0VSVElGSUVEX0w1LAogICAgICAgIF07CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/BiometricAccuracyDescriptor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwoKY2xhc3MgQmlvbWV0cmljQWNjdXJhY3lEZXNjcmlwdG9yIGV4dGVuZHMgQWJzdHJhY3REZXNjcmlwdG9yCnsKICAgIC8qKgogICAgICogQHZhciBmbG9hdHxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJEZBUjsKCiAgICAvKioKICAgICAqIEB2YXIgZmxvYXR8bnVsbAogICAgICovCiAgICBwcml2YXRlICRGUlI7CgogICAgLyoqCiAgICAgKiBAdmFyIGZsb2F0fG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkRUVSOwoKICAgIC8qKgogICAgICogQHZhciBmbG9hdHxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJEZBQVI7CgogICAgLyoqCiAgICAgKiBAdmFyIGludHxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJG1heFJlZmVyZW5jZURhdGFTZXRzOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCg/ZmxvYXQgJEZBUiwgP2Zsb2F0ICRGUlIsID9mbG9hdCAkRUVSLCA/ZmxvYXQgJEZBQVIsID9pbnQgJG1heFJlZmVyZW5jZURhdGFTZXRzLCA/aW50ICRtYXhSZXRyaWVzID0gbnVsbCwgP2ludCAkYmxvY2tTbG93ZG93biA9IG51bGwpCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjpncmVhdGVyT3JFcXVhbFRoYW4oJG1heFJlZmVyZW5jZURhdGFTZXRzLCAwLCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ0ludmFsaWQgZGF0YS4gVGhlIHZhbHVlIG9mICJtYXhSZWZlcmVuY2VEYXRhU2V0cyIgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKSk7CiAgICAgICAgJHRoaXMtPkZSUiA9ICRGUlI7CiAgICAgICAgJHRoaXMtPkZBUiA9ICRGQVI7CiAgICAgICAgJHRoaXMtPkVFUiA9ICRFRVI7CiAgICAgICAgJHRoaXMtPkZBQVIgPSAkRkFBUjsKICAgICAgICAkdGhpcy0+bWF4UmVmZXJlbmNlRGF0YVNldHMgPSAkbWF4UmVmZXJlbmNlRGF0YVNldHM7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkbWF4UmV0cmllcywgJGJsb2NrU2xvd2Rvd24pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGQVIoKTogP2Zsb2F0CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5GQVI7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEZSUigpOiA/ZmxvYXQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPkZSUjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RUVSKCk6ID9mbG9hdAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+RUVSOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGQUFSKCk6ID9mbG9hdAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+RkFBUjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWF4UmVmZXJlbmNlRGF0YVNldHMoKTogP2ludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bWF4UmVmZXJlbmNlRGF0YVNldHM7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tQXJyYXkoYXJyYXkgJGRhdGEpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKAogICAgICAgICAgICAkZGF0YVsnRkFSJ10gPz8gbnVsbCwKICAgICAgICAgICAgJGRhdGFbJ0ZSUiddID8/IG51bGwsCiAgICAgICAgICAgICRkYXRhWydFRVInXSA/PyBudWxsLAogICAgICAgICAgICAkZGF0YVsnRkFBUiddID8/IG51bGwsCiAgICAgICAgICAgICRkYXRhWydtYXhSZWZlcmVuY2VEYXRhU2V0cyddID8/IG51bGwsCiAgICAgICAgICAgICRkYXRhWydtYXhSZXRyaWVzJ10gPz8gbnVsbCwKICAgICAgICAgICAgJGRhdGFbJ2Jsb2NrU2xvd2Rvd24nXSA/PyBudWxsCiAgICAgICAgKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgICRkYXRhID0gWwogICAgICAgICAgICAnRkFSJyA9PiAkdGhpcy0+RkFSLAogICAgICAgICAgICAnRlJSJyA9PiAkdGhpcy0+RlJSLAogICAgICAgICAgICAnRUVSJyA9PiAkdGhpcy0+RUVSLAogICAgICAgICAgICAnRkFBUicgPT4gJHRoaXMtPkZBQVIsCiAgICAgICAgICAgICdtYXhSZWZlcmVuY2VEYXRhU2V0cycgPT4gJHRoaXMtPm1heFJlZmVyZW5jZURhdGFTZXRzLAogICAgICAgICAgICAnbWF4UmV0cmllcycgPT4gJHRoaXMtPmdldE1heFJldHJpZXMoKSwKICAgICAgICAgICAgJ2Jsb2NrU2xvd2Rvd24nID0+ICR0aGlzLT5nZXRCbG9ja1Nsb3dkb3duKCksCiAgICAgICAgXTsKCiAgICAgICAgcmV0dXJuIFV0aWxzOjpmaWx0ZXJOdWxsVmFsdWVzKCRkYXRhKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/BiometricStatusReport.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBKc29uU2VyaWFsaXphYmxlOwoKY2xhc3MgQmlvbWV0cmljU3RhdHVzUmVwb3J0IGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByaXZhdGUgJGNlcnRMZXZlbDsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByaXZhdGUgJG1vZGFsaXR5OwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRlZmZlY3RpdmVEYXRlOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRjZXJ0aWZpY2F0aW9uRGVzY3JpcHRvcjsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkY2VydGlmaWNhdGVOdW1iZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGNlcnRpZmljYXRpb25Qb2xpY3lWZXJzaW9uOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRjZXJ0aWZpY2F0aW9uUmVxdWlyZW1lbnRzVmVyc2lvbjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2VydExldmVsKCk6IGludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2VydExldmVsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNb2RhbGl0eSgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm1vZGFsaXR5OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFZmZlY3RpdmVEYXRlKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmVmZmVjdGl2ZURhdGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENlcnRpZmljYXRpb25EZXNjcmlwdG9yKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNlcnRpZmljYXRpb25EZXNjcmlwdG9yOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDZXJ0aWZpY2F0ZU51bWJlcigpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jZXJ0aWZpY2F0ZU51bWJlcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2VydGlmaWNhdGlvblBvbGljeVZlcnNpb24oKTogP3N0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2VydGlmaWNhdGlvblBvbGljeVZlcnNpb247CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENlcnRpZmljYXRpb25SZXF1aXJlbWVudHNWZXJzaW9uKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNlcnRpZmljYXRpb25SZXF1aXJlbWVudHNWZXJzaW9uOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUFycmF5KGFycmF5ICRkYXRhKTogc2VsZgogICAgewogICAgICAgICRvYmplY3QgPSBuZXcgc2VsZigpOwogICAgICAgICRvYmplY3QtPmNlcnRMZXZlbCA9ICRkYXRhWydjZXJ0TGV2ZWwnXSA/PyBudWxsOwogICAgICAgICRvYmplY3QtPm1vZGFsaXR5ID0gJGRhdGFbJ21vZGFsaXR5J10gPz8gbnVsbDsKICAgICAgICAkb2JqZWN0LT5lZmZlY3RpdmVEYXRlID0gJGRhdGFbJ2VmZmVjdGl2ZURhdGUnXSA/PyBudWxsOwogICAgICAgICRvYmplY3QtPmNlcnRpZmljYXRpb25EZXNjcmlwdG9yID0gJGRhdGFbJ2NlcnRpZmljYXRpb25EZXNjcmlwdG9yJ10gPz8gbnVsbDsKICAgICAgICAkb2JqZWN0LT5jZXJ0aWZpY2F0ZU51bWJlciA9ICRkYXRhWydjZXJ0aWZpY2F0ZU51bWJlciddID8/IG51bGw7CiAgICAgICAgJG9iamVjdC0+Y2VydGlmaWNhdGlvblBvbGljeVZlcnNpb24gPSAkZGF0YVsnY2VydGlmaWNhdGlvblBvbGljeVZlcnNpb24nXSA/PyBudWxsOwogICAgICAgICRvYmplY3QtPmNlcnRpZmljYXRpb25SZXF1aXJlbWVudHNWZXJzaW9uID0gJGRhdGFbJ2NlcnRpZmljYXRpb25SZXF1aXJlbWVudHNWZXJzaW9uJ10gPz8gbnVsbDsKCiAgICAgICAgcmV0dXJuICRvYmplY3Q7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICAkZGF0YSA9IFsKICAgICAgICAgICAgJ2NlcnRMZXZlbCcgPT4gJHRoaXMtPmNlcnRMZXZlbCwKICAgICAgICAgICAgJ21vZGFsaXR5JyA9PiAkdGhpcy0+bW9kYWxpdHksCiAgICAgICAgICAgICdlZmZlY3RpdmVEYXRlJyA9PiAkdGhpcy0+ZWZmZWN0aXZlRGF0ZSwKICAgICAgICAgICAgJ2NlcnRpZmljYXRpb25EZXNjcmlwdG9yJyA9PiAkdGhpcy0+Y2VydGlmaWNhdGlvbkRlc2NyaXB0b3IsCiAgICAgICAgICAgICdjZXJ0aWZpY2F0ZU51bWJlcicgPT4gJHRoaXMtPmNlcnRpZmljYXRlTnVtYmVyLAogICAgICAgICAgICAnY2VydGlmaWNhdGlvblBvbGljeVZlcnNpb24nID0+ICR0aGlzLT5jZXJ0aWZpY2F0aW9uUG9saWN5VmVyc2lvbiwKICAgICAgICAgICAgJ2NlcnRpZmljYXRpb25SZXF1aXJlbWVudHNWZXJzaW9uJyA9PiAkdGhpcy0+Y2VydGlmaWNhdGlvblJlcXVpcmVtZW50c1ZlcnNpb24sCiAgICAgICAgXTsKCiAgICAgICAgcmV0dXJuIGFycmF5X2ZpbHRlcigkZGF0YSwgc3RhdGljIGZ1bmN0aW9uICgkdmFyKTogYm9vbCB7cmV0dXJuIG51bGwgIT09ICR2YXI7IH0pOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/CodeAccuracyDescriptor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwoKY2xhc3MgQ29kZUFjY3VyYWN5RGVzY3JpcHRvciBleHRlbmRzIEFic3RyYWN0RGVzY3JpcHRvcgp7CiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByaXZhdGUgJGJhc2U7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcml2YXRlICRtaW5MZW5ndGg7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGludCAkYmFzZSwgaW50ICRtaW5MZW5ndGgsID9pbnQgJG1heFJldHJpZXMgPSBudWxsLCA/aW50ICRibG9ja1Nsb3dkb3duID0gbnVsbCkKICAgIHsKICAgICAgICBBc3NlcnRpb246OmdyZWF0ZXJPckVxdWFsVGhhbigkYmFzZSwgMCwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGRhdGEuIFRoZSB2YWx1ZSBvZiAiYmFzZSIgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKSk7CiAgICAgICAgQXNzZXJ0aW9uOjpncmVhdGVyT3JFcXVhbFRoYW4oJG1pbkxlbmd0aCwgMCwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGRhdGEuIFRoZSB2YWx1ZSBvZiAibWluTGVuZ3RoIiBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpKTsKICAgICAgICAkdGhpcy0+YmFzZSA9ICRiYXNlOwogICAgICAgICR0aGlzLT5taW5MZW5ndGggPSAkbWluTGVuZ3RoOwogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJG1heFJldHJpZXMsICRibG9ja1Nsb3dkb3duKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QmFzZSgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmJhc2U7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE1pbkxlbmd0aCgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm1pbkxlbmd0aDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21BcnJheShhcnJheSAkZGF0YSk6IHNlbGYKICAgIHsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkZGF0YSwgJ2Jhc2UnLCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ1RoZSBwYXJhbWV0ZXIgImJhc2UiIGlzIG1pc3NpbmcnKSk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGRhdGEsICdtaW5MZW5ndGgnLCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ1RoZSBwYXJhbWV0ZXIgIm1pbkxlbmd0aCIgaXMgbWlzc2luZycpKTsKCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKAogICAgICAgICAgICAkZGF0YVsnYmFzZSddLAogICAgICAgICAgICAkZGF0YVsnbWluTGVuZ3RoJ10sCiAgICAgICAgICAgICRkYXRhWydtYXhSZXRyaWVzJ10gPz8gbnVsbCwKICAgICAgICAgICAgJGRhdGFbJ2Jsb2NrU2xvd2Rvd24nXSA/PyBudWxsCiAgICAgICAgKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgICRkYXRhID0gWwogICAgICAgICAgICAnYmFzZScgPT4gJHRoaXMtPmJhc2UsCiAgICAgICAgICAgICdtaW5MZW5ndGgnID0+ICR0aGlzLT5taW5MZW5ndGgsCiAgICAgICAgICAgICdtYXhSZXRyaWVzJyA9PiAkdGhpcy0+Z2V0TWF4UmV0cmllcygpLAogICAgICAgICAgICAnYmxvY2tTbG93ZG93bicgPT4gJHRoaXMtPmdldEJsb2NrU2xvd2Rvd24oKSwKICAgICAgICBdOwoKICAgICAgICByZXR1cm4gVXRpbHM6OmZpbHRlck51bGxWYWx1ZXMoJGRhdGEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/DisplayPNGCharacteristicsDescriptor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgSnNvblNlcmlhbGl6YWJsZTsKdXNlIGZ1bmN0aW9uIFNhZmVcc3ByaW50ZjsKCmNsYXNzIERpc3BsYXlQTkdDaGFyYWN0ZXJpc3RpY3NEZXNjcmlwdG9yIGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByaXZhdGUgJHdpZHRoOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkaGVpZ2h0OwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkYml0RGVwdGg7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcml2YXRlICRjb2xvclR5cGU7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcml2YXRlICRjb21wcmVzc2lvbjsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByaXZhdGUgJGZpbHRlcjsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByaXZhdGUgJGludGVybGFjZTsKCiAgICAvKioKICAgICAqIEB2YXIgUmdiUGFsZXR0ZUVudHJ5W10KICAgICAqLwogICAgcHJpdmF0ZSAkcGx0ZSA9IFtdOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpbnQgJHdpZHRoLCBpbnQgJGhlaWdodCwgaW50ICRiaXREZXB0aCwgaW50ICRjb2xvclR5cGUsIGludCAkY29tcHJlc3Npb24sIGludCAkZmlsdGVyLCBpbnQgJGludGVybGFjZSkKICAgIHsKICAgICAgICBBc3NlcnRpb246OmdyZWF0ZXJPckVxdWFsVGhhbigkd2lkdGgsIDAsIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbignSW52YWxpZCB3aWR0aCcpKTsKICAgICAgICBBc3NlcnRpb246OmdyZWF0ZXJPckVxdWFsVGhhbigkaGVpZ2h0LCAwLCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ0ludmFsaWQgaGVpZ2h0JykpOwogICAgICAgIEFzc2VydGlvbjo6cmFuZ2UoJGJpdERlcHRoLCAwLCAyNTQsIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbignSW52YWxpZCBiaXQgZGVwdGgnKSk7CiAgICAgICAgQXNzZXJ0aW9uOjpyYW5nZSgkY29sb3JUeXBlLCAwLCAyNTQsIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbignSW52YWxpZCBjb2xvciB0eXBlJykpOwogICAgICAgIEFzc2VydGlvbjo6cmFuZ2UoJGNvbXByZXNzaW9uLCAwLCAyNTQsIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbignSW52YWxpZCBjb21wcmVzc2lvbicpKTsKICAgICAgICBBc3NlcnRpb246OnJhbmdlKCRmaWx0ZXIsIDAsIDI1NCwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGZpbHRlcicpKTsKICAgICAgICBBc3NlcnRpb246OnJhbmdlKCRpbnRlcmxhY2UsIDAsIDI1NCwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGludGVybGFjZScpKTsKCiAgICAgICAgJHRoaXMtPndpZHRoID0gJHdpZHRoOwogICAgICAgICR0aGlzLT5oZWlnaHQgPSAkaGVpZ2h0OwogICAgICAgICR0aGlzLT5iaXREZXB0aCA9ICRiaXREZXB0aDsKICAgICAgICAkdGhpcy0+Y29sb3JUeXBlID0gJGNvbG9yVHlwZTsKICAgICAgICAkdGhpcy0+Y29tcHJlc3Npb24gPSAkY29tcHJlc3Npb247CiAgICAgICAgJHRoaXMtPmZpbHRlciA9ICRmaWx0ZXI7CiAgICAgICAgJHRoaXMtPmludGVybGFjZSA9ICRpbnRlcmxhY2U7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFkZFBhbGV0dGUoUmdiUGFsZXR0ZUVudHJ5ICRyZ2JQYWxldHRlRW50cnkpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPnBsdGVbXSA9ICRyZ2JQYWxldHRlRW50cnk7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0V2lkdGgoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT53aWR0aDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGVpZ2h0KCk6IGludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aGVpZ2h0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCaXREZXB0aCgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmJpdERlcHRoOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb2xvclR5cGUoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jb2xvclR5cGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbXByZXNzaW9uKCk6IGludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y29tcHJlc3Npb247CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEZpbHRlcigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmZpbHRlcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW50ZXJsYWNlKCk6IGludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aW50ZXJsYWNlOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBSZ2JQYWxldHRlRW50cnlbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGx0ZSgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cGx0ZTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21BcnJheShhcnJheSAkZGF0YSk6IHNlbGYKICAgIHsKICAgICAgICAkZGF0YSA9IFV0aWxzOjpmaWx0ZXJOdWxsVmFsdWVzKCRkYXRhKTsKICAgICAgICBmb3JlYWNoIChbJ3dpZHRoJywgJ2NvbXByZXNzaW9uJywgJ2hlaWdodCcsICdiaXREZXB0aCcsICdjb2xvclR5cGUnLCAnY29tcHJlc3Npb24nLCAnZmlsdGVyJywgJ2ludGVybGFjZSddIGFzICRrZXkpIHsKICAgICAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGRhdGEsICRrZXksIHNwcmludGYoJ0ludmFsaWQgZGF0YS4gVGhlIGtleSAiJXMiIGlzIG1pc3NpbmcnLCAka2V5KSk7CiAgICAgICAgfQogICAgICAgICRvYmplY3QgPSBuZXcgc2VsZigKICAgICAgICAgICAgJGRhdGFbJ3dpZHRoJ10sCiAgICAgICAgICAgICRkYXRhWydoZWlnaHQnXSwKICAgICAgICAgICAgJGRhdGFbJ2JpdERlcHRoJ10sCiAgICAgICAgICAgICRkYXRhWydjb2xvclR5cGUnXSwKICAgICAgICAgICAgJGRhdGFbJ2NvbXByZXNzaW9uJ10sCiAgICAgICAgICAgICRkYXRhWydmaWx0ZXInXSwKICAgICAgICAgICAgJGRhdGFbJ2ludGVybGFjZSddCiAgICAgICAgKTsKICAgICAgICBpZiAoaXNzZXQoJGRhdGFbJ3BsdGUnXSkpIHsKICAgICAgICAgICAgJHBsdGUgPSAkZGF0YVsncGx0ZSddOwogICAgICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJHBsdGUsIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbignSW52YWxpZCAicGx0ZSIgcGFyYW1ldGVyJykpOwogICAgICAgICAgICBmb3JlYWNoICgkcGx0ZSBhcyAkaXRlbSkgewogICAgICAgICAgICAgICAgJG9iamVjdC0+YWRkUGFsZXR0ZShSZ2JQYWxldHRlRW50cnk6OmNyZWF0ZUZyb21BcnJheSgkaXRlbSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG9iamVjdDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgICRkYXRhID0gWwogICAgICAgICAgICAnd2lkdGgnID0+ICR0aGlzLT53aWR0aCwKICAgICAgICAgICAgJ2hlaWdodCcgPT4gJHRoaXMtPmhlaWdodCwKICAgICAgICAgICAgJ2JpdERlcHRoJyA9PiAkdGhpcy0+Yml0RGVwdGgsCiAgICAgICAgICAgICdjb2xvclR5cGUnID0+ICR0aGlzLT5jb2xvclR5cGUsCiAgICAgICAgICAgICdjb21wcmVzc2lvbicgPT4gJHRoaXMtPmNvbXByZXNzaW9uLAogICAgICAgICAgICAnZmlsdGVyJyA9PiAkdGhpcy0+ZmlsdGVyLAogICAgICAgICAgICAnaW50ZXJsYWNlJyA9PiAkdGhpcy0+aW50ZXJsYWNlLAogICAgICAgICAgICAncGx0ZScgPT4gJHRoaXMtPnBsdGUsCiAgICAgICAgXTsKCiAgICAgICAgcmV0dXJuIFV0aWxzOjpmaWx0ZXJOdWxsVmFsdWVzKCRkYXRhKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/DistantSingleMetadata.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKdXNlIFBzclxIdHRwXENsaWVudFxDbGllbnRJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RGYWN0b3J5SW50ZXJmYWNlOwp1c2UgZnVuY3Rpb24gU2FmZVxqc29uX2RlY29kZTsKdXNlIGZ1bmN0aW9uIFNhZmVcc3ByaW50ZjsKCmNsYXNzIERpc3RhbnRTaW5nbGVNZXRhZGF0YSBleHRlbmRzIFNpbmdsZU1ldGFkYXRhCnsKICAgIC8qKgogICAgICogQHZhciBDbGllbnRJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkaHR0cENsaWVudDsKCiAgICAvKioKICAgICAqIEB2YXIgUmVxdWVzdEZhY3RvcnlJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkcmVxdWVzdEZhY3Rvcnk7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgJGFkZGl0aW9uYWxIZWFkZXJzOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkdXJpOwoKICAgIC8qKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHByaXZhdGUgJGlzQmFzZTY0RW5jb2RlZDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICR1cmksIGJvb2wgJGlzQmFzZTY0RW5jb2RlZCwgQ2xpZW50SW50ZXJmYWNlICRodHRwQ2xpZW50LCBSZXF1ZXN0RmFjdG9yeUludGVyZmFjZSAkcmVxdWVzdEZhY3RvcnksIGFycmF5ICRhZGRpdGlvbmFsSGVhZGVycyA9IFtdKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJHVyaSwgJGlzQmFzZTY0RW5jb2RlZCk7IC8vVXNlbGVzcwogICAgICAgICR0aGlzLT51cmkgPSAkdXJpOwogICAgICAgICR0aGlzLT5pc0Jhc2U2NEVuY29kZWQgPSAkaXNCYXNlNjRFbmNvZGVkOwogICAgICAgICR0aGlzLT5odHRwQ2xpZW50ID0gJGh0dHBDbGllbnQ7CiAgICAgICAgJHRoaXMtPnJlcXVlc3RGYWN0b3J5ID0gJHJlcXVlc3RGYWN0b3J5OwogICAgICAgICR0aGlzLT5hZGRpdGlvbmFsSGVhZGVycyA9ICRhZGRpdGlvbmFsSGVhZGVyczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWV0YWRhdGFTdGF0ZW1lbnQoKTogTWV0YWRhdGFTdGF0ZW1lbnQKICAgIHsKICAgICAgICAkcGF5bG9hZCA9ICR0aGlzLT5mZXRjaCgpOwogICAgICAgICRqc29uID0gJHRoaXMtPmlzQmFzZTY0RW5jb2RlZCA/IEJhc2U2NFVybDo6ZGVjb2RlKCRwYXlsb2FkKSA6ICRwYXlsb2FkOwogICAgICAgICRkYXRhID0ganNvbl9kZWNvZGUoJGpzb24sIHRydWUpOwoKICAgICAgICByZXR1cm4gTWV0YWRhdGFTdGF0ZW1lbnQ6OmNyZWF0ZUZyb21BcnJheSgkZGF0YSk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBmZXRjaCgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcmVxdWVzdCA9ICR0aGlzLT5yZXF1ZXN0RmFjdG9yeS0+Y3JlYXRlUmVxdWVzdCgnR0VUJywgJHRoaXMtPnVyaSk7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmFkZGl0aW9uYWxIZWFkZXJzIGFzICRrID0+ICR2KSB7CiAgICAgICAgICAgICRyZXF1ZXN0ID0gJHJlcXVlc3QtPndpdGhIZWFkZXIoJGssICR2KTsKICAgICAgICB9CiAgICAgICAgJHJlc3BvbnNlID0gJHRoaXMtPmh0dHBDbGllbnQtPnNlbmRSZXF1ZXN0KCRyZXF1ZXN0KTsKICAgICAgICBBc3NlcnRpb246OmVxKDIwMCwgJHJlc3BvbnNlLT5nZXRTdGF0dXNDb2RlKCksIHNwcmludGYoJ1VuYWJsZSB0byBjb250YWN0IHRoZSBzZXJ2ZXIuIFJlc3BvbnNlIGNvZGUgaXMgJWQnLCAkcmVzcG9uc2UtPmdldFN0YXR1c0NvZGUoKSkpOwogICAgICAgICRjb250ZW50ID0gJHJlc3BvbnNlLT5nZXRCb2R5KCktPmdldENvbnRlbnRzKCk7CiAgICAgICAgQXNzZXJ0aW9uOjpub3RFbXB0eSgkY29udGVudCwgJ1VuYWJsZSB0byBjb250YWN0IHRoZSBzZXJ2ZXIuIFRoZSByZXNwb25zZSBoYXMgbm8gY29udGVudCcpOwoKICAgICAgICByZXR1cm4gJGNvbnRlbnQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/EcdaaTrustAnchor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKdXNlIEpzb25TZXJpYWxpemFibGU7CnVzZSBmdW5jdGlvbiBTYWZlXHNwcmludGY7CgpjbGFzcyBFY2RhYVRydXN0QW5jaG9yIGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJFg7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRZOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkYzsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJHN4OwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkc3k7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRHMUN1cnZlOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJFgsIHN0cmluZyAkWSwgc3RyaW5nICRjLCBzdHJpbmcgJHN4LCBzdHJpbmcgJHN5LCBzdHJpbmcgJEcxQ3VydmUpCiAgICB7CiAgICAgICAgJHRoaXMtPlggPSAkWDsKICAgICAgICAkdGhpcy0+WSA9ICRZOwogICAgICAgICR0aGlzLT5jID0gJGM7CiAgICAgICAgJHRoaXMtPnN4ID0gJHN4OwogICAgICAgICR0aGlzLT5zeSA9ICRzeTsKICAgICAgICAkdGhpcy0+RzFDdXJ2ZSA9ICRHMUN1cnZlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRYKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+WDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0WSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPlk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEMoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTeCgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN4OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTeSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN5OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRHMUN1cnZlKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+RzFDdXJ2ZTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21BcnJheShhcnJheSAkZGF0YSk6IHNlbGYKICAgIHsKICAgICAgICAkZGF0YSA9IFV0aWxzOjpmaWx0ZXJOdWxsVmFsdWVzKCRkYXRhKTsKICAgICAgICBmb3JlYWNoIChbJ1gnLCAnWScsICdjJywgJ3N4JywgJ3N5JywgJ0cxQ3VydmUnXSBhcyAka2V5KSB7CiAgICAgICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRkYXRhLCAka2V5LCBzcHJpbnRmKCdJbnZhbGlkIGRhdGEuIFRoZSBrZXkgIiVzIiBpcyBtaXNzaW5nJywgJGtleSkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKAogICAgICAgICAgICBCYXNlNjRVcmw6OmRlY29kZSgkZGF0YVsnWCddKSwKICAgICAgICAgICAgQmFzZTY0VXJsOjpkZWNvZGUoJGRhdGFbJ1knXSksCiAgICAgICAgICAgIEJhc2U2NFVybDo6ZGVjb2RlKCRkYXRhWydjJ10pLAogICAgICAgICAgICBCYXNlNjRVcmw6OmRlY29kZSgkZGF0YVsnc3gnXSksCiAgICAgICAgICAgIEJhc2U2NFVybDo6ZGVjb2RlKCRkYXRhWydzeSddKSwKICAgICAgICAgICAgJGRhdGFbJ0cxQ3VydmUnXQogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICAkZGF0YSA9IFsKICAgICAgICAgICAgJ1gnID0+IEJhc2U2NFVybDo6ZW5jb2RlKCR0aGlzLT5YKSwKICAgICAgICAgICAgJ1knID0+IEJhc2U2NFVybDo6ZW5jb2RlKCR0aGlzLT5ZKSwKICAgICAgICAgICAgJ2MnID0+IEJhc2U2NFVybDo6ZW5jb2RlKCR0aGlzLT5jKSwKICAgICAgICAgICAgJ3N4JyA9PiBCYXNlNjRVcmw6OmVuY29kZSgkdGhpcy0+c3gpLAogICAgICAgICAgICAnc3knID0+IEJhc2U2NFVybDo6ZW5jb2RlKCR0aGlzLT5zeSksCiAgICAgICAgICAgICdHMUN1cnZlJyA9PiAkdGhpcy0+RzFDdXJ2ZSwKICAgICAgICBdOwoKICAgICAgICByZXR1cm4gVXRpbHM6OmZpbHRlck51bGxWYWx1ZXMoJGRhdGEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/ExtensionDescriptor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBmdW5jdGlvbiBhcnJheV9rZXlfZXhpc3RzOwp1c2UgQXNzZXJ0XEFzc2VydGlvbjsKdXNlIEpzb25TZXJpYWxpemFibGU7CgpjbGFzcyBFeHRlbnNpb25EZXNjcmlwdG9yIGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJGlkOwoKICAgIC8qKgogICAgICogQHZhciBpbnR8bnVsbAogICAgICovCiAgICBwcml2YXRlICR0YWc7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGRhdGE7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSAkZmFpbF9pZl91bmtub3duOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJGlkLCA/aW50ICR0YWcsID9zdHJpbmcgJGRhdGEsIGJvb2wgJGZhaWxfaWZfdW5rbm93bikKICAgIHsKICAgICAgICBpZiAobnVsbCAhPT0gJHRhZykgewogICAgICAgICAgICBBc3NlcnRpb246OmdyZWF0ZXJPckVxdWFsVGhhbigkdGFnLCAwLCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ0ludmFsaWQgZGF0YS4gVGhlIHBhcmFtZXRlciAidGFnIiBzaGFsbCBiZSBhIHBvc2l0aXZlIGludGVnZXInKSk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5pZCA9ICRpZDsKICAgICAgICAkdGhpcy0+dGFnID0gJHRhZzsKICAgICAgICAkdGhpcy0+ZGF0YSA9ICRkYXRhOwogICAgICAgICR0aGlzLT5mYWlsX2lmX3Vua25vd24gPSAkZmFpbF9pZl91bmtub3duOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJZCgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmlkOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUYWcoKTogP2ludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dGFnOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREYXRhKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmRhdGE7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzRmFpbElmVW5rbm93bigpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5mYWlsX2lmX3Vua25vd247CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tQXJyYXkoYXJyYXkgJGRhdGEpOiBzZWxmCiAgICB7CiAgICAgICAgJGRhdGEgPSBVdGlsczo6ZmlsdGVyTnVsbFZhbHVlcygkZGF0YSk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGRhdGEsICdpZCcsIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbignSW52YWxpZCBkYXRhLiBUaGUgcGFyYW1ldGVyICJpZCIgaXMgbWlzc2luZycpKTsKICAgICAgICBBc3NlcnRpb246OnN0cmluZygkZGF0YVsnaWQnXSwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGRhdGEuIFRoZSBwYXJhbWV0ZXIgImlkIiBzaGFsbCBiZSBhIHN0cmluZycpKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkZGF0YSwgJ2ZhaWxfaWZfdW5rbm93bicsIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbignSW52YWxpZCBkYXRhLiBUaGUgcGFyYW1ldGVyICJmYWlsX2lmX3Vua25vd24iIGlzIG1pc3NpbmcnKSk7CiAgICAgICAgQXNzZXJ0aW9uOjpib29sZWFuKCRkYXRhWydmYWlsX2lmX3Vua25vd24nXSwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGRhdGEuIFRoZSBwYXJhbWV0ZXIgImZhaWxfaWZfdW5rbm93biIgc2hhbGwgYmUgYSBib29sZWFuJykpOwogICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCd0YWcnLCAkZGF0YSkpIHsKICAgICAgICAgICAgQXNzZXJ0aW9uOjppbnRlZ2VyKCRkYXRhWyd0YWcnXSwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGRhdGEuIFRoZSBwYXJhbWV0ZXIgInRhZyIgc2hhbGwgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJykpOwogICAgICAgIH0KICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygnZGF0YScsICRkYXRhKSkgewogICAgICAgICAgICBBc3NlcnRpb246OnN0cmluZygkZGF0YVsnZGF0YSddLCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ0ludmFsaWQgZGF0YS4gVGhlIHBhcmFtZXRlciAiZGF0YSIgc2hhbGwgYmUgYSBzdHJpbmcnKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoCiAgICAgICAgICAgICRkYXRhWydpZCddLAogICAgICAgICAgICAkZGF0YVsndGFnJ10gPz8gbnVsbCwKICAgICAgICAgICAgJGRhdGFbJ2RhdGEnXSA/PyBudWxsLAogICAgICAgICAgICAkZGF0YVsnZmFpbF9pZl91bmtub3duJ10KICAgICAgICApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCk6IGFycmF5CiAgICB7CiAgICAgICAgJHJlc3VsdCA9IFsKICAgICAgICAgICAgJ2lkJyA9PiAkdGhpcy0+aWQsCiAgICAgICAgICAgICd0YWcnID0+ICR0aGlzLT50YWcsCiAgICAgICAgICAgICdkYXRhJyA9PiAkdGhpcy0+ZGF0YSwKICAgICAgICAgICAgJ2ZhaWxfaWZfdW5rbm93bicgPT4gJHRoaXMtPmZhaWxfaWZfdW5rbm93biwKICAgICAgICBdOwoKICAgICAgICByZXR1cm4gVXRpbHM6OmZpbHRlck51bGxWYWx1ZXMoJHJlc3VsdCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/MetadataService.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKdXNlIGZ1bmN0aW9uIGNvdW50Owp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgZnVuY3Rpb24gaXNfYXJyYXk7CnVzZSBKb3NlXENvbXBvbmVudFxLZXlNYW5hZ2VtZW50XEpXS0ZhY3Rvcnk7CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcQWxnb3JpdGhtXEVTMjU2Owp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXFNlcmlhbGl6ZXJcQ29tcGFjdFNlcmlhbGl6ZXI7CnVzZSBMZWFndWVcVXJpXFVyaVN0cmluZzsKdXNlIExvZ2ljRXhjZXB0aW9uOwp1c2UgUHNyXEh0dHBcQ2xpZW50XENsaWVudEludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEZhY3RvcnlJbnRlcmZhY2U7CnVzZSBQc3JcTG9nXExvZ2dlckludGVyZmFjZTsKdXNlIFBzclxMb2dcTnVsbExvZ2dlcjsKdXNlIGZ1bmN0aW9uIFNhZmVcanNvbl9kZWNvZGU7CnVzZSBmdW5jdGlvbiBTYWZlXHNwcmludGY7CnVzZSBUaHJvd2FibGU7CnVzZSBXZWJhdXRoblxDZXJ0aWZpY2F0ZVRvb2xib3g7CgpjbGFzcyBNZXRhZGF0YVNlcnZpY2UKewogICAgLyoqCiAgICAgKiBAdmFyIENsaWVudEludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRodHRwQ2xpZW50OwoKICAgIC8qKgogICAgICogQHZhciBSZXF1ZXN0RmFjdG9yeUludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRyZXF1ZXN0RmFjdG9yeTsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSAkYWRkaXRpb25hbFF1ZXJ5U3RyaW5nVmFsdWVzOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICRhZGRpdGlvbmFsSGVhZGVyczsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJHNlcnZpY2VVcmk7CgogICAgLyoqCiAgICAgKiBAdmFyIExvZ2dlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRsb2dnZXI7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkc2VydmljZVVyaSwgQ2xpZW50SW50ZXJmYWNlICRodHRwQ2xpZW50LCBSZXF1ZXN0RmFjdG9yeUludGVyZmFjZSAkcmVxdWVzdEZhY3RvcnksIGFycmF5ICRhZGRpdGlvbmFsUXVlcnlTdHJpbmdWYWx1ZXMgPSBbXSwgYXJyYXkgJGFkZGl0aW9uYWxIZWFkZXJzID0gW10sID9Mb2dnZXJJbnRlcmZhY2UgJGxvZ2dlciA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKDAgIT09IGNvdW50KCRhZGRpdGlvbmFsUXVlcnlTdHJpbmdWYWx1ZXMpKSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgImFkZGl0aW9uYWxRdWVyeVN0cmluZ1ZhbHVlcyIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDQuMC4gUGxlYXNlIHNldCBhbiBlbXB0eSBhcnJheSBpbnN0ZWFkIGFuZCB1cyB0aGUgbWV0aG9kIGBhZGRRdWVyeVN0cmluZ1ZhbHVlc2AuJywgRV9VU0VSX0RFUFJFQ0FURUQpOwogICAgICAgIH0KICAgICAgICBpZiAoMCAhPT0gY291bnQoJGFkZGl0aW9uYWxRdWVyeVN0cmluZ1ZhbHVlcykpIHsKICAgICAgICAgICAgQHRyaWdnZXJfZXJyb3IoJ1RoZSBhcmd1bWVudCAiYWRkaXRpb25hbEhlYWRlcnMiIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjMgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiA0LjAuIFBsZWFzZSBzZXQgYW4gZW1wdHkgYXJyYXkgaW5zdGVhZCBhbmQgdXMgdGhlIG1ldGhvZCBgYWRkSGVhZGVyc2AuJywgRV9VU0VSX0RFUFJFQ0FURUQpOwogICAgICAgIH0KICAgICAgICBpZiAobnVsbCAhPT0gJGxvZ2dlcikgewogICAgICAgICAgICBAdHJpZ2dlcl9lcnJvcignVGhlIGFyZ3VtZW50ICJsb2dnZXIiIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjMgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiA0LjAuIFBsZWFzZSB1c2UgdGhlIG1ldGhvZCAic2V0TG9nZ2VyIiBpbnN0ZWFkLicsIEVfVVNFUl9ERVBSRUNBVEVEKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPnNlcnZpY2VVcmkgPSAkc2VydmljZVVyaTsKICAgICAgICAkdGhpcy0+aHR0cENsaWVudCA9ICRodHRwQ2xpZW50OwogICAgICAgICR0aGlzLT5yZXF1ZXN0RmFjdG9yeSA9ICRyZXF1ZXN0RmFjdG9yeTsKICAgICAgICAkdGhpcy0+YWRkaXRpb25hbFF1ZXJ5U3RyaW5nVmFsdWVzID0gJGFkZGl0aW9uYWxRdWVyeVN0cmluZ1ZhbHVlczsKICAgICAgICAkdGhpcy0+YWRkaXRpb25hbEhlYWRlcnMgPSAkYWRkaXRpb25hbEhlYWRlcnM7CiAgICAgICAgJHRoaXMtPmxvZ2dlciA9ICRsb2dnZXIgPz8gbmV3IE51bGxMb2dnZXIoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkUXVlcnlTdHJpbmdWYWx1ZXMoYXJyYXkgJGFkZGl0aW9uYWxRdWVyeVN0cmluZ1ZhbHVlcyk6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+YWRkaXRpb25hbFF1ZXJ5U3RyaW5nVmFsdWVzID0gJGFkZGl0aW9uYWxRdWVyeVN0cmluZ1ZhbHVlczsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRIZWFkZXJzKGFycmF5ICRhZGRpdGlvbmFsSGVhZGVycyk6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+YWRkaXRpb25hbEhlYWRlcnMgPSAkYWRkaXRpb25hbEhlYWRlcnM7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TG9nZ2VyKExvZ2dlckludGVyZmFjZSAkbG9nZ2VyKTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5sb2dnZXIgPSAkbG9nZ2VyOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGhhcyhzdHJpbmcgJGFhZ3VpZCk6IGJvb2wKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICAkdG9jID0gJHRoaXMtPmZldGNoTWV0YWRhdGFUT0NQYXlsb2FkKCk7CiAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgZm9yZWFjaCAoJHRvYy0+Z2V0RW50cmllcygpIGFzICRlbnRyeSkgewogICAgICAgICAgICBpZiAoJGVudHJ5LT5nZXRBYWd1aWQoKSA9PT0gJGFhZ3VpZCAmJiBudWxsICE9PSAkZW50cnktPmdldFVybCgpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXQoc3RyaW5nICRhYWd1aWQpOiBNZXRhZGF0YVN0YXRlbWVudAogICAgewogICAgICAgICR0b2MgPSAkdGhpcy0+ZmV0Y2hNZXRhZGF0YVRPQ1BheWxvYWQoKTsKICAgICAgICBmb3JlYWNoICgkdG9jLT5nZXRFbnRyaWVzKCkgYXMgJGVudHJ5KSB7CiAgICAgICAgICAgIGlmICgkZW50cnktPmdldEFhZ3VpZCgpID09PSAkYWFndWlkICYmIG51bGwgIT09ICRlbnRyeS0+Z2V0VXJsKCkpIHsKICAgICAgICAgICAgICAgICRtZHMgPSAkdGhpcy0+ZmV0Y2hNZXRhZGF0YVN0YXRlbWVudEZvcigkZW50cnkpOwogICAgICAgICAgICAgICAgJG1kcwogICAgICAgICAgICAgICAgICAgIC0+c2V0U3RhdHVzUmVwb3J0cygkZW50cnktPmdldFN0YXR1c1JlcG9ydHMoKSkKICAgICAgICAgICAgICAgICAgICAtPnNldFJvb3RDZXJ0aWZpY2F0ZXMoJHRvYy0+Z2V0Um9vdENlcnRpZmljYXRlcygpKQogICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgIHJldHVybiAkbWRzOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoJ1RoZSBNZXRhZGF0YSBTdGF0ZW1lbnQgd2l0aCBBQUdVSUQgIiVzIiBpcyBtaXNzaW5nJywgJGFhZ3VpZCkpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZCBzaW5jZSB2My4zIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdjQuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWV0YWRhdGFTdGF0ZW1lbnRGb3IoTWV0YWRhdGFUT0NQYXlsb2FkRW50cnkgJGVudHJ5LCBzdHJpbmcgJGhhc2hpbmdGdW5jdGlvbiA9ICdzaGEyNTYnKTogTWV0YWRhdGFTdGF0ZW1lbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmZldGNoTWV0YWRhdGFTdGF0ZW1lbnRGb3IoJGVudHJ5LCAkaGFzaGluZ0Z1bmN0aW9uKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZmV0Y2hNZXRhZGF0YVN0YXRlbWVudEZvcihNZXRhZGF0YVRPQ1BheWxvYWRFbnRyeSAkZW50cnksIHN0cmluZyAkaGFzaGluZ0Z1bmN0aW9uID0gJ3NoYTI1NicpOiBNZXRhZGF0YVN0YXRlbWVudAogICAgewogICAgICAgICR0aGlzLT5sb2dnZXItPmluZm8oJ1RyeWluZyB0byBnZXQgdGhlIG1ldGFkYXRhIHN0YXRlbWVudCBmb3IgYSBnaXZlbiBlbnRyeScsIFsnZW50cnknID0+ICRlbnRyeV0pOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRoYXNoID0gJGVudHJ5LT5nZXRIYXNoKCk7CiAgICAgICAgICAgICR1cmwgPSAkZW50cnktPmdldFVybCgpOwogICAgICAgICAgICBpZiAobnVsbCA9PT0gJGhhc2ggfHwgbnVsbCA9PT0gJHVybCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IExvZ2ljRXhjZXB0aW9uKCdUaGUgTWV0YWRhdGEgU3RhdGVtZW50IGhhcyBub3QgYmVlbiBwdWJsaXNoZWQnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdXJpID0gJHRoaXMtPmJ1aWxkVXJpKCR1cmwpOwogICAgICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPmZldGNoTWV0YWRhdGFTdGF0ZW1lbnQoJHVyaSwgdHJ1ZSwgJGhhc2gsICRoYXNoaW5nRnVuY3Rpb24pOwogICAgICAgICAgICAkdGhpcy0+bG9nZ2VyLT5pbmZvKCdUaGUgbWV0YWRhdGEgc3RhdGVtZW50IGV4aXN0cycpOwogICAgICAgICAgICAkdGhpcy0+bG9nZ2VyLT5kZWJ1ZygnTWV0YWRhdGEgU3RhdGVtZW50JywgWydtZHMnID0+ICRyZXN1bHRdKTsKCiAgICAgICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSAkdGhyb3dhYmxlKSB7CiAgICAgICAgICAgICR0aGlzLT5sb2dnZXItPmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCcsIFsKICAgICAgICAgICAgICAgICdleGNlcHRpb24nID0+ICR0aHJvd2FibGUsCiAgICAgICAgICAgIF0pOwogICAgICAgICAgICB0aHJvdyAkdGhyb3dhYmxlOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgc2luY2UgdjMuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHY0LjAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1ldGFkYXRhVE9DUGF5bG9hZCgpOiBNZXRhZGF0YVRPQ1BheWxvYWQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmZldGNoTWV0YWRhdGFUT0NQYXlsb2FkKCk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBmZXRjaE1ldGFkYXRhVE9DUGF5bG9hZCgpOiBNZXRhZGF0YVRPQ1BheWxvYWQKICAgIHsKICAgICAgICAkdGhpcy0+bG9nZ2VyLT5pbmZvKCdUcnlpbmcgdG8gZ2V0IHRoZSBtZXRhZGF0YSBzZXJ2aWNlIFRPQyBwYXlsb2FkJyk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHVyaSA9ICR0aGlzLT5idWlsZFVyaSgkdGhpcy0+c2VydmljZVVyaSk7CiAgICAgICAgICAgICR0b2MgPSAkdGhpcy0+ZmV0Y2hUYWJsZU9mQ29udGVudCgkdXJpKTsKICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+aW5mbygnVGhlIFRPQyBwYXlsb2FkIGhhcyBiZWVuIHJlY2VpdmVkJyk7CiAgICAgICAgICAgICR0aGlzLT5sb2dnZXItPmRlYnVnKCdUT0MgcGF5bG9hZCcsIFsndG9jJyA9PiAkdG9jXSk7CgogICAgICAgICAgICByZXR1cm4gJHRvYzsKICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgJHRocm93YWJsZSkgewogICAgICAgICAgICAkdGhpcy0+bG9nZ2VyLT5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQnLCBbCiAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJyA9PiAkdGhyb3dhYmxlLAogICAgICAgICAgICBdKTsKICAgICAgICAgICAgdGhyb3cgJHRocm93YWJsZTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBidWlsZFVyaShzdHJpbmcgJHVyaSk6IHN0cmluZwogICAgewogICAgICAgICRwYXJzZWRVcmkgPSBVcmlTdHJpbmc6OnBhcnNlKCR1cmkpOwogICAgICAgICRxdWVyeVN0cmluZyA9ICRwYXJzZWRVcmlbJ3F1ZXJ5J107CiAgICAgICAgJHF1ZXJ5ID0gW107CiAgICAgICAgaWYgKG51bGwgIT09ICRxdWVyeVN0cmluZykgewogICAgICAgICAgICBwYXJzZV9zdHIoJHF1ZXJ5U3RyaW5nLCAkcXVlcnkpOwogICAgICAgIH0KICAgICAgICBmb3JlYWNoICgkdGhpcy0+YWRkaXRpb25hbFF1ZXJ5U3RyaW5nVmFsdWVzIGFzICRrID0+ICR2KSB7CiAgICAgICAgICAgIGlmICghaXNzZXQoJHF1ZXJ5WyRrXSkpIHsKICAgICAgICAgICAgICAgICRxdWVyeVska10gPSAkdjsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghaXNfYXJyYXkoJHF1ZXJ5WyRrXSkpIHsKICAgICAgICAgICAgICAgICRxdWVyeVska10gPSBbJHF1ZXJ5WyRrXSwgJHZdOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHF1ZXJ5WyRrXVtdID0gJHY7CiAgICAgICAgfQogICAgICAgICRwYXJzZWRVcmlbJ3F1ZXJ5J10gPSAwID09PSBjb3VudCgkcXVlcnkpID8gbnVsbCA6IGh0dHBfYnVpbGRfcXVlcnkoJHF1ZXJ5LCAnJywgJyYnLCBQSFBfUVVFUllfUkZDMzk4Nik7CgogICAgICAgIHJldHVybiBVcmlTdHJpbmc6OmJ1aWxkKCRwYXJzZWRVcmkpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gZmV0Y2hUYWJsZU9mQ29udGVudChzdHJpbmcgJHVyaSk6IE1ldGFkYXRhVE9DUGF5bG9hZAogICAgewogICAgICAgICRjb250ZW50ID0gJHRoaXMtPmZldGNoKCR1cmkpOwogICAgICAgICRyb290Q2VydGlmaWNhdGVzID0gW107CiAgICAgICAgJHBheWxvYWQgPSAkdGhpcy0+Z2V0SndzUGF5bG9hZCgkY29udGVudCwgJHJvb3RDZXJ0aWZpY2F0ZXMpOwogICAgICAgICRkYXRhID0ganNvbl9kZWNvZGUoJHBheWxvYWQsIHRydWUpOwoKICAgICAgICAkdG9jID0gTWV0YWRhdGFUT0NQYXlsb2FkOjpjcmVhdGVGcm9tQXJyYXkoJGRhdGEpOwogICAgICAgICR0b2MtPnNldFJvb3RDZXJ0aWZpY2F0ZXMoJHJvb3RDZXJ0aWZpY2F0ZXMpOwoKICAgICAgICByZXR1cm4gJHRvYzsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZldGNoTWV0YWRhdGFTdGF0ZW1lbnQoc3RyaW5nICR1cmksIGJvb2wgJGlzQmFzZTY0VXJsRW5jb2RlZCwgc3RyaW5nICRoYXNoID0gJycsIHN0cmluZyAkaGFzaGluZ0Z1bmN0aW9uID0gJ3NoYTI1NicpOiBNZXRhZGF0YVN0YXRlbWVudAogICAgewogICAgICAgICRwYXlsb2FkID0gJHRoaXMtPmZldGNoKCR1cmkpOwogICAgICAgIGlmICgnJyAhPT0gJGhhc2gpIHsKICAgICAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKGhhc2hfZXF1YWxzKCRoYXNoLCBoYXNoKCRoYXNoaW5nRnVuY3Rpb24sICRwYXlsb2FkLCB0cnVlKSksICdUaGUgaGFzaCBjYW5ub3QgYmUgdmVyaWZpZWQuIFRoZSBtZXRhZGF0YSBzdGF0ZW1lbnQgc2hhbGwgYmUgcmVqZWN0ZWQnKTsKICAgICAgICB9CiAgICAgICAgJGpzb24gPSAkaXNCYXNlNjRVcmxFbmNvZGVkID8gQmFzZTY0VXJsOjpkZWNvZGUoJHBheWxvYWQpIDogJHBheWxvYWQ7CiAgICAgICAgJGRhdGEgPSBqc29uX2RlY29kZSgkanNvbiwgdHJ1ZSk7CgogICAgICAgIHJldHVybiBNZXRhZGF0YVN0YXRlbWVudDo6Y3JlYXRlRnJvbUFycmF5KCRkYXRhKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZldGNoKHN0cmluZyAkdXJpKTogc3RyaW5nCiAgICB7CiAgICAgICAgJHJlcXVlc3QgPSAkdGhpcy0+cmVxdWVzdEZhY3RvcnktPmNyZWF0ZVJlcXVlc3QoJ0dFVCcsICR1cmkpOwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5hZGRpdGlvbmFsSGVhZGVycyBhcyAkayA9PiAkdikgewogICAgICAgICAgICAkcmVxdWVzdCA9ICRyZXF1ZXN0LT53aXRoSGVhZGVyKCRrLCAkdik7CiAgICAgICAgfQogICAgICAgICRyZXNwb25zZSA9ICR0aGlzLT5odHRwQ2xpZW50LT5zZW5kUmVxdWVzdCgkcmVxdWVzdCk7CiAgICAgICAgQXNzZXJ0aW9uOjplcSgyMDAsICRyZXNwb25zZS0+Z2V0U3RhdHVzQ29kZSgpLCBzcHJpbnRmKCdVbmFibGUgdG8gY29udGFjdCB0aGUgc2VydmVyLiBSZXNwb25zZSBjb2RlIGlzICVkJywgJHJlc3BvbnNlLT5nZXRTdGF0dXNDb2RlKCkpKTsKICAgICAgICAkY29udGVudCA9ICRyZXNwb25zZS0+Z2V0Qm9keSgpLT5nZXRDb250ZW50cygpOwogICAgICAgIEFzc2VydGlvbjo6bm90RW1wdHkoJGNvbnRlbnQsICdVbmFibGUgdG8gY29udGFjdCB0aGUgc2VydmVyLiBUaGUgcmVzcG9uc2UgaGFzIG5vIGNvbnRlbnQnKTsKCiAgICAgICAgcmV0dXJuICRjb250ZW50OwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0SndzUGF5bG9hZChzdHJpbmcgJHRva2VuLCBhcnJheSAmJHJvb3RDZXJ0aWZpY2F0ZXMpOiBzdHJpbmcKICAgIHsKICAgICAgICAkandzID0gKG5ldyBDb21wYWN0U2VyaWFsaXplcigpKS0+dW5zZXJpYWxpemUoJHRva2VuKTsKICAgICAgICBBc3NlcnRpb246OmVxKDEsICRqd3MtPmNvdW50U2lnbmF0dXJlcygpLCAnSW52YWxpZCByZXNwb25zZSBmcm9tIHRoZSBtZXRhZGF0YSBzZXJ2aWNlLiBPbmx5IG9uZSBzaWduYXR1cmUgc2hhbGwgYmUgcHJlc2VudC4nKTsKICAgICAgICAkc2lnbmF0dXJlID0gJGp3cy0+Z2V0U2lnbmF0dXJlKDApOwogICAgICAgICRwYXlsb2FkID0gJGp3cy0+Z2V0UGF5bG9hZCgpOwogICAgICAgIEFzc2VydGlvbjo6bm90RW1wdHkoJHBheWxvYWQsICdJbnZhbGlkIHJlc3BvbnNlIGZyb20gdGhlIG1ldGFkYXRhIHNlcnZpY2UuIFRoZSB0b2tlbiBwYXlsb2FkIGlzIGVtcHR5LicpOwogICAgICAgICRoZWFkZXIgPSAkc2lnbmF0dXJlLT5nZXRQcm90ZWN0ZWRIZWFkZXIoKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkaGVhZGVyLCAnYWxnJywgJ1RoZSAiYWxnIiBwYXJhbWV0ZXIgaXMgbWlzc2luZy4nKTsKICAgICAgICBBc3NlcnRpb246OmVxKCRoZWFkZXJbJ2FsZyddLCAnRVMyNTYnLCAnVGhlIGV4cGVjdGVkICJhbGciIHBhcmFtZXRlciB2YWx1ZSBzaG91bGQgYmUgIkVTMjU2Ii4nKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkaGVhZGVyLCAneDVjJywgJ1RoZSAieDVjIiBwYXJhbWV0ZXIgaXMgbWlzc2luZy4nKTsKICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJGhlYWRlclsneDVjJ10sICdUaGUgIng1YyIgcGFyYW1ldGVyIHNob3VsZCBiZSBhbiBhcnJheS4nKTsKICAgICAgICAka2V5ID0gSldLRmFjdG9yeTo6Y3JlYXRlRnJvbVg1QygkaGVhZGVyWyd4NWMnXSk7CiAgICAgICAgJHJvb3RDZXJ0aWZpY2F0ZXMgPSBhcnJheV9tYXAoc3RhdGljIGZ1bmN0aW9uIChzdHJpbmcgJHg1MDkpOiBzdHJpbmcgewogICAgICAgICAgICByZXR1cm4gQ2VydGlmaWNhdGVUb29sYm94OjpmaXhQRU1TdHJ1Y3R1cmUoJHg1MDkpOwogICAgICAgIH0sICRoZWFkZXJbJ3g1YyddKTsKICAgICAgICAkYWxnb3JpdGhtID0gbmV3IEVTMjU2KCk7CiAgICAgICAgJGlzVmFsaWQgPSAkYWxnb3JpdGhtLT52ZXJpZnkoJGtleSwgJHNpZ25hdHVyZS0+Z2V0RW5jb2RlZFByb3RlY3RlZEhlYWRlcigpLicuJy4kandzLT5nZXRFbmNvZGVkUGF5bG9hZCgpLCAkc2lnbmF0dXJlLT5nZXRTaWduYXR1cmUoKSk7CiAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCRpc1ZhbGlkLCAnSW52YWxpZCByZXNwb25zZSBmcm9tIHRoZSBtZXRhZGF0YSBzZXJ2aWNlLiBUaGUgdG9rZW4gc2lnbmF0dXJlIGlzIGludmFsaWQuJyk7CgogICAgICAgIHJldHVybiAkandzLT5nZXRQYXlsb2FkKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/MetadataStatement.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgSnNvblNlcmlhbGl6YWJsZTsKdXNlIGZ1bmN0aW9uIFNhZmVcanNvbl9kZWNvZGU7CnVzZSBmdW5jdGlvbiBTYWZlXHNwcmludGY7CgpjbGFzcyBNZXRhZGF0YVN0YXRlbWVudCBpbXBsZW1lbnRzIEpzb25TZXJpYWxpemFibGUKewogICAgcHVibGljIGNvbnN0IEtFWV9QUk9URUNUSU9OX1NPRlRXQVJFID0gMHgwMDAxOwogICAgcHVibGljIGNvbnN0IEtFWV9QUk9URUNUSU9OX0hBUkRXQVJFID0gMHgwMDAyOwogICAgcHVibGljIGNvbnN0IEtFWV9QUk9URUNUSU9OX1RFRSA9IDB4MDAwNDsKICAgIHB1YmxpYyBjb25zdCBLRVlfUFJPVEVDVElPTl9TRUNVUkVfRUxFTUVOVCA9IDB4MDAwODsKICAgIHB1YmxpYyBjb25zdCBLRVlfUFJPVEVDVElPTl9SRU1PVEVfSEFORExFID0gMHgwMDEwOwoKICAgIHB1YmxpYyBjb25zdCBNQVRDSEVSX1BST1RFQ1RJT05fU09GVFdBUkUgPSAweDAwMDE7CiAgICBwdWJsaWMgY29uc3QgTUFUQ0hFUl9QUk9URUNUSU9OX1RFRSA9IDB4MDAwMjsKICAgIHB1YmxpYyBjb25zdCBNQVRDSEVSX1BST1RFQ1RJT05fT05fQ0hJUCA9IDB4MDAwNDsKCiAgICBwdWJsaWMgY29uc3QgQVRUQUNITUVOVF9ISU5UX0lOVEVSTkFMID0gMHgwMDAxOwogICAgcHVibGljIGNvbnN0IEFUVEFDSE1FTlRfSElOVF9FWFRFUk5BTCA9IDB4MDAwMjsKICAgIHB1YmxpYyBjb25zdCBBVFRBQ0hNRU5UX0hJTlRfV0lSRUQgPSAweDAwMDQ7CiAgICBwdWJsaWMgY29uc3QgQVRUQUNITUVOVF9ISU5UX1dJUkVMRVNTID0gMHgwMDA4OwogICAgcHVibGljIGNvbnN0IEFUVEFDSE1FTlRfSElOVF9ORkMgPSAweDAwMTA7CiAgICBwdWJsaWMgY29uc3QgQVRUQUNITUVOVF9ISU5UX0JMVUVUT09USCA9IDB4MDAyMDsKICAgIHB1YmxpYyBjb25zdCBBVFRBQ0hNRU5UX0hJTlRfTkVUV09SSyA9IDB4MDA0MDsKICAgIHB1YmxpYyBjb25zdCBBVFRBQ0hNRU5UX0hJTlRfUkVBRFkgPSAweDAwODA7CiAgICBwdWJsaWMgY29uc3QgQVRUQUNITUVOVF9ISU5UX1dJRklfRElSRUNUID0gMHgwMTAwOwoKICAgIHB1YmxpYyBjb25zdCBUUkFOU0FDVElPTl9DT05GSVJNQVRJT05fRElTUExBWV9BTlkgPSAweDAwMDE7CiAgICBwdWJsaWMgY29uc3QgVFJBTlNBQ1RJT05fQ09ORklSTUFUSU9OX0RJU1BMQVlfUFJJVklMRUdFRF9TT0ZUV0FSRSA9IDB4MDAwMjsKICAgIHB1YmxpYyBjb25zdCBUUkFOU0FDVElPTl9DT05GSVJNQVRJT05fRElTUExBWV9URUUgPSAweDAwMDQ7CiAgICBwdWJsaWMgY29uc3QgVFJBTlNBQ1RJT05fQ09ORklSTUFUSU9OX0RJU1BMQVlfSEFSRFdBUkUgPSAweDAwMDg7CiAgICBwdWJsaWMgY29uc3QgVFJBTlNBQ1RJT05fQ09ORklSTUFUSU9OX0RJU1BMQVlfUkVNT1RFID0gMHgwMDEwOwoKICAgIHB1YmxpYyBjb25zdCBBTEdfU0lHTl9TRUNQMjU2UjFfRUNEU0FfU0hBMjU2X1JBVyA9IDB4MDAwMTsKICAgIHB1YmxpYyBjb25zdCBBTEdfU0lHTl9TRUNQMjU2UjFfRUNEU0FfU0hBMjU2X0RFUiA9IDB4MDAwMjsKICAgIHB1YmxpYyBjb25zdCBBTEdfU0lHTl9SU0FTU0FfUFNTX1NIQTI1Nl9SQVcgPSAweDAwMDM7CiAgICBwdWJsaWMgY29uc3QgQUxHX1NJR05fUlNBU1NBX1BTU19TSEEyNTZfREVSID0gMHgwMDA0OwogICAgcHVibGljIGNvbnN0IEFMR19TSUdOX1NFQ1AyNTZLMV9FQ0RTQV9TSEEyNTZfUkFXID0gMHgwMDA1OwogICAgcHVibGljIGNvbnN0IEFMR19TSUdOX1NFQ1AyNTZLMV9FQ0RTQV9TSEEyNTZfREVSID0gMHgwMDA2OwogICAgcHVibGljIGNvbnN0IEFMR19TSUdOX1NNMl9TTTNfUkFXID0gMHgwMDA3OwogICAgcHVibGljIGNvbnN0IEFMR19TSUdOX1JTQV9FTVNBX1BLQ1MxX1NIQTI1Nl9SQVcgPSAweDAwMDg7CiAgICBwdWJsaWMgY29uc3QgQUxHX1NJR05fUlNBX0VNU0FfUEtDUzFfU0hBMjU2X0RFUiA9IDB4MDAwOTsKICAgIHB1YmxpYyBjb25zdCBBTEdfU0lHTl9SU0FTU0FfUFNTX1NIQTM4NF9SQVcgPSAweDAwMEE7CiAgICBwdWJsaWMgY29uc3QgQUxHX1NJR05fUlNBU1NBX1BTU19TSEE1MTJfUkFXID0gMHgwMDBCOwogICAgcHVibGljIGNvbnN0IEFMR19TSUdOX1JTQVNTQV9QS0NTVjE1X1NIQTI1Nl9SQVcgPSAweDAwMEM7CiAgICBwdWJsaWMgY29uc3QgQUxHX1NJR05fUlNBU1NBX1BLQ1NWMTVfU0hBMzg0X1JBVyA9IDB4MDAwRDsKICAgIHB1YmxpYyBjb25zdCBBTEdfU0lHTl9SU0FTU0FfUEtDU1YxNV9TSEE1MTJfUkFXID0gMHgwMDBFOwogICAgcHVibGljIGNvbnN0IEFMR19TSUdOX1JTQVNTQV9QS0NTVjE1X1NIQTFfUkFXID0gMHgwMDBGOwogICAgcHVibGljIGNvbnN0IEFMR19TSUdOX1NFQ1AzODRSMV9FQ0RTQV9TSEEzODRfUkFXID0gMHgwMDEwOwogICAgcHVibGljIGNvbnN0IEFMR19TSUdOX1NFQ1A1MjFSMV9FQ0RTQV9TSEE1MTJfUkFXID0gMHgwMDExOwogICAgcHVibGljIGNvbnN0IEFMR19TSUdOX0VEMjU1MTlfRUREU0FfU0hBMjU2X1JBVyA9IDB4MDAxMjsKCiAgICBwdWJsaWMgY29uc3QgQUxHX0tFWV9FQ0NfWDk2Ml9SQVcgPSAweDAxMDA7CiAgICBwdWJsaWMgY29uc3QgQUxHX0tFWV9FQ0NfWDk2Ml9ERVIgPSAweDAxMDE7CiAgICBwdWJsaWMgY29uc3QgQUxHX0tFWV9SU0FfMjA0OF9SQVcgPSAweDAxMDI7CiAgICBwdWJsaWMgY29uc3QgQUxHX0tFWV9SU0FfMjA0OF9ERVIgPSAweDAxMDM7CiAgICBwdWJsaWMgY29uc3QgQUxHX0tFWV9DT1NFID0gMHgwMTA0OwoKICAgIHB1YmxpYyBjb25zdCBBVFRFU1RBVElPTl9CQVNJQ19GVUxMID0gMHgzRTA3OwogICAgcHVibGljIGNvbnN0IEFUVEVTVEFUSU9OX0JBU0lDX1NVUlJPR0FURSA9IDB4M0UwODsKICAgIHB1YmxpYyBjb25zdCBBVFRFU1RBVElPTl9FQ0RBQSA9IDB4M0UwOTsKICAgIHB1YmxpYyBjb25zdCBBVFRFU1RBVElPTl9BVFRDQSA9IDB4M0UwQTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkbGVnYWxIZWFkZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGFhaWQ7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGFhZ3VpZDsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmdbXQogICAgICovCiAgICBwcml2YXRlICRhdHRlc3RhdGlvbkNlcnRpZmljYXRlS2V5SWRlbnRpZmllcnMgPSBbXTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJGRlc2NyaXB0aW9uOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmdbXQogICAgICovCiAgICBwcml2YXRlICRhbHRlcm5hdGl2ZURlc2NyaXB0aW9ucyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkYXV0aGVudGljYXRvclZlcnNpb247CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRwcm90b2NvbEZhbWlseTsKCiAgICAvKioKICAgICAqIEB2YXIgVmVyc2lvbltdCiAgICAgKi8KICAgIHByaXZhdGUgJHVwdiA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRhc3NlcnRpb25TY2hlbWU7CgogICAgLyoqCiAgICAgKiBAdmFyIGludHxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtOwoKICAgIC8qKgogICAgICogQHZhciBpbnRbXQogICAgICovCiAgICBwcml2YXRlICRhdXRoZW50aWNhdGlvbkFsZ29yaXRobXMgPSBbXTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50fG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkcHVibGljS2V5QWxnQW5kRW5jb2Rpbmc7CgogICAgLyoqCiAgICAgKiBAdmFyIGludFtdCiAgICAgKi8KICAgIHByaXZhdGUgJHB1YmxpY0tleUFsZ0FuZEVuY29kaW5ncyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBpbnRbXQogICAgICovCiAgICBwcml2YXRlICRhdHRlc3RhdGlvblR5cGVzID0gW107CgogICAgLyoqCiAgICAgKiBAdmFyIFZlcmlmaWNhdGlvbk1ldGhvZEFORENvbWJpbmF0aW9uc1tdCiAgICAgKi8KICAgIHByaXZhdGUgJHVzZXJWZXJpZmljYXRpb25EZXRhaWxzID0gW107CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcml2YXRlICRrZXlQcm90ZWN0aW9uOwoKICAgIC8qKgogICAgICogQHZhciBib29sfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkaXNLZXlSZXN0cmljdGVkOwoKICAgIC8qKgogICAgICogQHZhciBib29sfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkaXNGcmVzaFVzZXJWZXJpZmljYXRpb25SZXF1aXJlZDsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByaXZhdGUgJG1hdGNoZXJQcm90ZWN0aW9uOwoKICAgIC8qKgogICAgICogQHZhciBpbnR8bnVsbAogICAgICovCiAgICBwcml2YXRlICRjcnlwdG9TdHJlbmd0aDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkb3BlcmF0aW5nRW52OwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkYXR0YWNobWVudEhpbnQgPSAwOwoKICAgIC8qKgogICAgICogQHZhciBib29sfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkaXNTZWNvbmRGYWN0b3JPbmx5OwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkdGNEaXNwbGF5OwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICR0Y0Rpc3BsYXlDb250ZW50VHlwZTsKCiAgICAvKioKICAgICAqIEB2YXIgRGlzcGxheVBOR0NoYXJhY3RlcmlzdGljc0Rlc2NyaXB0b3JbXQogICAgICovCiAgICBwcml2YXRlICR0Y0Rpc3BsYXlQTkdDaGFyYWN0ZXJpc3RpY3MgPSBbXTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nW10KICAgICAqLwogICAgcHJpdmF0ZSAkYXR0ZXN0YXRpb25Sb290Q2VydGlmaWNhdGVzID0gW107CgogICAgLyoqCiAgICAgKiBAdmFyIEVjZGFhVHJ1c3RBbmNob3JbXQogICAgICovCiAgICBwcml2YXRlICRlY2RhYVRydXN0QW5jaG9ycyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRpY29uOwoKICAgIC8qKgogICAgICogQHZhciBFeHRlbnNpb25EZXNjcmlwdG9yW10KICAgICAqLwogICAgcHJpdmF0ZSAkc3VwcG9ydGVkRXh0ZW5zaW9ucyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheTxpbnQsIFN0YXR1c1JlcG9ydD4KICAgICAqLwogICAgcHJpdmF0ZSAkc3RhdHVzUmVwb3J0cyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmdbXQogICAgICovCiAgICBwcml2YXRlICRyb290Q2VydGlmaWNhdGVzID0gW107CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tU3RyaW5nKHN0cmluZyAkc3RhdGVtZW50KTogc2VsZgogICAgewogICAgICAgICRkYXRhID0ganNvbl9kZWNvZGUoJHN0YXRlbWVudCwgdHJ1ZSk7CiAgICAgICAgQXNzZXJ0aW9uOjppc0FycmF5KCRkYXRhLCAnSW52YWxpZCBNZXRhZGF0YSBTdGF0ZW1lbnQnKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZUZyb21BcnJheSgkZGF0YSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldExlZ2FsSGVhZGVyKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmxlZ2FsSGVhZGVyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBYWlkKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmFhaWQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEFhZ3VpZCgpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hYWd1aWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdHRlc3RhdGlvbkNlcnRpZmljYXRlS2V5SWRlbnRpZmllcnMoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmF0dGVzdGF0aW9uQ2VydGlmaWNhdGVLZXlJZGVudGlmaWVyczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGVzY3JpcHRpb24oKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kZXNjcmlwdGlvbjsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEFsdGVybmF0aXZlRGVzY3JpcHRpb25zKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hbHRlcm5hdGl2ZURlc2NyaXB0aW9uczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXV0aGVudGljYXRvclZlcnNpb24oKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hdXRoZW50aWNhdG9yVmVyc2lvbjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UHJvdG9jb2xGYW1pbHkoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5wcm90b2NvbEZhbWlseTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gVmVyc2lvbltdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVcHYoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnVwdjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXNzZXJ0aW9uU2NoZW1lKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmFzc2VydGlvblNjaGVtZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXV0aGVudGljYXRpb25BbGdvcml0aG0oKTogP2ludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YXV0aGVudGljYXRpb25BbGdvcml0aG07CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGludFtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdXRoZW50aWNhdGlvbkFsZ29yaXRobXMoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UHVibGljS2V5QWxnQW5kRW5jb2RpbmcoKTogP2ludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cHVibGljS2V5QWxnQW5kRW5jb2Rpbmc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGludFtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQdWJsaWNLZXlBbGdBbmRFbmNvZGluZ3MoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnB1YmxpY0tleUFsZ0FuZEVuY29kaW5nczsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gaW50W10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEF0dGVzdGF0aW9uVHlwZXMoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmF0dGVzdGF0aW9uVHlwZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIFZlcmlmaWNhdGlvbk1ldGhvZEFORENvbWJpbmF0aW9uc1tdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVc2VyVmVyaWZpY2F0aW9uRGV0YWlscygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dXNlclZlcmlmaWNhdGlvbkRldGFpbHM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEtleVByb3RlY3Rpb24oKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5rZXlQcm90ZWN0aW9uOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc0tleVJlc3RyaWN0ZWQoKTogP2Jvb2wKICAgIHsKICAgICAgICByZXR1cm4gKGJvb2wpICR0aGlzLT5pc0tleVJlc3RyaWN0ZWQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzRnJlc2hVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZWQoKTogP2Jvb2wKICAgIHsKICAgICAgICByZXR1cm4gKGJvb2wpICR0aGlzLT5pc0ZyZXNoVXNlclZlcmlmaWNhdGlvblJlcXVpcmVkOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNYXRjaGVyUHJvdGVjdGlvbigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm1hdGNoZXJQcm90ZWN0aW9uOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDcnlwdG9TdHJlbmd0aCgpOiA/aW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jcnlwdG9TdHJlbmd0aDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0T3BlcmF0aW5nRW52KCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm9wZXJhdGluZ0VudjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXR0YWNobWVudEhpbnQoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hdHRhY2htZW50SGludDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNTZWNvbmRGYWN0b3JPbmx5KCk6ID9ib29sCiAgICB7CiAgICAgICAgcmV0dXJuIChib29sKSAkdGhpcy0+aXNTZWNvbmRGYWN0b3JPbmx5OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUY0Rpc3BsYXkoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50Y0Rpc3BsYXk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFRjRGlzcGxheUNvbnRlbnRUeXBlKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRjRGlzcGxheUNvbnRlbnRUeXBlOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBEaXNwbGF5UE5HQ2hhcmFjdGVyaXN0aWNzRGVzY3JpcHRvcltdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUY0Rpc3BsYXlQTkdDaGFyYWN0ZXJpc3RpY3MoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRjRGlzcGxheVBOR0NoYXJhY3RlcmlzdGljczsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEF0dGVzdGF0aW9uUm9vdENlcnRpZmljYXRlcygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YXR0ZXN0YXRpb25Sb290Q2VydGlmaWNhdGVzOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBFY2RhYVRydXN0QW5jaG9yW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEVjZGFhVHJ1c3RBbmNob3JzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5lY2RhYVRydXN0QW5jaG9yczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SWNvbigpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5pY29uOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBFeHRlbnNpb25EZXNjcmlwdG9yW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN1cHBvcnRlZEV4dGVuc2lvbnM7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tQXJyYXkoYXJyYXkgJGRhdGEpOiBzZWxmCiAgICB7CiAgICAgICAgJG9iamVjdCA9IG5ldyBzZWxmKCk7CiAgICAgICAgZm9yZWFjaCAoWydkZXNjcmlwdGlvbicsICdwcm90b2NvbEZhbWlseSddIGFzICRrZXkpIHsKICAgICAgICAgICAgaWYgKCFpc3NldCgkZGF0YVska2V5XSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oc3ByaW50ZignVGhlIHBhcmFtZXRlciAiJXMiIGlzIG1pc3NpbmcnLCAka2V5KSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJG9iamVjdC0+bGVnYWxIZWFkZXIgPSAkZGF0YVsnbGVnYWxIZWFkZXInXSA/PyBudWxsOwogICAgICAgICRvYmplY3QtPmFhaWQgPSAkZGF0YVsnYWFpZCddID8/IG51bGw7CiAgICAgICAgJG9iamVjdC0+YWFndWlkID0gJGRhdGFbJ2FhZ3VpZCddID8/IG51bGw7CiAgICAgICAgJG9iamVjdC0+YXR0ZXN0YXRpb25DZXJ0aWZpY2F0ZUtleUlkZW50aWZpZXJzID0gJGRhdGFbJ2F0dGVzdGF0aW9uQ2VydGlmaWNhdGVLZXlJZGVudGlmaWVycyddID8/IFtdOwogICAgICAgICRvYmplY3QtPmRlc2NyaXB0aW9uID0gJGRhdGFbJ2Rlc2NyaXB0aW9uJ107CiAgICAgICAgJG9iamVjdC0+YWx0ZXJuYXRpdmVEZXNjcmlwdGlvbnMgPSAkZGF0YVsnYWx0ZXJuYXRpdmVEZXNjcmlwdGlvbnMnXSA/PyBbXTsKICAgICAgICAkb2JqZWN0LT5hdXRoZW50aWNhdG9yVmVyc2lvbiA9ICRkYXRhWydhdXRoZW50aWNhdG9yVmVyc2lvbiddID8/IDA7CiAgICAgICAgJG9iamVjdC0+cHJvdG9jb2xGYW1pbHkgPSAkZGF0YVsncHJvdG9jb2xGYW1pbHknXTsKICAgICAgICBpZiAoaXNzZXQoJGRhdGFbJ3VwdiddKSkgewogICAgICAgICAgICAkdXB2ID0gJGRhdGFbJ3VwdiddOwogICAgICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJHVwdiwgJ0ludmFsaWQgTWV0YWRhdGEgU3RhdGVtZW50Jyk7CiAgICAgICAgICAgIGZvcmVhY2ggKCR1cHYgYXMgJHZhbHVlKSB7CiAgICAgICAgICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJHZhbHVlLCAnSW52YWxpZCBNZXRhZGF0YSBTdGF0ZW1lbnQnKTsKICAgICAgICAgICAgICAgICRvYmplY3QtPnVwdltdID0gVmVyc2lvbjo6Y3JlYXRlRnJvbUFycmF5KCR2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJG9iamVjdC0+YXNzZXJ0aW9uU2NoZW1lID0gJGRhdGFbJ2Fzc2VydGlvblNjaGVtZSddID8/IG51bGw7CiAgICAgICAgJG9iamVjdC0+YXV0aGVudGljYXRpb25BbGdvcml0aG0gPSAkZGF0YVsnYXV0aGVudGljYXRpb25BbGdvcml0aG0nXSA/PyBudWxsOwogICAgICAgICRvYmplY3QtPmF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtcyA9ICRkYXRhWydhdXRoZW50aWNhdGlvbkFsZ29yaXRobXMnXSA/PyBbXTsKICAgICAgICAkb2JqZWN0LT5wdWJsaWNLZXlBbGdBbmRFbmNvZGluZyA9ICRkYXRhWydwdWJsaWNLZXlBbGdBbmRFbmNvZGluZyddID8/IG51bGw7CiAgICAgICAgJG9iamVjdC0+cHVibGljS2V5QWxnQW5kRW5jb2RpbmdzID0gJGRhdGFbJ3B1YmxpY0tleUFsZ0FuZEVuY29kaW5ncyddID8/IFtdOwogICAgICAgICRvYmplY3QtPmF0dGVzdGF0aW9uVHlwZXMgPSAkZGF0YVsnYXR0ZXN0YXRpb25UeXBlcyddID8/IFtdOwogICAgICAgIGlmIChpc3NldCgkZGF0YVsndXNlclZlcmlmaWNhdGlvbkRldGFpbHMnXSkpIHsKICAgICAgICAgICAgJHVzZXJWZXJpZmljYXRpb25EZXRhaWxzID0gJGRhdGFbJ3VzZXJWZXJpZmljYXRpb25EZXRhaWxzJ107CiAgICAgICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkdXNlclZlcmlmaWNhdGlvbkRldGFpbHMsICdJbnZhbGlkIE1ldGFkYXRhIFN0YXRlbWVudCcpOwogICAgICAgICAgICBmb3JlYWNoICgkdXNlclZlcmlmaWNhdGlvbkRldGFpbHMgYXMgJHZhbHVlKSB7CiAgICAgICAgICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJHZhbHVlLCAnSW52YWxpZCBNZXRhZGF0YSBTdGF0ZW1lbnQnKTsKICAgICAgICAgICAgICAgICRvYmplY3QtPnVzZXJWZXJpZmljYXRpb25EZXRhaWxzW10gPSBWZXJpZmljYXRpb25NZXRob2RBTkRDb21iaW5hdGlvbnM6OmNyZWF0ZUZyb21BcnJheSgkdmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRvYmplY3QtPmtleVByb3RlY3Rpb24gPSAkZGF0YVsna2V5UHJvdGVjdGlvbiddID8/IDA7CiAgICAgICAgJG9iamVjdC0+aXNLZXlSZXN0cmljdGVkID0gJGRhdGFbJ2lzS2V5UmVzdHJpY3RlZCddID8/IG51bGw7CiAgICAgICAgJG9iamVjdC0+aXNGcmVzaFVzZXJWZXJpZmljYXRpb25SZXF1aXJlZCA9ICRkYXRhWydpc0ZyZXNoVXNlclZlcmlmaWNhdGlvblJlcXVpcmVkJ10gPz8gbnVsbDsKICAgICAgICAkb2JqZWN0LT5tYXRjaGVyUHJvdGVjdGlvbiA9ICRkYXRhWydtYXRjaGVyUHJvdGVjdGlvbiddID8/IDA7CiAgICAgICAgJG9iamVjdC0+Y3J5cHRvU3RyZW5ndGggPSAkZGF0YVsnY3J5cHRvU3RyZW5ndGgnXSA/PyBudWxsOwogICAgICAgICRvYmplY3QtPm9wZXJhdGluZ0VudiA9ICRkYXRhWydvcGVyYXRpbmdFbnYnXSA/PyBudWxsOwogICAgICAgICRvYmplY3QtPmF0dGFjaG1lbnRIaW50ID0gJGRhdGFbJ2F0dGFjaG1lbnRIaW50J10gPz8gMDsKICAgICAgICAkb2JqZWN0LT5pc1NlY29uZEZhY3Rvck9ubHkgPSAkZGF0YVsnaXNTZWNvbmRGYWN0b3JPbmx5J10gPz8gbnVsbDsKICAgICAgICAkb2JqZWN0LT50Y0Rpc3BsYXkgPSAkZGF0YVsndGNEaXNwbGF5J10gPz8gMDsKICAgICAgICAkb2JqZWN0LT50Y0Rpc3BsYXlDb250ZW50VHlwZSA9ICRkYXRhWyd0Y0Rpc3BsYXlDb250ZW50VHlwZSddID8/IG51bGw7CiAgICAgICAgaWYgKGlzc2V0KCRkYXRhWyd0Y0Rpc3BsYXlQTkdDaGFyYWN0ZXJpc3RpY3MnXSkpIHsKICAgICAgICAgICAgJHRjRGlzcGxheVBOR0NoYXJhY3RlcmlzdGljcyA9ICRkYXRhWyd0Y0Rpc3BsYXlQTkdDaGFyYWN0ZXJpc3RpY3MnXTsKICAgICAgICAgICAgQXNzZXJ0aW9uOjppc0FycmF5KCR0Y0Rpc3BsYXlQTkdDaGFyYWN0ZXJpc3RpY3MsICdJbnZhbGlkIE1ldGFkYXRhIFN0YXRlbWVudCcpOwogICAgICAgICAgICBmb3JlYWNoICgkdGNEaXNwbGF5UE5HQ2hhcmFjdGVyaXN0aWNzIGFzICR0Y0Rpc3BsYXlQTkdDaGFyYWN0ZXJpc3RpYykgewogICAgICAgICAgICAgICAgQXNzZXJ0aW9uOjppc0FycmF5KCR0Y0Rpc3BsYXlQTkdDaGFyYWN0ZXJpc3RpYywgJ0ludmFsaWQgTWV0YWRhdGEgU3RhdGVtZW50Jyk7CiAgICAgICAgICAgICAgICAkb2JqZWN0LT50Y0Rpc3BsYXlQTkdDaGFyYWN0ZXJpc3RpY3NbXSA9IERpc3BsYXlQTkdDaGFyYWN0ZXJpc3RpY3NEZXNjcmlwdG9yOjpjcmVhdGVGcm9tQXJyYXkoJHRjRGlzcGxheVBOR0NoYXJhY3RlcmlzdGljKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkb2JqZWN0LT5hdHRlc3RhdGlvblJvb3RDZXJ0aWZpY2F0ZXMgPSAkZGF0YVsnYXR0ZXN0YXRpb25Sb290Q2VydGlmaWNhdGVzJ10gPz8gW107CiAgICAgICAgJG9iamVjdC0+ZWNkYWFUcnVzdEFuY2hvcnMgPSAkZGF0YVsnZWNkYWFUcnVzdEFuY2hvcnMnXSA/PyBbXTsKICAgICAgICAkb2JqZWN0LT5pY29uID0gJGRhdGFbJ2ljb24nXSA/PyBudWxsOwogICAgICAgIGlmIChpc3NldCgkZGF0YVsnc3VwcG9ydGVkRXh0ZW5zaW9ucyddKSkgewogICAgICAgICAgICAkc3VwcG9ydGVkRXh0ZW5zaW9ucyA9ICRkYXRhWydzdXBwb3J0ZWRFeHRlbnNpb25zJ107CiAgICAgICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkc3VwcG9ydGVkRXh0ZW5zaW9ucywgJ0ludmFsaWQgTWV0YWRhdGEgU3RhdGVtZW50Jyk7CiAgICAgICAgICAgIGZvcmVhY2ggKCRzdXBwb3J0ZWRFeHRlbnNpb25zIGFzICRzdXBwb3J0ZWRFeHRlbnNpb24pIHsKICAgICAgICAgICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkc3VwcG9ydGVkRXh0ZW5zaW9uLCAnSW52YWxpZCBNZXRhZGF0YSBTdGF0ZW1lbnQnKTsKICAgICAgICAgICAgICAgICRvYmplY3QtPnN1cHBvcnRlZEV4dGVuc2lvbnNbXSA9IEV4dGVuc2lvbkRlc2NyaXB0b3I6OmNyZWF0ZUZyb21BcnJheSgkc3VwcG9ydGVkRXh0ZW5zaW9uKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkb2JqZWN0LT5yb290Q2VydGlmaWNhdGVzID0gJGRhdGFbJ3Jvb3RDZXJ0aWZpY2F0ZXMnXSA/PyBbXTsKICAgICAgICBpZiAoaXNzZXQoJGRhdGFbJ3N0YXR1c1JlcG9ydHMnXSkpIHsKICAgICAgICAgICAgJHJlcG9ydHMgPSAkZGF0YVsnc3RhdHVzUmVwb3J0cyddOwogICAgICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJHJlcG9ydHMsICdJbnZhbGlkIE1ldGFkYXRhIFN0YXRlbWVudCcpOwogICAgICAgICAgICBmb3JlYWNoICgkcmVwb3J0cyBhcyAkcmVwb3J0KSB7CiAgICAgICAgICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJHJlcG9ydCwgJ0ludmFsaWQgTWV0YWRhdGEgU3RhdGVtZW50Jyk7CiAgICAgICAgICAgICAgICAkb2JqZWN0LT5zdGF0dXNSZXBvcnRzW10gPSBTdGF0dXNSZXBvcnQ6OmNyZWF0ZUZyb21BcnJheSgkcmVwb3J0KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRvYmplY3Q7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICAkZGF0YSA9IFsKICAgICAgICAgICAgJ2xlZ2FsSGVhZGVyJyA9PiAkdGhpcy0+bGVnYWxIZWFkZXIsCiAgICAgICAgICAgICdhYWlkJyA9PiAkdGhpcy0+YWFpZCwKICAgICAgICAgICAgJ2FhZ3VpZCcgPT4gJHRoaXMtPmFhZ3VpZCwKICAgICAgICAgICAgJ2F0dGVzdGF0aW9uQ2VydGlmaWNhdGVLZXlJZGVudGlmaWVycycgPT4gJHRoaXMtPmF0dGVzdGF0aW9uQ2VydGlmaWNhdGVLZXlJZGVudGlmaWVycywKICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJyA9PiAkdGhpcy0+ZGVzY3JpcHRpb24sCiAgICAgICAgICAgICdhbHRlcm5hdGl2ZURlc2NyaXB0aW9ucycgPT4gJHRoaXMtPmFsdGVybmF0aXZlRGVzY3JpcHRpb25zLAogICAgICAgICAgICAnYXV0aGVudGljYXRvclZlcnNpb24nID0+ICR0aGlzLT5hdXRoZW50aWNhdG9yVmVyc2lvbiwKICAgICAgICAgICAgJ3Byb3RvY29sRmFtaWx5JyA9PiAkdGhpcy0+cHJvdG9jb2xGYW1pbHksCiAgICAgICAgICAgICd1cHYnID0+ICR0aGlzLT51cHYsCiAgICAgICAgICAgICdhc3NlcnRpb25TY2hlbWUnID0+ICR0aGlzLT5hc3NlcnRpb25TY2hlbWUsCiAgICAgICAgICAgICdhdXRoZW50aWNhdGlvbkFsZ29yaXRobScgPT4gJHRoaXMtPmF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtLAogICAgICAgICAgICAnYXV0aGVudGljYXRpb25BbGdvcml0aG1zJyA9PiAkdGhpcy0+YXV0aGVudGljYXRpb25BbGdvcml0aG1zLAogICAgICAgICAgICAncHVibGljS2V5QWxnQW5kRW5jb2RpbmcnID0+ICR0aGlzLT5wdWJsaWNLZXlBbGdBbmRFbmNvZGluZywKICAgICAgICAgICAgJ3B1YmxpY0tleUFsZ0FuZEVuY29kaW5ncycgPT4gJHRoaXMtPnB1YmxpY0tleUFsZ0FuZEVuY29kaW5ncywKICAgICAgICAgICAgJ2F0dGVzdGF0aW9uVHlwZXMnID0+ICR0aGlzLT5hdHRlc3RhdGlvblR5cGVzLAogICAgICAgICAgICAndXNlclZlcmlmaWNhdGlvbkRldGFpbHMnID0+ICR0aGlzLT51c2VyVmVyaWZpY2F0aW9uRGV0YWlscywKICAgICAgICAgICAgJ2tleVByb3RlY3Rpb24nID0+ICR0aGlzLT5rZXlQcm90ZWN0aW9uLAogICAgICAgICAgICAnaXNLZXlSZXN0cmljdGVkJyA9PiAkdGhpcy0+aXNLZXlSZXN0cmljdGVkLAogICAgICAgICAgICAnaXNGcmVzaFVzZXJWZXJpZmljYXRpb25SZXF1aXJlZCcgPT4gJHRoaXMtPmlzRnJlc2hVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZWQsCiAgICAgICAgICAgICdtYXRjaGVyUHJvdGVjdGlvbicgPT4gJHRoaXMtPm1hdGNoZXJQcm90ZWN0aW9uLAogICAgICAgICAgICAnY3J5cHRvU3RyZW5ndGgnID0+ICR0aGlzLT5jcnlwdG9TdHJlbmd0aCwKICAgICAgICAgICAgJ29wZXJhdGluZ0VudicgPT4gJHRoaXMtPm9wZXJhdGluZ0VudiwKICAgICAgICAgICAgJ2F0dGFjaG1lbnRIaW50JyA9PiAkdGhpcy0+YXR0YWNobWVudEhpbnQsCiAgICAgICAgICAgICdpc1NlY29uZEZhY3Rvck9ubHknID0+ICR0aGlzLT5pc1NlY29uZEZhY3Rvck9ubHksCiAgICAgICAgICAgICd0Y0Rpc3BsYXknID0+ICR0aGlzLT50Y0Rpc3BsYXksCiAgICAgICAgICAgICd0Y0Rpc3BsYXlDb250ZW50VHlwZScgPT4gJHRoaXMtPnRjRGlzcGxheUNvbnRlbnRUeXBlLAogICAgICAgICAgICAndGNEaXNwbGF5UE5HQ2hhcmFjdGVyaXN0aWNzJyA9PiBhcnJheV9tYXAoc3RhdGljIGZ1bmN0aW9uIChEaXNwbGF5UE5HQ2hhcmFjdGVyaXN0aWNzRGVzY3JpcHRvciAkb2JqZWN0KTogYXJyYXkgewogICAgICAgICAgICAgICAgcmV0dXJuICRvYmplY3QtPmpzb25TZXJpYWxpemUoKTsKICAgICAgICAgICAgfSwgJHRoaXMtPnRjRGlzcGxheVBOR0NoYXJhY3RlcmlzdGljcyksCiAgICAgICAgICAgICdhdHRlc3RhdGlvblJvb3RDZXJ0aWZpY2F0ZXMnID0+ICR0aGlzLT5hdHRlc3RhdGlvblJvb3RDZXJ0aWZpY2F0ZXMsCiAgICAgICAgICAgICdlY2RhYVRydXN0QW5jaG9ycycgPT4gYXJyYXlfbWFwKHN0YXRpYyBmdW5jdGlvbiAoRWNkYWFUcnVzdEFuY2hvciAkb2JqZWN0KTogYXJyYXkgewogICAgICAgICAgICAgICAgcmV0dXJuICRvYmplY3QtPmpzb25TZXJpYWxpemUoKTsKICAgICAgICAgICAgfSwgJHRoaXMtPmVjZGFhVHJ1c3RBbmNob3JzKSwKICAgICAgICAgICAgJ2ljb24nID0+ICR0aGlzLT5pY29uLAogICAgICAgICAgICAnc3VwcG9ydGVkRXh0ZW5zaW9ucycgPT4gYXJyYXlfbWFwKHN0YXRpYyBmdW5jdGlvbiAoRXh0ZW5zaW9uRGVzY3JpcHRvciAkb2JqZWN0KTogYXJyYXkgewogICAgICAgICAgICAgICAgcmV0dXJuICRvYmplY3QtPmpzb25TZXJpYWxpemUoKTsKICAgICAgICAgICAgfSwgJHRoaXMtPnN1cHBvcnRlZEV4dGVuc2lvbnMpLAogICAgICAgICAgICAncm9vdENlcnRpZmljYXRlcycgPT4gJHRoaXMtPnJvb3RDZXJ0aWZpY2F0ZXMsCiAgICAgICAgICAgICdzdGF0dXNSZXBvcnRzJyA9PiAkdGhpcy0+c3RhdHVzUmVwb3J0cywKICAgICAgICBdOwoKICAgICAgICByZXR1cm4gVXRpbHM6OmZpbHRlck51bGxWYWx1ZXMoJGRhdGEpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBTdGF0dXNSZXBvcnRbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3RhdHVzUmVwb3J0cygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c3RhdHVzUmVwb3J0czsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBTdGF0dXNSZXBvcnRbXSAkc3RhdHVzUmVwb3J0cwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0U3RhdHVzUmVwb3J0cyhhcnJheSAkc3RhdHVzUmVwb3J0cyk6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+c3RhdHVzUmVwb3J0cyA9ICRzdGF0dXNSZXBvcnRzOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSb290Q2VydGlmaWNhdGVzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yb290Q2VydGlmaWNhdGVzOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZ1tdICRyb290Q2VydGlmaWNhdGVzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRSb290Q2VydGlmaWNhdGVzKGFycmF5ICRyb290Q2VydGlmaWNhdGVzKTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5yb290Q2VydGlmaWNhdGVzID0gJHJvb3RDZXJ0aWZpY2F0ZXM7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/MetadataStatementFetcher.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKdXNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcSldLRmFjdG9yeTsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG1cRVMyNTY7CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcU2VyaWFsaXplclxDb21wYWN0U2VyaWFsaXplcjsKdXNlIFBzclxIdHRwXENsaWVudFxDbGllbnRJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RGYWN0b3J5SW50ZXJmYWNlOwp1c2UgZnVuY3Rpb24gU2FmZVxqc29uX2RlY29kZTsKdXNlIGZ1bmN0aW9uIFNhZmVcc3ByaW50ZjsKCi8qKgogKiBAZGVwcmVjYXRlZCBUaGlzIGNsYXNzIGlzIGRlcHJlY2F0ZWQgc2luY2UgdjMuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHY0LjAKICovCmNsYXNzIE1ldGFkYXRhU3RhdGVtZW50RmV0Y2hlcgp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZldGNoVGFibGVPZkNvbnRlbnQoc3RyaW5nICR1cmksIENsaWVudEludGVyZmFjZSAkY2xpZW50LCBSZXF1ZXN0RmFjdG9yeUludGVyZmFjZSAkcmVxdWVzdEZhY3RvcnksIGFycmF5ICRhZGRpdGlvbmFsSGVhZGVycyA9IFtdKTogTWV0YWRhdGFUT0NQYXlsb2FkCiAgICB7CiAgICAgICAgJGNvbnRlbnQgPSBzZWxmOjpmZXRjaCgkdXJpLCAkY2xpZW50LCAkcmVxdWVzdEZhY3RvcnksICRhZGRpdGlvbmFsSGVhZGVycyk7CiAgICAgICAgJHBheWxvYWQgPSBzZWxmOjpnZXRKd3NQYXlsb2FkKCRjb250ZW50KTsKICAgICAgICAkZGF0YSA9IGpzb25fZGVjb2RlKCRwYXlsb2FkLCB0cnVlKTsKCiAgICAgICAgcmV0dXJuIE1ldGFkYXRhVE9DUGF5bG9hZDo6Y3JlYXRlRnJvbUFycmF5KCRkYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZldGNoTWV0YWRhdGFTdGF0ZW1lbnQoc3RyaW5nICR1cmksIGJvb2wgJGlzQmFzZTY0VXJsRW5jb2RlZCwgQ2xpZW50SW50ZXJmYWNlICRjbGllbnQsIFJlcXVlc3RGYWN0b3J5SW50ZXJmYWNlICRyZXF1ZXN0RmFjdG9yeSwgYXJyYXkgJGFkZGl0aW9uYWxIZWFkZXJzID0gW10sIHN0cmluZyAkaGFzaCA9ICcnLCBzdHJpbmcgJGhhc2hpbmdGdW5jdGlvbiA9ICdzaGEyNTYnKTogTWV0YWRhdGFTdGF0ZW1lbnQKICAgIHsKICAgICAgICAkcGF5bG9hZCA9IHNlbGY6OmZldGNoKCR1cmksICRjbGllbnQsICRyZXF1ZXN0RmFjdG9yeSwgJGFkZGl0aW9uYWxIZWFkZXJzKTsKICAgICAgICBpZiAoJycgIT09ICRoYXNoKSB7CiAgICAgICAgICAgIEFzc2VydGlvbjo6dHJ1ZShoYXNoX2VxdWFscygkaGFzaCwgaGFzaCgkaGFzaGluZ0Z1bmN0aW9uLCAkcGF5bG9hZCwgdHJ1ZSkpLCAnVGhlIGhhc2ggY2Fubm90IGJlIHZlcmlmaWVkLiBUaGUgbWV0YWRhdGEgc3RhdGVtZW50IHNoYWxsIGJlIHJlamVjdGVkJyk7CiAgICAgICAgfQogICAgICAgICRqc29uID0gJGlzQmFzZTY0VXJsRW5jb2RlZCA/IEJhc2U2NFVybDo6ZGVjb2RlKCRwYXlsb2FkKSA6ICRwYXlsb2FkOwogICAgICAgICRkYXRhID0ganNvbl9kZWNvZGUoJGpzb24sIHRydWUpOwoKICAgICAgICByZXR1cm4gTWV0YWRhdGFTdGF0ZW1lbnQ6OmNyZWF0ZUZyb21BcnJheSgkZGF0YSk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZmV0Y2goc3RyaW5nICR1cmksIENsaWVudEludGVyZmFjZSAkY2xpZW50LCBSZXF1ZXN0RmFjdG9yeUludGVyZmFjZSAkcmVxdWVzdEZhY3RvcnksIGFycmF5ICRhZGRpdGlvbmFsSGVhZGVycyA9IFtdKTogc3RyaW5nCiAgICB7CiAgICAgICAgJHJlcXVlc3QgPSAkcmVxdWVzdEZhY3RvcnktPmNyZWF0ZVJlcXVlc3QoJ0dFVCcsICR1cmkpOwogICAgICAgIGZvcmVhY2ggKCRhZGRpdGlvbmFsSGVhZGVycyBhcyAkayA9PiAkdikgewogICAgICAgICAgICAkcmVxdWVzdCA9ICRyZXF1ZXN0LT53aXRoSGVhZGVyKCRrLCAkdik7CiAgICAgICAgfQogICAgICAgICRyZXNwb25zZSA9ICRjbGllbnQtPnNlbmRSZXF1ZXN0KCRyZXF1ZXN0KTsKICAgICAgICBBc3NlcnRpb246OmVxKDIwMCwgJHJlc3BvbnNlLT5nZXRTdGF0dXNDb2RlKCksIHNwcmludGYoJ1VuYWJsZSB0byBjb250YWN0IHRoZSBzZXJ2ZXIuIFJlc3BvbnNlIGNvZGUgaXMgJWQnLCAkcmVzcG9uc2UtPmdldFN0YXR1c0NvZGUoKSkpOwogICAgICAgICRjb250ZW50ID0gJHJlc3BvbnNlLT5nZXRCb2R5KCktPmdldENvbnRlbnRzKCk7CiAgICAgICAgQXNzZXJ0aW9uOjpub3RFbXB0eSgkY29udGVudCwgJ1VuYWJsZSB0byBjb250YWN0IHRoZSBzZXJ2ZXIuIFRoZSByZXNwb25zZSBoYXMgbm8gY29udGVudCcpOwoKICAgICAgICByZXR1cm4gJGNvbnRlbnQ7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZ2V0SndzUGF5bG9hZChzdHJpbmcgJHRva2VuKTogc3RyaW5nCiAgICB7CiAgICAgICAgJGp3cyA9IChuZXcgQ29tcGFjdFNlcmlhbGl6ZXIoKSktPnVuc2VyaWFsaXplKCR0b2tlbik7CiAgICAgICAgQXNzZXJ0aW9uOjplcSgxLCAkandzLT5jb3VudFNpZ25hdHVyZXMoKSwgJ0ludmFsaWQgcmVzcG9uc2UgZnJvbSB0aGUgbWV0YWRhdGEgc2VydmljZS4gT25seSBvbmUgc2lnbmF0dXJlIHNoYWxsIGJlIHByZXNlbnQuJyk7CiAgICAgICAgJHNpZ25hdHVyZSA9ICRqd3MtPmdldFNpZ25hdHVyZSgwKTsKICAgICAgICAkcGF5bG9hZCA9ICRqd3MtPmdldFBheWxvYWQoKTsKICAgICAgICBBc3NlcnRpb246Om5vdEVtcHR5KCRwYXlsb2FkLCAnSW52YWxpZCByZXNwb25zZSBmcm9tIHRoZSBtZXRhZGF0YSBzZXJ2aWNlLiBUaGUgdG9rZW4gcGF5bG9hZCBpcyBlbXB0eS4nKTsKICAgICAgICAkaGVhZGVyID0gJHNpZ25hdHVyZS0+Z2V0UHJvdGVjdGVkSGVhZGVyKCk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGhlYWRlciwgJ2FsZycsICdUaGUgImFsZyIgcGFyYW1ldGVyIGlzIG1pc3NpbmcuJyk7CiAgICAgICAgQXNzZXJ0aW9uOjplcSgkaGVhZGVyWydhbGcnXSwgJ0VTMjU2JywgJ1RoZSBleHBlY3RlZCAiYWxnIiBwYXJhbWV0ZXIgdmFsdWUgc2hvdWxkIGJlICJFUzI1NiIuJyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGhlYWRlciwgJ3g1YycsICdUaGUgIng1YyIgcGFyYW1ldGVyIGlzIG1pc3NpbmcuJyk7CiAgICAgICAgQXNzZXJ0aW9uOjppc0FycmF5KCRoZWFkZXJbJ3g1YyddLCAnVGhlICJ4NWMiIHBhcmFtZXRlciBzaG91bGQgYmUgYW4gYXJyYXkuJyk7CiAgICAgICAgJGtleSA9IEpXS0ZhY3Rvcnk6OmNyZWF0ZUZyb21YNUMoJGhlYWRlclsneDVjJ10pOwogICAgICAgICRhbGdvcml0aG0gPSBuZXcgRVMyNTYoKTsKICAgICAgICAkaXNWYWxpZCA9ICRhbGdvcml0aG0tPnZlcmlmeSgka2V5LCAkc2lnbmF0dXJlLT5nZXRFbmNvZGVkUHJvdGVjdGVkSGVhZGVyKCkuJy4nLiRqd3MtPmdldEVuY29kZWRQYXlsb2FkKCksICRzaWduYXR1cmUtPmdldFNpZ25hdHVyZSgpKTsKICAgICAgICBBc3NlcnRpb246OnRydWUoJGlzVmFsaWQsICdJbnZhbGlkIHJlc3BvbnNlIGZyb20gdGhlIG1ldGFkYXRhIHNlcnZpY2UuIFRoZSB0b2tlbiBzaWduYXR1cmUgaXMgaW52YWxpZC4nKTsKCiAgICAgICAgcmV0dXJuICRqd3MtPmdldFBheWxvYWQoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/MetadataStatementRepository.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCmludGVyZmFjZSBNZXRhZGF0YVN0YXRlbWVudFJlcG9zaXRvcnkKewogICAgcHVibGljIGZ1bmN0aW9uIGZpbmRPbmVCeUFBR1VJRChzdHJpbmcgJGFhZ3VpZCk6ID9NZXRhZGF0YVN0YXRlbWVudDsKCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgc2luY2UgdjMuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHY0LjAuIFBsZWFzZSB1c2UgdGhlIG1ldGhvZCAiZ2V0U3RhdHVzUmVwb3J0cygpIiBwcm92aWRlZCBieSB0aGUgTWV0YWRhdGFTdGF0ZW1lbnQgb2JqZWN0CiAgICAgKgogICAgICogQHJldHVybiBTdGF0dXNSZXBvcnRbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmluZFN0YXR1c1JlcG9ydHNCeUFBR1VJRChzdHJpbmcgJGFhZ3VpZCk6IGFycmF5Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/MetadataTOCPayload.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBmdW5jdGlvbiBhcnJheV9rZXlfZXhpc3RzOwp1c2UgQXNzZXJ0XEFzc2VydGlvbjsKdXNlIEpzb25TZXJpYWxpemFibGU7CnVzZSBmdW5jdGlvbiBTYWZlXHNwcmludGY7CgpjbGFzcyBNZXRhZGF0YVRPQ1BheWxvYWQgaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlCnsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRsZWdhbEhlYWRlcjsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByaXZhdGUgJG5vOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkbmV4dFVwZGF0ZTsKCiAgICAvKioKICAgICAqIEB2YXIgTWV0YWRhdGFUT0NQYXlsb2FkRW50cnlbXQogICAgICovCiAgICBwcml2YXRlICRlbnRyaWVzID0gW107CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ1tdCiAgICAgKi8KICAgIHByaXZhdGUgJHJvb3RDZXJ0aWZpY2F0ZXM7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGludCAkbm8sIHN0cmluZyAkbmV4dFVwZGF0ZSwgP3N0cmluZyAkbGVnYWxIZWFkZXIgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT5ubyA9ICRubzsKICAgICAgICAkdGhpcy0+bmV4dFVwZGF0ZSA9ICRuZXh0VXBkYXRlOwogICAgICAgICR0aGlzLT5sZWdhbEhlYWRlciA9ICRsZWdhbEhlYWRlcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkRW50cnkoTWV0YWRhdGFUT0NQYXlsb2FkRW50cnkgJGVudHJ5KTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5lbnRyaWVzW10gPSAkZW50cnk7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGVnYWxIZWFkZXIoKTogP3N0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bGVnYWxIZWFkZXI7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vKCk6IGludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bm87CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE5leHRVcGRhdGUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5uZXh0VXBkYXRlOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBNZXRhZGF0YVRPQ1BheWxvYWRFbnRyeVtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFbnRyaWVzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5lbnRyaWVzOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUFycmF5KGFycmF5ICRkYXRhKTogc2VsZgogICAgewogICAgICAgICRkYXRhID0gVXRpbHM6OmZpbHRlck51bGxWYWx1ZXMoJGRhdGEpOwogICAgICAgIGZvcmVhY2ggKFsnbm8nLCAnbmV4dFVwZGF0ZScsICdlbnRyaWVzJ10gYXMgJGtleSkgewogICAgICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkZGF0YSwgJGtleSwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKHNwcmludGYoJ0ludmFsaWQgZGF0YS4gVGhlIHBhcmFtZXRlciAiJXMiIGlzIG1pc3NpbmcnLCAka2V5KSkpOwogICAgICAgIH0KICAgICAgICBBc3NlcnRpb246OmludGVnZXIoJGRhdGFbJ25vJ10sIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbignSW52YWxpZCBkYXRhLiBUaGUgcGFyYW1ldGVyICJubyIgc2hhbGwgYmUgYW4gaW50ZWdlcicpKTsKICAgICAgICBBc3NlcnRpb246OnN0cmluZygkZGF0YVsnbmV4dFVwZGF0ZSddLCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ0ludmFsaWQgZGF0YS4gVGhlIHBhcmFtZXRlciAibmV4dFVwZGF0ZSIgc2hhbGwgYmUgYSBzdHJpbmcnKSk7CiAgICAgICAgQXNzZXJ0aW9uOjppc0FycmF5KCRkYXRhWydlbnRyaWVzJ10sIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbignSW52YWxpZCBkYXRhLiBUaGUgcGFyYW1ldGVyICJlbnRyaWVzIiBzaGFsbCBiZSBhIG4gYXJyYXkgb2YgZW50cmllcycpKTsKICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygnbGVnYWxIZWFkZXInLCAkZGF0YSkpIHsKICAgICAgICAgICAgQXNzZXJ0aW9uOjpzdHJpbmcoJGRhdGFbJ2xlZ2FsSGVhZGVyJ10sIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbignSW52YWxpZCBkYXRhLiBUaGUgcGFyYW1ldGVyICJsZWdhbEhlYWRlciIgc2hhbGwgYmUgYSBzdHJpbmcnKSk7CiAgICAgICAgfQogICAgICAgICRvYmplY3QgPSBuZXcgc2VsZigKICAgICAgICAgICAgJGRhdGFbJ25vJ10sCiAgICAgICAgICAgICRkYXRhWyduZXh0VXBkYXRlJ10sCiAgICAgICAgICAgICRkYXRhWydsZWdhbEhlYWRlciddID8/IG51bGwKICAgICAgICApOwogICAgICAgIGZvcmVhY2ggKCRkYXRhWydlbnRyaWVzJ10gYXMgJGsgPT4gJGVudHJ5KSB7CiAgICAgICAgICAgICRvYmplY3QtPmFkZEVudHJ5KE1ldGFkYXRhVE9DUGF5bG9hZEVudHJ5OjpjcmVhdGVGcm9tQXJyYXkoJGVudHJ5KSk7CiAgICAgICAgfQogICAgICAgICRvYmplY3QtPnJvb3RDZXJ0aWZpY2F0ZXMgPSAkZGF0YVsncm9vdENlcnRpZmljYXRlcyddID8/IFtdOwoKICAgICAgICByZXR1cm4gJG9iamVjdDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgICRkYXRhID0gWwogICAgICAgICAgICAnbGVnYWxIZWFkZXInID0+ICR0aGlzLT5sZWdhbEhlYWRlciwKICAgICAgICAgICAgJ25leHRVcGRhdGUnID0+ICR0aGlzLT5uZXh0VXBkYXRlLAogICAgICAgICAgICAnbm8nID0+ICR0aGlzLT5ubywKICAgICAgICAgICAgJ2VudHJpZXMnID0+IGFycmF5X21hcChzdGF0aWMgZnVuY3Rpb24gKE1ldGFkYXRhVE9DUGF5bG9hZEVudHJ5ICRvYmplY3QpOiBhcnJheSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJG9iamVjdC0+anNvblNlcmlhbGl6ZSgpOwogICAgICAgICAgICB9LCAkdGhpcy0+ZW50cmllcyksCiAgICAgICAgICAgICdyb290Q2VydGlmaWNhdGVzJyA9PiAkdGhpcy0+cm9vdENlcnRpZmljYXRlcywKICAgICAgICBdOwoKICAgICAgICByZXR1cm4gVXRpbHM6OmZpbHRlck51bGxWYWx1ZXMoJGRhdGEpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Um9vdENlcnRpZmljYXRlcygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cm9vdENlcnRpZmljYXRlczsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmdbXSAkcm9vdENlcnRpZmljYXRlcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Um9vdENlcnRpZmljYXRlcyhhcnJheSAkcm9vdENlcnRpZmljYXRlcyk6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+cm9vdENlcnRpZmljYXRlcyA9ICRyb290Q2VydGlmaWNhdGVzOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/MetadataTOCPayloadEntry.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKdXNlIGZ1bmN0aW9uIGNvdW50Owp1c2UgSnNvblNlcmlhbGl6YWJsZTsKdXNlIExvZ2ljRXhjZXB0aW9uOwoKY2xhc3MgTWV0YWRhdGFUT0NQYXlsb2FkRW50cnkgaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlCnsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRhYWlkOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRhYWd1aWQ7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ1tdCiAgICAgKi8KICAgIHByaXZhdGUgJGF0dGVzdGF0aW9uQ2VydGlmaWNhdGVLZXlJZGVudGlmaWVycyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRoYXNoOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICR1cmw7CgogICAgLyoqCiAgICAgKiBAdmFyIFN0YXR1c1JlcG9ydFtdCiAgICAgKi8KICAgIHByaXZhdGUgJHN0YXR1c1JlcG9ydHMgPSBbXTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJHRpbWVPZkxhc3RTdGF0dXNDaGFuZ2U7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRyb2d1ZUxpc3RVUkw7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRyb2d1ZUxpc3RIYXNoOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCg/c3RyaW5nICRhYWlkLCA/c3RyaW5nICRhYWd1aWQsIGFycmF5ICRhdHRlc3RhdGlvbkNlcnRpZmljYXRlS2V5SWRlbnRpZmllcnMsID9zdHJpbmcgJGhhc2gsID9zdHJpbmcgJHVybCwgc3RyaW5nICR0aW1lT2ZMYXN0U3RhdHVzQ2hhbmdlLCA/c3RyaW5nICRyb2d1ZUxpc3RVUkwsID9zdHJpbmcgJHJvZ3VlTGlzdEhhc2gpCiAgICB7CiAgICAgICAgaWYgKG51bGwgIT09ICRhYWlkICYmIG51bGwgIT09ICRhYWd1aWQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IExvZ2ljRXhjZXB0aW9uKCdBdXRoZW50aWNhdG9ycyBjYW5ub3Qgc3VwcG9ydCBib3RoIEFBSUQgYW5kIEFBR1VJRCcpOwogICAgICAgIH0KICAgICAgICBpZiAobnVsbCA9PT0gJGFhaWQgJiYgbnVsbCA9PT0gJGFhZ3VpZCAmJiAwID09PSBjb3VudCgkYXR0ZXN0YXRpb25DZXJ0aWZpY2F0ZUtleUlkZW50aWZpZXJzKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgTG9naWNFeGNlcHRpb24oJ0lmIG5laXRoZXIgQUFJRCBub3IgQUFHVUlEIGFyZSBzZXQsIHRoZSBhdHRlc3RhdGlvbiBjZXJ0aWZpY2F0ZSBpZGVudGlmaWVyIGxpc3Qgc2hhbGwgbm90IGJlIGVtcHR5Jyk7CiAgICAgICAgfQogICAgICAgIGZvcmVhY2ggKCRhdHRlc3RhdGlvbkNlcnRpZmljYXRlS2V5SWRlbnRpZmllcnMgYXMgJGF0dGVzdGF0aW9uQ2VydGlmaWNhdGVLZXlJZGVudGlmaWVyKSB7CiAgICAgICAgICAgIEFzc2VydGlvbjo6c3RyaW5nKCRhdHRlc3RhdGlvbkNlcnRpZmljYXRlS2V5SWRlbnRpZmllciwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGF0dGVzdGF0aW9uIGNlcnRpZmljYXRlIGlkZW50aWZpZXIuIFNoYWxsIGJlIGEgbGlzdCBvZiBzdHJpbmdzJykpOwogICAgICAgICAgICBBc3NlcnRpb246Om5vdEVtcHR5KCRhdHRlc3RhdGlvbkNlcnRpZmljYXRlS2V5SWRlbnRpZmllciwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGF0dGVzdGF0aW9uIGNlcnRpZmljYXRlIGlkZW50aWZpZXIuIFNoYWxsIGJlIGEgbGlzdCBvZiBzdHJpbmdzJykpOwogICAgICAgICAgICBBc3NlcnRpb246OnJlZ2V4KCRhdHRlc3RhdGlvbkNlcnRpZmljYXRlS2V5SWRlbnRpZmllciwgJy9eWzAtOWEtZl0rJC8nLCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ0ludmFsaWQgYXR0ZXN0YXRpb24gY2VydGlmaWNhdGUgaWRlbnRpZmllci4gU2hhbGwgYmUgYSBsaXN0IG9mIHN0cmluZ3MnKSk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5hYWlkID0gJGFhaWQ7CiAgICAgICAgJHRoaXMtPmFhZ3VpZCA9ICRhYWd1aWQ7CiAgICAgICAgJHRoaXMtPmF0dGVzdGF0aW9uQ2VydGlmaWNhdGVLZXlJZGVudGlmaWVycyA9ICRhdHRlc3RhdGlvbkNlcnRpZmljYXRlS2V5SWRlbnRpZmllcnM7CiAgICAgICAgJHRoaXMtPmhhc2ggPSBCYXNlNjRVcmw6OmRlY29kZSgkaGFzaCk7CiAgICAgICAgJHRoaXMtPnVybCA9ICR1cmw7CiAgICAgICAgJHRoaXMtPnRpbWVPZkxhc3RTdGF0dXNDaGFuZ2UgPSAkdGltZU9mTGFzdFN0YXR1c0NoYW5nZTsKICAgICAgICAkdGhpcy0+cm9ndWVMaXN0VVJMID0gJHJvZ3VlTGlzdFVSTDsKICAgICAgICAkdGhpcy0+cm9ndWVMaXN0SGFzaCA9ICRyb2d1ZUxpc3RIYXNoOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBYWlkKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmFhaWQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEFhZ3VpZCgpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hYWd1aWQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEF0dGVzdGF0aW9uQ2VydGlmaWNhdGVLZXlJZGVudGlmaWVycygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YXR0ZXN0YXRpb25DZXJ0aWZpY2F0ZUtleUlkZW50aWZpZXJzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIYXNoKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmhhc2g7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFVybCgpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51cmw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFkZFN0YXR1c1JlcG9ydHMoU3RhdHVzUmVwb3J0ICRzdGF0dXNSZXBvcnQpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPnN0YXR1c1JlcG9ydHNbXSA9ICRzdGF0dXNSZXBvcnQ7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gU3RhdHVzUmVwb3J0W10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0YXR1c1JlcG9ydHMoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0YXR1c1JlcG9ydHM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVPZkxhc3RTdGF0dXNDaGFuZ2UoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50aW1lT2ZMYXN0U3RhdHVzQ2hhbmdlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSb2d1ZUxpc3RVUkwoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yb2d1ZUxpc3RVUkw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFJvZ3VlTGlzdEhhc2goKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yb2d1ZUxpc3RIYXNoOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUFycmF5KGFycmF5ICRkYXRhKTogc2VsZgogICAgewogICAgICAgICRkYXRhID0gVXRpbHM6OmZpbHRlck51bGxWYWx1ZXMoJGRhdGEpOwogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRkYXRhLCAndGltZU9mTGFzdFN0YXR1c0NoYW5nZScsIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbignSW52YWxpZCBkYXRhLiBUaGUgcGFyYW1ldGVyICJ0aW1lT2ZMYXN0U3RhdHVzQ2hhbmdlIiBpcyBtaXNzaW5nJykpOwogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRkYXRhLCAnc3RhdHVzUmVwb3J0cycsIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbignSW52YWxpZCBkYXRhLiBUaGUgcGFyYW1ldGVyICJzdGF0dXNSZXBvcnRzIiBpcyBtaXNzaW5nJykpOwogICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkZGF0YVsnc3RhdHVzUmVwb3J0cyddLCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ0ludmFsaWQgZGF0YS4gVGhlIHBhcmFtZXRlciAic3RhdHVzUmVwb3J0cyIgc2hhbGwgYmUgYW4gYXJyYXkgb2YgU3RhdHVzUmVwb3J0IG9iamVjdHMnKSk7CiAgICAgICAgJG9iamVjdCA9IG5ldyBzZWxmKAogICAgICAgICRkYXRhWydhYWlkJ10gPz8gbnVsbCwKICAgICAgICAkZGF0YVsnYWFndWlkJ10gPz8gbnVsbCwKICAgICAgICAkZGF0YVsnYXR0ZXN0YXRpb25DZXJ0aWZpY2F0ZUtleUlkZW50aWZpZXJzJ10gPz8gW10sCiAgICAgICAgJGRhdGFbJ2hhc2gnXSA/PyBudWxsLAogICAgICAgICRkYXRhWyd1cmwnXSA/PyBudWxsLAogICAgICAgICAgICAkZGF0YVsndGltZU9mTGFzdFN0YXR1c0NoYW5nZSddLAogICAgICAgICAgICAkZGF0YVsncm9ndWVMaXN0VVJMJ10gPz8gbnVsbCwKICAgICAgICAgICAgJGRhdGFbJ3JvZ3VlTGlzdEhhc2gnXSA/PyBudWxsCiAgICAgICAgKTsKICAgICAgICBmb3JlYWNoICgkZGF0YVsnc3RhdHVzUmVwb3J0cyddIGFzICRzdGF0dXNSZXBvcnQpIHsKICAgICAgICAgICAgJG9iamVjdC0+YWRkU3RhdHVzUmVwb3J0cyhTdGF0dXNSZXBvcnQ6OmNyZWF0ZUZyb21BcnJheSgkc3RhdHVzUmVwb3J0KSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG9iamVjdDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgICRkYXRhID0gWwogICAgICAgICAgICAnYWFpZCcgPT4gJHRoaXMtPmFhaWQsCiAgICAgICAgICAgICdhYWd1aWQnID0+ICR0aGlzLT5hYWd1aWQsCiAgICAgICAgICAgICdhdHRlc3RhdGlvbkNlcnRpZmljYXRlS2V5SWRlbnRpZmllcnMnID0+ICR0aGlzLT5hdHRlc3RhdGlvbkNlcnRpZmljYXRlS2V5SWRlbnRpZmllcnMsCiAgICAgICAgICAgICdoYXNoJyA9PiBCYXNlNjRVcmw6OmVuY29kZSgkdGhpcy0+aGFzaCksCiAgICAgICAgICAgICd1cmwnID0+ICR0aGlzLT51cmwsCiAgICAgICAgICAgICdzdGF0dXNSZXBvcnRzJyA9PiBhcnJheV9tYXAoc3RhdGljIGZ1bmN0aW9uIChTdGF0dXNSZXBvcnQgJG9iamVjdCk6IGFycmF5IHsKICAgICAgICAgICAgICAgIHJldHVybiAkb2JqZWN0LT5qc29uU2VyaWFsaXplKCk7CiAgICAgICAgICAgIH0sICR0aGlzLT5zdGF0dXNSZXBvcnRzKSwKICAgICAgICAgICAgJ3RpbWVPZkxhc3RTdGF0dXNDaGFuZ2UnID0+ICR0aGlzLT50aW1lT2ZMYXN0U3RhdHVzQ2hhbmdlLAogICAgICAgICAgICAncm9ndWVMaXN0VVJMJyA9PiAkdGhpcy0+cm9ndWVMaXN0VVJMLAogICAgICAgICAgICAncm9ndWVMaXN0SGFzaCcgPT4gJHRoaXMtPnJvZ3VlTGlzdEhhc2gsCiAgICAgICAgXTsKCiAgICAgICAgcmV0dXJuIFV0aWxzOjpmaWx0ZXJOdWxsVmFsdWVzKCRkYXRhKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/PatternAccuracyDescriptor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBmdW5jdGlvbiBhcnJheV9rZXlfZXhpc3RzOwp1c2UgQXNzZXJ0XEFzc2VydGlvbjsKdXNlIGZ1bmN0aW9uIFNhZmVcc3ByaW50ZjsKCmNsYXNzIFBhdHRlcm5BY2N1cmFjeURlc2NyaXB0b3IgZXh0ZW5kcyBBYnN0cmFjdERlc2NyaXB0b3IKewogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcml2YXRlICRtaW5Db21wbGV4aXR5OwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpbnQgJG1pbkNvbXBsZXhpdHksID9pbnQgJG1heFJldHJpZXMgPSBudWxsLCA/aW50ICRibG9ja1Nsb3dkb3duID0gbnVsbCkKICAgIHsKICAgICAgICBBc3NlcnRpb246OmdyZWF0ZXJPckVxdWFsVGhhbigkbWluQ29tcGxleGl0eSwgMCwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGRhdGEuIFRoZSB2YWx1ZSBvZiAibWluQ29tcGxleGl0eSIgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKSk7CiAgICAgICAgJHRoaXMtPm1pbkNvbXBsZXhpdHkgPSAkbWluQ29tcGxleGl0eTsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRtYXhSZXRyaWVzLCAkYmxvY2tTbG93ZG93bik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE1pbkNvbXBsZXhpdHkoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5taW5Db21wbGV4aXR5OwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUFycmF5KGFycmF5ICRkYXRhKTogc2VsZgogICAgewogICAgICAgICRkYXRhID0gVXRpbHM6OmZpbHRlck51bGxWYWx1ZXMoJGRhdGEpOwogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRkYXRhLCAnbWluQ29tcGxleGl0eScsIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbignVGhlIGtleSAibWluQ29tcGxleGl0eSIgaXMgbWlzc2luZycpKTsKICAgICAgICBmb3JlYWNoIChbJ21pbkNvbXBsZXhpdHknLCAnbWF4UmV0cmllcycsICdibG9ja1Nsb3dkb3duJ10gYXMgJGtleSkgewogICAgICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkZGF0YSkpIHsKICAgICAgICAgICAgICAgIEFzc2VydGlvbjo6aW50ZWdlcigkZGF0YVska2V5XSwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKHNwcmludGYoJ0ludmFsaWQgZGF0YS4gVGhlIHZhbHVlIG9mICIlcyIgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInLCAka2V5KSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoCiAgICAgICAgICAgICRkYXRhWydtaW5Db21wbGV4aXR5J10sCiAgICAgICAgJGRhdGFbJ21heFJldHJpZXMnXSA/PyBudWxsLAogICAgICAgICRkYXRhWydibG9ja1Nsb3dkb3duJ10gPz8gbnVsbAogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICAkZGF0YSA9IFsKICAgICAgICAgICAgJ21pbkNvbXBsZXhpdHknID0+ICR0aGlzLT5taW5Db21wbGV4aXR5LAogICAgICAgICAgICAnbWF4UmV0cmllcycgPT4gJHRoaXMtPmdldE1heFJldHJpZXMoKSwKICAgICAgICAgICAgJ2Jsb2NrU2xvd2Rvd24nID0+ICR0aGlzLT5nZXRCbG9ja1Nsb3dkb3duKCksCiAgICAgICAgXTsKCiAgICAgICAgcmV0dXJuIFV0aWxzOjpmaWx0ZXJOdWxsVmFsdWVzKCRkYXRhKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/RgbPaletteEntry.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgSnNvblNlcmlhbGl6YWJsZTsKdXNlIGZ1bmN0aW9uIFNhZmVcc3ByaW50ZjsKCmNsYXNzIFJnYlBhbGV0dGVFbnRyeSBpbXBsZW1lbnRzIEpzb25TZXJpYWxpemFibGUKewogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcml2YXRlICRyOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkZzsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByaXZhdGUgJGI7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGludCAkciwgaW50ICRnLCBpbnQgJGIpCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjpyYW5nZSgkciwgMCwgMjU1LCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ1RoZSBrZXkgInIiIGlzIGludmFsaWQnKSk7CiAgICAgICAgQXNzZXJ0aW9uOjpyYW5nZSgkZywgMCwgMjU1LCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ1RoZSBrZXkgImciIGlzIGludmFsaWQnKSk7CiAgICAgICAgQXNzZXJ0aW9uOjpyYW5nZSgkYiwgMCwgMjU1LCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ1RoZSBrZXkgImIiIGlzIGludmFsaWQnKSk7CiAgICAgICAgJHRoaXMtPnIgPSAkcjsKICAgICAgICAkdGhpcy0+ZyA9ICRnOwogICAgICAgICR0aGlzLT5iID0gJGI7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFIoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRHKCk6IGludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmI7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tQXJyYXkoYXJyYXkgJGRhdGEpOiBzZWxmCiAgICB7CiAgICAgICAgZm9yZWFjaCAoWydyJywgJ2cnLCAnYiddIGFzICRrZXkpIHsKICAgICAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGRhdGEsICRrZXksIHNwcmludGYoJ1RoZSBrZXkgIiVzIiBpcyBtaXNzaW5nJywgJGtleSkpOwogICAgICAgICAgICBBc3NlcnRpb246OmludGVnZXIoJGRhdGFbJGtleV0sIHNwcmludGYoJ1RoZSBrZXkgIiVzIiBpcyBpbnZhbGlkJywgJGtleSkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKAogICAgICAgICAgICAkZGF0YVsnciddLAogICAgICAgICAgICAkZGF0YVsnZyddLAogICAgICAgICAgICAkZGF0YVsnYiddCiAgICAgICAgKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdyJyA9PiAkdGhpcy0+ciwKICAgICAgICAgICAgJ2cnID0+ICR0aGlzLT5nLAogICAgICAgICAgICAnYicgPT4gJHRoaXMtPmIsCiAgICAgICAgXTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/RogueListEntry.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgSnNvblNlcmlhbGl6YWJsZTsKCmNsYXNzIFJvZ3VlTGlzdEVudHJ5IGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJHNrOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkZGF0ZTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRzaywgc3RyaW5nICRkYXRlKQogICAgewogICAgICAgICR0aGlzLT5zayA9ICRzazsKICAgICAgICAkdGhpcy0+ZGF0ZSA9ICRkYXRlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaygpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnNrOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREYXRlKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmRhdGU7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tQXJyYXkoYXJyYXkgJGRhdGEpOiBzZWxmCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGRhdGEsICdzaycsICdUaGUga2V5ICJzayIgaXMgbWlzc2luZycpOwogICAgICAgIEFzc2VydGlvbjo6c3RyaW5nKCRkYXRhWydzayddLCAnVGhlIGtleSAic2siIGlzIGludmFsaWQnKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkZGF0YSwgJ2RhdGUnLCAnVGhlIGtleSAiZGF0ZSIgaXMgbWlzc2luZycpOwogICAgICAgIEFzc2VydGlvbjo6c3RyaW5nKCRkYXRhWydkYXRlJ10sICdUaGUga2V5ICJkYXRlIiBpcyBpbnZhbGlkJyk7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigKICAgICAgICAgICAgJGRhdGFbJ3NrJ10sCiAgICAgICAgICAgICRkYXRhWydkYXRlJ10KICAgICAgICApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJ3NrJyA9PiAkdGhpcy0+c2ssCiAgICAgICAgICAgICdkYXRlJyA9PiAkdGhpcy0+ZGF0ZSwKICAgICAgICBdOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/SingleMetadata.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBmdW5jdGlvbiBTYWZlXGJhc2U2NF9kZWNvZGU7CnVzZSBmdW5jdGlvbiBTYWZlXGpzb25fZGVjb2RlOwoKY2xhc3MgU2luZ2xlTWV0YWRhdGEKewogICAgLyoqCiAgICAgKiBAdmFyIE1ldGFkYXRhU3RhdGVtZW50CiAgICAgKi8KICAgIHByaXZhdGUgJHN0YXRlbWVudDsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkZGF0YTsKICAgIC8qKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHByaXZhdGUgJGlzQmFzZTY0RW5jb2RlZDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRkYXRhLCBib29sICRpc0Jhc2U2NEVuY29kZWQpCiAgICB7CiAgICAgICAgJHRoaXMtPmRhdGEgPSAkZGF0YTsKICAgICAgICAkdGhpcy0+aXNCYXNlNjRFbmNvZGVkID0gJGlzQmFzZTY0RW5jb2RlZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWV0YWRhdGFTdGF0ZW1lbnQoKTogTWV0YWRhdGFTdGF0ZW1lbnQKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJHRoaXMtPnN0YXRlbWVudCkgewogICAgICAgICAgICAkanNvbiA9ICR0aGlzLT5kYXRhOwogICAgICAgICAgICBpZiAoJHRoaXMtPmlzQmFzZTY0RW5jb2RlZCkgewogICAgICAgICAgICAgICAgJGpzb24gPSBiYXNlNjRfZGVjb2RlKCR0aGlzLT5kYXRhLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkc3RhdGVtZW50ID0ganNvbl9kZWNvZGUoJGpzb24sIHRydWUpOwogICAgICAgICAgICAkdGhpcy0+c3RhdGVtZW50ID0gTWV0YWRhdGFTdGF0ZW1lbnQ6OmNyZWF0ZUZyb21BcnJheSgkc3RhdGVtZW50KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+c3RhdGVtZW50OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/StatusReport.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgZnVuY3Rpb24gaW5fYXJyYXk7CnVzZSBKc29uU2VyaWFsaXphYmxlOwp1c2UgZnVuY3Rpb24gU2FmZVxzcHJpbnRmOwoKY2xhc3MgU3RhdHVzUmVwb3J0IGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKgogICAgICogQHNlZSBBdXRoZW50aWNhdG9yU3RhdHVzCiAgICAgKi8KICAgIHByaXZhdGUgJHN0YXR1czsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkZWZmZWN0aXZlRGF0ZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkY2VydGlmaWNhdGU7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJHVybDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkY2VydGlmaWNhdGlvbkRlc2NyaXB0b3I7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGNlcnRpZmljYXRlTnVtYmVyOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRjZXJ0aWZpY2F0aW9uUG9saWN5VmVyc2lvbjsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkY2VydGlmaWNhdGlvblJlcXVpcmVtZW50c1ZlcnNpb247CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkc3RhdHVzLCA/c3RyaW5nICRlZmZlY3RpdmVEYXRlLCA/c3RyaW5nICRjZXJ0aWZpY2F0ZSwgP3N0cmluZyAkdXJsLCA/c3RyaW5nICRjZXJ0aWZpY2F0aW9uRGVzY3JpcHRvciwgP3N0cmluZyAkY2VydGlmaWNhdGVOdW1iZXIsID9zdHJpbmcgJGNlcnRpZmljYXRpb25Qb2xpY3lWZXJzaW9uLCA/c3RyaW5nICRjZXJ0aWZpY2F0aW9uUmVxdWlyZW1lbnRzVmVyc2lvbikKICAgIHsKICAgICAgICBBc3NlcnRpb246OmluQXJyYXkoJHN0YXR1cywgQXV0aGVudGljYXRvclN0YXR1czo6bGlzdCgpLCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ1RoZSB2YWx1ZSBvZiB0aGUga2V5ICJzdGF0dXMiIGlzIG5vdCBhY2NlcHRhYmxlJykpOwoKICAgICAgICAkdGhpcy0+c3RhdHVzID0gJHN0YXR1czsKICAgICAgICAkdGhpcy0+ZWZmZWN0aXZlRGF0ZSA9ICRlZmZlY3RpdmVEYXRlOwogICAgICAgICR0aGlzLT5jZXJ0aWZpY2F0ZSA9ICRjZXJ0aWZpY2F0ZTsKICAgICAgICAkdGhpcy0+dXJsID0gJHVybDsKICAgICAgICAkdGhpcy0+Y2VydGlmaWNhdGlvbkRlc2NyaXB0b3IgPSAkY2VydGlmaWNhdGlvbkRlc2NyaXB0b3I7CiAgICAgICAgJHRoaXMtPmNlcnRpZmljYXRlTnVtYmVyID0gJGNlcnRpZmljYXRlTnVtYmVyOwogICAgICAgICR0aGlzLT5jZXJ0aWZpY2F0aW9uUG9saWN5VmVyc2lvbiA9ICRjZXJ0aWZpY2F0aW9uUG9saWN5VmVyc2lvbjsKICAgICAgICAkdGhpcy0+Y2VydGlmaWNhdGlvblJlcXVpcmVtZW50c1ZlcnNpb24gPSAkY2VydGlmaWNhdGlvblJlcXVpcmVtZW50c1ZlcnNpb247CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzQ29tcHJvbWlzZWQoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiBpbl9hcnJheSgkdGhpcy0+c3RhdHVzLCBbCiAgICAgICAgICAgIEF1dGhlbnRpY2F0b3JTdGF0dXM6OkFUVEVTVEFUSU9OX0tFWV9DT01QUk9NSVNFLAogICAgICAgICAgICBBdXRoZW50aWNhdG9yU3RhdHVzOjpVU0VSX0tFWV9QSFlTSUNBTF9DT01QUk9NSVNFLAogICAgICAgICAgICBBdXRoZW50aWNhdG9yU3RhdHVzOjpVU0VSX0tFWV9SRU1PVEVfQ09NUFJPTUlTRSwKICAgICAgICAgICAgQXV0aGVudGljYXRvclN0YXR1czo6VVNFUl9WRVJJRklDQVRJT05fQllQQVNTLAogICAgICAgIF0sIHRydWUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdGF0dXMoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdGF0dXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEVmZmVjdGl2ZURhdGUoKTogP3N0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZWZmZWN0aXZlRGF0ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2VydGlmaWNhdGUoKTogP3N0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2VydGlmaWNhdGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFVybCgpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51cmw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENlcnRpZmljYXRpb25EZXNjcmlwdG9yKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNlcnRpZmljYXRpb25EZXNjcmlwdG9yOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDZXJ0aWZpY2F0ZU51bWJlcigpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jZXJ0aWZpY2F0ZU51bWJlcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2VydGlmaWNhdGlvblBvbGljeVZlcnNpb24oKTogP3N0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2VydGlmaWNhdGlvblBvbGljeVZlcnNpb247CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENlcnRpZmljYXRpb25SZXF1aXJlbWVudHNWZXJzaW9uKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNlcnRpZmljYXRpb25SZXF1aXJlbWVudHNWZXJzaW9uOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUFycmF5KGFycmF5ICRkYXRhKTogc2VsZgogICAgewogICAgICAgICRkYXRhID0gVXRpbHM6OmZpbHRlck51bGxWYWx1ZXMoJGRhdGEpOwogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRkYXRhLCAnc3RhdHVzJywgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdUaGUga2V5ICJzdGF0dXMiIGlzIG1pc3NpbmcnKSk7CiAgICAgICAgZm9yZWFjaCAoWydlZmZlY3RpdmVEYXRlJywgJ2NlcnRpZmljYXRlJywgJ3VybCcsICdjZXJ0aWZpY2F0aW9uRGVzY3JpcHRvcicsICdjZXJ0aWZpY2F0ZU51bWJlcicsICdjZXJ0aWZpY2F0aW9uUG9saWN5VmVyc2lvbicsICdjZXJ0aWZpY2F0aW9uUmVxdWlyZW1lbnRzVmVyc2lvbiddIGFzICRrZXkpIHsKICAgICAgICAgICAgaWYgKGlzc2V0KCRkYXRhWyRrZXldKSkgewogICAgICAgICAgICAgICAgQXNzZXJ0aW9uOjpudWxsT3JTdHJpbmcoJGRhdGFbJGtleV0sIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbihzcHJpbnRmKCdUaGUgdmFsdWUgb2YgdGhlIGtleSAiJXMiIGlzIGludmFsaWQnLCAka2V5KSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoCiAgICAgICAgICAgICRkYXRhWydzdGF0dXMnXSwKICAgICAgICAgICAgJGRhdGFbJ2VmZmVjdGl2ZURhdGUnXSA/PyBudWxsLAogICAgICAgICAgICAkZGF0YVsnY2VydGlmaWNhdGUnXSA/PyBudWxsLAogICAgICAgICAgICAkZGF0YVsndXJsJ10gPz8gbnVsbCwKICAgICAgICAgICAgJGRhdGFbJ2NlcnRpZmljYXRpb25EZXNjcmlwdG9yJ10gPz8gbnVsbCwKICAgICAgICAgICAgJGRhdGFbJ2NlcnRpZmljYXRlTnVtYmVyJ10gPz8gbnVsbCwKICAgICAgICAgICAgJGRhdGFbJ2NlcnRpZmljYXRpb25Qb2xpY3lWZXJzaW9uJ10gPz8gbnVsbCwKICAgICAgICAgICAgJGRhdGFbJ2NlcnRpZmljYXRpb25SZXF1aXJlbWVudHNWZXJzaW9uJ10gPz8gbnVsbAogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICAkZGF0YSA9IFsKICAgICAgICAgICAgJ3N0YXR1cycgPT4gJHRoaXMtPnN0YXR1cywKICAgICAgICAgICAgJ2VmZmVjdGl2ZURhdGUnID0+ICR0aGlzLT5lZmZlY3RpdmVEYXRlLAogICAgICAgICAgICAnY2VydGlmaWNhdGUnID0+ICR0aGlzLT5jZXJ0aWZpY2F0ZSwKICAgICAgICAgICAgJ3VybCcgPT4gJHRoaXMtPnVybCwKICAgICAgICAgICAgJ2NlcnRpZmljYXRpb25EZXNjcmlwdG9yJyA9PiAkdGhpcy0+Y2VydGlmaWNhdGlvbkRlc2NyaXB0b3IsCiAgICAgICAgICAgICdjZXJ0aWZpY2F0ZU51bWJlcicgPT4gJHRoaXMtPmNlcnRpZmljYXRlTnVtYmVyLAogICAgICAgICAgICAnY2VydGlmaWNhdGlvblBvbGljeVZlcnNpb24nID0+ICR0aGlzLT5jZXJ0aWZpY2F0aW9uUG9saWN5VmVyc2lvbiwKICAgICAgICAgICAgJ2NlcnRpZmljYXRpb25SZXF1aXJlbWVudHNWZXJzaW9uJyA9PiAkdGhpcy0+Y2VydGlmaWNhdGlvblJlcXVpcmVtZW50c1ZlcnNpb24sCiAgICAgICAgXTsKCiAgICAgICAgcmV0dXJuIFV0aWxzOjpmaWx0ZXJOdWxsVmFsdWVzKCRkYXRhKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/Utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBMb2dpY0V4Y2VwdGlvbjsKdXNlIFRocm93YWJsZTsKCi8qKgogKiBAaW50ZXJuYWwKICovCmFic3RyYWN0IGNsYXNzIFV0aWxzCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9naWNFeGNlcHRpb24oc3RyaW5nICRtZXNzYWdlLCA/VGhyb3dhYmxlICRwcmV2aW91c0V4Y2VwdGlvbiA9IG51bGwpOiBjYWxsYWJsZQogICAgewogICAgICAgIHJldHVybiBzdGF0aWMgZnVuY3Rpb24gKCkgdXNlICgkbWVzc2FnZSwgJHByZXZpb3VzRXhjZXB0aW9uKTogTG9naWNFeGNlcHRpb24gewogICAgICAgICAgICByZXR1cm4gbmV3IExvZ2ljRXhjZXB0aW9uKCRtZXNzYWdlLCAwLCAkcHJldmlvdXNFeGNlcHRpb24pOwogICAgICAgIH07CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmaWx0ZXJOdWxsVmFsdWVzKGFycmF5ICRkYXRhKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfZmlsdGVyKCRkYXRhLCBzdGF0aWMgZnVuY3Rpb24gKCR2YXIpOiBib29sIHtyZXR1cm4gbnVsbCAhPT0gJHZhcjsgfSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/VerificationMethodANDCombinations.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgSnNvblNlcmlhbGl6YWJsZTsKCmNsYXNzIFZlcmlmaWNhdGlvbk1ldGhvZEFORENvbWJpbmF0aW9ucyBpbXBsZW1lbnRzIEpzb25TZXJpYWxpemFibGUKewogICAgLyoqCiAgICAgKiBAdmFyIFZlcmlmaWNhdGlvbk1ldGhvZERlc2NyaXB0b3JbXQogICAgICovCiAgICBwcml2YXRlICR2ZXJpZmljYXRpb25NZXRob2RzID0gW107CgogICAgcHVibGljIGZ1bmN0aW9uIGFkZFZlcmlmaWNhdGlvbk1ldGhvZERlc2NyaXB0b3IoVmVyaWZpY2F0aW9uTWV0aG9kRGVzY3JpcHRvciAkdmVyaWZpY2F0aW9uTWV0aG9kRGVzY3JpcHRvcik6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+dmVyaWZpY2F0aW9uTWV0aG9kc1tdID0gJHZlcmlmaWNhdGlvbk1ldGhvZERlc2NyaXB0b3I7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gVmVyaWZpY2F0aW9uTWV0aG9kRGVzY3JpcHRvcltdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWZXJpZmljYXRpb25NZXRob2RzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52ZXJpZmljYXRpb25NZXRob2RzOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUFycmF5KGFycmF5ICRkYXRhKTogc2VsZgogICAgewogICAgICAgICRvYmplY3QgPSBuZXcgc2VsZigpOwoKICAgICAgICBmb3JlYWNoICgkZGF0YSBhcyAkZGF0dW0pIHsKICAgICAgICAgICAgQXNzZXJ0aW9uOjppc0FycmF5KCRkYXR1bSwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGRhdGEnKSk7CiAgICAgICAgICAgICRvYmplY3QtPmFkZFZlcmlmaWNhdGlvbk1ldGhvZERlc2NyaXB0b3IoVmVyaWZpY2F0aW9uTWV0aG9kRGVzY3JpcHRvcjo6Y3JlYXRlRnJvbUFycmF5KCRkYXR1bSkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRvYmplY3Q7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfbWFwKHN0YXRpYyBmdW5jdGlvbiAoVmVyaWZpY2F0aW9uTWV0aG9kRGVzY3JpcHRvciAkb2JqZWN0KTogYXJyYXkgewogICAgICAgICAgICByZXR1cm4gJG9iamVjdC0+anNvblNlcmlhbGl6ZSgpOwogICAgICAgIH0sICR0aGlzLT52ZXJpZmljYXRpb25NZXRob2RzKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/VerificationMethodDescriptor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgSnNvblNlcmlhbGl6YWJsZTsKdXNlIGZ1bmN0aW9uIFNhZmVcc3ByaW50ZjsKCmNsYXNzIFZlcmlmaWNhdGlvbk1ldGhvZERlc2NyaXB0b3IgaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlCnsKICAgIHB1YmxpYyBjb25zdCBVU0VSX1ZFUklGWV9QUkVTRU5DRSA9IDB4MDAwMDAwMDE7CiAgICBwdWJsaWMgY29uc3QgVVNFUl9WRVJJRllfRklOR0VSUFJJTlQgPSAweDAwMDAwMDAyOwogICAgcHVibGljIGNvbnN0IFVTRVJfVkVSSUZZX1BBU1NDT0RFID0gMHgwMDAwMDAwNDsKICAgIHB1YmxpYyBjb25zdCBVU0VSX1ZFUklGWV9WT0lDRVBSSU5UID0gMHgwMDAwMDAwODsKICAgIHB1YmxpYyBjb25zdCBVU0VSX1ZFUklGWV9GQUNFUFJJTlQgPSAweDAwMDAwMDEwOwogICAgcHVibGljIGNvbnN0IFVTRVJfVkVSSUZZX0xPQ0FUSU9OID0gMHgwMDAwMDAyMDsKICAgIHB1YmxpYyBjb25zdCBVU0VSX1ZFUklGWV9FWUVQUklOVCA9IDB4MDAwMDAwNDA7CiAgICBwdWJsaWMgY29uc3QgVVNFUl9WRVJJRllfUEFUVEVSTiA9IDB4MDAwMDAwODA7CiAgICBwdWJsaWMgY29uc3QgVVNFUl9WRVJJRllfSEFORFBSSU5UID0gMHgwMDAwMDEwMDsKICAgIHB1YmxpYyBjb25zdCBVU0VSX1ZFUklGWV9OT05FID0gMHgwMDAwMDIwMDsKICAgIHB1YmxpYyBjb25zdCBVU0VSX1ZFUklGWV9BTEwgPSAweDAwMDAwNDAwOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkdXNlclZlcmlmaWNhdGlvbjsKCiAgICAvKioKICAgICAqIEB2YXIgQ29kZUFjY3VyYWN5RGVzY3JpcHRvcnxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGNhRGVzYzsKCiAgICAvKioKICAgICAqIEB2YXIgQmlvbWV0cmljQWNjdXJhY3lEZXNjcmlwdG9yfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkYmFEZXNjOwoKICAgIC8qKgogICAgICogQHZhciBQYXR0ZXJuQWNjdXJhY3lEZXNjcmlwdG9yfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkcGFEZXNjOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpbnQgJHVzZXJWZXJpZmljYXRpb24sID9Db2RlQWNjdXJhY3lEZXNjcmlwdG9yICRjYURlc2MgPSBudWxsLCA/QmlvbWV0cmljQWNjdXJhY3lEZXNjcmlwdG9yICRiYURlc2MgPSBudWxsLCA/UGF0dGVybkFjY3VyYWN5RGVzY3JpcHRvciAkcGFEZXNjID0gbnVsbCkKICAgIHsKICAgICAgICBBc3NlcnRpb246OmdyZWF0ZXJPckVxdWFsVGhhbigkdXNlclZlcmlmaWNhdGlvbiwgMCwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdUaGUgcGFyYW1ldGVyICJ1c2VyVmVyaWZpY2F0aW9uIiBpcyBpbnZhbGlkJykpOwogICAgICAgICR0aGlzLT51c2VyVmVyaWZpY2F0aW9uID0gJHVzZXJWZXJpZmljYXRpb247CiAgICAgICAgJHRoaXMtPmNhRGVzYyA9ICRjYURlc2M7CiAgICAgICAgJHRoaXMtPmJhRGVzYyA9ICRiYURlc2M7CiAgICAgICAgJHRoaXMtPnBhRGVzYyA9ICRwYURlc2M7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFVzZXJWZXJpZmljYXRpb24oKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51c2VyVmVyaWZpY2F0aW9uOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB1c2VyUHJlc2VuY2UoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAwICE9PSAoJHRoaXMtPnVzZXJWZXJpZmljYXRpb24gJiBzZWxmOjpVU0VSX1ZFUklGWV9QUkVTRU5DRSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGZpbmdlcnByaW50KCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gMCAhPT0gKCR0aGlzLT51c2VyVmVyaWZpY2F0aW9uICYgc2VsZjo6VVNFUl9WRVJJRllfRklOR0VSUFJJTlQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBwYXNzY29kZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIDAgIT09ICgkdGhpcy0+dXNlclZlcmlmaWNhdGlvbiAmIHNlbGY6OlVTRVJfVkVSSUZZX1BBU1NDT0RFKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdm9pY2VQcmludCgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIDAgIT09ICgkdGhpcy0+dXNlclZlcmlmaWNhdGlvbiAmIHNlbGY6OlVTRVJfVkVSSUZZX1ZPSUNFUFJJTlQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBmYWNlUHJpbnQoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAwICE9PSAoJHRoaXMtPnVzZXJWZXJpZmljYXRpb24gJiBzZWxmOjpVU0VSX1ZFUklGWV9GQUNFUFJJTlQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBsb2NhdGlvbigpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIDAgIT09ICgkdGhpcy0+dXNlclZlcmlmaWNhdGlvbiAmIHNlbGY6OlVTRVJfVkVSSUZZX0xPQ0FUSU9OKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZXllUHJpbnQoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAwICE9PSAoJHRoaXMtPnVzZXJWZXJpZmljYXRpb24gJiBzZWxmOjpVU0VSX1ZFUklGWV9FWUVQUklOVCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHBhdHRlcm4oKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAwICE9PSAoJHRoaXMtPnVzZXJWZXJpZmljYXRpb24gJiBzZWxmOjpVU0VSX1ZFUklGWV9QQVRURVJOKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFuZHByaW50KCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gMCAhPT0gKCR0aGlzLT51c2VyVmVyaWZpY2F0aW9uICYgc2VsZjo6VVNFUl9WRVJJRllfSEFORFBSSU5UKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbm9uZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIDAgIT09ICgkdGhpcy0+dXNlclZlcmlmaWNhdGlvbiAmIHNlbGY6OlVTRVJfVkVSSUZZX05PTkUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhbGwoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAwICE9PSAoJHRoaXMtPnVzZXJWZXJpZmljYXRpb24gJiBzZWxmOjpVU0VSX1ZFUklGWV9BTEwpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDYURlc2MoKTogP0NvZGVBY2N1cmFjeURlc2NyaXB0b3IKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNhRGVzYzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QmFEZXNjKCk6ID9CaW9tZXRyaWNBY2N1cmFjeURlc2NyaXB0b3IKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmJhRGVzYzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGFEZXNjKCk6ID9QYXR0ZXJuQWNjdXJhY3lEZXNjcmlwdG9yCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5wYURlc2M7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tQXJyYXkoYXJyYXkgJGRhdGEpOiBzZWxmCiAgICB7CiAgICAgICAgJGRhdGEgPSBVdGlsczo6ZmlsdGVyTnVsbFZhbHVlcygkZGF0YSk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGRhdGEsICd1c2VyVmVyaWZpY2F0aW9uJywgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdUaGUgcGFyYW1ldGVyICJ1c2VyVmVyaWZpY2F0aW9uIiBpcyBtaXNzaW5nJykpOwogICAgICAgIEFzc2VydGlvbjo6aW50ZWdlcigkZGF0YVsndXNlclZlcmlmaWNhdGlvbiddLCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ1RoZSBwYXJhbWV0ZXIgInVzZXJWZXJpZmljYXRpb24iIGlzIGludmFsaWQnKSk7CiAgICAgICAgZm9yZWFjaCAoWydjYURlc2MnLCAnYmFEZXNjJywgJ3BhRGVzYyddIGFzICRrZXkpIHsKICAgICAgICAgICAgaWYgKGlzc2V0KCRkYXRhWyRrZXldKSkgewogICAgICAgICAgICAgICAgQXNzZXJ0aW9uOjppc0FycmF5KCRkYXRhWyRrZXldLCBVdGlsczo6bG9naWNFeGNlcHRpb24oc3ByaW50ZignSW52YWxpZCBwYXJhbWV0ZXIgIiVzIicsICRrZXkpKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgc2VsZigKICAgICAgICAgICAgJGRhdGFbJ3VzZXJWZXJpZmljYXRpb24nXSwKICAgICAgICAgICAgaXNzZXQoJGRhdGFbJ2NhRGVzYyddKSA/IENvZGVBY2N1cmFjeURlc2NyaXB0b3I6OmNyZWF0ZUZyb21BcnJheSgkZGF0YVsnY2FEZXNjJ10pIDogbnVsbCwKICAgICAgICAgICAgaXNzZXQoJGRhdGFbJ2JhRGVzYyddKSA/IEJpb21ldHJpY0FjY3VyYWN5RGVzY3JpcHRvcjo6Y3JlYXRlRnJvbUFycmF5KCRkYXRhWydiYURlc2MnXSkgOiBudWxsLAogICAgICAgICAgICBpc3NldCgkZGF0YVsncGFEZXNjJ10pID8gUGF0dGVybkFjY3VyYWN5RGVzY3JpcHRvcjo6Y3JlYXRlRnJvbUFycmF5KCRkYXRhWydwYURlc2MnXSkgOiBudWxsCiAgICAgICAgKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgICRkYXRhID0gWwogICAgICAgICAgICAndXNlclZlcmlmaWNhdGlvbicgPT4gJHRoaXMtPnVzZXJWZXJpZmljYXRpb24sCiAgICAgICAgICAgICdjYURlc2MnID0+IG51bGwgPT09ICR0aGlzLT5jYURlc2MgPyBudWxsIDogJHRoaXMtPmNhRGVzYy0+anNvblNlcmlhbGl6ZSgpLAogICAgICAgICAgICAnYmFEZXNjJyA9PiBudWxsID09PSAkdGhpcy0+YmFEZXNjID8gbnVsbCA6ICR0aGlzLT5iYURlc2MtPmpzb25TZXJpYWxpemUoKSwKICAgICAgICAgICAgJ3BhRGVzYycgPT4gbnVsbCA9PT0gJHRoaXMtPnBhRGVzYyA/IG51bGwgOiAkdGhpcy0+cGFEZXNjLT5qc29uU2VyaWFsaXplKCksCiAgICAgICAgXTsKCiAgICAgICAgcmV0dXJuIFV0aWxzOjpmaWx0ZXJOdWxsVmFsdWVzKCRkYXRhKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/Version.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBmdW5jdGlvbiBhcnJheV9rZXlfZXhpc3RzOwp1c2UgQXNzZXJ0XEFzc2VydGlvbjsKdXNlIEpzb25TZXJpYWxpemFibGU7CnVzZSBMb2dpY0V4Y2VwdGlvbjsKdXNlIGZ1bmN0aW9uIFNhZmVcc3ByaW50ZjsKCmNsYXNzIFZlcnNpb24gaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlCnsKICAgIC8qKgogICAgICogQHZhciBpbnR8bnVsbAogICAgICovCiAgICBwcml2YXRlICRtYWpvcjsKCiAgICAvKioKICAgICAqIEB2YXIgaW50fG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkbWlub3I7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KD9pbnQgJG1ham9yLCA/aW50ICRtaW5vcikKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJG1ham9yICYmIG51bGwgPT09ICRtaW5vcikgewogICAgICAgICAgICB0aHJvdyBuZXcgTG9naWNFeGNlcHRpb24oJ0ludmFsaWQgZGF0YS4gTXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBpdGVtJyk7CiAgICAgICAgfQogICAgICAgIEFzc2VydGlvbjo6Z3JlYXRlck9yRXF1YWxUaGFuKCRtYWpvciwgMCwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGFyZ3VtZW50ICJtYWpvciInKSk7CiAgICAgICAgQXNzZXJ0aW9uOjpncmVhdGVyT3JFcXVhbFRoYW4oJG1pbm9yLCAwLCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ0ludmFsaWQgYXJndW1lbnQgIm1pbm9yIicpKTsKCiAgICAgICAgJHRoaXMtPm1ham9yID0gJG1ham9yOwogICAgICAgICR0aGlzLT5taW5vciA9ICRtaW5vcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWFqb3IoKTogP2ludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bWFqb3I7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE1pbm9yKCk6ID9pbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm1pbm9yOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUFycmF5KGFycmF5ICRkYXRhKTogc2VsZgogICAgewogICAgICAgICRkYXRhID0gVXRpbHM6OmZpbHRlck51bGxWYWx1ZXMoJGRhdGEpOwogICAgICAgIGZvcmVhY2ggKFsnbWFqb3InLCAnbWlub3InXSBhcyAka2V5KSB7CiAgICAgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCRrZXksICRkYXRhKSkgewogICAgICAgICAgICAgICAgQXNzZXJ0aW9uOjppbnRlZ2VyKCRkYXRhWyRrZXldLCBzcHJpbnRmKCdJbnZhbGlkIHZhbHVlIGZvciBrZXkgIiVzIicsICRrZXkpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKAogICAgICAgICAgICAkZGF0YVsnbWFqb3InXSA/PyBudWxsLAogICAgICAgICAgICAkZGF0YVsnbWlub3InXSA/PyBudWxsCiAgICAgICAgKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgICRkYXRhID0gWwogICAgICAgICAgICAnbWFqb3InID0+ICR0aGlzLT5tYWpvciwKICAgICAgICAgICAgJ21pbm9yJyA9PiAkdGhpcy0+bWlub3IsCiAgICAgICAgXTsKCiAgICAgICAgcmV0dXJuIFV0aWxzOjpmaWx0ZXJOdWxsVmFsdWVzKCRkYXRhKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAid2ViLWF1dGgvd2ViYXV0aG4tbGliIiwKICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICJkZXNjcmlwdGlvbiI6ICJGSURPMi9XZWJhdXRobiBTdXBwb3J0IEZvciBQSFAiLAogICAgImtleXdvcmRzIjogWyJGSURPIiwgIkZJRE8yIiwgIndlYmF1dGhuIl0sCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi1hdXRoIiwKICAgICJhdXRob3JzIjogWwogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiRmxvcmVudCBNb3JzZWxsaSIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJBbGwgY29udHJpYnV0b3JzIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItYXV0aC93ZWJhdXRobi1saWJyYXJ5L2NvbnRyaWJ1dG9ycyIKICAgICAgICB9CiAgICBdLAogICAgInJlcXVpcmUiOiB7CiAgICAgICAgInBocCI6ICI+PTcuMiIsCiAgICAgICAgImV4dC1qc29uIjogIioiLAogICAgICAgICJleHQtb3BlbnNzbCI6ICIqIiwKICAgICAgICAiZXh0LW1ic3RyaW5nIjogIioiLAogICAgICAgICJiZWJlcmxlaS9hc3NlcnQiOiAiXjMuMiIsCiAgICAgICAgImZncm9zc2UvcGhwYXNuMSI6ICJeMi4xIiwKICAgICAgICAicHNyL2h0dHAtY2xpZW50IjogIl4xLjAiLAogICAgICAgICJwc3IvaHR0cC1mYWN0b3J5IjogIl4xLjAiLAogICAgICAgICJwc3IvaHR0cC1tZXNzYWdlIjogIl4xLjAiLAogICAgICAgICJwc3IvbG9nIjogIl4xLjEiLAogICAgICAgICJyYW1zZXkvdXVpZCI6ICJeMy44fF40LjAiLAogICAgICAgICJzcG9ta3ktbGFicy9iYXNlNjR1cmwiOiAiXjIuMCIsCiAgICAgICAgInNwb21reS1sYWJzL2Nib3ItcGhwIjogIl4xLjB8XjIuMCIsCiAgICAgICAgInN5bWZvbnkvcHJvY2VzcyI6ICJeMy4wfF40LjB8XjUuMCIsCiAgICAgICAgInRoZWNvZGluZ21hY2hpbmUvc2FmZSI6ICJeMS4xIiwKICAgICAgICAid2ViLWF1dGgvY29zZS1saWIiOiAic2VsZi52ZXJzaW9uIiwKICAgICAgICAid2ViLWF1dGgvbWV0YWRhdGEtc2VydmljZSI6ICJzZWxmLnZlcnNpb24iCiAgICB9LAogICAgImF1dG9sb2FkIjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIldlYmF1dGhuXFwiOiAic3JjLyIKICAgICAgICB9CiAgICB9LAogICAgInN1Z2dlc3QiOiB7CiAgICAgICAgInBzci9sb2ctaW1wbGVtZW50YXRpb24iOiAiUmVjb21tZW5kZWQgdG8gcmVjZWl2ZSBsb2dzIGZyb20gdGhlIGxpYnJhcnkiLAogICAgICAgICJ3ZWItdG9rZW4vand0LWtleS1tZ210IjogIk1hbmRhdG9yeSBmb3IgdGhlIEFuZHJvaWRTYWZldHlOZXQgQXR0ZXN0YXRpb24gU3RhdGVtZW50IHN1cHBvcnQiLAogICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tcnNhIjogIk1hbmRhdG9yeSBmb3IgdGhlIEFuZHJvaWRTYWZldHlOZXQgQXR0ZXN0YXRpb24gU3RhdGVtZW50IHN1cHBvcnQiLAogICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tZWNkc2EiOiAiUmVjb21tZW5kZWQgZm9yIHRoZSBBbmRyb2lkU2FmZXR5TmV0IEF0dGVzdGF0aW9uIFN0YXRlbWVudCBzdXBwb3J0IiwKICAgICAgICAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLWVkZHNhIjogIlJlY29tbWVuZGVkIGZvciB0aGUgQW5kcm9pZFNhZmV0eU5ldCBBdHRlc3RhdGlvbiBTdGF0ZW1lbnQgc3VwcG9ydCIKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[TUlUIExpY2Vuc2UKCkNvcHlyaWdodCAoYykgMjAxOCBTcG9ta3ktTGFicwoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AttestationStatement/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AttestationStatement/AndroidKeyAttestationStatementSupport.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50OwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBDQk9SXERlY29kZXI7CnVzZSBDQk9SXE90aGVyT2JqZWN0XE90aGVyT2JqZWN0TWFuYWdlcjsKdXNlIENCT1JcVGFnXFRhZ09iamVjdE1hbmFnZXI7CnVzZSBDb3NlXEFsZ29yaXRobXM7CnVzZSBDb3NlXEtleVxFYzJLZXk7CnVzZSBDb3NlXEtleVxLZXk7CnVzZSBDb3NlXEtleVxSc2FLZXk7CnVzZSBmdW5jdGlvbiBjb3VudDsKdXNlIEZHXEFTTjFcQVNOT2JqZWN0Owp1c2UgRkdcQVNOMVxFeHBsaWNpdGx5VGFnZ2VkT2JqZWN0Owp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcT2N0ZXRTdHJpbmc7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxTZXF1ZW5jZTsKdXNlIGZ1bmN0aW9uIFNhZmVcaGV4MmJpbjsKdXNlIGZ1bmN0aW9uIFNhZmVcb3BlbnNzbF9wa2V5X2dldF9wdWJsaWM7CnVzZSBmdW5jdGlvbiBTYWZlXHNwcmludGY7CnVzZSBXZWJhdXRoblxBdXRoZW50aWNhdG9yRGF0YTsKdXNlIFdlYmF1dGhuXENlcnRpZmljYXRlVG9vbGJveDsKdXNlIFdlYmF1dGhuXFN0cmluZ1N0cmVhbTsKdXNlIFdlYmF1dGhuXFRydXN0UGF0aFxDZXJ0aWZpY2F0ZVRydXN0UGF0aDsKCmZpbmFsIGNsYXNzIEFuZHJvaWRLZXlBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQgaW1wbGVtZW50cyBBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQKewogICAgLyoqCiAgICAgKiBAdmFyIERlY29kZXIKICAgICAqLwogICAgcHJpdmF0ZSAkZGVjb2RlcjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgICR0aGlzLT5kZWNvZGVyID0gbmV3IERlY29kZXIobmV3IFRhZ09iamVjdE1hbmFnZXIoKSwgbmV3IE90aGVyT2JqZWN0TWFuYWdlcigpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJ2FuZHJvaWQta2V5JzsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZFtdICRhdHRlc3RhdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZChhcnJheSAkYXR0ZXN0YXRpb24pOiBBdHRlc3RhdGlvblN0YXRlbWVudAogICAgewogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRhdHRlc3RhdGlvbiwgJ2F0dFN0bXQnLCAnSW52YWxpZCBhdHRlc3RhdGlvbiBvYmplY3QnKTsKICAgICAgICBmb3JlYWNoIChbJ3NpZycsICd4NWMnLCAnYWxnJ10gYXMgJGtleSkgewogICAgICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkYXR0ZXN0YXRpb25bJ2F0dFN0bXQnXSwgJGtleSwgc3ByaW50ZignVGhlIGF0dGVzdGF0aW9uIHN0YXRlbWVudCB2YWx1ZSAiJXMiIGlzIG1pc3NpbmcuJywgJGtleSkpOwogICAgICAgIH0KICAgICAgICAkY2VydGlmaWNhdGVzID0gJGF0dGVzdGF0aW9uWydhdHRTdG10J11bJ3g1YyddOwogICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkY2VydGlmaWNhdGVzLCAnVGhlIGF0dGVzdGF0aW9uIHN0YXRlbWVudCB2YWx1ZSAieDVjIiBtdXN0IGJlIGEgbGlzdCB3aXRoIGF0IGxlYXN0IG9uZSBjZXJ0aWZpY2F0ZS4nKTsKICAgICAgICBBc3NlcnRpb246OmdyZWF0ZXJUaGFuKGNvdW50KCRjZXJ0aWZpY2F0ZXMpLCAwLCAnVGhlIGF0dGVzdGF0aW9uIHN0YXRlbWVudCB2YWx1ZSAieDVjIiBtdXN0IGJlIGEgbGlzdCB3aXRoIGF0IGxlYXN0IG9uZSBjZXJ0aWZpY2F0ZS4nKTsKICAgICAgICBBc3NlcnRpb246OmFsbFN0cmluZygkY2VydGlmaWNhdGVzLCAnVGhlIGF0dGVzdGF0aW9uIHN0YXRlbWVudCB2YWx1ZSAieDVjIiBtdXN0IGJlIGEgbGlzdCB3aXRoIGF0IGxlYXN0IG9uZSBjZXJ0aWZpY2F0ZS4nKTsKICAgICAgICAkY2VydGlmaWNhdGVzID0gQ2VydGlmaWNhdGVUb29sYm94Ojpjb252ZXJ0QWxsREVSVG9QRU0oJGNlcnRpZmljYXRlcyk7CgogICAgICAgIHJldHVybiBBdHRlc3RhdGlvblN0YXRlbWVudDo6Y3JlYXRlQmFzaWMoJGF0dGVzdGF0aW9uWydmbXQnXSwgJGF0dGVzdGF0aW9uWydhdHRTdG10J10sIG5ldyBDZXJ0aWZpY2F0ZVRydXN0UGF0aCgkY2VydGlmaWNhdGVzKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzVmFsaWQoc3RyaW5nICRjbGllbnREYXRhSlNPTkhhc2gsIEF0dGVzdGF0aW9uU3RhdGVtZW50ICRhdHRlc3RhdGlvblN0YXRlbWVudCwgQXV0aGVudGljYXRvckRhdGEgJGF1dGhlbnRpY2F0b3JEYXRhKTogYm9vbAogICAgewogICAgICAgICR0cnVzdFBhdGggPSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldFRydXN0UGF0aCgpOwogICAgICAgIEFzc2VydGlvbjo6aXNJbnN0YW5jZU9mKCR0cnVzdFBhdGgsIENlcnRpZmljYXRlVHJ1c3RQYXRoOjpjbGFzcywgJ0ludmFsaWQgdHJ1c3QgcGF0aCcpOwoKICAgICAgICAkY2VydGlmaWNhdGVzID0gJHRydXN0UGF0aC0+Z2V0Q2VydGlmaWNhdGVzKCk7CgogICAgICAgIC8vRGVjb2RlIGxlYWYgYXR0ZXN0YXRpb24gY2VydGlmaWNhdGUKICAgICAgICAkbGVhZiA9ICRjZXJ0aWZpY2F0ZXNbMF07CiAgICAgICAgJHRoaXMtPmNoZWNrQ2VydGlmaWNhdGVBbmRHZXRQdWJsaWNLZXkoJGxlYWYsICRjbGllbnREYXRhSlNPTkhhc2gsICRhdXRoZW50aWNhdG9yRGF0YSk7CgogICAgICAgICRzaWduZWREYXRhID0gJGF1dGhlbnRpY2F0b3JEYXRhLT5nZXRBdXRoRGF0YSgpLiRjbGllbnREYXRhSlNPTkhhc2g7CiAgICAgICAgJGFsZyA9ICRhdHRlc3RhdGlvblN0YXRlbWVudC0+Z2V0KCdhbGcnKTsKCiAgICAgICAgcmV0dXJuIDEgPT09IG9wZW5zc2xfdmVyaWZ5KCRzaWduZWREYXRhLCAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldCgnc2lnJyksICRsZWFmLCBBbGdvcml0aG1zOjpnZXRPcGVuc3NsQWxnb3JpdGhtRm9yKChpbnQpICRhbGcpKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNoZWNrQ2VydGlmaWNhdGVBbmRHZXRQdWJsaWNLZXkoc3RyaW5nICRjZXJ0aWZpY2F0ZSwgc3RyaW5nICRjbGllbnREYXRhSGFzaCwgQXV0aGVudGljYXRvckRhdGEgJGF1dGhlbnRpY2F0b3JEYXRhKTogdm9pZAogICAgewogICAgICAgICRyZXNvdXJjZSA9IG9wZW5zc2xfcGtleV9nZXRfcHVibGljKCRjZXJ0aWZpY2F0ZSk7CiAgICAgICAgJGRldGFpbHMgPSBvcGVuc3NsX3BrZXlfZ2V0X2RldGFpbHMoJHJlc291cmNlKTsKICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJGRldGFpbHMsICdVbmFibGUgdG8gcmVhZCB0aGUgY2VydGlmaWNhdGUnKTsKCiAgICAgICAgLy9DaGVjayB0aGF0IGF1dGhEYXRhIHB1YmxpY0tleSBtYXRjaGVzIHRoZSBwdWJsaWMga2V5IGluIHRoZSBhdHRlc3RhdGlvbiBjZXJ0aWZpY2F0ZQogICAgICAgICRhdHRlc3RlZENyZWRlbnRpYWxEYXRhID0gJGF1dGhlbnRpY2F0b3JEYXRhLT5nZXRBdHRlc3RlZENyZWRlbnRpYWxEYXRhKCk7CiAgICAgICAgQXNzZXJ0aW9uOjpub3ROdWxsKCRhdHRlc3RlZENyZWRlbnRpYWxEYXRhLCAnTm8gYXR0ZXN0ZWQgY3JlZGVudGlhbCBkYXRhIGZvdW5kJyk7CiAgICAgICAgJHB1YmxpY0tleURhdGEgPSAkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YS0+Z2V0Q3JlZGVudGlhbFB1YmxpY0tleSgpOwogICAgICAgIEFzc2VydGlvbjo6bm90TnVsbCgkcHVibGljS2V5RGF0YSwgJ05vIGF0dGVzdGVkIHB1YmxpYyBrZXkgZm91bmQnKTsKICAgICAgICAkcHVibGljRGF0YVN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0oJHB1YmxpY0tleURhdGEpOwogICAgICAgICRjb3NlS2V5ID0gJHRoaXMtPmRlY29kZXItPmRlY29kZSgkcHVibGljRGF0YVN0cmVhbSktPmdldE5vcm1hbGl6ZWREYXRhKGZhbHNlKTsKICAgICAgICBBc3NlcnRpb246OnRydWUoJHB1YmxpY0RhdGFTdHJlYW0tPmlzRU9GKCksICdJbnZhbGlkIHB1YmxpYyBrZXkgZGF0YS4gUHJlc2VuY2Ugb2YgZXh0cmEgYnl0ZXMuJyk7CiAgICAgICAgJHB1YmxpY0RhdGFTdHJlYW0tPmNsb3NlKCk7CiAgICAgICAgJHB1YmxpY0tleSA9IEtleTo6Y3JlYXRlRnJvbURhdGEoJGNvc2VLZXkpOwoKICAgICAgICBBc3NlcnRpb246OnRydWUoKCRwdWJsaWNLZXkgaW5zdGFuY2VvZiBFYzJLZXkpIHx8ICgkcHVibGljS2V5IGluc3RhbmNlb2YgUnNhS2V5KSwgJ1Vuc3VwcG9ydGVkIGtleSB0eXBlJyk7CiAgICAgICAgQXNzZXJ0aW9uOjplcSgkcHVibGljS2V5LT5hc1BFTSgpLCAkZGV0YWlsc1sna2V5J10sICdJbnZhbGlkIGtleScpOwoKICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICAgICAgJGNlcnREZXRhaWxzID0gb3BlbnNzbF94NTA5X3BhcnNlKCRjZXJ0aWZpY2F0ZSk7CgogICAgICAgIC8vRmluZCBBbmRyb2lkIEtleVN0b3JlIEV4dGVuc2lvbiB3aXRoIE9JRCDigJwxLjMuNi4xLjQuMS4xMTEyOS4yLjEuMTfigJ0gaW4gY2VydGlmaWNhdGUgZXh0ZW5zaW9ucwogICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkY2VydERldGFpbHMsICdUaGUgY2VydGlmaWNhdGUgaXMgbm90IHZhbGlkJyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGNlcnREZXRhaWxzLCAnZXh0ZW5zaW9ucycsICdUaGUgY2VydGlmaWNhdGUgaGFzIG5vIGV4dGVuc2lvbicpOwogICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkY2VydERldGFpbHNbJ2V4dGVuc2lvbnMnXSwgJ1RoZSBjZXJ0aWZpY2F0ZSBoYXMgbm8gZXh0ZW5zaW9uJyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGNlcnREZXRhaWxzWydleHRlbnNpb25zJ10sICcxLjMuNi4xLjQuMS4xMTEyOS4yLjEuMTcnLCAnVGhlIGNlcnRpZmljYXRlIGV4dGVuc2lvbiAiMS4zLjYuMS40LjEuMTExMjkuMi4xLjE3IiBpcyBtaXNzaW5nJyk7CiAgICAgICAgJGV4dGVuc2lvbiA9ICRjZXJ0RGV0YWlsc1snZXh0ZW5zaW9ucyddWycxLjMuNi4xLjQuMS4xMTEyOS4yLjEuMTcnXTsKICAgICAgICAkZXh0ZW5zaW9uQXNBc24xID0gQVNOT2JqZWN0Ojpmcm9tQmluYXJ5KCRleHRlbnNpb24pOwogICAgICAgIEFzc2VydGlvbjo6aXNJbnN0YW5jZU9mKCRleHRlbnNpb25Bc0FzbjEsIFNlcXVlbmNlOjpjbGFzcywgJ1RoZSBjZXJ0aWZpY2F0ZSBleHRlbnNpb24gIjEuMy42LjEuNC4xLjExMTI5LjIuMS4xNyIgaXMgaW52YWxpZCcpOwogICAgICAgICRvYmplY3RzID0gJGV4dGVuc2lvbkFzQXNuMS0+Z2V0Q2hpbGRyZW4oKTsKCiAgICAgICAgLy9DaGVjayB0aGF0IGF0dGVzdGF0aW9uQ2hhbGxlbmdlIGlzIHNldCB0byB0aGUgY2xpZW50RGF0YUhhc2guCiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJG9iamVjdHMsIDQsICdUaGUgY2VydGlmaWNhdGUgZXh0ZW5zaW9uICIxLjMuNi4xLjQuMS4xMTEyOS4yLjEuMTciIGlzIGludmFsaWQnKTsKICAgICAgICBBc3NlcnRpb246OmlzSW5zdGFuY2VPZigkb2JqZWN0c1s0XSwgT2N0ZXRTdHJpbmc6OmNsYXNzLCAnVGhlIGNlcnRpZmljYXRlIGV4dGVuc2lvbiAiMS4zLjYuMS40LjEuMTExMjkuMi4xLjE3IiBpcyBpbnZhbGlkJyk7CiAgICAgICAgQXNzZXJ0aW9uOjplcSgkY2xpZW50RGF0YUhhc2gsIGhleDJiaW4oKCRvYmplY3RzWzRdKS0+Z2V0Q29udGVudCgpKSwgJ1RoZSBjbGllbnQgZGF0YSBoYXNoIGlzIG5vdCB2YWxpZCcpOwoKICAgICAgICAvL0NoZWNrIHRoYXQgYm90aCB0ZWVFbmZvcmNlZCBhbmQgc29mdHdhcmVFbmZvcmNlZCBzdHJ1Y3R1cmVzIGRvbuKAmXQgY29udGFpbiBhbGxBcHBsaWNhdGlvbnMoNjAwKSB0YWcuCiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJG9iamVjdHMsIDYsICdUaGUgY2VydGlmaWNhdGUgZXh0ZW5zaW9uICIxLjMuNi4xLjQuMS4xMTEyOS4yLjEuMTciIGlzIGludmFsaWQnKTsKICAgICAgICAkc29mdHdhcmVFbmZvcmNlZEZsYWdzID0gJG9iamVjdHNbNl07CiAgICAgICAgQXNzZXJ0aW9uOjppc0luc3RhbmNlT2YoJHNvZnR3YXJlRW5mb3JjZWRGbGFncywgU2VxdWVuY2U6OmNsYXNzLCAnVGhlIGNlcnRpZmljYXRlIGV4dGVuc2lvbiAiMS4zLjYuMS40LjEuMTExMjkuMi4xLjE3IiBpcyBpbnZhbGlkJyk7CiAgICAgICAgJHRoaXMtPmNoZWNrQWJzZW5jZU9mQWxsQXBwbGljYXRpb25zVGFnKCRzb2Z0d2FyZUVuZm9yY2VkRmxhZ3MpOwoKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkb2JqZWN0cywgNywgJ1RoZSBjZXJ0aWZpY2F0ZSBleHRlbnNpb24gIjEuMy42LjEuNC4xLjExMTI5LjIuMS4xNyIgaXMgaW52YWxpZCcpOwogICAgICAgICR0ZWVFbmZvcmNlZEZsYWdzID0gJG9iamVjdHNbNl07CiAgICAgICAgQXNzZXJ0aW9uOjppc0luc3RhbmNlT2YoJHRlZUVuZm9yY2VkRmxhZ3MsIFNlcXVlbmNlOjpjbGFzcywgJ1RoZSBjZXJ0aWZpY2F0ZSBleHRlbnNpb24gIjEuMy42LjEuNC4xLjExMTI5LjIuMS4xNyIgaXMgaW52YWxpZCcpOwogICAgICAgICR0aGlzLT5jaGVja0Fic2VuY2VPZkFsbEFwcGxpY2F0aW9uc1RhZygkdGVlRW5mb3JjZWRGbGFncyk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja0Fic2VuY2VPZkFsbEFwcGxpY2F0aW9uc1RhZyhTZXF1ZW5jZSAkc2VxdWVuY2UpOiB2b2lkCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJHNlcXVlbmNlLT5nZXRDaGlsZHJlbigpIGFzICR0YWcpIHsKICAgICAgICAgICAgQXNzZXJ0aW9uOjppc0luc3RhbmNlT2YoJHRhZywgRXhwbGljaXRseVRhZ2dlZE9iamVjdDo6Y2xhc3MsICdJbnZhbGlkIHRhZycpOwogICAgICAgICAgICAvKiBAdmFyIEV4cGxpY2l0bHlUYWdnZWRPYmplY3QgJHRhZyAqLwogICAgICAgICAgICBBc3NlcnRpb246Om5vdEVxKDYwMCwgKGludCkgJHRhZy0+Z2V0VGFnKCksICdGb3JiaWRkZW4gdGFnIDYwMCBmb3VuZCcpOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AttestationStatement/AndroidSafetyNetAttestationStatementSupport.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50OwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEFsZ29yaXRobSBhcyBBbGdvcml0aG1JbnRlcmZhY2U7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEFsZ29yaXRobU1hbmFnZXI7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXFV0aWxcSnNvbkNvbnZlcnRlcjsKdXNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcSldLRmFjdG9yeTsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG07CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcSldTOwp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXEpXU1ZlcmlmaWVyOwp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXFNlcmlhbGl6ZXJcQ29tcGFjdFNlcmlhbGl6ZXI7CnVzZSBQc3JcSHR0cFxDbGllbnRcQ2xpZW50SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0RmFjdG9yeUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVzcG9uc2VJbnRlcmZhY2U7CnVzZSBSdW50aW1lRXhjZXB0aW9uOwp1c2UgZnVuY3Rpb24gU2FmZVxqc29uX2RlY29kZTsKdXNlIGZ1bmN0aW9uIFNhZmVcc3ByaW50ZjsKdXNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0b3JEYXRhOwp1c2UgV2ViYXV0aG5cQ2VydGlmaWNhdGVUb29sYm94Owp1c2UgV2ViYXV0aG5cVHJ1c3RQYXRoXENlcnRpZmljYXRlVHJ1c3RQYXRoOwoKZmluYWwgY2xhc3MgQW5kcm9pZFNhZmV0eU5ldEF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydCBpbXBsZW1lbnRzIEF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydAp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkYXBpS2V5OwoKICAgIC8qKgogICAgICogQHZhciBDbGllbnRJbnRlcmZhY2V8bnVsbAogICAgICovCiAgICBwcml2YXRlICRjbGllbnQ7CgogICAgLyoqCiAgICAgKiBAdmFyIENvbXBhY3RTZXJpYWxpemVyCiAgICAgKi8KICAgIHByaXZhdGUgJGp3c1NlcmlhbGl6ZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIEpXU1ZlcmlmaWVyfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkandzVmVyaWZpZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIFJlcXVlc3RGYWN0b3J5SW50ZXJmYWNlfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkcmVxdWVzdEZhY3Rvcnk7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcml2YXRlICRsZWV3YXk7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcml2YXRlICRtYXhBZ2U7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KD9DbGllbnRJbnRlcmZhY2UgJGNsaWVudCA9IG51bGwsID9zdHJpbmcgJGFwaUtleSA9IG51bGwsID9SZXF1ZXN0RmFjdG9yeUludGVyZmFjZSAkcmVxdWVzdEZhY3RvcnkgPSBudWxsLCA/aW50ICRsZWV3YXkgPSBudWxsLCA/aW50ICRtYXhBZ2UgPSBudWxsKQogICAgewogICAgICAgIGlmICghY2xhc3NfZXhpc3RzKEFsZ29yaXRobVxSUzI1Njo6Y2xhc3MpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdUaGUgYWxnb3JpdGhtIFJTMjU2IGlzIG1pc3NpbmcuIERpZCB5b3UgZm9yZ2V0IHRvIGluc3RhbGwgdGhlIHBhY2thZ2Ugd2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLXJzYT8nKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFjbGFzc19leGlzdHMoSldLRmFjdG9yeTo6Y2xhc3MpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdUaGUgY2xhc3MgSm9zZVxDb21wb25lbnRcS2V5TWFuYWdlbWVudFxKV0tGYWN0b3J5IGlzIG1pc3NpbmcuIERpZCB5b3UgZm9yZ2V0IHRvIGluc3RhbGwgdGhlIHBhY2thZ2Ugd2ViLXRva2VuL2p3dC1rZXktbWdtdD8nKTsKICAgICAgICB9CiAgICAgICAgaWYgKG51bGwgIT09ICRjbGllbnQpIHsKICAgICAgICAgICAgQHRyaWdnZXJfZXJyb3IoJ1RoZSBhcmd1bWVudCAiY2xpZW50IiBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4zIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gNC4wLiBQbGVhc2Ugc2V0IGBudWxsYCBpbnN0ZWFkIGFuZCB1c2UgdGhlIG1ldGhvZCAiZW5hYmxlQXBpVmVyaWZpY2F0aW9uIi4nLCBFX1VTRVJfREVQUkVDQVRFRCk7CiAgICAgICAgfQogICAgICAgIGlmIChudWxsICE9PSAkYXBpS2V5KSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgImFwaUtleSIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDQuMC4gUGxlYXNlIHNldCBgbnVsbGAgaW5zdGVhZCBhbmQgdXNlIHRoZSBtZXRob2QgImVuYWJsZUFwaVZlcmlmaWNhdGlvbiIuJywgRV9VU0VSX0RFUFJFQ0FURUQpOwogICAgICAgIH0KICAgICAgICBpZiAobnVsbCAhPT0gJHJlcXVlc3RGYWN0b3J5KSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgInJlcXVlc3RGYWN0b3J5IiBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4zIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gNC4wLiBQbGVhc2Ugc2V0IGBudWxsYCBpbnN0ZWFkIGFuZCB1c2UgdGhlIG1ldGhvZCAiZW5hYmxlQXBpVmVyaWZpY2F0aW9uIi4nLCBFX1VTRVJfREVQUkVDQVRFRCk7CiAgICAgICAgfQogICAgICAgIGlmIChudWxsICE9PSAkbWF4QWdlKSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgIm1heEFnZSIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDQuMC4gUGxlYXNlIHNldCBgbnVsbGAgaW5zdGVhZCBhbmQgdXNlIHRoZSBtZXRob2QgInNldE1heEFnZSIuJywgRV9VU0VSX0RFUFJFQ0FURUQpOwogICAgICAgIH0KICAgICAgICBpZiAobnVsbCAhPT0gJGxlZXdheSkgewogICAgICAgICAgICBAdHJpZ2dlcl9lcnJvcignVGhlIGFyZ3VtZW50ICJsZWV3YXkiIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjMgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiA0LjAuIFBsZWFzZSBzZXQgYG51bGxgIGluc3RlYWQgYW5kIHVzZSB0aGUgbWV0aG9kICJzZXRMZWV3YXkiLicsIEVfVVNFUl9ERVBSRUNBVEVEKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPmp3c1NlcmlhbGl6ZXIgPSBuZXcgQ29tcGFjdFNlcmlhbGl6ZXIoKTsKICAgICAgICAkdGhpcy0+aW5pdEp3c1ZlcmlmaWVyKCk7CgogICAgICAgIC8vVG8gYmUgcmVtb3ZlZCBpbiA0LjAKICAgICAgICAkdGhpcy0+bGVld2F5ID0gJGxlZXdheSA/PyAwOwogICAgICAgICR0aGlzLT5tYXhBZ2UgPSAkbWF4QWdlID8/IDYwMDAwOwogICAgICAgICR0aGlzLT5hcGlLZXkgPSAkYXBpS2V5OwogICAgICAgICR0aGlzLT5jbGllbnQgPSAkY2xpZW50OwogICAgICAgICR0aGlzLT5yZXF1ZXN0RmFjdG9yeSA9ICRyZXF1ZXN0RmFjdG9yeTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5hYmxlQXBpVmVyaWZpY2F0aW9uKENsaWVudEludGVyZmFjZSAkY2xpZW50LCBzdHJpbmcgJGFwaUtleSwgUmVxdWVzdEZhY3RvcnlJbnRlcmZhY2UgJHJlcXVlc3RGYWN0b3J5KTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5hcGlLZXkgPSAkYXBpS2V5OwogICAgICAgICR0aGlzLT5jbGllbnQgPSAkY2xpZW50OwogICAgICAgICR0aGlzLT5yZXF1ZXN0RmFjdG9yeSA9ICRyZXF1ZXN0RmFjdG9yeTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRNYXhBZ2UoaW50ICRtYXhBZ2UpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPm1heEFnZSA9ICRtYXhBZ2U7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TGVld2F5KGludCAkbGVld2F5KTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5sZWV3YXkgPSAkbGVld2F5OwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5hbWUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICdhbmRyb2lkLXNhZmV0eW5ldCc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkYXR0ZXN0YXRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWQoYXJyYXkgJGF0dGVzdGF0aW9uKTogQXR0ZXN0YXRpb25TdGF0ZW1lbnQKICAgIHsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkYXR0ZXN0YXRpb24sICdhdHRTdG10JywgJ0ludmFsaWQgYXR0ZXN0YXRpb24gb2JqZWN0Jyk7CiAgICAgICAgZm9yZWFjaCAoWyd2ZXInLCAncmVzcG9uc2UnXSBhcyAka2V5KSB7CiAgICAgICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRhdHRlc3RhdGlvblsnYXR0U3RtdCddLCAka2V5LCBzcHJpbnRmKCdUaGUgYXR0ZXN0YXRpb24gc3RhdGVtZW50IHZhbHVlICIlcyIgaXMgbWlzc2luZy4nLCAka2V5KSk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6bm90RW1wdHkoJGF0dGVzdGF0aW9uWydhdHRTdG10J11bJGtleV0sIHNwcmludGYoJ1RoZSBhdHRlc3RhdGlvbiBzdGF0ZW1lbnQgdmFsdWUgIiVzIiBpcyBlbXB0eS4nLCAka2V5KSk7CiAgICAgICAgfQogICAgICAgICRqd3MgPSAkdGhpcy0+andzU2VyaWFsaXplci0+dW5zZXJpYWxpemUoJGF0dGVzdGF0aW9uWydhdHRTdG10J11bJ3Jlc3BvbnNlJ10pOwogICAgICAgICRqd3NIZWFkZXIgPSAkandzLT5nZXRTaWduYXR1cmUoMCktPmdldFByb3RlY3RlZEhlYWRlcigpOwogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRqd3NIZWFkZXIsICd4NWMnLCAnVGhlIHJlc3BvbnNlIGluIHRoZSBhdHRlc3RhdGlvbiBzdGF0ZW1lbnQgbXVzdCBjb250YWluIGEgIng1YyIgaGVhZGVyLicpOwogICAgICAgIEFzc2VydGlvbjo6bm90RW1wdHkoJGp3c0hlYWRlclsneDVjJ10sICdUaGUgIng1YyIgcGFyYW1ldGVyIGluIHRoZSBhdHRlc3RhdGlvbiBzdGF0ZW1lbnQgcmVzcG9uc2UgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjZXJ0aWZpY2F0ZS4nKTsKICAgICAgICAkY2VydGlmaWNhdGVzID0gJHRoaXMtPmNvbnZlcnRDZXJ0aWZpY2F0ZXNUb1BlbSgkandzSGVhZGVyWyd4NWMnXSk7CiAgICAgICAgJGF0dGVzdGF0aW9uWydhdHRTdG10J11bJ2p3cyddID0gJGp3czsKCiAgICAgICAgcmV0dXJuIEF0dGVzdGF0aW9uU3RhdGVtZW50OjpjcmVhdGVCYXNpYygKICAgICAgICAgICAgJHRoaXMtPm5hbWUoKSwKICAgICAgICAgICAgJGF0dGVzdGF0aW9uWydhdHRTdG10J10sCiAgICAgICAgICAgIG5ldyBDZXJ0aWZpY2F0ZVRydXN0UGF0aCgkY2VydGlmaWNhdGVzKQogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzVmFsaWQoc3RyaW5nICRjbGllbnREYXRhSlNPTkhhc2gsIEF0dGVzdGF0aW9uU3RhdGVtZW50ICRhdHRlc3RhdGlvblN0YXRlbWVudCwgQXV0aGVudGljYXRvckRhdGEgJGF1dGhlbnRpY2F0b3JEYXRhKTogYm9vbAogICAgewogICAgICAgICR0cnVzdFBhdGggPSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldFRydXN0UGF0aCgpOwogICAgICAgIEFzc2VydGlvbjo6aXNJbnN0YW5jZU9mKCR0cnVzdFBhdGgsIENlcnRpZmljYXRlVHJ1c3RQYXRoOjpjbGFzcywgJ0ludmFsaWQgdHJ1c3QgcGF0aCcpOwogICAgICAgICRjZXJ0aWZpY2F0ZXMgPSAkdHJ1c3RQYXRoLT5nZXRDZXJ0aWZpY2F0ZXMoKTsKICAgICAgICAkZmlyc3RDZXJ0aWZpY2F0ZSA9IGN1cnJlbnQoJGNlcnRpZmljYXRlcyk7CiAgICAgICAgQXNzZXJ0aW9uOjpzdHJpbmcoJGZpcnN0Q2VydGlmaWNhdGUsICdObyBjZXJ0aWZpY2F0ZScpOwoKICAgICAgICAkcGFyc2VkQ2VydGlmaWNhdGUgPSBvcGVuc3NsX3g1MDlfcGFyc2UoJGZpcnN0Q2VydGlmaWNhdGUpOwogICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkcGFyc2VkQ2VydGlmaWNhdGUsICdJbnZhbGlkIGF0dGVzdGF0aW9uIG9iamVjdCcpOwogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRwYXJzZWRDZXJ0aWZpY2F0ZSwgJ3N1YmplY3QnLCAnSW52YWxpZCBhdHRlc3RhdGlvbiBvYmplY3QnKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkcGFyc2VkQ2VydGlmaWNhdGVbJ3N1YmplY3QnXSwgJ0NOJywgJ0ludmFsaWQgYXR0ZXN0YXRpb24gb2JqZWN0Jyk7CiAgICAgICAgQXNzZXJ0aW9uOjplcSgkcGFyc2VkQ2VydGlmaWNhdGVbJ3N1YmplY3QnXVsnQ04nXSwgJ2F0dGVzdC5hbmRyb2lkLmNvbScsICdJbnZhbGlkIGF0dGVzdGF0aW9uIG9iamVjdCcpOwoKICAgICAgICAvKiogQHZhciBKV1MgJGp3cyAqLwogICAgICAgICRqd3MgPSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldCgnandzJyk7CiAgICAgICAgJHBheWxvYWQgPSAkandzLT5nZXRQYXlsb2FkKCk7CiAgICAgICAgJHRoaXMtPnZhbGlkYXRlUGF5bG9hZCgkcGF5bG9hZCwgJGNsaWVudERhdGFKU09OSGFzaCwgJGF1dGhlbnRpY2F0b3JEYXRhKTsKCiAgICAgICAgLy9DaGVjayB0aGUgc2lnbmF0dXJlCiAgICAgICAgJHRoaXMtPnZhbGlkYXRlU2lnbmF0dXJlKCRqd3MsICR0cnVzdFBhdGgpOwoKICAgICAgICAvL0NoZWNrIGFnYWluc3QgR29vZ2xlIHNlcnZpY2UKICAgICAgICAkdGhpcy0+dmFsaWRhdGVVc2luZ0dvb2dsZUFwaSgkYXR0ZXN0YXRpb25TdGF0ZW1lbnQpOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHZhbGlkYXRlUGF5bG9hZCg/c3RyaW5nICRwYXlsb2FkLCBzdHJpbmcgJGNsaWVudERhdGFKU09OSGFzaCwgQXV0aGVudGljYXRvckRhdGEgJGF1dGhlbnRpY2F0b3JEYXRhKTogdm9pZAogICAgewogICAgICAgIEFzc2VydGlvbjo6bm90TnVsbCgkcGF5bG9hZCwgJ0ludmFsaWQgYXR0ZXN0YXRpb24gb2JqZWN0Jyk7CiAgICAgICAgJHBheWxvYWQgPSBKc29uQ29udmVydGVyOjpkZWNvZGUoJHBheWxvYWQpOwogICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkcGF5bG9hZCwgJ0ludmFsaWQgYXR0ZXN0YXRpb24gb2JqZWN0Jyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJHBheWxvYWQsICdub25jZScsICdJbnZhbGlkIGF0dGVzdGF0aW9uIG9iamVjdC4gIm5vbmNlIiBpcyBtaXNzaW5nLicpOwogICAgICAgIEFzc2VydGlvbjo6ZXEoJHBheWxvYWRbJ25vbmNlJ10sIGJhc2U2NF9lbmNvZGUoaGFzaCgnc2hhMjU2JywgJGF1dGhlbnRpY2F0b3JEYXRhLT5nZXRBdXRoRGF0YSgpLiRjbGllbnREYXRhSlNPTkhhc2gsIHRydWUpKSwgJ0ludmFsaWQgYXR0ZXN0YXRpb24gb2JqZWN0LiBJbnZhbGlkIG5vbmNlJyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJHBheWxvYWQsICdjdHNQcm9maWxlTWF0Y2gnLCAnSW52YWxpZCBhdHRlc3RhdGlvbiBvYmplY3QuICJjdHNQcm9maWxlTWF0Y2giIGlzIG1pc3NpbmcuJyk7CiAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCRwYXlsb2FkWydjdHNQcm9maWxlTWF0Y2gnXSwgJ0ludmFsaWQgYXR0ZXN0YXRpb24gb2JqZWN0LiAiY3RzUHJvZmlsZU1hdGNoIiB2YWx1ZSBpcyBmYWxzZS4nKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkcGF5bG9hZCwgJ3RpbWVzdGFtcE1zJywgJ0ludmFsaWQgYXR0ZXN0YXRpb24gb2JqZWN0LiBUaW1lc3RhbXAgaXMgbWlzc2luZy4nKTsKICAgICAgICBBc3NlcnRpb246OmludGVnZXIoJHBheWxvYWRbJ3RpbWVzdGFtcE1zJ10sICdJbnZhbGlkIGF0dGVzdGF0aW9uIG9iamVjdC4gVGltZXN0YW1wIHNoYWxsIGJlIGFuIGludGVnZXIuJyk7CiAgICAgICAgJGN1cnJlbnRUaW1lID0gdGltZSgpICogMTAwMDsKICAgICAgICBBc3NlcnRpb246Omxlc3NPckVxdWFsVGhhbigkcGF5bG9hZFsndGltZXN0YW1wTXMnXSwgJGN1cnJlbnRUaW1lICsgJHRoaXMtPmxlZXdheSwgc3ByaW50ZignSW52YWxpZCBhdHRlc3RhdGlvbiBvYmplY3QuIElzc3VlZCBpbiB0aGUgZnV0dXJlLiBDdXJyZW50IHRpbWU6ICVkLiBSZXNwb25zZSB0aW1lOiAlZCcsICRjdXJyZW50VGltZSwgJHBheWxvYWRbJ3RpbWVzdGFtcE1zJ10pKTsKICAgICAgICBBc3NlcnRpb246Omxlc3NPckVxdWFsVGhhbigkY3VycmVudFRpbWUgLSAkcGF5bG9hZFsndGltZXN0YW1wTXMnXSwgJHRoaXMtPm1heEFnZSwgc3ByaW50ZignSW52YWxpZCBhdHRlc3RhdGlvbiBvYmplY3QuIFRvbyBvbGQuIEN1cnJlbnQgdGltZTogJWQuIFJlc3BvbnNlIHRpbWU6ICVkJywgJGN1cnJlbnRUaW1lLCAkcGF5bG9hZFsndGltZXN0YW1wTXMnXSkpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gdmFsaWRhdGVTaWduYXR1cmUoSldTICRqd3MsIENlcnRpZmljYXRlVHJ1c3RQYXRoICR0cnVzdFBhdGgpOiB2b2lkCiAgICB7CiAgICAgICAgJGp3ayA9IEpXS0ZhY3Rvcnk6OmNyZWF0ZUZyb21DZXJ0aWZpY2F0ZSgkdHJ1c3RQYXRoLT5nZXRDZXJ0aWZpY2F0ZXMoKVswXSk7CiAgICAgICAgJGlzVmFsaWQgPSAkdGhpcy0+andzVmVyaWZpZXItPnZlcmlmeVdpdGhLZXkoJGp3cywgJGp3aywgMCk7CiAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCRpc1ZhbGlkLCAnSW52YWxpZCByZXNwb25zZSBzaWduYXR1cmUnKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHZhbGlkYXRlVXNpbmdHb29nbGVBcGkoQXR0ZXN0YXRpb25TdGF0ZW1lbnQgJGF0dGVzdGF0aW9uU3RhdGVtZW50KTogdm9pZAogICAgewogICAgICAgIGlmIChudWxsID09PSAkdGhpcy0+Y2xpZW50IHx8IG51bGwgPT09ICR0aGlzLT5hcGlLZXkgfHwgbnVsbCA9PT0gJHRoaXMtPnJlcXVlc3RGYWN0b3J5KSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgJHVyaSA9IHNwcmludGYoJ2h0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2FuZHJvaWRjaGVjay92MS9hdHRlc3RhdGlvbnMvdmVyaWZ5P2tleT0lcycsIHVybGVuY29kZSgkdGhpcy0+YXBpS2V5KSk7CiAgICAgICAgJHJlcXVlc3RCb2R5ID0gc3ByaW50ZigneyJzaWduZWRBdHRlc3RhdGlvbiI6IiVzIn0nLCAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldCgncmVzcG9uc2UnKSk7CiAgICAgICAgJHJlcXVlc3QgPSAkdGhpcy0+cmVxdWVzdEZhY3RvcnktPmNyZWF0ZVJlcXVlc3QoJ1BPU1QnLCAkdXJpKTsKICAgICAgICAkcmVxdWVzdCA9ICRyZXF1ZXN0LT53aXRoSGVhZGVyKCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpOwogICAgICAgICRyZXF1ZXN0LT5nZXRCb2R5KCktPndyaXRlKCRyZXF1ZXN0Qm9keSk7CgogICAgICAgICRyZXNwb25zZSA9ICR0aGlzLT5jbGllbnQtPnNlbmRSZXF1ZXN0KCRyZXF1ZXN0KTsKICAgICAgICAkdGhpcy0+Y2hlY2tHb29nbGVBcGlSZXNwb25zZSgkcmVzcG9uc2UpOwogICAgICAgICRyZXNwb25zZUJvZHkgPSAkdGhpcy0+Z2V0UmVzcG9uc2VCb2R5KCRyZXNwb25zZSk7CiAgICAgICAgJHJlc3BvbnNlQm9keUpzb24gPSBqc29uX2RlY29kZSgkcmVzcG9uc2VCb2R5LCB0cnVlKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkcmVzcG9uc2VCb2R5SnNvbiwgJ2lzVmFsaWRTaWduYXR1cmUnLCAnSW52YWxpZCByZXNwb25zZS4nKTsKICAgICAgICBBc3NlcnRpb246OmJvb2xlYW4oJHJlc3BvbnNlQm9keUpzb25bJ2lzVmFsaWRTaWduYXR1cmUnXSwgJ0ludmFsaWQgcmVzcG9uc2UuJyk7CiAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCRyZXNwb25zZUJvZHlKc29uWydpc1ZhbGlkU2lnbmF0dXJlJ10sICdJbnZhbGlkIHJlc3BvbnNlLicpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0UmVzcG9uc2VCb2R5KFJlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZSk6IHN0cmluZwogICAgewogICAgICAgICRyZXNwb25zZUJvZHkgPSAnJzsKICAgICAgICAkcmVzcG9uc2UtPmdldEJvZHkoKS0+cmV3aW5kKCk7CiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgJHRtcCA9ICRyZXNwb25zZS0+Z2V0Qm9keSgpLT5yZWFkKDEwMjQpOwogICAgICAgICAgICBpZiAoJycgPT09ICR0bXApIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZXNwb25zZUJvZHkgLj0gJHRtcDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzcG9uc2VCb2R5OwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gY2hlY2tHb29nbGVBcGlSZXNwb25zZShSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UpOiB2b2lkCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjplcSgyMDAsICRyZXNwb25zZS0+Z2V0U3RhdHVzQ29kZSgpLCAnUmVxdWVzdCBkaWQgbm90IHN1Y2NlZWRlZCcpOwogICAgICAgIEFzc2VydGlvbjo6dHJ1ZSgkcmVzcG9uc2UtPmhhc0hlYWRlcignY29udGVudC10eXBlJyksICdVbnJlY29nbml6ZWQgcmVzcG9uc2UnKTsKCiAgICAgICAgZm9yZWFjaCAoJHJlc3BvbnNlLT5nZXRIZWFkZXIoJ2NvbnRlbnQtdHlwZScpIGFzICRoZWFkZXIpIHsKICAgICAgICAgICAgaWYgKDAgPT09IG1iX3N0cnBvcygkaGVhZGVyLCAnYXBwbGljYXRpb24vanNvbicpKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VucmVjb2duaXplZCByZXNwb25zZScpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZ1tdICRjZXJ0aWZpY2F0ZXMKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gY29udmVydENlcnRpZmljYXRlc1RvUGVtKGFycmF5ICRjZXJ0aWZpY2F0ZXMpOiBhcnJheQogICAgewogICAgICAgIGZvcmVhY2ggKCRjZXJ0aWZpY2F0ZXMgYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgJGNlcnRpZmljYXRlc1ska10gPSBDZXJ0aWZpY2F0ZVRvb2xib3g6OmZpeFBFTVN0cnVjdHVyZSgkdik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGNlcnRpZmljYXRlczsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGluaXRKd3NWZXJpZmllcigpOiB2b2lkCiAgICB7CiAgICAgICAgJGFsZ29yaXRobUNsYXNzZXMgPSBbCiAgICAgICAgICAgIEFsZ29yaXRobVxSUzI1Njo6Y2xhc3MsIEFsZ29yaXRobVxSUzM4NDo6Y2xhc3MsIEFsZ29yaXRobVxSUzUxMjo6Y2xhc3MsCiAgICAgICAgICAgIEFsZ29yaXRobVxQUzI1Njo6Y2xhc3MsIEFsZ29yaXRobVxQUzM4NDo6Y2xhc3MsIEFsZ29yaXRobVxQUzUxMjo6Y2xhc3MsCiAgICAgICAgICAgIEFsZ29yaXRobVxFUzI1Njo6Y2xhc3MsIEFsZ29yaXRobVxFUzM4NDo6Y2xhc3MsIEFsZ29yaXRobVxFUzUxMjo6Y2xhc3MsCiAgICAgICAgICAgIEFsZ29yaXRobVxFZERTQTo6Y2xhc3MsCiAgICAgICAgXTsKICAgICAgICAvKiBAdmFyIEFsZ29yaXRobUludGVyZmFjZVtdICRhbGdvcml0aG1zICovCiAgICAgICAgJGFsZ29yaXRobXMgPSBbXTsKICAgICAgICBmb3JlYWNoICgkYWxnb3JpdGhtQ2xhc3NlcyBhcyAkYWxnb3JpdGhtKSB7CiAgICAgICAgICAgIGlmIChjbGFzc19leGlzdHMoJGFsZ29yaXRobSkpIHsKICAgICAgICAgICAgICAgIC8qIEB2YXIgQWxnb3JpdGhtSW50ZXJmYWNlICRhbGdvcml0aG0gKi8KICAgICAgICAgICAgICAgICRhbGdvcml0aG1zW10gPSBuZXcgJGFsZ29yaXRobSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRhbGdvcml0aG1NYW5hZ2VyID0gbmV3IEFsZ29yaXRobU1hbmFnZXIoJGFsZ29yaXRobXMpOwogICAgICAgICR0aGlzLT5qd3NWZXJpZmllciA9IG5ldyBKV1NWZXJpZmllcigkYWxnb3JpdGhtTWFuYWdlcik7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AttestationStatement/AppleAttestationStatementSupport.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50OwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBDQk9SXERlY29kZXI7CnVzZSBDQk9SXE90aGVyT2JqZWN0XE90aGVyT2JqZWN0TWFuYWdlcjsKdXNlIENCT1JcVGFnXFRhZ09iamVjdE1hbmFnZXI7CnVzZSBDb3NlXEtleVxFYzJLZXk7CnVzZSBDb3NlXEtleVxLZXk7CnVzZSBDb3NlXEtleVxSc2FLZXk7CnVzZSBmdW5jdGlvbiBjb3VudDsKdXNlIGZ1bmN0aW9uIFNhZmVcb3BlbnNzbF9wa2V5X2dldF9wdWJsaWM7CnVzZSBmdW5jdGlvbiBTYWZlXHNwcmludGY7CnVzZSBXZWJhdXRoblxBdXRoZW50aWNhdG9yRGF0YTsKdXNlIFdlYmF1dGhuXENlcnRpZmljYXRlVG9vbGJveDsKdXNlIFdlYmF1dGhuXFN0cmluZ1N0cmVhbTsKdXNlIFdlYmF1dGhuXFRydXN0UGF0aFxDZXJ0aWZpY2F0ZVRydXN0UGF0aDsKCmZpbmFsIGNsYXNzIEFwcGxlQXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0IGltcGxlbWVudHMgQXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0CnsKICAgIC8qKgogICAgICogQHZhciBEZWNvZGVyCiAgICAgKi8KICAgIHByaXZhdGUgJGRlY29kZXI7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgIHsKICAgICAgICAkdGhpcy0+ZGVjb2RlciA9IG5ldyBEZWNvZGVyKG5ldyBUYWdPYmplY3RNYW5hZ2VyKCksIG5ldyBPdGhlck9iamVjdE1hbmFnZXIoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5hbWUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICdhcHBsZSc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkYXR0ZXN0YXRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWQoYXJyYXkgJGF0dGVzdGF0aW9uKTogQXR0ZXN0YXRpb25TdGF0ZW1lbnQKICAgIHsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkYXR0ZXN0YXRpb24sICdhdHRTdG10JywgJ0ludmFsaWQgYXR0ZXN0YXRpb24gb2JqZWN0Jyk7CiAgICAgICAgZm9yZWFjaCAoWyd4NWMnXSBhcyAka2V5KSB7CiAgICAgICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRhdHRlc3RhdGlvblsnYXR0U3RtdCddLCAka2V5LCBzcHJpbnRmKCdUaGUgYXR0ZXN0YXRpb24gc3RhdGVtZW50IHZhbHVlICIlcyIgaXMgbWlzc2luZy4nLCAka2V5KSk7CiAgICAgICAgfQogICAgICAgICRjZXJ0aWZpY2F0ZXMgPSAkYXR0ZXN0YXRpb25bJ2F0dFN0bXQnXVsneDVjJ107CiAgICAgICAgQXNzZXJ0aW9uOjppc0FycmF5KCRjZXJ0aWZpY2F0ZXMsICdUaGUgYXR0ZXN0YXRpb24gc3RhdGVtZW50IHZhbHVlICJ4NWMiIG11c3QgYmUgYSBsaXN0IHdpdGggYXQgbGVhc3Qgb25lIGNlcnRpZmljYXRlLicpOwogICAgICAgIEFzc2VydGlvbjo6Z3JlYXRlclRoYW4oY291bnQoJGNlcnRpZmljYXRlcyksIDAsICdUaGUgYXR0ZXN0YXRpb24gc3RhdGVtZW50IHZhbHVlICJ4NWMiIG11c3QgYmUgYSBsaXN0IHdpdGggYXQgbGVhc3Qgb25lIGNlcnRpZmljYXRlLicpOwogICAgICAgIEFzc2VydGlvbjo6YWxsU3RyaW5nKCRjZXJ0aWZpY2F0ZXMsICdUaGUgYXR0ZXN0YXRpb24gc3RhdGVtZW50IHZhbHVlICJ4NWMiIG11c3QgYmUgYSBsaXN0IHdpdGggYXQgbGVhc3Qgb25lIGNlcnRpZmljYXRlLicpOwogICAgICAgICRjZXJ0aWZpY2F0ZXMgPSBDZXJ0aWZpY2F0ZVRvb2xib3g6OmNvbnZlcnRBbGxERVJUb1BFTSgkY2VydGlmaWNhdGVzKTsKCiAgICAgICAgcmV0dXJuIEF0dGVzdGF0aW9uU3RhdGVtZW50OjpjcmVhdGVBbm9ueW1pemF0aW9uQ0EoJGF0dGVzdGF0aW9uWydmbXQnXSwgJGF0dGVzdGF0aW9uWydhdHRTdG10J10sIG5ldyBDZXJ0aWZpY2F0ZVRydXN0UGF0aCgkY2VydGlmaWNhdGVzKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzVmFsaWQoc3RyaW5nICRjbGllbnREYXRhSlNPTkhhc2gsIEF0dGVzdGF0aW9uU3RhdGVtZW50ICRhdHRlc3RhdGlvblN0YXRlbWVudCwgQXV0aGVudGljYXRvckRhdGEgJGF1dGhlbnRpY2F0b3JEYXRhKTogYm9vbAogICAgewogICAgICAgICR0cnVzdFBhdGggPSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldFRydXN0UGF0aCgpOwogICAgICAgIEFzc2VydGlvbjo6aXNJbnN0YW5jZU9mKCR0cnVzdFBhdGgsIENlcnRpZmljYXRlVHJ1c3RQYXRoOjpjbGFzcywgJ0ludmFsaWQgdHJ1c3QgcGF0aCcpOwoKICAgICAgICAkY2VydGlmaWNhdGVzID0gJHRydXN0UGF0aC0+Z2V0Q2VydGlmaWNhdGVzKCk7CgogICAgICAgIC8vRGVjb2RlIGxlYWYgYXR0ZXN0YXRpb24gY2VydGlmaWNhdGUKICAgICAgICAkbGVhZiA9ICRjZXJ0aWZpY2F0ZXNbMF07CgogICAgICAgICR0aGlzLT5jaGVja0NlcnRpZmljYXRlQW5kR2V0UHVibGljS2V5KCRsZWFmLCAkY2xpZW50RGF0YUpTT05IYXNoLCAkYXV0aGVudGljYXRvckRhdGEpOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNoZWNrQ2VydGlmaWNhdGVBbmRHZXRQdWJsaWNLZXkoc3RyaW5nICRjZXJ0aWZpY2F0ZSwgc3RyaW5nICRjbGllbnREYXRhSGFzaCwgQXV0aGVudGljYXRvckRhdGEgJGF1dGhlbnRpY2F0b3JEYXRhKTogdm9pZAogICAgewogICAgICAgICRyZXNvdXJjZSA9IG9wZW5zc2xfcGtleV9nZXRfcHVibGljKCRjZXJ0aWZpY2F0ZSk7CiAgICAgICAgJGRldGFpbHMgPSBvcGVuc3NsX3BrZXlfZ2V0X2RldGFpbHMoJHJlc291cmNlKTsKICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJGRldGFpbHMsICdVbmFibGUgdG8gcmVhZCB0aGUgY2VydGlmaWNhdGUnKTsKCiAgICAgICAgLy9DaGVjayB0aGF0IGF1dGhEYXRhIHB1YmxpY0tleSBtYXRjaGVzIHRoZSBwdWJsaWMga2V5IGluIHRoZSBhdHRlc3RhdGlvbiBjZXJ0aWZpY2F0ZQogICAgICAgICRhdHRlc3RlZENyZWRlbnRpYWxEYXRhID0gJGF1dGhlbnRpY2F0b3JEYXRhLT5nZXRBdHRlc3RlZENyZWRlbnRpYWxEYXRhKCk7CiAgICAgICAgQXNzZXJ0aW9uOjpub3ROdWxsKCRhdHRlc3RlZENyZWRlbnRpYWxEYXRhLCAnTm8gYXR0ZXN0ZWQgY3JlZGVudGlhbCBkYXRhIGZvdW5kJyk7CiAgICAgICAgJHB1YmxpY0tleURhdGEgPSAkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YS0+Z2V0Q3JlZGVudGlhbFB1YmxpY0tleSgpOwogICAgICAgIEFzc2VydGlvbjo6bm90TnVsbCgkcHVibGljS2V5RGF0YSwgJ05vIGF0dGVzdGVkIHB1YmxpYyBrZXkgZm91bmQnKTsKICAgICAgICAkcHVibGljRGF0YVN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0oJHB1YmxpY0tleURhdGEpOwogICAgICAgICRjb3NlS2V5ID0gJHRoaXMtPmRlY29kZXItPmRlY29kZSgkcHVibGljRGF0YVN0cmVhbSktPmdldE5vcm1hbGl6ZWREYXRhKGZhbHNlKTsKICAgICAgICBBc3NlcnRpb246OnRydWUoJHB1YmxpY0RhdGFTdHJlYW0tPmlzRU9GKCksICdJbnZhbGlkIHB1YmxpYyBrZXkgZGF0YS4gUHJlc2VuY2Ugb2YgZXh0cmEgYnl0ZXMuJyk7CiAgICAgICAgJHB1YmxpY0RhdGFTdHJlYW0tPmNsb3NlKCk7CiAgICAgICAgJHB1YmxpY0tleSA9IEtleTo6Y3JlYXRlRnJvbURhdGEoJGNvc2VLZXkpOwoKICAgICAgICBBc3NlcnRpb246OnRydWUoKCRwdWJsaWNLZXkgaW5zdGFuY2VvZiBFYzJLZXkpIHx8ICgkcHVibGljS2V5IGluc3RhbmNlb2YgUnNhS2V5KSwgJ1Vuc3VwcG9ydGVkIGtleSB0eXBlJyk7CgogICAgICAgIC8vV2UgY2hlY2sgdGhlIGF0dGVzdGVkIGtleSBjb3JyZXNwb25kcyB0byB0aGUga2V5IGluIHRoZSBjZXJ0aWZpY2F0ZQogICAgICAgIEFzc2VydGlvbjo6ZXEoJHB1YmxpY0tleS0+YXNQRU0oKSwgJGRldGFpbHNbJ2tleSddLCAnSW52YWxpZCBrZXknKTsKCiAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICAgICAgICRjZXJ0RGV0YWlscyA9IG9wZW5zc2xfeDUwOV9wYXJzZSgkY2VydGlmaWNhdGUpOwoKICAgICAgICAvL0ZpbmQgQXBwbGUgRXh0ZW5zaW9uIHdpdGggT0lEIOKAnDEuMi44NDAuMTEzNjM1LjEwMC44LjLigJ0gaW4gY2VydGlmaWNhdGUgZXh0ZW5zaW9ucwogICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkY2VydERldGFpbHMsICdUaGUgY2VydGlmaWNhdGUgaXMgbm90IHZhbGlkJyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGNlcnREZXRhaWxzLCAnZXh0ZW5zaW9ucycsICdUaGUgY2VydGlmaWNhdGUgaGFzIG5vIGV4dGVuc2lvbicpOwogICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkY2VydERldGFpbHNbJ2V4dGVuc2lvbnMnXSwgJ1RoZSBjZXJ0aWZpY2F0ZSBoYXMgbm8gZXh0ZW5zaW9uJyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGNlcnREZXRhaWxzWydleHRlbnNpb25zJ10sICcxLjIuODQwLjExMzYzNS4xMDAuOC4yJywgJ1RoZSBjZXJ0aWZpY2F0ZSBleHRlbnNpb24gIjEuMi44NDAuMTEzNjM1LjEwMC44LjIiIGlzIG1pc3NpbmcnKTsKICAgICAgICAkZXh0ZW5zaW9uID0gJGNlcnREZXRhaWxzWydleHRlbnNpb25zJ11bJzEuMi44NDAuMTEzNjM1LjEwMC44LjInXTsKCiAgICAgICAgJG5vbmNlVG9IYXNoID0gJGF1dGhlbnRpY2F0b3JEYXRhLT5nZXRBdXRoRGF0YSgpLiRjbGllbnREYXRhSGFzaDsKICAgICAgICAkbm9uY2UgPSBoYXNoKCdzaGEyNTYnLCAkbm9uY2VUb0hhc2gpOwoKICAgICAgICAvLyczMDI0YTEyMjA0MjAnIGNvcnJlc3BvbmRzIHRvIHRoZSBTZXF1ZW5jZStFeHBsaWNpdGx5IFRhZ2dlZCBPYmplY3QgKyBPY3RldCBPYmplY3QKICAgICAgICBBc3NlcnRpb246OmVxKCczMDI0YTEyMjA0MjAnLiRub25jZSwgYmluMmhleCgkZXh0ZW5zaW9uKSwgJ1RoZSBjbGllbnQgZGF0YSBoYXNoIGlzIG5vdCB2YWxpZCcpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AttestationStatement/AttestationObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50OwoKdXNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0b3JEYXRhOwp1c2UgV2ViYXV0aG5cTWV0YWRhdGFTZXJ2aWNlXE1ldGFkYXRhU3RhdGVtZW50OwoKY2xhc3MgQXR0ZXN0YXRpb25PYmplY3QKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRyYXdBdHRlc3RhdGlvbk9iamVjdDsKICAgIC8qKgogICAgICogQHZhciBBdHRlc3RhdGlvblN0YXRlbWVudAogICAgICovCiAgICBwcml2YXRlICRhdHRTdG10OwogICAgLyoqCiAgICAgKiBAdmFyIEF1dGhlbnRpY2F0b3JEYXRhCiAgICAgKi8KICAgIHByaXZhdGUgJGF1dGhEYXRhOwoKICAgIC8qKgogICAgICogQHZhciBNZXRhZGF0YVN0YXRlbWVudHxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJG1ldGFkYXRhU3RhdGVtZW50OwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJHJhd0F0dGVzdGF0aW9uT2JqZWN0LCBBdHRlc3RhdGlvblN0YXRlbWVudCAkYXR0U3RtdCwgQXV0aGVudGljYXRvckRhdGEgJGF1dGhEYXRhLCA/TWV0YWRhdGFTdGF0ZW1lbnQgJG1ldGFkYXRhU3RhdGVtZW50ID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAobnVsbCAhPT0gJG1ldGFkYXRhU3RhdGVtZW50KSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgIm1ldGFkYXRhU3RhdGVtZW50IiBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4zIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gNC4wLiBQbGVhc2UgdXNlIHRoZSBtZXRob2QgInNldE1ldGFkYXRhU3RhdGVtZW50Ii4nLCBFX1VTRVJfREVQUkVDQVRFRCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5yYXdBdHRlc3RhdGlvbk9iamVjdCA9ICRyYXdBdHRlc3RhdGlvbk9iamVjdDsKICAgICAgICAkdGhpcy0+YXR0U3RtdCA9ICRhdHRTdG10OwogICAgICAgICR0aGlzLT5hdXRoRGF0YSA9ICRhdXRoRGF0YTsKICAgICAgICAkdGhpcy0+bWV0YWRhdGFTdGF0ZW1lbnQgPSAkbWV0YWRhdGFTdGF0ZW1lbnQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFJhd0F0dGVzdGF0aW9uT2JqZWN0KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmF3QXR0ZXN0YXRpb25PYmplY3Q7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEF0dFN0bXQoKTogQXR0ZXN0YXRpb25TdGF0ZW1lbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmF0dFN0bXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldEF0dFN0bXQoQXR0ZXN0YXRpb25TdGF0ZW1lbnQgJGF0dFN0bXQpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmF0dFN0bXQgPSAkYXR0U3RtdDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXV0aERhdGEoKTogQXV0aGVudGljYXRvckRhdGEKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmF1dGhEYXRhOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNZXRhZGF0YVN0YXRlbWVudCgpOiA/TWV0YWRhdGFTdGF0ZW1lbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm1ldGFkYXRhU3RhdGVtZW50OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRNZXRhZGF0YVN0YXRlbWVudChNZXRhZGF0YVN0YXRlbWVudCAkbWV0YWRhdGFTdGF0ZW1lbnQpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPm1ldGFkYXRhU3RhdGVtZW50ID0gJG1ldGFkYXRhU3RhdGVtZW50OwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AttestationStatement/AttestationObjectLoader.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50OwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBCYXNlNjRVcmxcQmFzZTY0VXJsOwp1c2UgQ0JPUlxEZWNvZGVyOwp1c2UgQ0JPUlxNYXBPYmplY3Q7CnVzZSBDQk9SXE90aGVyT2JqZWN0XE90aGVyT2JqZWN0TWFuYWdlcjsKdXNlIENCT1JcVGFnXFRhZ09iamVjdE1hbmFnZXI7CnVzZSBmdW5jdGlvbiBvcmQ7CnVzZSBQc3JcTG9nXExvZ2dlckludGVyZmFjZTsKdXNlIFBzclxMb2dcTnVsbExvZ2dlcjsKdXNlIFJhbXNleVxVdWlkXFV1aWQ7CnVzZSBmdW5jdGlvbiBTYWZlXHNwcmludGY7CnVzZSBmdW5jdGlvbiBTYWZlXHVucGFjazsKdXNlIFRocm93YWJsZTsKdXNlIFdlYmF1dGhuXEF0dGVzdGVkQ3JlZGVudGlhbERhdGE7CnVzZSBXZWJhdXRoblxBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNcQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0c0xvYWRlcjsKdXNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0b3JEYXRhOwp1c2UgV2ViYXV0aG5cTWV0YWRhdGFTZXJ2aWNlXE1ldGFkYXRhU3RhdGVtZW50UmVwb3NpdG9yeTsKdXNlIFdlYmF1dGhuXFN0cmluZ1N0cmVhbTsKCmNsYXNzIEF0dGVzdGF0aW9uT2JqZWN0TG9hZGVyCnsKICAgIHByaXZhdGUgY29uc3QgRkxBR19BVCA9IDBiMDEwMDAwMDA7CiAgICBwcml2YXRlIGNvbnN0IEZMQUdfRUQgPSAwYjEwMDAwMDAwOwoKICAgIC8qKgogICAgICogQHZhciBEZWNvZGVyCiAgICAgKi8KICAgIHByaXZhdGUgJGRlY29kZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIEF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydE1hbmFnZXIKICAgICAqLwogICAgcHJpdmF0ZSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0TWFuYWdlcjsKCiAgICAvKioKICAgICAqIEB2YXIgTG9nZ2VySW50ZXJmYWNlfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkbG9nZ2VyOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyICRhdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyLCA/TWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5ICRtZXRhZGF0YVN0YXRlbWVudFJlcG9zaXRvcnkgPSBudWxsLCA/TG9nZ2VySW50ZXJmYWNlICRsb2dnZXIgPSBudWxsKQogICAgewogICAgICAgIGlmIChudWxsICE9PSAkbWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5KSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgIm1ldGFkYXRhU3RhdGVtZW50UmVwb3NpdG9yeSIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDQuMC4gUGxlYXNlIHNldCBgbnVsbGAgaW5zdGVhZC4nLCBFX1VTRVJfREVQUkVDQVRFRCk7CiAgICAgICAgfQogICAgICAgIGlmIChudWxsICE9PSAkbG9nZ2VyKSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgImxvZ2dlciIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDQuMC4gUGxlYXNlIHVzZSB0aGUgbWV0aG9kICJzZXRMb2dnZXIiIGluc3RlYWQuJywgRV9VU0VSX0RFUFJFQ0FURUQpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+ZGVjb2RlciA9IG5ldyBEZWNvZGVyKG5ldyBUYWdPYmplY3RNYW5hZ2VyKCksIG5ldyBPdGhlck9iamVjdE1hbmFnZXIoKSk7CiAgICAgICAgJHRoaXMtPmF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydE1hbmFnZXIgPSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0TWFuYWdlcjsKICAgICAgICAkdGhpcy0+bG9nZ2VyID0gJGxvZ2dlciA/PyBuZXcgTnVsbExvZ2dlcigpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKEF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydE1hbmFnZXIgJGF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydE1hbmFnZXIpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRhdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZChzdHJpbmcgJGRhdGEpOiBBdHRlc3RhdGlvbk9iamVjdAogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgICR0aGlzLT5sb2dnZXItPmluZm8oJ1RyeWluZyB0byBsb2FkIHRoZSBkYXRhJywgWydkYXRhJyA9PiAkZGF0YV0pOwogICAgICAgICAgICAkZGVjb2RlZERhdGEgPSBCYXNlNjRVcmw6OmRlY29kZSgkZGF0YSk7CiAgICAgICAgICAgICRzdHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFtKCRkZWNvZGVkRGF0YSk7CiAgICAgICAgICAgICRwYXJzZWQgPSAkdGhpcy0+ZGVjb2Rlci0+ZGVjb2RlKCRzdHJlYW0pOwoKICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+aW5mbygnTG9hZGluZyB0aGUgQXR0ZXN0YXRpb24gU3RhdGVtZW50Jyk7CiAgICAgICAgICAgICRhdHRlc3RhdGlvbk9iamVjdCA9ICRwYXJzZWQtPmdldE5vcm1hbGl6ZWREYXRhKCk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6dHJ1ZSgkc3RyZWFtLT5pc0VPRigpLCAnSW52YWxpZCBhdHRlc3RhdGlvbiBvYmplY3QuIFByZXNlbmNlIG9mIGV4dHJhIGJ5dGVzLicpOwogICAgICAgICAgICAkc3RyZWFtLT5jbG9zZSgpOwogICAgICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJGF0dGVzdGF0aW9uT2JqZWN0LCAnSW52YWxpZCBhdHRlc3RhdGlvbiBvYmplY3QnKTsKICAgICAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGF0dGVzdGF0aW9uT2JqZWN0LCAnYXV0aERhdGEnLCAnSW52YWxpZCBhdHRlc3RhdGlvbiBvYmplY3QnKTsKICAgICAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGF0dGVzdGF0aW9uT2JqZWN0LCAnZm10JywgJ0ludmFsaWQgYXR0ZXN0YXRpb24gb2JqZWN0Jyk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRhdHRlc3RhdGlvbk9iamVjdCwgJ2F0dFN0bXQnLCAnSW52YWxpZCBhdHRlc3RhdGlvbiBvYmplY3QnKTsKICAgICAgICAgICAgJGF1dGhEYXRhID0gJGF0dGVzdGF0aW9uT2JqZWN0WydhdXRoRGF0YSddOwoKICAgICAgICAgICAgJGF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydCA9ICR0aGlzLT5hdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyLT5nZXQoJGF0dGVzdGF0aW9uT2JqZWN0WydmbXQnXSk7CiAgICAgICAgICAgICRhdHRlc3RhdGlvblN0YXRlbWVudCA9ICRhdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQtPmxvYWQoJGF0dGVzdGF0aW9uT2JqZWN0KTsKICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+aW5mbygnQXR0ZXN0YXRpb24gU3RhdGVtZW50IGxvYWRlZCcpOwogICAgICAgICAgICAkdGhpcy0+bG9nZ2VyLT5kZWJ1ZygnQXR0ZXN0YXRpb24gU3RhdGVtZW50IGxvYWRlZCcsIFsnYXR0ZXN0YXRpb25TdGF0ZW1lbnQnID0+ICRhdHRlc3RhdGlvblN0YXRlbWVudF0pOwoKICAgICAgICAgICAgJGF1dGhEYXRhU3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbSgkYXV0aERhdGEpOwogICAgICAgICAgICAkcnBfaWRfaGFzaCA9ICRhdXRoRGF0YVN0cmVhbS0+cmVhZCgzMik7CiAgICAgICAgICAgICRmbGFncyA9ICRhdXRoRGF0YVN0cmVhbS0+cmVhZCgxKTsKICAgICAgICAgICAgJHNpZ25Db3VudCA9ICRhdXRoRGF0YVN0cmVhbS0+cmVhZCg0KTsKICAgICAgICAgICAgJHNpZ25Db3VudCA9IHVucGFjaygnTicsICRzaWduQ291bnQpWzFdOwogICAgICAgICAgICAkdGhpcy0+bG9nZ2VyLT5kZWJ1ZyhzcHJpbnRmKCdTaWduYXR1cmUgY291bnRlcjogJWQnLCAkc2lnbkNvdW50KSk7CgogICAgICAgICAgICAkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSA9IG51bGw7CiAgICAgICAgICAgIGlmICgwICE9PSAob3JkKCRmbGFncykgJiBzZWxmOjpGTEFHX0FUKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+aW5mbygnQXR0ZXN0ZWQgQ3JlZGVudGlhbCBEYXRhIGlzIHByZXNlbnQnKTsKICAgICAgICAgICAgICAgICRhYWd1aWQgPSBVdWlkOjpmcm9tQnl0ZXMoJGF1dGhEYXRhU3RyZWFtLT5yZWFkKDE2KSk7CiAgICAgICAgICAgICAgICAkY3JlZGVudGlhbExlbmd0aCA9ICRhdXRoRGF0YVN0cmVhbS0+cmVhZCgyKTsKICAgICAgICAgICAgICAgICRjcmVkZW50aWFsTGVuZ3RoID0gdW5wYWNrKCduJywgJGNyZWRlbnRpYWxMZW5ndGgpWzFdOwogICAgICAgICAgICAgICAgJGNyZWRlbnRpYWxJZCA9ICRhdXRoRGF0YVN0cmVhbS0+cmVhZCgkY3JlZGVudGlhbExlbmd0aCk7CiAgICAgICAgICAgICAgICAkY3JlZGVudGlhbFB1YmxpY0tleSA9ICR0aGlzLT5kZWNvZGVyLT5kZWNvZGUoJGF1dGhEYXRhU3RyZWFtKTsKICAgICAgICAgICAgICAgIEFzc2VydGlvbjo6aXNJbnN0YW5jZU9mKCRjcmVkZW50aWFsUHVibGljS2V5LCBNYXBPYmplY3Q6OmNsYXNzLCAnVGhlIGRhdGEgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGNyZWRlbnRpYWwgcHVibGljIGtleS4nKTsKICAgICAgICAgICAgICAgICRhdHRlc3RlZENyZWRlbnRpYWxEYXRhID0gbmV3IEF0dGVzdGVkQ3JlZGVudGlhbERhdGEoJGFhZ3VpZCwgJGNyZWRlbnRpYWxJZCwgKHN0cmluZykgJGNyZWRlbnRpYWxQdWJsaWNLZXkpOwogICAgICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+aW5mbygnQXR0ZXN0ZWQgQ3JlZGVudGlhbCBEYXRhIGxvYWRlZCcpOwogICAgICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+ZGVidWcoJ0F0dGVzdGVkIENyZWRlbnRpYWwgRGF0YSBsb2FkZWQnLCBbJ2F0JyA9PiAkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YV0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkZXh0ZW5zaW9uID0gbnVsbDsKICAgICAgICAgICAgaWYgKDAgIT09IChvcmQoJGZsYWdzKSAmIHNlbGY6OkZMQUdfRUQpKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+bG9nZ2VyLT5pbmZvKCdFeHRlbnNpb24gRGF0YSBsb2FkZWQnKTsKICAgICAgICAgICAgICAgICRleHRlbnNpb24gPSAkdGhpcy0+ZGVjb2Rlci0+ZGVjb2RlKCRhdXRoRGF0YVN0cmVhbSk7CiAgICAgICAgICAgICAgICAkZXh0ZW5zaW9uID0gQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0c0xvYWRlcjo6bG9hZCgkZXh0ZW5zaW9uKTsKICAgICAgICAgICAgICAgICR0aGlzLT5sb2dnZXItPmluZm8oJ0V4dGVuc2lvbiBEYXRhIGxvYWRlZCcpOwogICAgICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+ZGVidWcoJ0V4dGVuc2lvbiBEYXRhIGxvYWRlZCcsIFsnZWQnID0+ICRleHRlbnNpb25dKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBBc3NlcnRpb246OnRydWUoJGF1dGhEYXRhU3RyZWFtLT5pc0VPRigpLCAnSW52YWxpZCBhdXRoZW50aWNhdGlvbiBkYXRhLiBQcmVzZW5jZSBvZiBleHRyYSBieXRlcy4nKTsKICAgICAgICAgICAgJGF1dGhEYXRhU3RyZWFtLT5jbG9zZSgpOwoKICAgICAgICAgICAgJGF1dGhlbnRpY2F0b3JEYXRhID0gbmV3IEF1dGhlbnRpY2F0b3JEYXRhKCRhdXRoRGF0YSwgJHJwX2lkX2hhc2gsICRmbGFncywgJHNpZ25Db3VudCwgJGF0dGVzdGVkQ3JlZGVudGlhbERhdGEsICRleHRlbnNpb24pOwogICAgICAgICAgICAkYXR0ZXN0YXRpb25PYmplY3QgPSBuZXcgQXR0ZXN0YXRpb25PYmplY3QoJGRhdGEsICRhdHRlc3RhdGlvblN0YXRlbWVudCwgJGF1dGhlbnRpY2F0b3JEYXRhKTsKICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+aW5mbygnQXR0ZXN0YXRpb24gT2JqZWN0IGxvYWRlZCcpOwogICAgICAgICAgICAkdGhpcy0+bG9nZ2VyLT5kZWJ1ZygnQXR0ZXN0YXRpb24gT2JqZWN0JywgWydlZCcgPT4gJGF0dGVzdGF0aW9uT2JqZWN0XSk7CgogICAgICAgICAgICByZXR1cm4gJGF0dGVzdGF0aW9uT2JqZWN0OwogICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSAkdGhyb3dhYmxlKSB7CiAgICAgICAgICAgICR0aGlzLT5sb2dnZXItPmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCcsIFsKICAgICAgICAgICAgICAgICdleGNlcHRpb24nID0+ICR0aHJvd2FibGUsCiAgICAgICAgICAgIF0pOwogICAgICAgICAgICB0aHJvdyAkdGhyb3dhYmxlOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TG9nZ2VyKExvZ2dlckludGVyZmFjZSAkbG9nZ2VyKTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5sb2dnZXIgPSAkbG9nZ2VyOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AttestationStatement/AttestationStatement.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50OwoKdXNlIGZ1bmN0aW9uIGFycmF5X2tleV9leGlzdHM7CnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgSnNvblNlcmlhbGl6YWJsZTsKdXNlIGZ1bmN0aW9uIFNhZmVcc3ByaW50ZjsKdXNlIFdlYmF1dGhuXFRydXN0UGF0aFxUcnVzdFBhdGg7CnVzZSBXZWJhdXRoblxUcnVzdFBhdGhcVHJ1c3RQYXRoTG9hZGVyOwoKY2xhc3MgQXR0ZXN0YXRpb25TdGF0ZW1lbnQgaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlCnsKICAgIHB1YmxpYyBjb25zdCBUWVBFX05PTkUgPSAnbm9uZSc7CiAgICBwdWJsaWMgY29uc3QgVFlQRV9CQVNJQyA9ICdiYXNpYyc7CiAgICBwdWJsaWMgY29uc3QgVFlQRV9TRUxGID0gJ3NlbGYnOwogICAgcHVibGljIGNvbnN0IFRZUEVfQVRUQ0EgPSAnYXR0Y2EnOwogICAgcHVibGljIGNvbnN0IFRZUEVfRUNEQUEgPSAnZWNkYWEnOwogICAgcHVibGljIGNvbnN0IFRZUEVfQU5PTkNBID0gJ2Fub25jYSc7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRmbXQ7CgogICAgLyoqCiAgICAgKiBAdmFyIG1peGVkW10KICAgICAqLwogICAgcHJpdmF0ZSAkYXR0U3RtdDsKCiAgICAvKioKICAgICAqIEB2YXIgVHJ1c3RQYXRoCiAgICAgKi8KICAgIHByaXZhdGUgJHRydXN0UGF0aDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJHR5cGU7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkYXR0U3RtdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRmbXQsIGFycmF5ICRhdHRTdG10LCBzdHJpbmcgJHR5cGUsIFRydXN0UGF0aCAkdHJ1c3RQYXRoKQogICAgewogICAgICAgICR0aGlzLT5mbXQgPSAkZm10OwogICAgICAgICR0aGlzLT5hdHRTdG10ID0gJGF0dFN0bXQ7CiAgICAgICAgJHRoaXMtPnR5cGUgPSAkdHlwZTsKICAgICAgICAkdGhpcy0+dHJ1c3RQYXRoID0gJHRydXN0UGF0aDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZFtdICRhdHRTdG10CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlTm9uZShzdHJpbmcgJGZtdCwgYXJyYXkgJGF0dFN0bXQsIFRydXN0UGF0aCAkdHJ1c3RQYXRoKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkZm10LCAkYXR0U3RtdCwgc2VsZjo6VFlQRV9OT05FLCAkdHJ1c3RQYXRoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZFtdICRhdHRTdG10CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlQmFzaWMoc3RyaW5nICRmbXQsIGFycmF5ICRhdHRTdG10LCBUcnVzdFBhdGggJHRydXN0UGF0aCk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGZtdCwgJGF0dFN0bXQsIHNlbGY6OlRZUEVfQkFTSUMsICR0cnVzdFBhdGgpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkW10gJGF0dFN0bXQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVTZWxmKHN0cmluZyAkZm10LCBhcnJheSAkYXR0U3RtdCwgVHJ1c3RQYXRoICR0cnVzdFBhdGgpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRmbXQsICRhdHRTdG10LCBzZWxmOjpUWVBFX1NFTEYsICR0cnVzdFBhdGgpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkW10gJGF0dFN0bXQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVBdHRDQShzdHJpbmcgJGZtdCwgYXJyYXkgJGF0dFN0bXQsIFRydXN0UGF0aCAkdHJ1c3RQYXRoKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkZm10LCAkYXR0U3RtdCwgc2VsZjo6VFlQRV9BVFRDQSwgJHRydXN0UGF0aCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkYXR0U3RtdAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUVjZGFhKHN0cmluZyAkZm10LCBhcnJheSAkYXR0U3RtdCwgVHJ1c3RQYXRoICR0cnVzdFBhdGgpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRmbXQsICRhdHRTdG10LCBzZWxmOjpUWVBFX0VDREFBLCAkdHJ1c3RQYXRoKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUFub255bWl6YXRpb25DQShzdHJpbmcgJGZtdCwgYXJyYXkgJGF0dFN0bXQsIFRydXN0UGF0aCAkdHJ1c3RQYXRoKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkZm10LCAkYXR0U3RtdCwgc2VsZjo6VFlQRV9BTk9OQ0EsICR0cnVzdFBhdGgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGbXQoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5mbXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEF0dFN0bXQoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmF0dFN0bXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGhhcyhzdHJpbmcgJGtleSk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkdGhpcy0+YXR0U3RtdCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXQoc3RyaW5nICRrZXkpCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCR0aGlzLT5oYXMoJGtleSksIHNwcmludGYoJ1RoZSBhdHRlc3RhdGlvbiBzdGF0ZW1lbnQgaGFzIG5vIGtleSAiJXMiLicsICRrZXkpKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5hdHRTdG10WyRrZXldOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUcnVzdFBhdGgoKTogVHJ1c3RQYXRoCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50cnVzdFBhdGg7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50eXBlOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkW10gJGRhdGEKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tQXJyYXkoYXJyYXkgJGRhdGEpOiBzZWxmCiAgICB7CiAgICAgICAgZm9yZWFjaCAoWydmbXQnLCAnYXR0U3RtdCcsICd0cnVzdFBhdGgnLCAndHlwZSddIGFzICRrZXkpIHsKICAgICAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGRhdGEsICRrZXksIHNwcmludGYoJ1RoZSBrZXkgIiVzIiBpcyBtaXNzaW5nJywgJGtleSkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKAogICAgICAgICAgICAkZGF0YVsnZm10J10sCiAgICAgICAgICAgICRkYXRhWydhdHRTdG10J10sCiAgICAgICAgICAgICRkYXRhWyd0eXBlJ10sCiAgICAgICAgICAgIFRydXN0UGF0aExvYWRlcjo6bG9hZFRydXN0UGF0aCgkZGF0YVsndHJ1c3RQYXRoJ10pCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWRbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdmbXQnID0+ICR0aGlzLT5mbXQsCiAgICAgICAgICAgICdhdHRTdG10JyA9PiAkdGhpcy0+YXR0U3RtdCwKICAgICAgICAgICAgJ3RydXN0UGF0aCcgPT4gJHRoaXMtPnRydXN0UGF0aC0+anNvblNlcmlhbGl6ZSgpLAogICAgICAgICAgICAndHlwZScgPT4gJHRoaXMtPnR5cGUsCiAgICAgICAgXTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AttestationStatement/AttestationStatementSupport.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50OwoKdXNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0b3JEYXRhOwoKaW50ZXJmYWNlIEF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydAp7CiAgICBwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkYXR0ZXN0YXRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWQoYXJyYXkgJGF0dGVzdGF0aW9uKTogQXR0ZXN0YXRpb25TdGF0ZW1lbnQ7CgogICAgcHVibGljIGZ1bmN0aW9uIGlzVmFsaWQoc3RyaW5nICRjbGllbnREYXRhSlNPTkhhc2gsIEF0dGVzdGF0aW9uU3RhdGVtZW50ICRhdHRlc3RhdGlvblN0YXRlbWVudCwgQXV0aGVudGljYXRvckRhdGEgJGF1dGhlbnRpY2F0b3JEYXRhKTogYm9vbDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AttestationStatement/AttestationStatementSupportManager.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50OwoKdXNlIGZ1bmN0aW9uIGFycmF5X2tleV9leGlzdHM7CnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgZnVuY3Rpb24gU2FmZVxzcHJpbnRmOwoKY2xhc3MgQXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0TWFuYWdlcgp7CiAgICAvKioKICAgICAqIEB2YXIgQXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0W10KICAgICAqLwogICAgcHJpdmF0ZSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0cyA9IFtdOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoQXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0ICRhdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydHNbJGF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydC0+bmFtZSgpXSA9ICRhdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGhhcyhzdHJpbmcgJG5hbWUpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X2tleV9leGlzdHMoJG5hbWUsICR0aGlzLT5hdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRzKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0KHN0cmluZyAkbmFtZSk6IEF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydAogICAgewogICAgICAgIEFzc2VydGlvbjo6dHJ1ZSgkdGhpcy0+aGFzKCRuYW1lKSwgc3ByaW50ZignVGhlIGF0dGVzdGF0aW9uIHN0YXRlbWVudCBmb3JtYXQgIiVzIiBpcyBub3Qgc3VwcG9ydGVkLicsICRuYW1lKSk7CgogICAgICAgIHJldHVybiAkdGhpcy0+YXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0c1skbmFtZV07CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AttestationStatement/FidoU2FAttestationStatementSupport.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50OwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBDQk9SXERlY29kZXI7CnVzZSBDQk9SXE1hcE9iamVjdDsKdXNlIENCT1JcT3RoZXJPYmplY3RcT3RoZXJPYmplY3RNYW5hZ2VyOwp1c2UgQ0JPUlxUYWdcVGFnT2JqZWN0TWFuYWdlcjsKdXNlIENvc2VcS2V5XEVjMktleTsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIGZ1bmN0aW9uIFNhZmVcb3BlbnNzbF9wa2V5X2dldF9wdWJsaWM7CnVzZSBmdW5jdGlvbiBTYWZlXHNwcmludGY7CnVzZSBUaHJvd2FibGU7CnVzZSBXZWJhdXRoblxBdXRoZW50aWNhdG9yRGF0YTsKdXNlIFdlYmF1dGhuXENlcnRpZmljYXRlVG9vbGJveDsKdXNlIFdlYmF1dGhuXFN0cmluZ1N0cmVhbTsKdXNlIFdlYmF1dGhuXFRydXN0UGF0aFxDZXJ0aWZpY2F0ZVRydXN0UGF0aDsKCmZpbmFsIGNsYXNzIEZpZG9VMkZBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQgaW1wbGVtZW50cyBBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQKewogICAgLyoqCiAgICAgKiBAdmFyIERlY29kZXIKICAgICAqLwogICAgcHJpdmF0ZSAkZGVjb2RlcjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgICR0aGlzLT5kZWNvZGVyID0gbmV3IERlY29kZXIobmV3IFRhZ09iamVjdE1hbmFnZXIoKSwgbmV3IE90aGVyT2JqZWN0TWFuYWdlcigpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJ2ZpZG8tdTJmJzsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZFtdICRhdHRlc3RhdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZChhcnJheSAkYXR0ZXN0YXRpb24pOiBBdHRlc3RhdGlvblN0YXRlbWVudAogICAgewogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRhdHRlc3RhdGlvbiwgJ2F0dFN0bXQnLCAnSW52YWxpZCBhdHRlc3RhdGlvbiBvYmplY3QnKTsKICAgICAgICBmb3JlYWNoIChbJ3NpZycsICd4NWMnXSBhcyAka2V5KSB7CiAgICAgICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRhdHRlc3RhdGlvblsnYXR0U3RtdCddLCAka2V5LCBzcHJpbnRmKCdUaGUgYXR0ZXN0YXRpb24gc3RhdGVtZW50IHZhbHVlICIlcyIgaXMgbWlzc2luZy4nLCAka2V5KSk7CiAgICAgICAgfQogICAgICAgICRjZXJ0aWZpY2F0ZXMgPSAkYXR0ZXN0YXRpb25bJ2F0dFN0bXQnXVsneDVjJ107CiAgICAgICAgQXNzZXJ0aW9uOjppc0FycmF5KCRjZXJ0aWZpY2F0ZXMsICdUaGUgYXR0ZXN0YXRpb24gc3RhdGVtZW50IHZhbHVlICJ4NWMiIG11c3QgYmUgYSBsaXN0IHdpdGggb25lIGNlcnRpZmljYXRlLicpOwogICAgICAgIEFzc2VydGlvbjo6Y291bnQoJGNlcnRpZmljYXRlcywgMSwgJ1RoZSBhdHRlc3RhdGlvbiBzdGF0ZW1lbnQgdmFsdWUgIng1YyIgbXVzdCBiZSBhIGxpc3Qgd2l0aCBvbmUgY2VydGlmaWNhdGUuJyk7CiAgICAgICAgQXNzZXJ0aW9uOjphbGxTdHJpbmcoJGNlcnRpZmljYXRlcywgJ1RoZSBhdHRlc3RhdGlvbiBzdGF0ZW1lbnQgdmFsdWUgIng1YyIgbXVzdCBiZSBhIGxpc3Qgd2l0aCBvbmUgY2VydGlmaWNhdGUuJyk7CgogICAgICAgIHJlc2V0KCRjZXJ0aWZpY2F0ZXMpOwogICAgICAgICRjZXJ0aWZpY2F0ZXMgPSBDZXJ0aWZpY2F0ZVRvb2xib3g6OmNvbnZlcnRBbGxERVJUb1BFTSgkY2VydGlmaWNhdGVzKTsKICAgICAgICAkdGhpcy0+Y2hlY2tDZXJ0aWZpY2F0ZSgkY2VydGlmaWNhdGVzWzBdKTsKCiAgICAgICAgcmV0dXJuIEF0dGVzdGF0aW9uU3RhdGVtZW50OjpjcmVhdGVCYXNpYygkYXR0ZXN0YXRpb25bJ2ZtdCddLCAkYXR0ZXN0YXRpb25bJ2F0dFN0bXQnXSwgbmV3IENlcnRpZmljYXRlVHJ1c3RQYXRoKCRjZXJ0aWZpY2F0ZXMpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNWYWxpZChzdHJpbmcgJGNsaWVudERhdGFKU09OSGFzaCwgQXR0ZXN0YXRpb25TdGF0ZW1lbnQgJGF0dGVzdGF0aW9uU3RhdGVtZW50LCBBdXRoZW50aWNhdG9yRGF0YSAkYXV0aGVudGljYXRvckRhdGEpOiBib29sCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjplcSgKICAgICAgICAgICAgJGF1dGhlbnRpY2F0b3JEYXRhLT5nZXRBdHRlc3RlZENyZWRlbnRpYWxEYXRhKCktPmdldEFhZ3VpZCgpLT50b1N0cmluZygpLAogICAgICAgICAgICAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJywKICAgICAgICAgICAgJ0ludmFsaWQgQUFHVUlEIGZvciBmaWRvLXUyZiBhdHRlc3RhdGlvbiBzdGF0ZW1lbnQuIFNoYWxsIGJlICIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiJwogICAgICAgICk7CiAgICAgICAgJHRydXN0UGF0aCA9ICRhdHRlc3RhdGlvblN0YXRlbWVudC0+Z2V0VHJ1c3RQYXRoKCk7CiAgICAgICAgQXNzZXJ0aW9uOjppc0luc3RhbmNlT2YoJHRydXN0UGF0aCwgQ2VydGlmaWNhdGVUcnVzdFBhdGg6OmNsYXNzLCAnSW52YWxpZCB0cnVzdCBwYXRoJyk7CiAgICAgICAgJGRhdGFUb1ZlcmlmeSA9ICJcMCI7CiAgICAgICAgJGRhdGFUb1ZlcmlmeSAuPSAkYXV0aGVudGljYXRvckRhdGEtPmdldFJwSWRIYXNoKCk7CiAgICAgICAgJGRhdGFUb1ZlcmlmeSAuPSAkY2xpZW50RGF0YUpTT05IYXNoOwogICAgICAgICRkYXRhVG9WZXJpZnkgLj0gJGF1dGhlbnRpY2F0b3JEYXRhLT5nZXRBdHRlc3RlZENyZWRlbnRpYWxEYXRhKCktPmdldENyZWRlbnRpYWxJZCgpOwogICAgICAgICRkYXRhVG9WZXJpZnkgLj0gJHRoaXMtPmV4dHJhY3RQdWJsaWNLZXkoJGF1dGhlbnRpY2F0b3JEYXRhLT5nZXRBdHRlc3RlZENyZWRlbnRpYWxEYXRhKCktPmdldENyZWRlbnRpYWxQdWJsaWNLZXkoKSk7CgogICAgICAgIHJldHVybiAxID09PSBvcGVuc3NsX3ZlcmlmeSgkZGF0YVRvVmVyaWZ5LCAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldCgnc2lnJyksICR0cnVzdFBhdGgtPmdldENlcnRpZmljYXRlcygpWzBdLCBPUEVOU1NMX0FMR09fU0hBMjU2KTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGV4dHJhY3RQdWJsaWNLZXkoP3N0cmluZyAkcHVibGljS2V5KTogc3RyaW5nCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjpub3ROdWxsKCRwdWJsaWNLZXksICdUaGUgYXR0ZXN0ZWQgY3JlZGVudGlhbCBkYXRhIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBwdWJsaWMga2V5LicpOwoKICAgICAgICAkcHVibGljS2V5U3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbSgkcHVibGljS2V5KTsKICAgICAgICAkY29zZUtleSA9ICR0aGlzLT5kZWNvZGVyLT5kZWNvZGUoJHB1YmxpY0tleVN0cmVhbSk7CiAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCRwdWJsaWNLZXlTdHJlYW0tPmlzRU9GKCksICdJbnZhbGlkIHB1YmxpYyBrZXkuIFByZXNlbmNlIG9mIGV4dHJhIGJ5dGVzLicpOwogICAgICAgICRwdWJsaWNLZXlTdHJlYW0tPmNsb3NlKCk7CiAgICAgICAgQXNzZXJ0aW9uOjppc0luc3RhbmNlT2YoJGNvc2VLZXksIE1hcE9iamVjdDo6Y2xhc3MsICdUaGUgYXR0ZXN0ZWQgY3JlZGVudGlhbCBkYXRhIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBwdWJsaWMga2V5LicpOwoKICAgICAgICAkY29zZUtleSA9ICRjb3NlS2V5LT5nZXROb3JtYWxpemVkRGF0YSgpOwogICAgICAgICRlYzJLZXkgPSBuZXcgRWMyS2V5KCRjb3NlS2V5ICsgW0VjMktleTo6VFlQRSA9PiAyLCBFYzJLZXk6OkRBVEFfQ1VSVkUgPT4gRWMyS2V5OjpDVVJWRV9QMjU2XSk7CgogICAgICAgIHJldHVybiAiXHgwNCIuJGVjMktleS0+eCgpLiRlYzJLZXktPnkoKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNoZWNrQ2VydGlmaWNhdGUoc3RyaW5nICRwdWJsaWNLZXkpOiB2b2lkCiAgICB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHJlc291cmNlID0gb3BlbnNzbF9wa2V5X2dldF9wdWJsaWMoJHB1YmxpY0tleSk7CiAgICAgICAgICAgICRkZXRhaWxzID0gb3BlbnNzbF9wa2V5X2dldF9kZXRhaWxzKCRyZXNvdXJjZSk7CiAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlICR0aHJvd2FibGUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBjZXJ0aWZpY2F0ZSBvciBjZXJ0aWZpY2F0ZSBjaGFpbicsIDAsICR0aHJvd2FibGUpOwogICAgICAgIH0KICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJGRldGFpbHMsICdJbnZhbGlkIGNlcnRpZmljYXRlIG9yIGNlcnRpZmljYXRlIGNoYWluJyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGRldGFpbHMsICdlYycsICdJbnZhbGlkIGNlcnRpZmljYXRlIG9yIGNlcnRpZmljYXRlIGNoYWluJyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGRldGFpbHNbJ2VjJ10sICdjdXJ2ZV9uYW1lJywgJ0ludmFsaWQgY2VydGlmaWNhdGUgb3IgY2VydGlmaWNhdGUgY2hhaW4nKTsKICAgICAgICBBc3NlcnRpb246OmVxKCRkZXRhaWxzWydlYyddWydjdXJ2ZV9uYW1lJ10sICdwcmltZTI1NnYxJywgJ0ludmFsaWQgY2VydGlmaWNhdGUgb3IgY2VydGlmaWNhdGUgY2hhaW4nKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkZGV0YWlsc1snZWMnXSwgJ2N1cnZlX29pZCcsICdJbnZhbGlkIGNlcnRpZmljYXRlIG9yIGNlcnRpZmljYXRlIGNoYWluJyk7CiAgICAgICAgQXNzZXJ0aW9uOjplcSgkZGV0YWlsc1snZWMnXVsnY3VydmVfb2lkJ10sICcxLjIuODQwLjEwMDQ1LjMuMS43JywgJ0ludmFsaWQgY2VydGlmaWNhdGUgb3IgY2VydGlmaWNhdGUgY2hhaW4nKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AttestationStatement/NoneAttestationStatementSupport.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50OwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBmdW5jdGlvbiBjb3VudDsKdXNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0b3JEYXRhOwp1c2UgV2ViYXV0aG5cVHJ1c3RQYXRoXEVtcHR5VHJ1c3RQYXRoOwoKZmluYWwgY2xhc3MgTm9uZUF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydCBpbXBsZW1lbnRzIEF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydAp7CiAgICBwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJ25vbmUnOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkW10gJGF0dGVzdGF0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkKGFycmF5ICRhdHRlc3RhdGlvbik6IEF0dGVzdGF0aW9uU3RhdGVtZW50CiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjpub0NvbnRlbnQoJGF0dGVzdGF0aW9uWydhdHRTdG10J10sICdJbnZhbGlkIGF0dGVzdGF0aW9uIG9iamVjdCcpOwoKICAgICAgICByZXR1cm4gQXR0ZXN0YXRpb25TdGF0ZW1lbnQ6OmNyZWF0ZU5vbmUoJGF0dGVzdGF0aW9uWydmbXQnXSwgJGF0dGVzdGF0aW9uWydhdHRTdG10J10sIG5ldyBFbXB0eVRydXN0UGF0aCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNWYWxpZChzdHJpbmcgJGNsaWVudERhdGFKU09OSGFzaCwgQXR0ZXN0YXRpb25TdGF0ZW1lbnQgJGF0dGVzdGF0aW9uU3RhdGVtZW50LCBBdXRoZW50aWNhdG9yRGF0YSAkYXV0aGVudGljYXRvckRhdGEpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIDAgPT09IGNvdW50KCRhdHRlc3RhdGlvblN0YXRlbWVudC0+Z2V0QXR0U3RtdCgpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AttestationStatement/PackedAttestationStatementSupport.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50OwoKdXNlIGZ1bmN0aW9uIGFycmF5X2tleV9leGlzdHM7CnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgQ0JPUlxEZWNvZGVyOwp1c2UgQ0JPUlxNYXBPYmplY3Q7CnVzZSBDQk9SXE90aGVyT2JqZWN0XE90aGVyT2JqZWN0TWFuYWdlcjsKdXNlIENCT1JcVGFnXFRhZ09iamVjdE1hbmFnZXI7CnVzZSBDb3NlXEFsZ29yaXRobVxNYW5hZ2VyOwp1c2UgQ29zZVxBbGdvcml0aG1cU2lnbmF0dXJlXFNpZ25hdHVyZTsKdXNlIENvc2VcQWxnb3JpdGhtczsKdXNlIENvc2VcS2V5XEtleTsKdXNlIGZ1bmN0aW9uIGluX2FycmF5Owp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgZnVuY3Rpb24gaXNfYXJyYXk7CnVzZSBSdW50aW1lRXhjZXB0aW9uOwp1c2UgV2ViYXV0aG5cQXV0aGVudGljYXRvckRhdGE7CnVzZSBXZWJhdXRoblxDZXJ0aWZpY2F0ZVRvb2xib3g7CnVzZSBXZWJhdXRoblxTdHJpbmdTdHJlYW07CnVzZSBXZWJhdXRoblxUcnVzdFBhdGhcQ2VydGlmaWNhdGVUcnVzdFBhdGg7CnVzZSBXZWJhdXRoblxUcnVzdFBhdGhcRWNkYWFLZXlJZFRydXN0UGF0aDsKdXNlIFdlYmF1dGhuXFRydXN0UGF0aFxFbXB0eVRydXN0UGF0aDsKdXNlIFdlYmF1dGhuXFV0aWxcQ29zZVNpZ25hdHVyZUZpeGVyOwoKZmluYWwgY2xhc3MgUGFja2VkQXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0IGltcGxlbWVudHMgQXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0CnsKICAgIC8qKgogICAgICogQHZhciBEZWNvZGVyCiAgICAgKi8KICAgIHByaXZhdGUgJGRlY29kZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIE1hbmFnZXIKICAgICAqLwogICAgcHJpdmF0ZSAkYWxnb3JpdGhtTWFuYWdlcjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoTWFuYWdlciAkYWxnb3JpdGhtTWFuYWdlcikKICAgIHsKICAgICAgICAkdGhpcy0+ZGVjb2RlciA9IG5ldyBEZWNvZGVyKG5ldyBUYWdPYmplY3RNYW5hZ2VyKCksIG5ldyBPdGhlck9iamVjdE1hbmFnZXIoKSk7CiAgICAgICAgJHRoaXMtPmFsZ29yaXRobU1hbmFnZXIgPSAkYWxnb3JpdGhtTWFuYWdlcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJ3BhY2tlZCc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkYXR0ZXN0YXRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWQoYXJyYXkgJGF0dGVzdGF0aW9uKTogQXR0ZXN0YXRpb25TdGF0ZW1lbnQKICAgIHsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkYXR0ZXN0YXRpb25bJ2F0dFN0bXQnXSwgJ3NpZycsICdUaGUgYXR0ZXN0YXRpb24gc3RhdGVtZW50IHZhbHVlICJzaWciIGlzIG1pc3NpbmcuJyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGF0dGVzdGF0aW9uWydhdHRTdG10J10sICdhbGcnLCAnVGhlIGF0dGVzdGF0aW9uIHN0YXRlbWVudCB2YWx1ZSAiYWxnIiBpcyBtaXNzaW5nLicpOwogICAgICAgIEFzc2VydGlvbjo6c3RyaW5nKCRhdHRlc3RhdGlvblsnYXR0U3RtdCddWydzaWcnXSwgJ1RoZSBhdHRlc3RhdGlvbiBzdGF0ZW1lbnQgdmFsdWUgInNpZyIgaXMgbWlzc2luZy4nKTsKICAgICAgICBzd2l0Y2ggKHRydWUpIHsKICAgICAgICAgICAgY2FzZSBhcnJheV9rZXlfZXhpc3RzKCd4NWMnLCAkYXR0ZXN0YXRpb25bJ2F0dFN0bXQnXSk6CiAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPmxvYWRCYXNpY1R5cGUoJGF0dGVzdGF0aW9uKTsKICAgICAgICAgICAgY2FzZSBhcnJheV9rZXlfZXhpc3RzKCdlY2RhYUtleUlkJywgJGF0dGVzdGF0aW9uWydhdHRTdG10J10pOgogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5sb2FkRWNkYWFUeXBlKCRhdHRlc3RhdGlvblsnYXR0U3RtdCddKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+bG9hZEVtcHR5VHlwZSgkYXR0ZXN0YXRpb24pOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNWYWxpZChzdHJpbmcgJGNsaWVudERhdGFKU09OSGFzaCwgQXR0ZXN0YXRpb25TdGF0ZW1lbnQgJGF0dGVzdGF0aW9uU3RhdGVtZW50LCBBdXRoZW50aWNhdG9yRGF0YSAkYXV0aGVudGljYXRvckRhdGEpOiBib29sCiAgICB7CiAgICAgICAgJHRydXN0UGF0aCA9ICRhdHRlc3RhdGlvblN0YXRlbWVudC0+Z2V0VHJ1c3RQYXRoKCk7CiAgICAgICAgc3dpdGNoICh0cnVlKSB7CiAgICAgICAgICAgIGNhc2UgJHRydXN0UGF0aCBpbnN0YW5jZW9mIENlcnRpZmljYXRlVHJ1c3RQYXRoOgogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5wcm9jZXNzV2l0aENlcnRpZmljYXRlKCRjbGllbnREYXRhSlNPTkhhc2gsICRhdHRlc3RhdGlvblN0YXRlbWVudCwgJGF1dGhlbnRpY2F0b3JEYXRhLCAkdHJ1c3RQYXRoKTsKICAgICAgICAgICAgY2FzZSAkdHJ1c3RQYXRoIGluc3RhbmNlb2YgRWNkYWFLZXlJZFRydXN0UGF0aDoKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cHJvY2Vzc1dpdGhFQ0RBQSgpOwogICAgICAgICAgICBjYXNlICR0cnVzdFBhdGggaW5zdGFuY2VvZiBFbXB0eVRydXN0UGF0aDoKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cHJvY2Vzc1dpdGhTZWxmQXR0ZXN0YXRpb24oJGNsaWVudERhdGFKU09OSGFzaCwgJGF0dGVzdGF0aW9uU3RhdGVtZW50LCAkYXV0aGVudGljYXRvckRhdGEpOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5zdXBwb3J0ZWQgYXR0ZXN0YXRpb24gc3RhdGVtZW50Jyk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkW10gJGF0dGVzdGF0aW9uCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gbG9hZEJhc2ljVHlwZShhcnJheSAkYXR0ZXN0YXRpb24pOiBBdHRlc3RhdGlvblN0YXRlbWVudAogICAgewogICAgICAgICRjZXJ0aWZpY2F0ZXMgPSAkYXR0ZXN0YXRpb25bJ2F0dFN0bXQnXVsneDVjJ107CiAgICAgICAgQXNzZXJ0aW9uOjppc0FycmF5KCRjZXJ0aWZpY2F0ZXMsICdUaGUgYXR0ZXN0YXRpb24gc3RhdGVtZW50IHZhbHVlICJ4NWMiIG11c3QgYmUgYSBsaXN0IHdpdGggYXQgbGVhc3Qgb25lIGNlcnRpZmljYXRlLicpOwogICAgICAgIEFzc2VydGlvbjo6bWluQ291bnQoJGNlcnRpZmljYXRlcywgMSwgJ1RoZSBhdHRlc3RhdGlvbiBzdGF0ZW1lbnQgdmFsdWUgIng1YyIgbXVzdCBiZSBhIGxpc3Qgd2l0aCBhdCBsZWFzdCBvbmUgY2VydGlmaWNhdGUuJyk7CiAgICAgICAgJGNlcnRpZmljYXRlcyA9IENlcnRpZmljYXRlVG9vbGJveDo6Y29udmVydEFsbERFUlRvUEVNKCRjZXJ0aWZpY2F0ZXMpOwoKICAgICAgICByZXR1cm4gQXR0ZXN0YXRpb25TdGF0ZW1lbnQ6OmNyZWF0ZUJhc2ljKCRhdHRlc3RhdGlvblsnZm10J10sICRhdHRlc3RhdGlvblsnYXR0U3RtdCddLCBuZXcgQ2VydGlmaWNhdGVUcnVzdFBhdGgoJGNlcnRpZmljYXRlcykpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gbG9hZEVjZGFhVHlwZShhcnJheSAkYXR0ZXN0YXRpb24pOiBBdHRlc3RhdGlvblN0YXRlbWVudAogICAgewogICAgICAgICRlY2RhYUtleUlkID0gJGF0dGVzdGF0aW9uWydhdHRTdG10J11bJ2VjZGFhS2V5SWQnXTsKICAgICAgICBBc3NlcnRpb246OnN0cmluZygkZWNkYWFLZXlJZCwgJ1RoZSBhdHRlc3RhdGlvbiBzdGF0ZW1lbnQgdmFsdWUgImVjZGFhS2V5SWQiIGlzIGludmFsaWQuJyk7CgogICAgICAgIHJldHVybiBBdHRlc3RhdGlvblN0YXRlbWVudDo6Y3JlYXRlRWNkYWEoJGF0dGVzdGF0aW9uWydmbXQnXSwgJGF0dGVzdGF0aW9uWydhdHRTdG10J10sIG5ldyBFY2RhYUtleUlkVHJ1c3RQYXRoKCRhdHRlc3RhdGlvblsnZWNkYWFLZXlJZCddKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkYXR0ZXN0YXRpb24KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBsb2FkRW1wdHlUeXBlKGFycmF5ICRhdHRlc3RhdGlvbik6IEF0dGVzdGF0aW9uU3RhdGVtZW50CiAgICB7CiAgICAgICAgcmV0dXJuIEF0dGVzdGF0aW9uU3RhdGVtZW50OjpjcmVhdGVTZWxmKCRhdHRlc3RhdGlvblsnZm10J10sICRhdHRlc3RhdGlvblsnYXR0U3RtdCddLCBuZXcgRW1wdHlUcnVzdFBhdGgoKSk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja0NlcnRpZmljYXRlKHN0cmluZyAkYXR0ZXN0bkNlcnQsIEF1dGhlbnRpY2F0b3JEYXRhICRhdXRoZW50aWNhdG9yRGF0YSk6IHZvaWQKICAgIHsKICAgICAgICAkcGFyc2VkID0gb3BlbnNzbF94NTA5X3BhcnNlKCRhdHRlc3RuQ2VydCk7CiAgICAgICAgQXNzZXJ0aW9uOjppc0FycmF5KCRwYXJzZWQsICdJbnZhbGlkIGNlcnRpZmljYXRlJyk7CgogICAgICAgIC8vQ2hlY2sgdmVyc2lvbgogICAgICAgIEFzc2VydGlvbjo6ZmFsc2UoIWlzc2V0KCRwYXJzZWRbJ3ZlcnNpb24nXSkgfHwgMiAhPT0gJHBhcnNlZFsndmVyc2lvbiddLCAnSW52YWxpZCBjZXJ0aWZpY2F0ZSB2ZXJzaW9uJyk7CgogICAgICAgIC8vQ2hlY2sgc3ViamVjdCBmaWVsZAogICAgICAgIEFzc2VydGlvbjo6ZmFsc2UoIWlzc2V0KCRwYXJzZWRbJ25hbWUnXSkgfHwgZmFsc2UgPT09IG1iX3N0cnBvcygkcGFyc2VkWyduYW1lJ10sICcvT1U9QXV0aGVudGljYXRvciBBdHRlc3RhdGlvbicpLCAnSW52YWxpZCBjZXJ0aWZpY2F0ZSBuYW1lLiBUaGUgU3ViamVjdCBPcmdhbml6YXRpb24gVW5pdCBtdXN0IGJlICJBdXRoZW50aWNhdG9yIEF0dGVzdGF0aW9uIicpOwoKICAgICAgICAvL0NoZWNrIGV4dGVuc2lvbnMKICAgICAgICBBc3NlcnRpb246OmZhbHNlKCFpc3NldCgkcGFyc2VkWydleHRlbnNpb25zJ10pIHx8ICFpc19hcnJheSgkcGFyc2VkWydleHRlbnNpb25zJ10pLCAnQ2VydGlmaWNhdGUgZXh0ZW5zaW9ucyBhcmUgbWlzc2luZycpOwoKICAgICAgICAvL0NoZWNrIGNlcnRpZmljYXRlIGlzIG5vdCBhIENBIGNlcnQKICAgICAgICBBc3NlcnRpb246OmZhbHNlKCFpc3NldCgkcGFyc2VkWydleHRlbnNpb25zJ11bJ2Jhc2ljQ29uc3RyYWludHMnXSkgfHwgJ0NBOkZBTFNFJyAhPT0gJHBhcnNlZFsnZXh0ZW5zaW9ucyddWydiYXNpY0NvbnN0cmFpbnRzJ10sICdUaGUgQmFzaWMgQ29uc3RyYWludHMgZXh0ZW5zaW9uIG11c3QgaGF2ZSB0aGUgQ0EgY29tcG9uZW50IHNldCB0byBmYWxzZScpOwoKICAgICAgICAkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSA9ICRhdXRoZW50aWNhdG9yRGF0YS0+Z2V0QXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSgpOwogICAgICAgIEFzc2VydGlvbjo6bm90TnVsbCgkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSwgJ05vIGF0dGVzdGVkIGNyZWRlbnRpYWwgYXZhaWxhYmxlJyk7CgogICAgICAgIC8vIGlkLWZpZG8tZ2VuLWNlLWFhZ3VpZCBPSUQgY2hlY2sKICAgICAgICBBc3NlcnRpb246OmZhbHNlKGluX2FycmF5KCcxLjMuNi4xLjQuMS40NTcyNC4xLjEuNCcsICRwYXJzZWRbJ2V4dGVuc2lvbnMnXSwgdHJ1ZSkgJiYgIWhhc2hfZXF1YWxzKCRhdHRlc3RlZENyZWRlbnRpYWxEYXRhLT5nZXRBYWd1aWQoKS0+Z2V0Qnl0ZXMoKSwgJHBhcnNlZFsnZXh0ZW5zaW9ucyddWycxLjMuNi4xLjQuMS40NTcyNC4xLjEuNCddKSwgJ1RoZSB2YWx1ZSBvZiB0aGUgImFhZ3VpZCIgZG9lcyBub3QgbWF0Y2ggd2l0aCB0aGUgY2VydGlmaWNhdGUnKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHByb2Nlc3NXaXRoQ2VydGlmaWNhdGUoc3RyaW5nICRjbGllbnREYXRhSlNPTkhhc2gsIEF0dGVzdGF0aW9uU3RhdGVtZW50ICRhdHRlc3RhdGlvblN0YXRlbWVudCwgQXV0aGVudGljYXRvckRhdGEgJGF1dGhlbnRpY2F0b3JEYXRhLCBDZXJ0aWZpY2F0ZVRydXN0UGF0aCAkdHJ1c3RQYXRoKTogYm9vbAogICAgewogICAgICAgICRjZXJ0aWZpY2F0ZXMgPSAkdHJ1c3RQYXRoLT5nZXRDZXJ0aWZpY2F0ZXMoKTsKCiAgICAgICAgLy8gQ2hlY2sgbGVhZiBjZXJ0aWZpY2F0ZQogICAgICAgICR0aGlzLT5jaGVja0NlcnRpZmljYXRlKCRjZXJ0aWZpY2F0ZXNbMF0sICRhdXRoZW50aWNhdG9yRGF0YSk7CgogICAgICAgIC8vIEdldCB0aGUgQ09TRSBhbGdvcml0aG0gaWRlbnRpZmllciBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgT3BlblNTTCBvbmUKICAgICAgICAkY29zZUFsZ29yaXRobUlkZW50aWZpZXIgPSAoaW50KSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldCgnYWxnJyk7CiAgICAgICAgJG9wZW5zc2xBbGdvcml0aG1JZGVudGlmaWVyID0gQWxnb3JpdGhtczo6Z2V0T3BlbnNzbEFsZ29yaXRobUZvcigkY29zZUFsZ29yaXRobUlkZW50aWZpZXIpOwoKICAgICAgICAvLyBWZXJpZmljYXRpb24gb2YgdGhlIHNpZ25hdHVyZQogICAgICAgICRzaWduZWREYXRhID0gJGF1dGhlbnRpY2F0b3JEYXRhLT5nZXRBdXRoRGF0YSgpLiRjbGllbnREYXRhSlNPTkhhc2g7CiAgICAgICAgJHJlc3VsdCA9IG9wZW5zc2xfdmVyaWZ5KCRzaWduZWREYXRhLCAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldCgnc2lnJyksICRjZXJ0aWZpY2F0ZXNbMF0sICRvcGVuc3NsQWxnb3JpdGhtSWRlbnRpZmllcik7CgogICAgICAgIHJldHVybiAxID09PSAkcmVzdWx0OwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcHJvY2Vzc1dpdGhFQ0RBQSgpOiBib29sCiAgICB7CiAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oJ0VDREFBIG5vdCBzdXBwb3J0ZWQnKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHByb2Nlc3NXaXRoU2VsZkF0dGVzdGF0aW9uKHN0cmluZyAkY2xpZW50RGF0YUpTT05IYXNoLCBBdHRlc3RhdGlvblN0YXRlbWVudCAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQsIEF1dGhlbnRpY2F0b3JEYXRhICRhdXRoZW50aWNhdG9yRGF0YSk6IGJvb2wKICAgIHsKICAgICAgICAkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSA9ICRhdXRoZW50aWNhdG9yRGF0YS0+Z2V0QXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSgpOwogICAgICAgIEFzc2VydGlvbjo6bm90TnVsbCgkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSwgJ05vIGF0dGVzdGVkIGNyZWRlbnRpYWwgYXZhaWxhYmxlJyk7CiAgICAgICAgJGNyZWRlbnRpYWxQdWJsaWNLZXkgPSAkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YS0+Z2V0Q3JlZGVudGlhbFB1YmxpY0tleSgpOwogICAgICAgIEFzc2VydGlvbjo6bm90TnVsbCgkY3JlZGVudGlhbFB1YmxpY0tleSwgJ05vIGNyZWRlbnRpYWwgcHVibGljIGtleSBhdmFpbGFibGUnKTsKICAgICAgICAkcHVibGljS2V5U3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbSgkY3JlZGVudGlhbFB1YmxpY0tleSk7CiAgICAgICAgJHB1YmxpY0tleSA9ICR0aGlzLT5kZWNvZGVyLT5kZWNvZGUoJHB1YmxpY0tleVN0cmVhbSk7CiAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCRwdWJsaWNLZXlTdHJlYW0tPmlzRU9GKCksICdJbnZhbGlkIHB1YmxpYyBrZXkuIFByZXNlbmNlIG9mIGV4dHJhIGJ5dGVzLicpOwogICAgICAgICRwdWJsaWNLZXlTdHJlYW0tPmNsb3NlKCk7CiAgICAgICAgQXNzZXJ0aW9uOjppc0luc3RhbmNlT2YoJHB1YmxpY0tleSwgTWFwT2JqZWN0OjpjbGFzcywgJ1RoZSBhdHRlc3RlZCBjcmVkZW50aWFsIGRhdGEgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIHB1YmxpYyBrZXkuJyk7CiAgICAgICAgJHB1YmxpY0tleSA9ICRwdWJsaWNLZXktPmdldE5vcm1hbGl6ZWREYXRhKGZhbHNlKTsKICAgICAgICAkcHVibGljS2V5ID0gbmV3IEtleSgkcHVibGljS2V5KTsKICAgICAgICBBc3NlcnRpb246OmVxKCRwdWJsaWNLZXktPmFsZygpLCAoaW50KSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldCgnYWxnJyksICdUaGUgYWxnb3JpdGhtIG9mIHRoZSBhdHRlc3RhdGlvbiBzdGF0ZW1lbnQgYW5kIHRoZSBrZXkgYXJlIG5vdCBpZGVudGljYWwuJyk7CgogICAgICAgICRkYXRhVG9WZXJpZnkgPSAkYXV0aGVudGljYXRvckRhdGEtPmdldEF1dGhEYXRhKCkuJGNsaWVudERhdGFKU09OSGFzaDsKICAgICAgICAkYWxnb3JpdGhtID0gJHRoaXMtPmFsZ29yaXRobU1hbmFnZXItPmdldCgoaW50KSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldCgnYWxnJykpOwogICAgICAgIGlmICghJGFsZ29yaXRobSBpbnN0YW5jZW9mIFNpZ25hdHVyZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbignSW52YWxpZCBhbGdvcml0aG0nKTsKICAgICAgICB9CiAgICAgICAgJHNpZ25hdHVyZSA9IENvc2VTaWduYXR1cmVGaXhlcjo6Zml4KCRhdHRlc3RhdGlvblN0YXRlbWVudC0+Z2V0KCdzaWcnKSwgJGFsZ29yaXRobSk7CgogICAgICAgIHJldHVybiAkYWxnb3JpdGhtLT52ZXJpZnkoJGRhdGFUb1ZlcmlmeSwgJHB1YmxpY0tleSwgJHNpZ25hdHVyZSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AttestationStatement/TPMAttestationStatementSupport.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50OwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBCYXNlNjRVcmxcQmFzZTY0VXJsOwp1c2UgQ0JPUlxEZWNvZGVyOwp1c2UgQ0JPUlxNYXBPYmplY3Q7CnVzZSBDQk9SXE90aGVyT2JqZWN0XE90aGVyT2JqZWN0TWFuYWdlcjsKdXNlIENCT1JcVGFnXFRhZ09iamVjdE1hbmFnZXI7CnVzZSBDb3NlXEFsZ29yaXRobXM7CnVzZSBDb3NlXEtleVxFYzJLZXk7CnVzZSBDb3NlXEtleVxLZXk7CnVzZSBDb3NlXEtleVxPa3BLZXk7CnVzZSBDb3NlXEtleVxSc2FLZXk7CnVzZSBmdW5jdGlvbiBjb3VudDsKdXNlIGZ1bmN0aW9uIGluX2FycmF5Owp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgZnVuY3Rpb24gaXNfYXJyYXk7CnVzZSBSdW50aW1lRXhjZXB0aW9uOwp1c2UgU2FmZVxEYXRlVGltZUltbXV0YWJsZTsKdXNlIGZ1bmN0aW9uIFNhZmVcc3ByaW50ZjsKdXNlIGZ1bmN0aW9uIFNhZmVcdW5wYWNrOwp1c2UgV2ViYXV0aG5cQXV0aGVudGljYXRvckRhdGE7CnVzZSBXZWJhdXRoblxDZXJ0aWZpY2F0ZVRvb2xib3g7CnVzZSBXZWJhdXRoblxTdHJpbmdTdHJlYW07CnVzZSBXZWJhdXRoblxUcnVzdFBhdGhcQ2VydGlmaWNhdGVUcnVzdFBhdGg7CnVzZSBXZWJhdXRoblxUcnVzdFBhdGhcRWNkYWFLZXlJZFRydXN0UGF0aDsKCmZpbmFsIGNsYXNzIFRQTUF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydCBpbXBsZW1lbnRzIEF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydAp7CiAgICBwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJ3RwbSc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkYXR0ZXN0YXRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWQoYXJyYXkgJGF0dGVzdGF0aW9uKTogQXR0ZXN0YXRpb25TdGF0ZW1lbnQKICAgIHsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkYXR0ZXN0YXRpb24sICdhdHRTdG10JywgJ0ludmFsaWQgYXR0ZXN0YXRpb24gb2JqZWN0Jyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlOb3RFeGlzdHMoJGF0dGVzdGF0aW9uWydhdHRTdG10J10sICdlY2RhYUtleUlkJywgJ0VDREFBIG5vdCBzdXBwb3J0ZWQnKTsKICAgICAgICBmb3JlYWNoIChbJ3ZlcicsICd2ZXInLCAnc2lnJywgJ2FsZycsICdjZXJ0SW5mbycsICdwdWJBcmVhJ10gYXMgJGtleSkgewogICAgICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkYXR0ZXN0YXRpb25bJ2F0dFN0bXQnXSwgJGtleSwgc3ByaW50ZignVGhlIGF0dGVzdGF0aW9uIHN0YXRlbWVudCB2YWx1ZSAiJXMiIGlzIG1pc3NpbmcuJywgJGtleSkpOwogICAgICAgIH0KICAgICAgICBBc3NlcnRpb246OmVxKCcyLjAnLCAkYXR0ZXN0YXRpb25bJ2F0dFN0bXQnXVsndmVyJ10sICdJbnZhbGlkIGF0dGVzdGF0aW9uIG9iamVjdCcpOwoKICAgICAgICAkY2VydEluZm8gPSAkdGhpcy0+Y2hlY2tDZXJ0SW5mbygkYXR0ZXN0YXRpb25bJ2F0dFN0bXQnXVsnY2VydEluZm8nXSk7CiAgICAgICAgQXNzZXJ0aW9uOjplcSgnODAxNycsIGJpbjJoZXgoJGNlcnRJbmZvWyd0eXBlJ10pLCAnSW52YWxpZCBhdHRlc3RhdGlvbiBvYmplY3QnKTsKCiAgICAgICAgJHB1YkFyZWEgPSAkdGhpcy0+Y2hlY2tQdWJBcmVhKCRhdHRlc3RhdGlvblsnYXR0U3RtdCddWydwdWJBcmVhJ10pOwogICAgICAgICRwdWJBcmVhQXR0ZXN0ZWROYW1lQWxnID0gbWJfc3Vic3RyKCRjZXJ0SW5mb1snYXR0ZXN0ZWROYW1lJ10sIDAsIDIsICc4Yml0Jyk7CiAgICAgICAgJHB1YkFyZWFIYXNoID0gaGFzaCgkdGhpcy0+Z2V0VFBNSGFzaCgkcHViQXJlYUF0dGVzdGVkTmFtZUFsZyksICRhdHRlc3RhdGlvblsnYXR0U3RtdCddWydwdWJBcmVhJ10sIHRydWUpOwogICAgICAgICRhdHRlc3RlZE5hbWUgPSAkcHViQXJlYUF0dGVzdGVkTmFtZUFsZy4kcHViQXJlYUhhc2g7CiAgICAgICAgQXNzZXJ0aW9uOjplcSgkYXR0ZXN0ZWROYW1lLCAkY2VydEluZm9bJ2F0dGVzdGVkTmFtZSddLCAnSW52YWxpZCBhdHRlc3RlZCBuYW1lJyk7CgogICAgICAgICRhdHRlc3RhdGlvblsnYXR0U3RtdCddWydwYXJzZWRDZXJ0SW5mbyddID0gJGNlcnRJbmZvOwogICAgICAgICRhdHRlc3RhdGlvblsnYXR0U3RtdCddWydwYXJzZWRQdWJBcmVhJ10gPSAkcHViQXJlYTsKCiAgICAgICAgJGNlcnRpZmljYXRlcyA9IENlcnRpZmljYXRlVG9vbGJveDo6Y29udmVydEFsbERFUlRvUEVNKCRhdHRlc3RhdGlvblsnYXR0U3RtdCddWyd4NWMnXSk7CiAgICAgICAgQXNzZXJ0aW9uOjptaW5Db3VudCgkY2VydGlmaWNhdGVzLCAxLCAnVGhlIGF0dGVzdGF0aW9uIHN0YXRlbWVudCB2YWx1ZSAieDVjIiBtdXN0IGJlIGEgbGlzdCB3aXRoIGF0IGxlYXN0IG9uZSBjZXJ0aWZpY2F0ZS4nKTsKCiAgICAgICAgcmV0dXJuIEF0dGVzdGF0aW9uU3RhdGVtZW50OjpjcmVhdGVBdHRDQSgKICAgICAgICAgICAgJHRoaXMtPm5hbWUoKSwKICAgICAgICAgICAgJGF0dGVzdGF0aW9uWydhdHRTdG10J10sCiAgICAgICAgICAgIG5ldyBDZXJ0aWZpY2F0ZVRydXN0UGF0aCgkY2VydGlmaWNhdGVzKQogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzVmFsaWQoc3RyaW5nICRjbGllbnREYXRhSlNPTkhhc2gsIEF0dGVzdGF0aW9uU3RhdGVtZW50ICRhdHRlc3RhdGlvblN0YXRlbWVudCwgQXV0aGVudGljYXRvckRhdGEgJGF1dGhlbnRpY2F0b3JEYXRhKTogYm9vbAogICAgewogICAgICAgICRhdHRUb0JlU2lnbmVkID0gJGF1dGhlbnRpY2F0b3JEYXRhLT5nZXRBdXRoRGF0YSgpLiRjbGllbnREYXRhSlNPTkhhc2g7CiAgICAgICAgJGF0dFRvQmVTaWduZWRIYXNoID0gaGFzaChBbGdvcml0aG1zOjpnZXRIYXNoQWxnb3JpdGhtRm9yKChpbnQpICRhdHRlc3RhdGlvblN0YXRlbWVudC0+Z2V0KCdhbGcnKSksICRhdHRUb0JlU2lnbmVkLCB0cnVlKTsKICAgICAgICBBc3NlcnRpb246OmVxKCRhdHRlc3RhdGlvblN0YXRlbWVudC0+Z2V0KCdwYXJzZWRDZXJ0SW5mbycpWydleHRyYURhdGEnXSwgJGF0dFRvQmVTaWduZWRIYXNoLCAnSW52YWxpZCBhdHRlc3RhdGlvbiBoYXNoJyk7CiAgICAgICAgJHRoaXMtPmNoZWNrVW5pcXVlUHVibGljS2V5KAogICAgICAgICAgICAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldCgncGFyc2VkUHViQXJlYScpWyd1bmlxdWUnXSwKICAgICAgICAgICAgJGF1dGhlbnRpY2F0b3JEYXRhLT5nZXRBdHRlc3RlZENyZWRlbnRpYWxEYXRhKCktPmdldENyZWRlbnRpYWxQdWJsaWNLZXkoKQogICAgICAgICk7CgogICAgICAgIHN3aXRjaCAodHJ1ZSkgewogICAgICAgICAgICBjYXNlICRhdHRlc3RhdGlvblN0YXRlbWVudC0+Z2V0VHJ1c3RQYXRoKCkgaW5zdGFuY2VvZiBDZXJ0aWZpY2F0ZVRydXN0UGF0aDoKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cHJvY2Vzc1dpdGhDZXJ0aWZpY2F0ZSgkY2xpZW50RGF0YUpTT05IYXNoLCAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQsICRhdXRoZW50aWNhdG9yRGF0YSk7CiAgICAgICAgICAgIGNhc2UgJGF0dGVzdGF0aW9uU3RhdGVtZW50LT5nZXRUcnVzdFBhdGgoKSBpbnN0YW5jZW9mIEVjZGFhS2V5SWRUcnVzdFBhdGg6CiAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnByb2Nlc3NXaXRoRUNEQUEoKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1Vuc3VwcG9ydGVkIGF0dGVzdGF0aW9uIHN0YXRlbWVudCcpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNoZWNrVW5pcXVlUHVibGljS2V5KHN0cmluZyAkdW5pcXVlLCBzdHJpbmcgJGNib3JQdWJsaWNLZXkpOiB2b2lkCiAgICB7CiAgICAgICAgJGNib3JEZWNvZGVyID0gbmV3IERlY29kZXIobmV3IFRhZ09iamVjdE1hbmFnZXIoKSwgbmV3IE90aGVyT2JqZWN0TWFuYWdlcigpKTsKICAgICAgICAkcHVibGljS2V5ID0gJGNib3JEZWNvZGVyLT5kZWNvZGUobmV3IFN0cmluZ1N0cmVhbSgkY2JvclB1YmxpY0tleSkpOwogICAgICAgIEFzc2VydGlvbjo6aXNJbnN0YW5jZU9mKCRwdWJsaWNLZXksIE1hcE9iamVjdDo6Y2xhc3MsICdJbnZhbGlkIHB1YmxpYyBrZXknKTsKICAgICAgICAka2V5ID0gbmV3IEtleSgkcHVibGljS2V5LT5nZXROb3JtYWxpemVkRGF0YShmYWxzZSkpOwoKICAgICAgICBzd2l0Y2ggKCRrZXktPnR5cGUoKSkgewogICAgICAgICAgICBjYXNlIEtleTo6VFlQRV9PS1A6CiAgICAgICAgICAgICAgICAkdW5pcXVlRnJvbUtleSA9IChuZXcgT2twS2V5KCRrZXktPmdldERhdGEoKSkpLT54KCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBLZXk6OlRZUEVfRUMyOgogICAgICAgICAgICAgICAgJGVjMktleSA9IG5ldyBFYzJLZXkoJGtleS0+Z2V0RGF0YSgpKTsKICAgICAgICAgICAgICAgICR1bmlxdWVGcm9tS2V5ID0gIlx4MDQiLiRlYzJLZXktPngoKS4kZWMyS2V5LT55KCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBLZXk6OlRZUEVfUlNBOgogICAgICAgICAgICAgICAgJHVuaXF1ZUZyb21LZXkgPSAobmV3IFJzYUtleSgka2V5LT5nZXREYXRhKCkpKS0+bigpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIGtleSB0eXBlLicpOwogICAgICAgIH0KCiAgICAgICAgQXNzZXJ0aW9uOjplcSgkdW5pcXVlLCAkdW5pcXVlRnJvbUtleSwgJ0ludmFsaWQgcHViQXJlYS51bmlxdWUgdmFsdWUnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWRbXQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNoZWNrQ2VydEluZm8oc3RyaW5nICRkYXRhKTogYXJyYXkKICAgIHsKICAgICAgICAkY2VydEluZm8gPSBuZXcgU3RyaW5nU3RyZWFtKCRkYXRhKTsKCiAgICAgICAgJG1hZ2ljID0gJGNlcnRJbmZvLT5yZWFkKDQpOwogICAgICAgIEFzc2VydGlvbjo6ZXEoJ2ZmNTQ0MzQ3JywgYmluMmhleCgkbWFnaWMpLCAnSW52YWxpZCBhdHRlc3RhdGlvbiBvYmplY3QnKTsKCiAgICAgICAgJHR5cGUgPSAkY2VydEluZm8tPnJlYWQoMik7CgogICAgICAgICRxdWFsaWZpZWRTaWduZXJMZW5ndGggPSB1bnBhY2soJ24nLCAkY2VydEluZm8tPnJlYWQoMikpWzFdOwogICAgICAgICRxdWFsaWZpZWRTaWduZXIgPSAkY2VydEluZm8tPnJlYWQoJHF1YWxpZmllZFNpZ25lckxlbmd0aCk7IC8vSWdub3JlZAoKICAgICAgICAkZXh0cmFEYXRhTGVuZ3RoID0gdW5wYWNrKCduJywgJGNlcnRJbmZvLT5yZWFkKDIpKVsxXTsKICAgICAgICAkZXh0cmFEYXRhID0gJGNlcnRJbmZvLT5yZWFkKCRleHRyYURhdGFMZW5ndGgpOwoKICAgICAgICAkY2xvY2tJbmZvID0gJGNlcnRJbmZvLT5yZWFkKDE3KTsgLy9JZ25vcmUKCiAgICAgICAgJGZpcm13YXJlVmVyc2lvbiA9ICRjZXJ0SW5mby0+cmVhZCg4KTsKCiAgICAgICAgJGF0dGVzdGVkTmFtZUxlbmd0aCA9IHVucGFjaygnbicsICRjZXJ0SW5mby0+cmVhZCgyKSlbMV07CiAgICAgICAgJGF0dGVzdGVkTmFtZSA9ICRjZXJ0SW5mby0+cmVhZCgkYXR0ZXN0ZWROYW1lTGVuZ3RoKTsKCiAgICAgICAgJGF0dGVzdGVkUXVhbGlmaWVkTmFtZUxlbmd0aCA9IHVucGFjaygnbicsICRjZXJ0SW5mby0+cmVhZCgyKSlbMV07CiAgICAgICAgJGF0dGVzdGVkUXVhbGlmaWVkTmFtZSA9ICRjZXJ0SW5mby0+cmVhZCgkYXR0ZXN0ZWRRdWFsaWZpZWROYW1lTGVuZ3RoKTsgLy9JZ25vcmUKICAgICAgICBBc3NlcnRpb246OnRydWUoJGNlcnRJbmZvLT5pc0VPRigpLCAnSW52YWxpZCBjZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbi4gUHJlc2VuY2Ugb2YgZXh0cmEgYnl0ZXMuJyk7CiAgICAgICAgJGNlcnRJbmZvLT5jbG9zZSgpOwoKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAnbWFnaWMnID0+ICRtYWdpYywKICAgICAgICAgICAgJ3R5cGUnID0+ICR0eXBlLAogICAgICAgICAgICAncXVhbGlmaWVkU2lnbmVyJyA9PiAkcXVhbGlmaWVkU2lnbmVyLAogICAgICAgICAgICAnZXh0cmFEYXRhJyA9PiAkZXh0cmFEYXRhLAogICAgICAgICAgICAnY2xvY2tJbmZvJyA9PiAkY2xvY2tJbmZvLAogICAgICAgICAgICAnZmlybXdhcmVWZXJzaW9uJyA9PiAkZmlybXdhcmVWZXJzaW9uLAogICAgICAgICAgICAnYXR0ZXN0ZWROYW1lJyA9PiAkYXR0ZXN0ZWROYW1lLAogICAgICAgICAgICAnYXR0ZXN0ZWRRdWFsaWZpZWROYW1lJyA9PiAkYXR0ZXN0ZWRRdWFsaWZpZWROYW1lLAogICAgICAgIF07CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkW10KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja1B1YkFyZWEoc3RyaW5nICRkYXRhKTogYXJyYXkKICAgIHsKICAgICAgICAkcHViQXJlYSA9IG5ldyBTdHJpbmdTdHJlYW0oJGRhdGEpOwoKICAgICAgICAkdHlwZSA9ICRwdWJBcmVhLT5yZWFkKDIpOwoKICAgICAgICAkbmFtZUFsZyA9ICRwdWJBcmVhLT5yZWFkKDIpOwoKICAgICAgICAkb2JqZWN0QXR0cmlidXRlcyA9ICRwdWJBcmVhLT5yZWFkKDQpOwoKICAgICAgICAkYXV0aFBvbGljeUxlbmd0aCA9IHVucGFjaygnbicsICRwdWJBcmVhLT5yZWFkKDIpKVsxXTsKICAgICAgICAkYXV0aFBvbGljeSA9ICRwdWJBcmVhLT5yZWFkKCRhdXRoUG9saWN5TGVuZ3RoKTsKCiAgICAgICAgJHBhcmFtZXRlcnMgPSAkdGhpcy0+Z2V0UGFyYW1ldGVycygkdHlwZSwgJHB1YkFyZWEpOwoKICAgICAgICAkdW5pcXVlTGVuZ3RoID0gdW5wYWNrKCduJywgJHB1YkFyZWEtPnJlYWQoMikpWzFdOwogICAgICAgICR1bmlxdWUgPSAkcHViQXJlYS0+cmVhZCgkdW5pcXVlTGVuZ3RoKTsKICAgICAgICBBc3NlcnRpb246OnRydWUoJHB1YkFyZWEtPmlzRU9GKCksICdJbnZhbGlkIHB1YmxpYyBhcmVhLiBQcmVzZW5jZSBvZiBleHRyYSBieXRlcy4nKTsKICAgICAgICAkcHViQXJlYS0+Y2xvc2UoKTsKCiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJ3R5cGUnID0+ICR0eXBlLAogICAgICAgICAgICAnbmFtZUFsZycgPT4gJG5hbWVBbGcsCiAgICAgICAgICAgICdvYmplY3RBdHRyaWJ1dGVzJyA9PiAkb2JqZWN0QXR0cmlidXRlcywKICAgICAgICAgICAgJ2F1dGhQb2xpY3knID0+ICRhdXRoUG9saWN5LAogICAgICAgICAgICAncGFyYW1ldGVycycgPT4gJHBhcmFtZXRlcnMsCiAgICAgICAgICAgICd1bmlxdWUnID0+ICR1bmlxdWUsCiAgICAgICAgXTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWRbXQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldFBhcmFtZXRlcnMoc3RyaW5nICR0eXBlLCBTdHJpbmdTdHJlYW0gJHN0cmVhbSk6IGFycmF5CiAgICB7CiAgICAgICAgc3dpdGNoIChiaW4yaGV4KCR0eXBlKSkgewogICAgICAgICAgICBjYXNlICcwMDAxJzoKICAgICAgICAgICAgY2FzZSAnMDAxNCc6CiAgICAgICAgICAgIGNhc2UgJzAwMTYnOgogICAgICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICAgICAnc3ltbWV0cmljJyA9PiAkc3RyZWFtLT5yZWFkKDIpLAogICAgICAgICAgICAgICAgICAgICdzY2hlbWUnID0+ICRzdHJlYW0tPnJlYWQoMiksCiAgICAgICAgICAgICAgICAgICAgJ2tleUJpdHMnID0+IHVucGFjaygnbicsICRzdHJlYW0tPnJlYWQoMikpWzFdLAogICAgICAgICAgICAgICAgICAgICdleHBvbmVudCcgPT4gJHRoaXMtPmdldEV4cG9uZW50KCRzdHJlYW0tPnJlYWQoNCkpLAogICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgY2FzZSAnMDAxOCc6CiAgICAgICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgICAgICdzeW1tZXRyaWMnID0+ICRzdHJlYW0tPnJlYWQoMiksCiAgICAgICAgICAgICAgICAgICAgJ3NjaGVtZScgPT4gJHN0cmVhbS0+cmVhZCgyKSwKICAgICAgICAgICAgICAgICAgICAnY3VydmVJZCcgPT4gJHN0cmVhbS0+cmVhZCgyKSwKICAgICAgICAgICAgICAgICAgICAna2RmJyA9PiAkc3RyZWFtLT5yZWFkKDIpLAogICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1Vuc3VwcG9ydGVkIHR5cGUnKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRFeHBvbmVudChzdHJpbmcgJGV4cG9uZW50KTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICcwMDAwMDAwMCcgPT09IGJpbjJoZXgoJGV4cG9uZW50KSA/IEJhc2U2NFVybDo6ZGVjb2RlKCdBUUFCJykgOiAkZXhwb25lbnQ7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRUUE1IYXNoKHN0cmluZyAkbmFtZUFsZyk6IHN0cmluZwogICAgewogICAgICAgIHN3aXRjaCAoYmluMmhleCgkbmFtZUFsZykpIHsKICAgICAgICAgICAgY2FzZSAnMDAwNCc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ3NoYTEnOyAvLzogIlRQTV9BTEdfU0hBMSIsCiAgICAgICAgICAgIGNhc2UgJzAwMGInOgogICAgICAgICAgICAgICAgcmV0dXJuICdzaGEyNTYnOyAvLzogIlRQTV9BTEdfU0hBMjU2IiwKICAgICAgICAgICAgY2FzZSAnMDAwYyc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ3NoYTM4NCc7IC8vOiAiVFBNX0FMR19TSEEzODQiLAogICAgICAgICAgICBjYXNlICcwMDBkJzoKICAgICAgICAgICAgICAgIHJldHVybiAnc2hhNTEyJzsgLy86ICJUUE1fQUxHX1NIQTUxMiIsCiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdVbnN1cHBvcnRlZCBoYXNoIGFsZ29yaXRobScpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHByb2Nlc3NXaXRoQ2VydGlmaWNhdGUoc3RyaW5nICRjbGllbnREYXRhSlNPTkhhc2gsIEF0dGVzdGF0aW9uU3RhdGVtZW50ICRhdHRlc3RhdGlvblN0YXRlbWVudCwgQXV0aGVudGljYXRvckRhdGEgJGF1dGhlbnRpY2F0b3JEYXRhKTogYm9vbAogICAgewogICAgICAgICR0cnVzdFBhdGggPSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldFRydXN0UGF0aCgpOwogICAgICAgIEFzc2VydGlvbjo6aXNJbnN0YW5jZU9mKCR0cnVzdFBhdGgsIENlcnRpZmljYXRlVHJ1c3RQYXRoOjpjbGFzcywgJ0ludmFsaWQgdHJ1c3QgcGF0aCcpOwoKICAgICAgICAkY2VydGlmaWNhdGVzID0gJHRydXN0UGF0aC0+Z2V0Q2VydGlmaWNhdGVzKCk7CgogICAgICAgIC8vIENoZWNrIGNlcnRpZmljYXRlIENBIGNoYWluIGFuZCByZXR1cm5zIHRoZSBBdHRlc3RhdGlvbiBDZXJ0aWZpY2F0ZQogICAgICAgICR0aGlzLT5jaGVja0NlcnRpZmljYXRlKCRjZXJ0aWZpY2F0ZXNbMF0sICRhdXRoZW50aWNhdG9yRGF0YSk7CgogICAgICAgIC8vIEdldCB0aGUgQ09TRSBhbGdvcml0aG0gaWRlbnRpZmllciBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgT3BlblNTTCBvbmUKICAgICAgICAkY29zZUFsZ29yaXRobUlkZW50aWZpZXIgPSAoaW50KSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldCgnYWxnJyk7CiAgICAgICAgJG9wZW5zc2xBbGdvcml0aG1JZGVudGlmaWVyID0gQWxnb3JpdGhtczo6Z2V0T3BlbnNzbEFsZ29yaXRobUZvcigkY29zZUFsZ29yaXRobUlkZW50aWZpZXIpOwoKICAgICAgICAkcmVzdWx0ID0gb3BlbnNzbF92ZXJpZnkoJGF0dGVzdGF0aW9uU3RhdGVtZW50LT5nZXQoJ2NlcnRJbmZvJyksICRhdHRlc3RhdGlvblN0YXRlbWVudC0+Z2V0KCdzaWcnKSwgJGNlcnRpZmljYXRlc1swXSwgJG9wZW5zc2xBbGdvcml0aG1JZGVudGlmaWVyKTsKCiAgICAgICAgcmV0dXJuIDEgPT09ICRyZXN1bHQ7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja0NlcnRpZmljYXRlKHN0cmluZyAkYXR0ZXN0bkNlcnQsIEF1dGhlbnRpY2F0b3JEYXRhICRhdXRoZW50aWNhdG9yRGF0YSk6IHZvaWQKICAgIHsKICAgICAgICAkcGFyc2VkID0gb3BlbnNzbF94NTA5X3BhcnNlKCRhdHRlc3RuQ2VydCk7CiAgICAgICAgQXNzZXJ0aW9uOjppc0FycmF5KCRwYXJzZWQsICdJbnZhbGlkIGNlcnRpZmljYXRlJyk7CgogICAgICAgIC8vQ2hlY2sgdmVyc2lvbgogICAgICAgIEFzc2VydGlvbjo6ZmFsc2UoIWlzc2V0KCRwYXJzZWRbJ3ZlcnNpb24nXSkgfHwgMiAhPT0gJHBhcnNlZFsndmVyc2lvbiddLCAnSW52YWxpZCBjZXJ0aWZpY2F0ZSB2ZXJzaW9uJyk7CgogICAgICAgIC8vQ2hlY2sgc3ViamVjdCBmaWVsZCBpcyBlbXB0eQogICAgICAgIEFzc2VydGlvbjo6ZmFsc2UoIWlzc2V0KCRwYXJzZWRbJ3N1YmplY3QnXSkgfHwgIWlzX2FycmF5KCRwYXJzZWRbJ3N1YmplY3QnXSkgfHwgMCAhPT0gY291bnQoJHBhcnNlZFsnc3ViamVjdCddKSwgJ0ludmFsaWQgY2VydGlmaWNhdGUgbmFtZS4gVGhlIFN1YmplY3Qgc2hvdWxkIGJlIGVtcHR5Jyk7CgogICAgICAgIC8vIENoZWNrIHBlcmlvZCBvZiB2YWxpZGl0eQogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRwYXJzZWQsICd2YWxpZEZyb21fdGltZV90JywgJ0ludmFsaWQgY2VydGlmaWNhdGUgc3RhcnQgZGF0ZS4nKTsKICAgICAgICBBc3NlcnRpb246OmludGVnZXIoJHBhcnNlZFsndmFsaWRGcm9tX3RpbWVfdCddLCAnSW52YWxpZCBjZXJ0aWZpY2F0ZSBzdGFydCBkYXRlLicpOwogICAgICAgICRzdGFydERhdGUgPSAobmV3IERhdGVUaW1lSW1tdXRhYmxlKCkpLT5zZXRUaW1lc3RhbXAoJHBhcnNlZFsndmFsaWRGcm9tX3RpbWVfdCddKTsKICAgICAgICBBc3NlcnRpb246OnRydWUoJHN0YXJ0RGF0ZSA8IG5ldyBEYXRlVGltZUltbXV0YWJsZSgpLCAnSW52YWxpZCBjZXJ0aWZpY2F0ZSBzdGFydCBkYXRlLicpOwoKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkcGFyc2VkLCAndmFsaWRUb190aW1lX3QnLCAnSW52YWxpZCBjZXJ0aWZpY2F0ZSBlbmQgZGF0ZS4nKTsKICAgICAgICBBc3NlcnRpb246OmludGVnZXIoJHBhcnNlZFsndmFsaWRUb190aW1lX3QnXSwgJ0ludmFsaWQgY2VydGlmaWNhdGUgZW5kIGRhdGUuJyk7CiAgICAgICAgJGVuZERhdGUgPSAobmV3IERhdGVUaW1lSW1tdXRhYmxlKCkpLT5zZXRUaW1lc3RhbXAoJHBhcnNlZFsndmFsaWRUb190aW1lX3QnXSk7CiAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCRlbmREYXRlID4gbmV3IERhdGVUaW1lSW1tdXRhYmxlKCksICdJbnZhbGlkIGNlcnRpZmljYXRlIGVuZCBkYXRlLicpOwoKICAgICAgICAvL0NoZWNrIGV4dGVuc2lvbnMKICAgICAgICBBc3NlcnRpb246OmZhbHNlKCFpc3NldCgkcGFyc2VkWydleHRlbnNpb25zJ10pIHx8ICFpc19hcnJheSgkcGFyc2VkWydleHRlbnNpb25zJ10pLCAnQ2VydGlmaWNhdGUgZXh0ZW5zaW9ucyBhcmUgbWlzc2luZycpOwoKICAgICAgICAvL0NoZWNrIHN1YmplY3RBbHROYW1lCiAgICAgICAgQXNzZXJ0aW9uOjpmYWxzZSghaXNzZXQoJHBhcnNlZFsnZXh0ZW5zaW9ucyddWydzdWJqZWN0QWx0TmFtZSddKSwgJ1RoZSAic3ViamVjdEFsdE5hbWUiIGlzIG1pc3NpbmcnKTsKCiAgICAgICAgLy9DaGVjayBleHRlbmRlZEtleVVzYWdlCiAgICAgICAgQXNzZXJ0aW9uOjpmYWxzZSghaXNzZXQoJHBhcnNlZFsnZXh0ZW5zaW9ucyddWydleHRlbmRlZEtleVVzYWdlJ10pLCAnVGhlICJzdWJqZWN0QWx0TmFtZSIgaXMgbWlzc2luZycpOwogICAgICAgIEFzc2VydGlvbjo6ZXEoJHBhcnNlZFsnZXh0ZW5zaW9ucyddWydleHRlbmRlZEtleVVzYWdlJ10sICcyLjIzLjEzMy44LjMnLCAnVGhlICJleHRlbmRlZEtleVVzYWdlIiBpcyBpbnZhbGlkJyk7CgogICAgICAgIC8vIGlkLWZpZG8tZ2VuLWNlLWFhZ3VpZCBPSUQgY2hlY2sKICAgICAgICBBc3NlcnRpb246OmZhbHNlKGluX2FycmF5KCcxLjMuNi4xLjQuMS40NTcyNC4xLjEuNCcsICRwYXJzZWRbJ2V4dGVuc2lvbnMnXSwgdHJ1ZSkgJiYgIWhhc2hfZXF1YWxzKCRhdXRoZW50aWNhdG9yRGF0YS0+Z2V0QXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSgpLT5nZXRBYWd1aWQoKS0+Z2V0Qnl0ZXMoKSwgJHBhcnNlZFsnZXh0ZW5zaW9ucyddWycxLjMuNi4xLjQuMS40NTcyNC4xLjEuNCddKSwgJ1RoZSB2YWx1ZSBvZiB0aGUgImFhZ3VpZCIgZG9lcyBub3QgbWF0Y2ggd2l0aCB0aGUgY2VydGlmaWNhdGUnKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHByb2Nlc3NXaXRoRUNEQUEoKTogYm9vbAogICAgewogICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdFQ0RBQSBub3Qgc3VwcG9ydGVkJyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AttestedCredentialData.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBKc29uU2VyaWFsaXphYmxlOwp1c2UgUmFtc2V5XFV1aWRcVXVpZDsKdXNlIFJhbXNleVxVdWlkXFV1aWRJbnRlcmZhY2U7CnVzZSBmdW5jdGlvbiBTYWZlXGJhc2U2NF9kZWNvZGU7CgovKioKICogQHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvd2ViYXV0aG4vI3NlYy1hdHRlc3RlZC1jcmVkZW50aWFsLWRhdGEKICovCmNsYXNzIEF0dGVzdGVkQ3JlZGVudGlhbERhdGEgaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlCnsKICAgIC8qKgogICAgICogQHZhciBVdWlkSW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJGFhZ3VpZDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJGNyZWRlbnRpYWxJZDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkY3JlZGVudGlhbFB1YmxpY0tleTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoVXVpZEludGVyZmFjZSAkYWFndWlkLCBzdHJpbmcgJGNyZWRlbnRpYWxJZCwgP3N0cmluZyAkY3JlZGVudGlhbFB1YmxpY0tleSkKICAgIHsKICAgICAgICAkdGhpcy0+YWFndWlkID0gJGFhZ3VpZDsKICAgICAgICAkdGhpcy0+Y3JlZGVudGlhbElkID0gJGNyZWRlbnRpYWxJZDsKICAgICAgICAkdGhpcy0+Y3JlZGVudGlhbFB1YmxpY0tleSA9ICRjcmVkZW50aWFsUHVibGljS2V5OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBYWd1aWQoKTogVXVpZEludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YWFndWlkOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRBYWd1aWQoVXVpZEludGVyZmFjZSAkYWFndWlkKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5hYWd1aWQgPSAkYWFndWlkOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDcmVkZW50aWFsSWQoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jcmVkZW50aWFsSWQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENyZWRlbnRpYWxQdWJsaWNLZXkoKTogP3N0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y3JlZGVudGlhbFB1YmxpY0tleTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZFtdICRqc29uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUFycmF5KGFycmF5ICRqc29uKTogc2VsZgogICAgewogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRqc29uLCAnYWFndWlkJywgJ0ludmFsaWQgaW5wdXQuICJhYWd1aWQiIGlzIG1pc3NpbmcuJyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGpzb24sICdjcmVkZW50aWFsSWQnLCAnSW52YWxpZCBpbnB1dC4gImNyZWRlbnRpYWxJZCIgaXMgbWlzc2luZy4nKTsKICAgICAgICBzd2l0Y2ggKHRydWUpIHsKICAgICAgICAgICAgY2FzZSAzNiA9PT0gbWJfc3RybGVuKCRqc29uWydhYWd1aWQnXSwgJzhiaXQnKToKICAgICAgICAgICAgICAgICR1dWlkID0gVXVpZDo6ZnJvbVN0cmluZygkanNvblsnYWFndWlkJ10pOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6IC8vIEtlcHQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgZm9ybWF0CiAgICAgICAgICAgICAgICAkZGVjb2RlZCA9IGJhc2U2NF9kZWNvZGUoJGpzb25bJ2FhZ3VpZCddLCB0cnVlKTsKICAgICAgICAgICAgICAgICR1dWlkID0gVXVpZDo6ZnJvbUJ5dGVzKCRkZWNvZGVkKTsKICAgICAgICB9CiAgICAgICAgJGNyZWRlbnRpYWxJZCA9IGJhc2U2NF9kZWNvZGUoJGpzb25bJ2NyZWRlbnRpYWxJZCddLCB0cnVlKTsKCiAgICAgICAgJGNyZWRlbnRpYWxQdWJsaWNLZXkgPSBudWxsOwogICAgICAgIGlmIChpc3NldCgkanNvblsnY3JlZGVudGlhbFB1YmxpY0tleSddKSkgewogICAgICAgICAgICAkY3JlZGVudGlhbFB1YmxpY0tleSA9IGJhc2U2NF9kZWNvZGUoJGpzb25bJ2NyZWRlbnRpYWxQdWJsaWNLZXknXSwgdHJ1ZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoCiAgICAgICAgICAgICR1dWlkLAogICAgICAgICAgICAkY3JlZGVudGlhbElkLAogICAgICAgICAgICAkY3JlZGVudGlhbFB1YmxpY0tleQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICAkcmVzdWx0ID0gWwogICAgICAgICAgICAnYWFndWlkJyA9PiAkdGhpcy0+YWFndWlkLT50b1N0cmluZygpLAogICAgICAgICAgICAnY3JlZGVudGlhbElkJyA9PiBiYXNlNjRfZW5jb2RlKCR0aGlzLT5jcmVkZW50aWFsSWQpLAogICAgICAgIF07CiAgICAgICAgaWYgKG51bGwgIT09ICR0aGlzLT5jcmVkZW50aWFsUHVibGljS2V5KSB7CiAgICAgICAgICAgICRyZXN1bHRbJ2NyZWRlbnRpYWxQdWJsaWNLZXknXSA9IGJhc2U2NF9lbmNvZGUoJHRoaXMtPmNyZWRlbnRpYWxQdWJsaWNLZXkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticationExtensions/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticationExtensions/AuthenticationExtension.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uczsKCnVzZSBKc29uU2VyaWFsaXphYmxlOwoKY2xhc3MgQXV0aGVudGljYXRpb25FeHRlbnNpb24gaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlCnsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkbmFtZTsKCiAgICAvKioKICAgICAqIEB2YXIgbWl4ZWQKICAgICAqLwogICAgcHJpdmF0ZSAkdmFsdWU7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJG5hbWUsICR2YWx1ZSkKICAgIHsKICAgICAgICAkdGhpcy0+bmFtZSA9ICRuYW1lOwogICAgICAgICR0aGlzLT52YWx1ZSA9ICR2YWx1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm5hbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWx1ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWU7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticationExtensions/AuthenticationExtensionsClientInputs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uczsKCnVzZSBmdW5jdGlvbiBhcnJheV9rZXlfZXhpc3RzOwp1c2UgQXJyYXlJdGVyYXRvcjsKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBmdW5jdGlvbiBjb3VudDsKdXNlIENvdW50YWJsZTsKdXNlIEl0ZXJhdG9yOwp1c2UgSXRlcmF0b3JBZ2dyZWdhdGU7CnVzZSBKc29uU2VyaWFsaXphYmxlOwp1c2UgZnVuY3Rpb24gU2FmZVxzcHJpbnRmOwoKY2xhc3MgQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzIGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZSwgQ291bnRhYmxlLCBJdGVyYXRvckFnZ3JlZ2F0ZQp7CiAgICAvKioKICAgICAqIEB2YXIgQXV0aGVudGljYXRpb25FeHRlbnNpb25bXQogICAgICovCiAgICBwcml2YXRlICRleHRlbnNpb25zID0gW107CgogICAgcHVibGljIGZ1bmN0aW9uIGFkZChBdXRoZW50aWNhdGlvbkV4dGVuc2lvbiAkZXh0ZW5zaW9uKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5leHRlbnNpb25zWyRleHRlbnNpb24tPm5hbWUoKV0gPSAkZXh0ZW5zaW9uOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkW10gJGpzb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tQXJyYXkoYXJyYXkgJGpzb24pOiBzZWxmCiAgICB7CiAgICAgICAgJG9iamVjdCA9IG5ldyBzZWxmKCk7CiAgICAgICAgZm9yZWFjaCAoJGpzb24gYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgJG9iamVjdC0+YWRkKG5ldyBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbigkaywgJHYpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkb2JqZWN0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYXMoc3RyaW5nICRrZXkpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X2tleV9leGlzdHMoJGtleSwgJHRoaXMtPmV4dGVuc2lvbnMpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0KHN0cmluZyAka2V5KQogICAgewogICAgICAgIEFzc2VydGlvbjo6dHJ1ZSgkdGhpcy0+aGFzKCRrZXkpLCBzcHJpbnRmKCdUaGUgZXh0ZW5zaW9uIHdpdGgga2V5ICIlcyIgaXMgbm90IGF2YWlsYWJsZScsICRrZXkpKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5leHRlbnNpb25zWyRrZXldOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbltdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X21hcChzdGF0aWMgZnVuY3Rpb24gKEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uICRvYmplY3QpIHsKICAgICAgICAgICAgcmV0dXJuICRvYmplY3QtPmpzb25TZXJpYWxpemUoKTsKICAgICAgICB9LCAkdGhpcy0+ZXh0ZW5zaW9ucyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEl0ZXJhdG9yPHN0cmluZywgQXV0aGVudGljYXRpb25FeHRlbnNpb24+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJdGVyYXRvcigpOiBJdGVyYXRvcgogICAgewogICAgICAgIHJldHVybiBuZXcgQXJyYXlJdGVyYXRvcigkdGhpcy0+ZXh0ZW5zaW9ucyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNvdW50KGludCAkbW9kZSA9IENPVU5UX05PUk1BTCk6IGludAogICAgewogICAgICAgIHJldHVybiBjb3VudCgkdGhpcy0+ZXh0ZW5zaW9ucywgJG1vZGUpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticationExtensions/AuthenticationExtensionsClientOutputs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uczsKCnVzZSBmdW5jdGlvbiBhcnJheV9rZXlfZXhpc3RzOwp1c2UgQXJyYXlJdGVyYXRvcjsKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBmdW5jdGlvbiBjb3VudDsKdXNlIENvdW50YWJsZTsKdXNlIEl0ZXJhdG9yOwp1c2UgSXRlcmF0b3JBZ2dyZWdhdGU7CnVzZSBKc29uU2VyaWFsaXphYmxlOwp1c2UgZnVuY3Rpb24gU2FmZVxqc29uX2RlY29kZTsKdXNlIGZ1bmN0aW9uIFNhZmVcc3ByaW50ZjsKCmNsYXNzIEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlLCBDb3VudGFibGUsIEl0ZXJhdG9yQWdncmVnYXRlCnsKICAgIC8qKgogICAgICogQHZhciBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbltdCiAgICAgKi8KICAgIHByaXZhdGUgJGV4dGVuc2lvbnMgPSBbXTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uICRleHRlbnNpb24pOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmV4dGVuc2lvbnNbJGV4dGVuc2lvbi0+bmFtZSgpXSA9ICRleHRlbnNpb247CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tU3RyaW5nKHN0cmluZyAkZGF0YSk6IHNlbGYKICAgIHsKICAgICAgICAkZGF0YSA9IGpzb25fZGVjb2RlKCRkYXRhLCB0cnVlKTsKICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJGRhdGEsICdJbnZhbGlkIGRhdGEnKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZUZyb21BcnJheSgkZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkanNvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21BcnJheShhcnJheSAkanNvbik6IHNlbGYKICAgIHsKICAgICAgICAkb2JqZWN0ID0gbmV3IHNlbGYoKTsKICAgICAgICBmb3JlYWNoICgkanNvbiBhcyAkayA9PiAkdikgewogICAgICAgICAgICAkb2JqZWN0LT5hZGQobmV3IEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uKCRrLCAkdikpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRvYmplY3Q7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGhhcyhzdHJpbmcgJGtleSk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkdGhpcy0+ZXh0ZW5zaW9ucyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXQoc3RyaW5nICRrZXkpCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCR0aGlzLT5oYXMoJGtleSksIHNwcmludGYoJ1RoZSBleHRlbnNpb24gd2l0aCBrZXkgIiVzIiBpcyBub3QgYXZhaWxhYmxlJywgJGtleSkpOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmV4dGVuc2lvbnNbJGtleV07CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfbWFwKHN0YXRpYyBmdW5jdGlvbiAoQXV0aGVudGljYXRpb25FeHRlbnNpb24gJG9iamVjdCkgewogICAgICAgICAgICByZXR1cm4gJG9iamVjdC0+anNvblNlcmlhbGl6ZSgpOwogICAgICAgIH0sICR0aGlzLT5leHRlbnNpb25zKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gSXRlcmF0b3I8c3RyaW5nLCBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbj4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEl0ZXJhdG9yKCk6IEl0ZXJhdG9yCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBBcnJheUl0ZXJhdG9yKCR0aGlzLT5leHRlbnNpb25zKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoaW50ICRtb2RlID0gQ09VTlRfTk9STUFMKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIGNvdW50KCR0aGlzLT5leHRlbnNpb25zLCAkbW9kZSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticationExtensions/AuthenticationExtensionsClientOutputsLoader.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uczsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgQ0JPUlxDQk9ST2JqZWN0Owp1c2UgQ0JPUlxNYXBPYmplY3Q7CgphYnN0cmFjdCBjbGFzcyBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzTG9hZGVyCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZChDQk9ST2JqZWN0ICRvYmplY3QpOiBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjppc0luc3RhbmNlT2YoJG9iamVjdCwgTWFwT2JqZWN0OjpjbGFzcywgJ0ludmFsaWQgZXh0ZW5zaW9uIG9iamVjdCcpOwogICAgICAgICRkYXRhID0gJG9iamVjdC0+Z2V0Tm9ybWFsaXplZERhdGEoKTsKICAgICAgICAkZXh0ZW5zaW9ucyA9IG5ldyBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzKCk7CiAgICAgICAgZm9yZWFjaCAoJGRhdGEgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgQXNzZXJ0aW9uOjpzdHJpbmcoJGtleSwgJ0ludmFsaWQgZXh0ZW5zaW9uIGtleScpOwogICAgICAgICAgICAkZXh0ZW5zaW9ucy0+YWRkKG5ldyBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbigka2V5LCAkdmFsdWUpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkZXh0ZW5zaW9uczsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticationExtensions/ExtensionOutputChecker.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uczsKCmludGVyZmFjZSBFeHRlbnNpb25PdXRwdXRDaGVja2VyCnsKICAgIC8qKgogICAgICogQHRocm93cyBFeHRlbnNpb25PdXRwdXRFcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2soQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICRpbnB1dHMsIEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgJG91dHB1dHMpOiB2b2lkOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticationExtensions/ExtensionOutputCheckerHandler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uczsKCmNsYXNzIEV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyCnsKICAgIC8qKgogICAgICogQHZhciBFeHRlbnNpb25PdXRwdXRDaGVja2VyW10KICAgICAqLwogICAgcHJpdmF0ZSAkY2hlY2tlcnMgPSBbXTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKEV4dGVuc2lvbk91dHB1dENoZWNrZXIgJGNoZWNrZXIpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmNoZWNrZXJzW10gPSAkY2hlY2tlcjsKICAgIH0KCiAgICAvKioKICAgICAqIEB0aHJvd3MgRXh0ZW5zaW9uT3V0cHV0RXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNoZWNrKEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyAkaW5wdXRzLCBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzICRvdXRwdXRzKTogdm9pZAogICAgewogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5jaGVja2VycyBhcyAkY2hlY2tlcikgewogICAgICAgICAgICAkY2hlY2tlci0+Y2hlY2soJGlucHV0cywgJG91dHB1dHMpOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticationExtensions/ExtensionOutputError.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uczsKCnVzZSBFeGNlcHRpb247CnVzZSBUaHJvd2FibGU7CgpjbGFzcyBFeHRlbnNpb25PdXRwdXRFcnJvciBleHRlbmRzIEV4Y2VwdGlvbgp7CiAgICAvKioKICAgICAqIEB2YXIgQXV0aGVudGljYXRpb25FeHRlbnNpb24KICAgICAqLwogICAgcHJpdmF0ZSAkYXV0aGVudGljYXRpb25FeHRlbnNpb247CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uICRhdXRoZW50aWNhdGlvbkV4dGVuc2lvbiwgc3RyaW5nICRtZXNzYWdlID0gJycsIGludCAkY29kZSA9IDAsIFRocm93YWJsZSAkcHJldmlvdXMgPSBudWxsKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJG1lc3NhZ2UsICRjb2RlLCAkcHJldmlvdXMpOwogICAgICAgICR0aGlzLT5hdXRoZW50aWNhdGlvbkV4dGVuc2lvbiA9ICRhdXRoZW50aWNhdGlvbkV4dGVuc2lvbjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXV0aGVudGljYXRpb25FeHRlbnNpb24oKTogQXV0aGVudGljYXRpb25FeHRlbnNpb24KICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticatorAssertionResponse.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIGZ1bmN0aW9uIFNhZmVcYmFzZTY0X2RlY29kZTsKCi8qKgogKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdXRobi8jYXV0aGVudGljYXRvcmFzc2VydGlvbnJlc3BvbnNlCiAqLwpjbGFzcyBBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UgZXh0ZW5kcyBBdXRoZW50aWNhdG9yUmVzcG9uc2UKewogICAgLyoqCiAgICAgKiBAdmFyIEF1dGhlbnRpY2F0b3JEYXRhCiAgICAgKi8KICAgIHByaXZhdGUgJGF1dGhlbnRpY2F0b3JEYXRhOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkc2lnbmF0dXJlOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICR1c2VySGFuZGxlOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChDb2xsZWN0ZWRDbGllbnREYXRhICRjbGllbnREYXRhSlNPTiwgQXV0aGVudGljYXRvckRhdGEgJGF1dGhlbnRpY2F0b3JEYXRhLCBzdHJpbmcgJHNpZ25hdHVyZSwgP3N0cmluZyAkdXNlckhhbmRsZSkKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRjbGllbnREYXRhSlNPTik7CiAgICAgICAgJHRoaXMtPmF1dGhlbnRpY2F0b3JEYXRhID0gJGF1dGhlbnRpY2F0b3JEYXRhOwogICAgICAgICR0aGlzLT5zaWduYXR1cmUgPSAkc2lnbmF0dXJlOwogICAgICAgICR0aGlzLT51c2VySGFuZGxlID0gJHVzZXJIYW5kbGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEF1dGhlbnRpY2F0b3JEYXRhKCk6IEF1dGhlbnRpY2F0b3JEYXRhCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hdXRoZW50aWNhdG9yRGF0YTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2lnbmF0dXJlKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c2lnbmF0dXJlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVc2VySGFuZGxlKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJHRoaXMtPnVzZXJIYW5kbGUgfHwgJycgPT09ICR0aGlzLT51c2VySGFuZGxlKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+dXNlckhhbmRsZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBiYXNlNjRfZGVjb2RlKCR0aGlzLT51c2VySGFuZGxlLCB0cnVlKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticatorAssertionResponseValidator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBDQk9SXERlY29kZXI7CnVzZSBDQk9SXE90aGVyT2JqZWN0XE90aGVyT2JqZWN0TWFuYWdlcjsKdXNlIENCT1JcVGFnXFRhZ09iamVjdE1hbmFnZXI7CnVzZSBDb3NlXEFsZ29yaXRobVxNYW5hZ2VyOwp1c2UgQ29zZVxBbGdvcml0aG1cU2lnbmF0dXJlXFNpZ25hdHVyZTsKdXNlIENvc2VcS2V5XEtleTsKdXNlIGZ1bmN0aW9uIGNvdW50Owp1c2UgZnVuY3Rpb24gaW5fYXJyYXk7CnVzZSBmdW5jdGlvbiBpc19zdHJpbmc7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFNlcnZlclJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcTG9nXExvZ2dlckludGVyZmFjZTsKdXNlIFBzclxMb2dcTnVsbExvZ2dlcjsKdXNlIGZ1bmN0aW9uIFNhZmVccGFyc2VfdXJsOwp1c2UgVGhyb3dhYmxlOwp1c2UgV2ViYXV0aG5cQXV0aGVudGljYXRpb25FeHRlbnNpb25zXEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0czsKdXNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc1xBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzOwp1c2UgV2ViYXV0aG5cQXV0aGVudGljYXRpb25FeHRlbnNpb25zXEV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyOwp1c2UgV2ViYXV0aG5cQ291bnRlclxDb3VudGVyQ2hlY2tlcjsKdXNlIFdlYmF1dGhuXENvdW50ZXJcVGhyb3dFeGNlcHRpb25JZkludmFsaWQ7CnVzZSBXZWJhdXRoblxUb2tlbkJpbmRpbmdcVG9rZW5CaW5kaW5nSGFuZGxlcjsKdXNlIFdlYmF1dGhuXFV0aWxcQ29zZVNpZ25hdHVyZUZpeGVyOwoKY2xhc3MgQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlVmFsaWRhdG9yCnsKICAgIC8qKgogICAgICogQHZhciBQdWJsaWNLZXlDcmVkZW50aWFsU291cmNlUmVwb3NpdG9yeQogICAgICovCiAgICBwcml2YXRlICRwdWJsaWNLZXlDcmVkZW50aWFsU291cmNlUmVwb3NpdG9yeTsKCiAgICAvKioKICAgICAqIEB2YXIgRGVjb2RlcgogICAgICovCiAgICBwcml2YXRlICRkZWNvZGVyOwoKICAgIC8qKgogICAgICogQHZhciBUb2tlbkJpbmRpbmdIYW5kbGVyCiAgICAgKi8KICAgIHByaXZhdGUgJHRva2VuQmluZGluZ0hhbmRsZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIEV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyCiAgICAgKi8KICAgIHByaXZhdGUgJGV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyOwoKICAgIC8qKgogICAgICogQHZhciBNYW5hZ2VyfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkYWxnb3JpdGhtTWFuYWdlcjsKCiAgICAvKioKICAgICAqIEB2YXIgQ291bnRlckNoZWNrZXIKICAgICAqLwogICAgcHJpdmF0ZSAkY291bnRlckNoZWNrZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIExvZ2dlckludGVyZmFjZXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGxvZ2dlcjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoUHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZVJlcG9zaXRvcnkgJHB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2VSZXBvc2l0b3J5LCBUb2tlbkJpbmRpbmdIYW5kbGVyICR0b2tlbkJpbmRpbmdIYW5kbGVyLCBFeHRlbnNpb25PdXRwdXRDaGVja2VySGFuZGxlciAkZXh0ZW5zaW9uT3V0cHV0Q2hlY2tlckhhbmRsZXIsIE1hbmFnZXIgJGFsZ29yaXRobU1hbmFnZXIsID9Db3VudGVyQ2hlY2tlciAkY291bnRlckNoZWNrZXIgPSBudWxsLCA/TG9nZ2VySW50ZXJmYWNlICRsb2dnZXIgPSBudWxsKQogICAgewogICAgICAgIGlmIChudWxsICE9PSAkbG9nZ2VyKSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgImxvZ2dlciIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDQuMC4gUGxlYXNlIHVzZSB0aGUgbWV0aG9kICJzZXRMb2dnZXIiLicsIEVfVVNFUl9ERVBSRUNBVEVEKTsKICAgICAgICB9CiAgICAgICAgaWYgKG51bGwgIT09ICRjb3VudGVyQ2hlY2tlcikgewogICAgICAgICAgICBAdHJpZ2dlcl9lcnJvcignVGhlIGFyZ3VtZW50ICJjb3VudGVyQ2hlY2tlciIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDQuMC4gUGxlYXNlIHVzZSB0aGUgbWV0aG9kICJzZXRDb3VudGVyQ2hlY2tlciIuJywgRV9VU0VSX0RFUFJFQ0FURUQpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+cHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZVJlcG9zaXRvcnkgPSAkcHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZVJlcG9zaXRvcnk7CiAgICAgICAgJHRoaXMtPmRlY29kZXIgPSBuZXcgRGVjb2RlcihuZXcgVGFnT2JqZWN0TWFuYWdlcigpLCBuZXcgT3RoZXJPYmplY3RNYW5hZ2VyKCkpOwogICAgICAgICR0aGlzLT50b2tlbkJpbmRpbmdIYW5kbGVyID0gJHRva2VuQmluZGluZ0hhbmRsZXI7CiAgICAgICAgJHRoaXMtPmV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyID0gJGV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyOwogICAgICAgICR0aGlzLT5hbGdvcml0aG1NYW5hZ2VyID0gJGFsZ29yaXRobU1hbmFnZXI7CiAgICAgICAgJHRoaXMtPmNvdW50ZXJDaGVja2VyID0gJGNvdW50ZXJDaGVja2VyID8/IG5ldyBUaHJvd0V4Y2VwdGlvbklmSW52YWxpZCgpOwogICAgICAgICR0aGlzLT5sb2dnZXIgPSAkbG9nZ2VyID8/IG5ldyBOdWxsTG9nZ2VyKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdXRobi8jdmVyaWZ5aW5nLWFzc2VydGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2soc3RyaW5nICRjcmVkZW50aWFsSWQsIEF1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZSAkYXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLCBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgJHB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucywgU2VydmVyUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgP3N0cmluZyAkdXNlckhhbmRsZSwgYXJyYXkgJHNlY3VyZWRSZWx5aW5nUGFydHlJZCA9IFtdKTogUHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZQogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgICR0aGlzLT5sb2dnZXItPmluZm8oJ0NoZWNraW5nIHRoZSBhdXRoZW50aWNhdG9yIGFzc2VydGlvbiByZXNwb25zZScsIFsKICAgICAgICAgICAgICAgICdjcmVkZW50aWFsSWQnID0+ICRjcmVkZW50aWFsSWQsCiAgICAgICAgICAgICAgICAnYXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlJyA9PiAkYXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLAogICAgICAgICAgICAgICAgJ3B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucycgPT4gJHB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucywKICAgICAgICAgICAgICAgICdob3N0JyA9PiAkcmVxdWVzdC0+Z2V0VXJpKCktPmdldEhvc3QoKSwKICAgICAgICAgICAgICAgICd1c2VySGFuZGxlJyA9PiAkdXNlckhhbmRsZSwKICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIC8qKiBAc2VlIDcuMi4xICovCiAgICAgICAgICAgIGlmICgwICE9PSBjb3VudCgkcHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLT5nZXRBbGxvd0NyZWRlbnRpYWxzKCkpKSB7CiAgICAgICAgICAgICAgICBBc3NlcnRpb246OnRydWUoJHRoaXMtPmlzQ3JlZGVudGlhbElkQWxsb3dlZCgkY3JlZGVudGlhbElkLCAkcHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLT5nZXRBbGxvd0NyZWRlbnRpYWxzKCkpLCAnVGhlIGNyZWRlbnRpYWwgSUQgaXMgbm90IGFsbG93ZWQuJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMi4yICovCiAgICAgICAgICAgICRwdWJsaWNLZXlDcmVkZW50aWFsU291cmNlID0gJHRoaXMtPnB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2VSZXBvc2l0b3J5LT5maW5kT25lQnlDcmVkZW50aWFsSWQoJGNyZWRlbnRpYWxJZCk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6bm90TnVsbCgkcHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZSwgJ1RoZSBjcmVkZW50aWFsIElEIGlzIGludmFsaWQuJyk7CgogICAgICAgICAgICAvKiogQHNlZSA3LjIuMyAqLwogICAgICAgICAgICAkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSA9ICRwdWJsaWNLZXlDcmVkZW50aWFsU291cmNlLT5nZXRBdHRlc3RlZENyZWRlbnRpYWxEYXRhKCk7CiAgICAgICAgICAgICRjcmVkZW50aWFsVXNlckhhbmRsZSA9ICRwdWJsaWNLZXlDcmVkZW50aWFsU291cmNlLT5nZXRVc2VySGFuZGxlKCk7CiAgICAgICAgICAgICRyZXNwb25zZVVzZXJIYW5kbGUgPSAkYXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLT5nZXRVc2VySGFuZGxlKCk7CgogICAgICAgICAgICAvKiogQHNlZSA3LjIuMiBVc2VyIEhhbmRsZSovCiAgICAgICAgICAgIGlmIChudWxsICE9PSAkdXNlckhhbmRsZSkgeyAvL0lmIHRoZSB1c2VyIHdhcyBpZGVudGlmaWVkIGJlZm9yZSB0aGUgYXV0aGVudGljYXRpb24gY2VyZW1vbnkgd2FzIGluaXRpYXRlZCwKICAgICAgICAgICAgICAgIEFzc2VydGlvbjo6ZXEoJGNyZWRlbnRpYWxVc2VySGFuZGxlLCAkdXNlckhhbmRsZSwgJ0ludmFsaWQgdXNlciBoYW5kbGUnKTsKICAgICAgICAgICAgICAgIGlmIChudWxsICE9PSAkcmVzcG9uc2VVc2VySGFuZGxlICYmICcnICE9PSAkcmVzcG9uc2VVc2VySGFuZGxlKSB7CiAgICAgICAgICAgICAgICAgICAgQXNzZXJ0aW9uOjplcSgkY3JlZGVudGlhbFVzZXJIYW5kbGUsICRyZXNwb25zZVVzZXJIYW5kbGUsICdJbnZhbGlkIHVzZXIgaGFuZGxlJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBBc3NlcnRpb246Om5vdEVtcHR5KCRyZXNwb25zZVVzZXJIYW5kbGUsICdVc2VyIGhhbmRsZSBpcyBtYW5kYXRvcnknKTsKICAgICAgICAgICAgICAgIEFzc2VydGlvbjo6ZXEoJGNyZWRlbnRpYWxVc2VySGFuZGxlLCAkcmVzcG9uc2VVc2VySGFuZGxlLCAnSW52YWxpZCB1c2VyIGhhbmRsZScpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkY3JlZGVudGlhbFB1YmxpY0tleSA9ICRhdHRlc3RlZENyZWRlbnRpYWxEYXRhLT5nZXRDcmVkZW50aWFsUHVibGljS2V5KCk7CiAgICAgICAgICAgICRpc1UyRiA9IFUyRlB1YmxpY0tleTo6aXNVMkZLZXkoJGNyZWRlbnRpYWxQdWJsaWNLZXkpOwogICAgICAgICAgICBpZiAoJGlzVTJGKSB7CiAgICAgICAgICAgICAgICAkY3JlZGVudGlhbFB1YmxpY0tleSA9IFUyRlB1YmxpY0tleTo6Y3JlYXRlQ09TRUtleSgkY3JlZGVudGlhbFB1YmxpY0tleSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgQXNzZXJ0aW9uOjpub3ROdWxsKCRjcmVkZW50aWFsUHVibGljS2V5LCAnTm8gcHVibGljIGtleSBhdmFpbGFibGUuJyk7CiAgICAgICAgICAgICRzdHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFtKCRjcmVkZW50aWFsUHVibGljS2V5KTsKICAgICAgICAgICAgJGNyZWRlbnRpYWxQdWJsaWNLZXlTdHJlYW0gPSAkdGhpcy0+ZGVjb2Rlci0+ZGVjb2RlKCRzdHJlYW0pOwogICAgICAgICAgICBBc3NlcnRpb246OnRydWUoJHN0cmVhbS0+aXNFT0YoKSwgJ0ludmFsaWQga2V5LiBQcmVzZW5jZSBvZiBleHRyYSBieXRlcy4nKTsKICAgICAgICAgICAgJHN0cmVhbS0+Y2xvc2UoKTsKCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMi40ICovCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMi41ICovCiAgICAgICAgICAgIC8vTm90aGluZyB0byBkby4gVXNlIG9mIG9iamVjdHMgZGlyZWN0bHkKCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMi42ICovCiAgICAgICAgICAgICRDID0gJGF1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZS0+Z2V0Q2xpZW50RGF0YUpTT04oKTsKCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMi43ICovCiAgICAgICAgICAgIEFzc2VydGlvbjo6ZXEoJ3dlYmF1dGhuLmdldCcsICRDLT5nZXRUeXBlKCksICdUaGUgY2xpZW50IGRhdGEgdHlwZSBpcyBub3QgIndlYmF1dGhuLmdldCIuJyk7CgogICAgICAgICAgICAvKiogQHNlZSA3LjIuOCAqLwogICAgICAgICAgICBBc3NlcnRpb246OnRydWUoaGFzaF9lcXVhbHMoJHB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy0+Z2V0Q2hhbGxlbmdlKCksICRDLT5nZXRDaGFsbGVuZ2UoKSksICdJbnZhbGlkIGNoYWxsZW5nZS4nKTsKCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMi45ICovCiAgICAgICAgICAgICRycElkID0gJHB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy0+Z2V0UnBJZCgpID8/ICRyZXF1ZXN0LT5nZXRVcmkoKS0+Z2V0SG9zdCgpOwogICAgICAgICAgICAkZmFjZXRJZCA9ICR0aGlzLT5nZXRGYWNldElkKCRycElkLCAkcHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLT5nZXRFeHRlbnNpb25zKCksICRhdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UtPmdldEF1dGhlbnRpY2F0b3JEYXRhKCktPmdldEV4dGVuc2lvbnMoKSk7CiAgICAgICAgICAgICRwYXJzZWRSZWx5aW5nUGFydHlJZCA9IHBhcnNlX3VybCgkQy0+Z2V0T3JpZ2luKCkpOwogICAgICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJHBhcnNlZFJlbHlpbmdQYXJ0eUlkLCAnSW52YWxpZCBvcmlnaW4nKTsKICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkZmFjZXRJZCwgJHNlY3VyZWRSZWx5aW5nUGFydHlJZCwgdHJ1ZSkpIHsKICAgICAgICAgICAgICAgICRzY2hlbWUgPSAkcGFyc2VkUmVseWluZ1BhcnR5SWRbJ3NjaGVtZSddID8/ICcnOwogICAgICAgICAgICAgICAgQXNzZXJ0aW9uOjplcSgnaHR0cHMnLCAkc2NoZW1lLCAnSW52YWxpZCBzY2hlbWUuIEhUVFBTIHJlcXVpcmVkLicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRjbGllbnREYXRhUnBJZCA9ICRwYXJzZWRSZWx5aW5nUGFydHlJZFsnaG9zdCddID8/ICcnOwogICAgICAgICAgICBBc3NlcnRpb246Om5vdEVtcHR5KCRjbGllbnREYXRhUnBJZCwgJ0ludmFsaWQgb3JpZ2luIHJwSWQuJyk7CiAgICAgICAgICAgICRycElkTGVuZ3RoID0gbWJfc3RybGVuKCRmYWNldElkKTsKICAgICAgICAgICAgQXNzZXJ0aW9uOjplcShtYl9zdWJzdHIoJy4nLiRjbGllbnREYXRhUnBJZCwgLSgkcnBJZExlbmd0aCArIDEpKSwgJy4nLiRmYWNldElkLCAncnBJZCBtaXNtYXRjaC4nKTsKCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMi4xMCAqLwogICAgICAgICAgICBpZiAobnVsbCAhPT0gJEMtPmdldFRva2VuQmluZGluZygpKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+dG9rZW5CaW5kaW5nSGFuZGxlci0+Y2hlY2soJEMtPmdldFRva2VuQmluZGluZygpLCAkcmVxdWVzdCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRleHBlY3RlZFJwSWRIYXNoID0gJGlzVTJGID8gJEMtPmdldE9yaWdpbigpIDogJGZhY2V0SWQ7CiAgICAgICAgICAgIC8vIHUyZiByZXNwb25zZSBoYXMgZnVsbCBvcmlnaW4gaW4gcnBJZEhhc2gKICAgICAgICAgICAgLyoqIEBzZWUgNy4yLjExICovCiAgICAgICAgICAgICRycElkSGFzaCA9IGhhc2goJ3NoYTI1NicsICRleHBlY3RlZFJwSWRIYXNoLCB0cnVlKTsKICAgICAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKGhhc2hfZXF1YWxzKCRycElkSGFzaCwgJGF1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZS0+Z2V0QXV0aGVudGljYXRvckRhdGEoKS0+Z2V0UnBJZEhhc2goKSksICdycElkIGhhc2ggbWlzbWF0Y2guJyk7CgogICAgICAgICAgICAvKiogQHNlZSA3LjIuMTIgKi8KICAgICAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCRhdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UtPmdldEF1dGhlbnRpY2F0b3JEYXRhKCktPmlzVXNlclByZXNlbnQoKSwgJ1VzZXIgd2FzIG5vdCBwcmVzZW50Jyk7CiAgICAgICAgICAgIC8qKiBAc2VlIDcuMi4xMyAqLwogICAgICAgICAgICBpZiAoQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhOjpVU0VSX1ZFUklGSUNBVElPTl9SRVFVSVJFTUVOVF9SRVFVSVJFRCA9PT0gJHB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy0+Z2V0VXNlclZlcmlmaWNhdGlvbigpKSB7CiAgICAgICAgICAgICAgICBBc3NlcnRpb246OnRydWUoJGF1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZS0+Z2V0QXV0aGVudGljYXRvckRhdGEoKS0+aXNVc2VyVmVyaWZpZWQoKSwgJ1VzZXIgYXV0aGVudGljYXRpb24gcmVxdWlyZWQuJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMi4xNCAqLwogICAgICAgICAgICAkZXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgPSAkYXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLT5nZXRBdXRoZW50aWNhdG9yRGF0YSgpLT5nZXRFeHRlbnNpb25zKCk7CiAgICAgICAgICAgIGlmIChudWxsICE9PSAkZXh0ZW5zaW9uc0NsaWVudE91dHB1dHMpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5leHRlbnNpb25PdXRwdXRDaGVja2VySGFuZGxlci0+Y2hlY2soCiAgICAgICAgICAgICAgICAgICAgJHB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy0+Z2V0RXh0ZW5zaW9ucygpLAogICAgICAgICAgICAgICAgICAgICRleHRlbnNpb25zQ2xpZW50T3V0cHV0cwogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLyoqIEBzZWUgNy4yLjE1ICovCiAgICAgICAgICAgICRnZXRDbGllbnREYXRhSlNPTkhhc2ggPSBoYXNoKCdzaGEyNTYnLCAkYXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLT5nZXRDbGllbnREYXRhSlNPTigpLT5nZXRSYXdEYXRhKCksIHRydWUpOwoKICAgICAgICAgICAgLyoqIEBzZWUgNy4yLjE2ICovCiAgICAgICAgICAgICRkYXRhVG9WZXJpZnkgPSAkYXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLT5nZXRBdXRoZW50aWNhdG9yRGF0YSgpLT5nZXRBdXRoRGF0YSgpLiRnZXRDbGllbnREYXRhSlNPTkhhc2g7CiAgICAgICAgICAgICRzaWduYXR1cmUgPSAkYXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLT5nZXRTaWduYXR1cmUoKTsKICAgICAgICAgICAgJGNvc2VLZXkgPSBuZXcgS2V5KCRjcmVkZW50aWFsUHVibGljS2V5U3RyZWFtLT5nZXROb3JtYWxpemVkRGF0YSgpKTsKICAgICAgICAgICAgJGFsZ29yaXRobSA9ICR0aGlzLT5hbGdvcml0aG1NYW5hZ2VyLT5nZXQoJGNvc2VLZXktPmFsZygpKTsKICAgICAgICAgICAgQXNzZXJ0aW9uOjppc0luc3RhbmNlT2YoJGFsZ29yaXRobSwgU2lnbmF0dXJlOjpjbGFzcywgJ0ludmFsaWQgYWxnb3JpdGhtIGlkZW50aWZpZXIuIFNob3VsZCByZWZlciB0byBhIHNpZ25hdHVyZSBhbGdvcml0aG0nKTsKICAgICAgICAgICAgJHNpZ25hdHVyZSA9IENvc2VTaWduYXR1cmVGaXhlcjo6Zml4KCRzaWduYXR1cmUsICRhbGdvcml0aG0pOwogICAgICAgICAgICBBc3NlcnRpb246OnRydWUoJGFsZ29yaXRobS0+dmVyaWZ5KCRkYXRhVG9WZXJpZnksICRjb3NlS2V5LCAkc2lnbmF0dXJlKSwgJ0ludmFsaWQgc2lnbmF0dXJlLicpOwoKICAgICAgICAgICAgLyoqIEBzZWUgNy4yLjE3ICovCiAgICAgICAgICAgICRzdG9yZWRDb3VudGVyID0gJHB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2UtPmdldENvdW50ZXIoKTsKICAgICAgICAgICAgJHJlc3BvbnNlQ291bnRlciA9ICRhdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UtPmdldEF1dGhlbnRpY2F0b3JEYXRhKCktPmdldFNpZ25Db3VudCgpOwogICAgICAgICAgICBpZiAoMCAhPT0gJHJlc3BvbnNlQ291bnRlciB8fCAwICE9PSAkc3RvcmVkQ291bnRlcikgewogICAgICAgICAgICAgICAgJHRoaXMtPmNvdW50ZXJDaGVja2VyLT5jaGVjaygkcHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZSwgJHJlc3BvbnNlQ291bnRlcik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2UtPnNldENvdW50ZXIoJHJlc3BvbnNlQ291bnRlcik7CiAgICAgICAgICAgICR0aGlzLT5wdWJsaWNLZXlDcmVkZW50aWFsU291cmNlUmVwb3NpdG9yeS0+c2F2ZUNyZWRlbnRpYWxTb3VyY2UoJHB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2UpOwoKICAgICAgICAgICAgLyoqIEBzZWUgNy4yLjE4ICovCiAgICAgICAgICAgIC8vQWxsIGdvb2QuIFdlIGNhbiBjb250aW51ZS4KICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+aW5mbygnVGhlIGFzc2VydGlvbiBpcyB2YWxpZCcpOwogICAgICAgICAgICAkdGhpcy0+bG9nZ2VyLT5kZWJ1ZygnUHVibGljIEtleSBDcmVkZW50aWFsIFNvdXJjZScsIFsncHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZScgPT4gJHB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2VdKTsKCiAgICAgICAgICAgIHJldHVybiAkcHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZTsKICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgJHRocm93YWJsZSkgewogICAgICAgICAgICAkdGhpcy0+bG9nZ2VyLT5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQnLCBbCiAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJyA9PiAkdGhyb3dhYmxlLAogICAgICAgICAgICBdKTsKICAgICAgICAgICAgdGhyb3cgJHRocm93YWJsZTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldExvZ2dlcihMb2dnZXJJbnRlcmZhY2UgJGxvZ2dlcik6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+bG9nZ2VyID0gJGxvZ2dlcjsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDb3VudGVyQ2hlY2tlcihDb3VudGVyQ2hlY2tlciAkY291bnRlckNoZWNrZXIpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPmNvdW50ZXJDaGVja2VyID0gJGNvdW50ZXJDaGVja2VyOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXk8UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I+ICRhbGxvd2VkQ3JlZGVudGlhbHMKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBpc0NyZWRlbnRpYWxJZEFsbG93ZWQoc3RyaW5nICRjcmVkZW50aWFsSWQsIGFycmF5ICRhbGxvd2VkQ3JlZGVudGlhbHMpOiBib29sCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJGFsbG93ZWRDcmVkZW50aWFscyBhcyAkYWxsb3dlZENyZWRlbnRpYWwpIHsKICAgICAgICAgICAgaWYgKGhhc2hfZXF1YWxzKCRhbGxvd2VkQ3JlZGVudGlhbC0+Z2V0SWQoKSwgJGNyZWRlbnRpYWxJZCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRGYWNldElkKHN0cmluZyAkcnBJZCwgQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICRhdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMsID9BdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzICRhdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKG51bGwgPT09ICRhdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzIHx8ICEkYXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzLT5oYXMoJ2FwcGlkJykgfHwgISRhdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzLT5oYXMoJ2FwcGlkJykpIHsKICAgICAgICAgICAgcmV0dXJuICRycElkOwogICAgICAgIH0KICAgICAgICAkYXBwSWQgPSAkYXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzLT5nZXQoJ2FwcGlkJyktPnZhbHVlKCk7CiAgICAgICAgJHdhc1VzZWQgPSAkYXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cy0+Z2V0KCdhcHBpZCcpLT52YWx1ZSgpOwogICAgICAgIGlmICghaXNfc3RyaW5nKCRhcHBJZCkgfHwgdHJ1ZSAhPT0gJHdhc1VzZWQpIHsKICAgICAgICAgICAgcmV0dXJuICRycElkOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRhcHBJZDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticatorAttestationResponse.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50XEF0dGVzdGF0aW9uT2JqZWN0OwoKLyoqCiAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmF1dGhuLyNhdXRoZW50aWNhdG9yYXR0ZXN0YXRpb25yZXNwb25zZQogKi8KY2xhc3MgQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UgZXh0ZW5kcyBBdXRoZW50aWNhdG9yUmVzcG9uc2UKewogICAgLyoqCiAgICAgKiBAdmFyIEF0dGVzdGF0aW9uT2JqZWN0CiAgICAgKi8KICAgIHByaXZhdGUgJGF0dGVzdGF0aW9uT2JqZWN0OwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChDb2xsZWN0ZWRDbGllbnREYXRhICRjbGllbnREYXRhSlNPTiwgQXR0ZXN0YXRpb25PYmplY3QgJGF0dGVzdGF0aW9uT2JqZWN0KQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJGNsaWVudERhdGFKU09OKTsKICAgICAgICAkdGhpcy0+YXR0ZXN0YXRpb25PYmplY3QgPSAkYXR0ZXN0YXRpb25PYmplY3Q7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEF0dGVzdGF0aW9uT2JqZWN0KCk6IEF0dGVzdGF0aW9uT2JqZWN0CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hdHRlc3RhdGlvbk9iamVjdDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticatorAttestationResponseValidator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBmdW5jdGlvbiBjb3VudDsKdXNlIGZ1bmN0aW9uIGluX2FycmF5Owp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgZnVuY3Rpb24gaXNfc3RyaW5nOwp1c2UgTG9naWNFeGNlcHRpb247CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFNlcnZlclJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcTG9nXExvZ2dlckludGVyZmFjZTsKdXNlIFBzclxMb2dcTnVsbExvZ2dlcjsKdXNlIFJhbXNleVxVdWlkXFV1aWQ7CnVzZSBmdW5jdGlvbiBTYWZlXHBhcnNlX3VybDsKdXNlIGZ1bmN0aW9uIFNhZmVcc3ByaW50ZjsKdXNlIFRocm93YWJsZTsKdXNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50XEF0dGVzdGF0aW9uT2JqZWN0Owp1c2UgV2ViYXV0aG5cQXR0ZXN0YXRpb25TdGF0ZW1lbnRcQXR0ZXN0YXRpb25TdGF0ZW1lbnQ7CnVzZSBXZWJhdXRoblxBdHRlc3RhdGlvblN0YXRlbWVudFxBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyOwp1c2UgV2ViYXV0aG5cQXV0aGVudGljYXRpb25FeHRlbnNpb25zXEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0czsKdXNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc1xBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzOwp1c2UgV2ViYXV0aG5cQXV0aGVudGljYXRpb25FeHRlbnNpb25zXEV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyOwp1c2UgV2ViYXV0aG5cQ2VydGlmaWNhdGVDaGFpbkNoZWNrZXJcQ2VydGlmaWNhdGVDaGFpbkNoZWNrZXI7CnVzZSBXZWJhdXRoblxNZXRhZGF0YVNlcnZpY2VcTWV0YWRhdGFTdGF0ZW1lbnQ7CnVzZSBXZWJhdXRoblxNZXRhZGF0YVNlcnZpY2VcTWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5Owp1c2UgV2ViYXV0aG5cTWV0YWRhdGFTZXJ2aWNlXFN0YXR1c1JlcG9ydDsKdXNlIFdlYmF1dGhuXFRva2VuQmluZGluZ1xUb2tlbkJpbmRpbmdIYW5kbGVyOwp1c2UgV2ViYXV0aG5cVHJ1c3RQYXRoXENlcnRpZmljYXRlVHJ1c3RQYXRoOwp1c2UgV2ViYXV0aG5cVHJ1c3RQYXRoXEVtcHR5VHJ1c3RQYXRoOwoKY2xhc3MgQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2VWYWxpZGF0b3IKewogICAgLyoqCiAgICAgKiBAdmFyIEF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydE1hbmFnZXIKICAgICAqLwogICAgcHJpdmF0ZSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0TWFuYWdlcjsKCiAgICAvKioKICAgICAqIEB2YXIgUHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZVJlcG9zaXRvcnkKICAgICAqLwogICAgcHJpdmF0ZSAkcHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZTsKCiAgICAvKioKICAgICAqIEB2YXIgVG9rZW5CaW5kaW5nSGFuZGxlcgogICAgICovCiAgICBwcml2YXRlICR0b2tlbkJpbmRpbmdIYW5kbGVyOwoKICAgIC8qKgogICAgICogQHZhciBFeHRlbnNpb25PdXRwdXRDaGVja2VySGFuZGxlcgogICAgICovCiAgICBwcml2YXRlICRleHRlbnNpb25PdXRwdXRDaGVja2VySGFuZGxlcjsKCiAgICAvKioKICAgICAqIEB2YXIgTG9nZ2VySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJGxvZ2dlcjsKCiAgICAvKioKICAgICAqIEB2YXIgTWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5fG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkbWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5OwoKICAgIC8qKgogICAgICogQHZhciBDZXJ0aWZpY2F0ZUNoYWluQ2hlY2tlcnxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGNlcnRpZmljYXRlQ2hhaW5DaGVja2VyOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyICRhdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyLCBQdWJsaWNLZXlDcmVkZW50aWFsU291cmNlUmVwb3NpdG9yeSAkcHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZSwgVG9rZW5CaW5kaW5nSGFuZGxlciAkdG9rZW5CaW5kaW5nSGFuZGxlciwgRXh0ZW5zaW9uT3V0cHV0Q2hlY2tlckhhbmRsZXIgJGV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyLCA/TWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5ICRtZXRhZGF0YVN0YXRlbWVudFJlcG9zaXRvcnkgPSBudWxsLCA/TG9nZ2VySW50ZXJmYWNlICRsb2dnZXIgPSBudWxsKQogICAgewogICAgICAgIGlmIChudWxsICE9PSAkbG9nZ2VyKSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgImxvZ2dlciIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDQuMC4gUGxlYXNlIHVzZSB0aGUgbWV0aG9kICJzZXRMb2dnZXIiLicsIEVfVVNFUl9ERVBSRUNBVEVEKTsKICAgICAgICB9CiAgICAgICAgaWYgKG51bGwgIT09ICRtZXRhZGF0YVN0YXRlbWVudFJlcG9zaXRvcnkpIHsKICAgICAgICAgICAgQHRyaWdnZXJfZXJyb3IoJ1RoZSBhcmd1bWVudCAibWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5IiBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4zIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gNC4wLiBQbGVhc2UgdXNlIHRoZSBtZXRob2QgInNldE1ldGFkYXRhU3RhdGVtZW50UmVwb3NpdG9yeSIuJywgRV9VU0VSX0RFUFJFQ0FURUQpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+YXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0TWFuYWdlciA9ICRhdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyOwogICAgICAgICR0aGlzLT5wdWJsaWNLZXlDcmVkZW50aWFsU291cmNlID0gJHB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2U7CiAgICAgICAgJHRoaXMtPnRva2VuQmluZGluZ0hhbmRsZXIgPSAkdG9rZW5CaW5kaW5nSGFuZGxlcjsKICAgICAgICAkdGhpcy0+ZXh0ZW5zaW9uT3V0cHV0Q2hlY2tlckhhbmRsZXIgPSAkZXh0ZW5zaW9uT3V0cHV0Q2hlY2tlckhhbmRsZXI7CiAgICAgICAgJHRoaXMtPm1ldGFkYXRhU3RhdGVtZW50UmVwb3NpdG9yeSA9ICRtZXRhZGF0YVN0YXRlbWVudFJlcG9zaXRvcnk7CiAgICAgICAgJHRoaXMtPmxvZ2dlciA9ICRsb2dnZXIgPz8gbmV3IE51bGxMb2dnZXIoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TG9nZ2VyKExvZ2dlckludGVyZmFjZSAkbG9nZ2VyKTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5sb2dnZXIgPSAkbG9nZ2VyOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldENlcnRpZmljYXRlQ2hhaW5DaGVja2VyKENlcnRpZmljYXRlQ2hhaW5DaGVja2VyICRjZXJ0aWZpY2F0ZUNoYWluQ2hlY2tlcik6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+Y2VydGlmaWNhdGVDaGFpbkNoZWNrZXIgPSAkY2VydGlmaWNhdGVDaGFpbkNoZWNrZXI7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5KE1ldGFkYXRhU3RhdGVtZW50UmVwb3NpdG9yeSAkbWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5KTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5tZXRhZGF0YVN0YXRlbWVudFJlcG9zaXRvcnkgPSAkbWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5OwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdXRobi8jcmVnaXN0ZXJpbmctYS1uZXctY3JlZGVudGlhbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2soQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UgJGF1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlLCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zICRwdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLCBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAkc2VjdXJlZFJlbHlpbmdQYXJ0eUlkID0gW10pOiBQdWJsaWNLZXlDcmVkZW50aWFsU291cmNlCiAgICB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+aW5mbygnQ2hlY2tpbmcgdGhlIGF1dGhlbnRpY2F0b3IgYXR0ZXN0YXRpb24gcmVzcG9uc2UnLCBbCiAgICAgICAgICAgICAgICAnYXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UnID0+ICRhdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZSwKICAgICAgICAgICAgICAgICdwdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zJyA9PiAkcHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucywKICAgICAgICAgICAgICAgICdob3N0JyA9PiAkcmVxdWVzdC0+Z2V0VXJpKCktPmdldEhvc3QoKSwKICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIC8qKiBAc2VlIDcuMS4xICovCiAgICAgICAgICAgIC8vTm90aGluZyB0byBkbwoKICAgICAgICAgICAgLyoqIEBzZWUgNy4xLjIgKi8KICAgICAgICAgICAgJEMgPSAkYXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UtPmdldENsaWVudERhdGFKU09OKCk7CgogICAgICAgICAgICAvKiogQHNlZSA3LjEuMyAqLwogICAgICAgICAgICBBc3NlcnRpb246OmVxKCd3ZWJhdXRobi5jcmVhdGUnLCAkQy0+Z2V0VHlwZSgpLCAnVGhlIGNsaWVudCBkYXRhIHR5cGUgaXMgbm90ICJ3ZWJhdXRobi5jcmVhdGUiLicpOwoKICAgICAgICAgICAgLyoqIEBzZWUgNy4xLjQgKi8KICAgICAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKGhhc2hfZXF1YWxzKCRwdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLT5nZXRDaGFsbGVuZ2UoKSwgJEMtPmdldENoYWxsZW5nZSgpKSwgJ0ludmFsaWQgY2hhbGxlbmdlLicpOwoKICAgICAgICAgICAgLyoqIEBzZWUgNy4xLjUgKi8KICAgICAgICAgICAgJHJwSWQgPSAkcHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy0+Z2V0UnAoKS0+Z2V0SWQoKSA/PyAkcmVxdWVzdC0+Z2V0VXJpKCktPmdldEhvc3QoKTsKICAgICAgICAgICAgJGZhY2V0SWQgPSAkdGhpcy0+Z2V0RmFjZXRJZCgkcnBJZCwgJHB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMtPmdldEV4dGVuc2lvbnMoKSwgJGF1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlLT5nZXRBdHRlc3RhdGlvbk9iamVjdCgpLT5nZXRBdXRoRGF0YSgpLT5nZXRFeHRlbnNpb25zKCkpOwoKICAgICAgICAgICAgJHBhcnNlZFJlbHlpbmdQYXJ0eUlkID0gcGFyc2VfdXJsKCRDLT5nZXRPcmlnaW4oKSk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkcGFyc2VkUmVseWluZ1BhcnR5SWQsIHNwcmludGYoJ1RoZSBvcmlnaW4gVVJJICIlcyIgaXMgbm90IHZhbGlkJywgJEMtPmdldE9yaWdpbigpKSk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRwYXJzZWRSZWx5aW5nUGFydHlJZCwgJ3NjaGVtZScsICdJbnZhbGlkIG9yaWdpbiBycElkLicpOwogICAgICAgICAgICAkY2xpZW50RGF0YVJwSWQgPSAkcGFyc2VkUmVseWluZ1BhcnR5SWRbJ2hvc3QnXSA/PyAnJzsKICAgICAgICAgICAgQXNzZXJ0aW9uOjpub3RFbXB0eSgkY2xpZW50RGF0YVJwSWQsICdJbnZhbGlkIG9yaWdpbiBycElkLicpOwogICAgICAgICAgICAkcnBJZExlbmd0aCA9IG1iX3N0cmxlbigkZmFjZXRJZCk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6ZXEobWJfc3Vic3RyKCcuJy4kY2xpZW50RGF0YVJwSWQsIC0oJHJwSWRMZW5ndGggKyAxKSksICcuJy4kZmFjZXRJZCwgJ3JwSWQgbWlzbWF0Y2guJyk7CgogICAgICAgICAgICBpZiAoIWluX2FycmF5KCRmYWNldElkLCAkc2VjdXJlZFJlbHlpbmdQYXJ0eUlkLCB0cnVlKSkgewogICAgICAgICAgICAgICAgJHNjaGVtZSA9ICRwYXJzZWRSZWx5aW5nUGFydHlJZFsnc2NoZW1lJ10gPz8gJyc7CiAgICAgICAgICAgICAgICBBc3NlcnRpb246OmVxKCdodHRwcycsICRzY2hlbWUsICdJbnZhbGlkIHNjaGVtZS4gSFRUUFMgcmVxdWlyZWQuJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMS42ICovCiAgICAgICAgICAgIGlmIChudWxsICE9PSAkQy0+Z2V0VG9rZW5CaW5kaW5nKCkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT50b2tlbkJpbmRpbmdIYW5kbGVyLT5jaGVjaygkQy0+Z2V0VG9rZW5CaW5kaW5nKCksICRyZXF1ZXN0KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLyoqIEBzZWUgNy4xLjcgKi8KICAgICAgICAgICAgJGNsaWVudERhdGFKU09OSGFzaCA9IGhhc2goJ3NoYTI1NicsICRhdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZS0+Z2V0Q2xpZW50RGF0YUpTT04oKS0+Z2V0UmF3RGF0YSgpLCB0cnVlKTsKCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMS44ICovCiAgICAgICAgICAgICRhdHRlc3RhdGlvbk9iamVjdCA9ICRhdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZS0+Z2V0QXR0ZXN0YXRpb25PYmplY3QoKTsKCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMS45ICovCiAgICAgICAgICAgICRycElkSGFzaCA9IGhhc2goJ3NoYTI1NicsICRmYWNldElkLCB0cnVlKTsKICAgICAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKGhhc2hfZXF1YWxzKCRycElkSGFzaCwgJGF0dGVzdGF0aW9uT2JqZWN0LT5nZXRBdXRoRGF0YSgpLT5nZXRScElkSGFzaCgpKSwgJ3JwSWQgaGFzaCBtaXNtYXRjaC4nKTsKCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMS4xMCAqLwogICAgICAgICAgICBBc3NlcnRpb246OnRydWUoJGF0dGVzdGF0aW9uT2JqZWN0LT5nZXRBdXRoRGF0YSgpLT5pc1VzZXJQcmVzZW50KCksICdVc2VyIHdhcyBub3QgcHJlc2VudCcpOwogICAgICAgICAgICAvKiogQHNlZSA3LjEuMTEgKi8KICAgICAgICAgICAgaWYgKEF1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYTo6VVNFUl9WRVJJRklDQVRJT05fUkVRVUlSRU1FTlRfUkVRVUlSRUQgPT09ICRwdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLT5nZXRBdXRoZW50aWNhdG9yU2VsZWN0aW9uKCktPmdldFVzZXJWZXJpZmljYXRpb24oKSkgewogICAgICAgICAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCRhdHRlc3RhdGlvbk9iamVjdC0+Z2V0QXV0aERhdGEoKS0+aXNVc2VyVmVyaWZpZWQoKSwgJ1VzZXIgYXV0aGVudGljYXRpb24gcmVxdWlyZWQuJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMS4xMiAqLwogICAgICAgICAgICAkZXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgPSAkYXR0ZXN0YXRpb25PYmplY3QtPmdldEF1dGhEYXRhKCktPmdldEV4dGVuc2lvbnMoKTsKICAgICAgICAgICAgaWYgKG51bGwgIT09ICRleHRlbnNpb25zQ2xpZW50T3V0cHV0cykgewogICAgICAgICAgICAgICAgJHRoaXMtPmV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyLT5jaGVjaygKICAgICAgICAgICAgICAgICAgICAkcHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy0+Z2V0RXh0ZW5zaW9ucygpLAogICAgICAgICAgICAgICAgICAgICRleHRlbnNpb25zQ2xpZW50T3V0cHV0cwogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLyoqIEBzZWUgNy4xLjEzICovCiAgICAgICAgICAgICR0aGlzLT5jaGVja01ldGFkYXRhU3RhdGVtZW50KCRwdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLCAkYXR0ZXN0YXRpb25PYmplY3QpOwogICAgICAgICAgICAkZm10ID0gJGF0dGVzdGF0aW9uT2JqZWN0LT5nZXRBdHRTdG10KCktPmdldEZtdCgpOwogICAgICAgICAgICBBc3NlcnRpb246OnRydWUoJHRoaXMtPmF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydE1hbmFnZXItPmhhcygkZm10KSwgJ1Vuc3VwcG9ydGVkIGF0dGVzdGF0aW9uIHN0YXRlbWVudCBmb3JtYXQuJyk7CgogICAgICAgICAgICAvKiogQHNlZSA3LjEuMTQgKi8KICAgICAgICAgICAgJGF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydCA9ICR0aGlzLT5hdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyLT5nZXQoJGZtdCk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6dHJ1ZSgkYXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0LT5pc1ZhbGlkKCRjbGllbnREYXRhSlNPTkhhc2gsICRhdHRlc3RhdGlvbk9iamVjdC0+Z2V0QXR0U3RtdCgpLCAkYXR0ZXN0YXRpb25PYmplY3QtPmdldEF1dGhEYXRhKCkpLCAnSW52YWxpZCBhdHRlc3RhdGlvbiBzdGF0ZW1lbnQuJyk7CgogICAgICAgICAgICAvKiogQHNlZSA3LjEuMTUgKi8KICAgICAgICAgICAgLyoqIEBzZWUgNy4xLjE2ICovCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMS4xNyAqLwogICAgICAgICAgICBBc3NlcnRpb246OnRydWUoJGF0dGVzdGF0aW9uT2JqZWN0LT5nZXRBdXRoRGF0YSgpLT5oYXNBdHRlc3RlZENyZWRlbnRpYWxEYXRhKCksICdUaGVyZSBpcyBubyBhdHRlc3RlZCBjcmVkZW50aWFsIGRhdGEuJyk7CiAgICAgICAgICAgICRhdHRlc3RlZENyZWRlbnRpYWxEYXRhID0gJGF0dGVzdGF0aW9uT2JqZWN0LT5nZXRBdXRoRGF0YSgpLT5nZXRBdHRlc3RlZENyZWRlbnRpYWxEYXRhKCk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6bm90TnVsbCgkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSwgJ1RoZXJlIGlzIG5vIGF0dGVzdGVkIGNyZWRlbnRpYWwgZGF0YS4nKTsKICAgICAgICAgICAgJGNyZWRlbnRpYWxJZCA9ICRhdHRlc3RlZENyZWRlbnRpYWxEYXRhLT5nZXRDcmVkZW50aWFsSWQoKTsKICAgICAgICAgICAgQXNzZXJ0aW9uOjpudWxsKCR0aGlzLT5wdWJsaWNLZXlDcmVkZW50aWFsU291cmNlLT5maW5kT25lQnlDcmVkZW50aWFsSWQoJGNyZWRlbnRpYWxJZCksICdUaGUgY3JlZGVudGlhbCBJRCBhbHJlYWR5IGV4aXN0cy4nKTsKCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMS4xOCAqLwogICAgICAgICAgICAvKiogQHNlZSA3LjEuMTkgKi8KICAgICAgICAgICAgJHB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2UgPSAkdGhpcy0+Y3JlYXRlUHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZSgKICAgICAgICAgICAgICAgICRjcmVkZW50aWFsSWQsCiAgICAgICAgICAgICAgICAkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSwKICAgICAgICAgICAgICAgICRhdHRlc3RhdGlvbk9iamVjdCwKICAgICAgICAgICAgICAgICRwdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLT5nZXRVc2VyKCktPmdldElkKCkKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+aW5mbygnVGhlIGF0dGVzdGF0aW9uIGlzIHZhbGlkJyk7CiAgICAgICAgICAgICR0aGlzLT5sb2dnZXItPmRlYnVnKCdQdWJsaWMgS2V5IENyZWRlbnRpYWwgU291cmNlJywgWydwdWJsaWNLZXlDcmVkZW50aWFsU291cmNlJyA9PiAkcHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZV0pOwoKICAgICAgICAgICAgcmV0dXJuICRwdWJsaWNLZXlDcmVkZW50aWFsU291cmNlOwogICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSAkdGhyb3dhYmxlKSB7CiAgICAgICAgICAgICR0aGlzLT5sb2dnZXItPmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCcsIFsKICAgICAgICAgICAgICAgICdleGNlcHRpb24nID0+ICR0aHJvd2FibGUsCiAgICAgICAgICAgIF0pOwogICAgICAgICAgICB0aHJvdyAkdGhyb3dhYmxlOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNoZWNrQ2VydGlmaWNhdGVDaGFpbihBdHRlc3RhdGlvblN0YXRlbWVudCAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQsID9NZXRhZGF0YVN0YXRlbWVudCAkbWV0YWRhdGFTdGF0ZW1lbnQpOiB2b2lkCiAgICB7CiAgICAgICAgJHRydXN0UGF0aCA9ICRhdHRlc3RhdGlvblN0YXRlbWVudC0+Z2V0VHJ1c3RQYXRoKCk7CiAgICAgICAgaWYgKCEkdHJ1c3RQYXRoIGluc3RhbmNlb2YgQ2VydGlmaWNhdGVUcnVzdFBhdGgpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAkYXV0aGVudGljYXRvckNlcnRpZmljYXRlcyA9ICR0cnVzdFBhdGgtPmdldENlcnRpZmljYXRlcygpOwoKICAgICAgICBpZiAobnVsbCA9PT0gJG1ldGFkYXRhU3RhdGVtZW50KSB7CiAgICAgICAgICAgIC8vIEBwaHBzdGFuLWlnbm9yZS1uZXh0LWxpbmUKICAgICAgICAgICAgbnVsbCA9PT0gJHRoaXMtPmNlcnRpZmljYXRlQ2hhaW5DaGVja2VyID8gQ2VydGlmaWNhdGVUb29sYm94OjpjaGVja0NoYWluKCRhdXRoZW50aWNhdG9yQ2VydGlmaWNhdGVzKSA6ICR0aGlzLT5jZXJ0aWZpY2F0ZUNoYWluQ2hlY2tlci0+Y2hlY2soJGF1dGhlbnRpY2F0b3JDZXJ0aWZpY2F0ZXMsIFtdLCBudWxsKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICRtZXRhZGF0YVN0YXRlbWVudENlcnRpZmljYXRlcyA9ICRtZXRhZGF0YVN0YXRlbWVudC0+Z2V0QXR0ZXN0YXRpb25Sb290Q2VydGlmaWNhdGVzKCk7CiAgICAgICAgJHJvb3RTdGF0ZW1lbnRDZXJ0aWZpY2F0ZXMgPSAkbWV0YWRhdGFTdGF0ZW1lbnQtPmdldFJvb3RDZXJ0aWZpY2F0ZXMoKTsKICAgICAgICBmb3JlYWNoICgkbWV0YWRhdGFTdGF0ZW1lbnRDZXJ0aWZpY2F0ZXMgYXMgJGtleSA9PiAkbWV0YWRhdGFTdGF0ZW1lbnRDZXJ0aWZpY2F0ZSkgewogICAgICAgICAgICAkbWV0YWRhdGFTdGF0ZW1lbnRDZXJ0aWZpY2F0ZXNbJGtleV0gPSBDZXJ0aWZpY2F0ZVRvb2xib3g6OmZpeFBFTVN0cnVjdHVyZSgkbWV0YWRhdGFTdGF0ZW1lbnRDZXJ0aWZpY2F0ZSk7CiAgICAgICAgfQogICAgICAgICR0cnVzdGVkQ2VydGlmaWNhdGVzID0gYXJyYXlfbWVyZ2UoCiAgICAgICAgICAgICRtZXRhZGF0YVN0YXRlbWVudENlcnRpZmljYXRlcywKICAgICAgICAgICAgJHJvb3RTdGF0ZW1lbnRDZXJ0aWZpY2F0ZXMKICAgICAgICApOwoKICAgICAgICAvLyBAcGhwc3Rhbi1pZ25vcmUtbmV4dC1saW5lCiAgICAgICAgbnVsbCA9PT0gJHRoaXMtPmNlcnRpZmljYXRlQ2hhaW5DaGVja2VyID8gQ2VydGlmaWNhdGVUb29sYm94OjpjaGVja0NoYWluKCRhdXRoZW50aWNhdG9yQ2VydGlmaWNhdGVzLCAkdHJ1c3RlZENlcnRpZmljYXRlcykgOiAkdGhpcy0+Y2VydGlmaWNhdGVDaGFpbkNoZWNrZXItPmNoZWNrKCRhdXRoZW50aWNhdG9yQ2VydGlmaWNhdGVzLCAkdHJ1c3RlZENlcnRpZmljYXRlcyk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja01ldGFkYXRhU3RhdGVtZW50KFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgJHB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMsIEF0dGVzdGF0aW9uT2JqZWN0ICRhdHRlc3RhdGlvbk9iamVjdCk6IHZvaWQKICAgIHsKICAgICAgICAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQgPSAkYXR0ZXN0YXRpb25PYmplY3QtPmdldEF0dFN0bXQoKTsKICAgICAgICAkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSA9ICRhdHRlc3RhdGlvbk9iamVjdC0+Z2V0QXV0aERhdGEoKS0+Z2V0QXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSgpOwogICAgICAgIEFzc2VydGlvbjo6bm90TnVsbCgkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSwgJ05vIGF0dGVzdGVkIGNyZWRlbnRpYWwgZGF0YSBmb3VuZCcpOwogICAgICAgICRhYWd1aWQgPSAkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YS0+Z2V0QWFndWlkKCktPnRvU3RyaW5nKCk7CiAgICAgICAgaWYgKFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkFUVEVTVEFUSU9OX0NPTlZFWUFOQ0VfUFJFRkVSRU5DRV9OT05FID09PSAkcHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy0+Z2V0QXR0ZXN0YXRpb24oKSkgewogICAgICAgICAgICAkdGhpcy0+bG9nZ2VyLT5kZWJ1ZygnTm8gYXR0ZXN0YXRpb24gaXMgYXNrZWQuJyk7CiAgICAgICAgICAgIC8vTm8gYXR0ZXN0YXRpb24gaXMgYXNrZWQuIFdlIHNoYWxsIGVuc3VyZSB0aGF0IHRoZSBkYXRhIGlzIGFub255bW91cy4KICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCcgPT09ICRhYWd1aWQKICAgICAgICAgICAgICAgICYmIChBdHRlc3RhdGlvblN0YXRlbWVudDo6VFlQRV9OT05FID09PSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldFR5cGUoKSB8fCBBdHRlc3RhdGlvblN0YXRlbWVudDo6VFlQRV9TRUxGID09PSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldFR5cGUoKSkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5sb2dnZXItPmRlYnVnKCdUaGUgQXR0ZXN0YXRpb24gU3RhdGVtZW50IGlzIGFub255bW91cy4nKTsKICAgICAgICAgICAgICAgICR0aGlzLT5jaGVja0NlcnRpZmljYXRlQ2hhaW4oJGF0dGVzdGF0aW9uU3RhdGVtZW50LCBudWxsKTsKCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+ZGVidWcoJ0Fub255bWl6YXRpb24gcmVxdWlyZWQuIEFBR1VJRCBhbmQgQXR0ZXN0YXRpb24gU3RhdGVtZW50IGNoYW5nZWQuJywgWwogICAgICAgICAgICAgICAgJ2FhZ3VpZCcgPT4gJGFhZ3VpZCwKICAgICAgICAgICAgICAgICdBdHRlc3RhdGlvblN0YXRlbWVudCcgPT4gJGF0dGVzdGF0aW9uU3RhdGVtZW50LAogICAgICAgICAgICBdKTsKICAgICAgICAgICAgJGF0dGVzdGVkQ3JlZGVudGlhbERhdGEtPnNldEFhZ3VpZCgKICAgICAgICAgICAgICAgIFV1aWQ6OmZyb21TdHJpbmcoJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCcpCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRhdHRlc3RhdGlvbk9iamVjdC0+c2V0QXR0U3RtdChBdHRlc3RhdGlvblN0YXRlbWVudDo6Y3JlYXRlTm9uZSgnbm9uZScsIFtdLCBuZXcgRW1wdHlUcnVzdFBhdGgoKSkpOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoQXR0ZXN0YXRpb25TdGF0ZW1lbnQ6OlRZUEVfTk9ORSA9PT0gJGF0dGVzdGF0aW9uU3RhdGVtZW50LT5nZXRUeXBlKCkpIHsKICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+ZGVidWcoJ05vIGF0dGVzdGF0aW9uIHJldHVybmVkLicpOwogICAgICAgICAgICAvL05vIGF0dGVzdGF0aW9uIGlzIHJldHVybmVkLiBXZSBzaGFsbCBlbnN1cmUgdGhhdCB0aGUgQUFHVUlEIGlzIGEgbnVsbCBvbmUuCiAgICAgICAgICAgIGlmICgnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJyAhPT0gJGFhZ3VpZCkgewogICAgICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+ZGVidWcoJ0Fub255bWl6YXRpb24gcmVxdWlyZWQuIEFBR1VJRCBhbmQgQXR0ZXN0YXRpb24gU3RhdGVtZW50IGNoYW5nZWQuJywgWwogICAgICAgICAgICAgICAgICAgICdhYWd1aWQnID0+ICRhYWd1aWQsCiAgICAgICAgICAgICAgICAgICAgJ0F0dGVzdGF0aW9uU3RhdGVtZW50JyA9PiAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQsCiAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgICAgICRhdHRlc3RlZENyZWRlbnRpYWxEYXRhLT5zZXRBYWd1aWQoCiAgICAgICAgICAgICAgICAgICAgVXVpZDo6ZnJvbVN0cmluZygnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJykKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvL1RoZSBNRFMgUmVwb3NpdG9yeSBpcyBtYW5kYXRvcnkgaGVyZQogICAgICAgIEFzc2VydGlvbjo6bm90TnVsbCgkdGhpcy0+bWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5LCAnVGhlIE1ldGFkYXRhIFN0YXRlbWVudCBSZXBvc2l0b3J5IGlzIG1hbmRhdG9yeSB3aGVuIHJlcXVlc3RpbmcgYXR0ZXN0YXRpb24gb2JqZWN0cy4nKTsKICAgICAgICAkbWV0YWRhdGFTdGF0ZW1lbnQgPSAkdGhpcy0+bWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5LT5maW5kT25lQnlBQUdVSUQoJGFhZ3VpZCk7CgogICAgICAgIC8vIFdlIGNoZWNrIHRoZSBsYXN0IHN0YXR1cyByZXBvcnQKICAgICAgICAkdGhpcy0+Y2hlY2tTdGF0dXNSZXBvcnQobnVsbCA9PT0gJG1ldGFkYXRhU3RhdGVtZW50ID8gW10gOiAkbWV0YWRhdGFTdGF0ZW1lbnQtPmdldFN0YXR1c1JlcG9ydHMoKSk7CgogICAgICAgIC8vIFdlIGNoZWNrIHRoZSBjZXJ0aWZpY2F0ZSBjaGFpbiAoaWYgYW55KQogICAgICAgICR0aGlzLT5jaGVja0NlcnRpZmljYXRlQ2hhaW4oJGF0dGVzdGF0aW9uU3RhdGVtZW50LCAkbWV0YWRhdGFTdGF0ZW1lbnQpOwoKICAgICAgICAvLyBJZiBubyBBdHRlc3RhdGlvbiBTdGF0ZW1lbnQgaGFzIGJlZW4gcmV0dXJuZWQgb3IgaWYgbnVsbCBBQUdVSUQgKD0wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApCiAgICAgICAgLy8gPT4gbm90aGluZyB0byBjaGVjawogICAgICAgIGlmICgnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJyA9PT0gJGFhZ3VpZCB8fCBBdHRlc3RhdGlvblN0YXRlbWVudDo6VFlQRV9OT05FID09PSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldFR5cGUoKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgTWV0YWRhdGEgU3RhdGVtZW50IGlzIG1hbmRhdG9yeQogICAgICAgIEFzc2VydGlvbjo6bm90TnVsbCgkbWV0YWRhdGFTdGF0ZW1lbnQsIHNwcmludGYoJ1RoZSBNZXRhZGF0YSBTdGF0ZW1lbnQgZm9yIHRoZSBBQUdVSUQgIiVzIiBpcyBtaXNzaW5nJywgJGFhZ3VpZCkpOwoKICAgICAgICAvLyBDaGVjayBBdHRlc3RhdGlvbiBUeXBlIGlzIGFsbG93ZWQKICAgICAgICBpZiAoMCAhPT0gY291bnQoJG1ldGFkYXRhU3RhdGVtZW50LT5nZXRBdHRlc3RhdGlvblR5cGVzKCkpKSB7CiAgICAgICAgICAgICR0eXBlID0gJHRoaXMtPmdldEF0dGVzdGF0aW9uVHlwZSgkYXR0ZXN0YXRpb25TdGF0ZW1lbnQpOwogICAgICAgICAgICBBc3NlcnRpb246OmluQXJyYXkoJHR5cGUsICRtZXRhZGF0YVN0YXRlbWVudC0+Z2V0QXR0ZXN0YXRpb25UeXBlcygpLCAnSW52YWxpZCBhdHRlc3RhdGlvbiBzdGF0ZW1lbnQuIFRoZSBhdHRlc3RhdGlvbiB0eXBlIGlzIG5vdCBhbGxvd2VkIGZvciB0aGlzIGF1dGhlbnRpY2F0b3InKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gU3RhdHVzUmVwb3J0W10gJHN0YXR1c1JlcG9ydHMKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja1N0YXR1c1JlcG9ydChhcnJheSAkc3RhdHVzUmVwb3J0cyk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoMCAhPT0gY291bnQoJHN0YXR1c1JlcG9ydHMpKSB7CiAgICAgICAgICAgICRsYXN0U3RhdHVzUmVwb3J0ID0gZW5kKCRzdGF0dXNSZXBvcnRzKTsKICAgICAgICAgICAgaWYgKCRsYXN0U3RhdHVzUmVwb3J0LT5pc0NvbXByb21pc2VkKCkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBMb2dpY0V4Y2VwdGlvbignVGhlIGF1dGhlbnRpY2F0b3IgaXMgY29tcHJvbWlzZWQgYW5kIGNhbm5vdCBiZSB1c2VkJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjcmVhdGVQdWJsaWNLZXlDcmVkZW50aWFsU291cmNlKHN0cmluZyAkY3JlZGVudGlhbElkLCBBdHRlc3RlZENyZWRlbnRpYWxEYXRhICRhdHRlc3RlZENyZWRlbnRpYWxEYXRhLCBBdHRlc3RhdGlvbk9iamVjdCAkYXR0ZXN0YXRpb25PYmplY3QsIHN0cmluZyAkdXNlckhhbmRsZSk6IFB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2UKICAgIHsKICAgICAgICByZXR1cm4gbmV3IFB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2UoCiAgICAgICAgICAgICRjcmVkZW50aWFsSWQsCiAgICAgICAgICAgIFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yOjpDUkVERU5USUFMX1RZUEVfUFVCTElDX0tFWSwKICAgICAgICAgICAgW10sCiAgICAgICAgICAgICRhdHRlc3RhdGlvbk9iamVjdC0+Z2V0QXR0U3RtdCgpLT5nZXRUeXBlKCksCiAgICAgICAgICAgICRhdHRlc3RhdGlvbk9iamVjdC0+Z2V0QXR0U3RtdCgpLT5nZXRUcnVzdFBhdGgoKSwKICAgICAgICAgICAgJGF0dGVzdGVkQ3JlZGVudGlhbERhdGEtPmdldEFhZ3VpZCgpLAogICAgICAgICAgICAkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YS0+Z2V0Q3JlZGVudGlhbFB1YmxpY0tleSgpLAogICAgICAgICAgICAkdXNlckhhbmRsZSwKICAgICAgICAgICAgJGF0dGVzdGF0aW9uT2JqZWN0LT5nZXRBdXRoRGF0YSgpLT5nZXRTaWduQ291bnQoKQogICAgICAgICk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRBdHRlc3RhdGlvblR5cGUoQXR0ZXN0YXRpb25TdGF0ZW1lbnQgJGF0dGVzdGF0aW9uU3RhdGVtZW50KTogaW50CiAgICB7CiAgICAgICAgc3dpdGNoICgkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldFR5cGUoKSkgewogICAgICAgICAgICBjYXNlIEF0dGVzdGF0aW9uU3RhdGVtZW50OjpUWVBFX0JBU0lDOgogICAgICAgICAgICAgICAgcmV0dXJuIE1ldGFkYXRhU3RhdGVtZW50OjpBVFRFU1RBVElPTl9CQVNJQ19GVUxMOwogICAgICAgICAgICBjYXNlIEF0dGVzdGF0aW9uU3RhdGVtZW50OjpUWVBFX1NFTEY6CiAgICAgICAgICAgICAgICByZXR1cm4gTWV0YWRhdGFTdGF0ZW1lbnQ6OkFUVEVTVEFUSU9OX0JBU0lDX1NVUlJPR0FURTsKICAgICAgICAgICAgY2FzZSBBdHRlc3RhdGlvblN0YXRlbWVudDo6VFlQRV9BVFRDQToKICAgICAgICAgICAgICAgIHJldHVybiBNZXRhZGF0YVN0YXRlbWVudDo6QVRURVNUQVRJT05fQVRUQ0E7CiAgICAgICAgICAgIGNhc2UgQXR0ZXN0YXRpb25TdGF0ZW1lbnQ6OlRZUEVfRUNEQUE6CiAgICAgICAgICAgICAgICByZXR1cm4gTWV0YWRhdGFTdGF0ZW1lbnQ6OkFUVEVTVEFUSU9OX0VDREFBOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBhdHRlc3RhdGlvbiB0eXBlJyk7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0RmFjZXRJZChzdHJpbmcgJHJwSWQsIEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyAkYXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzLCA/QXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyAkYXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyk6IHN0cmluZwogICAgewogICAgICAgIGlmIChudWxsID09PSAkYXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyB8fCAhJGF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cy0+aGFzKCdhcHBpZCcpIHx8ICEkYXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cy0+aGFzKCdhcHBpZCcpKSB7CiAgICAgICAgICAgIHJldHVybiAkcnBJZDsKICAgICAgICB9CiAgICAgICAgJGFwcElkID0gJGF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cy0+Z2V0KCdhcHBpZCcpLT52YWx1ZSgpOwogICAgICAgICR3YXNVc2VkID0gJGF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMtPmdldCgnYXBwaWQnKS0+dmFsdWUoKTsKICAgICAgICBpZiAoIWlzX3N0cmluZygkYXBwSWQpIHx8IHRydWUgIT09ICR3YXNVc2VkKSB7CiAgICAgICAgICAgIHJldHVybiAkcnBJZDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkYXBwSWQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticatorData.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIGZ1bmN0aW9uIG9yZDsKdXNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc1xBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzOwoKLyoqCiAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmF1dGhuLyNzZWMtYXV0aGVudGljYXRvci1kYXRhCiAqLwpjbGFzcyBBdXRoZW50aWNhdG9yRGF0YQp7CiAgICBwcml2YXRlIGNvbnN0IEZMQUdfVVAgPSAwYjAwMDAwMDAxOwogICAgcHJpdmF0ZSBjb25zdCBGTEFHX1JGVTEgPSAwYjAwMDAwMDEwOwogICAgcHJpdmF0ZSBjb25zdCBGTEFHX1VWID0gMGIwMDAwMDEwMDsKICAgIHByaXZhdGUgY29uc3QgRkxBR19SRlUyID0gMGIwMDExMTAwMDsKICAgIHByaXZhdGUgY29uc3QgRkxBR19BVCA9IDBiMDEwMDAwMDA7CiAgICBwcml2YXRlIGNvbnN0IEZMQUdfRUQgPSAwYjEwMDAwMDAwOwogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJGF1dGhEYXRhOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRycElkSGFzaDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkZmxhZ3M7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcm90ZWN0ZWQgJHNpZ25Db3VudDsKCiAgICAvKioKICAgICAqIEB2YXIgQXR0ZXN0ZWRDcmVkZW50aWFsRGF0YXxudWxsCiAgICAgKi8KICAgIHByb3RlY3RlZCAkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YTsKCiAgICAvKioKICAgICAqIEB2YXIgQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0c3xudWxsCiAgICAgKi8KICAgIHByb3RlY3RlZCAkZXh0ZW5zaW9uczsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRhdXRoRGF0YSwgc3RyaW5nICRycElkSGFzaCwgc3RyaW5nICRmbGFncywgaW50ICRzaWduQ291bnQsID9BdHRlc3RlZENyZWRlbnRpYWxEYXRhICRhdHRlc3RlZENyZWRlbnRpYWxEYXRhLCA/QXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyAkZXh0ZW5zaW9ucykKICAgIHsKICAgICAgICAkdGhpcy0+cnBJZEhhc2ggPSAkcnBJZEhhc2g7CiAgICAgICAgJHRoaXMtPmZsYWdzID0gJGZsYWdzOwogICAgICAgICR0aGlzLT5zaWduQ291bnQgPSAkc2lnbkNvdW50OwogICAgICAgICR0aGlzLT5hdHRlc3RlZENyZWRlbnRpYWxEYXRhID0gJGF0dGVzdGVkQ3JlZGVudGlhbERhdGE7CiAgICAgICAgJHRoaXMtPmV4dGVuc2lvbnMgPSAkZXh0ZW5zaW9uczsKICAgICAgICAkdGhpcy0+YXV0aERhdGEgPSAkYXV0aERhdGE7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEF1dGhEYXRhKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YXV0aERhdGE7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFJwSWRIYXNoKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cnBJZEhhc2g7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzVXNlclByZXNlbnQoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAwICE9PSAob3JkKCR0aGlzLT5mbGFncykgJiBzZWxmOjpGTEFHX1VQKSA/IHRydWUgOiBmYWxzZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNVc2VyVmVyaWZpZWQoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAwICE9PSAob3JkKCR0aGlzLT5mbGFncykgJiBzZWxmOjpGTEFHX1VWKSA/IHRydWUgOiBmYWxzZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzQXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIDAgIT09IChvcmQoJHRoaXMtPmZsYWdzKSAmIHNlbGY6OkZMQUdfQVQpID8gdHJ1ZSA6IGZhbHNlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNFeHRlbnNpb25zKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gMCAhPT0gKG9yZCgkdGhpcy0+ZmxhZ3MpICYgc2VsZjo6RkxBR19FRCkgPyB0cnVlIDogZmFsc2U7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlc2VydmVkRm9yRnV0dXJlVXNlMSgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gb3JkKCR0aGlzLT5mbGFncykgJiBzZWxmOjpGTEFHX1JGVTE7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlc2VydmVkRm9yRnV0dXJlVXNlMigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gb3JkKCR0aGlzLT5mbGFncykgJiBzZWxmOjpGTEFHX1JGVTI7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFNpZ25Db3VudCgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnNpZ25Db3VudDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSgpOiA/QXR0ZXN0ZWRDcmVkZW50aWFsRGF0YQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YXR0ZXN0ZWRDcmVkZW50aWFsRGF0YTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9ucygpOiA/QXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cwogICAgewogICAgICAgIHJldHVybiBudWxsICE9PSAkdGhpcy0+ZXh0ZW5zaW9ucyAmJiAkdGhpcy0+aGFzRXh0ZW5zaW9ucygpID8gJHRoaXMtPmV4dGVuc2lvbnMgOiBudWxsOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticatorResponse.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKLyoqCiAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmF1dGhuLyNhdXRoZW50aWNhdG9ycmVzcG9uc2UKICovCmFic3RyYWN0IGNsYXNzIEF1dGhlbnRpY2F0b3JSZXNwb25zZQp7CiAgICAvKioKICAgICAqIEB2YXIgQ29sbGVjdGVkQ2xpZW50RGF0YQogICAgICovCiAgICBwcml2YXRlICRjbGllbnREYXRhSlNPTjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoQ29sbGVjdGVkQ2xpZW50RGF0YSAkY2xpZW50RGF0YUpTT04pCiAgICB7CiAgICAgICAgJHRoaXMtPmNsaWVudERhdGFKU09OID0gJGNsaWVudERhdGFKU09OOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbGllbnREYXRhSlNPTigpOiBDb2xsZWN0ZWRDbGllbnREYXRhCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jbGllbnREYXRhSlNPTjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticatorSelectionCriteria.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBKc29uU2VyaWFsaXphYmxlOwp1c2UgZnVuY3Rpb24gU2FmZVxqc29uX2RlY29kZTsKCmNsYXNzIEF1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSBpbXBsZW1lbnRzIEpzb25TZXJpYWxpemFibGUKewogICAgcHVibGljIGNvbnN0IEFVVEhFTlRJQ0FUT1JfQVRUQUNITUVOVF9OT19QUkVGRVJFTkNFID0gbnVsbDsKICAgIHB1YmxpYyBjb25zdCBBVVRIRU5USUNBVE9SX0FUVEFDSE1FTlRfUExBVEZPUk0gPSAncGxhdGZvcm0nOwogICAgcHVibGljIGNvbnN0IEFVVEhFTlRJQ0FUT1JfQVRUQUNITUVOVF9DUk9TU19QTEFURk9STSA9ICdjcm9zcy1wbGF0Zm9ybSc7CgogICAgcHVibGljIGNvbnN0IFVTRVJfVkVSSUZJQ0FUSU9OX1JFUVVJUkVNRU5UX1JFUVVJUkVEID0gJ3JlcXVpcmVkJzsKICAgIHB1YmxpYyBjb25zdCBVU0VSX1ZFUklGSUNBVElPTl9SRVFVSVJFTUVOVF9QUkVGRVJSRUQgPSAncHJlZmVycmVkJzsKICAgIHB1YmxpYyBjb25zdCBVU0VSX1ZFUklGSUNBVElPTl9SRVFVSVJFTUVOVF9ESVNDT1VSQUdFRCA9ICdkaXNjb3VyYWdlZCc7CgogICAgcHVibGljIGNvbnN0IFJFU0lERU5UX0tFWV9SRVFVSVJFTUVOVF9OT05FID0gbnVsbDsKICAgIHB1YmxpYyBjb25zdCBSRVNJREVOVF9LRVlfUkVRVUlSRU1FTlRfUkVRVUlSRUQgPSAncmVxdWlyZWQnOwogICAgcHVibGljIGNvbnN0IFJFU0lERU5UX0tFWV9SRVFVSVJFTUVOVF9QUkVGRVJSRUQgPSAncHJlZmVycmVkJzsKICAgIHB1YmxpYyBjb25zdCBSRVNJREVOVF9LRVlfUkVRVUlSRU1FTlRfRElTQ09VUkFHRUQgPSAnZGlzY291cmFnZWQnOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRhdXRoZW50aWNhdG9yQXR0YWNobWVudDsKCiAgICAvKioKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICBwcml2YXRlICRyZXF1aXJlUmVzaWRlbnRLZXk7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICR1c2VyVmVyaWZpY2F0aW9uOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRyZXNpZGVudEtleTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoP3N0cmluZyAkYXV0aGVudGljYXRvckF0dGFjaG1lbnQgPSBudWxsLCA/Ym9vbCAkcmVxdWlyZVJlc2lkZW50S2V5ID0gbnVsbCwgP3N0cmluZyAkdXNlclZlcmlmaWNhdGlvbiA9IG51bGwsID9zdHJpbmcgJHJlc2lkZW50S2V5ID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAobnVsbCAhPT0gJGF1dGhlbnRpY2F0b3JBdHRhY2htZW50KSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgImF1dGhlbnRpY2F0b3JBdHRhY2htZW50IiBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4zIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gNC4wLiBQbGVhc2UgdXNlIHRoZSBtZXRob2QgInNldEF1dGhlbnRpY2F0b3JBdHRhY2htZW50Ii4nLCBFX1VTRVJfREVQUkVDQVRFRCk7CiAgICAgICAgfQogICAgICAgIGlmIChudWxsICE9PSAkcmVxdWlyZVJlc2lkZW50S2V5KSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgInJlcXVpcmVSZXNpZGVudEtleSIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDQuMC4gUGxlYXNlIHVzZSB0aGUgbWV0aG9kICJzZXRSZXF1aXJlUmVzaWRlbnRLZXkiLicsIEVfVVNFUl9ERVBSRUNBVEVEKTsKICAgICAgICB9CiAgICAgICAgaWYgKG51bGwgIT09ICR1c2VyVmVyaWZpY2F0aW9uKSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgInVzZXJWZXJpZmljYXRpb24iIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjMgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiA0LjAuIFBsZWFzZSB1c2UgdGhlIG1ldGhvZCAic2V0VXNlclZlcmlmaWNhdGlvbiIuJywgRV9VU0VSX0RFUFJFQ0FURUQpOwogICAgICAgIH0KICAgICAgICBpZiAobnVsbCAhPT0gJHJlc2lkZW50S2V5KSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgInJlc2lkZW50S2V5IiBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4zIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gNC4wLiBQbGVhc2UgdXNlIHRoZSBtZXRob2QgInNldFJlc2lkZW50S2V5Ii4nLCBFX1VTRVJfREVQUkVDQVRFRCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5hdXRoZW50aWNhdG9yQXR0YWNobWVudCA9ICRhdXRoZW50aWNhdG9yQXR0YWNobWVudDsKICAgICAgICAkdGhpcy0+cmVxdWlyZVJlc2lkZW50S2V5ID0gJHJlcXVpcmVSZXNpZGVudEtleSA/PyBmYWxzZTsKICAgICAgICAkdGhpcy0+dXNlclZlcmlmaWNhdGlvbiA9ICR1c2VyVmVyaWZpY2F0aW9uID8/IHNlbGY6OlVTRVJfVkVSSUZJQ0FUSU9OX1JFUVVJUkVNRU5UX1BSRUZFUlJFRDsKICAgICAgICAkdGhpcy0+cmVzaWRlbnRLZXkgPSAkcmVzaWRlbnRLZXkgPz8gc2VsZjo6UkVTSURFTlRfS0VZX1JFUVVJUkVNRU5UX05PTkU7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRBdXRoZW50aWNhdG9yQXR0YWNobWVudCg/c3RyaW5nICRhdXRoZW50aWNhdG9yQXR0YWNobWVudCk6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+YXV0aGVudGljYXRvckF0dGFjaG1lbnQgPSAkYXV0aGVudGljYXRvckF0dGFjaG1lbnQ7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UmVxdWlyZVJlc2lkZW50S2V5KGJvb2wgJHJlcXVpcmVSZXNpZGVudEtleSk6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+cmVxdWlyZVJlc2lkZW50S2V5ID0gJHJlcXVpcmVSZXNpZGVudEtleTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRVc2VyVmVyaWZpY2F0aW9uKHN0cmluZyAkdXNlclZlcmlmaWNhdGlvbik6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+dXNlclZlcmlmaWNhdGlvbiA9ICR1c2VyVmVyaWZpY2F0aW9uOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldFJlc2lkZW50S2V5KD9zdHJpbmcgJHJlc2lkZW50S2V5KTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5yZXNpZGVudEtleSA9ICRyZXNpZGVudEtleTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdXRoZW50aWNhdG9yQXR0YWNobWVudCgpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hdXRoZW50aWNhdG9yQXR0YWNobWVudDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNSZXF1aXJlUmVzaWRlbnRLZXkoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVxdWlyZVJlc2lkZW50S2V5OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVc2VyVmVyaWZpY2F0aW9uKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dXNlclZlcmlmaWNhdGlvbjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzaWRlbnRLZXkoKTogP3N0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVzaWRlbnRLZXk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tU3RyaW5nKHN0cmluZyAkZGF0YSk6IHNlbGYKICAgIHsKICAgICAgICAkZGF0YSA9IGpzb25fZGVjb2RlKCRkYXRhLCB0cnVlKTsKICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJGRhdGEsICdJbnZhbGlkIGRhdGEnKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZUZyb21BcnJheSgkZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkanNvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21BcnJheShhcnJheSAkanNvbik6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlKCkKICAgICAgICAgICAgLT5zZXRBdXRoZW50aWNhdG9yQXR0YWNobWVudCgkanNvblsnYXV0aGVudGljYXRvckF0dGFjaG1lbnQnXSA/PyBudWxsKQogICAgICAgICAgICAtPnNldFJlcXVpcmVSZXNpZGVudEtleSgkanNvblsncmVxdWlyZVJlc2lkZW50S2V5J10gPz8gZmFsc2UpCiAgICAgICAgICAgIC0+c2V0VXNlclZlcmlmaWNhdGlvbigkanNvblsndXNlclZlcmlmaWNhdGlvbiddID8/IHNlbGY6OlVTRVJfVkVSSUZJQ0FUSU9OX1JFUVVJUkVNRU5UX1BSRUZFUlJFRCkKICAgICAgICAgICAgLT5zZXRSZXNpZGVudEtleSgkanNvblsncmVzaWRlbnRLZXknXSA/PyBzZWxmOjpSRVNJREVOVF9LRVlfUkVRVUlSRU1FTlRfTk9ORSkKICAgICAgICA7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICAkanNvbiA9IFsKICAgICAgICAgICAgJ3JlcXVpcmVSZXNpZGVudEtleScgPT4gJHRoaXMtPnJlcXVpcmVSZXNpZGVudEtleSwKICAgICAgICAgICAgJ3VzZXJWZXJpZmljYXRpb24nID0+ICR0aGlzLT51c2VyVmVyaWZpY2F0aW9uLAogICAgICAgIF07CiAgICAgICAgaWYgKG51bGwgIT09ICR0aGlzLT5hdXRoZW50aWNhdG9yQXR0YWNobWVudCkgewogICAgICAgICAgICAkanNvblsnYXV0aGVudGljYXRvckF0dGFjaG1lbnQnXSA9ICR0aGlzLT5hdXRoZW50aWNhdG9yQXR0YWNobWVudDsKICAgICAgICB9CiAgICAgICAgaWYgKG51bGwgIT09ICR0aGlzLT5yZXNpZGVudEtleSkgewogICAgICAgICAgICAkanNvblsncmVzaWRlbnRLZXknXSA9ICR0aGlzLT5yZXNpZGVudEtleTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkanNvbjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/CertificateChainChecker/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/CertificateChainChecker/CertificateChainChecker.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXENlcnRpZmljYXRlQ2hhaW5DaGVja2VyOwoKaW50ZXJmYWNlIENlcnRpZmljYXRlQ2hhaW5DaGVja2VyCnsKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZ1tdICRhdXRoZW50aWNhdG9yQ2VydGlmaWNhdGVzCiAgICAgKiBAcGFyYW0gc3RyaW5nW10gJHRydXN0ZWRDZXJ0aWZpY2F0ZXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNoZWNrKGFycmF5ICRhdXRoZW50aWNhdG9yQ2VydGlmaWNhdGVzLCBhcnJheSAkdHJ1c3RlZENlcnRpZmljYXRlcyk6IHZvaWQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/CertificateChainChecker/OpenSSLCertificateChainChecker.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXENlcnRpZmljYXRlQ2hhaW5DaGVja2VyOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBmdW5jdGlvbiBjb3VudDsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIGZ1bmN0aW9uIGlzX2ludDsKdXNlIFBzclxIdHRwXENsaWVudFxDbGllbnRJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RGYWN0b3J5SW50ZXJmYWNlOwp1c2UgUnVudGltZUV4Y2VwdGlvbjsKdXNlIFNhZmVcRXhjZXB0aW9uc1xGaWxlc3lzdGVtRXhjZXB0aW9uOwp1c2UgZnVuY3Rpb24gU2FmZVxmaWxlX3B1dF9jb250ZW50czsKdXNlIGZ1bmN0aW9uIFNhZmVca3NvcnQ7CnVzZSBmdW5jdGlvbiBTYWZlXG1rZGlyOwp1c2UgZnVuY3Rpb24gU2FmZVxyZW5hbWU7CnVzZSBmdW5jdGlvbiBTYWZlXHNwcmludGY7CnVzZSBmdW5jdGlvbiBTYWZlXHRlbXBuYW07CnVzZSBmdW5jdGlvbiBTYWZlXHVubGluazsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcUHJvY2VzczsKCmZpbmFsIGNsYXNzIE9wZW5TU0xDZXJ0aWZpY2F0ZUNoYWluQ2hlY2tlciBpbXBsZW1lbnRzIENlcnRpZmljYXRlQ2hhaW5DaGVja2VyCnsKICAgIC8qKgogICAgICogQHZhciBDbGllbnRJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkY2xpZW50OwoKICAgIC8qKgogICAgICogQHZhciBSZXF1ZXN0RmFjdG9yeUludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRyZXF1ZXN0RmFjdG9yeTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nW10KICAgICAqLwogICAgcHJpdmF0ZSAkcm9vdENlcnRpZmljYXRlcyA9IFtdOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChDbGllbnRJbnRlcmZhY2UgJGNsaWVudCwgUmVxdWVzdEZhY3RvcnlJbnRlcmZhY2UgJHJlcXVlc3RGYWN0b3J5KQogICAgewogICAgICAgICR0aGlzLT5jbGllbnQgPSAkY2xpZW50OwogICAgICAgICR0aGlzLT5yZXF1ZXN0RmFjdG9yeSA9ICRyZXF1ZXN0RmFjdG9yeTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkUm9vdENlcnRpZmljYXRlKHN0cmluZyAkY2VydGlmaWNhdGUpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPnJvb3RDZXJ0aWZpY2F0ZXNbXSA9ICRjZXJ0aWZpY2F0ZTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZ1tdICRhdXRoZW50aWNhdG9yQ2VydGlmaWNhdGVzCiAgICAgKiBAcGFyYW0gc3RyaW5nW10gJHRydXN0ZWRDZXJ0aWZpY2F0ZXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNoZWNrKGFycmF5ICRhdXRoZW50aWNhdG9yQ2VydGlmaWNhdGVzLCBhcnJheSAkdHJ1c3RlZENlcnRpZmljYXRlcyk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoMCA9PT0gY291bnQoJHRydXN0ZWRDZXJ0aWZpY2F0ZXMpKSB7CiAgICAgICAgICAgICR0aGlzLT5jaGVja0NlcnRpZmljYXRlc1ZhbGlkaXR5KCRhdXRoZW50aWNhdG9yQ2VydGlmaWNhdGVzLCB0cnVlKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPmNoZWNrQ2VydGlmaWNhdGVzVmFsaWRpdHkoJGF1dGhlbnRpY2F0b3JDZXJ0aWZpY2F0ZXMsIGZhbHNlKTsKCiAgICAgICAgJGhhc0NybHMgPSBmYWxzZTsKICAgICAgICAkcHJvY2Vzc0FyZ3VtZW50cyA9IFsnLW5vLUNBZmlsZScsICctbm8tQ0FwYXRoJ107CgogICAgICAgICRjYURpcm5hbWUgPSAkdGhpcy0+Y3JlYXRlVGVtcG9yYXJ5RGlyZWN0b3J5KCk7CiAgICAgICAgJHByb2Nlc3NBcmd1bWVudHNbXSA9ICctLUNBcGF0aCc7CiAgICAgICAgJHByb2Nlc3NBcmd1bWVudHNbXSA9ICRjYURpcm5hbWU7CgogICAgICAgIGZvcmVhY2ggKCR0cnVzdGVkQ2VydGlmaWNhdGVzIGFzICRjZXJ0aWZpY2F0ZSkgewogICAgICAgICAgICAkdGhpcy0+c2F2ZVRvVGVtcG9yYXJ5RmlsZSgkY2FEaXJuYW1lLCAkY2VydGlmaWNhdGUsICd3ZWJhdXRobi10cnVzdGVkLScsICcucGVtJyk7CiAgICAgICAgICAgICRjcmwgPSAkdGhpcy0+Z2V0Q3JscygkY2VydGlmaWNhdGUpOwogICAgICAgICAgICBpZiAoJycgIT09ICRjcmwpIHsKICAgICAgICAgICAgICAgICRoYXNDcmxzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICR0aGlzLT5zYXZlVG9UZW1wb3JhcnlGaWxlKCRjYURpcm5hbWUsICRjcmwsICd3ZWJhdXRobi10cnVzdGVkLWNybC0nLCAnLmNybCcpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkcmVoYXNoUHJvY2VzcyA9IG5ldyBQcm9jZXNzKFsnb3BlbnNzbCcsICdyZWhhc2gnLCAkY2FEaXJuYW1lXSk7CiAgICAgICAgJHJlaGFzaFByb2Nlc3MtPnJ1bigpOwogICAgICAgIHdoaWxlICgkcmVoYXNoUHJvY2Vzcy0+aXNSdW5uaW5nKCkpIHsKICAgICAgICAgICAgLy9KdXN0IHdhaXQKICAgICAgICB9CiAgICAgICAgaWYgKCEkcmVoYXNoUHJvY2Vzcy0+aXNTdWNjZXNzZnVsKCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBjZXJ0aWZpY2F0ZSBvciBjZXJ0aWZpY2F0ZSBjaGFpbicpOwogICAgICAgIH0KCiAgICAgICAgJGZpbGVuYW1lcyA9IFtdOwogICAgICAgICRsZWFmQ2VydGlmaWNhdGUgPSBhcnJheV9zaGlmdCgkYXV0aGVudGljYXRvckNlcnRpZmljYXRlcyk7CiAgICAgICAgJGxlYWZGaWxlbmFtZSA9ICR0aGlzLT5zYXZlVG9UZW1wb3JhcnlGaWxlKHN5c19nZXRfdGVtcF9kaXIoKSwgJGxlYWZDZXJ0aWZpY2F0ZSwgJ3dlYmF1dGhuLWxlYWYtJywgJy5wZW0nKTsKICAgICAgICAkY3JsID0gJHRoaXMtPmdldENybHMoJGxlYWZDZXJ0aWZpY2F0ZSk7CiAgICAgICAgaWYgKCcnICE9PSAkY3JsKSB7CiAgICAgICAgICAgICRoYXNDcmxzID0gdHJ1ZTsKICAgICAgICAgICAgJHRoaXMtPnNhdmVUb1RlbXBvcmFyeUZpbGUoJGNhRGlybmFtZSwgJGNybCwgJ3dlYmF1dGhuLWxlYWYtY3JsLScsICcucGVtJyk7CiAgICAgICAgfQogICAgICAgICRmaWxlbmFtZXNbXSA9ICRsZWFmRmlsZW5hbWU7CgogICAgICAgIGZvcmVhY2ggKCRhdXRoZW50aWNhdG9yQ2VydGlmaWNhdGVzIGFzICRjZXJ0aWZpY2F0ZSkgewogICAgICAgICAgICAkdW50cnVzdGVkRmlsZW5hbWUgPSAkdGhpcy0+c2F2ZVRvVGVtcG9yYXJ5RmlsZShzeXNfZ2V0X3RlbXBfZGlyKCksICRjZXJ0aWZpY2F0ZSwgJ3dlYmF1dGhuLXVudHJ1c3RlZC0nLCAnLnBlbScpOwogICAgICAgICAgICAkY3JsID0gJHRoaXMtPmdldENybHMoJGNlcnRpZmljYXRlKTsKICAgICAgICAgICAgaWYgKCcnICE9PSAkY3JsKSB7CiAgICAgICAgICAgICAgICAkaGFzQ3JscyA9IHRydWU7CiAgICAgICAgICAgICAgICAkdGhpcy0+c2F2ZVRvVGVtcG9yYXJ5RmlsZSgkY2FEaXJuYW1lLCAkY3JsLCAnd2ViYXV0aG4tdW50cnVzdGVkLWNybC0nLCAnLnBlbScpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRwcm9jZXNzQXJndW1lbnRzW10gPSAnLXVudHJ1c3RlZCc7CiAgICAgICAgICAgICRwcm9jZXNzQXJndW1lbnRzW10gPSAkdW50cnVzdGVkRmlsZW5hbWU7CiAgICAgICAgICAgICRmaWxlbmFtZXNbXSA9ICR1bnRydXN0ZWRGaWxlbmFtZTsKICAgICAgICB9CgogICAgICAgICRwcm9jZXNzQXJndW1lbnRzW10gPSAkbGVhZkZpbGVuYW1lOwogICAgICAgIGlmICgkaGFzQ3JscykgewogICAgICAgICAgICBhcnJheV91bnNoaWZ0KCRwcm9jZXNzQXJndW1lbnRzLCAnLWNybF9jaGVjaycpOwogICAgICAgICAgICBhcnJheV91bnNoaWZ0KCRwcm9jZXNzQXJndW1lbnRzLCAnLWNybF9jaGVja19hbGwnKTsKICAgICAgICAgICAgLy9hcnJheV91bnNoaWZ0KCRwcm9jZXNzQXJndW1lbnRzLCAnLWNybF9kb3dubG9hZCcpOwogICAgICAgICAgICBhcnJheV91bnNoaWZ0KCRwcm9jZXNzQXJndW1lbnRzLCAnLWV4dGVuZGVkX2NybCcpOwogICAgICAgIH0KICAgICAgICBhcnJheV91bnNoaWZ0KCRwcm9jZXNzQXJndW1lbnRzLCAnb3BlbnNzbCcsICd2ZXJpZnknKTsKCiAgICAgICAgJHByb2Nlc3MgPSBuZXcgUHJvY2VzcygkcHJvY2Vzc0FyZ3VtZW50cyk7CiAgICAgICAgJHByb2Nlc3MtPnJ1bigpOwogICAgICAgIHdoaWxlICgkcHJvY2Vzcy0+aXNSdW5uaW5nKCkpIHsKICAgICAgICAgICAgLy9KdXN0IHdhaXQKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZpbGVuYW1lKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICB1bmxpbmsoJGZpbGVuYW1lKTsKICAgICAgICAgICAgfSBjYXRjaCAoRmlsZXN5c3RlbUV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJHRoaXMtPmRlbGV0ZURpcmVjdG9yeSgkY2FEaXJuYW1lKTsKCiAgICAgICAgaWYgKCEkcHJvY2Vzcy0+aXNTdWNjZXNzZnVsKCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBjZXJ0aWZpY2F0ZSBvciBjZXJ0aWZpY2F0ZSBjaGFpbicpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmdbXSAkY2VydGlmaWNhdGVzCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gY2hlY2tDZXJ0aWZpY2F0ZXNWYWxpZGl0eShhcnJheSAkY2VydGlmaWNhdGVzLCBib29sICRhbGxvd1Jvb3RDZXJ0aWZpY2F0ZSk6IHZvaWQKICAgIHsKICAgICAgICBmb3JlYWNoICgkY2VydGlmaWNhdGVzIGFzICRjZXJ0aWZpY2F0ZSkgewogICAgICAgICAgICAkcGFyc2VkID0gb3BlbnNzbF94NTA5X3BhcnNlKCRjZXJ0aWZpY2F0ZSk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkcGFyc2VkLCAnVW5hYmxlIHRvIHJlYWQgdGhlIGNlcnRpZmljYXRlJyk7CiAgICAgICAgICAgIGlmIChmYWxzZSA9PT0gJGFsbG93Um9vdENlcnRpZmljYXRlKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y2hlY2tSb290Q2VydGlmaWNhdGUoJHBhcnNlZCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRwYXJzZWQsICd2YWxpZFRvX3RpbWVfdCcsICdUaGUgY2VydGlmaWNhdGUgaGFzIG5vIHZhbGlkaXR5IHBlcmlvZCcpOwogICAgICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkcGFyc2VkLCAndmFsaWRGcm9tX3RpbWVfdCcsICdUaGUgY2VydGlmaWNhdGUgaGFzIG5vIHZhbGlkaXR5IHBlcmlvZCcpOwogICAgICAgICAgICBBc3NlcnRpb246Omxlc3NPckVxdWFsVGhhbih0aW1lKCksICRwYXJzZWRbJ3ZhbGlkVG9fdGltZV90J10sICdUaGUgY2VydGlmaWNhdGUgZXhwaXJlZCcpOwogICAgICAgICAgICBBc3NlcnRpb246OmdyZWF0ZXJPckVxdWFsVGhhbih0aW1lKCksICRwYXJzZWRbJ3ZhbGlkRnJvbV90aW1lX3QnXSwgJ1RoZSBjZXJ0aWZpY2F0ZSBpcyBub3QgdXNhYmxlIHlldCcpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheTxzdHJpbmcsIG1peGVkPiAkcGFyc2VkCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gY2hlY2tSb290Q2VydGlmaWNhdGUoYXJyYXkgJHBhcnNlZCk6IHZvaWQKICAgIHsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkcGFyc2VkLCAnc3ViamVjdCcsICdUaGUgY2VydGlmaWNhdGUgaGFzIG5vIHN1YmplY3QnKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkcGFyc2VkLCAnaXNzdWVyJywgJ1RoZSBjZXJ0aWZpY2F0ZSBoYXMgbm8gaXNzdWVyJyk7CiAgICAgICAgJHN1YmplY3QgPSAkcGFyc2VkWydzdWJqZWN0J107CiAgICAgICAgJGlzc3VlciA9ICRwYXJzZWRbJ2lzc3VlciddOwogICAgICAgIGtzb3J0KCRzdWJqZWN0KTsKICAgICAgICBrc29ydCgkaXNzdWVyKTsKICAgICAgICBBc3NlcnRpb246Om5vdEVxKCRzdWJqZWN0LCAkaXNzdWVyLCAnUm9vdCBjZXJ0aWZpY2F0ZXMgYXJlIG5vdCBhbGxvd2VkJyk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjcmVhdGVUZW1wb3JhcnlEaXJlY3RvcnkoKTogc3RyaW5nCiAgICB7CiAgICAgICAgJGNhRGlyID0gdGVtcG5hbShzeXNfZ2V0X3RlbXBfZGlyKCksICd3ZWJhdXRobi1jYS0nKTsKICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGNhRGlyKSkgewogICAgICAgICAgICB1bmxpbmsoJGNhRGlyKTsKICAgICAgICB9CiAgICAgICAgbWtkaXIoJGNhRGlyKTsKICAgICAgICBpZiAoIWlzX2RpcigkY2FEaXIpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKHNwcmludGYoJ0RpcmVjdG9yeSAiJXMiIHdhcyBub3QgY3JlYXRlZCcsICRjYURpcikpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRjYURpcjsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGRlbGV0ZURpcmVjdG9yeShzdHJpbmcgJGRpcm5hbWUpOiB2b2lkCiAgICB7CiAgICAgICAgJHJlaGFzaFByb2Nlc3MgPSBuZXcgUHJvY2VzcyhbJ3JtJywgJy1yZicsICRkaXJuYW1lXSk7CiAgICAgICAgJHJlaGFzaFByb2Nlc3MtPnJ1bigpOwogICAgICAgIHdoaWxlICgkcmVoYXNoUHJvY2Vzcy0+aXNSdW5uaW5nKCkpIHsKICAgICAgICAgICAgLy9KdXN0IHdhaXQKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBzYXZlVG9UZW1wb3JhcnlGaWxlKHN0cmluZyAkZm9sZGVyLCBzdHJpbmcgJGNlcnRpZmljYXRlLCBzdHJpbmcgJHByZWZpeCwgc3RyaW5nICRzdWZmaXgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkZmlsZW5hbWUgPSB0ZW1wbmFtKCRmb2xkZXIsICRwcmVmaXgpOwogICAgICAgIHJlbmFtZSgkZmlsZW5hbWUsICRmaWxlbmFtZS4kc3VmZml4KTsKICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkZmlsZW5hbWUuJHN1ZmZpeCwgJGNlcnRpZmljYXRlLCBGSUxFX0FQUEVORCk7CgogICAgICAgIHJldHVybiAkZmlsZW5hbWUuJHN1ZmZpeDsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldENybHMoc3RyaW5nICRjZXJ0aWZpY2F0ZSk6IHN0cmluZwogICAgewogICAgICAgICRwYXJzZWQgPSBvcGVuc3NsX3g1MDlfcGFyc2UoJGNlcnRpZmljYXRlKTsKICAgICAgICBpZiAoZmFsc2UgPT09ICRwYXJzZWQgfHwgIWlzc2V0KCRwYXJzZWRbJ2V4dGVuc2lvbnMnXVsnY3JsRGlzdHJpYnV0aW9uUG9pbnRzJ10pKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CiAgICAgICAgJGVuZHBvaW50ID0gJHBhcnNlZFsnZXh0ZW5zaW9ucyddWydjcmxEaXN0cmlidXRpb25Qb2ludHMnXTsKICAgICAgICAkcG9zID0gbWJfc3RycG9zKCRlbmRwb2ludCwgJ1VSSTonKTsKICAgICAgICBpZiAoIWlzX2ludCgkcG9zKSkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQoKICAgICAgICAkZW5kcG9pbnQgPSB0cmltKG1iX3N1YnN0cigkZW5kcG9pbnQsICRwb3MgKyA0KSk7CiAgICAgICAgJHJlcXVlc3QgPSAkdGhpcy0+cmVxdWVzdEZhY3RvcnktPmNyZWF0ZVJlcXVlc3QoJ0dFVCcsICRlbmRwb2ludCk7CiAgICAgICAgJHJlc3BvbnNlID0gJHRoaXMtPmNsaWVudC0+c2VuZFJlcXVlc3QoJHJlcXVlc3QpOwoKICAgICAgICBpZiAoMjAwICE9PSAkcmVzcG9uc2UtPmdldFN0YXR1c0NvZGUoKSkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3BvbnNlLT5nZXRCb2R5KCktPmdldENvbnRlbnRzKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/CertificateToolbox.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBmdW5jdGlvbiBjb3VudDsKdXNlIGZ1bmN0aW9uIGluX2FycmF5Owp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgUnVudGltZUV4Y2VwdGlvbjsKdXNlIFNhZmVcRXhjZXB0aW9uc1xGaWxlc3lzdGVtRXhjZXB0aW9uOwp1c2UgZnVuY3Rpb24gU2FmZVxmaWxlX3B1dF9jb250ZW50czsKdXNlIGZ1bmN0aW9uIFNhZmVca3NvcnQ7CnVzZSBmdW5jdGlvbiBTYWZlXG1rZGlyOwp1c2UgZnVuY3Rpb24gU2FmZVxyZW5hbWU7CnVzZSBmdW5jdGlvbiBTYWZlXHNwcmludGY7CnVzZSBmdW5jdGlvbiBTYWZlXHRlbXBuYW07CnVzZSBmdW5jdGlvbiBTYWZlXHVubGluazsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcUHJvY2VzczsKCmNsYXNzIENlcnRpZmljYXRlVG9vbGJveAp7CiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkICJUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkIHNpbmNlIHYzLjMgYW5kIHdpbGwgYmUgcmVtb3ZlZCBlbiB2NC4wLiBQbGVhc2UgdXNlIFdlYmF1dGhuXENlcnRpZmljYXRlQ2hhaW5DaGVja2VyXENlcnRpZmljYXRlQ2hhaW5DaGVja2VyIGluc3RlYWQiCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ1tdICRhdXRoZW50aWNhdG9yQ2VydGlmaWNhdGVzCiAgICAgKiBAcGFyYW0gc3RyaW5nW10gJHRydXN0ZWRDZXJ0aWZpY2F0ZXMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaGVja0NoYWluKGFycmF5ICRhdXRoZW50aWNhdG9yQ2VydGlmaWNhdGVzLCBhcnJheSAkdHJ1c3RlZENlcnRpZmljYXRlcyA9IFtdKTogdm9pZAogICAgewogICAgICAgIGlmICgwID09PSBjb3VudCgkdHJ1c3RlZENlcnRpZmljYXRlcykpIHsKICAgICAgICAgICAgc2VsZjo6Y2hlY2tDZXJ0aWZpY2F0ZXNWYWxpZGl0eSgkYXV0aGVudGljYXRvckNlcnRpZmljYXRlcywgdHJ1ZSk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHNlbGY6OmNoZWNrQ2VydGlmaWNhdGVzVmFsaWRpdHkoJGF1dGhlbnRpY2F0b3JDZXJ0aWZpY2F0ZXMsIGZhbHNlKTsKCiAgICAgICAgJHByb2Nlc3NBcmd1bWVudHMgPSBbJy1uby1DQWZpbGUnLCAnLW5vLUNBcGF0aCddOwoKICAgICAgICAkY2FEaXJuYW1lID0gc2VsZjo6Y3JlYXRlVGVtcG9yYXJ5RGlyZWN0b3J5KCk7CiAgICAgICAgJHByb2Nlc3NBcmd1bWVudHNbXSA9ICctLUNBcGF0aCc7CiAgICAgICAgJHByb2Nlc3NBcmd1bWVudHNbXSA9ICRjYURpcm5hbWU7CgogICAgICAgIGZvcmVhY2ggKCR0cnVzdGVkQ2VydGlmaWNhdGVzIGFzICRjZXJ0aWZpY2F0ZSkgewogICAgICAgICAgICBzZWxmOjpwcmVwYXJlQ2VydGlmaWNhdGUoJGNhRGlybmFtZSwgJGNlcnRpZmljYXRlLCAnd2ViYXV0aG4tdHJ1c3RlZC0nLCAnLnBlbScpOwogICAgICAgIH0KCiAgICAgICAgJHJlaGFzaFByb2Nlc3MgPSBuZXcgUHJvY2VzcyhbJ29wZW5zc2wnLCAncmVoYXNoJywgJGNhRGlybmFtZV0pOwogICAgICAgICRyZWhhc2hQcm9jZXNzLT5ydW4oKTsKICAgICAgICB3aGlsZSAoJHJlaGFzaFByb2Nlc3MtPmlzUnVubmluZygpKSB7CiAgICAgICAgICAgIC8vSnVzdCB3YWl0CiAgICAgICAgfQogICAgICAgIGlmICghJHJlaGFzaFByb2Nlc3MtPmlzU3VjY2Vzc2Z1bCgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgY2VydGlmaWNhdGUgb3IgY2VydGlmaWNhdGUgY2hhaW4nKTsKICAgICAgICB9CgogICAgICAgICRmaWxlbmFtZXMgPSBbXTsKICAgICAgICAkbGVhZkNlcnRpZmljYXRlID0gYXJyYXlfc2hpZnQoJGF1dGhlbnRpY2F0b3JDZXJ0aWZpY2F0ZXMpOwogICAgICAgICRsZWFmRmlsZW5hbWUgPSBzZWxmOjpwcmVwYXJlQ2VydGlmaWNhdGUoc3lzX2dldF90ZW1wX2RpcigpLCAkbGVhZkNlcnRpZmljYXRlLCAnd2ViYXV0aG4tbGVhZi0nLCAnLnBlbScpOwogICAgICAgICRmaWxlbmFtZXNbXSA9ICRsZWFmRmlsZW5hbWU7CgogICAgICAgIGZvcmVhY2ggKCRhdXRoZW50aWNhdG9yQ2VydGlmaWNhdGVzIGFzICRjZXJ0aWZpY2F0ZSkgewogICAgICAgICAgICAkdW50cnVzdGVkRmlsZW5hbWUgPSBzZWxmOjpwcmVwYXJlQ2VydGlmaWNhdGUoc3lzX2dldF90ZW1wX2RpcigpLCAkY2VydGlmaWNhdGUsICd3ZWJhdXRobi11bnRydXN0ZWQtJywgJy5wZW0nKTsKICAgICAgICAgICAgJHByb2Nlc3NBcmd1bWVudHNbXSA9ICctdW50cnVzdGVkJzsKICAgICAgICAgICAgJHByb2Nlc3NBcmd1bWVudHNbXSA9ICR1bnRydXN0ZWRGaWxlbmFtZTsKICAgICAgICAgICAgJGZpbGVuYW1lc1tdID0gJHVudHJ1c3RlZEZpbGVuYW1lOwogICAgICAgIH0KCiAgICAgICAgJHByb2Nlc3NBcmd1bWVudHNbXSA9ICRsZWFmRmlsZW5hbWU7CiAgICAgICAgYXJyYXlfdW5zaGlmdCgkcHJvY2Vzc0FyZ3VtZW50cywgJ29wZW5zc2wnLCAndmVyaWZ5Jyk7CgogICAgICAgICRwcm9jZXNzID0gbmV3IFByb2Nlc3MoJHByb2Nlc3NBcmd1bWVudHMpOwogICAgICAgICRwcm9jZXNzLT5ydW4oKTsKICAgICAgICB3aGlsZSAoJHByb2Nlc3MtPmlzUnVubmluZygpKSB7CiAgICAgICAgICAgIC8vSnVzdCB3YWl0CiAgICAgICAgfQoKICAgICAgICBmb3JlYWNoICgkZmlsZW5hbWVzIGFzICRmaWxlbmFtZSkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgdW5saW5rKCRmaWxlbmFtZSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKEZpbGVzeXN0ZW1FeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHNlbGY6OmRlbGV0ZURpcmVjdG9yeSgkY2FEaXJuYW1lKTsKCiAgICAgICAgaWYgKCEkcHJvY2Vzcy0+aXNTdWNjZXNzZnVsKCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBjZXJ0aWZpY2F0ZSBvciBjZXJ0aWZpY2F0ZSBjaGFpbicpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZpeFBFTVN0cnVjdHVyZShzdHJpbmcgJGNlcnRpZmljYXRlLCBzdHJpbmcgJHR5cGUgPSAnQ0VSVElGSUNBVEUnKTogc3RyaW5nCiAgICB7CiAgICAgICAgJHBlbUNlcnQgPSAnLS0tLS1CRUdJTiAnLiR0eXBlLictLS0tLScuUEhQX0VPTDsKICAgICAgICAkcGVtQ2VydCAuPSBjaHVua19zcGxpdCgkY2VydGlmaWNhdGUsIDY0LCBQSFBfRU9MKTsKICAgICAgICAkcGVtQ2VydCAuPSAnLS0tLS1FTkQgJy4kdHlwZS4nLS0tLS0nLlBIUF9FT0w7CgogICAgICAgIHJldHVybiAkcGVtQ2VydDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbnZlcnRERVJUb1BFTShzdHJpbmcgJGNlcnRpZmljYXRlLCBzdHJpbmcgJHR5cGUgPSAnQ0VSVElGSUNBVEUnKTogc3RyaW5nCiAgICB7CiAgICAgICAgJGRlckNlcnRpZmljYXRlID0gc2VsZjo6dW51c2VkQnl0ZXNGaXgoJGNlcnRpZmljYXRlKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmZpeFBFTVN0cnVjdHVyZShiYXNlNjRfZW5jb2RlKCRkZXJDZXJ0aWZpY2F0ZSksICR0eXBlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmdbXSAkY2VydGlmaWNhdGVzCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbnZlcnRBbGxERVJUb1BFTShhcnJheSAkY2VydGlmaWNhdGVzLCBzdHJpbmcgJHR5cGUgPSAnQ0VSVElGSUNBVEUnKTogYXJyYXkKICAgIHsKICAgICAgICAkY2VydHMgPSBbXTsKICAgICAgICBmb3JlYWNoICgkY2VydGlmaWNhdGVzIGFzICRwdWJsaWNLZXkpIHsKICAgICAgICAgICAgJGNlcnRzW10gPSBzZWxmOjpjb252ZXJ0REVSVG9QRU0oJHB1YmxpY0tleSwgJHR5cGUpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRjZXJ0czsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiB1bnVzZWRCeXRlc0ZpeChzdHJpbmcgJGNlcnRpZmljYXRlKTogc3RyaW5nCiAgICB7CiAgICAgICAgJGNlcnRpZmljYXRlSGFzaCA9IGhhc2goJ3NoYTI1NicsICRjZXJ0aWZpY2F0ZSk7CiAgICAgICAgaWYgKGluX2FycmF5KCRjZXJ0aWZpY2F0ZUhhc2gsIHNlbGY6OmdldENlcnRpZmljYXRlSGFzaGVzKCksIHRydWUpKSB7CiAgICAgICAgICAgICRjZXJ0aWZpY2F0ZVttYl9zdHJsZW4oJGNlcnRpZmljYXRlLCAnOGJpdCcpIC0gMjU3XSA9ICJcMCI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGNlcnRpZmljYXRlOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZ1tdICRjZXJ0aWZpY2F0ZXMKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY2hlY2tDZXJ0aWZpY2F0ZXNWYWxpZGl0eShhcnJheSAkY2VydGlmaWNhdGVzLCBib29sICRhbGxvd1Jvb3RDZXJ0aWZpY2F0ZSk6IHZvaWQKICAgIHsKICAgICAgICBmb3JlYWNoICgkY2VydGlmaWNhdGVzIGFzICRjZXJ0aWZpY2F0ZSkgewogICAgICAgICAgICAkcGFyc2VkID0gb3BlbnNzbF94NTA5X3BhcnNlKCRjZXJ0aWZpY2F0ZSk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkcGFyc2VkLCAnVW5hYmxlIHRvIHJlYWQgdGhlIGNlcnRpZmljYXRlJyk7CiAgICAgICAgICAgIGlmIChmYWxzZSA9PT0gJGFsbG93Um9vdENlcnRpZmljYXRlKSB7CiAgICAgICAgICAgICAgICBzZWxmOjpjaGVja1Jvb3RDZXJ0aWZpY2F0ZSgkcGFyc2VkKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJHBhcnNlZCwgJ3ZhbGlkVG9fdGltZV90JywgJ1RoZSBjZXJ0aWZpY2F0ZSBoYXMgbm8gdmFsaWRpdHkgcGVyaW9kJyk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRwYXJzZWQsICd2YWxpZEZyb21fdGltZV90JywgJ1RoZSBjZXJ0aWZpY2F0ZSBoYXMgbm8gdmFsaWRpdHkgcGVyaW9kJyk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6bGVzc09yRXF1YWxUaGFuKHRpbWUoKSwgJHBhcnNlZFsndmFsaWRUb190aW1lX3QnXSwgJ1RoZSBjZXJ0aWZpY2F0ZSBleHBpcmVkJyk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6Z3JlYXRlck9yRXF1YWxUaGFuKHRpbWUoKSwgJHBhcnNlZFsndmFsaWRGcm9tX3RpbWVfdCddLCAnVGhlIGNlcnRpZmljYXRlIGlzIG5vdCB1c2FibGUgeWV0Jyk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGFycmF5PHN0cmluZywgbWl4ZWQ+ICRwYXJzZWQKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY2hlY2tSb290Q2VydGlmaWNhdGUoYXJyYXkgJHBhcnNlZCk6IHZvaWQKICAgIHsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkcGFyc2VkLCAnc3ViamVjdCcsICdUaGUgY2VydGlmaWNhdGUgaGFzIG5vIHN1YmplY3QnKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkcGFyc2VkLCAnaXNzdWVyJywgJ1RoZSBjZXJ0aWZpY2F0ZSBoYXMgbm8gaXNzdWVyJyk7CiAgICAgICAgJHN1YmplY3QgPSAkcGFyc2VkWydzdWJqZWN0J107CiAgICAgICAgJGlzc3VlciA9ICRwYXJzZWRbJ2lzc3VlciddOwogICAgICAgIGtzb3J0KCRzdWJqZWN0KTsKICAgICAgICBrc29ydCgkaXNzdWVyKTsKICAgICAgICBBc3NlcnRpb246Om5vdEVxKCRzdWJqZWN0LCAkaXNzdWVyLCAnUm9vdCBjZXJ0aWZpY2F0ZXMgYXJlIG5vdCBhbGxvd2VkJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGdldENlcnRpZmljYXRlSGFzaGVzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJzM0OWJjYTEwMzFmOGM4MmM0Y2VjYTM4YjljZWJmMWE2OWRmOWZiM2I5NGVlZDk5ZWIzZmI5YWEzODIyZDI2ZTgnLAogICAgICAgICAgICAnZGQ1NzQ1MjdkZjYwOGU0N2FlNDVmYmJhNzVhMmFmZGQ1YzIwZmQ5NGEwMjQxOTM4MTgxM2NkNTVhMmEzMzk4ZicsCiAgICAgICAgICAgICcxZDg3NjRmMGY3Y2QxMzUyZGY2MTUwMDQ1YzhmNjM4ZTUxNzI3MGU4YjVkZGExYzYzYWRlOWMyMjgwMjQwY2FlJywKICAgICAgICAgICAgJ2QwZWRjOWE5MWExNjc3NDM1YTk1MzM5MDg2NWQyMDhjNTViMzE4M2M2NzU5YzliNWE3ZmY0OTRjMzIyNTU4ZWInLAogICAgICAgICAgICAnNjA3M2M0MzZkY2QwNjRhNDgxMjdkZGJmNjAzMmFjMWE2NmZkNTlhMGMyNDQzNGYwNzBkNGU1NjRjMTI0Yzg5NycsCiAgICAgICAgICAgICdjYTk5MzEyMTg0NmM0NjRkNjY2MDk2ZDM1ZjEzYmY0NGMxYjA1YWYyMDVmOWI0YTFlMDBjZjZjYzEwYzVlNTExJywKICAgICAgICBdOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZVRlbXBvcmFyeURpcmVjdG9yeSgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkY2FEaXIgPSB0ZW1wbmFtKHN5c19nZXRfdGVtcF9kaXIoKSwgJ3dlYmF1dGhuLWNhLScpOwogICAgICAgIGlmIChmaWxlX2V4aXN0cygkY2FEaXIpKSB7CiAgICAgICAgICAgIHVubGluaygkY2FEaXIpOwogICAgICAgIH0KICAgICAgICBta2RpcigkY2FEaXIpOwogICAgICAgIGlmICghaXNfZGlyKCRjYURpcikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oc3ByaW50ZignRGlyZWN0b3J5ICIlcyIgd2FzIG5vdCBjcmVhdGVkJywgJGNhRGlyKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGNhRGlyOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGRlbGV0ZURpcmVjdG9yeShzdHJpbmcgJGRpcm5hbWUpOiB2b2lkCiAgICB7CiAgICAgICAgJHJlaGFzaFByb2Nlc3MgPSBuZXcgUHJvY2VzcyhbJ3JtJywgJy1yZicsICRkaXJuYW1lXSk7CiAgICAgICAgJHJlaGFzaFByb2Nlc3MtPnJ1bigpOwogICAgICAgIHdoaWxlICgkcmVoYXNoUHJvY2Vzcy0+aXNSdW5uaW5nKCkpIHsKICAgICAgICAgICAgLy9KdXN0IHdhaXQKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gcHJlcGFyZUNlcnRpZmljYXRlKHN0cmluZyAkZm9sZGVyLCBzdHJpbmcgJGNlcnRpZmljYXRlLCBzdHJpbmcgJHByZWZpeCwgc3RyaW5nICRzdWZmaXgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkdW50cnVzdGVkRmlsZW5hbWUgPSB0ZW1wbmFtKCRmb2xkZXIsICRwcmVmaXgpOwogICAgICAgIHJlbmFtZSgkdW50cnVzdGVkRmlsZW5hbWUsICR1bnRydXN0ZWRGaWxlbmFtZS4kc3VmZml4KTsKICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkdW50cnVzdGVkRmlsZW5hbWUuJHN1ZmZpeCwgJGNlcnRpZmljYXRlLCBGSUxFX0FQUEVORCk7CiAgICAgICAgZmlsZV9wdXRfY29udGVudHMoJHVudHJ1c3RlZEZpbGVuYW1lLiRzdWZmaXgsIFBIUF9FT0wsIEZJTEVfQVBQRU5EKTsKCiAgICAgICAgcmV0dXJuICR1bnRydXN0ZWRGaWxlbmFtZS4kc3VmZml4OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/CollectedClientData.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIGZ1bmN0aW9uIGFycmF5X2tleV9leGlzdHM7CnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIGZ1bmN0aW9uIFNhZmVcanNvbl9kZWNvZGU7CnVzZSBmdW5jdGlvbiBTYWZlXHNwcmludGY7CnVzZSBXZWJhdXRoblxUb2tlbkJpbmRpbmdcVG9rZW5CaW5kaW5nOwoKY2xhc3MgQ29sbGVjdGVkQ2xpZW50RGF0YQp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJHJhd0RhdGE7CgogICAgLyoqCiAgICAgKiBAdmFyIG1peGVkW10KICAgICAqLwogICAgcHJpdmF0ZSAkZGF0YTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJHR5cGU7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRjaGFsbGVuZ2U7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRvcmlnaW47CgogICAgLyoqCiAgICAgKiBAdmFyIG1peGVkW118bnVsbAogICAgICovCiAgICBwcml2YXRlICR0b2tlbkJpbmRpbmc7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkZGF0YQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRyYXdEYXRhLCBhcnJheSAkZGF0YSkKICAgIHsKICAgICAgICAkdGhpcy0+dHlwZSA9ICR0aGlzLT5maW5kRGF0YSgkZGF0YSwgJ3R5cGUnKTsKICAgICAgICAkdGhpcy0+Y2hhbGxlbmdlID0gJHRoaXMtPmZpbmREYXRhKCRkYXRhLCAnY2hhbGxlbmdlJywgdHJ1ZSwgdHJ1ZSk7CiAgICAgICAgJHRoaXMtPm9yaWdpbiA9ICR0aGlzLT5maW5kRGF0YSgkZGF0YSwgJ29yaWdpbicpOwogICAgICAgICR0aGlzLT50b2tlbkJpbmRpbmcgPSAkdGhpcy0+ZmluZERhdGEoJGRhdGEsICd0b2tlbkJpbmRpbmcnLCBmYWxzZSk7CiAgICAgICAgJHRoaXMtPnJhd0RhdGEgPSAkcmF3RGF0YTsKICAgICAgICAkdGhpcy0+ZGF0YSA9ICRkYXRhOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRm9ybUpzb24oc3RyaW5nICRkYXRhKTogc2VsZgogICAgewogICAgICAgICRyYXdEYXRhID0gQmFzZTY0VXJsOjpkZWNvZGUoJGRhdGEpOwogICAgICAgICRqc29uID0ganNvbl9kZWNvZGUoJHJhd0RhdGEsIHRydWUpOwogICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkanNvbiwgJ0ludmFsaWQgY29sbGVjdGVkIGNsaWVudCBkYXRhJyk7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkcmF3RGF0YSwgJGpzb24pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dHlwZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2hhbGxlbmdlKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2hhbGxlbmdlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPcmlnaW4oKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5vcmlnaW47CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFRva2VuQmluZGluZygpOiA/VG9rZW5CaW5kaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIG51bGwgPT09ICR0aGlzLT50b2tlbkJpbmRpbmcgPyBudWxsIDogVG9rZW5CaW5kaW5nOjpjcmVhdGVGb3JtQXJyYXkoJHRoaXMtPnRva2VuQmluZGluZyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFJhd0RhdGEoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yYXdEYXRhOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWxsKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X2tleXMoJHRoaXMtPmRhdGEpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYXMoc3RyaW5nICRrZXkpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X2tleV9leGlzdHMoJGtleSwgJHRoaXMtPmRhdGEpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0KHN0cmluZyAka2V5KQogICAgewogICAgICAgIGlmICghJHRoaXMtPmhhcygka2V5KSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoJ1RoZSBrZXkgIiVzIiBpcyBtaXNzaW5nJywgJGtleSkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhWyRrZXldOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkW10gJGpzb24KICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBmaW5kRGF0YShhcnJheSAkanNvbiwgc3RyaW5nICRrZXksIGJvb2wgJGlzUmVxdWlyZWQgPSB0cnVlLCBib29sICRpc0I2NCA9IGZhbHNlKQogICAgewogICAgICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkanNvbikpIHsKICAgICAgICAgICAgaWYgKCRpc1JlcXVpcmVkKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoJ1RoZSBrZXkgIiVzIiBpcyBtaXNzaW5nJywgJGtleSkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGlzQjY0ID8gQmFzZTY0VXJsOjpkZWNvZGUoJGpzb25bJGtleV0pIDogJGpzb25bJGtleV07CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/Counter/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/Counter/CounterChecker.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXENvdW50ZXI7Cgp1c2UgV2ViYXV0aG5cUHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZTsKCmludGVyZmFjZSBDb3VudGVyQ2hlY2tlcgp7CiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2soUHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZSAkcHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZSwgaW50ICRjdXJyZW50Q291bnRlcik6IHZvaWQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/Counter/ThrowExceptionIfInvalid.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXENvdW50ZXI7Cgp1c2UgQXNzZXJ0XEFzc2VydGlvbjsKdXNlIFBzclxMb2dcTG9nZ2VySW50ZXJmYWNlOwp1c2UgUHNyXExvZ1xOdWxsTG9nZ2VyOwp1c2UgVGhyb3dhYmxlOwp1c2UgV2ViYXV0aG5cUHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZTsKCmZpbmFsIGNsYXNzIFRocm93RXhjZXB0aW9uSWZJbnZhbGlkIGltcGxlbWVudHMgQ291bnRlckNoZWNrZXIKewogICAgLyoqCiAgICAgKiBAdmFyIExvZ2dlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRsb2dnZXI7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KD9Mb2dnZXJJbnRlcmZhY2UgJGxvZ2dlciA9IG51bGwpCiAgICB7CiAgICAgICAgJHRoaXMtPmxvZ2dlciA9ICRsb2dnZXIgPz8gbmV3IE51bGxMb2dnZXIoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2soUHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZSAkcHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZSwgaW50ICRjdXJyZW50Q291bnRlcik6IHZvaWQKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBBc3NlcnRpb246OmdyZWF0ZXJUaGFuKCRjdXJyZW50Q291bnRlciwgJHB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2UtPmdldENvdW50ZXIoKSwgJ0ludmFsaWQgY291bnRlci4nKTsKICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgJHRocm93YWJsZSkgewogICAgICAgICAgICAkdGhpcy0+bG9nZ2VyLT5lcnJvcignVGhlIGNvdW50ZXIgaXMgaW52YWxpZCcsIFsKICAgICAgICAgICAgICAgICdjdXJyZW50JyA9PiAkY3VycmVudENvdW50ZXIsCiAgICAgICAgICAgICAgICAnbmV3JyA9PiAkcHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZS0+Z2V0Q291bnRlcigpLAogICAgICAgICAgICBdKTsKICAgICAgICAgICAgdGhyb3cgJHRocm93YWJsZTsKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/Credential.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKLyoqCiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1jcmVkZW50aWFsLW1hbmFnZW1lbnQvI2NyZWRlbnRpYWwKICovCmFic3RyYWN0IGNsYXNzIENyZWRlbnRpYWwKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJGlkOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICR0eXBlOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJGlkLCBzdHJpbmcgJHR5cGUpCiAgICB7CiAgICAgICAgJHRoaXMtPmlkID0gJGlkOwogICAgICAgICR0aGlzLT50eXBlID0gJHR5cGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldElkKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aWQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50eXBlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/PublicKeyCredential.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIGZ1bmN0aW9uIFNhZmVcanNvbl9lbmNvZGU7CgovKioKICogQHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvd2ViYXV0aG4vI2lmYWNlLXBrY3JlZGVudGlhbAogKi8KY2xhc3MgUHVibGljS2V5Q3JlZGVudGlhbCBleHRlbmRzIENyZWRlbnRpYWwKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJHJhd0lkOwoKICAgIC8qKgogICAgICogQHZhciBBdXRoZW50aWNhdG9yUmVzcG9uc2UKICAgICAqLwogICAgcHJvdGVjdGVkICRyZXNwb25zZTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRpZCwgc3RyaW5nICR0eXBlLCBzdHJpbmcgJHJhd0lkLCBBdXRoZW50aWNhdG9yUmVzcG9uc2UgJHJlc3BvbnNlKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJGlkLCAkdHlwZSk7CiAgICAgICAgJHRoaXMtPnJhd0lkID0gJHJhd0lkOwogICAgICAgICR0aGlzLT5yZXNwb25zZSA9ICRyZXNwb25zZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCiAgICB7CiAgICAgICAgcmV0dXJuIGpzb25fZW5jb2RlKCR0aGlzKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmF3SWQoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yYXdJZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzcG9uc2UoKTogQXV0aGVudGljYXRvclJlc3BvbnNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXNwb25zZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmdbXSAkdHJhbnNwb3J0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcihhcnJheSAkdHJhbnNwb3J0ID0gW10pOiBQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcgogICAgewogICAgICAgIHJldHVybiBuZXcgUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IoJHRoaXMtPmdldFR5cGUoKSwgJHRoaXMtPmdldFJhd0lkKCksICR0cmFuc3BvcnQpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/PublicKeyCredentialCreationOptions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBCYXNlNjRVcmxcQmFzZTY0VXJsOwp1c2UgZnVuY3Rpb24gY291bnQ7CnVzZSBmdW5jdGlvbiBTYWZlXGpzb25fZGVjb2RlOwp1c2UgV2ViYXV0aG5cQXV0aGVudGljYXRpb25FeHRlbnNpb25zXEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0czsKCmNsYXNzIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgZXh0ZW5kcyBQdWJsaWNLZXlDcmVkZW50aWFsT3B0aW9ucwp7CiAgICBwdWJsaWMgY29uc3QgQVRURVNUQVRJT05fQ09OVkVZQU5DRV9QUkVGRVJFTkNFX05PTkUgPSAnbm9uZSc7CiAgICBwdWJsaWMgY29uc3QgQVRURVNUQVRJT05fQ09OVkVZQU5DRV9QUkVGRVJFTkNFX0lORElSRUNUID0gJ2luZGlyZWN0JzsKICAgIHB1YmxpYyBjb25zdCBBVFRFU1RBVElPTl9DT05WRVlBTkNFX1BSRUZFUkVOQ0VfRElSRUNUID0gJ2RpcmVjdCc7CiAgICBwdWJsaWMgY29uc3QgQVRURVNUQVRJT05fQ09OVkVZQU5DRV9QUkVGRVJFTkNFX0VOVEVSUFJJU0UgPSAnZW50ZXJwcmlzZSc7CgogICAgLyoqCiAgICAgKiBAdmFyIFB1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eQogICAgICovCiAgICBwcml2YXRlICRycDsKCiAgICAvKioKICAgICAqIEB2YXIgUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkKICAgICAqLwogICAgcHJpdmF0ZSAkdXNlcjsKCiAgICAvKioKICAgICAqIEB2YXIgUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnNbXQogICAgICovCiAgICBwcml2YXRlICRwdWJLZXlDcmVkUGFyYW1zID0gW107CgogICAgLyoqCiAgICAgKiBAdmFyIFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yW10KICAgICAqLwogICAgcHJpdmF0ZSAkZXhjbHVkZUNyZWRlbnRpYWxzID0gW107CgogICAgLyoqCiAgICAgKiBAdmFyIEF1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYQogICAgICovCiAgICBwcml2YXRlICRhdXRoZW50aWNhdG9yU2VsZWN0aW9uOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkYXR0ZXN0YXRpb247CgogICAgLyoqCiAgICAgKiBAcGFyYW0gUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnNbXSAkcHViS2V5Q3JlZFBhcmFtcwogICAgICogQHBhcmFtIFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yW10gJGV4Y2x1ZGVDcmVkZW50aWFscwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5ICRycCwgUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgJHVzZXIsIHN0cmluZyAkY2hhbGxlbmdlLCBhcnJheSAkcHViS2V5Q3JlZFBhcmFtcywgP2ludCAkdGltZW91dCA9IG51bGwsIGFycmF5ICRleGNsdWRlQ3JlZGVudGlhbHMgPSBbXSwgP0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSAkYXV0aGVudGljYXRvclNlbGVjdGlvbiA9IG51bGwsID9zdHJpbmcgJGF0dGVzdGF0aW9uID0gbnVsbCwgP0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyAkZXh0ZW5zaW9ucyA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKDAgIT09IGNvdW50KCRleGNsdWRlQ3JlZGVudGlhbHMpKSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgImV4Y2x1ZGVDcmVkZW50aWFscyIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDQuMC4gUGxlYXNlIHVzZSB0aGUgbWV0aG9kICJleGNsdWRlQ3JlZGVudGlhbHMiIG9yICJleGNsdWRlQ3JlZGVudGlhbCIuJywgRV9VU0VSX0RFUFJFQ0FURUQpOwogICAgICAgIH0KICAgICAgICBpZiAobnVsbCAhPT0gJGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24pIHsKICAgICAgICAgICAgQHRyaWdnZXJfZXJyb3IoJ1RoZSBhcmd1bWVudCAiYXV0aGVudGljYXRvclNlbGVjdGlvbiIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDQuMC4gUGxlYXNlIHVzZSB0aGUgbWV0aG9kICJzZXRBdXRoZW50aWNhdG9yU2VsZWN0aW9uIi4nLCBFX1VTRVJfREVQUkVDQVRFRCk7CiAgICAgICAgfQogICAgICAgIGlmIChudWxsICE9PSAkYXR0ZXN0YXRpb24pIHsKICAgICAgICAgICAgQHRyaWdnZXJfZXJyb3IoJ1RoZSBhcmd1bWVudCAiYXR0ZXN0YXRpb24iIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjMgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiA0LjAuIFBsZWFzZSB1c2UgdGhlIG1ldGhvZCAic2V0QXR0ZXN0YXRpb24iLicsIEVfVVNFUl9ERVBSRUNBVEVEKTsKICAgICAgICB9CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkY2hhbGxlbmdlLCAkdGltZW91dCwgJGV4dGVuc2lvbnMpOwogICAgICAgICR0aGlzLT5ycCA9ICRycDsKICAgICAgICAkdGhpcy0+dXNlciA9ICR1c2VyOwogICAgICAgICR0aGlzLT5wdWJLZXlDcmVkUGFyYW1zID0gJHB1YktleUNyZWRQYXJhbXM7CiAgICAgICAgJHRoaXMtPmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24gPSAkYXV0aGVudGljYXRvclNlbGVjdGlvbiA/PyBuZXcgQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhKCk7CiAgICAgICAgJHRoaXMtPmF0dGVzdGF0aW9uID0gJGF0dGVzdGF0aW9uID8/IHNlbGY6OkFUVEVTVEFUSU9OX0NPTlZFWUFOQ0VfUFJFRkVSRU5DRV9OT05FOwogICAgICAgICR0aGlzLT5leGNsdWRlQ3JlZGVudGlhbHMoJGV4Y2x1ZGVDcmVkZW50aWFscykKICAgICAgICA7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnNbXSAkcHViS2V5Q3JlZFBhcmFtcwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkgJHJwLCBQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSAkdXNlciwgc3RyaW5nICRjaGFsbGVuZ2UsIGFycmF5ICRwdWJLZXlDcmVkUGFyYW1zKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkcnAsICR1c2VyLCAkY2hhbGxlbmdlLCAkcHViS2V5Q3JlZFBhcmFtcyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFkZFB1YktleUNyZWRQYXJhbShQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAkcHViS2V5Q3JlZFBhcmFtKTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5wdWJLZXlDcmVkUGFyYW1zW10gPSAkcHViS2V5Q3JlZFBhcmFtOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnNbXSAkcHViS2V5Q3JlZFBhcmFtcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkUHViS2V5Q3JlZFBhcmFtcyhhcnJheSAkcHViS2V5Q3JlZFBhcmFtcyk6IHNlbGYKICAgIHsKICAgICAgICBmb3JlYWNoICgkcHViS2V5Q3JlZFBhcmFtcyBhcyAkcHViS2V5Q3JlZFBhcmFtKSB7CiAgICAgICAgICAgICR0aGlzLT5hZGRQdWJLZXlDcmVkUGFyYW0oJHB1YktleUNyZWRQYXJhbSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGV4Y2x1ZGVDcmVkZW50aWFsKFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yICRleGNsdWRlQ3JlZGVudGlhbCk6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+ZXhjbHVkZUNyZWRlbnRpYWxzW10gPSAkZXhjbHVkZUNyZWRlbnRpYWw7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcltdICRleGNsdWRlQ3JlZGVudGlhbHMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4Y2x1ZGVDcmVkZW50aWFscyhhcnJheSAkZXhjbHVkZUNyZWRlbnRpYWxzKTogc2VsZgogICAgewogICAgICAgIGZvcmVhY2ggKCRleGNsdWRlQ3JlZGVudGlhbHMgYXMgJGV4Y2x1ZGVDcmVkZW50aWFsKSB7CiAgICAgICAgICAgICR0aGlzLT5leGNsdWRlQ3JlZGVudGlhbCgkZXhjbHVkZUNyZWRlbnRpYWwpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRBdXRoZW50aWNhdG9yU2VsZWN0aW9uKEF1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSAkYXV0aGVudGljYXRvclNlbGVjdGlvbik6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+YXV0aGVudGljYXRvclNlbGVjdGlvbiA9ICRhdXRoZW50aWNhdG9yU2VsZWN0aW9uOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldEF0dGVzdGF0aW9uKHN0cmluZyAkYXR0ZXN0YXRpb24pOiBzZWxmCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjppbkFycmF5KCRhdHRlc3RhdGlvbiwgWwogICAgICAgICAgICBzZWxmOjpBVFRFU1RBVElPTl9DT05WRVlBTkNFX1BSRUZFUkVOQ0VfTk9ORSwKICAgICAgICAgICAgc2VsZjo6QVRURVNUQVRJT05fQ09OVkVZQU5DRV9QUkVGRVJFTkNFX0RJUkVDVCwKICAgICAgICAgICAgc2VsZjo6QVRURVNUQVRJT05fQ09OVkVZQU5DRV9QUkVGRVJFTkNFX0lORElSRUNULAogICAgICAgICAgICBzZWxmOjpBVFRFU1RBVElPTl9DT05WRVlBTkNFX1BSRUZFUkVOQ0VfRU5URVJQUklTRSwKICAgICAgICBdLCAnSW52YWxpZCBhdHRlc3RhdGlvbiBjb252ZXlhbmNlIG1vZGUnKTsKICAgICAgICAkdGhpcy0+YXR0ZXN0YXRpb24gPSAkYXR0ZXN0YXRpb247CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UnAoKTogUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5ycDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VXNlcigpOiBQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dXNlcjsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnNbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UHViS2V5Q3JlZFBhcmFtcygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cHViS2V5Q3JlZFBhcmFtczsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3JbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXhjbHVkZUNyZWRlbnRpYWxzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5leGNsdWRlQ3JlZGVudGlhbHM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEF1dGhlbnRpY2F0b3JTZWxlY3Rpb24oKTogQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hdXRoZW50aWNhdG9yU2VsZWN0aW9uOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdHRlc3RhdGlvbigpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmF0dGVzdGF0aW9uOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVN0cmluZyhzdHJpbmcgJGRhdGEpOiBQdWJsaWNLZXlDcmVkZW50aWFsT3B0aW9ucwogICAgewogICAgICAgICRkYXRhID0ganNvbl9kZWNvZGUoJGRhdGEsIHRydWUpOwogICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkZGF0YSwgJ0ludmFsaWQgZGF0YScpOwoKICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlRnJvbUFycmF5KCRkYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21BcnJheShhcnJheSAkanNvbik6IFB1YmxpY0tleUNyZWRlbnRpYWxPcHRpb25zCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGpzb24sICdycCcsICdJbnZhbGlkIGlucHV0LiAicnAiIGlzIG1pc3NpbmcuJyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGpzb24sICdwdWJLZXlDcmVkUGFyYW1zJywgJ0ludmFsaWQgaW5wdXQuICJwdWJLZXlDcmVkUGFyYW1zIiBpcyBtaXNzaW5nLicpOwogICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkanNvblsncHViS2V5Q3JlZFBhcmFtcyddLCAnSW52YWxpZCBpbnB1dC4gInB1YktleUNyZWRQYXJhbXMiIGlzIG5vdCBhbiBhcnJheS4nKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkanNvbiwgJ2NoYWxsZW5nZScsICdJbnZhbGlkIGlucHV0LiAiY2hhbGxlbmdlIiBpcyBtaXNzaW5nLicpOwogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRqc29uLCAnYXR0ZXN0YXRpb24nLCAnSW52YWxpZCBpbnB1dC4gImF0dGVzdGF0aW9uIiBpcyBtaXNzaW5nLicpOwogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRqc29uLCAndXNlcicsICdJbnZhbGlkIGlucHV0LiAidXNlciIgaXMgbWlzc2luZy4nKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkanNvbiwgJ2F1dGhlbnRpY2F0b3JTZWxlY3Rpb24nLCAnSW52YWxpZCBpbnB1dC4gImF1dGhlbnRpY2F0b3JTZWxlY3Rpb24iIGlzIG1pc3NpbmcuJyk7CgogICAgICAgICRwdWJLZXlDcmVkUGFyYW1zID0gW107CiAgICAgICAgZm9yZWFjaCAoJGpzb25bJ3B1YktleUNyZWRQYXJhbXMnXSBhcyAkcHViS2V5Q3JlZFBhcmFtKSB7CiAgICAgICAgICAgICRwdWJLZXlDcmVkUGFyYW1zW10gPSBQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVyczo6Y3JlYXRlRnJvbUFycmF5KCRwdWJLZXlDcmVkUGFyYW0pOwogICAgICAgIH0KICAgICAgICAkZXhjbHVkZUNyZWRlbnRpYWxzID0gW107CiAgICAgICAgaWYgKGlzc2V0KCRqc29uWydleGNsdWRlQ3JlZGVudGlhbHMnXSkpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJGpzb25bJ2V4Y2x1ZGVDcmVkZW50aWFscyddIGFzICRleGNsdWRlQ3JlZGVudGlhbCkgewogICAgICAgICAgICAgICAgJGV4Y2x1ZGVDcmVkZW50aWFsc1tdID0gUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I6OmNyZWF0ZUZyb21BcnJheSgkZXhjbHVkZUNyZWRlbnRpYWwpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlKAogICAgICAgICAgICAgICAgUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5OjpjcmVhdGVGcm9tQXJyYXkoJGpzb25bJ3JwJ10pLAogICAgICAgICAgICAgICAgUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHk6OmNyZWF0ZUZyb21BcnJheSgkanNvblsndXNlciddKSwKICAgICAgICAgICAgICAgIEJhc2U2NFVybDo6ZGVjb2RlKCRqc29uWydjaGFsbGVuZ2UnXSksCiAgICAgICAgICAgICAgICAkcHViS2V5Q3JlZFBhcmFtcwogICAgICAgICAgICApCiAgICAgICAgICAgIC0+ZXhjbHVkZUNyZWRlbnRpYWxzKCRleGNsdWRlQ3JlZGVudGlhbHMpCiAgICAgICAgICAgIC0+c2V0QXV0aGVudGljYXRvclNlbGVjdGlvbihBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWE6OmNyZWF0ZUZyb21BcnJheSgkanNvblsnYXV0aGVudGljYXRvclNlbGVjdGlvbiddKSkKICAgICAgICAgICAgLT5zZXRBdHRlc3RhdGlvbigkanNvblsnYXR0ZXN0YXRpb24nXSkKICAgICAgICAgICAgLT5zZXRUaW1lb3V0KCRqc29uWyd0aW1lb3V0J10gPz8gbnVsbCkKICAgICAgICAgICAgLT5zZXRFeHRlbnNpb25zKGlzc2V0KCRqc29uWydleHRlbnNpb25zJ10pID8gQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzOjpjcmVhdGVGcm9tQXJyYXkoJGpzb25bJ2V4dGVuc2lvbnMnXSkgOiBuZXcgQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzKCkpCiAgICAgICAgOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBtaXhlZFtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCk6IGFycmF5CiAgICB7CiAgICAgICAgJGpzb24gPSBbCiAgICAgICAgICAgICdycCcgPT4gJHRoaXMtPnJwLT5qc29uU2VyaWFsaXplKCksCiAgICAgICAgICAgICdwdWJLZXlDcmVkUGFyYW1zJyA9PiBhcnJheV9tYXAoc3RhdGljIGZ1bmN0aW9uIChQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAkb2JqZWN0KTogYXJyYXkgewogICAgICAgICAgICAgICAgcmV0dXJuICRvYmplY3QtPmpzb25TZXJpYWxpemUoKTsKICAgICAgICAgICAgfSwgJHRoaXMtPnB1YktleUNyZWRQYXJhbXMpLAogICAgICAgICAgICAnY2hhbGxlbmdlJyA9PiBCYXNlNjRVcmw6OmVuY29kZSgkdGhpcy0+Y2hhbGxlbmdlKSwKICAgICAgICAgICAgJ2F0dGVzdGF0aW9uJyA9PiAkdGhpcy0+YXR0ZXN0YXRpb24sCiAgICAgICAgICAgICd1c2VyJyA9PiAkdGhpcy0+dXNlci0+anNvblNlcmlhbGl6ZSgpLAogICAgICAgICAgICAnYXV0aGVudGljYXRvclNlbGVjdGlvbicgPT4gJHRoaXMtPmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24tPmpzb25TZXJpYWxpemUoKSwKICAgICAgICBdOwoKICAgICAgICBpZiAoMCAhPT0gY291bnQoJHRoaXMtPmV4Y2x1ZGVDcmVkZW50aWFscykpIHsKICAgICAgICAgICAgJGpzb25bJ2V4Y2x1ZGVDcmVkZW50aWFscyddID0gYXJyYXlfbWFwKHN0YXRpYyBmdW5jdGlvbiAoUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgJG9iamVjdCk6IGFycmF5IHsKICAgICAgICAgICAgICAgIHJldHVybiAkb2JqZWN0LT5qc29uU2VyaWFsaXplKCk7CiAgICAgICAgICAgIH0sICR0aGlzLT5leGNsdWRlQ3JlZGVudGlhbHMpOwogICAgICAgIH0KCiAgICAgICAgaWYgKDAgIT09ICR0aGlzLT5leHRlbnNpb25zLT5jb3VudCgpKSB7CiAgICAgICAgICAgICRqc29uWydleHRlbnNpb25zJ10gPSAkdGhpcy0+ZXh0ZW5zaW9uczsKICAgICAgICB9CgogICAgICAgIGlmIChudWxsICE9PSAkdGhpcy0+dGltZW91dCkgewogICAgICAgICAgICAkanNvblsndGltZW91dCddID0gJHRoaXMtPnRpbWVvdXQ7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGpzb247CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/PublicKeyCredentialDescriptor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBCYXNlNjRVcmxcQmFzZTY0VXJsOwp1c2UgZnVuY3Rpb24gY291bnQ7CnVzZSBKc29uU2VyaWFsaXphYmxlOwp1c2UgZnVuY3Rpb24gU2FmZVxqc29uX2RlY29kZTsKCmNsYXNzIFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZQp7CiAgICBwdWJsaWMgY29uc3QgQ1JFREVOVElBTF9UWVBFX1BVQkxJQ19LRVkgPSAncHVibGljLWtleSc7CgogICAgcHVibGljIGNvbnN0IEFVVEhFTlRJQ0FUT1JfVFJBTlNQT1JUX1VTQiA9ICd1c2InOwogICAgcHVibGljIGNvbnN0IEFVVEhFTlRJQ0FUT1JfVFJBTlNQT1JUX05GQyA9ICduZmMnOwogICAgcHVibGljIGNvbnN0IEFVVEhFTlRJQ0FUT1JfVFJBTlNQT1JUX0JMRSA9ICdibGUnOwogICAgcHVibGljIGNvbnN0IEFVVEhFTlRJQ0FUT1JfVFJBTlNQT1JUX0lOVEVSTkFMID0gJ2ludGVybmFsJzsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkdHlwZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkaWQ7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ1tdCiAgICAgKi8KICAgIHByb3RlY3RlZCAkdHJhbnNwb3J0czsKCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmdbXSAkdHJhbnNwb3J0cwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICR0eXBlLCBzdHJpbmcgJGlkLCBhcnJheSAkdHJhbnNwb3J0cyA9IFtdKQogICAgewogICAgICAgICR0aGlzLT50eXBlID0gJHR5cGU7CiAgICAgICAgJHRoaXMtPmlkID0gJGlkOwogICAgICAgICR0aGlzLT50cmFuc3BvcnRzID0gJHRyYW5zcG9ydHM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50eXBlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJZCgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmlkOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHJhbnNwb3J0cygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dHJhbnNwb3J0czsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21TdHJpbmcoc3RyaW5nICRkYXRhKTogc2VsZgogICAgewogICAgICAgICRkYXRhID0ganNvbl9kZWNvZGUoJGRhdGEsIHRydWUpOwogICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkZGF0YSwgJ0ludmFsaWQgZGF0YScpOwoKICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlRnJvbUFycmF5KCRkYXRhKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZFtdICRqc29uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUFycmF5KGFycmF5ICRqc29uKTogc2VsZgogICAgewogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRqc29uLCAndHlwZScsICdJbnZhbGlkIGlucHV0LiAidHlwZSIgaXMgbWlzc2luZy4nKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkanNvbiwgJ2lkJywgJ0ludmFsaWQgaW5wdXQuICJpZCIgaXMgbWlzc2luZy4nKTsKCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKAogICAgICAgICAgICAkanNvblsndHlwZSddLAogICAgICAgICAgICBCYXNlNjRVcmw6OmRlY29kZSgkanNvblsnaWQnXSksCiAgICAgICAgICAgICRqc29uWyd0cmFuc3BvcnRzJ10gPz8gW10KICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBtaXhlZFtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCk6IGFycmF5CiAgICB7CiAgICAgICAgJGpzb24gPSBbCiAgICAgICAgICAgICd0eXBlJyA9PiAkdGhpcy0+dHlwZSwKICAgICAgICAgICAgJ2lkJyA9PiBCYXNlNjRVcmw6OmVuY29kZSgkdGhpcy0+aWQpLAogICAgICAgIF07CiAgICAgICAgaWYgKDAgIT09IGNvdW50KCR0aGlzLT50cmFuc3BvcnRzKSkgewogICAgICAgICAgICAkanNvblsndHJhbnNwb3J0cyddID0gJHRoaXMtPnRyYW5zcG9ydHM7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGpzb247CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/PublicKeyCredentialDescriptorCollection.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIGZ1bmN0aW9uIGFycmF5X2tleV9leGlzdHM7CnVzZSBBcnJheUl0ZXJhdG9yOwp1c2UgQXNzZXJ0XEFzc2VydGlvbjsKdXNlIGZ1bmN0aW9uIGNvdW50Owp1c2UgQ291bnRhYmxlOwp1c2UgSXRlcmF0b3I7CnVzZSBJdGVyYXRvckFnZ3JlZ2F0ZTsKdXNlIEpzb25TZXJpYWxpemFibGU7CnVzZSBmdW5jdGlvbiBTYWZlXGpzb25fZGVjb2RlOwoKY2xhc3MgUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3JDb2xsZWN0aW9uIGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZSwgQ291bnRhYmxlLCBJdGVyYXRvckFnZ3JlZ2F0ZQp7CiAgICAvKioKICAgICAqIEB2YXIgUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3JbXQogICAgICovCiAgICBwcml2YXRlICRwdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcnMgPSBbXTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yICRwdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcik6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+cHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3JzWyRwdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvci0+Z2V0SWQoKV0gPSAkcHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGhhcyhzdHJpbmcgJGlkKTogYm9vbAogICAgewogICAgICAgIHJldHVybiBhcnJheV9rZXlfZXhpc3RzKCRpZCwgJHRoaXMtPnB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9ycyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZShzdHJpbmcgJGlkKTogdm9pZAogICAgewogICAgICAgIGlmICghJHRoaXMtPmhhcygkaWQpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHVuc2V0KCR0aGlzLT5wdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcnNbJGlkXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEl0ZXJhdG9yPHN0cmluZywgUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJdGVyYXRvcigpOiBJdGVyYXRvcgogICAgewogICAgICAgIHJldHVybiBuZXcgQXJyYXlJdGVyYXRvcigkdGhpcy0+cHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3JzKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoaW50ICRtb2RlID0gQ09VTlRfTk9STUFMKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIGNvdW50KCR0aGlzLT5wdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcnMsICRtb2RlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXlbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBhcnJheV9tYXAoc3RhdGljIGZ1bmN0aW9uIChQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciAkb2JqZWN0KTogYXJyYXkgewogICAgICAgICAgICByZXR1cm4gJG9iamVjdC0+anNvblNlcmlhbGl6ZSgpOwogICAgICAgIH0sICR0aGlzLT5wdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcnMpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVN0cmluZyhzdHJpbmcgJGRhdGEpOiBzZWxmCiAgICB7CiAgICAgICAgJGRhdGEgPSBqc29uX2RlY29kZSgkZGF0YSwgdHJ1ZSk7CiAgICAgICAgQXNzZXJ0aW9uOjppc0FycmF5KCRkYXRhLCAnSW52YWxpZCBkYXRhJyk7CgogICAgICAgIHJldHVybiBzZWxmOjpjcmVhdGVGcm9tQXJyYXkoJGRhdGEpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkW10gJGpzb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tQXJyYXkoYXJyYXkgJGpzb24pOiBzZWxmCiAgICB7CiAgICAgICAgJGNvbGxlY3Rpb24gPSBuZXcgc2VsZigpOwogICAgICAgIGZvcmVhY2ggKCRqc29uIGFzICRpdGVtKSB7CiAgICAgICAgICAgICRjb2xsZWN0aW9uLT5hZGQoUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I6OmNyZWF0ZUZyb21BcnJheSgkaXRlbSkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRjb2xsZWN0aW9uOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/PublicKeyCredentialEntity.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEpzb25TZXJpYWxpemFibGU7CgphYnN0cmFjdCBjbGFzcyBQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5IGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkbmFtZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJvdGVjdGVkICRpY29uOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJG5hbWUsID9zdHJpbmcgJGljb24pCiAgICB7CiAgICAgICAgJHRoaXMtPm5hbWUgPSAkbmFtZTsKICAgICAgICAkdGhpcy0+aWNvbiA9ICRpY29uOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROYW1lKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bmFtZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SWNvbigpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5pY29uOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBtaXhlZFtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCk6IGFycmF5CiAgICB7CiAgICAgICAgJGpzb24gPSBbCiAgICAgICAgICAgICduYW1lJyA9PiAkdGhpcy0+bmFtZSwKICAgICAgICBdOwogICAgICAgIGlmIChudWxsICE9PSAkdGhpcy0+aWNvbikgewogICAgICAgICAgICAkanNvblsnaWNvbiddID0gJHRoaXMtPmljb247CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGpzb247CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/PublicKeyCredentialLoader.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIGZ1bmN0aW9uIGFycmF5X2tleV9leGlzdHM7CnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKdXNlIENCT1JcRGVjb2RlcjsKdXNlIENCT1JcTWFwT2JqZWN0Owp1c2UgQ0JPUlxPdGhlck9iamVjdFxPdGhlck9iamVjdE1hbmFnZXI7CnVzZSBDQk9SXFRhZ1xUYWdPYmplY3RNYW5hZ2VyOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgZnVuY3Rpb24gb3JkOwp1c2UgUHNyXExvZ1xMb2dnZXJJbnRlcmZhY2U7CnVzZSBQc3JcTG9nXE51bGxMb2dnZXI7CnVzZSBSYW1zZXlcVXVpZFxVdWlkOwp1c2UgZnVuY3Rpb24gU2FmZVxqc29uX2RlY29kZTsKdXNlIGZ1bmN0aW9uIFNhZmVcc3ByaW50ZjsKdXNlIGZ1bmN0aW9uIFNhZmVcdW5wYWNrOwp1c2UgVGhyb3dhYmxlOwp1c2UgV2ViYXV0aG5cQXR0ZXN0YXRpb25TdGF0ZW1lbnRcQXR0ZXN0YXRpb25PYmplY3RMb2FkZXI7CnVzZSBXZWJhdXRoblxBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNcQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0c0xvYWRlcjsKCmNsYXNzIFB1YmxpY0tleUNyZWRlbnRpYWxMb2FkZXIKewogICAgcHJpdmF0ZSBjb25zdCBGTEFHX0FUID0gMGIwMTAwMDAwMDsKICAgIHByaXZhdGUgY29uc3QgRkxBR19FRCA9IDBiMTAwMDAwMDA7CgogICAgLyoqCiAgICAgKiBAdmFyIEF0dGVzdGF0aW9uT2JqZWN0TG9hZGVyCiAgICAgKi8KICAgIHByaXZhdGUgJGF0dGVzdGF0aW9uT2JqZWN0TG9hZGVyOwoKICAgIC8qKgogICAgICogQHZhciBEZWNvZGVyCiAgICAgKi8KICAgIHByaXZhdGUgJGRlY29kZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIExvZ2dlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRsb2dnZXI7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEF0dGVzdGF0aW9uT2JqZWN0TG9hZGVyICRhdHRlc3RhdGlvbk9iamVjdExvYWRlciwgP0xvZ2dlckludGVyZmFjZSAkbG9nZ2VyID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAobnVsbCAhPT0gJGxvZ2dlcikgewogICAgICAgICAgICBAdHJpZ2dlcl9lcnJvcignVGhlIGFyZ3VtZW50ICJsb2dnZXIiIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjMgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiA0LjAuIFBsZWFzZSB1c2UgdGhlIG1ldGhvZCAic2V0TG9nZ2VyIi4nLCBFX1VTRVJfREVQUkVDQVRFRCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5kZWNvZGVyID0gbmV3IERlY29kZXIobmV3IFRhZ09iamVjdE1hbmFnZXIoKSwgbmV3IE90aGVyT2JqZWN0TWFuYWdlcigpKTsKICAgICAgICAkdGhpcy0+YXR0ZXN0YXRpb25PYmplY3RMb2FkZXIgPSAkYXR0ZXN0YXRpb25PYmplY3RMb2FkZXI7CiAgICAgICAgJHRoaXMtPmxvZ2dlciA9ICRsb2dnZXIgPz8gbmV3IE51bGxMb2dnZXIoKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShBdHRlc3RhdGlvbk9iamVjdExvYWRlciAkYXR0ZXN0YXRpb25PYmplY3RMb2FkZXIpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRhdHRlc3RhdGlvbk9iamVjdExvYWRlcik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldExvZ2dlcihMb2dnZXJJbnRlcmZhY2UgJGxvZ2dlcik6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+bG9nZ2VyID0gJGxvZ2dlcjsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkW10gJGpzb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWRBcnJheShhcnJheSAkanNvbik6IFB1YmxpY0tleUNyZWRlbnRpYWwKICAgIHsKICAgICAgICAkdGhpcy0+bG9nZ2VyLT5pbmZvKCdUcnlpbmcgdG8gbG9hZCBkYXRhIGZyb20gYW4gYXJyYXknLCBbJ2RhdGEnID0+ICRqc29uXSk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgZm9yZWFjaCAoWydpZCcsICdyYXdJZCcsICd0eXBlJ10gYXMgJGtleSkgewogICAgICAgICAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGpzb24sICRrZXksIHNwcmludGYoJ1RoZSBwYXJhbWV0ZXIgIiVzIiBpcyBtaXNzaW5nJywgJGtleSkpOwogICAgICAgICAgICAgICAgQXNzZXJ0aW9uOjpzdHJpbmcoJGpzb25bJGtleV0sIHNwcmludGYoJ1RoZSBwYXJhbWV0ZXIgIiVzIiBzaGFsbCBiZSBhIHN0cmluZycsICRrZXkpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkanNvbiwgJ3Jlc3BvbnNlJywgJ1RoZSBwYXJhbWV0ZXIgInJlc3BvbnNlIiBpcyBtaXNzaW5nJyk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkanNvblsncmVzcG9uc2UnXSwgJ1RoZSBwYXJhbWV0ZXIgInJlc3BvbnNlIiBzaGFsbCBiZSBhbiBhcnJheScpOwogICAgICAgICAgICBBc3NlcnRpb246OmVxKCRqc29uWyd0eXBlJ10sICdwdWJsaWMta2V5Jywgc3ByaW50ZignVW5zdXBwb3J0ZWQgdHlwZSAiJXMiJywgJGpzb25bJ3R5cGUnXSkpOwoKICAgICAgICAgICAgJGlkID0gQmFzZTY0VXJsOjpkZWNvZGUoJGpzb25bJ2lkJ10pOwogICAgICAgICAgICAkcmF3SWQgPSBCYXNlNjRVcmw6OmRlY29kZSgkanNvblsncmF3SWQnXSk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6dHJ1ZShoYXNoX2VxdWFscygkaWQsICRyYXdJZCkpOwoKICAgICAgICAgICAgJHB1YmxpY0tleUNyZWRlbnRpYWwgPSBuZXcgUHVibGljS2V5Q3JlZGVudGlhbCgKICAgICAgICAgICAgICAgICRqc29uWydpZCddLAogICAgICAgICAgICAgICAgJGpzb25bJ3R5cGUnXSwKICAgICAgICAgICAgICAgICRyYXdJZCwKICAgICAgICAgICAgICAgICR0aGlzLT5jcmVhdGVSZXNwb25zZSgkanNvblsncmVzcG9uc2UnXSkKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+aW5mbygnVGhlIGRhdGEgaGFzIGJlZW4gbG9hZGVkJyk7CiAgICAgICAgICAgICR0aGlzLT5sb2dnZXItPmRlYnVnKCdQdWJsaWMgS2V5IENyZWRlbnRpYWwnLCBbJ3B1YmxpY0tleUNyZWRlbnRpYWwnID0+ICRwdWJsaWNLZXlDcmVkZW50aWFsXSk7CgogICAgICAgICAgICByZXR1cm4gJHB1YmxpY0tleUNyZWRlbnRpYWw7CiAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlICR0aHJvd2FibGUpIHsKICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+ZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkJywgWwogICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbicgPT4gJHRocm93YWJsZSwKICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIHRocm93ICR0aHJvd2FibGU7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkKHN0cmluZyAkZGF0YSk6IFB1YmxpY0tleUNyZWRlbnRpYWwKICAgIHsKICAgICAgICAkdGhpcy0+bG9nZ2VyLT5pbmZvKCdUcnlpbmcgdG8gbG9hZCBkYXRhIGZyb20gYSBzdHJpbmcnLCBbJ2RhdGEnID0+ICRkYXRhXSk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJGpzb24gPSBqc29uX2RlY29kZSgkZGF0YSwgdHJ1ZSk7CgogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmxvYWRBcnJheSgkanNvbik7CiAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlICR0aHJvd2FibGUpIHsKICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+ZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkJywgWwogICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbicgPT4gJHRocm93YWJsZSwKICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIHRocm93ICR0aHJvd2FibGU7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkW10gJHJlc3BvbnNlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gY3JlYXRlUmVzcG9uc2UoYXJyYXkgJHJlc3BvbnNlKTogQXV0aGVudGljYXRvclJlc3BvbnNlCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJHJlc3BvbnNlLCAnY2xpZW50RGF0YUpTT04nLCAnSW52YWxpZCBkYXRhLiBUaGUgcGFyYW1ldGVyICJjbGllbnREYXRhSlNPTiIgaXMgbWlzc2luZycpOwogICAgICAgIEFzc2VydGlvbjo6c3RyaW5nKCRyZXNwb25zZVsnY2xpZW50RGF0YUpTT04nXSwgJ0ludmFsaWQgZGF0YS4gVGhlIHBhcmFtZXRlciAiY2xpZW50RGF0YUpTT04iIGlzIGludmFsaWQnKTsKICAgICAgICBzd2l0Y2ggKHRydWUpIHsKICAgICAgICAgICAgY2FzZSBhcnJheV9rZXlfZXhpc3RzKCdhdHRlc3RhdGlvbk9iamVjdCcsICRyZXNwb25zZSk6CiAgICAgICAgICAgICAgICBBc3NlcnRpb246OnN0cmluZygkcmVzcG9uc2VbJ2F0dGVzdGF0aW9uT2JqZWN0J10sICdJbnZhbGlkIGRhdGEuIFRoZSBwYXJhbWV0ZXIgImF0dGVzdGF0aW9uT2JqZWN0ICAgIiBpcyBpbnZhbGlkJyk7CiAgICAgICAgICAgICAgICAkYXR0ZXN0YXRpb25PYmplY3QgPSAkdGhpcy0+YXR0ZXN0YXRpb25PYmplY3RMb2FkZXItPmxvYWQoJHJlc3BvbnNlWydhdHRlc3RhdGlvbk9iamVjdCddKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlKENvbGxlY3RlZENsaWVudERhdGE6OmNyZWF0ZUZvcm1Kc29uKCRyZXNwb25zZVsnY2xpZW50RGF0YUpTT04nXSksICRhdHRlc3RhdGlvbk9iamVjdCk7CiAgICAgICAgICAgIGNhc2UgYXJyYXlfa2V5X2V4aXN0cygnYXV0aGVudGljYXRvckRhdGEnLCAkcmVzcG9uc2UpICYmIGFycmF5X2tleV9leGlzdHMoJ3NpZ25hdHVyZScsICRyZXNwb25zZSk6CiAgICAgICAgICAgICAgICAkYXV0aERhdGEgPSBCYXNlNjRVcmw6OmRlY29kZSgkcmVzcG9uc2VbJ2F1dGhlbnRpY2F0b3JEYXRhJ10pOwoKICAgICAgICAgICAgICAgICRhdXRoRGF0YVN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0oJGF1dGhEYXRhKTsKICAgICAgICAgICAgICAgICRycF9pZF9oYXNoID0gJGF1dGhEYXRhU3RyZWFtLT5yZWFkKDMyKTsKICAgICAgICAgICAgICAgICRmbGFncyA9ICRhdXRoRGF0YVN0cmVhbS0+cmVhZCgxKTsKICAgICAgICAgICAgICAgICRzaWduQ291bnQgPSAkYXV0aERhdGFTdHJlYW0tPnJlYWQoNCk7CiAgICAgICAgICAgICAgICAkc2lnbkNvdW50ID0gdW5wYWNrKCdOJywgJHNpZ25Db3VudClbMV07CgogICAgICAgICAgICAgICAgJGF0dGVzdGVkQ3JlZGVudGlhbERhdGEgPSBudWxsOwogICAgICAgICAgICAgICAgaWYgKDAgIT09IChvcmQoJGZsYWdzKSAmIHNlbGY6OkZMQUdfQVQpKSB7CiAgICAgICAgICAgICAgICAgICAgJGFhZ3VpZCA9IFV1aWQ6OmZyb21CeXRlcygkYXV0aERhdGFTdHJlYW0tPnJlYWQoMTYpKTsKICAgICAgICAgICAgICAgICAgICAkY3JlZGVudGlhbExlbmd0aCA9ICRhdXRoRGF0YVN0cmVhbS0+cmVhZCgyKTsKICAgICAgICAgICAgICAgICAgICAkY3JlZGVudGlhbExlbmd0aCA9IHVucGFjaygnbicsICRjcmVkZW50aWFsTGVuZ3RoKVsxXTsKICAgICAgICAgICAgICAgICAgICAkY3JlZGVudGlhbElkID0gJGF1dGhEYXRhU3RyZWFtLT5yZWFkKCRjcmVkZW50aWFsTGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAkY3JlZGVudGlhbFB1YmxpY0tleSA9ICR0aGlzLT5kZWNvZGVyLT5kZWNvZGUoJGF1dGhEYXRhU3RyZWFtKTsKICAgICAgICAgICAgICAgICAgICBBc3NlcnRpb246OmlzSW5zdGFuY2VPZigkY3JlZGVudGlhbFB1YmxpY0tleSwgTWFwT2JqZWN0OjpjbGFzcywgJ1RoZSBkYXRhIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBjcmVkZW50aWFsIHB1YmxpYyBrZXkuJyk7CiAgICAgICAgICAgICAgICAgICAgJGF0dGVzdGVkQ3JlZGVudGlhbERhdGEgPSBuZXcgQXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSgkYWFndWlkLCAkY3JlZGVudGlhbElkLCAoc3RyaW5nKSAkY3JlZGVudGlhbFB1YmxpY0tleSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGV4dGVuc2lvbiA9IG51bGw7CiAgICAgICAgICAgICAgICBpZiAoMCAhPT0gKG9yZCgkZmxhZ3MpICYgc2VsZjo6RkxBR19FRCkpIHsKICAgICAgICAgICAgICAgICAgICAkZXh0ZW5zaW9uID0gJHRoaXMtPmRlY29kZXItPmRlY29kZSgkYXV0aERhdGFTdHJlYW0pOwogICAgICAgICAgICAgICAgICAgICRleHRlbnNpb24gPSBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzTG9hZGVyOjpsb2FkKCRleHRlbnNpb24pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCRhdXRoRGF0YVN0cmVhbS0+aXNFT0YoKSwgJ0ludmFsaWQgYXV0aGVudGljYXRpb24gZGF0YS4gUHJlc2VuY2Ugb2YgZXh0cmEgYnl0ZXMuJyk7CiAgICAgICAgICAgICAgICAkYXV0aERhdGFTdHJlYW0tPmNsb3NlKCk7CiAgICAgICAgICAgICAgICAkYXV0aGVudGljYXRvckRhdGEgPSBuZXcgQXV0aGVudGljYXRvckRhdGEoJGF1dGhEYXRhLCAkcnBfaWRfaGFzaCwgJGZsYWdzLCAkc2lnbkNvdW50LCAkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSwgJGV4dGVuc2lvbik7CgogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UoCiAgICAgICAgICAgICAgICAgICAgQ29sbGVjdGVkQ2xpZW50RGF0YTo6Y3JlYXRlRm9ybUpzb24oJHJlc3BvbnNlWydjbGllbnREYXRhSlNPTiddKSwKICAgICAgICAgICAgICAgICAgICAkYXV0aGVudGljYXRvckRhdGEsCiAgICAgICAgICAgICAgICAgICAgQmFzZTY0VXJsOjpkZWNvZGUoJHJlc3BvbnNlWydzaWduYXR1cmUnXSksCiAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlWyd1c2VySGFuZGxlJ10gPz8gbnVsbAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VuYWJsZSB0byBjcmVhdGUgdGhlIHJlc3BvbnNlIG9iamVjdCcpOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/PublicKeyCredentialOptions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEpzb25TZXJpYWxpemFibGU7CnVzZSBXZWJhdXRoblxBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNcQXV0aGVudGljYXRpb25FeHRlbnNpb247CnVzZSBXZWJhdXRoblxBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNcQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzOwoKYWJzdHJhY3QgY2xhc3MgUHVibGljS2V5Q3JlZGVudGlhbE9wdGlvbnMgaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlCnsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRjaGFsbGVuZ2U7CgogICAgLyoqCiAgICAgKiBAdmFyIGludHxudWxsCiAgICAgKi8KICAgIHByb3RlY3RlZCAkdGltZW91dDsKCiAgICAvKioKICAgICAqIEB2YXIgQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzCiAgICAgKi8KICAgIHByb3RlY3RlZCAkZXh0ZW5zaW9uczsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRjaGFsbGVuZ2UsID9pbnQgJHRpbWVvdXQgPSBudWxsLCA/QXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICRleHRlbnNpb25zID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAobnVsbCAhPT0gJHRpbWVvdXQpIHsKICAgICAgICAgICAgQHRyaWdnZXJfZXJyb3IoJ1RoZSBhcmd1bWVudCAidGltZW91dCIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDQuMC4gUGxlYXNlIHVzZSB0aGUgbWV0aG9kICJzZXRUaW1lb3V0Ii4nLCBFX1VTRVJfREVQUkVDQVRFRCk7CiAgICAgICAgfQogICAgICAgIGlmIChudWxsICE9PSAkZXh0ZW5zaW9ucykgewogICAgICAgICAgICBAdHJpZ2dlcl9lcnJvcignVGhlIGFyZ3VtZW50ICJleHRlbnNpb25zIiBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4zIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gNC4wLiBQbGVhc2UgdXNlIHRoZSBtZXRob2QgImFkZEV4dGVuc2lvbiIgb3IgImFkZEV4dGVuc2lvbnMiLicsIEVfVVNFUl9ERVBSRUNBVEVEKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPmNoYWxsZW5nZSA9ICRjaGFsbGVuZ2U7CiAgICAgICAgJHRoaXMtPnNldFRpbWVvdXQoJHRpbWVvdXQpOwogICAgICAgICR0aGlzLT5leHRlbnNpb25zID0gJGV4dGVuc2lvbnMgPz8gbmV3IEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cygpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRUaW1lb3V0KD9pbnQgJHRpbWVvdXQpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPnRpbWVvdXQgPSAkdGltZW91dDsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRFeHRlbnNpb24oQXV0aGVudGljYXRpb25FeHRlbnNpb24gJGV4dGVuc2lvbik6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+ZXh0ZW5zaW9ucy0+YWRkKCRleHRlbnNpb24pOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gQXV0aGVudGljYXRpb25FeHRlbnNpb25bXSAkZXh0ZW5zaW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkRXh0ZW5zaW9ucyhhcnJheSAkZXh0ZW5zaW9ucyk6IHNlbGYKICAgIHsKICAgICAgICBmb3JlYWNoICgkZXh0ZW5zaW9ucyBhcyAkZXh0ZW5zaW9uKSB7CiAgICAgICAgICAgICR0aGlzLT5hZGRFeHRlbnNpb24oJGV4dGVuc2lvbik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldEV4dGVuc2lvbnMoQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICRleHRlbnNpb25zKTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5leHRlbnNpb25zID0gJGV4dGVuc2lvbnM7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2hhbGxlbmdlKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2hhbGxlbmdlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lb3V0KCk6ID9pbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRpbWVvdXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEV4dGVuc2lvbnMoKTogQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5leHRlbnNpb25zOwogICAgfQoKICAgIGFic3RyYWN0IHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVN0cmluZyhzdHJpbmcgJGRhdGEpOiBzZWxmOwoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkW10gJGpzb24KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tQXJyYXkoYXJyYXkgJGpzb24pOiBzZWxmOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/PublicKeyCredentialParameters.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBKc29uU2VyaWFsaXphYmxlOwp1c2UgZnVuY3Rpb24gU2FmZVxqc29uX2RlY29kZTsKCmNsYXNzIFB1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzIGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJHR5cGU7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcml2YXRlICRhbGc7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkdHlwZSwgaW50ICRhbGcpCiAgICB7CiAgICAgICAgJHRoaXMtPnR5cGUgPSAkdHlwZTsKICAgICAgICAkdGhpcy0+YWxnID0gJGFsZzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnR5cGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEFsZygpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmFsZzsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21TdHJpbmcoc3RyaW5nICRkYXRhKTogc2VsZgogICAgewogICAgICAgICRkYXRhID0ganNvbl9kZWNvZGUoJGRhdGEsIHRydWUpOwogICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkZGF0YSwgJ0ludmFsaWQgZGF0YScpOwoKICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlRnJvbUFycmF5KCRkYXRhKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZFtdICRqc29uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUFycmF5KGFycmF5ICRqc29uKTogc2VsZgogICAgewogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRqc29uLCAndHlwZScsICdJbnZhbGlkIGlucHV0LiAidHlwZSIgaXMgbWlzc2luZy4nKTsKICAgICAgICBBc3NlcnRpb246OnN0cmluZygkanNvblsndHlwZSddLCAnSW52YWxpZCBpbnB1dC4gInR5cGUiIGlzIG5vdCBhIHN0cmluZy4nKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkanNvbiwgJ2FsZycsICdJbnZhbGlkIGlucHV0LiAiYWxnIiBpcyBtaXNzaW5nLicpOwogICAgICAgIEFzc2VydGlvbjo6aW50ZWdlcigkanNvblsnYWxnJ10sICdJbnZhbGlkIGlucHV0LiAiYWxnIiBpcyBub3QgYW4gaW50ZWdlci4nKTsKCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKAogICAgICAgICAgICAkanNvblsndHlwZSddLAogICAgICAgICAgICAkanNvblsnYWxnJ10KICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBtaXhlZFtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJ3R5cGUnID0+ICR0aGlzLT50eXBlLAogICAgICAgICAgICAnYWxnJyA9PiAkdGhpcy0+YWxnLAogICAgICAgIF07CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/PublicKeyCredentialRequestOptions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBCYXNlNjRVcmxcQmFzZTY0VXJsOwp1c2UgZnVuY3Rpb24gY291bnQ7CnVzZSBmdW5jdGlvbiBTYWZlXGpzb25fZGVjb2RlOwp1c2UgV2ViYXV0aG5cQXV0aGVudGljYXRpb25FeHRlbnNpb25zXEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0czsKCmNsYXNzIFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyBleHRlbmRzIFB1YmxpY0tleUNyZWRlbnRpYWxPcHRpb25zCnsKICAgIHB1YmxpYyBjb25zdCBVU0VSX1ZFUklGSUNBVElPTl9SRVFVSVJFTUVOVF9SRVFVSVJFRCA9ICdyZXF1aXJlZCc7CiAgICBwdWJsaWMgY29uc3QgVVNFUl9WRVJJRklDQVRJT05fUkVRVUlSRU1FTlRfUFJFRkVSUkVEID0gJ3ByZWZlcnJlZCc7CiAgICBwdWJsaWMgY29uc3QgVVNFUl9WRVJJRklDQVRJT05fUkVRVUlSRU1FTlRfRElTQ09VUkFHRUQgPSAnZGlzY291cmFnZWQnOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRycElkOwoKICAgIC8qKgogICAgICogQHZhciBQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcltdCiAgICAgKi8KICAgIHByaXZhdGUgJGFsbG93Q3JlZGVudGlhbHMgPSBbXTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkdXNlclZlcmlmaWNhdGlvbjsKCiAgICAvKioKICAgICAqIEBwYXJhbSBQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcltdICRhbGxvd0NyZWRlbnRpYWxzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJGNoYWxsZW5nZSwgP2ludCAkdGltZW91dCA9IG51bGwsID9zdHJpbmcgJHJwSWQgPSBudWxsLCBhcnJheSAkYWxsb3dDcmVkZW50aWFscyA9IFtdLCA/c3RyaW5nICR1c2VyVmVyaWZpY2F0aW9uID0gbnVsbCwgP0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyAkZXh0ZW5zaW9ucyA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKDAgIT09IGNvdW50KCRhbGxvd0NyZWRlbnRpYWxzKSkgewogICAgICAgICAgICBAdHJpZ2dlcl9lcnJvcignVGhlIGFyZ3VtZW50ICJhbGxvd0NyZWRlbnRpYWxzIiBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4zIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gNC4wLiBQbGVhc2UgdXNlIHRoZSBtZXRob2QgImFkZEFsbG93ZWRDcmVkZW50aWFscyIgb3IgImFkZEFsbG93ZWRDcmVkZW50aWFsIi4nLCBFX1VTRVJfREVQUkVDQVRFRCk7CiAgICAgICAgfQogICAgICAgIGlmIChudWxsICE9PSAkcnBJZCkgewogICAgICAgICAgICBAdHJpZ2dlcl9lcnJvcignVGhlIGFyZ3VtZW50ICJycElkIiBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4zIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gNC4wLiBQbGVhc2UgdXNlIHRoZSBtZXRob2QgInNldFJwSWQiLicsIEVfVVNFUl9ERVBSRUNBVEVEKTsKICAgICAgICB9CiAgICAgICAgaWYgKG51bGwgIT09ICR1c2VyVmVyaWZpY2F0aW9uKSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgInVzZXJWZXJpZmljYXRpb24iIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjMgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiA0LjAuIFBsZWFzZSB1c2UgdGhlIG1ldGhvZCAic2V0VXNlclZlcmlmaWNhdGlvbiIuJywgRV9VU0VSX0RFUFJFQ0FURUQpOwogICAgICAgIH0KICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRjaGFsbGVuZ2UsICR0aW1lb3V0LCAkZXh0ZW5zaW9ucyk7CiAgICAgICAgJHRoaXMKICAgICAgICAgICAgLT5zZXRScElkKCRycElkKQogICAgICAgICAgICAtPmFsbG93Q3JlZGVudGlhbHMoJGFsbG93Q3JlZGVudGlhbHMpCiAgICAgICAgICAgIC0+c2V0VXNlclZlcmlmaWNhdGlvbigkdXNlclZlcmlmaWNhdGlvbikKICAgICAgICA7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoc3RyaW5nICRjaGFsbGVuZ2UpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRjaGFsbGVuZ2UpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRScElkKD9zdHJpbmcgJHJwSWQpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPnJwSWQgPSAkcnBJZDsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhbGxvd0NyZWRlbnRpYWwoUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgJGFsbG93Q3JlZGVudGlhbCk6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+YWxsb3dDcmVkZW50aWFsc1tdID0gJGFsbG93Q3JlZGVudGlhbDsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yW10gJGFsbG93Q3JlZGVudGlhbHMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFsbG93Q3JlZGVudGlhbHMoYXJyYXkgJGFsbG93Q3JlZGVudGlhbHMpOiBzZWxmCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJGFsbG93Q3JlZGVudGlhbHMgYXMgJGFsbG93Q3JlZGVudGlhbCkgewogICAgICAgICAgICAkdGhpcy0+YWxsb3dDcmVkZW50aWFsKCRhbGxvd0NyZWRlbnRpYWwpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRVc2VyVmVyaWZpY2F0aW9uKD9zdHJpbmcgJHVzZXJWZXJpZmljYXRpb24pOiBzZWxmCiAgICB7CiAgICAgICAgaWYgKG51bGwgPT09ICR1c2VyVmVyaWZpY2F0aW9uKSB7CiAgICAgICAgICAgICR0aGlzLT5ycElkID0gbnVsbDsKCiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CiAgICAgICAgQXNzZXJ0aW9uOjppbkFycmF5KCR1c2VyVmVyaWZpY2F0aW9uLCBbCiAgICAgICAgICAgIHNlbGY6OlVTRVJfVkVSSUZJQ0FUSU9OX1JFUVVJUkVNRU5UX1JFUVVJUkVELAogICAgICAgICAgICBzZWxmOjpVU0VSX1ZFUklGSUNBVElPTl9SRVFVSVJFTUVOVF9QUkVGRVJSRUQsCiAgICAgICAgICAgIHNlbGY6OlVTRVJfVkVSSUZJQ0FUSU9OX1JFUVVJUkVNRU5UX0RJU0NPVVJBR0VELAogICAgICAgIF0sICdJbnZhbGlkIHVzZXIgdmVyaWZpY2F0aW9uIHJlcXVpcmVtZW50Jyk7CiAgICAgICAgJHRoaXMtPnVzZXJWZXJpZmljYXRpb24gPSAkdXNlclZlcmlmaWNhdGlvbjsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRScElkKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJwSWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEFsbG93Q3JlZGVudGlhbHMoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmFsbG93Q3JlZGVudGlhbHM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFVzZXJWZXJpZmljYXRpb24oKTogP3N0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dXNlclZlcmlmaWNhdGlvbjsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21TdHJpbmcoc3RyaW5nICRkYXRhKTogUHVibGljS2V5Q3JlZGVudGlhbE9wdGlvbnMKICAgIHsKICAgICAgICAkZGF0YSA9IGpzb25fZGVjb2RlKCRkYXRhLCB0cnVlKTsKICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJGRhdGEsICdJbnZhbGlkIGRhdGEnKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZUZyb21BcnJheSgkZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkanNvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21BcnJheShhcnJheSAkanNvbik6IFB1YmxpY0tleUNyZWRlbnRpYWxPcHRpb25zCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGpzb24sICdjaGFsbGVuZ2UnLCAnSW52YWxpZCBpbnB1dC4gImNoYWxsZW5nZSIgaXMgbWlzc2luZy4nKTsKCiAgICAgICAgJGFsbG93Q3JlZGVudGlhbHMgPSBbXTsKICAgICAgICAkYWxsb3dDcmVkZW50aWFsTGlzdCA9ICRqc29uWydhbGxvd0NyZWRlbnRpYWxzJ10gPz8gW107CiAgICAgICAgZm9yZWFjaCAoJGFsbG93Q3JlZGVudGlhbExpc3QgYXMgJGFsbG93Q3JlZGVudGlhbCkgewogICAgICAgICAgICAkYWxsb3dDcmVkZW50aWFsc1tdID0gUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I6OmNyZWF0ZUZyb21BcnJheSgkYWxsb3dDcmVkZW50aWFsKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBzZWxmOjpjcmVhdGUoQmFzZTY0VXJsOjpkZWNvZGUoJGpzb25bJ2NoYWxsZW5nZSddKSkKICAgICAgICAgICAgLT5zZXRScElkKCRqc29uWydycElkJ10gPz8gbnVsbCkKICAgICAgICAgICAgLT5hbGxvd0NyZWRlbnRpYWxzKCRhbGxvd0NyZWRlbnRpYWxzKQogICAgICAgICAgICAtPnNldFVzZXJWZXJpZmljYXRpb24oJGpzb25bJ3VzZXJWZXJpZmljYXRpb24nXSA/PyBudWxsKQogICAgICAgICAgICAtPnNldFRpbWVvdXQoJGpzb25bJ3RpbWVvdXQnXSA/PyBudWxsKQogICAgICAgICAgICAtPnNldEV4dGVuc2lvbnMoaXNzZXQoJGpzb25bJ2V4dGVuc2lvbnMnXSkgPyBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHM6OmNyZWF0ZUZyb21BcnJheSgkanNvblsnZXh0ZW5zaW9ucyddKSA6IG5ldyBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMoKSkKICAgICAgICA7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICAkanNvbiA9IFsKICAgICAgICAgICAgJ2NoYWxsZW5nZScgPT4gQmFzZTY0VXJsOjplbmNvZGUoJHRoaXMtPmNoYWxsZW5nZSksCiAgICAgICAgXTsKCiAgICAgICAgaWYgKG51bGwgIT09ICR0aGlzLT5ycElkKSB7CiAgICAgICAgICAgICRqc29uWydycElkJ10gPSAkdGhpcy0+cnBJZDsKICAgICAgICB9CgogICAgICAgIGlmIChudWxsICE9PSAkdGhpcy0+dXNlclZlcmlmaWNhdGlvbikgewogICAgICAgICAgICAkanNvblsndXNlclZlcmlmaWNhdGlvbiddID0gJHRoaXMtPnVzZXJWZXJpZmljYXRpb247CiAgICAgICAgfQoKICAgICAgICBpZiAoMCAhPT0gY291bnQoJHRoaXMtPmFsbG93Q3JlZGVudGlhbHMpKSB7CiAgICAgICAgICAgICRqc29uWydhbGxvd0NyZWRlbnRpYWxzJ10gPSBhcnJheV9tYXAoc3RhdGljIGZ1bmN0aW9uIChQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciAkb2JqZWN0KTogYXJyYXkgewogICAgICAgICAgICAgICAgcmV0dXJuICRvYmplY3QtPmpzb25TZXJpYWxpemUoKTsKICAgICAgICAgICAgfSwgJHRoaXMtPmFsbG93Q3JlZGVudGlhbHMpOwogICAgICAgIH0KCiAgICAgICAgaWYgKDAgIT09ICR0aGlzLT5leHRlbnNpb25zLT5jb3VudCgpKSB7CiAgICAgICAgICAgICRqc29uWydleHRlbnNpb25zJ10gPSAkdGhpcy0+ZXh0ZW5zaW9ucy0+anNvblNlcmlhbGl6ZSgpOwogICAgICAgIH0KCiAgICAgICAgaWYgKG51bGwgIT09ICR0aGlzLT50aW1lb3V0KSB7CiAgICAgICAgICAgICRqc29uWyd0aW1lb3V0J10gPSAkdGhpcy0+dGltZW91dDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkanNvbjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/PublicKeyCredentialRpEntity.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CgpjbGFzcyBQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkgZXh0ZW5kcyBQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5CnsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcm90ZWN0ZWQgJGlkOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJG5hbWUsID9zdHJpbmcgJGlkID0gbnVsbCwgP3N0cmluZyAkaWNvbiA9IG51bGwpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkbmFtZSwgJGljb24pOwogICAgICAgICR0aGlzLT5pZCA9ICRpZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SWQoKTogP3N0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkanNvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21BcnJheShhcnJheSAkanNvbik6IHNlbGYKICAgIHsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkanNvbiwgJ25hbWUnLCAnSW52YWxpZCBpbnB1dC4gIm5hbWUiIGlzIG1pc3NpbmcuJyk7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigKICAgICAgICAgICAgJGpzb25bJ25hbWUnXSwKICAgICAgICAgICAgJGpzb25bJ2lkJ10gPz8gbnVsbCwKICAgICAgICAgICAgJGpzb25bJ2ljb24nXSA/PyBudWxsCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWRbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgICRqc29uID0gcGFyZW50Ojpqc29uU2VyaWFsaXplKCk7CiAgICAgICAgaWYgKG51bGwgIT09ICR0aGlzLT5pZCkgewogICAgICAgICAgICAkanNvblsnaWQnXSA9ICR0aGlzLT5pZDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkanNvbjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/PublicKeyCredentialSource.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBCYXNlNjRVcmxcQmFzZTY0VXJsOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgSnNvblNlcmlhbGl6YWJsZTsKdXNlIFJhbXNleVxVdWlkXFV1aWQ7CnVzZSBSYW1zZXlcVXVpZFxVdWlkSW50ZXJmYWNlOwp1c2UgZnVuY3Rpb24gU2FmZVxiYXNlNjRfZGVjb2RlOwp1c2UgZnVuY3Rpb24gU2FmZVxzcHJpbnRmOwp1c2UgVGhyb3dhYmxlOwp1c2UgV2ViYXV0aG5cVHJ1c3RQYXRoXFRydXN0UGF0aDsKdXNlIFdlYmF1dGhuXFRydXN0UGF0aFxUcnVzdFBhdGhMb2FkZXI7CgovKioKICogQHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvd2ViYXV0aG4vI2lmYWNlLXBrY3JlZGVudGlhbAogKi8KY2xhc3MgUHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZSBpbXBsZW1lbnRzIEpzb25TZXJpYWxpemFibGUKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJHB1YmxpY0tleUNyZWRlbnRpYWxJZDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkdHlwZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nW10KICAgICAqLwogICAgcHJvdGVjdGVkICR0cmFuc3BvcnRzOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRhdHRlc3RhdGlvblR5cGU7CgogICAgLyoqCiAgICAgKiBAdmFyIFRydXN0UGF0aAogICAgICovCiAgICBwcm90ZWN0ZWQgJHRydXN0UGF0aDsKCiAgICAvKioKICAgICAqIEB2YXIgVXVpZEludGVyZmFjZQogICAgICovCiAgICBwcm90ZWN0ZWQgJGFhZ3VpZDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkY3JlZGVudGlhbFB1YmxpY0tleTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkdXNlckhhbmRsZTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByb3RlY3RlZCAkY291bnRlcjsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXl8bnVsbAogICAgICovCiAgICBwcm90ZWN0ZWQgJG90aGVyVUk7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nW10gJHRyYW5zcG9ydHMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkcHVibGljS2V5Q3JlZGVudGlhbElkLCBzdHJpbmcgJHR5cGUsIGFycmF5ICR0cmFuc3BvcnRzLCBzdHJpbmcgJGF0dGVzdGF0aW9uVHlwZSwgVHJ1c3RQYXRoICR0cnVzdFBhdGgsIFV1aWRJbnRlcmZhY2UgJGFhZ3VpZCwgc3RyaW5nICRjcmVkZW50aWFsUHVibGljS2V5LCBzdHJpbmcgJHVzZXJIYW5kbGUsIGludCAkY291bnRlciwgP2FycmF5ICRvdGhlclVJID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+cHVibGljS2V5Q3JlZGVudGlhbElkID0gJHB1YmxpY0tleUNyZWRlbnRpYWxJZDsKICAgICAgICAkdGhpcy0+dHlwZSA9ICR0eXBlOwogICAgICAgICR0aGlzLT50cmFuc3BvcnRzID0gJHRyYW5zcG9ydHM7CiAgICAgICAgJHRoaXMtPmFhZ3VpZCA9ICRhYWd1aWQ7CiAgICAgICAgJHRoaXMtPmNyZWRlbnRpYWxQdWJsaWNLZXkgPSAkY3JlZGVudGlhbFB1YmxpY0tleTsKICAgICAgICAkdGhpcy0+dXNlckhhbmRsZSA9ICR1c2VySGFuZGxlOwogICAgICAgICR0aGlzLT5jb3VudGVyID0gJGNvdW50ZXI7CiAgICAgICAgJHRoaXMtPmF0dGVzdGF0aW9uVHlwZSA9ICRhdHRlc3RhdGlvblR5cGU7CiAgICAgICAgJHRoaXMtPnRydXN0UGF0aCA9ICR0cnVzdFBhdGg7CiAgICAgICAgJHRoaXMtPm90aGVyVUkgPSAkb3RoZXJVSTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UHVibGljS2V5Q3JlZGVudGlhbElkKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cHVibGljS2V5Q3JlZGVudGlhbElkOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcigpOiBQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcgogICAgewogICAgICAgIHJldHVybiBuZXcgUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IoCiAgICAgICAgICAgICR0aGlzLT50eXBlLAogICAgICAgICAgICAkdGhpcy0+cHVibGljS2V5Q3JlZGVudGlhbElkLAogICAgICAgICAgICAkdGhpcy0+dHJhbnNwb3J0cwogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEF0dGVzdGF0aW9uVHlwZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmF0dGVzdGF0aW9uVHlwZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHJ1c3RQYXRoKCk6IFRydXN0UGF0aAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dHJ1c3RQYXRoOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdHRlc3RlZENyZWRlbnRpYWxEYXRhKCk6IEF0dGVzdGVkQ3JlZGVudGlhbERhdGEKICAgIHsKICAgICAgICByZXR1cm4gbmV3IEF0dGVzdGVkQ3JlZGVudGlhbERhdGEoCiAgICAgICAgICAgICR0aGlzLT5hYWd1aWQsCiAgICAgICAgICAgICR0aGlzLT5wdWJsaWNLZXlDcmVkZW50aWFsSWQsCiAgICAgICAgICAgICR0aGlzLT5jcmVkZW50aWFsUHVibGljS2V5CiAgICAgICAgKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnR5cGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUcmFuc3BvcnRzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50cmFuc3BvcnRzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBYWd1aWQoKTogVXVpZEludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YWFndWlkOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDcmVkZW50aWFsUHVibGljS2V5KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y3JlZGVudGlhbFB1YmxpY0tleTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VXNlckhhbmRsZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnVzZXJIYW5kbGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvdW50ZXIoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jb3VudGVyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDb3VudGVyKGludCAkY291bnRlcik6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+Y291bnRlciA9ICRjb3VudGVyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPdGhlclVJKCk6ID9hcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+b3RoZXJVSTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0T3RoZXJVSSg/YXJyYXkgJG90aGVyVUkpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPm90aGVyVUkgPSAkb3RoZXJVSTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkW10gJGRhdGEKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tQXJyYXkoYXJyYXkgJGRhdGEpOiBzZWxmCiAgICB7CiAgICAgICAgJGtleXMgPSBhcnJheV9rZXlzKGdldF9jbGFzc192YXJzKHNlbGY6OmNsYXNzKSk7CiAgICAgICAgZm9yZWFjaCAoJGtleXMgYXMgJGtleSkgewogICAgICAgICAgICBpZiAoJ290aGVyVUknID09PSAka2V5KSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkZGF0YSwgJGtleSwgc3ByaW50ZignVGhlIHBhcmFtZXRlciAiJXMiIGlzIG1pc3NpbmcnLCAka2V5KSk7CiAgICAgICAgfQogICAgICAgIHN3aXRjaCAodHJ1ZSkgewogICAgICAgICAgICBjYXNlIDM2ID09PSBtYl9zdHJsZW4oJGRhdGFbJ2FhZ3VpZCddLCAnOGJpdCcpOgogICAgICAgICAgICAgICAgJHV1aWQgPSBVdWlkOjpmcm9tU3RyaW5nKCRkYXRhWydhYWd1aWQnXSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDogLy8gS2VwdCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBmb3JtYXQKICAgICAgICAgICAgICAgICRkZWNvZGVkID0gYmFzZTY0X2RlY29kZSgkZGF0YVsnYWFndWlkJ10sIHRydWUpOwogICAgICAgICAgICAgICAgJHV1aWQgPSBVdWlkOjpmcm9tQnl0ZXMoJGRlY29kZWQpOwogICAgICAgIH0KCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBzZWxmKAogICAgICAgICAgICAgICAgQmFzZTY0VXJsOjpkZWNvZGUoJGRhdGFbJ3B1YmxpY0tleUNyZWRlbnRpYWxJZCddKSwKICAgICAgICAgICAgICAgICRkYXRhWyd0eXBlJ10sCiAgICAgICAgICAgICAgICAkZGF0YVsndHJhbnNwb3J0cyddLAogICAgICAgICAgICAgICAgJGRhdGFbJ2F0dGVzdGF0aW9uVHlwZSddLAogICAgICAgICAgICAgICAgVHJ1c3RQYXRoTG9hZGVyOjpsb2FkVHJ1c3RQYXRoKCRkYXRhWyd0cnVzdFBhdGgnXSksCiAgICAgICAgICAgICAgICAkdXVpZCwKICAgICAgICAgICAgICAgIEJhc2U2NFVybDo6ZGVjb2RlKCRkYXRhWydjcmVkZW50aWFsUHVibGljS2V5J10pLAogICAgICAgICAgICAgICAgQmFzZTY0VXJsOjpkZWNvZGUoJGRhdGFbJ3VzZXJIYW5kbGUnXSksCiAgICAgICAgICAgICAgICAkZGF0YVsnY291bnRlciddLAogICAgICAgICAgICAgICAgJGRhdGFbJ290aGVyVUknXSA/PyBudWxsCiAgICAgICAgICAgICk7CiAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlICR0aHJvd2FibGUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5hYmxlIHRvIGxvYWQgdGhlIGRhdGEnLCAkdGhyb3dhYmxlLT5nZXRDb2RlKCksICR0aHJvd2FibGUpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWRbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdwdWJsaWNLZXlDcmVkZW50aWFsSWQnID0+IEJhc2U2NFVybDo6ZW5jb2RlKCR0aGlzLT5wdWJsaWNLZXlDcmVkZW50aWFsSWQpLAogICAgICAgICAgICAndHlwZScgPT4gJHRoaXMtPnR5cGUsCiAgICAgICAgICAgICd0cmFuc3BvcnRzJyA9PiAkdGhpcy0+dHJhbnNwb3J0cywKICAgICAgICAgICAgJ2F0dGVzdGF0aW9uVHlwZScgPT4gJHRoaXMtPmF0dGVzdGF0aW9uVHlwZSwKICAgICAgICAgICAgJ3RydXN0UGF0aCcgPT4gJHRoaXMtPnRydXN0UGF0aC0+anNvblNlcmlhbGl6ZSgpLAogICAgICAgICAgICAnYWFndWlkJyA9PiAkdGhpcy0+YWFndWlkLT50b1N0cmluZygpLAogICAgICAgICAgICAnY3JlZGVudGlhbFB1YmxpY0tleScgPT4gQmFzZTY0VXJsOjplbmNvZGUoJHRoaXMtPmNyZWRlbnRpYWxQdWJsaWNLZXkpLAogICAgICAgICAgICAndXNlckhhbmRsZScgPT4gQmFzZTY0VXJsOjplbmNvZGUoJHRoaXMtPnVzZXJIYW5kbGUpLAogICAgICAgICAgICAnY291bnRlcicgPT4gJHRoaXMtPmNvdW50ZXIsCiAgICAgICAgICAgICdvdGhlclVJJyA9PiAkdGhpcy0+b3RoZXJVSSwKICAgICAgICBdOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/PublicKeyCredentialSourceRepository.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKaW50ZXJmYWNlIFB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2VSZXBvc2l0b3J5CnsKICAgIHB1YmxpYyBmdW5jdGlvbiBmaW5kT25lQnlDcmVkZW50aWFsSWQoc3RyaW5nICRwdWJsaWNLZXlDcmVkZW50aWFsSWQpOiA/UHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZTsKCiAgICAvKioKICAgICAqIEByZXR1cm4gUHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZVtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaW5kQWxsRm9yVXNlckVudGl0eShQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSAkcHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkpOiBhcnJheTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gc2F2ZUNyZWRlbnRpYWxTb3VyY2UoUHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZSAkcHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZSk6IHZvaWQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/PublicKeyCredentialUserEntity.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBmdW5jdGlvbiBTYWZlXGJhc2U2NF9kZWNvZGU7CnVzZSBmdW5jdGlvbiBTYWZlXGpzb25fZGVjb2RlOwoKY2xhc3MgUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgZXh0ZW5kcyBQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5CnsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRpZDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkZGlzcGxheU5hbWU7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkbmFtZSwgc3RyaW5nICRpZCwgc3RyaW5nICRkaXNwbGF5TmFtZSwgP3N0cmluZyAkaWNvbiA9IG51bGwpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkbmFtZSwgJGljb24pOwogICAgICAgIEFzc2VydGlvbjo6bWF4TGVuZ3RoKCRpZCwgNjQsICdVc2VyIElEIG1heCBsZW5ndGggaXMgNjQgYnl0ZXMnLCAnaWQnLCAnOGJpdCcpOwogICAgICAgICR0aGlzLT5pZCA9ICRpZDsKICAgICAgICAkdGhpcy0+ZGlzcGxheU5hbWUgPSAkZGlzcGxheU5hbWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldElkKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aWQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldERpc3BsYXlOYW1lKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGlzcGxheU5hbWU7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tU3RyaW5nKHN0cmluZyAkZGF0YSk6IHNlbGYKICAgIHsKICAgICAgICAkZGF0YSA9IGpzb25fZGVjb2RlKCRkYXRhLCB0cnVlKTsKICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJGRhdGEsICdJbnZhbGlkIGRhdGEnKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZUZyb21BcnJheSgkZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkanNvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21BcnJheShhcnJheSAkanNvbik6IHNlbGYKICAgIHsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkanNvbiwgJ25hbWUnLCAnSW52YWxpZCBpbnB1dC4gIm5hbWUiIGlzIG1pc3NpbmcuJyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGpzb24sICdpZCcsICdJbnZhbGlkIGlucHV0LiAiaWQiIGlzIG1pc3NpbmcuJyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGpzb24sICdkaXNwbGF5TmFtZScsICdJbnZhbGlkIGlucHV0LiAiZGlzcGxheU5hbWUiIGlzIG1pc3NpbmcuJyk7CiAgICAgICAgJGlkID0gYmFzZTY0X2RlY29kZSgkanNvblsnaWQnXSwgdHJ1ZSk7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigKICAgICAgICAgICAgJGpzb25bJ25hbWUnXSwKICAgICAgICAgICAgJGlkLAogICAgICAgICAgICAkanNvblsnZGlzcGxheU5hbWUnXSwKICAgICAgICAgICAgJGpzb25bJ2ljb24nXSA/PyBudWxsCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWRbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgICRqc29uID0gcGFyZW50Ojpqc29uU2VyaWFsaXplKCk7CiAgICAgICAgJGpzb25bJ2lkJ10gPSBiYXNlNjRfZW5jb2RlKCR0aGlzLT5pZCk7CiAgICAgICAgJGpzb25bJ2Rpc3BsYXlOYW1lJ10gPSAkdGhpcy0+ZGlzcGxheU5hbWU7CgogICAgICAgIHJldHVybiAkanNvbjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/Server.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBDb3NlXEFsZ29yaXRobVxBbGdvcml0aG07CnVzZSBDb3NlXEFsZ29yaXRobVxNYW5hZ2VyRmFjdG9yeTsKdXNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxFQ0RTQTsKdXNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxFZERTQTsKdXNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxSU0E7CnVzZSBKb3NlXENvbXBvbmVudFxLZXlNYW5hZ2VtZW50XEpXS0ZhY3Rvcnk7CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcQWxnb3JpdGhtXFJTMjU2Owp1c2UgUHNyXEh0dHBcQ2xpZW50XENsaWVudEludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEZhY3RvcnlJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFNlcnZlclJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcTG9nXExvZ2dlckludGVyZmFjZTsKdXNlIFBzclxMb2dcTnVsbExvZ2dlcjsKdXNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50XEFuZHJvaWRLZXlBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQ7CnVzZSBXZWJhdXRoblxBdHRlc3RhdGlvblN0YXRlbWVudFxBbmRyb2lkU2FmZXR5TmV0QXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0Owp1c2UgV2ViYXV0aG5cQXR0ZXN0YXRpb25TdGF0ZW1lbnRcQXR0ZXN0YXRpb25PYmplY3RMb2FkZXI7CnVzZSBXZWJhdXRoblxBdHRlc3RhdGlvblN0YXRlbWVudFxBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyOwp1c2UgV2ViYXV0aG5cQXR0ZXN0YXRpb25TdGF0ZW1lbnRcRmlkb1UyRkF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydDsKdXNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50XE5vbmVBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQ7CnVzZSBXZWJhdXRoblxBdHRlc3RhdGlvblN0YXRlbWVudFxQYWNrZWRBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQ7CnVzZSBXZWJhdXRoblxBdHRlc3RhdGlvblN0YXRlbWVudFxUUE1BdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQ7CnVzZSBXZWJhdXRoblxBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNcQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzOwp1c2UgV2ViYXV0aG5cQXV0aGVudGljYXRpb25FeHRlbnNpb25zXEV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyOwp1c2UgV2ViYXV0aG5cQ291bnRlclxDb3VudGVyQ2hlY2tlcjsKdXNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZVxNZXRhZGF0YVN0YXRlbWVudFJlcG9zaXRvcnk7CnVzZSBXZWJhdXRoblxUb2tlbkJpbmRpbmdcSWdub3JlVG9rZW5CaW5kaW5nSGFuZGxlcjsKdXNlIFdlYmF1dGhuXFRva2VuQmluZGluZ1xUb2tlbkJpbmRpbmdIYW5kbGVyOwoKY2xhc3MgU2VydmVyCnsKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICR0aW1lb3V0ID0gNjAwMDA7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJGNoYWxsZW5nZVNpemUgPSAzMjsKCiAgICAvKioKICAgICAqIEB2YXIgUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5CiAgICAgKi8KICAgIHByaXZhdGUgJHJwRW50aXR5OwoKICAgIC8qKgogICAgICogQHZhciBNYW5hZ2VyRmFjdG9yeQogICAgICovCiAgICBwcml2YXRlICRjb3NlQWxnb3JpdGhtTWFuYWdlckZhY3Rvcnk7CgogICAgLyoqCiAgICAgKiBAdmFyIFB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2VSZXBvc2l0b3J5CiAgICAgKi8KICAgIHByaXZhdGUgJHB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2VSZXBvc2l0b3J5OwoKICAgIC8qKgogICAgICogQHZhciBUb2tlbkJpbmRpbmdIYW5kbGVyCiAgICAgKi8KICAgIHByaXZhdGUgJHRva2VuQmluZGluZ0hhbmRsZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIEV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyCiAgICAgKi8KICAgIHByaXZhdGUgJGV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmdbXQogICAgICovCiAgICBwcml2YXRlICRzZWxlY3RlZEFsZ29yaXRobXM7CgogICAgLyoqCiAgICAgKiBAdmFyIE1ldGFkYXRhU3RhdGVtZW50UmVwb3NpdG9yeXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJG1ldGFkYXRhU3RhdGVtZW50UmVwb3NpdG9yeTsKCiAgICAvKioKICAgICAqIEB2YXIgQ2xpZW50SW50ZXJmYWNlfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkaHR0cENsaWVudDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkZ29vZ2xlQXBpS2V5OwoKICAgIC8qKgogICAgICogQHZhciBSZXF1ZXN0RmFjdG9yeUludGVyZmFjZXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJHJlcXVlc3RGYWN0b3J5OwoKICAgIC8qKgogICAgICogQHZhciBDb3VudGVyQ2hlY2tlcnxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGNvdW50ZXJDaGVja2VyOwoKICAgIC8qKgogICAgICogQHZhciBMb2dnZXJJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkbG9nZ2VyOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmdbXQogICAgICovCiAgICBwcml2YXRlICRzZWN1cmVkUmVseWluZ1BhcnR5SWQgPSBbXTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5ICRyZWx5aW5nUGFydHksIFB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2VSZXBvc2l0b3J5ICRwdWJsaWNLZXlDcmVkZW50aWFsU291cmNlUmVwb3NpdG9yeSwgP01ldGFkYXRhU3RhdGVtZW50UmVwb3NpdG9yeSAkbWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5ID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAobnVsbCAhPT0gJG1ldGFkYXRhU3RhdGVtZW50UmVwb3NpdG9yeSkgewogICAgICAgICAgICBAdHJpZ2dlcl9lcnJvcignVGhlIGFyZ3VtZW50ICJtZXRhZGF0YVN0YXRlbWVudFJlcG9zaXRvcnkiIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjMgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiA0LjAuIFBsZWFzZSB1c2UgdGhlIG1ldGhvZCAic2V0TWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5Ii4nLCBFX1VTRVJfREVQUkVDQVRFRCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5ycEVudGl0eSA9ICRyZWx5aW5nUGFydHk7CiAgICAgICAgJHRoaXMtPmxvZ2dlciA9IG5ldyBOdWxsTG9nZ2VyKCk7CgogICAgICAgICR0aGlzLT5jb3NlQWxnb3JpdGhtTWFuYWdlckZhY3RvcnkgPSBuZXcgTWFuYWdlckZhY3RvcnkoKTsKICAgICAgICAkdGhpcy0+Y29zZUFsZ29yaXRobU1hbmFnZXJGYWN0b3J5LT5hZGQoJ1JTMScsIG5ldyBSU0FcUlMxKCkpOwogICAgICAgICR0aGlzLT5jb3NlQWxnb3JpdGhtTWFuYWdlckZhY3RvcnktPmFkZCgnUlMyNTYnLCBuZXcgUlNBXFJTMjU2KCkpOwogICAgICAgICR0aGlzLT5jb3NlQWxnb3JpdGhtTWFuYWdlckZhY3RvcnktPmFkZCgnUlMzODQnLCBuZXcgUlNBXFJTMzg0KCkpOwogICAgICAgICR0aGlzLT5jb3NlQWxnb3JpdGhtTWFuYWdlckZhY3RvcnktPmFkZCgnUlM1MTInLCBuZXcgUlNBXFJTNTEyKCkpOwogICAgICAgICR0aGlzLT5jb3NlQWxnb3JpdGhtTWFuYWdlckZhY3RvcnktPmFkZCgnUFMyNTYnLCBuZXcgUlNBXFBTMjU2KCkpOwogICAgICAgICR0aGlzLT5jb3NlQWxnb3JpdGhtTWFuYWdlckZhY3RvcnktPmFkZCgnUFMzODQnLCBuZXcgUlNBXFBTMzg0KCkpOwogICAgICAgICR0aGlzLT5jb3NlQWxnb3JpdGhtTWFuYWdlckZhY3RvcnktPmFkZCgnUFM1MTInLCBuZXcgUlNBXFBTNTEyKCkpOwogICAgICAgICR0aGlzLT5jb3NlQWxnb3JpdGhtTWFuYWdlckZhY3RvcnktPmFkZCgnRVMyNTYnLCBuZXcgRUNEU0FcRVMyNTYoKSk7CiAgICAgICAgJHRoaXMtPmNvc2VBbGdvcml0aG1NYW5hZ2VyRmFjdG9yeS0+YWRkKCdFUzI1NksnLCBuZXcgRUNEU0FcRVMyNTZLKCkpOwogICAgICAgICR0aGlzLT5jb3NlQWxnb3JpdGhtTWFuYWdlckZhY3RvcnktPmFkZCgnRVMzODQnLCBuZXcgRUNEU0FcRVMzODQoKSk7CiAgICAgICAgJHRoaXMtPmNvc2VBbGdvcml0aG1NYW5hZ2VyRmFjdG9yeS0+YWRkKCdFUzUxMicsIG5ldyBFQ0RTQVxFUzUxMigpKTsKICAgICAgICAkdGhpcy0+Y29zZUFsZ29yaXRobU1hbmFnZXJGYWN0b3J5LT5hZGQoJ0VkMjU1MTknLCBuZXcgRWREU0FcRWQyNTUxOSgpKTsKCiAgICAgICAgJHRoaXMtPnNlbGVjdGVkQWxnb3JpdGhtcyA9IFsnUlMyNTYnLCAnUlM1MTInLCAnUFMyNTYnLCAnUFM1MTInLCAnRVMyNTYnLCAnRVM1MTInLCAnRWQyNTUxOSddOwogICAgICAgICR0aGlzLT5wdWJsaWNLZXlDcmVkZW50aWFsU291cmNlUmVwb3NpdG9yeSA9ICRwdWJsaWNLZXlDcmVkZW50aWFsU291cmNlUmVwb3NpdG9yeTsKICAgICAgICAkdGhpcy0+dG9rZW5CaW5kaW5nSGFuZGxlciA9IG5ldyBJZ25vcmVUb2tlbkJpbmRpbmdIYW5kbGVyKCk7CiAgICAgICAgJHRoaXMtPmV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyID0gbmV3IEV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyKCk7CiAgICAgICAgJHRoaXMtPm1ldGFkYXRhU3RhdGVtZW50UmVwb3NpdG9yeSA9ICRtZXRhZGF0YVN0YXRlbWVudFJlcG9zaXRvcnk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldE1ldGFkYXRhU3RhdGVtZW50UmVwb3NpdG9yeShNZXRhZGF0YVN0YXRlbWVudFJlcG9zaXRvcnkgJG1ldGFkYXRhU3RhdGVtZW50UmVwb3NpdG9yeSk6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+bWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5ID0gJG1ldGFkYXRhU3RhdGVtZW50UmVwb3NpdG9yeTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZ1tdICRzZWxlY3RlZEFsZ29yaXRobXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFNlbGVjdGVkQWxnb3JpdGhtcyhhcnJheSAkc2VsZWN0ZWRBbGdvcml0aG1zKTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5zZWxlY3RlZEFsZ29yaXRobXMgPSAkc2VsZWN0ZWRBbGdvcml0aG1zOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldFRva2VuQmluZGluZ0hhbmRsZXIoVG9rZW5CaW5kaW5nSGFuZGxlciAkdG9rZW5CaW5kaW5nSGFuZGxlcik6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+dG9rZW5CaW5kaW5nSGFuZGxlciA9ICR0b2tlbkJpbmRpbmdIYW5kbGVyOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFkZEFsZ29yaXRobShzdHJpbmcgJGFsaWFzLCBBbGdvcml0aG0gJGFsZ29yaXRobSk6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+Y29zZUFsZ29yaXRobU1hbmFnZXJGYWN0b3J5LT5hZGQoJGFsaWFzLCAkYWxnb3JpdGhtKTsKICAgICAgICAkdGhpcy0+c2VsZWN0ZWRBbGdvcml0aG1zW10gPSAkYWxpYXM7CiAgICAgICAgJHRoaXMtPnNlbGVjdGVkQWxnb3JpdGhtcyA9IGFycmF5X3VuaXF1ZSgkdGhpcy0+c2VsZWN0ZWRBbGdvcml0aG1zKTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRFeHRlbnNpb25PdXRwdXRDaGVja2VySGFuZGxlcihFeHRlbnNpb25PdXRwdXRDaGVja2VySGFuZGxlciAkZXh0ZW5zaW9uT3V0cHV0Q2hlY2tlckhhbmRsZXIpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPmV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyID0gJGV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nW10gJHNlY3VyZWRSZWx5aW5nUGFydHlJZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0U2VjdXJlZFJlbHlpbmdQYXJ0eUlkKGFycmF5ICRzZWN1cmVkUmVseWluZ1BhcnR5SWQpOiBzZWxmCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjphbGxTdHJpbmcoJHNlY3VyZWRSZWx5aW5nUGFydHlJZCwgJ0ludmFsaWQgbGlzdC4gU2hhbGwgYmUgYSBsaXN0IG9mIHN0cmluZ3MnKTsKICAgICAgICAkdGhpcy0+c2VjdXJlZFJlbHlpbmdQYXJ0eUlkID0gJHNlY3VyZWRSZWx5aW5nUGFydHlJZDsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yW10gJGV4Y2x1ZGVkUHVibGljS2V5RGVzY3JpcHRvcnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdlbmVyYXRlUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyhQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSAkdXNlckVudGl0eSwgP3N0cmluZyAkYXR0ZXN0YXRpb25Nb2RlID0gbnVsbCwgYXJyYXkgJGV4Y2x1ZGVkUHVibGljS2V5RGVzY3JpcHRvcnMgPSBbXSwgP0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSAkY3JpdGVyaWEgPSBudWxsLCA/QXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICRleHRlbnNpb25zID0gbnVsbCk6IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMKICAgIHsKICAgICAgICAkY29zZUFsZ29yaXRobU1hbmFnZXIgPSAkdGhpcy0+Y29zZUFsZ29yaXRobU1hbmFnZXJGYWN0b3J5LT5jcmVhdGUoJHRoaXMtPnNlbGVjdGVkQWxnb3JpdGhtcyk7CiAgICAgICAgJHB1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzTGlzdCA9IFtdOwogICAgICAgIGZvcmVhY2ggKCRjb3NlQWxnb3JpdGhtTWFuYWdlci0+YWxsKCkgYXMgJGFsZ29yaXRobSkgewogICAgICAgICAgICAkcHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnNMaXN0W10gPSBuZXcgUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMoCiAgICAgICAgICAgICAgICBQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcjo6Q1JFREVOVElBTF9UWVBFX1BVQkxJQ19LRVksCiAgICAgICAgICAgICAgICAkYWxnb3JpdGhtOjppZGVudGlmaWVyKCkKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJGNyaXRlcmlhID0gJGNyaXRlcmlhID8/IG5ldyBBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEoKTsKICAgICAgICAkZXh0ZW5zaW9ucyA9ICRleHRlbnNpb25zID8/IG5ldyBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMoKTsKICAgICAgICAkY2hhbGxlbmdlID0gcmFuZG9tX2J5dGVzKCR0aGlzLT5jaGFsbGVuZ2VTaXplKTsKCiAgICAgICAgcmV0dXJuIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OmNyZWF0ZSgKICAgICAgICAgICAgICAgICR0aGlzLT5ycEVudGl0eSwKICAgICAgICAgICAgICAgICR1c2VyRW50aXR5LAogICAgICAgICAgICAgICAgJGNoYWxsZW5nZSwKICAgICAgICAgICAgICAgICRwdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVyc0xpc3QKICAgICAgICAgICAgKQogICAgICAgICAgICAtPmV4Y2x1ZGVDcmVkZW50aWFscygkZXhjbHVkZWRQdWJsaWNLZXlEZXNjcmlwdG9ycykKICAgICAgICAgICAgLT5zZXRBdXRoZW50aWNhdG9yU2VsZWN0aW9uKCRjcml0ZXJpYSkKICAgICAgICAgICAgLT5zZXRBdHRlc3RhdGlvbigkYXR0ZXN0YXRpb25Nb2RlID8/IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkFUVEVTVEFUSU9OX0NPTlZFWUFOQ0VfUFJFRkVSRU5DRV9OT05FKQogICAgICAgICAgICAtPnNldEV4dGVuc2lvbnMoJGV4dGVuc2lvbnMpCiAgICAgICAgICAgIC0+c2V0VGltZW91dCgkdGhpcy0+dGltZW91dCkKICAgICAgICA7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3JbXSAkYWxsb3dlZFB1YmxpY0tleURlc2NyaXB0b3JzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZW5lcmF0ZVB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyg/c3RyaW5nICR1c2VyVmVyaWZpY2F0aW9uID0gbnVsbCwgYXJyYXkgJGFsbG93ZWRQdWJsaWNLZXlEZXNjcmlwdG9ycyA9IFtdLCA/QXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICRleHRlbnNpb25zID0gbnVsbCk6IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucwogICAgewogICAgICAgIHJldHVybiBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM6OmNyZWF0ZShyYW5kb21fYnl0ZXMoJHRoaXMtPmNoYWxsZW5nZVNpemUpKQogICAgICAgICAgICAtPnNldFJwSWQoJHRoaXMtPnJwRW50aXR5LT5nZXRJZCgpKQogICAgICAgICAgICAtPnNldFVzZXJWZXJpZmljYXRpb24oJHVzZXJWZXJpZmljYXRpb24gPz8gUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zOjpVU0VSX1ZFUklGSUNBVElPTl9SRVFVSVJFTUVOVF9QUkVGRVJSRUQpCiAgICAgICAgICAgIC0+YWxsb3dDcmVkZW50aWFscygkYWxsb3dlZFB1YmxpY0tleURlc2NyaXB0b3JzKQogICAgICAgICAgICAtPnNldFRpbWVvdXQoJHRoaXMtPnRpbWVvdXQpCiAgICAgICAgICAgIC0+c2V0RXh0ZW5zaW9ucygkZXh0ZW5zaW9ucyA/PyBuZXcgQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzKCkpCiAgICAgICAgOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkQW5kQ2hlY2tBdHRlc3RhdGlvblJlc3BvbnNlKHN0cmluZyAkZGF0YSwgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyAkcHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucywgU2VydmVyUmVxdWVzdEludGVyZmFjZSAkc2VydmVyUmVxdWVzdCk6IFB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2UKICAgIHsKICAgICAgICAkYXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0TWFuYWdlciA9ICR0aGlzLT5nZXRBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyKCk7CiAgICAgICAgJGF0dGVzdGF0aW9uT2JqZWN0TG9hZGVyID0gQXR0ZXN0YXRpb25PYmplY3RMb2FkZXI6OmNyZWF0ZSgkYXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0TWFuYWdlcikKICAgICAgICAgICAgLT5zZXRMb2dnZXIoJHRoaXMtPmxvZ2dlcikKICAgICAgICA7CiAgICAgICAgJHB1YmxpY0tleUNyZWRlbnRpYWxMb2FkZXIgPSBQdWJsaWNLZXlDcmVkZW50aWFsTG9hZGVyOjpjcmVhdGUoJGF0dGVzdGF0aW9uT2JqZWN0TG9hZGVyKQogICAgICAgICAgICAtPnNldExvZ2dlcigkdGhpcy0+bG9nZ2VyKQogICAgICAgIDsKCiAgICAgICAgJHB1YmxpY0tleUNyZWRlbnRpYWwgPSAkcHVibGljS2V5Q3JlZGVudGlhbExvYWRlci0+bG9hZCgkZGF0YSk7CiAgICAgICAgJGF1dGhlbnRpY2F0b3JSZXNwb25zZSA9ICRwdWJsaWNLZXlDcmVkZW50aWFsLT5nZXRSZXNwb25zZSgpOwogICAgICAgIEFzc2VydGlvbjo6aXNJbnN0YW5jZU9mKCRhdXRoZW50aWNhdG9yUmVzcG9uc2UsIEF1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlOjpjbGFzcywgJ05vdCBhbiBhdXRoZW50aWNhdG9yIGF0dGVzdGF0aW9uIHJlc3BvbnNlJyk7CgogICAgICAgICRhdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZVZhbGlkYXRvciA9IG5ldyBBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZVZhbGlkYXRvcigKICAgICAgICAgICAgJGF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydE1hbmFnZXIsCiAgICAgICAgICAgICR0aGlzLT5wdWJsaWNLZXlDcmVkZW50aWFsU291cmNlUmVwb3NpdG9yeSwKICAgICAgICAgICAgJHRoaXMtPnRva2VuQmluZGluZ0hhbmRsZXIsCiAgICAgICAgICAgICR0aGlzLT5leHRlbnNpb25PdXRwdXRDaGVja2VySGFuZGxlciwKICAgICAgICAgICAgJHRoaXMtPm1ldGFkYXRhU3RhdGVtZW50UmVwb3NpdG9yeQogICAgICAgICk7CiAgICAgICAgJGF1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlVmFsaWRhdG9yLT5zZXRMb2dnZXIoJHRoaXMtPmxvZ2dlcik7CgogICAgICAgIHJldHVybiAkYXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2VWYWxpZGF0b3ItPmNoZWNrKCRhdXRoZW50aWNhdG9yUmVzcG9uc2UsICRwdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLCAkc2VydmVyUmVxdWVzdCwgJHRoaXMtPnNlY3VyZWRSZWx5aW5nUGFydHlJZCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGxvYWRBbmRDaGVja0Fzc2VydGlvblJlc3BvbnNlKHN0cmluZyAkZGF0YSwgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zICRwdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMsID9QdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSAkdXNlckVudGl0eSwgU2VydmVyUmVxdWVzdEludGVyZmFjZSAkc2VydmVyUmVxdWVzdCk6IFB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2UKICAgIHsKICAgICAgICAkYXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0TWFuYWdlciA9ICR0aGlzLT5nZXRBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyKCk7CiAgICAgICAgJGF0dGVzdGF0aW9uT2JqZWN0TG9hZGVyID0gQXR0ZXN0YXRpb25PYmplY3RMb2FkZXI6OmNyZWF0ZSgkYXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0TWFuYWdlcikKICAgICAgICAgICAgLT5zZXRMb2dnZXIoJHRoaXMtPmxvZ2dlcikKICAgICAgICA7CiAgICAgICAgJHB1YmxpY0tleUNyZWRlbnRpYWxMb2FkZXIgPSBQdWJsaWNLZXlDcmVkZW50aWFsTG9hZGVyOjpjcmVhdGUoJGF0dGVzdGF0aW9uT2JqZWN0TG9hZGVyKQogICAgICAgICAgICAtPnNldExvZ2dlcigkdGhpcy0+bG9nZ2VyKQogICAgICAgIDsKCiAgICAgICAgJHB1YmxpY0tleUNyZWRlbnRpYWwgPSAkcHVibGljS2V5Q3JlZGVudGlhbExvYWRlci0+bG9hZCgkZGF0YSk7CiAgICAgICAgJGF1dGhlbnRpY2F0b3JSZXNwb25zZSA9ICRwdWJsaWNLZXlDcmVkZW50aWFsLT5nZXRSZXNwb25zZSgpOwogICAgICAgIEFzc2VydGlvbjo6aXNJbnN0YW5jZU9mKCRhdXRoZW50aWNhdG9yUmVzcG9uc2UsIEF1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZTo6Y2xhc3MsICdOb3QgYW4gYXV0aGVudGljYXRvciBhc3NlcnRpb24gcmVzcG9uc2UnKTsKCiAgICAgICAgJGF1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZVZhbGlkYXRvciA9IG5ldyBBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2VWYWxpZGF0b3IoCiAgICAgICAgICAgICR0aGlzLT5wdWJsaWNLZXlDcmVkZW50aWFsU291cmNlUmVwb3NpdG9yeSwKICAgICAgICAgICAgJHRoaXMtPnRva2VuQmluZGluZ0hhbmRsZXIsCiAgICAgICAgICAgICR0aGlzLT5leHRlbnNpb25PdXRwdXRDaGVja2VySGFuZGxlciwKICAgICAgICAgICAgJHRoaXMtPmNvc2VBbGdvcml0aG1NYW5hZ2VyRmFjdG9yeS0+Y3JlYXRlKCR0aGlzLT5zZWxlY3RlZEFsZ29yaXRobXMpLAogICAgICAgICAgICAkdGhpcy0+Y291bnRlckNoZWNrZXIKICAgICAgICApOwogICAgICAgICRhdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2VWYWxpZGF0b3ItPnNldExvZ2dlcigkdGhpcy0+bG9nZ2VyKTsKCiAgICAgICAgcmV0dXJuICRhdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2VWYWxpZGF0b3ItPmNoZWNrKAogICAgICAgICAgICAkcHVibGljS2V5Q3JlZGVudGlhbC0+Z2V0UmF3SWQoKSwKICAgICAgICAgICAgJGF1dGhlbnRpY2F0b3JSZXNwb25zZSwKICAgICAgICAgICAgJHB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucywKICAgICAgICAgICAgJHNlcnZlclJlcXVlc3QsCiAgICAgICAgICAgIG51bGwgIT09ICR1c2VyRW50aXR5ID8gJHVzZXJFbnRpdHktPmdldElkKCkgOiBudWxsLAogICAgICAgICAgICAkdGhpcy0+c2VjdXJlZFJlbHlpbmdQYXJ0eUlkCiAgICAgICAgKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Q291bnRlckNoZWNrZXIoQ291bnRlckNoZWNrZXIgJGNvdW50ZXJDaGVja2VyKTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5jb3VudGVyQ2hlY2tlciA9ICRjb3VudGVyQ2hlY2tlcjsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRMb2dnZXIoTG9nZ2VySW50ZXJmYWNlICRsb2dnZXIpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPmxvZ2dlciA9ICRsb2dnZXI7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5mb3JjZUFuZHJvaWRTYWZldHlOZXRWZXJpZmljYXRpb24oQ2xpZW50SW50ZXJmYWNlICRjbGllbnQsIHN0cmluZyAkYXBpS2V5LCBSZXF1ZXN0RmFjdG9yeUludGVyZmFjZSAkcmVxdWVzdEZhY3RvcnkpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPmh0dHBDbGllbnQgPSAkY2xpZW50OwogICAgICAgICR0aGlzLT5nb29nbGVBcGlLZXkgPSAkYXBpS2V5OwogICAgICAgICR0aGlzLT5yZXF1ZXN0RmFjdG9yeSA9ICRyZXF1ZXN0RmFjdG9yeTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0QXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0TWFuYWdlcigpOiBBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyCiAgICB7CiAgICAgICAgJGF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydE1hbmFnZXIgPSBuZXcgQXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0TWFuYWdlcigpOwogICAgICAgICRhdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyLT5hZGQobmV3IE5vbmVBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQoKSk7CiAgICAgICAgJGF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydE1hbmFnZXItPmFkZChuZXcgRmlkb1UyRkF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydCgpKTsKICAgICAgICBpZiAoY2xhc3NfZXhpc3RzKFJTMjU2OjpjbGFzcykgJiYgY2xhc3NfZXhpc3RzKEpXS0ZhY3Rvcnk6OmNsYXNzKSkgewogICAgICAgICAgICAkYW5kcm9pZFNhZmV0eU5ldEF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydCA9IG5ldyBBbmRyb2lkU2FmZXR5TmV0QXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0KCk7CiAgICAgICAgICAgIGlmIChudWxsICE9PSAkdGhpcy0+aHR0cENsaWVudCAmJiBudWxsICE9PSAkdGhpcy0+Z29vZ2xlQXBpS2V5ICYmIG51bGwgIT09ICR0aGlzLT5yZXF1ZXN0RmFjdG9yeSkgewogICAgICAgICAgICAgICAgJGFuZHJvaWRTYWZldHlOZXRBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQKICAgICAgICAgICAgICAgICAgICAtPmVuYWJsZUFwaVZlcmlmaWNhdGlvbigkdGhpcy0+aHR0cENsaWVudCwgJHRoaXMtPmdvb2dsZUFwaUtleSwgJHRoaXMtPnJlcXVlc3RGYWN0b3J5KQogICAgICAgICAgICAgICAgICAgIC0+c2V0TGVld2F5KDIwMDApCiAgICAgICAgICAgICAgICAgICAgLT5zZXRNYXhBZ2UoNjAwMDApCiAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydE1hbmFnZXItPmFkZCgkYW5kcm9pZFNhZmV0eU5ldEF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydCk7CiAgICAgICAgfQogICAgICAgICRhdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyLT5hZGQobmV3IEFuZHJvaWRLZXlBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQoKSk7CiAgICAgICAgJGF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydE1hbmFnZXItPmFkZChuZXcgVFBNQXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0KCkpOwogICAgICAgICRjb3NlQWxnb3JpdGhtTWFuYWdlciA9ICR0aGlzLT5jb3NlQWxnb3JpdGhtTWFuYWdlckZhY3RvcnktPmNyZWF0ZSgkdGhpcy0+c2VsZWN0ZWRBbGdvcml0aG1zKTsKICAgICAgICAkYXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0TWFuYWdlci0+YWRkKG5ldyBQYWNrZWRBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQoJGNvc2VBbGdvcml0aG1NYW5hZ2VyKSk7CgogICAgICAgIHJldHVybiAkYXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0TWFuYWdlcjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/StringStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBDQk9SXFN0cmVhbTsKdXNlIGZ1bmN0aW9uIFNhZmVcZmNsb3NlOwp1c2UgZnVuY3Rpb24gU2FmZVxmb3BlbjsKdXNlIGZ1bmN0aW9uIFNhZmVcZnJlYWQ7CnVzZSBmdW5jdGlvbiBTYWZlXGZ3cml0ZTsKdXNlIGZ1bmN0aW9uIFNhZmVccmV3aW5kOwp1c2UgZnVuY3Rpb24gU2FmZVxzcHJpbnRmOwoKZmluYWwgY2xhc3MgU3RyaW5nU3RyZWFtIGltcGxlbWVudHMgU3RyZWFtCnsKICAgIC8qKgogICAgICogQHZhciByZXNvdXJjZQogICAgICovCiAgICBwcml2YXRlICRkYXRhOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkbGVuZ3RoOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkdG90YWxSZWFkID0gMDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRkYXRhKQogICAgewogICAgICAgICR0aGlzLT5sZW5ndGggPSBtYl9zdHJsZW4oJGRhdGEsICc4Yml0Jyk7CiAgICAgICAgJHJlc291cmNlID0gZm9wZW4oJ3BocDovL21lbW9yeScsICdyYisnKTsKICAgICAgICBmd3JpdGUoJHJlc291cmNlLCAkZGF0YSk7CiAgICAgICAgcmV3aW5kKCRyZXNvdXJjZSk7CiAgICAgICAgJHRoaXMtPmRhdGEgPSAkcmVzb3VyY2U7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlYWQoaW50ICRsZW5ndGgpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoMCA9PT0gJGxlbmd0aCkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQogICAgICAgICRyZWFkID0gZnJlYWQoJHRoaXMtPmRhdGEsICRsZW5ndGgpOwogICAgICAgICRieXRlc1JlYWQgPSBtYl9zdHJsZW4oJHJlYWQsICc4Yml0Jyk7CiAgICAgICAgQXNzZXJ0aW9uOjpsZW5ndGgoJHJlYWQsICRsZW5ndGgsIHNwcmludGYoJ091dCBvZiByYW5nZS4gRXhwZWN0ZWQ6ICVkLCByZWFkOiAlZC4nLCAkbGVuZ3RoLCAkYnl0ZXNSZWFkKSwgbnVsbCwgJzhiaXQnKTsKICAgICAgICAkdGhpcy0+dG90YWxSZWFkICs9ICRieXRlc1JlYWQ7CgogICAgICAgIHJldHVybiAkcmVhZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKTogdm9pZAogICAgewogICAgICAgIGZjbG9zZSgkdGhpcy0+ZGF0YSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzRU9GKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRvdGFsUmVhZCA9PT0gJHRoaXMtPmxlbmd0aDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/TokenBinding/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/TokenBinding/IgnoreTokenBindingHandler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXFRva2VuQmluZGluZzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFNlcnZlclJlcXVlc3RJbnRlcmZhY2U7CgpmaW5hbCBjbGFzcyBJZ25vcmVUb2tlbkJpbmRpbmdIYW5kbGVyIGltcGxlbWVudHMgVG9rZW5CaW5kaW5nSGFuZGxlcgp7CiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2soVG9rZW5CaW5kaW5nICR0b2tlbkJpbmRpbmcsIFNlcnZlclJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QpOiB2b2lkCiAgICB7CiAgICAgICAgLy9Eb2VzIG5vdGhpbmcKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/TokenBinding/SecTokenBindingHandler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXFRva2VuQmluZGluZzsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlOwoKZmluYWwgY2xhc3MgU2VjVG9rZW5CaW5kaW5nSGFuZGxlciBpbXBsZW1lbnRzIFRva2VuQmluZGluZ0hhbmRsZXIKewogICAgcHVibGljIGZ1bmN0aW9uIGNoZWNrKFRva2VuQmluZGluZyAkdG9rZW5CaW5kaW5nLCBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0KTogdm9pZAogICAgewogICAgICAgIGlmIChUb2tlbkJpbmRpbmc6OlRPS0VOX0JJTkRJTkdfU1RBVFVTX1BSRVNFTlQgIT09ICR0b2tlbkJpbmRpbmctPmdldFN0YXR1cygpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIEFzc2VydGlvbjo6dHJ1ZSgkcmVxdWVzdC0+aGFzSGVhZGVyKCdTZWMtVG9rZW4tQmluZGluZycpLCAnVGhlIGhlYWRlciBwYXJhbWV0ZXIgIlNlYy1Ub2tlbi1CaW5kaW5nIiBpcyBtaXNzaW5nLicpOwogICAgICAgICR0b2tlbkJpbmRpbmdJZHMgPSAkcmVxdWVzdC0+Z2V0SGVhZGVyKCdTZWMtVG9rZW4tQmluZGluZycpOwogICAgICAgIEFzc2VydGlvbjo6Y291bnQoJHRva2VuQmluZGluZ0lkcywgMSwgJ1RoZSBoZWFkZXIgcGFyYW1ldGVyICJTZWMtVG9rZW4tQmluZGluZyIgaXMgaW52YWxpZC4nKTsKICAgICAgICAkdG9rZW5CaW5kaW5nSWQgPSByZXNldCgkdG9rZW5CaW5kaW5nSWRzKTsKICAgICAgICBBc3NlcnRpb246OmVxKCR0b2tlbkJpbmRpbmdJZCwgJHRva2VuQmluZGluZy0+Z2V0SWQoKSwgJ1RoZSBoZWFkZXIgcGFyYW1ldGVyICJTZWMtVG9rZW4tQmluZGluZyIgaXMgaW52YWxpZC4nKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/TokenBinding/TokenBinding.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXFRva2VuQmluZGluZzsKCnVzZSBmdW5jdGlvbiBhcnJheV9rZXlfZXhpc3RzOwp1c2UgQXNzZXJ0XEFzc2VydGlvbjsKdXNlIEJhc2U2NFVybFxCYXNlNjRVcmw7CnVzZSBmdW5jdGlvbiBTYWZlXHNwcmludGY7CgpjbGFzcyBUb2tlbkJpbmRpbmcKewogICAgcHVibGljIGNvbnN0IFRPS0VOX0JJTkRJTkdfU1RBVFVTX1BSRVNFTlQgPSAncHJlc2VudCc7CiAgICBwdWJsaWMgY29uc3QgVE9LRU5fQklORElOR19TVEFUVVNfU1VQUE9SVEVEID0gJ3N1cHBvcnRlZCc7CiAgICBwdWJsaWMgY29uc3QgVE9LRU5fQklORElOR19TVEFUVVNfTk9UX1NVUFBPUlRFRCA9ICdub3Qtc3VwcG9ydGVkJzsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJHN0YXR1czsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkaWQ7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkc3RhdHVzLCA/c3RyaW5nICRpZCkKICAgIHsKICAgICAgICBBc3NlcnRpb246OmZhbHNlKHNlbGY6OlRPS0VOX0JJTkRJTkdfU1RBVFVTX1BSRVNFTlQgPT09ICRzdGF0dXMgJiYgbnVsbCA9PT0gJGlkLCAnVGhlIG1lbWJlciAiaWQiIGlzIHJlcXVpcmVkIHdoZW4gc3RhdHVzIGlzICJwcmVzZW50IicpOwogICAgICAgICR0aGlzLT5zdGF0dXMgPSAkc3RhdHVzOwogICAgICAgICR0aGlzLT5pZCA9ICRpZDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZFtdICRqc29uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRm9ybUFycmF5KGFycmF5ICRqc29uKTogc2VsZgogICAgewogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRqc29uLCAnc3RhdHVzJywgJ1RoZSBtZW1iZXIgInN0YXR1cyIgaXMgcmVxdWlyZWQnKTsKICAgICAgICAkc3RhdHVzID0gJGpzb25bJ3N0YXR1cyddOwogICAgICAgIEFzc2VydGlvbjo6aW5BcnJheSgKICAgICAgICAgICAgJHN0YXR1cywKICAgICAgICAgICAgc2VsZjo6Z2V0U3VwcG9ydGVkU3RhdHVzKCksCiAgICAgICAgICAgIHNwcmludGYoJ1RoZSBtZW1iZXIgInN0YXR1cyIgaXMgaW52YWxpZC4gU3VwcG9ydGVkIHZhbHVlcyBhcmU6ICVzJywgaW1wbG9kZSgnLCAnLCBzZWxmOjpnZXRTdXBwb3J0ZWRTdGF0dXMoKSkpCiAgICAgICAgKTsKICAgICAgICAkaWQgPSBhcnJheV9rZXlfZXhpc3RzKCdpZCcsICRqc29uKSA/IEJhc2U2NFVybDo6ZGVjb2RlKCRqc29uWydpZCddKSA6IG51bGw7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkc3RhdHVzLCAkaWQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdGF0dXMoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdGF0dXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldElkKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmlkOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBnZXRTdXBwb3J0ZWRTdGF0dXMoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICBzZWxmOjpUT0tFTl9CSU5ESU5HX1NUQVRVU19QUkVTRU5ULAogICAgICAgICAgICBzZWxmOjpUT0tFTl9CSU5ESU5HX1NUQVRVU19TVVBQT1JURUQsCiAgICAgICAgICAgIHNlbGY6OlRPS0VOX0JJTkRJTkdfU1RBVFVTX05PVF9TVVBQT1JURUQsCiAgICAgICAgXTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/TokenBinding/TokenBindingHandler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXFRva2VuQmluZGluZzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFNlcnZlclJlcXVlc3RJbnRlcmZhY2U7CgppbnRlcmZhY2UgVG9rZW5CaW5kaW5nSGFuZGxlcgp7CiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2soVG9rZW5CaW5kaW5nICR0b2tlbkJpbmRpbmcsIFNlcnZlclJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QpOiB2b2lkOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/TokenBinding/TokenBindingNotSupportedHandler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXFRva2VuQmluZGluZzsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlOwoKZmluYWwgY2xhc3MgVG9rZW5CaW5kaW5nTm90U3VwcG9ydGVkSGFuZGxlciBpbXBsZW1lbnRzIFRva2VuQmluZGluZ0hhbmRsZXIKewogICAgcHVibGljIGZ1bmN0aW9uIGNoZWNrKFRva2VuQmluZGluZyAkdG9rZW5CaW5kaW5nLCBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0KTogdm9pZAogICAgewogICAgICAgIEFzc2VydGlvbjo6dHJ1ZShUb2tlbkJpbmRpbmc6OlRPS0VOX0JJTkRJTkdfU1RBVFVTX1BSRVNFTlQgIT09ICR0b2tlbkJpbmRpbmctPmdldFN0YXR1cygpLCAnVG9rZW4gYmluZGluZyBub3Qgc3VwcG9ydGVkLicpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/TrustPath/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/TrustPath/CertificateTrustPath.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXFRydXN0UGF0aDsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwoKZmluYWwgY2xhc3MgQ2VydGlmaWNhdGVUcnVzdFBhdGggaW1wbGVtZW50cyBUcnVzdFBhdGgKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ1tdCiAgICAgKi8KICAgIHByaXZhdGUgJGNlcnRpZmljYXRlczsKCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmdbXSAkY2VydGlmaWNhdGVzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkY2VydGlmaWNhdGVzKQogICAgewogICAgICAgICR0aGlzLT5jZXJ0aWZpY2F0ZXMgPSAkY2VydGlmaWNhdGVzOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2VydGlmaWNhdGVzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jZXJ0aWZpY2F0ZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUFycmF5KGFycmF5ICRkYXRhKTogVHJ1c3RQYXRoCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGRhdGEsICd4NWMnLCAnVGhlIHRydXN0IHBhdGggdHlwZSBpcyBpbnZhbGlkJyk7CgogICAgICAgIHJldHVybiBuZXcgQ2VydGlmaWNhdGVUcnVzdFBhdGgoJGRhdGFbJ3g1YyddKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWRbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICd0eXBlJyA9PiBzZWxmOjpjbGFzcywKICAgICAgICAgICAgJ3g1YycgPT4gJHRoaXMtPmNlcnRpZmljYXRlcywKICAgICAgICBdOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/TrustPath/EcdaaKeyIdTrustPath.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXFRydXN0UGF0aDsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwoKZmluYWwgY2xhc3MgRWNkYWFLZXlJZFRydXN0UGF0aCBpbXBsZW1lbnRzIFRydXN0UGF0aAp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJGVjZGFhS2V5SWQ7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkZWNkYWFLZXlJZCkKICAgIHsKICAgICAgICAkdGhpcy0+ZWNkYWFLZXlJZCA9ICRlY2RhYUtleUlkOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFY2RhYUtleUlkKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZWNkYWFLZXlJZDsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAndHlwZScgPT4gc2VsZjo6Y2xhc3MsCiAgICAgICAgICAgICdlY2RhYUtleUlkJyA9PiAkdGhpcy0+ZWNkYWFLZXlJZCwKICAgICAgICBdOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21BcnJheShhcnJheSAkZGF0YSk6IFRydXN0UGF0aAogICAgewogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRkYXRhLCAnZWNkYWFLZXlJZCcsICdUaGUgdHJ1c3QgcGF0aCB0eXBlIGlzIGludmFsaWQnKTsKCiAgICAgICAgcmV0dXJuIG5ldyBFY2RhYUtleUlkVHJ1c3RQYXRoKCRkYXRhWydlY2RhYUtleUlkJ10pOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/TrustPath/EmptyTrustPath.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXFRydXN0UGF0aDsKCmZpbmFsIGNsYXNzIEVtcHR5VHJ1c3RQYXRoIGltcGxlbWVudHMgVHJ1c3RQYXRoCnsKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICd0eXBlJyA9PiBzZWxmOjpjbGFzcywKICAgICAgICBdOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21BcnJheShhcnJheSAkZGF0YSk6IFRydXN0UGF0aAogICAgewogICAgICAgIHJldHVybiBuZXcgRW1wdHlUcnVzdFBhdGgoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/TrustPath/TrustPath.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXFRydXN0UGF0aDsKCnVzZSBKc29uU2VyaWFsaXphYmxlOwoKaW50ZXJmYWNlIFRydXN0UGF0aCBleHRlbmRzIEpzb25TZXJpYWxpemFibGUKewogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkZGF0YQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21BcnJheShhcnJheSAkZGF0YSk6IHNlbGY7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/TrustPath/TrustPathLoader.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXFRydXN0UGF0aDsKCnVzZSBmdW5jdGlvbiBhcnJheV9rZXlfZXhpc3RzOwp1c2UgQXNzZXJ0XEFzc2VydGlvbjsKdXNlIGZ1bmN0aW9uIGluX2FycmF5Owp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgZnVuY3Rpb24gU2FmZVxjbGFzc19pbXBsZW1lbnRzOwp1c2UgZnVuY3Rpb24gU2FmZVxzcHJpbnRmOwoKYWJzdHJhY3QgY2xhc3MgVHJ1c3RQYXRoTG9hZGVyCnsKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkW10gJGRhdGEKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkVHJ1c3RQYXRoKGFycmF5ICRkYXRhKTogVHJ1c3RQYXRoCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGRhdGEsICd0eXBlJywgJ1RoZSB0cnVzdCBwYXRoIHR5cGUgaXMgbWlzc2luZycpOwogICAgICAgICR0eXBlID0gJGRhdGFbJ3R5cGUnXTsKICAgICAgICAkb2xkVHlwZXMgPSBzZWxmOjpvbGRUcnVzdFBhdGhUeXBlcygpOwogICAgICAgIHN3aXRjaCAodHJ1ZSkgewogICAgICAgICAgICBjYXNlIGFycmF5X2tleV9leGlzdHMoJHR5cGUsICRvbGRUeXBlcyk6CiAgICAgICAgICAgICAgICByZXR1cm4gJG9sZFR5cGVzWyR0eXBlXTo6Y3JlYXRlRnJvbUFycmF5KCRkYXRhKTsKICAgICAgICAgICAgY2FzZSBjbGFzc19leGlzdHMoJHR5cGUpOgogICAgICAgICAgICAgICAgJGltcGxlbWVudHMgPSBjbGFzc19pbXBsZW1lbnRzKCR0eXBlKTsKICAgICAgICAgICAgICAgIGlmIChpbl9hcnJheShUcnVzdFBhdGg6OmNsYXNzLCAkaW1wbGVtZW50cywgdHJ1ZSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHR5cGU6OmNyZWF0ZUZyb21BcnJheSgkZGF0YSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBubyBicmVhawogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihzcHJpbnRmKCdUaGUgdHJ1c3QgcGF0aCB0eXBlICIlcyIgaXMgbm90IHN1cHBvcnRlZCcsICRkYXRhWyd0eXBlJ10pKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIG9sZFRydXN0UGF0aFR5cGVzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJ2VtcHR5JyA9PiBFbXB0eVRydXN0UGF0aDo6Y2xhc3MsCiAgICAgICAgICAgICdlY2RhYV9rZXlfaWQnID0+IEVjZGFhS2V5SWRUcnVzdFBhdGg6OmNsYXNzLAogICAgICAgICAgICAneDVjJyA9PiBDZXJ0aWZpY2F0ZVRydXN0UGF0aDo6Y2xhc3MsCiAgICAgICAgXTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/U2FPublicKey.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBXZWJhdXRobjsKCnVzZSBDQk9SXEJ5dGVTdHJpbmdPYmplY3Q7CnVzZSBDQk9SXE1hcEl0ZW07CnVzZSBDQk9SXE1hcE9iamVjdDsKdXNlIENCT1JcTmVnYXRpdmVJbnRlZ2VyT2JqZWN0Owp1c2UgQ0JPUlxVbnNpZ25lZEludGVnZXJPYmplY3Q7CgpjbGFzcyBVMkZQdWJsaWNLZXkKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc1UyRktleSgkcHVibGljS2V5KTogYm9vbAogICAgewogICAgICAgIHJldHVybiAkcHVibGljS2V5WzBdID09PSAiXHgwNCI7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVDT1NFS2V5KCRwdWJsaWNLZXkpOiBzdHJpbmcKICAgIHsKCiAgICAgICAgJG1hcE9iamVjdCA9IG5ldyBNYXBPYmplY3QoWwogICAgICAgICAgICAxID0+IE1hcEl0ZW06OmNyZWF0ZSgKICAgICAgICAgICAgICAgIG5ldyBVbnNpZ25lZEludGVnZXJPYmplY3QoMSwgbnVsbCksCiAgICAgICAgICAgICAgICBuZXcgVW5zaWduZWRJbnRlZ2VyT2JqZWN0KDIsIG51bGwpCiAgICAgICAgICAgICksCiAgICAgICAgICAgIDMgPT4gTWFwSXRlbTo6Y3JlYXRlKAogICAgICAgICAgICAgICAgbmV3IFVuc2lnbmVkSW50ZWdlck9iamVjdCgzLCBudWxsKSwKICAgICAgICAgICAgICAgIG5ldyBOZWdhdGl2ZUludGVnZXJPYmplY3QoNiwgbnVsbCkKICAgICAgICAgICAgKSwKICAgICAgICAgICAgLTEgPT4gTWFwSXRlbTo6Y3JlYXRlKAogICAgICAgICAgICAgICAgbmV3IE5lZ2F0aXZlSW50ZWdlck9iamVjdCgwLCBudWxsKSwKICAgICAgICAgICAgICAgIG5ldyBVbnNpZ25lZEludGVnZXJPYmplY3QoMSwgbnVsbCkKICAgICAgICAgICAgKSwKICAgICAgICAgICAgLTIgPT4gTWFwSXRlbTo6Y3JlYXRlKAogICAgICAgICAgICAgICAgbmV3IE5lZ2F0aXZlSW50ZWdlck9iamVjdCgxLCBudWxsKSwKICAgICAgICAgICAgICAgIG5ldyBCeXRlU3RyaW5nT2JqZWN0KHN1YnN0cigkcHVibGljS2V5LCAxLCAzMikpCiAgICAgICAgICAgICksCiAgICAgICAgICAgIC0zID0+IE1hcEl0ZW06OmNyZWF0ZSgKICAgICAgICAgICAgICAgIG5ldyBOZWdhdGl2ZUludGVnZXJPYmplY3QoMiwgbnVsbCksCiAgICAgICAgICAgICAgICBuZXcgQnl0ZVN0cmluZ09iamVjdChzdWJzdHIoJHB1YmxpY0tleSwgMzMpKQogICAgICAgICAgICApLAogICAgICAgIF0pOwoKICAgICAgICByZXR1cm4gJG1hcE9iamVjdC0+X190b1N0cmluZygpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/Util/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/Util/CoseSignatureFixer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXFV0aWw7Cgp1c2UgQ29zZVxBbGdvcml0aG1cU2lnbmF0dXJlXEVDRFNBOwp1c2UgQ29zZVxBbGdvcml0aG1cU2lnbmF0dXJlXFNpZ25hdHVyZTsKCi8qKgogKiBUaGlzIGNsYXNzIGZpeGVzIHRoZSBzaWduYXR1cmUgb2YgdGhlIEVDRFNBIGJhc2VkIGFsZ29yaXRobXMuCiAqCiAqIEBpbnRlcm5hbAogKgogKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdXRobi8jc2lnbmF0dXJlLWF0dGVzdGF0aW9uLXR5cGVzCiAqLwphYnN0cmFjdCBjbGFzcyBDb3NlU2lnbmF0dXJlRml4ZXIKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmaXgoc3RyaW5nICRzaWduYXR1cmUsIFNpZ25hdHVyZSAkYWxnb3JpdGhtKTogc3RyaW5nCiAgICB7CiAgICAgICAgc3dpdGNoICgkYWxnb3JpdGhtOjppZGVudGlmaWVyKCkpIHsKICAgICAgICAgICAgY2FzZSBFQ0RTQVxFUzI1Nks6OklEOgogICAgICAgICAgICBjYXNlIEVDRFNBXEVTMjU2OjpJRDoKICAgICAgICAgICAgICAgIGlmICg2NCA9PT0gbWJfc3RybGVuKCRzaWduYXR1cmUsICc4Yml0JykpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHNpZ25hdHVyZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gRUNEU0FcRUNTaWduYXR1cmU6OmZyb21Bc24xKCRzaWduYXR1cmUsIDY0KTsgLy9UT0RPOiBmaXggdGhpcyBoYXJkY29kZWQgdmFsdWUgYnkgYWRkaW5nIGEgZGVkaWNhdGVkIG1ldGhvZCBmb3IgdGhlIGFsZ29yaXRobXMKICAgICAgICAgICAgY2FzZSBFQ0RTQVxFUzM4NDo6SUQ6CiAgICAgICAgICAgICAgICBpZiAoOTYgPT09IG1iX3N0cmxlbigkc2lnbmF0dXJlLCAnOGJpdCcpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRzaWduYXR1cmU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIEVDRFNBXEVDU2lnbmF0dXJlOjpmcm9tQXNuMSgkc2lnbmF0dXJlLCA5Nik7CiAgICAgICAgICAgIGNhc2UgRUNEU0FcRVM1MTI6OklEOgogICAgICAgICAgICAgICAgaWYgKDEzMiA9PT0gbWJfc3RybGVuKCRzaWduYXR1cmUsICc4Yml0JykpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHNpZ25hdHVyZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gRUNEU0FcRUNTaWduYXR1cmU6OmZyb21Bc24xKCRzaWduYXR1cmUsIDEzMik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHNpZ25hdHVyZTsKICAgIH0KfQo=]]></data>
	</file>
</module>
