<?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>Orm</name>
	<version>0.1.1</version>
  <mincmsversion>1.11.0</mincmsversion>
	<help><![CDATA[PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+DQo8cD5tb3JlIGluZm9ybWF0aW9ucyBvbiA6IDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9iZXNzdGlvbGxlL29ybS1tcyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vZ2l0aHViLmNvbS9iZXNzdGlvbGxlL29ybS1tczwvYT48L3A+DQo8aDM+UGFyYW1ldGVyczwvaDM+PHVsPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGxhbmc9ImVuX1VTIiAtIFBhcmFtJmVncmF2ZTt0cmUgdXRpbGlzJmVhY3V0ZTsgcG91ciBzcCZlYWN1dGU7Y2lmaWVyIGRhbnMgcXVlbGxlIGxhbmd1ZSBhZmZpY2hlciBsZSBtb2R1bGUgZGFucyBsYSBwYXJ0aWUgcHVibGlxdWUuIENlIHBhcmFtJmVncmF2ZTt0cmUgbiYjMDM5O2VzdCBwYXMgc3VwcG9ydCZlYWN1dGU7IG91IHV0aWxlIHBvdXIgdG91cyBsZXMgbW9kdWxlcy48L2xpPjwvdWw+]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBLZXZpbiBEYW5lemlzIChha2EgQmVzcykgJmx0O2NvbnRhY3QgYXQgZnVyaWUgcG9pbnQgYmUmZ3Q7PGJyIC8+PGJyIC8+VmVyc2lvbjogMC4xLjE8YnIgLz48YnIgLz5DaGFuZ2UgSGlzdG9yeTo8YnIgLz5zZWUgY2hhbmdlbG9nIDogPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2Jlc3N0aW9sbGUvb3JtLW1zIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9naXRodWIuY29tL2Jlc3N0aW9sbGUvb3JtLW1zPC9hPjxiciAvPg==]]></about>
	<description><![CDATA[This module implements a small ORM layer for other modules]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.admin_save.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImNtc21zIikpIGV4aXQ7DQoNCmlmIChpc3NldCgkcGFyYW1zWydkZWxldGUnXSkpew0KCXVubGluayhPcm1UUkFDRTo6Z2V0TG9nRmlsZSgpKTsNCglPcm1UcmFjZTo6aW5mbygiUmVpbml0aWF0ZSB0aGUgbG9nIGZpbGUiKTsNCn0gZWxzZSBpZiAoaXNzZXQoJHBhcmFtc1snbGV2ZWwnXSkgJiYgJHBhcmFtc1snbGV2ZWwnXSA+PSBPcm1UUkFDRTo6JERFQlVHICYmICRwYXJhbXNbJ2xldmVsJ10gPD0gT3JtVFJBQ0U6OiRFUlJPUil7DQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2xvZ2xldmVsJywgJHBhcmFtc1snbGV2ZWwnXSk7DQp9DQoNCiR0aGlzLT5yZWRpcmVjdCgkaWQsJ2RlZmF1bHRhZG1pbicpOw0KDQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImNtc21zIikpIGV4aXQ7DQoNCiRjdXJyZW50TGV2ZWwgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbG9nbGV2ZWwnKTsNCiRpdGVtcyA9IGFycmF5KCJERUJVRyI9Pk9ybVRSQUNFOjokREVCVUcsICJJTkZPIj0+T3JtVFJBQ0U6OiRJTkZPLCJXQVJOIj0+T3JtVFJBQ0U6OiRXQVJOLCJFUlJPUiI9Pk9ybVRSQUNFOjokRVJST1IpOw0KDQokc21hcnR5ID0gY21zbXMoKS0+R2V0U21hcnR5KCk7DQokc21hcnR5LT5hc3NpZ24oImZvcm1zdGFydCIsJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdhZG1pbl9zYXZlJykpOw0KJHNtYXJ0eS0+YXNzaWduKCJzdWJtaXQiLCR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnc3VibWl0JywgJ1NhdmUgUHJlZnMnKSk7DQokc21hcnR5LT5hc3NpZ24oImRlbGV0ZSIsJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0ICgkaWQsICdkZWxldGUnLCAnQ2xlYW4gTG9ncycpKTsNCiRzbWFydHktPmFzc2lnbigic2VsZWN0IiwgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24gKCRpZCwgJ2xldmVsJywgJGl0ZW1zLCAtMSwgJGN1cnJlbnRMZXZlbCkpOw0KDQokc21hcnR5LT5hc3NpZ24oInVybExvZyIsIE9ybVRSQUNFOjpnZXRMb2dVcmwoKSk7DQoNCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW4udHBsJyk7DQoNCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdTaW1wbGUgT3JtJzsNCiRsYW5nWydwb3N0aW5zdGFsbCddID0gJyc7DQokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ01vZHVsZSB1bmluc3RhbGxlZCwgYnllICEiJzsNCiRsYW5nWydyZWFsbHlfdW5pbnN0YWxsJ10gPSAnUmVhbGx5PyBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gdW5pbnN0YWxsIHRoaXMgZmluZSBtb2R1bGU/JzsNCiRsYW5nWyd1bmluc3RhbGxlZCddID0gJ01vZHVsZSBVbmluc3RhbGxlZC4nOw0KJGxhbmdbJ2luc3RhbGxlZCddID0gJ01vZHVsZSB2ZXJzaW9uICVzIGluc3RhbGxlZC4nOw0KJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhIHNtYWxsIE9STSBsYXllciBmb3Igb3RoZXIgbW9kdWxlcyc7DQokbGFuZ1snY2hhbmdlbG9nJ10gPSAnc2VlIGNoYW5nZWxvZyA6IDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9iZXNzdGlvbGxlL29ybS1tcyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vZ2l0aHViLmNvbS9iZXNzdGlvbGxlL29ybS1tczwvYT4nOw0KJGxhbmdbJ2hlbHAnXSA9ICc8aDM+V2hhdCBEb2VzIFRoaXMgRG8/PC9oMz4NCjxwPm1vcmUgaW5mb3JtYXRpb25zIG9uIDogPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2Jlc3N0aW9sbGUvb3JtLW1zIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9naXRodWIuY29tL2Jlc3N0aW9sbGUvb3JtLW1zPC9hPjwvcD4NCic7DQo/Pg0K]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.iormsortable.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGludGVyZmFjZSBJT3JtU29ydGFibGUgd2hpY2ggYWxsb3cgdG8gc29ydCByZXN1bHRzIGZvciBhbiBlbnRpdHkNCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQogDQovKioNCiAqIEludGVyZmFjZSB3aWNoIGFsbG93IHRvIHNvcnQgcmVzdWx0cyBmb3IgYW4gZW50aXR5DQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KaW50ZXJmYWNlIElPcm1Tb3J0YWJsZQ0Kew0KCQ0KICAgIC8qKg0KICAgICogRnVuY3Rpb24gd2hpY2ggY29tcGFyZSB0d28gZW50aXRpZXMgaW4gcGFyYW1ldGVycw0KICAgICogDQogICAgKiANCiAgICAqIEBwYXJhbSBPcm1FbnRpdHkgdGhlIGZpcnN0IGVudGl0eSB3aXRoIGFsbCB2YWx1ZXMgc2V0dGVkDQogICAgKiBAcGFyYW0gT3JtRW50aXR5IHRoZSBzZWNvbmQgZW50aXR5IHdpdGggYWxsIHZhbHVlcyBzZXR0ZWQNCgkqDQogICAgKiBAcmV0dXJuIEludGVnZXIgOiAwIGlmIGVxdWFscywgMSBpZiB0aGUgZmlyc3QgZW50aXR5IGlzIHN1cGVyaW9yLCBlbHNlIC0xDQogICAgKiANCiAgICAqIEBzZWUgT3JtRW50aXR5DQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbXBhcmVUbyhPcm1FbnRpdHkgJGVudGl0eTEsIE9ybUVudGl0eSAkZW50aXR5Mik7DQp9DQoNCg0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.myautoload.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGF1dG9sb2FkIHN5c3RlbSB0aGF0IHdpbGwgbWVtb3JpemUgYWxsIHRoZSBlbnRpdGllcyB1c2VkIGJ5IGFsbCB0aGUgbW9kdWxlcw0KICoNCiAqIEBzaW5jZSAwLjAuMQ0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBPcm0NCiAqKi8NCiANCiAvKioNCiAqIFN0YXRpYyBDbGFzcyBtYW5hZ2luZyBlbnRpdGllcyB1c2VkIGluIHRoZSBhcHBsaWNhdGlvbg0KICoJVGhlIG1haW4gdXNlIGlzIHRvIG5vdCByZWRlY2xhcmF0ZSBYIGluc3RhbmNlcyBvZiBzYW1lIGNsYXNzZXMgaWYgaXQncyBub3QgbmVjZXNzYXJ5Lg0KICogQWxsIG1vZHVsZXMgaGF2ZSB0aGVpciBvd24gbmFtZXNwYWNlIHRvIGF2b2lkIHNoYXJpbmcgZW50aXRpZXMgYmV0d2VlbiB0d28gbW9kdWxlcw0KICoNCiAqIEBzaW5jZSAwLjAuMQ0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBPcm0NCiAqKi8NCmZpbmFsIGNsYXNzIE15QXV0b2xvYWQNCnsNCglwcml2YXRlIHN0YXRpYyAkaW5zdGFuY2VzOw0KCQ0KCS8qKg0KCSAqIFByaXZhdGUgY29uc3RydWN0b3INCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKXt9CQ0KCQ0KCS8qKg0KCSAqIEZ1bmN0aW9uIGNhbGxlZCBieSB0aGUgZW50aXRpZXMgdGhlbXNlbGYgZHVyaW5nIHRoZWlyIF9jb25zdHJ1Y3QoKSBmdW5jdGlvbg0KCSAqIGl0IHdpbGwgc3RvY2sgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eSAoaWYgbm90IGFscmVhZHkgZXhpc3RpbmcpIGluIGhpcyBtZW1vcnkNCiAgICAgKiANCgkgKiBAcGFyYW0gbmFtZXNwYWNlIG5hbWVzcGFjZSBvZiB0aGUgZW50aXR5J3MgbW9kdWxlDQoJICogQHBhcmFtIHN0cmluZyBhbiBpbnN0YW5jZSBvZiB0aGUgZW50aXR5DQoJICovDQoJcHVibGljIGZpbmFsIHN0YXRpYyBmdW5jdGlvbiBhZGRJbnN0YW5jZSgkbmFtZXNwYWNlLCBPcm1FbnRpdHkgJGluc3RhbmNlKQ0KCXsJDQoJCSRuYW1lc3BhY2UgPSBzdHJ0b2xvd2VyKCRuYW1lc3BhY2UpOw0KCQkkbmFtZSA9ICRpbnN0YW5jZS0+Z2V0TmFtZSgpOw0KCQkkbmFtZSA9IHN0cnRvbG93ZXIoJG5hbWUpOw0KCQkJCQ0KCQlpZihpc3NldChzZWxmOjokaW5zdGFuY2VzWyRuYW1lc3BhY2VdWyRuYW1lXSkpDQoJCXsNCgkJCU9ybVRyYWNlOjpkZWJ1ZygiSW5zdGFuY2UgIi4kbmFtZS4iIGFscmVhZHkgaW4gbWVtb3J5LiIpOw0KCQkJcmV0dXJuOw0KCQl9DQoJCU9ybVRyYWNlOjpkZWJ1ZygiQWRkaW5nIHRoZSBpbnN0YW5jZSAiLiRuYW1lLiIgaW50byB0aGUgbmFtZXNwYWNlICIuJG5hbWVzcGFjZSk7DQoJCXNlbGY6OiRpbnN0YW5jZXNbJG5hbWVzcGFjZV1bJG5hbWVdID0gJGluc3RhbmNlOw0KCX0NCgkNCgkvKioNCgkgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugb2YgZW50aXR5IGZyb20gdGhlIG1lbW9yeS4gRWFjaCBpbnN0YW5jZSBpcyBhIGNsb25lIHRvIGF2b2lkIHVzaW5nDQoJICogdGhlIHNhbWUgb2JqZWN0IA0KICAgICAqIA0KCSAqIEBwYXJhbSBuYW1lc3BhY2UgbmFtZXNwYWNlIG9mIHRoZSBlbnRpdHkncyBtb2R1bGUNCgkgKiBAcGFyYW0gc3RyaW5nIGFuIGluc3RhbmNlIG9mIHRoZSBlbnRpdHkNCgkgKg0KCSAqIEByZXR1cm4gT3JtRW50aXR5IGFuIGluc3RhbmNlIG9mIGVudGl0eQ0KCSAqLw0KCXB1YmxpYyBmaW5hbCBzdGF0aWMgZnVuY3Rpb24gZ2V0SW5zdGFuY2UoJG5hbWVzcGFjZSwgJGluc3RhbmNlTmFtZSkNCgl7DQoJCSRuYW1lc3BhY2UgPSBzdHJ0b2xvd2VyKCRuYW1lc3BhY2UpOw0KCQkkaW5zdGFuY2VOYW1lID0gc3RydG9sb3dlcigkaW5zdGFuY2VOYW1lKTsNCgkJbXlBdXRvbG9hZDo6aXNWYWxpZGVOYW1lc3BhY2UoJG5hbWVzcGFjZSk7DQoJCQ0KCQlPcm1UcmFjZTo6ZGVidWcoIkFza2luZyBhbiBpbnN0YW5jZSBvZiAiLiRpbnN0YW5jZU5hbWUuICIgZm9yIG5hbWVzcGFjZSAiLiRuYW1lc3BhY2UpOw0KCQlpZihteUF1dG9sb2FkOjpoYXNJbnN0YW5jZSgkbmFtZXNwYWNlLCAkaW5zdGFuY2VOYW1lKSkNCgkJew0KCQkJT3JtVHJhY2U6OmRlYnVnKCJJbnN0YW5jZSAiLiRpbnN0YW5jZU5hbWUuIiByZXR1cm5lZC4iKTsNCgkJCXJldHVybiBjbG9uZSBzZWxmOjokaW5zdGFuY2VzWyRuYW1lc3BhY2VdWyRpbnN0YW5jZU5hbWVdOw0KCQl9DQoJCQ0KCQlPcm1UcmFjZTo6ZXJyb3IoIk5vIGluc3RhbmNlICRpbnN0YW5jZU5hbWUgZm91bmQgaW4gbWVtb3J5IGZvciBuYW1lc3BhY2UgIi4kbmFtZXNwYWNlKTsNCgkJdGhyb3cgbmV3IEV4Y2VwdGlvbigiTm8gaW5zdGFuY2UgJGluc3RhbmNlTmFtZSBmb3VuZCBpbiBtZW1vcnkgZm9yIG5hbWVzcGFjZSAiLiRuYW1lc3BhY2UpOw0KCX0NCgkNCgkvKioNCgkgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgaW5zdGFuY2UgZXhpc3RzIGluIHRoZSBtZW1vcnkgZm9yIHRoZSBzYW1lIG5hbWVzcGFjZQ0KICAgICAqIA0KCSAqIEBwYXJhbSBuYW1lc3BhY2UgbmFtZXNwYWNlIG9mIHRoZSBlbnRpdHkncyBtb2R1bGUNCgkgKiBAcGFyYW0gc3RyaW5nIGFuIGluc3RhbmNlIG9mIHRoZSBlbnRpdHkNCgkgKg0KCSAqIEByZXR1cm4gQm9vbGVhbiBpZiB0aGUgaW5zdGFuY2UgZXhpc3RzDQoJICovDQoJcHVibGljIGZpbmFsIHN0YXRpYyBmdW5jdGlvbiBoYXNJbnN0YW5jZSgkbmFtZXNwYWNlLCAkaW5zdGFuY2VOYW1lKXsNCgkJJG5hbWVzcGFjZSA9IHN0cnRvbG93ZXIoJG5hbWVzcGFjZSk7DQoJCSRpbnN0YW5jZU5hbWUgPSBzdHJ0b2xvd2VyKCRpbnN0YW5jZU5hbWUpOw0KCQkNCgkJbXlBdXRvbG9hZDo6aXNWYWxpZGVOYW1lc3BhY2UoJG5hbWVzcGFjZSk7DQoJCQ0KCQlyZXR1cm4gaXNzZXQoc2VsZjo6JGluc3RhbmNlc1skbmFtZXNwYWNlXVskaW5zdGFuY2VOYW1lXSk7DQoJfQ0KCQ0KCS8qKg0KCSAqIFJldHVybiBhbGwgdGhlIGluc3RhbmNlcyBvZiBhbGwgdGhlIGVudGl0aWVzIGZyb20gYSBzaW5nbGUgbmFtZXNwYWNlDQogICAgICogDQoJICogQHBhcmFtIG5hbWVzcGFjZSBuYW1lc3BhY2Ugb2YgdGhlIGVudGl0eSdzIG1vZHVsZQ0KCSAqIEBwYXJhbSBzdHJpbmcgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eQ0KCSAqDQoJICogQHJldHVybiBhcnJheTxPcm1FbnRpdHk+IGFuIGFycmF5IG9mIGFsbCB0aGUgZW50aXRpZXMNCgkgKi8NCglwdWJsaWMgZmluYWwgc3RhdGljIGZ1bmN0aW9uIGdldEFsbEluc3RhbmNlcygkbmFtZXNwYWNlKQ0KCXsNCgkJJG5hbWVzcGFjZSA9IHN0cnRvbG93ZXIoJG5hbWVzcGFjZSk7DQoJCW15QXV0b2xvYWQ6OmlzVmFsaWRlTmFtZXNwYWNlKCRuYW1lc3BhY2UpOw0KCQkNCgkJcmV0dXJuIHNlbGY6OiRpbnN0YW5jZXNbJG5hbWVzcGFjZV07DQoJfQ0KCQ0KCS8qKg0KCSAqIFJldG91cm5lIHRydWUgaWYgdGhlIG5hbWVzcGFjZSBpcyBrbm93biBpbiBtZW1vcnkNCiAgICAgKiANCgkgKiBAcGFyYW0gbmFtZXNwYWNlIG5hbWVzcGFjZSBvZiB0aGUgZW50aXR5J3MgbW9kdWxlDQoJICoNCgkgKiBAcmV0dXJuIEJvb2xlYW4gaWYgdGhlIG5hbWVzcGFjZSBleGlzdHMNCgkgKi8NCglwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBpc1ZhbGlkZU5hbWVzcGFjZSgkbmFtZXNwYWNlKQ0KCXsNCgkJaWYoIWlzc2V0KHNlbGY6OiRpbnN0YW5jZXNbJG5hbWVzcGFjZV0pKQ0KCQl7DQoJCQlPcm1UcmFjZTo6ZXJyb3IoIlRoZSBuYW1lc3BhY2UgJyRuYW1lc3BhY2UnIGRvZXNuJ3QgZXhpc3RlIGludG8gdGhlIE9ybSBTeXN0ZW0iKTsNCgkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBuYW1lc3BhY2UgJyRuYW1lc3BhY2UnIGRvZXNuJ3QgZXhpc3RlIGludG8gdGhlIE9ybSBTeXN0ZW0iKTsNCgkJfQ0KCX0NCn0NCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormcache.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGNsYXNzIHdpY2ggcHJvdmlkZSBhIG1pbmkgY2FjaGluZyBzeXN0ZW0gb2YgT3JtIHRvIGF2b2lkIG11bHRpcGxlcyBzcWwgcmVxdWVzdHMNCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQoNCg0KLyoqDQogKg0KICogIFN0YXRpYyBjbGFzc2UgdXNlZCB0byBwcm92aWRlIGEgdmVyeSBzaW1wbGUgY2FjaGluZyBzeXN0ZW0uIFlvdSBjYW4gcHVzaCB0aGUgcmVzdWx0IG9mIGEgcmVxdWVzdCBpbnRvIGl0IGFuZCBhc2tpbmcgbGF0ZXINCiAqCXRvIGNvbGxlY3QgdGhlIHJlc3VsdC4NCiAqDQogKiAgRXhhbXBsZSA6IA0KICogIDxjb2RlPg0KICogIAkvL0NhbGwgdG8gY21zbXMgdG8gZ2V0IHRoZSBkYXRhYmFzZSBjb25uZWN0b3INCiAqICAJJGRiID0gY21zbXMoKS0+R2V0RGIoKTsNCiAqICAJDQogKiAgCS8vRGVmaW5lcyBhIG5ldyBDdXN0b21lciBlbnRpdHkNCiAqICAJJGVudGl0eSA9IE15QXV0b2xvYWQ6OmdldEluc3RhbmNlKCdteU1vZHVsZScsICdjdXN0b21lcicpOw0KICogIAkNCiAqICAJLy9TZWxlY3QgYWxsIEN1c3RvbWVycw0KICogIAkkcXVlcnlTZWxlY3QgPSAnU2VsZWN0ICogRlJPTSAnLiRlbnRpdHktPmdldERibmFtZSgpOw0KICogIAkNCiAqICAJLy9JZiB0aGUgY2FjaGluZyBzeXN0ZW0gYWxyZWFkeSBrbm93IHRoZSBhbnN3ZXIgOiB3ZSByZXR1cm4gdGhlIHJlc3VsdCBpbW1lZGlhdGVseQ0KICogIAlpZihPcm1DYWNoZTo6aXNDYWNoZSgkcXVlcnlTZWxlY3QpKQ0KICogIAl7DQogKiAgCQlyZXR1cm4gT3JtQ2FjaGU6OmdldENhY2hlKCRxdWVyeVNlbGVjdCk7DQogKiAgCX0NCiAqICAJDQogKiAgCS8vU28gd2UgbmVlZCB0byBleGVjdXRlIHRoZSBxdWVyeQ0KICogIAkkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeVNlbGVjdCk7DQogKiAgCWlmICgkcmVzdWx0ID09PSBmYWxzZSl7ZGllKCJEYXRhYmFzZSBlcnJvciEiKTt9DQogKiAgCQ0KICogIAkkZW50aXR5cyA9IGFycmF5KCk7DQogKiAgCXdoaWxlICgkcm93ID0gJHJlc3VsdC0+RmV0Y2hSb3coKSkNCiAqICAJew0KICogIAkJJGVudGl0eXNbXSA9IE9ybUNvcmU6OnJvd1RvRW50aXR5KCRlbnRpdHksICRyb3cpOw0KICogIAl9DQogKiAgCQ0KICogIAkvL0Rvbid0IGZvcmdldCB0byBwdXNoIHRoZSByZXN1bHQgaW50byB0aGUgY2FjaGluZyBzeXN0ZW0gZm9yIHRoZSBuZXh0IGNhbGwNCiAqICAJT3JtQ2FjaGU6OnNldENhY2hlKCRxdWVyeVNlbGVjdCwgbnVsbCwgJGVudGl0eXMpOw0KIA0KICogIAlyZXR1cm4gJGVudGl0eXM7DQogKgk8L2NvZGU+DQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KLypmaW5hbCovIGNsYXNzIE9ybUNhY2hlDQp7CQ0KCS8qKg0KCSAqIENvbnRhaW5zIGFsbCB0aGUgcmVzdWx0IGZvciB0aGUgcGFzdCByZXF1ZXRlcw0KCSAqKi8NCglwcml2YXRlIHN0YXRpYyAkY2FjaGU7DQoJCQ0KCS8qKg0KCSAqIFByaXZhdGUgY29uc3RydWN0b3INCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQ0KCQkJDQoJLyoqDQoJICoJU2V0IHRoZSBjYWNoZSBmb3IgYSBzcWwgcmVxdWVzdCwgaXRzIHBhcmFtZXRlcnMgYW5kIG9mIGNvdXJzZSB0aGUgcmVzdWx0DQogICAgICogDQoJICogQHBhcmFtIHN0cmluZyB0aGUgc3FsIHF1ZXJ5DQoJICogQHBhcmFtIGFycmF5IHRoZSBwYXJhbWV0ZXJzIGludG8gYSBhcnJheS4gTWF5IGJlIG51bGwNCgkgKiBAcGFyYW0gb2JqZWN0IHRoZSByZXN1bHQNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIHNldENhY2hlKCRzcWwsICRwYXJhbXMgPSBudWxsLCAkdmFsdWUpDQoJewkJDQoJCWlmKCFpc3NldChzZWxmOjokY2FjaGUpKQ0KCQl7DQoJCQlzZWxmOjokY2FjaGUgPSBhcnJheSgpOw0KCQl9DQoJCQ0KCQlzZWxmOjokY2FjaGVbT3JtQ2FjaGU6Omhhc2goJHNxbCwkcGFyYW1zKV0gPSAkdmFsdWU7DQoJCQ0KCX0NCgkNCgkvKioNCgkgKiBRdWVyeWluZyB0aGUgY2FjaGUgZm9yIGEgc3FsIHJlcXVlc3QgYW5kIGl0cyBwYXJhbWV0ZXJzDQogICAgICogDQoJICogQHBhcmFtIHN0cmluZyB0aGUgc3FsIHF1ZXJ5DQoJICogQHBhcmFtIGFycmF5IHRoZSBwYXJhbWV0ZXJzIGludG8gYSBhcnJheS4gTWF5IGJlIG51bGwNCgkgKg0KCSAqIEByZXR1cm4gb2JqZWN0IHRoZSByZXN1bHQNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGdldENhY2hlKCRzcWwsICRwYXJhbXMgPSBudWxsKQ0KCXsNCgkJaWYoT3JtQ2FjaGU6OmlzQ2FjaGUoJHNxbCwgJHBhcmFtcykpDQoJCXsNCgkJCXJldHVybiBzZWxmOjokY2FjaGVbT3JtQ2FjaGU6Omhhc2goJHNxbCwkcGFyYW1zKV07DQoJCX0NCgkJDQoJCXJldHVybiBudWxsOw0KCX0NCg0KCS8qKg0KCSAqIFJldHVybiB0cnVlIGlmIGEgY2FjaGUgZXhpc3QgZm9yIGEgc3FsIHJlcXVlc3QgYW5kIGl0cyBwYXJhbWV0ZXJzDQogICAgICogDQoJICogQHBhcmFtIHN0cmluZyB0aGUgc3FsIHF1ZXJ5DQoJICogQHBhcmFtIGFycmF5IHRoZSBwYXJhbWV0ZXJzIGludG8gYSBhcnJheS4gTWF5IGJlIG51bGwNCgkgKg0KCSAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIHRoZSBjYWNoZSBleGlzdHMNCgkgKi8JDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBpc0NhY2hlKCRzcWwsICRwYXJhbXMgPSBudWxsKQ0KCXsNCgkJcmV0dXJuIGlzc2V0KHNlbGY6OiRjYWNoZSkgJiYgYXJyYXlfS0VZX2V4aXN0cyhPcm1DYWNoZTo6aGFzaCgkc3FsLCRwYXJhbXMpLHNlbGY6OiRjYWNoZSk7DQoJfQ0KDQoJLyoqDQoJICogRW1wdHkgdGhlIGNhY2hlLiBWZXJ5IGltcG9ydGFudCBpZiBiZXR3ZWVuIDIgcXVlcmluZywgdGhlIHN5c3RlbSBtYXkgaW5zZXJ0L2RlbGV0ZS91cGRhdGUgc29tZSBkYXRhIGluIHRoZSBkYXRhYmFzZQ0KCSAqICBJbiB0aGUgT3JtIHN5c3RlbSwgd2UgYWx3YXlzIGRyb3AgdGhlIGNhY2hlIGluIHRoZSBpbnNlcnQvZGVsZXRlL3VwZGF0ZSBmdW5jdGlvbi4NCgkgKi8JDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBjbGVhckNhY2hlKCkNCgl7DQoJCXNlbGY6OiRjYWNoZT1udWxsOw0KCX0NCg0KCS8qKg0KCSAqIFJldHVybiBhIHVuaXF1ZSBoYXNoIGZvciBhIHNxbCByZXF1ZXN0IGFuZCBpdHMgcGFyYW1ldGVycw0KCSAqICB0aGlzIGhhc2ggaXMgdXNlZCB0byBEZWZpbmVzIGEgdW5pcXVlIGVudHJ5IGludG8gdGhlIGNhY2hlDQogICAgICogDQoJICogQHBhcmFtIHN0cmluZyB0aGUgc3FsIHF1ZXJ5DQoJICogQHBhcmFtIGFycmF5IHRoZSBwYXJhbWV0ZXJzIGludG8gYSBhcnJheS4gTWF5IGJlIG51bGwNCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nIHRoZSBoYXNoDQoJICovCQ0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gaGFzaCgkc3FsLCAkcGFyYW1zID0gbnVsbCkNCgl7DQoJCWlmKCRwYXJhbXMgPT0gbnVsbCkNCgkJe3JldHVybiBtZDUoJHNxbCk7fQ0KCQkNCgkJJHAgPSBwcmludF9yKCRwYXJhbXMsIHRydWUpOw0KDQoJCXJldHVybiBtZDUoJHNxbC4kcCk7DQoJfQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormcast.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGNsYXNzIHdpdGggYWxsIHRoZSBkaWZmZXJlbnQgdHlwZSBmb3IgdGhlIGZpZWxkIGludG8gZGF0YWJhc2UNCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQoNCg0KLyoqDQogKiBDbGFzcyBEZWZpbmVzIHRoZSB0eXBlIG9mIHRoZSBmaWVsZCwgaW4gZW50aXR5IGJ1dCBhbHNvIGluIGRhdGFiYXNlDQogKiANCiAqICBPcm1DQVNUOjokU1RSSU5HIGEgc2ltcGxlIHN0cmluZw0KICogIE9ybUNBU1Q6OiRJTlRFR0VSIGFuIGludGVnZXINCiAqICBPcm1DQVNUOjokREFURSBhIGZpZWxkIGRhdGUNCiAqICBPcm1DQVNUOjokVElNRSBhIGZpZWxkIHRpbWUNCiAqICBPcm1DQVNUOjokVFMgYSBmaWVsZCB0aW1lc3RhbXANCiAqICBPcm1DQVNUOjokQlVGRkVSIGEgZmllbGQgd2l0aCBubyBsaW1pdCBvZiBzaXplIChleGNlcHQgdGhlIG15c3FsIG5hdHVyYWwgbGltaXQpDQogKiAgT3JtQ0FTVDo6JE5VTUVSSUMgYSBmaWVsZCBmb3IgYSByZWFsIG51bWJlciAoZWcgOiB3aXRoIGNvbWEpDQogKiAgT3JtQ0FTVDo6JE5PTkUgYSBUcmFuc2lhbnQgZmllbGQgOiB3b24ndCBiZSBwZXJzaXN0IGludG8gZGF0YWJhc2UNCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQoqLw0KY2xhc3MgT3JtQ0FTVA0Kew0KCXB1YmxpYyBzdGF0aWMgJFNUUklORyA9IDA7DQoJcHVibGljIHN0YXRpYyAkSU5URUdFUiA9IDE7DQoJcHVibGljIHN0YXRpYyAkREFURSA9IDI7DQoJcHVibGljIHN0YXRpYyAkQlVGRkVSID0gMzsNCglwdWJsaWMgc3RhdGljICROVU1FUklDID0gNDsNCglwdWJsaWMgc3RhdGljICRUSU1FID0gNTsNCglwdWJsaWMgc3RhdGljICRUUyA9IDY7DQoJcHVibGljIHN0YXRpYyAkREFURVRJTUUgPSA3Ow0KCXB1YmxpYyBzdGF0aWMgJFVVSUQgPSA4Ow0KCQ0KCXB1YmxpYyBzdGF0aWMgJE5PTkUgPSA5OTsNCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormcore.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGNsYXNzIE9ybUNvcmUNCiAqIA0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KIA0KIA0KLyoqDQogKiBNYWluIHBhcnQgb2YgdGhlIGludGVyZmFjZSBiZXR3ZWVuIENtc21hZGVzaW1wbGUgbmF0aXZlcyBmdW5jdGlvbiBhbmQgdGhlIG5lY2Vzc2l0eSBmb3IgdGhlIE9ybSBmdW5jdGlvbnMNCiAqICAgDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQoqLw0KY2xhc3MgT3JtQ29yZQ0KeyAgDQogICAgLyoqDQogICAgKiBQcm90ZWN0ZWQgY29uc3RydWN0b3INCiAgICAqICAgICANCiAgICAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9DQogICAgICANCiAgICAvKioNCiAgICAqIHRyYW5zZm9ybXMgdGhlIGVudGl0eSdzIHN0cnVjdHVyZSBpbnRvIGFkb2RiIGluZm9ybWF0aW9ucyANCiAgICAqICAgICAgICAgDQogICAgKiBAcGFyYW0gT3JtRW50aXR5IHRoZSBlbnRpdHkNCiAgICAqIEByZXR1cm4gdGhlIGFkb2RiIGluZm9ybWF0aW9ucw0KICAgICovDQoJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZnVuY3Rpb24gZ2V0RmllbGRzVG9IcWwoT3JtRW50aXR5ICYkZW50aXR5KSB7ICAgIA0KCQkkaHFsID0gJyc7DQoNCgkJJGxpc3RlRmllbGQgPSAkZW50aXR5LT5nZXRGaWVsZHMoKTsNCg0KCQkvL0ZvciBlYWNoIEZpZWxkIGNvbnRhaW5lZCBpbiB0aGUgZW50aXR5DQoJCWZvcmVhY2goJGxpc3RlRmllbGQgYXMgJGZpZWxkKSB7DQoJCQkvL1dlIGRvbid0IGNyZWF0ZSB0aGUgRmllbGQgd2hpY2ggYXJlIGxpbmtzIGV4dGVybmFscyBvbiBhc3NvY2lhdGl2ZSB0YWJsZXMNCgkJCWlmKCRmaWVsZC0+aXNBc3NvY2lhdGVLRVkoKSkgew0KCQkJCWNvbnRpbnVlOw0KCQkJfQkNCgkJCQ0KCQkJLy9XZSBkb24ndCBjcmVhdGUgdGhlIHRyYW5zaWVudCBGaWVsZHMgDQoJCQlpZigkZmllbGQtPmdldFR5cGUoKSA9PSBPcm1DQVNUOjokTk9ORSkgew0KCQkJCWNvbnRpbnVlOw0KCQkJfQ0KDQoJCQlpZighZW1wdHkoJGhxbCkpIHsNCgkJCQkkaHFsIC49ICcgLCAnOw0KCQkJfQ0KDQoJCQkkaHFsIC49ICcgJy4kZmllbGQtPmdldE5hbWUoKS4nICc7DQoNCgkJCXN3aXRjaCgkZmllbGQtPmdldFR5cGUoKSkgew0KCQkJCWNhc2UgT3JtQ0FTVDo6JFNUUklORyA6IA0KCQkJCQkkaHFsIC49ICdDJzsgDQoJCQkJCWlmKCRmaWVsZC0+Z2V0U2l6ZSgpICE9ICIiICkgeyRocWwuPSAiICgiLiRmaWVsZC0+Z2V0U2l6ZSgpLiIpICI7fSANCgkJCQkJYnJlYWs7DQoNCgkJCQljYXNlIE9ybUNBU1Q6OiRJTlRFR0VSIDogDQoJCQkJCSRocWwgLj0gJ0knOyANCgkJCQkJaWYoJGZpZWxkLT5nZXRTaXplKCkgIT0gIiIgKSB7JGhxbC49ICIgKCIuJGZpZWxkLT5nZXRTaXplKCkuIikgIjt9IA0KCQkJCQlicmVhazsNCg0KCQkJCWNhc2UgT3JtQ0FTVDo6JE5VTUVSSUMgOiANCgkJCQkJJGhxbCAuPSAnTic7IA0KCQkJCQlpZigkZmllbGQtPmdldFNpemUoKSAhPSAiIiApDQoJCQkJCXskaHFsLj0gIiAoIi4kZmllbGQtPmdldFNpemUoKS4iKSAiO30gDQoJCQkJCWJyZWFrOw0KDQoJCQkJY2FzZSBPcm1DQVNUOjokQlVGRkVSIDogJGhxbCAuPSAnWCc7IGJyZWFrOw0KDQoJCQkJY2FzZSBPcm1DQVNUOjokREFURSA6ICRocWwgLj0gJ0QnOyBicmVhazsNCg0KCQkJCWNhc2UgT3JtQ0FTVDo6JFRJTUUgOiAkaHFsIC49ICdUJzsgYnJlYWs7ICAgDQoNCgkJCQljYXNlIE9ybUNBU1Q6OiRVVUlEIDogJGhxbCAuPSAnQyAoMzYpICc7IGJyZWFrOyAgIA0KDQoJCQkJY2FzZSBPcm1DQVNUOjokVFMgOiAkaHFsIC49ICdJICgxMCkgJzsgYnJlYWs7IC8vd29ya2Fyb3VuZCBmb3IgdGhlIHJlYWwgdGltZXN0YW1wIG1pc3NpbmcgaW4gQURPREJMSVRFDQoNCgkJCQljYXNlIE9ybUNBU1Q6OiREQVRFVElNRSA6ICRocWwgLj0gQ01TX0FET0RCX0RUOyBicmVhazsgICANCgkJCX0NCgkJCQ0KCQkJLy9NYW5hZ2UgdGhlIGRlZmF1bHQgdmFsdWUNCgkJCWlmKCRmaWVsZC0+Z2V0RGVmYXVsdFZhbHVlKCkgIT0gbnVsbCl7DQoJCQkJaWYoJGZpZWxkLT5nZXRUeXBlKCkgPT0gT3JtQ0FTVDo6JFNUUklORyB8fCAkZmllbGQtPmdldFR5cGUoKSA9PSBPcm1DQVNUOjokQlVGRkVSKSB7DQoJCQkJCSRocWwgLj0gIiAgREVGQVVMVCAnIi5zdHJfcmVwbGFjZSgiJyIsICInJyIsJGZpZWxkLT5nZXREZWZhdWx0VmFsdWUoKSkuIicgIjsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkaHFsIC49ICIgIERFRkFVTFQgIi4kZmllbGQtPmdldERlZmF1bHRWYWx1ZSgpLiIgIjsNCgkJCQl9DQoJCQkJDQoJCQl9DQoNCgkJCWlmKCRmaWVsZC0+aXNQcmltYXJ5S0VZKCkpDQoJCQl7DQoJCQkJaWYoJGVudGl0eS0+aXNBdXRvaW5jcmVtZW50KCkpIHsNCgkJCQkJJGhxbCAuPSAnIEtFWSBBVVRPJzsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkaHFsIC49ICcgS0VZICc7DQoJCQkJfQ0KCQkJfQ0KCQkJCQ0KCQl9DQoJDQoJCU9ybVRyYWNlOjppbmZvKCRocWwpOw0KDQoJCXJldHVybiAkaHFsOw0KCX0NCgkNCiAgICAvKioNCiAgICAqIENyZWF0ZSBhIHRhYmxlIGludG8gRGF0YWJhc2UgZnJvbSB0aGUgc3RydWN0dXJlIG9mIGFuIE9ybUVudGl0eQ0KICAgICogIFdpbGwgYWxzbyBjcmVhdGUgdGhlIHNlcXVlbmNlIGlmIGl0J3MgbmVlZGVkDQogICAgKiAgDQogICAgKiAgIGV4YW1wbGUgd2l0aCBhIEN1c3RvbWVyIGVudGl0eSA6IA0KICAgICogPGNvZGU+DQogICAgKiANCiAgICAqIGNsYXNzIEN1c3RvbWVyIGV4dGVuZHMgT3JtRW50aXR5DQogICAgKiB7DQogICAgKiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQ0KICAgICogICAgew0KICAgICogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJHRoaXMtPkdldE5hbWUoKSwgJ2N1c3RvbWVyJyk7DQogICAgKiAgICAgICAgDQogICAgKiAgICAgICAgJHRoaXMtPmFkZChuZXcgT3JtRmllbGQoJ2N1c3RvbWVyX2lkJyAgDQoJKgkJCSwgT3JtQ0FTVDo6JElOVEVHRVINCgkqCQkJLCBudWxsDQoJKgkJCSwgbnVsbA0KCSoJCQksIE9ybUtFWTo6JFBLIA0KCSoJCQkpKTsNCiAgICAqIA0KICAgICogICAgICAgICR0aGlzLT5hZGQobmV3IE9ybUZpZWxkKCduYW1lJw0KICAgICogICAgICAgIAksIE9ybUNBU1Q6OiRTVFJJTkcgDQogICAgKiAgICAgICAgCSwgMzINCiAgICAqICAgICAgICAJKSk7DQogICAgKiANCiAgICAqICAgICAgICAkdGhpcy0+YWRkKG5ldyBPcm1GaWVsZCgnbGFzdG5hbWUnDQogICAgKiAgICAgICAgCSwgT3JtQ0FTVDo6JFNUUklORw0KICAgICogICAgICAgIAksIDMyDQoJKgkJCSwgdHJ1ZSAgLy8gSXMgbnVsbGFibGUNCiAgICAqICAgICAgICAJKSk7DQogICAgKiAgICB9DQogICAgKiB9DQogICAgKiA8L2NvZGU+DQogICAgKiANCiAgICAqICBUaGUgYmVzdCB3YXkgdG8gY3JlYXRlIGl0cyB0YWJsZSBpbnRvIHRoZSBkYXRhYmFzZSA6IA0KICAgICogDQogICAgKiA8Y29kZT4NCiAgICAqICAgJGN1c3RvbWVyID0gTXlBdXRvbG9hZDo6Z2V0SW5zdGFuY2UoJHRoaXMtPkdldE5hbWUoKSwgJ2N1c3RvbWVyJyk7DQogICAgKiAgIE9ybUNvcmU6OmNyZWF0ZVRhYmxlKCRjdXN0b21lcik7DQogICAgKiA8L2NvZGU+DQogICAgKiANCiAgICAqICBUaGUgZnVuY3Rpb24gd2lsbCBhbHNvIHRyeSB0byBwb3B1bGF0ZSB0aGUgdGFibGUgd2l0aCBhIGNhbGwgdG8gdGhlIGZ1bmN0aW9uIGluaXRUYWJsZSgpIGlmIGl0J3MgZGVmaW5lIGludG8gdGhlIGVudGl0eSBjbGFzcy4NCiAgICAqIA0KCSogQHBhcmFtIE9ybSB0aGUgbW9kdWxlIHdoaWNoIGV4dGVuZHMgdGhlIE9ybSBtb2R1bGUNCiAgICAqIEBwYXJhbSBPcm1FbnRpdHkgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eQ0KICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBjcmVhdGVUYWJsZShPcm1FbnRpdHkgJiRlbnRpdHlQYXJhbSkgew0KCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOw0KCQkkdGFib3B0YXJyYXkgPSBhcnJheSggJ215c3FsJyA9PiAnRU5HSU5FIE15SVNBTSBDSEFSQUNURVIgU0VUIHV0ZjggQ09MTEFURSB1dGY4X2dlbmVyYWxfY2knKTsNCgkJJGlkeG9wdGFycmF5VW5pcXVlID0gYXJyYXkoJ1VOSVFVRScpOw0KCQkkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCAkZGIgKTsNCgkJJGhxbCA9IE9ybUNvcmU6OmdldEZpZWxkc1RvSHFsKCRlbnRpdHlQYXJhbSk7DQoJCQ0KCQkvL0NhbGxpbmcgdGhlIGFkb2RiIGZ1bmN0aW9uYWxpdGllcw0KCQkkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKSwgDQoJCQkJCQkJCQkJCQkkaHFsLA0KCQkJCQkJCQkJCQkJJHRhYm9wdGFycmF5KTsNCgkJCQkJCQkJCQkJCQ0KCQkkcmVzdWx0ID0gJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOw0KDQoJCWlmICgkcmVzdWx0ID09PSBmYWxzZSkgew0KCQkJT3JtVHJhY2U6OmVycm9yKCRocWwpOw0KCQkJT3JtVHJhY2U6OmVycm9yKCJEYXRhYmFzZSBlcnJvciBkdXJpbmcgdGhlIGNyZWF0aW9uIG9mIHRhYmxlICIuJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKS4iIGZvciB0aGUgZW50aXR5ICIgLiAkZW50aXR5UGFyYW0tPmdldE5hbWUoKS4kZGItPkVycm9yTXNnKCkpOw0KCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigiRGF0YWJhc2UgZXJyb3IgZHVyaW5nIHRoZSBjcmVhdGlvbiBvZiB0YWJsZSAiLiRlbnRpdHlQYXJhbS0+Z2V0RGJuYW1lKCkuIiBmb3IgdGhlIGVudGl0eSAiIC4gJGVudGl0eVBhcmFtLT5nZXROYW1lKCkuJGRiLT5FcnJvck1zZygpKTsNCgkJfQ0KCQkgICANCgkJT3JtVHJhY2U6OmRlYnVnKCJjcmVhdGVUYWJsZSA6ICIucHJpbnRfcigkc3FsYXJyYXksIHRydWUpKTsNCgkJDQoJCS8vSWYgbmVjZXNzYXJ5LCBpdCB3aWxsIGNyZWF0ZSBhIHNlcXVlbmNlIG9uIHRoZSB0YWJsZS4NCgkJaWYoJGVudGl0eVBhcmFtLT5nZXRTZXFuYW1lKCkgIT0gbnVsbCl7DQoJCQkkZGItPkNyZWF0ZVNlcXVlbmNlKCRlbnRpdHlQYXJhbS0+Z2V0U2VxbmFtZSgpKTsNCgkJfQ0KCQkNCgkJLy9XZSBtYW5hZ2UgdGhlICJ1bmlxdWUiIGtleXMNCgkJJGxpc3Rlc1VuaXF1ZUtleXMgPSAkZW50aXR5UGFyYW0tPmdldFVuaXF1ZUtleXMoKTsNCg0KCQkvL0ZvciBlYWNoIEZpZWxkIGNvbnRhaW5lZCBpbiB0aGUgZW50aXR5DQoJCWZvcmVhY2goJGxpc3Rlc1VuaXF1ZUtleXMgYXMgJGxpc3RGaWVsZCkgew0KCQkJLy9DYXNlIDogdW5pcXVlIGluZGV4IG9uIG1hbnkgZmllbGRzDQoJCQlpZihpc19hcnJheSgkbGlzdEZpZWxkKSkgew0KCQkJCSRpZHhmbGRzID0gaW1wbG9kZSgnLCcsICRsaXN0RmllbGQpOw0KCQkJCSRtZDUgPSBtZDUoc2VyaWFsaXplKCRsaXN0RmllbGQpKTsNCgkJCX0gZWxzZSB7DQoJCQkJJGlkeGZsZHMgPSAkbGlzdEZpZWxkOw0KCQkJCSRtZDUgPSBtZDUoJGxpc3RGaWVsZCk7DQoJCQl9DQoJCQkNCgkJCSRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVJbmRleFNRTCgkbWQ1LCAkZW50aXR5UGFyYW0tPmdldERibmFtZSgpLCAkaWR4ZmxkcywgJGlkeG9wdGFycmF5VW5pcXVlKTsNCgkJCSRyZXN1bHQgPSAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7DQoNCgkJCWlmICgkcmVzdWx0ID09PSBmYWxzZSkgew0KCQkJCU9ybVRyYWNlOjplcnJvcigkaHFsKTsNCgkJCQlPcm1UcmFjZTo6ZXJyb3IoIkRhdGFiYXNlIGVycm9yIGR1cmluZyB0aGUgY3JlYXRpb24gb2YgdGhlIHVuaXF1ZSBpbmRleCAiLiRtZDUuIigiLiRpZHhmbGRzLiIpIGZvciB0aGUgZW50aXR5ICIgLiAkZW50aXR5UGFyYW0tPmdldE5hbWUoKS4kZGItPkVycm9yTXNnKCkpOw0KCQkJCXRocm93IG5ldyBFeGNlcHRpb24oIkRhdGFiYXNlIGVycm9yIGR1cmluZyB0aGUgY3JlYXRpb24gb2YgdGhlIHVuaXF1ZSBpbmRleCAiLiRtZDUuIigiLiRpZHhmbGRzLiIpIGZvciB0aGUgZW50aXR5ICIgLiAkZW50aXR5UGFyYW0tPmdldE5hbWUoKS4kZGItPkVycm9yTXNnKCkpOw0KCQkJfQ0KCQkJDQoJCX0NCg0KCQkvL1dlIGluaXRpYXRlIHRoZSB0YWJsZS4NCgkJJGVudGl0eVBhcmFtLT5pbml0VGFibGUoKTsNCgl9DQogICAgDQogICAgLyoqDQogICAgKiBEcm9wIHRoZSB0YWJsZSBmb3IgdGhlIE9ybUVudGl0eSBpbiBwYXJhbWV0ZXJzDQogICAgKiAgV2lsbCBhbHNvIGRyb3AgdGhlIHNlcXVlbmNlIGlmIGl0J3MgbmVlZGVkDQogICAgKiANCiAgICAqIEBwYXJhbSBPcm1FbnRpdHkgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eQ0KICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBkcm9wVGFibGUoT3JtRW50aXR5ICYkZW50aXR5UGFyYW0pIHsNCg0KCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOw0KDQoJCSRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoICRkYiApOw0KDQoJCSRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKSk7DQoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsNCg0KCQkvL0lmIG5lY2Vzc2FyeSwgaXQgd2lsbCBkZWxldGUgYSBzZXF1ZW5jZSBvbiB0aGUgdGFibGUuDQoJCWlmKCRlbnRpdHlQYXJhbS0+Z2V0U2VxbmFtZSgpICE9IG51bGwpeyRkYi0+RHJvcFNlcXVlbmNlKCRlbnRpdHlQYXJhbS0+Z2V0U2VxbmFtZSgpKTt9DQoJfSAgDQogIA0KICAgIC8qKg0KICAgICogV2lsbCBlZGl0IHRoZSB0YWJsZSBvZiB0aGUgT3JtRW50aXR5IGluIHBhcmFtZXRlcnMgd2l0aCB0aGUgU1FMIHF1ZXJ5IGluIHBhcmFtZXRlcnMNCiAgICAqIA0KICAgICogICBleGFtcGxlIDogaWYgeW91IG5lZWQgdG8gZG8gDQogICAgKiANCiAgICAqIDxjb2RlPiAgICAgICAgDQogICAgKiAgIEFMVEVSIFRBQkxFIGAgdGFibGUgb2YgdGhlIEN1c3RvbWVyIGVudGl0eSBgIEFERCBgbmV3Q29sdW1uYCBJTlQgTk9UIE5VTEwgDQogICAgKiAgIEFMVEVSIFRBQkxFIGAgdGFibGUgb2YgdGhlIEN1c3RvbWVyIGVudGl0eSBgIERST1AgYG9sZENvbHVtbmAgDQogICAgKiA8L2NvZGU+DQogICAgKiANCiAgICAqICB0aGUgY29kZSBtdXN0IGJlIDoNCiAgICAqIA0KICAgICogPGNvZGU+DQogICAgKiAgICAgICAkY3VzdG9tZXIgPSBNeUF1dG9sb2FkOjpnZXRJbnN0YW5jZSgkdGhpcy0+R2V0TmFtZSgpLCAnY3VzdG9tZXInKTsNCiAgICAqICAgICAgIE9ybUNvcmU6OmFsdGVyVGFibGUoJGN1c3RvbWVyLCAiQUREIGBuZXdDb2x1bW5gIElOVCBOT1QgTlVMTCIpOw0KICAgICogICAgICAgT3JtQ29yZTo6YWx0ZXJUYWJsZSgkY3VzdG9tZXIsICJEUk9QIGBvbGRDb2x1bW5gIik7DQogICAgKiA8L2NvZGU+DQogICAgKiAgIA0KICAgICogDQogICAgKiBAcGFyYW0gT3JtRW50aXR5IGFuIGluc3RhbmNlIG9mIHRoZSBlbnRpdHkNCiAgICAqIEBwYXJhbSBzdHJpbmcgdGhlIFNRTCBxdWVyeQ0KICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBhbHRlclRhYmxlKE9ybUVudGl0eSAmJGVudGl0eVBhcmFtLCAkc3FsKSB7DQoJCSRkYiA9IGNtc21zKCktPkdldERiKCk7DQoJCQkNCgkJJHF1ZXJ5QWx0ZXIgPSAiQUxURVIgVEFCTEUgIi4kZW50aXR5UGFyYW0tPmdldERibmFtZSgpLiIgIi4kc3FsOyAgICANCgkJJHJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlBbHRlcik7DQoJCWlmICgkcmVzdWx0ID09PSBmYWxzZSl7ZGllKCJEYXRhYmFzZSBlcnJvciBkdXJhbnQgbCdhbHRlciBkZSBsYSB0YWJsZSAkZW50aXR5UGFyYW0tPmdldERibmFtZSgpISIpO30NCgl9DQogICAgDQogICAgLyoqDQogICAgICogSW5zZXJ0IGRhdGEgaW50byBkYXRhYmFzZS4NCiAgICAgKiANCiAgICAgKiBFeGFtcGxlIGZvciBhIG5ldyBDdXN0b21lciA6IGN1c3RvbWVyX2lkLCBuYW1lLCBsYXN0TmFtZSAob3B0aW9uYWwpIA0KICAgICAqICAgDQogICAgICogPGNvZGU+DQogICAgICogICAgICAgJGN1c3RvbWVyID0gTXlBdXRvbG9hZDo6Z2V0SW5zdGFuY2UoJHRoaXMtPkdldE5hbWUoKSwgJ2N1c3RvbWVyJyk7DQogICAgICogICAgICAgDQogICAgICogICAgICAgJGN1c3RvbWVyLT5zZXQoJ25hbWUnLCdEdXJhbnQnKTsNCiAgICAgKiAgICAgICAkY3VzdG9tZXItPnNldCgnbGFzdE5hbWUnPT4nSm9obicpOw0KICAgICAqIA0KICAgICAqICAgICAgIE9ybUNvcmU6Omluc2VydEVudGl0eSgkY3VzdG9tZXIpOw0KICAgICAqIDwvY29kZT4NCgkgKg0KCSAqIFlvdSBjb3VsZCBhbHNvIGNvZGUgZm9yIHRoZSBsYXN0IGxpbmUgOiAkY3VzdG9tZXItPnNhdmUoKTsgIGl0IHdpbGwgYXV0b21hdGljYWxseSANCiAgICAgKiANCiAgICAgKiBJbXBvcnRhbnQgOiB5b3UgbXVzdCBub3Qgc2V0IHRoZSBwcmltYXJ5S2V5IHZhbHVlLiBJdCB3aWxsIGJlIGNhbGN1bGF0ZSBieSB0aGUgc3lzdGVtIGl0LXNlbGYNCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICogQHBhcmFtIE9ybUVudGl0eSBhbiBpbnN0YW5jZSBvZiB0aGUgZW50aXR5DQoJICoNCiAgICAgKiBAcmV0dXJuIHRoZSBlbnRpdHkgc2F2ZWQgd2l0aCBpdHMgbmV3IG5ldyBJZCAoY3VzdG9tZXJfaWQgaW4gbXkgZXhhbXBsZSkNCiAgICAgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGluc2VydEVudGl0eShPcm1FbnRpdHkgJiRlbnRpdHlQYXJhbSkgew0KDQoJCSRkYiA9IGNtc21zKCktPkdldERiKCk7DQoJCSRsaXN0ZUZpZWxkID0gJGVudGl0eVBhcmFtLT5nZXRGaWVsZHMoKTsNCgkJJHZhbHVlcyA9ICRlbnRpdHlQYXJhbS0+Z2V0VmFsdWVzKCk7DQoJCSR1bmlxdWVzID0gJGVudGl0eVBhcmFtLT5nZXRVbmlxdWVLZXlzKCk7DQoNCgkJJHF1ZXJ5SW5zZXJ0ID0gJ0lOU0VSVCBJTlRPICcuJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKS4nICglcykgdmFsdWVzICglcyknOw0KDQoJCSRzdHIxID0gIiI7DQoJCSRzdHIyID0gIiI7DQoNCgkJJHBhcmFtcyA9IGFycmF5KCk7DQoJCQkgICANCgkJLy9BbGwgdGhlIHJlcXVpcmVkIHZhbHVlcyBtdXN0IGJlIHByZXNlbnQNCgkJZm9yZWFjaCgkbGlzdGVGaWVsZCBhcyAkZmllbGQpDQoJCXsNCgkJCWlmKCRmaWVsZC0+aXNBc3NvY2lhdGVLRVkoKSkgew0KCQkJCWNvbnRpbnVlOw0KCQkJfQ0KDQoJCQlpZighZW1wdHkoJHN0cjEpKSB7DQoJCQkJJHN0cjEgLj0gJywnOw0KCQkJCSRzdHIyIC49ICcsJzsNCgkJCX0NCgkJCSRzdHIxIC49ICcgJy4kZmllbGQtPmdldE5hbWUoKS4nICc7DQoJCQkkc3RyMiAuPSAnPyc7DQoJCQkNCgkJCWlmKCRmaWVsZC0+aXNQcmltYXJ5S0VZKCkpIHsNCgkJCQlpZighZW1wdHkoJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV0pKSB7DQoJCQkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oJ1ByaW1hcnkgS2V5ICcuJGZpZWxkLT5nZXROYW1lKCkuJyBjYW5cJ3QgYmUgc2V0dGVkIGR1cmluZyBpbnNlcnQgb3BlcmF0aW9uIGZvciBPcm1FbnRpdHknLiRlbnRpdHlQYXJhbS0+Z2V0TmFtZSgpKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkbmV3SWQgPSAkZGItPkdlbklEKCRlbnRpdHlQYXJhbS0+Z2V0U2VxbmFtZSgpKTsNCgkJCQkJJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV0gPSAkbmV3SWQ7DQoJCQkJCSRlbnRpdHlQYXJhbS0+c2V0KCRmaWVsZC0+Z2V0TmFtZSgpLCAkbmV3SWQpOw0KCQkJCX0NCgkJCX0NCgkJCQ0KCQkJLy9FbXB0eSBGaWVsZCB0aGF0IHNob3VsZG4ndCBiZSAhDQoJCQlpZighJGZpZWxkLT5pc051bGxhYmxlKCkgJiYgIWlzc2V0KCR2YWx1ZXNbJGZpZWxkLT5nZXROYW1lKCldKSkgew0KCQkJCS8vRXhjZXB0aW9uIDogaWYgdGhlIGZpZWxkIGhhdmUgYSBkZWZhdWx0IHZhbHVlIHdlIHNldCBpdCBtYW51YWxseQ0KCQkJCWlmKCRmaWVsZC0+Z2V0RGVmYXVsdFZhbHVlKCkgIT0gbnVsbCl7DQoJCQkJCSR2YWx1ZXNbJGZpZWxkLT5nZXROYW1lKCldID0gJGZpZWxkLT5nZXREZWZhdWx0VmFsdWUoKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCd0aGUgZmllbGQgJy4kZmllbGQtPmdldE5hbWUoKS4nIG9mIE9ybUVudGl0eSAgJy4kZW50aXR5UGFyYW0tPmdldE5hbWUoKS4nIGNhblwndCBiZSBudWxsJyk7DQoJCQkJfQ0KCQkJfQ0KCQkJDQoJCQkvLyBDb250cm9sIFVVSUQgdHlwZQ0KCQkJaWYoJGZpZWxkLT5nZXRUeXBlKCkgPT0gT3JtQ0FTVDo6JFVVSUQgJiYgIWVtcHR5KCR2YWx1ZXNbJGZpZWxkLT5nZXROYW1lKCldKSl7DQoJCQkJJHBhdHRlcm4gPSAiL15bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfSQvaSI7DQoJCQkJaWYoIXByZWdfbWF0Y2goJHBhdHRlcm4sICR2YWx1ZXNbJGZpZWxkLT5nZXROYW1lKCldKSl7DQoJCQkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oJ3RoZSBmaWVsZCAnLiRmaWVsZC0+Z2V0TmFtZSgpLicgb2YgT3JtRW50aXR5ICAnLiRlbnRpdHlQYXJhbS0+Z2V0TmFtZSgpLicgZG9lc25cJ3QgbWF0Y2ggdGhlIFVVSUQgcGF0dGVybiA6ICcuJHBhdHRlcm4pOw0KCQkJCX0NCgkJCX0NCgkJCQ0KCQkJDQoJCQkkdmFsID0gbnVsbDsNCgkJCWlmKGlzc2V0KCR2YWx1ZXNbJGZpZWxkLT5nZXROYW1lKCldKSkNCgkJCXsNCgkJCQkkcGFyYW1zW10gPSBPcm1Db3JlOjpGaWVsZFRvREJWYWx1ZSgkdmFsdWVzWyRmaWVsZC0+Z2V0TmFtZSgpXSwgJGZpZWxkLT5nZXRUeXBlKCkpOw0KCQkJfSBlbHNlIHsNCgkJCQkkcGFyYW1zW10gPSBudWxsOw0KCQkJfQ0KCQl9DQoJCQ0KCQkvL2NvbnRyb2wgdW5pY2l0eSBvbiB1bmlxdWUgRmllbGQNCgkJZm9yZWFjaCgkdW5pcXVlcyBhcyAkY291cGxlKXsNCgkJCWlmKCFpc19hcnJheSgkY291cGxlKSl7DQoJCQkJJGNvdXBsZSA9IGFycmF5KCRjb3VwbGUpOw0KCQkJfQ0KCQkJJHF1ZXJ5ID0gJ1NFTEVDVCBDT1VOVCgqKSBGUk9NICcuJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKS4nIFdIRVJFIDEgJzsNCgkJCSRhcnJheUZpbmQgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCgkY291cGxlIGFzICRlbHQpew0KCQkJCWlmKGVtcHR5KCR2YWx1ZXNbJGVsdF0pKXsNCgkJCQkJJHF1ZXJ5IC49ICcgQU5EICcgLiAkZWx0IC4gJyBJUyBOVUxMICc7DQoJCQkJfSBlbHNlIHsNCgkJCQkJJHF1ZXJ5IC49ICcgQU5EICcgLiAkZWx0IC4gJyA9ID8gJzsNCgkJCQkJJGFycmF5RmluZFtdID0gJHZhbHVlc1skZWx0XTsNCgkJCQl9DQoJCQl9DQoJCQkkcXVlcnkgLj0gJyBBTkQgJyAuICRlbnRpdHlQYXJhbS0+Z2V0UGsoKS0+Z2V0TmFtZSgpIC4gJyAhPSA/ICc7DQoJCQkkYXJyYXlGaW5kW10gPSAkdmFsdWVzWyRlbnRpdHlQYXJhbS0+Z2V0UGsoKS0+Z2V0TmFtZSgpXTsJCQkNCgkJCQkNCgkJCSRyZXN1bHQgPSAkZGItPmdldE9uZSgkcXVlcnksICRhcnJheUZpbmQpOw0KCQkJDQoJCQlpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsNCgkJCQlPcm1UcmFjZTo6ZXJyb3IocHJpbnRfcigkcGFyYW1zLCB0cnVlKSk7DQoJCQkJT3JtVHJhY2U6OmVycm9yKCRxdWVyeSk7DQoJCQkJT3JtVHJhY2U6OmVycm9yKCJEYXRhYmFzZSBlcnJvciBkdXJpbmcgdW5pY2l0eSBjb250cm9sISIuJGRiLT5FcnJvck1zZygpKTsNCgkJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCJEYXRhYmFzZSBlcnJvciBkdXJpbmcgdW5pY2l0eSBjb250cm9sISIuJGRiLT5FcnJvck1zZygpKTsNCgkJCX0NCgkJCQ0KCQkJaWYoJHJlc3VsdCAhPSAwKXsNCgkJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCdhbiBPcm1FbnRpdHkgJy4kZW50aXR5UGFyYW0tPmdldE5hbWUoKS4nIHdpdGggdGhlIHNhbWUgZmllbGRzIGFscmVhZHkgZXhpc3RzIGluIGRhdGFiYXNlJyk7DQoJCQl9DQoJCX0NCgkJICAJCSAgDQoJCS8vRXhlY3V0aW9uDQoJCSRkYi0+ZGVidWcgPSB0cnVlOw0KDQoJCU9ybVRyYWNlOjpkZWJ1ZygiaW5zZXJ0RW50aXR5IDogIi5zcHJpbnRmKCRxdWVyeUluc2VydCwgJHN0cjEsICRzdHIyKSk7DQoJCSRyZXN1bHQgPSAkZGItPkV4ZWN1dGUoc3ByaW50ZigkcXVlcnlJbnNlcnQsICRzdHIxLCAkc3RyMiksICRwYXJhbXMpOw0KCQlpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsNCgkJCU9ybVRyYWNlOjplcnJvcihwcmludF9yKCRwYXJhbXMsIHRydWUpKTsNCgkJCU9ybVRyYWNlOjplcnJvcihzcHJpbnRmKCRxdWVyeUluc2VydCwgJHN0cjEsICRzdHIyKSk7DQoJCQlPcm1UcmFjZTo6ZXJyb3IoIkRhdGFiYXNlIGVycm9yIGR1cmFudCBsJ2luc2VydCEiLiRkYi0+RXJyb3JNc2coKSk7DQoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCJEYXRhYmFzZSBlcnJvciBkdXJhbnQgbCdpbnNlcnQhIi4kZGItPkVycm9yTXNnKCkpOw0KCQl9DQoNCgkvKglpZigkZW50aXR5UGFyYW0tPmlzSW5kZXhhYmxlKCkpIHsgIA0KCQkJT3JtSW5kZXhpbmc6OkFkZFdvcmRzKCRlbnRpdHlQYXJhbS0+Z2V0TW9kdWxlTmFtZSgpLCBPcm1Db3JlOjpmaW5kQnlJZCgkZW50aXR5UGFyYW0sJGFycmF5S0VZWzBdKSk7DQoJCX0qLw0KCQkNCgkJLy9lbXB0eSBjYWNoZQ0KCQlPcm1DYWNoZTo6Y2xlYXJDYWNoZSgpOw0KCQkNCgkJcmV0dXJuICRlbnRpdHlQYXJhbTsNCg0KCX0NCgkNCiAgICAvKioNCiAgICAgKiAgVXBkYXRlIGRhdGEgaW50byBkYXRhYmFzZS4gVGhlIHRoaXJkIHBhcmFtZXRlciBtdXN0IGZvbGxvdyB0aGlzIHNjaGVtZQ0KICAgICAqIA0KICAgICAqIEV4YW1wbGUgZm9yIGEgbmV3IEN1c3RvbWVyIDogDQogICAgICogDQogICAgICogPGNvZGU+DQogICAgICogICAgICAgJG15QXJyYXkgPSBhcnJheSgpOw0KICAgICAqICAgICAgICRteUFycmF5W10gPSBhcnJheSgnY3VzdG9tZXJfaWQnPT4xLCAnbGFzdE5hbWUnPT5udWxsLCAnbmFtZSc9PidEdXBvbnQnKTsgICAgPC0tIHVwZGF0ZSBOYW1lIHZhbHVlLCBlcmFzZSBsYXN0TmFtZSB2YWx1ZSBpbiBkYXRhYmFzZQ0KICAgICAqICAgICAgICRteUFycmF5W10gPSBhcnJheSgnY3VzdG9tZXJfaWQnPT4yLCAnbmFtZSc9PidEdXJhbnQnKTsgICAgICAgICAgICAgICAgICAgICAgPC0tIHVwZGF0ZSBOYW1lIHZhbHVlDQogICAgICogICAgICAgJG15QXJyYXlbXSA9IGFycmF5KCdjdXN0b21lcl9pZCc9PjMsICdsYXN0TmFtZSc9PidKb2huJywgJ25hbWUnPT4nRG9lJyk7ICAgICA8LS0gdXBkYXRlIE5hbWUgdmFsdWUgYW5kIGxhc3ROYW1lIHZhbHVlDQogICAgICogDQogICAgICogICAgICAgJGN1c3RvbWVyID0gTXlBdXRvbG9hZDo6Z2V0SW5zdGFuY2UoJHRoaXMtPkdldE5hbWUoKSwgJ2N1c3RvbWVyJyk7DQogICAgICogICAgICAgDQogICAgICogICAgICAgJGN1c3RvbWVyID0gT3JtQ29yZTo6ZmluZEJ5SWQoJGN1c3RvbWVyLCAxKTsNCiAgICAgKiAgICAgICAkY3VzdG9tZXItPnNldCgnbGFzdE5hbWUnPT4nTmV3TGFzdE5hbWUnKTsNCiAgICAgKiANCiAgICAgKiAgICAgICBPcm1Db3JlOjp1cGRhdGVFbnRpdHkoJGN1c3RvbWVyKTsNCiAgICAgKiA8L2NvZGU+DQogICAgICogCSANCiAgICAgKiBZb3UgY291bGQgYWxzbyBjb2RlIGZvciB0aGUgbGFzdCBsaW5lIDogJGN1c3RvbWVyLT5zYXZlKCk7ICBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgDQoJICoNCiAgICAgKiBAcGFyYW0gT3JtRW50aXR5IGFuIGluc3RhbmNlIG9mIHRoZSBlbnRpdHkNCgkgKg0KCSAqIEByZXR1cm4gdGhlIGVudGl0eSBzYXZlZCB3aXRoIGl0cyBuZXcgSWQgKGN1c3RvbWVyX2lkIGluIG15IGV4YW1wbGUpDQogICAgICovCQ0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gdXBkYXRlRW50aXR5KE9ybUVudGl0eSAmJGVudGl0eVBhcmFtKSB7DQoNCgkJJGRiID0gY21zbXMoKS0+R2V0RGIoKTsNCgkJJGxpc3RlRmllbGQgPSAkZW50aXR5UGFyYW0tPmdldEZpZWxkcygpOw0KCQkkdmFsdWVzID0gJGVudGl0eVBhcmFtLT5nZXRWYWx1ZXMoKTsNCgkJJHVuaXF1ZXMgPSAkZW50aXR5UGFyYW0tPmdldFVuaXF1ZUtleXMoKTsNCg0KCQkkc3RyID0gIiI7DQoJCSR3aGVyZSA9ICcnOw0KCQkkcGFyYW1zID0gYXJyYXkoKTsNCgkJJGhhc0tleSA9IGZhbHNlOw0KCQkgIA0KCQkvL0FsbCB0aGUgcmVxdWlyZWQgdmFsdWVzIG11c3QgYmUgcHJlc2VudA0KCQlmb3JlYWNoKCRsaXN0ZUZpZWxkIGFzICRmaWVsZCkgew0KCQkNCgkJCS8vaWYgdGhlIGZpZWxkIGlzIGVtcHR5IGFuZCB3ZSBoYXZlIGEgZGVmYXVsdCB2YWx1ZSB3ZSBzZXQgaXQgbWFudWFsbHkNCgkJCWlmKGVtcHR5KCR2YWx1ZXNbJGZpZWxkLT5nZXROYW1lKCldKSAmJiAkZmllbGQtPmdldERlZmF1bHRWYWx1ZSgpICE9IG51bGwpew0KCQkJCSR2YWx1ZXNbJGZpZWxkLT5nZXROYW1lKCldID0gJGZpZWxkLT5nZXREZWZhdWx0VmFsdWUoKTsNCgkJCX0gDQoJCQ0KCQkJLy9JZiBpdCdzIG5vdCBzZXQNCgkJCWlmKGVtcHR5KCR2YWx1ZXNbJGZpZWxkLT5nZXROYW1lKCldKSkgew0KCQkJDQoJCQkJLy9JZiBpdCdzIGEgcHJpbWFyeUtleSB3ZSB0aHJvdyBhIGV4Y2VwdGlvbg0KCQkJCWlmKCRmaWVsZC0+aXNQcmltYXJ5S0VZKCkpIHsNCgkJCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigndGhlIHByaW1hcnlLZXkgJy4kZmllbGQtPmdldE5hbWUoKS4nIGlzIG1pc3NpbmcgZm9yIHRoZSBlbnRpdHkgOiAnLiRlbnRpdHlQYXJhbS0+Z2V0TmFtZSgpKTsNCgkJCQl9DQoJCQkJDQoJCQkJLy9hbiBlbXB0eSBhc3NvY2lhdGl2ZSBmaWVsZCA6IG5vIHByb2JsZW0sIHdlIGNhbiBwYXNzDQoJCQkJaWYoJGZpZWxkLT5pc0Fzc29jaWF0ZUtFWSgpKSB7DQoJCQkJCWNvbnRpbnVlOw0KCQkJCX0NCgkJCQkNCgkJCQkvL0lmIGl0J3MgYSBubyBudWxsYWJsZSBmaWVsZCB3ZSB0aHJvdyBhIGV4Y2VwdGlvbg0KCQkJCWlmKCEkZmllbGQtPmlzTnVsbGFibGUoKSkgew0KCQkJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCd0aGUgZmllbGQgJy4kZmllbGQtPmdldE5hbWUoKS4nIG9mIEVudGl0eSAgJy4kZW50aXR5UGFyYW0tPmdldE5hbWUoKS4nIGNhblwndCBiZSBudWxsJyk7DQoJCQkJfQ0KCQkJfSBlbHNlIHsNCgkJCQkvLyBDb250cm9sIFVVSUQgdHlwZQ0KCQkJCWlmKCRmaWVsZC0+Z2V0VHlwZSgpID09IE9ybUNBU1Q6OiRVVUlEKXsNCgkJCQkJJHBhdHRlcm4gPSAnL15bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfSQvaSc7DQoJCQkJCQ0KCQkJCQlpZighcHJlZ19tYXRjaCgkcGF0dGVybiwgJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV0pKXsNCgkJCQkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oJ3RoZSBmaWVsZCAnLiRmaWVsZC0+Z2V0TmFtZSgpLicgb2YgRW50aXR5ICAnLiRlbnRpdHlQYXJhbS0+Z2V0TmFtZSgpLicgZG9lc25cJ3QgbWF0Y2ggdGhlIFVVSUQgcGF0dGVybiA6ICcuJHBhdHRlcm4pOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJDQoJCQkNCgkJCQ0KCQkJLy9JZiBpdCdzIGEgcHJpbWFyeUtleQ0KCQkJaWYoJGZpZWxkLT5pc1ByaW1hcnlLRVkoKSkgew0KCQkJCSR3aGVyZSA9ICcgV0hFUkUgJy4kZmllbGQtPmdldE5hbWUoKS4nID0gPyc7DQoJCQkJJGhhc0tleSA9IHRydWU7DQoJCQkJJGtleVZhbHVlID0gJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV07DQoJCQl9DQoNCgkJCWlmKCFlbXB0eSgkc3RyKSkgew0KCQkJICAkc3RyIC49ICcsJzsNCgkJCX0NCg0KCQkJJHN0ciAuPSAnICcuJGZpZWxkLT5nZXROYW1lKCkuJyA9ID8gJzsNCg0KCQkJJHBhcmFtc1tdID0gT3JtQ29yZTo6RmllbGRUb0RCVmFsdWUoJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV0sICRmaWVsZC0+Z2V0VHlwZSgpKTsNCg0KCQl9DQoJCQ0KCQkvL2NvbnRyb2wgdW5pY2l0eSBvbiB1bmlxdWUgRmllbGQNCgkJZm9yZWFjaCgkdW5pcXVlcyBhcyAkY291cGxlKXsNCgkJCWlmKCFpc19hcnJheSgkY291cGxlKSl7DQoJCQkJJGNvdXBsZSA9IGFycmF5KCRjb3VwbGUpOw0KCQkJfQ0KCQkJJHF1ZXJ5ID0gJ1NFTEVDVCBDT1VOVCgqKSBGUk9NICcuJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKS4nIFdIRVJFIDEgJzsNCgkJCSRhcnJheUZpbmQgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCgkY291cGxlIGFzICRlbHQpew0KCQkJCWlmKGVtcHR5KCR2YWx1ZXNbJGVsdF0pKXsNCgkJCQkJJHF1ZXJ5IC49ICcgQU5EICcgLiAkZWx0IC4gJyBJUyBOVUxMICc7DQoJCQkJfSBlbHNlIHsNCgkJCQkJJHF1ZXJ5IC49ICcgQU5EICcgLiAkZWx0IC4gJyA9ID8gJzsNCgkJCQkJJGFycmF5RmluZFtdID0gJHZhbHVlc1skZWx0XTsNCgkJCQl9DQoJCQl9DQoJCQkkcXVlcnkgLj0gJyBBTkQgJyAuICRlbnRpdHlQYXJhbS0+Z2V0UGsoKS0+Z2V0TmFtZSgpIC4gJyAhPSA/ICc7DQoJCQkkYXJyYXlGaW5kW10gPSAkdmFsdWVzWyRlbnRpdHlQYXJhbS0+Z2V0UGsoKS0+Z2V0TmFtZSgpXTsJCQkNCgkJCQkNCgkJCSRyZXN1bHQgPSAkZGItPmdldE9uZSgkcXVlcnksICRhcnJheUZpbmQpOw0KCQkJDQoJCQlpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsNCgkJCQlPcm1UcmFjZTo6ZXJyb3IocHJpbnRfcigkcGFyYW1zLCB0cnVlKSk7DQoJCQkJT3JtVHJhY2U6OmVycm9yKCRxdWVyeSk7DQoJCQkJT3JtVHJhY2U6OmVycm9yKCJEYXRhYmFzZSBlcnJvciBkdXJpbmcgdW5pY2l0eSBjb250cm9sISIuJGRiLT5FcnJvck1zZygpKTsNCgkJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCJEYXRhYmFzZSBlcnJvciBkdXJpbmcgdW5pY2l0eSBjb250cm9sISIuJGRiLT5FcnJvck1zZygpKTsNCgkJCX0NCgkJCQ0KCQkJaWYoJHJlc3VsdCAhPSAwKXsNCgkJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCdhbiBFbnRpdHkgJy4kZW50aXR5UGFyYW0tPmdldE5hbWUoKS4nIHdpdGggdGhlIHNhbWUgZmllbGRzIGFscmVhZHkgZXhpc3RzIGluIGRhdGFiYXNlJyk7DQoJCQl9DQoJCX0NCg0KCQlpZigkaGFzS2V5KSB7DQoJCQkkcGFyYW1zW10gPSAka2V5VmFsdWU7DQoJCX0NCg0KCQkkcXVlcnlVcGRhdGUgPSAnVVBEQVRFICcuJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKS4nIFNFVCAnLiRzdHIuJHdoZXJlOw0KDQoJCS8vRXhlY3V0aW9uDQoJCSRyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5VXBkYXRlLCAkcGFyYW1zKTsNCgkJaWYgKCRyZXN1bHQgPT09IGZhbHNlKXtkaWUoIkRhdGFiYXNlIGVycm9yIGR1cmFudCBsJ3VwZGF0ZSEiKTt9DQoJCS8qaWYoJGVudGl0eVBhcmFtLT5pc0luZGV4YWJsZSgpKSB7ICANCgkJCU9ybUluZGV4aW5nOjpVcGRhdGVXb3JkcygkZW50aXR5UGFyYW0tPmdldE1vZHVsZU5hbWUoKSwgJGVudGl0eVBhcmFtKTsNCgkJfSovDQoJCQ0KCQkvL2VtcHR5IGNhY2hlDQoJCU9ybUNhY2hlOjpjbGVhckNhY2hlKCk7DQoJCQ0KCQlyZXR1cm4gJGVudGl0eVBhcmFtOw0KCX0NCiAgDQogICAgLyoqDQogICAgKiBEZWxldGUgaW5mb3JtYXRpb24gaW50byBkYXRhYmFzZQ0KICAgICogICANCiAgICAqIEV4YW1wbGUgZm9yIGEgc2luZ2xlIGRlbGV0aW9uIDogDQogICAgKiANCiAgICAqIDxjb2RlPg0KICAgICogICAgICAgJGN1c3RvbWVyID0gTXlBdXRvbG9hZDo6Z2V0SW5zdGFuY2UoJHRoaXMtPkdldE5hbWUoKSwgJ2N1c3RvbWVyJyk7DQogICAgKiANCiAgICAqICAgICAgIE9ybUNvcmU6OmRlbGV0ZUJ5SWRzKCRjdXN0b21lciwgYXJyYXkoMSk7DQogICAgKiA8L2NvZGU+DQogICAgKiANCiAgICAqICBFeGFtcGxlIGZvciBtdWx0aXBsZSBkZWxldGlvbiA6IA0KICAgICogDQogICAgKiA8Y29kZT4NCiAgICAqICAgICAgICRteUFycmF5ID0gYXJyYXkoKTsNCiAgICAqICAgICAgICRteUFycmF5W10gPSAxOw0KICAgICogICAgICAgJG15QXJyYXlbXSA9IDI7DQogICAgKiAgICAgICAkbXlBcnJheVtdID0gMzsNCiAgICAqIA0KICAgICogICAgICAgJGN1c3RvbWVyID0gTXlBdXRvbG9hZDo6Z2V0SW5zdGFuY2UoJHRoaXMtPkdldE5hbWUoKSwgJ2N1c3RvbWVyJyk7DQogICAgKiANCiAgICAqICAgICAgIE9ybUNvcmU6OmRlbGV0ZUJ5SWRzKCRjdXN0b21lciwgJG15QXJyYXkpOw0KICAgICogPC9jb2RlPg0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAqIEBwYXJhbSBPcm1FbnRpdHkgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eSAgICANCiAgICAqIEBwYXJhbSBhcnJheSBhbGwgdGhlIGlkcyB0byBkZWxldGUgKCRjdXN0b21lcl9pZCBpbiBteSBleGFtcGxlKQ0KICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBkZWxldGVCeUlkcyhPcm1FbnRpdHkgJiRlbnRpdHlQYXJhbSwgJGlkcykgew0KDQoJCSRkYiA9IGNtc21zKCktPkdldERiKCk7DQoJCSRsaXN0ZUZpZWxkID0gJGVudGl0eVBhcmFtLT5nZXRGaWVsZHMoKTsNCg0KCQlmb3JlYWNoKCRsaXN0ZUZpZWxkIGFzICRmaWVsZCkNCgkJew0KCQkgIGlmKCEkZmllbGQtPmlzUHJpbWFyeUtFWSgpKQ0KCQkgIHsgDQoJCQljb250aW51ZTsNCgkJICB9DQoJCSAgJHR5cGUgPSAkZmllbGQtPmdldFR5cGUoKTsNCgkJICAkbmFtZSA9ICRmaWVsZC0+Z2V0TmFtZSgpOw0KCQl9ICANCg0KCQkkd2hlcmUgPSAnJzsNCgkJZm9yZWFjaCgkaWRzIGFzICRzaWQpDQoJCXsNCgkJICBpZighZW1wdHkoJHdoZXJlKSkNCgkJICB7DQoJCQkkd2hlcmUgLj0gJyBPUiAnOw0KCQkgIH0NCgkJICANCgkJICAkd2hlcmUgLj0gJG5hbWUuJyA9ID8nOw0KCQkgICRwYXJhbXNbXSA9IE9ybUNvcmU6OkZpZWxkVG9EQlZhbHVlKCRzaWQsICR0eXBlKTsgIA0KCQl9DQoNCg0KCQkkcXVlcnlEZWxldGUgPSAnREVMRVRFIEZST00gJy4kZW50aXR5UGFyYW0tPmdldERibmFtZSgpLicgV0hFUkUgJy4kd2hlcmU7DQoNCgkJLy9FeGVjdXRpb24NCgkJJHJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlEZWxldGUsICRwYXJhbXMpOw0KCQlpZiAoJHJlc3VsdCA9PT0gZmFsc2Upe2RpZSgiRGF0YWJhc2UgZXJyb3IgZHVyYW50IGxhIHN1cHByZXNzaW9uISIpO30NCg0KCQlpZigkZW50aXR5UGFyYW0tPmlzSW5kZXhhYmxlKCkpDQoJCXsgIA0KCQkgIC8vICRtb2RvcHMgPSBjbXNtcygpLT5HZXRNb2R1bGVPcGVyYXRpb25zKCk7DQoJCSAgLy8gaWYobWV0aG9kX2V4aXN0cygkbW9kb3BzLCJHZXRTZWFyY2hNb2R1bGUiKSkNCgkJICAvLyB7DQoJCQkvLyBPcm1JbmRleGluZzo6c2V0U2VhcmNoKCRtb2RvcHMtPkdldFNlYXJjaE1vZHVsZSgpKTsNCgkJICAvLyB9IGVsc2UNCgkJICAvLyB7DQoJCQkvLyBkaWUoImtvIik7DQoJCSAgLy8gfQ0KCQkgIGZvcmVhY2goJGlkcyBhcyAkc2lkKQ0KCQkgIHsNCgkJCU9ybUluZGV4aW5nOjpEZWxldGVXb3JkcygkZW50aXR5UGFyYW0tPmdldE1vZHVsZU5hbWUoKSwgJGVudGl0eVBhcmFtLCAkc2lkKTsNCgkJICB9DQoJCSAgDQoJCX0NCgkJDQoJCS8vZW1wdHkgY2FjaGUNCgkJT3JtQ2FjaGU6OmNsZWFyQ2FjaGUoKTsNCgl9DQogICANCiAgICAvKioNCiAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBmcm9tIHRoZSB0YWJsZSBvZiB0aGUgZW50aXR5IGluIFBhcmFtZXRlcnMNCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICogQHBhcmFtIE9ybUVudGl0eSBhbiBpbnN0YW5jZSBvZiB0aGUgZW50aXR5ICAgIA0KCSogDQogICAgKiBAcmV0dXJuIGludCB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIGZyb20gdGhlIHRhYmxlICAgDQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGNvdW50QWxsKE9ybUVudGl0eSAmJGVudGl0eVBhcmFtKSB7DQoNCgkJJGRiID0gY21zbXMoKS0+R2V0RGIoKTsNCg0KCQkkcXVlcnlTZWxlY3QgPSAnU2VsZWN0IGNvdW50KCopIEZST00gJy4kZW50aXR5UGFyYW0tPmdldERibmFtZSgpOw0KDQoJCU9ybVRyYWNlOjpkZWJ1ZygiY291bnRBbGwgOiAiLiRxdWVyeVNlbGVjdCk7DQoJCSAgDQoJCSRjb21wdGV1cj0gJGRiLT5nZXRPbmUoJHF1ZXJ5U2VsZWN0KTsNCgkJaWYgKCRjb21wdGV1ciA9PT0gZmFsc2Upe2RpZSgiRGF0YWJhc2UgZXJyb3IgZHVyYW50IGxhIHJlcXVldGUgY291bnQoKikhIik7fQ0KDQoJCXJldHVybiAkY29tcHRldXI7DQoJfQ0KICANCiAgICAvKioNCiAgICAqIFJldHVybnMgYWxsIHRoZSBvY2N1cnJlbmNlcyBmcm9tIHRoZSB0YWJsZSBvZiB0aGUgZW50aXR5IGluIFBhcmFtZXRlcnMNCiAgICAqIA0KICAgICogQHBhcmFtIE9ybUVudGl0eSBhbiBpbnN0YW5jZSBvZiB0aGUgZW50aXR5ICANCgkqDQogICAgKiBAcmV0dXJuIGFycmF5PE9ybUVudGl0eT4gbGlzdCBvZiBFbnRpdGllcyBmb3VuZA0KICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBmaW5kQWxsKE9ybUVudGl0eSAmJGVudGl0eVBhcmFtKSB7DQoJCSRkYiA9IGNtc21zKCktPkdldERiKCk7DQoNCgkJJHF1ZXJ5U2VsZWN0ID0gJ1NlbGVjdCAqIEZST00gJy4kZW50aXR5UGFyYW0tPmdldERibmFtZSgpOw0KDQoJCS8vSWYgaXQncyBhbHJlYWR5IGluIHRoZSBjYWNoZSwgd2UgcmV0dXJuIHRoZSByZXN1bHQNCgkJaWYoT3JtQ2FjaGU6OmlzQ2FjaGUoJHF1ZXJ5U2VsZWN0KSkgew0KCQkJJGVudGl0aWVzID0gT3JtQ2FjaGU6OmdldENhY2hlKCRxdWVyeVNlbGVjdCk7DQoJCX0gZWxzZSB7DQoJCQkkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeVNlbGVjdCk7DQoJCQlpZiAoJHJlc3VsdCA9PT0gZmFsc2Upe2RpZSgiRGF0YWJhc2UgZXJyb3IgZHVyaW5nIE9ybUNvcmU6OmZpbmRBbGwoT3JtRW50aXR5ICYkZW50aXR5UGFyYW0pIik7fQ0KDQoJCQkkZW50aXRpZXMgPSBPcm1Db3JlOjpfcHJvY2Vzc0FycmF5RW50aXR5KCRlbnRpdHlQYXJhbSwgJHJlc3VsdCk7DQoJCQkNCgkJCS8vV2UgcHVzaCB0aGUgcmVzdWx0IGludG8gdGhlIGNhY2hlIGJlZm9yZSByZXR1cm4gaXQNCgkJCU9ybUNhY2hlOjpzZXRDYWNoZSgkcXVlcnlTZWxlY3QsIG51bGwsICRlbnRpdGllcyk7DQoJCX0NCgkJDQoJCXJldHVybiBhcnJheV92YWx1ZXMoJGVudGl0aWVzKTsNCgl9DQoJDQoJLyoqDQoJICogSW5uZXIgZnVuY3Rpb24gdG8gZmFjdG9yaXplIHNvbWUgY29kZSBmb3IgZWFjaCAiZmluZCoiIGZ1bmN0aW9ucw0KCSAqICBJdCB3aWxsIHJldHJpZXZlIGFsbCB0aGUgaW5mb3JtYXRpb25zIG9uIHRoZSBBSydzIEZpZWxkDQoJICoNCiAgICAgKiBAcGFyYW0gT3JtRW50aXR5IGFuIGluc3RhbmNlIG9mIHRoZSBlbnRpdHkgIA0KCSAqIEBwYXJhbSByZXN1bHRRdWVyeSB0aGUgcmV0dXJuZWQgdmFsdWUgb2Ygc3FsIGV4ZWN1dGlvbg0KCSAqDQogICAgICogQHJldHVybiBhcnJheTxPcm1FbnRpdHk+IGxpc3Qgb2YgRW50aXRpZXMgcG9wdWxhdGUgd2l0aCBhbGwgdGhlIGluZm9ybWF0aW9ucyBvbiBBSydzIEZpZWxkDQoJICoqLw0KCXByaXZhdGUgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIF9wcm9jZXNzQXJyYXlFbnRpdHkoT3JtRW50aXR5ICYkZW50aXR5UGFyYW0sICRyZXN1bHRRdWVyeSkgew0KCQ0KCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOw0KCQkNCgkJJGVudGl0eXMgPSBhcnJheSgpOw0KCQl3aGlsZSAoJHJvdyA9ICRyZXN1bHRRdWVyeS0+RmV0Y2hSb3coKSkgew0KCQkgICRhbkVudGl0eSA9IE9ybUNvcmU6OnJvd1RvRW50aXR5KCRlbnRpdHlQYXJhbSwgJHJvdyk7DQoJCSAgJGVudGl0eXNbJGFuRW50aXR5LT5nZXQoJGFuRW50aXR5LT5nZXRQaygpLT5nZXROYW1lKCkpXSA9ICRhbkVudGl0eTsNCgkJfQ0KCQkJCQ0KCQkvL1Rlc3QgdGhlIHByZXNlbmNlIG9mICRBSw0KCQkkbGlzdGVGaWVsZCA9ICRlbnRpdHlQYXJhbS0+Z2V0RmllbGRzKCk7DQoJCWZvcmVhY2goJGxpc3RlRmllbGQgYXMgJGZpZWxkKSB7DQoJCSAgaWYoJGZpZWxkLT5pc0Fzc29jaWF0ZUtFWSgpKSB7DQoJCQkNCgkJCS8vSW5pdGlhdGUgdGhlIGZpZWxkIGFzc29jaWF0ZSB3aXRoIGFuIGVtcHR5IGFycmF5Lg0KCQkJZm9yZWFjaChhcnJheV9rZXlzKCRlbnRpdHlzKSBhcyAka2V5KXsNCgkJCQkkZW50aXR5c1ska2V5XS0+c2V0KCRmaWVsZC0+Z2V0TmFtZSgpLCBhcnJheSgpKTsNCgkJCX0NCgkJICANCgkJCWxpc3QoJGVudGl0eUFzc29jTmFtZSwgJGZpZWxkQXNzb2NpYXRlTmFtZSkgPSBleHBsb2RlKCIuIiwgJGZpZWxkLT5nZXRLRVlOYW1lKCkpOw0KCQkJJGVudGl0eUFzc29jID0gbmV3ICRlbnRpdHlBc3NvY05hbWUoKTsNCgkJCQ0KCQkJJHF1ZXJ5QWRkID0gJ1NFTEVDVCAqIEZST00gJy4kZW50aXR5QXNzb2MtPmdldERibmFtZSgpLicgV0hFUkUgJy4kZmllbGRBc3NvY2lhdGVOYW1lLicgaW4gKCcuaW1wbG9kZSgnLCcsYXJyYXlfa2V5cygkZW50aXR5cykpLicpJzsNCgkJCSRyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5QWRkKTsNCgkJCWlmICgkcmVzdWx0ID09PSBmYWxzZSl7ZGllKCJEYXRhYmFzZSBlcnJvciBkdXJpbmcgcmVxdWVzdCB0byBnZXQgYXNzb2NpYXRpdmUgZW50aXR5ICRlbnRpdHlBc3NvY05hbWUhIik7fQ0KCQkJd2hpbGUgKCRyb3dBc3NvY2lhdGUgPSAkcmVzdWx0LT5GZXRjaFJvdygpKSB7DQoJCQkJJGFycmF5SWRFbnRpdGllc0Rlc3QgPSAkZW50aXR5c1skcm93QXNzb2NpYXRlWyRmaWVsZEFzc29jaWF0ZU5hbWVdXS0+Z2V0KCRmaWVsZC0+Z2V0TmFtZSgpKTsNCgkJCQkkYXJyYXlJZEVudGl0aWVzRGVzdFtdID0gJHJvd0Fzc29jaWF0ZVskZW50aXR5QXNzb2MtPmdldFBrKCktPmdldE5hbWUoKV07DQoJCQkJJGVudGl0eXNbJHJvd0Fzc29jaWF0ZVskZmllbGRBc3NvY2lhdGVOYW1lXV0tPnNldCgkZmllbGQtPmdldE5hbWUoKSwkYXJyYXlJZEVudGl0aWVzRGVzdCk7DQoJCQl9DQoJCSAgfSANCgkJfQ0KCQkNCgkJcmV0dXJuICRlbnRpdHlzOw0KCX0NCiAgDQoJLyoqDQoJKiBSZXR1cm4gYSBPcm1FbnRpdHkgZnJvbSBpdHMgSWQNCgkqIA0KCSogQHBhcmFtIE9ybUVudGl0eSBhbiBpbnN0YW5jZSBvZiB0aGUgZW50aXR5ICANCgkqIEBwYXJhbSBpbnQgdGhlIElkIHRvIGZpbmQNCgkqIEByZXR1cm4gT3JtRW50aXR5IHRoZSBPcm1FbnRpdHkgZm91bmQgb3IgTlVMTA0KCSovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBmaW5kQnlJZChPcm1FbnRpdHkgJiRlbnRpdHlQYXJhbSwgJGlkKSB7DQoJCSRsaXN0ZSA9IE9ybUNvcmU6OmZpbmRCeUlkcygkZW50aXR5UGFyYW0sIGFycmF5KCRpZCkpOw0KCQkNCgkJaWYoIWlzc2V0KCRsaXN0ZVswXSkpew0KCQkJcmV0dXJuIG51bGw7DQoJCX0NCgkJDQoJCXJldHVybiAkbGlzdGVbMF07DQoJfQ0KICANCgkvKioNCgkqIFJldHVybiBFbnRpdGllcyBmcm9tIHRoZWlyIElkcw0KCSogDQoJKiBAcGFyYW0gT3JtRW50aXR5IGFuIGluc3RhbmNlIG9mIHRoZSBlbnRpdHkgIA0KCSogQHBhcmFtIGFycmF5IGxpc3Qgb2YgdGhlIElkcyB0byBmaW5kDQoJKg0KCSogQHJldHVybiBhcnJheTxPcm1FbnRpdHk+IGxpc3Qgb2YgRW50aXRpZXMgZm91bmQNCgkqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gZmluZEJ5SWRzKE9ybUVudGl0eSAmJGVudGl0eVBhcmFtLCAkaWRzKSB7DQoJCWlmKGNvdW50KCRpZHMpID09IDApDQoJCSAgcmV0dXJuIGFycmF5KCk7DQoJCQkNCgkJJGRiID0gY21zbXMoKS0+R2V0RGIoKTsNCgkJJGxpc3RlRmllbGQgPSAkZW50aXR5UGFyYW0tPmdldEZpZWxkcygpOw0KCQkkd2hlcmUgPSAiIjsNCgkJCQ0KCQlmb3JlYWNoKCRsaXN0ZUZpZWxkIGFzICRmaWVsZCkgew0KCQkgIGlmKCEkZmllbGQtPmlzUHJpbWFyeUtFWSgpKSB7IA0KCQkJY29udGludWU7DQoJCSAgfQ0KCQkgIA0KCQkgIGZvcmVhY2goJGlkcyBhcyAkaWQpIHsNCgkJCWlmKCFlbXB0eSgkd2hlcmUpKSB7DQoJCQkgICR3aGVyZSAuPSAnIE9SICc7DQoJCQl9DQoJCQkJICANCgkJCSR3aGVyZSAuPSAkZmllbGQtPmdldE5hbWUoKS4nID0gPyc7DQoJCQkkcGFyYW1zW10gPSBPcm1Db3JlOjpGaWVsZFRvREJWYWx1ZSgkaWQsICRmaWVsZC0+Z2V0VHlwZSgpKTsNCgkJICB9DQoJCX0NCg0KCQkkcXVlcnlTZWxlY3QgPSAnU2VsZWN0ICogRlJPTSAnLiRlbnRpdHlQYXJhbS0+Z2V0RGJuYW1lKCkuJyBXSEVSRSAnLiR3aGVyZTsNCg0KCQkvL0lmIGl0J3MgYWxyZWFkeSBpbiB0aGUgY2FjaGUsIHdlIHJldHVybiB0aGUgcmVzdWx0DQoJCWlmKE9ybUNhY2hlOjppc0NhY2hlKCRxdWVyeVNlbGVjdCwgJHBhcmFtcykpIHsNCgkJICAkZW50aXRpZXMgPSBPcm1DYWNoZTo6Z2V0Q2FjaGUoJHF1ZXJ5U2VsZWN0LCRwYXJhbXMpOw0KCQl9IGVsc2Ugew0KCQkJJHJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlTZWxlY3QsICRwYXJhbXMpOw0KCQkJaWYgKCRyZXN1bHQgPT09IGZhbHNlKXtkaWUoIkRhdGFiYXNlIGVycm9yIGR1cmFudCBsYSByZXF1ZXRlIHBhciBJZHMhIik7fQ0KDQoJCQkkZW50aXRpZXMgPSBPcm1Db3JlOjpfcHJvY2Vzc0FycmF5RW50aXR5KCRlbnRpdHlQYXJhbSwgJHJlc3VsdCk7DQoJCQkNCgkJCS8vV2UgcHVzaCB0aGUgcmVzdWx0IGludG8gdGhlIGNhY2hlIGJlZm9yZSByZXR1cm4gaXQNCgkJCU9ybUNhY2hlOjpzZXRDYWNoZSgkcXVlcnlTZWxlY3QsIG51bGwsICRlbnRpdGllcyk7DQoJCX0NCg0KCQlyZXR1cm4gYXJyYXlfdmFsdWVzKCRlbnRpdGllcyk7DQoJfQ0KICANCiAgICAvKioNCiAgICAgKiBBbGxvdyBzZWFyY2ggYSBsaXN0IG9mIE9ybUVudGl0eSBmcm9tIGEgbGlzdCBvZiBPcm1Dcml0ZXJpYQ0KICAgICAqIA0KICAgICAqIEV4YW1wbGUgOiBmaW5kIHRoZSBjdXN0b21lcnMgd2l0aCBsYXN0TmFtZSAnUm9nZXInIChubyBjYXNzZSBzZW5zaXRpdmUpDQogICAgICogDQogICAgICogIDxjb2RlPg0KICAgICAqICAgICAgICRjdXN0b21lciA9IE15QXV0b2xvYWQ6OmdldEluc3RhbmNlKCR0aGlzLT5HZXROYW1lKCksICdjdXN0b21lcicpOw0KICAgICAqIA0KICAgICAqICAgICAgICRleGFtcGxlID0gbmV3IE9ybUV4YW1wbGUoKTsNCiAgICAgKiAgICAgICAkZXhhbXBsZS0+YWRkQ3JpdGVyaWEoJ2xhc3ROYW1lJywgT3JtVHlwZUNyaXRlcmlhOjokRVEsIGFycmF5KCdyb2dlcicpLCB0cnVlKTsNCiAgICAgKiANCiAgICAgKiAgICAgICBPcm1Db3JlOjpmaW5kQnlFeGFtcGxlKCRjdXN0b21lciwgJGV4YW1wbGUpOw0KICAgICAqIDwvY29kZT4NCiAgICAgKiANCiAgICAgKiAgRXhhbXBsZSA6IGZpbmQgdGhlIGN1c3RvbWVycyB3aXRoIElkID49IDkwDQogICAgICogDQogICAgICogPGNvZGU+DQogICAgICogICAgICAgJGN1c3RvbWVyID0gTXlBdXRvbG9hZDo6Z2V0SW5zdGFuY2UoJHRoaXMtPkdldE5hbWUoKSwgJ2N1c3RvbWVyJyk7DQogICAgICogDQogICAgICogICAgICAgJGV4YW1wbGUgPSBuZXcgT3JtRXhhbXBsZSgpOw0KICAgICAqICAgICAgICRleGFtcGxlLT5hZGRDcml0ZXJpYSgnY3VzdG9tZXJfaWQnLCBPcm1UeXBlQ3JpdGVyaWE6OiRHVEUsIGFycmF5KDkwKSk7DQogICAgICogDQogICAgICogICAgICAgT3JtQ29yZTo6ZmluZEJ5RXhhbXBsZSgkY3VzdG9tZXIsICRleGFtcGxlKTsNCiAgICAgKiA8L2NvZGU+DQogICAgICogDQogICAgICogTk9URSA6IEVRID0+IDxiPkVRPC9iPnVhbHMsIEdURSA9PiA8Yj5HPC9iPnJlYXRlciA8Yj5UPC9iPmhhbiBvciA8Yj5FPC9iPnF1YWxzDQogICAgICogDQogICAgICogTk9URSAyIDogeW91IGNhbiBhZGQgYXMgbWFueSBDcml0ZXJpYXMgYXMgeW91IHdhbnQgaW4gYW4gRXhhbXBsZSBPYmplY3QNCiAgICAgKiANCiAgICAgKiBAcGFyYW0gT3JtRW50aXR5IGFuIGluc3RhbmNlIG9mIHRoZSBlbnRpdHkNCiAgICAgKiBAcGFyYW0gT3JtRXhhbXBsZSB0aGUgT2JqZWN0IE9ybUV4YW1wbGUgd2l0aCBzb21lIENyaXRlcmlhcyBpbnNpZGUNCiAgICAgKiANCiAgICAgKiBAc2VlIE9ybUV4YW1wbGUNCiAgICAgKiBAc2VlIE9ybVR5cGVDcml0ZXJpYQ0KICAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gZmluZEJ5RXhhbXBsZShPcm1FbnRpdHkgJiRlbnRpdHlQYXJhbSwgT3JtRXhhbXBsZSAkZXhhbXBsZSkgew0KDQoJCSRkYiA9IGNtc21zKCktPkdldERiKCk7DQoJCSRsaXN0ZUZpZWxkID0gJGVudGl0eVBhcmFtLT5nZXRGaWVsZHMoKTsNCg0KCQkkY3JpdGVyaWFzID0gJGV4YW1wbGUtPmdldENyaXRlcmlhcygpOw0KCQkkc2VsZWN0ID0gInNlbGVjdCAqIGZyb20gIi4kZW50aXR5UGFyYW0tPmdldERibmFtZSgpOw0KCQkkaHFsID0gIiI7DQoJCSRwYXJhbXMgPSBhcnJheSgpOw0KCQkNCgkJZm9yZWFjaCgkY3JpdGVyaWFzIGFzICRjcml0ZXJpYSkgew0KCQkgIGlmKCFlbXB0eSgkaHFsKSkgew0KCQkJJGhxbCAuPSAnIEFORCAnOw0KCQkgIH0NCgkJICANCgkJICBpZihlbXB0eSgkaHFsKSkgew0KCQkJJGhxbCAuPSAnIFdIRVJFICc7DQoJCSAgfQ0KDQoJCSAgJGZpbHRlclR5cGUgPSAgJGxpc3RlRmllbGRbJGNyaXRlcmlhLT5maWVsZG5hbWVdLT5nZXRUeXBlKCk7DQoJCSAgDQoJCQkJLy8xIHBhcmFtZXRlcg0KCQkgIGlmKCRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JEVRIHx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JE5FUSANCgkJCXx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JEdUIHx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JEdURSANCgkJCXx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JExUIHx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JExURSANCgkJCXx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JEJFRk9SRSB8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRBRlRFUg0KCQkJfHwgJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokTElLRSB8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiROTElLRSkgeyAgDQoJCQkkdmFsID0gJGNyaXRlcmlhLT5wYXJhbXNDcml0ZXJpYVswXTsNCgkJCQ0KCQkJaWYoJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokTElLRSB8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiROTElLRSkNCgkJCXsNCgkJCSAgJHZhbC49ICclJzsNCgkJCX0NCgkJCQ0KCQkJJHBhcmFtc1tdID0gT3JtQ29yZTo6RmllbGRUb0RCVmFsdWUoJHZhbCwgJGZpbHRlclR5cGUpOyANCgkJCSRocWwgLj0gJGNyaXRlcmlhLT5maWVsZG5hbWUuJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEuJyA/ICc7DQoJCQljb250aW51ZTsNCgkJICB9DQoJCSAgDQoJCQkJLy8wIHBhcmFtZXRlcg0KCQkgIGlmKCRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JE5VTEwgfHwgJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokTk5VTEwpIHsgIA0KCQkJJGhxbCAuPSAkY3JpdGVyaWEtPmZpZWxkbmFtZS4kY3JpdGVyaWEtPnR5cGVDcml0ZXJpYTsNCgkJCWNvbnRpbnVlOw0KCQkgIH0NCgkJICANCgkJCQkvLzIgcGFyYW1ldGVycw0KCQkgIGlmKCRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JEJFVFdFRU4pIHsgIA0KCQkJJHBhcmFtc1tdID0gT3JtQ29yZTo6RmllbGRUb0RCVmFsdWUoJGNyaXRlcmlhLT5wYXJhbXNDcml0ZXJpYVswXSwgJGZpbHRlclR5cGUpOyANCgkJCSRwYXJhbXNbXSA9IE9ybUNvcmU6OkZpZWxkVG9EQlZhbHVlKCRjcml0ZXJpYS0+cGFyYW1zQ3JpdGVyaWFbMV0sICRmaWx0ZXJUeXBlKTsgDQoJCQkkaHFsIC49ICRjcml0ZXJpYS0+ZmllbGRuYW1lLiRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhLicgPyBBTkQgPyc7DQoJCQljb250aW51ZTsNCgkJICB9DQoJCSAgDQoJCQkvLyBOIHBhcmFtZXRlcnMNCgkJICBpZigkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRJTiB8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiROSU4pIHsNCgkJCSRocWwgLj0gJyAoICc7DQoJCQkkc2Vjb25kID0gZmFsc2U7IA0KCQkJZm9yZWFjaCgkY3JpdGVyaWEtPnBhcmFtc0NyaXRlcmlhIGFzICRwYXJhbSkgew0KCQkJICBpZigkc2Vjb25kKSB7DQoJCQkJJGhxbCAuPSAnIE9SICc7DQoJCQkgIH0NCgkJCSAgDQoJCQkgICRwYXJhbXNbXSA9IE9ybUNvcmU6OkZpZWxkVG9EQlZhbHVlKCRwYXJhbSwgJGZpbHRlclR5cGUpOyANCgkJCSAgJGhxbCAuPSAkY3JpdGVyaWEtPmZpZWxkbmFtZS5Pcm1UeXBlQ3JpdGVyaWE6OiRFUS4nID8gJzsNCgkJCSAgDQoJCQkgICRzZWNvbmQgPSB0cnVlOw0KCQkJfQ0KCQkJJGhxbCAuPSAnICknOw0KCQkJY29udGludWU7DQoJCSAgfQ0KCQkgIA0KCQkgIC8vT3RoZXIgY2FzZXMNCgkJICBpZigkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRFTVBUWSkgew0KCQkJJGhxbCAuPSAnICggJy4kY3JpdGVyaWEtPmZpZWxkbmFtZSAuJyBpcyBudWxsIHx8ICcgLiAkY3JpdGVyaWEtPmZpZWxkbmFtZSAuICI9ICcnKSI7DQoJCQljb250aW51ZTsNCgkJICB9DQoJCSAgaWYoJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokTkVNUFRZKSB7DQoJCQkkaHFsIC49ICcgKCAnLiRjcml0ZXJpYS0+ZmllbGRuYW1lIC4nIGlzIG5vdCBudWxsICYmICcgLiAkY3JpdGVyaWEtPmZpZWxkbmFtZSAuICIhPSAnJykiOw0KCQkJY29udGludWU7DQoJCSAgfQ0KCQkJCQkJIA0KCQkgIHRocm93IG5ldyBFeGNlcHRpb24oIlRoZSBPcm1Dcml0ZXJpYSAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSBpcyBub3QgbWFuYWdlIik7DQoJCX0NCgkJJHF1ZXJ5RXhhbXBsZSA9ICRzZWxlY3QuJGhxbDsNCgkJDQoJCS8vSWYgaXQncyBhbHJlYWR5IGluIHRoZSBjYWNoZSwgd2UgcmV0dXJuIHRoZSByZXN1bHQNCgkJaWYoT3JtQ2FjaGU6OmlzQ2FjaGUoJHF1ZXJ5RXhhbXBsZSwgJHBhcmFtcykpIHsNCgkJICAkZW50aXRpZXMgPSBPcm1DYWNoZTo6Z2V0Q2FjaGUoJHF1ZXJ5RXhhbXBsZSwkcGFyYW1zKTsNCgkJfSBlbHNlIHsNCgkJCSRyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5RXhhbXBsZSwgJHBhcmFtcyk7DQoJCQlpZiAoJHJlc3VsdCA9PT0gZmFsc2Upe2RpZSgkZGItPkVycm9yTXNnKCkuT3JtVHJhY2U6OmVycm9yKCJEYXRhYmFzZSBlcnJvciBkdXJhbnQgbGEgcmVxdWV0ZSBwYXIgRXhhbXBsZSEiKSk7fQ0KDQoJCQlPcm1UcmFjZTo6aW5mbygiZmluZEJ5RXhhbXBsZSA6ICIuJHJlc3VsdC0+UmVjb3JkQ291bnQoKS4iIHJlc3VsdGF0KHMpIik7DQoJCQkNCgkJCSRlbnRpdGllcyA9IE9ybUNvcmU6Ol9wcm9jZXNzQXJyYXlFbnRpdHkoJGVudGl0eVBhcmFtLCAkcmVzdWx0KTsNCgkJCQ0KCQkJLy9XZSBwdXNoIHRoZSByZXN1bHQgaW50byB0aGUgY2FjaGUgYmVmb3JlIHJldHVybiBpdA0KCQkJT3JtQ2FjaGU6OnNldENhY2hlKCRxdWVyeUV4YW1wbGUsIG51bGwsICRlbnRpdGllcyk7DQoJCX0NCg0KCQlyZXR1cm4gYXJyYXlfdmFsdWVzKCRlbnRpdGllcyk7DQoNCgl9DQogICANCgkvKioNCiAgICAgKiBBbGxvdyBkZWxldGUgYSBsaXN0IG9mIE9ybUVudGl0eSBmcm9tIGEgbGlzdCBvZiBPcm1Dcml0ZXJpYQ0KICAgICAqIA0KICAgICAqIEV4YW1wbGUgOiBkZWxldGUgdGhlIGN1c3RvbWVycyB3aXRoIGxhc3ROYW1lICdSb2dlcicgKG5vIGNhc3NlIHNlbnNpdGl2ZSkNCiAgICAgKiANCiAgICAgKiAgPGNvZGU+DQogICAgICogICAgICAgJGN1c3RvbWVyID0gTXlBdXRvbG9hZDo6Z2V0SW5zdGFuY2UoJHRoaXMtPkdldE5hbWUoKSwgJ2N1c3RvbWVyJyk7DQogICAgICogDQogICAgICogICAgICAgJGV4YW1wbGUgPSBuZXcgT3JtRXhhbXBsZSgpOw0KICAgICAqICAgICAgICRleGFtcGxlLT5hZGRDcml0ZXJpYSgnbGFzdE5hbWUnLCBPcm1UeXBlQ3JpdGVyaWE6OiRFUSwgYXJyYXkoJ3JvZ2VyJyksIHRydWUpOw0KICAgICAqIA0KICAgICAqICAgICAgIE9ybUNvcmU6OmRlbGV0ZUJ5RXhhbXBsZSgkY3VzdG9tZXIsICRleGFtcGxlKTsNCiAgICAgKiA8L2NvZGU+DQogICAgICogDQogICAgICogIEV4YW1wbGUgOiBkZWxldGUgdGhlIGN1c3RvbWVycyB3aXRoIElkID49IDkwDQogICAgICogDQogICAgICogPGNvZGU+DQogICAgICogICAgICAgJGN1c3RvbWVyID0gTXlBdXRvbG9hZDo6Z2V0SW5zdGFuY2UoJHRoaXMtPkdldE5hbWUoKSwgJ2N1c3RvbWVyJyk7DQogICAgICogDQogICAgICogICAgICAgJGV4YW1wbGUgPSBuZXcgT3JtRXhhbXBsZSgpOw0KICAgICAqICAgICAgICRleGFtcGxlLT5hZGRDcml0ZXJpYSgnY3VzdG9tZXJfaWQnLCBPcm1UeXBlQ3JpdGVyaWE6OiRHVEUsIGFycmF5KDkwKSk7DQogICAgICogDQogICAgICogICAgICAgT3JtQ29yZTo6ZGVsZXRlQnlFeGFtcGxlKCRjdXN0b21lciwgJGV4YW1wbGUpOw0KICAgICAqIDwvY29kZT4NCiAgICAgKiANCiAgICAgKiBOT1RFIDogRVEgPT4gPGI+RVE8L2I+dWFscywgR1RFID0+IDxiPkc8L2I+cmVhdGVyIDxiPlQ8L2I+aGFuIG9yIDxiPkU8L2I+cXVhbHMNCiAgICAgKiANCiAgICAgKiBOT1RFIDIgOiB5b3UgY2FuIGFkZCBhcyBtYW55IENyaXRlcmlhcyBhcyB5b3Ugd2FudCBpbiBhbiBPcm1FeGFtcGxlIE9iamVjdA0KICAgICAqIA0KICAgICAqIEBwYXJhbSBPcm1FbnRpdHkgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eQ0KICAgICAqIEBwYXJhbSBPcm1FeGFtcGxlIHRoZSBPYmplY3QgT3JtRXhhbXBsZSB3aXRoIHNvbWUgQ3JpdGVyaWFzIGluc2lkZQ0KICAgICAqIA0KICAgICAqIEBzZWUgT3JtRXhhbXBsZQ0KICAgICAqIEBzZWUgT3JtVHlwZUNyaXRlcmlhDQogICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBkZWxldGVCeUV4YW1wbGUoT3JtRW50aXR5ICYkZW50aXR5UGFyYW0sIE9ybUV4YW1wbGUgJE9ybUV4YW1wbGUpIHsNCg0KCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOw0KCQkkbGlzdGVGaWVsZCA9ICRlbnRpdHlQYXJhbS0+Z2V0RmllbGRzKCk7DQoNCgkJJGNyaXRlcmlhcyA9ICRPcm1FeGFtcGxlLT5nZXRDcml0ZXJpYXMoKTsNCgkJJGRlbGV0ZSA9ICJkZWxldGUgZnJvbSAiLiRlbnRpdHlQYXJhbS0+Z2V0RGJuYW1lKCk7DQoJCSRocWwgPSAiIjsNCgkJJHBhcmFtcyA9IGFycmF5KCk7DQoJCWZvcmVhY2goJGNyaXRlcmlhcyBhcyAkY3JpdGVyaWEpDQoJCXsNCgkJICBpZighZW1wdHkoJGhxbCkpDQoJCSAgew0KCQkJJGhxbCAuPSAnIEFORCAnOw0KCQkgIH0NCgkJICANCgkJICBpZihlbXB0eSgkaHFsKSkNCgkJICB7DQoJCQkkaHFsIC49ICcgV0hFUkUgJzsNCgkJICB9DQoNCgkJICAkZmlsdGVyVHlwZSA9ICRsaXN0ZUZpZWxkWyRjcml0ZXJpYS0+ZmllbGRuYW1lXS0+Z2V0VHlwZSgpOw0KCQkgIA0KCQkJCS8vIDEgcGFyYW3DqHRyZSAgDQoJCSAgaWYoJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokRVEgfHwgJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokTkVRIA0KCQkJfHwgJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokR1QgfHwgJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokR1RFIA0KCQkJfHwgJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokTFQgfHwgJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokTFRFIA0KCQkJfHwgJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokQkVGT1JFIHx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JEFGVEVSDQoJCQl8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRMSUtFIHx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JE5MSUtFKQ0KCQkgIHsgIA0KCQkJJHBhcmFtc1tdID0gT3JtQ29yZTo6RmllbGRUb0RCVmFsdWUoJGNyaXRlcmlhLT5wYXJhbXNDcml0ZXJpYVswXSwgJGZpbHRlclR5cGUpOyANCgkJCSRocWwgLj0gJGNyaXRlcmlhLT5maWVsZG5hbWUuJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEuJyA/ICc7DQoJCQljb250aW51ZTsNCgkJICB9DQoJCSAgDQoJCQkJLy8gMCBwYXJhbcOodHJlDQoJCSAgaWYoJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokTlVMTCB8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiROTlVMTCkNCgkJICB7ICANCgkJCSRocWwgLj0gJGNyaXRlcmlhLT5maWVsZG5hbWUuJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWE7DQoJCQljb250aW51ZTsNCgkJICB9DQoJCSAgDQoJCQkJLy8gMiBwYXJhbcOodHJlcyAgDQoJCSAgaWYoJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokQkVUV0VFTikNCgkJICB7ICANCgkJCSRwYXJhbXNbXSA9IE9ybUNvcmU6OkZpZWxkVG9EQlZhbHVlKCRjcml0ZXJpYS0+cGFyYW1zQ3JpdGVyaWFbMF0sICRmaWx0ZXJUeXBlKTsgDQoJCQkkcGFyYW1zW10gPSBPcm1Db3JlOjpGaWVsZFRvREJWYWx1ZSgkY3JpdGVyaWEtPnBhcmFtc0NyaXRlcmlhWzFdLCAkZmlsdGVyVHlwZSk7IA0KCQkJJGhxbCAuPSAkY3JpdGVyaWEtPmZpZWxkbmFtZS4kY3JpdGVyaWEtPnR5cGVDcml0ZXJpYS4nID8gQU5EID8nOw0KCQkJY29udGludWU7DQoJCSAgfQ0KCQkJCQ0KCQkJCS8vIE4gcGFyYW3DqHRyZXMNCgkJCQlpZigkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRJTiB8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiROSU4pDQoJCQkJew0KCQkJCQkkaHFsIC49ICcgKCAnOw0KCQkJCQkkc2Vjb25kID0gZmFsc2U7IA0KCQkJCQlmb3JlYWNoKCRjcml0ZXJpYS0+cGFyYW1zQ3JpdGVyaWEgYXMgJHBhcmFtKQ0KCQkJCQl7DQoJCQkJCQlpZigkc2Vjb25kKQ0KCQkJCQkJew0KCQkJCQkJCSRocWwgLj0gJyBPUiAnOw0KCQkJCQkJfQ0KCQkJCQkJJHBhcmFtc1tdID0gT3JtQ29yZTo6RmllbGRUb0RCVmFsdWUoJHBhcmFtLCAkZmlsdGVyVHlwZSk7IA0KCQkJCQkJJGhxbCAuPSAkY3JpdGVyaWEtPmZpZWxkbmFtZS5Pcm1UeXBlQ3JpdGVyaWE6OiRFUS4nID8gJzsNCgkJCQkJCQ0KCQkJCQkJJHNlY29uZCA9IHRydWU7DQoJCQkJCX0NCgkJCQkJJGhxbCAuPSAnICknOw0KCQkJCQljb250aW51ZTsNCgkJCQl9ICAgICAgICAgICAgICAgICAgICAgICAgDQoJCSAgDQoJCSAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiTGUgT3JtQ3JpdGVyaWEgJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgbidlc3QgcGFzIGVuY29yZSBwcmlzIGVuIGNoYXJnZSIpOw0KCQl9DQoJCSRxdWVyeUV4YW1wbGUgPSAkZGVsZXRlLiRocWw7DQoJCQkJCQkJCQkJDQoNCgkJJHJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlFeGFtcGxlLCAkcGFyYW1zKTsNCgkJaWYgKCRyZXN1bHQgPT09IGZhbHNlKXtkaWUoIkRhdGFiYXNlIGVycm9yIGR1cmFudCBsYSByZXF1ZXRlIHBhciBPcm1FeGFtcGxlISIpO30NCgl9DQogICAgICANCiAgICAvKioNCiAgICAgKiBUcmFuc2Zvcm1zIGFuIGFycmF5IG9mIHZhbHVlIGludG8gYSBlbnRpcmUgT3JtRW50aXR5LiBUaGUgYXJyYXkgbXVzdCBmYWxsb3cgdGhpcyBzY2hlbWUNCiAgICAgKiANCiAgICAgKiBFeGFtcGxlIDoNCiAgICAgKiANCiAgICAgKiA8Y29kZT4NCiAgICAgKiAgICAgICAkbXlBcnJheTEgPSBhcnJheSgnY3VzdG9tZXJfaWQnPT4xLCAnbmFtZSc9PidEdXBvbnQnKTsgICAgICAgDQogICAgICogICAgICAgJG15QXJyYXkyID0gYXJyYXkoJ2N1c3RvbWVyX2lkJz0+MiwgJ25hbWUnPT4nRHVyYW5kJywgJ2xhc3ROYW1lJz0+J0pvZScpOyAgICAgICANCiAgICAgKiAgIA0KICAgICAqICAgICAgICRjdXN0b21lciA9IE15QXV0b2xvYWQ6OmdldEluc3RhbmNlKCR0aGlzLT5HZXROYW1lKCksICdjdXN0b21lcicpOw0KICAgICAqIA0KICAgICAqICAgICAgICRjdXN0b21lcjEgPSBPcm1Db3JlOjpyb3dUb0VudGl0eSgkY3VzdG9tZXIsICRteUFycmF5MSk7DQogICAgICogICAgICAgJGN1c3RvbWVyMiA9IE9ybUNvcmU6OnJvd1RvRW50aXR5KCRjdXN0b21lciwgJG15QXJyYXkyKTsNCiAgICAgKiANCiAgICAgKiAgICAgICBlY2hvICRjdXN0b21lcjEtPmdldCgnbGFzdE5hbWUnKTsgLy9yZXR1cm4gbnVsbA0KICAgICAqICAgICAgIGVjaG8gJGN1c3RvbWVyMi0+Z2V0KCdsYXN0TmFtZScpOyAvL3JldHVybiBKb2UNCiAgICAgKiANCiAgICAgKiA8L2NvZGU+DQogICAgICogICAgICAgICANCiAgICAgKiBAcGFyYW0gT3JtRW50aXR5IGFuIGluc3RhbmNlIG9mIHRoZSBlbnRpdHkNCiAgICAgKiBAcGFyYW0gYXJyYXkgdGhlIGxpc3Qgd2l0aCB0aGUgZGF0YQ0KICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiByb3dUb0VudGl0eSAoT3JtRW50aXR5ICYkZW50aXR5UGFyYW0sICRyb3cpIHsNCg0KCQlPcm1UcmFjZTo6ZGVidWcoInJvd1RvRW50aXR5IDogIi5wcmludF9yKCRyb3csdHJ1ZSkpOw0KCQkkbGlzdGVGaWVsZCA9ICRlbnRpdHlQYXJhbS0+Z2V0RmllbGRzKCk7DQoNCgkJJG5ld0VudGl0eSA9IGNsb25lICRlbnRpdHlQYXJhbTsNCgkJZm9yZWFjaCgkbGlzdGVGaWVsZCBhcyAkZmllbGQpDQoJCXsNCgkJICBpZighJGZpZWxkLT5pc0Fzc29jaWF0ZUtFWSgpKQ0KCQkgIHsNCgkJCSRuZXdFbnRpdHktPnNldCgkZmllbGQtPmdldE5hbWUoKSxPcm1Db3JlOjpkYlZhbHVlVG9GaWVsZCgkcm93WyRmaWVsZC0+Z2V0TmFtZSgpXSwgJGZpZWxkLT5nZXRUeXBlKCkpKTsNCgkJICB9IA0KCQl9DQoJCXJldHVybiAkbmV3RW50aXR5OyAgDQoJfQ0KICANCiAgICAvKioNCiAgICAgKiBUcmFuc2Zvcm0gYSBQSFAgdmFsdWUgaW50byBhIFNRTCB2YWx1ZQ0KICAgICAqIA0KICAgICAqIEBwYXJhbSBtaXhlZCB0aGUgUEhQIHZhbHVlDQogICAgICogQHBhcmFtIG1peGVkIHRoZSBDQVNUIHZhbHVlDQogICAgICogDQogICAgICogQHNlZSBPcm1DQVNUDQogICAgICovDQoJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZnVuY3Rpb24gRmllbGRUb0RCVmFsdWUoJGRhdGEsICR0eXBlKSB7DQoJCWlmKCRkYXRhID09IG51bGwpew0KCQkJcmV0dXJuIG51bGw7DQoJCX0NCgkJDQoJCXN3aXRjaCgkdHlwZSkgew0KCQkgIGNhc2UgT3JtQ0FTVDo6JFNUUklORyA6IHJldHVybiAkZGF0YTsNCgkJICBjYXNlIE9ybUNBU1Q6OiRJTlRFR0VSIDogcmV0dXJuICRkYXRhOw0KCQkgIGNhc2UgT3JtQ0FTVDo6JE5VTUVSSUMgOiByZXR1cm4gJGRhdGE7DQoJCSAgY2FzZSBPcm1DQVNUOjokQlVGRkVSIDogcmV0dXJuICRkYXRhOw0KCQkgIGNhc2UgT3JtQ0FTVDo6JFRTIDogcmV0dXJuICRkYXRhOw0KCQkgIGNhc2UgT3JtQ0FTVDo6JFVVSUQgOiByZXR1cm4gJGRhdGE7DQoJCSAgDQoJCSAgY2FzZSBPcm1DQVNUOjokREFURSA6IHJldHVybiBzdHJfcmVwbGFjZSgiJyIsICIiLCBjbXNtcygpLT5HZXREYigpLT5EQkRhdGUoJGRhdGEpKTsgICAgICAgDQoNCgkJICBjYXNlIE9ybUNBU1Q6OiRUSU1FIDogcmV0dXJuIHN0cl9yZXBsYWNlKCInIiwgIiIsIGNtc21zKCktPkdldERiKCktPkRCVGltZVN0YW1wKCRkYXRhKSk7ICAgCSAgDQoJCSAgY2FzZSBPcm1DQVNUOjokREFURVRJTUUgOiByZXR1cm4gJGRhdGE7DQoJCX0NCgl9DQogIA0KICAgIC8qKg0KICAgICAqIFRyYW5zZm9ybSBhIFNRTCB2YWx1ZSBpbnRvIGEgUEhQIHZhbHVlDQogICAgICogDQogICAgICogQHBhcmFtIG1peGVkIHRoZSBTUUwgdmFsdWUgDQogICAgICogQHBhcmFtIG1peGVkIHRoZSBDQVNUIHZhbHVlDQogICAgICogDQogICAgICogQHNlZSBPcm1DQVNUDQogICAgICovDQoJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZnVuY3Rpb24gZGJWYWx1ZVRvRmllbGQoJGRhdGEsICR0eXBlKSB7DQoJCXN3aXRjaCgkdHlwZSkgew0KCQkgIGNhc2UgT3JtQ0FTVDo6JFNUUklORyA6IHJldHVybiAkZGF0YTsJCSAgDQoJCSAgY2FzZSBPcm1DQVNUOjokSU5URUdFUiA6IHJldHVybiAkZGF0YTsJCSAgDQoJCSAgY2FzZSBPcm1DQVNUOjokTlVNRVJJQyA6IHJldHVybiAkZGF0YTsJCSAgDQoJCSAgY2FzZSBPcm1DQVNUOjokQlVGRkVSIDogcmV0dXJuICRkYXRhOwkJICAJCSAgDQoJCSAgY2FzZSBPcm1DQVNUOjokVFMgOiByZXR1cm4gJGRhdGE7DQoJCSAgY2FzZSBPcm1DQVNUOjokVVVJRCA6IHJldHVybiAkZGF0YTsNCgkJICANCgkJICBjYXNlIE9ybUNBU1Q6OiREQVRFIDogcmV0dXJuIGNtc21zKCktPkdldERiKCktPlVuaXhEYXRlKCRkYXRhKTsNCgkJICBjYXNlIE9ybUNBU1Q6OiRUSU1FIDogcmV0dXJuICRkYXRhOy8vcmV0dXJuIGNtc21zKCktPkdldERiKCktPlVuaXhUaW1lU3RhbXAoJGRhdGEpOw0KCQkgIGNhc2UgT3JtQ0FTVDo6JERBVEVUSU1FIDogcmV0dXJuICRkYXRhOw0KDQoJCX0NCgl9DQogIA0KICAgIC8qKg0KICAgICAqIFZlcmlmeSBpbiBhbGwgdHlwZSBvZiBlbnRpdGllcyBpZiBhbnlvbmUgc3RpbGwgaGFzIGEgbGluayB3aXRoIHRoZSBPcm1FbnRpdHkgcGFzc2VkIGluIHBhcmFtZXRlcnMgKEZvcmVpZ25LRXkgYW5kIEFzc29jaWF0ZUtleSkNCiAgICAgKiANCiAgICAgKiAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IHRoZSBkZWxldGUqIGZ1bmN0aW9ucyB0byBhdm9pZCBvcnBoYW5zIGRhdGEgaW4gZGF0YWJhc2UNCiAgICAgKiANCgkgKiBAcGFyYW0gT3JtIHRoZSBtb2R1bGUgd2hpY2ggZXh0ZW5kcyB0aGUgT3JtIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICogQHBhcmFtIE9ybUVudGl0eSBhbiBpbnN0YW5jZSBvZiB0aGUgZW50aXR5DQogICAgICogQHBhcmFtIG1peGVkIHRoZSBpZCBvZiB0aGUgT3JtRW50aXR5IHRvIHZlcmlmeQ0KCSAqDQoJICogQHJldHVybiBhIG1lc3NhZ2UgaWYgYSBsaW5rIGlzIHN0aWxsIHByZXNlbnQuIG5vdGhpbmcgaWYgdGhlIGludGVncml0eSBpcyBvaw0KICAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gdmVyaWZJbnRlZ3JpdHkoT3JtRW50aXR5ICYkZW50aXR5LCAkc2lkKSB7DQoJCSRsaXN0ZUVudGl0eXMgPSBNeUF1dG9sb2FkOjpnZXRBbGxJbnN0YW5jZXMoJGVudGl0eS0+Z2V0TW9kdWxlTmFtZSgpKTsNCg0KCQlmb3JlYWNoKCRsaXN0ZUVudGl0eXMgYXMgJGtleT0+JGFuRW50aXR5KSB7DQoJCSAgaWYoJGFuRW50aXR5IGluc3RhbmNlT2YgT3JtRW50aXR5QXNzb2NpYXRpb24pDQoJCQljb250aW51ZTsNCgkJCQ0KCQkgIGZvcmVhY2goJGFuRW50aXR5LT5nZXRGaWVsZHMoKSBhcyAkZmllbGQpIHsNCgkJCWlmKCRmaWVsZC0+aXNBc3NvY2lhdGVLRVkoKSkgew0KCQkJICBjb250aW51ZTsNCgkJCX0NCgkJCQ0KCQkJaWYoJGZpZWxkLT5nZXRLRVlOYW1lKCkgIT0gbnVsbCkgew0KCQkJICAkdmFscyA9IGV4cGxvZGUoJy4nLCRmaWVsZC0+Z2V0S0VZTmFtZSgpLDIpOw0KCQkJICANCgkJCSAgaWYoc3RydG9sb3dlciAoJHZhbHNbMF0pID09IHN0cnRvbG93ZXIgKCRlbnRpdHktPmdldE5hbWUoKSkpICB7DQoJCQkJJE9ybUV4YW1wbGUgPSBuZXcgT3JtRXhhbXBsZSgpOw0KCQkJCSRPcm1FeGFtcGxlLT5hZGRDcml0ZXJpYSgkZmllbGQtPmdldE5hbWUoKSwgT3JtVHlwZUNyaXRlcmlhOjokRVEsIGFycmF5KCRzaWQpKTsNCgkJCQkkZW50aXR5cyA9IE9ybUNvcmU6OmZpbmRCeUV4YW1wbGUoJGFuRW50aXR5LCAkT3JtRXhhbXBsZSk7DQoJCQkJaWYoY291bnQoJGVudGl0eXMpID4gMCkNCgkJCQl7DQoJCQkJICByZXR1cm4gIkxhIGxpZ25lICZhZ3JhdmU7IHN1cHByaW1lciBlc3QgZW5jb3JlIHV0aWxpcyZlYWN1dGU7ZSBwYXIgJmxhcXVvOyAiLiRhbkVudGl0eS0+Z2V0TmFtZSgpLiIgJnJhcXVvOyI7DQoJCQkJfQ0KCQkJICB9DQoJCQl9DQoJCSAgfQ0KCQl9DQoNCgkJcmV0dXJuOw0KDQoJfQ0KDQogICAgLyoqDQogICAgICogQWxsb3cgcmVhbGlzZSBkZWVwIHNlYXJjaCBvbiBkaWZmZXJlbnQgdHlwZSBvZiBPcm1FbnRpdHkgbGlua2VkIHRvZ2V0aGVyDQogICAgICogDQogICAgICogRXhhbXBsZSA6IA0KICAgICAqICAgQW4gT3JkZXIgaGFzIGEgbGluayB0byBhIEN1c3RvbWVyIChPcmRlci5jdXN0b21lcl9pZCkNCiAgICAgKiAgIEEgQ3VzdG9tZXIgaGFzIGEgbGluayB0byBhbiBBZGRyZXNzIChDdXN0b21lci5hZGRyZXNzZV9pZCkNCiAgICAgKiAgIEFuIEFkZHJlc3MgaGFzIGEgbGluayB0byBhIGNpdHkgKEFkZHJlc3MuY2l0eV9pZCkNCgkgKiAgIEEgY2l0eSBoYXMgYSBaaXBDb2RlIChtYXliZSBzaGFyZWQgYnkgZGlmZmVyZW50IGNpdGllcykNCiAgICAgKiANCiAgICAgKiAgSWYgaSB3YW50IHRoZSBPcmRlcnMgZm9yIEN1c3RvbWVycyBmcm9tIHRoZSBjaXR5IHdpdGggemlwY29kZSBlcXVhbHMgdG8gIjAxMjM0IiBvciAiNDU2NyIgSSBjb3VsZCB3cml0ZSBzb21lIHNoaXR0eSBjb2RlICENCiAgICAgKiANCiAgICAgKiA8Y29kZT4NCiAgICAgKiAgJGNpdGllcyA9IC8vRmluZCBteSBjaXRpZXMgd2l0aCBaaXBDb2RlICIwMTIzNCIgb3IgIjQ1NjciDQogICAgICogIGZvcmVhY2goJGNpdGllcyBhcyAkY2l0eSkNCiAgICAgKiAgew0KICAgICAqICAgICAgICRhZGRyZXNzZXMgPSAvL0ZpbmQgdGhlIGFkZHJlc3MgZm9yIHRoZSBjaXR5ICRjaXR5DQogICAgICogICAgICAgZm9yZWFjaCgkYWRkcmVzc2VzIGFzICRhZGRyZXNzKQ0KICAgICAqICAgICAgIHsNCiAgICAgKiAgICAgICAgICAgJGN1c3RvbWVycyA9IC8vRmluZCB0aGUgQ3VzdG9tZXJzIGZvciB0aGUgYWRkcmVzcyAkYWRkcmVzcw0KICAgICAqICAgICAgICAgICBmb3JlYWNoKCRjdXN0b21lcnMgYXMgJGN1c3RvbWVyKQ0KICAgICAqICAgICAgICAgICB7DQogICAgICogICAgICAgICAgICAgICAkY29tbWFuZGVzID0gIC8vRmluZCBUcmFpdGVtZW50IGRlIHJlY2hlcmNoZSBkJ3VuZSBjb21tYW5kZSBwb3Nzw6hkYW50IGxlIG51bWVyb2NsaWVudCA9ICRjdXN0b21lci0+Z2V0KCdudW1lcm9jbGllbnQnKSAgIA0KICAgICAqICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgIA0KICAgICAqICAgICAgIH0gICAgICAgICAgICAgICAgICANCiAgICAgKiAgfQ0KICAgICAqIA0KICAgICAqICA8L2NvZGU+DQogICAgICogDQogICAgICogIEkgY291bGQgYWxzbyB3cml0ZSBhIGJldHRlciBjb2RlIDogDQogICAgICogDQogICAgICogPGNvZGU+DQoJICogICAkb3JkZXIgPSBNeUF1dG9sb2FkOjpnZXRJbnN0YW5jZSgkdGhpcy0+R2V0TmFtZSgpLCAnb3JkZXInKTsNCiAgICAgKiAgICRvcmRlcnMgPSBPcm1Db3JlOjptYWtlRGVlcFNlYXJjaChvcmRlciwgJ09yZGVyLmN1c3RvbWVyX2lkLmFkZHJlc3NfaWQuY2l0eV9pZC56aXBjb2RlJywgYXJyYXkoJzAxMjM0JywgJzQ1NjcnKSk7DQogICAgICogPC9jb2RlPg0KICAgICAqIA0KICAgICAqIEBwYXJhbSBPcm1FbnRpdHkgVGhlIGVudGl0eSBpIHdhbnQgdG8gaGF2ZSBhdCB0aGUgZW5kDQogICAgICogQHBhcmFtIHN0cmluZyB0aGUgcGF0aCB0byBmYWxsb3cuIE11c3QgYmUgZW5kZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgRmllbGQgdG8gbWFrZSB0aGUgY29tcGFyYWlzb24NCiAgICAgKiBAcGFyYW0gYXJyYXkgdGhlIGFycmF5IG9mIHZhbHVlIHRvIG1ha2UgdGhlIGNvbXBhcmFpc29uDQogICAgICogDQogICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBtYWtlRGVlcFNlYXJjaChPcm1FbnRpdHkgJHByZXZpb3VzRW50aXR5LCAkY2xlLCAkdmFsdWVzKSB7ICAgIA0KCQlPcm1UUkFDRTo6aW5mbygiIyA6ICIuIlN0YXJ0IG1ha2VEZWVwU2VhcmNoKCkgIi4kcHJldmlvdXNFbnRpdHktPmdldE5hbWUoKS4iLT4iLiRjbGUpOw0KDQoJCWlmKCRwcmV2aW91c0VudGl0eSA9PSBudWxsKQ0KCQl7DQoJCSAgDQoJCSAgJG5ld0NsZSA9IGV4cGxvZGUoJy4nLCRjbGUsMik7DQoJCSAgJHByZXZpb3VzRW50aXR5ID0gJG5ld0NsZVswXTsNCgkJICAkY2xlID0gJG5ld0NsZVsxXTsNCgkJICAkcHJldmlvdXNFbnRpdHkgPSBuZXcgJHByZXZpb3VzRW50aXR5KCk7DQoJCX0NCg0KCQkkbmV3Q2xlID0gZXhwbG9kZSgnLicsJGNsZSwyKTsNCgkJJGZpZWxkbmFtZSA9ICRuZXdDbGVbMF07DQoNCgkJLy9UZXN0IGRlIHNvcnRpZSA6IG9uIGEgdW4gc2V1bCByw6lzdWx0YXQgZGFucyAkbmV3Q2xlIDogbGUgY2hhbXBzIGZpbmFsDQoJCWlmKGNvdW50KCRuZXdDbGUpID09IDEpDQoJCXsNCgkJICBPcm1UUkFDRTo6aW5mbygiIyA6ICIuIiBjb3VudChcJG5ld0NsZSkgPT0gMSAsIGRvbmMgc29ydGllICIpOw0KCQkgICRPcm1FeGFtcGxlID0gbmV3IE9ybUV4YW1wbGU7DQoJCSAgJE9ybUV4YW1wbGUtPmFkZENyaXRlcmlhKCRmaWVsZG5hbWUsIE9ybVR5cGVDcml0ZXJpYTo6JElOLCAkdmFsdWVzKTsNCgkJICAkZW50aXR5cyA9IE9ybUNvcmU6OmZpbmRCeUV4YW1wbGUoJHByZXZpb3VzRW50aXR5LCAkT3JtRXhhbXBsZSk7DQoJCSAgT3JtVFJBQ0U6OmluZm8oIiMgOiAiLmNvdW50KCRlbnRpdHlzKS4iIFImZWFjdXRlO3N1bHRhdChzKSByZXRvdXJuJmVhY3V0ZTtzIik7DQoJCSAgcmV0dXJuICRlbnRpdHlzOw0KCQl9IGVsc2UNCgkJew0KCQkgIE9ybVRSQUNFOjppbmZvKCIjIDogIi4iIHBvdXJzdWl0ZSAiKTsNCgkJfQ0KDQoJCS8vUsOpY3Vww6lyYXRpb24gZGUgbGEgY2zDqSBkaXN0YW5jZSBwb3VyIHVuZSBGSw0KCQkkZmllbGQgPSAkcHJldmlvdXNFbnRpdHktPmdldEZpZWxkQnlOYW1lKCRmaWVsZG5hbWUpOw0KCQlpZigkZmllbGQtPmlzRm9yZWlnbktFWSgpIHx8ICRmaWVsZC0+aXNBc3NvY2lhdGVLZXkoKSkNCgkJew0KCQkgICRmb3JlaWduS0VZID0gZXhwbG9kZSgnLicsJGZpZWxkLT5nZXRLRVlOYW1lKCksMik7DQoJCSAgJG5leHRFbnRpdHkgPSBuZXcgJGZvcmVpZ25LRVlbMF0oKTsNCgkJfSANCg0KCQlpZigkZmllbGQtPmlzQXNzb2NpYXRlS2V5KCkpDQoJCXsNCgkJICAkY2xlID0gZXhwbG9kZSgnLicsJG5ld0NsZVsxXSwyKTsNCgkJICAkY2xlID0gJGNsZVsxXTsNCgkJfSBlbHNlDQoJCXsNCgkJICAkY2xlID0gJG5ld0NsZVsxXTsNCgkJfSANCgkJDQoJCU9ybVRSQUNFOjppbmZvKCIjIDogIi4iIG1ha2UgbmV3IHJlY2hlcmNoZSA6ICIuJG5leHRFbnRpdHktPmdldE5hbWUoKSAuIiAsICIuICRjbGUpOw0KDQoJCSRlbnRpdHlzID0gT3JtQ29yZTo6bWFrZURlZXBTZWFyY2goJG5leHRFbnRpdHksICRjbGUsICR2YWx1ZXMpOw0KDQoJCWlmKGNvdW50KCRlbnRpdHlzKSA9PSAwKQ0KCQl7DQoJCSAgcmV0dXJuIGFycmF5KCk7DQoJCX0NCg0KCQlpZigkbmV4dEVudGl0eSBpbnN0YW5jZW9mIE9ybUVudGl0eUFzc29jaWF0aW9uKQ0KCQl7ICANCgkJICAkZmllbGRzID0gJG5leHRFbnRpdHktPmdldEZpZWxkcygpOw0KCQkgICRub21GaWVsZFN1aXZpdCA9IGV4cGxvZGUoJy4nLCRjbGUsMik7DQoJCSAgJG5vbUZpZWxkU3Vpdml0ID0gJG5vbUZpZWxkU3Vpdml0WzBdOw0KCQkgICRub21GaWVsZFJldG91ciA9ICJOL0EiOw0KCQkgIGZvcmVhY2goJGZpZWxkcyBhcyAkYWZpZWxkKQ0KCQkgIHsNCgkJCWlmKCRhZmllbGQtPmdldE5hbWUoKSA9PSAkbm9tRmllbGRTdWl2aXQpDQoJCQl7DQoJCQkgIGNvbnRpbnVlOw0KCQkJfQ0KCQkJJG5vbUZpZWxkUmV0b3VyID0gJGFmaWVsZDsNCgkJICB9DQoJCSAgDQoJCX0NCg0KCQkkaWRzID0gYXJyYXkoKTsNCgkJZm9yZWFjaCgkZW50aXR5cyBhcyAkYW5FbnRpdHkpDQoJCXsNCgkJICBPcm1UUkFDRTo6aW5mbygiT24gYSB0cm91diZlYWN1dGU7ICA6ICIuJGFuRW50aXR5LT5nZXROYW1lKCkuIiIpOw0KCQkgIGlmKCRhbkVudGl0eSBpbnN0YW5jZW9mIE9ybUVudGl0eUFzc29jaWF0aW9uKQ0KCQkgIHsNCgkJCSR2YWx1ZSA9ICRhbkVudGl0eS0+Z2V0KCRub21GaWVsZFJldG91ci0+Z2V0TmFtZSgpKTsNCgkJCSRpZHNbXSA9ICR2YWx1ZTsNCgkJCU9ybVRSQUNFOjppbmZvKCIgdmFsZXVyIGFzc29jIDogIi4kdmFsdWUuIiBwb3VyIGxlIGNoYW1wcyAiLiRub21GaWVsZFJldG91ci0+Z2V0TmFtZSgpKTsNCgkJICB9IGVsc2UNCgkJICB7DQoJCQkkdmFsdWUgPSAkYW5FbnRpdHktPmdldCgkbmV4dEVudGl0eS0+Z2V0UGsoKS0+Z2V0TmFtZSgpKTsNCgkJCSRpZHNbXSA9ICR2YWx1ZTsNCgkJCU9ybVRSQUNFOjppbmZvKCIgdmFsZXVyIGlkIDogIi4kdmFsdWUpOw0KCQkgIH0NCgkJICANCgkJfQ0KDQoNCgkJJE9ybUV4YW1wbGUgPSBuZXcgT3JtRXhhbXBsZTsNCgkJaWYoJG5leHRFbnRpdHkgaW5zdGFuY2VvZiBPcm1FbnRpdHlBc3NvY2lhdGlvbikNCgkJew0KCQkgICRPcm1FeGFtcGxlLT5hZGRDcml0ZXJpYSgkcHJldmlvdXNFbnRpdHktPmdldFBrKCktPmdldE5hbWUoKSwgT3JtVHlwZUNyaXRlcmlhOjokSU4sICRpZHMpOw0KCQl9IGVsc2UNCgkJew0KCQkgICRPcm1FeGFtcGxlLT5hZGRDcml0ZXJpYSgkZmllbGRuYW1lLCBPcm1UeXBlQ3JpdGVyaWE6OiRJTiwgJGlkcyk7DQoJCX0NCgkJJGVudGl0eXMgPSBPcm1Db3JlOjpmaW5kQnlFeGFtcGxlKCRwcmV2aW91c0VudGl0eSwgJE9ybUV4YW1wbGUpOw0KDQoJCXJldHVybiAkZW50aXR5czsNCgl9DQogIA0KCS8qKg0KCSAqIFdpbGwgcmV0dXJuIGEgVVVJRCA6IGEgdW5pcXVlIGlkZW50aWZpZXINCgkgKiBAc2luY2UgMC4wLjINCgkgKi8NCiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGdlbmVyYXRlVVVJRCgpew0KCQkgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsNCg0KCQkkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCdTRUxFQ1QgVVVJRCgpIEFTIHV1aWQ7Jyk7DQoNCgkJJHJvdz0kcmVzdWx0LT5GZXRjaFJvdygpOw0KDQoJCXJldHVybiAkcm93Wyd1dWlkJ107DQoJfQ0KfQ0KDQo/Pg0K]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormcriteria.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgT3JtQ3JpdGVyaWEgY2xhc3MNCiAqIA0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KIA0KIA0KDQovKioNCiAqIEJhY2tib25lIGZvciBPcm1Dcml0ZXJpYSBpbnRvIHRoZSBPcm0gc3lzdGVtDQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KLypmaW5hbCAqL2NsYXNzIE9ybUNyaXRlcmlhDQp7DQoJLyoqDQoJICogTmFtZSBvZiB0aGUgZmllbGQgDQoJICovDQoJcHVibGljICRmaWVsZG5hbWU7DQoJDQoJLyoqDQoJICogVHlwZSBvZiBDcml0ZXJpYQ0KCSAqLw0KCXB1YmxpYyAkdHlwZUNyaXRlcmlhOw0KCQ0KCS8qKg0KCSAqIFBhcmFtZXRlcnMgZm9yIHRoZSB0eXBlIG9mIENyaXRlcmlhDQoJICovDQoJcHVibGljICRwYXJhbXNDcml0ZXJpYTsNCgkNCgkvKioNCgkgKiBCb29sZWFuIGlmIHdlIG11c3QgaWdub3JlIGNhc2UNCgkgKi8NCglwdWJsaWMgJGlnbm9yZUNhc2U7DQoJDQogICAgLyoqDQogICAgKiBQdWJsaWMgQ29uc3RydWN0b3INCiAgICAqIA0KICAgICogQHBhcmFtIHN0cmluZyBOYW1lIG9mIHRoZSBmaWVsZCANCiAgICAqIEBwYXJhbSBPcm1UeXBlQ3JpdGVyaWEgVHlwZSBvZiBDcml0ZXJpYQ0KICAgICogQHBhcmFtIGFycmF5IGFsbCB0aGUgcGFyYW1ldGVycyB1c2VkIGZvciB0aGUgcGFyYW1ldGVyICR0eXBlQ3JpdGVyaWENCiAgICAqIEBwYXJhbSBib29sZWFuIFtPcHRpb25hbF0gaWYgd2UgbXVzdCBpZ25vcmUgdGhlIGNhc2UgKGF6ZSBlcXVhbHMgQVpFKSBvciBub3QuIERlZmF1bHQgdmFsdWUgaXMgImZhbHNlIg0KICAgICoNCgkqIEByZXR1cm4gT3JtQ3JpdGVyaWEgYSBDcml0ZXJpYQ0KCSoNCgkqIEBzZWUgT3JtVHlwZUNyaXRlcmlhDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGZpZWxkbmFtZSwgJHR5cGVDcml0ZXJpYSwgJHBhcmFtc0NyaXRlcmlhLCAkaWdub3JlQ2FzZSA9IGZhbHNlKQ0KCXsNCgkJJHRoaXMtPmZpZWxkbmFtZSA9ICRmaWVsZG5hbWU7DQoJCSR0aGlzLT50eXBlQ3JpdGVyaWEgPSAkdHlwZUNyaXRlcmlhOw0KCQkkdGhpcy0+cGFyYW1zQ3JpdGVyaWEgPSAkcGFyYW1zQ3JpdGVyaWE7DQoJCSR0aGlzLT5pZ25vcmVDYXNlID0gJGlnbm9yZUNhc2U7DQoJfQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormentity.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGNsYXNzIE9ybUVudGl0eQ0KICoNCiAqIEBzaW5jZSAwLjAuMQ0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBPcm0NCiAqKi8NCiANCi8qKg0KICogQWJzdHJhY3QgQ2xhc3NlcyBkZXNjcmliaW5nIHRoZSBmcmFtZSBvZiBhbiBPcm1FbnRpdHkgaW50byBPcm0NCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQphYnN0cmFjdCBjbGFzcyBPcm1FbnRpdHkNCnsNCgkvKioNCgkgKiBTdHJpbmcgOiBOYW1lIG9mIHRoZSBtb2R1bGUgdGhhdCBjdXJyZW50bHkgdXNlIHRoaXMgZW50aXR5DQoJICogKi8NCglwcml2YXRlICRtb2R1bGVOYW1lOw0KCQ0KCS8qKg0KCSAqIFN0cmluZyA6IHRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoZSBlbnRpdHkNCgkgKiAqLw0KCXByb3RlY3RlZCAkbmFtZTsNCg0KCS8qKg0KCSAqIFN0cmluZyA6IHRoZSBuYW1lIG9mIHRoZSB0YWJsZSBpbiBkYXRhYmFzZQ0KCSAqICovDQoJcHJpdmF0ZSAkZGJuYW1lOw0KCQ0KCS8qKg0KCSAqIFN0cmluZyA6IG5hbWUgb2YgdGhlIHNlcXVlbmNlIGxpbmtlZCB0byB0aGUgdGFibGUgaW4gdGhlIGRhdGFiYXNlLiBNYXkgYmUgTnVsbA0KCSAqICovDQoJcHJpdmF0ZSAkc2VxbmFtZTsNCgkNCgkvKioNCgkgKiBsaXN0IDogZmllbGRzIG1ha2luZyB1cCB0aGUgZW50aXR5DQoJICogKi8NCglwcml2YXRlICRmaWVsZHMgPSBhcnJheSgpOw0KCQ0KCS8qKg0KCSAqIGxpc3QgOiB2YWx1ZXMgb2YgZWFjaCBmaWVsZHMNCgkgKiAqLw0KCXByaXZhdGUgJHZhbHVlcyA9IGFycmF5KCk7DQoJDQoJLyoqDQoJICogU3RyaW5nIDogTmFtZSBvZiB0aGUgZmllbGQgd2ljaCB3aWxsIGJlIHVzZWQgYXMgYSBwcmltYXJ5S2V5DQoJICogKi8NCglwcml2YXRlICRwazsNCgkNCgkvKioNCgkgKiBCb29sZWFuIDogaWYgdHJ1ZSB0aGUgZnJhbWV3b3JrIHdpbGwgdHJ5IHRvIHVzZSB0aGUgaW5uZXIgYXV0b2luY3JlbWVudCBvZiBNeXNxbCBpbnN0ZWFkIGdlbmVyYXRlIGEgbmV3IHRhYmxlIHh4eF9zZXEgbGlrZSB1c3VhbA0KCSAqLw0KCXByaXZhdGUgJGF1dG9pbmNyZW1lbnQgPSBmYWxzZTsNCgkNCgkvKioNCgkgKiBBcnJheSwgY29udGFpbnMgYWxsIHRoZSB1bmlxdWVLZXlzIGZvciBvbmUgb3IgbW9yZSBjb2x1bW5zLg0KCSAqKi8JIA0KCXByaXZhdGUgJHVuaXF1ZUtleXMgPSBhcnJheSgpOw0KCQ0KCS8qKg0KCSAqIFN0cmluZyA6IGNvbnN0YW50LCBzdWZmaXggZm9yIHRoZSBzZXF1ZW5jZSBuYW1lIGludG8gdGhlIGRhdGFiYXNlDQoJICogKi8NCglwdWJsaWMgc3RhdGljICRfQ09OU1RfU0VRID0gJ19zZXEnOw0KCS8qKg0KCSAqIFN0cmluZyA6IGNvbnN0YW50LCBzdWZmaXggdXNlZCB0byBuYW1tZWQgdGhlIHRhYmxlIGludG8gZGF0YWJhc2UgZm9yIGEgbW9kdWxlDQoJICogKi8NCglwdWJsaWMgc3RhdGljICRfQ09OU1RfTU9EID0gJ21vZHVsZSc7DQoJDQoJDQoJDQogICAgLyoqDQogICAgICogY29uc3RydWN0b3IgcHJvdGVjdGVkIHRvIGF2b2lkIGEgZGlyZWN0IGluc3RhbmNpYXRpb24gbGlrZSAibmV3IE9ybUVudGl0eSgpIg0KICAgICAqIEVhY2ggdGltZSBhIGVudGl0eSBpcyBjb25zdHJ1Y3RlZCwgd2UgcGxhY2UgYSBjb3B5IGludG8gdGhlIGF1dG9sb2FkZXIuDQogICAgICogDQogICAgICogQHBhcmFtIHN0cmluZyBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHdobyBjYWxsaW5nIHRoaXMgbWV0aG9kIChzbyBub3QgIk9ybSIpDQogICAgICogQHBhcmFtIHN0cmluZyBUaGUgbmFtZSBvZiB0aGUgZW50aXR5DQogICAgICogQHBhcmFtIHN0cmluZyBbb3B0aW9uYWxdIFByZWZpeCB0byB1c2UgaW50byBkYXRhYmFzZSBmb3IgdGFibGUuIElmIG5vdCBzZXR0ZWQsIGl0IHdpbGwgdXNlIHRoZSBuYW1lIG9mIHlvdXIgbW9kdWxlDQogICAgICogQHBhcmFtIHN0cmluZyBbb3B0aW9uYWxdIFRoZSBuYW1lIG9mIHRhYmxlIGZvciB0aGlzIGVudGl0eS4gSWYgbm90IHNldHRlZCwgaXQgd2lsbCB1c2UgdGhlIG5hbWUgb2YgeW91ciBlbnRpdHkNCiAgICAgKg0KICAgICAqIEByZXR1cm4gT3JtRW50aXR5IHRoZSBlbnRpdHkgYXMgYSBuZXcgaW5zdGFuY2UNCiAgICAgKiANCiAgICAgKiBAc2VlIE15QXV0b2xvYWQNCiAgICAgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG1vZHVsZU5hbWUsICRuYW1lLCAkcHJlZml4ZSA9IG51bGwsICRkYk5hbWUgPSBudWxsKSB7DQoJCSR0aGlzLT5tb2R1bGVOYW1lID0gc3RydG9sb3dlcigkbW9kdWxlTmFtZSk7DQoJCSR0aGlzLT5uYW1lID0gc3RydG9sb3dlcigkbmFtZSk7DQoJCQ0KCQkkdGhpcy0+ZGJuYW1lID0gJHRoaXMtPm5hbWU7DQoJCWlmKCFlbXB0eSgkZGJOYW1lKSkgew0KCQkJJHRoaXMtPmRibmFtZSA9IHN0cnRvbG93ZXIoJGRiTmFtZSk7DQoJCX0NCgkJDQoJCWlmKGVtcHR5KCRwcmVmaXhlKSkgew0KCQkJJHByZWZpeGUgPSAkdGhpcy0+bW9kdWxlTmFtZTsNCgkJfSBlbHNlIHsNCgkJCSRwcmVmaXhlID0gc3RydG9sb3dlcigkcHJlZml4ZSk7DQoJCX0NCgkJDQoJCSR0aGlzLT5kYm5hbWUgPSBjbXNfZGJfcHJlZml4KCkuT3JtRW50aXR5OjokX0NPTlNUX01PRC4nXycuJHByZWZpeGUuJ18nLiR0aGlzLT5kYm5hbWU7DQoJCQ0KCQkvLyBXZSBhZGQgYW4gaW5zdGFuY2Ugb2Ygb3VyLXNlcmYgaW50byB0aGUgYXV0b2xvYWQNCgkJbXlBdXRvbG9hZDo6YWRkSW5zdGFuY2UoJHRoaXMtPm1vZHVsZU5hbWUsJHRoaXMpOw0KCX0NCgkNCiAgICAvKioNCiAgICAqICBDYW4gYmUgb3ZlcnJpZGUuIExldCB5b3Ugc3BlY2lmeSBob3cgeW91ciB0YWJsZSBtdXN0IGJlIHBvcHVsYXRlZCANCiAgICAqIGFmdGVyIHlvdSBhc2tlZCB0byBjcmVhdGUgdGhlIHRhYmxlIG9mIHlvdXIgRW50aXR5DQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gaW5pdFRhYmxlKCl7fQ0KICAgIAkNCiAgICAvKioNCiAgICAqIEFkZCBhIG5ldyBGaWVsZCBpbnRvIHRoZSBsaXN0IG9mIEZpZWxkcw0KICAgICogDQogICAgKiBAcGFyYW0gT3JtRmllbGQgdGhlIG9iamVjdCBGaWVsZCB0byBhZGQNCgkqIA0KCSogQGV4Y2VwdGlvbiBPcm1JbGxlZ2FsQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBpZiB3ZSB0cnkgdG8gdXNlIG1vcmUgdGhhbiBhIHNpbmdsZSBQcmltYXJ5S2V5IGluIHRoZSBlbnRpdHkNCiAgICAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBhZGQoT3JtRmllbGQgJG5ld0ZpZWxkKSB7DQoJCSR0aGlzLT5maWVsZHNbJG5ld0ZpZWxkLT5nZXROYW1lKCldID0gJG5ld0ZpZWxkOw0KDQoJCS8vQWRkIGEgc2VxdWVuY2Ugb24gdGhlIGtleXMNCgkJaWYoJG5ld0ZpZWxkLT5pc1ByaW1hcnlLRVkoKSkgew0KCQkJaWYoJHRoaXMtPnBrICE9IG51bGwpDQoJCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxDb25maWd1cmF0aW9uRXhjZXB0aW9uKCJPcm0gZG9lc24ndCBzdXBwb3J0IG11bHRpLVByaW1hcnktS2V5IGludG8gdGhlIEVudGl0eSAiLiR0aGlzLT5uYW1lKTsNCgkJCQkNCgkJCSR0aGlzLT5wayA9ICRuZXdGaWVsZC0+Z2V0TmFtZSgpOw0KCQkJaWYoISR0aGlzLT5pc0F1dG9pbmNyZW1lbnQoKSkgeyAvLyBubyBzZXF1ZW5jZSBpZiBhdXRvaW5jcmVtZW50IHVzZWQNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2VxbmFtZSA9ICR0aGlzLT5kYm5hbWUuT3JtRW50aXR5OjokX0NPTlNUX1NFUTsNCiAgICAgICAgICAgIH0NCgkJfQ0KCX0NCgkNCiAgICAvKioNCiAgICAqIFJldHVybiB0aGUgUHJpbWFyeUtleSBGaWVsZA0KICAgICogDQogICAgKiBAcmV0dXJuIE9ybUZpZWxkIHRoZSBQcmltYXJ5S2V5IEZpZWxkDQogICAgKiBAZXhjZXB0aW9uIE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBubyBQcmltYXJ5S2V5IEZpZWxkDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0UGsoKSB7DQoJCWlmKCR0aGlzLT5wayA9PSBudWxsKQ0KCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigidGhlIGVudGl0eSAiLiR0aGlzLT5nZXROYW1lKCkuIiBkb2Vzbid0IGhhdmUgYW55IFByaW1hcnktS2V5Iik7DQoJCQ0KCQlyZXR1cm4gJHRoaXMtPmZpZWxkc1skdGhpcy0+cGtdOw0KCX0NCgkNCiAgICAvKioNCiAgICAqIFJldHVybiB0aGUgbGlzdCBvZiBGaWVsZHMNCiAgICAqIA0KICAgICogQHJldHVybiBhcnJheTxGaWVsZD4gYW4gYXJyYXkgd2l0aCBhbGwgdGhlIEZpZWxkcw0KICAgICogDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0RmllbGRzKCkgew0KCQlyZXR1cm4gJHRoaXMtPmZpZWxkczsNCgl9DQoJDQogICAgLyoqDQogICAgKiByZXR1cm4gYSBGaWVsZCBieSBuYW1lDQogICAgKiANCiAgICAqIEBwYXJhbSBzdHJpbmcgdGhlIG5hbWUNCiAgICAqIEByZXR1cm4gT3JtRmllbGQgdGhlIEZpZWxkDQogICAgKiANCiAgICAqIEBleGNlcHRpb24gT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIG5vIEZpZWxkIGV4aXN0IGZvciB0aGUgbmFtZQ0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIGdldEZpZWxkQnlOYW1lKCRuYW1lKSB7DQoJCWlmKGlzc2V0KCR0aGlzLT5maWVsZHNbJG5hbWVdKSkNCgkJCXJldHVybiAkdGhpcy0+ZmllbGRzWyRuYW1lXTsNCgkJDQoJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBmaWVsZCAkbmFtZSBkb2Vzbid0IGV4aXN0IGludG8gdGhlIGVudGl0eSAiLiR0aGlzLT5nZXROYW1lKCkpOw0KCX0NCgkNCiAgICAvKioNCiAgICAqIFJldHVybiB0cnVlIGlmIGEgRmllbGQgZXhpc3RzIGZvciB0aGUgbmFtZQ0KICAgICogDQogICAgKiBAcGFyYW0gc3RyaW5nIHRoZSBuYW1lDQogICAgKiBAcmV0dXJuIEJvb2xlYW4gaWYgZXhpc3RzDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gaXNGaWVsZEJ5TmFtZUV4aXN0cygkbmFtZSkgew0KCQlyZXR1cm4gaXNzZXQoJHRoaXMtPmZpZWxkc1skbmFtZV0pOw0KCX0NCgkNCiAgICAvKioNCiAgICAqIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgdGFibGUgaW50byB0aGUgZGF0YWJhc2UNCiAgICAqIA0KICAgICogQHJldHVybiBzdHJpbmcgdGhlIG5hbWUgb2YgdGhlIHRhYmxlIGludG8gdGhlIGRhdGFiYXNlDQogICAgKiANCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXREYm5hbWUoKSB7DQoJCXJldHVybiAkdGhpcy0+ZGJuYW1lOw0KCX0NCgkNCiAgICAvKioNCiAgICAqIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgZW50aXR5DQogICAgKiANCiAgICAqIEByZXR1cm4gc3RyaW5nIHRoZSBuYW1lIG9mIHRoZSBlbnRpdHkNCiAgICAqIA0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIGdldE5hbWUoKSB7DQoJCXJldHVybiAkdGhpcy0+bmFtZTsNCgl9DQoJDQoJLyoqDQoJICogIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBtb2R1bGUNCgkgKiAgDQoJICogIEByZXR1cm4gc3RyaW5nIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IG1vZHVsZS4NCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIGdldE1vZHVsZU5hbWUoKSB7DQoJCXJldHVybiAkdGhpcy0+bW9kdWxlTmFtZTsNCgl9DQoJDQogICAgLyoqDQogICAgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHNlcXVlbmNlIChpZiBleGlzdHMpDQogICAgKiANCiAgICAqIEByZXR1cm4gc3RyaW5nIHRoZSBuYW1lIG9mIHRoZSBzZXF1ZW5jZSBvciBOVUxMDQogICAgKiANCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRTZXFuYW1lKCkgew0KCQlpZihlbXB0eSgkdGhpcy0+c2VxbmFtZSkpDQoJCQlyZXR1cm4gbnVsbDsNCgkJDQoJCXJldHVybiAkdGhpcy0+c2VxbmFtZTsNCgl9DQoJDQogICAgLyoqDQogICAgKiBSZXR1cm4gdGhlIHZhbHVlIGZvciBhIEZpZWxkIGJ5IHRoZSBuYW1lIA0KICAgICogCQ0KICAgICogQHBhcmFtIHN0cmluZyB0aGUgbmFtZSBvZiB0aGUgRmllbGQNCiAgICAqIEByZXR1cm4gbWl4ZWQgdGhlIHZhbHVlIGZvciB0aGUgZmllbGQNCiAgICAqIA0KICAgICogQGV4Y2VwdGlvbiBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgbm8gRmllbGQgZXhpc3RzIGZvciB0aGUgbmFtZQ0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIGdldCgkZmllbGROYW1lKSB7DQoNCgkJJGZpZWxkbmFtZVNpZCA9ICRmaWVsZE5hbWU7DQoJCWlmKCFhcnJheV9LRVlfZXhpc3RzKCRmaWVsZE5hbWUsJHRoaXMtPmZpZWxkcykgJiYgIWFycmF5X0tFWV9leGlzdHMoJGZpZWxkbmFtZVNpZCwkdGhpcy0+ZmllbGRzKSkgew0KCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiZm9uY3Rpb24gR2V0IDogRmllbGQgJGZpZWxkTmFtZSBub3QgZm91bmQgZm9yIGVudGl0eSAiLiR0aGlzLT5nZXROYW1lKCkpOw0KCQl9DQoJCQ0KCQlpZighaXNzZXQoJHRoaXMtPnZhbHVlc1skZmllbGROYW1lXSkpIHsNCgkJCXJldHVybiBudWxsOw0KCQl9DQoJCQ0KCQlyZXR1cm4gJHRoaXMtPnZhbHVlc1skZmllbGROYW1lXTsNCgl9DQoJDQogICAvKioNCiAgICAqIFNldCBhIHZhbHVlIHRvIGEgRmllbGQNCiAgICAqICAgICANCiAgICAqIEBwYXJhbSBzdHJpbmcgVGhlIG5hbWUgb2YgdGhlIEZpZWxkDQogICAgKiBAcGFyYW0gbWl4ZWQgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgRmllbGQNCiAgICAqIA0KICAgICogQGV4Y2VwdGlvbiBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgbm8gRmllbGQgZXhpc3RzIGZvciB0aGUgbmFtZQ0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIHNldCgkZmllbGROYW1lLCR2YWx1ZSkgew0KCQkkZmllbGRuYW1lU2lkID0gZXhwbG9kZSgiX3NpZCIsICRmaWVsZE5hbWUpOw0KCQkkZmllbGRuYW1lU2lkID0gJGZpZWxkbmFtZVNpZFswXTsNCgkJaWYoIWFycmF5X0tFWV9leGlzdHMoJGZpZWxkTmFtZSwkdGhpcy0+ZmllbGRzKSAmJiAhYXJyYXlfS0VZX2V4aXN0cygkZmllbGRuYW1lU2lkLCR0aGlzLT5maWVsZHMpKSB7DQoJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJmdW5jdGlvbiBTZXQgOiBGaWVsZCAkZmllbGROYW1lIG5vdCBmb3VuZCBpbnRvIHRoZSBlbnRpdHkiLiR0aGlzLT5nZXROYW1lKCkpOw0KCQl9DQoJCQ0KCQkkdGhpcy0+dmFsdWVzWyRmaWVsZE5hbWVdID0gJHZhbHVlOw0KCX0NCgkNCiAgICAvKioNCiAgICAqIFJldHVybiB0aGUgdmFsdWVzIGZvciBhbGwgdGhlIEZpZWxkcyBpbnRvIGFuIGFzc29jaWF0aXZlIGFycmF5IHdpdGggDQogICAgKiAgKiBrZXkgPSBuYW1lIG9mIHRoZSBGaWVsZCwgYW5kIA0KICAgICogICogdmFsdWUgPSBpdHMgdmFsdWUNCiAgICAqIA0KICAgICogQHJldHVybiBhcnJheSBhbiBhc3NvY2lhdGl2ZSBhcnJheQ0KICAgICogDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0VmFsdWVzKCkgew0KCQlyZXR1cm4gJHRoaXMtPnZhbHVlczsNCgl9DQoJCQ0KCS8qKg0KCSAqIFNob3J0Y3V0IHRvIHNhdmUgdGhlIGVudGl0eS4gaWYgdGhlIHByaW1hcnlLZXkgaXMgc2V0dGVkLCBpdCB3aWxsIGJlIGFuIHVwZGF0ZSBvcGVyYXRpb24sIGVsc2UgYW4gaW5zZXJ0Lg0KCSAqDQoJICogQHJldHVybiB0aGUgZW50aXR5IHNhdmVkIHdpdGggaXRzIG5ldyBuZXcgSWQgKGN1c3RvbWVyX2lkIGluIG15IGV4YW1wbGUpIGlmIGl0J3MgYW4gaW5zZXJ0aW9uDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBzYXZlKCl7DQoJCWlmKCR0aGlzLT5wayA9PSBudWxsKSB7DQoJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ5b3UgY2FuJ3Qgc2F2ZSB0aGUgZW50aXR5ICIuJHRoaXMtPmdldE5hbWUoKS4iIGJlY2F1c2UgaXQgZG9lc24ndCBoYXZlIGFueSBQcmltYXJ5LUtleSIpOw0KCQl9DQoJDQoJCWlmKCR0aGlzLT5nZXQoJHRoaXMtPnBrKSA9PSBudWxsKSB7DQoJCQlyZXR1cm4gT3JtQ29yZTo6aW5zZXJ0RW50aXR5KCR0aGlzKTsNCgkJfSBlbHNlIHsNCgkJCXJldHVybiBPcm1Db3JlOjp1cGRhdGVFbnRpdHkoJHRoaXMpOw0KCQl9DQoJfQ0KCQ0KCS8qKg0KCSAqIFNob3J0Y3V0IHRvIGRlbGV0ZSB0aGUgZW50aXR5DQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBkZWxldGUoKXsNCgkJaWYoJHRoaXMtPnBrID09IG51bGwpIHsNCgkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInlvdSBjYW4ndCBkZWxldGUgdGhlIGVudGl0eSAiLiR0aGlzLT5nZXROYW1lKCkuIiBiZWNhdXNlIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgUHJpbWFyeS1LZXkiKTsNCgkJfQ0KCQkNCgkJaWYoJHRoaXMtPmdldCgkdGhpcy0+cGspID09IG51bGwpIHsNCgkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInlvdSBjYW4ndCBkZWxldGUgdGhlIGVudGl0eSAiLiR0aGlzLT5nZXROYW1lKCkuIiBiZWNhdXNlIGl0cyBQcmltYXJ5LUtleSBkb2Vzbid0IGhhdmUgYW55IHZhbHVlIik7DQoJCX0NCgkJDQoJCU9ybUNvcmU6OmRlbGV0ZUJ5SWRzKCR0aGlzLCBhcnJheSgkdGhpcy0+Z2V0KCR0aGlzLT5waykpKTsNCgl9DQoJDQogICAgLyoqDQogICAgKiBDYW4gYmUgb3ZlcnJpZGRlbiBMZXQgeW91IG1vZGlmeSBzb21lIGRhdGEganVzdCBiZWZvcmUgc2F2aW5nIHRoZSBkYXRhIGludG8gdGhlIGRhdGF0YWJsZS4NCiAgICAqIA0KICAgICogQHBhcmFtIGFycmF5IGFsbCB0aGUgdmFsdWVzIHRvIHByb2Nlc3MNCiAgICAqIEBwYXJhbSBhcnJheSBtb3JlIHBhcmFtZXRlcnMgaWYgeW91IG5lZWQsIGlmIHlvdSB3YW50DQogICAgKiANCiAgICAqIEByZXR1cm4gbWl4ZWQgdG8gZGVmaW5lDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gcHJvY2Vzc1ZhbHVlRm9yU2F2ZSgkcm93cywgJGFyZ3MgPSBudWxsKXsNCgkNCgkJcmV0dXJuICRyb3dzOw0KCX0NCgkNCgkvKioNCgkgKiBDYWxsIHRoZSBjb21wYXJlVG8gZnVuY3Rpb24gaW50byB5b3VyIEVudGl0eSB0byBzb3J0IHRoZSBFbnRpdGllcy4NCgkgKiBUbyBhY3RpdmF0ZSB0aGlzIGZ1bmN0aW9uYWxpdHksIFRoZSBFbnRpdHkgbXVzdCBpbXBsZW1lbnQgSVNvcnRhYmxlIEludGVyZmFjZS4NCgkgKg0KCSAqIEV4YW1wbGUgb2YgZnVuY3Rpb24gY29tcGFyZVRvKCkgaW4gYSBDdXN0b21lciBFbnRpdHkNCgkgKiAgPGNvZGU+DQoJICogICAgICAgDQoJICoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb21wYXJlVG8oT3JtRW50aXR5ICRlbnRpdHkxLCBPcm1FbnRpdHkgJGVudGl0eTIpDQoJICoJew0KCSAqCQkkY29tcGFyZSA9IHN0cmNtcCgkZW50aXR5MS0+Z2V0KCduYW1lJyksICRlbnRpdHkyLT5nZXQoJ25hbWUnKSk7DQoJICogICAgICAJcmV0dXJuICRjb21wYXJlOw0KCSAqCX0NCgkgKiANCgkgKiAgPC9jb2RlPg0KCSAqDQoJICogQHBhcmFtIGFycmF5PE9ybUVudGl0eT4gdGhlIGxpc3Qgb2YgRW50aXR5IHRvIHNvcnQNCgkgKg0KCSAqIEByZXR1cm4gYXJyYXk8T3JtRW50aXR5PiB0aGUgbGlzdCBvZiBFbnRpdHkgZ3JhY2VmdWxseSBzb3J0ZWQNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNvcnQoYXJyYXkgJGFycmF5KSB7DQoNCgkJdXNvcnQoJGFycmF5LCBhcnJheShnZXRfY2FsbGVkX2NsYXNzKCksICJjb21wYXJlVG8iKSk7DQoJDQoJCXJldHVybiAkYXJyYXk7DQoJfQ0KCQ0KCS8qKg0KCSAqIE1heSBiZSBvdmVycmlkZSBpbiB5b3VyIEVudGl0eSdzIGRlZmluaXRpb24gdG8gYWxsb3cgU2VhcmNoIG1vZHVsZSBpbmRleGluZyB5b3VyIGVudGl0aWVzJ3MgZGF0YQ0KCSAqIA0KCSAqIEV4YW1wbGUgb2YgZnVuY3Rpb24gaXNJbmRleGFibGUoKSBpbiBhIEN1c3RvbWVyIEVudGl0eQ0KCSAqICANCgkgKiAgPGNvZGU+DQoJICogICAgICAgDQoJICoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0luZGV4YWJsZSgpDQoJICoJew0KCSAqCQlyZXR1cm4gdGhpcy0+Z2V0Wydpc0FjdGl2YXRlZCddOw0KCSAqCX0NCgkgKiANCgkgKiAgPC9jb2RlPg0KCSAqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzSW5kZXhhYmxlKCl7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJCQ0KCS8qKg0KICAgICogZ2V0dGVyIGZvciBhdXRvaW5jcmVtZW50DQogICAgKiANCiAgICAqIEByZXR1cm4gdHJ1ZSBvZiB0aGUgRmllbGQgaXMgYXV0b2luY3JlbWVudA0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIElzQXV0b2luY3JlbWVudCgpIHsNCgkJcmV0dXJuICR0aGlzLT5hdXRvaW5jcmVtZW50Ow0KCX0NCgkNCgkvKioNCgkgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgbGV0IHlvdSBkZWZpbmUgc29tZSBvcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB5b3VyIEVudGl0eQ0KCSAqICAgID0+IHRoZSBmaWVsZCBtdXN0IGJlIGF1dG8taW5jcmVtZW50YWwNCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIGdhcm5pc2hBdXRvaW5jcmVtZW50KCl7DQoJCQ0KCQlpZigkdGhpcy0+Z2V0UGsoKSA9PSBudWxsIHx8ICR0aGlzLT5nZXRQaygpLT5nZXRUeXBlKCkgIT0gT3JtQ0FTVDo6JElOVEVHRVIpew0KCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiZW50aXR5ICIuJHRoaXMtPmdldE5hbWUoKS4iIGRvbid0IGhhdmUgYW55IElOVEVHRVIgUEsgYW5kIHNvIGNhbid0IGJlIGRlZmluZWQgYXV0b2luY3JlbWVudCIpOw0KCQl9DQoJCSR0aGlzLT5hdXRvaW5jcmVtZW50ID0gdHJ1ZTsNCgkJDQoJCS8vUmVtb3ZlIGFueSBzZXEgdGhhdCBjb3VsZCBiZSBhZGQgYmVmb3JlDQogICAgICAgICR0aGlzLT5zZXFuYW1lID0gbnVsbDsNCgl9DQoJDQoJLyoqDQoJICogUmV0dXJuIA0KCSAqIEByZXR1cm4gYXJyYXkgOiB0aGUgbGlzdCBvZiBjb3VwbGUgb2YgdW5pcXVlIGluZGV4DQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRVbmlxdWVLZXlzKCkgew0KCQlyZXR1cm4gJHRoaXMtPnVuaXF1ZUtleXM7DQoJfQ0KCQ0KCS8qKg0KCSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBsZXQgeW91IGRlZmluZSBzb21lIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHlvdXIgRW50aXR5DQoJICogICAgPT4gdGhlIGZpZWxkIGhhdmUgb25lIG9yIG1hbnkgVW5pcXVlIEtleSBvbiBvbmUgb3IgbWFueSBjb2x1bW5zLg0KCSAqDQoJICogIGV4IDogbXlFbnRpdHktPmdhcm5pc2hVbmlxdWVLZXlzKGFycmF5KCdmaWVsZDEnLCBhcnJheSgnZmllbGQyJywgJ2ZpZWxkMycpKSkgd2lsbCBjcmVhdGUgMiB1bmlxdWUgaW5kZXgNCgkgKg0KCSAqIEBwYXJhbSBhcnJheSBhIGxpc3Qgb2Ygb25lIG9yIG1hbnkgbmFtZSBvZiBmaWVsZCANCgkgKg0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2FybmlzaFVuaXF1ZUtleXMoJHVuaXF1ZUtleXMpew0KCQkNCgkJaWYoIWlzX2FycmF5KCR1bmlxdWVLZXlzKSl7DQoJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJnYXJuaXNoVW5pcXVlS2V5cygpIG9ubHkgYWNjZXB0IGFuIGFycmF5IGFzIHBhcmFtZXRlciIpOw0KCQl9DQoJCQ0KCQkvL1Rlc3QgdGhlIGV4aXN0ZW5jZSBvZiBlYWNoIG1lbWJlcg0KCQlmb3JlYWNoKCR1bmlxdWVLZXlzIGFzICRtZW1iZXIpew0KCQkJaWYoaXNfYXJyYXkoJG1lbWJlcikpew0KCQkJCWZvcmVhY2goJG1lbWJlciBhcyAkZWx0KXsNCgkJCQkJaWYoISR0aGlzLT5pc0ZpZWxkQnlOYW1lRXhpc3RzKCRlbHQpKXsNCgkJCQkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImdhcm5pc2hVbmlxdWVLZXlzKCkgb25seSBhY2NlcHQgdmFsaWQgRmllbGQgYnV0ICIuJGVsdC4iIGlzIG5vdCBhIGV4aXN0aW5nIEZpZWxkIGluIHRoZSBFbnRpdHkgIi4kdGhpcy0+Z2V0TmFtZSgpKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0gZWxzZSB7DQoJCQkJaWYoISR0aGlzLT5pc0ZpZWxkQnlOYW1lRXhpc3RzKCRtZW1iZXIpKXsNCgkJCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiZ2FybmlzaFVuaXF1ZUtleXMoKSBvbmx5IGFjY2VwdCB2YWxpZCBGaWVsZCBidXQgIi4kbWVtYmVyLiIgaXMgbm90IGEgZXhpc3RpbmcgRmllbGQgaW4gdGhlIEVudGl0eSAiLiR0aGlzLT5nZXROYW1lKCkpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQ0KCQkkdGhpcy0+dW5pcXVlS2V5cyA9ICR1bmlxdWVLZXlzOw0KCX0NCgkNCgkNCgkvKioNCgkgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgbGV0IHlvdSBkZWZpbmUgc29tZSBvcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB5b3VyIEVudGl0eQ0KCSAqICAgID0+IHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBmaWVsZCBpcyAuLi4NCgkgKg0KCSAqICBleCA6IG15RW50aXR5LT5nYXJuaXNoRGVmYXVsdFZhbHVlKCdmaWVsZDEnLCAnc29tZSB0ZXh0JykNCgkgKg0KCSAqIEBwYXJhbSBTdHJpbmcgdGhlIG5hbWUgb2YgdGhlIEZpZWxkDQoJICogQHBhcmFtIE1peGVkIHRoZSBkZWZhdWx0IHZhbHVlLg0KCSAqDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBnYXJuaXNoRGVmYXVsdFZhbHVlKCRmaWVsZE5hbWUsJGRlZmF1bHRWYWx1ZSl7DQoJCWlmKCEkdGhpcy0+aXNGaWVsZEJ5TmFtZUV4aXN0cygkZmllbGROYW1lKSl7DQoJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJnYXJuaXNoRGVmYXVsdCgpIG9ubHkgYWNjZXB0IHZhbGlkIEZpZWxkIGJ1dCAiLiRmaWVsZE5hbWUuIiBpcyBub3QgYSBleGlzdGluZyBGaWVsZCBpbiB0aGUgRW50aXR5ICIuJHRoaXMtPmdldE5hbWUoKSk7DQoJCX0NCgkJDQoJCS8vZm9yYmlkIGEgZGVmYXVsdCB2YWx1ZSBvbiBhIG51bGxhYmxlIGZpZWxkIEJlY2F1c2UgaXQncyBtYWtlIG5vIHNlbmNlDQoJCWlmKCR0aGlzLT5nZXRGaWVsZEJ5TmFtZSgkZmllbGROYW1lKS0+aXNOdWxsYWJsZSgpKXsNCgkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInRoZSBGaWVsZCAiLiRmaWVsZE5hbWUuIiBpbiB0aGUgRW50aXR5ICIuJHRoaXMtPmdldE5hbWUoKS4iIGNhbid0IGFjY2VwdCBhIGRlZmF1bHQgdmFsdWUgYmVjYXVzZSBpdCdzIHNldHRlZCBOdWxsYWJsZSIpOw0KCQl9DQoJCQ0KCQkkdGhpcy0+Z2V0RmllbGRCeU5hbWUoJGZpZWxkTmFtZSktPnNldERlZmF1bHRWYWx1ZSgkZGVmYXVsdFZhbHVlKTsNCgkJDQoJfQ0KfQ0KDQo/Pg0K]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormentityassociation.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgT3JtRW50aXR5QXNzb2NpYXRpb24gQ2xhc3Mgd2hpY2ggZXh0ZW5kcyBPcm1FbnRpdHkgY2xhc3MNCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQogDQovKioNCiAqIEFic3RyYWN0IENsYXNzIHdoaWNoIGRlc2NyaWJlcyB0aGUgcHJvcGVydGllcyBmb3IgYW4gQXNzb2NpYXRpdmUgRW50aXR5DQogKiAgICANCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQphYnN0cmFjdCBjbGFzcyBPcm1FbnRpdHlBc3NvY2lhdGlvbiBleHRlbmRzIE9ybUVudGl0eSANCnsNCglwcml2YXRlICRuYkZpZWxkID0gMDsNCg0KICAgIC8qKg0KICAgICAqIGNvbnN0cnVjdG9yIHByb3RlY3RlZCB0byBhdm9pZCBhIGRpcmVjdCBpbnN0YW5jaWF0aW9uIGxpa2UgIm5ldyBPcm1FbnRpdHlBc3NvY2lhdGlvbigpIg0KICAgICAqIEVhY2ggdGltZSBhIGVudGl0eSBpcyBjb25zdHJ1Y3RlZCwgd2UgcGxhY2UgYSBjb3B5IGludG8gdGhlIGF1dG9sb2FkZXIuDQogICAgICogDQogICAgICogQHBhcmFtIHN0cmluZyBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHdobyBjYWxsaW5nIHRoaXMgbWV0aG9kIChzbyBub3QgIk9ybSIpDQogICAgICogQHBhcmFtIHN0cmluZyBUaGUgbmFtZSBvZiB0aGUgZW50aXR5DQogICAgICogQHBhcmFtIHN0cmluZyBbb3B0aW9uYWxdIFByZWZpeCB0byB1c2UgaW50byBkYXRhYmFzZSBmb3IgdGFibGUuIElmIG5vdCBzZXR0ZWQsIGl0IHdpbGwgdXNlIHRoZSBuYW1lIG9mIHlvdXIgbW9kdWxlDQogICAgICogQHBhcmFtIHN0cmluZyBbb3B0aW9uYWxdIFRoZSBuYW1lIG9mIHRhYmxlIGZvciB0aGlzIGVudGl0eS4gSWYgbm90IHNldHRlZCwgaXQgd2lsbCB1c2UgdGhlIG5hbWUgb2YgeW91ciBlbnRpdHkNCiAgICAgKg0KICAgICAqIEByZXR1cm4gT3JtRW50aXR5QXNzb2NpYXRpb24gdGhlIGVudGl0eSBhcyBhIG5ldyBpbnN0YW5jZQ0KICAgICAqIA0KICAgICAqIEBzZWUgTXlBdXRvbG9hZA0KICAgICAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbW9kdWxlTmFtZSwgJG5hbWUsJHByZWZpeGUgPSBudWxsLCAkZGJOYW1lID0gbnVsbCkNCgl7DQoJCXBhcmVudDo6X19jb25zdHJ1Y3QoJG1vZHVsZU5hbWUsICRuYW1lLCAkcHJlZml4ZSwgJGRiTmFtZSk7DQoJfQ0KCQ0KICAgIC8qKg0KICAgICogQWRkIGEgbmV3IEZpZWxkDQogICAgKiANCiAgICAqIEN1cnJlbnRseSwgdGhlIE9ybSBTeXN0ZW0gZG9lbid0IGFsbG93IG1vcmUgdGhhbiB0d28gRmllbGQgZm9yIGFuIEVudGl0eUFzc29jaWF0aW9uDQogICAgKiANCiAgICAqIEBwYXJhbSBPcm1GaWVsZCB0aGUgRmllbGQgdG8gYWRkLg0KCSoNCgkqIEBleGNlcHRpb24gT3JtSWxsZWdhbENvbmZpZ3VyYXRpb25FeGNlcHRpb24gaWYgd2UgdHJ5IHRvIHVzZSBtb3JlIHRoYW4gdHdvIEZpZWxkcyBpbiB0aGUgZW50aXR5DQogICAgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gYWRkKE9ybUZpZWxkICRuZXdGaWVsZCkNCgl7DQoJCSR0aGlzLT5uYkZpZWxkICsrOw0KCQkNCgkJaWYoJHRoaXMtPm5iRmllbGQgPiAyKQ0KCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxDb25maWd1cmF0aW9uRXhjZXB0aW9uICgiSXQncyBpbXBvc3NpYmxlIHRvIHVzZSBtb3JlIHRoYW4gdHdvIEZpZWxkIGluIHRoZSBFbnRpdHlBc3NvY2lhdGlvbiAiLiAkdGhpcy0+Z2V0TmFtZSgpKTsNCgkJCQkNCgkJcGFyZW50OjphZGQoJG5ld0ZpZWxkKTsNCgl9DQoNCn0=]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormexample.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgT3JtRXhhbXBsZSBDbGFzcw0KICoNCiAqIEBzaW5jZSAwLjAuMQ0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBPcm0NCiAqKi8NCiANCiANCi8qKg0KICogUmVwcmVzZW50cyBhIGdyb3VwIG9mIGRpZmZlcmVudHMgT3JtQ3JpdGVyaWEgKENyaXRlcmlhcykgdG8gcHJvY2VzcyBhIHNlYXJjaCAiQnkgRXhhbXBsZSIgb24gYSBPcm1FbnRpdHkgaW4gRGF0YWJhc2UNCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQpmaW5hbCBjbGFzcyBPcm1FeGFtcGxlIA0Kew0KCXByaXZhdGUgJENyaXRlcmlhcyA9IGFycmF5KCk7DQoJDQogICAgLyoqDQogICAgKiBQdWJsaWMgQ29uc3RydWN0b3INCiAgICAqIA0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkNCgl7DQoJfQ0KCQ0KICAgIA0KICAgIC8qKg0KICAgICogQWRkIGEgbmV3IENyaXRlcmlhIG9uIHRoZSBleGlzdGluZyBsaXN0DQogICAgKiANCiAgICAqIEBwYXJhbSBzdHJpbmcgTmFtZSBvZiB0aGUgZmllbGQgDQogICAgKiBAcGFyYW0gT3JtVHlwZUNyaXRlcmlhIFR5cGUgb2YgQ3JpdGVyaWENCiAgICAqIEBwYXJhbSBhcnJheSBhbGwgdGhlIHBhcmFtZXRlcnMgdXNlZCBmb3IgdGhlIHBhcmFtZXRlciAkdHlwZUNyaXRlcmlhDQogICAgKiBAcGFyYW0gYm9vbGVhbiBbT3B0aW9ubmFsXSBpZiB3ZSBtdXN0IGlnbm9yZSB0aGUgY2FzZSAoYXplIGVxdWFscyBBWkUpIG9yIG5vdC4gRGVmYXVsdCB2YWx1ZSBpcyAiZmFsc2UiDQogICAgKiANCiAgICAqIEBzZWUgT3JtVHlwZUNyaXRlcmlhDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gYWRkQ3JpdGVyaWEoJGZpZWxkbmFtZSwgJHR5cGVDcml0ZXJpYSwgJHBhcmFtc0NyaXRlcmlhLCAkaWdub3JlQ2FzZSA9IGZhbHNlKQ0KCXsNCgkJaWYoIWlzX2FycmF5KCRwYXJhbXNDcml0ZXJpYSkpDQoJCXsNCgkJCXRocm93IG5ldyBFeGNlcHRpb24oInRoZSBwYXJhbWV0ZXIgXCRwYXJhbXNDcml0ZXJpYSBmb3IgdGhlIENyaXRlcmlhIG9mIHRoZSBGaWVsZCBbIi4kZmllbGRuYW1lLiJdIG11c3QgYmUgYW4gYXJyYXkiKTsNCgkJfQ0KCQkNCgkJJHRoaXMtPkNyaXRlcmlhc1tdID0gbmV3IE9ybUNyaXRlcmlhKCRmaWVsZG5hbWUsICR0eXBlQ3JpdGVyaWEsICRwYXJhbXNDcml0ZXJpYSwgJGlnbm9yZUNhc2UpOw0KCX0NCg0KICAgIC8qKg0KICAgICogUmV0dXJuIGFsbCB0aGUgQ3JpdGVyaWFzIGNvbnRhaW5lZCBpbiB0aGUgY3VycmVudCBFeGFtcGxlIE9iamVjdA0KICAgICogDQogICAgKiBAcmV0dXJuIGFycmF5PENyaXRlcmlhPiB0aGUgbGlzdCBvZiBDcml0ZXJpYXMgY29udGFpbmVkIGluIHRoZSBjdXJyZW50IEV4YW1wbGUgT2JqZWN0DQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0Q3JpdGVyaWFzKCl7DQoJCXJldHVybiAkdGhpcy0+Q3JpdGVyaWFzOw0KCX0NCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormfield.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGNsYXNzIE9ybUZpZWxkDQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KIA0KLyoqDQogKiAgIFJlcHJlc2VudCBhIE9ybUVudGl0eSdzIGZpZWxkIHdpdGggYWxsIGl0cyBwcm9wZXJ0aWVzDQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KY2xhc3MgT3JtRmllbGQgDQp7DQoJLyoqDQoJICogVGhlICh1bmlxdWUpIG5hbWUgb2YgdGhlIGZpZWxkDQoJICovDQoJcHJpdmF0ZSAkbmFtZTsNCgkNCgkvKioNCgkgKiBUaGUgT3JtQ0FTVCB2YWx1ZSBvZiB0aGUgZmllbGQNCgkgKi8NCglwcml2YXRlICR0eXBlOw0KCQ0KCS8qKg0KCSAqIFRoZSBtYXggc2l6ZSBvZiB0aGUgZmllbGQuIE1heSBiZSBudWxsIGlmICR0eXBlIGlzIERhdGUsIFRpbWUsIEJ1ZmZlciwgTm9uZSAuLi4NCgkgKi8NCglwcml2YXRlICRzaXplOw0KCQ0KCS8qKg0KCSAqIEJvb2xlYW4gOiB0cnVlIGlmIHRoZSB2YWx1ZSBtYXkgYmUgTlVMTA0KCSAqLw0KCXByaXZhdGUgJG51bGxhYmxlOw0KCQ0KCS8qKg0KCSAqIHRoZSBPcm1LRVkgdmFsdWUgb2YgdGhlIGZpZWxkLiBNYXkgYmUgbnVsbA0KCSAqLw0KCXByaXZhdGUgJEtFWTsNCgkNCgkvKioNCgkgKiB0aGUgbmFtZSBvZiB0aGUga2V5LiBPbmx5IHVzZWQgZm9yIEZvcmVpZ25LZXkgYW5kIEFzc29jaWF0ZUtleQ0KCSAqLw0KCXByaXZhdGUgJEtFWU5hbWU7DQoJDQoJLyoqDQoJICogVGhlIGRlZmF1bHQgdmFsdWUuIE5vdCB1c2VkIGJ5IGRlZmF1bHQuDQoJICoqLw0KCXByaXZhdGUgJGRlZmF1bHRWYWx1ZTsNCgkNCiAgICAvKioNCiAgICAqIHB1YmxpYyBjb25zdHJ1Y3Rvcg0KICAgICogCQ0KICAgICogQHBhcmFtIHN0cmluZyB0aGUgKHVuaXF1ZSkgbmFtZSBvZiB0aGUgZmllbGQNCiAgICAqIEBwYXJhbSBPcm1DQVNUIFRoZSBPcm1DQVNUIHZhbHVlIG9mIHRoZSBmaWVsZCBleGFtcGxlIDogT3JtT3JtQ0FTVDo6JElOVEVHRVINCiAgICAqIEBwYXJhbSBpbnQgVGhlIG1heCBzaXplIG9mIHRoZSBmaWVsZC4gTWF5IGJlIG51bGwgaWYgJHR5cGUgaXMgRGF0ZSwgVGltZSwgQnVmZmVyLCBOb25lIC4uLg0KICAgICogQHBhcmFtIHRydWUgaWYgdGhlIHZhbHVlIG1heSBiZSBOVUxMLiBEZWZhdWx0IHZhbHVlIGlzIGZhbHNlDQogICAgKiBAcGFyYW0gT3JtS0VZIHRoZSBLRVkgdmFsdWUgb2YgdGhlIGZpZWxkLiBNYXkgYmUgbnVsbCBleGFtcGxlOiBPcm1LRVk6OiRQSyBmb3IgYSBwcmltYXJ5IGtleQ0KICAgICogQHBhcmFtIHN0cmluZyB0aGUgbmFtZSBvZiB0aGUga2V5LiBPbmx5IHVzZWQgZm9yIEZvcmVpZ25LZXkgYW5kIEFzc29jaWF0ZUtleSBleGFtcGxlIDogIkN1c3RvbWVyLmN1c3RvbWVyX2lkIiBpbiB0aGUgZmllbGQgImN1c3RvbWVyIiBvZiBhbiBlbnRpdHkgIk9yZGVyIi4NCiAgICAqIA0KICAgICogQHJldHVybiBPcm1GaWVsZCB0aGUgRmllbGQgT2JqZWN0DQogICAgKiANCiAgICAqIA0KICAgICogQHNlZSBPcm1DQVNUDQogICAgKiBAc2VlIE9ybUtFWQ0KCSogQHNlZSBPcm1FbnRpdHkNCiAgICAqIA0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRmaWVsZG5hbWUsICRjYXN0LCAkc2l6ZSA9IG51bGwsICRudWxsYWJsZSA9IGZhbHNlLCAkS0VZID0gbnVsbCwgJEtFWU5hbWU9bnVsbCkgew0KCQ0KCQlpZihlbXB0eSgkS0VZKSAmJiAhZW1wdHkoJEtFWU5hbWUpKSB7DQoJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbENvbmZpZ3VyYXRpb25FeGNlcHRpb24oJ0ltcG9zc2libGUgdG8gc3BlY2lmeSBhIGtleU5hbWUgcGFyYW1ldGVyIGZvciB0aGUgZmllbGQgJy4kZmllbGRuYW1lLicgaWYgdGhlIGtleSBpcyBub3QgJEZLIG9yICRBSycpOw0KCQl9DQoJCWlmKCRLRVkgPT0gT3JtS0VZOjokUEsgJiYgIWVtcHR5KCRLRVlOYW1lKSkgew0KCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxDb25maWd1cmF0aW9uRXhjZXB0aW9uKCdJbXBvc3NpYmxlIHRvIHNwZWNpZnkgYSBrZXlOYW1lIHBhcmFtZXRlciBmb3IgdGhlIGZpZWxkICcuJGZpZWxkbmFtZS4nIGlmIHRoZSBrZXkgaXMgbm90ICRGSyBvciAkQUsnKTsNCgkJfQ0KCQlpZigoJEtFWSA9PSBPcm1LRVk6OiRGSyB8fCAkS0VZID09IE9ybUtFWTo6JEFLKSAmJiBlbXB0eSgkS0VZTmFtZSkpIHsNCgkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQ29uZmlndXJhdGlvbkV4Y2VwdGlvbignJEZLIGtleSBvciAkQUsga2V5IGZvciB0aGUgZmllbGQgJy4kZmllbGRuYW1lLicgbmVlZCBhIGtleU5hbWUnKTsNCgkJfQ0KCQkNCgkJaWYoKCRjYXN0ID09IE9ybUNBU1Q6OiREQVRFIHx8ICRjYXN0ID09IE9ybUNBU1Q6OiRCVUZGRVIgfHwgJGNhc3QgPT0gT3JtQ0FTVDo6JFRJTUUpICYmICFlbXB0eSgkc2l6ZSkpIHsNCgkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQ29uZmlndXJhdGlvbkV4Y2VwdGlvbignVGhlIE9ybUNBU1Q6OkRBVEUgb3IgdGhlIE9ybUNBU1Q6OkJVRkZFUiBvciB0aGUgT3JtQ0FTVDo6VElNRSBvZiBmaWVsZCAnLiRmaWVsZG5hbWUuJyBtdXN0IG5vdCBoYXZlIHNpemUgdmFsdWUnKTsNCgkJfQ0KCQkNCg0KCQlpZigkbnVsbGFibGUgPT0gbnVsbCkgew0KCQkJJG51bGxhYmxlID0gZmFsc2U7DQoJCX0NCgkJCQ0KCQkkdGhpcy0+bmFtZSAJPSAkZmllbGRuYW1lOw0KCQkkdGhpcy0+dHlwZSAJPSAkY2FzdDsNCgkJJHRoaXMtPnNpemUgCT0gJHNpemU7DQoJCSR0aGlzLT5udWxsYWJsZSA9ICRudWxsYWJsZTsNCgkJJHRoaXMtPktFWSAJCT0gJEtFWTsNCgkJJHRoaXMtPktFWU5hbWUgCT0gJEtFWU5hbWU7DQoJfQ0KCQ0KDQogICAgLyoqDQogICAgKiBnZXR0ZXIgZm9yIG5hbWUNCiAgICAqIA0KICAgICogQHJldHVybiBzdHJpbmcgdGhlICh1bmlxdWUpIG5hbWUgb2YgRmllbGQNCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXROYW1lKCkNCgl7cmV0dXJuICR0aGlzLT5uYW1lO30NCg0KICAgIC8qKg0KICAgICogZ2V0dGVyIGZvciB0eXBlDQogICAgKiANCiAgICAqIEByZXR1cm4gc3RyaW5nIHRoZSBDQVNUIHZhbHVlIG9mIEZpZWxkDQogICAgKiANCiAgICAqIEBzZWUgT3JtQ0FTVA0KICAgICogDQogICAgKi8JDQoJcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQ0KCXtyZXR1cm4gJHRoaXMtPnR5cGU7fQ0KCQ0KICAgLyoqDQogICAgKiBnZXR0ZXIgZm9yIHNpemUNCiAgICAqIA0KICAgICogQHJldHVybiBpbnQgdGhlIHNpemUgb2YgRmllbGQNCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRTaXplKCkNCgl7cmV0dXJuICR0aGlzLT5zaXplO30NCg0KICAgLyoqDQogICAgKiByZXR1cm4gdHJ1ZSBpZiBGaWVsZCBoYXMgYSAkUEsNCiAgICAqIA0KICAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgRmllbGQgaGFzIGEgJFBLDQogICAgKi8JDQoJcHVibGljIGZ1bmN0aW9uIGlzUHJpbWFyeUtFWSgpDQoJe3JldHVybiAkdGhpcy0+S0VZID09IE9ybUtFWTo6JFBLO30NCg0KICAgLyoqDQogICAgKiByZXR1cm4gdHJ1ZSBpZiBGaWVsZCBoYXMgYSAkRksNCiAgICAqIA0KICAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgRmllbGQgaGFzIGEgJEZLDQogICAgKi8gICAgCQ0KCXB1YmxpYyBmdW5jdGlvbiBpc0ZvcmVpZ25LRVkoKQ0KCXtyZXR1cm4gJHRoaXMtPktFWSA9PSBPcm1LRVk6OiRGSzt9DQoNCiAgIC8qKg0KICAgICogcmV0dXJuIHRydWUgaWYgRmllbGQgaGFzIGEgJEFLDQogICAgKiANCiAgICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIEZpZWxkIGhhcyBhICRBSw0KICAgICovICAgIAkNCglwdWJsaWMgZnVuY3Rpb24gaXNBc3NvY2lhdGVLRVkoKQ0KCXtyZXR1cm4gJHRoaXMtPktFWSA9PSBPcm1LRVk6OiRBSzt9DQoJDQogICAgLyoqDQogICAgKiBnZXR0ZXIgZm9yIGtleU5hbWUNCiAgICAqIA0KICAgICogQHJldHVybiBzdHJpbmcgdGhlIGtleU5hbWUgb2YgRmllbGQNCiAgICAqIA0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIGdldEtFWU5hbWUoKQ0KCXtyZXR1cm4gJHRoaXMtPktFWU5hbWU7fQ0KCQ0KICAgIC8qKg0KICAgICogZ2V0dGVyIGZvciBudWxsYWJsZSANCiAgICAqIA0KICAgICogQHJldHVybiB0cnVlIGlmIEZpZWxkIGlzIG9wdGlvbmFsIGluIGRhdGFiYXNlDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gaXNOdWxsYWJsZSgpDQoJe3JldHVybiAkdGhpcy0+bnVsbGFibGU7fQ0KCQ0KICAgIC8qKg0KICAgICogZ2V0dGVyIGZvciBkZWZhdWx0VmFsdWUNCiAgICAqIA0KICAgICogQHJldHVybiBtaXhlZCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBGaWVsZA0KICAgICogDQogICAgKi8JDQoJcHVibGljIGZ1bmN0aW9uIGdldERlZmF1bHRWYWx1ZSgpDQoJe3JldHVybiAkdGhpcy0+ZGVmYXVsdFZhbHVlO30NCgkNCiAgIC8qKg0KICAgICogc2V0dGVyIGZvciBkZWZhdWx0VmFsdWUNCiAgICAqIA0KICAgICogQHBhcmFtIG1peGVkIHRoZSBkZWZhdWx0IHZhbHVlIG9mIEZpZWxkDQogICAgKiANCiAgICAqLwkNCglwdWJsaWMgZnVuY3Rpb24gc2V0RGVmYXVsdFZhbHVlKCRkZWZhdWx0VmFsdWUpew0KCQlpZigkdGhpcy0+dHlwZSA9PSBPcm1DQVNUOjokQlVGRkVSKXsNCgkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInRoZSBGaWVsZCAiLiR0aGlzLT5uYW1lLiIgb2YgdHlwZSBCVUZGRVIgY2FuJ3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUgIik7DQoJCX0NCgkJJHRoaXMtPmRlZmF1bHRWYWx1ZSA9ICRkZWZhdWx0VmFsdWU7DQoJfQ0KCQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormillegalargumentexception.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiAvKioNCiAqIENvbnRhaW5zIHRoZSBjbGFzcyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24NCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQogDQoNCi8qKg0KICogQ2xhc3NlIGV4dGVuZHMgRXhjZXB0aW9uLCB1c2VkIHdoZW4gdGhlIHBhcmFtZXRlcnMgaXMgbm90IHRoZSBvbmUgZXhwZWN0ZWQNCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQoqLw0KY2xhc3MgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHsNCiAgICANCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG1zZz1OVUxMLCAkY29kZT0wKQ0KICAgIHtwYXJlbnQ6Ol9fY29uc3RydWN0KCRtc2csICRjb2RlKTt9DQp9DQoNCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormillegalconfigurationexception.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiAvKioNCiAqIENvbnRhaW5zIHRoZSBjbGFzcyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24NCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQogDQoNCi8qKg0KICogQ2xhc3NlIGV4dGVuZHMgRXhjZXB0aW9uLCB1c2VkIHdoZW4gdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBvZiBFbnRpdGllcyBpc24ndCBjb3JyZWN0DQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KKi8NCmNsYXNzIE9ybUlsbGVnYWxDb25maWd1cmF0aW9uRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uICB7DQogICAgDQogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRtc2c9TlVMTCwgJGNvZGU9MCkNCiAgICB7cGFyZW50OjpfX2NvbnN0cnVjdCgkbXNnLCAkY29kZSk7fQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormindexing.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgYWxsIHRoZSBDbXNNYWRlU2ltcGxlJ3MgaW5kZXhpbmcgc3lzdGVtDQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KDQovKioNCiAqICAgQWxsb3cgYSBxdWljayBhbmQgc2ltcGxlIGluZGV4aW5nIHN5c3RlbSB3aXRoIG1vZHVsZXMgbGlrZSBTZWFyY2gNCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogKiAgIFRoZSBtb3N0IG9mIHRoZSB3b3JrIHdhcyBtYWRlIGZyb20gRHVrZXRvd24ncyB3b3JrIC0gdGhhbmsgdG8gaGltDQogKiAgIGh0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZy92aWV3dG9waWMucGhwP3A9MjYxNTA4I3AyNjE1MDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogKiAgICANCiAqIA0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLyAgIA0KZmluYWwgY2xhc3MgT3JtSW5kZXhpbmcNCnsJDQoJDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkgew0KCX0NCgkNCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGdldFNlYXJjaCgpDQoJew0KCQkkbW9kb3BzID0gY21zbXMoKS0+R2V0TW9kdWxlT3BlcmF0aW9ucygpOw0KCQlyZXR1cm4gJG1vZG9wcy0+R2V0U2VhcmNoTW9kdWxlKCk7DQoJfQ0KDQoJLyoqDQogICAgKiB2aWRlIGwnaW5kZXhhZ2UgDQogICAgKiANCiAgICAqIEBwYXJhbSBzdHJpbmcgbGUgbm9tIGR1IG1vZHVsZS4NCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwJZnVuY3Rpb24gRGVsZXRlQWxsV29yZHMoT3JtRW50aXR5ICRlbnRpdHkpDQoJewkNCgkJJHNlYXJjaG1vZHVsZSA9IE9ybUluZGV4aW5nOjpnZXRTZWFyY2goKTsNCgkJJHNlYXJjaG1vZHVsZS0+RGVsZXRlV29yZHMoJGVudGl0eS0+Z2V0TW9kdWxlTmFtZSgpLCBudWxsLCAkZW50aXR5LT5nZXROYW1lKCkpOw0KCX0NCg0KICAgLyoqDQogICAgKiB2aWRlIGwnaW5kZXhhZ2UgZCd1biDpbGVtZW50IGVuIHBhcnRpY3VsaWVyDQogICAgKiANCiAgICAqIEBwYXJhbSBzdHJpbmcgbGUgbm9tIGR1IG1vZHVsZS4NCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwJZnVuY3Rpb24gRGVsZXRlV29yZHMoT3JtRW50aXR5ICRlbnRpdHksICRzaWQgPSBudWxsKQ0KCXsJDQoJCWlmKCRzaWQgPT0gbnVsbCkNCgkJCSRzaWQgPSAkZW50aXR5LT5nZXQoJGVudGl0eS0+Z2V0UGsoKS0+Z2V0TmFtZSgpKTsNCgkJDQoJCSRzZWFyY2htb2R1bGUgPSBPcm1JbmRleGluZzo6Z2V0U2VhcmNoKCk7DQoJCSRzZWFyY2htb2R1bGUtPkRlbGV0ZVdvcmRzKCRlbnRpdHktPmdldE1vZHVsZU5hbWUoKSwgJHNpZCwgJGVudGl0eS0+Z2V0TmFtZSgpKTsNCgl9DQoJDQoJDQoJcHVibGljIHN0YXRpYyBmaW5hbAlmdW5jdGlvbiBBZGRXb3JkcygkZW50aXR5KQ0KICAgIHsNCgkJJHNlYXJjaG1vZHVsZSA9IE9ybUluZGV4aW5nOjpnZXRTZWFyY2goKTsNCgkJJGZpZWxkcyA9ICRlbnRpdHktPmdldEZpZWxkcygpOw0KCQkNCgkJJGNvbnRlbnQgPSAnJzsNCgkJZm9yZWFjaCgkZmllbGRzIGFzICRmaWVsZCkNCgkJew0KCQkJJGNvbnRlbnQuPSAnICcuJGVudGl0eS0+Z2V0KCRmaWVsZC0+Z2V0TmFtZSgpKTsNCgkJfQ0KCQkNCgkJJHNpZCA9ICRlbnRpdHktPmdldCgkZW50aXR5LT5nZXRQaygpLT5nZXROYW1lKCkpOw0KCQkNCgkJLy9lY2hvICRzaWQuJyAnLiRlbnRpdHktPmdldE5hbWUoKS4nICcuJGNvbnRlbnQ7DQoJCSRzZWFyY2htb2R1bGUtPkFkZFdvcmRzKCRlbnRpdHktPmdldE1vZHVsZU5hbWUoKSwgJHNpZCwkZW50aXR5LT5nZXROYW1lKCksJGNvbnRlbnQpOw0KICAgIH0NCgkNCglwdWJsaWMgc3RhdGljIGZpbmFsCWZ1bmN0aW9uIFVwZGF0ZVdvcmRzKCRlbnRpdHkpIHsNCgkJT3JtSW5kZXhpbmc6OkRlbGV0ZVdvcmRzKCRlbnRpdHkpOw0KCQlPcm1JbmRleGluZzo6QWRkV29yZHMoJGVudGl0eSk7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBTZWFyY2hSZWluZGV4KCRtb2R1bGVOYW1lKSB7DQoJCSRlbnRpdHlzID0gTXlBdXRvbG9hZDo6Z2V0QWxsSW5zdGFuY2VzKCRtb2R1bGVOYW1lKTsNCgkJZm9yZWFjaCAoJGVudGl0eXMgYXMgJGVudGl0eSkgew0KCQkNCgkJCWlmKCRlbnRpdHktPmlzSW5kZXhhYmxlKCkpIHsNCgkJCQ0KCQkJCU9ybUluZGV4aW5nOjpEZWxldGVBbGxXb3JkcygkZW50aXR5KTsNCgkJCQkNCgkJCQkkbGlzdGUgPSBhcnJheSgpOw0KCQkJCWlmKCEkZW50aXR5LT5pc0ZpZWxkQnlOYW1lRXhpc3RzKEZpZWxkX0FjdGl2ZTo6JG5hbWUpKSB7DQoJCQkJCSRsaXN0ZSA9IE9ybUNvcmU6OnNlbGVjdEFsbCgkZW50aXR5KTsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkZXhhbXBsZSA9IG5ldyBPcm1FeGFtcGxlKCk7DQoJCQkJCSRleGFtcGxlLT5hZGRDcml0ZXJpYShGaWVsZF9BY3RpdmU6OiRuYW1lLCBPcm1UeXBlQ3JpdGVyaWE6OiRFUSwgYXJyYXkoMSkpOw0KCQkJCQkkbGlzdGUgPSBPcm1Db3JlOjpzZWxlY3RCeUV4YW1wbGUoJGVudGl0eSwgJGV4YW1wbGUpOw0KCQkJCX0NCgkJCQkNCgkJCQlmb3JlYWNoKCRsaXN0ZSBhcyAkc2luZ2xlRW50aXR5KSB7DQoJCQkJCU9ybUluZGV4aW5nOjpBZGRXb3Jkcygkc2luZ2xlRW50aXR5KTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBDYWxsZWQgYnkgbW9kdWxlIFNlYXJjaCB0byBkaXNwbGF5IGEgcmVzdWx0DQoJICovDQoJZnVuY3Rpb24gU2VhcmNoUmVzdWx0KCYkbW9kdWxlLCAkaWQsICRyZXR1cm5pZCwgJGVudGl0eUlkLCAkYXR0ciA9ICcnKQ0KICAgIHsJDQoJCSRyZXN1bHQgPSBhcnJheSgpOw0KCQkNCgkJLyokbWxlID0gTWxlRm9yTW1tZnM6OmdldFJvb3RVcmwoKTsNCgkJaWYoJG1sZSA9PSBudWxsKQ0KCQl7DQoJCQkkbWxlPSdmcic7DQoJCX0qLw0KCQkNCgkJDQoJCSRlbnRpdHlzID0gbXlBdXRvbG9hZDo6Z2V0QWxsSW5zdGFuY2VzKCRtb2R1bGUtPmdldE5hbWUoKSk7DQoJCWZvcmVhY2ggKCRlbnRpdHlzIGFzICRlbnRpdHkpDQoJCXsNCgkJCWlmKCRlbnRpdHktPmlzSW5kZXhhYmxlKCkpDQoJCQl7CQkNCg0KCQkJCWlmICgkYXR0ciA9PSAkZW50aXR5LT5nZXROYW1lKCkpDQoJCQkJew0KCQkJCQkkbXlFbnRpdHkgPSBPcm1Db3JlOjpzZWxlY3RCeUlkKCRlbnRpdHksICRlbnRpdHlJZCk7DQoJCQkJCQ0KCQkJCQkvLyRjdXJyZW50TGFuZ0lTTyA9ICgkbWxlID09ICdmcic/J2ZyX0ZSJzonZW5fVVMnKTsgLy9UT0RPIDogc2UgZOltZXJkZXIgcG91ciBy6WN1cOlyZXIgbGEgbGFuZ3VlIGxp6WUgYXUgJHJldHVybklkOw0KCQkJCQkNCgkJCQkJJHByZXR0eVVybCA9ICcnOw0KCQkJCQkkbGluayA9ICRtb2R1bGUtPkNyZWF0ZUxpbmsoJGlkLCAnZmljaGUnLCAkcmV0dXJuaWQsIA0KCQkJCQkJCQkJJycsIA0KCQkJCQkJCQkJYXJyYXkoImVjbGFzcyI9PiRteUVudGl0eS0+Z2V0TmFtZSgpLCAiZWNsYXNzSWQiPT4kZW50aXR5SWQpLCcnLHRydWUsbnVsbCxudWxsLG51bGwsJHByZXR0eVVybCk7DQoJCQkJIAkJCQkgICAgDQoJCQkJCSRyZXN1bHRbMF0gPSAkbXlFbnRpdHktPmdldE5hbWUoKTsNCgkJCQkJJHJlc3VsdFsxXSA9IGh0bWxfZW50aXR5X2RlY29kZSgkbXlFbnRpdHktPmdldE5hbWUoKS4nICMnLiRlbnRpdHlJZCwgRU5UX1FVT1RFUywgJ1VURi04Jyk7DQoJCQkJCSRyZXN1bHRbMV0gPSBodG1sX2VudGl0eV9kZWNvZGUoJHJlc3VsdFsxXSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7DQoJCQkJCQ0KCQkJCQkNCgkJCQkJJHJlc3VsdFsyXSA9ICRsaW5rOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuICRyZXN1bHQ7DQogICAgfQ0KDQoJDQp9DQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormisortable.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGludGVyZmFjZSBJU29ydGFibGUgd2hpY2ggYWxsb3cgdG8gc29ydCByZXN1bHRzIGZvciBhbiBlbnRpdHkNCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQogDQovKioNCiAqIEludGVyZmFjZSB3aWNoIGFsbG93IHRvIHNvcnQgcmVzdWx0cyBmb3IgYW4gZW50aXR5DQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KaW50ZXJmYWNlIE9ybUlTb3J0YWJsZQ0Kew0KCQ0KICAgIC8qKg0KICAgICogRnVuY3Rpb24gd2hpY2ggY29tcGFyZSB0d28gZW50aXRpZXMgaW4gcGFyYW1ldGVycw0KICAgICogDQogICAgKiANCiAgICAqIEBwYXJhbSBPcm1FbnRpdHkgdGhlIGZpcnN0IGVudGl0eSB3aXRoIGFsbCB2YWx1ZXMgc2V0dGVkDQogICAgKiBAcGFyYW0gT3JtRW50aXR5IHRoZSBzZWNvbmQgZW50aXR5IHdpdGggYWxsIHZhbHVlcyBzZXR0ZWQNCgkqDQogICAgKiBAcmV0dXJuIEludGVnZXIgOiAwIGlmIGVxdWFscywgMSBpZiB0aGUgZmlyc3QgZW50aXR5IGlzIHN1cGVyaW9yLCBlbHNlIC0xDQogICAgKiANCiAgICAqIEBzZWUgT3JtRW50aXR5DQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbXBhcmVUbyhPcm1FbnRpdHkgJGVudGl0eTEsIE9ybUVudGl0eSAkZW50aXR5Mik7DQp9DQoNCg0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormkey.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGNsYXNzIGZvciB0aGUgZGlmZmVyZW50IGRhdGFiYXNlIGtleQ0KICogDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQoNCi8qKg0KICogQ2xhc3MgZGVmaW5lcyB0aGUgZGlmZmVyZW50cyBrZXlzIHVzZWQgaW4gdGhlIE9ybSBzeXN0ZW0NCiAqIA0KICogIE9ybUtFWTo6JFBLIGRlZmluZXMgYSBwcmltYXJ5IGtleQ0KICogIE9ybUtFWTo6JEZLIGRlZmluZXMgYSBmb3JlaWduIGtleSA6IGEgbGluayBiZXR3ZWVuIDIgZW50aXRpZXMgMCwxLT5uIA0KICogIE9ybUtFWTo6JEFLIGRlZmluZXMgYW4gYXNzb2NpYXRlIGtleSA6IGEgbGluayBiZXR3ZWVuIDIgZW50aXRpZXMgdGhhdCBuZWVkaW5nIGEgdGhpcmQgdGFibGUNCiAqIA0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KKi8NCmNsYXNzIE9ybUtFWQ0Kew0KCXB1YmxpYyBzdGF0aWMgJFBLID0gMHg5OTAxOyAvLyBQcmltYXJ5IEtFWQ0KCXB1YmxpYyBzdGF0aWMgJEZLID0gMHg5OTAyOyAvLyBGb3JlaWduIEtFWSBhIGxpbmsgYmV0d2VlbiAyIGVudGl0aWVzIDAsMS0+bg0KCXB1YmxpYyBzdGF0aWMgJEFLID0gMHg5OTAzOyAvLyBBc3NvY2lhdGUgS0VZIGEgbGluayBiZXR3ZWVuIDIgZW50aXRpZXMgbi0+biB0aGF0IG5lZWRpbmcgYSB0aGlyZCB0YWJsZQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormtrace.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgYWxsIHRoZSBkZWJ1ZyBzeXN0ZW0uDQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KDQovKioNCiAqICBBbGxvdyBkaXNwbGF5IHN0YWNrdHJhY2UgYW5kIG90aGVyIGluZm9ybWF0aW9ucyBpbiBhIGNvbnNvbGUgb3Igb24gdGhlIHBhZ2UNCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICogIGV4YW1wbGUNCiAqICA8Y29kZT4NCiAqICAgICAgICAgIE9ybVRyYWNlOjpkZWJ1ZygnaSBhbSBoZXJlICEnKTsNCiAqICAgICAgICAgIE9ybVRyYWNlOjppbmZvKCdwcm9jZXNzIGZpbmlzaGVkJyk7DQogKiAgICAgICAgICBPcm1UcmFjZTo6d2FybignQmUgY2FyZnVsbCA6IHRvbyBtdWNoIHJlc3VsdHMgd2lsbCBiZSBkaXNwbGF5ZWQnKTsNCiAqICAgICAgICAgIE9ybVRyYWNlOjplcnJvcignb3VwcyBob3VzdG9uLCB3ZSBoYXZlIGdvdCBhIHByb2JsZW0uLi4gOiggJyk7DQogKiAgPC9jb2RlPg0KICogDQogKiB0aGUgcHJvcGVydHkgJGxldmVsIG9mIHRoaXMgY2xhc3MgZGVmaW5lcyB0aGUgbGV2ZWwgb2YgdGhlIG1lc3NhZ2VzIHRvIGRpc3BsYXlpbmcNCiAqICBTbyBhIGxldmVsIG9mICJXQVJOIiB3aWxsIG9ubHkgZGlzcGxheSB3YXJuaW5nIGFuZCBlcnJvciBtZXNzYWdlcw0KICogIEJ5IGRlZmF1bHQgdGhlIGxldmVsIGlzIHNldHRlZCB0byBXQVJODQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLyAgIA0KIA0KZmluYWwgY2xhc3MgT3JtVHJhY2UNCnsNCglwdWJsaWMgc3RhdGljICRERUJVRyA9IDA7DQoJcHVibGljIHN0YXRpYyAkSU5GTyA9IDE7DQoJcHVibGljIHN0YXRpYyAkV0FSTiA9IDI7DQoJcHVibGljIHN0YXRpYyAkRVJST1IgPSAzOw0KCQ0KCS8vQ3VycmVudCBsZXZlbCAoYnkgZGVmYXVsdCkNCglwdWJsaWMgc3RhdGljICRsZXZlbCA9IDI7DQoJDQoJcHJvdGVjdGVkIHN0YXRpYyAkbG9nRmlsZTsNCglwcm90ZWN0ZWQgc3RhdGljICRsb2dVcmw7DQoJDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkgew0KCX0NCg0KCS8qKg0KICAgICogRGlzcGxheSBhIG1lc3NhZ2Ugd2l0aCBERUJVRyBsZXZlbA0KICAgICogDQogICAgKiBAcGFyYW0gc3RyaW5nIHRoZSBtZXNzYWdlIHRvIGRpc3BsYXkNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwJZnVuY3Rpb24gZGVidWcoJG1zZykgewkNCgkJc2VsZjo6aW5uZXJXcml0ZXIoT3JtVHJhY2U6OiRERUJVRywgJ2RlYnVnJywgJG1zZyk7DQoJfQ0KDQogICAgLyoqDQogICAgKiBEaXNwbGF5IGEgbWVzc2FnZSB3aXRoIElORk8gbGV2ZWwNCiAgICAqIA0KICAgICogQHBhcmFtIHN0cmluZyB0aGUgbWVzc2FnZSB0byBkaXNwbGF5DQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsCWZ1bmN0aW9uIGluZm8oJG1zZykgewkNCgkJc2VsZjo6aW5uZXJXcml0ZXIoT3JtVHJhY2U6OiRJTkZPLCAnaW5mbycsICRtc2cpOw0KCX0gDQoNCiAgICAvKioNCiAgICAqIERpc3BsYXkgYSBtZXNzYWdlIHdpdGggV0FSTiBsZXZlbA0KICAgICogDQogICAgKiBAcGFyYW0gc3RyaW5nIHRoZSBtZXNzYWdlIHRvIGRpc3BsYXkNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwJZnVuY3Rpb24gd2FybigkbXNnKSB7CQ0KCQlzZWxmOjppbm5lcldyaXRlcihPcm1UcmFjZTo6JFdBUk4sICd3YXJuJywgJG1zZyk7DQoJfSANCg0KICAgIC8qKg0KICAgICogRGlzcGxheSBhIG1lc3NhZ2Ugd2l0aCBFUlJPUiBsZXZlbA0KICAgICogDQogICAgKiBAcGFyYW0gc3RyaW5nIHRoZSBtZXNzYWdlIHRvIGRpc3BsYXkNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwJZnVuY3Rpb24gZXJyb3IoJG1zZykgewkNCgkJc2VsZjo6aW5uZXJXcml0ZXIoT3JtVHJhY2U6OiRFUlJPUiwgJ2Vycm9yJywgJG1zZyk7DQoJfQ0KCQ0KCS8qKg0KCSAqIFdpbGwgcmV0dXJuIHRoZSBwYXRoIG9mIHRoZSBsb2cgZmlsZQ0KCSAqDQoJICogQHJldHVybiBzdHJpbmcgdGhlIHBhdGggb2YgdGhlIGxvZyBmaWxlDQoJICoqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gZ2V0TG9nRmlsZSgpew0KCQlpZihzZWxmOjokbG9nRmlsZSA9PSBudWxsKXsNCgkJCSRjb25maWcgPSBjbXNtcygpLT5HZXRDb25maWcoKTsNCgkJCXNlbGY6OiRsb2dGaWxlID0gJGNvbmZpZ1sncm9vdF9wYXRoJ10uJy90bXAvY2FjaGUvb3JtLmxvZyc7DQoJCX0NCgkJcmV0dXJuIHNlbGY6OiRsb2dGaWxlOw0KCX0NCgkNCgkvKioNCgkgKiBXaWxsIHJldHVybiB0aGUgdXJsIG9mIHRoZSBsb2cgZmlsZQ0KCSAqDQoJICogQHJldHVybiBzdHJpbmcgdGhlIHVybCBvZiB0aGUgbG9nIGZpbGUNCgkgKiovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBnZXRMb2dVcmwoKXsNCgkJaWYoc2VsZjo6JGxvZ1VybCA9PSBudWxsKXsNCgkJCSRjb25maWcgPSBjbXNtcygpLT5HZXRDb25maWcoKTsNCgkJCXNlbGY6OiRsb2dVcmwgPSAkY29uZmlnWydyb290X3VybCddLicvdG1wL2NhY2hlL29ybS5sb2cnOw0KCQl9DQoJCXJldHVybiBzZWxmOjokbG9nVXJsOw0KCX0NCgkNCgkvKioNCgkgKiBEbyBhbGwgdGhlIHN1ZmYgYmVoaW5kDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nIHRoZSBsZXZlbCBvZiBtZXNzYWdlLg0KCSAqIEBwYXJhbSBzdHJpbmcgdGhlIGNzcyBjbGFzcyB0byBkaXNwbGF5IHRoZSAiaW5saW5lIiBtZXNzYWdlDQoJICogQHBhcmFtIHN0cmluZyB0aGUgbWVzc2FnZSB0byBkaXNwbGF5DQoJICovDQoJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZnVuY3Rpb24gaW5uZXJXcml0ZXIoJGxldmVsLCAkY3NzQ2xhc3MsICRtc2cpew0KCQkNCgkJaWYoc2VsZjo6JGxldmVsID4gJGxldmVsKSB7cmV0dXJuO30NCgkJCQkNCgkJLy9pbiBmaWxlIGxvZw0KCQlmaWxlX3B1dF9jb250ZW50cyhzZWxmOjpnZXRMb2dGaWxlKCkgLCBkYXRlKCdZLW0tZCBIOmk6cycsIHRpbWUoKSkuIiAtIFskY3NzQ2xhc3NdIC0gJG1zZyBcbiIsIEZJTEVfQVBQRU5EICk7DQoJCQ0KCQkvL0luIHBocCBsb2cNCgkJZXJyb3JfbG9nKCRtc2cpOw0KCX0NCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormtypecriteria.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIE9ybVR5cGVDcml0ZXJpYSBjbGFzcw0KICogDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQogDQoNCi8qKg0KICogRW51bSBmb3IgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBPcm1UeXBlQ3JpdGVyaWENCiAqIA0KICogDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQpjbGFzcyBPcm1UeXBlQ3JpdGVyaWENCnsNCiAgICAvKioNCiAgICAqIElzIGVxdWFscyB0bw0KICAgICogDQogICAgKiBAdmFyIHN0cmluZw0KICAgICovDQoJcHVibGljIHN0YXRpYyAkRVEgPSAnID0gJzsNCiAgICANCiAgICAvKioNCiAgICAqIElzIGRpZmZlcmVudCBPZg0KICAgICogDQogICAgKiBAdmFyIHN0cmluZw0KICAgICovDQoJcHVibGljIHN0YXRpYyAkTkVRID0gJyAhPSAnOw0KICAgIA0KICAgIC8qKg0KICAgICogaXMgc3RyaWN0bHkgZ3JlYXRlciAgdGhhbg0KICAgICogDQogICAgKiBAdmFyIHN0cmluZw0KICAgICovDQoJcHVibGljIHN0YXRpYyAkR1QgPSAnID4gJzsNCiAgICANCiAgICAvKioNCiAgICAqIGlzIGdyZWF0ZXIgIG9yIGVxdWFscyB0bw0KICAgICogDQogICAgKiBAdmFyIHN0cmluZw0KICAgICovDQoJcHVibGljIHN0YXRpYyAkR1RFID0gJyA+PSAnOw0KICAgIA0KICAgIC8qKg0KICAgICogaXMgc3RyaWN0bHkgbGVzc2VyIHRoYW4NCiAgICAqIA0KICAgICogQHZhciBzdHJpbmcNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgJExUID0gJyA8ICc7DQogICAgDQogICAgLyoqDQogICAgKiBpcyBsZXNzZXIgb3IgZXF1YWxzIHRvDQogICAgKiANCiAgICAqIEB2YXIgc3RyaW5nDQogICAgKi8NCglwdWJsaWMgc3RhdGljICRMVEUgPSAnIDw9ICc7DQoJDQoJLyoqDQogICAgKiBpcyBOVUxMIG9yIGlzIEVtcHR5DQogICAgKiANCiAgICAqIEB2YXIgc3RyaW5nDQogICAgKi8NCglwdWJsaWMgc3RhdGljICRFTVBUWSA9ICdpcyBlbXB0eSgpJzsNCgkNCiAgICAvKioNCiAgICAqIGlzIE5vdCBOVUxMIGFuZCBpcyBOb3QgRW1wdHkNCiAgICAqIA0KICAgICogQHZhciBzdHJpbmcNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgJE5FTVBUWSA9ICdpcyBub3QgZW1wdHkoKSc7DQogICAgDQogICAgLyoqDQogICAgKiBpcyBOVUxMDQogICAgKiANCiAgICAqIEB2YXIgc3RyaW5nDQogICAgKi8NCglwdWJsaWMgc3RhdGljICROVUxMID0gJyBpcyBudWxsICc7DQogICAgDQogICAgLyoqDQogICAgKiBpcyBOb3QgTlVMTA0KICAgICogDQogICAgKiBAdmFyIHN0cmluZw0KICAgICovDQoJcHVibGljIHN0YXRpYyAkTk5VTEwgPSAnIGlzIG5vdCBudWxsJzsNCiAgICANCiAgICAvKioNCiAgICAqIGlzIGJlZm9yZSAoYSBEYXRlKQ0KICAgICogDQogICAgKiBAdmFyIHN0cmluZw0KICAgICovDQoJcHVibGljIHN0YXRpYyAkQkVGT1JFID0gJyBiZWZvcmUgJzsNCiAgICANCiAgICAvKioNCiAgICAqIGlzIGFmdGVyIChhIERhdGUpDQogICAgKiANCiAgICAqIEB2YXIgc3RyaW5nDQogICAgKi8NCglwdWJsaWMgc3RhdGljICRBRlRFUiA9ICcgYWZ0ZXIgJzsNCiAgICANCiAgICAvKioNCiAgICAqIGlzIGJldHdlZW4gKGEgRGF0ZSkNCiAgICAqIA0KICAgICogQHZhciBzdHJpbmcNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgJEJFVFdFRU4gPSAnIGFmdGVyICc7DQogICAgIA0KICAgIC8qKg0KICAgICogaXMgY29udGFpbmVkIGludG8gdGhlIGFycmF5DQogICAgKiANCiAgICAqIC8hXCBuZWVkIGF0IGxhc3QgMiB2YWx1ZXMgaW4gdGhlIGFycmF5DQogICAgKiANCiAgICAqIEB2YXIgc3RyaW5nDQogICAgKi8NCglwdWJsaWMgc3RhdGljICRJTiA9ICdpbiAoJWEpJzsNCiAgICANCiAgICAvKioNCiAgICAqIGlzIG5vdCBjb250YWluZWQgaW50byB0aGUgYXJyYXkNCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICogLyFcIG5lZWQgYXQgbGFzdCAyIHZhbHVlcyBpbiB0aGUgYXJyYXkNCiAgICAqIA0KICAgICogQHZhciBzdHJpbmcNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgJE5JTiA9ICdub3QgaW4gKCVhKSc7DQogICAgDQogICAgLyoqDQogICAgKiBjb250YWlucyB0aGUgc3RyaW5nDQogICAgKiANCiAgICAqIC8hXCBkb24ndCBmb3JnZXQgdG8gYWRkIHRoZSB3aWxkY2FyZCAnJScNCiAgICAqIA0KICAgICogQHZhciBzdHJpbmcNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgJExJS0UgPSAnIGxpa2UgJzsNCiAgICANCiAgICAvKioNCiAgICAqIGRvZXNuJ3QgY29udGFpbiB0aGUgc3RyaW5nDQogICAgKiANCiAgICAqIC8hXCBkb24ndCBmb3JnZXQgdG8gYWRkIHRoZSB3aWxkY2FyZCAnJScNCiAgICAqIA0KICAgICogQHZhciBzdHJpbmcNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgJE5MSUtFID0gJyBub3QgbGlrZSAnOw0KfQ0KPz4=]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImNtc21zIikpIGV4aXQ7DQoNCg0KJHRoaXMtPlNldFByZWZlcmVuY2UoJ2xvZ2xldmVsJywgT3JtVHJhY2U6OiRJTkZPKTsNCg0KJHRoaXMtPkF1ZGl0KCAwLCANCgkgICAgICAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksIA0KCSAgICAgICR0aGlzLT5MYW5nKCdpbnN0YWxsZWQnLCAkdGhpcy0+R2V0VmVyc2lvbigpKSApOw0KPz4=]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImNtc21zIikpIGV4aXQ7DQoNCg0KLy8gcHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nDQokdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgJHRoaXMtPkxhbmcoJ3VuaW5zdGFsbGVkJykpOw0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImNtc21zIikpIGV4aXQ7DQoNCi8vUmVpbml0IHRoZSBkZWZhdWx0IGxldmVsIG9mIE9ybVRyYWNlDQokbGV2ZWwgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbG9nbGV2ZWwnLCBPcm1UcmFjZTo6JElORk8pOw0KJHRoaXMtPlNldFByZWZlcmVuY2UoJ2xvZ2xldmVsJywgJGxldmVsKTsNCg0KLy8gcHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nDQokdGhpcy0+QXVkaXQoIDAsICAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICAkdGhpcy0+TGFuZygndXBncmFkZWQnLCAkdGhpcy0+R2V0VmVyc2lvbigpKSk7DQoNCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/Orm.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCgkvKioNCgkqIENsYXNzIG9mIGNtc21hZGVzaW1wbGUncyBBUEkuIFVzZWQgdG8gbWFrZSBhIGxpbmsgYmV0d2VlbiB0aGUgQVBJIG9mIENtc01hZGVTaW1wbGUgYW5kIG90aGVyIG1vZHVsZXMnDQoJKg0KCSogQHNpbmNlIDAuMC4xDQoJKiBAYXV0aG9yIEJlc3MNCgkqIEBwYWNrYWdlIE9ybQ0KCSoqLw0KDQoJLy9VbmlxdWUgaW1wb3J0LCB0byB1c2UgdGhlIE9ybVRyYWNlIGludG8gdGhlIGNsYXNzIE9ybQ0KCWluY2x1ZGVfb25jZShjbXNfam9pbl9wYXRoKGRpcm5hbWUoX19GSUxFX18pLCJsaWIiLCJjbGFzcy5vcm10cmFjZS5waHAiKSk7DQoNCgkvKioNCgkqIFRoZSBDbGFzcyBPcm0gZGVmaW5lIHRoZSBtb2R1bGUgT3JtIGFuZCBhbGxvdyBoYXZpbmcgYWxsIHRoZSBvcm0gZnVuY3Rpb25hbGl0aWVzIGludG8gYW5vdGhlciBtb2R1bGUNCgkqDQoJKiBAc2luY2UgMC4wLjENCgkqIEBhdXRob3IgQmVzcw0KCSogQHBhY2thZ2UgY21zbXMNCgkqLw0KY2xhc3MgT3JtIGV4dGVuZHMgQ01TTW9kdWxlIHsNCg0KCWZ1bmN0aW9uIF9fY29uc3RydWN0KCkgew0KCQlwYXJlbnQ6Ol9fY29uc3RydWN0KCk7DQoJCU9ybVRyYWNlOjokbGV2ZWwgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbG9nbGV2ZWwnLCBPcm1UcmFjZTo6JElORk8pOw0KCX0NCg0KCWZ1bmN0aW9uIEdldE5hbWUoKSB7DQoJCXJldHVybiAnT3JtJzsNCgl9DQoNCglmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKSB7DQoJCXJldHVybiAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyk7DQoJfQ0KDQoJZnVuY3Rpb24gR2V0VmVyc2lvbigpIHsNCgkJcmV0dXJuICcwLjEuMSc7DQoJfQ0KICANCglmdW5jdGlvbiBHZXREZXBlbmRlbmNpZXMoKQ0KIAl7DQogICAgCXJldHVybiBhcnJheSgpOw0KCX0NCg0KCWZ1bmN0aW9uIEdldEhlbHAoKSB7DQoJCXJldHVybiAkdGhpcy0+TGFuZygnaGVscCcpOw0KCX0NCg0KCWZ1bmN0aW9uIEdldEF1dGhvcigpIHsNCgkJcmV0dXJuICdLZXZpbiBEYW5lemlzIChha2EgQmVzcyknOw0KCX0NCg0KCWZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkgew0KCQlyZXR1cm4gJ2NvbnRhY3QgYXQgZnVyaWUgcG9pbnQgYmUnOw0KCX0NCg0KCWZ1bmN0aW9uIEdldENoYW5nZUxvZygpIHsNCgkJcmV0dXJuICR0aGlzLT5MYW5nKCdjaGFuZ2Vsb2cnKTsNCgl9DQoNCglmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCkgew0KCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ21vZGRlc2NyaXB0aW9uJyk7DQoJfQ0KDQoJZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKSB7DQoJCXJldHVybiAiMS4xMS4wIjsNCgl9DQoNCglmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpIHsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCWZ1bmN0aW9uIEhhc0FkbWluKCkgew0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCglmdW5jdGlvbiBHZXRBZG1pblNlY3Rpb24oKSB7DQoJCXJldHVybiAnZXh0ZW5zaW9ucyc7DQoJfQ0KDQoJZnVuY3Rpb24gVmlzaWJsZVRvQWRtaW5Vc2VyKCkgew0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCglmdW5jdGlvbiBJbml0aWFsaXplRnJvbnRlbmQoKSB7DQoJfQ0KDQoJZnVuY3Rpb24gSW5pdGlhbGl6ZUFkbWluKCkgew0KCX0NCg0KCWZ1bmN0aW9uIEFsbG93U21hcnR5Q2FjaGluZygpIHsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCWZ1bmN0aW9uIExhenlMb2FkRnJvbnRlbmQoKSB7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglmdW5jdGlvbiBMYXp5TG9hZEFkbWluKCkgew0KCSAgcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBTZXRQYXJhbWV0ZXJzKCkgeyAgDQoJfQ0KDQoJZnVuY3Rpb24gSW5zdGFsbFBvc3RNZXNzYWdlKCkgew0KCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3RpbnN0YWxsJyk7DQoJfQ0KDQoJZnVuY3Rpb24gVW5pbnN0YWxsUG9zdE1lc3NhZ2UoKSB7DQoJCXJldHVybiAkdGhpcy0+TGFuZygncG9zdHVuaW5zdGFsbCcpOw0KCX0NCg0KCWZ1bmN0aW9uIFVuaW5zdGFsbFByZU1lc3NhZ2UoKSB7DQoJCXJldHVybiAkdGhpcy0+TGFuZygncmVhbGx5X3VuaW5zdGFsbCcpOw0KCX0gIA0KCQ0KCWZ1bmN0aW9uIERpc3BsYXlFcnJvclBhZ2UoJG1zZykgew0KCQllY2hvICI8aDM+Ii4kbXNnLiI8L2gzPiI7DQoJfSANCgkJIA0KCXByaXZhdGUgZnVuY3Rpb24gR2V0TXlNb2R1bGVQYXRoKCkgew0KCQlyZXR1cm4gcGFyZW50OjpHZXRNb2R1bGVQYXRoKCk7CQkNCgl9DQoNCglwcm90ZWN0ZWQgZnVuY3Rpb24gX19hdXRvbG9hZCgpIHsJDQoJCXNwbF9hdXRvbG9hZF9yZWdpc3RlcihhcnJheSgkdGhpcywgJ2F1dG9sb2FkX2NsYXNzZXMnKSk7DQoJCS8vc3BsX2F1dG9sb2FkX3JlZ2lzdGVyKGFycmF5KCR0aGlzLCAnYXV0b2xvYWRfY2xhc3Nlc19hZGRvbicpKTsNCgkJDQoJCS8vV2UncmUgbGlzdGluZyB0aGUgY2xhc3MgZGVjbGFyZWQgaW50byB0aGUgZGlyZWN0b3J5IG9mIHRoZSBjaGlsZCBtb2R1bGUNCgkJJHJlcGVydG9pcmUgPSBjbXNfam9pbl9wYXRoKCR0aGlzLT5HZXRNeU1vZHVsZVBhdGgoKSwnbGliJyk7DQoJCQ0KCQkkbGlzdGVbJ2VudGl0aWVzJ10gPSBhcnJheSgpOw0KCQkkbGlzdGVbJ2Fzc29jaWF0ZSddID0gYXJyYXkoKTsNCgkJDQoJCSRvYmplY3RzID0gbmV3IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IobmV3IFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRyZXBlcnRvaXJlKSk7DQoJCWZvcmVhY2goJG9iamVjdHMgYXMgJG5hbWUgPT4gJG9iamVjdCl7DQoJCQlpZihzdHJpcG9zKCRuYW1lLCAnY2xhc3MuZW50aXR5LicpICE9PSBGQUxTRSl7CQkJDQoJCQkJJGNsYXNzbmFtZSA9IHN1YnN0cigkb2JqZWN0LT5nZXRGaWxlTmFtZSgpICwgMTMgLHN0cmxlbigkb2JqZWN0LT5nZXRGaWxlTmFtZSgpKSAtIDQgLSAxMyk7DQoJCQkJJGxpc3RlWydlbnRpdGllcyddW10gPSBhcnJheSgnZmlsZW5hbWUnPT4kbmFtZSwgJ2Jhc2VuYW1lJz0+JG9iamVjdC0+Z2V0RmlsZU5hbWUoKSwgJ2NsYXNzbmFtZSc9PiRjbGFzc25hbWUpOw0KCQkJfSBlbHNlaWYoc3RyaXBvcygkbmFtZSwgJ2NsYXNzLmFzc29jLicpICE9PSBGQUxTRSkgew0KCQkJCSRjbGFzc25hbWUgPSBzdWJzdHIoJG9iamVjdC0+Z2V0RmlsZU5hbWUoKSAsIDEyICxzdHJsZW4oJG9iamVjdC0+Z2V0RmlsZU5hbWUoKSkgLSA0IC0gMTIpOw0KCQkJCSRsaXN0ZVsnYXNzb2NpYXRlJ11bXSA9IGFycmF5KCdmaWxlbmFtZSc9PiRuYW1lLCAnYmFzZW5hbWUnPT4kb2JqZWN0LT5nZXRGaWxlTmFtZSgpLCAnY2xhc3NuYW1lJz0+JGNsYXNzbmFtZSk7DQoJCQl9IGVsc2Ugew0KCQkJfQ0KCQl9DQoJCQ0KCQlmb3JlYWNoKCRsaXN0ZVsnZW50aXRpZXMnXSBhcyAkZWxlbWVudCkgew0KCQkJJGNsYXNzTmFtZSA9ICRlbGVtZW50WydjbGFzc25hbWUnXTsNCgkJCSRmaWxlbmFtZSA9ICRlbGVtZW50WydmaWxlbmFtZSddOw0KCQkJT3JtVHJhY2U6OmRlYnVnKCJpbXBvcnRpbmcgRW50aXR5ICIuJGNsYXNzTmFtZS4iIGludG8gdGhlIG1vZHVsZSAiLiR0aGlzLT5nZXROYW1lKCkpOw0KCQkJcmVxdWlyZV9vbmNlKCRmaWxlbmFtZSk7CQkJDQoJCQkkZW50aXR5ID0gbmV3ICRjbGFzc05hbWUoKTsNCgkJfQ0KCQlmb3JlYWNoKCRsaXN0ZVsnYXNzb2NpYXRlJ10gYXMgJGVsZW1lbnQpIHsNCgkJCSRjbGFzc05hbWUgPSAkZWxlbWVudFsnY2xhc3NuYW1lJ107DQoJCQkkZmlsZW5hbWUgPSAkZWxlbWVudFsnZmlsZW5hbWUnXTsNCgkJCU9ybVRyYWNlOjpkZWJ1ZygiaW1wb3J0aW5nIEFzc29jaWF0ZSBFbnRpdHkgIi4kY2xhc3NOYW1lLiIgaW50byB0aGUgbW9kdWxlICIuJHRoaXMtPmdldE5hbWUoKSk7DQoJCQlyZXF1aXJlX29uY2UoJGZpbGVuYW1lKTsNCgkJCSRlbnRpdHkgPSBuZXcgJGNsYXNzTmFtZSgpOw0KCQl9DQoJfQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBhdXRvbG9hZF9jbGFzc2VzKCRjbGFzc25hbWUpew0KCQlPcm1UcmFjZTo6ZGVidWcoIiZuYnNwOyZuYnNwOyZuYnNwOyBOZWVkICRjbGFzc25hbWUiKTsNCgkJJE9ybSA9IG5ldyBPcm0oKTsNCgkJJHBhdGggPSAkT3JtLT5HZXRNeU1vZHVsZVBhdGgoKTsNCgkJJGZuID0gY21zX2pvaW5fcGF0aCgkcGF0aCwibGliIiwiY2xhc3MuIi5zdHJ0b2xvd2VyKCRjbGFzc25hbWUpLiIucGhwIik7DQoNCg0KCQlPcm1UcmFjZTo6ZGVidWcoImltcG9ydCBjbGFzcyBkdSBmcmFtZXdvcmsgdmlhICIuJHRoaXMtPmdldE5hbWUoKS4iOiAkZm4iKTsNCg0KCQlpZihmaWxlX2V4aXN0cygkZm4pKXsNCgkJCXJlcXVpcmVfb25jZSgkZm4pOw0KCQkJT3JtVHJhY2U6OmRlYnVnKCJpbXBvcnRpbmcgJGZuIHdpdGggc3VjY2VzcyIpOw0KCQl9IGVsc2Ugew0KCQkJT3JtVHJhY2U6OmRlYnVnKCJGaWxlICRmbiBub3QgZm91bmQsIHdlIHNraXAgaXQiKTsNCgkJfQ0KCX0NCgkNCgkvKioNCgkgKiBTaG9ydGN1dCB0byBjYWxsIGFsbCB0aGUgaW5zdGFuY2VzIGZvciBhIHNpbmdsZSBtb2R1bGUNCgkgKg0KCSAqIEByZXR1cm4gTGlzdDxPcm1FbnRpdHk+IHRoZSBlbnRpdGllcyBmb3IgdGhlIGN1cnJlbnQgcGFyZW50J3MgbmFtZXNwYWNlDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRBbGxJbnN0YW5jZXMoKXsNCgkJcmV0dXJuIE15QXV0b2xvYWQ6OmdldEFsbEluc3RhbmNlcyhwYXJlbnQ6OkdldE5hbWUoKSk7DQoJfQ0KCS8qDQoJcHVibGljIGZ1bmN0aW9uIGF1dG9sb2FkX2NsYXNzZXNfYWRkb24oJGNsYXNzbmFtZSl7DQoJCU9ybVRyYWNlOjpkZWJ1ZygiJm5ic3A7Jm5ic3A7Jm5ic3A7JGNsYXNzbmFtZSIpOw0KCQkNCgkJJHBhdGggPSAkdGhpcy0+R2V0TXlNb2R1bGVQYXRoKCk7DQoJCQ0KCQkkZm4gPSBudWxsOw0KCSAgIGlmKHN0cmlwb3MoJGNsYXNzbmFtZSwgIkhUTUxfRklFTEQiKSAhPT0gRkFMU0UpDQoJICAgew0KCQkJJGZuID0gY21zX2pvaW5fcGF0aCgkcGF0aCwiY2xhc3MiLCJjbGFzcy5hZGQuZmllbGRodG1sLnBocCIpOw0KCSAgIH0gZWxzZSBpZihzdHJpcG9zKCRjbGFzc25hbWUsICJTRUFSQ0hfRklFTEQiKSAhPT0gRkFMU0UpDQoJICAgew0KCQkJJGZuID0gY21zX2pvaW5fcGF0aCgkcGF0aCwiY2xhc3MiLCJjbGFzcy5hZGQuc2VhcmNoZmllbGQucGhwIik7DQoJICAgfSBlbHNlIGlmKHN0cmlwb3MoJGNsYXNzbmFtZSwgIkZJRUxEXyIpICE9PSBGQUxTRSkNCgkgICB7DQoJCQkkZm4gPSBjbXNfam9pbl9wYXRoKCRwYXRoLCJjbGFzcyIsImNsYXNzLmFkZC5maWVsZHNzeXN0ZW0ucGhwIik7DQoJICAgfSBlbHNlIGlmKHN0cmlwb3MoJGNsYXNzbmFtZSwgIkZJTFRSRV8iKSAhPT0gRkFMU0UpDQoJICAgew0KCQkJJGZuID0gY21zX2pvaW5fcGF0aCgkcGF0aCwiY2xhc3MiLCJjbGFzcy5hZGQuZmlsdHJlLnBocCIpOw0KCSAgIH0NCgkgICANCgkgICBpZigkZm4gIT0gbnVsbCkNCgkgICB7DQoJCQlPcm1UcmFjZTo6ZGVidWcoICJpbXBvcnQgZCd1biBhZGRvbiBkdSBwcm9qZXQgIi4kdGhpcy0+Z2V0TmFtZSgpLiI6ICRmbiIpOw0KCSAgIA0KCQkJaWYoZmlsZV9leGlzdHMoJGZuKSl7DQoJCQkJcmVxdWlyZV9vbmNlKCRmbik7DQoJCQl9DQoJCX0NCgl9Ki8NCgkvKg0KCWZ1bmN0aW9uIFNlYXJjaFJlaW5kZXgoJiRtb2R1bGUgPSBudWxsKSB7DQoJCS8vT24g6XZpdGUgZGUgcydhdXRvLWluZGV4ZXIuDQoJCWlmKCR0aGlzLT5nZXROYW1lKCkgPT0gJ01tbWZzJykNCgkJCXJldHVybjsJCQ0KCQkJDQoJCS8vIE9ybUluZGV4aW5nOjpzZXRTZWFyY2goJG1vZHVsZSk7DQoJCU9ybUluZGV4aW5nOjpTZWFyY2hSZWluZGV4KCR0aGlzLT5nZXROYW1lKCkpOw0KCX0qLw0KDQoJLyoqDQoJICogQXBwZWzpZSBwYXIgU2VhcmNoIHBvdXIgYWZmaWNoZXIgdW4gculzdWx0YXQNCgkgKi8vKg0KCWZ1bmN0aW9uIFNlYXJjaFJlc3VsdCgkcmV0dXJuaWQsICRlbnRpdHlJZCwgJGF0dHIgPSAnJykgewkNCgkJLy9PbiBuZSByZXRvdXJuZSByaWVuIGRlIE1tbWZzIGRlIHRvdXRlIG1hbmnocmUNCgkJaWYoJHRoaXMtPmdldE5hbWUoKSA9PSAnTW1tZnMnKQ0KCQkJcmV0dXJuOwkNCgkJDQoJCXJldHVybiBPcm1JbmRleGluZzo6U2VhcmNoUmVzdWx0KCR0aGlzLCAkaWQsICRyZXR1cm5pZCwgJGVudGl0eUlkLCAkYXR0cik7DQoJfSovDQoNCn0gDQo/Pg0K]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/admin.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRmb3Jtc3RhcnR9DQoJeyRzZWxlY3R9DQoJeyRzdWJtaXR9eyRkZWxldGV9DQoNCjwvZm9ybT4NCg0KPHByZSBpZD0nb3V0cHV0Jz48L3ByZT4NCntsaXRlcmFsfQ0KPHNjcmlwdD4NCg0KZnVuY3Rpb24gZG9VcGRhdGUoKSB7DQokLmFqYXgoe3R5cGU6ICJHRVQiLCB1cmwgOiAiey9saXRlcmFsfXskdXJsTG9nfXtsaXRlcmFsfSIsIGNhY2hlOmZhbHNlLA0KICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7DQogICAgICAgICAgICAgaWYgKGRhdGEubGVuZ3RoID4gNCkgew0KICAgICAgICAgICAgICAgIC8vIERhdGEgYXJlIGFzc3VtZWQgdG8gYmUgaW4gSFRNTCBmb3JtYXQNCiAgICAgICAgICAgICAgICAvLyBSZXR1cm4gc29tZXRoaW5nIGxpa2UgPHAvPiBpbiBjYXNlIG9mIG5vIHVwZGF0ZXMNCiAgICAgICAgICAgICAgICAkKCIjb3V0cHV0IikudGV4dChkYXRhKTsNCiAgICAgICAgICAgICB9DQogICAgICAgICAgICAgc2V0VGltZW91dCgiZG9VcGRhdGUoKSIsIDIwMDApOw0KICAgICAgICAgICB9fSk7DQogIA0KfQ0KDQpzZXRUaW1lb3V0KCJkb1VwZGF0ZSgpIiwgMjAwMCk7DQo8L3NjcmlwdD57L2xpdGVyYWx9]]></data>
	</file>
</module>
