<?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>AdvancedContent</name>
	<version>0.7.1</version>
  <mincmsversion>1.9.1</mincmsversion>
	<help><![CDATA[PGJyIC8+CjxoMz5XaGF0IGRvZXMgdGhpcyBkbz88L2gzPgo8cD5UaGlzIGlzIGEgbW9kaWZpY2F0aW9uIG9mIHRoZSBkZWZhdWx0IGNvbnRlbnQgdHlwZSAiQ29udGVudCIgb2YgQ01TbXMuPGJyIC8+Ckl0IHByb3ZpZGVzIG1vcmUgZmxleGliaWxpdHkgYnkgY3JlYXRpbmcgY3VzdG9tIGlucHV0IGNvbnRyb2xzIGluIGJhY2tlbmQuPGJyIC8+ClVzZXJzIGNhbiBhZGQgZHJvcGRvd25zLCBtdWx0aXBsZSBzZWxlY3QgbGlzdHMsIGNoZWNrYm94ZXMsIGdyb3VwIGNvbnRlbnQgYmxvY2tzIAppbiBzZXBhcmF0ZSBwYWdlIHRhYnMsIGJsb2NrIHRhYnMgaW5zaWRlIGEgcGFnZSB0YWIgb3IgaW4gZmllbGRzZXRzIGJ5IGp1c3QgCnVzaW5nIGFkZGl0aW9uYWwgcGFyYW1zIGluIHRoZSB0ZW1wbGF0ZSB3aGVuIGNhbGxpbmcgdGhlIGNvbnRlbnQuPGJyIC8+Ckl0IGFsc28gYWRkcyBhYmlsaXR5IHRvIGdyYW50IGFjY2VzcyBvZiBwYWdlcyB0byBjZXJ0YWluIHVzZXJzIG9mIHRoZSAKRnJvbnRFbmRVc2VycyBtb2R1bGUgYW5kIGhpZGUgdGhlIGNvbnRlbnQsIHJlcGxhY2UgaXQgYnkgdGhlIGxvZ2luIGZvcm0gb2YgdGhlIApGcm9udEVuZFVzZXJzIG1vZHVsZSBvciByZWRpcmVjdCB0byBhIHNwZWNpZmllZCBwYWdlIHNob3dpbmcgdGhlIGxvZ2luIGZvcm0gb3IgCmp1c3QgcmVkaXJlY3Qgd2l0aG91dCBkb2luZyBhbnl0aGluZyBlbHNlLjxiciAvPgpQYWdlIHByb3BlcnR5IG9mIEZyb250RW5kVXNlcnMgYWNjZXNzIGFuZCByZWRpcmVjdCBwYWdlIGNhbiBiZSBpbmhlcml0ZWQgYnkgCnBhcmVudCBwYWdlcy48L3A+CjxwPjxlbT48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz4gVG8gZ2V0IHRoZSBmdWxsIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBjb250ZW50IHR5cGUgCmluIGZyb250ZW5kIHlvdSBuZWVkIHRvIGNhbGwgeW91ciBjb250ZW50IHdpdGggdGhlIG1vZHVsZSBwbHVnaW4ge0FkdmFuY2VkQ29udGVudH0gCihjYXNlIHNlbnNpdGl2ZSEpLjxiciAvPgpPdGhlcndpc2UgaXQgbWF5IGJlaGF2ZSBsaWtlIHRoZSBkZWZhdWx0IGNvbnRlbnQgdHlwZSBwbHVnaW4uPC9lbT48L3A+CjxwPllvdSBjYW4gZXZlbiB1c2Ugc21hcnR5IGxvZ2ljIGluIHBhcmFtZXRlciB2YWx1ZXMuIFRoYXQgbWVhbnMgeW91IGNhbiB1c2UgdGhlIApyZXN1bHQgb2YgYSBwbHVnaW4sIGFuIHVkdCBvciBldmVuIGEgbW9kdWxlIG9yIGp1c3QgdGhlIGNvbnRlbnQgb2YgYSBnbG9iYWwgCmNvbnRlbnQgYmxvY2sgYXMgcGFyYW1ldGVyIHZhbHVlIHRvIGNyZWF0ZSBkeW5hbWljIHZhbHVlcy48L3A+CjxoMz5Ib3cgaXMgaXQgdXNlZD88L2gzPgo8cD5BZnRlciBpbnN0YWxsYXRpb24gdGhlIG1vZHVsZSBzZXR0aW5ncyBjYW4gYmUgZm91bmQgaW4gIkV4dGVuc2lvbnMtPkFkdmFuY2VkQ29udGVudCIuPC9wPgo8cD5BZGRpdGlvbmFsbHkgeW91IHdpbGwgaGF2ZSBhIG5ldyBjb250ZW50IHR5cGUgIkFkdmFuY2VkQ29udGVudCIgYXZhaWxhYmxlIAp3aGVuIGFkZGluZy9lZGl0aW5nIGEgcGFnZS48YnIgLz4KPHA+QWRkIHRoZSBmb2xsb3dpbmcgcGFyYW1zIHRvIHlvdXIgY29udGVudCB0YWcgaW4geW91ciBwYWdlIHRlbXBsYXRlLCAKY2hhbmdlIHRoZSBjb250ZW50IHR5cGUgb2YgeW91ciBwYWdlIHRvICJBZHZhbmNlZENvbnRlbnQiIGFuZCBzZWUgd2hhdCBoYXBwZW5zIAppbiBiYWNrZW5kLi4uPC9wPgo8aDM+V2hhdCBwYXJhbWV0ZXJzIGFyZSBhdmFpbGFibGU/PC9oMz4KPHA+YWxsIHBhcmFtcyBhcmUgb3B0aW9uYWw8L3A+CjxwPjxzdHJvbmc+RGVmYXVsdCBwYXJhbXM6PC9zdHJvbmc+PC9wPgo8dWw+Cgk8bGk+CgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+YmxvY2s8L3R0PiAoc3RyaW5nKQoJCTx1bD4KCQkJPGxpPgoJCQkJQWxsb3dzIHlvdSB0byBoYXZlIG1vcmUgdGhhbiBvbmUgY29udGVudCBibG9jayBwZXIgcGFnZS4gSWYgbXVsdGlwbGUgY29udGVudCB0YWdzIGFyZSBwdXQgb24gYSB0ZW1wbGF0ZSwgdGhhdCBudW1iZXIgb2YgZWRpdCBib3hlcyB3aWxsIGJlIGRpc3BsYXllZCBpZiB0aGUgcGFnZSBpcyBlZGl0ZWQuPGJyIC8+CgkJCQllLmcuOiA8Y29kZT57Y29udGVudCBibG9jaz0iU2Vjb25kIENvbnRlbnQgYmxvY2sifTwvY29kZT48YnIgLz4KCQkJCU5vdywgaWYgeW91IGVkaXQgYSBwYWdlIHRoZXJlIHdpbGwgYmEgYSB0ZXh0YXJlYSBjYWxsZWQgIlNlY29uZCBDb250ZW50IGJsb2NrIi48YnIgLz4KCQkJCTxlbT48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz4gVGhlIG5hbWUgb2YgdGhlIGNvbnRlbnQgYmxvY2sgbWF5IGNvbnRhaW4gb25seSBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgdW5kZXJzY29yZXMgKG5vIHdoaXRlc3BhY2VzLCBzcGVjaWFsIGNoYXJzLCB1bWxhdXRzIGV0Yy4pLiBPdGhlcndpc2UgaXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBwcm9wZXIgbmFtZSAoc2ltaWxhciB0byB0aGUgcGFnZSBhbGlhcykuPC9lbT4KCQkJPC9saT4KCQk8L3VsPgoJCTxiciAvPgoJPC9saT4KCTxsaT4KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD53eXNpd3lnPC90dD4gKHRydWUvZmFsc2UpCgkJPHVsPgoJCQk8bGk+SWYgc2V0IHRvIGZhbHNlLCB0aGVuIGEgd3lzaXd5ZyB3aWxsIG5ldmVyIGJlIHVzZWQgd2hpbGUgZWRpdGluZyB0aGlzIGJsb2NrLiBJZiB0cnVlLCB0aGVuIGl0IGFjdHMgYXMgbm9ybWFsLjwvbGk+CgkJPC91bD4KCQk8YnIgLz4KCTwvbGk+Cgk8bGk+CgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+b25lbGluZTwvdHQ+ICh0cnVlL2ZhbHNlKQoJCTx1bD4KCQkJPGxpPklmIHNldCB0byB0cnVlLCB0aGVuIG9ubHkgb25lIGVkaXQgbGluZSB3aWxsIGJlIHNob3duIHdoaWxlIGVkaXRpbmcgdGhpcyBibG9jay4gSWYgZmFsc2UsIHRoZW4gaXQgYWN0cyBhcyBub3JtYWwuIE9ubHkgd29ya3Mgd2hlbiBibG9jayBwYXJhbWV0ZXIgaXMgdXNlZC48L2xpPgoJCTwvdWw+CgkJPGJyIC8+Cgk8L2xpPgoJPGxpPgoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmRlZmF1bHQ8L3R0PiAoc3RyaW5nKQoJCTx1bD4KCQkJPGxpPkRlZmF1bHQgY29udGVudCB3aGVuIGNyZWF0aW5nIGEgbmV3IHBhZ2UuPC9saT4KCQk8L3VsPgoJCTxiciAvPgoJPC9saT4KCTxsaT4KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5sYWJlbDwvdHQ+IChzdHJpbmcpCgkJPHVsPgoJCQk8bGk+UHJvbXB0IGZvciB0aGlzIGNvbnRlbnQgYmxvY2suIFBvc3NpYmxlIHZhbHVlcyBhcmUgYW55IGV4cHJlc3Npb24uIElmIGJsYW5rLCB0aGUgdW5jb252ZXJ0ZWQgYmxvY2sgbmFtZSBpcyB1c2VkLjwvbGk+CgkJPC91bD4KCQk8YnIgLz4KCTwvbGk+Cgk8bGk+CgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+YXNzaWduPC90dD4gKHN0cmluZykKCQk8dWw+CgkJCTxsaT4KCQkJCUFzc2lnbnMgdGhlIGNvbnRlbnQgdG8gYSBzbWFydHkgcGFyYW1ldGVyLCB3aGljaCB5b3UgY2FuIHRoZW4gdXNlIGluIG90aGVyIGFyZWFzIG9mIHRoZSBwYWdlLCBvciB1c2UgdG8gdGVzdCB3aGV0aGVyIGNvbnRlbnQgZXhpc3RzIGluIGl0IG9yIG5vdC48YnIgLz4KCQkJCUV4YW1wbGUgb2YgcGFzc2luZyBwYWdlIGNvbnRlbnQgdG8gYSBVc2VyIERlZmluZWQgVGFnIGFzIGEgcGFyYW1ldGVyOjxiciAvPgoJCQkJPGNvZGU+e2NvbnRlbnQgYXNzaWduPXBhZ2Vjb250ZW50fTxiciAvPgoJCQkJe3RhYmxlX29mX2NvbnRlbnRzIHRoZXBhZ2Vjb250ZW50PSIkcGFnZWNvbnRlbnQifTwvY29kZT48YnIgLz4KCQkJCTxlbT48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz4gRm9yIHNvbWUgcmVhc29uIHRoaXMgcGFyYW0gZG9lcyBub3Qgd29yayBhdCB0aGUgbW9tZW50IHdpdGggdGhlIG1vZHVsZSBwbHVnaW4ge0F2YW5jZWRDb250ZW50fS4gVXNlIDxiciAvPjxjb2RlPntjYXB0dXJlIGFzc2lnbj0iZm9vIn17QWR2YW5jZWRDb250ZW50fXsvY2FwdHVyZX08L2NvZGU+IDxiciAvPmluc3RlYWQuPC9lbT4KCQkJPC9saT4KCQk8L3VsPgoJCTxiciAvPgoJPC9saT4KPC91bD4KPHA+PHN0cm9uZz5BZHZhbmNlZCBwYXJhbXM6PC9zdHJvbmc+PC9wPgo8dWw+Cgk8bGk+CgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+YmxvY2tfdHlwZTwvdHQ+ICh0ZXh0LGNoZWNrYm94LGRyb3Bkb3duLHNlbGVjdF9tdWx0aXBsZSxkYXRlLG11bHRpX2lucHV0KSAKCQk8dWw+CgkJCTxsaT5BbGxvd3MgeW91IHRvIHNwZWNpZnkgd2hhdCBjb250ZW50IGNvbnRyb2wgdHlwZSBpcyB1c2VkIGluIHRoZSBiYWNrIGVuZC48L2xpPgoJCTwvdWw+CgkJPGJyIC8+Cgk8L2xpPgoJPGxpPgoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PnBhZ2VfdGFiPC90dD4gKHN0cmluZykKCQk8dWw+CgkJCTxsaT4KCQkJCVRoaXMgcGFyYW1ldGVyIHNldHMgdGhlIHRhYiBpbiB3aGljaCB0aGUgY29udGVudCBibG9jayBpcyBkaXNwbGF5ZWQgaW4gdGhlIGJhY2tlbmQuPGJyIC8+CgkJCQlQb3NzaWJsZSB2YWx1ZXMgYXJlICJtYWluIiAoID0gVGFiICJNYWluIE1lbnUiKSwgIm9wdGlvbnMiICggPSBUYWIgIk9wdGlvbnMiKSwgb3IgYW55IG90aGVyIGFyYml0cmFyeSB2YWx1ZTxiciAvPgoJCQkJPGVtPmUuZy4geW91IGNhbiBhZGQgYSBjaGVja2JveCB0byB0aGUgb3B0aW9ucyB0YWIgb3IgY3JlYXRlIG5ldyB0YWJzPC9lbT4uCgkJCTwvbGk+CgkJPC91bD4KCQk8YnIgLz4KCTwvbGk+Cgk8bGk+CgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+YmxvY2tfdGFiPC90dD4gKHN0cmluZykKCQk8dWw+CgkJCTxsaT5XaXRoIHRoaXMgcGFyYW1ldGVyLCB0aGUgYmxvY2tzIHdpdGhpbiBhIHBhZ2UgdGFiIGNhbiBiZSBmdXJ0aGVyIGRpdmlkZWQgaW50byB0YWJzIG9yIGNhbiBiZSBncm91cGVkIHRvZ2V0aGVyLiBBbnkgZXhwcmVzc2lvbiBjYW4gYmUgdXNlZCBhcyBhIHBvc3NpYmxlIHZhbHVlLjwvbGk+CgkJPC91bD4KCQk8YnIgLz4KCTwvbGk+Cgk8bGk+CgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+YmxvY2tfZ3JvdXA8L3R0PiAoc3RyaW5nKQoJCTx1bD4KCQkJPGxpPldpdGggdGhpcyBwYXJhbWV0ZXIsIG11bHRpcGxlIGJsb2NrcyBjYW4gYmUgZ3JvdXBlZCBpbiBhIGZpZWxkc2V0LiBBbnkgZXhwcmVzc2lvbiBjYW4gYmUgdXNlZCBhcyBhIHBvc3NpYmxlIHZhbHVlLjwvbGk+CgkJPC91bD4KCQk8YnIgLz4KCTwvbGk+Cgk8bGk+CgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+YWN0aXZlPC90dD4gKHRydWUvZmFsc2UpCgkJPHVsPgoJCQk8bGk+CgkJCQlBbGxvd3MgeW91IHRvIGRpc2FibGUgYSBjb250ZW50IGJsb2NrLiBEaXNhYmxlZCBjb250ZW50IGJsb2NrcyB3b24ndCBiZSBzaG93biBpbiBiYWNrZW5kIGFzIHdlbGwgYXMgaW4gZnJvbnRlbmQuIChvbmx5IHdvcmtzIHdpdGgge0FkdmFuY2VkQ29udGVudH0gcGx1Z2luKTxiciAvPgoJCQk8L2xpPgoJCTwvdWw+CgkJPGJyIC8+Cgk8L2xpPgoJPGxpPgoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmVkaXRvcl9ncm91cHM8L3R0PiAoc3RyaW5nKQoJCTx1bD4KCQkJPGxpPgoJCQkJQSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBncm91cCBuYW1lcyB0aGF0IGFyZSBhbGxvd2VkIHRvIGVkaXQgdGhpcyBibG9jay4KCQkJPC9saT4KCQk8L3VsPgoJCTxiciAvPgoJPC9saT4KCTxsaT4KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5lZGl0b3JfdXNlcnM8L3R0PiAoc3RyaW5nKQoJCTx1bD4KCQkJPGxpPgoJCQkJQSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiB1c2VyIG5hbWVzIHRoYXQgYXJlIGFsbG93ZWQgdG8gZWRpdCB0aGlzIGJsb2NrLgoJCQk8L2xpPgoJCTwvdWw+CgkJPGJyIC8+Cgk8L2xpPgoJPGVtPjxzdHJvbmc+Tm90aWNlOjwvc3Ryb25nPiBpZiB0aGUgcGFyYW1zIDx0dD5lZGl0b3JfdXNlcnM8L3R0PiBhbmQgPHR0PmVkaXRvcl9ncm91cHM8L3R0PiBhcmUgZW1wdHkgdGhlIGJsb2NrIG1heSBiZSBlZGl0ZWQgYnkgYW55IHVzZXIgd2l0aCBzdWZmaWNpZW50IHBlcm1pc3Npb24gdG8gZWRpdCBhIHBhZ2U8L2VtPjxiciAvPjxiciAvPgoJPGxpPgoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmZldV9hY2Nlc3M8L3R0PgoJCTx1bD4KCQkJPGxpPgoJCQkJQSBsaXN0IG9mIGZldSBncm91cCBpZHMgc2VwYXJhdGVkIGJ5IGEgY29tbWEuPGJyIC8+CgkJCQlUaGlzIHNob3dzIHRoZSBjb250ZW50IGJsb2NrIG9ubHkgdG8gY2VydGFpbiBmZXUgZ3JvdXBzLjxiciAvPgoJCQk8L2xpPgoJCTwvdWw+CgkJPGJyIC8+Cgk8L2xpPgoJPGxpPgoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmZldV9hY3Rpb248L3R0PiAodHJ1ZS9mYWxzZSkKCQk8dWw+CgkJCTxsaT4KCQkJCVNwZWNpZnkgaWYgdGhlIGxvZ2luIGZvcm0gb2YgdGhlIGZldSBtb2R1bGUgd2lsbCBiZSBzaG93biBvciBub3QuPGJyIC8+CgkJCQk8ZW0+PHN0cm9uZz5Ob3RpY2U6PC9zdHJvbmc+IFRoZSBsb2dpbiBmb3JtIHdpbGwgb25seSBiZSBzaG93biBvbmUgdGltZS48YnIgLz4KCQkJCUlmIHRoZXJlIGFyZSBtdWx0aXBsZSBibG9ja3Mgd2l0aCBsaW1pdGVkIGZldV9hY2Nlc3MgYW5kIGZldV9hY3Rpb24gc2V0IHRvIHRydWUgb25seSB0aGUgZmlyc3QgYmxvY2tzIGxvZ2luIGZvcm0gd2lsbCBiZSBzaG93biBhbmQgYWxsIG90aGVyIGJsb2NrcyB3aWxsIGp1c3QgYmUgZW1wdHkuPC9lbT48YnIgLz4KCQkJPC9saT4KCQk8L3VsPgoJCTxiciAvPgoJPC9saT4KCTxsaT4KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5hbGxvd19ub25lPC90dD4gKHRydWUvZmFsc2UpCgkJPHVsPgoJCQk8bGk+U2V0IHRvIHRydWUgaWYgdGhlIHVzZXIgbWF5IGVudGVyIGVtcHR5IHZhbHVlcy4gPGJyIC8+SWYgc2V0IHRvIGZhbHNlIGFuZCB2YWx1ZSBpcyBlbXB0eSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgcGFyYW0gImRlZmF1bHQiIHdpbGwgYmUgdXNlZC4gPGJyIC8+SWYgc2V0IHRvIHRydWUgYW5kIGJsb2NrIGlzIG9mIHR5cGUgaW1hZ2UvZmlsZSB0aGUgb3B0aW9uICJub25lIiAobW9kZT0iZHJvcGRvd24iKSBvciBhIGJ1dHRvbiB0byBjbGVhciB0aGUgc2VsZWN0ZWQgZmlsZS9pbWFnZSB2YWx1ZSAobW9kZT0iZmlsZXBpY2tlciIpIHdpbGwgYmUgZGlzcGxheWVkLjwvbGk+CgkJPC91bD4KCQk8YnIgLz4KCTwvbGk+Cgk8bGk+CgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+c21hcnR5PC90dD4gKHRydWUvZmFsc2UpCgkJPHVsPgoJCQk8bGk+CgkJCQlUdXJuIHNtYXJ0eSBwcm9jZXNzaW5nIG9mIHZhbHVlcyBvbi9vZmYuPGJyIC8+CgkJCQlJZiBzZXQgdG8gdHJ1ZSBhbnkgZ2l2ZW4gdmFsdWUgd2lsbCBiZSBwcm9jZXNzZWQgYnkgdGhlIHNtYXJ0eSBlbmdpbmUuPGJyIC8+CgkJCQk8ZW0+PHN0cm9uZz5Ob3RpY2U6IDwvc3Ryb25nPiBDb25zaWRlciB0aGF0IHlvdSBjYW5ub3QgdXNlIHRoZSBkZWZhdWx0IHNtYXJ0eSBkZWxpbWl0ZXJzIHRoYXQgYXJlIHVzZWQgaW4gdGhlIHRlbXBsYXRlLiBUaGlzIHdpbGwgY2F1c2Ugc21hcnR5IGVycm9ycyBpbiBmcm9udGVuZC48YnIgLz4KCQkJCVNvIHlvdSBuZWVkIHRvIHVzZSA6OjogYXMgZGVsaW1pdGVyIGluc3RlYWQuPGJyIC8+PC9lbT4KCQkJCUUuZy46IDxjb2RlPntjb250ZW50IGJsb2NrPSJDYXRlZ29yaWVzIiBsYWJlbD0iU2VsZWN0IGEgY2F0ZWdvcnkiIGJsb2NrX3R5cGU9ImRyb3Bkb3duIiBpdGVtcz0iOjo6Z2xvYmFsX2NvbnRlbnQgbmFtZT0nY2F0ZWdvcnlsaXN0Jzo6OiIgc21hcnR5PSJ0cnVlIn08L2NvZGU+CgkJCTwvbGk+CgkJPC91bD4KCQk8YnIgLz4KCTwvbGk+Cgk8bGk+CgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+ZGVzY3JpcHRpb248L3R0PiAoc3RyaW5nKSAKCQk8dWw+CgkJCTxsaT5BbGxvd3MgeW91IHRvIGFkZCBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIHRvIHRoYXQgYmxvY2sgZm9yIHlvdXIgZWRpdG9ycy48L2xpPgoJCTwvdWw+CgkJPGJyIC8+Cgk8L2xpPgoJPGxpPgoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmNvbGxhcHNlPC90dD4gKHRydWUvZmFsc2UpCgkJPHVsPgoJCQk8bGk+CgkJCQlTZXQgdG8gdHJ1ZS9mYWxzZSB0byBkaXNwbGF5IGJsb2NrIGluIGJhY2tlbmQgaW4gY29sbGFwc2VkL2V4cGFuZGVkIG1vZGUgYnkgZGVmYXVsdC48YnIgLz4KCQkJCTxlbT48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz4gd2lsbCBiZSBhbHdheXMgZmFsc2UgaWYgbm9fY29sbGFwc2U9dHJ1ZSBpcyB1c2VkLjwvZW0+PGJyIC8+CgkJCTwvbGk+CgkJPC91bD4KCQk8YnIgLz4KCTwvbGk+Cgk8bGk+CgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+bm9fY29sbGFwc2U8L3R0PiAodHJ1ZS9mYWxzZSkKCQk8dWw+CgkJCTxsaT4KCQkJCVNldCB0byBmYWxzZSB0byBkaXNhYmxlIGZvbGRpbmcgb2YgYmxvY2tzLjxiciAvPgoJCQkJPGVtPjxzdHJvbmc+Tm90aWNlOjwvc3Ryb25nPiBpZiBzZXQgdG8gdHJ1ZSBwYXJhbSBjb2xsYXBzZSBpcyBhbHdheXMgZmFsc2UuPC9lbT48YnIgLz4KCQkJPC9saT4KCQk8L3VsPgoJCTxiciAvPgoJPC9saT4KCTxsaT4KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5yZXF1aXJlZDwvdHQ+ICh0cnVlL2ZhbHNlKQoJCTx1bD4KCQkJPGxpPgoJCQkJU2V0IHRvIHRydWUgaWYgdGhpcyBibG9jayBtYXkgbm90IGJlIGVtcHR5LjxiciAvPgoJCQk8L2xpPgoJCTwvdWw+CgkJPGJyIC8+Cgk8L2xpPgo8L3VsPgo8cD48c3Ryb25nPlBhcmFtcyBvZiBibG9ja3R5cGUgImNoZWNrYm94Ijo8L3N0cm9uZz48L3A+Cjx1bD4KCTxsaT4KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5kZWZhdWx0PC90dD4gKHRydWUvZmFsc2UpIAoJCTx1bD4KCQkJPGxpPgoJCQkJY2hlY2tzL3VuY2hlY2tzIHRoZSBjaGVja2JveCBieSBkZWZhdWx0IHdoZW4gYWRkaW5nIGEgcGFnZTxiciAvPgoJCQkJPGVtPjxzdHJvbmc+Tm90aWNlOjwvc3Ryb25nPiBVc2UgIjEiIGZvciBjaGVja2VkIGFuZCAiMCIgZm9yIHVuY2hlY2tlZCBieSBkZWZhdWx0PGJyIC8+PC9lbT4KCQkJCUUuZy4gPGNvZGU+e2NvbnRlbnQgYmxvY2tfdHlwZT0iY2hlY2tib3giIGRlZmF1bHQ9MX08L2NvZGU+CgkJCTwvbGk+CgkJPC91bD4KCQk8YnIgLz4KCTwvbGk+CjwvdWw+CjxwPjxzdHJvbmc+UGFyYW1zIG9mIGJsb2NrdHlwZSAiZHJvcGRvd24iLyJzZWxlY3RfbXVsdGlwbGUiOjwvc3Ryb25nPjwvcD4KPHVsPgoJPGxpPgoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0Pml0ZW1zPC90dD4gKHN0cmluZykKCQk8dWw+CgkJCTxsaT5JdGVtIGxhYmVsKHMpIG9mIHRoZSBmaWVsZChzKSAoc2VwYXJhdGVkIGJ5IGEgZGVsaW1pdGVyIC0gZGVmYXVsdCBpcyB8IChwaXBlKSk8L2xpPgoJCTwvdWw+CgkJPGJyIC8+Cgk8L2xpPgoJPGxpPgoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PnZhbHVlczwvdHQ+IChzdHJpbmcpCgkJPHVsPgoJCQk8bGk+VmFsdWUocykgb2YgdGhlIGl0ZW1zIChzZXBhcmF0ZWQgYnkgYSBkZWxpbWl0ZXIgLSBkZWZhdWx0IGlzIHwgKHBpcGUpKTwvbGk+CgkJPC91bD4KCQk8YnIgLz4KCTwvbGk+Cgk8ZW0+PHN0cm9uZz5Ob3RpY2U6PC9zdHJvbmc+IGlmIHRoZXJlIGFyZSBsZXNzIHZhbHVlcyB0aGFuIGl0ZW1zIHRoZSBpdGVtIGxhYmVscyB3aWxsIGJlIHVzZWQgYXMgdmFsdWVzIChhbmQgdmlzZSB2ZXJzYSkuPC9lbT48YnIgLz48YnIgLz4KCTxsaT4KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5kZWZhdWx0PC90dD4gKHN0cmluZykKCQk8dWw+CgkJCTxsaT4KCQkJCVByZXNlbGVjdGVkIHZhbHVlKHMpIChzZXBhcmF0ZWQgYnkgYSBkZWxpbWl0ZXIgLSBkZWZhdWx0IGlzIHwgKHBpcGUpKTxiciAvPgoJCQk8L2xpPgoJCTwvdWw+CgkJPGJyIC8+Cgk8L2xpPgoJPGxpPgoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmRlbGltaXRlcjwvdHQ+IChzdHJpbmcpCgkJPHVsPgoJCQk8bGk+QSBzaWduIG9yIHN0cmluZyB0aGF0IHdpbGwgYmUgdXNlZCB0byBkZXZpZGUgdGhlIGl0ZW1zL3ZhbHVlcyAoZGVmYXVsdCBpcyB8IChwaXBlKSk8L2xpPgoJCTwvdWw+CgkJPGJyIC8+Cgk8L2xpPgoJPGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PnNpemU8L3R0PiAoaW50ZWdlcikKCQk8dWw+CgkJCTxsaT5IZWlnaHQgb2YgY29udGVudCBibG9jayBpbiBiYWNrIGVuZCBpZiA8Y29kZT5ibG9ja190eXBlPSJzZWxlY3RfbXVsdGlwbGUiPC9jb2RlPiBpcyBzZXQuIDxlbT4oRGVmYXVsdCBpcyBudW1iZXIgb2YgaXRlbXMpPC9lbT48L2xpPgoJCTwvdWw+CgkJPGJyIC8+Cgk8L2xpPgoJPGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PnNvcnRhYmxlX2l0ZW1zPC90dD4gKHRydWUvZmFsc2UpIC0gc2VsZWN0X211bHRpcGxlIG9ubHkKCQk8dWw+CgkJCTxsaT4KCQkJCUlmIHNldCB0byB0cnVlIHRoZSBpdGVtcyB3b24ndCBiZSBzaG93biBhcyBhIG11bHRpcGxlIHNlbGVjdCBpbnB1dCB3aXRoIG9wdGlvbnMgYnV0IGFzIGEgbGlzdCBvZiBjaGVja2JveGVzIHRoYXQgY2FuIGJlIHJlb3JkZXJlZC48YnIgLz5FYWNoIHJvdyBjb250YWlucyB0aGUgaXRlbSBsYWJlbCBhbmQgYSBjaGVja2JveCB3aXRoIHRoZSBpdGVtIHZhbHVlLjxiciAvPgoJCQkJPGVtPjxzdHJvbmc+Tm90aWNlOjwvc3Ryb25nPiBvbmx5IHRoZSBvcmRlciBvZiB0aGUgPHN0cm9uZz5zZWxlY3RlZDwvc3Ryb25nPiBpdGVtcyB3aWxsIGJlIHN0b3JlZCBhbmQgYWx3YXlzIGRpc3BsYXllZCBvbiB0aGUgdG9wIG9mIHRoZSBsaXN0IHdoZW4gcmVsb2FkaW5nIHRoZSBlZGl0IHBhZ2UuPGJyIC8+CgkJCQlVbnNlbGVjdGVkIGl0ZW1zIHdpbGwgYXBwZW5kZWQgaW4gdGhhdCBvcmRlciB0aGV5IGFyZSBkZWZpbmVkIGluIHRoZSB0ZW1wbGF0ZTwvZW0+CgkJCTwvbGk+CgkJPC91bD4KCQk8YnIgLz4KCTwvbGk+CjwvdWw+CjxwPjxzdHJvbmc+UGFyYW1zIG9mIGJsb2NrdHlwZSAiZGF0ZSI6PC9zdHJvbmc+PC9wPgo8dWw+Cgk8bGk+CgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+c3RlcF9ob3VyczwvdHQ+IChpbnQpIAoJCTx1bD4KCQkJPGxpPgoJCQkJc3RlcHMgb2YgaG91cnMgaW4gdGhlIGNsb2NrIGRyb3Bkb3duLiAoZGVmYXVsdCBpcyAxKQoJCQk8L2xpPgoJCTwvdWw+CgkJPGJyIC8+Cgk8L2xpPgoJPGxpPgoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PnN0YXJ0X2hvdXI8L3R0PiAoaW50KSAKCQk8dWw+CgkJCTxsaT4KCQkJCXRoZSBzdGFydCBob3VyIG9mIHRoZSBjbG9jayBkcm9wZG93bi4gKGRlZmF1bHQgaXMgMCkKCQkJPC9saT4KCQk8L3VsPgoJCTxiciAvPgoJPC9saT4KCTxsaT4KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5lbmRfaG91cjwvdHQ+IChpbnQpIAoJCTx1bD4KCQkJPGxpPgoJCQkJdGhlIGVuZCBob3VyIG9mIHRoZSBjbG9jayBkcm9wZG93biAoZGVmYXVsdCBpcyAxMiBvciAyMykKCQkJPC9saT4KCQk8L3VsPgoJCTxiciAvPgoJPC9saT4KCTxsaT4KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5zaG93MjRoPC90dD4gKHRydWUvZmFsc2UpIAoJCTx1bD4KCQkJPGxpPgoJCQkJc2V0IHRvIGZhbHNlIGlmIEFNL1BNIGlzIHVzZWQuIChkZWZhdWx0IGlzIHRydWUpCgkJCTwvbGk+CgkJPC91bD4KCQk8YnIgLz4KCTwvbGk+Cgk8bGk+CgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+c3RlcF9taW51dGVzPC90dD4gKGludCkgCgkJPHVsPgoJCQk8bGk+CgkJCQlzdGVwcyBvZiBtaW51dGVzIGluIHRoZSBjbG9jayBkcm9wZG93bi4gKGRlZmF1bHQgaXMgMTApCgkJCTwvbGk+CgkJPC91bD4KCQk8YnIgLz4KCTwvbGk+Cgk8bGk+CgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+c3RhcnRfbWludXRlPC90dD4gKGludCkgCgkJPHVsPgoJCQk8bGk+CgkJCQl0aGUgc3RhcnQgbWludXRlIG9mIHRoZSBjbG9jayBkcm9wZG93bi4gKGRlZmF1bHQgaXMgMCkKCQkJPC9saT4KCQk8L3VsPgoJCTxiciAvPgoJPC9saT4KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5lbmRfbWludXRlPC90dD4gKGludCkgCgkJPHVsPgoJCQk8bGk+CgkJCQl0aGUgZW5kIG1pbnV0ZSBvZiB0aGUgY2xvY2sgZHJvcGRvd24gKGRlZmF1bHQgaXMgNTkpCgkJCTwvbGk+CgkJPC91bD4KCQk8YnIgLz4KCTwvbGk+Cgk8bGk+CgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+c2hvd19jbG9jazwvdHQ+ICh0cnVlL2ZhbHNlKSAKCQk8dWw+CgkJCTxsaT4KCQkJCXNldCB0byBmYWxzZSBpZiBubyB0aW1lIGRyb3Bkb3duIHNob3VsZCBiZSBkaXNwbGF5ZWQgKGRlZmF1bHQgaXMgdHJ1ZSk8YnIgLz4KCQkJCTxlbT48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz4gSWYgc2V0IHRvIGZhbHNlIDAwOjAwIG8nY2xvY2sgd2lsbCBiZSB1c2VkPC9lbT4KCQkJPC9saT4KCQk8L3VsPgoJCTxiciAvPgoJPC9saT4KCTxsaT4KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5kYXRlX2Zvcm1hdDwvdHQ+IChzdHJpbmcpIAoJCTx1bD4KCQkJPGxpPgoJCQkJVGhlIHN0cmZ0aW1lIGRhdGUgZm9ybWF0IHRvIHNob3cgaW4gZnJvbnRlbmQuCgkJCTwvbGk+CgkJPC91bD4KCQk8YnIgLz4KCTwvbGk+CjwvdWw+CjxwPjxzdHJvbmc+UGFyYW1zIG9mIGJsb2NrdHlwZSAibXVsdGlfaW5wdXQiOjwvc3Ryb25nPjwvcD4KPHVsPgoJPGxpPgoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmlucHV0czwvdHQ+IChjc3Ygb2YgaW5wdXQgaWRzIHlvdSBjcmVhdGVkIGluIHRoZSBiYWNrZW5kKSAKCQk8YnIgLz48YnIgLz4KCTwvbGk+Cgk8bGk+CgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+dmFsdWVfZGVsaW1pdGVyPC90dD4gKGFueSBzdHJpbmcpIAoJCTx1bD4KCQkJPGxpPgoJCQkJVGhpcyBkZWZpbmVzIGEgc3RyaW5nIHRoYXQgZGV2aWRlcyB0aGUgdmFsdWVzIG9mIHRoZSBpbnB1dHMgb2Ygb25lIG11bHRpX2lucHV0IHdoZW4gc3RvcmVkIGluIHRoZSBkYXRhYmFzZS48YnIgLz4KCQkJCURlZmF1bHQgaXMgIiZsdDshLS0gbXVsdGlfaW5wdXRfdmFsdWVfZGVsbGltaXRlciAtLSZndDsiCgkJCTwvbGk+CgkJPC91bD4KCQk8YnIgLz4KCTwvbGk+Cgk8bGk+CgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+aW5wdXRfZGVsaW1pdGVyPC90dD4gKGFueSBzdHJpbmcpIAoJCTx1bD4KCQkJPGxpPgoJCQkJVGhpcyBkZWZpbmVzIGEgc3RyaW5nIHRoYXQgZGV2aWRlcyB0aGUgbXVsdGlfaW5wdXRzIHlvdSBkZWZpbmVkIGZvciB0aGlzIGNvbnRlbnQgYmxvY2sgd2hlbiBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlLjxiciAvPgoJCQkJRGVmYXVsdCBpcyAiJmx0OyEtLSBtdWx0aV9pbnB1dF9kZWxsaW1pdGVyIC0tJmd0OyIKCQkJPC9saT4KCQk8L3VsPgoJCTxiciAvPgoJPC9saT4KCTxsaT4KCQk8cD48c3Ryb25nPldoYXQgaXMgYSBtdWx0aV9pbnB1dCBmb3I/PC9zdHJvbmc+PC9wPgoJCTxwPkEgbXVsdGlfaW5wdXQgYmxvY2sgaXMgYSBjb250ZW50IGJsb2NrIHRoYXQgY29uc2lzdHMgb2YgZGlmZmVyZW50IGlucHV0IGZpZWxkcy4gPGJyIC8+CgkJWW91IGNhbiBkZWZpbmUgdGhlbSBpbiB0aGUgbW9kdWxlIGFkbWluaXN0cmF0aW9uIHVzaW5nIHRoZSBzYW1lIHN5bnRheCB5b3UgdXNlIGluIGEgdGVtcGxhdGUgd2hlbiBkZWZpbmluZyBhIGNvbnRlbnQgYmxvY2suPGJyIC8+CgkJTXVsdGkgaW5wdXRzIGNhbiBiZSB1c2VkIGlmIHlvdSB3YW50IHRvIHN0b3JlIGRpZmZlcmVudCB2YWx1ZXMgaW4gb25lIGNvbnRlbnQgYmxvY2sgYW5kIHByb3ZpZGUgZGlmZmVyZW50IGlucHV0IHR5cGVzIGZvciBlYWNoIHZhbHVlcy48YnIgLz4KCQlUaGlzIGNhbiBiZSB1c2VmdWxsIGlmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIGRyb3Bkb3duIHRvIHNlbGVjdCBhIG1vZHVsZSB0byBiZSBzaG93biBpbiBmcm9udGVuZCBhbmQgdGV4dCBpbnB1dCB0byBkZWZpbmUgdGhlIG1vZHVsZSBwYXJhbWV0ZXJzLjxiciAvPgoJCUV4YW1wbGUgZm9yIGEgbXVsdGlfaW5wdXQgaW4gcGFnZSB0ZW1wbGF0ZTo8L3A+CgkJPHByZT4KCQk8Y29kZT4KCQl7Y29udGVudCBibG9jaz0ibW9kdWxlIiBsYWJlbD0iUGFnZSBtb2R1bGVzIiBibG9ja190eXBlPSJtdWx0aV9pbnB1dCIgaW5wdXRzPSJtb2R1bGUsbW9kdWxlLG1vZHVsZSxtb2R1bGUifQoJCTwvY29kZT4KCQk8L3ByZT4KCQk8cD5FeGFtcGxlIGZvciB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgbXVsdGlfaW5wdXQgbmFtZWQgIm1vZHVsZSI6PC9wPgoJCTxwcmU+CgkJPGNvZGU+CgkJe2NvbnRlbnQgYmxvY2s9Im1vZHVsZSBzZWxlY3Rpb24iIGJsb2NrX3R5cGU9ImRyb3Bkb3duIiBpdGVtcz0ifE5ld3N8R2FsbGVyeXxNZW51In0KCQl7Y29udGVudCBibG9jaz0ibW9kdWxlIHBhcmFtcyIgYmxvY2tfdHlwZT0idGV4dCIgb25lbGluZT10cnVlfQoJCTwvY29kZT4KCQk8L3ByZT4KCQk8cD5XaGF0IGhhcHBlbnMgaWYgeW91IGVkaXQgYSBwYWdlPzwvcD4KCQk8cD5JdCB3aWxsIHNob3cgeW91IGEgZmllbGRzZXQgd2l0aCBsZWdlbmQgIlBhZ2UgbW9kdWxlcyIuIDxiciAvPgoJCUluc2lkZSB0aGlzIGZpZWxkc2V0IGl0IHNob3dzIHRoZSBtdWx0aV9pbnB1dCBuYW1lZCAibW9kdWxlIiBmb3VyIHRpbWVzLjxiciAvPgoJCVRoYXQgbWVhbnMgeW91IHNlZSBmb3VyIGxpbmVzIHdpdGggdHdvIGlucHV0IGZpZWxkcy4gQSBkcm9wZG93biBhbmQgYSB0ZXh0IGlucHV0LjwvcD4KCQk8cD5XaGF0IGhhcHBlbnMgaWYgeW91IHNhdmUgYSBwYWdlPzwvcD4KCQk8cD5UaGUgbW9kdWxlIHN0b3JlcyB0aGUgdmFsdWVzIGFzIG9uZSBzaW5nbGUgY29udGVudCBwcm9wZXJ0eSAoYWthIGNvbnRlbnRibG9jaykgYW5kIHNlcGFyYXRlcyB0aGUgaW5wdXRzIGJ5IGEgZ2l2ZW4gZGVsaW1pdGVyLjxiciAvPgoJCUxldCdzIGFzc3VtZSB5b3Ugc2VsZWN0IHRoZSBOZXdzIG1vZHVsZSBmb3VyIHRpbWVzIHdpdGggZGlmZmVyZW50IG1vZHVsZSBwYXJhbXMgbGlrZSBjYXRlZ29yeT0iMSIsIGNhdGVnb3J5PSIyIiwgY2F0ZWdvcnk9IjMiLCBjYXRlZ29yeT0iNCIuPGJyIC8+CgkJSW4gdGhlIGRhdGFiYXNlIGl0IHN0b3JlcyB0aGlzIHN0cmluZzo8L3A+CgkJPHByZT4KCQk8Y29kZT4KCQlOZXdzJmx0OyEtLSBtdWx0aV9pbnB1dF92YWx1ZV9kZWxpbWl0ZXIgLS0mZ3Q7Y2F0ZWdvcnk9IjEiJmx0OyEtLSBtdWx0aV9pbnB1dF9kZWxpbWl0ZXIgLS0mZ3Q7PGJyIC8+CgkJTmV3cyZsdDshLS0gbXVsdGlfaW5wdXRfdmFsdWVfZGVsaW1pdGVyIC0tJmd0O2NhdGVnb3J5PSIyIiZsdDshLS0gbXVsdGlfaW5wdXRfZGVsaW1pdGVyIC0tJmd0OzxiciAvPgoJCU5ld3MmbHQ7IS0tIG11bHRpX2lucHV0X3ZhbHVlX2RlbGltaXRlciAtLSZndDtjYXRlZ29yeT0iMyImbHQ7IS0tIG11bHRpX2lucHV0X2RlbGltaXRlciAtLSZndDs8YnIgLz4KCQlOZXdzJmx0OyEtLSBtdWx0aV9pbnB1dF92YWx1ZV9kZWxpbWl0ZXIgLS0mZ3Q7Y2F0ZWdvcnk9IjQiCgkJPC9jb2RlPgoJCTwvcHJlPgoJCTxwPkluIHlvdXIgcGFnZSB0ZW1wbGF0ZSB5b3UgY2FuIGV4cGxvZGUgdGhlIGNvbnRlbnQgYnkgdGhlIGRlbGltaXRlcnMgYW5kIGNhbGwgdGhlIHNlbGVjdGVkIG1vZHVsZXMuPC9wPgoJCTxwPkZ1bGwgRXhhbXBsZTo8L3A+CgkJPHByZT4KCQk8Y29kZT4KCQl7KiBkZWZpbmUgdGhlIGNvbnRlbnQgYmxvY2sgKn0KCQl7Y29udGVudCBibG9jaz0ibXlfbW9kdWxlcyIgYmxvY2tfdHlwZT0ibXVsdGlfaW5wdXQiIGlucHV0cz0iTW9kdWxlLE1vZHVsZSxNb2R1bGUsTW9kdWxlIiBhc3NpZ249Im1vZHVsZXMifQoJCQoJCXsqIGV4cGxvZGUgYmxvY2sgY29udGVudCBpbiBhbiBhcnJheSB0byBnZXQgdGhlIGlucHV0IGdyb3VwcyAqfQoJCXthc3NpZ24gdmFyPW1vZHVsZXMgdmFsdWU9IiZsdDshLS0gbXVsdGlfaW5wdXRfZGVsaW1pdGVyIC0tJmd0OyJ8ZXhwbG9kZTokbW9kdWxlc30KCQkKCQl7KiBsb29wIHRocm91Z2ggdGhlIHNlbGVjdGVkIG1vZHVsZXMgKn0KCQl7Zm9yZWFjaCBmcm9tPSRtb2R1bGVzIGl0ZW09Im1vZHVsZSJ9CgkJCXtpZiAkbW9kdWxlICE9ICcnfQoJCQkKCQkJCXsqIGV4cGxvZGUgdGhlIGlucHV0IHZhbHVlcyBpbiBtb2R1bG5hbWUgYW5kIG1vZHVsZSBwYXJhbWV0ZXJzICp9CgkJCQl7YXNzaWduIHZhcj1tb2R1bGVfaXRlbXMgdmFsdWU9IiZsdDshLS0gbXVsdGlfaW5wdXRfdmFsdWVfZGVsaW1pdGVyIC0tJmd0OyJ8ZXhwbG9kZTokbW9kdWxlfQoJCQkJCgkJCQl7aWYkbW9kdWxlX2l0ZW1zWzBdICE9ICcnfQoJCQkJCgkJCQkJeyogY2FsbCB0aGUgbW9kdWxlICp9CgkJCQkJe2lmIGlzc2V0KCRtb2R1bGVfaXRlbXNbMV0pfQoJCQkJCQl7ZXZhbCB2YXI9JHNtYXJ0eS5sZGVsaW18Y2F0OidjbXNfbW9kdWxlIG1vZHVsZT0iJ3xjYXQ6JG1vZHVsZV9pdGVtc1swXXxjYXQ6JyIgJ3xjYXQ6JG1vZHVsZV9pdGVtc1sxXXxjYXQ6JHNtYXJ0eS5yZGVsaW19CgkJCQkJe2Vsc2V9CgkJCQkJCXtldmFsIHZhcj0kc21hcnR5LmxkZWxpbXxjYXQ6J2Ntc19tb2R1bGUgbW9kdWxlPSInfGNhdDokbW9kdWxlX2l0ZW1zWzBdfGNhdDonIid8Y2F0OiRzbWFydHkucmRlbGltfQoJCQkJCXsvaWZ9CgkJCQkJCgkJCQl7L2lmfQoJCQkJCgkJCXsvaWZ9CgkJCgkJey9mb3JlYWNofQoJCTwvY29kZT4KCQk8L3ByZT4KCTwvbGk+CjwvdWw+Cgo8aDM+U3VwcG9ydDwvaDM+CjxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IGluY2x1ZGUgY29tbWVyY2lhbCBzdXBwb3J0LiBIb3dldmVyLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4KPHVsPgoJPGxpPlRoZSBwcm9qZWN0cyBob21lcGFnZSBpcyA8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2NvbnRlbnQyLyI+aHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9jb250ZW50Mi88L2E+PC9saT4KCTxsaT5BZGRpdGlvbmFsIGRpc2N1c3Npb24gb2YgdGhpcyBtb2R1bGUgbWF5IGFsc28gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZyI+Q01TIE1hZGUgU2ltcGxlIEZvcnVtczwvYT4uPC9saT4KPC91bD4KPGJyIC8+CjxwPkZlZWwgZnJlZSByZXBvcnQgYW55IGtpbmQgb2YgZmVlZGJhY2suPC9wPgo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4KPHA+CglBcyBwZXIgdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBhcy1pcy48YnIgLz4KCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLDxiciAvPgoJYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Y8YnIgLz4KCU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS48YnIgLz4KCVNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy48YnIgLz4KCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlPGJyIC8+CglhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZTxiciAvPgoJRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0E8YnIgLz4KCU9yIHJlYWQgaXQgb25saW5lOiA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPmh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTDwvYT48YnIgLz4KCVBsZWFzZSByZWFkIHRoZSB0ZXh0IG9mIHRoZSBsaWNlbnNlIGZvciB0aGUgZnVsbCBkaXNjbGFpbWVyLgo8L3A+CjxwPkNvcHlyaWdodCAmY29weTsgMjAxMCwgR2VvcmcgQnVzY2ggKE5hTikuIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4KPHA+VGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVsZWFzZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+R05VIFB1YmxpYyBMaWNlbnNlPC9hPi4gWW91IG11c3QgYWdyZWUgdG8gdGhpcyBsaWNlbnNlIGJlZm9yZSB1c2luZyB0aGUgbW9kdWxlLjwvcD4KPGJyIC8+PGgzPlBhcmFtZXRlcjwvaDM+PHVsPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGxhbmc9ImVuX1VTIiAtIERpZXNlciBQYXJhbWV0ZXIgbGVndCBkaWUgU3ByYWNoZSBmZXN0LCBkaWUgdm9tIE1vZHVsIGYmdXVtbDtyIGRpZSBBdXNnYWJlIGF1ZiBkZXIgV2Vic2VpdGUgdmVyd2VuZGV0IHdpcmQuIERpZXMgd2lyZCBqZWRvY2ggbmljaHQgdm9uIGFsbGVuIE1vZHVsZW4gdW50ZXJzdCZ1dW1sO3R6dCBiencuIGJlbiZvdW1sO3RpZ3QuPC9saT48L3VsPg==]]></help>
	<about><![CDATA[PGJyIC8+QXV0b3I6IEdlb3JnIEJ1c2NoIChOYU4pPGJyIC8+PGJyIC8+VmVyc2lvbiA6IDAuNy4xPGJyIC8+PGJyIC8+JkF1bWw7bmRlcnVuZ3N2ZXJsYXVmOjxiciAvPjxiciAvPgo8cD48c3Ryb25nPk1vZHVsZSByZWxlYXNlczwvc3Ryb25nPi4uLjwvcD4KPHVsPgoJPGxpPjxwPjxzdHJvbmc+MC43LjEgKE5vdiAyMDEwKTo8L3N0cm9uZz48L3A+CgkJPHVsPgoJCQk8bGk+PHA+QnVnZml4ZXM6PC9wPgoJCQkJPHVsPgoJCQkJCTxsaT48cD4tIGZpeGVkIGJ1ZyBpdGVtICM1NjUxPC9wPjwvbGk+CgkJCQk8L3VsPgoJCQk8L2xpPgoJCQk8bGk+PHA+RmVhdHVyZXM6PC9wPgoJCQkJPHVsPgoJCQkJCTxsaT48cD4tIGFkZGVkIHBhcmFtIGZldV9hY2Nlc3M8L3A+PC9saT4KCQkJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbSBmZXVfYWN0aW9uPC9wPjwvbGk+CgkJCQkJPGxpPjxwPi0gYWRkZWQgcGFyYW0gcmVxdWlyZWQ8L3A+PC9saT4KCQkJCTwvdWw+CgkJCTwvbGk+CgkJPC91bD4KCTwvbGk+Cgk8bGk+PHA+PHN0cm9uZz4wLjcgKE5vdiAyMDEwKTo8L3N0cm9uZz48L3A+CgkJPHVsPgoJCQk8bGk+PHA+QnVnZml4ZXM6PC9wPgoJCQkJPHVsPgoJCQkJCTxsaT48cD4tIGNvbXBhdGliaWxpdHkgYnVnZml4ZXMgZm9yIENNU21zIDEuOSsgKG5lZWRzIENNU21zIDEuOSBtaW5pbXVtIG5vdyk8L3A+PC9saT4KCQkJCTwvdWw+CgkJCTwvbGk+CgkJCTxsaT48cD5GZWF0dXJlczo8L3A+CgkJCQk8dWw+CgkJCQkJPGxpPjxwPi0gYWRkZWQgc3VwcG9ydCBvZiB7Y29udGVudF9tb2R1bGV9IHRhZzwvcD48L2xpPgoJCQkJCTxsaT48cD4tIGFkZGVkIHBhcmFtIG5vX2NvbGxhcHNlPC9wPjwvbGk+CgkJCQk8L3VsPgoJCQk8L2xpPgoJCTwvdWw+Cgk8L2xpPgoJPGxpPjxwPjxzdHJvbmc+MC42LjIgKE5vdiAyMDEwKTo8L3N0cm9uZz48L3A+CgkJPHVsPgoJCQk8bGk+PHA+QnVnZml4ZXM6PC9wPgoJCQkJPHVsPgoJCQkJCTxsaT48cD4tIG1pbm9yIGJ1Z2ZpeCAoc2hvd2VkIHRhYnMgb2YgcHJldmlvdXMgdGVtcGxhdGUgd2hlbiB0ZW1wbGF0ZSB3YXMgY2hhbmdlZCk8L3A+PC9saT4KCQkJCTwvdWw+CgkJCTwvbGk+CgkJPC91bD4KCTwvbGk+Cgk8bGk+PHA+PHN0cm9uZz4wLjYuMSAoTm92IDIwMTApOjwvc3Ryb25nPjwvcD4KCQk8dWw+CgkJCTxsaT48cD5CdWdmaXhlczo8L3A+CgkJCQk8dWw+CgkJCQkJPGxpPjxwPi0gc2V2ZXJhbCBidWdmaXhlczwvcD48L2xpPgoJCQkJCTxsaT48cD4tIGNvbXBhdGliaWxpdHkgYnVnZml4ZXMgZm9yIENNU21zIDEuOTwvcD48L2xpPgoJCQkJPC91bD4KCQkJPC9saT4KCQkJPGxpPjxwPkZlYXR1cmVzOjwvcD4KCQkJCTx1bD4KCQkJCQk8bGk+PHA+LSBhZGRlZCBibG9ja190eXBlIG11bHRpX2lucHV0PC9wPjwvbGk+CgkJCQk8L3VsPgoJCQk8L2xpPgoJCTwvdWw+Cgk8L2xpPgoJPGxpPjxwPjxzdHJvbmc+MC42IChPY3QgMjAxMCk6PC9zdHJvbmc+PC9wPgoJCTx1bD4KCQkJPGxpPjxwPkJ1Z2ZpeGVzOjwvcD4KCQkJCTx1bD4KCQkJCQk8bGk+PHA+LSBzZXZlcmFsIGJ1Z2ZpeGVzPC9wPjwvbGk+CgkJCQk8L3VsPgoJCQk8L2xpPgoJCQk8bGk+PHA+RmVhdHVyZXM6PC9wPgoJCQkJPHVsPgoJCQkJCTxsaT48cD4tIGFkZGVkIHBhcmFtIGJsb2NrX2dyb3VwPC9wPjwvbGk+CgkJCQk8L3VsPgoJCQk8L2xpPgoJCQk8bGk+PHA+TWlzYzo8L3A+CgkJCQk8dWw+CgkJCQkJPGxpPjxwPi0gUmVtb3ZlZCBmaWxlIHBpY2tlciAoYW5kIGFzc29jaWF0ZWQgYmxvY2tfdHlwZXMgaW1hZ2UvZmlsZSkgLSB1c2UgR0JGaWxlUGlja2VyIGluc3RlYWQuPC9wPjwvbGk+CgkJCQk8L3VsPgoJCQk8L2xpPgoJCTwvdWw+Cgk8L2xpPgoJPGxpPjxwPjxzdHJvbmc+MC41IChTZXB0IDIwMTApOjwvc3Ryb25nPjwvcD4KCQk8dWw+CgkJCTxsaT48cD5CdWdmaXhlczo8L3A+CgkJCQk8dWw+CgkJCQkJPGxpPjxwPmZpeGVkIGJ1ZyBpdGVtICM1MjkyIChtZW1vcnkgaXNzdWUpPC9wPjwvbGk+CgkJCQkJPGxpPjxwPmZpeGVkIGJ1ZyBpdGVtICM1MjU0IChkaXNhYmxlIHd5c2l3eWcgbm90IHdvcmtpbmcpPC9wPjwvbGk+CgkJCQkJPGxpPjxwPmZpeGVkIGJ1ZyBpdGVtICM1MzEwICh1cmxvbmx5IG5vdCB3b3JraW5nKTwvcD48L2xpPgoJCQkJCTxsaT48cD5maXhlZCBidWcgaXRlbSAjNTMxMSAoaW1hZ2UgcGF0aHMgbm90IHN0b3JlZCAnY29ycmVjdGx5Jyk8L3A+PC9saT4KCQkJCTwvdWw+CgkJCTwvbGk+CgkJCTxsaT48cD5GZWF0dXJlczo8L3A+CgkJCQk8dWw+CgkJCQkJPGxpPjxwPmFkZGVkIGZlYXR1cmUgcmVxdWVzdCAjNTI2MSAoQWRkIHNvcnQgdG8gaW1hZ2UgdHlwZSAtIG5vdGljZSB0aGUgY2hhbmdlIG9mIHBhcmFtIGZpbHRlcik8L3A+PC9saT4KCQkJCQk8bGk+PHA+YWRkZWQgcGFyYW1zIGV4Y2x1ZGVfcHJlZml4LCBpbmNsdWRlX3ByZWZpeCwgZXhjbHVkZV9zdWZpeCwgaW5jbHVkZV9zdWZpeDwvcD48L2xpPgoJCQkJCTxsaT48cD5hZGRlZCBmZWF0dXJlIHJlcXVlc3QgIzUyNTMgKFRleHQgaW5wdXQgdG8gZGVmaW5lIGFkZCBwYXJhbXMgdG8gcmVkaXJlY3QgZnVuY3Rpb24pPC9wPjwvbGk+CgkJCQkJPGxpPjxwPmFkZGVkIGZlYXR1cmUgcmVxdWVzdCAjNTI0MCAoRGVmYXVsdCB2YWx1ZXMgb2YgQWR2YW5jZWRDb250ZW50IHBhZ2Ugb3B0aW9ucyk8L3A+PC9saT4KCQkJCQk8bGk+PHA+YWRkZWQgZmVhdHVyZSByZXF1ZXN0ICM1MjQxIChwdXQgRmV1QWNjZXNzIGluIEJsb2NrdGFiKTwvcD48L2xpPgoJCQkJPC91bD4KCQkJPC9saT4KCQkJPGxpPjxwPk1pc2M6PC9wPgoJCQkJPHVsPgoJCQkJCTxsaT48cD4tIEFkdmFuY2VkQ29udGVudCBvcHRpb25zIGFyZSBzaG93biBpbiBzZXBhcmF0ZSB0YWI8L3A+PC9saT4KCQkJCQk8bGk+PHA+LSBBZGRlZCBuZXcgcGVybWlzc2lvbiB0byBtYW5hZ2UgdGhlIEFkdmFuY2VkQ29udGVudCBvcHRpb25zIHRhYjwvcD48L2xpPgoJCQkJCTxsaT48cD4tIHJlbW92ZWQgcGFyYW0gZmlsdGVyICh1c2UgbmV3IHBhcmFtcyBpbnN0ZWFkKTwvcD48L2xpPgoJCQkJCTxsaT48cD4tIHBhdGggdG8gZmlsZXMgYXJlIHN0b3JlZCByZWxhdGl2ZSB0byB0aGUgdXBsb2FkcyBkaXI8L3A+PC9saT4KCQkJCQk8bGk+PHA+LSBwYXJhbSBkaXIgb2YgYmxvY2sgdHlwZSBmaWxlL2ltYWdlIG5lZWRzIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSB1cGxvYWRzIGRpciBvbmx5ICh0aGVyZSBpcyBubyBpbWFnZSB1cGxvYWRzIGRpciB1c2VkIGFueW1vcmUpPC9wPjwvbGk+CgkJCQk8L3VsPgoJCQk8L2xpPgoJCTwvdWw+Cgk8L2xpPgoJPGxpPjxwPjxzdHJvbmc+MC40LjEgKEF1Z3VzdCAyMDEwKTo8L3N0cm9uZz48L3A+CgkJPHVsPgoJCQk8bGk+PHA+QnVnZml4ZXM6PC9wPgoJCQkJPHVsPgoJCQkJCTxsaT48cD4tICM1MTUxOiBmaXhlZCBzdHlsZXNoZWV0IGlzc3VlIHdpdGggZXhwYW5kL2NvbGxhcHNlIGJ1dHRvbnMgb2YgY29udGVudCBibG9ja3MgaW4gSUUvU2FmYXJpLjwvcD48L2xpPgoJCQkJCTxsaT48cD4tICM1MTYyOiBQSFAgd2FybmluZ3MgaWYgYmFja2VuZCB1c2VycyB3aXRob3V0IHBlcm1pc3Npb24gIk1hbmFnZSBBbGwgQWR2YW5jZWRDb250ZW50IEJsb2NrcyIgb3BlbiBhbiBhZHZhbmNlZCBjb250ZW50IHBhZ2UgYW5kIG11bHRpcGxlIGNvbnRlbnQgYmxvY2tzIG9mIHNhbWUgbmFtZSB3ZXJlIHVzZWQgaW4gdGVtcGxhdGUuPC9wPjwvbGk+CgkJCQkJPGxpPjxwPi0gZml4ZWQgYnVnIHdoZXJlIGV4dHJhIGZpZWxkcyBjb3VsZCBub3QgYmUgdXBkYXRlZC48L3A+PC9saT4KCQkJCQk8bGk+PHA+LSBmaXhlZCBidWcgd2hlcmUgZmV1IGFjY2VzcyBkaWQgbm90IHdvcmsuPC9wPjwvbGk+CgkJCQk8L3VsPgoJCQk8L2xpPgoJCQk8bGk+PHA+RmVhdHVyZXM6PC9wPgoJCQkJPHVsPgoJCQkJCTxsaT48cD4tIGFkZGVkIHBhcmFtICJkZWxldGUiIHRvIGxldCB1c2VycyBkZWxldGUgZmlsZXMgZXZlbiBpZiBubyBwZXJtaXNzaW9uICJNb2RpZnkgRmlsZXMiPC9wPjwvbGk+CgkJCQkJPGxpPjxwPi0gYWRkZWQgcGFyYW0gImNyZWF0ZV9kaXJzIiB0byBsZXQgdXNlcnMgY3JlYXRlX2RpcnMgZXZlbiBpZiBubyBwZXJtaXNzaW9uICJNb2RpZnkgRmlsZXMiPC9wPjwvbGk+CgkJCQkJPGxpPjxwPi0gYWRkZWQgbmV3IGJsb2NrdHlwZSAibm90ZSIgdG8gY3JlYXRlIHNvbWUgc2luZ2xlIG5vdGVzIGZvciB5b3VyIGVkaXRvcnM8L3A+PC9saT4KCQkJCTwvdWw+CgkJCTwvbGk+CgkJCTxsaT48cD5NaXNjOjwvcD4KCQkJCTx1bD4KCQkJCQk8bGk+PHA+LSByZW1vdmVkIGRlcGVuZGVuY3kgb2YgRmlsZU1hbmFnZXI8L3A+PC9saT4KCQkJCQk8bGk+PHA+LSBibG9jayBvZiB0eXBlIGZpbGUgb3IgaW1hZ2Ugc3RvcmVzIHJlbGF0aXZlIHVybCBub3c8L3A+PC9saT4KCQkJCQk8bGk+PHA+LSBibG9jayB0eXBlIGltYWdlIHNob3dzIHRodW1ibmFpbCBpbiBiYWNrZW5kIHByZXZpZXcgaW5zdGVhZCBvZiBmdWxsIGltYWdlPC9wPjwvbGk+CgkJCQk8L3VsPgoJCQk8L2xpPgoJCTwvdWw+Cgk8L2xpPgoJPGxpPjxwPjxzdHJvbmc+MC40IChKdWx5IDIwMTApOjwvc3Ryb25nPjwvcD4KCQk8dWw+CgkJCTxsaT48cD5JbXBvcnRhbnQgbm90aWNlOjwvcD4KCQkJCTx1bD4KCQkJCQk8bGk+PHA+LSBjaGFuZ2VkIHBhcmFtICJ0eXBlIiB0byAiYmxvY2tfdHlwZSIgc2luY2UgaXQgaW50ZXJmZXJlcyB3aXRoIHtjb250ZW50X21vZHVsZX0gdGFnPC9wPjwvbGk+CgkJCQk8L3VsPgoJCQk8L2xpPgoJCQk8bGk+PHA+QnVnZml4ZXM6PC9wPgoJCQkJPHVsPgoJCQkJCTxsaT48cD4tICM1MTAxOiBwYWdlX3RhYiAib3B0aW9ucyIgd2FzIHNob3duIHRvIHVzZXJzIHdpdGggbm8gcGVybWlzc2lvbiB0byBlZGl0IHBhZ2Ugb3B0aW9ucyBpZiBhIGNvbnRlbnQgYmxvY2sgd2FzIGFzc2lnbmVkIHRvIHRoYXQgdGFiLjwvcD48L2xpPgoJCQkJCTxsaT48cD4tICM1MDk3OiBsaW5rIHRvIG1pc3NpbmcgY3NzIHJlbW92ZWQ8L3A+PC9saT4KCQkJCQk8bGk+PHA+LSBmaXhlZCBtaW1lLXR5cGUgaXNzdWUgKGFkZGVkIHByZWZlcmVuY2UgdG8gdG9nZ2xlIG1pbWUtdHlwZSB1c2FnZSBvbi9vZmYpPC9wPjwvbGk+CgkJCQkJPGxpPjxwPi0gZml4ZWQgcGF0aCBpc3N1ZSB3aGVyZSB0aHVtYm5haWxzIHdlcmUgbm90IHNob3duPC9wPjwvbGk+CgkJCQkJPGxpPjxwPi0gZml4ZWQgY29tcGF0aWJpbGl0eSB3aXRoIENNU21zIDEuODwvcD48L2xpPgoJCQkJCTxsaT48cD4tIG90aGVyIG1pbm9yIGJ1Z2ZpeGVzPC9wPjwvbGk+CgkJCQk8L3VsPgoJCQk8L2xpPgoJCQk8bGk+PHA+RmVhdHVyZXM6PC9wPgoJCQkJPHVsPgoJCQkJCTxsaT48cD4tIGFkZGVkIE1MRSBzdXBwb3J0PC9wPjwvbGk+CgkJCQkJPGxpPjxwPi0gYWRkZWQgcGFyYW0gInNob3dfY2xvY2siIHRvIGVuYWJsZS9kaXNhYmxlIHRoZSB0aW1lIGRyb3Bkb3duIG9mIGJsb2NrdHlwZXMgImRhdGUiIGluIGJhY2tlbmQ8L3A+PC9saT4KCQkJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbSAiZGF0ZV9mb3JtYXQiIHRvIGZvcm1hdCB0aW1lc3RhbXAgb2YgYmxvY2t0eXBlcyAiZGF0ZSIgaW4gZnJvbnRlbmQ8L3A+PC9saT4KCQkJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbSAiZGVzY3JpcHRpb24iPC9wPjwvbGk+CgkJCQkJPGxpPjxwPi0gYWRkZWQgYnVsayBmdW5jdGlvbiB0byBzZXQgYWxsIHBhZ2VzIHRvIEFkdmFuY2VkQ29udGVudDwvcD48L2xpPgoJCQkJCTxsaT48cD4tIGFkZGVkIGNvbXBhdGliaWxpdHkgd2l0aCB7Y29udGVudF9tb2R1bGV9IHRhZzwvcD48L2xpPgoJCQkJPC91bD4KCQkJPC9saT4KCQk8L3VsPgoJPC9saT4KCTxsaT48cD48c3Ryb25nPjAuMy40IChKdW5lIDIwMTApOjwvc3Ryb25nPjwvcD4KCQk8dWw+CgkJCTxsaT48cD5CdWdmaXhlczo8L3A+CgkJCQk8dWw+CgkJCQkJPGxpPjxwPi0gIzUwNDU6IFdoZW4gc3dpdGNoaW5nIGZyb20gQ29udGVudCAtPiBBZHZhbmNlZCBDb250ZW50IGxvdHMgb2YgUEhQIGVycm9yczwvcD48L2xpPgoJCQkJCTxsaT48cD4tICM1MDU2OiBwYWdlX3RhYnMgbm90IHdvcmtpbmcgZm9yIHVzZXJzIHdpdGhvdXQgcGVybWlzc2lvbiAiTWFuYWdlIEFsbCBDb250ZW50IjwvcD48L2xpPgoJCQkJCTxsaT48cD4tICM1MDczOiBpbmNvcnJlY3QgZGlzcGxheSBvZiBmaWxlcyB3aGVuIG9wZW5pbmcgZmlsZXBpY2tlcjwvcD48L2xpPgoJCQkJCTxsaT48cD4tIGZpeGVkIG1pbm9yIGJ1ZyB3aGVyZSB0aGUgb3B0aW9uICJhbGxvd19ub25lIiBvZiBjb250ZW50IGJsb2NrcyBvZiB0eXBlIGltYWdlL2ZpbGUgd2FzIG5vdCBzaG93biB3aGVuIHRlbXBsYXRlIGhhcyBiZWVuIGVkaXRlZDwvcD48L2xpPgoJCQkJPC91bD4KCQkJPC9saT4KCQkJPGxpPjxwPkZlYXR1cmVzOjwvcD4KCQkJCTx1bD4KCQkJCQk8bGk+PHA+LSBhZGRlZCBmaWxlbWFuYWdlbWVudCBhbmQgdXBsb2FkIGZ1bmN0aW9ucyB0byBjb250ZW50IGJsb2NrcyBvZiB0eXBlIGltYWdlL2ZpbGU8L3A+PC9saT4KCQkJCQk8bGk+PHA+LSBhZGRlZCBicmVhZGN1bWJzIHRvIGZpbGVwaWNrZXI8L3A+PC9saT4KCQkJCQk8bGk+PHA+LSBhZG1pbnMgbWF5IGJyb3dzZSB0aGUgZW50aXJlIGRpciB0cmVlIGluIGZpbGVwaWNrZXIgZmlsZSBicm93c2VyIHJlZ2FyZGxlc3Mgb2YgdGVtcGxhdGUgcGFyYW1zPC9wPjwvbGk+CgkJCQkJPGxpPjxwPi0gYWRkZWQgbWltZSB0eXBlIGNoZWNraW5nIHRvIGdldCBmaWxlIHR5cGU8L3A+PC9saT4KCQkJCQk8bGk+PHA+LSBhZGRlZCByYXd1cmxlbmNvZGUgaW4gc3JjIGF0dHJpYnMgdG8gZGlzcGxheSBpbWFnZXMgd2l0aCB3ZWlyZCBmaWxlbmFtZXMuPC9wPjwvbGk+CgkJCQk8L3VsPgoJCQk8L2xpPgoJCQk8bGk+PHA+bWlzY2VsbGFuZW91czo8L3A+CgkJCQk8dWw+CgkJCQkJPGxpPjxwPi0gcmVtb3ZlZCBPT1Agc3R1ZmYgKHByaXZhdGUvcHVibGljL3Byb3RlY3RlZCkgdG8gZ2FpbiBtb3JlIGNvbXBhdGliaWxpdHkgd2l0aCBQSFA0PC9wPjwvbGk+CgkJCQkJPGxpPjxwPi0gY2hhbmdlZCBhamF4IGZ1bmN0aW9ucyB0byByZXR1cm4geG1sIHZhbHVlczwvcD48L2xpPgoJCQkJCTxsaT48cD4tIHJlbW92ZWQgdXNhZ2Ugb2YgSW1hZ2VNYW5hZ2VyIG9uY2UgYW5kIGZvciBhbGwuIChjYXVzZWQgb25seSB0cm91YmxlKTwvcD48L2xpPgoJCQkJPC91bD4KCQkJPC9saT4KCQk8L3VsPgoJPC9saT4KCTxsaT48cD48c3Ryb25nPjAuMy4zIChKdW5lIDIwMTApOjwvc3Ryb25nPjwvcD4KCTx1bD4KCQk8bGk+PHA+QnVnZml4ZXM6PC9wPgoJCQk8dWw+CgkJCQk8bGk+PHA+LSBhbGlhcyB3YXMgbm90IGFsd2F5cyBjb252ZXJ0ZWQgcHJvcGVybHk8L3A+PC9saT4KCQkJCTxsaT48cD4tIHVuc3VibWl0dGVkIGNvbnRlbnQgZ290IGxvc3QgaWYgc3dpdGNoaW5nIGZyb20gQ29udGVudCB0byBBZHZhbmNlZENvbnRlbnQ8L3A+PC9saT4KCQkJPC91bD4KCQk8L2xpPgoJCTxsaT48cD5GZWF0dXJlczo8L3A+CgkJCTx1bD4KCQkJCTxsaT48cD4tIGFkZGVkIHN0YXJ0L2VuZCBkYXRlPC9wPjwvbGk+CgkJCQk8bGk+PHA+LSByZW1vdmVkIHRpbWVwaWNrZXI7IHJlcGxhY2VkIGJ5IGEgc2ltcGxlIGRyb3Bkb3duPC9wPjwvbGk+CgkJCQk8bGk+PHA+LSBjb21wYXRpYmlsaXR5IHdpdGgge2NvbnRlbnRfaW1hZ2V9PC9wPjwvbGk+CgkJCTwvdWw+CgkJPC9saT4KCTwvdWw+Cgk8bGk+PHA+PHN0cm9uZz4wLjMuMiAoSnVuZSAyMDEwKTo8L3N0cm9uZz48L3A+CgkJPHVsPgoJCQk8bGk+PHA+LSBmaXhlZCBidWcgd2hlcmUgY2hhbmdpbmcgYmFjayB0byBkZWZhdWx0IGNvbnRlbnQgdHlwZSBvciBjaGFuZ2luZyB0ZW1wbGF0ZSBjYXVzZWQgZmF0YWwgZXJyb3JzPC9wPjwvbGk+CgkJCTxsaT48cD4tIGZpeGVkIGEgYnVnIHdpdGggc21hcnR5IHByb2Nlc3Npbmcgd2hlbiBzYXZpbmcgYSBwYWdlPC9wPjwvbGk+CgkJCTxsaT48cD4tIGZpeGVkIGEgYnVnIHdpdGggcHJldmlldyB0YWI8L3A+PC9saT4KCQkJPGxpPjxwPi0gcmUtYWRkZWQgZXhwYW5kL2NvbGxhcHNlIGJ1dHRvbiB0byB0b2dnbGUgY29udGVudCBibG9ja3MgaW4gYmFja2VuZDwvcD48L2xpPgoJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbXMgZWRpdG9yX2dyb3Vwcy9lZGl0b3JfdXNlcnMgdG8gc3BlY2lmeSBjZXJ0YWluIHVzZXJzL2dyb3VwcyB0aGF0IGFyZSBhbGxvd2VkIHRvIGVkaXQgY2VydGFpbiBibG9ja3M8L3A+PC9saT4KCQkJPGxpPjxwPi0gcmVtb3ZlZCBwYXJhbXMgc2VsZWN0ZWQvY2hlY2tlZDsgdXNlIHBhcmFtIGRlZmF1bHQgaW5zdGVhZDwvcD48L2xpPgoJCQk8bGk+PHA+LSBibG9jayBpZHMgd2lsbCBiZSBjb252ZXJ0ZWQgZnJvbSBibG9jayBuYW1lIHVzaW5nIGNvcmUgZnVuY3Rpb24gbXVuZ2Vfc3RyaW5nX3RvX3VybCAodG8gcmVtb3ZlIHNwZWNpYWwgY2hhcnMsIHdoaXRlc3BhY2VzLCB1bWxhdXRzIGV0Yy4pPC9wPjwvbGk+CgkJCTxsaT48cD4tIGZpeGVkIGJ1ZyBvZiBibG9ja3R5cGUgZHJvcGRvd24vc2VsZWN0X211bHRpcGxlIHdoZXJlIGZpcnN0IGl0ZW0gaGFkIGFuIGVtcHR5IGxhYmVsIGlmIG9ubHkgdGhlIHBhcmFtICJ2YWx1ZXMiIGlzIHVzZWQ8L3A+PC9saT4KCQkJPGxpPjxwPi0gYWRkZWQgc29tZSB0ZW1wbGF0ZSB2YXJzIG9mIHRoZSBmcm9udGVuZCB0byBiZSBhbHNvIGFjY2Vzc2libGUgaW4gYmFja2VuZCAoZS5nLjogJHBhZ2VfYWxpYXMpPC9wPjwvbGk+CgkJCTxsaT48cD4tIGFkZGVkIHBhcmFtICJhbGxvd19ub25lIiB0byBhbGwgY29udGVudCBibG9jayB0eXBlcyB0byBzcGVjaWZ5IGlmIHRoZSBwcmVkZWZpbmVkIGRlZmF1bHQgdmFsdWUgd2lsbCBiZSB1c2VkIGlmIG5vIHZhbHVlIGlzIGVudGVyZWQ8L3A+PC9saT4KCQkJPGxpPjxwPi0gZml4ZWQgYnVnIHdoZXJlIGVtcHR5IHZhbHVlcyB3ZXJlIG5ldmVyIGJlIHN0b3JlZDwvcD48L2xpPgoJCQk8bGk+PHA+LSBmaXhlZCBidWcgd2hlcmUgZGVmYXVsdCB2YWx1ZSBpbiBmcm9udGVuZCB3YXMgaWdub3JlZCBpZiB0aGUgImFsbG93X25vbmUiIHBhcmFtIHdhcyBjaGFuZ2VkIGFmdGVyIGFuIGVtcHR5IHZhbHVlIGhhcyBiZWVuIHN0b3JlZDwvcD48L2xpPgoJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbSAic29ydGFibGVfaXRlbXMiIHRvIGNyZWF0ZSBhIHNvcnRhYmxlIG11bHRpcGxlIHNlbGVjdCBsaXN0IChzZWxlY3QgbGlzdCB3aWxsIHJlc3VsdCBpbiBhIHRhYmxlIHdpdGggY2hlY2tib3hlczsgb25seSBvcmRlciBvZiBzZWxlY3RlZCBpdGVtcyB3aWxsIGJlIHN0b3JlZCBhbmQgc2hvd2VkIGF0IHRoZSB0b3Agb2YgdGhlIGxpc3Q7IHVuc2VsZWN0ZWQgaXRlbXMgd2lsbCBiZSBhcHBlbmRlZCBpbiB0aGF0IG9yZGVyIHRoZXkgYXJlIHBsYWNlZCBpbiB0aGUgdGVtcGxhdGUpPC9wPjwvbGk+CgkJPC91bD4KCTwvbGk+Cgk8bGk+PHA+PHN0cm9uZz4wLjMuMSAoTWF5IDIwMTApOjwvc3Ryb25nPjwvcD4KCQk8dWw+CgkJCTxsaT48cD4tIHJlbW92ZWQgdGhlIHJlb3JkZXJpbmcgc3R1ZmYgZm9yIG5vdyAoY2F1c2VzIHRyb3VibGUgYXQgdGhpcyB0aW1lKTwvcD48L2xpPgoJCQk8bGk+PHA+LSByZW1vdmVkIHRoZSBkYiBzdHVmZiAocGFyYW1zIG9mIGNvbnRlbnQgYmxvY2tzIHRoYXQgYXJlIGRlZmluZWQgaW4gdGVtcGxhdGUgd29uJ3QgYmUgc2F2ZWQgaW4gbW9kdWxlIGRiIHRhYmxlIGFueW1vcmUgLT4gaG9wZWZ1bGx5IHNwZWVkIHVwIGxvYWRpbmcgdGltZSk8L3A+PC9saT4KCQkJPGxpPjxwPi0gZml4ZWQgYSBidWcgd2l0aCBkdXBsaWNhdGUgY29udGVudCBibG9ja3M8L3A+PC9saT4KCQk8L3VsPgoJPC9saT4KCTxsaT4KCQk8cD48c3Ryb25nPkFkdmFuY2VkQ29udGVudCAwLjMgKE1heSAyMDEwKTo8L3N0cm9uZz48L3A+CgkJPHVsPgoJCQk8bGk+PHA+LSByZXdyaXRlIGNvZGU8L3A+PC9saT4KCQkJPGxpPjxwPi0gYnVnZml4ZXM8L3A+PC9saT4KCQkJPGxpPjxwPi0gcmVuYW1lZCB0byBBZHZhbmNlZENvbnRlbnQ8L3A+PC9saT4KCQkJPGxpPjxwPi0gdXNpbmcgc2VwYXJhdGUgbW9kdWxlIHRlbXBsYXRlIG5vdyB0byBkc3BsYXkgY29udGVudCBibG9ja3M8L3A+PC9saT4KCQkJPGxpPjxwPi0gcmVtb3ZlZCBwYWdlIGFsaWFzIGluaGVyaXRhbmNlPC9wPjwvbGk+CgkJPC91bD4KCTwvbGk+CjwvdWw+Cjx1bD4KCTxsaT48cD48c3Ryb25nPlhDb250ZW50IEJFVEEgMyAoQXByaWwgMjAxMCAtIGRpc2NvbnRpbnVlZCk6PC9zdHJvbmc+PC9wPgoJCTx1bD4KCQkJPGxpPjxwPi0gTWFqb3IgQnVnZml4IChtaXNzaW5nICI7IiBhbmQgc3RyYW5nZSBpbnZpc2libGUgaW52YWxpZCBjaGFycyk8L3A+PC9saT4KCQk8L3VsPgoJPC9saT4KCTxsaT48cD48c3Ryb25nPlhDb250ZW50IEJFVEEgMiAoQXByaWwgMjAxMCAtIGRpc2NvbnRpbnVlZCk6PC9zdHJvbmc+PC9wPgoJCTx1bD4KCQkJPGxpPjxwPi0gZml4ZWQgYSBidWcgd2l0aCBwYXJhbSAiZGVsaW1pdGVyIjwvcD48L2xpPgoJCQk8bGk+PHA+LSBmaXhlZCBhIGJ1ZyB3aXRoIHNtYXJ0eSBwcm9jZXNzaW5nPC9wPjwvbGk+CgkJCTxsaT48cD4tIGFkZGVkIGluaGVyaXRhbmNlIG9mICJTaG93IGxvZ2luIGZvcm0iPC9wPjwvbGk+CgkJCTxsaT48cD4tIGFkZGVkIGluaGVyaXRhbmNlIG9mIHBhZ2UgYWxpYXMgdG8gYWRkIGl0IGFzIHByZWZmaXg7IHNvIGlmIHlvdSBoYXZlIGEgcGFnZSBjYWxsZWQgIm1lbWJlcnMiIGFuZCBzZWxlY3QgZm9yIGVhY2ggY2hpbGQgcGFnZSAiaW5oZXJpdCBwYWdlIGFsaWFzIiBhbGwgY2hpbGQgcGFnZXMgYWxpYXNlcyB3aWxsIHN0YXJ0IHdpdGggIm1lbWJlcnNfIjsgbWFrZXMgZmlsdGVyaW5nIG9mIG1lbnUgZW50cmllcyB3aXRoIE1lbnVNYW5hZ2VyIHBhcmFtICJleGNsdWRlcHJlZmZpeCIgb3IgImluY2x1ZGVwcmVmZml4IiBlYXNpZXIuPC9wPjwvbGk+CgkJCTxsaT48cD4tIG1pbm9yIGJ1Z2ZpeGVzPC9wPjwvbGk+IAoJCTwvdWw+Cgk8L2xpPgoJPGxpPgoJCTxwPjxzdHJvbmc+WENvbnRlbnQgQkVUQSAoQXByaWwgMjAxMCk6PC9zdHJvbmc+IGluaXRpYWwgcmVsZWFzZTwvcD4KCQk8dWw+CgkJCTxsaT48cD4tIGNvbnZlcnRlZCB0aGUgc2luZ2xlIGZpbGUgaW50byBhIG1vZHVsZTwvcD48L2xpPgoJCQk8bGk+PHA+LSByZW5hbWVkIHBhcmFtczsgc2VlIG1vZHVsZSBoZWxwIGZvciBtb3JlIGRldGFpbHM8L3A+PC9saT4KCQk8L3VsPgoJPC9saT4KPC91bD4KPHA+PHN0cm9uZz5TaW5nbGUgZmlsZSByZWxlYXNlcyAoZGlzY29udGludWVkKTwvc3Ryb25nPi4uLjwvcD4KPHVsPgoJPGxpPgoJCTxwPjxzdHJvbmc+MS40IChNYXJjaCAyMDEwKTo8L3N0cm9uZz48L3A+CgkJPHVsPgoJCQk8bGk+PHA+LSBjbGVhbnVwIGNvZGUgLSAoTmFOKTwvcD48L2xpPgoJCQk8bGk+PHA+LSBtaW5vciBidWdmaXhlcyAtIChOYU4pPC9wPjwvbGk+CgkJCTxsaT48cD4tIGFkZGVkIHJlZGlyZWN0IHBhZ2UgaWYgZmV1IGlzIG5vdCBsb2dnZWQgaW4gLSAoTmFOKTwvcD48L2xpPgoJCQk8bGk+PHA+LSBhZGRlZCBpbmhlcml0YW5jZSBvZiBmZXVfYWNjZXNzIGFuZCByZWRpcmVjdF9wYWdlIC0gKE5hTik8L3A+PC9saT4KCQkJPGxpPjxwPi0gYWRkZWQgcGFyYW0gZmV1X2FjY2VzcyAtIChOYU4pPC9wPjwvbGk+CgkJCTxsaT48cD4tIGFkZGVkIHBhcmFtIGZldV9hY3Rpb24gLSAoTmFOKTwvcD48L2xpPgoJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbSByZWRpcmVjdF9wYWdlIC0gKE5hTik8L3A+PC9saT4KCQkJPGxpPjxwPi0gYWRkZWQgcGFyYW0gYmxvY2tfb25seSAtIChOYU4pPC9wPjwvbGk+CgkJCTxsaT48cD4tIGFkZGVkIHNtYXJ0eSBsb2dpYyBpbiBiYWNrZW5kIC0gKEplcmVteUJhc3MpPC9wPjwvbGk+CgkJCTxsaT48cD4tIGFkZGVkIHBhcmFtIHN0eWxlIC0gKEplcmVteUJhc3MpPC9wPjwvbGk+CgkJCTxsaT48cD4tIGFkZGVkIHBhcmFtIGZpbHRlciAoZmlsdGVyaW5nIGltYWdlcyBpbiBiYWNrZW5kKSAtIChKZXJlbXlCYXNzKTwvcD48L2xpPgoJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbSBJbWdNb2RlIChkcm9wZG93biBvciBJbWFnZU1hbmFnZXIpIC0gKEplcmVteUJhc3MpPC9wPjwvbGk+CgkJCTxsaT48cD4tIGFkZGVkIHBhcmFtIHNtYXJ0eU9uIChmb3IgcHJvY2Vzc2luZyBzbWFydHkgdmFycyBvZiB0aGUgdGVtcGF0ZSBpbiBiYWNrZW5kKSAtIChKZXJlbXlCYXNzKTwvcD48L2xpPgoJCTwvdWw+Cgk8L2xpPgoJPGxpPjxwPjxzdHJvbmc+MS4zIChBcHJpbCAyMDA5KTo8L3N0cm9uZz48L3A+CgkJPHVsPgoJCQk8bGk+PHA+LSBDTVNtcyAxLjYuKiByZWFkeSAtIChOYU4pPC9wPjwvbGk+CgkJCTxsaT48cD4tIGFkZGVkIGZldSBhY2Nlc3Mgb3B0aW9uIC0gKE5hTik8L3A+PC9saT4KCQk8L3VsPgoJPC9saT4KCTxsaT4KCQk8cD48c3Ryb25nPjEuMiAoTWFyY2ggMjAwOSk6PC9zdHJvbmc+IGluaXRpYWwgcmVsZWFzZTwvcD4KCQk8dWw+CgkJCTxsaT48cD4tIEEgc2luZ2xlIGZpbGUgQ29udGVudDIuaW5jLnBocCB0aGF0IG5lZWRzIHRvIGJlIHBhY2VkIGluIGxpYi9jbGFzc2VzL2NvbnRlbnR0eXBlcy48L3A+PC9saT4KCQkJPGxpPjxwPi0gbGF5b3V0L29wdGlvbnMgb2YgYmFja2VuZCBwYW5lbCBjYW4gYmUgY29udHJvbGVkIGJ5IGFkZGl0aW9uYWwgc21hcnR5IHBhcmFtcyBpbiB0aGUgdGVtcGxhdGU7IGludGVncmF0ZWQgdGhlIHtjb250ZW50X2ltYWdlfSB0YWcgLSAobW9kIGJ5IE5hTik8L3A+PC9saT4KCQk8L3VsPgoJPC9saT4KPC91bD4KPGJyIC8+PGJyIC8+]]></about>
	<description><![CDATA[--Add Me - module:AdvancedContent string:admindescription--]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.htaccess</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PEZpbGVzICouKj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBvcmRlciBkZW55LGFsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgZGVueSBmcm9tIGFsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8L0ZpbGVzPgo=]]></data>
	</file>
	<file>
	  <filename>/action.addMultiInput.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIE1vZHVsZSA6IEFkdmFuY2VkQ29udGVudCAoYykgMjAxMCBieSBHZW9yZyBCdXNjaCAoZ2VvcmcuYnVzY2hAZ214Lm5ldCkKIyAgICAgICAgICBhIGNvbnRlbnQgbWFuYWdlbWVudCB0b29sIGZvciBDTVMgTWFkZSBTaW1wbGUKIyAgICAgICAgICBUaGUgcHJvamVjdHMgaG9tZXBhZ2UgaXMgaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9jb250ZW50Mi8KIyAgICAgICAgICBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDQtMjAxMCBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgICAgICAgICAgVGhlIHByb2plY3RzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgVmVyc2lvbjogMC43LjEKIyBGaWxlICAgOiBhY3Rpb24uYWRkTXVsdGlJbnB1dC5waHAKIyBQdXJwb3NlOiBhZGRzIGEgbXVsdGkgaW5wdXQgYmxvY2t0eXBlCiMgTGljZW5zZTogR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmlmKCFpc19vYmplY3QoY21zbXMoKSkpIGV4aXQ7CgppZighJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTWFuYWdlIEFkdmFuY2VkQ29udGVudCBNdWx0aUlucHV0JykpCnsKCXJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsJHJldHVybmlkLCAkdGhpcy0+TGFuZygnZXJyb3JfcGVybWlzc2lvbnMnKSk7Cn0KCmlmKGlzc2V0KCRwYXJhbXNbJ2NhbmNlbCddKSkgCnsKCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIGFycmF5KCdhY3RpdmVfdGFiJz0+J211bHRpX2lucHV0JykpOwp9CgokZXJyb3IgPSBmYWxzZTsKJGVycm9ybWVzc2FnZSA9ICcnOwoKJGlucHV0X2lkID0gJyc7CmlmKGlzc2V0KCRwYXJhbXNbJ2lucHV0X2lkJ10pICYmICFlbXB0eSgkcGFyYW1zWydpbnB1dF9pZCddKSkgCnsKCSRpbnB1dF9pZCA9IHByZWdfcmVwbGFjZSgnLy0rLycsJ18nLG11bmdlX3N0cmluZ190b191cmwodHJpbSgkcGFyYW1zWydpbnB1dF9pZCddKSkpOwp9CgokaW5wdXRfZmllbGRzID0gJyc7CmlmKGlzc2V0KCRwYXJhbXNbJ2lucHV0X2ZpZWxkcyddKSkgCnsKCSRpbnB1dF9maWVsZHMgPSAkcGFyYW1zWydpbnB1dF9maWVsZHMnXTsKfQoKaWYoaXNzZXQoJHBhcmFtc1snaW5wdXRfdHBsJ10pKSAKewoJJGlucHV0X3RwbCA9ICRwYXJhbXNbJ2lucHV0X3RwbCddOwp9CmVsc2UKewoJJGlucHV0X3RwbCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZWZhdWx0X211bHRpX2lucHV0X3RwbCcsJ211bHRpX2lucHV0X1NhbXBsZVRlbXBsYXRlJyk7Cn0KCiMjIyBkbyBhY3Rpb24gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgppZihpc3NldCgkcGFyYW1zWydzdWJtaXQnXSkgJiYgJHBhcmFtc1snc3VibWl0J109PXRydWUpIAp7CglpZigkaW5wdXRfaWQgPT0gJycpIAoJewoJCSRlcnJvciA9IHRydWU7CgkJJGVycm9ybWVzc2FnZSAuPSAkdGhpcy0+bGFuZygnZXJyb3JfaW5wdXRfaWQnKS4nPGJyIC8+JzsKCX0KCWlmKCRpbnB1dF9maWVsZHMgPT0gJycpIAoJewoJCSRlcnJvciA9IHRydWU7CgkJJGVycm9ybWVzc2FnZSAuPSAkdGhpcy0+bGFuZygnZXJyb3JfaW5wdXRfZmllbGRzJykuJzxiciAvPic7Cgl9CgoJaWYoJGVycm9yPT1mYWxzZSkgCgl7CgkJaWYoISR0aGlzLT5BZGRNdWx0aUlucHV0KCRpbnB1dF9pZCwkaW5wdXRfZmllbGRzKSkKCQl7CgkJCSRlcnJvciA9IHRydWU7CgkJCSRlcnJvcm1lc3NhZ2UgLj0gJHRoaXMtPmxhbmcoJ2Vycm9yX2lucHV0X2lkX2V4aXN0cycpLic8YnIgLz4nOwoJCX0KCQllbHNlIGlmKCEkdGhpcy0+QWRkVHBsQXNzb2MoJ211bHRpX2lucHV0JywkaW5wdXRfaWQsJGlucHV0X3RwbCkpCgkJewoJCQkkZXJyb3IgPSB0cnVlOwoJCQkkZXJyb3JtZXNzYWdlIC49ICR0aGlzLT5sYW5nKCdlcnJvcl91cGRhdGluZ19tdWx0aV9pbnB1dF9hc3NvY3MnKS4nPGJyIC8+JzsKCQl9CgkJZWxzZQoJCXsKCQkJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgYXJyYXkoJ21lc3NhZ2UnPT4nbXVsdGlfaW5wdXRfYWRkZWQnLAoJCQkJJ2FjdGl2ZV90YWInPT4nbXVsdGlfaW5wdXQnLCdzdWJtaXQnPT50cnVlKSk7CgkJfQoJfQoKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi8vIHNtYXJ0eSBzdHVmZgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0X2Zvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgCgknYWRkTXVsdGlJbnB1dCcsICRyZXR1cm5pZCwncG9zdCcsJ211bHRpcGFydC9mb3JtLWRhdGEnKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2VuZF9mb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7JHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0JywgCglsYW5nKCdzdWJtaXQnKSkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2NhbmNlbCcsCgkkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdjYW5jZWwnLGxhbmcoJ2NhbmNlbCcpKSk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X2lkX3RleHQnLCR0aGlzLT5sYW5nKCdpbnB1dF9pZCcpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9pZF9pbnB1dCcsCgkkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwnaW5wdXRfaWQnLCRpbnB1dF9pZCw2NCwxMjgpKTsKCiR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfdHBsX3RleHQnLCR0aGlzLT5sYW5nKCdtdWx0aV9pbnB1dF90cGwnKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfdHBsX2lucHV0JywgCgkJJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCAnaW5wdXRfdHBsJywgJHRoaXMtPkdldFRwbExpc3QoJ211bHRpX2lucHV0JyksICcnLCAkaW5wdXRfdHBsKSk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X2ZpZWxkc190ZXh0JywkdGhpcy0+bGFuZygnaW5wdXRfZmllbGRzJykpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X2ZpZWxkc19pbnB1dCcsCgkkdGhpcy0+Q3JlYXRlVGV4dEFyZWEoZmFsc2UsJGlkLCRpbnB1dF9maWVsZHMsJ2lucHV0X2ZpZWxkcycsJycsJ2lucHV0X2ZpZWxkcycpKTsKCmlmKCRlcnJvcm1lc3NhZ2UhPScnKSAKewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlcnJvcm1lc3NhZ2UnLCRlcnJvcm1lc3NhZ2UpOwp9CgovLyBEaXNwbGF5IHRoZSBwb3B1bGF0ZWQgdGVtcGxhdGUKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZGRNdWx0aUlucHV0LnRwbCcpOwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/action.addMultiInputTpl.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIE1vZHVsZSA6IEFkdmFuY2VkQ29udGVudCAoYykgMjAxMCBieSBHZW9yZyBCdXNjaCAoZ2VvcmcuYnVzY2hAZ214Lm5ldCkKIyAgICAgICAgICBhIGNvbnRlbnQgbWFuYWdlbWVudCB0b29sIGZvciBDTVMgTWFkZSBTaW1wbGUKIyAgICAgICAgICBUaGUgcHJvamVjdHMgaG9tZXBhZ2UgaXMgaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9jb250ZW50Mi8KIyAgICAgICAgICBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDQtMjAxMCBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgICAgICAgICAgVGhlIHByb2plY3RzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgVmVyc2lvbjogMC43LjEKIyBGaWxlICAgOiBhY3Rpb24uYWRkTXVsdGlJbnB1dFRwbC5waHAKIyBQdXJwb3NlOiBhZGRzIGEgdGVtcGxhdGUgZm9yIG11bHRpIGlucHV0IGJsb2NrdHlwZQojIExpY2Vuc2U6IEdQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgppZighaXNfb2JqZWN0KGNtc21zKCkpKSBleGl0OwoKaWYoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01hbmFnZSBBZHZhbmNlZENvbnRlbnQgTXVsdGlJbnB1dCBUZW1wbGF0ZScpKQp7CglyZXR1cm4gJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoJGlkLCRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2Vycm9yX3Blcm1pc3Npb25zJykpOwp9CgppZihpc3NldCgkcGFyYW1zWydjYW5jZWwnXSkpIAp7CgkkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCBhcnJheSgnYWN0aXZlX3RhYic9PidtdWx0aV9pbnB1dF90cGwnKSk7Cn0KCiRlcnJvciA9IGZhbHNlOwokZXJyb3JtZXNzYWdlID0gJyc7CgokdHBsX25hbWUgPSAnJzsKaWYoaXNzZXQoJHBhcmFtc1sndHBsX25hbWUnXSkgJiYgIWVtcHR5KCRwYXJhbXNbJ3RwbF9uYW1lJ10pKSAKewoJJHRwbF9uYW1lID0gcHJlZ19yZXBsYWNlKCcvLSsvJywnXycsbXVuZ2Vfc3RyaW5nX3RvX3VybCh0cmltKCRwYXJhbXNbJ3RwbF9uYW1lJ10pKSk7Cn0KCiR0ZW1wbGF0ZSA9ICcnOwppZihpc3NldCgkcGFyYW1zWyd0ZW1wbGF0ZSddKSkgCnsKCSR0ZW1wbGF0ZSA9IHRyaW0oJHBhcmFtc1sndGVtcGxhdGUnXSk7Cn0KCiMjIyBkbyBhY3Rpb24gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgppZihpc3NldCgkcGFyYW1zWydzdWJtaXQnXSkgJiYgJHBhcmFtc1snc3VibWl0J109PXRydWUpIAp7CglpZigkdHBsX25hbWUgPT0gJycpIAoJewoJCSRlcnJvciA9IHRydWU7CgkJJGVycm9ybWVzc2FnZSAuPSAkdGhpcy0+bGFuZygnZXJyb3JfdHBsX25hbWUnKS4nPGJyIC8+JzsKCX0KCWlmKCR0ZW1wbGF0ZSA9PSAnJykgCgl7CgkJJGVycm9yID0gdHJ1ZTsKCQkkZXJyb3JtZXNzYWdlIC49ICR0aGlzLT5sYW5nKCdlcnJvcl90ZW1wbGF0ZScpLic8YnIgLz4nOwoJfQoJaWYoJGVycm9yPT1mYWxzZSkgCgl7CgkJJHRoaXMtPlNldFRlbXBsYXRlKCdtdWx0aV9pbnB1dF8nLiR0cGxfbmFtZSwgJHRlbXBsYXRlKTsKCQkkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCBhcnJheSgnbWVzc2FnZSc9PidtdWx0aV9pbnB1dF90cGxfYWRkZWQnLAoJCQknYWN0aXZlX3RhYic9PidtdWx0aV9pbnB1dF90cGwnLCdzdWJtaXQnPT50cnVlKSk7Cgl9Cn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgovLyBzbWFydHkgc3R1ZmYKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydF9mb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsIAoJJ2FkZE11bHRpSW5wdXRUcGwnLCAkcmV0dXJuaWQsJ3Bvc3QnLCdtdWx0aXBhcnQvZm9ybS1kYXRhJykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRfZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOyR0aGlzLT5zbWFydHktPmFzc2lnbignc3VibWl0JywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3N1Ym1pdCcsIAoJbGFuZygnc3VibWl0JykpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjYW5jZWwnLAoJJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnY2FuY2VsJyxsYW5nKCdjYW5jZWwnKSkpOwoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0cGxfbmFtZV90ZXh0JywkdGhpcy0+bGFuZygndHBsX25hbWUnKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbigndHBsX25hbWVfaW5wdXQnLAoJJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ3RwbF9uYW1lJywkdHBsX25hbWUsNjQsMTI4KSk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RlbXBsYXRlX3RleHQnLGxhbmcoJ3RlbXBsYXRlJykpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RlbXBsYXRlX2lucHV0JywKCSR0aGlzLT5DcmVhdGVUZXh0QXJlYShmYWxzZSwkaWQsJHRlbXBsYXRlLCd0ZW1wbGF0ZScsJycsJ3RlbXBsYXRlJykpOwoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdoZWxwX3RleHQnLCR0aGlzLT5sYW5nKCdoZWxwX3RwbF92YXJzJykpOwoKaWYoJGVycm9ybWVzc2FnZSE9JycpIAp7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2Vycm9ybWVzc2FnZScsJGVycm9ybWVzc2FnZSk7Cn0KCi8vIERpc3BsYXkgdGhlIHBvcHVsYXRlZCB0ZW1wbGF0ZQplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkZE11bHRpSW5wdXRUcGwudHBsJyk7Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIE1vZHVsZSA6IEFkdmFuY2VkQ29udGVudCAoYykgMjAxMCBieSBHZW9yZyBCdXNjaCAoZ2VvcmcuYnVzY2hAZ214Lm5ldCkKIyAgICAgICAgICBhIGNvbnRlbnQgbWFuYWdlbWVudCB0b29sIGZvciBDTVMgTWFkZSBTaW1wbGUKIyAgICAgICAgICBUaGUgcHJvamVjdHMgaG9tZXBhZ2UgaXMgZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2NvbnRlbnQyLwojICAgICAgICAgIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNC0yMDEwIGJ5IFRlZCBLdWxwCiMgICAgICAgICAgVGhlIHByb2plY3RzIGhvbWVwYWdlIGlzOiBjbXNtYWRlc2ltcGxlLm9yZwojIFZlcnNpb246IDAuNy4xCiMgRmlsZSAgIDogYWN0aW9uLmRlZmF1bHQucGhwCiMgICAgICAgICAgVGhpcyBmaWxlIGlzIGEgbW9kaWZpY2F0aW9uIG9mIHRoZSBkZWZhdWx0IHBsdWdpbiB7Y29udGVudH0KIyBQdXJwb3NlOiBwZXJmb3JtcyB0aGUgZGVmYXVsdCBmcm9udGVuZCBhY3Rpb24gaWYge0FkdmFuY2VkQ29udGVudH0gaXMgdXNlZC4KIyBMaWNlbnNlOiBHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKaWYoIWlzX29iamVjdChjbXNtcygpKSkgZXhpdDsKCmlmKGlzc2V0KCRwYXJhbXNbJ2FjdGl2ZSddKSAmJiAkdGhpcy0+SXNGYWxzZSgkcGFyYW1zWydhY3RpdmUnXSkpIAp7CglyZXR1cm47IC8vIGRvbid0IHByb2Nlc3MgaW5hY3RpdmUgYmxvY2tzCn0KCiRyZXN1bHQgICA9ICcnOwoKJGJsb2NrID0gJ2NvbnRlbnRfZW4nOwokbWFpbkNvbnRlbnQgPSB0cnVlOwoKIyBNTEUgc3VwcG9ydAokbWxlID0gZmFsc2U7Cmdsb2JhbCAkaGxzLCAkbWxlYmxvY2ssICRtbGVibG9ja2ZhbGxiYWNrOwppZihpc3NldCgkaGxzKSkKewoJJG1sZSA9IHRydWU7Cn0KCmlmKCRtbGUgJiYgJG1sZWJsb2NrICE9ICcnKSAKewoJJGJsb2NrID0gJ2NvbnRlbnQnLiRtbGVibG9jazsKfQojLS0tCgppZihpc3NldCgkcGFyYW1zWydibG9jayddKSAmJiAkcGFyYW1zWydibG9jayddICE9ICRibG9jaykgCnsKCSRtYWluQ29udGVudCA9IGZhbHNlOwoJJF9ibG9jayA9IHByZWdfcmVwbGFjZSgnLy0rLycsJ18nLG11bmdlX3N0cmluZ190b191cmwoJHBhcmFtc1snYmxvY2snXSkpOwoJJGJsb2NrID0gJF9ibG9jazsKCSMgTUxFIHN1cHBvcnQKCWlmKCRtbGUpIAoJewoJCSRibG9jayAuPSAkbWxlYmxvY2s7Cgl9CgkjLS0tCn0KCiRkZWZhdWx0VmFsdWUgPSAnJzsKaWYoaXNzZXQoJHBhcmFtc1snZGVmYXVsdCddKSkKewoJJGRlZmF1bHRWYWx1ZSA9IHRyaW0oJHBhcmFtc1snZGVmYXVsdCddKTsKfQoKJGRvU21hcnR5ID0gZmFsc2U7CmlmKGlzc2V0KCRwYXJhbXNbJ3NtYXJ0eSddKSAmJiAkdGhpcy0+SXNUcnVlKCRwYXJhbXNbJ3NtYXJ0eSddKSAmJiBjbXNfdXRpbHM6OmdldF9jdXJyZW50X2NvbnRlbnQoKS0+VHlwZSgpID09ICdjb250ZW50MicpCnsKCSRkb1NtYXJ0eSA9IHRydWU7Cn0KCmlmKCRkb1NtYXJ0eSAmJiBjbXNfdXRpbHM6OmdldF9jdXJyZW50X2NvbnRlbnQoKS0+VHlwZSgpID09ICdjb250ZW50MicpIAp7CgkkZGVmYXVsdFZhbHVlID0gY21zX3V0aWxzOjpnZXRfY3VycmVudF9jb250ZW50KCktPkRvU21hcnR5KGNtc191dGlsczo6Z2V0X2N1cnJlbnRfY29udGVudCgpLT5fY29udGVudEJsb2Nrc1skYmxvY2tdWydkZWZhdWx0X3ZhbHVlJ10pOwp9CgokYWxsb3dOb25lID0gdHJ1ZTsKaWYoaXNzZXQoJHBhcmFtc1snYWxsb3dfbm9uZSddKSAmJiAkdGhpcy0+SXNGYWxzZSgkcGFyYW1zWydhbGxvd19ub25lJ10pKQp7CgkkYWxsb3dOb25lID0gZmFsc2U7Cn0KCmlmIChpc19vYmplY3QoY21zX3V0aWxzOjpnZXRfY3VycmVudF9jb250ZW50KCkpICYmIG1ldGhvZF9leGlzdHMoY21zX3V0aWxzOjpnZXRfY3VycmVudF9jb250ZW50KCksJ0lkJykgKQp7CgkkaWQgICAgICAgICA9ICcnOwoJJG1vZHVsZW5hbWUgPSAnJzsKCSRhY3Rpb24gICAgID0gJyc7CgkkaW5saW5lICAgICA9IGZhbHNlOwoJaWYgKGlzc2V0KCRfUkVRVUVTVFsnbW9kdWxlJ10pKQoJewoJCSRtb2R1bGVuYW1lID0gJF9SRVFVRVNUWydtb2R1bGUnXTsKCX0KCQoJaWYgKGlzc2V0KCRfUkVRVUVTVFsnaWQnXSkpIAoJewoJCSRpZCA9ICRfUkVRVUVTVFsnaWQnXTsKCX0KCWVsc2VpZiAoaXNzZXQoJF9SRVFVRVNUWydtYWN0J10pKSAKCXsKCQkkYXJ5ICAgICAgICA9IGV4cGxvZGUoJywnLCBjbXNfaHRtbGVudGl0aWVzKCRfUkVRVUVTVFsnbWFjdCddKSwgNCk7CgkJJG1vZHVsZW5hbWUgPSAoaXNzZXQoJGFyeVswXSk/JGFyeVswXTonJyk7CgkJJGlkICAgICAgICAgPSAoaXNzZXQoJGFyeVsxXSk/JGFyeVsxXTonJyk7CgkJJGFjdGlvbiAgICAgPSAoaXNzZXQoJGFyeVsyXSk/JGFyeVsyXTonJyk7CgkJJGlubGluZSAgICAgPSAoaXNzZXQoJGFyeVszXSkgJiYgJGFyeVszXSA9PSAxP3RydWU6ZmFsc2UpOwoJfQoJCglpZiAoaXNzZXQoJF9SRVFVRVNUWyRpZC4nYWN0aW9uJ10pKSAKCXsKCQkkYWN0aW9uID0gJF9SRVFVRVNUWyRpZC4nYWN0aW9uJ107Cgl9CgllbHNlIGlmIChpc3NldCgkX1JFUVVFU1RbJ2FjdGlvbiddKSkgCgl7CgkJJGFjdGlvbiA9ICRfUkVRVUVTVFsnYWN0aW9uJ107Cgl9CgkKCWlmICghaXNzZXQoJHBhcmFtc1snYmxvY2snXSkgJiYgKCRpZCA9PSAnY250bnQwMScgfHwgKCRpZCAhPSAnJyAmJiAkaW5saW5lID09IGZhbHNlKSkpIAoJewoJCSRjbXNtb2R1bGVzID0gJmNtc21zKCktPm1vZHVsZXM7CgkJCgkJaWYgKGlzc2V0KCRjbXNtb2R1bGVzKSkgCgkJewoJCQlmb3JlYWNoICgkY21zbW9kdWxlcyBhcyAka2V5PT4kdmFsdWUpIAoJCQl7CgkJCQlpZiAoc3RydG9sb3dlcigkbW9kdWxlbmFtZSkgPT0gc3RydG9sb3dlcigka2V5KSkgCgkJCQl7CgkJCQkJJG1vZHVsZW5hbWUgPSAka2V5OyAKCQkJCX0KCQkJfQoJCQkKCQkJaWYgKGlzc2V0KCRtb2R1bGVuYW1lKSkgCgkJCXsKCQkJCWlmIChpc3NldCgkY21zbW9kdWxlc1skbW9kdWxlbmFtZV0pKSAKCQkJCXsKCQkJCQlpZiAoaXNzZXQoJGNtc21vZHVsZXNbJG1vZHVsZW5hbWVdWydvYmplY3QnXSkKCQkJCQkJJiYgJGNtc21vZHVsZXNbJG1vZHVsZW5hbWVdWydpbnN0YWxsZWQnXSA9PSB0cnVlCgkJCQkJCSYmICRjbXNtb2R1bGVzWyRtb2R1bGVuYW1lXVsnYWN0aXZlJ10gPT0gdHJ1ZQoJCQkJCQkmJiAkY21zbW9kdWxlc1skbW9kdWxlbmFtZV1bJ29iamVjdCddLT5Jc1BsdWdpbk1vZHVsZSgpKQoJCQkJCXsKCQkJCQkJQG9iX3N0YXJ0KCk7CgkJCQkJCQoJCQkJCQl1bnNldCgkcGFyYW1zWydsYWJlbCddKTsKCQkJCQkJdW5zZXQoJHBhcmFtc1snY2xhc3MnXSk7CgkJCQkJCXVuc2V0KCRwYXJhbXNbJ2lkJ10pOwoJCQkJCQl1bnNldCgkcGFyYW1zWyduYW1lJ10pOwoJCQkJCQl1bnNldCgkcGFyYW1zWyd3aWR0aCddKTsKCQkJCQkJdW5zZXQoJHBhcmFtc1snaGVpZ2h0J10pOwoJCQkJCQl1bnNldCgkcGFyYW1zWydhbHQnXSk7CgkJCQkJCXVuc2V0KCRwYXJhbXNbJ2Jsb2NrJ10pOwoJCQkJCQl1bnNldCgkcGFyYW1zWydzbWFydHknXSk7CgkJCQkJCXVuc2V0KCRwYXJhbXNbJ2xhYmVsJ10pOwoJCQkJCQl1bnNldCgkcGFyYW1zWyd0eXBlJ10pOwoJCQkJCQl1bnNldCgkcGFyYW1zWydibG9ja190eXBlJ10pOwoJCQkJCQl1bnNldCgkcGFyYW1zWydkZWZhdWx0J10pOwoJCQkJCQl1bnNldCgkcGFyYW1zWydzdHlsZSddKTsKCQkJCQkJdW5zZXQoJHBhcmFtc1snc2l6ZSddKTsKCQkJCQkJdW5zZXQoJHBhcmFtc1snYmxvY2tfdGFiJ10pOwoJCQkJCQl1bnNldCgkcGFyYW1zWydwYWdlX3RhYiddKTsKCQkJCQkJdW5zZXQoJHBhcmFtc1snbWF4bGVuZ3RoJ10pOwoJCQkJCQl1bnNldCgkcGFyYW1zWyd3eXNpd3lnJ10pOwoJCQkJCQl1bnNldCgkcGFyYW1zWydvbmVsaW5lJ10pOwoJCQkJCQl1bnNldCgkcGFyYW1zWydzdGFydF90aW1lJ10pOwoJCQkJCQl1bnNldCgkcGFyYW1zWydlbmRfdGltZSddKTsKCQkJCQkJdW5zZXQoJHBhcmFtc1snZGF0ZV9mb3JtYXQnXSk7CgkJCQkJCXVuc2V0KCRwYXJhbXNbJ3N0YXJ0X2hvdXInXSk7CgkJCQkJCXVuc2V0KCRwYXJhbXNbJ2VuZF9ob3VyJ10pOwoJCQkJCQl1bnNldCgkcGFyYW1zWydzdGFydF9taW51dGUnXSk7CgkJCQkJCXVuc2V0KCRwYXJhbXNbJ2VuZF9taW51dGUnXSk7CgkJCQkJCXVuc2V0KCRwYXJhbXNbJ3N0YXJ0X3NlY29uZHMnXSk7CgkJCQkJCXVuc2V0KCRwYXJhbXNbJ2VuZF9zZWNvbmRzJ10pOwoJCQkJCQl1bnNldCgkcGFyYW1zWydzaG93X2Nsb2NrJ10pOwoJCQkJCQl1bnNldCgkcGFyYW1zWydzdGVwX2hvdXJzJ10pOwoJCQkJCQl1bnNldCgkcGFyYW1zWydzdGVwX21pbnV0ZXMnXSk7CgkJCQkJCXVuc2V0KCRwYXJhbXNbJ3N0ZXBfc2Vjb25kcyddKTsKCQkJCQkJdW5zZXQoJHBhcmFtc1snc2hvdzI0aCddKTsKCQkJCQkJdW5zZXQoJHBhcmFtc1sndXBsb2FkJ10pOwoJCQkJCQl1bnNldCgkcGFyYW1zWydkaXInXSk7CgkJCQkJCXVuc2V0KCRwYXJhbXNbJ2FsbG93X25vbmUnXSk7CgkJCQkJCXVuc2V0KCRwYXJhbXNbJ2V4Y2x1ZGVfcHJlZml4J10pOwoJCQkJCQl1bnNldCgkcGFyYW1zWydleGNsdWRlX3N1Zml4J10pOwoJCQkJCQl1bnNldCgkcGFyYW1zWydpbmNsdWRlX3ByZWZpeCddKTsKCQkJCQkJdW5zZXQoJHBhcmFtc1snaW5jbHVkZV9zdWZpeCddKTsKCQkJCQkJdW5zZXQoJHBhcmFtc1snbG9ja19pbnB1dCddKTsKCQkJCQkJdW5zZXQoJHBhcmFtc1snZGVsaW1pdGVyJ10pOwoJCQkJCQl1bnNldCgkcGFyYW1zWydpdGVtcyddKTsKCQkJCQkJdW5zZXQoJHBhcmFtc1sndmFsdWVzJ10pOwoJCQkJCQl1bnNldCgkcGFyYW1zWydtb2R1bGUnXSk7CgkJCQkJCXVuc2V0KCRwYXJhbXNbJ2RlZmF1bHRNb2R1bGVzJ10pOwoJCQkJCQl1bnNldCgkcGFyYW1zWyd1cmxvbmx5J10pOwoJCQkJCQl1bnNldCgkcGFyYW1zWydmZXVfYWN0aW9uJ10pOwoJCQkJCQl1bnNldCgkcGFyYW1zWydmZXVfYWNjZXNzJ10pOwoJCQkJCQl1bnNldCgkcGFyYW1zWydlZGl0b3JfZ3JvdXBzJ10pOwoJCQkJCQl1bnNldCgkcGFyYW1zWydlZGl0b3JfdXNlcnMnXSk7CgkJCQkJCXVuc2V0KCRwYXJhbXNbJ2FjdGl2ZSddKTsKCQkJCQkJdW5zZXQoJHBhcmFtc1sndHJhbnNsYXRlX2xhYmVscyddKTsKCQkJCQkJdW5zZXQoJHBhcmFtc1sndHJhbnNsYXRlX3ZhbHVlcyddKTsKCQkJCQkJCgkJCQkJCXVuc2V0KCRwYXJhbXNbJ2lucHV0cyddKTsKCQkJCQkJdW5zZXQoJHBhcmFtc1snaW5wdXRfZGVsaW1pdGVyJ10pOwoJCQkJCQl1bnNldCgkcGFyYW1zWyd2YWx1ZV9kZWxpbWl0ZXInXSk7CgkJCQkJCQoJCQkJCQkkcGFyYW1zID0gYXJyYXlfbWVyZ2UoJHBhcmFtcywgR2V0TW9kdWxlUGFyYW1ldGVycygkaWQpKTsKCQkJCQkJCgkJCQkJCS8vIGNhbGd1eTEwMDAgLi4uIGluY3JlbWVudCB0aGUgbW9kdWxlbnVtIAoJCQkJCQkvLyBpZiB3ZSdyZSBub3QgaW4gaW5saW5lZCBtb2RlLgoJCQkJCQlpZiggJGlkICE9ICdjbnRudDAxJyApIAoJCQkJCQl7CgkJCQkJCQkvLyBUb0RvOiBkbyBub3QgbW9kaWZ5IENNU21zIGludGVybmFscyBoZXJlIQoJCQkJCQkJKytjbXNtcygpLT52YXJpYWJsZXNbIm1vZHVsZW51bSJdOyAKCQkJCQkJfQoJCQkJCQkKCQkJCQkJJHJldHVybmlkID0gJyc7CgkJCQkJCWlmIChpc3NldCgkcGFyYW1zWydyZXR1cm5pZCddKSkgCgkJCQkJCXsKCQkJCQkJCSRyZXR1cm5pZCA9ICRwYXJhbXNbJ3JldHVybmlkJ107CgkJCQkJCX0KCQkJCQkJZWxzZSAKCQkJCQkJewoJCQkJCQkJJHJldHVybmlkID0gY21zX3V0aWxzOjpnZXRfY3VycmVudF9jb250ZW50KCktPklkKCk7CgkJCQkJCX0KCQkJCQkJJHJlc3VsdCA9ICRjbXNtb2R1bGVzWyRtb2R1bGVuYW1lXVsnb2JqZWN0J10tPkRvQWN0aW9uQmFzZSgkYWN0aW9uLCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCk7CgkJCQkJCWlmICgkcmVzdWx0ICE9PSBGQUxTRSkgCgkJCQkJCXsKCQkJCQkJCWVjaG8gJHJlc3VsdDsKCQkJCQkJfQoJCQkJCQkkbW9kcmVzdWx0ID0gQG9iX2dldF9jb250ZW50cygpOwoJCQkJCQlAb2JfZW5kX2NsZWFuKCk7CgkJCQkJCSRyZXN1bHQgPSAkbW9kcmVzdWx0OwoJCQkJCX0KCQkJCQllbHNlIAoJCQkJCXsKCQkJCQkgICRyZXN1bHQgPSAiPCEtLSBOb3QgYSB0YWcgbW9kdWxlIC0tPlxuIjsKCQkJCQkgIEB0cmlnZ2VyX2Vycm9yKCdBdHRlbXB0IHRvIGFjY2VzcyBtb2R1bGUgJy4ka2V5Licgd2hpY2ggY291bGQgbm90IGJlIGZvdW5lIChpcyBpdCBwcm9wZXJseSBpbnN0YWxsZWQgYW5kIGNvbmZpZ3VyZWQ/Jyk7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJfQoJZWxzZSAKCXsKCQkkb2xkdmFsdWUgICAgICAgICAgICAgICAgICAgICA9IGNtc21zKCktPkdldFNtYXJ0eSgpLT5jYWNoaW5nOwoJCWNtc21zKCktPkdldFNtYXJ0eSgpLT5jYWNoaW5nID0gZmFsc2U7CgkJJGNvbnRlbnRJZCAgICAgICAgICAgICAgICAgICAgPSBjbXNfdXRpbHM6OmdldF9jdXJyZW50X2NvbnRlbnQoKS0+SWQoKTsKCQkKCQkjIE1MRSBzdXBwb3J0CgkJaWYoJG1sZSkKCQl7CgkJCSRjb250ZW50SWQgLj0gJy0nLiRobHM7CgkJfQoJCSMtLS0KCQkKCQkkcmVzdWx0ID0gY21zbXMoKS0+R2V0U21hcnR5KCktPmZldGNoKHN0cl9yZXBsYWNlKCcgJywgJ18nLCAnY29udGVudDonIC4gJGJsb2NrKSwgJycsICRjb250ZW50SWQpOwoJCQoJCSMgTUxFIHN1cHBvcnQKCQlpZigkbWxlIAoJCQkmJiAkcmVzdWx0ID09ICcnICYmICRtbGVibG9ja2ZhbGxiYWNrICE9ICcnIAoJCQkmJiAkbWxlYmxvY2tmYWxsYmFjayAhPSAkbWxlYmxvY2spIAoJCXsKCQkJaWYoJGJsb2NrICE9ICdjb250ZW50Jy4kbWxlYmxvY2spIAoJCQl7CgkJCQkkYmxvY2sgID0gJF9ibG9jayAuICRtbGVibG9ja2ZhbGxiYWNrOwoJCQkJJHJlc3VsdCA9IGNtc21zKCktPkdldFNtYXJ0eSgpLT5mZXRjaChzdHJfcmVwbGFjZSgnICcsICdfJywgJ2NvbnRlbnQ6JyAuICRibG9jayksICcnLCAkY29udGVudElkKTsKCQkJfQoJCQllbHNlIAoJCQl7CgkJCQkkYmxvY2sgID0gJ2NvbnRlbnQnIC4gJG1sZWJsb2NrZmFsbGJhY2s7CgkJCQkkcmVzdWx0ID0gY21zbXMoKS0+R2V0U21hcnR5KCktPmZldGNoKHN0cl9yZXBsYWNlKCcgJywgJ18nLCAnY29udGVudDonIC4gJGJsb2NrKSwgJycsICRjb250ZW50SWQpOwoJCQl9CgkJfQoJCSMtLS0KCQkKCQljbXNtcygpLT5HZXRTbWFydHkoKS0+Y2FjaGluZyA9ICRvbGR2YWx1ZTsKCQkKCQlpZigkcmVzdWx0ID09ICcnICYmICEkYWxsb3dOb25lKQoJCXsKCQkJJHJlc3VsdCA9ICRkZWZhdWx0VmFsdWU7CgkJfQoJCQoJCWlmIChpc3NldCgkcGFyYW1zWydibG9ja190eXBlJ10pICYmIHN0cnRvbG93ZXIoJHBhcmFtc1snYmxvY2tfdHlwZSddKT09J2RhdGUnICYmIGlzc2V0KCRwYXJhbXNbJ2RhdGVfZm9ybWF0J10pICYmICRwYXJhbXNbJ2RhdGVfZm9ybWF0J10gIT0gJycpCgkJewoJCQkkcmVzdWx0ID0gc3RyZnRpbWUoJHBhcmFtc1snZGF0ZV9mb3JtYXQnXSwkcmVzdWx0KTsKCQl9Cgl9CgkKCWVjaG8gdHJpbSgkcmVzdWx0KTsKfQoKPz4K]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIE1vZHVsZSA6IEFkdmFuY2VkQ29udGVudCAoYykgMjAxMCBieSBHZW9yZyBCdXNjaCAoZ2VvcmcuYnVzY2hAZ214Lm5ldCkKIyAgICAgICAgICBhIGNvbnRlbnQgbWFuYWdlbWVudCB0b29sIGZvciBDTVMgTWFkZSBTaW1wbGUKIyAgICAgICAgICBUaGUgcHJvamVjdHMgaG9tZXBhZ2UgaXMgZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2NvbnRlbnQyLwojICAgICAgICAgIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNC0yMDEwIGJ5IFRlZCBLdWxwCiMgICAgICAgICAgVGhlIHByb2plY3RzIGhvbWVwYWdlIGlzOiBjbXNtYWRlc2ltcGxlLm9yZwojIFZlcnNpb246IDAuNy4xCiMgRmlsZSAgIDogYWN0aW9uLmRlZmF1bHRhZG1pbi5waHAKIyBQdXJwb3NlOiBwZXJmb3JtcyB0aGUgZGVmYXVsdCBiYWNrZW5kIGFjdGlvbiBpZiAiRXh0ZW5zaW9ucy0+QWR2YW5jZWRDb250ZW50IgojICAgICAgICAgIGlzIHNlbGVjdGVkCiMgTGljZW5zZTogR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmlmKCFpc19vYmplY3QoY21zbXMoKSkpIGV4aXQ7CgoKaWYoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01hbmFnZSBBZHZhbmNlZENvbnRlbnQnKSkKCXJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsJHJldHVybmlkLAkkdGhpcy0+TGFuZygnZXJyb3JfcGVybWlzc2lvbnMnKSk7CgokYWN0aXZlX3RhYiA9ICdwcmVmcyc7CmlmKGlzc2V0KCRwYXJhbXNbJ2FjdGl2ZV90YWInXSkpCgkkYWN0aXZlX3RhYiA9ICRwYXJhbXNbJ2FjdGl2ZV90YWInXTsKCiRlcnJvcm1lc3NhZ2UgPSAnJzsKaWYoaXNzZXQoJHBhcmFtc1snZXJyb3JtZXNzYWdlJ10pKQoJJGVycm9ybWVzc2FnZSAuPSAkcGFyYW1zWydlcnJvcm1lc3NhZ2UnXS4nPGJyIC8+JzsKCiRtZXNzYWdlID0gJyc7CmlmKGlzc2V0KCRwYXJhbXNbJ21lc3NhZ2UnXSkpCgkkbWVzc2FnZSAuPSAkcGFyYW1zWydtZXNzYWdlJ10uJzxiciAvPic7CgokdGFiaGVhZGVycyA9IGFycmF5KCk7CgppZigkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNYW5hZ2UgQWR2YW5jZWRDb250ZW50IFByZWZlcmVuY2VzJykpCnsKCSR0YWJzWydwcmVmcyddWyd0YWJoZWFkZXInXSA9ICR0aGlzLT5TZXRUYWJIZWFkZXIoJ3ByZWZzJywKCQkkdGhpcy0+bGFuZygncHJlZnMnKSwKCQkoJGFjdGl2ZV90YWI9PSdwcmVmcyc/dHJ1ZTonJykpOwoJCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAKCQknc2F2ZVByZWZzJywgJHJldHVybmlkLCdwb3N0JywnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignZW5kZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwoJCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2ltcG9ydGNvbnRlbnRfaW5wdXQnLCAKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdpbXBvcnRwYWdlcycsICRyZXR1cm5pZCwgCgkJCSRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vaW1wb3J0LmdpZicsICcnLCcnLCcnLCdzeXN0ZW1pY29uJykgLiAKCQkJJyZuYnNwOycgLiAkdGhpcy0+bGFuZygnaW1wb3J0cGFnZXMnLCBsYW5nKCdjb250ZW50JyksJHRoaXMtPmxhbmcoJ0FkdmFuY2VkQ29udGVudCcpKSwgCgkJCWFycmF5KCdvbGRfdHlwZSc9Pidjb250ZW50JywnbmV3X3R5cGUnPT4nY29udGVudDInKSwgCgkJCScnLAoJCQlmYWxzZSwKCQkJZmFsc2UsCgkJCSdjbGFzcz0iQWR2YW5jZWRDb250ZW50X0FKQVgiIG9uY2xpY2s9ImlmKGNvbmZpcm0oXCcnLiAKCQkJCSR0aGlzLT5sYW5nKCdjb25maXJtaW1wb3J0JyxsYW5nKCdjb250ZW50JyksJHRoaXMtPmxhbmcoJ0FkdmFuY2VkQ29udGVudCcpKSAuCgkJCQknXCcpKSB7QWR2YW5jZWRDb250ZW50LkltcG9ydFBhZ2VzKHRoaXMuaHJlZik7fSByZXR1cm4gZmFsc2U7IicpKTsKCQoJIyR0aGlzLT5zbWFydHktPmFzc2lnbigndXNlX2NvbnRlbnR0eXBlX3RleHQnLCAKCSMJJHRoaXMtPmxhbmcoJ3VzZV9jb250ZW50dHlwZScpKTsKCSMkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3VzZV9jb250ZW50dHlwZV9pbnB1dCcsIAoJIwkkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCd1c2VfY29udGVudHR5cGUnLDApIC4KCSMJJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAndXNlX2NvbnRlbnR0eXBlJywgJzEnLCAKCSMJCSR0aGlzLT5HZXRQcmVmZXJlbmNlKCd1c2VfY29udGVudHR5cGUnLDEpKSk7CgkKCSR0aGlzLT5zbWFydHktPmFzc2lnbignaW1wb3J0Y29udGVudDJfaW5wdXQnLCAKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdpbXBvcnRwYWdlcycsICcnLCAKCQkJJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9pbXBvcnQuZ2lmJywgJycsJycsJycsJ3N5c3RlbWljb24nKSAuIAoJCQknJm5ic3A7JyAuICR0aGlzLT5sYW5nKCdpbXBvcnRwYWdlcycsICR0aGlzLT5sYW5nKCdBZHZhbmNlZENvbnRlbnQnKSxsYW5nKCdjb250ZW50JykpLCAKCQkJYXJyYXkoJ29sZF90eXBlJz0+J2NvbnRlbnQyJywnbmV3X3R5cGUnPT4nY29udGVudCcpLCAKCQkJJycsCgkJCWZhbHNlLAoJCQlmYWxzZSwKCQkJJ2NsYXNzPSJBZHZhbmNlZENvbnRlbnRfQUpBWCIgb25jbGljaz0iaWYoY29uZmlybShcJycuIAoJCQkJJHRoaXMtPmxhbmcoJ2NvbmZpcm1pbXBvcnQnLCR0aGlzLT5sYW5nKCdBZHZhbmNlZENvbnRlbnQnKSxsYW5nKCdjb250ZW50JykpIC4KCQkJCSdcJykpIHtBZHZhbmNlZENvbnRlbnQuSW1wb3J0UGFnZXModGhpcy5ocmVmKTt9IHJldHVybiBmYWxzZTsiJykpOwoJCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3VuaW5zdGFsbGFjdGlvbl90ZXh0JywgJHRoaXMtPmxhbmcoJ3VuaW5zdGFsbGFjdGlvbicpKTsKCQoJJGFjdGlvbnMgPSBhcnJheShsYW5nKCdub25lJyk9PicnLCAKCQkkdGhpcy0+bGFuZygnc2V0Y29udGVudDEnKT0+MiwgCgkJJHRoaXMtPmxhbmcoJ3NldGNvbnRlbnQyJyk9PjMsCgkJJHRoaXMtPmxhbmcoJ2RlbGV0ZXBhZ2VzJyk9PjEpOwoJCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3VuaW5zdGFsbGFjdGlvbl9pbnB1dCcsIAoJCSR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ3VuaW5zdGFsbF9hY3Rpb24nLCAkYWN0aW9ucywgJycsIAoJCQkkdGhpcy0+R2V0UHJlZmVyZW5jZSgndW5pbnN0YWxsX2FjdGlvbicpKSk7CgkKCSRhY3Rpb25zID0gYXJyYXkoJHRoaXMtPmxhbmcoJ3Blcl9wYWdlJyk9Pidjb250ZW50JywgCgkJJHRoaXMtPmxhbmcoJ3Blcl90ZW1wbGF0ZScpPT4ndGVtcGxhdGUnLCAKCQkkdGhpcy0+bGFuZygnYm90aDEnKT0+J2JvdGgxJywKCQkkdGhpcy0+bGFuZygnYm90aDInKT0+J2JvdGgyJyk7CgkKCSMkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2Jsb2NrX2Rpc3BsYXlfc2V0dGluZ3NfdGV4dCcsICR0aGlzLT5sYW5nKCdkaXNwbGF5X3NldHRpbmdzJywgJHRoaXMtPmxhbmcoJ2NvbnRlbnRfYmxvY2tzJykpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignYmxvY2tfZGlzcGxheV9zZXR0aW5nc190ZXh0JywgCgkJJHRoaXMtPmxhbmcoJ3NhdmVfY29sbGFwc2Vfc3RhdHVzJywgJHRoaXMtPmxhbmcoJ2NvbnRlbnRfYmxvY2tzJykpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignYmxvY2tfZGlzcGxheV9zZXR0aW5nc19pbnB1dCcsIAoJCSR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ2Jsb2NrX2Rpc3BsYXlfc2V0dGluZ3MnLCAkYWN0aW9ucywgJycsIAoJCQkkdGhpcy0+R2V0UHJlZmVyZW5jZSgnYmxvY2tfZGlzcGxheV9zZXR0aW5ncycpKSk7CgkKCSR0aGlzLT5zbWFydHktPmFzc2lnbignY29sbGFwc2VfYmxvY2tfZGVmYXVsdF90ZXh0JywgCgkJJHRoaXMtPmxhbmcoJ2NvbGxhcHNlX2RlZmF1bHQnLCR0aGlzLT5sYW5nKCdjb250ZW50X2Jsb2NrcycpKSk7CgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjb2xsYXBzZV9ibG9ja19kZWZhdWx0X2lucHV0JywgCgkJCSR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ2NvbGxhcHNlX2Jsb2NrX2RlZmF1bHQnLDApIC4KCQkJJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAnY29sbGFwc2VfYmxvY2tfZGVmYXVsdCcsICcxJywgCgkJCQkkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY29sbGFwc2VfYmxvY2tfZGVmYXVsdCcsMSkpKTsKCQoJIyR0aGlzLT5zbWFydHktPmFzc2lnbignbWVzc2FnZV9kaXNwbGF5X3NldHRpbmdzX3RleHQnLCAkdGhpcy0+bGFuZygnZGlzcGxheV9zZXR0aW5ncycsICR0aGlzLT5sYW5nKCdibG9ja19tZXNzYWdlJykpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignbWVzc2FnZV9kaXNwbGF5X3NldHRpbmdzX3RleHQnLCAKCQkkdGhpcy0+bGFuZygnc2F2ZV9jb2xsYXBzZV9zdGF0dXMnLCAkdGhpcy0+bGFuZygnYmxvY2tfbWVzc2FnZScpKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21lc3NhZ2VfZGlzcGxheV9zZXR0aW5nc19pbnB1dCcsIAoJCSR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ21lc3NhZ2VfZGlzcGxheV9zZXR0aW5ncycsICRhY3Rpb25zLCAnJywgCgkJCSR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXNzYWdlX2Rpc3BsYXlfc2V0dGluZ3MnKSkpOwoJCgkjJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdncm91cF9kaXNwbGF5X3NldHRpbmdzX3RleHQnLCAkdGhpcy0+bGFuZygnZGlzcGxheV9zZXR0aW5ncycsICR0aGlzLT5sYW5nKCdibG9ja19ncm91cHMnKSkpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdncm91cF9kaXNwbGF5X3NldHRpbmdzX3RleHQnLCAKCQkkdGhpcy0+bGFuZygnc2F2ZV9jb2xsYXBzZV9zdGF0dXMnLCAkdGhpcy0+bGFuZygnYmxvY2tfZ3JvdXBzJykpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignZ3JvdXBfZGlzcGxheV9zZXR0aW5nc19pbnB1dCcsIAoJCSR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ2dyb3VwX2Rpc3BsYXlfc2V0dGluZ3MnLCAkYWN0aW9ucywgJycsIAoJCQkkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZ3JvdXBfZGlzcGxheV9zZXR0aW5ncycpKSk7CgkKCSR0aGlzLT5zbWFydHktPmFzc2lnbignY29sbGFwc2VfZ3JvdXBfZGVmYXVsdF90ZXh0JywgCgkJJHRoaXMtPmxhbmcoJ2NvbGxhcHNlX2RlZmF1bHQnLCR0aGlzLT5sYW5nKCdibG9ja19ncm91cHMnKSkpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjb2xsYXBzZV9ncm91cF9kZWZhdWx0X2lucHV0JywgCgkJJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwnY29sbGFwc2VfZ3JvdXBfZGVmYXVsdCcsMCkgLgoJCSR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ2NvbGxhcHNlX2dyb3VwX2RlZmF1bHQnLCAnMScsIAoJCQkkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY29sbGFwc2VfZ3JvdXBfZGVmYXVsdCcsMSkpKTsKCQoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzaG93X2FkdmFuY2VkY29udGVudF9vcHRpb25zX3RleHQnLCAKCQkkdGhpcy0+bGFuZygnc2hvd19hZHZhbmNlZGNvbnRlbnRfb3B0aW9ucycpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignc2hvd19hZHZhbmNlZGNvbnRlbnRfb3B0aW9uc19pbnB1dCcsIAoJCSR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ3Nob3dfYWR2YW5jZWRjb250ZW50X29wdGlvbnMnLDApIC4KCQkkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICdzaG93X2FkdmFuY2VkY29udGVudF9vcHRpb25zJywgJzEnLCAKCQkJJHRoaXMtPkdldFByZWZlcmVuY2UoJ3Nob3dfYWR2YW5jZWRjb250ZW50X29wdGlvbnMnLDEpKSk7CgkKCS8vIENvbnRlbnQgc2V0dGluZ3MKCWlmKCAkZmV1c2VycyA9JiAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0Zyb250RW5kVXNlcnMnICkpIAoJewoJCSR0aGlzLT5zbWFydHktPmFzc2lnbignY29udGVudHNldHRpbmdzX3RleHQnLCAkdGhpcy0+bGFuZygnY29udGVudHNldHRpbmdzJykpOwoJCSR0aGlzLT5zbWFydHktPmFzc2lnbignZmV1YWNjZXNzX3RleHQnLCAkdGhpcy0+bGFuZygnZnJvbnRlbmRhY2Nlc3MnKSk7CgkJJGZldUFjY2VzcyA9IGFycmF5KCR0aGlzLT5sYW5nKCdpbmhlcml0X2Zyb21fcGFyZW50Jyk9Pi0xKTsKCQkkZmV1QWNjZXNzID0gYXJyYXlfbWVyZ2UoJGZldUFjY2VzcywkZmV1c2Vycy0+R2V0R3JvdXBMaXN0KCkpOwoJCSR0aGlzLT5zbWFydHktPmFzc2lnbignZmV1YWNjZXNzX2lucHV0JywgCgkJCSR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ2ZldV9hY2Nlc3MnLCcnKS4KCQkJJHRoaXMtPkNyZWF0ZUlucHV0U2VsZWN0TGlzdCgkaWQsJ2ZldV9hY2Nlc3NbXScsJGZldUFjY2VzcywKCQkJCSR0aGlzLT5DbGVhbkFycmF5KGV4cGxvZGUoJzsnLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdmZXVfYWNjZXNzJykpKSwKCQkJY291bnQoJGZldUFjY2VzcyksJycsMSkpOwoJCQoJCSR0aGlzLT5zbWFydHktPmFzc2lnbigncmVkaXJlY3RwYWdlX3RleHQnLCAkdGhpcy0+bGFuZygncmVkaXJlY3RwYWdlJykpOwoJCSR0aGlzLT5zbWFydHktPmFzc2lnbigncmVkaXJlY3RwYWdlX2lucHV0JywgCgkJCSR0aGlzLT5DcmVhdGVSZWRpcmVjdERyb3Bkb3duKCRpZCwncmVkaXJlY3RfcGFnZScsCgkJCQkkdGhpcy0+R2V0UHJlZmVyZW5jZSgncmVkaXJlY3RfcGFnZScpKSk7CgkJCgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdyZWRpcmVjdHBhcmFtc190ZXh0JywgJHRoaXMtPmxhbmcoJ3JlZGlyZWN0cGFyYW1zJykpOwoJCSR0aGlzLT5zbWFydHktPmFzc2lnbigncmVkaXJlY3RwYXJhbXNfaW5wdXQnLCAKCQkJJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdyZWRpcmVjdF9wYXJhbXMnLCAKCQkJCSR0aGlzLT5HZXRQcmVmZXJlbmNlKCdyZWRpcmVjdF9wYXJhbXMnKSwgMzIsIDEyOCkpOwoJCQoJCSR0aGlzLT5zbWFydHktPmFzc2lnbignZXZhbHVhdGVzbWFydHlfdGV4dCcsICR0aGlzLT5sYW5nKCdldmFsdWF0ZXNtYXJ0eScpKTsKCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2V2YWx1YXRlc21hcnR5X2lucHV0JywgCgkJCSR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ2V2YWx1YXRlX3NtYXJ0eScsMCkgLgoJCQkkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICdldmFsdWF0ZV9zbWFydHknLCAnMScsIAoJCQkJJHRoaXMtPkdldFByZWZlcmVuY2UoJ2V2YWx1YXRlX3NtYXJ0eScpKSk7CgkJCgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmZXVhY3Rpb25fdGV4dCcsICR0aGlzLT5sYW5nKCdzaG93bG9naW5mb3JtJykpOwoJCSR0aGlzLT5zbWFydHktPmFzc2lnbignZmV1YWN0aW9uX2lucHV0JywgCgkJCSR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwnZmV1X2FjdGlvbicsCgkJCQlhcnJheSgkdGhpcy0+bGFuZygnbm8nKT0+JycsCgkJCQkJJHRoaXMtPmxhbmcoJ2luaGVyaXRfZnJvbV9wYXJlbnQnKT0+LTEsCgkJCQkJJHRoaXMtPmxhbmcoJ3llcycpPT4xKSwKCQkJCTAsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2ZldV9hY3Rpb24nKSkpOwoJfQoJLy8tLS0KCSR0aGlzLT5zbWFydHktPmFzc2lnbignc3VibWl0X3ByZWZzJywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3N1Ym1pdF9wcmVmcycsIAoJCWxhbmcoJ3N1Ym1pdCcpLCdvbmNsaWNrPSJyZXR1cm4gQWR2YW5jZWRDb250ZW50LlN1Ym1pdEZvcm0odGhpcyxcJ0FkdmFuY2VkQ29udGVudFJlc3VsdFwnKSInKSk7CgkKCSR0YWJzWydwcmVmcyddWyd0YWJjb250ZW50J10gPSAkdGhpcy0+U3RhcnRUYWIoJ3ByZWZzJykgLiAKCQkkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdwcmVmc1RhYi50cGwnKSAuIAoJCSR0aGlzLT5FbmRUYWIoKTsKfQoKaWYoJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTWFuYWdlIEFkdmFuY2VkQ29udGVudCBNdWx0aUlucHV0JykpCnsKCSR0YWJzWydtdWx0aV9pbnB1dCddWyd0YWJoZWFkZXInXSA9ICR0aGlzLT5TZXRUYWJIZWFkZXIoJ211bHRpX2lucHV0JywKCQkkdGhpcy0+bGFuZygnbXVsdGlfaW5wdXQnKSwKCQkoJGFjdGl2ZV90YWI9PSdtdWx0aV9pbnB1dCc/dHJ1ZTonJykpOwoJCgkkbXVsdGlfaW5wdXRzID0gYXJyYXkoKTsKCWZvcmVhY2goJHRoaXMtPkdldE11bHRpSW5wdXRMaXN0KCkgYXMgJG11bHRpX2lucHV0KQoJewoJCSRtdWx0aV9pbnB1dHNbJG11bHRpX2lucHV0WydpbnB1dF9pZCddXVsnZWRpdF9saW5rJ10gPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdlZGl0TXVsdGlJbnB1dCcsICRyZXR1cm5pZCwgCgkJCSRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZWRpdC5naWYnLCAnJywnJywnJywnc3lzdGVtaWNvbicpLCBhcnJheSgnaW5wdXRfaWQnPT4kbXVsdGlfaW5wdXRbJ2lucHV0X2lkJ10pKTsKCQkKCQkkbXVsdGlfaW5wdXRzWyRtdWx0aV9pbnB1dFsnaW5wdXRfaWQnXV1bJ25hbWVfbGluayddID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZWRpdE11bHRpSW5wdXQnLCAkcmV0dXJuaWQsICRtdWx0aV9pbnB1dFsnaW5wdXRfaWQnXSwgYXJyYXkoJ2lucHV0X2lkJz0+JG11bHRpX2lucHV0WydpbnB1dF9pZCddKSk7CgkJCgkJJG11bHRpX2lucHV0c1skbXVsdGlfaW5wdXRbJ2lucHV0X2lkJ11dWyd0ZW1wbGF0ZSddID0gc3Vic3RyKCRtdWx0aV9pbnB1dFsndHBsX25hbWUnXSxzdHJsZW4oJ211bHRpX2lucHV0XycpKTsKCQkKCQkkbXVsdGlfaW5wdXRzWyRtdWx0aV9pbnB1dFsnaW5wdXRfaWQnXV1bJ2RlbGV0ZV9saW5rJ10gPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWxldGVNdWx0aUlucHV0JywgJHJldHVybmlkLCAKCQkJJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9kZWxldGUuZ2lmJywgJycsJycsJycsJ3N5c3RlbWljb24nKSwKCQkJYXJyYXkoJ2lucHV0X2lkJz0+JG11bHRpX2lucHV0WydpbnB1dF9pZCddKSwkdGhpcy0+bGFuZygnY29uZmlybV9kZWxldGUnKSk7CgkJCgkJJG11bHRpX2lucHV0c1skbXVsdGlfaW5wdXRbJ2lucHV0X2lkJ11dWydjaGVja2JveCddID0gJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAKCQkJIm11bHRpX2lucHV0LSIuJG11bHRpX2lucHV0WydpbnB1dF9pZCddLCAkbXVsdGlfaW5wdXRbJ2lucHV0X2lkJ10sICcnKTsKCX0KCSR0aGlzLT5zbWFydHktPmFzc2lnbignc2VsZWN0YWxsJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsJ211bHRpX2lucHV0Jyx0cnVlLGZhbHNlLCAnaWQ9IicuJGlkLidtdWx0aV9pbnB1dCIgb25jbGljaz0iQWR2YW5jZWRDb250ZW50LlNlbGVjdEFsbCh0aGlzKSInKSk7CgkKCSR0aGlzLT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ211bHRpX2lucHV0X2FycmF5JywkbXVsdGlfaW5wdXRzKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignYWRkX211bHRpX2lucHV0JywgCgkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWRkTXVsdGlJbnB1dCcsICRyZXR1cm5pZCwgCgkJCSRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vbmV3b2JqZWN0LmdpZicsICcnLCcnLCcnLCdzeXN0ZW1pY29uJykgLiAKCQkJJyZuYnNwOycgLiAkdGhpcy0+bGFuZygnYWRkX211bHRpX2lucHV0JykpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRfZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAKCQknZGVsZXRlTXVsdGlJbnB1dCcsICRyZXR1cm5pZCwncG9zdCcsJ211bHRpcGFydC9mb3JtLWRhdGEnKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2VuZF9mb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N1Ym1pdF9idWxrYWN0aW9uJywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3N1Ym1pdF9idWxrYWN0aW9uJywkdGhpcy0+bGFuZygnZGVsZXRlX3NlbGVjdGVkJyksJycsJycsJHRoaXMtPmxhbmcoJ2NvbmZpcm1fZGVsZXRlX3NlbGVjdGVkJykpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfaWRfdGV4dCcsICR0aGlzLT5sYW5nKCdpbnB1dF9pZCcpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbigndGVtcGxhdGVfdGV4dCcsIGxhbmcoJ3RlbXBsYXRlJykpOwoJJHRhYnNbJ211bHRpX2lucHV0J11bJ3RhYmNvbnRlbnQnXSA9ICR0aGlzLT5TdGFydFRhYignbXVsdGlfaW5wdXQnKSAuCgkJJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnbXVsdGlJbnB1dFRhYi50cGwnKSAuIAoJCSR0aGlzLT5FbmRUYWIoKTsKfQoKaWYoJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTWFuYWdlIEFkdmFuY2VkQ29udGVudCBNdWx0aUlucHV0IFRlbXBsYXRlcycpKQp7CgkkdGFic1snbXVsdGlfaW5wdXRfdHBsJ11bJ3RhYmhlYWRlciddID0gJHRoaXMtPlNldFRhYkhlYWRlcignbXVsdGlfaW5wdXRfdHBsJywKCQkkdGhpcy0+bGFuZygnbXVsdGlfaW5wdXRfdHBsJyksCgkJKCRhY3RpdmVfdGFiPT0nbXVsdGlfaW5wdXRfdHBsJz90cnVlOicnKSk7CgkKCSRtdWx0aV9pbnB1dF90cGxzID0gYXJyYXkoKTsKCWZvcmVhY2goJHRoaXMtPkdldFRlbXBsYXRlcygnbXVsdGlfaW5wdXQnKSBhcyAkdHBsKQoJewoJCSRtdWx0aV9pbnB1dF90cGxzWyR0cGxbJ3RwbF9pZCddXVsnZWRpdF9saW5rJ10gPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdlZGl0TXVsdGlJbnB1dFRwbCcsICRyZXR1cm5pZCwgCgkJCSRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZWRpdC5naWYnLCAnJywnJywnJywnc3lzdGVtaWNvbicpLCAKCQkJYXJyYXkoJ3RwbF9pZCc9PiR0cGxbJ3RwbF9pZCddKSk7CgkJCgkJJG11bHRpX2lucHV0X3RwbHNbJHRwbFsndHBsX2lkJ11dWyduYW1lX2xpbmsnXSA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXRNdWx0aUlucHV0VHBsJywgJHJldHVybmlkLCAKCQkJJHRwbFsndHBsX25hbWUnXSwgCgkJCWFycmF5KCd0cGxfaWQnPT4kdHBsWyd0cGxfaWQnXSkpOwoJCQoJCSRtdWx0aV9pbnB1dF90cGxzWyR0cGxbJ3RwbF9pZCddXVsnZGVsZXRlX2xpbmsnXSA9ICcmbmJzcDsnOwoJCSRtdWx0aV9pbnB1dF90cGxzWyR0cGxbJ3RwbF9pZCddXVsnY2hlY2tib3gnXSA9ICcmbmJzcCc7CgkJaWYoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2RlZmF1bHRfbXVsdGlfaW5wdXRfdHBsJywnbXVsdGlfaW5wdXRfU2FtcGxlVGVtcGxhdGUnKSAhPSAkdHBsWyd0cGxfaWQnXSAmJiAhJHRwbFsnaXNfdXNlZCddKQoJCXsKCQkJJG11bHRpX2lucHV0X3RwbHNbJHRwbFsndHBsX2lkJ11dWydkZWxldGVfbGluayddID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAKCQkJCSdkZWxldGVNdWx0aUlucHV0VHBsJywgJHJldHVybmlkLCAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2RlbGV0ZS5naWYnLCAnJywnJywnJywnc3lzdGVtaWNvbicpLAoJCQkJYXJyYXkoJ3RwbF9pZCc9PiR0cGxbJ3RwbF9pZCddKSwkdGhpcy0+bGFuZygnY29uZmlybV9kZWxldGUnKSk7CgkJCSRtdWx0aV9pbnB1dF90cGxzWyR0cGxbJ3RwbF9pZCddXVsnY2hlY2tib3gnXSA9ICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgCgkJCQkibXVsdGlfaW5wdXRfdHBsLSIuJHRwbFsndHBsX2lkJ10sICR0cGxbJ3RwbF9pZCddLCAnJyk7CgkJfQoJCQoJCWlmKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZWZhdWx0X211bHRpX2lucHV0X3RwbCcsJ211bHRpX2lucHV0X1NhbXBsZVRlbXBsYXRlJykgIT0gJHRwbFsndHBsX2lkJ10pCgkJewoJCQkkbXVsdGlfaW5wdXRfdHBsc1skdHBsWyd0cGxfaWQnXV1bJ3NldF9kZWZhdWx0X2xpbmsnXSA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3NhdmVQcmVmcycsICRyZXR1cm5pZCwgCgkJCQkkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2ZhbHNlLmdpZicsICcnLCcnLCcnLCdzeXN0ZW1pY29uJyksIAoJCQkJYXJyYXkoJ3NldF9kZWZhdWx0Jz0+J211bHRpX2lucHV0JywndHBsX2lkJz0+JHRwbFsndHBsX2lkJ10sJ2FjdGl2ZV90YWInPT4nbXVsdGlfaW5wdXRfdHBsJykpOwoJCX0KCQllbHNlCgkJewoJCQkkbXVsdGlfaW5wdXRfdHBsc1skdHBsWyd0cGxfaWQnXV1bJ3NldF9kZWZhdWx0X2xpbmsnXSA9ICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vdHJ1ZS5naWYnLCAnJywnJywnJywnc3lzdGVtaWNvbicpOwoJCX0KCQkKCX0KCSR0aGlzLT5zbWFydHktPmFzc2lnbignc2VsZWN0YWxsJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsJ211bHRpX2lucHV0X3RwbCcsdHJ1ZSxmYWxzZSwgJ2lkPSInLiRpZC4nbXVsdGlfaW5wdXRfdHBsIiBvbmNsaWNrPSJBZHZhbmNlZENvbnRlbnQuU2VsZWN0QWxsKHRoaXMpIicpKTsKCQoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduX2J5X3JlZignbXVsdGlfaW5wdXRfdHBsX2FycmF5JywkbXVsdGlfaW5wdXRfdHBscyk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2FkZF9tdWx0aV9pbnB1dF90cGwnLCAKCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGRNdWx0aUlucHV0VHBsJywgJHJldHVybmlkLCAKCQkJJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9uZXdvYmplY3QuZ2lmJywgJycsJycsJycsJ3N5c3RlbWljb24nKSAuIAoJCQknJm5ic3A7JyAuICR0aGlzLT5sYW5nKCdhZGRfbXVsdGlfaW5wdXRfdHBsJykpKTsKCQoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXRfYnVsa2FjdGlvbicsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXRfYnVsa2FjdGlvbicsJHRoaXMtPmxhbmcoJ2RlbGV0ZV9zZWxlY3RlZCcpLCcnLCcnLCR0aGlzLT5sYW5nKCdjb25maXJtX2RlbGV0ZV9zZWxlY3RlZCcpKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RlbXBsYXRlX25hbWVfdGV4dCcsIGxhbmcoJ3RlbXBsYXRlJykpOwoJCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0X2Zvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgCgkJJ2RlbGV0ZU11bHRpSW5wdXRUcGwnLCAkcmV0dXJuaWQsJ3Bvc3QnLCdtdWx0aXBhcnQvZm9ybS1kYXRhJykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRfZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwoJCgkkdGFic1snbXVsdGlfaW5wdXRfdHBsJ11bJ3RhYmNvbnRlbnQnXSA9ICR0aGlzLT5TdGFydFRhYignbXVsdGlfaW5wdXRfdHBsJykgLgoJCSR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ211bHRpSW5wdXRUcGxUYWIudHBsJykgLiAKCQkkdGhpcy0+RW5kVGFiKCk7Cn0KCiR0aGlzLT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ3RhYnMnLCR0YWJzKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydF90YWJoZWFkZXJzJywkdGhpcy0+U3RhcnRUYWJIZWFkZXJzKCkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2VuZF90YWJoZWFkZXJzJywkdGhpcy0+RW5kVGFiSGVhZGVycygpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydF90YWJjb250ZW50JywkdGhpcy0+U3RhcnRUYWJDb250ZW50KCkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2VuZF90YWJjb250ZW50JywkdGhpcy0+RW5kVGFiQ29udGVudCgpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRfdGFiJywkdGhpcy0+RW5kVGFiKCkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21vZHVsZUlkJywgJGlkKTsKCmlmKGlzc2V0KCRwYXJhbXNbJ21lc3NhZ2UnXSkpCnsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignbWVzc2FnZScsICR0aGlzLT5sYW5nKCRwYXJhbXNbJ21lc3NhZ2UnXSwgKGlzc2V0KCRwYXJhbXNbJ29sZF90eXBlJ10pICYmIGlzc2V0KCRwYXJhbXNbJ25ld190eXBlJ10pID8gJHRoaXMtPmxhbmcoJHBhcmFtc1snb2xkX3R5cGUnXSkgLiAnLCcgLiAkdGhpcy0+bGFuZygkcGFyYW1zWyduZXdfdHlwZSddKSA6ICcnKSkpOwp9CgppZihpc3NldCgkcGFyYW1zWydlcnJvcm1lc3NhZ2UnXSkpCnsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignZXJyb3JtZXNzYWdlJywgJHRoaXMtPmxhbmcoJHBhcmFtc1snZXJyb3JtZXNzYWdlJ10sIChpc3NldCgkcGFyYW1zWydvbGRfdHlwZSddKSAmJiBpc3NldCgkcGFyYW1zWyduZXdfdHlwZSddKSA/ICR0aGlzLT5sYW5nKCRwYXJhbXNbJ29sZF90eXBlJ10pIC4gJywnIC4gJHRoaXMtPmxhbmcoJHBhcmFtc1snbmV3X3R5cGUnXSkgOiAnJykpKTsKfQoKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdkZWZhdWx0YWRtaW4udHBsJyk7Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/action.editMultiInput.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIE1vZHVsZSA6IEFkdmFuY2VkQ29udGVudCAoYykgMjAxMCBieSBHZW9yZyBCdXNjaCAoZ2VvcmcuYnVzY2hAZ214Lm5ldCkKIyAgICAgICAgICBhIGNvbnRlbnQgbWFuYWdlbWVudCB0b29sIGZvciBDTVMgTWFkZSBTaW1wbGUKIyAgICAgICAgICBUaGUgcHJvamVjdHMgaG9tZXBhZ2UgaXMgaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9jb250ZW50Mi8KIyAgICAgICAgICBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDQtMjAxMCBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgICAgICAgICAgVGhlIHByb2plY3RzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgVmVyc2lvbjogMC43LjEKIyBGaWxlICAgOiBhY3Rpb24uZWRpdE11bHRpSW5wdXQucGhwCiMgUHVycG9zZTogZWRpdHMgYSBtdWx0aSBpbnB1dCBibG9ja3R5cGUKIyBMaWNlbnNlOiBHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKaWYoIWlzX29iamVjdChjbXNtcygpKSkgZXhpdDsKCmlmKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNYW5hZ2UgQWR2YW5jZWRDb250ZW50IE11bHRpSW5wdXQnKSkKewoJcmV0dXJuICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCRpZCwkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdlcnJvcl9wZXJtaXNzaW9ucycpKTsKfQoKaWYoaXNzZXQoJHBhcmFtc1snY2FuY2VsJ10pKSAKewoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgYXJyYXkoJ2FjdGl2ZV90YWInPT4nbXVsdGlfaW5wdXQnKSk7Cn0KCiRlcnJvciA9IGZhbHNlOwokZXJyb3JtZXNzYWdlID0gJyc7CgokaW5wdXRfaWQgPSAnJzsKaWYoaXNzZXQoJHBhcmFtc1snaW5wdXRfaWQnXSkgJiYgIWVtcHR5KCRwYXJhbXNbJ2lucHV0X2lkJ10pKSAKewoJJGlucHV0X2lkID0gcHJlZ19yZXBsYWNlKCcvLSsvJywnXycsbXVuZ2Vfc3RyaW5nX3RvX3VybCh0cmltKCRwYXJhbXNbJ2lucHV0X2lkJ10pKSk7Cn0KCiRtdWx0aV9pbnB1dCA9ICR0aGlzLT5HZXRNdWx0aUlucHV0RnVsbCgkaW5wdXRfaWQpOwoKaWYoaXNzZXQoJHBhcmFtc1snaW5wdXRfZmllbGRzJ10pKSAKewoJJG11bHRpX2lucHV0WyRpbnB1dF9pZF1bJ2lucHV0X2ZpZWxkcyddID0gdHJpbSgkcGFyYW1zWydpbnB1dF9maWVsZHMnXSk7Cn0KCmlmKGlzc2V0KCRwYXJhbXNbJ2lucHV0X3RwbCddKSkgCnsKCSRtdWx0aV9pbnB1dFskaW5wdXRfaWRdWyd0cGxfbmFtZSddID0gJHBhcmFtc1snaW5wdXRfdHBsJ107Cn0KCiMjIyBkbyBhY3Rpb24gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgppZihpc3NldCgkcGFyYW1zWydzdWJtaXQnXSkgJiYgJHBhcmFtc1snc3VibWl0J109PXRydWUpIAp7CglpZigkaW5wdXRfaWQgPT0gJycpIAoJewoJCSRlcnJvciA9IHRydWU7CgkJJGVycm9ybWVzc2FnZSAuPSAkdGhpcy0+bGFuZygnZXJyb3JfaW5wdXRfaWQnKS4nPGJyIC8+JzsKCX0KCWlmKCRtdWx0aV9pbnB1dFskaW5wdXRfaWRdWydpbnB1dF9maWVsZHMnXSA9PSAnJykgCgl7CgkJJGVycm9yID0gdHJ1ZTsKCQkkZXJyb3JtZXNzYWdlIC49ICR0aGlzLT5sYW5nKCdlcnJvcl9pbnB1dF9maWVsZHMnKS4nPGJyIC8+JzsKCX0KCglpZigkZXJyb3I9PWZhbHNlKSAKCXsKCQlpZighJHRoaXMtPlVwZGF0ZU11bHRpSW5wdXQoJGlucHV0X2lkLCRtdWx0aV9pbnB1dFskaW5wdXRfaWRdWydpbnB1dF9maWVsZHMnXSkpCgkJewoJCQkkZXJyb3IgPSB0cnVlOwoJCQkkZXJyb3JtZXNzYWdlIC49ICR0aGlzLT5sYW5nKCdlcnJvcl91cGRhdGluZ19tdWx0aV9pbnB1dCcpLic8YnIgLz4nOwoJCX0KCQllbHNlIGlmKCEkdGhpcy0+VXBkYXRlVHBsQXNzb2MoJ211bHRpX2lucHV0JywkaW5wdXRfaWQsJG11bHRpX2lucHV0WyRpbnB1dF9pZF1bJ3RwbF9uYW1lJ10pKQoJCXsKCQkJJGVycm9yID0gdHJ1ZTsKCQkJJGVycm9ybWVzc2FnZSAuPSAkdGhpcy0+bGFuZygnZXJyb3JfdXBkYXRpbmdfbXVsdGlfaW5wdXRfYXNzb2NzJykuJzxiciAvPic7CgkJfQoJCWVsc2UKCQl7CgkJCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIGFycmF5KCdtZXNzYWdlJz0+J211bHRpX2lucHV0X3VwZGF0ZWQnLAoJCQkJJ2FjdGl2ZV90YWInPT4nbXVsdGlfaW5wdXQnLCdzdWJtaXQnPT50cnVlKSk7CgkJfQoJfQoKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi8vIHNtYXJ0eSBzdHVmZgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0X2Zvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgCgknZWRpdE11bHRpSW5wdXQnLCAkcmV0dXJuaWQsJ3Bvc3QnLCdtdWx0aXBhcnQvZm9ybS1kYXRhJykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRfZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOyR0aGlzLT5zbWFydHktPmFzc2lnbignc3VibWl0JywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3N1Ym1pdCcsIAoJbGFuZygnc3VibWl0JykpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjYW5jZWwnLAoJJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnY2FuY2VsJyxsYW5nKCdjYW5jZWwnKSkpOwoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9pZF90ZXh0JywkdGhpcy0+bGFuZygnaW5wdXRfaWQnKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfaWRfaW5wdXQnLCRpbnB1dF9pZCk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3RwbF90ZXh0JywkdGhpcy0+bGFuZygnbXVsdGlfaW5wdXRfdHBsJykpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3RwbF9pbnB1dCcsIAoJCSR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ2lucHV0X3RwbCcsICR0aGlzLT5HZXRUcGxMaXN0KCdtdWx0aV9pbnB1dCcpLCAnJywgJG11bHRpX2lucHV0WyRpbnB1dF9pZF1bJ3RwbF9uYW1lJ10pKTsKCiR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfZmllbGRzX3RleHQnLCR0aGlzLT5sYW5nKCdpbnB1dF9maWVsZHMnKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfZmllbGRzX2lucHV0JywKCSR0aGlzLT5DcmVhdGVUZXh0QXJlYShmYWxzZSwkaWQsJG11bHRpX2lucHV0WyRpbnB1dF9pZF1bJ2lucHV0X2ZpZWxkcyddLCdpbnB1dF9maWVsZHMnLCcnLCdpbnB1dF9maWVsZHMnKS4KCSR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsICdpbnB1dF9pZCcsJGlucHV0X2lkKSk7CgppZigkZXJyb3JtZXNzYWdlIT0nJykgCnsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignZXJyb3JtZXNzYWdlJywkZXJyb3JtZXNzYWdlKTsKfQoKLy8gRGlzcGxheSB0aGUgcG9wdWxhdGVkIHRlbXBsYXRlCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRkTXVsdGlJbnB1dC50cGwnKTsKPz4K]]></data>
	</file>
	<file>
	  <filename>/action.editMultiInputTpl.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIE1vZHVsZSA6IEFkdmFuY2VkQ29udGVudCAoYykgMjAxMCBieSBHZW9yZyBCdXNjaCAoZ2VvcmcuYnVzY2hAZ214Lm5ldCkKIyAgICAgICAgICBhIGNvbnRlbnQgbWFuYWdlbWVudCB0b29sIGZvciBDTVMgTWFkZSBTaW1wbGUKIyAgICAgICAgICBUaGUgcHJvamVjdHMgaG9tZXBhZ2UgaXMgaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9jb250ZW50Mi8KIyAgICAgICAgICBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDQtMjAxMCBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgICAgICAgICAgVGhlIHByb2plY3RzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgVmVyc2lvbjogMC43LjEKIyBGaWxlICAgOiBhY3Rpb24uYWRkTXVsdGlJbnB1dFRwbC5waHAKIyBQdXJwb3NlOiBlZGl0cyBhIHRlbXBsYXRlIGZvciBtdWx0aSBpbnB1dCBibG9ja3R5cGUKIyBMaWNlbnNlOiBHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKaWYoIWlzX29iamVjdChjbXNtcygpKSkgZXhpdDsKCmlmKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNYW5hZ2UgQWR2YW5jZWRDb250ZW50IE11bHRpSW5wdXQgVGVtcGxhdGUnKSkKewoJcmV0dXJuICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCRpZCwkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdlcnJvcl9wZXJtaXNzaW9ucycpKTsKfQoKaWYoaXNzZXQoJHBhcmFtc1snY2FuY2VsJ10pKSAKewoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgYXJyYXkoJ2FjdGl2ZV90YWInPT4nbXVsdGlfaW5wdXRfdHBsJykpOwp9CgokZXJyb3IgPSBmYWxzZTsKJGVycm9ybWVzc2FnZSA9ICcnOwoKaWYoIWlzc2V0KCRwYXJhbXNbJ3RwbF9pZCddKSkgCnsKCXJldHVybjsgLy8gVG9EbzogZXJyb3JtZXNzYWdlPwp9CgokdHBsX2lkID0gJHBhcmFtc1sndHBsX2lkJ107CgokdGVtcGxhdGUgPSAnJzsKaWYoaXNzZXQoJHBhcmFtc1sndGVtcGxhdGUnXSkpIAp7CgkkdGVtcGxhdGUgPSB0cmltKCRwYXJhbXNbJ3RlbXBsYXRlJ10pOwp9CmVsc2UKewoJJHRlbXBsYXRlID0gJHRoaXMtPkdldFRlbXBsYXRlKCR0cGxfaWQpOwp9CgojIyMgZG8gYWN0aW9uICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKaWYoaXNzZXQoJHBhcmFtc1snc3VibWl0J10pICYmICRwYXJhbXNbJ3N1Ym1pdCddPT10cnVlKSAKewoJaWYoJHRlbXBsYXRlID09ICcnKSAKCXsKCQkkZXJyb3IgPSB0cnVlOwoJCSRlcnJvcm1lc3NhZ2UgLj0gJHRoaXMtPmxhbmcoJ2Vycm9yX3RlbXBsYXRlJykuJzxiciAvPic7Cgl9CglpZigkZXJyb3I9PWZhbHNlKSAKCXsKCQkkdGhpcy0+U2V0VGVtcGxhdGUoJHRwbF9pZCwgJHRlbXBsYXRlKTsKCQkkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCBhcnJheSgnbWVzc2FnZSc9PidtdWx0aV9pbnB1dF90cGxfdXBkYXRlZCcsCgkJCSdhY3RpdmVfdGFiJz0+J211bHRpX2lucHV0X3RwbCcsJ3N1Ym1pdCc9PnRydWUpKTsKCX0KfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi8vIHNtYXJ0eSBzdHVmZgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0X2Zvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgCgknZWRpdE11bHRpSW5wdXRUcGwnLCAkcmV0dXJuaWQsJ3Bvc3QnLCdtdWx0aXBhcnQvZm9ybS1kYXRhJykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRfZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOyR0aGlzLT5zbWFydHktPmFzc2lnbignc3VibWl0JywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3N1Ym1pdCcsIAoJbGFuZygnc3VibWl0JykpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjYW5jZWwnLAoJJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnY2FuY2VsJyxsYW5nKCdjYW5jZWwnKSkpOwoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0cGxfbmFtZV90ZXh0JywkdGhpcy0+bGFuZygndHBsX25hbWUnKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbigndHBsX25hbWVfaW5wdXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCAndHBsX2lkJywgJHRwbF9pZCkgLiBzdWJzdHIoJHRwbF9pZCxzdHJsZW4oJ211bHRpX2lucHV0XycpKSwgNjQsIDEyOCk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RlbXBsYXRlX3RleHQnLGxhbmcoJ3RlbXBsYXRlJykpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RlbXBsYXRlX2lucHV0JywKCSR0aGlzLT5DcmVhdGVUZXh0QXJlYShmYWxzZSwkaWQsJHRlbXBsYXRlLCd0ZW1wbGF0ZScsJycsJ3RlbXBsYXRlJykpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2hlbHBfdGV4dCcsJHRoaXMtPmxhbmcoJ2hlbHBfdHBsX3ZhcnMnKSk7CmlmKCRlcnJvcm1lc3NhZ2UhPScnKSAKewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlcnJvcm1lc3NhZ2UnLCRlcnJvcm1lc3NhZ2UpOwp9CgovLyBEaXNwbGF5IHRoZSBwb3B1bGF0ZWQgdGVtcGxhdGUKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZGRNdWx0aUlucHV0VHBsLnRwbCcpOwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/action.savePrefs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIE1vZHVsZSA6IEFkdmFuY2VkQ29udGVudCAoYykgMjAxMCBieSBHZW9yZyBCdXNjaCAoZ2VvcmcuYnVzY2hAZ214Lm5ldCkKIyAgICAgICAgICBhIGNvbnRlbnQgbWFuYWdlbWVudCB0b29sIGZvciBDTVMgTWFkZSBTaW1wbGUKIyAgICAgICAgICBUaGUgcHJvamVjdHMgaG9tZXBhZ2UgaXMgZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2NvbnRlbnQyLwojICAgICAgICAgIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNC0yMDEwIGJ5IFRlZCBLdWxwCiMgICAgICAgICAgVGhlIHByb2plY3RzIGhvbWVwYWdlIGlzOiBjbXNtYWRlc2ltcGxlLm9yZwojIFZlcnNpb246IDAuNy4xCiMgRmlsZSAgIDogYWN0aW9uLnNhdmVQcmVmcy5waHAKIyBQdXJwb3NlOiBzYXZlcyB0aGUgcHJlZmVyZW5jZXMgaW4gdGhlIGRhdGFiYXNlCiMgTGljZW5zZTogR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmlmKCFpc19vYmplY3QoY21zbXMoKSkpIGV4aXQ7CgppZihpc3NldCgkcGFyYW1zWydzdWJtaXQnXSkgfHwgaXNzZXQoJHBhcmFtc1snc3VibWl0X3ByZWZzJ10pKSAKewoJaWYoaXNzZXQoJHBhcmFtc1sndW5pbnN0YWxsX2FjdGlvbiddKSkKCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgndW5pbnN0YWxsX2FjdGlvbicsICRwYXJhbXNbJ3VuaW5zdGFsbF9hY3Rpb24nXSk7CgkKCWlmKGlzc2V0KCRwYXJhbXNbJ2ZldV9hY2Nlc3MnXSkpCgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2ZldV9hY2Nlc3MnLCBpbXBsb2RlKCc7JywkdGhpcy0+Q2xlYW5BcnJheSgkcGFyYW1zWydmZXVfYWNjZXNzJ10pKSk7CgkKCWlmKGlzc2V0KCRwYXJhbXNbJ3JlZGlyZWN0X3BhZ2UnXSkpCgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ3JlZGlyZWN0X3BhZ2UnLCAkcGFyYW1zWydyZWRpcmVjdF9wYWdlJ10pOwoJCglpZihpc3NldCgkcGFyYW1zWydyZWRpcmVjdF9wYXJhbXMnXSkpCgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ3JlZGlyZWN0X3BhcmFtcycsICRwYXJhbXNbJ3JlZGlyZWN0X3BhcmFtcyddKTsKCQoJaWYoaXNzZXQoJHBhcmFtc1snZXZhbHVhdGVfc21hcnR5J10pKQoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdldmFsdWF0ZV9zbWFydHknLCAkcGFyYW1zWydldmFsdWF0ZV9zbWFydHknXSk7CgkKCWlmKGlzc2V0KCRwYXJhbXNbJ2ZldV9hY3Rpb24nXSkpCgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2ZldV9hY3Rpb24nLCAkcGFyYW1zWydmZXVfYWN0aW9uJ10pOwoJCglpZihpc3NldCgkcGFyYW1zWydibG9ja19kaXNwbGF5X3NldHRpbmdzJ10pKQoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdibG9ja19kaXNwbGF5X3NldHRpbmdzJywgJHBhcmFtc1snYmxvY2tfZGlzcGxheV9zZXR0aW5ncyddKTsKCQoJaWYoaXNzZXQoJHBhcmFtc1snbWVzc2FnZV9kaXNwbGF5X3NldHRpbmdzJ10pKQoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtZXNzYWdlX2Rpc3BsYXlfc2V0dGluZ3MnLCAkcGFyYW1zWydtZXNzYWdlX2Rpc3BsYXlfc2V0dGluZ3MnXSk7CgkKCWlmKGlzc2V0KCRwYXJhbXNbJ2dyb3VwX2Rpc3BsYXlfc2V0dGluZ3MnXSkpCgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2dyb3VwX2Rpc3BsYXlfc2V0dGluZ3MnLCAkcGFyYW1zWydncm91cF9kaXNwbGF5X3NldHRpbmdzJ10pOwoJCglpZihpc3NldCgkcGFyYW1zWydzaG93X2FkdmFuY2VkY29udGVudF9vcHRpb25zJ10pKQoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdzaG93X2FkdmFuY2VkY29udGVudF9vcHRpb25zJywgJHBhcmFtc1snc2hvd19hZHZhbmNlZGNvbnRlbnRfb3B0aW9ucyddKTsKCQoJI2lmKGlzc2V0KCRwYXJhbXNbJ3VzZV9jb250ZW50dHlwZSddKSkKCSMJJHRoaXMtPlNldFByZWZlcmVuY2UoJ3VzZV9jb250ZW50dHlwZScsICRwYXJhbXNbJ3VzZV9jb250ZW50dHlwZSddKTsKfQppZihpc3NldCgkcGFyYW1zWydpdGVtX3R5cGUnXSkgJiYgaXNzZXQoJHBhcmFtc1snaXRlbV9kaXNwbGF5J10pKSAKewoJJHRoaXMtPlNldEl0ZW1EaXNwbGF5KCRwYXJhbXNbJ2l0ZW1fdHlwZSddLCAkcGFyYW1zWydpdGVtX2lkJ10sICRwYXJhbXNbJ2NvbnRlbnRfaWQnXSwgJHBhcmFtc1sndGVtcGxhdGVfaWQnXSwgJHBhcmFtc1snaXRlbV9kaXNwbGF5J10pOwp9CmlmKGlzc2V0KCRwYXJhbXNbJ3NldF9kZWZhdWx0J10pKQp7CgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGVmYXVsdF8nLiRwYXJhbXNbJ3NldF9kZWZhdWx0J10uJ190cGwnLCAkcGFyYW1zWyd0cGxfaWQnXSk7Cn0KaWYoaXNzZXQoJHBhcmFtc1snYWpheCddKSkgCnsKCWVjaG8gJzxkaXYgY2xhc3M9InBhZ2VtY29udGFpbmVyIj48cCBjbGFzcz0icGFnZW1lc3NhZ2UiPicuJHRoaXMtPmxhbmcoJ3ByZWZzdXBkYXRlZCcpLic8L3A+PC9kaXY+JzsKCWV4aXQ7Cn0KZWxzZSAKewoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgYXJyYXkoJ21lc3NhZ2UnID0+ICdwcmVmc3VwZGF0ZWQnLCAnc3VibWl0JyA9PiB0cnVlKSk7Cn0KPz4K]]></data>
	</file>
	<file>
	  <filename>/AdvancedContent.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIE1vZHVsZSA6IEFkdmFuY2VkQ29udGVudCAoYykgMjAxMCBieSBHZW9yZyBCdXNjaCAoZ2VvcmcuYnVzY2hAZ214Lm5ldCkKIyAgICAgICAgICBhIGNvbnRlbnQgbWFuYWdlbWVudCB0b29sIGZvciBDTVMgTWFkZSBTaW1wbGUKIyAgICAgICAgICBUaGUgcHJvamVjdHMgaG9tZXBhZ2UgaXMgZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2NvbnRlbnQyLwojICAgICAgICAgIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNC0yMDEwIGJ5IFRlZCBLdWxwCiMgICAgICAgICAgVGhlIHByb2plY3RzIGhvbWVwYWdlIGlzOiBjbXNtYWRlc2ltcGxlLm9yZwojIFZlcnNpb246IDAuNy4xCiMgRmlsZSAgIDogQWR2YW5jZWRDb250ZW50Lm1vZHVsZS5waHAKIyBQdXJwb3NlOiBpbml0aWFsIG1vZHVsZSBjbGFzcy4gdGhpcyBpcyB0aGUgaW50ZXJmYWNlIHRvIHRoZSBNb2R1bGUgQVBJCiMgTGljZW5zZTogR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmNsYXNzIEFkdmFuY2VkQ29udGVudCBleHRlbmRzIENNU01vZHVsZSAKewoJLyoqCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqIEB2YXIgYXJyYXkKCSAqLwoJcHJpdmF0ZSAkX2Rpc3BsYXlTZXR0aW5ncyA9IGFycmF5KCk7Cglwcml2YXRlICRfY29udGVudFR5cGUgICAgID0gZmFsc2U7Cglwcml2YXRlICRfZmV1R3JvdXBzICAgICAgID0gZmFsc2U7CgkKCWZ1bmN0aW9uIEFkdmFuY2VkQ29udGVudCgpIAoJewoJCXBhcmVudDo6Q01TTW9kdWxlKCk7CgkJJHRoaXMtPlJlZ2lzdGVyQ29udGVudFR5cGUoJ0NvbnRlbnQyJywgZGlybmFtZShfX0ZJTEVfXykgLiAKCQkJRElSRUNUT1JZX1NFUEFSQVRPUiAuICdjb250ZW50dHlwZS5Db250ZW50Mi5waHAnLCAnQWR2YW5jZWRDb250ZW50Jyk7Cgl9CgkKCWZ1bmN0aW9uIEdldE5hbWUoKSAKCXsKCQlyZXR1cm4gJ0FkdmFuY2VkQ29udGVudCc7Cgl9CgkKCWZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpIAoJewoJCXJldHVybiAkdGhpcy0+TGFuZygnQWR2YW5jZWRDb250ZW50Jyk7Cgl9CgkKCWZ1bmN0aW9uIEdldFZlcnNpb24oKSAKCXsKCQlyZXR1cm4gJzAuNy4xJzsKCX0KCQoJZnVuY3Rpb24gR2V0SGVscCgpIAoJewoJCSMkcGF0aCA9IGRpcm5hbWUoX19GSUxFX18pIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdkb2MnIC4gRElSRUNUT1JZX1NFUEFSQVRPUjsKCQkjaWYoZmlsZV9leGlzdHMoJHBhdGggLiAnaGVscF8nIC4gJHRoaXMtPmN1cmxhbmcgLiAnLmh0bWwnKSkKCQkjCXJldHVybiBmaWxlX2dldF9jb250ZW50cygkcGF0aCAuICdoZWxwXycgLiAkdGhpcy0+Y3VybGFuZyAuICcuaHRtbCcpOwoJCSNlbHNlCgkJIwlyZXR1cm4gZmlsZV9nZXRfY29udGVudHMoJHBhdGggLiAnaGVscF9lbl9VUy5odG1sJyk7CgkJcmV0dXJuICR0aGlzLT5sYW5nKCdoZWxwJyk7Cgl9CgkKCWZ1bmN0aW9uIEdldEF1dGhvcigpIAoJewoJCXJldHVybiAnR2VvcmcgQnVzY2ggKE5hTiknOwoJfQoJCglmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpIAoJewoJCXJldHVybjsKCX0KCQoJZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkgCgl7CgkJIyRjaGFuZ2Vsb2cgPSBkaXJuYW1lKF9fRklMRV9fKSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAKCQkjCSdkb2MnIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdjaGFuZ2Vsb2cuaHRtbCc7CgkJI2lmKGZpbGVfZXhpc3RzKCRjaGFuZ2Vsb2cpKQoJCSMJcmV0dXJuIGZpbGVfZ2V0X2NvbnRlbnRzKCRjaGFuZ2Vsb2cpOwoJCXJldHVybiAkdGhpcy0+bGFuZygnY2hhbmdlbG9nJyk7Cgl9CgkKCWZ1bmN0aW9uIEhhc0NvbnRlbnRUeXBlKCkgCgl7CgkJcmV0dXJuIHRydWU7Cgl9CgkKCWZ1bmN0aW9uIElzUGx1Z2luTW9kdWxlKCkgCgl7CgkJcmV0dXJuIHRydWU7Cgl9CgkKCWZ1bmN0aW9uIEhhc0FkbWluKCkgCgl7CgkJcmV0dXJuIHRydWU7Cgl9CgkKCWZ1bmN0aW9uIEdldEFkbWluU2VjdGlvbigpIAoJewoJCXJldHVybiAnZXh0ZW5zaW9ucyc7Cgl9CgkKCWZ1bmN0aW9uIEdldEFkbWluRGVzY3JpcHRpb24oKSAKCXsKCQlyZXR1cm4gJHRoaXMtPmxhbmcoJ2FkbWluZGVzY3JpcHRpb24nKTsKCX0KCQoJZnVuY3Rpb24gVmlzaWJsZVRvQWRtaW5Vc2VyKCkgCgl7CgkJcmV0dXJuICR0aGlzLT5DaGVja3Blcm1pc3Npb24oJ01hbmFnZSBBZHZhbmNlZENvbnRlbnQnKTsKCX0KCQoJZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKSAKCXsKCQlyZXR1cm4gIjEuOS4xIjsKCX0KCQoJZnVuY3Rpb24gTWF4aW11bUNNU1ZlcnNpb24oKSAKCXsKCQlyZXR1cm4gIjEuOTkiOwoJfQoJCglmdW5jdGlvbiBJbnN0YWxsUG9zdE1lc3NhZ2UoKSAKCXsKCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3RpbnN0YWxsJywgJHRoaXMtPkdldFZlcnNpb24oKSk7Cgl9CgkKCWZ1bmN0aW9uIFVuaW5zdGFsbFBvc3RNZXNzYWdlKCkgCgl7CgkJcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0dW5pbnN0YWxsJywgJHRoaXMtPkdldFZlcnNpb24oKSk7Cgl9CgkKCWZ1bmN0aW9uIFVuaW5zdGFsbFByZU1lc3NhZ2UoKSAKCXsKCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ2NvbmZpcm11bmluc3RhbGwnKTsKCX0KCQoJZnVuY3Rpb24gSGFuZGxlc0V2ZW50cygpIAoJewoJCXJldHVybiB0cnVlOwoJfQoJCglmdW5jdGlvbiBEb0FjdGlvbigkYWN0aW9uLCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCA9ICcnKSAKCXsKCQlzd2l0Y2goJGFjdGlvbikgewoJCQkKCQkJY2FzZSAnaW1wb3J0cGFnZXMnOgoJCQkJCgkJCQlpZihpc3NldCgkcGFyYW1zWydvbGRfdHlwZSddKSAmJiBpc3NldCgkcGFyYW1zWyduZXdfdHlwZSddKQoJCQkJJiYgJHBhcmFtc1snb2xkX3R5cGUnXSAhPSAnJyAmJiAkcGFyYW1zWyduZXdfdHlwZSddICE9ICcnCgkJCQkmJiAkcGFyYW1zWyduZXdfdHlwZSddICE9ICRwYXJhbXNbJ29sZF90eXBlJ10KCQkJCSYmICgkcGFyYW1zWyduZXdfdHlwZSddID09ICdjb250ZW50JyB8fCAkcGFyYW1zWyduZXdfdHlwZSddID09ICdjb250ZW50MicpCgkJCQkmJiAoJHBhcmFtc1snb2xkX3R5cGUnXSA9PSAnY29udGVudCcgfHwgJHBhcmFtc1snb2xkX3R5cGUnXSA9PSAnY29udGVudDInKSkgCgkJCQl7CgkJCQkJJGRiID0mICR0aGlzLT5HZXREYigpOwoJCQkJCSRxdWVyeSAgICA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuImNvbnRlbnQgU0VUIHR5cGUgPSA/IFdIRVJFIHR5cGUgPSA/IjsKCQkJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkcGFyYW1zWyduZXdfdHlwZSddLCRwYXJhbXNbJ29sZF90eXBlJ10pKTsKCQkJCQlpZigkZGJyZXN1bHQpIAoJCQkJCXsKCQkJCQkJJG1lc3NhZ2UgPSAkdGhpcy0+bGFuZygnc3VjY2Vzc19pbXBvcnRwYWdlcycsJHRoaXMtPmxhbmcoJHBhcmFtc1snb2xkX3R5cGUnXSksICR0aGlzLT5sYW5nKCRwYXJhbXNbJ25ld190eXBlJ10pKTsKCQkJCQkJJF9wYXJhbXMgID0gYXJyYXkoCgkJCQkJCQknbmV3X3R5cGUnID0+ICRwYXJhbXNbJ25ld190eXBlJ10sIAoJCQkJCQkJJ29sZF90eXBlJyA9PiAkcGFyYW1zWydvbGRfdHlwZSddLCAKCQkJCQkJCSdtZXNzYWdlJyAgPT4gJ3N1Y2Nlc3NfaW1wb3J0cGFnZXMnKTsKCQkJCQl9CgkJCQkJZWxzZSAKCQkJCQl7CgkJCQkJCSRfcGFyYW1zID0gYXJyYXkoCgkJCQkJCQknbmV3X3R5cGUnICAgICA9PiAkcGFyYW1zWyduZXdfdHlwZSddLCAKCQkJCQkJCSdvbGRfdHlwZScgICAgID0+ICRwYXJhbXNbJ29sZF90eXBlJ10sIAoJCQkJCQkJJ2Vycm9ybWVzc2FnZScgPT4gJ2Vycm9yX2ltcG9ydHBhZ2VzJyk7CgkJCQkJCSRlcnJvcm1lc3NhZ2UgPSAkdGhpcy0+bGFuZygnZXJyb3JfaW1wb3J0cGFnZXMnLCR0aGlzLT5sYW5nKCRwYXJhbXNbJ29sZF90eXBlJ10pLCAkdGhpcy0+bGFuZygkcGFyYW1zWyduZXdfdHlwZSddKSk7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZSAKCQkJCXsKCQkJCQkkX3BhcmFtcyAgICAgID0gYXJyYXkoJ2Vycm9ybWVzc2FnZScgPT4gJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcycpOwoJCQkJCSRlcnJvcm1lc3NhZ2UgPSAkdGhpcy0+bGFuZygnZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJywgJ25ld190eXBlLCBvbGRfdHlwZScpOwoJCQkJfQoJCQkJCgkJCQlpZihpc3NldCgkcGFyYW1zWydhamF4J10pKSAKCQkJCXsKCQkJCQlAb2JfZW5kX2NsZWFuKCk7CgkJCQkJQG9iX3N0YXJ0KCk7CgkJCQkJaWYoaXNzZXQoJGVycm9ybWVzc2FnZSkpIAoJCQkJCXsKCQkJCQkJZWNobyAnPGRpdiBjbGFzcz0icGFnZWVycm9yY29udGFpbmVyIj48dWwgY2xhc3M9InBhZ2VlcnJvciI+PGxpPicuICRlcnJvcm1lc3NhZ2UgLiAnPC9saT48L3VsPjwvZGl2Pic7CgkJCQkJfQoJCQkJCWlmKGlzc2V0KCRtZXNzYWdlKSkgCgkJCQkJewoJCQkJCQllY2hvICc8ZGl2IGNsYXNzPSJwYWdlbWNvbnRhaW5lciI+PHAgY2xhc3M9InBhZ2VtZXNzYWdlIj4nLiRtZXNzYWdlLic8L3A+PC9kaXY+JzsKCQkJCQl9CgkJCQkJb2JfZW5kX2ZsdXNoKCk7CgkJCQkJZXhpdDsKCQkJCX0KCQkJCSRfcGFyYW1zWydzdWJtaXQnXSA9IHRydWU7CgkJCQkkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAkX3BhcmFtcyk7CgkJCQlicmVhazsKCQkJCgkJCWNhc2UgJ2RlbGV0ZU11bHRpSW5wdXQnOgoJCQkJJGl0ZW1zICAgICAgICA9IGFycmF5KCk7CgkJCQkkX3BhcmFtcyAgICAgID0gYXJyYXkoKTsKCQkJCSRtZXNzYWdlICAgICAgPSAnJzsKCQkJCSRlcnJvcm1lc3NhZ2UgPSAnJzsKCQkJCWlmKGlzc2V0KCRwYXJhbXNbJ2lucHV0X2lkJ10pKQoJCQkJewoJCQkJCSRpdGVtc1tdID0gJHBhcmFtc1snaW5wdXRfaWQnXTsKCQkJCX0KCQkJCWVsc2UgaWYoaXNzZXQoJHBhcmFtc1snc3VibWl0X2J1bGthY3Rpb24nXSkpCgkJCQl7CgkJCQkJZm9yZWFjaCgkcGFyYW1zIGFzICRwYXJhbV9uYW1lID0+ICRwYXJhbV92YWx1ZSkKCQkJCQl7CgkJCQkJCWlmKHN0YXJ0c3dpdGgoJHBhcmFtX25hbWUsJ211bHRpX2lucHV0LScpKQoJCQkJCQl7CgkJCQkJCQkkaXRlbXNbXSA9ICRwYXJhbV92YWx1ZTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJCWlmKCR0aGlzLT5EZWxldGVNdWx0aUlucHV0KCRpdGVtcykpCgkJCQl7CgkJCQkJJF9wYXJhbXNbJ21lc3NhZ2UnXSA9ICdtdWx0aV9pbnB1dF9kZWxldGVkJzsKCQkJCQkkbWVzc2FnZSAuPSAkdGhpcy0+bGFuZygnbXVsdGlfaW5wdXRfZGVsZXRlZCcpIC4gIjxiciAvPiI7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJF9wYXJhbXNbJ2Vycm9ybWVzc2FnZSddID0gJ2Vycm9yX2RlbGV0ZV9tdWx0aV9pbnB1dCc7CgkJCQkJJGVycm9ybWVzc2FnZSAuPSAkdGhpcy0+bGFuZygnZXJyb3JfZGVsZXRlX211bHRpX2lucHV0JykgLiAiPGJyIC8+IjsKCQkJCX0KCQkJCWlmKCEkdGhpcy0+RGVsZXRlVHBsQXNzb2MoJ211bHRpX2lucHV0JywkaXRlbXMpKQoJCQkJewoJCQkJCSRfcGFyYW1zWydtZXNzYWdlJ10gPSAnZXJyb3JfZGVsZXRlX211bHRpX2lucHV0X3RwbF9hc3NvY3MnOwoJCQkJCSRlcnJvcm1lc3NhZ2UgLj0gJHRoaXMtPmxhbmcoJ2Vycm9yX2RlbGV0ZV9tdWx0aV9pbnB1dF90cGxfYXNzb2NzJykuICI8YnIgLz4iOwoJCQkJfQoJCQkJJF9wYXJhbXNbJ2FjdGl2ZV90YWInXSA9ICdtdWx0aV9pbnB1dCc7CgkJCQkKCQkJCWlmKGlzc2V0KCRwYXJhbXNbJ2FqYXgnXSkpIAoJCQkJewoJCQkJCUBvYl9lbmRfY2xlYW4oKTsKCQkJCQlAb2Jfc3RhcnQoKTsKCQkJCQlpZigkZXJyb3JtZXNzYWdlKSAKCQkJCQl7CgkJCQkJCWVjaG8gJzxkaXYgY2xhc3M9InBhZ2VlcnJvcmNvbnRhaW5lciI+PHVsIGNsYXNzPSJwYWdlZXJyb3IiPjxsaT4nLiAkZXJyb3JtZXNzYWdlIC4gJzwvbGk+PC91bD48L2Rpdj4nOwoJCQkJCX0KCQkJCQlpZigkbWVzc2FnZSkgCgkJCQkJewoJCQkJCQllY2hvICc8ZGl2IGNsYXNzPSJwYWdlbWNvbnRhaW5lciI+PHAgY2xhc3M9InBhZ2VtZXNzYWdlIj4nLiRtZXNzYWdlLic8L3A+PC9kaXY+JzsKCQkJCQl9CgkJCQkJb2JfZW5kX2ZsdXNoKCk7CgkJCQkJZXhpdDsKCQkJCX0KCQkJCQoJCQkJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJF9wYXJhbXMpOwoJCQkJYnJlYWs7CgkJCQoJCQljYXNlICdkZWxldGVNdWx0aUlucHV0VHBsJzoKCQkJCSRfcGFyYW1zID0gYXJyYXkoKTsKCQkJCSRtZXNzYWdlICAgICAgPSAnJzsKCQkJCSRlcnJvcm1lc3NhZ2UgPSAnJzsKCQkJCWlmKGlzc2V0KCRwYXJhbXNbJ3RwbF9pZCddKSkKCQkJCXsKCQkJCQkkdGhpcy0+RGVsZXRlVGVtcGxhdGUoJHBhcmFtc1sndHBsX2lkJ10pOwoJCQkJCSRfcGFyYW1zWydtZXNzYWdlJ10gPSAnbXVsdGlfaW5wdXRfdHBsX2RlbGV0ZWQnOwoJCQkJCSRtZXNzYWdlIC49ICR0aGlzLT5sYW5nKCdtdWx0aV9pbnB1dF90cGxfZGVsZXRlZCcpIC4gIjxiciAvPiI7CgkJCQl9CgkJCQllbHNlIGlmKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdF9idWxrYWN0aW9uJ10pKQoJCQkJewoJCQkJCWZvcmVhY2goJHBhcmFtcyBhcyAkcGFyYW1fbmFtZSA9PiAkcGFyYW1fdmFsdWUpCgkJCQkJewoJCQkJCQlpZihzdGFydHN3aXRoKCRwYXJhbV9uYW1lLCdtdWx0aV9pbnB1dF90cGwtJykpCgkJCQkJCXsKCQkJCQkJCSR0aGlzLT5EZWxldGVUZW1wbGF0ZSgkcGFyYW1fdmFsdWUpOwoJCQkJCQkJJF9wYXJhbXNbJ21lc3NhZ2UnXSA9ICdtdWx0aV9pbnB1dF90cGxfZGVsZXRlZCc7CgkJCQkJCQkkbWVzc2FnZSAuPSAkdGhpcy0+bGFuZygnbXVsdGlfaW5wdXRfdHBsX2RlbGV0ZWQnKSAuICI8YnIgLz4iOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQkJJF9wYXJhbXNbJ2FjdGl2ZV90YWInXSA9ICdtdWx0aV9pbnB1dF90cGwnOwoJCQkJaWYoaXNzZXQoJHBhcmFtc1snYWpheCddKSkgCgkJCQl7CgkJCQkJQG9iX2VuZF9jbGVhbigpOwoJCQkJCUBvYl9zdGFydCgpOwoJCQkJCWlmKCRlcnJvcm1lc3NhZ2UpIAoJCQkJCXsKCQkJCQkJZWNobyAnPGRpdiBjbGFzcz0icGFnZWVycm9yY29udGFpbmVyIj48dWwgY2xhc3M9InBhZ2VlcnJvciI+PGxpPicuICRlcnJvcm1lc3NhZ2UgLiAnPC9saT48L3VsPjwvZGl2Pic7CgkJCQkJfQoJCQkJCWlmKCRtZXNzYWdlKSAKCQkJCQl7CgkJCQkJCWVjaG8gJzxkaXYgY2xhc3M9InBhZ2VtY29udGFpbmVyIj48cCBjbGFzcz0icGFnZW1lc3NhZ2UiPicuJG1lc3NhZ2UuJzwvcD48L2Rpdj4nOwoJCQkJCX0KCQkJCQlvYl9lbmRfZmx1c2goKTsKCQkJCQlleGl0OwoJCQkJfQoJCQkJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJF9wYXJhbXMpOwoJCQkJYnJlYWs7CgkJCQkKCQkJY2FzZSAnZGVmYXVsdCc6CgkJCWNhc2UgJ3NhdmVQcmVmcyc6CgkJCWNhc2UgJ2RlZmF1bHRhZG1pbic6CgkJCWNhc2UgJ2FkZE11bHRpSW5wdXQnOgoJCQljYXNlICdlZGl0TXVsdGlJbnB1dCc6CgkJCWNhc2UgJ2FkZE11bHRpSW5wdXRUcGwnOgoJCQljYXNlICdlZGl0TXVsdGlJbnB1dFRwbCc6CgkJCQlwYXJlbnQ6OkRvQWN0aW9uKCRhY3Rpb24sICRpZCwgJHBhcmFtcywgJHJldHVybmlkKTsKCQkJCWJyZWFrOwoJCQlkZWZhdWx0OiBicmVhazsKCQl9Cgl9CgkKCWZ1bmN0aW9uIERvRXZlbnQoJG9yaWdpbmF0b3IsICRldmVudG5hbWUsICYkcGFyYW1zKSAKCXsKCQkkY29uZmlnID0gY21zbXMoKS0+R2V0Q29uZmlnKCk7CgkJJHJlZGlyZWN0ID0gZmFsc2U7CgkJJGRiID0mICR0aGlzLT5HZXREYigpOwoJCS8vIGdldCBhbGwgY29udGVudCBvZiB0eXBlIGFkdmFuY2VkIHRoYXQgbmVlZCB0byBiZSBzZXQgdG8gYWN0aXZlL2luYWN0aXZlCgkJJHF1ZXJ5ID0gIlNFTEVDVCBDLmNvbnRlbnRfaWQsIEMuYWN0aXZlCgkJCUZST00gIiAuIGNtc19kYl9wcmVmaXgoKSAuICJjb250ZW50IEMgCgkJCUxFRlQgSk9JTiAiIC4gY21zX2RiX3ByZWZpeCgpIC4gImNvbnRlbnRfcHJvcHMgVVNFX0VYUAoJCQkJT04gVVNFX0VYUC5jb250ZW50X2lkID0gQy5jb250ZW50X2lkCgkJCUxFRlQgSk9JTiAiIC4gY21zX2RiX3ByZWZpeCgpIC4gImNvbnRlbnRfcHJvcHMgU1RBUlRfREFURQoJCQkJT04gU1RBUlRfREFURS5jb250ZW50X2lkID0gQy5jb250ZW50X2lkCgkJCUxFRlQgSk9JTiAiIC4gY21zX2RiX3ByZWZpeCgpIC4gImNvbnRlbnRfcHJvcHMgRU5EX0RBVEUKCQkJCU9OIEVORF9EQVRFLmNvbnRlbnRfaWQgPSBDLmNvbnRlbnRfaWQKCQkJV0hFUkUgCgkJCQlDLnR5cGUgPSA/IEFORCAKCQkJCVVTRV9FWFAucHJvcF9uYW1lID0gPyBBTkQgCgkJCQlVU0VfRVhQLmNvbnRlbnQgPSA/IEFORCAoCgkJCQkJKAoJCQkJCQlTVEFSVF9EQVRFLnByb3BfbmFtZSA9ID8gQU5EIAoJCQkJCQlTVEFSVF9EQVRFLmNvbnRlbnQgPD0gPyBBTkQgCgkJCQkJCUVORF9EQVRFLnByb3BfbmFtZSA9ID8gQU5EIAoJCQkJCQlFTkRfREFURS5jb250ZW50ID4gPyBBTkQKCQkJCQkJQy5hY3RpdmUgPSA/CgkJCQkJKQoJCQkJCU9SCgkJCQkJKAoJCQkJCQlFTkRfREFURS5wcm9wX25hbWUgPSA/IEFORCAKCQkJCQkJRU5EX0RBVEUuY29udGVudCA8PSA/IEFORAoJCQkJCQlDLmFjdGl2ZSA9ID8KCQkJCQkpCgkJCQkpCgkJCSI7CgkJCQoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCdjb250ZW50MicsICd1c2VfZXhwaXJlX2RhdGUnLCAKCQkJJzEnLCAnc3RhcnRfZGF0ZScsIHRpbWUoKSwgJ2VuZF9kYXRlJywgdGltZSgpLCAwLCAnZW5kX2RhdGUnLCAKCQkJdGltZSgpLCAxKSk7CgkJCgkJJGNvbnRlbnRzID0gYXJyYXkoKTsKCQl3aGlsZSgkZGJyZXN1bHQgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkgCgkJewoJCQlpZigkcm93WydhY3RpdmUnXSkKCQkJewoJCQkJJGNvbnRlbnRzWyRyb3dbJ2NvbnRlbnRfaWQnXV0gPSAwOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJGNvbnRlbnRzWyRyb3dbJ2NvbnRlbnRfaWQnXV0gPSAxOwoJCQl9CgkJfQoJCWlmKGNvdW50KCRjb250ZW50cykpIAoJCXsKCQkJY21zbXMoKS0+R2V0U21hcnR5KCktPmNsZWFyX2FsbF9jYWNoZSgpOwoJCQlmb3JlYWNoKCRjb250ZW50cyBhcyAkY29udGVudElkPT4kYWN0aXZlKSAKCQkJewoJCQkJJHF1ZXJ5ID0gIlVQREFURSAiLiBjbXNfZGJfcHJlZml4KCkgLiAiY29udGVudCAKCQkJCQlTRVQgYWN0aXZlID0gPyBXSEVSRSBjb250ZW50X2lkID0gPyI7CgkJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkYWN0aXZlLCAkY29udGVudElkKSk7CgkJCQlpZigkY29udGVudElkID09IGNtc191dGlsczo6Z2V0X2N1cnJlbnRfcGFnZWlkKCkpCgkJCQl7CgkJCQkJJHJlZGlyZWN0ID0gJGNvbnRlbnRJZDsKCQkJCX0KCQkJfQoJCX0KCQlpZigkcmVkaXJlY3QpIAoJCXsKCQkJJHRoaXMtPlJlZGlyZWN0Q29udGVudCgkcmVkaXJlY3QpOwoJCX0KCX0KCQoJLyoqCgkgKiBAdG9kbzogdGVzdCBwYXJhbWV0ZXJsaXN0CgkgKi8KCWZ1bmN0aW9uIFNldFBhcmFtZXRlcnMoKSAKCXsKCQkkdGhpcy0+UmVnaXN0ZXJNb2R1bGVQbHVnaW4oKTsKCQkkdGhpcy0+UmVzdHJpY3RVbmtub3duUGFyYW1zKCk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3VuaW5zdGFsbF9hY3Rpb24nLENMRUFOX0lOVCk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3JlZGlyZWN0X3BhZ2UnLENMRUFOX0lOVCk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3JlZGlyZWN0X3BhcmFtcycsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZXZhbHVhdGVfc21hcnR5JyxDTEVBTl9JTlQpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdpdGVtX2Rpc3BsYXknLENMRUFOX0lOVCk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2l0ZW1fdHlwZScsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnaXRlbV9pZCcsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnYmxvY2tfaWQnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2dyb3VwX2lkJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCd0ZW1wbGF0ZV9pZCcsQ0xFQU5fSU5UKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnY29udGVudF9pZCcsQ0xFQU5fSU5UKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnYWpheCcsQ0xFQU5fSU5UKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZmV1X2FjdGlvbicsQ0xFQU5fSU5UKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZmV1X2FjY2VzcycsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZHJvcGRvd24nLENMRUFOX0lOVCk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2RlZmF1bHRfbW9kZScsQ0xFQU5fSU5UKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnbWVzc2FnZScsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZXJyb3JtZXNzYWdlJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdzdWJtaXQnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2Vycm9ybWVzc2FnZScsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnaW1wb3J0cGFnZXMnLENMRUFOX0lOVCk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2Fzc2lnbicsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgndGV4dCcsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgndGl0bGUnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2FyZWEnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3JldHVybmlkJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdsYWJlbCcsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnY2xhc3MnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2lkJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCduYW1lJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCd3aWR0aCcsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnaGVpZ2h0JyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdhbHQnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2Jsb2NrJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdzbWFydHknLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3R5cGUnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2Jsb2NrX3R5cGUnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2RlZmF1bHQnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3N0eWxlJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdzaXplJyxDTEVBTl9JTlQpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdibG9ja190YWInLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3BhZ2VfdGFiJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdtYXhsZW5ndGgnLENMRUFOX0lOVCk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3d5c2l3eWcnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ29uZWxpbmUnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ21vZGUnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3N0YXJ0X3RpbWUnLENMRUFOX0lOVCk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2VuZF90aW1lJyxDTEVBTl9JTlQpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdkYXRlX2Zvcm1hdCcsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnc3RhcnRfaG91cicsQ0xFQU5fSU5UKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZW5kX2hvdXInLENMRUFOX0lOVCk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3N0YXJ0X21pbnV0ZScsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZW5kX21pbnV0ZScsQ0xFQU5fSU5UKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnc3RhcnRfc2Vjb25kcycsQ0xFQU5fSU5UKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZW5kX3NlY29uZHMnLENMRUFOX0lOVCk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3Nob3dfY2xvY2snLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3N0ZXBfaG91cnMnLENMRUFOX0lOVCk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3N0ZXBfbWludXRlcycsQ0xFQU5fSU5UKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnc3RlcF9zZWNvbmRzJyxDTEVBTl9JTlQpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdzaG93MjRoJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdhbGxvd19ub25lJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdkZWxpbWl0ZXInLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2l0ZW1zJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCd2YWx1ZXMnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ21vZHVsZScsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgndXJsb25seScsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZWRpdG9yX2dyb3VwcycsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZWRpdG9yX3VzZXJzJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdhY3RpdmUnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3RyYW5zbGF0ZV9sYWJlbHMnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3RyYW5zbGF0ZV92YWx1ZXMnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2Jsb2NrX2Rpc3BsYXlfc2V0dGluZ3MnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ21lc3NhZ2VfZGlzcGxheV9zZXR0aW5ncycsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZ3JvdXBfZGlzcGxheV9zZXR0aW5ncycsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnc2hvd19hZHZhbmNlZGNvbnRlbnRfb3B0aW9ucycsQ0xFQU5fSU5UKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnaW5wdXRfaWQnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2lucHV0X2ZpZWxkcycsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnc3VibWl0X2J1bGthY3Rpb24nLENMRUFOX0lOVCk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2lucHV0cycsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnaW5wdXRfZGVsaW1pdGVyJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCd2YWx1ZV9kZWxpbWl0ZXInLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2Rlc2NyaXB0aW9uJyxDTEVBTl9TVFJJTkcpOwoJCQoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdmZXVfYWNjZXNzJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdmZXVfYWN0aW9uJyxDTEVBTl9JTlQpOwoJfQoJCgkvKioKCSAqIEBsaW5rIGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcvYXBpZG9jL0NNUy9DTVNNb2R1bGUuaHRtbCNIYXNDYXBhYmlsaXR5CgkgKiBAaWdub3JlCgkgKi8KCWZ1bmN0aW9uIEhhc0NhcGFiaWxpdHkoJGNhcGFiaWxpdHksJHBhcmFtcyA9IGFycmF5KCkpIAoJewoJCXN3aXRjaCggJGNhcGFiaWxpdHkgKSAKCQl7CgkJCWNhc2UgJ2NvbnRlbnRibG9ja3MnOgoJCQljYXNlICdjb250ZW50X2F0dHJpYnV0ZXMnOgoJCQkJcmV0dXJuIHRydWU7CgkJCWRlZmF1bHQ6CgkJCQlyZXR1cm4gRkFMU0U7CgkJfQoJfQoJCgkvKioKCSAqIEBsaW5rIGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcvYXBpZG9jL0NNUy9DTVNNb2R1bGUuaHRtbCNHZXRDb250ZW50QmxvY2tJbnB1dAoJICogQGlnbm9yZQoJICovCglmdW5jdGlvbiBHZXRDb250ZW50QmxvY2tJbnB1dCgkYmxvY2tuYW1lLCR2YWx1ZSwkcGFyYW1zLCRhZGRpbmcgPSBmYWxzZSkgCgl7CgkJaWYoISR0aGlzLT5fY29udGVudFR5cGUpIHsKCQkJcmV0dXJuICR0aGlzLT5HZXRDb250ZW50VHlwZSgpLT5HZXRBZHZhbmNlZENvbnRlbnRCbG9ja0lucHV0KCRhZGRpbmcpOwoJCX0KCX0KCQoJCi8qKgogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBOb3QgcGFydCBvZiB0aGUgQ01TbXMgbW9kdWxlIEFQSQogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8KCQoJCgkvKioKCSAqIGZ1bmN0aW9uIElzVmFyRW1wdHkoJHZhciwgJHRyaW0sICR1bnNldEVtcHR5SW5kZXhlcykKCSAqIG5vdCBwYXJ0IG9mIHRoZSBtb2R1bGUgYXBpCgkgKiBjaGVja3MgaWYgYSB2YXIgaXMgZW1wdHkuIGlkIHZhciBpcyBhbiBhcnJheSBpdCByZWN1cnNpdmxleSBjaGVja3MgYWxsIGVsZW1lbnRzCgkgKgoJICogQHBhcmFtIG1peGVkICR2YXIgLSB0aGUgdmFyIHRvIGNoZWNrIGZvciBlbXB0eSB2YWx1ZShzKQoJICogQHBhcmFtIGJvb2xlYW4gJHRyaW0gLSB0cnVlIHRvIHRyaW0gb2ZmIHNwYWNlcwoJICogQHBhcmFtIGJvb2xlYW4gJHVuc2V0RW1wdHlJbmRleGVzIC0gdHJ1ZSB0byBkZWxldGUgZW1wdHkgZWxlbWVudHMgZnJvbSBhcnJheQoJICogQHJldHVybiBib29sZWFuIC0gdHJ1ZSBpZiBlbXB0eSwgZmFsc2UgaWYgbm90CgkgKi8KCWZ1bmN0aW9uIElzVmFyRW1wdHkoJiR2YXIsICR0cmltID0gdHJ1ZSwgJHVuc2V0RW1wdHlJbmRleGVzID0gZmFsc2UpIAoJewoJCWlmIChpc19hcnJheSgkdmFyKSkgCgkJewoJCQlmb3JlYWNoICgkdmFyIGFzICRrPT4kdikgCgkJCXsKCQkJCWlmICghJHRoaXMtPklzVmFyRW1wdHkoJHYpKQoJCQkJewoJCQkJCXJldHVybiBmYWxzZTsKCQkJCX0KCQkJCWVsc2UgCgkJCQl7CgkJCQkJaWYoJHVuc2V0RW1wdHlJbmRleGVzKQoJCQkJCQl1bnNldCgkdmFyWyRrXSk7CgkJCQkJcmV0dXJuIHRydWU7CgkJCQl9CgkJCX0KCQl9CgkJZWxzZSBpZigkdHJpbSAmJiB0cmltKCR2YXIpID09ICcnKSAKCQl7CgkJCXJldHVybiB0cnVlOwoJCX0KCQllbHNlIGlmKCR2YXIgPT0gJycpIAoJCXsKCQkJcmV0dXJuIHRydWU7CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KCQoJCgkvKioKCSAqIGZ1bmN0aW9uIENsZWFuQXJyYXkoJGFycmF5KQoJICogbm90IHBhcnQgb2YgdGhlIG1vZHVsZSBhcGkKCSAqIHJlbW92ZXMgZW1wdHkgZWxlbWVudHMgZnJvbSBhbiBhcnJheSAKCSAqIChjYW4gYmUgdXNlZnVsIHdoZW4gdXNpbmcgZnVuY3Rpb24gZXhwbG9kZSB0byBjcmVhdGUgdGhlIGFycmF5IG9mIGEgY3N2KQoJICoKCSAqIEBwYXJhbSBhcnJheSAkYXJyYXkgLSB0aGUgYXJyYXkgdG8gY2xlYW4gdXAKCSAqIEByZXR1cm4gYXJyYXkgLSBhbiBhcnJheSB3aXRob3V0IGVtcHR5IGVsZW1lbnRzIG9yIGFuIGVtcHR5IGFycmF5CgkgKi8KCWZ1bmN0aW9uIENsZWFuQXJyYXkoJGFycmF5KSAKCXsKCQlpZiAoaXNfYXJyYXkoJGFycmF5KSkgCgkJewoJCQlmb3JlYWNoICgkYXJyYXkgYXMgJGs9PiR2KSAKCQkJewoJCQkJaWYgKCR0aGlzLT5Jc1ZhckVtcHR5KCR2LHRydWUsdHJ1ZSkpIAoJCQkJewoJCQkJCXVuc2V0KCRhcnJheVska10pOwoJCQkJfQoJCQkJZWxzZSAKCQkJCXsKCQkJCQlpZihpc19hcnJheSgkdikpIAoJCQkJCXsKCQkJCQkJJHYgPSAkdGhpcy0+Q2xlYW5BcnJheSgkdik7CgkJCQkJCWlmKCR0aGlzLT5Jc1ZhckVtcHR5KCR2LHRydWUsdHJ1ZSkpCgkJCQkJCQl1bnNldCgkYXJyYXlbJGtdKTsKCQkJCQkJZWxzZQoJCQkJCQkJJGFycmF5WyRrXSA9ICR2OwoJCQkJCX0KCQkJCX0KCQkJfQoJCQlyZXR1cm4gJGFycmF5OwoJCX0KCQlyZXR1cm4gYXJyYXkoKTsKCX0KCQoJCgkvKioKCSAqIGZ1bmN0aW9uIEdldFBhZ2VzKCkKCSAqIG5vdCBwYXJ0IG9mIHRoZSBtb2R1bGUgYXBpCgkgKiBnZXRzIGFsbCBwYWdlcyB0byBsaXN0IGluIGEgZHJvcGRvd24KCSAqCgkgKiBAcmV0dXJuIGFycmF5IC0gYSBzZXQgb2YgcGFnZXMKCSAqLwoJZnVuY3Rpb24gR2V0UGFnZXMoKSAKCXsKCQkkZGIgPSYgJHRoaXMtPkdldERiKCk7CgkJJHF1ZXJ5ID0gIlNFTEVDVCBDLmFjdGl2ZSwgQy50eXBlLCBDLmNvbnRlbnRfaWQsIEMuaGllcmFyY2h5LCBDLm1lbnVfdGV4dCwgQ1AuY29udGVudCBGUk9NICIgLiBjbXNfZGJfcHJlZml4KCkgLiAiY29udGVudCBDIAoJCQlMRUZUIEpPSU4gIiAuIGNtc19kYl9wcmVmaXgoKSAuICJjb250ZW50X3Byb3BzIENQIE9OIENQLmNvbnRlbnRfaWQgPSBDLmNvbnRlbnRfaWQgQU5EIENQLnByb3BfbmFtZSA9ID8gCgkJCU9SREVSIEJZIGhpZXJhcmNoeSI7CgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJ2ZldV9hY2Nlc3MnKSk7CgkJaWYoISRwYWdlcyA9ICRkYnJlc3VsdC0+R2V0QXJyYXkoKSkKCQkJcmV0dXJuIGFycmF5KCk7CgkJcmV0dXJuICRwYWdlczsKCX0KCQoJCgkvKioKCSAqIGZ1bmN0aW9uIENyZWF0ZVJlZGlyZWN0RHJvcGRvd24oKQoJICogbm90IHBhcnQgb2YgdGhlIG1vZHVsZSBhcGkKCSAqIHRoaXMgY3JlYXRlcyBhIGRyb3Bkb3duIG9mIHBhZ2VzIGluY2x1ZGluZyBvbmx5IHBhZ2VzIG9mIHR5cGUgY29udGVudCBidXQKCSAqIGV4Y2x1ZGluZyB0aGUgY3VycmVudCBwYWdlIGFuZCBwYWdlcyB0aGF0IG1heSBvbmx5IGJlIGFjY2Vzc2VkIGJ5IGZyb250ZW5kIHVzZXJzCgkgKgoJICogQHJldHVybiBzdHJpbmcgLSBIVE1MIHNlbGVjdCBlbGVtZW50IHdpdGggb3B0aW9ucwoJICovCglmdW5jdGlvbiBDcmVhdGVSZWRpcmVjdERyb3Bkb3duKCRpZCA9ICcnLCAkbmFtZSA9ICdyZWRpcmVjdF9wYWdlJywgJHNlbGVjdGVkUGFnZSA9ICcnLCAkY3VycmVudFBhZ2UgPSAnJykgCgl7CgkJJHBhZ2VzICAgICAgPSAkdGhpcy0+R2V0UGFnZXMoKTsKCQkkZHJvcGRvd24gICA9ICc8c2VsZWN0IG5hbWU9IicuJGlkLiRuYW1lLiciID4nOwoJCSRkcm9wZG93biAgLj0gJzxvcHRpb24gdmFsdWU9IiInIC4gKCRzZWxlY3RlZFBhZ2UgPT0gJyc/JyBzZWxlY3RlZD0ic2VsZWN0ZWQiJzonJykgLiAnPicgLiBsYW5nKCdub25lJykgLiAnPC9vcHRpb24+JzsKCQkkZHJvcGRvd24gIC49ICc8b3B0aW9uIHZhbHVlPSItMSInIC4gKCRzZWxlY3RlZFBhZ2UgPT0gJy0xJz8nIHNlbGVjdGVkPSJzZWxlY3RlZCInOicnKSAuICc+JyAuICR0aGlzLT5sYW5nKCdpbmhlcml0X2Zyb21fcGFyZW50JykgLiAnPC9vcHRpb24+JzsKCQkkY29udGVudG9wcyA9JiBjbXNtcygpLT5HZXRDb250ZW50T3BlcmF0aW9ucygpOwoJCWZvcmVhY2goJHBhZ2VzIGFzICRwYWdlKSAKCQl7CgkJCSRkaXNhYmxlZCA9ICcnOwoJCQkvLyBkb24ndCByZWRpcmVjdCB0byBwYWdlcyB3aXRoIG5vIHB1YmxpYyBhY2Nlc3MsIGludmFsaWQgY29udGVudCB0eXBlLCBpbmFjdGl2ZSBvciBzYW1lIGNvbnRlbnQgaWQKCQkJaWYoJHBhZ2VbJ2FjdGl2ZSddICE9IDEgfHwgJHBhZ2VbJ2NvbnRlbnQnXT4wIHx8ICRwYWdlWydjb250ZW50X2lkJ10gPT0gJGN1cnJlbnRQYWdlIHx8ICgkcGFnZVsndHlwZSddICE9ICdjb250ZW50JyAmJiAkcGFnZVsndHlwZSddICE9ICdjb250ZW50MicpKQoJCQkJJGRpc2FibGVkID0gJyBkaXNhYmxlZD0iZGlzYWJsZWQiJzsKCQkJCgkJCSRkcm9wZG93biAuPSAnPG9wdGlvbicuICRkaXNhYmxlZCAuJyB2YWx1ZT0iJyAuICRwYWdlWydjb250ZW50X2lkJ10gLiAnIiAnIC4gCgkJCQkoJHNlbGVjdGVkUGFnZSA9PSAkcGFnZVsnY29udGVudF9pZCddICYmICRkaXNhYmxlZCA9PSAnJz8nc2VsZWN0ZWQ9InNlbGVjdGVkIic6JycpIC4gJz4nIC4gCgkJCQkkY29udGVudG9wcy0+Q3JlYXRlRnJpZW5kbHlIaWVyYXJjaHlQb3NpdGlvbigkcGFnZVsnaGllcmFyY2h5J10pIC4gCgkJCQknIC0gJyAuICRwYWdlWydtZW51X3RleHQnXSAuICgkZGlzYWJsZWQgIT0gJyc/JyAoJyAuICR0aGlzLT5sYW5nKCdpbnZhbGlkJykgLiAnKSc6JycpIC4gJzwvb3B0aW9uPic7CgkJfQoJCSRkcm9wZG93biAuPSAnPC9zZWxlY3Q+JzsKCQlyZXR1cm4gJGRyb3Bkb3duOwoJfQoJCgkKCS8qKgoJICogZnVuY3Rpb24gSXNUcnVlKCR2YWx1ZSkKCSAqIG5vdCBwYXJ0IG9mIHRoZSBtb2R1bGUgYXBpCgkgKiBjaGVja3MgaWYgYSB2YWx1ZSBpcyBsaXRlcmFsbHkgInRydWUiCgkgKiBjYW4gYmUgdXNlZnVsbCB3aGVuIGNoZWNraW5nIHNtYXJ0eSBwYXJhbXMgZm9yIHRoZSB2YWx1ZSB0cnVlCgkgKgoJICogQHBhcmFtIG1peGVkICR2YWx1ZSAtIHRoZSB2YWx1ZSB0byBjaGVjawoJICogQHJldHVybiBib29sCgkgKi8KCWZ1bmN0aW9uIElzVHJ1ZSgkdmFsdWUpIAoJewoJCXJldHVybiAoc3RydG9sb3dlcigkdmFsdWUpID09PSAndHJ1ZScgfHwgJHZhbHVlID09PSAxIHx8ICR2YWx1ZSA9PT0gJzEnIHx8ICR2YWx1ZSA9PT0gdHJ1ZSk7Cgl9CgkKCQoJLyoqCgkgKiBmdW5jdGlvbiBJc0ZhbHNlKCR2YWx1ZSkKCSAqIG5vdCBwYXJ0IG9mIHRoZSBtb2R1bGUgYXBpCgkgKiBjaGVja3MgaWYgYSB2YWx1ZSBpcyBsaXRlcmFsbHkgImZhbHNlIgoJICogY2FuIGJlIHVzZWZ1bGwgd2hlbiBjaGVja2luZyBzbWFydHkgcGFyYW1zIGZvciB0aGUgdmFsdWUgZmFsc2UKCSAqCgkgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIC0gdGhlIHZhbHVlIHRvIGNoZWNrCgkgKiBAcmV0dXJuIGJvb2wKCSAqLwoJZnVuY3Rpb24gSXNGYWxzZSgkdmFsdWUpIAoJewoJCXJldHVybiAoc3RydG9sb3dlcigkdmFsdWUpID09PSAnZmFsc2UnIHx8ICR2YWx1ZSA9PT0gJzAnIHx8ICR2YWx1ZSA9PT0gMCB8fCAkdmFsdWUgPT09IGZhbHNlIHx8ICR2YWx1ZSA9PT0gJycpOwoJfQoJCgkKCS8qKgoJICogc2F2ZXMgdGhlIGRpc3BsYXkgc3RhdHVzIG9mIGNvbnRlbnQgYmxvY2tzLCBjb250ZW50IGJsb2NrcyBtZXNzYWdlcyBhbmQgYmxvY2sgZ3JvdXBzCgkgKgoJICogQHBhcmFtIGludCAkY29udGVudF9pZCAtIHRoZSBpZCBvZiB0aGUgY29udGVudCB3aGVyZSB0byBzZXQgdGhlIGRpc3BsYXkgc3RhdHVzCgkgKiBAcGFyYW0gaW50ICR0ZW1wbGF0ZV9pZCAtIHRoZSBpZCBvZiB0aGUgdGVtcGxhdGUgd2hlcmUgdG8gc2V0IHRoZSBkaXNwbGF5IHN0YXR1cwoJICogQHBhcmFtIHN0cmluZyAkYmxvY2tfaWQgLSB0aGUgY29udGVudCBibG9jayB0byB0b2dnbGUgdGhlIGJsb2NrIGl0c2VsZiBvciB0aGUgbWVzc2FnZS9ncm91cAoJICogQHBhcmFtIGludCAkZGlzcGxheSAtIDAgdG8gaGlkZSwgMSB0byBzaG93CgkgKgoJICovCglmdW5jdGlvbiBTZXRJdGVtRGlzcGxheSgkaXRlbV90eXBlLCAkaXRlbV9pZCwgJGNvbnRlbnRfaWQsICR0ZW1wbGF0ZV9pZCwgJGRpc3BsYXkpIAoJewoJCSRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKCQkkcXVlcnkgPSAiU0VMRUNUIGl0ZW1fZGlzcGxheSBGUk9NICIuIGNtc19kYl9wcmVmaXgoKSAuICJtb2R1bGVfQWR2YW5jZWRDb250ZW50XyIuJGl0ZW1fdHlwZS4iZGlzcGxheQoJCQlXSEVSRSB1c2VyX2lkID0gPyBBTkQgaXRlbV9pZCA9ID8gQU5EICI7CgkJCgkJJHEgPSBhcnJheSgpOwoJCSRwID0gYXJyYXkoZ2V0X3VzZXJpZCgpLCAkaXRlbV9pZCk7CgkJCgkJaWYoJGNvbnRlbnRfaWQgCgkJJiYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCRpdGVtX3R5cGUuJ19kaXNwbGF5X3NldHRpbmdzJywnY29udGVudCcpID09ICdjb250ZW50JwoJCXx8ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCRpdGVtX3R5cGUuJ19kaXNwbGF5X3NldHRpbmdzJywnY29udGVudCcpID09ICdib3RoMScKCQl8fCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgkaXRlbV90eXBlLidfZGlzcGxheV9zZXR0aW5ncycsJ2NvbnRlbnQnKSA9PSAnYm90aDInKSkgCgkJewoJCQkkcVtdID0gImNvbnRlbnRfaWQgPSA/IjsKCQkJJHBbXSA9ICRjb250ZW50X2lkOwoJCX0KCQkKCQlpZigkdGVtcGxhdGVfaWQgPiAwIAoJCSYmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgkaXRlbV90eXBlLidfZGlzcGxheV9zZXR0aW5ncycsJ2NvbnRlbnQnKSA9PSAndGVtcGxhdGUnCgkJfHwgJHRoaXMtPkdldFByZWZlcmVuY2UoJGl0ZW1fdHlwZS4nX2Rpc3BsYXlfc2V0dGluZ3MnLCdjb250ZW50JykgPT0gJ2JvdGgxJwoJCXx8ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCRpdGVtX3R5cGUuJ19kaXNwbGF5X3NldHRpbmdzJywnY29udGVudCcpID09ICdib3RoMicpKSAKCQl7CgkJCSRxW10gPSAidGVtcGxhdGVfaWQgPSA/IjsKCQkJJHBbXSA9ICR0ZW1wbGF0ZV9pZDsKCQl9CgkJCgkJaWYoIWNvdW50KCRxKSkgewoJCQlyZXR1cm47CgkJfQoJCQoJCWlmKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCRpdGVtX3R5cGUuJ19kaXNwbGF5X3NldHRpbmdzJywnY29udGVudCcpID09ICdib3RoMScpIAoJCXsKCQkJJHF1ZXJ5IC49ICIoIiAuIGltcGxvZGUoIiBPUiAiLCRxKSAuICIpIjsKCQl9CgkJZWxzZSBpZigkdGhpcy0+R2V0UHJlZmVyZW5jZSgkaXRlbV90eXBlLidfZGlzcGxheV9zZXR0aW5ncycsJ2NvbnRlbnQnKSA9PSAnYm90aDInKSAKCQl7CgkJCSRxdWVyeSAuPSAiKCIgLiBpbXBsb2RlKCIgQU5EICIsJHEpIC4gIikiOwoJCX0KCQllbHNlIAoJCXsKCQkJJHF1ZXJ5IC49ICRxWzBdOwoJCX0KCQkKCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCAkcCk7CgkJaWYoJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpIHsKCQkJZWNobyAkZGlzcGxheTsKCQkJYXJyYXlfdW5zaGlmdCgkcCwkZGlzcGxheSk7CgkJCSRxdWVyeSA9ICJVUERBVEUgIi4gY21zX2RiX3ByZWZpeCgpIC4gIm1vZHVsZV9BZHZhbmNlZENvbnRlbnRfIi4kaXRlbV90eXBlLiJkaXNwbGF5IAoJCQkJU0VUIGl0ZW1fZGlzcGxheSA9ID8gV0hFUkUgdXNlcl9pZCA9ID8gQU5EIGl0ZW1faWQgPSA/IEFORCAiLmltcGxvZGUoJyBBTkQgJywkcSk7CgkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksICRwKTsKCQl9CgkJZWxzZSAKCQl7CgkJCSRxdWVyeSA9ICJJTlNFUlQgSU5UTyAiLiBjbXNfZGJfcHJlZml4KCkgLiJtb2R1bGVfQWR2YW5jZWRDb250ZW50XyIuJGl0ZW1fdHlwZS4iZGlzcGxheSAKCQkJCSh1c2VyX2lkLCBjb250ZW50X2lkLCB0ZW1wbGF0ZV9pZCwgaXRlbV9pZCwgaXRlbV9kaXNwbGF5KSBWQUxVRVMgKD8sPyw/LD8sPykiOwoJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheShnZXRfdXNlcmlkKCksICRjb250ZW50X2lkLCAkdGVtcGxhdGVfaWQsICRpdGVtX2lkLCAkZGlzcGxheSkpOwoJCX0KCQkkdGhpcy0+X2Rpc3BsYXlTZXR0aW5nc1skaXRlbV90eXBlXVtpbXBsb2RlKCdfJyxhcnJheSgkY29udGVudF9pZCwkdGVtcGxhdGVfaWQpKV1bJGl0ZW1faWRdID0gJGRpc3BsYXk7Cgl9CgkKCQoJLyoqCgkgKiBnZXRzIHRoZSBkaXNwbGF5IHN0YXR1cyBvZiBjb250ZW50IGJsb2NrcywgY29udGVudCBibG9ja3MgbWVzc2FnZXMgb3IgYmxvY2sgZ3JvdXBzCgkgKgoJICogQHBhcmFtIGludCAkaXRlbV90eXBlIC0gdGhlIGlkIG9mIHRoZSBjb250ZW50L3RlbXBsYXRlIHRvIGdldCB0aGUgZGlzcGxheSBzdGF0dXMgZnJvbQoJICogQHBhcmFtIGludCAkdHBsX29yX2NvbnRlbnRfaWQgLSB0aGUgaWQgb2YgdGhlIGNvbnRlbnQvdGVtcGxhdGUgdG8gZ2V0IHRoZSBkaXNwbGF5IHN0YXR1cyBmcm9tCgkgKiBAcGFyYW0gc3RyaW5nICRibG9ja19pZCAtIHRoZSBjb250ZW50IGJsb2NrIHRvIGdldCB0aGUgZGlzcGxheSBzdGF0dXMgZnJvbQoJICogQHBhcmFtIGludCAkZGVmYXVsdF92YWx1ZSAtIHRoZSBkZWZhdWx0IHN0YXR1cyBpZiBub3RoaW5nIGlzIGZvdW5kCgkgKgoJICogQHJldHVybiBib29sZWFuIC0gMCA9IGhpZGRlbiwgMSA9IHNob3duCgkgKi8KCWZ1bmN0aW9uIEdldEl0ZW1EaXNwbGF5KCRpdGVtX3R5cGUsICRpdGVtX2lkLCAkY29udGVudF9pZCwgJHRlbXBsYXRlX2lkLCAkZGVmYXVsdF92YWx1ZSA9IDEpIAoJewoJCSRpZHMgPSBhcnJheSgpOwoJCQoJCWlmKCRjb250ZW50X2lkCgkJJiYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCRpdGVtX3R5cGUuJ19kaXNwbGF5X3NldHRpbmdzJywnY29udGVudCcpID09ICdjb250ZW50JwoJCXx8ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCRpdGVtX3R5cGUuJ19kaXNwbGF5X3NldHRpbmdzJywnY29udGVudCcpID09ICdib3RoMScKCQl8fCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgkaXRlbV90eXBlLidfZGlzcGxheV9zZXR0aW5ncycsJ2NvbnRlbnQnKSA9PSAnYm90aDInKSkgCgkJewoJCQkkaWRzW10gPSAkY29udGVudF9pZDsKCQl9CgkJCgkJaWYoJHRlbXBsYXRlX2lkID4gMCAKCQkmJiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJGl0ZW1fdHlwZS4nX2Rpc3BsYXlfc2V0dGluZ3MnLCdjb250ZW50JykgPT0gJ3RlbXBsYXRlJwoJCXx8ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCRpdGVtX3R5cGUuJ19kaXNwbGF5X3NldHRpbmdzJywnY29udGVudCcpID09ICdib3RoMScKCQl8fCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgkaXRlbV90eXBlLidfZGlzcGxheV9zZXR0aW5ncycsJ2NvbnRlbnQnKSA9PSAnYm90aDInKSkgCgkJewoJCQkkaWRzW10gPSAkdGVtcGxhdGVfaWQ7CgkJfQoJCQoJCWlmKCFjb3VudCgkaWRzKSkKCQl7CgkJCXJldHVybiAkZGVmYXVsdF92YWx1ZTsKCQl9CgkJCgkJaWYoIWlzc2V0KCR0aGlzLT5fZGlzcGxheVNldHRpbmdzWyRpdGVtX3R5cGVdW2ltcGxvZGUoJ18nLCRpZHMpXSkpCgkJewoJCQkkdGhpcy0+R2V0QWxsSXRlbXNEaXNwbGF5KCRpdGVtX3R5cGUsICRjb250ZW50X2lkLCAkdGVtcGxhdGVfaWQpOwoJCX0KCQlpZighaXNzZXQoJHRoaXMtPl9kaXNwbGF5U2V0dGluZ3NbJGl0ZW1fdHlwZV1baW1wbG9kZSgnXycsJGlkcyldWyRpdGVtX2lkXSkpCgkJewoJCQkkdGhpcy0+X2Rpc3BsYXlTZXR0aW5nc1skaXRlbV90eXBlXVtpbXBsb2RlKCdfJywkaWRzKV1bJGl0ZW1faWRdID0gJGRlZmF1bHRfdmFsdWU7CgkJfQoJCXJldHVybiAkdGhpcy0+X2Rpc3BsYXlTZXR0aW5nc1skaXRlbV90eXBlXVtpbXBsb2RlKCdfJywkaWRzKV1bJGl0ZW1faWRdOwoJfQoJCgkKCS8qKgoJICogZ2V0cyB0aGUgZGlzcGxheSBzdGF0dXMgb2YgYWxsIGNvbnRlbnQgYmxvY2tzLCBjb250ZW50IGJsb2NrcyBtZXNzYWdlcyBvciBibG9jayBncm91cHMgb2YgYSBnaXZlbiB0ZW1wbGF0ZSBvciBjb250ZW50IGlkCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqIEBpZ25vcmUKCSAqLwoJcHJpdmF0ZSBmdW5jdGlvbiBHZXRBbGxJdGVtc0Rpc3BsYXkoJGl0ZW1fdHlwZSwgJGNvbnRlbnRfaWQsICR0ZW1wbGF0ZV9pZCkgCgl7CgkJJGRiID0mICR0aGlzLT5HZXREYigpOwoJCSRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuIGNtc19kYl9wcmVmaXgoKSAuICJtb2R1bGVfQWR2YW5jZWRDb250ZW50XyIuJGl0ZW1fdHlwZS4iZGlzcGxheSAKCQkJV0hFUkUgdXNlcl9pZCA9ID8gQU5EICI7CgkJCgkJJHEgPSBhcnJheSgpOwoJCSRwID0gYXJyYXkoZ2V0X3VzZXJpZCgpKTsKCQkKCQlpZigkY29udGVudF9pZCAKCQkmJiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJGl0ZW1fdHlwZS4nX2Rpc3BsYXlfc2V0dGluZ3MnLCdjb250ZW50JykgPT0gJ2NvbnRlbnQnCgkJfHwgJHRoaXMtPkdldFByZWZlcmVuY2UoJGl0ZW1fdHlwZS4nX2Rpc3BsYXlfc2V0dGluZ3MnLCdjb250ZW50JykgPT0gJ2JvdGgxJwoJCXx8ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCRpdGVtX3R5cGUuJ19kaXNwbGF5X3NldHRpbmdzJywnY29udGVudCcpID09ICdib3RoMicpKSAKCQl7CgkJCSRxW10gPSAiY29udGVudF9pZCA9ID8iOwoJCQkkcFtdID0gJGNvbnRlbnRfaWQ7CgkJfQoJCQoJCWlmKCR0ZW1wbGF0ZV9pZCA+IDAgCgkJJiYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCRpdGVtX3R5cGUuJ19kaXNwbGF5X3NldHRpbmdzJywnY29udGVudCcpID09ICd0ZW1wbGF0ZScKCQl8fCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgkaXRlbV90eXBlLidfZGlzcGxheV9zZXR0aW5ncycsJ2NvbnRlbnQnKSA9PSAnYm90aDEnCgkJfHwgJHRoaXMtPkdldFByZWZlcmVuY2UoJGl0ZW1fdHlwZS4nX2Rpc3BsYXlfc2V0dGluZ3MnLCdjb250ZW50JykgPT0gJ2JvdGgyJykpIAoJCXsKCQkJJHFbXSA9ICJ0ZW1wbGF0ZV9pZCA9ID8iOwoJCQkkcFtdID0gJHRlbXBsYXRlX2lkOwoJCX0KCQkKCQlpZighY291bnQoJHEpKSAKCQl7CgkJCXJldHVybjsKCQl9CgkJCgkJaWYoJHRoaXMtPkdldFByZWZlcmVuY2UoJGl0ZW1fdHlwZS4nX2Rpc3BsYXlfc2V0dGluZ3MnLCdjb250ZW50JykgPT0gJ2JvdGgxJykgCgkJewoJCQkkcXVlcnkgLj0gIigiIC4gaW1wbG9kZSgiIE9SICIsJHEpIC4gIikiOwoJCX0KCQllbHNlIGlmKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCRpdGVtX3R5cGUuJ19kaXNwbGF5X3NldHRpbmdzJywnY29udGVudCcpID09ICdib3RoMicpCgkJewoJCQkkcXVlcnkgLj0gIigiIC4gaW1wbG9kZSgiIEFORCAiLCRxKSAuICIpIjsKCQl9CgkJZWxzZSAKCQl7CgkJCSRxdWVyeSAuPSAkcVswXTsKCQl9CgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgJHApOwoJCXdoaWxlKCRkYnJlc3VsdCAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKSAKCQl7CgkJCWlmKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCRpdGVtX3R5cGUuJ19kaXNwbGF5X3NldHRpbmdzJywnY29udGVudCcpID09ICdib3RoMScKCQkJfHwgJHRoaXMtPkdldFByZWZlcmVuY2UoJGl0ZW1fdHlwZS4nX2Rpc3BsYXlfc2V0dGluZ3MnLCdjb250ZW50JykgPT0gJ2JvdGgyJykgCgkJCXsKCQkJCSR0aGlzLT5fZGlzcGxheVNldHRpbmdzWyRpdGVtX3R5cGVdWyRyb3dbJ2NvbnRlbnRfaWQnXSAuICdfJyAuICRyb3dbJ3RlbXBsYXRlX2lkJ11dWyRyb3dbJ2l0ZW1faWQnXV0gPSAkcm93WydpdGVtX2Rpc3BsYXknXTsKCQkJfQoJCQllbHNlIAoJCQl7CgkJCQkkdGhpcy0+X2Rpc3BsYXlTZXR0aW5nc1skaXRlbV90eXBlXVskcm93WyR0aGlzLT5HZXRQcmVmZXJlbmNlKCRpdGVtX3R5cGUuJ19kaXNwbGF5X3NldHRpbmdzJywnY29udGVudCcpLidfaWQnXV1bJHJvd1snaXRlbV9pZCddXSA9ICRyb3dbJ2l0ZW1fZGlzcGxheSddOwoJCQl9CgkJfQoJfQoJCglmdW5jdGlvbiBHZXRNdWx0aUlucHV0RnVsbCgkaW5wdXRzID0gYXJyYXkoKSkgCgl7CgkJaWYoIWlzX2FycmF5KCRpbnB1dHMpKQoJCXsKCQkJJGlucHV0cyA9ICR0aGlzLT5DbGVhbkFycmF5KGV4cGxvZGUoIiwiLCRpbnB1dHMpKTsKCQl9CgkJJGRiICAgID0mICR0aGlzLT5HZXREYigpOwoJCSRxdWVyeSA9ICJTRUxFQ1QgTVVMVElfSU5QVVQuKiwgVFBMX0FTU09DUy50cGxfbmFtZSBGUk9NICIuIGNtc19kYl9wcmVmaXgoKSAuICJtb2R1bGVfQWR2YW5jZWRDb250ZW50X211bHRpX2lucHV0cyBNVUxUSV9JTlBVVAoJCQlMRUZUIE9VVEVSIEpPSU4gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9BZHZhbmNlZENvbnRlbnRfbXVsdGlfaW5wdXRfdHBsX2Fzc29jcyBUUExfQVNTT0NTIAoJCQlPTiBNVUxUSV9JTlBVVC5pbnB1dF9pZCA9IFRQTF9BU1NPQ1MuaW5wdXRfaWQiOwoJCQoJCSRxICAgICA9IGFycmF5KCk7CgkJJHAgICAgID0gYXJyYXkoKTsKCQkkcmV0dXJuX2FycmF5ID0gYXJyYXkoKTsKCQlmb3JlYWNoKCRpbnB1dHMgYXMgJGlucHV0X2lkKQoJCXsKCQkJJHFbXSA9ICJNVUxUSV9JTlBVVC5pbnB1dF9pZCA9ID8iOwoJCQkkcFtdID0gJGlucHV0X2lkOwoJCX0KCQlpZihjb3VudCgkcCkpCgkJewoJCQkkcXVlcnkgLj0gIiBXSEVSRSAiIC4gaW1wbG9kZSgiIE9SICIsICRxKTsKCQl9CgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgJHApOwoJCXdoaWxlKCRkYnJlc3VsdCAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKSAKCQl7CgkJCSRyZXR1cm5fYXJyYXlbJHJvd1snaW5wdXRfaWQnXV0gPSAkcm93OwoJCX0KCQlyZXR1cm4gJHJldHVybl9hcnJheTsKCX0KCQoJZnVuY3Rpb24gR2V0TXVsdGlJbnB1dCgkaW5wdXRfaWQpIAoJewoJCSRkYiAgICAgICA9JiAkdGhpcy0+R2V0RGIoKTsKCQkkcXVlcnkgICAgPSAiU0VMRUNUIGlucHV0X2ZpZWxkcyBGUk9NICIuIGNtc19kYl9wcmVmaXgoKSAuICJtb2R1bGVfQWR2YW5jZWRDb250ZW50X211bHRpX2lucHV0cyBXSEVSRSBpbnB1dF9pZCA9ID8gTElNSVQgMSI7CgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGlucHV0X2lkKSk7CgkJaWYoJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpIAoJCXsKCQkJcmV0dXJuICRyb3dbJ2lucHV0X2ZpZWxkcyddOwoJCX0KCX0KCQoJZnVuY3Rpb24gR2V0TXVsdGlJbnB1dExpc3QoKSAKCXsKCQkkZGIgICAgICAgPSYgJHRoaXMtPkdldERiKCk7CgkJJHF1ZXJ5ICAgID0gIlNFTEVDVCBBLmlucHV0X2lkLCBCLnRwbF9uYW1lIEZST00gIi4gY21zX2RiX3ByZWZpeCgpIC4gIm1vZHVsZV9BZHZhbmNlZENvbnRlbnRfbXVsdGlfaW5wdXRzIEEKCQkJTEVGVCBKT0lOICIuIGNtc19kYl9wcmVmaXgoKSAuICJtb2R1bGVfQWR2YW5jZWRDb250ZW50X211bHRpX2lucHV0X3RwbF9hc3NvY3MgQgoJCQlPTiBBLmlucHV0X2lkID0gQi5pbnB1dF9pZCI7CgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSk7CgkJJHJldHVybl9hcnJheSA9IGFycmF5KCk7CgkJd2hpbGUoJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpIAoJCXsKCQkJJHJldHVybl9hcnJheVtdID0gJHJvdzsKCQl9CgkJcmV0dXJuICRyZXR1cm5fYXJyYXk7Cgl9CgkKCWZ1bmN0aW9uIEFkZE11bHRpSW5wdXQoJGlucHV0X2lkLCAkaW5wdXRfZmllbGRzKSAKCXsKCQkkZGIgICAgPSYgJHRoaXMtPkdldERiKCk7CgkJJHF1ZXJ5ID0gIlNFTEVDVCBpbnB1dF9pZCBGUk9NICIuIGNtc19kYl9wcmVmaXgoKSAuICJtb2R1bGVfQWR2YW5jZWRDb250ZW50X211bHRpX2lucHV0cwoJCQlXSEVSRSBpbnB1dF9pZCA9ID8gTElNSVQgMSI7CgkJCgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGlucHV0X2lkKSk7CgkJaWYoJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpIAoJCXsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQkKCQkkcXVlcnkgPSAiSU5TRVJUIElOVE8gIi4gY21zX2RiX3ByZWZpeCgpIC4ibW9kdWxlX0FkdmFuY2VkQ29udGVudF9tdWx0aV9pbnB1dHMgCgkJCShpbnB1dF9pZCwgaW5wdXRfZmllbGRzKSBWQUxVRVMgKD8sPykiOwoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRpbnB1dF9pZCwgJGlucHV0X2ZpZWxkcykpOwoJCXJldHVybiAkZGJyZXN1bHQ7Cgl9CgkKCWZ1bmN0aW9uIFVwZGF0ZU11bHRpSW5wdXQoJGlucHV0X2lkLCAkaW5wdXRfZmllbGRzKSAKCXsKCQkkZGIgICAgPSYgJHRoaXMtPkdldERiKCk7CgkJJHF1ZXJ5ID0gIlVQREFURSAiLiBjbXNfZGJfcHJlZml4KCkgLiAibW9kdWxlX0FkdmFuY2VkQ29udGVudF9tdWx0aV9pbnB1dHMgCgkJCVNFVCBpbnB1dF9maWVsZHMgPSA/IFdIRVJFIGlucHV0X2lkID0gPyAiOwoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRpbnB1dF9maWVsZHMsICRpbnB1dF9pZCkpOwoJCXJldHVybiAkZGJyZXN1bHQ7Cgl9CgkKCWZ1bmN0aW9uIFVwZGF0ZVRwbEFzc29jKCR0cGxfdHlwZSwgJGlucHV0X2lkLCAkdHBsX25hbWUpCgl7CgkJJGRiICAgID0mICR0aGlzLT5HZXREYigpOwoJCSRxdWVyeSA9ICJVUERBVEUgIi4gY21zX2RiX3ByZWZpeCgpIC4gIm1vZHVsZV9BZHZhbmNlZENvbnRlbnRfIi4kdHBsX3R5cGUuIl90cGxfYXNzb2NzIAoJCQlTRVQgdHBsX25hbWUgPSA/IFdIRVJFIGlucHV0X2lkID0gPyAiOwoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCR0cGxfbmFtZSwgJGlucHV0X2lkKSk7CgkJcmV0dXJuICRkYnJlc3VsdDsKCX0KCQoJZnVuY3Rpb24gQWRkVHBsQXNzb2MoJHRwbF90eXBlLCAkaW5wdXRfaWQsICR0cGxfbmFtZSkKCXsKCQkkZGIgICAgPSYgJHRoaXMtPkdldERiKCk7CgkJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPICIuIGNtc19kYl9wcmVmaXgoKSAuIm1vZHVsZV9BZHZhbmNlZENvbnRlbnRfIi4kdHBsX3R5cGUuIl90cGxfYXNzb2NzIAoJCQkoaW5wdXRfaWQsIHRwbF9uYW1lKSBWQUxVRVMgKD8sPykiOwoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRpbnB1dF9pZCwgJHRwbF9uYW1lKSk7CgkJcmV0dXJuICRkYnJlc3VsdDsKCX0KCQoJZnVuY3Rpb24gRGVsZXRlVHBsQXNzb2MoJHRwbF90eXBlLCRpbnB1dF9pZHMgPSBhcnJheSgpKQoJewoJCSRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKCQlpZighaXNfYXJyYXkoJGlucHV0X2lkcykpCgkJewoJCQkkaW5wdXRfaWRzID0gJHRoaXMtPkNsZWFuQXJyYXkoZXhwbG9kZSgiLCIsJGlucHV0X2lkcykpOwoJCX0KCQlpZighY291bnQoJGlucHV0X2lkcykpCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCSRxdWVyeSA9ICJERUxFVEUgRlJPTSAiLiBjbXNfZGJfcHJlZml4KCkgLiAibW9kdWxlX0FkdmFuY2VkQ29udGVudF8iLiR0cGxfdHlwZS4iX3RwbF9hc3NvY3MgV0hFUkUgIjsKCQkkcSA9IGFycmF5KCk7CgkJZm9yZWFjaCgkaW5wdXRfaWRzIGFzICRfaWQpCgkJewoJCQkkcVtdID0gImlucHV0X2lkID0gPyI7CgkJfQoJCSRxdWVyeSAgIC49ICBpbXBsb2RlKCIgT1IgIiwgJHEpOwoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksICRpbnB1dF9pZHMpOwoJCXJldHVybiAkZGJyZXN1bHQ7Cgl9CgkKCWZ1bmN0aW9uIERlbGV0ZU11bHRpSW5wdXQoJGlucHV0X2lkcyA9IGFycmF5KCkpCgl7CgkJJGRiID0mICR0aGlzLT5HZXREYigpOwoJCWlmKCFpc19hcnJheSgkaW5wdXRfaWRzKSkKCQl7CgkJCSRpbnB1dF9pZHMgPSAkdGhpcy0+Q2xlYW5BcnJheShleHBsb2RlKCIsIiwkaW5wdXRfaWRzKSk7CgkJfQoJCWlmKCFjb3VudCgkaW5wdXRfaWRzKSkKCQl7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJJHF1ZXJ5ID0gIkRFTEVURSBGUk9NICIuIGNtc19kYl9wcmVmaXgoKSAuICJtb2R1bGVfQWR2YW5jZWRDb250ZW50X211bHRpX2lucHV0cyBXSEVSRSAiOwoJCSRxID0gYXJyYXkoKTsKCQlmb3JlYWNoKCRpbnB1dF9pZHMgYXMgJF9pZCkKCQl7CgkJCSRxW10gPSAiaW5wdXRfaWQgPSA/IjsKCQl9CgkJCgkJJHF1ZXJ5ICAgLj0gIGltcGxvZGUoIiBPUiAiLCAkcSk7CgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgJGlucHV0X2lkcyk7CgkJcmV0dXJuICRkYnJlc3VsdDsKCX0KCQoJZnVuY3Rpb24gR2V0VGVtcGxhdGVzKCRwcmVmaXgpCgl7CgkJJGRiICAgICA9JiAkdGhpcy0+R2V0RGIoKTsKCQkkcXVlcnkgID0gIlNFTEVDVCBUUEwudGVtcGxhdGVfbmFtZSwgVFBMX0FTU09DUy4qIEZST00gIi4gY21zX2RiX3ByZWZpeCgpIC4gIm1vZHVsZV90ZW1wbGF0ZXMgVFBMIAoJCQlMRUZUIE9VVEVSIEpPSU4gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9BZHZhbmNlZENvbnRlbnRfIi4kcHJlZml4LiJfdHBsX2Fzc29jcyBUUExfQVNTT0NTIAoJCQlPTiBUUEwudGVtcGxhdGVfbmFtZSA9IFRQTF9BU1NPQ1MudHBsX25hbWUgCgkJCVdIRVJFIFRQTC5tb2R1bGVfbmFtZSA9ID8gQU5EIFRQTC50ZW1wbGF0ZV9uYW1lIExJS0UgPyAiOwoJCSRyZXR1cm5fYXJyYXkgPSBhcnJheSgpOwoJCSRkYnJlc3VsdCAgICAgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkdGhpcy0+R2V0TmFtZSgpLCRwcmVmaXguJ18lJykpOwoJCXdoaWxlKCRkYnJlc3VsdCAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKSAKCQl7CgkJCWlmKCFpc3NldCgkcmV0dXJuX2FycmF5WyRyb3dbJ3RlbXBsYXRlX25hbWUnXV0pKQoJCQl7CgkJCQkkcmV0dXJuX2FycmF5WyRyb3dbJ3RlbXBsYXRlX25hbWUnXV0gPSBhcnJheSgpOwoJCQl9CgkJCSRyZXR1cm5fYXJyYXlbJHJvd1sndGVtcGxhdGVfbmFtZSddXVsndHBsX25hbWUnXSA9IHN1YnN0cigkcm93Wyd0ZW1wbGF0ZV9uYW1lJ10sc3RybGVuKCRwcmVmaXguJ18nKSk7CgkJCSRyZXR1cm5fYXJyYXlbJHJvd1sndGVtcGxhdGVfbmFtZSddXVsndHBsX2lkJ10gICA9ICRyb3dbJ3RlbXBsYXRlX25hbWUnXTsKCQkJaWYoIWlzc2V0KCRyZXR1cm5fYXJyYXlbJHJvd1sndGVtcGxhdGVfbmFtZSddXVsndHBsX2Fzc29jcyddKSkKCQkJewoJCQkJJHJldHVybl9hcnJheVskcm93Wyd0ZW1wbGF0ZV9uYW1lJ11dWyd0cGxfYXNzb2NzJ10gPSBhcnJheSgpOwoJCQkJJHJldHVybl9hcnJheVskcm93Wyd0ZW1wbGF0ZV9uYW1lJ11dWydpc191c2VkJ10gPSBmYWxzZTsKCQkJfQoJCQlpZigkcm93WydpbnB1dF9pZCddKQoJCQl7CgkJCQkkcmV0dXJuX2FycmF5WyRyb3dbJ3RlbXBsYXRlX25hbWUnXV1bJ3RwbF9hc3NvY3MnXVtdID0gJHJvd1snaW5wdXRfaWQnXTsKCQkJCSRyZXR1cm5fYXJyYXlbJHJvd1sndGVtcGxhdGVfbmFtZSddXVsnaXNfdXNlZCddID0gdHJ1ZTsKCQkJfQoJCX0KCQlyZXR1cm4gJHJldHVybl9hcnJheTsKCX0KCQoJZnVuY3Rpb24gR2V0VHBsTGlzdCgkcHJlZml4KQoJewoJCSRwcmVmaXggPSB0cmltKCRwcmVmaXgsJ18nKSAuICdfJzsKCQkkZGIgICAgID0mICR0aGlzLT5HZXREYigpOwoJCSRxdWVyeSAgPSAiU0VMRUNUIHRlbXBsYXRlX25hbWUgRlJPTSAiLiBjbXNfZGJfcHJlZml4KCkgLiAibW9kdWxlX3RlbXBsYXRlcyAKCQkJV0hFUkUgbW9kdWxlX25hbWUgPSA/IEFORCB0ZW1wbGF0ZV9uYW1lIExJS0UgPyAiOwoJCSRyZXR1cm5fYXJyYXkgPSBhcnJheSgpOwoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCR0aGlzLT5HZXROYW1lKCksJHByZWZpeC4nJScpKTsKCQl3aGlsZSgkZGJyZXN1bHQgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkgCgkJewoJCQkkdHBsX25hbWUgPSBzdWJzdHIoJHJvd1sndGVtcGxhdGVfbmFtZSddLHN0cmxlbigkcHJlZml4KSk7CgkJCSRyZXR1cm5fYXJyYXlbJHRwbF9uYW1lXSA9ICRyb3dbJ3RlbXBsYXRlX25hbWUnXTsKCQl9CgkJcmV0dXJuICRyZXR1cm5fYXJyYXk7Cgl9CgkKCWZ1bmN0aW9uIElzVHBsVXNlZCgkdHBsX25hbWUsICRhc3NvY190eXBlKQoJewoJCSRkYiAgICAgPSYgJHRoaXMtPkdldERiKCk7CgkJJHF1ZXJ5ICA9ICJTRUxFQ1QgdHBsX25hbWUgRlJPTSAiLiBjbXNfZGJfcHJlZml4KCkgLiAibW9kdWxlX0FkdmFuY2VkQ29udGVudF8iLiRhc3NvY190eXBlLiJfdHBsX2Fzc29jcyAKCQkJV0hFUkUgdGVtcGxhdGVfbmFtZSA9ID8gIjsKCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkdHBsX25hbWUpKTsKCQlpZighJGRicmVzdWx0IHx8ICEkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKSAKCQl7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJcmV0dXJuIHRydWU7Cgl9CgkKCWZ1bmN0aW9uICZHZXRDb250ZW50VHlwZSgpIAoJewoJCWlmKCEkdGhpcy0+X2NvbnRlbnRUeXBlKSAKCQl7CgkJCXJlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdjbGFzcy5BZHZhbmNlZENvbnRlbnRUeXBlLmluYy5waHAnKTsKCQkJJHRoaXMtPl9jb250ZW50VHlwZSA9IG5ldyBBZHZhbmNlZENvbnRlbnRUeXBlKCk7CgkJfQoJCXJldHVybiAkdGhpcy0+X2NvbnRlbnRUeXBlOwoJfQp9Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/class.AdvancedContentType.inc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIE1vZHVsZSA6IEFkdmFuY2VkQ29udGVudCAoYykgMjAxMCBieSBHZW9yZyBCdXNjaCAoZ2VvcmcuYnVzY2hAZ214Lm5ldCkKIyAgICAgICAgICBhIGNvbnRlbnQgbWFuYWdlbWVudCB0b29sIGZvciBDTVMgTWFkZSBTaW1wbGUKIyAgICAgICAgICBUaGUgcHJvamVjdHMgaG9tZXBhZ2UgaXMgZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2NvbnRlbnQyLwojICAgICAgICAgIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNC0yMDEwIGJ5IFRlZCBLdWxwCiMgICAgICAgICAgVGhlIHByb2plY3RzIGhvbWVwYWdlIGlzOiBjbXNtYWRlc2ltcGxlLm9yZwojIFZlcnNpb246IDAuNy4xCiMgRmlsZSAgIDogY2xhc3MuQWR2YW5jZWRDb250ZW50VHlwZS5pbmMucGhwCiMgICAgICAgICAgVGhpcyBjbGFzcyBleHRlbmRzIHRoZSBkZWZhdWx0IGNvbnRlbnR0eXBlCiMgUHVycG9zZTogdGhlIGNvbnRlbnQgb2JqZWN0CiMgTGljZW5zZTogR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmNsYXNzIEFkdmFuY2VkQ29udGVudFR5cGUgZXh0ZW5kcyBDb250ZW50IAp7CgkvKioKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICogQHZhciBhcnJheQoJICovCgl2YXIgJF9wYWdlVGFiczsKCQoJLyoqCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqIEB2YXIgYXJyYXkKCSAqLwoJdmFyICRfYmxvY2tUYWJzOwoJCgkvKioKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICogQHZhciBhcnJheQoJICovCgl2YXIgJF9ibG9ja0dyb3VwczsKCQoJLyoqCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqIEB2YXIgYXJyYXkKCSAqLwoJdmFyICRfdXNlckdyb3VwczsKCQoJLyoqCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqIEB2YXIgYXJyYXkKCSAqLwoJdmFyICRfZGF0ZUJsb2NrczsKCQoJLyoqCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqIEB2YXIgYm9vbGVhbgoJICovCgl2YXIgJF9pc0FkbWluOwoJCgkvKioKCSAqIE1MRSBzdXBwb3J0CgkgKiBAYWNjZXNzIHB1YmxpYwoJICogQHZhciBib29sZWFuCgkgKi8KCXZhciAkbWxlID0gZmFsc2U7CgkKCS8qKgoJICogTUxFIHN1cHBvcnQKCSAqIEBhY2Nlc3MgcHVibGljCgkgKiBAdmFyIHN0cmluZwoJICovCgl2YXIgJGxhbmc7CgkKCS8qKgoJICogTUxFIHN1cHBvcnQKCSAqIEBhY2Nlc3MgcHVibGljCgkgKiBAdmFyIHN0cmluZwoJICovCgl2YXIgJGJsb2NrTGFuZzsKCQoJLyoqCgkgKiBNTEUgc3VwcG9ydAoJICogQGFjY2VzcyBwdWJsaWMKCSAqIEB2YXIgc3RyaW5nCgkgKi8KCXZhciAkZGVmYXVsdEJsb2NrTGFuZzsKCQoJLyoqCgkgKiBDb25zdHJ1Y3RvcgoJICovCglmdW5jdGlvbiBBZHZhbmNlZENvbnRlbnRUeXBlKCkgCgl7CgkJJHRoaXMtPkNvbnRlbnQoKTsKCQkkdGhpcy0+U2V0SWQoaXNzZXQoJF9HRVRbJ2NvbnRlbnRfaWQnXSk/JF9HRVRbJ2NvbnRlbnRfaWQnXTonJyk7IC8vIFRvRG86IHRoaXMgaXMgdWdseTsgaG93IGNhbiBpIGdldCB0aGUgY3VycmVudCBjb250ZW50IHByb3BzPwoJCWdsb2JhbCAkQ01TX0FETUlOX1BBR0U7CgkJaWYoaXNzZXQoJENNU19BRE1JTl9QQUdFKSAmJiAkQ01TX0FETUlOX1BBR0UgPT0gMSkgCgkJewoJCQkkQWR2YW5jZWRDb250ZW50ID0mIGNtc191dGlsczo6Z2V0X21vZHVsZSgnQWR2YW5jZWRDb250ZW50Jyk7CgkJCSR0aGlzLT5fcGFnZVRhYnMgPSBhcnJheSgKCQkJCSdtYWluJyA9PiBhcnJheSgKCQkJCQkndGFiX2lkJyAgICAgICAgID0+ICdtYWluJywgCgkJCQkJJ3RhYl9uYW1lJyAgICAgICA9PiBsYW5nKCdtYWluJyksIAoJCQkJCSdibG9ja190YWJzJyAgICAgPT4gYXJyYXkoKSwKCQkJCQknYmxvY2tfZ3JvdXBzJyAgID0+IGFycmF5KCksCgkJCQkJJ2NvbnRlbnRfYmxvY2tzJyA9PiBhcnJheSgpKSk7CgkJCQoJCQkkdGhpcy0+X3RhYklkcyAgICAgID0gYXJyYXkoJ21haW4nKTsKCQkJJHRoaXMtPl9kYXRlQmxvY2tzICA9IGFycmF5KCk7CgkJCSR0aGlzLT5fYmxvY2tUYWJzICAgPSBhcnJheSgpOwoJCQkkdGhpcy0+X2Jsb2NrR3JvdXBzID0gYXJyYXkoKTsKCQkJJHRoaXMtPl9tdWx0aUlucHV0cyA9IGFycmF5KCk7CgkJCQoJCQkkdGhpcy0+X3VzZXJHcm91cHMgID0gJHRoaXMtPkdldEdyb3VwcygpOwoJCQkkdGhpcy0+X2lzQWRtaW4gICAgID0gY21zbXMoKS0+R2V0VXNlck9wZXJhdGlvbnMoKS0+VXNlckluR3JvdXAoZ2V0X3VzZXJpZCgpLDEpOwoJCX0KCQkjIE1MRSBzdXBwb3J0CgkJZ2xvYmFsICRobHMsICRtbGVibG9jaywgJG1sZWJsb2NrZmFsbGJhY2s7CgkJaWYoaXNzZXQoJGhscykpIAoJCXsKCQkJJHRoaXMtPm1sZSAgICAgICAgICAgICAgPSB0cnVlOwoJCQkkdGhpcy0+bGFuZyAgICAgICAgICAgICA9ICRobHM7CgkJCSR0aGlzLT5ibG9ja0xhbmcgICAgICAgID0gJG1sZWJsb2NrOwoJCQkkdGhpcy0+ZGVmYXVsdEJsb2NrTGFuZyA9ICRtbGVibG9ja2ZhbGxiYWNrOwoJCX0KCQkjLS0tCgl9CgkKCXByaXZhdGUgZnVuY3Rpb24gJl9nZXRfYmxvY2tfaW5mbygkd2hvbGV0YWcpCgl7CgkJJHBhdHRlcm4gICA9ICcvKFtcd10rKT0oWyJdW14iXSpbIl18W1wnXVteXCddKltcJ118W15cJyJcc10qKS8nOwoJCSRibG9ja0luZm8gPSBhcnJheSgpOwoJCSRBZHZhbmNlZENvbnRlbnQgPSYgY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdBZHZhbmNlZENvbnRlbnQnKTsKCQkKCQkvLyBnZXQgdGhlIGFyZ3VtZW50cy4KCQkkbWF0Y2hlcyA9IGFycmF5KCk7CgkJJHJlc3VsdCAgPSBwcmVnX21hdGNoX2FsbCgkcGF0dGVybiwgJHdob2xldGFnLCAkbWF0Y2hlcyk7CgkJCgkJJGtleXZhbCA9IGFycmF5KCk7CgkJZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJG1hdGNoZXNbMV0pOyAkaSsrKSAKCQl7CgkJCWlmKHN0YXJ0c3dpdGgoJG1hdGNoZXNbMl1bJGldLCdcJycpKQoJCQl7CgkJCQkkbWF0Y2hlc1syXVskaV0gPSB0cmltKCRtYXRjaGVzWzJdWyRpXSwnXCcnKTsKCQkJfQoJCQllbHNlIGlmKHN0YXJ0c3dpdGgoJG1hdGNoZXNbMl1bJGldLCciJykpCgkJCXsKCQkJCSRtYXRjaGVzWzJdWyRpXSA9IHRyaW0oJG1hdGNoZXNbMl1bJGldLCciJyk7CgkJCX0KCQkJCgkJCSRrZXl2YWxbc3RydG9sb3dlcigkbWF0Y2hlc1sxXVskaV0pXSA9ICRtYXRjaGVzWzJdWyRpXTsKCQl9CgkJCgkJLy8gYmxvY2sgPSBhY3RpdmU/CgkJaWYoaXNzZXQoJGtleXZhbFsnYWN0aXZlJ10pICYmICR0aGlzLT5Jc0ZhbHNlKCRrZXl2YWxbJ2FjdGl2ZSddKSkgCgkJewoJCQljb250aW51ZTsgLy8gZG9uJ3QgcHJvY2VzcyBpbmFjdGl2ZSBibG9ja3MKCQl9CgkJCgkJLy8gYWRkaXRpb25hbCBlZGl0b3JzCgkJJGVkaXRvckdyb3VwcyA9ICcnOwoJCWlmKGlzc2V0KCRrZXl2YWxbJ2VkaXRvcl9ncm91cHMnXSkgJiYgJGtleXZhbFsnZWRpdG9yX2dyb3VwcyddICE9ICcnKSAKCQl7CgkJCSRlZGl0b3JHcm91cHMgPSB0cmltKCRrZXl2YWxbJ2VkaXRvcl9ncm91cHMnXSk7CgkJfQoJCSRlZGl0b3JVc2VycyA9ICcnOwoJCWlmKGlzc2V0KCRrZXl2YWxbJ2VkaXRvcl91c2VycyddKSAmJiAka2V5dmFsWydlZGl0b3JfdXNlcnMnXSAhPSAnJykgCgkJewoJCQkkZWRpdG9yVXNlcnMgPSB0cmltKCRrZXl2YWxbJ2VkaXRvcl91c2VycyddKTsKCQl9CgkJCgkJLy8gYmxvY2t0eXBlCgkJJGJsb2NrVHlwZSA9ICd0ZXh0JzsKCQlpZihzdGFydHN3aXRoKCR3aG9sZXRhZywgJ2NvbnRlbnRfaW1hZ2UnKSkgCgkJewoJCQkkYmxvY2tUeXBlID0gJ2ltYWdlJzsKCQkJJGRlZmF1bHRNb2RlID0gdHJ1ZTsKCQl9CgkJZWxzZWlmKHN0YXJ0c3dpdGgoJHdob2xldGFnLCAnY29udGVudF9tb2R1bGUnKSkgCgkJewoJCQkkYmxvY2tUeXBlID0gJ21vZHVsZSc7CgkJCSRkZWZhdWx0TW9kZSA9IHRydWU7CgkJfQoJCWVsc2VpZihpc3NldCgka2V5dmFsWydibG9ja190eXBlJ10pICYmICRrZXl2YWxbJ2Jsb2NrX3R5cGUnXSAhPSAnJykKCQkJJGJsb2NrVHlwZSA9IHN0cnRvbG93ZXIoJGtleXZhbFsnYmxvY2tfdHlwZSddKTsKCQkKCQkvLyBibG9ja25hbWUKCQkkbmFtZSA9ICdjb250ZW50X2VuJzsKCQkjIE1MRSBzdXBwb3J0CgkJaWYoJHRoaXMtPm1sZSAmJiAkdGhpcy0+YmxvY2tMYW5nICE9ICcnKSAKCQl7CgkJCSRuYW1lID0gJ2NvbnRlbnQnLiR0aGlzLT5ibG9ja0xhbmc7CgkJfQoJCSMtLS0KCQkKCQlpZihpc3NldCgka2V5dmFsWydibG9jayddKSAmJiAka2V5dmFsWydibG9jayddICE9ICcnKQoJCXsKCQkJJG5hbWUgPSB0cmltKCRrZXl2YWxbJ2Jsb2NrJ10pOwoJCX0KCQkKCQkvLyBibG9jayBpZAoJCSRibG9ja0lkID0gcHJlZ19yZXBsYWNlKCcvLSsvJywnXycsbXVuZ2Vfc3RyaW5nX3RvX3VybCgkbmFtZSkpOwoJCQoJCSRzbWFydHkgPSBmYWxzZTsKCQlpZihpc3NldCgka2V5dmFsWydzbWFydHknXSkgJiYgJHRoaXMtPklzVHJ1ZSgka2V5dmFsWydzbWFydHknXSkpIAoJCXsKCQkJJHNtYXJ0eSA9IHRydWU7CgkJfQoJCQoJCSR0cmFuc2xhdGVMYWJlbHMgPSBmYWxzZTsKCQlpZihpc3NldCgka2V5dmFsWyd0cmFuc2xhdGVfbGFiZWxzJ10pICYmICR0aGlzLT5Jc1RydWUoJGtleXZhbFsndHJhbnNsYXRlX2xhYmVscyddKSkgCgkJewoJCQkkdHJhbnNsYXRlTGFiZWxzID0gdHJ1ZTsKCQl9CgkJCgkJJHRyYW5zbGF0ZVZhbHVlcyA9IGZhbHNlOwoJCWlmKGlzc2V0KCRrZXl2YWxbJ3RyYW5zbGF0ZV92YWx1ZXMnXSkgJiYgJHRoaXMtPklzVHJ1ZSgka2V5dmFsWyd0cmFuc2xhdGVfdmFsdWVzJ10pKSAKCQl7CgkJCSR0cmFuc2xhdGVWYWx1ZXMgPSB0cnVlOwoJCX0KCQkKCQkkbGFiZWwgPSB1Y3dvcmRzKCRuYW1lKTsKCQlpZihpc3NldCgka2V5dmFsWydsYWJlbCddKSAmJiAka2V5dmFsWydsYWJlbCddICE9ICcnKQoJCXsKCQkJJGxhYmVsID0gdHJpbSgka2V5dmFsWydsYWJlbCddKTsKCQl9CgkJCgkJLy8gZGVmYXVsdCBjb250ZW50L3ZhbHVlCgkJJGRlZmF1bHRWYWx1ZSAJPSAnJzsKCQlpZihpc3NldCgka2V5dmFsWydkZWZhdWx0J10pICYmICRrZXl2YWxbJ2RlZmF1bHQnXSAhPSAnJykKCQl7CgkJCSRkZWZhdWx0VmFsdWUgPSAka2V5dmFsWydkZWZhdWx0J107CgkJfQoJCQoJCS8vIGJhY2tlbmQgc3R5bGUgKGUuZy4gdG8gbWFyayByZXF1aXJlZCBmaWVsZHMuLi4pCgkJJHN0eWxlID0gJyc7CgkJaWYoaXNzZXQoJGtleXZhbFsnc3R5bGUnXSkpIAoJCXsKCQkJJHN0eWxlID0gJGtleXZhbFsnc3R5bGUnXTsKCQl9CgkJCgkJLy8gc2l6ZSBvZiB0aGUgaW5wdXQgZmllbGQKCQkkc2l6ZSA9ICcnOwoJCWlmKGlzc2V0KCRrZXl2YWxbJ3NpemUnXSkpIAoJCXsKCQkJJHNpemUgPSBpbnR2YWwoJGtleXZhbFsnc2l6ZSddKTsKCQl9CgkJCgkJJHBhZ2VUYWIgPSAnbWFpbic7CgkJaWYoaXNzZXQoJGtleXZhbFsncGFnZV90YWInXSkgJiYgdHJpbSgka2V5dmFsWydwYWdlX3RhYiddICE9ICcnKSkgCgkJewoJCQkkcGFnZVRhYiA9IHRyaW0oJGtleXZhbFsncGFnZV90YWInXSk7CgkJfQoJCQoJCSRibG9ja1RhYiA9ICcnOwoJCWlmKGlzc2V0KCRrZXl2YWxbJ2Jsb2NrX3RhYiddKSAmJiB0cmltKCRrZXl2YWxbJ2Jsb2NrX3RhYiddICE9ICcnKSkgCgkJewoJCQkkYmxvY2tUYWIgPSB0cmltKCRrZXl2YWxbJ2Jsb2NrX3RhYiddKTsKCQl9CgkJCgkJJGJsb2NrR3JvdXAgPSAnJzsKCQlpZihpc3NldCgka2V5dmFsWydibG9ja19ncm91cCddKSAmJiB0cmltKCRrZXl2YWxbJ2Jsb2NrX2dyb3VwJ10gIT0gJycpKSAKCQl7CgkJCSRibG9ja0dyb3VwID0gdHJpbSgka2V5dmFsWydibG9ja19ncm91cCddKTsKCQl9CgkJCgkJJGFsbG93Tm9uZSA9IHRydWU7CgkJaWYoaXNzZXQoJGtleXZhbFsnYWxsb3dfbm9uZSddKSAmJiAkdGhpcy0+SXNGYWxzZSgka2V5dmFsWydhbGxvd19ub25lJ10pKQoJCXsKCQkJJGFsbG93Tm9uZSA9IGZhbHNlOwoJCX0KCQkKCQkkZGVzY3JpcHRpb24gPSAnJzsKCQlpZihpc3NldCgka2V5dmFsWydkZXNjcmlwdGlvbiddKSkKCQl7CgkJCSRkZXNjcmlwdGlvbiA9IHRyaW0oJGtleXZhbFsnZGVzY3JpcHRpb24nXSk7CgkJfQoJCQoJCSRjb2xsYXBzZSA9ICEkQWR2YW5jZWRDb250ZW50LT5HZXRQcmVmZXJlbmNlKCdjb2xsYXBzZV9ibG9ja19kZWZhdWx0JywxKTsKCQlpZihpc3NldCgka2V5dmFsWydjb2xsYXBzZSddKSAmJiAkdGhpcy0+SXNUcnVlKCRrZXl2YWxbJ2NvbGxhcHNlJ10pKQoJCXsKCQkJJGNvbGxhcHNlID0gdHJpbSgka2V5dmFsWydjb2xsYXBzZSddKTsKCQl9CgkJCgkJJG5vX2NvbGxhcHNlID0gZmFsc2U7CgkJaWYoaXNzZXQoJGtleXZhbFsnbm9fY29sbGFwc2UnXSkgJiYgJHRoaXMtPklzVHJ1ZSgka2V5dmFsWydub19jb2xsYXBzZSddKSkKCQl7CgkJCSRub19jb2xsYXBzZSA9IHRydWU7CgkJfQoJCQoJCWlmKCRibG9ja1R5cGUgPT0gJ3RleHQnKSAKCQl7CgkJCQoJCQkkbWF4bGVuZ3RoID0gJyc7CgkJCWlmKGlzc2V0KCRrZXl2YWxbJ21heGxlbmd0aCddKSkgCgkJCXsKCQkJCSRtYXhsZW5ndGggPSAka2V5dmFsWydtYXhsZW5ndGgnXTsKCQkJfQoJCQkKCQkJJHVzZXd5c2l3eWcgPSB0cnVlOwoJCQlpZihpc3NldCgka2V5dmFsWyd3eXNpd3lnJ10pICYmICR0aGlzLT5Jc0ZhbHNlKCRrZXl2YWxbJ3d5c2l3eWcnXSkpIAoJCQl7CgkJCQkkdXNld3lzaXd5ZyA9IGZhbHNlOwoJCQl9CgkJCQoJCQkkb25lbGluZSA9IGZhbHNlOwoJCQlpZihpc3NldCgka2V5dmFsWydvbmVsaW5lJ10pICYmICR0aGlzLT5Jc1RydWUoJGtleXZhbFsnb25lbGluZSddKSkgCgkJCXsKCQkJCSRvbmVsaW5lID0gdHJ1ZTsKCQkJfQoJCQkKCQkJJGJsb2NrSW5mb1snbWF4bGVuZ3RoJ10gID0gJG1heGxlbmd0aDsKCQkJJGJsb2NrSW5mb1sndXNld3lzaXd5ZyddID0gJHVzZXd5c2l3eWc7CgkJCSRibG9ja0luZm9bJ29uZWxpbmUnXSAgICA9ICRvbmVsaW5lOwoJCQkkYmxvY2tJbmZvWydzaXplJ10gICAgICAgPSAkc2l6ZTsKCQl9CgkJZWxzZSBpZiAoJGJsb2NrVHlwZSA9PSAnZGF0ZScpIAoJCXsKCQkJJHRoaXMtPl9kYXRlQmxvY2tzW10gPSAkYmxvY2tJZDsKCQkJCgkJCSRzaG93Q2xvY2sgPSB0cnVlOwoJCQlpZihpc3NldCgka2V5dmFsWydzaG93X2Nsb2NrJ10pICYmICR0aGlzLT5Jc1RGYWxzZSgka2V5dmFsWydzaG93X2Nsb2NrJ10pKQoJCQl7CgkJCQkkc2hvd0Nsb2NrID0gZmFsc2U7CgkJCX0KCQkJCgkJCSRtb2RlID0gJ2NhbGVuZGFyJzsKCQkJaWYoaXNzZXQoJGtleXZhbFsnbW9kZSddKSAmJiBzdHJ0b2xvd2VyKCRrZXl2YWxbJ21vZGUnXSkgPT0gJ2Ryb3Bkb3duJykKCQkJewoJCQkJJG1vZGUgPSAnZHJvcGRvd24nOwoJCQl9CgkJCQoJCQkkc2hvdzI0aCA9IHRydWU7CgkJCWlmKGlzc2V0KCRrZXl2YWxbJ3Nob3cyNGgnXSkgJiYgJHRoaXMtPklzRmFsc2UoJGtleXZhbFsnc2hvdzI0aCddKSkKCQkJewoJCQkJJHNob3cyNGggPSBmYWxzZTsKCQkJfQoJCQkKCQkJJHN0YXJ0SG91ciA9IDA7CgkJCSRlbmRIb3VyICAgPSAyMzsKCQkJaWYoaXNzZXQoJGtleXZhbFsnc3RhcnRfaG91ciddKSkgCgkJCXsKCQkJCWlmKGVuZHN3aXRoKCRrZXl2YWxbJ3N0YXJ0X2hvdXInXSwncG0nKSkgCgkJCQl7CgkJCQkJJGtleXZhbFsnc3RhcnRfaG91ciddID0gdHJpbShzdHJfaXJlcGxhY2UoJ3BtJywnJywka2V5dmFsWydzdGFydF9ob3VyJ10pKSArIDEyOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCSRrZXl2YWxbJ3N0YXJ0X2hvdXInXSA9IHRyaW0oc3RyX2lyZXBsYWNlKGFycmF5KCdhbScsJ3BtJyksJycsJGtleXZhbFsnc3RhcnRfaG91ciddKSk7CgkJCQl9CgkJCQlpZigka2V5dmFsWydzdGFydF9ob3VyJ10gPiAwICYmICRrZXl2YWxbJ3N0YXJ0X2hvdXInXSA8PSAkZW5kSG91cikKCQkJCXsKCQkJCQkkc3RhcnRIb3VyID0gdHJpbSgka2V5dmFsWydzdGFydF9ob3VyJ10pOwoJCQkJfQoJCQl9CgkJCWlmKGlzc2V0KCRrZXl2YWxbJ2VuZF9ob3VyJ10pKSAKCQkJewoJCQkJaWYoZW5kc3dpdGgoJGtleXZhbFsnZW5kX2hvdXInXSwncG0nKSkgCgkJCQl7CgkJCQkJJGtleXZhbFsnZW5kX2hvdXInXSA9IHRyaW0oc3RyX2lyZXBsYWNlKCdwbScsJycsJGtleXZhbFsnZW5kX2hvdXInXSkpICsgMTI7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJGtleXZhbFsnZW5kX2hvdXInXSA9IHRyaW0oc3RyX2lyZXBsYWNlKGFycmF5KCdhbScsJ3BtJyksJycsJGtleXZhbFsnZW5kX2hvdXInXSkpOwoJCQkJfQoJCQkJaWYoJGtleXZhbFsnZW5kX2hvdXInXSA+PSAwICYmICRrZXl2YWxbJ2VuZF9ob3VyJ10gPCAkZW5kSG91cikKCQkJCXsKCQkJCQkkZW5kSG91ciA9IHRyaW0oJGtleXZhbFsnZW5kX2hvdXInXSk7CgkJCQl9CgkJCX0KCQkJaWYoJGVuZEhvdXIgPCAkc3RhcnRIb3VyKQoJCQl7CgkJCQkkZW5kSG91ciA9ICRzdGFydEhvdXI7CgkJCX0KCQkJJHN0YXJ0TWludXRlID0gMDsKCQkJaWYoaXNzZXQoJGtleXZhbFsnc3RhcnRfbWludXRlJ10pICYmICRrZXl2YWxbJ3N0YXJ0X21pbnV0ZSddID4gMCAmJiAka2V5dmFsWydzdGFydF9taW51dGUnXSA8PSA1OSkKCQkJewoJCQkJJHN0YXJ0TWludXRlID0gdHJpbSgka2V5dmFsWydzdGFydF9taW51dGUnXSk7CgkJCX0KCQkJJGVuZE1pbnV0ZSA9IDU5OwoJCQlpZihpc3NldCgka2V5dmFsWydlbmRfbWludXRlJ10pICYmICRrZXl2YWxbJ2VuZF9taW51dGUnXSA+PSAwICYmICRrZXl2YWxbJ2VuZF9taW51dGUnXSA8IDU5KQoJCQl7CgkJCQkkZW5kTWludXRlID0gdHJpbSgka2V5dmFsWydlbmRfbWludXRlJ10pOwoJCQl9CgkJCWlmKCRlbmRNaW51dGUgPCAkc3RhcnRNaW51dGUpCgkJCXsKCQkJCSRlbmRNaW51dGUgPSAkc3RhcnRNaW51dGU7CgkJCX0KCQkJJHN0YXJ0U2Vjb25kID0gMDsKCQkJaWYoaXNzZXQoJGtleXZhbFsnc3RhcnRfc2Vjb25kJ10pICYmICRrZXl2YWxbJ3N0YXJ0X3NlY29uZCddID4gMCAmJiAka2V5dmFsWydzdGFydF9zZWNvbmQnXSA8PSA1OSkKCQkJewoJCQkJJHN0YXJ0U2Vjb25kID0gdHJpbSgka2V5dmFsWydzdGFydF9zZWNvbmQnXSk7CgkJCX0KCQkJJGVuZFNlY29uZCA9IDU5OwoJCQlpZihpc3NldCgka2V5dmFsWydlbmRfc2Vjb25kJ10pICYmICRrZXl2YWxbJ2VuZF9zZWNvbmQnXSA+PSAwICYmICRrZXl2YWxbJ2VuZF9zZWNvbmQnXSA8IDU5KQoJCQl7CgkJCQkkZW5kU2Vjb25kID0gdHJpbSgka2V5dmFsWydlbmRfc2Vjb25kJ10pOwoJCQl9CgkJCWlmKCRlbmRTZWNvbmQgPCAkc3RhcnRTZWNvbmQpCgkJCXsKCQkJCSRlbmRTZWNvbmQgPSAkc3RhcnRTZWNvbmQ7CgkJCX0KCQkJJHN0ZXBIb3VycyA9IDE7CgkJCWlmKGlzc2V0KCRrZXl2YWxbJ3N0ZXBfaG91cnMnXSkgJiYgJGtleXZhbFsnc3RlcF9ob3VycyddID4gMCAmJiAka2V5dmFsWydzdGVwX2hvdXJzJ10gPD0gKCRlbmRIb3VyLSRzdGFydEhvdXIpKQoJCQl7CgkJCQkkc3RlcEhvdXJzID0gdHJpbSgka2V5dmFsWydzdGVwX2hvdXJzJ10pOwoJCQl9CgkJCWVsc2UgaWYoaXNzZXQoJGtleXZhbFsnc3RlcF9ob3VycyddKSAmJiAka2V5dmFsWydzdGVwX2hvdXJzJ10gPiAwICYmICRrZXl2YWxbJ3N0ZXBfaG91cnMnXSA+PSAoJGVuZEhvdXItJHN0YXJ0SG91cikpCgkJCXsKCQkJCSRzdGVwSG91cnMgPSAkZW5kSG91ci0kc3RhcnRIb3VyOwoJCQl9CgkJCSRzdGVwTWludXRlcyA9IDEwOwoJCQlpZihpc3NldCgka2V5dmFsWydzdGVwX21pbnV0ZXMnXSkgJiYgJGtleXZhbFsnc3RlcF9taW51dGVzJ10gPiAwICYmICRrZXl2YWxbJ3N0ZXBfbWludXRlcyddIDw9ICgkZW5kTWludXRlLSRzdGFydE1pbnV0ZSkpCgkJCXsKCQkJCSRzdGVwTWludXRlcyA9IHRyaW0oJGtleXZhbFsnc3RlcF9taW51dGVzJ10pOwoJCQl9CgkJCWVsc2UgaWYoaXNzZXQoJGtleXZhbFsnc3RlcF9taW51dGVzJ10pICYmICRrZXl2YWxbJ3N0ZXBfbWludXRlcyddID4gMCAmJiAka2V5dmFsWydzdGVwX21pbnV0ZXMnXSA+PSAoJGVuZE1pbnV0ZS0kc3RhcnRNaW51dGUpKQoJCQl7CgkJCQkkc3RlcE1pbnV0ZXMgPSAkZW5kTWludXRlLSRzdGFydE1pbnV0ZTsKCQkJfQoJCQkkc3RlcFNlY29uZHMgPSAxOwoJCQlpZihpc3NldCgka2V5dmFsWydzdGVwX3NlY29uZHMnXSkgJiYgJGtleXZhbFsnc3RlcF9zZWNvbmRzJ10gPiAwICYmICRrZXl2YWxbJ3N0ZXBfc2Vjb25kcyddIDw9ICgkZW5kU2Vjb25kLSRzdGFydFNlY29uZHMpKQoJCQl7CgkJCQkkc3RlcFNlY29uZHMgPSB0cmltKCRrZXl2YWxbJ3N0ZXBfc2Vjb25kcyddKTsKCQkJfQoJCQllbHNlIGlmKGlzc2V0KCRrZXl2YWxbJ3N0ZXBfc2Vjb25kcyddKSAmJiAka2V5dmFsWydzdGVwX3NlY29uZHMnXSA+IDAgJiYgJGtleXZhbFsnc3RlcF9zZWNvbmRzJ10gPj0gKCRlbmRTZWNvbmQtJHN0YXJ0U2Vjb25kcykpCgkJCXsKCQkJCSRzdGVwU2Vjb25kcyA9ICRlbmRTZWNvbmQtJHN0YXJ0U2Vjb25kczsKCQkJfQoJCQkkYmxvY2tJbmZvWydzaG93MjRoJ10gICAgICA9ICRzaG93MjRoOwoJCQkkYmxvY2tJbmZvWydtb2RlJ10gICAgICAgICA9ICRtb2RlOwoJCQkkYmxvY2tJbmZvWydzdGFydF9ob3VyJ10gICA9ICRzdGFydEhvdXI7CgkJCSRibG9ja0luZm9bJ2VuZF9ob3VyJ10gICAgID0gJGVuZEhvdXI7CgkJCSRibG9ja0luZm9bJ3N0YXJ0X21pbnV0ZSddID0gJHN0YXJ0TWludXRlOwoJCQkkYmxvY2tJbmZvWydlbmRfbWludXRlJ10gICA9ICRlbmRNaW51dGU7CgkJCSRibG9ja0luZm9bJ3N0YXJ0X3NlY29uZCddID0gJHN0YXJ0U2Vjb25kOwoJCQkkYmxvY2tJbmZvWydlbmRfc2Vjb25kJ10gICA9ICRlbmRTZWNvbmQ7CgkJCSRibG9ja0luZm9bJ3N0ZXBfaG91cnMnXSAgID0gJHN0ZXBIb3VyczsKCQkJJGJsb2NrSW5mb1snc3RlcF9taW51dGVzJ10gPSAkc3RlcE1pbnV0ZXM7CgkJCSRibG9ja0luZm9bJ3N0ZXBfc2Vjb25kcyddID0gJHN0ZXBTZWNvbmRzOwoJCQkkYmxvY2tJbmZvWydzaG93X2Nsb2NrJ10gICA9ICRzaG93Q2xvY2s7CgkJfQoJCWVsc2UgaWYoJGJsb2NrVHlwZSA9PSAnZHJvcGRvd24nIHx8ICRibG9ja1R5cGUgPT0gJ3NlbGVjdF9tdWx0aXBsZScpIAoJCXsKCQkJaWYoJGJsb2NrVHlwZSA9PSAnc2VsZWN0X211bHRpcGxlJykgCgkJCXsKCQkJCSRzb3J0YWJsZSA9IGZhbHNlOwoJCQkJLy8gZGVwcmVjYXRlZAoJCQkJaWYoaXNzZXQoJGtleXZhbFsnc29ydGFibGVfaXRlbXMnXSkgJiYgJHRoaXMtPklzVHJ1ZSgka2V5dmFsWydzb3J0YWJsZV9pdGVtcyddKSkgCgkJCQl7CgkJCQkJJHNvcnRhYmxlID0gdHJ1ZTsKCQkJCX0KCQkJCWlmKGlzc2V0KCRrZXl2YWxbJ3NvcnRhYmxlJ10pICYmICR0aGlzLT5Jc1RydWUoJGtleXZhbFsnc29ydGFibGUnXSkpIAoJCQkJewoJCQkJCSRzb3J0YWJsZSA9IHRydWU7CgkJCQl9CgkJCQkkYmxvY2tJbmZvWydzb3J0YWJsZSddID0gJHNvcnRhYmxlOwoJCQl9CgkJCQoJCQkkZGVsaW1pdGVyID0gJ3wnOwoJCQlpZihpc3NldCgka2V5dmFsWydkZWxpbWl0ZXInXSkgJiYgJGtleXZhbFsnZGVsaW1pdGVyJ10gIT0gJycpIAoJCQl7CgkJCQkkZGVsaW1pdGVyID0gJGtleXZhbFsnZGVsaW1pdGVyJ107CgkJCX0KCQkJJGl0ZW1zID0gJyc7CgkJCWlmKGlzc2V0KCRrZXl2YWxbJ2l0ZW1zJ10pICYmICRrZXl2YWxbJ2l0ZW1zJ10gIT0gJycpIAoJCQl7CgkJCQkkaXRlbXMgPSB0cmltKCRrZXl2YWxbJ2l0ZW1zJ10pOwoJCQl9CgkJCSR2YWx1ZXMgPSAnJzsKCQkJaWYoaXNzZXQoJGtleXZhbFsndmFsdWVzJ10pICYmICRrZXl2YWxbJ3ZhbHVlcyddICE9ICcnKSAKCQkJewoJCQkJJHZhbHVlcyA9IHRyaW0oJGtleXZhbFsndmFsdWVzJ10pOwoJCQl9CgkJCQoJCQkkYmxvY2tJbmZvWydpdGVtcyddICAgICA9ICRpdGVtczsKCQkJJGJsb2NrSW5mb1sndmFsdWVzJ10gICAgPSAkdmFsdWVzOwoJCQkkYmxvY2tJbmZvWydkZWxpbWl0ZXInXSA9ICRkZWxpbWl0ZXI7CgkJCQoJCX0KCQllbHNlIGlmKCRibG9ja1R5cGUgPT0gJ21vZHVsZScpIAoJCXsKCQkJJG1vZHVsZSA9ICcnOwoJCQlpZihpc3NldCgka2V5dmFsWydtb2R1bGUnXSkpCgkJCXsKCQkJCSRtb2R1bGUgPSB0cmltKCRrZXl2YWxbJ21vZHVsZSddKTsKCQkJfQoJCQkkYmxvY2tJbmZvWydtb2R1bGUnXSA9ICRtb2R1bGU7CgkJCSRibG9ja0luZm9bJ3BhcmFtcyddID0gJGtleXZhbDsKCQl9CgkJZWxzZSBpZigkYmxvY2tUeXBlID09ICdtdWx0aV9pbnB1dCcpIAoJCXsKCQkJJGlucHV0cyA9ICcnOwoJCQlpZihpc3NldCgka2V5dmFsWydpbnB1dHMnXSkpCgkJCXsKCQkJCSRpbnB1dHMgPSB0cmltKCRrZXl2YWxbJ2lucHV0cyddKTsKCQkJfQoJCQkKCQkJJHZhbHVlRGVsaW0gPSAnPCEtLSBtdWx0aV9pbnB1dF92YWx1ZV9kZWxpbWl0ZXIgLS0+JzsKCQkJaWYoaXNzZXQoJGtleXZhbFsndmFsdWVfZGVsaW1pdGVyJ10pKQoJCQl7CgkJCQkkdmFsdWVEZWxpbSA9IHRyaW0oJGtleXZhbFsndmFsdWVfZGVsaW1pdGVyJ10pOwoJCQl9CgkJCQoJCQkkaW5wdXREZWxpbSA9ICc8IS0tIG11bHRpX2lucHV0X2RlbGltaXRlciAtLT4nOwoJCQlpZihpc3NldCgka2V5dmFsWydpbnB1dF9kZWxpbWl0ZXInXSkpCgkJCXsKCQkJCSRpbXB1dERlbGltID0gdHJpbSgka2V5dmFsWydpbnB1dF9kZWxpbWl0ZXInXSk7CgkJCX0KCQkJJGJsb2NrSW5mb1snaW5wdXRzJ10gICAgICAgICAgPSAkaW5wdXRzOwoJCQkkYmxvY2tJbmZvWyd2YWx1ZV9kZWxpbWl0ZXInXSA9ICR2YWx1ZURlbGltOwoJCQkkYmxvY2tJbmZvWydpbnB1dF9kZWxpbWl0ZXInXSA9ICRpbnB1dERlbGltOwoJCX0KCQkKCQkkYmxvY2tJbmZvWydzbWFydHknXSAgICAgICAgICAgPSAkc21hcnR5OwoJCSRibG9ja0luZm9bJ3N0eWxlJ10gICAgICAgICAgICA9ICRzdHlsZTsKCQkkYmxvY2tJbmZvWyduYW1lJ10gICAgICAgICAgICAgPSAkbmFtZTsKCQkkYmxvY2tJbmZvWydpZCddICAgICAgICAgICAgICAgPSAkYmxvY2tJZDsKCQkkYmxvY2tJbmZvWydibG9ja190eXBlJ10gICAgICAgPSAkYmxvY2tUeXBlOwoJCSRibG9ja0luZm9bJ3R5cGUnXSAgICAgICAgICAgICA9ICRibG9ja1R5cGU7CgkJJGJsb2NrSW5mb1snbGFiZWwnXSAgICAgICAgICAgID0gJGxhYmVsOwoJCSRibG9ja0luZm9bJ2Jsb2NrX3RhYiddICAgICAgICA9ICRibG9ja1RhYjsKCQkkYmxvY2tJbmZvWydwYWdlX3RhYiddICAgICAgICAgPSAkcGFnZVRhYjsKCQkkYmxvY2tJbmZvWydlZGl0b3JfdXNlcnMnXSAgICAgPSAkZWRpdG9yVXNlcnM7CgkJJGJsb2NrSW5mb1snZWRpdG9yX2dyb3VwcyddICAgID0gJGVkaXRvckdyb3VwczsKCQkkYmxvY2tJbmZvWydhbGxvd19ub25lJ10gICAgICAgPSAkYWxsb3dOb25lOwoJCSRibG9ja0luZm9bJ3RyYW5zbGF0ZV9sYWJlbHMnXSA9ICR0cmFuc2xhdGVMYWJlbHM7CgkJJGJsb2NrSW5mb1sndHJhbnNsYXRlX3ZhbHVlcyddID0gJHRyYW5zbGF0ZVZhbHVlczsKCQkkYmxvY2tJbmZvWydkZXNjcmlwdGlvbiddICAgICAgPSAkZGVzY3JpcHRpb247CgkJJGJsb2NrSW5mb1snY29sbGFwc2UnXSAgICAgICAgID0gJGNvbGxhcHNlOwoJCSRibG9ja0luZm9bJ25vX2NvbGxhcHNlJ10gICAgICA9ICRub19jb2xsYXBzZTsKCQkkYmxvY2tJbmZvWydibG9ja19ncm91cCddICAgICAgPSAkYmxvY2tHcm91cDsKCQkkYmxvY2tJbmZvWydkZWZhdWx0X3ZhbHVlJ10gICAgPSAkZGVmYXVsdFZhbHVlOwoJCSRibG9ja0luZm9bJ211bHRpcGxlJ10gICAgICAgICA9IGZhbHNlOwoJCSRibG9ja0luZm9bJ25ld19ibG9jayddICAgICAgICA9IGZhbHNlOwoJCXJldHVybiAkYmxvY2tJbmZvOwoJfQoJCglmdW5jdGlvbiBHZXRBZHZhbmNlZENvbnRlbnRCbG9ja3MoJGFkZGluZyA9IGZhbHNlKSAKCXsKCQkkdGhpcy0+Z2V0X2NvbnRlbnRfYmxvY2tzKCk7CgkJCgkJJHRoaXMtPkFkZENvbnRlbnRQcm9wZXJ0eSgnZmV1X2FjY2VzcycsIDk5KTsKCQkkdGhpcy0+QWRkQ29udGVudFByb3BlcnR5KCdyZWRpcmVjdF9wYWdlJywgMTAwLCAwLCAnaW50Jyk7CgkJJHRoaXMtPkFkZENvbnRlbnRQcm9wZXJ0eSgncmVkaXJlY3RfcGFyYW1zJywgMTAxLCAwKTsKCQkkdGhpcy0+QWRkQ29udGVudFByb3BlcnR5KCdldmFsdWF0ZV9zbWFydHknLCAxMDIsIDAsICdpbnQnKTsKCQkkdGhpcy0+QWRkQ29udGVudFByb3BlcnR5KCdmZXVfYWN0aW9uJywgMTAzLCAwLCAnaW50Jyk7CgkJCgkJJEFkdmFuY2VkQ29udGVudCA9JiBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0FkdmFuY2VkQ29udGVudCcpOwoJCQoJCWdsb2JhbCAkQ01TX0FETUlOX1BBR0U7CgkJaWYoaXNzZXQoJENNU19BRE1JTl9QQUdFKSAmJiAkQ01TX0FETUlOX1BBR0UgPT0gMSkgCgkJewoJCQkkdGhpcy0+X3BhZ2VUYWJzID0gYXJyYXkoCgkJCQknbWFpbicgPT4gYXJyYXkoCgkJCQkJJ3RhYl9pZCcgICAgICAgICA9PiAnbWFpbicsIAoJCQkJCSd0YWJfbmFtZScgICAgICAgPT4gbGFuZygnbWFpbicpLCAKCQkJCQknYmxvY2tfdGFicycgICAgID0+IGFycmF5KCksCgkJCQkJJ2Jsb2NrX2dyb3VwcycgICA9PiBhcnJheSgpLAoJCQkJCSdjb250ZW50X2Jsb2NrcycgPT4gYXJyYXkoKSkpOwoJCQkKCQkJJHRoaXMtPl90YWJJZHMgICAgICA9IGFycmF5KCdtYWluJyk7CgkJCSR0aGlzLT5fZGF0ZUJsb2NrcyAgPSBhcnJheSgpOwoJCQkkdGhpcy0+X2Jsb2NrVGFicyAgID0gYXJyYXkoKTsKCQkJJHRoaXMtPl9ibG9ja0dyb3VwcyA9IGFycmF5KCk7CgkJCSR0aGlzLT5fbXVsdGlJbnB1dHMgPSBhcnJheSgpOwoJCX0KCQkKCQkvLyBnZXQgdGhlIGJhc2ljIGNvbnRlbnQgcHJvcGVydGllcwoJCSRiYXNpY0F0dHJpYnMgPSBhcnJheSgpOwoJCWZvcmVhY2goICR0aGlzLT5fYXR0cmlidXRlcyBhcyAkb25lQXR0cmliICkgCgkJewoJCQkkYmFzaWNBdHRyaWJzW10gPSAkb25lQXR0cmliWzBdOwoJCX0KCQkkaiA9IDA7CgkJZm9yZWFjaCgkdGhpcy0+X2NvbnRlbnRCbG9ja3MgYXMgJGJsb2NrSWQgPT4gJGJsb2NrSW5mbykgCgkJewoJCQlpZigkYmxvY2tJbmZvWyd0eXBlJ10gIT0gJ21vZHVsZScgfHwgJGJsb2NrSW5mb1snbW9kdWxlJ10gIT0gJ0FkdmFuY2VkQ29udGVudCcpIAoJCQl7CgkJCQljb250aW51ZTsKCQkJfQoJCQkKCQkJZGVidWdfYnVmZmVyKCR0aGlzLT5fY29udGVudEJsb2NrcywnQWR2YW5jZWRDb250ZW50IGNvbnRlbnRibG9ja3MgYmVmb3JlLi4uJyk7CgkJCQoJCQkkaisrOwoJCQkvLyBibG9jayA9IGFjdGl2ZT8KCQkJaWYoaXNzZXQoJGJsb2NrSW5mb1sncGFyYW1zJ11bJ2FjdGl2ZSddKSAmJiAkdGhpcy0+SXNGYWxzZSgkYmxvY2tJbmZvWydwYXJhbXMnXVsnYWN0aXZlJ10pKSAKCQkJewoJCQkJdW5zZXQocGFyZW50OjokX2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdKTsKCQkJCWNvbnRpbnVlOyAvLyBkb24ndCBwcm9jZXNzIGluYWN0aXZlIGJsb2NrcwoJCQl9CgkJCQoJCQkkbm9fY29sbGFwc2UgPSBmYWxzZTsKCQkJaWYoaXNzZXQoJGJsb2NrSW5mb1sncGFyYW1zJ11bJ25vX2NvbGxhcHNlJ10pICYmICR0aGlzLT5Jc1RydWUoJGJsb2NrSW5mb1sncGFyYW1zJ11bJ25vX2NvbGxhcHNlJ10pKQoJCQl7CgkJCQkkbm9fY29sbGFwc2UgPSB0cnVlOwoJCQl9CgkJCQoJCQkvLyBhZGRpdGlvbmFsIGVkaXRvcnMKCQkJJGVkaXRvckdyb3VwcyA9ICcnOwoJCQlpZihpc3NldCgkYmxvY2tJbmZvWydwYXJhbXMnXVsnZWRpdG9yX2dyb3VwcyddKSAmJiAkYmxvY2tJbmZvWydwYXJhbXMnXVsnZWRpdG9yX2dyb3VwcyddICE9ICcnKSAKCQkJewoJCQkJJGVkaXRvckdyb3VwcyA9IHRyaW0oJGJsb2NrSW5mb1sncGFyYW1zJ11bJ2VkaXRvcl9ncm91cHMnXSk7CgkJCX0KCQkJJGVkaXRvclVzZXJzID0gJyc7CgkJCWlmKGlzc2V0KCRibG9ja0luZm9bJ3BhcmFtcyddWydlZGl0b3JfdXNlcnMnXSkgJiYgJGJsb2NrSW5mb1sncGFyYW1zJ11bJ2VkaXRvcl91c2VycyddICE9ICcnKSAKCQkJewoJCQkJJGVkaXRvclVzZXJzID0gdHJpbSgkYmxvY2tJbmZvWydwYXJhbXMnXVsnZWRpdG9yX3VzZXJzJ10pOwoJCQl9CgkJCQoJCQkvLyBibG9ja3R5cGUKCQkJJGJsb2NrVHlwZSA9ICd0ZXh0JzsKCQkJaWYoaXNzZXQoJGJsb2NrSW5mb1sncGFyYW1zJ11bJ2Jsb2NrX3R5cGUnXSkgJiYgJGJsb2NrSW5mb1sncGFyYW1zJ11bJ2Jsb2NrX3R5cGUnXSAhPSAnJykKCQkJewoJCQkJJGJsb2NrVHlwZSA9IHN0cnRvbG93ZXIoJGJsb2NrSW5mb1sncGFyYW1zJ11bJ2Jsb2NrX3R5cGUnXSk7CgkJCX0KCQkJCgkJCSRzbWFydHkgPSBmYWxzZTsKCQkJaWYoaXNzZXQoJGJsb2NrSW5mb1sncGFyYW1zJ11bJ3NtYXJ0eSddKSAmJiAkdGhpcy0+SXNUcnVlKCRibG9ja0luZm9bJ3BhcmFtcyddWydzbWFydHknXSkpIAoJCQl7CgkJCQkkc21hcnR5ID0gdHJ1ZTsKCQkJfQoJCQkKCQkJJHRyYW5zbGF0ZUxhYmVscyA9IGZhbHNlOwoJCQlpZihpc3NldCgkYmxvY2tJbmZvWydwYXJhbXMnXVsndHJhbnNsYXRlX2xhYmVscyddKSAmJiAkdGhpcy0+SXNUcnVlKCRibG9ja0luZm9bJ3BhcmFtcyddWyd0cmFuc2xhdGVfbGFiZWxzJ10pKSAKCQkJewoJCQkJJHRyYW5zbGF0ZUxhYmVscyA9IHRydWU7CgkJCX0KCQkJCgkJCSR0cmFuc2xhdGVWYWx1ZXMgPSBmYWxzZTsKCQkJaWYoaXNzZXQoJGJsb2NrSW5mb1sncGFyYW1zJ11bJ3RyYW5zbGF0ZV92YWx1ZXMnXSkgJiYgJHRoaXMtPklzVHJ1ZSgkYmxvY2tJbmZvWydwYXJhbXMnXVsndHJhbnNsYXRlX3ZhbHVlcyddKSkgCgkJCXsKCQkJCSR0cmFuc2xhdGVWYWx1ZXMgPSB0cnVlOwoJCQl9CgkJCQoJCQkkbGFiZWwgPSB1Y3dvcmRzKCRibG9ja0lkKTsKCQkJaWYoaXNzZXQoJGJsb2NrSW5mb1sncGFyYW1zJ11bJ3Byb21wdCddKSAmJiAkYmxvY2tJbmZvWydwYXJhbXMnXVsncHJvbXB0J10gIT0gJycpCgkJCXsKCQkJCSRsYWJlbCA9IHRyaW0oJGJsb2NrSW5mb1sncGFyYW1zJ11bJ3Byb21wdCddKTsKCQkJfQoJCQkKCQkJLy8gYmFja2VuZCBzdHlsZSAoZS5nLiB0byBtYXJrIHJlcXVpcmVkIGZpZWxkcy4uLikKCQkJJHN0eWxlID0gJyc7CgkJCWlmKGlzc2V0KCRibG9ja0luZm9bJ3BhcmFtcyddWydzdHlsZSddKSkgCgkJCXsKCQkJCSRzdHlsZSA9ICRibG9ja0luZm9bJ3BhcmFtcyddWydzdHlsZSddOwoJCQl9CgkJCS8vIHNpemUgb2YgdGhlIGlucHV0IGZpZWxkCgkJCSRzaXplID0gJyc7CgkJCWlmKGlzc2V0KCRibG9ja0luZm9bJ3NpemUnXSkpIAoJCQl7CgkJCQkkc2l6ZSA9IGludHZhbCgkYmxvY2tJbmZvWydzaXplJ10pOwoJCQl9CgkJCSR0aGlzLT5fcGFnZVRhYnNbJ21haW4nXVsnY29udGVudF9ibG9ja3MnXVskYmxvY2tJZF0gPSAkYmxvY2tJZDsKCQkJCgkJCSRibG9ja1RhYiA9ICcnOwoJCQlpZihpc3NldCgkYmxvY2tJbmZvWydwYXJhbXMnXVsnYmxvY2tfdGFiJ10pICYmIHRyaW0oJGJsb2NrSW5mb1sncGFyYW1zJ11bJ2Jsb2NrX3RhYiddICE9ICcnKSkgCgkJCXsKCQkJCSRibG9ja1RhYiA9IHByZWdfcmVwbGFjZSgnLy0rLycsJ18nLG11bmdlX3N0cmluZ190b191cmwoc3RydG9sb3dlcih0cmltKCRibG9ja0luZm9bJ3BhcmFtcyddWydibG9ja190YWInXSkpKSk7CgkJCQlpZighaXNzZXQoJHRoaXMtPl9ibG9ja1RhYnNbJGJsb2NrVGFiXSkpIAoJCQkJewoJCQkJCSR0aGlzLT5fYmxvY2tUYWJzWyRibG9ja1RhYl1bJ3RhYl9pZCddICAgICAgICAgPSAkYmxvY2tUYWI7CgkJCQkJJHRoaXMtPl9ibG9ja1RhYnNbJGJsb2NrVGFiXVsndGFiX25hbWUnXSAgICAgICA9ICRibG9ja0luZm9bJ3BhcmFtcyddWydibG9ja190YWInXTsKCQkJCQkkdGhpcy0+X2Jsb2NrVGFic1skYmxvY2tUYWJdWydibG9ja19ncm91cHMnXSAgID0gYXJyYXkoKTsKCQkJCQkkdGhpcy0+X2Jsb2NrVGFic1skYmxvY2tUYWJdWydjb250ZW50X2Jsb2NrcyddID0gYXJyYXkoKTsKCQkJCX0KCQkJCSR0aGlzLT5fYmxvY2tUYWJzWyRibG9ja1RhYl1bJ2NvbnRlbnRfYmxvY2tzJ11bJGJsb2NrSWRdID0gJGJsb2NrSWQ7CgkJCQkkdGhpcy0+X3BhZ2VUYWJzWydtYWluJ11bJ2Jsb2NrX3RhYnMnXVskYmxvY2tUYWJdICAgICAgICA9ICRibG9ja1RhYjsKCQkJCSN1bnNldCgkdGhpcy0+X3BhZ2VUYWJzWydtYWluJ11bJ2NvbnRlbnRfYmxvY2tzJ11bJGJsb2NrSWRdKTsKCQkJfQoJCQkKCQkJJGJsb2NrR3JvdXAgPSAnJzsKCQkJaWYoaXNzZXQoJGJsb2NrSW5mb1sncGFyYW1zJ11bJ2Jsb2NrX2dyb3VwJ10pICYmIHRyaW0oJGJsb2NrSW5mb1sncGFyYW1zJ11bJ2Jsb2NrX2dyb3VwJ10gIT0gJycpKSAKCQkJewoJCQkJJGJsb2NrR3JvdXAgPSAoICRibG9ja1RhYiA/ICRibG9ja1RhYiAuICdfJyA6ICcnICkgLiBwcmVnX3JlcGxhY2UoJy8tKy8nLCdfJyxtdW5nZV9zdHJpbmdfdG9fdXJsKHN0cnRvbG93ZXIodHJpbSgkYmxvY2tJbmZvWydwYXJhbXMnXVsnYmxvY2tfZ3JvdXAnXSkpKSk7CgkJCQkKCQkJCWlmKCFpc3NldCgkdGhpcy0+X2Jsb2NrR3JvdXBzWyRibG9ja0dyb3VwXSkpIAoJCQkJewoJCQkJCSR0aGlzLT5fYmxvY2tHcm91cHNbJGJsb2NrR3JvdXBdWydncm91cF9pZCddICAgICAgID0gJGJsb2NrR3JvdXA7CgkJCQkJJHRoaXMtPl9ibG9ja0dyb3Vwc1skYmxvY2tHcm91cF1bJ2dyb3VwX25hbWUnXSAgICAgPSAkYmxvY2tJbmZvWydwYXJhbXMnXVsnYmxvY2tfZ3JvdXAnXTsKCQkJCQkkdGhpcy0+X2Jsb2NrR3JvdXBzWyRibG9ja0dyb3VwXVsnY29udGVudF9ibG9ja3MnXSA9IGFycmF5KCk7CgkJCQl9CgkJCQkKCQkJCSR0aGlzLT5fYmxvY2tHcm91cHNbJGJsb2NrR3JvdXBdWydjb250ZW50X2Jsb2NrcyddWyRibG9ja0lkXSA9ICRibG9ja0lkOwoJCQkJI3Vuc2V0KCR0aGlzLT5fcGFnZVRhYnNbJ21haW4nXVsnY29udGVudF9ibG9ja3MnXVskYmxvY2tJZF0pOwoJCQkJCgkJCQlpZigkYmxvY2tUYWIpIAoJCQkJewoJCQkJCSR0aGlzLT5fYmxvY2tUYWJzWyRibG9ja1RhYl1bJ2Jsb2NrX2dyb3VwcyddWyRibG9ja0dyb3VwXSA9ICRibG9ja0dyb3VwOwoJCQkJCXVuc2V0KCR0aGlzLT5fYmxvY2tUYWJzWyRibG9ja1RhYl1bJ2NvbnRlbnRfYmxvY2tzJ11bJGJsb2NrSWRdKTsKCQkJCX0KCQkJCWVsc2UgCgkJCQl7CgkJCQkJJHRoaXMtPl9wYWdlVGFic1snbWFpbiddWyRibG9ja1RhYl1bJ2Jsb2NrX2dyb3VwcyddWyRibG9ja0dyb3VwXSA9ICRibG9ja0dyb3VwOwoJCQkJfQoJCQl9CgkJCQoJCQkkYWxsb3dOb25lID0gdHJ1ZTsKCQkJaWYoaXNzZXQoJGJsb2NrSW5mb1sncGFyYW1zJ11bJ2FsbG93X25vbmUnXSkgJiYgJHRoaXMtPklzRmFsc2UoJGJsb2NrSW5mb1sncGFyYW1zJ11bJ2FsbG93X25vbmUnXSkpCgkJCXsKCQkJCSRhbGxvd05vbmUgPSBmYWxzZTsKCQkJfQoJCQkKCQkJLy8gaWYgdGhpcyBibG9jayBoYXMgYmVlbiBhZGRlZCB0byB0aGUgdGVtcGxhdGUgYWZ0ZXIgcGFnZSBoYXMgYmVlbiBjcmVhdGVkCgkJCSRuZXdCbG9jayA9IGZhbHNlOwoJCQlpZighaW5fYXJyYXkoJGJsb2NrSWQsJHRoaXMtPm1Qcm9wZXJ0aWVzLT5tUHJvcGVydHlOYW1lcykpIAoJCQl7CgkJCQkkbmV3QmxvY2sgPSB0cnVlOwoJCQl9CgkJCQoJCQkkZGVzY3JpcHRpb24gPSAnJzsKCQkJaWYoaXNzZXQoJGJsb2NrSW5mb1sncGFyYW1zJ11bJ2Rlc2NyaXB0aW9uJ10pKQoJCQl7CgkJCQkkZGVzY3JpcHRpb24gPSB0cmltKCRibG9ja0luZm9bJ3BhcmFtcyddWydkZXNjcmlwdGlvbiddKTsKCQkJfQoJCQkKCQkJJGRlZmF1bHQgPSAnJzsKCQkJaWYoaXNzZXQoJGJsb2NrSW5mb1snZGVmYXVsdCddKSkKCQkJewoJCQkJJGRlZmF1bHQgPSB0cmltKCRibG9ja0luZm9bJ2RlZmF1bHQnXSk7CgkJCX0KCQkJCgkJCSRjb2xsYXBzZSA9ICEkQWR2YW5jZWRDb250ZW50LT5HZXRQcmVmZXJlbmNlKCdjb2xsYXBzZV9ibG9ja19kZWZhdWx0JywxKTsKCQkJaWYoaXNzZXQoJGJsb2NrSW5mb1sncGFyYW1zJ11bJ2NvbGxhcHNlJ10pICYmICR0aGlzLT5Jc1RydWUoJGJsb2NrSW5mb1sncGFyYW1zJ11bJ2NvbGxhcHNlJ10pKQoJCQl7CgkJCQkkY29sbGFwc2UgPSB0cmltKCRibG9ja0luZm9bJ3BhcmFtcyddWydjb2xsYXBzZSddKTsKCQkJfQoJCQkKCQkJLy8gdGhpcyB3aWxsIGNyZWF0ZSBhbiBpbnZhbGlkIGJsb2NrIHR5cGUgdG8gcHJpbnQgb3V0IGEgCgkJCS8vIG1lc3NhZ2Ugd2hlbiB1c2luZyBhIGJhc2ljIGNvbnRlbnQgcHJvcGVydHkgYXMgYmxvY2sgbmFtZQoJCQlpZihpbl9hcnJheSgkYmxvY2tJZCwgJGJhc2ljQXR0cmlicykgCgkJCXx8ICRibG9ja0lkID09ICRibG9ja0lkIC4gJ19mZXVfYWN0aW9uJyAKCQkJfHwgJGJsb2NrSWQgPT0gJGJsb2NrSWQgLiAnX2ZldV9hY3Rpb25bXScgCgkJCXx8ICRibG9ja0lkID09ICRibG9ja0lkIC4gJ19mZXVfYWNjZXNzJyAKCQkJfHwgJGJsb2NrSWQgPT0gJGJsb2NrSWQgLiAnX2ZldV9hY2Nlc3NbXScgCgkJCXx8ICRibG9ja0lkID09ICdBZHZhbmNlZENvbnRlbnRTdGFydERhdGUnIAoJCQl8fCAkYmxvY2tJZCA9PSAnQWR2YW5jZWRDb250ZW50RW5kRGF0ZScgCgkJCXx8ICRibG9ja0lkID09ICdBZHZhbmNlZENvbnRlbnRTdGFydFRpbWUnIAoJCQl8fCAkYmxvY2tJZCA9PSAnQWR2YW5jZWRDb250ZW50RW5kVGltZScgCgkJCXx8ICRibG9ja0lkID09ICdzdGFydF9kYXRlJyAKCQkJfHwgJGJsb2NrSWQgPT0gJ2VuZF9kYXRlJyAKCQkJfHwgJGJsb2NrSWQgPT0gJGJsb2NrSWQgLiAnX0FkdmFuY2VkQ29udGVudFRpbWUnIAoJCQl8fCAkYmxvY2tJZCA9PSAkYmxvY2tJZCAuICdfQWR2YW5jZWRDb250ZW50RGF0ZScpIAoJCQl7CgkJCQkkYmxvY2tJZCA9IG1kNSgkYmxvY2tJZCAuICRqKTsKCQkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2xhYmVsJ10gICAgICAgICAgICA9ICRsYWJlbDsKCQkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ3R5cGUnXSAgICAgICAgICAgICA9ICcnOwoJCQkJJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnYmxvY2tfdHlwZSddICAgICAgID0gJyc7CgkJCQkkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydkZWZhdWx0J10gICAgICAgICAgPSAkQWR2YW5jZWRDb250ZW50LT5sYW5nKCdlcnJvcl9iYXNpY2F0dHJpYicsICRuYW1lKTsKCQkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2Jsb2NrX3RhYiddICAgICAgICA9ICRibG9ja1RhYjsKCQkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2Jsb2NrX2dyb3VwJ10gICAgICA9ICRibG9ja0dyb3VwOwoJCQkJJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnc3R5bGUnXSAgICAgICAgICAgID0gJyc7CgkJCQkkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydhbGxvd19ub25lJ10gICAgICAgPSBmYWxzZTsKCQkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ3NtYXJ0eSddICAgICAgICAgICA9IGZhbHNlOwoJCQkJJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnZGVzY3JpcHRpb24nXSAgICAgID0gJyc7CgkJCQkkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWyd0cmFuc2xhdGVfbGFiZWxzJ10gPSAkdHJhbnNsYXRlTGFiZWxzOwoJCQkJJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsndHJhbnNsYXRlX3ZhbHVlcyddID0gJHRyYW5zbGF0ZVZhbHVlczsKCQkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2VkaXRvcl91c2VycyddICAgICA9ICRlZGl0b3JVc2VyczsKCQkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2VkaXRvcl9ncm91cHMnXSAgICA9ICRlZGl0b3JHcm91cHM7CgkJCQkkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWyduciddICAgICAgICAgICAgICAgPSBjb3VudCgkdGhpcy0+X2NvbnRlbnRCbG9ja3MpOwoJCQkJJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnY29sbGFwc2UnXSAgICAgICAgID0gZmFsc2U7CgkJCQkkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydub19jb2xsYXBzZSddICAgICAgPSBmYWxzZTsKCQkJCWNvbnRpbnVlOwoJCQl9CgkJCQoJCQlpZigkYmxvY2tUeXBlID09ICd0ZXh0JykgCgkJCXsKCQkJCSRtYXhsZW5ndGggPSAnJzsKCQkJCWlmKGlzc2V0KCRibG9ja0luZm9bJ3BhcmFtcyddWydtYXhsZW5ndGgnXSkpIAoJCQkJewoJCQkJCSRtYXhsZW5ndGggPSAkYmxvY2tJbmZvWydwYXJhbXMnXVsnbWF4bGVuZ3RoJ107CgkJCQl9CgkJCQkkdXNld3lzaXd5ZyA9IHRydWU7CgkJCQlpZihpc3NldCgkYmxvY2tJbmZvWyd1c2V3eXNpd3lnJ10pICYmICR0aGlzLT5Jc0ZhbHNlKCRibG9ja0luZm9bJ3VzZXd5c2l3eWcnXSkpIAoJCQkJewoJCQkJCSR1c2V3eXNpd3lnID0gZmFsc2U7CgkJCQl9CgkJCQkKCQkJCSRvbmVsaW5lID0gZmFsc2U7CgkJCQlpZihpc3NldCgkYmxvY2tJbmZvWydwYXJhbXMnXVsnb25lX2xpbmUnXSkgJiYgJHRoaXMtPklzVHJ1ZSgkYmxvY2tJbmZvWydwYXJhbXMnXVsnb25lX2xpbmUnXSkpIAoJCQkJewoJCQkJCSRvbmVsaW5lID0gdHJ1ZTsKCQkJCX0KCQkJCQoJCQkJJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnbWF4bGVuZ3RoJ10gID0gJG1heGxlbmd0aDsKCQkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ3VzZXd5c2l3eWcnXSA9ICR1c2V3eXNpd3lnOwoJCQkJJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnb25lbGluZSddICAgID0gJG9uZWxpbmU7CgkJCQkkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydzaXplJ10gICAgICAgPSAkc2l6ZTsKCQkJfQoJCQllbHNlIGlmICgkYmxvY2tUeXBlID09ICdkYXRlJykgCgkJCXsKCQkJCQoJCQkJJHRoaXMtPl9kYXRlQmxvY2tzW10gPSAkYmxvY2tJZDsKCQkJCQoJCQkJJHNob3dDbG9jayA9IHRydWU7CgkJCQlpZihpc3NldCgkYmxvY2tJbmZvWydwYXJhbXMnXVsnc2hvd19jbG9jayddKSAmJiAkdGhpcy0+SXNURmFsc2UoJGJsb2NrSW5mb1sncGFyYW1zJ11bJ3Nob3dfY2xvY2snXSkpCgkJCQl7CgkJCQkJJHNob3dDbG9jayA9IGZhbHNlOwoJCQkJfQoJCQkJCgkJCQkkbW9kZSA9ICdjYWxlbmRhcic7CgkJCQlpZihpc3NldCgkYmxvY2tJbmZvWydwYXJhbXMnXVsnbW9kZSddKSAmJiBzdHJ0b2xvd2VyKCRibG9ja0luZm9bJ3BhcmFtcyddWydtb2RlJ10pID09ICdkcm9wZG93bicpCgkJCQl7CgkJCQkJJG1vZGUgPSAnZHJvcGRvd24nOwoJCQkJfQoJCQkJCgkJCQkkc2hvdzI0aCA9IHRydWU7CgkJCQlpZihpc3NldCgkYmxvY2tJbmZvWydwYXJhbXMnXVsnc2hvdzI0aCddKSAmJiAkdGhpcy0+SXNGYWxzZSgkYmxvY2tJbmZvWydwYXJhbXMnXVsnc2hvdzI0aCddKSkKCQkJCXsKCQkJCQkkc2hvdzI0aCA9IGZhbHNlOwoJCQkJfQoJCQkJCgkJCQkkc3RhcnRIb3VyID0gMDsKCQkJCSRlbmRIb3VyICAgPSAyMzsKCQkJCWlmKGlzc2V0KCRibG9ja0luZm9bJ3BhcmFtcyddWydzdGFydF9ob3VyJ10pKSAKCQkJCXsKCQkJCQlpZihlbmRzd2l0aCgkYmxvY2tJbmZvWydwYXJhbXMnXVsnc3RhcnRfaG91ciddLCdwbScpKSAKCQkJCQl7CgkJCQkJCSRibG9ja0luZm9bJ3BhcmFtcyddWydzdGFydF9ob3VyJ10gPSB0cmltKHN0cl9pcmVwbGFjZSgncG0nLCcnLCRibG9ja0luZm9bJ3BhcmFtcyddWydzdGFydF9ob3VyJ10pKSArIDEyOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQkkYmxvY2tJbmZvWydwYXJhbXMnXVsnc3RhcnRfaG91ciddID0gdHJpbShzdHJfaXJlcGxhY2UoYXJyYXkoJ2FtJywncG0nKSwnJywkYmxvY2tJbmZvWydwYXJhbXMnXVsnc3RhcnRfaG91ciddKSk7CgkJCQkJfQoJCQkJCQkKCQkJCQlpZigkYmxvY2tJbmZvWydwYXJhbXMnXVsnc3RhcnRfaG91ciddID4gMCAmJiAkYmxvY2tJbmZvWydwYXJhbXMnXVsnc3RhcnRfaG91ciddIDw9ICRlbmRIb3VyKQoJCQkJCXsKCQkJCQkJJHN0YXJ0SG91ciA9IHRyaW0oJGJsb2NrSW5mb1sncGFyYW1zJ11bJ3N0YXJ0X2hvdXInXSk7CgkJCQkJfQoJCQkJfQoJCQkJCgkJCQlpZihpc3NldCgkYmxvY2tJbmZvWydwYXJhbXMnXVsnZW5kX2hvdXInXSkpIAoJCQkJewoJCQkJCWlmKGVuZHN3aXRoKCRibG9ja0luZm9bJ3BhcmFtcyddWydlbmRfaG91ciddLCdwbScpKSAKCQkJCQl7CgkJCQkJCSRibG9ja0luZm9bJ3BhcmFtcyddWydlbmRfaG91ciddID0gdHJpbShzdHJfaXJlcGxhY2UoJ3BtJywnJywkYmxvY2tJbmZvWydwYXJhbXMnXVsnZW5kX2hvdXInXSkpICsgMTI7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCSRibG9ja0luZm9bJ3BhcmFtcyddWydlbmRfaG91ciddID0gdHJpbShzdHJfaXJlcGxhY2UoYXJyYXkoJ2FtJywncG0nKSwnJywkYmxvY2tJbmZvWydwYXJhbXMnXVsnZW5kX2hvdXInXSkpOwoJCQkJCX0KCQkJCQkJCgkJCQkJaWYoJGJsb2NrSW5mb1sncGFyYW1zJ11bJ2VuZF9ob3VyJ10gPj0gMCAmJiAkYmxvY2tJbmZvWydwYXJhbXMnXVsnZW5kX2hvdXInXSA8ICRlbmRIb3VyKQoJCQkJCXsKCQkJCQkJJGVuZEhvdXIgPSB0cmltKCRibG9ja0luZm9bJ3BhcmFtcyddWydlbmRfaG91ciddKTsKCQkJCQl9CgkJCQl9CgkJCQkKCQkJCWlmKCRlbmRIb3VyIDwgJHN0YXJ0SG91cikKCQkJCXsKCQkJCQkkZW5kSG91ciA9ICRzdGFydEhvdXI7CgkJCQl9CgkJCQkKCQkJCSRzdGFydE1pbnV0ZSA9IDA7CgkJCQlpZihpc3NldCgkYmxvY2tJbmZvWydwYXJhbXMnXVsnc3RhcnRfbWludXRlJ10pICYmICRibG9ja0luZm9bJ3BhcmFtcyddWydzdGFydF9taW51dGUnXSA+IDAgJiYgJGJsb2NrSW5mb1sncGFyYW1zJ11bJ3N0YXJ0X21pbnV0ZSddIDw9IDU5KQoJCQkJewoJCQkJCSRzdGFydE1pbnV0ZSA9IHRyaW0oJGJsb2NrSW5mb1sncGFyYW1zJ11bJ3N0YXJ0X21pbnV0ZSddKTsKCQkJCX0KCQkJCQoJCQkJJGVuZE1pbnV0ZSA9IDU5OwoJCQkJaWYoaXNzZXQoJGJsb2NrSW5mb1sncGFyYW1zJ11bJ2VuZF9taW51dGUnXSkgJiYgJGJsb2NrSW5mb1sncGFyYW1zJ11bJ2VuZF9taW51dGUnXSA+PSAwICYmICRibG9ja0luZm9bJ3BhcmFtcyddWydlbmRfbWludXRlJ10gPCA1OSkKCQkJCXsKCQkJCQkkZW5kTWludXRlID0gdHJpbSgkYmxvY2tJbmZvWydwYXJhbXMnXVsnZW5kX21pbnV0ZSddKTsKCQkJCX0KCQkJCQoJCQkJaWYoJGVuZE1pbnV0ZSA8ICRzdGFydE1pbnV0ZSkKCQkJCXsKCQkJCQkkZW5kTWludXRlID0gJHN0YXJ0TWludXRlOwoJCQkJfQoJCQkJCgkJCQkkc3RhcnRTZWNvbmQgPSAwOwoJCQkJaWYoaXNzZXQoJGJsb2NrSW5mb1sncGFyYW1zJ11bJ3N0YXJ0X3NlY29uZCddKSAmJiAkYmxvY2tJbmZvWydwYXJhbXMnXVsnc3RhcnRfc2Vjb25kJ10gPiAwICYmICRibG9ja0luZm9bJ3BhcmFtcyddWydzdGFydF9zZWNvbmQnXSA8PSA1OSkKCQkJCXsKCQkJCQkkc3RhcnRTZWNvbmQgPSB0cmltKCRibG9ja0luZm9bJ3BhcmFtcyddWydzdGFydF9zZWNvbmQnXSk7CgkJCQl9CgkJCQkKCQkJCSRlbmRTZWNvbmQgPSA1OTsKCQkJCWlmKGlzc2V0KCRibG9ja0luZm9bJ3BhcmFtcyddWydlbmRfc2Vjb25kJ10pICYmICRibG9ja0luZm9bJ3BhcmFtcyddWydlbmRfc2Vjb25kJ10gPj0gMCAmJiAkYmxvY2tJbmZvWydwYXJhbXMnXVsnZW5kX3NlY29uZCddIDwgNTkpCgkJCQl7CgkJCQkJJGVuZFNlY29uZCA9IHRyaW0oJGJsb2NrSW5mb1sncGFyYW1zJ11bJ2VuZF9zZWNvbmQnXSk7CgkJCQl9CgkJCQkKCQkJCWlmKCRlbmRTZWNvbmQgPCAkc3RhcnRTZWNvbmQpCgkJCQl7CgkJCQkJJGVuZFNlY29uZCA9ICRzdGFydFNlY29uZDsKCQkJCX0KCQkJCQoJCQkJJHN0ZXBIb3VycyA9IDE7CgkJCQlpZihpc3NldCgkYmxvY2tJbmZvWydwYXJhbXMnXVsnc3RlcF9ob3VycyddKSAmJiAkYmxvY2tJbmZvWydwYXJhbXMnXVsnc3RlcF9ob3VycyddID4gMCAmJiAkYmxvY2tJbmZvWydwYXJhbXMnXVsnc3RlcF9ob3VycyddIDw9ICgkZW5kSG91ci0kc3RhcnRIb3VyKSkKCQkJCXsKCQkJCQkkc3RlcEhvdXJzID0gdHJpbSgkYmxvY2tJbmZvWydwYXJhbXMnXVsnc3RlcF9ob3VycyddKTsKCQkJCX0KCQkJCWVsc2UgaWYoaXNzZXQoJGJsb2NrSW5mb1sncGFyYW1zJ11bJ3N0ZXBfaG91cnMnXSkgJiYgJGJsb2NrSW5mb1sncGFyYW1zJ11bJ3N0ZXBfaG91cnMnXSA+IDAgJiYgJGJsb2NrSW5mb1sncGFyYW1zJ11bJ3N0ZXBfaG91cnMnXSA+PSAoJGVuZEhvdXItJHN0YXJ0SG91cikpCgkJCQl7CgkJCQkJJHN0ZXBIb3VycyA9ICRlbmRIb3VyLSRzdGFydEhvdXI7CgkJCQl9CgkJCQkKCQkJCSRzdGVwTWludXRlcyA9IDEwOwoJCQkJaWYoaXNzZXQoJGJsb2NrSW5mb1sncGFyYW1zJ11bJ3N0ZXBfbWludXRlcyddKSAmJiAkYmxvY2tJbmZvWydwYXJhbXMnXVsnc3RlcF9taW51dGVzJ10gPiAwICYmICRibG9ja0luZm9bJ3BhcmFtcyddWydzdGVwX21pbnV0ZXMnXSA8PSAoJGVuZE1pbnV0ZS0kc3RhcnRNaW51dGUpKQoJCQkJewoJCQkJCSRzdGVwTWludXRlcyA9IHRyaW0oJGJsb2NrSW5mb1sncGFyYW1zJ11bJ3N0ZXBfbWludXRlcyddKTsKCQkJCX0KCQkJCWVsc2UgaWYoaXNzZXQoJGJsb2NrSW5mb1sncGFyYW1zJ11bJ3N0ZXBfbWludXRlcyddKSAmJiAkYmxvY2tJbmZvWydwYXJhbXMnXVsnc3RlcF9taW51dGVzJ10gPiAwICYmICRibG9ja0luZm9bJ3BhcmFtcyddWydzdGVwX21pbnV0ZXMnXSA+PSAoJGVuZE1pbnV0ZS0kc3RhcnRNaW51dGUpKQoJCQkJewoJCQkJCSRzdGVwTWludXRlcyA9ICRlbmRNaW51dGUtJHN0YXJ0TWludXRlOwoJCQkJfQoJCQkJCgkJCQkkc3RlcFNlY29uZHMgPSAxOwoJCQkJaWYoaXNzZXQoJGJsb2NrSW5mb1sncGFyYW1zJ11bJ3N0ZXBfc2Vjb25kcyddKSAmJiAkYmxvY2tJbmZvWydwYXJhbXMnXVsnc3RlcF9zZWNvbmRzJ10gPiAwICYmICRibG9ja0luZm9bJ3BhcmFtcyddWydzdGVwX3NlY29uZHMnXSA8PSAoJGVuZFNlY29uZC0kc3RhcnRTZWNvbmRzKSkKCQkJCXsKCQkJCQkkc3RlcFNlY29uZHMgPSB0cmltKCRibG9ja0luZm9bJ3BhcmFtcyddWydzdGVwX3NlY29uZHMnXSk7CgkJCQl9CgkJCQllbHNlIGlmKGlzc2V0KCRibG9ja0luZm9bJ3BhcmFtcyddWydzdGVwX3NlY29uZHMnXSkgJiYgJGJsb2NrSW5mb1sncGFyYW1zJ11bJ3N0ZXBfc2Vjb25kcyddID4gMCAmJiAkYmxvY2tJbmZvWydwYXJhbXMnXVsnc3RlcF9zZWNvbmRzJ10gPj0gKCRlbmRTZWNvbmQtJHN0YXJ0U2Vjb25kcykpCgkJCQl7CgkJCQkJJHN0ZXBTZWNvbmRzID0gJGVuZFNlY29uZC0kc3RhcnRTZWNvbmRzOwoJCQkJfQoJCQkJCgkJCQkkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydzaG93MjRoJ10gICAgICA9ICRzaG93MjRoOwoJCQkJJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnbW9kZSddICAgICAgICAgPSAkbW9kZTsKCQkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ3N0YXJ0X2hvdXInXSAgID0gJHN0YXJ0SG91cjsKCQkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2VuZF9ob3VyJ10gICAgID0gJGVuZEhvdXI7CgkJCQkkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydzdGFydF9taW51dGUnXSA9ICRzdGFydE1pbnV0ZTsKCQkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2VuZF9taW51dGUnXSAgID0gJGVuZE1pbnV0ZTsKCQkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ3N0YXJ0X3NlY29uZCddID0gJHN0YXJ0U2Vjb25kOwoJCQkJJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnZW5kX3NlY29uZCddICAgPSAkZW5kU2Vjb25kOwoJCQkJJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnc3RlcF9ob3VycyddICAgPSAkc3RlcEhvdXJzOwoJCQkJJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnc3RlcF9taW51dGVzJ10gPSAkc3RlcE1pbnV0ZXM7CgkJCQkkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydzdGVwX3NlY29uZHMnXSA9ICRzdGVwU2Vjb25kczsKCQkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ3Nob3dfY2xvY2snXSAgID0gJHNob3dDbG9jazsKCQkJfQoJCQllbHNlIGlmKCRibG9ja1R5cGUgPT0gJ2Ryb3Bkb3duJyB8fCAkYmxvY2tUeXBlID09ICdzZWxlY3RfbXVsdGlwbGUnKSAKCQkJewoJCQkJaWYoJGJsb2NrVHlwZSA9PSAnc2VsZWN0X211bHRpcGxlJykgCgkJCQl7CgkJCQkJJHNvcnRhYmxlID0gZmFsc2U7CgkJCQkJLy8gZGVwcmVjYXRlZAoJCQkJCWlmKGlzc2V0KCRibG9ja0luZm9bJ3BhcmFtcyddWydzb3J0YWJsZV9pdGVtcyddKSAmJiAkdGhpcy0+SXNUcnVlKCRibG9ja0luZm9bJ3BhcmFtcyddWydzb3J0YWJsZV9pdGVtcyddKSkgCgkJCQkJewoJCQkJCQkkc29ydGFibGUgPSB0cnVlOwoJCQkJCX0KCQkJCQlpZihpc3NldCgkYmxvY2tJbmZvWydwYXJhbXMnXVsnc29ydGFibGUnXSkgJiYgJHRoaXMtPklzVHJ1ZSgkYmxvY2tJbmZvWydwYXJhbXMnXVsnc29ydGFibGUnXSkpIAoJCQkJCXsKCQkJCQkJJHNvcnRhYmxlID0gdHJ1ZTsKCQkJCQl9CgkJCQkJJGJsb2NrSW5mb1snc29ydGFibGUnXSA9ICRzb3J0YWJsZTsKCQkJCX0KCQkJCQoJCQkJJGRlbGltaXRlciA9ICd8JzsKCQkJCWlmKGlzc2V0KCRibG9ja0luZm9bJ3BhcmFtcyddWydkZWxpbWl0ZXInXSkgJiYgJGJsb2NrSW5mb1sncGFyYW1zJ11bJ2RlbGltaXRlciddICE9ICcnKSAKCQkJCXsKCQkJCQkkZGVsaW1pdGVyID0gJGJsb2NrSW5mb1sncGFyYW1zJ11bJ2RlbGltaXRlciddOwoJCQkJfQoJCQkJJGl0ZW1zID0gJyc7CgkJCQlpZihpc3NldCgkYmxvY2tJbmZvWydwYXJhbXMnXVsnaXRlbXMnXSkgJiYgJGJsb2NrSW5mb1sncGFyYW1zJ11bJ2l0ZW1zJ10gIT0gJycpIAoJCQkJewoJCQkJCSRpdGVtcyA9IHRyaW0oJGJsb2NrSW5mb1sncGFyYW1zJ11bJ2l0ZW1zJ10pOwoJCQkJfQoJCQkJJHZhbHVlcyA9ICcnOwoJCQkJaWYoaXNzZXQoJGJsb2NrSW5mb1sncGFyYW1zJ11bJ3ZhbHVlcyddKSAmJiAkYmxvY2tJbmZvWydwYXJhbXMnXVsndmFsdWVzJ10gIT0gJycpIAoJCQkJewoJCQkJCSR2YWx1ZXMgPSB0cmltKCRibG9ja0luZm9bJ3BhcmFtcyddWyd2YWx1ZXMnXSk7CgkJCQl9CgkJCQkkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydpdGVtcyddICAgICA9ICRpdGVtczsKCQkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ3ZhbHVlcyddICAgID0gJHZhbHVlczsKCQkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2RlbGltaXRlciddID0gJGRlbGltaXRlcjsKCQkJfQoJCQllbHNlIGlmKCRibG9ja1R5cGUgPT0gJ211bHRpX2lucHV0JykgCgkJCXsKCQkJCSRpbnB1dHMgPSAnJzsKCQkJCWlmKGlzc2V0KCRibG9ja0luZm9bJ3BhcmFtcyddWydpbnB1dHMnXSkpCgkJCQl7CgkJCQkJJGlucHV0cyA9IHRyaW0oJGJsb2NrSW5mb1sncGFyYW1zJ11bJ2lucHV0cyddKTsKCQkJCX0KCQkJCQoJCQkJJHZhbHVlRGVsaW0gPSAnPCEtLSBtdWx0aV9pbnB1dF92YWx1ZV9kZWxpbWl0ZXIgLS0+JzsKCQkJCWlmKGlzc2V0KCRibG9ja0luZm9bJ3BhcmFtcyddWyd2YWx1ZV9kZWxpbWl0ZXInXSkpCgkJCQl7CgkJCQkJJHZhbHVlRGVsaW0gPSB0cmltKCRibG9ja0luZm9bJ3BhcmFtcyddWyd2YWx1ZV9kZWxpbWl0ZXInXSk7CgkJCQl9CgkJCQkKCQkJCSRpbnB1dERlbGltID0gJzwhLS0gbXVsdGlfaW5wdXRfZGVsaW1pdGVyIC0tPic7CgkJCQlpZihpc3NldCgkYmxvY2tJbmZvWydwYXJhbXMnXVsnaW5wdXRfZGVsaW1pdGVyJ10pKQoJCQkJewoJCQkJCSRpbXB1dERlbGltID0gdHJpbSgkYmxvY2tJbmZvWydwYXJhbXMnXVsnaW5wdXRfZGVsaW1pdGVyJ10pOwoJCQkJfQoJCQkJJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnaW5wdXRzJ10gICAgICAgICAgPSAkaW5wdXRzOwoJCQkJJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsndmFsdWVfZGVsaW1pdGVyJ10gPSAkdmFsdWVEZWxpbTsKCQkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2lucHV0X2RlbGltaXRlciddID0gJGlucHV0RGVsaW07CgkJCX0KCQkJCgkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ211bHRpcGxlJ10gICAgICAgICA9IGZhbHNlOwoJCQkkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydsYWJlbCddICAgICAgICAgICAgPSAkbGFiZWw7CgkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ3NtYXJ0eSddICAgICAgICAgICA9ICRzbWFydHk7CgkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ3N0eWxlJ10gICAgICAgICAgICA9ICRzdHlsZTsKCQkJJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsndHlwZSddICAgICAgICAgICAgID0gJGJsb2NrVHlwZTsKCQkJJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnYmxvY2tfdHlwZSddICAgICAgID0gJGJsb2NrVHlwZTsKCQkJJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnYmxvY2tfdGFiJ10gICAgICAgID0gJGJsb2NrVGFiOwoJCQkkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydlZGl0b3JfdXNlcnMnXSAgICAgPSAkZWRpdG9yVXNlcnM7CgkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2VkaXRvcl9ncm91cHMnXSAgICA9ICRlZGl0b3JHcm91cHM7CgkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2FsbG93X25vbmUnXSAgICAgICA9ICRhbGxvd05vbmU7CgkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ3RyYW5zbGF0ZV9sYWJlbHMnXSA9ICR0cmFuc2xhdGVMYWJlbHM7CgkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ3RyYW5zbGF0ZV92YWx1ZXMnXSA9ICR0cmFuc2xhdGVWYWx1ZXM7CgkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2Rlc2NyaXB0aW9uJ10gICAgICA9ICRkZXNjcmlwdGlvbjsKCQkJJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnbnInXSAgICAgICAgICAgICAgID0gY291bnQoJHRoaXMtPl9jb250ZW50QmxvY2tzKTsKCQkJJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnY29sbGFwc2UnXSAgICAgICAgID0gJGNvbGxhcHNlOwoJCQkkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydub19jb2xsYXBzZSddICAgICAgPSAkbm9fY29sbGFwc2U7CgkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2Jsb2NrX2dyb3VwJ10gICAgICA9ICRibG9ja0dyb3VwOwoJCQkkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydkZWZhdWx0J10gICAgICAgICAgPSAkZGVmYXVsdDsKCQkJJHRoaXMtPkFkZEV4dHJhUHJvcGVydHkoJGJsb2NrSWQpOwoJCX0KCQkkdGhpcy0+bVByb3BlcnRpZXMtPkxvYWQoJHRoaXMtPm1JZCk7CgkJcmV0dXJuICR0aGlzLT5fY29udGVudEJsb2NrczsKCX0KCQoJZnVuY3Rpb24gR2V0QWR2YW5jZWRDb250ZW50QmxvY2tJbnB1dCgkYWRkaW5nID0gZmFsc2UpIAoJewoJCSR0aGlzLT5HZXRBZHZhbmNlZENvbnRlbnRCbG9ja3MoJGFkZGluZyk7CgkJCgkJZGVidWdfYnVmZmVyKCR0aGlzLT5fY29udGVudEJsb2NrcywnQWR2YW5jZWRDb250ZW50IGNvbnRlbnQgYmxvY2tzIGFmdGVyLi4uJyk7CgkJCgkJJHJldCAgICA9IGFycmF5KCk7CgkJJHRtcCAgICA9IGFycmF5KCk7CgkJJHRhYl9pZCA9ICdtYWluJzsKCQkkdGFiICAgID0gMDsKCQkKCQkkQWR2YW5jZWRDb250ZW50ID0mIGNtc191dGlsczo6Z2V0X21vZHVsZSgnQWR2YW5jZWRDb250ZW50Jyk7CgkJJGogPSAwOwoJCWZvcmVhY2goJHRoaXMtPl9ibG9ja0dyb3VwcyBhcyAkYmxvY2tHcm91cElkID0+ICRibG9ja0dyb3VwKSAKCQl7CgkJCSR0aGlzLT5fYmxvY2tHcm91cHNbJGJsb2NrR3JvdXBJZF1bJ2Rpc3BsYXknXSA9ICRBZHZhbmNlZENvbnRlbnQtPkdldEl0ZW1EaXNwbGF5KCdncm91cCcsICRibG9ja0dyb3VwSWQsICR0aGlzLT5tSWQsICR0aGlzLT5tVGVtcGxhdGVJZCwgISRBZHZhbmNlZENvbnRlbnQtPkdldFByZWZlcmVuY2UoJ2NvbGxhcHNlX2dyb3VwX2RlZmF1bHQnLDEpKTsKCQkJCSR0aGlzLT5fYmxvY2tHcm91cHNbJGJsb2NrR3JvdXBJZF1bJ3ByZWZfdXJsJ10gPSBzdHJfcmVwbGFjZSgnJmFtcDsnLCcmJywKCQkJCQkkQWR2YW5jZWRDb250ZW50LT5DcmVhdGVMaW5rKCdtMV8nLCAnc2F2ZVByZWZzJywgJycsICRBZHZhbmNlZENvbnRlbnQtPmxhbmcoJ3RvZ2dsZV9ncm91cCcpLCAKCQkJCQkJYXJyYXkoJ2l0ZW1fdHlwZSc9Pidncm91cCcsCgkJCQkJCQknZGlzYWJsZV90aGVtZSc9PnRydWUsIAoJCQkJCQkJJ2FqYXgnPT50cnVlLCAKCQkJCQkJCSdjb250ZW50X2lkJz0+JHRoaXMtPm1JZCwKCQkJCQkJCSd0ZW1wbGF0ZV9pZCc9PiR0aGlzLT5tVGVtcGxhdGVJZCwKCQkJCQkJCSdpdGVtX2lkJz0+JGJsb2NrR3JvdXBJZCksIAoJCQkJCQknJywgdHJ1ZSkpOwoJCX0KCQlmb3JlYWNoKCR0aGlzLT5fcGFnZVRhYnNbJ21haW4nXVsnY29udGVudF9ibG9ja3MnXSBhcyAkYmxvY2tJZCkgCgkJewoJCQkkaisrOwoJCQkKCQkJaWYoISR0aGlzLT5DaGVja0Jsb2NrUGVybWlzc2lvbigkYmxvY2tJZCkpCgkJCQljb250aW51ZTsKCQkJCgkJCWlmKCR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ3R5cGUnXSAhPSAnJyAmJiAkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydzbWFydHknXSkgCgkJCXsKCQkJCWZvcmVhY2goJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXSBhcyAkcHJvcE5hbWU9PiRwcm9wVmFsdWUpIAoJCQkJewoJCQkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF0gPSAkdGhpcy0+RG9TbWFydHkoJHByb3BWYWx1ZSk7CgkJCQl9CgkJCX0KCQkJCgkJCSMgTUxFIHN1cHBvcnQKCQkJaWYoJHRoaXMtPm1sZSAmJiAkdGhpcy0+YmxvY2tMYW5nICE9ICcnICYmICRibG9ja0lkICE9ICdjb250ZW50JyAuICR0aGlzLT5ibG9ja0xhbmcpIAoJCQl7CgkJCQkkdmFsdWUgPSAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgkYmxvY2tJZCAuICR0aGlzLT5ibG9ja0xhbmcpOwoJCQl9CgkJCWVsc2UKCQkJeyAgICMtLS0KCQkJCSR2YWx1ZSA9ICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCRibG9ja0lkKTsKCQkJfQoJCQkKCQkJIyBNTEUgc3VwcG9ydAoJCQlpZigkdGhpcy0+bWxlICYmICR2YWx1ZSA9PSAnJyAmJiAkdGhpcy0+ZGVmYXVsdEJsb2NrTGFuZyAhPSAnJyAmJiAkdGhpcy0+ZGVmYXVsdEJsb2NrTGFuZyAhPSAkdGhpcy0+YmxvY2tMYW5nKSAKCQkJewoJCQkJaWYoJGJsb2NrSWQgIT0gJ2NvbnRlbnQnIC4gJHRoaXMtPmJsb2NrTGFuZykKCQkJCXsKCQkJCQkkdmFsdWUgPSAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgkYmxvY2tJZCAuICR0aGlzLT5kZWZhdWx0QmxvY2tMYW5nKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkdmFsdWUgPSAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgnY29udGVudCcgLiAkdGhpcy0+ZGVmYXVsdEJsb2NrTGFuZyk7CgkJCQl9CgkJCX0KCQkJIy0tLQoJCQkKCQkJaWYoJGFkZGluZyB8fCAoJHZhbHVlID09ICcnICYmICEkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydhbGxvd19ub25lJ10pKSAKCQkJewoJCQkJJHZhbHVlID0gJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnZGVmYXVsdCddOwoJCQl9CgkJCQoJCQkkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydjb250ZW50J10gPSBjbXNfaHRtbGVudGl0aWVzKCR2YWx1ZSwgRU5UX05PUVVPVEVTLCBnZXRfZW5jb2RpbmcoJycpKTsKCQkJJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnaW5wdXQnXSAgID0gJEFkdmFuY2VkQ29udGVudC0+bGFuZygnaW52YWxpZF9ibG9ja3R5cGUnLCR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ3R5cGUnXSwkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydpZCddKTsKCQkJCgkJCWlmKCR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2xhYmVsJ10gPT0gdWN3b3JkcygkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydpZCddKSAKCQkJJiYgKCRibG9ja0lkID09IG1kNSgnY29udGVudF9lbicuJGopIAoJCQl8fCAkYmxvY2tJZCA9PSAnY29udGVudF9lbicgCgkJCXx8ICgkdGhpcy0+bWxlICYmICR0aGlzLT5ibG9ja0xhbmcgIT0gJycgCgkJCSYmICgkYmxvY2tJZCA9PSAnY29udGVudCcgLiAkdGhpcy0+YmxvY2tMYW5nIAoJCQl8fCAkYmxvY2tJZCA9PSBtZDUoJ2NvbnRlbnQnIC4gJHRoaXMtPmJsb2NrTGFuZy4kaikpKSkpCgkJCXsKCQkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2xhYmVsJ10gPSBsYW5nKCdjb250ZW50Jyk7CgkJCX0KCQkJCgkJCWlmKCR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ3RyYW5zbGF0ZV9sYWJlbHMnXSkgCgkJCXsKCQkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2xhYmVsJ10gPSAkQWR2YW5jZWRDb250ZW50LT5sYW5nKCR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2xhYmVsJ10pOwoJCQl9CgkJCQoJCQkkYmxvY2tEaXNwbGF5ID0gJEFkdmFuY2VkQ29udGVudC0+R2V0SXRlbURpc3BsYXkoJ2Jsb2NrJywgJGJsb2NrSWQsICR0aGlzLT5tSWQsICR0aGlzLT5tVGVtcGxhdGVJZCwgISR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2NvbGxhcHNlJ10pOwoJCQkkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydkaXNwbGF5J10gID0gJGJsb2NrRGlzcGxheTsKCQkJJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsncHJlZl91cmwnXSA9IHN0cl9yZXBsYWNlKCcmYW1wOycsJyYnLAoJCQkJJEFkdmFuY2VkQ29udGVudC0+Q3JlYXRlTGluaygnbTFfJywgJ3NhdmVQcmVmcycsICcnLCAkQWR2YW5jZWRDb250ZW50LT5sYW5nKCd0b2dnbGVfYmxvY2snKSwgCgkJCQkJYXJyYXkoJ2l0ZW1fdHlwZSc9PidibG9jaycsCgkJCQkJCSdkaXNhYmxlX3RoZW1lJz0+dHJ1ZSwgCgkJCQkJCSdhamF4Jz0+dHJ1ZSwgCgkJCQkJCSdjb250ZW50X2lkJz0+JHRoaXMtPm1JZCwKCQkJCQkJJ3RlbXBsYXRlX2lkJz0+JHRoaXMtPm1UZW1wbGF0ZUlkLAoJCQkJCQknaXRlbV9pZCc9PiRibG9ja0lkKSwgCgkJCQkJJycsIHRydWUpKTsKCQkJCgkJCWlmKCR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ211bHRpcGxlJ10gJiYgJEFkdmFuY2VkQ29udGVudC0+R2V0SXRlbURpc3BsYXkoJ21lc3NhZ2UnLCAkYmxvY2tJZCwgJHRoaXMtPm1JZCwgJHRoaXMtPm1UZW1wbGF0ZUlkKSkgCgkJCXsKCQkJCSRoaWRlTGluayA9IHN0cl9yZXBsYWNlKCcmYW1wOycsJyYnLAoJCQkJCSRBZHZhbmNlZENvbnRlbnQtPkNyZWF0ZUxpbmsoJ20xXycsICdzYXZlUHJlZnMnLCAnJywgJEFkdmFuY2VkQ29udGVudC0+bGFuZygndG9nZ2xlX21lc3NhZ2UnKSwgCgkJCQkJCWFycmF5KCdpdGVtX3R5cGUnPT4nbWVzc2FnZScsCgkJCQkJCQknZGlzYWJsZV90aGVtZSc9PnRydWUsIAoJCQkJCQkJJ2FqYXgnPT50cnVlLCAKCQkJCQkJCSdjb250ZW50X2lkJz0+JHRoaXMtPm1JZCwKCQkJCQkJCSd0ZW1wbGF0ZV9pZCc9PiR0aGlzLT5tVGVtcGxhdGVJZCwKCQkJCQkJCSdpdGVtX2lkJz0+JGJsb2NrSWQsCgkJCQkJCQknaXRlbV9kaXNwbGF5Jz0+MCksIAoJCQkJCQknJywgZmFsc2UsJycsJ29uY2xpY2s9ImpRdWVyeS5nZXQodGhpcy5ocmVmKTsgalF1ZXJ5KHRoaXMpLnBhcmVudCgpLnRvZ2dsZShcJ2Zhc3RcJyk7IHJldHVybiBmYWxzZTsiJykpOwoJCQkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2Rlc2NyaXB0aW9uJ10gPSAnPHA+Jy4kQWR2YW5jZWRDb250ZW50LT5sYW5nKCdub3RpY2VfZHVwbGljYXRlY29udGVudCcsICR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2lkJ10pLicgKCcuICRoaWRlTGluayAuJyk8L3A+Jy4kdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydkZXNjcmlwdGlvbiddOwoJCQl9CgkJCQoJCQlpZigkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydibG9ja190eXBlJ10gIT0gJycgJiYgbWV0aG9kX2V4aXN0cygkdGhpcywnZGlzcGxheV8nLiR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2Jsb2NrX3R5cGUnXS4nX2Jsb2NrJykpCgkJCXsKCQkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2lucHV0J10gPSBjYWxsX3VzZXJfZnVuYyhhcnJheSgkdGhpcywnZGlzcGxheV8nLiR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2Jsb2NrX3R5cGUnXS4nX2Jsb2NrJyksICR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF0sICR2YWx1ZSwgJGFkZGluZyk7CgkJCX0KCQkJaWYoJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnYmxvY2tfdGFiJ10gIT0gJycgfHwgJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnYmxvY2tfZ3JvdXAnXSAhPSAnJykgCgkJCXsKCQkJCXVuc2V0KCR0aGlzLT5fcGFnZVRhYnNbJHRhYl9pZF1bJ2NvbnRlbnRfYmxvY2tzJ11bJGJsb2NrSWRdKTsKCQkJfQoJCQlpZigkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydibG9ja190YWInXSAhPSAnJyAmJiAkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydibG9ja19ncm91cCddICE9ICcnKSAKCQkJewoJCQkJdW5zZXQoJHRoaXMtPl9wYWdlVGFic1skdGFiX2lkXVsnYmxvY2tfZ3JvdXBzJ11bJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnYmxvY2tfZ3JvdXAnXV0pOwoJCQl9CgkJfQoJCSRBZHZhbmNlZENvbnRlbnQtPnNtYXJ0eS0+YXNzaWduKCdtb2R1bGVfaWQnLCAnbTFfJyk7CgkJJEFkdmFuY2VkQ29udGVudC0+c21hcnR5LT5hc3NpZ25fYnlfcmVmKCdwYWdlX3RhYl9ucicsICR0YWIpOwoJCSRBZHZhbmNlZENvbnRlbnQtPnNtYXJ0eS0+YXNzaWduX2J5X3JlZigncGFnZV90YWJfaWQnLCAkdGFiX2lkKTsKCQkkQWR2YW5jZWRDb250ZW50LT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ3BhZ2VfdGFicycsICR0aGlzLT5fcGFnZVRhYnMpOwoJCSRBZHZhbmNlZENvbnRlbnQtPnNtYXJ0eS0+YXNzaWduX2J5X3JlZignYmxvY2tfdGFicycsICR0aGlzLT5fYmxvY2tUYWJzKTsKCQkkQWR2YW5jZWRDb250ZW50LT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ2Jsb2NrX2dyb3VwcycsICR0aGlzLT5fYmxvY2tHcm91cHMpOwoJCSRBZHZhbmNlZENvbnRlbnQtPnNtYXJ0eS0+YXNzaWduX2J5X3JlZignZGF0ZV9ibG9ja3MnLCAkdGhpcy0+X2RhdGVCbG9ja3MpOwoJCSRBZHZhbmNlZENvbnRlbnQtPnNtYXJ0eS0+YXNzaWduX2J5X3JlZignY29udGVudF9ibG9ja3MnLCAkdGhpcy0+X2NvbnRlbnRCbG9ja3MpOwoJCSRjb25maWcgPSBjbXNtcygpLT5HZXRDb25maWcoKTsKCQlpZigkY29uZmlnWydkZWJ1ZyddKSAKCQl7CgkJCWRlYnVnX2J1ZmZlcigkdGhpcy0+X3BhZ2VUYWJzLCdBZHZhbmNlZENvbnRlbnQgX3BhZ2VUYWJzJyk7CgkJCWRlYnVnX2J1ZmZlcigkdGhpcy0+X2Jsb2NrVGFicywnQWR2YW5jZWRDb250ZW50IF9ibG9ja1RhYnMnKTsKCQkJZGVidWdfYnVmZmVyKCR0aGlzLT5fYmxvY2tHcm91cHMsJ0FkdmFuY2VkQ29udGVudCBfYmxvY2tHcm91cHMnKTsKCQkJZGVidWdfYnVmZmVyKCR0aGlzLT5fY29udGVudEJsb2NrcywnQWR2YW5jZWRDb250ZW50IF9jb250ZW50QmxvY2tzJyk7CgkJCWRlYnVnX2J1ZmZlcigkdGhpcy0+X3RhYklkcywnQWR2YW5jZWRDb250ZW50IF90YWJJZHMnKTsKCQl9CgkJcmV0dXJuIGFycmF5KCRBZHZhbmNlZENvbnRlbnQtPmxhbmcoJ0FkdmFuY2VkQ29udGVudCcpLCAkQWR2YW5jZWRDb250ZW50LT5Qcm9jZXNzVGVtcGxhdGUoJ2NvbnRlbnRUeXBlLnRwbCcpKTsKCX0KCQoJCglwcml2YXRlIGZ1bmN0aW9uIGRpc3BsYXlfdGV4dF9ibG9jaygkYmxvY2tJbmZvLCR2YWx1ZSA9ICcnLCRhZGRpbmcgPSBmYWxzZSkKCXsKCQkjZWNobyAkdmFsdWUuIjxiciAvPiI7CgkJJHVzZXd5c2l3eWcgPSAhJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJ2Rpc2FibGVfd3lzaXd5ZycpOwoJCWlmKCEkdXNld3lzaXd5ZykKCQl7CgkJCSRibG9ja0luZm9bJ3VzZXd5c2l3eWcnXSA9IGZhbHNlOwoJCX0KCQlpZiAoJGJsb2NrSW5mb1snb25lbGluZSddID09IGZhbHNlKSAKCQl7CgkJCXJldHVybiBjcmVhdGVfdGV4dGFyZWEoJGJsb2NrSW5mb1sndXNld3lzaXd5ZyddLCAkdmFsdWUsICRibG9ja0luZm9bJ2lkJ10sICcnLCAkYmxvY2tJbmZvWydpZCddLCAnJywgJHRoaXMtPl9zdHlsZXNoZWV0KTsKCQl9CgkJZWxzZSAKCQl7CgkJCXJldHVybiAnPGlucHV0IHR5cGU9InRleHQiJyAuICgkYmxvY2tJbmZvWydzdHlsZSddICE9ICcnPydzdHlsZT0iJyAuICRibG9ja0luZm9bJ3N0eWxlJ10gLiAnICInOicnKSAuICgkYmxvY2tJbmZvWydtYXhsZW5ndGgnXSAhPSAnJz8nIG1heGxlbmd0aD0iJyAuICRibG9ja0luZm9bJ21heGxlbmd0aCddIC4gJyAiJzonJykgLiAoJGJsb2NrSW5mb1snc2l6ZSddICE9ICcnPycgc2l6ZT0iJyAuICRibG9ja0luZm9bJ3NpemUnXSAuICcgIic6JycpIC4gJyBuYW1lPSInIC4gJGJsb2NrSW5mb1snaWQnXSAuICciIHZhbHVlPSInIC4gaHRtbHNwZWNpYWxjaGFycygkdmFsdWUpIC4gJyIgLz4nOwoJCX0KCX0KCQoJLyoKCSAqIHJldHVybiB0aGUgSFRNTCB0byBjcmVhdGUgYW4gaW1hZ2UgZHJvcGRvd24gaW4gdGhlIGFkbWluIGNvbnNvbGUuCgkgKiBkb2VzIG5vdCBpbmNsdWRlIGEgbGFiZWwuCgkgKiB0YWtlbiBmcm9tIGRlZmF1bHQgY29udGVudHR5cGUgKGF1dGhvcjogQ2FsZ3V5KQoJICovCglwcml2YXRlIGZ1bmN0aW9uIGRpc3BsYXlfaW1hZ2VfYmxvY2soJGJsb2NrSW5mbywkdmFsdWUgPSAnJywkYWRkaW5nID0gZmFsc2UpCgl7CgkJJGNvbmZpZyA9IGNtc21zKCktPkdldENvbmZpZygpOwoJCSRkaXIgICAgPSBjbXNfam9pbl9wYXRoKCRjb25maWdbJ3VwbG9hZHNfcGF0aCddLCRibG9ja0luZm9bJ2RpciddKTsKCQkkb3B0cHJlZml4ID0gJ3VwbG9hZHMnOwoJCWlmKCAhZW1wdHkoJGJsb2NrSW5mb1snZGlyJ10pICkgJG9wdHByZWZpeCAuPSAnLycuJGJsb2NrSW5mb1snZGlyJ107CgkJJGlucHV0bmFtZSA9ICRibG9ja0luZm9bJ2lkJ107CgkJaWYoIGlzc2V0KCRibG9ja0luZm9bJ2lucHV0bmFtZSddKSApCgkJewoJCQkkaW5wdXRuYW1lID0gJGJsb2NrSW5mb1snaW5wdXRuYW1lJ107CgkJfQoJCSRkcm9wZG93biA9IGNyZWF0ZV9maWxlX2Ryb3Bkb3duKCRpbnB1dG5hbWUsJGRpciwkdmFsdWUsJ2pwZyxqcGVnLHBuZyxnaWYnLAoJCQkkb3B0cHJlZml4LHRydWUpOwoJCWlmKCAkZHJvcGRvd24gPT09IGZhbHNlICkKCQl7CgkJCSRkcm9wZG93biA9IGxhbmcoJ2Vycm9yX3JldHJpZXZpbmdfZmlsZV9saXN0Jyk7CgkJfQoJCXJldHVybiAkZHJvcGRvd247Cgl9CgkKCXByaXZhdGUgZnVuY3Rpb24gZGlzcGxheV9tb2R1bGVfYmxvY2soJGJsb2NrSW5mbywgJHZhbHVlID0gJycsICRhZGRpbmcgPSBmYWxzZSkKCXsKCQkkQWR2YW5jZWRDb250ZW50ID0mIGNtc191dGlsczo6Z2V0X21vZHVsZSgnQWR2YW5jZWRDb250ZW50Jyk7CgkJaWYoJGJsb2NrSW5mb1snbW9kdWxlJ10gPT0gJycpIAoJCXsKCQkJcmV0dXJuICRBZHZhbmNlZENvbnRlbnQtPmxhbmcoJ2Vycm9yX2luc3VmZmljaWVudF9ibG9ja3BhcmFtcycsJ21vZHVsZScsJGJsb2NrSW5mb1snbmFtZSddKTsKCQl9CgkJaWYoICEkbW9kdWxlID0mICRBZHZhbmNlZENvbnRlbnQtPkdldE1vZHVsZUluc3RhbmNlKCRibG9ja0luZm9bJ21vZHVsZSddKSkgCgkJewoJCQlyZXR1cm4gJEFkdmFuY2VkQ29udGVudC0+bGFuZygnZXJyb3JfbG9hZGluZ19tb2R1bGUnLCRibG9ja0luZm9bJ21vZHVsZSddLCRibG9ja0luZm9bJ25hbWUnXSk7CgkJfQoJCWlmKCAhJG1vZHVsZS0+SGFzQ2FwYWJpbGl0eSgnY29udGVudGJsb2NrcycpICkgCgkJeyAKCQkJcmV0dXJuICRBZHZhbmNlZENvbnRlbnQtPmxhbmcoJ2Vycm9yX2NvbnRlbnRibG9ja19zdXBwb3J0JywkYmxvY2tJbmZvWydtb2R1bGUnXSwkYmxvY2tJbmZvWyduYW1lJ10pOwoJCX0KCQkKCQlyZXR1cm4gJG1vZHVsZS0+R2V0Q29udGVudEJsb2NrSW5wdXQoJGJsb2NrSW5mb1snaWQnXSwkdmFsdWUsJGJsb2NrSW5mb1sncGFyYW1zJ10sJGFkZGluZyk7Cgl9CgkKCXByaXZhdGUgZnVuY3Rpb24gZGlzcGxheV9kYXRlX2Jsb2NrKCRibG9ja0luZm8sJHZhbHVlID0gJycsJGFkZGluZyA9IGZhbHNlKQoJewoJCWlmKCEkdmFsdWUpCgkJewoJCQkkdmFsdWUgPSB0aW1lKCk7CgkJfQoJCQoJCSRkYXRlID0gc3RyZnRpbWUoJyV4JywgaW50dmFsKCR2YWx1ZSkpOwoJCSR0aW1lID0gJzA6MCc7CgkJaWYoJGJsb2NrSW5mb1snc2hvd19jbG9jayddKQoJCXsKCQkJJHRpbWUgPSBzdHJmdGltZSgnJUg6JU0nLCBpbnR2YWwoJHZhbHVlKSk7CgkJfQoJCQoJCSRfdG1wICAgICAgICA9ICR0aGlzLT5DbGVhbkFycmF5KGV4cGxvZGUoJzonLCR0aW1lKSk7CgkJJHRpbWVTZWNvbmRzID0gKCgkX3RtcFswXSAqIDM2MDApICsgKCRfdG1wWzFdICogNjApKTsKCQkkZGF0ZVNlY29uZHMgPSAkdmFsdWUgLSAkdGltZVNlY29uZHM7CgkJCgkJJGRhdGVJbnB1dCA9ICc8aW1nIGlkPSInLiRibG9ja0luZm9bJ2lkJ10uJ19BZHZhbmNlZENvbnRlbnREYXRlUGlja2VyVHJpZ2dlciIgc3JjPSIuLi9tb2R1bGVzL0FkdmFuY2VkQ29udGVudC9pbWFnZXMvY2FsZW5kYXIucG5nIiBjbGFzcz0iY2FsZW5kYXJUcmlnZ2VyIiAvPiZuYnNwOwoJCQk8c3BhbiBpZD0iJy4kYmxvY2tJbmZvWydpZCddLidfQWR2YW5jZWRDb250ZW50RGF0ZVBpY2tlckRpc3BsYXkiPicuJGRhdGUuJzwvc3Bhbj4KCQkJPGlucHV0IGlkPSInLiRibG9ja0luZm9bJ2lkJ10uJ19BZHZhbmNlZENvbnRlbnREYXRlIiB0eXBlPSJoaWRkZW4iIG5hbWU9IicuJGJsb2NrSW5mb1snaWQnXS4nX0FkdmFuY2VkQ29udGVudERhdGUiIHZhbHVlPSInLiRkYXRlU2Vjb25kcy4nIiAvPic7CgkJCQoJCSRzdWZmaXggICAgPSAnJzsKCQkkdGltZUlucHV0ID0gJyc7CgkJaWYoJGJsb2NrSW5mb1snc2hvd19jbG9jayddKSAKCQl7CgkJCSR0aW1lSW5wdXQgPSAnJm5ic3A7Jm5ic3A7LSZuYnNwOyZuYnNwOzxzZWxlY3QgbmFtZT0iJy4kYmxvY2tJbmZvWydpZCddLidfQWR2YW5jZWRDb250ZW50VGltZSI+JzsKCQkJJF9pICAgICAgICA9IDA7CgkJCWZvcigkaT0kYmxvY2tJbmZvWydzdGFydF9ob3VyJ107ICRpPD0kYmxvY2tJbmZvWydlbmRfaG91ciddOyAkaSArPSAkYmxvY2tJbmZvWydzdGVwX2hvdXJzJ10pIAoJCQl7CgkJCQlpZigkaTwxMiAmJiAhJGJsb2NrSW5mb1snc2hvdzI0aCddKQoJCQkJewoJCQkJCSRzdWZmaXggPSAnIGFtJzsKCQkJCX0KCQkJCWVsc2UgaWYoISRibG9ja0luZm9bJ3Nob3cyNGgnXSkKCQkJCXsKCQkJCQkkc3VmZml4ID0gJyBwbSc7CgkJCQl9CgkJCQlmb3IoJGo9JGJsb2NrSW5mb1snc3RhcnRfbWludXRlJ107ICRqPD0kYmxvY2tJbmZvWydlbmRfbWludXRlJ107ICRqICs9ICRibG9ja0luZm9bJ3N0ZXBfbWludXRlcyddKSAKCQkJCXsKCQkJCQkkdmFsdWUgPSAoJGkqMzYwMCkgKyAoJGoqNjApOwoJCQkJCWlmKCgkYmxvY2tJbmZvWydlbmRfaG91ciddIDwgMjMgJiYgJHZhbHVlIDw9ICgkYmxvY2tJbmZvWydlbmRfaG91ciddICogMzYwMCkpIHx8ICRibG9ja0luZm9bJ2VuZF9ob3VyJ10gPT0gMjMpCgkJCQkJewoJCQkJCQkkdGltZUlucHV0IC49ICc8b3B0aW9uIHZhbHVlPSInLiAkdmFsdWUgLiciJy4gKCR2YWx1ZSA9PSAkdGltZVNlY29uZHM/ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIic6JycpIC4nPicuICgkaTwxMD8nMCcuJGk6KCEkYmxvY2tJbmZvWydzaG93MjRoJ10gJiYgJGk+MTI/JGktMTI6JGkpKSAuJzonLiAoJGo8MTA/JzAnLiRqOiRqKSAuICRzdWZmaXggLiAnPC9vcHRpb24+JzsKCQkJCQl9CgkJCQl9CgkJCQkkaiA9ICRibG9ja0luZm9bJ3N0YXJ0X21pbnV0ZSddOwoJCQl9CgkJCSR0aW1lSW5wdXQgLj0gJzwvc2VsZWN0Pic7CgkJfQoJCQoJCXJldHVybiAkZGF0ZUlucHV0LiR0aW1lSW5wdXQ7Cgl9CgkKCXByaXZhdGUgZnVuY3Rpb24gZGlzcGxheV9jaGVja2JveF9ibG9jaygkYmxvY2tJbmZvLCR2YWx1ZSA9ICcnLCRhZGRpbmcgPSBmYWxzZSkKCXsKCQlyZXR1cm4gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IicgLiAkYmxvY2tJbmZvWydpZCddIC4gJyIgdmFsdWU9IjAiIC8+CgkJCTxpbnB1dCBjbGFzcz0icGFnZWNoZWNrYm94IicgLiAoJGJsb2NrSW5mb1snc3R5bGUnXSAhPSAnJz8nIHN0eWxlPSInIC4gJGJsb2NrSW5mb1snc3R5bGUnXSAuICcgIic6JycpIC4gJyB0eXBlPSJjaGVja2JveCIgdmFsdWU9IjEiIG5hbWU9IicgLiAkYmxvY2tJbmZvWydpZCddIC4gJyInIC4gKCR2YWx1ZSA9PSAxID8gJyBjaGVja2VkPSJjaGVja2VkIic6JycpIC4gJyAvPic7Cgl9CgkKCXByaXZhdGUgZnVuY3Rpb24gZGlzcGxheV9kcm9wZG93bl9ibG9jaygkYmxvY2tJbmZvLCR2YWx1ZSA9ICcnLCRhZGRpbmcgPSBmYWxzZSkKCXsKCQkkQWR2YW5jZWRDb250ZW50ID0mIGNtc191dGlsczo6Z2V0X21vZHVsZSgnQWR2YW5jZWRDb250ZW50Jyk7CgkJJGl0ZW1zID0gYXJyYXkoKTsKCQlpZigkYmxvY2tJbmZvWydpdGVtcyddICE9ICcnKSAKCQl7CgkJCWZvcmVhY2goZXhwbG9kZSgkYmxvY2tJbmZvWydkZWxpbWl0ZXInXSwgJGJsb2NrSW5mb1snaXRlbXMnXSkgYXMgJGtleSA9PiAkdmFsKSAKCQkJewoJCQkJJGl0ZW1zWyRrZXldWydsYWJlbCddID0gdHJpbSgkdmFsKTsKCQkJCWlmKCRibG9ja0luZm9bJ3RyYW5zbGF0ZV9sYWJlbHMnXSkKCQkJCXsKCQkJCQkkaXRlbXNbJGtleV1bJ2xhYmVsJ10gPSAkQWR2YW5jZWRDb250ZW50LT5sYW5nKCRpdGVtc1ska2V5XVsnbGFiZWwnXSk7CgkJCQl9CgkJCQkKCQkJCSRpdGVtc1ska2V5XVsndmFsdWUnXSAgICA9ICRpdGVtc1ska2V5XVsnbGFiZWwnXTsKCQkJCSRpdGVtc1ska2V5XVsnc2VsZWN0ZWQnXSA9ICgkdmFsdWUgPT09ICR2YWwpOwoJCQl9CgkJfQoJCWlmKCRibG9ja0luZm9bJ3ZhbHVlcyddICE9ICcnKSAKCQl7CgkJCWZvcmVhY2goZXhwbG9kZSgkYmxvY2tJbmZvWydkZWxpbWl0ZXInXSwgJGJsb2NrSW5mb1sndmFsdWVzJ10pIGFzICRrZXkgPT4gJHZhbCkgCgkJCXsKCQkJCSRpdGVtc1ska2V5XVsndmFsdWUnXSA9IHRyaW0oJHZhbCk7CgkJCQlpZigkYmxvY2tJbmZvWyd0cmFuc2xhdGVfdmFsdWVzJ10pCgkJCQl7CgkJCQkJJGl0ZW1zWyRrZXldWyd2YWx1ZSddID0gJEFkdmFuY2VkQ29udGVudC0+bGFuZygkaXRlbXNbJGtleV1bJ3ZhbHVlJ10pOwoJCQkJfQoJCQkJCgkJCQkkaXRlbXNbJGtleV1bJ3NlbGVjdGVkJ10gPSAoJHZhbHVlID09PSAkaXRlbXNbJGtleV1bJ3ZhbHVlJ10pOwoJCQkJCgkJCQlpZighaXNzZXQoJGl0ZW1zWyRrZXldWydsYWJlbCddKSkKCQkJCXsKCQkJCQkkaXRlbXNbJGtleV1bJ2xhYmVsJ10gPSAkaXRlbXNbJGtleV1bJ3ZhbHVlJ107CgkJCQl9CgkJCX0KCQl9CgkJCgkJJGlucHV0ID0gJzxzZWxlY3QgbmFtZT0iJyAuICRibG9ja0luZm9bJ2lkJ10gLiAnIiAnIC4gKCRibG9ja0luZm9bJ3N0eWxlJ10gIT0gJyc/J3N0eWxlPSInIC4gJGJsb2NrSW5mb1snc3R5bGUnXSAuICcgIic6JycpIC4gJyA+JzsKCQlmb3JlYWNoKCRpdGVtcyBhcyAkaXRlbSkgCgkJewoJCQkkaW5wdXQgLj0gJzxvcHRpb24gdmFsdWU9IicgLiAkaXRlbVsndmFsdWUnXSAuICciJzsKCQkJaWYoJGl0ZW1bJ3NlbGVjdGVkJ10pCgkJCXsKCQkJCSRpbnB1dCAuPSAnIHNlbGVjdGVkPSJzZWxlY3RlZCInOwoJCQl9CgkJCSRpbnB1dCAuPSAnPicgLiAkaXRlbVsnbGFiZWwnXSAuICc8L29wdGlvbj4nOwoJCX0KCQkkaW5wdXQgLj0gJzwvc2VsZWN0Pic7CgkJcmV0dXJuICRpbnB1dDsKCX0KCQoJcHJpdmF0ZSBmdW5jdGlvbiBkaXNwbGF5X3NlbGVjdF9tdWx0aXBsZV9ibG9jaygkYmxvY2tJbmZvLCAkdmFsdWUgPSAnJywkYWRkaW5nID0gZmFsc2UpCgl7CgkJJEFkdmFuY2VkQ29udGVudCA9JiBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0FkdmFuY2VkQ29udGVudCcpOwoJCSRzZWxJdGVtcyA9IGFycmF5KCk7CgkJZm9yZWFjaChleHBsb2RlKCRibG9ja0luZm9bJ2RlbGltaXRlciddLCAkdmFsdWUpIGFzICRrZXkgPT4gJHZhbCkgCgkJewoJCQkkc2VsSXRlbXNbJGtleV0gPSB0cmltKCR2YWwpOwoJCX0KCQkkaXRlbXMgPSBhcnJheSgpOwoJCWlmKCRibG9ja0luZm9bJ2l0ZW1zJ10gIT0gJycpIAoJCXsKCQkJZm9yZWFjaChleHBsb2RlKCRibG9ja0luZm9bJ2RlbGltaXRlciddLCAkYmxvY2tJbmZvWydpdGVtcyddKSBhcyAka2V5ID0+ICR2YWwpIAoJCQl7CgkJCQkkaXRlbXNbJGtleV1bJ2xhYmVsJ10gICAgPSB0cmltKCR2YWwpOwoJCQkJaWYoJGJsb2NrSW5mb1sndHJhbnNsYXRlX2xhYmVscyddKQoJCQkJewoJCQkJCSRpdGVtc1ska2V5XVsnbGFiZWwnXSA9ICRBZHZhbmNlZENvbnRlbnQtPmxhbmcoJGl0ZW1zWyRrZXldWydsYWJlbCddKTsKCQkJCX0KCQkJCQoJCQkJJGl0ZW1zWyRrZXldWyd2YWx1ZSddICAgID0gJGl0ZW1zWyRrZXldWydsYWJlbCddOwoJCQkJJGl0ZW1zWyRrZXldWydzZWxlY3RlZCddID0gaW5fYXJyYXkoJGl0ZW1zWyRrZXldWydsYWJlbCddLCRzZWxJdGVtcyk7CgkJCX0KCQl9CgkJaWYoJGJsb2NrSW5mb1sndmFsdWVzJ10gIT0gJycpIAoJCXsKCQkJZm9yZWFjaChleHBsb2RlKCRibG9ja0luZm9bJ2RlbGltaXRlciddLCAkYmxvY2tJbmZvWyd2YWx1ZXMnXSkgYXMgJGtleSA9PiAkdmFsKSAKCQkJewoJCQkJJGl0ZW1zWyRrZXldWyd2YWx1ZSddICAgID0gdHJpbSgkdmFsKTsKCQkJCWlmKCRibG9ja0luZm9bJ3RyYW5zbGF0ZV92YWx1ZXMnXSkKCQkJCXsKCQkJCQkkaXRlbXNbJGtleV1bJ3ZhbHVlJ10gPSAkQWR2YW5jZWRDb250ZW50LT5sYW5nKCRpdGVtc1ska2V5XVsndmFsdWUnXSk7CgkJCQl9CgkJCQkKCQkJCSRpdGVtc1ska2V5XVsnc2VsZWN0ZWQnXSA9IGluX2FycmF5KCRpdGVtc1ska2V5XVsndmFsdWUnXSwkc2VsSXRlbXMpOwoJCQkJaWYoIWlzc2V0KCRpdGVtc1ska2V5XVsnbGFiZWwnXSkpCgkJCQl7CgkJCQkJJGl0ZW1zWyRrZXldWydsYWJlbCddID0gJGl0ZW1zWyRrZXldWyd2YWx1ZSddOwoJCQkJfQoJCQl9CgkJfQoJCQoJCSRpbnB1dCA9ICcKCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9IiIgbmFtZT0iJyAuICRibG9ja0luZm9bJ2lkJ10gLiAnIiAvPic7CgkJCgkJaWYoISRibG9ja0luZm9bJ3NvcnRhYmxlJ10pIAoJCXsKCQkJJHNpemUgPSBjb3VudCgkaXRlbXMpOwoJCQlpZihpc3NldCgkYmxvY2tJbmZvWydzaXplJ10pKQoJCQl7CgkJCQkkc2l6ZSA9ICRibG9ja0luZm9bJ3NpemUnXTsKCQkJfQoJCQkkaW5wdXQgLj0gJwoJCQkJPHNlbGVjdCBuYW1lPSInIC4gJGJsb2NrSW5mb1snaWQnXSAuICdbXSInIC4gKCRibG9ja0luZm9bJ3N0eWxlJ10gIT0gJyc/JyBzdHlsZT0iJyAuICRibG9ja0luZm9bJ3N0eWxlJ10gLiAnICInOicnKSAuICcgIG11bHRpcGxlPSJtdWx0aXBsZSIgc2l6ZT0iJy4kc2l6ZS4nIj4nOwoJCQlmb3JlYWNoKCRpdGVtcyBhcyAkaXRlbSkgCgkJCXsKCQkJCSRpbnB1dCAuPSAnPG9wdGlvbiB2YWx1ZT0iJyAuICRpdGVtWyd2YWx1ZSddIC4gJyInOwoJCQkJaWYoJGl0ZW1bJ3NlbGVjdGVkJ10pCgkJCQl7CgkJCQkJJGlucHV0IC49ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIic7CgkJCQl9CgkJCQkkaW5wdXQgLj0gJz4nIC4gJGl0ZW1bJ2xhYmVsJ10gLiAnPC9vcHRpb24+JzsKCQkJfQoJCQkkaW5wdXQgLj0gJzwvc2VsZWN0Pic7CgkJfQoJCWVsc2UgCgkJewoJCQkvLyBzb3J0IHRoZSBpdGVtcwoJCQkkX2l0ZW1zID0gYXJyYXkoKTsKCQkJZm9yZWFjaCgkc2VsSXRlbXMgYXMgJHNlbEtleSA9PiAkc2VsSXRlbSkgCgkJCXsKCQkJCXJlc2V0KCRpdGVtcyk7CgkJCQlmb3JlYWNoKCRpdGVtcyBhcyAkaXRlbUtleSA9PiAkaXRlbSkgCgkJCQl7CgkJCQkJaWYoJGl0ZW1bJ3ZhbHVlJ10gPT09ICRzZWxJdGVtKSAKCQkJCQl7CgkJCQkJCSRfaXRlbXNbXSA9ICRpdGVtOwoJCQkJCQl1bnNldCgkaXRlbXNbJGl0ZW1LZXldKTsKCQkJCQkJdW5zZXQoJHNlbEl0ZW1zWyRzZWxLZXldKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCQoJCQkkaXRlbXMgPSBhcnJheV9tZXJnZSgkX2l0ZW1zLCRpdGVtcyk7CgkJCSRpbnB1dCAuPSAnPGRpdiBjbGFzcz0ic29ydGFibGVfd3JhcHBlciI+JzsKCQkJZm9yZWFjaCgkaXRlbXMgYXMgJGl0ZW0pIAoJCQl7CgkJCQkkaW5wdXQgLj0gCgkJCQknPGRpdiBjbGFzcz0ic29ydGFibGUiPgoJCQkJCTxpbWcgY2xhc3M9InNvcnRhYmxlX2hhbmRsZXIiIHNyYz0iLi4vbW9kdWxlcy9BZHZhbmNlZENvbnRlbnQvaW1hZ2VzL3NvcnQucG5nIiAvPgoJCQkJCTxpbnB1dCBjbGFzcz0icGFnZWNoZWNrYm94IicgLiAoJGJsb2NrSW5mb1snc3R5bGUnXSAhPSAnJz8nIHN0eWxlPSInIC4gJGJsb2NrSW5mb1snc3R5bGUnXSAuICcgIic6JycpIC4gJyB0eXBlPSJjaGVja2JveCIgdmFsdWU9IicuJGl0ZW1bJ3ZhbHVlJ10uJyIgbmFtZT0iJyAuICRibG9ja0luZm9bJ2lkJ10gLiAnX0FkdmFuY2VkQ29udGVudFNvcnRhYmxlSXRlbV8nIC4gbXVuZ2Vfc3RyaW5nX3RvX3VybCgkaXRlbVsnbGFiZWwnXSkgLiAnIicgLiAoJGl0ZW1bJ3NlbGVjdGVkJ10/ICcgY2hlY2tlZD0iY2hlY2tlZCInOicnKSAuICcgLz4KCQkJCQknLiRpdGVtWydsYWJlbCddLicKCQkJCTwvZGl2Pic7CgkJCX0KCQkJJGlucHV0IC49ICc8L2Rpdj4nOwoJCX0KCQlyZXR1cm4gJGlucHV0OwoJfQoJCglwcml2YXRlIGZ1bmN0aW9uIGRpc3BsYXlfbXVsdGlfaW5wdXRfYmxvY2soJGJsb2NrSW5mbywgJHZhbHVlID0gJycsJGFkZGluZyA9IGZhbHNlKQoJewoJCSRBZHZhbmNlZENvbnRlbnQgPSYgY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdBZHZhbmNlZENvbnRlbnQnKTsKCQkkaW5wdXRfaWRzICAgICAgID0gJHRoaXMtPkNsZWFuQXJyYXkoZXhwbG9kZSgnLCcsJGJsb2NrSW5mb1snaW5wdXRzJ10pKTsKCQkkaW5wdXRfdmFsdWVzICAgID0gYXJyYXkoKTsKCQkkbXVsdGlfaW5wdXQgICAgID0gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIHZhbHVlPSIiIG5hbWU9IicgLiAkYmxvY2tJbmZvWydpZCddIC4gJyIgLz4nOwoJCWZvcmVhY2goZXhwbG9kZSgkYmxvY2tJbmZvWydpbnB1dF9kZWxpbWl0ZXInXSwkdmFsdWUpIGFzICRpbnB1dF9kYXRhKQoJCXsKCQkJJGlucHV0X3ZhbHVlc1tdID0gZXhwbG9kZSgkYmxvY2tJbmZvWyd2YWx1ZV9kZWxpbWl0ZXInXSwkaW5wdXRfZGF0YSk7CgkJfQoJCWZvcmVhY2goJGlucHV0X2lkcyBhcyAkazE9PiRpbnB1dF9pZCkKCQl7CgkJCWlmKCFpc3NldCgkdGhpcy0+X211bHRpSW5wdXRzWyRpbnB1dF9pZF0pKSAKCQkJewoJCQkJJHRoaXMtPl9tdWx0aUlucHV0cyA9IGFycmF5X21lcmdlKCR0aGlzLT5fbXVsdGlJbnB1dHMsICRBZHZhbmNlZENvbnRlbnQtPkdldE11bHRpSW5wdXRGdWxsKCRpbnB1dF9pZHMpKTsKCQkJCWlmKCFpc3NldCgkdGhpcy0+X211bHRpSW5wdXRzWyRpbnB1dF9pZF0pKQoJCQkJewoJCQkJCWNvbnRpbnVlOwoJCQkJfQoJCQkJJHRoaXMtPl9tdWx0aUlucHV0c1skaW5wdXRfaWRdWyd0ZW1wbGF0ZSddID0gJEFkdmFuY2VkQ29udGVudC0+R2V0VGVtcGxhdGUoJHRoaXMtPl9tdWx0aUlucHV0c1skaW5wdXRfaWRdWyd0cGxfbmFtZSddKTsKCQkJfQoJCQkKCQkJJHBhdHRlcm4gPSAnL3soKEFkdmFuY2VkQ29udGVudHxjb250ZW50KF9pbWFnZXxfbW9kdWxlKT8pKFtefV0qKSl9L2knOwoJCQkkbWF0Y2hlcyA9IGFycmF5KCk7CgkJCS8vIGdldCBhbGwgdGhlIHRhZ3MKCQkJJHJlc3VsdCA9IHByZWdfbWF0Y2hfYWxsKCRwYXR0ZXJuLCAkdGhpcy0+X211bHRpSW5wdXRzWyRpbnB1dF9pZF1bJ2lucHV0X2ZpZWxkcyddLCAkbWF0Y2hlcyk7CgkJCQoJCQlpZiAoJHJlc3VsdCAmJiBjb3VudCgkbWF0Y2hlc1sxXSkgPiAwKSAKCQkJewoJCQkJJGlucHV0cyA9IGFycmF5KCk7CgkJCQkvLyBmb3JlYWNoIHRhZwoJCQkJZm9yZWFjaCAoJG1hdGNoZXNbMV0gYXMgJGsyPT4kd2hvbGV0YWcpIAoJCQkJewoJCQkJCSRpbnB1dEluZm8gPSAkdGhpcy0+X2dldF9ibG9ja19pbmZvKCR3aG9sZXRhZyk7CgkJCQkJaWYoJGlucHV0SW5mb1snYmxvY2tfdHlwZSddID09ICdtdWx0aV9pbnB1dCcpCgkJCQkJewoJCQkJCQljb250aW51ZTsgLy8gVG9EbzogZGlzcGxheSBtZXNzYWdlPwoJCQkJCX0KCQkJCQkkdGhpcy0+X211bHRpSW5wdXRzWyRpbnB1dF9pZF1bJ2VsZW1lbnRzJ11bJGlucHV0SW5mb1snaWQnXV0gPSAkaW5wdXRJbmZvWydpZCddOwoJCQkJCSRpbnB1dEluZm9bJ2lkJ10gPSAnbXVsdGlJbnB1dC0nIC4gJGJsb2NrSW5mb1snaWQnXSAuICctJyAuICRrMSAuICctJyAuICRpbnB1dEluZm9bJ2lkJ107CgkJCQkJJGlucHV0c1skaW5wdXRJbmZvWydpZCddXSA9ICRpbnB1dEluZm87CgkJCQkJaWYobWV0aG9kX2V4aXN0cygkdGhpcywnZGlzcGxheV8nLiRpbnB1dEluZm9bJ2Jsb2NrX3R5cGUnXS4nX2Jsb2NrJykpCgkJCQkJewoJCQkJCQkkaW5wdXRzWyRpbnB1dEluZm9bJ2lkJ11dWydpbnB1dCddID0gY2FsbF91c2VyX2Z1bmMoYXJyYXkoJHRoaXMsICdkaXNwbGF5XycuJGlucHV0SW5mb1snYmxvY2tfdHlwZSddLidfYmxvY2snKSwgJGlucHV0SW5mbywgKGlzc2V0KCRpbnB1dF92YWx1ZXNbJGsxXVskazJdKSA/JGlucHV0X3ZhbHVlc1skazFdWyRrMl06JycpLCAkYWRkaW5nKTsKCQkJCQl9CgkJCQl9CgkJCQkkQWR2YW5jZWRDb250ZW50LT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ2lucHV0cycsICRpbnB1dHMpOwoJCQkJIyRtdWx0aV9pbnB1dCAuPSAkQWR2YW5jZWRDb250ZW50LT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YUJhc2UoJHRoaXMtPl9tdWx0aUlucHV0c1skaW5wdXRfaWRdWyd0cGxfbmFtZSddKTsKCQkJCSRtdWx0aV9pbnB1dCAuPSAkQWR2YW5jZWRDb250ZW50LT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YSgkdGhpcy0+X211bHRpSW5wdXRzWyRpbnB1dF9pZF1bJ3RlbXBsYXRlJ10pOwoJCQl9CgkJfQoJCXJldHVybiAkbXVsdGlfaW5wdXQ7Cgl9CgkKCXByaXZhdGUgZnVuY3Rpb24gZGlzcGxheV9tdWx0aV9jb250ZW50X2Jsb2NrKCRibG9ja0luZm8sICR2YWx1ZSA9ICcnLCRhZGRpbmcgPSBmYWxzZSkKCXsKCQkkQWR2YW5jZWRDb250ZW50ICAgICAgPSYgY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdBZHZhbmNlZENvbnRlbnQnKTsKCQkkbXVsdGlfY29udGVudF9ibG9ja3MgPSAkdGhpcy0+Q2xlYW5BcnJheShleHBsb2RlKCc8IS0tIG11bHRpX2NvbnRlbnRfZGVsaW1pdGVyIC0tPicsJHZhbHVlKSk7CgkJJGNvbnRlbnRCbG9ja3MgICAgICAgID0gYXJyYXkoKTsKCQlmb3JlYWNoKCRtdWx0aV9jb250ZW50X2Jsb2NrcyBhcyAkdGFnKQoJCXsKCQkJJF9ibG9ja0luZm8gPSAkdGhpcy0+X2dldF9ibG9ja19pbmZvKCR0YWcpOwoJCQkjIE1MRSBzdXBwb3J0CgkJCSRfdmFsdWUgPSAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgkX2Jsb2NrSW5mb1snaWQnXSAuICR0aGlzLT5ibG9ja0xhbmcpOwoJCQlpZigkdGhpcy0+bWxlICYmICRfdmFsdWUgPT0gJycgJiYgJHRoaXMtPmRlZmF1bHRCbG9ja0xhbmcgIT0gJycgJiYgJHRoaXMtPmRlZmF1bHRCbG9ja0xhbmcgIT0gJHRoaXMtPmJsb2NrTGFuZykgCgkJCXsKCQkJCSRfdmFsdWUgPSAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgkX2Jsb2NrSW5mb1snaWQnXSAuICR0aGlzLT5kZWZhdWx0QmxvY2tMYW5nKTsKCQkJfQoJCQkjLS0tCgkJCQoJCQlpZigoJGFkZGluZyAmJiAkX3ZhbHVlID09ICcnKSAKCQkJfHwgKCRfdmFsdWUgPT0gJycgJiYgISRfYmxvY2tJbmZvWydhbGxvd19ub25lJ10pKSAKCQkJewoJCQkJJF92YWx1ZSA9ICRfYmxvY2tJbmZvWydkZWZhdWx0X3ZhbHVlJ107CgkJCX0KCQkJCgkJCSRfYmxvY2tJbmZvWydjb250ZW50J10gICAgICAgICAgICA9IGNtc19odG1sZW50aXRpZXMoJF92YWx1ZSwgRU5UX05PUVVPVEVTLCBnZXRfZW5jb2RpbmcoJycpKTsKCQkJJF9ibG9ja0luZm9bJ2lucHV0J10gICAgICAgICAgICAgID0gJEFkdmFuY2VkQ29udGVudC0+bGFuZygnaW52YWxpZF9ibG9ja3R5cGUnLCRfYmxvY2tJbmZvWydibG9ja190eXBlJ10sJF9ibG9ja0luZm9bJ25hbWUnXSk7CgkJCSRjb250ZW50QmxvY2tzWyRfYmxvY2tJbmZvWydpZCddXSA9ICRfYmxvY2tJbmZvOwoJCQkKCQkJIyR0aGlzLT5BZGRFeHRyYVByb3BlcnR5KCRibG9ja0luZm9bJ2lkJ10pOyAvLyA/Pz8KCQkJIyR0aGlzLT5TZXRQcm9wZXJ0eVZhbHVlKCRibG9ja0luZm9bJ2lkJ10sICRfdmFsdWUpOyAvLyA/Pz8KCQkJCgkJCWlmKG1ldGhvZF9leGlzdHMoJHRoaXMsJ2Rpc3BsYXlfJy4kX2Jsb2NrSW5mb1snYmxvY2tfdHlwZSddLidfYmxvY2snKSkKCQkJewoJCQkJLy8gZ2V0IHByb3AgdmFsdWUKCQkJCSRjb250ZW50QmxvY2tzWyRfYmxvY2tJbmZvWydpZCddXVsnaW5wdXQnXSA9IGNhbGxfdXNlcl9mdW5jKGFycmF5KCR0aGlzLCAnZGlzcGxheV8nLiRfYmxvY2tJbmZvWydibG9ja190eXBlJ10uJ19ibG9jaycpLCAkX2Jsb2NrSW5mbywgJF92YWx1ZSwgJGFkZGluZyk7CgkJCX0KCQl9CgkJIyR0aGlzLT5tUHJvcGVydGllcy0+TG9hZCgkdGhpcy0+bUlkKTsgLy8gPz8/CgkJCgkJJEFkdmFuY2VkQ29udGVudC0+c21hcnR5LT5hc3NpZ25fYnlfcmVmKCdtdWx0aV9jb250ZW50X2Jsb2NrcycsICRjb250ZW50QmxvY2tzKTsKCQkkQWR2YW5jZWRDb250ZW50LT5zbWFydHktPmFzc2lnbignYWRkX2NvbnRlbnRfYmxvY2snLCAnPGEgaHJlZj0iIyIgb25jbGljaz0iQWR2YW5jZWRDb250ZW50LkFkZENvbnRlbnRCbG9jayhcJycuJGJsb2NrSW5mb1snaWQnXS4nXCcpOyByZXR1cm4gZmFsc2U7Ij4nLgoJCQkJY21zbXMoKS0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL25ld29iamVjdC5naWYnLCAnJywnJywnJywnc3lzdGVtaWNvbicpIC4gCgkJCQknJm5ic3A7JyAuICR0aGlzLT5sYW5nKCdhZGRfY29udGVudF9ibG9jaycpIC4gJzwvYT4nKTsKCQkKCQkkQWR2YW5jZWRDb250ZW50LT5zbWFydHktPmFzc2lnbigncmVtb3ZlX2NvbnRlbnRfYmxvY2snLCAnPGEgaHJlZj0iIyIgb25jbGljaz0iQWR2YW5jZWRDb250ZW50LlJlbW92ZUNvbnRlbnRCbG9jayhcJycuJGJsb2NrSW5mb1snaWQnXS4nXCcpOyByZXR1cm4gZmFsc2U7Ij4nLgoJCQkJY21zbXMoKS0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2RlbGV0ZS5naWYnLCAnJywnJywnJywnc3lzdGVtaWNvbicpIC4gCgkJCQknJm5ic3A7JyAuICR0aGlzLT5sYW5nKCdyZW1vdmVfY29udGVudF9ibG9jaycpIC4gJzwvYT4nKTsKCQkKCQlyZXR1cm4gJEFkdmFuY2VkQ29udGVudC0+UHJvY2Vzc1RlbXBsYXRlKCdtdWx0aUNvbnRlbnQudHBsJyk7Cgl9CgkKCQoJLyoqCgkgKiBmdW5jdGlvbiBEb1NtYXJ0eSgkdmFsdWUpCgkgKiBub3QgcGFydCBvZiB0aGUgbW9kdWxlIGFwaQoJICogdGhpcyBpcyBqdXN0IGEgd3JhcHBlciB0byBwcm9jZXNzIGEgdGVtcGxhdGUgZnJvbSBkYXRhCgkgKgoJICogQHBhcmFtIHN0cmluZyAkdmFsdWUgLSBUaGUgdGVtcGxhdGUgY29udGVudCB0byBwcm9jZXNzCgkgKgoJICogQHJldHVybiBzdHJpbmcgLSBUaGUgcHJvY2Vzc2VkIHRlbXBsYXRlIGRhdGEKCSAqLwoJZnVuY3Rpb24gRG9TbWFydHkoJHZhbHVlKSAKCXsKCQkvLyBvbmx5IHByb2Nlc3Mgc21hcnR5IGlmIHRoZXJlIGlzIGFjdHVhbGx5IHNvbWV0aGluZyB0byBwcm9jZXNzCgkJaWYoIWlzX2FycmF5KCR2YWx1ZSkgJiYgIWlzX29iamVjdCgkdmFsdWUpICYmIHByZWdfbWF0Y2hfYWxsKCcvOjo6KFteOl0rKTo6Oi8nLCAkdmFsdWUsICRtYXRjaGVzKSkgCgkJewoJCQkkQWR2YW5jZWRDb250ZW50ID0mIGNtc191dGlsczo6Z2V0X21vZHVsZSgnQWR2YW5jZWRDb250ZW50Jyk7CgkJCS8vIFRPRE86IGRvIG5vdCB1c2UgdGhlIENNU21zIGludGVybmFscyBoZXJlIQoJCQkvLyBvbmx5IGRvIHRoaXMgaWYgd2UgZGlkIG5vdCBkbyB0aGlzIGJlZm9yZQoJCQlpZih2ZXJzaW9uX2NvbXBhcmUoQ01TX1ZFUlNJT04sICcxLjktYmV0YTEnKSA8IDApCgkJCXsKCQkJCWlmKCFpc3NldChjbXNtcygpLT52YXJpYWJsZXNbJ3BhZ2VpbmZvJ10tPmNvbnRlbnRfaWQpKSAKCQkJCXsKCQkJCQkvLyBmYWtlIGZyb250ZW5kIHJlbmRlcmluZwoJCQkJCWNtc21zKCktPnZhcmlhYmxlc1sncGFnZWluZm8nXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbmV3IHN0ZENsYXNzKCk7CgkJCQkJY21zbXMoKS0+dmFyaWFibGVzWydwYWdlaW5mbyddLT5jb250ZW50X2lkICAgICAgICAgICAgICAgICAgPSAkdGhpcy0+bUlkOwoJCQkJCWNtc21zKCktPnZhcmlhYmxlc1sncGFnZWluZm8nXS0+Y29udGVudF90aXRsZSAgICAgICAgICAgICAgID0gJHRoaXMtPm1OYW1lOwoJCQkJCWNtc21zKCktPnZhcmlhYmxlc1sncGFnZWluZm8nXS0+Y29udGVudF9hbGlhcyAgICAgICAgICAgICAgID0gJHRoaXMtPm1BbGlhczsKCQkJCQljbXNtcygpLT52YXJpYWJsZXNbJ3BhZ2VpbmZvJ10tPmNvbnRlbnRfbWVudXRleHQgICAgICAgICAgICA9ICR0aGlzLT5tTWVudVRleHQ7CgkJCQkJY21zbXMoKS0+dmFyaWFibGVzWydwYWdlaW5mbyddLT5jb250ZW50X3RpdGxlYXR0cmlidXRlICAgICAgPSAkdGhpcy0+bVRpdGxlQXR0cmlidXRlOwoJCQkJCWNtc21zKCktPnZhcmlhYmxlc1sncGFnZWluZm8nXS0+Y29udGVudF9oaWVyYXJjaHkgICAgICAgICAgID0gJHRoaXMtPm1IaWVyYXJjaHk7CgkJCQkJY21zbXMoKS0+dmFyaWFibGVzWydwYWdlaW5mbyddLT5jb250ZW50X2lkX2hpZXJhcmNoeSAgICAgICAgPSAkdGhpcy0+bUlkSGllcmFyY2h5OwoJCQkJCWNtc21zKCktPnZhcmlhYmxlc1sncGFnZWluZm8nXS0+Y29udGVudF90eXBlICAgICAgICAgICAgICAgID0gJHRoaXMtPm1UeXBlOwoJCQkJCWNtc21zKCktPnZhcmlhYmxlc1sncGFnZWluZm8nXS0+Y29udGVudF9wcm9wcyAgICAgICAgICAgICAgID0gJHRoaXMtPm1Qcm9wZXJ0aWVzLT5tUHJvcGVydHlOYW1lczsKCQkJCQljbXNtcygpLT52YXJpYWJsZXNbJ3BhZ2VpbmZvJ10tPmNvbnRlbnRfbWV0YWRhdGEgICAgICAgICAgICA9ICR0aGlzLT5tTWV0YWRhdGE7CgkJCQkJY21zbXMoKS0+dmFyaWFibGVzWydwYWdlaW5mbyddLT5jb250ZW50X21vZGlmaWVkX2RhdGUgICAgICAgPSAkdGhpcy0+bU1vZGlmaWVkRGF0ZTsKCQkJCQljbXNtcygpLT52YXJpYWJsZXNbJ3BhZ2VpbmZvJ10tPmNvbnRlbnRfY3JlYXRlZF9kYXRlICAgICAgICA9ICR0aGlzLT5tQ3JlYXRpb25EYXRlOwoJCQkJCWNtc21zKCktPnZhcmlhYmxlc1sncGFnZWluZm8nXS0+Y29udGVudF9sYXN0X21vZGlmaWVkX2RhdGUgID0gJHRoaXMtPm1Nb2RpZmllZERhdGU7CgkJCQkJY21zbXMoKS0+dmFyaWFibGVzWydwYWdlaW5mbyddLT5jb250ZW50X2xhc3RfbW9kaWZpZWRfYnlfaWQgPSAkdGhpcy0+bU93bmVyOwoJCQkJCWNtc21zKCktPnZhcmlhYmxlc1sncGFnZWluZm8nXS0+dGVtcGxhdGVfaWQgICAgICAgICAgICAgICAgID0gJHRoaXMtPm1UZW1wbGF0ZUlkOwoJCQkJCWNtc21zKCktPnZhcmlhYmxlc1sncGFnZWluZm8nXS0+dGVtcGxhdGVfZW5jb2RpbmcgICAgICAgICAgID0gZ2V0X2VuY29kaW5nKCcnKTsKCQkJCQljbXNtcygpLT52YXJpYWJsZXNbJ3BhZ2VpbmZvJ10tPnRlbXBsYXRlX21vZGlmaWVkX2RhdGUgICAgICA9IHRpbWUoKTsgLy8gPz8/CgkJCQkJY21zbXMoKS0+dmFyaWFibGVzWydwYWdlaW5mbyddLT5jYWNoYWJsZSAgICAgICAgICAgICAgICAgICAgPSAkdGhpcy0+bUNhY2hhYmxlOwoJCQkJCWNtc21zKCktPnZhcmlhYmxlc1sncGFnZWluZm8nXS0+Y29udGVudF9oaWVyYXJjaHlfcGF0aCAgICAgID0gJHRoaXMtPm1IaWVyYXJjaHlQYXRoOwoJCQkJCQoJCQkJCWNtc21zKCktPnZhcmlhYmxlc1snY29udGVudF9pZCddICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJHRoaXMtPm1JZDsKCQkJCQljbXNtcygpLT52YXJpYWJsZXNbJ3BhZ2UnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICR0aGlzLT5tQWxpYXM7CgkJCQkJY21zbXMoKS0+dmFyaWFibGVzWydwYWdlX2lkJ10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAkdGhpcy0+bUFsaWFzOwoJCQkJCWNtc21zKCktPnZhcmlhYmxlc1sncGFnZV9hbGlhcyddICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJHRoaXMtPm1BbGlhczsKCQkJCQljbXNtcygpLT52YXJpYWJsZXNbJ2NvbnRlbnRfYWxpYXMnXSAgICAgICAgICAgICAgICAgICAgICAgICA9ICR0aGlzLT5tQWxpYXM7CgkJCQkJY21zbXMoKS0+dmFyaWFibGVzWydwYWdlX25hbWUnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAkdGhpcy0+bUFsaWFzOwoJCQkJCWNtc21zKCktPnZhcmlhYmxlc1sncG9zaXRpb24nXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJHRoaXMtPm1IaWVyYXJjaHk7CgkJCQkJY21zbXMoKS0+dmFyaWFibGVzWydmcmllbmRseV9wb3NpdGlvbiddICAgICAgICAgICAgICAgICAgICAgPSBjbXNtcygpLT5HZXRDb250ZW50T3BlcmF0aW9ucygpLT5DcmVhdGVGcmllbmRseUhpZXJhcmNoeVBvc2l0aW9uKCR0aGlzLT5tSGllcmFyY2h5KTsKCQkJCX0KCQkJfQoJCQkKCQkJJEFkdmFuY2VkQ29udGVudC0+c21hcnR5LT5hc3NpZ25fYnlfcmVmKCdjb250ZW50X29iaicsICR0aGlzKTsKCQkJJEFkdmFuY2VkQ29udGVudC0+c21hcnR5LT5hc3NpZ25fYnlfcmVmKCdjb250ZW50X2lkJywgJHRoaXMtPm1JZCk7CgkJCSRBZHZhbmNlZENvbnRlbnQtPnNtYXJ0eS0+YXNzaWduX2J5X3JlZignY29udGVudF9hbGlhcycsICR0aGlzLT5tQWxpYXMpOwoJCQkkQWR2YW5jZWRDb250ZW50LT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ3BhZ2UnLCAkdGhpcy0+bUFsaWFzKTsKCQkJJEFkdmFuY2VkQ29udGVudC0+c21hcnR5LT5hc3NpZ25fYnlfcmVmKCdwYWdlX2lkJywgJHRoaXMtPm1BbGlhcyk7CgkJCSRBZHZhbmNlZENvbnRlbnQtPnNtYXJ0eS0+YXNzaWduX2J5X3JlZigncGFnZV9hbGlhcycsICR0aGlzLT5tQWxpYXMpOwoJCQkkQWR2YW5jZWRDb250ZW50LT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ3BhZ2VfbmFtZScsICR0aGlzLT5tQWxpYXMpOwoJCQkkQWR2YW5jZWRDb250ZW50LT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ3Bvc2l0aW9uJywgJHRoaXMtPm1IaWVyYXJjaHkpOwoJCQkkQWR2YW5jZWRDb250ZW50LT5zbWFydHktPmFzc2lnbignZnJpZW5kbHlfcG9zaXRpb24nLCBjbXNtcygpLT5HZXRDb250ZW50T3BlcmF0aW9ucygpLT5DcmVhdGVGcmllbmRseUhpZXJhcmNoeVBvc2l0aW9uKCR0aGlzLT5tSGllcmFyY2h5KSk7CgkJCQoJCQkkdmFsdWUgPSAkQWR2YW5jZWRDb250ZW50LT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YShwcmVnX3JlcGxhY2UoJy86OjooW146XSspOjo6LycsICd7JDF9JywgJHZhbHVlKSk7CgkJfQoJCXJldHVybiAkdmFsdWU7Cgl9CgkKCQoJLyoqCgkgKiBmdW5jdGlvbiBJbmhlcml0UGFyZW50UHJvcCgkcGFyZW50SWQsICRwcm9wTmFtZSwgJGN1cnJlbnRQcm9wKQoJICogbm90IHBhcnQgb2YgdGhlIG1vZHVsZSBhcGkKCSAqIGluaGVyaXRzIGEgcHJvcGVydHkgb2YgYSBwYXJlbnQgcGFnZTsKCSAqIGlmIHBhcmVudCBwYWdlIGhhcyBhbHNvIHNlbGVjdGVkIGluaGVyaXRhbmNlIGZvciB0aGF0IHByb3BlcnR5IC0+IGRvIHJlY3Vyc2lvbgoJICoKCSAqIEBwYXJhbSBpbnQgJHBhcmVudElkIC0gVGhlIGlkIG9mIHRoZSBwYXJlbnQgcGFnZQoJICogQHBhcmFtIHN0cmluZyAkcHJvcE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gaW5oZXJpdAoJICogQHBhcmFtIGFycmF5ICRjdXJyZW50UHJvcCAob3B0aW9uYWwpIC0gSWYgcHJvcCBpcyBhbiBhcnJheSB0aGlzIHdpbGwgYmUgdGhlIGl0ZW1zIG9mIHRoZSBjdXJyZW50IHBhZ2U7IFNvIHJldHVybiBhcnJheSB3aWxsIGNvbnRhaW4gYWxsIGl0ZW1zIG9mIHRoZSBjdXJyZW50IHBhZ2UgYW5kIHBhcmVudCBwYWdlczsgb3RoZXJ3aXNlIG9ubHkgdGhlIHBhcmVudHMgaXRlbXMgd2lsbCBiZSByZXR1cm5lZAoJICoKCSAqIEByZXR1cm4gYXJyYXl8c3RyaW5nIC0gVGhlIHByb3Agb2YgdGhlIGxhc3QgZm91bmQgcGFyZW50IHRoYXQgaGFzIG5vIGluaGVyaXRhbmNlIG9yIGFuIGFycmF5IG9mIGl0ZW1zIG9mIGFsbCBwYXJlbnRzIHRoYXQgaGF2ZSBpbmhlcml0YW5jZQoJICovCglmdW5jdGlvbiBJbmhlcml0UGFyZW50UHJvcCgkcGFyZW50SWQsICRwcm9wTmFtZSwgJGN1cnJlbnRQcm9wID0gYXJyYXkoKSkgCgl7CgkJLy8gZGVmYXVsdCByZXR1cm4gdmFsdWUKCQkvLyBmZXVfYWNjZXNzIGlzIGEgc3BlY2lhbCBjYXNlIChiZWNhdXNlIG9mIG11bHRpcGxlIHNlbGVjdGlvbnMgYXJlIHBvc3NpYmxlKQoJCWlmKCRwcm9wTmFtZSA9PSAnZmV1X2FjY2VzcycpIAoJCXsKCQkJJHByb3AgPSBhcnJheSgpOwoJCQkKCQkJLy8gdGhpcyB3aWxsICJtZXJnZSIgdGhlIHBhcmVudHMgcHJvcCB3aXRoIHRoZSBjdXJyZW50IG9uZQoJCQkvLyBidXQgcmVtb3ZpbmcgdGhlIGluaGVyaXQgc3R1ZmY7IAoJCQkvLyBzbyBpZiBjdXJyZW50UHJvcCBpcyBzZXQgdGhpcyB3aWxsIHJldHVybiBhbiBhcnJheSB3aXRoIGFsbCBwcm9wcyAKCQkJLy8gKHJlYWwgdmFsdWVzIG9ubHk7IG5vIGluaGVyaXQgZmxhZykKCQkJLy8gaW5jbHVkaW5nIHRoZSBwYXJlbnRzIG9uZXMgYW5kIHRoZSBjdXJyZW50IG9uZSBidXQgd2l0aG91dCBkdXBsaWNhdGUgdmFsdWVzCgkJCWZvcmVhY2goJGN1cnJlbnRQcm9wIGFzICRrPT4kdikgCgkJCXsKCQkJCWlmKCR2ICE9ICctMScpIAoJCQkJewoJCQkJCSRwcm9wW10gPSAkdjsKCQkJCX0KCQkJfQoJCX0KCQllbHNlCgkJewoJCQkkcHJvcCA9ICcnOwoJCX0KCQkKCQkvLyBhcyBsb25nIGFzIHBhZ2UgaGFzIHBhcmVudHMuLi4KCQl3aGlsZSggJHBhcmVudElkID4gMCApIAoJCXsKCQkJJGNvbnRlbnQgPSAkdGhpcy0+R2V0Q29udGVudFByb3AoJHBhcmVudElkLCAkcHJvcE5hbWUsICdjb250ZW50MicpOwoJCQkKCQkJaWYoISRjb250ZW50KSAKCQkJewoJCQkJcmV0dXJuICRwcm9wOwoJCQl9CgkJCQoJCQkkcGFyZW50SWQgID0gJGNvbnRlbnRbJ3BhcmVudF9pZCddOwoJCQkkcHJvcFZhbHVlID0gJGNvbnRlbnRbJ3Byb3BfdmFsdWUnXTsKCQkJCgkJCS8vIGZldV9hY2Nlc3MgaXMgYSBzcGVjaWFsIGNhc2UgKGJlY2F1c2Ugb2YgbXVsdGlwbGUgc2VsZWN0aW9ucyBhcmUgcG9zc2libGUpCgkJCWlmKCRwcm9wTmFtZSA9PSAnZmV1X2FjY2VzcycpIAoJCQl7CgkJCQkkX3Byb3AgPSAkdGhpcy0+Q2xlYW5BcnJheShleHBsb2RlKCI7IiwgJHByb3BWYWx1ZSkpOwoJCQkJCgkJCQlmb3JlYWNoKCRfcHJvcCBhcyAkX3ApIAoJCQkJewoJCQkJCWlmKCFpbl9hcnJheSgkX3AsICRwcm9wKSAmJiAkX3AgIT0gJy0xJyAmJiAkX3AgIT0gJycpCgkJCQkJewoJCQkJCQkkcHJvcFtdID0gJF9wOwoJCQkJCX0KCQkJCX0KCQkJCQoJCQkJLy8gaWYgdGhlIGN1cnJlbnQgb2JqIGRvZXMgbm90IGluaGVyaXQgaXRzIHByb3AgYW55bW9yZSBPUiBoYXMgbm8gcGFyZW50cyAKCQkJCS8vIGJ1dCB3YW50cyB0byBpbmhlcml0IC0+IHJldHVybiB0aGUgcHJvcCBhcnJheQoJCQkJaWYoIWluX2FycmF5KCctMScsICRfcHJvcCkgfHwgKCRwYXJlbnRJZCA8PSAwICYmIGluX2FycmF5KCctMScsICRfcHJvcCkpKQoJCQkJewoJCQkJCXJldHVybiAkcHJvcDsKCQkJCX0KCQkJCQoJCQl9CgkJCWVsc2UgCgkJCXsKCQkJCS8vIGlmIGNvbnRlbnQgaGFzIG5vIHBhcmVudHMgYnV0IHdhbnRzIHRvIGluaGVyaXQgLT4gcmV0dXJuCgkJCQlpZigkcGFyZW50SWQgPD0gMCAmJiAkcHJvcFZhbHVlID09ICctMScpIAoJCQkJewoJCQkJCXJldHVybjsKCQkJCX0KCQkJCS8vIGlmIG5vIGluaGVyaXRhbmNlIGFueW1vcmUgLT4gcmV0dXJuIHRoZSBwcm9wCgkJCQllbHNlIGlmKCRwcm9wZXJ0eVZhbHVlICE9ICctMScpIAoJCQkJewoJCQkJCXJldHVybiAkcHJvcFZhbHVlOwoJCQkJfQoJCQl9CgkJfQoJfQoJCgkKCS8qKgoJICogZnVuY3Rpb24gR2V0Q29udGVudFByb3AoJGNvbnRlbnRJZCwgJHByb3BOYW1lLCAkY29udGVudFR5cGUpCgkgKiBub3QgcGFydCBvZiB0aGUgbW9kdWxlIGFwaQoJICogZ2V0cyBhIHByb3BlcnR5IG9mIGEgY29udGVudCBwYWdlCgkgKgoJICogQHBhcmFtIGludCAkY29udGVudElkIC0gVGhlIGlkIG9mIHRoZSBjb250ZW50IHRvIGdldCB0aGUgcHJvcGVydHkgZnJvbQoJICogQHBhcmFtIHN0cmluZyAkcHJvcE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0IHRoZSB2YWx1ZSBmcm9tCgkgKiBAcGFyYW0gc3RyaW5nICRjb250ZW50VHlwZSAob3B0aW9uYWwpIC0gVGhlIHR5cGUgb2YgdGhlIGNvbnRlbnQKCSAqCgkgKiBAcmV0dXJuIG1peGVkIC0gRmFsc2UgaWYgbm90IGV4aXN0cyBvciBhcnJheSgncGFyZW50X2lkJywncHJvcF92YWx1ZScpCgkgKgoJICovCglmdW5jdGlvbiBHZXRDb250ZW50UHJvcCgkY29udGVudElkLCAkcHJvcE5hbWUsICRjb250ZW50VHlwZSA9ICcnKSAKCXsKCQkkZGIgPSYgY21zbXMoKS0+R2V0RGIoKTsKCQkkcXVlcnkgPSAiU0VMRUNUIENQLmNvbnRlbnQsIEMucGFyZW50X2lkLCBDLmNvbnRlbnRfYWxpYXMgRlJPTSAiIC4gY21zX2RiX3ByZWZpeCgpIC4gImNvbnRlbnRfcHJvcHMgQ1AgCgkJCUxFRlQgSk9JTiAiIC4gY21zX2RiX3ByZWZpeCgpIC4gImNvbnRlbnQgQyBPTiBDLmNvbnRlbnRfaWQgPSBDUC5jb250ZW50X2lkIAoJCQlXSEVSRSBDUC5jb250ZW50X2lkID0gPyBBTkQgQ1AucHJvcF9uYW1lID0gPyI7CgkJJHAgPSBhcnJheSgkY29udGVudElkLCAkcHJvcE5hbWUpOwoJCWlmKCRjb250ZW50VHlwZSAhPSAnJykgCgkJewoJCQkkcXVlcnkgLj0gIiBBTkQgQy50eXBlID0gPyI7CgkJCSRwW10gICAgPSAkY29udGVudFR5cGU7CgkJfQoJCSRxdWVyeSAuPSAiIExJTUlUIDEiOwoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksICRwKTsKCQlpZigkZGJyZXN1bHQgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKCQl7CgkJCXJldHVybiBhcnJheSgncGFyZW50X2lkJz0+JHJvd1sncGFyZW50X2lkJ10sICdwcm9wX3ZhbHVlJz0+JHJvd1snY29udGVudCddLCAnYWxpYXMnPT4kcm93WydhbGlhcyddKTsKCQl9CgkJCgkJcmV0dXJuIGZhbHNlOwoJfQoJCglmdW5jdGlvbiBHZXRHcm91cHMoKSAKCXsKCQkkZGIgPSYgY21zbXMoKS0+R2V0RGIoKTsKCQkkZ3JvdXBzID0gYXJyYXkoKTsKCQkkcXVlcnkgPSAiU0VMRUNUIGdyb3VwX2lkIEZST00gIi5jbXNfZGJfcHJlZml4KCkuInVzZXJfZ3JvdXBzIFdIRVJFIHVzZXJfaWQgPSA/IjsKCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheShnZXRfdXNlcmlkKCkpKTsKCQl3aGlsZSggJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkgKSAKCQl7CgkJCSRncm91cHNbXSA9ICRyb3dbJ2dyb3VwX2lkJ10gKiAtMTsKCQl9CgkJcmV0dXJuICRncm91cHM7Cgl9CgkKCWZ1bmN0aW9uIENoZWNrQmxvY2tQZXJtaXNzaW9uKCRibG9ja0lkKSAKCXsKCQkkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydhZGR0X2VkaXRvcnMnXSA9IGFycmF5KCk7CgkJLy8gY2hlY2sgaWYgdXNlciBoYXMgcGVybWlzc2lvbiB0byBlZGl0IHRoaXMgYmxvY2sKCQlpZigoJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnZWRpdG9yX3VzZXJzJ10gIT0gJycgfHwgJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnZWRpdG9yX2dyb3VwcyddICE9ICcnKSAKCQkmJiAhY2hlY2tfcGVybWlzc2lvbihnZXRfdXNlcmlkKCksICdNYW5hZ2UgQWxsIEFkdmFuY2VkQ29udGVudCBCbG9ja3MnKSkgCgkJewoJCQkkdXNlcm9wcyAgICAgID0mIGNtc21zKCktPkdldFVzZXJPcGVyYXRpb25zKCk7CgkJCSRncm91cG9wcyAgICAgPSYgY21zbXMoKS0+R2V0R3JvdXBPcGVyYXRpb25zKCk7CgkJCSRhbGx1c2VycyAgICAgPSYgJHVzZXJvcHMtPkxvYWRVc2VycygpOwoJCQkkYWxsZ3JvdXBzICAgID0mICRncm91cG9wcy0+TG9hZEdyb3VwcygpOwoJCQkkZWRpdG9yR3JvdXBzID0gICR0aGlzLT5DbGVhbkFycmF5KGV4cGxvZGUoJywnLCR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2VkaXRvcl9ncm91cHMnXSkpOwoJCQkkZWRpdG9yVXNlcnMgID0gICR0aGlzLT5DbGVhbkFycmF5KGV4cGxvZGUoJywnLCR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2VkaXRvcl91c2VycyddKSk7CgkJCQoJCQlmb3JlYWNoICgkYWxsZ3JvdXBzIGFzICRvbmVHcm91cCkgCgkJCXsKCQkJCWlmKGluX2FycmF5KCRvbmVHcm91cC0+bmFtZSwkZWRpdG9yR3JvdXBzKSkKCQkJCXsKCQkJCQkkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydhZGR0X2VkaXRvcnMnXVtdID0gJG9uZUdyb3VwLT5pZCotMTsKCQkJCX0KCQkJfQoJCQkKCQkJZm9yZWFjaCAoJGFsbHVzZXJzIGFzICRvbmVVc2VyKSAKCQkJewoJCQkJaWYoaW5fYXJyYXkoJG9uZVVzZXItPnVzZXJuYW1lLCRlZGl0b3JVc2VycykpCgkJCQl7CgkJCQkJJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnYWRkdF9lZGl0b3JzJ11bXSA9ICRvbmVVc2VyLT5pZDsKCQkJCX0KCQkJfQoJCQkKCQkJaWYoIWluX2FycmF5KGdldF91c2VyaWQoKSwkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydhZGR0X2VkaXRvcnMnXSkgCgkJCSYmICFjb3VudChhcnJheV9pbnRlcnNlY3QoJHRoaXMtPl91c2VyR3JvdXBzLCR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2FkZHRfZWRpdG9ycyddKSkpIAoJCQl7CgkJCQl1bnNldCgkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdKTsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCQoJCgkvKioKCSAqIGZ1bmN0aW9uIElzVmFyRW1wdHkoJHZhciwgJHRyaW0sICR1bnNldEVtcHR5SW5kZXhlcykKCSAqIG5vdCBwYXJ0IG9mIHRoZSBtb2R1bGUgYXBpCgkgKiBjaGVja3MgaWYgYSB2YXIgaXMgZW1wdHkuIGlmIHZhciBpcyBhbiBhcnJheSBpdCByZWN1cnNpdmxleSBjaGVja3MgYWxsIGVsZW1lbnRzCgkgKgoJICogQHBhcmFtIG1peGVkICR2YXIgLSB0aGUgdmFyIHRvIGNoZWNrIGZvciBlbXB0eSB2YWx1ZShzKQoJICogQHBhcmFtIGJvb2xlYW4gJHRyaW0gLSB0cnVlIHRvIHRyaW0gb2ZmIHNwYWNlcwoJICogQHBhcmFtIGJvb2xlYW4gJHVuc2V0RW1wdHlJbmRleGVzIC0gdHJ1ZSB0byBkZWxldGUgZW1wdHkgZWxlbWVudHMgZnJvbSBhcnJheQoJICogQHJldHVybiBib29sZWFuIC0gdHJ1ZSBpZiBlbXB0eSwgZmFsc2UgaWYgbm90CgkgKi8KCWZ1bmN0aW9uIElzVmFyRW1wdHkoJiR2YXIsICR0cmltID0gdHJ1ZSwgJHVuc2V0RW1wdHlJbmRleGVzID0gZmFsc2UpIAoJewoJCWlmIChpc19hcnJheSgkdmFyKSkgCgkJewoJCQlmb3JlYWNoICgkdmFyIGFzICRrPT4kdikgCgkJCXsKCQkJCWlmICghJHRoaXMtPklzVmFyRW1wdHkoJHYpKSAKCQkJCXsKCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQl9CgkJCQllbHNlIAoJCQkJewoJCQkJCWlmKCR1bnNldEVtcHR5SW5kZXhlcykKCQkJCQl7CgkJCQkJCXVuc2V0KCR2YXJbJGtdKTsKCQkJCQl9CgkJCQkJcmV0dXJuIHRydWU7CgkJCQl9CgkJCX0KCQl9CgkJZWxzZSBpZigkdHJpbSAmJiB0cmltKCR2YXIpID09ICcnKSAKCQl7CgkJCXJldHVybiB0cnVlOwoJCX0KCQllbHNlIGlmKCR2YXIgPT0gJycpIAoJCXsKCQkJcmV0dXJuIHRydWU7CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KCQoJCgkvKioKCSAqIGZ1bmN0aW9uIENsZWFuQXJyYXkoJGFycmF5KQoJICogbm90IHBhcnQgb2YgdGhlIG1vZHVsZSBhcGkKCSAqIHJlbW92ZXMgZW1wdHkgZWxlbWVudHMgZnJvbSBhbiBhcnJheSAKCSAqIChjYW4gYmUgdXNlZnVsIHdoZW4gdXNpbmcgZnVuY3Rpb24gZXhwbG9kZSB0byBjcmVhdGUgdGhlIGFycmF5IG9mIGEgY3N2KQoJICoKCSAqIEBwYXJhbSBhcnJheSAkYXJyYXkgLSB0aGUgYXJyYXkgdG8gY2xlYW4gdXAKCSAqIEByZXR1cm4gYXJyYXkgLSBhbiBhcnJheSB3aXRob3V0IGVtcHR5IGVsZW1lbnRzIG9yIGFuIGVtcHR5IGFycmF5CgkgKi8KCWZ1bmN0aW9uIENsZWFuQXJyYXkoJGFycmF5KSAKCXsKCQlpZiAoaXNfYXJyYXkoJGFycmF5KSkgCgkJewoJCQlmb3JlYWNoICgkYXJyYXkgYXMgJGs9PiR2KSAKCQkJewoJCQkJaWYgKCR0aGlzLT5Jc1ZhckVtcHR5KCR2LHRydWUsdHJ1ZSkpIAoJCQkJewoJCQkJCXVuc2V0KCRhcnJheVska10pOwoJCQkJfQoJCQkJZWxzZSAKCQkJCXsKCQkJCQlpZihpc19hcnJheSgkdikpIAoJCQkJCXsKCQkJCQkJJHYgPSAkdGhpcy0+Q2xlYW5BcnJheSgkdik7CgkJCQkJCWlmKCR0aGlzLT5Jc1ZhckVtcHR5KCR2LHRydWUsdHJ1ZSkpCgkJCQkJCXsKCQkJCQkJCXVuc2V0KCRhcnJheVska10pOwoJCQkJCQl9CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJJGFycmF5WyRrXSA9ICR2OwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9CgkJCXJldHVybiAkYXJyYXk7CgkJfQoJCXJldHVybiBhcnJheSgpOwoJfQoJCgkKCS8qKgoJICogZnVuY3Rpb24gSXNUcnVlKCR2YWx1ZSkKCSAqIG5vdCBwYXJ0IG9mIHRoZSBtb2R1bGUgYXBpCgkgKiBjaGVja3MgaWYgYSB2YWx1ZSBpcyBsaXRlcmFsbHkgInRydWUiCgkgKgoJICogQHBhcmFtIG1peGVkICR2YWx1ZSAtIHRoZSB2YWx1ZSB0byBjaGVjawoJICogQHJldHVybiBib29sCgkgKi8KCWZ1bmN0aW9uIElzVHJ1ZSgkdmFsdWUpIAoJewoJCXJldHVybiAoc3RydG9sb3dlcigkdmFsdWUpID09PSAndHJ1ZScgfHwgJHZhbHVlID09PSAxIHx8ICR2YWx1ZSA9PT0gJzEnIHx8ICR2YWx1ZSA9PT0gdHJ1ZSk7Cgl9CgkKCQoJLyoqCgkgKiBmdW5jdGlvbiBJc0ZhbHNlKCR2YWx1ZSkKCSAqIG5vdCBwYXJ0IG9mIHRoZSBtb2R1bGUgYXBpCgkgKiBjaGVja3MgaWYgYSB2YWx1ZSBpcyBsaXRlcmFsbHkgImZhbHNlIgoJICoKCSAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgLSB0aGUgdmFsdWUgdG8gY2hlY2sKCSAqIEByZXR1cm4gYm9vbAoJICovCglmdW5jdGlvbiBJc0ZhbHNlKCR2YWx1ZSkgCgl7CgkJcmV0dXJuIChzdHJ0b2xvd2VyKCR2YWx1ZSkgPT09ICdmYWxzZScgfHwgJHZhbHVlID09PSAnMCcgfHwgJHZhbHVlID09PSAwIHx8ICR2YWx1ZSA9PT0gZmFsc2UgfHwgJHZhbHVlID09PSAnJyk7Cgl9Cn0KPz4K]]></data>
	</file>
	<file>
	  <filename>/contenttype.Content2.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIE1vZHVsZSA6IEFkdmFuY2VkQ29udGVudCAoYykgMjAxMCBieSBHZW9yZyBCdXNjaCAoZ2VvcmcuYnVzY2hAZ214Lm5ldCkKIyAgICAgICAgICBhIGNvbnRlbnQgbWFuYWdlbWVudCB0b29sIGZvciBDTVMgTWFkZSBTaW1wbGUKIyAgICAgICAgICBUaGUgcHJvamVjdHMgaG9tZXBhZ2UgaXMgZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2NvbnRlbnQyLwojICAgICAgICAgIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNC0yMDEwIGJ5IFRlZCBLdWxwCiMgICAgICAgICAgVGhlIHByb2plY3RzIGhvbWVwYWdlIGlzOiBjbXNtYWRlc2ltcGxlLm9yZwojIFZlcnNpb246IDAuNy4xCiMgRmlsZSAgIDogY29udGVudHR5cGUuQ29udGVudDIucGhwCiMgICAgICAgICAgVGhpcyBmaWxlIGlzIGEgbW9kaWZpY2F0aW9uIG9mIHRoZSBkZWZhdWx0IGNvbnRlbnQgdHlwZSAiQ29udGVudCIKIyBQdXJwb3NlOiB0aGUgY29udGVudCBvYmplY3QKIyBMaWNlbnNlOiBHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKY2xhc3MgQ29udGVudDIgZXh0ZW5kcyBDTVNNb2R1bGVDb250ZW50VHlwZSAKewoJLyoqCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqIEB2YXIgc3RyaW5nCgkgKi8KCXZhciAkX3N0eWxlc2hlZXQ7CgkKCS8qKgoJICogQGFjY2VzcyBwcml2YXRlCgkgKiBAdmFyIGFycmF5CgkgKi8KCXZhciAkX2NvbnRlbnRCbG9ja3M7CgkKCS8qKgoJICogQGFjY2VzcyBwcml2YXRlCgkgKiBAdmFyIGJvb2xlYW4KCSAqLwoJdmFyICRfY29udGVudEJsb2Nrc0xvYWRlZDsKCQoJLyoqCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqIEB2YXIgYXJyYXkKCSAqLwoJdmFyICRfdGFiSWRzOwoJCgkvKioKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICogQHZhciBhcnJheQoJICovCgl2YXIgJF9wYWdlVGFiczsKCQoJLyoqCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqIEB2YXIgYXJyYXkKCSAqLwoJdmFyICRfYmxvY2tUYWJzOwoJCgkvKioKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICogQHZhciBhcnJheQoJICovCgl2YXIgJF9ibG9ja0dyb3VwczsKCQoJLyoqCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqIEB2YXIgYXJyYXkKCSAqLwoJdmFyICRfdXNlckdyb3VwczsKCQoJLyoqCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqIEB2YXIgYXJyYXkKCSAqLwoJdmFyICRfZGF0ZUJsb2NrczsKCQoJLyoqCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqIEB2YXIgYXJyYXkKCSAqLwoJdmFyICRfbXVsdGlJbnB1dHM7CgkKCS8qKgoJICogQGFjY2VzcyBwcml2YXRlCgkgKiBAdmFyIGJvb2xlYW4KCSAqLwoJdmFyICRfaXNBZG1pbjsKCQoJLyoqCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqIEB2YXIgYm9vbGVhbgoJICovCgl2YXIgJF9mZXVBY3Rpb247CgkKCS8qKgoJICogQGFjY2VzcyBwcml2YXRlCgkgKiBAdmFyIGFycmF5CgkgKi8KCXZhciAkX2ZldUdyb3VwczsKCQoJLyoqCgkgKiBNTEUgc3VwcG9ydAoJICogQGFjY2VzcyBwdWJsaWMKCSAqIEB2YXIgYm9vbGVhbgoJICovCgl2YXIgJG1sZSA9IGZhbHNlOwoJCgkvKioKCSAqIE1MRSBzdXBwb3J0CgkgKiBAYWNjZXNzIHB1YmxpYwoJICogQHZhciBzdHJpbmcKCSAqLwoJdmFyICRsYW5nOwoJCgkvKioKCSAqIE1MRSBzdXBwb3J0CgkgKiBAYWNjZXNzIHB1YmxpYwoJICogQHZhciBzdHJpbmcKCSAqLwoJdmFyICRibG9ja0xhbmc7CgkKCS8qKgoJICogTUxFIHN1cHBvcnQKCSAqIEBhY2Nlc3MgcHVibGljCgkgKiBAdmFyIHN0cmluZwoJICovCgl2YXIgJGRlZmF1bHRCbG9ja0xhbmc7CgkKCQoJLyoqCgkgKiBDb25zdHJ1Y3RvcgoJICovCglmdW5jdGlvbiBDb250ZW50MigpIAoJewoJCXBhcmVudDo6Q29udGVudEJhc2UoKTsKCQkkdGhpcy0+X2NvbnRlbnRCbG9ja3MgICAgICAgPSBhcnJheSgpOwoJCSR0aGlzLT5fY29udGVudEJsb2Nrc0xvYWRlZCA9IGZhbHNlOwoJCSR0aGlzLT5fZmV1QWN0aW9uICAgICAgICAgICA9IGZhbHNlOwoJCSR0aGlzLT5fZmV1R3JvdXBzICAgICAgICAgICA9IGZhbHNlOwoJCWdsb2JhbCAkQ01TX0FETUlOX1BBR0U7CgkJaWYoaXNzZXQoJENNU19BRE1JTl9QQUdFKSAmJiAkQ01TX0FETUlOX1BBR0UgPT0gMSkgCgkJewoJCQkkQWR2YW5jZWRDb250ZW50ICAgID0mIGNtc191dGlsczo6Z2V0X21vZHVsZSgnQWR2YW5jZWRDb250ZW50Jyk7CgkJCSR0aGlzLT5fdGFiSWRzICAgICAgPSBhcnJheSgpOwoJCQkkdGhpcy0+X2RhdGVCbG9ja3MgID0gYXJyYXkoKTsKCQkJJHRoaXMtPl9ibG9ja1RhYnMgICA9IGFycmF5KCk7CgkJCSR0aGlzLT5fYmxvY2tHcm91cHMgPSBhcnJheSgpOwoJCQkkdGhpcy0+X211bHRpSW5wdXRzID0gYXJyYXkoKTsKCQkJCgkJCSR0aGlzLT5fcGFnZVRhYnMgPSBhcnJheSgKCQkJCSdtYWluJyA9PiBhcnJheSgKCQkJCQkndGFiX2lkJyAgICAgICAgID0+ICdtYWluJywgCgkJCQkJJ3RhYl9uYW1lJyAgICAgICA9PiBsYW5nKCdtYWluJyksIAoJCQkJCSdibG9ja190YWJzJyAgICAgPT4gYXJyYXkoKSwKCQkJCQknYmxvY2tfZ3JvdXBzJyAgID0+IGFycmF5KCksCgkJCQkJJ2NvbnRlbnRfYmxvY2tzJyA9PiBhcnJheSgpKSk7CgkJCSR0aGlzLT5fdGFiSWRzW10gPSAnbWFpbic7CgkJCQoJCQlpZiggY2hlY2tfcGVybWlzc2lvbihnZXRfdXNlcmlkKCksICdNYW5hZ2UgQWxsIENvbnRlbnQnKSApIAoJCQl7CgkJCQkkdGhpcy0+X3BhZ2VUYWJzWydvcHRpb25zJ10gPSBhcnJheSgKCQkJCQkndGFiX2lkJyAgICAgICAgID0+ICdvcHRpb25zJywgCgkJCQkJJ3RhYl9uYW1lJyAgICAgICA9PiBsYW5nKCdvcHRpb25zJyksIAoJCQkJCSdibG9ja190YWJzJyAgICAgPT4gYXJyYXkoKSwKCQkJCQknYmxvY2tfZ3JvdXBzJyAgID0+IGFycmF5KCksCgkJCQkJJ2NvbnRlbnRfYmxvY2tzJyA9PiBhcnJheSgpKTsKCQkJCSR0aGlzLT5fdGFiSWRzW10gPSAnb3B0aW9ucyc7CgkJCX0KCQkJCgkJCWlmKCBjaGVja19wZXJtaXNzaW9uKGdldF91c2VyaWQoKSwgJ01hbmFnZSBBZHZhbmNlZENvbnRlbnQgT3B0aW9ucycpICYmICRBZHZhbmNlZENvbnRlbnQtPkdldFByZWZlcmVuY2UoJ3Nob3dfYWR2YW5jZWRjb250ZW50X29wdGlvbnMnLDEpICkgCgkJCXsKCQkJCSR0aGlzLT5fcGFnZVRhYnNbJ0FkdmFuY2VkQ29udGVudCddID0gYXJyYXkoCgkJCQkJJ3RhYl9pZCcgICAgICAgICA9PiAnQWR2YW5jZWRDb250ZW50JywgCgkJCQkJJ3RhYl9uYW1lJyAgICAgICA9PiAnQWR2YW5jZWRDb250ZW50JywgCgkJCQkJJ2Jsb2NrX3RhYnMnICAgICA9PiBhcnJheSgpLAoJCQkJCSdibG9ja19ncm91cHMnICAgPT4gYXJyYXkoKSwKCQkJCQknY29udGVudF9ibG9ja3MnID0+IGFycmF5KCkpOwoJCQkJJHRoaXMtPl90YWJJZHNbXSA9ICdBZHZhbmNlZENvbnRlbnQnOwoJCQl9CgkJCQoJCQkkdGhpcy0+X3VzZXJHcm91cHMgPSAkdGhpcy0+R2V0R3JvdXBzKCk7CgkJCSR0aGlzLT5faXNBZG1pbiAgICA9IGNtc21zKCktPkdldFVzZXJPcGVyYXRpb25zKCktPlVzZXJJbkdyb3VwKGdldF91c2VyaWQoKSwxKTsKCQl9CgkJCgkJIyBNTEUgc3VwcG9ydAoJCWdsb2JhbCAkaGxzLCAkbWxlYmxvY2ssICRtbGVibG9ja2ZhbGxiYWNrOwoJCWlmKGlzc2V0KCRobHMpKSAKCQl7CgkJCSR0aGlzLT5tbGUgICAgICAgICAgICAgID0gdHJ1ZTsKCQkJJHRoaXMtPmxhbmcgICAgICAgICAgICAgPSAkaGxzOwoJCQkkdGhpcy0+YmxvY2tMYW5nICAgICAgICA9ICRtbGVibG9jazsKCQkJJHRoaXMtPmRlZmF1bHRCbG9ja0xhbmcgPSAkbWxlYmxvY2tmYWxsYmFjazsKCQl9CgkJIy0tLQoJfQoJCglmdW5jdGlvbiBNb2R1bGVOYW1lKCkgCgl7CgkJcmV0dXJuICdBZHZhbmNlZENvbnRlbnQnOwoJfQoJCglmdW5jdGlvbiBJc0RlZmF1bHRQb3NzaWJsZSgpIAoJewoJCXJldHVybiBUUlVFOwoJfQoJCglmdW5jdGlvbiBJc0NvcHlhYmxlKCkgCgl7CgkJcmV0dXJuIFRSVUU7Cgl9CgkKCWZ1bmN0aW9uIEZyaWVuZGx5TmFtZSgpIAoJewoJCSRhZGRUeHQgPSBhcnJheSgpOwoJCWlmKCR0aGlzLT5tQ2FjaGFibGUpCgkJewoJCQkkYWRkVHh0W10gPSAnLSZuYnNwOycubGFuZygnY2FjaGFibGUnKTsKCQl9CgkJZWxzZQoJCXsKCQkJJGFkZFR4dFtdID0gJy0mbmJzcDsnLmxhbmcoJ25vbmNhY2hhYmxlJyk7CgkJfQoJCWlmKCR0aGlzLT5tU2VjdXJlKQoJCXsKCQkJJGFkZFR4dFtdID0gJy0mbmJzcDtTU0wnOwoJCX0KCQlpZighJHRoaXMtPm1TaG93SW5NZW51KQoJCXsKCQkJJGFkZFR4dFtdID0gJy0mbmJzcDsnLmxhbmcoJ2hpZGVmcm9tbWVudScpOwoJCX0KCQllbHNlCgkJewoJCQkkYWRkVHh0W10gPSAnLSZuYnNwOycubGFuZygnc2hvd2lubWVudScpOwoJCX0KCQlpZigkZmV1c2VycyA9JiBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0Zyb250RW5kVXNlcnMnKSkgCgkJewoJCQlpZihzdHJwb3MoJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJ2ZldV9hY2Nlc3MnKSwnLCcpID09PSBGQUxTRSkKCQkJewoJCQkJJHNlbGVjdGVkR3JvdXBzID0gJHRoaXMtPkNsZWFuQXJyYXkoZXhwbG9kZSgnOycsICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCdmZXVfYWNjZXNzJykpKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRzZWxlY3RlZEdyb3VwcyA9ICR0aGlzLT5DbGVhbkFycmF5KGV4cGxvZGUoJywnLCAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgnZmV1X2FjY2VzcycpKSk7CgkJCX0KCQkJaWYoY291bnQoJHNlbGVjdGVkR3JvdXBzKSkKCQkJewoJCQkJJGFkZFR4dFtdID0gJy0mbmJzcDsnLiR0aGlzLT5sYW5nKCdmcm9udGVuZGFjY2VzcycpLic6IDx1bD48bGk+JyAuIGltcGxvZGUoJzwvbGk+PGxpPicsYXJyYXlfa2V5cyhhcnJheV9pbnRlcnNlY3QoJGZldXNlcnMtPkdldEdyb3VwTGlzdCgpLCAkc2VsZWN0ZWRHcm91cHMpKSkuJzwvbGk+PC91bD4nOwoJCQl9CgkJfQoJCWlmKGNvdW50KCRhZGRUeHQpKQoJCXsKCQkJcmV0dXJuICc8c3BhbiBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjdXJzb3I6cG9pbnRlciIgb25tb3VzZW92ZXI9ImpRdWVyeShcJyMnLiR0aGlzLT5tSWQuJ19pbmZvXCcpLmNzcyhcJ2Rpc3BsYXlcJyxcJ2Jsb2NrXCcpLmNzcyhcJ3otaW5kZXhcJyxcJzk5OTlcJykiIG9ubW91c2VvdXQ9ImpRdWVyeShcJyMnLiR0aGlzLT5tSWQuJ19pbmZvXCcpLmNzcyhcJ2Rpc3BsYXlcJyxcJ25vbmVcJykiPicgLiAkdGhpcy0+bGFuZygnQWR2YW5jZWRDb250ZW50JykgLiAnPHNwYW4gaWQ9IicuJHRoaXMtPm1JZC4nX2luZm8iIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7Ym9yZGVyOjFweCBzb2xpZCAjMDAwO3Bvc2l0aW9uOmFic29sdXRlO3BhZGRpbmc6NXB4O2Rpc3BsYXk6bm9uZSI+JyAuIGltcGxvZGUoJzxiciAvPicsJGFkZFR4dCkgLiAnPC9zcGFuPjwvc3Bhbj4nOwoJCX0KCQlyZXR1cm4gJHRoaXMtPmxhbmcoJ0FkdmFuY2VkQ29udGVudCcpOwoJfQoJCglmdW5jdGlvbiBnZXRfY29udGVudF9ibG9ja3MoKSAKCXsKCQkkdGhpcy0+cGFyc2VfY29udGVudF9ibG9ja3MoJ2dldF9jb250ZW50X2Jsb2NrcycpOwoJCXJldHVybiAkdGhpcy0+X2NvbnRlbnRCbG9ja3M7Cgl9CgkKCXByaXZhdGUgZnVuY3Rpb24gX2dldF9ibG9ja19pbmZvKCR3aG9sZXRhZykKCXsKCQkkcGF0dGVybiAgID0gJy8oW1x3XSspPShbIl1bXiJdKlsiXXxbXCddW15cJ10qW1wnXXxbXlwnIlxzXSopLyc7CgkJJGJsb2NrSW5mbyA9IGFycmF5KCk7CgkJJEFkdmFuY2VkQ29udGVudCA9JiBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0FkdmFuY2VkQ29udGVudCcpOwoJCQoJCS8vIGdldCB0aGUgYXJndW1lbnRzLgoJCSRtYXRjaGVzID0gYXJyYXkoKTsKCQkkcmVzdWx0ICA9IHByZWdfbWF0Y2hfYWxsKCRwYXR0ZXJuLCAkd2hvbGV0YWcsICRtYXRjaGVzKTsKCQkKCQkka2V5dmFsID0gYXJyYXkoKTsKCQlmb3IgKCRpID0gMDsgJGkgPCBjb3VudCgkbWF0Y2hlc1sxXSk7ICRpKyspIAoJCXsKCQkJaWYoc3RhcnRzd2l0aCgkbWF0Y2hlc1syXVskaV0sJ1wnJykpCgkJCXsKCQkJCSRtYXRjaGVzWzJdWyRpXSA9IHRyaW0oJG1hdGNoZXNbMl1bJGldLCdcJycpOwoJCQl9CgkJCWVsc2UgaWYoc3RhcnRzd2l0aCgkbWF0Y2hlc1syXVskaV0sJyInKSkKCQkJewoJCQkJJG1hdGNoZXNbMl1bJGldID0gdHJpbSgkbWF0Y2hlc1syXVskaV0sJyInKTsKCQkJfQoJCQkKCQkJJGtleXZhbFtzdHJ0b2xvd2VyKCRtYXRjaGVzWzFdWyRpXSldID0gJG1hdGNoZXNbMl1bJGldOwoJCX0KCQkKCQkvLyBibG9jayA9IGFjdGl2ZT8KCQlpZihpc3NldCgka2V5dmFsWydhY3RpdmUnXSkgJiYgJHRoaXMtPklzRmFsc2UoJGtleXZhbFsnYWN0aXZlJ10pKSAKCQl7CgkJCWNvbnRpbnVlOyAvLyBkb24ndCBwcm9jZXNzIGluYWN0aXZlIGJsb2NrcwoJCX0KCQkKCQkvLyBhZGRpdGlvbmFsIGVkaXRvcnMKCQkkZWRpdG9yR3JvdXBzID0gJyc7CgkJaWYoaXNzZXQoJGtleXZhbFsnZWRpdG9yX2dyb3VwcyddKSAmJiAka2V5dmFsWydlZGl0b3JfZ3JvdXBzJ10gIT0gJycpIAoJCXsKCQkJJGVkaXRvckdyb3VwcyA9IHRyaW0oJGtleXZhbFsnZWRpdG9yX2dyb3VwcyddKTsKCQl9CgkJJGVkaXRvclVzZXJzID0gJyc7CgkJaWYoaXNzZXQoJGtleXZhbFsnZWRpdG9yX3VzZXJzJ10pICYmICRrZXl2YWxbJ2VkaXRvcl91c2VycyddICE9ICcnKSAKCQl7CgkJCSRlZGl0b3JVc2VycyA9IHRyaW0oJGtleXZhbFsnZWRpdG9yX3VzZXJzJ10pOwoJCX0KCQkKCQkvLyBibG9ja3R5cGUKCQkkYmxvY2tUeXBlID0gJ3RleHQnOwoJCWlmKHN0YXJ0c3dpdGgoJHdob2xldGFnLCAnY29udGVudF9pbWFnZScpKSAKCQl7CgkJCSRibG9ja1R5cGUgPSAnaW1hZ2UnOwoJCQkkZGVmYXVsdE1vZGUgPSB0cnVlOwoJCX0KCQllbHNlaWYoc3RhcnRzd2l0aCgkd2hvbGV0YWcsICdjb250ZW50X21vZHVsZScpKSAKCQl7CgkJCSRibG9ja1R5cGUgPSAnbW9kdWxlJzsKCQkJJGRlZmF1bHRNb2RlID0gdHJ1ZTsKCQl9CgkJZWxzZWlmKGlzc2V0KCRrZXl2YWxbJ2Jsb2NrX3R5cGUnXSkgJiYgJGtleXZhbFsnYmxvY2tfdHlwZSddICE9ICcnKQoJCQkkYmxvY2tUeXBlID0gc3RydG9sb3dlcigka2V5dmFsWydibG9ja190eXBlJ10pOwoJCQoJCS8vIGJsb2NrbmFtZQoJCSRuYW1lID0gJ2NvbnRlbnRfZW4nOwoJCSMgTUxFIHN1cHBvcnQKCQlpZigkdGhpcy0+bWxlICYmICR0aGlzLT5ibG9ja0xhbmcgIT0gJycpIAoJCXsKCQkJJG5hbWUgPSAnY29udGVudCcuJHRoaXMtPmJsb2NrTGFuZzsKCQl9CgkJIy0tLQoJCQoJCWlmKGlzc2V0KCRrZXl2YWxbJ2Jsb2NrJ10pICYmICRrZXl2YWxbJ2Jsb2NrJ10gIT0gJycpCgkJewoJCQkkbmFtZSA9IHRyaW0oJGtleXZhbFsnYmxvY2snXSk7CgkJfQoJCQoJCS8vIGJsb2NrIGlkCgkJJGJsb2NrSWQgPSBwcmVnX3JlcGxhY2UoJy8tKy8nLCdfJyxtdW5nZV9zdHJpbmdfdG9fdXJsKCRuYW1lKSk7CgkJCgkJJHNtYXJ0eSA9IGZhbHNlOwoJCWlmKGlzc2V0KCRrZXl2YWxbJ3NtYXJ0eSddKSAmJiAkdGhpcy0+SXNUcnVlKCRrZXl2YWxbJ3NtYXJ0eSddKSkgCgkJewoJCQkkc21hcnR5ID0gdHJ1ZTsKCQl9CgkJCgkJJHRyYW5zbGF0ZUxhYmVscyA9IGZhbHNlOwoJCWlmKGlzc2V0KCRrZXl2YWxbJ3RyYW5zbGF0ZV9sYWJlbHMnXSkgJiYgJHRoaXMtPklzVHJ1ZSgka2V5dmFsWyd0cmFuc2xhdGVfbGFiZWxzJ10pKSAKCQl7CgkJCSR0cmFuc2xhdGVMYWJlbHMgPSB0cnVlOwoJCX0KCQkKCQkkdHJhbnNsYXRlVmFsdWVzID0gZmFsc2U7CgkJaWYoaXNzZXQoJGtleXZhbFsndHJhbnNsYXRlX3ZhbHVlcyddKSAmJiAkdGhpcy0+SXNUcnVlKCRrZXl2YWxbJ3RyYW5zbGF0ZV92YWx1ZXMnXSkpIAoJCXsKCQkJJHRyYW5zbGF0ZVZhbHVlcyA9IHRydWU7CgkJfQoJCQoJCSRsYWJlbCA9IHVjd29yZHMoJG5hbWUpOwoJCWlmKGlzc2V0KCRrZXl2YWxbJ2xhYmVsJ10pICYmICRrZXl2YWxbJ2xhYmVsJ10gIT0gJycpCgkJewoJCQkkbGFiZWwgPSB0cmltKCRrZXl2YWxbJ2xhYmVsJ10pOwoJCX0KCQkKCQkkcmVxdWlyZWQgPSBmYWxzZTsKCQlpZihpc3NldCgka2V5dmFsWydyZXF1aXJlZCddKSAmJiAkdGhpcy0+SXNUcnVlKCRrZXl2YWxbJ3JlcXVpcmVkJ10pKQoJCXsKCQkJJHJlcXVpcmVkID0gdHJ1ZTsKCQl9CgkJCgkJLy8gZGVmYXVsdCBjb250ZW50L3ZhbHVlCgkJJGRlZmF1bHRWYWx1ZSAJPSAnJzsKCQlpZihpc3NldCgka2V5dmFsWydkZWZhdWx0J10pICYmICRrZXl2YWxbJ2RlZmF1bHQnXSAhPSAnJykKCQl7CgkJCSRkZWZhdWx0VmFsdWUgPSAka2V5dmFsWydkZWZhdWx0J107CgkJfQoJCQoJCS8vIGJhY2tlbmQgc3R5bGUgKGUuZy4gdG8gbWFyayByZXF1aXJlZCBmaWVsZHMuLi4pCgkJJHN0eWxlID0gJyc7CgkJaWYoaXNzZXQoJGtleXZhbFsnc3R5bGUnXSkpIAoJCXsKCQkJJHN0eWxlID0gJGtleXZhbFsnc3R5bGUnXTsKCQl9CgkJCgkJLy8gc2l6ZSBvZiB0aGUgaW5wdXQgZmllbGQKCQkkc2l6ZSA9ICcnOwoJCWlmKGlzc2V0KCRrZXl2YWxbJ3NpemUnXSkpIAoJCXsKCQkJJHNpemUgPSBpbnR2YWwoJGtleXZhbFsnc2l6ZSddKTsKCQl9CgkJCgkJJHBhZ2VUYWIgPSAnbWFpbic7CgkJaWYoaXNzZXQoJGtleXZhbFsncGFnZV90YWInXSkgJiYgdHJpbSgka2V5dmFsWydwYWdlX3RhYiddICE9ICcnKSkgCgkJewoJCQkkcGFnZVRhYiA9IHRyaW0oJGtleXZhbFsncGFnZV90YWInXSk7CgkJfQoJCQoJCSRibG9ja1RhYiA9ICcnOwoJCWlmKGlzc2V0KCRrZXl2YWxbJ2Jsb2NrX3RhYiddKSAmJiB0cmltKCRrZXl2YWxbJ2Jsb2NrX3RhYiddICE9ICcnKSkgCgkJewoJCQkkYmxvY2tUYWIgPSB0cmltKCRrZXl2YWxbJ2Jsb2NrX3RhYiddKTsKCQl9CgkJCgkJJGJsb2NrR3JvdXAgPSAnJzsKCQlpZihpc3NldCgka2V5dmFsWydibG9ja19ncm91cCddKSAmJiB0cmltKCRrZXl2YWxbJ2Jsb2NrX2dyb3VwJ10gIT0gJycpKSAKCQl7CgkJCSRibG9ja0dyb3VwID0gdHJpbSgka2V5dmFsWydibG9ja19ncm91cCddKTsKCQl9CgkJCgkJJGFsbG93Tm9uZSA9IHRydWU7CgkJaWYoaXNzZXQoJGtleXZhbFsnYWxsb3dfbm9uZSddKSAmJiAkdGhpcy0+SXNGYWxzZSgka2V5dmFsWydhbGxvd19ub25lJ10pKQoJCXsKCQkJJGFsbG93Tm9uZSA9IGZhbHNlOwoJCX0KCQkKCQkkZGVzY3JpcHRpb24gPSAnJzsKCQlpZihpc3NldCgka2V5dmFsWydkZXNjcmlwdGlvbiddKSkKCQl7CgkJCSRkZXNjcmlwdGlvbiA9IHRyaW0oJGtleXZhbFsnZGVzY3JpcHRpb24nXSk7CgkJfQoJCQoJCSRjb2xsYXBzZSA9ICEkQWR2YW5jZWRDb250ZW50LT5HZXRQcmVmZXJlbmNlKCdjb2xsYXBzZV9ibG9ja19kZWZhdWx0JywxKTsKCQlpZihpc3NldCgka2V5dmFsWydjb2xsYXBzZSddKSAmJiAoJHRoaXMtPklzVHJ1ZSgka2V5dmFsWydjb2xsYXBzZSddKSB8fCAkdGhpcy0+SXNGYWxzZSgka2V5dmFsWydjb2xsYXBzZSddKSkpCgkJewoJCQkkY29sbGFwc2UgPSAkdGhpcy0+SXNUcnVlKCRrZXl2YWxbJ2NvbGxhcHNlJ10pOwoJCX0KCQkKCQkkbm9fY29sbGFwc2UgPSBmYWxzZTsKCQlpZihpc3NldCgka2V5dmFsWydub19jb2xsYXBzZSddKSAmJiAkdGhpcy0+SXNUcnVlKCRrZXl2YWxbJ25vX2NvbGxhcHNlJ10pKQoJCXsKCQkJJG5vX2NvbGxhcHNlID0gdHJ1ZTsKCQl9CgkJCgkJJGZldV9hY2Nlc3MgPSAnJzsKCQlpZihpc3NldCgka2V5dmFsWydmZXVfYWNjZXNzJ10pKQoJCXsKCQkJJGZldV9hY2Nlc3MgPSB0cmltKCRrZXl2YWxbJ2ZldV9hY2Nlc3MnXSk7CgkJfQoJCQoJCSRmZXVfYWN0aW9uID0gZmFsc2U7CgkJaWYoaXNzZXQoJGtleXZhbFsnZmV1X2FjdGlvbiddKSAmJiAkdGhpcy0+SXNUcnVlKCRrZXl2YWxbJ2ZldV9hY3Rpb24nXSkpCgkJewoJCQkkZmV1X2FjdGlvbiA9IHRydWU7CgkJfQoJCQoJCWlmKCRibG9ja1R5cGUgPT0gJ3RleHQnKSAKCQl7CgkJCSRtYXhsZW5ndGggPSAnJzsKCQkJaWYoaXNzZXQoJGtleXZhbFsnbWF4bGVuZ3RoJ10pKSAKCQkJewoJCQkJJG1heGxlbmd0aCA9ICRrZXl2YWxbJ21heGxlbmd0aCddOwoJCQl9CgkJCQoJCQkkdXNld3lzaXd5ZyA9IHRydWU7CgkJCWlmKGlzc2V0KCRrZXl2YWxbJ3d5c2l3eWcnXSkgJiYgJHRoaXMtPklzRmFsc2UoJGtleXZhbFsnd3lzaXd5ZyddKSkgCgkJCXsKCQkJCSR1c2V3eXNpd3lnID0gZmFsc2U7CgkJCX0KCQkJCgkJCSRvbmVsaW5lID0gZmFsc2U7CgkJCWlmKGlzc2V0KCRrZXl2YWxbJ29uZWxpbmUnXSkgJiYgJHRoaXMtPklzVHJ1ZSgka2V5dmFsWydvbmVsaW5lJ10pKSAKCQkJewoJCQkJJG9uZWxpbmUgPSB0cnVlOwoJCQl9CgkJCQoJCQkkYmxvY2tJbmZvWydtYXhsZW5ndGgnXSAgPSAkbWF4bGVuZ3RoOwoJCQkkYmxvY2tJbmZvWyd1c2V3eXNpd3lnJ10gPSAkdXNld3lzaXd5ZzsKCQkJJGJsb2NrSW5mb1snb25lbGluZSddICAgID0gJG9uZWxpbmU7CgkJCSRibG9ja0luZm9bJ3NpemUnXSAgICAgICA9ICRzaXplOwoJCX0KCQllbHNlIGlmICgkYmxvY2tUeXBlID09ICdkYXRlJykgCgkJewoJCQkkdGhpcy0+X2RhdGVCbG9ja3NbXSA9ICRibG9ja0lkOwoJCQkKCQkJJHNob3dDbG9jayA9IHRydWU7CgkJCWlmKGlzc2V0KCRrZXl2YWxbJ3Nob3dfY2xvY2snXSkgJiYgJHRoaXMtPklzVEZhbHNlKCRrZXl2YWxbJ3Nob3dfY2xvY2snXSkpCgkJCXsKCQkJCSRzaG93Q2xvY2sgPSBmYWxzZTsKCQkJfQoJCQkKCQkJJG1vZGUgPSAnY2FsZW5kYXInOwoJCQlpZihpc3NldCgka2V5dmFsWydtb2RlJ10pICYmIHN0cnRvbG93ZXIoJGtleXZhbFsnbW9kZSddKSA9PSAnZHJvcGRvd24nKQoJCQl7CgkJCQkkbW9kZSA9ICdkcm9wZG93bic7CgkJCX0KCQkJCgkJCSRzaG93MjRoID0gdHJ1ZTsKCQkJaWYoaXNzZXQoJGtleXZhbFsnc2hvdzI0aCddKSAmJiAkdGhpcy0+SXNGYWxzZSgka2V5dmFsWydzaG93MjRoJ10pKQoJCQl7CgkJCQkkc2hvdzI0aCA9IGZhbHNlOwoJCQl9CgkJCQoJCQkkc3RhcnRIb3VyID0gMDsKCQkJJGVuZEhvdXIgICA9IDIzOwoJCQlpZihpc3NldCgka2V5dmFsWydzdGFydF9ob3VyJ10pKSAKCQkJewoJCQkJaWYoZW5kc3dpdGgoJGtleXZhbFsnc3RhcnRfaG91ciddLCdwbScpKSAKCQkJCXsKCQkJCQkka2V5dmFsWydzdGFydF9ob3VyJ10gPSB0cmltKHN0cl9pcmVwbGFjZSgncG0nLCcnLCRrZXl2YWxbJ3N0YXJ0X2hvdXInXSkpICsgMTI7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJGtleXZhbFsnc3RhcnRfaG91ciddID0gdHJpbShzdHJfaXJlcGxhY2UoYXJyYXkoJ2FtJywncG0nKSwnJywka2V5dmFsWydzdGFydF9ob3VyJ10pKTsKCQkJCX0KCQkJCWlmKCRrZXl2YWxbJ3N0YXJ0X2hvdXInXSA+IDAgJiYgJGtleXZhbFsnc3RhcnRfaG91ciddIDw9ICRlbmRIb3VyKQoJCQkJewoJCQkJCSRzdGFydEhvdXIgPSB0cmltKCRrZXl2YWxbJ3N0YXJ0X2hvdXInXSk7CgkJCQl9CgkJCX0KCQkJaWYoaXNzZXQoJGtleXZhbFsnZW5kX2hvdXInXSkpIAoJCQl7CgkJCQlpZihlbmRzd2l0aCgka2V5dmFsWydlbmRfaG91ciddLCdwbScpKSAKCQkJCXsKCQkJCQkka2V5dmFsWydlbmRfaG91ciddID0gdHJpbShzdHJfaXJlcGxhY2UoJ3BtJywnJywka2V5dmFsWydlbmRfaG91ciddKSkgKyAxMjsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkka2V5dmFsWydlbmRfaG91ciddID0gdHJpbShzdHJfaXJlcGxhY2UoYXJyYXkoJ2FtJywncG0nKSwnJywka2V5dmFsWydlbmRfaG91ciddKSk7CgkJCQl9CgkJCQlpZigka2V5dmFsWydlbmRfaG91ciddID49IDAgJiYgJGtleXZhbFsnZW5kX2hvdXInXSA8ICRlbmRIb3VyKQoJCQkJewoJCQkJCSRlbmRIb3VyID0gdHJpbSgka2V5dmFsWydlbmRfaG91ciddKTsKCQkJCX0KCQkJfQoJCQlpZigkZW5kSG91ciA8ICRzdGFydEhvdXIpCgkJCXsKCQkJCSRlbmRIb3VyID0gJHN0YXJ0SG91cjsKCQkJfQoJCQkkc3RhcnRNaW51dGUgPSAwOwoJCQlpZihpc3NldCgka2V5dmFsWydzdGFydF9taW51dGUnXSkgJiYgJGtleXZhbFsnc3RhcnRfbWludXRlJ10gPiAwICYmICRrZXl2YWxbJ3N0YXJ0X21pbnV0ZSddIDw9IDU5KQoJCQl7CgkJCQkkc3RhcnRNaW51dGUgPSB0cmltKCRrZXl2YWxbJ3N0YXJ0X21pbnV0ZSddKTsKCQkJfQoJCQkkZW5kTWludXRlID0gNTk7CgkJCWlmKGlzc2V0KCRrZXl2YWxbJ2VuZF9taW51dGUnXSkgJiYgJGtleXZhbFsnZW5kX21pbnV0ZSddID49IDAgJiYgJGtleXZhbFsnZW5kX21pbnV0ZSddIDwgNTkpCgkJCXsKCQkJCSRlbmRNaW51dGUgPSB0cmltKCRrZXl2YWxbJ2VuZF9taW51dGUnXSk7CgkJCX0KCQkJaWYoJGVuZE1pbnV0ZSA8ICRzdGFydE1pbnV0ZSkKCQkJewoJCQkJJGVuZE1pbnV0ZSA9ICRzdGFydE1pbnV0ZTsKCQkJfQoJCQkkc3RhcnRTZWNvbmQgPSAwOwoJCQlpZihpc3NldCgka2V5dmFsWydzdGFydF9zZWNvbmQnXSkgJiYgJGtleXZhbFsnc3RhcnRfc2Vjb25kJ10gPiAwICYmICRrZXl2YWxbJ3N0YXJ0X3NlY29uZCddIDw9IDU5KQoJCQl7CgkJCQkkc3RhcnRTZWNvbmQgPSB0cmltKCRrZXl2YWxbJ3N0YXJ0X3NlY29uZCddKTsKCQkJfQoJCQkkZW5kU2Vjb25kID0gNTk7CgkJCWlmKGlzc2V0KCRrZXl2YWxbJ2VuZF9zZWNvbmQnXSkgJiYgJGtleXZhbFsnZW5kX3NlY29uZCddID49IDAgJiYgJGtleXZhbFsnZW5kX3NlY29uZCddIDwgNTkpCgkJCXsKCQkJCSRlbmRTZWNvbmQgPSB0cmltKCRrZXl2YWxbJ2VuZF9zZWNvbmQnXSk7CgkJCX0KCQkJaWYoJGVuZFNlY29uZCA8ICRzdGFydFNlY29uZCkKCQkJewoJCQkJJGVuZFNlY29uZCA9ICRzdGFydFNlY29uZDsKCQkJfQoJCQkkc3RlcEhvdXJzID0gMTsKCQkJaWYoaXNzZXQoJGtleXZhbFsnc3RlcF9ob3VycyddKSAmJiAka2V5dmFsWydzdGVwX2hvdXJzJ10gPiAwICYmICRrZXl2YWxbJ3N0ZXBfaG91cnMnXSA8PSAoJGVuZEhvdXItJHN0YXJ0SG91cikpCgkJCXsKCQkJCSRzdGVwSG91cnMgPSB0cmltKCRrZXl2YWxbJ3N0ZXBfaG91cnMnXSk7CgkJCX0KCQkJZWxzZSBpZihpc3NldCgka2V5dmFsWydzdGVwX2hvdXJzJ10pICYmICRrZXl2YWxbJ3N0ZXBfaG91cnMnXSA+IDAgJiYgJGtleXZhbFsnc3RlcF9ob3VycyddID49ICgkZW5kSG91ci0kc3RhcnRIb3VyKSkKCQkJewoJCQkJJHN0ZXBIb3VycyA9ICRlbmRIb3VyLSRzdGFydEhvdXI7CgkJCX0KCQkJJHN0ZXBNaW51dGVzID0gMTA7CgkJCWlmKGlzc2V0KCRrZXl2YWxbJ3N0ZXBfbWludXRlcyddKSAmJiAka2V5dmFsWydzdGVwX21pbnV0ZXMnXSA+IDAgJiYgJGtleXZhbFsnc3RlcF9taW51dGVzJ10gPD0gKCRlbmRNaW51dGUtJHN0YXJ0TWludXRlKSkKCQkJewoJCQkJJHN0ZXBNaW51dGVzID0gdHJpbSgka2V5dmFsWydzdGVwX21pbnV0ZXMnXSk7CgkJCX0KCQkJZWxzZSBpZihpc3NldCgka2V5dmFsWydzdGVwX21pbnV0ZXMnXSkgJiYgJGtleXZhbFsnc3RlcF9taW51dGVzJ10gPiAwICYmICRrZXl2YWxbJ3N0ZXBfbWludXRlcyddID49ICgkZW5kTWludXRlLSRzdGFydE1pbnV0ZSkpCgkJCXsKCQkJCSRzdGVwTWludXRlcyA9ICRlbmRNaW51dGUtJHN0YXJ0TWludXRlOwoJCQl9CgkJCSRzdGVwU2Vjb25kcyA9IDE7CgkJCWlmKGlzc2V0KCRrZXl2YWxbJ3N0ZXBfc2Vjb25kcyddKSAmJiAka2V5dmFsWydzdGVwX3NlY29uZHMnXSA+IDAgJiYgJGtleXZhbFsnc3RlcF9zZWNvbmRzJ10gPD0gKCRlbmRTZWNvbmQtJHN0YXJ0U2Vjb25kcykpCgkJCXsKCQkJCSRzdGVwU2Vjb25kcyA9IHRyaW0oJGtleXZhbFsnc3RlcF9zZWNvbmRzJ10pOwoJCQl9CgkJCWVsc2UgaWYoaXNzZXQoJGtleXZhbFsnc3RlcF9zZWNvbmRzJ10pICYmICRrZXl2YWxbJ3N0ZXBfc2Vjb25kcyddID4gMCAmJiAka2V5dmFsWydzdGVwX3NlY29uZHMnXSA+PSAoJGVuZFNlY29uZC0kc3RhcnRTZWNvbmRzKSkKCQkJewoJCQkJJHN0ZXBTZWNvbmRzID0gJGVuZFNlY29uZC0kc3RhcnRTZWNvbmRzOwoJCQl9CgkJCSRibG9ja0luZm9bJ3Nob3cyNGgnXSAgICAgID0gJHNob3cyNGg7CgkJCSRibG9ja0luZm9bJ21vZGUnXSAgICAgICAgID0gJG1vZGU7CgkJCSRibG9ja0luZm9bJ3N0YXJ0X2hvdXInXSAgID0gJHN0YXJ0SG91cjsKCQkJJGJsb2NrSW5mb1snZW5kX2hvdXInXSAgICAgPSAkZW5kSG91cjsKCQkJJGJsb2NrSW5mb1snc3RhcnRfbWludXRlJ10gPSAkc3RhcnRNaW51dGU7CgkJCSRibG9ja0luZm9bJ2VuZF9taW51dGUnXSAgID0gJGVuZE1pbnV0ZTsKCQkJJGJsb2NrSW5mb1snc3RhcnRfc2Vjb25kJ10gPSAkc3RhcnRTZWNvbmQ7CgkJCSRibG9ja0luZm9bJ2VuZF9zZWNvbmQnXSAgID0gJGVuZFNlY29uZDsKCQkJJGJsb2NrSW5mb1snc3RlcF9ob3VycyddICAgPSAkc3RlcEhvdXJzOwoJCQkkYmxvY2tJbmZvWydzdGVwX21pbnV0ZXMnXSA9ICRzdGVwTWludXRlczsKCQkJJGJsb2NrSW5mb1snc3RlcF9zZWNvbmRzJ10gPSAkc3RlcFNlY29uZHM7CgkJCSRibG9ja0luZm9bJ3Nob3dfY2xvY2snXSAgID0gJHNob3dDbG9jazsKCQl9CgkJZWxzZSBpZigkYmxvY2tUeXBlID09ICdkcm9wZG93bicgfHwgJGJsb2NrVHlwZSA9PSAnc2VsZWN0X211bHRpcGxlJykgCgkJewoJCQlpZigkYmxvY2tUeXBlID09ICdzZWxlY3RfbXVsdGlwbGUnKSAKCQkJewoJCQkJJHNvcnRhYmxlID0gZmFsc2U7CgkJCQkvLyBkZXByZWNhdGVkCgkJCQlpZihpc3NldCgka2V5dmFsWydzb3J0YWJsZV9pdGVtcyddKSAmJiAkdGhpcy0+SXNUcnVlKCRrZXl2YWxbJ3NvcnRhYmxlX2l0ZW1zJ10pKSAKCQkJCXsKCQkJCQkkc29ydGFibGUgPSB0cnVlOwoJCQkJfQoJCQkJaWYoaXNzZXQoJGtleXZhbFsnc29ydGFibGUnXSkgJiYgJHRoaXMtPklzVHJ1ZSgka2V5dmFsWydzb3J0YWJsZSddKSkgCgkJCQl7CgkJCQkJJHNvcnRhYmxlID0gdHJ1ZTsKCQkJCX0KCQkJCSRibG9ja0luZm9bJ3NvcnRhYmxlJ10gPSAkc29ydGFibGU7CgkJCX0KCQkJCgkJCSRkZWxpbWl0ZXIgPSAnfCc7CgkJCWlmKGlzc2V0KCRrZXl2YWxbJ2RlbGltaXRlciddKSAmJiAka2V5dmFsWydkZWxpbWl0ZXInXSAhPSAnJykgCgkJCXsKCQkJCSRkZWxpbWl0ZXIgPSAka2V5dmFsWydkZWxpbWl0ZXInXTsKCQkJfQoJCQkkaXRlbXMgPSAnJzsKCQkJaWYoaXNzZXQoJGtleXZhbFsnaXRlbXMnXSkgJiYgJGtleXZhbFsnaXRlbXMnXSAhPSAnJykgCgkJCXsKCQkJCSRpdGVtcyA9IHRyaW0oJGtleXZhbFsnaXRlbXMnXSk7CgkJCX0KCQkJJHZhbHVlcyA9ICcnOwoJCQlpZihpc3NldCgka2V5dmFsWyd2YWx1ZXMnXSkgJiYgJGtleXZhbFsndmFsdWVzJ10gIT0gJycpIAoJCQl7CgkJCQkkdmFsdWVzID0gdHJpbSgka2V5dmFsWyd2YWx1ZXMnXSk7CgkJCX0KCQkJCgkJCSRibG9ja0luZm9bJ2l0ZW1zJ10gICAgID0gJGl0ZW1zOwoJCQkkYmxvY2tJbmZvWyd2YWx1ZXMnXSAgICA9ICR2YWx1ZXM7CgkJCSRibG9ja0luZm9bJ2RlbGltaXRlciddID0gJGRlbGltaXRlcjsKCQkJCgkJfQoJCWVsc2UgaWYoJGJsb2NrVHlwZSA9PSAnbW9kdWxlJykgCgkJewoJCQkkbW9kdWxlID0gJyc7CgkJCWlmKGlzc2V0KCRrZXl2YWxbJ21vZHVsZSddKSkKCQkJewoJCQkJJG1vZHVsZSA9IHRyaW0oJGtleXZhbFsnbW9kdWxlJ10pOwoJCQl9CgkJCSRibG9ja0luZm9bJ21vZHVsZSddID0gJG1vZHVsZTsKCQkJJGJsb2NrSW5mb1sncGFyYW1zJ10gPSAka2V5dmFsOwoJCX0KCQllbHNlIGlmKCRibG9ja1R5cGUgPT0gJ211bHRpX2lucHV0JykgCgkJewoJCQkkaW5wdXRzID0gJyc7CgkJCWlmKGlzc2V0KCRrZXl2YWxbJ2lucHV0cyddKSkKCQkJewoJCQkJJGlucHV0cyA9IHRyaW0oJGtleXZhbFsnaW5wdXRzJ10pOwoJCQl9CgkJCQoJCQkkdmFsdWVEZWxpbSA9ICc8IS0tIG11bHRpX2lucHV0X3ZhbHVlX2RlbGltaXRlciAtLT4nOwoJCQlpZihpc3NldCgka2V5dmFsWyd2YWx1ZV9kZWxpbWl0ZXInXSkpCgkJCXsKCQkJCSR2YWx1ZURlbGltID0gdHJpbSgka2V5dmFsWyd2YWx1ZV9kZWxpbWl0ZXInXSk7CgkJCX0KCQkJCgkJCSRpbnB1dERlbGltID0gJzwhLS0gbXVsdGlfaW5wdXRfZGVsaW1pdGVyIC0tPic7CgkJCWlmKGlzc2V0KCRrZXl2YWxbJ2lucHV0X2RlbGltaXRlciddKSkKCQkJewoJCQkJJGltcHV0RGVsaW0gPSB0cmltKCRrZXl2YWxbJ2lucHV0X2RlbGltaXRlciddKTsKCQkJfQoJCQkkYmxvY2tJbmZvWydpbnB1dHMnXSAgICAgICAgICA9ICRpbnB1dHM7CgkJCSRibG9ja0luZm9bJ3ZhbHVlX2RlbGltaXRlciddID0gJHZhbHVlRGVsaW07CgkJCSRibG9ja0luZm9bJ2lucHV0X2RlbGltaXRlciddID0gJGlucHV0RGVsaW07CgkJfQoJCQoJCSRibG9ja0luZm9bJ3NtYXJ0eSddICAgICAgICAgICA9ICRzbWFydHk7CgkJJGJsb2NrSW5mb1snc3R5bGUnXSAgICAgICAgICAgID0gJHN0eWxlOwoJCSRibG9ja0luZm9bJ25hbWUnXSAgICAgICAgICAgICA9ICRuYW1lOwoJCSRibG9ja0luZm9bJ2lkJ10gICAgICAgICAgICAgICA9ICRibG9ja0lkOwoJCSRibG9ja0luZm9bJ2Jsb2NrX3R5cGUnXSAgICAgICA9ICRibG9ja1R5cGU7CgkJJGJsb2NrSW5mb1sndHlwZSddICAgICAgICAgICAgID0gJGJsb2NrVHlwZTsKCQkkYmxvY2tJbmZvWydsYWJlbCddICAgICAgICAgICAgPSAkbGFiZWw7CgkJJGJsb2NrSW5mb1snYmxvY2tfdGFiJ10gICAgICAgID0gJGJsb2NrVGFiOwoJCSRibG9ja0luZm9bJ3BhZ2VfdGFiJ10gICAgICAgICA9ICRwYWdlVGFiOwoJCSRibG9ja0luZm9bJ2VkaXRvcl91c2VycyddICAgICA9ICRlZGl0b3JVc2VyczsKCQkkYmxvY2tJbmZvWydlZGl0b3JfZ3JvdXBzJ10gICAgPSAkZWRpdG9yR3JvdXBzOwoJCSRibG9ja0luZm9bJ2FsbG93X25vbmUnXSAgICAgICA9ICRhbGxvd05vbmU7CgkJJGJsb2NrSW5mb1sndHJhbnNsYXRlX2xhYmVscyddID0gJHRyYW5zbGF0ZUxhYmVsczsKCQkkYmxvY2tJbmZvWyd0cmFuc2xhdGVfdmFsdWVzJ10gPSAkdHJhbnNsYXRlVmFsdWVzOwoJCSRibG9ja0luZm9bJ2Rlc2NyaXB0aW9uJ10gICAgICA9ICRkZXNjcmlwdGlvbjsKCQkkYmxvY2tJbmZvWydjb2xsYXBzZSddICAgICAgICAgPSAkY29sbGFwc2U7CgkJJGJsb2NrSW5mb1snbm9fY29sbGFwc2UnXSAgICAgID0gJG5vX2NvbGxhcHNlOwoJCSRibG9ja0luZm9bJ2Jsb2NrX2dyb3VwJ10gICAgICA9ICRibG9ja0dyb3VwOwoJCSRibG9ja0luZm9bJ2RlZmF1bHRfdmFsdWUnXSAgICA9ICRkZWZhdWx0VmFsdWU7CgkJJGJsb2NrSW5mb1snbXVsdGlwbGUnXSAgICAgICAgID0gZmFsc2U7CgkJJGJsb2NrSW5mb1snbmV3X2Jsb2NrJ10gICAgICAgID0gZmFsc2U7CgkJJGJsb2NrSW5mb1snZmV1X2FjY2VzcyddICAgICAgID0gJGZldV9hY2Nlc3M7CgkJJGJsb2NrSW5mb1snZmV1X2FjdGlvbiddICAgICAgID0gJGZldV9hY3Rpb247CgkJJGJsb2NrSW5mb1sncmVxdWlyZWQnXSAgICAgICAgID0gJHJlcXVpcmVkOwoJCQoJCXJldHVybiAkYmxvY2tJbmZvOwoJfQoJCglwcml2YXRlIGZ1bmN0aW9uIHBhcnNlX2NvbnRlbnRfYmxvY2tzKCRmdW5jdGlvbiA9ICcnKSAKCXsKCQlpZigkdGhpcy0+X2NvbnRlbnRCbG9ja3NMb2FkZWQpIAoJCXsKCQkJcmV0dXJuIHRydWU7CgkJfQoJCQoJCWlmKCR0aGlzLT5tVHlwZSAhPSAnY29udGVudDInICYmICR0aGlzLT5tVHlwZSAhPSAnY29udGVudCcpIAoJCXsKCQkJcmV0dXJuIHRydWU7CgkJfQoJCQoJCSR0aGlzLT5fY29udGVudEJsb2NrcyA9IGFycmF5KCk7CgkJJEFkdmFuY2VkQ29udGVudCA9JiBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0FkdmFuY2VkQ29udGVudCcpOwoJCWdsb2JhbCAkQ01TX0FETUlOX1BBR0U7CgkJaWYoaXNzZXQoJENNU19BRE1JTl9QQUdFKSAmJiAkQ01TX0FETUlOX1BBR0UgPT0gMSkgCgkJewoJCQkkdGhpcy0+X3RhYklkcyAgICAgID0gYXJyYXkoKTsKCQkJJHRoaXMtPl9kYXRlQmxvY2tzICA9IGFycmF5KCk7CgkJCSR0aGlzLT5fYmxvY2tUYWJzICAgPSBhcnJheSgpOwoJCQkkdGhpcy0+X2Jsb2NrR3JvdXBzID0gYXJyYXkoKTsKCQkJIyR0aGlzLT5fbXVsdGlJbnB1dHMgPSBhcnJheSgpOwoJCQkKCQkJJHRoaXMtPl9wYWdlVGFicyA9IGFycmF5KAoJCQkJJ21haW4nID0+IGFycmF5KAoJCQkJCSd0YWJfaWQnICAgICAgICAgPT4gJ21haW4nLCAKCQkJCQkndGFiX25hbWUnICAgICAgID0+IGxhbmcoJ21haW4nKSwgCgkJCQkJJ2Jsb2NrX3RhYnMnICAgICA9PiBhcnJheSgpLAoJCQkJCSdibG9ja19ncm91cHMnICAgPT4gYXJyYXkoKSwKCQkJCQknY29udGVudF9ibG9ja3MnID0+IGFycmF5KCkpKTsKCQkJJHRoaXMtPl90YWJJZHNbXSA9ICdtYWluJzsKCQkJCgkJCWlmKCBjaGVja19wZXJtaXNzaW9uKGdldF91c2VyaWQoKSwgJ01hbmFnZSBBbGwgQ29udGVudCcpICkgCgkJCXsKCQkJCSR0aGlzLT5fcGFnZVRhYnNbJ29wdGlvbnMnXSA9IGFycmF5KAoJCQkJCSd0YWJfaWQnICAgICAgICAgPT4gJ29wdGlvbnMnLCAKCQkJCQkndGFiX25hbWUnICAgICAgID0+IGxhbmcoJ29wdGlvbnMnKSwgCgkJCQkJJ2Jsb2NrX3RhYnMnICAgICA9PiBhcnJheSgpLAoJCQkJCSdibG9ja19ncm91cHMnICAgPT4gYXJyYXkoKSwKCQkJCQknY29udGVudF9ibG9ja3MnID0+IGFycmF5KCkpOwoJCQkJJHRoaXMtPl90YWJJZHNbXSA9ICdvcHRpb25zJzsKCQkJfQoJCQkKCQkJaWYoIGNoZWNrX3Blcm1pc3Npb24oZ2V0X3VzZXJpZCgpLCAnTWFuYWdlIEFkdmFuY2VkQ29udGVudCBPcHRpb25zJykgJiYgJEFkdmFuY2VkQ29udGVudC0+R2V0UHJlZmVyZW5jZSgnc2hvd19hZHZhbmNlZGNvbnRlbnRfb3B0aW9ucycsMSkgKSAKCQkJewoJCQkJJHRoaXMtPl9wYWdlVGFic1snQWR2YW5jZWRDb250ZW50J10gPSBhcnJheSgKCQkJCQkndGFiX2lkJyAgICAgICAgID0+ICdBZHZhbmNlZENvbnRlbnQnLCAKCQkJCQkndGFiX25hbWUnICAgICAgID0+ICdBZHZhbmNlZENvbnRlbnQnLCAKCQkJCQknYmxvY2tfdGFicycgICAgID0+IGFycmF5KCksCgkJCQkJJ2Jsb2NrX2dyb3VwcycgICA9PiBhcnJheSgpLAoJCQkJCSdjb250ZW50X2Jsb2NrcycgPT4gYXJyYXkoKSk7CgkJCQkkdGhpcy0+X3RhYklkc1tdID0gJ0FkdmFuY2VkQ29udGVudCc7CgkJCX0KCQl9CgkJZWxzZSBpZighJHRoaXMtPkNoZWNrRnJvbnRlbmRQYWdlQWNjZXNzKCkpCgkJewoJCQljbXNtcygpLT5HZXRTbWFydHkoKS0+Y2xlYXJfYWxsX2NhY2hlKCk7CgkJCXJldHVybiB0cnVlOwoJCX0KCQkKCQkkY29uZmlnID0gY21zbXMoKS0+R2V0Q29uZmlnKCk7CgkJJHRlbXBsYXRlb3BzID0mIGNtc21zKCktPkdldFRlbXBsYXRlT3BlcmF0aW9ucygpOwoJCQoJCWlmICgkdGhpcy0+bVRlbXBsYXRlSWQgJiYgJHRoaXMtPm1UZW1wbGF0ZUlkID4gLTEpIAoJCXsKCQkJJHRlbXBsYXRlID0gJHRlbXBsYXRlb3BzLT5Mb2FkVGVtcGxhdGVCeUlEKCR0aGlzLT5tVGVtcGxhdGVJZCk7CgkJCSR0aGlzLT5fc3R5bGVzaGVldCA9ICcuLi9zdHlsZXNoZWV0LnBocD90ZW1wbGF0ZWlkPScuJHRoaXMtPm1UZW1wbGF0ZUlkOwoJCX0KCQllbHNlIAoJCXsKCQkJJHRlbXBsYXRlID0gJHRlbXBsYXRlb3BzLT5Mb2FkRGVmYXVsdFRlbXBsYXRlKCk7CgkJfQoJCQoJCWlmKCR0ZW1wbGF0ZSAhPT0gZmFsc2UpIAoJCXsKCQkJaWYoJGNvbmZpZ1snZGVidWcnXSkgCgkJCXsKCQkJCWRlYnVnX2J1ZmZlcigncGFyc2luZyB0ZW1wbGF0ZSBmb3IgY29udGVudCBibG9ja3MgKCcuJGZ1bmN0aW9uLicpJywnQWR2YW5jZWRDb250ZW50Jyk7CgkJCX0KCQkJCgkJCS8vIHJlYWQgY29udGVudCBibG9ja3MKCQkJIyB0aGlzIHdpbGwgc2VhcmNoIGZvciB7Y29udGVudH0ge2NvbnRlbnRfaW1hZ2V9IHtjb250ZW50X21vZHVsZX0gYW5kIHtBZHZhbmNlZENvbnRlbnR9IHdpdGggb3Igd2l0aG91dCBwYXJhbXMgKGNhc2UgaW5zZW5zaXRpdmUpCgkJCSRwYXR0ZXJuID0gJy97KChBZHZhbmNlZENvbnRlbnR8Y29udGVudChfaW1hZ2V8X21vZHVsZSk/KShbXn1dKikpfS9pJzsKCQkJCgkJCSRtYXRjaGVzID0gYXJyYXkoKTsKCQkJLy8gZ2V0IGFsbCB0aGUgdGFncwoJCQkkcmVzdWx0ID0gcHJlZ19tYXRjaF9hbGwoJHBhdHRlcm4sICR0ZW1wbGF0ZS0+Y29udGVudCwgJG1hdGNoZXMpOwoJCQkKCQkJaWYgKCRyZXN1bHQgJiYgY291bnQoJG1hdGNoZXNbMV0pID4gMCkgCgkJCXsKCQkJCQoJCQkJLy8gZ2V0IHRoZSBiYXNpYyBjb250ZW50IHByb3BlcnRpZXMKCQkJCSRiYXNpY0F0dHJpYnMgPSBhcnJheSgpOwoJCQkJZm9yZWFjaCggJHRoaXMtPl9hdHRyaWJ1dGVzIGFzICRvbmVBdHRyaWIgKSAKCQkJCXsKCQkJCQkkYmFzaWNBdHRyaWJzW10gPSAkb25lQXR0cmliWzBdOwoJCQkJfQoJCQkJCgkJCQkkaiA9IDA7CgkJCQkvLyBmb3JlYWNoIHRhZwoJCQkJZm9yZWFjaCAoJG1hdGNoZXNbMV0gYXMgJGtleT0+JHdob2xldGFnKSAKCQkJCXsKCQkJCQkkaisrOwoJCQkJCQoJCQkJCSRibG9ja0luZm8gPSAkdGhpcy0+X2dldF9ibG9ja19pbmZvKCR3aG9sZXRhZyk7CgkJCQkJCgkJCQkJaWYoJGJsb2NrSW5mb1snYmxvY2tfdHlwZSddID09ICdtb2R1bGUnICYmIHN0cnRvbG93ZXIoJGJsb2NrSW5mb1snbW9kdWxlJ10pID09ICdhZHZhbmNlZGNvbnRlbnQnKSAKCQkJCQl7CgkJCQkJCWNvbnRpbnVlOwoJCQkJCX0KCQkJCQkKCQkJCQkvLyBibG9jayA9IGFjdGl2ZT8KCQkJCQlpZihpc3NldCgkYmxvY2tJbmZvWydhY3RpdmUnXSkgJiYgJHRoaXMtPklzRmFsc2UoJGJsb2NrSW5mb1snYWN0aXZlJ10pKSAKCQkJCQl7CgkJCQkJCWNvbnRpbnVlOyAvLyBkb24ndCBwcm9jZXNzIGluYWN0aXZlIGJsb2NrcwoJCQkJCX0KCQkJCQkKCQkJCQlpZihpc3NldCgkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSW5mb1snaWQnXV0pKSAKCQkJCQl7CgkJCQkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJbmZvWydpZCddXVsnbXVsdGlwbGUnXSA9IHRydWU7CgkJCQkJCWNvbnRpbnVlOwoJCQkJCX0KCQkJCQkKCQkJCQkvLyBpZiB0aGlzIGJsb2NrIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSB0ZW1wbGF0ZSBhZnRlciBwYWdlIGhhcyBiZWVuIGNyZWF0ZWQKCQkJCQlpZighaW5fYXJyYXkoJGJsb2NrSW5mb1snaWQnXSwkdGhpcy0+bVByb3BlcnRpZXMtPm1Qcm9wZXJ0eU5hbWVzKSkgCgkJCQkJewoJCQkJCQkkYmxvY2tJbmZvWyduZXdfYmxvY2snXSA9IHRydWU7CgkJCQkJfQoJCQkJCQoJCQkJCSRwYWdlVGFiID0gcHJlZ19yZXBsYWNlKCcvLSsvJywnXycsbXVuZ2Vfc3RyaW5nX3RvX3VybChzdHJ0b2xvd2VyKHRyaW0oJGJsb2NrSW5mb1sncGFnZV90YWInXSkpKSk7CgkJCQkJaWYoIWlzc2V0KCR0aGlzLT5fcGFnZVRhYnNbJHBhZ2VUYWJdKSkgCgkJCQkJewoJCQkJCQkkdGhpcy0+X3BhZ2VUYWJzWyRwYWdlVGFiXVsndGFiX2lkJ10gICAgICAgPSAkcGFnZVRhYjsKCQkJCQkJJHRoaXMtPl9wYWdlVGFic1skcGFnZVRhYl1bJ3RhYl9uYW1lJ10gICAgID0gJGJsb2NrSW5mb1sncGFnZV90YWInXTsKCQkJCQkJJHRoaXMtPl9wYWdlVGFic1skcGFnZVRhYl1bJ2Jsb2NrX3RhYnMnXSAgID0gYXJyYXkoKTsKCQkJCQkJJHRoaXMtPl9wYWdlVGFic1skcGFnZVRhYl1bJ2Jsb2NrX2dyb3VwcyddID0gYXJyYXkoKTsKCQkJCQkJJGJsb2NrSW5mb1sncGFnZV90YWInXSA9ICRwYWdlVGFiOwoJCQkJCX0KCQkJCQkkdGhpcy0+X3BhZ2VUYWJzWyRwYWdlVGFiXVsnY29udGVudF9ibG9ja3MnXVskYmxvY2tJbmZvWydpZCddXSA9ICRibG9ja0luZm9bJ2lkJ107CgkJCQkJCgkJCQkJJGJsb2NrVGFiID0gJyc7CgkJCQkJaWYoJGJsb2NrSW5mb1snYmxvY2tfdGFiJ10gIT0gJycpIAoJCQkJCXsKCQkJCQkJJGJsb2NrVGFiID0gJHBhZ2VUYWIgLiAnXycgLiBwcmVnX3JlcGxhY2UoJy8tKy8nLCdfJyxtdW5nZV9zdHJpbmdfdG9fdXJsKHN0cnRvbG93ZXIodHJpbSgkYmxvY2tJbmZvWydibG9ja190YWInXSkpKSk7CgkJCQkJCWlmKCFpc3NldCgkdGhpcy0+X2Jsb2NrVGFic1skYmxvY2tUYWJdKSkKCQkJCQkJewoJCQkJCQkJJHRoaXMtPl9ibG9ja1RhYnNbJGJsb2NrVGFiXVsndGFiX2lkJ10gICAgICAgPSAkYmxvY2tUYWI7CgkJCQkJCQkkdGhpcy0+X2Jsb2NrVGFic1skYmxvY2tUYWJdWyd0YWJfbmFtZSddICAgICA9ICRibG9ja0luZm9bJ2Jsb2NrX3RhYiddOwoJCQkJCQkJJHRoaXMtPl9ibG9ja1RhYnNbJGJsb2NrVGFiXVsnYmxvY2tfZ3JvdXBzJ10gPSBhcnJheSgpOwoJCQkJCQl9CgkJCQkJCSR0aGlzLT5fYmxvY2tUYWJzWyRibG9ja1RhYl1bJ2NvbnRlbnRfYmxvY2tzJ11bJGJsb2NrSW5mb1snaWQnXV0gPSAkYmxvY2tJbmZvWydpZCddOwoJCQkJCQkkdGhpcy0+X3BhZ2VUYWJzWyRwYWdlVGFiXVsnYmxvY2tfdGFicyddWyRibG9ja1RhYl0gICAgICAgICAgICAgID0gJGJsb2NrVGFiOwoJCQkJCQkkYmxvY2tJbmZvWydibG9ja190YWInXSA9ICRibG9ja1RhYjsKCQkJCQl9CgkJCQkJCgkJCQkJJGJsb2NrR3JvdXAgPSAnJzsKCQkJCQlpZigkYmxvY2tJbmZvWydibG9ja19ncm91cCddICE9ICcnKSAKCQkJCQl7CgkJCQkJCSRibG9ja0dyb3VwID0gKCRibG9ja1RhYj8kYmxvY2tUYWI6JHBhZ2VUYWIpIC4gJ18nIC4gcHJlZ19yZXBsYWNlKCcvLSsvJywnXycsbXVuZ2Vfc3RyaW5nX3RvX3VybChzdHJ0b2xvd2VyKHRyaW0oJGJsb2NrSW5mb1snYmxvY2tfZ3JvdXAnXSkpKSk7CgkJCQkJCWlmKCFpc3NldCgkdGhpcy0+X2Jsb2NrR3JvdXBzWyRibG9ja0dyb3VwXSkpIAoJCQkJCQl7CgkJCQkJCQkkdGhpcy0+X2Jsb2NrR3JvdXBzWyRibG9ja0dyb3VwXVsnZ3JvdXBfaWQnXSAgID0gJGJsb2NrR3JvdXA7CgkJCQkJCQkkdGhpcy0+X2Jsb2NrR3JvdXBzWyRibG9ja0dyb3VwXVsnZ3JvdXBfbmFtZSddID0gJGJsb2NrSW5mb1snYmxvY2tfZ3JvdXAnXTsKCQkJCQkJCSR0aGlzLT5fcGFnZVRhYnNbJHBhZ2VUYWJdWydibG9ja19ncm91cHMnXVskYmxvY2tHcm91cF0gPSAkYmxvY2tHcm91cDsKCQkJCQkJfQoJCQkJCQkkdGhpcy0+X2Jsb2NrR3JvdXBzWyRibG9ja0dyb3VwXVsnY29udGVudF9ibG9ja3MnXVskYmxvY2tJbmZvWydpZCddXSA9ICRibG9ja0luZm9bJ2lkJ107CgkJCQkJCXVuc2V0KCR0aGlzLT5fYmxvY2tUYWJzWyRibG9ja1RhYl1bJ2NvbnRlbnRfYmxvY2tzJ11bJGJsb2NrSW5mb1snaWQnXV0pOwoJCQkJCQlpZigkYmxvY2tUYWIpIAoJCQkJCQl7CgkJCQkJCQkkdGhpcy0+X2Jsb2NrVGFic1skYmxvY2tUYWJdWydibG9ja19ncm91cHMnXVskYmxvY2tHcm91cF0gPSAkYmxvY2tHcm91cDsKCQkJCQkJfQoJCQkJCQllbHNlIAoJCQkJCQl7CgkJCQkJCQl1bnNldCgkdGhpcy0+X2Jsb2NrVGFic1skYmxvY2tUYWJdWydibG9ja19ncm91cHMnXVskYmxvY2tHcm91cF0pOwoJCQkJCQl9CgkJCQkJCSRibG9ja0luZm9bJ2Jsb2NrX2dyb3VwJ10gPSAkYmxvY2tHcm91cDsKCQkJCQl9CgkJCQkJCgkJCQkJLy8gdGhpcyB3aWxsIGNyZWF0ZSBhbiBpbnZhbGlkIGJsb2NrIHR5cGUgdG8gcHJpbnQgb3V0IGEgCgkJCQkJLy8gbWVzc2FnZSB3aGVuIHVzaW5nIGEgYmFzaWMgY29udGVudCBwcm9wZXJ0eSBhcyBibG9jayBuYW1lCgkJCQkJaWYoaW5fYXJyYXkoJGJsb2NrSW5mb1snaWQnXSwgJGJhc2ljQXR0cmlicykgCgkJCQkJfHwgJGJsb2NrSW5mb1snaWQnXSA9PSAkYmxvY2tJbmZvWydpZCddIC4gJ19mZXVfYWN0aW9uJyAKCQkJCQl8fCAkYmxvY2tJbmZvWydpZCddID09ICRibG9ja0luZm9bJ2lkJ10gLiAnX2ZldV9hY3Rpb25bXScgCgkJCQkJfHwgJGJsb2NrSW5mb1snaWQnXSA9PSAkYmxvY2tJbmZvWydpZCddIC4gJ19mZXVfYWNjZXNzJyAKCQkJCQl8fCAkYmxvY2tJbmZvWydpZCddID09ICRibG9ja0luZm9bJ2lkJ10gLiAnX2ZldV9hY2Nlc3NbXScgCgkJCQkJfHwgJGJsb2NrSW5mb1snaWQnXSA9PSAnQWR2YW5jZWRDb250ZW50U3RhcnREYXRlJyAKCQkJCQl8fCAkYmxvY2tJbmZvWydpZCddID09ICdBZHZhbmNlZENvbnRlbnRFbmREYXRlJyAKCQkJCQl8fCAkYmxvY2tJbmZvWydpZCddID09ICdBZHZhbmNlZENvbnRlbnRTdGFydFRpbWUnIAoJCQkJCXx8ICRibG9ja0luZm9bJ2lkJ10gPT0gJ0FkdmFuY2VkQ29udGVudEVuZFRpbWUnIAoJCQkJCXx8ICRibG9ja0luZm9bJ2lkJ10gPT0gJ3N0YXJ0X2RhdGUnIAoJCQkJCXx8ICRibG9ja0luZm9bJ2lkJ10gPT0gJ2VuZF9kYXRlJyAKCQkJCQl8fCAkYmxvY2tJbmZvWydpZCddID09ICRibG9ja0luZm9bJ2lkJ10gLiAnX0FkdmFuY2VkQ29udGVudFRpbWUnIAoJCQkJCXx8ICRibG9ja0luZm9bJ2lkJ10gPT0gJGJsb2NrSW5mb1snaWQnXSAuICdfQWR2YW5jZWRDb250ZW50RGF0ZScpIAoJCQkJCXsKCQkJCQkJJGJsb2NrSW5mb1snaWQnXSA9IG1kNSgkYmxvY2tJbmZvWydpZCddIC4gJGopOwoJCQkJCQkKCQkJCQkJJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0luZm9bJ2lkJ11dID0gJGJsb2NrSW5mbzsKCQkJCQkJJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0luZm9bJ2lkJ11dWydibG9ja190eXBlJ10gICAgPSAnJzsKCQkJCQkJJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0luZm9bJ2lkJ11dWydkZWZhdWx0X3ZhbHVlJ10gPSAkdGhpcy0+bGFuZygnZXJyb3JfYmFzaWNhdHRyaWInLCAkYmxvY2tJbmZvWyduYW1lJ10pOwoJCQkJCQkKCQkJCQkJY29udGludWU7CgkJCQkJfQoJCQkJCQoJCQkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJbmZvWydpZCddXSA9ICRibG9ja0luZm87CgkJCQkJJHRoaXMtPkFkZEV4dHJhUHJvcGVydHkoJGJsb2NrSW5mb1snaWQnXSk7CgkJCQl9CgkJCX0KCQkJLy8gZm9yY2UgYSBsb2FkCgkJCSR0aGlzLT5tUHJvcGVydGllcy0+TG9hZCgkdGhpcy0+bUlkKTsKCQkJJHRoaXMtPl9jb250ZW50QmxvY2tzTG9hZGVkID0gdHJ1ZTsKCQl9CgkJcmV0dXJuICR0aGlzLT5fY29udGVudEJsb2Nrc0xvYWRlZDsKCX0KCQoJZnVuY3Rpb24gZGlzcGxheV9jb250ZW50X2Jsb2NrKCRibG9ja05hbWUsJGJsb2NrSW5mbywkdmFsdWUsJGFkZGluZyA9IGZhbHNlKSAKCXsKCQlpZihtZXRob2RfZXhpc3RzKCR0aGlzLCdfZGlzcGxheV8nLiRibG9ja0luZm9bJ2Jsb2NrX3R5cGUnXS4nX2Jsb2NrJykpCgkJewoJCQlyZXR1cm4gY2FsbF91c2VyX2Z1bmMoYXJyYXkoJHRoaXMsJ19kaXNwbGF5XycuJGJsb2NrSW5mb1snYmxvY2tfdHlwZSddLidfYmxvY2snKSwgJGJsb2NrSW5mbywgJHZhbHVlLCAkYWRkaW5nKTsKCQl9Cgl9CgkKCWZ1bmN0aW9uIFNldFByb3BlcnRpZXMoKSAKCXsKCQlwYXJlbnQ6OlNldFByb3BlcnRpZXMoKTsKCQkKCQkkdGhpcy0+QWRkQmFzZVByb3BlcnR5KCd0ZW1wbGF0ZScsIDQsIDAsICdpbnQnKTsKCQkkdGhpcy0+QWRkQmFzZVByb3BlcnR5KCdwYWdlbWV0YWRhdGEnLCAyMCk7CgkJCgkJJHRoaXMtPkFkZENvbnRlbnRQcm9wZXJ0eSgnc2VhcmNoYWJsZScsIDgsIDAsICdpbnQnKTsKCQkkdGhpcy0+QWRkQ29udGVudFByb3BlcnR5KCdwYWdlZGF0YScsIDI1KTsKCQkkdGhpcy0+QWRkQ29udGVudFByb3BlcnR5KCdkaXNhYmxlX3d5c2l3eWcnLCA2MCwgMCwgJ2ludCcpOwoJCQoJCSR0aGlzLT5BZGRDb250ZW50UHJvcGVydHkoJ2ZldV9hY2Nlc3MnLCA5OSk7CgkJJHRoaXMtPkFkZENvbnRlbnRQcm9wZXJ0eSgncmVkaXJlY3RfcGFnZScsIDEwMCwgMCwgJ2ludCcpOwoJCSR0aGlzLT5BZGRDb250ZW50UHJvcGVydHkoJ3JlZGlyZWN0X3BhcmFtcycsIDEwMSwgMCk7CgkJJHRoaXMtPkFkZENvbnRlbnRQcm9wZXJ0eSgnZXZhbHVhdGVfc21hcnR5JywgMTAyLCAwLCAnaW50Jyk7CgkJJHRoaXMtPkFkZENvbnRlbnRQcm9wZXJ0eSgnZmV1X2FjdGlvbicsIDEwMywgMCwgJ2ludCcpOwoJCQoJCSR0aGlzLT5BZGRDb250ZW50UHJvcGVydHkoJ3VzZV9leHBpcmVfZGF0ZScsIDEwNCwgMCwgJ2ludCcpOwoJCSR0aGlzLT5BZGRDb250ZW50UHJvcGVydHkoJ3N0YXJ0X2RhdGUnLCAxMDUsIDAsICdpbnQnKTsKCQkkdGhpcy0+QWRkQ29udGVudFByb3BlcnR5KCdlbmRfZGF0ZScsIDEwNiwgMCwgJ2ludCcpOwoJCQoJCSR0aGlzLT5tUHJldmlldyA9IHRydWU7Cgl9CgkKCWZ1bmN0aW9uIFJlYWR5Rm9yRWRpdCgpIAoJewoJCSR0aGlzLT5wYXJzZV9jb250ZW50X2Jsb2NrcygnUmVhZHlGb3JFZGl0Jyk7Cgl9CgkKCWZ1bmN0aW9uIFNob3coJHBhcmFtID0gJ2NvbnRlbnRfZW4nKSAKCXsKCQlnbG9iYWwgJENNU19BRE1JTl9QQUdFOwoJCWlmKCFpc3NldCgkQ01TX0FETUlOX1BBR0UpIHx8ICRDTVNfQURNSU5fUEFHRSAhPT0gMSkgCgkJewoJCQkkQWR2YW5jZWRDb250ZW50ID0mIGNtc191dGlsczo6Z2V0X21vZHVsZSgnQWR2YW5jZWRDb250ZW50Jyk7CgkJCWlmKCEkdGhpcy0+Q2hlY2tGcm9udGVuZFBhZ2VBY2Nlc3MoKSkKCQkJewoJCQkJI2Ntc21zKCktPkdldFNtYXJ0eSgpLT5jbGVhcl9hbGxfY2FjaGUoKTsKCQkJCXJldHVybiAkdGhpcy0+RG9Gcm9udGVuZFBhZ2VBY3Rpb24oKTsKCQkJfQoJCX0KCQkKCQkkdGhpcy0+cGFyc2VfY29udGVudF9ibG9ja3MoJ1Nob3cnKTsKCQkkcGFyYW0gPSBwcmVnX3JlcGxhY2UoJy8tKy8nLCdfJyxtdW5nZV9zdHJpbmdfdG9fdXJsKCRwYXJhbSkpOwoJCQoJCWlmKCFpc3NldCgkQ01TX0FETUlOX1BBR0UpIHx8ICRDTVNfQURNSU5fUEFHRSAhPT0gMSkKCQl7CgkJCQoJCQlmb3JlYWNoKCR0aGlzLT5fY29udGVudEJsb2NrcyBhcyAkYmxvY2tJbmZvKQoJCQl7CgkJCQlpZigkZmV1c2VycyA9JiBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0Zyb250RW5kVXNlcnMnKSkKCQkJCXsKCQkJCQlpZigkYmxvY2tJbmZvWydmZXVfYWNjZXNzJ10gJiYgISR0aGlzLT5DaGVja0Zyb250ZW5kQWNjZXNzKCRibG9ja0luZm9bJ2ZldV9hY2Nlc3MnXSkpCgkJCQkJewoJCQkJCQlpZigkYmxvY2tJbmZvWydmZXVfYWN0aW9uJ10gJiYgISR0aGlzLT5fZmV1QWN0aW9uKQoJCQkJCQl7CgkJCQkJCQkkdGhpcy0+X2ZldUFjdGlvbiA9IHRydWU7CgkJCQkJCQkkdGhpcy0+U2V0UHJvcGVydHlWYWx1ZSgkYmxvY2tJbmZvWydpZCddLCRmZXVzZXJzLT5Eb0FjdGlvbignZGVmYXVsdCcsICdjbnRudDAxJywgYXJyYXkoJ2Zvcm0nPT4nbG9naW4nKSwgJHRoaXMtPm1JZCkpOwoJCQkJCQl9CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJJHRoaXMtPlNldFByb3BlcnR5VmFsdWUoJGJsb2NrSW5mb1snaWQnXSwnJyk7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQlpZigkYmxvY2tJbmZvWydibG9ja190eXBlJ10gPT0gJ2RhdGUnICYmICRibG9ja0luZm9bJ2RhdGVfZm9ybWF0J10gIT0gJycpCgkJCQl7CgkJCQkJJHRoaXMtPlNldFByb3BlcnR5VmFsdWUoJGJsb2NrSW5mb1snaWQnXSxzdHJmdGltZSgkYmxvY2tJbmZvWydkYXRlX2Zvcm1hdCddLCR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCRibG9ja0luZm9bJ2lkJ10pKSk7CgkJCQl9CgkJCX0KCQl9CgkJCgkJIyBNTEUgc3VwcG9ydAoJCWlmKCR0aGlzLT5tbGUgJiYgJHRoaXMtPmJsb2NrTGFuZyAhPSAnJykgCgkJewoJCQlpZigkcGFyYW0gPT0gJ2NvbnRlbnRfZW4nKSAKCQkJewoJCQkJJHBhcmFtID0gJ2NvbnRlbnQnLiR0aGlzLT5ibG9ja0xhbmc7CgkJCX0KCQkJZWxzZSBpZighZW5kc3dpdGgoJHBhcmFtLCR0aGlzLT5ibG9ja0xhbmcpKSAKCQkJewoJCQkJJHBhcmFtIC49ICR0aGlzLT5ibG9ja0xhbmc7CgkJCX0KCQkJCgkJfQoJCSMtLS0KCQkKCQkkcmVzdWx0ID0gJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJHBhcmFtKTsKCQkKCQkjIE1MRSBzdXBwb3J0CgkJaWYoJHRoaXMtPm1sZSAmJiAkdGhpcy0+YmxvY2tMYW5nICE9ICcnKSAKCQl7CgkJCWlmKCRyZXN1bHQgPT0gJycgJiYgJHRoaXMtPmRlZmF1bHRCbG9ja0xhbmcgIT0gJycgJiYgJHRoaXMtPmRlZmF1bHRCbG9ja0xhbmcgIT0gJHRoaXMtPmJsb2NrTGFuZykgCgkJCXsKCQkJCSRwYXJhbSA9IHN0cl9yZXBsYWNlKCR0aGlzLT5ibG9ja0xhbmcsICR0aGlzLT5kZWZhdWx0QmxvY2tMYW5nLCAkcGFyYW0pOwoJCQkJJHJlc3VsdCA9ICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCRwYXJhbSk7CgkJCX0KCQl9CgkJIy0tLQoJCQoJCXJldHVybiAkcmVzdWx0OwoJfQoJCglmdW5jdGlvbiBUYWJOYW1lcygpIAoJewoJCSR0YWJzID0gYXJyYXkobGFuZygnbWFpbicpKTsKCQlpZiggY2hlY2tfcGVybWlzc2lvbihnZXRfdXNlcmlkKCksICdNYW5hZ2UgQWxsIENvbnRlbnQnKSApIAoJCXsKCQkJJHRhYnNbXSA9IGxhbmcoJ29wdGlvbnMnKTsKCQl9CgkJJEFkdmFuY2VkQ29udGVudCA9JiBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0FkdmFuY2VkQ29udGVudCcpOwoJCWlmKCBjaGVja19wZXJtaXNzaW9uKGdldF91c2VyaWQoKSwgJ01hbmFnZSBBZHZhbmNlZENvbnRlbnQgT3B0aW9ucycpICYmICRBZHZhbmNlZENvbnRlbnQtPkdldFByZWZlcmVuY2UoJ3Nob3dfYWR2YW5jZWRjb250ZW50X29wdGlvbnMnLDEpKSAKCQl7CgkJCSR0YWJzW10gPSAnQWR2YW5jZWRDb250ZW50JzsKCQl9CgkJCgkJJHRoaXMtPnBhcnNlX2NvbnRlbnRfYmxvY2tzKCdUYWJOYW1lcycpOwoJCQoJCWZvcmVhY2goJHRoaXMtPl9wYWdlVGFicyBhcyAkdGFiKSAKCQl7CgkJCWlmKCFpbl9hcnJheSgkdGFiWyd0YWJfbmFtZSddLCAkdGFicykpIAoJCQl7CgkJCQkkdGFic1tdID0gJHRhYlsndGFiX25hbWUnXTsKCQkJfQoJCQlpZighaW5fYXJyYXkoJHRhYlsndGFiX2lkJ10sICR0aGlzLT5fdGFiSWRzKSkgCgkJCXsKCQkJCSR0aGlzLT5fdGFiSWRzW10gPSAkdGFiWyd0YWJfaWQnXTsKCQkJfQoJCX0KCQlyZXR1cm4gJHRhYnM7Cgl9CgkKCWZ1bmN0aW9uIEZpbGxQYXJhbXMoJHBhcmFtcykgCgl7CgkJaWYoaXNzZXQoJHBhcmFtc1snY29udGVudF90eXBlJ10pKSAKCQl7CgkJCSRBZHZhbmNlZENvbnRlbnQgPSYgY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdBZHZhbmNlZENvbnRlbnQnKTsKCQkJCgkJCSRwYXJhbWV0ZXJzID0gYXJyYXkoJ3BhZ2VkYXRhJywgJ3NlYXJjaGFibGUnLCAnZGlzYWJsZV93eXNpd3lnJywgJ2ZldV9hY2Nlc3MnLCAncmVkaXJlY3RfcGFnZScsICdyZWRpcmVjdF9wYXJhbXMnLCAnZXZhbHVhdGVfc21hcnR5JywgJ2ZldV9hY3Rpb24nLCAnc3RhcnRfZGF0ZScsICdlbmRfZGF0ZScsICd1c2VfZXhwaXJlX2RhdGUnKTsKCQkJCgkJCSR0aGlzLT5fY29udGVudEJsb2Nrc0xvYWRlZCA9IGZhbHNlOwoJCQkvL3BpY2sgdXAgdGhlIHRlbXBsYXRlIGlkIGJlZm9yZSB3ZSBkbyBwYXJhbWV0ZXJzCgkJCWlmIChpc3NldCgkcGFyYW1zWyd0ZW1wbGF0ZV9pZCddKSkgCgkJCXsKCQkJCSNpZigkdGhpcy0+bVRlbXBsYXRlSWQgIT0gJHBhcmFtc1sndGVtcGxhdGVfaWQnXSkgewoJCQkJIwkkdGhpcy0+X2NvbnRlbnRCbG9ja3NMb2FkZWQgPSBmYWxzZTsKCQkJCSN9CgkJCQkkdGhpcy0+bVRlbXBsYXRlSWQgPSAkcGFyYW1zWyd0ZW1wbGF0ZV9pZCddOwoJCQl9CgkJCS8vcGljayB1cCB0aGUgY29udGVudCB0eXBlIGJlZm9yZSB3ZSBkbyBwYXJhbWV0ZXJzCgkJCWlmIChpc3NldCgkcGFyYW1zWydjb250ZW50X3R5cGUnXSkpIAoJCQl7CgkJCQkjaWYoJHRoaXMtPm1UeXBlICE9ICRwYXJhbXNbJ2NvbnRlbnRfdHlwZSddKSB7CgkJCQkjCSR0aGlzLT5fY29udGVudEJsb2Nrc0xvYWRlZCA9IGZhbHNlOwoJCQkJI30KCQkJCSR0aGlzLT5tVHlwZSA9ICRwYXJhbXNbJ2NvbnRlbnRfdHlwZSddOwoJCQl9CgkJCQoJCQlpZigkdGhpcy0+bVR5cGUgPT0gJ2NvbnRlbnQyJyB8fCAkdGhpcy0+bVR5cGUgPT0gJ2NvbnRlbnQnKSAKCQkJewoJCQkJLy8gYWRkIGNvbnRlbnQgYmxvY2tzCgkJCQkkdGhpcy0+cGFyc2VfY29udGVudF9ibG9ja3MoJ0ZpbGxQYXJhbXMnKTsKCQkJCQoJCQkJIyBhZGRlZCBieSBOYU46CgkJCQkkcGFyZW50SWQgPSAtMTsKCQkJCWlmKGlzc2V0KCRwYXJhbXNbJ3BhcmVudF9pZCddKSkKCQkJCXsKCQkJCQkkcGFyZW50SWQgPSAkcGFyYW1zWydwYXJlbnRfaWQnXTsKCQkJCX0KCQkJCQoJCQkJaWYoY2hlY2tfcGVybWlzc2lvbihnZXRfdXNlcmlkKCksICdNYW5hZ2UgQWR2YW5jZWRDb250ZW50IE9wdGlvbnMnKSAmJiBpc3NldCgkcGFyYW1zWydmZXVfYWNjZXNzJ10pKSAKCQkJCXsKCQkJCQlpZighaXNfYXJyYXkoJHBhcmFtc1snZmV1X2FjY2VzcyddKSkKCQkJCQl7CgkJCQkJCSRmZXVBY2Nlc3MgPSBhcnJheSgpOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQkkZmV1QWNjZXNzID0gJHBhcmFtc1snZmV1X2FjY2VzcyddOwoJCQkJCX0KCQkJCQkKCQkJCQkvLyBpZiBwYWdlIGhhcyBubyBwYXJlbnRzIGJ1dCB3YW50cyB0byBpbmhlcml0IC0+IHJlbW92ZSBpbmhlcml0YW5jZQoJCQkJCWlmKCRwYXJlbnRJZCA8PSAwICYmIGluX2FycmF5KCctMScsICRmZXVBY2Nlc3MpKSAKCQkJCQl7CgkJCQkJCWZvcmVhY2goJGZldUFjY2VzcyBhcyAkaz0+JHYpIAoJCQkJCQl7CgkJCQkJCQlpZigkdiA9PSAnLTEnKSAKCQkJCQkJCXsKCQkJCQkJCQl1bnNldCgkZmV1QWNjZXNzWyRrXSk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQkJCgkJCQkJLy8gaWYgdGhlcmUgaXMgc3RpbGwgaW5oZXJpdGFuY2UgLT4gY2hlY2sgaWYgdGhlcmUgYWN0dWFsbHkgaXMgYW55IGZldSBncm91cCBzZWxlY3RlZCBieSBwYXJlbnRzCgkJCQkJJF9mZXVBY2Nlc3MgPSBhcnJheSgpOwoJCQkJCWlmKGluX2FycmF5KCctMScsICRmZXVBY2Nlc3MpKSAKCQkJCQl7CgkJCQkJCS8vICRfZmV1QWNjZXNzIGNvbnRhaW5zIGFsbCBmZXUgZ3JvdXBzIChvZiBjdXJyZW50IHBhZ2UgYXMgd2VsbCBhcyBvZiBhbGwgcGFyZW50IHBhZ2VzKQoJCQkJCQkkX2ZldUFjY2VzcyA9ICR0aGlzLT5Jbmhlcml0UGFyZW50UHJvcCgkcGFyZW50SWQsICdmZXVfYWNjZXNzJywgJGZldUFjY2Vzcyk7CgkJCQkJfQoJCQkJCQoJCQkJCS8vIGlmIHdlIGhhdmUgc2VsZWN0ZWQgYW55IGZldSBncm91cCAtPiBkaXNhYmxlIGNhY2hpbmcgYW5kIHNlYXJjaAoJCQkJCWlmKGNvdW50KCRfZmV1QWNjZXNzKSB8fCAoY291bnQoJGZldUFjY2VzcykgJiYgIWluX2FycmF5KCctMScsICRmZXVBY2Nlc3MpKSkgCgkJCQkJewoJCQkJCQkkcGFyYW1zWydjYWNoYWJsZSddICAgPSBmYWxzZTsKCQkJCQkJJHRoaXMtPm1DYWNoYWJsZSAgICAgID0gZmFsc2U7CgkJCQkJCSRwYXJhbXNbJ3NlYXJjaGFibGUnXSA9IGZhbHNlOwoJCQkJCX0KCQkJCQkKCQkJCQkkcGFyYW1zWydmZXVfYWNjZXNzJ10gPSBpbXBsb2RlKCcsJywgJGZldUFjY2Vzcyk7CgkJCQkJCgkJCQkJJHJlZGlyZWN0UGFnZSA9ICcnOwoJCQkJCWlmKGlzc2V0KCRwYXJhbXNbJ3JlZGlyZWN0X3BhZ2UnXSkpIAoJCQkJCXsKCQkJCQkJJHJlZGlyZWN0UGFnZSA9ICRwYXJhbXNbJ3JlZGlyZWN0X3BhZ2UnXTsKCQkJCQl9CgkJCQkJLy8gaWYgcGFnZSBoYXMgbm8gcGFyZW50cyBidXQgd2FudHMgdG8gaW5oZXJpdCAtPiByZW1vdmUgaW5oZXJpdGFuY2UKCQkJCQlpZigkcGFyZW50SWQgPD0gMCAmJiAkcmVkaXJlY3RQYWdlID09IC0xKSAKCQkJCQl7CgkJCQkJCSRyZWRpcmVjdFBhZ2UgPSAnJzsKCQkJCQl9CgkJCQkJCgkJCQkJJGZldUFjdGlvbiA9ICcnOyAKCQkJCQlpZihpc3NldCgkcGFyYW1zWydmZXVfYWN0aW9uJ10pKQoJCQkJCXsKCQkJCQkJJGZldUFjdGlvbiA9ICRwYXJhbXNbJ2ZldV9hY3Rpb24nXTsKCQkJCQl9CgkJCQkJLy8gaWYgcGFnZSBoYXMgbm8gcGFyZW50cyBidXQgd2FudHMgdG8gaW5oZXJpdCAtPiByZW1vdmUgaW5oZXJpdGFuY2UKCQkJCQlpZigkcGFyZW50SWQgPD0gMCAmJiAkZmV1QWN0aW9uID09IC0xKSAKCQkJCQl7CgkJCQkJCSRmZXVBY3Rpb24gPSAnJzsKCQkJCQl9CgkJCQkJJHBhcmFtc1sncmVkaXJlY3RfcGFnZSddID0gJHJlZGlyZWN0UGFnZTsKCQkJCQkkcGFyYW1zWydmZXVfYWN0aW9uJ10gICAgPSAkZmV1QWN0aW9uOwoJCQkJfQoJCQkJCgkJCQkvLyBkbyB0aGUgY29udGVudCBwcm9wZXJ0eSBwYXJhbWV0ZXJzCgkJCQlmb3JlYWNoICgkcGFyYW1ldGVycyBhcyAkb25lcGFyYW0pIAoJCQkJewoJCQkJCWlmKGNoZWNrX3Blcm1pc3Npb24oZ2V0X3VzZXJpZCgpLCAnTWFuYWdlIEFkdmFuY2VkQ29udGVudCBPcHRpb25zJykgJiYgJG9uZXBhcmFtID09ICdzdGFydF9kYXRlJyB8fCAkb25lcGFyYW0gPT0gJ2VuZF9kYXRlJykgCgkJCQkJewoJCQkJCQkkX3N0cmluZyAgICAgICAgICAgPSB1Y2ZpcnN0KHN0cl9yZXBsYWNlKCdfZGF0ZScsJycsJG9uZXBhcmFtKSk7CgkJCQkJCSRwYXJhbXNbJG9uZXBhcmFtXSA9IDA7CgkJCQkJCWlmKGlzc2V0KCRwYXJhbXNbJ0FkdmFuY2VkQ29udGVudCcuJF9zdHJpbmcuJ1RpbWUnXSkgJiYgaXNzZXQoJHBhcmFtc1snQWR2YW5jZWRDb250ZW50Jy4kX3N0cmluZy4nRGF0ZSddKSkKCQkJCQkJewoJCQkJCQkJJHBhcmFtc1skb25lcGFyYW1dID0gJHBhcmFtc1snQWR2YW5jZWRDb250ZW50Jy4kX3N0cmluZy4nVGltZSddICsgJHBhcmFtc1snQWR2YW5jZWRDb250ZW50Jy4kX3N0cmluZy4nRGF0ZSddOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWlmIChpc3NldCgkcGFyYW1zWyRvbmVwYXJhbV0pKSAKCQkJCQl7CgkJCQkJCSR0aGlzLT5TZXRQcm9wZXJ0eVZhbHVlKCRvbmVwYXJhbSwgJHBhcmFtc1skb25lcGFyYW1dKTsKCQkJCQl9CgkJCQl9CgkJCQkKCQkJCWlmKGNoZWNrX3Blcm1pc3Npb24oZ2V0X3VzZXJpZCgpLCAnTWFuYWdlIEFkdmFuY2VkQ29udGVudCBPcHRpb25zJykgJiYgaXNzZXQoJHBhcmFtc1snc3RhcnRfZGF0ZSddKSAmJiBpc3NldCgkcGFyYW1zWyd1c2VfZXhwaXJlX2RhdGUnXSkgJiYgJHBhcmFtc1sndXNlX2V4cGlyZV9kYXRlJ10gPT0gMSAmJiAkcGFyYW1zWydzdGFydF9kYXRlJ10gPiB0aW1lKCkpIAoJCQkJewoJCQkJCSRwYXJhbXNbJ2FjdGl2ZSddID0gZmFsc2U7CgkJCQkJJHRoaXMtPm1BY3RpdmUgICAgPSBmYWxzZTsKCQkJCX0KCQkJCQoJCQkJLy8gbWV0YWRhdGEKCQkJCWlmIChpc3NldCgkcGFyYW1zWydtZXRhZGF0YSddKSkgCgkJCQl7CgkJCQkJJHRoaXMtPm1NZXRhZGF0YSA9ICRwYXJhbXNbJ21ldGFkYXRhJ107CgkJCQl9CgkJCQkKCQkJCS8vIGNvbnRlbnQgYmxvY2tzCgkJCQkkaSA9IDA7CgkJCQlmb3JlYWNoKCRwYXJhbXMgYXMgJHBhcmFtTmFtZSA9PiAkcGFyYW1WYWx1ZSkgCgkJCQl7CgkJCQkJJHBhcmFtTmFtZSA9IHN0cl9yZXBsYWNlKCdfQWR2YW5jZWRDb250ZW50RGF0ZScsICcnLCAkcGFyYW1OYW1lKTsKCQkJCQkKCQkJCQlpZighaXNzZXQoJHRoaXMtPl9jb250ZW50QmxvY2tzWyRwYXJhbU5hbWVdKSkKCQkJCQl7CgkJCQkJCWNvbnRpbnVlOwoJCQkJCX0KCQkJCQkKCQkJCQkkaSsrOwoJCQkJCSR2YWx1ZSA9ICcnOwoJCQkJCWlmKCR0aGlzLT5fY29udGVudEJsb2Nrc1skcGFyYW1OYW1lXVsnYmxvY2tfdHlwZSddID09ICdzZWxlY3RfbXVsdGlwbGUnKSAKCQkJCQl7CgkJCQkJCWlmKGlzX2FycmF5KCRwYXJhbVZhbHVlKSkKCQkJCQkJewoJCQkJCQkJJHZhbHVlID0gaW1wbG9kZSgkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJHBhcmFtTmFtZV1bJ2RlbGltaXRlciddLCAkcGFyYW1WYWx1ZSk7CgkJCQkJCX0KCQkJCQkJZWxzZSBpZiAoJHRoaXMtPl9jb250ZW50QmxvY2tzWyRwYXJhbU5hbWVdWydzb3J0YWJsZSddKSAKCQkJCQkJewoJCQkJCQkJJGl0ZW1zID0gYXJyYXkoKTsKCQkJCQkJCWZvcmVhY2goJHBhcmFtcyBhcyAkaXRlbU5hbWUgPT4gJGl0ZW1WYWx1ZSkgLy8gY3JlYXRlIGZ1bmN0aW9uIHRvIGxvb3Agb25seSB0aHJvdWdoIHRoZSBpdGVtcyBub3QgdGhyb3VnaCBhbGwgcGFyYW1zIQoJCQkJCQkJewoJCQkJCQkJCWlmKHN0YXJ0c3dpdGgoJGl0ZW1OYW1lLCRwYXJhbU5hbWUuJ19BZHZhbmNlZENvbnRlbnRTb3J0YWJsZUl0ZW1fJykpIAoJCQkJCQkJCXsKCQkJCQkJCQkJJGl0ZW1zW10gPSAkaXRlbVZhbHVlOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJCSR2YWx1ZSA9IGltcGxvZGUoJHRoaXMtPl9jb250ZW50QmxvY2tzWyRwYXJhbU5hbWVdWydkZWxpbWl0ZXInXSwgJGl0ZW1zKTsKCQkJCQkJfQoJCQkJCX0KCQkJCQllbHNlIGlmKCR0aGlzLT5fY29udGVudEJsb2Nrc1skcGFyYW1OYW1lXVsnYmxvY2tfdHlwZSddID09ICdkYXRlJyAKCQkJCQkmJiAkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJHBhcmFtTmFtZV1bJ21vZGUnXSA9PSAnY2FsZW5kYXInIAoJCQkJCSYmIGlzc2V0KCRwYXJhbXNbJHBhcmFtTmFtZSAuICdfQWR2YW5jZWRDb250ZW50RGF0ZSddKSkgCgkJCQkJewoJCQkJCQkkdGltZSA9IDA7CgkJCQkJCWlmKGlzc2V0KCRwYXJhbXNbJHBhcmFtTmFtZSAuICdfQWR2YW5jZWRDb250ZW50VGltZSddKSkKCQkJCQkJewoJCQkJCQkJJHRpbWUgPSAkcGFyYW1zWyRwYXJhbU5hbWUgLiAnX0FkdmFuY2VkQ29udGVudFRpbWUnXTsKCQkJCQkJfQoJCQkJCQkjJF90bXAgICAgICAgICA9IGV4cGxvZGUoJzonLCAkcGFyYW1zWyRwYXJhbU5hbWUgLiAnX0FkdmFuY2VkQ29udGVudFRpbWUnXSk7CgkJCQkJCSMkdGltZV9zZWNvbmRzID0gKCgkX3RtcFswXSAqIDM2MDApICsgKCRfdG1wWzFdICogNjApKTsKCQkJCQkJIyR2YWx1ZSAgICAgICA9ICR0aW1lX3NlY29uZHMgKyAkcGFyYW1zWyRwYXJhbU5hbWUgLiAnX0FkdmFuY2VkQ29udGVudERhdGUnXTsKCQkJCQkJJHZhbHVlICAgICAgICA9ICR0aW1lICsgJHBhcmFtc1skcGFyYW1OYW1lIC4gJ19BZHZhbmNlZENvbnRlbnREYXRlJ107CgkJCQkJfQoJCQkJCWVsc2UgaWYoJHRoaXMtPl9jb250ZW50QmxvY2tzWyRwYXJhbU5hbWVdWydibG9ja190eXBlJ10gPT0gJ211bHRpX2lucHV0JykKCQkJCQl7CgkJCQkJCSRtdWx0aV9pbnB1dHMgPSBhcnJheSgpOwoJCQkJCQlmb3JlYWNoKCR0aGlzLT5DbGVhbkFycmF5KGV4cGxvZGUoJywnLCR0aGlzLT5fY29udGVudEJsb2Nrc1skcGFyYW1OYW1lXVsnaW5wdXRzJ10pKSBhcyAkaz0+JGlucHV0X2lkKQoJCQkJCQl7CgkJCQkJCQkkbXVsdGlfaW5wdXRfdmFsdWVzID0gYXJyYXkoKTsKCQkJCQkJCWZvcmVhY2goJHRoaXMtPl9tdWx0aUlucHV0c1skaW5wdXRfaWRdWydlbGVtZW50cyddIGFzICRlbG1faWQpCgkJCQkJCQl7CgkJCQkJCQkJaWYoaXNzZXQoJHBhcmFtc1snbXVsdGlJbnB1dC0nLiRwYXJhbU5hbWUuJy0nLiRrLictJy4kZWxtX2lkXSkpCgkJCQkJCQkJewoJCQkJCQkJCQkkbXVsdGlfaW5wdXRfdmFsdWVzW10gPSAkcGFyYW1zWydtdWx0aUlucHV0LScuJHBhcmFtTmFtZS4nLScuJGsuJy0nLiRlbG1faWRdOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJCSNpZighJHRoaXMtPklzVmFyRW1wdHkoJG11bHRpX2lucHV0X3ZhbHVlcykpCgkJCQkJCQl7CgkJCQkJCQkJJG11bHRpX2lucHV0c1tdID0gaW1wbG9kZSgkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJHBhcmFtTmFtZV1bJ3ZhbHVlX2RlbGltaXRlciddLCRtdWx0aV9pbnB1dF92YWx1ZXMpOwoJCQkJCQkJfQoJCQkJCQkJI2Vsc2UKCQkJCQkJCSN7CgkJCQkJCQkjCSRtdWx0aV9pbnB1dHNbXSA9ICcnOwoJCQkJCQkJI30KCQkJCQkJfQoJCQkJCQlpZighJHRoaXMtPklzVmFyRW1wdHkoJG11bHRpX2lucHV0cykpCgkJCQkJCXsKCQkJCQkJCSR2YWx1ZSA9IGltcGxvZGUoJHRoaXMtPl9jb250ZW50QmxvY2tzWyRwYXJhbU5hbWVdWydpbnB1dF9kZWxpbWl0ZXInXSwgJG11bHRpX2lucHV0cyk7CgkJCQkJCX0KCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJJHZhbHVlID0gdHJpbSgkcGFyYW1WYWx1ZSk7CgkJCQkJfQoJCQkJCWlmKCR2YWx1ZSA9PSAnJyAmJiAhJHRoaXMtPl9jb250ZW50QmxvY2tzWyRwYXJhbU5hbWVdWydhbGxvd19ub25lJ10pIAoJCQkJCXsKCQkJCQkJJHZhbHVlID0gJHRoaXMtPl9jb250ZW50QmxvY2tzWyRwYXJhbU5hbWVdWydkZWZhdWx0X3ZhbHVlJ107CgkJCQkJCWlmKCR0aGlzLT5fY29udGVudEJsb2Nrc1skcGFyYW1OYW1lXVsnc21hcnR5J10pCgkJCQkJCXsKCQkJCQkJCSR2YWx1ZSA9ICR0aGlzLT5Eb1NtYXJ0eSgkdmFsdWUpOwoJCQkJCQl9CgkJCQkJfQoJCQkJCQoJCQkJCSMgTUxFIHN1cHBvcnQKCQkJCQlpZigkdGhpcy0+bWxlICYmICR0aGlzLT5ibG9ja0xhbmcgIT0gJycgJiYgJHBhcmFtTmFtZSAhPSAnY29udGVudCcgLiAkdGhpcy0+YmxvY2tMYW5nKQoJCQkJCXsKCQkJCQkJJHBhcmFtTmFtZSAuPSAkdGhpcy0+YmxvY2tMYW5nOwoJCQkJCX0KCQkJCQkjLS0tCgkJCQkJCgkJCQkJJHRoaXMtPkFkZEV4dHJhUHJvcGVydHkoJHBhcmFtTmFtZSk7CgkJCQkJJHRoaXMtPlNldFByb3BlcnR5VmFsdWUoJHBhcmFtTmFtZSwgJHZhbHVlKTsKCQkJCX0KCQkJfQoJCX0KCQlwYXJlbnQ6OkZpbGxQYXJhbXMoJHBhcmFtcyk7Cgl9CgkKCWZ1bmN0aW9uIEVkaXRBc0FycmF5KCRhZGRpbmcgPSBmYWxzZSwgJHRhYiA9IDAsICRzaG93YWRtaW4gPSBmYWxzZSkgCgl7CgkJJHRoaXMtPnBhcnNlX2NvbnRlbnRfYmxvY2tzKCdFZGl0QXNBcnJheScpOwoJCSRyZXQgPSBhcnJheSgpOwoJCSR0bXAgPSBhcnJheSgpOwoJCWlmKGlzc2V0KCR0aGlzLT5fdGFiSWRzWyR0YWJdKSkgCgkJewoJCQkkdGFiX2lkID0gJHRoaXMtPl90YWJJZHNbJHRhYl07CgkJfQoJCWVsc2UgCgkJewoJCQlyZXR1cm4gYXJyYXkoKTsKCQl9CgkJaWYoJHRhYl9pZCA9PSAnbWFpbicgfHwgKCR0YWJfaWQgPT0gJ29wdGlvbnMnICYmIGNoZWNrX3Blcm1pc3Npb24oZ2V0X3VzZXJpZCgpLCAnTWFuYWdlIEFsbCBDb250ZW50JykpKSAKCQl7CgkJCSR0bXAgPSAkdGhpcy0+Q2xlYW5BcnJheSgkdGhpcy0+ZGlzcGxheV9hdHRyaWJ1dGVzKCRhZGRpbmcsICR0YWIpKTsKCQl9CgkJZWxzZSBpZigkdGFiX2lkID09ICdBZHZhbmNlZENvbnRlbnQnICYmIGNoZWNrX3Blcm1pc3Npb24oZ2V0X3VzZXJpZCgpLCAnTWFuYWdlIEFkdmFuY2VkQ29udGVudCBPcHRpb25zJykpIAoJCXsKCQkJJHRtcCA9ICR0aGlzLT5EaXNwbGF5QWR2YW5jZWRPcHRpb25zKCRhZGRpbmcpOwoJCX0KCQkKCQlmb3JlYWNoKCAkdG1wIGFzICRvbmUgKSAKCQl7CgkJCSRyZXRbXSA9ICRvbmU7CgkJfQoJCQoJCSRBZHZhbmNlZENvbnRlbnQgPSYgY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdBZHZhbmNlZENvbnRlbnQnKTsKCQkkaiA9IDA7CgkJZm9yZWFjaCgkdGhpcy0+X3BhZ2VUYWJzWyR0YWJfaWRdWydibG9ja19ncm91cHMnXSBhcyAkYmxvY2tHcm91cCkgCgkJewoJCQkkdGhpcy0+X2Jsb2NrR3JvdXBzWyRibG9ja0dyb3VwXVsnZGlzcGxheSddID0gJEFkdmFuY2VkQ29udGVudC0+R2V0SXRlbURpc3BsYXkoJ2dyb3VwJywgJGJsb2NrR3JvdXAsICR0aGlzLT5tSWQsICR0aGlzLT5tVGVtcGxhdGVJZCwgISRBZHZhbmNlZENvbnRlbnQtPkdldFByZWZlcmVuY2UoJ2NvbGxhcHNlX2dyb3VwX2RlZmF1bHQnLDEpKTsKCQkJCSR0aGlzLT5fYmxvY2tHcm91cHNbJGJsb2NrR3JvdXBdWydwcmVmX3VybCddID0gc3RyX3JlcGxhY2UoJyZhbXA7JywnJicsCgkJCQkJJEFkdmFuY2VkQ29udGVudC0+Q3JlYXRlTGluaygnbTFfJywgJ3NhdmVQcmVmcycsICcnLCAkdGhpcy0+bGFuZygndG9nZ2xlX2dyb3VwJyksIAoJCQkJCQlhcnJheSgnaXRlbV90eXBlJz0+J2dyb3VwJywKCQkJCQkJCSdkaXNhYmxlX3RoZW1lJz0+dHJ1ZSwgCgkJCQkJCQknYWpheCc9PnRydWUsIAoJCQkJCQkJJ2NvbnRlbnRfaWQnPT4kdGhpcy0+bUlkLAoJCQkJCQkJJ3RlbXBsYXRlX2lkJz0+JHRoaXMtPm1UZW1wbGF0ZUlkLAoJCQkJCQkJJ2l0ZW1faWQnPT4kYmxvY2tHcm91cCksIAoJCQkJCQknJywgdHJ1ZSkpOwoJCX0KCQlmb3JlYWNoKCR0aGlzLT5fcGFnZVRhYnNbJHRhYl9pZF1bJ2NvbnRlbnRfYmxvY2tzJ10gYXMgJGJsb2NrSWQpIAoJCXsKCQkJJGorKzsKCQkJCgkJCWlmKCEkdGhpcy0+Q2hlY2tCbG9ja1Blcm1pc3Npb24oJGJsb2NrSWQpKQoJCQkJY29udGludWU7CgkJCQoJCQlpZigkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydibG9ja190eXBlJ10gIT0gJycgJiYgJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnc21hcnR5J10pIAoJCQl7CgkJCQlmb3JlYWNoKCR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF0gYXMgJHByb3BOYW1lPT4kcHJvcFZhbHVlKSAKCQkJCXsKCQkJCQkkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWyRwcm9wTmFtZV0gPSAkdGhpcy0+RG9TbWFydHkoJHByb3BWYWx1ZSk7CgkJCQl9CgkJCX0KCQkJIyBNTEUgc3VwcG9ydAoJCQlpZigkdGhpcy0+bWxlICYmICR0aGlzLT5ibG9ja0xhbmcgIT0gJycgJiYgJGJsb2NrSWQgIT0gJ2NvbnRlbnQnIC4gJHRoaXMtPmJsb2NrTGFuZykKCQkJewoJCQkJJHZhbHVlID0gJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJGJsb2NrSWQgLiAkdGhpcy0+YmxvY2tMYW5nKTsKCQkJfQoJCQllbHNlICMtLS0KCQkJewoJCQkJJHZhbHVlID0gJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJGJsb2NrSWQpOwoJCQl9CgkJCSMgTUxFIHN1cHBvcnQKCQkJaWYoJHRoaXMtPm1sZSAmJiAkdmFsdWUgPT0gJycgJiYgJHRoaXMtPmRlZmF1bHRCbG9ja0xhbmcgIT0gJycgJiYgJHRoaXMtPmRlZmF1bHRCbG9ja0xhbmcgIT0gJHRoaXMtPmJsb2NrTGFuZykgCgkJCXsKCQkJCWlmKCRibG9ja0lkICE9ICdjb250ZW50JyAuICR0aGlzLT5ibG9ja0xhbmcpCgkJCQl7CgkJCQkJJHZhbHVlID0gJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJGJsb2NrSWQgLiAkdGhpcy0+ZGVmYXVsdEJsb2NrTGFuZyk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJHZhbHVlID0gJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJ2NvbnRlbnQnIC4gJHRoaXMtPmRlZmF1bHRCbG9ja0xhbmcpOwoJCQkJfQoJCQl9CgkJCSMtLS0KCQkJCgkJCWlmKCgkYWRkaW5nICYmICR2YWx1ZSA9PSAnJykgCgkJCXx8ICgkdmFsdWUgPT0gJycgJiYgISR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2FsbG93X25vbmUnXSkgfHwgJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnbmV3X2Jsb2NrJ10pIAoJCQl7CgkJCQkkdmFsdWUgPSAkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydkZWZhdWx0X3ZhbHVlJ107CgkJCX0KCQkJCgkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2NvbnRlbnQnXSA9IGNtc19odG1sZW50aXRpZXMoJHZhbHVlLCBFTlRfTk9RVU9URVMsIGdldF9lbmNvZGluZygnJykpOwoJCQkkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydpbnB1dCddICAgPSAkQWR2YW5jZWRDb250ZW50LT5sYW5nKCdpbnZhbGlkX2Jsb2NrdHlwZScsJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnYmxvY2tfdHlwZSddLCR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ25hbWUnXSk7CgkJCQoJCQlpZigkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydsYWJlbCddID09IHVjd29yZHMoJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnbmFtZSddKSAKCQkJJiYgKCRibG9ja0lkID09IG1kNSgnY29udGVudF9lbicuJGopIAoJCQl8fCAkYmxvY2tJZCA9PSAnY29udGVudF9lbicgCgkJCXx8ICgkdGhpcy0+bWxlICYmICR0aGlzLT5ibG9ja0xhbmcgIT0gJycgCgkJCSYmICgkYmxvY2tJZCA9PSAnY29udGVudCcgLiAkdGhpcy0+YmxvY2tMYW5nIAoJCQl8fCAkYmxvY2tJZCA9PSBtZDUoJ2NvbnRlbnQnIC4gJHRoaXMtPmJsb2NrTGFuZy4kaikpKSkpCgkJCXsKCQkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2xhYmVsJ10gPSBsYW5nKCdjb250ZW50Jyk7CgkJCX0KCQkJCgkJCWlmKCR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ3RyYW5zbGF0ZV9sYWJlbHMnXSkKCQkJewoJCQkJJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnbGFiZWwnXSA9ICRBZHZhbmNlZENvbnRlbnQtPmxhbmcoJGJsb2NrSWQpOwoJCQl9CgkJCQoJCQkkYmxvY2tEaXNwbGF5ID0gJEFkdmFuY2VkQ29udGVudC0+R2V0SXRlbURpc3BsYXkoJ2Jsb2NrJywgJGJsb2NrSWQsICR0aGlzLT5tSWQsICR0aGlzLT5tVGVtcGxhdGVJZCwgISR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2NvbGxhcHNlJ10pOwoJCQkkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydkaXNwbGF5J10gPSAkYmxvY2tEaXNwbGF5OwoJCQkkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydwcmVmX3VybCddID0gc3RyX3JlcGxhY2UoJyZhbXA7JywnJicsCgkJCQkkQWR2YW5jZWRDb250ZW50LT5DcmVhdGVMaW5rKCdtMV8nLCAnc2F2ZVByZWZzJywgJycsICR0aGlzLT5sYW5nKCd0b2dnbGVfYmxvY2snKSwgCgkJCQkJYXJyYXkoJ2l0ZW1fdHlwZSc9PidibG9jaycsCgkJCQkJCSdkaXNhYmxlX3RoZW1lJz0+dHJ1ZSwgCgkJCQkJCSdhamF4Jz0+dHJ1ZSwgCgkJCQkJCSdjb250ZW50X2lkJz0+JHRoaXMtPm1JZCwKCQkJCQkJJ3RlbXBsYXRlX2lkJz0+JHRoaXMtPm1UZW1wbGF0ZUlkLAoJCQkJCQknaXRlbV9pZCc9PiRibG9ja0lkKSwgCgkJCQkJJycsIHRydWUpKTsKCQkJCgkJCWlmKCR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ211bHRpcGxlJ10gJiYgJEFkdmFuY2VkQ29udGVudC0+R2V0SXRlbURpc3BsYXkoJ21lc3NhZ2UnLCAkYmxvY2tJZCwgJHRoaXMtPm1JZCwgJHRoaXMtPm1UZW1wbGF0ZUlkKSkgCgkJCXsKCQkJCSRoaWRlTGluayA9IHN0cl9yZXBsYWNlKCcmYW1wOycsJyYnLAoJCQkJCSRBZHZhbmNlZENvbnRlbnQtPkNyZWF0ZUxpbmsoJ20xXycsICdzYXZlUHJlZnMnLCAnJywgJHRoaXMtPmxhbmcoJ3RvZ2dsZV9tZXNzYWdlJyksIAoJCQkJCQlhcnJheSgnaXRlbV90eXBlJz0+J21lc3NhZ2UnLAoJCQkJCQkJJ2Rpc2FibGVfdGhlbWUnPT50cnVlLCAKCQkJCQkJCSdhamF4Jz0+dHJ1ZSwgCgkJCQkJCQknY29udGVudF9pZCc9PiR0aGlzLT5tSWQsCgkJCQkJCQkndGVtcGxhdGVfaWQnPT4kdGhpcy0+bVRlbXBsYXRlSWQsCgkJCQkJCQknaXRlbV9pZCc9PiRibG9ja0lkLAoJCQkJCQkJJ2l0ZW1fZGlzcGxheSc9PjApLCAKCQkJCQkJJycsIGZhbHNlLCcnLCdvbmNsaWNrPSJqUXVlcnkuZ2V0KHRoaXMuaHJlZik7IGpRdWVyeSh0aGlzKS5wYXJlbnQoKS50b2dnbGUoXCdmYXN0XCcpOyByZXR1cm4gZmFsc2U7IicpKTsKCQkJCQkkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydkZXNjcmlwdGlvbiddID0gJzxwPicuJEFkdmFuY2VkQ29udGVudC0+bGFuZygnbm90aWNlX2R1cGxpY2F0ZWNvbnRlbnQnLCAkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWyduYW1lJ10pLicgKCcuICRoaWRlTGluayAuJyk8L3A+Jy4kdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydkZXNjcmlwdGlvbiddOwoJCQl9CgkJCQoJCQlpZigkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydibG9ja190eXBlJ10gIT0gJycgJiYgbWV0aG9kX2V4aXN0cygkdGhpcywnX2Rpc3BsYXlfJy4kdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydibG9ja190eXBlJ10uJ19ibG9jaycpKQoJCQl7CgkJCQkkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydpbnB1dCddID0gY2FsbF91c2VyX2Z1bmMoYXJyYXkoJHRoaXMsJ19kaXNwbGF5XycuJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnYmxvY2tfdHlwZSddLidfYmxvY2snKSwgJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXSwgJHZhbHVlLCAkYWRkaW5nKTsKCQkJfQoJCQkKCQkJaWYoJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnYmxvY2tfdGFiJ10gIT0gJycgfHwgJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnYmxvY2tfZ3JvdXAnXSAhPSAnJykgCgkJCXsKCQkJCXVuc2V0KCR0aGlzLT5fcGFnZVRhYnNbJHRhYl9pZF1bJ2NvbnRlbnRfYmxvY2tzJ11bJGJsb2NrSWRdKTsKCQkJfQoJCQlpZigkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydibG9ja190YWInXSAhPSAnJyAmJiAkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydibG9ja19ncm91cCddICE9ICcnKSAKCQkJewoJCQkJdW5zZXQoJHRoaXMtPl9wYWdlVGFic1skdGFiX2lkXVsnYmxvY2tfZ3JvdXBzJ11bJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnYmxvY2tfZ3JvdXAnXV0pOwoJCQl9CgkJfQoJCQoJCSRBZHZhbmNlZENvbnRlbnQtPnNtYXJ0eS0+YXNzaWduKCdtb2R1bGVfaWQnLCAnbTFfJyk7CgkJJEFkdmFuY2VkQ29udGVudC0+c21hcnR5LT5hc3NpZ25fYnlfcmVmKCdwYWdlX3RhYl9ucicsICR0YWIpOwoJCSRBZHZhbmNlZENvbnRlbnQtPnNtYXJ0eS0+YXNzaWduX2J5X3JlZigncGFnZV90YWJfaWQnLCAkdGFiX2lkKTsKCQkkQWR2YW5jZWRDb250ZW50LT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ3BhZ2VfdGFicycsICR0aGlzLT5fcGFnZVRhYnMpOwoJCSRBZHZhbmNlZENvbnRlbnQtPnNtYXJ0eS0+YXNzaWduX2J5X3JlZignYmxvY2tfdGFicycsICR0aGlzLT5fYmxvY2tUYWJzKTsKCQkkQWR2YW5jZWRDb250ZW50LT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ2Jsb2NrX2dyb3VwcycsICR0aGlzLT5fYmxvY2tHcm91cHMpOwoJCSRBZHZhbmNlZENvbnRlbnQtPnNtYXJ0eS0+YXNzaWduX2J5X3JlZignZGF0ZV9ibG9ja3MnLCAkdGhpcy0+X2RhdGVCbG9ja3MpOwoJCSRBZHZhbmNlZENvbnRlbnQtPnNtYXJ0eS0+YXNzaWduX2J5X3JlZignY29udGVudF9ibG9ja3MnLCAkdGhpcy0+X2NvbnRlbnRCbG9ja3MpOwoJCSRjb25maWcgPSBjbXNtcygpLT5HZXRDb25maWcoKTsKCQlpZigkY29uZmlnWydkZWJ1ZyddICYmICR0YWJfaWQgPT0gJ21haW4nKSAKCQl7CgkJCWRlYnVnX2J1ZmZlcigkdGhpcy0+X3RhYklkcywnQWR2YW5jZWRDb250ZW50IF90YWJJZHMnKTsKCQkJZGVidWdfYnVmZmVyKCR0aGlzLT5fcGFnZVRhYnMsJ0FkdmFuY2VkQ29udGVudCBfcGFnZVRhYnMnKTsKCQkJZGVidWdfYnVmZmVyKCR0aGlzLT5fYmxvY2tUYWJzLCdBZHZhbmNlZENvbnRlbnQgX2Jsb2NrVGFicycpOwoJCQlkZWJ1Z19idWZmZXIoJHRoaXMtPl9ibG9ja0dyb3VwcywnQWR2YW5jZWRDb250ZW50IF9ibG9ja0dyb3VwcycpOwoJCQlkZWJ1Z19idWZmZXIoJHRoaXMtPl9jb250ZW50QmxvY2tzLCdBZHZhbmNlZENvbnRlbnQgX2NvbnRlbnRCbG9ja3MnKTsKCQl9CgkJJHJldFtdID0gYXJyYXkoJycsICRBZHZhbmNlZENvbnRlbnQtPlByb2Nlc3NUZW1wbGF0ZSgnY29udGVudFR5cGUudHBsJykpOwoJCXJldHVybiAkcmV0OwoJfQoJCglwcml2YXRlIGZ1bmN0aW9uIF9kaXNwbGF5X3RleHRfYmxvY2soJGJsb2NrSW5mbywkdmFsdWUgPSAnJywkYWRkaW5nID0gZmFsc2UpCgl7CgkJJHVzZXd5c2l3eWcgPSAhJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJ2Rpc2FibGVfd3lzaXd5ZycpOwoJCWlmKCEkdXNld3lzaXd5ZykKCQl7CgkJCSRibG9ja0luZm9bJ3VzZXd5c2l3eWcnXSA9IGZhbHNlOwoJCX0KCQlpZiAoJGJsb2NrSW5mb1snb25lbGluZSddID09IGZhbHNlKSAKCQl7CgkJCXJldHVybiBjcmVhdGVfdGV4dGFyZWEoJGJsb2NrSW5mb1sndXNld3lzaXd5ZyddLCAkdmFsdWUsICRibG9ja0luZm9bJ2lkJ10sICcnLCAkYmxvY2tJbmZvWydpZCddLCAnJywgJHRoaXMtPl9zdHlsZXNoZWV0KTsKCQl9CgkJZWxzZSAKCQl7CgkJCXJldHVybiAnPGlucHV0IHR5cGU9InRleHQiJyAuICgkYmxvY2tJbmZvWydzdHlsZSddICE9ICcnPydzdHlsZT0iJyAuICRibG9ja0luZm9bJ3N0eWxlJ10gLiAnICInOicnKSAuICgkYmxvY2tJbmZvWydtYXhsZW5ndGgnXSAhPSAnJz8nIG1heGxlbmd0aD0iJyAuICRibG9ja0luZm9bJ21heGxlbmd0aCddIC4gJyAiJzonJykgLiAoJGJsb2NrSW5mb1snc2l6ZSddICE9ICcnPycgc2l6ZT0iJyAuICRibG9ja0luZm9bJ3NpemUnXSAuICcgIic6JycpIC4gJyBuYW1lPSInIC4gJGJsb2NrSW5mb1snaWQnXSAuICciIHZhbHVlPSInIC4gaHRtbHNwZWNpYWxjaGFycygkdmFsdWUpIC4gJyIgLz4nOwoJCX0KCX0KCQoJLyoKCSAqIHJldHVybiB0aGUgSFRNTCB0byBjcmVhdGUgYW4gaW1hZ2UgZHJvcGRvd24gaW4gdGhlIGFkbWluIGNvbnNvbGUuCgkgKiBkb2VzIG5vdCBpbmNsdWRlIGEgbGFiZWwuCgkgKiB0YWtlbiBmcm9tIGRlZmF1bHQgY29udGVudHR5cGUgKGF1dGhvcjogQ2FsZ3V5KQoJICovCglwcml2YXRlIGZ1bmN0aW9uIF9kaXNwbGF5X2ltYWdlX2Jsb2NrKCRibG9ja0luZm8sJHZhbHVlID0gJycsJGFkZGluZyA9IGZhbHNlKQoJewoJCSRjb25maWcgPSBjbXNtcygpLT5HZXRDb25maWcoKTsKCQkkZGlyICAgID0gY21zX2pvaW5fcGF0aCgkY29uZmlnWyd1cGxvYWRzX3BhdGgnXSwkYmxvY2tJbmZvWydkaXInXSk7CgkJJG9wdHByZWZpeCA9ICd1cGxvYWRzJzsKCQlpZiggIWVtcHR5KCRibG9ja0luZm9bJ2RpciddKSApCgkJewoJCQkkb3B0cHJlZml4IC49ICcvJy4kYmxvY2tJbmZvWydkaXInXTsKCQl9CgkJJGlucHV0bmFtZSA9ICRibG9ja0luZm9bJ2lkJ107CgkJaWYoIGlzc2V0KCRibG9ja0luZm9bJ2lucHV0bmFtZSddKSApCgkJewoJCQkkaW5wdXRuYW1lID0gJGJsb2NrSW5mb1snaW5wdXRuYW1lJ107CgkJfQoJCSRkcm9wZG93biA9IGNyZWF0ZV9maWxlX2Ryb3Bkb3duKCRpbnB1dG5hbWUsJGRpciwkdmFsdWUsJ2pwZyxqcGVnLHBuZyxnaWYnLAoJCQkkb3B0cHJlZml4LHRydWUpOwoJCWlmKCAkZHJvcGRvd24gPT09IGZhbHNlICkKCQl7CgkJCSRkcm9wZG93biA9IGxhbmcoJ2Vycm9yX3JldHJpZXZpbmdfZmlsZV9saXN0Jyk7CgkJfQoJCXJldHVybiAkZHJvcGRvd247Cgl9CgkKCXByaXZhdGUgZnVuY3Rpb24gX2Rpc3BsYXlfbW9kdWxlX2Jsb2NrKCRibG9ja0luZm8sJHZhbHVlID0gJycsJGFkZGluZyA9IGZhbHNlKQoJewoJCSRBZHZhbmNlZENvbnRlbnQgPSYgY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdBZHZhbmNlZENvbnRlbnQnKTsKCQlpZigkYmxvY2tJbmZvWydtb2R1bGUnXSA9PSAnJykgCgkJewoJCQlyZXR1cm4gJEFkdmFuY2VkQ29udGVudC0+bGFuZygnZXJyb3JfaW5zdWZmaWNpZW50X2Jsb2NrcGFyYW1zJywnbW9kdWxlJywkYmxvY2tJbmZvWyduYW1lJ10pOwoJCX0KCQlpZiggISRtb2R1bGUgPSYgJEFkdmFuY2VkQ29udGVudC0+R2V0TW9kdWxlSW5zdGFuY2UoJGJsb2NrSW5mb1snbW9kdWxlJ10pKSAKCQl7CgkJCXJldHVybiAkQWR2YW5jZWRDb250ZW50LT5sYW5nKCdlcnJvcl9sb2FkaW5nX21vZHVsZScsJGJsb2NrSW5mb1snbW9kdWxlJ10sJGJsb2NrSW5mb1snbmFtZSddKTsKCQl9CgkJaWYoICEkbW9kdWxlLT5IYXNDYXBhYmlsaXR5KCdjb250ZW50YmxvY2tzJykgKSAKCQl7IAoJCQlyZXR1cm4gJEFkdmFuY2VkQ29udGVudC0+bGFuZygnZXJyb3JfY29udGVudGJsb2NrX3N1cHBvcnQnLCRibG9ja0luZm9bJ21vZHVsZSddLCRibG9ja0luZm9bJ25hbWUnXSk7CgkJfQoJCQoJCXJldHVybiAkbW9kdWxlLT5HZXRDb250ZW50QmxvY2tJbnB1dCgkYmxvY2tJbmZvWydpZCddLCR2YWx1ZSwkYmxvY2tJbmZvWydwYXJhbXMnXSwkYWRkaW5nKTsKCX0KCQoJcHJpdmF0ZSBmdW5jdGlvbiBfZGlzcGxheV9kYXRlX2Jsb2NrKCRibG9ja0luZm8sJHZhbHVlID0gJycsJGFkZGluZyA9IGZhbHNlKQoJewoJCWlmKCEkdmFsdWUpCgkJewoJCQkkdmFsdWUgPSB0aW1lKCk7CgkJfQoJCQoJCSRkYXRlID0gc3RyZnRpbWUoJyV4JywgaW50dmFsKCR2YWx1ZSkpOwoJCSR0aW1lID0gJzA6MCc7CgkJaWYoJGJsb2NrSW5mb1snc2hvd19jbG9jayddKQoJCXsKCQkJJHRpbWUgPSBzdHJmdGltZSgnJUg6JU0nLCBpbnR2YWwoJHZhbHVlKSk7CgkJfQoJCQoJCSRfdG1wICAgICAgICA9ICR0aGlzLT5DbGVhbkFycmF5KGV4cGxvZGUoJzonLCR0aW1lKSk7CgkJJHRpbWVTZWNvbmRzID0gKCgkX3RtcFswXSAqIDM2MDApICsgKCRfdG1wWzFdICogNjApKTsKCQkkZGF0ZVNlY29uZHMgPSAkdmFsdWUgLSAkdGltZVNlY29uZHM7CgkJCgkJJGRhdGVJbnB1dCA9ICc8aW1nIGlkPSInLiRibG9ja0luZm9bJ2lkJ10uJ19BZHZhbmNlZENvbnRlbnREYXRlUGlja2VyVHJpZ2dlciIgc3JjPSIuLi9tb2R1bGVzL0FkdmFuY2VkQ29udGVudC9pbWFnZXMvY2FsZW5kYXIucG5nIiBjbGFzcz0iY2FsZW5kYXJUcmlnZ2VyIiAvPiZuYnNwOwoJCQk8c3BhbiBpZD0iJy4kYmxvY2tJbmZvWydpZCddLidfQWR2YW5jZWRDb250ZW50RGF0ZVBpY2tlckRpc3BsYXkiPicuJGRhdGUuJzwvc3Bhbj4KCQkJPGlucHV0IGlkPSInLiRibG9ja0luZm9bJ2lkJ10uJ19BZHZhbmNlZENvbnRlbnREYXRlIiB0eXBlPSJoaWRkZW4iIG5hbWU9IicuJGJsb2NrSW5mb1snaWQnXS4nX0FkdmFuY2VkQ29udGVudERhdGUiIHZhbHVlPSInLiRkYXRlU2Vjb25kcy4nIiAvPic7CgkJCQoJCSRzdWZmaXggICAgPSAnJzsKCQkkdGltZUlucHV0ID0gJyc7CgkJaWYoJGJsb2NrSW5mb1snc2hvd19jbG9jayddKSAKCQl7CgkJCSR0aW1lSW5wdXQgPSAnJm5ic3A7Jm5ic3A7LSZuYnNwOyZuYnNwOzxzZWxlY3QgbmFtZT0iJy4kYmxvY2tJbmZvWydpZCddLidfQWR2YW5jZWRDb250ZW50VGltZSI+JzsKCQkJJF9pICAgICAgICA9IDA7CgkJCWZvcigkaT0kYmxvY2tJbmZvWydzdGFydF9ob3VyJ107ICRpPD0kYmxvY2tJbmZvWydlbmRfaG91ciddOyAkaSArPSAkYmxvY2tJbmZvWydzdGVwX2hvdXJzJ10pIAoJCQl7CgkJCQlpZigkaTwxMiAmJiAhJGJsb2NrSW5mb1snc2hvdzI0aCddKQoJCQkJewoJCQkJCSRzdWZmaXggPSAnIGFtJzsKCQkJCX0KCQkJCWVsc2UgaWYoISRibG9ja0luZm9bJ3Nob3cyNGgnXSkKCQkJCXsKCQkJCQkkc3VmZml4ID0gJyBwbSc7CgkJCQl9CgkJCQlmb3IoJGo9JGJsb2NrSW5mb1snc3RhcnRfbWludXRlJ107ICRqPD0kYmxvY2tJbmZvWydlbmRfbWludXRlJ107ICRqICs9ICRibG9ja0luZm9bJ3N0ZXBfbWludXRlcyddKSAKCQkJCXsKCQkJCQkkdmFsdWUgPSAoJGkqMzYwMCkgKyAoJGoqNjApOwoJCQkJCWlmKCgkYmxvY2tJbmZvWydlbmRfaG91ciddIDwgMjMgJiYgJHZhbHVlIDw9ICgkYmxvY2tJbmZvWydlbmRfaG91ciddICogMzYwMCkpIHx8ICRibG9ja0luZm9bJ2VuZF9ob3VyJ10gPT0gMjMpCgkJCQkJewoJCQkJCQkkdGltZUlucHV0IC49ICc8b3B0aW9uIHZhbHVlPSInLiAkdmFsdWUgLiciJy4gKCR2YWx1ZSA9PSAkdGltZVNlY29uZHM/ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIic6JycpIC4nPicuICgkaTwxMD8nMCcuJGk6KCEkYmxvY2tJbmZvWydzaG93MjRoJ10gJiYgJGk+MTI/JGktMTI6JGkpKSAuJzonLiAoJGo8MTA/JzAnLiRqOiRqKSAuICRzdWZmaXggLiAnPC9vcHRpb24+JzsKCQkJCQl9CgkJCQl9CgkJCQkkaiA9ICRibG9ja0luZm9bJ3N0YXJ0X21pbnV0ZSddOwoJCQl9CgkJCSR0aW1lSW5wdXQgLj0gJzwvc2VsZWN0Pic7CgkJfQoJCQoJCXJldHVybiAkZGF0ZUlucHV0LiR0aW1lSW5wdXQ7Cgl9CgkKCXByaXZhdGUgZnVuY3Rpb24gX2Rpc3BsYXlfY2hlY2tib3hfYmxvY2soJGJsb2NrSW5mbywkdmFsdWUgPSAnJywkYWRkaW5nID0gZmFsc2UpCgl7CgkJcmV0dXJuICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSInIC4gJGJsb2NrSW5mb1snaWQnXSAuICciIHZhbHVlPSIwIiAvPgoJCQk8aW5wdXQgY2xhc3M9InBhZ2VjaGVja2JveCInIC4gKCRibG9ja0luZm9bJ3N0eWxlJ10gIT0gJyc/JyBzdHlsZT0iJyAuICRibG9ja0luZm9bJ3N0eWxlJ10gLiAnICInOicnKSAuICcgdHlwZT0iY2hlY2tib3giIHZhbHVlPSIxIiBuYW1lPSInIC4gJGJsb2NrSW5mb1snaWQnXSAuICciJyAuICgkdmFsdWUgPT0gMSA/ICcgY2hlY2tlZD0iY2hlY2tlZCInOicnKSAuICcgLz4nOwoJfQoJCglwcml2YXRlIGZ1bmN0aW9uIF9kaXNwbGF5X2Ryb3Bkb3duX2Jsb2NrKCRibG9ja0luZm8sJHZhbHVlID0gJycsJGFkZGluZyA9IGZhbHNlKQoJewoJCSRBZHZhbmNlZENvbnRlbnQgPSYgY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdBZHZhbmNlZENvbnRlbnQnKTsKCQkkaXRlbXMgPSBhcnJheSgpOwoJCWlmKCRibG9ja0luZm9bJ2l0ZW1zJ10gIT0gJycpIAoJCXsKCQkJZm9yZWFjaChleHBsb2RlKCRibG9ja0luZm9bJ2RlbGltaXRlciddLCAkYmxvY2tJbmZvWydpdGVtcyddKSBhcyAka2V5ID0+ICR2YWwpIAoJCQl7CgkJCQkkaXRlbXNbJGtleV1bJ2xhYmVsJ10gPSB0cmltKCR2YWwpOwoJCQkJaWYoJGJsb2NrSW5mb1sndHJhbnNsYXRlX2xhYmVscyddKQoJCQkJewoJCQkJCSRpdGVtc1ska2V5XVsnbGFiZWwnXSA9ICRBZHZhbmNlZENvbnRlbnQtPmxhbmcoJGl0ZW1zWyRrZXldWydsYWJlbCddKTsKCQkJCX0KCQkJCQoJCQkJJGl0ZW1zWyRrZXldWyd2YWx1ZSddICAgID0gJGl0ZW1zWyRrZXldWydsYWJlbCddOwoJCQkJJGl0ZW1zWyRrZXldWydzZWxlY3RlZCddID0gKCR2YWx1ZSA9PT0gJHZhbCk7CgkJCX0KCQl9CgkJaWYoJGJsb2NrSW5mb1sndmFsdWVzJ10gIT0gJycpIAoJCXsKCQkJZm9yZWFjaChleHBsb2RlKCRibG9ja0luZm9bJ2RlbGltaXRlciddLCAkYmxvY2tJbmZvWyd2YWx1ZXMnXSkgYXMgJGtleSA9PiAkdmFsKSAKCQkJewoJCQkJJGl0ZW1zWyRrZXldWyd2YWx1ZSddID0gdHJpbSgkdmFsKTsKCQkJCWlmKCRibG9ja0luZm9bJ3RyYW5zbGF0ZV92YWx1ZXMnXSkKCQkJCXsKCQkJCQkkaXRlbXNbJGtleV1bJ3ZhbHVlJ10gPSAkQWR2YW5jZWRDb250ZW50LT5sYW5nKCRpdGVtc1ska2V5XVsndmFsdWUnXSk7CgkJCQl9CgkJCQkKCQkJCSRpdGVtc1ska2V5XVsnc2VsZWN0ZWQnXSA9ICgkdmFsdWUgPT09ICRpdGVtc1ska2V5XVsndmFsdWUnXSk7CgkJCQkKCQkJCWlmKCFpc3NldCgkaXRlbXNbJGtleV1bJ2xhYmVsJ10pKQoJCQkJewoJCQkJCSRpdGVtc1ska2V5XVsnbGFiZWwnXSA9ICRpdGVtc1ska2V5XVsndmFsdWUnXTsKCQkJCX0KCQkJfQoJCX0KCQkKCQkkaW5wdXQgPSAnPHNlbGVjdCBuYW1lPSInIC4gJGJsb2NrSW5mb1snaWQnXSAuICciICcgLiAoJGJsb2NrSW5mb1snc3R5bGUnXSAhPSAnJz8nc3R5bGU9IicgLiAkYmxvY2tJbmZvWydzdHlsZSddIC4gJyAiJzonJykgLiAnID4nOwoJCWZvcmVhY2goJGl0ZW1zIGFzICRpdGVtKSAKCQl7CgkJCSRpbnB1dCAuPSAnPG9wdGlvbiB2YWx1ZT0iJyAuICRpdGVtWyd2YWx1ZSddIC4gJyInOwoJCQlpZigkaXRlbVsnc2VsZWN0ZWQnXSkKCQkJewoJCQkJJGlucHV0IC49ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIic7CgkJCX0KCQkJJGlucHV0IC49ICc+JyAuICRpdGVtWydsYWJlbCddIC4gJzwvb3B0aW9uPic7CgkJfQoJCSRpbnB1dCAuPSAnPC9zZWxlY3Q+JzsKCQlyZXR1cm4gJGlucHV0OwoJfQoJCglwcml2YXRlIGZ1bmN0aW9uIF9kaXNwbGF5X3NlbGVjdF9tdWx0aXBsZV9ibG9jaygkYmxvY2tJbmZvLCAkdmFsdWUgPSAnJywkYWRkaW5nID0gZmFsc2UpCgl7CgkJJEFkdmFuY2VkQ29udGVudCA9JiBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0FkdmFuY2VkQ29udGVudCcpOwoJCSRzZWxJdGVtcyA9IGFycmF5KCk7CgkJZm9yZWFjaChleHBsb2RlKCRibG9ja0luZm9bJ2RlbGltaXRlciddLCAkdmFsdWUpIGFzICRrZXkgPT4gJHZhbCkgCgkJewoJCQkkc2VsSXRlbXNbJGtleV0gPSB0cmltKCR2YWwpOwoJCX0KCQkkaXRlbXMgPSBhcnJheSgpOwoJCWlmKCRibG9ja0luZm9bJ2l0ZW1zJ10gIT0gJycpIAoJCXsKCQkJZm9yZWFjaChleHBsb2RlKCRibG9ja0luZm9bJ2RlbGltaXRlciddLCAkYmxvY2tJbmZvWydpdGVtcyddKSBhcyAka2V5ID0+ICR2YWwpIAoJCQl7CgkJCQkkaXRlbXNbJGtleV1bJ2xhYmVsJ10gICAgPSB0cmltKCR2YWwpOwoJCQkJaWYoJGJsb2NrSW5mb1sndHJhbnNsYXRlX2xhYmVscyddKQoJCQkJewoJCQkJCSRpdGVtc1ska2V5XVsnbGFiZWwnXSA9ICRBZHZhbmNlZENvbnRlbnQtPmxhbmcoJGl0ZW1zWyRrZXldWydsYWJlbCddKTsKCQkJCX0KCQkJCQoJCQkJJGl0ZW1zWyRrZXldWyd2YWx1ZSddICAgID0gJGl0ZW1zWyRrZXldWydsYWJlbCddOwoJCQkJJGl0ZW1zWyRrZXldWydzZWxlY3RlZCddID0gaW5fYXJyYXkoJGl0ZW1zWyRrZXldWydsYWJlbCddLCRzZWxJdGVtcyk7CgkJCX0KCQl9CgkJaWYoJGJsb2NrSW5mb1sndmFsdWVzJ10gIT0gJycpIAoJCXsKCQkJZm9yZWFjaChleHBsb2RlKCRibG9ja0luZm9bJ2RlbGltaXRlciddLCAkYmxvY2tJbmZvWyd2YWx1ZXMnXSkgYXMgJGtleSA9PiAkdmFsKSAKCQkJewoJCQkJJGl0ZW1zWyRrZXldWyd2YWx1ZSddICAgID0gdHJpbSgkdmFsKTsKCQkJCWlmKCRibG9ja0luZm9bJ3RyYW5zbGF0ZV92YWx1ZXMnXSkKCQkJCXsKCQkJCQkkaXRlbXNbJGtleV1bJ3ZhbHVlJ10gPSAkQWR2YW5jZWRDb250ZW50LT5sYW5nKCRpdGVtc1ska2V5XVsndmFsdWUnXSk7CgkJCQl9CgkJCQkKCQkJCSRpdGVtc1ska2V5XVsnc2VsZWN0ZWQnXSA9IGluX2FycmF5KCRpdGVtc1ska2V5XVsndmFsdWUnXSwkc2VsSXRlbXMpOwoJCQkJaWYoIWlzc2V0KCRpdGVtc1ska2V5XVsnbGFiZWwnXSkpCgkJCQl7CgkJCQkJJGl0ZW1zWyRrZXldWydsYWJlbCddID0gJGl0ZW1zWyRrZXldWyd2YWx1ZSddOwoJCQkJfQoJCQl9CgkJfQoJCQoJCSRpbnB1dCA9ICcKCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9IiIgbmFtZT0iJyAuICRibG9ja0luZm9bJ2lkJ10gLiAnIiAvPic7CgkJCgkJaWYoISRibG9ja0luZm9bJ3NvcnRhYmxlJ10pIAoJCXsKCQkJJHNpemUgPSBjb3VudCgkaXRlbXMpOwoJCQlpZihpc3NldCgkYmxvY2tJbmZvWydzaXplJ10pKQoJCQl7CgkJCQkkc2l6ZSA9ICRibG9ja0luZm9bJ3NpemUnXTsKCQkJfQoJCQkkaW5wdXQgLj0gJwoJCQkJPHNlbGVjdCBuYW1lPSInIC4gJGJsb2NrSW5mb1snaWQnXSAuICdbXSInIC4gKCRibG9ja0luZm9bJ3N0eWxlJ10gIT0gJyc/JyBzdHlsZT0iJyAuICRibG9ja0luZm9bJ3N0eWxlJ10gLiAnICInOicnKSAuICcgIG11bHRpcGxlPSJtdWx0aXBsZSIgc2l6ZT0iJy4kc2l6ZS4nIj4nOwoJCQlmb3JlYWNoKCRpdGVtcyBhcyAkaXRlbSkgCgkJCXsKCQkJCSRpbnB1dCAuPSAnPG9wdGlvbiB2YWx1ZT0iJyAuICRpdGVtWyd2YWx1ZSddIC4gJyInOwoJCQkJaWYoJGl0ZW1bJ3NlbGVjdGVkJ10pCgkJCQl7CgkJCQkJJGlucHV0IC49ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIic7CgkJCQl9CgkJCQkkaW5wdXQgLj0gJz4nIC4gJGl0ZW1bJ2xhYmVsJ10gLiAnPC9vcHRpb24+JzsKCQkJfQoJCQkkaW5wdXQgLj0gJzwvc2VsZWN0Pic7CgkJfQoJCWVsc2UgCgkJewoJCQkvLyBzb3J0IHRoZSBpdGVtcwoJCQkkX2l0ZW1zID0gYXJyYXkoKTsKCQkJZm9yZWFjaCgkc2VsSXRlbXMgYXMgJHNlbEtleSA9PiAkc2VsSXRlbSkgCgkJCXsKCQkJCXJlc2V0KCRpdGVtcyk7CgkJCQlmb3JlYWNoKCRpdGVtcyBhcyAkaXRlbUtleSA9PiAkaXRlbSkgCgkJCQl7CgkJCQkJaWYoJGl0ZW1bJ3ZhbHVlJ10gPT09ICRzZWxJdGVtKSAKCQkJCQl7CgkJCQkJCSRfaXRlbXNbXSA9ICRpdGVtOwoJCQkJCQl1bnNldCgkaXRlbXNbJGl0ZW1LZXldKTsKCQkJCQkJdW5zZXQoJHNlbEl0ZW1zWyRzZWxLZXldKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCQoJCQkkaXRlbXMgPSBhcnJheV9tZXJnZSgkX2l0ZW1zLCRpdGVtcyk7CgkJCSRpbnB1dCAuPSAnPGRpdiBjbGFzcz0ic29ydGFibGVfd3JhcHBlciI+JzsKCQkJZm9yZWFjaCgkaXRlbXMgYXMgJGl0ZW0pIAoJCQl7CgkJCQkkaW5wdXQgLj0gCgkJCQknPGRpdiBjbGFzcz0ic29ydGFibGUiPgoJCQkJCTxpbWcgY2xhc3M9InNvcnRhYmxlX2hhbmRsZXIiIHNyYz0iLi4vbW9kdWxlcy9BZHZhbmNlZENvbnRlbnQvaW1hZ2VzL3NvcnQucG5nIiAvPgoJCQkJCTxpbnB1dCBjbGFzcz0icGFnZWNoZWNrYm94IicgLiAoJGJsb2NrSW5mb1snc3R5bGUnXSAhPSAnJz8nIHN0eWxlPSInIC4gJGJsb2NrSW5mb1snc3R5bGUnXSAuICcgIic6JycpIC4gJyB0eXBlPSJjaGVja2JveCIgdmFsdWU9IicuJGl0ZW1bJ3ZhbHVlJ10uJyIgbmFtZT0iJyAuICRibG9ja0luZm9bJ2lkJ10gLiAnX0FkdmFuY2VkQ29udGVudFNvcnRhYmxlSXRlbV8nIC4gbXVuZ2Vfc3RyaW5nX3RvX3VybCgkaXRlbVsnbGFiZWwnXSkgLiAnIicgLiAoJGl0ZW1bJ3NlbGVjdGVkJ10/ICcgY2hlY2tlZD0iY2hlY2tlZCInOicnKSAuICcgLz4KCQkJCQknLiRpdGVtWydsYWJlbCddLicKCQkJCTwvZGl2Pic7CgkJCX0KCQkJJGlucHV0IC49ICc8L2Rpdj4nOwoJCX0KCQlyZXR1cm4gJGlucHV0OwoJfQoJCglwcml2YXRlIGZ1bmN0aW9uIF9kaXNwbGF5X211bHRpX2lucHV0X2Jsb2NrKCRibG9ja0luZm8sICR2YWx1ZSA9ICcnLCRhZGRpbmcgPSBmYWxzZSkKCXsKCQkkQWR2YW5jZWRDb250ZW50ID0mIGNtc191dGlsczo6Z2V0X21vZHVsZSgnQWR2YW5jZWRDb250ZW50Jyk7CgkJJGlucHV0X2lkcyAgICAgICA9ICR0aGlzLT5DbGVhbkFycmF5KGV4cGxvZGUoJywnLCRibG9ja0luZm9bJ2lucHV0cyddKSk7CgkJJGlucHV0X3ZhbHVlcyAgICA9IGFycmF5KCk7CgkJJG11bHRpX2lucHV0ICAgICA9ICc8aW5wdXQgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iIiBuYW1lPSInIC4gJGJsb2NrSW5mb1snaWQnXSAuICciIC8+JzsKCQlmb3JlYWNoKGV4cGxvZGUoJGJsb2NrSW5mb1snaW5wdXRfZGVsaW1pdGVyJ10sJHZhbHVlKSBhcyAkaW5wdXRfZGF0YSkKCQl7CgkJCSRpbnB1dF92YWx1ZXNbXSA9IGV4cGxvZGUoJGJsb2NrSW5mb1sndmFsdWVfZGVsaW1pdGVyJ10sJGlucHV0X2RhdGEpOwoJCX0KCQlmb3JlYWNoKCRpbnB1dF9pZHMgYXMgJGsxPT4kaW5wdXRfaWQpCgkJewoJCQlpZighaXNzZXQoJHRoaXMtPl9tdWx0aUlucHV0c1skaW5wdXRfaWRdKSkgCgkJCXsKCQkJCSR0aGlzLT5fbXVsdGlJbnB1dHMgPSBhcnJheV9tZXJnZSgkdGhpcy0+X211bHRpSW5wdXRzLCAkQWR2YW5jZWRDb250ZW50LT5HZXRNdWx0aUlucHV0RnVsbCgkaW5wdXRfaWRzKSk7CgkJCQlpZighaXNzZXQoJHRoaXMtPl9tdWx0aUlucHV0c1skaW5wdXRfaWRdKSkKCQkJCXsKCQkJCQljb250aW51ZTsKCQkJCX0KCQkJCSR0aGlzLT5fbXVsdGlJbnB1dHNbJGlucHV0X2lkXVsndGVtcGxhdGUnXSA9ICRBZHZhbmNlZENvbnRlbnQtPkdldFRlbXBsYXRlKCR0aGlzLT5fbXVsdGlJbnB1dHNbJGlucHV0X2lkXVsndHBsX25hbWUnXSk7CgkJCX0KCQkJCgkJCSRwYXR0ZXJuID0gJy97KChBZHZhbmNlZENvbnRlbnR8Y29udGVudChfaW1hZ2V8X21vZHVsZSk/KShbXn1dKikpfS9pJzsKCQkJJG1hdGNoZXMgPSBhcnJheSgpOwoJCQkvLyBnZXQgYWxsIHRoZSB0YWdzCgkJCSRyZXN1bHQgPSBwcmVnX21hdGNoX2FsbCgkcGF0dGVybiwgJHRoaXMtPl9tdWx0aUlucHV0c1skaW5wdXRfaWRdWydpbnB1dF9maWVsZHMnXSwgJG1hdGNoZXMpOwoJCQkKCQkJaWYgKCRyZXN1bHQgJiYgY291bnQoJG1hdGNoZXNbMV0pID4gMCkgCgkJCXsKCQkJCSRpbnB1dHMgPSBhcnJheSgpOwoJCQkJLy8gZm9yZWFjaCB0YWcKCQkJCWZvcmVhY2ggKCRtYXRjaGVzWzFdIGFzICRrMj0+JHdob2xldGFnKSAKCQkJCXsKCQkJCQkkaW5wdXRJbmZvID0gJHRoaXMtPl9nZXRfYmxvY2tfaW5mbygkd2hvbGV0YWcpOwoJCQkJCWlmKCRpbnB1dEluZm9bJ2Jsb2NrX3R5cGUnXSA9PSAnbXVsdGlfaW5wdXQnKQoJCQkJCXsKCQkJCQkJY29udGludWU7IC8vIFRvRG86IGRpc3BsYXkgbWVzc2FnZT8KCQkJCQl9CgkJCQkJJHRoaXMtPl9tdWx0aUlucHV0c1skaW5wdXRfaWRdWydlbGVtZW50cyddWyRpbnB1dEluZm9bJ2lkJ11dID0gJGlucHV0SW5mb1snaWQnXTsKCQkJCQkkaW5wdXRJbmZvWydpZCddID0gJ211bHRpSW5wdXQtJyAuICRibG9ja0luZm9bJ2lkJ10gLiAnLScgLiAkazEgLiAnLScgLiAkaW5wdXRJbmZvWydpZCddOwoJCQkJCSRpbnB1dHNbJGlucHV0SW5mb1snaWQnXV0gPSAkaW5wdXRJbmZvOwoJCQkJCWlmKG1ldGhvZF9leGlzdHMoJHRoaXMsJ19kaXNwbGF5XycuJGlucHV0SW5mb1snYmxvY2tfdHlwZSddLidfYmxvY2snKSkKCQkJCQl7CgkJCQkJCSRpbnB1dHNbJGlucHV0SW5mb1snaWQnXV1bJ2lucHV0J10gPSBjYWxsX3VzZXJfZnVuYyhhcnJheSgkdGhpcywgJ19kaXNwbGF5XycuJGlucHV0SW5mb1snYmxvY2tfdHlwZSddLidfYmxvY2snKSwgJGlucHV0SW5mbywgKGlzc2V0KCRpbnB1dF92YWx1ZXNbJGsxXVskazJdKSA/JGlucHV0X3ZhbHVlc1skazFdWyRrMl06JycpLCAkYWRkaW5nKTsKCQkJCQl9CgkJCQl9CgkJCQkkQWR2YW5jZWRDb250ZW50LT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ2lucHV0cycsICRpbnB1dHMpOwoJCQkJIyRtdWx0aV9pbnB1dCAuPSAkQWR2YW5jZWRDb250ZW50LT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YUJhc2UoJHRoaXMtPl9tdWx0aUlucHV0c1skaW5wdXRfaWRdWyd0cGxfbmFtZSddKTsKCQkJCSRtdWx0aV9pbnB1dCAuPSAkQWR2YW5jZWRDb250ZW50LT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YSgkdGhpcy0+X211bHRpSW5wdXRzWyRpbnB1dF9pZF1bJ3RlbXBsYXRlJ10pOwoJCQl9CgkJfQoJCXJldHVybiAkbXVsdGlfaW5wdXQ7Cgl9CgkKCXByaXZhdGUgZnVuY3Rpb24gX2Rpc3BsYXlfbXVsdGlfY29udGVudF9ibG9jaygkYmxvY2tJbmZvLCAkdmFsdWUgPSAnJywkYWRkaW5nID0gZmFsc2UpCgl7CgkJJEFkdmFuY2VkQ29udGVudCAgICAgID0mIGNtc191dGlsczo6Z2V0X21vZHVsZSgnQWR2YW5jZWRDb250ZW50Jyk7CgkJJG11bHRpX2NvbnRlbnRfYmxvY2tzID0gJHRoaXMtPkNsZWFuQXJyYXkoZXhwbG9kZSgnPCEtLSBtdWx0aV9jb250ZW50X2RlbGltaXRlciAtLT4nLCR2YWx1ZSkpOwoJCSRjb250ZW50QmxvY2tzICAgICAgICA9IGFycmF5KCk7CgkJZm9yZWFjaCgkbXVsdGlfY29udGVudF9ibG9ja3MgYXMgJHRhZykKCQl7CgkJCSRfYmxvY2tJbmZvID0gJHRoaXMtPl9nZXRfYmxvY2tfaW5mbygkdGFnKTsKCQkJIyBNTEUgc3VwcG9ydAoJCQkkX3ZhbHVlID0gJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJF9ibG9ja0luZm9bJ2lkJ10gLiAkdGhpcy0+YmxvY2tMYW5nKTsKCQkJaWYoJHRoaXMtPm1sZSAmJiAkX3ZhbHVlID09ICcnICYmICR0aGlzLT5kZWZhdWx0QmxvY2tMYW5nICE9ICcnICYmICR0aGlzLT5kZWZhdWx0QmxvY2tMYW5nICE9ICR0aGlzLT5ibG9ja0xhbmcpIAoJCQl7CgkJCQkkX3ZhbHVlID0gJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJF9ibG9ja0luZm9bJ2lkJ10gLiAkdGhpcy0+ZGVmYXVsdEJsb2NrTGFuZyk7CgkJCX0KCQkJIy0tLQoJCQkKCQkJaWYoKCRhZGRpbmcgJiYgJF92YWx1ZSA9PSAnJykgCgkJCXx8ICgkX3ZhbHVlID09ICcnICYmICEkX2Jsb2NrSW5mb1snYWxsb3dfbm9uZSddKSkgCgkJCXsKCQkJCSRfdmFsdWUgPSAkX2Jsb2NrSW5mb1snZGVmYXVsdF92YWx1ZSddOwoJCQl9CgkJCQoJCQkkX2Jsb2NrSW5mb1snY29udGVudCddICAgICAgICAgICAgPSBjbXNfaHRtbGVudGl0aWVzKCRfdmFsdWUsIEVOVF9OT1FVT1RFUywgZ2V0X2VuY29kaW5nKCcnKSk7CgkJCSRfYmxvY2tJbmZvWydpbnB1dCddICAgICAgICAgICAgICA9ICRBZHZhbmNlZENvbnRlbnQtPmxhbmcoJ2ludmFsaWRfYmxvY2t0eXBlJywkX2Jsb2NrSW5mb1snYmxvY2tfdHlwZSddLCRfYmxvY2tJbmZvWyduYW1lJ10pOwoJCQkkY29udGVudEJsb2Nrc1skX2Jsb2NrSW5mb1snaWQnXV0gPSAkX2Jsb2NrSW5mbzsKCQkJCgkJCSMkdGhpcy0+QWRkRXh0cmFQcm9wZXJ0eSgkYmxvY2tJbmZvWydpZCddKTsgLy8gPz8/CgkJCSMkdGhpcy0+U2V0UHJvcGVydHlWYWx1ZSgkYmxvY2tJbmZvWydpZCddLCAkX3ZhbHVlKTsgLy8gPz8/CgkJCQoJCQlpZihtZXRob2RfZXhpc3RzKCR0aGlzLCdfZGlzcGxheV8nLiRfYmxvY2tJbmZvWydibG9ja190eXBlJ10uJ19ibG9jaycpKQoJCQl7CgkJCQkvLyBnZXQgcHJvcCB2YWx1ZQoJCQkJJGNvbnRlbnRCbG9ja3NbJF9ibG9ja0luZm9bJ2lkJ11dWydpbnB1dCddID0gY2FsbF91c2VyX2Z1bmMoYXJyYXkoJHRoaXMsICdfZGlzcGxheV8nLiRfYmxvY2tJbmZvWydibG9ja190eXBlJ10uJ19ibG9jaycpLCAkX2Jsb2NrSW5mbywgJF92YWx1ZSwgJGFkZGluZyk7CgkJCX0KCQl9CgkJIyR0aGlzLT5tUHJvcGVydGllcy0+TG9hZCgkdGhpcy0+bUlkKTsgLy8gPz8/CgkJCgkJJEFkdmFuY2VkQ29udGVudC0+c21hcnR5LT5hc3NpZ25fYnlfcmVmKCdtdWx0aV9jb250ZW50X2Jsb2NrcycsICRjb250ZW50QmxvY2tzKTsKCQkkQWR2YW5jZWRDb250ZW50LT5zbWFydHktPmFzc2lnbignYWRkX2NvbnRlbnRfYmxvY2snLCAnPGEgaHJlZj0iIyIgb25jbGljaz0iQWR2YW5jZWRDb250ZW50LkFkZENvbnRlbnRCbG9jayhcJycuJGJsb2NrSW5mb1snaWQnXS4nXCcpOyByZXR1cm4gZmFsc2U7Ij4nLgoJCQkJY21zbXMoKS0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL25ld29iamVjdC5naWYnLCAnJywnJywnJywnc3lzdGVtaWNvbicpIC4gCgkJCQknJm5ic3A7JyAuICR0aGlzLT5sYW5nKCdhZGRfY29udGVudF9ibG9jaycpIC4gJzwvYT4nKTsKCQkKCQkkQWR2YW5jZWRDb250ZW50LT5zbWFydHktPmFzc2lnbigncmVtb3ZlX2NvbnRlbnRfYmxvY2snLCAnPGEgaHJlZj0iIyIgb25jbGljaz0iQWR2YW5jZWRDb250ZW50LlJlbW92ZUNvbnRlbnRCbG9jayhcJycuJGJsb2NrSW5mb1snaWQnXS4nXCcpOyByZXR1cm4gZmFsc2U7Ij4nLgoJCQkJY21zbXMoKS0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2RlbGV0ZS5naWYnLCAnJywnJywnJywnc3lzdGVtaWNvbicpIC4gCgkJCQknJm5ic3A7JyAuICR0aGlzLT5sYW5nKCdyZW1vdmVfY29udGVudF9ibG9jaycpIC4gJzwvYT4nKTsKCQkKCQlyZXR1cm4gJEFkdmFuY2VkQ29udGVudC0+UHJvY2Vzc1RlbXBsYXRlKCdtdWx0aUNvbnRlbnQudHBsJyk7Cgl9CgkKCWZ1bmN0aW9uIFZhbGlkYXRlRGF0YSgpIAoJewoJCSRlcnJvcnMgPSBwYXJlbnQ6OlZhbGlkYXRlRGF0YSgpOwoJCWlmKCAkZXJyb3JzID09PSBGQUxTRSApIAoJCXsKCQkJJGVycm9ycyA9IGFycmF5KCk7CgkJfQoJCQoJCWlmICgkdGhpcy0+bVRlbXBsYXRlSWQgPD0gMCApIAoJCXsKCQkJJGVycm9yc1tdID0gbGFuZygnbm9maWVsZGdpdmVuJywgYXJyYXkobGFuZygndGVtcGxhdGUnKSkpOwoJCQkkcmVzdWx0ICAgPSBmYWxzZTsKCQl9CgkJCgkJZm9yZWFjaCgkdGhpcy0+X2NvbnRlbnRCbG9ja3MgYXMgJGJsb2NrSW5mbykKCQl7CgkJCWlmKCRibG9ja0luZm9bJ3JlcXVpcmVkJ10gJiYgJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJGJsb2NrSW5mb1snaWQnXSkgPT0gJycpCgkJCXsKCQkJCSRlcnJvcnNbXSA9IGxhbmcoJ25vZmllbGRnaXZlbicsIGFycmF5KCRibG9ja0luZm9bJ25hbWUnXSkpOwoJCQkJJHJlc3VsdCAgID0gZmFsc2U7CgkJCX0KCQl9CgkJCgkJaWYgKGNoZWNrX3Blcm1pc3Npb24oZ2V0X3VzZXJpZCgpLCAnTWFuYWdlIEFkdmFuY2VkQ29udGVudCBPcHRpb25zJykgJiYgJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJ3VzZV9leHBpcmVfZGF0ZScpID09ICcxJyAmJiAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgnZW5kX2RhdGUnKSA8PSAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgnc3RhcnRfZGF0ZScpKSAKCQl7CgkJCSRBZHZhbmNlZENvbnRlbnQgPSYgY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdBZHZhbmNlZENvbnRlbnQnKTsKCQkJJGVycm9yc1tdID0gJEFkdmFuY2VkQ29udGVudC0+bGFuZygnZXJyb3JfZXhwaXJlZGF0ZScpOwoJCQkkcmVzdWx0ICAgPSBmYWxzZTsKCQl9CgkJcmV0dXJuIChjb3VudCgkZXJyb3JzKSA+IDA/JGVycm9yczpGQUxTRSk7Cgl9CgkKCWZ1bmN0aW9uIENvbnRlbnRQcmVSZW5kZXIoJHRwbFNvdXJjZSkgCgl7CgkJJHRoaXMtPnBhcnNlX2NvbnRlbnRfYmxvY2tzKCdDb250ZW50UHJlUmVuZGVyJyk7CgkJcmV0dXJuICR0cGxTb3VyY2U7Cgl9CgkKCWZ1bmN0aW9uIGRpc3BsYXlfc2luZ2xlX2VsZW1lbnQoJG9uZSwgJGFkZGluZykgCgl7CgkJc3dpdGNoKCRvbmUpIAoJCXsKCQkJY2FzZSAndGVtcGxhdGUnOgoJCQkJJHRlbXBsYXRlb3BzID0mIGNtc21zKCktPkdldFRlbXBsYXRlT3BlcmF0aW9ucygpOwoJCQkJcmV0dXJuIGFycmF5KGxhbmcoJ3RlbXBsYXRlJykgLiAnOicsICR0ZW1wbGF0ZW9wcy0+VGVtcGxhdGVEcm9wZG93bigndGVtcGxhdGVfaWQnLCAkdGhpcy0+bVRlbXBsYXRlSWQsICdvbmNoYW5nZT0iZG9jdW1lbnQuY29udGVudGZvcm0uc3VibWl0KCkiJykpOwoJCQkKCQkJY2FzZSAncGFnZW1ldGFkYXRhJzoKCQkJCXJldHVybiBhcnJheShsYW5nKCdwYWdlX21ldGFkYXRhJykgLiAnOicsIGNyZWF0ZV90ZXh0YXJlYShmYWxzZSwgJHRoaXMtPk1ldGFkYXRhKCksICdtZXRhZGF0YScsICdwYWdlc21hbGx0ZXh0YXJlYScsICdtZXRhZGF0YScsICcnLCAnJywgJzgwJywgJzYnKSk7CgkJCQoJCQljYXNlICdwYWdlZGF0YSc6CgkJCQlyZXR1cm4gYXJyYXkobGFuZygncGFnZWRhdGFfY29kZWJsb2NrJykgLiAnOicsIGNyZWF0ZV90ZXh0YXJlYShmYWxzZSwgJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJ3BhZ2VkYXRhJyksICdwYWdlZGF0YScsICdwYWdlc21hbGx0ZXh0YXJlYScsICdwYWdlZGF0YScsICcnLCAnJywgJzgwJywgJzYnKSk7CgkJCQoJCQljYXNlICdzZWFyY2hhYmxlJzoKCQkJCSRzZWFyY2hhYmxlID0gJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJ3NlYXJjaGFibGUnKTsKCQkJCWlmKCAkc2VhcmNoYWJsZSA9PSAnJyApIAoJCQkJewoJCQkJCSRzZWFyY2hhYmxlID0gMTsKCQkJCX0KCQkJCXJldHVybiBhcnJheShsYW5nKCdzZWFyY2hhYmxlJykgLiAnOicsCgkJCQkJJzxkaXYgY2xhc3M9ImhpZGRlbiIgPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNlYXJjaGFibGUiIHZhbHVlPSIwIiAvPjwvZGl2PgoJCQkJCTxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ic2VhcmNoYWJsZSIgdmFsdWU9IjEiICcgLiAoJHNlYXJjaGFibGUgPT0gMT8nY2hlY2tlZD0iY2hlY2tlZCInOicnKSAuICcgLz4nKTsKCQkJCgkJCWNhc2UgJ2Rpc2FibGVfd3lzaXd5Zyc6CgkJCQkkZGlzYWJsZVd5c2l3eWcgPSAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgnZGlzYWJsZV93eXNpd3lnJyk7CgkJCQlpZiggJGRpc2FibGVXeXNpd3lnID09ICcnICkgCgkJCQl7CgkJCQkJJGRpc2FibGVXeXNpd3lnID0gMDsKCQkJCX0KCQkJCXJldHVybiBhcnJheShsYW5nKCdkaXNhYmxlX3d5c2l3eWcnKSAuICc6JywKCQkJCQknPGRpdiBjbGFzcz0iaGlkZGVuIiA+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZGlzYWJsZV93eXNpd3lnIiB2YWx1ZT0iMCIgLz48L2Rpdj4KCQkJCQk8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImRpc2FibGVfd3lzaXd5ZyIgdmFsdWU9IjEiICAnIC4gKCRkaXNhYmxlV3lzaXd5ZyA9PSAxPydjaGVja2VkPSJjaGVja2VkIic6JycpIC4gJyBvbmNsaWNrPSJ0aGlzLmZvcm0uc3VibWl0KCkiIC8+Jyk7CgkJCQoJCQlkZWZhdWx0OgoJCQkJaWYoJG9uZSAhPSAnZmV1X2FjY2VzcycKCQkJCSYmICRvbmUgIT0gJ3JlZGlyZWN0X3BhZ2UnCgkJCQkmJiAkb25lICE9ICdyZWRpcmVjdF9wYXJhbXMnCgkJCQkmJiAkb25lICE9ICdldmFsdWF0ZV9zbWFydHknCgkJCQkmJiAkb25lICE9ICdmZXVfYWN0aW9uJwoJCQkJJiYgJG9uZSAhPSAnc3RhcnRfZGF0ZScKCQkJCSYmICRvbmUgIT0gJ2VuZF9kYXRlJwoJCQkJJiYgJG9uZSAhPSAndXNlX2V4cGlyZV9kYXRlJykKCQkJCXsKCQkJCQlyZXR1cm4gcGFyZW50OjpkaXNwbGF5X3NpbmdsZV9lbGVtZW50KCRvbmUsICRhZGRpbmcpOyAvLyBUb0RvOiBoZXJlIHdlIGNhbiBob29rIGluIHRvIGFkZCBNTEUgZmVhdHVyZXMgZm9yIHRpdGxlIGFuZCBtZW51dGV4dCBldGMuKQoJCQkJfQoJCQkJYnJlYWs7CgkJfQoJfQoKLyoqCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIEN1c3RvbSBmdW5jdGlvbnMKICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCgkvKioKCSAqIGZ1bmN0aW9uIERpc3BsYXlBZHZhbmNlZE9wdGlvbnMoJGFkZGluZykKCSAqIG5vdCBwYXJ0IG9mIHRoZSBtb2R1bGUgYXBpCgkgKiB0aGlzIGlzIGp1c3QgYSB3cmFwcGVyIHRvIHByb2Nlc3MgYSB0ZW1wbGF0ZSBmcm9tIGRhdGEKCSAqCgkgKiBAcGFyYW0gYm9vbGVhbiAkYWRkaW5nIC0gdHJ1ZSBpZiBwYWdlIGlzIGFkZGVkLCBmYWxzZSBpZiBlZGl0ZWQKCSAqCgkgKiBAcmV0dXJuIGFycmF5IC0gYXJyYXkoYXJyYXkocHJvbXB0LGltcHV0KSkKCSAqLwoJcHJpdmF0ZSBmdW5jdGlvbiBEaXNwbGF5QWR2YW5jZWRPcHRpb25zKCRhZGRpbmcpIAoJewoJCSRBZHZhbmNlZENvbnRlbnQgPSYgY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdBZHZhbmNlZENvbnRlbnQnKTsKCQkkcmV0ID0gYXJyYXkoKTsKCQlmb3JlYWNoKCAkdGhpcy0+X2F0dHJpYnV0ZXMgYXMgJG9uZUF0dHJpYiApIAoJCXsKCQkJc3dpdGNoKCRvbmVBdHRyaWJbMF0pIAoJCQl7CgkJCQljYXNlICdmZXVfYWNjZXNzJzoKCQkJCQlpZigkZmV1c2VycyA9JiBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0Zyb250RW5kVXNlcnMnKSkgCgkJCQkJewoJCQkJCQlpZigkYWRkaW5nKQoJCQkJCQl7CgkJCQkJCQlpZihzdHJwb3MoJEFkdmFuY2VkQ29udGVudC0+R2V0UHJlZmVyZW5jZSgnZmV1X2FjY2VzcycpLCcsJykgPT09IEZBTFNFKQoJCQkJCQkJewoJCQkJCQkJCSRzZWxlY3RlZEdyb3VwcyA9ICR0aGlzLT5DbGVhbkFycmF5KGV4cGxvZGUoJzsnLCRBZHZhbmNlZENvbnRlbnQtPkdldFByZWZlcmVuY2UoJ2ZldV9hY2Nlc3MnKSkpOwoJCQkJCQkJfQoJCQkJCQkJZWxzZQoJCQkJCQkJewoJCQkJCQkJCSRzZWxlY3RlZEdyb3VwcyA9ICR0aGlzLT5DbGVhbkFycmF5KGV4cGxvZGUoJywnLCRBZHZhbmNlZENvbnRlbnQtPkdldFByZWZlcmVuY2UoJ2ZldV9hY2Nlc3MnKSkpOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJaWYoc3RycG9zKCR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCdmZXVfYWNjZXNzJyksJywnKSA9PT0gRkFMU0UpCgkJCQkJCQl7CgkJCQkJCQkJJHNlbGVjdGVkR3JvdXBzID0gJHRoaXMtPkNsZWFuQXJyYXkoZXhwbG9kZSgnOycsICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCdmZXVfYWNjZXNzJykpKTsKCQkJCQkJCX0KCQkJCQkJCWVsc2UKCQkJCQkJCXsKCQkJCQkJCQkkc2VsZWN0ZWRHcm91cHMgPSAkdGhpcy0+Q2xlYW5BcnJheShleHBsb2RlKCcsJywgJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJ2ZldV9hY2Nlc3MnKSkpOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCQoJCQkJCQkkZmV1QWNjZXNzID0gYXJyYXkoJEFkdmFuY2VkQ29udGVudC0+bGFuZygnaW5oZXJpdF9mcm9tX3BhcmVudCcpPT4tMSk7CgkJCQkJCSRmZXVBY2Nlc3MgPSBhcnJheV9tZXJnZSgkZmV1QWNjZXNzLCRmZXVzZXJzLT5HZXRHcm91cExpc3QoKSk7CgkJCQkJCSRyZXRbXSA9IGFycmF5KCRBZHZhbmNlZENvbnRlbnQtPmxhbmcoJ2Zyb250ZW5kYWNjZXNzJykuJyA6ICcsIAoJCQkJCQkJJzxpbnB1dCB0eXBlPSJoaWRkZW4iIHZhbHVlPSIiIG5hbWU9ImZldV9hY2Nlc3MiIC8+Jy4KCQkJCQkJCSRBZHZhbmNlZENvbnRlbnQtPkNyZWF0ZUlucHV0U2VsZWN0TGlzdCgnJywnZmV1X2FjY2Vzc1tdJywkZmV1QWNjZXNzLCRzZWxlY3RlZEdyb3Vwcyxjb3VudCgkZmV1QWNjZXNzKSwnJywxKSk7CgkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJCgkJCQljYXNlICdyZWRpcmVjdF9wYWdlJzoKCQkJCQlpZigkZmV1c2VycyA9JiBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0Zyb250RW5kVXNlcnMnKSkgCgkJCQkJewoJCQkJCQlpZigkYWRkaW5nKQoJCQkJCQl7CgkJCQkJCQkkc2VsZWN0ZWRQYWdlID0gJEFkdmFuY2VkQ29udGVudC0+R2V0UHJlZmVyZW5jZSgncmVkaXJlY3RfcGFnZScsJycpOwoJCQkJCQl9CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJJHNlbGVjdGVkUGFnZSA9ICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCJyZWRpcmVjdF9wYWdlIik7CgkJCQkJCX0KCQkJCQkJCgkJCQkJCSRyZXRbXSA9IGFycmF5KCRBZHZhbmNlZENvbnRlbnQtPmxhbmcoJ3JlZGlyZWN0cGFnZScpLicgOiAnLCAKCQkJCQkJCSRBZHZhbmNlZENvbnRlbnQtPkNyZWF0ZVJlZGlyZWN0RHJvcGRvd24oJycsICdyZWRpcmVjdF9wYWdlJywkc2VsZWN0ZWRQYWdlLCAkdGhpcy0+bUlkKSk7CgkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJCgkJCQljYXNlICdyZWRpcmVjdF9wYXJhbXMnOgoJCQkJCWlmKCRmZXVzZXJzID0mIGNtc191dGlsczo6Z2V0X21vZHVsZSgnRnJvbnRFbmRVc2VycycpKSAKCQkJCQl7CgkJCQkJCWlmKCRhZGRpbmcpIAoJCQkJCQl7CgkJCQkJCQkkcmVkaXJlY3RQYXJhbXMgPSAkQWR2YW5jZWRDb250ZW50LT5HZXRQcmVmZXJlbmNlKCdyZWRpcmVjdF9wYXJhbXMnLCcnKTsKCQkJCQkJCSRldmFsdWF0ZVNtYXJ0eSA9ICRBZHZhbmNlZENvbnRlbnQtPkdldFByZWZlcmVuY2UoJ2V2YWx1YXRlX3NtYXJ0eScsJycpOwoJCQkJCQl9CgkJCQkJCWVsc2UgCgkJCQkJCXsKCQkJCQkJCSRyZWRpcmVjdFBhcmFtcyA9ICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCJyZWRpcmVjdF9wYXJhbXMiKTsKCQkJCQkJCSRldmFsdWF0ZVNtYXJ0eSA9ICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCJldmFsdWF0ZV9zbWFydHkiKTsKCQkJCQkJfQoJCQkJCQkJCgkJCQkJCSRyZXRbXSA9IGFycmF5KCRBZHZhbmNlZENvbnRlbnQtPmxhbmcoJ3JlZGlyZWN0cGFyYW1zJykuJyA6ICcsIAoJCQkJCQkJJzxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSIzMiIgbWF4bGVuZ3RoPSIxMjgiIG5hbWU9InJlZGlyZWN0X3BhcmFtcyIgdmFsdWU9IicuJHJlZGlyZWN0UGFyYW1zLiciIC8+Jm5ic3A7PGVtPihwYXJhbTE9dmFsdWUxIHBhcmFtMj12YWx1ZTIgLi4uKTwvZW0+PGJyIC8+CgkJCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJldmFsdWF0ZV9zbWFydHkiIHZhbHVlPSIwIiAvPicuCgkJCQkJCQkkQWR2YW5jZWRDb250ZW50LT5sYW5nKCdldmFsdWF0ZXNtYXJ0eScpIC4gJzombmJzcDsnLgoJCQkJCQkJJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iZXZhbHVhdGVfc21hcnR5IiB2YWx1ZT0iMSIgICcgLiAoJGV2YWx1YXRlU21hcnR5ID09IDE/J2NoZWNrZWQ9ImNoZWNrZWQiJzonJykgLiAnIC8+Jyk7CgkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJCgkJCQljYXNlICdmZXVfYWN0aW9uJzoKCQkJCQlpZigkZmV1c2VycyA9JiBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0Zyb250RW5kVXNlcnMnKSkgCgkJCQkJewoJCQkJCQlpZigkYWRkaW5nKQoJCQkJCQl7CgkJCQkJCQkkZmV1QWN0aW9uID0gJEFkdmFuY2VkQ29udGVudC0+R2V0UHJlZmVyZW5jZSgnZmV1X2FjdGlvbicsJycpOwoJCQkJCQl9CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJJGZldUFjdGlvbiA9ICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCdmZXVfYWN0aW9uJyk7CgkJCQkJCX0KCQkJCQkJJHJldFtdID0gYXJyYXkoJEFkdmFuY2VkQ29udGVudC0+bGFuZygnc2hvd2xvZ2luZm9ybScpLicgOiAnLCAKCQkJCQkJCSRBZHZhbmNlZENvbnRlbnQtPkNyZWF0ZUlucHV0RHJvcGRvd24oJycsJ2ZldV9hY3Rpb24nLAoJCQkJCQkJCWFycmF5KCRBZHZhbmNlZENvbnRlbnQtPmxhbmcoJ25vJyk9PicnLAoJCQkJCQkJCQkkQWR2YW5jZWRDb250ZW50LT5sYW5nKCdpbmhlcml0X2Zyb21fcGFyZW50Jyk9Pi0xLAoJCQkJCQkJCQkkQWR2YW5jZWRDb250ZW50LT5sYW5nKCd5ZXMnKT0+MSkKCQkJCQkJCQksMCwkZmV1QWN0aW9uKSk7CgkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJCgkJCQljYXNlICdzdGFydF9kYXRlJzoKCQkJCQkkc3RhcnREYXRlID0gJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJ3N0YXJ0X2RhdGUnKTsKCQkJCQlpZighJHN0YXJ0RGF0ZSkKCQkJCQl7CgkJCQkJCSRzdGFydERhdGUgPSB0aW1lKCk7CgkJCQkJfQoJCQkJCQoJCQkJCSRkYXRlICAgICAgICA9IHN0cmZ0aW1lKCcleCcsIGludHZhbCgkc3RhcnREYXRlKSk7CgkJCQkJJHRpbWUgICAgICAgID0gc3RyZnRpbWUoJyVIOiVNJywgaW50dmFsKCRzdGFydERhdGUpKTsKCQkJCQkKCQkJCQkkX3RtcCAgICAgICAgPSAkdGhpcy0+Q2xlYW5BcnJheShleHBsb2RlKCc6JywkdGltZSkpOwoJCQkJCSR0aW1lU2Vjb25kcyA9ICgoJF90bXBbMF0gKiAzNjAwKSArICgkX3RtcFsxXSAqIDYwKSk7CgkJCQkJJGRhdGVTZWNvbmRzID0gJHN0YXJ0RGF0ZSAtICR0aW1lU2Vjb25kczsKCQkJCQkKCQkJCQkkc3RhcnREYXRlSW5wdXQgPSAnCgkJCQkJCTxpbWcgaWQ9IkFkdmFuY2VkQ29udGVudFN0YXJ0RGF0ZVBpY2tlclRyaWdnZXIiIHNyYz0iLi4vbW9kdWxlcy9BZHZhbmNlZENvbnRlbnQvaW1hZ2VzL2NhbGVuZGFyLnBuZyIgY2xhc3M9ImNhbGVuZGFyVHJpZ2dlciIgLz4mbmJzcDsKCQkJCQkJPHNwYW4gaWQ9IkFkdmFuY2VkQ29udGVudFN0YXJ0RGF0ZVBpY2tlckRpc3BsYXkiPicuJGRhdGUuJzwvc3Bhbj4mbmJzcDsmbmJzcDstJm5ic3A7Jm5ic3A7CgkJCQkJCTxpbnB1dCBpZD0iQWR2YW5jZWRDb250ZW50U3RhcnREYXRlIiB0eXBlPSJoaWRkZW4iIG5hbWU9IkFkdmFuY2VkQ29udGVudFN0YXJ0RGF0ZSIgdmFsdWU9IicuJGRhdGVTZWNvbmRzLiciIC8+CgkJCQkJCTxzZWxlY3QgbmFtZT0iQWR2YW5jZWRDb250ZW50U3RhcnRUaW1lIj4nOwoJCQkJCQkKCQkJCQlmb3IoJGk9MDsgJGk8PTIzOyAkaSsrKSAKCQkJCQl7CgkJCQkJCWZvcigkaj0wOyAkajw9NTk7ICRqKyspIAoJCQkJCQl7CgkJCQkJCQkkdmFsdWUgPSAoJGkqMzYwMCkgKyAoJGoqNjApOwoJCQkJCQkJJHN0YXJ0RGF0ZUlucHV0IC49ICc8b3B0aW9uIHZhbHVlPSInLiAkdmFsdWUgLiciJy4gKCR2YWx1ZSA9PSAkdGltZVNlY29uZHM/ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIic6JycpIC4nPicuICgkaTwxMD8nMCcuJGk6JGkpIC4nOicuICgkajwxMD8nMCcuJGo6JGopIC4nPC9vcHRpb24+JzsKCQkJCQkJfQoJCQkJCQkkaiA9IDA7CgkJCQkJfQoJCQkJCSRzdGFydERhdGVJbnB1dCAuPSAnPC9zZWxlY3Q+JzsKCQkJCQkkcmV0W10gPSBhcnJheSgkQWR2YW5jZWRDb250ZW50LT5sYW5nKCdzdGFydGRhdGUnKS4nIDogJywgJHN0YXJ0RGF0ZUlucHV0KTsKCQkJCQlicmVhazsKCQkJCQoJCQkJY2FzZSAnZW5kX2RhdGUnOgoJCQkJCSRlbmREYXRlID0gJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJ2VuZF9kYXRlJyk7CgkJCQkJaWYoISRlbmREYXRlKQoJCQkJCXsKCQkJCQkJJGVuZERhdGUgPSB0aW1lKCk7CgkJCQkJfQoJCQkJCQoJCQkJCSRkYXRlICAgICAgICA9IHN0cmZ0aW1lKCcleCcsIGludHZhbCgkZW5kRGF0ZSkpOwoJCQkJCSR0aW1lICAgICAgICA9IHN0cmZ0aW1lKCclSDolTScsIGludHZhbCgkZW5kRGF0ZSkpOwoJCQkJCQoJCQkJCSRfdG1wICAgICAgICA9ICR0aGlzLT5DbGVhbkFycmF5KGV4cGxvZGUoJzonLCR0aW1lKSk7CgkJCQkJJHRpbWVTZWNvbmRzID0gKCgkX3RtcFswXSAqIDM2MDApICsgKCRfdG1wWzFdICogNjApKTsKCQkJCQkkZGF0ZVNlY29uZHMgPSAkZW5kRGF0ZSAtICR0aW1lU2Vjb25kczsKCQkJCQkKCQkJCQkkZW5kRGF0ZUlucHV0ID0gJwoJCQkJCQk8aW1nIGlkPSJBZHZhbmNlZENvbnRlbnRFbmREYXRlUGlja2VyVHJpZ2dlciIgc3JjPSIuLi9tb2R1bGVzL0FkdmFuY2VkQ29udGVudC9pbWFnZXMvY2FsZW5kYXIucG5nIiBjbGFzcz0iY2FsZW5kYXJUcmlnZ2VyIiAvPiZuYnNwOwoJCQkJCQk8c3BhbiBpZD0iQWR2YW5jZWRDb250ZW50RW5kRGF0ZVBpY2tlckRpc3BsYXkiPicuJGRhdGUuJzwvc3Bhbj4mbmJzcDsmbmJzcDstJm5ic3A7Jm5ic3A7CgkJCQkJCTxpbnB1dCBpZD0iQWR2YW5jZWRDb250ZW50RW5kRGF0ZSIgdHlwZT0iaGlkZGVuIiBuYW1lPSJBZHZhbmNlZENvbnRlbnRFbmREYXRlIiB2YWx1ZT0iJy4kZGF0ZVNlY29uZHMuJyIgLz4KCQkJCQkJPHNlbGVjdCBuYW1lPSJBZHZhbmNlZENvbnRlbnRFbmRUaW1lIj4nOwoJCQkJCQkKCQkJCQlmb3IoJGk9MDsgJGk8PTIzOyAkaSsrKSAKCQkJCQl7CgkJCQkJCWZvcigkaj0wOyAkajw9NTk7ICRqKyspIAoJCQkJCQl7CgkJCQkJCQkkdmFsdWUgPSAoJGkqMzYwMCkgKyAoJGoqNjApOwoJCQkJCQkJJGVuZERhdGVJbnB1dCAuPSAnPG9wdGlvbiB2YWx1ZT0iJy4gJHZhbHVlIC4nIicuICgkdmFsdWUgPT0gJHRpbWVTZWNvbmRzPyAnIHNlbGVjdGVkPSJzZWxlY3RlZCInOicnKSAuJz4nLiAoJGk8MTA/JzAnLiRpOiRpKSAuJzonLiAoJGo8MTA/JzAnLiRqOiRqKSAuJzwvb3B0aW9uPic7CgkJCQkJCX0KCQkJCQkJJGogPSAwOwoJCQkJCX0KCQkJCQkkZW5kRGF0ZUlucHV0IC49ICc8L3NlbGVjdD4nOwoJCQkJCSRyZXRbXSA9IGFycmF5KCRBZHZhbmNlZENvbnRlbnQtPmxhbmcoJ2VuZGRhdGUnKS4nIDogJywgJGVuZERhdGVJbnB1dCk7CgkJCQkJYnJlYWs7CgkJCQkKCQkJCWNhc2UgJ3VzZV9leHBpcmVfZGF0ZSc6CgkJCQkJJHVzZUV4cCA9ICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCd1c2VfZXhwaXJlX2RhdGUnKTsKCQkJCQlpZiggJHVzZUV4cCA9PSAnJyApIAoJCQkJCXsKCQkJCQkJJHVzZUV4cCA9IDA7CgkJCQkJfQoJCQkJCSRyZXRbXSA9IGFycmF5KCRBZHZhbmNlZENvbnRlbnQtPmxhbmcoJ3VzZWV4cGlyZWRhdGUnKSAuICc6JywKCQkJCQkJJzxkaXYgY2xhc3M9ImhpZGRlbiIgPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InVzZV9leHBpcmVfZGF0ZSIgdmFsdWU9IjAiIC8+PC9kaXY+CgkJCQkJCTxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0idXNlX2V4cGlyZV9kYXRlIiB2YWx1ZT0iMSIgICcgLiAoJHVzZUV4cCA9PSAxPydjaGVja2VkPSJjaGVja2VkIic6JycpIC4gJyAvPicpOwoJCQkJCWJyZWFrOwoJCQkJCgkJCQlkZWZhdWx0OmJyZWFrOwoJCQl9CgkJfQoJCXJldHVybiAkcmV0OwoJfQoJCgkKCS8qKgoJICogZnVuY3Rpb24gRG9TbWFydHkoJGRhdGEpCgkgKiBub3QgcGFydCBvZiB0aGUgbW9kdWxlIGFwaQoJICogdGhpcyBpcyBqdXN0IGEgd3JhcHBlciB0byBwcm9jZXNzIGEgdGVtcGxhdGUgZnJvbSBkYXRhCgkgKgoJICogQHBhcmFtIHN0cmluZyAkZGF0YSAtIFRoZSB0ZW1wbGF0ZSBjb250ZW50IHRvIHByb2Nlc3MKCSAqCgkgKiBAcmV0dXJuIHN0cmluZyAtIFRoZSBwcm9jZXNzZWQgdGVtcGxhdGUgZGF0YQoJICovCglmdW5jdGlvbiBEb1NtYXJ0eSgkZGF0YSkgCgl7CgkJaWYoIWlzX2FycmF5KCRkYXRhKSAmJiAhaXNfb2JqZWN0KCRkYXRhKSAmJiBwcmVnX21hdGNoX2FsbCgnLzo6OihbXjpdKyk6OjovJywgJGRhdGEsICRtYXRjaGVzKSkgCgkJewoJCQkkQWR2YW5jZWRDb250ZW50ID0mIGNtc191dGlsczo6Z2V0X21vZHVsZSgnQWR2YW5jZWRDb250ZW50Jyk7CgkJCSRBZHZhbmNlZENvbnRlbnQtPnNtYXJ0eS0+YXNzaWduX2J5X3JlZignY29udGVudF9vYmonLCAkdGhpcyk7CgkJCSRBZHZhbmNlZENvbnRlbnQtPnNtYXJ0eS0+YXNzaWduX2J5X3JlZignY29udGVudF9pZCcsICR0aGlzLT5tSWQpOwoJCQkkQWR2YW5jZWRDb250ZW50LT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ2NvbnRlbnRfYWxpYXMnLCAkdGhpcy0+bUFsaWFzKTsKCQkJJEFkdmFuY2VkQ29udGVudC0+c21hcnR5LT5hc3NpZ25fYnlfcmVmKCdwYWdlJywgJHRoaXMtPm1BbGlhcyk7CgkJCSRBZHZhbmNlZENvbnRlbnQtPnNtYXJ0eS0+YXNzaWduX2J5X3JlZigncGFnZV9pZCcsICR0aGlzLT5tQWxpYXMpOwoJCQkkQWR2YW5jZWRDb250ZW50LT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ3BhZ2VfYWxpYXMnLCAkdGhpcy0+bUFsaWFzKTsKCQkJJEFkdmFuY2VkQ29udGVudC0+c21hcnR5LT5hc3NpZ25fYnlfcmVmKCdwYWdlX25hbWUnLCAkdGhpcy0+bUFsaWFzKTsKCQkJJEFkdmFuY2VkQ29udGVudC0+c21hcnR5LT5hc3NpZ25fYnlfcmVmKCdwb3NpdGlvbicsICR0aGlzLT5tSGllcmFyY2h5KTsKCQkJJEFkdmFuY2VkQ29udGVudC0+c21hcnR5LT5hc3NpZ24oJ2ZyaWVuZGx5X3Bvc2l0aW9uJywgY21zbXMoKS0+R2V0Q29udGVudE9wZXJhdGlvbnMoKS0+Q3JlYXRlRnJpZW5kbHlIaWVyYXJjaHlQb3NpdGlvbigkdGhpcy0+bUhpZXJhcmNoeSkpOwoJCQkkZGF0YSA9ICRBZHZhbmNlZENvbnRlbnQtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhKHByZWdfcmVwbGFjZSgnLzo6OihbXjpdKyk6OjovJywgJ3skMX0nLCAkZGF0YSkpOwoJCX0KCQlyZXR1cm4gJGRhdGE7Cgl9CgkKCQoJLyoqCgkgKiBmdW5jdGlvbiBJbmhlcml0UGFyZW50UHJvcCgkcGFyZW50SWQsICRwcm9wTmFtZSwgJGN1cnJlbnRQcm9wKQoJICogbm90IHBhcnQgb2YgdGhlIG1vZHVsZSBhcGkKCSAqIGluaGVyaXRzIGEgcHJvcGVydHkgb2YgYSBwYXJlbnQgcGFnZTsKCSAqIGlmIHBhcmVudCBwYWdlIGhhcyBhbHNvIHNlbGVjdGVkIGluaGVyaXRhbmNlIGZvciB0aGF0IHByb3BlcnR5IC0+IGRvIHJlY3Vyc2lvbgoJICoKCSAqIEBwYXJhbSBpbnQgJHBhcmVudElkIC0gVGhlIGlkIG9mIHRoZSBwYXJlbnQgcGFnZQoJICogQHBhcmFtIHN0cmluZyAkcHJvcE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gaW5oZXJpdAoJICogQHBhcmFtIGFycmF5ICRjdXJyZW50UHJvcCAob3B0aW9uYWwpIC0gSWYgcHJvcCBpcyBhbiBhcnJheSB0aGlzIHdpbGwgYmUgdGhlIGl0ZW1zIG9mIHRoZSBjdXJyZW50IHBhZ2U7IFNvIHJldHVybiBhcnJheSB3aWxsIGNvbnRhaW4gYWxsIGl0ZW1zIG9mIHRoZSBjdXJyZW50IHBhZ2UgYW5kIHBhcmVudCBwYWdlczsgb3RoZXJ3aXNlIG9ubHkgdGhlIHBhcmVudHMgaXRlbXMgd2lsbCBiZSByZXR1cm5lZAoJICoKCSAqIEByZXR1cm4gYXJyYXl8c3RyaW5nIC0gVGhlIHByb3Agb2YgdGhlIGxhc3QgZm91bmQgcGFyZW50IHRoYXQgaGFzIG5vIGluaGVyaXRhbmNlIG9yIGFuIGFycmF5IG9mIGl0ZW1zIG9mIGFsbCBwYXJlbnRzIHRoYXQgaGF2ZSBpbmhlcml0YW5jZQoJICovCglmdW5jdGlvbiBJbmhlcml0UGFyZW50UHJvcCgkcGFyZW50SWQsICRwcm9wTmFtZSwgJGN1cnJlbnRQcm9wID0gYXJyYXkoKSkgCgl7CgkJaWYoJHByb3BOYW1lID09ICdmZXVfYWNjZXNzJykgCgkJewoJCQkkcHJvcCA9IGFycmF5KCk7CgkJCWZvcmVhY2goJGN1cnJlbnRQcm9wIGFzICRrPT4kdikgCgkJCXsKCQkJCWlmKCR2ICE9ICctMScpCgkJCQl7CgkJCQkJJHByb3BbXSA9ICR2OwoJCQkJfQoJCQl9CgkJfQoJCWVsc2UKCQl7CgkJCSRwcm9wID0gJyc7CgkJfQoJCQoJCXdoaWxlKCAkcGFyZW50SWQgPiAwICkgCgkJewoJCQkkY29udGVudCA9ICR0aGlzLT5HZXRDb250ZW50UHJvcCgkcGFyZW50SWQsICRwcm9wTmFtZSwgJ2NvbnRlbnQyJyk7CgkJCWlmKCEkY29udGVudCkKCQkJewoJCQkJcmV0dXJuICRwcm9wOwoJCQl9CgkJCSRwYXJlbnRJZCAgPSAkY29udGVudFsncGFyZW50X2lkJ107CgkJCSRwcm9wVmFsdWUgPSAkY29udGVudFsncHJvcF92YWx1ZSddOwoJCQlpZigkcHJvcE5hbWUgPT0gJ2ZldV9hY2Nlc3MnKSAKCQkJewoJCQkJaWYoc3RycG9zKCRwcm9wVmFsdWUsJywnKSA9PT0gRkFMU0UpCgkJCQl7CgkJCQkJJF9wcm9wID0gJHRoaXMtPkNsZWFuQXJyYXkoZXhwbG9kZSgiOyIsICRwcm9wVmFsdWUpKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkX3Byb3AgPSAkdGhpcy0+Q2xlYW5BcnJheShleHBsb2RlKCIsIiwgJHByb3BWYWx1ZSkpOwoJCQkJfQoJCQkJZm9yZWFjaCgkX3Byb3AgYXMgJF9wKSAKCQkJCXsKCQkJCQlpZighaW5fYXJyYXkoJF9wLCAkcHJvcCkgJiYgJF9wICE9ICctMScgJiYgJF9wICE9ICcnKSAKCQkJCQl7CgkJCQkJCSRwcm9wW10gPSAkX3A7CgkJCQkJfQoJCQkJfQoJCQkJaWYoIWluX2FycmF5KCctMScsICRfcHJvcCkgfHwgKCRwYXJlbnRJZCA8PSAwICYmIGluX2FycmF5KCctMScsICRfcHJvcCkpKQoJCQkJewoJCQkJCXJldHVybiAkcHJvcDsKCQkJCX0KCQkJfQoJCQllbHNlIAoJCQl7CgkJCQlpZigkcGFyZW50SWQgPD0gMCAmJiAkcHJvcFZhbHVlID09ICctMScpIAoJCQkJewoJCQkJCXJldHVybjsKCQkJCX0KCQkJCWVsc2UgaWYoJHByb3BlcnR5VmFsdWUgIT0gJy0xJykgCgkJCQl7CgkJCQkJcmV0dXJuICRwcm9wVmFsdWU7CgkJCQl9CgkJCX0KCQl9Cgl9CgkKCQoJLyoqCgkgKiBmdW5jdGlvbiBHZXRDb250ZW50UHJvcCgkY29udGVudElkLCAkcHJvcE5hbWUsICRjb250ZW50VHlwZSkKCSAqIG5vdCBwYXJ0IG9mIHRoZSBtb2R1bGUgYXBpCgkgKiBnZXRzIGEgcHJvcGVydHkgb2YgYSBjb250ZW50IHBhZ2UKCSAqCgkgKiBAcGFyYW0gaW50ICRjb250ZW50SWQgLSBUaGUgaWQgb2YgdGhlIGNvbnRlbnQgdG8gZ2V0IHRoZSBwcm9wZXJ0eSBmcm9tCgkgKiBAcGFyYW0gc3RyaW5nICRwcm9wTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQgdGhlIHZhbHVlIGZyb20KCSAqIEBwYXJhbSBzdHJpbmcgJGNvbnRlbnRUeXBlIChvcHRpb25hbCkgLSBUaGUgdHlwZSBvZiB0aGUgY29udGVudAoJICoKCSAqIEByZXR1cm4gbWl4ZWQgLSBGYWxzZSBpZiBub3QgZXhpc3RzIG9yIGFycmF5KCdwYXJlbnRfaWQnLCdwcm9wX3ZhbHVlJykKCSAqCgkgKi8KCWZ1bmN0aW9uIEdldENvbnRlbnRQcm9wKCRjb250ZW50SWQsICRwcm9wTmFtZSwgJGNvbnRlbnRUeXBlID0gJycpIAoJewoJCSRkYiA9JiBjbXNtcygpLT5HZXREYigpOwoJCSRxdWVyeSA9ICJTRUxFQ1QgQ1AuY29udGVudCwgQy5wYXJlbnRfaWQsIEMuY29udGVudF9hbGlhcyBGUk9NICIgLiBjbXNfZGJfcHJlZml4KCkgLiAiY29udGVudF9wcm9wcyBDUCAKCQkJTEVGVCBKT0lOICIgLiBjbXNfZGJfcHJlZml4KCkgLiAiY29udGVudCBDIE9OIEMuY29udGVudF9pZCA9IENQLmNvbnRlbnRfaWQgCgkJCVdIRVJFIENQLmNvbnRlbnRfaWQgPSA/IEFORCBDUC5wcm9wX25hbWUgPSA/IjsKCQkkcCA9IGFycmF5KCRjb250ZW50SWQsICRwcm9wTmFtZSk7CgkJaWYoJGNvbnRlbnRUeXBlICE9ICcnKSAKCQl7CgkJCSRxdWVyeSAuPSAiIEFORCBDLnR5cGUgPSA/IjsKCQkJJHBbXSAgICA9ICRjb250ZW50VHlwZTsKCQl9CgkJJHF1ZXJ5IC49ICIgTElNSVQgMSI7CgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgJHApOwoJCWlmKCRkYnJlc3VsdCAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQoJCXsKCQkJcmV0dXJuIGFycmF5KCdwYXJlbnRfaWQnPT4kcm93WydwYXJlbnRfaWQnXSwgJ3Byb3BfdmFsdWUnPT4kcm93Wydjb250ZW50J10pOwoJCX0KCQkKCQlyZXR1cm4gZmFsc2U7Cgl9CgkKCWZ1bmN0aW9uIEdldEdyb3VwcygpIAoJewoJCSRkYiA9JiBjbXNtcygpLT5HZXREYigpOwoJCSRncm91cHMgPSBhcnJheSgpOwoJCSRxdWVyeSA9ICJTRUxFQ1QgZ3JvdXBfaWQgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4idXNlcl9ncm91cHMgV0hFUkUgdXNlcl9pZCA9ID8iOwoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KGdldF91c2VyaWQoKSkpOwoJCXdoaWxlKCAkZGJyZXN1bHQgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSApIAoJCXsKCQkJJGdyb3Vwc1tdID0gJHJvd1snZ3JvdXBfaWQnXSAqIC0xOwoJCX0KCQlyZXR1cm4gJGdyb3VwczsKCX0KCQoJcHJpdmF0ZSBmdW5jdGlvbiBDaGVja0Jsb2NrUGVybWlzc2lvbigkYmxvY2tJZCkgCgl7CgkJJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnYWRkdF9lZGl0b3JzJ10gPSBhcnJheSgpOwoJCS8vIGNoZWNrIGlmIHVzZXIgaGFzIHBlcm1pc3Npb24gdG8gZWRpdCB0aGlzIGJsb2NrCgkJaWYoKCR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2VkaXRvcl91c2VycyddICE9ICcnIHx8ICR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2VkaXRvcl9ncm91cHMnXSAhPSAnJykgCgkJJiYgIWNoZWNrX3Blcm1pc3Npb24oZ2V0X3VzZXJpZCgpLCAnTWFuYWdlIEFsbCBBZHZhbmNlZENvbnRlbnQgQmxvY2tzJykpIAoJCXsKCQkJJHVzZXJvcHMgICAgICA9JiBjbXNtcygpLT5HZXRVc2VyT3BlcmF0aW9ucygpOwoJCQkkZ3JvdXBvcHMgICAgID0mIGNtc21zKCktPkdldEdyb3VwT3BlcmF0aW9ucygpOwoJCQkkYWxsdXNlcnMgICAgID0mICR1c2Vyb3BzLT5Mb2FkVXNlcnMoKTsKCQkJJGFsbGdyb3VwcyAgICA9JiAkZ3JvdXBvcHMtPkxvYWRHcm91cHMoKTsKCQkJJGVkaXRvckdyb3VwcyA9ICAkdGhpcy0+Q2xlYW5BcnJheShleHBsb2RlKCcsJywkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydlZGl0b3JfZ3JvdXBzJ10pKTsKCQkJJGVkaXRvclVzZXJzICA9ICAkdGhpcy0+Q2xlYW5BcnJheShleHBsb2RlKCcsJywkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydlZGl0b3JfdXNlcnMnXSkpOwoJCQkKCQkJZm9yZWFjaCAoJGFsbGdyb3VwcyBhcyAkb25lR3JvdXApIAoJCQl7CgkJCQlpZihpbl9hcnJheSgkb25lR3JvdXAtPm5hbWUsJGVkaXRvckdyb3VwcykpCgkJCQl7CgkJCQkJJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnYWRkdF9lZGl0b3JzJ11bXSA9ICRvbmVHcm91cC0+aWQqLTE7CgkJCQl9CgkJCX0KCQkJCgkJCWZvcmVhY2ggKCRhbGx1c2VycyBhcyAkb25lVXNlcikgCgkJCXsKCQkJCWlmKGluX2FycmF5KCRvbmVVc2VyLT51c2VybmFtZSwkZWRpdG9yVXNlcnMpKQoJCQkJewoJCQkJCSR0aGlzLT5fY29udGVudEJsb2Nrc1skYmxvY2tJZF1bJ2FkZHRfZWRpdG9ycyddW10gPSAkb25lVXNlci0+aWQ7CgkJCQl9CgkJCX0KCQkJCgkJCWlmKCFpbl9hcnJheShnZXRfdXNlcmlkKCksJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXVsnYWRkdF9lZGl0b3JzJ10pIAoJCQkmJiAhY291bnQoYXJyYXlfaW50ZXJzZWN0KCR0aGlzLT5fdXNlckdyb3VwcywkdGhpcy0+X2NvbnRlbnRCbG9ja3NbJGJsb2NrSWRdWydhZGR0X2VkaXRvcnMnXSkpKSAKCQkJewoJCQkJdW5zZXQoJHRoaXMtPl9jb250ZW50QmxvY2tzWyRibG9ja0lkXSk7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCQl9CgkJcmV0dXJuIHRydWU7Cgl9CgkKCQoJLyoqCgkgKiBmdW5jdGlvbiBJc1ZhckVtcHR5KCR2YXIsICR0cmltLCAkdW5zZXRFbXB0eUluZGV4ZXMpCgkgKiBub3QgcGFydCBvZiB0aGUgbW9kdWxlIGFwaQoJICogY2hlY2tzIGlmIGEgdmFyIGlzIGVtcHR5LiBpZiB2YXIgaXMgYW4gYXJyYXkgaXQgcmVjdXJzaXZsZXkgY2hlY2tzIGFsbCBlbGVtZW50cwoJICoKCSAqIEBwYXJhbSBtaXhlZCAkdmFyIC0gdGhlIHZhciB0byBjaGVjayBmb3IgZW1wdHkgdmFsdWUocykKCSAqIEBwYXJhbSBib29sZWFuICR0cmltIC0gdHJ1ZSB0byB0cmltIG9mZiBzcGFjZXMKCSAqIEBwYXJhbSBib29sZWFuICR1bnNldEVtcHR5SW5kZXhlcyAtIHRydWUgdG8gZGVsZXRlIGVtcHR5IGVsZW1lbnRzIGZyb20gYXJyYXkKCSAqIEByZXR1cm4gYm9vbGVhbiAtIHRydWUgaWYgZW1wdHksIGZhbHNlIGlmIG5vdAoJICovCglmdW5jdGlvbiBJc1ZhckVtcHR5KCYkdmFyLCAkdHJpbSA9IHRydWUsICR1bnNldEVtcHR5SW5kZXhlcyA9IGZhbHNlKSAKCXsKCQlpZiAoaXNfYXJyYXkoJHZhcikpIAoJCXsKCQkJZm9yZWFjaCAoJHZhciBhcyAkaz0+JHYpIAoJCQl7CgkJCQlpZiAoISR0aGlzLT5Jc1ZhckVtcHR5KCR2KSkgCgkJCQl7CgkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJfQoJCQkJZWxzZSAKCQkJCXsKCQkJCQlpZigkdW5zZXRFbXB0eUluZGV4ZXMpCgkJCQkJewoJCQkJCQl1bnNldCgkdmFyWyRrXSk7CgkJCQkJfQoJCQkJCXJldHVybiB0cnVlOwoJCQkJfQoJCQl9CgkJfQoJCWVsc2UgaWYoJHRyaW0gJiYgdHJpbSgkdmFyKSA9PSAnJykgCgkJewoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkJZWxzZSBpZigkdmFyID09ICcnKSAKCQl7CgkJCXJldHVybiB0cnVlOwoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9CgkKCQoJLyoqCgkgKiBmdW5jdGlvbiBDbGVhbkFycmF5KCRhcnJheSkKCSAqIG5vdCBwYXJ0IG9mIHRoZSBtb2R1bGUgYXBpCgkgKiByZW1vdmVzIGVtcHR5IGVsZW1lbnRzIGZyb20gYW4gYXJyYXkgCgkgKiAoY2FuIGJlIHVzZWZ1bCB3aGVuIHVzaW5nIGZ1bmN0aW9uIGV4cGxvZGUgdG8gY3JlYXRlIHRoZSBhcnJheSBvZiBhIGNzdikKCSAqCgkgKiBAcGFyYW0gYXJyYXkgJGFycmF5IC0gdGhlIGFycmF5IHRvIGNsZWFuIHVwCgkgKiBAcmV0dXJuIGFycmF5IC0gYW4gYXJyYXkgd2l0aG91dCBlbXB0eSBlbGVtZW50cyBvciBhbiBlbXB0eSBhcnJheQoJICovCglmdW5jdGlvbiBDbGVhbkFycmF5KCRhcnJheSkgCgl7CgkJaWYgKGlzX2FycmF5KCRhcnJheSkpIAoJCXsKCQkJZm9yZWFjaCAoJGFycmF5IGFzICRrPT4kdikgCgkJCXsKCQkJCWlmICgkdGhpcy0+SXNWYXJFbXB0eSgkdix0cnVlLHRydWUpKSAKCQkJCXsKCQkJCQl1bnNldCgkYXJyYXlbJGtdKTsKCQkJCX0KCQkJCWVsc2UgCgkJCQl7CgkJCQkJaWYoaXNfYXJyYXkoJHYpKSAKCQkJCQl7CgkJCQkJCSR2ID0gJHRoaXMtPkNsZWFuQXJyYXkoJHYpOwoJCQkJCQlpZigkdGhpcy0+SXNWYXJFbXB0eSgkdix0cnVlLHRydWUpKQoJCQkJCQl7CgkJCQkJCQl1bnNldCgkYXJyYXlbJGtdKTsKCQkJCQkJfQoJCQkJCQllbHNlCgkJCQkJCXsKCQkJCQkJCSRhcnJheVska10gPSAkdjsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCQlyZXR1cm4gJGFycmF5OwoJCX0KCQlyZXR1cm4gYXJyYXkoKTsKCX0KCQoJCgkvKioKCSAqIGZ1bmN0aW9uIElzVHJ1ZSgkdmFsdWUpCgkgKiBub3QgcGFydCBvZiB0aGUgbW9kdWxlIGFwaQoJICogY2hlY2tzIGlmIGEgdmFsdWUgaXMgbGl0ZXJhbGx5ICJ0cnVlIgoJICoKCSAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgLSB0aGUgdmFsdWUgdG8gY2hlY2sKCSAqIEByZXR1cm4gYm9vbAoJICovCglmdW5jdGlvbiBJc1RydWUoJHZhbHVlKSAKCXsKCQlyZXR1cm4gKHN0cnRvbG93ZXIoJHZhbHVlKSA9PT0gJ3RydWUnIHx8ICR2YWx1ZSA9PT0gMSB8fCAkdmFsdWUgPT09ICcxJyB8fCAkdmFsdWUgPT09IHRydWUpOwoJfQoJCgkKCS8qKgoJICogZnVuY3Rpb24gSXNGYWxzZSgkdmFsdWUpCgkgKiBub3QgcGFydCBvZiB0aGUgbW9kdWxlIGFwaQoJICogY2hlY2tzIGlmIGEgdmFsdWUgaXMgbGl0ZXJhbGx5ICJmYWxzZSIKCSAqCgkgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIC0gdGhlIHZhbHVlIHRvIGNoZWNrCgkgKiBAcmV0dXJuIGJvb2wKCSAqLwoJZnVuY3Rpb24gSXNGYWxzZSgkdmFsdWUpIAoJewoJCXJldHVybiAoc3RydG9sb3dlcigkdmFsdWUpID09PSAnZmFsc2UnIHx8ICR2YWx1ZSA9PT0gJzAnIHx8ICR2YWx1ZSA9PT0gMCB8fCAkdmFsdWUgPT09IGZhbHNlIHx8ICR2YWx1ZSA9PT0gJycpOwoJfQoJCglmdW5jdGlvbiBDaGVja0Zyb250ZW5kQWNjZXNzKCRmZXVfZ3JvdXBzKQoJewoJCSRhY2Nlc3MgPSB0cnVlOwoJCWlmKCFpc19hcnJheSgkZmV1X2dyb3VwcykpCgkJewoJCQkkZmV1X2dyb3VwcyA9ICR0aGlzLT5DbGVhbkFycmF5KGV4cGxvZGUoJywnLCRmZXVfZ3JvdXBzKSk7CgkJfQoJCWlmKCAkZmV1c2VycyA9JiBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0Zyb250RW5kVXNlcnMnKSAmJiAhZW1wdHkoJGZldV9ncm91cHMpKQoJCXsKCQkJLy8gLi4uIGRlbnkgYWNjZXNzIGJ5IGRlZmF1bHQgbm93IC4uLgoJCQkkYWNjZXNzID0gZmFsc2U7CgkJCS8vIC4uLiBjaGVjayBpZiB1c2VyIGlzIGxvZ2dlZCBpbiBhbmQgYmVsb25ncyB0byBhIGdyb3VwIC4uLgoJCQkkdXNlcmlkID0gJGZldXNlcnMtPkxvZ2dlZEluSWQoKTsKCQkJaWYoJHVzZXJpZCAmJiAkZ3JvdXBzID0mICR0aGlzLT5HZXRGZXVHcm91cHMoJHVzZXJpZCkpCgkJCXsKCQkJCS8vIGNvbXBhcmUgdXNlcnMgZ3JvdXBzIHdpdGggc2VsZWN0ZWQgb25lcwoJCQkJZm9yZWFjaCgkZ3JvdXBzIGFzICRvbmVncm91cCkgCgkJCQl7CgkJCQkJaWYoaW5fYXJyYXkoJG9uZWdyb3VwWydncm91cGlkJ10sJGZldV9ncm91cHMpIHx8IGluX2FycmF5KCRvbmVncm91cFsnZ3JvdXBuYW1lJ10sJGZldV9ncm91cHMpKSAKCQkJCQl7CgkJCQkJCS8vIGlmIG1hdGNoIC0+IGdyYW50IGFjY2VzcwoJCQkJCQkkYWNjZXNzID0gdHJ1ZTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJCXJldHVybiAkYWNjZXNzOwoJfQoJCglwcml2YXRlIGZ1bmN0aW9uICZHZXRGZXVHcm91cHMoJHVzZXJpZCkKCXsKCQlpZighJHVzZXJpZCkKCQl7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJaWYoICRmZXVzZXJzID0mIGNtc191dGlsczo6Z2V0X21vZHVsZSgnRnJvbnRFbmRVc2VycycpICYmICEkdGhpcy0+X2ZldUdyb3VwcykKCQl7CgkJCSR0aGlzLT5fZmV1R3JvdXBzID0gJGZldXNlcnMtPkdldE1lbWJlckdyb3Vwc0FycmF5KCR1c2VyaWQpOwoJCX0KCQlyZXR1cm4gJHRoaXMtPl9mZXVHcm91cHM7Cgl9CgkKCWZ1bmN0aW9uIENoZWNrRnJvbnRlbmRQYWdlQWNjZXNzKCRwYWdlX2lkID0gJycpCgl7CgkJaWYoJHBhZ2VfaWQgPiAwICYmICRwYWdlX2lkICE9ICR0aGlzLT5JZCgpKQoJCXsKCQkJJG1hbmFnZXIgICAgPSYgY21zbXMoKS0+R2V0SGllcmFyY2h5TWFuYWdlcigpOwoJCQkkbm9kZSAgICAgICA9ICRtYW5hZ2VyLT5zdXJlR2V0Tm9kZUJ5QWxpYXMoJHBhZ2VfaWQpOwoJCQkkY29udGVudE9iaiA9JiAkbm9kZS0+R2V0Q29udGVudCgpOwoJCX0KCQllbHNlCgkJewoJCQkkY29udGVudE9iaiA9JiAkdGhpczsKCQl9CgkJCgkJI2lmKCFpc19vYmplY3QoJGNvbnRlbnRPYmopKQoJCSN7CgkJIwlyZXR1cm4gZmFsc2U7CgkJI30KCQkKCQkkYWNjZXNzID0gdHJ1ZTsKCQlpZigkY29udGVudE9iai0+VHlwZSgpID09ICdjb250ZW50MicpCgkJewoJCQlpZihzdHJwb3MoJGNvbnRlbnRPYmotPkdldFByb3BlcnR5VmFsdWUoJ2ZldV9hY2Nlc3MnKSwnLCcpID09PSBGQUxTRSkKCQkJewoJCQkJJGZldV9ncm91cHMgPSAkdGhpcy0+Q2xlYW5BcnJheShleHBsb2RlKCc7JywkY29udGVudE9iai0+R2V0UHJvcGVydHlWYWx1ZSgnZmV1X2FjY2VzcycpKSk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkZmV1X2dyb3VwcyA9ICR0aGlzLT5DbGVhbkFycmF5KGV4cGxvZGUoJywnLCRjb250ZW50T2JqLT5HZXRQcm9wZXJ0eVZhbHVlKCdmZXVfYWNjZXNzJykpKTsKCQkJfQoJCQkKCQkJaWYoIWVtcHR5KCRmZXVfZ3JvdXBzKSkgCgkJCXsKCQkJCS8vIGlmIHBhZ2UgaGFzIG5vIHBhcmVudHMgYnV0IGluaGVyaXRhbmNlIC0+IHJlbW92ZSBpbmhlcml0YW5jZSAoc2hvdWxkIG5ldmVyIGhhcHBlbiBidXQganVzdCBpbiBjYXNlKQoJCQkJaWYoJGNvbnRlbnRPYmotPlBhcmVudElkKCkgPD0gMCAmJiBpbl9hcnJheSgiLTEiLCRmZXVfZ3JvdXBzKSkgCgkJCQl7CgkJCQkJZm9yZWFjaCgkZmV1X2dyb3VwcyBhcyAkaz0+JHYpIAoJCQkJCXsKCQkJCQkJaWYoJHY9PSctMScpCgkJCQkJCXsKCQkJCQkJCXVuc2V0KCRmZXVfZ3JvdXBzWyRrXSk7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQkKCQkJCS8vIGlmIHRoZXJlIHN0aWxsIGlzIGluaGVyaXRhbmNlIC4uLgoJCQkJaWYoaW5fYXJyYXkoJy0xJywkZmV1X2dyb3VwcykpIAoJCQkJewoJCQkJCS8vIC4uLiBmaW5hbGx5IGluaGVyaXQKCQkJCQkkZmV1X2dyb3VwcyA9ICRjb250ZW50T2JqLT5Jbmhlcml0UGFyZW50UHJvcCgkY29udGVudE9iai0+UGFyZW50SWQoKSwnZmV1X2FjY2VzcycsJGZldV9ncm91cHMpOwoJCQkJfQoJCQl9CgkJCSRhY2Nlc3MgPSAkdGhpcy0+Q2hlY2tGcm9udGVuZEFjY2VzcygkZmV1X2dyb3Vwcyk7CgkJfQoJCXJldHVybiAkYWNjZXNzOwoJfQoJCglmdW5jdGlvbiBEb0Zyb250ZW5kUGFnZUFjdGlvbigpCgl7CgkJaWYoICRmZXVzZXJzID0mIGNtc191dGlsczo6Z2V0X21vZHVsZSgnRnJvbnRFbmRVc2VycycgKSkKCQl7CgkJCS8vIGdldCB0aGUgcGFnZSB0byByZWRpcmVjdCB0bwoJCQkkcmVkaXJlY3RQYWdlID0gJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJ3JlZGlyZWN0X3BhZ2UnKTsKCQkJaWYoJHJlZGlyZWN0UGFnZSA9PSAnLTEnKQoJCQl7CgkJCQkkcmVkaXJlY3RQYWdlID0gJHRoaXMtPkluaGVyaXRQYXJlbnRQcm9wKCR0aGlzLT5QYXJlbnRJZCgpLCdyZWRpcmVjdF9wYWdlJyk7CgkJCX0KCQkJCgkJCS8vIGRvIG5vdCByZWRpcmVjdCB0byBjdXJyZW50IHBhZ2UgLT4gd2lsbCByZXN1bHQgaW4gZW5kbGVzcyByZWN1cnNpdmUgcmVkaXJlY3Rpb24KCQkJaWYoJHJlZGlyZWN0UGFnZSA9PSAkdGhpcy0+SWQoKSB8fCAkcmVkaXJlY3RQYWdlID09ICR0aGlzLT5BbGlhcygpKQoJCQl7CgkJCQkkcmVkaXJlY3RQYWdlID0gJyc7CgkJCX0KCQkJCgkJCS8vIGdldCBmZXUgYWN0aW9uCgkJCSRmZXVBY3Rpb24gPSAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgnZmV1X2FjdGlvbicpOwoJCQkKCQkJaWYoJGZldUFjdGlvbiA9PSAnLTEnKQoJCQl7CgkJCQkkZmV1QWN0aW9uID0gJHRoaXMtPkluaGVyaXRQYXJlbnRQcm9wKCR0aGlzLT5QYXJlbnRJZCgpLCdmZXVfYWN0aW9uJyk7CgkJCX0KCQkJCgkJCS8vIGlmIHdlIHN0aWxsIGRvbid0IGhhdmUgYSByZWRpcmVjdCBwYWdlIC0+IGRvIGZldSBhY3Rpb24gaW4gY3VycmVudCBwYWdlCgkJCWlmKCRyZWRpcmVjdFBhZ2UgPT0gJycpIAoJCQl7CgkJCQkvLyBpZiB3ZSB3YW50IGFuIGFjdGlvbiAoYW5kIHdlIGhhdmUgbm90IGRvbmUgdGhpcyBiZWZvcmUpIC4uLgoJCQkJaWYoJGZldUFjdGlvbiAmJiAhJHRoaXMtPl9mZXVBY3Rpb24pIAoJCQkJewoJCQkJCS8vIC4uLiBzZXQgYSBmbGFnIHRoYXQgd2UgYWxyZWFkeSBoYXZlIGEgbG9naW4gZm9ybSBub3cgKGp1c3QgdG8gcHJldmVudCB0byBkaXNwbGF5IGl0IGFnYWluIGZvciBvdGhlciBjb250ZW50IGJsb2NrcykgLi4uCgkJCQkJJHRoaXMtPl9mZXVBY3Rpb24gPSB0cnVlOwoJCQkJCS8vIC4uLiBhbmQgZmluYWxseSBkbyBmZXUgYWN0aW9uCgkJCQkJcmV0dXJuICRmZXVzZXJzLT5Eb0FjdGlvbignZGVmYXVsdCcsICdjbnRudDAxJywgYXJyYXkoJ2Zvcm0nPT4nbG9naW4nKSwgJHRoaXMtPklkKCkpOwoJCQkJfQoJCQkJZWxzZSAKCQkJCXsKCQkJCQkvLyAuLi4gb3RoZXJ3aXNlIGp1c3QgcmV0dXJuIG5vdGhpbmcKCQkJCQlyZXR1cm47CgkJCQl9CgkJCQkKCQkJfQoJCQkvLyBlbHNlIGlmIHdlIGhhdmUgYSByZWRpcmVjdCBwYWdlIC4uLgoJCQllbHNlIAoJCQl7CgkJCQkvLyBnZXQgdGhlIHJlZGlyZWN0IHBhcmFtcwoJCQkJJHBhdHRlcm4gICAgICAgID0gJy8oW1x3XSspPShbIl1bXiJdKlsiXXxbXCddW15cJ10qW1wnXXxbXlwnIlxzXSopLyc7CgkJCQkkcmVkaXJlY3RQYXJhbXMgPSAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgncmVkaXJlY3RfcGFyYW1zJyk7CgkJCQkkZXZhbHVhdGVTbWFydHkgPSAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgnZXZhbHVhdGVfc21hcnR5Jyk7CgkJCQlpZigkZXZhbHVhdGVTbWFydHkpCgkJCQl7CgkJCQkJJHJlZGlyZWN0UGFyYW1zID0gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhKCRyZWRpcmVjdFBhcmFtcyk7CgkJCQl9CgkJCQkKCQkJCSRtYXRjaGVzICA9IGFycmF5KCk7CgkJCQkkcmVzdWx0ICAgPSBwcmVnX21hdGNoX2FsbCgkcGF0dGVybiwgJHJlZGlyZWN0UGFyYW1zLCAkbWF0Y2hlcyk7CgkJCQkkX3BhcmFtczEgPSBhcnJheSgpOwoJCQkJJF9wYXJhbXMyID0gYXJyYXkoKTsKCQkJCWZvciAoJGkgPSAwOyAkaSA8IGNvdW50KCRtYXRjaGVzWzFdKTsgJGkrKykgCgkJCQl7CgkJCQkJaWYoc3RhcnRzd2l0aCgkbWF0Y2hlc1syXVskaV0sJ1wnJykpCgkJCQkJewoJCQkJCQkkbWF0Y2hlc1syXVskaV0gPSB0cmltKCRtYXRjaGVzWzJdWyRpXSwnXCcnKTsKCQkJCQl9CgkJCQkJZWxzZSBpZihzdGFydHN3aXRoKCRtYXRjaGVzWzJdWyRpXSwnIicpKQoJCQkJCXsKCQkJCQkJJG1hdGNoZXNbMl1bJGldID0gdHJpbSgkbWF0Y2hlc1syXVskaV0sJyInKTsKCQkJCQl9CgkJCQkJJF9wYXJhbXMxWyRtYXRjaGVzWzFdWyRpXV0gPSAkbWF0Y2hlc1syXVskaV07CgkJCQkJJF9wYXJhbXMyW10gICAgICAgICAgICAgICAgPSAkbWF0Y2hlc1sxXVskaV0gLiAnPScgLiAkbWF0Y2hlc1syXVskaV07CgkJCQl9CgkJCQkvLyBpZiB3ZSB3YW50IGFuIGFjdGlvbiAuLi4KCQkJCWlmKCRmZXVBY3Rpb24pIAoJCQkJewoJCQkJCS8vIC4uLiByZWRpcmVjdCB0byB0aGUgc3BlY2lmaWVkIHBhZ2UgYW5kIGRvIGZldSBhY3Rpb24KCQkJCQlyZXR1cm4gJGZldXNlcnMtPlJlZGlyZWN0Rm9yRnJvbnRFbmQoJ2NudG50MDEnLCAkcmVkaXJlY3RQYWdlLCAnZGVmYXVsdCcsICRfcGFyYW1zMSwgZmFsc2UpOwoJCQkJfQoJCQkJZWxzZSAKCQkJCXsKCQkJCQkvLyAuLi4gb3RoZXJ3aXNlIGp1c3QgcmVkaXJlY3QgLSBUb0RvOiBDaGVjayBmb3IgU1NMIFN0dWZmCgkJCQkJJG1hbmFnZXIgPSYgY21zbXMoKS0+R2V0SGllcmFyY2h5TWFuYWdlcigpOwoJCQkJCSRub2RlICAgID0gJG1hbmFnZXItPnN1cmVHZXROb2RlQnlBbGlhcygkcmVkaXJlY3RQYWdlKTsKCQkJCQkkY29udGVudCA9JiAkbm9kZS0+R2V0Q29udGVudCgpOwoJCQkJCWlmIChpc3NldCgkY29udGVudCkgJiYgJHVybCA9ICRjb250ZW50LT5HZXRVUkwoKSkgCgkJCQkJewoJCQkJCQkkY29uZmlnID0gY21zbXMoKS0+R2V0Q29uZmlnKCk7CgkJCQkJCSR1cmwgPSB0cmltKHN0cl9yZXBsYWNlKAoJCQkJCQkJYXJyYXkoJGNvbmZpZ1sncm9vdF91cmwnXSAuICcvaW5kZXgucGhwJywKCQkJCQkJCQkkY29uZmlnWydzc2xfdXJsJ10gLiAnL2luZGV4LnBocCcsCgkJCQkJCQkJJGNvbmZpZ1sncm9vdF91cmwnXSwKCQkJCQkJCQkkY29uZmlnWydzc2xfdXJsJ10pLCAKCQkJCQkJCScnLCAkdXJsKSwnLz8nKTsKCQkJCQkJCgkJCQkJCWlmKCFlbXB0eSgkX3BhcmFtczEpICYmICFlbXB0eSgkX3BhcmFtczIpKSAKCQkJCQkJewoJCQkJCQkJaWYoJGNvbmZpZ1sndXJsX3Jld3JpdGluZyddID09ICdub25lJykgCgkJCQkJCQl7CgkJCQkJCQkJaWYoJGNvbnRlbnQtPlNlY3VyZSgpKQoJCQkJCQkJCXsKCQkJCQkJCQkJJHVybCA9ICRjb25maWdbJ3NzbF91cmwnXSAuICcvaW5kZXgucGhwPycgLiBpbXBsb2RlKCcmJywkX3BhcmFtczIpIC4gJyYnIC4gJHVybDsKCQkJCQkJCQl9CgkJCQkJCQkJZWxzZQoJCQkJCQkJCXsKCQkJCQkJCQkJJHVybCA9ICRjb25maWdbJ3Jvb3RfdXJsJ10gLiAnL2luZGV4LnBocD8nIC4gaW1wbG9kZSgnJicsJF9wYXJhbXMyKSAuICcmJyAuICR1cmw7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJZWxzZSBpZigkY29uZmlnWyd1cmxfcmV3cml0aW5nJ10gPT0gJ2ludGVybmFsJykgCgkJCQkJCQl7CgkJCQkJCQkJaWYoJGNvbnRlbnQtPlNlY3VyZSgpKQoJCQkJCQkJCXsKCQkJCQkJCQkJJHVybCA9ICRjb25maWdbJ3NzbF91cmwnXSAuICcvaW5kZXgucGhwLycgLiBpbXBsb2RlKCcvJywkX3BhcmFtczEpIC4gJy8nIC4gJHVybDsKCQkJCQkJCQl9CgkJCQkJCQkJZWxzZSAKCQkJCQkJCQl7CgkJCQkJCQkJCSR1cmwgPSAkY29uZmlnWydyb290X3VybCddIC4gJy9pbmRleC5waHAvJyAuIGltcGxvZGUoJy8nLCRfcGFyYW1zMSkgLiAnLycgLiAkdXJsOwoJCQkJCQkJCX0KCQkJCQkJCQlpZigkY29udGVudC0+RGVmYXVsdENvbnRlbnQoKSkKCQkJCQkJCQl7CgkJCQkJCQkJCSR1cmwgLj0gJGNvbnRlbnQtPkFsaWFzKCkgLiAkY29uZmlnWydwYWdlX2V4dGVuc2lvbiddOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJCWVsc2UgaWYoJGNvbmZpZ1sndXJsX3Jld3JpdGluZyddID09ICdtb2RfcmV3cml0ZScpIAoJCQkJCQkJewoJCQkJCQkJCWlmKCRjb250ZW50LT5TZWN1cmUoKSkKCQkJCQkJCQl7CgkJCQkJCQkJCSR1cmwgPSAkY29uZmlnWydzc2xfdXJsJ10gLiAnLycgLiBpbXBsb2RlKCcvJywkX3BhcmFtczEpIC4gJy8nIC4gJHVybDsKCQkJCQkJCQl9CgkJCQkJCQkJZWxzZQoJCQkJCQkJCXsKCQkJCQkJCQkJJHVybCA9ICRjb25maWdbJ3Jvb3RfdXJsJ10gLiAnLycgLiBpbXBsb2RlKCcvJywkX3BhcmFtczEpIC4gJy8nIC4gJHVybDsKCQkJCQkJCQl9CgkJCQkJCQkJaWYoJGNvbnRlbnQtPkRlZmF1bHRDb250ZW50KCkpCgkJCQkJCQkJewoJCQkJCQkJCQkkdXJsIC49ICRjb250ZW50LT5BbGlhcygpIC4gJGNvbmZpZ1sncGFnZV9leHRlbnNpb24nXTsKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJcmVkaXJlY3QoJHVybCk7CgkJCQkJCXJldHVybjsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9Cgl9Cn0KPz4K]]></data>
	</file>
	<file>
	  <filename>/css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/css/.htaccess</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PEZpbGVzICouY3NzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIG9yZGVyIGRlbnksYWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBhbGxvdyBmcm9tIGFsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8L0ZpbGVzPgo=]]></data>
	</file>
	<file>
	  <filename>/css/calendar.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNhbGVuZGFyVHJpZ2dlcjpob3ZlciB7CgljdXJzb3I6IHBvaW50ZXI7Cn0KCmRpdi5jYWxlbmRhcgp7CiAgZm9udC1zaXplOiBzbWFsbGVyOwogIGNvbG9yOiAjM2UzZTNlOwp9CgpkaXYuY2FsZW5kYXIucG9wdXAKewogIG1hcmdpbi1sZWZ0OiAtNDBweDsKICBtYXJnaW4tdG9wOiAtMTAwcHg7CiAgei1pbmRleDogOTk5OTsKfQoKZGl2LmNhbGVuZGFyIHRhYmxlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOwogIGJvcmRlcjogMXB4IHNvbGlkICNlNWU1ZTU7CiAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKICBib3JkZXItc3BhY2luZzogMXB4Owp9CgpkaXYuY2FsZW5kYXIgdGhlYWQgewogIGJhY2tncm91bmQtY29sb3I6ICNmZmY7Cn0KCmRpdi5jYWxlbmRhciB0ZCwKZGl2LmNhbGVuZGFyIHRoCnsKICBwYWRkaW5nOiAycHg7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgpkaXYuY2FsZW5kYXIgdGQudGl0bGUKewogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGNvbG9yOiAjZThhODAwOwp9CgpkaXYuY2FsZW5kYXIgdGgKewogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgpkaXYuY2FsZW5kYXIgdHIuZGF5cyB0ZCB7CiAgd2lkdGg6IDJlbTsKICBjb2xvcjogIzNkNjBiYTsKICB0ZXh0LWFsaWduOiByaWdodDsKICBjdXJzb3I6IHBvaW50ZXI7CiAgYm9yZGVyOiAxcHggc29saWQgI2U1ZTVlNTsKfQoKZGl2LmNhbGVuZGFyIHRyLmRheXMgdGQ6aG92ZXIsCmRpdi5jYWxlbmRhciB0ZC5idXR0b246aG92ZXIKewogIGJvcmRlci1jb2xvcjogI2U4YTgwMDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTVlNWU1OwogIGN1cnNvcjogcG9pbnRlcjsKfQpkaXYuY2FsZW5kYXIgdHIuZGF5cyB0ZDpob3Zlcgp7CiBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOwp9CgpkaXYuY2FsZW5kYXIgdHIuZGF5cyB0ZDphY3RpdmUKZGl2LmNhbGVuZGFyIHRkLmJ1dHRvbjphY3RpdmUKewogIGJhY2tncm91bmQtY29sb3I6ICNjZGU7Cn0KCmRpdi5jYWxlbmRhciB0ci5kYXlzIHRkLnNlbGVjdGVkCnsKICBmb250LXdlaWdodDogYm9sZDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZThhODAwOwogIGJvcmRlci1jb2xvcjogI2U4YTgwMCAhaW1wb3J0YW50OwogIGNvbG9yOiAjZmZmICFpbXBvcnRhbnQ7Cn0KCmRpdi5jYWxlbmRhciB0ci5kYXlzIHRkLndlZWtlbmQgewoJY29sb3I6ICM3ZjlkZTg7Cn0KCmRpdi5jYWxlbmRhciB0ci5kYXlzIHRkLnRvZGF5CnsKICBmb250LXdlaWdodDogYm9sZDsKICBib3JkZXItY29sb3I6ICMzZDYwYmE7Cn0KCmRpdi5jYWxlbmRhciB0ci5kYXlzIHRkLm90aGVyRGF5CnsKICBiYWNrZ3JvdW5kOiAjZTVlNWU1OwogIGNvbG9yOiAjZmZmOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/css/general.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LnNvcnRhYmxlX2hhbmRsZXI6aG92ZXIgewoJY3Vyc29yIDogbW92ZTsKfQoKLnNvcnRhYmxlX2hhbmRsZXIgewoJbWFyZ2luOjAgNXB4IDAgMDsKCXZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDsKfQoKLnNvcnRhYmxlX3dyYXBwZXIgaW5wdXQgewoJbWFyZ2luOjAgNXB4IDAgMDsKfQoKLnNvcnRhYmxlIHsKCWxpbmUtaGVpZ2h0OiAyMDAlOwoJcGFkZGluZzogMCAwIDAgNXB4Owp9CgpkaXYucGFnZW92ZXJmbG93LkFkdmFuY2VkQ29udGVudF9Db250ZW50QmxvY2sgewoJd2lkdGg6IDEwMCU7Cn0KCmxlZ2VuZC5BZHZhbmNlZENvbnRlbnRfQ29udGVudEJsb2NrIHsKCXBhZGRpbmctYm90dG9tOiAwOwoJcGFkZGluZy10b3A6IDA7CgltYXJnaW4tYm90dG9tOiAwOwoJbWFyZ2luLXRvcDogMDsKCWZvbnQtc2l6ZTogMTAwJTsKfQoKCmRpdiNwYWdlX3RhYnMgZGl2LlN1YlRhYldyYXBwZXIgewoJYmFja2dyb3VuZDp0cmFuc3BhcmVudDsKCWJvcmRlcjpub25lOwoJY3Vyc29yOmF1dG87CglmbG9hdDpub25lOwoJbWFyZ2luOjBweDsKCXBhZGRpbmc6MHB4Owp9CgoKCiNBZHZhbmNlZENvbnRlbnRfd3JhcHBlciB7Cglwb3NpdGlvbiA6IGZpeGVkOwoJbGVmdCAgICAgOiAwcHg7Cgl0b3AgICAgICA6IDBweDsKCXdpZHRoICAgIDogMTAwJTsKCWhlaWdodCAgIDogMTAwJTsKCXotaW5kZXggIDogLTk5OTk7CglkaXNwbGF5ICA6IG5vbmU7Cn0KCiNBZHZhbmNlZENvbnRlbnRfd3JhcHBlciAjQWR2YW5jZWRDb250ZW50X2JhY2tncm91bmQgewoJcG9zaXRpb24gICAgICAgICA6IGZpeGVkOwoJbGVmdCAgICAgICAgICAgICA6IDBweDsKCXRvcCAgICAgICAgICAgICAgOiAwcHg7Cgl3aWR0aCAgICAgICAgICAgIDogMTAwJTsKCWhlaWdodCAgICAgICAgICAgOiAxMDAlOwoJYmFja2dyb3VuZC1jb2xvciA6ICMwMDA7CglkaXNwbGF5ICAgICAgICAgIDogbm9uZTsKfQoKI0FkdmFuY2VkQ29udGVudF93cmFwcGVyICNBZHZhbmNlZENvbnRlbnQgewoJd2lkdGggICAgICAgICAgICAgIDogNTQwcHg7CglkaXNwbGF5ICAgICAgICAgICAgOiBub25lOwoJYmFja2dyb3VuZC1jb2xvciAgIDogI0ZGRjsKCWxpbmUtaGVpZ2h0ICAgICAgICA6IDEwMCU7CgltYXJnaW4gICAgICAgICAgICAgOiBhdXRvOwoJcG9zaXRpb24gICAgICAgICAgIDogcmVsYXRpdmU7CgktbW96LWJvcmRlci1yYWRpdXMgOiAxMHB4IDEwcHggMTBweCAxMHB4OwoJLW1vei1ib3gtc2hhZG93ICAgIDogMCAwIDMycHggIzAwMDAwMDsKfQoKI0FkdmFuY2VkQ29udGVudF93cmFwcGVyICNBZHZhbmNlZENvbnRlbnQgI0FkdmFuY2VkQ29udGVudF9jb250ZW50IHsKCXBhZGRpbmcgOiAwIDAgMTBweCAwOwoJZGlzcGxheSA6IG5vbmU7Cn0KCiNBZHZhbmNlZENvbnRlbnRfd3JhcHBlciAjQWR2YW5jZWRDb250ZW50ICNBZHZhbmNlZENvbnRlbnRfdG1wIHsKCXBhZGRpbmcgOiAwIDAgMTBweCAwOwoJcG9zaXRpb246YWJzb2x1dGU7CglsZWZ0OiAtNTAwJTsKCWhlaWdodDphdXRvOwoJZGlzcGxheTpibG9jazsKCXotaW5kZXggOiAtOTk5OTsKCXdpZHRoOjEwMCU7Cn0KCiNBZHZhbmNlZENvbnRlbnRfd3JhcHBlciAjQWR2YW5jZWRDb250ZW50ICNBZHZhbmNlZENvbnRlbnRfdGl0bGViYXIgewoJcGFkZGluZyAgICAgICAgICA6IDVweDsKCWNvbG9yICAgICAgICAgICAgOiAjMzMzOwoJYmFja2dyb3VuZC1jb2xvciA6ICNDQ0M7Cn0KCiNBZHZhbmNlZENvbnRlbnRfd3JhcHBlciAjQWR2YW5jZWRDb250ZW50ICNBZHZhbmNlZENvbnRlbnRfdGl0bGViYXIgaDMgewoJaGVpZ2h0ICAgICAgOjE2cHg7CglsaW5lLWhlaWdodCA6IDE2cHg7CgltYXJnaW46MDsKfQoKI0FkdmFuY2VkQ29udGVudF93cmFwcGVyICNBZHZhbmNlZENvbnRlbnQgI0FkdmFuY2VkQ29udGVudF9jbG9zZSwgCiNBZHZhbmNlZENvbnRlbnRfd3JhcHBlciAjQWR2YW5jZWRDb250ZW50ICNBZHZhbmNlZENvbnRlbnRfcmVsb2FkLAojQWR2YW5jZWRDb250ZW50X3dyYXBwZXIgI0FkdmFuY2VkQ29udGVudCAjQWR2YW5jZWRDb250ZW50X2NsZWFyX2NhY2hlIHsKCWRpc3BsYXkgICAgICAgICA6IGJsb2NrOwoJZmxvYXQgICAgICAgICAgIDogcmlnaHQ7CgloZWlnaHQgICAgICAgICAgOiAxNnB4OwoJbWFyZ2luICAgICAgICAgIDogMCA1cHg7CglvdmVyZmxvdyAgICAgICAgOiBoaWRkZW47Cgl0ZXh0LWRlY29yYXRpb24gOiBub25lOwoJdGV4dC1pbmRlbnQgICAgIDogLTk5OWVtOwoJd2lkdGggICAgICAgICAgIDogMTZweDsKfQoKI0FkdmFuY2VkQ29udGVudF93cmFwcGVyICNBZHZhbmNlZENvbnRlbnQgI0FkdmFuY2VkQ29udGVudF9nb3RvX3Jvb3QgewoJb3ZlcmZsb3cgICAgICAgIDogaGlkZGVuOwoJdGV4dC1kZWNvcmF0aW9uIDogbm9uZTsKCXRleHQtaW5kZW50ICAgICA6IC05OTllbTsKCXdpZHRoICAgICAgICAgICA6IDIxcHg7CgloZWlnaHQgICAgICAgICAgOiAxNnB4OwoJZGlzcGxheSAgICAgICAgIDogYmxvY2s7CglmbG9hdCAgICAgICAgICAgOiBsZWZ0OwoJbWFyZ2luICAgICAgICAgIDogMCA1cHg7CgliYWNrZ3JvdW5kICAgICAgOiB1cmwoJy4uL2ltYWdlcy9kaXIuZ2lmJykgbm8tcmVwZWF0IGNlbnRlcjsKfQoKI0FkdmFuY2VkQ29udGVudF93cmFwcGVyICNBZHZhbmNlZENvbnRlbnQgI0FkdmFuY2VkQ29udGVudF9jbG9zZSB7CgliYWNrZ3JvdW5kIDogdXJsKCcuLi9pbWFnZXMvY2xvc2UucG5nJykgbm8tcmVwZWF0IGNlbnRlcjsKfQoKI0FkdmFuY2VkQ29udGVudF93cmFwcGVyICNBZHZhbmNlZENvbnRlbnQgI0FkdmFuY2VkQ29udGVudF9yZWxvYWQgewoJYmFja2dyb3VuZCA6IHVybCgnLi4vaW1hZ2VzL3JlbG9hZC5wbmcnKSBuby1yZXBlYXQ7Cn0KCiNBZHZhbmNlZENvbnRlbnRfd3JhcHBlciAjQWR2YW5jZWRDb250ZW50ICNBZHZhbmNlZENvbnRlbnRfY2xlYXJfY2FjaGUgewoJYmFja2dyb3VuZCA6IHVybCgnLi4vaW1hZ2VzL2NsZWFyX2NhY2hlLnBuZycpIG5vLXJlcGVhdDsKfQoKCiNBZHZhbmNlZENvbnRlbnRfd3JhcHBlciAjQWR2YW5jZWRDb250ZW50IC5BZHZhbmNlZENvbnRlbnRfaGVhZGVyIGZvcm0gcCB7CglsaW5lLWhlaWdodCA6IDEzMCU7CglwYWRkaW5nICAgICA6IDVweCAwIDAgMDsKfQoKCiNBZHZhbmNlZENvbnRlbnRfd3JhcHBlciAjQWR2YW5jZWRDb250ZW50ICNBZHZhbmNlZENvbnRlbnRfY2xvc2U6aG92ZXJ7CgkvKiBUb0RvICovCn0KCiNBZHZhbmNlZENvbnRlbnRfd3JhcHBlciAjQWR2YW5jZWRDb250ZW50IC5BZHZhbmNlZENvbnRlbnRfaGVhZGVyIHsKCW1hcmdpbiAgICAgICAgICAgOiAwcHg7CglwYWRkaW5nICAgICAgICAgIDogMHB4Owp9CgojQWR2YW5jZWRDb250ZW50X3dyYXBwZXIgI0FkdmFuY2VkQ29udGVudCAuQWR2YW5jZWRDb250ZW50X2hlYWRlciBmaWVsZHNldCB7CgkgbWFyZ2luICAgOiA1cHg7CgkgcG9zaXRpb24gOiByZWxhdGl2ZTsKfQoKI0FkdmFuY2VkQ29udGVudF93cmFwcGVyICNBZHZhbmNlZENvbnRlbnQgLkFkdmFuY2VkQ29udGVudF9oZWFkZXIgZmllbGRzZXQgbGVnZW5kIHsKCWZvbnQtc2l6ZSAgICAgIDogMTAwJTsKCW1hcmdpbi1ib3R0b20gIDogMDsKCW1hcmdpbi10b3AgICAgIDogMDsKCXBhZGRpbmctYm90dG9tIDogMDsKCXBhZGRpbmctdG9wICAgIDogMDsKfQoKI0FkdmFuY2VkQ29udGVudF93cmFwcGVyICNBZHZhbmNlZENvbnRlbnQgZGl2LmJyZWFkY3J1bWJzIHsKCXBhZGRpbmctbGVmdCA6IDEwcHg7Cn0KCiNBZHZhbmNlZENvbnRlbnRfd3JhcHBlciAjQWR2YW5jZWRDb250ZW50IC5BZHZhbmNlZENvbnRlbnRfZmlsZWxpc3QgewoJbWFyZ2luICAgICAgICAgICA6IDVweCA1cHggLTVweCA1cHg7Cglib3JkZXIgICAgICAgICAgIDogMXB4IHNvbGlkICM5N0IxQjk7CgliYWNrZ3JvdW5kLWNvbG9yIDogI2ZmZjsKCW92ZXJmbG93ICAgICAgICAgOiBhdXRvOwp9CiNBZHZhbmNlZENvbnRlbnRfd3JhcHBlciAjQWR2YW5jZWRDb250ZW50IC5BZHZhbmNlZENvbnRlbnRfZmlsZWxpc3QgdGFibGUgdHIgdGR7CglwYWRkaW5nLXRvcCAgIDogNXB4OwoJcGFkZGluZy1yaWdodCA6IDVweDsKCWVtcHR5LWNlbGxzICAgOiBzaG93Owp9CgouQWR2YW5jZWRDb250ZW50X3RodW1ibmFpbF93cmFwcGVyIHsKCW1hcmdpbiAgICAgICAgIDogMnB4OwoJdGV4dC1hbGlnbiAgICAgOiBjZW50ZXI7Cgl2ZXJ0aWNhbC1hbGlnbiA6IG1pZGRsZTsKCW92ZXJmbG93ICAgICAgIDogaGlkZGVuOwoJZGlzcGxheSAgICAgICAgOiBibG9jazsKCWZsb2F0ICAgICAgICAgIDogbGVmdDsKfQoKI0FkdmFuY2VkQ29udGVudF93cmFwcGVyICNBZHZhbmNlZENvbnRlbnQgLkFkdmFuY2VkQ29udGVudF9maWxlbGlzdCAuQWR2YW5jZWRDb250ZW50X3RodW1ibmFpbF93cmFwcGVyIHsKCWhlaWdodCAgIDogYXV0bzsKCW92ZXJmbG93IDogdmlzaWJsZTsKCWZsb2F0ICAgIDogbm9uZTsKfQoKLkFkdmFuY2VkQ29udGVudF90aHVtYm5haWxfd3JhcHBlciBpbWcuQWR2YW5jZWRDb250ZW50X3RodW1ibmFpbCB7CiAgIG1hcmdpbiAgOiAycHg7CiAgIHBhZGRpbmcgOiAycHg7CiAgIGJvcmRlciAgOiAxcHggc29saWQgIzk5OTk5OTsKfQovKkZpbGUgb3BlcmF0aW9ucyovCi8qZXJyb3IqLwojQWR2YW5jZWRDb250ZW50X2Vycm9yewogICAJcGFkZGluZyAgICAgOiA1cHggNXB4IDEwcHggMTBweDsKCWJvcmRlciAgICAgIDogMXB4IHNvbGlkICNGRDk5OTk7Cgljb2xvciAgICAgICA6ICMwMDA7CgliYWNrZ3JvdW5kICA6ICNGRURBREE7Cglmb250LXdlaWdodCA6IGJvbGQ7Cn0KI0FkdmFuY2VkQ29udGVudF9lcnJvciBsZWdlbmR7Cgljb2xvciAgICAgICA6ICNDQzAwMDA7Cglmb250LXdlaWdodCA6IGJvbGQ7Cglmb250LXNpemUgICA6IDEuMWVtOwp9Ci8qc3VjZXNzKi8KI0FkdmFuY2VkQ29udGVudF9zdWNjZXNzewogICAJcGFkZGluZyAgICAgOiA1cHggNXB4IDEwcHggMTBweDsKCWNvbG9yICAgICAgIDogIzAwMDsKCWZvbnQtd2VpZ2h0IDogYm9sZDsKCWJvcmRlciAgICAgIDogMXB4IHNvbGlkICNCREQzQTM7CgliYWNrZ3JvdW5kICA6ICNENkU0QzU7Cn0KI0FkdmFuY2VkQ29udGVudF9zdWNjZXNzIGxlZ2VuZHsKCWNvbG9yICAgICAgIDogIzQzNTgyOTsKCWZvbnQtd2VpZ2h0IDogYm9sZDsKCWZvbnQtc2l6ZSAgIDogMS4xZW07Cn0KLypmb3JtIGlucHV0J3MgaW4gbm9ybWFsIGNzcyovCmlucHV0LkFkdmFuY2VkQ29udGVudF9idXR0b24uQWR2YW5jZWRDb250ZW50X2Rpc2FibGVkLAppbnB1dC5BZHZhbmNlZENvbnRlbnRfYnV0dG9uLkFkdmFuY2VkQ29udGVudF9kaXNhYmxlZDpob3ZlciB7Cgljb2xvciAgICAgIDogI0VFRTsKCWJhY2tncm91bmQgOiAjQ0NDOwoJY3Vyc29yICAgICA6IGRlZmF1bHQ7Cglib3JkZXIgICAgIDogbm9uZTsKfQoKI0FkdmFuY2VkQ29udGVudF93cmFwcGVyICNBZHZhbmNlZENvbnRlbnQgI0FkdmFuY2VkQ29udGVudF90aXRsZWJhciAjQWR2YW5jZWRDb250ZW50X2xvYWRpbmdfaW1nX3dyYXBwZXIgewoJaGVpZ2h0ICAgICAgICA6IDE2cHg7Cgl3aWR0aCAgICAgICAgIDogMTZweDsKCWRpc3BsYXkgICAgICAgOiBibG9jazsKCWZsb2F0ICAgICAgICAgOiBsZWZ0OwoJcGFkZGluZy1yaWdodCA6IDVweDsKfQoKI0FkdmFuY2VkQ29udGVudF93cmFwcGVyICNBZHZhbmNlZENvbnRlbnQgI0FkdmFuY2VkQ29udGVudF90aXRsZWJhciAjQWR2YW5jZWRDb250ZW50X2xvYWRpbmdfaW1nX3dyYXBwZXIgaW1nI0FkdmFuY2VkQ29udGVudF9sb2FkaW5nX2ltZyB7CglkaXNwbGF5OiBub25lOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/css/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/doc/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/doc/copyright.txt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIG1vZHVsZSB1c2VzIGV4dGVybmFsIGxpYmFyaWVzIGFuZCBjb2RlIHNuaXBwZXRzIHRoYXQgYXJlIGxpc3RlZCBiZWxvdzoKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpqUXVlcnkgSmF2YVNjcmlwdCBMaWJyYXJ5IHYxLjQuMgpodHRwOi8vanF1ZXJ5LmNvbS8KCkNvcHlyaWdodCAyMDEwLCBKb2huIFJlc2lnCkR1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLgpodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlCgpJbmNsdWRlcyBTaXp6bGUuanMKaHR0cDovL3NpenpsZWpzLmNvbS8KQ29weXJpZ2h0IDIwMTAsIFRoZSBEb2pvIEZvdW5kYXRpb24KUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCwgQlNELCBhbmQgR1BMIExpY2Vuc2VzLgoKRGF0ZTogU2F0IEZlYiAxMyAyMjozMzo0OCAyMDEwIC0wNTAwCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKalF1ZXJ5IFVJIDEuOAoKQ29weXJpZ2h0IChjKSAyMDEwIEFVVEhPUlMudHh0IChodHRwOi8vanF1ZXJ5dWkuY29tL2Fib3V0KQpEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgKE1JVC1MSUNFTlNFLnR4dCkKYW5kIEdQTCAoR1BMLUxJQ0VOU0UudHh0KSBsaWNlbnNlcy4KCmh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vVUkKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpqUXVlcnkgVUkgV2lkZ2V0IDEuOAoKQ29weXJpZ2h0IChjKSAyMDEwIEFVVEhPUlMudHh0IChodHRwOi8vanF1ZXJ5dWkuY29tL2Fib3V0KQpEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgKE1JVC1MSUNFTlNFLnR4dCkKYW5kIEdQTCAoR1BMLUxJQ0VOU0UudHh0KSBsaWNlbnNlcy4KCmh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vVUkvV2lkZ2V0CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKalF1ZXJ5IFVJIE1vdXNlIDEuOAoKQ29weXJpZ2h0IChjKSAyMDEwIEFVVEhPUlMudHh0IChodHRwOi8vanF1ZXJ5dWkuY29tL2Fib3V0KQpEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgKE1JVC1MSUNFTlNFLnR4dCkKYW5kIEdQTCAoR1BMLUxJQ0VOU0UudHh0KSBsaWNlbnNlcy4KCmh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vVUkvTW91c2UgIAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmpRdWVyeSBVSSBTb3J0YWJsZSAxLjgKCkNvcHlyaWdodCAoYykgMjAxMCBBVVRIT1JTLnR4dCAoaHR0cDovL2pxdWVyeXVpLmNvbS9hYm91dCkKRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIChNSVQtTElDRU5TRS50eHQpCmFuZCBHUEwgKEdQTC1MSUNFTlNFLnR4dCkgbGljZW5zZXMuCgpodHRwOi8vZG9jcy5qcXVlcnkuY29tL1VJL1NvcnRhYmxlcwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCkNhbGVuZGFyVmlldyBmb3IgalF1ZXJ5CgpCYXNlZCBvbiBDYWxlbmRhclZpZXcgZm9yIFByb3RvdHlwZSBodHRwOi8vY2FsZW5kYXJ2aWV3Lm9yZy8gd2hpY2ggaXMgYmFzZWQKb24gRHluYXJjaCBESFRNTCBDYWxlbmRhciBodHRwOi8vd3d3LmR5bmFyY2guY29tL3Byb2plY3RzL2NhbGVuZGFyL29sZC8uCgpDYWxlbmRhclZpZXcgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKUHVibGljIExpY2Vuc2UgKExHUEwpCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKRGF0ZS5mb3JtYXQoKQpzdHJpbmcgZm9ybWF0ICggc3RyaW5nIGZvcm1hdCApCkZvcm1hdHRpbmcgcnVsZXMgYWNjb3JkaW5nIHRvIGh0dHA6Ly9waHAubmV0L3N0cmZ0aW1lCgpDb3B5cmlnaHQgKEMpIDIwMDYgIERhbyBHb3R0d2FsZAoKQ29udGFjdCBpbmZvcm1hdGlvbjoKRGFvIEdvdHR3YWxkICA8ZGFvIGF0IGRlc2lnbi1ub2lyLmRlPgoKdmVyc2lvbiAgMC43CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKalF1ZXJ5IEZvcm0gUGx1Z2luCnZlcnNpb246IDIuNDMgKDEyLU1BUi0yMDEwKQoKRXhhbXBsZXMgYW5kIGRvY3VtZW50YXRpb24gYXQ6IGh0dHA6Ly9tYWxzdXAuY29tL2pxdWVyeS9mb3JtLwpEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgYW5kIEdQTCBsaWNlbnNlczoKICBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocAogIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKClRoZSBmaWxlcGlja2VyIGlzIGJhc2VkIG9uIGEgcGx1Z2luIG9mIFRpbnlNQ0UgdGhhdCBjb21lcyBieSBkZWZhdWx0IHdpdGggQ01TbXMuIApJJ20gbm90IHN1cmUgd2hvIGFjdHVhbGx5IGlzIHRoZSBhdXRob3Igb2YgdGhlIGZpbGVwaWNrZXIuIApUaW55TUNFIGZvciBDTVNtcyBpcyBkZXZlbG9wZWQvbWFpbnRhaW5lZCBieSBTaW1vbiBCcm93biwgU3RlZmFuIFKabGxpbiBhbmQgTW9ydGVuIFBvdWxzZW4uCgo=]]></data>
	</file>
	<file>
	  <filename>/doc/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/doc/license.txt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[CQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKCiBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAgICAgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCiBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KCgkJCSAgICBQcmVhbWJsZQoKICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCmZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCkxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwp1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5CnRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bwp5b3VyIHByb2dyYW1zLCB0b28uCgogIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQpoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCnRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAppZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAppbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCgogIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgpUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQpkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCgogIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0CnlvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCnNvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKcmlnaHRzLgoKICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCigyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCmRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCgogIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCnRoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCnNvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQp3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwp0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAphdXRob3JzJyByZXB1dGF0aW9ucy4KCiAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQpwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCnByb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQpwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgoKICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAptb2RpZmljYXRpb24gZm9sbG93LgoMCgkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCiAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgoKICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCmEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCnVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCm1lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6CnRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCmVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCmxhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCgpBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdApjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCnJ1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KaXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCgogIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncwpzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQpjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCm5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQphbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgoKWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCnlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCgogIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24Kb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZApkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKCiAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCgogICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCiAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCiAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCgogICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQogICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAogICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgogICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCiAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCiAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAogICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgogICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCgwKVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgppZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAphbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQpzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCm9uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgp0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQplbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCgpUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCmV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgpjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgoKSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQp3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KCiAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCnVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgpTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CgogICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQogICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCiAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKCiAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQogICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCiAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCgogICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCiAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQogICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAogICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCgpUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCm1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCmNvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55CmFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bwpjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCnNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQphbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQpmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQpvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAppdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCgpJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCmFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCmRpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdApjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgoMCiAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCmV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCnZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgoKICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCnByb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlClByb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCmFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKdGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCgogIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwp0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgpyZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCllvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCnRoaXMgTGljZW5zZS4KCiAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAppbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLApjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCm90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcwpMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91Cm1heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQphbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bwpyZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgoKSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCmFueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKY2lyY3Vtc3RhbmNlcy4KCkl0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQppbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCmdlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwp0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKaW1wb3NlIHRoYXQgY2hvaWNlLgoKVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCmJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgoMCiAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCm9yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCnRob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCnRoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgoKICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucwpvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCmFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgoKRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQpzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQpsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCmVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlClNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQpGb3VuZGF0aW9uLgoKICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCnByb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlClNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcwptYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscwpvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCm9mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgoKCQkJICAgIE5PIFdBUlJBTlRZCgogIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQpGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUwpQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRApPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgpNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTClRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsClJFUEFJUiBPUiBDT1JSRUNUSU9OLgoKICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCldJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCk9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCllPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSClBST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQpQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCgoJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCgwKCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKCiAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdApwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CmZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgoKICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAp0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5CmNvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0CnRoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgoKICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CiAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgoKICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCgogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKCgpBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KCklmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKCiAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgIG5hbWUgb2YgYXV0aG9yCiAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCiAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CiAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCgpUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQpiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KCllvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCnNjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCm5lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKCiAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQogIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgoKICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQoKVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCnByb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5CmNvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQpsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwKUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCg==]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/.htaccess</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PEZpbGVzIH4gIlwuKGdpZnxqcGd8anBlZ3xwbmcpJCI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgb3JkZXIgZGVueSxhbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIGFsbG93IGZyb20gYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCjwvRmlsZXM+Cg==]]></data>
	</file>
	<file>
	  <filename>/images/calendar.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAPjSURBVHjaYvz//z8DMujunvX/zp2zDIqKBgwVFZmMDEQAmB4VFWOG0tI0FD0AAcQAsgAZnzlz5j8IQGkGYjA+PQABxAKyRKVz9f8/n94x/P3ykaFOR5Dhy5cvDLdu3WIIWLT3PzMPP17X49LDwifEcKc8lBEggFhgCvmMHRl+PbkDdM1GhmfPnoExt3YAA5uMMgPIz/9BJNBFjIwQNiMwZP8DiZ9oeriAetiBer7dvgg2FyCA4BYw/mFg+PftO8PZs2fBLvn8+TPDPyU3Bsa/UHkGaFwBKUaI6QxMIC6anv+KbmCzYAAggBAWAA1iZuZkCMwoZhD7/4XhyR92hlVfOBkY/oDdDrHiP9jtDBAv/QfTyHpeMfIwLH7PCXcUCAAEENwCkEGsghIMi1/8BDqSA+xSDgkJBqa/EIOhAcMAChtIkEEIkJ5Fz38CxTjAFrKLS4LNggGAAAJbkPTnLkN5VBBUSJ+BdICpp7NjPZgGCCC4D/7/+89ACwAQQEwwxj9gMKDjdevXM6ioqjBIy8gw1Dc0MLx7/x5F/vGTJwy+fn4Mp8+cwdALAwABxITsA2R8+dJlhkWLFjJ4e3szFBQUMFy8eIFh9uzZDH9+/2H4+eMnw80bNxmmTZ0KjGQmBjZWNgz9MAAQQPAg+vfvH4rXzl84z/Dz5y+G4qISBjExMYYvwCT47etXht+/fzPcuHGDoaa2hgGh9y+GfhgACCAkC1DjwMnRmcHM1IxBXFyC4fr160AfXGTQ1tYB5gEmBi0tbYYVy1cyXLt2jaGishxo6V8M/TAAEEBMuMokkKvl5RUYVq9exZCamszAw8PDkJaWzsDExAS0hJGBnZ2dgYWFBeyrv0AfoOuHAYAAwhlEoFxZUVHGcPLUSYaK8koGPz9/BjY2NhR1f//+Yfj67Ss4XnAFEUAA4UymoAjeu28fg4y0NDhSV6xYzsDBwcng5enFwM3NDcmbwKD58gVowZ8/OJM5QACxICdTGPj58ycw6Z1m+AZ03a3btxgqqyvA4kpKygx2dnYMnFxcEB8AgwakBl0/MgAIIKw+ACW7ObPm4cw8MLWGBkYM9+48xJtRAQIIYcF/1DC8cfMGOB7ExcUZbgBT0YsXLxjMzM3h8cPLy8vw6OFDBkEhIbCYqYkpVgsAAgjJAlQJdTUNOFtWRg6rZmQ1OEKIASCAwBZw83AyiIgJUrUMApkJAgABBLbg7JnzDMuWrKKqBSAzQQAggOBBpKioSJPSFCAAD2WwAgAIg1CY/v8t6mNnZEINZOJllz3/gbnGB05SIOpWfrzt5S3t9E4VUnIwyQRDNHkzWgjtb44AAwBrATqlndxPggAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/images/sort.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOCAYAAAAWo42rAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAG9JREFUeNpiYMAE+lCMAhjR+JZAnABlLwDi4zAJZhyKQMAAiN8C8RNkheiKMBQzQt2TxYAfTAMplIHqxAcuMFAdEG01C5AQBmJfAgofg4LnJTQIcJkKCvgzsHB8gkMxPHaQYwZdMUoUMhCbKAACDAAFXhb05ZeJ9wAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Cg==]]></data>
	</file>
	<file>
	  <filename>/js/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/.htaccess</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PEZpbGVzICIqLmpzIj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBvcmRlciBkZW55LGFsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgYWxsb3cgZnJvbSBhbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPC9GaWxlcz4K]]></data>
	</file>
	<file>
	  <filename>/js/functions.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vDQovLyBNb2R1bGUgOiBBZHZhbmNlZENvbnRlbnQgKGMpIDIwMTAgYnkgR2VvcmcgQnVzY2ggKGdlb3JnLmJ1c2NoQGdteC5uZXQpDQovLyAgICAgICAgICBhIGNvbnRlbnQgbWFuYWdlbWVudCB0b29sIGZvciBDTVMgTWFkZSBTaW1wbGUNCi8vICAgICAgICAgIFRoZSBwcm9qZWN0cyBob21lcGFnZSBpcyBkZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvY29udGVudDINCi8vICAgICAgICAgIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNC0yMDEwIGJ5IFRlZCBLdWxwDQovLyAgICAgICAgICBUaGUgcHJvamVjdHMgaG9tZXBhZ2UgaXM6IGNtc21hZGVzaW1wbGUub3JnDQovLyBWZXJzaW9uOiAwLjcuMQ0KLy8gRmlsZSAgIDogZnVuY3Rpb25zLmpzDQovLyBMaWNlbnNlOiBHUEwNCi8vDQovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpBZHZhbmNlZENvbnRlbnQgPSBuZXcgT2JqZWN0KCk7DQoNCkFkdmFuY2VkQ29udGVudC5pbml0VGltZU91dE1pbiA9IDEwMDsgIC8vbXMNCkFkdmFuY2VkQ29udGVudC5pbml0VGltZU91dE1heCA9IDMwMDsgIC8vbXMNCkFkdmFuY2VkQ29udGVudC5sb2FkVGltZU91dE1pbiA9IDEwMDA7IC8vbXMNCkFkdmFuY2VkQ29udGVudC5sb2FkVGltZU91dE1heCA9IDMwMDA7IC8vbXMNCkFkdmFuY2VkQ29udGVudC5kZWxheU1pbiAgICAgICA9IDEwMDsgIC8vbXMNCkFkdmFuY2VkQ29udGVudC5kZWxheU1heCAgICAgICA9IDMwMDsgIC8vbXMNCg0KQWR2YW5jZWRDb250ZW50Lm1vZHVsZUlkICAgICA9ICcnOw0KQWR2YW5jZWRDb250ZW50LmluaXRHZW5lcmFsICA9IGZhbHNlOw0KQWR2YW5jZWRDb250ZW50LmluaXRVSSAgICAgICA9IGZhbHNlOw0KQWR2YW5jZWRDb250ZW50LmluaXRGb3JtICAgICA9IGZhbHNlOw0KQWR2YW5jZWRDb250ZW50LmluaXRDYWxlbmRhciA9IGZhbHNlOw0KDQpBZHZhbmNlZENvbnRlbnQuYWRkQmxvY2tGb3JtID0gZmFsc2U7DQoNCkFkdmFuY2VkQ29udGVudC5Jbml0ID0gZnVuY3Rpb24oKSB7DQoJDQoJQWR2YW5jZWRDb250ZW50LmluaXRUaW1lT3V0TWF4ID0gZXZhbChBZHZhbmNlZENvbnRlbnQuaW5pdFRpbWVPdXRNYXggLSBBZHZhbmNlZENvbnRlbnQuaW5pdFRpbWVPdXRNaW4pOw0KCUFkdmFuY2VkQ29udGVudC5sb2FkVGltZU91dE1heCA9IGV2YWwoQWR2YW5jZWRDb250ZW50LmxvYWRUaW1lT3V0TWF4IC0gQWR2YW5jZWRDb250ZW50LmxvYWRUaW1lT3V0TWluKTsNCglBZHZhbmNlZENvbnRlbnQuZGVsYXlNYXggICAgICAgPSBldmFsKEFkdmFuY2VkQ29udGVudC5kZWxheU1heCAtIEFkdmFuY2VkQ29udGVudC5kZWxheU1pbik7DQoJDQoJaWYoQWR2YW5jZWRDb250ZW50LmluaXRUaW1lT3V0TWF4IDwgMCkgew0KCQlBZHZhbmNlZENvbnRlbnQuaW5pdFRpbWVPdXRNYXggPSAwOw0KCX0NCglpZihBZHZhbmNlZENvbnRlbnQubG9hZFRpbWVPdXRNYXggPCAwKSB7DQoJCUFkdmFuY2VkQ29udGVudC5sb2FkVGltZU91dE1heCA9IDA7DQoJfQ0KCWlmKEFkdmFuY2VkQ29udGVudC5kZWxheU1heCA8IDApIHsNCgkJQWR2YW5jZWRDb250ZW50LmRlbGF5TWF4ID0gMDsNCgl9DQoJDQoJaWYgKHR5cGVvZiBqUXVlcnkgPT0gInVuZGVmaW5lZCIpIHsNCgkJQWR2YW5jZWRDb250ZW50LkxvYWRKUygnalF1ZXJ5JywnLi4vbW9kdWxlcy9BZHZhbmNlZENvbnRlbnQvanMvanEubWluLmpzJywgTWF0aC5mbG9vcihldmFsKE1hdGgucmFuZG9tKCkqQWR2YW5jZWRDb250ZW50LmluaXRUaW1lT3V0TWF4ICsgQWR2YW5jZWRDb250ZW50LmluaXRUaW1lT3V0TWluKSkpOw0KCX0NCgllbHNlIHsNCgkJaWYoIUFkdmFuY2VkQ29udGVudC5pbml0R2VuZXJhbCkgew0KCQkJQWR2YW5jZWRDb250ZW50LmluaXRHZW5lcmFsID0gdHJ1ZTsNCgkJCUFkdmFuY2VkQ29udGVudC5SZWFkeSgnZ2VuZXJhbCcpOw0KCQl9DQoJCWlmICh0eXBlb2YgalF1ZXJ5KCkuYWpheFN1Ym1pdCA9PSAidW5kZWZpbmVkIikgew0KCQkJQWR2YW5jZWRDb250ZW50LkxvYWRKUygnZm9ybScsJy4uL21vZHVsZXMvQWR2YW5jZWRDb250ZW50L2pzL2pxLmZvcm0ubWluLmpzJywgTWF0aC5mbG9vcihldmFsKE1hdGgucmFuZG9tKCkqQWR2YW5jZWRDb250ZW50LmluaXRUaW1lT3V0TWF4ICsgQWR2YW5jZWRDb250ZW50LmluaXRUaW1lT3V0TWluKSkpOw0KCQl9DQoJCWVsc2UgaWYoIUFkdmFuY2VkQ29udGVudC5pbml0Rm9ybSkgew0KCQkJQWR2YW5jZWRDb250ZW50LmluaXRGb3JtID0gdHJ1ZTsNCgkJCUFkdmFuY2VkQ29udGVudC5SZWFkeSgnZm9ybScpOw0KCQl9DQoJCWlmICh0eXBlb2YgalF1ZXJ5KCkuc29ydGFibGUgPT0gInVuZGVmaW5lZCIpIHsNCgkJCUFkdmFuY2VkQ29udGVudC5Mb2FkSlMoJ3VpJywnLi4vbW9kdWxlcy9BZHZhbmNlZENvbnRlbnQvanMvanEudWkuY3VzdG9tLm1pbi5qcycsIE1hdGguZmxvb3IoZXZhbChNYXRoLnJhbmRvbSgpKkFkdmFuY2VkQ29udGVudC5pbml0VGltZU91dE1heCArIEFkdmFuY2VkQ29udGVudC5pbml0VGltZU91dE1pbikpKTsNCgkJfQ0KCQllbHNlIGlmKCFBZHZhbmNlZENvbnRlbnQuaW5pdFVJKSB7DQoJCQlBZHZhbmNlZENvbnRlbnQuaW5pdFVJID0gdHJ1ZTsNCgkJCUFkdmFuY2VkQ29udGVudC5SZWFkeSgndWknKTsNCgkJfQ0KCQlpZiAodHlwZW9mIGpRdWVyeSgpLmNhbGVuZGFyID09ICJ1bmRlZmluZWQiKSB7DQoJCQlBZHZhbmNlZENvbnRlbnQuTG9hZEpTKCdjYWxlbmRhcicsJy4uL21vZHVsZXMvQWR2YW5jZWRDb250ZW50L2pzL2pxLmNhbGVuZGFyLmpzJywgTWF0aC5mbG9vcihldmFsKE1hdGgucmFuZG9tKCkqQWR2YW5jZWRDb250ZW50LmluaXRUaW1lT3V0TWF4ICsgQWR2YW5jZWRDb250ZW50LmluaXRUaW1lT3V0TWluKSkpOw0KCQl9DQoJCWVsc2UgaWYoIUFkdmFuY2VkQ29udGVudC5pbml0Q2FsZW5kYXIpIHsNCgkJCUFkdmFuY2VkQ29udGVudC5pbml0Q2FsZW5kYXIgPSB0cnVlOw0KCQkJQWR2YW5jZWRDb250ZW50LlJlYWR5KCdjYWxlbmRhcicpOw0KCQl9DQoJfQ0KfQ0KDQpBZHZhbmNlZENvbnRlbnQuTG9hZEpTID0gZnVuY3Rpb24gKGxvYWRUeXBlLCB1cmwsIHRpbWVPdXQsIHRpbWVFbGFwc2VkLCB1cmxMb2FkZWQpIHsNCgkNCglpZih0eXBlb2YgbG9hZFR5cGUgPT0gJ3VuZGVmaW5lZCcgfHwgbG9hZFR5cGUgPT0gJycpDQoJCXJldHVybjsNCgkNCglpZih0eXBlb2YgdXJsID09ICd1bmRlZmluZWQnIHx8IHVybCA9PSAnJykNCgkJcmV0dXJuOw0KCQ0KCWlmKHR5cGVvZiB1cmxMb2FkZWQgPT0gJ3VuZGVmaW5lZCcpDQoJCXZhciB1cmxMb2FkZWQgPSBmYWxzZTsNCgkNCglpZih0eXBlb2YgdGltZU91dCA9PSAndW5kZWZpbmVkJyB8fCB0aW1lT3V0ID09IDApDQoJCXZhciB0aW1lT3V0ID0gQWR2YW5jZWRDb250ZW50LmxvYWRUaW1lT3V0TWF4Ow0KCQ0KCWlmKHR5cGVvZiB0aW1lRWxhcHNlZCA9PSAndW5kZWZpbmVkJyB8fCB0aW1lRWxhcHNlZCA9PSAnJykNCgkJdmFyIHRpbWVFbGFwc2VkID0gMDsNCgkNCglzd2l0Y2gobG9hZFR5cGUpIHsNCgkJDQoJCWNhc2UgJ2pRdWVyeSc6DQoJCQlpZiAodHlwZW9mIGpRdWVyeSA9PSAidW5kZWZpbmVkIikgew0KCQkJCWlmICh0aW1lRWxhcHNlZCA8PSB0aW1lT3V0KSB7DQoJCQkJCXZhciByYW5kb21UaW1lID0gTWF0aC5mbG9vcihldmFsKE1hdGgucmFuZG9tKCkqQWR2YW5jZWRDb250ZW50LmRlbGF5TWF4ICsgQWR2YW5jZWRDb250ZW50LmRlbGF5TWluKSk7DQoJCQkJCXNldFRpbWVvdXQoIkFkdmFuY2VkQ29udGVudC5Mb2FkSlMoJ2pRdWVyeScsICciICsgdXJsICsgIicsICIgKyB0aW1lT3V0ICsgIiwgIiArIGV2YWwodGltZUVsYXBzZWQgKyByYW5kb21UaW1lKSArICIsICIgKyBmYWxzZSArICIpIiwgIHJhbmRvbVRpbWUpOw0KCQkJCX0gZWxzZSBpZiAoIXVybExvYWRlZCAmJiB1cmwgIT0gJycpIHsNCgkJCQkJQWR2YW5jZWRDb250ZW50LkxvYWRKUy5HZXRTY3JpcHQodXJsKTsNCgkJCQkJQWR2YW5jZWRDb250ZW50LkxvYWRKUygnalF1ZXJ5JywgdXJsLCBNYXRoLmZsb29yKGV2YWwoTWF0aC5yYW5kb20oKSpBZHZhbmNlZENvbnRlbnQubG9hZFRpbWVPdXRNYXggKyBBZHZhbmNlZENvbnRlbnQubG9hZFRpbWVPdXRNaW4pKSwgMCwgdHJ1ZSk7DQoJCQkJfQ0KCQkJCWVsc2Ugew0KCQkJCQlhbGVydCgiRXJyb3I6IFRpbWVkIG91dCB3aGlsZSBsb2FkaW5nIGpzICciICsgdXJsICsgIiciKTsNCgkJCQl9DQoJCQl9DQoJCQllbHNlIHsNCgkJCQlpZighQWR2YW5jZWRDb250ZW50LmluaXRHZW5lcmFsKSB7DQoJCQkJCUFkdmFuY2VkQ29udGVudC5pbml0R2VuZXJhbCA9IHRydWU7DQoJCQkJCUFkdmFuY2VkQ29udGVudC5SZWFkeSgnZ2VuZXJhbCcpOw0KCQkJCX0NCgkJCQlpZiAoQWR2YW5jZWRDb250ZW50LnBsdWdpbnMgIT0gIiIpIHsNCgkJCQkJQWR2YW5jZWRDb250ZW50LkluaXQoKTsNCgkJCQl9DQoJCQl9DQoJCQlicmVhazsNCgkJDQoJCWNhc2UgJ2Zvcm0nOg0KCQkJaWYgKHR5cGVvZiBqUXVlcnkoKS5hamF4U3VibWl0ID09ICJ1bmRlZmluZWQiKSB7DQoJCQkJaWYgKHRpbWVFbGFwc2VkIDw9IHRpbWVPdXQpIHsNCgkJCQkJdmFyIHJhbmRvbVRpbWUgPSBNYXRoLmZsb29yKGV2YWwoTWF0aC5yYW5kb20oKSpBZHZhbmNlZENvbnRlbnQuZGVsYXlNYXggKyBBZHZhbmNlZENvbnRlbnQuZGVsYXlNaW4pKTsNCgkJCQkJc2V0VGltZW91dCgiQWR2YW5jZWRDb250ZW50LkxvYWRKUygnZm9ybScsICciICsgdXJsICsgIicsICIgKyB0aW1lT3V0ICsgIiwgIiArIGV2YWwodGltZUVsYXBzZWQgKyByYW5kb21UaW1lKSArICIsICIgKyBmYWxzZSArICIpIiwgIHJhbmRvbVRpbWUpOw0KCQkJCX0gZWxzZSBpZiAoIXVybExvYWRlZCAmJiB1cmwgIT0gJycpew0KCQkJCQlBZHZhbmNlZENvbnRlbnQuTG9hZEpTLkdldFNjcmlwdCh1cmwpOw0KCQkJCQlBZHZhbmNlZENvbnRlbnQuTG9hZEpTKCdmb3JtJywgdXJsLCBNYXRoLmZsb29yKGV2YWwoTWF0aC5yYW5kb20oKSpBZHZhbmNlZENvbnRlbnQubG9hZFRpbWVPdXRNYXggKyBBZHZhbmNlZENvbnRlbnQubG9hZFRpbWVPdXRNaW4pKSwgMCwgdHJ1ZSk7DQoJCQkJfQ0KCQkJCWVsc2Ugew0KCQkJCQlhbGVydCgiRXJyb3I6IFRpbWVkIG91dCB3aGlsZSBsb2FkaW5nIGpzICciICsgdXJsICsgIiciKTsNCgkJCQl9DQoJCQl9DQoJCQllbHNlIGlmKCFBZHZhbmNlZENvbnRlbnQuaW5pdEZvcm0pIHsNCgkJCQlBZHZhbmNlZENvbnRlbnQuaW5pdEZvcm0gPSB0cnVlOw0KCQkJCUFkdmFuY2VkQ29udGVudC5SZWFkeSgnZm9ybScpOw0KCQkJfQ0KCQkJYnJlYWs7DQoJCQ0KCQljYXNlICd1aSc6DQoJCQlpZiAodHlwZW9mIGpRdWVyeSgpLnNvcnRhYmxlID09ICJ1bmRlZmluZWQiKSB7DQoJCQkJaWYgKHRpbWVFbGFwc2VkIDw9IHRpbWVPdXQpIHsNCgkJCQkJdmFyIHJhbmRvbVRpbWUgPSBNYXRoLmZsb29yKGV2YWwoTWF0aC5yYW5kb20oKSpBZHZhbmNlZENvbnRlbnQuZGVsYXlNYXggKyBBZHZhbmNlZENvbnRlbnQuZGVsYXlNaW4pKTsNCgkJCQkJc2V0VGltZW91dCgiQWR2YW5jZWRDb250ZW50LkxvYWRKUygndWknLCAnIiArIHVybCArICInLCAiICsgdGltZU91dCArICIsICIgKyBldmFsKHRpbWVFbGFwc2VkICsgcmFuZG9tVGltZSkgKyAiLCAiICsgZmFsc2UgKyAiKSIsICByYW5kb21UaW1lKTsNCgkJCQl9IGVsc2UgaWYgKCF1cmxMb2FkZWQgJiYgdXJsICE9ICcnKXsNCgkJCQkJQWR2YW5jZWRDb250ZW50LkxvYWRKUy5HZXRTY3JpcHQodXJsKTsNCgkJCQkJQWR2YW5jZWRDb250ZW50LkxvYWRKUygndWknLCB1cmwsIE1hdGguZmxvb3IoZXZhbChNYXRoLnJhbmRvbSgpKkFkdmFuY2VkQ29udGVudC5sb2FkVGltZU91dE1heCArIEFkdmFuY2VkQ29udGVudC5sb2FkVGltZU91dE1pbikpLCAwLCB0cnVlKTsNCgkJCQl9DQoJCQkJZWxzZSB7DQoJCQkJCWFsZXJ0KCJFcnJvcjogVGltZWQgb3V0IHdoaWxlIGxvYWRpbmcganMgJyIgKyB1cmwgKyAiJyIpOw0KCQkJCX0NCgkJCX0NCgkJCWVsc2UgaWYoIUFkdmFuY2VkQ29udGVudC5pbml0VUkpIHsNCgkJCQlBZHZhbmNlZENvbnRlbnQuaW5pdFVJID0gdHJ1ZTsNCgkJCQlBZHZhbmNlZENvbnRlbnQuUmVhZHkoJ3VpJyk7DQoJCQl9DQoJCQlicmVhazsNCgkJDQoJCWNhc2UgJ2NhbGVuZGFyJzoNCgkJCWlmICh0eXBlb2YgalF1ZXJ5KCkuY2FsZW5kYXIgPT0gInVuZGVmaW5lZCIpIHsNCgkJCQlpZiAodGltZUVsYXBzZWQgPD0gdGltZU91dCkgew0KCQkJCQl2YXIgcmFuZG9tVGltZSA9IE1hdGguZmxvb3IoZXZhbChNYXRoLnJhbmRvbSgpKkFkdmFuY2VkQ29udGVudC5kZWxheU1heCArIEFkdmFuY2VkQ29udGVudC5kZWxheU1pbikpOw0KCQkJCQlzZXRUaW1lb3V0KCJBZHZhbmNlZENvbnRlbnQuTG9hZEpTKCdjYWxlbmRhcicsICciICsgdXJsICsgIicsICIgKyB0aW1lT3V0ICsgIiwgIiArIGV2YWwodGltZUVsYXBzZWQgKyByYW5kb21UaW1lKSArICIsICIgKyBmYWxzZSArICIpIiwgIHJhbmRvbVRpbWUpOw0KCQkJCX0gZWxzZSBpZiAoIXVybExvYWRlZCAmJiB1cmwgIT0gJycpew0KCQkJCQlBZHZhbmNlZENvbnRlbnQuTG9hZEpTLkdldFNjcmlwdCh1cmwpOw0KCQkJCQlBZHZhbmNlZENvbnRlbnQuTG9hZEpTKCdjYWxlbmRhcicsIHVybCwgTWF0aC5mbG9vcihldmFsKE1hdGgucmFuZG9tKCkqQWR2YW5jZWRDb250ZW50LmxvYWRUaW1lT3V0TWF4ICsgQWR2YW5jZWRDb250ZW50LmxvYWRUaW1lT3V0TWluKSksIDAsIHRydWUpOw0KCQkJCX0NCgkJCQllbHNlIHsNCgkJCQkJYWxlcnQoIkVycm9yOiBUaW1lZCBvdXQgd2hpbGUgbG9hZGluZyBqcyAnIiArIHVybCArICInIik7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZSBpZighQWR2YW5jZWRDb250ZW50LmluaXRDYWxlbmRhcikgew0KCQkJCUFkdmFuY2VkQ29udGVudC5pbml0Q2FsZW5kYXIgPSB0cnVlOw0KCQkJCUFkdmFuY2VkQ29udGVudC5SZWFkeSgnY2FsZW5kYXInKTsNCgkJCX0NCgkJCWJyZWFrOw0KCQkJDQoJCWRlZmF1bHQ6IGJyZWFrOw0KCX0NCn0NCg0KQWR2YW5jZWRDb250ZW50LkxvYWRKUy5HZXRTY3JpcHQgPSBmdW5jdGlvbih1cmwpIHsNCgkNCglpZih0eXBlb2YgdXJsID09ICd1bmRlZmluZWQnIHx8IHVybCA9PSAnJykNCgkJcmV0dXJuOw0KCQ0KCXZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCglzY3JpcHQuc2V0QXR0cmlidXRlKCJ0eXBlIiwgInRleHQvamF2YXNjcmlwdCIpOw0KCXNjcmlwdC5zZXRBdHRyaWJ1dGUoInNyYyIsIHVybCk7DQoJaWYgKHR5cGVvZiBzY3JpcHQgIT0gInVuZGVmaW5lZCIpDQoJCWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0uYXBwZW5kQ2hpbGQoc2NyaXB0KTsNCgkNCn0NCg0KQWR2YW5jZWRDb250ZW50LlJlYWR5ID0gZnVuY3Rpb24gKGluaXRUeXBlKSB7DQoJc3dpdGNoKGluaXRUeXBlKSB7DQoJCQ0KCQljYXNlICdnZW5lcmFsJzoNCgkJCUFkdmFuY2VkQ29udGVudC5pbml0R2VuZXJhbCA9IHRydWU7DQoJCQlqUXVlcnkubm9Db25mbGljdCgpOw0KCQkJYnJlYWs7DQoJCQkNCgkJY2FzZSAndWknOg0KCQkJQWR2YW5jZWRDb250ZW50LmluaXRVSSA9IHRydWU7DQoJCQlqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgew0KCQkJCWpRdWVyeSgnLnNvcnRhYmxlX3dyYXBwZXInKS5zb3J0YWJsZSh7DQoJCQkJCWl0ZW1zOiAnLnNvcnRhYmxlJywgDQoJCQkJCWhhbmRsZTogJy5zb3J0YWJsZV9oYW5kbGVyJywgDQoJCQkJCWF4aXM6ICd5Jw0KCQkJCX0pOw0KCQkJCWpRdWVyeSgnLnNvcnRhYmxlX2hhbmRsZXInKS5kaXNhYmxlU2VsZWN0aW9uKCk7DQoJCQl9KTsNCgkJCWJyZWFrOw0KCQkJDQoJCWNhc2UgJ2Zvcm0nOg0KCQkJQWR2YW5jZWRDb250ZW50LmluaXRGb3JtID0gdHJ1ZTsNCgkJCWJyZWFrOw0KCQkJDQoJCWNhc2UgJ2NhbGVuZGFyJzoNCgkJCUFkdmFuY2VkQ29udGVudC5pbml0Q2FsZW5kYXIgPSB0cnVlOw0KCQkJalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsNCgkJCQlqUXVlcnkoJyNBZHZhbmNlZENvbnRlbnRTdGFydERhdGVQaWNrZXJEaXNwbGF5JykuY2FsZW5kYXIoew0KCQkJCQl0cmlnZ2VyRWxlbWVudDogJyNBZHZhbmNlZENvbnRlbnRTdGFydERhdGVQaWNrZXJUcmlnZ2VyJywgDQoJCQkJCWRhdGVGb3JtYXQ6ICcleCcsIA0KCQkJCQljbG9zZUhhbmRsZXI6IGZ1bmN0aW9uIChjYWxlbmRhcikgew0KCQkJCQkJalF1ZXJ5KCcjQWR2YW5jZWRDb250ZW50U3RhcnREYXRlJykudmFsKGV2YWwoY2FsZW5kYXIuZGF0ZS5nZXRUaW1lKCkvMTAwMCkpOyANCgkJCQkJCWNhbGVuZGFyLmNvbnRhaW5lci5oaWRlKCk7DQoJCQkJCX0NCgkJCQl9KTsNCgkJCQkNCgkJCQlqUXVlcnkoJyNBZHZhbmNlZENvbnRlbnRFbmREYXRlUGlja2VyRGlzcGxheScpLmNhbGVuZGFyKHsNCgkJCQkJdHJpZ2dlckVsZW1lbnQ6ICcjQWR2YW5jZWRDb250ZW50RW5kRGF0ZVBpY2tlclRyaWdnZXInLCANCgkJCQkJZGF0ZUZvcm1hdDogJyV4JywgDQoJCQkJCWNsb3NlSGFuZGxlcjogZnVuY3Rpb24gKGNhbGVuZGFyKSB7DQoJCQkJCQlqUXVlcnkoJyNBZHZhbmNlZENvbnRlbnRFbmREYXRlJykudmFsKGV2YWwoY2FsZW5kYXIuZGF0ZS5nZXRUaW1lKCkvMTAwMCkpOyANCgkJCQkJCWNhbGVuZGFyLmNvbnRhaW5lci5oaWRlKCk7DQoJCQkJCX0NCgkJCQl9KTsNCgkJCQkNCgkJCQlpZih0eXBlb2YgQWR2YW5jZWRDb250ZW50LkluaXRDYWxlbmRhckNvbnRlbnRCbG9ja3MgPT0gJ2Z1bmN0aW9uJykNCgkJCQkJQWR2YW5jZWRDb250ZW50LkluaXRDYWxlbmRhckNvbnRlbnRCbG9ja3MoKTsNCgkJCQkNCgkJCX0pOw0KCQkJYnJlYWs7DQoJCQkNCgkJZGVmYXVsdDogYnJlYWs7DQoJfQ0KfQ0KDQpBZHZhbmNlZENvbnRlbnQuVG9nZ2xlQmxvY2sgPSBmdW5jdGlvbiAodGFiSWQsIG5hdmJhcl9pZCkgew0KCXZhciBuYXZiYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChuYXZiYXJfaWQpOw0KICAgIHZhciB0YWJzICAgPSBuYXZiYXIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpOw0KCQ0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFicy5sZW5ndGg7IGkgKz0gMSkgew0KCQkvL3RhYnNbaV0ub25tb3VzZWRvd24gPSBmdW5jdGlvbigpIHsNCgkJZm9yICh2YXIgaiA9IDA7IGogPCB0YWJzLmxlbmd0aDsgaiArPSAxKSB7DQoJCQl0YWJzW2pdLmNsYXNzTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICcnOw0KCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFic1tqXS5pZCArICJfYyIpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQoJCX0NCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFiSWQpLmNsYXNzTmFtZSAgICAgICAgICAgID0gJ2FjdGl2ZSc7DQoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYklkICsgIl9jIikuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQoJCXJldHVybiB0cnVlOw0KCQkvL30NCiAgICB9DQp9DQoNCkFkdmFuY2VkQ29udGVudC5TdWJtaXRGb3JtID0gZnVuY3Rpb24gKGJ1dHRvbiwgdGFyZ2V0SWQpIHsNCgl2YXIgZm9ybSA9IGpRdWVyeShidXR0b24pLnBhcmVudHMoJ2Zvcm06Zmlyc3QnKTsNCglpZihmb3JtLmxlbmd0aCkgew0KCQlpZih0YXJnZXRJZCAhPSAnJyAmJiAhZm9ybS5wYXJlbnRzKCcjJyt0YXJnZXRJZCkubGVuZ3RoKSB7DQoJCQlqUXVlcnkoJyMnK3RhcmdldElkKS5odG1sKCcnKTsNCgkJfQ0KCQl2YXIgb3B0aW9ucyA9IHsNCgkJCXN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3BvbnNlVGV4dCkgew0KCQkJCWlmKHJlc3BvbnNlVGV4dCAhPSAnJyAmJiB0YXJnZXRJZCAhPSAnJykgew0KCQkJCQlqUXVlcnkoJyMnK3RhcmdldElkKS5odG1sKHJlc3BvbnNlVGV4dCk7DQoJCQkJfQ0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJfQ0KCQlmb3JtLmFwcGVuZCgnPGlucHV0IHR5cGU9ImhpZGRlbiIgY2xhc3M9IkFkdmFuY2VkQ29udGVudF9BamF4RmllbGRzIiBuYW1lPSJkaXNhYmxlX3RoZW1lIiB2YWx1ZT0iMSIgLz4nKTsNCgkJZm9ybS5hcHBlbmQoJzxpbnB1dCB0eXBlPSJoaWRkZW4iIGNsYXNzPSJBZHZhbmNlZENvbnRlbnRfQWpheEZpZWxkcyIgbmFtZT0iJytidXR0b24ubmFtZSsnIiB2YWx1ZT0iJytidXR0b24udmFsdWUrJyIgLz4nKTsNCgkJZm9ybS5hcHBlbmQoJzxpbnB1dCB0eXBlPSJoaWRkZW4iIGNsYXNzPSJBZHZhbmNlZENvbnRlbnRfQWpheEZpZWxkcyIgbmFtZT0iJytBZHZhbmNlZENvbnRlbnQubW9kdWxlSWQrJ2FqYXgiIHZhbHVlPSIxIiAvPicpOw0KCQlmb3JtLmFqYXhTdWJtaXQob3B0aW9ucyk7DQoJfQ0KCXJldHVybiBmYWxzZTsNCn0NCg0KQWR2YW5jZWRDb250ZW50LlNlbGVjdEFsbCA9IGZ1bmN0aW9uIChvYmopIHsNCglpZiAob2JqLnZhbHVlID09IDEpIHsNCgkJalF1ZXJ5KCdpbnB1dFtuYW1lXj0iJytvYmouaWQrJy0iXScpLmF0dHIoJ2NoZWNrZWQnLCdjaGVja2VkJyk7DQoJCW9iai52YWx1ZSA9IDA7DQoJfQ0KCWVsc2Ugew0KCQlqUXVlcnkoJ2lucHV0W25hbWVePSInK29iai5pZCsnLSJdJykucmVtb3ZlQXR0cignY2hlY2tlZCcpOw0KCQlvYmoudmFsdWUgPSAxOw0KCX0NCn0NCg0KQWR2YW5jZWRDb250ZW50LkFkZENvbnRlbnRCbG9jayA9IGZ1bmN0aW9uKGJsb2NrSWQpIHsNCgkJDQoJaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0FkdmFuY2VkQ29udGVudF93cmFwcGVyJykgPT0gbnVsbCkgew0KCQkNCgkJLy8gY3JlYXRlIGdsb2JhbCB3cmFwcGVyDQoJCWpRdWVyeSgnYm9keScpLmFwcGVuZCgnPGRpdiBpZD0iQWR2YW5jZWRDb250ZW50X3dyYXBwZXIiPjwvZGl2PicpOw0KCQkNCgkJLy8gYWRkIGNvbnRlbnQNCgkJalF1ZXJ5KCcjQWR2YW5jZWRDb250ZW50X3dyYXBwZXInKS5odG1sKCc8ZGl2IGlkPSJBZHZhbmNlZENvbnRlbnRfYmFja2dyb3VuZCI+PC9kaXY+PGRpdiBpZD0iQWR2YW5jZWRDb250ZW50Ij48ZGl2IGlkPSJBZHZhbmNlZENvbnRlbnRfdGl0bGViYXIiPjxhIGlkPSJBZHZhbmNlZENvbnRlbnRfY2xvc2UiIHRpdGxlPSInICsgQWR2YW5jZWRDb250ZW50LmNsb3NlVGl0bGUgKyAnIiBocmVmPSIjIiBvbmNsaWNrPSJBZHZhbmNlZENvbnRlbnQuQ2xvc2UoKTtyZXR1cm4gZmFsc2U7Ij5bWF08L2E+PGgzPkZpbGVQaWNrZXI8L2gzPjwvZGl2PjxkaXYgaWQ9IkFkdmFuY2VkQ29udGVudF9jb250ZW50Ij48L2Rpdj48L2Rpdj4nKTsNCgl9DQoJCQ0KCS8vIGhpZGUgaXQgZmlyc3QNCglqUXVlcnkoJyNBZHZhbmNlZENvbnRlbnRfYmFja2dyb3VuZCcpLmZhZGVUbygnZmFzdCcsIDApOw0KCS8vIG1ha2UgdmlzaWJsZQ0KCWpRdWVyeSgnI0FkdmFuY2VkQ29udGVudF93cmFwcGVyJykuY3NzKCdvcGFjaXR5JywgMSk7DQoJLy8gc2V0IHRvIGZyb250DQoJalF1ZXJ5KCcjQWR2YW5jZWRDb250ZW50X3dyYXBwZXInKS5jc3MoJ3otaW5kZXgnLCA5OTk5KTsNCgkNCgkvLyBoaWRlIGl0IGZpcnN0DQoJalF1ZXJ5KCcjQWR2YW5jZWRDb250ZW50JykuZmFkZVRvKCdmYXN0JywgMCk7DQoJalF1ZXJ5KCcjQWR2YW5jZWRDb250ZW50X2NvbnRlbnQnKS5mYWRlVG8oJ2Zhc3QnLCAwKTsNCgkNCgkvLyBzZXQgd3JhcHBlciBkaXNwbGF5DQoJalF1ZXJ5KCcjQWR2YW5jZWRDb250ZW50X3dyYXBwZXInKS5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKTsNCgkvLyBzZXQgYmFja2dyb3VuZCBkaXNwbGF5DQoJalF1ZXJ5KCcjQWR2YW5jZWRDb250ZW50X2JhY2tncm91bmQnKS5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKTsNCgkNCgkvLyBmYWRlIGluIGJhY2tncm91bmQNCglqUXVlcnkoJyNBZHZhbmNlZENvbnRlbnRfYmFja2dyb3VuZCcpLmZhZGVUbygzMDAsIDAuNjUsIGZ1bmN0aW9uICgpIHsNCgkJLy8gc2V0IGZpbGVwaWNrZXIgZGlzcGxheQ0KCQlqUXVlcnkoJyNBZHZhbmNlZENvbnRlbnQnKS5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKTsNCgkJLy8gZmFkZSBpbg0KCQlqUXVlcnkoJyNBZHZhbmNlZENvbnRlbnQnKS5mYWRlVG8oMzAwLCAxLCBmdW5jdGlvbigpIHsgDQoJCQlqUXVlcnkoJyNBZHZhbmNlZENvbnRlbnRfbG9hZGluZ19pbWcnKS5jc3MoJ2Rpc3BsYXknLCdibG9jaycpOw0KCQl9KTsNCgkJQWR2YW5jZWRDb250ZW50LmFkZEJsb2NrRm9ybSA9IHRydWU7DQoJfSk7DQoJcmV0dXJuIGZhbHNlOw0KfQ0KDQpBZHZhbmNlZENvbnRlbnQuQ2xvc2UgPSBmdW5jdGlvbiAoKSB7DQoJalF1ZXJ5KCcjQWR2YW5jZWRDb250ZW50X3dyYXBwZXInKS5mYWRlVG8oMzAwLDAsZnVuY3Rpb24oKXsNCgkJalF1ZXJ5KCcjQWR2YW5jZWRDb250ZW50X3dyYXBwZXInKS5jc3MoJ3otaW5kZXgnLC05OTk5KTsNCgkJalF1ZXJ5KCcjQWR2YW5jZWRDb250ZW50X3dyYXBwZXInKS5jc3MoJ2Rpc3BsYXknLCdub25lJyk7DQoJCWpRdWVyeSgnI0FkdmFuY2VkQ29udGVudF93cmFwcGVyJykucmVtb3ZlKCk7DQoJCUFkdmFuY2VkQ29udGVudC5hZGRCbG9ja0Zvcm0gPSBmYWxzZTsNCgl9KTsNCglyZXR1cm4gZmFsc2U7DQp9DQoNCkFkdmFuY2VkQ29udGVudC5SZW1vdmVDb250ZW50QmxvY2sgPSBmdW5jdGlvbihibG9ja0lkKSB7DQoJcmV0dXJuIGZhbHNlOw0KfQ==]]></data>
	</file>
	<file>
	  <filename>/js/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/js/jq.calendar.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIENhbGVuZGFyVmlldyBmb3IgalF1ZXJ5CiAqCiAqIEJhc2VkIG9uIENhbGVuZGFyVmlldyBmb3IgUHJvdG90eXBlIGh0dHA6Ly9jYWxlbmRhcnZpZXcub3JnLyB3aGljaCBpcyBiYXNlZAogKiBvbiBEeW5hcmNoIERIVE1MIENhbGVuZGFyIGh0dHA6Ly93d3cuZHluYXJjaC5jb20vcHJvamVjdHMvY2FsZW5kYXIvb2xkLy4KICoKICogQ2FsZW5kYXJWaWV3IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsCiAqIFB1YmxpYyBMaWNlbnNlIChMR1BMKQogKgogKiBVc2FnZToKICogICBqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewogKiAgICAgJCgnI2RhdGVfaW5wdXQnKS5jYWxlbmRhcigpOwogKiAgIH0KICoKICogICBqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewogKiAgICAgJCgnI2RhdGVfaW5wdXQnKS5jYWxlbmRhcih7dHJpZ2dlckVsZW1lbnQ6ICcjZGF0ZV9pbnB1dF90cmlnZ2VyJ30pOwogKiAgIH0KICoKICogICBqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewogKiAgICAgJCgnI2RhdGVfaW5wdXQnKS5jYWxlbmRhcih7cGFyZW50RWxlbWVudDogJyNjYWxlbmRhcl9jb250YWluZXInfSk7CiAqICAgfQogKgogKiBEZWZhdWx0IG9wdGlvbnM6CiAqICAgdHJpZ2dlckVsZW1lbnQ6IG51bGwsIC8vIFBvcHVwIGNhbGVuZGFyCiAqICAgcGFyZW50RWxlbWVudDogbnVsbCwgLy8gSW5saW5lIGNhbGVuZGFyCiAqICAgbWluWWVhcjogMTkwMCwKICogICBtYXhZZWFyOiAyMTAwLAogKiAgIGZpcnN0RGF5T2ZXZWVrOiAxLCAvLyBNb25kYXkKICogICB3ZWVrZW5kOiAiMCw2IiwgLy8gU3VuZGF5IGFuZCBTYXR1cmRheQogKiAgIGRhdGVGb3JtYXQ6ICclWS0lbS0lZCcsCiAqICAgc2VsZWN0SGFuZGxlcjogbnVsbCwgLy8gV2lsbCB1c2UgZGVmYXVsdCBzZWxlY3QgaGFuZGxlcgogKiAgIGNsb3NlSGFuZGxlcjogbnVsbCAvLyBXaWxsIHVzZSBkZWZhdWx0IGNsb3NlIGhhbmRsZXIKICovCjsoZnVuY3Rpb24oJCkgewoJdmFyIENhbGVuZGFyID0gZnVuY3Rpb24oKSB7CgkJdGhpcy5kYXRlID0gbmV3IERhdGUoKTsKCX07CgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCS8vIENvbnN0YW50cwoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCglDYWxlbmRhci5WRVJTSU9OID0gJzEuMic7CglDYWxlbmRhci5UT0RBWSA9ICdUb2RheSc7CgoJQ2FsZW5kYXIuREFZX05BTUVTID0gbmV3IEFycmF5KAoJCSdTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheScKCSk7CgoJQ2FsZW5kYXIuU0hPUlRfREFZX05BTUVTID0gbmV3IEFycmF5KCdTdScsICdNbycsICdUdScsICdXZScsICdUaCcsICdGcicsICdTYScpOwoKCUNhbGVuZGFyLk1PTlRIX05BTUVTID0gbmV3IEFycmF5KAoJCSdKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywgJ0p1bHknLCAnQXVndXN0JywKCQknU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInCgkpOwoKCUNhbGVuZGFyLlNIT1JUX01PTlRIX05BTUVTID0gbmV3IEFycmF5KAoJCSdKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYycKCSk7CgoJQ2FsZW5kYXIuTkFWX1BSRVZJT1VTX1lFQVIgID0gLTI7CglDYWxlbmRhci5OQVZfUFJFVklPVVNfTU9OVEggPSAtMTsKCUNhbGVuZGFyLk5BVl9UT0RBWSAgICAgICAgICA9ICAwOwoJQ2FsZW5kYXIuTkFWX05FWFRfTU9OVEggICAgID0gIDE7CglDYWxlbmRhci5OQVZfTkVYVF9ZRUFSICAgICAgPSAgMjsKCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJLy8gU3RhdGljIE1ldGhvZHMKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJLyoqCgkgKiBUaGlzIGdldHMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBhIG1vdXNlIGJ1dHRvbiBhbnl3aGVyZSBpbiB0aGUKCSAqIGRvY3VtZW50LCBpZiB0aGUgY2FsZW5kYXIgaXMgc2hvd24uIElmIHRoZSBjbGljayB3YXMgb3V0c2lkZSB0aGUgb3BlbgoJICogY2FsZW5kYXIgdGhpcyBmdW5jdGlvbiBjbG9zZXMgaXQuCgkgKgoJICogQHBhcmFtIGV2ZW50CgkgKi8KCUNhbGVuZGFyLl9jaGVja0NhbGVuZGFyID0gZnVuY3Rpb24oZXZlbnQpIHsKCQlpZiAoIXdpbmRvdy5fcG9wdXBDYWxlbmRhcikgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoKCQlpZiAoJChldmVudC50YXJnZXQpLnBhcmVudHMoKS5pbmRleCgkKHdpbmRvdy5fcG9wdXBDYWxlbmRhci5jb250YWluZXIpKSA+PSAwKSB7CgkJCXJldHVybiBmYWxzZTsKCQl9CgoJCXdpbmRvdy5fcG9wdXBDYWxlbmRhci5jYWxsQ2xvc2VIYW5kbGVyKCk7CgkJcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cgl9CgoJLyoqCgkgKiBFdmVudCBIYW5kbGVycwoJICogQHBhcmFtIGV2ZW50CgkgKi8KCUNhbGVuZGFyLmhhbmRsZU1vdXNlRG93bkV2ZW50ID0gZnVuY3Rpb24oZXZlbnQpewoJCSQoZG9jdW1lbnQpLm1vdXNldXAoQ2FsZW5kYXIuaGFuZGxlTW91c2VVcEV2ZW50KTsKCQlldmVudC5wcmV2ZW50RGVmYXVsdCgpOwoJfQoKCS8qKgoJICogQ2xpY2tzIG9mIGRpZmZlcmVudCBhY3Rpb25zCgkgKiBAcGFyYW0gZXZlbnQKCSAqLwoJQ2FsZW5kYXIuaGFuZGxlTW91c2VVcEV2ZW50ID0gZnVuY3Rpb24oZXZlbnQpIHsKCQl2YXIgZWwgICAgICAgID0gZXZlbnQudGFyZ2V0OwoJCXZhciBjYWxlbmRhciAgPSBlbC5jYWxlbmRhcjsKCQl2YXIgaXNOZXdEYXRlID0gZmFsc2U7CgoJCS8vIElmIHRoZSBlbGVtZW50IHRoYXQgd2FzIGNsaWNrZWQgb24gZG9lcyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIENhbGVuZGFyCgkJLy8gb2JqZWN0LCByZXR1cm4gYXMgd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgoJCWlmICghY2FsZW5kYXIpIHJldHVybiBmYWxzZQoKCQkvLyBDbGlja2VkIG9uIGEgZGF5CgkJaWYgKHR5cGVvZiBlbC5uYXZBY3Rpb24gPT0gJ3VuZGVmaW5lZCcpIHsKCQkJaWYgKGNhbGVuZGFyLmN1cnJlbnREYXRlRWxlbWVudCkgewoJCQkJY2FsZW5kYXIuY3VycmVudERhdGVFbGVtZW50LnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpOwoJCQkJJChlbCkuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7CgkJCQljYWxlbmRhci5zaG91bGRDbG9zZSA9IChjYWxlbmRhci5jdXJyZW50RGF0ZUVsZW1lbnQgPT0gJChlbCkpOwoJCQkJaWYgKCFjYWxlbmRhci5zaG91bGRDbG9zZSkgewoJCQkJCWNhbGVuZGFyLmN1cnJlbnREYXRlRWxlbWVudCA9ICQoZWwpOwoJCQkJfQoJCQl9CgkJCWNhbGVuZGFyLmRhdGUuc2V0RGF0ZU9ubHkoZWwuZGF0ZSk7CgkJCWlzTmV3RGF0ZSA9IHRydWU7CgkJCWNhbGVuZGFyLnNob3VsZENsb3NlID0gISQoZWwpLmhhc0NsYXNzKCdvdGhlckRheScpOwoJCQl2YXIgaXNPdGhlck1vbnRoICAgICA9ICFjYWxlbmRhci5zaG91bGRDbG9zZTsKCQkJaWYgKGlzT3RoZXJNb250aCkgewoJCQkJY2FsZW5kYXIudXBkYXRlKGNhbGVuZGFyLmRhdGUpOwoJCQl9CgkJfSBlbHNlIHsKCQkJLy8gQ2xpY2tlZCBvbiBhbiBhY3Rpb24gYnV0dG9uCgkJCXZhciBkYXRlID0gbmV3IERhdGUoY2FsZW5kYXIuZGF0ZSk7CgoJCQlpZiAoZWwubmF2QWN0aW9uID09IENhbGVuZGFyLk5BVl9UT0RBWSkgewoJCQkJZGF0ZS5zZXREYXRlT25seShuZXcgRGF0ZSgpKTsKCQkJfQoKCQkJdmFyIHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7CgkJCXZhciBtb24gPSBkYXRlLmdldE1vbnRoKCk7CgkJCWZ1bmN0aW9uIHNldE1vbnRoKG0pIHsKCQkJCXZhciBkYXkgPSBkYXRlLmdldERhdGUoKTsKCQkJCXZhciBtYXggPSBkYXRlLmdldE1vbnRoRGF5cyhtKTsKCQkJCWlmIChkYXkgPiBtYXgpIGRhdGUuc2V0RGF0ZShtYXgpCgkJCQkJZGF0ZS5zZXRNb250aChtKTsKCQkJfQoJCQlzd2l0Y2ggKGVsLm5hdkFjdGlvbikgewoKCQkJCS8vIFByZXZpb3VzIFllYXIKCQkJCWNhc2UgQ2FsZW5kYXIuTkFWX1BSRVZJT1VTX1lFQVI6CgkJCQkJaWYgKHllYXIgPiBjYWxlbmRhci5taW5ZZWFyKQoJCQkJCQlkYXRlLnNldEZ1bGxZZWFyKHllYXIgLSAxKTsKCQkJCQlicmVhazsKCgkJCQkvLyBQcmV2aW91cyBNb250aAoJCQkJY2FzZSBDYWxlbmRhci5OQVZfUFJFVklPVVNfTU9OVEg6CgkJCQkJaWYgKG1vbiA+IDApIHsKCQkJCQkJc2V0TW9udGgobW9uIC0gMSk7CgkJCQkJfQoJCQkJCWVsc2UgaWYgKHllYXItLSA+IGNhbGVuZGFyLm1pblllYXIpIHsKCQkJCQkJZGF0ZS5zZXRGdWxsWWVhcih5ZWFyKTsKCQkJCQkJc2V0TW9udGgoMTEpOwoJCQkJCX0KCQkJCQlicmVhazsKCgkJCQkvLyBUb2RheQoJCQkJY2FzZSBDYWxlbmRhci5OQVZfVE9EQVk6CgkJCQkJYnJlYWs7CgoJCQkJLy8gTmV4dCBNb250aAoJCQkJY2FzZSBDYWxlbmRhci5OQVZfTkVYVF9NT05USDoKCQkJCQlpZiAobW9uIDwgMTEpIHsKCQkJCQkJc2V0TW9udGgobW9uICsgMSk7CgkJCQkJfQoJCQkJCWVsc2UgaWYgKHllYXIgPCBjYWxlbmRhci5tYXhZZWFyKSB7CgkJCQkJCWRhdGUuc2V0RnVsbFllYXIoeWVhciArIDEpOwoJCQkJCQlzZXRNb250aCgwKTsKCQkJCQl9CgkJCQkJYnJlYWs7CgoJCQkJLy8gTmV4dCBZZWFyCgkJCQljYXNlIENhbGVuZGFyLk5BVl9ORVhUX1lFQVI6CgkJCQkJaWYgKHllYXIgPCBjYWxlbmRhci5tYXhZZWFyKQoJCQkJCQlkYXRlLnNldEZ1bGxZZWFyKHllYXIgKyAxKTsKCQkJCQlicmVhazsKCgkJCX0KCgkJCWlmICghZGF0ZS5lcXVhbHNUbyhjYWxlbmRhci5kYXRlKSkgewoJCQkJY2FsZW5kYXIuc2hvdWxkQ2xvc2UgPSBmYWxzZTsKCQkJCWNhbGVuZGFyLnNldERhdGUoZGF0ZSk7CgkJCQlpc05ld0RhdGUgPSB0cnVlOwoJCQl9IGVsc2UgaWYgKGVsLm5hdkFjdGlvbiA9PSAwKSB7CgkJCQlpc05ld0RhdGUgPSAoY2FsZW5kYXIuc2hvdWxkQ2xvc2UgPSB0cnVlKTsKCQkJfQoJCX0KCgkJaWYgKGlzTmV3RGF0ZSkgZXZlbnQgJiYgY2FsZW5kYXIuY2FsbFNlbGVjdEhhbmRsZXIoKTsKCQlpZiAoY2FsZW5kYXIuc2hvdWxkQ2xvc2UpIGV2ZW50ICYmIGNhbGVuZGFyLmNhbGxDbG9zZUhhbmRsZXIoKTsKCQkkKGRvY3VtZW50KS51bmJpbmQoJ21vdXNldXAnLCBDYWxlbmRhci5oYW5kbGVNb3VzZVVwRXZlbnQpOwoJCXJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwoJfTsKCglDYWxlbmRhci5kZWZhdWx0U2VsZWN0SGFuZGxlciA9IGZ1bmN0aW9uKGNhbGVuZGFyKSB7CgkJaWYgKCFjYWxlbmRhci5kYXRlRmllbGQpIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJLy8gVXBkYXRlIGRhdGVGaWVsZCB2YWx1ZQoJCShjYWxlbmRhci5kYXRlRmllbGQuYXR0cigndGFnTmFtZScpID09ICdJTlBVVCcpCgkJCT8gY2FsZW5kYXIuZGF0ZUZpZWxkLnZhbChjYWxlbmRhci5kYXRlLnByaW50KGNhbGVuZGFyLmRhdGVGb3JtYXQpKQoJCQk6IGNhbGVuZGFyLmRhdGVGaWVsZC5odG1sKGNhbGVuZGFyLmRhdGUucHJpbnQoY2FsZW5kYXIuZGF0ZUZvcm1hdCkpOwoKCQkvLyBUcmlnZ2VyIHRoZSBvbmNoYW5nZSBjYWxsYmFjayBvbiB0aGUgZGF0ZUZpZWxkLCBpZiBvbmUgaGFzIGJlZW4gZGVmaW5lZAoJCWNhbGVuZGFyLmRhdGVGaWVsZC50cmlnZ2VyKCdjaGFuZ2UnKTsKCgkJLy8gQ2FsbCB0aGUgY2xvc2UgaGFuZGxlciwgaWYgbmVjZXNzYXJ5CgkJaWYgKGNhbGVuZGFyLnNob3VsZENsb3NlKSB7CgkJCWNhbGVuZGFyLmNhbGxDbG9zZUhhbmRsZXIoKTsKCQl9CgoJCXJldHVybiB0cnVlOwoJfQoKCUNhbGVuZGFyLmRlZmF1bHRDbG9zZUhhbmRsZXIgPSBmdW5jdGlvbihjYWxlbmRhcikgewoJCWNhbGVuZGFyLmhpZGUoKTsKCX0KCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJLy8gQ2FsZW5kYXIgSW5zdGFuY2UKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJQ2FsZW5kYXIucHJvdG90eXBlID0gewoJCS8vIFRoZSBIVE1MIENvbnRhaW5lciBFbGVtZW50CgkJY29udGFpbmVyOiBudWxsLAoKCQkvLyBEYXRlcwoJCWRhdGU6IG51bGwsCgkJY3VycmVudERhdGVFbGVtZW50OiBudWxsLAoKCQkvLyBTdGF0dXMKCQlzaG91bGRDbG9zZTogZmFsc2UsCgkJaXNQb3B1cDogdHJ1ZSwKCgkJLyoqCgkJICogVXBkYXRlIC8gKFJlKWluaXRpYWxpemUgQ2FsZW5kYXIKCQkgKiBAcGFyYW0gZGF0ZQoJCSAqLwoJCXVwZGF0ZTogZnVuY3Rpb24oZGF0ZSkgewoJCQl2YXIgY2FsZW5kYXIgICA9IHRoaXM7CgkJCXZhciB0b2RheSAgICAgID0gbmV3IERhdGUoKTsKCQkJdmFyIHRoaXNZZWFyICAgPSB0b2RheS5nZXRGdWxsWWVhcigpOwoJCQl2YXIgdGhpc01vbnRoICA9IHRvZGF5LmdldE1vbnRoKCk7CgkJCXZhciB0aGlzRGF5ICAgID0gdG9kYXkuZ2V0RGF0ZSgpOwoJCQl2YXIgbW9udGggICAgICA9IGRhdGUuZ2V0TW9udGgoKTsKCQkJdmFyIGRheU9mTW9udGggPSBkYXRlLmdldERhdGUoKTsKCgkJCS8vIEVuc3VyZSBkYXRlIGlzIHdpdGhpbiB0aGUgZGVmaW5lZCByYW5nZQoJCQlpZiAoZGF0ZS5nZXRGdWxsWWVhcigpIDwgdGhpcy5taW5ZZWFyKSB7CgkJCQlkYXRlLnNldEZ1bGxZZWFyKHRoaXMubWluWWVhcik7CgkJCX0gZWxzZSBpZiAoZGF0ZS5nZXRGdWxsWWVhcigpID4gdGhpcy5tYXhZZWFyKSB7CgkJCQlkYXRlLnNldEZ1bGxZZWFyKHRoaXMubWF4WWVhcik7CgkJCX0KCQkJdGhpcy5kYXRlID0gbmV3IERhdGUoZGF0ZSk7CgoJCQkvLyBDYWxjdWxhdGUgdGhlIGZpcnN0IGRheSB0byBkaXNwbGF5IChpbmNsdWRpbmcgdGhlIHByZXZpb3VzIG1vbnRoKQoJCQlkYXRlLnNldERhdGUoMSk7CgkJCXZhciBkYXkxID0gKGRhdGUuZ2V0RGF5KCkgLSB0aGlzLmZpcnN0RGF5T2ZXZWVrKSAlIDc7CgkJCWlmIChkYXkxIDwgMCkgZGF5MSArPSA3OwoJCQlkYXRlLnNldERhdGUoLWRheTEpOwoJCQlkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAxKTsKCgkJCS8vIEZpbGwgaW4gdGhlIGRheXMgb2YgdGhlIG1vbnRoCgkJCSQoJ3Rib2R5IHRyJywgdGhpcy5jb250YWluZXIpLmVhY2goZnVuY3Rpb24oKSB7CgkJCQl2YXIgcm93SGFzRGF5cyA9IGZhbHNlOwoJCQkJJCh0aGlzKS5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24oKSB7CgkJCQkJdmFyIGRheSAgICAgICAgICAgID0gZGF0ZS5nZXREYXRlKCk7CgkJCQkJdmFyIGRheU9mV2VlayAgICAgID0gZGF0ZS5nZXREYXkoKTsKCQkJCQl2YXIgaXNDdXJyZW50TW9udGggPSAoZGF0ZS5nZXRNb250aCgpID09IG1vbnRoKTsKCgkJCQkJLy8gUmVzZXQgY2xhc3NlcyBvbiB0aGUgY2VsbAoJCQkJCWNlbGwgPSAkKHRoaXMpOwoJCQkJCWNlbGwucmVtb3ZlQXR0cignY2xhc3MnKTsKCQkJCQljZWxsWzBdLmRhdGUgPSBuZXcgRGF0ZShkYXRlKTsKCQkJCQljZWxsLmh0bWwoZGF5KTsKCgkJCQkJLy8gQWNjb3VudCBmb3IgZGF5cyBvZiB0aGUgbW9udGggb3RoZXIgdGhhbiB0aGUgY3VycmVudCBtb250aAoJCQkJCWlmICghaXNDdXJyZW50TW9udGgpIHsKCQkJCQkJY2VsbC5hZGRDbGFzcygnb3RoZXJEYXknKTsKCQkJCQl9IGVsc2UgewoJCQkJCQlyb3dIYXNEYXlzID0gdHJ1ZTsKCQkJCQl9CgoJCQkJCS8vIEVuc3VyZSB0aGUgY3VycmVudCBkYXkgaXMgc2VsZWN0ZWQKCQkJCQlpZiAoaXNDdXJyZW50TW9udGggJiYgZGF5ID09IGRheU9mTW9udGgpIHsKCQkJCQkJY2VsbC5hZGRDbGFzcygnc2VsZWN0ZWQnKTsKCQkJCQkJY2FsZW5kYXIuY3VycmVudERhdGVFbGVtZW50ID0gY2VsbDsKCQkJCQl9CgoJCQkJCS8vIFRvZGF5CgkJCQkJaWYgKGRhdGUuZ2V0RnVsbFllYXIoKSA9PSB0aGlzWWVhciAmJiBkYXRlLmdldE1vbnRoKCkgPT0gdGhpc01vbnRoICYmIGRheSA9PSB0aGlzRGF5KSB7CgkJCQkJCWNlbGwuYWRkQ2xhc3MoJ3RvZGF5Jyk7CgkJCQkJfQoKCQkJCQkvLyBXZWVrZW5kCgkJCQkJaWYgKGNhbGVuZGFyLndlZWtlbmQuaW5kZXhPZihkYXlPZldlZWsudG9TdHJpbmcoKSkgIT0gLTEpIHsKCQkJCQkJY2VsbC5hZGRDbGFzcygnd2Vla2VuZCcpOwoJCQkJCX0KCgkJCQkJLy8gU2V0IHRoZSBkYXRlIHRvIHRvbW1vcnJvdwoJCQkJCWRhdGUuc2V0RGF0ZShkYXkgKyAxKTsKCQkJCX0pOwoJCQkJLy8gSGlkZSB0aGUgZXh0cmEgcm93IGlmIGl0IGNvbnRhaW5zIG9ubHkgZGF5cyBmcm9tIGFub3RoZXIgbW9udGgKCQkJCSFyb3dIYXNEYXlzID8gJCh0aGlzKS5oaWRlKCkgOiAkKHRoaXMpLnNob3coKTsKCQkJfSk7CgoJCQkkKCd0ZC50aXRsZScsIHRoaXMuY29udGFpbmVyKS5odG1sKENhbGVuZGFyLk1PTlRIX05BTUVTW21vbnRoXSArICcgJyArIGNhbGVuZGFyLmRhdGUuZ2V0RnVsbFllYXIoKSk7CgkJfSwKCgkJY3JlYXRlOiBmdW5jdGlvbihwYXJlbnQpIHsKCgkJCS8vIElmIG5vIHBhcmVudCB3YXMgc3BlY2lmaWVkLCBhc3N1bWUgdGhhdCB3ZSBhcmUgY3JlYXRpbmcgYSBwb3B1cCBjYWxlbmRhci4KCQkJdGhpcy5pc1BvcHVwID0gZmFsc2U7CgkJCWlmICghcGFyZW50KSB7CgkJCQlwYXJlbnQgPSAkKCdib2R5Jyk7CgkJCQl0aGlzLmlzUG9wdXAgPSB0cnVlOwoJCQl9CgoJCQkvLyBDYWxlbmRhciBUYWJsZQoJCQl2YXIgdGFibGUgPSAkKCc8dGFibGUgLz4nKTsKCgkJCS8vIENhbGVuZGFyIEhlYWRlcgoJCQl2YXIgdGhlYWQgPSAkKCc8dGhlYWQgLz4nKTsKCQkJdGFibGUuYXBwZW5kKHRoZWFkKTsKCgkJCS8vIFRpdGxlIFBsYWNlaG9sZGVyCgkJCXZhciByb3cgID0gJCgnPHRyIC8+Jyk7CgkJCXZhciBjZWxsID0gJCgnPHRkIGNvbHNwYW49IjciIGNsYXNzPSJ0aXRsZSIgLz4nKTsKCQkJcm93LmFwcGVuZChjZWxsKTsKCQkJdGhlYWQuYXBwZW5kKHJvdyk7CgoJCQkvLyBDYWxlbmRhciBOYXZpZ2F0aW9uCgkJCXJvdyA9ICQoJzx0ciAvPicpOwoJCQl0aGlzLl9kcmF3QnV0dG9uQ2VsbChyb3csICcmI3gwMGFiOycsIDEsIENhbGVuZGFyLk5BVl9QUkVWSU9VU19ZRUFSKTsKCQkJdGhpcy5fZHJhd0J1dHRvbkNlbGwocm93LCAnJiN4MjAzOTsnLCAxLCBDYWxlbmRhci5OQVZfUFJFVklPVVNfTU9OVEgpOwoJCQl0aGlzLl9kcmF3QnV0dG9uQ2VsbChyb3csIENhbGVuZGFyLlRPREFZLCAgICAzLCBDYWxlbmRhci5OQVZfVE9EQVkpOwoJCQl0aGlzLl9kcmF3QnV0dG9uQ2VsbChyb3csICcmI3gyMDNhOycsIDEsIENhbGVuZGFyLk5BVl9ORVhUX01PTlRIKTsKCQkJdGhpcy5fZHJhd0J1dHRvbkNlbGwocm93LCAnJiN4MDBiYjsnLCAxLCBDYWxlbmRhci5OQVZfTkVYVF9ZRUFSKTsKCQkJdGhlYWQuYXBwZW5kKHJvdyk7CgoJCQkvLyBEYXkgTmFtZXMKCQkJcm93ID0gJCgnPHRyIC8+Jyk7CgkJCWZvciAodmFyIGkgPSAwOyBpIDwgNzsgKytpKSB7CgkJCQl2YXIgcmVhbERheSA9IChpICsgdGhpcy5maXJzdERheU9mV2VlaykgJSA3OwoJCQkJY2VsbCA9ICQoJzx0aCAvPicpLmh0bWwoQ2FsZW5kYXIuU0hPUlRfREFZX05BTUVTW3JlYWxEYXldKTsKCQkJCWlmICh0aGlzLndlZWtlbmQuaW5kZXhPZihyZWFsRGF5LnRvU3RyaW5nKCkpICE9IC0xKQoJCQkJCWNlbGwuYWRkQ2xhc3MoJ3dlZWtlbmQnKTsKCQkJCXJvdy5hcHBlbmQoY2VsbCk7CgkJCX0KCQkJdGhlYWQuYXBwZW5kKHJvdyk7CgoJCQkvLyBDYWxlbmRhciBEYXlzCgkJCXZhciB0Ym9keSA9IHRhYmxlLmFwcGVuZCgkKCc8dGJvZHkgLz4nKSk7CgkJCWZvciAoaSA9IDY7IGkgPiAwOyAtLWkpIHsKCQkJCXJvdyA9ICQoJzx0ciAvPicpLmFkZENsYXNzKCdkYXlzJyk7CgkJCQl0Ym9keS5hcHBlbmQocm93KTsKCQkJCWZvciAodmFyIGogPSA3OyBqID4gMDsgLS1qKSB7CgkJCQkJY2VsbCA9ICQoJzx0ZCAvPicpOwoJCQkJCWNlbGxbMF0uY2FsZW5kYXIgPSB0aGlzOwoJCQkJCXJvdy5hcHBlbmQoY2VsbCk7CgkJCQl9CgkJCX0KCgkJCS8vIENhbGVuZGFyIENvbnRhaW5lciAoZGl2KQoJCQl0aGlzLmNvbnRhaW5lciA9ICQoJzxkaXYgLz4nKS5hZGRDbGFzcygnY2FsZW5kYXInKS5hcHBlbmQodGFibGUpOwoJCQlpZiAodGhpcy5pc1BvcHVwKSB7CgkJCQl0aGlzLmNvbnRhaW5lci5jc3MoewoJCQkJCXBvc2l0aW9uOiAnYWJzb2x1dGUnLAoJCQkJCWRpc3BsYXk6ICdub25lJwoJCQkJfSkuYWRkQ2xhc3MoJ3BvcHVwJyk7CgkJCX0KCgkJCS8vIEluaXRpYWxpemUgQ2FsZW5kYXIKCQkJdGhpcy51cGRhdGUodGhpcy5kYXRlKTsKCgkJCS8vIE9ic2VydmUgdGhlIGNvbnRhaW5lciBmb3IgbW91c2Vkb3duIGV2ZW50cwoJCQl0aGlzLmNvbnRhaW5lci5tb3VzZWRvd24oQ2FsZW5kYXIuaGFuZGxlTW91c2VEb3duRXZlbnQpOwoKCQkJLy8gQXBwZW5kIHRvIHBhcmVudCBlbGVtZW50CgkJCXBhcmVudC5hcHBlbmQodGhpcy5jb250YWluZXIpOwoJCX0sCgoJCV9kcmF3QnV0dG9uQ2VsbDogZnVuY3Rpb24ocGFyZW50LCB0ZXh0LCBjb2xTcGFuLCBuYXZBY3Rpb24pIHsKCQkJdmFyIGNlbGwgPSAkKCc8dGQgLz4nKTsKCQkJaWYgKGNvbFNwYW4gPiAxKSBjZWxsWzBdLmNvbFNwYW4gPSBjb2xTcGFuOyAvLyBJRSBpc3N1ZSBhdHRyKCkKCQkJY2VsbC5hZGRDbGFzcygnYnV0dG9uJykuaHRtbCh0ZXh0KS5hdHRyKCd1bnNlbGVjdGFibGUnLCAnb24nKTsgLy8gSUU7CgkJCWNlbGxbMF0uY2FsZW5kYXIgICAgID0gdGhpczsKCQkJY2VsbFswXS5uYXZBY3Rpb24gICAgPSBuYXZBY3Rpb247CgkJCXBhcmVudC5hcHBlbmQoY2VsbCk7CgkJCXJldHVybiBjZWxsOwoJCX0sCgoJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJLy8gQ2FsbGJhY2tzCgkJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgkJLyoqCgkJICogQ2FsbHMgdGhlIFNlbGVjdCBIYW5kbGVyIChpZiBkZWZpbmVkKQoJCSAqLwoJCWNhbGxTZWxlY3RIYW5kbGVyOiBmdW5jdGlvbigpIHsKCQkJaWYgKHRoaXMuc2VsZWN0SGFuZGxlcikgewoJCQkJdGhpcy5zZWxlY3RIYW5kbGVyKHRoaXMsIHRoaXMuZGF0ZS5wcmludCh0aGlzLmRhdGVGb3JtYXQpKTsKCQkJfQoJCX0sCgoJCS8qKgoJCSAqIENhbGxzIHRoZSBDbG9zZSBIYW5kbGVyIChpZiBkZWZpbmVkKQoJCSAqLwoJCWNhbGxDbG9zZUhhbmRsZXI6IGZ1bmN0aW9uKCkgewoJCQlpZiAodGhpcy5jbG9zZUhhbmRsZXIpIHsKCQkJCXRoaXMuY2xvc2VIYW5kbGVyKHRoaXMpOwoJCQl9CgkJfSwKCgkJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkvLyBDYWxlbmRhciBEaXNwbGF5IEZ1bmN0aW9ucwoJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJCS8qKgoJCSAqIFNob3dzIHRoZSBDYWxlbmRhcgoJCSAqLwoJCXNob3c6IGZ1bmN0aW9uKCkgewoJCQl0aGlzLmNvbnRhaW5lci5zaG93KCk7CgkJCWlmICh0aGlzLmlzUG9wdXApIHsKCQkJCXdpbmRvdy5fcG9wdXBDYWxlbmRhciA9IHRoaXM7CgkJCQkkKHRoaXMpLm1vdXNlZG93bihDYWxlbmRhci5fY2hlY2tDYWxlbmRhcik7CgkJCX0KCQl9LAoKCQkvKioKCQkgKiBTaG93cyB0aGUgY2FsZW5kYXIgYXQgdGhlIGdpdmVuIGFic29sdXRlIHBvc2l0aW9uCgkJICogQHBhcmFtIHgKCQkgKiBAcGFyYW0geQoJCSAqLwoJCXNob3dBdDogZnVuY3Rpb24gKHgsIHkpIHsKCQkJdGhpcy5jb250YWluZXIuY3NzKHsKCQkJCWxlZnQ6IHggKyAncHgnLAoJCQkJdG9wOiB5ICsgJ3B4JwoJCQl9KQoJCQl0aGlzLnNob3coKTsKCQl9LAoKCQkvKioKCQkgKiBTaG93cyB0aGUgQ2FsZW5kYXIgYXQgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwcm92aWRlZCBlbGVtZW50CgkJICogQHBhcmFtIGVsZW1lbnQKCQkgKi8KCQlzaG93QXRFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50KSB7CgkJCXZhciBvZmZzZXQgPSBlbGVtZW50Lm9mZnNldCgpOwoJCQl0aGlzLnNob3dBdChvZmZzZXQubGVmdCwgb2Zmc2V0LnRvcCk7CgkJfSwKCgkJLyoqCgkJICogSGlkZXMgdGhlIENhbGVuZGFyCgkJICovCgkJaGlkZTogZnVuY3Rpb24oKSB7CgkJCWlmICh0aGlzLmlzUG9wdXApIHsKCQkJCSQodGhpcykudW5iaW5kKCdtb3VzZWRvd24nLCBDYWxlbmRhci5fY2hlY2tDYWxlbmRhcik7CgkJCX0KCQkJdGhpcy5jb250YWluZXIuaGlkZSgpOwoJCX0sCgoJCS8qKgoJCSAqIFRyaWVzIHRvIGlkZW50aWZ5IHRoZSBkYXRlIHJlcHJlc2VudGVkIGluIGEgc3RyaW5nLiAgSWYgc3VjY2Vzc2Z1bCBpdCBhbHNvCgkJICogY2FsbHMgdGhpcy5zZXREYXRlIHdoaWNoIG1vdmVzIHRoZSBjYWxlbmRhciB0byB0aGUgZ2l2ZW4gZGF0ZS4KCQkgKiBAcGFyYW0gc3RyCgkJICogQHBhcmFtIGZvcm1hdAoJCSAqLwoJCXBhcnNlRGF0ZTogZnVuY3Rpb24oc3RyLCBmb3JtYXQpIHsKCQkJaWYgKCFmb3JtYXQpIHsKCQkJCWZvcm1hdCA9IHRoaXMuZGF0ZUZvcm1hdDsKCQkJfQoJCQl0aGlzLnNldERhdGUoRGF0ZS5wYXJzZURhdGUoc3RyLCBmb3JtYXQpKTsKCQl9LAoKCQlzZXREYXRlOiBmdW5jdGlvbihkYXRlKSB7CgkJCWlmICghZGF0ZS5lcXVhbHNUbyh0aGlzLmRhdGUpKQoJCQkJdGhpcy51cGRhdGUoZGF0ZSk7CgkJfSwKCgkJc2V0UmFuZ2U6IGZ1bmN0aW9uKG1pblllYXIsIG1heFllYXIpIHsKCQkJdGhpcy5taW5ZZWFyID0gbWluWWVhcjsKCQkJdGhpcy5tYXhZZWFyID0gbWF4WWVhcjsKCQl9Cgl9CgoJLy8gZ2xvYmFsIG9iamVjdCB0aGF0IHJlbWVtYmVycyB0aGUgY2FsZW5kYXIKCXdpbmRvdy5fcG9wdXBDYWxlbmRhciA9IG51bGw7CgoJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCS8vIERhdGUgT2JqZWN0IFBhdGNoZXMKCS8vIFRoaXMgaXMgcHJldHR5IG11Y2ggdW50b3VjaGVkIGZyb20gdGhlIG9yaWdpbmFsLgoJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCURhdGUuREFZU19JTl9NT05USCA9IG5ldyBBcnJheSgzMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxKTsKCURhdGUuU0VDT05EICAgICAgICA9IDEwMDA7IC8qIG1pbGxpc2Vjb25kcyAqLwoJRGF0ZS5NSU5VVEUgICAgICAgID0gNjAgKiBEYXRlLlNFQ09ORDsKCURhdGUuSE9VUiAgICAgICAgICA9IDYwICogRGF0ZS5NSU5VVEU7CglEYXRlLkRBWSAgICAgICAgICAgPSAyNCAqIERhdGUuSE9VUjsKCURhdGUuV0VFSyAgICAgICAgICA9ICA3ICogRGF0ZS5EQVk7CgoJLy8gUGFyc2VzIERhdGUKCURhdGUucGFyc2VEYXRlID0gZnVuY3Rpb24oc3RyLCBmbXQpIHsKCQl2YXIgdG9kYXkgPSBuZXcgRGF0ZSgpOwoJCXZhciB5ICAgICA9IDA7CgkJdmFyIG0gICAgID0gLTE7CgkJdmFyIGQgICAgID0gMDsKCQl2YXIgYSAgICAgPSBzdHIuc3BsaXQoL1xXKy8pOwoJCXZhciBiICAgICA9IGZtdC5tYXRjaCgvJS4vZyk7CgkJdmFyIGkgICAgID0gMCwgaiA9IDA7CgkJdmFyIGhyICAgID0gMDsKCQl2YXIgbWluICAgPSAwOwoKCQlmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7ICsraSkgewoJCQlpZiAoIWFbaV0pIGNvbnRpbnVlOwoJCQlzd2l0Y2ggKGJbaV0pIHsKCQkJCWNhc2UgIiVkIjoKCQkJCWNhc2UgIiVlIjoKCQkJCQlkID0gcGFyc2VJbnQoYVtpXSwgMTApOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAiJW0iOgoJCQkJCW0gPSBwYXJzZUludChhW2ldLCAxMCkgLSAxOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAiJVkiOgoJCQkJY2FzZSAiJXkiOgoJCQkJCXkgPSBwYXJzZUludChhW2ldLCAxMCk7CgkJCQkJKHkgPCAxMDApICYmICh5ICs9ICh5ID4gMjkpID8gMTkwMCA6IDIwMDApOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAiJWIiOgoJCQkJY2FzZSAiJUIiOgoJCQkJCWZvciAoaiA9IDA7IGogPCAxMjsgKytqKSB7CgkJCQkJCWlmIChDYWxlbmRhci5NT05USF9OQU1FU1tqXS5zdWJzdHIoMCwgYVtpXS5sZW5ndGgpLnRvTG93ZXJDYXNlKCkgPT0gYVtpXS50b0xvd2VyQ2FzZSgpKSB7CgkJCQkJCQltID0gajsKCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJY2FzZSAiJUgiOgoJCQkJY2FzZSAiJUkiOgoJCQkJY2FzZSAiJWsiOgoJCQkJY2FzZSAiJWwiOgoJCQkJCWhyID0gcGFyc2VJbnQoYVtpXSwgMTApOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAiJVAiOgoJCQkJY2FzZSAiJXAiOgoJCQkJCWlmICgvcG0vaS50ZXN0KGFbaV0pICYmIGhyIDwgMTIpCgkJCQkJCWhyICs9IDEyOwoJCQkJCWVsc2UgaWYgKC9hbS9pLnRlc3QoYVtpXSkgJiYgaHIgPj0gMTIpCgkJCQkJCWhyIC09IDEyOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAiJU0iOgoJCQkJCW1pbiA9IHBhcnNlSW50KGFbaV0sIDEwKTsKCQkJCQlicmVhazsKCQkJfQoJCX0KCQlpZiAoaXNOYU4oeSkpIHkgPSB0b2RheS5nZXRGdWxsWWVhcigpOwoJCWlmIChpc05hTihtKSkgbSA9IHRvZGF5LmdldE1vbnRoKCk7CgkJaWYgKGlzTmFOKGQpKSBkID0gdG9kYXkuZ2V0RGF0ZSgpOwoJCWlmIChpc05hTihocikpIGhyID0gdG9kYXkuZ2V0SG91cnMoKTsKCQlpZiAoaXNOYU4obWluKSkgbWluID0gdG9kYXkuZ2V0TWludXRlcygpOwoJCWlmICh5ICE9IDAgJiYgbSAhPSAtMSAmJiBkICE9IDApCgkJCXJldHVybiBuZXcgRGF0ZSh5LCBtLCBkLCBociwgbWluLCAwKTsKCQl5ID0gMDsgbSA9IC0xOyBkID0gMDsKCQlmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7ICsraSkgewoJCQlpZiAoYVtpXS5zZWFyY2goL1thLXpBLVpdKy8pICE9IC0xKSB7CgkJCQl2YXIgdCA9IC0xOwoJCQkJZm9yIChqID0gMDsgaiA8IDEyOyArK2opIHsKCQkJCQlpZiAoQ2FsZW5kYXIuTU9OVEhfTkFNRVNbal0uc3Vic3RyKDAsIGFbaV0ubGVuZ3RoKS50b0xvd2VyQ2FzZSgpID09IGFbaV0udG9Mb3dlckNhc2UoKSkgewoJCQkJCQl0ID0gajsgYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQkJaWYgKHQgIT0gLTEpIHsKCQkJCQlpZiAobSAhPSAtMSkgewoJCQkJCQlkID0gbSsxOwoJCQkJCX0KCQkJCQltID0gdDsKCQkJCX0KCQkJfSBlbHNlIGlmIChwYXJzZUludChhW2ldLCAxMCkgPD0gMTIgJiYgbSA9PSAtMSkgewoJCQkJbSA9IGFbaV0tMTsKCQkJfSBlbHNlIGlmIChwYXJzZUludChhW2ldLCAxMCkgPiAzMSAmJiB5ID09IDApIHsKCQkJCXkgPSBwYXJzZUludChhW2ldLCAxMCk7CgkJCQkoeSA8IDEwMCkgJiYgKHkgKz0gKHkgPiAyOSkgPyAxOTAwIDogMjAwMCk7CgkJCX0gZWxzZSBpZiAoZCA9PSAwKSB7CgkJCQlkID0gYVtpXTsKCQkJfQoJCX0KCQlpZiAoeSA9PSAwKQoJCQl5ID0gdG9kYXkuZ2V0RnVsbFllYXIoKTsKCQlpZiAobSAhPSAtMSAmJiBkICE9IDApCgkJCXJldHVybiBuZXcgRGF0ZSh5LCBtLCBkLCBociwgbWluLCAwKTsKCQlyZXR1cm4gdG9kYXk7Cgl9OwoKCS8vIFJldHVybnMgdGhlIG51bWJlciBvZiBkYXlzIGluIHRoZSBjdXJyZW50IG1vbnRoCglEYXRlLnByb3RvdHlwZS5nZXRNb250aERheXMgPSBmdW5jdGlvbihtb250aCkgewoJCXZhciB5ZWFyID0gdGhpcy5nZXRGdWxsWWVhcigpCgkJaWYgKHR5cGVvZiBtb250aCA9PSAidW5kZWZpbmVkIikKCQkJbW9udGggPSB0aGlzLmdldE1vbnRoKCkKCQlpZiAoKCgwID09ICh5ZWFyICUgNCkpICYmICggKDAgIT0gKHllYXIgJSAxMDApKSB8fCAoMCA9PSAoeWVhciAlIDQwMCkpKSkgJiYgbW9udGggPT0gMSkKCQkJcmV0dXJuIDI5CgkJZWxzZQoJCQlyZXR1cm4gRGF0ZS5EQVlTX0lOX01PTlRIW21vbnRoXQoJfTsKCgkvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGF5IGluIHRoZSB5ZWFyCglEYXRlLnByb3RvdHlwZS5nZXREYXlPZlllYXIgPSBmdW5jdGlvbigpIHsKCQl2YXIgbm93ID0gbmV3IERhdGUodGhpcy5nZXRGdWxsWWVhcigpLCB0aGlzLmdldE1vbnRoKCksIHRoaXMuZ2V0RGF0ZSgpLCAwLCAwLCAwKTsKCQl2YXIgdGhlbiA9IG5ldyBEYXRlKHRoaXMuZ2V0RnVsbFllYXIoKSwgMCwgMCwgMCwgMCwgMCk7CgkJdmFyIHRpbWUgPSBub3cgLSB0aGVuOwoJCXJldHVybiBNYXRoLmZsb29yKHRpbWUgLyBEYXRlLkRBWSk7Cgl9OwoKCS8qKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIHdlZWsgaW4geWVhciwgYXMgZGVmaW5lZCBpbiBJU08gODYwMS4gKi8KCURhdGUucHJvdG90eXBlLmdldFdlZWtOdW1iZXIgPSBmdW5jdGlvbigpIHsKCQl2YXIgZCA9IG5ldyBEYXRlKHRoaXMuZ2V0RnVsbFllYXIoKSwgdGhpcy5nZXRNb250aCgpLCB0aGlzLmdldERhdGUoKSwgMCwgMCwgMCk7CgkJdmFyIERvVyA9IGQuZ2V0RGF5KCk7CgkJZC5zZXREYXRlKGQuZ2V0RGF0ZSgpIC0gKERvVyArIDYpICUgNyArIDMpOyAvLyBOZWFyZXN0IFRodQoJCXZhciBtcyA9IGQudmFsdWVPZigpOyAvLyBHTVQKCQlkLnNldE1vbnRoKDApOwoJCWQuc2V0RGF0ZSg0KTsgLy8gVGh1IGluIFdlZWsgMQoJCXJldHVybiBNYXRoLnJvdW5kKChtcyAtIGQudmFsdWVPZigpKSAvICg3ICogODY0ZTUpKSArIDE7Cgl9OwoKCS8qKiBDaGVja3MgZGF0ZSBhbmQgdGltZSBlcXVhbGl0eSAqLwoJRGF0ZS5wcm90b3R5cGUuZXF1YWxzVG8gPSBmdW5jdGlvbihkYXRlKSB7CgkJcmV0dXJuICgodGhpcy5nZXRGdWxsWWVhcigpID09IGRhdGUuZ2V0RnVsbFllYXIoKSkgJiYKCQkJKHRoaXMuZ2V0TW9udGgoKSA9PSBkYXRlLmdldE1vbnRoKCkpICYmCgkJCSh0aGlzLmdldERhdGUoKSA9PSBkYXRlLmdldERhdGUoKSkgJiYKCQkJKHRoaXMuZ2V0SG91cnMoKSA9PSBkYXRlLmdldEhvdXJzKCkpICYmCgkJCSh0aGlzLmdldE1pbnV0ZXMoKSA9PSBkYXRlLmdldE1pbnV0ZXMoKSkpOwoJfTsKCgkvKiogU2V0IG9ubHkgdGhlIHllYXIsIG1vbnRoLCBkYXRlIHBhcnRzIChrZWVwIGV4aXN0aW5nIHRpbWUpICovCglEYXRlLnByb3RvdHlwZS5zZXREYXRlT25seSA9IGZ1bmN0aW9uKGRhdGUpIHsKCQl2YXIgdG1wID0gbmV3IERhdGUoZGF0ZSk7CgkJdGhpcy5zZXREYXRlKDEpOwoJCXRoaXMuc2V0RnVsbFllYXIodG1wLmdldEZ1bGxZZWFyKCkpOwoJCXRoaXMuc2V0TW9udGgodG1wLmdldE1vbnRoKCkpOwoJCXRoaXMuc2V0RGF0ZSh0bXAuZ2V0RGF0ZSgpKTsKCX07CgovKiogQWRkZWQgYnkgTmFOOiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBEYXRlLmZvcm1hdCgpCiAqIHN0cmluZyBmb3JtYXQgKCBzdHJpbmcgZm9ybWF0ICkKICogRm9ybWF0dGluZyBydWxlcyBhY2NvcmRpbmcgdG8gaHR0cDovL3BocC5uZXQvc3RyZnRpbWUKICoKICogQ29weXJpZ2h0IChDKSAyMDA2ICBEYW8gR290dHdhbGQKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxIFVTQQogKgogKiBDb250YWN0IGluZm9ybWF0aW9uOgogKiAgIERhbyBHb3R0d2FsZCAgPGRhbyBhdCBkZXNpZ24tbm9pci5kZT4KICoKICogQHZlcnNpb24gIDAuNwogKiBAdG9kbyAgICAgJWcsICVHLCAlVSwgJVYsICVXLCAleiwgbW9yZS9iZXR0ZXIgbG9jYWxpemF0aW9uCiAqIEB1cmwgICAgICBodHRwOi8vZGVzaWduLW5vaXIuZGUvd2ViZGV2L0pTL0RhdGUuZm9ybWF0LwogKi8KCnZhciBfbGFuZyA9IChuYXZpZ2F0b3Iuc3lzdGVtTGFuZ3VhZ2UgfHwgbmF2aWdhdG9yLnVzZXJMYW5ndWFnZSB8fCBuYXZpZ2F0b3IubGFuZ3VhZ2UgfHwgbmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZSB8fCAnJykucmVwbGFjZSgvLS4qLywnJyk7CnN3aXRjaCAoX2xhbmcpIHsKCWNhc2UgJ2RlJzoKCQlEYXRlLl9sMTBuID0gewoJCQlkYXlzOiBbJ1Nvbm50YWcnLCdNb250YWcnLCdEaWVuc3RhZycsJ01pdHR3b2NoJywnRG9ubmVyc3RhZycsJ0ZyZWl0YWcnLCdTYW1zdGFnJ10sCgkJCW1vbnRoczogWydKYW51YXInLCdGZWJydWFyJywnTVx1MDBFNHJ6JywnQXByaWwnLCdNYWknLCdKdW5pJywnSnVsaScsJ0F1Z3VzdCcsJ1NlcHRlbWJlcicsJ09rdG9iZXInLCdOb3ZlbWJlcicsJ0RlemVtYmVyJ10sCgkJCWRhdGU6ICclZS4lbS4lWScsCgkJCXRpbWU6ICclSDolTTolUyd9OwoJCWJyZWFrOwoJY2FzZSAnZXMnOgoJCURhdGUuX2wxMG4gPSB7CgkJCWRheXM6IFsnRG9taW5nbycsJ0x1bmVzJywnTWFydGVzJywnTWmOcmNvbGVzJywnSnVldmVzJywnVmllcm5lcycsJ1NcdTAwRTFiYWRvJ10sCgkJCW1vbnRoczogWydlbmVybycsJ2ZlYnJlcm8nLCdtYXJjaGEnLCdhYnJpbCcsJ3B1ZWRlJywnanVuaW8nLCdqdWxpbycsJ2Fnb3N0bycsJ3NlcHRpZW1icmUnLCdvY3R1YnJlJywnbm92aWVtYnJlJywnZGljaWVtYnJlJ10sCgkJCWRhdGU6ICclZS4lbS4lWScsCgkJCXRpbWU6ICclSDolTTolUyd9OwoJCWJyZWFrOwoJY2FzZSAnZnInOgoJCURhdGUuX2wxMG4gPSB7CgkJCWRheXM6IFsnZGltYW5jaGUnLCdsdW5kaScsJ21hcmRpJywnbWVyY3JlZGknLCdqZXVkaScsJ3ZlbmRyZWRpJywnc2FtZWRpJ10sCgkJCW1vbnRoczogWydqYW52aWVyJywnZlx1MDBFOXZyaWVyJywnbWFycycsJ2F2cmlsJywnbWFpJywnanVpbicsJ2p1aWxsZXQnLCdhb1x1MDBGQnQnLCdzZXB0ZW1icmUnLCdvY3RvYnJlJywnbm92ZW1icmUnLCdkZWNlbWJyZSddLAoJCQlkYXRlOiAnJWUvJW0vJVknLAoJCQl0aW1lOiAnJUg6JU06JVMnfTsKCQlicmVhazsKCWNhc2UgJ2l0JzoKCQlEYXRlLl9sMTBuID0gewoJCQlkYXlzOiBbJ2RvbWVuaWNhJywnbHVuZWRcdTAwRUMnLCdtYXJ0ZWRcdTAwRUMnLCdtZXJjb2xlZFx1MDBFQycsJ2dpb3ZlZFx1MDBFQycsJ3ZlbmVyZFx1MDBFQycsJ3NhYmF0byddLAoJCQltb250aHM6IFsnZ2VubmFpbycsJ2ZlYmJyYWlvJywnbWFyem8nLCdhcHJpbGUnLCdtYWdnaW8nLCdnaXVnbm8nLCdsdWdsaW8nLCdhZ29zdG8nLCdzZXR0ZW1icmUnLCdvdHRvYnJlJywnbm92ZW1icmUnLCdkaWNlbWJyZSddLAoJCQlkYXRlOiAnJWUvJW0vJXknLAoJCQl0aW1lOiAnJUguJU0uJVMnfTsKCQlicmVhazsKCWNhc2UgJ3B0JzoKCQlEYXRlLl9sMTBuID0gewoJCQlkYXlzOiBbJ0RvbWluZ28nLCdTZWd1bmRhLWZlaXJhJywnVGVyXHUwMEU3YS1mZWlyYScsJ1F1YXJ0YS1mZWlyYScsJ1F1aW50YS1mZWlyYScsJ1NleHRhLWZlaXJhJywnU1x1MDBFMWJhZG8nXSwKCQkJbW9udGhzOiBbJ0phbmVpcm8nLCdGZXZlcmVpcm8nLCdNYXJcdTAwRTdvJywnQWJyaWwnLCdNYWlvJywnSnVuaG8nLCdKdWxobycsJ0Fnb3N0bycsJ1NldGVtYnJvJywnT3V0dWJybycsJ05vdmVtYnJvJywnRGV6ZW1icm8nXSwKCQkJZGF0ZTogJyVlLyVtLyV5JywKCQkJdGltZTogJyVILiVNLiVTJ307CgkJYnJlYWs7CgljYXNlICdlbic6CglkZWZhdWx0OgoJCURhdGUuX2wxMG4gPSB7CgkJCWRheXM6IFsnU3VuZGF5JywnTW9uZGF5JywnVHVlc2RheScsJ1dlZG5lc2RheScsJ1RodXJzZGF5JywnRnJpZGF5JywnU2F0dXJkYXknXSwKCQkJbW9udGhzOiBbJ0phbnVhcnknLCdGZWJydWFyeScsJ01hcmNoJywnQXByaWwnLCdNYXknLCdKdW5lJywnSnVseScsJ0F1Z3VzdCcsJ1NlcHRlbWJlcicsJ09jdG9iZXInLCdOb3ZlbWJlcicsJ0RlY2VtYmVyJ10sCgkJCWRhdGU6ICclWS0lbS0lZScsCgkJCXRpbWU6ICclSDolTTolUyd9OwoJCWJyZWFrOwp9CkRhdGUuX3BhZCA9IGZ1bmN0aW9uKG51bSwgbGVuKSB7Cglmb3IgKHZhciBpID0gMTsgaSA8PSBsZW47IGkrKykKCQlpZiAobnVtIDwgTWF0aC5wb3coMTAsIGkpKQoJCQlyZXR1cm4gbmV3IEFycmF5KGxlbi1pKzEpLmpvaW4oMCkgKyBudW07CglyZXR1cm4gbnVtOwp9OwpEYXRlLnByb3RvdHlwZS5mb3JtYXQgPSBmdW5jdGlvbihmb3JtYXQpIHsKCWlmIChmb3JtYXQuaW5kZXhPZignJSUnKSA+IC0xKSB7IC8vIGEgbGl0ZXJhbCBgJScgY2hhcmFjdGVyCgkJZm9ybWF0ID0gZm9ybWF0LnNwbGl0KCclJScpOwoJCWZvciAodmFyIGkgPSAwOyBpIDwgZm9ybWF0Lmxlbmd0aDsgaSsrKQoJCQlmb3JtYXRbaV0gPSB0aGlzLmZvcm1hdChmb3JtYXRbaV0pOwoJCXJldHVybiBmb3JtYXQuam9pbignJScpOwoJfQoJZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoLyVEL2csICclbS8lZC8leScpOyAvLyBzYW1lIGFzICVtLyVkLyV5Cglmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvJXIvZywgJyVJOiVNOiVTICVwJyk7IC8vIHRpbWUgaW4gYS5tLiBhbmQgcC5tLiBub3RhdGlvbgoJZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoLyVSL2csICclSDolTTolUycpOyAvLyB0aW1lIGluIDI0IGhvdXIgbm90YXRpb24KCWZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC8lVC9nLCAnJUg6JU06JVMnKTsgLy8gY3VycmVudCB0aW1lLCBlcXVhbCB0byAlSDolTTolUwoJZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoLyV4L2csIERhdGUuX2wxMG4uZGF0ZSk7IC8vIHByZWZlcnJlZCBkYXRlIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgY3VycmVudCBsb2NhbGUgd2l0aG91dCB0aGUgdGltZQoJZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoLyVYL2csIERhdGUuX2wxMG4udGltZSk7IC8vIHByZWZlcnJlZCB0aW1lIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgY3VycmVudCBsb2NhbGUgd2l0aG91dCB0aGUgZGF0ZQoJdmFyIGRhdGVPYmogPSB0aGlzOwoJcmV0dXJuIGZvcm1hdC5yZXBsYWNlKC8lKFthQWJoQmNDZGVnR0hJam1NbnBTdHVVVld3eVl6Wl0pL2csIGZ1bmN0aW9uKG1hdGNoMCwgbWF0Y2gxKSB7CgkJcmV0dXJuIGRhdGVPYmouZm9ybWF0X2NhbGxiYWNrKG1hdGNoMCwgbWF0Y2gxKTsKCX0pOwp9CkRhdGUucHJvdG90eXBlLmZvcm1hdF9jYWxsYmFjayA9IGZ1bmN0aW9uKG1hdGNoMCwgbWF0Y2gxKSB7Cglzd2l0Y2ggKG1hdGNoMSkgewoJCWNhc2UgJ2EnOiAvLyBhYmJyZXZpYXRlZCB3ZWVrZGF5IG5hbWUgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGxvY2FsZQoJCQlyZXR1cm4gRGF0ZS5fbDEwbi5kYXlzW3RoaXMuZ2V0RGF5KCldLnN1YnN0cigwLDMpOwoJCWNhc2UgJ0EnOiAvLyBmdWxsIHdlZWtkYXkgbmFtZSBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgbG9jYWxlCgkJCXJldHVybiBEYXRlLl9sMTBuLmRheXNbdGhpcy5nZXREYXkoKV07CgkJY2FzZSAnYic6CgkJY2FzZSAnaCc6IC8vIGFiYnJldmlhdGVkIG1vbnRoIG5hbWUgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGxvY2FsZQoJCQlyZXR1cm4gRGF0ZS5fbDEwbi5tb250aHNbdGhpcy5nZXRNb250aCgpXS5zdWJzdHIoMCwzKTsKCQljYXNlICdCJzogLy8gZnVsbCBtb250aCBuYW1lIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBsb2NhbGUKCQkJcmV0dXJuIERhdGUuX2wxMG4ubW9udGhzW3RoaXMuZ2V0TW9udGgoKV07CgkJY2FzZSAnYyc6IC8vIHByZWZlcnJlZCBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgY3VycmVudCBsb2NhbGUKCQkJcmV0dXJuIHRoaXMudG9Mb2NhbGVTdHJpbmcoKTsKCQljYXNlICdDJzogLy8gY2VudHVyeSBudW1iZXIgKHRoZSB5ZWFyIGRpdmlkZWQgYnkgMTAwIGFuZCB0cnVuY2F0ZWQgdG8gYW4gaW50ZWdlciwgcmFuZ2UgMDAgdG8gOTkpCgkJCXJldHVybiBNYXRoLmZsb29yKHRoaXMuZ2V0RnVsbFllYXIoKSAvIDEwMCk7CgkJY2FzZSAnZCc6IC8vIGRheSBvZiB0aGUgbW9udGggYXMgYSBkZWNpbWFsIG51bWJlciAocmFuZ2UgMDEgdG8gMzEpCgkJCXJldHVybiBEYXRlLl9wYWQodGhpcy5nZXREYXRlKCksIDIpOwoJCWNhc2UgJ2UnOiAvLyBkYXkgb2YgdGhlIG1vbnRoIGFzIGEgZGVjaW1hbCBudW1iZXIsIGEgc2luZ2xlIGRpZ2l0IGlzIHByZWNlZGVkIGJ5IGEgc3BhY2UgKHJhbmdlICcgMScgdG8gJzMxJykKCQkJcmV0dXJuIERhdGUuX3BhZCh0aGlzLmdldERhdGUoKSwgMik7CgkJLypjYXNlICdnJzogLy8gbGlrZSAlRywgYnV0IHdpdGhvdXQgdGhlIGNlbnR1cnkKCQkJcmV0dXJuIDsKCQljYXNlICdHJzogLy8gVGhlIDQtZGlnaXQgeWVhciBjb3JyZXNwb25kaW5nIHRvIHRoZSBJU08gd2VlayBudW1iZXIgKHNlZSAlVikuIFRoaXMgaGFzIHRoZSBzYW1lIGZvcm1hdCBhbmQgdmFsdWUgYXMgJVksIGV4Y2VwdCB0aGF0IGlmIHRoZSBJU08gd2VlayBudW1iZXIgYmVsb25ncyB0byB0aGUgcHJldmlvdXMgb3IgbmV4dCB5ZWFyLCB0aGF0IHllYXIgaXMgdXNlZCBpbnN0ZWFkCgkJCXJldHVybiA7Ki8KCQljYXNlICdIJzogLy8gaG91ciBhcyBhIGRlY2ltYWwgbnVtYmVyIHVzaW5nIGEgMjQtaG91ciBjbG9jayAocmFuZ2UgMDAgdG8gMjMpCgkJCXJldHVybiBEYXRlLl9wYWQodGhpcy5nZXRIb3VycygpLCAyKTsKCQljYXNlICdJJzogLy8gaG91ciBhcyBhIGRlY2ltYWwgbnVtYmVyIHVzaW5nIGEgMTItaG91ciBjbG9jayAocmFuZ2UgMDEgdG8gMTIpCgkJCXJldHVybiBEYXRlLl9wYWQodGhpcy5nZXRIb3VycygpICUgMTIsIDIpOwoJCWNhc2UgJ2onOiAvLyBkYXkgb2YgdGhlIHllYXIgYXMgYSBkZWNpbWFsIG51bWJlciAocmFuZ2UgMDAxIHRvIDM2NikKCQkJcmV0dXJuIERhdGUuX3BhZCh0aGlzLmdldE1vbnRoKCkgKiAzMCArIE1hdGguY2VpbCh0aGlzLmdldE1vbnRoKCkgLyAyKSArIHRoaXMuZ2V0RGF5KCkgLSAyICogKHRoaXMuZ2V0TW9udGgoKSA+IDEpICsgKCEodGhpcy5nZXRGdWxsWWVhcigpICUgNDAwKSB8fCAoISh0aGlzLmdldEZ1bGxZZWFyKCkgJSA0KSAmJiB0aGlzLmdldEZ1bGxZZWFyKCkgJSAxMDApKSwgMyk7CgkJY2FzZSAnbSc6IC8vIG1vbnRoIGFzIGEgZGVjaW1hbCBudW1iZXIgKHJhbmdlIDAxIHRvIDEyKQoJCQlyZXR1cm4gRGF0ZS5fcGFkKHRoaXMuZ2V0TW9udGgoKSArIDEsIDIpOwoJCWNhc2UgJ00nOiAvLyBtaW51dGUgYXMgYSBkZWNpbWFsIG51bWJlcgoJCQlyZXR1cm4gRGF0ZS5fcGFkKHRoaXMuZ2V0TWludXRlcygpLCAyKTsKCQljYXNlICduJzogLy8gbmV3bGluZSBjaGFyYWN0ZXIKCQkJcmV0dXJuICdcbic7CgkJY2FzZSAncCc6IC8vIGVpdGhlciBgYW0nIG9yIGBwbScgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiB0aW1lIHZhbHVlLCBvciB0aGUgY29ycmVzcG9uZGluZyBzdHJpbmdzIGZvciB0aGUgY3VycmVudCBsb2NhbGUKCQkJcmV0dXJuIHRoaXMuZ2V0SG91cnMoKSA8IDEyID8gJ2FtJyA6ICdwbSc7CgkJY2FzZSAnUyc6IC8vIHNlY29uZCBhcyBhIGRlY2ltYWwgbnVtYmVyCgkJCXJldHVybiBEYXRlLl9wYWQodGhpcy5nZXRTZWNvbmRzKCksIDIpOwoJCWNhc2UgJ3QnOiAvLyB0YWIgY2hhcmFjdGVyCgkJCXJldHVybiAnXHQnOwoJCWNhc2UgJ3UnOiAvLyB3ZWVrZGF5IGFzIGEgZGVjaW1hbCBudW1iZXIgWzEsN10sIHdpdGggMSByZXByZXNlbnRpbmcgTW9uZGF5CgkJCXJldHVybiB0aGlzLmdldERheSgpIHx8IDc7CgkJLypjYXNlICdVJzogLy8gd2VlayBudW1iZXIgb2YgdGhlIGN1cnJlbnQgeWVhciBhcyBhIGRlY2ltYWwgbnVtYmVyLCBzdGFydGluZyB3aXRoIHRoZSBmaXJzdCBTdW5kYXkgYXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgZmlyc3Qgd2VlawoJCQlyZXR1cm4gOwoJCWNhc2UgJ1YnOiAvLyBUaGUgSVNPIDg2MDE6MTk4OCB3ZWVrIG51bWJlciBvZiB0aGUgY3VycmVudCB5ZWFyIGFzIGEgZGVjaW1hbCBudW1iZXIsIHJhbmdlIDAxIHRvIDUzLCB3aGVyZSB3ZWVrIDEgaXMgdGhlIGZpcnN0IHdlZWsgdGhhdCBoYXMgYXQgbGVhc3QgNCBkYXlzIGluIHRoZSBjdXJyZW50IHllYXIsIGFuZCB3aXRoIE1vbmRheSBhcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLiAoVXNlICVHIG9yICVnIGZvciB0aGUgeWVhciBjb21wb25lbnQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgd2VlayBudW1iZXIgZm9yIHRoZSBzcGVjaWZpZWQgdGltZXN0YW1wLikKCQkJcmV0dXJuIDsKCQljYXNlICdXJzogLy8gd2VlayBudW1iZXIgb2YgdGhlIGN1cnJlbnQgeWVhciBhcyBhIGRlY2ltYWwgbnVtYmVyLCBzdGFydGluZyB3aXRoIHRoZSBmaXJzdCBNb25kYXkgYXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgZmlyc3Qgd2VlawoJCQlyZXR1cm4gOyovCgkJY2FzZSAndyc6IC8vIGRheSBvZiB0aGUgd2VlayBhcyBhIGRlY2ltYWwsIFN1bmRheSBiZWluZyAwCgkJCXJldHVybiB0aGlzLmdldERheSgpOwoJCWNhc2UgJ3knOiAvLyB5ZWFyIGFzIGEgZGVjaW1hbCBudW1iZXIgd2l0aG91dCBhIGNlbnR1cnkgKHJhbmdlIDAwIHRvIDk5KQoJCQlyZXR1cm4gdGhpcy5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkuc3Vic3RyKDIpOwoJCWNhc2UgJ1knOiAvLyB5ZWFyIGFzIGEgZGVjaW1hbCBudW1iZXIgaW5jbHVkaW5nIHRoZSBjZW50dXJ5CgkJCXJldHVybiB0aGlzLmdldEZ1bGxZZWFyKCk7CgkJLypjYXNlICd6JzoKCQljYXNlICdaJzogLy8gdGltZSB6b25lIG9yIG5hbWUgb3IgYWJicmV2aWF0aW9uCgkJCXJldHVybiA7Ki8KCQlkZWZhdWx0OgoJCQlyZXR1cm4gbWF0Y2gwOwoJfQp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCS8qKiBQcmludHMgdGhlIGRhdGUgaW4gYSBzdHJpbmcgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBmb3JtYXQuICovCglEYXRlLnByb3RvdHlwZS5wcmludCA9IGZ1bmN0aW9uIChzdHIpIHsKCQlyZXR1cm4gdGhpcy5mb3JtYXQoc3RyKTsKCQkvKgoJCXZhciBtID0gdGhpcy5nZXRNb250aCgpOwoJCXZhciBkID0gdGhpcy5nZXREYXRlKCk7CgkJdmFyIHkgPSB0aGlzLmdldEZ1bGxZZWFyKCk7CgkJdmFyIHduID0gdGhpcy5nZXRXZWVrTnVtYmVyKCk7CgkJdmFyIHcgPSB0aGlzLmdldERheSgpOwoJCXZhciBzID0ge307CgkJdmFyIGhyID0gdGhpcy5nZXRIb3VycygpOwoJCXZhciBwbSA9IChociA+PSAxMik7CgkJdmFyIGlyID0gKHBtKSA/IChociAtIDEyKSA6IGhyOwoJCXZhciBkeSA9IHRoaXMuZ2V0RGF5T2ZZZWFyKCk7CgkJaWYgKGlyID09IDApCgkJCWlyID0gMTI7CgkJdmFyIG1pbiA9IHRoaXMuZ2V0TWludXRlcygpOwoJCXZhciBzZWMgPSB0aGlzLmdldFNlY29uZHMoKTsKCQlzWyIlYSJdID0gQ2FsZW5kYXIuU0hPUlRfREFZX05BTUVTW3ddOyAvLyBhYmJyZXZpYXRlZCB3ZWVrZGF5IG5hbWUgW0ZJWE1FOiBJMThOXQoJCXNbIiVBIl0gPSBDYWxlbmRhci5EQVlfTkFNRVNbd107IC8vIGZ1bGwgd2Vla2RheSBuYW1lCgkJc1siJWIiXSA9IENhbGVuZGFyLlNIT1JUX01PTlRIX05BTUVTW21dOyAvLyBhYmJyZXZpYXRlZCBtb250aCBuYW1lIFtGSVhNRTogSTE4Tl0KCQlzWyIlQiJdID0gQ2FsZW5kYXIuTU9OVEhfTkFNRVNbbV07IC8vIGZ1bGwgbW9udGggbmFtZQoJCS8vIEZJWE1FOiAlYyA6IHByZWZlcnJlZCBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgY3VycmVudCBsb2NhbGUKCQlzWyIlQyJdID0gMSArIE1hdGguZmxvb3IoeSAvIDEwMCk7IC8vIHRoZSBjZW50dXJ5IG51bWJlcgoJCXNbIiVkIl0gPSAoZCA8IDEwKSA/ICgiMCIgKyBkKSA6IGQ7IC8vIHRoZSBkYXkgb2YgdGhlIG1vbnRoIChyYW5nZSAwMSB0byAzMSkKCQlzWyIlZSJdID0gZDsgLy8gdGhlIGRheSBvZiB0aGUgbW9udGggKHJhbmdlIDEgdG8gMzEpCgkJLy8gRklYTUU6ICVEIDogYW1lcmljYW4gZGF0ZSBzdHlsZTogJW0vJWQvJXkKCQkvLyBGSVhNRTogJUUsICVGLCAlRywgJWcsICVoIChtYW4gc3RyZnRpbWUpCgkJc1siJUgiXSA9IChociA8IDEwKSA/ICgiMCIgKyBocikgOiBocjsgLy8gaG91ciwgcmFuZ2UgMDAgdG8gMjMgKDI0aCBmb3JtYXQpCgkJc1siJUkiXSA9IChpciA8IDEwKSA/ICgiMCIgKyBpcikgOiBpcjsgLy8gaG91ciwgcmFuZ2UgMDEgdG8gMTIgKDEyaCBmb3JtYXQpCgkJc1siJWoiXSA9IChkeSA8IDEwMCkgPyAoKGR5IDwgMTApID8gKCIwMCIgKyBkeSkgOiAoIjAiICsgZHkpKSA6IGR5OyAvLyBkYXkgb2YgdGhlIHllYXIgKHJhbmdlIDAwMSB0byAzNjYpCgkJc1siJWsiXSA9IGhyOyAgIC8vIGhvdXIsIHJhbmdlIDAgdG8gMjMgKDI0aCBmb3JtYXQpCgkJc1siJWwiXSA9IGlyOyAgIC8vIGhvdXIsIHJhbmdlIDEgdG8gMTIgKDEyaCBmb3JtYXQpCgkJc1siJW0iXSA9IChtIDwgOSkgPyAoIjAiICsgKDErbSkpIDogKDErbSk7IC8vIG1vbnRoLCByYW5nZSAwMSB0byAxMgoJCXNbIiVNIl0gPSAobWluIDwgMTApID8gKCIwIiArIG1pbikgOiBtaW47IC8vIG1pbnV0ZSwgcmFuZ2UgMDAgdG8gNTkKCQlzWyIlbiJdID0gIlxuIjsgICAvLyBhIG5ld2xpbmUgY2hhcmFjdGVyCgkJc1siJXAiXSA9IHBtID8gIlBNIiA6ICJBTSI7CgkJc1siJVAiXSA9IHBtID8gInBtIiA6ICJhbSI7CgkJLy8gRklYTUU6ICVyIDogdGhlIHRpbWUgaW4gYW0vcG0gbm90YXRpb24gJUk6JU06JVMgJXAKCQkvLyBGSVhNRTogJVIgOiB0aGUgdGltZSBpbiAyNC1ob3VyIG5vdGF0aW9uICVIOiVNCgkJc1siJXMiXSA9IE1hdGguZmxvb3IodGhpcy5nZXRUaW1lKCkgLyAxMDAwKTsKCQlzWyIlUyJdID0gKHNlYyA8IDEwKSA/ICgiMCIgKyBzZWMpIDogc2VjOyAvLyBzZWNvbmRzLCByYW5nZSAwMCB0byA1OQoJCXNbIiV0Il0gPSAiXHQiOyAgIC8vIGEgdGFiIGNoYXJhY3RlcgoJCS8vIEZJWE1FOiAlVCA6IHRoZSB0aW1lIGluIDI0LWhvdXIgbm90YXRpb24gKCVIOiVNOiVTKQoJCXNbIiVVIl0gPSBzWyIlVyJdID0gc1siJVYiXSA9ICh3biA8IDEwKSA/ICgiMCIgKyB3bikgOiB3bjsKCQlzWyIldSJdID0gdyArIDE7ICAvLyB0aGUgZGF5IG9mIHRoZSB3ZWVrIChyYW5nZSAxIHRvIDcsIDEgPSBNT04pCgkJc1siJXciXSA9IHc7ICAgIC8vIHRoZSBkYXkgb2YgdGhlIHdlZWsgKHJhbmdlIDAgdG8gNiwgMCA9IFNVTikKCQkvLyBGSVhNRTogJXggOiBwcmVmZXJyZWQgZGF0ZSByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGN1cnJlbnQgbG9jYWxlIHdpdGhvdXQgdGhlIHRpbWUKCQkvLyBGSVhNRTogJVggOiBwcmVmZXJyZWQgdGltZSByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGN1cnJlbnQgbG9jYWxlIHdpdGhvdXQgdGhlIGRhdGUKCQlzWyIleSJdID0gKCcnICsgeSkuc3Vic3RyKDIsIDIpOyAvLyB5ZWFyIHdpdGhvdXQgdGhlIGNlbnR1cnkgKHJhbmdlIDAwIHRvIDk5KQoJCXNbIiVZIl0gPSB5OyAgICAvLyB5ZWFyIHdpdGggdGhlIGNlbnR1cnkKCQlzWyIlJSJdID0gIiUiOyAgICAvLyBhIGxpdGVyYWwgJyUnIGNoYXJhY3RlcgoKCQl2YXIgcmUgPSAvJS4vZzsKCQl2YXIgYSA9IHN0ci5tYXRjaChyZSk7CgkJZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7CgkJCXZhciB0bXAgPSBzW2FbaV1dOwoJCQlpZiAodG1wKSB7CgkJCQlyZSA9IG5ldyBSZWdFeHAoYVtpXSwgJ2cnKTsKCQkJCXN0ciA9IHN0ci5yZXBsYWNlKHJlLCB0bXApOwoJCQl9CgkJfQoKCQlyZXR1cm4gc3RyOwoJCSovCgl9OwoKCURhdGUucHJvdG90eXBlLl9fbXNoX29sZFNldEZ1bGxZZWFyID0gRGF0ZS5wcm90b3R5cGUuc2V0RnVsbFllYXI7CglEYXRlLnByb3RvdHlwZS5zZXRGdWxsWWVhciA9IGZ1bmN0aW9uKHkpIHsKCQl2YXIgZCA9IG5ldyBEYXRlKHRoaXMpOwoJCWQuX19tc2hfb2xkU2V0RnVsbFllYXIoeSk7CgkJaWYgKGQuZ2V0TW9udGgoKSAhPSB0aGlzLmdldE1vbnRoKCkpCgkJCXRoaXMuc2V0RGF0ZSgyOCk7CgkJdGhpcy5fX21zaF9vbGRTZXRGdWxsWWVhcih5KTsKCX0KCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJLy8gVGhlIGpRdWVyeSBwbHVnaW4gZnVuY3Rpb24KCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkkLmZuLmNhbGVuZGFyID0gZnVuY3Rpb24ob3B0aW9ucykgewoJCXZhciBkZWZhdWx0cyA9IHsKCQkJdHJpZ2dlckVsZW1lbnQ6IG51bGwsIC8vIFBvcHVwIGNhbGVuZGFyCgkJCXBhcmVudEVsZW1lbnQ6IG51bGwsIC8vIElubGluZSBjYWxlbmRhcgoJCQltaW5ZZWFyOiAxOTAwLAoJCQltYXhZZWFyOiAyMTAwLAoJCQlmaXJzdERheU9mV2VlazogMSwgLy8gTW9uZGF5CgkJCXdlZWtlbmQ6ICIwLDYiLCAvLyBTdW5kYXkgYW5kIFNhdHVyZGF5CgkJCWRhdGVGb3JtYXQ6ICclWS0lbS0lZCcsCgkJCWRhdGVGaWVsZDogbnVsbCwKCQkJc2VsZWN0SGFuZGxlcjogbnVsbCwKCQkJY2xvc2VIYW5kbGVyOiBudWxsCgkJfTsKCQl2YXIgc2V0dGluZ3MgPSAkLmV4dGVuZCh7fSwgZGVmYXVsdHMsIG9wdGlvbnMpOwoKCQl0aGlzLmVhY2goZnVuY3Rpb24oKSB7CgkJCXZhciBzZWxmID0gJCh0aGlzKTsKCQkJdmFyIGNhbGVuZGFyID0gbmV3IENhbGVuZGFyKCk7CgoJCQljYWxlbmRhci5taW5ZZWFyID0gc2V0dGluZ3MubWluWWVhcjsKCQkJY2FsZW5kYXIubWF4WWVhciA9IHNldHRpbmdzLm1heFllYXI7CgoJCQljYWxlbmRhci5maXJzdERheU9mV2VlayA9IHNldHRpbmdzLmZpcnN0RGF5T2ZXZWVrOwoJCQljYWxlbmRhci53ZWVrZW5kID0gc2V0dGluZ3Mud2Vla2VuZDsKCQkJY2FsZW5kYXIuZGF0ZUZvcm1hdCA9IHNldHRpbmdzLmRhdGVGb3JtYXQ7CgkJCWNhbGVuZGFyLmRhdGVGaWVsZCA9IChzZXR0aW5ncy5kYXRlRmllbGQgfHwgc2VsZik7CgoJCQljYWxlbmRhci5zZWxlY3RIYW5kbGVyID0gKHNldHRpbmdzLnNlbGVjdEhhbmRsZXIgfHwgQ2FsZW5kYXIuZGVmYXVsdFNlbGVjdEhhbmRsZXIpOwoKCQkJLy8gSW5saW5lIENhbGVuZGFyCgkJCXZhciBzZWxmRGF0ZSA9IHNlbGYuaHRtbCgpIHx8IHNlbGYudmFsKCk7CgkJCWlmIChzZXR0aW5ncy5wYXJlbnRFbGVtZW50KSB7CgkJCQljYWxlbmRhci5jcmVhdGUoJChzZXR0aW5ncy5wYXJlbnRFbGVtZW50KSk7CgkJCQlpZiAoc2VsZkRhdGUpIGNhbGVuZGFyLnBhcnNlRGF0ZShzZWxmRGF0ZSk7CgkJCQljYWxlbmRhci5zaG93KCk7CgkJCX0gZWxzZSB7CgkJCQkvLyBQb3B1cCBDYWxlbmRhcgoJCQkJY2FsZW5kYXIuY3JlYXRlKCk7CgkJCQlpZiAoc2VsZkRhdGUpIGNhbGVuZGFyLnBhcnNlRGF0ZShzZWxmRGF0ZSk7CgkJCQl2YXIgdHJpZ2dlckVsZW1lbnQgPSAkKHNldHRpbmdzLnRyaWdnZXJFbGVtZW50IHx8IHNlbGYpOwoJCQkJdHJpZ2dlckVsZW1lbnQuY2xpY2soZnVuY3Rpb24oKSB7CgkJCQkJY2FsZW5kYXIuY2xvc2VIYW5kbGVyID0gKHNldHRpbmdzLmNsb3NlSGFuZGxlciB8fCBDYWxlbmRhci5kZWZhdWx0Q2xvc2VIYW5kbGVyKTsKCQkJCQljYWxlbmRhci5zaG93QXRFbGVtZW50KHRyaWdnZXJFbGVtZW50KTsKCQkJCX0pOwoJCQl9CgkJfSk7CgoJCXJldHVybiB0aGlzOwoJfQoKfSkoalF1ZXJ5KTsK]]></data>
	</file>
	<file>
	  <filename>/js/jq.form.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohCiAqIGpRdWVyeSBGb3JtIFBsdWdpbgogKiB2ZXJzaW9uOiAyLjQzICgxMi1NQVItMjAxMCkKICogQHJlcXVpcmVzIGpRdWVyeSB2MS4zLjIgb3IgbGF0ZXIKICoKICogRXhhbXBsZXMgYW5kIGRvY3VtZW50YXRpb24gYXQ6IGh0dHA6Ly9tYWxzdXAuY29tL2pxdWVyeS9mb3JtLwogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgYW5kIEdQTCBsaWNlbnNlczoKICogICBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocAogKiAgIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbAogKi8KOyhmdW5jdGlvbigkKSB7CgovKgoJVXNhZ2UgTm90ZToKCS0tLS0tLS0tLS0tCglEbyBub3QgdXNlIGJvdGggYWpheFN1Ym1pdCBhbmQgYWpheEZvcm0gb24gdGhlIHNhbWUgZm9ybS4gIFRoZXNlCglmdW5jdGlvbnMgYXJlIGludGVuZGVkIHRvIGJlIGV4Y2x1c2l2ZS4gIFVzZSBhamF4U3VibWl0IGlmIHlvdSB3YW50Cgl0byBiaW5kIHlvdXIgb3duIHN1Ym1pdCBoYW5kbGVyIHRvIHRoZSBmb3JtLiAgRm9yIGV4YW1wbGUsCgoJJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CgkJJCgnI215Rm9ybScpLmJpbmQoJ3N1Ym1pdCcsIGZ1bmN0aW9uKCkgewoJCQkkKHRoaXMpLmFqYXhTdWJtaXQoewoJCQkJdGFyZ2V0OiAnI291dHB1dCcKCQkJfSk7CgkJCXJldHVybiBmYWxzZTsgLy8gPC0tIGltcG9ydGFudCEKCQl9KTsKCX0pOwoKCVVzZSBhamF4Rm9ybSB3aGVuIHlvdSB3YW50IHRoZSBwbHVnaW4gdG8gbWFuYWdlIGFsbCB0aGUgZXZlbnQgYmluZGluZwoJZm9yIHlvdS4gIEZvciBleGFtcGxlLAoKCSQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewoJCSQoJyNteUZvcm0nKS5hamF4Rm9ybSh7CgkJCXRhcmdldDogJyNvdXRwdXQnCgkJfSk7Cgl9KTsKCglXaGVuIHVzaW5nIGFqYXhGb3JtLCB0aGUgYWpheFN1Ym1pdCBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgZm9yIHlvdQoJYXQgdGhlIGFwcHJvcHJpYXRlIHRpbWUuCiovCiQuZm4uYWpheFN1Ym1pdD1mdW5jdGlvbihvcHRpb25zKXtpZighdGhpcy5sZW5ndGgpe2xvZygnYWpheFN1Ym1pdDogc2tpcHBpbmcgc3VibWl0IHByb2Nlc3MgLSBubyBlbGVtZW50IHNlbGVjdGVkJyk7cmV0dXJuIHRoaXN9aWYodHlwZW9mIG9wdGlvbnM9PSdmdW5jdGlvbicpb3B0aW9ucz17c3VjY2VzczpvcHRpb25zfTt2YXIgdXJsPSQudHJpbSh0aGlzLmF0dHIoJ2FjdGlvbicpKTtpZih1cmwpe3VybD0odXJsLm1hdGNoKC9eKFteI10rKS8pfHxbXSlbMV19dXJsPXVybHx8d2luZG93LmxvY2F0aW9uLmhyZWZ8fCcnO29wdGlvbnM9JC5leHRlbmQoe3VybDp1cmwsdHlwZTp0aGlzLmF0dHIoJ21ldGhvZCcpfHwnR0VUJyxpZnJhbWVTcmM6L15odHRwcy9pLnRlc3Qod2luZG93LmxvY2F0aW9uLmhyZWZ8fCcnKT8namF2YXNjcmlwdDpmYWxzZSc6J2Fib3V0OmJsYW5rJ30sb3B0aW9uc3x8e30pO3ZhciB2ZXRvPXt9O3RoaXMudHJpZ2dlcignZm9ybS1wcmUtc2VyaWFsaXplJyxbdGhpcyxvcHRpb25zLHZldG9dKTtpZih2ZXRvLnZldG8pe2xvZygnYWpheFN1Ym1pdDogc3VibWl0IHZldG9lZCB2aWEgZm9ybS1wcmUtc2VyaWFsaXplIHRyaWdnZXInKTtyZXR1cm4gdGhpc31pZihvcHRpb25zLmJlZm9yZVNlcmlhbGl6ZSYmb3B0aW9ucy5iZWZvcmVTZXJpYWxpemUodGhpcyxvcHRpb25zKT09PWZhbHNlKXtsb2coJ2FqYXhTdWJtaXQ6IHN1Ym1pdCBhYm9ydGVkIHZpYSBiZWZvcmVTZXJpYWxpemUgY2FsbGJhY2snKTtyZXR1cm4gdGhpc312YXIgYT10aGlzLmZvcm1Ub0FycmF5KG9wdGlvbnMuc2VtYW50aWMpO2lmKG9wdGlvbnMuZGF0YSl7b3B0aW9ucy5leHRyYURhdGE9b3B0aW9ucy5kYXRhO2Zvcih2YXIgbiBpbiBvcHRpb25zLmRhdGEpe2lmKG9wdGlvbnMuZGF0YVtuXWluc3RhbmNlb2YgQXJyYXkpe2Zvcih2YXIgayBpbiBvcHRpb25zLmRhdGFbbl0pYS5wdXNoKHtuYW1lOm4sdmFsdWU6b3B0aW9ucy5kYXRhW25dW2tdfSl9ZWxzZSBhLnB1c2goe25hbWU6bix2YWx1ZTpvcHRpb25zLmRhdGFbbl19KX19aWYob3B0aW9ucy5iZWZvcmVTdWJtaXQmJm9wdGlvbnMuYmVmb3JlU3VibWl0KGEsdGhpcyxvcHRpb25zKT09PWZhbHNlKXtsb2coJ2FqYXhTdWJtaXQ6IHN1Ym1pdCBhYm9ydGVkIHZpYSBiZWZvcmVTdWJtaXQgY2FsbGJhY2snKTtyZXR1cm4gdGhpc310aGlzLnRyaWdnZXIoJ2Zvcm0tc3VibWl0LXZhbGlkYXRlJyxbYSx0aGlzLG9wdGlvbnMsdmV0b10pO2lmKHZldG8udmV0byl7bG9nKCdhamF4U3VibWl0OiBzdWJtaXQgdmV0b2VkIHZpYSBmb3JtLXN1Ym1pdC12YWxpZGF0ZSB0cmlnZ2VyJyk7cmV0dXJuIHRoaXN9dmFyIHE9JC5wYXJhbShhKTtpZihvcHRpb25zLnR5cGUudG9VcHBlckNhc2UoKT09J0dFVCcpe29wdGlvbnMudXJsKz0ob3B0aW9ucy51cmwuaW5kZXhPZignPycpPj0wPycmJzonPycpK3E7b3B0aW9ucy5kYXRhPW51bGx9ZWxzZSBvcHRpb25zLmRhdGE9cTt2YXIgJGZvcm09dGhpcyxjYWxsYmFja3M9W107aWYob3B0aW9ucy5yZXNldEZvcm0pY2FsbGJhY2tzLnB1c2goZnVuY3Rpb24oKXskZm9ybS5yZXNldEZvcm0oKX0pO2lmKG9wdGlvbnMuY2xlYXJGb3JtKWNhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uKCl7JGZvcm0uY2xlYXJGb3JtKCl9KTtpZighb3B0aW9ucy5kYXRhVHlwZSYmb3B0aW9ucy50YXJnZXQpe3ZhciBvbGRTdWNjZXNzPW9wdGlvbnMuc3VjY2Vzc3x8ZnVuY3Rpb24oKXt9O2NhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uKGRhdGEpe3ZhciBmbj1vcHRpb25zLnJlcGxhY2VUYXJnZXQ/J3JlcGxhY2VXaXRoJzonaHRtbCc7JChvcHRpb25zLnRhcmdldClbZm5dKGRhdGEpLmVhY2gob2xkU3VjY2Vzcyxhcmd1bWVudHMpfSl9ZWxzZSBpZihvcHRpb25zLnN1Y2Nlc3MpY2FsbGJhY2tzLnB1c2gob3B0aW9ucy5zdWNjZXNzKTtvcHRpb25zLnN1Y2Nlc3M9ZnVuY3Rpb24oZGF0YSxzdGF0dXMseGhyKXtmb3IodmFyIGk9MCxtYXg9Y2FsbGJhY2tzLmxlbmd0aDtpPG1heDtpKyspY2FsbGJhY2tzW2ldLmFwcGx5KG9wdGlvbnMsW2RhdGEsc3RhdHVzLHhocnx8JGZvcm0sJGZvcm1dKX07dmFyIGZpbGVzPSQoJ2lucHV0OmZpbGUnLHRoaXMpLmZpZWxkVmFsdWUoKTt2YXIgZm91bmQ9ZmFsc2U7Zm9yKHZhciBqPTA7ajxmaWxlcy5sZW5ndGg7aisrKWlmKGZpbGVzW2pdKWZvdW5kPXRydWU7dmFyIG11bHRpcGFydD1mYWxzZTtpZigoZmlsZXMubGVuZ3RoJiZvcHRpb25zLmlmcmFtZSE9PWZhbHNlKXx8b3B0aW9ucy5pZnJhbWV8fGZvdW5kfHxtdWx0aXBhcnQpe2lmKG9wdGlvbnMuY2xvc2VLZWVwQWxpdmUpJC5nZXQob3B0aW9ucy5jbG9zZUtlZXBBbGl2ZSxmaWxlVXBsb2FkKTtlbHNlIGZpbGVVcGxvYWQoKX1lbHNlICQuYWpheChvcHRpb25zKTt0aGlzLnRyaWdnZXIoJ2Zvcm0tc3VibWl0LW5vdGlmeScsW3RoaXMsb3B0aW9uc10pO3JldHVybiB0aGlzO2Z1bmN0aW9uIGZpbGVVcGxvYWQoKXt2YXIgZm9ybT0kZm9ybVswXTtpZigkKCc6aW5wdXRbbmFtZT1zdWJtaXRdJyxmb3JtKS5sZW5ndGgpe2FsZXJ0KCdFcnJvcjogRm9ybSBlbGVtZW50cyBtdXN0IG5vdCBiZSBuYW1lZCAic3VibWl0Ii4nKTtyZXR1cm59dmFyIG9wdHM9JC5leHRlbmQoe30sJC5hamF4U2V0dGluZ3Msb3B0aW9ucyk7dmFyIHM9JC5leHRlbmQodHJ1ZSx7fSwkLmV4dGVuZCh0cnVlLHt9LCQuYWpheFNldHRpbmdzKSxvcHRzKTt2YXIgaWQ9J2pxRm9ybUlPJysobmV3IERhdGUoKS5nZXRUaW1lKCkpO3ZhciAkaW89JCgnPGlmcmFtZSBpZD0iJytpZCsnIiBuYW1lPSInK2lkKyciIHNyYz0iJytvcHRzLmlmcmFtZVNyYysnIiBvbmxvYWQ9IihqUXVlcnkodGhpcykuZGF0YShcJ2Zvcm0tcGx1Z2luLW9ubG9hZFwnKSkoKSIgLz4nKTt2YXIgaW89JGlvWzBdOyRpby5jc3Moe3Bvc2l0aW9uOidhYnNvbHV0ZScsdG9wOictMTAwMHB4JyxsZWZ0OictMTAwMHB4J30pO3ZhciB4aHI9e2Fib3J0ZWQ6MCxyZXNwb25zZVRleHQ6bnVsbCxyZXNwb25zZVhNTDpudWxsLHN0YXR1czowLHN0YXR1c1RleHQ6J24vYScsZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7fSxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbigpe30sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbigpe30sYWJvcnQ6ZnVuY3Rpb24oKXt0aGlzLmFib3J0ZWQ9MTskaW8uYXR0cignc3JjJyxvcHRzLmlmcmFtZVNyYyl9fTt2YXIgZz1vcHRzLmdsb2JhbDtpZihnJiYhJC5hY3RpdmUrKykkLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpO2lmKGcpJC5ldmVudC50cmlnZ2VyKCJhamF4U2VuZCIsW3hocixvcHRzXSk7aWYocy5iZWZvcmVTZW5kJiZzLmJlZm9yZVNlbmQoeGhyLHMpPT09ZmFsc2Upe3MuZ2xvYmFsJiYkLmFjdGl2ZS0tO3JldHVybn1pZih4aHIuYWJvcnRlZClyZXR1cm47dmFyIGNiSW52b2tlZD1mYWxzZTt2YXIgdGltZWRPdXQ9MDt2YXIgc3ViPWZvcm0uY2xrO2lmKHN1Yil7dmFyIG49c3ViLm5hbWU7aWYobiYmIXN1Yi5kaXNhYmxlZCl7b3B0cy5leHRyYURhdGE9b3B0cy5leHRyYURhdGF8fHt9O29wdHMuZXh0cmFEYXRhW25dPXN1Yi52YWx1ZTtpZihzdWIudHlwZT09ImltYWdlIil7b3B0cy5leHRyYURhdGFbbisnLngnXT1mb3JtLmNsa194O29wdHMuZXh0cmFEYXRhW24rJy55J109Zm9ybS5jbGtfeX19fWZ1bmN0aW9uIGRvU3VibWl0KCl7dmFyIHQ9JGZvcm0uYXR0cigndGFyZ2V0JyksYT0kZm9ybS5hdHRyKCdhY3Rpb24nKTtmb3JtLnNldEF0dHJpYnV0ZSgndGFyZ2V0JyxpZCk7aWYoZm9ybS5nZXRBdHRyaWJ1dGUoJ21ldGhvZCcpIT0nUE9TVCcpZm9ybS5zZXRBdHRyaWJ1dGUoJ21ldGhvZCcsJ1BPU1QnKTtpZihmb3JtLmdldEF0dHJpYnV0ZSgnYWN0aW9uJykhPW9wdHMudXJsKWZvcm0uc2V0QXR0cmlidXRlKCdhY3Rpb24nLG9wdHMudXJsKTtpZighb3B0cy5za2lwRW5jb2RpbmdPdmVycmlkZSl7JGZvcm0uYXR0cih7ZW5jb2Rpbmc6J211bHRpcGFydC9mb3JtLWRhdGEnLGVuY3R5cGU6J211bHRpcGFydC9mb3JtLWRhdGEnfSl9aWYob3B0cy50aW1lb3V0KXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aW1lZE91dD10cnVlO2NiKCl9LG9wdHMudGltZW91dCk7dmFyIGV4dHJhSW5wdXRzPVtdO3RyeXtpZihvcHRzLmV4dHJhRGF0YSlmb3IodmFyIG4gaW4gb3B0cy5leHRyYURhdGEpZXh0cmFJbnB1dHMucHVzaCgkKCc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSInK24rJyIgdmFsdWU9Iicrb3B0cy5leHRyYURhdGFbbl0rJyIgLz4nKS5hcHBlbmRUbyhmb3JtKVswXSk7JGlvLmFwcGVuZFRvKCdib2R5Jyk7JGlvLmRhdGEoJ2Zvcm0tcGx1Z2luLW9ubG9hZCcsY2IpO2Zvcm0uc3VibWl0KCl9ZmluYWxseXtmb3JtLnNldEF0dHJpYnV0ZSgnYWN0aW9uJyxhKTt0P2Zvcm0uc2V0QXR0cmlidXRlKCd0YXJnZXQnLHQpOiRmb3JtLnJlbW92ZUF0dHIoJ3RhcmdldCcpOyQoZXh0cmFJbnB1dHMpLnJlbW92ZSgpfX07aWYob3B0cy5mb3JjZVN5bmMpZG9TdWJtaXQoKTtlbHNlIHNldFRpbWVvdXQoZG9TdWJtaXQsMTApO3ZhciBkb21DaGVja0NvdW50PTEwMDtmdW5jdGlvbiBjYigpe2lmKGNiSW52b2tlZClyZXR1cm47dmFyIG9rPXRydWU7dHJ5e2lmKHRpbWVkT3V0KXRocm93J3RpbWVvdXQnO3ZhciBkYXRhLGRvYztkb2M9aW8uY29udGVudFdpbmRvdz9pby5jb250ZW50V2luZG93LmRvY3VtZW50OmlvLmNvbnRlbnREb2N1bWVudD9pby5jb250ZW50RG9jdW1lbnQ6aW8uZG9jdW1lbnQ7dmFyIGlzWG1sPW9wdHMuZGF0YVR5cGU9PSd4bWwnfHxkb2MuWE1MRG9jdW1lbnR8fCQuaXNYTUxEb2MoZG9jKTtsb2coJ2lzWG1sPScraXNYbWwpO2lmKCFpc1htbCYmKGRvYy5ib2R5PT1udWxsfHxkb2MuYm9keS5pbm5lckhUTUw9PScnKSl7aWYoLS1kb21DaGVja0NvdW50KXtsb2coJ3JlcXVlaW5nIG9uTG9hZCBjYWxsYmFjaywgRE9NIG5vdCBhdmFpbGFibGUnKTtzZXRUaW1lb3V0KGNiLDI1MCk7cmV0dXJufWxvZygnQ291bGQgbm90IGFjY2VzcyBpZnJhbWUgRE9NIGFmdGVyIDEwMCB0cmllcy4nKTtyZXR1cm59bG9nKCdyZXNwb25zZSBkZXRlY3RlZCcpO2NiSW52b2tlZD10cnVlO3hoci5yZXNwb25zZVRleHQ9ZG9jLmJvZHk/ZG9jLmJvZHkuaW5uZXJIVE1MOm51bGw7eGhyLnJlc3BvbnNlWE1MPWRvYy5YTUxEb2N1bWVudD9kb2MuWE1MRG9jdW1lbnQ6ZG9jO3hoci5nZXRSZXNwb25zZUhlYWRlcj1mdW5jdGlvbihoZWFkZXIpe3ZhciBoZWFkZXJzPXsnY29udGVudC10eXBlJzpvcHRzLmRhdGFUeXBlfTtyZXR1cm4gaGVhZGVyc1toZWFkZXJdfTtpZihvcHRzLmRhdGFUeXBlPT0nanNvbid8fG9wdHMuZGF0YVR5cGU9PSdzY3JpcHQnKXt2YXIgdGE9ZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0ZXh0YXJlYScpWzBdO2lmKHRhKXhoci5yZXNwb25zZVRleHQ9dGEudmFsdWU7ZWxzZXt2YXIgcHJlPWRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgncHJlJylbMF07aWYocHJlKXhoci5yZXNwb25zZVRleHQ9cHJlLmlubmVySFRNTH19ZWxzZSBpZihvcHRzLmRhdGFUeXBlPT0neG1sJyYmIXhoci5yZXNwb25zZVhNTCYmeGhyLnJlc3BvbnNlVGV4dCE9bnVsbCl7eGhyLnJlc3BvbnNlWE1MPXRvWG1sKHhoci5yZXNwb25zZVRleHQpfWRhdGE9JC5odHRwRGF0YSh4aHIsb3B0cy5kYXRhVHlwZSl9Y2F0Y2goZSl7bG9nKCdlcnJvciBjYXVnaHQ6JyxlKTtvaz1mYWxzZTt4aHIuZXJyb3I9ZTskLmhhbmRsZUVycm9yKG9wdHMseGhyLCdlcnJvcicsZSl9aWYob2spe29wdHMuc3VjY2VzcyhkYXRhLCdzdWNjZXNzJyk7aWYoZykkLmV2ZW50LnRyaWdnZXIoImFqYXhTdWNjZXNzIixbeGhyLG9wdHNdKX1pZihnKSQuZXZlbnQudHJpZ2dlcigiYWpheENvbXBsZXRlIixbeGhyLG9wdHNdKTtpZihnJiYhLS0kLmFjdGl2ZSkkLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIik7aWYob3B0cy5jb21wbGV0ZSlvcHRzLmNvbXBsZXRlKHhocixvaz8nc3VjY2Vzcyc6J2Vycm9yJyk7c2V0VGltZW91dChmdW5jdGlvbigpeyRpby5yZW1vdmVEYXRhKCdmb3JtLXBsdWdpbi1vbmxvYWQnKTskaW8ucmVtb3ZlKCk7eGhyLnJlc3BvbnNlWE1MPW51bGx9LDEwMCl9O2Z1bmN0aW9uIHRvWG1sKHMsZG9jKXtpZih3aW5kb3cuQWN0aXZlWE9iamVjdCl7ZG9jPW5ldyBBY3RpdmVYT2JqZWN0KCdNaWNyb3NvZnQuWE1MRE9NJyk7ZG9jLmFzeW5jPSdmYWxzZSc7ZG9jLmxvYWRYTUwocyl9ZWxzZSBkb2M9KG5ldyBET01QYXJzZXIoKSkucGFyc2VGcm9tU3RyaW5nKHMsJ3RleHQveG1sJyk7cmV0dXJuKGRvYyYmZG9jLmRvY3VtZW50RWxlbWVudCYmZG9jLmRvY3VtZW50RWxlbWVudC50YWdOYW1lIT0ncGFyc2VyZXJyb3InKT9kb2M6bnVsbH19fTskLmZuLmFqYXhGb3JtPWZ1bmN0aW9uKG9wdGlvbnMpe3JldHVybiB0aGlzLmFqYXhGb3JtVW5iaW5kKCkuYmluZCgnc3VibWl0LmZvcm0tcGx1Z2luJyxmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCk7JCh0aGlzKS5hamF4U3VibWl0KG9wdGlvbnMpfSkuYmluZCgnY2xpY2suZm9ybS1wbHVnaW4nLGZ1bmN0aW9uKGUpe3ZhciB0YXJnZXQ9ZS50YXJnZXQ7dmFyICRlbD0kKHRhcmdldCk7aWYoISgkZWwuaXMoIjpzdWJtaXQsaW5wdXQ6aW1hZ2UiKSkpe3ZhciB0PSRlbC5jbG9zZXN0KCc6c3VibWl0Jyk7aWYodC5sZW5ndGg9PTApcmV0dXJuO3RhcmdldD10WzBdfXZhciBmb3JtPXRoaXM7Zm9ybS5jbGs9dGFyZ2V0O2lmKHRhcmdldC50eXBlPT0naW1hZ2UnKXtpZihlLm9mZnNldFghPXVuZGVmaW5lZCl7Zm9ybS5jbGtfeD1lLm9mZnNldFg7Zm9ybS5jbGtfeT1lLm9mZnNldFl9ZWxzZSBpZih0eXBlb2YgJC5mbi5vZmZzZXQ9PSdmdW5jdGlvbicpe3ZhciBvZmZzZXQ9JGVsLm9mZnNldCgpO2Zvcm0uY2xrX3g9ZS5wYWdlWC1vZmZzZXQubGVmdDtmb3JtLmNsa195PWUucGFnZVktb2Zmc2V0LnRvcH1lbHNle2Zvcm0uY2xrX3g9ZS5wYWdlWC10YXJnZXQub2Zmc2V0TGVmdDtmb3JtLmNsa195PWUucGFnZVktdGFyZ2V0Lm9mZnNldFRvcH19c2V0VGltZW91dChmdW5jdGlvbigpe2Zvcm0uY2xrPWZvcm0uY2xrX3g9Zm9ybS5jbGtfeT1udWxsfSwxMDApfSl9OyQuZm4uYWpheEZvcm1VbmJpbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmJpbmQoJ3N1Ym1pdC5mb3JtLXBsdWdpbiBjbGljay5mb3JtLXBsdWdpbicpfTskLmZuLmZvcm1Ub0FycmF5PWZ1bmN0aW9uKHNlbWFudGljKXt2YXIgYT1bXTtpZih0aGlzLmxlbmd0aD09MClyZXR1cm4gYTt2YXIgZm9ybT10aGlzWzBdO3ZhciBlbHM9c2VtYW50aWM/Zm9ybS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpOmZvcm0uZWxlbWVudHM7aWYoIWVscylyZXR1cm4gYTtmb3IodmFyIGk9MCxtYXg9ZWxzLmxlbmd0aDtpPG1heDtpKyspe3ZhciBlbD1lbHNbaV07dmFyIG49ZWwubmFtZTtpZighbiljb250aW51ZTtpZihzZW1hbnRpYyYmZm9ybS5jbGsmJmVsLnR5cGU9PSJpbWFnZSIpe2lmKCFlbC5kaXNhYmxlZCYmZm9ybS5jbGs9PWVsKXthLnB1c2goe25hbWU6bix2YWx1ZTokKGVsKS52YWwoKX0pO2EucHVzaCh7bmFtZTpuKycueCcsdmFsdWU6Zm9ybS5jbGtfeH0se25hbWU6bisnLnknLHZhbHVlOmZvcm0uY2xrX3l9KX1jb250aW51ZX12YXIgdj0kLmZpZWxkVmFsdWUoZWwsdHJ1ZSk7aWYodiYmdi5jb25zdHJ1Y3Rvcj09QXJyYXkpe2Zvcih2YXIgaj0wLGptYXg9di5sZW5ndGg7ajxqbWF4O2orKylhLnB1c2goe25hbWU6bix2YWx1ZTp2W2pdfSl9ZWxzZSBpZih2IT09bnVsbCYmdHlwZW9mIHYhPSd1bmRlZmluZWQnKWEucHVzaCh7bmFtZTpuLHZhbHVlOnZ9KX1pZighc2VtYW50aWMmJmZvcm0uY2xrKXt2YXIgJGlucHV0PSQoZm9ybS5jbGspLGlucHV0PSRpbnB1dFswXSxuPWlucHV0Lm5hbWU7aWYobiYmIWlucHV0LmRpc2FibGVkJiZpbnB1dC50eXBlPT0naW1hZ2UnKXthLnB1c2goe25hbWU6bix2YWx1ZTokaW5wdXQudmFsKCl9KTthLnB1c2goe25hbWU6bisnLngnLHZhbHVlOmZvcm0uY2xrX3h9LHtuYW1lOm4rJy55Jyx2YWx1ZTpmb3JtLmNsa195fSl9fXJldHVybiBhfTskLmZuLmZvcm1TZXJpYWxpemU9ZnVuY3Rpb24oc2VtYW50aWMpe3JldHVybiAkLnBhcmFtKHRoaXMuZm9ybVRvQXJyYXkoc2VtYW50aWMpKX07JC5mbi5maWVsZFNlcmlhbGl6ZT1mdW5jdGlvbihzdWNjZXNzZnVsKXt2YXIgYT1bXTt0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbj10aGlzLm5hbWU7aWYoIW4pcmV0dXJuO3ZhciB2PSQuZmllbGRWYWx1ZSh0aGlzLHN1Y2Nlc3NmdWwpO2lmKHYmJnYuY29uc3RydWN0b3I9PUFycmF5KXtmb3IodmFyIGk9MCxtYXg9di5sZW5ndGg7aTxtYXg7aSsrKWEucHVzaCh7bmFtZTpuLHZhbHVlOnZbaV19KX1lbHNlIGlmKHYhPT1udWxsJiZ0eXBlb2YgdiE9J3VuZGVmaW5lZCcpYS5wdXNoKHtuYW1lOnRoaXMubmFtZSx2YWx1ZTp2fSl9KTtyZXR1cm4gJC5wYXJhbShhKX07JC5mbi5maWVsZFZhbHVlPWZ1bmN0aW9uKHN1Y2Nlc3NmdWwpe2Zvcih2YXIgdmFsPVtdLGk9MCxtYXg9dGhpcy5sZW5ndGg7aTxtYXg7aSsrKXt2YXIgZWw9dGhpc1tpXTt2YXIgdj0kLmZpZWxkVmFsdWUoZWwsc3VjY2Vzc2Z1bCk7aWYodj09PW51bGx8fHR5cGVvZiB2PT0ndW5kZWZpbmVkJ3x8KHYuY29uc3RydWN0b3I9PUFycmF5JiYhdi5sZW5ndGgpKWNvbnRpbnVlO3YuY29uc3RydWN0b3I9PUFycmF5PyQubWVyZ2UodmFsLHYpOnZhbC5wdXNoKHYpfXJldHVybiB2YWx9OyQuZmllbGRWYWx1ZT1mdW5jdGlvbihlbCxzdWNjZXNzZnVsKXt2YXIgbj1lbC5uYW1lLHQ9ZWwudHlwZSx0YWc9ZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpO2lmKHR5cGVvZiBzdWNjZXNzZnVsPT0ndW5kZWZpbmVkJylzdWNjZXNzZnVsPXRydWU7aWYoc3VjY2Vzc2Z1bCYmKCFufHxlbC5kaXNhYmxlZHx8dD09J3Jlc2V0J3x8dD09J2J1dHRvbid8fCh0PT0nY2hlY2tib3gnfHx0PT0ncmFkaW8nKSYmIWVsLmNoZWNrZWR8fCh0PT0nc3VibWl0J3x8dD09J2ltYWdlJykmJmVsLmZvcm0mJmVsLmZvcm0uY2xrIT1lbHx8dGFnPT0nc2VsZWN0JyYmZWwuc2VsZWN0ZWRJbmRleD09LTEpKXJldHVybiBudWxsO2lmKHRhZz09J3NlbGVjdCcpe3ZhciBpbmRleD1lbC5zZWxlY3RlZEluZGV4O2lmKGluZGV4PDApcmV0dXJuIG51bGw7dmFyIGE9W10sb3BzPWVsLm9wdGlvbnM7dmFyIG9uZT0odD09J3NlbGVjdC1vbmUnKTt2YXIgbWF4PShvbmU/aW5kZXgrMTpvcHMubGVuZ3RoKTtmb3IodmFyIGk9KG9uZT9pbmRleDowKTtpPG1heDtpKyspe3ZhciBvcD1vcHNbaV07aWYob3Auc2VsZWN0ZWQpe3ZhciB2PW9wLnZhbHVlO2lmKCF2KXY9KG9wLmF0dHJpYnV0ZXMmJm9wLmF0dHJpYnV0ZXNbJ3ZhbHVlJ10mJiEob3AuYXR0cmlidXRlc1sndmFsdWUnXS5zcGVjaWZpZWQpKT9vcC50ZXh0Om9wLnZhbHVlO2lmKG9uZSlyZXR1cm4gdjthLnB1c2godil9fXJldHVybiBhfXJldHVybiBlbC52YWx1ZX07JC5mbi5jbGVhckZvcm09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7JCgnaW5wdXQsc2VsZWN0LHRleHRhcmVhJyx0aGlzKS5jbGVhckZpZWxkcygpfSl9OyQuZm4uY2xlYXJGaWVsZHM9JC5mbi5jbGVhcklucHV0cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD10aGlzLnR5cGUsdGFnPXRoaXMudGFnTmFtZS50b0xvd2VyQ2FzZSgpO2lmKHQ9PSd0ZXh0J3x8dD09J3Bhc3N3b3JkJ3x8dGFnPT0ndGV4dGFyZWEnKXRoaXMudmFsdWU9Jyc7ZWxzZSBpZih0PT0nY2hlY2tib3gnfHx0PT0ncmFkaW8nKXRoaXMuY2hlY2tlZD1mYWxzZTtlbHNlIGlmKHRhZz09J3NlbGVjdCcpdGhpcy5zZWxlY3RlZEluZGV4PS0xfSl9OyQuZm4ucmVzZXRGb3JtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2lmKHR5cGVvZiB0aGlzLnJlc2V0PT0nZnVuY3Rpb24nfHwodHlwZW9mIHRoaXMucmVzZXQ9PSdvYmplY3QnJiYhdGhpcy5yZXNldC5ub2RlVHlwZSkpdGhpcy5yZXNldCgpfSl9OyQuZm4uZW5hYmxlPWZ1bmN0aW9uKGIpe2lmKGI9PXVuZGVmaW5lZCliPXRydWU7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9IWJ9KX07JC5mbi5zZWxlY3RlZD1mdW5jdGlvbihzZWxlY3Qpe2lmKHNlbGVjdD09dW5kZWZpbmVkKXNlbGVjdD10cnVlO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD10aGlzLnR5cGU7aWYodD09J2NoZWNrYm94J3x8dD09J3JhZGlvJyl0aGlzLmNoZWNrZWQ9c2VsZWN0O2Vsc2UgaWYodGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSdvcHRpb24nKXt2YXIgJHNlbD0kKHRoaXMpLnBhcmVudCgnc2VsZWN0Jyk7aWYoc2VsZWN0JiYkc2VsWzBdJiYkc2VsWzBdLnR5cGU9PSdzZWxlY3Qtb25lJyl7JHNlbC5maW5kKCdvcHRpb24nKS5zZWxlY3RlZChmYWxzZSl9dGhpcy5zZWxlY3RlZD1zZWxlY3R9fSl9O2Z1bmN0aW9uIGxvZygpe2lmKCQuZm4uYWpheFN1Ym1pdC5kZWJ1Zyl7dmFyIG1zZz0nW2pxdWVyeS5mb3JtXSAnK0FycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoYXJndW1lbnRzLCcnKTtpZih3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUubG9nKXdpbmRvdy5jb25zb2xlLmxvZyhtc2cpO2Vsc2UgaWYod2luZG93Lm9wZXJhJiZ3aW5kb3cub3BlcmEucG9zdEVycm9yKXdpbmRvdy5vcGVyYS5wb3N0RXJyb3IobXNnKX19fSkoalF1ZXJ5KTsK]]></data>
	</file>
	<file>
	  <filename>/js/jq.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohCiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjEuNC4yCiAqIGh0dHA6Ly9qcXVlcnkuY29tLwogKgogKiBDb3B5cmlnaHQgMjAxMCwgSm9obiBSZXNpZwogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQogKgogKiBJbmNsdWRlcyBTaXp6bGUuanMKICogaHR0cDovL3NpenpsZWpzLmNvbS8KICogQ29weXJpZ2h0IDIwMTAsIFRoZSBEb2pvIEZvdW5kYXRpb24KICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCwgQlNELCBhbmQgR1BMIExpY2Vuc2VzLgogKgogKiBEYXRlOiBTYXQgRmViIDEzIDIyOjMzOjQ4IDIwMTAgLTA1MDAKICovCihmdW5jdGlvbihBLHcpe2Z1bmN0aW9uIG1hKCl7aWYoIWMuaXNSZWFkeSl7dHJ5e3MuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKCJsZWZ0Iil9Y2F0Y2goYSl7c2V0VGltZW91dChtYSwxKTtyZXR1cm59Yy5yZWFkeSgpfX1mdW5jdGlvbiBRYShhLGIpe2Iuc3JjP2MuYWpheCh7dXJsOmIuc3JjLGFzeW5jOmZhbHNlLGRhdGFUeXBlOiJzY3JpcHQifSk6Yy5nbG9iYWxFdmFsKGIudGV4dHx8Yi50ZXh0Q29udGVudHx8Yi5pbm5lckhUTUx8fCIiKTtiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKX1mdW5jdGlvbiBYKGEsYixkLGYsZSxqKXt2YXIgaT1hLmxlbmd0aDtpZih0eXBlb2YgYj09PSJvYmplY3QiKXtmb3IodmFyIG8gaW4gYilYKGEsbyxiW29dLGYsZSxkKTtyZXR1cm4gYX1pZihkIT09dyl7Zj0haiYmZiYmYy5pc0Z1bmN0aW9uKGQpO2ZvcihvPTA7bzxpO28rKyllKGFbb10sYixmP2QuY2FsbChhW29dLG8sZShhW29dLGIpKTpkLGopO3JldHVybiBhfXJldHVybiBpPwplKGFbMF0sYik6d31mdW5jdGlvbiBKKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9ZnVuY3Rpb24gWSgpe3JldHVybiBmYWxzZX1mdW5jdGlvbiBaKCl7cmV0dXJuIHRydWV9ZnVuY3Rpb24gbmEoYSxiLGQpe2RbMF0udHlwZT1hO3JldHVybiBjLmV2ZW50LmhhbmRsZS5hcHBseShiLGQpfWZ1bmN0aW9uIG9hKGEpe3ZhciBiLGQ9W10sZj1bXSxlPWFyZ3VtZW50cyxqLGksbyxrLG4scjtpPWMuZGF0YSh0aGlzLCJldmVudHMiKTtpZighKGEubGl2ZUZpcmVkPT09dGhpc3x8IWl8fCFpLmxpdmV8fGEuYnV0dG9uJiZhLnR5cGU9PT0iY2xpY2siKSl7YS5saXZlRmlyZWQ9dGhpczt2YXIgdT1pLmxpdmUuc2xpY2UoMCk7Zm9yKGs9MDtrPHUubGVuZ3RoO2srKyl7aT11W2tdO2kub3JpZ1R5cGUucmVwbGFjZShPLCIiKT09PWEudHlwZT9mLnB1c2goaS5zZWxlY3Rvcik6dS5zcGxpY2Uoay0tLDEpfWo9YyhhLnRhcmdldCkuY2xvc2VzdChmLGEuY3VycmVudFRhcmdldCk7bj0wO2ZvcihyPQpqLmxlbmd0aDtuPHI7bisrKWZvcihrPTA7azx1Lmxlbmd0aDtrKyspe2k9dVtrXTtpZihqW25dLnNlbGVjdG9yPT09aS5zZWxlY3Rvcil7bz1qW25dLmVsZW07Zj1udWxsO2lmKGkucHJlVHlwZT09PSJtb3VzZWVudGVyInx8aS5wcmVUeXBlPT09Im1vdXNlbGVhdmUiKWY9YyhhLnJlbGF0ZWRUYXJnZXQpLmNsb3Nlc3QoaS5zZWxlY3RvcilbMF07aWYoIWZ8fGYhPT1vKWQucHVzaCh7ZWxlbTpvLGhhbmRsZU9iajppfSl9fW49MDtmb3Iocj1kLmxlbmd0aDtuPHI7bisrKXtqPWRbbl07YS5jdXJyZW50VGFyZ2V0PWouZWxlbTthLmRhdGE9ai5oYW5kbGVPYmouZGF0YTthLmhhbmRsZU9iaj1qLmhhbmRsZU9iajtpZihqLmhhbmRsZU9iai5vcmlnSGFuZGxlci5hcHBseShqLmVsZW0sZSk9PT1mYWxzZSl7Yj1mYWxzZTticmVha319cmV0dXJuIGJ9fWZ1bmN0aW9uIHBhKGEsYil7cmV0dXJuImxpdmUuIisoYSYmYSE9PSIqIj9hKyIuIjoiIikrYi5yZXBsYWNlKC9cLi9nLCJgIikucmVwbGFjZSgvIC9nLAoiJiIpfWZ1bmN0aW9uIHFhKGEpe3JldHVybiFhfHwhYS5wYXJlbnROb2RlfHxhLnBhcmVudE5vZGUubm9kZVR5cGU9PT0xMX1mdW5jdGlvbiByYShhLGIpe3ZhciBkPTA7Yi5lYWNoKGZ1bmN0aW9uKCl7aWYodGhpcy5ub2RlTmFtZT09PShhW2RdJiZhW2RdLm5vZGVOYW1lKSl7dmFyIGY9Yy5kYXRhKGFbZCsrXSksZT1jLmRhdGEodGhpcyxmKTtpZihmPWYmJmYuZXZlbnRzKXtkZWxldGUgZS5oYW5kbGU7ZS5ldmVudHM9e307Zm9yKHZhciBqIGluIGYpZm9yKHZhciBpIGluIGZbal0pYy5ldmVudC5hZGQodGhpcyxqLGZbal1baV0sZltqXVtpXS5kYXRhKX19fSl9ZnVuY3Rpb24gc2EoYSxiLGQpe3ZhciBmLGUsajtiPWImJmJbMF0/YlswXS5vd25lckRvY3VtZW50fHxiWzBdOnM7aWYoYS5sZW5ndGg9PT0xJiZ0eXBlb2YgYVswXT09PSJzdHJpbmciJiZhWzBdLmxlbmd0aDw1MTImJmI9PT1zJiYhdGEudGVzdChhWzBdKSYmKGMuc3VwcG9ydC5jaGVja0Nsb25lfHwhdWEudGVzdChhWzBdKSkpe2U9CnRydWU7aWYoaj1jLmZyYWdtZW50c1thWzBdXSlpZihqIT09MSlmPWp9aWYoIWYpe2Y9Yi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Yy5jbGVhbihhLGIsZixkKX1pZihlKWMuZnJhZ21lbnRzW2FbMF1dPWo/ZjoxO3JldHVybntmcmFnbWVudDpmLGNhY2hlYWJsZTplfX1mdW5jdGlvbiBLKGEsYil7dmFyIGQ9e307Yy5lYWNoKHZhLmNvbmNhdC5hcHBseShbXSx2YS5zbGljZSgwLGIpKSxmdW5jdGlvbigpe2RbdGhpc109YX0pO3JldHVybiBkfWZ1bmN0aW9uIHdhKGEpe3JldHVybiJzY3JvbGxUbyJpbiBhJiZhLmRvY3VtZW50P2E6YS5ub2RlVHlwZT09PTk/YS5kZWZhdWx0Vmlld3x8YS5wYXJlbnRXaW5kb3c6ZmFsc2V9dmFyIGM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IGMuZm4uaW5pdChhLGIpfSxSYT1BLmpRdWVyeSxTYT1BLiQscz1BLmRvY3VtZW50LFQsVGE9L15bXjxdKig8W1x3XFddKz4pW14+XSokfF4jKFtcdy1dKykkLyxVYT0vXi5bXjojXFtcLixdKiQvLFZhPS9cUy8sCldhPS9eKFxzfFx1MDBBMCkrfChcc3xcdTAwQTApKyQvZyxYYT0vXjwoXHcrKVxzKlwvPz4oPzo8XC9cMT4pPyQvLFA9bmF2aWdhdG9yLnVzZXJBZ2VudCx4YT1mYWxzZSxRPVtdLEwsJD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGFhPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksYmE9QXJyYXkucHJvdG90eXBlLnB1c2gsUj1BcnJheS5wcm90b3R5cGUuc2xpY2UseWE9QXJyYXkucHJvdG90eXBlLmluZGV4T2Y7Yy5mbj1jLnByb3RvdHlwZT17aW5pdDpmdW5jdGlvbihhLGIpe3ZhciBkLGY7aWYoIWEpcmV0dXJuIHRoaXM7aWYoYS5ub2RlVHlwZSl7dGhpcy5jb250ZXh0PXRoaXNbMF09YTt0aGlzLmxlbmd0aD0xO3JldHVybiB0aGlzfWlmKGE9PT0iYm9keSImJiFiKXt0aGlzLmNvbnRleHQ9czt0aGlzWzBdPXMuYm9keTt0aGlzLnNlbGVjdG9yPSJib2R5Ijt0aGlzLmxlbmd0aD0xO3JldHVybiB0aGlzfWlmKHR5cGVvZiBhPT09InN0cmluZyIpaWYoKGQ9VGEuZXhlYyhhKSkmJgooZFsxXXx8IWIpKWlmKGRbMV0pe2Y9Yj9iLm93bmVyRG9jdW1lbnR8fGI6cztpZihhPVhhLmV4ZWMoYSkpaWYoYy5pc1BsYWluT2JqZWN0KGIpKXthPVtzLmNyZWF0ZUVsZW1lbnQoYVsxXSldO2MuZm4uYXR0ci5jYWxsKGEsYix0cnVlKX1lbHNlIGE9W2YuY3JlYXRlRWxlbWVudChhWzFdKV07ZWxzZXthPXNhKFtkWzFdXSxbZl0pO2E9KGEuY2FjaGVhYmxlP2EuZnJhZ21lbnQuY2xvbmVOb2RlKHRydWUpOmEuZnJhZ21lbnQpLmNoaWxkTm9kZXN9cmV0dXJuIGMubWVyZ2UodGhpcyxhKX1lbHNle2lmKGI9cy5nZXRFbGVtZW50QnlJZChkWzJdKSl7aWYoYi5pZCE9PWRbMl0pcmV0dXJuIFQuZmluZChhKTt0aGlzLmxlbmd0aD0xO3RoaXNbMF09Yn10aGlzLmNvbnRleHQ9czt0aGlzLnNlbGVjdG9yPWE7cmV0dXJuIHRoaXN9ZWxzZSBpZighYiYmL15cdyskLy50ZXN0KGEpKXt0aGlzLnNlbGVjdG9yPWE7dGhpcy5jb250ZXh0PXM7YT1zLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpO3JldHVybiBjLm1lcmdlKHRoaXMsCmEpfWVsc2UgcmV0dXJuIWJ8fGIuanF1ZXJ5PyhifHxUKS5maW5kKGEpOmMoYikuZmluZChhKTtlbHNlIGlmKGMuaXNGdW5jdGlvbihhKSlyZXR1cm4gVC5yZWFkeShhKTtpZihhLnNlbGVjdG9yIT09dyl7dGhpcy5zZWxlY3Rvcj1hLnNlbGVjdG9yO3RoaXMuY29udGV4dD1hLmNvbnRleHR9cmV0dXJuIGMubWFrZUFycmF5KGEsdGhpcyl9LHNlbGVjdG9yOiIiLGpxdWVyeToiMS40LjIiLGxlbmd0aDowLHNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gUi5jYWxsKHRoaXMsMCl9LGdldDpmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD90aGlzLnRvQXJyYXkoKTphPDA/dGhpcy5zbGljZShhKVswXTp0aGlzW2FdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oYSxiLGQpe3ZhciBmPWMoKTtjLmlzQXJyYXkoYSk/YmEuYXBwbHkoZixhKTpjLm1lcmdlKGYsYSk7Zi5wcmV2T2JqZWN0PXRoaXM7Zi5jb250ZXh0PXRoaXMuY29udGV4dDtpZihiPT09CiJmaW5kIilmLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrKHRoaXMuc2VsZWN0b3I/IiAiOiIiKStkO2Vsc2UgaWYoYilmLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrIi4iK2IrIigiK2QrIikiO3JldHVybiBmfSxlYWNoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGMuZWFjaCh0aGlzLGEsYil9LHJlYWR5OmZ1bmN0aW9uKGEpe2MuYmluZFJlYWR5KCk7aWYoYy5pc1JlYWR5KWEuY2FsbChzLGMpO2Vsc2UgUSYmUS5wdXNoKGEpO3JldHVybiB0aGlzfSxlcTpmdW5jdGlvbihhKXtyZXR1cm4gYT09PS0xP3RoaXMuc2xpY2UoYSk6dGhpcy5zbGljZShhLCthKzEpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhSLmFwcGx5KHRoaXMsYXJndW1lbnRzKSwic2xpY2UiLFIuY2FsbChhcmd1bWVudHMpLmpvaW4oIiwiKSl9LG1hcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYy5tYXAodGhpcywKZnVuY3Rpb24oYixkKXtyZXR1cm4gYS5jYWxsKGIsZCxiKX0pKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8YyhudWxsKX0scHVzaDpiYSxzb3J0OltdLnNvcnQsc3BsaWNlOltdLnNwbGljZX07Yy5mbi5pbml0LnByb3RvdHlwZT1jLmZuO2MuZXh0ZW5kPWMuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzWzBdfHx7fSxiPTEsZD1hcmd1bWVudHMubGVuZ3RoLGY9ZmFsc2UsZSxqLGksbztpZih0eXBlb2YgYT09PSJib29sZWFuIil7Zj1hO2E9YXJndW1lbnRzWzFdfHx7fTtiPTJ9aWYodHlwZW9mIGEhPT0ib2JqZWN0IiYmIWMuaXNGdW5jdGlvbihhKSlhPXt9O2lmKGQ9PT1iKXthPXRoaXM7LS1ifWZvcig7YjxkO2IrKylpZigoZT1hcmd1bWVudHNbYl0pIT1udWxsKWZvcihqIGluIGUpe2k9YVtqXTtvPWVbal07aWYoYSE9PW8paWYoZiYmbyYmKGMuaXNQbGFpbk9iamVjdChvKXx8Yy5pc0FycmF5KG8pKSl7aT1pJiYoYy5pc1BsYWluT2JqZWN0KGkpfHwKYy5pc0FycmF5KGkpKT9pOmMuaXNBcnJheShvKT9bXTp7fTthW2pdPWMuZXh0ZW5kKGYsaSxvKX1lbHNlIGlmKG8hPT13KWFbal09b31yZXR1cm4gYX07Yy5leHRlbmQoe25vQ29uZmxpY3Q6ZnVuY3Rpb24oYSl7QS4kPVNhO2lmKGEpQS5qUXVlcnk9UmE7cmV0dXJuIGN9LGlzUmVhZHk6ZmFsc2UscmVhZHk6ZnVuY3Rpb24oKXtpZighYy5pc1JlYWR5KXtpZighcy5ib2R5KXJldHVybiBzZXRUaW1lb3V0KGMucmVhZHksMTMpO2MuaXNSZWFkeT10cnVlO2lmKFEpe2Zvcih2YXIgYSxiPTA7YT1RW2IrK107KWEuY2FsbChzLGMpO1E9bnVsbH1jLmZuLnRyaWdnZXJIYW5kbGVyJiZjKHMpLnRyaWdnZXJIYW5kbGVyKCJyZWFkeSIpfX0sYmluZFJlYWR5OmZ1bmN0aW9uKCl7aWYoIXhhKXt4YT10cnVlO2lmKHMucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSIpcmV0dXJuIGMucmVhZHkoKTtpZihzLmFkZEV2ZW50TGlzdGVuZXIpe3MuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsCkwsZmFsc2UpO0EuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsYy5yZWFkeSxmYWxzZSl9ZWxzZSBpZihzLmF0dGFjaEV2ZW50KXtzLmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLEwpO0EuYXR0YWNoRXZlbnQoIm9ubG9hZCIsYy5yZWFkeSk7dmFyIGE9ZmFsc2U7dHJ5e2E9QS5mcmFtZUVsZW1lbnQ9PW51bGx9Y2F0Y2goYil7fXMuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsJiZhJiZtYSgpfX19LGlzRnVuY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuICQuY2FsbChhKT09PSJbb2JqZWN0IEZ1bmN0aW9uXSJ9LGlzQXJyYXk6ZnVuY3Rpb24oYSl7cmV0dXJuICQuY2FsbChhKT09PSJbb2JqZWN0IEFycmF5XSJ9LGlzUGxhaW5PYmplY3Q6ZnVuY3Rpb24oYSl7aWYoIWF8fCQuY2FsbChhKSE9PSJbb2JqZWN0IE9iamVjdF0ifHxhLm5vZGVUeXBlfHxhLnNldEludGVydmFsKXJldHVybiBmYWxzZTtpZihhLmNvbnN0cnVjdG9yJiYhYWEuY2FsbChhLCJjb25zdHJ1Y3RvciIpJiYhYWEuY2FsbChhLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwKImlzUHJvdG90eXBlT2YiKSlyZXR1cm4gZmFsc2U7dmFyIGI7Zm9yKGIgaW4gYSk7cmV0dXJuIGI9PT13fHxhYS5jYWxsKGEsYil9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiIGluIGEpcmV0dXJuIGZhbHNlO3JldHVybiB0cnVlfSxlcnJvcjpmdW5jdGlvbihhKXt0aHJvdyBhO30scGFyc2VKU09OOmZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBhIT09InN0cmluZyJ8fCFhKXJldHVybiBudWxsO2E9Yy50cmltKGEpO2lmKC9eW1xdLDp7fVxzXSokLy50ZXN0KGEucmVwbGFjZSgvXFwoPzpbIlxcXC9iZm5ydF18dVswLTlhLWZBLUZdezR9KS9nLCJAIikucmVwbGFjZSgvIlteIlxcXG5ccl0qInx0cnVlfGZhbHNlfG51bGx8LT9cZCsoPzpcLlxkKik/KD86W2VFXVsrXC1dP1xkKyk/L2csIl0iKS5yZXBsYWNlKC8oPzpefDp8LCkoPzpccypcWykrL2csIiIpKSlyZXR1cm4gQS5KU09OJiZBLkpTT04ucGFyc2U/QS5KU09OLnBhcnNlKGEpOihuZXcgRnVuY3Rpb24oInJldHVybiAiKwphKSkoKTtlbHNlIGMuZXJyb3IoIkludmFsaWQgSlNPTjogIithKX0sbm9vcDpmdW5jdGlvbigpe30sZ2xvYmFsRXZhbDpmdW5jdGlvbihhKXtpZihhJiZWYS50ZXN0KGEpKXt2YXIgYj1zLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fHMuZG9jdW1lbnRFbGVtZW50LGQ9cy5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtkLnR5cGU9InRleHQvamF2YXNjcmlwdCI7aWYoYy5zdXBwb3J0LnNjcmlwdEV2YWwpZC5hcHBlbmRDaGlsZChzLmNyZWF0ZVRleHROb2RlKGEpKTtlbHNlIGQudGV4dD1hO2IuaW5zZXJ0QmVmb3JlKGQsYi5maXJzdENoaWxkKTtiLnJlbW92ZUNoaWxkKGQpfX0sbm9kZU5hbWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpPT09Yi50b1VwcGVyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9uKGEsYixkKXt2YXIgZixlPTAsaj1hLmxlbmd0aCxpPWo9PT13fHxjLmlzRnVuY3Rpb24oYSk7aWYoZClpZihpKWZvcihmIGluIGEpe2lmKGIuYXBwbHkoYVtmXSwKZCk9PT1mYWxzZSlicmVha31lbHNlIGZvcig7ZTxqOyl7aWYoYi5hcHBseShhW2UrK10sZCk9PT1mYWxzZSlicmVha31lbHNlIGlmKGkpZm9yKGYgaW4gYSl7aWYoYi5jYWxsKGFbZl0sZixhW2ZdKT09PWZhbHNlKWJyZWFrfWVsc2UgZm9yKGQ9YVswXTtlPGomJmIuY2FsbChkLGUsZCkhPT1mYWxzZTtkPWFbKytlXSk7cmV0dXJuIGF9LHRyaW06ZnVuY3Rpb24oYSl7cmV0dXJuKGF8fCIiKS5yZXBsYWNlKFdhLCIiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGEsYil7Yj1ifHxbXTtpZihhIT1udWxsKWEubGVuZ3RoPT1udWxsfHx0eXBlb2YgYT09PSJzdHJpbmcifHxjLmlzRnVuY3Rpb24oYSl8fHR5cGVvZiBhIT09ImZ1bmN0aW9uIiYmYS5zZXRJbnRlcnZhbD9iYS5jYWxsKGIsYSk6Yy5tZXJnZShiLGEpO3JldHVybiBifSxpbkFycmF5OmZ1bmN0aW9uKGEsYil7aWYoYi5pbmRleE9mKXJldHVybiBiLmluZGV4T2YoYSk7Zm9yKHZhciBkPTAsZj1iLmxlbmd0aDtkPGY7ZCsrKWlmKGJbZF09PT0KYSlyZXR1cm4gZDtyZXR1cm4tMX0sbWVyZ2U6ZnVuY3Rpb24oYSxiKXt2YXIgZD1hLmxlbmd0aCxmPTA7aWYodHlwZW9mIGIubGVuZ3RoPT09Im51bWJlciIpZm9yKHZhciBlPWIubGVuZ3RoO2Y8ZTtmKyspYVtkKytdPWJbZl07ZWxzZSBmb3IoO2JbZl0hPT13OylhW2QrK109YltmKytdO2EubGVuZ3RoPWQ7cmV0dXJuIGF9LGdyZXA6ZnVuY3Rpb24oYSxiLGQpe2Zvcih2YXIgZj1bXSxlPTAsaj1hLmxlbmd0aDtlPGo7ZSsrKSFkIT09IWIoYVtlXSxlKSYmZi5wdXNoKGFbZV0pO3JldHVybiBmfSxtYXA6ZnVuY3Rpb24oYSxiLGQpe2Zvcih2YXIgZj1bXSxlLGo9MCxpPWEubGVuZ3RoO2o8aTtqKyspe2U9YihhW2pdLGosZCk7aWYoZSE9bnVsbClmW2YubGVuZ3RoXT1lfXJldHVybiBmLmNvbmNhdC5hcHBseShbXSxmKX0sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGEsYixkKXtpZihhcmd1bWVudHMubGVuZ3RoPT09MilpZih0eXBlb2YgYj09PSJzdHJpbmciKXtkPWE7YT1kW2JdO2I9d31lbHNlIGlmKGImJgohYy5pc0Z1bmN0aW9uKGIpKXtkPWI7Yj13fWlmKCFiJiZhKWI9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShkfHx0aGlzLGFyZ3VtZW50cyl9O2lmKGEpYi5ndWlkPWEuZ3VpZD1hLmd1aWR8fGIuZ3VpZHx8Yy5ndWlkKys7cmV0dXJuIGJ9LHVhTWF0Y2g6ZnVuY3Rpb24oYSl7YT1hLnRvTG93ZXJDYXNlKCk7YT0vKHdlYmtpdClbIFwvXShbXHcuXSspLy5leGVjKGEpfHwvKG9wZXJhKSg/Oi4qdmVyc2lvbik/WyBcL10oW1x3Ll0rKS8uZXhlYyhhKXx8Lyhtc2llKSAoW1x3Ll0rKS8uZXhlYyhhKXx8IS9jb21wYXRpYmxlLy50ZXN0KGEpJiYvKG1vemlsbGEpKD86Lio/IHJ2OihbXHcuXSspKT8vLmV4ZWMoYSl8fFtdO3JldHVybnticm93c2VyOmFbMV18fCIiLHZlcnNpb246YVsyXXx8IjAifX0sYnJvd3Nlcjp7fX0pO1A9Yy51YU1hdGNoKFApO2lmKFAuYnJvd3Nlcil7Yy5icm93c2VyW1AuYnJvd3Nlcl09dHJ1ZTtjLmJyb3dzZXIudmVyc2lvbj1QLnZlcnNpb259aWYoYy5icm93c2VyLndlYmtpdCljLmJyb3dzZXIuc2FmYXJpPQp0cnVlO2lmKHlhKWMuaW5BcnJheT1mdW5jdGlvbihhLGIpe3JldHVybiB5YS5jYWxsKGIsYSl9O1Q9YyhzKTtpZihzLmFkZEV2ZW50TGlzdGVuZXIpTD1mdW5jdGlvbigpe3MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsTCxmYWxzZSk7Yy5yZWFkeSgpfTtlbHNlIGlmKHMuYXR0YWNoRXZlbnQpTD1mdW5jdGlvbigpe2lmKHMucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSIpe3MuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsTCk7Yy5yZWFkeSgpfX07KGZ1bmN0aW9uKCl7Yy5zdXBwb3J0PXt9O3ZhciBhPXMuZG9jdW1lbnRFbGVtZW50LGI9cy5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxkPXMuY3JlYXRlRWxlbWVudCgiZGl2IiksZj0ic2NyaXB0IitKKCk7ZC5zdHlsZS5kaXNwbGF5PSJub25lIjtkLmlubmVySFRNTD0iICAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJyBzdHlsZT0nY29sb3I6cmVkO2Zsb2F0OmxlZnQ7b3BhY2l0eTouNTU7Jz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiI7CnZhciBlPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSxqPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXTtpZighKCFlfHwhZS5sZW5ndGh8fCFqKSl7Yy5zdXBwb3J0PXtsZWFkaW5nV2hpdGVzcGFjZTpkLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0zLHRib2R5OiFkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLmxlbmd0aCxodG1sU2VyaWFsaXplOiEhZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCxzdHlsZTovcmVkLy50ZXN0KGouZ2V0QXR0cmlidXRlKCJzdHlsZSIpKSxocmVmTm9ybWFsaXplZDpqLmdldEF0dHJpYnV0ZSgiaHJlZiIpPT09Ii9hIixvcGFjaXR5Oi9eMC41NSQvLnRlc3Qoai5zdHlsZS5vcGFjaXR5KSxjc3NGbG9hdDohIWouc3R5bGUuY3NzRmxvYXQsY2hlY2tPbjpkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzBdLnZhbHVlPT09Im9uIixvcHRTZWxlY3RlZDpzLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLmFwcGVuZENoaWxkKHMuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLnNlbGVjdGVkLApwYXJlbnROb2RlOmQucmVtb3ZlQ2hpbGQoZC5hcHBlbmRDaGlsZChzLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSkucGFyZW50Tm9kZT09PW51bGwsZGVsZXRlRXhwYW5kbzp0cnVlLGNoZWNrQ2xvbmU6ZmFsc2Usc2NyaXB0RXZhbDpmYWxzZSxub0Nsb25lRXZlbnQ6dHJ1ZSxib3hNb2RlbDpudWxsfTtiLnR5cGU9InRleHQvamF2YXNjcmlwdCI7dHJ5e2IuYXBwZW5kQ2hpbGQocy5jcmVhdGVUZXh0Tm9kZSgid2luZG93LiIrZisiPTE7IikpfWNhdGNoKGkpe31hLmluc2VydEJlZm9yZShiLGEuZmlyc3RDaGlsZCk7aWYoQVtmXSl7Yy5zdXBwb3J0LnNjcmlwdEV2YWw9dHJ1ZTtkZWxldGUgQVtmXX10cnl7ZGVsZXRlIGIudGVzdH1jYXRjaChvKXtjLnN1cHBvcnQuZGVsZXRlRXhwYW5kbz1mYWxzZX1hLnJlbW92ZUNoaWxkKGIpO2lmKGQuYXR0YWNoRXZlbnQmJmQuZmlyZUV2ZW50KXtkLmF0dGFjaEV2ZW50KCJvbmNsaWNrIixmdW5jdGlvbiBrKCl7Yy5zdXBwb3J0Lm5vQ2xvbmVFdmVudD0KZmFsc2U7ZC5kZXRhY2hFdmVudCgib25jbGljayIsayl9KTtkLmNsb25lTm9kZSh0cnVlKS5maXJlRXZlbnQoIm9uY2xpY2siKX1kPXMuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZC5pbm5lckhUTUw9IjxpbnB1dCB0eXBlPSdyYWRpbycgbmFtZT0ncmFkaW90ZXN0JyBjaGVja2VkPSdjaGVja2VkJy8+IjthPXMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2EuYXBwZW5kQ2hpbGQoZC5maXJzdENoaWxkKTtjLnN1cHBvcnQuY2hlY2tDbG9uZT1hLmNsb25lTm9kZSh0cnVlKS5jbG9uZU5vZGUodHJ1ZSkubGFzdENoaWxkLmNoZWNrZWQ7YyhmdW5jdGlvbigpe3ZhciBrPXMuY3JlYXRlRWxlbWVudCgiZGl2Iik7ay5zdHlsZS53aWR0aD1rLnN0eWxlLnBhZGRpbmdMZWZ0PSIxcHgiO3MuYm9keS5hcHBlbmRDaGlsZChrKTtjLmJveE1vZGVsPWMuc3VwcG9ydC5ib3hNb2RlbD1rLm9mZnNldFdpZHRoPT09MjtzLmJvZHkucmVtb3ZlQ2hpbGQoaykuc3R5bGUuZGlzcGxheT0ibm9uZSJ9KTthPWZ1bmN0aW9uKGspe3ZhciBuPQpzLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2s9Im9uIitrO3ZhciByPWsgaW4gbjtpZighcil7bi5zZXRBdHRyaWJ1dGUoaywicmV0dXJuOyIpO3I9dHlwZW9mIG5ba109PT0iZnVuY3Rpb24ifXJldHVybiByfTtjLnN1cHBvcnQuc3VibWl0QnViYmxlcz1hKCJzdWJtaXQiKTtjLnN1cHBvcnQuY2hhbmdlQnViYmxlcz1hKCJjaGFuZ2UiKTthPWI9ZD1lPWo9bnVsbH19KSgpO2MucHJvcHM9eyJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUiLHJlYWRvbmx5OiJyZWFkT25seSIsbWF4bGVuZ3RoOiJtYXhMZW5ndGgiLGNlbGxzcGFjaW5nOiJjZWxsU3BhY2luZyIscm93c3Bhbjoicm93U3BhbiIsY29sc3BhbjoiY29sU3BhbiIsdGFiaW5kZXg6InRhYkluZGV4Iix1c2VtYXA6InVzZU1hcCIsZnJhbWVib3JkZXI6ImZyYW1lQm9yZGVyIn07dmFyIEc9ImpRdWVyeSIrSigpLFlhPTAsemE9e307Yy5leHRlbmQoe2NhY2hlOnt9LGV4cGFuZG86Ryxub0RhdGE6e2VtYmVkOnRydWUsb2JqZWN0OnRydWUsCmFwcGxldDp0cnVlfSxkYXRhOmZ1bmN0aW9uKGEsYixkKXtpZighKGEubm9kZU5hbWUmJmMubm9EYXRhW2Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pKXthPWE9PUE/emE6YTt2YXIgZj1hW0ddLGU9Yy5jYWNoZTtpZighZiYmdHlwZW9mIGI9PT0ic3RyaW5nIiYmZD09PXcpcmV0dXJuIG51bGw7Znx8KGY9KytZYSk7aWYodHlwZW9mIGI9PT0ib2JqZWN0Iil7YVtHXT1mO2VbZl09Yy5leHRlbmQodHJ1ZSx7fSxiKX1lbHNlIGlmKCFlW2ZdKXthW0ddPWY7ZVtmXT17fX1hPWVbZl07aWYoZCE9PXcpYVtiXT1kO3JldHVybiB0eXBlb2YgYj09PSJzdHJpbmciP2FbYl06YX19LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSxiKXtpZighKGEubm9kZU5hbWUmJmMubm9EYXRhW2Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pKXthPWE9PUE/emE6YTt2YXIgZD1hW0ddLGY9Yy5jYWNoZSxlPWZbZF07aWYoYil7aWYoZSl7ZGVsZXRlIGVbYl07Yy5pc0VtcHR5T2JqZWN0KGUpJiZjLnJlbW92ZURhdGEoYSl9fWVsc2V7aWYoYy5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8pZGVsZXRlIGFbYy5leHBhbmRvXTsKZWxzZSBhLnJlbW92ZUF0dHJpYnV0ZSYmYS5yZW1vdmVBdHRyaWJ1dGUoYy5leHBhbmRvKTtkZWxldGUgZltkXX19fX0pO2MuZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKGEsYil7aWYodHlwZW9mIGE9PT0idW5kZWZpbmVkIiYmdGhpcy5sZW5ndGgpcmV0dXJuIGMuZGF0YSh0aGlzWzBdKTtlbHNlIGlmKHR5cGVvZiBhPT09Im9iamVjdCIpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2MuZGF0YSh0aGlzLGEpfSk7dmFyIGQ9YS5zcGxpdCgiLiIpO2RbMV09ZFsxXT8iLiIrZFsxXToiIjtpZihiPT09dyl7dmFyIGY9dGhpcy50cmlnZ2VySGFuZGxlcigiZ2V0RGF0YSIrZFsxXSsiISIsW2RbMF1dKTtpZihmPT09dyYmdGhpcy5sZW5ndGgpZj1jLmRhdGEodGhpc1swXSxhKTtyZXR1cm4gZj09PXcmJmRbMV0/dGhpcy5kYXRhKGRbMF0pOmZ9ZWxzZSByZXR1cm4gdGhpcy50cmlnZ2VyKCJzZXREYXRhIitkWzFdKyIhIixbZFswXSxiXSkuZWFjaChmdW5jdGlvbigpe2MuZGF0YSh0aGlzLAphLGIpfSl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2MucmVtb3ZlRGF0YSh0aGlzLGEpfSl9fSk7Yy5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGEsYixkKXtpZihhKXtiPShifHwiZngiKSsicXVldWUiO3ZhciBmPWMuZGF0YShhLGIpO2lmKCFkKXJldHVybiBmfHxbXTtpZighZnx8Yy5pc0FycmF5KGQpKWY9Yy5kYXRhKGEsYixjLm1ha2VBcnJheShkKSk7ZWxzZSBmLnB1c2goZCk7cmV0dXJuIGZ9fSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBkPWMucXVldWUoYSxiKSxmPWQuc2hpZnQoKTtpZihmPT09ImlucHJvZ3Jlc3MiKWY9ZC5zaGlmdCgpO2lmKGYpe2I9PT0iZngiJiZkLnVuc2hpZnQoImlucHJvZ3Jlc3MiKTtmLmNhbGwoYSxmdW5jdGlvbigpe2MuZGVxdWV1ZShhLGIpfSl9fX0pO2MuZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBhIT09InN0cmluZyIpe2I9YTthPSJmeCJ9aWYoYj09PQp3KXJldHVybiBjLnF1ZXVlKHRoaXNbMF0sYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWMucXVldWUodGhpcyxhLGIpO2E9PT0iZngiJiZkWzBdIT09ImlucHJvZ3Jlc3MiJiZjLmRlcXVldWUodGhpcyxhKX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtjLmRlcXVldWUodGhpcyxhKX0pfSxkZWxheTpmdW5jdGlvbihhLGIpe2E9Yy5meD9jLmZ4LnNwZWVkc1thXXx8YTphO2I9Ynx8ImZ4IjtyZXR1cm4gdGhpcy5xdWV1ZShiLGZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yy5kZXF1ZXVlKGQsYil9LGEpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucXVldWUoYXx8ImZ4IixbXSl9fSk7dmFyIEFhPS9bXG5cdF0vZyxjYT0vXHMrLyxaYT0vXHIvZywkYT0vaHJlZnxzcmN8c3R5bGUvLGFiPS8oYnV0dG9ufGlucHV0KS9pLGJiPS8oYnV0dG9ufGlucHV0fG9iamVjdHxzZWxlY3R8dGV4dGFyZWEpL2ksCmNiPS9eKGF8YXJlYSkkL2ksQmE9L3JhZGlvfGNoZWNrYm94LztjLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIpe3JldHVybiBYKHRoaXMsYSxiLHRydWUsYy5hdHRyKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Yy5hdHRyKHRoaXMsYSwiIik7dGhpcy5ub2RlVHlwZT09PTEmJnRoaXMucmVtb3ZlQXR0cmlidXRlKGEpfSl9LGFkZENsYXNzOmZ1bmN0aW9uKGEpe2lmKGMuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3ZhciByPWModGhpcyk7ci5hZGRDbGFzcyhhLmNhbGwodGhpcyxuLHIuYXR0cigiY2xhc3MiKSkpfSk7aWYoYSYmdHlwZW9mIGE9PT0ic3RyaW5nIilmb3IodmFyIGI9KGF8fCIiKS5zcGxpdChjYSksZD0wLGY9dGhpcy5sZW5ndGg7ZDxmO2QrKyl7dmFyIGU9dGhpc1tkXTtpZihlLm5vZGVUeXBlPT09MSlpZihlLmNsYXNzTmFtZSl7Zm9yKHZhciBqPSIgIitlLmNsYXNzTmFtZSsiICIsCmk9ZS5jbGFzc05hbWUsbz0wLGs9Yi5sZW5ndGg7bzxrO28rKylpZihqLmluZGV4T2YoIiAiK2Jbb10rIiAiKTwwKWkrPSIgIitiW29dO2UuY2xhc3NOYW1lPWMudHJpbShpKX1lbHNlIGUuY2xhc3NOYW1lPWF9cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGEpe2lmKGMuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGspe3ZhciBuPWModGhpcyk7bi5yZW1vdmVDbGFzcyhhLmNhbGwodGhpcyxrLG4uYXR0cigiY2xhc3MiKSkpfSk7aWYoYSYmdHlwZW9mIGE9PT0ic3RyaW5nInx8YT09PXcpZm9yKHZhciBiPShhfHwiIikuc3BsaXQoY2EpLGQ9MCxmPXRoaXMubGVuZ3RoO2Q8ZjtkKyspe3ZhciBlPXRoaXNbZF07aWYoZS5ub2RlVHlwZT09PTEmJmUuY2xhc3NOYW1lKWlmKGEpe2Zvcih2YXIgaj0oIiAiK2UuY2xhc3NOYW1lKyIgIikucmVwbGFjZShBYSwiICIpLGk9MCxvPWIubGVuZ3RoO2k8bztpKyspaj1qLnJlcGxhY2UoIiAiK2JbaV0rIiAiLAoiICIpO2UuY2xhc3NOYW1lPWMudHJpbShqKX1lbHNlIGUuY2xhc3NOYW1lPSIifXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihhLGIpe3ZhciBkPXR5cGVvZiBhLGY9dHlwZW9mIGI9PT0iYm9vbGVhbiI7aWYoYy5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZSl7dmFyIGo9Yyh0aGlzKTtqLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLGUsai5hdHRyKCJjbGFzcyIpLGIpLGIpfSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2lmKGQ9PT0ic3RyaW5nIilmb3IodmFyIGUsaj0wLGk9Yyh0aGlzKSxvPWIsaz1hLnNwbGl0KGNhKTtlPWtbaisrXTspe289Zj9vOiFpLmhhc0NsYXNzKGUpO2lbbz8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKGUpfWVsc2UgaWYoZD09PSJ1bmRlZmluZWQifHxkPT09ImJvb2xlYW4iKXt0aGlzLmNsYXNzTmFtZSYmYy5kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iLHRoaXMuY2xhc3NOYW1lKTt0aGlzLmNsYXNzTmFtZT0KdGhpcy5jbGFzc05hbWV8fGE9PT1mYWxzZT8iIjpjLmRhdGEodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIn19KX0saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7YT0iICIrYSsiICI7Zm9yKHZhciBiPTAsZD10aGlzLmxlbmd0aDtiPGQ7YisrKWlmKCgiICIrdGhpc1tiXS5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKEFhLCIgIikuaW5kZXhPZihhKT4tMSlyZXR1cm4gdHJ1ZTtyZXR1cm4gZmFsc2V9LHZhbDpmdW5jdGlvbihhKXtpZihhPT09dyl7dmFyIGI9dGhpc1swXTtpZihiKXtpZihjLm5vZGVOYW1lKGIsIm9wdGlvbiIpKXJldHVybihiLmF0dHJpYnV0ZXMudmFsdWV8fHt9KS5zcGVjaWZpZWQ/Yi52YWx1ZTpiLnRleHQ7aWYoYy5ub2RlTmFtZShiLCJzZWxlY3QiKSl7dmFyIGQ9Yi5zZWxlY3RlZEluZGV4LGY9W10sZT1iLm9wdGlvbnM7Yj1iLnR5cGU9PT0ic2VsZWN0LW9uZSI7aWYoZDwwKXJldHVybiBudWxsO3ZhciBqPWI/ZDowO2ZvcihkPWI/ZCsxOmUubGVuZ3RoO2o8ZDtqKyspe3ZhciBpPQplW2pdO2lmKGkuc2VsZWN0ZWQpe2E9YyhpKS52YWwoKTtpZihiKXJldHVybiBhO2YucHVzaChhKX19cmV0dXJuIGZ9aWYoQmEudGVzdChiLnR5cGUpJiYhYy5zdXBwb3J0LmNoZWNrT24pcmV0dXJuIGIuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpPT09bnVsbD8ib24iOmIudmFsdWU7cmV0dXJuKGIudmFsdWV8fCIiKS5yZXBsYWNlKFphLCIiKX1yZXR1cm4gd312YXIgbz1jLmlzRnVuY3Rpb24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihrKXt2YXIgbj1jKHRoaXMpLHI9YTtpZih0aGlzLm5vZGVUeXBlPT09MSl7aWYobylyPWEuY2FsbCh0aGlzLGssbi52YWwoKSk7aWYodHlwZW9mIHI9PT0ibnVtYmVyIilyKz0iIjtpZihjLmlzQXJyYXkocikmJkJhLnRlc3QodGhpcy50eXBlKSl0aGlzLmNoZWNrZWQ9Yy5pbkFycmF5KG4udmFsKCkscik+PTA7ZWxzZSBpZihjLm5vZGVOYW1lKHRoaXMsInNlbGVjdCIpKXt2YXIgdT1jLm1ha2VBcnJheShyKTtjKCJvcHRpb24iLHRoaXMpLmVhY2goZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkPQpjLmluQXJyYXkoYyh0aGlzKS52YWwoKSx1KT49MH0pO2lmKCF1Lmxlbmd0aCl0aGlzLnNlbGVjdGVkSW5kZXg9LTF9ZWxzZSB0aGlzLnZhbHVlPXJ9fSl9fSk7Yy5leHRlbmQoe2F0dHJGbjp7dmFsOnRydWUsY3NzOnRydWUsaHRtbDp0cnVlLHRleHQ6dHJ1ZSxkYXRhOnRydWUsd2lkdGg6dHJ1ZSxoZWlnaHQ6dHJ1ZSxvZmZzZXQ6dHJ1ZX0sYXR0cjpmdW5jdGlvbihhLGIsZCxmKXtpZighYXx8YS5ub2RlVHlwZT09PTN8fGEubm9kZVR5cGU9PT04KXJldHVybiB3O2lmKGYmJmIgaW4gYy5hdHRyRm4pcmV0dXJuIGMoYSlbYl0oZCk7Zj1hLm5vZGVUeXBlIT09MXx8IWMuaXNYTUxEb2MoYSk7dmFyIGU9ZCE9PXc7Yj1mJiZjLnByb3BzW2JdfHxiO2lmKGEubm9kZVR5cGU9PT0xKXt2YXIgaj0kYS50ZXN0KGIpO2lmKGIgaW4gYSYmZiYmIWope2lmKGUpe2I9PT0idHlwZSImJmFiLnRlc3QoYS5ub2RlTmFtZSkmJmEucGFyZW50Tm9kZSYmYy5lcnJvcigidHlwZSBwcm9wZXJ0eSBjYW4ndCBiZSBjaGFuZ2VkIik7CmFbYl09ZH1pZihjLm5vZGVOYW1lKGEsImZvcm0iKSYmYS5nZXRBdHRyaWJ1dGVOb2RlKGIpKXJldHVybiBhLmdldEF0dHJpYnV0ZU5vZGUoYikubm9kZVZhbHVlO2lmKGI9PT0idGFiSW5kZXgiKXJldHVybihiPWEuZ2V0QXR0cmlidXRlTm9kZSgidGFiSW5kZXgiKSkmJmIuc3BlY2lmaWVkP2IudmFsdWU6YmIudGVzdChhLm5vZGVOYW1lKXx8Y2IudGVzdChhLm5vZGVOYW1lKSYmYS5ocmVmPzA6dztyZXR1cm4gYVtiXX1pZighYy5zdXBwb3J0LnN0eWxlJiZmJiZiPT09InN0eWxlIil7aWYoZSlhLnN0eWxlLmNzc1RleHQ9IiIrZDtyZXR1cm4gYS5zdHlsZS5jc3NUZXh0fWUmJmEuc2V0QXR0cmlidXRlKGIsIiIrZCk7YT0hYy5zdXBwb3J0LmhyZWZOb3JtYWxpemVkJiZmJiZqP2EuZ2V0QXR0cmlidXRlKGIsMik6YS5nZXRBdHRyaWJ1dGUoYik7cmV0dXJuIGE9PT1udWxsP3c6YX1yZXR1cm4gYy5zdHlsZShhLGIsZCl9fSk7dmFyIE89L1wuKC4qKSQvLGRiPWZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoL1teXHdcc1wuXHxgXS9nLApmdW5jdGlvbihiKXtyZXR1cm4iXFwiK2J9KX07Yy5ldmVudD17YWRkOmZ1bmN0aW9uKGEsYixkLGYpe2lmKCEoYS5ub2RlVHlwZT09PTN8fGEubm9kZVR5cGU9PT04KSl7aWYoYS5zZXRJbnRlcnZhbCYmYSE9PUEmJiFhLmZyYW1lRWxlbWVudClhPUE7dmFyIGUsajtpZihkLmhhbmRsZXIpe2U9ZDtkPWUuaGFuZGxlcn1pZighZC5ndWlkKWQuZ3VpZD1jLmd1aWQrKztpZihqPWMuZGF0YShhKSl7dmFyIGk9ai5ldmVudHM9ai5ldmVudHN8fHt9LG89ai5oYW5kbGU7aWYoIW8pai5oYW5kbGU9bz1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgYyE9PSJ1bmRlZmluZWQiJiYhYy5ldmVudC50cmlnZ2VyZWQ/Yy5ldmVudC5oYW5kbGUuYXBwbHkoby5lbGVtLGFyZ3VtZW50cyk6d307by5lbGVtPWE7Yj1iLnNwbGl0KCIgIik7Zm9yKHZhciBrLG49MCxyO2s9YltuKytdOyl7aj1lP2MuZXh0ZW5kKHt9LGUpOntoYW5kbGVyOmQsZGF0YTpmfTtpZihrLmluZGV4T2YoIi4iKT4tMSl7cj1rLnNwbGl0KCIuIik7Cms9ci5zaGlmdCgpO2oubmFtZXNwYWNlPXIuc2xpY2UoMCkuc29ydCgpLmpvaW4oIi4iKX1lbHNle3I9W107ai5uYW1lc3BhY2U9IiJ9ai50eXBlPWs7ai5ndWlkPWQuZ3VpZDt2YXIgdT1pW2tdLHo9Yy5ldmVudC5zcGVjaWFsW2tdfHx7fTtpZighdSl7dT1pW2tdPVtdO2lmKCF6LnNldHVwfHx6LnNldHVwLmNhbGwoYSxmLHIsbyk9PT1mYWxzZSlpZihhLmFkZEV2ZW50TGlzdGVuZXIpYS5hZGRFdmVudExpc3RlbmVyKGssbyxmYWxzZSk7ZWxzZSBhLmF0dGFjaEV2ZW50JiZhLmF0dGFjaEV2ZW50KCJvbiIrayxvKX1pZih6LmFkZCl7ei5hZGQuY2FsbChhLGopO2lmKCFqLmhhbmRsZXIuZ3VpZClqLmhhbmRsZXIuZ3VpZD1kLmd1aWR9dS5wdXNoKGopO2MuZXZlbnQuZ2xvYmFsW2tdPXRydWV9YT1udWxsfX19LGdsb2JhbDp7fSxyZW1vdmU6ZnVuY3Rpb24oYSxiLGQsZil7aWYoIShhLm5vZGVUeXBlPT09M3x8YS5ub2RlVHlwZT09PTgpKXt2YXIgZSxqPTAsaSxvLGssbixyLHUsej1jLmRhdGEoYSksCkM9eiYmei5ldmVudHM7aWYoeiYmQyl7aWYoYiYmYi50eXBlKXtkPWIuaGFuZGxlcjtiPWIudHlwZX1pZighYnx8dHlwZW9mIGI9PT0ic3RyaW5nIiYmYi5jaGFyQXQoMCk9PT0iLiIpe2I9Ynx8IiI7Zm9yKGUgaW4gQyljLmV2ZW50LnJlbW92ZShhLGUrYil9ZWxzZXtmb3IoYj1iLnNwbGl0KCIgIik7ZT1iW2orK107KXtuPWU7aT1lLmluZGV4T2YoIi4iKTwwO289W107aWYoIWkpe289ZS5zcGxpdCgiLiIpO2U9by5zaGlmdCgpO2s9bmV3IFJlZ0V4cCgiKF58XFwuKSIrYy5tYXAoby5zbGljZSgwKS5zb3J0KCksZGIpLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSsiKFxcLnwkKSIpfWlmKHI9Q1tlXSlpZihkKXtuPWMuZXZlbnQuc3BlY2lhbFtlXXx8e307Zm9yKEI9Znx8MDtCPHIubGVuZ3RoO0IrKyl7dT1yW0JdO2lmKGQuZ3VpZD09PXUuZ3VpZCl7aWYoaXx8ay50ZXN0KHUubmFtZXNwYWNlKSl7Zj09bnVsbCYmci5zcGxpY2UoQi0tLDEpO24ucmVtb3ZlJiZuLnJlbW92ZS5jYWxsKGEsdSl9aWYoZiE9Cm51bGwpYnJlYWt9fWlmKHIubGVuZ3RoPT09MHx8ZiE9bnVsbCYmci5sZW5ndGg9PT0xKXtpZighbi50ZWFyZG93bnx8bi50ZWFyZG93bi5jYWxsKGEsbyk9PT1mYWxzZSlDYShhLGUsei5oYW5kbGUpO2RlbGV0ZSBDW2VdfX1lbHNlIGZvcih2YXIgQj0wO0I8ci5sZW5ndGg7QisrKXt1PXJbQl07aWYoaXx8ay50ZXN0KHUubmFtZXNwYWNlKSl7Yy5ldmVudC5yZW1vdmUoYSxuLHUuaGFuZGxlcixCKTtyLnNwbGljZShCLS0sMSl9fX1pZihjLmlzRW1wdHlPYmplY3QoQykpe2lmKGI9ei5oYW5kbGUpYi5lbGVtPW51bGw7ZGVsZXRlIHouZXZlbnRzO2RlbGV0ZSB6LmhhbmRsZTtjLmlzRW1wdHlPYmplY3QoeikmJmMucmVtb3ZlRGF0YShhKX19fX19LHRyaWdnZXI6ZnVuY3Rpb24oYSxiLGQsZil7dmFyIGU9YS50eXBlfHxhO2lmKCFmKXthPXR5cGVvZiBhPT09Im9iamVjdCI/YVtHXT9hOmMuZXh0ZW5kKGMuRXZlbnQoZSksYSk6Yy5FdmVudChlKTtpZihlLmluZGV4T2YoIiEiKT49MCl7YS50eXBlPQplPWUuc2xpY2UoMCwtMSk7YS5leGNsdXNpdmU9dHJ1ZX1pZighZCl7YS5zdG9wUHJvcGFnYXRpb24oKTtjLmV2ZW50Lmdsb2JhbFtlXSYmYy5lYWNoKGMuY2FjaGUsZnVuY3Rpb24oKXt0aGlzLmV2ZW50cyYmdGhpcy5ldmVudHNbZV0mJmMuZXZlbnQudHJpZ2dlcihhLGIsdGhpcy5oYW5kbGUuZWxlbSl9KX1pZighZHx8ZC5ub2RlVHlwZT09PTN8fGQubm9kZVR5cGU9PT04KXJldHVybiB3O2EucmVzdWx0PXc7YS50YXJnZXQ9ZDtiPWMubWFrZUFycmF5KGIpO2IudW5zaGlmdChhKX1hLmN1cnJlbnRUYXJnZXQ9ZDsoZj1jLmRhdGEoZCwiaGFuZGxlIikpJiZmLmFwcGx5KGQsYik7Zj1kLnBhcmVudE5vZGV8fGQub3duZXJEb2N1bWVudDt0cnl7aWYoIShkJiZkLm5vZGVOYW1lJiZjLm5vRGF0YVtkLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSlpZihkWyJvbiIrZV0mJmRbIm9uIitlXS5hcHBseShkLGIpPT09ZmFsc2UpYS5yZXN1bHQ9ZmFsc2V9Y2F0Y2goail7fWlmKCFhLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJgpmKWMuZXZlbnQudHJpZ2dlcihhLGIsZix0cnVlKTtlbHNlIGlmKCFhLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtmPWEudGFyZ2V0O3ZhciBpLG89Yy5ub2RlTmFtZShmLCJhIikmJmU9PT0iY2xpY2siLGs9Yy5ldmVudC5zcGVjaWFsW2VdfHx7fTtpZigoIWsuX2RlZmF1bHR8fGsuX2RlZmF1bHQuY2FsbChkLGEpPT09ZmFsc2UpJiYhbyYmIShmJiZmLm5vZGVOYW1lJiZjLm5vRGF0YVtmLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSl7dHJ5e2lmKGZbZV0pe2lmKGk9Zlsib24iK2VdKWZbIm9uIitlXT1udWxsO2MuZXZlbnQudHJpZ2dlcmVkPXRydWU7ZltlXSgpfX1jYXRjaChuKXt9aWYoaSlmWyJvbiIrZV09aTtjLmV2ZW50LnRyaWdnZXJlZD1mYWxzZX19fSxoYW5kbGU6ZnVuY3Rpb24oYSl7dmFyIGIsZCxmLGU7YT1hcmd1bWVudHNbMF09Yy5ldmVudC5maXgoYXx8QS5ldmVudCk7YS5jdXJyZW50VGFyZ2V0PXRoaXM7Yj1hLnR5cGUuaW5kZXhPZigiLiIpPDAmJiFhLmV4Y2x1c2l2ZTsKaWYoIWIpe2Q9YS50eXBlLnNwbGl0KCIuIik7YS50eXBlPWQuc2hpZnQoKTtmPW5ldyBSZWdFeHAoIihefFxcLikiK2Quc2xpY2UoMCkuc29ydCgpLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSsiKFxcLnwkKSIpfWU9Yy5kYXRhKHRoaXMsImV2ZW50cyIpO2Q9ZVthLnR5cGVdO2lmKGUmJmQpe2Q9ZC5zbGljZSgwKTtlPTA7Zm9yKHZhciBqPWQubGVuZ3RoO2U8ajtlKyspe3ZhciBpPWRbZV07aWYoYnx8Zi50ZXN0KGkubmFtZXNwYWNlKSl7YS5oYW5kbGVyPWkuaGFuZGxlcjthLmRhdGE9aS5kYXRhO2EuaGFuZGxlT2JqPWk7aT1pLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKGkhPT13KXthLnJlc3VsdD1pO2lmKGk9PT1mYWxzZSl7YS5wcmV2ZW50RGVmYXVsdCgpO2Euc3RvcFByb3BhZ2F0aW9uKCl9fWlmKGEuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSlicmVha319fXJldHVybiBhLnJlc3VsdH0scHJvcHM6ImFsdEtleSBhdHRyQ2hhbmdlIGF0dHJOYW1lIGJ1YmJsZXMgYnV0dG9uIGNhbmNlbGFibGUgY2hhckNvZGUgY2xpZW50WCBjbGllbnRZIGN0cmxLZXkgY3VycmVudFRhcmdldCBkYXRhIGRldGFpbCBldmVudFBoYXNlIGZyb21FbGVtZW50IGhhbmRsZXIga2V5Q29kZSBsYXllclggbGF5ZXJZIG1ldGFLZXkgbmV3VmFsdWUgb2Zmc2V0WCBvZmZzZXRZIG9yaWdpbmFsVGFyZ2V0IHBhZ2VYIHBhZ2VZIHByZXZWYWx1ZSByZWxhdGVkTm9kZSByZWxhdGVkVGFyZ2V0IHNjcmVlblggc2NyZWVuWSBzaGlmdEtleSBzcmNFbGVtZW50IHRhcmdldCB0b0VsZW1lbnQgdmlldyB3aGVlbERlbHRhIHdoaWNoIi5zcGxpdCgiICIpLApmaXg6ZnVuY3Rpb24oYSl7aWYoYVtHXSlyZXR1cm4gYTt2YXIgYj1hO2E9Yy5FdmVudChiKTtmb3IodmFyIGQ9dGhpcy5wcm9wcy5sZW5ndGgsZjtkOyl7Zj10aGlzLnByb3BzWy0tZF07YVtmXT1iW2ZdfWlmKCFhLnRhcmdldClhLnRhcmdldD1hLnNyY0VsZW1lbnR8fHM7aWYoYS50YXJnZXQubm9kZVR5cGU9PT0zKWEudGFyZ2V0PWEudGFyZ2V0LnBhcmVudE5vZGU7aWYoIWEucmVsYXRlZFRhcmdldCYmYS5mcm9tRWxlbWVudClhLnJlbGF0ZWRUYXJnZXQ9YS5mcm9tRWxlbWVudD09PWEudGFyZ2V0P2EudG9FbGVtZW50OmEuZnJvbUVsZW1lbnQ7aWYoYS5wYWdlWD09bnVsbCYmYS5jbGllbnRYIT1udWxsKXtiPXMuZG9jdW1lbnRFbGVtZW50O2Q9cy5ib2R5O2EucGFnZVg9YS5jbGllbnRYKyhiJiZiLnNjcm9sbExlZnR8fGQmJmQuc2Nyb2xsTGVmdHx8MCktKGImJmIuY2xpZW50TGVmdHx8ZCYmZC5jbGllbnRMZWZ0fHwwKTthLnBhZ2VZPWEuY2xpZW50WSsoYiYmYi5zY3JvbGxUb3B8fApkJiZkLnNjcm9sbFRvcHx8MCktKGImJmIuY2xpZW50VG9wfHxkJiZkLmNsaWVudFRvcHx8MCl9aWYoIWEud2hpY2gmJihhLmNoYXJDb2RlfHxhLmNoYXJDb2RlPT09MD9hLmNoYXJDb2RlOmEua2V5Q29kZSkpYS53aGljaD1hLmNoYXJDb2RlfHxhLmtleUNvZGU7aWYoIWEubWV0YUtleSYmYS5jdHJsS2V5KWEubWV0YUtleT1hLmN0cmxLZXk7aWYoIWEud2hpY2gmJmEuYnV0dG9uIT09dylhLndoaWNoPWEuYnV0dG9uJjE/MTphLmJ1dHRvbiYyPzM6YS5idXR0b24mND8yOjA7cmV0dXJuIGF9LGd1aWQ6MUU4LHByb3h5OmMucHJveHksc3BlY2lhbDp7cmVhZHk6e3NldHVwOmMuYmluZFJlYWR5LHRlYXJkb3duOmMubm9vcH0sbGl2ZTp7YWRkOmZ1bmN0aW9uKGEpe2MuZXZlbnQuYWRkKHRoaXMsYS5vcmlnVHlwZSxjLmV4dGVuZCh7fSxhLHtoYW5kbGVyOm9hfSkpfSxyZW1vdmU6ZnVuY3Rpb24oYSl7dmFyIGI9dHJ1ZSxkPWEub3JpZ1R5cGUucmVwbGFjZShPLCIiKTtjLmVhY2goYy5kYXRhKHRoaXMsCiJldmVudHMiKS5saXZlfHxbXSxmdW5jdGlvbigpe2lmKGQ9PT10aGlzLm9yaWdUeXBlLnJlcGxhY2UoTywiIikpcmV0dXJuIGI9ZmFsc2V9KTtiJiZjLmV2ZW50LnJlbW92ZSh0aGlzLGEub3JpZ1R5cGUsb2EpfX0sYmVmb3JldW5sb2FkOntzZXR1cDpmdW5jdGlvbihhLGIsZCl7aWYodGhpcy5zZXRJbnRlcnZhbCl0aGlzLm9uYmVmb3JldW5sb2FkPWQ7cmV0dXJuIGZhbHNlfSx0ZWFyZG93bjpmdW5jdGlvbihhLGIpe2lmKHRoaXMub25iZWZvcmV1bmxvYWQ9PT1iKXRoaXMub25iZWZvcmV1bmxvYWQ9bnVsbH19fX07dmFyIENhPXMucmVtb3ZlRXZlbnRMaXN0ZW5lcj9mdW5jdGlvbihhLGIsZCl7YS5yZW1vdmVFdmVudExpc3RlbmVyKGIsZCxmYWxzZSl9OmZ1bmN0aW9uKGEsYixkKXthLmRldGFjaEV2ZW50KCJvbiIrYixkKX07Yy5FdmVudD1mdW5jdGlvbihhKXtpZighdGhpcy5wcmV2ZW50RGVmYXVsdClyZXR1cm4gbmV3IGMuRXZlbnQoYSk7aWYoYSYmYS50eXBlKXt0aGlzLm9yaWdpbmFsRXZlbnQ9CmE7dGhpcy50eXBlPWEudHlwZX1lbHNlIHRoaXMudHlwZT1hO3RoaXMudGltZVN0YW1wPUooKTt0aGlzW0ddPXRydWV9O2MuRXZlbnQucHJvdG90eXBlPXtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPVo7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O2lmKGEpe2EucHJldmVudERlZmF1bHQmJmEucHJldmVudERlZmF1bHQoKTthLnJldHVyblZhbHVlPWZhbHNlfX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1aO3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDtpZihhKXthLnN0b3BQcm9wYWdhdGlvbiYmYS5zdG9wUHJvcGFnYXRpb24oKTthLmNhbmNlbEJ1YmJsZT10cnVlfX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1aO3RoaXMuc3RvcFByb3BhZ2F0aW9uKCl9LGlzRGVmYXVsdFByZXZlbnRlZDpZLGlzUHJvcGFnYXRpb25TdG9wcGVkOlksCmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOll9O3ZhciBEYT1mdW5jdGlvbihhKXt2YXIgYj1hLnJlbGF0ZWRUYXJnZXQ7dHJ5e2Zvcig7YiYmYiE9PXRoaXM7KWI9Yi5wYXJlbnROb2RlO2lmKGIhPT10aGlzKXthLnR5cGU9YS5kYXRhO2MuZXZlbnQuaGFuZGxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19Y2F0Y2goZCl7fX0sRWE9ZnVuY3Rpb24oYSl7YS50eXBlPWEuZGF0YTtjLmV2ZW50LmhhbmRsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2MuZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9LGZ1bmN0aW9uKGEsYil7Yy5ldmVudC5zcGVjaWFsW2FdPXtzZXR1cDpmdW5jdGlvbihkKXtjLmV2ZW50LmFkZCh0aGlzLGIsZCYmZC5zZWxlY3Rvcj9FYTpEYSxhKX0sdGVhcmRvd246ZnVuY3Rpb24oZCl7Yy5ldmVudC5yZW1vdmUodGhpcyxiLGQmJmQuc2VsZWN0b3I/RWE6RGEpfX19KTtpZighYy5zdXBwb3J0LnN1Ym1pdEJ1YmJsZXMpYy5ldmVudC5zcGVjaWFsLnN1Ym1pdD0Ke3NldHVwOmZ1bmN0aW9uKCl7aWYodGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09ImZvcm0iKXtjLmV2ZW50LmFkZCh0aGlzLCJjbGljay5zcGVjaWFsU3VibWl0IixmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldCxkPWIudHlwZTtpZigoZD09PSJzdWJtaXQifHxkPT09ImltYWdlIikmJmMoYikuY2xvc2VzdCgiZm9ybSIpLmxlbmd0aClyZXR1cm4gbmEoInN1Ym1pdCIsdGhpcyxhcmd1bWVudHMpfSk7Yy5ldmVudC5hZGQodGhpcywia2V5cHJlc3Muc3BlY2lhbFN1Ym1pdCIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQsZD1iLnR5cGU7aWYoKGQ9PT0idGV4dCJ8fGQ9PT0icGFzc3dvcmQiKSYmYyhiKS5jbG9zZXN0KCJmb3JtIikubGVuZ3RoJiZhLmtleUNvZGU9PT0xMylyZXR1cm4gbmEoInN1Ym1pdCIsdGhpcyxhcmd1bWVudHMpfSl9ZWxzZSByZXR1cm4gZmFsc2V9LHRlYXJkb3duOmZ1bmN0aW9uKCl7Yy5ldmVudC5yZW1vdmUodGhpcywiLnNwZWNpYWxTdWJtaXQiKX19OwppZighYy5zdXBwb3J0LmNoYW5nZUJ1YmJsZXMpe3ZhciBkYT0vdGV4dGFyZWF8aW5wdXR8c2VsZWN0L2ksZWEsRmE9ZnVuY3Rpb24oYSl7dmFyIGI9YS50eXBlLGQ9YS52YWx1ZTtpZihiPT09InJhZGlvInx8Yj09PSJjaGVja2JveCIpZD1hLmNoZWNrZWQ7ZWxzZSBpZihiPT09InNlbGVjdC1tdWx0aXBsZSIpZD1hLnNlbGVjdGVkSW5kZXg+LTE/Yy5tYXAoYS5vcHRpb25zLGZ1bmN0aW9uKGYpe3JldHVybiBmLnNlbGVjdGVkfSkuam9pbigiLSIpOiIiO2Vsc2UgaWYoYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09InNlbGVjdCIpZD1hLnNlbGVjdGVkSW5kZXg7cmV0dXJuIGR9LGZhPWZ1bmN0aW9uKGEsYil7dmFyIGQ9YS50YXJnZXQsZixlO2lmKCEoIWRhLnRlc3QoZC5ub2RlTmFtZSl8fGQucmVhZE9ubHkpKXtmPWMuZGF0YShkLCJfY2hhbmdlX2RhdGEiKTtlPUZhKGQpO2lmKGEudHlwZSE9PSJmb2N1c291dCJ8fGQudHlwZSE9PSJyYWRpbyIpYy5kYXRhKGQsIl9jaGFuZ2VfZGF0YSIsCmUpO2lmKCEoZj09PXd8fGU9PT1mKSlpZihmIT1udWxsfHxlKXthLnR5cGU9ImNoYW5nZSI7cmV0dXJuIGMuZXZlbnQudHJpZ2dlcihhLGIsZCl9fX07Yy5ldmVudC5zcGVjaWFsLmNoYW5nZT17ZmlsdGVyczp7Zm9jdXNvdXQ6ZmEsY2xpY2s6ZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQsZD1iLnR5cGU7aWYoZD09PSJyYWRpbyJ8fGQ9PT0iY2hlY2tib3gifHxiLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0ic2VsZWN0IilyZXR1cm4gZmEuY2FsbCh0aGlzLGEpfSxrZXlkb3duOmZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0LGQ9Yi50eXBlO2lmKGEua2V5Q29kZT09PTEzJiZiLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkhPT0idGV4dGFyZWEifHxhLmtleUNvZGU9PT0zMiYmKGQ9PT0iY2hlY2tib3gifHxkPT09InJhZGlvIil8fGQ9PT0ic2VsZWN0LW11bHRpcGxlIilyZXR1cm4gZmEuY2FsbCh0aGlzLGEpfSxiZWZvcmVhY3RpdmF0ZTpmdW5jdGlvbihhKXthPWEudGFyZ2V0O2MuZGF0YShhLAoiX2NoYW5nZV9kYXRhIixGYShhKSl9fSxzZXR1cDpmdW5jdGlvbigpe2lmKHRoaXMudHlwZT09PSJmaWxlIilyZXR1cm4gZmFsc2U7Zm9yKHZhciBhIGluIGVhKWMuZXZlbnQuYWRkKHRoaXMsYSsiLnNwZWNpYWxDaGFuZ2UiLGVhW2FdKTtyZXR1cm4gZGEudGVzdCh0aGlzLm5vZGVOYW1lKX0sdGVhcmRvd246ZnVuY3Rpb24oKXtjLmV2ZW50LnJlbW92ZSh0aGlzLCIuc3BlY2lhbENoYW5nZSIpO3JldHVybiBkYS50ZXN0KHRoaXMubm9kZU5hbWUpfX07ZWE9Yy5ldmVudC5zcGVjaWFsLmNoYW5nZS5maWx0ZXJzfXMuYWRkRXZlbnRMaXN0ZW5lciYmYy5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGQoZil7Zj1jLmV2ZW50LmZpeChmKTtmLnR5cGU9YjtyZXR1cm4gYy5ldmVudC5oYW5kbGUuY2FsbCh0aGlzLGYpfWMuZXZlbnQuc3BlY2lhbFtiXT17c2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoYSwKZCx0cnVlKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxkLHRydWUpfX19KTtjLmVhY2goWyJiaW5kIiwib25lIl0sZnVuY3Rpb24oYSxiKXtjLmZuW2JdPWZ1bmN0aW9uKGQsZixlKXtpZih0eXBlb2YgZD09PSJvYmplY3QiKXtmb3IodmFyIGogaW4gZCl0aGlzW2JdKGosZixkW2pdLGUpO3JldHVybiB0aGlzfWlmKGMuaXNGdW5jdGlvbihmKSl7ZT1mO2Y9d312YXIgaT1iPT09Im9uZSI/Yy5wcm94eShlLGZ1bmN0aW9uKGspe2ModGhpcykudW5iaW5kKGssaSk7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSk6ZTtpZihkPT09InVubG9hZCImJmIhPT0ib25lIil0aGlzLm9uZShkLGYsZSk7ZWxzZXtqPTA7Zm9yKHZhciBvPXRoaXMubGVuZ3RoO2o8bztqKyspYy5ldmVudC5hZGQodGhpc1tqXSxkLGksZil9cmV0dXJuIHRoaXN9fSk7Yy5mbi5leHRlbmQoe3VuYmluZDpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBhPT09Im9iamVjdCImJgohYS5wcmV2ZW50RGVmYXVsdClmb3IodmFyIGQgaW4gYSl0aGlzLnVuYmluZChkLGFbZF0pO2Vsc2V7ZD0wO2Zvcih2YXIgZj10aGlzLmxlbmd0aDtkPGY7ZCsrKWMuZXZlbnQucmVtb3ZlKHRoaXNbZF0sYSxiKX1yZXR1cm4gdGhpc30sZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGQsZil7cmV0dXJuIHRoaXMubGl2ZShiLGQsZixhKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihhLGIsZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMudW5iaW5kKCJsaXZlIik6dGhpcy5kaWUoYixudWxsLGQsYSl9LHRyaWdnZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Yy5ldmVudC50cmlnZ2VyKGEsYix0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihhLGIpe2lmKHRoaXNbMF0pe2E9Yy5FdmVudChhKTthLnByZXZlbnREZWZhdWx0KCk7YS5zdG9wUHJvcGFnYXRpb24oKTtjLmV2ZW50LnRyaWdnZXIoYSxiLHRoaXNbMF0pO3JldHVybiBhLnJlc3VsdH19LAp0b2dnbGU6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWFyZ3VtZW50cyxkPTE7ZDxiLmxlbmd0aDspYy5wcm94eShhLGJbZCsrXSk7cmV0dXJuIHRoaXMuY2xpY2soYy5wcm94eShhLGZ1bmN0aW9uKGYpe3ZhciBlPShjLmRhdGEodGhpcywibGFzdFRvZ2dsZSIrYS5ndWlkKXx8MCklZDtjLmRhdGEodGhpcywibGFzdFRvZ2dsZSIrYS5ndWlkLGUrMSk7Zi5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBiW2VdLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8ZmFsc2V9KSl9LGhvdmVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMubW91c2VlbnRlcihhKS5tb3VzZWxlYXZlKGJ8fGEpfX0pO3ZhciBHYT17Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0Iixtb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In07Yy5lYWNoKFsibGl2ZSIsImRpZSJdLGZ1bmN0aW9uKGEsYil7Yy5mbltiXT1mdW5jdGlvbihkLGYsZSxqKXt2YXIgaSxvPTAsayxuLHI9anx8dGhpcy5zZWxlY3RvciwKdT1qP3RoaXM6Yyh0aGlzLmNvbnRleHQpO2lmKGMuaXNGdW5jdGlvbihmKSl7ZT1mO2Y9d31mb3IoZD0oZHx8IiIpLnNwbGl0KCIgIik7KGk9ZFtvKytdKSE9bnVsbDspe2o9Ty5leGVjKGkpO2s9IiI7aWYoail7az1qWzBdO2k9aS5yZXBsYWNlKE8sIiIpfWlmKGk9PT0iaG92ZXIiKWQucHVzaCgibW91c2VlbnRlciIraywibW91c2VsZWF2ZSIrayk7ZWxzZXtuPWk7aWYoaT09PSJmb2N1cyJ8fGk9PT0iYmx1ciIpe2QucHVzaChHYVtpXStrKTtpKz1rfWVsc2UgaT0oR2FbaV18fGkpK2s7Yj09PSJsaXZlIj91LmVhY2goZnVuY3Rpb24oKXtjLmV2ZW50LmFkZCh0aGlzLHBhKGkscikse2RhdGE6ZixzZWxlY3RvcjpyLGhhbmRsZXI6ZSxvcmlnVHlwZTppLG9yaWdIYW5kbGVyOmUscHJlVHlwZTpufSl9KTp1LnVuYmluZChwYShpLHIpLGUpfX1yZXR1cm4gdGhpc319KTtjLmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IiLnNwbGl0KCIgIiksCmZ1bmN0aW9uKGEsYil7Yy5mbltiXT1mdW5jdGlvbihkKXtyZXR1cm4gZD90aGlzLmJpbmQoYixkKTp0aGlzLnRyaWdnZXIoYil9O2lmKGMuYXR0ckZuKWMuYXR0ckZuW2JdPXRydWV9KTtBLmF0dGFjaEV2ZW50JiYhQS5hZGRFdmVudExpc3RlbmVyJiZBLmF0dGFjaEV2ZW50KCJvbnVubG9hZCIsZnVuY3Rpb24oKXtmb3IodmFyIGEgaW4gYy5jYWNoZSlpZihjLmNhY2hlW2FdLmhhbmRsZSl0cnl7Yy5ldmVudC5yZW1vdmUoYy5jYWNoZVthXS5oYW5kbGUuZWxlbSl9Y2F0Y2goYil7fX0pOyhmdW5jdGlvbigpe2Z1bmN0aW9uIGEoZyl7Zm9yKHZhciBoPSIiLGwsbT0wO2dbbV07bSsrKXtsPWdbbV07aWYobC5ub2RlVHlwZT09PTN8fGwubm9kZVR5cGU9PT00KWgrPWwubm9kZVZhbHVlO2Vsc2UgaWYobC5ub2RlVHlwZSE9PTgpaCs9YShsLmNoaWxkTm9kZXMpfXJldHVybiBofWZ1bmN0aW9uIGIoZyxoLGwsbSxxLHApe3E9MDtmb3IodmFyIHY9bS5sZW5ndGg7cTx2O3ErKyl7dmFyIHQ9bVtxXTsKaWYodCl7dD10W2ddO2Zvcih2YXIgeT1mYWxzZTt0Oyl7aWYodC5zaXpjYWNoZT09PWwpe3k9bVt0LnNpenNldF07YnJlYWt9aWYodC5ub2RlVHlwZT09PTEmJiFwKXt0LnNpemNhY2hlPWw7dC5zaXpzZXQ9cX1pZih0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1oKXt5PXQ7YnJlYWt9dD10W2ddfW1bcV09eX19fWZ1bmN0aW9uIGQoZyxoLGwsbSxxLHApe3E9MDtmb3IodmFyIHY9bS5sZW5ndGg7cTx2O3ErKyl7dmFyIHQ9bVtxXTtpZih0KXt0PXRbZ107Zm9yKHZhciB5PWZhbHNlO3Q7KXtpZih0LnNpemNhY2hlPT09bCl7eT1tW3Quc2l6c2V0XTticmVha31pZih0Lm5vZGVUeXBlPT09MSl7aWYoIXApe3Quc2l6Y2FjaGU9bDt0LnNpenNldD1xfWlmKHR5cGVvZiBoIT09InN0cmluZyIpe2lmKHQ9PT1oKXt5PXRydWU7YnJlYWt9fWVsc2UgaWYoay5maWx0ZXIoaCxbdF0pLmxlbmd0aD4wKXt5PXQ7YnJlYWt9fXQ9dFtnXX1tW3FdPXl9fX12YXIgZj0vKCg/OlwoKD86XChbXigpXStcKXxbXigpXSspK1wpfFxbKD86XFtbXltcXV0qXF18WyciXVteJyJdKlsnIl18W15bXF0nIl0rKStcXXxcXC58W14gPit+LChcW1xcXSspK3xbPit+XSkoXHMqLFxzKik/KCg/Oi58XHJ8XG4pKikvZywKZT0wLGo9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxpPWZhbHNlLG89dHJ1ZTtbMCwwXS5zb3J0KGZ1bmN0aW9uKCl7bz1mYWxzZTtyZXR1cm4gMH0pO3ZhciBrPWZ1bmN0aW9uKGcsaCxsLG0pe2w9bHx8W107dmFyIHE9aD1ofHxzO2lmKGgubm9kZVR5cGUhPT0xJiZoLm5vZGVUeXBlIT09OSlyZXR1cm5bXTtpZighZ3x8dHlwZW9mIGchPT0ic3RyaW5nIilyZXR1cm4gbDtmb3IodmFyIHA9W10sdix0LHksUyxIPXRydWUsTT14KGgpLEk9ZzsoZi5leGVjKCIiKSx2PWYuZXhlYyhJKSkhPT1udWxsOyl7ST12WzNdO3AucHVzaCh2WzFdKTtpZih2WzJdKXtTPXZbM107YnJlYWt9fWlmKHAubGVuZ3RoPjEmJnIuZXhlYyhnKSlpZihwLmxlbmd0aD09PTImJm4ucmVsYXRpdmVbcFswXV0pdD1nYShwWzBdK3BbMV0saCk7ZWxzZSBmb3IodD1uLnJlbGF0aXZlW3BbMF1dP1toXTprKHAuc2hpZnQoKSxoKTtwLmxlbmd0aDspe2c9cC5zaGlmdCgpO2lmKG4ucmVsYXRpdmVbZ10pZys9cC5zaGlmdCgpOwp0PWdhKGcsdCl9ZWxzZXtpZighbSYmcC5sZW5ndGg+MSYmaC5ub2RlVHlwZT09PTkmJiFNJiZuLm1hdGNoLklELnRlc3QocFswXSkmJiFuLm1hdGNoLklELnRlc3QocFtwLmxlbmd0aC0xXSkpe3Y9ay5maW5kKHAuc2hpZnQoKSxoLE0pO2g9di5leHByP2suZmlsdGVyKHYuZXhwcix2LnNldClbMF06di5zZXRbMF19aWYoaCl7dj1tP3tleHByOnAucG9wKCksc2V0OnoobSl9OmsuZmluZChwLnBvcCgpLHAubGVuZ3RoPT09MSYmKHBbMF09PT0ifiJ8fHBbMF09PT0iKyIpJiZoLnBhcmVudE5vZGU/aC5wYXJlbnROb2RlOmgsTSk7dD12LmV4cHI/ay5maWx0ZXIodi5leHByLHYuc2V0KTp2LnNldDtpZihwLmxlbmd0aD4wKXk9eih0KTtlbHNlIEg9ZmFsc2U7Zm9yKDtwLmxlbmd0aDspe3ZhciBEPXAucG9wKCk7dj1EO2lmKG4ucmVsYXRpdmVbRF0pdj1wLnBvcCgpO2Vsc2UgRD0iIjtpZih2PT1udWxsKXY9aDtuLnJlbGF0aXZlW0RdKHksdixNKX19ZWxzZSB5PVtdfXl8fCh5PXQpO3l8fGsuZXJyb3IoRHx8CmcpO2lmKGouY2FsbCh5KT09PSJbb2JqZWN0IEFycmF5XSIpaWYoSClpZihoJiZoLm5vZGVUeXBlPT09MSlmb3IoZz0wO3lbZ10hPW51bGw7ZysrKXtpZih5W2ddJiYoeVtnXT09PXRydWV8fHlbZ10ubm9kZVR5cGU9PT0xJiZFKGgseVtnXSkpKWwucHVzaCh0W2ddKX1lbHNlIGZvcihnPTA7eVtnXSE9bnVsbDtnKyspeVtnXSYmeVtnXS5ub2RlVHlwZT09PTEmJmwucHVzaCh0W2ddKTtlbHNlIGwucHVzaC5hcHBseShsLHkpO2Vsc2Ugeih5LGwpO2lmKFMpe2soUyxxLGwsbSk7ay51bmlxdWVTb3J0KGwpfXJldHVybiBsfTtrLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oZyl7aWYoQil7aT1vO2cuc29ydChCKTtpZihpKWZvcih2YXIgaD0xO2g8Zy5sZW5ndGg7aCsrKWdbaF09PT1nW2gtMV0mJmcuc3BsaWNlKGgtLSwxKX1yZXR1cm4gZ307ay5tYXRjaGVzPWZ1bmN0aW9uKGcsaCl7cmV0dXJuIGsoZyxudWxsLG51bGwsaCl9O2suZmluZD1mdW5jdGlvbihnLGgsbCl7dmFyIG0scTtpZighZylyZXR1cm5bXTsKZm9yKHZhciBwPTAsdj1uLm9yZGVyLmxlbmd0aDtwPHY7cCsrKXt2YXIgdD1uLm9yZGVyW3BdO2lmKHE9bi5sZWZ0TWF0Y2hbdF0uZXhlYyhnKSl7dmFyIHk9cVsxXTtxLnNwbGljZSgxLDEpO2lmKHkuc3Vic3RyKHkubGVuZ3RoLTEpIT09IlxcIil7cVsxXT0ocVsxXXx8IiIpLnJlcGxhY2UoL1xcL2csIiIpO209bi5maW5kW3RdKHEsaCxsKTtpZihtIT1udWxsKXtnPWcucmVwbGFjZShuLm1hdGNoW3RdLCIiKTticmVha319fX1tfHwobT1oLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpO3JldHVybntzZXQ6bSxleHByOmd9fTtrLmZpbHRlcj1mdW5jdGlvbihnLGgsbCxtKXtmb3IodmFyIHE9ZyxwPVtdLHY9aCx0LHksUz1oJiZoWzBdJiZ4KGhbMF0pO2cmJmgubGVuZ3RoOyl7Zm9yKHZhciBIIGluIG4uZmlsdGVyKWlmKCh0PW4ubGVmdE1hdGNoW0hdLmV4ZWMoZykpIT1udWxsJiZ0WzJdKXt2YXIgTT1uLmZpbHRlcltIXSxJLEQ7RD10WzFdO3k9ZmFsc2U7dC5zcGxpY2UoMSwxKTtpZihELnN1YnN0cihELmxlbmd0aC0KMSkhPT0iXFwiKXtpZih2PT09cClwPVtdO2lmKG4ucHJlRmlsdGVyW0hdKWlmKHQ9bi5wcmVGaWx0ZXJbSF0odCx2LGwscCxtLFMpKXtpZih0PT09dHJ1ZSljb250aW51ZX1lbHNlIHk9ST10cnVlO2lmKHQpZm9yKHZhciBVPTA7KEQ9dltVXSkhPW51bGw7VSsrKWlmKEQpe0k9TShELHQsVSx2KTt2YXIgSGE9bV4hIUk7aWYobCYmSSE9bnVsbClpZihIYSl5PXRydWU7ZWxzZSB2W1VdPWZhbHNlO2Vsc2UgaWYoSGEpe3AucHVzaChEKTt5PXRydWV9fWlmKEkhPT13KXtsfHwodj1wKTtnPWcucmVwbGFjZShuLm1hdGNoW0hdLCIiKTtpZigheSlyZXR1cm5bXTticmVha319fWlmKGc9PT1xKWlmKHk9PW51bGwpay5lcnJvcihnKTtlbHNlIGJyZWFrO3E9Z31yZXR1cm4gdn07ay5lcnJvcj1mdW5jdGlvbihnKXt0aHJvdyJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiK2c7fTt2YXIgbj1rLnNlbGVjdG9ycz17b3JkZXI6WyJJRCIsIk5BTUUiLCJUQUciXSxtYXRjaDp7SUQ6LyMoKD86W1x3XHUwMGMwLVx1RkZGRi1dfFxcLikrKS8sCkNMQVNTOi9cLigoPzpbXHdcdTAwYzAtXHVGRkZGLV18XFwuKSspLyxOQU1FOi9cW25hbWU9WyciXSooKD86W1x3XHUwMGMwLVx1RkZGRi1dfFxcLikrKVsnIl0qXF0vLEFUVFI6L1xbXHMqKCg/Oltcd1x1MDBjMC1cdUZGRkYtXXxcXC4pKylccyooPzooXFM/PSlccyooWyciXSopKC4qPylcM3wpXHMqXF0vLFRBRzovXigoPzpbXHdcdTAwYzAtXHVGRkZGXCotXXxcXC4pKykvLENISUxEOi86KG9ubHl8bnRofGxhc3R8Zmlyc3QpLWNoaWxkKD86XCgoZXZlbnxvZGR8W1xkbistXSopXCkpPy8sUE9TOi86KG50aHxlcXxndHxsdHxmaXJzdHxsYXN0fGV2ZW58b2RkKSg/OlwoKFxkKilcKSk/KD89W14tXXwkKS8sUFNFVURPOi86KCg/Oltcd1x1MDBjMC1cdUZGRkYtXXxcXC4pKykoPzpcKChbJyJdPykoKD86XChbXlwpXStcKXxbXlwoXCldKikrKVwyXCkpPy99LGxlZnRNYXRjaDp7fSxhdHRyTWFwOnsiY2xhc3MiOiJjbGFzc05hbWUiLCJmb3IiOiJodG1sRm9yIn0sYXR0ckhhbmRsZTp7aHJlZjpmdW5jdGlvbihnKXtyZXR1cm4gZy5nZXRBdHRyaWJ1dGUoImhyZWYiKX19LApyZWxhdGl2ZTp7IisiOmZ1bmN0aW9uKGcsaCl7dmFyIGw9dHlwZW9mIGg9PT0ic3RyaW5nIixtPWwmJiEvXFcvLnRlc3QoaCk7bD1sJiYhbTtpZihtKWg9aC50b0xvd2VyQ2FzZSgpO209MDtmb3IodmFyIHE9Zy5sZW5ndGgscDttPHE7bSsrKWlmKHA9Z1ttXSl7Zm9yKDsocD1wLnByZXZpb3VzU2libGluZykmJnAubm9kZVR5cGUhPT0xOyk7Z1ttXT1sfHxwJiZwLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1oP3B8fGZhbHNlOnA9PT1ofWwmJmsuZmlsdGVyKGgsZyx0cnVlKX0sIj4iOmZ1bmN0aW9uKGcsaCl7dmFyIGw9dHlwZW9mIGg9PT0ic3RyaW5nIjtpZihsJiYhL1xXLy50ZXN0KGgpKXtoPWgudG9Mb3dlckNhc2UoKTtmb3IodmFyIG09MCxxPWcubGVuZ3RoO208cTttKyspe3ZhciBwPWdbbV07aWYocCl7bD1wLnBhcmVudE5vZGU7Z1ttXT1sLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1oP2w6ZmFsc2V9fX1lbHNle209MDtmb3IocT1nLmxlbmd0aDttPHE7bSsrKWlmKHA9Z1ttXSlnW21dPQpsP3AucGFyZW50Tm9kZTpwLnBhcmVudE5vZGU9PT1oO2wmJmsuZmlsdGVyKGgsZyx0cnVlKX19LCIiOmZ1bmN0aW9uKGcsaCxsKXt2YXIgbT1lKysscT1kO2lmKHR5cGVvZiBoPT09InN0cmluZyImJiEvXFcvLnRlc3QoaCkpe3ZhciBwPWg9aC50b0xvd2VyQ2FzZSgpO3E9Yn1xKCJwYXJlbnROb2RlIixoLG0sZyxwLGwpfSwifiI6ZnVuY3Rpb24oZyxoLGwpe3ZhciBtPWUrKyxxPWQ7aWYodHlwZW9mIGg9PT0ic3RyaW5nIiYmIS9cVy8udGVzdChoKSl7dmFyIHA9aD1oLnRvTG93ZXJDYXNlKCk7cT1ifXEoInByZXZpb3VzU2libGluZyIsaCxtLGcscCxsKX19LGZpbmQ6e0lEOmZ1bmN0aW9uKGcsaCxsKXtpZih0eXBlb2YgaC5nZXRFbGVtZW50QnlJZCE9PSJ1bmRlZmluZWQiJiYhbClyZXR1cm4oZz1oLmdldEVsZW1lbnRCeUlkKGdbMV0pKT9bZ106W119LE5BTUU6ZnVuY3Rpb24oZyxoKXtpZih0eXBlb2YgaC5nZXRFbGVtZW50c0J5TmFtZSE9PSJ1bmRlZmluZWQiKXt2YXIgbD1bXTsKaD1oLmdldEVsZW1lbnRzQnlOYW1lKGdbMV0pO2Zvcih2YXIgbT0wLHE9aC5sZW5ndGg7bTxxO20rKyloW21dLmdldEF0dHJpYnV0ZSgibmFtZSIpPT09Z1sxXSYmbC5wdXNoKGhbbV0pO3JldHVybiBsLmxlbmd0aD09PTA/bnVsbDpsfX0sVEFHOmZ1bmN0aW9uKGcsaCl7cmV0dXJuIGguZ2V0RWxlbWVudHNCeVRhZ05hbWUoZ1sxXSl9fSxwcmVGaWx0ZXI6e0NMQVNTOmZ1bmN0aW9uKGcsaCxsLG0scSxwKXtnPSIgIitnWzFdLnJlcGxhY2UoL1xcL2csIiIpKyIgIjtpZihwKXJldHVybiBnO3A9MDtmb3IodmFyIHY7KHY9aFtwXSkhPW51bGw7cCsrKWlmKHYpaWYocV4odi5jbGFzc05hbWUmJigiICIrdi5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKC9bXHRcbl0vZywiICIpLmluZGV4T2YoZyk+PTApKWx8fG0ucHVzaCh2KTtlbHNlIGlmKGwpaFtwXT1mYWxzZTtyZXR1cm4gZmFsc2V9LElEOmZ1bmN0aW9uKGcpe3JldHVybiBnWzFdLnJlcGxhY2UoL1xcL2csIiIpfSxUQUc6ZnVuY3Rpb24oZyl7cmV0dXJuIGdbMV0udG9Mb3dlckNhc2UoKX0sCkNISUxEOmZ1bmN0aW9uKGcpe2lmKGdbMV09PT0ibnRoIil7dmFyIGg9LygtPykoXGQqKW4oKD86XCt8LSk/XGQqKS8uZXhlYyhnWzJdPT09ImV2ZW4iJiYiMm4ifHxnWzJdPT09Im9kZCImJiIybisxInx8IS9cRC8udGVzdChnWzJdKSYmIjBuKyIrZ1syXXx8Z1syXSk7Z1syXT1oWzFdKyhoWzJdfHwxKS0wO2dbM109aFszXS0wfWdbMF09ZSsrO3JldHVybiBnfSxBVFRSOmZ1bmN0aW9uKGcsaCxsLG0scSxwKXtoPWdbMV0ucmVwbGFjZSgvXFwvZywiIik7aWYoIXAmJm4uYXR0ck1hcFtoXSlnWzFdPW4uYXR0ck1hcFtoXTtpZihnWzJdPT09In49IilnWzRdPSIgIitnWzRdKyIgIjtyZXR1cm4gZ30sUFNFVURPOmZ1bmN0aW9uKGcsaCxsLG0scSl7aWYoZ1sxXT09PSJub3QiKWlmKChmLmV4ZWMoZ1szXSl8fCIiKS5sZW5ndGg+MXx8L15cdy8udGVzdChnWzNdKSlnWzNdPWsoZ1szXSxudWxsLG51bGwsaCk7ZWxzZXtnPWsuZmlsdGVyKGdbM10saCxsLHRydWVecSk7bHx8bS5wdXNoLmFwcGx5KG0sCmcpO3JldHVybiBmYWxzZX1lbHNlIGlmKG4ubWF0Y2guUE9TLnRlc3QoZ1swXSl8fG4ubWF0Y2guQ0hJTEQudGVzdChnWzBdKSlyZXR1cm4gdHJ1ZTtyZXR1cm4gZ30sUE9TOmZ1bmN0aW9uKGcpe2cudW5zaGlmdCh0cnVlKTtyZXR1cm4gZ319LGZpbHRlcnM6e2VuYWJsZWQ6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuZGlzYWJsZWQ9PT1mYWxzZSYmZy50eXBlIT09ImhpZGRlbiJ9LGRpc2FibGVkOmZ1bmN0aW9uKGcpe3JldHVybiBnLmRpc2FibGVkPT09dHJ1ZX0sY2hlY2tlZDpmdW5jdGlvbihnKXtyZXR1cm4gZy5jaGVja2VkPT09dHJ1ZX0sc2VsZWN0ZWQ6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuc2VsZWN0ZWQ9PT10cnVlfSxwYXJlbnQ6ZnVuY3Rpb24oZyl7cmV0dXJuISFnLmZpcnN0Q2hpbGR9LGVtcHR5OmZ1bmN0aW9uKGcpe3JldHVybiFnLmZpcnN0Q2hpbGR9LGhhczpmdW5jdGlvbihnLGgsbCl7cmV0dXJuISFrKGxbM10sZykubGVuZ3RofSxoZWFkZXI6ZnVuY3Rpb24oZyl7cmV0dXJuL2hcZC9pLnRlc3QoZy5ub2RlTmFtZSl9LAp0ZXh0OmZ1bmN0aW9uKGcpe3JldHVybiJ0ZXh0Ij09PWcudHlwZX0scmFkaW86ZnVuY3Rpb24oZyl7cmV0dXJuInJhZGlvIj09PWcudHlwZX0sY2hlY2tib3g6ZnVuY3Rpb24oZyl7cmV0dXJuImNoZWNrYm94Ij09PWcudHlwZX0sZmlsZTpmdW5jdGlvbihnKXtyZXR1cm4iZmlsZSI9PT1nLnR5cGV9LHBhc3N3b3JkOmZ1bmN0aW9uKGcpe3JldHVybiJwYXNzd29yZCI9PT1nLnR5cGV9LHN1Ym1pdDpmdW5jdGlvbihnKXtyZXR1cm4ic3VibWl0Ij09PWcudHlwZX0saW1hZ2U6ZnVuY3Rpb24oZyl7cmV0dXJuImltYWdlIj09PWcudHlwZX0scmVzZXQ6ZnVuY3Rpb24oZyl7cmV0dXJuInJlc2V0Ij09PWcudHlwZX0sYnV0dG9uOmZ1bmN0aW9uKGcpe3JldHVybiJidXR0b24iPT09Zy50eXBlfHxnLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iYnV0dG9uIn0saW5wdXQ6ZnVuY3Rpb24oZyl7cmV0dXJuL2lucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24vaS50ZXN0KGcubm9kZU5hbWUpfX0sCnNldEZpbHRlcnM6e2ZpcnN0OmZ1bmN0aW9uKGcsaCl7cmV0dXJuIGg9PT0wfSxsYXN0OmZ1bmN0aW9uKGcsaCxsLG0pe3JldHVybiBoPT09bS5sZW5ndGgtMX0sZXZlbjpmdW5jdGlvbihnLGgpe3JldHVybiBoJTI9PT0wfSxvZGQ6ZnVuY3Rpb24oZyxoKXtyZXR1cm4gaCUyPT09MX0sbHQ6ZnVuY3Rpb24oZyxoLGwpe3JldHVybiBoPGxbM10tMH0sZ3Q6ZnVuY3Rpb24oZyxoLGwpe3JldHVybiBoPmxbM10tMH0sbnRoOmZ1bmN0aW9uKGcsaCxsKXtyZXR1cm4gbFszXS0wPT09aH0sZXE6ZnVuY3Rpb24oZyxoLGwpe3JldHVybiBsWzNdLTA9PT1ofX0sZmlsdGVyOntQU0VVRE86ZnVuY3Rpb24oZyxoLGwsbSl7dmFyIHE9aFsxXSxwPW4uZmlsdGVyc1txXTtpZihwKXJldHVybiBwKGcsbCxoLG0pO2Vsc2UgaWYocT09PSJjb250YWlucyIpcmV0dXJuKGcudGV4dENvbnRlbnR8fGcuaW5uZXJUZXh0fHxhKFtnXSl8fCIiKS5pbmRleE9mKGhbM10pPj0wO2Vsc2UgaWYocT09PSJub3QiKXtoPQpoWzNdO2w9MDtmb3IobT1oLmxlbmd0aDtsPG07bCsrKWlmKGhbbF09PT1nKXJldHVybiBmYWxzZTtyZXR1cm4gdHJ1ZX1lbHNlIGsuZXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrcSl9LENISUxEOmZ1bmN0aW9uKGcsaCl7dmFyIGw9aFsxXSxtPWc7c3dpdGNoKGwpe2Nhc2UgIm9ubHkiOmNhc2UgImZpcnN0Ijpmb3IoO209bS5wcmV2aW91c1NpYmxpbmc7KWlmKG0ubm9kZVR5cGU9PT0xKXJldHVybiBmYWxzZTtpZihsPT09ImZpcnN0IilyZXR1cm4gdHJ1ZTttPWc7Y2FzZSAibGFzdCI6Zm9yKDttPW0ubmV4dFNpYmxpbmc7KWlmKG0ubm9kZVR5cGU9PT0xKXJldHVybiBmYWxzZTtyZXR1cm4gdHJ1ZTtjYXNlICJudGgiOmw9aFsyXTt2YXIgcT1oWzNdO2lmKGw9PT0xJiZxPT09MClyZXR1cm4gdHJ1ZTtoPWhbMF07dmFyIHA9Zy5wYXJlbnROb2RlO2lmKHAmJihwLnNpemNhY2hlIT09aHx8IWcubm9kZUluZGV4KSl7dmFyIHY9MDtmb3IobT1wLmZpcnN0Q2hpbGQ7bTttPQptLm5leHRTaWJsaW5nKWlmKG0ubm9kZVR5cGU9PT0xKW0ubm9kZUluZGV4PSsrdjtwLnNpemNhY2hlPWh9Zz1nLm5vZGVJbmRleC1xO3JldHVybiBsPT09MD9nPT09MDpnJWw9PT0wJiZnL2w+PTB9fSxJRDpmdW5jdGlvbihnLGgpe3JldHVybiBnLm5vZGVUeXBlPT09MSYmZy5nZXRBdHRyaWJ1dGUoImlkIik9PT1ofSxUQUc6ZnVuY3Rpb24oZyxoKXtyZXR1cm4gaD09PSIqIiYmZy5ub2RlVHlwZT09PTF8fGcubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWh9LENMQVNTOmZ1bmN0aW9uKGcsaCl7cmV0dXJuKCIgIisoZy5jbGFzc05hbWV8fGcuZ2V0QXR0cmlidXRlKCJjbGFzcyIpKSsiICIpLmluZGV4T2YoaCk+LTF9LEFUVFI6ZnVuY3Rpb24oZyxoKXt2YXIgbD1oWzFdO2c9bi5hdHRySGFuZGxlW2xdP24uYXR0ckhhbmRsZVtsXShnKTpnW2xdIT1udWxsP2dbbF06Zy5nZXRBdHRyaWJ1dGUobCk7bD1nKyIiO3ZhciBtPWhbMl07aD1oWzRdO3JldHVybiBnPT1udWxsP209PT0iIT0iOm09PT0KIj0iP2w9PT1oOm09PT0iKj0iP2wuaW5kZXhPZihoKT49MDptPT09In49Ij8oIiAiK2wrIiAiKS5pbmRleE9mKGgpPj0wOiFoP2wmJmchPT1mYWxzZTptPT09IiE9Ij9sIT09aDptPT09Il49Ij9sLmluZGV4T2YoaCk9PT0wOm09PT0iJD0iP2wuc3Vic3RyKGwubGVuZ3RoLWgubGVuZ3RoKT09PWg6bT09PSJ8PSI/bD09PWh8fGwuc3Vic3RyKDAsaC5sZW5ndGgrMSk9PT1oKyItIjpmYWxzZX0sUE9TOmZ1bmN0aW9uKGcsaCxsLG0pe3ZhciBxPW4uc2V0RmlsdGVyc1toWzJdXTtpZihxKXJldHVybiBxKGcsbCxoLG0pfX19LHI9bi5tYXRjaC5QT1M7Zm9yKHZhciB1IGluIG4ubWF0Y2gpe24ubWF0Y2hbdV09bmV3IFJlZ0V4cChuLm1hdGNoW3VdLnNvdXJjZSsvKD8hW15cW10qXF0pKD8hW15cKF0qXCkpLy5zb3VyY2UpO24ubGVmdE1hdGNoW3VdPW5ldyBSZWdFeHAoLyheKD86LnxccnxcbikqPykvLnNvdXJjZStuLm1hdGNoW3VdLnNvdXJjZS5yZXBsYWNlKC9cXChcZCspL2csZnVuY3Rpb24oZywKaCl7cmV0dXJuIlxcIisoaC0wKzEpfSkpfXZhciB6PWZ1bmN0aW9uKGcsaCl7Zz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChnLDApO2lmKGgpe2gucHVzaC5hcHBseShoLGcpO3JldHVybiBofXJldHVybiBnfTt0cnl7QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocy5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2RlcywwKX1jYXRjaChDKXt6PWZ1bmN0aW9uKGcsaCl7aD1ofHxbXTtpZihqLmNhbGwoZyk9PT0iW29iamVjdCBBcnJheV0iKUFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGgsZyk7ZWxzZSBpZih0eXBlb2YgZy5sZW5ndGg9PT0ibnVtYmVyIilmb3IodmFyIGw9MCxtPWcubGVuZ3RoO2w8bTtsKyspaC5wdXNoKGdbbF0pO2Vsc2UgZm9yKGw9MDtnW2xdO2wrKyloLnB1c2goZ1tsXSk7cmV0dXJuIGh9fXZhciBCO2lmKHMuZG9jdW1lbnRFbGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKUI9ZnVuY3Rpb24oZyxoKXtpZighZy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbnx8CiFoLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKXtpZihnPT1oKWk9dHJ1ZTtyZXR1cm4gZy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8tMToxfWc9Zy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihoKSY0Py0xOmc9PT1oPzA6MTtpZihnPT09MClpPXRydWU7cmV0dXJuIGd9O2Vsc2UgaWYoInNvdXJjZUluZGV4ImluIHMuZG9jdW1lbnRFbGVtZW50KUI9ZnVuY3Rpb24oZyxoKXtpZighZy5zb3VyY2VJbmRleHx8IWguc291cmNlSW5kZXgpe2lmKGc9PWgpaT10cnVlO3JldHVybiBnLnNvdXJjZUluZGV4Py0xOjF9Zz1nLnNvdXJjZUluZGV4LWguc291cmNlSW5kZXg7aWYoZz09PTApaT10cnVlO3JldHVybiBnfTtlbHNlIGlmKHMuY3JlYXRlUmFuZ2UpQj1mdW5jdGlvbihnLGgpe2lmKCFnLm93bmVyRG9jdW1lbnR8fCFoLm93bmVyRG9jdW1lbnQpe2lmKGc9PWgpaT10cnVlO3JldHVybiBnLm93bmVyRG9jdW1lbnQ/LTE6MX12YXIgbD1nLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSxtPQpoLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtsLnNldFN0YXJ0KGcsMCk7bC5zZXRFbmQoZywwKTttLnNldFN0YXJ0KGgsMCk7bS5zZXRFbmQoaCwwKTtnPWwuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlLlNUQVJUX1RPX0VORCxtKTtpZihnPT09MClpPXRydWU7cmV0dXJuIGd9OyhmdW5jdGlvbigpe3ZhciBnPXMuY3JlYXRlRWxlbWVudCgiZGl2IiksaD0ic2NyaXB0IisobmV3IERhdGUpLmdldFRpbWUoKTtnLmlubmVySFRNTD0iPGEgbmFtZT0nIitoKyInLz4iO3ZhciBsPXMuZG9jdW1lbnRFbGVtZW50O2wuaW5zZXJ0QmVmb3JlKGcsbC5maXJzdENoaWxkKTtpZihzLmdldEVsZW1lbnRCeUlkKGgpKXtuLmZpbmQuSUQ9ZnVuY3Rpb24obSxxLHApe2lmKHR5cGVvZiBxLmdldEVsZW1lbnRCeUlkIT09InVuZGVmaW5lZCImJiFwKXJldHVybihxPXEuZ2V0RWxlbWVudEJ5SWQobVsxXSkpP3EuaWQ9PT1tWzFdfHx0eXBlb2YgcS5nZXRBdHRyaWJ1dGVOb2RlIT09InVuZGVmaW5lZCImJgpxLmdldEF0dHJpYnV0ZU5vZGUoImlkIikubm9kZVZhbHVlPT09bVsxXT9bcV06dzpbXX07bi5maWx0ZXIuSUQ9ZnVuY3Rpb24obSxxKXt2YXIgcD10eXBlb2YgbS5nZXRBdHRyaWJ1dGVOb2RlIT09InVuZGVmaW5lZCImJm0uZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gbS5ub2RlVHlwZT09PTEmJnAmJnAubm9kZVZhbHVlPT09cX19bC5yZW1vdmVDaGlsZChnKTtsPWc9bnVsbH0pKCk7KGZ1bmN0aW9uKCl7dmFyIGc9cy5jcmVhdGVFbGVtZW50KCJkaXYiKTtnLmFwcGVuZENoaWxkKHMuY3JlYXRlQ29tbWVudCgiIikpO2lmKGcuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGg+MCluLmZpbmQuVEFHPWZ1bmN0aW9uKGgsbCl7bD1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKGhbMV0pO2lmKGhbMV09PT0iKiIpe2g9W107Zm9yKHZhciBtPTA7bFttXTttKyspbFttXS5ub2RlVHlwZT09PTEmJmgucHVzaChsW21dKTtsPWh9cmV0dXJuIGx9O2cuaW5uZXJIVE1MPSI8YSBocmVmPScjJz48L2E+IjsKaWYoZy5maXJzdENoaWxkJiZ0eXBlb2YgZy5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSE9PSJ1bmRlZmluZWQiJiZnLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIikhPT0iIyIpbi5hdHRySGFuZGxlLmhyZWY9ZnVuY3Rpb24oaCl7cmV0dXJuIGguZ2V0QXR0cmlidXRlKCJocmVmIiwyKX07Zz1udWxsfSkoKTtzLnF1ZXJ5U2VsZWN0b3JBbGwmJmZ1bmN0aW9uKCl7dmFyIGc9ayxoPXMuY3JlYXRlRWxlbWVudCgiZGl2Iik7aC5pbm5lckhUTUw9IjxwIGNsYXNzPSdURVNUJz48L3A+IjtpZighKGgucXVlcnlTZWxlY3RvckFsbCYmaC5xdWVyeVNlbGVjdG9yQWxsKCIuVEVTVCIpLmxlbmd0aD09PTApKXtrPWZ1bmN0aW9uKG0scSxwLHYpe3E9cXx8cztpZighdiYmcS5ub2RlVHlwZT09PTkmJiF4KHEpKXRyeXtyZXR1cm4geihxLnF1ZXJ5U2VsZWN0b3JBbGwobSkscCl9Y2F0Y2godCl7fXJldHVybiBnKG0scSxwLHYpfTtmb3IodmFyIGwgaW4gZylrW2xdPWdbbF07aD1udWxsfX0oKTsKKGZ1bmN0aW9uKCl7dmFyIGc9cy5jcmVhdGVFbGVtZW50KCJkaXYiKTtnLmlubmVySFRNTD0iPGRpdiBjbGFzcz0ndGVzdCBlJz48L2Rpdj48ZGl2IGNsYXNzPSd0ZXN0Jz48L2Rpdj4iO2lmKCEoIWcuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZXx8Zy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoPT09MCkpe2cubGFzdENoaWxkLmNsYXNzTmFtZT0iZSI7aWYoZy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoIT09MSl7bi5vcmRlci5zcGxpY2UoMSwwLCJDTEFTUyIpO24uZmluZC5DTEFTUz1mdW5jdGlvbihoLGwsbSl7aWYodHlwZW9mIGwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSE9PSJ1bmRlZmluZWQiJiYhbSlyZXR1cm4gbC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGhbMV0pfTtnPW51bGx9fX0pKCk7dmFyIEU9cy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9mdW5jdGlvbihnLGgpe3JldHVybiEhKGcuY29tcGFyZURvY3VtZW50UG9zaXRpb24oaCkmMTYpfToKZnVuY3Rpb24oZyxoKXtyZXR1cm4gZyE9PWgmJihnLmNvbnRhaW5zP2cuY29udGFpbnMoaCk6dHJ1ZSl9LHg9ZnVuY3Rpb24oZyl7cmV0dXJuKGc9KGc/Zy5vd25lckRvY3VtZW50fHxnOjApLmRvY3VtZW50RWxlbWVudCk/Zy5ub2RlTmFtZSE9PSJIVE1MIjpmYWxzZX0sZ2E9ZnVuY3Rpb24oZyxoKXt2YXIgbD1bXSxtPSIiLHE7Zm9yKGg9aC5ub2RlVHlwZT9baF06aDtxPW4ubWF0Y2guUFNFVURPLmV4ZWMoZyk7KXttKz1xWzBdO2c9Zy5yZXBsYWNlKG4ubWF0Y2guUFNFVURPLCIiKX1nPW4ucmVsYXRpdmVbZ10/ZysiKiI6ZztxPTA7Zm9yKHZhciBwPWgubGVuZ3RoO3E8cDtxKyspayhnLGhbcV0sbCk7cmV0dXJuIGsuZmlsdGVyKG0sbCl9O2MuZmluZD1rO2MuZXhwcj1rLnNlbGVjdG9ycztjLmV4cHJbIjoiXT1jLmV4cHIuZmlsdGVycztjLnVuaXF1ZT1rLnVuaXF1ZVNvcnQ7Yy50ZXh0PWE7Yy5pc1hNTERvYz14O2MuY29udGFpbnM9RX0pKCk7dmFyIGViPS9VbnRpbCQvLGZiPS9eKD86cGFyZW50c3xwcmV2VW50aWx8cHJldkFsbCkvLApnYj0vLC87Uj1BcnJheS5wcm90b3R5cGUuc2xpY2U7dmFyIElhPWZ1bmN0aW9uKGEsYixkKXtpZihjLmlzRnVuY3Rpb24oYikpcmV0dXJuIGMuZ3JlcChhLGZ1bmN0aW9uKGUsail7cmV0dXJuISFiLmNhbGwoZSxqLGUpPT09ZH0pO2Vsc2UgaWYoYi5ub2RlVHlwZSlyZXR1cm4gYy5ncmVwKGEsZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1iPT09ZH0pO2Vsc2UgaWYodHlwZW9mIGI9PT0ic3RyaW5nIil7dmFyIGY9Yy5ncmVwKGEsZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZVR5cGU9PT0xfSk7aWYoVWEudGVzdChiKSlyZXR1cm4gYy5maWx0ZXIoYixmLCFkKTtlbHNlIGI9Yy5maWx0ZXIoYixmKX1yZXR1cm4gYy5ncmVwKGEsZnVuY3Rpb24oZSl7cmV0dXJuIGMuaW5BcnJheShlLGIpPj0wPT09ZH0pfTtjLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5wdXNoU3RhY2soIiIsImZpbmQiLGEpLGQ9MCxmPTAsZT10aGlzLmxlbmd0aDtmPGU7ZisrKXtkPWIubGVuZ3RoOwpjLmZpbmQoYSx0aGlzW2ZdLGIpO2lmKGY+MClmb3IodmFyIGo9ZDtqPGIubGVuZ3RoO2orKylmb3IodmFyIGk9MDtpPGQ7aSsrKWlmKGJbaV09PT1iW2pdKXtiLnNwbGljZShqLS0sMSk7YnJlYWt9fXJldHVybiBifSxoYXM6ZnVuY3Rpb24oYSl7dmFyIGI9YyhhKTtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodmFyIGQ9MCxmPWIubGVuZ3RoO2Q8ZjtkKyspaWYoYy5jb250YWlucyh0aGlzLGJbZF0pKXJldHVybiB0cnVlfSl9LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soSWEodGhpcyxhLGZhbHNlKSwibm90IixhKX0sZmlsdGVyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhJYSh0aGlzLGEsdHJ1ZSksImZpbHRlciIsYSl9LGlzOmZ1bmN0aW9uKGEpe3JldHVybiEhYSYmYy5maWx0ZXIoYSx0aGlzKS5sZW5ndGg+MH0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe2lmKGMuaXNBcnJheShhKSl7dmFyIGQ9W10sZj10aGlzWzBdLGUsaj0Ke30saTtpZihmJiZhLmxlbmd0aCl7ZT0wO2Zvcih2YXIgbz1hLmxlbmd0aDtlPG87ZSsrKXtpPWFbZV07altpXXx8KGpbaV09Yy5leHByLm1hdGNoLlBPUy50ZXN0KGkpP2MoaSxifHx0aGlzLmNvbnRleHQpOmkpfWZvcig7ZiYmZi5vd25lckRvY3VtZW50JiZmIT09Yjspe2ZvcihpIGluIGope2U9altpXTtpZihlLmpxdWVyeT9lLmluZGV4KGYpPi0xOmMoZikuaXMoZSkpe2QucHVzaCh7c2VsZWN0b3I6aSxlbGVtOmZ9KTtkZWxldGUgaltpXX19Zj1mLnBhcmVudE5vZGV9fXJldHVybiBkfXZhciBrPWMuZXhwci5tYXRjaC5QT1MudGVzdChhKT9jKGEsYnx8dGhpcy5jb250ZXh0KTpudWxsO3JldHVybiB0aGlzLm1hcChmdW5jdGlvbihuLHIpe2Zvcig7ciYmci5vd25lckRvY3VtZW50JiZyIT09Yjspe2lmKGs/ay5pbmRleChyKT4tMTpjKHIpLmlzKGEpKXJldHVybiByO3I9ci5wYXJlbnROb2RlfXJldHVybiBudWxsfSl9LGluZGV4OmZ1bmN0aW9uKGEpe2lmKCFhfHx0eXBlb2YgYT09PQoic3RyaW5nIilyZXR1cm4gYy5pbkFycmF5KHRoaXNbMF0sYT9jKGEpOnRoaXMucGFyZW50KCkuY2hpbGRyZW4oKSk7cmV0dXJuIGMuaW5BcnJheShhLmpxdWVyeT9hWzBdOmEsdGhpcyl9LGFkZDpmdW5jdGlvbihhLGIpe2E9dHlwZW9mIGE9PT0ic3RyaW5nIj9jKGEsYnx8dGhpcy5jb250ZXh0KTpjLm1ha2VBcnJheShhKTtiPWMubWVyZ2UodGhpcy5nZXQoKSxhKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2socWEoYVswXSl8fHFhKGJbMF0pP2I6Yy51bmlxdWUoYikpfSxhbmRTZWxmOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWRkKHRoaXMucHJldk9iamVjdCl9fSk7Yy5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuKGE9YS5wYXJlbnROb2RlKSYmYS5ub2RlVHlwZSE9PTExP2E6bnVsbH0scGFyZW50czpmdW5jdGlvbihhKXtyZXR1cm4gYy5kaXIoYSwicGFyZW50Tm9kZSIpfSxwYXJlbnRzVW50aWw6ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBjLmRpcihhLCJwYXJlbnROb2RlIiwKZCl9LG5leHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGMubnRoKGEsMiwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihhKXtyZXR1cm4gYy5udGgoYSwyLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihhKXtyZXR1cm4gYy5kaXIoYSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihhKXtyZXR1cm4gYy5kaXIoYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihhLGIsZCl7cmV0dXJuIGMuZGlyKGEsIm5leHRTaWJsaW5nIixkKX0scHJldlVudGlsOmZ1bmN0aW9uKGEsYixkKXtyZXR1cm4gYy5kaXIoYSwicHJldmlvdXNTaWJsaW5nIixkKX0sc2libGluZ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIGMuc2libGluZyhhLnBhcmVudE5vZGUuZmlyc3RDaGlsZCxhKX0sY2hpbGRyZW46ZnVuY3Rpb24oYSl7cmV0dXJuIGMuc2libGluZyhhLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihhKXtyZXR1cm4gYy5ub2RlTmFtZShhLCJpZnJhbWUiKT8KYS5jb250ZW50RG9jdW1lbnR8fGEuY29udGVudFdpbmRvdy5kb2N1bWVudDpjLm1ha2VBcnJheShhLmNoaWxkTm9kZXMpfX0sZnVuY3Rpb24oYSxiKXtjLmZuW2FdPWZ1bmN0aW9uKGQsZil7dmFyIGU9Yy5tYXAodGhpcyxiLGQpO2ViLnRlc3QoYSl8fChmPWQpO2lmKGYmJnR5cGVvZiBmPT09InN0cmluZyIpZT1jLmZpbHRlcihmLGUpO2U9dGhpcy5sZW5ndGg+MT9jLnVuaXF1ZShlKTplO2lmKCh0aGlzLmxlbmd0aD4xfHxnYi50ZXN0KGYpKSYmZmIudGVzdChhKSllPWUucmV2ZXJzZSgpO3JldHVybiB0aGlzLnB1c2hTdGFjayhlLGEsUi5jYWxsKGFyZ3VtZW50cykuam9pbigiLCIpKX19KTtjLmV4dGVuZCh7ZmlsdGVyOmZ1bmN0aW9uKGEsYixkKXtpZihkKWE9Ijpub3QoIithKyIpIjtyZXR1cm4gYy5maW5kLm1hdGNoZXMoYSxiKX0sZGlyOmZ1bmN0aW9uKGEsYixkKXt2YXIgZj1bXTtmb3IoYT1hW2JdO2EmJmEubm9kZVR5cGUhPT05JiYoZD09PXd8fGEubm9kZVR5cGUhPT0xfHwhYyhhKS5pcyhkKSk7KXthLm5vZGVUeXBlPT09CjEmJmYucHVzaChhKTthPWFbYl19cmV0dXJuIGZ9LG50aDpmdW5jdGlvbihhLGIsZCl7Yj1ifHwxO2Zvcih2YXIgZj0wO2E7YT1hW2RdKWlmKGEubm9kZVR5cGU9PT0xJiYrK2Y9PT1iKWJyZWFrO3JldHVybiBhfSxzaWJsaW5nOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBkPVtdO2E7YT1hLm5leHRTaWJsaW5nKWEubm9kZVR5cGU9PT0xJiZhIT09YiYmZC5wdXNoKGEpO3JldHVybiBkfX0pO3ZhciBKYT0vIGpRdWVyeVxkKz0iKD86XGQrfG51bGwpIi9nLFY9L15ccysvLEthPS8oPChbXHc6XSspW14+XSo/KVwvPi9nLGhiPS9eKD86YXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkkL2ksTGE9LzwoW1x3Ol0rKS8saWI9Lzx0Ym9keS9pLGpiPS88fCYjP1x3KzsvLHRhPS88c2NyaXB0fDxvYmplY3R8PGVtYmVkfDxvcHRpb258PHN0eWxlL2ksdWE9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksTWE9ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBoYi50ZXN0KGQpPwphOmIrIj48LyIrZCsiPiJ9LEY9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLGxlZ2VuZDpbMSwiPGZpZWxkc2V0PiIsIjwvZmllbGRzZXQ+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLF9kZWZhdWx0OlswLCIiLCIiXX07Ri5vcHRncm91cD1GLm9wdGlvbjtGLnRib2R5PUYudGZvb3Q9Ri5jb2xncm91cD1GLmNhcHRpb249Ri50aGVhZDtGLnRoPUYudGQ7aWYoIWMuc3VwcG9ydC5odG1sU2VyaWFsaXplKUYuX2RlZmF1bHQ9WzEsImRpdjxkaXY+IiwiPC9kaXY+Il07Yy5mbi5leHRlbmQoe3RleHQ6ZnVuY3Rpb24oYSl7aWYoYy5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7dmFyIGQ9CmModGhpcyk7ZC50ZXh0KGEuY2FsbCh0aGlzLGIsZC50ZXh0KCkpKX0pO2lmKHR5cGVvZiBhIT09Im9iamVjdCImJmEhPT13KXJldHVybiB0aGlzLmVtcHR5KCkuYXBwZW5kKCh0aGlzWzBdJiZ0aGlzWzBdLm93bmVyRG9jdW1lbnR8fHMpLmNyZWF0ZVRleHROb2RlKGEpKTtyZXR1cm4gYy50ZXh0KHRoaXMpfSx3cmFwQWxsOmZ1bmN0aW9uKGEpe2lmKGMuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGQpe2ModGhpcykud3JhcEFsbChhLmNhbGwodGhpcyxkKSl9KTtpZih0aGlzWzBdKXt2YXIgYj1jKGEsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSh0cnVlKTt0aGlzWzBdLnBhcmVudE5vZGUmJmIuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pO2IubWFwKGZ1bmN0aW9uKCl7Zm9yKHZhciBkPXRoaXM7ZC5maXJzdENoaWxkJiZkLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0xOylkPWQuZmlyc3RDaGlsZDtyZXR1cm4gZH0pLmFwcGVuZCh0aGlzKX1yZXR1cm4gdGhpc30sCndyYXBJbm5lcjpmdW5jdGlvbihhKXtpZihjLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtjKHRoaXMpLndyYXBJbm5lcihhLmNhbGwodGhpcyxiKSl9KTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9Yyh0aGlzKSxkPWIuY29udGVudHMoKTtkLmxlbmd0aD9kLndyYXBBbGwoYSk6Yi5hcHBlbmQoYSl9KX0sd3JhcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Yyh0aGlzKS53cmFwQWxsKGEpfSl9LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKXtjLm5vZGVOYW1lKHRoaXMsImJvZHkiKXx8Yyh0aGlzKS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpfSkuZW5kKCl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyx0cnVlLGZ1bmN0aW9uKGEpe3RoaXMubm9kZVR5cGU9PT0xJiZ0aGlzLmFwcGVuZENoaWxkKGEpfSl9LApwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLHRydWUsZnVuY3Rpb24oYSl7dGhpcy5ub2RlVHlwZT09PTEmJnRoaXMuaW5zZXJ0QmVmb3JlKGEsdGhpcy5maXJzdENoaWxkKX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZhbHNlLGZ1bmN0aW9uKGIpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYix0aGlzKX0pO2Vsc2UgaWYoYXJndW1lbnRzLmxlbmd0aCl7dmFyIGE9Yyhhcmd1bWVudHNbMF0pO2EucHVzaC5hcHBseShhLHRoaXMudG9BcnJheSgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYSwiYmVmb3JlIixhcmd1bWVudHMpfX0sYWZ0ZXI6ZnVuY3Rpb24oKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZhbHNlLGZ1bmN0aW9uKGIpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYiwKdGhpcy5uZXh0U2libGluZyl9KTtlbHNlIGlmKGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBhPXRoaXMucHVzaFN0YWNrKHRoaXMsImFmdGVyIixhcmd1bWVudHMpO2EucHVzaC5hcHBseShhLGMoYXJndW1lbnRzWzBdKS50b0FycmF5KCkpO3JldHVybiBhfX0scmVtb3ZlOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBkPTAsZjsoZj10aGlzW2RdKSE9bnVsbDtkKyspaWYoIWF8fGMuZmlsdGVyKGEsW2ZdKS5sZW5ndGgpe2lmKCFiJiZmLm5vZGVUeXBlPT09MSl7Yy5jbGVhbkRhdGEoZi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKTtjLmNsZWFuRGF0YShbZl0pfWYucGFyZW50Tm9kZSYmZi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGYpfXJldHVybiB0aGlzfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgYT0wLGI7KGI9dGhpc1thXSkhPW51bGw7YSsrKWZvcihiLm5vZGVUeXBlPT09MSYmYy5jbGVhbkRhdGEoYi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKTtiLmZpcnN0Q2hpbGQ7KWIucmVtb3ZlQ2hpbGQoYi5maXJzdENoaWxkKTsKcmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMubWFwKGZ1bmN0aW9uKCl7aWYoIWMuc3VwcG9ydC5ub0Nsb25lRXZlbnQmJiFjLmlzWE1MRG9jKHRoaXMpKXt2YXIgZD10aGlzLm91dGVySFRNTCxmPXRoaXMub3duZXJEb2N1bWVudDtpZighZCl7ZD1mLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2QuYXBwZW5kQ2hpbGQodGhpcy5jbG9uZU5vZGUodHJ1ZSkpO2Q9ZC5pbm5lckhUTUx9cmV0dXJuIGMuY2xlYW4oW2QucmVwbGFjZShKYSwiIikucmVwbGFjZSgvPShbXj0iJz5cc10rXC8pPi9nLCc9IiQxIj4nKS5yZXBsYWNlKFYsIiIpXSxmKVswXX1lbHNlIHJldHVybiB0aGlzLmNsb25lTm9kZSh0cnVlKX0pO2lmKGE9PT10cnVlKXtyYSh0aGlzLGIpO3JhKHRoaXMuZmluZCgiKiIpLGIuZmluZCgiKiIpKX1yZXR1cm4gYn0saHRtbDpmdW5jdGlvbihhKXtpZihhPT09dylyZXR1cm4gdGhpc1swXSYmdGhpc1swXS5ub2RlVHlwZT09PTE/dGhpc1swXS5pbm5lckhUTUwucmVwbGFjZShKYSwKIiIpOm51bGw7ZWxzZSBpZih0eXBlb2YgYT09PSJzdHJpbmciJiYhdGEudGVzdChhKSYmKGMuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZXx8IVYudGVzdChhKSkmJiFGWyhMYS5leGVjKGEpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7YT1hLnJlcGxhY2UoS2EsTWEpO3RyeXtmb3IodmFyIGI9MCxkPXRoaXMubGVuZ3RoO2I8ZDtiKyspaWYodGhpc1tiXS5ub2RlVHlwZT09PTEpe2MuY2xlYW5EYXRhKHRoaXNbYl0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSk7dGhpc1tiXS5pbm5lckhUTUw9YX19Y2F0Y2goZil7dGhpcy5lbXB0eSgpLmFwcGVuZChhKX19ZWxzZSBjLmlzRnVuY3Rpb24oYSk/dGhpcy5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBqPWModGhpcyksaT1qLmh0bWwoKTtqLmVtcHR5KCkuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIGEuY2FsbCh0aGlzLGUsaSl9KX0pOnRoaXMuZW1wdHkoKS5hcHBlbmQoYSk7cmV0dXJuIHRoaXN9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKGEpe2lmKHRoaXNbMF0mJgp0aGlzWzBdLnBhcmVudE5vZGUpe2lmKGMuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBkPWModGhpcyksZj1kLmh0bWwoKTtkLnJlcGxhY2VXaXRoKGEuY2FsbCh0aGlzLGIsZikpfSk7aWYodHlwZW9mIGEhPT0ic3RyaW5nIilhPWMoYSkuZGV0YWNoKCk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPXRoaXMubmV4dFNpYmxpbmcsZD10aGlzLnBhcmVudE5vZGU7Yyh0aGlzKS5yZW1vdmUoKTtiP2MoYikuYmVmb3JlKGEpOmMoZCkuYXBwZW5kKGEpfSl9ZWxzZSByZXR1cm4gdGhpcy5wdXNoU3RhY2soYyhjLmlzRnVuY3Rpb24oYSk/YSgpOmEpLCJyZXBsYWNlV2l0aCIsYSl9LGRldGFjaDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yZW1vdmUoYSx0cnVlKX0sZG9tTWFuaXA6ZnVuY3Rpb24oYSxiLGQpe2Z1bmN0aW9uIGYodSl7cmV0dXJuIGMubm9kZU5hbWUodSwidGFibGUiKT91LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpWzBdfHwKdS5hcHBlbmRDaGlsZCh1Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKSk6dX12YXIgZSxqLGk9YVswXSxvPVtdLGs7aWYoIWMuc3VwcG9ydC5jaGVja0Nsb25lJiZhcmd1bWVudHMubGVuZ3RoPT09MyYmdHlwZW9mIGk9PT0ic3RyaW5nIiYmdWEudGVzdChpKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Yyh0aGlzKS5kb21NYW5pcChhLGIsZCx0cnVlKX0pO2lmKGMuaXNGdW5jdGlvbihpKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHUpe3ZhciB6PWModGhpcyk7YVswXT1pLmNhbGwodGhpcyx1LGI/ei5odG1sKCk6dyk7ei5kb21NYW5pcChhLGIsZCl9KTtpZih0aGlzWzBdKXtlPWkmJmkucGFyZW50Tm9kZTtlPWMuc3VwcG9ydC5wYXJlbnROb2RlJiZlJiZlLm5vZGVUeXBlPT09MTEmJmUuY2hpbGROb2Rlcy5sZW5ndGg9PT10aGlzLmxlbmd0aD97ZnJhZ21lbnQ6ZX06c2EoYSx0aGlzLG8pO2s9ZS5mcmFnbWVudDtpZihqPWsuY2hpbGROb2Rlcy5sZW5ndGg9PT0KMT8oaz1rLmZpcnN0Q2hpbGQpOmsuZmlyc3RDaGlsZCl7Yj1iJiZjLm5vZGVOYW1lKGosInRyIik7Zm9yKHZhciBuPTAscj10aGlzLmxlbmd0aDtuPHI7bisrKWQuY2FsbChiP2YodGhpc1tuXSxqKTp0aGlzW25dLG4+MHx8ZS5jYWNoZWFibGV8fHRoaXMubGVuZ3RoPjE/ay5jbG9uZU5vZGUodHJ1ZSk6ayl9by5sZW5ndGgmJmMuZWFjaChvLFFhKX1yZXR1cm4gdGhpc319KTtjLmZyYWdtZW50cz17fTtjLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihhLGIpe2MuZm5bYV09ZnVuY3Rpb24oZCl7dmFyIGY9W107ZD1jKGQpO3ZhciBlPXRoaXMubGVuZ3RoPT09MSYmdGhpc1swXS5wYXJlbnROb2RlO2lmKGUmJmUubm9kZVR5cGU9PT0xMSYmZS5jaGlsZE5vZGVzLmxlbmd0aD09PTEmJmQubGVuZ3RoPT09MSl7ZFtiXSh0aGlzWzBdKTsKcmV0dXJuIHRoaXN9ZWxzZXtlPTA7Zm9yKHZhciBqPWQubGVuZ3RoO2U8ajtlKyspe3ZhciBpPShlPjA/dGhpcy5jbG9uZSh0cnVlKTp0aGlzKS5nZXQoKTtjLmZuW2JdLmFwcGx5KGMoZFtlXSksaSk7Zj1mLmNvbmNhdChpKX1yZXR1cm4gdGhpcy5wdXNoU3RhY2soZixhLGQuc2VsZWN0b3IpfX19KTtjLmV4dGVuZCh7Y2xlYW46ZnVuY3Rpb24oYSxiLGQsZil7Yj1ifHxzO2lmKHR5cGVvZiBiLmNyZWF0ZUVsZW1lbnQ9PT0idW5kZWZpbmVkIiliPWIub3duZXJEb2N1bWVudHx8YlswXSYmYlswXS5vd25lckRvY3VtZW50fHxzO2Zvcih2YXIgZT1bXSxqPTAsaTsoaT1hW2pdKSE9bnVsbDtqKyspe2lmKHR5cGVvZiBpPT09Im51bWJlciIpaSs9IiI7aWYoaSl7aWYodHlwZW9mIGk9PT0ic3RyaW5nIiYmIWpiLnRlc3QoaSkpaT1iLmNyZWF0ZVRleHROb2RlKGkpO2Vsc2UgaWYodHlwZW9mIGk9PT0ic3RyaW5nIil7aT1pLnJlcGxhY2UoS2EsTWEpO3ZhciBvPShMYS5leGVjKGkpfHxbIiIsCiIiXSlbMV0udG9Mb3dlckNhc2UoKSxrPUZbb118fEYuX2RlZmF1bHQsbj1rWzBdLHI9Yi5jcmVhdGVFbGVtZW50KCJkaXYiKTtmb3Ioci5pbm5lckhUTUw9a1sxXStpK2tbMl07bi0tOylyPXIubGFzdENoaWxkO2lmKCFjLnN1cHBvcnQudGJvZHkpe249aWIudGVzdChpKTtvPW89PT0idGFibGUiJiYhbj9yLmZpcnN0Q2hpbGQmJnIuZmlyc3RDaGlsZC5jaGlsZE5vZGVzOmtbMV09PT0iPHRhYmxlPiImJiFuP3IuY2hpbGROb2RlczpbXTtmb3Ioaz1vLmxlbmd0aC0xO2s+PTA7LS1rKWMubm9kZU5hbWUob1trXSwidGJvZHkiKSYmIW9ba10uY2hpbGROb2Rlcy5sZW5ndGgmJm9ba10ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvW2tdKX0hYy5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlJiZWLnRlc3QoaSkmJnIuaW5zZXJ0QmVmb3JlKGIuY3JlYXRlVGV4dE5vZGUoVi5leGVjKGkpWzBdKSxyLmZpcnN0Q2hpbGQpO2k9ci5jaGlsZE5vZGVzfWlmKGkubm9kZVR5cGUpZS5wdXNoKGkpO2Vsc2UgZT0KYy5tZXJnZShlLGkpfX1pZihkKWZvcihqPTA7ZVtqXTtqKyspaWYoZiYmYy5ub2RlTmFtZShlW2pdLCJzY3JpcHQiKSYmKCFlW2pdLnR5cGV8fGVbal0udHlwZS50b0xvd2VyQ2FzZSgpPT09InRleHQvamF2YXNjcmlwdCIpKWYucHVzaChlW2pdLnBhcmVudE5vZGU/ZVtqXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVbal0pOmVbal0pO2Vsc2V7ZVtqXS5ub2RlVHlwZT09PTEmJmUuc3BsaWNlLmFwcGx5KGUsW2orMSwwXS5jb25jYXQoYy5tYWtlQXJyYXkoZVtqXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IikpKSk7ZC5hcHBlbmRDaGlsZChlW2pdKX1yZXR1cm4gZX0sY2xlYW5EYXRhOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYixkLGY9Yy5jYWNoZSxlPWMuZXZlbnQuc3BlY2lhbCxqPWMuc3VwcG9ydC5kZWxldGVFeHBhbmRvLGk9MCxvOyhvPWFbaV0pIT1udWxsO2krKylpZihkPW9bYy5leHBhbmRvXSl7Yj1mW2RdO2lmKGIuZXZlbnRzKWZvcih2YXIgayBpbiBiLmV2ZW50cyllW2tdPwpjLmV2ZW50LnJlbW92ZShvLGspOkNhKG8sayxiLmhhbmRsZSk7aWYoailkZWxldGUgb1tjLmV4cGFuZG9dO2Vsc2Ugby5yZW1vdmVBdHRyaWJ1dGUmJm8ucmVtb3ZlQXR0cmlidXRlKGMuZXhwYW5kbyk7ZGVsZXRlIGZbZF19fX0pO3ZhciBrYj0vei0/aW5kZXh8Zm9udC0/d2VpZ2h0fG9wYWNpdHl8em9vbXxsaW5lLT9oZWlnaHQvaSxOYT0vYWxwaGFcKFteKV0qXCkvLE9hPS9vcGFjaXR5PShbXildKikvLGhhPS9mbG9hdC9pLGlhPS8tKFthLXpdKS9pZyxsYj0vKFtBLVpdKS9nLG1iPS9eLT9cZCsoPzpweCk/JC9pLG5iPS9eLT9cZC8sb2I9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LHBiPVsiTGVmdCIsIlJpZ2h0Il0scWI9WyJUb3AiLCJCb3R0b20iXSxyYj1zLmRlZmF1bHRWaWV3JiZzLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUsUGE9Yy5zdXBwb3J0LmNzc0Zsb2F0PyJjc3NGbG9hdCI6InN0eWxlRmxvYXQiLGphPQpmdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9O2MuZm4uY3NzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIFgodGhpcyxhLGIsdHJ1ZSxmdW5jdGlvbihkLGYsZSl7aWYoZT09PXcpcmV0dXJuIGMuY3VyQ1NTKGQsZik7aWYodHlwZW9mIGU9PT0ibnVtYmVyIiYmIWtiLnRlc3QoZikpZSs9InB4IjtjLnN0eWxlKGQsZixlKX0pfTtjLmV4dGVuZCh7c3R5bGU6ZnVuY3Rpb24oYSxiLGQpe2lmKCFhfHxhLm5vZGVUeXBlPT09M3x8YS5ub2RlVHlwZT09PTgpcmV0dXJuIHc7aWYoKGI9PT0id2lkdGgifHxiPT09ImhlaWdodCIpJiZwYXJzZUZsb2F0KGQpPDApZD13O3ZhciBmPWEuc3R5bGV8fGEsZT1kIT09dztpZighYy5zdXBwb3J0Lm9wYWNpdHkmJmI9PT0ib3BhY2l0eSIpe2lmKGUpe2Yuem9vbT0xO2I9cGFyc2VJbnQoZCwxMCkrIiI9PT0iTmFOIj8iIjoiYWxwaGEob3BhY2l0eT0iK2QqMTAwKyIpIjthPWYuZmlsdGVyfHxjLmN1ckNTUyhhLCJmaWx0ZXIiKXx8IiI7Zi5maWx0ZXI9Ck5hLnRlc3QoYSk/YS5yZXBsYWNlKE5hLGIpOmJ9cmV0dXJuIGYuZmlsdGVyJiZmLmZpbHRlci5pbmRleE9mKCJvcGFjaXR5PSIpPj0wP3BhcnNlRmxvYXQoT2EuZXhlYyhmLmZpbHRlcilbMV0pLzEwMCsiIjoiIn1pZihoYS50ZXN0KGIpKWI9UGE7Yj1iLnJlcGxhY2UoaWEsamEpO2lmKGUpZltiXT1kO3JldHVybiBmW2JdfSxjc3M6ZnVuY3Rpb24oYSxiLGQsZil7aWYoYj09PSJ3aWR0aCJ8fGI9PT0iaGVpZ2h0Iil7dmFyIGUsaj1iPT09IndpZHRoIj9wYjpxYjtmdW5jdGlvbiBpKCl7ZT1iPT09IndpZHRoIj9hLm9mZnNldFdpZHRoOmEub2Zmc2V0SGVpZ2h0O2YhPT0iYm9yZGVyIiYmYy5lYWNoKGosZnVuY3Rpb24oKXtmfHwoZS09cGFyc2VGbG9hdChjLmN1ckNTUyhhLCJwYWRkaW5nIit0aGlzLHRydWUpKXx8MCk7aWYoZj09PSJtYXJnaW4iKWUrPXBhcnNlRmxvYXQoYy5jdXJDU1MoYSwibWFyZ2luIit0aGlzLHRydWUpKXx8MDtlbHNlIGUtPXBhcnNlRmxvYXQoYy5jdXJDU1MoYSwKImJvcmRlciIrdGhpcysiV2lkdGgiLHRydWUpKXx8MH0pfWEub2Zmc2V0V2lkdGghPT0wP2koKTpjLnN3YXAoYSxvYixpKTtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLnJvdW5kKGUpKX1yZXR1cm4gYy5jdXJDU1MoYSxiLGQpfSxjdXJDU1M6ZnVuY3Rpb24oYSxiLGQpe3ZhciBmLGU9YS5zdHlsZTtpZighYy5zdXBwb3J0Lm9wYWNpdHkmJmI9PT0ib3BhY2l0eSImJmEuY3VycmVudFN0eWxlKXtmPU9hLnRlc3QoYS5jdXJyZW50U3R5bGUuZmlsdGVyfHwiIik/cGFyc2VGbG9hdChSZWdFeHAuJDEpLzEwMCsiIjoiIjtyZXR1cm4gZj09PSIiPyIxIjpmfWlmKGhhLnRlc3QoYikpYj1QYTtpZighZCYmZSYmZVtiXSlmPWVbYl07ZWxzZSBpZihyYil7aWYoaGEudGVzdChiKSliPSJmbG9hdCI7Yj1iLnJlcGxhY2UobGIsIi0kMSIpLnRvTG93ZXJDYXNlKCk7ZT1hLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7aWYoIWUpcmV0dXJuIG51bGw7aWYoYT1lLmdldENvbXB1dGVkU3R5bGUoYSxudWxsKSlmPQphLmdldFByb3BlcnR5VmFsdWUoYik7aWYoYj09PSJvcGFjaXR5IiYmZj09PSIiKWY9IjEifWVsc2UgaWYoYS5jdXJyZW50U3R5bGUpe2Q9Yi5yZXBsYWNlKGlhLGphKTtmPWEuY3VycmVudFN0eWxlW2JdfHxhLmN1cnJlbnRTdHlsZVtkXTtpZighbWIudGVzdChmKSYmbmIudGVzdChmKSl7Yj1lLmxlZnQ7dmFyIGo9YS5ydW50aW1lU3R5bGUubGVmdDthLnJ1bnRpbWVTdHlsZS5sZWZ0PWEuY3VycmVudFN0eWxlLmxlZnQ7ZS5sZWZ0PWQ9PT0iZm9udFNpemUiPyIxZW0iOmZ8fDA7Zj1lLnBpeGVsTGVmdCsicHgiO2UubGVmdD1iO2EucnVudGltZVN0eWxlLmxlZnQ9an19cmV0dXJuIGZ9LHN3YXA6ZnVuY3Rpb24oYSxiLGQpe3ZhciBmPXt9O2Zvcih2YXIgZSBpbiBiKXtmW2VdPWEuc3R5bGVbZV07YS5zdHlsZVtlXT1iW2VdfWQuY2FsbChhKTtmb3IoZSBpbiBiKWEuc3R5bGVbZV09ZltlXX19KTtpZihjLmV4cHImJmMuZXhwci5maWx0ZXJzKXtjLmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oYSl7dmFyIGI9CmEub2Zmc2V0V2lkdGgsZD1hLm9mZnNldEhlaWdodCxmPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJ0ciI7cmV0dXJuIGI9PT0wJiZkPT09MCYmIWY/dHJ1ZTpiPjAmJmQ+MCYmIWY/ZmFsc2U6Yy5jdXJDU1MoYSwiZGlzcGxheSIpPT09Im5vbmUifTtjLmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGEpe3JldHVybiFjLmV4cHIuZmlsdGVycy5oaWRkZW4oYSl9fXZhciBzYj1KKCksdGI9LzxzY3JpcHQoLnxccykqP1wvc2NyaXB0Pi9naSx1Yj0vc2VsZWN0fHRleHRhcmVhL2ksdmI9L2NvbG9yfGRhdGV8ZGF0ZXRpbWV8ZW1haWx8aGlkZGVufG1vbnRofG51bWJlcnxwYXNzd29yZHxyYW5nZXxzZWFyY2h8dGVsfHRleHR8dGltZXx1cmx8d2Vlay9pLE49Lz1cPygmfCQpLyxrYT0vXD8vLHdiPS8oXD98JilfPS4qPygmfCQpLyx4Yj0vXihcdys6KT9cL1wvKFteXC8/I10rKS8seWI9LyUyMC9nLHpiPWMuZm4ubG9hZDtjLmZuLmV4dGVuZCh7bG9hZDpmdW5jdGlvbihhLGIsZCl7aWYodHlwZW9mIGEhPT0KInN0cmluZyIpcmV0dXJuIHpiLmNhbGwodGhpcyxhKTtlbHNlIGlmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpczt2YXIgZj1hLmluZGV4T2YoIiAiKTtpZihmPj0wKXt2YXIgZT1hLnNsaWNlKGYsYS5sZW5ndGgpO2E9YS5zbGljZSgwLGYpfWY9IkdFVCI7aWYoYilpZihjLmlzRnVuY3Rpb24oYikpe2Q9YjtiPW51bGx9ZWxzZSBpZih0eXBlb2YgYj09PSJvYmplY3QiKXtiPWMucGFyYW0oYixjLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCk7Zj0iUE9TVCJ9dmFyIGo9dGhpcztjLmFqYXgoe3VybDphLHR5cGU6ZixkYXRhVHlwZToiaHRtbCIsZGF0YTpiLGNvbXBsZXRlOmZ1bmN0aW9uKGksbyl7aWYobz09PSJzdWNjZXNzInx8bz09PSJub3Rtb2RpZmllZCIpai5odG1sKGU/YygiPGRpdiAvPiIpLmFwcGVuZChpLnJlc3BvbnNlVGV4dC5yZXBsYWNlKHRiLCIiKSkuZmluZChlKTppLnJlc3BvbnNlVGV4dCk7ZCYmai5lYWNoKGQsW2kucmVzcG9uc2VUZXh0LG8saV0pfX0pO3JldHVybiB0aGlzfSwKc2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIGMucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50cz9jLm1ha2VBcnJheSh0aGlzLmVsZW1lbnRzKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZSYmIXRoaXMuZGlzYWJsZWQmJih0aGlzLmNoZWNrZWR8fHViLnRlc3QodGhpcy5ub2RlTmFtZSl8fHZiLnRlc3QodGhpcy50eXBlKSl9KS5tYXAoZnVuY3Rpb24oYSxiKXthPWModGhpcykudmFsKCk7cmV0dXJuIGE9PW51bGw/bnVsbDpjLmlzQXJyYXkoYSk/Yy5tYXAoYSxmdW5jdGlvbihkKXtyZXR1cm57bmFtZTpiLm5hbWUsdmFsdWU6ZH19KTp7bmFtZTpiLm5hbWUsdmFsdWU6YX19KS5nZXQoKX19KTtjLmVhY2goImFqYXhTdGFydCBhamF4U3RvcCBhamF4Q29tcGxldGUgYWpheEVycm9yIGFqYXhTdWNjZXNzIGFqYXhTZW5kIi5zcGxpdCgiICIpLApmdW5jdGlvbihhLGIpe2MuZm5bYl09ZnVuY3Rpb24oZCl7cmV0dXJuIHRoaXMuYmluZChiLGQpfX0pO2MuZXh0ZW5kKHtnZXQ6ZnVuY3Rpb24oYSxiLGQsZil7aWYoYy5pc0Z1bmN0aW9uKGIpKXtmPWZ8fGQ7ZD1iO2I9bnVsbH1yZXR1cm4gYy5hamF4KHt0eXBlOiJHRVQiLHVybDphLGRhdGE6YixzdWNjZXNzOmQsZGF0YVR5cGU6Zn0pfSxnZXRTY3JpcHQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYy5nZXQoYSxudWxsLGIsInNjcmlwdCIpfSxnZXRKU09OOmZ1bmN0aW9uKGEsYixkKXtyZXR1cm4gYy5nZXQoYSxiLGQsImpzb24iKX0scG9zdDpmdW5jdGlvbihhLGIsZCxmKXtpZihjLmlzRnVuY3Rpb24oYikpe2Y9Znx8ZDtkPWI7Yj17fX1yZXR1cm4gYy5hamF4KHt0eXBlOiJQT1NUIix1cmw6YSxkYXRhOmIsc3VjY2VzczpkLGRhdGFUeXBlOmZ9KX0sYWpheFNldHVwOmZ1bmN0aW9uKGEpe2MuZXh0ZW5kKGMuYWpheFNldHRpbmdzLGEpfSxhamF4U2V0dGluZ3M6e3VybDpsb2NhdGlvbi5ocmVmLApnbG9iYWw6dHJ1ZSx0eXBlOiJHRVQiLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLHByb2Nlc3NEYXRhOnRydWUsYXN5bmM6dHJ1ZSx4aHI6QS5YTUxIdHRwUmVxdWVzdCYmKEEubG9jYXRpb24ucHJvdG9jb2whPT0iZmlsZToifHwhQS5BY3RpdmVYT2JqZWN0KT9mdW5jdGlvbigpe3JldHVybiBuZXcgQS5YTUxIdHRwUmVxdWVzdH06ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBBLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9Y2F0Y2goYSl7fX0sYWNjZXB0czp7eG1sOiJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIixodG1sOiJ0ZXh0L2h0bWwiLHNjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Iixqc29uOiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQiLHRleHQ6InRleHQvcGxhaW4iLF9kZWZhdWx0OiIqLyoifX0sbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheDpmdW5jdGlvbihhKXtmdW5jdGlvbiBiKCl7ZS5zdWNjZXNzJiYKZS5zdWNjZXNzLmNhbGwoayxvLGkseCk7ZS5nbG9iYWwmJmYoImFqYXhTdWNjZXNzIixbeCxlXSl9ZnVuY3Rpb24gZCgpe2UuY29tcGxldGUmJmUuY29tcGxldGUuY2FsbChrLHgsaSk7ZS5nbG9iYWwmJmYoImFqYXhDb21wbGV0ZSIsW3gsZV0pO2UuZ2xvYmFsJiYhLS1jLmFjdGl2ZSYmYy5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpfWZ1bmN0aW9uIGYocSxwKXsoZS5jb250ZXh0P2MoZS5jb250ZXh0KTpjLmV2ZW50KS50cmlnZ2VyKHEscCl9dmFyIGU9Yy5leHRlbmQodHJ1ZSx7fSxjLmFqYXhTZXR0aW5ncyxhKSxqLGksbyxrPWEmJmEuY29udGV4dHx8ZSxuPWUudHlwZS50b1VwcGVyQ2FzZSgpO2lmKGUuZGF0YSYmZS5wcm9jZXNzRGF0YSYmdHlwZW9mIGUuZGF0YSE9PSJzdHJpbmciKWUuZGF0YT1jLnBhcmFtKGUuZGF0YSxlLnRyYWRpdGlvbmFsKTtpZihlLmRhdGFUeXBlPT09Impzb25wIil7aWYobj09PSJHRVQiKU4udGVzdChlLnVybCl8fChlLnVybCs9KGthLnRlc3QoZS51cmwpPwoiJiI6Ij8iKSsoZS5qc29ucHx8ImNhbGxiYWNrIikrIj0/Iik7ZWxzZSBpZighZS5kYXRhfHwhTi50ZXN0KGUuZGF0YSkpZS5kYXRhPShlLmRhdGE/ZS5kYXRhKyImIjoiIikrKGUuanNvbnB8fCJjYWxsYmFjayIpKyI9PyI7ZS5kYXRhVHlwZT0ianNvbiJ9aWYoZS5kYXRhVHlwZT09PSJqc29uIiYmKGUuZGF0YSYmTi50ZXN0KGUuZGF0YSl8fE4udGVzdChlLnVybCkpKXtqPWUuanNvbnBDYWxsYmFja3x8Impzb25wIitzYisrO2lmKGUuZGF0YSllLmRhdGE9KGUuZGF0YSsiIikucmVwbGFjZShOLCI9IitqKyIkMSIpO2UudXJsPWUudXJsLnJlcGxhY2UoTiwiPSIraisiJDEiKTtlLmRhdGFUeXBlPSJzY3JpcHQiO0Fbal09QVtqXXx8ZnVuY3Rpb24ocSl7bz1xO2IoKTtkKCk7QVtqXT13O3RyeXtkZWxldGUgQVtqXX1jYXRjaChwKXt9eiYmei5yZW1vdmVDaGlsZChDKX19aWYoZS5kYXRhVHlwZT09PSJzY3JpcHQiJiZlLmNhY2hlPT09bnVsbCllLmNhY2hlPWZhbHNlO2lmKGUuY2FjaGU9PT0KZmFsc2UmJm49PT0iR0VUIil7dmFyIHI9SigpLHU9ZS51cmwucmVwbGFjZSh3YiwiJDFfPSIrcisiJDIiKTtlLnVybD11Kyh1PT09ZS51cmw/KGthLnRlc3QoZS51cmwpPyImIjoiPyIpKyJfPSIrcjoiIil9aWYoZS5kYXRhJiZuPT09IkdFVCIpZS51cmwrPShrYS50ZXN0KGUudXJsKT8iJiI6Ij8iKStlLmRhdGE7ZS5nbG9iYWwmJiFjLmFjdGl2ZSsrJiZjLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpO3I9KHI9eGIuZXhlYyhlLnVybCkpJiYoclsxXSYmclsxXSE9PWxvY2F0aW9uLnByb3RvY29sfHxyWzJdIT09bG9jYXRpb24uaG9zdCk7aWYoZS5kYXRhVHlwZT09PSJzY3JpcHQiJiZuPT09IkdFVCImJnIpe3ZhciB6PXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXXx8cy5kb2N1bWVudEVsZW1lbnQsQz1zLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO0Muc3JjPWUudXJsO2lmKGUuc2NyaXB0Q2hhcnNldClDLmNoYXJzZXQ9ZS5zY3JpcHRDaGFyc2V0O2lmKCFqKXt2YXIgQj0KZmFsc2U7Qy5vbmxvYWQ9Qy5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtpZighQiYmKCF0aGlzLnJlYWR5U3RhdGV8fHRoaXMucmVhZHlTdGF0ZT09PSJsb2FkZWQifHx0aGlzLnJlYWR5U3RhdGU9PT0iY29tcGxldGUiKSl7Qj10cnVlO2IoKTtkKCk7Qy5vbmxvYWQ9Qy5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbDt6JiZDLnBhcmVudE5vZGUmJnoucmVtb3ZlQ2hpbGQoQyl9fX16Lmluc2VydEJlZm9yZShDLHouZmlyc3RDaGlsZCk7cmV0dXJuIHd9dmFyIEU9ZmFsc2UseD1lLnhocigpO2lmKHgpe2UudXNlcm5hbWU/eC5vcGVuKG4sZS51cmwsZS5hc3luYyxlLnVzZXJuYW1lLGUucGFzc3dvcmQpOngub3BlbihuLGUudXJsLGUuYXN5bmMpO3RyeXtpZihlLmRhdGF8fGEmJmEuY29udGVudFR5cGUpeC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGUuY29udGVudFR5cGUpO2lmKGUuaWZNb2RpZmllZCl7Yy5sYXN0TW9kaWZpZWRbZS51cmxdJiZ4LnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIiwKYy5sYXN0TW9kaWZpZWRbZS51cmxdKTtjLmV0YWdbZS51cmxdJiZ4LnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLGMuZXRhZ1tlLnVybF0pfXJ8fHguc2V0UmVxdWVzdEhlYWRlcigiWC1SZXF1ZXN0ZWQtV2l0aCIsIlhNTEh0dHBSZXF1ZXN0Iik7eC5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLGUuZGF0YVR5cGUmJmUuYWNjZXB0c1tlLmRhdGFUeXBlXT9lLmFjY2VwdHNbZS5kYXRhVHlwZV0rIiwgKi8qIjplLmFjY2VwdHMuX2RlZmF1bHQpfWNhdGNoKGdhKXt9aWYoZS5iZWZvcmVTZW5kJiZlLmJlZm9yZVNlbmQuY2FsbChrLHgsZSk9PT1mYWxzZSl7ZS5nbG9iYWwmJiEtLWMuYWN0aXZlJiZjLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIik7eC5hYm9ydCgpO3JldHVybiBmYWxzZX1lLmdsb2JhbCYmZigiYWpheFNlbmQiLFt4LGVdKTt2YXIgZz14Lm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihxKXtpZigheHx8eC5yZWFkeVN0YXRlPT09MHx8cT09PSJhYm9ydCIpe0V8fApkKCk7RT10cnVlO2lmKHgpeC5vbnJlYWR5c3RhdGVjaGFuZ2U9Yy5ub29wfWVsc2UgaWYoIUUmJngmJih4LnJlYWR5U3RhdGU9PT00fHxxPT09InRpbWVvdXQiKSl7RT10cnVlO3gub25yZWFkeXN0YXRlY2hhbmdlPWMubm9vcDtpPXE9PT0idGltZW91dCI/InRpbWVvdXQiOiFjLmh0dHBTdWNjZXNzKHgpPyJlcnJvciI6ZS5pZk1vZGlmaWVkJiZjLmh0dHBOb3RNb2RpZmllZCh4LGUudXJsKT8ibm90bW9kaWZpZWQiOiJzdWNjZXNzIjt2YXIgcDtpZihpPT09InN1Y2Nlc3MiKXRyeXtvPWMuaHR0cERhdGEoeCxlLmRhdGFUeXBlLGUpfWNhdGNoKHYpe2k9InBhcnNlcmVycm9yIjtwPXZ9aWYoaT09PSJzdWNjZXNzInx8aT09PSJub3Rtb2RpZmllZCIpanx8YigpO2Vsc2UgYy5oYW5kbGVFcnJvcihlLHgsaSxwKTtkKCk7cT09PSJ0aW1lb3V0IiYmeC5hYm9ydCgpO2lmKGUuYXN5bmMpeD1udWxsfX07dHJ5e3ZhciBoPXguYWJvcnQ7eC5hYm9ydD1mdW5jdGlvbigpe3gmJmguY2FsbCh4KTsKZygiYWJvcnQiKX19Y2F0Y2gobCl7fWUuYXN5bmMmJmUudGltZW91dD4wJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7eCYmIUUmJmcoInRpbWVvdXQiKX0sZS50aW1lb3V0KTt0cnl7eC5zZW5kKG49PT0iUE9TVCJ8fG49PT0iUFVUInx8bj09PSJERUxFVEUiP2UuZGF0YTpudWxsKX1jYXRjaChtKXtjLmhhbmRsZUVycm9yKGUseCxudWxsLG0pO2QoKX1lLmFzeW5jfHxnKCk7cmV0dXJuIHh9fSxoYW5kbGVFcnJvcjpmdW5jdGlvbihhLGIsZCxmKXtpZihhLmVycm9yKWEuZXJyb3IuY2FsbChhLmNvbnRleHR8fGEsYixkLGYpO2lmKGEuZ2xvYmFsKShhLmNvbnRleHQ/YyhhLmNvbnRleHQpOmMuZXZlbnQpLnRyaWdnZXIoImFqYXhFcnJvciIsW2IsYSxmXSl9LGFjdGl2ZTowLGh0dHBTdWNjZXNzOmZ1bmN0aW9uKGEpe3RyeXtyZXR1cm4hYS5zdGF0dXMmJmxvY2F0aW9uLnByb3RvY29sPT09ImZpbGU6Inx8YS5zdGF0dXM+PTIwMCYmYS5zdGF0dXM8MzAwfHxhLnN0YXR1cz09PTMwNHx8YS5zdGF0dXM9PT0KMTIyM3x8YS5zdGF0dXM9PT0wfWNhdGNoKGIpe31yZXR1cm4gZmFsc2V9LGh0dHBOb3RNb2RpZmllZDpmdW5jdGlvbihhLGIpe3ZhciBkPWEuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSxmPWEuZ2V0UmVzcG9uc2VIZWFkZXIoIkV0YWciKTtpZihkKWMubGFzdE1vZGlmaWVkW2JdPWQ7aWYoZiljLmV0YWdbYl09ZjtyZXR1cm4gYS5zdGF0dXM9PT0zMDR8fGEuc3RhdHVzPT09MH0saHR0cERhdGE6ZnVuY3Rpb24oYSxiLGQpe3ZhciBmPWEuZ2V0UmVzcG9uc2VIZWFkZXIoImNvbnRlbnQtdHlwZSIpfHwiIixlPWI9PT0ieG1sInx8IWImJmYuaW5kZXhPZigieG1sIik+PTA7YT1lP2EucmVzcG9uc2VYTUw6YS5yZXNwb25zZVRleHQ7ZSYmYS5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWU9PT0icGFyc2VyZXJyb3IiJiZjLmVycm9yKCJwYXJzZXJlcnJvciIpO2lmKGQmJmQuZGF0YUZpbHRlcilhPWQuZGF0YUZpbHRlcihhLGIpO2lmKHR5cGVvZiBhPT09InN0cmluZyIpaWYoYj09PQoianNvbiJ8fCFiJiZmLmluZGV4T2YoImpzb24iKT49MClhPWMucGFyc2VKU09OKGEpO2Vsc2UgaWYoYj09PSJzY3JpcHQifHwhYiYmZi5pbmRleE9mKCJqYXZhc2NyaXB0Iik+PTApYy5nbG9iYWxFdmFsKGEpO3JldHVybiBhfSxwYXJhbTpmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGQoaSxvKXtpZihjLmlzQXJyYXkobykpYy5lYWNoKG8sZnVuY3Rpb24oayxuKXtifHwvXFtcXSQvLnRlc3QoaSk/ZihpLG4pOmQoaSsiWyIrKHR5cGVvZiBuPT09Im9iamVjdCJ8fGMuaXNBcnJheShuKT9rOiIiKSsiXSIsbil9KTtlbHNlIWImJm8hPW51bGwmJnR5cGVvZiBvPT09Im9iamVjdCI/Yy5lYWNoKG8sZnVuY3Rpb24oayxuKXtkKGkrIlsiK2srIl0iLG4pfSk6ZihpLG8pfWZ1bmN0aW9uIGYoaSxvKXtvPWMuaXNGdW5jdGlvbihvKT9vKCk6bztlW2UubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoaSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChvKX12YXIgZT1bXTtpZihiPT09dyliPWMuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsOwppZihjLmlzQXJyYXkoYSl8fGEuanF1ZXJ5KWMuZWFjaChhLGZ1bmN0aW9uKCl7Zih0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcih2YXIgaiBpbiBhKWQoaixhW2pdKTtyZXR1cm4gZS5qb2luKCImIikucmVwbGFjZSh5YiwiKyIpfX0pO3ZhciBsYT17fSxBYj0vdG9nZ2xlfHNob3d8aGlkZS8sQmI9L14oWystXT0pPyhbXGQrLS5dKykoLiopJC8sVyx2YT1bWyJoZWlnaHQiLCJtYXJnaW5Ub3AiLCJtYXJnaW5Cb3R0b20iLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSJdLFsid2lkdGgiLCJtYXJnaW5MZWZ0IiwibWFyZ2luUmlnaHQiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCJdLFsib3BhY2l0eSJdXTtjLmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbihhLGIpe2lmKGF8fGE9PT0wKXJldHVybiB0aGlzLmFuaW1hdGUoSygic2hvdyIsMyksYSxiKTtlbHNle2E9MDtmb3IoYj10aGlzLmxlbmd0aDthPGI7YSsrKXt2YXIgZD1jLmRhdGEodGhpc1thXSwib2xkZGlzcGxheSIpOwp0aGlzW2FdLnN0eWxlLmRpc3BsYXk9ZHx8IiI7aWYoYy5jc3ModGhpc1thXSwiZGlzcGxheSIpPT09Im5vbmUiKXtkPXRoaXNbYV0ubm9kZU5hbWU7dmFyIGY7aWYobGFbZF0pZj1sYVtkXTtlbHNle3ZhciBlPWMoIjwiK2QrIiAvPiIpLmFwcGVuZFRvKCJib2R5Iik7Zj1lLmNzcygiZGlzcGxheSIpO2lmKGY9PT0ibm9uZSIpZj0iYmxvY2siO2UucmVtb3ZlKCk7bGFbZF09Zn1jLmRhdGEodGhpc1thXSwib2xkZGlzcGxheSIsZil9fWE9MDtmb3IoYj10aGlzLmxlbmd0aDthPGI7YSsrKXRoaXNbYV0uc3R5bGUuZGlzcGxheT1jLmRhdGEodGhpc1thXSwib2xkZGlzcGxheSIpfHwiIjtyZXR1cm4gdGhpc319LGhpZGU6ZnVuY3Rpb24oYSxiKXtpZihhfHxhPT09MClyZXR1cm4gdGhpcy5hbmltYXRlKEsoImhpZGUiLDMpLGEsYik7ZWxzZXthPTA7Zm9yKGI9dGhpcy5sZW5ndGg7YTxiO2ErKyl7dmFyIGQ9Yy5kYXRhKHRoaXNbYV0sIm9sZGRpc3BsYXkiKTshZCYmZCE9PSJub25lIiYmYy5kYXRhKHRoaXNbYV0sCiJvbGRkaXNwbGF5IixjLmNzcyh0aGlzW2FdLCJkaXNwbGF5IikpfWE9MDtmb3IoYj10aGlzLmxlbmd0aDthPGI7YSsrKXRoaXNbYV0uc3R5bGUuZGlzcGxheT0ibm9uZSI7cmV0dXJuIHRoaXN9fSxfdG9nZ2xlOmMuZm4udG9nZ2xlLHRvZ2dsZTpmdW5jdGlvbihhLGIpe3ZhciBkPXR5cGVvZiBhPT09ImJvb2xlYW4iO2lmKGMuaXNGdW5jdGlvbihhKSYmYy5pc0Z1bmN0aW9uKGIpKXRoaXMuX3RvZ2dsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZWxzZSBhPT1udWxsfHxkP3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBmPWQ/YTpjKHRoaXMpLmlzKCI6aGlkZGVuIik7Yyh0aGlzKVtmPyJzaG93IjoiaGlkZSJdKCl9KTp0aGlzLmFuaW1hdGUoSygidG9nZ2xlIiwzKSxhLGIpO3JldHVybiB0aGlzfSxmYWRlVG86ZnVuY3Rpb24oYSxiLGQpe3JldHVybiB0aGlzLmZpbHRlcigiOmhpZGRlbiIpLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUoe29wYWNpdHk6Yn0sYSxkKX0sCmFuaW1hdGU6ZnVuY3Rpb24oYSxiLGQsZil7dmFyIGU9Yy5zcGVlZChiLGQsZik7aWYoYy5pc0VtcHR5T2JqZWN0KGEpKXJldHVybiB0aGlzLmVhY2goZS5jb21wbGV0ZSk7cmV0dXJuIHRoaXNbZS5xdWV1ZT09PWZhbHNlPyJlYWNoIjoicXVldWUiXShmdW5jdGlvbigpe3ZhciBqPWMuZXh0ZW5kKHt9LGUpLGksbz10aGlzLm5vZGVUeXBlPT09MSYmYyh0aGlzKS5pcygiOmhpZGRlbiIpLGs9dGhpcztmb3IoaSBpbiBhKXt2YXIgbj1pLnJlcGxhY2UoaWEsamEpO2lmKGkhPT1uKXthW25dPWFbaV07ZGVsZXRlIGFbaV07aT1ufWlmKGFbaV09PT0iaGlkZSImJm98fGFbaV09PT0ic2hvdyImJiFvKXJldHVybiBqLmNvbXBsZXRlLmNhbGwodGhpcyk7aWYoKGk9PT0iaGVpZ2h0Inx8aT09PSJ3aWR0aCIpJiZ0aGlzLnN0eWxlKXtqLmRpc3BsYXk9Yy5jc3ModGhpcywiZGlzcGxheSIpO2oub3ZlcmZsb3c9dGhpcy5zdHlsZS5vdmVyZmxvd31pZihjLmlzQXJyYXkoYVtpXSkpeyhqLnNwZWNpYWxFYXNpbmc9Cmouc3BlY2lhbEVhc2luZ3x8e30pW2ldPWFbaV1bMV07YVtpXT1hW2ldWzBdfX1pZihqLm92ZXJmbG93IT1udWxsKXRoaXMuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiI7ai5jdXJBbmltPWMuZXh0ZW5kKHt9LGEpO2MuZWFjaChhLGZ1bmN0aW9uKHIsdSl7dmFyIHo9bmV3IGMuZngoayxqLHIpO2lmKEFiLnRlc3QodSkpelt1PT09InRvZ2dsZSI/bz8ic2hvdyI6ImhpZGUiOnVdKGEpO2Vsc2V7dmFyIEM9QmIuZXhlYyh1KSxCPXouY3VyKHRydWUpfHwwO2lmKEMpe3U9cGFyc2VGbG9hdChDWzJdKTt2YXIgRT1DWzNdfHwicHgiO2lmKEUhPT0icHgiKXtrLnN0eWxlW3JdPSh1fHwxKStFO0I9KHV8fDEpL3ouY3VyKHRydWUpKkI7ay5zdHlsZVtyXT1CK0V9aWYoQ1sxXSl1PShDWzFdPT09Ii09Ij8tMToxKSp1K0I7ei5jdXN0b20oQix1LEUpfWVsc2Ugei5jdXN0b20oQix1LCIiKX19KTtyZXR1cm4gdHJ1ZX0pfSxzdG9wOmZ1bmN0aW9uKGEsYil7dmFyIGQ9Yy50aW1lcnM7YSYmdGhpcy5xdWV1ZShbXSk7CnRoaXMuZWFjaChmdW5jdGlvbigpe2Zvcih2YXIgZj1kLmxlbmd0aC0xO2Y+PTA7Zi0tKWlmKGRbZl0uZWxlbT09PXRoaXMpe2ImJmRbZl0odHJ1ZSk7ZC5zcGxpY2UoZiwxKX19KTtifHx0aGlzLmRlcXVldWUoKTtyZXR1cm4gdGhpc319KTtjLmVhY2goe3NsaWRlRG93bjpLKCJzaG93IiwxKSxzbGlkZVVwOksoImhpZGUiLDEpLHNsaWRlVG9nZ2xlOksoInRvZ2dsZSIsMSksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9fSxmdW5jdGlvbihhLGIpe2MuZm5bYV09ZnVuY3Rpb24oZCxmKXtyZXR1cm4gdGhpcy5hbmltYXRlKGIsZCxmKX19KTtjLmV4dGVuZCh7c3BlZWQ6ZnVuY3Rpb24oYSxiLGQpe3ZhciBmPWEmJnR5cGVvZiBhPT09Im9iamVjdCI/YTp7Y29tcGxldGU6ZHx8IWQmJmJ8fGMuaXNGdW5jdGlvbihhKSYmYSxkdXJhdGlvbjphLGVhc2luZzpkJiZifHxiJiYhYy5pc0Z1bmN0aW9uKGIpJiZifTtmLmR1cmF0aW9uPWMuZngub2ZmPzA6dHlwZW9mIGYuZHVyYXRpb249PT0KIm51bWJlciI/Zi5kdXJhdGlvbjpjLmZ4LnNwZWVkc1tmLmR1cmF0aW9uXXx8Yy5meC5zcGVlZHMuX2RlZmF1bHQ7Zi5vbGQ9Zi5jb21wbGV0ZTtmLmNvbXBsZXRlPWZ1bmN0aW9uKCl7Zi5xdWV1ZSE9PWZhbHNlJiZjKHRoaXMpLmRlcXVldWUoKTtjLmlzRnVuY3Rpb24oZi5vbGQpJiZmLm9sZC5jYWxsKHRoaXMpfTtyZXR1cm4gZn0sZWFzaW5nOntsaW5lYXI6ZnVuY3Rpb24oYSxiLGQsZil7cmV0dXJuIGQrZiphfSxzd2luZzpmdW5jdGlvbihhLGIsZCxmKXtyZXR1cm4oLU1hdGguY29zKGEqTWF0aC5QSSkvMiswLjUpKmYrZH19LHRpbWVyczpbXSxmeDpmdW5jdGlvbihhLGIsZCl7dGhpcy5vcHRpb25zPWI7dGhpcy5lbGVtPWE7dGhpcy5wcm9wPWQ7aWYoIWIub3JpZyliLm9yaWc9e319fSk7Yy5meC5wcm90b3R5cGU9e3VwZGF0ZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKTsoYy5meC5zdGVwW3RoaXMucHJvcF18fApjLmZ4LnN0ZXAuX2RlZmF1bHQpKHRoaXMpO2lmKCh0aGlzLnByb3A9PT0iaGVpZ2h0Inx8dGhpcy5wcm9wPT09IndpZHRoIikmJnRoaXMuZWxlbS5zdHlsZSl0aGlzLmVsZW0uc3R5bGUuZGlzcGxheT0iYmxvY2sifSxjdXI6ZnVuY3Rpb24oYSl7aWYodGhpcy5lbGVtW3RoaXMucHJvcF0hPW51bGwmJighdGhpcy5lbGVtLnN0eWxlfHx0aGlzLmVsZW0uc3R5bGVbdGhpcy5wcm9wXT09bnVsbCkpcmV0dXJuIHRoaXMuZWxlbVt0aGlzLnByb3BdO3JldHVybihhPXBhcnNlRmxvYXQoYy5jc3ModGhpcy5lbGVtLHRoaXMucHJvcCxhKSkpJiZhPi0xMDAwMD9hOnBhcnNlRmxvYXQoYy5jdXJDU1ModGhpcy5lbGVtLHRoaXMucHJvcCkpfHwwfSxjdXN0b206ZnVuY3Rpb24oYSxiLGQpe2Z1bmN0aW9uIGYoail7cmV0dXJuIGUuc3RlcChqKX10aGlzLnN0YXJ0VGltZT1KKCk7dGhpcy5zdGFydD1hO3RoaXMuZW5kPWI7dGhpcy51bml0PWR8fHRoaXMudW5pdHx8InB4Ijt0aGlzLm5vdz10aGlzLnN0YXJ0Owp0aGlzLnBvcz10aGlzLnN0YXRlPTA7dmFyIGU9dGhpcztmLmVsZW09dGhpcy5lbGVtO2lmKGYoKSYmYy50aW1lcnMucHVzaChmKSYmIVcpVz1zZXRJbnRlcnZhbChjLmZ4LnRpY2ssMTMpfSxzaG93OmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLm9yaWdbdGhpcy5wcm9wXT1jLnN0eWxlKHRoaXMuZWxlbSx0aGlzLnByb3ApO3RoaXMub3B0aW9ucy5zaG93PXRydWU7dGhpcy5jdXN0b20odGhpcy5wcm9wPT09IndpZHRoInx8dGhpcy5wcm9wPT09ImhlaWdodCI/MTowLHRoaXMuY3VyKCkpO2ModGhpcy5lbGVtKS5zaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMub3JpZ1t0aGlzLnByb3BdPWMuc3R5bGUodGhpcy5lbGVtLHRoaXMucHJvcCk7dGhpcy5vcHRpb25zLmhpZGU9dHJ1ZTt0aGlzLmN1c3RvbSh0aGlzLmN1cigpLDApfSxzdGVwOmZ1bmN0aW9uKGEpe3ZhciBiPUooKSxkPXRydWU7aWYoYXx8Yj49dGhpcy5vcHRpb25zLmR1cmF0aW9uK3RoaXMuc3RhcnRUaW1lKXt0aGlzLm5vdz0KdGhpcy5lbmQ7dGhpcy5wb3M9dGhpcy5zdGF0ZT0xO3RoaXMudXBkYXRlKCk7dGhpcy5vcHRpb25zLmN1ckFuaW1bdGhpcy5wcm9wXT10cnVlO2Zvcih2YXIgZiBpbiB0aGlzLm9wdGlvbnMuY3VyQW5pbSlpZih0aGlzLm9wdGlvbnMuY3VyQW5pbVtmXSE9PXRydWUpZD1mYWxzZTtpZihkKXtpZih0aGlzLm9wdGlvbnMuZGlzcGxheSE9bnVsbCl7dGhpcy5lbGVtLnN0eWxlLm92ZXJmbG93PXRoaXMub3B0aW9ucy5vdmVyZmxvdzthPWMuZGF0YSh0aGlzLmVsZW0sIm9sZGRpc3BsYXkiKTt0aGlzLmVsZW0uc3R5bGUuZGlzcGxheT1hP2E6dGhpcy5vcHRpb25zLmRpc3BsYXk7aWYoYy5jc3ModGhpcy5lbGVtLCJkaXNwbGF5Iik9PT0ibm9uZSIpdGhpcy5lbGVtLnN0eWxlLmRpc3BsYXk9ImJsb2NrIn10aGlzLm9wdGlvbnMuaGlkZSYmYyh0aGlzLmVsZW0pLmhpZGUoKTtpZih0aGlzLm9wdGlvbnMuaGlkZXx8dGhpcy5vcHRpb25zLnNob3cpZm9yKHZhciBlIGluIHRoaXMub3B0aW9ucy5jdXJBbmltKWMuc3R5bGUodGhpcy5lbGVtLAplLHRoaXMub3B0aW9ucy5vcmlnW2VdKTt0aGlzLm9wdGlvbnMuY29tcGxldGUuY2FsbCh0aGlzLmVsZW0pfXJldHVybiBmYWxzZX1lbHNle2U9Yi10aGlzLnN0YXJ0VGltZTt0aGlzLnN0YXRlPWUvdGhpcy5vcHRpb25zLmR1cmF0aW9uO2E9dGhpcy5vcHRpb25zLmVhc2luZ3x8KGMuZWFzaW5nLnN3aW5nPyJzd2luZyI6ImxpbmVhciIpO3RoaXMucG9zPWMuZWFzaW5nW3RoaXMub3B0aW9ucy5zcGVjaWFsRWFzaW5nJiZ0aGlzLm9wdGlvbnMuc3BlY2lhbEVhc2luZ1t0aGlzLnByb3BdfHxhXSh0aGlzLnN0YXRlLGUsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik7dGhpcy5ub3c9dGhpcy5zdGFydCsodGhpcy5lbmQtdGhpcy5zdGFydCkqdGhpcy5wb3M7dGhpcy51cGRhdGUoKX1yZXR1cm4gdHJ1ZX19O2MuZXh0ZW5kKGMuZngse3RpY2s6ZnVuY3Rpb24oKXtmb3IodmFyIGE9Yy50aW1lcnMsYj0wO2I8YS5sZW5ndGg7YisrKWFbYl0oKXx8YS5zcGxpY2UoYi0tLDEpO2EubGVuZ3RofHwKYy5meC5zdG9wKCl9LHN0b3A6ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKFcpO1c9bnVsbH0sc3BlZWRzOntzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LHN0ZXA6e29wYWNpdHk6ZnVuY3Rpb24oYSl7Yy5zdHlsZShhLmVsZW0sIm9wYWNpdHkiLGEubm93KX0sX2RlZmF1bHQ6ZnVuY3Rpb24oYSl7aWYoYS5lbGVtLnN0eWxlJiZhLmVsZW0uc3R5bGVbYS5wcm9wXSE9bnVsbClhLmVsZW0uc3R5bGVbYS5wcm9wXT0oYS5wcm9wPT09IndpZHRoInx8YS5wcm9wPT09ImhlaWdodCI/TWF0aC5tYXgoMCxhLm5vdyk6YS5ub3cpK2EudW5pdDtlbHNlIGEuZWxlbVthLnByb3BdPWEubm93fX19KTtpZihjLmV4cHImJmMuZXhwci5maWx0ZXJzKWMuZXhwci5maWx0ZXJzLmFuaW1hdGVkPWZ1bmN0aW9uKGEpe3JldHVybiBjLmdyZXAoYy50aW1lcnMsZnVuY3Rpb24oYil7cmV0dXJuIGE9PT1iLmVsZW19KS5sZW5ndGh9O2MuZm4ub2Zmc2V0PSJnZXRCb3VuZGluZ0NsaWVudFJlY3QiaW4gcy5kb2N1bWVudEVsZW1lbnQ/CmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF07aWYoYSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGUpe2Mub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsZSl9KTtpZighYnx8IWIub3duZXJEb2N1bWVudClyZXR1cm4gbnVsbDtpZihiPT09Yi5vd25lckRvY3VtZW50LmJvZHkpcmV0dXJuIGMub2Zmc2V0LmJvZHlPZmZzZXQoYik7dmFyIGQ9Yi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxmPWIub3duZXJEb2N1bWVudDtiPWYuYm9keTtmPWYuZG9jdW1lbnRFbGVtZW50O3JldHVybnt0b3A6ZC50b3ArKHNlbGYucGFnZVlPZmZzZXR8fGMuc3VwcG9ydC5ib3hNb2RlbCYmZi5zY3JvbGxUb3B8fGIuc2Nyb2xsVG9wKS0oZi5jbGllbnRUb3B8fGIuY2xpZW50VG9wfHwwKSxsZWZ0OmQubGVmdCsoc2VsZi5wYWdlWE9mZnNldHx8Yy5zdXBwb3J0LmJveE1vZGVsJiZmLnNjcm9sbExlZnR8fGIuc2Nyb2xsTGVmdCktKGYuY2xpZW50TGVmdHx8Yi5jbGllbnRMZWZ0fHwwKX19OmZ1bmN0aW9uKGEpe3ZhciBiPQp0aGlzWzBdO2lmKGEpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihyKXtjLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLHIpfSk7aWYoIWJ8fCFiLm93bmVyRG9jdW1lbnQpcmV0dXJuIG51bGw7aWYoYj09PWIub3duZXJEb2N1bWVudC5ib2R5KXJldHVybiBjLm9mZnNldC5ib2R5T2Zmc2V0KGIpO2Mub2Zmc2V0LmluaXRpYWxpemUoKTt2YXIgZD1iLm9mZnNldFBhcmVudCxmPWIsZT1iLm93bmVyRG9jdW1lbnQsaixpPWUuZG9jdW1lbnRFbGVtZW50LG89ZS5ib2R5O2Y9KGU9ZS5kZWZhdWx0Vmlldyk/ZS5nZXRDb21wdXRlZFN0eWxlKGIsbnVsbCk6Yi5jdXJyZW50U3R5bGU7Zm9yKHZhciBrPWIub2Zmc2V0VG9wLG49Yi5vZmZzZXRMZWZ0OyhiPWIucGFyZW50Tm9kZSkmJmIhPT1vJiZiIT09aTspe2lmKGMub2Zmc2V0LnN1cHBvcnRzRml4ZWRQb3NpdGlvbiYmZi5wb3NpdGlvbj09PSJmaXhlZCIpYnJlYWs7aj1lP2UuZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpOmIuY3VycmVudFN0eWxlOwprLT1iLnNjcm9sbFRvcDtuLT1iLnNjcm9sbExlZnQ7aWYoYj09PWQpe2srPWIub2Zmc2V0VG9wO24rPWIub2Zmc2V0TGVmdDtpZihjLm9mZnNldC5kb2VzTm90QWRkQm9yZGVyJiYhKGMub2Zmc2V0LmRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzJiYvXnQoYWJsZXxkfGgpJC9pLnRlc3QoYi5ub2RlTmFtZSkpKXtrKz1wYXJzZUZsb2F0KGouYm9yZGVyVG9wV2lkdGgpfHwwO24rPXBhcnNlRmxvYXQoai5ib3JkZXJMZWZ0V2lkdGgpfHwwfWY9ZDtkPWIub2Zmc2V0UGFyZW50fWlmKGMub2Zmc2V0LnN1YnRyYWN0c0JvcmRlckZvck92ZXJmbG93Tm90VmlzaWJsZSYmai5vdmVyZmxvdyE9PSJ2aXNpYmxlIil7ays9cGFyc2VGbG9hdChqLmJvcmRlclRvcFdpZHRoKXx8MDtuKz1wYXJzZUZsb2F0KGouYm9yZGVyTGVmdFdpZHRoKXx8MH1mPWp9aWYoZi5wb3NpdGlvbj09PSJyZWxhdGl2ZSJ8fGYucG9zaXRpb249PT0ic3RhdGljIil7ays9by5vZmZzZXRUb3A7bis9by5vZmZzZXRMZWZ0fWlmKGMub2Zmc2V0LnN1cHBvcnRzRml4ZWRQb3NpdGlvbiYmCmYucG9zaXRpb249PT0iZml4ZWQiKXtrKz1NYXRoLm1heChpLnNjcm9sbFRvcCxvLnNjcm9sbFRvcCk7bis9TWF0aC5tYXgoaS5zY3JvbGxMZWZ0LG8uc2Nyb2xsTGVmdCl9cmV0dXJue3RvcDprLGxlZnQ6bn19O2Mub2Zmc2V0PXtpbml0aWFsaXplOmZ1bmN0aW9uKCl7dmFyIGE9cy5ib2R5LGI9cy5jcmVhdGVFbGVtZW50KCJkaXYiKSxkLGYsZSxqPXBhcnNlRmxvYXQoYy5jdXJDU1MoYSwibWFyZ2luVG9wIix0cnVlKSl8fDA7Yy5leHRlbmQoYi5zdHlsZSx7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsbWFyZ2luOjAsYm9yZGVyOjAsd2lkdGg6IjFweCIsaGVpZ2h0OiIxcHgiLHZpc2liaWxpdHk6ImhpZGRlbiJ9KTtiLmlubmVySFRNTD0iPGRpdiBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO21hcmdpbjowO2JvcmRlcjo1cHggc29saWQgIzAwMDtwYWRkaW5nOjA7d2lkdGg6MXB4O2hlaWdodDoxcHg7Jz48ZGl2PjwvZGl2PjwvZGl2Pjx0YWJsZSBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO21hcmdpbjowO2JvcmRlcjo1cHggc29saWQgIzAwMDtwYWRkaW5nOjA7d2lkdGg6MXB4O2hlaWdodDoxcHg7JyBjZWxscGFkZGluZz0nMCcgY2VsbHNwYWNpbmc9JzAnPjx0cj48dGQ+PC90ZD48L3RyPjwvdGFibGU+IjsKYS5pbnNlcnRCZWZvcmUoYixhLmZpcnN0Q2hpbGQpO2Q9Yi5maXJzdENoaWxkO2Y9ZC5maXJzdENoaWxkO2U9ZC5uZXh0U2libGluZy5maXJzdENoaWxkLmZpcnN0Q2hpbGQ7dGhpcy5kb2VzTm90QWRkQm9yZGVyPWYub2Zmc2V0VG9wIT09NTt0aGlzLmRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzPWUub2Zmc2V0VG9wPT09NTtmLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCI7Zi5zdHlsZS50b3A9IjIwcHgiO3RoaXMuc3VwcG9ydHNGaXhlZFBvc2l0aW9uPWYub2Zmc2V0VG9wPT09MjB8fGYub2Zmc2V0VG9wPT09MTU7Zi5zdHlsZS5wb3NpdGlvbj1mLnN0eWxlLnRvcD0iIjtkLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iO2Quc3R5bGUucG9zaXRpb249InJlbGF0aXZlIjt0aGlzLnN1YnRyYWN0c0JvcmRlckZvck92ZXJmbG93Tm90VmlzaWJsZT1mLm9mZnNldFRvcD09PS01O3RoaXMuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQ9YS5vZmZzZXRUb3AhPT1qO2EucmVtb3ZlQ2hpbGQoYik7CmMub2Zmc2V0LmluaXRpYWxpemU9Yy5ub29wfSxib2R5T2Zmc2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEub2Zmc2V0VG9wLGQ9YS5vZmZzZXRMZWZ0O2Mub2Zmc2V0LmluaXRpYWxpemUoKTtpZihjLm9mZnNldC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCl7Yis9cGFyc2VGbG9hdChjLmN1ckNTUyhhLCJtYXJnaW5Ub3AiLHRydWUpKXx8MDtkKz1wYXJzZUZsb2F0KGMuY3VyQ1NTKGEsIm1hcmdpbkxlZnQiLHRydWUpKXx8MH1yZXR1cm57dG9wOmIsbGVmdDpkfX0sc2V0T2Zmc2V0OmZ1bmN0aW9uKGEsYixkKXtpZigvc3RhdGljLy50ZXN0KGMuY3VyQ1NTKGEsInBvc2l0aW9uIikpKWEuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIjt2YXIgZj1jKGEpLGU9Zi5vZmZzZXQoKSxqPXBhcnNlSW50KGMuY3VyQ1NTKGEsInRvcCIsdHJ1ZSksMTApfHwwLGk9cGFyc2VJbnQoYy5jdXJDU1MoYSwibGVmdCIsdHJ1ZSksMTApfHwwO2lmKGMuaXNGdW5jdGlvbihiKSliPWIuY2FsbChhLApkLGUpO2Q9e3RvcDpiLnRvcC1lLnRvcCtqLGxlZnQ6Yi5sZWZ0LWUubGVmdCtpfTsidXNpbmciaW4gYj9iLnVzaW5nLmNhbGwoYSxkKTpmLmNzcyhkKX19O2MuZm4uZXh0ZW5kKHtwb3NpdGlvbjpmdW5jdGlvbigpe2lmKCF0aGlzWzBdKXJldHVybiBudWxsO3ZhciBhPXRoaXNbMF0sYj10aGlzLm9mZnNldFBhcmVudCgpLGQ9dGhpcy5vZmZzZXQoKSxmPS9eYm9keXxodG1sJC9pLnRlc3QoYlswXS5ub2RlTmFtZSk/e3RvcDowLGxlZnQ6MH06Yi5vZmZzZXQoKTtkLnRvcC09cGFyc2VGbG9hdChjLmN1ckNTUyhhLCJtYXJnaW5Ub3AiLHRydWUpKXx8MDtkLmxlZnQtPXBhcnNlRmxvYXQoYy5jdXJDU1MoYSwibWFyZ2luTGVmdCIsdHJ1ZSkpfHwwO2YudG9wKz1wYXJzZUZsb2F0KGMuY3VyQ1NTKGJbMF0sImJvcmRlclRvcFdpZHRoIix0cnVlKSl8fDA7Zi5sZWZ0Kz1wYXJzZUZsb2F0KGMuY3VyQ1NTKGJbMF0sImJvcmRlckxlZnRXaWR0aCIsdHJ1ZSkpfHwwO3JldHVybnt0b3A6ZC50b3AtCmYudG9wLGxlZnQ6ZC5sZWZ0LWYubGVmdH19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLm9mZnNldFBhcmVudHx8cy5ib2R5O2EmJiEvXmJvZHl8aHRtbCQvaS50ZXN0KGEubm9kZU5hbWUpJiZjLmNzcyhhLCJwb3NpdGlvbiIpPT09InN0YXRpYyI7KWE9YS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGF9KX19KTtjLmVhY2goWyJMZWZ0IiwiVG9wIl0sZnVuY3Rpb24oYSxiKXt2YXIgZD0ic2Nyb2xsIitiO2MuZm5bZF09ZnVuY3Rpb24oZil7dmFyIGU9dGhpc1swXSxqO2lmKCFlKXJldHVybiBudWxsO2lmKGYhPT13KXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZihqPXdhKHRoaXMpKWouc2Nyb2xsVG8oIWE/ZjpjKGopLnNjcm9sbExlZnQoKSxhP2Y6YyhqKS5zY3JvbGxUb3AoKSk7ZWxzZSB0aGlzW2RdPWZ9KTtlbHNlIHJldHVybihqPXdhKGUpKT8icGFnZVhPZmZzZXQiaW4gaj9qW2E/InBhZ2VZT2Zmc2V0IjoKInBhZ2VYT2Zmc2V0Il06Yy5zdXBwb3J0LmJveE1vZGVsJiZqLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtkXXx8ai5kb2N1bWVudC5ib2R5W2RdOmVbZF19fSk7Yy5lYWNoKFsiSGVpZ2h0IiwiV2lkdGgiXSxmdW5jdGlvbihhLGIpe3ZhciBkPWIudG9Mb3dlckNhc2UoKTtjLmZuWyJpbm5lciIrYl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1swXT9jLmNzcyh0aGlzWzBdLGQsZmFsc2UsInBhZGRpbmciKTpudWxsfTtjLmZuWyJvdXRlciIrYl09ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXNbMF0/Yy5jc3ModGhpc1swXSxkLGZhbHNlLGY/Im1hcmdpbiI6ImJvcmRlciIpOm51bGx9O2MuZm5bZF09ZnVuY3Rpb24oZil7dmFyIGU9dGhpc1swXTtpZighZSlyZXR1cm4gZj09bnVsbD9udWxsOnRoaXM7aWYoYy5pc0Z1bmN0aW9uKGYpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oail7dmFyIGk9Yyh0aGlzKTtpW2RdKGYuY2FsbCh0aGlzLGosaVtkXSgpKSl9KTtyZXR1cm4ic2Nyb2xsVG8iaW4KZSYmZS5kb2N1bWVudD9lLmRvY3VtZW50LmNvbXBhdE1vZGU9PT0iQ1NTMUNvbXBhdCImJmUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK2JdfHxlLmRvY3VtZW50LmJvZHlbImNsaWVudCIrYl06ZS5ub2RlVHlwZT09PTk/TWF0aC5tYXgoZS5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrYl0sZS5ib2R5WyJzY3JvbGwiK2JdLGUuZG9jdW1lbnRFbGVtZW50WyJzY3JvbGwiK2JdLGUuYm9keVsib2Zmc2V0IitiXSxlLmRvY3VtZW50RWxlbWVudFsib2Zmc2V0IitiXSk6Zj09PXc/Yy5jc3MoZSxkKTp0aGlzLmNzcyhkLHR5cGVvZiBmPT09InN0cmluZyI/ZjpmKyJweCIpfX0pO0EualF1ZXJ5PUEuJD1jfSkod2luZG93KTsK]]></data>
	</file>
	<file>
	  <filename>/js/jq.ui.custom.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohDQogKiBqUXVlcnkgVUkgMS44DQogKg0KICogQ29weXJpZ2h0IChjKSAyMDEwIEFVVEhPUlMudHh0IChodHRwOi8vanF1ZXJ5dWkuY29tL2Fib3V0KQ0KICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIChNSVQtTElDRU5TRS50eHQpDQogKiBhbmQgR1BMIChHUEwtTElDRU5TRS50eHQpIGxpY2Vuc2VzLg0KICoNCiAqIGh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vVUkNCiAqLw0vKgogKiBqUXVlcnkgVUkgMS44CiAqCiAqIENvcHlyaWdodCAoYykgMjAxMCBBVVRIT1JTLnR4dCAoaHR0cDovL2pxdWVyeXVpLmNvbS9hYm91dCkKICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIChNSVQtTElDRU5TRS50eHQpCiAqIGFuZCBHUEwgKEdQTC1MSUNFTlNFLnR4dCkgbGljZW5zZXMuCiAqCiAqIGh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vVUkKICovCmpRdWVyeS51aXx8KGZ1bmN0aW9uKGEpe2EudWk9e3ZlcnNpb246IjEuOCIscGx1Z2luOnthZGQ6ZnVuY3Rpb24oYyxkLGYpe3ZhciBlPWEudWlbY10ucHJvdG90eXBlO2Zvcih2YXIgYiBpbiBmKXtlLnBsdWdpbnNbYl09ZS5wbHVnaW5zW2JdfHxbXTtlLnBsdWdpbnNbYl0ucHVzaChbZCxmW2JdXSl9fSxjYWxsOmZ1bmN0aW9uKGIsZCxjKXt2YXIgZj1iLnBsdWdpbnNbZF07aWYoIWZ8fCFiLmVsZW1lbnRbMF0ucGFyZW50Tm9kZSl7cmV0dXJufWZvcih2YXIgZT0wO2U8Zi5sZW5ndGg7ZSsrKXtpZihiLm9wdGlvbnNbZltlXVswXV0pe2ZbZV1bMV0uYXBwbHkoYi5lbGVtZW50LGMpfX19fSxjb250YWluczpmdW5jdGlvbihkLGMpe3JldHVybiBkb2N1bWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9kLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGMpJjE2OmQhPT1jJiZkLmNvbnRhaW5zKGMpfSxoYXNTY3JvbGw6ZnVuY3Rpb24oZSxjKXtpZihhKGUpLmNzcygib3ZlcmZsb3ciKT09ImhpZGRlbiIpe3JldHVybiBmYWxzZX12YXIgYj0oYyYmYz09ImxlZnQiKT8ic2Nyb2xsTGVmdCI6InNjcm9sbFRvcCIsZD1mYWxzZTtpZihlW2JdPjApe3JldHVybiB0cnVlfWVbYl09MTtkPShlW2JdPjApO2VbYl09MDtyZXR1cm4gZH0saXNPdmVyQXhpczpmdW5jdGlvbihjLGIsZCl7cmV0dXJuKGM+YikmJihjPChiK2QpKX0saXNPdmVyOmZ1bmN0aW9uKGcsYyxmLGUsYixkKXtyZXR1cm4gYS51aS5pc092ZXJBeGlzKGcsZixiKSYmYS51aS5pc092ZXJBeGlzKGMsZSxkKX0sa2V5Q29kZTp7QkFDS1NQQUNFOjgsQ0FQU19MT0NLOjIwLENPTU1BOjE4OCxDT05UUk9MOjE3LERFTEVURTo0NixET1dOOjQwLEVORDozNSxFTlRFUjoxMyxFU0NBUEU6MjcsSE9NRTozNixJTlNFUlQ6NDUsTEVGVDozNyxOVU1QQURfQUREOjEwNyxOVU1QQURfREVDSU1BTDoxMTAsTlVNUEFEX0RJVklERToxMTEsTlVNUEFEX0VOVEVSOjEwOCxOVU1QQURfTVVMVElQTFk6MTA2LE5VTVBBRF9TVUJUUkFDVDoxMDksUEFHRV9ET1dOOjM0LFBBR0VfVVA6MzMsUEVSSU9EOjE5MCxSSUdIVDozOSxTSElGVDoxNixTUEFDRTozMixUQUI6OSxVUDozOH19O2EuZm4uZXh0ZW5kKHtfZm9jdXM6YS5mbi5mb2N1cyxmb2N1czpmdW5jdGlvbihiLGMpe3JldHVybiB0eXBlb2YgYj09PSJudW1iZXIiP3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPXRoaXM7c2V0VGltZW91dChmdW5jdGlvbigpe2EoZCkuZm9jdXMoKTsoYyYmYy5jYWxsKGQpKX0sYil9KTp0aGlzLl9mb2N1cy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGVuYWJsZVNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmF0dHIoInVuc2VsZWN0YWJsZSIsIm9mZiIpLmNzcygiTW96VXNlclNlbGVjdCIsIiIpLnVuYmluZCgic2VsZWN0c3RhcnQudWkiKX0sZGlzYWJsZVNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmF0dHIoInVuc2VsZWN0YWJsZSIsIm9uIikuY3NzKCJNb3pVc2VyU2VsZWN0Iiwibm9uZSIpLmJpbmQoInNlbGVjdHN0YXJ0LnVpIixmdW5jdGlvbigpe3JldHVybiBmYWxzZX0pfSxzY3JvbGxQYXJlbnQ6ZnVuY3Rpb24oKXt2YXIgYjtpZigoYS5icm93c2VyLm1zaWUmJigvKHN0YXRpY3xyZWxhdGl2ZSkvKS50ZXN0KHRoaXMuY3NzKCJwb3NpdGlvbiIpKSl8fCgvYWJzb2x1dGUvKS50ZXN0KHRoaXMuY3NzKCJwb3NpdGlvbiIpKSl7Yj10aGlzLnBhcmVudHMoKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4oLyhyZWxhdGl2ZXxhYnNvbHV0ZXxmaXhlZCkvKS50ZXN0KGEuY3VyQ1NTKHRoaXMsInBvc2l0aW9uIiwxKSkmJigvKGF1dG98c2Nyb2xsKS8pLnRlc3QoYS5jdXJDU1ModGhpcywib3ZlcmZsb3ciLDEpK2EuY3VyQ1NTKHRoaXMsIm92ZXJmbG93LXkiLDEpK2EuY3VyQ1NTKHRoaXMsIm92ZXJmbG93LXgiLDEpKX0pLmVxKDApfWVsc2V7Yj10aGlzLnBhcmVudHMoKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4oLyhhdXRvfHNjcm9sbCkvKS50ZXN0KGEuY3VyQ1NTKHRoaXMsIm92ZXJmbG93IiwxKSthLmN1ckNTUyh0aGlzLCJvdmVyZmxvdy15IiwxKSthLmN1ckNTUyh0aGlzLCJvdmVyZmxvdy14IiwxKSl9KS5lcSgwKX1yZXR1cm4oL2ZpeGVkLykudGVzdCh0aGlzLmNzcygicG9zaXRpb24iKSl8fCFiLmxlbmd0aD9hKGRvY3VtZW50KTpifSx6SW5kZXg6ZnVuY3Rpb24oZSl7aWYoZSE9PXVuZGVmaW5lZCl7cmV0dXJuIHRoaXMuY3NzKCJ6SW5kZXgiLGUpfWlmKHRoaXMubGVuZ3RoKXt2YXIgYz1hKHRoaXNbMF0pLGIsZDt3aGlsZShjLmxlbmd0aCYmY1swXSE9PWRvY3VtZW50KXtiPWMuY3NzKCJwb3NpdGlvbiIpO2lmKGI9PSJhYnNvbHV0ZSJ8fGI9PSJyZWxhdGl2ZSJ8fGI9PSJmaXhlZCIpe2Q9cGFyc2VJbnQoYy5jc3MoInpJbmRleCIpKTtpZighaXNOYU4oZCkmJmQhPTApe3JldHVybiBkfX1jPWMucGFyZW50KCl9fXJldHVybiAwfX0pO2EuZXh0ZW5kKGEuZXhwclsiOiJdLHtkYXRhOmZ1bmN0aW9uKGQsYyxiKXtyZXR1cm4gISFhLmRhdGEoZCxiWzNdKX0sZm9jdXNhYmxlOmZ1bmN0aW9uKGMpe3ZhciBkPWMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxiPWEuYXR0cihjLCJ0YWJpbmRleCIpO3JldHVybigvaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbnxvYmplY3QvLnRlc3QoZCk/IWMuZGlzYWJsZWQ6ImEiPT1kfHwiYXJlYSI9PWQ/Yy5ocmVmfHwhaXNOYU4oYik6IWlzTmFOKGIpKSYmIWEoYylbImFyZWEiPT1kPyJwYXJlbnRzIjoiY2xvc2VzdCJdKCI6aGlkZGVuIikubGVuZ3RofSx0YWJiYWJsZTpmdW5jdGlvbihjKXt2YXIgYj1hLmF0dHIoYywidGFiaW5kZXgiKTtyZXR1cm4oaXNOYU4oYil8fGI+PTApJiZhKGMpLmlzKCI6Zm9jdXNhYmxlIil9fSl9KShqUXVlcnkpOzsvKiENCiAqIGpRdWVyeSBVSSBXaWRnZXQgMS44DQogKg0KICogQ29weXJpZ2h0IChjKSAyMDEwIEFVVEhPUlMudHh0IChodHRwOi8vanF1ZXJ5dWkuY29tL2Fib3V0KQ0KICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIChNSVQtTElDRU5TRS50eHQpDQogKiBhbmQgR1BMIChHUEwtTElDRU5TRS50eHQpIGxpY2Vuc2VzLg0KICoNCiAqIGh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vVUkvV2lkZ2V0DQogKi8NLyoKICogalF1ZXJ5IFVJIFdpZGdldCAxLjgKICoKICogQ29weXJpZ2h0IChjKSAyMDEwIEFVVEhPUlMudHh0IChodHRwOi8vanF1ZXJ5dWkuY29tL2Fib3V0KQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgKE1JVC1MSUNFTlNFLnR4dCkKICogYW5kIEdQTCAoR1BMLUxJQ0VOU0UudHh0KSBsaWNlbnNlcy4KICoKICogaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9VSS9XaWRnZXQKICovCihmdW5jdGlvbihiKXt2YXIgYT1iLmZuLnJlbW92ZTtiLmZuLnJlbW92ZT1mdW5jdGlvbihjLGQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZighZCl7aWYoIWN8fGIuZmlsdGVyKGMsW3RoaXNdKS5sZW5ndGgpe2IoIioiLHRoaXMpLmFkZCh0aGlzKS5lYWNoKGZ1bmN0aW9uKCl7Yih0aGlzKS50cmlnZ2VySGFuZGxlcigicmVtb3ZlIil9KX19cmV0dXJuIGEuY2FsbChiKHRoaXMpLGMsZCl9KX07Yi53aWRnZXQ9ZnVuY3Rpb24oZCxmLGMpe3ZhciBlPWQuc3BsaXQoIi4iKVswXSxoO2Q9ZC5zcGxpdCgiLiIpWzFdO2g9ZSsiLSIrZDtpZighYyl7Yz1mO2Y9Yi5XaWRnZXR9Yi5leHByWyI6Il1baF09ZnVuY3Rpb24oaSl7cmV0dXJuICEhYi5kYXRhKGksZCl9O2JbZV09YltlXXx8e307YltlXVtkXT1mdW5jdGlvbihpLGope2lmKGFyZ3VtZW50cy5sZW5ndGgpe3RoaXMuX2NyZWF0ZVdpZGdldChpLGopfX07dmFyIGc9bmV3IGYoKTtnLm9wdGlvbnM9Yi5leHRlbmQoe30sZy5vcHRpb25zKTtiW2VdW2RdLnByb3RvdHlwZT1iLmV4dGVuZCh0cnVlLGcse25hbWVzcGFjZTplLHdpZGdldE5hbWU6ZCx3aWRnZXRFdmVudFByZWZpeDpiW2VdW2RdLnByb3RvdHlwZS53aWRnZXRFdmVudFByZWZpeHx8ZCx3aWRnZXRCYXNlQ2xhc3M6aH0sYyk7Yi53aWRnZXQuYnJpZGdlKGQsYltlXVtkXSl9O2Iud2lkZ2V0LmJyaWRnZT1mdW5jdGlvbihkLGMpe2IuZm5bZF09ZnVuY3Rpb24oZyl7dmFyIGU9dHlwZW9mIGc9PT0ic3RyaW5nIixmPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxoPXRoaXM7Zz0hZSYmZi5sZW5ndGg/Yi5leHRlbmQuYXBwbHkobnVsbCxbdHJ1ZSxnXS5jb25jYXQoZikpOmc7aWYoZSYmZy5zdWJzdHJpbmcoMCwxKT09PSJfIil7cmV0dXJuIGh9aWYoZSl7dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9Yi5kYXRhKHRoaXMsZCksaj1pJiZiLmlzRnVuY3Rpb24oaVtnXSk/aVtnXS5hcHBseShpLGYpOmk7aWYoaiE9PWkmJmohPT11bmRlZmluZWQpe2g9ajtyZXR1cm4gZmFsc2V9fSl9ZWxzZXt0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1iLmRhdGEodGhpcyxkKTtpZihpKXtpZihnKXtpLm9wdGlvbihnKX1pLl9pbml0KCl9ZWxzZXtiLmRhdGEodGhpcyxkLG5ldyBjKGcsdGhpcykpfX0pfXJldHVybiBofX07Yi5XaWRnZXQ9ZnVuY3Rpb24oYyxkKXtpZihhcmd1bWVudHMubGVuZ3RoKXt0aGlzLl9jcmVhdGVXaWRnZXQoYyxkKX19O2IuV2lkZ2V0LnByb3RvdHlwZT17d2lkZ2V0TmFtZToid2lkZ2V0Iix3aWRnZXRFdmVudFByZWZpeDoiIixvcHRpb25zOntkaXNhYmxlZDpmYWxzZX0sX2NyZWF0ZVdpZGdldDpmdW5jdGlvbihkLGUpe3RoaXMuZWxlbWVudD1iKGUpLmRhdGEodGhpcy53aWRnZXROYW1lLHRoaXMpO3RoaXMub3B0aW9ucz1iLmV4dGVuZCh0cnVlLHt9LHRoaXMub3B0aW9ucyxiLm1ldGFkYXRhJiZiLm1ldGFkYXRhLmdldChlKVt0aGlzLndpZGdldE5hbWVdLGQpO3ZhciBjPXRoaXM7dGhpcy5lbGVtZW50LmJpbmQoInJlbW92ZS4iK3RoaXMud2lkZ2V0TmFtZSxmdW5jdGlvbigpe2MuZGVzdHJveSgpfSk7dGhpcy5fY3JlYXRlKCk7dGhpcy5faW5pdCgpfSxfY3JlYXRlOmZ1bmN0aW9uKCl7fSxfaW5pdDpmdW5jdGlvbigpe30sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC51bmJpbmQoIi4iK3RoaXMud2lkZ2V0TmFtZSkucmVtb3ZlRGF0YSh0aGlzLndpZGdldE5hbWUpO3RoaXMud2lkZ2V0KCkudW5iaW5kKCIuIit0aGlzLndpZGdldE5hbWUpLnJlbW92ZUF0dHIoImFyaWEtZGlzYWJsZWQiKS5yZW1vdmVDbGFzcyh0aGlzLndpZGdldEJhc2VDbGFzcysiLWRpc2FibGVkICIrdGhpcy5uYW1lc3BhY2UrIi1zdGF0ZS1kaXNhYmxlZCIpfSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50fSxvcHRpb246ZnVuY3Rpb24oZSxmKXt2YXIgZD1lLGM9dGhpcztpZihhcmd1bWVudHMubGVuZ3RoPT09MCl7cmV0dXJuIGIuZXh0ZW5kKHt9LGMub3B0aW9ucyl9aWYodHlwZW9mIGU9PT0ic3RyaW5nIil7aWYoZj09PXVuZGVmaW5lZCl7cmV0dXJuIHRoaXMub3B0aW9uc1tlXX1kPXt9O2RbZV09Zn1iLmVhY2goZCxmdW5jdGlvbihnLGgpe2MuX3NldE9wdGlvbihnLGgpfSk7cmV0dXJuIGN9LF9zZXRPcHRpb246ZnVuY3Rpb24oYyxkKXt0aGlzLm9wdGlvbnNbY109ZDtpZihjPT09ImRpc2FibGVkIil7dGhpcy53aWRnZXQoKVtkPyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0odGhpcy53aWRnZXRCYXNlQ2xhc3MrIi1kaXNhYmxlZCAiK3RoaXMubmFtZXNwYWNlKyItc3RhdGUtZGlzYWJsZWQiKS5hdHRyKCJhcmlhLWRpc2FibGVkIixkKX1yZXR1cm4gdGhpc30sZW5hYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NldE9wdGlvbigiZGlzYWJsZWQiLGZhbHNlKX0sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZXRPcHRpb24oImRpc2FibGVkIix0cnVlKX0sX3RyaWdnZXI6ZnVuY3Rpb24oZCxlLGYpe3ZhciBoPXRoaXMub3B0aW9uc1tkXTtlPWIuRXZlbnQoZSk7ZS50eXBlPShkPT09dGhpcy53aWRnZXRFdmVudFByZWZpeD9kOnRoaXMud2lkZ2V0RXZlbnRQcmVmaXgrZCkudG9Mb3dlckNhc2UoKTtmPWZ8fHt9O2lmKGUub3JpZ2luYWxFdmVudCl7Zm9yKHZhciBjPWIuZXZlbnQucHJvcHMubGVuZ3RoLGc7Yzspe2c9Yi5ldmVudC5wcm9wc1stLWNdO2VbZ109ZS5vcmlnaW5hbEV2ZW50W2ddfX10aGlzLmVsZW1lbnQudHJpZ2dlcihlLGYpO3JldHVybiAhKGIuaXNGdW5jdGlvbihoKSYmaC5jYWxsKHRoaXMuZWxlbWVudFswXSxlLGYpPT09ZmFsc2V8fGUuaXNEZWZhdWx0UHJldmVudGVkKCkpfX19KShqUXVlcnkpOzsvKiENCiAqIGpRdWVyeSBVSSBNb3VzZSAxLjgNCiAqDQogKiBDb3B5cmlnaHQgKGMpIDIwMTAgQVVUSE9SUy50eHQgKGh0dHA6Ly9qcXVlcnl1aS5jb20vYWJvdXQpDQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgKE1JVC1MSUNFTlNFLnR4dCkNCiAqIGFuZCBHUEwgKEdQTC1MSUNFTlNFLnR4dCkgbGljZW5zZXMuDQogKg0KICogaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9VSS9Nb3VzZQ0KICoNCiAqIERlcGVuZHM6DQogKglqcXVlcnkudWkud2lkZ2V0LmpzDQogKi8NLyoKICogalF1ZXJ5IFVJIE1vdXNlIDEuOAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTAgQVVUSE9SUy50eHQgKGh0dHA6Ly9qcXVlcnl1aS5jb20vYWJvdXQpCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCAoTUlULUxJQ0VOU0UudHh0KQogKiBhbmQgR1BMIChHUEwtTElDRU5TRS50eHQpIGxpY2Vuc2VzLgogKgogKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1VJL01vdXNlCiAqCiAqIERlcGVuZHM6CiAqCWpxdWVyeS51aS53aWRnZXQuanMKICovCihmdW5jdGlvbihhKXthLndpZGdldCgidWkubW91c2UiLHtvcHRpb25zOntjYW5jZWw6IjppbnB1dCxvcHRpb24iLGRpc3RhbmNlOjEsZGVsYXk6MH0sX21vdXNlSW5pdDpmdW5jdGlvbigpe3ZhciBiPXRoaXM7dGhpcy5lbGVtZW50LmJpbmQoIm1vdXNlZG93bi4iK3RoaXMud2lkZ2V0TmFtZSxmdW5jdGlvbihjKXtyZXR1cm4gYi5fbW91c2VEb3duKGMpfSkuYmluZCgiY2xpY2suIit0aGlzLndpZGdldE5hbWUsZnVuY3Rpb24oYyl7aWYoYi5fcHJldmVudENsaWNrRXZlbnQpe2IuX3ByZXZlbnRDbGlja0V2ZW50PWZhbHNlO2Muc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7cmV0dXJuIGZhbHNlfX0pO3RoaXMuc3RhcnRlZD1mYWxzZX0sX21vdXNlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC51bmJpbmQoIi4iK3RoaXMud2lkZ2V0TmFtZSl9LF9tb3VzZURvd246ZnVuY3Rpb24oZCl7ZC5vcmlnaW5hbEV2ZW50PWQub3JpZ2luYWxFdmVudHx8e307aWYoZC5vcmlnaW5hbEV2ZW50Lm1vdXNlSGFuZGxlZCl7cmV0dXJufSh0aGlzLl9tb3VzZVN0YXJ0ZWQmJnRoaXMuX21vdXNlVXAoZCkpO3RoaXMuX21vdXNlRG93bkV2ZW50PWQ7dmFyIGM9dGhpcyxlPShkLndoaWNoPT0xKSxiPSh0eXBlb2YgdGhpcy5vcHRpb25zLmNhbmNlbD09InN0cmluZyI/YShkLnRhcmdldCkucGFyZW50cygpLmFkZChkLnRhcmdldCkuZmlsdGVyKHRoaXMub3B0aW9ucy5jYW5jZWwpLmxlbmd0aDpmYWxzZSk7aWYoIWV8fGJ8fCF0aGlzLl9tb3VzZUNhcHR1cmUoZCkpe3JldHVybiB0cnVlfXRoaXMubW91c2VEZWxheU1ldD0hdGhpcy5vcHRpb25zLmRlbGF5O2lmKCF0aGlzLm1vdXNlRGVsYXlNZXQpe3RoaXMuX21vdXNlRGVsYXlUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yy5tb3VzZURlbGF5TWV0PXRydWV9LHRoaXMub3B0aW9ucy5kZWxheSl9aWYodGhpcy5fbW91c2VEaXN0YW5jZU1ldChkKSYmdGhpcy5fbW91c2VEZWxheU1ldChkKSl7dGhpcy5fbW91c2VTdGFydGVkPSh0aGlzLl9tb3VzZVN0YXJ0KGQpIT09ZmFsc2UpO2lmKCF0aGlzLl9tb3VzZVN0YXJ0ZWQpe2QucHJldmVudERlZmF1bHQoKTtyZXR1cm4gdHJ1ZX19dGhpcy5fbW91c2VNb3ZlRGVsZWdhdGU9ZnVuY3Rpb24oZil7cmV0dXJuIGMuX21vdXNlTW92ZShmKX07dGhpcy5fbW91c2VVcERlbGVnYXRlPWZ1bmN0aW9uKGYpe3JldHVybiBjLl9tb3VzZVVwKGYpfTthKGRvY3VtZW50KS5iaW5kKCJtb3VzZW1vdmUuIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUpLmJpbmQoIm1vdXNldXAuIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VVcERlbGVnYXRlKTsoYS5icm93c2VyLnNhZmFyaXx8ZC5wcmV2ZW50RGVmYXVsdCgpKTtkLm9yaWdpbmFsRXZlbnQubW91c2VIYW5kbGVkPXRydWU7cmV0dXJuIHRydWV9LF9tb3VzZU1vdmU6ZnVuY3Rpb24oYil7aWYoYS5icm93c2VyLm1zaWUmJiFiLmJ1dHRvbil7cmV0dXJuIHRoaXMuX21vdXNlVXAoYil9aWYodGhpcy5fbW91c2VTdGFydGVkKXt0aGlzLl9tb3VzZURyYWcoYik7cmV0dXJuIGIucHJldmVudERlZmF1bHQoKX1pZih0aGlzLl9tb3VzZURpc3RhbmNlTWV0KGIpJiZ0aGlzLl9tb3VzZURlbGF5TWV0KGIpKXt0aGlzLl9tb3VzZVN0YXJ0ZWQ9KHRoaXMuX21vdXNlU3RhcnQodGhpcy5fbW91c2VEb3duRXZlbnQsYikhPT1mYWxzZSk7KHRoaXMuX21vdXNlU3RhcnRlZD90aGlzLl9tb3VzZURyYWcoYik6dGhpcy5fbW91c2VVcChiKSl9cmV0dXJuICF0aGlzLl9tb3VzZVN0YXJ0ZWR9LF9tb3VzZVVwOmZ1bmN0aW9uKGIpe2EoZG9jdW1lbnQpLnVuYmluZCgibW91c2Vtb3ZlLiIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlTW92ZURlbGVnYXRlKS51bmJpbmQoIm1vdXNldXAuIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VVcERlbGVnYXRlKTtpZih0aGlzLl9tb3VzZVN0YXJ0ZWQpe3RoaXMuX21vdXNlU3RhcnRlZD1mYWxzZTt0aGlzLl9wcmV2ZW50Q2xpY2tFdmVudD0oYi50YXJnZXQ9PXRoaXMuX21vdXNlRG93bkV2ZW50LnRhcmdldCk7dGhpcy5fbW91c2VTdG9wKGIpfXJldHVybiBmYWxzZX0sX21vdXNlRGlzdGFuY2VNZXQ6ZnVuY3Rpb24oYil7cmV0dXJuKE1hdGgubWF4KE1hdGguYWJzKHRoaXMuX21vdXNlRG93bkV2ZW50LnBhZ2VYLWIucGFnZVgpLE1hdGguYWJzKHRoaXMuX21vdXNlRG93bkV2ZW50LnBhZ2VZLWIucGFnZVkpKT49dGhpcy5vcHRpb25zLmRpc3RhbmNlKX0sX21vdXNlRGVsYXlNZXQ6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubW91c2VEZWxheU1ldH0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oYil7fSxfbW91c2VEcmFnOmZ1bmN0aW9uKGIpe30sX21vdXNlU3RvcDpmdW5jdGlvbihiKXt9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24oYil7cmV0dXJuIHRydWV9fSl9KShqUXVlcnkpOzsvKg0KICogalF1ZXJ5IFVJIFNvcnRhYmxlIDEuOA0KICoNCiAqIENvcHlyaWdodCAoYykgMjAxMCBBVVRIT1JTLnR4dCAoaHR0cDovL2pxdWVyeXVpLmNvbS9hYm91dCkNCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCAoTUlULUxJQ0VOU0UudHh0KQ0KICogYW5kIEdQTCAoR1BMLUxJQ0VOU0UudHh0KSBsaWNlbnNlcy4NCiAqDQogKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1VJL1NvcnRhYmxlcw0KICoNCiAqIERlcGVuZHM6DQogKglqcXVlcnkudWkuY29yZS5qcw0KICoJanF1ZXJ5LnVpLm1vdXNlLmpzDQogKglqcXVlcnkudWkud2lkZ2V0LmpzDQogKi8NKGZ1bmN0aW9uKGEpe2Eud2lkZ2V0KCJ1aS5zb3J0YWJsZSIsYS51aS5tb3VzZSx7d2lkZ2V0RXZlbnRQcmVmaXg6InNvcnQiLG9wdGlvbnM6e2FwcGVuZFRvOiJwYXJlbnQiLGF4aXM6ZmFsc2UsY29ubmVjdFdpdGg6ZmFsc2UsY29udGFpbm1lbnQ6ZmFsc2UsY3Vyc29yOiJhdXRvIixjdXJzb3JBdDpmYWxzZSxkcm9wT25FbXB0eTp0cnVlLGZvcmNlUGxhY2Vob2xkZXJTaXplOmZhbHNlLGZvcmNlSGVscGVyU2l6ZTpmYWxzZSxncmlkOmZhbHNlLGhhbmRsZTpmYWxzZSxoZWxwZXI6Im9yaWdpbmFsIixpdGVtczoiPiAqIixvcGFjaXR5OmZhbHNlLHBsYWNlaG9sZGVyOmZhbHNlLHJldmVydDpmYWxzZSxzY3JvbGw6dHJ1ZSxzY3JvbGxTZW5zaXRpdml0eToyMCxzY3JvbGxTcGVlZDoyMCxzY29wZToiZGVmYXVsdCIsdG9sZXJhbmNlOiJpbnRlcnNlY3QiLHpJbmRleDoxMDAwfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5vcHRpb25zO3RoaXMuY29udGFpbmVyQ2FjaGU9e307dGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1zb3J0YWJsZSIpO3RoaXMucmVmcmVzaCgpO3RoaXMuZmxvYXRpbmc9dGhpcy5pdGVtcy5sZW5ndGg/KC9sZWZ0fHJpZ2h0LykudGVzdCh0aGlzLml0ZW1zWzBdLml0ZW0uY3NzKCJmbG9hdCIpKTpmYWxzZTt0aGlzLm9mZnNldD10aGlzLmVsZW1lbnQub2Zmc2V0KCk7dGhpcy5fbW91c2VJbml0KCl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNvcnRhYmxlIHVpLXNvcnRhYmxlLWRpc2FibGVkIikucmVtb3ZlRGF0YSgic29ydGFibGUiKS51bmJpbmQoIi5zb3J0YWJsZSIpO3RoaXMuX21vdXNlRGVzdHJveSgpO2Zvcih2YXIgYj10aGlzLml0ZW1zLmxlbmd0aC0xO2I+PTA7Yi0tKXt0aGlzLml0ZW1zW2JdLml0ZW0ucmVtb3ZlRGF0YSgic29ydGFibGUtaXRlbSIpfXJldHVybiB0aGlzfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKGUsZil7aWYodGhpcy5yZXZlcnRpbmcpe3JldHVybiBmYWxzZX1pZih0aGlzLm9wdGlvbnMuZGlzYWJsZWR8fHRoaXMub3B0aW9ucy50eXBlPT0ic3RhdGljIil7cmV0dXJuIGZhbHNlfXRoaXMuX3JlZnJlc2hJdGVtcyhlKTt2YXIgZD1udWxsLGM9dGhpcyxiPWEoZS50YXJnZXQpLnBhcmVudHMoKS5lYWNoKGZ1bmN0aW9uKCl7aWYoYS5kYXRhKHRoaXMsInNvcnRhYmxlLWl0ZW0iKT09Yyl7ZD1hKHRoaXMpO3JldHVybiBmYWxzZX19KTtpZihhLmRhdGEoZS50YXJnZXQsInNvcnRhYmxlLWl0ZW0iKT09Yyl7ZD1hKGUudGFyZ2V0KX1pZighZCl7cmV0dXJuIGZhbHNlfWlmKHRoaXMub3B0aW9ucy5oYW5kbGUmJiFmKXt2YXIgZz1mYWxzZTthKHRoaXMub3B0aW9ucy5oYW5kbGUsZCkuZmluZCgiKiIpLmFuZFNlbGYoKS5lYWNoKGZ1bmN0aW9uKCl7aWYodGhpcz09ZS50YXJnZXQpe2c9dHJ1ZX19KTtpZighZyl7cmV0dXJuIGZhbHNlfX10aGlzLmN1cnJlbnRJdGVtPWQ7dGhpcy5fcmVtb3ZlQ3VycmVudHNGcm9tSXRlbXMoKTtyZXR1cm4gdHJ1ZX0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oZSxmLGIpe3ZhciBnPXRoaXMub3B0aW9ucyxjPXRoaXM7dGhpcy5jdXJyZW50Q29udGFpbmVyPXRoaXM7dGhpcy5yZWZyZXNoUG9zaXRpb25zKCk7dGhpcy5oZWxwZXI9dGhpcy5fY3JlYXRlSGVscGVyKGUpO3RoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKTt0aGlzLl9jYWNoZU1hcmdpbnMoKTt0aGlzLnNjcm9sbFBhcmVudD10aGlzLmhlbHBlci5zY3JvbGxQYXJlbnQoKTt0aGlzLm9mZnNldD10aGlzLmN1cnJlbnRJdGVtLm9mZnNldCgpO3RoaXMub2Zmc2V0PXt0b3A6dGhpcy5vZmZzZXQudG9wLXRoaXMubWFyZ2lucy50b3AsbGVmdDp0aGlzLm9mZnNldC5sZWZ0LXRoaXMubWFyZ2lucy5sZWZ0fTt0aGlzLmhlbHBlci5jc3MoInBvc2l0aW9uIiwiYWJzb2x1dGUiKTt0aGlzLmNzc1Bvc2l0aW9uPXRoaXMuaGVscGVyLmNzcygicG9zaXRpb24iKTthLmV4dGVuZCh0aGlzLm9mZnNldCx7Y2xpY2s6e2xlZnQ6ZS5wYWdlWC10aGlzLm9mZnNldC5sZWZ0LHRvcDplLnBhZ2VZLXRoaXMub2Zmc2V0LnRvcH0scGFyZW50OnRoaXMuX2dldFBhcmVudE9mZnNldCgpLHJlbGF0aXZlOnRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCl9KTt0aGlzLm9yaWdpbmFsUG9zaXRpb249dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbihlKTt0aGlzLm9yaWdpbmFsUGFnZVg9ZS5wYWdlWDt0aGlzLm9yaWdpbmFsUGFnZVk9ZS5wYWdlWTsoZy5jdXJzb3JBdCYmdGhpcy5fYWRqdXN0T2Zmc2V0RnJvbUhlbHBlcihnLmN1cnNvckF0KSk7dGhpcy5kb21Qb3NpdGlvbj17cHJldjp0aGlzLmN1cnJlbnRJdGVtLnByZXYoKVswXSxwYXJlbnQ6dGhpcy5jdXJyZW50SXRlbS5wYXJlbnQoKVswXX07aWYodGhpcy5oZWxwZXJbMF0hPXRoaXMuY3VycmVudEl0ZW1bMF0pe3RoaXMuY3VycmVudEl0ZW0uaGlkZSgpfXRoaXMuX2NyZWF0ZVBsYWNlaG9sZGVyKCk7aWYoZy5jb250YWlubWVudCl7dGhpcy5fc2V0Q29udGFpbm1lbnQoKX1pZihnLmN1cnNvcil7aWYoYSgiYm9keSIpLmNzcygiY3Vyc29yIikpe3RoaXMuX3N0b3JlZEN1cnNvcj1hKCJib2R5IikuY3NzKCJjdXJzb3IiKX1hKCJib2R5IikuY3NzKCJjdXJzb3IiLGcuY3Vyc29yKX1pZihnLm9wYWNpdHkpe2lmKHRoaXMuaGVscGVyLmNzcygib3BhY2l0eSIpKXt0aGlzLl9zdG9yZWRPcGFjaXR5PXRoaXMuaGVscGVyLmNzcygib3BhY2l0eSIpfXRoaXMuaGVscGVyLmNzcygib3BhY2l0eSIsZy5vcGFjaXR5KX1pZihnLnpJbmRleCl7aWYodGhpcy5oZWxwZXIuY3NzKCJ6SW5kZXgiKSl7dGhpcy5fc3RvcmVkWkluZGV4PXRoaXMuaGVscGVyLmNzcygiekluZGV4Iil9dGhpcy5oZWxwZXIuY3NzKCJ6SW5kZXgiLGcuekluZGV4KX1pZih0aGlzLnNjcm9sbFBhcmVudFswXSE9ZG9jdW1lbnQmJnRoaXMuc2Nyb2xsUGFyZW50WzBdLnRhZ05hbWUhPSJIVE1MIil7dGhpcy5vdmVyZmxvd09mZnNldD10aGlzLnNjcm9sbFBhcmVudC5vZmZzZXQoKX10aGlzLl90cmlnZ2VyKCJzdGFydCIsZSx0aGlzLl91aUhhc2goKSk7aWYoIXRoaXMuX3ByZXNlcnZlSGVscGVyUHJvcG9ydGlvbnMpe3RoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKX1pZighYil7Zm9yKHZhciBkPXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTtkPj0wO2QtLSl7dGhpcy5jb250YWluZXJzW2RdLl90cmlnZ2VyKCJhY3RpdmF0ZSIsZSxjLl91aUhhc2godGhpcykpfX1pZihhLnVpLmRkbWFuYWdlcil7YS51aS5kZG1hbmFnZXIuY3VycmVudD10aGlzfWlmKGEudWkuZGRtYW5hZ2VyJiYhZy5kcm9wQmVoYXZpb3VyKXthLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0aGlzLGUpfXRoaXMuZHJhZ2dpbmc9dHJ1ZTt0aGlzLmhlbHBlci5hZGRDbGFzcygidWktc29ydGFibGUtaGVscGVyIik7dGhpcy5fbW91c2VEcmFnKGUpO3JldHVybiB0cnVlfSxfbW91c2VEcmFnOmZ1bmN0aW9uKGYpe3RoaXMucG9zaXRpb249dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbihmKTt0aGlzLnBvc2l0aW9uQWJzPXRoaXMuX2NvbnZlcnRQb3NpdGlvblRvKCJhYnNvbHV0ZSIpO2lmKCF0aGlzLmxhc3RQb3NpdGlvbkFicyl7dGhpcy5sYXN0UG9zaXRpb25BYnM9dGhpcy5wb3NpdGlvbkFic31pZih0aGlzLm9wdGlvbnMuc2Nyb2xsKXt2YXIgZz10aGlzLm9wdGlvbnMsYj1mYWxzZTtpZih0aGlzLnNjcm9sbFBhcmVudFswXSE9ZG9jdW1lbnQmJnRoaXMuc2Nyb2xsUGFyZW50WzBdLnRhZ05hbWUhPSJIVE1MIil7aWYoKHRoaXMub3ZlcmZsb3dPZmZzZXQudG9wK3RoaXMuc2Nyb2xsUGFyZW50WzBdLm9mZnNldEhlaWdodCktZi5wYWdlWTxnLnNjcm9sbFNlbnNpdGl2aXR5KXt0aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3A9Yj10aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3ArZy5zY3JvbGxTcGVlZH1lbHNle2lmKGYucGFnZVktdGhpcy5vdmVyZmxvd09mZnNldC50b3A8Zy5zY3JvbGxTZW5zaXRpdml0eSl7dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wPWI9dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wLWcuc2Nyb2xsU3BlZWR9fWlmKCh0aGlzLm92ZXJmbG93T2Zmc2V0LmxlZnQrdGhpcy5zY3JvbGxQYXJlbnRbMF0ub2Zmc2V0V2lkdGgpLWYucGFnZVg8Zy5zY3JvbGxTZW5zaXRpdml0eSl7dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdD1iPXRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQrZy5zY3JvbGxTcGVlZH1lbHNle2lmKGYucGFnZVgtdGhpcy5vdmVyZmxvd09mZnNldC5sZWZ0PGcuc2Nyb2xsU2Vuc2l0aXZpdHkpe3RoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQ9Yj10aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0LWcuc2Nyb2xsU3BlZWR9fX1lbHNle2lmKGYucGFnZVktYShkb2N1bWVudCkuc2Nyb2xsVG9wKCk8Zy5zY3JvbGxTZW5zaXRpdml0eSl7Yj1hKGRvY3VtZW50KS5zY3JvbGxUb3AoYShkb2N1bWVudCkuc2Nyb2xsVG9wKCktZy5zY3JvbGxTcGVlZCl9ZWxzZXtpZihhKHdpbmRvdykuaGVpZ2h0KCktKGYucGFnZVktYShkb2N1bWVudCkuc2Nyb2xsVG9wKCkpPGcuc2Nyb2xsU2Vuc2l0aXZpdHkpe2I9YShkb2N1bWVudCkuc2Nyb2xsVG9wKGEoZG9jdW1lbnQpLnNjcm9sbFRvcCgpK2cuc2Nyb2xsU3BlZWQpfX1pZihmLnBhZ2VYLWEoZG9jdW1lbnQpLnNjcm9sbExlZnQoKTxnLnNjcm9sbFNlbnNpdGl2aXR5KXtiPWEoZG9jdW1lbnQpLnNjcm9sbExlZnQoYShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpLWcuc2Nyb2xsU3BlZWQpfWVsc2V7aWYoYSh3aW5kb3cpLndpZHRoKCktKGYucGFnZVgtYShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpKTxnLnNjcm9sbFNlbnNpdGl2aXR5KXtiPWEoZG9jdW1lbnQpLnNjcm9sbExlZnQoYShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpK2cuc2Nyb2xsU3BlZWQpfX19aWYoYiE9PWZhbHNlJiZhLnVpLmRkbWFuYWdlciYmIWcuZHJvcEJlaGF2aW91cil7YS51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHModGhpcyxmKX19dGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUiKTtpZighdGhpcy5vcHRpb25zLmF4aXN8fHRoaXMub3B0aW9ucy5heGlzIT0ieSIpe3RoaXMuaGVscGVyWzBdLnN0eWxlLmxlZnQ9dGhpcy5wb3NpdGlvbi5sZWZ0KyJweCJ9aWYoIXRoaXMub3B0aW9ucy5heGlzfHx0aGlzLm9wdGlvbnMuYXhpcyE9IngiKXt0aGlzLmhlbHBlclswXS5zdHlsZS50b3A9dGhpcy5wb3NpdGlvbi50b3ArInB4In1mb3IodmFyIGQ9dGhpcy5pdGVtcy5sZW5ndGgtMTtkPj0wO2QtLSl7dmFyIGU9dGhpcy5pdGVtc1tkXSxjPWUuaXRlbVswXSxoPXRoaXMuX2ludGVyc2VjdHNXaXRoUG9pbnRlcihlKTtpZighaCl7Y29udGludWV9aWYoYyE9dGhpcy5jdXJyZW50SXRlbVswXSYmdGhpcy5wbGFjZWhvbGRlcltoPT0xPyJuZXh0IjoicHJldiJdKClbMF0hPWMmJiFhLnVpLmNvbnRhaW5zKHRoaXMucGxhY2Vob2xkZXJbMF0sYykmJih0aGlzLm9wdGlvbnMudHlwZT09InNlbWktZHluYW1pYyI/IWEudWkuY29udGFpbnModGhpcy5lbGVtZW50WzBdLGMpOnRydWUpKXt0aGlzLmRpcmVjdGlvbj1oPT0xPyJkb3duIjoidXAiO2lmKHRoaXMub3B0aW9ucy50b2xlcmFuY2U9PSJwb2ludGVyInx8dGhpcy5faW50ZXJzZWN0c1dpdGhTaWRlcyhlKSl7dGhpcy5fcmVhcnJhbmdlKGYsZSl9ZWxzZXticmVha310aGlzLl90cmlnZ2VyKCJjaGFuZ2UiLGYsdGhpcy5fdWlIYXNoKCkpO2JyZWFrfX10aGlzLl9jb250YWN0Q29udGFpbmVycyhmKTtpZihhLnVpLmRkbWFuYWdlcil7YS51aS5kZG1hbmFnZXIuZHJhZyh0aGlzLGYpfXRoaXMuX3RyaWdnZXIoInNvcnQiLGYsdGhpcy5fdWlIYXNoKCkpO3RoaXMubGFzdFBvc2l0aW9uQWJzPXRoaXMucG9zaXRpb25BYnM7cmV0dXJuIGZhbHNlfSxfbW91c2VTdG9wOmZ1bmN0aW9uKGMsZCl7aWYoIWMpe3JldHVybn1pZihhLnVpLmRkbWFuYWdlciYmIXRoaXMub3B0aW9ucy5kcm9wQmVoYXZpb3VyKXthLnVpLmRkbWFuYWdlci5kcm9wKHRoaXMsYyl9aWYodGhpcy5vcHRpb25zLnJldmVydCl7dmFyIGI9dGhpczt2YXIgZT1iLnBsYWNlaG9sZGVyLm9mZnNldCgpO2IucmV2ZXJ0aW5nPXRydWU7YSh0aGlzLmhlbHBlcikuYW5pbWF0ZSh7bGVmdDplLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQtYi5tYXJnaW5zLmxlZnQrKHRoaXMub2Zmc2V0UGFyZW50WzBdPT1kb2N1bWVudC5ib2R5PzA6dGhpcy5vZmZzZXRQYXJlbnRbMF0uc2Nyb2xsTGVmdCksdG9wOmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3AtYi5tYXJnaW5zLnRvcCsodGhpcy5vZmZzZXRQYXJlbnRbMF09PWRvY3VtZW50LmJvZHk/MDp0aGlzLm9mZnNldFBhcmVudFswXS5zY3JvbGxUb3ApfSxwYXJzZUludCh0aGlzLm9wdGlvbnMucmV2ZXJ0LDEwKXx8NTAwLGZ1bmN0aW9uKCl7Yi5fY2xlYXIoYyl9KX1lbHNle3RoaXMuX2NsZWFyKGMsZCl9cmV0dXJuIGZhbHNlfSxjYW5jZWw6ZnVuY3Rpb24oKXt2YXIgYj10aGlzO2lmKHRoaXMuZHJhZ2dpbmcpe3RoaXMuX21vdXNlVXAoKTtpZih0aGlzLm9wdGlvbnMuaGVscGVyPT0ib3JpZ2luYWwiKXt0aGlzLmN1cnJlbnRJdGVtLmNzcyh0aGlzLl9zdG9yZWRDU1MpLnJlbW92ZUNsYXNzKCJ1aS1zb3J0YWJsZS1oZWxwZXIiKX1lbHNle3RoaXMuY3VycmVudEl0ZW0uc2hvdygpfWZvcih2YXIgYz10aGlzLmNvbnRhaW5lcnMubGVuZ3RoLTE7Yz49MDtjLS0pe3RoaXMuY29udGFpbmVyc1tjXS5fdHJpZ2dlcigiZGVhY3RpdmF0ZSIsbnVsbCxiLl91aUhhc2godGhpcykpO2lmKHRoaXMuY29udGFpbmVyc1tjXS5jb250YWluZXJDYWNoZS5vdmVyKXt0aGlzLmNvbnRhaW5lcnNbY10uX3RyaWdnZXIoIm91dCIsbnVsbCxiLl91aUhhc2godGhpcykpO3RoaXMuY29udGFpbmVyc1tjXS5jb250YWluZXJDYWNoZS5vdmVyPTB9fX1pZih0aGlzLnBsYWNlaG9sZGVyWzBdLnBhcmVudE5vZGUpe3RoaXMucGxhY2Vob2xkZXJbMF0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnBsYWNlaG9sZGVyWzBdKX1pZih0aGlzLm9wdGlvbnMuaGVscGVyIT0ib3JpZ2luYWwiJiZ0aGlzLmhlbHBlciYmdGhpcy5oZWxwZXJbMF0ucGFyZW50Tm9kZSl7dGhpcy5oZWxwZXIucmVtb3ZlKCl9YS5leHRlbmQodGhpcyx7aGVscGVyOm51bGwsZHJhZ2dpbmc6ZmFsc2UscmV2ZXJ0aW5nOmZhbHNlLF9ub0ZpbmFsU29ydDpudWxsfSk7aWYodGhpcy5kb21Qb3NpdGlvbi5wcmV2KXthKHRoaXMuZG9tUG9zaXRpb24ucHJldikuYWZ0ZXIodGhpcy5jdXJyZW50SXRlbSl9ZWxzZXthKHRoaXMuZG9tUG9zaXRpb24ucGFyZW50KS5wcmVwZW5kKHRoaXMuY3VycmVudEl0ZW0pfXJldHVybiB0aGlzfSxzZXJpYWxpemU6ZnVuY3Rpb24oZCl7dmFyIGI9dGhpcy5fZ2V0SXRlbXNBc2pRdWVyeShkJiZkLmNvbm5lY3RlZCk7dmFyIGM9W107ZD1kfHx7fTthKGIpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT0oYShkLml0ZW18fHRoaXMpLmF0dHIoZC5hdHRyaWJ1dGV8fCJpZCIpfHwiIikubWF0Y2goZC5leHByZXNzaW9ufHwoLyguKylbLT1fXSguKykvKSk7aWYoZSl7Yy5wdXNoKChkLmtleXx8ZVsxXSsiW10iKSsiPSIrKGQua2V5JiZkLmV4cHJlc3Npb24/ZVsxXTplWzJdKSl9fSk7cmV0dXJuIGMuam9pbigiJiIpfSx0b0FycmF5OmZ1bmN0aW9uKGQpe3ZhciBiPXRoaXMuX2dldEl0ZW1zQXNqUXVlcnkoZCYmZC5jb25uZWN0ZWQpO3ZhciBjPVtdO2Q9ZHx8e307Yi5lYWNoKGZ1bmN0aW9uKCl7Yy5wdXNoKGEoZC5pdGVtfHx0aGlzKS5hdHRyKGQuYXR0cmlidXRlfHwiaWQiKXx8IiIpfSk7cmV0dXJuIGN9LF9pbnRlcnNlY3RzV2l0aDpmdW5jdGlvbihtKXt2YXIgZT10aGlzLnBvc2l0aW9uQWJzLmxlZnQsZD1lK3RoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgsaz10aGlzLnBvc2l0aW9uQWJzLnRvcCxqPWsrdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQ7dmFyIGY9bS5sZWZ0LGM9ZittLndpZHRoLG49bS50b3AsaT1uK20uaGVpZ2h0O3ZhciBvPXRoaXMub2Zmc2V0LmNsaWNrLnRvcCxoPXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ7dmFyIGc9KGsrbyk+biYmKGsrbyk8aSYmKGUraCk+ZiYmKGUraCk8YztpZih0aGlzLm9wdGlvbnMudG9sZXJhbmNlPT0icG9pbnRlciJ8fHRoaXMub3B0aW9ucy5mb3JjZVBvaW50ZXJGb3JDb250YWluZXJzfHwodGhpcy5vcHRpb25zLnRvbGVyYW5jZSE9InBvaW50ZXIiJiZ0aGlzLmhlbHBlclByb3BvcnRpb25zW3RoaXMuZmxvYXRpbmc/IndpZHRoIjoiaGVpZ2h0Il0+bVt0aGlzLmZsb2F0aW5nPyJ3aWR0aCI6ImhlaWdodCJdKSl7cmV0dXJuIGd9ZWxzZXtyZXR1cm4oZjxlKyh0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLzIpJiZkLSh0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLzIpPGMmJm48aysodGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQvMikmJmotKHRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LzIpPGkpfX0sX2ludGVyc2VjdHNXaXRoUG9pbnRlcjpmdW5jdGlvbihkKXt2YXIgZT1hLnVpLmlzT3ZlckF4aXModGhpcy5wb3NpdGlvbkFicy50b3ArdGhpcy5vZmZzZXQuY2xpY2sudG9wLGQudG9wLGQuaGVpZ2h0KSxjPWEudWkuaXNPdmVyQXhpcyh0aGlzLnBvc2l0aW9uQWJzLmxlZnQrdGhpcy5vZmZzZXQuY2xpY2subGVmdCxkLmxlZnQsZC53aWR0aCksZz1lJiZjLGI9dGhpcy5fZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uKCksZj10aGlzLl9nZXREcmFnSG9yaXpvbnRhbERpcmVjdGlvbigpO2lmKCFnKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRoaXMuZmxvYXRpbmc/KCgoZiYmZj09InJpZ2h0Iil8fGI9PSJkb3duIik/MjoxKTooYiYmKGI9PSJkb3duIj8yOjEpKX0sX2ludGVyc2VjdHNXaXRoU2lkZXM6ZnVuY3Rpb24oZSl7dmFyIGM9YS51aS5pc092ZXJBeGlzKHRoaXMucG9zaXRpb25BYnMudG9wK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCxlLnRvcCsoZS5oZWlnaHQvMiksZS5oZWlnaHQpLGQ9YS51aS5pc092ZXJBeGlzKHRoaXMucG9zaXRpb25BYnMubGVmdCt0aGlzLm9mZnNldC5jbGljay5sZWZ0LGUubGVmdCsoZS53aWR0aC8yKSxlLndpZHRoKSxiPXRoaXMuX2dldERyYWdWZXJ0aWNhbERpcmVjdGlvbigpLGY9dGhpcy5fZ2V0RHJhZ0hvcml6b250YWxEaXJlY3Rpb24oKTtpZih0aGlzLmZsb2F0aW5nJiZmKXtyZXR1cm4oKGY9PSJyaWdodCImJmQpfHwoZj09ImxlZnQiJiYhZCkpfWVsc2V7cmV0dXJuIGImJigoYj09ImRvd24iJiZjKXx8KGI9PSJ1cCImJiFjKSl9fSxfZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wb3NpdGlvbkFicy50b3AtdGhpcy5sYXN0UG9zaXRpb25BYnMudG9wO3JldHVybiBiIT0wJiYoYj4wPyJkb3duIjoidXAiKX0sX2dldERyYWdIb3Jpem9udGFsRGlyZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wb3NpdGlvbkFicy5sZWZ0LXRoaXMubGFzdFBvc2l0aW9uQWJzLmxlZnQ7cmV0dXJuIGIhPTAmJihiPjA/InJpZ2h0IjoibGVmdCIpfSxyZWZyZXNoOmZ1bmN0aW9uKGIpe3RoaXMuX3JlZnJlc2hJdGVtcyhiKTt0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKTtyZXR1cm4gdGhpc30sX2Nvbm5lY3RXaXRoOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5vcHRpb25zO3JldHVybiBiLmNvbm5lY3RXaXRoLmNvbnN0cnVjdG9yPT1TdHJpbmc/W2IuY29ubmVjdFdpdGhdOmIuY29ubmVjdFdpdGh9LF9nZXRJdGVtc0FzalF1ZXJ5OmZ1bmN0aW9uKGIpe3ZhciBsPXRoaXM7dmFyIGc9W107dmFyIGU9W107dmFyIGg9dGhpcy5fY29ubmVjdFdpdGgoKTtpZihoJiZiKXtmb3IodmFyIGQ9aC5sZW5ndGgtMTtkPj0wO2QtLSl7dmFyIGs9YShoW2RdKTtmb3IodmFyIGM9ay5sZW5ndGgtMTtjPj0wO2MtLSl7dmFyIGY9YS5kYXRhKGtbY10sInNvcnRhYmxlIik7aWYoZiYmZiE9dGhpcyYmIWYub3B0aW9ucy5kaXNhYmxlZCl7ZS5wdXNoKFthLmlzRnVuY3Rpb24oZi5vcHRpb25zLml0ZW1zKT9mLm9wdGlvbnMuaXRlbXMuY2FsbChmLmVsZW1lbnQpOmEoZi5vcHRpb25zLml0ZW1zLGYuZWxlbWVudCkubm90KCIudWktc29ydGFibGUtaGVscGVyIikubm90KCIudWktc29ydGFibGUtcGxhY2Vob2xkZXIiKSxmXSl9fX19ZS5wdXNoKFthLmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLml0ZW1zKT90aGlzLm9wdGlvbnMuaXRlbXMuY2FsbCh0aGlzLmVsZW1lbnQsbnVsbCx7b3B0aW9uczp0aGlzLm9wdGlvbnMsaXRlbTp0aGlzLmN1cnJlbnRJdGVtfSk6YSh0aGlzLm9wdGlvbnMuaXRlbXMsdGhpcy5lbGVtZW50KS5ub3QoIi51aS1zb3J0YWJsZS1oZWxwZXIiKS5ub3QoIi51aS1zb3J0YWJsZS1wbGFjZWhvbGRlciIpLHRoaXNdKTtmb3IodmFyIGQ9ZS5sZW5ndGgtMTtkPj0wO2QtLSl7ZVtkXVswXS5lYWNoKGZ1bmN0aW9uKCl7Zy5wdXNoKHRoaXMpfSl9cmV0dXJuIGEoZyl9LF9yZW1vdmVDdXJyZW50c0Zyb21JdGVtczpmdW5jdGlvbigpe3ZhciBkPXRoaXMuY3VycmVudEl0ZW0uZmluZCgiOmRhdGEoc29ydGFibGUtaXRlbSkiKTtmb3IodmFyIGM9MDtjPHRoaXMuaXRlbXMubGVuZ3RoO2MrKyl7Zm9yKHZhciBiPTA7YjxkLmxlbmd0aDtiKyspe2lmKGRbYl09PXRoaXMuaXRlbXNbY10uaXRlbVswXSl7dGhpcy5pdGVtcy5zcGxpY2UoYywxKX19fX0sX3JlZnJlc2hJdGVtczpmdW5jdGlvbihiKXt0aGlzLml0ZW1zPVtdO3RoaXMuY29udGFpbmVycz1bdGhpc107dmFyIGg9dGhpcy5pdGVtczt2YXIgcD10aGlzO3ZhciBmPVtbYS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5pdGVtcyk/dGhpcy5vcHRpb25zLml0ZW1zLmNhbGwodGhpcy5lbGVtZW50WzBdLGIse2l0ZW06dGhpcy5jdXJyZW50SXRlbX0pOmEodGhpcy5vcHRpb25zLml0ZW1zLHRoaXMuZWxlbWVudCksdGhpc11dO3ZhciBsPXRoaXMuX2Nvbm5lY3RXaXRoKCk7aWYobCl7Zm9yKHZhciBlPWwubGVuZ3RoLTE7ZT49MDtlLS0pe3ZhciBtPWEobFtlXSk7Zm9yKHZhciBkPW0ubGVuZ3RoLTE7ZD49MDtkLS0pe3ZhciBnPWEuZGF0YShtW2RdLCJzb3J0YWJsZSIpO2lmKGcmJmchPXRoaXMmJiFnLm9wdGlvbnMuZGlzYWJsZWQpe2YucHVzaChbYS5pc0Z1bmN0aW9uKGcub3B0aW9ucy5pdGVtcyk/Zy5vcHRpb25zLml0ZW1zLmNhbGwoZy5lbGVtZW50WzBdLGIse2l0ZW06dGhpcy5jdXJyZW50SXRlbX0pOmEoZy5vcHRpb25zLml0ZW1zLGcuZWxlbWVudCksZ10pO3RoaXMuY29udGFpbmVycy5wdXNoKGcpfX19fWZvcih2YXIgZT1mLmxlbmd0aC0xO2U+PTA7ZS0tKXt2YXIgaz1mW2VdWzFdO3ZhciBjPWZbZV1bMF07Zm9yKHZhciBkPTAsbj1jLmxlbmd0aDtkPG47ZCsrKXt2YXIgbz1hKGNbZF0pO28uZGF0YSgic29ydGFibGUtaXRlbSIsayk7aC5wdXNoKHtpdGVtOm8saW5zdGFuY2U6ayx3aWR0aDowLGhlaWdodDowLGxlZnQ6MCx0b3A6MH0pfX19LHJlZnJlc2hQb3NpdGlvbnM6ZnVuY3Rpb24oYil7aWYodGhpcy5vZmZzZXRQYXJlbnQmJnRoaXMuaGVscGVyKXt0aGlzLm9mZnNldC5wYXJlbnQ9dGhpcy5fZ2V0UGFyZW50T2Zmc2V0KCl9Zm9yKHZhciBkPXRoaXMuaXRlbXMubGVuZ3RoLTE7ZD49MDtkLS0pe3ZhciBlPXRoaXMuaXRlbXNbZF07dmFyIGM9dGhpcy5vcHRpb25zLnRvbGVyYW5jZUVsZW1lbnQ/YSh0aGlzLm9wdGlvbnMudG9sZXJhbmNlRWxlbWVudCxlLml0ZW0pOmUuaXRlbTtpZighYil7ZS53aWR0aD1jLm91dGVyV2lkdGgoKTtlLmhlaWdodD1jLm91dGVySGVpZ2h0KCl9dmFyIGY9Yy5vZmZzZXQoKTtlLmxlZnQ9Zi5sZWZ0O2UudG9wPWYudG9wfWlmKHRoaXMub3B0aW9ucy5jdXN0b20mJnRoaXMub3B0aW9ucy5jdXN0b20ucmVmcmVzaENvbnRhaW5lcnMpe3RoaXMub3B0aW9ucy5jdXN0b20ucmVmcmVzaENvbnRhaW5lcnMuY2FsbCh0aGlzKX1lbHNle2Zvcih2YXIgZD10aGlzLmNvbnRhaW5lcnMubGVuZ3RoLTE7ZD49MDtkLS0pe3ZhciBmPXRoaXMuY29udGFpbmVyc1tkXS5lbGVtZW50Lm9mZnNldCgpO3RoaXMuY29udGFpbmVyc1tkXS5jb250YWluZXJDYWNoZS5sZWZ0PWYubGVmdDt0aGlzLmNvbnRhaW5lcnNbZF0uY29udGFpbmVyQ2FjaGUudG9wPWYudG9wO3RoaXMuY29udGFpbmVyc1tkXS5jb250YWluZXJDYWNoZS53aWR0aD10aGlzLmNvbnRhaW5lcnNbZF0uZWxlbWVudC5vdXRlcldpZHRoKCk7dGhpcy5jb250YWluZXJzW2RdLmNvbnRhaW5lckNhY2hlLmhlaWdodD10aGlzLmNvbnRhaW5lcnNbZF0uZWxlbWVudC5vdXRlckhlaWdodCgpfX1yZXR1cm4gdGhpc30sX2NyZWF0ZVBsYWNlaG9sZGVyOmZ1bmN0aW9uKGQpe3ZhciBiPWR8fHRoaXMsZT1iLm9wdGlvbnM7aWYoIWUucGxhY2Vob2xkZXJ8fGUucGxhY2Vob2xkZXIuY29uc3RydWN0b3I9PVN0cmluZyl7dmFyIGM9ZS5wbGFjZWhvbGRlcjtlLnBsYWNlaG9sZGVyPXtlbGVtZW50OmZ1bmN0aW9uKCl7dmFyIGY9YShkb2N1bWVudC5jcmVhdGVFbGVtZW50KGIuY3VycmVudEl0ZW1bMF0ubm9kZU5hbWUpKS5hZGRDbGFzcyhjfHxiLmN1cnJlbnRJdGVtWzBdLmNsYXNzTmFtZSsiIHVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIikucmVtb3ZlQ2xhc3MoInVpLXNvcnRhYmxlLWhlbHBlciIpWzBdO2lmKCFjKXtmLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiJ9cmV0dXJuIGZ9LHVwZGF0ZTpmdW5jdGlvbihmLGcpe2lmKGMmJiFlLmZvcmNlUGxhY2Vob2xkZXJTaXplKXtyZXR1cm59aWYoIWcuaGVpZ2h0KCkpe2cuaGVpZ2h0KGIuY3VycmVudEl0ZW0uaW5uZXJIZWlnaHQoKS1wYXJzZUludChiLmN1cnJlbnRJdGVtLmNzcygicGFkZGluZ1RvcCIpfHwwLDEwKS1wYXJzZUludChiLmN1cnJlbnRJdGVtLmNzcygicGFkZGluZ0JvdHRvbSIpfHwwLDEwKSl9aWYoIWcud2lkdGgoKSl7Zy53aWR0aChiLmN1cnJlbnRJdGVtLmlubmVyV2lkdGgoKS1wYXJzZUludChiLmN1cnJlbnRJdGVtLmNzcygicGFkZGluZ0xlZnQiKXx8MCwxMCktcGFyc2VJbnQoYi5jdXJyZW50SXRlbS5jc3MoInBhZGRpbmdSaWdodCIpfHwwLDEwKSl9fX19Yi5wbGFjZWhvbGRlcj1hKGUucGxhY2Vob2xkZXIuZWxlbWVudC5jYWxsKGIuZWxlbWVudCxiLmN1cnJlbnRJdGVtKSk7Yi5jdXJyZW50SXRlbS5hZnRlcihiLnBsYWNlaG9sZGVyKTtlLnBsYWNlaG9sZGVyLnVwZGF0ZShiLGIucGxhY2Vob2xkZXIpfSxfY29udGFjdENvbnRhaW5lcnM6ZnVuY3Rpb24oYil7dmFyIGQ9bnVsbCxrPW51bGw7Zm9yKHZhciBmPXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTtmPj0wO2YtLSl7aWYoYS51aS5jb250YWlucyh0aGlzLmN1cnJlbnRJdGVtWzBdLHRoaXMuY29udGFpbmVyc1tmXS5lbGVtZW50WzBdKSl7Y29udGludWV9aWYodGhpcy5faW50ZXJzZWN0c1dpdGgodGhpcy5jb250YWluZXJzW2ZdLmNvbnRhaW5lckNhY2hlKSl7aWYoZCYmYS51aS5jb250YWlucyh0aGlzLmNvbnRhaW5lcnNbZl0uZWxlbWVudFswXSxkLmVsZW1lbnRbMF0pKXtjb250aW51ZX1kPXRoaXMuY29udGFpbmVyc1tmXTtrPWZ9ZWxzZXtpZih0aGlzLmNvbnRhaW5lcnNbZl0uY29udGFpbmVyQ2FjaGUub3Zlcil7dGhpcy5jb250YWluZXJzW2ZdLl90cmlnZ2VyKCJvdXQiLGIsdGhpcy5fdWlIYXNoKHRoaXMpKTt0aGlzLmNvbnRhaW5lcnNbZl0uY29udGFpbmVyQ2FjaGUub3Zlcj0wfX19aWYoIWQpe3JldHVybn1pZih0aGlzLmNvbnRhaW5lcnMubGVuZ3RoPT09MSl7dGhpcy5jb250YWluZXJzW2tdLl90cmlnZ2VyKCJvdmVyIixiLHRoaXMuX3VpSGFzaCh0aGlzKSk7dGhpcy5jb250YWluZXJzW2tdLmNvbnRhaW5lckNhY2hlLm92ZXI9MX1lbHNle2lmKHRoaXMuY3VycmVudENvbnRhaW5lciE9dGhpcy5jb250YWluZXJzW2tdKXt2YXIgaD0xMDAwMDt2YXIgZz1udWxsO3ZhciBjPXRoaXMucG9zaXRpb25BYnNbdGhpcy5jb250YWluZXJzW2tdLmZsb2F0aW5nPyJsZWZ0IjoidG9wIl07Zm9yKHZhciBlPXRoaXMuaXRlbXMubGVuZ3RoLTE7ZT49MDtlLS0pe2lmKCFhLnVpLmNvbnRhaW5zKHRoaXMuY29udGFpbmVyc1trXS5lbGVtZW50WzBdLHRoaXMuaXRlbXNbZV0uaXRlbVswXSkpe2NvbnRpbnVlfXZhciBsPXRoaXMuaXRlbXNbZV1bdGhpcy5jb250YWluZXJzW2tdLmZsb2F0aW5nPyJsZWZ0IjoidG9wIl07aWYoTWF0aC5hYnMobC1jKTxoKXtoPU1hdGguYWJzKGwtYyk7Zz10aGlzLml0ZW1zW2VdfX1pZighZyYmIXRoaXMub3B0aW9ucy5kcm9wT25FbXB0eSl7cmV0dXJufXRoaXMuY3VycmVudENvbnRhaW5lcj10aGlzLmNvbnRhaW5lcnNba107Zz90aGlzLl9yZWFycmFuZ2UoYixnLG51bGwsdHJ1ZSk6dGhpcy5fcmVhcnJhbmdlKGIsbnVsbCx0aGlzLmNvbnRhaW5lcnNba10uZWxlbWVudCx0cnVlKTt0aGlzLl90cmlnZ2VyKCJjaGFuZ2UiLGIsdGhpcy5fdWlIYXNoKCkpO3RoaXMuY29udGFpbmVyc1trXS5fdHJpZ2dlcigiY2hhbmdlIixiLHRoaXMuX3VpSGFzaCh0aGlzKSk7dGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyLnVwZGF0ZSh0aGlzLmN1cnJlbnRDb250YWluZXIsdGhpcy5wbGFjZWhvbGRlcik7dGhpcy5jb250YWluZXJzW2tdLl90cmlnZ2VyKCJvdmVyIixiLHRoaXMuX3VpSGFzaCh0aGlzKSk7dGhpcy5jb250YWluZXJzW2tdLmNvbnRhaW5lckNhY2hlLm92ZXI9MX19fSxfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKGMpe3ZhciBkPXRoaXMub3B0aW9uczt2YXIgYj1hLmlzRnVuY3Rpb24oZC5oZWxwZXIpP2EoZC5oZWxwZXIuYXBwbHkodGhpcy5lbGVtZW50WzBdLFtjLHRoaXMuY3VycmVudEl0ZW1dKSk6KGQuaGVscGVyPT0iY2xvbmUiP3RoaXMuY3VycmVudEl0ZW0uY2xvbmUoKTp0aGlzLmN1cnJlbnRJdGVtKTtpZighYi5wYXJlbnRzKCJib2R5IikubGVuZ3RoKXthKGQuYXBwZW5kVG8hPSJwYXJlbnQiP2QuYXBwZW5kVG86dGhpcy5jdXJyZW50SXRlbVswXS5wYXJlbnROb2RlKVswXS5hcHBlbmRDaGlsZChiWzBdKX1pZihiWzBdPT10aGlzLmN1cnJlbnRJdGVtWzBdKXt0aGlzLl9zdG9yZWRDU1M9e3dpZHRoOnRoaXMuY3VycmVudEl0ZW1bMF0uc3R5bGUud2lkdGgsaGVpZ2h0OnRoaXMuY3VycmVudEl0ZW1bMF0uc3R5bGUuaGVpZ2h0LHBvc2l0aW9uOnRoaXMuY3VycmVudEl0ZW0uY3NzKCJwb3NpdGlvbiIpLHRvcDp0aGlzLmN1cnJlbnRJdGVtLmNzcygidG9wIiksbGVmdDp0aGlzLmN1cnJlbnRJdGVtLmNzcygibGVmdCIpfX1pZihiWzBdLnN0eWxlLndpZHRoPT0iInx8ZC5mb3JjZUhlbHBlclNpemUpe2Iud2lkdGgodGhpcy5jdXJyZW50SXRlbS53aWR0aCgpKX1pZihiWzBdLnN0eWxlLmhlaWdodD09IiJ8fGQuZm9yY2VIZWxwZXJTaXplKXtiLmhlaWdodCh0aGlzLmN1cnJlbnRJdGVtLmhlaWdodCgpKX1yZXR1cm4gYn0sX2FkanVzdE9mZnNldEZyb21IZWxwZXI6ZnVuY3Rpb24oYil7aWYodHlwZW9mIGI9PSJzdHJpbmciKXtiPWIuc3BsaXQoIiAiKX1pZihhLmlzQXJyYXkoYikpe2I9e2xlZnQ6K2JbMF0sdG9wOitiWzFdfHwwfX1pZigibGVmdCIgaW4gYil7dGhpcy5vZmZzZXQuY2xpY2subGVmdD1iLmxlZnQrdGhpcy5tYXJnaW5zLmxlZnR9aWYoInJpZ2h0IiBpbiBiKXt0aGlzLm9mZnNldC5jbGljay5sZWZ0PXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtYi5yaWdodCt0aGlzLm1hcmdpbnMubGVmdH1pZigidG9wIiBpbiBiKXt0aGlzLm9mZnNldC5jbGljay50b3A9Yi50b3ArdGhpcy5tYXJnaW5zLnRvcH1pZigiYm90dG9tIiBpbiBiKXt0aGlzLm9mZnNldC5jbGljay50b3A9dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtYi5ib3R0b20rdGhpcy5tYXJnaW5zLnRvcH19LF9nZXRQYXJlbnRPZmZzZXQ6ZnVuY3Rpb24oKXt0aGlzLm9mZnNldFBhcmVudD10aGlzLmhlbHBlci5vZmZzZXRQYXJlbnQoKTt2YXIgYj10aGlzLm9mZnNldFBhcmVudC5vZmZzZXQoKTtpZih0aGlzLmNzc1Bvc2l0aW9uPT0iYWJzb2x1dGUiJiZ0aGlzLnNjcm9sbFBhcmVudFswXSE9ZG9jdW1lbnQmJmEudWkuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pKXtiLmxlZnQrPXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKTtiLnRvcCs9dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCl9aWYoKHRoaXMub2Zmc2V0UGFyZW50WzBdPT1kb2N1bWVudC5ib2R5KXx8KHRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUmJnRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09Imh0bWwiJiZhLmJyb3dzZXIubXNpZSkpe2I9e3RvcDowLGxlZnQ6MH19cmV0dXJue3RvcDpiLnRvcCsocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKCJib3JkZXJUb3BXaWR0aCIpLDEwKXx8MCksbGVmdDpiLmxlZnQrKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcygiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwKX19LF9nZXRSZWxhdGl2ZU9mZnNldDpmdW5jdGlvbigpe2lmKHRoaXMuY3NzUG9zaXRpb249PSJyZWxhdGl2ZSIpe3ZhciBiPXRoaXMuY3VycmVudEl0ZW0ucG9zaXRpb24oKTtyZXR1cm57dG9wOmIudG9wLShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoInRvcCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCksbGVmdDpiLmxlZnQtKHBhcnNlSW50KHRoaXMuaGVscGVyLmNzcygibGVmdCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpfX1lbHNle3JldHVybnt0b3A6MCxsZWZ0OjB9fX0sX2NhY2hlTWFyZ2luczpmdW5jdGlvbigpe3RoaXMubWFyZ2lucz17bGVmdDoocGFyc2VJbnQodGhpcy5jdXJyZW50SXRlbS5jc3MoIm1hcmdpbkxlZnQiKSwxMCl8fDApLHRvcDoocGFyc2VJbnQodGhpcy5jdXJyZW50SXRlbS5jc3MoIm1hcmdpblRvcCIpLDEwKXx8MCl9fSxfY2FjaGVIZWxwZXJQcm9wb3J0aW9uczpmdW5jdGlvbigpe3RoaXMuaGVscGVyUHJvcG9ydGlvbnM9e3dpZHRoOnRoaXMuaGVscGVyLm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5oZWxwZXIub3V0ZXJIZWlnaHQoKX19LF9zZXRDb250YWlubWVudDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucztpZihlLmNvbnRhaW5tZW50PT0icGFyZW50Iil7ZS5jb250YWlubWVudD10aGlzLmhlbHBlclswXS5wYXJlbnROb2RlfWlmKGUuY29udGFpbm1lbnQ9PSJkb2N1bWVudCJ8fGUuY29udGFpbm1lbnQ9PSJ3aW5kb3ciKXt0aGlzLmNvbnRhaW5tZW50PVswLXRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQsMC10aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AtdGhpcy5vZmZzZXQucGFyZW50LnRvcCxhKGUuY29udGFpbm1lbnQ9PSJkb2N1bWVudCI/ZG9jdW1lbnQ6d2luZG93KS53aWR0aCgpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsKGEoZS5jb250YWlubWVudD09ImRvY3VtZW50Ij9kb2N1bWVudDp3aW5kb3cpLmhlaWdodCgpfHxkb2N1bWVudC5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0KS10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10aGlzLm1hcmdpbnMudG9wXX1pZighKC9eKGRvY3VtZW50fHdpbmRvd3xwYXJlbnQpJC8pLnRlc3QoZS5jb250YWlubWVudCkpe3ZhciBjPWEoZS5jb250YWlubWVudClbMF07dmFyIGQ9YShlLmNvbnRhaW5tZW50KS5vZmZzZXQoKTt2YXIgYj0oYShjKS5jc3MoIm92ZXJmbG93IikhPSJoaWRkZW4iKTt0aGlzLmNvbnRhaW5tZW50PVtkLmxlZnQrKHBhcnNlSW50KGEoYykuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDApKyhwYXJzZUludChhKGMpLmNzcygicGFkZGluZ0xlZnQiKSwxMCl8fDApLXRoaXMubWFyZ2lucy5sZWZ0LGQudG9wKyhwYXJzZUludChhKGMpLmNzcygiYm9yZGVyVG9wV2lkdGgiKSwxMCl8fDApKyhwYXJzZUludChhKGMpLmNzcygicGFkZGluZ1RvcCIpLDEwKXx8MCktdGhpcy5tYXJnaW5zLnRvcCxkLmxlZnQrKGI/TWF0aC5tYXgoYy5zY3JvbGxXaWR0aCxjLm9mZnNldFdpZHRoKTpjLm9mZnNldFdpZHRoKS0ocGFyc2VJbnQoYShjKS5jc3MoImJvcmRlckxlZnRXaWR0aCIpLDEwKXx8MCktKHBhcnNlSW50KGEoYykuY3NzKCJwYWRkaW5nUmlnaHQiKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsZC50b3ArKGI/TWF0aC5tYXgoYy5zY3JvbGxIZWlnaHQsYy5vZmZzZXRIZWlnaHQpOmMub2Zmc2V0SGVpZ2h0KS0ocGFyc2VJbnQoYShjKS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoYShjKS5jc3MoInBhZGRpbmdCb3R0b20iKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3BdfX0sX2NvbnZlcnRQb3NpdGlvblRvOmZ1bmN0aW9uKGYsaCl7aWYoIWgpe2g9dGhpcy5wb3NpdGlvbn12YXIgYz1mPT0iYWJzb2x1dGUiPzE6LTE7dmFyIGU9dGhpcy5vcHRpb25zLGI9dGhpcy5jc3NQb3NpdGlvbj09ImFic29sdXRlIiYmISh0aGlzLnNjcm9sbFBhcmVudFswXSE9ZG9jdW1lbnQmJmEudWkuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pKT90aGlzLm9mZnNldFBhcmVudDp0aGlzLnNjcm9sbFBhcmVudCxnPSgvKGh0bWx8Ym9keSkvaSkudGVzdChiWzBdLnRhZ05hbWUpO3JldHVybnt0b3A6KGgudG9wK3RoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcCpjK3RoaXMub2Zmc2V0LnBhcmVudC50b3AqYy0oYS5icm93c2VyLnNhZmFyaSYmdGhpcy5jc3NQb3NpdGlvbj09ImZpeGVkIj8wOih0aGlzLmNzc1Bvc2l0aW9uPT0iZml4ZWQiPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKTooZz8wOmIuc2Nyb2xsVG9wKCkpKSpjKSksbGVmdDooaC5sZWZ0K3RoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQqYyt0aGlzLm9mZnNldC5wYXJlbnQubGVmdCpjLShhLmJyb3dzZXIuc2FmYXJpJiZ0aGlzLmNzc1Bvc2l0aW9uPT0iZml4ZWQiPzA6KHRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKTpnPzA6Yi5zY3JvbGxMZWZ0KCkpKmMpKX19LF9nZW5lcmF0ZVBvc2l0aW9uOmZ1bmN0aW9uKGUpe3ZhciBoPXRoaXMub3B0aW9ucyxiPXRoaXMuY3NzUG9zaXRpb249PSJhYnNvbHV0ZSImJiEodGhpcy5zY3JvbGxQYXJlbnRbMF0hPWRvY3VtZW50JiZhLnVpLmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLHRoaXMub2Zmc2V0UGFyZW50WzBdKSk/dGhpcy5vZmZzZXRQYXJlbnQ6dGhpcy5zY3JvbGxQYXJlbnQsaT0oLyhodG1sfGJvZHkpL2kpLnRlc3QoYlswXS50YWdOYW1lKTtpZih0aGlzLmNzc1Bvc2l0aW9uPT0icmVsYXRpdmUiJiYhKHRoaXMuc2Nyb2xsUGFyZW50WzBdIT1kb2N1bWVudCYmdGhpcy5zY3JvbGxQYXJlbnRbMF0hPXRoaXMub2Zmc2V0UGFyZW50WzBdKSl7dGhpcy5vZmZzZXQucmVsYXRpdmU9dGhpcy5fZ2V0UmVsYXRpdmVPZmZzZXQoKX12YXIgZD1lLnBhZ2VYO3ZhciBjPWUucGFnZVk7aWYodGhpcy5vcmlnaW5hbFBvc2l0aW9uKXtpZih0aGlzLmNvbnRhaW5tZW50KXtpZihlLnBhZ2VYLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8dGhpcy5jb250YWlubWVudFswXSl7ZD10aGlzLmNvbnRhaW5tZW50WzBdK3RoaXMub2Zmc2V0LmNsaWNrLmxlZnR9aWYoZS5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A8dGhpcy5jb250YWlubWVudFsxXSl7Yz10aGlzLmNvbnRhaW5tZW50WzFdK3RoaXMub2Zmc2V0LmNsaWNrLnRvcH1pZihlLnBhZ2VYLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+dGhpcy5jb250YWlubWVudFsyXSl7ZD10aGlzLmNvbnRhaW5tZW50WzJdK3RoaXMub2Zmc2V0LmNsaWNrLmxlZnR9aWYoZS5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A+dGhpcy5jb250YWlubWVudFszXSl7Yz10aGlzLmNvbnRhaW5tZW50WzNdK3RoaXMub2Zmc2V0LmNsaWNrLnRvcH19aWYoaC5ncmlkKXt2YXIgZz10aGlzLm9yaWdpbmFsUGFnZVkrTWF0aC5yb3VuZCgoYy10aGlzLm9yaWdpbmFsUGFnZVkpL2guZ3JpZFsxXSkqaC5ncmlkWzFdO2M9dGhpcy5jb250YWlubWVudD8oIShnLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDx0aGlzLmNvbnRhaW5tZW50WzFdfHxnLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD50aGlzLmNvbnRhaW5tZW50WzNdKT9nOighKGctdGhpcy5vZmZzZXQuY2xpY2sudG9wPHRoaXMuY29udGFpbm1lbnRbMV0pP2ctaC5ncmlkWzFdOmcraC5ncmlkWzFdKSk6Zzt2YXIgZj10aGlzLm9yaWdpbmFsUGFnZVgrTWF0aC5yb3VuZCgoZC10aGlzLm9yaWdpbmFsUGFnZVgpL2guZ3JpZFswXSkqaC5ncmlkWzBdO2Q9dGhpcy5jb250YWlubWVudD8oIShmLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8dGhpcy5jb250YWlubWVudFswXXx8Zi10aGlzLm9mZnNldC5jbGljay5sZWZ0PnRoaXMuY29udGFpbm1lbnRbMl0pP2Y6KCEoZi10aGlzLm9mZnNldC5jbGljay5sZWZ0PHRoaXMuY29udGFpbm1lbnRbMF0pP2YtaC5ncmlkWzBdOmYraC5ncmlkWzBdKSk6Zn19cmV0dXJue3RvcDooYy10aGlzLm9mZnNldC5jbGljay50b3AtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3ArKGEuYnJvd3Nlci5zYWZhcmkmJnRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/MDoodGhpcy5jc3NQb3NpdGlvbj09ImZpeGVkIj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCk6KGk/MDpiLnNjcm9sbFRvcCgpKSkpKSxsZWZ0OihkLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQtdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdC10aGlzLm9mZnNldC5wYXJlbnQubGVmdCsoYS5icm93c2VyLnNhZmFyaSYmdGhpcy5jc3NQb3NpdGlvbj09ImZpeGVkIj8wOih0aGlzLmNzc1Bvc2l0aW9uPT0iZml4ZWQiPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCk6aT8wOmIuc2Nyb2xsTGVmdCgpKSkpfX0sX3JlYXJyYW5nZTpmdW5jdGlvbihnLGYsYyxlKXtjP2NbMF0uYXBwZW5kQ2hpbGQodGhpcy5wbGFjZWhvbGRlclswXSk6Zi5pdGVtWzBdLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMucGxhY2Vob2xkZXJbMF0sKHRoaXMuZGlyZWN0aW9uPT0iZG93biI/Zi5pdGVtWzBdOmYuaXRlbVswXS5uZXh0U2libGluZykpO3RoaXMuY291bnRlcj10aGlzLmNvdW50ZXI/Kyt0aGlzLmNvdW50ZXI6MTt2YXIgZD10aGlzLGI9dGhpcy5jb3VudGVyO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoYj09ZC5jb3VudGVyKXtkLnJlZnJlc2hQb3NpdGlvbnMoIWUpfX0sMCl9LF9jbGVhcjpmdW5jdGlvbihkLGUpe3RoaXMucmV2ZXJ0aW5nPWZhbHNlO3ZhciBmPVtdLGI9dGhpcztpZighdGhpcy5fbm9GaW5hbFNvcnQmJnRoaXMuY3VycmVudEl0ZW1bMF0ucGFyZW50Tm9kZSl7dGhpcy5wbGFjZWhvbGRlci5iZWZvcmUodGhpcy5jdXJyZW50SXRlbSl9dGhpcy5fbm9GaW5hbFNvcnQ9bnVsbDtpZih0aGlzLmhlbHBlclswXT09dGhpcy5jdXJyZW50SXRlbVswXSl7Zm9yKHZhciBjIGluIHRoaXMuX3N0b3JlZENTUyl7aWYodGhpcy5fc3RvcmVkQ1NTW2NdPT0iYXV0byJ8fHRoaXMuX3N0b3JlZENTU1tjXT09InN0YXRpYyIpe3RoaXMuX3N0b3JlZENTU1tjXT0iIn19dGhpcy5jdXJyZW50SXRlbS5jc3ModGhpcy5fc3RvcmVkQ1NTKS5yZW1vdmVDbGFzcygidWktc29ydGFibGUtaGVscGVyIil9ZWxzZXt0aGlzLmN1cnJlbnRJdGVtLnNob3coKX1pZih0aGlzLmZyb21PdXRzaWRlJiYhZSl7Zi5wdXNoKGZ1bmN0aW9uKGcpe3RoaXMuX3RyaWdnZXIoInJlY2VpdmUiLGcsdGhpcy5fdWlIYXNoKHRoaXMuZnJvbU91dHNpZGUpKX0pfWlmKCh0aGlzLmZyb21PdXRzaWRlfHx0aGlzLmRvbVBvc2l0aW9uLnByZXYhPXRoaXMuY3VycmVudEl0ZW0ucHJldigpLm5vdCgiLnVpLXNvcnRhYmxlLWhlbHBlciIpWzBdfHx0aGlzLmRvbVBvc2l0aW9uLnBhcmVudCE9dGhpcy5jdXJyZW50SXRlbS5wYXJlbnQoKVswXSkmJiFlKXtmLnB1c2goZnVuY3Rpb24oZyl7dGhpcy5fdHJpZ2dlcigidXBkYXRlIixnLHRoaXMuX3VpSGFzaCgpKX0pfWlmKCFhLnVpLmNvbnRhaW5zKHRoaXMuZWxlbWVudFswXSx0aGlzLmN1cnJlbnRJdGVtWzBdKSl7aWYoIWUpe2YucHVzaChmdW5jdGlvbihnKXt0aGlzLl90cmlnZ2VyKCJyZW1vdmUiLGcsdGhpcy5fdWlIYXNoKCkpfSl9Zm9yKHZhciBjPXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTtjPj0wO2MtLSl7aWYoYS51aS5jb250YWlucyh0aGlzLmNvbnRhaW5lcnNbY10uZWxlbWVudFswXSx0aGlzLmN1cnJlbnRJdGVtWzBdKSYmIWUpe2YucHVzaCgoZnVuY3Rpb24oZyl7cmV0dXJuIGZ1bmN0aW9uKGgpe2cuX3RyaWdnZXIoInJlY2VpdmUiLGgsdGhpcy5fdWlIYXNoKHRoaXMpKX19KS5jYWxsKHRoaXMsdGhpcy5jb250YWluZXJzW2NdKSk7Zi5wdXNoKChmdW5jdGlvbihnKXtyZXR1cm4gZnVuY3Rpb24oaCl7Zy5fdHJpZ2dlcigidXBkYXRlIixoLHRoaXMuX3VpSGFzaCh0aGlzKSl9fSkuY2FsbCh0aGlzLHRoaXMuY29udGFpbmVyc1tjXSkpfX19Zm9yKHZhciBjPXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTtjPj0wO2MtLSl7aWYoIWUpe2YucHVzaCgoZnVuY3Rpb24oZyl7cmV0dXJuIGZ1bmN0aW9uKGgpe2cuX3RyaWdnZXIoImRlYWN0aXZhdGUiLGgsdGhpcy5fdWlIYXNoKHRoaXMpKX19KS5jYWxsKHRoaXMsdGhpcy5jb250YWluZXJzW2NdKSl9aWYodGhpcy5jb250YWluZXJzW2NdLmNvbnRhaW5lckNhY2hlLm92ZXIpe2YucHVzaCgoZnVuY3Rpb24oZyl7cmV0dXJuIGZ1bmN0aW9uKGgpe2cuX3RyaWdnZXIoIm91dCIsaCx0aGlzLl91aUhhc2godGhpcykpfX0pLmNhbGwodGhpcyx0aGlzLmNvbnRhaW5lcnNbY10pKTt0aGlzLmNvbnRhaW5lcnNbY10uY29udGFpbmVyQ2FjaGUub3Zlcj0wfX1pZih0aGlzLl9zdG9yZWRDdXJzb3Ipe2EoImJvZHkiKS5jc3MoImN1cnNvciIsdGhpcy5fc3RvcmVkQ3Vyc29yKX1pZih0aGlzLl9zdG9yZWRPcGFjaXR5KXt0aGlzLmhlbHBlci5jc3MoIm9wYWNpdHkiLHRoaXMuX3N0b3JlZE9wYWNpdHkpfWlmKHRoaXMuX3N0b3JlZFpJbmRleCl7dGhpcy5oZWxwZXIuY3NzKCJ6SW5kZXgiLHRoaXMuX3N0b3JlZFpJbmRleD09ImF1dG8iPyIiOnRoaXMuX3N0b3JlZFpJbmRleCl9dGhpcy5kcmFnZ2luZz1mYWxzZTtpZih0aGlzLmNhbmNlbEhlbHBlclJlbW92YWwpe2lmKCFlKXt0aGlzLl90cmlnZ2VyKCJiZWZvcmVTdG9wIixkLHRoaXMuX3VpSGFzaCgpKTtmb3IodmFyIGM9MDtjPGYubGVuZ3RoO2MrKyl7ZltjXS5jYWxsKHRoaXMsZCl9dGhpcy5fdHJpZ2dlcigic3RvcCIsZCx0aGlzLl91aUhhc2goKSl9cmV0dXJuIGZhbHNlfWlmKCFlKXt0aGlzLl90cmlnZ2VyKCJiZWZvcmVTdG9wIixkLHRoaXMuX3VpSGFzaCgpKX10aGlzLnBsYWNlaG9sZGVyWzBdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wbGFjZWhvbGRlclswXSk7aWYodGhpcy5oZWxwZXJbMF0hPXRoaXMuY3VycmVudEl0ZW1bMF0pe3RoaXMuaGVscGVyLnJlbW92ZSgpfXRoaXMuaGVscGVyPW51bGw7aWYoIWUpe2Zvcih2YXIgYz0wO2M8Zi5sZW5ndGg7YysrKXtmW2NdLmNhbGwodGhpcyxkKX10aGlzLl90cmlnZ2VyKCJzdG9wIixkLHRoaXMuX3VpSGFzaCgpKX10aGlzLmZyb21PdXRzaWRlPWZhbHNlO3JldHVybiB0cnVlfSxfdHJpZ2dlcjpmdW5jdGlvbigpe2lmKGEuV2lkZ2V0LnByb3RvdHlwZS5fdHJpZ2dlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk9PT1mYWxzZSl7dGhpcy5jYW5jZWwoKX19LF91aUhhc2g6ZnVuY3Rpb24oYyl7dmFyIGI9Y3x8dGhpcztyZXR1cm57aGVscGVyOmIuaGVscGVyLHBsYWNlaG9sZGVyOmIucGxhY2Vob2xkZXJ8fGEoW10pLHBvc2l0aW9uOmIucG9zaXRpb24sb3JpZ2luYWxQb3NpdGlvbjpiLm9yaWdpbmFsUG9zaXRpb24sb2Zmc2V0OmIucG9zaXRpb25BYnMsaXRlbTpiLmN1cnJlbnRJdGVtLHNlbmRlcjpjP2MuZWxlbWVudDpudWxsfX19KTthLmV4dGVuZChhLnVpLnNvcnRhYmxlLHt2ZXJzaW9uOiIxLjgifSl9KShqUXVlcnkpOzs=]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ0FkdmFuY2VkQ29udGVudCddICAgICAgICAgICAgICAgID0gIkFkdmFuY2VkIENvbnRlbnQiOwokbGFuZ1snaW5zdGFsbGVkJ10gICAgICAgICAgICAgICAgICAgICAgPSAiTW9kdWxlIEFkdmFuY2VkQ29udGVudCAlcyBpbnN0YWxsZWQiOwokbGFuZ1sndW5pbnN0YWxsZWQnXSAgICAgICAgICAgICAgICAgICAgPSAiTW9kdWxlIEFkdmFuY2VkQ29udGVudCAlcyB1bmluc3RhbGxlZCI7CiRsYW5nWyd1cGdyYWRlZCddICAgICAgICAgICAgICAgICAgICAgICA9ICJNb2R1bGUgQWR2YW5jZWRDb250ZW50IHVwZ3JhZGVkIHRvICVzIjsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gICAgICAgICAgICAgICAgICAgID0gIk1vZHVsZSBBZHZhbmNlZENvbnRlbnQgJXMgaW5zdGFsbGVkLiI7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gICAgICAgICAgICAgICAgICA9ICJNb2R1bGUgQWR2YW5jZWRDb250ZW50ICVzIHVuaW5zdGFsbGVkLiI7CiRsYW5nWydjb25maXJtdW5pbnN0YWxsJ10gICAgICAgICAgICAgICA9ICJEbyB5b3UgcmVhbGx5IHdhbnQgdW5pbnN0YWxsIHRoZSBtb2R1bGUgQWR2YW5jZWRDb250ZW50PyI7CiRsYW5nWydub3RpY2VfZHVwbGljYXRlY29udGVudCddICAgICAgICA9ICI8ZW0+PHN0cm9uZz5Ob3RpY2U6PC9zdHJvbmc+IFRoaXMgYmxvY2sgaXMgdXNlZCBtdWx0aXBsZSB0aW1lcyBpbiB0ZW1wbGF0ZS4gWW91IG9ubHkgc2VlIHRoZSBmaXJzdCBibG9jayBoZXJlLjwvZW0+IjsKJGxhbmdbJ2Vycm9yX2Jhc2ljYXR0cmliJ10gICAgICAgICAgICAgID0gIjxlbT48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz4gQ2Fubm90IHVzZSBiYXNpYyBjb250ZW50IHByb3BlcnR5IG5hbWUgJyVzJyBhcyB2YWx1ZSBvZiBwYXJhbSAnYmxvY2snLiA8YnIgLz5UaGlzIGJsb2NrIGlzIGRpc2FibGVkLiBDaGVjayB5b3VyIHBhZ2UgdGVtcGxhdGUgYW5kIGNob3NlIGEgZGlmZmVyZW50IHZhbHVlIG9mIHBhcmFtICdibG9jaycuPC9lbT4iOwokbGFuZ1snZXJyb3JfZXhwaXJlZGF0ZSddICAgICAgICAgICAgICAgPSAiRW5kIGRhdGUgbXVzdCBiZSBsYXRlciB0aGFuIHN0YXJ0IGRhdGUuIjsKJGxhbmdbJ3lvdWFyZWludGV4dCddICAgICAgICAgICAgICAgICAgID0gIkN1cnJlbnQgZGlyZWN0b3J5IjsKJGxhbmdbJ2RpbWVuc2lvbnMnXSAgICAgICAgICAgICAgICAgICAgID0gIkltYWdlc2l6ZSI7CiRsYW5nWydzaXplJ10gICAgICAgICAgICAgICAgICAgICAgICAgICA9ICJGaWxlc2l6ZSI7CiRsYW5nWydpbmhlcml0X2Zyb21fcGFyZW50J10gICAgICAgICAgICA9ICJJbmhlcml0IGZyb20gcGFyZW50IjsKJGxhbmdbJ25vbmUnXSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gIm5vbmUiOwokbGFuZ1snaW52YWxpZCddICAgICAgICAgICAgICAgICAgICAgICAgPSAiaW52YWxpZCI7CiRsYW5nWydpbnZhbGlkX2Jsb2NrdHlwZSddICAgICAgICAgICAgICA9ICI8ZW0+PHN0cm9uZz5Ob3RpY2U6PC9zdHJvbmc+IEludmFsaWQgdmFsdWUgJyVzJyBvZiBwYXJhbSBibG9ja190eXBlIGluIGJsb2NrICclcycuPGJyIC8+Q2hlY2sgeW91ciBwYWdlIHRlbXBsYXRlLjwvZW0+IjsKJGxhbmdbJ2Vycm9yX2luc3VmZmljaWVudF9ibG9ja3BhcmFtcyddID0gIjxlbT48c3Ryb25nPkVycm9yOjwvc3Ryb25nPiBJbnN1ZmZpY2llbnQgcGFyYW1zLiA8YnIgLz5NaXNzaW5nIHBhcmFtICclcycgZm9yIGJsb2NrICclcycuIENoZWNrIHlvdXIgcGFnZSB0ZW1wbGF0ZS48L2VtPiI7CiRsYW5nWyd5ZXMnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICJZZXMiOwokbGFuZ1snbm8nXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAiTm8iOwokbGFuZ1snZnJvbnRlbmRhY2Nlc3MnXSAgICAgICAgICAgICAgICAgPSAiRnJvbnRlbmQgYWNjZXNzIjsKJGxhbmdbJ3JlZGlyZWN0cGFnZSddICAgICAgICAgICAgICAgICAgID0gIlJlZGlyZWN0IFBhZ2UgaWYgbm8gYWNjZXNzIjsKJGxhbmdbJ3Nob3dsb2dpbmZvcm0nXSAgICAgICAgICAgICAgICAgID0gIlNob3cgbG9naW4gZm9ybSI7CiRsYW5nWydyZWdpc3RlcmVkdXNlcnMnXSAgICAgICAgICAgICAgICA9ICJSZWdpc3RlcmVkIHVzZXJzIG9ubHkiOwokbGFuZ1snYmxvY2snXSAgICAgICAgICAgICAgICAgICAgICAgICAgPSAiQmxvY2siOwokbGFuZ1sndXNlZXhwaXJlZGF0ZSddICAgICAgICAgICAgICAgICAgPSAiVXNlIGV4cGlyZSBkYXRlIjsKJGxhbmdbJ3N0YXJ0ZGF0ZSddICAgICAgICAgICAgICAgICAgICAgID0gIlN0YXJ0IERhdGUiOwokbGFuZ1snZW5kZGF0ZSddICAgICAgICAgICAgICAgICAgICAgICAgPSAiRW5kIERhdGUiOwokbGFuZ1snYmxvY2tjb250ZW50J10gICAgICAgICAgICAgICAgICAgPSAiQmxvY2sgQ29udGVudCI7CiRsYW5nWydzZXRwYWdlaW5hY3RpdmUnXSAgICAgICAgICAgICAgICA9ICJTZXQgUGFnZSB0byBJbmFjdGl2ZSI7CiRsYW5nWydkZWxldGVwYWdlJ10gICAgICAgICAgICAgICAgICAgICA9ICJEZWxldGUgUGFnZSI7CiRsYW5nWyd1bmluc3RhbGxhY3Rpb24nXSAgICAgICAgICAgICAgICA9ICJVbmluc3RhbGwgYWN0aW9uIjsKJGxhbmdbJ3NldGNvbnRlbnQxJ10gICAgICAgICAgICAgICAgICAgID0gIlNldCBhbGwgUGFnZXMgb2YgQWR2YW5jZWRDb250ZW50IGJhY2sgdG8gdHlwZSBDb250ZW50IjsKJGxhbmdbJ3NldGNvbnRlbnQyJ10gICAgICAgICAgICAgICAgICAgID0gIlNldCBhbGwgUGFnZXMgb2YgQWR2YW5jZWRDb250ZW50IGJhY2sgdG8gdHlwZSBDb250ZW50IGFuZCByZW1vdmUgYWRkaXRpb25hbCBjb250ZW50IGJsb2NrcyI7CiRsYW5nWydwcmVmc3VwZGF0ZWQnXSAgICAgICAgICAgICAgICAgICA9ICJQcmVmZXJlbmNlcyB1cGRhdGVkIjsKJGxhbmdbJ3N1Y2Nlc3MnXSAgICAgICAgICAgICAgICAgICAgICAgID0gIk9rIjsKJGxhbmdbJ2Vycm9yJ10gICAgICAgICAgICAgICAgICAgICAgICAgID0gIkVycm9yIjsKJGxhbmdbJ2RlbGV0ZXBhZ2VzJ10gICAgICAgICAgICAgICAgICAgID0gIkRlbGV0ZSBhbGwgcGFnZXMgb2YgdHlwZSBBZHZhbmNlZENvbnRlbnQiOwokbGFuZ1snaW1wb3J0cGFnZXMnXSAgICAgICAgICAgICAgICAgICAgPSAiU2V0IGFsbCBQYWdlcyBvZiB0eXBlICVzIHRvIHR5cGUgJXMuIjsKJGxhbmdbJ3BhZ2VzaW1wb3J0ZWQnXSAgICAgICAgICAgICAgICAgID0gIkFsbCBjb250ZW50IHBhZ2VzIHNldCB0byBBZHZhbmNlZENvbnRlbnQuIjsKJGxhbmdbJ2NvbmZpcm1pbXBvcnQnXSAgICAgICAgICAgICAgICAgID0gIkRvIHlvdSByZWFsbHkgd2FudCB0byBjaGFuZ2UgdGhlIGNvbnRlbnQgdHlwZSBvZiBhbGwgY29udGVudCBwYWdlcz8iOwokbGFuZ1sndG9nZ2xlX21lc3NhZ2UnXSAgICAgICAgICAgICAgICAgPSAiSGlkZSB0aGlzIG1lc3NhZ2UiOwokbGFuZ1snY29udGVudHNldHRpbmdzJ10gICAgICAgICAgICAgICAgPSAiRGVmYXVsdCBBZHZhbmNlZENvbnRlbnQgc2V0dGluZ3MiOwokbGFuZ1sncmVkaXJlY3RwYXJhbXMnXSAgICAgICAgICAgICAgICAgPSAiVVJMIHBhcmFtcyB0byBhcHBlbmQgd2hlbiByZWRpcmVjdGluZyI7CiRsYW5nWydldmFsdWF0ZXNtYXJ0eSddICAgICAgICAgICAgICAgICA9ICJVc2Ugc21hcnR5IHRvIHByb2Nlc3MgdGhlIHBhcmFtcyI7CiRsYW5nWydlcnJvcl9sb2FkaW5nX21vZHVsZSddICAgICAgICAgICA9ICI8ZW0+PHN0cm9uZz5FcnJvcjo8L3N0cm9uZz4gQ291bGQgbm90IGxvYWQgbW9kdWxlICclcycuIChEZWZpbmVkIGZvciBibG9jayAnJXMnIGluIHlvdXIgcGFnZSB0ZW1wbGF0ZS4pPC9lbT4iOwokbGFuZ1snZXJyb3JfY29udGVudGJsb2NrX3N1cHBvcnQnXSAgICAgPSAiPGVtPjxzdHJvbmc+RXJyb3I6PC9zdHJvbmc+IE1vZHVsZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgY29udGVudGJsb2Nrcy4gKERlZmluZWQgZm9yIGJsb2NrICclcycgaW4geW91ciBwYWdlIHRlbXBsYXRlLik8L2VtPiI7CiRsYW5nWydzdWNjZXNzX2ltcG9ydHBhZ2VzJ10gICAgICAgICAgICA9ICJBbGwgcGFnZXMgb2YgdHlwZSAlcyBzdWNjZXNmdWxseSBjaGFuZ2VkIHRvICVzIjsKJGxhbmdbJ3Nob3dfYWR2YW5jZWRjb250ZW50X29wdGlvbnMnXSAgID0gIlNob3cgQWR2YW5jZWRDb250ZW50IG9wdGlvbnMgdGFiIjsKJGxhbmdbJ2Rpc3BsYXlfc2V0dGluZ3MnXSAgICAgICAgICAgICAgID0gIiVzIGRpc3BsYXkgc2V0dGluZ3MiOwokbGFuZ1snc2F2ZV9jb2xsYXBzZV9zdGF0dXMnXSAgICAgICAgICAgPSAiU2F2ZSBjb2xscGFzZSBzdGF0dXMgb2YgJXMiOwokbGFuZ1snY29udGVudF9ibG9ja3MnXSAgICAgICAgICAgICAgICAgPSAiY29udGVudCBibG9ja3MiOwokbGFuZ1snYmxvY2tfbWVzc2FnZSddICAgICAgICAgICAgICAgICAgPSAiY29udGVudCBibG9jayBtZXNzYWdlIjsKJGxhbmdbJ2Jsb2NrX2dyb3VwcyddICAgICAgICAgICAgICAgICAgID0gImJsb2NrIGdyb3VwcyI7CiRsYW5nWydjb2xsYXBzZV9kZWZhdWx0J10gICAgICAgICAgICAgICA9ICJDb2xsYXBzZSAlcyBieSBkZWZhdWx0IjsKJGxhbmdbJ3Blcl9wYWdlJ10gICAgICAgICAgICAgICAgICAgICAgID0gInBlciBwYWdlIjsKJGxhbmdbJ3Blcl90ZW1wbGF0ZSddICAgICAgICAgICAgICAgICAgID0gInBlciB0ZW1wbGF0ZSI7CiRsYW5nWydib3RoMSddICAgICAgICAgICAgICAgICAgICAgICAgICA9ICJ0ZW1wbGF0ZSBPUiBwYWdlICI7CiRsYW5nWydib3RoMiddICAgICAgICAgICAgICAgICAgICAgICAgICA9ICJ0ZW1wbGF0ZSBBTkQgcGFnZSI7CiRsYW5nWydjb250ZW50J10gICAgICAgICAgICAgICAgICAgICAgICA9ICdDb250ZW50JzsKJGxhbmdbJ2NvbnRlbnQyJ10gICAgICAgICAgICAgICAgICAgICAgID0gJ0FkdmFuY2VkIENvbnRlbnQnOwokbGFuZ1sncHJlZnMnXSAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnUHJlZmVyZW5jZXMnOwokbGFuZ1snbXVsdGlfaW5wdXQnXSAgICAgICAgICAgICAgICAgICAgPSAnTXVsdGkgSW5wdXRzJzsKJGxhbmdbJ211bHRpX2lucHV0X3RwbCddICAgICAgICAgICAgICAgID0gJ011bHRpIElucHV0IFRlbXBsYXRlcyc7CiRsYW5nWydhZGRfbXVsdGlfaW5wdXQnXSAgICAgICAgICAgICAgICA9ICdBZGQgbmV3IG11bHRpIGlucHV0JzsKJGxhbmdbJ2FkZF9tdWx0aV9pbnB1dF90cGwnXSAgICAgICAgICAgID0gJ0FkZCBuZXcgbXVsdGkgaW5wdXQgdGVtcGxhdGUnOwokbGFuZ1snaW5wdXRfaWQnXSAgICAgICAgICAgICAgICAgICAgICAgPSAnSW5wdXQgSUQnOwokbGFuZ1snaW5wdXRfZmllbGRzJ10gICAgICAgICAgICAgICAgICAgPSAnSW5wdXQgZmllbGRzJzsKJGxhbmdbJ3RwbF9uYW1lJ10gICAgICAgICAgICAgICAgICAgICAgID0gJ1RlbXBsYXRlIG5hbWUnOwokbGFuZ1snZXJyb3JfdGVtcGxhdGUnXSAgICAgICAgICAgICAgICAgPSAnVGVtcGxhdGUgaXMgYSByZXF1aXJlZCBmaWVsZCBhbmQgbWF5IG5vdCBiZSBlbXB0eSc7CiRsYW5nWydlcnJvcl9pbnB1dF9maWVsZHMnXSAgICAgICAgICAgICA9ICJJbnB1dCBmaWVsZHMgaXMgYSByZXF1aXJlZCBmaWVsZCBhbmQgbWF5IG5vdCBiZSBlbXB0eS4iOwokbGFuZ1snZXJyb3JfaW5wdXRfaWQnXSAgICAgICAgICAgICAgICAgPSAiTm8gaW5wdXQgaWQgZ2l2ZW4gb3IgaW5wdXQgaWQgYWxyZWFkeSBleGlzdHMuIjsKJGxhbmdbJ2Vycm9yX2lucHV0X2lkX2V4aXN0cyddICAgICAgICAgID0gIklucHV0IElEIGlzIGFscmVhZHkgaW4gdXNlLiBDaG9vc2UgYSBkaWZmZXJlbnQgb25lLiAobXVzdCBiZSB1bmlxdWUpIjsKJGxhbmdbJ211bHRpX2lucHV0X2FkZGVkJ10gICAgICAgICAgICAgID0gIk11bHRpIElucHV0IGFkZGVkLiI7CiRsYW5nWydtdWx0aV9pbnB1dF9kZWxldGVkJ10gICAgICAgICAgICA9ICJNdWx0aSBJbnB1dCBkZWxldGVkLiI7CiRsYW5nWydtdWx0aV9pbnB1dF91cGRhdGVkJ10gICAgICAgICAgICA9ICJNdWx0aSBJbnB1dCB1cGRhdGVkLiI7CiRsYW5nWydtdWx0aV9pbnB1dF90cGxfYWRkZWQnXSAgICAgICAgICA9ICJNdWx0aSBJbnB1dCB0ZW1wbGF0ZSBhZGRlZC4iOwokbGFuZ1snbXVsdGlfaW5wdXRfdHBsX3VwZGF0ZWQnXSAgICAgICAgPSAiTXVsdGkgSW5wdXQgdGVtcGxhdGUgdXBkYXRlZC4iOwokbGFuZ1snbXVsdGlfaW5wdXRfdHBsX2RlbGV0ZWQnXSAgICAgICAgPSAiTXVsdGkgSW5wdXQgdGVtcGxhdGUgZGVsZXRlZC4iOwoKJGxhbmdbJ2RlbGV0ZV9zZWxlY3RlZCddICAgICAgICAgICAgICAgID0gIkRlbGV0ZSBzZWxlY3RlZCBpdGVtcyI7CiRsYW5nWydjb25maXJtX2RlbGV0ZSddICAgICAgICAgICAgICAgICA9ICJEbyB5b3UgcmVhbGx5IHdhbnQgZG8gZGVsZXRlIHRoaXMgaXRlbT8iOwokbGFuZ1snY29uZmlybV9kZWxldGVfc2VsZWN0ZWQnXSAgICAgICAgPSAiRG8geW91IHJlYWxseSB3YW50IGRvIGRlbGV0ZSB0aGUgc2VsZWN0ZWQgaXRlbXM/IjsKJGxhbmdbJ3VzZV9jb250ZW50dHlwZSddICAgICAgICAgICAgICAgID0gIlVzZSBjb250ZW50dHlwZSI7CiRsYW5nWydoZWxwX3RwbF92YXJzJ10gICAgICAgICAgICAgICAgICA9IDw8PEVPVAo8cD48c3Ryb25nPlRlbXBsYXRlIHZhcnM6PC9zdHJvbmc+PC9wPgo8cD48cHJlPjxjb2RlPntcJGlucHV0c308L2NvZGU+PC9wcmU+IGlzIGFuIGFycmF5IHRoYXQgY29udGFpbnMgYWxsIGRlZmluZWQgaW5wdXQgZWxlbWVudHMgb2YgdGhhdCBtdWx0aSBpbnB1dCBibG9jay48YnIgLz4KRWFjaCBpbnB1dCBlbGVtZW50IGlzIGFuIGFycmF5IHRoYXQgY29udGFpbnMgYWxsIGl0cyBwYXJhbXMuIDxiciAvPgpTZWUgbW9kdWxlIGhlbHAgZm9yIG1vcmUgaW5mby48YnIgLz4KQWRkaXRpb25hbCBwYXJhbSBpcyAiaW5wdXQiIHRoYXQgd2lsbCBwcmludCBvdXQgdGhlIGlucHV0IGVsZW1lbnQuPGJyIC8+ClRvIGFjY2VzcyB0aGUgcGFyYW1zIHVzZSB0aGUgZG90IHN5bnRheC48YnIgLz4KRXhhbXBsZTo8L3A+CjxwcmU+PGNvZGU+e2ZvcmVhY2ggZnJvbT1cJGlucHV0cyBpdGVtPWVsbX0KCXtcJGVsbS5sYWJlbH06Jm5ic3A7e1wkZWxtLmlucHV0fSZsdDticiAvJmd0Owp7L2ZvcmVhY2h9PC9jb2RlPjwvcHJlPgpFT1Q7CiRsYW5nWydoZWxwJ10gPSA8PDxFT1QKPGJyIC8+CjxoMz5XaGF0IGRvZXMgdGhpcyBkbz88L2gzPgo8cD5UaGlzIGlzIGEgbW9kaWZpY2F0aW9uIG9mIHRoZSBkZWZhdWx0IGNvbnRlbnQgdHlwZSAiQ29udGVudCIgb2YgQ01TbXMuPGJyIC8+Ckl0IHByb3ZpZGVzIG1vcmUgZmxleGliaWxpdHkgYnkgY3JlYXRpbmcgY3VzdG9tIGlucHV0IGNvbnRyb2xzIGluIGJhY2tlbmQuPGJyIC8+ClVzZXJzIGNhbiBhZGQgZHJvcGRvd25zLCBtdWx0aXBsZSBzZWxlY3QgbGlzdHMsIGNoZWNrYm94ZXMsIGdyb3VwIGNvbnRlbnQgYmxvY2tzIAppbiBzZXBhcmF0ZSBwYWdlIHRhYnMsIGJsb2NrIHRhYnMgaW5zaWRlIGEgcGFnZSB0YWIgb3IgaW4gZmllbGRzZXRzIGJ5IGp1c3QgCnVzaW5nIGFkZGl0aW9uYWwgcGFyYW1zIGluIHRoZSB0ZW1wbGF0ZSB3aGVuIGNhbGxpbmcgdGhlIGNvbnRlbnQuPGJyIC8+Ckl0IGFsc28gYWRkcyBhYmlsaXR5IHRvIGdyYW50IGFjY2VzcyBvZiBwYWdlcyB0byBjZXJ0YWluIHVzZXJzIG9mIHRoZSAKRnJvbnRFbmRVc2VycyBtb2R1bGUgYW5kIGhpZGUgdGhlIGNvbnRlbnQsIHJlcGxhY2UgaXQgYnkgdGhlIGxvZ2luIGZvcm0gb2YgdGhlIApGcm9udEVuZFVzZXJzIG1vZHVsZSBvciByZWRpcmVjdCB0byBhIHNwZWNpZmllZCBwYWdlIHNob3dpbmcgdGhlIGxvZ2luIGZvcm0gb3IgCmp1c3QgcmVkaXJlY3Qgd2l0aG91dCBkb2luZyBhbnl0aGluZyBlbHNlLjxiciAvPgpQYWdlIHByb3BlcnR5IG9mIEZyb250RW5kVXNlcnMgYWNjZXNzIGFuZCByZWRpcmVjdCBwYWdlIGNhbiBiZSBpbmhlcml0ZWQgYnkgCnBhcmVudCBwYWdlcy48L3A+CjxwPjxlbT48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz4gVG8gZ2V0IHRoZSBmdWxsIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBjb250ZW50IHR5cGUgCmluIGZyb250ZW5kIHlvdSBuZWVkIHRvIGNhbGwgeW91ciBjb250ZW50IHdpdGggdGhlIG1vZHVsZSBwbHVnaW4ge0FkdmFuY2VkQ29udGVudH0gCihjYXNlIHNlbnNpdGl2ZSEpLjxiciAvPgpPdGhlcndpc2UgaXQgbWF5IGJlaGF2ZSBsaWtlIHRoZSBkZWZhdWx0IGNvbnRlbnQgdHlwZSBwbHVnaW4uPC9lbT48L3A+CjxwPllvdSBjYW4gZXZlbiB1c2Ugc21hcnR5IGxvZ2ljIGluIHBhcmFtZXRlciB2YWx1ZXMuIFRoYXQgbWVhbnMgeW91IGNhbiB1c2UgdGhlIApyZXN1bHQgb2YgYSBwbHVnaW4sIGFuIHVkdCBvciBldmVuIGEgbW9kdWxlIG9yIGp1c3QgdGhlIGNvbnRlbnQgb2YgYSBnbG9iYWwgCmNvbnRlbnQgYmxvY2sgYXMgcGFyYW1ldGVyIHZhbHVlIHRvIGNyZWF0ZSBkeW5hbWljIHZhbHVlcy48L3A+CjxoMz5Ib3cgaXMgaXQgdXNlZD88L2gzPgo8cD5BZnRlciBpbnN0YWxsYXRpb24gdGhlIG1vZHVsZSBzZXR0aW5ncyBjYW4gYmUgZm91bmQgaW4gIkV4dGVuc2lvbnMtPkFkdmFuY2VkQ29udGVudCIuPC9wPgo8cD5BZGRpdGlvbmFsbHkgeW91IHdpbGwgaGF2ZSBhIG5ldyBjb250ZW50IHR5cGUgIkFkdmFuY2VkQ29udGVudCIgYXZhaWxhYmxlIAp3aGVuIGFkZGluZy9lZGl0aW5nIGEgcGFnZS48YnIgLz4KPHA+QWRkIHRoZSBmb2xsb3dpbmcgcGFyYW1zIHRvIHlvdXIgY29udGVudCB0YWcgaW4geW91ciBwYWdlIHRlbXBsYXRlLCAKY2hhbmdlIHRoZSBjb250ZW50IHR5cGUgb2YgeW91ciBwYWdlIHRvICJBZHZhbmNlZENvbnRlbnQiIGFuZCBzZWUgd2hhdCBoYXBwZW5zIAppbiBiYWNrZW5kLi4uPC9wPgo8aDM+V2hhdCBwYXJhbWV0ZXJzIGFyZSBhdmFpbGFibGU/PC9oMz4KPHA+YWxsIHBhcmFtcyBhcmUgb3B0aW9uYWw8L3A+CjxwPjxzdHJvbmc+RGVmYXVsdCBwYXJhbXM6PC9zdHJvbmc+PC9wPgo8dWw+Cgk8bGk+CgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+YmxvY2s8L3R0PiAoc3RyaW5nKQoJCTx1bD4KCQkJPGxpPgoJCQkJQWxsb3dzIHlvdSB0byBoYXZlIG1vcmUgdGhhbiBvbmUgY29udGVudCBibG9jayBwZXIgcGFnZS4gSWYgbXVsdGlwbGUgY29udGVudCB0YWdzIGFyZSBwdXQgb24gYSB0ZW1wbGF0ZSwgdGhhdCBudW1iZXIgb2YgZWRpdCBib3hlcyB3aWxsIGJlIGRpc3BsYXllZCBpZiB0aGUgcGFnZSBpcyBlZGl0ZWQuPGJyIC8+CgkJCQllLmcuOiA8Y29kZT57Y29udGVudCBibG9jaz0iU2Vjb25kIENvbnRlbnQgYmxvY2sifTwvY29kZT48YnIgLz4KCQkJCU5vdywgaWYgeW91IGVkaXQgYSBwYWdlIHRoZXJlIHdpbGwgYmEgYSB0ZXh0YXJlYSBjYWxsZWQgIlNlY29uZCBDb250ZW50IGJsb2NrIi48YnIgLz4KCQkJCTxlbT48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz4gVGhlIG5hbWUgb2YgdGhlIGNvbnRlbnQgYmxvY2sgbWF5IGNvbnRhaW4gb25seSBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgdW5kZXJzY29yZXMgKG5vIHdoaXRlc3BhY2VzLCBzcGVjaWFsIGNoYXJzLCB1bWxhdXRzIGV0Yy4pLiBPdGhlcndpc2UgaXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBwcm9wZXIgbmFtZSAoc2ltaWxhciB0byB0aGUgcGFnZSBhbGlhcykuPC9lbT4KCQkJPC9saT4KCQk8L3VsPgoJCTxiciAvPgoJPC9saT4KCTxsaT4KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD53eXNpd3lnPC90dD4gKHRydWUvZmFsc2UpCgkJPHVsPgoJCQk8bGk+SWYgc2V0IHRvIGZhbHNlLCB0aGVuIGEgd3lzaXd5ZyB3aWxsIG5ldmVyIGJlIHVzZWQgd2hpbGUgZWRpdGluZyB0aGlzIGJsb2NrLiBJZiB0cnVlLCB0aGVuIGl0IGFjdHMgYXMgbm9ybWFsLjwvbGk+CgkJPC91bD4KCQk8YnIgLz4KCTwvbGk+Cgk8bGk+CgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+b25lbGluZTwvdHQ+ICh0cnVlL2ZhbHNlKQoJCTx1bD4KCQkJPGxpPklmIHNldCB0byB0cnVlLCB0aGVuIG9ubHkgb25lIGVkaXQgbGluZSB3aWxsIGJlIHNob3duIHdoaWxlIGVkaXRpbmcgdGhpcyBibG9jay4gSWYgZmFsc2UsIHRoZW4gaXQgYWN0cyBhcyBub3JtYWwuIE9ubHkgd29ya3Mgd2hlbiBibG9jayBwYXJhbWV0ZXIgaXMgdXNlZC48L2xpPgoJCTwvdWw+CgkJPGJyIC8+Cgk8L2xpPgoJPGxpPgoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmRlZmF1bHQ8L3R0PiAoc3RyaW5nKQoJCTx1bD4KCQkJPGxpPkRlZmF1bHQgY29udGVudCB3aGVuIGNyZWF0aW5nIGEgbmV3IHBhZ2UuPC9saT4KCQk8L3VsPgoJCTxiciAvPgoJPC9saT4KCTxsaT4KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5sYWJlbDwvdHQ+IChzdHJpbmcpCgkJPHVsPgoJCQk8bGk+UHJvbXB0IGZvciB0aGlzIGNvbnRlbnQgYmxvY2suIFBvc3NpYmxlIHZhbHVlcyBhcmUgYW55IGV4cHJlc3Npb24uIElmIGJsYW5rLCB0aGUgdW5jb252ZXJ0ZWQgYmxvY2sgbmFtZSBpcyB1c2VkLjwvbGk+CgkJPC91bD4KCQk8YnIgLz4KCTwvbGk+Cgk8bGk+CgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+YXNzaWduPC90dD4gKHN0cmluZykKCQk8dWw+CgkJCTxsaT4KCQkJCUFzc2lnbnMgdGhlIGNvbnRlbnQgdG8gYSBzbWFydHkgcGFyYW1ldGVyLCB3aGljaCB5b3UgY2FuIHRoZW4gdXNlIGluIG90aGVyIGFyZWFzIG9mIHRoZSBwYWdlLCBvciB1c2UgdG8gdGVzdCB3aGV0aGVyIGNvbnRlbnQgZXhpc3RzIGluIGl0IG9yIG5vdC48YnIgLz4KCQkJCUV4YW1wbGUgb2YgcGFzc2luZyBwYWdlIGNvbnRlbnQgdG8gYSBVc2VyIERlZmluZWQgVGFnIGFzIGEgcGFyYW1ldGVyOjxiciAvPgoJCQkJPGNvZGU+e2NvbnRlbnQgYXNzaWduPXBhZ2Vjb250ZW50fTxiciAvPgoJCQkJe3RhYmxlX29mX2NvbnRlbnRzIHRoZXBhZ2Vjb250ZW50PSJcJHBhZ2Vjb250ZW50In08L2NvZGU+PGJyIC8+CgkJCQk8ZW0+PHN0cm9uZz5Ob3RpY2U6PC9zdHJvbmc+IEZvciBzb21lIHJlYXNvbiB0aGlzIHBhcmFtIGRvZXMgbm90IHdvcmsgYXQgdGhlIG1vbWVudCB3aXRoIHRoZSBtb2R1bGUgcGx1Z2luIHtBdmFuY2VkQ29udGVudH0uIFVzZSA8YnIgLz48Y29kZT57Y2FwdHVyZSBhc3NpZ249ImZvbyJ9e0FkdmFuY2VkQ29udGVudH17L2NhcHR1cmV9PC9jb2RlPiA8YnIgLz5pbnN0ZWFkLjwvZW0+CgkJCTwvbGk+CgkJPC91bD4KCQk8YnIgLz4KCTwvbGk+CjwvdWw+CjxwPjxzdHJvbmc+QWR2YW5jZWQgcGFyYW1zOjwvc3Ryb25nPjwvcD4KPHVsPgoJPGxpPgoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmJsb2NrX3R5cGU8L3R0PiAodGV4dCxjaGVja2JveCxkcm9wZG93bixzZWxlY3RfbXVsdGlwbGUsZGF0ZSxtdWx0aV9pbnB1dCkgCgkJPHVsPgoJCQk8bGk+QWxsb3dzIHlvdSB0byBzcGVjaWZ5IHdoYXQgY29udGVudCBjb250cm9sIHR5cGUgaXMgdXNlZCBpbiB0aGUgYmFjayBlbmQuPC9saT4KCQk8L3VsPgoJCTxiciAvPgoJPC9saT4KCTxsaT4KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5wYWdlX3RhYjwvdHQ+IChzdHJpbmcpCgkJPHVsPgoJCQk8bGk+CgkJCQlUaGlzIHBhcmFtZXRlciBzZXRzIHRoZSB0YWIgaW4gd2hpY2ggdGhlIGNvbnRlbnQgYmxvY2sgaXMgZGlzcGxheWVkIGluIHRoZSBiYWNrZW5kLjxiciAvPgoJCQkJUG9zc2libGUgdmFsdWVzIGFyZSAibWFpbiIgKCA9IFRhYiAiTWFpbiBNZW51IiksICJvcHRpb25zIiAoID0gVGFiICJPcHRpb25zIiksIG9yIGFueSBvdGhlciBhcmJpdHJhcnkgdmFsdWU8YnIgLz4KCQkJCTxlbT5lLmcuIHlvdSBjYW4gYWRkIGEgY2hlY2tib3ggdG8gdGhlIG9wdGlvbnMgdGFiIG9yIGNyZWF0ZSBuZXcgdGFiczwvZW0+LgoJCQk8L2xpPgoJCTwvdWw+CgkJPGJyIC8+Cgk8L2xpPgoJPGxpPgoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmJsb2NrX3RhYjwvdHQ+IChzdHJpbmcpCgkJPHVsPgoJCQk8bGk+V2l0aCB0aGlzIHBhcmFtZXRlciwgdGhlIGJsb2NrcyB3aXRoaW4gYSBwYWdlIHRhYiBjYW4gYmUgZnVydGhlciBkaXZpZGVkIGludG8gdGFicyBvciBjYW4gYmUgZ3JvdXBlZCB0b2dldGhlci4gQW55IGV4cHJlc3Npb24gY2FuIGJlIHVzZWQgYXMgYSBwb3NzaWJsZSB2YWx1ZS48L2xpPgoJCTwvdWw+CgkJPGJyIC8+Cgk8L2xpPgoJPGxpPgoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmJsb2NrX2dyb3VwPC90dD4gKHN0cmluZykKCQk8dWw+CgkJCTxsaT5XaXRoIHRoaXMgcGFyYW1ldGVyLCBtdWx0aXBsZSBibG9ja3MgY2FuIGJlIGdyb3VwZWQgaW4gYSBmaWVsZHNldC4gQW55IGV4cHJlc3Npb24gY2FuIGJlIHVzZWQgYXMgYSBwb3NzaWJsZSB2YWx1ZS48L2xpPgoJCTwvdWw+CgkJPGJyIC8+Cgk8L2xpPgoJPGxpPgoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmFjdGl2ZTwvdHQ+ICh0cnVlL2ZhbHNlKQoJCTx1bD4KCQkJPGxpPgoJCQkJQWxsb3dzIHlvdSB0byBkaXNhYmxlIGEgY29udGVudCBibG9jay4gRGlzYWJsZWQgY29udGVudCBibG9ja3Mgd29uJ3QgYmUgc2hvd24gaW4gYmFja2VuZCBhcyB3ZWxsIGFzIGluIGZyb250ZW5kLiAob25seSB3b3JrcyB3aXRoIHtBZHZhbmNlZENvbnRlbnR9IHBsdWdpbik8YnIgLz4KCQkJPC9saT4KCQk8L3VsPgoJCTxiciAvPgoJPC9saT4KCTxsaT4KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5lZGl0b3JfZ3JvdXBzPC90dD4gKHN0cmluZykKCQk8dWw+CgkJCTxsaT4KCQkJCUEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgZ3JvdXAgbmFtZXMgdGhhdCBhcmUgYWxsb3dlZCB0byBlZGl0IHRoaXMgYmxvY2suCgkJCTwvbGk+CgkJPC91bD4KCQk8YnIgLz4KCTwvbGk+Cgk8bGk+CgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+ZWRpdG9yX3VzZXJzPC90dD4gKHN0cmluZykKCQk8dWw+CgkJCTxsaT4KCQkJCUEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgdXNlciBuYW1lcyB0aGF0IGFyZSBhbGxvd2VkIHRvIGVkaXQgdGhpcyBibG9jay4KCQkJPC9saT4KCQk8L3VsPgoJCTxiciAvPgoJPC9saT4KCTxlbT48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz4gaWYgdGhlIHBhcmFtcyA8dHQ+ZWRpdG9yX3VzZXJzPC90dD4gYW5kIDx0dD5lZGl0b3JfZ3JvdXBzPC90dD4gYXJlIGVtcHR5IHRoZSBibG9jayBtYXkgYmUgZWRpdGVkIGJ5IGFueSB1c2VyIHdpdGggc3VmZmljaWVudCBwZXJtaXNzaW9uIHRvIGVkaXQgYSBwYWdlPC9lbT48YnIgLz48YnIgLz4KCTxsaT4KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5mZXVfYWNjZXNzPC90dD4KCQk8dWw+CgkJCTxsaT4KCQkJCUEgbGlzdCBvZiBmZXUgZ3JvdXAgaWRzIHNlcGFyYXRlZCBieSBhIGNvbW1hLjxiciAvPgoJCQkJVGhpcyBzaG93cyB0aGUgY29udGVudCBibG9jayBvbmx5IHRvIGNlcnRhaW4gZmV1IGdyb3Vwcy48YnIgLz4KCQkJPC9saT4KCQk8L3VsPgoJCTxiciAvPgoJPC9saT4KCTxsaT4KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5mZXVfYWN0aW9uPC90dD4gKHRydWUvZmFsc2UpCgkJPHVsPgoJCQk8bGk+CgkJCQlTcGVjaWZ5IGlmIHRoZSBsb2dpbiBmb3JtIG9mIHRoZSBmZXUgbW9kdWxlIHdpbGwgYmUgc2hvd24gb3Igbm90LjxiciAvPgoJCQkJPGVtPjxzdHJvbmc+Tm90aWNlOjwvc3Ryb25nPiBUaGUgbG9naW4gZm9ybSB3aWxsIG9ubHkgYmUgc2hvd24gb25lIHRpbWUuPGJyIC8+CgkJCQlJZiB0aGVyZSBhcmUgbXVsdGlwbGUgYmxvY2tzIHdpdGggbGltaXRlZCBmZXVfYWNjZXNzIGFuZCBmZXVfYWN0aW9uIHNldCB0byB0cnVlIG9ubHkgdGhlIGZpcnN0IGJsb2NrcyBsb2dpbiBmb3JtIHdpbGwgYmUgc2hvd24gYW5kIGFsbCBvdGhlciBibG9ja3Mgd2lsbCBqdXN0IGJlIGVtcHR5LjwvZW0+PGJyIC8+CgkJCTwvbGk+CgkJPC91bD4KCQk8YnIgLz4KCTwvbGk+Cgk8bGk+CgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+YWxsb3dfbm9uZTwvdHQ+ICh0cnVlL2ZhbHNlKQoJCTx1bD4KCQkJPGxpPlNldCB0byB0cnVlIGlmIHRoZSB1c2VyIG1heSBlbnRlciBlbXB0eSB2YWx1ZXMuIDxiciAvPklmIHNldCB0byBmYWxzZSBhbmQgdmFsdWUgaXMgZW1wdHkgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHBhcmFtICJkZWZhdWx0IiB3aWxsIGJlIHVzZWQuIDxiciAvPklmIHNldCB0byB0cnVlIGFuZCBibG9jayBpcyBvZiB0eXBlIGltYWdlL2ZpbGUgdGhlIG9wdGlvbiAibm9uZSIgKG1vZGU9ImRyb3Bkb3duIikgb3IgYSBidXR0b24gdG8gY2xlYXIgdGhlIHNlbGVjdGVkIGZpbGUvaW1hZ2UgdmFsdWUgKG1vZGU9ImZpbGVwaWNrZXIiKSB3aWxsIGJlIGRpc3BsYXllZC48L2xpPgoJCTwvdWw+CgkJPGJyIC8+Cgk8L2xpPgoJPGxpPgoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PnNtYXJ0eTwvdHQ+ICh0cnVlL2ZhbHNlKQoJCTx1bD4KCQkJPGxpPgoJCQkJVHVybiBzbWFydHkgcHJvY2Vzc2luZyBvZiB2YWx1ZXMgb24vb2ZmLjxiciAvPgoJCQkJSWYgc2V0IHRvIHRydWUgYW55IGdpdmVuIHZhbHVlIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IHRoZSBzbWFydHkgZW5naW5lLjxiciAvPgoJCQkJPGVtPjxzdHJvbmc+Tm90aWNlOiA8L3N0cm9uZz4gQ29uc2lkZXIgdGhhdCB5b3UgY2Fubm90IHVzZSB0aGUgZGVmYXVsdCBzbWFydHkgZGVsaW1pdGVycyB0aGF0IGFyZSB1c2VkIGluIHRoZSB0ZW1wbGF0ZS4gVGhpcyB3aWxsIGNhdXNlIHNtYXJ0eSBlcnJvcnMgaW4gZnJvbnRlbmQuPGJyIC8+CgkJCQlTbyB5b3UgbmVlZCB0byB1c2UgOjo6IGFzIGRlbGltaXRlciBpbnN0ZWFkLjxiciAvPjwvZW0+CgkJCQlFLmcuOiA8Y29kZT57Y29udGVudCBibG9jaz0iQ2F0ZWdvcmllcyIgbGFiZWw9IlNlbGVjdCBhIGNhdGVnb3J5IiBibG9ja190eXBlPSJkcm9wZG93biIgaXRlbXM9Ijo6Omdsb2JhbF9jb250ZW50IG5hbWU9J2NhdGVnb3J5bGlzdCc6OjoiIHNtYXJ0eT0idHJ1ZSJ9PC9jb2RlPgoJCQk8L2xpPgoJCTwvdWw+CgkJPGJyIC8+Cgk8L2xpPgoJPGxpPgoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmRlc2NyaXB0aW9uPC90dD4gKHN0cmluZykgCgkJPHVsPgoJCQk8bGk+QWxsb3dzIHlvdSB0byBhZGQgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiB0byB0aGF0IGJsb2NrIGZvciB5b3VyIGVkaXRvcnMuPC9saT4KCQk8L3VsPgoJCTxiciAvPgoJPC9saT4KCTxsaT4KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5jb2xsYXBzZTwvdHQ+ICh0cnVlL2ZhbHNlKQoJCTx1bD4KCQkJPGxpPgoJCQkJU2V0IHRvIHRydWUvZmFsc2UgdG8gZGlzcGxheSBibG9jayBpbiBiYWNrZW5kIGluIGNvbGxhcHNlZC9leHBhbmRlZCBtb2RlIGJ5IGRlZmF1bHQuPGJyIC8+CgkJCQk8ZW0+PHN0cm9uZz5Ob3RpY2U6PC9zdHJvbmc+IHdpbGwgYmUgYWx3YXlzIGZhbHNlIGlmIG5vX2NvbGxhcHNlPXRydWUgaXMgdXNlZC48L2VtPjxiciAvPgoJCQk8L2xpPgoJCTwvdWw+CgkJPGJyIC8+Cgk8L2xpPgoJPGxpPgoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0Pm5vX2NvbGxhcHNlPC90dD4gKHRydWUvZmFsc2UpCgkJPHVsPgoJCQk8bGk+CgkJCQlTZXQgdG8gZmFsc2UgdG8gZGlzYWJsZSBmb2xkaW5nIG9mIGJsb2Nrcy48YnIgLz4KCQkJCTxlbT48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz4gaWYgc2V0IHRvIHRydWUgcGFyYW0gY29sbGFwc2UgaXMgYWx3YXlzIGZhbHNlLjwvZW0+PGJyIC8+CgkJCTwvbGk+CgkJPC91bD4KCQk8YnIgLz4KCTwvbGk+Cgk8bGk+CgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+cmVxdWlyZWQ8L3R0PiAodHJ1ZS9mYWxzZSkKCQk8dWw+CgkJCTxsaT4KCQkJCVNldCB0byB0cnVlIGlmIHRoaXMgYmxvY2sgbWF5IG5vdCBiZSBlbXB0eS48YnIgLz4KCQkJPC9saT4KCQk8L3VsPgoJCTxiciAvPgoJPC9saT4KPC91bD4KPHA+PHN0cm9uZz5QYXJhbXMgb2YgYmxvY2t0eXBlICJjaGVja2JveCI6PC9zdHJvbmc+PC9wPgo8dWw+Cgk8bGk+CgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+ZGVmYXVsdDwvdHQ+ICh0cnVlL2ZhbHNlKSAKCQk8dWw+CgkJCTxsaT4KCQkJCWNoZWNrcy91bmNoZWNrcyB0aGUgY2hlY2tib3ggYnkgZGVmYXVsdCB3aGVuIGFkZGluZyBhIHBhZ2U8YnIgLz4KCQkJCTxlbT48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz4gVXNlICIxIiBmb3IgY2hlY2tlZCBhbmQgIjAiIGZvciB1bmNoZWNrZWQgYnkgZGVmYXVsdDxiciAvPjwvZW0+CgkJCQlFLmcuIDxjb2RlPntjb250ZW50IGJsb2NrX3R5cGU9ImNoZWNrYm94IiBkZWZhdWx0PTF9PC9jb2RlPgoJCQk8L2xpPgoJCTwvdWw+CgkJPGJyIC8+Cgk8L2xpPgo8L3VsPgo8cD48c3Ryb25nPlBhcmFtcyBvZiBibG9ja3R5cGUgImRyb3Bkb3duIi8ic2VsZWN0X211bHRpcGxlIjo8L3N0cm9uZz48L3A+Cjx1bD4KCTxsaT4KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5pdGVtczwvdHQ+IChzdHJpbmcpCgkJPHVsPgoJCQk8bGk+SXRlbSBsYWJlbChzKSBvZiB0aGUgZmllbGQocykgKHNlcGFyYXRlZCBieSBhIGRlbGltaXRlciAtIGRlZmF1bHQgaXMgfCAocGlwZSkpPC9saT4KCQk8L3VsPgoJCTxiciAvPgoJPC9saT4KCTxsaT4KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD52YWx1ZXM8L3R0PiAoc3RyaW5nKQoJCTx1bD4KCQkJPGxpPlZhbHVlKHMpIG9mIHRoZSBpdGVtcyAoc2VwYXJhdGVkIGJ5IGEgZGVsaW1pdGVyIC0gZGVmYXVsdCBpcyB8IChwaXBlKSk8L2xpPgoJCTwvdWw+CgkJPGJyIC8+Cgk8L2xpPgoJPGVtPjxzdHJvbmc+Tm90aWNlOjwvc3Ryb25nPiBpZiB0aGVyZSBhcmUgbGVzcyB2YWx1ZXMgdGhhbiBpdGVtcyB0aGUgaXRlbSBsYWJlbHMgd2lsbCBiZSB1c2VkIGFzIHZhbHVlcyAoYW5kIHZpc2UgdmVyc2EpLjwvZW0+PGJyIC8+PGJyIC8+Cgk8bGk+CgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+ZGVmYXVsdDwvdHQ+IChzdHJpbmcpCgkJPHVsPgoJCQk8bGk+CgkJCQlQcmVzZWxlY3RlZCB2YWx1ZShzKSAoc2VwYXJhdGVkIGJ5IGEgZGVsaW1pdGVyIC0gZGVmYXVsdCBpcyB8IChwaXBlKSk8YnIgLz4KCQkJPC9saT4KCQk8L3VsPgoJCTxiciAvPgoJPC9saT4KCTxsaT4KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5kZWxpbWl0ZXI8L3R0PiAoc3RyaW5nKQoJCTx1bD4KCQkJPGxpPkEgc2lnbiBvciBzdHJpbmcgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZGV2aWRlIHRoZSBpdGVtcy92YWx1ZXMgKGRlZmF1bHQgaXMgfCAocGlwZSkpPC9saT4KCQk8L3VsPgoJCTxiciAvPgoJPC9saT4KCTxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5zaXplPC90dD4gKGludGVnZXIpCgkJPHVsPgoJCQk8bGk+SGVpZ2h0IG9mIGNvbnRlbnQgYmxvY2sgaW4gYmFjayBlbmQgaWYgPGNvZGU+YmxvY2tfdHlwZT0ic2VsZWN0X211bHRpcGxlIjwvY29kZT4gaXMgc2V0LiA8ZW0+KERlZmF1bHQgaXMgbnVtYmVyIG9mIGl0ZW1zKTwvZW0+PC9saT4KCQk8L3VsPgoJCTxiciAvPgoJPC9saT4KCTxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5zb3J0YWJsZV9pdGVtczwvdHQ+ICh0cnVlL2ZhbHNlKSAtIHNlbGVjdF9tdWx0aXBsZSBvbmx5CgkJPHVsPgoJCQk8bGk+CgkJCQlJZiBzZXQgdG8gdHJ1ZSB0aGUgaXRlbXMgd29uJ3QgYmUgc2hvd24gYXMgYSBtdWx0aXBsZSBzZWxlY3QgaW5wdXQgd2l0aCBvcHRpb25zIGJ1dCBhcyBhIGxpc3Qgb2YgY2hlY2tib3hlcyB0aGF0IGNhbiBiZSByZW9yZGVyZWQuPGJyIC8+RWFjaCByb3cgY29udGFpbnMgdGhlIGl0ZW0gbGFiZWwgYW5kIGEgY2hlY2tib3ggd2l0aCB0aGUgaXRlbSB2YWx1ZS48YnIgLz4KCQkJCTxlbT48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz4gb25seSB0aGUgb3JkZXIgb2YgdGhlIDxzdHJvbmc+c2VsZWN0ZWQ8L3N0cm9uZz4gaXRlbXMgd2lsbCBiZSBzdG9yZWQgYW5kIGFsd2F5cyBkaXNwbGF5ZWQgb24gdGhlIHRvcCBvZiB0aGUgbGlzdCB3aGVuIHJlbG9hZGluZyB0aGUgZWRpdCBwYWdlLjxiciAvPgoJCQkJVW5zZWxlY3RlZCBpdGVtcyB3aWxsIGFwcGVuZGVkIGluIHRoYXQgb3JkZXIgdGhleSBhcmUgZGVmaW5lZCBpbiB0aGUgdGVtcGxhdGU8L2VtPgoJCQk8L2xpPgoJCTwvdWw+CgkJPGJyIC8+Cgk8L2xpPgo8L3VsPgo8cD48c3Ryb25nPlBhcmFtcyBvZiBibG9ja3R5cGUgImRhdGUiOjwvc3Ryb25nPjwvcD4KPHVsPgoJPGxpPgoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PnN0ZXBfaG91cnM8L3R0PiAoaW50KSAKCQk8dWw+CgkJCTxsaT4KCQkJCXN0ZXBzIG9mIGhvdXJzIGluIHRoZSBjbG9jayBkcm9wZG93bi4gKGRlZmF1bHQgaXMgMSkKCQkJPC9saT4KCQk8L3VsPgoJCTxiciAvPgoJPC9saT4KCTxsaT4KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5zdGFydF9ob3VyPC90dD4gKGludCkgCgkJPHVsPgoJCQk8bGk+CgkJCQl0aGUgc3RhcnQgaG91ciBvZiB0aGUgY2xvY2sgZHJvcGRvd24uIChkZWZhdWx0IGlzIDApCgkJCTwvbGk+CgkJPC91bD4KCQk8YnIgLz4KCTwvbGk+Cgk8bGk+CgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+ZW5kX2hvdXI8L3R0PiAoaW50KSAKCQk8dWw+CgkJCTxsaT4KCQkJCXRoZSBlbmQgaG91ciBvZiB0aGUgY2xvY2sgZHJvcGRvd24gKGRlZmF1bHQgaXMgMTIgb3IgMjMpCgkJCTwvbGk+CgkJPC91bD4KCQk8YnIgLz4KCTwvbGk+Cgk8bGk+CgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+c2hvdzI0aDwvdHQ+ICh0cnVlL2ZhbHNlKSAKCQk8dWw+CgkJCTxsaT4KCQkJCXNldCB0byBmYWxzZSBpZiBBTS9QTSBpcyB1c2VkLiAoZGVmYXVsdCBpcyB0cnVlKQoJCQk8L2xpPgoJCTwvdWw+CgkJPGJyIC8+Cgk8L2xpPgoJPGxpPgoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PnN0ZXBfbWludXRlczwvdHQ+IChpbnQpIAoJCTx1bD4KCQkJPGxpPgoJCQkJc3RlcHMgb2YgbWludXRlcyBpbiB0aGUgY2xvY2sgZHJvcGRvd24uIChkZWZhdWx0IGlzIDEwKQoJCQk8L2xpPgoJCTwvdWw+CgkJPGJyIC8+Cgk8L2xpPgoJPGxpPgoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PnN0YXJ0X21pbnV0ZTwvdHQ+IChpbnQpIAoJCTx1bD4KCQkJPGxpPgoJCQkJdGhlIHN0YXJ0IG1pbnV0ZSBvZiB0aGUgY2xvY2sgZHJvcGRvd24uIChkZWZhdWx0IGlzIDApCgkJCTwvbGk+CgkJPC91bD4KCQk8YnIgLz4KCTwvbGk+CgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+ZW5kX21pbnV0ZTwvdHQ+IChpbnQpIAoJCTx1bD4KCQkJPGxpPgoJCQkJdGhlIGVuZCBtaW51dGUgb2YgdGhlIGNsb2NrIGRyb3Bkb3duIChkZWZhdWx0IGlzIDU5KQoJCQk8L2xpPgoJCTwvdWw+CgkJPGJyIC8+Cgk8L2xpPgoJPGxpPgoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PnNob3dfY2xvY2s8L3R0PiAodHJ1ZS9mYWxzZSkgCgkJPHVsPgoJCQk8bGk+CgkJCQlzZXQgdG8gZmFsc2UgaWYgbm8gdGltZSBkcm9wZG93biBzaG91bGQgYmUgZGlzcGxheWVkIChkZWZhdWx0IGlzIHRydWUpPGJyIC8+CgkJCQk8ZW0+PHN0cm9uZz5Ob3RpY2U6PC9zdHJvbmc+IElmIHNldCB0byBmYWxzZSAwMDowMCBvJ2Nsb2NrIHdpbGwgYmUgdXNlZDwvZW0+CgkJCTwvbGk+CgkJPC91bD4KCQk8YnIgLz4KCTwvbGk+Cgk8bGk+CgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+ZGF0ZV9mb3JtYXQ8L3R0PiAoc3RyaW5nKSAKCQk8dWw+CgkJCTxsaT4KCQkJCVRoZSBzdHJmdGltZSBkYXRlIGZvcm1hdCB0byBzaG93IGluIGZyb250ZW5kLgoJCQk8L2xpPgoJCTwvdWw+CgkJPGJyIC8+Cgk8L2xpPgo8L3VsPgo8cD48c3Ryb25nPlBhcmFtcyBvZiBibG9ja3R5cGUgIm11bHRpX2lucHV0Ijo8L3N0cm9uZz48L3A+Cjx1bD4KCTxsaT4KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5pbnB1dHM8L3R0PiAoY3N2IG9mIGlucHV0IGlkcyB5b3UgY3JlYXRlZCBpbiB0aGUgYmFja2VuZCkgCgkJPGJyIC8+PGJyIC8+Cgk8L2xpPgoJPGxpPgoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PnZhbHVlX2RlbGltaXRlcjwvdHQ+IChhbnkgc3RyaW5nKSAKCQk8dWw+CgkJCTxsaT4KCQkJCVRoaXMgZGVmaW5lcyBhIHN0cmluZyB0aGF0IGRldmlkZXMgdGhlIHZhbHVlcyBvZiB0aGUgaW5wdXRzIG9mIG9uZSBtdWx0aV9pbnB1dCB3aGVuIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UuPGJyIC8+CgkJCQlEZWZhdWx0IGlzICImbHQ7IS0tIG11bHRpX2lucHV0X3ZhbHVlX2RlbGxpbWl0ZXIgLS0mZ3Q7IgoJCQk8L2xpPgoJCTwvdWw+CgkJPGJyIC8+Cgk8L2xpPgoJPGxpPgoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmlucHV0X2RlbGltaXRlcjwvdHQ+IChhbnkgc3RyaW5nKSAKCQk8dWw+CgkJCTxsaT4KCQkJCVRoaXMgZGVmaW5lcyBhIHN0cmluZyB0aGF0IGRldmlkZXMgdGhlIG11bHRpX2lucHV0cyB5b3UgZGVmaW5lZCBmb3IgdGhpcyBjb250ZW50IGJsb2NrIHdoZW4gc3RvcmVkIGluIHRoZSBkYXRhYmFzZS48YnIgLz4KCQkJCURlZmF1bHQgaXMgIiZsdDshLS0gbXVsdGlfaW5wdXRfZGVsbGltaXRlciAtLSZndDsiCgkJCTwvbGk+CgkJPC91bD4KCQk8YnIgLz4KCTwvbGk+Cgk8bGk+CgkJPHA+PHN0cm9uZz5XaGF0IGlzIGEgbXVsdGlfaW5wdXQgZm9yPzwvc3Ryb25nPjwvcD4KCQk8cD5BIG11bHRpX2lucHV0IGJsb2NrIGlzIGEgY29udGVudCBibG9jayB0aGF0IGNvbnNpc3RzIG9mIGRpZmZlcmVudCBpbnB1dCBmaWVsZHMuIDxiciAvPgoJCVlvdSBjYW4gZGVmaW5lIHRoZW0gaW4gdGhlIG1vZHVsZSBhZG1pbmlzdHJhdGlvbiB1c2luZyB0aGUgc2FtZSBzeW50YXggeW91IHVzZSBpbiBhIHRlbXBsYXRlIHdoZW4gZGVmaW5pbmcgYSBjb250ZW50IGJsb2NrLjxiciAvPgoJCU11bHRpIGlucHV0cyBjYW4gYmUgdXNlZCBpZiB5b3Ugd2FudCB0byBzdG9yZSBkaWZmZXJlbnQgdmFsdWVzIGluIG9uZSBjb250ZW50IGJsb2NrIGFuZCBwcm92aWRlIGRpZmZlcmVudCBpbnB1dCB0eXBlcyBmb3IgZWFjaCB2YWx1ZXMuPGJyIC8+CgkJVGhpcyBjYW4gYmUgdXNlZnVsbCBpZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBkcm9wZG93biB0byBzZWxlY3QgYSBtb2R1bGUgdG8gYmUgc2hvd24gaW4gZnJvbnRlbmQgYW5kIHRleHQgaW5wdXQgdG8gZGVmaW5lIHRoZSBtb2R1bGUgcGFyYW1ldGVycy48YnIgLz4KCQlFeGFtcGxlIGZvciBhIG11bHRpX2lucHV0IGluIHBhZ2UgdGVtcGxhdGU6PC9wPgoJCTxwcmU+CgkJPGNvZGU+CgkJe2NvbnRlbnQgYmxvY2s9Im1vZHVsZSIgbGFiZWw9IlBhZ2UgbW9kdWxlcyIgYmxvY2tfdHlwZT0ibXVsdGlfaW5wdXQiIGlucHV0cz0ibW9kdWxlLG1vZHVsZSxtb2R1bGUsbW9kdWxlIn0KCQk8L2NvZGU+CgkJPC9wcmU+CgkJPHA+RXhhbXBsZSBmb3IgdGhlIGRlZmluaXRpb24gb2YgdGhlIG11bHRpX2lucHV0IG5hbWVkICJtb2R1bGUiOjwvcD4KCQk8cHJlPgoJCTxjb2RlPgoJCXtjb250ZW50IGJsb2NrPSJtb2R1bGUgc2VsZWN0aW9uIiBibG9ja190eXBlPSJkcm9wZG93biIgaXRlbXM9InxOZXdzfEdhbGxlcnl8TWVudSJ9CgkJe2NvbnRlbnQgYmxvY2s9Im1vZHVsZSBwYXJhbXMiIGJsb2NrX3R5cGU9InRleHQiIG9uZWxpbmU9dHJ1ZX0KCQk8L2NvZGU+CgkJPC9wcmU+CgkJPHA+V2hhdCBoYXBwZW5zIGlmIHlvdSBlZGl0IGEgcGFnZT88L3A+CgkJPHA+SXQgd2lsbCBzaG93IHlvdSBhIGZpZWxkc2V0IHdpdGggbGVnZW5kICJQYWdlIG1vZHVsZXMiLiA8YnIgLz4KCQlJbnNpZGUgdGhpcyBmaWVsZHNldCBpdCBzaG93cyB0aGUgbXVsdGlfaW5wdXQgbmFtZWQgIm1vZHVsZSIgZm91ciB0aW1lcy48YnIgLz4KCQlUaGF0IG1lYW5zIHlvdSBzZWUgZm91ciBsaW5lcyB3aXRoIHR3byBpbnB1dCBmaWVsZHMuIEEgZHJvcGRvd24gYW5kIGEgdGV4dCBpbnB1dC48L3A+CgkJPHA+V2hhdCBoYXBwZW5zIGlmIHlvdSBzYXZlIGEgcGFnZT88L3A+CgkJPHA+VGhlIG1vZHVsZSBzdG9yZXMgdGhlIHZhbHVlcyBhcyBvbmUgc2luZ2xlIGNvbnRlbnQgcHJvcGVydHkgKGFrYSBjb250ZW50YmxvY2spIGFuZCBzZXBhcmF0ZXMgdGhlIGlucHV0cyBieSBhIGdpdmVuIGRlbGltaXRlci48YnIgLz4KCQlMZXQncyBhc3N1bWUgeW91IHNlbGVjdCB0aGUgTmV3cyBtb2R1bGUgZm91ciB0aW1lcyB3aXRoIGRpZmZlcmVudCBtb2R1bGUgcGFyYW1zIGxpa2UgY2F0ZWdvcnk9IjEiLCBjYXRlZ29yeT0iMiIsIGNhdGVnb3J5PSIzIiwgY2F0ZWdvcnk9IjQiLjxiciAvPgoJCUluIHRoZSBkYXRhYmFzZSBpdCBzdG9yZXMgdGhpcyBzdHJpbmc6PC9wPgoJCTxwcmU+CgkJPGNvZGU+CgkJTmV3cyZsdDshLS0gbXVsdGlfaW5wdXRfdmFsdWVfZGVsaW1pdGVyIC0tJmd0O2NhdGVnb3J5PSIxIiZsdDshLS0gbXVsdGlfaW5wdXRfZGVsaW1pdGVyIC0tJmd0OzxiciAvPgoJCU5ld3MmbHQ7IS0tIG11bHRpX2lucHV0X3ZhbHVlX2RlbGltaXRlciAtLSZndDtjYXRlZ29yeT0iMiImbHQ7IS0tIG11bHRpX2lucHV0X2RlbGltaXRlciAtLSZndDs8YnIgLz4KCQlOZXdzJmx0OyEtLSBtdWx0aV9pbnB1dF92YWx1ZV9kZWxpbWl0ZXIgLS0mZ3Q7Y2F0ZWdvcnk9IjMiJmx0OyEtLSBtdWx0aV9pbnB1dF9kZWxpbWl0ZXIgLS0mZ3Q7PGJyIC8+CgkJTmV3cyZsdDshLS0gbXVsdGlfaW5wdXRfdmFsdWVfZGVsaW1pdGVyIC0tJmd0O2NhdGVnb3J5PSI0IgoJCTwvY29kZT4KCQk8L3ByZT4KCQk8cD5JbiB5b3VyIHBhZ2UgdGVtcGxhdGUgeW91IGNhbiBleHBsb2RlIHRoZSBjb250ZW50IGJ5IHRoZSBkZWxpbWl0ZXJzIGFuZCBjYWxsIHRoZSBzZWxlY3RlZCBtb2R1bGVzLjwvcD4KCQk8cD5GdWxsIEV4YW1wbGU6PC9wPgoJCTxwcmU+CgkJPGNvZGU+CgkJeyogZGVmaW5lIHRoZSBjb250ZW50IGJsb2NrICp9CgkJe2NvbnRlbnQgYmxvY2s9Im15X21vZHVsZXMiIGJsb2NrX3R5cGU9Im11bHRpX2lucHV0IiBpbnB1dHM9Ik1vZHVsZSxNb2R1bGUsTW9kdWxlLE1vZHVsZSIgYXNzaWduPSJtb2R1bGVzIn0KCQkKCQl7KiBleHBsb2RlIGJsb2NrIGNvbnRlbnQgaW4gYW4gYXJyYXkgdG8gZ2V0IHRoZSBpbnB1dCBncm91cHMgKn0KCQl7YXNzaWduIHZhcj1tb2R1bGVzIHZhbHVlPSImbHQ7IS0tIG11bHRpX2lucHV0X2RlbGltaXRlciAtLSZndDsifGV4cGxvZGU6XCRtb2R1bGVzfQoJCQoJCXsqIGxvb3AgdGhyb3VnaCB0aGUgc2VsZWN0ZWQgbW9kdWxlcyAqfQoJCXtmb3JlYWNoIGZyb209XCRtb2R1bGVzIGl0ZW09Im1vZHVsZSJ9CgkJCXtpZiBcJG1vZHVsZSAhPSAnJ30KCQkJCgkJCQl7KiBleHBsb2RlIHRoZSBpbnB1dCB2YWx1ZXMgaW4gbW9kdWxuYW1lIGFuZCBtb2R1bGUgcGFyYW1ldGVycyAqfQoJCQkJe2Fzc2lnbiB2YXI9bW9kdWxlX2l0ZW1zIHZhbHVlPSImbHQ7IS0tIG11bHRpX2lucHV0X3ZhbHVlX2RlbGltaXRlciAtLSZndDsifGV4cGxvZGU6XCRtb2R1bGV9CgkJCQkKCQkJCXtpZlwkbW9kdWxlX2l0ZW1zWzBdICE9ICcnfQoJCQkJCgkJCQkJeyogY2FsbCB0aGUgbW9kdWxlICp9CgkJCQkJe2lmIGlzc2V0KFwkbW9kdWxlX2l0ZW1zWzFdKX0KCQkJCQkJe2V2YWwgdmFyPVwkc21hcnR5LmxkZWxpbXxjYXQ6J2Ntc19tb2R1bGUgbW9kdWxlPSInfGNhdDpcJG1vZHVsZV9pdGVtc1swXXxjYXQ6JyIgJ3xjYXQ6XCRtb2R1bGVfaXRlbXNbMV18Y2F0Olwkc21hcnR5LnJkZWxpbX0KCQkJCQl7ZWxzZX0KCQkJCQkJe2V2YWwgdmFyPVwkc21hcnR5LmxkZWxpbXxjYXQ6J2Ntc19tb2R1bGUgbW9kdWxlPSInfGNhdDpcJG1vZHVsZV9pdGVtc1swXXxjYXQ6JyInfGNhdDpcJHNtYXJ0eS5yZGVsaW19CgkJCQkJey9pZn0KCQkJCQkKCQkJCXsvaWZ9CgkJCQkKCQkJey9pZn0KCQkKCQl7L2ZvcmVhY2h9CgkJPC9jb2RlPgoJCTwvcHJlPgoJPC9saT4KPC91bD4KCjxoMz5TdXBwb3J0PC9oMz4KPHA+VGhpcyBtb2R1bGUgZG9lcyBub3QgaW5jbHVkZSBjb21tZXJjaWFsIHN1cHBvcnQuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PC9wPgo8dWw+Cgk8bGk+VGhlIHByb2plY3RzIGhvbWVwYWdlIGlzIDxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvY29udGVudDIvIj5odHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2NvbnRlbnQyLzwvYT48L2xpPgoJPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi48L2xpPgo8L3VsPgo8YnIgLz4KPHA+RmVlbCBmcmVlIHJlcG9ydCBhbnkga2luZCBvZiBmZWVkYmFjay48L3A+CjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPgo8cD4KCUFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLjxiciAvPgoJVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsPGJyIC8+CglidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZjxiciAvPgoJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLjxiciAvPgoJU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLjxiciAvPgoJWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2U8YnIgLz4KCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlPGJyIC8+CglGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQTxiciAvPgoJT3IgcmVhZCBpdCBvbmxpbmU6IDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMPC9hPjxiciAvPgoJUGxlYXNlIHJlYWQgdGhlIHRleHQgb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuCjwvcD4KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDEwLCBHZW9yZyBCdXNjaCAoTmFOKS4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPgo8YnIgLz4KRU9UOwokbGFuZ1snY2hhbmdlbG9nJ10gPSA8PDxFT1QKPGJyIC8+CjxwPjxzdHJvbmc+TW9kdWxlIHJlbGVhc2VzPC9zdHJvbmc+Li4uPC9wPgo8dWw+Cgk8bGk+PHA+PHN0cm9uZz4wLjcuMSAoTm92IDIwMTApOjwvc3Ryb25nPjwvcD4KCQk8dWw+CgkJCTxsaT48cD5CdWdmaXhlczo8L3A+CgkJCQk8dWw+CgkJCQkJPGxpPjxwPi0gZml4ZWQgYnVnIGl0ZW0gIzU2NTE8L3A+PC9saT4KCQkJCTwvdWw+CgkJCTwvbGk+CgkJCTxsaT48cD5GZWF0dXJlczo8L3A+CgkJCQk8dWw+CgkJCQkJPGxpPjxwPi0gYWRkZWQgcGFyYW0gZmV1X2FjY2VzczwvcD48L2xpPgoJCQkJCTxsaT48cD4tIGFkZGVkIHBhcmFtIGZldV9hY3Rpb248L3A+PC9saT4KCQkJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbSByZXF1aXJlZDwvcD48L2xpPgoJCQkJPC91bD4KCQkJPC9saT4KCQk8L3VsPgoJPC9saT4KCTxsaT48cD48c3Ryb25nPjAuNyAoTm92IDIwMTApOjwvc3Ryb25nPjwvcD4KCQk8dWw+CgkJCTxsaT48cD5CdWdmaXhlczo8L3A+CgkJCQk8dWw+CgkJCQkJPGxpPjxwPi0gY29tcGF0aWJpbGl0eSBidWdmaXhlcyBmb3IgQ01TbXMgMS45KyAobmVlZHMgQ01TbXMgMS45IG1pbmltdW0gbm93KTwvcD48L2xpPgoJCQkJPC91bD4KCQkJPC9saT4KCQkJPGxpPjxwPkZlYXR1cmVzOjwvcD4KCQkJCTx1bD4KCQkJCQk8bGk+PHA+LSBhZGRlZCBzdXBwb3J0IG9mIHtjb250ZW50X21vZHVsZX0gdGFnPC9wPjwvbGk+CgkJCQkJPGxpPjxwPi0gYWRkZWQgcGFyYW0gbm9fY29sbGFwc2U8L3A+PC9saT4KCQkJCTwvdWw+CgkJCTwvbGk+CgkJPC91bD4KCTwvbGk+Cgk8bGk+PHA+PHN0cm9uZz4wLjYuMiAoTm92IDIwMTApOjwvc3Ryb25nPjwvcD4KCQk8dWw+CgkJCTxsaT48cD5CdWdmaXhlczo8L3A+CgkJCQk8dWw+CgkJCQkJPGxpPjxwPi0gbWlub3IgYnVnZml4IChzaG93ZWQgdGFicyBvZiBwcmV2aW91cyB0ZW1wbGF0ZSB3aGVuIHRlbXBsYXRlIHdhcyBjaGFuZ2VkKTwvcD48L2xpPgoJCQkJPC91bD4KCQkJPC9saT4KCQk8L3VsPgoJPC9saT4KCTxsaT48cD48c3Ryb25nPjAuNi4xIChOb3YgMjAxMCk6PC9zdHJvbmc+PC9wPgoJCTx1bD4KCQkJPGxpPjxwPkJ1Z2ZpeGVzOjwvcD4KCQkJCTx1bD4KCQkJCQk8bGk+PHA+LSBzZXZlcmFsIGJ1Z2ZpeGVzPC9wPjwvbGk+CgkJCQkJPGxpPjxwPi0gY29tcGF0aWJpbGl0eSBidWdmaXhlcyBmb3IgQ01TbXMgMS45PC9wPjwvbGk+CgkJCQk8L3VsPgoJCQk8L2xpPgoJCQk8bGk+PHA+RmVhdHVyZXM6PC9wPgoJCQkJPHVsPgoJCQkJCTxsaT48cD4tIGFkZGVkIGJsb2NrX3R5cGUgbXVsdGlfaW5wdXQ8L3A+PC9saT4KCQkJCTwvdWw+CgkJCTwvbGk+CgkJPC91bD4KCTwvbGk+Cgk8bGk+PHA+PHN0cm9uZz4wLjYgKE9jdCAyMDEwKTo8L3N0cm9uZz48L3A+CgkJPHVsPgoJCQk8bGk+PHA+QnVnZml4ZXM6PC9wPgoJCQkJPHVsPgoJCQkJCTxsaT48cD4tIHNldmVyYWwgYnVnZml4ZXM8L3A+PC9saT4KCQkJCTwvdWw+CgkJCTwvbGk+CgkJCTxsaT48cD5GZWF0dXJlczo8L3A+CgkJCQk8dWw+CgkJCQkJPGxpPjxwPi0gYWRkZWQgcGFyYW0gYmxvY2tfZ3JvdXA8L3A+PC9saT4KCQkJCTwvdWw+CgkJCTwvbGk+CgkJCTxsaT48cD5NaXNjOjwvcD4KCQkJCTx1bD4KCQkJCQk8bGk+PHA+LSBSZW1vdmVkIGZpbGUgcGlja2VyIChhbmQgYXNzb2NpYXRlZCBibG9ja190eXBlcyBpbWFnZS9maWxlKSAtIHVzZSBHQkZpbGVQaWNrZXIgaW5zdGVhZC48L3A+PC9saT4KCQkJCTwvdWw+CgkJCTwvbGk+CgkJPC91bD4KCTwvbGk+Cgk8bGk+PHA+PHN0cm9uZz4wLjUgKFNlcHQgMjAxMCk6PC9zdHJvbmc+PC9wPgoJCTx1bD4KCQkJPGxpPjxwPkJ1Z2ZpeGVzOjwvcD4KCQkJCTx1bD4KCQkJCQk8bGk+PHA+Zml4ZWQgYnVnIGl0ZW0gIzUyOTIgKG1lbW9yeSBpc3N1ZSk8L3A+PC9saT4KCQkJCQk8bGk+PHA+Zml4ZWQgYnVnIGl0ZW0gIzUyNTQgKGRpc2FibGUgd3lzaXd5ZyBub3Qgd29ya2luZyk8L3A+PC9saT4KCQkJCQk8bGk+PHA+Zml4ZWQgYnVnIGl0ZW0gIzUzMTAgKHVybG9ubHkgbm90IHdvcmtpbmcpPC9wPjwvbGk+CgkJCQkJPGxpPjxwPmZpeGVkIGJ1ZyBpdGVtICM1MzExIChpbWFnZSBwYXRocyBub3Qgc3RvcmVkICdjb3JyZWN0bHknKTwvcD48L2xpPgoJCQkJPC91bD4KCQkJPC9saT4KCQkJPGxpPjxwPkZlYXR1cmVzOjwvcD4KCQkJCTx1bD4KCQkJCQk8bGk+PHA+YWRkZWQgZmVhdHVyZSByZXF1ZXN0ICM1MjYxIChBZGQgc29ydCB0byBpbWFnZSB0eXBlIC0gbm90aWNlIHRoZSBjaGFuZ2Ugb2YgcGFyYW0gZmlsdGVyKTwvcD48L2xpPgoJCQkJCTxsaT48cD5hZGRlZCBwYXJhbXMgZXhjbHVkZV9wcmVmaXgsIGluY2x1ZGVfcHJlZml4LCBleGNsdWRlX3N1Zml4LCBpbmNsdWRlX3N1Zml4PC9wPjwvbGk+CgkJCQkJPGxpPjxwPmFkZGVkIGZlYXR1cmUgcmVxdWVzdCAjNTI1MyAoVGV4dCBpbnB1dCB0byBkZWZpbmUgYWRkIHBhcmFtcyB0byByZWRpcmVjdCBmdW5jdGlvbik8L3A+PC9saT4KCQkJCQk8bGk+PHA+YWRkZWQgZmVhdHVyZSByZXF1ZXN0ICM1MjQwIChEZWZhdWx0IHZhbHVlcyBvZiBBZHZhbmNlZENvbnRlbnQgcGFnZSBvcHRpb25zKTwvcD48L2xpPgoJCQkJCTxsaT48cD5hZGRlZCBmZWF0dXJlIHJlcXVlc3QgIzUyNDEgKHB1dCBGZXVBY2Nlc3MgaW4gQmxvY2t0YWIpPC9wPjwvbGk+CgkJCQk8L3VsPgoJCQk8L2xpPgoJCQk8bGk+PHA+TWlzYzo8L3A+CgkJCQk8dWw+CgkJCQkJPGxpPjxwPi0gQWR2YW5jZWRDb250ZW50IG9wdGlvbnMgYXJlIHNob3duIGluIHNlcGFyYXRlIHRhYjwvcD48L2xpPgoJCQkJCTxsaT48cD4tIEFkZGVkIG5ldyBwZXJtaXNzaW9uIHRvIG1hbmFnZSB0aGUgQWR2YW5jZWRDb250ZW50IG9wdGlvbnMgdGFiPC9wPjwvbGk+CgkJCQkJPGxpPjxwPi0gcmVtb3ZlZCBwYXJhbSBmaWx0ZXIgKHVzZSBuZXcgcGFyYW1zIGluc3RlYWQpPC9wPjwvbGk+CgkJCQkJPGxpPjxwPi0gcGF0aCB0byBmaWxlcyBhcmUgc3RvcmVkIHJlbGF0aXZlIHRvIHRoZSB1cGxvYWRzIGRpcjwvcD48L2xpPgoJCQkJCTxsaT48cD4tIHBhcmFtIGRpciBvZiBibG9jayB0eXBlIGZpbGUvaW1hZ2UgbmVlZHMgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHVwbG9hZHMgZGlyIG9ubHkgKHRoZXJlIGlzIG5vIGltYWdlIHVwbG9hZHMgZGlyIHVzZWQgYW55bW9yZSk8L3A+PC9saT4KCQkJCTwvdWw+CgkJCTwvbGk+CgkJPC91bD4KCTwvbGk+Cgk8bGk+PHA+PHN0cm9uZz4wLjQuMSAoQXVndXN0IDIwMTApOjwvc3Ryb25nPjwvcD4KCQk8dWw+CgkJCTxsaT48cD5CdWdmaXhlczo8L3A+CgkJCQk8dWw+CgkJCQkJPGxpPjxwPi0gIzUxNTE6IGZpeGVkIHN0eWxlc2hlZXQgaXNzdWUgd2l0aCBleHBhbmQvY29sbGFwc2UgYnV0dG9ucyBvZiBjb250ZW50IGJsb2NrcyBpbiBJRS9TYWZhcmkuPC9wPjwvbGk+CgkJCQkJPGxpPjxwPi0gIzUxNjI6IFBIUCB3YXJuaW5ncyBpZiBiYWNrZW5kIHVzZXJzIHdpdGhvdXQgcGVybWlzc2lvbiAiTWFuYWdlIEFsbCBBZHZhbmNlZENvbnRlbnQgQmxvY2tzIiBvcGVuIGFuIGFkdmFuY2VkIGNvbnRlbnQgcGFnZSBhbmQgbXVsdGlwbGUgY29udGVudCBibG9ja3Mgb2Ygc2FtZSBuYW1lIHdlcmUgdXNlZCBpbiB0ZW1wbGF0ZS48L3A+PC9saT4KCQkJCQk8bGk+PHA+LSBmaXhlZCBidWcgd2hlcmUgZXh0cmEgZmllbGRzIGNvdWxkIG5vdCBiZSB1cGRhdGVkLjwvcD48L2xpPgoJCQkJCTxsaT48cD4tIGZpeGVkIGJ1ZyB3aGVyZSBmZXUgYWNjZXNzIGRpZCBub3Qgd29yay48L3A+PC9saT4KCQkJCTwvdWw+CgkJCTwvbGk+CgkJCTxsaT48cD5GZWF0dXJlczo8L3A+CgkJCQk8dWw+CgkJCQkJPGxpPjxwPi0gYWRkZWQgcGFyYW0gImRlbGV0ZSIgdG8gbGV0IHVzZXJzIGRlbGV0ZSBmaWxlcyBldmVuIGlmIG5vIHBlcm1pc3Npb24gIk1vZGlmeSBGaWxlcyI8L3A+PC9saT4KCQkJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbSAiY3JlYXRlX2RpcnMiIHRvIGxldCB1c2VycyBjcmVhdGVfZGlycyBldmVuIGlmIG5vIHBlcm1pc3Npb24gIk1vZGlmeSBGaWxlcyI8L3A+PC9saT4KCQkJCQk8bGk+PHA+LSBhZGRlZCBuZXcgYmxvY2t0eXBlICJub3RlIiB0byBjcmVhdGUgc29tZSBzaW5nbGUgbm90ZXMgZm9yIHlvdXIgZWRpdG9yczwvcD48L2xpPgoJCQkJPC91bD4KCQkJPC9saT4KCQkJPGxpPjxwPk1pc2M6PC9wPgoJCQkJPHVsPgoJCQkJCTxsaT48cD4tIHJlbW92ZWQgZGVwZW5kZW5jeSBvZiBGaWxlTWFuYWdlcjwvcD48L2xpPgoJCQkJCTxsaT48cD4tIGJsb2NrIG9mIHR5cGUgZmlsZSBvciBpbWFnZSBzdG9yZXMgcmVsYXRpdmUgdXJsIG5vdzwvcD48L2xpPgoJCQkJCTxsaT48cD4tIGJsb2NrIHR5cGUgaW1hZ2Ugc2hvd3MgdGh1bWJuYWlsIGluIGJhY2tlbmQgcHJldmlldyBpbnN0ZWFkIG9mIGZ1bGwgaW1hZ2U8L3A+PC9saT4KCQkJCTwvdWw+CgkJCTwvbGk+CgkJPC91bD4KCTwvbGk+Cgk8bGk+PHA+PHN0cm9uZz4wLjQgKEp1bHkgMjAxMCk6PC9zdHJvbmc+PC9wPgoJCTx1bD4KCQkJPGxpPjxwPkltcG9ydGFudCBub3RpY2U6PC9wPgoJCQkJPHVsPgoJCQkJCTxsaT48cD4tIGNoYW5nZWQgcGFyYW0gInR5cGUiIHRvICJibG9ja190eXBlIiBzaW5jZSBpdCBpbnRlcmZlcmVzIHdpdGgge2NvbnRlbnRfbW9kdWxlfSB0YWc8L3A+PC9saT4KCQkJCTwvdWw+CgkJCTwvbGk+CgkJCTxsaT48cD5CdWdmaXhlczo8L3A+CgkJCQk8dWw+CgkJCQkJPGxpPjxwPi0gIzUxMDE6IHBhZ2VfdGFiICJvcHRpb25zIiB3YXMgc2hvd24gdG8gdXNlcnMgd2l0aCBubyBwZXJtaXNzaW9uIHRvIGVkaXQgcGFnZSBvcHRpb25zIGlmIGEgY29udGVudCBibG9jayB3YXMgYXNzaWduZWQgdG8gdGhhdCB0YWIuPC9wPjwvbGk+CgkJCQkJPGxpPjxwPi0gIzUwOTc6IGxpbmsgdG8gbWlzc2luZyBjc3MgcmVtb3ZlZDwvcD48L2xpPgoJCQkJCTxsaT48cD4tIGZpeGVkIG1pbWUtdHlwZSBpc3N1ZSAoYWRkZWQgcHJlZmVyZW5jZSB0byB0b2dnbGUgbWltZS10eXBlIHVzYWdlIG9uL29mZik8L3A+PC9saT4KCQkJCQk8bGk+PHA+LSBmaXhlZCBwYXRoIGlzc3VlIHdoZXJlIHRodW1ibmFpbHMgd2VyZSBub3Qgc2hvd248L3A+PC9saT4KCQkJCQk8bGk+PHA+LSBmaXhlZCBjb21wYXRpYmlsaXR5IHdpdGggQ01TbXMgMS44PC9wPjwvbGk+CgkJCQkJPGxpPjxwPi0gb3RoZXIgbWlub3IgYnVnZml4ZXM8L3A+PC9saT4KCQkJCTwvdWw+CgkJCTwvbGk+CgkJCTxsaT48cD5GZWF0dXJlczo8L3A+CgkJCQk8dWw+CgkJCQkJPGxpPjxwPi0gYWRkZWQgTUxFIHN1cHBvcnQ8L3A+PC9saT4KCQkJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbSAic2hvd19jbG9jayIgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIHRpbWUgZHJvcGRvd24gb2YgYmxvY2t0eXBlcyAiZGF0ZSIgaW4gYmFja2VuZDwvcD48L2xpPgoJCQkJCTxsaT48cD4tIGFkZGVkIHBhcmFtICJkYXRlX2Zvcm1hdCIgdG8gZm9ybWF0IHRpbWVzdGFtcCBvZiBibG9ja3R5cGVzICJkYXRlIiBpbiBmcm9udGVuZDwvcD48L2xpPgoJCQkJCTxsaT48cD4tIGFkZGVkIHBhcmFtICJkZXNjcmlwdGlvbiI8L3A+PC9saT4KCQkJCQk8bGk+PHA+LSBhZGRlZCBidWxrIGZ1bmN0aW9uIHRvIHNldCBhbGwgcGFnZXMgdG8gQWR2YW5jZWRDb250ZW50PC9wPjwvbGk+CgkJCQkJPGxpPjxwPi0gYWRkZWQgY29tcGF0aWJpbGl0eSB3aXRoIHtjb250ZW50X21vZHVsZX0gdGFnPC9wPjwvbGk+CgkJCQk8L3VsPgoJCQk8L2xpPgoJCTwvdWw+Cgk8L2xpPgoJPGxpPjxwPjxzdHJvbmc+MC4zLjQgKEp1bmUgMjAxMCk6PC9zdHJvbmc+PC9wPgoJCTx1bD4KCQkJPGxpPjxwPkJ1Z2ZpeGVzOjwvcD4KCQkJCTx1bD4KCQkJCQk8bGk+PHA+LSAjNTA0NTogV2hlbiBzd2l0Y2hpbmcgZnJvbSBDb250ZW50IC0+IEFkdmFuY2VkIENvbnRlbnQgbG90cyBvZiBQSFAgZXJyb3JzPC9wPjwvbGk+CgkJCQkJPGxpPjxwPi0gIzUwNTY6IHBhZ2VfdGFicyBub3Qgd29ya2luZyBmb3IgdXNlcnMgd2l0aG91dCBwZXJtaXNzaW9uICJNYW5hZ2UgQWxsIENvbnRlbnQiPC9wPjwvbGk+CgkJCQkJPGxpPjxwPi0gIzUwNzM6IGluY29ycmVjdCBkaXNwbGF5IG9mIGZpbGVzIHdoZW4gb3BlbmluZyBmaWxlcGlja2VyPC9wPjwvbGk+CgkJCQkJPGxpPjxwPi0gZml4ZWQgbWlub3IgYnVnIHdoZXJlIHRoZSBvcHRpb24gImFsbG93X25vbmUiIG9mIGNvbnRlbnQgYmxvY2tzIG9mIHR5cGUgaW1hZ2UvZmlsZSB3YXMgbm90IHNob3duIHdoZW4gdGVtcGxhdGUgaGFzIGJlZW4gZWRpdGVkPC9wPjwvbGk+CgkJCQk8L3VsPgoJCQk8L2xpPgoJCQk8bGk+PHA+RmVhdHVyZXM6PC9wPgoJCQkJPHVsPgoJCQkJCTxsaT48cD4tIGFkZGVkIGZpbGVtYW5hZ2VtZW50IGFuZCB1cGxvYWQgZnVuY3Rpb25zIHRvIGNvbnRlbnQgYmxvY2tzIG9mIHR5cGUgaW1hZ2UvZmlsZTwvcD48L2xpPgoJCQkJCTxsaT48cD4tIGFkZGVkIGJyZWFkY3VtYnMgdG8gZmlsZXBpY2tlcjwvcD48L2xpPgoJCQkJCTxsaT48cD4tIGFkbWlucyBtYXkgYnJvd3NlIHRoZSBlbnRpcmUgZGlyIHRyZWUgaW4gZmlsZXBpY2tlciBmaWxlIGJyb3dzZXIgcmVnYXJkbGVzcyBvZiB0ZW1wbGF0ZSBwYXJhbXM8L3A+PC9saT4KCQkJCQk8bGk+PHA+LSBhZGRlZCBtaW1lIHR5cGUgY2hlY2tpbmcgdG8gZ2V0IGZpbGUgdHlwZTwvcD48L2xpPgoJCQkJCTxsaT48cD4tIGFkZGVkIHJhd3VybGVuY29kZSBpbiBzcmMgYXR0cmlicyB0byBkaXNwbGF5IGltYWdlcyB3aXRoIHdlaXJkIGZpbGVuYW1lcy48L3A+PC9saT4KCQkJCTwvdWw+CgkJCTwvbGk+CgkJCTxsaT48cD5taXNjZWxsYW5lb3VzOjwvcD4KCQkJCTx1bD4KCQkJCQk8bGk+PHA+LSByZW1vdmVkIE9PUCBzdHVmZiAocHJpdmF0ZS9wdWJsaWMvcHJvdGVjdGVkKSB0byBnYWluIG1vcmUgY29tcGF0aWJpbGl0eSB3aXRoIFBIUDQ8L3A+PC9saT4KCQkJCQk8bGk+PHA+LSBjaGFuZ2VkIGFqYXggZnVuY3Rpb25zIHRvIHJldHVybiB4bWwgdmFsdWVzPC9wPjwvbGk+CgkJCQkJPGxpPjxwPi0gcmVtb3ZlZCB1c2FnZSBvZiBJbWFnZU1hbmFnZXIgb25jZSBhbmQgZm9yIGFsbC4gKGNhdXNlZCBvbmx5IHRyb3VibGUpPC9wPjwvbGk+CgkJCQk8L3VsPgoJCQk8L2xpPgoJCTwvdWw+Cgk8L2xpPgoJPGxpPjxwPjxzdHJvbmc+MC4zLjMgKEp1bmUgMjAxMCk6PC9zdHJvbmc+PC9wPgoJPHVsPgoJCTxsaT48cD5CdWdmaXhlczo8L3A+CgkJCTx1bD4KCQkJCTxsaT48cD4tIGFsaWFzIHdhcyBub3QgYWx3YXlzIGNvbnZlcnRlZCBwcm9wZXJseTwvcD48L2xpPgoJCQkJPGxpPjxwPi0gdW5zdWJtaXR0ZWQgY29udGVudCBnb3QgbG9zdCBpZiBzd2l0Y2hpbmcgZnJvbSBDb250ZW50IHRvIEFkdmFuY2VkQ29udGVudDwvcD48L2xpPgoJCQk8L3VsPgoJCTwvbGk+CgkJPGxpPjxwPkZlYXR1cmVzOjwvcD4KCQkJPHVsPgoJCQkJPGxpPjxwPi0gYWRkZWQgc3RhcnQvZW5kIGRhdGU8L3A+PC9saT4KCQkJCTxsaT48cD4tIHJlbW92ZWQgdGltZXBpY2tlcjsgcmVwbGFjZWQgYnkgYSBzaW1wbGUgZHJvcGRvd248L3A+PC9saT4KCQkJCTxsaT48cD4tIGNvbXBhdGliaWxpdHkgd2l0aCB7Y29udGVudF9pbWFnZX08L3A+PC9saT4KCQkJPC91bD4KCQk8L2xpPgoJPC91bD4KCTxsaT48cD48c3Ryb25nPjAuMy4yIChKdW5lIDIwMTApOjwvc3Ryb25nPjwvcD4KCQk8dWw+CgkJCTxsaT48cD4tIGZpeGVkIGJ1ZyB3aGVyZSBjaGFuZ2luZyBiYWNrIHRvIGRlZmF1bHQgY29udGVudCB0eXBlIG9yIGNoYW5naW5nIHRlbXBsYXRlIGNhdXNlZCBmYXRhbCBlcnJvcnM8L3A+PC9saT4KCQkJPGxpPjxwPi0gZml4ZWQgYSBidWcgd2l0aCBzbWFydHkgcHJvY2Vzc2luZyB3aGVuIHNhdmluZyBhIHBhZ2U8L3A+PC9saT4KCQkJPGxpPjxwPi0gZml4ZWQgYSBidWcgd2l0aCBwcmV2aWV3IHRhYjwvcD48L2xpPgoJCQk8bGk+PHA+LSByZS1hZGRlZCBleHBhbmQvY29sbGFwc2UgYnV0dG9uIHRvIHRvZ2dsZSBjb250ZW50IGJsb2NrcyBpbiBiYWNrZW5kPC9wPjwvbGk+CgkJCTxsaT48cD4tIGFkZGVkIHBhcmFtcyBlZGl0b3JfZ3JvdXBzL2VkaXRvcl91c2VycyB0byBzcGVjaWZ5IGNlcnRhaW4gdXNlcnMvZ3JvdXBzIHRoYXQgYXJlIGFsbG93ZWQgdG8gZWRpdCBjZXJ0YWluIGJsb2NrczwvcD48L2xpPgoJCQk8bGk+PHA+LSByZW1vdmVkIHBhcmFtcyBzZWxlY3RlZC9jaGVja2VkOyB1c2UgcGFyYW0gZGVmYXVsdCBpbnN0ZWFkPC9wPjwvbGk+CgkJCTxsaT48cD4tIGJsb2NrIGlkcyB3aWxsIGJlIGNvbnZlcnRlZCBmcm9tIGJsb2NrIG5hbWUgdXNpbmcgY29yZSBmdW5jdGlvbiBtdW5nZV9zdHJpbmdfdG9fdXJsICh0byByZW1vdmUgc3BlY2lhbCBjaGFycywgd2hpdGVzcGFjZXMsIHVtbGF1dHMgZXRjLik8L3A+PC9saT4KCQkJPGxpPjxwPi0gZml4ZWQgYnVnIG9mIGJsb2NrdHlwZSBkcm9wZG93bi9zZWxlY3RfbXVsdGlwbGUgd2hlcmUgZmlyc3QgaXRlbSBoYWQgYW4gZW1wdHkgbGFiZWwgaWYgb25seSB0aGUgcGFyYW0gInZhbHVlcyIgaXMgdXNlZDwvcD48L2xpPgoJCQk8bGk+PHA+LSBhZGRlZCBzb21lIHRlbXBsYXRlIHZhcnMgb2YgdGhlIGZyb250ZW5kIHRvIGJlIGFsc28gYWNjZXNzaWJsZSBpbiBiYWNrZW5kIChlLmcuOiBcJHBhZ2VfYWxpYXMpPC9wPjwvbGk+CgkJCTxsaT48cD4tIGFkZGVkIHBhcmFtICJhbGxvd19ub25lIiB0byBhbGwgY29udGVudCBibG9jayB0eXBlcyB0byBzcGVjaWZ5IGlmIHRoZSBwcmVkZWZpbmVkIGRlZmF1bHQgdmFsdWUgd2lsbCBiZSB1c2VkIGlmIG5vIHZhbHVlIGlzIGVudGVyZWQ8L3A+PC9saT4KCQkJPGxpPjxwPi0gZml4ZWQgYnVnIHdoZXJlIGVtcHR5IHZhbHVlcyB3ZXJlIG5ldmVyIGJlIHN0b3JlZDwvcD48L2xpPgoJCQk8bGk+PHA+LSBmaXhlZCBidWcgd2hlcmUgZGVmYXVsdCB2YWx1ZSBpbiBmcm9udGVuZCB3YXMgaWdub3JlZCBpZiB0aGUgImFsbG93X25vbmUiIHBhcmFtIHdhcyBjaGFuZ2VkIGFmdGVyIGFuIGVtcHR5IHZhbHVlIGhhcyBiZWVuIHN0b3JlZDwvcD48L2xpPgoJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbSAic29ydGFibGVfaXRlbXMiIHRvIGNyZWF0ZSBhIHNvcnRhYmxlIG11bHRpcGxlIHNlbGVjdCBsaXN0IChzZWxlY3QgbGlzdCB3aWxsIHJlc3VsdCBpbiBhIHRhYmxlIHdpdGggY2hlY2tib3hlczsgb25seSBvcmRlciBvZiBzZWxlY3RlZCBpdGVtcyB3aWxsIGJlIHN0b3JlZCBhbmQgc2hvd2VkIGF0IHRoZSB0b3Agb2YgdGhlIGxpc3Q7IHVuc2VsZWN0ZWQgaXRlbXMgd2lsbCBiZSBhcHBlbmRlZCBpbiB0aGF0IG9yZGVyIHRoZXkgYXJlIHBsYWNlZCBpbiB0aGUgdGVtcGxhdGUpPC9wPjwvbGk+CgkJPC91bD4KCTwvbGk+Cgk8bGk+PHA+PHN0cm9uZz4wLjMuMSAoTWF5IDIwMTApOjwvc3Ryb25nPjwvcD4KCQk8dWw+CgkJCTxsaT48cD4tIHJlbW92ZWQgdGhlIHJlb3JkZXJpbmcgc3R1ZmYgZm9yIG5vdyAoY2F1c2VzIHRyb3VibGUgYXQgdGhpcyB0aW1lKTwvcD48L2xpPgoJCQk8bGk+PHA+LSByZW1vdmVkIHRoZSBkYiBzdHVmZiAocGFyYW1zIG9mIGNvbnRlbnQgYmxvY2tzIHRoYXQgYXJlIGRlZmluZWQgaW4gdGVtcGxhdGUgd29uJ3QgYmUgc2F2ZWQgaW4gbW9kdWxlIGRiIHRhYmxlIGFueW1vcmUgLT4gaG9wZWZ1bGx5IHNwZWVkIHVwIGxvYWRpbmcgdGltZSk8L3A+PC9saT4KCQkJPGxpPjxwPi0gZml4ZWQgYSBidWcgd2l0aCBkdXBsaWNhdGUgY29udGVudCBibG9ja3M8L3A+PC9saT4KCQk8L3VsPgoJPC9saT4KCTxsaT4KCQk8cD48c3Ryb25nPkFkdmFuY2VkQ29udGVudCAwLjMgKE1heSAyMDEwKTo8L3N0cm9uZz48L3A+CgkJPHVsPgoJCQk8bGk+PHA+LSByZXdyaXRlIGNvZGU8L3A+PC9saT4KCQkJPGxpPjxwPi0gYnVnZml4ZXM8L3A+PC9saT4KCQkJPGxpPjxwPi0gcmVuYW1lZCB0byBBZHZhbmNlZENvbnRlbnQ8L3A+PC9saT4KCQkJPGxpPjxwPi0gdXNpbmcgc2VwYXJhdGUgbW9kdWxlIHRlbXBsYXRlIG5vdyB0byBkc3BsYXkgY29udGVudCBibG9ja3M8L3A+PC9saT4KCQkJPGxpPjxwPi0gcmVtb3ZlZCBwYWdlIGFsaWFzIGluaGVyaXRhbmNlPC9wPjwvbGk+CgkJPC91bD4KCTwvbGk+CjwvdWw+Cjx1bD4KCTxsaT48cD48c3Ryb25nPlhDb250ZW50IEJFVEEgMyAoQXByaWwgMjAxMCAtIGRpc2NvbnRpbnVlZCk6PC9zdHJvbmc+PC9wPgoJCTx1bD4KCQkJPGxpPjxwPi0gTWFqb3IgQnVnZml4IChtaXNzaW5nICI7IiBhbmQgc3RyYW5nZSBpbnZpc2libGUgaW52YWxpZCBjaGFycyk8L3A+PC9saT4KCQk8L3VsPgoJPC9saT4KCTxsaT48cD48c3Ryb25nPlhDb250ZW50IEJFVEEgMiAoQXByaWwgMjAxMCAtIGRpc2NvbnRpbnVlZCk6PC9zdHJvbmc+PC9wPgoJCTx1bD4KCQkJPGxpPjxwPi0gZml4ZWQgYSBidWcgd2l0aCBwYXJhbSAiZGVsaW1pdGVyIjwvcD48L2xpPgoJCQk8bGk+PHA+LSBmaXhlZCBhIGJ1ZyB3aXRoIHNtYXJ0eSBwcm9jZXNzaW5nPC9wPjwvbGk+CgkJCTxsaT48cD4tIGFkZGVkIGluaGVyaXRhbmNlIG9mICJTaG93IGxvZ2luIGZvcm0iPC9wPjwvbGk+CgkJCTxsaT48cD4tIGFkZGVkIGluaGVyaXRhbmNlIG9mIHBhZ2UgYWxpYXMgdG8gYWRkIGl0IGFzIHByZWZmaXg7IHNvIGlmIHlvdSBoYXZlIGEgcGFnZSBjYWxsZWQgIm1lbWJlcnMiIGFuZCBzZWxlY3QgZm9yIGVhY2ggY2hpbGQgcGFnZSAiaW5oZXJpdCBwYWdlIGFsaWFzIiBhbGwgY2hpbGQgcGFnZXMgYWxpYXNlcyB3aWxsIHN0YXJ0IHdpdGggIm1lbWJlcnNfIjsgbWFrZXMgZmlsdGVyaW5nIG9mIG1lbnUgZW50cmllcyB3aXRoIE1lbnVNYW5hZ2VyIHBhcmFtICJleGNsdWRlcHJlZmZpeCIgb3IgImluY2x1ZGVwcmVmZml4IiBlYXNpZXIuPC9wPjwvbGk+CgkJCTxsaT48cD4tIG1pbm9yIGJ1Z2ZpeGVzPC9wPjwvbGk+IAoJCTwvdWw+Cgk8L2xpPgoJPGxpPgoJCTxwPjxzdHJvbmc+WENvbnRlbnQgQkVUQSAoQXByaWwgMjAxMCk6PC9zdHJvbmc+IGluaXRpYWwgcmVsZWFzZTwvcD4KCQk8dWw+CgkJCTxsaT48cD4tIGNvbnZlcnRlZCB0aGUgc2luZ2xlIGZpbGUgaW50byBhIG1vZHVsZTwvcD48L2xpPgoJCQk8bGk+PHA+LSByZW5hbWVkIHBhcmFtczsgc2VlIG1vZHVsZSBoZWxwIGZvciBtb3JlIGRldGFpbHM8L3A+PC9saT4KCQk8L3VsPgoJPC9saT4KPC91bD4KPHA+PHN0cm9uZz5TaW5nbGUgZmlsZSByZWxlYXNlcyAoZGlzY29udGludWVkKTwvc3Ryb25nPi4uLjwvcD4KPHVsPgoJPGxpPgoJCTxwPjxzdHJvbmc+MS40IChNYXJjaCAyMDEwKTo8L3N0cm9uZz48L3A+CgkJPHVsPgoJCQk8bGk+PHA+LSBjbGVhbnVwIGNvZGUgLSAoTmFOKTwvcD48L2xpPgoJCQk8bGk+PHA+LSBtaW5vciBidWdmaXhlcyAtIChOYU4pPC9wPjwvbGk+CgkJCTxsaT48cD4tIGFkZGVkIHJlZGlyZWN0IHBhZ2UgaWYgZmV1IGlzIG5vdCBsb2dnZWQgaW4gLSAoTmFOKTwvcD48L2xpPgoJCQk8bGk+PHA+LSBhZGRlZCBpbmhlcml0YW5jZSBvZiBmZXVfYWNjZXNzIGFuZCByZWRpcmVjdF9wYWdlIC0gKE5hTik8L3A+PC9saT4KCQkJPGxpPjxwPi0gYWRkZWQgcGFyYW0gZmV1X2FjY2VzcyAtIChOYU4pPC9wPjwvbGk+CgkJCTxsaT48cD4tIGFkZGVkIHBhcmFtIGZldV9hY3Rpb24gLSAoTmFOKTwvcD48L2xpPgoJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbSByZWRpcmVjdF9wYWdlIC0gKE5hTik8L3A+PC9saT4KCQkJPGxpPjxwPi0gYWRkZWQgcGFyYW0gYmxvY2tfb25seSAtIChOYU4pPC9wPjwvbGk+CgkJCTxsaT48cD4tIGFkZGVkIHNtYXJ0eSBsb2dpYyBpbiBiYWNrZW5kIC0gKEplcmVteUJhc3MpPC9wPjwvbGk+CgkJCTxsaT48cD4tIGFkZGVkIHBhcmFtIHN0eWxlIC0gKEplcmVteUJhc3MpPC9wPjwvbGk+CgkJCTxsaT48cD4tIGFkZGVkIHBhcmFtIGZpbHRlciAoZmlsdGVyaW5nIGltYWdlcyBpbiBiYWNrZW5kKSAtIChKZXJlbXlCYXNzKTwvcD48L2xpPgoJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbSBJbWdNb2RlIChkcm9wZG93biBvciBJbWFnZU1hbmFnZXIpIC0gKEplcmVteUJhc3MpPC9wPjwvbGk+CgkJCTxsaT48cD4tIGFkZGVkIHBhcmFtIHNtYXJ0eU9uIChmb3IgcHJvY2Vzc2luZyBzbWFydHkgdmFycyBvZiB0aGUgdGVtcGF0ZSBpbiBiYWNrZW5kKSAtIChKZXJlbXlCYXNzKTwvcD48L2xpPgoJCTwvdWw+Cgk8L2xpPgoJPGxpPjxwPjxzdHJvbmc+MS4zIChBcHJpbCAyMDA5KTo8L3N0cm9uZz48L3A+CgkJPHVsPgoJCQk8bGk+PHA+LSBDTVNtcyAxLjYuKiByZWFkeSAtIChOYU4pPC9wPjwvbGk+CgkJCTxsaT48cD4tIGFkZGVkIGZldSBhY2Nlc3Mgb3B0aW9uIC0gKE5hTik8L3A+PC9saT4KCQk8L3VsPgoJPC9saT4KCTxsaT4KCQk8cD48c3Ryb25nPjEuMiAoTWFyY2ggMjAwOSk6PC9zdHJvbmc+IGluaXRpYWwgcmVsZWFzZTwvcD4KCQk8dWw+CgkJCTxsaT48cD4tIEEgc2luZ2xlIGZpbGUgQ29udGVudDIuaW5jLnBocCB0aGF0IG5lZWRzIHRvIGJlIHBhY2VkIGluIGxpYi9jbGFzc2VzL2NvbnRlbnR0eXBlcy48L3A+PC9saT4KCQkJPGxpPjxwPi0gbGF5b3V0L29wdGlvbnMgb2YgYmFja2VuZCBwYW5lbCBjYW4gYmUgY29udHJvbGVkIGJ5IGFkZGl0aW9uYWwgc21hcnR5IHBhcmFtcyBpbiB0aGUgdGVtcGxhdGU7IGludGVncmF0ZWQgdGhlIHtjb250ZW50X2ltYWdlfSB0YWcgLSAobW9kIGJ5IE5hTik8L3A+PC9saT4KCQk8L3VsPgoJPC9saT4KPC91bD4KPGJyIC8+CkVPVDsKPz4K]]></data>
	</file>
	<file>
	  <filename>/lang/ext/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/ext/de_DE.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ0FkdmFuY2VkQ29udGVudCddID0gJ0Vyd2VpdGVydGVyIEluaGFsdCc7CiRsYW5nWydpbnN0YWxsZWQnXSA9ICdNb2R1bCBBZHZhbmNlZENvbnRlbnQgJXMgd3VyZGUgaW5zdGFsbGllcnQnOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bCBBZHZhbmNlZENvbnRlbnQgJXMgd3VyZGUgZGVpbnN0YWxsaWVydCc7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsIEFkdmFuY2VkQ29udGVudCBhdWYgVmVyc2lvbiAlcyBha3R1YWxpc2llcnQnOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdNb2R1bCBBZHZhbmNlZENvbnRlbnQgJXMgd3VyZGUgaW5zdGFsbGllcnQuJzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdNb2R1bCBBZHZhbmNlZENvbnRlbnQgJXMgd3VyZGUgZGVpbnN0YWxsaWVydC4nOwokbGFuZ1snY29uZmlybXVuaW5zdGFsbCddID0gJ1dvbGxlbiBTaWUgZGFzIE1vZHVsIEFkdmFuY2VkQ29udGVudCB3aXJrbGljaCBkZWluc3RhbGxpZXJlbj8nOwokbGFuZ1snZXJyb3JfZHVwbGljYXRlY29udGVudCddID0gJzxlbT48c3Ryb25nPkhpbndlaXM6PC9zdHJvbmc+IHtjb250ZW50IGJsb2NrPSYjMDM5OyVzJiMwMzk7IC4uLiB9IGlzdCBuaWNodCBlaW5kZXV0aWcuIERpZSBOYW1lbiB2b24gSW5oYWx0c2JsJm91bWw7Y2tlbiBtJnV1bWw7c3NlbiBlaW5kZXV0aWcgc2Vpbi4gPGJyIC8+RGllc2VyIEJsb2NrIGlzdCBpbmFrdGl2LiBOdXIgZGVyIGVyc3RlIEJsb2NrIHdpcmQgYW5nZXplaWd0LiBQciZ1dW1sO2ZlbiBTaWUgSWhyIFNlaXRlbi1UZW1wbGF0ZSB1bmQgdyZhdW1sO2hsZW4gU2llIGYmdXVtbDtyIGRlbiBQYXJhbWV0ZXIgJiMwMzk7YmxvY2smIzAzOTsgZWluZW4gYW5kZXJlbiBXZXJ0LjwvZW0+JzsKJGxhbmdbJ25vdGljZV9kdXBsaWNhdGVjb250ZW50J10gPSAnPGVtPjxzdHJvbmc+SGlud2Vpczo8L3N0cm9uZz4gRGllc2VyIEJsb2NrIHdpcmQgbWVocmZhY2ggaW0gVGVtcGxhdGUgdmVyd2VuZGV0LiBTaWUgc2VoZW4gaGllciBudXIgZGVuIGVyc3RlbiBCbG9jay48L2VtPic7CiRsYW5nWydlcnJvcl9iYXNpY2F0dHJpYiddID0gJzxlbT48c3Ryb25nPkhpbndlaXM6PC9zdHJvbmc+IERlciBCYXNpcy1JbmhhbHRzLUVpZ2Vuc2NoYWZ0cy1OYW1lICYjMDM5OyVzJiMwMzk7IGthbm4gbmljaHQgYWxzIFdlcnQgZiZ1dW1sO3IgZGVuIFBhcmFtZXRlciAmIzAzOTtibG9jayYjMDM5OyB2ZXJ3ZW5kZXQgd2VyZGVuLiA8YnIgLz5EaWVzZXIgQmxvY2sgaXN0IGluYWt0aXYuIE51ciBkZXIgZXJzdGUgQmxvY2sgd2lyZCBhbmdlemVpZ3QuIFByJnV1bWw7ZmVuIFNpZSBJaHIgU2VpdGVuLVRlbXBsYXRlIHVuZCB3JmF1bWw7aGxlbiBTaWUgZiZ1dW1sO3IgZGVuIFBhcmFtZXRlciAmIzAzOTtibG9jayYjMDM5OyBlaW5lbiBhbmRlcmVuIFdlcnQuPC9lbT4nOwokbGFuZ1snZXJyb3JfZXhwaXJlZGF0ZSddID0gJ0RhcyBFbmRkYXR1bSBtdXNzIGhpbnRlciBkZW0gU3RhcnRkYXR1bSBsaWVnZW4uJzsKJGxhbmdbJ3lvdWFyZWludGV4dCddID0gJ0FrdHVlbGxlcyBWZXJ6ZWljaG5pcyc7CiRsYW5nWydkaW1lbnNpb25zJ10gPSAnQmlsZGdyJm91bWw7JnN6bGlnO2UnOwokbGFuZ1snc2l6ZSddID0gJ0RhdGVpZ3Imb3VtbDsmc3psaWc7ZSc7CiRsYW5nWydpbmhlcml0X2Zyb21fcGFyZW50J10gPSAnVm9tICZ1dW1sO2Jlcmdlb3JkbmV0ZW4gRWxlbWVudCB2ZXJlcmJiYXInOwokbGFuZ1snbm9uZSddID0gJ25pY2h0cyc7CiRsYW5nWydpbnZhbGlkJ10gPSAndW5nJnV1bWw7bHRpZyc7CiRsYW5nWydpbnZhbGlkX2Jsb2NrdHlwZSddID0gJzxlbT48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz4gVW5nJnV1bWw7bHRpZ2VyIFdlcnQgJiMwMzk7JXMmIzAzOTsgZGVzIFBhcmFtZXRlcnMgYmxvY2tfdHlwZSBpbSBCbG9jayAmIzAzOTslcyYjMDM5Oy48YnIgLz5CaXR0ZSBwciZ1dW1sO2ZlbiBTaWUgSWhyIFNlaXRlbi1UZW1wbGF0ZS48L2VtPic7CiRsYW5nWyd5ZXMnXSA9ICdKYSc7CiRsYW5nWydubyddID0gJ05laW4nOwokbGFuZ1snZnJvbnRlbmRhY2Nlc3MnXSA9ICdGcm9udGVuZC1adWdyaWZmJzsKJGxhbmdbJ3JlZGlyZWN0cGFnZSddID0gJ1NlaXRlLCBhdWYgZGllIHdlaXRlcmdlbGVpdGV0IHdpcmQsIHdlbm4gZGVyIFp1Z3JpZmYgbmljaHQgZXJsYXVidCBpc3QnOwokbGFuZ1snc2hvd2xvZ2luZm9ybSddID0gJ0FubWVsZGUtRm9ybXVsYXIgYW56ZWlnZW4nOwokbGFuZ1sncmVnaXN0ZXJlZHVzZXJzJ10gPSAnTnVyIGYmdXVtbDtyIHJlZ2lzdHJpZXJ0ZSBOdXR6ZXInOwokbGFuZ1snYmxvY2snXSA9ICdCbG9jayAnOwokbGFuZ1sndXNlZXhwaXJlZGF0ZSddID0gJ0FibGF1ZmRhdHVtIHZlcndlbmRlbic7CiRsYW5nWydzdGFydGRhdGUnXSA9ICdTdGFydGRhdHVtJzsKJGxhbmdbJ2VuZGRhdGUnXSA9ICdFbmRkYXR1bSc7CiRsYW5nWydibG9ja2NvbnRlbnQnXSA9ICdCbG9jay1JbmhhbHQnOwokbGFuZ1snc2V0cGFnZWluYWN0aXZlJ10gPSAnU2VpdGUgYXVmIGluYWt0aXYgc2V0emVuJzsKJGxhbmdbJ2RlbGV0ZXBhZ2UnXSA9ICdTZWl0ZSBsJm91bWw7c2NoZW4nOwokbGFuZ1sndW5pbnN0YWxsYWN0aW9uJ10gPSAnQWt0aW9uIGJlaW0gRGVpbnN0YWxsaWVyZW4nOwokbGFuZ1snc2V0Y29udGVudDEnXSA9ICdBbGxlIFNlaXRlbiBhdWYgVHlwICZxdW90O0luaGFsdCZxdW90OyBzZXR6ZW4nOwokbGFuZ1snc2V0Y29udGVudDInXSA9ICdBbGxlIFNlaXRlbiBhdWYgVHlwICZxdW90O0luaGFsdCZxdW90OyBzZXR6ZW4gdW5kIHp1cyZhdW1sO3R6bGljaGUgQmwmb3VtbDtja2UgbCZvdW1sO3NjaGVuJzsKJGxhbmdbJ3ByZWZzdXBkYXRlZCddID0gJ0VpbnN0ZWxsdW5nZW4gYWt0dWFsaXNpZXJ0JzsKJGxhbmdbJ2ZpbGVvcGVyYXRpb25zJ10gPSAnRGF0ZWktT3BlcmF0aW9uZW4nOwokbGFuZ1sndXBsb2FkbmV3ZmlsZSddID0gJ0VpbmUgbmV1ZSBEYXRlaSBob2NobGFkZW4nOwokbGFuZ1snY3JlYXRlbmV3ZGlyJ10gPSAnRWluIG5ldWVzIFZlcnplaWNobmlzIGVyc3RlbGxlbic7CiRsYW5nWyd1cGxvYWRmaWxlJ10gPSAnSG9jaGxhZGVuJzsKJGxhbmdbJ2NyZWF0ZWRpciddID0gJ0Vyc3RlbGxlbic7CiRsYW5nWydzdWNjZXNzJ10gPSAnT0snOwokbGFuZ1snZXJyb3InXSA9ICdGZWhsZXInOwokbGFuZ1snZmlsZXVwbG9hZGVkJ10gPSAnRGllIERhdGVpICYjMDM5OyVzJiMwMzk7IHd1cmRlIGhvY2hnZWxhZGVuJzsKJGxhbmdbJ25vZGlybmFtZSddID0gJ0VzIHd1cmRlIGtlaW4gVmVyemVpY2huaXNuYW1lIGFuZ2VnZWJlbic7CiRsYW5nWydkaXJleGlzdHMnXSA9ICdEZXIgVmVyemVpY2huaXNuYW1lICYjMDM5OyVzJiMwMzk7IGV4aXN0aWVydCBiZXJlaXRzJzsKJGxhbmdbJ25ld2RpcmNyZWF0ZWQnXSA9ICdEYXMgbmV1ZXMgVmVyemVpY2huaXMgJiMwMzk7JXMmIzAzOTsgd3VyZGUgZXJmb2xncmVpY2ggZXJzdGVsbHQnOwokbGFuZ1snbmV3ZGlyZmFpbGVkJ10gPSAnQmVpbSBFcnN0ZWxsZW4gZGVzIFZlcnplaWNobmlzc2VzICYjMDM5OyVzJiMwMzk7IGlzdCBlaW4gRmVobGVyIGF1ZmdldHJldGVuJzsKJGxhbmdbJ25vZmlsZSddID0gJ0VzIHd1cmRlIGtlaW5lIERhdGVpIGhvY2hnZWxhZGVuJzsKJGxhbmdbJ2ZpbGV0b29iaWcnXSA9ICdEaWUgaG9jaGdlbGFkZW5lIERhdGVpICYjMDM5O3MlJiMwMzk7IGlzdCB6dSBncm8mc3psaWc7JzsKJGxhbmdbJ2NvbnRhaW5zaWxsZWdhbGNoYXJzJ10gPSAnRGVyIERhdGVpbmFtZSAmIzAzOTslcyYjMDM5OyBlbnRoJmF1bWw7bHQgbmljaHQgZXJsYXVidGUgWmVpY2hlbiAoJiMwMzk7LCZxdW90OywrLCosXCwvLCZhbXA7LCQpJzsKJGxhbmdbJ3VwbG9hZGZhaWxlZCddID0gJ0JlaW0gVmVyc2NoaWViZW4gZGVyIGhvY2hnZWxhZGVuZW4gRGF0ZWkgJiMwMzk7JXMmIzAzOTsgaW5zIHJpY2h0aWdlIFZlcnplaWNobmlzIGlzdCBlaW4gRmVobGVyIGF1ZmdldHJldGVuJzsKJGxhbmdbJ2NvbmZpcm1kZWxldGUnXSA9ICdXb2xsZW4gU2llIGRpZSBEYXRlaSAlcyB3aXJrbGljaCBsJm91bWw7c2NoZW4/JzsKJGxhbmdbJ2RlbGV0ZWZpbGVzdWNjZXNzJ10gPSAnRGllIERhdGVpICYjMDM5OyVzJiMwMzk7IHd1cmRlIGVyZm9sZ3JlaWNoIGdlbCZvdW1sO3NjaHQnOwokbGFuZ1snZGVsZXRlZmlsZWZhaWxlZCddID0gJ0RpZSBEYXRlaSAmIzAzOTslcyYjMDM5OyBrb25udGUgbmljaHQgZ2VsJm91bWw7c2NodCB3ZXJkZW4nOwokbGFuZ1snZGVsZXRlc3ViZGlyZmFpbGVkJ10gPSAnRGFzIFZlcnplaWNobmlzICYjMDM5OyVzJiMwMzk7IGtvbm50ZSBuaWNodCBnZWwmb3VtbDtzY2h0IHdlcmRlbic7CiRsYW5nWydkZWxldGVzdWJkaXJzdWNjZXNzJ10gPSAnRGFzIFZlcnplaWNobmlzICYjMDM5OyVzJiMwMzk7IHd1cmRlIGVyZm9sZ3JlaWNoIGdlbCZvdW1sO3NjaHQnOwokbGFuZ1snY29uZmlybWRlbGV0ZWRpciddID0gJ1dvbGxlbiBTaWUgZGFzIFZlcnplaWNobmlzICVzIHdpcmtsaWNoIGwmb3VtbDtzY2hlbj8nOwokbGFuZ1snZGVsZXRlZGlyJ10gPSAnTGVlcmVzIFZlcnplaWNobmlzIGwmb3VtbDtzY2hlbic7CiRsYW5nWydkZWxldGVmaWxlJ10gPSAnRGF0ZWkgbCZvdW1sO3NjaGVuJzsKJGxhbmdbJ3Jlc3RyaWN0ZGlycyddID0gJ0JlbnV0emVyenVncmlmZiBhdWYgVmVyemVpY2huaXNzZSBlaW5zY2hyJmF1bWw7bmtlbic7CiRsYW5nWydzaG93ZmlsZW1hbmFnZW1lbnQnXSA9ICdEYXRlaXZlcndhbHR1bmdzLU9wdGlvbmVuIGFuemVpZ2VuJzsKJGxhbmdbJ3Nob3d0aHVtYm5haWxmaWxlcyddID0gJ1ZvcnNjaGF1YmlsZGVyIGFuemVpZ2VuJzsKJGxhbmdbJ2FsbG93c2NhbGluZyddID0gJ0dyJm91bWw7JnN6bGlnO2VuJmF1bWw7bmRlcnVuZyB2b24gaG9jaGdlbGFkZW5lbiBCaWxkZXJuIGluIEVjaHR6ZWl0IGVybGF1YmVuJzsKJGxhbmdbJ3NjYWxpbmd3aWR0aCddID0gJ0JyZWl0ZSB2ZXImYXVtbDtuZGVybic7CiRsYW5nWydzY2FsaW5naGVpZ2h0J10gPSAnSCZvdW1sO2hlIHZlciZhdW1sO25kZXJuJzsKJGxhbmdbJ2RlZmF1bHRkaW1lbnNpb25zJ10gPSAnVm9yZWluZ2VzdGVsbHRlIEFibWVzc3VuZ2VuJzsKJGxhbmdbJ2F1dG8nXSA9ICdBdXRvbWF0aXNjaCc7CiRsYW5nWydyZWxhdGl2ZXVybHMnXSA9ICdSZWxhdGl2ZSBVUkxzJzsKJGxhbmdbJ2ZpbGVwaWNrZXJzdHlsZSddID0gJ0RhdGVpdyZhdW1sO2hsZXItVHlwJzsKJGxhbmdbJ2ZpbGVwaWNrZXJzaXplJ10gPSAnRGF0ZWl3JmF1bWw7aGxlci1HciZvdW1sOyZzemxpZztlJzsKJGxhbmdbJ2ZpbGVuYW1lb25seSddID0gJ0RhdGVpbmFtZW4gYW56ZWlnZW4nOwokbGFuZ1sndGh1bWJuYWlsc29ubHknXSA9ICdWb3JzY2hhdWJpbGRlciBhbnplaWdlbic7CiRsYW5nWydzaG93dGh1bWJuYWlsZmlsZXN0ZXh0J10gPSAnVm9yc2NoYXViaWxkZXIgYWxzICZxdW90O25vcm1hbGUmcXVvdDsgRGF0ZWllbiBhbnplaWdlbic7CiRsYW5nWydmaWxlbmFtZWFuZHRodW1ibmFpbHMnXSA9ICdEYXRlaW5hbWVuIHVuZCBWb3JzY2hhdWJpbGRlciB6dWdsZWljaCBhbnplaWdlbic7CiRsYW5nWydtYWtldGh1bWJuYWlsJ10gPSAnVm9yc2NoYXViaWxkZXIgZXJzdGVsbGVuJzsKJGxhbmdbJ2ZpbGVwaWNrZXJzZXR0aW5ncyddID0gJ0RhdGVpdyZhdW1sO2hsZXItRWluc3RlbGx1bmdlbic7CiRsYW5nWydyZXNpemV0byddID0gJ0JpbGRnciZvdW1sOyZzemxpZztlICZhdW1sO25kZXJuIGF1Zic7CiRsYW5nWydrZWVwYXNwZWN0cmF0aW8nXSA9ICdCaWxkc2VpdGVudmVyaCZhdW1sO2x0bmlzIGJlaWJlaGFsdGVuJzsKJGxhbmdbJ2FsbG93dXBzY2FsaW5nJ10gPSAnQmlsZHZlcmdyJm91bWw7JnN6bGlnO2VydW5nZW4gZXJsYXViZW4nOwokbGFuZ1snZGVjaW1hbGRlbGltaXRlciddID0gJy4nOwokbGFuZ1sndGhvdXNhbmRkZWxpbWl0ZXInXSA9ICcsJzsKJGxhbmdbJ2Rpcm5vdGZvdW5kJ10gPSAnVmVyemVpY2huaXMgJiMwMzk7JXMmIzAzOTsgbmljaHQgZ2VmdW5kZW4hJzsKJGxhbmdbJ3NlbGVjdGltYWdlJ10gPSAnQmlsZChlcikgdyZhdW1sO2hsZW4nOwokbGFuZ1snc2VsZWN0ZmlsZSddID0gJ0RhdGVpKGVuKSB3JmF1bWw7aGxlbic7CiRsYW5nWydkZWxldGVwYWdlcyddID0gJ0FsbGUgU2VpdGVuIHZvbSBUeXAgJnF1b3Q7RXJ3ZWl0ZXJ0ZXIgSW5oYWx0JnF1b3Q7IGwmb3VtbDtzY2hlbic7CiRsYW5nWyd1c2VtaW1ldHlwZSddID0gJ01pbWUtVHlwIHZlcndlbmRlbiwgdW0gRGF0ZWktVHlwIHp1IGJlc3RpbW1lbic7CiRsYW5nWydpbXBvcnRwYWdlcyddID0gJ0FsbGUgU2VpdGVuIHZvbSBUeXAgJnF1b3Q7SW5oYWx0JnF1b3Q7IGF1ZiBUeXAgJnF1b3Q7RXJ3ZWl0ZXJ0ZXIgSW5oYWx0JnF1b3Q7IHNldHplbi4nOwokbGFuZ1sncGFnZXNpbXBvcnRlZCddID0gJ0FsbGUgSW5oYWx0cy1TZWl0ZW4gd3VyZGVuIGF1ZiBkZW4gSW5oYWx0c3R5cCAmcXVvdDtFcndlaXRlcnRlciBJbmhhbHQmcXVvdDsgZ2VzZXR6dC4nOwokbGFuZ1snY29uZmlybWltcG9ydCddID0gJ1dvbGxlbiBTaWUgd2lya2xpY2ggZGVuIEluaGFsdHMtVHlwIGFsbGVyIEluaGFsdHNzZWl0ZW4gJmF1bWw7bmRlcm4/JzsKJGxhbmdbJ25vbWltZXR5cGUnXSA9ICdLZWluZSBNaW1lLVR5cC1GdW5rdGlvbiB2ZXJmJnV1bWw7Z2JhciBvZGVyIG5pY2h0IHJpY2h0aWcga29uZmlndXJpZXJ0LiBEaWVzZSBGdW5rdGlvbiBpc3QgZGVha3RpdmllcnQuJzsKJGxhbmdbJ3RvZ2dsZV9tZXNzYWdlJ10gPSAnRGllc2UgTmFjaHJpY2h0IHZlcmJlcmdlbic7CiRsYW5nWydjb250ZW50c2V0dGluZ3MnXSA9ICdTdGFuZGFyZC1FaW5zdGVsbHVuZ2VuIGYmdXVtbDtyICZxdW90O0Vyd2VpdGVydGVyIEluaGFsdCZxdW90Oyc7CiRsYW5nWydyZWRpcmVjdHBhcmFtcyddID0gJ1VSTC1QYXJhbWV0ZXIsIGRlciBiZWkgVW1sZWl0dW5nIGFuZ2VoYW5nZW4gd2VyZGVuIHNvbGwnOwokbGFuZ1snZXZhbHVhdGVzbWFydHknXSA9ICdTbWFydHkgdmVyd2VuZGVuLCB1bSBkaWUgUGFyYW1ldGVyIHp1IHZlcmFyYmVpdGVuJzsKJGxhbmdbJ25vaW1hZ2VmaWxlJ10gPSAnJXMgaXN0IGtlaW4gQmlsZCc7CiRsYW5nWydmaWxldHlwZW5vdGFsbG93ZWQnXSA9ICdEYXRlaXR5cCAlcyBuaWNodCBlcmxhdWJ0JzsKJGxhbmdbJ3FjYSddID0gJ1AwLTc1MDkxNDc4LTEyNjg0MjE4MTQwNzInOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMjgzNzA4MjIzLjQ3LjI2LnV0bWNzcj1mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZ3x1dG1jY249KHJlZmVycmFsKXx1dG1jbWQ9cmVmZXJyYWx8dXRtY2N0PS9pbmRleC5waHAvdG9waWMsNDUxOTgubmV3Lmh0bWwnOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My43Mjg5ODk0NTIuMTI2ODU2NzQ3NS4xMjgyOTA1MjgxLjEyODM3MDgyMjMuNDcnOwokbGFuZ1sndXRtYyddID0gJzE1Njg2MTM1Myc7CiRsYW5nWyd1dG1iJ10gPSAnMTU2ODYxMzUzLjEuMTAuMTI4MzcwODIyMyc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/fr_FR.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ0FkdmFuY2VkQ29udGVudCddID0gJ0NvbnRlbnUgQXZhbmMmZWFjdXRlOyc7CiRsYW5nWydpbnN0YWxsZWQnXSA9ICdMZSBtb2R1bGUgQWR2YW5jZWRDb250ZW50ICVzIGVzdCBpbnN0YWxsJmVhY3V0ZTsgJzsKJGxhbmdbJ3VuaW5zdGFsbGVkJ10gPSAnTGUgbW9kdWxlIEFkdmFuY2VkQ29udGVudCAlcyBlc3QgZCZlYWN1dGU7c2luc3RhbGwmZWFjdXRlOyc7CiRsYW5nWyd1cGdyYWRlZCddID0gJ0xlIG1vZHVsZSBBZHZhbmNlZENvbnRlbnQgbWlzICZhZ3JhdmU7IGpvdXIgZW4gdmVyc2lvbiAlcyc7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0xlIG1vZHVsZSBBZHZhbmNlZENvbnRlbnQgJXMgZXN0IGluc3RhbGwmZWFjdXRlOyAnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ0xlIG1vZHVsZSBBZHZhbmNlZENvbnRlbnQgJXMgZXN0IGQmZWFjdXRlO3NpbnN0YWxsJmVhY3V0ZTsnOwokbGFuZ1snY29uZmlybXVuaW5zdGFsbCddID0gJyZFY2lyYzt0ZXMgdm91cyBjZXJ0YWluIGRlIHZvdWxvaXIgZCZlYWN1dGU7c2luc3RhbGxlciBsZSBtb2R1bGUgQWR2YW5jZWRDb250ZW50ID8nOwokbGFuZ1snbm90aWNlX2R1cGxpY2F0ZWNvbnRlbnQnXSA9ICc8ZW0+PHN0cm9uZz5BdHRlbnRpb246PC9zdHJvbmc+IENlIGJsb2MgZXN0IHV0aWxpcyZlYWN1dGU7ICZhZ3JhdmU7IGRlIG11bHRpcGxlcyByZXByaXNlcyBkYW5zIGxlIGdhYmFyaXQuIFZvdXMgdmVycmV6IGljaSB1bmlxdWVtZW50IGxlIHByZW1pZXIgYmxvYy48L2VtPic7CiRsYW5nWydlcnJvcl9iYXNpY2F0dHJpYiddID0gJzxlbT48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz4gQ2Fubm90IHVzZSBiYXNpYyBjb250ZW50IHByb3BlcnR5IG5hbWUgJiMwMzk7JXMmIzAzOTsgYXMgdmFsdWUgb2YgcGFyYW0gJiMwMzk7YmxvY2smIzAzOTsuIDxiciAvPkNlIGJsb2MgZXN0IGluYWN0aWYuIFYmZWFjdXRlO3JpZmlleiB2b3RyZSBnYWJhcml0IGRlIHBhZ2UgZXQgY2hvaXNpc3NleiB1bmUgdmFsZXVyIGRpZmYmZWFjdXRlO3JlbnRlIGR1IHBhcmFtJmVncmF2ZTt0cmUgJiMwMzk7YmxvY2smIzAzOTsuPC9lbT4nOwokbGFuZ1snZXJyb3JfZXhwaXJlZGF0ZSddID0gJ0xhIGRhdGUgZGUgZmluIGRvaXQgJmVjaXJjO3RyZSBzdXAmZWFjdXRlO3JpZXVyZSAmYWdyYXZlOyBsYSBkYXRlIGRlIGQmZWFjdXRlO2J1dCc7CiRsYW5nWyd5b3VhcmVpbnRleHQnXSA9ICdSJmVhY3V0ZTtwZXJ0b2lyZSBjb3VyYW50JzsKJGxhbmdbJ2RpbWVuc2lvbnMnXSA9ICdUYWlsbGUgZGUgbCYjMDM5O2ltYWdlJzsKJGxhbmdbJ3NpemUnXSA9ICdUYWlsbGUgZHUgZmljaGllcic7CiRsYW5nWydpbmhlcml0X2Zyb21fcGFyZW50J10gPSAnSCZlYWN1dGU7cml0JmVhY3V0ZTsgZHUgcGFyZW50JzsKJGxhbmdbJ25vbmUnXSA9ICdhdWN1bic7CiRsYW5nWydpbnZhbGlkJ10gPSAnaW52YWxpZGUnOwokbGFuZ1snaW52YWxpZF9ibG9ja3R5cGUnXSA9ICc8ZW0+PHN0cm9uZz5BdHRlbnRpb246PC9zdHJvbmc+ICYjMDM5OyVzJiMwMzk7IGVzdCB1bmUgdmFsZXVyIGluY29ycmVjdGUgZHUgcGFyYW0mZWdyYXZlO3RyZSBibG9ja190eXBlIGRhbnMgbGUgYmxvYyAmIzAzOTslcyYjMDM5Oy48YnIgLz5WJmVhY3V0ZTtyaWZpZXogdm90cmUgZ2FiYXJpdCBkZSBwYWdlLjwvZW0+JzsKJGxhbmdbJ2Vycm9yX2luc3VmZmljaWVudF9ibG9ja3BhcmFtcyddID0gJzxlbT48c3Ryb25nPkVycm9yOjwvc3Ryb25nPiBQYXJhbSZlZ3JhdmU7dHJlcyBpbnN1ZmZpc2FudHMuIDxiciAvPkxlIHBhcmFtJmVncmF2ZTt0cmUgJiMwMzk7JXMmIzAzOTsgcG91ciBsZSBibG9jICYjMDM5OyVzJiMwMzk7IGVzdCBtYW5xdWFudC4gViZlYWN1dGU7cmlmaWV6IHZvdHJlIGdhYmFyaXQgZGUgcGFnZS48L2VtPic7CiRsYW5nWyd5ZXMnXSA9ICdPdWknOwokbGFuZ1snbm8nXSA9ICdOb24nOwokbGFuZ1snZnJvbnRlbmRhY2Nlc3MnXSA9ICdBY2MmZWdyYXZlO3MgRnJvbnRlbmQnOwokbGFuZ1sncmVkaXJlY3RwYWdlJ10gPSAnUGFnZSBkZSByZWRpcmVjdGlvbiBzaSBhY2MmZWdyYXZlO3MgcmVmdXMmZWFjdXRlOyc7CiRsYW5nWydzaG93bG9naW5mb3JtJ10gPSAnQWZmaWNoZXIgbGUgZm9ybXVsYWlyZSBkZSBjb25uZXhpb24nOwokbGFuZ1sncmVnaXN0ZXJlZHVzZXJzJ10gPSAnVXRpbGlzYXRldXJzIGVucmVnaXN0ciZlYWN1dGU7cyBzZXVsZW1lbnQnOwokbGFuZ1snYmxvY2snXSA9ICdCbG9jJzsKJGxhbmdbJ3VzZWV4cGlyZWRhdGUnXSA9ICdVdGlsaXNlciBsYSBkYXRlIGQmIzAzOTtleHBpcmF0aW9uJzsKJGxhbmdbJ3N0YXJ0ZGF0ZSddID0gJ0RhdGUgZGUgZCZlYWN1dGU7YnV0JzsKJGxhbmdbJ2VuZGRhdGUnXSA9ICdEYXRlIGRlIGZpbic7CiRsYW5nWydibG9ja2NvbnRlbnQnXSA9ICdCbG9jIGRlIGNvbnRlbnUnOwokbGFuZ1snc2V0cGFnZWluYWN0aXZlJ10gPSAnRCZlYWN1dGU7ZmluaXIgbGEgcGFnZSBjb21tZSBpbmFjdGl2ZSc7CiRsYW5nWydkZWxldGVwYWdlJ10gPSAnRWZmYWNlciBsYSBwYWdlJzsKJGxhbmdbJ3VuaW5zdGFsbGFjdGlvbiddID0gJ1VuaW5zdGFsbCBhY3Rpb24nOwokbGFuZ1snc2V0Y29udGVudDEnXSA9ICdEJmVhY3V0ZTtmaW5pciB0b3V0ZXMgbGVzIHBhZ2VzIGQmIzAzOTtBZHZhbmNlZENvbnRlbnQgYXUgdHlwZSBDb250ZW50JzsKJGxhbmdbJ3NldGNvbnRlbnQyJ10gPSAnRCZlYWN1dGU7ZmluaXIgdG91dGVzIGxlcyBwYWdlcyBkJiMwMzk7QWR2YW5jZWRDb250ZW50IGF1IHR5cGUgQ29udGVudCBldCBzdXBwcmltZXIgbGVzIGJsb2NzIGRlIGNvbnRlbnUgYWRkaXRpb25uZWwnOwokbGFuZ1sncHJlZnN1cGRhdGVkJ10gPSAnUHImZWFjdXRlO2YmZWFjdXRlO3JlbmNlcyBtaXNlcyAmYWdyYXZlOyBqb3VyJzsKJGxhbmdbJ3N1Y2Nlc3MnXSA9ICdPayAnOwokbGFuZ1snZXJyb3InXSA9ICdFcnJldXInOwokbGFuZ1snZGVsZXRlcGFnZXMnXSA9ICdTdXBwcmltZXIgdG91dGVzIGxlcyBwYWdlcyBkZSB0eXBlIEFkdmFuY2VkQ29udGVudCc7CiRsYW5nWydpbXBvcnRwYWdlcyddID0gJ0QmZWFjdXRlO2ZpbmlyIHRvdXRlcyBsZXMgcGFnZSBkZSB0eXBlICVzIGVuIHR5cGUgJXMuJzsKJGxhbmdbJ3BhZ2VzaW1wb3J0ZWQnXSA9ICdUb3V0ZXMgbGVzIHBhZ2VzIHNvbnQgZCZlYWN1dGU7ZmluaWUgZW4gQWR2YW5jZWRDb250ZW50Lic7CiRsYW5nWydjb25maXJtaW1wb3J0J10gPSAnJkVjaXJjO3RlcyB2b3VzIGNlcnRhaW5zIGRlIHZvdWxvaXIgY2hhbmdlciBsZSB0eXBlIGRlIGNvbnRlbnUgZGUgdG91dGVzIGxlcyBwYWdlcyA/JzsKJGxhbmdbJ3RvZ2dsZV9tZXNzYWdlJ10gPSAnQ2FjaGVyIGNlIG1lc3NhZ2UnOwokbGFuZ1snY29udGVudHNldHRpbmdzJ10gPSAnUGFyYW0mZWdyYXZlO3RyZXMgQWR2YW5jZWRDb250ZW50IHBhciBkJmVhY3V0ZTtmYXV0JzsKJGxhbmdbJ3JlZGlyZWN0cGFyYW1zJ10gPSAnUGFyYW0mZWdyYXZlO3RyZXMgZCYjMDM5O1VSTCAmYWdyYXZlOyBham91dGVyIHBvdXIgbGEgcmVkaXJlY3Rpb24nOwokbGFuZ1snZXZhbHVhdGVzbWFydHknXSA9ICdVdGlsaXNlciBzbWFydHkgcG91ciB0cmFpdGVyIGxlcyBwYXJhbSZlZ3JhdmU7dHJlcyc7CiRsYW5nWydlcnJvcl9sb2FkaW5nX21vZHVsZSddID0gJzxlbT48c3Ryb25nPkVycmV1ciA6PC9zdHJvbmc+IE4mIzAzOTthIHBhcyBwdSBjaGFyZ2VyIGxlIG1vZHVsZSAmIzAzOTslcyYjMDM5Oy4gKEQmZWFjdXRlO2ZpbmkgcG91ciBsZSBibG9jICYjMDM5OyVzJiMwMzk7IGRhbnMgdm90cmUgZ2FiYXJpdCBkZSBwYWdlLik8L2VtPic7CiRsYW5nWydlcnJvcl9jb250ZW50YmxvY2tfc3VwcG9ydCddID0gJzxlbT48c3Ryb25nPkVycmV1ciA6PC9zdHJvbmc+IExlIG1vZHVsZSAmIzAzOTslcyYjMDM5OyBuZSBzdXBwb3J0ZSBwYXMgbGVzIGJsb2NzIGRlIGNvbnRlbnUgKGNvbnRlbnRibG9ja3MpLiAoRCZlYWN1dGU7ZmluaSBwb3VyIGxlIGJsb2MgJiMwMzk7JXMmIzAzOTsgZGFucyB2b3RyZSBnYWJhcml0IGRlIHBhZ2UuKTwvZW0+JzsKJGxhbmdbJ3N1Y2Nlc3NfaW1wb3J0cGFnZXMnXSA9ICdUb3V0ZXMgbGVzIHBhZ2VzIGRlIHR5cGUgJXMgb250ICZlYWN1dGU7dCZlYWN1dGU7IGNoYW5nJmVhY3V0ZTtlcyBlbiAlcyc7CiRsYW5nWydzaG93X2FkdmFuY2VkY29udGVudF9vcHRpb25zJ10gPSAnTW9udHJlciBsJiMwMzk7b25nbGV0IGQmIzAzOTtvcHRpb25zIGQmIzAzOTtBZHZhbmNlZENvbnRlbnQnOwokbGFuZ1snZGlzcGxheV9zZXR0aW5ncyddID0gJyVzIGRpc3BsYXkgc2V0dGluZ3MnOwokbGFuZ1snc2F2ZV9jb2xsYXBzZV9zdGF0dXMnXSA9ICdTYXZlIGNvbGxwYXNlIHN0YXR1cyBvZiAlcyc7CiRsYW5nWydjb250ZW50X2Jsb2NrcyddID0gJ2NvbnRlbnQgYmxvY2tzJzsKJGxhbmdbJ2Jsb2NrX21lc3NhZ2UnXSA9ICdjb250ZW50IGJsb2NrIG1lc3NhZ2UnOwokbGFuZ1snYmxvY2tfZ3JvdXBzJ10gPSAnZ3JvdXBlcyBkZSBibG9jJzsKJGxhbmdbJ2NvbGxhcHNlX2RlZmF1bHQnXSA9ICdDb2xsYXBzZSAlcyBieSBkZWZhdWx0JzsKJGxhbmdbJ3Blcl9wYWdlJ10gPSAncGFyIHBhZ2UnOwokbGFuZ1sncGVyX3RlbXBsYXRlJ10gPSAncGFyIGdhYmFyaXQnOwokbGFuZ1snYm90aDEnXSA9ICdnYWJhcml0IE9VIHBhZ2UnOwokbGFuZ1snYm90aDInXSA9ICdnYWJhcml0IEVUIHBhZ2UnOwokbGFuZ1snY29udGVudCddID0gJ0NvbnRlbnUnOwokbGFuZ1snY29udGVudDInXSA9ICdDb250ZW51IGF2YW5jJmVhY3V0ZTsgKEFkdmFuY2VkIENvbnRlbnQpJzsKJGxhbmdbJ3ByZWZzJ10gPSAnUiZlYWN1dGU7Z2xhZ2VzJzsKJGxhbmdbJ211bHRpX2lucHV0J10gPSAnTXVsdGkgSW5wdXRzJzsKJGxhbmdbJ211bHRpX2lucHV0X3RwbCddID0gJ011bHRpIElucHV0IFRlbXBsYXRlcyc7CiRsYW5nWydhZGRfbXVsdGlfaW5wdXQnXSA9ICdBZGQgbmV3IG11bHRpIGlucHV0JzsKJGxhbmdbJ2FkZF9tdWx0aV9pbnB1dF90cGwnXSA9ICdBZGQgbmV3IG11bHRpIGlucHV0IHRlbXBsYXRlJzsKJGxhbmdbJ2lucHV0X2lkJ10gPSAnSW5wdXQgSUQnOwokbGFuZ1snaW5wdXRfZmllbGRzJ10gPSAnSW5wdXQgZmllbGRzJzsKJGxhbmdbJ3RwbF9uYW1lJ10gPSAnTm9tIGR1IGdhYmFyaXQnOwokbGFuZ1snZXJyb3JfdGVtcGxhdGUnXSA9ICdUZW1wbGF0ZSBpcyBhIHJlcXVpcmVkIGZpZWxkIGFuZCBtYXkgbm90IGJlIGVtcHR5JzsKJGxhbmdbJ2Vycm9yX2lucHV0X2ZpZWxkcyddID0gJ0lucHV0IGZpZWxkcyBpcyBhIHJlcXVpcmVkIGZpZWxkIGFuZCBtYXkgbm90IGJlIGVtcHR5Lic7CiRsYW5nWydlcnJvcl9pbnB1dF9pZCddID0gJ05vIGlucHV0IGlkIGdpdmVuIG9yIGlucHV0IGlkIGFscmVhZHkgZXhpc3RzLic7CiRsYW5nWydlcnJvcl9pbnB1dF9pZF9leGlzdHMnXSA9ICdJbnB1dCBJRCBpcyBhbHJlYWR5IGluIHVzZS4gQ2hvb3NlIGEgZGlmZmVyZW50IG9uZS4gKG11c3QgYmUgdW5pcXVlKSc7CiRsYW5nWydtdWx0aV9pbnB1dF9hZGRlZCddID0gJ011bHRpIElucHV0IGFkZGVkLic7CiRsYW5nWydtdWx0aV9pbnB1dF9kZWxldGVkJ10gPSAnTXVsdGkgSW5wdXQgZGVsZXRlZC4nOwokbGFuZ1snbXVsdGlfaW5wdXRfdXBkYXRlZCddID0gJ011bHRpIElucHV0IHVwZGF0ZWQuJzsKJGxhbmdbJ211bHRpX2lucHV0X3RwbF9hZGRlZCddID0gJ011bHRpIElucHV0IHRlbXBsYXRlIGFkZGVkLic7CiRsYW5nWydtdWx0aV9pbnB1dF90cGxfdXBkYXRlZCddID0gJ011bHRpIElucHV0IHRlbXBsYXRlIHVwZGF0ZWQuJzsKJGxhbmdbJ211bHRpX2lucHV0X3RwbF9kZWxldGVkJ10gPSAnTXVsdGkgSW5wdXQgdGVtcGxhdGUgZGVsZXRlZC4nOwokbGFuZ1snZGVsZXRlX3NlbGVjdGVkJ10gPSAnRWZmYWNlciBsZXMgJmVhY3V0ZTtsJmVhY3V0ZTttZW50cyBzJmVhY3V0ZTtsY2V0aW9ubiZlYWN1dGU7cyc7CiRsYW5nWydjb25maXJtX2RlbGV0ZSddID0gJ1ZvdWxleiB2b3VzIHZyYWltZW50IHN1cHByaW1lciBsZXMgJmVhY3V0ZTtsJmVhY3V0ZTttZW50cyBzJmVhY3V0ZTtsZWN0aW9ubiZlYWN1dGU7cyA/JzsKJGxhbmdbJ2NvbmZpcm1fZGVsZXRlX3NlbGVjdGVkJ10gPSAnRG8geW91IHJlYWxseSB3YW50IGRvIGRlbGV0ZSB0aGUgc2VsZWN0ZWQgaXRlbXM/JzsKJGxhbmdbJ3VzZV9jb250ZW50dHlwZSddID0gJ1VzZSBjb250ZW50dHlwZSc7CiRsYW5nWydoZWxwX3RwbF92YXJzJ10gPSAnPHA+PHN0cm9uZz5UZW1wbGF0ZSB2YXJzOjwvc3Ryb25nPjwvcD4NCjxwPjxwcmU+PGNvZGU+eyRpbnB1dHN9PC9jb2RlPjwvcHJlPiBpcyBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGFsbCBkZWZpbmVkIGlucHV0IGVsZW1lbnRzIG9mIHRoYXQgbXVsdGkgaW5wdXQgYmxvY2suPGJyIC8+DQpFYWNoIGlucHV0IGVsZW1lbnQgaXMgYW4gYXJyYXkgdGhhdCBjb250YWlucyBhbGwgaXRzIHBhcmFtcy4gPGJyIC8+DQpTZWUgbW9kdWxlIGhlbHAgZm9yIG1vcmUgaW5mby48YnIgLz4NCkFkZGl0aW9uYWwgcGFyYW0gaXMgJnF1b3Q7aW5wdXQmcXVvdDsgdGhhdCB3aWxsIHByaW50IG91dCB0aGUgaW5wdXQgZWxlbWVudC48YnIgLz4NClRvIGFjY2VzcyB0aGUgcGFyYW1zIHVzZSB0aGUgZG90IHN5bnRheC48YnIgLz4NCkV4YW1wbGU6PC9wPg0KPHByZT48Y29kZT57Zm9yZWFjaCBmcm9tPSRpbnB1dHMgaXRlbT1lbG19DQoJeyRlbG0ubGFiZWx9OiZuYnNwO3skZWxtLmlucHV0fTxiciAvPg0Key9mb3JlYWNofTwvY29kZT48L3ByZT4nOwokbGFuZ1snaGVscCddID0gJzxiciAvPg0KPGgzPlF1ZSBmYWl0IGNlIG1vZHVsZSA/PC9oMz4NCjxwPlRoaXMgaXMgYSBtb2RpZmljYXRpb24gb2YgdGhlIGRlZmF1bHQgY29udGVudCB0eXBlICZxdW90O0NvbnRlbnQmcXVvdDsgb2YgQ01TbXMuPGJyIC8+DQpJdCBwcm92aWRlcyBtb3JlIGZsZXhpYmlsaXR5IGJ5IGNyZWF0aW5nIGN1c3RvbSBpbnB1dCBjb250cm9scyBpbiBiYWNrZW5kLjxiciAvPg0KVXNlcnMgY2FuIGFkZCBkcm9wZG93bnMsIG11bHRpcGxlIHNlbGVjdCBsaXN0cywgY2hlY2tib3hlcywgZ3JvdXAgY29udGVudCBibG9ja3MgDQppbiBzZXBhcmF0ZSBwYWdlIHRhYnMsIGJsb2NrIHRhYnMgaW5zaWRlIGEgcGFnZSB0YWIgb3IgaW4gZmllbGRzZXRzIGJ5IGp1c3QgDQp1c2luZyBhZGRpdGlvbmFsIHBhcmFtcyBpbiB0aGUgdGVtcGxhdGUgd2hlbiBjYWxsaW5nIHRoZSBjb250ZW50LjxiciAvPg0KSXQgYWxzbyBhZGRzIGFiaWxpdHkgdG8gZ3JhbnQgYWNjZXNzIG9mIHBhZ2VzIHRvIGNlcnRhaW4gdXNlcnMgb2YgdGhlIA0KRnJvbnRFbmRVc2VycyBtb2R1bGUgYW5kIGhpZGUgdGhlIGNvbnRlbnQsIHJlcGxhY2UgaXQgYnkgdGhlIGxvZ2luIGZvcm0gb2YgdGhlIA0KRnJvbnRFbmRVc2VycyBtb2R1bGUgb3IgcmVkaXJlY3QgdG8gYSBzcGVjaWZpZWQgcGFnZSBzaG93aW5nIHRoZSBsb2dpbiBmb3JtIG9yIA0KanVzdCByZWRpcmVjdCB3aXRob3V0IGRvaW5nIGFueXRoaW5nIGVsc2UuPGJyIC8+DQpQYWdlIHByb3BlcnR5IG9mIEZyb250RW5kVXNlcnMgYWNjZXNzIGFuZCByZWRpcmVjdCBwYWdlIGNhbiBiZSBpbmhlcml0ZWQgYnkgDQpwYXJlbnQgcGFnZXMuPC9wPg0KPHA+PGVtPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVG8gZ2V0IHRoZSBmdWxsIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBjb250ZW50IHR5cGUgDQppbiBmcm9udGVuZCB5b3UgbmVlZCB0byBjYWxsIHlvdXIgY29udGVudCB3aXRoIHRoZSBtb2R1bGUgcGx1Z2luIHtBZHZhbmNlZENvbnRlbnR9IA0KKGNhc2Ugc2Vuc2l0aXZlISkuPGJyIC8+DQpPdGhlcndpc2UgaXQgbWF5IGJlaGF2ZSBsaWtlIHRoZSBkZWZhdWx0IGNvbnRlbnQgdHlwZSBwbHVnaW4uPC9lbT48L3A+DQo8cD5Zb3UgY2FuIGV2ZW4gdXNlIHNtYXJ0eSBsb2dpYyBpbiBwYXJhbWV0ZXIgdmFsdWVzLiBUaGF0IG1lYW5zIHlvdSBjYW4gdXNlIHRoZSANCnJlc3VsdCBvZiBhIHBsdWdpbiwgYW4gdWR0IG9yIGV2ZW4gYSBtb2R1bGUgb3IganVzdCB0aGUgY29udGVudCBvZiBhIGdsb2JhbCANCmNvbnRlbnQgYmxvY2sgYXMgcGFyYW1ldGVyIHZhbHVlIHRvIGNyZWF0ZSBkeW5hbWljIHZhbHVlcy48L3A+DQo8aDM+Q29tbWVudCBsJiMwMzk7dXRpbGlzZXIgPzwvaDM+DQo8cD5BZnRlciBpbnN0YWxsYXRpb24gdGhlIG1vZHVsZSBzZXR0aW5ncyBjYW4gYmUgZm91bmQgaW4gJnF1b3Q7RXh0ZW5zaW9ucy0+QWR2YW5jZWRDb250ZW50JnF1b3Q7LjwvcD4NCjxwPkFkZGl0aW9uYWxseSB5b3Ugd2lsbCBoYXZlIGEgbmV3IGNvbnRlbnQgdHlwZSAmcXVvdDtBZHZhbmNlZENvbnRlbnQmcXVvdDsgYXZhaWxhYmxlIA0Kd2hlbiBhZGRpbmcvZWRpdGluZyBhIHBhZ2UuPGJyIC8+DQo8cD5BZGQgdGhlIGZvbGxvd2luZyBwYXJhbXMgdG8geW91ciBjb250ZW50IHRhZyBpbiB5b3VyIHBhZ2UgdGVtcGxhdGUsIA0KY2hhbmdlIHRoZSBjb250ZW50IHR5cGUgb2YgeW91ciBwYWdlIHRvICZxdW90O0FkdmFuY2VkQ29udGVudCZxdW90OyBhbmQgc2VlIHdoYXQgaGFwcGVucyANCmluIGJhY2tlbmQuLi48L3A+DQo8aDM+V2hhdCBwYXJhbWV0ZXJzIGFyZSBhdmFpbGFibGU/PC9oMz4NCjxwPmFsbCBwYXJhbXMgYXJlIG9wdGlvbmFsPC9wPg0KPHA+PHN0cm9uZz5EZWZhdWx0IHBhcmFtczo8L3N0cm9uZz48L3A+DQo8dWw+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5ibG9jazwvdHQ+IChzdHJpbmcpDQoJCTx1bD4NCgkJCTxsaT4NCgkJCQlBbGxvd3MgeW91IHRvIGhhdmUgbW9yZSB0aGFuIG9uZSBjb250ZW50IGJsb2NrIHBlciBwYWdlLiBJZiBtdWx0aXBsZSBjb250ZW50IHRhZ3MgYXJlIHB1dCBvbiBhIHRlbXBsYXRlLCB0aGF0IG51bWJlciBvZiBlZGl0IGJveGVzIHdpbGwgYmUgZGlzcGxheWVkIGlmIHRoZSBwYWdlIGlzIGVkaXRlZC48YnIgLz4NCgkJCQllLmcuOiA8Y29kZT57Y29udGVudCBibG9jaz0mcXVvdDtTZWNvbmQgQ29udGVudCBibG9jayZxdW90O308L2NvZGU+PGJyIC8+DQoJCQkJTm93LCBpZiB5b3UgZWRpdCBhIHBhZ2UgdGhlcmUgd2lsbCBiYSBhIHRleHRhcmVhIGNhbGxlZCAmcXVvdDtTZWNvbmQgQ29udGVudCBibG9jayZxdW90Oy48YnIgLz4NCgkJCQk8ZW0+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBUaGUgbmFtZSBvZiB0aGUgY29udGVudCBibG9jayBtYXkgY29udGFpbiBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGFuZCB1bmRlcnNjb3JlcyAobm8gd2hpdGVzcGFjZXMsIHNwZWNpYWwgY2hhcnMsIHVtbGF1dHMgZXRjLikuIE90aGVyd2lzZSBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHByb3BlciBuYW1lIChzaW1pbGFyIHRvIHRoZSBwYWdlIGFsaWFzKS48L2VtPg0KCQkJPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0Pnd5c2l3eWc8L3R0PiAodHJ1ZS9mYWxzZSkNCgkJPHVsPg0KCQkJPGxpPklmIHNldCB0byBmYWxzZSwgdGhlbiBhIHd5c2l3eWcgd2lsbCBuZXZlciBiZSB1c2VkIHdoaWxlIGVkaXRpbmcgdGhpcyBibG9jay4gSWYgdHJ1ZSwgdGhlbiBpdCBhY3RzIGFzIG5vcm1hbC48L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+b25lbGluZTwvdHQ+ICh0cnVlL2ZhbHNlKQ0KCQk8dWw+DQoJCQk8bGk+SWYgc2V0IHRvIHRydWUsIHRoZW4gb25seSBvbmUgZWRpdCBsaW5lIHdpbGwgYmUgc2hvd24gd2hpbGUgZWRpdGluZyB0aGlzIGJsb2NrLiBJZiBmYWxzZSwgdGhlbiBpdCBhY3RzIGFzIG5vcm1hbC4gT25seSB3b3JrcyB3aGVuIGJsb2NrIHBhcmFtZXRlciBpcyB1c2VkLjwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5kZWZhdWx0PC90dD4gKHN0cmluZykNCgkJPHVsPg0KCQkJPGxpPkRlZmF1bHQgY29udGVudCB3aGVuIGNyZWF0aW5nIGEgbmV3IHBhZ2UuPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmxhYmVsPC90dD4gKHN0cmluZykNCgkJPHVsPg0KCQkJPGxpPlByb21wdCBmb3IgdGhpcyBjb250ZW50IGJsb2NrLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGFueSBleHByZXNzaW9uLiBJZiBibGFuaywgdGhlIHVuY29udmVydGVkIGJsb2NrIG5hbWUgaXMgdXNlZC48L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+YXNzaWduPC90dD4gKHN0cmluZykNCgkJPHVsPg0KCQkJPGxpPg0KCQkJCUFzc2lnbnMgdGhlIGNvbnRlbnQgdG8gYSBzbWFydHkgcGFyYW1ldGVyLCB3aGljaCB5b3UgY2FuIHRoZW4gdXNlIGluIG90aGVyIGFyZWFzIG9mIHRoZSBwYWdlLCBvciB1c2UgdG8gdGVzdCB3aGV0aGVyIGNvbnRlbnQgZXhpc3RzIGluIGl0IG9yIG5vdC48YnIgLz4NCgkJCQlFeGFtcGxlIG9mIHBhc3NpbmcgcGFnZSBjb250ZW50IHRvIGEgVXNlciBEZWZpbmVkIFRhZyBhcyBhIHBhcmFtZXRlcjo8YnIgLz4NCgkJCQk8Y29kZT57Y29udGVudCBhc3NpZ249cGFnZWNvbnRlbnR9PGJyIC8+DQoJCQkJe3RhYmxlX29mX2NvbnRlbnRzIHRoZXBhZ2Vjb250ZW50PSZxdW90OyRwYWdlY29udGVudCZxdW90O308L2NvZGU+PGJyIC8+DQoJCQkJPGVtPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gRm9yIHNvbWUgcmVhc29uIHRoaXMgcGFyYW0gZG9lcyBub3Qgd29yayBhdCB0aGUgbW9tZW50IHdpdGggdGhlIG1vZHVsZSBwbHVnaW4ge0F2YW5jZWRDb250ZW50fS4gVXNlIDxiciAvPjxjb2RlPntjYXB0dXJlIGFzc2lnbj0mcXVvdDtmb28mcXVvdDt9e0FkdmFuY2VkQ29udGVudH17L2NhcHR1cmV9PC9jb2RlPiA8YnIgLz5pbnN0ZWFkLjwvZW0+DQoJCQk8L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KPC91bD4NCjxwPjxzdHJvbmc+QWR2YW5jZWQgcGFyYW1zOjwvc3Ryb25nPjwvcD4NCjx1bD4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmJsb2NrX3R5cGU8L3R0PiAodGV4dCxjaGVja2JveCxkcm9wZG93bixzZWxlY3RfbXVsdGlwbGUsZGF0ZSkgDQoJCTx1bD4NCgkJCTxsaT5BbGxvd3MgeW91IHRvIHNwZWNpZnkgd2hhdCBjb250ZW50IGNvbnRyb2wgdHlwZSBpcyB1c2VkIGluIHRoZSBiYWNrIGVuZC4gU3VwcG9ydHMgYmxvY2stcGFyYW1ldGVycyB0byBpbmNsdWRlIGFkZGl0aW9uYWwgb3B0aW9ucy48L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+cGFnZV90YWI8L3R0PiAoc3RyaW5nKQ0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJVGhpcyBwYXJhbWV0ZXIgc2V0cyB0aGUgdGFiIGluIHdoaWNoIHRoZSBjb250ZW50IGJsb2NrIGlzIGRpc3BsYXllZCBpbiB0aGUgYmFja2VuZC48YnIgLz4NCgkJCQlQb3NzaWJsZSB2YWx1ZXMgYXJlICZxdW90O21haW4mcXVvdDsgKCA9IFRhYiAmcXVvdDtNYWluIE1lbnUmcXVvdDspLCAmcXVvdDtvcHRpb25zJnF1b3Q7ICggPSBUYWIgJnF1b3Q7T3B0aW9ucyZxdW90OyksIG9yIGFueSBvdGhlciBhcmJpdHJhcnkgdmFsdWU8YnIgLz4NCgkJCQk8ZW0+ZS5nLiB5b3UgY2FuIGFkZCBhIGNoZWNrYm94IHRvIHRoZSBvcHRpb25zIHRhYiBvciBjcmVhdGUgbmV3IHRhYnM8L2VtPi4NCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5ibG9ja190YWI8L3R0PiAoc3RyaW5nKQ0KCQk8dWw+DQoJCQk8bGk+V2l0aCB0aGlzIHBhcmFtZXRlciwgdGhlIGJsb2NrcyB3aXRoaW4gYSBwYWdlIHRhYiBjYW4gYmUgZnVydGhlciBkaXZpZGVkIGludG8gdGFicyBvciBjYW4gYmUgZ3JvdXBlZCB0b2dldGhlci4gQW55IGV4cHJlc3Npb24gY2FuIGJlIHVzZWQgYXMgYSBwb3NzaWJsZSB2YWx1ZS48L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+YmxvY2tfZ3JvdXA8L3R0PiAoc3RyaW5nKQ0KCQk8dWw+DQoJCQk8bGk+V2l0aCB0aGlzIHBhcmFtZXRlciwgbXVsdGlwbGUgYmxvY2tzIGNhbiBiZSBncm91cGVkIGluIGEgZmllbGRzZXQuIEFueSBleHByZXNzaW9uIGNhbiBiZSB1c2VkIGFzIGEgcG9zc2libGUgdmFsdWUuPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmFjdGl2ZTwvdHQ+ICh0cnVlL2ZhbHNlKQ0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJQWxsb3dzIHlvdSB0byBkaXNhYmxlIGEgY29udGVudCBibG9jay4gRGlzYWJsZWQgY29udGVudCBibG9ja3Mgd29uJiMwMzk7dCBiZSBzaG93biBpbiBiYWNrZW5kIGFzIHdlbGwgYXMgaW4gZnJvbnRlbmQuIChvbmx5IHdvcmtzIHdpdGgge0FkdmFuY2VkQ29udGVudH0gcGx1Z2luKTxiciAvPg0KCQkJPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PnN0eWxlPC90dD4gKHN0cmluZykNCgkJPHVsPg0KCQkJPGxpPg0KCQkJCXNldCB0aGUgaW5saW5lIHN0eWxlIG9mIHRoZSBlbGVtZW50IGluIGJhY2tlbmQuIDxiciAvPg0KCQkJCWUuZy46IG1ha2UgYSBub3RlIHJlZCB3aXRoIDxjb2RlPnN0eWxlPSYjMDM5O2NvbG9yOiNGRjAwMDA7JiMwMzk7PC9jb2RlPg0KCQkJPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmVkaXRvcl9ncm91cHM8L3R0PiAoc3RyaW5nKQ0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJQSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBncm91cCBuYW1lcyB0aGF0IGFyZSBhbGxvd2VkIHRvIGVkaXQgdGhpcyBibG9jay4NCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5lZGl0b3JfdXNlcnM8L3R0PiAoc3RyaW5nKQ0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJQSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiB1c2VyIG5hbWVzIHRoYXQgYXJlIGFsbG93ZWQgdG8gZWRpdCB0aGlzIGJsb2NrLg0KCQkJPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8ZW0+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBpZiB0aGUgcGFyYW1zIDx0dD5lZGl0b3JfdXNlcnM8L3R0PiBhbmQgPHR0PmVkaXRvcl9ncm91cHM8L3R0PiBhcmUgZW1wdHkgdGhlIGJsb2NrIG1heSBiZSBlZGl0ZWQgYnkgYW55IHVzZXIgd2l0aCBzdWZmaWNpZW50IHBlcm1pc3Npb24gdG8gZWRpdCBhIHBhZ2U8L2VtPjxiciAvPjxiciAvPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+ZmV1X2FjY2VzczwvdHQ+IChub3QgcmVhZHkgeWV0KQ0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJQSBsaXN0IG9mIGZldSBncm91cHMgc2VwYXJhdGVkIGJ5IGEgY29tbWEuPGJyIC8+DQoJCQkJVGhpcyBncmFudHMgYWNjZXNzIHRvIHRoaXMgY29udGVudCBibG9jayBvbmx5IHRvIGNlcnRhaW4gZmV1IGdyb3Vwcy48YnIgLz4NCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5mZXVfYWN0aW9uPC90dD4gKHRydWUvZmFsc2UpICAobm90IHJlYWR5IHlldCkNCgkJPHVsPg0KCQkJPGxpPg0KCQkJCVNwZWNpZnkgaWYgdGhlIGxvZ2luIGZvcm0gb2YgdGhlIGZldSBtb2R1bGUgd2lsbCBiZSBzaG93biBvciBub3QuPGJyIC8+DQoJCQk8L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+YWxsb3dfbm9uZTwvdHQ+ICh0cnVlL2ZhbHNlKQ0KCQk8dWw+DQoJCQk8bGk+U2V0IHRvIHRydWUgaWYgdGhlIHVzZXIgbWF5IGVudGVyIGVtcHR5IHZhbHVlcy4gPGJyIC8+SWYgc2V0IHRvIGZhbHNlIGFuZCB2YWx1ZSBpcyBlbXB0eSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgcGFyYW0gJnF1b3Q7ZGVmYXVsdCZxdW90OyB3aWxsIGJlIHVzZWQuIDxiciAvPklmIHNldCB0byB0cnVlIGFuZCBibG9jayBpcyBvZiB0eXBlIGltYWdlL2ZpbGUgdGhlIG9wdGlvbiAmcXVvdDtub25lJnF1b3Q7IChtb2RlPSZxdW90O2Ryb3Bkb3duJnF1b3Q7KSBvciBhIGJ1dHRvbiB0byBjbGVhciB0aGUgc2VsZWN0ZWQgZmlsZS9pbWFnZSB2YWx1ZSAobW9kZT0mcXVvdDtmaWxlcGlja2VyJnF1b3Q7KSB3aWxsIGJlIGRpc3BsYXllZC48L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+c21hcnR5PC90dD4gKHRydWUvZmFsc2UpDQoJCTx1bD4NCgkJCTxsaT4NCgkJCQlUdXJuIHNtYXJ0eSBwcm9jZXNzaW5nIG9mIHZhbHVlcyBvbi9vZmYuPGJyIC8+DQoJCQkJSWYgc2V0IHRvIHRydWUgYW55IGdpdmVuIHZhbHVlIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IHRoZSBzbWFydHkgZW5naW5lLjxiciAvPg0KCQkJCTxlbT48c3Ryb25nPk5vdGU6IDwvc3Ryb25nPiBOb3RpY2UgdGhhdCB5b3UgY2Fubm90IHVzZSB0aGUgZGVmYXVsdCBzbWFydHkgZGVsaW1pdGVycyB0aGF0IGFyZSB1c2VkIGluIHRoZSB0ZW1wbGF0ZS4gVGhpcyB3aWxsIGNhdXNlIHNtYXJ0eSBlcnJvcnMgaW4gZnJvbnRlbmQuPGJyIC8+DQoJCQkJU28geW91IG5lZWQgdG8gdXNlIDo6OiBhcyBkZWxpbWl0ZXIgaW5zdGVhZC48YnIgLz48L2VtPg0KCQkJCUUuZy46IDxjb2RlPntjb250ZW50IGJsb2NrPSZxdW90O0NhdGVnb3JpZXMmcXVvdDsgbGFiZWw9JnF1b3Q7U2VsZWN0IGEgY2F0ZWdvcnkmcXVvdDsgYmxvY2tfdHlwZT0mcXVvdDtkcm9wZG93biZxdW90OyBpdGVtcz0mcXVvdDs6OjpnbG9iYWxfY29udGVudCBuYW1lPSYjMDM5O2NhdGVnb3J5bGlzdCYjMDM5Ozo6OiZxdW90OyBzbWFydHk9JnF1b3Q7dHJ1ZSZxdW90O308L2NvZGU+DQoJCQk8L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+ZGVzY3JpcHRpb248L3R0PiAoc3RyaW5nKSANCgkJPHVsPg0KCQkJPGxpPkFsbG93cyB5b3UgdG8gYWRkIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gdG8gdGhhdCBibG9jayBmb3IgeW91ciBlZGl0b3JzLjwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQo8L3VsPg0KPHA+PHN0cm9uZz5QYXJhbXMgb2YgYmxvY2t0eXBlICZxdW90O2NoZWNrYm94JnF1b3Q7Ojwvc3Ryb25nPjwvcD4NCjx1bD4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmRlZmF1bHQ8L3R0PiAodHJ1ZS9mYWxzZSkgDQoJCTx1bD4NCgkJCTxsaT4NCgkJCQljaGVja3MvdW5jaGVja3MgdGhlIGNoZWNrYm94IGJ5IGRlZmF1bHQgd2hlbiBhZGRpbmcgYSBwYWdlPGJyIC8+DQoJCQkJPGVtPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVXNlICZxdW90OzEmcXVvdDsgZm9yIGNoZWNrZWQgYW5kICZxdW90OzAmcXVvdDsgZm9yIHVuY2hlY2tlZCBieSBkZWZhdWx0PGJyIC8+PC9lbT4NCgkJCQlFLmcuIDxjb2RlPntjb250ZW50IGJsb2NrX3R5cGU9JnF1b3Q7Y2hlY2tib3gmcXVvdDsgZGVmYXVsdD0xfTwvY29kZT4NCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQo8L3VsPg0KPHA+PHN0cm9uZz5QYXJhbXMgb2YgYmxvY2t0eXBlICZxdW90O2Ryb3Bkb3duJnF1b3Q7LyZxdW90O3NlbGVjdF9tdWx0aXBsZSZxdW90Ozo8L3N0cm9uZz48L3A+DQo8dWw+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5pdGVtczwvdHQ+IChzdHJpbmcpDQoJCTx1bD4NCgkJCTxsaT5JdGVtIGxhYmVsKHMpIG9mIHRoZSBmaWVsZChzKSAoc2VwYXJhdGVkIGJ5IGEgZGVsaW1pdGVyIC0gZGVmYXVsdCBpcyB8IChwaXBlKSk8L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+dmFsdWVzPC90dD4gKHN0cmluZykNCgkJPHVsPg0KCQkJPGxpPlZhbHVlKHMpIG9mIHRoZSBpdGVtcyAoc2VwYXJhdGVkIGJ5IGEgZGVsaW1pdGVyIC0gZGVmYXVsdCBpcyB8IChwaXBlKSk8L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxlbT48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz4gaWYgdGhlcmUgYXJlIGxlc3MgdmFsdWVzIHRoYW4gaXRlbXMgdGhlIGl0ZW0gbGFiZWxzIHdpbGwgYmUgdXNlZCBhcyB2YWx1ZXMgKGFuZCB2aXNlIHZlcnNhKS48L2VtPjxiciAvPjxiciAvPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+ZGVmYXVsdDwvdHQ+IChzdHJpbmcpDQoJCTx1bD4NCgkJCTxsaT4NCgkJCQlQcmVzZWxlY3RlZCB2YWx1ZShzKSAoc2VwYXJhdGVkIGJ5IGEgZGVsaW1pdGVyIC0gZGVmYXVsdCBpcyB8IChwaXBlKSk8YnIgLz4NCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5kZWxpbWl0ZXI8L3R0PiAoc3RyaW5nKQ0KCQk8dWw+DQoJCQk8bGk+QSBzaWduIG9yIHN0cmluZyB0aGF0IHdpbGwgYmUgdXNlZCB0byBkZXZpZGUgdGhlIGl0ZW1zL3ZhbHVlcyAoZGVmYXVsdCBpcyB8IChwaXBlKSk8L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5zaXplPC90dD4gKGludGVnZXIpDQoJCTx1bD4NCgkJCTxsaT5IZWlnaHQgb2YgY29udGVudCBibG9jayBpbiBiYWNrIGVuZCBpZiA8Y29kZT5ibG9ja190eXBlPSZxdW90O3NlbGVjdF9tdWx0aXBsZSZxdW90OzwvY29kZT4gaXMgc2V0LiA8ZW0+KERlZmF1bHQgaXMgbnVtYmVyIG9mIGl0ZW1zKTwvZW0+PC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+PGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+c29ydGFibGVfaXRlbXM8L3R0PiAodHJ1ZS9mYWxzZSkgLSBzZWxlY3RfbXVsdGlwbGUgb25seQ0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJSWYgc2V0IHRvIHRydWUgdGhlIGl0ZW1zIHdvbiYjMDM5O3QgYmUgc2hvd24gYXMgYSBtdWx0aXBsZSBzZWxlY3QgaW5wdXQgd2l0aCBvcHRpb25zIGJ1dCBhcyBhIGxpc3Qgb2YgY2hlY2tib3hlcyB0aGF0IGNhbiBiZSByZW9yZGVyZWQuPGJyIC8+RWFjaCByb3cgY29udGFpbnMgdGhlIGl0ZW0gbGFiZWwgYW5kIGEgY2hlY2tib3ggd2l0aCB0aGUgaXRlbSB2YWx1ZS48YnIgLz4NCgkJCQk8ZW0+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBvbmx5IHRoZSBvcmRlciBvZiB0aGUgPHN0cm9uZz5zZWxlY3RlZDwvc3Ryb25nPiBpdGVtcyB3aWxsIGJlIHN0b3JlZCBhbmQgYWx3YXlzIGRpc3BsYXllZCBvbiB0aGUgdG9wIG9mIHRoZSBsaXN0IHdoZW4gcmVsb2FkaW5nIHRoZSBlZGl0IHBhZ2UuPGJyIC8+DQoJCQkJVW5zZWxlY3RlZCBpdGVtcyB3aWxsIGFwcGVuZGVkIGluIHRoYXQgb3JkZXIgdGhleSBhcmUgZGVmaW5lZCBpbiB0aGUgdGVtcGxhdGU8L2VtPg0KCQkJPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmNvbGxhcHNlPC90dD4gKHRydWUvZmFsc2UpDQoJCTx1bD4NCgkJCTxsaT4NCgkJCQlUaGUgZGVmYXVsdCBkaXNwbGF5IG9mIHRoZSBibG9jayBpbiBiYWNrZW5kLg0KCQkJPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCjwvdWw+DQo8cD48c3Ryb25nPlBhcmFtcyBvZiBibG9ja3R5cGUgJnF1b3Q7ZGF0ZSZxdW90Ozo8L3N0cm9uZz48L3A+DQo8dWw+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5zdGVwX2hvdXJzPC90dD4gKGludCkgDQoJCTx1bD4NCgkJCTxsaT4NCgkJCQlzdGVwcyBvZiBob3VycyBpbiB0aGUgY2xvY2sgZHJvcGRvd24uIChkZWZhdWx0IGlzIDEpDQoJCQk8L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+c3RhcnRfaG91cjwvdHQ+IChpbnQpIA0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJdGhlIHN0YXJ0IGhvdXIgb2YgdGhlIGNsb2NrIGRyb3Bkb3duLiAoZGVmYXVsdCBpcyAwKQ0KCQkJPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmVuZF9ob3VyPC90dD4gKGludCkgDQoJCTx1bD4NCgkJCTxsaT4NCgkJCQl0aGUgZW5kIGhvdXIgb2YgdGhlIGNsb2NrIGRyb3Bkb3duIChkZWZhdWx0IGlzIDEyIG9yIDIzKQ0KCQkJPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PnNob3cyNGg8L3R0PiAodHJ1ZS9mYWxzZSkgDQoJCTx1bD4NCgkJCTxsaT4NCgkJCQlzZXQgdG8gZmFsc2UgaWYgQU0vUE0gaXMgdXNlZC4gKGRlZmF1bHQgaXMgdHJ1ZSkNCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5zdGVwX21pbnV0ZXM8L3R0PiAoaW50KSANCgkJPHVsPg0KCQkJPGxpPg0KCQkJCXN0ZXBzIG9mIG1pbnV0ZXMgaW4gdGhlIGNsb2NrIGRyb3Bkb3duLiAoZGVmYXVsdCBpcyAxMCkNCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5zdGFydF9taW51dGU8L3R0PiAoaW50KSANCgkJPHVsPg0KCQkJPGxpPg0KCQkJCXRoZSBzdGFydCBtaW51dGUgb2YgdGhlIGNsb2NrIGRyb3Bkb3duLiAoZGVmYXVsdCBpcyAwKQ0KCQkJPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+ZW5kX21pbnV0ZTwvdHQ+IChpbnQpIA0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJdGhlIGVuZCBtaW51dGUgb2YgdGhlIGNsb2NrIGRyb3Bkb3duIChkZWZhdWx0IGlzIDU5KQ0KCQkJPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PnNob3dfY2xvY2s8L3R0PiAodHJ1ZS9mYWxzZSkgDQoJCTx1bD4NCgkJCTxsaT4NCgkJCQlzZXQgdG8gZmFsc2UgaWYgbm8gdGltZSBkcm9wZG93biBzaG91bGQgYmUgZGlzcGxheWVkIChkZWZhdWx0IGlzIHRydWUpPGJyIC8+DQoJCQkJPGVtPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gSWYgc2V0IHRvIGZhbHNlIDAwOjAwIG8mIzAzOTtjbG9jayB3aWxsIGJlIHVzZWQ8L2VtPg0KCQkJPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmRhdGVfZm9ybWF0PC90dD4gKHN0cmluZykgDQoJCTx1bD4NCgkJCTxsaT4NCgkJCQlUaGUgc3RyZnRpbWUgZGF0ZSBmb3JtYXQgdG8gc2hvdyBpbiBmcm9udGVuZC4NCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQo8L3VsPg0KPGgzPlN1cHBvcnQ8L2gzPg0KPHA+VGhpcyBtb2R1bGUgZG9lcyBub3QgaW5jbHVkZSBjb21tZXJjaWFsIHN1cHBvcnQuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PC9wPg0KPHVsPg0KCTxsaT5UaGUgcHJvamVjdHMgaG9tZXBhZ2UgaXMgPGEgaHJlZj0iaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9jb250ZW50Mi8iPmh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvY29udGVudDIvPC9hPjwvbGk+DQoJPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi48L2xpPg0KPC91bD4NCjxiciAvPg0KPHA+RmVlbCBmcmVlIHJlcG9ydCBhbnkga2luZCBvZiBmZWVkYmFjay48L3A+DQo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4NCjxwPg0KCUFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLjxiciAvPg0KCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLDxiciAvPg0KCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mPGJyIC8+DQoJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLjxiciAvPg0KCVNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy48YnIgLz4NCglZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZTxiciAvPg0KCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlPGJyIC8+DQoJRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0E8YnIgLz4NCglPciByZWFkIGl0IG9ubGluZTogPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5odHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEw8L2E+PGJyIC8+DQoJUGxlYXNlIHJlYWQgdGhlIHRleHQgb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuDQo8L3A+DQo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMTAsIEdlb3JnIEJ1c2NoIChOYU4pLiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+DQo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPg0KPGJyIC8+JzsKJGxhbmdbJ2NoYW5nZWxvZyddID0gJzxiciAvPg0KPHA+PHN0cm9uZz5Nb2R1bGUgcmVsZWFzZXM8L3N0cm9uZz4uLi48L3A+DQo8dWw+DQoJPGxpPjxwPjxzdHJvbmc+MC42IChPY3QgMjAxMCk6PC9zdHJvbmc+PC9wPg0KCQk8dWw+DQoJCQk8bGk+PHA+QnVnZml4ZXM6PC9wPg0KCQkJCTx1bD4NCgkJCQkJPGxpPjxwPi0gc2V2ZXJhbCBidWdmaXhlczwvcD48L2xpPg0KCQkJCTwvdWw+DQoJCQk8L2xpPg0KCQkJPGxpPjxwPkZlYXR1cmVzOjwvcD4NCgkJCQk8dWw+DQoJCQkJCTxsaT48cD4tIGFkZGVkIHBhcmFtIGJsb2NrX2dyb3VwPC9wPjwvbGk+DQoJCQkJPC91bD4NCgkJCTwvbGk+DQoJCQk8bGk+PHA+TWlzYzo8L3A+DQoJCQkJPHVsPg0KCQkJCQk8bGk+PHA+LSBSZW1vdmVkIGZpbGUgcGlja2VyIChhbmQgYXNzb2NpYXRlZCBibG9ja190eXBlcyBpbWFnZS9maWxlKSAtIHVzZSBHQkZpbGVQaWNrZXIgaW5zdGVhZC48L3A+PC9saT4NCgkJCQk8L3VsPg0KCQkJPC9saT4NCgkJPC91bD4NCgk8L2xpPg0KCTxsaT48cD48c3Ryb25nPjAuNSAoU2VwdCAyMDEwKTo8L3N0cm9uZz48L3A+DQoJCTx1bD4NCgkJCTxsaT48cD5CdWdmaXhlczo8L3A+DQoJCQkJPHVsPg0KCQkJCQk8bGk+PHA+Zml4ZWQgYnVnIGl0ZW0gIzUyOTIgKG1lbW9yeSBpc3N1ZSk8L3A+PC9saT4NCgkJCQkJPGxpPjxwPmZpeGVkIGJ1ZyBpdGVtICM1MjU0IChkaXNhYmxlIHd5c2l3eWcgbm90IHdvcmtpbmcpPC9wPjwvbGk+DQoJCQkJCTxsaT48cD5maXhlZCBidWcgaXRlbSAjNTMxMCAodXJsb25seSBub3Qgd29ya2luZyk8L3A+PC9saT4NCgkJCQkJPGxpPjxwPmZpeGVkIGJ1ZyBpdGVtICM1MzExIChpbWFnZSBwYXRocyBub3Qgc3RvcmVkICYjMDM5O2NvcnJlY3RseSYjMDM5Oyk8L3A+PC9saT4NCgkJCQk8L3VsPg0KCQkJPC9saT4NCgkJCTxsaT48cD5GZWF0dXJlczo8L3A+DQoJCQkJPHVsPg0KCQkJCQk8bGk+PHA+YWRkZWQgZmVhdHVyZSByZXF1ZXN0ICM1MjYxIChBZGQgc29ydCB0byBpbWFnZSB0eXBlIC0gbm90aWNlIHRoZSBjaGFuZ2Ugb2YgcGFyYW0gZmlsdGVyKTwvcD48L2xpPg0KCQkJCQk8bGk+PHA+YWRkZWQgcGFyYW1zIGV4Y2x1ZGVfcHJlZml4LCBpbmNsdWRlX3ByZWZpeCwgZXhjbHVkZV9zdWZpeCwgaW5jbHVkZV9zdWZpeDwvcD48L2xpPg0KCQkJCQk8bGk+PHA+YWRkZWQgZmVhdHVyZSByZXF1ZXN0ICM1MjUzIChUZXh0IGlucHV0IHRvIGRlZmluZSBhZGQgcGFyYW1zIHRvIHJlZGlyZWN0IGZ1bmN0aW9uKTwvcD48L2xpPg0KCQkJCQk8bGk+PHA+YWRkZWQgZmVhdHVyZSByZXF1ZXN0ICM1MjQwIChEZWZhdWx0IHZhbHVlcyBvZiBBZHZhbmNlZENvbnRlbnQgcGFnZSBvcHRpb25zKTwvcD48L2xpPg0KCQkJCQk8bGk+PHA+YWRkZWQgZmVhdHVyZSByZXF1ZXN0ICM1MjQxIChwdXQgRmV1QWNjZXNzIGluIEJsb2NrdGFiKTwvcD48L2xpPg0KCQkJCTwvdWw+DQoJCQk8L2xpPg0KCQkJPGxpPjxwPk1pc2M6PC9wPg0KCQkJCTx1bD4NCgkJCQkJPGxpPjxwPi0gQWR2YW5jZWRDb250ZW50IG9wdGlvbnMgYXJlIHNob3duIGluIHNlcGFyYXRlIHRhYjwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSBBZGRlZCBuZXcgcGVybWlzc2lvbiB0byBtYW5hZ2UgdGhlIEFkdmFuY2VkQ29udGVudCBvcHRpb25zIHRhYjwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSByZW1vdmVkIHBhcmFtIGZpbHRlciAodXNlIG5ldyBwYXJhbXMgaW5zdGVhZCk8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gcGF0aCB0byBmaWxlcyBhcmUgc3RvcmVkIHJlbGF0aXZlIHRvIHRoZSB1cGxvYWRzIGRpcjwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSBwYXJhbSBkaXIgb2YgYmxvY2sgdHlwZSBmaWxlL2ltYWdlIG5lZWRzIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSB1cGxvYWRzIGRpciBvbmx5ICh0aGVyZSBpcyBubyBpbWFnZSB1cGxvYWRzIGRpciB1c2VkIGFueW1vcmUpPC9wPjwvbGk+DQoJCQkJPC91bD4NCgkJCTwvbGk+DQoJCTwvdWw+DQoJPC9saT4NCgk8bGk+PHA+PHN0cm9uZz4wLjQuMSAoQXVndXN0IDIwMTApOjwvc3Ryb25nPjwvcD4NCgkJPHVsPg0KCQkJPGxpPjxwPkJ1Z2ZpeGVzOjwvcD4NCgkJCQk8dWw+DQoJCQkJCTxsaT48cD4tICM1MTUxOiBmaXhlZCBzdHlsZXNoZWV0IGlzc3VlIHdpdGggZXhwYW5kL2NvbGxhcHNlIGJ1dHRvbnMgb2YgY29udGVudCBibG9ja3MgaW4gSUUvU2FmYXJpLjwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSAjNTE2MjogUEhQIHdhcm5pbmdzIGlmIGJhY2tlbmQgdXNlcnMgd2l0aG91dCBwZXJtaXNzaW9uICZxdW90O01hbmFnZSBBbGwgQWR2YW5jZWRDb250ZW50IEJsb2NrcyZxdW90OyBvcGVuIGFuIGFkdmFuY2VkIGNvbnRlbnQgcGFnZSBhbmQgbXVsdGlwbGUgY29udGVudCBibG9ja3Mgb2Ygc2FtZSBuYW1lIHdlcmUgdXNlZCBpbiB0ZW1wbGF0ZS48L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gZml4ZWQgYnVnIHdoZXJlIGV4dHJhIGZpZWxkcyBjb3VsZCBub3QgYmUgdXBkYXRlZC48L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gZml4ZWQgYnVnIHdoZXJlIGZldSBhY2Nlc3MgZGlkIG5vdCB3b3JrLjwvcD48L2xpPg0KCQkJCTwvdWw+DQoJCQk8L2xpPg0KCQkJPGxpPjxwPkZlYXR1cmVzOjwvcD4NCgkJCQk8dWw+DQoJCQkJCTxsaT48cD4tIGFkZGVkIHBhcmFtICZxdW90O2RlbGV0ZSZxdW90OyB0byBsZXQgdXNlcnMgZGVsZXRlIGZpbGVzIGV2ZW4gaWYgbm8gcGVybWlzc2lvbiAmcXVvdDtNb2RpZnkgRmlsZXMmcXVvdDs8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gYWRkZWQgcGFyYW0gJnF1b3Q7Y3JlYXRlX2RpcnMmcXVvdDsgdG8gbGV0IHVzZXJzIGNyZWF0ZV9kaXJzIGV2ZW4gaWYgbm8gcGVybWlzc2lvbiAmcXVvdDtNb2RpZnkgRmlsZXMmcXVvdDs8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gYWRkZWQgbmV3IGJsb2NrdHlwZSAmcXVvdDtub3RlJnF1b3Q7IHRvIGNyZWF0ZSBzb21lIHNpbmdsZSBub3RlcyBmb3IgeW91ciBlZGl0b3JzPC9wPjwvbGk+DQoJCQkJPC91bD4NCgkJCTwvbGk+DQoJCQk8bGk+PHA+TWlzYzo8L3A+DQoJCQkJPHVsPg0KCQkJCQk8bGk+PHA+LSByZW1vdmVkIGRlcGVuZGVuY3kgb2YgRmlsZU1hbmFnZXI8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gYmxvY2sgb2YgdHlwZSBmaWxlIG9yIGltYWdlIHN0b3JlcyByZWxhdGl2ZSB1cmwgbm93PC9wPjwvbGk+DQoJCQkJCTxsaT48cD4tIGJsb2NrIHR5cGUgaW1hZ2Ugc2hvd3MgdGh1bWJuYWlsIGluIGJhY2tlbmQgcHJldmlldyBpbnN0ZWFkIG9mIGZ1bGwgaW1hZ2U8L3A+PC9saT4NCgkJCQk8L3VsPg0KCQkJPC9saT4NCgkJPC91bD4NCgk8L2xpPg0KCTxsaT48cD48c3Ryb25nPjAuNCAoSnVseSAyMDEwKTo8L3N0cm9uZz48L3A+DQoJCTx1bD4NCgkJCTxsaT48cD5JbXBvcnRhbnQgbm90aWNlOjwvcD4NCgkJCQk8dWw+DQoJCQkJCTxsaT48cD4tIGNoYW5nZWQgcGFyYW0gJnF1b3Q7dHlwZSZxdW90OyB0byAmcXVvdDtibG9ja190eXBlJnF1b3Q7IHNpbmNlIGl0IGludGVyZmVyZXMgd2l0aCB7Y29udGVudF9tb2R1bGV9IHRhZzwvcD48L2xpPg0KCQkJCTwvdWw+DQoJCQk8L2xpPg0KCQkJPGxpPjxwPkJ1Z2ZpeGVzOjwvcD4NCgkJCQk8dWw+DQoJCQkJCTxsaT48cD4tICM1MTAxOiBwYWdlX3RhYiAmcXVvdDtvcHRpb25zJnF1b3Q7IHdhcyBzaG93biB0byB1c2VycyB3aXRoIG5vIHBlcm1pc3Npb24gdG8gZWRpdCBwYWdlIG9wdGlvbnMgaWYgYSBjb250ZW50IGJsb2NrIHdhcyBhc3NpZ25lZCB0byB0aGF0IHRhYi48L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gIzUwOTc6IGxpbmsgdG8gbWlzc2luZyBjc3MgcmVtb3ZlZDwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSBmaXhlZCBtaW1lLXR5cGUgaXNzdWUgKGFkZGVkIHByZWZlcmVuY2UgdG8gdG9nZ2xlIG1pbWUtdHlwZSB1c2FnZSBvbi9vZmYpPC9wPjwvbGk+DQoJCQkJCTxsaT48cD4tIGZpeGVkIHBhdGggaXNzdWUgd2hlcmUgdGh1bWJuYWlscyB3ZXJlIG5vdCBzaG93bjwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSBmaXhlZCBjb21wYXRpYmlsaXR5IHdpdGggQ01TbXMgMS44PC9wPjwvbGk+DQoJCQkJCTxsaT48cD4tIG90aGVyIG1pbm9yIGJ1Z2ZpeGVzPC9wPjwvbGk+DQoJCQkJPC91bD4NCgkJCTwvbGk+DQoJCQk8bGk+PHA+RmVhdHVyZXM6PC9wPg0KCQkJCTx1bD4NCgkJCQkJPGxpPjxwPi0gYWRkZWQgTUxFIHN1cHBvcnQ8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gYWRkZWQgcGFyYW0gJnF1b3Q7c2hvd19jbG9jayZxdW90OyB0byBlbmFibGUvZGlzYWJsZSB0aGUgdGltZSBkcm9wZG93biBvZiBibG9ja3R5cGVzICZxdW90O2RhdGUmcXVvdDsgaW4gYmFja2VuZDwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbSAmcXVvdDtkYXRlX2Zvcm1hdCZxdW90OyB0byBmb3JtYXQgdGltZXN0YW1wIG9mIGJsb2NrdHlwZXMgJnF1b3Q7ZGF0ZSZxdW90OyBpbiBmcm9udGVuZDwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbSAmcXVvdDtkZXNjcmlwdGlvbiZxdW90OzwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSBhZGRlZCBidWxrIGZ1bmN0aW9uIHRvIHNldCBhbGwgcGFnZXMgdG8gQWR2YW5jZWRDb250ZW50PC9wPjwvbGk+DQoJCQkJCTxsaT48cD4tIGFkZGVkIGNvbXBhdGliaWxpdHkgd2l0aCB7Y29udGVudF9tb2R1bGV9IHRhZzwvcD48L2xpPg0KCQkJCTwvdWw+DQoJCQk8L2xpPg0KCQk8L3VsPg0KCTwvbGk+DQoJPGxpPjxwPjxzdHJvbmc+MC4zLjQgKEp1bmUgMjAxMCk6PC9zdHJvbmc+PC9wPg0KCQk8dWw+DQoJCQk8bGk+PHA+QnVnZml4ZXM6PC9wPg0KCQkJCTx1bD4NCgkJCQkJPGxpPjxwPi0gIzUwNDU6IFdoZW4gc3dpdGNoaW5nIGZyb20gQ29udGVudCAtPiBBZHZhbmNlZCBDb250ZW50IGxvdHMgb2YgUEhQIGVycm9yczwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSAjNTA1NjogcGFnZV90YWJzIG5vdCB3b3JraW5nIGZvciB1c2VycyB3aXRob3V0IHBlcm1pc3Npb24gJnF1b3Q7TWFuYWdlIEFsbCBDb250ZW50JnF1b3Q7PC9wPjwvbGk+DQoJCQkJCTxsaT48cD4tICM1MDczOiBpbmNvcnJlY3QgZGlzcGxheSBvZiBmaWxlcyB3aGVuIG9wZW5pbmcgZmlsZXBpY2tlcjwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSBmaXhlZCBtaW5vciBidWcgd2hlcmUgdGhlIG9wdGlvbiAmcXVvdDthbGxvd19ub25lJnF1b3Q7IG9mIGNvbnRlbnQgYmxvY2tzIG9mIHR5cGUgaW1hZ2UvZmlsZSB3YXMgbm90IHNob3duIHdoZW4gdGVtcGxhdGUgaGFzIGJlZW4gZWRpdGVkPC9wPjwvbGk+DQoJCQkJPC91bD4NCgkJCTwvbGk+DQoJCQk8bGk+PHA+RmVhdHVyZXM6PC9wPg0KCQkJCTx1bD4NCgkJCQkJPGxpPjxwPi0gYWRkZWQgZmlsZW1hbmFnZW1lbnQgYW5kIHVwbG9hZCBmdW5jdGlvbnMgdG8gY29udGVudCBibG9ja3Mgb2YgdHlwZSBpbWFnZS9maWxlPC9wPjwvbGk+DQoJCQkJCTxsaT48cD4tIGFkZGVkIGJyZWFkY3VtYnMgdG8gZmlsZXBpY2tlcjwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSBhZG1pbnMgbWF5IGJyb3dzZSB0aGUgZW50aXJlIGRpciB0cmVlIGluIGZpbGVwaWNrZXIgZmlsZSBicm93c2VyIHJlZ2FyZGxlc3Mgb2YgdGVtcGxhdGUgcGFyYW1zPC9wPjwvbGk+DQoJCQkJCTxsaT48cD4tIGFkZGVkIG1pbWUgdHlwZSBjaGVja2luZyB0byBnZXQgZmlsZSB0eXBlPC9wPjwvbGk+DQoJCQkJCTxsaT48cD4tIGFkZGVkIHJhd3VybGVuY29kZSBpbiBzcmMgYXR0cmlicyB0byBkaXNwbGF5IGltYWdlcyB3aXRoIHdlaXJkIGZpbGVuYW1lcy48L3A+PC9saT4NCgkJCQk8L3VsPg0KCQkJPC9saT4NCgkJCTxsaT48cD5taXNjZWxsYW5lb3VzOjwvcD4NCgkJCQk8dWw+DQoJCQkJCTxsaT48cD4tIHJlbW92ZWQgT09QIHN0dWZmIChwcml2YXRlL3B1YmxpYy9wcm90ZWN0ZWQpIHRvIGdhaW4gbW9yZSBjb21wYXRpYmlsaXR5IHdpdGggUEhQNDwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSBjaGFuZ2VkIGFqYXggZnVuY3Rpb25zIHRvIHJldHVybiB4bWwgdmFsdWVzPC9wPjwvbGk+DQoJCQkJCTxsaT48cD4tIHJlbW92ZWQgdXNhZ2Ugb2YgSW1hZ2VNYW5hZ2VyIG9uY2UgYW5kIGZvciBhbGwuIChjYXVzZWQgb25seSB0cm91YmxlKTwvcD48L2xpPg0KCQkJCTwvdWw+DQoJCQk8L2xpPg0KCQk8L3VsPg0KCTwvbGk+DQoJPGxpPjxwPjxzdHJvbmc+MC4zLjMgKEp1bmUgMjAxMCk6PC9zdHJvbmc+PC9wPg0KCTx1bD4NCgkJPGxpPjxwPkJ1Z2ZpeGVzOjwvcD4NCgkJCTx1bD4NCgkJCQk8bGk+PHA+LSBhbGlhcyB3YXMgbm90IGFsd2F5cyBjb252ZXJ0ZWQgcHJvcGVybHk8L3A+PC9saT4NCgkJCQk8bGk+PHA+LSB1bnN1Ym1pdHRlZCBjb250ZW50IGdvdCBsb3N0IGlmIHN3aXRjaGluZyBmcm9tIENvbnRlbnQgdG8gQWR2YW5jZWRDb250ZW50PC9wPjwvbGk+DQoJCQk8L3VsPg0KCQk8L2xpPg0KCQk8bGk+PHA+RmVhdHVyZXM6PC9wPg0KCQkJPHVsPg0KCQkJCTxsaT48cD4tIGFkZGVkIHN0YXJ0L2VuZCBkYXRlPC9wPjwvbGk+DQoJCQkJPGxpPjxwPi0gcmVtb3ZlZCB0aW1lcGlja2VyOyByZXBsYWNlZCBieSBhIHNpbXBsZSBkcm9wZG93bjwvcD48L2xpPg0KCQkJCTxsaT48cD4tIGNvbXBhdGliaWxpdHkgd2l0aCB7Y29udGVudF9pbWFnZX08L3A+PC9saT4NCgkJCTwvdWw+DQoJCTwvbGk+DQoJPC91bD4NCgk8bGk+PHA+PHN0cm9uZz4wLjMuMiAoSnVuZSAyMDEwKTo8L3N0cm9uZz48L3A+DQoJCTx1bD4NCgkJCTxsaT48cD4tIGZpeGVkIGJ1ZyB3aGVyZSBjaGFuZ2luZyBiYWNrIHRvIGRlZmF1bHQgY29udGVudCB0eXBlIG9yIGNoYW5naW5nIHRlbXBsYXRlIGNhdXNlZCBmYXRhbCBlcnJvcnM8L3A+PC9saT4NCgkJCTxsaT48cD4tIGZpeGVkIGEgYnVnIHdpdGggc21hcnR5IHByb2Nlc3Npbmcgd2hlbiBzYXZpbmcgYSBwYWdlPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBmaXhlZCBhIGJ1ZyB3aXRoIHByZXZpZXcgdGFiPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSByZS1hZGRlZCBleHBhbmQvY29sbGFwc2UgYnV0dG9uIHRvIHRvZ2dsZSBjb250ZW50IGJsb2NrcyBpbiBiYWNrZW5kPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbXMgZWRpdG9yX2dyb3Vwcy9lZGl0b3JfdXNlcnMgdG8gc3BlY2lmeSBjZXJ0YWluIHVzZXJzL2dyb3VwcyB0aGF0IGFyZSBhbGxvd2VkIHRvIGVkaXQgY2VydGFpbiBibG9ja3M8L3A+PC9saT4NCgkJCTxsaT48cD4tIHJlbW92ZWQgcGFyYW1zIHNlbGVjdGVkL2NoZWNrZWQ7IHVzZSBwYXJhbSBkZWZhdWx0IGluc3RlYWQ8L3A+PC9saT4NCgkJCTxsaT48cD4tIGJsb2NrIGlkcyB3aWxsIGJlIGNvbnZlcnRlZCBmcm9tIGJsb2NrIG5hbWUgdXNpbmcgY29yZSBmdW5jdGlvbiBtdW5nZV9zdHJpbmdfdG9fdXJsICh0byByZW1vdmUgc3BlY2lhbCBjaGFycywgd2hpdGVzcGFjZXMsIHVtbGF1dHMgZXRjLik8L3A+PC9saT4NCgkJCTxsaT48cD4tIGZpeGVkIGJ1ZyBvZiBibG9ja3R5cGUgZHJvcGRvd24vc2VsZWN0X211bHRpcGxlIHdoZXJlIGZpcnN0IGl0ZW0gaGFkIGFuIGVtcHR5IGxhYmVsIGlmIG9ubHkgdGhlIHBhcmFtICZxdW90O3ZhbHVlcyZxdW90OyBpcyB1c2VkPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBhZGRlZCBzb21lIHRlbXBsYXRlIHZhcnMgb2YgdGhlIGZyb250ZW5kIHRvIGJlIGFsc28gYWNjZXNzaWJsZSBpbiBiYWNrZW5kIChlLmcuOiAkcGFnZV9hbGlhcyk8L3A+PC9saT4NCgkJCTxsaT48cD4tIGFkZGVkIHBhcmFtICZxdW90O2FsbG93X25vbmUmcXVvdDsgdG8gYWxsIGNvbnRlbnQgYmxvY2sgdHlwZXMgdG8gc3BlY2lmeSBpZiB0aGUgcHJlZGVmaW5lZCBkZWZhdWx0IHZhbHVlIHdpbGwgYmUgdXNlZCBpZiBubyB2YWx1ZSBpcyBlbnRlcmVkPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBmaXhlZCBidWcgd2hlcmUgZW1wdHkgdmFsdWVzIHdlcmUgbmV2ZXIgYmUgc3RvcmVkPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBmaXhlZCBidWcgd2hlcmUgZGVmYXVsdCB2YWx1ZSBpbiBmcm9udGVuZCB3YXMgaWdub3JlZCBpZiB0aGUgJnF1b3Q7YWxsb3dfbm9uZSZxdW90OyBwYXJhbSB3YXMgY2hhbmdlZCBhZnRlciBhbiBlbXB0eSB2YWx1ZSBoYXMgYmVlbiBzdG9yZWQ8L3A+PC9saT4NCgkJCTxsaT48cD4tIGFkZGVkIHBhcmFtICZxdW90O3NvcnRhYmxlX2l0ZW1zJnF1b3Q7IHRvIGNyZWF0ZSBhIHNvcnRhYmxlIG11bHRpcGxlIHNlbGVjdCBsaXN0IChzZWxlY3QgbGlzdCB3aWxsIHJlc3VsdCBpbiBhIHRhYmxlIHdpdGggY2hlY2tib3hlczsgb25seSBvcmRlciBvZiBzZWxlY3RlZCBpdGVtcyB3aWxsIGJlIHN0b3JlZCBhbmQgc2hvd2VkIGF0IHRoZSB0b3Agb2YgdGhlIGxpc3Q7IHVuc2VsZWN0ZWQgaXRlbXMgd2lsbCBiZSBhcHBlbmRlZCBpbiB0aGF0IG9yZGVyIHRoZXkgYXJlIHBsYWNlZCBpbiB0aGUgdGVtcGxhdGUpPC9wPjwvbGk+DQoJCTwvdWw+DQoJPC9saT4NCgk8bGk+PHA+PHN0cm9uZz4wLjMuMSAoTWF5IDIwMTApOjwvc3Ryb25nPjwvcD4NCgkJPHVsPg0KCQkJPGxpPjxwPi0gcmVtb3ZlZCB0aGUgcmVvcmRlcmluZyBzdHVmZiBmb3Igbm93IChjYXVzZXMgdHJvdWJsZSBhdCB0aGlzIHRpbWUpPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSByZW1vdmVkIHRoZSBkYiBzdHVmZiAocGFyYW1zIG9mIGNvbnRlbnQgYmxvY2tzIHRoYXQgYXJlIGRlZmluZWQgaW4gdGVtcGxhdGUgd29uJiMwMzk7dCBiZSBzYXZlZCBpbiBtb2R1bGUgZGIgdGFibGUgYW55bW9yZSAtPiBob3BlZnVsbHkgc3BlZWQgdXAgbG9hZGluZyB0aW1lKTwvcD48L2xpPg0KCQkJPGxpPjxwPi0gZml4ZWQgYSBidWcgd2l0aCBkdXBsaWNhdGUgY29udGVudCBibG9ja3M8L3A+PC9saT4NCgkJPC91bD4NCgk8L2xpPg0KCTxsaT4NCgkJPHA+PHN0cm9uZz5BZHZhbmNlZENvbnRlbnQgMC4zIChNYXkgMjAxMCk6PC9zdHJvbmc+PC9wPg0KCQk8dWw+DQoJCQk8bGk+PHA+LSByZXdyaXRlIGNvZGU8L3A+PC9saT4NCgkJCTxsaT48cD4tIGJ1Z2ZpeGVzPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSByZW5hbWVkIHRvIEFkdmFuY2VkQ29udGVudDwvcD48L2xpPg0KCQkJPGxpPjxwPi0gdXNpbmcgc2VwYXJhdGUgbW9kdWxlIHRlbXBsYXRlIG5vdyB0byBkc3BsYXkgY29udGVudCBibG9ja3M8L3A+PC9saT4NCgkJCTxsaT48cD4tIHJlbW92ZWQgcGFnZSBhbGlhcyBpbmhlcml0YW5jZTwvcD48L2xpPg0KCQk8L3VsPg0KCTwvbGk+DQo8L3VsPg0KPHVsPg0KCTxsaT48cD48c3Ryb25nPlhDb250ZW50IEJFVEEgMyAoQXByaWwgMjAxMCAtIGRpc2NvbnRpbnVlZCk6PC9zdHJvbmc+PC9wPg0KCQk8dWw+DQoJCQk8bGk+PHA+LSBNYWpvciBCdWdmaXggKG1pc3NpbmcgJnF1b3Q7OyZxdW90OyBhbmQgc3RyYW5nZSBpbnZpc2libGUgaW52YWxpZCBjaGFycyk8L3A+PC9saT4NCgkJPC91bD4NCgk8L2xpPg0KCTxsaT48cD48c3Ryb25nPlhDb250ZW50IEJFVEEgMiAoQXByaWwgMjAxMCAtIGRpc2NvbnRpbnVlZCk6PC9zdHJvbmc+PC9wPg0KCQk8dWw+DQoJCQk8bGk+PHA+LSBmaXhlZCBhIGJ1ZyB3aXRoIHBhcmFtICZxdW90O2RlbGltaXRlciZxdW90OzwvcD48L2xpPg0KCQkJPGxpPjxwPi0gZml4ZWQgYSBidWcgd2l0aCBzbWFydHkgcHJvY2Vzc2luZzwvcD48L2xpPg0KCQkJPGxpPjxwPi0gYWRkZWQgaW5oZXJpdGFuY2Ugb2YgJnF1b3Q7U2hvdyBsb2dpbiBmb3JtJnF1b3Q7PC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBhZGRlZCBpbmhlcml0YW5jZSBvZiBwYWdlIGFsaWFzIHRvIGFkZCBpdCBhcyBwcmVmZml4OyBzbyBpZiB5b3UgaGF2ZSBhIHBhZ2UgY2FsbGVkICZxdW90O21lbWJlcnMmcXVvdDsgYW5kIHNlbGVjdCBmb3IgZWFjaCBjaGlsZCBwYWdlICZxdW90O2luaGVyaXQgcGFnZSBhbGlhcyZxdW90OyBhbGwgY2hpbGQgcGFnZXMgYWxpYXNlcyB3aWxsIHN0YXJ0IHdpdGggJnF1b3Q7bWVtYmVyc18mcXVvdDs7IG1ha2VzIGZpbHRlcmluZyBvZiBtZW51IGVudHJpZXMgd2l0aCBNZW51TWFuYWdlciBwYXJhbSAmcXVvdDtleGNsdWRlcHJlZmZpeCZxdW90OyBvciAmcXVvdDtpbmNsdWRlcHJlZmZpeCZxdW90OyBlYXNpZXIuPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBtaW5vciBidWdmaXhlczwvcD48L2xpPiANCgkJPC91bD4NCgk8L2xpPg0KCTxsaT4NCgkJPHA+PHN0cm9uZz5YQ29udGVudCBCRVRBIChBcHJpbCAyMDEwKTo8L3N0cm9uZz4gaW5pdGlhbCByZWxlYXNlPC9wPg0KCQk8dWw+DQoJCQk8bGk+PHA+LSBjb252ZXJ0ZWQgdGhlIHNpbmdsZSBmaWxlIGludG8gYSBtb2R1bGU8L3A+PC9saT4NCgkJCTxsaT48cD4tIHJlbmFtZWQgcGFyYW1zOyBzZWUgbW9kdWxlIGhlbHAgZm9yIG1vcmUgZGV0YWlsczwvcD48L2xpPg0KCQk8L3VsPg0KCTwvbGk+DQo8L3VsPg0KPHA+PHN0cm9uZz5TaW5nbGUgZmlsZSByZWxlYXNlcyAoZGlzY29udGludWVkKTwvc3Ryb25nPi4uLjwvcD4NCjx1bD4NCgk8bGk+DQoJCTxwPjxzdHJvbmc+MS40IChNYXJjaCAyMDEwKTo8L3N0cm9uZz48L3A+DQoJCTx1bD4NCgkJCTxsaT48cD4tIGNsZWFudXAgY29kZSAtIChOYU4pPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBtaW5vciBidWdmaXhlcyAtIChOYU4pPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBhZGRlZCByZWRpcmVjdCBwYWdlIGlmIGZldSBpcyBub3QgbG9nZ2VkIGluIC0gKE5hTik8L3A+PC9saT4NCgkJCTxsaT48cD4tIGFkZGVkIGluaGVyaXRhbmNlIG9mIGZldV9hY2Nlc3MgYW5kIHJlZGlyZWN0X3BhZ2UgLSAoTmFOKTwvcD48L2xpPg0KCQkJPGxpPjxwPi0gYWRkZWQgcGFyYW0gZmV1X2FjY2VzcyAtIChOYU4pPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbSBmZXVfYWN0aW9uIC0gKE5hTik8L3A+PC9saT4NCgkJCTxsaT48cD4tIGFkZGVkIHBhcmFtIHJlZGlyZWN0X3BhZ2UgLSAoTmFOKTwvcD48L2xpPg0KCQkJPGxpPjxwPi0gYWRkZWQgcGFyYW0gYmxvY2tfb25seSAtIChOYU4pPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBhZGRlZCBzbWFydHkgbG9naWMgaW4gYmFja2VuZCAtIChKZXJlbXlCYXNzKTwvcD48L2xpPg0KCQkJPGxpPjxwPi0gYWRkZWQgcGFyYW0gc3R5bGUgLSAoSmVyZW15QmFzcyk8L3A+PC9saT4NCgkJCTxsaT48cD4tIGFkZGVkIHBhcmFtIGZpbHRlciAoZmlsdGVyaW5nIGltYWdlcyBpbiBiYWNrZW5kKSAtIChKZXJlbXlCYXNzKTwvcD48L2xpPg0KCQkJPGxpPjxwPi0gYWRkZWQgcGFyYW0gSW1nTW9kZSAoZHJvcGRvd24gb3IgSW1hZ2VNYW5hZ2VyKSAtIChKZXJlbXlCYXNzKTwvcD48L2xpPg0KCQkJPGxpPjxwPi0gYWRkZWQgcGFyYW0gc21hcnR5T24gKGZvciBwcm9jZXNzaW5nIHNtYXJ0eSB2YXJzIG9mIHRoZSB0ZW1wYXRlIGluIGJhY2tlbmQpIC0gKEplcmVteUJhc3MpPC9wPjwvbGk+DQoJCTwvdWw+DQoJPC9saT4NCgk8bGk+PHA+PHN0cm9uZz4xLjMgKEFwcmlsIDIwMDkpOjwvc3Ryb25nPjwvcD4NCgkJPHVsPg0KCQkJPGxpPjxwPi0gQ01TbXMgMS42LiogcmVhZHkgLSAoTmFOKTwvcD48L2xpPg0KCQkJPGxpPjxwPi0gYWRkZWQgZmV1IGFjY2VzcyBvcHRpb24gLSAoTmFOKTwvcD48L2xpPg0KCQk8L3VsPg0KCTwvbGk+DQoJPGxpPg0KCQk8cD48c3Ryb25nPjEuMiAoTWFyY2ggMjAwOSk6PC9zdHJvbmc+IGluaXRpYWwgcmVsZWFzZTwvcD4NCgkJPHVsPg0KCQkJPGxpPjxwPi0gQSBzaW5nbGUgZmlsZSBDb250ZW50Mi5pbmMucGhwIHRoYXQgbmVlZHMgdG8gYmUgcGFjZWQgaW4gbGliL2NsYXNzZXMvY29udGVudHR5cGVzLjwvcD48L2xpPg0KCQkJPGxpPjxwPi0gbGF5b3V0L29wdGlvbnMgb2YgYmFja2VuZCBwYW5lbCBjYW4gYmUgY29udHJvbGVkIGJ5IGFkZGl0aW9uYWwgc21hcnR5IHBhcmFtcyBpbiB0aGUgdGVtcGxhdGU7IGludGVncmF0ZWQgdGhlIHtjb250ZW50X2ltYWdlfSB0YWcgLSAobW9kIGJ5IE5hTik8L3A+PC9saT4NCgkJPC91bD4NCgk8L2xpPg0KPC91bD4NCjxiciAvPic7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjEzMDM5NzMxNzguMTI4Nzc1ODE4Ny4xMjg4MzM1ODY3LjEyODg3MDM3MTAuMyc7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjEyODg3MDM3MTAuMy4zLnV0bWNzcj1nb29nbGV8dXRtY2NuPShvcmdhbmljKXx1dG1jbWQ9b3JnYW5pY3x1dG1jdHI9Y21zbXMnOwokbGFuZ1sncWNhJ10gPSAnUDAtMTc3NjE4NzQ1OS0xMjg3NzU4MTg3Nzc3JzsKJGxhbmdbJ3V0bWInXSA9ICcxNTY4NjEzNTMuMS4xMC4xMjg4NzAzNzEwJzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/it_IT.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ0FkdmFuY2VkQ29udGVudCddID0gJ0NvbnRlbnV0byBBdmFuemF0byc7CiRsYW5nWydpbnN0YWxsZWQnXSA9ICdNb2R1bG8gQWR2YW5jZWRDb250ZW50ICVzIGluc3RhbGxhdG8nOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bG8gQWR2YW5jZWRDb250ZW50ICVzIGRpc2luc3RhbGxhdG8nOwokbGFuZ1sndXBncmFkZWQnXSA9ICdNb2R1bG8gQWR2YW5jZWRDb250ZW50IGFnZ2lvcm5hdG8gYWxsYSB2ZXJzaW9uZSAlcyc7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ01vZHVsbyBBZHZhbmNlZENvbnRlbnQgJXMgaW5zdGFsbGF0by4nOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ01vZHVsbyBBZHZhbmNlZENvbnRlbnQgJXMgZGlzaW5zdGFsbGF0by4nOwokbGFuZ1snY29uZmlybXVuaW5zdGFsbCddID0gJ1ZvbGV0ZSBkYXZ2ZXJvIGRpc2luc3RhbGxhcmUgaWwgbW9kdWxvIEFkdmFuY2VkQ29udGVudD8nOwokbGFuZ1snbm90aWNlX2R1cGxpY2F0ZWNvbnRlbnQnXSA9ICc8ZW0+PHN0cm9uZz5Ob3RhOjwvc3Ryb25nPiBRdWVzdG8gYmxvY2NvIHZpZW5lIHV0aWxpenphdG8gcGkmdWdyYXZlOyB2b2x0ZSBuZWkgdGVtcGxhdGUuIFF1aSB2ZWRldGUgc29sbyBpbCBwcmltbyBibG9jY28uPC9lbT4nOwokbGFuZ1snZXJyb3JfYmFzaWNhdHRyaWInXSA9ICc8ZW0+PHN0cm9uZz5Ob3RhOjwvc3Ryb25nPiBDYW5ub3QgdXNlIGJhc2ljIGNvbnRlbnQgcHJvcGVydHkgbmFtZSAmIzAzOTslcyYjMDM5OyBhcyB2YWx1ZSBvZiBwYXJhbSAmIzAzOTtibG9jayYjMDM5Oy4gPGJyIC8+VGhpcyBibG9jayBpcyBkaXNhYmxlZC4gQ2hlY2sgeW91ciBwYWdlIHRlbXBsYXRlIGFuZCBjaG9zZSBhIGRpZmZlcmVudCB2YWx1ZSBvZiBwYXJhbSAmIzAzOTtibG9jayYjMDM5Oy48L2VtPic7CiRsYW5nWydlcnJvcl9leHBpcmVkYXRlJ10gPSAnRW5kIGRhdGUgbXVzdCBiZSBsYXRlciB0aGFuIHN0YXJ0IGRhdGUuJzsKJGxhbmdbJ3lvdWFyZWludGV4dCddID0gJ0N1cnJlbnQgZGlyZWN0b3J5JzsKJGxhbmdbJ2RpbWVuc2lvbnMnXSA9ICdJbWFnZXNpemUnOwokbGFuZ1snc2l6ZSddID0gJ0ZpbGVzaXplJzsKJGxhbmdbJ2luaGVyaXRfZnJvbV9wYXJlbnQnXSA9ICdJbmhlcml0IGZyb20gcGFyZW50JzsKJGxhbmdbJ25vbmUnXSA9ICdub25lJzsKJGxhbmdbJ2ludmFsaWQnXSA9ICdpbnZhbGlkJzsKJGxhbmdbJ2ludmFsaWRfYmxvY2t0eXBlJ10gPSAnPGVtPjxzdHJvbmc+Tm90aWNlOjwvc3Ryb25nPiBJbnZhbGlkIHZhbHVlICYjMDM5OyVzJiMwMzk7IG9mIHBhcmFtIGJsb2NrX3R5cGUgaW4gYmxvY2sgJiMwMzk7JXMmIzAzOTsuPGJyIC8+Q2hlY2sgeW91ciBwYWdlIHRlbXBsYXRlLjwvZW0+JzsKJGxhbmdbJ2Vycm9yX2luc3VmZmljaWVudF9ibG9ja3BhcmFtcyddID0gJzxlbT48c3Ryb25nPkVycm9yOjwvc3Ryb25nPiBJbnN1ZmZpY2llbnQgcGFyYW1zLiA8YnIgLz5NaXNzaW5nIHBhcmFtICYjMDM5OyVzJiMwMzk7IGZvciBibG9jayAmIzAzOTslcyYjMDM5Oy4gQ2hlY2sgeW91ciBwYWdlIHRlbXBsYXRlLjwvZW0+JzsKJGxhbmdbJ3llcyddID0gJ1llcyc7CiRsYW5nWydubyddID0gJ05vJzsKJGxhbmdbJ2Zyb250ZW5kYWNjZXNzJ10gPSAnRnJvbnRlbmQgYWNjZXNzJzsKJGxhbmdbJ3JlZGlyZWN0cGFnZSddID0gJ1JlZGlyZWN0IFBhZ2UgaWYgbm8gYWNjZXNzJzsKJGxhbmdbJ3Nob3dsb2dpbmZvcm0nXSA9ICdTaG93IGxvZ2luIGZvcm0nOwokbGFuZ1sncmVnaXN0ZXJlZHVzZXJzJ10gPSAnUmVnaXN0ZXJlZCB1c2VycyBvbmx5JzsKJGxhbmdbJ2Jsb2NrJ10gPSAnQmxvY2snOwokbGFuZ1sndXNlZXhwaXJlZGF0ZSddID0gJ1VzZSBleHBpcmUgZGF0ZSc7CiRsYW5nWydzdGFydGRhdGUnXSA9ICdTdGFydCBEYXRlJzsKJGxhbmdbJ2VuZGRhdGUnXSA9ICdFbmQgRGF0ZSc7CiRsYW5nWydibG9ja2NvbnRlbnQnXSA9ICdCbG9jayBDb250ZW50JzsKJGxhbmdbJ3NldHBhZ2VpbmFjdGl2ZSddID0gJ1NldCBQYWdlIHRvIEluYWN0aXZlJzsKJGxhbmdbJ2RlbGV0ZXBhZ2UnXSA9ICdEZWxldGUgUGFnZSc7CiRsYW5nWyd1bmluc3RhbGxhY3Rpb24nXSA9ICdVbmluc3RhbGwgYWN0aW9uJzsKJGxhbmdbJ3NldGNvbnRlbnQxJ10gPSAnU2V0IGFsbCBQYWdlcyBvZiBBZHZhbmNlZENvbnRlbnQgYmFjayB0byB0eXBlIENvbnRlbnQnOwokbGFuZ1snc2V0Y29udGVudDInXSA9ICdTZXQgYWxsIFBhZ2VzIG9mIEFkdmFuY2VkQ29udGVudCBiYWNrIHRvIHR5cGUgQ29udGVudCBhbmQgcmVtb3ZlIGFkZGl0aW9uYWwgY29udGVudCBibG9ja3MnOwokbGFuZ1sncHJlZnN1cGRhdGVkJ10gPSAnUHJlZmVyZW5jZXMgdXBkYXRlZCc7CiRsYW5nWydzdWNjZXNzJ10gPSAnT2snOwokbGFuZ1snZXJyb3InXSA9ICdFcnJvcic7CiRsYW5nWydkZWxldGVwYWdlcyddID0gJ0RlbGV0ZSBhbGwgcGFnZXMgb2YgdHlwZSBBZHZhbmNlZENvbnRlbnQnOwokbGFuZ1snaW1wb3J0cGFnZXMnXSA9ICdTZXQgYWxsIFBhZ2VzIG9mIHR5cGUgJXMgdG8gdHlwZSAlcy4nOwokbGFuZ1sncGFnZXNpbXBvcnRlZCddID0gJ0FsbCBjb250ZW50IHBhZ2VzIHNldCB0byBBZHZhbmNlZENvbnRlbnQuJzsKJGxhbmdbJ2NvbmZpcm1pbXBvcnQnXSA9ICdEbyB5b3UgcmVhbGx5IHdhbnQgdG8gY2hhbmdlIHRoZSBjb250ZW50IHR5cGUgb2YgYWxsIGNvbnRlbnQgcGFnZXM/JzsKJGxhbmdbJ3RvZ2dsZV9tZXNzYWdlJ10gPSAnSGlkZSB0aGlzIG1lc3NhZ2UnOwokbGFuZ1snY29udGVudHNldHRpbmdzJ10gPSAnRGVmYXVsdCBBZHZhbmNlZENvbnRlbnQgc2V0dGluZ3MnOwokbGFuZ1sncmVkaXJlY3RwYXJhbXMnXSA9ICdVUkwgcGFyYW1zIHRvIGFwcGVuZCB3aGVuIHJlZGlyZWN0aW5nJzsKJGxhbmdbJ2V2YWx1YXRlc21hcnR5J10gPSAnVXNlIHNtYXJ0eSB0byBwcm9jZXNzIHRoZSBwYXJhbXMnOwokbGFuZ1snZXJyb3JfbG9hZGluZ19tb2R1bGUnXSA9ICc8ZW0+PHN0cm9uZz5FcnJvcjo8L3N0cm9uZz4gQ291bGQgbm90IGxvYWQgbW9kdWxlICYjMDM5OyVzJiMwMzk7LiAoRGVmaW5lZCBmb3IgYmxvY2sgJiMwMzk7JXMmIzAzOTsgaW4geW91ciBwYWdlIHRlbXBsYXRlLik8L2VtPic7CiRsYW5nWydlcnJvcl9jb250ZW50YmxvY2tfc3VwcG9ydCddID0gJzxlbT48c3Ryb25nPkVycm9yOjwvc3Ryb25nPiBNb2R1bGUgJiMwMzk7JXMmIzAzOTsgZG9lcyBub3Qgc3VwcG9ydCBjb250ZW50YmxvY2tzLiAoRGVmaW5lZCBmb3IgYmxvY2sgJiMwMzk7JXMmIzAzOTsgaW4geW91ciBwYWdlIHRlbXBsYXRlLik8L2VtPic7CiRsYW5nWydzdWNjZXNzX2ltcG9ydHBhZ2VzJ10gPSAnQWxsIHBhZ2VzIG9mIHR5cGUgJXMgc3VjY2VzZnVsbHkgY2hhbmdlZCB0byAlcyc7CiRsYW5nWydzaG93X2FkdmFuY2VkY29udGVudF9vcHRpb25zJ10gPSAnU2hvdyBBZHZhbmNlZENvbnRlbnQgb3B0aW9ucyB0YWInOwokbGFuZ1snZGlzcGxheV9zZXR0aW5ncyddID0gJyVzIGRpc3BsYXkgc2V0dGluZ3MnOwokbGFuZ1snc2F2ZV9jb2xsYXBzZV9zdGF0dXMnXSA9ICdTYXZlIGNvbGxwYXNlIHN0YXR1cyBvZiAlcyc7CiRsYW5nWydjb250ZW50X2Jsb2NrcyddID0gJ2NvbnRlbnQgYmxvY2tzJzsKJGxhbmdbJ2Jsb2NrX21lc3NhZ2UnXSA9ICdjb250ZW50IGJsb2NrIG1lc3NhZ2UnOwokbGFuZ1snYmxvY2tfZ3JvdXBzJ10gPSAnYmxvY2sgZ3JvdXBzJzsKJGxhbmdbJ2NvbGxhcHNlX2RlZmF1bHQnXSA9ICdDb2xsYXBzZSAlcyBieSBkZWZhdWx0JzsKJGxhbmdbJ3Blcl9wYWdlJ10gPSAncGVyIHBhZ2UnOwokbGFuZ1sncGVyX3RlbXBsYXRlJ10gPSAncGVyIHRlbXBsYXRlJzsKJGxhbmdbJ2JvdGgxJ10gPSAndGVtcGxhdGUgT1IgcGFnZSAnOwokbGFuZ1snYm90aDInXSA9ICd0ZW1wbGF0ZSBBTkQgcGFnZSc7CiRsYW5nWydjb250ZW50J10gPSAnQ29udGVudCc7CiRsYW5nWydjb250ZW50MiddID0gJ0FkdmFuY2VkIENvbnRlbnQnOwokbGFuZ1sncHJlZnMnXSA9ICdQcmVmZXJlbmNlcyc7CiRsYW5nWydtdWx0aV9pbnB1dCddID0gJ011bHRpIElucHV0cyc7CiRsYW5nWydtdWx0aV9pbnB1dF90cGwnXSA9ICdNdWx0aSBJbnB1dCBUZW1wbGF0ZXMnOwokbGFuZ1snYWRkX211bHRpX2lucHV0J10gPSAnQWRkIG5ldyBtdWx0aSBpbnB1dCc7CiRsYW5nWydhZGRfbXVsdGlfaW5wdXRfdHBsJ10gPSAnQWRkIG5ldyBtdWx0aSBpbnB1dCB0ZW1wbGF0ZSc7CiRsYW5nWydpbnB1dF9pZCddID0gJ0lucHV0IElEJzsKJGxhbmdbJ2lucHV0X2ZpZWxkcyddID0gJ0lucHV0IGZpZWxkcyc7CiRsYW5nWyd0cGxfbmFtZSddID0gJ1RlbXBsYXRlIG5hbWUnOwokbGFuZ1snZXJyb3JfdGVtcGxhdGUnXSA9ICdUZW1wbGF0ZSBpcyBhIHJlcXVpcmVkIGZpZWxkIGFuZCBtYXkgbm90IGJlIGVtcHR5JzsKJGxhbmdbJ2Vycm9yX2lucHV0X2ZpZWxkcyddID0gJ0lucHV0IGZpZWxkcyBpcyBhIHJlcXVpcmVkIGZpZWxkIGFuZCBtYXkgbm90IGJlIGVtcHR5Lic7CiRsYW5nWydlcnJvcl9pbnB1dF9pZCddID0gJ05vIGlucHV0IGlkIGdpdmVuIG9yIGlucHV0IGlkIGFscmVhZHkgZXhpc3RzLic7CiRsYW5nWydlcnJvcl9pbnB1dF9pZF9leGlzdHMnXSA9ICdJbnB1dCBJRCBpcyBhbHJlYWR5IGluIHVzZS4gQ2hvb3NlIGEgZGlmZmVyZW50IG9uZS4gKG11c3QgYmUgdW5pcXVlKSc7CiRsYW5nWydtdWx0aV9pbnB1dF9hZGRlZCddID0gJ011bHRpIElucHV0IGFkZGVkLic7CiRsYW5nWydtdWx0aV9pbnB1dF9kZWxldGVkJ10gPSAnTXVsdGkgSW5wdXQgZGVsZXRlZC4nOwokbGFuZ1snbXVsdGlfaW5wdXRfdXBkYXRlZCddID0gJ011bHRpIElucHV0IHVwZGF0ZWQuJzsKJGxhbmdbJ211bHRpX2lucHV0X3RwbF9hZGRlZCddID0gJ011bHRpIElucHV0IHRlbXBsYXRlIGFkZGVkLic7CiRsYW5nWydtdWx0aV9pbnB1dF90cGxfdXBkYXRlZCddID0gJ011bHRpIElucHV0IHRlbXBsYXRlIHVwZGF0ZWQuJzsKJGxhbmdbJ211bHRpX2lucHV0X3RwbF9kZWxldGVkJ10gPSAnTXVsdGkgSW5wdXQgdGVtcGxhdGUgZGVsZXRlZC4nOwokbGFuZ1snZGVsZXRlX3NlbGVjdGVkJ10gPSAnRGVsZXRlIHNlbGVjdGVkIGl0ZW1zJzsKJGxhbmdbJ2NvbmZpcm1fZGVsZXRlJ10gPSAnRG8geW91IHJlYWxseSB3YW50IGRvIGRlbGV0ZSB0aGlzIGl0ZW0/JzsKJGxhbmdbJ2NvbmZpcm1fZGVsZXRlX3NlbGVjdGVkJ10gPSAnRG8geW91IHJlYWxseSB3YW50IGRvIGRlbGV0ZSB0aGUgc2VsZWN0ZWQgaXRlbXM/JzsKJGxhbmdbJ3VzZV9jb250ZW50dHlwZSddID0gJ1VzZSBjb250ZW50dHlwZSc7CiRsYW5nWydoZWxwX3RwbF92YXJzJ10gPSAnPHA+PHN0cm9uZz5UZW1wbGF0ZSB2YXJzOjwvc3Ryb25nPjwvcD4NCjxwPjxwcmU+PGNvZGU+eyRpbnB1dHN9PC9jb2RlPjwvcHJlPiBpcyBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGFsbCBkZWZpbmVkIGlucHV0IGVsZW1lbnRzIG9mIHRoYXQgbXVsdGkgaW5wdXQgYmxvY2suPGJyIC8+DQpFYWNoIGlucHV0IGVsZW1lbnQgaXMgYW4gYXJyYXkgdGhhdCBjb250YWlucyBhbGwgaXRzIHBhcmFtcy4gPGJyIC8+DQpTZWUgbW9kdWxlIGhlbHAgZm9yIG1vcmUgaW5mby48YnIgLz4NCkFkZGl0aW9uYWwgcGFyYW0gaXMgJnF1b3Q7aW5wdXQmcXVvdDsgdGhhdCB3aWxsIHByaW50IG91dCB0aGUgaW5wdXQgZWxlbWVudC48YnIgLz4NClRvIGFjY2VzcyB0aGUgcGFyYW1zIHVzZSB0aGUgZG90IHN5bnRheC48YnIgLz4NCkV4YW1wbGU6PC9wPg0KPHByZT48Y29kZT57Zm9yZWFjaCBmcm9tPSRpbnB1dHMgaXRlbT1lbG19DQoJeyRlbG0ubGFiZWx9OiZuYnNwO3skZWxtLmlucHV0fTxiciAvPg0Key9mb3JlYWNofTwvY29kZT48L3ByZT4nOwokbGFuZ1snaGVscCddID0gJzxiciAvPg0KPGgzPldoYXQgZG9lcyB0aGlzIGRvPzwvaDM+DQo8cD5UaGlzIGlzIGEgbW9kaWZpY2F0aW9uIG9mIHRoZSBkZWZhdWx0IGNvbnRlbnQgdHlwZSAmcXVvdDtDb250ZW50JnF1b3Q7IG9mIENNU21zLjxiciAvPg0KSXQgcHJvdmlkZXMgbW9yZSBmbGV4aWJpbGl0eSBieSBjcmVhdGluZyBjdXN0b20gaW5wdXQgY29udHJvbHMgaW4gYmFja2VuZC48YnIgLz4NClVzZXJzIGNhbiBhZGQgZHJvcGRvd25zLCBtdWx0aXBsZSBzZWxlY3QgbGlzdHMsIGNoZWNrYm94ZXMsIGdyb3VwIGNvbnRlbnQgYmxvY2tzIA0KaW4gc2VwYXJhdGUgcGFnZSB0YWJzLCBibG9jayB0YWJzIGluc2lkZSBhIHBhZ2UgdGFiIG9yIGluIGZpZWxkc2V0cyBieSBqdXN0IA0KdXNpbmcgYWRkaXRpb25hbCBwYXJhbXMgaW4gdGhlIHRlbXBsYXRlIHdoZW4gY2FsbGluZyB0aGUgY29udGVudC48YnIgLz4NCkl0IGFsc28gYWRkcyBhYmlsaXR5IHRvIGdyYW50IGFjY2VzcyBvZiBwYWdlcyB0byBjZXJ0YWluIHVzZXJzIG9mIHRoZSANCkZyb250RW5kVXNlcnMgbW9kdWxlIGFuZCBoaWRlIHRoZSBjb250ZW50LCByZXBsYWNlIGl0IGJ5IHRoZSBsb2dpbiBmb3JtIG9mIHRoZSANCkZyb250RW5kVXNlcnMgbW9kdWxlIG9yIHJlZGlyZWN0IHRvIGEgc3BlY2lmaWVkIHBhZ2Ugc2hvd2luZyB0aGUgbG9naW4gZm9ybSBvciANCmp1c3QgcmVkaXJlY3Qgd2l0aG91dCBkb2luZyBhbnl0aGluZyBlbHNlLjxiciAvPg0KUGFnZSBwcm9wZXJ0eSBvZiBGcm9udEVuZFVzZXJzIGFjY2VzcyBhbmQgcmVkaXJlY3QgcGFnZSBjYW4gYmUgaW5oZXJpdGVkIGJ5IA0KcGFyZW50IHBhZ2VzLjwvcD4NCjxwPjxlbT48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz4gVG8gZ2V0IHRoZSBmdWxsIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBjb250ZW50IHR5cGUgDQppbiBmcm9udGVuZCB5b3UgbmVlZCB0byBjYWxsIHlvdXIgY29udGVudCB3aXRoIHRoZSBtb2R1bGUgcGx1Z2luIHtBZHZhbmNlZENvbnRlbnR9IA0KKGNhc2Ugc2Vuc2l0aXZlISkuPGJyIC8+DQpPdGhlcndpc2UgaXQgbWF5IGJlaGF2ZSBsaWtlIHRoZSBkZWZhdWx0IGNvbnRlbnQgdHlwZSBwbHVnaW4uPC9lbT48L3A+DQo8cD5Zb3UgY2FuIGV2ZW4gdXNlIHNtYXJ0eSBsb2dpYyBpbiBwYXJhbWV0ZXIgdmFsdWVzLiBUaGF0IG1lYW5zIHlvdSBjYW4gdXNlIHRoZSANCnJlc3VsdCBvZiBhIHBsdWdpbiwgYW4gdWR0IG9yIGV2ZW4gYSBtb2R1bGUgb3IganVzdCB0aGUgY29udGVudCBvZiBhIGdsb2JhbCANCmNvbnRlbnQgYmxvY2sgYXMgcGFyYW1ldGVyIHZhbHVlIHRvIGNyZWF0ZSBkeW5hbWljIHZhbHVlcy48L3A+DQo8aDM+SG93IGlzIGl0IHVzZWQ/PC9oMz4NCjxwPkFmdGVyIGluc3RhbGxhdGlvbiB0aGUgbW9kdWxlIHNldHRpbmdzIGNhbiBiZSBmb3VuZCBpbiAmcXVvdDtFeHRlbnNpb25zLT5BZHZhbmNlZENvbnRlbnQmcXVvdDsuPC9wPg0KPHA+QWRkaXRpb25hbGx5IHlvdSB3aWxsIGhhdmUgYSBuZXcgY29udGVudCB0eXBlICZxdW90O0FkdmFuY2VkQ29udGVudCZxdW90OyBhdmFpbGFibGUgDQp3aGVuIGFkZGluZy9lZGl0aW5nIGEgcGFnZS48YnIgLz4NCjxwPkFkZCB0aGUgZm9sbG93aW5nIHBhcmFtcyB0byB5b3VyIGNvbnRlbnQgdGFnIGluIHlvdXIgcGFnZSB0ZW1wbGF0ZSwgDQpjaGFuZ2UgdGhlIGNvbnRlbnQgdHlwZSBvZiB5b3VyIHBhZ2UgdG8gJnF1b3Q7QWR2YW5jZWRDb250ZW50JnF1b3Q7IGFuZCBzZWUgd2hhdCBoYXBwZW5zIA0KaW4gYmFja2VuZC4uLjwvcD4NCjxoMz5XaGF0IHBhcmFtZXRlcnMgYXJlIGF2YWlsYWJsZT88L2gzPg0KPHA+YWxsIHBhcmFtcyBhcmUgb3B0aW9uYWw8L3A+DQo8cD48c3Ryb25nPkRlZmF1bHQgcGFyYW1zOjwvc3Ryb25nPjwvcD4NCjx1bD4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmJsb2NrPC90dD4gKHN0cmluZykNCgkJPHVsPg0KCQkJPGxpPg0KCQkJCUFsbG93cyB5b3UgdG8gaGF2ZSBtb3JlIHRoYW4gb25lIGNvbnRlbnQgYmxvY2sgcGVyIHBhZ2UuIElmIG11bHRpcGxlIGNvbnRlbnQgdGFncyBhcmUgcHV0IG9uIGEgdGVtcGxhdGUsIHRoYXQgbnVtYmVyIG9mIGVkaXQgYm94ZXMgd2lsbCBiZSBkaXNwbGF5ZWQgaWYgdGhlIHBhZ2UgaXMgZWRpdGVkLjxiciAvPg0KCQkJCWUuZy46IDxjb2RlPntjb250ZW50IGJsb2NrPSZxdW90O1NlY29uZCBDb250ZW50IGJsb2NrJnF1b3Q7fTwvY29kZT48YnIgLz4NCgkJCQlOb3csIGlmIHlvdSBlZGl0IGEgcGFnZSB0aGVyZSB3aWxsIGJhIGEgdGV4dGFyZWEgY2FsbGVkICZxdW90O1NlY29uZCBDb250ZW50IGJsb2NrJnF1b3Q7LjxiciAvPg0KCQkJCTxlbT48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz4gVGhlIG5hbWUgb2YgdGhlIGNvbnRlbnQgYmxvY2sgbWF5IGNvbnRhaW4gb25seSBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgdW5kZXJzY29yZXMgKG5vIHdoaXRlc3BhY2VzLCBzcGVjaWFsIGNoYXJzLCB1bWxhdXRzIGV0Yy4pLiBPdGhlcndpc2UgaXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBwcm9wZXIgbmFtZSAoc2ltaWxhciB0byB0aGUgcGFnZSBhbGlhcykuPC9lbT4NCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD53eXNpd3lnPC90dD4gKHRydWUvZmFsc2UpDQoJCTx1bD4NCgkJCTxsaT5JZiBzZXQgdG8gZmFsc2UsIHRoZW4gYSB3eXNpd3lnIHdpbGwgbmV2ZXIgYmUgdXNlZCB3aGlsZSBlZGl0aW5nIHRoaXMgYmxvY2suIElmIHRydWUsIHRoZW4gaXQgYWN0cyBhcyBub3JtYWwuPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0Pm9uZWxpbmU8L3R0PiAodHJ1ZS9mYWxzZSkNCgkJPHVsPg0KCQkJPGxpPklmIHNldCB0byB0cnVlLCB0aGVuIG9ubHkgb25lIGVkaXQgbGluZSB3aWxsIGJlIHNob3duIHdoaWxlIGVkaXRpbmcgdGhpcyBibG9jay4gSWYgZmFsc2UsIHRoZW4gaXQgYWN0cyBhcyBub3JtYWwuIE9ubHkgd29ya3Mgd2hlbiBibG9jayBwYXJhbWV0ZXIgaXMgdXNlZC48L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+ZGVmYXVsdDwvdHQ+IChzdHJpbmcpDQoJCTx1bD4NCgkJCTxsaT5EZWZhdWx0IGNvbnRlbnQgd2hlbiBjcmVhdGluZyBhIG5ldyBwYWdlLjwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5sYWJlbDwvdHQ+IChzdHJpbmcpDQoJCTx1bD4NCgkJCTxsaT5Qcm9tcHQgZm9yIHRoaXMgY29udGVudCBibG9jay4gUG9zc2libGUgdmFsdWVzIGFyZSBhbnkgZXhwcmVzc2lvbi4gSWYgYmxhbmssIHRoZSB1bmNvbnZlcnRlZCBibG9jayBuYW1lIGlzIHVzZWQuPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmFzc2lnbjwvdHQ+IChzdHJpbmcpDQoJCTx1bD4NCgkJCTxsaT4NCgkJCQlBc3NpZ25zIHRoZSBjb250ZW50IHRvIGEgc21hcnR5IHBhcmFtZXRlciwgd2hpY2ggeW91IGNhbiB0aGVuIHVzZSBpbiBvdGhlciBhcmVhcyBvZiB0aGUgcGFnZSwgb3IgdXNlIHRvIHRlc3Qgd2hldGhlciBjb250ZW50IGV4aXN0cyBpbiBpdCBvciBub3QuPGJyIC8+DQoJCQkJRXhhbXBsZSBvZiBwYXNzaW5nIHBhZ2UgY29udGVudCB0byBhIFVzZXIgRGVmaW5lZCBUYWcgYXMgYSBwYXJhbWV0ZXI6PGJyIC8+DQoJCQkJPGNvZGU+e2NvbnRlbnQgYXNzaWduPXBhZ2Vjb250ZW50fTxiciAvPg0KCQkJCXt0YWJsZV9vZl9jb250ZW50cyB0aGVwYWdlY29udGVudD0mcXVvdDskcGFnZWNvbnRlbnQmcXVvdDt9PC9jb2RlPjxiciAvPg0KCQkJCTxlbT48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz4gRm9yIHNvbWUgcmVhc29uIHRoaXMgcGFyYW0gZG9lcyBub3Qgd29yayBhdCB0aGUgbW9tZW50IHdpdGggdGhlIG1vZHVsZSBwbHVnaW4ge0F2YW5jZWRDb250ZW50fS4gVXNlIDxiciAvPjxjb2RlPntjYXB0dXJlIGFzc2lnbj0mcXVvdDtmb28mcXVvdDt9e0FkdmFuY2VkQ29udGVudH17L2NhcHR1cmV9PC9jb2RlPiA8YnIgLz5pbnN0ZWFkLjwvZW0+DQoJCQk8L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KPC91bD4NCjxwPjxzdHJvbmc+QWR2YW5jZWQgcGFyYW1zOjwvc3Ryb25nPjwvcD4NCjx1bD4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmJsb2NrX3R5cGU8L3R0PiAodGV4dCxjaGVja2JveCxkcm9wZG93bixzZWxlY3RfbXVsdGlwbGUsZGF0ZSxtdWx0aV9pbnB1dCkgDQoJCTx1bD4NCgkJCTxsaT5BbGxvd3MgeW91IHRvIHNwZWNpZnkgd2hhdCBjb250ZW50IGNvbnRyb2wgdHlwZSBpcyB1c2VkIGluIHRoZSBiYWNrIGVuZC48L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+cGFnZV90YWI8L3R0PiAoc3RyaW5nKQ0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJVGhpcyBwYXJhbWV0ZXIgc2V0cyB0aGUgdGFiIGluIHdoaWNoIHRoZSBjb250ZW50IGJsb2NrIGlzIGRpc3BsYXllZCBpbiB0aGUgYmFja2VuZC48YnIgLz4NCgkJCQlQb3NzaWJsZSB2YWx1ZXMgYXJlICZxdW90O21haW4mcXVvdDsgKCA9IFRhYiAmcXVvdDtNYWluIE1lbnUmcXVvdDspLCAmcXVvdDtvcHRpb25zJnF1b3Q7ICggPSBUYWIgJnF1b3Q7T3B0aW9ucyZxdW90OyksIG9yIGFueSBvdGhlciBhcmJpdHJhcnkgdmFsdWU8YnIgLz4NCgkJCQk8ZW0+ZS5nLiB5b3UgY2FuIGFkZCBhIGNoZWNrYm94IHRvIHRoZSBvcHRpb25zIHRhYiBvciBjcmVhdGUgbmV3IHRhYnM8L2VtPi4NCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5ibG9ja190YWI8L3R0PiAoc3RyaW5nKQ0KCQk8dWw+DQoJCQk8bGk+V2l0aCB0aGlzIHBhcmFtZXRlciwgdGhlIGJsb2NrcyB3aXRoaW4gYSBwYWdlIHRhYiBjYW4gYmUgZnVydGhlciBkaXZpZGVkIGludG8gdGFicyBvciBjYW4gYmUgZ3JvdXBlZCB0b2dldGhlci4gQW55IGV4cHJlc3Npb24gY2FuIGJlIHVzZWQgYXMgYSBwb3NzaWJsZSB2YWx1ZS48L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+YmxvY2tfZ3JvdXA8L3R0PiAoc3RyaW5nKQ0KCQk8dWw+DQoJCQk8bGk+V2l0aCB0aGlzIHBhcmFtZXRlciwgbXVsdGlwbGUgYmxvY2tzIGNhbiBiZSBncm91cGVkIGluIGEgZmllbGRzZXQuIEFueSBleHByZXNzaW9uIGNhbiBiZSB1c2VkIGFzIGEgcG9zc2libGUgdmFsdWUuPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmFjdGl2ZTwvdHQ+ICh0cnVlL2ZhbHNlKQ0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJQWxsb3dzIHlvdSB0byBkaXNhYmxlIGEgY29udGVudCBibG9jay4gRGlzYWJsZWQgY29udGVudCBibG9ja3Mgd29uJiMwMzk7dCBiZSBzaG93biBpbiBiYWNrZW5kIGFzIHdlbGwgYXMgaW4gZnJvbnRlbmQuIChvbmx5IHdvcmtzIHdpdGgge0FkdmFuY2VkQ29udGVudH0gcGx1Z2luKTxiciAvPg0KCQkJPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmVkaXRvcl9ncm91cHM8L3R0PiAoc3RyaW5nKQ0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJQSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBncm91cCBuYW1lcyB0aGF0IGFyZSBhbGxvd2VkIHRvIGVkaXQgdGhpcyBibG9jay4NCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5lZGl0b3JfdXNlcnM8L3R0PiAoc3RyaW5nKQ0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJQSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiB1c2VyIG5hbWVzIHRoYXQgYXJlIGFsbG93ZWQgdG8gZWRpdCB0aGlzIGJsb2NrLg0KCQkJPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8ZW0+PHN0cm9uZz5Ob3RpY2U6PC9zdHJvbmc+IGlmIHRoZSBwYXJhbXMgPHR0PmVkaXRvcl91c2VyczwvdHQ+IGFuZCA8dHQ+ZWRpdG9yX2dyb3VwczwvdHQ+IGFyZSBlbXB0eSB0aGUgYmxvY2sgbWF5IGJlIGVkaXRlZCBieSBhbnkgdXNlciB3aXRoIHN1ZmZpY2llbnQgcGVybWlzc2lvbiB0byBlZGl0IGEgcGFnZTwvZW0+PGJyIC8+PGJyIC8+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5mZXVfYWNjZXNzPC90dD4NCgkJPHVsPg0KCQkJPGxpPg0KCQkJCUEgbGlzdCBvZiBmZXUgZ3JvdXAgaWRzIHNlcGFyYXRlZCBieSBhIGNvbW1hLjxiciAvPg0KCQkJCVRoaXMgc2hvd3MgdGhlIGNvbnRlbnQgYmxvY2sgb25seSB0byBjZXJ0YWluIGZldSBncm91cHMuPGJyIC8+DQoJCQk8L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+ZmV1X2FjdGlvbjwvdHQ+ICh0cnVlL2ZhbHNlKQ0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJU3BlY2lmeSBpZiB0aGUgbG9naW4gZm9ybSBvZiB0aGUgZmV1IG1vZHVsZSB3aWxsIGJlIHNob3duIG9yIG5vdC48YnIgLz4NCgkJCQk8ZW0+PHN0cm9uZz5Ob3RpY2U6PC9zdHJvbmc+IFRoZSBsb2dpbiBmb3JtIHdpbGwgb25seSBiZSBzaG93biBvbmUgdGltZS48YnIgLz4NCgkJCQlJZiB0aGVyZSBhcmUgbXVsdGlwbGUgYmxvY2tzIHdpdGggbGltaXRlZCBmZXVfYWNjZXNzIGFuZCBmZXVfYWN0aW9uIHNldCB0byB0cnVlIG9ubHkgdGhlIGZpcnN0IGJsb2NrcyBsb2dpbiBmb3JtIHdpbGwgYmUgc2hvd24gYW5kIGFsbCBvdGhlciBibG9ja3Mgd2lsbCBqdXN0IGJlIGVtcHR5LjwvZW0+PGJyIC8+DQoJCQk8L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+YWxsb3dfbm9uZTwvdHQ+ICh0cnVlL2ZhbHNlKQ0KCQk8dWw+DQoJCQk8bGk+U2V0IHRvIHRydWUgaWYgdGhlIHVzZXIgbWF5IGVudGVyIGVtcHR5IHZhbHVlcy4gPGJyIC8+SWYgc2V0IHRvIGZhbHNlIGFuZCB2YWx1ZSBpcyBlbXB0eSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgcGFyYW0gJnF1b3Q7ZGVmYXVsdCZxdW90OyB3aWxsIGJlIHVzZWQuIDxiciAvPklmIHNldCB0byB0cnVlIGFuZCBibG9jayBpcyBvZiB0eXBlIGltYWdlL2ZpbGUgdGhlIG9wdGlvbiAmcXVvdDtub25lJnF1b3Q7IChtb2RlPSZxdW90O2Ryb3Bkb3duJnF1b3Q7KSBvciBhIGJ1dHRvbiB0byBjbGVhciB0aGUgc2VsZWN0ZWQgZmlsZS9pbWFnZSB2YWx1ZSAobW9kZT0mcXVvdDtmaWxlcGlja2VyJnF1b3Q7KSB3aWxsIGJlIGRpc3BsYXllZC48L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+c21hcnR5PC90dD4gKHRydWUvZmFsc2UpDQoJCTx1bD4NCgkJCTxsaT4NCgkJCQlUdXJuIHNtYXJ0eSBwcm9jZXNzaW5nIG9mIHZhbHVlcyBvbi9vZmYuPGJyIC8+DQoJCQkJSWYgc2V0IHRvIHRydWUgYW55IGdpdmVuIHZhbHVlIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IHRoZSBzbWFydHkgZW5naW5lLjxiciAvPg0KCQkJCTxlbT48c3Ryb25nPk5vdGljZTogPC9zdHJvbmc+IENvbnNpZGVyIHRoYXQgeW91IGNhbm5vdCB1c2UgdGhlIGRlZmF1bHQgc21hcnR5IGRlbGltaXRlcnMgdGhhdCBhcmUgdXNlZCBpbiB0aGUgdGVtcGxhdGUuIFRoaXMgd2lsbCBjYXVzZSBzbWFydHkgZXJyb3JzIGluIGZyb250ZW5kLjxiciAvPg0KCQkJCVNvIHlvdSBuZWVkIHRvIHVzZSA6OjogYXMgZGVsaW1pdGVyIGluc3RlYWQuPGJyIC8+PC9lbT4NCgkJCQlFLmcuOiA8Y29kZT57Y29udGVudCBibG9jaz0mcXVvdDtDYXRlZ29yaWVzJnF1b3Q7IGxhYmVsPSZxdW90O1NlbGVjdCBhIGNhdGVnb3J5JnF1b3Q7IGJsb2NrX3R5cGU9JnF1b3Q7ZHJvcGRvd24mcXVvdDsgaXRlbXM9JnF1b3Q7Ojo6Z2xvYmFsX2NvbnRlbnQgbmFtZT0mIzAzOTtjYXRlZ29yeWxpc3QmIzAzOTs6OjomcXVvdDsgc21hcnR5PSZxdW90O3RydWUmcXVvdDt9PC9jb2RlPg0KCQkJPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmRlc2NyaXB0aW9uPC90dD4gKHN0cmluZykgDQoJCTx1bD4NCgkJCTxsaT5BbGxvd3MgeW91IHRvIGFkZCBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIHRvIHRoYXQgYmxvY2sgZm9yIHlvdXIgZWRpdG9ycy48L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+Y29sbGFwc2U8L3R0PiAodHJ1ZS9mYWxzZSkNCgkJPHVsPg0KCQkJPGxpPg0KCQkJCVNldCB0byB0cnVlL2ZhbHNlIHRvIGRpc3BsYXkgYmxvY2sgaW4gYmFja2VuZCBpbiBjb2xsYXBzZWQvZXhwYW5kZWQgbW9kZSBieSBkZWZhdWx0LjxiciAvPg0KCQkJCTxlbT48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz4gd2lsbCBiZSBhbHdheXMgZmFsc2UgaWYgbm9fY29sbGFwc2U9dHJ1ZSBpcyB1c2VkLjwvZW0+PGJyIC8+DQoJCQk8L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+bm9fY29sbGFwc2U8L3R0PiAodHJ1ZS9mYWxzZSkNCgkJPHVsPg0KCQkJPGxpPg0KCQkJCVNldCB0byBmYWxzZSB0byBkaXNhYmxlIGZvbGRpbmcgb2YgYmxvY2tzLjxiciAvPg0KCQkJCTxlbT48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz4gaWYgc2V0IHRvIHRydWUgcGFyYW0gY29sbGFwc2UgaXMgYWx3YXlzIGZhbHNlLjwvZW0+PGJyIC8+DQoJCQk8L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+cmVxdWlyZWQ8L3R0PiAodHJ1ZS9mYWxzZSkNCgkJPHVsPg0KCQkJPGxpPg0KCQkJCVNldCB0byB0cnVlIGlmIHRoaXMgYmxvY2sgbWF5IG5vdCBiZSBlbXB0eS48YnIgLz4NCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQo8L3VsPg0KPHA+PHN0cm9uZz5QYXJhbXMgb2YgYmxvY2t0eXBlICZxdW90O2NoZWNrYm94JnF1b3Q7Ojwvc3Ryb25nPjwvcD4NCjx1bD4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmRlZmF1bHQ8L3R0PiAodHJ1ZS9mYWxzZSkgDQoJCTx1bD4NCgkJCTxsaT4NCgkJCQljaGVja3MvdW5jaGVja3MgdGhlIGNoZWNrYm94IGJ5IGRlZmF1bHQgd2hlbiBhZGRpbmcgYSBwYWdlPGJyIC8+DQoJCQkJPGVtPjxzdHJvbmc+Tm90aWNlOjwvc3Ryb25nPiBVc2UgJnF1b3Q7MSZxdW90OyBmb3IgY2hlY2tlZCBhbmQgJnF1b3Q7MCZxdW90OyBmb3IgdW5jaGVja2VkIGJ5IGRlZmF1bHQ8YnIgLz48L2VtPg0KCQkJCUUuZy4gPGNvZGU+e2NvbnRlbnQgYmxvY2tfdHlwZT0mcXVvdDtjaGVja2JveCZxdW90OyBkZWZhdWx0PTF9PC9jb2RlPg0KCQkJPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCjwvdWw+DQo8cD48c3Ryb25nPlBhcmFtcyBvZiBibG9ja3R5cGUgJnF1b3Q7ZHJvcGRvd24mcXVvdDsvJnF1b3Q7c2VsZWN0X211bHRpcGxlJnF1b3Q7Ojwvc3Ryb25nPjwvcD4NCjx1bD4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0Pml0ZW1zPC90dD4gKHN0cmluZykNCgkJPHVsPg0KCQkJPGxpPkl0ZW0gbGFiZWwocykgb2YgdGhlIGZpZWxkKHMpIChzZXBhcmF0ZWQgYnkgYSBkZWxpbWl0ZXIgLSBkZWZhdWx0IGlzIHwgKHBpcGUpKTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD52YWx1ZXM8L3R0PiAoc3RyaW5nKQ0KCQk8dWw+DQoJCQk8bGk+VmFsdWUocykgb2YgdGhlIGl0ZW1zIChzZXBhcmF0ZWQgYnkgYSBkZWxpbWl0ZXIgLSBkZWZhdWx0IGlzIHwgKHBpcGUpKTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGVtPjxzdHJvbmc+Tm90aWNlOjwvc3Ryb25nPiBpZiB0aGVyZSBhcmUgbGVzcyB2YWx1ZXMgdGhhbiBpdGVtcyB0aGUgaXRlbSBsYWJlbHMgd2lsbCBiZSB1c2VkIGFzIHZhbHVlcyAoYW5kIHZpc2UgdmVyc2EpLjwvZW0+PGJyIC8+PGJyIC8+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5kZWZhdWx0PC90dD4gKHN0cmluZykNCgkJPHVsPg0KCQkJPGxpPg0KCQkJCVByZXNlbGVjdGVkIHZhbHVlKHMpIChzZXBhcmF0ZWQgYnkgYSBkZWxpbWl0ZXIgLSBkZWZhdWx0IGlzIHwgKHBpcGUpKTxiciAvPg0KCQkJPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmRlbGltaXRlcjwvdHQ+IChzdHJpbmcpDQoJCTx1bD4NCgkJCTxsaT5BIHNpZ24gb3Igc3RyaW5nIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGRldmlkZSB0aGUgaXRlbXMvdmFsdWVzIChkZWZhdWx0IGlzIHwgKHBpcGUpKTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PnNpemU8L3R0PiAoaW50ZWdlcikNCgkJPHVsPg0KCQkJPGxpPkhlaWdodCBvZiBjb250ZW50IGJsb2NrIGluIGJhY2sgZW5kIGlmIDxjb2RlPmJsb2NrX3R5cGU9JnF1b3Q7c2VsZWN0X211bHRpcGxlJnF1b3Q7PC9jb2RlPiBpcyBzZXQuIDxlbT4oRGVmYXVsdCBpcyBudW1iZXIgb2YgaXRlbXMpPC9lbT48L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5zb3J0YWJsZV9pdGVtczwvdHQ+ICh0cnVlL2ZhbHNlKSAtIHNlbGVjdF9tdWx0aXBsZSBvbmx5DQoJCTx1bD4NCgkJCTxsaT4NCgkJCQlJZiBzZXQgdG8gdHJ1ZSB0aGUgaXRlbXMgd29uJiMwMzk7dCBiZSBzaG93biBhcyBhIG11bHRpcGxlIHNlbGVjdCBpbnB1dCB3aXRoIG9wdGlvbnMgYnV0IGFzIGEgbGlzdCBvZiBjaGVja2JveGVzIHRoYXQgY2FuIGJlIHJlb3JkZXJlZC48YnIgLz5FYWNoIHJvdyBjb250YWlucyB0aGUgaXRlbSBsYWJlbCBhbmQgYSBjaGVja2JveCB3aXRoIHRoZSBpdGVtIHZhbHVlLjxiciAvPg0KCQkJCTxlbT48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz4gb25seSB0aGUgb3JkZXIgb2YgdGhlIDxzdHJvbmc+c2VsZWN0ZWQ8L3N0cm9uZz4gaXRlbXMgd2lsbCBiZSBzdG9yZWQgYW5kIGFsd2F5cyBkaXNwbGF5ZWQgb24gdGhlIHRvcCBvZiB0aGUgbGlzdCB3aGVuIHJlbG9hZGluZyB0aGUgZWRpdCBwYWdlLjxiciAvPg0KCQkJCVVuc2VsZWN0ZWQgaXRlbXMgd2lsbCBhcHBlbmRlZCBpbiB0aGF0IG9yZGVyIHRoZXkgYXJlIGRlZmluZWQgaW4gdGhlIHRlbXBsYXRlPC9lbT4NCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQo8L3VsPg0KPHA+PHN0cm9uZz5QYXJhbXMgb2YgYmxvY2t0eXBlICZxdW90O2RhdGUmcXVvdDs6PC9zdHJvbmc+PC9wPg0KPHVsPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+c3RlcF9ob3VyczwvdHQ+IChpbnQpIA0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJc3RlcHMgb2YgaG91cnMgaW4gdGhlIGNsb2NrIGRyb3Bkb3duLiAoZGVmYXVsdCBpcyAxKQ0KCQkJPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PnN0YXJ0X2hvdXI8L3R0PiAoaW50KSANCgkJPHVsPg0KCQkJPGxpPg0KCQkJCXRoZSBzdGFydCBob3VyIG9mIHRoZSBjbG9jayBkcm9wZG93bi4gKGRlZmF1bHQgaXMgMCkNCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5lbmRfaG91cjwvdHQ+IChpbnQpIA0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJdGhlIGVuZCBob3VyIG9mIHRoZSBjbG9jayBkcm9wZG93biAoZGVmYXVsdCBpcyAxMiBvciAyMykNCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5zaG93MjRoPC90dD4gKHRydWUvZmFsc2UpIA0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJc2V0IHRvIGZhbHNlIGlmIEFNL1BNIGlzIHVzZWQuIChkZWZhdWx0IGlzIHRydWUpDQoJCQk8L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+c3RlcF9taW51dGVzPC90dD4gKGludCkgDQoJCTx1bD4NCgkJCTxsaT4NCgkJCQlzdGVwcyBvZiBtaW51dGVzIGluIHRoZSBjbG9jayBkcm9wZG93bi4gKGRlZmF1bHQgaXMgMTApDQoJCQk8L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+c3RhcnRfbWludXRlPC90dD4gKGludCkgDQoJCTx1bD4NCgkJCTxsaT4NCgkJCQl0aGUgc3RhcnQgbWludXRlIG9mIHRoZSBjbG9jayBkcm9wZG93bi4gKGRlZmF1bHQgaXMgMCkNCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmVuZF9taW51dGU8L3R0PiAoaW50KSANCgkJPHVsPg0KCQkJPGxpPg0KCQkJCXRoZSBlbmQgbWludXRlIG9mIHRoZSBjbG9jayBkcm9wZG93biAoZGVmYXVsdCBpcyA1OSkNCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5zaG93X2Nsb2NrPC90dD4gKHRydWUvZmFsc2UpIA0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJc2V0IHRvIGZhbHNlIGlmIG5vIHRpbWUgZHJvcGRvd24gc2hvdWxkIGJlIGRpc3BsYXllZCAoZGVmYXVsdCBpcyB0cnVlKTxiciAvPg0KCQkJCTxlbT48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz4gSWYgc2V0IHRvIGZhbHNlIDAwOjAwIG8mIzAzOTtjbG9jayB3aWxsIGJlIHVzZWQ8L2VtPg0KCQkJPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmRhdGVfZm9ybWF0PC90dD4gKHN0cmluZykgDQoJCTx1bD4NCgkJCTxsaT4NCgkJCQlUaGUgc3RyZnRpbWUgZGF0ZSBmb3JtYXQgdG8gc2hvdyBpbiBmcm9udGVuZC4NCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQo8L3VsPg0KPHA+PHN0cm9uZz5QYXJhbXMgb2YgYmxvY2t0eXBlICZxdW90O211bHRpX2lucHV0JnF1b3Q7Ojwvc3Ryb25nPjwvcD4NCjx1bD4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmlucHV0czwvdHQ+IChjc3Ygb2YgaW5wdXQgaWRzIHlvdSBjcmVhdGVkIGluIHRoZSBiYWNrZW5kKSANCgkJPGJyIC8+PGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PnZhbHVlX2RlbGltaXRlcjwvdHQ+IChhbnkgc3RyaW5nKSANCgkJPHVsPg0KCQkJPGxpPg0KCQkJCVRoaXMgZGVmaW5lcyBhIHN0cmluZyB0aGF0IGRldmlkZXMgdGhlIHZhbHVlcyBvZiB0aGUgaW5wdXRzIG9mIG9uZSBtdWx0aV9pbnB1dCB3aGVuIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UuPGJyIC8+DQoJCQkJRGVmYXVsdCBpcyAmcXVvdDs8IS0tIG11bHRpX2lucHV0X3ZhbHVlX2RlbGxpbWl0ZXIgLS0+JnF1b3Q7DQoJCQk8L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+aW5wdXRfZGVsaW1pdGVyPC90dD4gKGFueSBzdHJpbmcpIA0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJVGhpcyBkZWZpbmVzIGEgc3RyaW5nIHRoYXQgZGV2aWRlcyB0aGUgbXVsdGlfaW5wdXRzIHlvdSBkZWZpbmVkIGZvciB0aGlzIGNvbnRlbnQgYmxvY2sgd2hlbiBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlLjxiciAvPg0KCQkJCURlZmF1bHQgaXMgJnF1b3Q7PCEtLSBtdWx0aV9pbnB1dF9kZWxsaW1pdGVyIC0tPiZxdW90Ow0KCQkJPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxwPjxzdHJvbmc+V2hhdCBpcyBhIG11bHRpX2lucHV0IGZvcj88L3N0cm9uZz48L3A+DQoJCTxwPkEgbXVsdGlfaW5wdXQgYmxvY2sgaXMgYSBjb250ZW50IGJsb2NrIHRoYXQgY29uc2lzdHMgb2YgZGlmZmVyZW50IGlucHV0IGZpZWxkcy4gPGJyIC8+DQoJCVlvdSBjYW4gZGVmaW5lIHRoZW0gaW4gdGhlIG1vZHVsZSBhZG1pbmlzdHJhdGlvbiB1c2luZyB0aGUgc2FtZSBzeW50YXggeW91IHVzZSBpbiBhIHRlbXBsYXRlIHdoZW4gZGVmaW5pbmcgYSBjb250ZW50IGJsb2NrLjxiciAvPg0KCQlNdWx0aSBpbnB1dHMgY2FuIGJlIHVzZWQgaWYgeW91IHdhbnQgdG8gc3RvcmUgZGlmZmVyZW50IHZhbHVlcyBpbiBvbmUgY29udGVudCBibG9jayBhbmQgcHJvdmlkZSBkaWZmZXJlbnQgaW5wdXQgdHlwZXMgZm9yIGVhY2ggdmFsdWVzLjxiciAvPg0KCQlUaGlzIGNhbiBiZSB1c2VmdWxsIGlmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIGRyb3Bkb3duIHRvIHNlbGVjdCBhIG1vZHVsZSB0byBiZSBzaG93biBpbiBmcm9udGVuZCBhbmQgdGV4dCBpbnB1dCB0byBkZWZpbmUgdGhlIG1vZHVsZSBwYXJhbWV0ZXJzLjxiciAvPg0KCQlFeGFtcGxlIGZvciBhIG11bHRpX2lucHV0IGluIHBhZ2UgdGVtcGxhdGU6PC9wPg0KCQk8cHJlPg0KCQk8Y29kZT4NCgkJe2NvbnRlbnQgYmxvY2s9JnF1b3Q7bW9kdWxlJnF1b3Q7IGxhYmVsPSZxdW90O1BhZ2UgbW9kdWxlcyZxdW90OyBibG9ja190eXBlPSZxdW90O211bHRpX2lucHV0JnF1b3Q7IGlucHV0cz0mcXVvdDttb2R1bGUsbW9kdWxlLG1vZHVsZSxtb2R1bGUmcXVvdDt9DQoJCTwvY29kZT4NCgkJPC9wcmU+DQoJCTxwPkV4YW1wbGUgZm9yIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBtdWx0aV9pbnB1dCBuYW1lZCAmcXVvdDttb2R1bGUmcXVvdDs6PC9wPg0KCQk8cHJlPg0KCQk8Y29kZT4NCgkJe2NvbnRlbnQgYmxvY2s9JnF1b3Q7bW9kdWxlIHNlbGVjdGlvbiZxdW90OyBibG9ja190eXBlPSZxdW90O2Ryb3Bkb3duJnF1b3Q7IGl0ZW1zPSZxdW90O3xOZXdzfEdhbGxlcnl8TWVudSZxdW90O30NCgkJe2NvbnRlbnQgYmxvY2s9JnF1b3Q7bW9kdWxlIHBhcmFtcyZxdW90OyBibG9ja190eXBlPSZxdW90O3RleHQmcXVvdDsgb25lbGluZT10cnVlfQ0KCQk8L2NvZGU+DQoJCTwvcHJlPg0KCQk8cD5XaGF0IGhhcHBlbnMgaWYgeW91IGVkaXQgYSBwYWdlPzwvcD4NCgkJPHA+SXQgd2lsbCBzaG93IHlvdSBhIGZpZWxkc2V0IHdpdGggbGVnZW5kICZxdW90O1BhZ2UgbW9kdWxlcyZxdW90Oy4gPGJyIC8+DQoJCUluc2lkZSB0aGlzIGZpZWxkc2V0IGl0IHNob3dzIHRoZSBtdWx0aV9pbnB1dCBuYW1lZCAmcXVvdDttb2R1bGUmcXVvdDsgZm91ciB0aW1lcy48YnIgLz4NCgkJVGhhdCBtZWFucyB5b3Ugc2VlIGZvdXIgbGluZXMgd2l0aCB0d28gaW5wdXQgZmllbGRzLiBBIGRyb3Bkb3duIGFuZCBhIHRleHQgaW5wdXQuPC9wPg0KCQk8cD5XaGF0IGhhcHBlbnMgaWYgeW91IHNhdmUgYSBwYWdlPzwvcD4NCgkJPHA+VGhlIG1vZHVsZSBzdG9yZXMgdGhlIHZhbHVlcyBhcyBvbmUgc2luZ2xlIGNvbnRlbnQgcHJvcGVydHkgKGFrYSBjb250ZW50YmxvY2spIGFuZCBzZXBhcmF0ZXMgdGhlIGlucHV0cyBieSBhIGdpdmVuIGRlbGltaXRlci48YnIgLz4NCgkJTGV0JiMwMzk7cyBhc3N1bWUgeW91IHNlbGVjdCB0aGUgTmV3cyBtb2R1bGUgZm91ciB0aW1lcyB3aXRoIGRpZmZlcmVudCBtb2R1bGUgcGFyYW1zIGxpa2UgY2F0ZWdvcnk9JnF1b3Q7MSZxdW90OywgY2F0ZWdvcnk9JnF1b3Q7MiZxdW90OywgY2F0ZWdvcnk9JnF1b3Q7MyZxdW90OywgY2F0ZWdvcnk9JnF1b3Q7NCZxdW90Oy48YnIgLz4NCgkJSW4gdGhlIGRhdGFiYXNlIGl0IHN0b3JlcyB0aGlzIHN0cmluZzo8L3A+DQoJCTxwcmU+DQoJCTxjb2RlPg0KCQlOZXdzPCEtLSBtdWx0aV9pbnB1dF92YWx1ZV9kZWxpbWl0ZXIgLS0+Y2F0ZWdvcnk9JnF1b3Q7MSZxdW90OzwhLS0gbXVsdGlfaW5wdXRfZGVsaW1pdGVyIC0tPjxiciAvPg0KCQlOZXdzPCEtLSBtdWx0aV9pbnB1dF92YWx1ZV9kZWxpbWl0ZXIgLS0+Y2F0ZWdvcnk9JnF1b3Q7MiZxdW90OzwhLS0gbXVsdGlfaW5wdXRfZGVsaW1pdGVyIC0tPjxiciAvPg0KCQlOZXdzPCEtLSBtdWx0aV9pbnB1dF92YWx1ZV9kZWxpbWl0ZXIgLS0+Y2F0ZWdvcnk9JnF1b3Q7MyZxdW90OzwhLS0gbXVsdGlfaW5wdXRfZGVsaW1pdGVyIC0tPjxiciAvPg0KCQlOZXdzPCEtLSBtdWx0aV9pbnB1dF92YWx1ZV9kZWxpbWl0ZXIgLS0+Y2F0ZWdvcnk9JnF1b3Q7NCZxdW90Ow0KCQk8L2NvZGU+DQoJCTwvcHJlPg0KCQk8cD5JbiB5b3VyIHBhZ2UgdGVtcGxhdGUgeW91IGNhbiBleHBsb2RlIHRoZSBjb250ZW50IGJ5IHRoZSBkZWxpbWl0ZXJzIGFuZCBjYWxsIHRoZSBzZWxlY3RlZCBtb2R1bGVzLjwvcD4NCgkJPHA+RnVsbCBFeGFtcGxlOjwvcD4NCgkJPHByZT4NCgkJPGNvZGU+DQoJCXsqIGRlZmluZSB0aGUgY29udGVudCBibG9jayAqfQ0KCQl7Y29udGVudCBibG9jaz0mcXVvdDtteV9tb2R1bGVzJnF1b3Q7IGJsb2NrX3R5cGU9JnF1b3Q7bXVsdGlfaW5wdXQmcXVvdDsgaW5wdXRzPSZxdW90O01vZHVsZSxNb2R1bGUsTW9kdWxlLE1vZHVsZSZxdW90OyBhc3NpZ249JnF1b3Q7bW9kdWxlcyZxdW90O30NCgkJDQoJCXsqIGV4cGxvZGUgYmxvY2sgY29udGVudCBpbiBhbiBhcnJheSB0byBnZXQgdGhlIGlucHV0IGdyb3VwcyAqfQ0KCQl7YXNzaWduIHZhcj1tb2R1bGVzIHZhbHVlPSZxdW90OzwhLS0gbXVsdGlfaW5wdXRfZGVsaW1pdGVyIC0tPiZxdW90O3xleHBsb2RlOiRtb2R1bGVzfQ0KCQkNCgkJeyogbG9vcCB0aHJvdWdoIHRoZSBzZWxlY3RlZCBtb2R1bGVzICp9DQoJCXtmb3JlYWNoIGZyb209JG1vZHVsZXMgaXRlbT0mcXVvdDttb2R1bGUmcXVvdDt9DQoJCQl7aWYgJG1vZHVsZSAhPSAmIzAzOTsmIzAzOTt9DQoJCQkNCgkJCQl7KiBleHBsb2RlIHRoZSBpbnB1dCB2YWx1ZXMgaW4gbW9kdWxuYW1lIGFuZCBtb2R1bGUgcGFyYW1ldGVycyAqfQ0KCQkJCXthc3NpZ24gdmFyPW1vZHVsZV9pdGVtcyB2YWx1ZT0mcXVvdDs8IS0tIG11bHRpX2lucHV0X3ZhbHVlX2RlbGltaXRlciAtLT4mcXVvdDt8ZXhwbG9kZTokbW9kdWxlfQ0KCQkJCQ0KCQkJCXtpZiRtb2R1bGVfaXRlbXNbMF0gIT0gJiMwMzk7JiMwMzk7fQ0KCQkJCQ0KCQkJCQl7KiBjYWxsIHRoZSBtb2R1bGUgKn0NCgkJCQkJe2lmIGlzc2V0KCRtb2R1bGVfaXRlbXNbMV0pfQ0KCQkJCQkJe2V2YWwgdmFyPSRzbWFydHkubGRlbGltfGNhdDomIzAzOTtjbXNfbW9kdWxlIG1vZHVsZT0mcXVvdDsmIzAzOTt8Y2F0OiRtb2R1bGVfaXRlbXNbMF18Y2F0OiYjMDM5OyZxdW90OyAmIzAzOTt8Y2F0OiRtb2R1bGVfaXRlbXNbMV18Y2F0OiRzbWFydHkucmRlbGltfQ0KCQkJCQl7ZWxzZX0NCgkJCQkJCXtldmFsIHZhcj0kc21hcnR5LmxkZWxpbXxjYXQ6JiMwMzk7Y21zX21vZHVsZSBtb2R1bGU9JnF1b3Q7JiMwMzk7fGNhdDokbW9kdWxlX2l0ZW1zWzBdfGNhdDomIzAzOTsmcXVvdDsmIzAzOTt8Y2F0OiRzbWFydHkucmRlbGltfQ0KCQkJCQl7L2lmfQ0KCQkJCQkNCgkJCQl7L2lmfQ0KCQkJCQ0KCQkJey9pZn0NCgkJDQoJCXsvZm9yZWFjaH0NCgkJPC9jb2RlPg0KCQk8L3ByZT4NCgk8L2xpPg0KPC91bD4NCg0KPGgzPlN1cHBvcnQ8L2gzPg0KPHA+VGhpcyBtb2R1bGUgZG9lcyBub3QgaW5jbHVkZSBjb21tZXJjaWFsIHN1cHBvcnQuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PC9wPg0KPHVsPg0KCTxsaT5UaGUgcHJvamVjdHMgaG9tZXBhZ2UgaXMgPGEgaHJlZj0iaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9jb250ZW50Mi8iPmh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvY29udGVudDIvPC9hPjwvbGk+DQoJPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi48L2xpPg0KPC91bD4NCjxiciAvPg0KPHA+RmVlbCBmcmVlIHJlcG9ydCBhbnkga2luZCBvZiBmZWVkYmFjay48L3A+DQo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4NCjxwPg0KCUFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLjxiciAvPg0KCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLDxiciAvPg0KCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mPGJyIC8+DQoJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLjxiciAvPg0KCVNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy48YnIgLz4NCglZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZTxiciAvPg0KCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlPGJyIC8+DQoJRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0E8YnIgLz4NCglPciByZWFkIGl0IG9ubGluZTogPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5odHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEw8L2E+PGJyIC8+DQoJUGxlYXNlIHJlYWQgdGhlIHRleHQgb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuDQo8L3A+DQo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMTAsIEdlb3JnIEJ1c2NoIChOYU4pLiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+DQo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPg0KPGJyIC8+JzsKJGxhbmdbJ2NoYW5nZWxvZyddID0gJzxiciAvPg0KPHA+PHN0cm9uZz5Nb2R1bGUgcmVsZWFzZXM8L3N0cm9uZz4uLi48L3A+DQo8dWw+DQoJPGxpPjxwPjxzdHJvbmc+MC43LjEgKE5vdiAyMDEwKTo8L3N0cm9uZz48L3A+DQoJCTx1bD4NCgkJCTxsaT48cD5CdWdmaXhlczo8L3A+DQoJCQkJPHVsPg0KCQkJCQk8bGk+PHA+LSBmaXhlZCBidWcgaXRlbSAjNTY1MTwvcD48L2xpPg0KCQkJCTwvdWw+DQoJCQk8L2xpPg0KCQkJPGxpPjxwPkZlYXR1cmVzOjwvcD4NCgkJCQk8dWw+DQoJCQkJCTxsaT48cD4tIGFkZGVkIHBhcmFtIGZldV9hY2Nlc3M8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gYWRkZWQgcGFyYW0gZmV1X2FjdGlvbjwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbSByZXF1aXJlZDwvcD48L2xpPg0KCQkJCTwvdWw+DQoJCQk8L2xpPg0KCQk8L3VsPg0KCTwvbGk+DQoJPGxpPjxwPjxzdHJvbmc+MC43IChOb3YgMjAxMCk6PC9zdHJvbmc+PC9wPg0KCQk8dWw+DQoJCQk8bGk+PHA+QnVnZml4ZXM6PC9wPg0KCQkJCTx1bD4NCgkJCQkJPGxpPjxwPi0gY29tcGF0aWJpbGl0eSBidWdmaXhlcyBmb3IgQ01TbXMgMS45KyAobmVlZHMgQ01TbXMgMS45IG1pbmltdW0gbm93KTwvcD48L2xpPg0KCQkJCTwvdWw+DQoJCQk8L2xpPg0KCQkJPGxpPjxwPkZlYXR1cmVzOjwvcD4NCgkJCQk8dWw+DQoJCQkJCTxsaT48cD4tIGFkZGVkIHN1cHBvcnQgb2Yge2NvbnRlbnRfbW9kdWxlfSB0YWc8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gYWRkZWQgcGFyYW0gbm9fY29sbGFwc2U8L3A+PC9saT4NCgkJCQk8L3VsPg0KCQkJPC9saT4NCgkJPC91bD4NCgk8L2xpPg0KCTxsaT48cD48c3Ryb25nPjAuNi4yIChOb3YgMjAxMCk6PC9zdHJvbmc+PC9wPg0KCQk8dWw+DQoJCQk8bGk+PHA+QnVnZml4ZXM6PC9wPg0KCQkJCTx1bD4NCgkJCQkJPGxpPjxwPi0gbWlub3IgYnVnZml4IChzaG93ZWQgdGFicyBvZiBwcmV2aW91cyB0ZW1wbGF0ZSB3aGVuIHRlbXBsYXRlIHdhcyBjaGFuZ2VkKTwvcD48L2xpPg0KCQkJCTwvdWw+DQoJCQk8L2xpPg0KCQk8L3VsPg0KCTwvbGk+DQoJPGxpPjxwPjxzdHJvbmc+MC42LjEgKE5vdiAyMDEwKTo8L3N0cm9uZz48L3A+DQoJCTx1bD4NCgkJCTxsaT48cD5CdWdmaXhlczo8L3A+DQoJCQkJPHVsPg0KCQkJCQk8bGk+PHA+LSBzZXZlcmFsIGJ1Z2ZpeGVzPC9wPjwvbGk+DQoJCQkJCTxsaT48cD4tIGNvbXBhdGliaWxpdHkgYnVnZml4ZXMgZm9yIENNU21zIDEuOTwvcD48L2xpPg0KCQkJCTwvdWw+DQoJCQk8L2xpPg0KCQkJPGxpPjxwPkZlYXR1cmVzOjwvcD4NCgkJCQk8dWw+DQoJCQkJCTxsaT48cD4tIGFkZGVkIGJsb2NrX3R5cGUgbXVsdGlfaW5wdXQ8L3A+PC9saT4NCgkJCQk8L3VsPg0KCQkJPC9saT4NCgkJPC91bD4NCgk8L2xpPg0KCTxsaT48cD48c3Ryb25nPjAuNiAoT2N0IDIwMTApOjwvc3Ryb25nPjwvcD4NCgkJPHVsPg0KCQkJPGxpPjxwPkJ1Z2ZpeGVzOjwvcD4NCgkJCQk8dWw+DQoJCQkJCTxsaT48cD4tIHNldmVyYWwgYnVnZml4ZXM8L3A+PC9saT4NCgkJCQk8L3VsPg0KCQkJPC9saT4NCgkJCTxsaT48cD5GZWF0dXJlczo8L3A+DQoJCQkJPHVsPg0KCQkJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbSBibG9ja19ncm91cDwvcD48L2xpPg0KCQkJCTwvdWw+DQoJCQk8L2xpPg0KCQkJPGxpPjxwPk1pc2M6PC9wPg0KCQkJCTx1bD4NCgkJCQkJPGxpPjxwPi0gUmVtb3ZlZCBmaWxlIHBpY2tlciAoYW5kIGFzc29jaWF0ZWQgYmxvY2tfdHlwZXMgaW1hZ2UvZmlsZSkgLSB1c2UgR0JGaWxlUGlja2VyIGluc3RlYWQuPC9wPjwvbGk+DQoJCQkJPC91bD4NCgkJCTwvbGk+DQoJCTwvdWw+DQoJPC9saT4NCgk8bGk+PHA+PHN0cm9uZz4wLjUgKFNlcHQgMjAxMCk6PC9zdHJvbmc+PC9wPg0KCQk8dWw+DQoJCQk8bGk+PHA+QnVnZml4ZXM6PC9wPg0KCQkJCTx1bD4NCgkJCQkJPGxpPjxwPmZpeGVkIGJ1ZyBpdGVtICM1MjkyIChtZW1vcnkgaXNzdWUpPC9wPjwvbGk+DQoJCQkJCTxsaT48cD5maXhlZCBidWcgaXRlbSAjNTI1NCAoZGlzYWJsZSB3eXNpd3lnIG5vdCB3b3JraW5nKTwvcD48L2xpPg0KCQkJCQk8bGk+PHA+Zml4ZWQgYnVnIGl0ZW0gIzUzMTAgKHVybG9ubHkgbm90IHdvcmtpbmcpPC9wPjwvbGk+DQoJCQkJCTxsaT48cD5maXhlZCBidWcgaXRlbSAjNTMxMSAoaW1hZ2UgcGF0aHMgbm90IHN0b3JlZCAmIzAzOTtjb3JyZWN0bHkmIzAzOTspPC9wPjwvbGk+DQoJCQkJPC91bD4NCgkJCTwvbGk+DQoJCQk8bGk+PHA+RmVhdHVyZXM6PC9wPg0KCQkJCTx1bD4NCgkJCQkJPGxpPjxwPmFkZGVkIGZlYXR1cmUgcmVxdWVzdCAjNTI2MSAoQWRkIHNvcnQgdG8gaW1hZ2UgdHlwZSAtIG5vdGljZSB0aGUgY2hhbmdlIG9mIHBhcmFtIGZpbHRlcik8L3A+PC9saT4NCgkJCQkJPGxpPjxwPmFkZGVkIHBhcmFtcyBleGNsdWRlX3ByZWZpeCwgaW5jbHVkZV9wcmVmaXgsIGV4Y2x1ZGVfc3VmaXgsIGluY2x1ZGVfc3VmaXg8L3A+PC9saT4NCgkJCQkJPGxpPjxwPmFkZGVkIGZlYXR1cmUgcmVxdWVzdCAjNTI1MyAoVGV4dCBpbnB1dCB0byBkZWZpbmUgYWRkIHBhcmFtcyB0byByZWRpcmVjdCBmdW5jdGlvbik8L3A+PC9saT4NCgkJCQkJPGxpPjxwPmFkZGVkIGZlYXR1cmUgcmVxdWVzdCAjNTI0MCAoRGVmYXVsdCB2YWx1ZXMgb2YgQWR2YW5jZWRDb250ZW50IHBhZ2Ugb3B0aW9ucyk8L3A+PC9saT4NCgkJCQkJPGxpPjxwPmFkZGVkIGZlYXR1cmUgcmVxdWVzdCAjNTI0MSAocHV0IEZldUFjY2VzcyBpbiBCbG9ja3RhYik8L3A+PC9saT4NCgkJCQk8L3VsPg0KCQkJPC9saT4NCgkJCTxsaT48cD5NaXNjOjwvcD4NCgkJCQk8dWw+DQoJCQkJCTxsaT48cD4tIEFkdmFuY2VkQ29udGVudCBvcHRpb25zIGFyZSBzaG93biBpbiBzZXBhcmF0ZSB0YWI8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gQWRkZWQgbmV3IHBlcm1pc3Npb24gdG8gbWFuYWdlIHRoZSBBZHZhbmNlZENvbnRlbnQgb3B0aW9ucyB0YWI8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gcmVtb3ZlZCBwYXJhbSBmaWx0ZXIgKHVzZSBuZXcgcGFyYW1zIGluc3RlYWQpPC9wPjwvbGk+DQoJCQkJCTxsaT48cD4tIHBhdGggdG8gZmlsZXMgYXJlIHN0b3JlZCByZWxhdGl2ZSB0byB0aGUgdXBsb2FkcyBkaXI8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gcGFyYW0gZGlyIG9mIGJsb2NrIHR5cGUgZmlsZS9pbWFnZSBuZWVkcyB0byBiZSByZWxhdGl2ZSB0byB0aGUgdXBsb2FkcyBkaXIgb25seSAodGhlcmUgaXMgbm8gaW1hZ2UgdXBsb2FkcyBkaXIgdXNlZCBhbnltb3JlKTwvcD48L2xpPg0KCQkJCTwvdWw+DQoJCQk8L2xpPg0KCQk8L3VsPg0KCTwvbGk+DQoJPGxpPjxwPjxzdHJvbmc+MC40LjEgKEF1Z3VzdCAyMDEwKTo8L3N0cm9uZz48L3A+DQoJCTx1bD4NCgkJCTxsaT48cD5CdWdmaXhlczo8L3A+DQoJCQkJPHVsPg0KCQkJCQk8bGk+PHA+LSAjNTE1MTogZml4ZWQgc3R5bGVzaGVldCBpc3N1ZSB3aXRoIGV4cGFuZC9jb2xsYXBzZSBidXR0b25zIG9mIGNvbnRlbnQgYmxvY2tzIGluIElFL1NhZmFyaS48L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gIzUxNjI6IFBIUCB3YXJuaW5ncyBpZiBiYWNrZW5kIHVzZXJzIHdpdGhvdXQgcGVybWlzc2lvbiAmcXVvdDtNYW5hZ2UgQWxsIEFkdmFuY2VkQ29udGVudCBCbG9ja3MmcXVvdDsgb3BlbiBhbiBhZHZhbmNlZCBjb250ZW50IHBhZ2UgYW5kIG11bHRpcGxlIGNvbnRlbnQgYmxvY2tzIG9mIHNhbWUgbmFtZSB3ZXJlIHVzZWQgaW4gdGVtcGxhdGUuPC9wPjwvbGk+DQoJCQkJCTxsaT48cD4tIGZpeGVkIGJ1ZyB3aGVyZSBleHRyYSBmaWVsZHMgY291bGQgbm90IGJlIHVwZGF0ZWQuPC9wPjwvbGk+DQoJCQkJCTxsaT48cD4tIGZpeGVkIGJ1ZyB3aGVyZSBmZXUgYWNjZXNzIGRpZCBub3Qgd29yay48L3A+PC9saT4NCgkJCQk8L3VsPg0KCQkJPC9saT4NCgkJCTxsaT48cD5GZWF0dXJlczo8L3A+DQoJCQkJPHVsPg0KCQkJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbSAmcXVvdDtkZWxldGUmcXVvdDsgdG8gbGV0IHVzZXJzIGRlbGV0ZSBmaWxlcyBldmVuIGlmIG5vIHBlcm1pc3Npb24gJnF1b3Q7TW9kaWZ5IEZpbGVzJnF1b3Q7PC9wPjwvbGk+DQoJCQkJCTxsaT48cD4tIGFkZGVkIHBhcmFtICZxdW90O2NyZWF0ZV9kaXJzJnF1b3Q7IHRvIGxldCB1c2VycyBjcmVhdGVfZGlycyBldmVuIGlmIG5vIHBlcm1pc3Npb24gJnF1b3Q7TW9kaWZ5IEZpbGVzJnF1b3Q7PC9wPjwvbGk+DQoJCQkJCTxsaT48cD4tIGFkZGVkIG5ldyBibG9ja3R5cGUgJnF1b3Q7bm90ZSZxdW90OyB0byBjcmVhdGUgc29tZSBzaW5nbGUgbm90ZXMgZm9yIHlvdXIgZWRpdG9yczwvcD48L2xpPg0KCQkJCTwvdWw+DQoJCQk8L2xpPg0KCQkJPGxpPjxwPk1pc2M6PC9wPg0KCQkJCTx1bD4NCgkJCQkJPGxpPjxwPi0gcmVtb3ZlZCBkZXBlbmRlbmN5IG9mIEZpbGVNYW5hZ2VyPC9wPjwvbGk+DQoJCQkJCTxsaT48cD4tIGJsb2NrIG9mIHR5cGUgZmlsZSBvciBpbWFnZSBzdG9yZXMgcmVsYXRpdmUgdXJsIG5vdzwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSBibG9jayB0eXBlIGltYWdlIHNob3dzIHRodW1ibmFpbCBpbiBiYWNrZW5kIHByZXZpZXcgaW5zdGVhZCBvZiBmdWxsIGltYWdlPC9wPjwvbGk+DQoJCQkJPC91bD4NCgkJCTwvbGk+DQoJCTwvdWw+DQoJPC9saT4NCgk8bGk+PHA+PHN0cm9uZz4wLjQgKEp1bHkgMjAxMCk6PC9zdHJvbmc+PC9wPg0KCQk8dWw+DQoJCQk8bGk+PHA+SW1wb3J0YW50IG5vdGljZTo8L3A+DQoJCQkJPHVsPg0KCQkJCQk8bGk+PHA+LSBjaGFuZ2VkIHBhcmFtICZxdW90O3R5cGUmcXVvdDsgdG8gJnF1b3Q7YmxvY2tfdHlwZSZxdW90OyBzaW5jZSBpdCBpbnRlcmZlcmVzIHdpdGgge2NvbnRlbnRfbW9kdWxlfSB0YWc8L3A+PC9saT4NCgkJCQk8L3VsPg0KCQkJPC9saT4NCgkJCTxsaT48cD5CdWdmaXhlczo8L3A+DQoJCQkJPHVsPg0KCQkJCQk8bGk+PHA+LSAjNTEwMTogcGFnZV90YWIgJnF1b3Q7b3B0aW9ucyZxdW90OyB3YXMgc2hvd24gdG8gdXNlcnMgd2l0aCBubyBwZXJtaXNzaW9uIHRvIGVkaXQgcGFnZSBvcHRpb25zIGlmIGEgY29udGVudCBibG9jayB3YXMgYXNzaWduZWQgdG8gdGhhdCB0YWIuPC9wPjwvbGk+DQoJCQkJCTxsaT48cD4tICM1MDk3OiBsaW5rIHRvIG1pc3NpbmcgY3NzIHJlbW92ZWQ8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gZml4ZWQgbWltZS10eXBlIGlzc3VlIChhZGRlZCBwcmVmZXJlbmNlIHRvIHRvZ2dsZSBtaW1lLXR5cGUgdXNhZ2Ugb24vb2ZmKTwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSBmaXhlZCBwYXRoIGlzc3VlIHdoZXJlIHRodW1ibmFpbHMgd2VyZSBub3Qgc2hvd248L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gZml4ZWQgY29tcGF0aWJpbGl0eSB3aXRoIENNU21zIDEuODwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSBvdGhlciBtaW5vciBidWdmaXhlczwvcD48L2xpPg0KCQkJCTwvdWw+DQoJCQk8L2xpPg0KCQkJPGxpPjxwPkZlYXR1cmVzOjwvcD4NCgkJCQk8dWw+DQoJCQkJCTxsaT48cD4tIGFkZGVkIE1MRSBzdXBwb3J0PC9wPjwvbGk+DQoJCQkJCTxsaT48cD4tIGFkZGVkIHBhcmFtICZxdW90O3Nob3dfY2xvY2smcXVvdDsgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIHRpbWUgZHJvcGRvd24gb2YgYmxvY2t0eXBlcyAmcXVvdDtkYXRlJnF1b3Q7IGluIGJhY2tlbmQ8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gYWRkZWQgcGFyYW0gJnF1b3Q7ZGF0ZV9mb3JtYXQmcXVvdDsgdG8gZm9ybWF0IHRpbWVzdGFtcCBvZiBibG9ja3R5cGVzICZxdW90O2RhdGUmcXVvdDsgaW4gZnJvbnRlbmQ8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gYWRkZWQgcGFyYW0gJnF1b3Q7ZGVzY3JpcHRpb24mcXVvdDs8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gYWRkZWQgYnVsayBmdW5jdGlvbiB0byBzZXQgYWxsIHBhZ2VzIHRvIEFkdmFuY2VkQ29udGVudDwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSBhZGRlZCBjb21wYXRpYmlsaXR5IHdpdGgge2NvbnRlbnRfbW9kdWxlfSB0YWc8L3A+PC9saT4NCgkJCQk8L3VsPg0KCQkJPC9saT4NCgkJPC91bD4NCgk8L2xpPg0KCTxsaT48cD48c3Ryb25nPjAuMy40IChKdW5lIDIwMTApOjwvc3Ryb25nPjwvcD4NCgkJPHVsPg0KCQkJPGxpPjxwPkJ1Z2ZpeGVzOjwvcD4NCgkJCQk8dWw+DQoJCQkJCTxsaT48cD4tICM1MDQ1OiBXaGVuIHN3aXRjaGluZyBmcm9tIENvbnRlbnQgLT4gQWR2YW5jZWQgQ29udGVudCBsb3RzIG9mIFBIUCBlcnJvcnM8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gIzUwNTY6IHBhZ2VfdGFicyBub3Qgd29ya2luZyBmb3IgdXNlcnMgd2l0aG91dCBwZXJtaXNzaW9uICZxdW90O01hbmFnZSBBbGwgQ29udGVudCZxdW90OzwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSAjNTA3MzogaW5jb3JyZWN0IGRpc3BsYXkgb2YgZmlsZXMgd2hlbiBvcGVuaW5nIGZpbGVwaWNrZXI8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gZml4ZWQgbWlub3IgYnVnIHdoZXJlIHRoZSBvcHRpb24gJnF1b3Q7YWxsb3dfbm9uZSZxdW90OyBvZiBjb250ZW50IGJsb2NrcyBvZiB0eXBlIGltYWdlL2ZpbGUgd2FzIG5vdCBzaG93biB3aGVuIHRlbXBsYXRlIGhhcyBiZWVuIGVkaXRlZDwvcD48L2xpPg0KCQkJCTwvdWw+DQoJCQk8L2xpPg0KCQkJPGxpPjxwPkZlYXR1cmVzOjwvcD4NCgkJCQk8dWw+DQoJCQkJCTxsaT48cD4tIGFkZGVkIGZpbGVtYW5hZ2VtZW50IGFuZCB1cGxvYWQgZnVuY3Rpb25zIHRvIGNvbnRlbnQgYmxvY2tzIG9mIHR5cGUgaW1hZ2UvZmlsZTwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSBhZGRlZCBicmVhZGN1bWJzIHRvIGZpbGVwaWNrZXI8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gYWRtaW5zIG1heSBicm93c2UgdGhlIGVudGlyZSBkaXIgdHJlZSBpbiBmaWxlcGlja2VyIGZpbGUgYnJvd3NlciByZWdhcmRsZXNzIG9mIHRlbXBsYXRlIHBhcmFtczwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSBhZGRlZCBtaW1lIHR5cGUgY2hlY2tpbmcgdG8gZ2V0IGZpbGUgdHlwZTwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSBhZGRlZCByYXd1cmxlbmNvZGUgaW4gc3JjIGF0dHJpYnMgdG8gZGlzcGxheSBpbWFnZXMgd2l0aCB3ZWlyZCBmaWxlbmFtZXMuPC9wPjwvbGk+DQoJCQkJPC91bD4NCgkJCTwvbGk+DQoJCQk8bGk+PHA+bWlzY2VsbGFuZW91czo8L3A+DQoJCQkJPHVsPg0KCQkJCQk8bGk+PHA+LSByZW1vdmVkIE9PUCBzdHVmZiAocHJpdmF0ZS9wdWJsaWMvcHJvdGVjdGVkKSB0byBnYWluIG1vcmUgY29tcGF0aWJpbGl0eSB3aXRoIFBIUDQ8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gY2hhbmdlZCBhamF4IGZ1bmN0aW9ucyB0byByZXR1cm4geG1sIHZhbHVlczwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSByZW1vdmVkIHVzYWdlIG9mIEltYWdlTWFuYWdlciBvbmNlIGFuZCBmb3IgYWxsLiAoY2F1c2VkIG9ubHkgdHJvdWJsZSk8L3A+PC9saT4NCgkJCQk8L3VsPg0KCQkJPC9saT4NCgkJPC91bD4NCgk8L2xpPg0KCTxsaT48cD48c3Ryb25nPjAuMy4zIChKdW5lIDIwMTApOjwvc3Ryb25nPjwvcD4NCgk8dWw+DQoJCTxsaT48cD5CdWdmaXhlczo8L3A+DQoJCQk8dWw+DQoJCQkJPGxpPjxwPi0gYWxpYXMgd2FzIG5vdCBhbHdheXMgY29udmVydGVkIHByb3Blcmx5PC9wPjwvbGk+DQoJCQkJPGxpPjxwPi0gdW5zdWJtaXR0ZWQgY29udGVudCBnb3QgbG9zdCBpZiBzd2l0Y2hpbmcgZnJvbSBDb250ZW50IHRvIEFkdmFuY2VkQ29udGVudDwvcD48L2xpPg0KCQkJPC91bD4NCgkJPC9saT4NCgkJPGxpPjxwPkZlYXR1cmVzOjwvcD4NCgkJCTx1bD4NCgkJCQk8bGk+PHA+LSBhZGRlZCBzdGFydC9lbmQgZGF0ZTwvcD48L2xpPg0KCQkJCTxsaT48cD4tIHJlbW92ZWQgdGltZXBpY2tlcjsgcmVwbGFjZWQgYnkgYSBzaW1wbGUgZHJvcGRvd248L3A+PC9saT4NCgkJCQk8bGk+PHA+LSBjb21wYXRpYmlsaXR5IHdpdGgge2NvbnRlbnRfaW1hZ2V9PC9wPjwvbGk+DQoJCQk8L3VsPg0KCQk8L2xpPg0KCTwvdWw+DQoJPGxpPjxwPjxzdHJvbmc+MC4zLjIgKEp1bmUgMjAxMCk6PC9zdHJvbmc+PC9wPg0KCQk8dWw+DQoJCQk8bGk+PHA+LSBmaXhlZCBidWcgd2hlcmUgY2hhbmdpbmcgYmFjayB0byBkZWZhdWx0IGNvbnRlbnQgdHlwZSBvciBjaGFuZ2luZyB0ZW1wbGF0ZSBjYXVzZWQgZmF0YWwgZXJyb3JzPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBmaXhlZCBhIGJ1ZyB3aXRoIHNtYXJ0eSBwcm9jZXNzaW5nIHdoZW4gc2F2aW5nIGEgcGFnZTwvcD48L2xpPg0KCQkJPGxpPjxwPi0gZml4ZWQgYSBidWcgd2l0aCBwcmV2aWV3IHRhYjwvcD48L2xpPg0KCQkJPGxpPjxwPi0gcmUtYWRkZWQgZXhwYW5kL2NvbGxhcHNlIGJ1dHRvbiB0byB0b2dnbGUgY29udGVudCBibG9ja3MgaW4gYmFja2VuZDwvcD48L2xpPg0KCQkJPGxpPjxwPi0gYWRkZWQgcGFyYW1zIGVkaXRvcl9ncm91cHMvZWRpdG9yX3VzZXJzIHRvIHNwZWNpZnkgY2VydGFpbiB1c2Vycy9ncm91cHMgdGhhdCBhcmUgYWxsb3dlZCB0byBlZGl0IGNlcnRhaW4gYmxvY2tzPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSByZW1vdmVkIHBhcmFtcyBzZWxlY3RlZC9jaGVja2VkOyB1c2UgcGFyYW0gZGVmYXVsdCBpbnN0ZWFkPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBibG9jayBpZHMgd2lsbCBiZSBjb252ZXJ0ZWQgZnJvbSBibG9jayBuYW1lIHVzaW5nIGNvcmUgZnVuY3Rpb24gbXVuZ2Vfc3RyaW5nX3RvX3VybCAodG8gcmVtb3ZlIHNwZWNpYWwgY2hhcnMsIHdoaXRlc3BhY2VzLCB1bWxhdXRzIGV0Yy4pPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBmaXhlZCBidWcgb2YgYmxvY2t0eXBlIGRyb3Bkb3duL3NlbGVjdF9tdWx0aXBsZSB3aGVyZSBmaXJzdCBpdGVtIGhhZCBhbiBlbXB0eSBsYWJlbCBpZiBvbmx5IHRoZSBwYXJhbSAmcXVvdDt2YWx1ZXMmcXVvdDsgaXMgdXNlZDwvcD48L2xpPg0KCQkJPGxpPjxwPi0gYWRkZWQgc29tZSB0ZW1wbGF0ZSB2YXJzIG9mIHRoZSBmcm9udGVuZCB0byBiZSBhbHNvIGFjY2Vzc2libGUgaW4gYmFja2VuZCAoZS5nLjogJHBhZ2VfYWxpYXMpPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbSAmcXVvdDthbGxvd19ub25lJnF1b3Q7IHRvIGFsbCBjb250ZW50IGJsb2NrIHR5cGVzIHRvIHNwZWNpZnkgaWYgdGhlIHByZWRlZmluZWQgZGVmYXVsdCB2YWx1ZSB3aWxsIGJlIHVzZWQgaWYgbm8gdmFsdWUgaXMgZW50ZXJlZDwvcD48L2xpPg0KCQkJPGxpPjxwPi0gZml4ZWQgYnVnIHdoZXJlIGVtcHR5IHZhbHVlcyB3ZXJlIG5ldmVyIGJlIHN0b3JlZDwvcD48L2xpPg0KCQkJPGxpPjxwPi0gZml4ZWQgYnVnIHdoZXJlIGRlZmF1bHQgdmFsdWUgaW4gZnJvbnRlbmQgd2FzIGlnbm9yZWQgaWYgdGhlICZxdW90O2FsbG93X25vbmUmcXVvdDsgcGFyYW0gd2FzIGNoYW5nZWQgYWZ0ZXIgYW4gZW1wdHkgdmFsdWUgaGFzIGJlZW4gc3RvcmVkPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbSAmcXVvdDtzb3J0YWJsZV9pdGVtcyZxdW90OyB0byBjcmVhdGUgYSBzb3J0YWJsZSBtdWx0aXBsZSBzZWxlY3QgbGlzdCAoc2VsZWN0IGxpc3Qgd2lsbCByZXN1bHQgaW4gYSB0YWJsZSB3aXRoIGNoZWNrYm94ZXM7IG9ubHkgb3JkZXIgb2Ygc2VsZWN0ZWQgaXRlbXMgd2lsbCBiZSBzdG9yZWQgYW5kIHNob3dlZCBhdCB0aGUgdG9wIG9mIHRoZSBsaXN0OyB1bnNlbGVjdGVkIGl0ZW1zIHdpbGwgYmUgYXBwZW5kZWQgaW4gdGhhdCBvcmRlciB0aGV5IGFyZSBwbGFjZWQgaW4gdGhlIHRlbXBsYXRlKTwvcD48L2xpPg0KCQk8L3VsPg0KCTwvbGk+DQoJPGxpPjxwPjxzdHJvbmc+MC4zLjEgKE1heSAyMDEwKTo8L3N0cm9uZz48L3A+DQoJCTx1bD4NCgkJCTxsaT48cD4tIHJlbW92ZWQgdGhlIHJlb3JkZXJpbmcgc3R1ZmYgZm9yIG5vdyAoY2F1c2VzIHRyb3VibGUgYXQgdGhpcyB0aW1lKTwvcD48L2xpPg0KCQkJPGxpPjxwPi0gcmVtb3ZlZCB0aGUgZGIgc3R1ZmYgKHBhcmFtcyBvZiBjb250ZW50IGJsb2NrcyB0aGF0IGFyZSBkZWZpbmVkIGluIHRlbXBsYXRlIHdvbiYjMDM5O3QgYmUgc2F2ZWQgaW4gbW9kdWxlIGRiIHRhYmxlIGFueW1vcmUgLT4gaG9wZWZ1bGx5IHNwZWVkIHVwIGxvYWRpbmcgdGltZSk8L3A+PC9saT4NCgkJCTxsaT48cD4tIGZpeGVkIGEgYnVnIHdpdGggZHVwbGljYXRlIGNvbnRlbnQgYmxvY2tzPC9wPjwvbGk+DQoJCTwvdWw+DQoJPC9saT4NCgk8bGk+DQoJCTxwPjxzdHJvbmc+QWR2YW5jZWRDb250ZW50IDAuMyAoTWF5IDIwMTApOjwvc3Ryb25nPjwvcD4NCgkJPHVsPg0KCQkJPGxpPjxwPi0gcmV3cml0ZSBjb2RlPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBidWdmaXhlczwvcD48L2xpPg0KCQkJPGxpPjxwPi0gcmVuYW1lZCB0byBBZHZhbmNlZENvbnRlbnQ8L3A+PC9saT4NCgkJCTxsaT48cD4tIHVzaW5nIHNlcGFyYXRlIG1vZHVsZSB0ZW1wbGF0ZSBub3cgdG8gZHNwbGF5IGNvbnRlbnQgYmxvY2tzPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSByZW1vdmVkIHBhZ2UgYWxpYXMgaW5oZXJpdGFuY2U8L3A+PC9saT4NCgkJPC91bD4NCgk8L2xpPg0KPC91bD4NCjx1bD4NCgk8bGk+PHA+PHN0cm9uZz5YQ29udGVudCBCRVRBIDMgKEFwcmlsIDIwMTAgLSBkaXNjb250aW51ZWQpOjwvc3Ryb25nPjwvcD4NCgkJPHVsPg0KCQkJPGxpPjxwPi0gTWFqb3IgQnVnZml4IChtaXNzaW5nICZxdW90OzsmcXVvdDsgYW5kIHN0cmFuZ2UgaW52aXNpYmxlIGludmFsaWQgY2hhcnMpPC9wPjwvbGk+DQoJCTwvdWw+DQoJPC9saT4NCgk8bGk+PHA+PHN0cm9uZz5YQ29udGVudCBCRVRBIDIgKEFwcmlsIDIwMTAgLSBkaXNjb250aW51ZWQpOjwvc3Ryb25nPjwvcD4NCgkJPHVsPg0KCQkJPGxpPjxwPi0gZml4ZWQgYSBidWcgd2l0aCBwYXJhbSAmcXVvdDtkZWxpbWl0ZXImcXVvdDs8L3A+PC9saT4NCgkJCTxsaT48cD4tIGZpeGVkIGEgYnVnIHdpdGggc21hcnR5IHByb2Nlc3Npbmc8L3A+PC9saT4NCgkJCTxsaT48cD4tIGFkZGVkIGluaGVyaXRhbmNlIG9mICZxdW90O1Nob3cgbG9naW4gZm9ybSZxdW90OzwvcD48L2xpPg0KCQkJPGxpPjxwPi0gYWRkZWQgaW5oZXJpdGFuY2Ugb2YgcGFnZSBhbGlhcyB0byBhZGQgaXQgYXMgcHJlZmZpeDsgc28gaWYgeW91IGhhdmUgYSBwYWdlIGNhbGxlZCAmcXVvdDttZW1iZXJzJnF1b3Q7IGFuZCBzZWxlY3QgZm9yIGVhY2ggY2hpbGQgcGFnZSAmcXVvdDtpbmhlcml0IHBhZ2UgYWxpYXMmcXVvdDsgYWxsIGNoaWxkIHBhZ2VzIGFsaWFzZXMgd2lsbCBzdGFydCB3aXRoICZxdW90O21lbWJlcnNfJnF1b3Q7OyBtYWtlcyBmaWx0ZXJpbmcgb2YgbWVudSBlbnRyaWVzIHdpdGggTWVudU1hbmFnZXIgcGFyYW0gJnF1b3Q7ZXhjbHVkZXByZWZmaXgmcXVvdDsgb3IgJnF1b3Q7aW5jbHVkZXByZWZmaXgmcXVvdDsgZWFzaWVyLjwvcD48L2xpPg0KCQkJPGxpPjxwPi0gbWlub3IgYnVnZml4ZXM8L3A+PC9saT4gDQoJCTwvdWw+DQoJPC9saT4NCgk8bGk+DQoJCTxwPjxzdHJvbmc+WENvbnRlbnQgQkVUQSAoQXByaWwgMjAxMCk6PC9zdHJvbmc+IGluaXRpYWwgcmVsZWFzZTwvcD4NCgkJPHVsPg0KCQkJPGxpPjxwPi0gY29udmVydGVkIHRoZSBzaW5nbGUgZmlsZSBpbnRvIGEgbW9kdWxlPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSByZW5hbWVkIHBhcmFtczsgc2VlIG1vZHVsZSBoZWxwIGZvciBtb3JlIGRldGFpbHM8L3A+PC9saT4NCgkJPC91bD4NCgk8L2xpPg0KPC91bD4NCjxwPjxzdHJvbmc+U2luZ2xlIGZpbGUgcmVsZWFzZXMgKGRpc2NvbnRpbnVlZCk8L3N0cm9uZz4uLi48L3A+DQo8dWw+DQoJPGxpPg0KCQk8cD48c3Ryb25nPjEuNCAoTWFyY2ggMjAxMCk6PC9zdHJvbmc+PC9wPg0KCQk8dWw+DQoJCQk8bGk+PHA+LSBjbGVhbnVwIGNvZGUgLSAoTmFOKTwvcD48L2xpPg0KCQkJPGxpPjxwPi0gbWlub3IgYnVnZml4ZXMgLSAoTmFOKTwvcD48L2xpPg0KCQkJPGxpPjxwPi0gYWRkZWQgcmVkaXJlY3QgcGFnZSBpZiBmZXUgaXMgbm90IGxvZ2dlZCBpbiAtIChOYU4pPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBhZGRlZCBpbmhlcml0YW5jZSBvZiBmZXVfYWNjZXNzIGFuZCByZWRpcmVjdF9wYWdlIC0gKE5hTik8L3A+PC9saT4NCgkJCTxsaT48cD4tIGFkZGVkIHBhcmFtIGZldV9hY2Nlc3MgLSAoTmFOKTwvcD48L2xpPg0KCQkJPGxpPjxwPi0gYWRkZWQgcGFyYW0gZmV1X2FjdGlvbiAtIChOYU4pPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbSByZWRpcmVjdF9wYWdlIC0gKE5hTik8L3A+PC9saT4NCgkJCTxsaT48cD4tIGFkZGVkIHBhcmFtIGJsb2NrX29ubHkgLSAoTmFOKTwvcD48L2xpPg0KCQkJPGxpPjxwPi0gYWRkZWQgc21hcnR5IGxvZ2ljIGluIGJhY2tlbmQgLSAoSmVyZW15QmFzcyk8L3A+PC9saT4NCgkJCTxsaT48cD4tIGFkZGVkIHBhcmFtIHN0eWxlIC0gKEplcmVteUJhc3MpPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbSBmaWx0ZXIgKGZpbHRlcmluZyBpbWFnZXMgaW4gYmFja2VuZCkgLSAoSmVyZW15QmFzcyk8L3A+PC9saT4NCgkJCTxsaT48cD4tIGFkZGVkIHBhcmFtIEltZ01vZGUgKGRyb3Bkb3duIG9yIEltYWdlTWFuYWdlcikgLSAoSmVyZW15QmFzcyk8L3A+PC9saT4NCgkJCTxsaT48cD4tIGFkZGVkIHBhcmFtIHNtYXJ0eU9uIChmb3IgcHJvY2Vzc2luZyBzbWFydHkgdmFycyBvZiB0aGUgdGVtcGF0ZSBpbiBiYWNrZW5kKSAtIChKZXJlbXlCYXNzKTwvcD48L2xpPg0KCQk8L3VsPg0KCTwvbGk+DQoJPGxpPjxwPjxzdHJvbmc+MS4zIChBcHJpbCAyMDA5KTo8L3N0cm9uZz48L3A+DQoJCTx1bD4NCgkJCTxsaT48cD4tIENNU21zIDEuNi4qIHJlYWR5IC0gKE5hTik8L3A+PC9saT4NCgkJCTxsaT48cD4tIGFkZGVkIGZldSBhY2Nlc3Mgb3B0aW9uIC0gKE5hTik8L3A+PC9saT4NCgkJPC91bD4NCgk8L2xpPg0KCTxsaT4NCgkJPHA+PHN0cm9uZz4xLjIgKE1hcmNoIDIwMDkpOjwvc3Ryb25nPiBpbml0aWFsIHJlbGVhc2U8L3A+DQoJCTx1bD4NCgkJCTxsaT48cD4tIEEgc2luZ2xlIGZpbGUgQ29udGVudDIuaW5jLnBocCB0aGF0IG5lZWRzIHRvIGJlIHBhY2VkIGluIGxpYi9jbGFzc2VzL2NvbnRlbnR0eXBlcy48L3A+PC9saT4NCgkJCTxsaT48cD4tIGxheW91dC9vcHRpb25zIG9mIGJhY2tlbmQgcGFuZWwgY2FuIGJlIGNvbnRyb2xlZCBieSBhZGRpdGlvbmFsIHNtYXJ0eSBwYXJhbXMgaW4gdGhlIHRlbXBsYXRlOyBpbnRlZ3JhdGVkIHRoZSB7Y29udGVudF9pbWFnZX0gdGFnIC0gKG1vZCBieSBOYU4pPC9wPjwvbGk+DQoJCTwvdWw+DQoJPC9saT4NCjwvdWw+DQo8YnIgLz4nOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My41NjMyMzg0MDEwMTUxNDk0MDAuMTIyNjMzNDc1MS4xMjg5OTAxMjU5LjEyODk5MjI2MTUuODQnOwokbGFuZ1sncWNhJ10gPSAnUDAtMjAwNzY4NjkyMC0xMjUxMTkwODE1MDI3JzsKJGxhbmdbJ3V0bXonXSA9ICcxNTY4NjEzNTMuMTI4OTkwMTI4NC44My41LnV0bWNzcj1mZWVkYnVybmVyfHV0bWNjbj1GZWVkOiBjbXNtYWRlc2ltcGxlL2Jsb2cgKENNUyBNYWRlIFNpbXBsZSl8dXRtY21kPWZlZWQnOwokbGFuZ1sndXRtYyddID0gJzE1Njg2MTM1Myc7CiRsYW5nWyd1dG1iJ10gPSAnMTU2ODYxMzUzJzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/ja_JP.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ0FkdmFuY2VkQ29udGVudCddID0gJ0FkdmFuY2VkIENvbnRlbnQnOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnTW9kdWxlIEFkdmFuY2VkQ29udGVudCAlcyBpbnN0YWxsZWQnOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bGUgQWR2YW5jZWRDb250ZW50ICVzIHVuaW5zdGFsbGVkJzsKJGxhbmdbJ3VwZ3JhZGVkJ10gPSAnTW9kdWxlIEFkdmFuY2VkQ29udGVudCB1cGdyYWRlZCB0byAlcyc7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ01vZHVsZSBBZHZhbmNlZENvbnRlbnQgJXMgaW5zdGFsbGVkLic7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnTW9kdWxlIEFkdmFuY2VkQ29udGVudCAlcyB1bmluc3RhbGxlZC4nOwokbGFuZ1snY29uZmlybXVuaW5zdGFsbCddID0gJ0RvIHlvdSByZWFsbHkgd2FudCB1bmluc3RhbGwgdGhlIG1vZHVsZSBBZHZhbmNlZENvbnRlbnQ/JzsKJGxhbmdbJ2Vycm9yX2R1cGxpY2F0ZWNvbnRlbnQnXSA9ICc8ZW0+PHN0cm9uZz7ms6jmhI86PC9zdHJvbmc+IHtjb250ZW50IGJsb2NrPVwnJXNcJyAuLi4gfSBpcyBhbWJpZ291cy4gQmxvY2sgbmFtZXMgbXVzdCBiZSB1bmlxdWUuIDxiciAvPlRoaXMgYmxvY2sgaXMgZGlzYWJsZWQuIE9ubHkgZmlyc3QgYmxvY2sgd2lsbCBiZSBzaG93bi4gQ2hlY2sgeW91ciBwYWdlIHRlbXBsYXRlIGFuZCBjaG9zZSBhIGRpZmZlcmVudCB2YWx1ZSBvZiBwYXJhbSBcJ2Jsb2NrXCcuPC9lbT4nOwokbGFuZ1snbm90aWNlX2R1cGxpY2F0ZWNvbnRlbnQnXSA9ICc8ZW0+PHN0cm9uZz7ms6jmhI86PC9zdHJvbmc+IFRoaXMgYmxvY2sgaXMgdXNlZCBtdWx0aXBsZSB0aW1lcyBpbiB0ZW1wbGF0ZS4gWW91IG9ubHkgc2VlIHRoZSBmaXJzdCBibG9jayBoZXJlLjwvZW0+JzsKJGxhbmdbJ2Vycm9yX2Jhc2ljYXR0cmliJ10gPSAnPGVtPjxzdHJvbmc+5rOo5oSPOjwvc3Ryb25nPiBDYW5ub3QgdXNlIGJhc2ljIGNvbnRlbnQgcHJvcGVydHkgbmFtZSBcJyVzXCcgYXMgdmFsdWUgb2YgcGFyYW0gXCdibG9ja1wnLiA8YnIgLz5UaGlzIGJsb2NrIGlzIGRpc2FibGVkLiBDaGVjayB5b3VyIHBhZ2UgdGVtcGxhdGUgYW5kIGNob3NlIGEgZGlmZmVyZW50IHZhbHVlIG9mIHBhcmFtIFwnYmxvY2tcJy48L2VtPic7CiRsYW5nWydlcnJvcl9leHBpcmVkYXRlJ10gPSAnRW5kIGRhdGUgbXVzdCBiZSBsYXRlciB0aGFuIHN0YXJ0IGRhdGUuJzsKJGxhbmdbJ3lvdWFyZWludGV4dCddID0gJ+OCq+ODrOODs+ODiOODh+OCo+ODrOOCr+ODiOODqic7CiRsYW5nWydkaW1lbnNpb25zJ10gPSAn55S75YOP44K144Kk44K6JzsKJGxhbmdbJ3NpemUnXSA9ICfjg5XjgqHjgqTjg6vjgrXjgqTjgronOwokbGFuZ1snaW5oZXJpdF9mcm9tX3BhcmVudCddID0gJ0luaGVyaXQgZnJvbSBwYXJlbnQnOwokbGFuZ1snbm9uZSddID0gJ+OBquOBlyc7CiRsYW5nWydpbnZhbGlkJ10gPSAn54Sh5Yq5JzsKJGxhbmdbJ2ludmFsaWRfYmxvY2t0eXBlJ10gPSAnPGVtPjxzdHJvbmc+Tm90aWNlOjwvc3Ryb25nPiBJbnZhbGlkIHZhbHVlIFwnJXNcJyBvZiBwYXJhbSBibG9ja190eXBlIGluIGJsb2NrIFwnJXNcJy48YnIgLz5DaGVjayB5b3VyIHBhZ2UgdGVtcGxhdGUuPC9lbT4nOwokbGFuZ1sneWVzJ10gPSAn44Gv44GEJzsKJGxhbmdbJ25vJ10gPSAn44GE44GE44GIJzsKJGxhbmdbJ2Zyb250ZW5kYWNjZXNzJ10gPSAnRnJvbnRlbmQgYWNjZXNzJzsKJGxhbmdbJ3JlZGlyZWN0cGFnZSddID0gJ1JlZGlyZWN0IFBhZ2UgaWYgbm8gYWNjZXNzJzsKJGxhbmdbJ3Nob3dsb2dpbmZvcm0nXSA9ICdTaG93IGxvZ2luIGZvcm0nOwokbGFuZ1sncmVnaXN0ZXJlZHVzZXJzJ10gPSAnUmVnaXN0ZXJlZCB1c2VycyBvbmx5JzsKJGxhbmdbJ2Jsb2NrJ10gPSAn44OW44Ot44OD44KvJzsKJGxhbmdbJ3VzZWV4cGlyZWRhdGUnXSA9ICdVc2UgZXhwaXJlIGRhdGUnOwokbGFuZ1snc3RhcnRkYXRlJ10gPSAn6ZaL5aeL5pelJzsKJGxhbmdbJ2VuZGRhdGUnXSA9ICfntYLkuobml6UnOwokbGFuZ1snYmxvY2tjb250ZW50J10gPSAn44OW44Ot44OD44Kv44O744Kz44Oz44OG44Oz44OEJzsKJGxhbmdbJ3NldHBhZ2VpbmFjdGl2ZSddID0gJ1NldCBQYWdlIHRvIEluYWN0aXZlJzsKJGxhbmdbJ2RlbGV0ZXBhZ2UnXSA9ICfliYrpmaTjg5rjg7zjgrgnOwokbGFuZ1sndW5pbnN0YWxsYWN0aW9uJ10gPSAnVW5pbnN0YWxsIGFjdGlvbic7CiRsYW5nWydzZXRjb250ZW50MSddID0gJ1NldCBhbGwgUGFnZXMgdG8gdHlwZSBDb250ZW50JzsKJGxhbmdbJ3NldGNvbnRlbnQyJ10gPSAnU2V0IGFsbCBQYWdlcyB0byB0eXBlIENvbnRlbnQgYW5kIHJlbW92ZSBhZGRpdGlvbmFsIGNvbnRlbnQgYmxvY2tzJzsKJGxhbmdbJ3ByZWZzdXBkYXRlZCddID0gJ1ByZWZlcmVuY2VzIHVwZGF0ZWQnOwokbGFuZ1snZmlsZW9wZXJhdGlvbnMnXSA9ICdGaWxlIG9wZXJhdGlvbnMnOwokbGFuZ1sndXBsb2FkbmV3ZmlsZSddID0gJ1VwbG9hZCBhIG5ldyBmaWxlJzsKJGxhbmdbJ2NyZWF0ZW5ld2RpciddID0gJ0NyZWF0ZSBhIG5ldyBkaXJlY3RvcnknOwokbGFuZ1sndXBsb2FkZmlsZSddID0gJ+OCouODg+ODl+ODreODvOODiSc7CiRsYW5nWydjcmVhdGVkaXInXSA9ICfkvZzmiJAnOwokbGFuZ1snc3VjY2VzcyddID0gJ+OCquODvOOCseODvCc7CiRsYW5nWydlcnJvciddID0gJ+OCqOODqeODvCc7CiRsYW5nWydmaWxldXBsb2FkZWQnXSA9ICdGaWxlIFwnJXNcJyB1cGxvYWRlZCc7CiRsYW5nWydub2Rpcm5hbWUnXSA9ICdObyBkaXJuYW1lIHByb3ZpZGVkJzsKJGxhbmdbJ2RpcmV4aXN0cyddID0gJ0Rpcm5hbWUgXCclc1wnIGFscmVhZHkgZXhpc3RzJzsKJGxhbmdbJ25ld2RpcmNyZWF0ZWQnXSA9ICdOZXcgZGlyIFwnJXNcJyBzdWNjZXNzZnVsbHkgY3JlYXRlZCc7CiRsYW5nWyduZXdkaXJmYWlsZWQnXSA9ICdBbiBlcnJvciBvY2N1cmVkIHRyeWluZyB0byBjcmVhdGUgZGlyIFwnJXNcJyc7CiRsYW5nWydub2ZpbGUnXSA9ICdObyBmaWxlIHdhcyB1cGxvYWRlZCc7CiRsYW5nWydmaWxldG9vYmlnJ10gPSAnVXBsb2FkZWQgZmlsZSBcJyVzXCcgaXMgdG9vIGJpZyc7CiRsYW5nWydjb250YWluc2lsbGVnYWxjaGFycyddID0gJ0ZpbGVuYW1lIFwnJXNcJyBjb250YWlucyBvbmUgb3IgbW9yZSBpbGxlZ2FsIGNoYXJhY3RlcnMgKFwnLCIsKywqLFxcLC8sJiwkKSc7CiRsYW5nWyd1cGxvYWRmYWlsZWQnXSA9ICdFcnJvciBtb3ZpbmcgdXBsb2FkZWQgZmlsZSBcJyVzXCcgaW50byBwbGFjZSc7CiRsYW5nWydjb25maXJtZGVsZXRlJ10gPSAnQXJlIHlvdSBzdXJlIHRvIGRlbGV0ZSB0aGUgZmlsZSBcXFwnJXNcXFwnPyc7CiRsYW5nWydkZWxldGVmaWxlc3VjY2VzcyddID0gJ0ZpbGUgXCclc1wnIHdhcyBzdWNjZXNzZnVsbHkgZGVsZXRlZCc7CiRsYW5nWydkZWxldGVmaWxlZmFpbGVkJ10gPSAnRmlsZSBcJyVzXCcgY291bGQgbm90IGJlIGRlbGV0ZWQnOwokbGFuZ1snZGVsZXRlc3ViZGlyZmFpbGVkJ10gPSAnRGlyIFwnJXNcJyBjb3VsZCBub3QgYmUgZGVsZXRlZCc7CiRsYW5nWydkZWxldGVzdWJkaXJzdWNjZXNzJ10gPSAnRGlyIFwnJXNcJyB3YXMgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQnOwokbGFuZ1snY29uZmlybWRlbGV0ZWRpciddID0gJ0FyZSB5b3Ugc3VyZSB0byBkZWxldGUgdGhlIGRpcmVjdG9yeSBcXFwnJXNcXFwnPyc7CiRsYW5nWydkZWxldGVkaXInXSA9ICdEZWxldGUgZW1wdHkgc3ViZGlyJzsKJGxhbmdbJ2RlbGV0ZWZpbGUnXSA9ICfjg5XjgqHjgqTjg6vliYrpmaQnOwokbGFuZ1sncmVzdHJpY3RkaXJzJ10gPSAnUmVzdHJpY3QgdXNlclwncyBkaXIgYWNjZXNzJzsKJGxhbmdbJ3Nob3dmaWxlbWFuYWdlbWVudCddID0gJ1Nob3cgZmlsZW1hbmFnZW1lbnQgb3B0aW9ucyc7CiRsYW5nWydzaG93dGh1bWJuYWlsZmlsZXMnXSA9ICdTaG93IHRodW1ibmFpbHMnOwokbGFuZ1snYWxsb3dzY2FsaW5nJ10gPSAnQWxsb3cgb24tdGhlLWZseSByZXNpemluZyBvZiB1cGxvYWRlZCBpbWFnZXMnOwokbGFuZ1snc2NhbGluZ3dpZHRoJ10gPSAnU2NhbGluZyB3aWR0aCc7CiRsYW5nWydzY2FsaW5naGVpZ2h0J10gPSAnU2NhbGluZyBoZWlnaHQnOwokbGFuZ1snZGVmYXVsdGRpbWVuc2lvbnMnXSA9ICdEZWZhdWx0IGRpbWVuc2lvbnMnOwokbGFuZ1snYXV0byddID0gJ+iHquWLlSc7CiRsYW5nWydyZWxhdGl2ZXVybHMnXSA9ICdSZWxhdGl2ZSB1cmxzJzsKJGxhbmdbJ2ZpbGVwaWNrZXJzdHlsZSddID0gJ0ZpbGVwaWNrZXIgc3R5bGUnOwokbGFuZ1snZmlsZXBpY2tlcnNpemUnXSA9ICdGaWxlcGlja2VyIHNpemUnOwokbGFuZ1snZmlsZW5hbWVvbmx5J10gPSAnU2hvdyBmaWxlbmFtZXMnOwokbGFuZ1sndGh1bWJuYWlsc29ubHknXSA9ICdTaG93IHRodW1ibmFpbHMnOwokbGFuZ1snc2hvd3RodW1ibmFpbGZpbGVzdGV4dCddID0gJ1Nob3cgdGh1bWJuYWlsLWZpbGVzIGFzIHJlZ3VsYXIgZmlsZXMnOwokbGFuZ1snZmlsZW5hbWVhbmR0aHVtYm5haWxzJ10gPSAnU2hvdyBib3RoIGZpbGVuYW1lcyBhbmQgdGh1bWJuYWlscyc7CiRsYW5nWydtYWtldGh1bWJuYWlsJ10gPSAnQ3JlYXRlIHRodW1ibmFpbHMnOwokbGFuZ1snZmlsZXBpY2tlcnNldHRpbmdzJ10gPSAnRmlsZVBpY2tlciBzZXR0aW5ncyc7CiRsYW5nWydyZXNpemV0byddID0gJ1Jlc2l6ZSBpbWFnZSB0byc7CiRsYW5nWydrZWVwYXNwZWN0cmF0aW8nXSA9ICdLZWVwIGFzcGVjdCByYXRpbyc7CiRsYW5nWydhbGxvd3Vwc2NhbGluZyddID0gJ0FsbG93IHVwc2NhbGluZyc7CiRsYW5nWydkZWNpbWFsZGVsaW1pdGVyJ10gPSAnLic7CiRsYW5nWyd0aG91c2FuZGRlbGltaXRlciddID0gJywnOwokbGFuZ1snZGlybm90Zm91bmQnXSA9ICdEaXJlY3RvcnkgXCclc1wnIG5vdCBmb3VuZCEnOwokbGFuZ1snc2VsZWN0aW1hZ2UnXSA9ICdCcm93c2UgaW1hZ2VzJzsKJGxhbmdbJ3NlbGVjdGZpbGUnXSA9ICdCcm93c2UgZmlsZXMnOwokbGFuZ1snZGVsZXRlcGFnZXMnXSA9ICdEZWxldGUgYWxsIHBhZ2VzIG9mIHR5cGUgQWR2YW5jZWRDb250ZW50JzsKJGxhbmdbJ3VzZW1pbWV0eXBlJ10gPSAnVXNlIG1pbWUtdHlwZSB0byBnZXQgZmlsZSB0eXBlJzsKJGxhbmdbJ2ltcG9ydHBhZ2VzJ10gPSAnU2V0IGFsbCBQYWdlcyBvZiB0eXBlIGNvbnRlbnQgdG8gdHlwZSBBZHZhbmNlZENvbnRlbnQuJzsKJGxhbmdbJ3BhZ2VzaW1wb3J0ZWQnXSA9ICdBbGwgY29udGVudCBwYWdlcyBzZXQgdG8gQWR2YW5jZWRDb250ZW50Lic7CiRsYW5nWydjb25maXJtaW1wb3J0J10gPSAnRG8geW91IHJlYWxseSB3YW50IHRvIGNoYW5nZSB0aGUgY29udGVudCB0eXBlIG9mIGFsbCBjb250ZW50IHBhZ2VzPyc7CiRsYW5nWydub21pbWV0eXBlJ10gPSAnTm8gbWltZS10eXBlIGZ1bmN0aW9uIGF2YWlsYWJsZSBvciBub3QgY29uZmlndXJlZCBwcm9wZXJseS4gVGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkLic7CiRsYW5nWyd0b2dnbGVfbWVzc2FnZSddID0gJ0hpZGUgdGhpcyBtZXNzYWdlJzsKJGxhbmdbJ2NvbnRlbnRzZXR0aW5ncyddID0gJ0RlZmF1bHQgQWR2YW5jZWRDb250ZW50IHNldHRpbmdzJzsKJGxhbmdbJ3JlZGlyZWN0cGFyYW1zJ10gPSAnVVJMIHBhcmFtcyB0byBhcHBlbmQgd2hlbiByZWRpcmVjdGluZyc7CiRsYW5nWydldmFsdWF0ZXNtYXJ0eSddID0gJ1VzZSBzbWFydHkgdG8gcHJvY2VzcyB0aGUgcGFyYW1zJzsKJGxhbmdbJ25vaW1hZ2VmaWxlJ10gPSAnXCclc1wnIGlzIG5vdCBhbiBpbWFnZSBmaWxlJzsKJGxhbmdbJ2ZpbGV0eXBlbm90YWxsb3dlZCddID0gJ0ZpbGV0eXBlIFwnJXNcJyBpcyBub3QgYWxsb3dlZCc7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjEwMjU5MTU3MzAuMTI4Mzc4Mzk4Ni4xMjgzNzgzOTg2LjEyODM3ODM5ODYuMSc7CiRsYW5nWyd1dG1iJ10gPSAnMTU2ODYxMzUzLjEuMTAuMTI4Mzc4Mzk4Nic7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKJGxhbmdbJ3V0bXonXSA9ICcxNTY4NjEzNTMuMTI4Mzc4Mzk4Ni4xLjEudXRtY3NyPShkaXJlY3QpfHV0bWNjbj0oZGlyZWN0KXx1dG1jbWQ9KG5vbmUpJzsKJGxhbmdbJ3FjYSddID0gJ1AwLTQ5NDk1ODE5NC0xMjgzNzgzOTg2OTA2JzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nb_NO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ0FkdmFuY2VkQ29udGVudCddID0gJ0FkdmFuY2VkIENvbnRlbnQnOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnTW9kdWxlIEFkdmFuY2VkQ29udGVudCAlcyBpbnN0YWxsZWQnOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bGUgQWR2YW5jZWRDb250ZW50ICVzIHVuaW5zdGFsbGVkJzsKJGxhbmdbJ3VwZ3JhZGVkJ10gPSAnTW9kdWxlIEFkdmFuY2VkQ29udGVudCB1cGdyYWRlZCB0byAlcyc7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ01vZHVsZSBBZHZhbmNlZENvbnRlbnQgJXMgaW5zdGFsbGVkLic7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnTW9kdWxlIEFkdmFuY2VkQ29udGVudCAlcyB1bmluc3RhbGxlZC4nOwokbGFuZ1snY29uZmlybXVuaW5zdGFsbCddID0gJ0RvIHlvdSByZWFsbHkgd2FudCB1bmluc3RhbGwgdGhlIG1vZHVsZSBBZHZhbmNlZENvbnRlbnQ/JzsKJGxhbmdbJ2Vycm9yX2R1cGxpY2F0ZWNvbnRlbnQnXSA9ICc8ZW0+PHN0cm9uZz5Ob3RpY2U6PC9zdHJvbmc+IHtjb250ZW50IGJsb2NrPSYjMDM5OyVzJiMwMzk7IC4uLiB9IGlzIGFtYmlnb3VzLiBCbG9jayBuYW1lcyBtdXN0IGJlIHVuaXF1ZS4gPGJyIC8+VGhpcyBibG9jayBpcyBkaXNhYmxlZC4gT25seSBmaXJzdCBibG9jayB3aWxsIGJlIHNob3duLiBDaGVjayB5b3VyIHBhZ2UgdGVtcGxhdGUgYW5kIGNob3NlIGEgZGlmZmVyZW50IHZhbHVlIG9mIHBhcmFtICYjMDM5O2Jsb2NrJiMwMzk7LjwvZW0+JzsKJGxhbmdbJ25vdGljZV9kdXBsaWNhdGVjb250ZW50J10gPSAnPGVtPjxzdHJvbmc+Tm90aWNlOjwvc3Ryb25nPiBUaGlzIGJsb2NrIGlzIHVzZWQgbXVsdGlwbGUgdGltZXMgaW4gdGVtcGxhdGUuIFlvdSBvbmx5IHNlZSB0aGUgZmlyc3QgYmxvY2sgaGVyZS48L2VtPic7CiRsYW5nWydlcnJvcl9iYXNpY2F0dHJpYiddID0gJzxlbT48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz4gQ2Fubm90IHVzZSBiYXNpYyBjb250ZW50IHByb3BlcnR5IG5hbWUgJiMwMzk7JXMmIzAzOTsgYXMgdmFsdWUgb2YgcGFyYW0gJiMwMzk7YmxvY2smIzAzOTsuIDxiciAvPlRoaXMgYmxvY2sgaXMgZGlzYWJsZWQuIENoZWNrIHlvdXIgcGFnZSB0ZW1wbGF0ZSBhbmQgY2hvc2UgYSBkaWZmZXJlbnQgdmFsdWUgb2YgcGFyYW0gJiMwMzk7YmxvY2smIzAzOTsuPC9lbT4nOwokbGFuZ1snZXJyb3JfZXhwaXJlZGF0ZSddID0gJ0VuZCBkYXRlIG11c3QgYmUgbGF0ZXIgdGhhbiBzdGFydCBkYXRlLic7CiRsYW5nWyd5b3VhcmVpbnRleHQnXSA9ICdDdXJyZW50IGRpcmVjdG9yeSc7CiRsYW5nWydkaW1lbnNpb25zJ10gPSAnSW1hZ2VzaXplJzsKJGxhbmdbJ3NpemUnXSA9ICdGaWxlc2l6ZSc7CiRsYW5nWydpbmhlcml0X2Zyb21fcGFyZW50J10gPSAnSW5oZXJpdCBmcm9tIHBhcmVudCc7CiRsYW5nWydub25lJ10gPSAnbm9uZSc7CiRsYW5nWydpbnZhbGlkJ10gPSAnaW52YWxpZCc7CiRsYW5nWyd5ZXMnXSA9ICdZZXMnOwokbGFuZ1snbm8nXSA9ICdObyc7CiRsYW5nWydmcm9udGVuZGFjY2VzcyddID0gJ0Zyb250ZW5kIGFjY2Vzcyc7CiRsYW5nWydyZWRpcmVjdHBhZ2UnXSA9ICdSZWRpcmVjdCBQYWdlIGlmIG5vIGFjY2Vzcyc7CiRsYW5nWydzaG93bG9naW5mb3JtJ10gPSAnU2hvdyBsb2dpbiBmb3JtJzsKJGxhbmdbJ3JlZ2lzdGVyZWR1c2VycyddID0gJ1JlZ2lzdGVyZWQgdXNlcnMgb25seSc7CiRsYW5nWydibG9jayddID0gJ0Jsb2NrJzsKJGxhbmdbJ3VzZWV4cGlyZWRhdGUnXSA9ICdVc2UgZXhwaXJlIGRhdGUnOwokbGFuZ1snc3RhcnRkYXRlJ10gPSAnU3RhcnQgRGF0ZSc7CiRsYW5nWydlbmRkYXRlJ10gPSAnRW5kIERhdGUnOwokbGFuZ1snYmxvY2tjb250ZW50J10gPSAnQmxvY2sgQ29udGVudCc7CiRsYW5nWydzZXRwYWdlaW5hY3RpdmUnXSA9ICdTZXQgUGFnZSB0byBJbmFjdGl2ZSc7CiRsYW5nWydkZWxldGVwYWdlJ10gPSAnRGVsZXRlIFBhZ2UnOwokbGFuZ1sndW5pbnN0YWxsYWN0aW9uJ10gPSAnVW5pbnN0YWxsIGFjdGlvbic7CiRsYW5nWydzZXRjb250ZW50MSddID0gJ1NldCBhbGwgUGFnZXMgdG8gdHlwZSBDb250ZW50JzsKJGxhbmdbJ3NldGNvbnRlbnQyJ10gPSAnU2V0IGFsbCBQYWdlcyB0byB0eXBlIENvbnRlbnQgYW5kIHJlbW92ZSBhZGRpdGlvbmFsIGNvbnRlbnQgYmxvY2tzJzsKJGxhbmdbJ3ByZWZzdXBkYXRlZCddID0gJ1ByZWZlcmVuY2VzIHVwZGF0ZWQnOwokbGFuZ1snZmlsZW9wZXJhdGlvbnMnXSA9ICdGaWxlIG9wZXJhdGlvbnMnOwokbGFuZ1sndXBsb2FkbmV3ZmlsZSddID0gJ1VwbG9hZCBhIG5ldyBmaWxlJzsKJGxhbmdbJ2NyZWF0ZW5ld2RpciddID0gJ0NyZWF0ZSBhIG5ldyBkaXJlY3RvcnknOwokbGFuZ1sndXBsb2FkZmlsZSddID0gJ1VwbG9hZCc7CiRsYW5nWydjcmVhdGVkaXInXSA9ICdDcmVhdGUnOwokbGFuZ1snc3VjY2VzcyddID0gJ09rJzsKJGxhbmdbJ2Vycm9yJ10gPSAnRXJyb3InOwokbGFuZ1snZmlsZXVwbG9hZGVkJ10gPSAnRmlsZSB1cGxvYWRlZCc7CiRsYW5nWydub2Rpcm5hbWUnXSA9ICdObyBkaXJuYW1lIHByb3ZpZGVkJzsKJGxhbmdbJ2RpcmV4aXN0cyddID0gJ0Rpcm5hbWUgYWxyZWFkeSBleGlzdHMnOwokbGFuZ1snbmV3ZGlyY3JlYXRlZCddID0gJ05ldyBkaXIgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQnOwokbGFuZ1snbmV3ZGlyZmFpbGVkJ10gPSAnQW4gZXJyb3Igb2NjdXJlZCB0cnlpbmcgdG8gY3JlYXRlIGRpcic7CiRsYW5nWydub2ZpbGUnXSA9ICdObyBmaWxlIHdhcyB1cGxvYWRlZCc7CiRsYW5nWydmaWxldG9vYmlnJ10gPSAnVXBsb2FkZWQgZmlsZSBpcyB0b28gYmlnJzsKJGxhbmdbJ2NvbnRhaW5zaWxsZWdhbGNoYXJzJ10gPSAnRmlsZW5hbWUgY29udGFpbnMgb25lIG9yIG1vcmUgaWxsZWdhbCBjaGFyYWN0ZXJzICgmIzAzOTssJnF1b3Q7LCssKixcLC8sJmFtcDssJCknOwokbGFuZ1sndXBsb2FkZmFpbGVkJ10gPSAnRXJyb3IgbW92aW5nIHVwbG9hZGVkIGZpbGUgaW50byBwbGFjZSc7CiRsYW5nWydjb25maXJtZGVsZXRlJ10gPSAnQXJlIHlvdSBzdXJlIHRvIGRlbGV0ZSB0aGUgZmlsZSAlcz8nOwokbGFuZ1snZGVsZXRlZmlsZXN1Y2Nlc3MnXSA9ICd3YXMgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQnOwokbGFuZ1snZGVsZXRlZmlsZWZhaWxlZCddID0gJ2NvdWxkIG5vdCBiZSBkZWxldGVkJzsKJGxhbmdbJ2RlbGV0ZXN1YmRpcmZhaWxlZCddID0gJ2NvdWxkIG5vdCBiZSBkZWxldGVkJzsKJGxhbmdbJ2RlbGV0ZXN1YmRpcnN1Y2Nlc3MnXSA9ICd3YXMgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQnOwokbGFuZ1snY29uZmlybWRlbGV0ZWRpciddID0gJ0FyZSB5b3Ugc3VyZSB0byBkZWxldGUgdGhlIGRpcmVjdG9yeSAlcz8nOwokbGFuZ1snZGVsZXRlZGlyJ10gPSAnRGVsZXRlIGVtcHR5IHN1YmRpcic7CiRsYW5nWydkZWxldGVmaWxlJ10gPSAnRGVsZXRlIEZpbGUnOwokbGFuZ1sncmVzdHJpY3RkaXJzJ10gPSAnUmVzdHJpY3QgdXNlciYjMDM5O3MgZGlyIGFjY2Vzcyc7CiRsYW5nWydzaG93ZmlsZW1hbmFnZW1lbnQnXSA9ICdTaG93IGZpbGVtYW5hZ2VtZW50IG9wdGlvbnMnOwokbGFuZ1snc2hvd3RodW1ibmFpbGZpbGVzJ10gPSAnU2hvdyB0aHVtYm5haWxzJzsKJGxhbmdbJ2FsbG93c2NhbGluZyddID0gJ0FsbG93IG9uLXRoZS1mbHkgcmVzaXppbmcgb2YgdXBsb2FkZWQgaW1hZ2VzJzsKJGxhbmdbJ3NjYWxpbmd3aWR0aCddID0gJ1NjYWxpbmcgd2lkdGgnOwokbGFuZ1snc2NhbGluZ2hlaWdodCddID0gJ1NjYWxpbmcgaGVpZ2h0JzsKJGxhbmdbJ2RlZmF1bHRkaW1lbnNpb25zJ10gPSAnRGVmYXVsdCBkaW1lbnNpb25zJzsKJGxhbmdbJ2F1dG8nXSA9ICdBdXRvJzsKJGxhbmdbJ3JlbGF0aXZldXJscyddID0gJ1JlbGF0aXZlIHVybHMnOwokbGFuZ1snZmlsZXBpY2tlcnN0eWxlJ10gPSAnRmlsZXBpY2tlciBzdHlsZSc7CiRsYW5nWydmaWxlcGlja2Vyc2l6ZSddID0gJ0ZpbGVwaWNrZXIgc2l6ZSc7CiRsYW5nWydmaWxlbmFtZW9ubHknXSA9ICdTaG93IGZpbGVuYW1lcyc7CiRsYW5nWyd0aHVtYm5haWxzb25seSddID0gJ1Nob3cgdGh1bWJuYWlscyc7CiRsYW5nWydzaG93dGh1bWJuYWlsZmlsZXN0ZXh0J10gPSAnU2hvdyB0aHVtYm5haWwtZmlsZXMgYXMgcmVndWxhciBmaWxlcyc7CiRsYW5nWydmaWxlbmFtZWFuZHRodW1ibmFpbHMnXSA9ICdTaG93IGJvdGggZmlsZW5hbWVzIGFuZCB0aHVtYm5haWxzJzsKJGxhbmdbJ21ha2V0aHVtYm5haWwnXSA9ICdDcmVhdGUgdGh1bWJuYWlscyc7CiRsYW5nWydmaWxlcGlja2Vyc2V0dGluZ3MnXSA9ICdGaWxlUGlja2VyIHNldHRpbmdzJzsKJGxhbmdbJ3Jlc2l6ZXRvJ10gPSAnUmVzaXplIGltYWdlIHRvJzsKJGxhbmdbJ2tlZXBhc3BlY3RyYXRpbyddID0gJ0tlZXAgYXNwZWN0IHJhdGlvJzsKJGxhbmdbJ2FsbG93dXBzY2FsaW5nJ10gPSAnQWxsb3cgdXBzY2FsaW5nJzsKJGxhbmdbJ2RlY2ltYWxkZWxpbWl0ZXInXSA9ICcuJzsKJGxhbmdbJ3Rob3VzYW5kZGVsaW1pdGVyJ10gPSAnLCc7CiRsYW5nWydkaXJub3Rmb3VuZCddID0gJ0RpcmVjdG9yeSAmIzAzOTslcyYjMDM5OyBub3QgZm91bmQhJzsKJGxhbmdbJ3NlbGVjdGltYWdlJ10gPSAnQnJvd3NlIGltYWdlcyc7CiRsYW5nWydzZWxlY3RmaWxlJ10gPSAnQnJvd3NlIGZpbGVzJzsKJGxhbmdbJ2RlbGV0ZXBhZ2VzJ10gPSAnRGVsZXRlIGFsbCBwYWdlcyBvZiB0eXBlIEFkdmFuY2VkQ29udGVudCc7CiRsYW5nWyd1c2VtaW1ldHlwZSddID0gJ1VzZSBtaW1lLXR5cGUgdG8gZ2V0IGZpbGUgdHlwZSc7CiRsYW5nWydpbXBvcnRwYWdlcyddID0gJ1NldCBhbGwgUGFnZXMgb2YgdHlwZSBjb250ZW50IHRvIHR5cGUgQWR2YW5jZWRDb250ZW50Lic7CiRsYW5nWydwYWdlc2ltcG9ydGVkJ10gPSAnQWxsIGNvbnRlbnQgcGFnZXMgc2V0IHRvIEFkdmFuY2VkQ29udGVudC4nOwokbGFuZ1snY29uZmlybWltcG9ydCddID0gJ0RvIHlvdSByZWFsbHkgd2FudCB0byBjaGFuZ2UgdGhlIGNvbnRlbnQgdHlwZSBvZiBhbGwgY29udGVudCBwYWdlcz8nOwokbGFuZ1snbm9taW1ldHlwZSddID0gJ05vIG1pbWUtdHlwZSBmdW5jdGlvbiBhdmFpbGFibGUgb3Igbm90IGNvbmZpZ3VyZWQgcHJvcGVybHkuIFRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZC4nOwokbGFuZ1sndG9nZ2xlX21lc3NhZ2UnXSA9ICdIaWRlIHRoaXMgbWVzc2FnZSc7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjEyODEyMDQwMTQuMzExMi43MS51dG1jc3I9Zm9ydW0uY21zbWFkZXNpbXBsZS5vcmd8dXRtY2NuPShyZWZlcnJhbCl8dXRtY21kPXJlZmVycmFsfHV0bWNjdD0vaW5kZXgucGhwJzsKJGxhbmdbJ3V0bWEnXSA9ICcxNTY4NjEzNTMuMTc5MDUyNjIzMDg0MTEwMTAwLjEyMTA0MjM1NzcuMTI4MTQ3NTUwMy4xMjgxNTU2Nzg0LjMxMjknOwokbGFuZ1sncWNhJ10gPSAnMTIxMDk3MTY5MC0yNzMwODA3My04MTk1MjgzMic7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKJGxhbmdbJ3V0bWInXSA9ICcxNTY4NjEzNTMuNi4xMC4xMjgxNTU2Nzg0JzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nl_NL.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ0FkdmFuY2VkQ29udGVudCddID0gJ0FkdmFuY2VkIENvbnRlbnQgJzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ01vZHVsZSBBZHZhbmNlZENvbnRlbnQgJXMgaXMgZ2UmaXVtbDtuc3RhbGxlZXJkJzsKJGxhbmdbJ3VuaW5zdGFsbGVkJ10gPSAnTW9kdWxlIEFkdmFuY2VkQ29udGVudCAlcyBpcyBnZWRlJml1bWw7bnN0YWxsZWVyZCc7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsZSBBZHZhbmNlZENvbnRlbnQgaXMgYmlqZ2V3ZXJrdCBuYWFyICVzJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnTW9kdWxlIEFkdmFuY2VkQ29udGVudCAlcyBpcyBnZSZpdW1sO25zdGFsbGVlcmQnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ01vZHVsZSBBZHZhbmNlZENvbnRlbnQgJXMgaXMgZ2VkZSZpdW1sO25zdGFsbGVlcmQnOwokbGFuZ1snY29uZmlybXVuaW5zdGFsbCddID0gJ1dlZXQgdSB6ZWtlciBkYXQgdSBkZSBtb2R1bGUgQWR2YW5jZWRDb250ZW50IHdpbHQgZGUmaXVtbDtuc3RhbGxlcmVuPyc7CiRsYW5nWydub3RpY2VfZHVwbGljYXRlY29udGVudCddID0gJzxlbT48c3Ryb25nPkxldCBvcDo8L3N0cm9uZz4gRGl0IGJsb2sga29tdCBtZWVyZGVyZSBrZXJlbiB2b29yIGluIGhldCBzamFibG9vbi4gQWxsZWVuIGhldCBlZXJzdGUgYmxvayB3b3JkdCBoaWVyIGdldG9vbmQuPC9lbT4nOwokbGFuZ1snZXJyb3JfYmFzaWNhdHRyaWInXSA9ICc8ZW0+PHN0cm9uZz5Ob3RpY2U6PC9zdHJvbmc+IENhbm5vdCB1c2UgYmFzaWMgY29udGVudCBwcm9wZXJ0eSBuYW1lICYjMDM5OyVzJiMwMzk7IGFzIHZhbHVlIG9mIHBhcmFtICYjMDM5O2Jsb2NrJiMwMzk7LiA8YnIgLz5UaGlzIGJsb2NrIGlzIGRpc2FibGVkLiBDaGVjayB5b3VyIHBhZ2UgdGVtcGxhdGUgYW5kIGNob3NlIGEgZGlmZmVyZW50IHZhbHVlIG9mIHBhcmFtICYjMDM5O2Jsb2NrJiMwMzk7LjwvZW0+JzsKJGxhbmdbJ2Vycm9yX2V4cGlyZWRhdGUnXSA9ICdFaW5kZGF0dW0gbW9ldCBuYSBkZSBzdGFydGRhdHVtIHZhbGxlbic7CiRsYW5nWyd5b3VhcmVpbnRleHQnXSA9ICdIdWlkaWdlIGRpcmVjdG9yeSc7CiRsYW5nWydkaW1lbnNpb25zJ10gPSAnQWZiZWVsZGluZyBBZm1ldGluZ2VuJzsKJGxhbmdbJ3NpemUnXSA9ICdCZXN0YW5kc2dyb290dGUnOwokbGFuZ1snaW5oZXJpdF9mcm9tX3BhcmVudCddID0gJ05lZW0gb3ZlciB2YW4gZGUgb3VkZXInOwokbGFuZ1snbm9uZSddID0gJ2dlZW4nOwokbGFuZ1snaW52YWxpZCddID0gJ2ZvdXQnOwokbGFuZ1snaW52YWxpZF9ibG9ja3R5cGUnXSA9ICc8ZW0+PHN0cm9uZz5Ob3RpY2U6PC9zdHJvbmc+IEludmFsaWQgdmFsdWUgJiMwMzk7JXMmIzAzOTsgb2YgcGFyYW0gYmxvY2tfdHlwZSBpbiBibG9jayAmIzAzOTslcyYjMDM5Oy48YnIgLz5DaGVjayB5b3VyIHBhZ2UgdGVtcGxhdGUuPC9lbT4nOwokbGFuZ1snZXJyb3JfaW5zdWZmaWNpZW50X2Jsb2NrcGFyYW1zJ10gPSAnPGVtPjxzdHJvbmc+RXJyb3I6PC9zdHJvbmc+IEluc3VmZmljaWVudCBwYXJhbXMuIDxiciAvPk1pc3NpbmcgcGFyYW0gJiMwMzk7JXMmIzAzOTsgZm9yIGJsb2NrICYjMDM5OyVzJiMwMzk7LiBDaGVjayB5b3VyIHBhZ2UgdGVtcGxhdGUuPC9lbT4nOwokbGFuZ1sneWVzJ10gPSAnSmEnOwokbGFuZ1snbm8nXSA9ICdOZWUnOwokbGFuZ1snZnJvbnRlbmRhY2Nlc3MnXSA9ICdGcm9udGVuZCBUb2VnYW5nJzsKJGxhbmdbJ3JlZGlyZWN0cGFnZSddID0gJ1ZlcndpanplbiBuYWFyIHBhZ2luYSBpbmRpZW4gZ2VlbiB0b2VnYW5nJzsKJGxhbmdbJ3Nob3dsb2dpbmZvcm0nXSA9ICdUb29uIGxvZ2luIGZvcm11bGllcic7CiRsYW5nWydyZWdpc3RlcmVkdXNlcnMnXSA9ICdBbGxlZW4gZ2VyZWdpc3RyZWVyZGUgZ2VicnVpa2Vycyc7CiRsYW5nWydibG9jayddID0gJ0Jsb2NrICc7CiRsYW5nWyd1c2VleHBpcmVkYXRlJ10gPSAnR2VicnVpayB2ZXJsb29wZGF0dW0nOwokbGFuZ1snc3RhcnRkYXRlJ10gPSAnU3RhcnQgRGF0dW0nOwokbGFuZ1snZW5kZGF0ZSddID0gJ0VpbmQgRGF0dW0nOwokbGFuZ1snYmxvY2tjb250ZW50J10gPSAnQmxvY2sgSW5ob3VkJzsKJGxhbmdbJ3NldHBhZ2VpbmFjdGl2ZSddID0gJ1BhZ2luYSBJbmFjdGllZic7CiRsYW5nWydkZWxldGVwYWdlJ10gPSAnVmVyd2lqZGVyIFBhZ2luYSc7CiRsYW5nWyd1bmluc3RhbGxhY3Rpb24nXSA9ICdEZSZpdW1sO25zdGFsbGVlciBiZXdlcmtpbmcnOwokbGFuZ1snc2V0Y29udGVudDEnXSA9ICdTdGVsIGFsbGUgcGFnaW5hJiMwMzk7cyBpbiBtZXQgaGV0IHR5cGUgQ29udGVudCc7CiRsYW5nWydzZXRjb250ZW50MiddID0gJ1N0ZWwgYWxsZSBwYWdpbmEmIzAzOTtzIGluIG1ldCBoZXQgdHlwZSBDb250ZW50IGVuIHZlcndpamRlciBhbGxlIGV4dHJhIGNvbnRlbnQgYmxvY2tzJzsKJGxhbmdbJ3ByZWZzdXBkYXRlZCddID0gJ1Zvb3JrZXVyZW4gYmlqZ2V3ZXJrdCc7CiRsYW5nWydzdWNjZXNzJ10gPSAnT2smZWFjdXRlOyc7CiRsYW5nWydlcnJvciddID0gJ0ZvdXQnOwokbGFuZ1snZGVsZXRlcGFnZXMnXSA9ICdWZXJ3aWpkZXIgYWxsZSBwYWdpbmEmIzAzOTtzIG1ldCBoZXQgdHlwZSBBZHZhbmNlZENvbnRlbnQnOwokbGFuZ1snaW1wb3J0cGFnZXMnXSA9ICdTdGVsIGFsbGUgcGFnaW5hJiMwMzk7cyBpbiBtZXQgaGV0IHR5cGUgJXMgbmFhciBoZXQgdHlwZSAlcy4nOwokbGFuZ1sncGFnZXNpbXBvcnRlZCddID0gJ0FsbGUgQ29udGVudCBwYWdpbmEmIzAzOTtzIGluZ2VzdGVsZCBhbHMgQWR2YW5jZWRDb250ZW50Lic7CiRsYW5nWydjb25maXJtaW1wb3J0J10gPSAnV2VldCB1IHpla2VyIGRhdCB1IGhldCBjb250ZW50dHlwZSB2YW4gYWxsZSBwYWdpbmEmIzAzOTtzIHdpbCB3aWp6aWdlbj8nOwokbGFuZ1sndG9nZ2xlX21lc3NhZ2UnXSA9ICdWZXJiZXJnIGRpdCBiZXJpY2h0JzsKJGxhbmdbJ2NvbnRlbnRzZXR0aW5ncyddID0gJ1N0YW5kYWFyZCBBZHZhbmNlZENvbnRlbnQgSW5zdGVsbGluZ2VuJzsKJGxhbmdbJ3JlZGlyZWN0cGFyYW1zJ10gPSAnVVJMIHBhcmFtcyB0byBhcHBlbmQgd2hlbiByZWRpcmVjdGluZyAocGFyYW0xPXZhbHVlMSBwYXJhbTI9dmFsdWUyIC4uLiknOwokbGFuZ1snZXZhbHVhdGVzbWFydHknXSA9ICdVc2Ugc21hcnR5IHRvIGNyZWF0ZSB0aGUgcGFyYW1zJzsKJGxhbmdbJ2Vycm9yX2xvYWRpbmdfbW9kdWxlJ10gPSAnPGVtPjxzdHJvbmc+RXJyb3I6PC9zdHJvbmc+IENvdWxkIG5vdCBsb2FkIG1vZHVsZSAmIzAzOTslcyYjMDM5Oy4gKERlZmluZWQgZm9yIGJsb2NrICYjMDM5OyVzJiMwMzk7IGluIHlvdXIgcGFnZSB0ZW1wbGF0ZS4pPC9lbT4nOwokbGFuZ1snZXJyb3JfY29udGVudGJsb2NrX3N1cHBvcnQnXSA9ICc8ZW0+PHN0cm9uZz5FcnJvcjo8L3N0cm9uZz4gTW9kdWxlICYjMDM5OyVzJiMwMzk7IGRvZXMgbm90IHN1cHBvcnQgY29udGVudGJsb2Nrcy4gKERlZmluZWQgZm9yIGJsb2NrICYjMDM5OyVzJiMwMzk7IGluIHlvdXIgcGFnZSB0ZW1wbGF0ZS4pPC9lbT4nOwokbGFuZ1snc3VjY2Vzc19pbXBvcnRwYWdlcyddID0gJ0FsbGUgcGFnaW5hJiMwMzk7cyB2YW4gaGV0IHR5cGUgJXMgemlqbiBzdWNjZXN2b2wgZ2V3aWp6aWdkIG5hYXIgJXMnOwokbGFuZ1snc2hvd19hZHZhbmNlZGNvbnRlbnRfb3B0aW9ucyddID0gJ0dlZWYgQWR2YW5jZWRDb250ZW50IG9wdGllcyB0YWJibGFkIHdlZXInOwokbGFuZ1snZGlzcGxheV9zZXR0aW5ncyddID0gJyVzIHdlZXJnYXZlIGluc3RlbGxpbmdlbic7CiRsYW5nWydzYXZlX2NvbGxhcHNlX3N0YXR1cyddID0gJ1NsYSBkZSBpbmtsYXBzdGF0dXMgb3AgdmFuICVzJzsKJGxhbmdbJ2NvbnRlbnRfYmxvY2tzJ10gPSAnY29udGVudCBibG9ra2VuJzsKJGxhbmdbJ2Jsb2NrX21lc3NhZ2UnXSA9ICdjb250ZW50IGJsb2sgYmVyaWNodCc7CiRsYW5nWydibG9ja19ncm91cHMnXSA9ICdibG9rIGdyb2VwZW4nOwokbGFuZ1snY29sbGFwc2VfZGVmYXVsdCddID0gJ0tsYXAgJXMgc3RhbmRhYXJkIGluJzsKJGxhbmdbJ3Blcl9wYWdlJ10gPSAncGVyIHBhZ2luYSc7CiRsYW5nWydwZXJfdGVtcGxhdGUnXSA9ICdwZXIgc2phYmxvb24nOwokbGFuZ1snYm90aDEnXSA9ICdzamFibG9vbiBPRiBwYWdpbmEgJzsKJGxhbmdbJ2JvdGgyJ10gPSAnc2phYmxvb24gRU4gcGFnaW5hJzsKJGxhbmdbJ2NvbnRlbnQnXSA9ICdJbmhvdWQnOwokbGFuZ1snY29udGVudDInXSA9ICdBZHZhbmNlZCBDb250ZW50ICc7CiRsYW5nWydwcmVmcyddID0gJ0luc3RlbGxpbmdlbic7CiRsYW5nWydtdWx0aV9pbnB1dCddID0gJ011bHRpIGlucHV0JzsKJGxhbmdbJ211bHRpX2lucHV0X3RwbCddID0gJ011bHRpIGlucHV0dGVtcGxhdGVzJzsKJGxhbmdbJ2FkZF9tdWx0aV9pbnB1dCddID0gJ1ZvZWcgbmlldXdlIG11bHRpIGlucHV0IHRvZSc7CiRsYW5nWydhZGRfbXVsdGlfaW5wdXRfdHBsJ10gPSAnVm9lZyBuaWV1d2UgbXVsdGkgaW5wdXR0ZW1wbGF0ZSB0b2UnOwokbGFuZ1snaW5wdXRfaWQnXSA9ICdJbnZvZXIgSUQnOwokbGFuZ1snaW5wdXRfZmllbGRzJ10gPSAnSW52b2VyIHZlbGRlbic7CiRsYW5nWyd0cGxfbmFtZSddID0gJ1NqYWJsb29uIG5hYW0nOwokbGFuZ1snZXJyb3JfdGVtcGxhdGUnXSA9ICdEZSB0ZW1wbGF0ZSB2ZXJlaXN0IGRpdCB2ZWxkIGVuIGhldCBtYWcgbmlldCBsZWVnZ2VsYXRlbiB3b3JkZW4nOwokbGFuZ1snZXJyb3JfaW5wdXRfZmllbGRzJ10gPSAnSW52b2VydmVsZGVuIGlzIGVlbiB2ZXJlaXN0IHZlbGQgZW4gbWFnIG5pZXQgbGVlZ2dlbGF0ZW4gd29yZGVuLic7CiRsYW5nWydlcnJvcl9pbnB1dF9pZCddID0gJ0dlZW4gaW52b2VyIGlkIGdlZ2V2ZW4gb2YgaW52b2VyIGlkIGJlc3RhYXQgYWwuJzsKJGxhbmdbJ2Vycm9yX2lucHV0X2lkX2V4aXN0cyddID0gJ0ludm9lciBJRCBpcyBhbCBpbiBnZWJydWlrLiBLaWVzIGVlbiBhbmRlcmUgKG1vZXQgdW5pZWsgemlqbikuJzsKJGxhbmdbJ211bHRpX2lucHV0X2FkZGVkJ10gPSAnTXVsdGkgSW5wdXQgdG9lZ2V2b2VnZC4nOwokbGFuZ1snbXVsdGlfaW5wdXRfZGVsZXRlZCddID0gJ011bHRpIElucHV0IHZlcndpamRlcmQuJzsKJGxhbmdbJ211bHRpX2lucHV0X3VwZGF0ZWQnXSA9ICdNdWx0aSBJbnB1dCBiaWpnZXdlcmt0Lic7CiRsYW5nWydtdWx0aV9pbnB1dF90cGxfYWRkZWQnXSA9ICdNdWx0aSBJbnB1dCB0ZW1wbGF0ZSB0b2VnZXZvZWdkLic7CiRsYW5nWydtdWx0aV9pbnB1dF90cGxfdXBkYXRlZCddID0gJ011bHRpIElucHV0IHRlbXBsYXRlIGJpamdld2Vya3QuJzsKJGxhbmdbJ211bHRpX2lucHV0X3RwbF9kZWxldGVkJ10gPSAnTXVsdGkgSW5wdXQgdGVtcGxhdGUgdmVyd2lqZGVyZC4nOwokbGFuZ1snZGVsZXRlX3NlbGVjdGVkJ10gPSAnVmVyd2lqZGVyIGdlc2VsZWN0ZWVyZGUgaXRlbXMnOwokbGFuZ1snY29uZmlybV9kZWxldGUnXSA9ICdXZWV0IHUgemVrZXIgZGF0IHUgZGl0IHdpbHQgdmVyd2lqZGVyZW4/JzsKJGxhbmdbJ2NvbmZpcm1fZGVsZXRlX3NlbGVjdGVkJ10gPSAnV2VldCB1IHpla2VyIGRhdCB1IGRlemUgd2lsdCB2ZXJ3aWpkZXJlbj8nOwokbGFuZ1sndXNlX2NvbnRlbnR0eXBlJ10gPSAnR2VicnVpayBDb250ZW50IFR5cGUnOwokbGFuZ1snaGVscF90cGxfdmFycyddID0gJzxwPjxzdHJvbmc+VGVtcGxhdGUgdmFyczo8L3N0cm9uZz48L3A+DQo8cD48cHJlPjxjb2RlPnskaW5wdXRzfTwvY29kZT48L3ByZT4gaXMgYW4gYXJyYXkgdGhhdCBjb250YWlucyBhbGwgZGVmaW5lZCBpbnB1dCBlbGVtZW50cyBvZiB0aGF0IG11bHRpIGlucHV0IGJsb2NrLjxiciAvPg0KRWFjaCBpbnB1dCBlbGVtZW50IGlzIGFuIGFycmF5IHRoYXQgY29udGFpbnMgYWxsIGl0cyBwYXJhbXMuIDxiciAvPg0KU2VlIG1vZHVsZSBoZWxwIGZvciBtb3JlIGluZm8uPGJyIC8+DQpBZGRpdGlvbmFsIHBhcmFtIGlzICZxdW90O2lucHV0JnF1b3Q7IHRoYXQgd2lsbCBwcmludCBvdXQgdGhlIGlucHV0IGVsZW1lbnQuPGJyIC8+DQpUbyBhY2Nlc3MgdGhlIHBhcmFtcyB1c2UgdGhlIGRvdCBzeW50YXguPGJyIC8+DQpFeGFtcGxlOjwvcD4NCjxwcmU+PGNvZGU+e2ZvcmVhY2ggZnJvbT0kaW5wdXRzIGl0ZW09ZWxtfQ0KCXskZWxtLmxhYmVsfTombmJzcDt7JGVsbS5pbnB1dH08YnIgLz4NCnsvZm9yZWFjaH08L2NvZGU+PC9wcmU+JzsKJGxhbmdbJ2hlbHAnXSA9ICc8YnIgLz4NCjxoMz5XaGF0IGRvZXMgdGhpcyBkbz88L2gzPg0KPHA+VGhpcyBpcyBhIG1vZGlmaWNhdGlvbiBvZiB0aGUgZGVmYXVsdCBjb250ZW50IHR5cGUgJnF1b3Q7Q29udGVudCZxdW90OyBvZiBDTVNtcy48YnIgLz4NCkl0IHByb3ZpZGVzIG1vcmUgZmxleGliaWxpdHkgYnkgY3JlYXRpbmcgY3VzdG9tIGlucHV0IGNvbnRyb2xzIGluIGJhY2tlbmQuPGJyIC8+DQpVc2VycyBjYW4gYWRkIGRyb3Bkb3ducywgbXVsdGlwbGUgc2VsZWN0IGxpc3RzLCBjaGVja2JveGVzLCBncm91cCBjb250ZW50IGJsb2NrcyANCmluIHNlcGFyYXRlIHBhZ2UgdGFicywgYmxvY2sgdGFicyBpbnNpZGUgYSBwYWdlIHRhYiBvciBpbiBmaWVsZHNldHMgYnkganVzdCANCnVzaW5nIGFkZGl0aW9uYWwgcGFyYW1zIGluIHRoZSB0ZW1wbGF0ZSB3aGVuIGNhbGxpbmcgdGhlIGNvbnRlbnQuPGJyIC8+DQpJdCBhbHNvIGFkZHMgYWJpbGl0eSB0byBncmFudCBhY2Nlc3Mgb2YgcGFnZXMgdG8gY2VydGFpbiB1c2VycyBvZiB0aGUgDQpGcm9udEVuZFVzZXJzIG1vZHVsZSBhbmQgaGlkZSB0aGUgY29udGVudCwgcmVwbGFjZSBpdCBieSB0aGUgbG9naW4gZm9ybSBvZiB0aGUgDQpGcm9udEVuZFVzZXJzIG1vZHVsZSBvciByZWRpcmVjdCB0byBhIHNwZWNpZmllZCBwYWdlIHNob3dpbmcgdGhlIGxvZ2luIGZvcm0gb3IgDQpqdXN0IHJlZGlyZWN0IHdpdGhvdXQgZG9pbmcgYW55dGhpbmcgZWxzZS48YnIgLz4NClBhZ2UgcHJvcGVydHkgb2YgRnJvbnRFbmRVc2VycyBhY2Nlc3MgYW5kIHJlZGlyZWN0IHBhZ2UgY2FuIGJlIGluaGVyaXRlZCBieSANCnBhcmVudCBwYWdlcy48L3A+DQo8cD48ZW0+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBUbyBnZXQgdGhlIGZ1bGwgZnVuY3Rpb25hbGl0eSBvZiB0aGlzIGNvbnRlbnQgdHlwZSANCmluIGZyb250ZW5kIHlvdSBuZWVkIHRvIGNhbGwgeW91ciBjb250ZW50IHdpdGggdGhlIG1vZHVsZSBwbHVnaW4ge0FkdmFuY2VkQ29udGVudH0gDQooY2FzZSBzZW5zaXRpdmUhKS48YnIgLz4NCk90aGVyd2lzZSBpdCBtYXkgYmVoYXZlIGxpa2UgdGhlIGRlZmF1bHQgY29udGVudCB0eXBlIHBsdWdpbi48L2VtPjwvcD4NCjxwPllvdSBjYW4gZXZlbiB1c2Ugc21hcnR5IGxvZ2ljIGluIHBhcmFtZXRlciB2YWx1ZXMuIFRoYXQgbWVhbnMgeW91IGNhbiB1c2UgdGhlIA0KcmVzdWx0IG9mIGEgcGx1Z2luLCBhbiB1ZHQgb3IgZXZlbiBhIG1vZHVsZSBvciBqdXN0IHRoZSBjb250ZW50IG9mIGEgZ2xvYmFsIA0KY29udGVudCBibG9jayBhcyBwYXJhbWV0ZXIgdmFsdWUgdG8gY3JlYXRlIGR5bmFtaWMgdmFsdWVzLjwvcD4NCjxoMz5Ib3cgaXMgaXQgdXNlZD88L2gzPg0KPHA+QWZ0ZXIgaW5zdGFsbGF0aW9uIHRoZSBtb2R1bGUgc2V0dGluZ3MgY2FuIGJlIGZvdW5kIGluICZxdW90O0V4dGVuc2lvbnMtPkFkdmFuY2VkQ29udGVudCZxdW90Oy48L3A+DQo8cD5BZGRpdGlvbmFsbHkgeW91IHdpbGwgaGF2ZSBhIG5ldyBjb250ZW50IHR5cGUgJnF1b3Q7QWR2YW5jZWRDb250ZW50JnF1b3Q7IGF2YWlsYWJsZSANCndoZW4gYWRkaW5nL2VkaXRpbmcgYSBwYWdlLjxiciAvPg0KPHA+QWRkIHRoZSBmb2xsb3dpbmcgcGFyYW1zIHRvIHlvdXIgY29udGVudCB0YWcgaW4geW91ciBwYWdlIHRlbXBsYXRlLCANCmNoYW5nZSB0aGUgY29udGVudCB0eXBlIG9mIHlvdXIgcGFnZSB0byAmcXVvdDtBZHZhbmNlZENvbnRlbnQmcXVvdDsgYW5kIHNlZSB3aGF0IGhhcHBlbnMgDQppbiBiYWNrZW5kLi4uPC9wPg0KPGgzPldoYXQgcGFyYW1ldGVycyBhcmUgYXZhaWxhYmxlPzwvaDM+DQo8cD5hbGwgcGFyYW1zIGFyZSBvcHRpb25hbDwvcD4NCjxwPjxzdHJvbmc+RGVmYXVsdCBwYXJhbXM6PC9zdHJvbmc+PC9wPg0KPHVsPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+YmxvY2s8L3R0PiAoc3RyaW5nKQ0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJQWxsb3dzIHlvdSB0byBoYXZlIG1vcmUgdGhhbiBvbmUgY29udGVudCBibG9jayBwZXIgcGFnZS4gSWYgbXVsdGlwbGUgY29udGVudCB0YWdzIGFyZSBwdXQgb24gYSB0ZW1wbGF0ZSwgdGhhdCBudW1iZXIgb2YgZWRpdCBib3hlcyB3aWxsIGJlIGRpc3BsYXllZCBpZiB0aGUgcGFnZSBpcyBlZGl0ZWQuPGJyIC8+DQoJCQkJZS5nLjogPGNvZGU+e2NvbnRlbnQgYmxvY2s9JnF1b3Q7U2Vjb25kIENvbnRlbnQgYmxvY2smcXVvdDt9PC9jb2RlPjxiciAvPg0KCQkJCU5vdywgaWYgeW91IGVkaXQgYSBwYWdlIHRoZXJlIHdpbGwgYmEgYSB0ZXh0YXJlYSBjYWxsZWQgJnF1b3Q7U2Vjb25kIENvbnRlbnQgYmxvY2smcXVvdDsuPGJyIC8+DQoJCQkJPGVtPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVGhlIG5hbWUgb2YgdGhlIGNvbnRlbnQgYmxvY2sgbWF5IGNvbnRhaW4gb25seSBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgdW5kZXJzY29yZXMgKG5vIHdoaXRlc3BhY2VzLCBzcGVjaWFsIGNoYXJzLCB1bWxhdXRzIGV0Yy4pLiBPdGhlcndpc2UgaXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBwcm9wZXIgbmFtZSAoc2ltaWxhciB0byB0aGUgcGFnZSBhbGlhcykuPC9lbT4NCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD53eXNpd3lnPC90dD4gKHRydWUvZmFsc2UpDQoJCTx1bD4NCgkJCTxsaT5JZiBzZXQgdG8gZmFsc2UsIHRoZW4gYSB3eXNpd3lnIHdpbGwgbmV2ZXIgYmUgdXNlZCB3aGlsZSBlZGl0aW5nIHRoaXMgYmxvY2suIElmIHRydWUsIHRoZW4gaXQgYWN0cyBhcyBub3JtYWwuPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0Pm9uZWxpbmU8L3R0PiAodHJ1ZS9mYWxzZSkNCgkJPHVsPg0KCQkJPGxpPklmIHNldCB0byB0cnVlLCB0aGVuIG9ubHkgb25lIGVkaXQgbGluZSB3aWxsIGJlIHNob3duIHdoaWxlIGVkaXRpbmcgdGhpcyBibG9jay4gSWYgZmFsc2UsIHRoZW4gaXQgYWN0cyBhcyBub3JtYWwuIE9ubHkgd29ya3Mgd2hlbiBibG9jayBwYXJhbWV0ZXIgaXMgdXNlZC48L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+ZGVmYXVsdDwvdHQ+IChzdHJpbmcpDQoJCTx1bD4NCgkJCTxsaT5EZWZhdWx0IGNvbnRlbnQgd2hlbiBjcmVhdGluZyBhIG5ldyBwYWdlLjwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5sYWJlbDwvdHQ+IChzdHJpbmcpDQoJCTx1bD4NCgkJCTxsaT5Qcm9tcHQgZm9yIHRoaXMgY29udGVudCBibG9jay4gUG9zc2libGUgdmFsdWVzIGFyZSBhbnkgZXhwcmVzc2lvbi4gSWYgYmxhbmssIHRoZSB1bmNvbnZlcnRlZCBibG9jayBuYW1lIGlzIHVzZWQuPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmFzc2lnbjwvdHQ+IChzdHJpbmcpDQoJCTx1bD4NCgkJCTxsaT4NCgkJCQlBc3NpZ25zIHRoZSBjb250ZW50IHRvIGEgc21hcnR5IHBhcmFtZXRlciwgd2hpY2ggeW91IGNhbiB0aGVuIHVzZSBpbiBvdGhlciBhcmVhcyBvZiB0aGUgcGFnZSwgb3IgdXNlIHRvIHRlc3Qgd2hldGhlciBjb250ZW50IGV4aXN0cyBpbiBpdCBvciBub3QuPGJyIC8+DQoJCQkJRXhhbXBsZSBvZiBwYXNzaW5nIHBhZ2UgY29udGVudCB0byBhIFVzZXIgRGVmaW5lZCBUYWcgYXMgYSBwYXJhbWV0ZXI6PGJyIC8+DQoJCQkJPGNvZGU+e2NvbnRlbnQgYXNzaWduPXBhZ2Vjb250ZW50fTxiciAvPg0KCQkJCXt0YWJsZV9vZl9jb250ZW50cyB0aGVwYWdlY29udGVudD0mcXVvdDskcGFnZWNvbnRlbnQmcXVvdDt9PC9jb2RlPjxiciAvPg0KCQkJCTxlbT48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IEZvciBzb21lIHJlYXNvbiB0aGlzIHBhcmFtIGRvZXMgbm90IHdvcmsgYXQgdGhlIG1vbWVudCB3aXRoIHRoZSBtb2R1bGUgcGx1Z2luIHtBdmFuY2VkQ29udGVudH0uIFVzZSA8YnIgLz48Y29kZT57Y2FwdHVyZSBhc3NpZ249JnF1b3Q7Zm9vJnF1b3Q7fXtBZHZhbmNlZENvbnRlbnR9ey9jYXB0dXJlfTwvY29kZT4gPGJyIC8+aW5zdGVhZC48L2VtPg0KCQkJPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCjwvdWw+DQo8cD48c3Ryb25nPkFkdmFuY2VkIHBhcmFtczo8L3N0cm9uZz48L3A+DQo8dWw+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5ibG9ja190eXBlPC90dD4gKHRleHQsY2hlY2tib3gsZHJvcGRvd24sc2VsZWN0X211bHRpcGxlLGRhdGUsbXVsdGlfaW5wdXQpIA0KCQk8dWw+DQoJCQk8bGk+QWxsb3dzIHlvdSB0byBzcGVjaWZ5IHdoYXQgY29udGVudCBjb250cm9sIHR5cGUgaXMgdXNlZCBpbiB0aGUgYmFjayBlbmQuPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PnBhZ2VfdGFiPC90dD4gKHN0cmluZykNCgkJPHVsPg0KCQkJPGxpPg0KCQkJCVRoaXMgcGFyYW1ldGVyIHNldHMgdGhlIHRhYiBpbiB3aGljaCB0aGUgY29udGVudCBibG9jayBpcyBkaXNwbGF5ZWQgaW4gdGhlIGJhY2tlbmQuPGJyIC8+DQoJCQkJUG9zc2libGUgdmFsdWVzIGFyZSAmcXVvdDttYWluJnF1b3Q7ICggPSBUYWIgJnF1b3Q7TWFpbiBNZW51JnF1b3Q7KSwgJnF1b3Q7b3B0aW9ucyZxdW90OyAoID0gVGFiICZxdW90O09wdGlvbnMmcXVvdDspLCBvciBhbnkgb3RoZXIgYXJiaXRyYXJ5IHZhbHVlPGJyIC8+DQoJCQkJPGVtPmUuZy4geW91IGNhbiBhZGQgYSBjaGVja2JveCB0byB0aGUgb3B0aW9ucyB0YWIgb3IgY3JlYXRlIG5ldyB0YWJzPC9lbT4uDQoJCQk8L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+YmxvY2tfdGFiPC90dD4gKHN0cmluZykNCgkJPHVsPg0KCQkJPGxpPldpdGggdGhpcyBwYXJhbWV0ZXIsIHRoZSBibG9ja3Mgd2l0aGluIGEgcGFnZSB0YWIgY2FuIGJlIGZ1cnRoZXIgZGl2aWRlZCBpbnRvIHRhYnMgb3IgY2FuIGJlIGdyb3VwZWQgdG9nZXRoZXIuIEFueSBleHByZXNzaW9uIGNhbiBiZSB1c2VkIGFzIGEgcG9zc2libGUgdmFsdWUuPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmJsb2NrX2dyb3VwPC90dD4gKHN0cmluZykNCgkJPHVsPg0KCQkJPGxpPldpdGggdGhpcyBwYXJhbWV0ZXIsIG11bHRpcGxlIGJsb2NrcyBjYW4gYmUgZ3JvdXBlZCBpbiBhIGZpZWxkc2V0LiBBbnkgZXhwcmVzc2lvbiBjYW4gYmUgdXNlZCBhcyBhIHBvc3NpYmxlIHZhbHVlLjwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5hY3RpdmU8L3R0PiAodHJ1ZS9mYWxzZSkNCgkJPHVsPg0KCQkJPGxpPg0KCQkJCUFsbG93cyB5b3UgdG8gZGlzYWJsZSBhIGNvbnRlbnQgYmxvY2suIERpc2FibGVkIGNvbnRlbnQgYmxvY2tzIHdvbiYjMDM5O3QgYmUgc2hvd24gaW4gYmFja2VuZCBhcyB3ZWxsIGFzIGluIGZyb250ZW5kLiAob25seSB3b3JrcyB3aXRoIHtBZHZhbmNlZENvbnRlbnR9IHBsdWdpbik8YnIgLz4NCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5zdHlsZTwvdHQ+IChzdHJpbmcpDQoJCTx1bD4NCgkJCTxsaT4NCgkJCQlzZXQgdGhlIGlubGluZSBzdHlsZSBvZiB0aGUgZWxlbWVudCBpbiBiYWNrZW5kLiA8YnIgLz4NCgkJCQllLmcuOiBtYWtlIGEgbm90ZSByZWQgd2l0aCA8Y29kZT5zdHlsZT0mIzAzOTtjb2xvcjojRkYwMDAwOyYjMDM5OzwvY29kZT4NCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5lZGl0b3JfZ3JvdXBzPC90dD4gKHN0cmluZykNCgkJPHVsPg0KCQkJPGxpPg0KCQkJCUEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgZ3JvdXAgbmFtZXMgdGhhdCBhcmUgYWxsb3dlZCB0byBlZGl0IHRoaXMgYmxvY2suDQoJCQk8L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+ZWRpdG9yX3VzZXJzPC90dD4gKHN0cmluZykNCgkJPHVsPg0KCQkJPGxpPg0KCQkJCUEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgdXNlciBuYW1lcyB0aGF0IGFyZSBhbGxvd2VkIHRvIGVkaXQgdGhpcyBibG9jay4NCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGVtPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gaWYgdGhlIHBhcmFtcyA8dHQ+ZWRpdG9yX3VzZXJzPC90dD4gYW5kIDx0dD5lZGl0b3JfZ3JvdXBzPC90dD4gYXJlIGVtcHR5IHRoZSBibG9jayBtYXkgYmUgZWRpdGVkIGJ5IGFueSB1c2VyIHdpdGggc3VmZmljaWVudCBwZXJtaXNzaW9uIHRvIGVkaXQgYSBwYWdlPC9lbT48YnIgLz48YnIgLz4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmZldV9hY2Nlc3M8L3R0PiAobm90IHJlYWR5IHlldCkNCgkJPHVsPg0KCQkJPGxpPg0KCQkJCUEgbGlzdCBvZiBmZXUgZ3JvdXBzIHNlcGFyYXRlZCBieSBhIGNvbW1hLjxiciAvPg0KCQkJCVRoaXMgZ3JhbnRzIGFjY2VzcyB0byB0aGlzIGNvbnRlbnQgYmxvY2sgb25seSB0byBjZXJ0YWluIGZldSBncm91cHMuPGJyIC8+DQoJCQk8L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+ZmV1X2FjdGlvbjwvdHQ+ICh0cnVlL2ZhbHNlKSAgKG5vdCByZWFkeSB5ZXQpDQoJCTx1bD4NCgkJCTxsaT4NCgkJCQlTcGVjaWZ5IGlmIHRoZSBsb2dpbiBmb3JtIG9mIHRoZSBmZXUgbW9kdWxlIHdpbGwgYmUgc2hvd24gb3Igbm90LjxiciAvPg0KCQkJPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmFsbG93X25vbmU8L3R0PiAodHJ1ZS9mYWxzZSkNCgkJPHVsPg0KCQkJPGxpPlNldCB0byB0cnVlIGlmIHRoZSB1c2VyIG1heSBlbnRlciBlbXB0eSB2YWx1ZXMuIDxiciAvPklmIHNldCB0byBmYWxzZSBhbmQgdmFsdWUgaXMgZW1wdHkgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHBhcmFtICZxdW90O2RlZmF1bHQmcXVvdDsgd2lsbCBiZSB1c2VkLiA8YnIgLz5JZiBzZXQgdG8gdHJ1ZSBhbmQgYmxvY2sgaXMgb2YgdHlwZSBpbWFnZS9maWxlIHRoZSBvcHRpb24gJnF1b3Q7bm9uZSZxdW90OyAobW9kZT0mcXVvdDtkcm9wZG93biZxdW90Oykgb3IgYSBidXR0b24gdG8gY2xlYXIgdGhlIHNlbGVjdGVkIGZpbGUvaW1hZ2UgdmFsdWUgKG1vZGU9JnF1b3Q7ZmlsZXBpY2tlciZxdW90Oykgd2lsbCBiZSBkaXNwbGF5ZWQuPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PnNtYXJ0eTwvdHQ+ICh0cnVlL2ZhbHNlKQ0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJVHVybiBzbWFydHkgcHJvY2Vzc2luZyBvZiB2YWx1ZXMgb24vb2ZmLjxiciAvPg0KCQkJCUlmIHNldCB0byB0cnVlIGFueSBnaXZlbiB2YWx1ZSB3aWxsIGJlIHByb2Nlc3NlZCBieSB0aGUgc21hcnR5IGVuZ2luZS48YnIgLz4NCgkJCQk8ZW0+PHN0cm9uZz5Ob3RlOiA8L3N0cm9uZz4gTm90aWNlIHRoYXQgeW91IGNhbm5vdCB1c2UgdGhlIGRlZmF1bHQgc21hcnR5IGRlbGltaXRlcnMgdGhhdCBhcmUgdXNlZCBpbiB0aGUgdGVtcGxhdGUuIFRoaXMgd2lsbCBjYXVzZSBzbWFydHkgZXJyb3JzIGluIGZyb250ZW5kLjxiciAvPg0KCQkJCVNvIHlvdSBuZWVkIHRvIHVzZSA6OjogYXMgZGVsaW1pdGVyIGluc3RlYWQuPGJyIC8+PC9lbT4NCgkJCQlFLmcuOiA8Y29kZT57Y29udGVudCBibG9jaz0mcXVvdDtDYXRlZ29yaWVzJnF1b3Q7IGxhYmVsPSZxdW90O1NlbGVjdCBhIGNhdGVnb3J5JnF1b3Q7IGJsb2NrX3R5cGU9JnF1b3Q7ZHJvcGRvd24mcXVvdDsgaXRlbXM9JnF1b3Q7Ojo6Z2xvYmFsX2NvbnRlbnQgbmFtZT0mIzAzOTtjYXRlZ29yeWxpc3QmIzAzOTs6OjomcXVvdDsgc21hcnR5PSZxdW90O3RydWUmcXVvdDt9PC9jb2RlPg0KCQkJPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmRlc2NyaXB0aW9uPC90dD4gKHN0cmluZykgDQoJCTx1bD4NCgkJCTxsaT5BbGxvd3MgeW91IHRvIGFkZCBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIHRvIHRoYXQgYmxvY2sgZm9yIHlvdXIgZWRpdG9ycy48L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KPC91bD4NCjxwPjxzdHJvbmc+UGFyYW1zIG9mIGJsb2NrdHlwZSAmcXVvdDtjaGVja2JveCZxdW90Ozo8L3N0cm9uZz48L3A+DQo8dWw+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5kZWZhdWx0PC90dD4gKHRydWUvZmFsc2UpIA0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJY2hlY2tzL3VuY2hlY2tzIHRoZSBjaGVja2JveCBieSBkZWZhdWx0IHdoZW4gYWRkaW5nIGEgcGFnZTxiciAvPg0KCQkJCTxlbT48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFVzZSAmcXVvdDsxJnF1b3Q7IGZvciBjaGVja2VkIGFuZCAmcXVvdDswJnF1b3Q7IGZvciB1bmNoZWNrZWQgYnkgZGVmYXVsdDxiciAvPjwvZW0+DQoJCQkJRS5nLiA8Y29kZT57Y29udGVudCBibG9ja190eXBlPSZxdW90O2NoZWNrYm94JnF1b3Q7IGRlZmF1bHQ9MX08L2NvZGU+DQoJCQk8L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KPC91bD4NCjxwPjxzdHJvbmc+UGFyYW1zIG9mIGJsb2NrdHlwZSAmcXVvdDtkcm9wZG93biZxdW90Oy8mcXVvdDtzZWxlY3RfbXVsdGlwbGUmcXVvdDs6PC9zdHJvbmc+PC9wPg0KPHVsPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+aXRlbXM8L3R0PiAoc3RyaW5nKQ0KCQk8dWw+DQoJCQk8bGk+SXRlbSBsYWJlbChzKSBvZiB0aGUgZmllbGQocykgKHNlcGFyYXRlZCBieSBhIGRlbGltaXRlciAtIGRlZmF1bHQgaXMgfCAocGlwZSkpPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PnZhbHVlczwvdHQ+IChzdHJpbmcpDQoJCTx1bD4NCgkJCTxsaT5WYWx1ZShzKSBvZiB0aGUgaXRlbXMgKHNlcGFyYXRlZCBieSBhIGRlbGltaXRlciAtIGRlZmF1bHQgaXMgfCAocGlwZSkpPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8ZW0+PHN0cm9uZz5Ob3RpY2U6PC9zdHJvbmc+IGlmIHRoZXJlIGFyZSBsZXNzIHZhbHVlcyB0aGFuIGl0ZW1zIHRoZSBpdGVtIGxhYmVscyB3aWxsIGJlIHVzZWQgYXMgdmFsdWVzIChhbmQgdmlzZSB2ZXJzYSkuPC9lbT48YnIgLz48YnIgLz4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmRlZmF1bHQ8L3R0PiAoc3RyaW5nKQ0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJUHJlc2VsZWN0ZWQgdmFsdWUocykgKHNlcGFyYXRlZCBieSBhIGRlbGltaXRlciAtIGRlZmF1bHQgaXMgfCAocGlwZSkpPGJyIC8+DQoJCQk8L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+ZGVsaW1pdGVyPC90dD4gKHN0cmluZykNCgkJPHVsPg0KCQkJPGxpPkEgc2lnbiBvciBzdHJpbmcgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZGV2aWRlIHRoZSBpdGVtcy92YWx1ZXMgKGRlZmF1bHQgaXMgfCAocGlwZSkpPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+PGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+c2l6ZTwvdHQ+IChpbnRlZ2VyKQ0KCQk8dWw+DQoJCQk8bGk+SGVpZ2h0IG9mIGNvbnRlbnQgYmxvY2sgaW4gYmFjayBlbmQgaWYgPGNvZGU+YmxvY2tfdHlwZT0mcXVvdDtzZWxlY3RfbXVsdGlwbGUmcXVvdDs8L2NvZGU+IGlzIHNldC4gPGVtPihEZWZhdWx0IGlzIG51bWJlciBvZiBpdGVtcyk8L2VtPjwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PnNvcnRhYmxlX2l0ZW1zPC90dD4gKHRydWUvZmFsc2UpIC0gc2VsZWN0X211bHRpcGxlIG9ubHkNCgkJPHVsPg0KCQkJPGxpPg0KCQkJCUlmIHNldCB0byB0cnVlIHRoZSBpdGVtcyB3b24mIzAzOTt0IGJlIHNob3duIGFzIGEgbXVsdGlwbGUgc2VsZWN0IGlucHV0IHdpdGggb3B0aW9ucyBidXQgYXMgYSBsaXN0IG9mIGNoZWNrYm94ZXMgdGhhdCBjYW4gYmUgcmVvcmRlcmVkLjxiciAvPkVhY2ggcm93IGNvbnRhaW5zIHRoZSBpdGVtIGxhYmVsIGFuZCBhIGNoZWNrYm94IHdpdGggdGhlIGl0ZW0gdmFsdWUuPGJyIC8+DQoJCQkJPGVtPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gb25seSB0aGUgb3JkZXIgb2YgdGhlIDxzdHJvbmc+c2VsZWN0ZWQ8L3N0cm9uZz4gaXRlbXMgd2lsbCBiZSBzdG9yZWQgYW5kIGFsd2F5cyBkaXNwbGF5ZWQgb24gdGhlIHRvcCBvZiB0aGUgbGlzdCB3aGVuIHJlbG9hZGluZyB0aGUgZWRpdCBwYWdlLjxiciAvPg0KCQkJCVVuc2VsZWN0ZWQgaXRlbXMgd2lsbCBhcHBlbmRlZCBpbiB0aGF0IG9yZGVyIHRoZXkgYXJlIGRlZmluZWQgaW4gdGhlIHRlbXBsYXRlPC9lbT4NCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5jb2xsYXBzZTwvdHQ+ICh0cnVlL2ZhbHNlKQ0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJVGhlIGRlZmF1bHQgZGlzcGxheSBvZiB0aGUgYmxvY2sgaW4gYmFja2VuZC4NCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQo8L3VsPg0KPHA+PHN0cm9uZz5QYXJhbXMgb2YgYmxvY2t0eXBlICZxdW90O2RhdGUmcXVvdDs6PC9zdHJvbmc+PC9wPg0KPHVsPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+c3RlcF9ob3VyczwvdHQ+IChpbnQpIA0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJc3RlcHMgb2YgaG91cnMgaW4gdGhlIGNsb2NrIGRyb3Bkb3duLiAoZGVmYXVsdCBpcyAxKQ0KCQkJPC9saT4NCgkJPC91bD4NCgkJPGJyIC8+DQoJPC9saT4NCgk8bGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PnN0YXJ0X2hvdXI8L3R0PiAoaW50KSANCgkJPHVsPg0KCQkJPGxpPg0KCQkJCXRoZSBzdGFydCBob3VyIG9mIHRoZSBjbG9jayBkcm9wZG93bi4gKGRlZmF1bHQgaXMgMCkNCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5lbmRfaG91cjwvdHQ+IChpbnQpIA0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJdGhlIGVuZCBob3VyIG9mIHRoZSBjbG9jayBkcm9wZG93biAoZGVmYXVsdCBpcyAxMiBvciAyMykNCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5zaG93MjRoPC90dD4gKHRydWUvZmFsc2UpIA0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJc2V0IHRvIGZhbHNlIGlmIEFNL1BNIGlzIHVzZWQuIChkZWZhdWx0IGlzIHRydWUpDQoJCQk8L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+c3RlcF9taW51dGVzPC90dD4gKGludCkgDQoJCTx1bD4NCgkJCTxsaT4NCgkJCQlzdGVwcyBvZiBtaW51dGVzIGluIHRoZSBjbG9jayBkcm9wZG93bi4gKGRlZmF1bHQgaXMgMTApDQoJCQk8L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+c3RhcnRfbWludXRlPC90dD4gKGludCkgDQoJCTx1bD4NCgkJCTxsaT4NCgkJCQl0aGUgc3RhcnQgbWludXRlIG9mIHRoZSBjbG9jayBkcm9wZG93bi4gKGRlZmF1bHQgaXMgMCkNCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJCTxlbT4ob3B0aW9uYWwpPC9lbT4gPHR0PmVuZF9taW51dGU8L3R0PiAoaW50KSANCgkJPHVsPg0KCQkJPGxpPg0KCQkJCXRoZSBlbmQgbWludXRlIG9mIHRoZSBjbG9jayBkcm9wZG93biAoZGVmYXVsdCBpcyA1OSkNCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5zaG93X2Nsb2NrPC90dD4gKHRydWUvZmFsc2UpIA0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJc2V0IHRvIGZhbHNlIGlmIG5vIHRpbWUgZHJvcGRvd24gc2hvdWxkIGJlIGRpc3BsYXllZCAoZGVmYXVsdCBpcyB0cnVlKTxiciAvPg0KCQkJCTxlbT48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IElmIHNldCB0byBmYWxzZSAwMDowMCBvJiMwMzk7Y2xvY2sgd2lsbCBiZSB1c2VkPC9lbT4NCgkJCTwvbGk+DQoJCTwvdWw+DQoJCTxiciAvPg0KCTwvbGk+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5kYXRlX2Zvcm1hdDwvdHQ+IChzdHJpbmcpIA0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJVGhlIHN0cmZ0aW1lIGRhdGUgZm9ybWF0IHRvIHNob3cgaW4gZnJvbnRlbmQuDQoJCQk8L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KPC91bD4NCjxwPjxzdHJvbmc+UGFyYW1zIG9mIGJsb2NrdHlwZSAmcXVvdDttdWx0aV9pbnB1dCZxdW90Ozo8L3N0cm9uZz48L3A+DQo8dWw+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD5pbnB1dHM8L3R0PiAoY3N2IG9mIGlucHV0IGlkcyB5b3UgY3JlYXRlZCBpbiB0aGUgYmFja2VuZCkgDQoJCTxiciAvPjxiciAvPg0KCTwvbGk+DQoJPGxpPg0KCQk8ZW0+KG9wdGlvbmFsKTwvZW0+IDx0dD52YWx1ZV9kZWxpbWl0ZXI8L3R0PiAoYW55IHN0cmluZykgDQoJCTx1bD4NCgkJCTxsaT4NCgkJCQlUaGlzIGRlZmluZXMgYSBzdHJpbmcgdGhhdCBkZXZpZGVzIHRoZSB2YWx1ZXMgb2YgdGhlIGlucHV0cyBvZiBvbmUgbXVsdGlfaW5wdXQgd2hlbiBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlLjxiciAvPg0KCQkJCURlZmF1bHQgaXMgJnF1b3Q7JmFtcDtsdDshLS0gbXVsdGlfaW5wdXRfdmFsdWVfZGVsbGltaXRlciAtLSZhbXA7Z3Q7JnF1b3Q7DQoJCQk8L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPGVtPihvcHRpb25hbCk8L2VtPiA8dHQ+aW5wdXRfZGVsaW1pdGVyPC90dD4gKGFueSBzdHJpbmcpIA0KCQk8dWw+DQoJCQk8bGk+DQoJCQkJVGhpcyBkZWZpbmVzIGEgc3RyaW5nIHRoYXQgZGV2aWRlcyB0aGUgbXVsdGlfaW5wdXRzIHlvdSBkZWZpbmVkIGZvciB0aGlzIGNvbnRlbnQgYmxvY2sgd2hlbiBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlLjxiciAvPg0KCQkJCURlZmF1bHQgaXMgJnF1b3Q7JmFtcDtsdDshLS0gbXVsdGlfaW5wdXRfZGVsbGltaXRlciAtLSZhbXA7Z3Q7JnF1b3Q7DQoJCQk8L2xpPg0KCQk8L3VsPg0KCQk8YnIgLz4NCgk8L2xpPg0KCTxsaT4NCgkJPHA+PHN0cm9uZz5XaGF0IGlzIGEgbXVsdGlfaW5wdXQgZm9yPzwvc3Ryb25nPjwvcD4NCgkJPHA+QSBtdWx0aV9pbnB1dCBibG9jayBpcyBhIGNvbnRlbnQgYmxvY2sgdGhhdCBjb25zaXN0cyBvZiBkaWZmZXJlbnQgaW5wdXQgZmllbGRzLiA8YnIgLz4NCgkJWW91IGNhbiBkZWZpbmUgdGhlbSBpbiB0aGUgbW9kdWxlIGFkbWluaXN0cmF0aW9uIHVzaW5nIHRoZSBzYW1lIHN5bnRheCB5b3UgdXNlIGluIGEgdGVtcGxhdGUgd2hlbiBkZWZpbmluZyBhIGNvbnRlbnQgYmxvY2suPGJyIC8+DQoJCU11bHRpIGlucHV0cyBjYW4gYmUgdXNlZCBpZiB5b3Ugd2FudCB0byBzdG9yZSBkaWZmZXJlbnQgdmFsdWVzIGluIG9uZSBjb250ZW50IGJsb2NrIGFuZCBwcm92aWRlIGRpZmZlcmVudCBpbnB1dCB0eXBlcyBmb3IgZWFjaCB2YWx1ZXMuPGJyIC8+DQoJCVRoaXMgY2FuIGJlIHVzZWZ1bGwgaWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgZHJvcGRvd24gdG8gc2VsZWN0IGEgbW9kdWxlIHRvIGJlIHNob3duIGluIGZyb250ZW5kIGFuZCB0ZXh0IGlucHV0IHRvIGRlZmluZSB0aGUgbW9kdWxlIHBhcmFtZXRlcnMuPGJyIC8+DQoJCUV4YW1wbGUgZm9yIGEgbXVsdGlfaW5wdXQgaW4gcGFnZSB0ZW1wbGF0ZTo8L3A+DQoJCTxwcmU+DQoJCTxjb2RlPg0KCQl7Y29udGVudCBibG9jaz0mcXVvdDttb2R1bGUmcXVvdDsgbGFiZWw9JnF1b3Q7UGFnZSBtb2R1bGVzJnF1b3Q7IGJsb2NrX3R5cGU9JnF1b3Q7bXVsdGlfaW5wdXQmcXVvdDsgaW5wdXRzPSZxdW90O21vZHVsZSxtb2R1bGUsbW9kdWxlLG1vZHVsZSZxdW90O30NCgkJPC9jb2RlPg0KCQk8L3ByZT4NCgkJPHA+RXhhbXBsZSBmb3IgdGhlIGRlZmluaXRpb24gb2YgdGhlIG11bHRpX2lucHV0IG5hbWVkICZxdW90O21vZHVsZSZxdW90Ozo8L3A+DQoJCTxwcmU+DQoJCTxjb2RlPg0KCQl7Y29udGVudCBibG9jaz0mcXVvdDttb2R1bGUgc2VsZWN0aW9uJnF1b3Q7IGJsb2NrX3R5cGU9JnF1b3Q7ZHJvcGRvd24mcXVvdDsgaXRlbXM9JnF1b3Q7fE5ld3N8R2FsbGVyeXxNZW51JnF1b3Q7fQ0KCQl7Y29udGVudCBibG9jaz0mcXVvdDttb2R1bGUgcGFyYW1zJnF1b3Q7IGJsb2NrX3R5cGU9JnF1b3Q7dGV4dCZxdW90OyBvbmVsaW5lPXRydWV9DQoJCTwvY29kZT4NCgkJPC9wcmU+DQoJCTxwPldoYXQgaGFwcGVucyBpZiB5b3UgZWRpdCBhIHBhZ2U/PC9wPg0KCQk8cD5JdCB3aWxsIHNob3cgeW91IGEgZmllbGRzZXQgd2l0aCBsZWdlbmQgJnF1b3Q7UGFnZSBtb2R1bGVzJnF1b3Q7LiA8YnIgLz4NCgkJSW5zaWRlIHRoaXMgZmllbGRzZXQgaXQgc2hvd3MgdGhlIG11bHRpX2lucHV0IG5hbWVkICZxdW90O21vZHVsZSZxdW90OyBmb3VyIHRpbWVzLjxiciAvPg0KCQlUaGF0IG1lYW5zIHlvdSBzZWUgZm91ciBsaW5lcyB3aXRoIHR3byBpbnB1dCBmaWVsZHMuIEEgZHJvcGRvd24gYW5kIGEgdGV4dCBpbnB1dC48L3A+DQoJCTxwPldoYXQgaGFwcGVucyBpZiB5b3Ugc2F2ZSBhIHBhZ2U/PC9wPg0KCQk8cD5UaGUgbW9kdWxlIHN0b3JlcyB0aGUgdmFsdWVzIGFzIG9uZSBzaW5nbGUgY29udGVudCBwcm9wZXJ0eSAoYWthIGNvbnRlbnRibG9jaykgYW5kIHNlcGFyYXRlcyB0aGUgaW5wdXRzIGJ5IGEgZ2l2ZW4gZGVsaW1pdGVyLjxiciAvPg0KCQlMZXQmIzAzOTtzIGFzc3VtZSB5b3Ugc2VsZWN0IHRoZSBOZXdzIG1vZHVsZSBmb3VyIHRpbWVzIHdpdGggZGlmZmVyZW50IG1vZHVsZSBwYXJhbXMgbGlrZSBjYXRlZ29yeT0mcXVvdDsxJnF1b3Q7LCBjYXRlZ29yeT0mcXVvdDsyJnF1b3Q7LCBjYXRlZ29yeT0mcXVvdDszJnF1b3Q7LCBjYXRlZ29yeT0mcXVvdDs0JnF1b3Q7LjxiciAvPg0KCQlJbiB0aGUgZGF0YWJhc2UgaXQgc3RvcmVzIHRoaXMgc3RyaW5nOjwvcD4NCgkJPHByZT4NCgkJPGNvZGU+DQoJCU5ld3MmYW1wO2x0OyEtLSBtdWx0aV9pbnB1dF92YWx1ZV9kZWxpbWl0ZXIgLS0mYW1wO2d0O2NhdGVnb3J5PSZxdW90OzEmcXVvdDsmYW1wO2x0OyEtLSBtdWx0aV9pbnB1dF9kZWxpbWl0ZXIgLS0mYW1wO2d0OzxiciAvPg0KCQlOZXdzJmFtcDtsdDshLS0gbXVsdGlfaW5wdXRfdmFsdWVfZGVsaW1pdGVyIC0tJmFtcDtndDtjYXRlZ29yeT0mcXVvdDsyJnF1b3Q7JmFtcDtsdDshLS0gbXVsdGlfaW5wdXRfZGVsaW1pdGVyIC0tJmFtcDtndDs8YnIgLz4NCgkJTmV3cyZhbXA7bHQ7IS0tIG11bHRpX2lucHV0X3ZhbHVlX2RlbGltaXRlciAtLSZhbXA7Z3Q7Y2F0ZWdvcnk9JnF1b3Q7MyZxdW90OyZhbXA7bHQ7IS0tIG11bHRpX2lucHV0X2RlbGltaXRlciAtLSZhbXA7Z3Q7PGJyIC8+DQoJCU5ld3MmYW1wO2x0OyEtLSBtdWx0aV9pbnB1dF92YWx1ZV9kZWxpbWl0ZXIgLS0mYW1wO2d0O2NhdGVnb3J5PSZxdW90OzQmcXVvdDsNCgkJPC9jb2RlPg0KCQk8L3ByZT4NCgkJPHA+SW4geW91ciBwYWdlIHRlbXBsYXRlIHlvdSBjYW4gZXhwbG9kZSB0aGUgY29udGVudCBieSB0aGUgZGVsaW1pdGVycyBhbmQgY2FsbCB0aGUgc2VsZWN0ZWQgbW9kdWxlcy48L3A+DQoJCTxwPkZ1bGwgRXhhbXBsZTo8L3A+DQoJCTxwcmU+DQoJCTxjb2RlPg0KCQl7KiBkZWZpbmUgdGhlIGNvbnRlbnQgYmxvY2sgKn0NCgkJe2NvbnRlbnQgYmxvY2s9JnF1b3Q7bXlfbW9kdWxlcyZxdW90OyBibG9ja190eXBlPSZxdW90O211bHRpX2lucHV0JnF1b3Q7IGlucHV0cz0mcXVvdDtNb2R1bGUsTW9kdWxlLE1vZHVsZSxNb2R1bGUmcXVvdDsgYXNzaWduPSZxdW90O21vZHVsZXMmcXVvdDt9DQoJCQ0KCQl7KiBleHBsb2RlIGJsb2NrIGNvbnRlbnQgaW4gYW4gYXJyYXkgdG8gZ2V0IHRoZSBpbnB1dCBncm91cHMgKn0NCgkJe2Fzc2lnbiB2YXI9bW9kdWxlcyB2YWx1ZT0mcXVvdDsmYW1wO2x0OyEtLSBtdWx0aV9pbnB1dF9kZWxpbWl0ZXIgLS0mYW1wO2d0OyZxdW90O3xleHBsb2RlOiRtb2R1bGVzfQ0KCQkNCgkJeyogbG9vcCB0aHJvdWdoIHRoZSBzZWxlY3RlZCBtb2R1bGVzICp9DQoJCXtmb3JlYWNoIGZyb209JG1vZHVsZXMgaXRlbT0mcXVvdDttb2R1bGUmcXVvdDt9DQoJCQl7aWYgJG1vZHVsZSAhPSAmIzAzOTsmIzAzOTt9DQoJCQkNCgkJCQl7KiBleHBsb2RlIHRoZSBpbnB1dCB2YWx1ZXMgaW4gbW9kdWxuYW1lIGFuZCBtb2R1bGUgcGFyYW1ldGVycyAqfQ0KCQkJCXthc3NpZ24gdmFyPW1vZHVsZV9pdGVtcyB2YWx1ZT0mcXVvdDsmYW1wO2x0OyEtLSBtdWx0aV9pbnB1dF92YWx1ZV9kZWxpbWl0ZXIgLS0mYW1wO2d0OyZxdW90O3xleHBsb2RlOiRtb2R1bGV9DQoJCQkJDQoJCQkJe2lmJG1vZHVsZV9pdGVtc1swXSAhPSAmIzAzOTsmIzAzOTt9DQoJCQkJDQoJCQkJCXsqIGNhbGwgdGhlIG1vZHVsZSAqfQ0KCQkJCQl7aWYgaXNzZXQoJG1vZHVsZV9pdGVtc1sxXSl9DQoJCQkJCQl7ZXZhbCB2YXI9JHNtYXJ0eS5sZGVsaW18Y2F0OiYjMDM5O2Ntc19tb2R1bGUgbW9kdWxlPSZxdW90OyYjMDM5O3xjYXQ6JG1vZHVsZV9pdGVtc1swXXxjYXQ6JiMwMzk7JnF1b3Q7ICYjMDM5O3xjYXQ6JG1vZHVsZV9pdGVtc1sxXXxjYXQ6JHNtYXJ0eS5yZGVsaW19DQoJCQkJCXtlbHNlfQ0KCQkJCQkJe2V2YWwgdmFyPSRzbWFydHkubGRlbGltfGNhdDomIzAzOTtjbXNfbW9kdWxlIG1vZHVsZT0mcXVvdDsmIzAzOTt8Y2F0OiRtb2R1bGVfaXRlbXNbMF18Y2F0OiYjMDM5OyZxdW90OyYjMDM5O3xjYXQ6JHNtYXJ0eS5yZGVsaW19DQoJCQkJCXsvaWZ9DQoJCQkJCQ0KCQkJCXsvaWZ9DQoJCQkJDQoJCQl7L2lmfQ0KCQkNCgkJey9mb3JlYWNofQ0KCQk8L2NvZGU+DQoJCTwvcHJlPg0KCTwvbGk+DQo8L3VsPg0KDQo8aDM+U3VwcG9ydDwvaDM+DQo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+DQo8dWw+DQoJPGxpPlRoZSBwcm9qZWN0cyBob21lcGFnZSBpcyA8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2NvbnRlbnQyLyI+aHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9jb250ZW50Mi88L2E+PC9saT4NCgk8bGk+QWRkaXRpb25hbCBkaXNjdXNzaW9uIG9mIHRoaXMgbW9kdWxlIG1heSBhbHNvIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmciPkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LjwvbGk+DQo8L3VsPg0KPGJyIC8+DQo8cD5GZWVsIGZyZWUgcmVwb3J0IGFueSBraW5kIG9mIGZlZWRiYWNrLjwvcD4NCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPg0KPHA+DQoJQXMgcGVyIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMtaXMuPGJyIC8+DQoJVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsPGJyIC8+DQoJYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Y8YnIgLz4NCglNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuPGJyIC8+DQoJU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLjxiciAvPg0KCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlPGJyIC8+DQoJYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmU8YnIgLz4NCglGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQTxiciAvPg0KCU9yIHJlYWQgaXQgb25saW5lOiA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPmh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTDwvYT48YnIgLz4NCglQbGVhc2UgcmVhZCB0aGUgdGV4dCBvZiB0aGUgbGljZW5zZSBmb3IgdGhlIGZ1bGwgZGlzY2xhaW1lci4NCjwvcD4NCjxwPkNvcHlyaWdodCAmYW1wO2NvcHk7IDIwMTAsIEdlb3JnIEJ1c2NoIChOYU4pLiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+DQo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPg0KPGJyIC8+JzsKJGxhbmdbJ2NoYW5nZWxvZyddID0gJzxiciAvPg0KPHA+PHN0cm9uZz5Nb2R1bGUgcmVsZWFzZXM8L3N0cm9uZz4uLi48L3A+DQo8dWw+DQoJPGxpPjxwPjxzdHJvbmc+MC43IChOb3YgMjAxMCk6PC9zdHJvbmc+PC9wPg0KCQk8dWw+DQoJCQk8bGk+PHA+QnVnZml4ZXM6PC9wPg0KCQkJCTx1bD4NCgkJCQkJPGxpPjxwPi0gY29tcGF0aWJpbGl0eSBidWdmaXhlcyBmb3IgQ01TbXMgMS45KyAobmVlZHMgQ01TbXMgMS45IG1pbmltdW0gbm93KTwvcD48L2xpPg0KCQkJCTwvdWw+DQoJCQk8L2xpPg0KCQkJPGxpPjxwPkZlYXR1cmVzOjwvcD4NCgkJCQk8dWw+DQoJCQkJPGxpPjxwPi0gYWRkZWQgc3VwcG9ydCBvZiB7Y29udGVudF9tb2R1bGV9IHRhZzwvcD48L2xpPg0KCQkJCTwvdWw+DQoJCQk8L2xpPg0KCQk8L3VsPg0KCTwvbGk+DQoJPGxpPjxwPjxzdHJvbmc+MC42LjEgKE5vdiAyMDEwKTo8L3N0cm9uZz48L3A+DQoJCTx1bD4NCgkJCTxsaT48cD5CdWdmaXhlczo8L3A+DQoJCQkJPHVsPg0KCQkJCQk8bGk+PHA+LSBzZXZlcmFsIGJ1Z2ZpeGVzPC9wPjwvbGk+DQoJCQkJCTxsaT48cD4tIGNvbXBhdGliaWxpdHkgYnVnZml4ZXMgZm9yIENNU21zIDEuOTwvcD48L2xpPg0KCQkJCTwvdWw+DQoJCQk8L2xpPg0KCQkJPGxpPjxwPkZlYXR1cmVzOjwvcD4NCgkJCQk8dWw+DQoJCQkJCTxsaT48cD4tIGFkZGVkIGJsb2NrX3R5cGUgbXVsdGlfaW5wdXQ8L3A+PC9saT4NCgkJCQk8L3VsPg0KCQkJPC9saT4NCgkJPC91bD4NCgk8L2xpPg0KCTxsaT48cD48c3Ryb25nPjAuNiAoT2N0IDIwMTApOjwvc3Ryb25nPjwvcD4NCgkJPHVsPg0KCQkJPGxpPjxwPkJ1Z2ZpeGVzOjwvcD4NCgkJCQk8dWw+DQoJCQkJCTxsaT48cD4tIHNldmVyYWwgYnVnZml4ZXM8L3A+PC9saT4NCgkJCQk8L3VsPg0KCQkJPC9saT4NCgkJCTxsaT48cD5GZWF0dXJlczo8L3A+DQoJCQkJPHVsPg0KCQkJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbSBibG9ja19ncm91cDwvcD48L2xpPg0KCQkJCTwvdWw+DQoJCQk8L2xpPg0KCQkJPGxpPjxwPk1pc2M6PC9wPg0KCQkJCTx1bD4NCgkJCQkJPGxpPjxwPi0gUmVtb3ZlZCBmaWxlIHBpY2tlciAoYW5kIGFzc29jaWF0ZWQgYmxvY2tfdHlwZXMgaW1hZ2UvZmlsZSkgLSB1c2UgR0JGaWxlUGlja2VyIGluc3RlYWQuPC9wPjwvbGk+DQoJCQkJPC91bD4NCgkJCTwvbGk+DQoJCTwvdWw+DQoJPC9saT4NCgk8bGk+PHA+PHN0cm9uZz4wLjUgKFNlcHQgMjAxMCk6PC9zdHJvbmc+PC9wPg0KCQk8dWw+DQoJCQk8bGk+PHA+QnVnZml4ZXM6PC9wPg0KCQkJCTx1bD4NCgkJCQkJPGxpPjxwPmZpeGVkIGJ1ZyBpdGVtICM1MjkyIChtZW1vcnkgaXNzdWUpPC9wPjwvbGk+DQoJCQkJCTxsaT48cD5maXhlZCBidWcgaXRlbSAjNTI1NCAoZGlzYWJsZSB3eXNpd3lnIG5vdCB3b3JraW5nKTwvcD48L2xpPg0KCQkJCQk8bGk+PHA+Zml4ZWQgYnVnIGl0ZW0gIzUzMTAgKHVybG9ubHkgbm90IHdvcmtpbmcpPC9wPjwvbGk+DQoJCQkJCTxsaT48cD5maXhlZCBidWcgaXRlbSAjNTMxMSAoaW1hZ2UgcGF0aHMgbm90IHN0b3JlZCAmIzAzOTtjb3JyZWN0bHkmIzAzOTspPC9wPjwvbGk+DQoJCQkJPC91bD4NCgkJCTwvbGk+DQoJCQk8bGk+PHA+RmVhdHVyZXM6PC9wPg0KCQkJCTx1bD4NCgkJCQkJPGxpPjxwPmFkZGVkIGZlYXR1cmUgcmVxdWVzdCAjNTI2MSAoQWRkIHNvcnQgdG8gaW1hZ2UgdHlwZSAtIG5vdGljZSB0aGUgY2hhbmdlIG9mIHBhcmFtIGZpbHRlcik8L3A+PC9saT4NCgkJCQkJPGxpPjxwPmFkZGVkIHBhcmFtcyBleGNsdWRlX3ByZWZpeCwgaW5jbHVkZV9wcmVmaXgsIGV4Y2x1ZGVfc3VmaXgsIGluY2x1ZGVfc3VmaXg8L3A+PC9saT4NCgkJCQkJPGxpPjxwPmFkZGVkIGZlYXR1cmUgcmVxdWVzdCAjNTI1MyAoVGV4dCBpbnB1dCB0byBkZWZpbmUgYWRkIHBhcmFtcyB0byByZWRpcmVjdCBmdW5jdGlvbik8L3A+PC9saT4NCgkJCQkJPGxpPjxwPmFkZGVkIGZlYXR1cmUgcmVxdWVzdCAjNTI0MCAoRGVmYXVsdCB2YWx1ZXMgb2YgQWR2YW5jZWRDb250ZW50IHBhZ2Ugb3B0aW9ucyk8L3A+PC9saT4NCgkJCQkJPGxpPjxwPmFkZGVkIGZlYXR1cmUgcmVxdWVzdCAjNTI0MSAocHV0IEZldUFjY2VzcyBpbiBCbG9ja3RhYik8L3A+PC9saT4NCgkJCQk8L3VsPg0KCQkJPC9saT4NCgkJCTxsaT48cD5NaXNjOjwvcD4NCgkJCQk8dWw+DQoJCQkJCTxsaT48cD4tIEFkdmFuY2VkQ29udGVudCBvcHRpb25zIGFyZSBzaG93biBpbiBzZXBhcmF0ZSB0YWI8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gQWRkZWQgbmV3IHBlcm1pc3Npb24gdG8gbWFuYWdlIHRoZSBBZHZhbmNlZENvbnRlbnQgb3B0aW9ucyB0YWI8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gcmVtb3ZlZCBwYXJhbSBmaWx0ZXIgKHVzZSBuZXcgcGFyYW1zIGluc3RlYWQpPC9wPjwvbGk+DQoJCQkJCTxsaT48cD4tIHBhdGggdG8gZmlsZXMgYXJlIHN0b3JlZCByZWxhdGl2ZSB0byB0aGUgdXBsb2FkcyBkaXI8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gcGFyYW0gZGlyIG9mIGJsb2NrIHR5cGUgZmlsZS9pbWFnZSBuZWVkcyB0byBiZSByZWxhdGl2ZSB0byB0aGUgdXBsb2FkcyBkaXIgb25seSAodGhlcmUgaXMgbm8gaW1hZ2UgdXBsb2FkcyBkaXIgdXNlZCBhbnltb3JlKTwvcD48L2xpPg0KCQkJCTwvdWw+DQoJCQk8L2xpPg0KCQk8L3VsPg0KCTwvbGk+DQoJPGxpPjxwPjxzdHJvbmc+MC40LjEgKEF1Z3VzdCAyMDEwKTo8L3N0cm9uZz48L3A+DQoJCTx1bD4NCgkJCTxsaT48cD5CdWdmaXhlczo8L3A+DQoJCQkJPHVsPg0KCQkJCQk8bGk+PHA+LSAjNTE1MTogZml4ZWQgc3R5bGVzaGVldCBpc3N1ZSB3aXRoIGV4cGFuZC9jb2xsYXBzZSBidXR0b25zIG9mIGNvbnRlbnQgYmxvY2tzIGluIElFL1NhZmFyaS48L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gIzUxNjI6IFBIUCB3YXJuaW5ncyBpZiBiYWNrZW5kIHVzZXJzIHdpdGhvdXQgcGVybWlzc2lvbiAmcXVvdDtNYW5hZ2UgQWxsIEFkdmFuY2VkQ29udGVudCBCbG9ja3MmcXVvdDsgb3BlbiBhbiBhZHZhbmNlZCBjb250ZW50IHBhZ2UgYW5kIG11bHRpcGxlIGNvbnRlbnQgYmxvY2tzIG9mIHNhbWUgbmFtZSB3ZXJlIHVzZWQgaW4gdGVtcGxhdGUuPC9wPjwvbGk+DQoJCQkJCTxsaT48cD4tIGZpeGVkIGJ1ZyB3aGVyZSBleHRyYSBmaWVsZHMgY291bGQgbm90IGJlIHVwZGF0ZWQuPC9wPjwvbGk+DQoJCQkJCTxsaT48cD4tIGZpeGVkIGJ1ZyB3aGVyZSBmZXUgYWNjZXNzIGRpZCBub3Qgd29yay48L3A+PC9saT4NCgkJCQk8L3VsPg0KCQkJPC9saT4NCgkJCTxsaT48cD5GZWF0dXJlczo8L3A+DQoJCQkJPHVsPg0KCQkJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbSAmcXVvdDtkZWxldGUmcXVvdDsgdG8gbGV0IHVzZXJzIGRlbGV0ZSBmaWxlcyBldmVuIGlmIG5vIHBlcm1pc3Npb24gJnF1b3Q7TW9kaWZ5IEZpbGVzJnF1b3Q7PC9wPjwvbGk+DQoJCQkJCTxsaT48cD4tIGFkZGVkIHBhcmFtICZxdW90O2NyZWF0ZV9kaXJzJnF1b3Q7IHRvIGxldCB1c2VycyBjcmVhdGVfZGlycyBldmVuIGlmIG5vIHBlcm1pc3Npb24gJnF1b3Q7TW9kaWZ5IEZpbGVzJnF1b3Q7PC9wPjwvbGk+DQoJCQkJCTxsaT48cD4tIGFkZGVkIG5ldyBibG9ja3R5cGUgJnF1b3Q7bm90ZSZxdW90OyB0byBjcmVhdGUgc29tZSBzaW5nbGUgbm90ZXMgZm9yIHlvdXIgZWRpdG9yczwvcD48L2xpPg0KCQkJCTwvdWw+DQoJCQk8L2xpPg0KCQkJPGxpPjxwPk1pc2M6PC9wPg0KCQkJCTx1bD4NCgkJCQkJPGxpPjxwPi0gcmVtb3ZlZCBkZXBlbmRlbmN5IG9mIEZpbGVNYW5hZ2VyPC9wPjwvbGk+DQoJCQkJCTxsaT48cD4tIGJsb2NrIG9mIHR5cGUgZmlsZSBvciBpbWFnZSBzdG9yZXMgcmVsYXRpdmUgdXJsIG5vdzwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSBibG9jayB0eXBlIGltYWdlIHNob3dzIHRodW1ibmFpbCBpbiBiYWNrZW5kIHByZXZpZXcgaW5zdGVhZCBvZiBmdWxsIGltYWdlPC9wPjwvbGk+DQoJCQkJPC91bD4NCgkJCTwvbGk+DQoJCTwvdWw+DQoJPC9saT4NCgk8bGk+PHA+PHN0cm9uZz4wLjQgKEp1bHkgMjAxMCk6PC9zdHJvbmc+PC9wPg0KCQk8dWw+DQoJCQk8bGk+PHA+SW1wb3J0YW50IG5vdGljZTo8L3A+DQoJCQkJPHVsPg0KCQkJCQk8bGk+PHA+LSBjaGFuZ2VkIHBhcmFtICZxdW90O3R5cGUmcXVvdDsgdG8gJnF1b3Q7YmxvY2tfdHlwZSZxdW90OyBzaW5jZSBpdCBpbnRlcmZlcmVzIHdpdGgge2NvbnRlbnRfbW9kdWxlfSB0YWc8L3A+PC9saT4NCgkJCQk8L3VsPg0KCQkJPC9saT4NCgkJCTxsaT48cD5CdWdmaXhlczo8L3A+DQoJCQkJPHVsPg0KCQkJCQk8bGk+PHA+LSAjNTEwMTogcGFnZV90YWIgJnF1b3Q7b3B0aW9ucyZxdW90OyB3YXMgc2hvd24gdG8gdXNlcnMgd2l0aCBubyBwZXJtaXNzaW9uIHRvIGVkaXQgcGFnZSBvcHRpb25zIGlmIGEgY29udGVudCBibG9jayB3YXMgYXNzaWduZWQgdG8gdGhhdCB0YWIuPC9wPjwvbGk+DQoJCQkJCTxsaT48cD4tICM1MDk3OiBsaW5rIHRvIG1pc3NpbmcgY3NzIHJlbW92ZWQ8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gZml4ZWQgbWltZS10eXBlIGlzc3VlIChhZGRlZCBwcmVmZXJlbmNlIHRvIHRvZ2dsZSBtaW1lLXR5cGUgdXNhZ2Ugb24vb2ZmKTwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSBmaXhlZCBwYXRoIGlzc3VlIHdoZXJlIHRodW1ibmFpbHMgd2VyZSBub3Qgc2hvd248L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gZml4ZWQgY29tcGF0aWJpbGl0eSB3aXRoIENNU21zIDEuODwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSBvdGhlciBtaW5vciBidWdmaXhlczwvcD48L2xpPg0KCQkJCTwvdWw+DQoJCQk8L2xpPg0KCQkJPGxpPjxwPkZlYXR1cmVzOjwvcD4NCgkJCQk8dWw+DQoJCQkJCTxsaT48cD4tIGFkZGVkIE1MRSBzdXBwb3J0PC9wPjwvbGk+DQoJCQkJCTxsaT48cD4tIGFkZGVkIHBhcmFtICZxdW90O3Nob3dfY2xvY2smcXVvdDsgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIHRpbWUgZHJvcGRvd24gb2YgYmxvY2t0eXBlcyAmcXVvdDtkYXRlJnF1b3Q7IGluIGJhY2tlbmQ8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gYWRkZWQgcGFyYW0gJnF1b3Q7ZGF0ZV9mb3JtYXQmcXVvdDsgdG8gZm9ybWF0IHRpbWVzdGFtcCBvZiBibG9ja3R5cGVzICZxdW90O2RhdGUmcXVvdDsgaW4gZnJvbnRlbmQ8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gYWRkZWQgcGFyYW0gJnF1b3Q7ZGVzY3JpcHRpb24mcXVvdDs8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gYWRkZWQgYnVsayBmdW5jdGlvbiB0byBzZXQgYWxsIHBhZ2VzIHRvIEFkdmFuY2VkQ29udGVudDwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSBhZGRlZCBjb21wYXRpYmlsaXR5IHdpdGgge2NvbnRlbnRfbW9kdWxlfSB0YWc8L3A+PC9saT4NCgkJCQk8L3VsPg0KCQkJPC9saT4NCgkJPC91bD4NCgk8L2xpPg0KCTxsaT48cD48c3Ryb25nPjAuMy40IChKdW5lIDIwMTApOjwvc3Ryb25nPjwvcD4NCgkJPHVsPg0KCQkJPGxpPjxwPkJ1Z2ZpeGVzOjwvcD4NCgkJCQk8dWw+DQoJCQkJCTxsaT48cD4tICM1MDQ1OiBXaGVuIHN3aXRjaGluZyBmcm9tIENvbnRlbnQgLT4gQWR2YW5jZWQgQ29udGVudCBsb3RzIG9mIFBIUCBlcnJvcnM8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gIzUwNTY6IHBhZ2VfdGFicyBub3Qgd29ya2luZyBmb3IgdXNlcnMgd2l0aG91dCBwZXJtaXNzaW9uICZxdW90O01hbmFnZSBBbGwgQ29udGVudCZxdW90OzwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSAjNTA3MzogaW5jb3JyZWN0IGRpc3BsYXkgb2YgZmlsZXMgd2hlbiBvcGVuaW5nIGZpbGVwaWNrZXI8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gZml4ZWQgbWlub3IgYnVnIHdoZXJlIHRoZSBvcHRpb24gJnF1b3Q7YWxsb3dfbm9uZSZxdW90OyBvZiBjb250ZW50IGJsb2NrcyBvZiB0eXBlIGltYWdlL2ZpbGUgd2FzIG5vdCBzaG93biB3aGVuIHRlbXBsYXRlIGhhcyBiZWVuIGVkaXRlZDwvcD48L2xpPg0KCQkJCTwvdWw+DQoJCQk8L2xpPg0KCQkJPGxpPjxwPkZlYXR1cmVzOjwvcD4NCgkJCQk8dWw+DQoJCQkJCTxsaT48cD4tIGFkZGVkIGZpbGVtYW5hZ2VtZW50IGFuZCB1cGxvYWQgZnVuY3Rpb25zIHRvIGNvbnRlbnQgYmxvY2tzIG9mIHR5cGUgaW1hZ2UvZmlsZTwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSBhZGRlZCBicmVhZGN1bWJzIHRvIGZpbGVwaWNrZXI8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gYWRtaW5zIG1heSBicm93c2UgdGhlIGVudGlyZSBkaXIgdHJlZSBpbiBmaWxlcGlja2VyIGZpbGUgYnJvd3NlciByZWdhcmRsZXNzIG9mIHRlbXBsYXRlIHBhcmFtczwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSBhZGRlZCBtaW1lIHR5cGUgY2hlY2tpbmcgdG8gZ2V0IGZpbGUgdHlwZTwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSBhZGRlZCByYXd1cmxlbmNvZGUgaW4gc3JjIGF0dHJpYnMgdG8gZGlzcGxheSBpbWFnZXMgd2l0aCB3ZWlyZCBmaWxlbmFtZXMuPC9wPjwvbGk+DQoJCQkJPC91bD4NCgkJCTwvbGk+DQoJCQk8bGk+PHA+bWlzY2VsbGFuZW91czo8L3A+DQoJCQkJPHVsPg0KCQkJCQk8bGk+PHA+LSByZW1vdmVkIE9PUCBzdHVmZiAocHJpdmF0ZS9wdWJsaWMvcHJvdGVjdGVkKSB0byBnYWluIG1vcmUgY29tcGF0aWJpbGl0eSB3aXRoIFBIUDQ8L3A+PC9saT4NCgkJCQkJPGxpPjxwPi0gY2hhbmdlZCBhamF4IGZ1bmN0aW9ucyB0byByZXR1cm4geG1sIHZhbHVlczwvcD48L2xpPg0KCQkJCQk8bGk+PHA+LSByZW1vdmVkIHVzYWdlIG9mIEltYWdlTWFuYWdlciBvbmNlIGFuZCBmb3IgYWxsLiAoY2F1c2VkIG9ubHkgdHJvdWJsZSk8L3A+PC9saT4NCgkJCQk8L3VsPg0KCQkJPC9saT4NCgkJPC91bD4NCgk8L2xpPg0KCTxsaT48cD48c3Ryb25nPjAuMy4zIChKdW5lIDIwMTApOjwvc3Ryb25nPjwvcD4NCgk8dWw+DQoJCTxsaT48cD5CdWdmaXhlczo8L3A+DQoJCQk8dWw+DQoJCQkJPGxpPjxwPi0gYWxpYXMgd2FzIG5vdCBhbHdheXMgY29udmVydGVkIHByb3Blcmx5PC9wPjwvbGk+DQoJCQkJPGxpPjxwPi0gdW5zdWJtaXR0ZWQgY29udGVudCBnb3QgbG9zdCBpZiBzd2l0Y2hpbmcgZnJvbSBDb250ZW50IHRvIEFkdmFuY2VkQ29udGVudDwvcD48L2xpPg0KCQkJPC91bD4NCgkJPC9saT4NCgkJPGxpPjxwPkZlYXR1cmVzOjwvcD4NCgkJCTx1bD4NCgkJCQk8bGk+PHA+LSBhZGRlZCBzdGFydC9lbmQgZGF0ZTwvcD48L2xpPg0KCQkJCTxsaT48cD4tIHJlbW92ZWQgdGltZXBpY2tlcjsgcmVwbGFjZWQgYnkgYSBzaW1wbGUgZHJvcGRvd248L3A+PC9saT4NCgkJCQk8bGk+PHA+LSBjb21wYXRpYmlsaXR5IHdpdGgge2NvbnRlbnRfaW1hZ2V9PC9wPjwvbGk+DQoJCQk8L3VsPg0KCQk8L2xpPg0KCTwvdWw+DQoJPGxpPjxwPjxzdHJvbmc+MC4zLjIgKEp1bmUgMjAxMCk6PC9zdHJvbmc+PC9wPg0KCQk8dWw+DQoJCQk8bGk+PHA+LSBmaXhlZCBidWcgd2hlcmUgY2hhbmdpbmcgYmFjayB0byBkZWZhdWx0IGNvbnRlbnQgdHlwZSBvciBjaGFuZ2luZyB0ZW1wbGF0ZSBjYXVzZWQgZmF0YWwgZXJyb3JzPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBmaXhlZCBhIGJ1ZyB3aXRoIHNtYXJ0eSBwcm9jZXNzaW5nIHdoZW4gc2F2aW5nIGEgcGFnZTwvcD48L2xpPg0KCQkJPGxpPjxwPi0gZml4ZWQgYSBidWcgd2l0aCBwcmV2aWV3IHRhYjwvcD48L2xpPg0KCQkJPGxpPjxwPi0gcmUtYWRkZWQgZXhwYW5kL2NvbGxhcHNlIGJ1dHRvbiB0byB0b2dnbGUgY29udGVudCBibG9ja3MgaW4gYmFja2VuZDwvcD48L2xpPg0KCQkJPGxpPjxwPi0gYWRkZWQgcGFyYW1zIGVkaXRvcl9ncm91cHMvZWRpdG9yX3VzZXJzIHRvIHNwZWNpZnkgY2VydGFpbiB1c2Vycy9ncm91cHMgdGhhdCBhcmUgYWxsb3dlZCB0byBlZGl0IGNlcnRhaW4gYmxvY2tzPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSByZW1vdmVkIHBhcmFtcyBzZWxlY3RlZC9jaGVja2VkOyB1c2UgcGFyYW0gZGVmYXVsdCBpbnN0ZWFkPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBibG9jayBpZHMgd2lsbCBiZSBjb252ZXJ0ZWQgZnJvbSBibG9jayBuYW1lIHVzaW5nIGNvcmUgZnVuY3Rpb24gbXVuZ2Vfc3RyaW5nX3RvX3VybCAodG8gcmVtb3ZlIHNwZWNpYWwgY2hhcnMsIHdoaXRlc3BhY2VzLCB1bWxhdXRzIGV0Yy4pPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBmaXhlZCBidWcgb2YgYmxvY2t0eXBlIGRyb3Bkb3duL3NlbGVjdF9tdWx0aXBsZSB3aGVyZSBmaXJzdCBpdGVtIGhhZCBhbiBlbXB0eSBsYWJlbCBpZiBvbmx5IHRoZSBwYXJhbSAmcXVvdDt2YWx1ZXMmcXVvdDsgaXMgdXNlZDwvcD48L2xpPg0KCQkJPGxpPjxwPi0gYWRkZWQgc29tZSB0ZW1wbGF0ZSB2YXJzIG9mIHRoZSBmcm9udGVuZCB0byBiZSBhbHNvIGFjY2Vzc2libGUgaW4gYmFja2VuZCAoZS5nLjogJHBhZ2VfYWxpYXMpPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbSAmcXVvdDthbGxvd19ub25lJnF1b3Q7IHRvIGFsbCBjb250ZW50IGJsb2NrIHR5cGVzIHRvIHNwZWNpZnkgaWYgdGhlIHByZWRlZmluZWQgZGVmYXVsdCB2YWx1ZSB3aWxsIGJlIHVzZWQgaWYgbm8gdmFsdWUgaXMgZW50ZXJlZDwvcD48L2xpPg0KCQkJPGxpPjxwPi0gZml4ZWQgYnVnIHdoZXJlIGVtcHR5IHZhbHVlcyB3ZXJlIG5ldmVyIGJlIHN0b3JlZDwvcD48L2xpPg0KCQkJPGxpPjxwPi0gZml4ZWQgYnVnIHdoZXJlIGRlZmF1bHQgdmFsdWUgaW4gZnJvbnRlbmQgd2FzIGlnbm9yZWQgaWYgdGhlICZxdW90O2FsbG93X25vbmUmcXVvdDsgcGFyYW0gd2FzIGNoYW5nZWQgYWZ0ZXIgYW4gZW1wdHkgdmFsdWUgaGFzIGJlZW4gc3RvcmVkPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbSAmcXVvdDtzb3J0YWJsZV9pdGVtcyZxdW90OyB0byBjcmVhdGUgYSBzb3J0YWJsZSBtdWx0aXBsZSBzZWxlY3QgbGlzdCAoc2VsZWN0IGxpc3Qgd2lsbCByZXN1bHQgaW4gYSB0YWJsZSB3aXRoIGNoZWNrYm94ZXM7IG9ubHkgb3JkZXIgb2Ygc2VsZWN0ZWQgaXRlbXMgd2lsbCBiZSBzdG9yZWQgYW5kIHNob3dlZCBhdCB0aGUgdG9wIG9mIHRoZSBsaXN0OyB1bnNlbGVjdGVkIGl0ZW1zIHdpbGwgYmUgYXBwZW5kZWQgaW4gdGhhdCBvcmRlciB0aGV5IGFyZSBwbGFjZWQgaW4gdGhlIHRlbXBsYXRlKTwvcD48L2xpPg0KCQk8L3VsPg0KCTwvbGk+DQoJPGxpPjxwPjxzdHJvbmc+MC4zLjEgKE1heSAyMDEwKTo8L3N0cm9uZz48L3A+DQoJCTx1bD4NCgkJCTxsaT48cD4tIHJlbW92ZWQgdGhlIHJlb3JkZXJpbmcgc3R1ZmYgZm9yIG5vdyAoY2F1c2VzIHRyb3VibGUgYXQgdGhpcyB0aW1lKTwvcD48L2xpPg0KCQkJPGxpPjxwPi0gcmVtb3ZlZCB0aGUgZGIgc3R1ZmYgKHBhcmFtcyBvZiBjb250ZW50IGJsb2NrcyB0aGF0IGFyZSBkZWZpbmVkIGluIHRlbXBsYXRlIHdvbiYjMDM5O3QgYmUgc2F2ZWQgaW4gbW9kdWxlIGRiIHRhYmxlIGFueW1vcmUgLT4gaG9wZWZ1bGx5IHNwZWVkIHVwIGxvYWRpbmcgdGltZSk8L3A+PC9saT4NCgkJCTxsaT48cD4tIGZpeGVkIGEgYnVnIHdpdGggZHVwbGljYXRlIGNvbnRlbnQgYmxvY2tzPC9wPjwvbGk+DQoJCTwvdWw+DQoJPC9saT4NCgk8bGk+DQoJCTxwPjxzdHJvbmc+QWR2YW5jZWRDb250ZW50IDAuMyAoTWF5IDIwMTApOjwvc3Ryb25nPjwvcD4NCgkJPHVsPg0KCQkJPGxpPjxwPi0gcmV3cml0ZSBjb2RlPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBidWdmaXhlczwvcD48L2xpPg0KCQkJPGxpPjxwPi0gcmVuYW1lZCB0byBBZHZhbmNlZENvbnRlbnQ8L3A+PC9saT4NCgkJCTxsaT48cD4tIHVzaW5nIHNlcGFyYXRlIG1vZHVsZSB0ZW1wbGF0ZSBub3cgdG8gZHNwbGF5IGNvbnRlbnQgYmxvY2tzPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSByZW1vdmVkIHBhZ2UgYWxpYXMgaW5oZXJpdGFuY2U8L3A+PC9saT4NCgkJPC91bD4NCgk8L2xpPg0KPC91bD4NCjx1bD4NCgk8bGk+PHA+PHN0cm9uZz5YQ29udGVudCBCRVRBIDMgKEFwcmlsIDIwMTAgLSBkaXNjb250aW51ZWQpOjwvc3Ryb25nPjwvcD4NCgkJPHVsPg0KCQkJPGxpPjxwPi0gTWFqb3IgQnVnZml4IChtaXNzaW5nICZxdW90OzsmcXVvdDsgYW5kIHN0cmFuZ2UgaW52aXNpYmxlIGludmFsaWQgY2hhcnMpPC9wPjwvbGk+DQoJCTwvdWw+DQoJPC9saT4NCgk8bGk+PHA+PHN0cm9uZz5YQ29udGVudCBCRVRBIDIgKEFwcmlsIDIwMTAgLSBkaXNjb250aW51ZWQpOjwvc3Ryb25nPjwvcD4NCgkJPHVsPg0KCQkJPGxpPjxwPi0gZml4ZWQgYSBidWcgd2l0aCBwYXJhbSAmcXVvdDtkZWxpbWl0ZXImcXVvdDs8L3A+PC9saT4NCgkJCTxsaT48cD4tIGZpeGVkIGEgYnVnIHdpdGggc21hcnR5IHByb2Nlc3Npbmc8L3A+PC9saT4NCgkJCTxsaT48cD4tIGFkZGVkIGluaGVyaXRhbmNlIG9mICZxdW90O1Nob3cgbG9naW4gZm9ybSZxdW90OzwvcD48L2xpPg0KCQkJPGxpPjxwPi0gYWRkZWQgaW5oZXJpdGFuY2Ugb2YgcGFnZSBhbGlhcyB0byBhZGQgaXQgYXMgcHJlZmZpeDsgc28gaWYgeW91IGhhdmUgYSBwYWdlIGNhbGxlZCAmcXVvdDttZW1iZXJzJnF1b3Q7IGFuZCBzZWxlY3QgZm9yIGVhY2ggY2hpbGQgcGFnZSAmcXVvdDtpbmhlcml0IHBhZ2UgYWxpYXMmcXVvdDsgYWxsIGNoaWxkIHBhZ2VzIGFsaWFzZXMgd2lsbCBzdGFydCB3aXRoICZxdW90O21lbWJlcnNfJnF1b3Q7OyBtYWtlcyBmaWx0ZXJpbmcgb2YgbWVudSBlbnRyaWVzIHdpdGggTWVudU1hbmFnZXIgcGFyYW0gJnF1b3Q7ZXhjbHVkZXByZWZmaXgmcXVvdDsgb3IgJnF1b3Q7aW5jbHVkZXByZWZmaXgmcXVvdDsgZWFzaWVyLjwvcD48L2xpPg0KCQkJPGxpPjxwPi0gbWlub3IgYnVnZml4ZXM8L3A+PC9saT4gDQoJCTwvdWw+DQoJPC9saT4NCgk8bGk+DQoJCTxwPjxzdHJvbmc+WENvbnRlbnQgQkVUQSAoQXByaWwgMjAxMCk6PC9zdHJvbmc+IGluaXRpYWwgcmVsZWFzZTwvcD4NCgkJPHVsPg0KCQkJPGxpPjxwPi0gY29udmVydGVkIHRoZSBzaW5nbGUgZmlsZSBpbnRvIGEgbW9kdWxlPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSByZW5hbWVkIHBhcmFtczsgc2VlIG1vZHVsZSBoZWxwIGZvciBtb3JlIGRldGFpbHM8L3A+PC9saT4NCgkJPC91bD4NCgk8L2xpPg0KPC91bD4NCjxwPjxzdHJvbmc+U2luZ2xlIGZpbGUgcmVsZWFzZXMgKGRpc2NvbnRpbnVlZCk8L3N0cm9uZz4uLi48L3A+DQo8dWw+DQoJPGxpPg0KCQk8cD48c3Ryb25nPjEuNCAoTWFyY2ggMjAxMCk6PC9zdHJvbmc+PC9wPg0KCQk8dWw+DQoJCQk8bGk+PHA+LSBjbGVhbnVwIGNvZGUgLSAoTmFOKTwvcD48L2xpPg0KCQkJPGxpPjxwPi0gbWlub3IgYnVnZml4ZXMgLSAoTmFOKTwvcD48L2xpPg0KCQkJPGxpPjxwPi0gYWRkZWQgcmVkaXJlY3QgcGFnZSBpZiBmZXUgaXMgbm90IGxvZ2dlZCBpbiAtIChOYU4pPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBhZGRlZCBpbmhlcml0YW5jZSBvZiBmZXVfYWNjZXNzIGFuZCByZWRpcmVjdF9wYWdlIC0gKE5hTik8L3A+PC9saT4NCgkJCTxsaT48cD4tIGFkZGVkIHBhcmFtIGZldV9hY2Nlc3MgLSAoTmFOKTwvcD48L2xpPg0KCQkJPGxpPjxwPi0gYWRkZWQgcGFyYW0gZmV1X2FjdGlvbiAtIChOYU4pPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbSByZWRpcmVjdF9wYWdlIC0gKE5hTik8L3A+PC9saT4NCgkJCTxsaT48cD4tIGFkZGVkIHBhcmFtIGJsb2NrX29ubHkgLSAoTmFOKTwvcD48L2xpPg0KCQkJPGxpPjxwPi0gYWRkZWQgc21hcnR5IGxvZ2ljIGluIGJhY2tlbmQgLSAoSmVyZW15QmFzcyk8L3A+PC9saT4NCgkJCTxsaT48cD4tIGFkZGVkIHBhcmFtIHN0eWxlIC0gKEplcmVteUJhc3MpPC9wPjwvbGk+DQoJCQk8bGk+PHA+LSBhZGRlZCBwYXJhbSBmaWx0ZXIgKGZpbHRlcmluZyBpbWFnZXMgaW4gYmFja2VuZCkgLSAoSmVyZW15QmFzcyk8L3A+PC9saT4NCgkJCTxsaT48cD4tIGFkZGVkIHBhcmFtIEltZ01vZGUgKGRyb3Bkb3duIG9yIEltYWdlTWFuYWdlcikgLSAoSmVyZW15QmFzcyk8L3A+PC9saT4NCgkJCTxsaT48cD4tIGFkZGVkIHBhcmFtIHNtYXJ0eU9uIChmb3IgcHJvY2Vzc2luZyBzbWFydHkgdmFycyBvZiB0aGUgdGVtcGF0ZSBpbiBiYWNrZW5kKSAtIChKZXJlbXlCYXNzKTwvcD48L2xpPg0KCQk8L3VsPg0KCTwvbGk+DQoJPGxpPjxwPjxzdHJvbmc+MS4zIChBcHJpbCAyMDA5KTo8L3N0cm9uZz48L3A+DQoJCTx1bD4NCgkJCTxsaT48cD4tIENNU21zIDEuNi4qIHJlYWR5IC0gKE5hTik8L3A+PC9saT4NCgkJCTxsaT48cD4tIGFkZGVkIGZldSBhY2Nlc3Mgb3B0aW9uIC0gKE5hTik8L3A+PC9saT4NCgkJPC91bD4NCgk8L2xpPg0KCTxsaT4NCgkJPHA+PHN0cm9uZz4xLjIgKE1hcmNoIDIwMDkpOjwvc3Ryb25nPiBpbml0aWFsIHJlbGVhc2U8L3A+DQoJCTx1bD4NCgkJCTxsaT48cD4tIEEgc2luZ2xlIGZpbGUgQ29udGVudDIuaW5jLnBocCB0aGF0IG5lZWRzIHRvIGJlIHBhY2VkIGluIGxpYi9jbGFzc2VzL2NvbnRlbnR0eXBlcy48L3A+PC9saT4NCgkJCTxsaT48cD4tIGxheW91dC9vcHRpb25zIG9mIGJhY2tlbmQgcGFuZWwgY2FuIGJlIGNvbnRyb2xlZCBieSBhZGRpdGlvbmFsIHNtYXJ0eSBwYXJhbXMgaW4gdGhlIHRlbXBsYXRlOyBpbnRlZ3JhdGVkIHRoZSB7Y29udGVudF9pbWFnZX0gdGFnIC0gKG1vZCBieSBOYU4pPC9wPjwvbGk+DQoJCTwvdWw+DQoJPC9saT4NCjwvdWw+DQo8YnIgLz4nOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My4xODUyMjIxMjcxLjEyODc0NzkwOTIuMTI4OTI0MjM2OS4xMjg5Mjg1MDM1LjI0JzsKJGxhbmdbJ3V0bXonXSA9ICcxNTY4NjEzNTMuMTI4OTI4NTAzNS4yNC4yMS51dG1jc3I9Zm9ydW0uY21zbWFkZXNpbXBsZS5vcmd8dXRtY2NuPShyZWZlcnJhbCl8dXRtY21kPXJlZmVycmFsfHV0bWNjdD0vaW5kZXgucGhwJzsKJGxhbmdbJ3FjYSddID0gJ1AwLTE2MTAzMTg5Ny0xMjg3NDc5MDkyMTcxJzsKJGxhbmdbJ3V0bWInXSA9ICcxNTY4NjEzNTMuMi4xMC4xMjg5Mjg1MDM1JzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/ro_RO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ0FkdmFuY2VkQ29udGVudCddID0gJ0NvbnRpbnV0IEF2YW5zYXQnOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnTW9kdWx1bCBDb250aW51dEF2YW5zYXQgJXMgYSBmb3N0IGluc3RhbGF0JzsKJGxhbmdbJ3VuaW5zdGFsbGVkJ10gPSAnTW9kdWx1bCBDb250aW51dEF2YW5zYXQgJXMgYSBmb3N0IGRlemluc3RhbGF0JzsKJGxhbmdbJ3VwZ3JhZGVkJ10gPSAnTW9kdWx1bCBDb250aW51dEF2YW5zYXQgYSBmb3N0IGFjdHVhbGl6YXQgbGEgdmVyc2l1bmVhICVzJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnTW9kdWx1bCBDb250aW51dEF2YW5zYXQgJXMgYSBmb3N0IGluc3RhbGF0Lic7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnTW9kdWx1bCBDb250aW51dEF2YW5zYXQgJXMgYSBmb3N0IGRlemluc3RhbGF0Lic7CiRsYW5nWydjb25maXJtdW5pbnN0YWxsJ10gPSAnU2lndXIgc2UgZG9yZXN0ZSBkZXppbnN0YWxhcmVhIG1vZHVsdWx1aSBDb250aW51dEF2YW5zYXQ/JzsKJGxhbmdbJ2Vycm9yX2R1cGxpY2F0ZWNvbnRlbnQnXSA9ICc8ZW0+PHN0cm9uZz5Ob3RpZmljYXJlOjwvc3Ryb25nPiB7Y29udGVudCBibG9jaz0mIzAzOTslcyYjMDM5OyAuLi4gfSBlc3RlIGFtYmlndXUuIE51bWVsZSBkZSBibG9jdXJpIHRyZWJ1aWUgc2EgZmllIHVuaWNlLiA8YnIgLz5BY2VzdCBibG9jIGVzdGUgZGV6YWN0aXZhdC4gTnVtYWkgcHJpbXVsIGJsb2MgdmEgZmkgYWZpc2F0LiBWZXJpZmljYSBzYWJsb251bCBwYWdpbmlpIHNpIGFsZWdlIG8gYWx0YSB2YWxvYXJlIHBlbnRydSBwYXJhbWV0cnVsICYjMDM5O2Jsb2NrJiMwMzk7LjwvZW0+JzsKJGxhbmdbJ25vdGljZV9kdXBsaWNhdGVjb250ZW50J10gPSAnPGVtPjxzdHJvbmc+Tm90aWZpY2FyZTo8L3N0cm9uZz4gQWNlc3QgYmxvYyBlc3RlIGZvbG9zaXQgZGUgbWFpIG11bHRlIG9yaSBpbiBzYWJsb24uIEFpY2kgZXN0ZSBhZmlzYXQgbnVtYWkgcHJpbXVsIGJsb2MuPC9lbT4nOwokbGFuZ1snZXJyb3JfYmFzaWNhdHRyaWInXSA9ICc8ZW0+PHN0cm9uZz5Ob3RpZmljYXJlOjwvc3Ryb25nPiBOdSBzZSBwb2F0ZSBmb2xvc2kgbnVtZWxlIGRlIHByb3ByaWV0YXRlIGRlIGNvbnRpbnV0IHNpbXBsdSAmIzAzOTslcyYjMDM5OyBjYSB2YWxvYXJlIGEgcGFyYW1ldHJ1bHVpICYjMDM5O2Jsb2NrJiMwMzk7LiA8YnIgLz5BY2VzdCBibG9jIGVzdGUgZGV6YWN0aXZhdC4gVmVyaWZpY2Egc2FibG9udWwgcGFnaW5paSBzaSBhbGVnZSBvIGFsdGEgdmFsb2FyZSBwZW50cnUgcGFyYW1ldHJ1bCAmIzAzOTtibG9jayYjMDM5Oy48L2VtPic7CiRsYW5nWydlcnJvcl9leHBpcmVkYXRlJ10gPSAnRGF0YSBkZSBmaW5hbGl6YXJlIHRyZWJ1aWUgc2EgZmllIGR1cGEgZGF0YSBkZSBwb3JuaXJlLic7CiRsYW5nWyd5b3VhcmVpbnRleHQnXSA9ICdGb2xkZXJ1bCBjdXJlbnQnOwokbGFuZ1snZGltZW5zaW9ucyddID0gJ0RpbWVuc2l1bmUgaW1hZ2luZSc7CiRsYW5nWydzaXplJ10gPSAnRGltZW5zaXVuZSBmaXNpZXInOwokbGFuZ1snaW5oZXJpdF9mcm9tX3BhcmVudCddID0gJ01vc3Rlbml0IGRlIGxhIHBhcmludGUnOwokbGFuZ1snbm9uZSddID0gJ25pbWljJzsKJGxhbmdbJ2ludmFsaWQnXSA9ICdpbnZhbGlkKGEpJzsKJGxhbmdbJ2ludmFsaWRfYmxvY2t0eXBlJ10gPSAnPGVtPjxzdHJvbmc+Tm90aWZpY2FyZTo8L3N0cm9uZz4gVmFsb2FyZSBpbnZhbGlkYSAmIzAzOTslcyYjMDM5OyBhIHBhcmFtZXRydWx1aSBibG9ja190eXBlIGluIGJsb2N1bCAmIzAzOTslcyYjMDM5Oy48YnIgLz5WZXJpZmljYSBzYWJsb251bCBwYWdpbmlpLjwvZW0+JzsKJGxhbmdbJ3llcyddID0gJ0RhJzsKJGxhbmdbJ25vJ10gPSAnTnUnOwokbGFuZ1snZnJvbnRlbmRhY2Nlc3MnXSA9ICdBY2NlcyBmcm9udGVuZCc7CiRsYW5nWydyZWRpcmVjdHBhZ2UnXSA9ICdQYWdpbmEgZGUgcmVkaXJlY3Rpb25hcmUgZGFjYSBudSBzZSBwZXJtaXRlIGFjY2VzdWwnOwokbGFuZ1snc2hvd2xvZ2luZm9ybSddID0gJ0FmaXNhcmUgZm9ybXVsYXIgYXV0ZW50aWZpY2FyZSc7CiRsYW5nWydyZWdpc3RlcmVkdXNlcnMnXSA9ICdOdW1haSB1dGlsaXphdG9yaWkgaW5yZWdpc3RyYXRpJzsKJGxhbmdbJ2Jsb2NrJ10gPSAnQmxvYyc7CiRsYW5nWyd1c2VleHBpcmVkYXRlJ10gPSAnRm9sb3NpcmUgZGF0YSBkZSBleHBpcmFyZSc7CiRsYW5nWydzdGFydGRhdGUnXSA9ICdEYXRhIHN0YXJ0JzsKJGxhbmdbJ2VuZGRhdGUnXSA9ICdEYXRhIG9wcmlyZSc7CiRsYW5nWydibG9ja2NvbnRlbnQnXSA9ICdDb250aW51dCBibG9jJzsKJGxhbmdbJ3NldHBhZ2VpbmFjdGl2ZSddID0gJ1NldGFyZSBwYWdpbmEgY2EgaW5hY3RpdmEnOwokbGFuZ1snZGVsZXRlcGFnZSddID0gJ1N0ZXJnZXJlIHBhZ2luYSc7CiRsYW5nWyd1bmluc3RhbGxhY3Rpb24nXSA9ICdBY3RpdW5lIGRlemluc3RhbGFyZSc7CiRsYW5nWydzZXRjb250ZW50MSddID0gJ1NldGFyZSB0b2F0ZSBwYWdpbmlsZSBjYSB0aXAgY29udGludXQnOwokbGFuZ1snc2V0Y29udGVudDInXSA9ICdTZXRhcmUgdG9hdGUgcGFnaW5pbGUgY2EgdGlwIGNvbnRpbnV0IHNpIGlubGF0dXJhcmUgYmxvY3VyaSBkZSBjb250aW51dCBhZGl0aW9uYWxlJzsKJGxhbmdbJ3ByZWZzdXBkYXRlZCddID0gJ1ByZWZlcmludGVsZSBhdSBmb3N0IGFjdHVhbGl6YXRlLic7CiRsYW5nWydmaWxlb3BlcmF0aW9ucyddID0gJ09wZXJhdGl1bmkgZmlzaWVyZSc7CiRsYW5nWyd1cGxvYWRuZXdmaWxlJ10gPSAnSW5jYXJjYXJlIGZpc2llciBub3UnOwokbGFuZ1snY3JlYXRlbmV3ZGlyJ10gPSAnQ3JlYXJlIGZvbGRlciBub3UnOwokbGFuZ1sndXBsb2FkZmlsZSddID0gJ0luY2FyY2FyZSc7CiRsYW5nWydjcmVhdGVkaXInXSA9ICdDcmVhcmUnOwokbGFuZ1snc3VjY2VzcyddID0gJ09LJzsKJGxhbmdbJ2Vycm9yJ10gPSAnRXJvYXJlJzsKJGxhbmdbJ2ZpbGV1cGxvYWRlZCddID0gJ0Zpc2llcnVsICYjMDM5OyVzJiMwMzk7IGEgZm9zdCBpbmNhcmNhdCc7CiRsYW5nWydub2Rpcm5hbWUnXSA9ICdOdSBhIGZvc3QgZGF0IHVuIG51bWUgZGUgZm9sZGVyJzsKJGxhbmdbJ2RpcmV4aXN0cyddID0gJ051bWVsZSBkZSBmb2xkZXIgJiMwMzk7JXMmIzAzOTsgZXhpc3RhIGRlamEnOwokbGFuZ1snbmV3ZGlyY3JlYXRlZCddID0gJ0ZvbGRlcnVsIG5vdSAmIzAzOTslcyYjMDM5OyBhIGZvc3QgY3JlYXQgY3Ugc3VjY2VzJzsKJGxhbmdbJ25ld2RpcmZhaWxlZCddID0gJ0EgYXBhcnV0IG8gZXJvYXJlIGxhIGNyZWFyZWEgZm9sZGVydWx1aSAmIzAzOTslcyYjMDM5Oyc7CiRsYW5nWydub2ZpbGUnXSA9ICdOdSBhIGZvc3QgaW5jYXJjYXQgbmljaXVuIGZpc2llcic7CiRsYW5nWydmaWxldG9vYmlnJ10gPSAnRmlzaWVydWwgaW5jYXJjYXQgJiMwMzk7JXMmIzAzOTsgZXN0ZSBwcmVhIG1hcmUnOwokbGFuZ1snY29udGFpbnNpbGxlZ2FsY2hhcnMnXSA9ICdOdW1lbGUgZGUgZmlzaWVyICYjMDM5OyVzJiMwMzk7IGNvbnRpbmUgdW51bCBzYXUgbWFpIG11bHRlIGNhcmFjdGVyZSBuZXBlcm1pc2UgKCYjMDM5OywmcXVvdDssKywqLFwsLywmYW1wOywkKSc7CiRsYW5nWyd1cGxvYWRmYWlsZWQnXSA9ICdFcm9hcmUgbGEgbXV0YXJlIGZpc2llcnVsdWkgaW5jYXJjYXQgJiMwMzk7JXMmIzAzOTsgbGEgbG9jdWwgbHVpJzsKJGxhbmdbJ2NvbmZpcm1kZWxldGUnXSA9ICdTaWd1ciBkb3Jlc3RpIHN0ZXJnZXJlYSBmaXNpZXJ1bHVpIFwmIzAzOTslc1wmIzAzOTs/JzsKJGxhbmdbJ2RlbGV0ZWZpbGVzdWNjZXNzJ10gPSAnRmlzaWVydWwgJiMwMzk7JXMmIzAzOTsgYSBmb3N0IHN0ZXJzJzsKJGxhbmdbJ2RlbGV0ZWZpbGVmYWlsZWQnXSA9ICdGaXNpZXJ1bCAmIzAzOTslcyYjMDM5OyBudSBhIHB1dHV0IGZpIHN0ZXJzJzsKJGxhbmdbJ2RlbGV0ZXN1YmRpcmZhaWxlZCddID0gJ0ZvbGRlcnVsICYjMDM5OyVzJiMwMzk7IG51IGEgcHV0dXQgZmkgc3RlcnMnOwokbGFuZ1snZGVsZXRlc3ViZGlyc3VjY2VzcyddID0gJ0ZvbGRlcnVsICYjMDM5OyVzJiMwMzk7IGEgZm9zdCBzdGVycyc7CiRsYW5nWydjb25maXJtZGVsZXRlZGlyJ10gPSAnU2lndXIgZG9yZXN0aSBzdGVyZ2VyZWEgZm9sZGVydWx1aSBcJiMwMzk7JXNcJiMwMzk7Pyc7CiRsYW5nWydkZWxldGVkaXInXSA9ICdTdGVyZ2VyZSBzdWJmb2xkZXJlIGdvYWxlJzsKJGxhbmdbJ2RlbGV0ZWZpbGUnXSA9ICdTdGVyZ2VyZSBmaXNpZXInOwokbGFuZ1sncmVzdHJpY3RkaXJzJ10gPSAnUmVzdHJpY3Rpb25hcmUgYWNjZXMgdXRpbGl6YXRvcmkgbGEgZm9sZGVyJzsKJGxhbmdbJ3Nob3dmaWxlbWFuYWdlbWVudCddID0gJ0FmaXNhcmUgb3B0aXVuaSBhZG1pbmlzdHJhcmUgZmlzaWVyZSc7CiRsYW5nWydzaG93dGh1bWJuYWlsZmlsZXMnXSA9ICdBZmlzYXJlIG1pbmlhdHVyaSc7CiRsYW5nWydhbGxvd3NjYWxpbmcnXSA9ICdTZSBwZXJtaXRlIHJlZGltZW5zaW9uYXJlYSBvbi10aGUtZmx5IGEgaW1hZ2luaWxvciBpbmNhcmNhdGUnOwokbGFuZ1snc2NhbGluZ3dpZHRoJ10gPSAnTGF0aW1lIHNjYWxhcmUnOwokbGFuZ1snc2NhbGluZ2hlaWdodCddID0gJ0luYWx0aW1lIHNjYWxhcmUnOwokbGFuZ1snZGVmYXVsdGRpbWVuc2lvbnMnXSA9ICdEaW1lbnNpdW5pIGltcGxpY2l0ZSc7CiRsYW5nWydhdXRvJ10gPSAnQXV0b21hdCc7CiRsYW5nWydyZWxhdGl2ZXVybHMnXSA9ICdVUkwtdXJpIHJlbGF0aXZlJzsKJGxhbmdbJ2ZpbGVwaWNrZXJzdHlsZSddID0gJ1N0aWwgc2VsZWN0b3IgZmlzaWVyZSc7CiRsYW5nWydmaWxlcGlja2Vyc2l6ZSddID0gJ0RpbWVuc2l1bmUgc2VsZWN0b3IgZmlzaWVyZSc7CiRsYW5nWydmaWxlbmFtZW9ubHknXSA9ICdBZmlzYXJlIG51bWUgZmlzaWVyZSc7CiRsYW5nWyd0aHVtYm5haWxzb25seSddID0gJ0FmaXNhcmUgbWluaWF0dXJpJzsKJGxhbmdbJ3Nob3d0aHVtYm5haWxmaWxlc3RleHQnXSA9ICdBZmlzYXJlIGZpc2llcmUtbWluaWF0dXJpIGNhIGZpc2llcmUgbm9ybWFsZSc7CiRsYW5nWydmaWxlbmFtZWFuZHRodW1ibmFpbHMnXSA9ICdBZmlzYXJlIHNpIG51bWUgZmlzaWVyZSBzaSBtaW5pYXR1cmknOwokbGFuZ1snbWFrZXRodW1ibmFpbCddID0gJ0NyZWFyZSBtaW5pYXR1cmknOwokbGFuZ1snZmlsZXBpY2tlcnNldHRpbmdzJ10gPSAnU2V0YXJpIHNlbGVjdG9yIGZpc2llcmUnOwokbGFuZ1sncmVzaXpldG8nXSA9ICdSZWRpbWVuc2lvbmFyZSBpbWFnaW5lIGxhJzsKJGxhbmdbJ2tlZXBhc3BlY3RyYXRpbyddID0gJ1NlIHBhc3RyZWF6YSBwcm9wb3J0aWEgZGltZW5zaXVuaWxvcic7CiRsYW5nWydhbGxvd3Vwc2NhbGluZyddID0gJ1NlIHBlcm1pdGUgc2NhbGFyZWEgaW4gc3VzJzsKJGxhbmdbJ2RlY2ltYWxkZWxpbWl0ZXInXSA9ICcuICc7CiRsYW5nWyd0aG91c2FuZGRlbGltaXRlciddID0gJywgJzsKJGxhbmdbJ2Rpcm5vdGZvdW5kJ10gPSAnRm9sZGVydWwgJiMwMzk7JXMmIzAzOTsgbnUgYSBmb3N0IGdhc2l0ISc7CiRsYW5nWydzZWxlY3RpbWFnZSddID0gJ1Jhc2ZvaXJlIGltYWdpbmknOwokbGFuZ1snc2VsZWN0ZmlsZSddID0gJ1Jhc2ZvaXJlIGZpc2llcmUnOwokbGFuZ1snZGVsZXRlcGFnZXMnXSA9ICdTdGVyZ2VyZSB0b2F0ZSBwYWdpbmlsZSBkZSB0aXB1bCBDb250aW51dEF2YW5zYXQnOwokbGFuZ1sndXNlbWltZXR5cGUnXSA9ICdGb2xvc2lyZSBtaW1lLXR5cGUgcGVudHJ1IGEgb2J0aW5lIHRpcHVsIGRlIGZpc2llcic7CiRsYW5nWydpbXBvcnRwYWdlcyddID0gJ1NldGFyZSB0b2F0ZSBwYWdpbmlsZSBkZSB0aXAgY29udGludXQgY2EgdGlwIENvbnRpbnV0QXZhbnNhdC4nOwokbGFuZ1sncGFnZXNpbXBvcnRlZCddID0gJ1RvYXRlIHBhZ2luaWxlIGRlIGNvbnRpbnV0IGF1IGZvc3Qgc2V0YXRlIGNhIENvbnRpbnV0YXZhbnNhdC4nOwokbGFuZ1snY29uZmlybWltcG9ydCddID0gJ1NpZ3VyIGRvcmVzdGkgc2NoaW1iYXJlYSB0aXB1bHVpIHBlbnRydSB0b2F0ZSBwYWdpbmlsZSBkZSBjb250aW51dD8nOwokbGFuZ1snbm9taW1ldHlwZSddID0gJ051IGVzdGUgZGlzcG9uaWJpbGEgbmljaW8gZnVuY3RpZSBtaW1lLXR5cGUgc2F1IG51IGZ1bmN0aW9uZWF6YSBpbmNvcmVjdC4gQWNlYXN0YSBjYXJhY3RlcmlzdGljYSBlc3RlIGRlemFjdGl2YXRhLic7CiRsYW5nWyd0b2dnbGVfbWVzc2FnZSddID0gJ0FzY3VuZGUgYWNlc3QgbWVzYWonOwokbGFuZ1snY29udGVudHNldHRpbmdzJ10gPSAnU2V0YXJpIGltcGxpY2l0ZSBDb250aW51dEF2YW5zYXQnOwokbGFuZ1sncmVkaXJlY3RwYXJhbXMnXSA9ICdQYXJhbWV0cmkgVVJMIGNhcmUgc2UgYWRhdWdhIGxhIHJlZGlyZWN0YXJlJzsKJGxhbmdbJ2V2YWx1YXRlc21hcnR5J10gPSAnRm9sb3NpcmUgc21hcnR5IHBlbnRydSBwcm9jZXNhcmVhIHBhcmFtZXRyaWxvcic7CiRsYW5nWydub2ltYWdlZmlsZSddID0gJyYjMDM5OyVzJiMwMzk7IG51IGVzdGUgdW4gZmlzaWVyIGltYWdpbmUnOwokbGFuZ1snZmlsZXR5cGVub3RhbGxvd2VkJ10gPSAnVGlwdWwgZGUgZmlzaWVyICYjMDM5OyVzJiMwMzk7IG51IGVzdGUgcGVybWlzJzsKJGxhbmdbJ3FjYSddID0gJ1AwLTE4MzgyMTUwNDMtMTI4MjgwNzUzMzkzNCc7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjEyODI4MDc5NzIuMS4yLnV0bWNzcj1nb29nbGV8dXRtY2NuPShvcmdhbmljKXx1dG1jbWQ9b3JnYW5pY3x1dG1jdHI9Y21zbXMnOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My4xMTkxODczODE3LjEyODI4MDc1MzQuMTI4MjgwNzUzNC4xMjgyODA3NTM0LjEnOwokbGFuZ1sndXRtYyddID0gJzE1Njg2MTM1Myc7CiRsYW5nWyd1dG1iJ10gPSAnMTU2ODYxMzUzLjEyLjkuMTI4MjgwNzYxNTM2OCc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/sk_SK.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ0FkdmFuY2VkQ29udGVudCddID0gJ1JveiZzY2Fyb247JmlhY3V0ZTtyZW4meWFjdXRlOyBvYnNhaCc7CiRsYW5nWydpbnN0YWxsZWQnXSA9ICdNb2R1bCAlcyBuYWluJnNjYXJvbjt0YWxvdmFuJnlhY3V0ZTsnOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bCBBZHZhbmNlZENvbnRlbnQgJXMgb2RpbiZzY2Fyb247dGFsb3ZhbiZ5YWN1dGU7JzsKJGxhbmdbJ3VwZ3JhZGVkJ10gPSAnTW9kdWwgYWt0dWFsaXpvdmFuJnlhY3V0ZTsgbmEgdmVyeml1ICVzJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnTW9kdWwgJXMgbmFpbiZzY2Fyb247dGFsb3ZhbiZ5YWN1dGU7Lic7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnTW9kdWwgJXMgb2RpbiZzY2Fyb247dGFsb3ZhbiZ5YWN1dGU7Lic7CiRsYW5nWydjb25maXJtdW5pbnN0YWxsJ10gPSAnU3RlIHNpIGlzdCZ5YWN1dGU7LCDFvmUgY2hjZXRlIG1vZHVsIG9kc3RyJmFhY3V0ZTtuacWlPyc7CiRsYW5nWydlcnJvcl9kdXBsaWNhdGVjb250ZW50J10gPSAnPGVtPjxzdHJvbmc+UG96biZhYWN1dGU7bWthOjwvc3Ryb25nPiB7Y29udGVudCBibG9jaz0mIzAzOTslcyYjMDM5OyAuLi4gfSBpcyBhbWJpZ291cy4gTiZhYWN1dGU7em92IGJsb2t1IG11cyZpYWN1dGU7IGJ5xaUgdW5payZhYWN1dGU7dG55LiA8YnIgLz5UZW50byBibG9rIGplIGRlYWt0aXZvdmFuJnlhY3V0ZTsuIFBvenJpdGUgc3ZvanUgJnNjYXJvbjthYmwmb2FjdXRlO251LCBhIHZ5YmVydGUgb2RsaSZzY2Fyb247biZ5YWN1dGU7IHBhcmFtZXRlciAmIzAzOTtibG9jayYjMDM5OzwvZW0+JzsKJGxhbmdbJ25vdGljZV9kdXBsaWNhdGVjb250ZW50J10gPSAnPGVtPjxzdHJvbmc+Tm90aWNlOjwvc3Ryb25nPiBUaGlzIGJsb2NrIGlzIHVzZWQgbXVsdGlwbGUgdGltZXMgaW4gdGVtcGxhdGUuIFlvdSBvbmx5IHNlZSB0aGUgZmlyc3QgYmxvY2sgaGVyZS48L2VtPic7CiRsYW5nWydlcnJvcl9iYXNpY2F0dHJpYiddID0gJzxlbT48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz4gQ2Fubm90IHVzZSBiYXNpYyBjb250ZW50IHByb3BlcnR5IG5hbWUgJiMwMzk7JXMmIzAzOTsgYXMgdmFsdWUgb2YgcGFyYW0gJiMwMzk7YmxvY2smIzAzOTsuIDxiciAvPlRoaXMgYmxvY2sgaXMgZGlzYWJsZWQuIENoZWNrIHlvdXIgcGFnZSB0ZW1wbGF0ZSBhbmQgY2hvc2UgYSBkaWZmZXJlbnQgdmFsdWUgb2YgcGFyYW0gJiMwMzk7YmxvY2smIzAzOTsuPC9lbT4nOwokbGFuZ1snZXJyb3JfZXhwaXJlZGF0ZSddID0gJ0QmYWFjdXRlO3R1bSBrb25jYSBtdXMmaWFjdXRlOyBiecWlIG5lc2tvciZzY2Fyb247JmlhY3V0ZTsgIGFrbyBkJmFhY3V0ZTt0dW0gemHEjWlhdGt1JzsKJGxhbmdbJ3lvdWFyZWludGV4dCddID0gJ1MmdWFjdXRlO8SNYXNuJnlhY3V0ZTsgYWRyZXMmYWFjdXRlO3InOwokbGFuZ1snZGltZW5zaW9ucyddID0gJ1ZlxL5rb3PFpSBvYnImYWFjdXRlO3prdSc7CiRsYW5nWydzaXplJ10gPSAnVmXEvmtvc8WlIG9iciZhYWN1dGU7emt1JzsKJGxhbmdbJ2luaGVyaXRfZnJvbV9wYXJlbnQnXSA9ICdQcmV2emlhxaUgb2QgbmFkcmlhZGVuZWonOwokbGFuZ1snbm9uZSddID0gJ8W+aWFkbnknOwokbGFuZ1snaW52YWxpZCddID0gJ3MgY2h5Ym91JzsKJGxhbmdbJ3llcyddID0gJyZBYWN1dGU7bm8nOwokbGFuZ1snbm8nXSA9ICdOaWUnOwokbGFuZ1snZnJvbnRlbmRhY2Nlc3MnXSA9ICdGcm9udGVuZCBwciZpYWN1dGU7c3R1cCc7CiRsYW5nWydyZWRpcmVjdHBhZ2UnXSA9ICdQUmVzbWVyb3ZhxaUgcG9raWHEviBuaWUgamUgdcW+JmlhY3V0ZTt2YXRlxL4gcHJpaGwmYWFjdXRlO3NlbiZ5YWN1dGU7JzsKJGxhbmdbJ3Nob3dsb2dpbmZvcm0nXSA9ICdab2JyYXppxaUgZm9ybXVsJmFhY3V0ZTtyIHByaWhsJmFhY3V0ZTtzZW5pYSc7CiRsYW5nWydyZWdpc3RlcmVkdXNlcnMnXSA9ICdJYmEgcmVzaXN0cm92YW4meWFjdXRlOyB1xb4maWFjdXRlO3ZhdGVsaWEnOwokbGFuZ1snYmxvY2snXSA9ICdCbG9jayc7CiRsYW5nWyd1c2VleHBpcmVkYXRlJ10gPSAnUG91xb5pxaUgZCZhYWN1dGU7dHVtIGtvbmNhJzsKJGxhbmdbJ3N0YXJ0ZGF0ZSddID0gJ1phxI0maWFjdXRlO25hJzsKJGxhbmdbJ2VuZGRhdGUnXSA9ICdLb27EjSZpYWN1dGU7JzsKJGxhbmdbJ2Jsb2NrY29udGVudCddID0gJ09ic2Fob3YmeWFjdXRlOyBibG9rICc7CiRsYW5nWydzZXRwYWdlaW5hY3RpdmUnXSA9ICdOYXN0YXZpxaUgYWtvIG5lYWt0JmlhY3V0ZTt2bnUgJzsKJGxhbmdbJ2RlbGV0ZXBhZ2UnXSA9ICdPZHN0ciZhYWN1dGU7bmnFpSBzdHImYWFjdXRlO25rdSc7CiRsYW5nWyd1bmluc3RhbGxhY3Rpb24nXSA9ICdVbmluc3RhbGwgYWN0aW9uJzsKJGxhbmdbJ3NldGNvbnRlbnQxJ10gPSAnU2V0IGFsbCBQYWdlcyB0byB0eXBlIENvbnRlbnQnOwokbGFuZ1snc2V0Y29udGVudDInXSA9ICdTZXQgYWxsIFBhZ2VzIHRvIHR5cGUgQ29udGVudCBhbmQgcmVtb3ZlIGFkZGl0aW9uYWwgY29udGVudCBibG9ja3MnOwokbGFuZ1sncHJlZnN1cGRhdGVkJ10gPSAnUHJlZmVyZW5jZXMgdXBkYXRlZCc7CiRsYW5nWydmaWxlb3BlcmF0aW9ucyddID0gJ0ZpbGUgb3BlcmF0aW9ucyc7CiRsYW5nWyd1cGxvYWRuZXdmaWxlJ10gPSAnVXBsb2FkIGEgbmV3IGZpbGUnOwokbGFuZ1snY3JlYXRlbmV3ZGlyJ10gPSAnQ3JlYXRlIGEgbmV3IGRpcmVjdG9yeSc7CiRsYW5nWyd1cGxvYWRmaWxlJ10gPSAnVXBsb2FkJzsKJGxhbmdbJ2NyZWF0ZWRpciddID0gJ0NyZWF0ZSc7CiRsYW5nWydzdWNjZXNzJ10gPSAnT2snOwokbGFuZ1snZXJyb3InXSA9ICdFcnJvcic7CiRsYW5nWydmaWxldXBsb2FkZWQnXSA9ICdGaWxlIHVwbG9hZGVkJzsKJGxhbmdbJ25vZGlybmFtZSddID0gJ05vIGRpcm5hbWUgcHJvdmlkZWQnOwokbGFuZ1snZGlyZXhpc3RzJ10gPSAnRGlybmFtZSBhbHJlYWR5IGV4aXN0cyc7CiRsYW5nWyduZXdkaXJjcmVhdGVkJ10gPSAnTmV3IGRpciBzdWNjZXNzZnVsbHkgY3JlYXRlZCc7CiRsYW5nWyduZXdkaXJmYWlsZWQnXSA9ICdBbiBlcnJvciBvY2N1cmVkIHRyeWluZyB0byBjcmVhdGUgZGlyJzsKJGxhbmdbJ25vZmlsZSddID0gJ05vIGZpbGUgd2FzIHVwbG9hZGVkJzsKJGxhbmdbJ2ZpbGV0b29iaWcnXSA9ICdVcGxvYWRlZCBmaWxlIGlzIHRvbyBiaWcnOwokbGFuZ1snY29udGFpbnNpbGxlZ2FsY2hhcnMnXSA9ICdGaWxlbmFtZSBjb250YWlucyBvbmUgb3IgbW9yZSBpbGxlZ2FsIGNoYXJhY3RlcnMgKCYjMDM5OywmcXVvdDssKywqLFwsLywmYW1wOywkKSc7CiRsYW5nWyd1cGxvYWRmYWlsZWQnXSA9ICdFcnJvciBtb3ZpbmcgdXBsb2FkZWQgZmlsZSBpbnRvIHBsYWNlJzsKJGxhbmdbJ2NvbmZpcm1kZWxldGUnXSA9ICdBcmUgeW91IHN1cmUgdG8gZGVsZXRlIHRoZSBmaWxlICVzPyc7CiRsYW5nWydkZWxldGVmaWxlc3VjY2VzcyddID0gJ3dhcyBzdWNjZXNzZnVsbHkgZGVsZXRlZCc7CiRsYW5nWydkZWxldGVmaWxlZmFpbGVkJ10gPSAnY291bGQgbm90IGJlIGRlbGV0ZWQnOwokbGFuZ1snZGVsZXRlc3ViZGlyZmFpbGVkJ10gPSAnY291bGQgbm90IGJlIGRlbGV0ZWQnOwokbGFuZ1snZGVsZXRlc3ViZGlyc3VjY2VzcyddID0gJ3dhcyBzdWNjZXNzZnVsbHkgZGVsZXRlZCc7CiRsYW5nWydjb25maXJtZGVsZXRlZGlyJ10gPSAnQXJlIHlvdSBzdXJlIHRvIGRlbGV0ZSB0aGUgZGlyZWN0b3J5ICVzPyc7CiRsYW5nWydkZWxldGVkaXInXSA9ICdEZWxldGUgZW1wdHkgc3ViZGlyJzsKJGxhbmdbJ2RlbGV0ZWZpbGUnXSA9ICdEZWxldGUgRmlsZSc7CiRsYW5nWydyZXN0cmljdGRpcnMnXSA9ICdSZXN0cmljdCB1c2VyJiMwMzk7cyBkaXIgYWNjZXNzJzsKJGxhbmdbJ3Nob3dmaWxlbWFuYWdlbWVudCddID0gJ1Nob3cgZmlsZW1hbmFnZW1lbnQgb3B0aW9ucyc7CiRsYW5nWydzaG93dGh1bWJuYWlsZmlsZXMnXSA9ICdTaG93IHRodW1ibmFpbHMnOwokbGFuZ1snYWxsb3dzY2FsaW5nJ10gPSAnQWxsb3cgb24tdGhlLWZseSByZXNpemluZyBvZiB1cGxvYWRlZCBpbWFnZXMnOwokbGFuZ1snc2NhbGluZ3dpZHRoJ10gPSAnU2NhbGluZyB3aWR0aCc7CiRsYW5nWydzY2FsaW5naGVpZ2h0J10gPSAnU2NhbGluZyBoZWlnaHQnOwokbGFuZ1snZGVmYXVsdGRpbWVuc2lvbnMnXSA9ICdEZWZhdWx0IGRpbWVuc2lvbnMnOwokbGFuZ1snYXV0byddID0gJ0F1dG8nOwokbGFuZ1sncmVsYXRpdmV1cmxzJ10gPSAnUmVsYXQmaWFjdXRlO3ZuZSBhZHJlc3knOwokbGFuZ1snZmlsZXBpY2tlcnN0eWxlJ10gPSAnRmlsZXBpY2tlciBzdHlsZSc7CiRsYW5nWydmaWxlcGlja2Vyc2l6ZSddID0gJ0ZpbGVwaWNrZXIgc2l6ZSc7CiRsYW5nWydmaWxlbmFtZW9ubHknXSA9ICdVayZhYWN1dGU7emHFpSBuJmFhY3V0ZTt6dnkgIHMmdWFjdXRlO2Jvcm92JzsKJGxhbmdbJ3RodW1ibmFpbHNvbmx5J10gPSAnVWsmYWFjdXRlO3phxaUgbiZhYWN1dGU7aMS+YWR5JzsKJGxhbmdbJ3Nob3d0aHVtYm5haWxmaWxlc3RleHQnXSA9ICdTaG93IHRodW1ibmFpbC1maWxlcyBhcyByZWd1bGFyIGZpbGVzJzsKJGxhbmdbJ2ZpbGVuYW1lYW5kdGh1bWJuYWlscyddID0gJ1Nob3cgYm90aCBmaWxlbmFtZXMgYW5kIHRodW1ibmFpbHMnOwokbGFuZ1snbWFrZXRodW1ibmFpbCddID0gJ0NyZWF0ZSB0aHVtYm5haWxzJzsKJGxhbmdbJ2ZpbGVwaWNrZXJzZXR0aW5ncyddID0gJ0ZpbGVQaWNrZXIgc2V0dGluZ3MnOwokbGFuZ1sncmVzaXpldG8nXSA9ICdSZXNpemUgaW1hZ2UgdG8nOwokbGFuZ1sna2VlcGFzcGVjdHJhdGlvJ10gPSAnS2VlcCBhc3BlY3QgcmF0aW8nOwokbGFuZ1snYWxsb3d1cHNjYWxpbmcnXSA9ICdBbGxvdyB1cHNjYWxpbmcnOwokbGFuZ1snZGVjaW1hbGRlbGltaXRlciddID0gJy4nOwokbGFuZ1sndGhvdXNhbmRkZWxpbWl0ZXInXSA9ICcsJzsKJGxhbmdbJ2Rpcm5vdGZvdW5kJ10gPSAnRGlyZWN0b3J5ICYjMDM5OyVzJiMwMzk7IG5vdCBmb3VuZCEnOwokbGFuZ1snc2VsZWN0aW1hZ2UnXSA9ICdCcm93c2UgaW1hZ2VzJzsKJGxhbmdbJ3NlbGVjdGZpbGUnXSA9ICdCcm93c2UgZmlsZXMnOwokbGFuZ1snZGVsZXRlcGFnZXMnXSA9ICdEZWxldGUgYWxsIHBhZ2VzIG9mIHR5cGUgQWR2YW5jZWRDb250ZW50JzsKJGxhbmdbJ3VzZW1pbWV0eXBlJ10gPSAnVXNlIG1pbWUtdHlwZSB0byBnZXQgZmlsZSB0eXBlJzsKJGxhbmdbJ2ltcG9ydHBhZ2VzJ10gPSAnU2V0IGFsbCBQYWdlcyBvZiB0eXBlIGNvbnRlbnQgdG8gdHlwZSBBZHZhbmNlZENvbnRlbnQuJzsKJGxhbmdbJ3BhZ2VzaW1wb3J0ZWQnXSA9ICdBbGwgY29udGVudCBwYWdlcyBzZXQgdG8gQWR2YW5jZWRDb250ZW50Lic7CiRsYW5nWydjb25maXJtaW1wb3J0J10gPSAnRG8geW91IHJlYWxseSB3YW50IHRvIGNoYW5nZSB0aGUgY29udGVudCB0eXBlIG9mIGFsbCBjb250ZW50IHBhZ2VzPyc7CiRsYW5nWydub21pbWV0eXBlJ10gPSAnTm8gbWltZS10eXBlIGZ1bmN0aW9uIGF2YWlsYWJsZSBvciBub3QgY29uZmlndXJlZCBwcm9wZXJseS4gVGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkLic7CiRsYW5nWyd0b2dnbGVfbWVzc2FnZSddID0gJ0hpZGUgdGhpcyBtZXNzYWdlJzsKJGxhbmdbJ2NvbnRlbnRzZXR0aW5ncyddID0gJ0RlZmF1bHQgQWR2YW5jZWRDb250ZW50IHNldHRpbmdzJzsKJGxhbmdbJ3JlZGlyZWN0cGFyYW1zJ10gPSAnVVJMIHBhcmFtcyB0byBhcHBlbmQgd2hlbiByZWRpcmVjdGluZyAocGFyYW0xPXZhbHVlMSBwYXJhbTI9dmFsdWUyIC4uLiknOwokbGFuZ1snZXZhbHVhdGVzbWFydHknXSA9ICdVc2Ugc21hcnR5IHRvIGNyZWF0ZSB0aGUgcGFyYW1zJzsKJGxhbmdbJ25vaW1hZ2VmaWxlJ10gPSAnJXMgaXMgbm90IGFuIGltYWdlIGZpbGUnOwokbGFuZ1snZmlsZXR5cGVub3RhbGxvd2VkJ10gPSAnRmlsZXR5cGUgJXMgaXMgbm90IGFsbG93ZWQnOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My4xNDIzMTA5NzI1LjEyODAyNTkwMTYuMTI4MTgxNDI3Mi4xMjgxODYxMDM3LjEwJzsKJGxhbmdbJ3V0bXonXSA9ICcxNTY4NjEzNTMuMTI4MTgxNDI3Mi45LjkudXRtY3NyPWZvcnVtLmNtc21hZGVzaW1wbGUub3JnfHV0bWNjbj0ocmVmZXJyYWwpfHV0bWNtZD1yZWZlcnJhbHx1dG1jY3Q9Lyc7CiRsYW5nWydxY2EnXSA9ICdQMC03NDg0MzkxMzEtMTI4MDI1OTAxNzUyNCc7CiRsYW5nWyd1dG1iJ10gPSAnMTU2ODYxMzUzJzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Cg==]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIE1vZHVsZSA6IEFkdmFuY2VkQ29udGVudCAoYykgMjAxMCBieSBHZW9yZyBCdXNjaCAoZ2VvcmcuYnVzY2hAZ214Lm5ldCkKIyAgICAgICAgICBhIGNvbnRlbnQgbWFuYWdlbWVudCB0b29sIGZvciBDTVMgTWFkZSBTaW1wbGUKIyAgICAgICAgICBUaGUgcHJvamVjdHMgaG9tZXBhZ2UgaXMgaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9jb250ZW50Mi8KIyAgICAgICAgICBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDQtMjAxMCBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgICAgICAgICAgVGhlIHByb2plY3RzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgVmVyc2lvbjogMC43LjEKIyBGaWxlICAgOiBtZXRob2QuaW5zdGFsbC5waHAKIyBQdXJwb3NlOiBpbnN0YWxscyB0aGUgbW9kdWxlLCBjcmVhdGVzIHRhYmxlcyBhbmQgc2V0IHByZWZlcmVuY2VzCiMgTGljZW5zZTogR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmlmKCFpc19vYmplY3QoY21zbXMoKSkpIGV4aXQ7CgokZGIgPSYgJHRoaXMtPkdldERiKCk7CgokdGFib3B0YXJyYXkgPSBhcnJheSgnbXlzcWwnID0+ICdUWVBFPU15SVNBTScpOwokZGljdCAgICAgICAgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoKLy8gVXNlciBTZXR0aW5ncyBibG9jayBkaXNwbGF5CiRmbGRzID0gInVzZXJfaWQgSSwgY29udGVudF9pZCBJLCB0ZW1wbGF0ZV9pZCBJLCBpdGVtX2lkIFgsIGl0ZW1fZGlzcGxheSBJIjsKJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX0FkdmFuY2VkQ29udGVudF9ibG9ja2Rpc3BsYXkiLCAKCSRmbGRzLCAkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgovLyBVc2VyIFNldHRpbmdzIG1lc3NhZ2UgZGlzcGxheQokZmxkcyA9ICJ1c2VyX2lkIEksIGNvbnRlbnRfaWQgSSwgdGVtcGxhdGVfaWQgSSwgaXRlbV9pZCBYLCBpdGVtX2Rpc3BsYXkgSSI7CiRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9BZHZhbmNlZENvbnRlbnRfbWVzc2FnZWRpc3BsYXkiLCAKCSRmbGRzLCAkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgovLyBVc2VyIFNldHRpbmdzIGdvdXAgZGlzcGxheQokZmxkcyA9ICJ1c2VyX2lkIEksIGNvbnRlbnRfaWQgSSwgdGVtcGxhdGVfaWQgSSwgaXRlbV9pZCBYLCBpdGVtX2Rpc3BsYXkgSSI7CiRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9BZHZhbmNlZENvbnRlbnRfZ3JvdXBkaXNwbGF5IiwgCgkkZmxkcywgJHRhYm9wdGFycmF5KTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKLy8gbXVsdGlwbGUgaW5wdXRzCiRmbGRzID0gImlucHV0X2lkIEMoNjQpIEtFWSwgaW5wdXRfZmllbGRzIFgiOwokc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfQWR2YW5jZWRDb250ZW50X211bHRpX2lucHV0cyIsIAoJJGZsZHMsICR0YWJvcHRhcnJheSk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCi8vIG11bHRpcGxlIGlucHV0IHRwbCBhc3NvY3MKJGZsZHMgPSAiaW5wdXRfaWQgQyg2NCksIHRwbF9uYW1lIFgiOwokc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfQWR2YW5jZWRDb250ZW50X211bHRpX2lucHV0X3RwbF9hc3NvY3MiLCAKCSRmbGRzLCAkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgokdGhpcy0+Q3JlYXRlUGVybWlzc2lvbignTWFuYWdlIEFkdmFuY2VkQ29udGVudCcsICdNYW5hZ2UgQWR2YW5jZWRDb250ZW50Jyk7CiR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKCdNYW5hZ2UgQWxsIEFkdmFuY2VkQ29udGVudCBCbG9ja3MnLCAnTWFuYWdlIEFsbCBBZHZhbmNlZENvbnRlbnQgQmxvY2tzJyk7CiR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKCdNYW5hZ2UgQWR2YW5jZWRDb250ZW50IE9wdGlvbnMnLCAnTWFuYWdlIEFkdmFuY2VkQ29udGVudCBPcHRpb25zJyk7CiR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKCdNYW5hZ2UgQWR2YW5jZWRDb250ZW50IE11bHRpSW5wdXRzJywgJ01hbmFnZSBBZHZhbmNlZENvbnRlbnQgTXVsdGlJbnB1dHMnKTsKJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oJ01hbmFnZSBBZHZhbmNlZENvbnRlbnQgTXVsdGlJbnB1dCBUZW1wbGF0ZXMnLCAnTWFuYWdlIEFkdmFuY2VkQ29udGVudCBNdWx0aUlucHV0IFRlbXBsYXRlcycpOwokdGhpcy0+U2V0VGVtcGxhdGUoJ211bHRpX2lucHV0X1NhbXBsZVRlbXBsYXRlJywKJzxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CjxwPgp7Zm9yZWFjaCBmcm9tPSRpbnB1dHMgaXRlbT1lbG19Cgl7JGVsbS5sYWJlbH06Jm5ic3A7eyRlbG0uaW5wdXR9Jm5ic3A7CnsvZm9yZWFjaH0KPC9wPgo8L2Rpdj4nKTsKJHRoaXMtPkFkZE11bHRpSW5wdXQoJ1NhbXBsZUlucHV0JywnCntjb250ZW50IGJsb2NrPSJtb2R1bGVfc2VsZWN0IiBsYWJlbD0iU2VsZWN0IGEgbW9kdWxlIiBibG9ja190eXBlPSJkcm9wZG93biIgaXRlbXM9InxOZXdzfE1lbnUiIHZhbHVlcz0ifE5ld3N8TWVudU1hbmFnZXIifQp7Y29udGVudCBibG9jaz0ibW9kdWxlX3BhcmFtcyIgbGFiZWw9IkVudGVyIG1vZHVsZSBwYXJhbWV0ZXJzIGhlcmUiIGJsb2NrX3R5cGU9InRleHQiIG9uZWxpbmU9dHJ1ZSBzaXplPSI2MCJ9Jyk7CiR0aGlzLT5BZGRUcGxBc3NvYygnbXVsdGlfaW5wdXQnLCAnU2FtcGxlSW5wdXQnLCAnbXVsdGlfaW5wdXRfU2FtcGxlVGVtcGxhdGUnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RlZmF1bHRfbXVsdGlfaW5wdXRfdHBsJywgJ211bHRpX2lucHV0X1NhbXBsZVRlbXBsYXRlJyk7CgokdGhpcy0+QWRkRXZlbnRIYW5kbGVyKCAnQ29yZScsICdDb250ZW50UG9zdFJlbmRlcicsIGZhbHNlICk7CiR0aGlzLT5BZGRFdmVudEhhbmRsZXIoICdDb3JlJywgJ1RlbXBsYXRlUHJlQ29tcGlsZScsIGZhbHNlICk7CgokdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5MYW5nKCdBZHZhbmNlZENvbnRlbnQnKSwgCgkkdGhpcy0+TGFuZygnaW5zdGFsbGVkJywkdGhpcy0+R2V0VmVyc2lvbigpKSk7Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIE1vZHVsZSA6IEFkdmFuY2VkQ29udGVudCAoYykgMjAxMCBieSBHZW9yZyBCdXNjaCAoZ2VvcmcuYnVzY2hAZ214Lm5ldCkKIyAgICAgICAgICBhIGNvbnRlbnQgbWFuYWdlbWVudCB0b29sIGZvciBDTVMgTWFkZSBTaW1wbGUKIyAgICAgICAgICBUaGUgcHJvamVjdHMgaG9tZXBhZ2UgaXMgaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9jb250ZW50Mi8KIyAgICAgICAgICBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDQtMjAxMCBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgICAgICAgICAgVGhlIHByb2plY3RzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgVmVyc2lvbjogMC43LjEKIyBGaWxlICAgOiBtZXRob2QudW5pbnN0YWxsLnBocAojIFB1cnBvc2U6IHVuaW5zdGFsbHMgdGhlIG1vZHVsZSwgcmVtb3ZlcyB0YWJsZXMsIHByZWZlcmVuY2VzLCBwZXJtaXNzaW9ucy4uLiAKIyBMaWNlbnNlOiBHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKaWYoIWlzX29iamVjdChjbXNtcygpKSkgZXhpdDsKCiRkYiAgICAgICA9JiAkdGhpcy0+R2V0RGIoKTsKJGRpY3QgICAgID0gTmV3RGF0YURpY3Rpb25hcnkoICRkYiApOwokc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9BZHZhbmNlZENvbnRlbnRfYmxvY2tkaXNwbGF5IiApOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX0FkdmFuY2VkQ29udGVudF9tZXNzYWdlZGlzcGxheSIgKTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwokc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9BZHZhbmNlZENvbnRlbnRfZ3JvdXBkaXNwbGF5IiApOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX0FkdmFuY2VkQ29udGVudF9tdWx0aV9pbnB1dHMiICk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfQWR2YW5jZWRDb250ZW50X211bHRpX2lucHV0X3RwbF9hc3NvY3MiICk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCmlmKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCd1bmluc3RhbGxfYWN0aW9uJykgIT0gJycpIHsKCXN3aXRjaCgkdGhpcy0+R2V0UHJlZmVyZW5jZSgndW5pbnN0YWxsX2FjdGlvbicpKSB7CgkJY2FzZSAxOgoJCQkvLyBEZWxldGUKCQkJLy8gZ2V0IGlkIG9mIGFsbCBjb250ZW50IG9mIHR5cGUgQWR2YW5jZWRDb250ZW50CgkJCSRxdWVyeSAgICA9ICJTRUxFQ1QgY29udGVudF9pZCBGUk9NICIuIGNtc19kYl9wcmVmaXgoKS4iY29udGVudCBXSEVSRSB0eXBlID0gPyI7CgkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCdjb250ZW50MicpKTsKCQkJJGNvbnRlbnRzID0gYXJyYXkoKTsKCQkJd2hpbGUoJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpIHsKCQkJCSRjb250ZW50c1tdID0gJHJvd1snY29udGVudF9pZCddOwoJCQl9CgkJCS8vIGRlbGV0ZSBhbGwgY29udGVudCBvZiB0eXBlIEFkdmFuY2VkQ29udGVudAoJCQkkcXVlcnkgICAgPSAiREVMRVRFIEZST00gIi4gY21zX2RiX3ByZWZpeCgpLiJjb250ZW50IFdIRVJFIHR5cGUgPSA/IjsKCQkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJ2NvbnRlbnQyJykpOwoJCQkKCQkJLy8gZGVsZXRlIGNvbnRlbnQgcHJvcHMKCQkJJHF1ZXJ5ICAgID0gIkRFTEVURSBGUk9NICIuIGNtc19kYl9wcmVmaXgoKS4iY29udGVudF9wcm9wcyBXSEVSRSBjb250ZW50X2lkIElOICgiLmltcGxvZGUoJywnLCRjb250ZW50cykuIikiOwoJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKCQkJCgkJCWJyZWFrOwoJCQkKCQljYXNlIDI6CgkJCS8vIFNldCB0byBjb250ZW50CgkJCSRxdWVyeSAgICA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuImNvbnRlbnQgU0VUIHR5cGUgPSA/IFdIRVJFIHR5cGUgPSA/IjsKCQkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJ2NvbnRlbnQnLCdjb250ZW50MicpKTsKCQkJYnJlYWs7CgkJCQoJCWNhc2UgMzoKCQkJLy8gZ2V0IGlkIG9mIGFsbCBjb250ZW50IG9mIHR5cGUgQWR2YW5jZWRDb250ZW50CgkJCSRxdWVyeSAgICA9ICJTRUxFQ1QgY29udGVudF9pZCBGUk9NICIuIGNtc19kYl9wcmVmaXgoKS4iY29udGVudCBXSEVSRSB0eXBlID0gPyI7CgkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCdjb250ZW50MicpKTsKCQkJJGNvbnRlbnRzID0gYXJyYXkoKTsKCQkJd2hpbGUoJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpIHsKCQkJCSRjb250ZW50c1tdID0gJHJvd1snY29udGVudF9pZCddOwoJCQl9CgkJCS8vIHNldCB0byBjb250ZW50CgkJCSRxdWVyeSAgICA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuImNvbnRlbnQgU0VUIHR5cGUgPSA/IFdIRVJFIHR5cGUgPSA/IjsKCQkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJ2NvbnRlbnQnLCdjb250ZW50MicpKTsKCQkJCgkJCS8vIGRlbGV0ZSBjb250ZW50IHByb3BzCgkJCSRxdWVyeSAgICA9ICJERUxFVEUgRlJPTSAiLiBjbXNfZGJfcHJlZml4KCkuImNvbnRlbnRfcHJvcHMgCgkJCQlXSEVSRSBjb250ZW50X2lkIElOICgiLmltcGxvZGUoJywnLCRjb250ZW50cykuIikgQU5EIHByb3BfbmFtZSAhPSAnY29udGVudF9lbiciOwoJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKCQkJCgkJCWJyZWFrOwoJCQkKCQlkZWZhdWx0OiBicmVhazsKCQkKCX0KfQoKLy8gcmVtb3ZlIHBlcm1pc3Npb25zCiR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCdNYW5hZ2UgQWR2YW5jZWRDb250ZW50Jyk7CiR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCdNYW5hZ2UgQWxsIEFkdmFuY2VkQ29udGVudCBCbG9ja3MnKTsKJHRoaXMtPlJlbW92ZVBlcm1pc3Npb24oJ01hbmFnZSBBZHZhbmNlZENvbnRlbnQgT3B0aW9ucycpOwokdGhpcy0+UmVtb3ZlUGVybWlzc2lvbignTWFuYWdlIEFkdmFuY2VkQ29udGVudCBNdWx0aUlucHV0cycpOwokdGhpcy0+UmVtb3ZlUGVybWlzc2lvbignTWFuYWdlIEFkdmFuY2VkQ29udGVudCBNdWx0aUlucHV0IFRlbXBsYXRlcycpOwoKJHRoaXMtPlJlbW92ZUV2ZW50SGFuZGxlciggJ0NvcmUnLCAnQ29udGVudFBvc3RSZW5kZXInKTsKCiR0aGlzLT5EZWxldGVUZW1wbGF0ZSgpOwoKLy8gcmVtb3ZlIHByZWZlcmVuY2VzCiR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCk7CgokdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5MYW5nKCdBZHZhbmNlZENvbnRlbnQnKSwgCgkkdGhpcy0+TGFuZygndW5pbnN0YWxsZWQnLCR0aGlzLT5HZXRWZXJzaW9uKCkpKTsKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIE1vZHVsZSA6IEFkdmFuY2VkQ29udGVudCAoYykgMjAxMCBieSBHZW9yZyBCdXNjaCAoZ2VvcmcuYnVzY2hAZ214Lm5ldCkKIyAgICAgICAgICBhIGNvbnRlbnQgbWFuYWdlbWVudCB0b29sIGZvciBDTVMgTWFkZSBTaW1wbGUKIyAgICAgICAgICBUaGUgcHJvamVjdHMgaG9tZXBhZ2UgaXMgaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9jb250ZW50Mi8KIyAgICAgICAgICBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDQtMjAxMCBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgICAgICAgICAgVGhlIHByb2plY3RzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgVmVyc2lvbjogMC43LjEKIyBGaWxlICAgOiBtZXRob2QudXBncmFkZS5waHAKIyBQdXJwb3NlOiBwZXJmb3JtcyBhIG1vZHVsZSB1cGdyYWRlCiMgTGljZW5zZTogR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmlmKCFpc19vYmplY3QoY21zbXMoKSkpIGV4aXQ7CgokY3VycmVudF92ZXJzaW9uID0gJG9sZHZlcnNpb247CiRkYiAgICAgICAgICAgICAgPSYgJHRoaXMtPkdldERiKCk7Cgpzd2l0Y2goJGN1cnJlbnRfdmVyc2lvbikgCnsKCWNhc2UgJzAuMyc6CgljYXNlICcwLjMuMSc6CgkJCgkJJHRoaXMtPlJlbW92ZVBlcm1pc3Npb24oJ0FwcHJvdmUgQWR2YW5jZWRDb250ZW50Jyk7CgkJJHRoaXMtPlJlbW92ZVBlcm1pc3Npb24oJ01vZGlmeSBBZHZhbmNlZENvbnRlbnQgQmxvY2sgT3JkZXInKTsKCQkkdGhpcy0+UmVtb3ZlUGVybWlzc2lvbignQWRkIEFkdmFuY2VkQ29udGVudCBCbG9ja3MnKTsKCQkkdGhpcy0+UmVtb3ZlUGVybWlzc2lvbignRGVsZXRlIEFkdmFuY2VkQ29udGVudCBCbG9ja3MnKTsKCQkkdGhpcy0+UmVtb3ZlUGVybWlzc2lvbignTW9kaWZ5IEFkdmFuY2VkQ29udGVudCBCbG9jayBPcHRpb25zJyk7CgkJCgkJJHRoaXMtPlJlbW92ZUV2ZW50SGFuZGxlciggJ0NvcmUnLCAnQ29udGVudEVkaXRQcmUnKTsKCQkkdGhpcy0+UmVtb3ZlRXZlbnRIYW5kbGVyKCAnQ29yZScsICdDb250ZW50RWRpdFBvc3QnKTsKCQkkdGhpcy0+UmVtb3ZlRXZlbnRIYW5kbGVyKCAnQ29yZScsICdDb250ZW50RGVsZXRlUG9zdCcpOwoJCSR0aGlzLT5SZW1vdmVFdmVudEhhbmRsZXIoICdDb3JlJywgJ0VkaXRUZW1wbGF0ZVBvc3QnKTsKCQkkdGhpcy0+UmVtb3ZlRXZlbnRIYW5kbGVyKCAnQ29yZScsICdEZWxldGVUZW1wbGF0ZVBvc3QnKTsKCgkJJGRpY3QgICAgID0gTmV3RGF0YURpY3Rpb25hcnkoICRkYiApOwoJCSRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX0FkdmFuY2VkQ29udGVudCIgKTsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkJCgkJJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfQWR2YW5jZWRDb250ZW50X2RyYWZ0cyIgKTsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkJCgkJJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfQWR2YW5jZWRDb250ZW50X3Byb3BzIiApOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCQkKCQkkc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9BZHZhbmNlZENvbnRlbnRfcHJvcHNfZHJhZnRzIiApOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCQkKCQkkc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCAKCQkJY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfQWR2YW5jZWRDb250ZW50X2FkZHRfZWRpdG9ycyIgKTsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkJCgkJJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggCgkJCWNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX0FkdmFuY2VkQ29udGVudF9hZGR0X2VkaXRvcnNfZHJhZnRzIiApOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCQkKCQkvLyBnZXQgcHJvcG5hbWUgb2YgYWxsIGNvbnRlbnQgb2YgdHlwZSBBZHZhbmNlZENvbnRlbnQKCQkkcXVlcnkgICAgPSAiU0VMRUNUIENQLnByb3BfbmFtZSwgQy5jb250ZW50X2lkIEZST00gIi4gY21zX2RiX3ByZWZpeCgpLiJjb250ZW50IEMgCgkJCUxFRlQgSk9JTiAiLmNtc19kYl9wcmVmaXgoKS4iY29udGVudF9wcm9wcyBDUCBPTiBDUC5jb250ZW50X2lkID0gQy5jb250ZW50X2lkIAoJCQlXSEVSRSBDLnR5cGUgPSA/IjsKCQkJCgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJ2NvbnRlbnQyJykpOwoJCSRjb250ZW50cyA9IGFycmF5KCk7CgkJCgkJd2hpbGUoJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpIAoJCXsKCQkJLy8gdXBkYXRlIHByb3BuYW1lcyAocmVtb3Zpbmcgc3BlY2lhbCBjaGFycywgdW1sYXV0cyBhbmQgd2hpdGVzcGFjZXMpCgkJCSRxdWVyeSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuImNvbnRlbnRfcHJvcHMgU0VUIHByb3BfbmFtZSA9ID8gCgkJCQlXSEVSRSBjb250ZW50X2lkID0gPyBBTkQgcHJvcF9uYW1lID0gPyI7CgkJCQkKCQkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkocHJlZ19yZXBsYWNlKCcvLSsvJywnXycsbXVuZ2Vfc3RyaW5nX3RvX3VybCgkcm93Wydwcm9wX25hbWUnXSkpLCRyb3dbJ2NvbnRlbnRfaWQnXSwkcm93Wydwcm9wX25hbWUnXSkpOwoJCX0KCQkKCQkkY3VycmVudF92ZXJzaW9uID0gJzAuMy4yJzsKCQkKCWNhc2UgJzAuMy4yJzoKCWNhc2UgJzAuMy4zIHByZSc6CgkJJHRoaXMtPkFkZEV2ZW50SGFuZGxlciggJ0NvcmUnLCAnQ29udGVudFBvc3RSZW5kZXInLCBmYWxzZSApOwoJCSRjdXJyZW50X3ZlcnNpb24gPSAnMC4zLjMnOwoJCQoJY2FzZSAnMC4zLjMnOgoJCS8vIHJlbW92ZSB1c2VycHJlZnMKCQkkcXVlcnkgICAgPSAiREVMRVRFIEZST00gIi4gY21zX2RiX3ByZWZpeCgpLiJ1c2VycHJlZnMgV0hFUkUgcHJlZmVyZW5jZSBMSUtFICdBZHZhbmNlZENvbnRlbnRfJSI7CgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSk7CgkJCgkJLy8gYWRkIG5ldyB0YWJsZSBmb3IgdXNlciBwcmVmcwoJCSR0YWJvcHRhcnJheSA9IGFycmF5KCdteXNxbCcgPT4gJ1RZUEU9TXlJU0FNJyk7CgkJJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoJCSRmbGRzID0gInVzZXJfaWQgSSwgY29udGVudF9pZCBJLCBibG9ja19pZCBYLCBibG9ja19kaXNwbGF5IEkiOwoJCSRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9BZHZhbmNlZENvbnRlbnRfYmxvY2tkaXNwbGF5IiwgCgkJCSRmbGRzLCAkdGFib3B0YXJyYXkpOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCQkKCQkkY3VycmVudF92ZXJzaW9uID0gJzAuMy40JzsKCQoJY2FzZSAnMC4zLjQnOgoJY2FzZSAnMC40JzoKCQkvLyBhZGQgbmV3IHRhYmxlIGZvciB1c2VyIHByZWZzCgkJJHRhYm9wdGFycmF5ID0gYXJyYXkoJ215c3FsJyA9PiAnVFlQRT1NeUlTQU0nKTsKCQkkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CgkJJGZsZHMgPSAidXNlcl9pZCBJLCBjb250ZW50X2lkIEksIGJsb2NrX2lkIFgsIG1lc3NhZ2VfZGlzcGxheSBJIjsKCQkkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfQWR2YW5jZWRDb250ZW50X21lc3NhZ2VkaXNwbGF5IiwgCgkJCSRmbGRzLCAkdGFib3B0YXJyYXkpOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCQkKCQkkY3VycmVudF92ZXJzaW9uID0gJzAuNC4xJzsKCQoJY2FzZSAnMC40LjEnOgoJY2FzZSAnMC40LjInOgoJY2FzZSAnMC40LjMnOgoJY2FzZSAnMC40LjQnOgoJCSR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKCdNYW5hZ2UgQWR2YW5jZWRDb250ZW50IE9wdGlvbnMnLCAnTWFuYWdlIEFkdmFuY2VkQ29udGVudCBPcHRpb25zJyk7CgkJJGN1cnJlbnRfdmVyc2lvbiA9ICcwLjUnOwoJCQoJY2FzZSAnMC41JzoKCWNhc2UgJzAuNS4xJzoKCQkKCQkkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgndW5pbnN0YWxsX2FjdGlvbicpOwoJCSR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdyZXN0cmljdGRpcnMnKTsKCQkkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnc2hvd2ZpbGVtYW5hZ2VtZW50Jyk7CgkJJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ3Nob3d0aHVtYm5haWxmaWxlcycpOwoJCSR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdhbGxvd3NjYWxpbmcnKTsKCQkkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnc2NhbGluZ3dpZHRoJyk7CgkJJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ3NjYWxpbmdoZWlnaHQnKTsKCQkkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnZmlsZXBpY2tlcnN0eWxlJyk7CgkJJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ21ha2V0aHVtYm5haWwnKTsKCQkkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnZmlsZXBpY2tlcndpZHRoJyk7CgkJJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ2ZpbGVwaWNrZXJoZWlnaHQnKTsKCQkkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnZmlsZXBpY2tlcndpZHRodW5pdCcpOwoJCSR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdmaWxlcGlja2VyaGVpZ2h0dW5pdCcpOwoJCSR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdhbGxvd3Vwc2NhbGluZycpOwoJCSR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCd1c2VtaW1ldHlwZScpOwoJCQoJCSR0YWJvcHRhcnJheSA9IGFycmF5KCdteXNxbCcgPT4gJ1RZUEU9TXlJU0FNJyk7CgkJJGRpY3QgICAgID0gTmV3RGF0YURpY3Rpb25hcnkoICRkYiApOwoJCSRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX0FkdmFuY2VkQ29udGVudF9ibG9ja2Rpc3BsYXkiICk7CgkJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoJCSRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX0FkdmFuY2VkQ29udGVudF9tZXNzYWdlZGlzcGxheSIgKTsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkJJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfQWR2YW5jZWRDb250ZW50X2dyb3VwZGlzcGxheSIgKTsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkJCgkJLy8gVXNlciBTZXR0aW5ncwoJCSRmbGRzID0gInVzZXJfaWQgSSwgY29udGVudF9pZCBJLCB0ZW1wbGF0ZV9pZCBJLCBpdGVtX2lkIFgsIGl0ZW1fZGlzcGxheSBJIjsKCQkkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfQWR2YW5jZWRDb250ZW50X2Jsb2NrZGlzcGxheSIsIAoJCQkkZmxkcywgJHRhYm9wdGFycmF5KTsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkJCgkJLy8gVXNlciBTZXR0aW5ncwoJCSRmbGRzID0gInVzZXJfaWQgSSwgY29udGVudF9pZCBJLCB0ZW1wbGF0ZV9pZCBJLCBpdGVtX2lkIFgsIGl0ZW1fZGlzcGxheSBJIjsKCQkkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfQWR2YW5jZWRDb250ZW50X21lc3NhZ2VkaXNwbGF5IiwgCgkJCSRmbGRzLCAkdGFib3B0YXJyYXkpOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCQkKCQkvLyBVc2VyIFNldHRpbmdzCgkJJGZsZHMgPSAidXNlcl9pZCBJLCBjb250ZW50X2lkIEksIHRlbXBsYXRlX2lkIEksIGl0ZW1faWQgWCwgaXRlbV9kaXNwbGF5IEkiOwoJCSRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9BZHZhbmNlZENvbnRlbnRfZ3JvdXBkaXNwbGF5IiwgCgkJCSRmbGRzLCAkdGFib3B0YXJyYXkpOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCQkKCQkkY3VycmVudF92ZXJzaW9uID0gJzAuNic7CgkJCgljYXNlICcwLjYnOgoJCQoJCSR0YWJvcHRhcnJheSA9IGFycmF5KCdteXNxbCcgPT4gJ1RZUEU9TXlJU0FNJyk7CgkJJGRpY3QgICAgICAgID0gTmV3RGF0YURpY3Rpb25hcnkoICRkYiApOwoJCQoJCS8vIG11bHRpcGxlIGlucHV0cwoJCSRmbGRzID0gImlucHV0X2lkIEMoNjQpIEtFWSwgaW5wdXRfZmllbGRzIFgiOwoJCSRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9BZHZhbmNlZENvbnRlbnRfbXVsdGlfaW5wdXRzIiwgCgkJCSRmbGRzLCAkdGFib3B0YXJyYXkpOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCQkKCQkvLyBtdWx0aXBsZSBpbnB1dCB0cGwgYXNzb2NzCgkJJGZsZHMgPSAiaW5wdXRfaWQgQyg2NCksIHRwbF9uYW1lIFgiOwoJCSRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9BZHZhbmNlZENvbnRlbnRfbXVsdGlfaW5wdXRfdHBsX2Fzc29jcyIsIAoJCQkkZmxkcywgJHRhYm9wdGFycmF5KTsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkJCgkJJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oJ01hbmFnZSBBZHZhbmNlZENvbnRlbnQgTXVsdGlJbnB1dHMnLCAnTWFuYWdlIEFkdmFuY2VkQ29udGVudCBNdWx0aUlucHV0cycpOwoJCSR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKCdNYW5hZ2UgQWR2YW5jZWRDb250ZW50IE11bHRpSW5wdXQgVGVtcGxhdGVzJywgJ01hbmFnZSBBZHZhbmNlZENvbnRlbnQgTXVsdGlJbnB1dCBUZW1wbGF0ZXMnKTsKCQkkdGhpcy0+U2V0VGVtcGxhdGUoJ211bHRpX2lucHV0X1NhbXBsZVRlbXBsYXRlJywKJzxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CjxwPgp7Zm9yZWFjaCBmcm9tPSRpbnB1dHMgaXRlbT1lbG19Cgl7JGVsbS5sYWJlbH06Jm5ic3A7eyRlbG0uaW5wdXR9Jm5ic3A7CnsvZm9yZWFjaH0KPC9wPgo8L2Rpdj4nKTsKCQkkdGhpcy0+QWRkTXVsdGlJbnB1dCgnU2FtcGxlSW5wdXQnLCcKe2NvbnRlbnQgYmxvY2s9Im1vZHVsZV9zZWxlY3QiIGxhYmVsPSJTZWxlY3QgYSBtb2R1bGUiIGJsb2NrX3R5cGU9ImRyb3Bkb3duIiBpdGVtcz0ifE5ld3N8TWVudSIgdmFsdWVzPSJ8TmV3c3xNZW51TWFuYWdlciJ9Cntjb250ZW50IGJsb2NrPSJtb2R1bGVfcGFyYW1zIiBsYWJlbD0iRW50ZXIgbW9kdWxlIHBhcmFtZXRlcnMgaGVyZSIgYmxvY2tfdHlwZT0idGV4dCIgb25lbGluZT10cnVlIHNpemU9IjYwIn0nKTsKCQkkdGhpcy0+QWRkVHBsQXNzb2MoJ211bHRpX2lucHV0JywgJ1NhbXBsZUlucHV0JywgJ211bHRpX2lucHV0X1NhbXBsZVRlbXBsYXRlJyk7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RlZmF1bHRfbXVsdGlfaW5wdXRfdHBsJywgJ211bHRpX2lucHV0X1NhbXBsZVRlbXBsYXRlJyk7Cgp9Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/addMultiInput.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmIGlzc2V0KCRlcnJvcm1lc3NhZ2UpICYmICRlcnJvcm1lc3NhZ2UhPScnfQo8ZGl2IGNsYXNzPSJwYWdlZXJyb3Jjb250YWluZXIiPgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8dWwgY2xhc3M9InBhZ2VlcnJvciI+PGxpPnskZXJyb3JtZXNzYWdlfTwvbGk+PC91bD4KCTwvZGl2Pgo8L2Rpdj4Key9pZn0Ke2lmIGlzc2V0KCRtZXNzYWdlKSAmJiAkbWVzc2FnZSE9Jyd9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+Cgk8ZGl2IGNsYXNzPSJwYWdlbWNvbnRhaW5lciI+CgkJPHA+eyRtZXNzYWdlfTwvcD4KCTwvZGl2Pgo8L2Rpdj4Key9pZn0KeyRzdGFydF9mb3JtfQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JGlucHV0X2lkX3RleHR9PC9wPgoJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9pZF9pbnB1dH08YnIgLz48L3A+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JGlucHV0X3RwbF90ZXh0fTwvcD4KCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfdHBsX2lucHV0fTxiciAvPjwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+Cgk8cCBjbGFzcz0icGFnZXRleHQiPnskaW5wdXRfZmllbGRzX3RleHR9PC9wPgoJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9maWVsZHNfaW5wdXR9PGJyIC8+PC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCTxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgoJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzdWJtaXR9Jm5ic3A7eyRjYW5jZWx9PGJyIC8+PC9wPgo8L2Rpdj4KeyRlbmRfZm9ybX0K]]></data>
	</file>
	<file>
	  <filename>/templates/addMultiInputTpl.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmIGlzc2V0KCRlcnJvcm1lc3NhZ2UpICYmICRlcnJvcm1lc3NhZ2UhPScnfQo8ZGl2IGNsYXNzPSJwYWdlZXJyb3Jjb250YWluZXIiPgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8dWwgY2xhc3M9InBhZ2VlcnJvciI+PGxpPnskZXJyb3JtZXNzYWdlfTwvbGk+PC91bD4KCTwvZGl2Pgo8L2Rpdj4Key9pZn0Ke2lmIGlzc2V0KCRtZXNzYWdlKSAmJiAkbWVzc2FnZSE9Jyd9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+Cgk8ZGl2IGNsYXNzPSJwYWdlbWNvbnRhaW5lciI+CgkJPHA+eyRtZXNzYWdlfTwvcD4KCTwvZGl2Pgo8L2Rpdj4Key9pZn0KeyRzdGFydF9mb3JtfQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJPGRpdiBjbGFzcz0icGFnZXRleHQiPnskdHBsX25hbWVfdGV4dH08L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VpbnB1dCI+eyR0cGxfbmFtZV9pbnB1dH08YnIgLz48L2Rpdj4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+Cgk8ZGl2IGNsYXNzPSJwYWdldGV4dCI+eyR0ZW1wbGF0ZV90ZXh0fTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZWlucHV0Ij4KCQk8dGFibGUgc3R5bGU9InZlcnRpY2FsLWFsaWduOnRvcCI+CgkJCTx0Ym9keT4KCQkJCTx0cj4KCQkJCQk8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOnRvcCI+CgkJCQkJCXskdGVtcGxhdGVfaW5wdXR9CgkJCQkJPC90ZD4KCQkJCQk8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOnRvcCI+CgkJCQkJCXskaGVscF90ZXh0fQoJCQkJCTwvdGQ+CgkJCQk8L3RyPgoJCQk8L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+Cgk8ZGl2IGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0fSZuYnNwO3skY2FuY2VsfTxiciAvPjwvZGl2Pgo8L2Rpdj4KeyRlbmRfZm9ybX0K]]></data>
	</file>
	<file>
	  <filename>/templates/contentBlocks.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBTVEFSVCBBRFZBTkNFRCBDT05URU5UIE9VVFBVVCAtLT4Ke2xpdGVyYWx9CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9InNjcmVlbiIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL21vZHVsZXMvQWR2YW5jZWRDb250ZW50L2Nzcy9nZW5lcmFsLmNzcyIgLz4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0ic2NyZWVuIiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vbW9kdWxlcy9BZHZhbmNlZENvbnRlbnQvY3NzL2NhbGVuZGFyLmNzcyIgLz4KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL21vZHVsZXMvQWR2YW5jZWRDb250ZW50L2pzL2Z1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci8vPCFbQ0RBVEFbCglBZHZhbmNlZENvbnRlbnQubW9kdWxlSWQgICAgICAgPSAney9saXRlcmFsfXskbW9kdWxlX2lkfXtsaXRlcmFsfSc7CglBZHZhbmNlZENvbnRlbnQuaW5pdFRpbWVPdXRNaW4gPSA1MDsgICAvL21zCglBZHZhbmNlZENvbnRlbnQuaW5pdFRpbWVPdXRNYXggPSAxMDA7ICAvL21zCglBZHZhbmNlZENvbnRlbnQubG9hZFRpbWVPdXRNaW4gPSA1MDA7ICAvL21zCglBZHZhbmNlZENvbnRlbnQubG9hZFRpbWVPdXRNYXggPSAxMDAwOyAvL21zCglBZHZhbmNlZENvbnRlbnQuZGVsYXlNaW4gICAgICAgPSAxMDsgICAvL21zCglBZHZhbmNlZENvbnRlbnQuZGVsYXlNYXggICAgICAgPSAxMDA7ICAvL21zCgl7L2xpdGVyYWx9Cgl7aWYgJGRhdGVfYmxvY2tzfEBjb3VudCA+IDB9Cgl7bGl0ZXJhbH0KCUFkdmFuY2VkQ29udGVudC5Jbml0Q2FsZW5kYXJDb250ZW50QmxvY2tzID0gZnVuY3Rpb24oKSB7Cgl7L2xpdGVyYWx9Cgl7Zm9yZWFjaCBmcm9tPSRkYXRlX2Jsb2NrcyBpdGVtPWNvbnRlbnRfYmxvY2tfaWR9CgkJe2lmICRjb250ZW50X2Jsb2Nrcy4kY29udGVudF9ibG9ja19pZC5tb2RlID09ICdjYWxlbmRhcid9CgkJCXtsaXRlcmFsfQoJCWpRdWVyeSgnI3svbGl0ZXJhbH17JGNvbnRlbnRfYmxvY2tfaWR9e2xpdGVyYWx9X0FkdmFuY2VkQ29udGVudERhdGVQaWNrZXJEaXNwbGF5JykuY2FsZW5kYXIoewoJCQl0cmlnZ2VyRWxlbWVudDogJyN7L2xpdGVyYWx9eyRjb250ZW50X2Jsb2NrX2lkfXtsaXRlcmFsfV9BZHZhbmNlZENvbnRlbnREYXRlUGlja2VyVHJpZ2dlcicsIAoJCQlkYXRlRm9ybWF0OiAnJXgnLCAKCQkJY2xvc2VIYW5kbGVyOiBmdW5jdGlvbiAoY2FsZW5kYXIpIHsKCQkJCWpRdWVyeSgnI3svbGl0ZXJhbH17JGNvbnRlbnRfYmxvY2tfaWR9e2xpdGVyYWx9X0FkdmFuY2VkQ29udGVudERhdGUnKS52YWwoZXZhbChjYWxlbmRhci5kYXRlLmdldFRpbWUoKS8xMDAwKSk7IAoJCQkJY2FsZW5kYXIuY29udGFpbmVyLmhpZGUoKTsKCQkJfQoJCX0pOwoJCQl7L2xpdGVyYWx9CgkJey9pZn0KCXsvZm9yZWFjaH0KCXtsaXRlcmFsfQoJfQoJey9saXRlcmFsfQoJey9pZn0KCXtsaXRlcmFsfQoJQWR2YW5jZWRDb250ZW50LkluaXQoKTsKLy9dXT4KPC9zY3JpcHQ+CnsvbGl0ZXJhbH0KCntpZiAkcGFnZV90YWIuYmxvY2tfdGFic3xAY291bnQgPiAwfQoKPCEtLSBzdGFydCBibG9ja190YWJzIC0tPgo8IS0tIHN0YXJ0IGJsb2NrX3RhYnMgdGFiaGVhZGVycyAtLT4KPGRpdiBpZD0icGFnZV90YWJzIj4KCTxkaXYgaWQ9ImJsb2NrX3RhYnMiIGNsYXNzPSJTdWJUYWJXcmFwcGVyIj4KCQkKCXtmb3JlYWNoIGZyb209JHBhZ2VfdGFiLmJsb2NrX3RhYnMgaXRlbT1ibG9ja190YWJfaWQgbmFtZT1jdXJyZW50X3RhYn0KCQkKCQk8ZGl2IGlkPSJlZGl0YWJ7JHBhZ2VfdGFiX25yfV97JGJsb2NrX3RhYl9pZH0iIHtpZiAkc21hcnR5LmZvcmVhY2guY3VycmVudF90YWIuZmlyc3R9Y2xhc3M9ImFjdGl2ZSJ7L2lmfSBvbmNsaWNrPSJBZHZhbmNlZENvbnRlbnQuVG9nZ2xlQmxvY2sodGhpcy5pZCwgJ2Jsb2NrX3RhYnMnKSI+CgkJCQoJCQl7JGJsb2NrX3RhYnMuJGJsb2NrX3RhYl9pZC50YWJfbmFtZX0KCQkJCgkJPC9kaXY+CgkJCgl7L2ZvcmVhY2h9CgkJCgk8L2Rpdj4KPC9kaXY+CjwhLS0gZW5kIGJsb2NrX3RhYnMgdGFiaGVhZGVycyAtLT4gCjwhLS0gc3RhcnQgYmxvY2tfdGFicyB0YWJjb250ZW50IC0tPgo8ZGl2IGlkPSJwYWdlX2NvbnRlbnQiIHN0eWxlPSJwYWRkaW5nLWJvdHRvbTowO21hcmdpbi1ib3R0b206MjBweDsiPgoJCgl7Zm9yZWFjaCBmcm9tPSRwYWdlX3RhYi5ibG9ja190YWJzIGl0ZW09YmxvY2tfdGFiX2lkIG5hbWU9Y3VycmVudF90YWJ9CgkKCTwhLS0gc3RhcnQgYmxvY2tfdGFiIHskYmxvY2tfdGFiX2lkfSAtLT4KCTxkaXYgaWQ9ImVkaXRhYl97JGJsb2NrX3RhYl9pZH1fYyJ7aWYgJHNtYXJ0eS5mb3JlYWNoLmN1cnJlbnRfdGFiLmZpcnN0fSBzdHlsZT0iZGlzcGxheTpibG9jayJ7ZWxzZX0gc3R5bGU9ImRpc3BsYXk6bm9uZSJ7L2lmfT4KCQkKCQl7aWYgJGJsb2NrX3RhYnMuJGJsb2NrX3RhYl9pZC5ibG9ja19ncm91cHN8QGNvdW50ID4gMH0KCQk8IS0tIHN0YXJ0IGJsb2NrX2dyb3VwcyBpbiBibG9ja190YWIgeyRibG9ja190YWJfaWR9IC0tPgoJCQl7Zm9yZWFjaCBmcm9tPSRibG9ja190YWJzLiRibG9ja190YWJfaWQuYmxvY2tfZ3JvdXBzIGl0ZW09YmxvY2tfZ3JvdXBfaWR9CgkJCgkJPCEtLSBzdGFydCBibG9ja19ncm91cCB7JGJsb2NrX2dyb3VwX2lkfSBpbiBibG9ja190YWIgeyRibG9ja190YWJfaWR9IC0tPgoJCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJCTxmaWVsZHNldCBzdHlsZT0ibWFyZ2luOjVweCAzJSAxNXB4IDA7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZy1yaWdodDogMzBweDsiPgoJCQkJPGxlZ2VuZCBjbGFzcz0iQWR2YW5jZWRDb250ZW50X0Jsb2NrR3JvdXAiPgoJCQkJCXskYmxvY2tfZ3JvdXBzLiRibG9ja19ncm91cF9pZC5ncm91cF9uYW1lfToKCQkJCTwvbGVnZW5kPgoJCQkJPGRpdiBzdHlsZT0iZmxvYXQ6cmlnaHQ7bWFyZ2luOi0yM3B4IC0yM3B4IDAgMDtwb3NpdGlvbjpyZWxhdGl2ZSIgb25jbGljaz0ialF1ZXJ5KCcjeyRibG9ja19ncm91cF9pZH1fd3JhcHBlcicpLnRvZ2dsZSgnZmFzdCcpOyB0aGlzLmNsYXNzTmFtZSA9ICh0aGlzLmNsYXNzTmFtZSA9PSAnbm90aWZpY2F0aW9ucy1oaWRlJyA/ICdub3RpZmljYXRpb25zLXNob3cnIDogJ25vdGlmaWNhdGlvbnMtaGlkZScpOyBqUXVlcnkuZ2V0KCd7JGJsb2NrX2dyb3Vwcy4kYmxvY2tfZ3JvdXBfaWQucHJlZl91cmx9JnskbW9kdWxlX2lkfWl0ZW1fZGlzcGxheT0nKyh0aGlzLmNsYXNzTmFtZSA9PSAnbm90aWZpY2F0aW9ucy1oaWRlJyA/IDEgOiAwKSk7IiBjbGFzcz0ie2lmICRibG9ja19ncm91cHMuJGJsb2NrX2dyb3VwX2lkLmRpc3BsYXkgPT0gMH1ub3RpZmljYXRpb25zLXNob3d7ZWxzZX1ub3RpZmljYXRpb25zLWhpZGV7L2lmfSIgaWQ9InRvZ2dsZS17JGJsb2NrX2dyb3VwX2lkfSI+PC9kaXY+CgkJCQk8IS0tIHN0YXJ0IGJsb2NrcyBpbiBibG9ja19ncm91cCB7JGJsb2NrX2dyb3VwX2lkfSBpbiBibG9ja190YWIgeyRibG9ja190YWJfaWR9IC0tPgoJCQkJPGRpdiBpZD0ieyRibG9ja19ncm91cF9pZH1fd3JhcHBlciIgY2xhc3M9IntpZiAkYmxvY2tfZ3JvdXBzLiRibG9ja19ncm91cF9pZC5kaXNwbGF5ID09IDB9aW52aXNpYmxle2Vsc2V9dmlzaWJsZXsvaWZ9Ij4KCQkJCQoJCQkJe2ZvcmVhY2ggZnJvbT0kYmxvY2tfZ3JvdXBzLiRibG9ja19ncm91cF9pZC5jb250ZW50X2Jsb2NrcyBpdGVtPWNvbnRlbnRfYmxvY2tfaWR9CgkJCQkKCQkJCTwhLS0gc3RhcnQgYmxvY2sgeyRjb250ZW50X2Jsb2NrX2lkfSBpbiBibG9ja19ncm91cCB7JGJsb2NrX2dyb3VwX2lkfSBpbiBibG9ja190YWIgeyRibG9ja190YWJfaWR9IC0tPgoJCQkJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQkJCQk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCQkJCQk8c3Ryb25nPnskY29udGVudF9ibG9ja3MuJGNvbnRlbnRfYmxvY2tfaWQubGFiZWx9Ojwvc3Ryb25nPgoJCQkJCTwvZGl2PgoJCQkJCQoJCQkJCXtpZiAkY29udGVudF9ibG9ja3MuJGNvbnRlbnRfYmxvY2tfaWQuZGVzY3JpcHRpb259CgkJCQkJCgkJCQkJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQkJCQkJCgkJCQkJCXskY29udGVudF9ibG9ja3MuJGNvbnRlbnRfYmxvY2tfaWQuZGVzY3JpcHRpb259CgkJCQkJCQoJCQkJCTwvZGl2PgoJCQkJCQoJCQkJCXsvaWZ9CgkJCQkJCgkJCQkJPGRpdiBzdHlsZT0icGFkZGluZzogNXB4IDAgMCAwOyI+CgkJCQkJCQoJCQkJCXtpZiAkY29udGVudF9ibG9ja3MuJGNvbnRlbnRfYmxvY2tfaWQudHlwZSAhPSAnJ30KCQkJCQkJCgkJCQkJCTxwPnskY29udGVudF9ibG9ja3MuJGNvbnRlbnRfYmxvY2tfaWQuaW5wdXR9PC9wPgoJCQkJCQkKCQkJCQl7ZWxzZX0KCQkJCQkJCgkJCQkJCXskY29udGVudF9ibG9ja3MuJGNvbnRlbnRfYmxvY2tfaWQuY29udGVudH0KCQkJCQkJCgkJCQkJey9pZn0KCQkJCQkJCgkJCQkJPC9kaXY+CgkJCQk8L2Rpdj4KCQkJCTwhLS0gZW5kIGJsb2NrIHskY29udGVudF9ibG9ja19pZH0gaW4gYmxvY2tfZ3JvdXAgeyRibG9ja19ncm91cF9pZH0gaW4gYmxvY2tfdGFiIHskYmxvY2tfdGFiX2lkfSAtLT4KCQkJCQoJCQkJey9mb3JlYWNofQoJCQkJPCEtLSBlbmQgYmxvY2tzIGluIGJsb2NrX2dyb3VwIHskYmxvY2tfZ3JvdXBfaWR9IGluIGJsb2NrX3RhYiB7JGJsb2NrX3RhYl9pZH0gLS0+CgkJCTwvZmllbGRzZXQ+CgkJPC9kaXY+CgkJPCEtLSBlbmQgYmxvY2tfZ3JvdXAgeyRibG9ja19ncm91cF9pZH0gaW4gYmxvY2tfdGFiIHskYmxvY2tfdGFiX2lkfSAtLT4KCQkKCQkJey9mb3JlYWNofQoJCTwhLS0gZW5kIGJsb2NrX2dyb3VwcyBpbiBibG9ja190YWIgeyRibG9ja190YWJfaWR9IC0tPgoJCXsvaWZ9CgkJCgkJe2lmICRibG9ja190YWJzLiRibG9ja190YWJfaWQuY29udGVudF9ibG9ja3N8QGNvdW50ID4gMH0KCQk8IS0tIHN0YXJ0IGJsb2NrcyBpbiBibG9ja190YWIgeyRibG9ja190YWJfaWR9IC0tPgoJCQl7Zm9yZWFjaCBmcm9tPSRibG9ja190YWJzLiRibG9ja190YWJfaWQuY29udGVudF9ibG9ja3MgaXRlbT1jb250ZW50X2Jsb2NrX2lkfQoJCQoJCTwhLS0gc3RhcnQgYmxvY2sgeyRjb250ZW50X2Jsb2NrX2lkfSBpbiBibG9ja190YWIgeyRibG9ja190YWJfaWR9IC0tPgoJCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJCTxmaWVsZHNldCBzdHlsZT0ibWFyZ2luOjVweCAzJSAxNXB4IDA7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZy1yaWdodDogMzBweDsiPgoJCQkJPGxlZ2VuZCBjbGFzcz0iQWR2YW5jZWRDb250ZW50X0NvbnRlbnRCbG9jayI+eyRjb250ZW50X2Jsb2Nrcy4kY29udGVudF9ibG9ja19pZC5sYWJlbH06PC9sZWdlbmQ+CgkJCQkKCQkJCXtpZiAkY29udGVudF9ibG9ja3MuJGNvbnRlbnRfYmxvY2tfaWQudHlwZX0KCQkJCQoJCQkJPGRpdiBzdHlsZT0iZmxvYXQ6cmlnaHQ7bWFyZ2luOi0yM3B4IC0yM3B4IDAgMDtwb3NpdGlvbjpyZWxhdGl2ZSIgb25jbGljaz0ialF1ZXJ5KCcjeyRjb250ZW50X2Jsb2NrX2lkfV93cmFwcGVyJykudG9nZ2xlKCdmYXN0Jyk7IHRoaXMuY2xhc3NOYW1lID0gKHRoaXMuY2xhc3NOYW1lID09ICdub3RpZmljYXRpb25zLWhpZGUnID8gJ25vdGlmaWNhdGlvbnMtc2hvdycgOiAnbm90aWZpY2F0aW9ucy1oaWRlJyk7IGpRdWVyeS5nZXQoJ3skY29udGVudF9ibG9ja3MuJGNvbnRlbnRfYmxvY2tfaWQucHJlZl91cmx9JnskbW9kdWxlX2lkfWl0ZW1fZGlzcGxheT0nKyh0aGlzLmNsYXNzTmFtZSA9PSAnbm90aWZpY2F0aW9ucy1oaWRlJyA/IDEgOiAwKSk7IiBjbGFzcz0ie2lmICRjb250ZW50X2Jsb2Nrcy4kY29udGVudF9ibG9ja19pZC5kaXNwbGF5ID09IDB9bm90aWZpY2F0aW9ucy1zaG93e2Vsc2V9bm90aWZpY2F0aW9ucy1oaWRley9pZn0iIGlkPSJ0b2dnbGUteyRjb250ZW50X2Jsb2NrX2lkfSI+PC9kaXY+CgkJCQkKCQkJCXsvaWZ9CgkJCQkKCQkJCTxkaXYgaWQ9InskY29udGVudF9ibG9ja19pZH1fd3JhcHBlciIgY2xhc3M9IntpZiAkY29udGVudF9ibG9ja3MuJGNvbnRlbnRfYmxvY2tfaWQuZGlzcGxheSA9PSAwfWludmlzaWJsZXtlbHNlfXZpc2libGV7L2lmfSI+CgkJCQkJCgkJCQl7aWYgJGNvbnRlbnRfYmxvY2tzLiRjb250ZW50X2Jsb2NrX2lkLmRlc2NyaXB0aW9ufQoJCQkJCQoJCQkJCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJCQkJCQoJCQkJCXskY29udGVudF9ibG9ja3MuJGNvbnRlbnRfYmxvY2tfaWQuZGVzY3JpcHRpb259CgkJCQkJCQoJCQkJCTwvZGl2PgoJCQkJCQoJCQkJey9pZn0KCQkJCQkKCQkJCQk8ZGl2IHN0eWxlPSJwYWRkaW5nOiA1cHggMCAwIDA7Ij4KCQkJCQkJCgkJCQl7aWYgJGNvbnRlbnRfYmxvY2tzLiRjb250ZW50X2Jsb2NrX2lkLnR5cGUgIT0gJyd9CgkJCQkJCQoJCQkJCQk8cD57JGNvbnRlbnRfYmxvY2tzLiRjb250ZW50X2Jsb2NrX2lkLmlucHV0fTwvcD4KCQkJCQkJCgkJCQl7ZWxzZX0KCQkJCQkJCgkJCQkJeyRjb250ZW50X2Jsb2Nrcy4kY29udGVudF9ibG9ja19pZC5jb250ZW50fQoJCQkJCQkKCQkJCXsvaWZ9CgkJCQkJCQoJCQkJCTwvZGl2PgoJCQkJPC9kaXY+CgkJCTwvZmllbGRzZXQ+CgkJPC9kaXY+CgkJPCEtLSBlbmQgYmxvY2sgeyRjb250ZW50X2Jsb2NrX2lkfSBpbiBibG9ja190YWIgeyRibG9ja190YWJfaWR9IC0tPgoJCQoJCQl7L2ZvcmVhY2h9CgkJPCEtLSBlbmQgYmxvY2tzIGluIGJsb2NrX3RhYiB7JGJsb2NrX3RhYl9pZH0gLS0+CgkJey9pZn0KCQkKCTwvZGl2PgoJPCEtLSBlbmQgYmxvY2tfdGFiIHskYmxvY2tfdGFiX2lkfSAtLT4KCQoJey9mb3JlYWNofQoJCjwvZGl2Pgo8IS0tIGVuZCBibG9ja190YWJzIHRhYmNvbnRlbnQgLS0+CjwhLS0gZW5kIGJsb2NrX3RhYnMgLS0+Cgp7L2lmfQoKe2lmICRwYWdlX3RhYi5ibG9ja19ncm91cHN8QGNvdW50ID4gMH0KCjwhLS0gc3RhcnQgYmxvY2tfZ3JvdXBzIC0tPgoKCXtmb3JlYWNoIGZyb209JHBhZ2VfdGFiLmJsb2NrX2dyb3VwcyBpdGVtPWJsb2NrX2dyb3VwX2lkfQoJCjwhLS0gc3RhcnQgYmxvY2tfZ3JvdXAgeyRibG9ja19ncm91cF9pZH0gLS0+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+Cgk8ZmllbGRzZXQgc3R5bGU9Im1hcmdpbjo1cHggMyUgMTVweCAwO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmctcmlnaHQ6IDMwcHg7Ij4KCQk8bGVnZW5kIGNsYXNzPSJBZHZhbmNlZENvbnRlbnRfQmxvY2tHcm91cCI+CgkJCXskYmxvY2tfZ3JvdXBzLiRibG9ja19ncm91cF9pZC5ncm91cF9uYW1lfToKCQk8L2xlZ2VuZD4KCQk8ZGl2IHN0eWxlPSJmbG9hdDpyaWdodDttYXJnaW46LTIzcHggLTIzcHggMCAwO3Bvc2l0aW9uOnJlbGF0aXZlIiBvbmNsaWNrPSJqUXVlcnkoJyN7JGJsb2NrX2dyb3VwX2lkfV93cmFwcGVyJykudG9nZ2xlKCdmYXN0Jyk7IHRoaXMuY2xhc3NOYW1lID0gKHRoaXMuY2xhc3NOYW1lID09ICdub3RpZmljYXRpb25zLWhpZGUnID8gJ25vdGlmaWNhdGlvbnMtc2hvdycgOiAnbm90aWZpY2F0aW9ucy1oaWRlJyk7IGpRdWVyeS5nZXQoJ3skYmxvY2tfZ3JvdXBzLiRibG9ja19ncm91cF9pZC5wcmVmX3VybH0meyRtb2R1bGVfaWR9aXRlbV9kaXNwbGF5PScrKHRoaXMuY2xhc3NOYW1lID09ICdub3RpZmljYXRpb25zLWhpZGUnID8gMSA6IDApKTsiIGNsYXNzPSJ7aWYgJGJsb2NrX2dyb3Vwcy4kYmxvY2tfZ3JvdXBfaWQuZGlzcGxheSA9PSAwfW5vdGlmaWNhdGlvbnMtc2hvd3tlbHNlfW5vdGlmaWNhdGlvbnMtaGlkZXsvaWZ9IiBpZD0idG9nZ2xlLXskYmxvY2tfZ3JvdXBfaWR9Ij48L2Rpdj4KCQk8IS0tIHN0YXJ0IGJsb2NrcyBpbiBibG9ja19ncm91cCB7JGJsb2NrX2dyb3VwX2lkfSAtLT4KCQk8ZGl2IGlkPSJ7JGJsb2NrX2dyb3VwX2lkfV93cmFwcGVyIiBjbGFzcz0ie2lmICRibG9ja19ncm91cHMuJGJsb2NrX2dyb3VwX2lkLmRpc3BsYXkgPT0gMH1pbnZpc2libGV7ZWxzZX12aXNpYmxley9pZn0iPgoJCQoJCXtmb3JlYWNoIGZyb209JGJsb2NrX2dyb3Vwcy4kYmxvY2tfZ3JvdXBfaWQuY29udGVudF9ibG9ja3MgaXRlbT1jb250ZW50X2Jsb2NrX2lkfQoJCQoJCTwhLS0gc3RhcnQgYmxvY2sgeyRjb250ZW50X2Jsb2NrX2lkfSBpbiBibG9ja19ncm91cCB7JGJsb2NrX2dyb3VwX2lkfSAtLT4KCQk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCQkKCQkJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQkJCTxzdHJvbmc+eyRjb250ZW50X2Jsb2Nrcy4kY29udGVudF9ibG9ja19pZC5sYWJlbH06PC9zdHJvbmc+CgkJCTwvZGl2PgoJCQkKCQkJe2lmICRjb250ZW50X2Jsb2Nrcy4kY29udGVudF9ibG9ja19pZC5kZXNjcmlwdGlvbn0KCQkJCgkJCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJCQkKCQkJCXskY29udGVudF9ibG9ja3MuJGNvbnRlbnRfYmxvY2tfaWQuZGVzY3JpcHRpb259CgkJCQkKCQkJPC9kaXY+CgkJCQoJCQl7L2lmfQoJCQkKCQkJPGRpdiBzdHlsZT0icGFkZGluZzogNXB4IDAgMCAwOyI+CgkJCQkKCQkJe2lmICRjb250ZW50X2Jsb2Nrcy4kY29udGVudF9ibG9ja19pZC50eXBlICE9ICcnfQoJCQkJCgkJCQk8cD57JGNvbnRlbnRfYmxvY2tzLiRjb250ZW50X2Jsb2NrX2lkLmlucHV0fTwvcD4KCQkJCQoJCQl7ZWxzZX0KCQkJCQoJCQkJeyRjb250ZW50X2Jsb2Nrcy4kY29udGVudF9ibG9ja19pZC5jb250ZW50fQoJCQkJCgkJCXsvaWZ9CgkJCQkKCQkJPC9kaXY+CgkJCQkKCQk8L2Rpdj4KCQk8IS0tIGVuZCBibG9jayB7JGNvbnRlbnRfYmxvY2tfaWR9IGluIGJsb2NrX2dyb3VwIHskYmxvY2tfZ3JvdXBfaWR9IC0tPgoJCQoJCXsvZm9yZWFjaH0KCQkKCTwvZGl2PgoJPCEtLSBlbmQgYmxvY2tzIGluIGJsb2NrX2dyb3VwIHskYmxvY2tfZ3JvdXBfaWR9IC0tPgoJPC9maWVsZHNldD4KPC9kaXY+CjwhLS0gZW5kIGJsb2NrX2dyb3VwIHskYmxvY2tfZ3JvdXBfaWR9IC0tPgp7L2ZvcmVhY2h9CjwhLS0gZW5kIGJsb2NrX2dyb3VwcyAtLT4Key9pZn0KCgp7aWYgJHBhZ2VfdGFiLmNvbnRlbnRfYmxvY2tzfEBjb3VudCA+IDB9Cgo8IS0tIHN0YXJ0IGJsb2NrcyAtLT4KCgl7Zm9yZWFjaCBmcm9tPSRwYWdlX3RhYi5jb250ZW50X2Jsb2NrcyBpdGVtPWNvbnRlbnRfYmxvY2tfaWR9CgkKPCEtLSBzdGFydCBibG9jayB7JGNvbnRlbnRfYmxvY2tfaWR9IC0tPgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJPGZpZWxkc2V0IHN0eWxlPSJtYXJnaW46NXB4IDMlIDE1cHggMDtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nLXJpZ2h0OiAzMHB4OyI+CgkJPGxlZ2VuZCBjbGFzcz0iQWR2YW5jZWRDb250ZW50X0NvbnRlbnRCbG9jayI+eyRjb250ZW50X2Jsb2Nrcy4kY29udGVudF9ibG9ja19pZC5sYWJlbH06PC9sZWdlbmQ+CgkJCgkJe2lmICRjb250ZW50X2Jsb2Nrcy4kY29udGVudF9ibG9ja19pZC50eXBlfQoJCQoJCTxkaXYgc3R5bGU9ImZsb2F0OnJpZ2h0O21hcmdpbjotMjNweCAtMjNweCAwIDA7cG9zaXRpb246cmVsYXRpdmUiIG9uY2xpY2s9ImpRdWVyeSgnI3skY29udGVudF9ibG9ja19pZH1fd3JhcHBlcicpLnRvZ2dsZSgnZmFzdCcpOyB0aGlzLmNsYXNzTmFtZSA9ICh0aGlzLmNsYXNzTmFtZSA9PSAnbm90aWZpY2F0aW9ucy1oaWRlJyA/ICdub3RpZmljYXRpb25zLXNob3cnIDogJ25vdGlmaWNhdGlvbnMtaGlkZScpOyBqUXVlcnkuZ2V0KCd7JGNvbnRlbnRfYmxvY2tzLiRjb250ZW50X2Jsb2NrX2lkLnByZWZfdXJsfSZ7JG1vZHVsZV9pZH1pdGVtX2Rpc3BsYXk9JysodGhpcy5jbGFzc05hbWUgPT0gJ25vdGlmaWNhdGlvbnMtaGlkZScgPyAxIDogMCkpOyIgY2xhc3M9IntpZiAkY29udGVudF9ibG9ja3MuJGNvbnRlbnRfYmxvY2tfaWQuZGlzcGxheSA9PSAwfW5vdGlmaWNhdGlvbnMtc2hvd3tlbHNlfW5vdGlmaWNhdGlvbnMtaGlkZXsvaWZ9IiBpZD0idG9nZ2xlLXskY29udGVudF9ibG9ja19pZH0iPjwvZGl2PgoJCQoJCXsvaWZ9CgkJCgkJPGRpdiBpZD0ieyRjb250ZW50X2Jsb2NrX2lkfV93cmFwcGVyIiBjbGFzcz0ie2lmICRjb250ZW50X2Jsb2Nrcy4kY29udGVudF9ibG9ja19pZC5kaXNwbGF5ID09IDB9aW52aXNpYmxle2Vsc2V9dmlzaWJsZXsvaWZ9Ij4KCQkJCgkJe2lmICRjb250ZW50X2Jsb2Nrcy4kY29udGVudF9ibG9ja19pZC5kZXNjcmlwdGlvbn0KCQkJCgkJCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJCQkKCQkJCXskY29udGVudF9ibG9ja3MuJGNvbnRlbnRfYmxvY2tfaWQuZGVzY3JpcHRpb259CgkJCQkKCQkJPC9kaXY+CgkJCQoJCXsvaWZ9CgkJCQoJCQk8ZGl2IHN0eWxlPSJwYWRkaW5nOiA1cHggMCAwIDA7Ij4KCQkJCQoJCXtpZiAkY29udGVudF9ibG9ja3MuJGNvbnRlbnRfYmxvY2tfaWQudHlwZSAhPSAnJ30KCQkJCQoJCQkJPHA+eyRjb250ZW50X2Jsb2Nrcy4kY29udGVudF9ibG9ja19pZC5pbnB1dH08L3A+CgkJCQkKCQl7ZWxzZX0KCQkJCQoJCQkJeyRjb250ZW50X2Jsb2Nrcy4kY29udGVudF9ibG9ja19pZC5jb250ZW50fQoJCQkJCgkJey9pZn0KCQkJCQoJCQk8L2Rpdj4KCQkJCgkJPC9kaXY+Cgk8L2ZpZWxkc2V0Pgo8L2Rpdj4KPCEtLSBlbmQgYmxvY2sgeyRjb250ZW50X2Jsb2NrX2lkfSAtLT4KCgl7L2ZvcmVhY2h9Cgo8IS0tIHN0YXJ0IGJsb2NrcyAtLT4KCnsvaWZ9CjwhLS0gRU5EIEFEVkFOQ0VEIENPTlRFTlRFIE9VVFBVVCAtLT4K]]></data>
	</file>
	<file>
	  <filename>/templates/contentType.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBTVEFSVCBQQUdFX1RBQiB7JHBhZ2VfdGFiX2lkfSAtLT4KCntpZiAkcGFnZV90YWJfbnIgPT0gMH0KCXtsaXRlcmFsfQo8bGluayByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9tb2R1bGVzL0FkdmFuY2VkQ29udGVudC9jc3MvZ2VuZXJhbC5jc3MiIC8+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9InNjcmVlbiIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL21vZHVsZXMvQWR2YW5jZWRDb250ZW50L2Nzcy9jYWxlbmRhci5jc3MiIC8+CjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9tb2R1bGVzL0FkdmFuY2VkQ29udGVudC9qcy9mdW5jdGlvbnMuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovLzwhW0NEQVRBWwoJQWR2YW5jZWRDb250ZW50Lm1vZHVsZUlkICAgICAgID0gJ3svbGl0ZXJhbH17JG1vZHVsZV9pZH17bGl0ZXJhbH0nOwoJQWR2YW5jZWRDb250ZW50LmluaXRUaW1lT3V0TWluID0gNTA7ICAgLy9tcwoJQWR2YW5jZWRDb250ZW50LmluaXRUaW1lT3V0TWF4ID0gMTAwOyAgLy9tcwoJQWR2YW5jZWRDb250ZW50LmxvYWRUaW1lT3V0TWluID0gNTAwOyAgLy9tcwoJQWR2YW5jZWRDb250ZW50LmxvYWRUaW1lT3V0TWF4ID0gMTAwMDsgLy9tcwoJQWR2YW5jZWRDb250ZW50LmRlbGF5TWluICAgICAgID0gMTA7ICAgLy9tcwoJQWR2YW5jZWRDb250ZW50LmRlbGF5TWF4ICAgICAgID0gMTAwOyAgLy9tcwoJey9saXRlcmFsfQoJe2lmICRkYXRlX2Jsb2Nrc3xAY291bnQgPiAwfQoJe2xpdGVyYWx9CglBZHZhbmNlZENvbnRlbnQuSW5pdENhbGVuZGFyQ29udGVudEJsb2NrcyA9IGZ1bmN0aW9uKCkgewoJey9saXRlcmFsfQoJe2ZvcmVhY2ggZnJvbT0kZGF0ZV9ibG9ja3MgaXRlbT1jb250ZW50X2Jsb2NrX2lkfQoJCXtpZiAkY29udGVudF9ibG9ja3MuJGNvbnRlbnRfYmxvY2tfaWQubW9kZSA9PSAnY2FsZW5kYXInfQoJCQl7bGl0ZXJhbH0KCQlqUXVlcnkoJyN7L2xpdGVyYWx9eyRjb250ZW50X2Jsb2NrX2lkfXtsaXRlcmFsfV9BZHZhbmNlZENvbnRlbnREYXRlUGlja2VyRGlzcGxheScpLmNhbGVuZGFyKHsKCQkJdHJpZ2dlckVsZW1lbnQ6ICcjey9saXRlcmFsfXskY29udGVudF9ibG9ja19pZH17bGl0ZXJhbH1fQWR2YW5jZWRDb250ZW50RGF0ZVBpY2tlclRyaWdnZXInLCAKCQkJZGF0ZUZvcm1hdDogJyV4JywgCgkJCWNsb3NlSGFuZGxlcjogZnVuY3Rpb24gKGNhbGVuZGFyKSB7CgkJCQlqUXVlcnkoJyN7L2xpdGVyYWx9eyRjb250ZW50X2Jsb2NrX2lkfXtsaXRlcmFsfV9BZHZhbmNlZENvbnRlbnREYXRlJykudmFsKGV2YWwoY2FsZW5kYXIuZGF0ZS5nZXRUaW1lKCkvMTAwMCkpOyAKCQkJCWNhbGVuZGFyLmNvbnRhaW5lci5oaWRlKCk7CgkJCX0KCQl9KTsKCQkJey9saXRlcmFsfQoJCXsvaWZ9Cgl7L2ZvcmVhY2h9Cgl7bGl0ZXJhbH0KCX0KCXsvbGl0ZXJhbH0KCXsvaWZ9Cgl7bGl0ZXJhbH0KCUFkdmFuY2VkQ29udGVudC5Jbml0KCk7Ci8vXV0+Cjwvc2NyaXB0PgoJey9saXRlcmFsfQp7L2lmfQoKe2lmICRwYWdlX3RhYnMuJHBhZ2VfdGFiX2lkLmJsb2NrX3RhYnN8QGNvdW50ID4gMH0KCjwhLS0gc3RhcnQgYmxvY2tfdGFicyBpbiBwYWdlX3RhYiB7JHBhZ2VfdGFiX2lkfSAtLT4KPCEtLSBzdGFydCBibG9ja190YWJzIHRhYmhlYWRlcnMgaW4gcGFnZV90YWIgeyRwYWdlX3RhYl9pZH0gLS0+CjxkaXYgaWQ9InBhZ2VfdGFicyI+Cgk8ZGl2IGlkPSJibG9ja190YWJzX3skcGFnZV90YWJfbnJ9IiBjbGFzcz0iU3ViVGFiV3JhcHBlciI+CgkJCgl7Zm9yZWFjaCBmcm9tPSRwYWdlX3RhYnMuJHBhZ2VfdGFiX2lkLmJsb2NrX3RhYnMgaXRlbT1ibG9ja190YWJfaWQgbmFtZT1jdXJyZW50X3RhYn0KCQkKCQk8ZGl2IGlkPSJlZGl0YWJ7JHBhZ2VfdGFiX25yfV97JGJsb2NrX3RhYl9pZH0iIHtpZiAkc21hcnR5LmZvcmVhY2guY3VycmVudF90YWIuZmlyc3R9Y2xhc3M9ImFjdGl2ZSJ7L2lmfSBvbmNsaWNrPSJBZHZhbmNlZENvbnRlbnQuVG9nZ2xlQmxvY2sodGhpcy5pZCwgJ2Jsb2NrX3RhYnNfeyRwYWdlX3RhYl9ucn0nKSI+CgkJCQoJCQl7JGJsb2NrX3RhYnMuJGJsb2NrX3RhYl9pZC50YWJfbmFtZX0KCQkJCgkJPC9kaXY+CgkJCgl7L2ZvcmVhY2h9CgkJCgk8L2Rpdj4KPC9kaXY+CjwhLS0gZW5kIGJsb2NrX3RhYnMgdGFiaGVhZGVycyBpbiBwYWdlX3RhYiB7JHBhZ2VfdGFiX2lkfSAtLT4gCjwhLS0gc3RhcnQgYmxvY2tfdGFicyB0YWJjb250ZW50IGluIHBhZ2VfdGFiIHskcGFnZV90YWJfaWR9IC0tPgo8ZGl2IGlkPSJwYWdlX2NvbnRlbnQiIHN0eWxlPSJwYWRkaW5nLWJvdHRvbTowO21hcmdpbi1ib3R0b206MjBweDsiPgoJCgl7Zm9yZWFjaCBmcm9tPSRwYWdlX3RhYnMuJHBhZ2VfdGFiX2lkLmJsb2NrX3RhYnMgaXRlbT1ibG9ja190YWJfaWQgbmFtZT1jdXJyZW50X3RhYn0KCQoJPCEtLSBzdGFydCBibG9ja190YWIgeyRibG9ja190YWJfaWR9IGluIHBhZ2VfdGFiIHskcGFnZV90YWJfaWR9IC0tPgoJPGRpdiBpZD0iZWRpdGFieyRwYWdlX3RhYl9ucn1feyRibG9ja190YWJfaWR9X2Mie2lmICRzbWFydHkuZm9yZWFjaC5jdXJyZW50X3RhYi5maXJzdH0gc3R5bGU9ImRpc3BsYXk6YmxvY2sie2Vsc2V9IHN0eWxlPSJkaXNwbGF5Om5vbmUiey9pZn0+CgkJCgkJe2lmICRibG9ja190YWJzLiRibG9ja190YWJfaWQuYmxvY2tfZ3JvdXBzfEBjb3VudCA+IDB9CgkJPCEtLSBzdGFydCBibG9ja19ncm91cHMgaW4gYmxvY2tfdGFiIHskYmxvY2tfdGFiX2lkfSBpbiBwYWdlX3RhYiB7JHBhZ2VfdGFiX2lkfSAtLT4KCQkJe2ZvcmVhY2ggZnJvbT0kYmxvY2tfdGFicy4kYmxvY2tfdGFiX2lkLmJsb2NrX2dyb3VwcyBpdGVtPWJsb2NrX2dyb3VwX2lkfQoJCQoJCTwhLS0gc3RhcnQgYmxvY2tfZ3JvdXAgeyRibG9ja19ncm91cF9pZH0gaW4gYmxvY2tfdGFiIHskYmxvY2tfdGFiX2lkfSBpbiBwYWdlX3RhYiB7JHBhZ2VfdGFiX2lkfSAtLT4KCQk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCQk8ZmllbGRzZXQgc3R5bGU9Im1hcmdpbjo1cHggMyUgMTVweCAwO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmctcmlnaHQ6IDMwcHg7Ij4KCQkJCTxsZWdlbmQgY2xhc3M9IkFkdmFuY2VkQ29udGVudF9CbG9ja0dyb3VwIj4KCQkJCQl7JGJsb2NrX2dyb3Vwcy4kYmxvY2tfZ3JvdXBfaWQuZ3JvdXBfbmFtZX06CgkJCQk8L2xlZ2VuZD4KCQkJCTxkaXYgc3R5bGU9ImZsb2F0OnJpZ2h0O21hcmdpbjotMjNweCAtMjNweCAwIDA7cG9zaXRpb246cmVsYXRpdmUiIG9uY2xpY2s9ImpRdWVyeSgnI3skYmxvY2tfZ3JvdXBfaWR9X3dyYXBwZXInKS50b2dnbGUoJ2Zhc3QnKTsgdGhpcy5jbGFzc05hbWUgPSAodGhpcy5jbGFzc05hbWUgPT0gJ25vdGlmaWNhdGlvbnMtaGlkZScgPyAnbm90aWZpY2F0aW9ucy1zaG93JyA6ICdub3RpZmljYXRpb25zLWhpZGUnKTsgalF1ZXJ5LmdldCgneyRibG9ja19ncm91cHMuJGJsb2NrX2dyb3VwX2lkLnByZWZfdXJsfSZ7JG1vZHVsZV9pZH1pdGVtX2Rpc3BsYXk9JysodGhpcy5jbGFzc05hbWUgPT0gJ25vdGlmaWNhdGlvbnMtaGlkZScgPyAxIDogMCkpOyIgY2xhc3M9IntpZiAkYmxvY2tfZ3JvdXBzLiRibG9ja19ncm91cF9pZC5kaXNwbGF5ID09IDB9bm90aWZpY2F0aW9ucy1zaG93e2Vsc2V9bm90aWZpY2F0aW9ucy1oaWRley9pZn0iIGlkPSJ0b2dnbGUteyRibG9ja19ncm91cF9pZH0iPjwvZGl2PgoJCQkJPCEtLSBzdGFydCBibG9ja3MgaW4gYmxvY2tfZ3JvdXAgeyRibG9ja19ncm91cF9pZH0gaW4gYmxvY2tfdGFiIHskYmxvY2tfdGFiX2lkfSBpbiBwYWdlX3RhYiB7JHBhZ2VfdGFiX2lkfSAtLT4KCQkJCTxkaXYgaWQ9InskYmxvY2tfZ3JvdXBfaWR9X3dyYXBwZXIiIGNsYXNzPSJ7aWYgJGJsb2NrX2dyb3Vwcy4kYmxvY2tfZ3JvdXBfaWQuZGlzcGxheSA9PSAwfWludmlzaWJsZXtlbHNlfXZpc2libGV7L2lmfSI+CgkJCQkJCgkJCQl7Zm9yZWFjaCBmcm9tPSRibG9ja19ncm91cHMuJGJsb2NrX2dyb3VwX2lkLmNvbnRlbnRfYmxvY2tzIGl0ZW09Y29udGVudF9ibG9ja19pZH0KCQkJCQkKCQkJCQk8IS0tIHN0YXJ0IGJsb2NrIHskY29udGVudF9ibG9ja19pZH0gaW4gYmxvY2tfZ3JvdXAgeyRibG9ja19ncm91cF9pZH0gaW4gYmxvY2tfdGFiIHskYmxvY2tfdGFiX2lkfSBpbiBwYWdlX3RhYiB7JHBhZ2VfdGFiX2lkfSAtLT4KCQkJCQk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCQkJCQkJPHN0cm9uZz57JGNvbnRlbnRfYmxvY2tzLiRjb250ZW50X2Jsb2NrX2lkLmxhYmVsfTo8L3N0cm9uZz4KCQkJCQkJPC9kaXY+CgkJCQkJCQoJCQkJCQl7aWYgJGNvbnRlbnRfYmxvY2tzLiRjb250ZW50X2Jsb2NrX2lkLmRlc2NyaXB0aW9ufQoJCQkJCQkKCQkJCQkJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQkJCQkJCQoJCQkJCQkJeyRjb250ZW50X2Jsb2Nrcy4kY29udGVudF9ibG9ja19pZC5kZXNjcmlwdGlvbn0KCQkJCQkJCQoJCQkJCQk8L2Rpdj4KCQkJCQkJCgkJCQkJCXsvaWZ9CgkJCQkJCQoJCQkJCQk8ZGl2IHN0eWxlPSJwYWRkaW5nOiA1cHggMCAwIDA7Ij4KCQkJCQkJCQoJCQkJCQl7aWYgJGNvbnRlbnRfYmxvY2tzLiRjb250ZW50X2Jsb2NrX2lkLmJsb2NrX3R5cGUgIT0gJyd9CgkJCQkJCQkKCQkJCQkJCTxwPnskY29udGVudF9ibG9ja3MuJGNvbnRlbnRfYmxvY2tfaWQuaW5wdXR9PC9wPgoJCQkJCQkJCgkJCQkJCXtlbHNlfQoJCQkJCQkJCgkJCQkJCQl7JGNvbnRlbnRfYmxvY2tzLiRjb250ZW50X2Jsb2NrX2lkLmNvbnRlbnR9CgkJCQkJCQkKCQkJCQkJey9pZn0KCQkJCQkJCQoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8IS0tIGVuZCBibG9jayB7JGNvbnRlbnRfYmxvY2tfaWR9IGluIGJsb2NrX2dyb3VwIHskYmxvY2tfZ3JvdXBfaWR9IGluIGJsb2NrX3RhYiB7JGJsb2NrX3RhYl9pZH0gaW4gcGFnZV90YWIgeyRwYWdlX3RhYl9pZH0gLS0+CgkJCQkKCQkJCXsvZm9yZWFjaH0KCQkJCQoJCQkJPC9kaXY+CgkJCQk8IS0tIGVuZCBibG9ja3MgaW4gYmxvY2tfZ3JvdXAgeyRibG9ja19ncm91cF9pZH0gaW4gYmxvY2tfdGFiIHskYmxvY2tfdGFiX2lkfSBpbiBwYWdlX3RhYiB7JHBhZ2VfdGFiX2lkfSAtLT4KCQkJPC9maWVsZHNldD4KCQk8L2Rpdj4KCQk8IS0tIGVuZCBibG9ja19ncm91cCB7JGJsb2NrX2dyb3VwX2lkfSBpbiBibG9ja190YWIgeyRibG9ja190YWJfaWR9IGluIHBhZ2VfdGFiIHskcGFnZV90YWJfaWR9IC0tPgoJCQoJCQl7L2ZvcmVhY2h9CgkJPCEtLSBlbmQgYmxvY2tfZ3JvdXBzIGluIGJsb2NrX3RhYiB7JGJsb2NrX3RhYl9pZH0gaW4gcGFnZV90YWIgeyRwYWdlX3RhYl9pZH0gLS0+CgkJey9pZn0KCQkKCQl7aWYgJGJsb2NrX3RhYnMuJGJsb2NrX3RhYl9pZC5jb250ZW50X2Jsb2Nrc3xAY291bnQgPiAwfQoJCTwhLS0gc3RhcnQgYmxvY2tzIGluIGJsb2NrX3RhYiB7JGJsb2NrX3RhYl9pZH0gaW4gcGFnZV90YWIgeyRwYWdlX3RhYl9pZH0gLS0+CgkJCXtmb3JlYWNoIGZyb209JGJsb2NrX3RhYnMuJGJsb2NrX3RhYl9pZC5jb250ZW50X2Jsb2NrcyBpdGVtPWNvbnRlbnRfYmxvY2tfaWR9CgkJCgkJPCEtLSBzdGFydCBibG9jayB7JGNvbnRlbnRfYmxvY2tfaWR9IGluIGJsb2NrX3RhYiB7JGJsb2NrX3RhYl9pZH0gaW4gcGFnZV90YWIgeyRwYWdlX3RhYl9pZH0gLS0+CgkJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQkJPGZpZWxkc2V0IHN0eWxlPSJtYXJnaW46NXB4IDMlIDE1cHggMDtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nLXJpZ2h0OiAzMHB4OyI+CgkJCQk8bGVnZW5kIGNsYXNzPSJBZHZhbmNlZENvbnRlbnRfQ29udGVudEJsb2NrIj57JGNvbnRlbnRfYmxvY2tzLiRjb250ZW50X2Jsb2NrX2lkLmxhYmVsfTo8L2xlZ2VuZD4KCQkJCQoJCQkJe2lmICRjb250ZW50X2Jsb2Nrcy4kY29udGVudF9ibG9ja19pZC5ibG9ja190eXBlICYmICEkY29udGVudF9ibG9ja3MuJGNvbnRlbnRfYmxvY2tfaWQubm9fY29sbGFwc2V9CgkJCQkKCQkJCTxkaXYgc3R5bGU9ImZsb2F0OnJpZ2h0O21hcmdpbjotMjNweCAtMjNweCAwIDA7cG9zaXRpb246cmVsYXRpdmUiIG9uY2xpY2s9ImpRdWVyeSgnI3skY29udGVudF9ibG9ja19pZH1fd3JhcHBlcicpLnRvZ2dsZSgnZmFzdCcpOyB0aGlzLmNsYXNzTmFtZSA9ICh0aGlzLmNsYXNzTmFtZSA9PSAnbm90aWZpY2F0aW9ucy1oaWRlJyA/ICdub3RpZmljYXRpb25zLXNob3cnIDogJ25vdGlmaWNhdGlvbnMtaGlkZScpOyBqUXVlcnkuZ2V0KCd7JGNvbnRlbnRfYmxvY2tzLiRjb250ZW50X2Jsb2NrX2lkLnByZWZfdXJsfSZ7JG1vZHVsZV9pZH1pdGVtX2Rpc3BsYXk9JysodGhpcy5jbGFzc05hbWUgPT0gJ25vdGlmaWNhdGlvbnMtaGlkZScgPyAxIDogMCkpOyIgY2xhc3M9IntpZiAkY29udGVudF9ibG9ja3MuJGNvbnRlbnRfYmxvY2tfaWQuZGlzcGxheSA9PSAwfW5vdGlmaWNhdGlvbnMtc2hvd3tlbHNlfW5vdGlmaWNhdGlvbnMtaGlkZXsvaWZ9IiBpZD0idG9nZ2xlLXskY29udGVudF9ibG9ja19pZH0iPjwvZGl2PgoJCQkJCgkJCQl7L2lmfQoJCQkJCgkJCQk8ZGl2IGlkPSJ7JGNvbnRlbnRfYmxvY2tfaWR9X3dyYXBwZXIiIGNsYXNzPSJ7aWYgJGNvbnRlbnRfYmxvY2tzLiRjb250ZW50X2Jsb2NrX2lkLmRpc3BsYXkgPT0gMCAmJiAhJGNvbnRlbnRfYmxvY2tzLiRjb250ZW50X2Jsb2NrX2lkLm5vX2NvbGxhcHNlfWludmlzaWJsZXtlbHNlfXZpc2libGV7L2lmfSI+CgkJCQkJCgkJCQl7aWYgJGNvbnRlbnRfYmxvY2tzLiRjb250ZW50X2Jsb2NrX2lkLmRlc2NyaXB0aW9ufQoJCQkJCQoJCQkJCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJCQkJCQoJCQkJCXskY29udGVudF9ibG9ja3MuJGNvbnRlbnRfYmxvY2tfaWQuZGVzY3JpcHRpb259CgkJCQkJCQoJCQkJCTwvZGl2PgoJCQkJCQoJCQkJey9pZn0KCQkJCQkKCQkJCQk8ZGl2IHN0eWxlPSJwYWRkaW5nOiA1cHggMCAwIDA7Ij4KCQkJCQkJCgkJCQl7aWYgJGNvbnRlbnRfYmxvY2tzLiRjb250ZW50X2Jsb2NrX2lkLmJsb2NrX3R5cGUgIT0gJyd9CgkJCQkJCQoJCQkJCQk8cD57JGNvbnRlbnRfYmxvY2tzLiRjb250ZW50X2Jsb2NrX2lkLmlucHV0fTwvcD4KCQkJCQkJCgkJCQl7ZWxzZX0KCQkJCQkJCgkJCQkJeyRjb250ZW50X2Jsb2Nrcy4kY29udGVudF9ibG9ja19pZC5jb250ZW50fQoJCQkJCQkKCQkJCXsvaWZ9CgkJCQkJCQoJCQkJCTwvZGl2PgoJCQkJPC9kaXY+CgkJCTwvZmllbGRzZXQ+CgkJPC9kaXY+CgkJPCEtLSBlbmQgYmxvY2sgeyRjb250ZW50X2Jsb2NrX2lkfSBpbiBibG9ja190YWIgeyRibG9ja190YWJfaWR9IGluIHBhZ2VfdGFiIHskcGFnZV90YWJfaWR9IC0tPgoJCQoJCQl7L2ZvcmVhY2h9CgkJPCEtLSBlbmQgYmxvY2tzIGluIGJsb2NrX3RhYiB7JGJsb2NrX3RhYl9pZH0gaW4gcGFnZV90YWIgeyRwYWdlX3RhYl9pZH0gLS0+CgkJey9pZn0KCQkKCTwvZGl2PgoJPCEtLSBlbmQgYmxvY2tfdGFiIHskYmxvY2tfdGFiX2lkfSBpbiBwYWdlX3RhYiB7JHBhZ2VfdGFiX2lkfSAtLT4KCQoJey9mb3JlYWNofQoJCjwvZGl2Pgo8IS0tIGVuZCBibG9ja190YWJzIHRhYmNvbnRlbnQgaW4gcGFnZV90YWIgeyRwYWdlX3RhYl9pZH0gLS0+CjwhLS0gZW5kIGJsb2NrX3RhYnMgaW4gcGFnZV90YWIgeyRwYWdlX3RhYl9pZH0gLS0+Cgp7L2lmfQoKe2lmICRwYWdlX3RhYnMuJHBhZ2VfdGFiX2lkLmJsb2NrX2dyb3Vwc3xAY291bnQgPiAwfQoKPCEtLSBzdGFydCBibG9ja19ncm91cHMgaW4gcGFnZV90YWIgeyRwYWdlX3RhYl9pZH0gLS0+CgoJe2ZvcmVhY2ggZnJvbT0kcGFnZV90YWJzLiRwYWdlX3RhYl9pZC5ibG9ja19ncm91cHMgaXRlbT1ibG9ja19ncm91cF9pZH0KCQo8IS0tIHN0YXJ0IGJsb2NrX2dyb3VwIHskYmxvY2tfZ3JvdXBfaWR9IGluIHBhZ2VfdGFiIHskcGFnZV90YWJfaWR9IC0tPgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJPGZpZWxkc2V0IHN0eWxlPSJtYXJnaW46NXB4IDMlIDE1cHggMDtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nLXJpZ2h0OiAzMHB4OyI+CgkJPGxlZ2VuZCBjbGFzcz0iQWR2YW5jZWRDb250ZW50X0Jsb2NrR3JvdXAiPgoJCQl7JGJsb2NrX2dyb3Vwcy4kYmxvY2tfZ3JvdXBfaWQuZ3JvdXBfbmFtZX06CgkJPC9sZWdlbmQ+CgkJPGRpdiBzdHlsZT0iZmxvYXQ6cmlnaHQ7bWFyZ2luOi0yM3B4IC0yM3B4IDAgMDtwb3NpdGlvbjpyZWxhdGl2ZSIgb25jbGljaz0ialF1ZXJ5KCcjeyRibG9ja19ncm91cF9pZH1fd3JhcHBlcicpLnRvZ2dsZSgnZmFzdCcpOyB0aGlzLmNsYXNzTmFtZSA9ICh0aGlzLmNsYXNzTmFtZSA9PSAnbm90aWZpY2F0aW9ucy1oaWRlJyA/ICdub3RpZmljYXRpb25zLXNob3cnIDogJ25vdGlmaWNhdGlvbnMtaGlkZScpOyBqUXVlcnkuZ2V0KCd7JGJsb2NrX2dyb3Vwcy4kYmxvY2tfZ3JvdXBfaWQucHJlZl91cmx9JnskbW9kdWxlX2lkfWl0ZW1fZGlzcGxheT0nKyh0aGlzLmNsYXNzTmFtZSA9PSAnbm90aWZpY2F0aW9ucy1oaWRlJyA/IDEgOiAwKSk7IiBjbGFzcz0ie2lmICRibG9ja19ncm91cHMuJGJsb2NrX2dyb3VwX2lkLmRpc3BsYXkgPT0gMH1ub3RpZmljYXRpb25zLXNob3d7ZWxzZX1ub3RpZmljYXRpb25zLWhpZGV7L2lmfSIgaWQ9InRvZ2dsZS17JGJsb2NrX2dyb3VwX2lkfSI+PC9kaXY+CgkJPCEtLSBzdGFydCBibG9ja3MgaW4gYmxvY2tfZ3JvdXAgeyRibG9ja19ncm91cF9pZH0gaW4gcGFnZV90YWIgeyRwYWdlX3RhYl9pZH0gLS0+CgkJPGRpdiBpZD0ieyRibG9ja19ncm91cF9pZH1fd3JhcHBlciIgY2xhc3M9IntpZiAkYmxvY2tfZ3JvdXBzLiRibG9ja19ncm91cF9pZC5kaXNwbGF5ID09IDB9aW52aXNpYmxle2Vsc2V9dmlzaWJsZXsvaWZ9Ij4KCQkKCQl7Zm9yZWFjaCBmcm9tPSRibG9ja19ncm91cHMuJGJsb2NrX2dyb3VwX2lkLmNvbnRlbnRfYmxvY2tzIGl0ZW09Y29udGVudF9ibG9ja19pZH0KCQkKCQkJPCEtLSBzdGFydCBibG9jayB7JGNvbnRlbnRfYmxvY2tfaWR9IGluIGJsb2NrX2dyb3VwIHskYmxvY2tfZ3JvdXBfaWR9IGluIHBhZ2VfdGFiIHskcGFnZV90YWJfaWR9IC0tPgoJCQk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCQkJCgkJCQk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCQkJCTxzdHJvbmc+eyRjb250ZW50X2Jsb2Nrcy4kY29udGVudF9ibG9ja19pZC5sYWJlbH06PC9zdHJvbmc+CgkJCQk8L2Rpdj4KCQkJCQoJCQl7aWYgJGNvbnRlbnRfYmxvY2tzLiRjb250ZW50X2Jsb2NrX2lkLmRlc2NyaXB0aW9ufQoJCQkJCgkJCQk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCQkJCQoJCQkJeyRjb250ZW50X2Jsb2Nrcy4kY29udGVudF9ibG9ja19pZC5kZXNjcmlwdGlvbn0KCQkJCQkKCQkJCTwvZGl2PgoJCQkJCgkJCQl7L2lmfQoJCQkJCgkJCQk8ZGl2IHN0eWxlPSJwYWRkaW5nOiA1cHggMCAwIDA7Ij4KCQkJCQkKCQkJe2lmICRjb250ZW50X2Jsb2Nrcy4kY29udGVudF9ibG9ja19pZC5ibG9ja190eXBlICE9ICcnfQoJCQkJCQoJCQkJCTxwPnskY29udGVudF9ibG9ja3MuJGNvbnRlbnRfYmxvY2tfaWQuaW5wdXR9PC9wPgoJCQkJCQoJCQl7ZWxzZX0KCQkJCQkKCQkJCXskY29udGVudF9ibG9ja3MuJGNvbnRlbnRfYmxvY2tfaWQuY29udGVudH0KCQkJCQkKCQkJey9pZn0KCQkJCQkKCQkJCTwvZGl2PgoJCQkJCQoJCQk8L2Rpdj4KCQkJPCEtLSBlbmQgYmxvY2sgeyRjb250ZW50X2Jsb2NrX2lkfSBpbiBibG9ja19ncm91cCB7JGJsb2NrX2dyb3VwX2lkfSBpbiBwYWdlX3RhYiB7JHBhZ2VfdGFiX2lkfSAtLT4KCQkKCQl7L2ZvcmVhY2h9CgkJCgkJPC9kaXY+CgkJPCEtLSBlbmQgYmxvY2tzIGluIGJsb2NrX2dyb3VwIHskYmxvY2tfZ3JvdXBfaWR9IGluIHBhZ2VfdGFiIHskcGFnZV90YWJfaWR9IC0tPgoJPC9maWVsZHNldD4KPC9kaXY+CjwhLS0gZW5kIGJsb2NrX2dyb3VwIHskYmxvY2tfZ3JvdXBfaWR9IGluIHBhZ2VfdGFiIHskcGFnZV90YWJfaWR9IC0tPgp7L2ZvcmVhY2h9CjwhLS0gZW5kIGJsb2NrX2dyb3VwcyBpbiBwYWdlX3RhYiB7JHBhZ2VfdGFiX2lkfSAtLT4Key9pZn0KCgp7aWYgJHBhZ2VfdGFicy4kcGFnZV90YWJfaWQuY29udGVudF9ibG9ja3N8QGNvdW50ID4gMH0KCjwhLS0gc3RhcnQgYmxvY2tzIGluIHBhZ2VfdGFiIHskcGFnZV90YWJfaWR9IC0tPgoKCXtmb3JlYWNoIGZyb209JHBhZ2VfdGFicy4kcGFnZV90YWJfaWQuY29udGVudF9ibG9ja3MgaXRlbT1jb250ZW50X2Jsb2NrX2lkfQoJCjwhLS0gc3RhcnQgYmxvY2sgeyRjb250ZW50X2Jsb2NrX2lkfSBpbiBwYWdlX3RhYiB7JHBhZ2VfdGFiX2lkfSAtLT4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCTxmaWVsZHNldCBzdHlsZT0ibWFyZ2luOjVweCAzJSAxNXB4IDA7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZy1yaWdodDogMzBweDsiPgoJCTxsZWdlbmQgY2xhc3M9IkFkdmFuY2VkQ29udGVudF9Db250ZW50QmxvY2siPnskY29udGVudF9ibG9ja3MuJGNvbnRlbnRfYmxvY2tfaWQubGFiZWx9OjwvbGVnZW5kPgoJCQoJCXtpZiAkY29udGVudF9ibG9ja3MuJGNvbnRlbnRfYmxvY2tfaWQuYmxvY2tfdHlwZSAmJiAhJGNvbnRlbnRfYmxvY2tzLiRjb250ZW50X2Jsb2NrX2lkLm5vX2NvbGxhcHNlfQoJCQoJCTxkaXYgc3R5bGU9ImZsb2F0OnJpZ2h0O21hcmdpbjotMjNweCAtMjNweCAwIDA7cG9zaXRpb246cmVsYXRpdmUiIG9uY2xpY2s9ImpRdWVyeSgnI3skY29udGVudF9ibG9ja19pZH1fd3JhcHBlcicpLnRvZ2dsZSgnZmFzdCcpOyB0aGlzLmNsYXNzTmFtZSA9ICh0aGlzLmNsYXNzTmFtZSA9PSAnbm90aWZpY2F0aW9ucy1oaWRlJyA/ICdub3RpZmljYXRpb25zLXNob3cnIDogJ25vdGlmaWNhdGlvbnMtaGlkZScpOyBqUXVlcnkuZ2V0KCd7JGNvbnRlbnRfYmxvY2tzLiRjb250ZW50X2Jsb2NrX2lkLnByZWZfdXJsfSZ7JG1vZHVsZV9pZH1pdGVtX2Rpc3BsYXk9JysodGhpcy5jbGFzc05hbWUgPT0gJ25vdGlmaWNhdGlvbnMtaGlkZScgPyAxIDogMCkpOyIgY2xhc3M9IntpZiAkY29udGVudF9ibG9ja3MuJGNvbnRlbnRfYmxvY2tfaWQuZGlzcGxheSA9PSAwfW5vdGlmaWNhdGlvbnMtc2hvd3tlbHNlfW5vdGlmaWNhdGlvbnMtaGlkZXsvaWZ9IiBpZD0idG9nZ2xlLXskY29udGVudF9ibG9ja19pZH0iPjwvZGl2PgoJCQoJCXsvaWZ9CgkJCgkJPGRpdiBpZD0ieyRjb250ZW50X2Jsb2NrX2lkfV93cmFwcGVyIiBjbGFzcz0ie2lmICRjb250ZW50X2Jsb2Nrcy4kY29udGVudF9ibG9ja19pZC5kaXNwbGF5ID09IDAgJiYgISRjb250ZW50X2Jsb2Nrcy4kY29udGVudF9ibG9ja19pZC5ub19jb2xsYXBzZX1pbnZpc2libGV7ZWxzZX12aXNpYmxley9pZn0iPgoJCQkKCQl7aWYgJGNvbnRlbnRfYmxvY2tzLiRjb250ZW50X2Jsb2NrX2lkLmRlc2NyaXB0aW9ufQoJCQkKCQkJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQkJCQoJCQkJeyRjb250ZW50X2Jsb2Nrcy4kY29udGVudF9ibG9ja19pZC5kZXNjcmlwdGlvbn0KCQkJCQoJCQk8L2Rpdj4KCQkJCgkJey9pZn0KCQkJCgkJCTxkaXYgc3R5bGU9InBhZGRpbmc6IDVweCAwIDAgMDsiPgoJCQkJCgkJe2lmICRjb250ZW50X2Jsb2Nrcy4kY29udGVudF9ibG9ja19pZC5ibG9ja190eXBlICE9ICcnfQoJCQkJCgkJCQk8cD57JGNvbnRlbnRfYmxvY2tzLiRjb250ZW50X2Jsb2NrX2lkLmlucHV0fTwvcD4KCQkJCQoJCXtlbHNlfQoJCQkJCgkJCQl7JGNvbnRlbnRfYmxvY2tzLiRjb250ZW50X2Jsb2NrX2lkLmNvbnRlbnR9CgkJCQkKCQl7L2lmfQoJCQkJCgkJCTwvZGl2PgoJCQkKCQk8L2Rpdj4KCTwvZmllbGRzZXQ+CjwvZGl2Pgo8IS0tIGVuZCBibG9jayB7JGNvbnRlbnRfYmxvY2tfaWR9IGluIHBhZ2VfdGFiIHskcGFnZV90YWJfaWR9IC0tPgoKCXsvZm9yZWFjaH0KCjwhLS0gc3RhcnQgYmxvY2tzIGluIHBhZ2VfdGFiIHskcGFnZV90YWJfaWR9IC0tPgoKey9pZn0KCjwhLS0gRU5EIFBBR0VfVEFCIHskcGFnZV90YWJfaWR9IC0tPgo=]]></data>
	</file>
	<file>
	  <filename>/templates/defaultadmin.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL21vZHVsZXMvQWR2YW5jZWRDb250ZW50L2pzL2Z1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci8vPCFbQ0RBVEFbCkFkdmFuY2VkQ29udGVudC5tb2R1bGVJZCA9ICd7JG1vZHVsZUlkfSc7CntsaXRlcmFsfQpBZHZhbmNlZENvbnRlbnQuSW5pdCgpOwpBZHZhbmNlZENvbnRlbnQuSW1wb3J0UGFnZXMgPSBmdW5jdGlvbihocmVmKSB7CglocmVmID0gaHJlZiArICcmJyArIEFkdmFuY2VkQ29udGVudC5tb2R1bGVJZCArICdkaXNhYmxlX3RoZW1lPTEmJyArIEFkdmFuY2VkQ29udGVudC5tb2R1bGVJZCArICdhamF4PTEnOwoJalF1ZXJ5LmdldChocmVmICwgZnVuY3Rpb24oZGF0YSkgewoJCWpRdWVyeSgnI0FkdmFuY2VkQ29udGVudFJlc3VsdCcpLmh0bWwoZGF0YSk7Cgl9KTsKCXJldHVybiBmYWxzZTsKfQovL11dPgo8L3NjcmlwdD4Key9saXRlcmFsfQo8ZGl2IGlkPSJBZHZhbmNlZENvbnRlbnRSZXN1bHQiPgoJe2lmIGlzc2V0KCRtZXNzYWdlKSAmJiAkbWVzc2FnZSE9Jyd9Cgk8ZGl2IGNsYXNzPSJwYWdlbWNvbnRhaW5lciI+CgkJPHAgY2xhc3M9InBhZ2VtZXNzYWdlIj57JG1lc3NhZ2V9PC9wPgoJPC9kaXY+Cgl7L2lmfQo8L2Rpdj4KCntpZiAkdGFic3xAY291bnR9Cgl7JHN0YXJ0X3RhYmhlYWRlcnN9CgkJe2ZvcmVhY2ggZnJvbT0kdGFicyBpdGVtPXRhYn0KCQkJeyR0YWIudGFiaGVhZGVyfQoJCXsvZm9yZWFjaH0KCXskZW5kX3RhYmhlYWRlcnN9Cgl7JHN0YXJ0X3RhYmNvbnRlbnR9CgkJe2ZvcmVhY2ggZnJvbT0kdGFicyBpdGVtPXRhYn0KCQkJeyR0YWIudGFiY29udGVudH0KCQl7L2ZvcmVhY2h9Cgl7JGVuZF90YWJjb250ZW50fQp7L2lmfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/multiContent.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCXskYWRkX2NvbnRlbnRfYmxvY2t9CjwvZGl2PgoKe2lmICRtdWx0aV9jb250ZW50X2Jsb2Nrc3xAY291bnQgPiAwfQoKPCEtLSBzdGFydCBtdWx0aSBjb250ZW50IGJsb2NrcyAtLT4KCgl7Zm9yZWFjaCBmcm9tPSRtdWx0aV9jb250ZW50X2Jsb2NrcyBpdGVtPWJsb2NrfQoJCjwhLS0gc3RhcnQgYmxvY2sgeyRibG9jay5pZH0gLS0+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+Cgk8ZGl2IGlkPSJ7JGJsb2NrLmlkfV93cmFwcGVyIntpZiAkYmxvY2suc29ydGFibGV9IGNsYXNzPSJzb3J0YWJsZSJ7L2lmfT4KCQkKCQk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCQk8c3Ryb25nPnskYmxvY2subGFiZWx9Ojwvc3Ryb25nPjxzcGFuIHN0eWxlPSJmbG9hdDpyaWdodCI+eyRyZW1vdmVfY29udGVudF9ibG9ja308L3NwYW4KCQk8L2Rpdj4KCQkKCXtpZiAkYmxvY2suZGVzY3JpcHRpb259CgkJCgkJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQkJCgkJCXskYmxvY2suZGVzY3JpcHRpb259CgkJCQoJCTwvZGl2PgoJCQoJey9pZn0KCQkKCQk8ZGl2IHN0eWxlPSJwYWRkaW5nOiA1cHggMCAwIDA7Ij4KCQkJCgkJCTxwPnskYmxvY2suaW5wdXR9PC9wPgoJCQkKCQk8L2Rpdj4KCQkKCTwvZGl2Pgo8L2Rpdj4KPCEtLSBlbmQgYmxvY2sgeyRibG9jay5pZH0gLS0+CgoJey9mb3JlYWNofQoKPCEtLSBlbmQgbXVsdGkgY29udGVudCBibG9ja3MgLS0+Cgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJeyRhZGRfY29udGVudF9ibG9ja30KPC9kaXY+Cgp7L2lmfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/multiInput.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KPHA+Cntmb3JlYWNoIGZyb209JGlucHV0cyBpdGVtPWlucHV0fQoJeyRpbnB1dC5sYWJlbH06Jm5ic3A7eyRpbnB1dC5pbnB1dH0mbmJzcDsKey9mb3JlYWNofQo8L3A+CjwvZGl2Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/multiInputTab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmIGlzc2V0KCRlcnJvcm1lc3NhZ2UpICYmICRlcnJvcm1lc3NhZ2UhPScnfQo8ZGl2IGNsYXNzPSJwYWdlZXJyb3Jjb250YWluZXIiPgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8dWwgY2xhc3M9InBhZ2VlcnJvciI+PGxpPnskZXJyb3JtZXNzYWdlfTwvbGk+PC91bD4KCTwvZGl2Pgo8L2Rpdj4Key9pZn0Ke2lmIGlzc2V0KCRtZXNzYWdlKSAmJiAkbWVzc2FnZSE9Jyd9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+Cgk8ZGl2IGNsYXNzPSJwYWdlbWNvbnRhaW5lciI+CgkJPHA+eyRtZXNzYWdlfTwvcD4KCTwvZGl2Pgo8L2Rpdj4Key9pZn0KCjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj4KCXskYWRkX211bHRpX2lucHV0fQoJPGRpdiBjbGFzcz0iY2xlYXJiIj48L2Rpdj4KPC9kaXY+Cgp7aWYgJG11bHRpX2lucHV0X2FycmF5fEBjb3VudH0KeyRzdGFydF9mb3JtfQoKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCTx0YWJsZSBjbGFzcz0icGFnZXRhYmxlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjEiPgoJCTx0aGVhZD4KCQkJPHRyPgoJCQkJPHRoPnskaW5wdXRfaWRfdGV4dH08L3RoPgoJCQkJPHRoPnskdGVtcGxhdGVfdGV4dH08L3RoPgoJCQkJPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4KCQkJCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+CgkJCQk8dGggY2xhc3M9InBhZ2VpY29uIj57JHNlbGVjdGFsbH08L3RoPgoJCQk8L3RyPgoJCTwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCXtmb3JlYWNoIGZyb209JG11bHRpX2lucHV0X2FycmF5IGl0ZW09Im11bHRpX2lucHV0In0KCQkKCQkJPHRyIGNsYXNzPSJ7Y3ljbGUgdmFsdWVzPSJyb3cxLHJvdzIifSI+CgkJCQk8dGQ+eyRtdWx0aV9pbnB1dC5uYW1lX2xpbmt9PC90ZD4KCQkJCTx0ZD57JG11bHRpX2lucHV0LnRlbXBsYXRlfTwvdGQ+CgkJCQk8dGQ+eyRtdWx0aV9pbnB1dC5lZGl0X2xpbmt9PC90ZD4KCQkJCTx0ZD57JG11bHRpX2lucHV0LmRlbGV0ZV9saW5rfTwvdGQ+CgkJCQk8dGQ+eyRtdWx0aV9pbnB1dC5jaGVja2JveH08L3RkPgoJCQk8L3RyPgoJCQkKCQl7L2ZvcmVhY2h9CgkJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj4KCXskYWRkX211bHRpX2lucHV0fQoJPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDogMHB0OyBmbG9hdDogcmlnaHQ7IHRleHQtYWxpZ246IHJpZ2h0OyI+CgkJeyRzdWJtaXRfYnVsa2FjdGlvbn0KCTwvZGl2PgoJPGRpdiBjbGFzcz0iY2xlYXJiIj48L2Rpdj4KPC9kaXY+Cgp7JGVuZF9mb3JtfQp7L2lmfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/multiInputTplTab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmIGlzc2V0KCRlcnJvcm1lc3NhZ2UpICYmICRlcnJvcm1lc3NhZ2UhPScnfQo8ZGl2IGNsYXNzPSJwYWdlZXJyb3Jjb250YWluZXIiPgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8dWwgY2xhc3M9InBhZ2VlcnJvciI+PGxpPnskZXJyb3JtZXNzYWdlfTwvbGk+PC91bD4KCTwvZGl2Pgo8L2Rpdj4Key9pZn0Ke2lmIGlzc2V0KCRtZXNzYWdlKSAmJiAkbWVzc2FnZSE9Jyd9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+Cgk8ZGl2IGNsYXNzPSJwYWdlbWNvbnRhaW5lciI+CgkJPHA+eyRtZXNzYWdlfTwvcD4KCTwvZGl2Pgo8L2Rpdj4Key9pZn0KCjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj4KCXskYWRkX211bHRpX2lucHV0X3RwbH0KCTxkaXYgY2xhc3M9ImNsZWFyYiI+PC9kaXY+CjwvZGl2PgoKe2lmICRtdWx0aV9pbnB1dF90cGxfYXJyYXl8QGNvdW50fQp7JHN0YXJ0X2Zvcm19Cgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJPHRhYmxlIGNsYXNzPSJwYWdldGFibGUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMSI+CgkJPHRoZWFkPgoJCQk8dHI+CgkJCQk8dGg+eyR0ZW1wbGF0ZV9uYW1lX3RleHR9PC90aD4KCQkJCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+CgkJCQk8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPgoJCQkJPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4KCQkJCTx0aCBjbGFzcz0icGFnZWljb24iPnskc2VsZWN0YWxsfTwvdGg+CgkJCTwvdHI+CgkJPC90aGVhZD4KCQk8dGJvZHk+CgkJCQoJCXtmb3JlYWNoIGZyb209JG11bHRpX2lucHV0X3RwbF9hcnJheSBpdGVtPSJtdWx0aV9pbnB1dF90cGwifQoJCQkKCQkJPHRyIGNsYXNzPSJ7Y3ljbGUgdmFsdWVzPSJyb3cxLHJvdzIifSI+CgkJCQk8dGQ+eyRtdWx0aV9pbnB1dF90cGwubmFtZV9saW5rfTwvdGQ+CgkJCQk8dGQ+eyRtdWx0aV9pbnB1dF90cGwuc2V0X2RlZmF1bHRfbGlua308L3RkPgoJCQkJPHRkPnskbXVsdGlfaW5wdXRfdHBsLmVkaXRfbGlua308L3RkPgoJCQkJPHRkPnskbXVsdGlfaW5wdXRfdHBsLmRlbGV0ZV9saW5rfTwvdGQ+CgkJCQk8dGQ+eyRtdWx0aV9pbnB1dF90cGwuY2hlY2tib3h9PC90ZD4KCQkJPC90cj4KCQkJCgkJey9mb3JlYWNofQoJCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+Cgl7JGFkZF9tdWx0aV9pbnB1dF90cGx9Cgk8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOiAwcHQ7IGZsb2F0OiByaWdodDsgdGV4dC1hbGlnbjogcmlnaHQ7Ij4KCQl7JHN1Ym1pdF9idWxrYWN0aW9ufQoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJjbGVhcmIiPjwvZGl2Pgo8L2Rpdj4KCnskZW5kX2Zvcm19CnsvaWZ9Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/prefsTab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCTxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgoJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbXBvcnRjb250ZW50X2lucHV0fTxiciAvPjwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+Cgk8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW1wb3J0Y29udGVudDJfaW5wdXR9PGJyIC8+PC9wPgo8L2Rpdj4KeyRzdGFydGZvcm19CnsqCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+Cgk8cCBjbGFzcz0icGFnZXRleHQiPnskdXNlX2NvbnRlbnR0eXBlX3RleHR9OjwvcD4KCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskdXNlX2NvbnRlbnR0eXBlX2lucHV0fTwvcD4KPC9kaXY+Cip9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+Cgk8cCBjbGFzcz0icGFnZXRleHQiPnskc2hvd19hZHZhbmNlZGNvbnRlbnRfb3B0aW9uc190ZXh0fTo8L3A+Cgk8cCBjbGFzcz0icGFnZWlucHV0Ij57JHNob3dfYWR2YW5jZWRjb250ZW50X29wdGlvbnNfaW5wdXR9PC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR1bmluc3RhbGxhY3Rpb25fdGV4dH06PC9wPgoJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyR1bmluc3RhbGxhY3Rpb25faW5wdXR9PC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRibG9ja19kaXNwbGF5X3NldHRpbmdzX3RleHR9OjwvcD4KCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskYmxvY2tfZGlzcGxheV9zZXR0aW5nc19pbnB1dH08L3A+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JGNvbGxhcHNlX2Jsb2NrX2RlZmF1bHRfdGV4dH06PC9wPgoJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRjb2xsYXBzZV9ibG9ja19kZWZhdWx0X2lucHV0fTwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+Cgk8cCBjbGFzcz0icGFnZXRleHQiPnskbWVzc2FnZV9kaXNwbGF5X3NldHRpbmdzX3RleHR9OjwvcD4KCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskbWVzc2FnZV9kaXNwbGF5X3NldHRpbmdzX2lucHV0fTwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+Cgk8cCBjbGFzcz0icGFnZXRleHQiPnskZ3JvdXBfZGlzcGxheV9zZXR0aW5nc190ZXh0fTo8L3A+Cgk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGdyb3VwX2Rpc3BsYXlfc2V0dGluZ3NfaW5wdXR9PC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRjb2xsYXBzZV9ncm91cF9kZWZhdWx0X3RleHR9OjwvcD4KCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskY29sbGFwc2VfZ3JvdXBfZGVmYXVsdF9pbnB1dH08L3A+CjwvZGl2Pgp7aWYgaXNzZXQoJGNvbnRlbnRzZXR0aW5nc190ZXh0KX0KPGZpZWxkc2V0PgoJPGxlZ2VuZD57JGNvbnRlbnRzZXR0aW5nc190ZXh0fTwvbGVnZW5kPgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskZmV1YWNjZXNzX3RleHR9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGZldWFjY2Vzc19pbnB1dH08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHJlZGlyZWN0cGFnZV90ZXh0fTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRyZWRpcmVjdHBhZ2VfaW5wdXR9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRyZWRpcmVjdHBhcmFtc190ZXh0fTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRyZWRpcmVjdHBhcmFtc19pbnB1dH0mbmJzcDt7JGV2YWx1YXRlc21hcnR5X3RleHR9OiZuYnNwO3skZXZhbHVhdGVzbWFydHlfaW5wdXR9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRmZXVhY3Rpb25fdGV4dH06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskZmV1YWN0aW9uX2lucHV0fTwvcD4KCTwvZGl2Pgo8L2ZpZWxkc2V0Pgp7L2lmfQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJPHAgY2xhc3M9InBhZ2V0ZXh0Ij48L3A+Cgk8cCBjbGFzcz0icGFnZWlucHV0Ij57JHN1Ym1pdF9wcmVmc308L3A+CjwvZGl2Pgp7JGVuZGZvcm19Cg==]]></data>
	</file>
</module>
