<?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>Tourney</name>
	<version>0.2.2</version>
  <mincmsversion>1.9</mincmsversion>
	<help><![CDATA[PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlRoaXMgbW9kdWxlIGFsbG93cyB5b3UgdG8gbWFuYWdlIGNvbXBldGl0aW9ucyBvZiBzZXZlcmFsIHNvcnRzLCBieSBzY2hlZHVsaW5nIG1hdGNoZXMsIHJlY29yZGluZyByZXN1bHRzLCBhbmQgZW5hYmxpbmcgcGFydGljaXBhbnRzIGFuZCBvdGhlcnMgdG8ga2VlcCBhYnJlYXN0IG9mIHByb2dyZXNzLjwvcD4KPGgzPkhvdyBEbyBJIFVzZSBJdD88L2gzPgo8cD5JbiB0aGUgQ01TTVMgYWRtaW4gQ29udGVudCBNZW51LCB5b3Ugc2hvdWxkIHNlZSBhIG1lbnUgaXRlbSBjYWxsZWQgJ1RvdXJuYW1lbnRzJy4KQ2xpY2sgb24gdGhhdC4gT24gdGhlIGRpc3BsYXllZCBwYWdlLCB0aGVyZSBhcmUgKHRvIHRoZSBleHRlbnQgdGhhdCB5b3UncmUgc3VpdGFibHkgYXV0aG9yaXNlZCkKbGlua3MgYW5kIGlucHV0cyBieSB3aGljaCB5b3UgY2FuIGFkZCBvciBjaGFuZ2UgYSB0b3VybmFtZW50LCBvciBjaGFuZ2UgbW9kdWxlIHNldHRpbmdzLjwvcD4KPGgzPkFkZGluZyBhIFRvdXJuYW1lbnQgdG8gYSBQYWdlPC9oMz4KPHA+U3VpdGFibHkgYXV0aG9yaXNlZCB1c2VycyB3aWxsIHNlZSwgb24gdGhlIG1vZHVsZSdzIGFkbWluIHBhZ2UsIHRoZSB0YWcgdXNlZCB0byBkaXNwbGF5IGVhY2ggdG91cm5hbWVudC4KRWFjaCB0YWcgbG9va3Mgc29tZXRoaW5nIGxpa2UgPHByZT57Y21zX21vZHVsZSBtb2R1bGU9J1RvdXJuZXknIGFsaWFzPSdzYW1wbGVfY29tcCd9PC9wcmU+PC9wPgo8cD5QdXQgc3VjaCBhIHRhZyBpbnRvIHRoZSBjb250ZW50IG9mIGEgcGFnZSBvciBpbnRvIGEgdGVtcGxhdGUsIG9wdGlvbmFsbHkgd2l0aCBleHRyYSBwYXJhbWV0ZXJzIGFzIGRlc2NyaWJlZCBiZWxvdy4KPGgzPlRvdXJuYW1lbnQgQ2hhcnRzPC9oMz4KPHA+VGhlc2UgYXJlIFBERiBmaWxlcywgY3JlYXRlZCB1c2luZyBhIFVURi04LWNhcGFibGUgPGEgaHJlZj0iaHR0cDovL3d3dy5mcGRmLm9yZy9lbi9zY3JpcHQvc2NyaXB0OTIucGhwIj52YXJpYW50PC9hPiBvZiB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5mcGRmLm9yZyI+RlBERjwvYT4gbGlicmFyeS4KVGhlIFBIUCBleHRlbnNpb24gJ21ic3RyaW5nJyBtdXN0IGJlIGF2YWlsYWJsZSBpZiBVVEYtOC1lbmNvZGVkIHRleHQgaXMgdG8gYmUgZGlzcGxheWVkLjwvcD4KPGgzPkNoYXJ0IFN0eWxpbmc8L2gzPgo8cD5TdHlsaW5nIGlzIG1hbmFnZWQgdXNpbmcgY3NzLWxpa2UgaW5mb3JtYXRpb24uIFJlY29nbmlzZWQgY2xhc3NlcyBhcmU8dWw+CjxsaT4uY2hhcnQ8L2xpPgo8bGk+LmJveCwgYW5kIHJlbGF0ZWQgcHNldWRvLWNsYXNzZXMgJzpub25maXJtJywgJzpmaXJtJywgJzpwbGF5ZWQnIGFuZCAnOndpbm5lcic8L2xpPgo8bGk+LmxpbmU8L2xpPgo8L3VsPjwvcD4KPHA+U3R5bGluZyBpcyBhcHBsaWVkIGF0IHRoZSBzZXJ2ZXIgZW5kLCB1c2luZyBhIHZlcnktYmFzaWMgbWVjaGFuaXNtLgpCb3gtc2lkZS1zcGVjaWZpYyBzdHlsaW5nIGlzIG5vdCBzdXBwb3J0ZWQsIGFwYXJ0IGZyb20gaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgbWFyZ2lucy4KQ2hhcnQgY2FuIGhhdmUgcHNldWRvLXByb3BlcnRpZXMgJ2dhcHdpZHRoJywgcmVwcmVzZW50aW5nIGV4dHJhIGhvcml6b250YWwgZGlzdGFuY2UgYmV0d2VlbiBib3hlcycgbWFyZ2lucywKYW5kICdtaW5oZWlnaHQnLCAnbWlud2lkdGgnLCByZXByZXNlbnRpbmcgYSBtaW5pbXVtIHBhZ2Ugc2l6ZSBmb3IgcHJpbnRlZC9wbGFpbiBjaGFydHMuCkJhY2tncm91bmQgaW1hZ2VzIGFuZCByYXJlIHByb3BlcnRpZXMgbGlrZSAnbGV0dGVyLXNwYWNpbmcnIGFyZSBub3Qgc3VwcG9ydGVkLgpSZWxhdGl2ZSB2YWx1ZXMgbGlrZSAnc21hbGwnLCAnJScgb3IgJ2VtJyBoYXZlIG5vIG1lYW5pbmcuPC9wPgo8cD5Gb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyByZXByZXNlbnRzIHRoZSBkZWZhdWx0IHNldHRpbmdzOgo8cHJlPi5jaGFydDxiciAvPns8YnIgLz4gcGFkZGluZzoycHg7PGJyIC8+IGdhcHdpZHRoOjEwcHg7PGJyIC8+IGJhY2tncm91bmQtY29sb3I6I2ZmZjdlZDs8YnIgLz4gZm9udC1mYW1pbHk6c2Fuczs8YnIgLz4gbWluaGVpZ2h0OjUyNnB0OzxiciAvPiBtaW53aWR0aDo3NzBwdDs8YnIgLz59PGJyIC8+LmxpbmU8YnIgLz57PGJyIC8+IHdpZHRoOjJweDs8YnIgLz4gc3R5bGU6ZG90dGVkOzxiciAvPiBjb2xvcjojMDA4MDAwOzxiciAvPn08YnIgLz4uYm94PGJyIC8+ezxiciAvPiBtYXJnaW46M3B4IDVweDs8YnIgLz4gcGFkZGluZzowOzxiciAvPiBoZWlnaHQ6NDBweDs8YnIgLz4gd2lkdGg6MTUwcHg7PGJyIC8+IGJvcmRlcjoycHggc29saWQgI2YwMDs8YnIgLz4gYmFja2dyb3VuZC1jb2xvcjojZmZmOzxiciAvPiBjb2xvcjojMDAwOzxiciAvPiBmb250LXNpemU6MTJweDs8YnIgLz59PGJyIC8+LmJveDpub25maXJtPGJyIC8+ezxiciAvPiBib3JkZXItY29sb3I6IzAwZjs8YnIgLz4gYmFja2dyb3VuZC1jb2xvcjojZmZjYjk0OzxiciAvPn08YnIgLz4uYm94OmZpcm08YnIgLz57PGJyIC8+IGJvcmRlci1jb2xvcjojZjAwOzxiciAvPiBiYWNrZ3JvdW5kLWNvbG9yOiNiN2U4YjE7PGJyIC8+fTxiciAvPi5ib3g6cGxheWVkPGJyIC8+ezxiciAvPiBib3JkZXItY29sb3I6IzAwMmM4Zjs8YnIgLz4gYmFja2dyb3VuZC1jb2xvcjojYmZkNmVjOzxiciAvPn08YnIgLz4uYm94Ondpbm5lcjxiciAvPns8YnIgLz4gYm9yZGVyLWNvbG9yOiM4MDAwN2Y7PGJyIC8+IGJhY2tncm91bmQtY29sb3I6I2U1YjQwMDs8YnIgLz4gY29sb3I6IzAwMDs8YnIgLz59PC9wcmU+PGJyIC8+CllvdSBjYW4gc3BlY2lmeSB0aGUgbmFtZSBvZiBhIHN0eWxlc2hlZXQgZmlsZSBhcyBvbmUgb2YgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSB0b3VybmFtZW50LCBlaXRoZXIgaW4gdGhlIHRvdXJuYW1lbnQgc2V0dGluZ3Mgb3IgdGhlIHJlbGV2YW50IHBhZ2UgdGFnLiBUaGUgZmlsZSBpcyBleHBlY3RlZCB0byBiZSBsb2NhdGVkIGluIHRoZSB3ZWJzaXRlJ3MgdXBsb2FkcyBkaXJlY3Rvcnkgb3IsIGRlcGVuZGluZyBvbiB0aGUgcmVsZXZhbnQgbW9kdWxlIHByZWZlcmVuY2UsIGEgZGVzY2VuZGFudCBvZiB0aGF0IGRpcmVjdG9yeS4KVGhlIGZpbGUgZG9lcyBub3QgbmVlZCB0byBiZSB1bmlxdWUgdG8gYSBzcGVjaWZpYyB0b3VybmFtZW50LiBBYnNlbnQgc3VjaCBmaWxlLCB0aGUgZGVmYXVsdHMgYXJlIGFwcGxpZWQuPC9wPgo8cD5UaGUgbW9kdWxlIHNoaXBzIHdpdGggdmFyaW91cyBUeXBlMSBmb250cywgd2hpY2ggY2FuIGJlIHNlZW4gaW4gdGhlIC4uLi9saWIvZm9udCBmb2xkZXIuIEV4dHJhIGZvbnRzIGNhbiBiZSA8YSBocmVmPSJodHRwOi8vd3d3LmZwZGYub3JnL2VuL3R1dG9yaWFsL3R1dG83Lmh0bSI+bWFudWFsbHkgaW5zdGFsbGVkPC9hPi48YnIgLz4KVHJ1ZXR5cGUgZm9udHMgY2FuIGJlIHVzZWQsIGFuZCB3b3VsZCB0eXBpY2FsbHkgcmVzdWx0IGluIHNtYWxsZXItc2l6ZWQgY2hhcnQgZmlsZXMsIGFzIG9ubHkgdGhlIHVzZWQtY2hhcmFjdGVycyBhcmUgZW1iZWRkZWQgaW4gdGhlIGZpbGUuIFRoZSBtb2R1bGUgc2hpcHMgd2l0aCBzZXJpZiwgc2FucywgY29uZGVuc2VkIGFuZCBtb25vIGZvbnQtZmFtaWxpZXMgKHRoYW5rcyB0byBVUlcpLiBPdGhlciAudHRmIGZpbGVzIG1heSBiZSBpbnN0YWxsZWQgYXMtaXMgaW4gdGhlIHVwbG9hZHMgc3ViLWRpcmVjdG9yeSBzcGVjaWZpZWQgaW4gdGhlIG1vZHVsZSBzZXR0aW5ncywgb3IgaW4gdGhlIG1vZHVsZSBzdWItZGlyZWN0b3J5ICIuLi4vbGliL2ZvbnQvdHRmIi4gU2V2ZXJhbCAnc3RhbmRhcmQnIHRydWV0eXBlIGZvbnRzIChjb3VyaWVyIGV0YykgYXJlIHNpbXVsYXRlZC4gVGhlc2UgY2FuIGJlIHNlZW4gaW4gIi4uLi9saWIvZm9udC91bmlmb250Ii48L3A+CjxoMz5Db21tdW5pY2F0aW9uIGJ5IFR3ZWV0PC9oMz4KPHA+QSB0d2l0dGVyIGFwcGxpY2F0aW9uICdDTVNNUyBUb3VybmV5TW9kdWxlJyBpcyB1c2VkIHRvIGNoYW5uZWwgdHdlZXRzIHRvIHBhcnRpY2lwYW50cyBhbmQvb3IgdGhlIHJlc3BvbnNpYmxlIHBlcnNvbiwgd2hlcmUgdGhvc2UgcGVyc29ucycgY29udGFjdCBpcyBhIHR3aXR0ZXIgaGFuZGxlLjwvcD4KPHA+T25lIHR3aXR0ZXIgYWNjb3VudCAoQENNU01TVG91cm5leSkgaGFzIGF1dGhvcmlzZWQgdGhhdCBhcHAsIGFuZCBhbnkgb3RoZXIgYWNjb3VudCBtYXkgbGlrZXdpc2UgZG8gc28uIFRvIHNlbmQgZnJvbSBhIGRpZmZlcmVudCBhY2NvdW50LCBlaXRoZXI8dWw+CjxsaT5hIG1vZHVsZSB1c2VyIG5lZWRzIHRvIGF1dGhvcmlzZSBpLmUuIHN1cHBseSB0aGUgYWNjb3VudCBwYXNzd29yZCwgb3I8L2xpPgo8bGk+dGhlIHdlYnNpdGUgbmVlZHMgYSBtZWNoYW5pc20gd2hpY2ggZW5hYmxlcyB0aGUgYWNjb3VudCBob2xkZXIgdG8gaW5kZXBlbmRlbnRseSBhdXRob3Jpc2U8L2xpPgo8L3VsPgpiZWZvcmUgdGhlIGFjY291bnQgaXMgdXNlZC48L3A+CjxwPkZvciB0aGUgbGF0dGVyLCB5b3UgY2FuIGNyZWF0ZSwgYW5kIGF0IGxlYXN0IHRlbXBvcmFyaWx5IGVuYWJsZSwgYSBwYWdlIHdpdGggdGFnIGxpa2U8cHJlPntjbXNfbW9kdWxlIG1vZHVsZT0nVG91cm5leScgYWxpYXM9J3NhbXBsZV9jb21wJyB0d2VldGF1dGg9MX08L3ByZT5vciBqdXN0PGJyIC8+e2Ntc19tb2R1bGUgbW9kdWxlPSdUb3VybmV5JyB0d2VldGF1dGg9MX08L3ByZT48YnIgLz48YnIgLz5hbmQgcmVmZXIgdGhlIGFjY291bnQgaG9sZGVyIHRoZXJlLjwvcD4KPGgzPlN1cHBvcnQ8L2gzPgo8cD5UaGlzIG1vZHVsZSBpcyBwcm92aWRlZCBhcy1pcy4gUGxlYXNlIHJlYWQgdGhlIHRleHQgb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPgo8cD5Gb3IgaGVscDo8dWw+CjxsaT5kaXNjdXNzaW9uIG1heSBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPjsgb3I8L2xpPgo8bGk+eW91IG1heSBoYXZlIHNvbWUgc3VjY2VzcyBlbWFpbGluZyB0aGUgYXV0aG9yIGRpcmVjdGx5LjwvbGk+CjwvdWw+PC9wPgo8cD5Gb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBtb2R1bGUsIG9yIHRvIHJlcG9ydCBhIGJ1ZywgdmlzaXQgdGhlIG1vZHVsZSdzIDxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvdG91cm5leSI+Zm9yZ2UtcGFnZTwvYT4uPC9wPgo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDE0LTIwMTUgVG9tIFBoYW5lLiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvcD4KPHA+VGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVsZWFzZWQgdW5kZXIgdmVyc2lvbiAzIG9mIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC5odG1sIj5HTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2U8L2E+LCBhbmQgbWF5IGJlIHVzZWQgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoYXQgbGljZW5jZSwgb3IgYW55IGxhdGVyIHZlcnNpb24gb2YgdGhhdCBsaWNlbnNlIHdoaWNoIGlzIGFwcGxpZWQgdG8gdGhlIG1vZHVsZS48YnIgLz4KVGhlIGluY2x1ZGVkIGZvbnRzIGhhdmUgYmVlbiBsaWNlbnNlZCBieSA8YSBocmVmPSJodHRwOi8vd3d3LnVyd3BwLmRlL2VuZ2xpc2gvaG9tZS5odG1sIj5VUlc8L2E+IHVuZGVyIHRoZSBHUEwuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48dWw+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gbGFuZz0iZW5fVVMiIC0gUGFyYW1ldGVyIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGF0IGxhbmd1YWdlIHRvIHVzZSBmb3IgZGlzcGxheSBvbiB0aGUgZnJvbnRlbmQuIE5vdCBhbGwgbW9kdWxlcyBzdXBwb3J0IG9yIG5lZWQgdGhpcy48L2xpPjxsaT5hbGlhcz0iIiAtIFRvdXJuYW1lbnQgYWxpYXMuPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiB2aWV3PSJjaGFydCIgLSBUb3VybmFtZW50IGRpc3BsYXkgdHlwZTogJ2NoYXJ0JyBvciAnbGlzdCcuPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBjc3NmaWxlPSIiIC0gTmFtZSBvZiB1cGxvYWRlZCAuY3NzIGZpbGUgd2l0aCBjaGFydC1zdHlsaW5nIGRldGFpbHMuPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiB0d2VldGF1dGg9IiIgLSBTaG93IG9ubHkgYSB0d2l0dGVyLWFjY291bnQgYXV0aG9yaXNhdGlvbiBidXR0b24uPC9saT48L3VsPg==]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiB0b21waGFudG9vICZsdDt0cGd3d0BvbmVwb3N0Lm5ldCZndDs8YnIgLz48YnIgLz5WZXJzaW9uOiAwLjIuMjxiciAvPjxiciAvPkNoYW5nZSBIaXN0b3J5OjxiciAvPjx1bD4KPGxpPlZlcnNpb24gMC4xIC0gMzEgTWFyY2ggMjAxNCBJbml0aWFsIFJlbGVhc2UuPC9saT4KPGxpPlZlcnNpb24gMC4yLjEgLSAxNSBBcHJpbCAyMDE1CiA8dWw+CiAgPGxpPlZhcmlvdXMgVUkgcmVmaW5lbWVudHM8L2xpPgogIDxsaT5FeHRyYSBicmFja2V0LWNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyczwvbGk+CiAgPGxpPlBsYW4gdmlldyBmb3Igcm91bmQtcm9iaW4gYnJhY2tldHM8L2xpPgogIDxsaT5Hcm91cGluZyBvZiBicmFja2V0cyBmb3IgY29udGVtcG9yYXJ5IHJlc291cmNlLHBsYXllciBtYW5hZ2VtZW50PC9saT4KICA8bGk+V29yayB3aXRoIFNNU0cgbW9kdWxlIGlmIGF2YWlsYWJsZSwgZm9yIG5vdGlmaWNhdGlvbiBieSBTTVM8L2xpPgogIDxsaT5Xb3JrIHdpdGggRnJvbnRFbmRVc2VycyBtb2R1bGUgaWYgYXZhaWxhYmxlLCBmb3IgdW5tZWRpYXRlZCByZWNvcmRpbmcgb2YgbWF0Y2ggcmVzdWx0czwvbGk+CiAgPGxpPkF1dG8tc2NoZWR1bGluZyBvZiBtYXRjaGVzIHN0aWxsIFRPRE88L2xpPgogPC91bD4KPC9saT4KPGxpPlZlcnNpb24gMC4yLjIgLSAyMCBBcHJpbCAyMDE1CiA8dWw+CiAgPGxpPlN1cHBvcnQgQ01TTVMgMS4xMis8L2xpPgogPC91bD4KPC9saT4KPC91bD4KPGJyIC8+]]></about>
	<description><![CDATA[Administer, edit, configure tournaments]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.addedit_comp.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKKi8KaWYgKCEkdGhpcy0+Q2hlY2tBY2Nlc3MoKSkKCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAnJywKCQlhcnJheSgndG10X21lc3NhZ2UnPT4kdGhpcy0+UHJldHR5TWVzc2FnZSgnbGFja3Blcm1pc3Npb24nLEZBTFNFKSkpOwovKgpBcnJpdmUgaGVyZSBmb2xsb3dpbmcgYWRtaW5wYW5lbCBhZGQgb3IgZWRpdCBjbGljaywgb3Igb25lIG9mIHRoZSB2YXJpb3VzIGFjdGlvbnMKaW5pdGlhdGVkIGZyb20gdGhlIHBhZ2Ugc2V0dXAgYW5kIGRpc3BsYXllZCBoZXJlCkRldGVybWluZSB3aGV0aGVyIHRvIGFkZCBhIG5ldyBjb21wCiovCiRhZGQgPSBGQUxTRTsKaWYgKGlzc2V0KCRwYXJhbXNbJ3JlYWxfYWN0aW9uJ10pKQp7CgkvL2JhY2sgaGVyZSBhZnRlciBvcGVyYXRpb24gaW5pdGlhdGVkIGZyb20gcHJldmlvdXMgaXRlcmF0aW9uIChhbmQgd2l0aCBqcyBlbmFibGVkKQoJaWYgKGVtcHR5KCRwYXJhbXNbJ2JyYWNrZXRfaWQnXSkpCgl7CgkJJHRoaXMtPlJlZGlyZWN0KCRpZCwnZGVmYXVsdGFkbWluJywnJyxhcnJheSgndG10X21lc3NhZ2UnPT4kdGhpcy0+UHJldHR5TWVzc2FnZSgkcGFyYW1zWydyZWFsX2FjdGlvbiddLEZBTFNFKSkpOyAvL1RPRE8gREVCVUcKCQlpZiAoMCkgLy9UT0RPICRwYXJhbXNbJ3JlYWxfYWN0aW9uJ10gPT0gPykKCQkJJGFkZCA9IFRSVUU7Cgl9CglpZiAoc3RycG9zKCRwYXJhbXNbJ3JlYWxfYWN0aW9uJ10sJ21vdmUnKSA9PT0gMCkKCXsKCQkvL3N0cmlwIG9mZiB0aGUgW3RlYW1pZF0KCQkkdG1wID0gJHBhcmFtc1sncmVhbF9hY3Rpb24nXTsKCQkkcG9zID0gc3RycG9zKCR0bXAsJ1snKTsKCQkkbW92ZXRpZCA9IHN1YnN0cigkdG1wLCRwb3MrMSwtMSk7CgkJJHBhcmFtc1sncmVhbF9hY3Rpb24nXSA9IHN1YnN0cigkdG1wLDAsJHBvcyk7Cgl9Cn0KZWxzZWlmKGlzc2V0KCRwYXJhbXNbJ2FjdGlvbiddKSkKewoJLy9hZGR8ZWRpdCBpbml0aWF0ZWQgZnJvbSBhZG1pbnBhbmVsIChvciBvdGhlcnMgaWYganMgZGlzYWJsZWQpCglpZiAoZW1wdHkoJHBhcmFtc1snYnJhY2tldF9pZCddKSkKCXsKCQkkcGFyYW1zWydyZWFsX2FjdGlvbiddID0gJ2FkZCc7CgkJJGFkZCA9IFRSVUU7Cgl9CgllbHNlCgkJJHBhcmFtc1sncmVhbF9hY3Rpb24nXSA9ICdlZGl0JzsKfQplbHNlCgkkdGhpcy0+UmVkaXJlY3QoJGlkLCdkZWZhdWx0YWRtaW4nLCcnLGFycmF5KCd0bXRfbWVzc2FnZSc9PiR0aGlzLT5QcmV0dHlNZXNzYWdlKCdlcnJfc3lzdGVtJyxGQUxTRSkpKTsKCiR0YWIgPSAkdGhpcy0+R2V0QWN0aXZlVGFiKCRwYXJhbXMpOwokbWVzc2FnZSA9ICghZW1wdHkoJHBhcmFtc1sndG10X21lc3NhZ2UnXSkpID8gJHBhcmFtc1sndG10X21lc3NhZ2UnXSA6IEZBTFNFOwppZiAoJGFkZCkKewoJJGZ1bmNzID0gbmV3IHRtdERhdGEoKTsKCSRkYXRhID0gJGZ1bmNzLT5HZXRCcmFja2V0RGF0YSgkdGhpcywnYWRkJywkaWQpOwoJdW5zZXQoJGZ1bmNzKTsKCS8vc2F2ZSBpbml0aWFsIChub24tZGVmYXVsdCkgZGF0YSBmb3IgYnJhY2tldAoJJGFyZ3MgPSBhcnJheSgKCSdicmFja2V0X2lkJyA9PiAkZGF0YS0+YnJhY2tldF9pZCwKCSd0eXBlJyA9PiBUb3VybmV5OjpLT1RZUEUsIC8vJGRhdGEtPnR5cGUgaXMgZW1wdHkgc3RyaW5nCgknc2VlZHR5cGUnID0+ICRkYXRhLT5zZWVkdHlwZSwKCSdmaXh0eXBlJyA9PiAkZGF0YS0+Zml4dHlwZSwKCSd0ZWFtc2l6ZScgPT4gJGRhdGEtPnRlYW1zaXplLAoJJ2F0Zm9ybWF0JyA9PiAkZGF0YS0+YXRmb3JtYXQsCgknZmluYWwnID0+ICRkYXRhLT5maW5hbCwKCSdzZW1pJyA9PiAkZGF0YS0+c2VtaSwKCSdxdWFydGVyJyA9PiAkZGF0YS0+cXVhcnRlciwKCSdlaWdodGgnID0+ICRkYXRhLT5laWdodGgsCgkncm91bmRuYW1lJyA9PiAkZGF0YS0+cm91bmRuYW1lLAoJJ3ZlcnN1cycgPT4gJGRhdGEtPnZlcnN1cywKCSdkZWZlYXRlZCcgPT4gJGRhdGEtPmRlZmVhdGVkLAoJJ3RpZWQnID0+ICRkYXRhLT50aWVkLAoJJ2J5ZScgPT4gJGRhdGEtPmJ5ZSwKCSdmb3JmZWl0JyA9PiAkZGF0YS0+Zm9yZmVpdCwKCSdub21hdGNoJyA9PiAkZGF0YS0+bm9tYXRjaCwKCSd0aW1lem9uZScgPT4gJGRhdGEtPnRpbWV6b25lLAoJJ3BsYXlnYXAnID0+ICRkYXRhLT5wbGF5Z2FwLAoJJ3BsYXlnYXB0eXBlJyA9PiAkZGF0YS0+cGxheWdhcHR5cGUsCgknYXZhaWxhYmxlJyA9PiAkZGF0YS0+YXZhaWxhYmxlLCAKCSdwbGFjZWdhcCcgPT4gJGRhdGEtPnBsYWNlZ2FwLAoJJ3BsYWNlZ2FwdHlwZScgPT4gJGRhdGEtPnBsYWNlZ2FwdHlwZSk7CgkkZmllbGRzID0gaW1wbG9kZSgnLCcsYXJyYXlfa2V5cygkYXJncykpOwoJJGZpbGxlcnMgPSBzdHJfcmVwZWF0KCc/LCcsY291bnQoJGFyZ3MpLTEpLic/JzsKCSRzcWwgPSAnSU5TRVJUIElOVE8gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV90bXRfYnJhY2tldHMgKCcuJGZpZWxkcy4nKSBWQUxVRVMgKCcuJGZpbGxlcnMuJyk7JzsKCSRkYi0+RXhlY3V0ZSgkc3FsLGFycmF5X3ZhbHVlcygkYXJncykpOwoJaWYgKCRkYXRhLT5tb3RlbXBsYXRlKQoJCSR0aGlzLT5TZXRUZW1wbGF0ZSgnbWFpbG91dF8nLiRkYXRhLT5icmFja2V0X2lkLidfdGVtcGxhdGUnLCRkYXRhLT5tb3RlbXBsYXRlKTsKCWlmKCRkYXRhLT5tY2FuY3RlbXBsYXRlKQoJCSR0aGlzLT5TZXRUZW1wbGF0ZSgnbWFpbGNhbmNlbF8nLiRkYXRhLT5icmFja2V0X2lkLidfdGVtcGxhdGUnLCRkYXRhLT5tY2FuY3RlbXBsYXRlKTsKCWlmKCRkYXRhLT5tcmVxdGVtcGxhdGUpCgkJJHRoaXMtPlNldFRlbXBsYXRlKCdtYWlscmVxdWVzdF8nLiRkYXRhLT5icmFja2V0X2lkLidfdGVtcGxhdGUnLCRkYXRhLT5tcmVxdGVtcGxhdGUpOwoJaWYgKCRkYXRhLT5taXRlbXBsYXRlKQoJCSR0aGlzLT5TZXRUZW1wbGF0ZSgnbWFpbGluXycuJGRhdGEtPmJyYWNrZXRfaWQuJ190ZW1wbGF0ZScsJGRhdGEtPm1pdGVtcGxhdGUpOwoJaWYgKCRkYXRhLT50b3RlbXBsYXRlKQoJCSR0aGlzLT5TZXRUZW1wbGF0ZSgndHdlZXRvdXRfJy4kZGF0YS0+YnJhY2tldF9pZC4nX3RlbXBsYXRlJywkZGF0YS0+dG90ZW1wbGF0ZSk7CglpZigkZGF0YS0+dGNhbmN0ZW1wbGF0ZSkKCQkkdGhpcy0+U2V0VGVtcGxhdGUoJ3R3ZWV0Y2FuY2VsXycuJGRhdGEtPmJyYWNrZXRfaWQuJ190ZW1wbGF0ZScsJGRhdGEtPnRjYW5jdGVtcGxhdGUpOwoJaWYoJGRhdGEtPnRyZXF0ZW1wbGF0ZSkKCQkkdGhpcy0+U2V0VGVtcGxhdGUoJ3R3ZWV0cmVxdWVzdF8nLiRkYXRhLT5icmFja2V0X2lkLidfdGVtcGxhdGUnLCRkYXRhLT50cmVxdGVtcGxhdGUpOwoJaWYgKCRkYXRhLT50aXRlbXBsYXRlKQoJCSR0aGlzLT5TZXRUZW1wbGF0ZSgndHdlZXRpbl8nLiRkYXRhLT5icmFja2V0X2lkLidfdGVtcGxhdGUnLCRkYXRhLT50aXRlbXBsYXRlKTsKCWlmICgkZGF0YS0+Y2h0dGVtcGxhdGUpCgkJJHRoaXMtPlNldFRlbXBsYXRlKCdjaGFydF8nLiRkYXRhLT5icmFja2V0X2lkLidfdGVtcGxhdGUnLCRkYXRhLT5jaHR0ZW1wbGF0ZSk7Cn0KZWxzZQp7CgkkYmlkID0gKGludCkkcGFyYW1zWydicmFja2V0X2lkJ107Cglzd2l0Y2ggKCRwYXJhbXNbJ3JlYWxfYWN0aW9uJ10pCgl7CgkgY2FzZSAncmVzdWx0X3ZpZXcnOgoJIGNhc2UgJ21hdGNoX3ZpZXcnOgoJCWJyZWFrOwoJIGNhc2UgJ2Nvbm5lY3QnOgoJIAkvL3NlZSBhbHNvOiBhY3Rpb24udHd0YXV0aC5waHAgd2hpY2ggZG9lcyB0aGUgc2FtZSBzb3J0cyBvZiB0aGluZ3MKCQkkdHd0ID0gbmV3IHRtdFR3ZWV0KCk7CgkJbGlzdCgka2V5LCRzZWNyZXQpID0gJHR3dC0+TW9kdWxlQXBwVG9rZW5zKCk7CgkJdHJ5CgkJewoJCQkkY29ubiA9IG5ldyBUd2l0dGVyQ3JlZGVudGlhbCgka2V5LCRzZWNyZXQpOwoJCQkkYmFja3RvID0gJ2FkZGVkaXRfY29tcCc7IC8vY29tZSBiYWNrIGRpcmVjdGx5IHRvIGhlcmUKCQkJLy9wYXJhbWV0ZXJzIG5lZWRlZCB1cG9uIHJldHVybgoJCQkka2VlcHMgPSBhcnJheSgncmVhbF9hY3Rpb24nPT4nZnJvbXR3dCcsJ2JyYWNrZXRfaWQnPT4kYmlkLCdhY3RpdmVfdGFiJz0+JHRhYik7CgkJCSR1cmwgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsJGJhY2t0byxOVUxMLE5VTEwsJGtlZXBzLE5VTEwsVFJVRSk7CgkJCS8vY2xlYW51cCBXb3VsZCBiZSBuaWNlIHRvIGFsc28gZm9yY2UgaHR0cHM6IGZvciByZXR1cm4tY29tbXVuaWNhdGlvbgoJCQkvLyBCVVQgdGhhdCBmcmVha3MgdGhlIGJyb3dzZXIgZmlyc3QgdGltZSwgYW5kIHN0dWZmcyB1cAoJCQkvLyBvbi1wYWdlLWluY2x1ZGUtVVJMUywgcmVxdWlyaW5nIGEgbG9jYWwgcmVkaXJlY3QgdG8gZml4CgkJCSRjYWxsYmFjayA9IHN0cl9yZXBsYWNlKCdhbXA7JywnJywkdXJsKTsKCQkJJG5hbWUgPSAoJHBhcmFtc1sndG10X3R3dGZyb20nXSkgPyBzdWJzdHIoJHBhcmFtc1sndG10X3R3dGZyb20nXSwxKSA6IEZBTFNFOwoJCQkkbWVzc2FnZSA9ICRjb25uLT5nb2dldFRva2VuKCRjYWxsYmFjaywkbmFtZSk7IC8vc2hvdWxkIHJlZGlyZWN0IHRvIGdldCB0b2tlbgoJCQkvL2lmIHdlJ3JlIHN0aWxsIGhlcmUsIGFuIGVycm9yIG9jY3VycmVkCgkJfQoJCWNhdGNoIChUd2l0dGVyRXhjZXB0aW9uICRlKQoJCXsKCQkJJG1lc3NhZ2UgPSAkZS0+Z2V0TWVzc2FnZSgpOwoJCX0KCQlpZighZW1wdHkoJG1lc3NhZ2UpKQoJCQkkbWVzc2FnZSA9ICR0aGlzLT5QcmV0dHlNZXNzYWdlKCRtZXNzYWdlLEZBTFNFLEZBTFNFLEZBTFNFKTsKCQkkcGFyYW1zWydyZWFsX2FjdGlvbiddID0gJ2VkaXQnOwoJIAlicmVhazsKCSBjYXNlICdmcm9tdHd0JzoKCQlpZihpc3NldCgkX1JFUVVFU1RbJ29hdXRoX3ZlcmlmaWVyJ10pKSAvL2F1dGhvcmlzYXRpb24gZG9uZQoJCXsKCQkJJHR3dCA9IG5ldyB0bXRUd2VldCgpOwoJCQlsaXN0KCRrZXksJHNlY3JldCkgPSAkdHd0LT5Nb2R1bGVBcHBUb2tlbnMoKTsKCQkJdHJ5CgkJCXsKCQkJCSRjb25uID0gbmV3IFR3aXR0ZXJDcmVkZW50aWFsKCRrZXksJHNlY3JldCwkX1JFUVVFU1RbJ29hdXRoX3Rva2VuJ10sTlVMTCk7CgkJCQkvL3NlZWsgZW5kdXJpbmcgY3JlZGVudGlhbHMKCQkJCSR0b2tlbiA9ICRjb25uLT5nZXRBdXRob3JpdHkoJF9SRVFVRVNUWydvYXV0aF92ZXJpZmllciddKTsKCQkJCWlmKGlzX2FycmF5KCR0b2tlbikpCgkJCQl7CgkJCQkJaWYoISR0d3QtPlNhdmVUb2tlbnMoJHRva2VuWydvYXV0aF90b2tlbiddLAoJCQkJCQkkdG9rZW5bJ29hdXRoX3Rva2VuX3NlY3JldCddLCR0b2tlblsnc2NyZWVuX25hbWUnXSwkYmlkKSkKCQkJCQkJCSRtZXNzYWdlID0gJHRoaXMtPkxhbmcoJ2Vycl9kYXRhX3R5cGUnLCR0aGlzLT5MYW5nKCdlcnJfdG9rZW4nKSk7CgkJCQl9CgkJCQllbHNlCgkJCQkJJG1lc3NhZ2UgPSAkdG9rZW47CgkJCX0KCQkJY2F0Y2ggKFR3aXR0ZXJFeGNlcHRpb24gJGUpCgkJCXsKCQkJCSRtZXNzYWdlID0gJGUtPmdldE1lc3NhZ2UoKTsKCQkJfQoJCQlpZighZW1wdHkoJG1lc3NhZ2UpKQoJCQkJJG1lc3NhZ2UgPSAkdGhpcy0+UHJldHR5TWVzc2FnZSgkbWVzc2FnZSxGQUxTRSxGQUxTRSxGQUxTRSk7CgkJfQovKgkJZWxzZQoJCXsKCQkJJHByZWYgPSBjbXNfZGJfcHJlZml4KCk7CgkJCSRzcWwgPSAnREVMRVRFIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF90d2VldCBXSEVSRSBicmFja2V0X2lkPT8nOwoJCQkkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkYmlkKSk7CgkJCSRtZXNzYWdlID0gJHRoaXMtTGFuZygnVE9ETycpOwoJCX0KKi8KCQkkcGFyYW1zWydyZWFsX2FjdGlvbiddID0gJ2VkaXQnOwoJCWJyZWFrOwoJIGNhc2UgJ21vdmVkb3duJzoKCSBjYXNlICdtb3ZldXAnOgoJCSRwcmVmID0gY21zX2RiX3ByZWZpeCgpOwoJCSRzcWwgPSAnU0VMRUNUIGRpc3BsYXlvcmRlciBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfdGVhbXMgV0hFUkUgYnJhY2tldF9pZD0/IEFORCB0ZWFtX2lkPT8nOwoJCSRmcm9tID0gJGRiLT5HZXRPbmUoJHNxbCxhcnJheSgkYmlkLCRtb3ZldGlkKSk7CgkJaWYoJGZyb20pCgkJewoJCQkkdG8gPSAoJHBhcmFtc1sncmVhbF9hY3Rpb24nXT09J21vdmV1cCcpID8gJGZyb20tMSA6ICRmcm9tKzE7CgkJCWlmKCR0byA+IDApCgkJCXsKCQkJCSRzcWwgPSAnVVBEQVRFICcuJHByZWYuJ21vZHVsZV90bXRfdGVhbXMgU0VUIGRpc3BsYXlvcmRlcj0nLiRmcm9tLicgV0hFUkUgYnJhY2tldF9pZD0/IEFORCBkaXNwbGF5b3JkZXI9Jy4kdG87CgkJCQkkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkYmlkKSk7CgkJCQkkc3FsID0gJ1VQREFURSAnLiRwcmVmLidtb2R1bGVfdG10X3RlYW1zIFNFVCBkaXNwbGF5b3JkZXI9Jy4kdG8uJyBXSEVSRSBicmFja2V0X2lkPT8gQU5EIHRlYW1faWQ9Pyc7CgkJCQkkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkYmlkLChpbnQpJG1vdmV0aWQpKTsKCQkJfQoJCX0KCQkkcGFyYW1zWydyZWFsX2FjdGlvbiddID0gJ2VkaXQnOwoJCWJyZWFrOwoJIGRlZmF1bHQ6CgkJLy9yZWZyZXNoIG1hdGNoZXMgaWYgYXBwcm9wcmlhdGUKCQkkcHJlZiA9IGNtc19kYl9wcmVmaXgoKTsKCQkkc3FsID0gJ1NFTEVDVCBDT1VOVChtYXRjaF9pZCkgQVMgbnVtIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzIFdIRVJFIGJyYWNrZXRfaWQ9PyBBTkQgZmxhZ3M9MCc7CgkJaWYgKCRkYi0+R2V0T25lKCRzcWwsYXJyYXkoJGJpZCkpKQoJCXsKCQkJJHNjaCA9IG5ldyB0bXRTY2hlZHVsZSgpOwoJCQkkc3FsID0gJ1NFTEVDVCB0eXBlIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9icmFja2V0cyBXSEVSRSBicmFja2V0X2lkPT8nOwoJCQkkdHlwZSA9ICRkYi0+R2V0T25lKCRzcWwsYXJyYXkoJGJpZCkpOwoJCQlzd2l0Y2ggKCR0eXBlKQoJCQl7CgkJCSBjYXNlIFRvdXJuZXk6OkRFVFlQRToKCQkJCSRzY2gtPlVwZGF0ZURFTWF0Y2hlcygkdGhpcywkYmlkKTsKCQkJCWJyZWFrOwoJCQkgY2FzZSBUb3VybmV5OjpSUlRZUEU6CgkJCQkkc2NoLT5OZXh0UlJNYXRjaGVzKCR0aGlzLCRiaWQpOwoJCQkJYnJlYWs7CgkJCSBkZWZhdWx0OgoJCQkgLy9jYXNlIFRvdXJuZXk6OktPVFlQRToKCQkJCSRzY2gtPlVwZGF0ZUtPTWF0Y2hlcygkdGhpcywkYmlkKTsKCQkJCWJyZWFrOwoJCQl9CgkJCXVuc2V0KCRzY2gpOwoJCX0KCX0KCgkkZnVuY3MgPSBuZXcgdG10RGF0YSgpOwoJJGRhdGEgPSAkZnVuY3MtPkdldEJyYWNrZXREYXRhKCR0aGlzLCRwYXJhbXNbJ3JlYWxfYWN0aW9uJ10sJGlkLCRiaWQsJHBhcmFtcyk7Cgl1bnNldCgkZnVuY3MpOwoJaWYgKGlzc2V0ICgkcGFyYW1zWyd0bXRfbWVzc2FnZSddKSkKCQkkbWVzc2FnZSA9ICRwYXJhbXNbJ3RtdF9tZXNzYWdlJ107Cn0KCmlmICgkZGF0YSkKewoJaWYgKCRwYXJhbXNbJ3JlYWxfYWN0aW9uJ10gPT0gJ3ZpZXcnKQoJCSRkYXRhLT5yZWFkb25seSA9IDE7CgkkZnVuY3MgPSBuZXcgdG10RWRpdFNldHVwKCk7CgkkZnVuY3MtPlNldHVwKCR0aGlzLCRzbWFydHksJGRhdGEsJGlkLCRyZXR1cm5pZCwkdGFiLCRtZXNzYWdlKTsKCXVuc2V0KCRmdW5jcyk7Cgl1bnNldCgkZGF0YSk7CgllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkZGVkaXRfY29tcC50cGwnKTsKfQplbHNlCnsKCWlmICghZW1wdHkoJG1lc3NhZ2UpKQoJCSRtZXNzYWdlIC49ICc8YnIgLz4vPGJyIC8+Jy4kdGhpcy0+TGFuZygnZXJyX21pc3NpbmcnKTsKCWVsc2UKCQkkbWVzc2FnZSA9ICR0aGlzLT5QcmV0dHlNZXNzYWdlKCdlcnJfbWlzc2luZycsRkFMU0UpOwoJJHRoaXMtPlJlZGlyZWN0KCRpZCwnZGVmYXVsdGFkbWluJywnJyxhcnJheSgndG10X21lc3NhZ2UnPT4kbWVzc2FnZSkpOwp9Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/action.addedit_team.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKKi8KaWYoIWZ1bmN0aW9uX2V4aXN0cygnT3JkZXJUZWFtTWVtYmVycycpKQp7CiBmdW5jdGlvbiBPcmRlclRlYW1NZW1iZXJzKCYkZGIsJHRpZCkKIHsKCSRwcmVmID0gY21zX2RiX3ByZWZpeCgpOwoJJHNxbCA9ICdTRUxFQ1QgKiBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfcGVvcGxlIFdIRVJFIGlkPT8gQU5EIGZsYWdzIT0yIE9SREVSIEJZIGRpc3BsYXlvcmRlcic7Cgkkcm93cyA9ICRkYi0+R2V0QWxsKCRzcWwsYXJyYXkoJHRpZCkpOwoJaWYoJHJvd3MpCgl7CgkJLy90byBhdm9pZCBvdmVyd3JpdGVzLGluIHRoZSBmaXJzdCBwYXNzIHN0b3JlZCBvcmRlcnMgYXJlIDwgMCwtMS1iYXNlZAoJCSR0bXBvcmRlciA9IC0xOwoJCSRzcWwgPSAnVVBEQVRFICcuJHByZWYuJ21vZHVsZV90bXRfcGVvcGxlIFNFVCBkaXNwbGF5b3JkZXI9PyBXSEVSRSBpZD0/IEFORCBkaXNwbGF5b3JkZXI9Pyc7CgkJZm9yZWFjaCgkcm93cyBhcyAmJHJvdykKCQl7CgkJCSRkYi0+RXhlY3V0ZSgkc3FsLGFycmF5KCR0bXBvcmRlciwkdGlkLCRyb3dbJ2Rpc3BsYXlvcmRlciddKSk7CgkJCSRyb3dbJ2Rpc3BsYXlvcmRlciddID0gLSR0bXBvcmRlcjsKCQkJJHRtcG9yZGVyLS07CgkJCSRyb3dbJ2lkJ10gPSAoaW50KSRyb3dbJ2lkJ107IC8vY2xlYW51cHMKCQkJJHJvd1snZmxhZ3MnXSA9IChpbnQpJHJvd1snZmxhZ3MnXTsKCQl9CgkJdW5zZXQoJHJvdyk7CgkJJHNxbCA9ICdVUERBVEUgJy4kcHJlZi4nbW9kdWxlX3RtdF9wZW9wbGUgU0VUIGRpc3BsYXlvcmRlcj0tZGlzcGxheW9yZGVyIFdIRVJFIGlkPT8nOwoJCSRkYi0+RXhlY3V0ZSgkc3FsLGFycmF5KCR0aWQpKTsKCX0KCXJldHVybiAkcm93czsKIH0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnT3JkZXJUZWFtRGF0YScpKQp7CiBmdW5jdGlvbiBPcmRlclRlYW1EYXRhKCYkZGIsJHRoaXN0aWQsJGJlZm9yZSwkYWZ0ZXIsJiRwYXJhbXMpCiB7Cgkkcm93cyA9IE9yZGVyVGVhbU1lbWJlcnMoJGRiLCR0aGlzdGlkKTsKCSRpbmR4ID0gMDsKCWZvcmVhY2goJHBhcmFtc1sncGxyX29yZGVyJ10gYXMgJGs9PiRvbGRvcmRlcikKCXsKCQlpZigkb2xkb3JkZXIgPT0gJGJlZm9yZSkKCQkJJGsgPSAkYWZ0ZXItMTsKCQllbHNlaWYoJG9sZG9yZGVyID09ICRhZnRlcikKCQkJJGsgPSAkYmVmb3JlLTE7CgkJJHJvd3NbJGluZHhdWyduYW1lJ109JHBhcmFtc1sncGxyX25hbWUnXVska107CgkJJHJvd3NbJGluZHhdWydjb250YWN0J109JHBhcmFtc1sncGxyX2NvbnRhY3QnXVska107CgkJJGluZHgrKzsKCX0KCXJldHVybiAkcm93czsKIH0KfQoKLyoKQXJyaXZlIGhlcmUgZm9sbG93aW5nIGNvbXBldGl0b3JzLXRhYiBhZGQgb3IgZWRpdCBjbGljayxvciBvbmUgb2YgdGhlIGFjdGlvbnMKaW5pdGlhdGVkIGZyb20gdGhlIHBhZ2Ugc2V0dXAgYW5kIGRpc3BsYXllZCBoZXJlLgpEZXRlcm1pbmUgd2hhdCB0byBkbyxzZXQgbW9kZS1lbnVtZXJhdG9yICRvcCBhY2NvcmRpbmdseQpOT1RFOiBzb21lIHRlYW0gcGFyYW1ldGVycyBjYW4gYmUgZWRpdGVkIGlubGluZSxhZnRlciB3aGljaCB0aGUgdXBkYXRlIGJ0biB3b3VsZCBiZSBjbGlja2VkClNlZSBhY3Rpb246IHNhdmVfY29tcAoqLwppZighJHRoaXMtPkNoZWNrQWNjZXNzKCdhZG1vZCcpKQp7CgkkbmV3cGFybXMgPSAkdGhpcy0+R2V0RWRpdFBhcm1zKCRwYXJhbXMsJ3BsYXllcnN0YWInKTsKCWlmKCFpc3NldCgkcGFyYW1zWydjYW5jZWwnXSkpCgkJJG5ld3Bhcm1zWyd0bXRfbWVzc2FnZSddID0gJHRoaXMtPlByZXR0eU1lc3NhZ2UoJ2xhY2twZXJtaXNzaW9uJyxGQUxTRSk7CgkkdGhpcy0+UmVkaXJlY3QoJGlkLCdhZGRlZGl0X2NvbXAnLCRyZXR1cm5pZCwkbmV3cGFybXMpOwp9CgokcHJlZiA9IGNtc19kYl9wcmVmaXgoKTsKCmlmKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSkKewogCWlmKCFlbXB0eSgkcGFyYW1zWyduZXd0ZWFtX2lkJ10pKQoJIAkkdGlkID0gKGludCkkcGFyYW1zWyduZXd0ZWFtX2lkJ107CgllbHNlCgkgCSR0aWQgPSAoaW50KSRwYXJhbXNbJ3RlYW1faWQnXTsKCSR0ZWFtZmxhZ3MgPSAwOwoJJHNhdmVyID0gMTsKIAkkc3FsID0gJ1VQREFURSAnLiRwcmVmLidtb2R1bGVfdG10X3Blb3BsZSBTRVQgbmFtZT0/LGNvbnRhY3Q9PyxkaXNwbGF5b3JkZXI9PyxmbGFncz0/IFdIRVJFIGlkPT8gQU5EIGRpc3BsYXlvcmRlcj0/IEFORCBmbGFncyE9Mic7Cglmb3JlYWNoKCRwYXJhbXNbJ3Bscl9vcmRlciddIGFzICRpbmR4PT4kb3JkZXIpCgl7CgkJJG5hbWUgPSAkcGFyYW1zWydwbHJfbmFtZSddWyRpbmR4XSA/IHRyaW0oJHBhcmFtc1sncGxyX25hbWUnXVskaW5keF0pOk5VTEw7CgkJJGNvbnRhY3QgPSAkcGFyYW1zWydwbHJfY29udGFjdCddWyRpbmR4XSA/IHRyaW0oJHBhcmFtc1sncGxyX2NvbnRhY3QnXVskaW5keF0pOk5VTEw7CgkJJGZsYWdzID0gKGludCkkcGFyYW1zWydwbHJfZmxhZ3MnXVskaW5keF07CgkJaWYoJGZsYWdzKQoJCQkkdGVhbWZsYWdzID0gMzsgLy9hbnkgbm9uLTAgbWVtYmVyLWZsYWcgc2lnbmFscyB0ZWFtIGhhcyBiZWVuIGFsdGVyZWQKCQkvLzFzdCBzZXQgbmV3IG9yZGVycyA8IDAgdG8gcHJldmVudCBvdmVyd3JpdGVzCgkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJG5hbWUsJGNvbnRhY3QsLSRzYXZlciwkZmxhZ3MsJHRpZCwkcGFyYW1zWydwbHJfb3JkZXInXVskaW5keF0pKTsKCQkkc2F2ZXIrKzsKCX0KCS8vbm93IHdlIGNhbiBzZXQgcmVhbCBvcmRlcnMKIAkkc3FsID0gJ1VQREFURSAnLiRwcmVmLidtb2R1bGVfdG10X3Blb3BsZSBTRVQgZGlzcGxheW9yZGVyPS1kaXNwbGF5b3JkZXIgV0hFUkUgaWQ9PyBBTkQgZGlzcGxheW9yZGVyPDAnOwoJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJHRpZCkpOwoJJG5hbWUgPSAhZW1wdHkoJHBhcmFtc1sndGVtX25hbWUnXSk/dHJpbSgkcGFyYW1zWyd0ZW1fbmFtZSddKTpOVUxMOwoJJHNlZWQgPSAoJHBhcmFtc1sndGVtX3NlZWQnXSk/KGludCkkcGFyYW1zWyd0ZW1fc2VlZCddOk5VTEw7CgkkdGVsbCA9ICRwYXJhbXNbJ3RlbV90ZWxsYWxsJ10/MTowOwoJJG9yZGVyID0gJHBhcmFtc1sndGVtX29yZGVyJ10/KGludCkkcGFyYW1zWyd0ZW1fb3JkZXInXToxMDAwOyAvL2JsYW5rIGdvZXMgbGFzdAogCWlmKCFlbXB0eSgkcGFyYW1zWyduZXd0ZWFtX2lkJ10pKQoJCSR0ZWFtZmxhZ3MgPSAxOyAvL2ZvcmNlIG5ldy10ZWFtIGZsYWcsIG90aGVyd2lzZSB3aGF0ZXZlciBmcm9tIG1lbWJlcnMtc2F2aW5nCiAJJHNxbCA9ICdVUERBVEUgJy4kcHJlZi4nbW9kdWxlX3RtdF90ZWFtcyBTRVQgbmFtZT0/LHNlZWRpbmc9Pyxjb250YWN0YWxsPT8sZGlzcGxheW9yZGVyPT8sZmxhZ3M9PyBXSEVSRSB0ZWFtX2lkPT8nOwoJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJG5hbWUsJHNlZWQsJHRlbGwsJG9yZGVyLCR0ZWFtZmxhZ3MsJHRpZCkpOwoJaWYoJHRlYW1mbGFncyA9PSAxKQoJewoJCSRzcWwgPSAnU0VMRUNUIHRlYW1faWQgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X3RlYW1zIFdIRVJFIGJyYWNrZXRfaWQ9PyBBTkQgZmxhZ3MhPTIgT1JERVIgQlkgZGlzcGxheW9yZGVyJzsKCQkkdGVhbXMgPSAkZGItPkdldENvbCgkc3FsLGFycmF5KCRwYXJhbXNbJ2JyYWNrZXRfaWQnXSkpOwoJCSRvcmRlciA9IDE7CgkJJHNxbCA9ICdVUERBVEUgJy4kcHJlZi4nbW9kdWxlX3RtdF90ZWFtcyBTRVQgZGlzcGxheW9yZGVyPT8gV0hFUkUgdGVhbV9pZD0/JzsKCQlmb3JlYWNoKCR0ZWFtcyBhcyAkdGlkKQoJCXsKCQkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJG9yZGVyLCR0aWQpKTsKCQkJJG9yZGVyKys7CgkJfQoJfQoJJHRoaXMtPlJlZGlyZWN0KCRpZCwnYWRkZWRpdF9jb21wJywkcmV0dXJuaWQsJHRoaXMtPkdldEVkaXRQYXJtcygkcGFyYW1zLCdwbGF5ZXJzdGFiJykpOwp9CmVsc2VpZihpc3NldCgkcGFyYW1zWydjYW5jZWwnXSkpCnsKCWlmKCFlbXB0eSgkcGFyYW1zWyduZXd0ZWFtX2lkJ10pKQoJewoJCSR0aWQgPSAkcGFyYW1zWyduZXd0ZWFtX2lkJ107CgkJJHNxbCA9ICdERUxFVEUgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X3RlYW1zIFdIRVJFIHRlYW1faWQ9Pyc7CgkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJHRpZCkpOwoJCSRzcWwgPSAnREVMRVRFIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9wZW9wbGUgV0hFUkUgaWQ9Pyc7CgkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJHRpZCkpOwoJfQoJZWxzZSAvL2VkaXRpbmcgYW4gZXhpc3RpbmcgdGVhbQoJewoJCSR0aWQgPSAkcGFyYW1zWyd0ZWFtX2lkJ107CgkJLy9UT0RPIHN1cHBvcnQgY29udGVudCByZXZlcnNpb24gd2hlcmUgZmxhZ3MgPSAzCgkJJHNxbCA9ICdVUERBVEUgJy4kcHJlZi4nbW9kdWxlX3RtdF9wZW9wbGUgU0VUIGZsYWdzID0gMCBXSEVSRSBpZD0/IEFORCBmbGFncyBJTiAoMiwzKSc7CgkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJHRpZCkpOwoJfQoJJHRoaXMtPlJlZGlyZWN0KCRpZCwnYWRkZWRpdF9jb21wJywkcmV0dXJuaWQsJHRoaXMtPkdldEVkaXRQYXJtcygkcGFyYW1zLCdwbGF5ZXJzdGFiJykpOwp9CgovL3NpbXBsZSBjYXNlcwokb3AgPSBGQUxTRTsKZm9yZWFjaChhcnJheSgKIDEgPT4gJ2FkZCcsLy9jb21wIGFkZC1idXR0b24gY2xpY2tlZAogMyA9PiAnYWRkcGxheWVyJywvL3RlYW0gYWRkLWJ1dHRvbiBjbGlja2VkCiA1ID0+ICdtb3ZlZG93bicsLy9pbmMgcGxheWVyIGRpc3BsYXlvcmRlcgogNiA9PiAnbW92ZXVwJywvL2RlYyBwbGF5ZXIgZGlzcGxheW9yZGVyCikgYXMgJGkgPT4gJG5hbWUpCnsKCWlmKGlzc2V0KCRwYXJhbXNbJG5hbWVdKSkKCXsKCQkkb3AgPSAkaTsKLy8JCXVuc2V0KCRwYXJhbXNbJG5hbWVdKTsgbmVlZGVkIGZvciBtb3ZldXAvZG93biwgYXQgbGVhc3QKCQlicmVhazsKCX0KfQoKaWYoISRvcCkgLy9zcGVjaWFsIGNhc2VzCnsKCWlmKGlzc2V0KCRwYXJhbXNbJ2VkaXQnXSkpIC8vbmV3IHNlc3Npb246IGNvbXAgZWRpdCBidXR0b24gY2xpY2tlZAoJewoJCXJlc2V0KCRwYXJhbXNbJ2VkaXQnXSk7CgkJJHBhcmFtc1sndGVhbV9pZCddID0ga2V5KCRwYXJhbXNbJ2VkaXQnXSk7CgkJdW5zZXQoJHBhcmFtc1snZWRpdCddKTsKCQkkb3AgPSAyOwoJfQoJZWxzZWlmKGlzc2V0KCRwYXJhbXNbJ2RlbGV0ZSddKSkKCXsKCQlpZihpc19hcnJheSgkcGFyYW1zWydkZWxldGUnXSkpIC8vcm93LXNwZWNpZmljIGRlbGV0ZSBidXR0b24gY2xpY2tlZAoJCQkkb3AgPSA0OwoJCWVsc2UKCQkJJG9wID0gKCFlbXB0eSgkcGFyYW1zWydwc2VsJ10pKSA/IDExIDogOTk7IC8vZGVsZXRlIHNlbGVjdGVkKGlmIGFueSkKCX0KCWVsc2VpZihpc3NldCgkcGFyYW1zWydleHBvcnQnXSkpCgl7CgkJdW5zZXQoJHBhcmFtc1snZXhwb3J0J10pOwoJCSRvcCA9ICghZW1wdHkoJHBhcmFtc1sncHNlbCddKSkgPyAxMiA6IDk5OyAvL2V4cG9ydCBzZWxlY3RlZAoJfQoJZWxzZQoJewoJCS8vZGVmYXVsdCB0byBlZGl0IGlmIHBvc3NpYmxlIG9yIGVsc2UgYWRkCgkJaWYoIWVtcHR5KCRwYXJhbXNbJ3RlYW1faWQnXSkpCgkJewoJCQkkc3FsID0gJ1NFTEVDVCB0ZWFtX2lkIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF90ZWFtcyBXSEVSRSB0ZWFtX2lkPT8nOwoJCQkkaW5keCA9ICRkYi0+R2V0T25lKCRzcWwsYXJyYXkoJHBhcmFtc1sndGVhbV9pZCddKSk7CgkJCSRvcCA9ICgkaW5keCkgPyAyIDogMTsKCQl9CgkJZWxzZQoJCQkkb3AgPSAxOwoJfQp9CgppZigkb3AgPT0gOTkpCgkkdGhpcy0+UmVkaXJlY3QoJGlkLCdhZGRlZGl0X2NvbXAnLCRyZXR1cm5pZCwkdGhpcy0+R2V0RWRpdFBhcm1zKCRwYXJhbXMsJ3BsYXllcnN0YWInKSk7CmlmKCRvcCA9PSAxKQp7CgkkbmV3dGlkID0gJGRiLT5HZW5JRCgkcHJlZi4nbW9kdWxlX3RtdF90ZWFtc19zZXEnKTsKCSRwYXJhbXNbJ25ld3RlYW1faWQnXSA9ICRuZXd0aWQ7Ci8vQ0hFQ0tNRSB1bnNldCgkcGFyYW1zWydhZGQnXSk7Cn0KCiRicmFja2V0X2lkID0gKGludCkkcGFyYW1zWydicmFja2V0X2lkJ107CiRuYW1lID0gRkFMU0U7CiR0ZWFtdGl0bGUgPSBGQUxTRTsKJGlzdGVhbSA9IFRSVUU7CiRwcmVmID0gY21zX2RiX3ByZWZpeCgpOwokc3FsID0gJ1NFTEVDVCBuYW1lLHRlYW1zaXplIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9icmFja2V0cyBXSEVSRSBicmFja2V0X2lkPT8nOwokYmRhdGEgPSAkZGItPkdldFJvdygkc3FsLGFycmF5KCRicmFja2V0X2lkKSk7CmlmKCRiZGF0YSkKewoJaWYoJGJkYXRhWyduYW1lJ10pICRuYW1lID0gJGJkYXRhWyduYW1lJ107CglpZigkYmRhdGFbJ3RlYW1zaXplJ10gPT0gMSkKCXsKCQkkdGVhbXRpdGxlID0gJHRoaXMtPkxhbmcoJ3RpdGxlX3BsYXllcicpOwoJCSRpc3RlYW0gPSBGQUxTRTsKCX0KfQoKaWYoJG5hbWUgPT0gRkFMU0UpCgkkbmFtZSA9ICR0aGlzLT5MYW5nKCd0b3VybmFtZW50Jyk7CmlmKCR0ZWFtdGl0bGUgPT0gRkFMU0UpCgkkdGVhbXRpdGxlID0gJHRoaXMtPkxhbmcoJ3RpdGxlX3RlYW0nKTsKCiRwbW9kID0gJHRoaXMtPkNoZWNrQWNjZXNzKCdhZG1vZCcpOwokc21hcnR5LT5hc3NpZ24oJ2Nhbm1vZCcsKCRwbW9kKT8xOjApOwoKJHNtYXJ0eS0+YXNzaWduKCdmb3JtX3N0YXJ0JywkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwnYWRkZWRpdF90ZWFtJywkcmV0dXJuaWQpKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3JtX2VuZCcsJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7Ci8vYWNjdW11bGF0b3IgZm9yIGhpZGRlbiBzdHVmZgokaGlkZGVuID0gJHRoaXMtPkdldEhpZGRlblBhcm1zKCRpZCwkcGFyYW1zLCdwbGF5ZXJzdGFiJyk7CgppZighZW1wdHkoJHBhcmFtc1snbmV3dGVhbV9pZCddKSkKewoJJHRoaXN0aWQgPSAkcGFyYW1zWyduZXd0ZWFtX2lkJ107CgkkaGlkZGVuIC49ICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ25ld3RlYW1faWQnLCR0aGlzdGlkKTsKCSRzbWFydHktPmFzc2lnbigncGFnZXRpdGxlJyxzdHJ0b3VwcGVyKCR0aGlzLT5MYW5nKCd0aXRsZV9hZGRfbG9uZycsJHRlYW10aXRsZSwkbmFtZSkpKTsKfQplbHNlCnsKCSR0aGlzdGlkID0gJHBhcmFtc1sndGVhbV9pZCddOwoJJGhpZGRlbiAuPSAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCd0ZWFtX2lkJywkdGhpc3RpZCk7Cgkkc21hcnR5LT5hc3NpZ24oJ3BhZ2V0aXRsZScsc3RydG91cHBlcigkdGhpcy0+TGFuZygndGl0bGVfZWRpdF9sb25nJywkdGVhbXRpdGxlLCRuYW1lKSkpOwp9CgppZigkb3AgPT0gMSkgLy9uZXcgdGVhbQp7Cgkkc3FsID0gJ1NFTEVDVCBDT1VOVCgxKSBBUyBudW0gRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X3RlYW1zIFdIRVJFIGJyYWNrZXRfaWQ9PyBBTkQgZmxhZ3MgIT0gMic7CgkkbnVtID0gJGRiLT5HZXRPbmUoJHNxbCxhcnJheSgkYnJhY2tldF9pZCkpOyAvL3N0YXJ0IHRlYW0gbGFzdCBpbiBvcmRlcgoJJG51bSsrOwoJJHNxbCA9ICdJTlNFUlQgSU5UTyAnLiRwcmVmLiJtb2R1bGVfdG10X3RlYW1zIFZBTFVFUyAoPyw/LE5VTEwsTlVMTCwwLCRudW0sMSkiOy8vbmV3LXRlYW0gZmxhZwoJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJG5ld3RpZCwkYnJhY2tldF9pZCkpOwoJJG1haW4gPSBhcnJheSgKCSAndGVhbV9pZCc9PiRuZXd0aWQsCgkgJ2JyYWNrZXRfaWQnPT4kYnJhY2tldF9pZCwKCSAnbmFtZSc9PicnLAoJICdzZWVkaW5nJz0+JycsCgkgJ2NvbnRhY3RhbGwnPT4wLAoJICdkaXNwbGF5b3JkZXInPT4kbnVtLAoJICdmbGFncyc9PjEKCSk7Cn0KZWxzZQp7Cgkkc3FsID0gJ1NFTEVDVCAqIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF90ZWFtcyBXSEVSRSB0ZWFtX2lkPT8nOwoJJG1haW4gPSAkZGItPkdldFJvdygkc3FsLGFycmF5KCR0aGlzdGlkKSk7Cn0KCiRvcHRzID0gYXJyYXkoKTsKaWYoJGlzdGVhbSkKCSRvcHRzW10gPSBhcnJheSgKCQkkdGhpcy0+TGFuZygndGl0bGVfdGVhbW5hbWUnKSwKCQkoJHBtb2QpID8gJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ3RlbV9uYW1lJywkbWFpblsnbmFtZSddLDMwLDY0KSA6ICRtYWluWyduYW1lJ10sCgkJJHRoaXMtPkxhbmcoJ2hlbHBfdGVhbW5hbWUnKQoJKTsKJG9wdHNbXSA9IGFycmF5KAoJJHRoaXMtPkxhbmcoJ3RpdGxlX3NlZWQnKSwKCSgkcG1vZCkgPyAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwndGVtX3NlZWQnLCRtYWluWydzZWVkaW5nJ10sMiwyKSA6ICRtYWluWydzZWVkaW5nJ10sCgkkdGhpcy0+TGFuZygnaGVscF9zZWVkbnVtJykKKTsKJG9wdHNbXSA9IGFycmF5KAoJJHRoaXMtPkxhbmcoJ3RpdGxlX29yZGVybnVtJyksCgkoJHBtb2QpID8gJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ3RlbV9vcmRlcicsJG1haW5bJ2Rpc3BsYXlvcmRlciddLDMsMykgOiAkbWFpblsnZGlzcGxheW9yZGVyJ10sCgkkdGhpcy0+TGFuZygnaGVscF9vcmRlcicpCgkpOwppZigkaXN0ZWFtKQp7CglpZigkcG1vZCkKCQkkaSA9ICR0aGlzLT5DcmVhdGVJbnB1dFJhZGlvR3JvdXAoJGlkLCd0ZW1fdGVsbGFsbCcsCgkJCWFycmF5KCR0aGlzLT5MYW5nKCdvbmUnKT0+MCwkdGhpcy0+TGFuZygnYWxsJyk9PjEpLAoJCQkoaW50KSRtYWluWydjb250YWN0YWxsJ10sJycsJyAnKTsKCWVsc2VpZiAoJG1haW5bJ2NvbnRhY3RhbGwnXSA9PSAnMCcpCgkJJGkgPSAkdGhpcy0+TGFuZygnb25lJyk7CgllbHNlCgkJJGkgPSAkdGhpcy0+TGFuZygnYWxsJyk7Cgkkb3B0c1tdID0gYXJyYXkoCgkJJHRoaXMtPkxhbmcoJ3RpdGxlX3NlbmR0bycpLAoJCSRpLAoJCSR0aGlzLT5MYW5nKCdoZWxwX3NlbmR0bycpCgkpOwp9CmVsc2VpZigkcG1vZCkKCSRoaWRkZW4gLj0gJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwndGVtX3RlbGxhbGwnLDApOwoKJHNtYXJ0eS0+YXNzaWduKCdvcHRzJywkb3B0cyk7CiR0aGVtZSA9IGNtc21zKCktPmdldF92YXJpYWJsZSgnYWRtaW50aGVtZScpOwokaWNvbmluZm8gPSAkdGhlbWUtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2luZm8uZ2lmJywkdGhpcy0+TGFuZygnc2hvd2hlbHAnKSwnJywnJywnc3lzdGVtaWNvbiB0aXBwZXInKTsKJHNtYXJ0eS0+YXNzaWduKCdzaG93dGlwJywkaWNvbmluZm8pOwoKLy90YWJsZSBjb2x1bW4taGVhZGluZ3MKJHNtYXJ0eS0+YXNzaWduKCduYW1ldGV4dCcsJHRoaXMtPkxhbmcoJ3RpdGxlX3BsYXllcicpKTsKJHNtYXJ0eS0+YXNzaWduKCdjb250YWN0dGV4dCcsJHRoaXMtPkxhbmcoJ3RpdGxlX2NvbnRhY3QnKSk7CmlmKCRwbW9kKQoJJHNtYXJ0eS0+YXNzaWduKCdtb3ZldGV4dCcsJHRoaXMtPkxhbmcoJ3RpdGxlX21vdmUnKSk7Cgpzd2l0Y2goJG9wKQp7CiBjYXNlIDE6Ly9ubyBwbGF5ZXJzIHlldCBpbiBhIG5ld2x5LWFkZGVkIHRlYW0KCSRzcWwgPSAnSU5TRVJUIElOVE8gJy4kcHJlZi4nbW9kdWxlX3RtdF9wZW9wbGUgVkFMVUVTICg/LG51bGwsbnVsbCwxLDEpJzsvL25ldy1tZW1iZXIgZmxhZwoJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJG5ld3RpZCkpOwoJJHJvd3MgPSBhcnJheSgpOwoJJHJvd3NbXSA9IGFycmF5KAoJICdpZCc9PiRuZXd0aWQsCgkgJ25hbWUnPT4nJywKCSAnY29udGFjdCc9PicnLAoJICdkaXNwbGF5b3JkZXInPT4xLAoJICdmbGFncyc9PjEKCSk7CglicmVhazsKIGNhc2UgMjovL3N0YXJ0aW5nIGEgbmV3IGVkaXQtc2Vzc2lvbgoJJHNxbCA9ICdTRUxFQ1QgKiBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfcGVvcGxlIFdIRVJFIGlkPT8gQU5EIGZsYWdzIT0yIE9SREVSIEJZIGRpc3BsYXlvcmRlcic7Cgkkcm93cyA9ICRkYi0+R2V0QWxsKCRzcWwsYXJyYXkoJHRoaXN0aWQpKTsKCWlmKCRyb3dzID09IEZBTFNFKSAvL3Nob3VsZCBuZXZlciBoYXBwZW4KCXsKCQkkcm93cyA9IGFycmF5KCk7CgkJJHJvd3NbXSA9IGFycmF5KAoJCSAnaWQnPT4kdGhpc3RpZCwKCQkgJ25hbWUnPT4nJywKCQkgJ2NvbnRhY3QnPT4nJywKCQkgJ2Rpc3BsYXlvcmRlcic9PjEsCgkJICdmbGFncyc9PjEKCQkpOwoJfQoJYnJlYWs7CiBjYXNlIDM6Ly9hZGQgcGxheWVyIHRvIHRlYW0KLy9DSEVDS01FIHVuc2V0KCRwYXJhbXNbJ2FkZHBsYXllcl0pOwogCSRyb3dzID0gYXJyYXkoKTsKIAlpZihpc3NldCgkcGFyYW1zWydwbHJfb3JkZXInXSkpCgl7CgkJZm9yZWFjaCgkcGFyYW1zWydwbHJfb3JkZXInXSBhcyAkaW5keD0+JG9yZGVyKQoJCXsKCQkJJHJvd3NbXSA9IGFycmF5KAoJCQkgJ2lkJz0+JHRoaXN0aWQsCgkJCSAnbmFtZSc9PiRwYXJhbXNbJ3Bscl9uYW1lJ11bJGluZHhdLAoJCQkgJ2NvbnRhY3QnPT4kcGFyYW1zWydwbHJfY29udGFjdCddWyRpbmR4XSwKCQkJICdkaXNwbGF5b3JkZXInPT4kb3JkZXIsCgkJCSAnZmxhZ3MnPT4kcGFyYW1zWydwbHJfZmxhZ3MnXVskaW5keF0KCQkJKTsKCQl9CgkJJG5leHQgPSBjb3VudCgkcGFyYW1zWydwbHJfb3JkZXInXSkrMTsgLy9hc3N1bWUgbm8gZ2FwcyBpbiB0aGUgcmVjb3JkZWQgb3JkZXJzCgl9CgllbHNlCgkJJG5leHQgPSAxOwoKCSRzcWwgPSAnSU5TRVJUIElOVE8gJy4kcHJlZi4nbW9kdWxlX3RtdF9wZW9wbGUgVkFMVUVTICg/LG51bGwsbnVsbCw/LDEpJzsvL25ldy1tZW1iZXIgZmxhZwoJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJHRoaXN0aWQsJG5leHQpKTsKCSRyb3dzW10gPSBhcnJheSgKCSAnaWQnPT4kdGhpc3RpZCwKCSAnbmFtZSc9PicnLAoJICdjb250YWN0Jz0+JycsCgkgJ2Rpc3BsYXlvcmRlcic9PiRuZXh0LAoJICdmbGFncyc9PjEKCSk7CglicmVhazsKIGNhc2UgNDovL3JlbW92ZSBwbGF5ZXIgZnJvbSB0ZWFtCiAJcmVzZXQoJHBhcmFtc1snZGVsZXRlJ10pOwoJJG9yZGVyID0ga2V5KCRwYXJhbXNbJ2RlbGV0ZSddKTsKCSRzcWwgPSAnVVBEQVRFICcuJHByZWYuJ21vZHVsZV90bXRfcGVvcGxlIFNFVCBmbGFncz0yIFdIRVJFIGlkPT8gQU5EIGRpc3BsYXlvcmRlcj0/IEFORCBmbGFncyE9Mic7CgkkcmVzID0gJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJHRoaXN0aWQsJG9yZGVyKSk7Cgkka2VlcHMgPSBhcnJheV9kaWZmKCRwYXJhbXNbJ3Bscl9vcmRlciddLGFycmF5KCRvcmRlcikpOwoJaWYoJGtlZXBzKQoJewoJCS8vZ2V0IHZhbHVlcyBmb3IgZGlzcGxheQoJCS8vVE9ETyB0aGlzIHN0dWZmIGlzIHByb2JhYmx5IGJvcmtlZCEhCgkJJHJvd3MgPSBPcmRlclRlYW1NZW1iZXJzKCRkYiwkdGhpc3RpZCk7CgkJJGluZHggPSAwOwoJCWZvcmVhY2goJGtlZXBzIGFzICRrZXk9PiRvcmRlcikKCQl7CgkJCSRyb3dzWyRpbmR4XVsnbmFtZSddID0gJHBhcmFtc1sncGxyX25hbWUnXVska2V5XTsKCQkJJHJvd3NbJGluZHhdWydjb250YWN0J10gPSAkcGFyYW1zWydwbHJfY29udGFjdCddWyRrZXldOwoJCQkkcm93c1skaW5keF1bJ2Rpc3BsYXlvcmRlciddID0gJG9yZGVyOwoJCQkkcm93c1skaW5keF1bJ2ZsYWdzJ10gPSAkcGFyYW1zWydwbHJfZmxhZ3MnXVska2V5XTsKCQkJJGluZHgrKzsKCQl9Cgl9CgllbHNlCgkJJHJvd3MgPSBhcnJheSgpOwoJYnJlYWs7CiBjYXNlIDU6Ly9idW1wIG1lbWJlcidzIGRpc3BsYXlvcmRlcgovKiR0bXAgPSBhcnJheV9rZXlzKCRwYXJhbXNbJ21vdmVkb3duJ10pOwoJJG9yZGVyID0gJHRtcFswXTsKCSRuZXdvcmRlciA9ICRvcmRlcisxOwoJJHNxbCA9ICdVUERBVEUgJy4kcHJlZi4nbW9kdWxlX3RtdF9wZW9wbGUgU0VUIGRpc3BsYXlvcmRlcj0/IFdIRVJFIGlkPT8gQU5EIGZsYWdzIT0yIEFORCBkaXNwbGF5b3JkZXI9Pyc7CgkkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgtJG5ld29yZGVyLCR0aGlzdGlkLCRvcmRlcikpOwoJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJG9yZGVyLCR0aGlzdGlkLCRuZXdvcmRlcikpOwoJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJG5ld29yZGVyLCR0aGlzdGlkLC0kbmV3b3JkZXIpKTsKKi8KCXJlc2V0KCRwYXJhbXNbJ21vdmVkb3duJ10pOwoJJG8xID0ga2V5KCRwYXJhbXNbJ21vdmVkb3duJ10pOwoJJGsgPSBhcnJheV9zZWFyY2goJG8xLCRwYXJhbXNbJ3Bscl9vcmRlciddKTsKCWlmKGlzc2V0KCRwYXJhbXNbJ3Bscl9vcmRlciddWyRrKzFdKSkKCXsKCQkkc3FsID0gJ1VQREFURSAnLiRwcmVmLidtb2R1bGVfdG10X3Blb3BsZSBTRVQgZGlzcGxheW9yZGVyPT8gV0hFUkUgaWQ9PyBBTkQgbmFtZT0/JzsKCQlpZigkcGFyYW1zWydwbHJfb3JkZXInXVskaysxXSA8ICRvMSsyKQoJCQkkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkbzEsJHRoaXN0aWQsJHBhcmFtc1sncGxyX25hbWUnXVskaysxXSkpOwoJCSRkYi0+RXhlY3V0ZSgkc3FsLGFycmF5KCRvMSsxLCR0aGlzdGlkLCRwYXJhbXNbJ3Bscl9uYW1lJ11bJGtdKSk7CgkJJHJvd3MgPSBPcmRlclRlYW1EYXRhKCRkYiwkdGhpc3RpZCwkaysxLCRrKzIsJHBhcmFtcyk7Cgl9CgllbHNlCgkJJHJvd3MgPSBhcnJheSgpOyAvL1RPRE8KCWJyZWFrOwogY2FzZSA2OiAvL2RlYyBtZW1iZXIncyBkaXNwbGF5b3JkZXIKLyokdG1wID0gYXJyYXlfa2V5cygkcGFyYW1zWydtb3ZldXAnXSk7Cgkkb3JkZXIgPSAkdG1wWzBdOwoJJG5ld29yZGVyID0gJG9yZGVyLTE7Cgkkc3FsID0gJ1VQREFURSAnLiRwcmVmLidtb2R1bGVfdG10X3Blb3BsZSBTRVQgZGlzcGxheW9yZGVyPT8gV0hFUkUgaWQ9PyBBTkQgZmxhZ3MhPTIgQU5EIGRpc3BsYXlvcmRlcj0/JzsKCSRkYi0+RXhlY3V0ZSgkc3FsLGFycmF5KC0kbmV3b3JkZXIsJHRoaXN0aWQsJG9yZGVyKSk7CgkkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkb3JkZXIsJHRoaXN0aWQsJG5ld29yZGVyKSk7CgkkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkbmV3b3JkZXIsJHRoaXN0aWQsLSRuZXdvcmRlcikpOwoqLwoJcmVzZXQoJHBhcmFtc1snbW92ZXVwJ10pOwoJJG8xID0ga2V5KCRwYXJhbXNbJ21vdmV1cCddKTsKCSRrID0gYXJyYXlfc2VhcmNoKCRvMSwkcGFyYW1zWydwbHJfb3JkZXInXSk7CglpZigkayA+IDApCgl7CgkJJHNxbCA9ICdVUERBVEUgJy4kcHJlZi4nbW9kdWxlX3RtdF9wZW9wbGUgU0VUIGRpc3BsYXlvcmRlcj0/IFdIRVJFIGlkPT8gQU5EIG5hbWU9Pyc7CgkJaWYoJHBhcmFtc1sncGxyX29yZGVyJ11bJGstMV0gPiAkbzEtMikKCQkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJG8xLCR0aGlzdGlkLCRwYXJhbXNbJ3Bscl9uYW1lJ11bJGstMV0pKTsKCQkkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkbzEtMSwkdGhpc3RpZCwkcGFyYW1zWydwbHJfbmFtZSddWyRrXSkpOwoJCSRyb3dzID0gT3JkZXJUZWFtRGF0YSgkZGIsJHRoaXN0aWQsJGsrMSwkaywkcGFyYW1zKTsKCX0KCWVsc2UKCQkkcm93cyA9IGFycmF5KCk7IC8vVE9ETwoJYnJlYWs7CiBjYXNlIDExOi8vcmVtb3ZlIHNlbGVjdGVkIG1lbWJlcihzKQoJJGFyZ3MgPSAkcGFyYW1zWydwc2VsJ107CiAJJG51bSA9IGNvdW50KCRhcmdzKTsKCSRzZWxlY3RvciA9ICgkbnVtID4gMSkgPyAnIElOICgnLnN0cl9yZXBlYXQoJz8sJywkbnVtLTEpLic/KScgOiAnPT8nOwoJJHNxbCA9ICdVUERBVEUgJy4kcHJlZi4nbW9kdWxlX3RtdF9wZW9wbGUgU0VUIGZsYWdzPTIgV0hFUkUgaWQ9PyBBTkQgZmxhZ3MhPTIgQU5EIGRpc3BsYXlvcmRlcicuJHNlbGVjdG9yOwoJYXJyYXlfdW5zaGlmdCgkYXJncywkdGhpc3RpZCk7CgkkZGItPkV4ZWN1dGUoJHNxbCwkYXJncyk7Cgkka2VlcHMgPSBhcnJheV9kaWZmKCRwYXJhbXNbJ3Bscl9vcmRlciddLCRwYXJhbXNbJ3BzZWwnXSk7CglpZigka2VlcHMpCgl7CgkJLy9nZXQgdmFsdWVzIGZvciBkaXNwbGF5CgkJJHJvd3MgPSBPcmRlclRlYW1NZW1iZXJzKCRkYiwkdGhpc3RpZCk7CgkJJGluZHggPSAwOwoJCWZvcmVhY2goJGtlZXBzIGFzICRrZXk9PiRvcmRlcikKCQl7CgkJCSRyb3dzWyRpbmR4XVsnbmFtZSddID0gJHBhcmFtc1sncGxyX25hbWUnXVska2V5XTsKCQkJJHJvd3NbJGluZHhdWydjb250YWN0J10gPSAkcGFyYW1zWydwbHJfY29udGFjdCddWyRrZXldOwoJCQkkaW5keCsrOwoJCX0KCX0KCWVsc2UKCQkkcm93cyA9IGFycmF5KCk7CglicmVhazsKIGNhc2UgMTI6Ly9leHBvcnQgc2VsZWN0ZWQgbWVtYmVyKHMpCgkkcm93cyA9IGFycmF5KCk7Cglmb3JlYWNoKCRwYXJhbXNbJ3BzZWwnXSBhcyAkaWQpCgl7CgkJJGluZHggPSBhcnJheV9zZWFyY2goJGlkLCRwYXJhbXNbJ3Bscl9vcmRlciddKTsKCQkkcm93c1tdID0gYXJyYXkoCgkJICduYW1lJz0+JHBhcmFtc1sncGxyX25hbWUnXVskaW5keF0sCgkJICdjb250YWN0Jz0+JHBhcmFtc1sncGxyX2NvbnRhY3QnXVskaW5keF0pOwoJfQoJJGZ1bmNzID0gbmV3IHRtdENTVigpOwoJJGZ1bmNzLT5UZWFtc1RvQ1NWKCR0aGlzLCRicmFja2V0X2lkLCR0aGlzdGlkLCRyb3dzKTsKCXJldHVybjsKIGRlZmF1bHQ6Cgkkc3FsID0gJ1NFTEVDVCAqIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9wZW9wbGUgV0hFUkUgaWQ9PyBBTkQgZmxhZ3MhPTIgT1JERVIgQlkgZGlzcGxheW9yZGVyJzsKCSRyb3dzID0gJGRiLT5HZXRBbGwoJHNxbCxhcnJheSgkdGhpc3RpZCkpOwoJYnJlYWs7Cn0KCiRqc2Z1bmNzID0gYXJyYXkoKTsJLy9jb250ZXh0LXNwZWNpZmljLWNvZGUgYWNjdW11bGF0b3JzCiRqc2xvYWRzID0gYXJyYXkoKTsKCmlmKCRyb3dzKQp7CgkkcGMgPSBjb3VudCgkcm93cyk7CgkkbmV3byA9ICRwYyArIDE7CgkkcGxheWVycyA9IGFycmF5KCk7CgkkdGhlbWUgPSBjbXNtcygpLT5nZXRfdmFyaWFibGUoJ2FkbWludGhlbWUnKTsgLy9DTVNNUyAxLjkrCgkkcm93Y2xhc3MgPSAncm93MSc7CgkkaW5keCA9IDE7CgkkZmluZHMgPSBhcnJheSgnL2NsYXNzPSIoLiopIi8nLCcvaWQ9LipcW1xdIiAvJyk7IC8vZm9yIHhodG1sIHN0cmluZyBjbGVhbnVwCgkkcmVwbHMgPSBhcnJheSgnY2xhc3M9InBscl9uYW1lICQxIicsJycpOyAvL2ZhaWxzIGlmIGJhY2tyZWYgZmlyc3QhCglpZiAoJHBtb2QpCgl7CgkJJGRvd250ZXh0ID0gJHRoaXMtPkxhbmcoJ2Rvd24nKTsKCQkkdXB0ZXh0ID0gJHRoaXMtPkxhbmcoJ3VwJyk7Cgl9CgoJZm9yZWFjaCgkcm93cyBhcyAkcm93KQoJewoJCSRvbmUgPSBuZXcgc3RkQ2xhc3MoKTsKCQkkb25lLT5yb3djbGFzcyA9ICRyb3djbGFzczsKCQlpZigkcG1vZCkKCQl7CgkJCSR0bXAgPSAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwncGxyX25hbWVbXScsJHJvd1snbmFtZSddLDI1LDY0KTsKCQkJJG9uZS0+aW5wdXRfbmFtZSA9IHByZWdfcmVwbGFjZSgkZmluZHMsJHJlcGxzLCR0bXApOwoJCQkkb25lLT5pbnB1dF9jb250YWN0ID0gJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ3Bscl9jb250YWN0W10nLCRyb3dbJ2NvbnRhY3QnXSwzMCw4MCk7CgkJCSRvcmQgPSAoJHJvd1snZGlzcGxheW9yZGVyJ10pID8gKGludCkkcm93WydkaXNwbGF5b3JkZXInXSA6ICRuZXdvKys7CgkJCS8vbmVlZCBpbnB1dC1vYmplY3RzIHRoYXQgbG9vayBsaWtlIHBhZ2UtbGlua3MgaGVyZSwgdG8gZ2V0IGFsbCBmb3JtIHBhcmFtZXRlcnMgdXBvbiB0aGVpciBhY3RpdmF0aW9uCgkJCWlmKCRpbmR4ID4gMSkKCQkJCSRvbmUtPnVwbGluayA9ICR0aGlzLT5DcmVhdGVJbnB1dExpbmtzKCRpZCwnbW92ZXVwWycuJG9yZC4nXScsJ2Fycm93LXUuZ2lmJyxGQUxTRSwKCQkJCQkkdXB0ZXh0KTsKCQkJZWxzZQoJCQkJJG9uZS0+dXBsaW5rID0gJyc7CgkJCWlmKCRpbmR4IDwgJHBjKQoJCQkJJG9uZS0+ZG93bmxpbmsgPSAkdGhpcy0+Q3JlYXRlSW5wdXRMaW5rcygkaWQsJ21vdmVkb3duWycuJG9yZC4nXScsJ2Fycm93LWQuZ2lmJyxGQUxTRSwKCQkJCQkkZG93bnRleHQpOwoJCQllbHNlCgkJCQkkb25lLT5kb3dubGluayA9ICcnOwoJCQkkb25lLT5kZWxldGVsaW5rID0gJHRoaXMtPkNyZWF0ZUlucHV0TGlua3MoJGlkLCdkZWxldGVbJy4kb3JkLiddJywnZGVsZXRlLmdpZicsRkFMU0UsCgkJCQkkdGhpcy0+TGFuZygnZGVsZXRlcGxheWVyJykpOyAvL2NvbmZpcm0gdmlhIG1vZGFsIGRpYWxvZwoJCQkvL2hpZGRlbnMgaW4gdGFibGUtcm93IHRvIHN1cHBvcnQgcmUtb3JkZXJpbmcgYW5kIGFqYXggbWFuaXB1bGF0aW9uCgkJCSRvbmUtPmhpZGRlbiA9ICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ3Bscl9vcmRlcltdJywkb3JkLCdjbGFzcz0ib3JkIicpLgoJCQkJJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwncGxyX2ZsYWdzW10nLCRyb3dbJ2ZsYWdzJ10pOwoJCX0KCQllbHNlCgkJewoJCQkkb25lLT5pbnB1dF9uYW1lID0gJHJvd1snbmFtZSddOwoJCQkkb25lLT5pbnB1dF9jb250YWN0ID0gJHJvd1snY29udGFjdCddOwoJCX0KCQkkb25lLT5zZWxlY3RlZCA9ICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwncHNlbFtdJywkcm93WydkaXNwbGF5b3JkZXInXSwtMSk7CgkJJHBsYXllcnNbXSA9ICRvbmU7CgkJKCRyb3djbGFzcz09J3JvdzEnPyRyb3djbGFzcz0ncm93Mic6JHJvd2NsYXNzPSdyb3cxJyk7CgkJJGluZHgrKzsKCX0KCSRzbWFydHktPmFzc2lnbignaXRlbXMnLCRwbGF5ZXJzKTsKCglpZigkcG1vZCkKCXsKCQkkanNsb2Fkc1tdID0gPDw8IEVPUwogdGVhbXRhYmxlLmZpbmQoJy5wbHJfZGVsZXRlJykuY2hpbGRyZW4oKS5tb2RhbGNvbmZpcm0oewogIG92ZXJsYXlJRDogJ2NvbmZpcm0nLAogIHByZVNob3c6IGZ1bmN0aW9uKGQpewogICB2YXIgbmFtZSA9IFwkKHRoaXMpLmNsb3Nlc3QoJ3RyJykuZmluZCgnLnBscl9uYW1lJykuYXR0cigndmFsdWUnKTsKICAgdmFyIHBhcmEgPSBkLmNoaWxkcmVuKCdwOmZpcnN0JylbMF07CiAgIHBhcmEuaW5uZXJIVE1MID0gJ3skdGhpcy0+TGFuZygnY29uZmlybV9kZWxldGUnLCclcycpfScucmVwbGFjZSgnJXMnLG5hbWUpOwogIH0KIH0pOwoKRU9TOwoJfQp9CmVsc2UKCSRwYyA9IDA7Cgokc21hcnR5LT5hc3NpZ24oJ3BjJywkcGMpOwoKaWYoJHBjID4gMSkKewoJaWYoJHBtb2QpCgl7CgkJLy9zZXR1cCBzb21lIGFqYXgtcGFyYW1ldGVycyAtIHBhcnRpYWwgZGF0YSBmb3IgdGFibGVEbkQ6Om9uRHJvcAoJCSR1cmwgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ29yZGVyX3RlYW0nLE5VTEwsTlVMTCxhcnJheSgndGVhbV9pZCc9PiR0aGlzdGlkLCduZXdvcmRlcnMnPT4nJyksTlVMTCxUUlVFKTsKCQkkb2ZmcyA9IHN0cnBvcygkdXJsLCc/bWFjdD0nKTsKCQkkYWpmaXJzdCA9IHN0cl9yZXBsYWNlKCdhbXA7JywnJyxzdWJzdHIoJHVybCwkb2ZmcysxKSk7CgkJJGpzZnVuY3NbXSA9IDw8PCBFT1MKZnVuY3Rpb24gYWpheERhdGEoZHJvcHJvdyxkcm9wY291bnQpIHsKIHZhciBvcmRlcnMgPSBbXTsKICQoZHJvcHJvdy5wYXJlbnROb2RlKS5maW5kKCcub3JkJykuZWFjaChmdW5jdGlvbigpewogIG9yZGVyc1tvcmRlcnMubGVuZ3RoXSA9IHRoaXMudmFsdWU7CiB9KTsKIHZhciBhamF4ZGF0YSA9ICckYWpmaXJzdCcrb3JkZXJzLmpvaW4oKTsKIHJldHVybiBhamF4ZGF0YTsKfQpmdW5jdGlvbiBkcm9wcmVzcG9uc2UoZGF0YSxzdGF0dXMpIHsKIGlmKHN0YXR1cyA9PSAnc3VjY2VzcycgJiYgZGF0YSkgewogIHZhciBpID0gMTsKICB2YXIgdGVhbXRhYmxlID0gJCgnI3RlYW0nKTsKICB0ZWFtdGFibGUuZmluZCgnLm9yZCcpLmVhY2goZnVuY3Rpb24oKXtcJCh0aGlzKS5hdHRyKCd2YWx1ZScsaSsrKTt9KTsKICB2YXIgbmFtZTsKICB2YXIgb2RkY2xhc3MgPSAncm93MSc7CiAgdmFyIGV2ZW5jbGFzcyA9ICdyb3cyJzsKICBpID0gdHJ1ZTsKICB0ZWFtdGFibGUudHJpZ2dlcigndXBkYXRlJykuZmluZCgndGJvZHkgdHInKS5lYWNoKGZ1bmN0aW9uKCkgewoJbmFtZSA9IGkgPyBvZGRjbGFzcyA6IGV2ZW5jbGFzczsKCVwkKHRoaXMpLnJlbW92ZUNsYXNzKCkuYWRkQ2xhc3MobmFtZSk7CglpID0gIWk7CiAgfSk7CiB9IGVsc2UgewogICQoJyNwYWdlX3RhYnMnKS5wcmVwZW5kKCc8cCBzdHlsZT1cImZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6cmVkO1wiPnskdGhpcy0+TGFuZygnZXJyX2FqYXgnKX0hPC9wPjxiciAvPicpOwogfQp9CgpFT1M7CgkJJGpzbG9hZHNbXSA9IDw8PCBFT1MKIHRlYW10YWJsZS5hZGRDbGFzcygndGFibGVfZHJhZycpLnRhYmxlRG5EKHsKCWRyYWdDbGFzczogJ3JvdzFob3ZlcicsCglvbkRyb3A6IGZ1bmN0aW9uKHRhYmxlLCBkcm9wcm93cykgewoJCXZhciBvZGQgPSB0cnVlOwoJCXZhciBvZGRjbGFzcyA9ICdyb3cxJzsKCQl2YXIgZXZlbmNsYXNzID0gJ3JvdzInOwoJCXZhciBkcm9wcm93ID0gJChkcm9wcm93cylbMF07CgkJJCh0YWJsZSkuZmluZCgndGJvZHkgdHInKS5lYWNoKGZ1bmN0aW9uKCkgewoJCQl2YXIgbmFtZSA9IG9kZCA/IG9kZGNsYXNzIDogZXZlbmNsYXNzOwoJCQlpZiAodGhpcyA9PT0gZHJvcHJvdykgewoJCQkJbmFtZSA9IG5hbWUrJ2hvdmVyJzsKCQkJfQoJCQkkKHRoaXMpLnJlbW92ZUNsYXNzKCkuYWRkQ2xhc3MobmFtZSk7CgkJCW9kZCA9ICFvZGQ7CgkJfSk7CgkJaWYgKHR5cGVvZiBhamF4RGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgJC5pc0Z1bmN0aW9uKGFqYXhEYXRhKSkgewkJCgkJCXZhciBhamF4ZGF0YSA9IGFqYXhEYXRhKGRyb3Byb3csZHJvcHJvd3MubGVuZ3RoKTsKCQkJaWYgKGFqYXhkYXRhKSB7CgkJCQkkLmFqYXgoewoJCQkJIHVybDogJ21vZHVsZWludGVyZmFjZS5waHAnLAoJCQkJIHR5cGU6ICdQT1NUJywKCQkJCSBkYXRhOiBhamF4ZGF0YSwKCQkJCSBkYXRhVHlwZTogJ3RleHQnLAoJCQkJIHN1Y2Nlc3M6IGRyb3ByZXNwb25zZQoJCQkJfSk7CgkJCX0KCQl9CgkgfQogIH0pLmZpbmQoJ3Rib2R5IHRyJykucmVtb3ZlQXR0cignb25tb3VzZW92ZXInKS5yZW1vdmVBdHRyKCdvbm1vdXNlb3V0JykubW91c2VvdmVyKGZ1bmN0aW9uKCkgewoJCXZhciBub3cgPSAkKHRoaXMpLmF0dHIoJ2NsYXNzJyk7CgkJJCh0aGlzKS5hdHRyKCdjbGFzcycsIG5vdysnaG92ZXInKTsKICB9KS5tb3VzZW91dChmdW5jdGlvbigpIHsKCQl2YXIgbm93ID0gJCh0aGlzKS5hdHRyKCdjbGFzcycpOwoJCXZhciB0byA9IG5vdy5pbmRleE9mKCdob3ZlcicpOwoJCSQodGhpcykuYXR0cignY2xhc3MnLCBub3cuc3Vic3RyaW5nKDAsdG8pKTsKICB9KTsKICQoJy51cGRvd24nKS5oaWRlKCk7CiAkKCcuZG5kaGVscCcpLmNzcygnZGlzcGxheScsJ2Jsb2NrJyk7CgpFT1M7CgoJJG9uc29ydCA9IDw8PCBFT1MKZnVuY3Rpb24gKCkgewogdmFyIG9yZGVycyA9IFtdOwogJCh0aGlzKS5maW5kKCd0Ym9keSB0ciB0ZCcpLmNoaWxkcmVuKCcub3JkJykuZWFjaChmdW5jdGlvbigpewogIG9yZGVyc1tvcmRlcnMubGVuZ3RoXSA9IHRoaXMudmFsdWU7CiB9KTsKIHZhciBhamF4ZGF0YSA9ICckYWpmaXJzdCcrb3JkZXJzLmpvaW4oKTsKICQuYWpheCh7CiAgdXJsOiAnbW9kdWxlaW50ZXJmYWNlLnBocCcsCiAgdHlwZTogJ1BPU1QnLAogIGRhdGE6IGFqYXhkYXRhLAogIGRhdGFUeXBlOiAndGV4dCcsCiAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEsc3RhdHVzKSB7CiAgIGlmKHN0YXR1cyA9PSAnc3VjY2VzcycgJiYgZGF0YSkgewogICAgdmFyIGkgPSAxOwoJJCgnI3RlYW0nKS5maW5kKCcub3JkJykuZWFjaChmdW5jdGlvbigpe1wkKHRoaXMpLmF0dHIoJ3ZhbHVlJyxpKyspO30pOwogICB9IGVsc2UgewogICAgJCgnI3BhZ2VfdGFicycpLnByZXBlbmQoJzxwIHN0eWxlPSJmb250LXdlaWdodDpib2xkO2NvbG9yOnJlZDsiPnskdGhpcy0+TGFuZygnZXJyX2FqYXgnKX0hPC9wPjxiciAvPicpOwogICB9CiAgfQogfSk7Cn0KRU9TOwoJfQoJZWxzZSAvLyEkcG1vZAoJCSRvbnNvcnQgPSAnbnVsbCc7IC8vbm8gbW9kcyA+PiBkbyBub3RoaW5nIGFmdGVyIHNvcnRpbmcKCgoJJGpzbG9hZHNbXSA9IDw8PCBFT1MKICQuU1Nzb3J0LmFkZFBhcnNlcih7CiAgaWQ6ICd0ZXh0aW5wdXQnLAogIGlzOiBmdW5jdGlvbihzLG5vZGUpIHsKICAgdmFyIG4gPSBub2RlLmNoaWxkTm9kZXNbMF07CiAgIHJldHVybiAobiAmJiBuLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ2lucHV0JyAmJiBuLnR5cGUudG9Mb3dlckNhc2UoKSA9PSAndGV4dCcpOwogIH0sCiAgZm9ybWF0OiBmdW5jdGlvbihzLG5vZGUpIHsKICAgcmV0dXJuICQudHJpbShub2RlLmNoaWxkTm9kZXNbMF0udmFsdWUpOwogIH0sCiAgd2F0Y2g6IHRydWUsCiAgdHlwZTogJ3RleHQnCiB9KTsKIHRlYW10YWJsZS5hZGRDbGFzcygndGFibGVfc29ydCcpLlNTc29ydCh7CiAgc29ydENsYXNzOiAnU29ydEFibGUnLAogIGFzY0NsYXNzOiAnU29ydFVwJywKICBkZXNjQ2xhc3M6ICdTb3J0RG93bicsCiAgb2RkQ2xhc3M6ICdyb3cxJywKICBldmVuQ2xhc3M6ICdyb3cyJywKICBvZGRzb3J0Q2xhc3M6ICdyb3cxcycsCiAgZXZlbnNvcnRDbGFzczogJ3JvdzJzJywKICBvblNvcnRlZDogJG9uc29ydAogfSk7CgpFT1M7CgkkanNmdW5jc1tdID0gPDw8IEVPUwpmdW5jdGlvbiBzZWxlY3RfYWxsX3BsYXllcnMoKSB7CiB2YXIgc3QgPSAkKCcjcGxheXNlbCcpLmF0dHIoJ2NoZWNrZWQnKTsKIGlmKCFzdCkgc3QgPSBmYWxzZTsKICQoJyN0ZWFtID4gdGJvZHknKS5maW5kKCdpbnB1dFt0eXBlPSJjaGVja2JveCJdJykuYXR0cignY2hlY2tlZCcsc3QpOwp9CgpFT1M7Cgkkc21hcnR5LT5hc3NpZ24oJ3NlbGVjdGFsbCcsJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCdwJyxGQUxTRSwtMSwKCQknaWQ9InBsYXlzZWwiIG9uY2xpY2s9InNlbGVjdF9hbGxfcGxheWVycygpOyInKSk7Cn0gLy9lbmQgJHBjID4gMQplbHNlCgkkc21hcnR5LT5hc3NpZ24oJ3NlbGVjdGFsbCcsJycpOwoKJGpzZnVuY3NbXSA9IDw8PCBFT1MKZnVuY3Rpb24gcGxheWVyX3NlbGVjdGVkKCkgewogdmFyIGNiID0gJCgnI3RlYW0gPiB0Ym9keScpLmZpbmQoJ2lucHV0OmNoZWNrZWQnKTsKIHJldHVybihjYi5sZW5ndGggPiAwKTsKfQoKRU9TOwoKaWYoJHBtb2QpCnsKCS8vZm9yIHBvcHVwIGNvbmZpcm1hdGlvbgoJJHNtYXJ0eS0+YXNzaWduKCdubycsJHRoaXMtPkxhbmcoJ25vJykpOwoJJHNtYXJ0eS0+YXNzaWduKCd5ZXMnLCR0aGlzLT5MYW5nKCd5ZXMnKSk7CgoJaWYoJHBjID4gMSkKCXsKCQkkc21hcnR5LT5hc3NpZ24oJ2RuZGhlbHAnLCR0aGlzLT5MYW5nKCdoZWxwX2RuZCcpKTsKCQkkc21hcnR5LT5hc3NpZ24oJ2RlbGV0ZScsJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnZGVsZXRlJywkdGhpcy0+TGFuZygnZGVsZXRlJyksCgkJCSd0aXRsZT0iJy4kdGhpcy0+TGFuZygnZGVsZXRlX3RpcCcpLiciJykpOwoJCSR0ID0gKCRpc3RlYW0pID8gJHRoaXMtPkxhbmcoJ3NlbF90ZWFtcycpIDogJHRoaXMtPkxhbmcoJ3NlbF9wbGF5ZXJzJyk7CgkJJHQgPSAkdGhpcy0+TGFuZygnY29uZmlybV9kZWxldGUnLCR0KTsKCQkkanNsb2Fkc1tdID0gPDw8IEVPUwogJCgnI3skaWR9ZGVsZXRlJykubW9kYWxjb25maXJtKHsKICBvdmVybGF5SUQ6ICdjb25maXJtJywKICBkb0NoZWNrOiBwbGF5ZXJfc2VsZWN0ZWQsCiAgcHJlU2hvdzogZnVuY3Rpb24oZCl7CiAgIHZhciBwYXJhID0gZC5jaGlsZHJlbigncDpmaXJzdCcpWzBdOwogICBwYXJhLmlubmVySFRNTCA9ICd7JHR9JzsKICB9CiB9KTsKCkVPUzsKCX0KCWlmKCRpc3RlYW0gfHwgJHBjID09IDApCgl7CgkJLy9uZWVkIGlucHV0LW9iamVjdCB0aGF0IGxvb2tzIGxpa2UgcGFnZS1saW5rLCB0byBnZXQgYWxsIGZvcm0gcGFyYW1ldGVycyB1cG9uIGFjdGl2YXRpb24KCQkkc21hcnR5LT5hc3NpZ24oJ2FkZCcsJHRoaXMtPkNyZWF0ZUlucHV0TGlua3MoJGlkLCdhZGRwbGF5ZXInLCduZXdvYmplY3QuZ2lmJyxUUlVFLAoJCQkkdGhpcy0+TGFuZygndGl0bGVfYWRkJyxzdHJ0b2xvd2VyKCR0aGlzLT5MYW5nKCd0aXRsZV9wbGF5ZXInKSkpKSk7Cgl9Cgkkc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0RGVmYXVsdCgkaWQsJ3N1Ym1pdCcsJHRoaXMtPkxhbmcoJ3NhdmUnKSkpOwoJJHNtYXJ0eS0+YXNzaWduKCdjYW5jZWwnLCR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ2NhbmNlbCcsJHRoaXMtPkxhbmcoJ2NhbmNlbCcpKSk7CgoJJGpzbG9hZHNbXSA9IDw8PCBFT1MKICQoJ2Zvcm0gaW5wdXRbdHlwZT10ZXh0XScpLmtleXByZXNzKGZ1bmN0aW9uKGUpewogIGlmIChlLndoaWNoID09IDEzKXsKCSAkKCdpbnB1dFt0eXBlPXN1Ym1pdF0uZGVmYXVsdCcpLmZvY3VzKCk7CiAgIHJldHVybiBmYWxzZTsKICB9CiB9KTsKCkVPUzsKCXN3aXRjaCgkb3ApCgl7CgkgY2FzZSAyOgoJIGNhc2UgMTI6IC8vbWF5YmUgY2hhbmdlZCBzaW5jZSBleHBvcnQgZG9uZQoJCSR0ZXN0ID0gJ251bGwnOyAvL1RPRE8gY2hlY2sgZm9yIGFueSBjaGFuZ2UgZS5nLiBhamF4CgkJYnJlYWs7CgkgZGVmYXVsdDoKCQkkdGVzdCA9ICdudWxsJzsgLy9hc2sKCSAgCWJyZWFrOwoJfQoJLy9vbkNoZWNrRmFpbDogdHJ1ZTsgbWVhbnMgc3VibWl0IGZvcm0gaWYgbm8gY2hlY2sgbmVlZGVkCgkkanNsb2Fkc1tdID0gPDw8IEVPUwogJCgnI3skaWR9Y2FuY2VsJykubW9kYWxjb25maXJtKHsKICBvdmVybGF5SUQ6ICdjb25maXJtJywKICBkb0NoZWNrOiB7JHRlc3R9LAogIHByZVNob3c6IGZ1bmN0aW9uKGQpewogICB2YXIgcGFyYSA9IGQuY2hpbGRyZW4oJ3A6Zmlyc3QnKVswXTsKICAgcGFyYS5pbm5lckhUTUwgPSAneyR0aGlzLT5MYW5nKCdhbGxhYmFuZG9uJyl9JzsKICB9LAogIG9uQ2hlY2tGYWlsOiB0cnVlCiB9KTsKCkVPUzsKfQplbHNlCgkkc21hcnR5LT5hc3NpZ24oJ2NhbmNlbCcsJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnY2FuY2VsJywkdGhpcy0+TGFuZygnY2xvc2UnKSkpOwoKaWYoJHBjID4gMCkKCSRzbWFydHktPmFzc2lnbignZXhwb3J0JywkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdleHBvcnQnLCR0aGlzLT5MYW5nKCdleHBvcnQnKSwKCQkndGl0bGU9IicuJHRoaXMtPkxhbmcoJ2V4cG9ydF90aXAnKS4nIiBvbmNsaWNrPSJyZXR1cm4gcGxheWVyX3NlbGVjdGVkKCk7IicpKTsKCiRzbWFydHktPmFzc2lnbignaGlkZGVuJywkaGlkZGVuKTsKCiRzbWFydHktPmFzc2lnbignaW5jcGF0aCcsJHRoaXMtPkdldE1vZHVsZVVSTFBhdGgoKS4nL2luY2x1ZGUvJyk7CgppZigkanNsb2FkcykKewoJJGpzZnVuY3NbXSA9ICcKJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CiB2YXIgdGVhbXRhYmxlID0gJChcJyN0ZWFtXCcpOwonOwoJJGpzZnVuY3MgPSBhcnJheV9tZXJnZSgkanNmdW5jcywkanNsb2Fkcyk7CgkkanNmdW5jc1tdID0gJ30pOwonOwp9CiRzbWFydHktPmFzc2lnbignanNmdW5jcycsJGpzZnVuY3MpOwoKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZGRlZGl0X3RlYW0udHBsJyk7Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/action.changelog.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKKi8KCmlmIChpc3NldCgkcGFyYW1zWydjbG9zZSddKSkKewoJJG5ld3Bhcm1zID0gJHRoaXMtPkdldEVkaXRQYXJtcygkcGFyYW1zLCdyZXN1bHRzdGFiJyk7CgkkdGhpcy0+UmVkaXJlY3QoJGlkLCdhZGRlZGl0X2NvbXAnLCRyZXR1cm5pZCwkbmV3cGFybXMpOwp9CgokcHJlZiA9IGNtc19kYl9wcmVmaXgoKTsKJHNxbCA9ICdTRUxFQ1QgKiBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfaGlzdG9yeSBXSEVSRSBicmFja2V0X2lkPT8gT1JERVIgQlkgY2hhbmdld2hlbiBERVNDJzsKJGRhdGEgPSAkZGItPkdldEFsbCgkc3FsLGFycmF5KCRwYXJhbXNbJ2JyYWNrZXRfaWQnXSkpOwppZiAoJGRhdGEpCnsKCSRjaGFuZ2VzID0gYXJyYXkoKTsKCSRyb3djbGFzcyA9ICdyb3cxJzsKCWZvcmVhY2ggKCRkYXRhIGFzICRsaW5lKQoJewoJCSRvbmUgPSBuZXcgc3RkQ2xhc3MoKTsKCQkkb25lLT5yb3djbGFzcyA9ICRyb3djbGFzczsKCQkkb25lLT53aG8gPSAkbGluZVsnY2hhbmdlciddOy8vVE9ETyBmb3JtYXQKCQkkb25lLT53aGVuID0gc3Vic3RyKCRsaW5lWydjaGFuZ2V3aGVuJ10sMCwtMyk7Ly9zdHJpcCBzZWNvbmRzIGZyb20gdGltZXN0YW1wCgkJJG9uZS0+ZnJvbSA9ICRsaW5lWydvbGRkYXRhJ107CgkJJG9uZS0+dG8gPSAkbGluZVsnbmV3ZGF0YSddOwoJCSRjaGFuZ2VzW10gPSAkb25lOwoJCSgkcm93Y2xhc3M9PSdyb3cxJz8kcm93Y2xhc3M9J3JvdzInOiRyb3djbGFzcz0ncm93MScpOwoJfQoJJHNtYXJ0eS0+YXNzaWduKCdjaGFuZ2VzJywkY2hhbmdlcyk7Cgkkc21hcnR5LT5hc3NpZ24oJ2NoYW5nZXInLCR0aGlzLT5MYW5nKCd0aXRsZV9jaGFuZ2VyJykpOwoJJHNtYXJ0eS0+YXNzaWduKCdjaGFuZ2V3aGVuJywkdGhpcy0+TGFuZygndGl0bGVfY2hhbmdld2hlbicpKTsKCSRzbWFydHktPmFzc2lnbignb2xkZGF0YScsJHRoaXMtPkxhbmcoJ3RpdGxlX29sZGRhdGEnKSk7Cgkkc21hcnR5LT5hc3NpZ24oJ25ld2RhdGEnLCR0aGlzLT5MYW5nKCd0aXRsZV9uZXdkYXRhJykpOwp9CmVsc2UKCSRzbWFydHktPmFzc2lnbignbm9jaGFuZ2VzJywkdGhpcy0+TGFuZygnbm9jaGFuZ2VzJykpOwoKJHNtYXJ0eS0+YXNzaWduKCdzdGFydF9mb3JtJywkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwnY2hhbmdlbG9nJywkcmV0dXJuaWQpKTsKJHNtYXJ0eS0+YXNzaWduKCdlbmRfZm9ybScsJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiRzbWFydHktPmFzc2lnbignaGlkZGVuJywkdGhpcy0+R2V0SGlkZGVuUGFybXMoJGlkLCRwYXJhbXMsJ3Jlc3VsdHN0YWInKSk7CiRzcWwgPSAnU0VMRUNUIG5hbWUgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X2JyYWNrZXRzIFdIRVJFIGJyYWNrZXRfaWQ9Pyc7CiRuYW1lID0gJGRiLT5HZXRPbmUoJHNxbCxhcnJheSgkcGFyYW1zWydicmFja2V0X2lkJ10pKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZScsJHRoaXMtPkxhbmcoJ3RpdGxlX2NoYW5nZWxvZycsJG5hbWUpKTsKJHNtYXJ0eS0+YXNzaWduKCdjbG9zZScsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdjbG9zZScsICR0aGlzLT5MYW5nKCdjbG9zZScpKSk7CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2NoYW5nZWxvZy50cGwnKTsKPz4K]]></data>
	</file>
	<file>
	  <filename>/action.check_data.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKCmFjdGlvbiBmb3IgYWpheC1wcm9jZXNzaW5nLCBhZnRlciBjYW5jZWwtYnV0dG9uIGNsaWNrIHdoZW4gZWRpdGluZyBhIGNvbXAKbmV3LWJyYWNrZXQgY2hlY2sgaXMgaGFuZGxlZCBvdGhlcndpc2UgKHNlZSAkZGF0YS0+YWRkZWQgaW4gdG10RWRpdFNldHVwOjpTZXR1cCkKKi8KJHJldCA9IDA7IC8vZGVmYXVsdCBjbGVhbgokYnJhY2tldF9pZCA9IChpbnQpJHBhcmFtc1snYnJhY2tldF9pZCddOwokcHJlZiA9IGNtc19kYl9wcmVmaXgoKTsKJHNxbCA9ICdTRUxFQ1QgbWF0Y2hfaWQgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X21hdGNoZXMgV0hFUkUgYnJhY2tldF9pZD0/IEFORCBmbGFncyE9MCc7CiRycyA9ICRkYi0+RXhlY3V0ZSgkc3FsLGFycmF5KCRicmFja2V0X2lkKSk7CmlmKCRycykKewoJaWYgKCEkcnMtPkVPRikKCQkkcmV0ID0gMTsgLy9kaXJ0eQoJJHJzLT5DbG9zZSgpOwp9CmlmKCRyZXQgPT0gMCkKewoJJHNxbCA9ICdTRUxFQ1QgdGVhbV9pZCBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfdGVhbXMgV0hFUkUgYnJhY2tldF9pZD0/IEFORCBmbGFncyE9MCc7CgkkcnMgPSAkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkYnJhY2tldF9pZCkpOwoJaWYoJHJzKQoJewoJCWlmICghJHJzLT5FT0YpCgkJCSRyZXQgPSAxOwoJCSRycy0+Q2xvc2UoKTsKCX0KfQppZigkcmV0ID09IDApCnsKCSRzcWwgPSAnU0VMRUNUIGlkIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9wZW9wbGUgV0hFUkUgaWQgSU4gKFNFTEVDVCB0ZWFtX2lkIEZST00gJy4KCSRwcmVmLidtb2R1bGVfdG10X3RlYW1zIFdIRVJFIGJyYWNrZXRfaWQ9PykgQU5EIGZsYWdzIT0wJzsKCSRycyA9ICRkYi0+RXhlY3V0ZSgkc3FsLGFycmF5KCRicmFja2V0X2lkKSk7CglpZigkcnMpCgl7CgkJaWYgKCEkcnMtPkVPRikKCQkJJHJldCA9IDE7CgkJJHJzLT5DbG9zZSgpOwoJfQp9CgplY2hvICRyZXQ7Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/action.clone_comp.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKKi8KCmlmICghICR0aGlzLT5DaGVja0FjY2VzcygnYWRtb2QnKSkKCSR0aGlzLT5SZWRpcmVjdCgkaWQsJ2RlZmF1bHRhZG1pbicsJycsCgkJYXJyYXkoJ3RtdF9tZXNzYWdlJz0+JHRoaXMtPlByZXR0eU1lc3NhZ2UoJ2xhY2twZXJtaXNzaW9uJyxGQUxTRSkpKTsKCiRiaWQgPSAoaW50KSRwYXJhbXNbJ2JyYWNrZXRfaWQnXTsKJGZ1bmNzID0gbmV3IHRtdENsb25lKCk7CiRyZXMgPSAkZnVuY3MtPkNsb25lQnJhY2tldCgkdGhpcywkYmlkKTsKaWYoJHJlcyA9PT0gVFJVRSkKCSR0aGlzLT5SZWRpcmVjdCgkaWQsJ2FkZGVkaXRfY29tcCcsJHJldHVybmlkLGFycmF5KCdicmFja2V0X2lkJz0+JGJpZCkpOwplbHNlCgkkdGhpcy0+UmVkaXJlY3QoJGlkLCdkZWZhdWx0YWRtaW4nLCcnLAoJCWFycmF5KCd0bXRfbWVzc2FnZSc9PiR0aGlzLT5QcmV0dHlNZXNzYWdlKCRyZXMsRkFMU0UpKSk7Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0KEMpIDIwMTQtMjAxNSBUb20gUGhhbmUgPHRwZ3d3QG9uZXBvc3QubmV0PgpSZWZlciB0byBsaWNlbmNlIGFuZCBvdGhlciBkZXRhaWxzIGF0IHRoZSB0b3Agb2YgZmlsZSBUb3VybmV5Lm1vZHVsZS5waHAKTW9yZSBpbmZvIGF0IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvdG91cm5leQoKQWN0aW9uIHRvIGRpc3BsYXkgY2hhcnQgb3IgbGlzdCBvZiBhIHRvdXJuYW1lbnQgaW4gZnJvbnQgZW5kCiovCgppZighZnVuY3Rpb25fZXhpc3RzKCdEaXNwbGF5RXJyb3JQYWdlJykpCnsKIGZ1bmN0aW9uIERpc3BsYXlFcnJvclBhZ2UoJiRtb2QsJiRzbWFydHksJiRkYiwmJHBhcmFtcywkZXJyPVRSVUUsJG1lc3NhZ2U9JycpCiB7CiAJaWYoJGVycikKCQkkc21hcnR5LT5hc3NpZ24oJ3RpdGxlJywgJG1vZC0+TGFuZygnZXJyX3N5c3RlbScpKTsKCWlmKCFlbXB0eSgkcGFyYW1zWydicmFja2V0X2lkJ10pKQoJewoJCSRzcWwgPSAiU0VMRUNUIG5hbWUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3RtdF9icmFja2V0cyBXSEVSRSBicmFja2V0X2lkPT8iOwoJCSRuYW1lID0gJGRiLT5HZXRPbmUoJHNxbCxhcnJheSgkcGFyYW1zWydhbGlhcyddKSk7Cgl9CgllbHNlaWYoIWVtcHR5KCRwYXJhbXNbJ2FsaWFzJ10pKQoJewoJCSRzcWwgPSAiU0VMRUNUIG5hbWUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3RtdF9icmFja2V0cyBXSEVSRSBhbGlhcz0/IjsKCQkkbmFtZSA9ICRkYi0+R2V0T25lKCRzcWwsYXJyYXkoJHBhcmFtc1snYWxpYXMnXSkpOwoJfQoJZWxzZQoJCSRuYW1lID0gZmFsc2U7CglpZigkbmFtZSkKCQkkc21hcnR5LT5hc3NpZ24oJ25hbWUnLCAkbW9kLT5MYW5nKCd0b3VybmFtZW50JykuJzogJy4kbmFtZSk7CglpZigkbWVzc2FnZSkKCXsKCQkkZGV0YWlsID0gJG1lc3NhZ2U7CgkJaWYoJGVycikKCQkJJGRldGFpbCAuPSAnPGJyIC8+PGJyIC8+Jy4kbW9kLT5MYW5nKCd0ZWxsYWRtaW4nKTsKCX0KCWVsc2UKCQkkZGV0YWlsID0gJyc7Cgkkc21hcnR5LT5hc3NpZ24oJ21lc3NhZ2UnLCAkZGV0YWlsKTsKCWVjaG8gJG1vZC0+UHJvY2Vzc1RlbXBsYXRlKCdlcnJvci50cGwnKTsKIH0KfQoKJHByZWYgPSBjbXNfZGJfcHJlZml4KCk7CmlmKGlzc2V0KCRwYXJhbXNbJ25vc2VuZCddKSkgLy9mcm9udGVuZCB1c2VyIGNhbmNlbGxlZCByZXN1bHQgc3VtYmlzc2lvbgp7Cgkkc3FsID0gJ1NFTEVDVCAqIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9icmFja2V0cyBXSEVSRSBicmFja2V0X2lkPT8nOwoJJHZhbCA9ICRwYXJhbXNbJ2JyYWNrZXRfaWQnXTsKCSR2aWV3ID0gJHBhcmFtc1sndmlldyddOwoJLy9vdGhlciBkYXRhIGZyb20gZnJvbnRlbmQgbm90IHRvIGludGVyZmVyZQoJJHBhcmFtcyA9IGFycmF5KCd2aWV3Jz0+JHZpZXcpOwp9CmVsc2VpZihpc3NldCgkcGFyYW1zWyd0d2VldGF1dGgnXSkpCnsKCWlmKGVtcHR5KCRyZXR1cm5pZCkpIC8vbm8gJHJldHVybmlkIHVwb24gcmV0dXJuIGZyb20gVHdpdHRlcgoJewoJCSRyZXR1cm5pZCA9ICRwYXJhbXNbJ3JldHVybmlkJ107IC8vZnJvbnRlbmQtcGFnZS1kaXNwbGF5IG5lZWRzIHRoaXMgdmFyCgkJaWYoaXNzZXQoJF9SRVFVRVNUWydvYXV0aF90b2tlbiddKSkgLy9hdXRob3Jpc2F0aW9uIHdhcyBjb21wbGV0ZWQKCQl7CgkJCS8vcHJlc2VydmUgdmFsdWVzIGFjcm9zcyByZWRpcmVjdGlvbgoJCQkkcGFyYW1zWydvYXV0aF90b2tlbiddID0gJF9SRVFVRVNUWydvYXV0aF90b2tlbiddOwoJCQkkcGFyYW1zWydvYXV0aF92ZXJpZmllciddID0gJF9SRVFVRVNUWydvYXV0aF92ZXJpZmllciddOwoJCX0KCX0KCSR0aGlzLT5SZWRpcmVjdCgkaWQsJ3R3dGF1dGgnLCRyZXR1cm5pZCwkcGFyYW1zLFRSVUUpOwp9CmVsc2VpZihpc3NldCgkcGFyYW1zWydjaGFydCddKSB8fCBpc3NldCgkcGFyYW1zWydsaXN0J10pKQp7CgkkcGFyYW1zWyd2aWV3J10gPShpc3NldCgkcGFyYW1zWydjaGFydCddKSkgPyAnY2hhcnQnOidsaXN0JzsKCSRzcWwgPSAnU0VMRUNUICogRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X2JyYWNrZXRzIFdIRVJFIGJyYWNrZXRfaWQ9Pyc7CgkkdmFsID0gJHBhcmFtc1snYnJhY2tldF9pZCddOwp9CmVsc2VpZighZW1wdHkoJHBhcmFtc1snYWxpYXMnXSkpCnsKCSRzcWwgPSAnU0VMRUNUICogRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X2JyYWNrZXRzIFdIRVJFIGFsaWFzPT8nOwoJJHZhbCA9ICRwYXJhbXNbJ2FsaWFzJ107Cn0KZWxzZQp7CglEaXNwbGF5RXJyb3JQYWdlKCR0aGlzLCRzbWFydHksJGRiLCRwYXJhbXMsVFJVRSwkdGhpcy0+TGFuZygnZXJyX3RhZycpKTsKCXJldHVybjsKfQokYmRhdGEgPSAkZGItPkdldFJvdygkc3FsLGFycmF5KCR2YWwpKTsKaWYoISRiZGF0YSkKewoJRGlzcGxheUVycm9yUGFnZSgkdGhpcywkc21hcnR5LCRkYiwkcGFyYW1zLFRSVUUsJHRoaXMtPkxhbmcoJ2Vycl9taXNzaW5nJykpOwoJcmV0dXJuOwp9CgokYnJhY2tldF9pZCA9ICRiZGF0YVsnYnJhY2tldF9pZCddOwovL3JlZnJlc2ggdGhlIG1hdGNoZXMgdGFibGUsaWYgbmVjZXNzYXJ5CiRzY2ggPSBuZXcgdG10U2NoZWR1bGUoKTsKc3dpdGNoKCRiZGF0YVsndHlwZSddKQp7CiBjYXNlIFRvdXJuZXk6OkRFVFlQRToKCSRyZXMgPSAkc2NoLT5VcGRhdGVERU1hdGNoZXMoJHRoaXMsJGJyYWNrZXRfaWQpOwoJYnJlYWs7CiBjYXNlIFRvdXJuZXk6OlJSVFlQRToKCSRyZXMgPSAkc2NoLT5OZXh0UlJNYXRjaGVzKCR0aGlzLCRicmFja2V0X2lkKTsKCWJyZWFrOwogZGVmYXVsdDoKLy8gY2FzZSBUb3VybmV5OktPVFlQRToKCSRyZXMgPSAkc2NoLT5VcGRhdGVLT01hdGNoZXMoJHRoaXMsJGJyYWNrZXRfaWQpOwoJYnJlYWs7Cn0KCmlmKCRyZXMgPT09IFRSVUUpCgkkYmRhdGFbJ2NoYXJ0YnVpbGQnXSA9IDE7IC8vdGVsbCBkb3duc3RyZWFtIHRoYXQgcmVidWlsZCBpcyBuZWVkZWQKJGx5dCA9IG5ldyB0bXRMYXlvdXQoKTsKaWYoZW1wdHkoJHBhcmFtc1sndmlldyddKSB8fCAkcGFyYW1zWyd2aWV3J10gPT0gJ2NoYXJ0JykKewoJJHN0eWxlcyA9KGlzc2V0KCRwYXJhbXNbJ2Nzc2ZpbGUnXSkpID8gJHBhcmFtc1snY3NzZmlsZSddIDogRkFMU0U7CglsaXN0KCRjaGFydGZpbGUsJGVycmtleSkgPSAkbHl0LT5HZXRDaGFydCgkdGhpcywkYmRhdGEsJHN0eWxlcyk7CglpZigkY2hhcnRmaWxlKQoJewoJCSRzcWwgPSAnVVBEQVRFICcuJHByZWYuJ21vZHVsZV90bXRfYnJhY2tldHMgU0VUIGNoYXJ0YnVpbGQ9MCBXSEVSRSBicmFja2V0X2lkPT8nOwoJCSRkYi0+RXhlY3V0ZSgkc3FsLGFycmF5KCRicmFja2V0X2lkKSk7CgkJLy92YXJpYWJsZXMgYXZhaWxhYmxlIGZvciB1c2UgaW4gdGVtcGxhdGUoY29uZm9ybSB0aGVzZSB3aXRoIHRtdEVkaXRTZXR1cDo6U2V0dXAoKSkKCQkkc21hcnR5LT5hc3NpZ24oJ3RpdGxlJywkYmRhdGFbJ25hbWUnXSk7CgkJJHNtYXJ0eS0+YXNzaWduKCdkZXNjcmlwdGlvbicsJGJkYXRhWydkZXNjcmlwdGlvbiddKTsKCQkkc21hcnR5LT5hc3NpZ24oJ293bmVyJywkYmRhdGFbJ293bmVyJ10pOwoJCSRzbWFydHktPmFzc2lnbignY29udGFjdCcsJGJkYXRhWydjb250YWN0J10pOwoJCSRiYXNlbmFtZSA9IGJhc2VuYW1lKCRjaGFydGZpbGUpOwoJCWxpc3QoJGhlaWdodCwkd2lkdGgpID0gJGx5dC0+R2V0Q2hhcnRTaXplKCk7CgkJJHNtYXJ0eS0+YXNzaWduKCdpbWFnZScsJHRoaXMtPkNyZWF0ZUltYWdlT2JqZWN0KCRjb25maWdbJ3Jvb3RfdXJsJ10uJy90bXAvJy4kYmFzZW5hbWUsKGludCkkaGVpZ2h0KzMwKSk7CgkJJHNtYXJ0eS0+YXNzaWduKCdsaXN0JywkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdsaXN0JywkdGhpcy0+TGFuZygnbGlzdCcpKSk7CgkJJGR0ID0gbmV3IERhdGVUaW1lKCdAJy5maWxlbXRpbWUoJGNoYXJ0ZmlsZSksbmV3IERhdGVUaW1lWm9uZSgkYmRhdGFbJ3RpbWV6b25lJ10pKTsKCQkkZm10ID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2RhdGVfZm9ybWF0JykuJyAnLiR0aGlzLT5HZXRQcmVmZXJlbmNlKCd0aW1lX2Zvcm1hdCcpOwoJCSRzbWFydHktPmFzc2lnbignaW1nZGF0ZScsJGR0LT5mb3JtYXQoJGZtdCkpOwoJCSRzbWFydHktPmFzc2lnbignaW1naGVpZ2h0JywkaGVpZ2h0KTsKCQkkc21hcnR5LT5hc3NpZ24oJ2ltZ3dpZHRoJywkd2lkdGgpOwoJCSR0cGwgPSAkdGhpcy0+R2V0VGVtcGxhdGUoJ2NoYXJ0XycuJGJyYWNrZXRfaWQuJ190ZW1wbGF0ZScpOwoJCWlmKCR0cGwgPT0gRkFMU0UpCgkJCSR0cGwgPSAkdGhpcy0+R2V0VGVtcGxhdGUoJ2NoYXJ0X2RlZmF1bHRfdGVtcGxhdGUnKTsKCQkvL21lcmdlIHVzZXItZGVmaW5lZCB0ZW1wbGF0ZSBpbnRvICdyZWFsJyBvbmUKCQkkZm4gPSBjbXNfam9pbl9wYXRoKGRpcm5hbWUoX19GSUxFX18pLCd0ZW1wbGF0ZXMnLCdjaGFydC50cGwnKTsKCQkkZGVmID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRmbik7CgkJJHRwbCA9IHN0cl9yZXBsYWNlKCd8Q1VTVE9NfCcsJHRwbCwkZGVmKTsKCQkkaGlkZGVuID0gJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwndmlldycsJ2NoYXJ0Jyk7Cgl9CgllbHNlCgl7CgkJJHNxbCA9ICdVUERBVEUgJy4kcHJlZi4nbW9kdWxlX3RtdF9icmFja2V0cyBTRVQgY2hhcnRidWlsZD0/IFdIRVJFIGJyYWNrZXRfaWQ9Pyc7CgkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoKGludCkkYmRhdGFbJ2NoYXJ0YnVpbGQnXSwkYnJhY2tldF9pZCkpOwoJCWlmKCRlcnJrZXkpCgkJewoJCQkkZXJyID0gKHN0cnBvcygkZXJya2V5LCdlcnInKSA9PT0gMCk7CgkJCWlmKCRlcnIpCgkJCQkkbWVzc2FnZSA9ICR0aGlzLT5MYW5nKCdlcnJfY2hhcnQnKS4nPGJyIC8+PGJyIC8+Jy4kdGhpcy0+TGFuZygkZXJya2V5KTsKCQkJZWxzZQoJCQkJJG1lc3NhZ2UgPSAkdGhpcy0+TGFuZygkZXJya2V5KTsKCQl9CgkJZWxzZQoJCXsKCQkJJGVyciA9IFRSVUU7CgkJCSRtZXNzYWdlID0gJHRoaXMtPkxhbmcoJ2Vycl9jaGFydCcpOwoJCX0KCQlEaXNwbGF5RXJyb3JQYWdlKCR0aGlzLCRzbWFydHksJGRiLCRwYXJhbXMsJGVyciwkbWVzc2FnZSk7CgkJcmV0dXJuOwoJfQp9CmVsc2UKewoJJHJlcyA9ICRseXQtPkdldExpc3QoJHRoaXMsJGJkYXRhKTsKCWlmKGlzX2FycmF5KCRyZXMpKQoJewoJCSRzbWFydHktPmFzc2lnbignaXRlbXMnLCRyZXMpOwoJCSRzbWFydHktPmFzc2lnbignY2hhcnQnLCR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ2NoYXJ0JywkdGhpcy0+TGFuZygnY2hhcnQnKSkpOwoJCSRmbiA9IGNtc19qb2luX3BhdGgoZGlybmFtZShfX0ZJTEVfXyksJ3RlbXBsYXRlcycsJ2xpc3QudHBsJyk7CgkJJHRwbCA9IEBmaWxlX2dldF9jb250ZW50cygkZm4pOwoJCSRoaWRkZW4gPSAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCd2aWV3JywnbGlzdCcpOwoJfQoJZWxzZSAvLyRyZXMgKGlmIGFueSkgaXMgZXJyb3ItbWVzc2FnZSBrZXkKCXsKCQlpZigkcmVzKQoJCXsKCQkJJGVyciA9IChzdHJwb3MoJHJlcywnZXJyJykgPT09IDApOwoJCQlpZigkZXJyKQoJCQkJJG1lc3NhZ2UgPSAkdGhpcy0+TGFuZygnZXJyX2xpc3QnKS4nPGJyIC8+PGJyIC8+Jy4kdGhpcy0+TGFuZygkcmVzKTsKCQkJZWxzZQoJCQkJJG1lc3NhZ2UgPSAkdGhpcy0+TGFuZygkcmVzKTsKCQl9CgkJZWxzZQoJCXsKCQkJJGVyciA9IFRSVUU7CgkJCSRtZXNzYWdlID0gJHRoaXMtPkxhbmcoJ2Vycl9saXN0Jyk7CgkJfQoJCURpc3BsYXlFcnJvclBhZ2UoJHRoaXMsJHNtYXJ0eSwkZGIsJHBhcmFtcywkZXJyLCRtZXNzYWdlKTsKCQlyZXR1cm47Cgl9Cn0KCmlmKCFlbXB0eSgkcGFyYW1zWydtZXNzYWdlJ10pKQoJJHNtYXJ0eS0+YXNzaWduKCdtZXNzYWdlJyx1cmxkZWNvZGUoJHBhcmFtc1snbWVzc2FnZSddKSk7CiRzbWFydHktPmFzc2lnbignaGlkZGVuJywkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCdicmFja2V0X2lkJywkYnJhY2tldF9pZCkuJGhpZGRlbik7CiRzbWFydHktPmFzc2lnbignc3RhcnRfZm9ybScsJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsJ2RlZmF1bHQnLCRyZXR1cm5pZCkpOwokc21hcnR5LT5hc3NpZ24oJ2VuZF9mb3JtJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJHN1Ym1pdCA9IG51bGw7CmlmKCRiZGF0YVsnY29udGFjdCddKQp7CgkvL2NoZWNrIGZvciBtYXRjaChlcykgc2NoZWR1bGVkICYgdW5zY29yZWQKCWlmKCRzY2gtPlVuUmVjb3JkZWQoJGJyYWNrZXRfaWQpKQoJewoJCS8vY2hlY2sgZm9yIHZhbGlkIGFkZHJlc3MgZm9yIHJlc3VsdHMKCQkkZnVuY3MgPSBuZXcgdG10Q29tbSgkdGhpcyk7CgkJaWYoJGZ1bmNzLT5WYWxpZGF0ZUFkZHJlc3MoJGJkYXRhWydjb250YWN0J10sJGJkYXRhWydzbXNwcmVmaXgnXSwkYmRhdGFbJ3Ntc3BhdHRlcm4nXSkpCgkJCSRzdWJtaXQgPSAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXREZWZhdWx0KCRpZCwncmVzdWx0JywkdGhpcy0+TGFuZygnc3VibWl0MicpKTsKCX0KfQp1bnNldCgkc2NoKTsKJHNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLCRzdWJtaXQpOwoKJHRoaXMtPlByb2Nlc3NEYXRhVGVtcGxhdGUoJHRwbCxUUlVFKTsKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKKi8KLy9wZXJtaXNzaW9ucyBoaWVyYXJjaHkKJHBkZXYgPSAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgQW55IFBhZ2UnKTsKJHBhZG0gPSAkdGhpcy0+Q2hlY2tBY2Nlc3MoJ2FkbWluJyk7CmlmICgkcGFkbSkKewoJJHBtb2QgPSBUUlVFOwoJJHBzY29yZSA9IFRSVUU7CgkkcHZpZXcgPSBUUlVFOwoJJHNtYXJ0eS0+YXNzaWduKCdjb25maWcnLDEpOwoJJHNtYXJ0eS0+YXNzaWduKCdjYW5tb2QnLDEpOwp9CmVsc2UKewoJJHNtYXJ0eS0+YXNzaWduKCdjb25maWcnLDApOwoJJHBtb2QgPSAkdGhpcy0+Q2hlY2tBY2Nlc3MoJ21vZGlmeScpOwoJaWYgKCRwbW9kKQoJewoJCSRwc2NvcmUgPSBUUlVFOwoJCSRwdmlldyA9IFRSVUU7CgkJJHNtYXJ0eS0+YXNzaWduKCdjYW5tb2QnLDEpOwoJfQoJZWxzZQoJewoJCSRwc2NvcmUgPSAkdGhpcy0+Q2hlY2tBY2Nlc3MoJ3Njb3JlJyk7CgkJJHB2aWV3ID0gJHRoaXMtPkNoZWNrQWNjZXNzKCdhZHZpZXcnKTsKCQkkc21hcnR5LT5hc3NpZ24oJ2Nhbm1vZCcsMCk7Cgl9Cn0KCmlmICghZW1wdHkoJHBhcmFtc1sndG10X21lc3NhZ2UnXSkpCgkkc21hcnR5LT5hc3NpZ24oJ21lc3NhZ2UnLCRwYXJhbXNbJ3RtdF9tZXNzYWdlJ10pOwoKaWYoaXNzZXQoJHBhcmFtc1snc2hvd3RhYiddKSkKCSRzaG93dGFiID0gKGludCkkcGFyYW1zWydzaG93dGFiJ107CmVsc2UKCSRzaG93dGFiID0gMDsgLy9kZWZhdWx0CiRzZWV0YWIxID0gKCRzaG93dGFiPT0xKTsKJHNlZXRhYjIgPSAoJHNob3d0YWI9PTIpOwoKJHQgPSAoJHBhZG0pID8gJHRoaXMtPlNldFRhYkhlYWRlcignY29uZmlndXJhdGlvbicsJHRoaXMtPmxhbmcoJ3RhYl9jb25maWcnKSwkc2VldGFiMikgOiAnJzsKJHNtYXJ0eS0+YXNzaWduKCd0YWJfaGVhZGVycycsJHRoaXMtPlN0YXJ0VGFiSGVhZGVycygpLgoJJHRoaXMtPlNldFRhYkhlYWRlcignaXRtZGF0YScsJHRoaXMtPmxhbmcoJ3RhYl9pdGVtcycpKS4KCSR0aGlzLT5TZXRUYWJIZWFkZXIoJ2dycGRhdGEnLCR0aGlzLT5sYW5nKCd0YWJfZ3JvdXBzJyksJHNlZXRhYjEpLgoJJHQuCgkkdGhpcy0+RW5kVGFiSGVhZGVycygpLiR0aGlzLT5TdGFydFRhYkNvbnRlbnQoKSk7CgovL25lZWQgZGl2ZXJzaW9uIGZvciAnaW1wb3J0X2NvbXAnIGFjdGlvbgokc21hcnR5LT5hc3NpZ24oJ3N0YXJ0X2l0ZW1zZm9ybScsJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdwcm9jZXNzX2l0ZW1zJywgJHJldHVybmlkLCAncG9zdCcsJ211bHRpcGFydC9mb3JtLWRhdGEnKSk7Ci8vJHNtYXJ0eS0+YXNzaWduKCdzdGFydF9pdGVtc2Zvcm0nLCR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAncHJvY2Vzc19pdGVtcycsJHJldHVybmlkKSk7CiRzbWFydHktPmFzc2lnbignZW5kX2Zvcm0nLCR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwoKJHNtYXJ0eS0+YXNzaWduKCdzdGFydF9pdGVtc190YWInLCR0aGlzLT5TdGFydFRhYignaXRtZGF0YScpKTsKJHNtYXJ0eS0+YXNzaWduKCdlbmRfdGFiJywkdGhpcy0+RW5kVGFiKCkpOwokc21hcnR5LT5hc3NpZ24oJ3RhYl9mb290ZXJzJywkdGhpcy0+RW5kVGFiQ29udGVudCgpKTsKCiRzbWFydHktPmFzc2lnbigndGl0bGVfbmFtZScsJHRoaXMtPkxhbmcoJ3RpdGxlX25hbWUnKSk7CgokdCA9ICgkcGRldikgPyAkdGhpcy0+TGFuZygndGl0bGVfdGFnJyk6bnVsbDsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV90YWcnLCR0KTsKCiRzbWFydHktPmFzc2lnbigndGl0bGVfZ3JvdXAnLCR0aGlzLT5MYW5nKCd0aXRsZV9ncm91cCcpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9zdGF0dXMnLCR0aGlzLT5MYW5nKCd0aXRsZV9zdGF0dXMnKSk7CgokZ0NtcyA9IGNtc21zKCk7CiR0aGVtZSA9ICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXTsKCiRjb21wcyA9IGFycmF5KCk7CiRqc2Z1bmNzID0gYXJyYXkoKTsKJGpzaW5jdWRlcyA9IGFycmF5KCk7CgokZ3JvdXBzID0gJHRoaXMtPkdldEdyb3VwcygpOwokc2VsZ3JwID0gKCRncm91cHMgJiYgY291bnQoJGdyb3VwcykgPiAxKTsKaWYoJHNlbGdycCkKCSRpbmFjdGl2ZSA9ICR0aGlzLT5MYW5nKCdpbmFjdGl2ZScpOwplbHNlCgkkdW5ncm91cGVkID0gJHRoaXMtPkxhbmcoJ2dyb3VwZGVmYXVsdCcpOwokcHJlZiA9IGNtc19kYl9wcmVmaXgoKTsKJHJvd3MgPSAkZGItPkdldEFsbCgnU0VMRUNUIGJyYWNrZXRfaWQsZ3JvdXBpZCxuYW1lLGFsaWFzIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9icmFja2V0cyBPUkRFUiBCWSBuYW1lJyk7CmlmICgkcm93cykKewoJJHNxbDEgPSAnU0VMRUNUIENPVU5UKDEpIGFzIG51bSBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlcyBXSEVSRSBicmFja2V0X2lkPT8gQU5EIGZsYWdzPTAnOwoJJHNxbDIgPSAkc3FsMS4nIEFORCBzdGF0dXM+PScuVG91cm5leTo6TVJFUzsKCSRzcWwzID0gJHNxbDIuJyBBTkQgdGVhbUE+LTEgQU5EIHRlYW1CPi0xJzsKCSRzcWw0ID0gJHNxbDEuJyBBTkQgc3RhdHVzIT0wIEFORCBzdGF0dXM8Jy5Ub3VybmV5OjpBTk9OOwoKCWlmKCRwbW9kIHx8ICRwc2NvcmUpCgkJJGljb25lZGl0ID0gJHRoZW1lLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9lZGl0LmdpZicsJHRoaXMtPkxhbmcoJ2VkaXQnKSwnJywnJywnc3lzdGVtaWNvbicpOwoJJGljb252aWV3ID0gJHRoZW1lLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS92aWV3LmdpZicsJHRoaXMtPkxhbmcoJ3ZpZXcnKSwnJywnJywnc3lzdGVtaWNvbicpOwoKCWlmKCRwbW9kKQoJewoJCSRpY29uY2xvbmUgPSAkdGhlbWUtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2NvcHkuZ2lmJywkdGhpcy0+TGFuZygnY2xvbmUnKSwnJywnJywnc3lzdGVtaWNvbicpOwoJCSRpY29uZGVsID0gJHRoZW1lLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9kZWxldGUuZ2lmJywkdGhpcy0+TGFuZygnZGVsZXRlJyksJycsJycsJ3N5c3RlbWljb24gZGVsaXRtbGluaycpOyAvL2V4dHJhIGNsYXNzIGZvciBjb25maXJtLWRpYWxvZyB1c2FnZQoJfQoJaWYgKCRwbW9kIHx8ICRwYWRtKQoJewoJCSRhbHQgPSAkdGhpcy0+TGFuZygnZXhwb3J0eG1sJyk7CgkJJGljb25leHBvcnQgPQoJCSc8aW1nIHNyYz0iJy4kdGhpcy0+R2V0TW9kdWxlVVJMUGF0aCgpLicvaW1hZ2VzL3htbC5naWYiIGFsdD0iJy4kYWx0LiciIHRpdGxlPSInLiRhbHQuJyIgYm9yZGVyPSIwIiAvPic7Cgl9CgkKCWZvcmVhY2ggKCRyb3dzIGFzICRiZGF0YSkKCXsKCQkkb25lID0gbmV3IHN0ZENsYXNzKCk7CgkJJHRoaXNpZCA9IChpbnQpJGJkYXRhWydicmFja2V0X2lkJ107CgkJJHRvdGFsID0gJGRiLT5HZXRPbmUoJHNxbDEsYXJyYXkoJHRoaXNpZCkpOwoJCWlmICghJHRvdGFsKQoJCQkkb25lLT5zdGF0dXMgPSAkdGhpcy0+TGFuZygnc3RhdHVzX25vdHlldCcpOwoJCWVsc2UKCQl7CgkJCSRkb25lID0gJGRiLT5HZXRPbmUoJHNxbDIsYXJyYXkoJHRoaXNpZCkpOwoJCQlpZiAoJGRvbmUgPCAkdG90YWwpCgkJCXsKCQkJCSRkb25lID0gJGRiLT5HZXRPbmUoJHNxbDMsYXJyYXkoJHRoaXNpZCkpOyAKCQkJCSRwZW5kaW5nID0gJGRiLT5HZXRPbmUoJHNxbDQsYXJyYXkoJHRoaXNpZCkpOwoJCQkJJG1uID0gKCRkb25lID09IDEpID8gJHRoaXMtPkxhbmcoJ21hdGNoJyk6JHRoaXMtPkxhbmcoJ21hdGNoZXMnKTsKCQkJCSRvbmUtPnN0YXR1cyA9ICR0aGlzLT5MYW5nKCdzdGF0dXNfZ29pbmcnLCRkb25lLCRtbiwkcGVuZGluZyk7CgkJCX0KCQkJZWxzZQoJCQkJJG9uZS0+c3RhdHVzID0gJHRoaXMtPkxhbmcoJ3N0YXR1c19lbmRlZCcpOwoJCX0KCQlpZiAoJHBtb2QgfHwgJHBzY29yZSkKCQl7CgkJCSRvbmUtPm5hbWUgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2FkZGVkaXRfY29tcCcsJycsCgkJCQkkYmRhdGFbJ25hbWUnXSxhcnJheSgnYnJhY2tldF9pZCc9PiR0aGlzaWQpKTsKCQkJJG9uZS0+ZWRpdGxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2FkZGVkaXRfY29tcCcsJycsCgkJCQkkaWNvbmVkaXQsYXJyYXkoJ2JyYWNrZXRfaWQnPT4kdGhpc2lkKSk7CgkJCWlmICgkcGRldikKCQkJCSRvbmUtPmFsaWFzID0gJGJkYXRhWydhbGlhcyddOyAvL2luZm8gZm9yIHNpdGUtY29udGVudCBkZXZlbG9wZXJzCgkJCWlmICgkcG1vZCkKCQkJewoJCQkJJG9uZS0+Y29weWxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2Nsb25lX2NvbXAnLCcnLAoJCQkJCSRpY29uY2xvbmUsYXJyYXkoJ2JyYWNrZXRfaWQnPT4kdGhpc2lkKSk7CgkJCQkkb25lLT5kZWxldGVsaW5rID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkZWxldGVfY29tcCcsJycsCgkJCQkJJGljb25kZWwsYXJyYXkoJ2JyYWNrZXRfaWQnPT4kdGhpc2lkKSk7IC8vJCguZGVsaXRtbGluaykgbW9kYWxjb25maXJtCgkJCX0KCQl9CgkJZWxzZSAvL25vIG1vZCBhbGxvd2VkCgkJewoJCQkkb25lLT5uYW1lID0gJGJkYXRhWyduYW1lJ107CgkJfQoJCWlmKCRzZWxncnApCgkJewoJCQkkZ2lkID0gJGJkYXRhWydncm91cGlkJ107CgkJCSR0ID0gJGdyb3Vwc1skZ2lkXVsnbmFtZSddOwoJCQlpZiAoKGludCkkZ3JvdXBzWyRnaWRdWydmbGFncyddICYgMSA9PT0gMCkKCQkJCSR0IC49ICc6Jy4kaW5hY3RpdmU7CgkJCSRvbmUtPmdyb3VwID0gJHQ7CgkJfQoJCWVsc2UKCQkJJG9uZS0+Z3JvdXAgPSAkdW5ncm91cGVkOwoJCWlmICgkcHZpZXcgfHwgJHBzY29yZSkKCQkJJG9uZS0+dmlld2xpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2FkZGVkaXRfY29tcCcsJycsCgkJCQkkaWNvbnZpZXcsYXJyYXkoJ2JyYWNrZXRfaWQnPT4kdGhpc2lkLCdyZWFsX2FjdGlvbic9Pid2aWV3JykpOwoJCWVsc2UKCQkJJG9uZS0+dmlld2xpbmsgPSAnJzsKCgkJaWYgKCRwbW9kIHx8ICRwYWRtKQoJCXsKCQkJJG9uZS0+ZXhwb3J0bGluayA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2V4cG9ydF9jb21wJywgJycsCgkJCQkkaWNvbmV4cG9ydCwKCQkJCQlhcnJheSgnYnJhY2tldF9pZCc9PiR0aGlzaWQpKTsKCQl9CgkJZWxzZQoJCQkkb25lLT5leHBvcnRsaW5rID0gJyc7CgkJJG9uZS0+c2VsZWN0ZWQgPSAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsJ3NlbGl0ZW1zW10nLCR0aGlzaWQsLTEpOwoKCQlpZiAoKGJvb2wpJG9uZSkgLy9vYmplY3QgaXNuJ3QgZW1wdHkKCQkJJGNvbXBzW10gPSAkb25lOwoJCWVsc2UKCQkJdW5zZXQoJG9uZSk7Cgl9Cn0KCmlmICgkY29tcHMpCnsKCSRpYyA9IGNvdW50KCRjb21wcyk7Cgkkc21hcnR5LT5hc3NpZ24oJ2ljb3VudCcsJGljKTsKCSRzbWFydHktPmFzc2lnbignY29tcHMnLCRjb21wcyk7Cgkkc21hcnR5LT5hc3NpZ24oJ21vZG5hbWUnLCR0aGlzLT5HZXROYW1lKCkpOwoJJHNtYXJ0eS0+YXNzaWduKCdjYW5kZXYnLCRwZGV2KTsKCWlmICgkaWMgPiAxKQoJewoJCSR0ID0gJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCdpdGVtJyxUUlVFLEZBTFNFLCdvbmNsaWNrPSJzZWxlY3RfYWxsX2l0ZW1zKHRoaXMpIicpOwoJCSRqc2Z1bmNzW10gPSA8PDwgRU9TCmZ1bmN0aW9uIHNlbGVjdF9hbGxfaXRlbXMoYikKewogdmFyIHN0ID0gJChiKS5hdHRyKCdjaGVja2VkJyk7CiBpZighc3QpIHN0ID0gZmFsc2U7CiAkKCdpbnB1dFtuYW1lPSJ7JGlkfXNlbGl0ZW1zW10iXVt0eXBlPSJjaGVja2JveCJdJykuYXR0cignY2hlY2tlZCcsc3QpOwp9CkVPUzsKCX0KCWVsc2UKCQkkdCA9ICcnOwoJJHNtYXJ0eS0+YXNzaWduKCdzZWxlY3RhbGxfaXRlbXMnLCR0KTsKCgkkc21hcnR5LT5hc3NpZ24oJ3ByaW50YnRuJywkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdwcmludCcsJHRoaXMtPkxhbmcoJ3ByaW50JyksCgkJJ3RpdGxlPSInLiR0aGlzLT5MYW5nKCdwcmludHNlbF90aXAnKS4nIiBvbmNsaWNrPSJyZXR1cm4gY29uZmlybV9zZWxpdG1fY291bnQoKTsiJykpOwoJJHNtYXJ0eS0+YXNzaWduKCdleHBvcnRidG4nLCR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ2V4cG9ydCcsJHRoaXMtPkxhbmcoJ2V4cG9ydCcpLAoJCSd0aXRsZT0iJy4kdGhpcy0+TGFuZygnZXhwb3J0c2VsX3RpcCcpLiciIG9uY2xpY2s9InJldHVybiBjb25maXJtX3NlbGl0bV9jb3VudCgpOyInKSk7CgkkanNmdW5jc1tdID0gPDw8IEVPUwpmdW5jdGlvbiBzZWxpdG1fY291bnQoKQp7CiB2YXIgY2IgPSAkKCdpbnB1dFtuYW1lPSJ7JGlkfXNlbGl0ZW1zW10iXTpjaGVja2VkJyk7CiByZXR1cm4gY2IubGVuZ3RoOwp9CmZ1bmN0aW9uIGNvbmZpcm1fc2VsaXRtX2NvdW50KCkKewogcmV0dXJuIChzZWxpdG1fY291bnQoKSA+IDApOwp9CkVPUzsKCWlmICgkcG1vZCkKCXsKCQkkc21hcnR5LT5hc3NpZ24oJ25vdGlmeWJ0bicsJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnbm90aWZ5JywkdGhpcy0+TGFuZygnbm90aWZ5JyksCgkJCSd0aXRsZT0iJy4kdGhpcy0+TGFuZygnbm90aWZ5c2VsX3RpcCcpLiciIG9uY2xpY2s9InJldHVybiBjb25maXJtX3NlbGl0bV9jb3VudCgpOyInKSk7CgkJaWYgKCRzZWxncnApCgkJCSR0ID0gJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnZ3JvdXAnLCR0aGlzLT5MYW5nKCd0aXRsZV9ncm91cCcpLAoJCQkndGl0bGU9IicuJHRoaXMtPkxhbmcoJ2dyb3Vwc2VsX3RpcCcpLiciIG9uY2xpY2s9InJldHVybiBjb25maXJtX3NlbGl0bV9jb3VudCgpOyInKTsKCQllbHNlCgkJCSR0ID0gJyc7CgkJJHNtYXJ0eS0+YXNzaWduKCdncm91cGJ0bicsJHQpOwoJCSRzbWFydHktPmFzc2lnbignY2xvbmVidG4nLCR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ2Nsb25lJywkdGhpcy0+TGFuZygnY2xvbmUnKSwKCQkJJ3RpdGxlPSInLiR0aGlzLT5MYW5nKCdjbG9uZXNlbF90aXAnKS4nIiBvbmNsaWNrPSJyZXR1cm4gY29uZmlybV9zZWxpdG1fY291bnQoKTsiJykpOwoJCSRzbWFydHktPmFzc2lnbignZGVsZXRlYnRuJywkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdkZWxldGVfaXRlbScsJHRoaXMtPkxhbmcoJ2RlbGV0ZScpLAoJCQkndGl0bGU9IicuJHRoaXMtPkxhbmcoJ2RlbGV0ZXNlbF90aXAnKS4nIicpKTsgLy8kKCMkaWQuZGVsZXRlX2l0ZW0pIG1vZGFsY29uZmlybQoJCS8vZm9yIHBvcHVwIGNvbmZpcm1hdGlvbgoJCSRzbWFydHktPmFzc2lnbignbm8nLCR0aGlzLT5MYW5nKCdubycpKTsKCQkkc21hcnR5LT5hc3NpZ24oJ3llcycsJHRoaXMtPkxhbmcoJ3llcycpKTsKCQkkanNpbmN1ZGVzW10gPSAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kdGhpcy0+R2V0TW9kdWxlVVJMUGF0aCgpLicvaW5jbHVkZS9qcXVlcnkubW9kYWxjb25maXJtLm1pbi5qcyI+PC9zY3JpcHQ+JzsKCQkkanNmdW5jc1tdID0gPDw8IEVPUwokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogJCgnLmRlbGl0bWxpbmsnKS5tb2RhbGNvbmZpcm0oewogIG92ZXJsYXlJRDogJ2NvbmZpcm0nLAogIHByZVNob3c6IGZ1bmN0aW9uKGQpewogICB2YXIgbmFtZSA9IFwkKCd0ZDpmaXJzdCA+IGEnLCAkKHRoaXMpLmNsb3Nlc3QoJ3RyJykpLnRleHQoKTsKICAgaWYgKG5hbWUuc2VhcmNoKCcgJykgPiAtMSl7IAogICAgbmFtZSA9ICciJytuYW1lKyciJzsKICAgfQogICB2YXIgcGFyYSA9IGQuY2hpbGRyZW4oJ3A6Zmlyc3QnKVswXTsKICAgcGFyYS5pbm5lckhUTUwgPSAneyR0aGlzLT5MYW5nKCdjb25maXJtX2RlbGV0ZScsJyVzJyl9Jy5yZXBsYWNlKCclcycsbmFtZSk7CiAgfQogfSk7CiAkKCcjeyRpZH1kZWxldGVfaXRlbScpLm1vZGFsY29uZmlybSh7CiAgb3ZlcmxheUlEOiAnY29uZmlybScsCiAgZG9DaGVjazogY29uZmlybV9zZWxpdG1fY291bnQsCiAgcHJlU2hvdzogZnVuY3Rpb24oZCl7CiAgIHZhciBwYXJhID0gZC5jaGlsZHJlbigncDpmaXJzdCcpWzBdOwogICBwYXJhLmlubmVySFRNTCA9ICd7JHRoaXMtPkxhbmcoJ2NvbmZpcm1fZGVsZXRlJywkdGhpcy0+TGFuZygnc2VsX2l0ZW1zJykpfSc7CiAgfQogfSk7CiAkKCdmb3JtIGlucHV0W3R5cGU9dGV4dF0nKS5rZXlwcmVzcyhmdW5jdGlvbihlKXsKICBpZiAoZS53aGljaCA9PSAxMyl7CiAgICQoJ2lucHV0W3R5cGU9c3VibWl0XS5kZWZhdWx0JykuZm9jdXMoKTsKICAgcmV0dXJuIGZhbHNlOwogIH0KIH0pOwp9KTsKRU9TOwoJfQp9CmVsc2UgLy9ubyB0b3VybmFtZW50CnsKCSRzbWFydHktPmFzc2lnbignbm90b3VybicsJHRoaXMtPkxhbmcoJ25vX3RvdXJuZXknKSk7Cn0KCmlmICgkcG1vZCkKewoJJHNtYXJ0eS0+YXNzaWduKCdhZGRsaW5rJywkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2FkZGVkaXRfY29tcCcsICcnLAoJCSR0aGVtZS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vbmV3b2JqZWN0LmdpZicsICR0aGlzLT5MYW5nKCd0aXRsZV9hZGRfdG91cm4nKSwnJywnJywnc3lzdGVtaWNvbicpKSk7Cgkkc21hcnR5LT5hc3NpZ24oJ2FkZGxpbmsyJywkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2FkZGVkaXRfY29tcCcsICcnLAoJCSR0aGlzLT5MYW5nKCd0aXRsZV9hZGRfdG91cm4nKSkpOwoKCSRzbWFydHktPmFzc2lnbigndGl0bGVfaW1wb3J0JywkdGhpcy0+TGFuZygndGl0bGVfaW1wb3J0JykpOwoJJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9pbXBvcnQnLCR0aGlzLT5DcmVhdGVJbnB1dEZpbGUoJGlkLCAneG1sZmlsZScsICd0ZXh0L3htbCcsIDI1KSk7Cgkkc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdHhtbCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdpbXBvcnQnLCAkdGhpcy0+TGFuZygndXBsb2FkJykpKTsKfQoKJHNtYXJ0eS0+YXNzaWduKCdzdGFydF9ncnBzX3RhYicsJHRoaXMtPlN0YXJ0VGFiKCdncnBkYXRhJykpOwokc21hcnR5LT5hc3NpZ24oJ3N0YXJ0X2dyb3Vwc2Zvcm0nLCR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAncHJvY2Vzc19ncm91cHMnLCAkcmV0dXJuaWQpKTsKCmlmKCFlbXB0eSgkcGFyYW1zWydhZGRncm91cCddKSkKewoJLy9zZXR1cCB0byBhcHBlbmQgZW1wcnkgcm93CglpZigkZ3JvdXBzKQoJewoJCSRnYyA9IGNvdW50KCRncm91cHMpOwoJCSRncm91cHMgPSAkZ3JvdXBzICsgYXJyYXkoLTEgPT4gYXJyYXkoJ25hbWUnPT4nJywnZGlzcGxheW9yZGVyJz0+JGdjLCdmbGFncyc9PjEpKTsKCX0KCWVsc2UKCQkkZ3JvdXBzID0gYXJyYXkoLTEgPT4gYXJyYXkoJ25hbWUnPT4nJywnZGlzcGxheW9yZGVyJz0+MSwnZmxhZ3MnPT4xKSk7Cn0KCmlmKCRncm91cHMpCnsKCWlmKCRwbW9kKQoJewoJCSRtYyA9IDA7CgkJJHByZXZpZAk9IC0xMDsKCQkkaWNvbnVwID0gJHRoZW1lLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9hcnJvdy11LmdpZicsJHRoaXMtPkxhbmcoJ3VwJyksJycsJycsJ3N5c3RlbWljb24nKTsKCQkkaWNvbmRuID0gJHRoZW1lLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9hcnJvdy1kLmdpZicsJHRoaXMtPkxhbmcoJ2Rvd24nKSwnJywnJywnc3lzdGVtaWNvbicpOwoJCSRpY29uZGVsID0gJHRoZW1lLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9kZWxldGUuZ2lmJywkdGhpcy0+TGFuZygnZGVsZXRlJyksJycsJycsJ3N5c3RlbWljb24gZGVsZ3JwbGluaycpOyAvL2V4dHJhIGNsYXNzIGZvciBjb25maXJtLWRpYWxvZyB1c2FnZQoJfQoJZWxzZQoJewoJCSRubyA9ICR0aGlzLT5MYW5nKCdubycpOwoJCSR5ZXMgPSAkdGhpcy0+TGFuZygneWVzJyk7Cgl9Cgkkc2hvd2dycHMgPSBhcnJheSgpOwoJZm9yZWFjaCAoJGdyb3VwcyBhcyAkZ2lkPT4mJGdkYXRhKQoJewoJCSRvbmUgPSBuZXcgc3RkQ2xhc3MoKTsKCQkkYWN0aXZlID0gKChpbnQpJGdkYXRhWydmbGFncyddICYgMSkgPyBUUlVFOkZBTFNFOwoJCWlmKCRwbW9kKQoJCXsKCQkJJG9uZS0+bmFtZSA9ICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCdncm91cF9uYW1lW10nLCRnZGF0YVsnbmFtZSddLDUwLDEyOCk7CgkJCSRvbmUtPm9yZGVyID0gKGludCkkZ2RhdGFbJ2Rpc3BsYXlvcmRlciddOyAvL2hpZGRlbiwgZm9yIERuRAoJCQkkb25lLT5hY3RpdmUgPSAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsJ2dyb3VwX2FjdGl2ZVtdJywkZ2lkLCgoJGFjdGl2ZSk/JGdpZDotMTApKTsKCQkJJG9uZS0+ZG93bmxpbmsgPSAnJzsKCQkJaWYgKCRtYykKCQkJewoJCQkJLy90aGVyZSdzIGEgcHJldmlvdXMgaXRlbSxjcmVhdGUgdGhlIGFwcHJvcHJpYXRlIGxpbmtzCgkJCQkkb25lLT51cGxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ3N3YXBfZ3JvdXBzJywkcmV0dXJuaWQsCgkJCQkJJGljb251cCxhcnJheSgnZ3JvdXBfaWQnPT4kZ2lkLCdwcmV2X2lkJz0+JHByZXZpZCkpOwoJCQkJJHNob3dncnBzWygkbWMtMSldLT5kb3dubGluayA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnc3dhcF9ncm91cHMnLCRyZXR1cm5pZCwKCQkJCQkkaWNvbmRuLGFycmF5KCdncm91cF9pZCc9PiRwcmV2aWQsJ25leHRfaWQnPT4kZ2lkKSk7CgkJCX0KCQkJZWxzZQoJCQkJJG9uZS0+dXBsaW5rID0gJyc7CgkJCSRtYysrOwoJCQkkcHJldmlkID0gJGdpZDsKCQkJaWYgKCRnaWQgPiAwKSAvL3ByZXNlcnZlIHRoZSBkZWZhdWx0IGdyb3VwCgkJCQkkb25lLT5kZWxldGVsaW5rID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkZWxldGVfZ3JvdXAnLCcnLAoJCQkJCSRpY29uZGVsLGFycmF5KCdncm91cF9pZCc9PiRnaWQpKTsgLy8kKC5kZWxncnBsaW5rKSBtb2RhbGNvbmZpcm0KCQkJZWxzZQoJCQkJJG9uZS0+ZGVsZXRlbGluayA9ICcnOwoJCX0KCQllbHNlIC8vbm8gbW9kIGFsbG93ZWQKCQl7CgkJCSRvbmUtPm5hbWUgPSAkZ2RhdGFbJ25hbWUnXTsKCQkJJG9uZS0+YWN0aXZlID0gKCRhY3RpdmUpID8gJHllcyA6ICRubzsKCQl9CgkJJG9uZS0+c2VsZWN0ZWQgPSAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsJ3NlbGdyb3Vwc1tdJywkZ2lkLC0xKTsKCQkkc2hvd2dycHNbXSA9ICRvbmU7Cgl9Cgl1bnNldCgkZ2RhdGEpOwoJJGdjID0gY291bnQoJHNob3dncnBzKTsKCSRzbWFydHktPmFzc2lnbignZ2NvdW50JywkZ2MpOwoJJHNtYXJ0eS0+YXNzaWduKCdncm91cHMnLCRzaG93Z3Jwcyk7CglpZiAoJGdjID4gMCkKCXsKCQkvL2J1dHRvbnMKCQlpZiAoJHBtb2QpCgkJewoJCQlpZigkc2VsZ3JwKQoJCQkJJHQgPSAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdkZWxldGVfZ3JvdXAnLAoJCQkJCSR0aGlzLT5MYW5nKCdkZWxldGUnKSwKCQkJCQkndGl0bGU9IicuJHRoaXMtPkxhbmcoJ2RlbGV0ZXNlbGdycCcpLiciJyk7IC8vJCgjJGlkLmRlbGV0ZV9ncm91cCkgbW9kYWxjb25maXJtCgkJCWVsc2UKCQkJCSR0ID0gJyc7CgkJCSRzbWFydHktPmFzc2lnbignZGVsZXRlYnRuMicsJHQpOwoJCQlpZigkc2VsZ3JwKQoJCQkJJHQgPSAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdhY3RpdmF0ZScsCgkJCQkJJHRoaXMtPkxhbmcoJ2FjdGl2YXRlJyksCgkJCQkJJ3RpdGxlPSInLiR0aGlzLT5MYW5nKCdhY3RpdmVzZWxncnAnKS4nIiBvbmNsaWNrPSJyZXR1cm4gY29uZmlybV9zZWxncnBfY291bnQoKTsiJyk7CgkJCWVsc2UKCQkJCSR0ID0gJyc7CgkJCSRzbWFydHktPmFzc2lnbignYWN0aXZlYnRuMicsJHQpOwoJCQkkc21hcnR5LT5hc3NpZ24oJ2NhbmNlbGJ0bjInLCR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ2NhbmNlbCcsCgkJCQkkdGhpcy0+TGFuZygnY2FuY2VsJykpKTsKCQkJJHNtYXJ0eS0+YXNzaWduKCdzdWJtaXRidG4yJywkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCd1cGRhdGUnLAoJCQkJJHRoaXMtPkxhbmcoJ3VwZGF0ZScpLAoJCQkJJ3RpdGxlPSInLiR0aGlzLT5MYW5nKCd1cGRhdGVzZWxncnAnKS4nIiBvbmNsaWNrPSJyZXR1cm4gY29uZmlybV9zZWxncnBfY291bnQoKTsiJykpOwoJCQkkanNmdW5jc1tdID0gPDw8IEVPUwpmdW5jdGlvbiBzZWxncnBfY291bnQoKQp7CiB2YXIgY2IgPSAkKCdpbnB1dFtuYW1lPSJ7JGlkfXNlbGdyb3Vwc1tdIl06Y2hlY2tlZCcpOwogcmV0dXJuIGNiLmxlbmd0aDsKfQpmdW5jdGlvbiBjb25maXJtX3NlbGdycF9jb3VudCgpCnsKIHJldHVybiAoc2VsZ3JwX2NvdW50KCkgPiAwKTsKfQpFT1M7CgkJfQoJfQoJCglpZiAoJGdjID4gMSkKCXsKCQlpZiAoJHBtb2QpCgkJewoJCQkvL3NldHVwIHNvbWUgYWpheC1wYXJhbWV0ZXJzIC0gcGFydGlhbCBkYXRhIGZvciB0YWJsZURuRDo6b25Ecm9wCgkJCSR1cmwgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ29yZGVyX2dyb3VwcycsTlVMTCxOVUxMLGFycmF5KCduZXdvcmRlcnMnPT4nJyksTlVMTCxUUlVFKTsKCQkJJG9mZnMgPSBzdHJwb3MoJHVybCwnP21hY3Q9Jyk7CgkJCSRhamZpcnN0ID0gc3RyX3JlcGxhY2UoJ2FtcDsnLCcnLHN1YnN0cigkdXJsLCRvZmZzKzEpKTsKCQkJJGpzZnVuY3NbXSA9IDw8PCBFT1MKZnVuY3Rpb24gc2VsZWN0X2FsbF9ncm91cHMoYikKewogdmFyIHN0ID0gJChiKS5hdHRyKCdjaGVja2VkJyk7CiBpZighc3QpIHN0ID0gZmFsc2U7CiAkKCdpbnB1dFtuYW1lPSJ7JGlkfXNlbGdyb3Vwc1tdIl1bdHlwZT0iY2hlY2tib3giXScpLmF0dHIoJ2NoZWNrZWQnLHN0KTsKfQpmdW5jdGlvbiBhamF4RGF0YShkcm9wcm93LGRyb3Bjb3VudCkKewogdmFyIG9yZGVycyA9IFtdOwogJChkcm9wcm93LnBhcmVudE5vZGUpLmZpbmQoJ3RyIHRkLm9yZCcpLmVhY2goZnVuY3Rpb24oKXsKICBvcmRlcnNbb3JkZXJzLmxlbmd0aF0gPSB0aGlzLmlubmVySFRNTDsKIH0pOwogdmFyIGFqYXhkYXRhID0gJyRhamZpcnN0JytvcmRlcnMuam9pbigpOwogcmV0dXJuIGFqYXhkYXRhOwp9CmZ1bmN0aW9uIGRyb3ByZXNwb25zZShkYXRhLHN0YXR1cykKewogaWYoc3RhdHVzID09ICdzdWNjZXNzJyAmJiBkYXRhKSB7CiAgdmFyIGkgPSAxOwogICQoJyNncm91cHMnKS5maW5kKCcub3JkJykuZWFjaChmdW5jdGlvbigpe1wkKHRoaXMpLmh0bWwoaSsrKTt9KTsKICB2YXIgbmFtZTsKICB2YXIgb2RkY2xhc3MgPSAncm93MSc7CiAgdmFyIGV2ZW5jbGFzcyA9ICdyb3cyJzsKICBpID0gdHJ1ZTsKICAkKCcjZ3JvdXBzJykudHJpZ2dlcigndXBkYXRlJykuZmluZCgndGJvZHkgdHInKS5lYWNoKGZ1bmN0aW9uKCkgewoJbmFtZSA9IGkgPyBvZGRjbGFzcyA6IGV2ZW5jbGFzczsKCVwkKHRoaXMpLnJlbW92ZUNsYXNzKCkuYWRkQ2xhc3MobmFtZSk7CglpID0gIWk7CiAgfSk7CiB9IGVsc2UgewogICQoJyNwYWdlX3RhYnMnKS5wcmVwZW5kKCc8cCBzdHlsZT0iZm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjpyZWQ7Ij57JHRoaXMtPkxhbmcoJ2Vycl9hamF4Jyl9ITwvcD48YnIgLz4nKTsKIH0KfQokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogJCgnI2dyb3VwcycpLmFkZENsYXNzKCd0YWJsZV9kcmFnJykudGFibGVEbkQoewoJZHJhZ0NsYXNzOiAncm93MWhvdmVyJywKCW9uRHJvcDogZnVuY3Rpb24odGFibGUsIGRyb3Byb3dzKSB7CgkJdmFyIG9kZCA9IHRydWU7CgkJdmFyIG9kZGNsYXNzID0gJ3JvdzEnOwoJCXZhciBldmVuY2xhc3MgPSAncm93Mic7CgkJdmFyIGRyb3Byb3cgPSAkKGRyb3Byb3dzKVswXTsKCQkkKHRhYmxlKS5maW5kKCd0Ym9keSB0cicpLmVhY2goZnVuY3Rpb24oKSB7CgkJCXZhciBuYW1lID0gb2RkID8gb2RkY2xhc3MgOiBldmVuY2xhc3M7CgkJCWlmICh0aGlzID09PSBkcm9wcm93KSB7CgkJCQluYW1lID0gbmFtZSsnaG92ZXInOwoJCQl9CgkJCSQodGhpcykucmVtb3ZlQ2xhc3MoKS5hZGRDbGFzcyhuYW1lKTsKCQkJb2RkID0gIW9kZDsKCQl9KTsKCQlpZiAodHlwZW9mIGFqYXhEYXRhICE9PSAndW5kZWZpbmVkJyAmJiAkLmlzRnVuY3Rpb24oYWpheERhdGEpKSB7CQkKCQkJdmFyIGFqYXhkYXRhID0gYWpheERhdGEoZHJvcHJvdyxkcm9wcm93cy5sZW5ndGgpOwoJCQlpZiAoYWpheGRhdGEpIHsKCQkJCSQuYWpheCh7CgkJCQkgdXJsOiAnbW9kdWxlaW50ZXJmYWNlLnBocCcsCgkJCQkgdHlwZTogJ1BPU1QnLAoJCQkJIGRhdGE6IGFqYXhkYXRhLAoJCQkJIGRhdGFUeXBlOiAndGV4dCcsCgkJCQkgc3VjY2VzczogZHJvcHJlc3BvbnNlCgkJCQl9KTsKCQkJfQoJCX0KCX0KIH0pLmZpbmQoJ3Rib2R5IHRyJykucmVtb3ZlQXR0cignb25tb3VzZW92ZXInKS5yZW1vdmVBdHRyKCdvbm1vdXNlb3V0JykubW91c2VvdmVyKGZ1bmN0aW9uKCkgewoJCXZhciBub3cgPSAkKHRoaXMpLmF0dHIoJ2NsYXNzJyk7CgkJJCh0aGlzKS5hdHRyKCdjbGFzcycsIG5vdysnaG92ZXInKTsKIH0pLm1vdXNlb3V0KGZ1bmN0aW9uKCkgewoJCXZhciBub3cgPSAkKHRoaXMpLmF0dHIoJ2NsYXNzJyk7CgkJdmFyIHRvID0gbm93LmluZGV4T2YoJ2hvdmVyJyk7CgkJJCh0aGlzKS5hdHRyKCdjbGFzcycsIG5vdy5zdWJzdHJpbmcoMCx0bykpOwogfSk7CiAkKCcudXBkb3duJykuaGlkZSgpOwogJCgnLmRuZGhlbHAnKS5jc3MoJ2Rpc3BsYXknLCdibG9jaycpOwogJCgnLmRlbGdycGxpbmsnKS5tb2RhbGNvbmZpcm0oewogIG92ZXJsYXlJRDogJ2NvbmZpcm0nLAogIHByZVNob3c6IGZ1bmN0aW9uKGQpewogICB2YXIgbmFtZSA9IFwkKCd0ZCA+IGlucHV0OnRleHQnLCAkKHRoaXMpLmNsb3Nlc3QoJ3RyJykpLnZhbCgpOwogICBpZiAobmFtZS5zZWFyY2goJyAnKSA+IC0xKXsgCiAgICBuYW1lID0gJyInK25hbWUrJyInOwogICB9CiAgIHZhciBwYXJhID0gZC5jaGlsZHJlbigncDpmaXJzdCcpWzBdOwogICBwYXJhLmlubmVySFRNTCA9ICd7JHRoaXMtPkxhbmcoJ2NvbmZpcm1fZGVsZXRlJywnJXMnKX0nLnJlcGxhY2UoJyVzJyxuYW1lKTsKICB9CiB9KTsKICQoJyN7JGlkfWRlbGV0ZV9ncm91cCcpLm1vZGFsY29uZmlybSh7CiAgb3ZlcmxheUlEOiAnY29uZmlybScsCiAgZG9DaGVjazogY29uZmlybV9zZWxncnBfY291bnQsCiAgcHJlU2hvdzogZnVuY3Rpb24oZCl7CiAgIHZhciBwYXJhID0gZC5jaGlsZHJlbigncDpmaXJzdCcpWzBdOwogICBwYXJhLmlubmVySFRNTCA9ICd7JHRoaXMtPkxhbmcoJ2NvbmZpcm1fZGVsZXRlJywkdGhpcy0+TGFuZygnc2VsX2dyb3VwcycpKX0nOwogIH0KIH0pOwp9KTsKRU9TOwoJCQkkanNpbmN1ZGVzW10gPSAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kdGhpcy0+R2V0TW9kdWxlVVJMUGF0aCgpLicvaW5jbHVkZS9qcXVlcnkudGFibGVkbmQubWluLmpzIj48L3NjcmlwdD4nOwoJCQkkc21hcnR5LT5hc3NpZ24oJ2RuZGhlbHAnLCR0aGlzLT5MYW5nKCdoZWxwX2RuZCcpKTsKCQkJJHNtYXJ0eS0+YXNzaWduKCdzb3J0YnRuMicsJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnc29ydCcsCgkJCQkkdGhpcy0+TGFuZygnc29ydCcpKSk7CgkJfQoJCSR0ID0gJHRoaXMtPkxhbmcoJ3RpdGxlX21vdmUnKTsKCQkkY2IgPSAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsJ2dyb3VwJyxUUlVFLEZBTFNFLCdvbmNsaWNrPSJzZWxlY3RfYWxsX2dyb3Vwcyh0aGlzKSInKTsKCX0KCWVsc2UKCXsKCQlpZiAoJHBtb2QpCgkJCSRzbWFydHktPmFzc2lnbignc29ydGJ0bjInLCcnKTsKCQkkdCA9ICcnOwoJCSRjYiA9ICcnOwoJfQoJJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9nbmFtZScsJHRoaXMtPkxhbmcoJ3RpdGxlX25hbWUnKSk7Cgkkc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2FjdGl2ZScsJHRoaXMtPkxhbmcoJ3RpdGxlX2FjdGl2ZScpKTsKCSRzbWFydHktPmFzc2lnbigndGl0bGVfbW92ZScsJHQpOwoJJHNtYXJ0eS0+YXNzaWduKCdzZWxlY3RhbGxfZ3JvdXBzJywkY2IpOwp9CmVsc2UgLy9ubyBncm91cAp7Cgkkc21hcnR5LT5hc3NpZ24oJ25vZ3JvdXBzJywkdGhpcy0+TGFuZygnbm9fZ3JvdXBzJykpOwp9CgppZiAoJHBhZG0pCnsKCSRzbWFydHktPmFzc2lnbignYWRkZ3JwbGluaycsJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdhZGRncm91cCcsJHJldHVybmlkLAoJCSR0aGVtZS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vbmV3b2JqZWN0LmdpZicsJHRoaXMtPkxhbmcoJ2FkZGdyb3VwJyksJycsJycsJ3N5c3RlbWljb24nKSwKCQkJYXJyYXkoKSwnJyxmYWxzZSxmYWxzZSwnJykKCQkuJyAnLgoJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnYWRkZ3JvdXAnLCRyZXR1cm5pZCwKCQkJJHRoaXMtPkxhbmcoJ2FkZGdyb3VwJyksCgkJCWFycmF5KCksJycsZmFsc2UsZmFsc2UsJ2NsYXNzPSJwYWdlb3B0aW9ucyInKSk7Cn0KCmlmICgkcGFkbSkKewoJJHNtYXJ0eS0+YXNzaWduKCdzdGFydF9jb25maWdfdGFiJywkdGhpcy0+U3RhcnRUYWIoJ2NvbmZpZ3VyYXRpb24nKSk7Cgkkc21hcnR5LT5hc3NpZ24oJ3N0YXJ0X2NvbmZpZ2Zvcm0nLCR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnc2F2ZV9jb25maWcnLCAkcmV0dXJuaWQpKTsKCgkkc21hcnR5LT5hc3NpZ24oJ3RpdGxlX25hbWVzX2ZpZWxkc2V0JywgJHRoaXMtPkxhbmcoJ3RpdGxlX25hbWVzX2ZpZWxkc2V0JykpOwoJJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9taXNjX2ZpZWxkc2V0JywgJHRoaXMtPkxhbmcoJ3RpdGxlX21pc2NfZmllbGRzZXQnKSk7CgoJJG5hbWVzID0gYXJyYXkoKTsKCSRuYW1lc1tdID0gYXJyYXkoJHRoaXMtPkxhbmcoJ3RpdGxlX2ZpbmFsJyksCgkJJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICd0bXRfZmluYWwnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbGFzdF9tYXRjaF9uYW1lJyksIDIwKSk7CgkkbmFtZXNbXSA9IGFycmF5KCR0aGlzLT5MYW5nKCd0aXRsZV9zZW1pJyksCgkJJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICd0bXRfc2VtaScsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCcybmRsYXN0X21hdGNoX25hbWUnKSwgMjApKTsKCSRuYW1lc1tdID0gYXJyYXkoJHRoaXMtPkxhbmcoJ3RpdGxlX3F1YXJ0ZXInKSwKCQkkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ3RtdF9xdWFydGVyJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJzNyZGxhc3RfbWF0Y2hfbmFtZScpLCAyMCkpOwoJJG5hbWVzW10gPSBhcnJheSgkdGhpcy0+TGFuZygndGl0bGVfZWlnaHRoJyksCgkJJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICd0bXRfZWlnaHRoJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJzR0aGxhc3RfbWF0Y2hfbmFtZScpLCAyMCkpOwoJJG5hbWVzW10gPSBhcnJheSgkdGhpcy0+TGFuZygndGl0bGVfcm91bmRuYW1lJyksCgkJJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICd0bXRfcm91bmRuYW1lJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ290aGVyX21hdGNoX25hbWUnKSwgMjApLAoJCSR0aGlzLT5MYW5nKCdoZWxwX21hdGNoX25hbWVzJykpOwoJJG5hbWVzW10gPSBhcnJheSgkdGhpcy0+TGFuZygndGl0bGVfYWdhaW5zdCcpLAoJCSR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAndG10X3ZlcnN1cycsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdhZ2FpbnN0X25hbWUnKSwgMjApKTsKCSRuYW1lc1tdID0gYXJyYXkoJHRoaXMtPkxhbmcoJ3RpdGxlX25vb3AnKSwKCQkkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ3RtdF9ieWUnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbm9vcF9uYW1lJyksIDIwKSk7CgkkbmFtZXNbXSA9IGFycmF5KCR0aGlzLT5MYW5nKCd0aXRsZV9mb3JmZWl0JyksCgkJJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICd0bXRfZm9yZmVpdCcsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdmb3JmZWl0X25hbWUnKSwgMjApKTsKCSRuYW1lc1tdID0gYXJyYXkoJHRoaXMtPkxhbmcoJ3RpdGxlX2FiYW5kb25lZCcpLAoJCSR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAndG10X25vbWF0Y2gnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnYWJhbmRvbl9uYW1lJyksIDIwKSk7CgoJJHNtYXJ0eS0+YXNzaWduKCduYW1lcycsJG5hbWVzKTsKCgkkbWlzYyA9IGFycmF5KCk7CgkkYWxsem9uZXMgPSAkdGhpcy0+R2V0VGltZVpvbmVzKCk7CgkkbWlzY1tdID0gYXJyYXkoJHRoaXMtPkxhbmcoJ3RpdGxlX3pvbmUnKSwKCQkkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsICd0bXRfdGltZXpvbmUnLCAkYWxsem9uZXMsICcnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgndGltZV96b25lJykpLAoJCSR0aGlzLT5MYW5nKCdoZWxwX3pvbmUnKSk7CgkkbWlzY1tdID0gYXJyYXkoJHRoaXMtPkxhbmcoJ3RpdGxlX2RhdGVfZm9ybWF0JyksCgkJJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICd0bXRfZGF0ZV9mb3JtYXQnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGF0ZV9mb3JtYXQnKSwgMjApLAoJCSR0aGlzLT5MYW5nKCdoZWxwX2RhdGVfZm9ybWF0JykpOwoJJG1pc2NbXSA9IGFycmF5KCR0aGlzLT5MYW5nKCd0aXRsZV90aW1lX2Zvcm1hdCcpLAoJCSR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAndG10X3RpbWVfZm9ybWF0JywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3RpbWVfZm9ybWF0JyksIDIwKSwKCQkkdGhpcy0+TGFuZygnaGVscF90aW1lX2Zvcm1hdCcpKTsKCWlmKGNsYXNzX2V4aXN0cygnU01TRycsRkFMU0UpKQoJewoJCSRtaXNjW10gPSBhcnJheSgkdGhpcy0+TGFuZygndGl0bGVfcGhvbmVfcmVnZXgnKSwKCQkJJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICd0bXRfcGhvbmVpZCcsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwaG9uZV9yZWdleCcpLCAzMCksCgkJCSR0aGlzLT5MYW5nKCdoZWxwX3Bob25lX3JlZ2V4JykpOwoJfQoJJG1pc2NbXSA9IGFycmF5KCR0aGlzLT5MYW5nKCd0aXRsZV91cGxvYWRzX2RpcicpLAoJCSR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAndG10X3VwbG9hZHNfZGlyJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3VwbG9hZHNfZGlyJywnJyksIDMwKSwKCQkkdGhpcy0+TGFuZygnaGVscF91cGxvYWRzX2RpcicpKTsKLyoJJG1pc2NbXSA9IGFycmF5KCR0aGlzLT5MYW5nKCd0aXRsZV9zdHJpcF9vbl9leHBvcnQnKSwKCQkkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCd0bXRfc3RyaXBfb25fZXhwb3J0JywnMCcpLgoJCSR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ3RtdF9zdHJpcF9vbl9leHBvcnQnLCAnMScsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzdHJpcF9vbl9leHBvcnQnLCcwJykpLAoJCSR0aGlzLT5MYW5nKCdoZWxwX3N0cmlwX29uX2V4cG9ydCcpKTsKCSRtaXNjW10gPSBhcnJheSgkdGhpcy0+TGFuZygndGl0bGVfZXhwb3J0X2ZpbGUnKSwKCQkkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCd0bXRfZXhwb3J0X2ZpbGUnLCcwJykuCgkJJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAndG10X2V4cG9ydF9maWxlJywgJzEnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZXhwb3J0X2ZpbGUnLCcwJykpLAoJCSR0aGlzLT5MYW5nKCdoZWxwX2V4cG9ydF9maWxlJykpOwoqLwoJJGV4cGNoYXJzID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2V4cG9ydF9lbmNvZGluZycsJ1VURi04Jyk7CglpZiAoaW5pX2dldCgnbWJzdHJpbmcuaW50ZXJuYWxfZW5jb2RpbmcnKSAhPT0gRkFMU0UpIC8vUEhQJ3MgZW5jb2RpbmctY29udmVyc2lvbiBjYXBhYmlsaXR5IGlzIGluc3RhbGxlZAoJewoJCSRlbmNvZGluZ3MgPSBhcnJheSgndXRmLTgnPT4nVVRGLTgnLCd3aW5kb3dzLTEyNTInPT4nV2luZG93cy0xMjUyJywgJ2lzby04ODU5LTEnPT4nSVNPLTg4NTktMScpOwoJCSRtaXNjW10gPSBhcnJheSgkdGhpcy0+TGFuZygndGl0bGVfZXhwb3J0X2ZpbGVfZW5jb2RpbmcnKSwKCQkJJHRoaXMtPkNyZWF0ZUlucHV0UmFkaW9Hcm91cCgkaWQsICd0bXRfZXhwb3J0X2VuY29kaW5nJywgJGVuY29kaW5ncywgJGV4cGNoYXJzLCAnJywgJyAnKSk7Cgl9CgllbHNlCgkJJHNtYXJ0eS0+YXNzaWduKCdoaWRkZW4nLCAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCd0bXRfZXhwb3J0X2VuY29kaW5nJywgJGV4cGNoYXJzKSk7CgoJJHNtYXJ0eS0+YXNzaWduKCdtaXNjJywkbWlzYyk7CgoJJHNtYXJ0eS0+YXNzaWduKCdzYXZlJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXREZWZhdWx0KCRpZCwgJ3N1Ym1pdCcsICR0aGlzLT5MYW5nKCdzYXZlJykpKTsKCSRzbWFydHktPmFzc2lnbignY2FuY2VsJywKCQkkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnY2FuY2VsJywgJHRoaXMtPkxhbmcoJ2NhbmNlbCcpKSk7Cn0KZWxzZQp7Cgkkc21hcnR5LT5hc3NpZ24oJ2NhbmNvbmZpZycsMCk7Cn0KCmlmICgkanNmdW5jcykKewoJJHNtYXJ0eS0+YXNzaWduKCdqc2luY3MnLCRqc2luY3VkZXMpOwoJJHNtYXJ0eS0+YXNzaWduKCdqc2Z1bmNzJywkanNmdW5jcyk7Cn0KCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW5wYW5lbC50cGwnKTsKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/action.delete_comp.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKKi8KCmlmICghJHRoaXMtPkNoZWNrQWNjZXNzKCdhZG1vZCcpKQoJJHRoaXMtPlJlZGlyZWN0KCRpZCwnZGVmYXVsdGFkbWluJywnJywKCQlhcnJheSgndG10X21lc3NhZ2UnPT4kdGhpcy0+UHJldHR5TWVzc2FnZSgnbGFja3Blcm1pc3Npb24nLEZBTFNFKSkpOwoKaWYgKGVtcHR5KCRwYXJhbXNbJ2JyYWNrZXRfaWQnXSkpCgkkdGhpcy0+UmVkaXJlY3QoJGlkLCdkZWZhdWx0YWRtaW4nKTsKCiRmdW5jcyA9IG5ldyB0bXREZWxldGUoKTsKJGZ1bmNzLT5EZWxldGVCcmFja2V0KCR0aGlzLChpbnQpJHBhcmFtc1snYnJhY2tldF9pZCddKTsKCiR0aGlzLT5SZWRpcmVjdCgkaWQsJ2RlZmF1bHRhZG1pbicsJycsCglhcnJheSgndG10X21lc3NhZ2UnPT4kdGhpcy0+UHJldHR5TWVzc2FnZSgnY29tcF9kZWxldGVkJykpKTsKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/action.delete_group.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKKi8KCmlmICghJHRoaXMtPkNoZWNrQWNjZXNzKCdhZG1vZCcpKQoJJHRoaXMtPlJlZGlyZWN0KCRpZCwnZGVmYXVsdGFkbWluJywnJywKCQlhcnJheSgnc2hvd3RhYic9PjEsJ3RtdF9tZXNzYWdlJz0+JHRoaXMtPlByZXR0eU1lc3NhZ2UoJ2xhY2twZXJtaXNzaW9uJyxGQUxTRSkpKTsKCmlmICghZW1wdHkoJHBhcmFtc1snZ3JvdXBfaWQnXSkpCnsKCSRwcmVmID0gY21zX2RiX3ByZWZpeCgpOwoJJHNxbCA9ICdVUERBVEUgJy4kcHJlZi4nbW9kdWxlX3RtdF9icmFja2V0cyBTRVQgZ3JvdXBpZD0wIFdIRVJFIGdyb3VwaWQ9Pyc7CgkkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkcGFyYW1zWydncm91cF9pZCddKSk7Cgkkc3FsID0gJ0RFTEVURSBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfZ3JvdXBzIFdIRVJFIGdyb3VwX2lkPT8nOwoJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJHBhcmFtc1snZ3JvdXBfaWQnXSkpOwp9CiR0aGlzLT5SZWRpcmVjdCgkaWQsJ2RlZmF1bHRhZG1pbicsJycsYXJyYXkoJ3Nob3d0YWInPT4xKSk7Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/action.delete_team.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKCk1hcmsgc2luZ2xlIHRlYW0sIG9yIHNlbGVjdGVkIHRlYW0ocyksIGFzIGRlbGV0ZWQgKGZsYWdzID0gMikKKi8KJG5ld3Bhcm1zID0gJHRoaXMtPkdldEVkaXRQYXJtcygkcGFyYW1zLCdwbGF5ZXJzdGFiJyk7CmlmICgkdGhpcy0+Q2hlY2tBY2Nlc3MoJ2FkbW9kJykpCnsKCWlmKGlzc2V0KCRwYXJhbXNbJ2RlbGV0ZV90ZWFtJ10pKSAvL3NpbmdsZSB0ZWFtCgl7CgkJJGNvbmQgPSAnPT8nOwoJCXJlc2V0KCRwYXJhbXNbJ2RlbGV0ZV90ZWFtJ10pOwoJCSR0aWQgPSBrZXkoJHBhcmFtc1snZGVsZXRlX3RlYW0nXSk7CgkJJGFyZ3MgPSBhcnJheSgkdGlkKTsKCX0KCWVsc2VpZighZW1wdHkoJHBhcmFtc1sndHNlbCddKSkgLy9zZWxlY3RlZCB0ZWFtcwoJewoJCSRjb25kID0gJyBJTiAoJy5zdHJfcmVwZWF0KCc/LCcsY291bnQoJHBhcmFtc1sndHNlbCddKS0xKS4nPyknOwoJCSRhcmdzID0gJHBhcmFtc1sndHNlbCddOwoJfQoJJHByZWYgPSBjbXNfZGJfcHJlZml4KCk7Cgkkc3FsID0gJ1VQREFURSAnLiRwcmVmLidtb2R1bGVfdG10X3Blb3BsZSBTRVQgZmxhZ3M9MiBXSEVSRSBpZCcuJGNvbmQ7CgkkZGItPkV4ZWN1dGUoJHNxbCwkYXJncyk7Cgkkc3FsID0gJ1VQREFURSAnLiRwcmVmLidtb2R1bGVfdG10X3RlYW1zIFNFVCBmbGFncz0yIFdIRVJFIHRlYW1faWQnLiRjb25kOwoJJGRiLT5FeGVjdXRlKCRzcWwsJGFyZ3MpOwoJLy91cGRhdGUgcmVtYWluaW5nIGRpc3BsYXlvcmRlcnMKCS8vVE9ETyBmaW5kIGJldHRlciBhcHByb2FjaCBmb3IgdGhpcywgd2l0aG91dCBkYi1zcGVjaWZpYyBzdHVmZgoJJHNxbCA9ICdTRUxFQ1QgdGVhbV9pZCBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfdGVhbXMgV0hFUkUgYnJhY2tldF9pZD0/IEFORCBmbGFncyE9MiBPUkRFUiBCWSBkaXNwbGF5b3JkZXInOwoJJHRlYW1zID0gJGRiLT5HZXRDb2woJHNxbCxhcnJheSgkcGFyYW1zWydicmFja2V0X2lkJ10pKTsKCWlmKCR0ZWFtcykKCXsKCQkkdGwgPSBjb3VudCgkdGVhbXMpIC0gMTsgLy9mb3IgMC1iYXNlZCBjb21wYXJlcwoJCSRvID0gMDsKCQlkbwoJCXsKCQkJJGJhdGNoID0gYXJyYXlfc2xpY2UoJHRlYW1zLCRvLDgsVFJVRSk7IC8vbm8gbmVlZCB0byByZS1pbmRleAoJCQkkdm8gPSAkbysxOyAvLzEtYmFzZWQgb3JkZXIKCQkJJHNxbCA9ICdVUERBVEUgJy4kcHJlZi4nbW9kdWxlX3RtdF90ZWFtcyBTRVQgZGlzcGxheW9yZGVyID0gQ0FTRSB0ZWFtX2lkICc7CgkJCWZvcmVhY2goJGJhdGNoIGFzICR0aWQpCgkJCQkkc3FsIC49ICdXSEVOICcuJHRpZC4nIFRIRU4gJy4oJHZvKyspLicgJzsKCQkJJHNxbCAuPSAnRUxTRSBkaXNwbGF5b3JkZXIgRU5EIFdIRVJFIGJyYWNrZXRfaWQ9Pyc7CgkJCSRkYi0+RXhlY3V0ZSgkc3FsLGFycmF5KCRwYXJhbXNbJ2JyYWNrZXRfaWQnXSkpOwoJCQkkbyArPSA4OwoJCX0gd2hpbGUoJG8gPCAkdGwpOwoJfQoJLy9kZWZlciBhbnkgY29uc2VxdWVudCBtYXRjaC1jaGFuZ2VzIHVudGlsIGNvbXAgc2F2ZS9jYW5jZWwKfQplbHNlCgkkbmV3cGFybXNbJ3RtdF9tZXNzYWdlJ10gPSAkdGhpcy0+UHJldHR5TWVzc2FnZSgnbGFja3Blcm1pc3Npb24nLEZBTFNFKTsKCiR0aGlzLT5SZWRpcmVjdCgkaWQsJ2FkZGVkaXRfY29tcCcsJHJldHVybmlkLCRuZXdwYXJtcyk7Cj8+Cgo=]]></data>
	</file>
	<file>
	  <filename>/action.export_comp.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0KEMpIDIwMTQtMjAxNSBUb20gUGhhbmUgPHRwZ3d3QG9uZXBvc3QubmV0PgpSZWZlciB0byBsaWNlbmNlIGFuZCBvdGhlciBkZXRhaWxzIGF0IHRoZSB0b3Agb2YgZmlsZSBUb3VybmV5Lm1vZHVsZS5waHAKTW9yZSBpbmZvIGF0IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvdG91cm5leQoqLwppZighJHRoaXMtPkNoZWNrQWNjZXNzKCdhZHZpZXcnKSkKCSR0aGlzLT5SZWRpcmVjdCgkaWQsJ2RlZmF1bHRhZG1pbicsJycsCgkJYXJyYXkoJ3RtdF9tZXNzYWdlJz0+JHRoaXMtPlByZXR0eU1lc3NhZ2UoJ2xhY2twZXJtaXNzaW9uJyxGQUxTRSkpKTsKCiRmdW5jcyA9IG5ldyB0bXRYTUwoKTsKJHJlcyA9ICRmdW5jcy0+RXhwb3J0WE1MKCR0aGlzLCRwYXJhbXNbJ2JyYWNrZXRfaWQnXSk7CmlmICgkcmVzID09PSBUUlVFKQoJZXhpdDsKZWxzZQoJJHRoaXMtPlJlZGlyZWN0KCRpZCwnZGVmYXVsdGFkbWluJywnJywKCQlhcnJheSgndG10X21lc3NhZ2UnPT4kdGhpcy0+UHJldHR5TWVzc2FnZSgkcmVzLEZBTFNFKSkpOwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/action.import_comp.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKKi8KCmlmICghICR0aGlzLT5DaGVja0FjY2VzcygnYWRtb2QnKSkKCSR0aGlzLT5SZWRpcmVjdCgkaWQsJ2RlZmF1bHRhZG1pbicsJycsCgkJYXJyYXkoJ3RtdF9tZXNzYWdlJz0+JHRoaXMtPlByZXR0eU1lc3NhZ2UoJ2xhY2twZXJtaXNzaW9uJyxGQUxTRSkpKTsKCiRmaWxlX2RhdGEgPSAkX0ZJTEVTWyRpZC4neG1sZmlsZSddOwppZiAoJGZpbGVfZGF0YVsndHlwZSddICE9ICd0ZXh0L3htbCcKIHx8ICRmaWxlX2RhdGFbJ3NpemUnXSA8PSAwCiB8fCAkZmlsZV9kYXRhWydlcnJvciddICE9IDApCnsKCSR0aGlzLT5SZWRpcmVjdCgkaWQsJ2RlZmF1bHRhZG1pbicsJycsCgkJYXJyYXkoJ3RtdF9tZXNzYWdlJz0+JHRoaXMtPlByZXR0eU1lc3NhZ2UoJ2Vycl9pbXBvcnRfZmFpbGVkJyxGQUxTRSkpKTsKfQoKJHN1Y2Nlc3MgPSBGQUxTRTsKJGZ1bmNzID0gbmV3IHRtdFhNTCgpOwokYnJhY2tldGRhdGEgPSAkZnVuY3MtPkltcG9ydFhNTCgkZmlsZV9kYXRhWyd0bXBfbmFtZSddKTsKaWYgKCRicmFja2V0ZGF0YSAmJiAhZW1wdHkoJGJyYWNrZXRkYXRhWydjb3VudCddKSkgLy9wcm94eSBmb3IgdmFsaWQgdmVyc2lvbiBjaGVjawp7CgkvL1RPRE8gY29udmVydCBpbXBvcnRlZCBkYXRhIGZyb20gVVRGLTggdG8gc2l0ZS1lbmNvZGluZywgaWYgbmVlZGVkCgkvLyRicmFja2V0ZGF0YVsndmVyc2lvbiddID0gc3RyaW5nIGUuZy4gJzAuMVsuMl0nIENIRUNLTUUgdXNlIHRoaXMgPwoJLy8kYnJhY2tldGRhdGFbJ2RhdGUnXSA9IHN0cmluZyBDSEVDS01FIHVzZSB0aGlzID8KCSRwcmVmID0gY21zX2RiX3ByZWZpeCgpOwoJZm9yICgkaT0xOyAkaTw9JGJyYWNrZXRkYXRhWydjb3VudCddOyAkaSsrKQoJewoJCSRmaWVsZHMgPSBhcnJheV9rZXlzKCRicmFja2V0ZGF0YVsnYnJhY2tldCcuJGldWydwcm9wZXJ0aWVzJ10pOwoJCSR2YWx1ZXMgPSBhcnJheV92YWx1ZXMoJGJyYWNrZXRkYXRhWydicmFja2V0Jy4kaV1bJ3Byb3BlcnRpZXMnXSk7CgkJLy9kb24ndCAnZm9yY2UnIE5VTEwgZm9yIGZpZWxkcyB3aGljaCBkZWZhdWx0IHRvIHNvbWV0aGluZyBlbHNlCgkJZm9yZWFjaCAoJHZhbHVlcyBhcyAkaW5keD0+JHZhbCkKCQl7CgkJCWlmICgkdmFsID09PSBOVUxMKQoJCQl7CgkJCQl1bnNldCgkdmFsdWVzWyRpbmR4XSk7CgkJCQl1bnNldCgkZmllbGRzWyRpbmR4XSk7CgkJCX0KCQl9CgkJJGJpZCA9ICRkYi0+R2VuSUQoJHByZWYuJ21vZHVsZV90bXRfYnJhY2tldHNfc2VxJyk7CgkJJGZpeGVyID0gYXJyYXlfc2VhcmNoKCdicmFja2V0X2lkJywkZmllbGRzKTsKCQlpZiAoJGZpeGVyID09PSBGQUxTRSkKCQl7CgkJCWFycmF5X3Vuc2hpZnQoJGZpZWxkcywnYnJhY2tldF9pZCcpOwoJCQlhcnJheV91bnNoaWZ0KCR2YWx1ZXMsJGJpZCk7CgkJfQoJCWVsc2UKCQkJJHZhbHVlc1skZml4ZXJdID0gJGJpZDsKCQkkZml4ZXIgPSBhcnJheV9zZWFyY2goJ25hbWUnLCRmaWVsZHMpOwoJCWlmICgkZml4ZXIgIT09IEZBTFNFKQoJCXsKCQkJaWYoJHZhbHVlc1skZml4ZXJdKQoJCQkJJHZhbHVlc1skZml4ZXJdIC49ICcgJy4kdGhpcy0+TGFuZygnaW1wb3J0Jyk7CgkJCWVsc2UKCQkJCSR2YWx1ZXNbJGZpeGVyXSA9ICR0aGlzLT5MYW5nKCdpbXBvcnQnKS4nICcuJHRoaXMtPkxhbmcoJ25vbmFtZScpOwoJCX0KCQkkZml4ZXIgPSBhcnJheV9zZWFyY2goJ2FsaWFzJywkZmllbGRzKTsKCQlpZiAoJGZpeGVyICE9PSBGQUxTRSkKCQl7CgkJCXVuc2V0KCR2YWx1ZXNbJGZpeGVyXSk7CgkJCXVuc2V0KCRmaWVsZHNbJGZpeGVyXSk7CgkJfQoJCSRmaXhlciA9IGFycmF5X3NlYXJjaCgnY2hhcnRidWlsZCcsJGZpZWxkcyk7CgkJaWYgKCRmaXhlciAhPT0gRkFMU0UpCgkJCSR2YWx1ZXNbJGZpeGVyXSA9IDA7IC8vY2xlYXIgZmxhZwoJCSRmYyA9IGNvdW50KCRmaWVsZHMpOwoJCSRmaWxsZXJzID0gc3RyX3JlcGVhdCgnPywnLCRmYy0xKS4nPyc7CgkJJHNxbCA9ICdJTlNFUlQgSU5UTyAnLiRwcmVmLidtb2R1bGVfdG10X2JyYWNrZXRzICgnLmltcGxvZGUoJywnLCRmaWVsZHMpLicpIFZBTFVFUyAoJy4kZmlsbGVycy4nKSc7CgkJaWYgKCRkYi0+RXhlY3V0ZSgkc3FsLCR2YWx1ZXMpKQoJCXsKCQkJaWYgKCFlbXB0eSgkYnJhY2tldGRhdGFbJ3RlYW1zJ10pICYmIGlzX2FycmF5ICgkYnJhY2tldGRhdGFbJ3RlYW1zJ10pKQoJCQl7CgkJCQkkdGVhbXN3YXBzID0gYXJyYXkoKTsKCQkJCSRmaWVsZHMgPSBhcnJheV9rZXlzKCRicmFja2V0ZGF0YVsndGVhbXMnXVswXSk7CgkJCQkkZml4ZXIgPSBhcnJheV9zZWFyY2goJ2JyYWNrZXRfaWQnLCRmaWVsZHMpOwoJCQkJJGZpeGVyMiA9IGFycmF5X3NlYXJjaCgndGVhbV9pZCcsJGZpZWxkcyk7CgkJCQlpZiAoJGZpeGVyICE9PSBGQUxTRSAmJiAkZml4ZXIyICE9PSBGQUxTRSkKCQkJCXsKCQkJCQkkZml4ZXIzID0gYXJyYXlfc2VhcmNoKCdmbGFncycsJGZpZWxkcyk7CgkJCQkJZm9yZWFjaCAoJGJyYWNrZXRkYXRhWyd0ZWFtcyddIGFzICR0aGlzb25lKQoJCQkJCXsKCQkJCQkJJHZhbHVlcyA9IGFycmF5X3ZhbHVlcygkdGhpc29uZSk7CgkJCQkJCSR2YWx1ZXNbJGZpeGVyXSA9ICRiaWQ7CgkJCQkJCSRpZCA9ICRkYi0+R2VuSUQoJHByZWYuJ21vZHVsZV90bXRfdGVhbXNfc2VxJyk7CgkJCQkJCSR0ZWFtc3dhcHNbJHZhbHVlc1skZml4ZXIyXV0gPSAkaWQ7IC8vbG9nLCBmb3IgY2hhbmdpbmcgdGVhbS1tZW1iZXJzCgkJCQkJCSR2YWx1ZXNbJGZpeGVyMl0gPSAkaWQ7CgkJCQkJCSR2YWx1ZXNbJGZpeGVyM10gPSAxOyAvL2ZsYWcgYWRkZWQgdGVhbQoJCQkJCQkkZmllbGRzID0gYXJyYXlfa2V5cygkdGhpc29uZSk7CgkJCQkJCWZvcmVhY2ggKCR2YWx1ZXMgYXMgJGluZHg9PiR2YWwpCgkJCQkJCXsKCQkJCQkJCWlmICgkdmFsID09PSBOVUxMKQoJCQkJCQkJewoJCQkJCQkJCXVuc2V0KCR2YWx1ZXNbJGluZHhdKTsKCQkJCQkJCQl1bnNldCgkZmllbGRzWyRpbmR4XSk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJJGZjID0gY291bnQoJGZpZWxkcyk7CgkJCQkJCSRmaWxsZXJzID0gc3RyX3JlcGVhdCgnPywnLCRmYy0xKS4nPyc7CgkJCQkJCSRzcWwgPSAnSU5TRVJUIElOVE8gJy4kcHJlZi4nbW9kdWxlX3RtdF90ZWFtcyAoJy5pbXBsb2RlKCcsJywkZmllbGRzKS4nKSBWQUxVRVMgKCcuJGZpbGxlcnMuJyknOwoJCQkJCQkkZGItPkV4ZWN1dGUoJHNxbCwkdmFsdWVzKTsKCQkJCQl9CgkJCQl9CgkJCQlpZiAoIWVtcHR5KCRicmFja2V0ZGF0YVsncGVvcGxlJ10pICYmIGlzX2FycmF5ICgkYnJhY2tldGRhdGFbJ3Blb3BsZSddKSkKCQkJCXsKCQkJCQkkZmllbGRzID0gYXJyYXlfa2V5cygkYnJhY2tldGRhdGFbJ3Blb3BsZSddWzBdKTsKCQkJCQkkZml4ZXIgPSBhcnJheV9zZWFyY2goJ2lkJywkZmllbGRzKTsKCQkJCQkkZml4ZXIyID0gYXJyYXlfc2VhcmNoKCdmbGFncycsJGZpZWxkcyk7CgkJCQkJZm9yZWFjaCAoJGJyYWNrZXRkYXRhWydwZW9wbGUnXSBhcyAkdGhpc29uZSkKCQkJCQl7CgkJCQkJCSR2YWx1ZXMgPSBhcnJheV92YWx1ZXMoJHRoaXNvbmUpOwoJCQkJCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygkdmFsdWVzWyRmaXhlcl0sJHRlYW1zd2FwcykpCgkJCQkJCQkkdmFsdWVzWyRmaXhlcl0gPSAkdGVhbXN3YXBzWyR2YWx1ZXNbJGZpeGVyXV07IC8vbmV3IHRlYW0gaWQKCQkJCQkJJHZhbHVlc1skZml4ZXIyXSA9IDE7IC8vYWRkZWQgbWVtYmVyCgkJCQkJCSRmaWVsZHMgPSBhcnJheV9rZXlzKCR0aGlzb25lKTsKCQkJCQkJZm9yZWFjaCAoJHZhbHVlcyBhcyAkaW5keD0+JHZhbCkKCQkJCQkJewoJCQkJCQkJaWYgKCR2YWwgPT09IE5VTEwpCgkJCQkJCQl7CgkJCQkJCQkJdW5zZXQoJHZhbHVlc1skaW5keF0pOwoJCQkJCQkJCXVuc2V0KCRmaWVsZHNbJGluZHhdKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQkkZmMgPSBjb3VudCgkZmllbGRzKTsKCQkJCQkJJGZpbGxlcnMgPSBzdHJfcmVwZWF0KCc/LCcsJGZjLTEpLic/JzsKCQkJCQkJJHNxbCA9ICdJTlNFUlQgSU5UTyAnLiRwcmVmLidtb2R1bGVfdG10X3Blb3BsZSAoJy5pbXBsb2RlKCcsJywkZmllbGRzKS4nKSBWQUxVRVMgKCcuJGZpbGxlcnMuJyknOwoJCQkJCQkkZGItPkV4ZWN1dGUoJHNxbCwkdmFsdWVzKTsKCQkJCQl9CgkJCQl9CgkJCQlpZiAoIWVtcHR5KCRicmFja2V0ZGF0YVsnbWF0Y2hlcyddKSAmJiBpc19hcnJheSAoJGJyYWNrZXRkYXRhWydtYXRjaGVzJ10pKQoJCQkJewoJCQkJCSRmaWVsZHMgPSBhcnJheV9rZXlzKCRicmFja2V0ZGF0YVsnbWF0Y2hlcyddWzBdKTsKCQkJCQkkZml4ZXIgPSBhcnJheV9zZWFyY2goJ2JyYWNrZXRfaWQnLCRmaWVsZHMpOwoJCQkJCSRmaXhlcjIgPSBhcnJheV9zZWFyY2goJ21hdGNoX2lkJywkZmllbGRzKTsKCQkJCQlpZiAoJGZpeGVyICE9PSBGQUxTRSAmJiAkZml4ZXIyICE9PSBGQUxTRSkKCQkJCQl7CgkJCQkJCS8vVE9ETyBmbGFnICdhZGRlZCcKCQkJCQkJJGZpeGVyMyA9IGFycmF5X3NlYXJjaCgnbmV4dG0nLCRmaWVsZHMpOyAvL2lycmVsZXZhbnQgZm9yIFJSCgkJCQkJCSRmaXhlcjQgPSBhcnJheV9zZWFyY2goJ25leHRsbScsJGZpZWxkcyk7IC8vZGl0dG8gYW5kIGZvciBLTwoJCQkJCQkkbWMgPSBjb3VudCgkYnJhY2tldGRhdGFbJ21hdGNoZXMnXSk7CgkJCQkJCSRzY2ggPSBuZXcgdG10U2NoZWR1bGUoKTsKCQkJCQkJJG1pZCA9ICRzY2gtPlJlc2VydmVNYXRjaGVzKCRkYiwkcHJlZiwkbWMpOwoJCQkJCQkkb2Zmc2V0ID0gJG1pZCAtICRicmFja2V0ZGF0YVsnbWF0Y2hlcyddWzBdWydtYXRjaF9pZCddOyAvL2xvd2VzdCBtYXRjaC1uby4gaXMgc29ydGVkIDFzdAoJCQkJCQlmb3JlYWNoICgkYnJhY2tldGRhdGFbJ21hdGNoZXMnXSBhcyAkdGhpc29uZSkKCQkJCQkJewoJCQkJCQkJJHZhbHVlcyA9IGFycmF5X3ZhbHVlcygkdGhpc29uZSk7CgkJCQkJCQkkdmFsdWVzWyRmaXhlcl0gPSAkYmlkOwoJCQkJCQkJJHZhbHVlc1skZml4ZXIyXSA9ICRtaWQ7CgkJCQkJCQlpZigkZml4ZXIzICE9PSBGQUxTRSkKCQkJCQkJCXsKCQkJCQkJCQlpZigkdmFsdWVzWyRmaXhlcjNdKQoJCQkJCQkJCQkkdmFsdWVzWyRmaXhlcjNdICs9ICRvZmZzZXQ7CgkJCQkJCQl9CgkJCQkJCQlpZigkZml4ZXI0ICE9PSBGQUxTRSkKCQkJCQkJCXsKCQkJCQkJCQlpZigkdmFsdWVzWyRmaXhlcjRdKQoJCQkJCQkJCQkkdmFsdWVzWyRmaXhlcjRdICs9ICRvZmZzZXQ7CgkJCQkJCQl9CgkJCQkJCQkkZmllbGRzID0gYXJyYXlfa2V5cygkdGhpc29uZSk7CgkJCQkJCQlmb3JlYWNoICgkdmFsdWVzIGFzICRpbmR4PT4kdmFsKQoJCQkJCQkJewoJCQkJCQkJCWlmICgkdmFsID09PSBOVUxMKQoJCQkJCQkJCXsKCQkJCQkJCQkJdW5zZXQoJHZhbHVlc1skaW5keF0pOwoJCQkJCQkJCQl1bnNldCgkZmllbGRzWyRpbmR4XSk7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJJGZjID0gY291bnQoJGZpZWxkcyk7CgkJCQkJCQkkZmlsbGVycyA9IHN0cl9yZXBlYXQoJz8sJywkZmMtMSkuJz8nOwoJCQkJCQkJJHNxbCA9ICdJTlNFUlQgSU5UTyAnLiRwcmVmLidtb2R1bGVfdG10X21hdGNoZXMgKCcuaW1wbG9kZSgnLCcsJGZpZWxkcykuJykgVkFMVUVTICgnLiRmaWxsZXJzLicpJzsKCQkJCQkJCSRkYi0+RXhlY3V0ZSgkc3FsLCR2YWx1ZXMpOwoJCQkJCQkJJG1pZCsrOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9CgkJCSRzdWNjZXNzID0gVFJVRTsKCQl9CgkJZWxzZQoJCQkkc3VjY2VzcyA9IEZBTFNFOwoJfQp9CgppZiAoJHN1Y2Nlc3MpCnsKCS8vc2lnbmFsIGFkZGVkIGJyYWNrZXQocykKCSRtZXNzYWdlID0gJHRoaXMtPlByZXR0eU1lc3NhZ2UoJ3N1Y2Nlc3NfaW1wb3J0Jyk7CglpZigkYnJhY2tldGRhdGFbJ2NvdW50J10gPT0gMSkKCQkkdGhpcy0+UmVkaXJlY3QoJGlkLCdhZGRlZGl0X2NvbXAnLCRyZXR1cm5pZCwKCQkJYXJyYXkoJ2JyYWNrZXRfaWQnPT4kYmlkLCduZXdicmFja2V0Jz0+JGJpZCwndG10X21lc3NhZ2UnPT4kbWVzc2FnZSkpOwp9CmVsc2UKewoJJG1lc3NhZ2UgPSAkdGhpcy0+UHJldHR5TWVzc2FnZSgnZXJyX2ltcG9ydF9mYWlsZWQnLEZBTFNFKTsKCSR0aGlzLT5SZWRpcmVjdCgkaWQsJ2RlZmF1bHRhZG1pbicsJycsYXJyYXkoJ3RtdF9tZXNzYWdlJz0+JG1lc3NhZ2UpKTsKfQoKPz4K]]></data>
	</file>
	<file>
	  <filename>/action.import_team.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKKi8KCmlmICghZnVuY3Rpb25fZXhpc3RzKCdHZXRTcGxpdExpbmUnKSkKewogZnVuY3Rpb24gVG9DaHIoJG1hdGNoKQogewogCSRzdCA9ICgkbWF0Y2hbMF1bMF0gPT0gJyYnKSA/IDI6MTsKCXJldHVybiBjaHIoc3Vic3RyKCRtYXRjaFswXSwkc3QsMikpOwogfQoKIGZ1bmN0aW9uIEdldFNwbGl0TGluZSgmJGZoKQogewoJZG8KCXsKCQkkZmllbGRzID0gZmdldGNzdigkZmgsNDA5Nik7CgkJaWYoaXNfbnVsbCgkZmllbGRzKSB8fCAkZmllbGRzID09IEZBTFNFKQoJCQlyZXR1cm4gRkFMU0U7Cgl9IHdoaWxlKGNvdW50KCRmaWVsZHMpID09IDEgJiYgaXNfbnVsbCgkZmllbGRzWzBdKSk7IC8vYmxhbmsgbGluZQogCS8vY29udmVydCBhbnkgc2VwYXJhdG9yIHN1cHBvcnRlZCBieSB0bXRDU1Y6OlRlYW1zVG9DU1YoKQoJZm9yZWFjaCAoJGZpZWxkcyBhcyAmJHRoaXNmaWVsZCkKCQkkdGhpc2ZpZWxkID0gdHJpbShwcmVnX3JlcGxhY2VfY2FsbGJhY2soCgkJCWFycmF5KCcvJiNcZFxkOy8nLCcvJVxkXGQlLycpLCdUb0NocicsJHRoaXNmaWVsZCkpOwoJdW5zZXQoJHRoaXNmaWVsZCk7CglyZXR1cm4gJGZpZWxkczsKIH0KfQoKaWYgKGlzc2V0KCRwYXJhbXNbJ2NhbmNlbCddKSkKCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdhZGRlZGl0X2NvbXAnLCAkcmV0dXJuaWQsICR0aGlzLT5HZXRFZGl0UGFybXMoJHBhcmFtcywncGxheWVyc3RhYicpKTsKCmlmICghJHRoaXMtPkNoZWNrQWNjZXNzKCdhZG1vZCcpKQp7CgkkbmV3cGFybXMgPSAkdGhpcy0+R2V0RWRpdFBhcm1zKCRwYXJhbXMsJ3BsYXllcnN0YWInLCR0aGlzLT5QcmV0dHlNZXNzYWdlKCdsYWNrcGVybWlzc2lvbicsRkFMU0UpKTsKCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdhZGRlZGl0X2NvbXAnLCAkcmV0dXJuaWQsICRuZXdwYXJtcyk7Cn0KCiRmbiA9ICRpZC4nY3N2ZmlsZSc7CmlmIChpc3NldCgkX0ZJTEVTKSAmJiBpc3NldCgkX0ZJTEVTWyRmbl0pKQp7CgkkZmlsZV9kYXRhID0gJF9GSUxFU1skZm5dOwoJJHBhcnRzID0gZXhwbG9kZSgnLicsJGZpbGVfZGF0YVsnbmFtZSddKTsKCSRleHQgPSBlbmQoJHBhcnRzKTsKLy9UT0RPICR0eXBlPTsJbGlzdCgkbWluLCRtYXgpID0gJHRoaXMtPkdldExpbWl0cygkdHlwZSk7CglpZiAoJGZpbGVfZGF0YVsndHlwZSddICE9ICd0ZXh0L2NzdicKCSB8fCAhKCRleHQgPT0gJ2NzdicgfHwgJGV4dCA9PSAnQ1NWJykKICAgICB8fCAkZmlsZV9kYXRhWydzaXplJ10gPD0gMCB8fCAkZmlsZV9kYXRhWydzaXplJ10gPiAyNTYwMCAvLyRtYXgqMTAwMCAodGVhbXMgbWF5IGhhdmUgbG90cyBvZiBtZW1iZXJzKQogICAgIHx8ICRmaWxlX2RhdGFbJ2Vycm9yJ10gIT0gMCkKCXsKCQkkbmV3cGFybXMgPSAkdGhpcy0+R2V0RWRpdFBhcm1zKCRwYXJhbXMsJ3BsYXllcnN0YWInLCR0aGlzLT5QcmV0dHlNZXNzYWdlKCdlcnJfZmlsZScsRkFMU0UpKTsKCQkkdGhpcy0+UmVkaXJlY3QoJGlkLCAnYWRkZWRpdF9jb21wJywgJHJldHVybmlkLCAkbmV3cGFybXMpOwoJfQoKCSRoYW5kbGUgPSBmb3BlbigkZmlsZV9kYXRhWyd0bXBfbmFtZSddLCdyJyk7CglpZiAoISRoYW5kbGUgKQoJewoJCSRuZXdwYXJtcyA9ICR0aGlzLT5HZXRFZGl0UGFybXMoJHBhcmFtcywncGxheWVyc3RhYicsJHRoaXMtPlByZXR0eU1lc3NhZ2UoJ2xhY2twZXJtaXNzaW9uJyxGQUxTRSkpOwoJCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdhZGRlZGl0X2NvbXAnLCAkcmV0dXJuaWQsICRuZXdwYXJtcyk7Cgl9CgkkYmFkID0gRkFMU0U7CgkvL3NvbWUgYmFzaWMgdmFsaWRhdGlvbiBvZiBmaWxlLWNvbnRlbnQKCSRmaXJzdGxpbmUgPSBHZXRTcGxpdExpbmUoJGhhbmRsZSk7CglpZiAoJGZpcnN0bGluZSA9PSBGQUxTRSkKCQkkYmFkID0gVFJVRTsKCWlmICghJGJhZCkKCXsKCQkkbnVtID0gY291bnQoJGZpcnN0bGluZSk7CgkJaWYgKCRudW0gPT0gMCkKCQkJJGJhZCA9IFRSVUU7Cgl9CglpZiAoISRiYWQpCgl7CgkJJG5hbWVjb2xzID0gYXJyYXkoKTsgLy9bMF09bmFtZWNvbCBvciBtaXNzaW5nLCBbMV09c2VlZGNvbCBvciBtaXNzaW5nLCBbMl09dGVsbGNvbCBvciBtaXNzaW5nCgkJZm9yZWFjaCAoYXJyYXkoJyNUZWFtbmFtZScsJyNTZWVkZWQnLCcjVGVsbGFsbCcpIGFzICRpPT4kY3VzdG9tKQoJCXsKCQkJJGNvbCA9IGFycmF5X3NlYXJjaCgkY3VzdG9tLCAkZmlyc3RsaW5lKTsKCQkJaWYgKCRjb2wgIT09IEZBTFNFKQoJCQl7CgkJCQlpZiAoJGNvbCA8IDMpCgkJCQkJJG5hbWVjb2xzWyRpXSA9ICRjb2w7CgkJCQllbHNlCgkJCQl7CgkJCQkJJGJhZCA9IFRSVUU7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQl9CgkJaWYoJG5hbWVjb2xzKQoJCXsKCQkJJG1vID0gbWF4KCRuYW1lY29scyk7CgkJCWlmICgkbW8gPiAwKQoJCQl7CgkJCQlpZiAoKCRudW0tJG1vLTEpJTIpIC8vd2FudCBldmVuIG5vLiBvZiBwbGF5ZXItZmllbGRzCgkJCQkJJGJhZCA9IFRSVUU7CgkJCX0KCQkJZWxzZSAvLyRtbyA9PSAwCgkJCXsKCQkJCWlmKCRudW0lMiA9PSAwKQoJCQkJCSRiYWQgPSBUUlVFOwoJCQl9CgkJfQoJCWVsc2UKCQl7CgkJCSRtbyA9IC0xOwoJCQlpZigkbnVtJTIgPT0gMSkKCQkJCSRiYWQgPSBUUlVFOwoJCX0KCX0KCWlmICgkYmFkKQoJewoJCSRuZXdwYXJtcyA9ICR0aGlzLT5HZXRFZGl0UGFybXMoJHBhcmFtcywncGxheWVyc3RhYicsJHRoaXMtPlByZXR0eU1lc3NhZ2UoJ2Vycl9maWxlJyxGQUxTRSkpOwoJCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdhZGRlZGl0X2NvbXAnLCAkcmV0dXJuaWQsICRuZXdwYXJtcyk7Cgl9CgoJJG1vKys7IC8vYWZ0ZXIgbGFzdCBvcHRpb25hbCBmaWVsZCwgbm93IGluZGV4IG9mIDFzdCBwbGF5ZXItZmllbGQKCgkkcHJlZiA9IGNtc19kYl9wcmVmaXgoKTsKCSRzcWwgPSAnU0VMRUNUIE1BWChkaXNwbGF5b3JkZXIpIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF90ZWFtcyBXSEVSRSBicmFja2V0X2lkPT8gQU5EIGZsYWdzIT0yJzsKCSR0ZWFtb3JkZXIgPSBpbnR2YWwoJGRiLT5HZXRPbmUoJHNxbCxhcnJheSgkcGFyYW1zWydicmFja2V0X2lkJ10pKSkgKyAxOwoJLy9zdG9yZSBpbXBvcnRlZCBkYXRhIHdpdGggYWRkZWQtZmxhZ3Mgc2V0Cgkkc3FsID0gJ0lOU0VSVCBJTlRPICcuJHByZWYuJ21vZHVsZV90bXRfdGVhbXMgVkFMVUVTICg/LD8sPyw/LD8sPywxKSc7Cgkkc3FsMiA9ICdJTlNFUlQgSU5UTyAnLiRwcmVmLidtb2R1bGVfdG10X3Blb3BsZSBWQUxVRVMgKD8sPyw/LD8sMSknOwoJJGFkZGVkID0gYXJyYXkoKTsKCXdoaWxlKCFmZW9mKCRoYW5kbGUpKQoJewoJCSRpbXBvcnRzID0gR2V0U3BsaXRMaW5lKCRoYW5kbGUpOwoJCWlmICgkaW1wb3J0cykKCQl7CgkJCS8vQmVmb3JlIHRoZSBicmFja2V0IGlzIGZpcnN0IHNhdmVkLCAkcGFyYW1zWydicmFja2V0X2lkJ10gd2lsbCBiZSBzb21lIGZvcm0gb2YgRkFMU0UKCQkJLy9zbyB3ZSBmYWtlIGFuIGlkICgtInRoZSBuZXh0IHJlYWwgSUQiKSB0byBzZW5kIGJhY2ssIGl0IHdpbGwgbmVlZCB0byBiZSBmaXhlZCBsYXRlcgoJCQlpZiAoJHBhcmFtc1snYnJhY2tldF9pZCddID09IEZBTFNFKQoJCQkJJHBhcmFtc1snYnJhY2tldF9pZCddID0gLSRkYi0+R2VuSUQoJHByZWYuJ21vZHVsZV90bXRfYnJhY2tldHNfc2VxJyk7Ci8vJGltcG9ydHMgaXMgYXJyYXksIFswfDF8Mj0+dGVhbW5hbWVdWywwfDF8Mj0+c2VlZGluZ11bLDB8MXwyPT50ZWxsYWxsXVssMz0+cGxheWVyMSw0PT5jb250YWN0MV1bLi4uLl0gZm9yIGFzIG1hbnkgcGxheWVycyBhcyB0aGVyZSBhcmUKCQkJJGFkZGlkID0gJGRiLT5HZW5JRCgkcHJlZi4nbW9kdWxlX3RtdF90ZWFtc19zZXEnKTsKCQkJJGFyZ3MgPSBhcnJheSgkYWRkaWQsIChpbnQpJHBhcmFtc1snYnJhY2tldF9pZCddKTsKCQkJJGFyZ3NbXSA9IChpc3NldCgkbmFtZWNvbHNbMF0pICYmICRpbXBvcnRzWyRuYW1lY29sc1swXV0pID8gdHJpbSgkaW1wb3J0c1skbmFtZWNvbHNbMF1dKSA6IG51bGw7CgkJCSRhcmdzW10gPSAoaXNzZXQoJG5hbWVjb2xzWzFdKSAmJiAkaW1wb3J0c1skbmFtZWNvbHNbMV1dKSA/IChpbnQpJGltcG9ydHNbJG5hbWVjb2xzWzFdXSA6IG51bGw7CgkJCWlmIChpc3NldCgkbmFtZWNvbHNbMl0pICYmICRpbXBvcnRzWyRuYW1lY29sc1syXV0gJiYKCQkJCXN0cnRvbG93ZXIodHJpbSgkaW1wb3J0c1skbmFtZWNvbHNbMl1dKSkgIT0gJ25vJykKCQkJCQkkdmFsID0gMTsKCQkJZWxzZQoJCQkJJHZhbCA9IDA7CgkJCSRhcmdzW10gPSAkdmFsOwoJCQkkYXJnc1tdID0gJHRlYW1vcmRlcjsgLy9hbG1vc3QgY2VydGFpbmx5IGFkanVzdGVkIGxhdGVyCgkJCSRkYi0+RXhlY3V0ZSgkc3FsLCRhcmdzKTsKCQkJaWYgKCRudW0gPiAkbW8pCgkJCXsKCQkJCSRvcmRlciA9IDE7CgkJCQlmb3IgKCRpPSRtbzsgJGk8JG51bTsgJGkrPTIpCgkJCQl7CgkJCQkJJG5hbWUgPSAoJGltcG9ydHNbJGldKSA/ICRpbXBvcnRzWyRpXSA6IG51bGw7CgkJCQkJJGNvbnRhY3QgPSAoJGltcG9ydHNbJGkrMV0pID8gJGltcG9ydHNbJGkrMV0gOiBudWxsOwoJCQkJCWlmICgkbmFtZSB8fCAkY29udGFjdCkKCQkJCQl7CgkJCQkJCSRhcmdzID0gYXJyYXkoJGFkZGlkLCRuYW1lLCRjb250YWN0LCRvcmRlcik7CgkJCQkJCSRkYi0+RXhlY3V0ZSgkc3FsMiwkYXJncyk7CgkJCQkJCSRvcmRlcisrOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQkkYWRkZWRbXSA9ICRhZGRpZDsKCQkJJHRlYW1vcmRlcisrOwoJCX0KCX0KCWZjbG9zZSgkaGFuZGxlKTsKCgkkbmV3cGFybXMgPSAkdGhpcy0+R2V0RWRpdFBhcm1zKCRwYXJhbXMsJ3BsYXllcnN0YWInKTsKCWlmICgkYWRkZWQpCgkJJG5ld3Bhcm1zWydhZGRlZF9pZCddID0gaW1wbG9kZSgnOycsJGFkZGVkKTsKCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdhZGRlZGl0X2NvbXAnLCAkcmV0dXJuaWQsICRuZXdwYXJtcyk7Cn0KCiRzbWFydHktPmFzc2lnbignc3RhcnRfZm9ybScsJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdpbXBvcnRfdGVhbScsICRyZXR1cm5pZCwgJ3Bvc3QnLCdtdWx0aXBhcnQvZm9ybS1kYXRhJykpOwokc21hcnR5LT5hc3NpZ24oJ2VuZF9mb3JtJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJHNtYXJ0eS0+YXNzaWduKCdoaWRkZW4nLCR0aGlzLT5HZXRIaWRkZW5QYXJtcygkaWQsJHBhcmFtcywncGxheWVyc3RhYicpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aXRsZScsJHRoaXMtPkxhbmcoJ3RpdGxlX3RlYW1pbXBvcnQnLCRwYXJhbXNbJ3RtdF9uYW1lJ10pKTsKJHNtYXJ0eS0+YXNzaWduKCdjaG9vc2VyJywkdGhpcy0+Q3JlYXRlSW5wdXRGaWxlKCRpZCwgJ2NzdmZpbGUnLCAndGV4dC9jc3YnLCAyNSkpOwokc21hcnR5LT5hc3NpZ24oJ2FwcGx5JywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0RGVmYXVsdCgkaWQsICdpbXBvcnQnLCAkdGhpcy0+TGFuZygndXBsb2FkJykpKTsKJHNtYXJ0eS0+YXNzaWduKCdjYW5jZWwnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnY2FuY2VsJywgJHRoaXMtPkxhbmcoJ2NhbmNlbCcpKSk7CiRzbWFydHktPmFzc2lnbignaGVscCcsJHRoaXMtPkxhbmcoJ2hlbHBfdGVhbWltcG9ydCcpKTsKCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnb25lcGFnZS50cGwnKTsKPz4K]]></data>
	</file>
	<file>
	  <filename>/action.move_team.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKKi8KLyogYWN0aW9uIGZvciBhamF4LXByb2Nlc3NpbmcsIGFmdGVyIHRlYW1zLXRhYmxlIHJvdyhzKSBoYXZlIGJlZW4gZHJhZ2dlZCBhbmQgZHJvcHBlZAogICRwYXJhbXNbXSBpbmNsdWRlcwogICdicmFja2V0X2lkJwogICduZXdvcmRlcnMnIHN0cmluZyB3aXRoIGNvbW1hLXNlcGFyYXRlZCBkaXNwbGF5b3JkZXIgdmFsdWVzIG9mIGFsbCB0ZWFtcyBlLmcuICcyLDMsNiwxJwoqLwppZiAoISR0aGlzLT5DaGVja0FjY2VzcygnYWRtb2QnKSkKewoJZWNobyAwOwoJZXhpdDsKfQokbmV3cyA9IGV4cGxvZGUoJywnLCRwYXJhbXNbJ25ld29yZGVycyddKTsKJG5jID0gY291bnQoJG5ld3MpOwppZiAoJG5jIDwgMikKCWV4aXQ7CS8vYSBzaW5nbGUgcm93LCBub3RoaW5nIHRvIGRvCiRwcmVmID0gY21zX2RiX3ByZWZpeCgpOwokc3FsID0gJ1NFTEVDVCB0ZWFtX2lkIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF90ZWFtcyBXSEVSRSBicmFja2V0X2lkPT8gQU5EIGZsYWdzIT0yIE9SREVSIEJZIGRpc3BsYXlvcmRlcic7CiR0ZWFtcyA9ICRkYi0+R2V0Q29sKCRzcWwsIGFycmF5KCRwYXJhbXNbJ2JyYWNrZXRfaWQnXSkpOwppZiAoJHRlYW1zID09PSBGQUxTRSB8fCBjb3VudCgkdGVhbXMpICE9ICRuYykKewoJZWNobyAwOwoJZXhpdDsKfQokc3FsID0gJ1VQREFURSAnLiRwcmVmLidtb2R1bGVfdG10X3RlYW1zIFNFVCBkaXNwbGF5b3JkZXIgPSBDQVNFIHRlYW1faWQgJzsKZm9yZWFjaCAoJHRlYW1zIGFzICR0aWQpCiAgICAkc3FsIC49ICdXSEVOICcuKGludCkkdGlkLicgVEhFTiA/ICc7CiRzcWwgLj0gJ0VMU0UgZGlzcGxheW9yZGVyIEVORCBXSEVSRSB0ZWFtX2lkIElOICgnLmltcGxvZGUoJywnLCR0ZWFtcykuJyknOwppZiAoJGRiLT5FeGVjdXRlICgkc3FsLCRuZXdzKSkKCWVjaG8gJG5jOyAvL3NlbmQgYmFjayB0aGUgY291bnQgb2YgdXBkYXRlcwplbHNlCgllY2hvIDA7CmV4aXQ7Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/action.multi_task.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKKi8KaWYoaXNzZXQoJHBhcmFtc1snZXhwb3J0J10pKQp7CgkkbmV3cGFybXMgPSAkdGhpcy0+R2V0RWRpdFBhcm1zKCRwYXJhbXMsJ3BsYXllcnN0YWInKTsKCWlmICghZW1wdHkoJHBhcmFtc1sndHNlbCddKSkKCXsKLyoJCWlmKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdleHBvcnRfZmlsZScsMCkpCgkJewoJCQkkcGF0aCA9IFRPRE9QQVRIOwoJCQkkaGFuZGxlID0gZm9wZW4oJHBhdGgsJ3cnKTsKCQkJaWYoJGhhbmRsZSkKCQkJewoJCQkJJGZ1bmNzID0gbmV3IHRtdENTVigpOwoJCQkJJGZ1bmNzLT5UZWFtc1RvQ1NWKCR0aGlzLCRwYXJhbXNbJ2JyYWNrZXRfaWQnXSwkcGFyYW1zWyd0c2VsJ10sRkFMU0UsJGhhbmRsZSk7CgkJCQlmY2xvc2UoJGhhbmRsZSk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkbmV3cGFybXNbJ3RtdF9tZXNzYWdlJ10gPSAkdGhpcy0+UHJldHR5TWVzc2FnZSgnVE9ETyBDQU5UIFdSSVRFIEZJTEUnLEZBTFNFKSk7CgkJCX0KCQl9CgkJZWxzZQoJCXsKKi8KCQkkZnVuY3MgPSBuZXcgdG10Q1NWKCk7CgkJJGZ1bmNzLT5UZWFtc1RvQ1NWKCR0aGlzLCRwYXJhbXNbJ2JyYWNrZXRfaWQnXSwkcGFyYW1zWyd0c2VsJ10pOwoJCXJldHVybjsKLy8JCX0KCX0KfQplbHNlaWYoaXNzZXQoJHBhcmFtc1snbm90aWZ5J10pIHx8IGlzc2V0KCRwYXJhbXNbJ2FiYW5kb24nXSkpCnsKCSRuZXdwYXJtcyA9ICR0aGlzLT5HZXRFZGl0UGFybXMoJHBhcmFtcywnbWF0Y2hlc3RhYicpOwoJaWYoIWVtcHR5KCRwYXJhbXNbJ21zZWwnXSkpCgl7CgkJaWYoaXNzZXQoJHBhcmFtc1snbm90aWZ5J10pKQoJCQkkdHBsdHlwZSA9IDE7CgkJZWxzZSAvL2lzc2V0KCRwYXJhbXNbJ2FiYW5kb24nXSkKCQkJJHRwbHR5cGUgPSAyOwoJCSRvayA9IFRSVUU7CgkJJHNxbCA9ICdVUERBVEUgJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV90bXRfbWF0Y2hlcyBTRVQgc3RhdHVzPScuVG91cm5leTo6VE9MRC4nIFdIRVJFIG1hdGNoX2lkPT8nOwoJCSRlcnJzID0gYXJyYXkoKTsKCQkkaWRzID0gYXJyYXlfa2V5cygkcGFyYW1zWydtYXRfc3RhdHVzJ10pOyAvL21hdGNoIGlkJ3MKCQkkZnVuY3MgPSBuZXcgdG10Q29tbSgkdGhpcyk7CgkJZm9yZWFjaCAoJHBhcmFtc1snbXNlbCddIGFzICRtaWQpCgkJewoJCQlsaXN0KCRyZXMsJGVycm1zZykgPSAkZnVuY3MtPlRlbGxUZWFtcygkcGFyYW1zWydicmFja2V0X2lkJ10sJG1pZCwkdHBsdHlwZSk7CgkJCWlmKCRyZXMpCgkJCQkkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkbWlkKSk7CgkJCWVsc2UKCQkJewoJCQkJJG9rID0gRkFMU0U7CgkJCQlpZigkZXJybXNnKQoJCQkJCSRlcnJzW10gPSAkZXJybXNnOwoJCQkJZWxzZQoJCQkJewoJCQkJCSRpZHggPSBhcnJheV9zZWFyY2goJG1pZCwkaWRzKTsKCQkJCQkkdEEgPSAoaW50KSRwYXJhbXNbJ21hdF90ZWFtQSddWyRpZHhdOwoJCQkJCSR0QiA9IChpbnQpJHBhcmFtc1snbWF0X3RlYW1CJ11bJGlkeF07CgkJCQkJaWYoJHRBID4gMCAmJiAkdEIgPiAwKQoJCQkJCQkkZXJyc1tdID0gc3ByaW50ZigkdGhpcy0+TGFuZygnb3JfZm10JywKCQkJCQkJCSR0aGlzLT5UZWFtTmFtZSgkdEEpLAoJCQkJCQkJJHRoaXMtPlRlYW1OYW1lKCR0QikpKTsKCQkJCQllbHNlaWYoJHRBID4gMCkKCQkJCQkJJGVycnNbXSA9ICR0aGlzLT5UZWFtTmFtZSgkdEEpOwoJCQkJCWVsc2VpZigkdEIgPiAwKQoJCQkJCQkkZXJyc1tdID0gJHRoaXMtPlRlYW1OYW1lKCR0Qik7CgkJCQl9CgkJCX0KCQl9CgkJaWYoISRvaykKCQl7CgkJCSRlcnJtc2cgPSAkdGhpcy0+UHJldHR5TWVzc2FnZSgnZXJyX25vdGljZScsRkFMU0UpOwoJCQlpZigkZXJycykKCQkJCSRlcnJtc2cgLj0gJzxiciAvPicuaW1wbG9kZSgnPGJyIC8+JywkZXJycyk7CgkJCSRuZXdwYXJtc1sndG10X21lc3NhZ2UnXSA9ICRlcnJtc2c7CgkJfQoJfQp9CmVsc2VpZihpc3NldCgkcGFyYW1zWydnZXRzY29yZSddKSkKewoJJG5ld3Bhcm1zID0gJHRoaXMtPkdldEVkaXRQYXJtcygkcGFyYW1zLCdyZXN1bHRzdGFiJyk7CglpZighZW1wdHkoJHBhcmFtc1sncnNlbCddKSkKCXsKCQkkb2sgPSBUUlVFOwoJCSRzcWwgPSAnVVBEQVRFICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdG10X21hdGNoZXMgU0VUIHN0YXR1cz0nLlRvdXJuZXk6OkFTS0VELicgV0hFUkUgbWF0Y2hfaWQ9Pyc7CgkJJGVycnMgPSBhcnJheSgpOwoJCSRpZHMgPSBhcnJheV9rZXlzKCRwYXJhbXNbJ3Jlc19zdGF0dXMnXSk7IC8vbWF0Y2ggaWQncwoJCSRmdW5jcyA9IG5ldyB0bXRDb21tKCR0aGlzKTsKCQlmb3JlYWNoICgkcGFyYW1zWydyc2VsJ10gYXMgJG1pZCkKCQl7CgkJCWxpc3QoJHJlcywkZXJybXNnKSA9ICRmdW5jcy0+VGVsbFRlYW1zKCRwYXJhbXNbJ2JyYWNrZXRfaWQnXSwkbWlkLDMsVFJVRSk7CgkJCWlmKCRyZXMpCgkJCQkkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkbWlkKSk7CgkJCWVsc2UKCQkJewoJCQkJJG9rID0gRkFMU0U7CgkJCQlpZigkZXJybXNnKQoJCQkJCSRlcnJzW10gPSAkZXJybXNnOwoJCQkJZWxzZQoJCQkJewoJCQkJCSRpZHggPSBhcnJheV9zZWFyY2goJG1pZCwkaWRzKTsKCQkJCQkkdEEgPSAoaW50KSRwYXJhbXNbJ3Jlc190ZWFtQSddWyRpZHhdOwoJCQkJCSR0QiA9IChpbnQpJHBhcmFtc1sncmVzX3RlYW1CJ11bJGlkeF07CgkJCQkJaWYoJHRBID4gMCAmJiAkdEIgPiAwKQoJCQkJCQkkZXJyc1tdID0gc3ByaW50ZigkdGhpcy0+TGFuZygnb3JfZm10JywKCQkJCQkJCSR0aGlzLT5UZWFtTmFtZSgkdEEpLAoJCQkJCQkJJHRoaXMtPlRlYW1OYW1lKCR0QikpKTsKCQkJCQllbHNlaWYoJHRBID4gMCkKCQkJCQkJJGVycnNbXSA9ICR0aGlzLT5UZWFtTmFtZSgkdEEpOwoJCQkJCWVsc2VpZigkdEIgPiAwKQoJCQkJCQkkZXJyc1tdID0gJHRoaXMtPlRlYW1OYW1lKCR0Qik7CgkJCQl9CgkJCX0KCQl9CgkJaWYoISRvaykKCQl7CgkJCSRlcnJtc2cgPSAkdGhpcy0+UHJldHR5TWVzc2FnZSgnZXJyX25vdGljZScsRkFMU0UpOwoJCQlpZigkZXJycykKCQkJCSRlcnJtc2cgLj0gJzxiciAvPicuaW1wbG9kZSgnPGJyIC8+JywkZXJycyk7CgkJCSRuZXdwYXJtc1sndG10X21lc3NhZ2UnXSA9ICRlcnJtc2c7CgkJfQoJfQp9CgokdGhpcy0+UmVkaXJlY3QoJGlkLCdhZGRlZGl0X2NvbXAnLCRyZXR1cm5pZCwkbmV3cGFybXMpOwoKPz4K]]></data>
	</file>
	<file>
	  <filename>/action.order_groups.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKKi8KLyogYWN0aW9uIGZvciBhamF4LXByb2Nlc3NpbmcsIGFmdGVyIGdyb3Vwcy10YWJsZSByb3cocykgaGF2ZSBiZWVuIGRyYWdnZWQgYW5kIGRyb3BwZWQKICAkcGFyYW1zW10gaW5jbHVkZXMKICAnbmV3b3JkZXJzJyBzdHJpbmcgd2l0aCBjb21tYS1zZXBhcmF0ZWQgZGlzcGxheW9yZGVyIHZhbHVlcyBvZiBhbGwgZ3JvdXBzIGUuZy4gJzIsMyw2LDEnCiovCmlmICghJHRoaXMtPkNoZWNrQWNjZXNzKCdhZG1vZCcpKQp7CgllY2hvIDA7CglleGl0Owp9CiRuZXdzID0gZXhwbG9kZSgnLCcsJHBhcmFtc1snbmV3b3JkZXJzJ10pOwokbmMgPSBjb3VudCgkbmV3cyk7CmlmICgkbmMgPCAyKQoJZXhpdDsJLy9hIHNpbmdsZSByb3csIG5vdGhpbmcgdG8gZG8KJHByZWYgPSBjbXNfZGJfcHJlZml4KCk7CiRzcWwgPSAnU0VMRUNUIGdyb3VwX2lkIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9ncm91cHMgT1JERVIgQlkgZGlzcGxheW9yZGVyJzsKJGdycHMgPSAkZGItPkdldENvbCgkc3FsKTsKaWYgKCRncnBzID09PSBGQUxTRSB8fCBjb3VudCgkZ3JwcykgIT0gJG5jKQp7CgllY2hvIDA7CglleGl0Owp9CiRzcWwgPSAnVVBEQVRFICcuJHByZWYuJ21vZHVsZV90bXRfZ3JvdXBzIFNFVCBkaXNwbGF5b3JkZXIgPSBDQVNFIGdyb3VwX2lkICc7CmZvcmVhY2ggKCRncnBzIGFzICRnaWQpCiAgICAkc3FsIC49ICdXSEVOICcuKGludCkkZ2lkLicgVEhFTiA/ICc7CiRzcWwgLj0gJ0VMU0UgZGlzcGxheW9yZGVyIEVORCBXSEVSRSBncm91cF9pZCBJTiAoJy5pbXBsb2RlKCcsJywkZ3JwcykuJyknOwppZiAoJGRiLT5FeGVjdXRlICgkc3FsLCRuZXdzKSkKCWVjaG8gJG5jOyAvL3NlbmQgYmFjayB0aGUgY291bnQgb2YgdXBkYXRlcwplbHNlCgllY2hvIDA7CmV4aXQ7Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/action.order_team.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKKi8KLyogYWN0aW9uIGZvciBhamF4LXByb2Nlc3NpbmcsIGFmdGVyIHRlYW0tbWVtYmVycy10YWJsZSByb3cocykgaGF2ZSBiZWVuIGRyYWdnZWQgYW5kIGRyb3BwZWQKICAkcGFyYW1zW10gaW5jbHVkZXMKICAndGVhbV9pZCcKICAnbmV3b3JkZXJzJyBzdHJpbmcgd2l0aCBjb21tYS1zZXBhcmF0ZWQgZGlzcGxheW9yZGVyIHZhbHVlcyBvZiBhbGwgbWVtYmVycyBlLmcuICcyLDMsNiwxJwoqLwppZiAoISR0aGlzLT5DaGVja0FjY2VzcygnYWRtb2QnKSkKewoJZWNobyAwOwoJZXhpdDsKfQokbmV3cyA9IGV4cGxvZGUoJywnLCRwYXJhbXNbJ25ld29yZGVycyddKTsKJG5jID0gY291bnQoJG5ld3MpOwppZiAoJG5jIDwgMikKCWV4aXQ7CS8vYSBzaW5nbGUgcm93LCBub3RoaW5nIHRvIGRvCiRpZCA9IChpbnQpJHBhcmFtc1sndGVhbV9pZCddOwokcHJlZiA9IGNtc19kYl9wcmVmaXgoKTsKJHNxbCA9ICdTRUxFQ1QgRElTVElOQ1QgZGlzcGxheW9yZGVyIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9wZW9wbGUgV0hFUkUgaWQ9PyBBTkQgZmxhZ3MhPTIgT1JERVIgQlkgZGlzcGxheW9yZGVyJzsKJG9yZGVycyA9ICRkYi0+R2V0Q29sKCRzcWwsYXJyYXkoJGlkKSk7CmlmICgkb3JkZXJzID09PSBGQUxTRSB8fCBjb3VudCgkb3JkZXJzKSAhPSAkbmMpCnsKCWVjaG8gMDsKCWV4aXQ7Cn0KJHNxbCA9ICdVUERBVEUgJy4kcHJlZi4nbW9kdWxlX3RtdF9wZW9wbGUgU0VUIGRpc3BsYXlvcmRlciA9IENBU0UgZGlzcGxheW9yZGVyICc7CmZvcmVhY2ggKCRvcmRlcnMgYXMgJG8pCiAgICAkc3FsIC49ICdXSEVOICcuKGludCkkby4nIFRIRU4gPyAnOwokc3FsIC49ICdFTFNFIGRpc3BsYXlvcmRlciBFTkQgV0hFUkUgaWQ9PyBBTkQgZGlzcGxheW9yZGVyIElOICgnLmltcGxvZGUoJywnLCRvcmRlcnMpLicpJzsKZm9yZWFjaCAoJG5ld3MgYXMgJiRvKQoJJG8gPSAtKGludCkkbzsJLy88MCB0byBwcmV2ZW50IG92ZXJ3cml0ZXMKdW5zZXQgKCRvKTsKJG5ld3NbXSA9ICRpZDsKJGRiLT5FeGVjdXRlKCdCRUdJTiBUUkFOU0FDVElPTicpOwppZiAoJGRiLT5FeGVjdXRlICgkc3FsLCRuZXdzKSkKewoJLy9yZXZlcnQgbmVnJ3MKCSRzcWwgPSAnVVBEQVRFICcuJHByZWYuJ21vZHVsZV90bXRfcGVvcGxlIFNFVCBkaXNwbGF5b3JkZXI9LWRpc3BsYXlvcmRlciBXSEVSRSBpZD0/IEFORCBkaXNwbGF5b3JkZXI8MCc7CgkkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkaWQpKTsKCSRkYi0+RXhlY3V0ZSgnQ09NTUlUJyk7CgllY2hvICRuYzsgLy9zZW5kIGJhY2sgdGhlIGNvdW50IG9mIHVwZGF0ZXMKfQplbHNlCnsKCSRkYi0+RXhlY3V0ZSgnUk9MTEJBQ0snKTsKCWVjaG8gMDsKfQpleGl0OwoKPz4K]]></data>
	</file>
	<file>
	  <filename>/action.process_groups.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKIApQcm9jZXNzZXMgZm9ybS1zdWJtaXNzaW9uIGZyb20gYWRtaW4gZ3JvdXBzIHRhYgoqLwoKaWYoaXNzZXQoJHBhcmFtc1sndXBkYXRlJ10pKQp7CglpZighZW1wdHkoJHBhcmFtc1snc2VsZ3JvdXBzJ10pKQoJewoJCSR2YWxzID0gYXJyYXlfZmxpcCgkcGFyYW1zWydzZWxncm91cHMnXSk7IC8vY29udmVydCBzdHJpbmdzCgkJJHZhbHMgPSBhcnJheV9mbGlwKCR2YWxzKTsKCQkkcHJlZiA9IGNtc19kYl9wcmVmaXgoKTsKCQkkc3FsID0gJ1VQREFURSAnLiRwcmVmLidtb2R1bGVfdG10X2dyb3VwcyBTRVQgbmFtZT0/LGZsYWdzPT8gV0hFUkUgZ3JvdXBfaWQ9Pyc7CgkJZm9yZWFjaCgkdmFscyBhcyAkdGhpc2lkKQoJCXsKCQkJJGluZHggPSBhcnJheV9zZWFyY2goJHRoaXNpZCwkcGFyYW1zWydncm91cF9hY3RpdmUnXSk7CgkJCSRuYW1lID0gdHJpbSgkcGFyYW1zWydncm91cF9uYW1lJ11bJGluZHhdKTsKCQkJaWYoISRuYW1lKQoJCQkJJG5hbWUgPSAnPCcuJHRoaXMtPkxhbmcoJ25vbmFtZScpLic+JzsKCQkJaWYoJHRoaXNpZCA9PSAnLTEnKQoJCQl7CgkJCQkkdGhpc2lkID0gJGRiLT5HZW5JRCgkcHJlZi4nbW9kdWxlX3RtdF9ncm91cHNfc2VxJyk7CgkJCQkkbmMgPSBjb3VudCgkcGFyYW1zWydncm91cF9uYW1lJ10pOwoJCQkJJGRiLT5FeGVjdXRlKCdJTlNFUlQgSU5UTyAnLiRwcmVmLidtb2R1bGVfdG10X2dyb3VwcyAoZ3JvdXBfaWQsbmFtZSxkaXNwbGF5b3JkZXIpIFZBTFVFUyAoPyw/LD8pJywKCQkJCQlhcnJheSgoaW50KSR0aGlzaWQsJG5hbWUsJG5jKSk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlpZigkdGhpc2lkKSAvL25vdCB0aGUgZGVmYXVsdCBncm91cCAoMCkKCQkJCXsKCQkJCQkkYWN0aXZlID0gKGludCkkcGFyYW1zWydncm91cF9hY3RpdmUnXVskaW5keF07IC8vVE9ETyBtYXNrIGxvd2VzdCBiaXQKCQkJCQlpZigkYWN0aXZlID4gMSkKCQkJCQkJJGFjdGl2ZSA9IDE7CgkJCQl9CgkJCQllbHNlCgkJCQkJJGFjdGl2ZSA9IDE7IC8vZGVmYXVsdC91bmdyb3VwZWQgYWx3YXlzIGFjdGl2ZQoJCQkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJG5hbWUsJGFjdGl2ZSwoaW50KSR0aGlzaWQpKTsKCQkJfQoJCX0KCX0KfQplbHNlaWYoaXNzZXQoJHBhcmFtc1snZGVsZXRlX2dyb3VwJ10pKQp7CglpZighZW1wdHkoJHBhcmFtc1snc2VsZ3JvdXBzJ10pKQoJewoJCSR2YWxzID0gYXJyYXlfZmxpcCgkcGFyYW1zWydzZWxncm91cHMnXSk7CgkJJHZhbHMgPSBhcnJheV9mbGlwKCR2YWxzKTsKCQkkdmFscyA9IGFycmF5X2RpZmYoJHZhbHMsYXJyYXkoMCwnMCcsJycpKTsgLy9wcmVzZXJ2ZSBkZWZhdWx0CgkJJHZjID0gY291bnQoJHZhbHMpOwoJCWlmKCR2YykKCQl7CgkJCSRmaWxsZXJzID0gc3RyX3JlcGVhdCgnPywnLCR2Yy0xKS4nPyc7CgkJCSRwcmVmID0gY21zX2RiX3ByZWZpeCgpOwoJCQkkc3FsID0gJ1VQREFURSAnLiRwcmVmLidtb2R1bGVfdG10X2JyYWNrZXRzIFNFVCBncm91cGlkID0gMCBXSEVSRSBncm91cGlkIElOICgnLiRmaWxsZXJzLicpJzsKCQkJJGRiLT5FeGVjdXRlKCRzcWwsJHZhbHMpOwoJCQkkc3FsID0gJ0RFTEVURSBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfZ3JvdXBzIFdIRVJFIGdyb3VwX2lkIElOICgnLiRmaWxsZXJzLicpJzsKCQkJJGRiLT5FeGVjdXRlKCRzcWwsJHZhbHMpOwoJCX0KCX0KfQplbHNlaWYoaXNzZXQoJHBhcmFtc1snYWN0aXZhdGUnXSkpCnsKCWlmKCFlbXB0eSgkcGFyYW1zWydzZWxncm91cHMnXSkpCgl7CgkJJHZhbHMgPSBhcnJheV9kaWZmKCRwYXJhbXNbJ3NlbGdyb3VwcyddLGFycmF5KDAsJzAnLCcnKSk7IC8vZXhjbHVkZS9wcmVzZXJ2ZSBkZWZhdWx0CgkJJHZjID0gY291bnQoJHZhbHMpOwoJCWlmKCR2YykKCQl7CgkJCWZvcmVhY2goJHZhbHMgYXMgJGs9PiRpZCkKCQkJCSR2YWxzWyRrXSA9IChpbnQpJGlkOyAvL2ludGVnZXIgZnJvbSBzdHJpbmcKCQkJJHByZWYgPSBjbXNfZGJfcHJlZml4KCk7CgkJCSRmaWxsZXJzID0gc3RyX3JlcGVhdCgnPywnLCR2Yy0xKS4nPyc7CgkJCSRzcWwgPSAnU0VMRUNUIENPVU5UKDEpIEFTIG51bSBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfZ3JvdXBzIFdIRVJFIGdyb3VwX2lkIElOICgnLiRmaWxsZXJzLicpIEFORCBmbGFncyA9IDAnOwoJCQkkaW5hY3QgPSAkZGItPkdldE9uZSgkc3FsLCR2YWxzKTsKCQkJJHRvZ2dsZWQgPSAoJGluYWN0ICE9PSBGQUxTRSAmJiAoaW50KSRpbmFjdCA9PSAwKSA/ICcwJzonMSc7CgkJCSRzcWwgPSAnVVBEQVRFICcuJHByZWYuJ21vZHVsZV90bXRfZ3JvdXBzIFNFVCBmbGFncz0nLiR0b2dnbGVkLicgV0hFUkUgZ3JvdXBfaWQgSU4gKCcuJGZpbGxlcnMuJyknOwoJCQkkZGItPkV4ZWN1dGUoJHNxbCwkdmFscyk7CgkJfQoJfQp9CmVsc2VpZihpc3NldCgkcGFyYW1zWydzb3J0J10pKQp7CglpZih2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sJzUuMy4wJykgPj0gMCAmJiBleHRlbnNpb25fbG9hZGVkKCdpbnRsJykpCgl7CgkJJGxvY2FsZSA9IHNldGxvY2FsZShMQ19DT0xMQVRFLCcwJyk7IC8vVE9ETwoJCSRjbCA9IG5ldyBDb2xsYXRvcigkbG9jYWxlKTsKCQkkY2wtPmFzb3J0KCRwYXJhbXNbJ2dyb3VwX25hbWUnXSxDb2xsYXRvcjo6U09SVF9TVFJJTkcpOwoJfQoJZWxzZQoJCWFzb3J0KCRwYXJhbXNbJ2dyb3VwX25hbWUnXSxTT1JUX0xPQ0FMRV9TVFJJTkcpOyAvL3Byb2JhYmx5IHRvbyBiYWQgYWJvdXQgaTE4bgoJJG9yZCA9IDE7CgkkcHJlZiA9IGNtc19kYl9wcmVmaXgoKTsKCSRzcWwgPSAnVVBEQVRFICcuJHByZWYuJ21vZHVsZV90bXRfZ3JvdXBzIFNFVCBkaXNwbGF5b3JkZXI9PyBXSEVSRSBncm91cF9pZD0/JzsKCWZvcmVhY2ggKCRwYXJhbXNbJ2dyb3VwX25hbWUnXSBhcyAkaW5keD0+JiRuYW1lKQoJewoJCSRpZCA9IChpbnQpJHBhcmFtc1snZ3JvdXBfYWN0aXZlJ11bJGluZHhdOwoJCSRkYi0+RXhlY3V0ZSgkc3FsLGFycmF5KCRvcmQsJGlkKSk7CgkJJG9yZCsrOwoJfQoJdW5zZXQoJG5hbWUpOwp9CgokdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywnJyxhcnJheSgnc2hvd3RhYic9PjEpKTsKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/action.process_items.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKIApQcm9jZXNzZXMgZm9ybS1zdWJtaXNzaW9uIGZyb20gYWRtaW4gYnJhY2tldHMgdGFiCiovCgppZihpc3NldCgkcGFyYW1zWydjYW5jZWwnXSkgfHwgZW1wdHkoJHBhcmFtc1snc2VsaXRlbXMnXSkpCgkkdGhpcy0+UmVkaXJlY3QoJGlkLCdkZWZhdWx0YWRtaW4nKTsKZWxzZWlmKGlzc2V0KCRwYXJhbXNbJ2Nsb25lJ10pKQp7CglpZiAoISR0aGlzLT5DaGVja0FjY2VzcygnYWRtb2QnKSkKCQkkdGhpcy0+UmVkaXJlY3QoJGlkLCdkZWZhdWx0YWRtaW4nLCcnLAoJCQlhcnJheSgndG10X21lc3NhZ2UnPT4kdGhpcy0+UHJldHR5TWVzc2FnZSgnbGFja3Blcm1pc3Npb24nLEZBTFNFKSkpOwoKCSR2YWxzID0gYXJyYXlfZmxpcCgkcGFyYW1zWydzZWxpdGVtcyddKTsgLy9jb252ZXJ0IHN0cmluZ3MKCSR2YWxzID0gYXJyYXlfZmxpcCgkdmFscyk7CglpZigkdmFscykKCXsKCQkkZnVuY3MgPSBuZXcgdG10Q2xvbmUoKTsKCQkkcmVzID0gJGZ1bmNzLT5DbG9uZUJyYWNrZXQoJHRoaXMsJHZhbHMpOwoJCWlmKCRyZXMgIT09IFRSVUUpCgkJCSR0aGlzLT5SZWRpcmVjdCgkaWQsJ2RlZmF1bHRhZG1pbicsJycsCgkJCQlhcnJheSgndG10X21lc3NhZ2UnPT4kdGhpcy0+UHJldHR5TWVzc2FnZSgkcmVzLEZBTFNFKSkpOwoJfQp9CmVsc2VpZihpc3NldCgkcGFyYW1zWydncm91cCddKSkgLy9iZWdpbiBncm91cGluZyBwcm9jZXNzCnsKCSRzbWFydHktPmFzc2lnbignc3RhcnRfZm9ybScsJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsJ3Byb2Nlc3NfaXRlbXMnLCRyZXR1cm5pZCkpOwoJJHNtYXJ0eS0+YXNzaWduKCdlbmRfZm9ybScsJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7Cgkkc21hcnR5LT5hc3NpZ24oJ2hpZGRlbicsJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwnc2VsaXRlbXMnLGltcGxvZGUoJzsnLCRwYXJhbXNbJ3NlbGl0ZW1zJ10pKSk7Cgkkc21hcnR5LT5hc3NpZ24oJ3RpdGxlJywkdGhpcy0+TGFuZygndGl0bGVfYnJhY2tldHNncm91cCcpKTsKCSRvcHRpb25zID0gJHRoaXMtPkdldEdyb3VwcygpOwoJaWYoJG9wdGlvbnMpCgl7CgkJZm9yZWFjaCgkb3B0aW9ucyBhcyAmJHJvdykKCQkJJHJvdyA9ICRyb3dbJ25hbWUnXTsKCQl1bnNldCgkcm93KTsKCQkkb3B0aW9ucyA9IGFycmF5X2ZsaXAoJG9wdGlvbnMpOwoJfQoJZWxzZQoJCSRvcHRpb25zID0gYXJyYXkoJHRoaXMtPkxhbmcoJ2dyb3VwZGVmYXVsdCcpPT4wKTsgLy9lbnN1cmUgc29tZXRoaW5nIGV4aXN0cwoJJG9wdGlvbnMgPSBhcnJheSgkdGhpcy0+TGFuZygnc2VsZWN0X29uZScpPT4tMSkgKyAkb3B0aW9uczsKCSRzbWFydHktPmFzc2lnbignY2hvb3NlcicsJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCd0b2dyb3VwJywkb3B0aW9ucywtMSwtMSkpOwoJJHNtYXJ0eS0+YXNzaWduKCdhcHBseScsJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0RGVmYXVsdCgkaWQsJ2FwcGx5JywkdGhpcy0+TGFuZygnYXBwbHknKSkpOwoJJHNtYXJ0eS0+YXNzaWduKCdjYW5jZWwnLCR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ2NhbmNlbCcsICR0aGlzLT5MYW5nKCdjYW5jZWwnKSkpOwoJJHNtYXJ0eS0+YXNzaWduKCdoZWxwJywnJyk7IC8vJHRoaXMtPkxhbmcoJ2hlbHBfYnJhY2tldHNncm91cCcpKTsKCWVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnb25lcGFnZS50cGwnKTsKCXJldHVybjsKfQplbHNlaWYoaXNzZXQoJHBhcmFtc1snYXBwbHknXSkpIC8vc2VsZWN0ZWQgZ3JvdXAKewoJJGdpZCA9IChpbnQpJHBhcmFtc1sndG9ncm91cCddOyAvL25ldyBncm91cCBjaG9pY2UKCWlmKCRnaWQgIT0gLTEpCgl7CgkJJHZhbHMgPSBhcnJheV9mbGlwKGV4cGxvZGUoJzsnLCRwYXJhbXNbJ3NlbGl0ZW1zJ10pKTsgLy9jb252ZXJ0IHN0cmluZ3MKCQkkdmFscyA9IGFycmF5X2ZsaXAoJHZhbHMpOwoJCSR2YyA9IGNvdW50KCR2YWxzKTsKCQkkZmlsbGVycyA9IHN0cl9yZXBlYXQoJz8sJywkdmMtMSkuJz8nOwoJCSRwcmVmID0gY21zX2RiX3ByZWZpeCgpOwoJCSRzcWwgPSAnVVBEQVRFICcuJHByZWYuJ21vZHVsZV90bXRfYnJhY2tldHMgU0VUIGdyb3VwaWQ9PyBXSEVSRSBicmFja2V0X2lkIElOICgnLiRmaWxsZXJzLicpJzsKCQlhcnJheV91bnNoaWZ0KCR2YWxzLCRnaWQpOwoJCSRkYi0+RXhlY3V0ZSgkc3FsLCR2YWxzKTsKCX0KfQplbHNlaWYoaXNzZXQoJHBhcmFtc1snZGVsZXRlX2l0ZW0nXSkpIC8vZGVsZXRlIHNlbGVjdGVkIGJyYWNrZXQocykKewoJaWYgKCEkdGhpcy0+Q2hlY2tBY2Nlc3MoJ2FkbW9kJykpCgkJJHRoaXMtPlJlZGlyZWN0KCRpZCwnZGVmYXVsdGFkbWluJywnJywKCQkJYXJyYXkoJ3RtdF9tZXNzYWdlJz0+JHRoaXMtPlByZXR0eU1lc3NhZ2UoJ2xhY2twZXJtaXNzaW9uJyxGQUxTRSkpKTsKCgkkdmFscyA9IGFycmF5X2ZsaXAoJHBhcmFtc1snc2VsaXRlbXMnXSk7IC8vY29udmVydCBzdHJpbmdzCgkkdmFscyA9IGFycmF5X2ZsaXAoJHZhbHMpOwoJaWYoJHZhbHMpCgl7CgkJJGZ1bmNzID0gbmV3IHRtdERlbGV0ZSgpOwoJCSRmdW5jcy0+RGVsZXRlQnJhY2tldCgkdGhpcywkdmFscyk7Cgl9Cn0KZWxzZWlmKGlzc2V0KCRwYXJhbXNbJ25vdGlmeSddKSkKewoJJHZhbHMgPSBhcnJheV9mbGlwKCRwYXJhbXNbJ3NlbGl0ZW1zJ10pOyAvL2NvbnZlcnQgc3RyaW5ncwoJJHZhbHMgPSBhcnJheV9mbGlwKCR2YWxzKTsKCWlmKCR2YWxzKQoJewoJCSR2YyA9IGNvdW50KCR2YWxzKTsKCQkkZmlsbGVycyA9IHN0cl9yZXBlYXQoJz8sJywkdmMtMSkuJz8nOwoJCSRwcmVmID0gY21zX2RiX3ByZWZpeCgpOwoJCSRzcWwgPSAnU0VMRUNUIG1hdGNoX2lkLGJyYWNrZXRfaWQgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X21hdGNoZXMgV0hFUkUgYnJhY2tldF9pZCBJTiAoJy4kZmlsbGVycy4KCQknKSBBTkQgZmxhZ3M9MCBBTkQgc3RhdHVzPCcuVG91cm5leTo6TVJFUy4KCQknIEFORCBwbGF5d2hlbiBJUyBOT1QgTlVMTCBBTkQgKCh0ZWFtQSBJUyBOT1QgTlVMTCBBTkQgdGVhbUE+MCkgT1IgKHRlYW1CIElTIE5PVCBOVUxMIEFORCB0ZWFtQj4wKSknOwoJCSRtYXRjaGVzID0gJGRiLT5HZXRBc3NvYygkc3FsLCR2YWxzKTsKCQlpZigkbWF0Y2hlcykKCQl7CgkJCSRhbGxtc2cgPSAnJzsKCQkJJHNxbCA9ICdVUERBVEUgJy4kcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzIFNFVCBzdGF0dXM9Jy5Ub3VybmV5OjpUT0xELicgV0hFUkUgbWF0Y2hfaWQ9Pyc7CgkJCSRmdW5jcyA9IG5ldyB0bXRDb21tKCR0aGlzKTsKCQkJZm9yZWFjaCgkbWF0Y2hlcyBhcyAkbWlkPT4kYmlkKQoJCQl7CgkJCQlsaXN0KCRyZXMsJGVycm1zZykgPSAkZnVuY3MtPlRlbGxUZWFtcygoaW50KSRiaWQsJG1pZCwxKTsgLy8xID4+IGFubm91bmNlbWVudCB0ZW1wbGF0ZQoJCQkJaWYoJHJlcykKCQkJCQkkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkbWlkKSk7CgkJCQllbHNlaWYoJGVycm1zZykKCQkJCXsKCQkJCQlpZigkYWxsbXNnKQoJCQkJCQkkYWxsbXNnIC49ICc8YnIgLz4nOwoJCQkJCSRhbGxtc2cgLj0gJGVycm1zZzsKCQkJCX0KCQkJfQoJCQlpZigkYWxsbXNnKQoJCQkJJHRoaXMtPlJlZGlyZWN0KCRpZCwnZGVmYXVsdGFkbWluJywnJywKCQkJCQlhcnJheSgndG10X21lc3NhZ2UnPT4kdGhpcy0+UHJldHR5TWVzc2FnZSgkYWxsbXNnLEZBTFNFLEZBTFNFLEZBTFNFKSkpOwoJCX0KCX0KfQplbHNlaWYoaXNzZXQoJHBhcmFtc1sncHJpbnQnXSkpCnsKCSR2YWxzID0gYXJyYXlfZmxpcCgkcGFyYW1zWydzZWxpdGVtcyddKTsgLy9jb252ZXJ0IHN0cmluZ3MKCSR2YWxzID0gYXJyYXlfZmxpcCgkdmFscyk7CglpZigkdmFscykKCXsKCQkkcHJlZiA9IGNtc19kYl9wcmVmaXgoKTsKCQkkc3FsID0gJ1NFTEVDVCAqIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9icmFja2V0cyBXSEVSRSBicmFja2V0X2lkPT8nOwoJCSRzcWwyID0gJ1VQREFURSAnLiRwcmVmLidtb2R1bGVfdG10X2JyYWNrZXRzIFNFVCBjaGFydGJ1aWxkID0gMSBXSEVSRSBicmFja2V0X2lkPT8nOwoJCSRzY2ggPSBuZXcgdG10U2NoZWR1bGUoKTsKCQkkbHl0ID0gbmV3IHRtdExheW91dCgpOwoJCSRtZXNzYWdlID0gJyc7CgkJJG9uZWZpbGUgPSAoY291bnQoJHZhbHMpID09IDEpOwoJCWlmKCRvbmVmaWxlKQoJCQkkemlwID0gRkFMU0U7CgkJZWxzZQoJCXsKCQkJJGZuID0gJ2JyYWNrZXRzLWNoYXJ0cy0nLmltcGxvZGUoJy0nLCR2YWxzKS4nLnppcCc7CgkJCSRmcCA9IGNtc19qb2luX3BhdGgoJGNvbmZpZ1sncm9vdF9wYXRoJ10sJ3RtcCcsJGZuKTsKCQkJJHppcCA9IG5ldyBaaXBBcmNoaXZlKCk7CgkJCWlmKCR6aXAtPm9wZW4oJGZwLFppcEFyY2hpdmU6OkNSRUFURSkgIT09IFRSVUUpCgkJCXsKCQkJCSRtZXNzYWdlID0gJHRoaXMtPlByZXR0eU1lc3NhZ2UoJ2Vycl96aXAnLEZBTFNFKTsKCQkJCSR0aGlzLT5SZWRpcmVjdCgkaWQsJ2RlZmF1bHRhZG1pbicsJycsYXJyYXkoJ3RtdF9tZXNzYWdlJz0+JG1lc3NhZ2UpKTsKCQkJfQoJCX0KCQkKCQlmb3JlYWNoKCR2YWxzIGFzICRiaWQpCgkJewoJCQkkYmRhdGEgPSAkZGItPkdldFJvdygkc3FsLGFycmF5KCRiaWQpKTsKCQkJLy9yZWZyZXNoIHRoZSBtYXRjaGVzIHRhYmxlLCBpZiBuZWNlc3NhcnkKCQkJc3dpdGNoICgkYmRhdGFbJ3R5cGUnXSkKCQkJewoJCQkgY2FzZSBUb3VybmV5OjpERVRZUEU6CgkJCQkkc2NoLT5VcGRhdGVERU1hdGNoZXMgKCR0aGlzLCRiaWQpOwoJCQkJYnJlYWs7CgkJCSBjYXNlIFRvdXJuZXk6OlJSVFlQRToKCQkJCSRzY2gtPk5leHRSUk1hdGNoZXMoJHRoaXMsJGJpZCk7CgkJCQlicmVhazsKCQkJIGRlZmF1bHQ6CgkJCS8vIGNhc2UgVG91cm5leTo6S09UWVBFOgoJCQkJJHNjaC0+VXBkYXRlS09NYXRjaGVzKCR0aGlzLCRiaWQpOwoJCQkJYnJlYWs7CgkJCX0KCQkJJGJkYXRhWydjaGFydGJ1aWxkJ10gPSAxOyAvL3RlbGwgZG93bnN0cmVhbSB0aGF0IHJlYnVpbGQgaXMgbmVlZGVkCgkJCWxpc3QoJGNoYXJ0ZmlsZSwkZXJya2V5KSA9ICRseXQtPkdldENoYXJ0KCR0aGlzLCRiZGF0YSxGQUxTRSwwKTsKCQkJaWYoJGNoYXJ0ZmlsZSkKCQkJewoJCQkJLy9mb3JjZSByZWZyZXNoIG5leHQgdGltZQoJCQkJJGRiLT5FeGVjdXRlKCRzcWwyLGFycmF5KCRiaWQpKTsKCQkJCWlmKCEkb25lZmlsZSAmJiBpc19maWxlKCRjaGFydGZpbGUpKQoJCQkJewoJCQkJCSR6aXAtPmFkZEZpbGUoJGNoYXJ0ZmlsZSxiYXNlbmFtZSgkY2hhcnRmaWxlKSk7CgkJCQkJLy9jYW5ub3QgZGVsZXRlICRjaGFydGZpbGUgeWV0CgkJCQl9CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlpZighJG1lc3NhZ2UpCgkJCQkJJG1lc3NhZ2UgPSAkdGhpcy0+UHJldHR5TWVzc2FnZSgnZXJyX2NoYXJ0JyxGQUxTRSk7CgkJCQkkbWVzc2FnZSAuPSAnPGJyIC8+Jy4kYmRhdGFbJ25hbWUnXTsKCQkJCWlmKCRlcnJrZXkpCgkJCQkJJG1lc3NhZ2UgLj0gJzogJy4kdGhpcy0+TGFuZygkZXJya2V5KTsKCQkJfQoJCX0KCQl1bnNldCgkc2NoKTsKCQl1bnNldCgkbHl0KTsKCQlpZigkb25lZmlsZSkKCQl7CgkJCWlmKCRjaGFydGZpbGUgJiYgaXNfZmlsZSgkY2hhcnRmaWxlKSkKCQkJewoJCQkJLy9leHBvcnQgJGNoYXJ0ZmlsZQoJCQkJJGNvbnRlbnQgPSBmaWxlX2dldF9jb250ZW50cygkY2hhcnRmaWxlKTsKCQkJCSRmbiA9IGJhc2VuYW1lKCRjaGFydGZpbGUpOwoJCQkJJGZ0ID0gJ2FwcGxpY2F0aW9uL3BkZic7CgkJCX0KCQkJZWxzZQoJCQkJJGNvbnRlbnQgPSBGQUxTRTsKCQl9CgkJZWxzZWlmKCR6aXApCgkJewoJCQkkemlwLT5jbG9zZSgpOwoJCQlpZihpc19maWxlKCRmcCkpCgkJCXsKCQkJCSRjb250ZW50ID0gZmlsZV9nZXRfY29udGVudHMoJGZwKTsKCQkJCXVubGluaygkZnApOwoJCQkJJGZ0ID0gJ2FwcGxpY2F0aW9uL3ppcCc7CgkJCX0KCQkJZWxzZQoJCQkJJGNvbnRlbnQgPSBGQUxTRTsKCQl9CgoJCWlmKCRjb250ZW50KQoJCXsKCQkJQG9iX2NsZWFuKCk7CgkJCWhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTsKCQkJaGVhZGVyKCdFeHBpcmVzOiAwJyk7CgkJCWhlYWRlcignQ2FjaGUtQ29udHJvbDogbXVzdC1yZXZhbGlkYXRlLHBvc3QtY2hlY2s9MCxwcmUtY2hlY2s9MCcpOwoJCQloZWFkZXIoJ0NhY2hlLUNvbnRyb2w6IHByaXZhdGUnLEZBTFNFKTsKCQkJaGVhZGVyKCdDb250ZW50LURlc2NyaXB0aW9uOiBGaWxlIFRyYW5zZmVyJyk7CgkJCWhlYWRlcignQ29udGVudC1UeXBlOiAnLiRmdCk7CgkJCWhlYWRlcignQ29udGVudC1MZW5ndGg6ICcuc3RybGVuKCRjb250ZW50KSk7CgkJCWhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IicuJGZuLiciJyk7CgkJCWVjaG8gJGNvbnRlbnQ7CgkJCWlmKCEkbWVzc2FnZSkKCQkJCWV4aXQ7CgkJCSR0aGlzLT5SZWRpcmVjdCgkaWQsJ2RlZmF1bHRhZG1pbicsJycsYXJyYXkoJ3RtdF9tZXNzYWdlJz0+JG1lc3NhZ2UpKTsKCQl9Cgl9Cn0KZWxzZWlmKGlzc2V0KCRwYXJhbXNbJ2V4cG9ydCddKSkKewoJJHZhbHMgPSBhcnJheV9mbGlwKCRwYXJhbXNbJ3NlbGl0ZW1zJ10pOyAvL2NvbnZlcnQgc3RyaW5ncwoJJHZhbHMgPSBhcnJheV9mbGlwKCR2YWxzKTsKCWlmKCR2YWxzKQoJewoJCSRmdW5jcyA9IG5ldyB0bXRYTUwoKTsKCQkkcmVzID0gJGZ1bmNzLT5FeHBvcnRYTUwoJHRoaXMsJHBhcmFtc1snc2VsaXRlbXMnXSk7CgkJaWYgKCRyZXMgPT09IFRSVUUpCgkJCWV4aXQ7CgkJJHRoaXMtPlJlZGlyZWN0KCRpZCwnZGVmYXVsdGFkbWluJywnJywKCQkJCWFycmF5KCd0bXRfbWVzc2FnZSc9PiR0aGlzLT5QcmV0dHlNZXNzYWdlKCRyZXMsRkFMU0UpKSk7Cgl9Cn0KCiR0aGlzLT5SZWRpcmVjdCgkaWQsJ2RlZmF1bHRhZG1pbicpOwoKPz4K]]></data>
	</file>
	<file>
	  <filename>/action.result.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKCkFjdGlvbiB0byBzZXR1cCBmb3IgcmVwb3J0aW5nLCBhbmQgbGF0ZXIsIGFjdHVhbGx5IHJlcG9ydCwgdGhlIHN0YXR1cyBvZiBhIGNvbXBldGl0aW9uCiovCiRicmFja2V0X2lkID0gJHBhcmFtc1snYnJhY2tldF9pZCddOwokcHJlZiA9IGNtc19kYl9wcmVmaXgoKTsKJHNxbCA9ICdTRUxFQ1QgKiBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfYnJhY2tldHMgV0hFUkUgYnJhY2tldF9pZD0/JzsKJGJkYXRhID0gJGRiLT5HZXRSb3coJHNxbCxhcnJheSgkYnJhY2tldF9pZCkpOwoKaWYgKCFlbXB0eSgkcGFyYW1zWydzZW5kJ10pKQp7CgkkdmFsaWQgPSBUUlVFOwoJaWYgKGlzc2V0KCRwYXJhbXNbJ2NhcHRjaGEnXSkpCgl7CgkJJG9iID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdDYXB0Y2hhJyk7CgkJaWYgKCRvYikKCQl7CgkJCSR2YWxpZCA9ICRvYi0+Y2hlY2tDYXB0Y2hhKCRwYXJhbXNbJ2NhcHRjaGEnXSk7CgkJCXVuc2V0KCRvYik7CgkJfQoJfQoJaWYgKCR2YWxpZCkKCXsKCQlpZiAoaXNzZXQoJHBhcmFtc1snbWF0Y2gnXSkpCgkJewoJCQkkc3FsID0gJ1NFTEVDVCB0ZWFtQSx0ZWFtQixwbGF5d2hlbixwbGFjZSBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlcyBXSEVSRSBtYXRjaF9pZD0/IEFORCBmbGFncz0wJzsKCQkJJG1kYXRhID0gJGRiLT5HZXRSb3coJHNxbCxhcnJheSgkcGFyYW1zWydtYXRjaCddKSk7CgkJCSR0QSA9ICR0aGlzLT5UZWFtTmFtZSgkbWRhdGFbJ3RlYW1BJ10pOwoJCQkkdEIgPSAkdGhpcy0+VGVhbU5hbWUoJG1kYXRhWyd0ZWFtQiddKTsKCQkJJHJlbGF0aW9ucyA9ICR0aGlzLT5SZXN1bHRUZW1wbGF0ZXMoJGJyYWNrZXRfaWQsRkFMU0UpOwoKCQkJJGluZHggPSBhcnJheV9zZWFyY2goJHBhcmFtc1snbWF0Y2gnXSwkcGFyYW1zWydzaG93biddLGZhbHNlKTsKCQkJJHJlcyA9IChpbnQpJHBhcmFtc1sncmVzdWx0J11bJGluZHhdOwoJCQlzd2l0Y2ggKCRyZXMpCgkJCXsKCQkJIGNhc2UgVG91cm5leTo6V09OQToKCQkJCSR0cmVzID0gc3RyX3JlcGxhY2UoJyVzJywkdEEsJHJlbGF0aW9uc1snd29uJ10pOwoJCQkJYnJlYWs7CgkJCSBjYXNlIFRvdXJuZXk6OldPTkI6CgkJCQkkdHJlcyA9IHN0cl9yZXBsYWNlKCclcycsJHRCLCRyZWxhdGlvbnNbJ3dvbiddKTsKCQkJCWJyZWFrOwoJCQkgY2FzZSBUb3VybmV5OjpGT1JGQToKCQkJCSR0cmVzID0gc3RyX3JlcGxhY2UoJyVzJywkdEEsJHJlbGF0aW9uc1snZm9yZiddKTsKCQkJCWJyZWFrOwoJCQkgY2FzZSBUb3VybmV5OjpGT1JGQjoKCQkJCSR0cmVzID0gc3RyX3JlcGxhY2UoJyVzJywkdEIsJHJlbGF0aW9uc1snZm9yZiddKTsKCQkJCWJyZWFrOwoJCQkgY2FzZSBUb3VybmV5OjpNVElFRDoKCQkJCSR0cmVzID0gc3ByaW50ZigkcmVsYXRpb25zWyd0aWVkJ10sJHRBLCR0Qik7CgkJCQlicmVhazsKCQkJIGNhc2UgVG91cm5leTo6Tk9XSU46CgkJCQkkdHJlcyA9IHNwcmludGYoJHJlbGF0aW9uc1snbm9tYXRjaCddLCR0QSwkdEIpOwoJCQkJYnJlYWs7CgkJCSBkZWZhdWx0OgoJCQkgCSR2YWxpZCA9IEZBTFNFOwoJCQkJYnJlYWs7CgkJCX0KCQkJaWYgKCR2YWxpZCkKCQkJewoJCQkJJHNhdmUgPSBGQUxTRTsKCQkJCSRvYiA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnRnJvbnRFbmRVc2VycycpOwoJCQkJaWYgKCRvYikKCQkJCXsKCQkJCQkkdWlkID0gJG9iLT5Mb2dnZWRJbklEKCk7CgkJCQkJaWYgKCR1aWQgIT09IEZBTFNFKQoJCQkJCXsKCQkJCQkJJHQgPSAkYmRhdGFbJ2ZldV9lZGl0Z3JvdXAnXTsKCQkJCQkJaWYgKCR0ID09ICdhbnknKQoJCQkJCQkJJHNhdmUgPSBUUlVFOwoJCQkJCQllbHNlaWYgKCR0ICE9ICdub25lJykKCQkJCQkJewoJCQkJCQkJJGdpZCA9ICRvYi0+R2V0R3JvdXBJRCgkdCk7CgkJCQkJCQkkc2F2ZSA9ICRvYi0+TWVtYmVyT2ZHcm91cCgkdWlkLCRnaWQpOwoJCQkJCQl9CgkJCQkJCWlmKCRzYXZlKQoJCQkJCQkJJGJ5ID0gJG9iLT5HZXRVc2VyTmFtZSgkdWlkKTsgLy9kZWZhdWx0CgkJCQkJfQoJCQkJCXVuc2V0KCRvYik7CgkJCQl9CgkJCQkkZHQgPSBuZXcgRGF0ZVRpbWUoJG1kYXRhWydwbGF5d2hlbiddLG5ldyBEYXRlVGltZVpvbmUoJGJkYXRhWyd0aW1lem9uZSddKSk7CgoJCQkJJG5hbWUgPSBzcHJpbnRmKCRyZWxhdGlvbnNbJ3ZzJ10sJHRBLCR0Qik7CgkJCQkkYm9keSA9IGFycmF5KCRuYW1lLCcnLCR0cmVzLCcnKTsKCQkJCSRzY29yZSA9ICRwYXJhbXNbJ3Njb3JlJ11bJGluZHhdOwoJCQkJaWYgKCEkc2NvcmUpCgkJCQl7CgkJCQkJaWYgKCRyZXMgPT0gVG91cm5leTo6V09OQSB8fCAkcmVzID09IFRvdXJuZXk6OldPTkIpCgkJCQkJCSRzY29yZSA9ICR0aGlzLT5MYW5nKCdtaXNzaW5nJyk7CgkJCQl9CgkJCQlpZiAoJHNjb3JlKQoJCQkJewoJCQkJCSRib2R5W10gPSAkdGhpcy0+TGFuZygnc2NvcmUnKS4nICcuJHNjb3JlOwoJCQkJCSRib2R5W10gPSAnJzsKCQkJCX0KCQkJCWlmICgkcmVzID09IFRvdXJuZXk6OldPTkEgfHwgJHJlcyA9PSBUb3VybmV5OjpXT05CKQoJCQkJewoJCQkJCSR3aGVuID0gJHBhcmFtc1snd2hlbiddWyRpbmR4XTsKCQkJCQlpZiAoJHdoZW4pCgkJCQkJewoJCQkJCQkkZW5kcyA9IGRhdGVfcGFyc2UoJHdoZW4pOwoJCQkJCQlpZigkZW5kcyAmJiAkZW5kc1snZXJyb3JfY291bnQnXSA9PSAwKQoJCQkJCQl7CgkJCQkJCQkkc3RhcnRzID0gZ2V0ZGF0ZSgkZHQtPmdldFRpbWVzdGFtcCgpKTsKCQkJCQkJCWlmKCEkZW5kc1sneWVhciddKSAkZW5kc1sneWVhciddID0gJHN0YXJ0c1sneWVhciddOwoJCQkJCQkJaWYoISRlbmRzWydtb250aCddKSAkZW5kc1snbW9udGgnXSA9ICRzdGFydHNbJ21vbiddOwoJCQkJCQkJaWYoISRlbmRzWydkYXknXSkgJGVuZHNbJ2RheSddID0gJHN0YXJ0c1snbWRheSddOwoJCQkJCQkJaWYoISRlbmRzWydob3VyJ10pICRlbmRzWydob3VyJ10gPSAkc3RhcnRzWydob3VycyddOwoJCQkJCQkJaWYoISRlbmRzWydtaW51dGUnXSkKCQkJCQkJCXsKCQkJCQkJCQkkZW5kc1snbWludXRlJ10gPSAkc3RhcnRzWydtaW51dGVzJ107CgkJCQkJCQkJJG9mZnMgPSAxODAwOyAvL2FyYml0cmFyeSAzMC1taW4gaW5jcmVtZW50CgkJCQkJCQl9CgkJCQkJCQllbHNlCgkJCQkJCQkJJG9mZnMgPSAwOwoJCQkJCQkJJGR0LT5zZXREYXRlKCRlbmRzWyd5ZWFyJ10sJGVuZHNbJ21vbnRoJ10sJGVuZHNbJ2RheSddKTsKCQkJCQkJCSRkdC0+c2V0VGltZSgkZW5kc1snaG91ciddLCRlbmRzWydtaW51dGUnXSk7CgkJCQkJCQkkd2hlbiA9IHN0cmZ0aW1lKCclRiAlUicsJGR0LT5nZXRUaW1lc3RhbXAoKSskb2Zmcyk7CgkJCQkJCQkkZmluaXNoZWQgPSAkd2hlbjsKCQkJCQkJfQoJCQkJCQllbHNlCgkJCQkJCQkkd2hlbiA9IEZBTFNFOwoJCQkJCX0KCQkJCQlpZighJHdoZW4pCgkJCQkJewoJCQkJCQkkd2hlbiA9ICRtZGF0YVsncGxheXdoZW4nXTsgLy9kZWZhdWx0IHRvIHNjaGVkdWxlZCBzdGFydCB0aW1lCgkJCQkJCSRmaW5pc2hlZCA9ICR0aGlzLT5MYW5nKCdtaXNzaW5nJyk7CgkJCQkJfQoJCQkJCSRib2R5W10gPSAkdGhpcy0+TGFuZygndGl0bGV3aGVuJykuJyAnLiRmaW5pc2hlZDsKCQkJCQkkYm9keVtdID0gJyc7CgkJCQl9CgkJCQlpZiAoJHBhcmFtc1snY29tbWVudCddKQoJCQkJewoJCQkJCSRib2R5W10gPSAkcGFyYW1zWydjb21tZW50J107IC8vbm8gYWRkZWQgbGluZS1icmVha3MKCQkJCQkkYm9keVtdID0gJyc7CgkJCQl9CgkJCQlpZiAoJHBhcmFtc1snc2VuZGVyJ10pCgkJCQkJJGJvZHlbXSA9ICR0aGlzLT5MYW5nKCdyZXBvcnRlcicsJHBhcmFtc1snc2VuZGVyJ10pOwoJCQkJaWYoJHNhdmUpCgkJCQl7CgkJCQkJJGJvZHlbXSA9ICcnOwoJCQkJCSRib2R5W10gPSAkdGhpcy0+TGFuZygncHJvY2Vzc2VkJyk7CgkJCQl9CgoJCQkJJGZ1bmNzID0gbmV3IHRtdENvbW0oJHRoaXMpOwoJCQkJbGlzdCgkcmVzLCRlcnJtc2cpID0gJGZ1bmNzLT5UZWxsT3duZXIoJGJyYWNrZXRfaWQsJHBhcmFtc1snbWF0Y2gnXSwkYm9keSk7CgkJCQlpZigkcmVzKQoJCQkJCSRtc2cgPSAkdGhpcy0+TGFuZygnc2VudG9rJyk7CgkJCQllbHNlCgkJCQl7CgkJCQkJJG1zZyA9ICR0aGlzLT5MYW5nKCdub3RzZW50Jyk7CgkJCQkJaWYoJGVycm1zZykKCQkJCQkJJG1zZyAuPSAnPGJyIC8+Jy4kZXJybXNnOwoJCQkJfQoKCQkJCWlmKCRzYXZlKQoJCQkJewoJCQkJCSRzcWwgPSAnVVBEQVRFICcuJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlcyBTRVQgcGxheXdoZW49Pywgc2NvcmU9PywJc3RhdHVzPT8gV0hFUkUgbWF0Y2hfaWQ9Pyc7CgkJCQkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJHdoZW4sJHNjb3JlLCRyZXMsJHBhcmFtc1snbWF0Y2gnXSkpOwoJCQkJCSR0ID0gJGRiLT5HZW5JRCgkcHJlZi4nbW9kdWxlX3RtdF9oaXN0b3J5X3NlcScpOwoJCQkJCWlmKCRwYXJhbXNbJ3NlbmRlciddKQoJCQkJCQkkYnkgPSAkcGFyYW1zWydzZW5kZXInXTsKCQkJCQkkZHQtPm1vZGlmeSgnbm93Jyk7CgkJCQkJJHdoZW4gPSBzdHJmdGltZSgnJUYgJVQnLCRkdC0+Z2V0VGltZXN0YW1wKCkpOwoJCQkJCSRzcWwgPSAnSU5TRVJUIElOVE8gJy4kcHJlZi4KCQkJCQknbW9kdWxlX3RtdF9oaXN0b3J5IChoaXN0b3J5X2lkLGJyYWNrZXRfaWQsY2hhbmdlcixjaGFuZ2V3aGVuLG9sZGRhdGEsbmV3ZGF0YSxjb21tZW50IFZBTFVFUyAoPyw/LD8sPyw/LD8sPyknOwoJCQkJCSRkYi0+RXhlY3V0ZSgkc3FsLGFycmF5KCR0LCRicmFja2V0X2lkLCRieSwkd2hlbixOVUxMLCR0cmVzLCR0aGlzLT5MYW5nKCdtYXRjaF9hZGRlZCcsJHBhcmFtc1snbWF0Y2gnXSkpKTsKCgkJCQkJJGZ1bmNzID0gbmV3IHRtdFNjaGVkdWxlKCk7CgkJCQkJJGZ1bmNzLT5TY2hlZHVsZU1hdGNoZXMoJHRoaXMsJGJyYWNrZXRfaWQpOwoJCQkJfQoKCQkJCSRwYXJhbXMgPSBhcnJheSgKCQkJCQknYnJhY2tldF9pZCc9PiRicmFja2V0X2lkLAoJCQkJCSd2aWV3Jz0+JHBhcmFtc1sndmlldyddLAoJCQkJCSdtZXNzYWdlJz0+JG1zZwoJCQkJKTsKCQkJCSR0aGlzLT5SZWRpcmVjdEZvckZyb250RW5kKCRpZCwkcmV0dXJuaWQsJ2RlZmF1bHQnLCRwYXJhbXMpOwoJCQl9CgkJCWVsc2UKCQkJCSRrZXkgPSAnZXJyX25vcmVzdWx0Mic7CgkJfQoJCWVsc2UKCQkJJGtleSA9ICdlcnJfbm9tYXRjaCc7Cgl9CgllbHNlCgkJJGtleSA9ICdlcnJfY2FwdGNoYSc7CgoJJHNtYXJ0eS0+YXNzaWduKCdtZXNzYWdlJywkdGhpcy0+TGFuZygka2V5KSk7CgkvL2ZhbGwgaW50byByZXBlYXQgcHJlc2VudGF0aW9uCn0KCiRzbWFydHktPmFzc2lnbigndGl0bGUnLCRiZGF0YVsnbmFtZSddKTsKaWYgKCRiZGF0YVsnZGVzY3JpcHRpb24nXSkKCSRkZXNjID0gJGJkYXRhWydkZXNjcmlwdGlvbiddLic8YnIgLz48YnIgLz4nOwplbHNlCgkkZGVzYyA9ICcnOwokZGVzYyAuPSAkdGhpcy0+TGFuZygndGl0bGVzY29yZWQnKTsKJHNtYXJ0eS0+YXNzaWduKCdkZXNjcmlwdGlvbicsJGRlc2MpOwoKLy9zY3JpcHQgYWNjdW11bGF0b3JzCiRqc2Z1bmNzID0gYXJyYXkoKTsKJGpzbG9hZHMgPSBhcnJheSgpOwoKJHNxbCA9ICdTRUxFQ1QgbWF0Y2hfaWQsdGVhbUEsdGVhbUIgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X21hdGNoZXMgV0hFUkUgYnJhY2tldF9pZD0/IEFORCBmbGFncz0wIEFORCBzdGF0dXM8Jy4KIFRvdXJuZXk6OkFOT04uJyBBTkQgdGVhbUEgSVMgTk9UIE5VTEwgQU5EIHRlYW1BIT0tMSBBTkQgdGVhbUIgSVMgTk9UIE5VTEwgQU5EIHRlYW1CIT0tMSc7CiRtZGF0YSA9ICRkYi0+R2V0QXNzb2MoJHNxbCxhcnJheSgkYnJhY2tldF9pZCkpOwppZiAoJG1kYXRhKQp7CgkkZGVmID0gJHRoaXMtPkxhbmcoJ2Nob29zZW9uZScpOwoJJHJlbGF0aW9ucyA9ICR0aGlzLT5SZXN1bHRUZW1wbGF0ZXMoJGJyYWNrZXRfaWQsRkFMU0UpOwoJJG5hbWUgPSAnbWF0Y2gnOyAvL2JlY29tZXMgYSByZXR1cm5lZCBwYXJhbWV0ZXIKCSRpbmR4ID0gMDsKCSRtYXRjaGVzID0gYXJyYXkoKTsKCglmb3JlYWNoKCRtZGF0YSBhcyAkbWlkPT4kdGVhbXMpCgl7CgkJJG9uZSA9IG5ldyBzdGRDbGFzcygpOwoJCSR0QSA9ICR0aGlzLT5UZWFtTmFtZSgkdGVhbXNbJ3RlYW1BJ10pOwoJCSR0QiA9ICR0aGlzLT5UZWFtTmFtZSgkdGVhbXNbJ3RlYW1CJ10pOwoJCSRsYmwgPSBzcHJpbnRmKCRyZWxhdGlvbnNbJ3ZzJ10sJHRBLCR0Qik7CgkJJGluZHgrKzsKCQkvL3JhZGlvIGJ1dHRvbiwgcGx1cyBoaWRkZW4gc2hvd25bXSAoTk9UICdsaXN0W10nIG9yICd2aWV3W10nISkgdG8gcmV0dXJuIGFsbCByb3cgaW5kaWNlcyBzbyBjYW4gZ2V0IGluZGV4IG9mIHNlbGVjdGVkIHJvdwoJCSRvbmUtPmJ1dHRvbiA9ICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSInLiRpZC4nc2hvd25bXSIgdmFsdWU9IicuJG1pZC4nIj4nLgoJCSc8aW5wdXQgY2xhc3M9Im1yYWRpbyIgdHlwZT0icmFkaW8iIG5hbWU9IicuJGlkLiRuYW1lLiciIGlkPSInLiRpZC4kbmFtZS4kaW5keC4nIiB2YWx1ZT0iJy4kbWlkLiciIC8+PGxhYmVsIGZvcj0iJy4kaWQuJG5hbWUuJGluZHguJyI+ICcuJGxibC4nPC9sYWJlbD4nOwoJCSRjaG9pY2VzID0gYXJyYXkoCgkJCSRkZWY9Pi0xLAoJCQlzdHJfcmVwbGFjZSgnJXMnLCR0QSwkcmVsYXRpb25zWyd3b24nXSk9PlRvdXJuZXk6OldPTkEsCgkJCXN0cl9yZXBsYWNlKCclcycsJHRCLCRyZWxhdGlvbnNbJ3dvbiddKT0+VG91cm5leTo6V09OQiwKCQkJc3RyX3JlcGxhY2UoJyVzJywkdEEsJHJlbGF0aW9uc1snZm9yZiddKT0+VG91cm5leTo6Rk9SRkEsCgkJCXN0cl9yZXBsYWNlKCclcycsJHRCLCRyZWxhdGlvbnNbJ2ZvcmYnXSk9PlRvdXJuZXk6OkZPUkZCLAoJCSk7CgkJaWYgKCRiZGF0YVsnY2FudGllJ10pCgkJCSRjaG9pY2VzWyRiZGF0YVsndGllZCddXT1Ub3VybmV5OjpNVElFRDsKCQkkY2hvaWNlc1skYmRhdGFbJ25vbWF0Y2gnXV09VG91cm5leTo6Tk9XSU47CgoJCSRvbmUtPmNob29zZXIgPSAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsJ3Jlc3VsdFtdJywkY2hvaWNlcywnJywtMSk7CgkJJG9uZS0+c2NvcmUgPSAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwnc2NvcmVbXScsJycsMTAsMzApOwoJCSRvbmUtPndoZW4gPSAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwnd2hlbltdJywnJywxMCwyMCk7CgkJJG1hdGNoZXNbXSA9ICRvbmU7Cgl9Cgkkc21hcnR5LT5hc3NpZ24oJ21hdGNoZXMnLCRtYXRjaGVzKTsKCSRzbWFydHktPmFzc2lnbigndGl0bGVyZXN1bHQnLCR0aGlzLT5MYW5nKCd0aXRsZV9yZXN1bHQnKSk7Cgkkc21hcnR5LT5hc3NpZ24oJ3RpdGxlc2NvcmUnLCR0aGlzLT5MYW5nKCdzY29yZScpKTsKCSRzbWFydHktPmFzc2lnbigndGl0bGV3aGVuJywkdGhpcy0+TGFuZygndGl0bGV3aGVuJykpOwoJJHNtYXJ0eS0+YXNzaWduKCd0aXRsZXNlbmRlcicsJHRoaXMtPkxhbmcoJ3RpdGxlc2VuZGVyJykpOwoJJHNtYXJ0eS0+YXNzaWduKCdpbnB1dHNlbmRlcicsJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ3NlbmRlcicsJycsMTUsMzApKTsKCSRzbWFydHktPmFzc2lnbigndGl0bGVjb21tZW50JywkdGhpcy0+TGFuZygndGl0bGVjb21tZW50JykpOwoJJHNtYXJ0eS0+YXNzaWduKCdpbnB1dGNvbW1lbnQnLCR0aGlzLT5DcmVhdGVUZXh0QXJlYShGQUxTRSwkaWQsJycsJ2NvbW1lbnQnLCcnLCcnLCcnLCcnLDUwLDUsJycsJycsJ3N0eWxlPSJoZWlnaHQ6NWVtOyInKSk7Cgkkb2IgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0NhcHRjaGEnKTsKCWlmICgkb2IpCgl7CgkJJHNtYXJ0eS0+YXNzaWduKCdjYXB0Y2hhJywkb2ItPmdldENhcHRjaGEoKSk7CgkJJHNtYXJ0eS0+YXNzaWduKCd0aXRsZWNhcHRjaGEnLCR0aGlzLT5MYW5nKCd0aXRsZWNhcHRjaGEnKSk7CgkJJHNtYXJ0eS0+YXNzaWduKCdpbnB1dGNhcHRjaGEnLCR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCdjYXB0Y2hhJywnJyw1LDEwKSk7Cgl9CgoJJGpzbG9hZHNbXSA9IDw8PCBFT1MKICQoJy5zZWVibG9jaycpLmNzcygnZGlzcGxheScsJ25vbmUnKTsgIAogJCgnLm1yYWRpbycpLmNsaWNrKGZ1bmN0aW9uKCkgewogICQoJy5zZWVibG9jaycpLmNzcygnZGlzcGxheScsJ25vbmUnKTsKICBcJCh0aGlzKS5wYXJlbnQoKS5uZXh0KCkuY3NzKCdkaXNwbGF5JywnYmxvY2snKTsKIH0pOwoKRU9TOwoJJGpzZnVuY3NbXSA9IDw8PCBFT1MKZnVuY3Rpb24gZXZlbnRDYW5jZWwoZXYpIHsKIGlmICghZXYpIHsKICBpZiAod2luZG93LmV2ZW50KSBldiA9IHdpbmRvdy5ldmVudDsKICBlbHNlIHJldHVybjsKIH0KIGlmIChldi5jYW5jZWxCdWJibGUgIT09IG51bGwpIGV2LmNhbmNlbEJ1YmJsZSA9IHRydWU7CiBpZiAoZXYuc3RvcFByb3BhZ2F0aW9uKSBldi5zdG9wUHJvcGFnYXRpb24oKTsKIGlmIChldi5wcmV2ZW50RGVmYXVsdCkgZXYucHJldmVudERlZmF1bHQoKTsKIGlmICh3aW5kb3cuZXZlbnQpIGV2LnJldHVyblZhbHVlID0gZmFsc2U7CiBpZiAoZXYuY2FuY2VsICE9PSBudWxsKSBldi5jYW5jZWwgPSB0cnVlOwp9CmZ1bmN0aW9uIHNob3dlcnIobXNnKSB7CiAkKCcjbG9jYWxlcnInKS5odG1sKG1zZykuY3NzKCdkaXNwbGF5JywnYmxvY2snKTsKfQoKRU9TOwoJaWYoJGJkYXRhWydsb2dpYyddKQoJewoJCSRqc2Z1bmNzW10gPSA8PDwgRU9TCmZ1bmN0aW9uIGN1c3RvbXZhbGlkYXRlKCkgewogeyRiZGF0YVsnbG9naWMnXX0KIHJldHVybiB0cnVlOwp9CgpFT1M7CgkJJHhqcyA9IDw8PCBFT1MKICBlbHNlIGlmICghY3VzdG9tdmFsaWRhdGUoKSkgewogICBvayA9IGZhbHNlOwogIH0KRU9TOwoJfQoJZWxzZSAvL25vIGxvZ2ljCgkJJHhqcyA9ICcnOwoKCSRmdW5jc3RyID0gPDw8IEVPUwpmdW5jdGlvbiB2YWxpZGF0ZShldixidG4pIHsKICQoJyNzeXNlcnInKS5jc3MoJ2Rpc3BsYXknLCdub25lJyk7CiB2YXIgb2sgPSB0cnVlOwogdmFyIHNlbCA9ICQoJ2lucHV0OmNoZWNrZWQnKTsKIGlmICgkKHNlbCkubGVuZ3RoID09IDApIHsKICBzaG93ZXJyKCd7JHRoaXMtPkxhbmcoJ2Vycl9ub21hdGNoJyl9Jyk7CiAgb2sgPSBmYWxzZTsKIH0gZWxzZSB7CiAgdmFyIGRpdiA9ICQoc2VsWzBdKS5wYXJlbnQoKS5uZXh0KCk7CiAgdmFyIHJlcyA9ICQoZGl2KS5jaGlsZHJlbignLmNtc19kcm9wZG93bicpLnZhbCgpOwogIHZhciB3aGVuID0gJChkaXYpLmZpbmQoJ2lucHV0W25hbWU9InskaWR9d2hlbltdIl0nKS52YWwoKTsKICBzd2l0Y2ggKHJlcykgewogICBjYXNlICctMSc6CiAgICBzaG93ZXJyKCd7JHRoaXMtPkxhbmcoJ2Vycl9ub3Jlc3VsdCcpfScpOwogICAgb2sgPSBmYWxzZTsKICAgIGJyZWFrOwogICBjYXNlICclcyc6CiAgIGNhc2UgJyVzJzoKICAgY2FzZSAnJXMnOgogICAgaWYgKHdoZW4gPT0gJycpIHsKICAgICBvayA9IGZhbHNlOwogICAgfSBlbHNlIHsKICAgICB2YXIgcCA9IC9eKCgwP1sxLTldfDFbMDEyXSkoICo6ICpbMC01XVxkKXswLDJ9ICpbYXBBUF1bbU1dfChbMDFdXGR8MlswLTNdKSggKjogKlswLTVdXGQpezAsMn0pJC87Cgkgb2sgPSAod2hlbi50cmltKCkpLm1hdGNoKHApOwogICAgIGlmICghb2spIHsKCSAgb2sgPSAhaXNOYU4oRGF0ZS5wYXJzZSh3aGVuKSk7CiAgICAgfQogICAgfQogICAgaWYgKCFvaykKICAgICAgc2hvd2VycigneyR0aGlzLT5MYW5nKCdlcnJfbm90aW1lJyl9Jyk7CiAgIGRlZmF1bHQ6CiAgICBicmVhazsKICB9CiAgaWYgKG9rKSB7CiAgIGlmICgkKCcjeyRpZH1zZW5kZXInKS52YWwoKSA9PSAnJykgewogICBzaG93ZXJyKCd7JHRoaXMtPkxhbmcoJ2Vycl9ub3NlbmRlcicpfScpOwogICBvayA9IGZhbHNlOyAKICAgfQogICBlbHNlIGlmICgkKCd7JGlkfWNhcHRjaGEnKS52YWwoKSA9PSAnJykgewogICBzaG93ZXJyKCd7JHRoaXMtPkxhbmcoJ2Vycl9ub2NhcHRjaGEnKX0nKTsKICAgb2sgPSBmYWxzZTsKICAgfQogIH0keGpzCiB9CiBpZiAob2spIHsKICBzZXRfYWN0aW9uKGJ0bik7CiAgcmV0dXJuIHRydWU7CiB9IGVsc2UgewogIGV2ZW50Q2FuY2VsKGV2KTsKICByZXR1cm4gZmFsc2U7CiB9Cn0KCkVPUzsKCSRqc2Z1bmNzW10gPSBzcHJpbnRmKCRmdW5jc3RyLFRvdXJuZXk6OldPTkEsVG91cm5leTo6V09OQixUb3VybmV5OjpNVElFRCk7Cn0KZWxzZSAvL25vIG1kYXRhCgkkc21hcnR5LT5hc3NpZ24oJ25vbWF0Y2hlcycsJHRoaXMtPkxhbmcoJ2luZm9fbm9tYXRjaCcpKTsgLy9UT0RPIGJldHRlciBtZXNzYWdlIGZvciBmcm9udGVuZAoKJHNtYXJ0eS0+YXNzaWduKCdoaWRkZW4nLAoJJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwnYnJhY2tldF9pZCcsICRicmFja2V0X2lkKS4KCSR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ3ZpZXcnLCAkcGFyYW1zWyd2aWV3J10pLgoJJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwncmVhbF9hY3Rpb24nLCdub3NlbmQnKSk7CiRzbWFydHktPmFzc2lnbignc3RhcnRfZm9ybScsJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsJ3Jlc3VsdCcsJHJldHVybmlkKSk7CiRzbWFydHktPmFzc2lnbignZW5kX2Zvcm0nLCR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwoKJHNtYXJ0eS0+YXNzaWduKCdzZW5kJywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0RGVmYXVsdCgkaWQsJ3NlbmQnLCR0aGlzLT5MYW5nKCdzdWJtaXQnKSwKCSdvbmNsaWNrPSJyZXR1cm4gdmFsaWRhdGUoZXZlbnQsdGhpcykiJykpOwovLydjYW5jZWwnIGFjdGlvbi1uYW1lIGlzIHVzZWQgYnkgb3RoZXIgZm9ybShzKQokc21hcnR5LT5hc3NpZ24oJ2NhbmNlbCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ25vc2VuZCcsJHRoaXMtPkxhbmcoJ2NhbmNlbCcpKSk7CgppZigkanNsb2FkcykKewoJJGpzZnVuY3NbXSA9ICcKJChmdW5jdGlvbigpIHsKJzsKCSRqc2Z1bmNzID0gYXJyYXlfbWVyZ2UoJGpzZnVuY3MsJGpzbG9hZHMpOwoJJGpzZnVuY3NbXSA9ICd9KTsKJzsKfQokc21hcnR5LT5hc3NpZ24oJ2pzZnVuY3MnLCAkanNmdW5jcyk7CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ3Jlc3VsdF9yZXBvcnQudHBsJyk7Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/action.save_comp.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKClRoaXMgYWN0aW9uIGRlYWxzIHdpdGggJ3Blcm1hbmVudCcgc2F2aW5nIG9mIGRhdGEgaW50byBtb2R1bGUgdGFibGVzLGFuZCBhbHNvCnVwZGF0ZXMgd2hpY2ggc2V0IGZsYWdzIHRvIGVuYWJsZSB1bmRvIGlmIHNvIHdhbnRlZAoqLwoKaWYoISR0aGlzLT5DaGVja0FjY2VzcygnYWRtb2QnKSkKewoJaWYoaXNzZXQoJHBhcmFtc1snY2FuY2VsJ10pKQoJCSR0aGlzLT5SZWRpcmVjdCgkaWQsJ2RlZmF1bHRhZG1pbicpOwoJZWxzZWlmKCEkdGhpcy0+Q2hlY2tBY2Nlc3MoJ3Njb3JlJykpCgkJJHRoaXMtPlJlZGlyZWN0KCRpZCwnZGVmYXVsdGFkbWluJywnJywKCQkJYXJyYXkoJ3RtdF9tZXNzYWdlJz0+JHRoaXMtPlByZXR0eU1lc3NhZ2UoJ2xhY2twZXJtaXNzaW9uJyxGQUxTRSkpKTsKfQoKJHByZWYgPSBjbXNfZGJfcHJlZml4KCk7CgppZihpc3NldCgkcGFyYW1zWydhcHBseSddKSB8fCBpc3NldCgkcGFyYW1zWydzdWJtaXQnXSkpCnsKCSRmdW5jcyA9IG5ldyB0bXREYXRhKCk7CgkkZGF0YSA9ICRmdW5jcy0+R2V0VmFsaWREYXRhKCR0aGlzLCRwYXJhbXMpOwoJaWYoZW1wdHkoJGRhdGEtPmVycm9yKSkKCXsKCQkvL2NhY2hlIGN1cnJlbnQgZGF0YSxmb3IgY29tcGFyaXNvbnMgd2l0aCBuZXcKCQkkc3FsID0gJ1NFTEVDVCAqIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9icmFja2V0cyBXSEVSRSBicmFja2V0X2lkPT8nOwoJCSRiZGF0YSA9ICRkYi0+R2V0Um93KCRzcWwsYXJyYXkoJGRhdGEtPmJyYWNrZXRfaWQpKTsKCQkvL2NhY2hlIGRhdGEgZm9yIHJlbGF0ZWQgdGFibGVzIGFuZCBvdGhlciBkYXRhIG5vdCBpbiBicmFja2V0cy10YWJsZQoJCSR0ZWFtcyA9ICRkYXRhLT50ZWFtczsKCQl1bnNldCgkZGF0YS0+dGVhbXMpOwoJCSRtYXRjaGVzID0gJGRhdGEtPm1hdGNoZXM7CgkJdW5zZXQoJGRhdGEtPm1hdGNoZXMpOwoJCSRyZXN1bHRzID0gJGRhdGEtPnJlc3VsdHM7CgkJdW5zZXQoJGRhdGEtPnJlc3VsdHMpOwoJCS8vdGhlc2UgdmFsdWVzIG1heSBiZSBOVUxMIGlmIG5vdCBwcmVzZW50IGluIGRhdGEgZnJvbSBVSQoJCSRtb3RwbCA9ICRkYXRhLT5tb3RlbXBsYXRlOwoJCXVuc2V0KCRkYXRhLT5tb3RlbXBsYXRlKTsKCQkkbWN0cGwgPSAkZGF0YS0+bWNhbmN0ZW1wbGF0ZTsKCQl1bnNldCgkZGF0YS0+bWNhbmN0ZW1wbGF0ZSk7CgkJJG1ydHBsID0gJGRhdGEtPm1yZXF0ZW1wbGF0ZTsKCQl1bnNldCgkZGF0YS0+bXJlcXRlbXBsYXRlKTsKCQkkbWl0cGwgPSAkZGF0YS0+bWl0ZW1wbGF0ZTsKCQl1bnNldCgkZGF0YS0+bWl0ZW1wbGF0ZSk7CgkJJHRvdHBsID0gJGRhdGEtPnRvdGVtcGxhdGU7CgkJdW5zZXQoJGRhdGEtPnRvdGVtcGxhdGUpOwoJCSR0Y3RwbCA9ICRkYXRhLT50Y2FuY3RlbXBsYXRlOwoJCXVuc2V0KCRkYXRhLT50Y2FuY3RlbXBsYXRlKTsKCQkkdHJ0cGwgPSAkZGF0YS0+dHJlcXRlbXBsYXRlOwoJCXVuc2V0KCRkYXRhLT50cmVxdGVtcGxhdGUpOwoJCSR0aXRwbCA9ICRkYXRhLT50aXRlbXBsYXRlOwoJCXVuc2V0KCRkYXRhLT50aXRlbXBsYXRlKTsKCQlpZigkZGF0YS0+aHRtbCA9PSBOVUxMKQoJCQkkZGF0YS0+aHRtbCA9IChpbnQpJGJkYXRhWydodG1sJ107IC8vcmV0YWluIGN1cnJlbnQgdmFsdWUKCgkJJGNodHRwbCA9ICRkYXRhLT5jaHR0ZW1wbGF0ZTsKCQl1bnNldCgkZGF0YS0+Y2h0dGVtcGxhdGUpOwoJCSRjc3NmaWxlID0gJGRhdGEtPmNzc2ZpbGU7CgkJdW5zZXQoJGRhdGEtPmNzc2ZpbGUpOwoJCSRtYXRjaHZpZXcgPSAkZGF0YS0+bWF0Y2h2aWV3OwoJCXVuc2V0KCRkYXRhLT5tYXRjaHZpZXcpOwoJCSRyZXN1bHR2aWV3ID0gJGRhdGEtPnJlc3VsdHZpZXc7CgkJdW5zZXQoJGRhdGEtPnJlc3VsdHZpZXcpOwoJCSRicmFja2V0X2lkID0gJGRhdGEtPmJyYWNrZXRfaWQ7CgkJdW5zZXQoJGRhdGEtPmJyYWNrZXRfaWQpOwoKCQkkb2xkID0gZW1wdHkoJGRhdGEtPmFkZGVkKTsKCQlpZihpc3NldCgkZGF0YS0+YWRkZWQpKQoJCQl1bnNldCgkZGF0YS0+YWRkZWQpOwoJCSRtYWluZmllbGRzID0gKGFycmF5KSRkYXRhOwoKCQkkbmV3dHlwZSA9ICgkYmRhdGFbJ3R5cGUnXSAhPSAkZGF0YS0+dHlwZSk7CgkJLy9hc3N1bWUgZGlydHkgaWYgYW55IG1hdGNoIHNhdmVkIGhlcmUsIG9yIGlmIGFsbCBtYXRjaGVzIGNvbXBsZXRlZAoJCSRzdGF0ID0gKCRtYXRjaGVzIHx8ICRuZXd0eXBlKT8xOjA7CgkJaWYoISgkc3RhdCB8fCAkbWF0Y2hlcykpCgkJewoJCQkkc3FsID0gJ1NFTEVDVCAxIEFTIHllcyBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlcyBXSEVSRSBicmFja2V0X2lkPT8gQU5EIGZsYWdzPTAnOwoJCQkkcnMgPSAkZGItPlNlbGVjdExpbWl0KCRzcWwsMSwtMSxhcnJheSgkYnJhY2tldF9pZCkpOwoJCQlpZigkcnMpCgkJCXsKCQkJCWlmKCEkcnMtPkVPRikgLy9tYXRjaChlcykgZXhpc3QsIHNvIG11c3QgYmUgY29tcGxldGVkIGJyYWNrZXQKCQkJCQkkc3RhdCA9IDE7CgkJCQkkcnMtPkNsb3NlKCk7CgkJCX0KCQl9CgkJJG1haW5maWVsZHNbJ2NoYXJ0YnVpbGQnXSA9ICRzdGF0OwoKCQkkZmllbGRzID0gaW1wbG9kZSgnPT8sJyxhcnJheV9rZXlzKCRtYWluZmllbGRzKSkuJz0/JzsKCQkkc3FsID0gJ1VQREFURSAnLiRwcmVmLidtb2R1bGVfdG10X2JyYWNrZXRzIFNFVCAnLiRmaWVsZHMuJyBXSEVSRSBicmFja2V0X2lkPT8nOwoJCSRhcmdzID0gYXJyYXlfdmFsdWVzKCRtYWluZmllbGRzKTsKCQkkYXJnc1tdID0gJGJyYWNrZXRfaWQ7CgkJJHJlcyA9ICRkYi0+RXhlY3V0ZSgkc3FsLCRhcmdzKTsKCgkJaWYoJHJlcykKCQl7CgkJCWlmKCRtb3RwbCAhPSBOVUxMKQoJCQl7CgkJCQlpZigkbW90cGwpCgkJCQkJJHRoaXMtPlNldFRlbXBsYXRlKCdtYWlsb3V0XycuJGJyYWNrZXRfaWQuJ190ZW1wbGF0ZScsJG1vdHBsKTsKCQkJCWVsc2UKCQkJCQkkdGhpcy0+RGVsZXRlVGVtcGxhdGUoJ21haWxvdXRfJy4kYnJhY2tldF9pZC4nX3RlbXBsYXRlJyk7CgkJCX0KCQkJaWYoJG1jdHBsICE9IE5VTEwpCgkJCXsKCQkJCWlmKCRtY3RwbCkKCQkJCQkkdGhpcy0+U2V0VGVtcGxhdGUoJ21haWxjYW5jZWxfJy4kYnJhY2tldF9pZC4nX3RlbXBsYXRlJywkbWN0cGwpOwoJCQkJZWxzZQoJCQkJCSR0aGlzLT5EZWxldGVUZW1wbGF0ZSgnbWFpbGNhbmNlbF8nLiRicmFja2V0X2lkLidfdGVtcGxhdGUnKTsKCQkJfQoJCQlpZigkbXJ0cGwgIT0gTlVMTCkKCQkJewoJCQkJaWYoJG1ydHBsKQoJCQkJCSR0aGlzLT5TZXRUZW1wbGF0ZSgnbWFpbHJlcXVlc3RfJy4kYnJhY2tldF9pZC4nX3RlbXBsYXRlJywkbXJ0cGwpOwoJCQkJZWxzZQoJCQkJCSR0aGlzLT5EZWxldGVUZW1wbGF0ZSgnbWFpbHJlcXVlc3RfJy4kYnJhY2tldF9pZC4nX3RlbXBsYXRlJyk7CgkJCX0KCQkJaWYoJG1pdHBsICE9IE5VTEwpCgkJCXsKCQkJCWlmKCRtaXRwbCkKCQkJCQkkdGhpcy0+U2V0VGVtcGxhdGUoJ21haWxpbl8nLiRicmFja2V0X2lkLidfdGVtcGxhdGUnLCRtaXRwbCk7CgkJCQllbHNlCgkJCQkJJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCdtYWlsaW5fJy4kYnJhY2tldF9pZC4nX3RlbXBsYXRlJyk7CgkJCX0KCQkJaWYoJHRvdHBsICE9IE5VTEwpCgkJCXsKCQkJCWlmKCR0b3RwbCkKCQkJCQkkdGhpcy0+U2V0VGVtcGxhdGUoJ3R3ZWV0b3V0XycuJGJyYWNrZXRfaWQuJ190ZW1wbGF0ZScsJHRvdHBsKTsKCQkJCWVsc2UKCQkJCQkkdGhpcy0+RGVsZXRlVGVtcGxhdGUoJ3R3ZWV0b3V0XycuJGJyYWNrZXRfaWQuJ190ZW1wbGF0ZScpOwoJCQl9CgkJCWlmKCR0Y3RwbCAhPSBOVUxMKQoJCQl7CgkJCQlpZigkdGN0cGwpCgkJCQkJJHRoaXMtPlNldFRlbXBsYXRlKCd0d2VldGNhbmNlbF8nLiRicmFja2V0X2lkLidfdGVtcGxhdGUnLCR0Y3RwbCk7CgkJCQllbHNlCgkJCQkJJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCd0d2VldGNhbmNlbF8nLiRicmFja2V0X2lkLidfdGVtcGxhdGUnKTsKCQkJfQoJCQlpZigkdHJ0cGwgIT0gTlVMTCkKCQkJewoJCQkJaWYoJHRydHBsKQoJCQkJCSR0aGlzLT5TZXRUZW1wbGF0ZSgndHdlZXRyZXF1ZXN0XycuJGJyYWNrZXRfaWQuJ190ZW1wbGF0ZScsJHRydHBsKTsKCQkJCWVsc2UKCQkJCQkkdGhpcy0+RGVsZXRlVGVtcGxhdGUoJ3R3ZWV0cmVxdWVzdF8nLiRicmFja2V0X2lkLidfdGVtcGxhdGUnKTsKCQkJfQoJCQlpZigkdGl0cGwgIT0gTlVMTCkKCQkJewoJCQkJaWYoJHRpdHBsKQoJCQkJCSR0aGlzLT5TZXRUZW1wbGF0ZSgndHdlZXRpbl8nLiRicmFja2V0X2lkLidfdGVtcGxhdGUnLCR0aXRwbCk7CgkJCQllbHNlCgkJCQkJJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCd0d2VldGluXycuJGJyYWNrZXRfaWQuJ190ZW1wbGF0ZScpOwoJCQl9CgkJCWlmKCRjaHR0cGwpCgkJCQkkdGhpcy0+U2V0VGVtcGxhdGUoJ2NoYXJ0XycuJGJyYWNrZXRfaWQuJ190ZW1wbGF0ZScsJGNodHRwbCk7CgkJCWVsc2UKCQkJCSR0aGlzLT5EZWxldGVUZW1wbGF0ZSgnY2hhcnRfJy4kYnJhY2tldF9pZC4nX3RlbXBsYXRlJyk7CgoJCQkkZnVuY3MgPSBuZXcgdG10RGF0YSgpOwoJCQkkc2NoID0gRkFMU0U7CgkJCWlmKCRuZXd0eXBlKQoJCQl7CgkJCQkvL3JlLXNjaGVkdWxlIGFsbCBtYXRjaGVzCgkJCQkkc3FsID0gJ0RFTEVURSBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlcyBXSEVSRSBicmFja2V0X2lkPT8nOwoJCQkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJGJyYWNrZXRfaWQpKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCWlmKCRtYXRjaGVzIHx8ICRyZXN1bHRzKQoJCQkJewoJCQkJCSRzcWwgPSAnU0VMRUNUIG1hdGNoX2lkIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzIFdIRVJFIGJyYWNrZXRfaWQ9PyBBTkQgZmxhZ3M9MCc7CgkJCQkJJGN1cnJlbnQgPSAkZGItPkdldENvbCgkc3FsLGFycmF5KCRicmFja2V0X2lkKSk7CgkJCQkJaWYoISRjdXJyZW50ICYmICRtYXRjaGVzKQoJCQkJCXsKCQkJCQkJcmVzZXQoJG1hdGNoZXMpOwoJCQkJCQlpZihrZXkoJG1hdGNoZXMpID4gMCkKCQkJCQkJCSR0aGlzLT5SZWRpcmVjdCgkaWQsJ2RlZmF1bHRhZG1pbicsJycsCgkJCQkJCQkJYXJyYXkoJ3RtdF9tZXNzYWdlJz0+JHRoaXMtPlByZXR0eU1lc3NhZ2UoJ2Vycl9tYXRjaCcsRkFMU0UpKSk7CgkJCQkJfQoJCQkJfQoJCQkJLy9zYXZlIG1hdGNoIGRhdGEgMXN0LCBsb3dlc3QgcHJpb3JpdHkKCQkJCWlmKCRtYXRjaGVzKQoJCQkJewoJCQkJCSRzcWwgPSAnVVBEQVRFICcuJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlcyBTRVQgcGxheXdoZW49PyxwbGFjZT0/LHN0YXR1cz0/IFdIRVJFIG1hdGNoX2lkPT8nOwoJCQkJCS8vZm9yIG5ldyBtYXRjaGVzIHNwZWNpZmllZCBpbiBSUlRZUEUgcGxhbiB2aWV3CgkJCQkJJHNxbDIgPSAnSU5TRVJUIElOVE8gJy4kcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzIChtYXRjaF9pZCxicmFja2V0X2lkLHRlYW1BLHRlYW1CLHBsYXl3aGVuLHBsYWNlLHN0YXR1cykgVkFMVUVTICg/LD8sPyw/LD8sPyw/KSc7CgkJCQkJJGlkcyA9IGFycmF5X2tleXMoJHBhcmFtc1snbWF0X3N0YXR1cyddKTsKCQkJCQlmb3JlYWNoKCRtYXRjaGVzIGFzICRtaWQ9PiRyb3cpCgkJCQkJewoJCQkJCQlpZigkbWlkIDwgMCB8fCBpbl9hcnJheSgkbWlkLCRjdXJyZW50KSkKCQkJCQkJewoJCQkJCQkJJGluZHggPSBhcnJheV9zZWFyY2goJG1pZCwkaWRzKTsKCQkJCQkJCSR0QSA9ICRwYXJhbXNbJ21hdF90ZWFtQSddWyRpbmR4XTsKCQkJCQkJCSR0QiA9ICRwYXJhbXNbJ21hdF90ZWFtQiddWyRpbmR4XTsKCQkJCQkJCSR3aGVuID0gJHJvd1sncGxheXdoZW4nXTsKCQkJCQkJCWlmKCR3aGVuKQoJCQkJCQkJCSRvbiA9ICRmdW5jcy0+R2V0Rm9ybWF0dGVkRGF0ZSgkd2hlbixGQUxTRSxUUlVFKTsKCQkJCQkJCWlmKCEkd2hlbiB8fCAhJG9uKQoJCQkJCQkJCSRvbiA9IE5VTEw7CgkJCQkJCQkkYXQgPSB0cmltKCRyb3dbJ3BsYWNlJ10pOwoJCQkJCQkJaWYoJGF0ID09IEZBTFNFKQoJCQkJCQkJCSRhdCA9IE5VTEw7CgkJCQkJCQkkc3RhdCA9IChpbnQpJHJvd1snc3RhdHVzJ107CgkJCQkJCQlpZigkb24pCgkJCQkJCQl7CgkJCQkJCQkJaWYoJHN0YXQgPCAwKSAvL25vdHlldAoJCQkJCQkJCQkkc3RhdCA9ICgkdEEgJiYgJHRCKSA/IFRvdXJuZXk6OlNPRlQ6VG91cm5leTo6QVNPRlQ7CgkJCQkJCQl9CgkJCQkJCQllbHNlCgkJCQkJCQl7CgkJCQkJCQkJaWYoJHN0YXQgPCBUb3VybmV5OjpBTk9OKQoJCQkJCQkJCQkkc3RhdCA9IDA7CgkJCQkJCQkJZWxzZWlmKCRzdGF0ID09IFRvdXJuZXk6OkFGSVJNKQoJCQkJCQkJCQkkc3RhdCA9IFRvdXJuZXk6OkFTT0ZUOwoJCQkJCQkJfQoJCQkJCQkJJG1hdGNoZXNbJG1pZF1bJ3N0YXR1cyddID0gJHN0YXQ7IC8vZm9yIHVzZSBkdXJpbmcgcmVzdWx0cyBwcm9jZXNzaW5nCgkJCQkJCQlpZiAoJG1pZCA+IDApCgkJCQkJCQkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJG9uLCRhdCwkc3RhdCwkbWlkKSk7CgkJCQkJCQllbHNlCgkJCQkJCQl7CgkJCQkJCQkJLy9jcmVhdGUgUlJUWVBFIG1hdGNoIG9uLXRoZS1mbHkKCQkJCQkJCQkkbWlkID0gJGRiLT5HZW5JRCgkcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzX3NlcScpOwoJCQkJCQkJCWlmKCEkdEEpCgkJCQkJCQkJCSR0QSA9IE5VTEw7CgkJCQkJCQkJaWYoISR0QikKCQkJCQkJCQkJJHRCID0gTlVMTDsKCQkJCQkJCQkkZGItPkV4ZWN1dGUoJHNxbDIsYXJyYXkoJG1pZCwkYnJhY2tldF9pZCwkdEEsJHRCLCRvbiwkYXQsJHN0YXQpKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQllbHNlCgkJCQkJCQkkdGhpcy0+UmVkaXJlY3QoJGlkLCdkZWZhdWx0YWRtaW4nLCcnLAoJCQkJCQkJCWFycmF5KCd0bXRfbWVzc2FnZSc9PiR0aGlzLT5QcmV0dHlNZXNzYWdlKCdlcnJfbWF0Y2gnLEZBTFNFKSkpOwoJCQkJCX0KCQkJCX0KCQkJCS8vcmVzdWx0cyBkYXRhIG5leHQgcHJpb3JpdHkKCQkJCWlmKCRyZXN1bHRzKQoJCQkJewoJCQkJCSRpZHMgPSBhcnJheV9rZXlzKCRwYXJhbXNbJ3Jlc19zdGF0dXMnXSk7CgkJCQkJaWYoJHJlc3VsdHZpZXcgPT0gJ3Bhc3QnKQoJCQkJCXsKCQkJCQkJLy9iZWZvcmUgYW55IHVwZGF0ZSBvZiByZWNvcmRlZCBtYXRjaCBkYXRhLCBjaGVjayBmb3Igc3RhdHVzLWNoYW5nZQoJCQkJCQkvL2lmIHNvLCBkbyBjb25zZXF1ZW50aWFsIHRlYW0tY2hhbmdlKHMpIGluIG5leHRtKCxuZXh0bG0pCgkJCQkJCWlmKCEkc2NoKSAkc2NoID0gbmV3IHRtdFNjaGVkdWxlKCk7CgkJCQkJCSRzY2gtPkNvbmZvcm1OZXdSZXN1bHRzKCRicmFja2V0X2lkLCRiZGF0YVsndHlwZSddLCRpZHMsJHBhcmFtc1sncmVzX3N0YXR1cyddKTsKCQkJCQl9CgkJCQkJJHNxbDIgPSAnVVBEQVRFICcuJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlcyBTRVQgcGxheXdoZW49PyxzdGF0dXM9PyxzY29yZT0/IFdIRVJFIG1hdGNoX2lkPT8nOwoJCQkJCWZvcmVhY2goJHJlc3VsdHMgYXMgJG1pZD0+JHJvdykKCQkJCQl7CgkJCQkJCWlmKGluX2FycmF5KCRtaWQsJGN1cnJlbnQpKQoJCQkJCQl7CgkJCQkJCQkkd2hlbiA9ICRyb3dbJ3BsYXl3aGVuJ107CgkJCQkJCQlpZighJHdoZW4gJiYgIWVtcHR5KCRtYXRjaGVzWyRtaWRdWydwbGF5d2hlbiddKSkKCQkJCQkJCQkkd2hlbiA9ICRtYXRjaGVzWyRtaWRdWydwbGF5d2hlbiddOwoJCQkJCQkJaWYoJHdoZW4pCgkJCQkJCQkJJG9uID0gJGZ1bmNzLT5HZXRGb3JtYXR0ZWREYXRlKCR3aGVuLEZBTFNFLFRSVUUpOwoJCQkJCQkJaWYoISR3aGVuIHx8ICEkb24pCgkJCQkJCQkJJG9uID0gTlVMTDsKCQkJCQkJCSRob3cgPSB0cmltKCRyb3dbJ3Njb3JlJ10pOwoJCQkJCQkJaWYoISRob3cpCgkJCQkJCQkJJGhvdyA9IE5VTEw7CgkJCQkJCQkkc3RhdCA9IChpbnQpJHJvd1snc3RhdHVzJ107CgkJCQkJCQlpZigkc3RhdCA8IFRvdXJuZXk6Ok1SRVMpCgkJCQkJCQkJJHN0YXQgPSAkbWF0Y2hlc1skbWlkXVsnc3RhdHVzJ107CgkJCQkJCQkkZGItPkV4ZWN1dGUoJHNxbDIsYXJyYXkoJG9uLCRzdGF0LCRob3csJG1pZCkpOwoJCQkJCQl9CgkJCQkJCWVsc2UKCQkJCQkJCSR0aGlzLT5SZWRpcmVjdCgkaWQsJ2RlZmF1bHRhZG1pbicsJycsCgkJCQkJCQkJYXJyYXkoJ3RtdF9tZXNzYWdlJz0+JHRoaXMtPlByZXR0eU1lc3NhZ2UoJ2Vycl9tYXRjaCcsRkFMU0UpKSk7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCS8vbmV4dCx0ZWFtLWNoYW5nZXMgKHdoaWNoIG1heSBjaGFuZ2UgbWF0Y2hlcykKCQkJJHNxbCA9ICdTRUxFQ1QgdGVhbV9pZCBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfdGVhbXMgV0hFUkUgYnJhY2tldF9pZD0/IEFORCBmbGFncz0yJzsKCQkJJGdvbmUgPSAkZGItPkdldENvbCgkc3FsLGFycmF5KCRicmFja2V0X2lkKSk7CgkJCWlmKCRnb25lKQoJCQl7CgkJCQkvL2Rvbid0IGFjdHVhbGx5IGRlbGV0ZSBmbGFnZ2VkIHRlYW1zL21lbWJlcnMsIHdobyBtYXkgYmUgbmVlZGVkIGZvciBkaXNwbGF5IG9mIHByZXZpb3VzLW1hdGNoIHJlc3VsdHMKCQkJCWZvcmVhY2goJGdvbmUgYXMgJHRpZCkKCQkJCXsKCQkJCQlpZihpc3NldCgkdGVhbXNbJHRpZF0pKSAvL3NvbWUgZGlzY29ubmVjdC9idWcgPz8KCQkJCQkJdW5zZXQoJHRlYW1zWyR0aWRdKTsKCQkJCX0KCQkJCWlmKCRvbGQpIC8vbm90IG5ldyBicmFja2V0CgkJCQl7CgkJCQkJaWYoISRzY2gpICRzY2ggPSBuZXcgdG10U2NoZWR1bGUoKTsKCQkJCQkkc2NoLT5Db25mb3JtR29uZXRlYW1zKCR0aGlzLCRicmFja2V0X2lkLCRkYXRhLT50eXBlLCRkYXRhLT50aW1lem9uZSwkZ29uZSk7CgkJCQl9CgkJCQkvL2Vsc2UgVE9ETyBDSEVDS01FCgkJCX0KCQkJaWYoJG9sZCkgLy9ub3QgYSBuZXcgYnJhY2tldAoJCQl7CgkJCQkvL0NIRUNLTUUganVzdCBmaW5kIGluICR0ZWFtc1tdID8KCQkJCSRzcWwgPSAnU0VMRUNUIHRlYW1faWQgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X3RlYW1zIFdIRVJFIGJyYWNrZXRfaWQ9PyBBTkQgZmxhZ3M9MSc7CgkJCQkkeHRyYSA9ICRkYi0+R2V0Q29sKCRzcWwsYXJyYXkoJGJyYWNrZXRfaWQpKTsKCQkJCWlmKCR4dHJhKQoJCQkJewoJCQkJCWlmKCEkc2NoKSAkc2NoID0gbmV3IHRtdFNjaGVkdWxlKCk7CgkJCQkJJHNjaC0+Q29uZm9ybU5ld3RlYW1zKCR0aGlzLCRicmFja2V0X2lkLCRkYXRhLT50eXBlLCRkYXRhLT50aW1lem9uZSwkeHRyYSk7CgkJCQl9CgkJCX0KCQkJLy9lbHNlIFRPRE8gQ0hFQ0tNRQoJCQlpZigkdGVhbXMpCgkJCXsKCQkJCSRvcmRlciA9IDE7CgkJCQkvL2NsZWFycyBmbGFncyBmb3IgYWxsIHByZXNlbnQgdGVhbXMgYW5kIHRoZWlyIG1lbWJlcnMKCQkJCSRzcWwgPSAnVVBEQVRFICcuJHByZWYuJ21vZHVsZV90bXRfdGVhbXMgU0VUIG5hbWU9PyxzZWVkaW5nPT8sY29udGFjdGFsbD0/LGRpc3BsYXlvcmRlcj0/LGZsYWdzPTAgV0hFUkUgdGVhbV9pZD0/JzsKCQkJCSRzcWwyID0gJ1VQREFURSAnLiRwcmVmLidtb2R1bGVfdG10X3Blb3BsZSBTRVQgZmxhZ3M9MCBXSEVSRSBpZD0/IEFORCBmbGFncyBJTigxLDMpJzsKCQkJCSRzcWwzID0gJ0RFTEVURSBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfcGVvcGxlIFdIRVJFIGlkPT8gQU5EIGZsYWdzPTInOwoJCQkJZm9yZWFjaCgkdGVhbXMgYXMgJHRpZD0+JiRyb3cpIC8vQ0hFQ0tNRSAkdGVhbXMgZGVmaW5pdGVseSBjb25mb3JtcyB0byBzYXZlZCBkYXRhIG5vdz8KCQkJCXsKCQkJCQlsaXN0KCRwbmFtZSwkcGNvbnRhY3QpID0gJGZ1bmNzLT5HZXRmb3JGaXJzdFBsYXllcigkdGlkKTsKCQkJCQkkbmFtZSA9ICRyb3dbJ25hbWUnXTsKCQkJCQlpZigkbmFtZSA9PSBGQUxTRSB8fCAkbmFtZSA9PSAkcG5hbWUpCgkJCQkJCSRuYW1lID0gbnVsbDsKCQkJCQkkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkbmFtZSwkcm93WydzZWVkaW5nJ10sJHJvd1snY29udGFjdGFsbCddLCRvcmRlciwkdGlkKSk7CgkJCQkJJG9yZGVyKys7CgkJCQkJJGNvbnRhY3QgPSAkcm93Wydjb250YWN0J107CgkJCQkJaWYoJGNvbnRhY3QgIT0gJHBjb250YWN0KQoJCQkJCQkkZnVuY3MtPlVwZGF0ZUZpcnN0UGxheWVyKCR0aWQsRkFMU0UsJGNvbnRhY3QpOyAvL3VwZGF0ZSBjb250YWN0IGluIHBlb3BsZSB0YWJsZQoJCQkJCSRkYi0+RXhlY3V0ZSgkc3FsMixhcnJheSgkdGlkKSk7CgkJCQkJJGRiLT5FeGVjdXRlKCRzcWwzLGFycmF5KCR0aWQpKTsKCQkJCX0KCQkJCXVuc2V0KCRyb3cpOwoJCQl9CgkJCWlmKCRuZXd0eXBlKQoJCQl7CgkJCQlpZighJHNjaCkgJHNjaCA9IG5ldyB0bXRTY2hlZHVsZSgpOwoJCQkJJHNjaC0+U2NoZWR1bGVNYXRjaGVzKCR0aGlzLCRicmFja2V0X2lkKTsKCQkJfQoJCQlpZigkbmV3dHlwZSB8fCAkbWF0Y2hlcyB8fCAkcmVzdWx0cykKCQkJewoJCQkJJHNxbCA9ICdVUERBVEUgJy4kcHJlZi4nbW9kdWxlX3RtdF9icmFja2V0cyBTRVQgY2hhcnRidWlsZD0xIFdIRVJFIGJyYWNrZXRfaWQ9Pyc7CgkJCQkkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkYnJhY2tldF9pZCkpOwoJCQl9CgkJfQoJCSRtZXNzYWdlID0gKCRyZXMpID8gJycgOiAkdGhpcy0+UHJldHR5TWVzc2FnZSgnZXJyX3NhdmUnLEZBTFNFKTsKCX0KCWVsc2VpZighZW1wdHkoJGRhdGEtPmVycm1zZykpCgkJJG1lc3NhZ2UgPSAkZGF0YS0+ZXJybXNnOwoKCWlmKGlzc2V0KCRwYXJhbXNbJ2FwcGx5J10pKQoJewoJCWlmKGlzc2V0KCRwYXJhbXNbJ25ld2JyYWNrZXQnXSkpCgkJCXVuc2V0KCRwYXJhbXNbJ25ld2JyYWNrZXQnXSk7CgkJdW5zZXQoJHBhcmFtc1snYXBwbHknXSk7CgkJJG5ld3Bhcm1zID0gJHRoaXMtPkdldEVkaXRQYXJtcygkcGFyYW1zLCRwYXJhbXNbJ2FjdGl2ZV90YWInXSwkbWVzc2FnZSk7CgkJJHRoaXMtPlJlZGlyZWN0KCRpZCwnYWRkZWRpdF9jb21wJywkcmV0dXJuaWQsJG5ld3Bhcm1zKTsKCX0KCSR0aGlzLT5SZWRpcmVjdCgkaWQsJ2RlZmF1bHRhZG1pbicsJycsYXJyYXkoJ3RtdF9tZXNzYWdlJz0+JG1lc3NhZ2UpKTsKfSAvL2VuZCBvZiAnYXBwbHl8c3VibWl0JyBwcm9jZXNzaW5nCmVsc2VpZihpc3NldCgkcGFyYW1zWyd1cGRhdGUnXSkpCnsKCXJlc2V0KCRwYXJhbXNbJ3VwZGF0ZSddKTsKCSRvcCA9IGtleSgkcGFyYW1zWyd1cGRhdGUnXSk7Cgl1bnNldCgkcGFyYW1zWyd1cGRhdGUnXSk7CiAJc3dpdGNoKHN1YnN0cigkb3Asc3RybGVuKCRpZCkpKQoJewoJIGNhc2UgJ3RlYW1zJzoKCQlpZihpc3NldCgkcGFyYW1zWyd0c2VsJ10pKQoJCXsKCQkJJHNxbCA9ICdVUERBVEUgJy4kcHJlZi4nbW9kdWxlX3RtdF90ZWFtcyBTRVQgbmFtZT0/LHNlZWRpbmc9Pyxjb250YWN0YWxsPT8sZmxhZ3M9MyBXSEVSRSB0ZWFtX2lkPT8nOwoJCQkkZnVuY3MgPSBuZXcgdG10RGF0YSgpOwoJCQlmb3JlYWNoKCRwYXJhbXNbJ3RzZWwnXSBhcyAkdGlkKQoJCQl7CgkJCQlsaXN0KCRwbmFtZSwkcGNvbnRhY3QpID0gJGZ1bmNzLT5HZXRmb3JGaXJzdFBsYXllcigkdGlkKTsKCQkJCSRpbmR4ID0gYXJyYXlfc2VhcmNoKCR0aWQsJHBhcmFtc1sndGVtX3RlYW1pZCddKTsKCQkJCSRjb250YWN0ID0gJHBhcmFtc1sndGVtX2NvbnRhY3QnXVskaW5keF07CgkJCQlpZigkY29udGFjdCAhPSAkcGNvbnRhY3QpCgkJCQkJJHBjb250YWN0ID0gJGNvbnRhY3Q7IC8vZW1wdHkgc3RyaW5nIG9rCgkJCQllbHNlCgkJCQkJJHBjb250YWN0ID0gRkFMU0U7IC8vbm8gdXBkYXRlCgkJCQkkdG9hbGwgPSAkcGFyYW1zWyd0ZW1fY29udGFjdGFsbCddWyRpbmR4XTsKCQkJCSRuYW1lID0gJHBhcmFtc1sndGVtX25hbWUnXVskaW5keF07CgkJCQkvL2RlY2lkZSBob3cvd2hlcmUgdG8gc2F2ZSAkbmFtZQoJCQkJaWYoJG5hbWUgJiYgJG5hbWUgIT0gJHBuYW1lICYmICRwYXJhbXNbJ3RtdF90ZWFtc2l6ZSddID09IDEpCgkJCQl7CgkJCQkJJHBuYW1lID0gJG5hbWU7CgkJCQkJJG5hbWUgPSBOVUxMOwoJCQkJfQoJCQkJZWxzZQoJCQkJCSRwbmFtZSA9IEZBTFNFOwoJCQkJaWYoJG5hbWUgPT0gRkFMU0UgfHwgJG5hbWUgPT0gJHBuYW1lIHx8ICRwYXJhbXNbJ3RtdF90ZWFtc2l6ZSddID09IDEpCgkJCQkJJG5hbWUgPSBOVUxMOwoJCQkJJHNlZWQgPSAkcGFyYW1zWyd0ZW1fc2VlZCddWyRpbmR4XTsKCQkJCWlmKCRzZWVkID09IEZBTFNFKSAkc2VlZCA9IE5VTEw7CgkJCQkvL2Rpc3BsYXlvcmRlciBub3QgdXBkYXRlZCBjdXogbm90IGFsbCB0ZWFtcyBwcm9jZXNzZWQKCQkJCSRkYi0+RXhlY3V0ZSgkc3FsLGFycmF5KCRuYW1lLCRzZWVkLCR0b2FsbCwkdGlkKSk7CgkJCQkkZnVuY3MtPlVwZGF0ZUZpcnN0UGxheWVyKCR0aWQsJHBuYW1lLCRwY29udGFjdCk7IC8vdXBkYXRlIG5hbWUgYW5kL29yIGNvbnRhY3QgaW4gcGVvcGxlIHRhYmxlCgkJCX0KCQkJJG5ld3Bhcm1zID0gJHRoaXMtPkdldEVkaXRQYXJtcygkcGFyYW1zLCdwbGF5ZXJzdGFiJyk7CgkJfQoJCWJyZWFrOwoJIGNhc2UgJ21hdGNoZXMnOgoJCWlmKGlzc2V0KCRwYXJhbXNbJ21zZWwnXSkpCgkJewoJCQkkYnJhY2tldF9pZCA9IChpbnQpJHBhcmFtc1snYnJhY2tldF9pZCddOwoJCQkkc3FsID0gJ1VQREFURSAnLiRwcmVmLidtb2R1bGVfdG10X21hdGNoZXMgU0VUIHBsYXl3aGVuPT8scGxhY2U9PyxzdGF0dXM9PyBXSEVSRSBtYXRjaF9pZD0/JzsKCQkJLy9mb3IgbmV3IG1hdGNoZXMgc3BlY2lmaWVkIGluIFJSVFlQRSBwbGFuIHZpZXcKCQkJJHNxbDIgPSAnSU5TRVJUIElOVE8gJy4kcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzIChtYXRjaF9pZCxicmFja2V0X2lkLHRlYW1BLHRlYW1CLHBsYXl3aGVuLHBsYWNlLHN0YXR1cykgVkFMVUVTICg/LD8sPyw/LD8sPyw/KSc7CgkJCSRrbm93biA9IGFycmF5X2tleXMoJHBhcmFtc1snbWF0X3N0YXR1cyddKTsKCQkJJGZ1bmNzID0gbmV3IHRtdERhdGEoKTsKCQkJZm9yZWFjaCgkcGFyYW1zWydtc2VsJ10gYXMgJG1pZCkKCQkJewoJCQkJJGluZHggPSBhcnJheV9zZWFyY2goJG1pZCwka25vd24pOwoJCQkJJHRBID0gJHBhcmFtc1snbWF0X3RlYW1BJ11bJGluZHhdOwoJCQkJJHRCID0gJHBhcmFtc1snbWF0X3RlYW1CJ11bJGluZHhdOwoJCQkJJHdoZW4gPSAkcGFyYW1zWydtYXRfcGxheXdoZW4nXVskaW5keF07CgkJCQlpZigkd2hlbikKCQkJCQkkb24gPSAkZnVuY3MtPkdldEZvcm1hdHRlZERhdGUoJHdoZW4sRkFMU0UsVFJVRSk7CgkJCQlpZighJHdoZW4gfHwgISRvbikKCQkJCQkkb24gPSBOVUxMOwoJCQkJJGF0ID0gdHJpbSgkcGFyYW1zWydtYXRfcGxheXdoZXJlJ11bJGluZHhdKTsKCQkJCWlmKCEkYXQpCgkJCQkJJGF0ID0gTlVMTDsKCQkJCSRzdGF0ID0gKGludCkkcGFyYW1zWydtYXRfc3RhdHVzJ11bJG1pZF07CgkJCQlpZigkb24pCgkJCQl7CgkJCQkJaWYoJHN0YXQgPCAwKSAvL25vdHlldAoJCQkJCQkkc3RhdCA9ICgkdEEgJiYgJHRCKSA/IFRvdXJuZXk6OlNPRlQ6VG91cm5leTo6QVNPRlQ7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJaWYoJHN0YXQgPCBUb3VybmV5OjpBTk9OKQoJCQkJCQkkc3RhdCA9IDA7CgkJCQkJZWxzZWlmKCRzdGF0ID09IFRvdXJuZXk6OkFGSVJNKQoJCQkJCQkkc3RhdCA9IFRvdXJuZXk6OkFTT0ZUOwoJCQkJfQoJCQkJaWYoJG1pZCA+IDApCgkJCQkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJG9uLCRhdCwkc3RhdCwkbWlkKSk7CgkJCQllbHNlCgkJCQl7CgkJCQkJJG1pZCA9ICRkYi0+R2VuSUQoJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlc19zZXEnKTsKCQkJCQlpZighJHRBKQoJCQkJCQkkdEEgPSBOVUxMOwoJCQkJCWlmKCEkdEIpCgkJCQkJCSR0QiA9IE5VTEw7CgkJCQkJJGRiLT5FeGVjdXRlKCRzcWwyLGFycmF5KCRtaWQsJGJyYWNrZXRfaWQsJHRBLCR0Qiwkb24sJGF0LCRzdGF0KSk7CgkJCQl9CgkJCX0KCQkJJHNxbCA9ICdVUERBVEUgJy4kcHJlZi4nbW9kdWxlX3RtdF9icmFja2V0cyBTRVQgY2hhcnRidWlsZD0xIFdIRVJFIGJyYWNrZXRfaWQ9Pyc7CgkJCSRkYi0+RXhlY3V0ZSgkc3FsLGFycmF5KCRwYXJhbXNbJ2JyYWNrZXRfaWQnXSkpOwoJCQkkbmV3cGFybXMgPSAkdGhpcy0+R2V0RWRpdFBhcm1zKCRwYXJhbXMsJ21hdGNoZXN0YWInKTsKCQl9CgkJYnJlYWs7CgkgY2FzZSAncmVzdWx0cyc6CgkJaWYoaXNzZXQoJHBhcmFtc1sncnNlbCddKSkKCQl7CgkJCSRwYXN0ID0gKCRwYXJhbXNbJ3Jlc3VsdHZpZXcnXSA9PSAncGFzdCcpOwoJCQlpZigkcGFzdCkKCQkJewoJCQkJLy9iZWZvcmUgYW55IHVwZGF0ZSBvZiByZWNvcmRlZCBtYXRjaCBkYXRhLCBjaGVjayBmb3Igc3RhdHVzLWNoYW5nZQoJCQkJLy9pZiBzbywgZG8gY29uc2VxdWVudGlhbCB0ZWFtLWNoYW5nZShzKSBpbiBuZXh0bVssbmV4dGxtXQoJCQkJJGZ1bmNzID0gbmV3IHRtdFNjaGVkdWxlKCk7CgkJCQkkZnVuY3MtPkNvbmZvcm1OZXdSZXN1bHRzKCRwYXJhbXNbJ2JyYWNrZXRfaWQnXSwkcGFyYW1zWyd0bXRfdHlwZSddLCRwYXJhbXNbJ3JzZWwnXSwkcGFyYW1zWydyZXNfc3RhdHVzJ10pOwoJCQl9CgkJCSRmdW5jcyA9IG5ldyB0bXREYXRhKCk7CgkJCSRzcWwgPSAnVVBEQVRFICcuJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlcyBTRVQgcGxheXdoZW49PyxzdGF0dXM9PyxzY29yZT0/IFdIRVJFIG1hdGNoX2lkPT8nOwoJCQkkc3FsMiA9ICdVUERBVEUgJy4kcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzIFNFVCBzdGF0dXM9PyxzY29yZT0/IFdIRVJFIG1hdGNoX2lkPT8nOwoJCQlmb3JlYWNoKCRwYXJhbXNbJ3JzZWwnXSBhcyAkbWlkKQoJCQl7CgkJCQkkaW5keCA9IGFycmF5X3NlYXJjaCgkbWlkLCRwYXJhbXNbJ3Jlc19tYXRjaGlkJ10pOwoJCQkJJHN0YXQgPSAoaW50KSRwYXJhbXNbJ3Jlc19zdGF0dXMnXVskbWlkXTsKCQkJCWlmKCEkcGFzdCkgLy9mdXR1cmUtdmlldwoJCQkJewoJCQkJIAlpZigkc3RhdCAhPSBUb3VybmV5OjpOT1RZRVQpIC8vbm9uLWRlZmF1bHQgc3RhdHVzIGFwcGxpZXMKCQkJCQl7CgkJCQkJCSR3aGVuID0gJHBhcmFtc1sncmVzX3BsYXl3aGVuJ11bJGluZHhdOwoJCQkJCQkkb24gPSAkZnVuY3MtPkdldEZvcm1hdHRlZERhdGUoJHdoZW4sRkFMU0UsVFJVRSk7CgkJCQkJCWlmKCEkb24pCgkJCQkJCQkkb24gPSBOVUxMOwoJCQkJCQkkaG93ID0gdHJpbSgkcGFyYW1zWydyZXNfc2NvcmUnXVskaW5keF0pOwoJCQkJCQlpZighJGhvdykKCQkJCQkJCSRob3cgPSBOVUxMOwoJCQkJCQkkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkb24sJHN0YXQsJGhvdywkbWlkKSk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQkJJGRiLT5FeGVjdXRlKCRzcWwyLGFycmF5KDAsTlVMTCwkbWlkKSk7CgkJCQl9CgkJCQllbHNlIC8vcGFzdC12aWV3OiBwcm9jZXNzIGFsd2F5cwoJCQkJewoJCQkJCSR3aGVuID0gJHBhcmFtc1sncmVzX3BsYXl3aGVuJ11bJGluZHhdOwoJCQkJCWlmKCR3aGVuKQoJCQkJCXsKCQkJCQkJJG9uID0gJGZ1bmNzLT5HZXRGb3JtYXR0ZWREYXRlKCR3aGVuLEZBTFNFLFRSVUUpOwoJCQkJCQlpZighJG9uKQoJCQkJCQkJJG9uID0gTlVMTDsKCQkJCQl9CgkJCQkJLy9lbHNlIGRvbid0IGNoYW5nZSB0aGUgJ3BsYXllZC13aGVuJyBmaWVsZAoJCQkJCWlmKCRzdGF0ID09IFRvdXJuZXk6Ok5PVFlFVCkKCQkJCQkJJHN0YXQgPSAwOwoJCQkJCWlmKCRzdGF0IDwgVG91cm5leTo6TVJFUykKCQkJCQkJJGhvdyA9IE5VTEw7CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJCSRob3cgPSB0cmltKCRwYXJhbXNbJ3Jlc19zY29yZSddWyRpbmR4XSk7CgkJCQkJCQlpZighJGhvdykKCQkJCQkJCQkkaG93ID0gTlVMTDsKCQkJCQl9CgkJCQkJaWYoJHdoZW4pCgkJCQkJCSRkYi0+RXhlY3V0ZSgkc3FsLGFycmF5KCRvbiwkc3RhdCwkaG93LCRtaWQpKTsKCQkJCQllbHNlCgkJCQkJCSRkYi0+RXhlY3V0ZSgkc3FsMixhcnJheSgkc3RhdCwkaG93LCRtaWQpKTsKCQkJCX0KCQkJfQoJCQkkc3FsID0gJ1VQREFURSAnLiRwcmVmLidtb2R1bGVfdG10X2JyYWNrZXRzIFNFVCBjaGFydGJ1aWxkPTEgV0hFUkUgYnJhY2tldF9pZD0/JzsKCQkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJHBhcmFtc1snYnJhY2tldF9pZCddKSk7CgkJCSRuZXdwYXJtcyA9ICR0aGlzLT5HZXRFZGl0UGFybXMoJHBhcmFtcywncmVzdWx0c3RhYicpOwoJCX0KCQlicmVhazsKCX0KCgkkdGhpcy0+UmVkaXJlY3QoJGlkLCdhZGRlZGl0X2NvbXAnLCRyZXR1cm5pZCwkbmV3cGFybXMpOwp9IC8vZW5kIG9mICd1cGRhdGUnIHByb2Nlc3NpbmcKZWxzZWlmKGlzc2V0KCRwYXJhbXNbJ2NhbmNlbCddKSkKewoJJGJyYWNrZXRfaWQgPSAkcGFyYW1zWydicmFja2V0X2lkJ107CglpZihpc3NldCgkcGFyYW1zWyduZXdicmFja2V0J10pKSAvL25ldyBicmFja2V0ICYmICFwcmV2aW91c2x5IGFwcGxpZWQKCXsKCQkkc3FsID0gJ1NFTEVDVCB0ZWFtX2lkIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF90ZWFtcyBXSEVSRSBicmFja2V0X2lkPT8nOwoJCSR0ZWFtcyA9ICRkYi0+R2V0Q29sKCRzcWwsYXJyYXkoJGJyYWNrZXRfaWQpKTsKCQlpZigkdGVhbXMpCgkJewoJCQkkc3FsID0gJ0RFTEVURSBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfcGVvcGxlIFdIRVJFIGlkPT8nOwoJCQlmb3JlYWNoKCR0ZWFtcyBhcyAkdGlkKQoJCQkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJHRpZCkpOwoJCQkkc3FsID0gJ0RFTEVURSBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfdGVhbXMgV0hFUkUgYnJhY2tldF9pZD0/JzsKCQkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJGJyYWNrZXRfaWQpKTsKCQkJJHNxbCA9ICdERUxFVEUgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X21hdGNoZXMgV0hFUkUgYnJhY2tldF9pZD0/JzsKCQkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJGJyYWNrZXRfaWQpKTsKCQl9CgkJJHNxbCA9ICdERUxFVEUgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X2JyYWNrZXRzIFdIRVJFIGJyYWNrZXRfaWQ9Pyc7CgkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJGJyYWNrZXRfaWQpKTsKCQkkdGhpcy0+RGVsZXRlVGVtcGxhdGUoJ21haWxvdXRfJy4kYnJhY2tldF9pZC4nX3RlbXBsYXRlJyk7CgkJJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCdtYWlsY2FuY2VsXycuJGJyYWNrZXRfaWQuJ190ZW1wbGF0ZScpOwoJCSR0aGlzLT5EZWxldGVUZW1wbGF0ZSgnbWFpbHJlcXVlc3RfJy4kYnJhY2tldF9pZC4nX3RlbXBsYXRlJyk7CgkJJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCdtYWlsaW5fJy4kYnJhY2tldF9pZC4nX3RlbXBsYXRlJyk7CgkJJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCd0d2VldG91dF8nLiRicmFja2V0X2lkLidfdGVtcGxhdGUnKTsKCQkkdGhpcy0+RGVsZXRlVGVtcGxhdGUoJ3R3ZWV0Y2FuY2VsXycuJGJyYWNrZXRfaWQuJ190ZW1wbGF0ZScpOwoJCSR0aGlzLT5EZWxldGVUZW1wbGF0ZSgndHdlZXRyZXF1ZXN0XycuJGJyYWNrZXRfaWQuJ190ZW1wbGF0ZScpOwoJCSR0aGlzLT5EZWxldGVUZW1wbGF0ZSgndHdlZXRpbl8nLiRicmFja2V0X2lkLidfdGVtcGxhdGUnKTsKCQkkdGhpcy0+RGVsZXRlVGVtcGxhdGUoJ2NoYXJ0XycuJGJyYWNrZXRfaWQuJ190ZW1wbGF0ZScpOwoJfQoJZWxzZSAvL2NhbmNlbCBlZGl0IG9mIG9sZCBicmFja2V0IG9yIGFmdGVyIGNoYW5nZXMgJ2FwcGxpZWQnIHRvIG5ldyBvbmUKCXsKCQkvL3NpbXBseSBpZ25vcmUgZGF0YSBmb3IgYnJhY2tldHMgdGFibGUgYW5kIHJlbGF0ZWQgdGVtcGxhdGVzCgkJJHNxbCA9ICdTRUxFQ1QgdGVhbV9pZCBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfdGVhbXMgV0hFUkUgYnJhY2tldF9pZD0/IEFORCBmbGFncz0xJzsKCQkkdGVhbXMgPSAkZGItPkdldENvbCgkc3FsLGFycmF5KCRicmFja2V0X2lkKSk7CgkJaWYoJHRlYW1zKQoJCXsKCQkJJHNxbCA9ICdERUxFVEUgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X3Blb3BsZSBXSEVSRSBpZD0/JzsKCQkJJHNxbDIgPSAnVVBEQVRFICcuJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlcyBTRVQgdGVhbUE9bnVsbCxwbGF5d2hlbj1udWxsLHBsYWNlPW51bGwsc3RhdHVzPTAsc2NvcmU9bnVsbCBXSEVSRSBicmFja2V0X2lkPT8gQU5EIHRlYW1BPT8nOwoJCQkkc3FsMyA9ICdVUERBVEUgJy4kcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzIFNFVCB0ZWFtQj1udWxsLHBsYXl3aGVuPW51bGwscGxhY2U9bnVsbCxzdGF0dXM9MCxzY29yZT1udWxsIFdIRVJFIGJyYWNrZXRfaWQ9PyBBTkQgdGVhbUI9Pyc7CgkJCWZvcmVhY2goJHRlYW1zIGFzICR0aWQpCgkJCXsKCQkJCSRkYi0+RXhlY3V0ZSgkc3FsLGFycmF5KCR0aWQpKTsKCQkJCSRkYi0+RXhlY3V0ZSgkc3FsMixhcnJheSgkYnJhY2tldF9pZCwkdGlkKSk7CgkJCQkkZGItPkV4ZWN1dGUoJHNxbDMsYXJyYXkoJGJyYWNrZXRfaWQsJHRpZCkpOwoJCQl9CgkJCSRzcWwgPSAnREVMRVRFIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF90ZWFtcyBXSEVSRSBicmFja2V0X2lkPT8gQU5EIGZsYWdzPTEnOwoJCQkkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkYnJhY2tldF9pZCkpOwoJCQkvL1RPRE8gYW55IGNvbnNlcXVlbnRpYWwgY2hhbmdlcyB0byBtYXRjaGVzIGUuZy4gYnllLCBmb3JmZWl0CgkJfQoJCSRzcWwgPSAnU0VMRUNUIHRlYW1faWQgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X3RlYW1zIFdIRVJFIGJyYWNrZXRfaWQ9PyBBTkQgZmxhZ3MgSU4gKDIsMyknOwoJCSR0ZWFtcyA9ICRkYi0+R2V0Q29sKCRzcWwsYXJyYXkoJGJyYWNrZXRfaWQpKTsKCQlpZigkdGVhbXMpCgkJewoJCQkvL1RPRE8gc3VwcG9ydCBjb250ZW50IHJldmVyc2lvbiB3aGVyZSBmbGFncyA9IDMKCQkJJHNxbCA9ICdVUERBVEUgJy4kcHJlZi4nbW9kdWxlX3RtdF9wZW9wbGUgU0VUIGZsYWdzPTAgV0hFUkUgaWQ9PyBBTkQgZmxhZ3MgSU4gKDIsMyknOwoJCQlmb3JlYWNoKCR0ZWFtcyBhcyAkdGlkKQoJCQkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJHRpZCkpOwoJCQkkc3FsID0gJ1VQREFURSAnLiRwcmVmLidtb2R1bGVfdG10X3RlYW1zIFNFVCBmbGFncz0wIFdIRVJFIGJyYWNrZXRfaWQ9PyBBTkQgZmxhZ3MgSU4gKDIsMyknOwoJCQkkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkYnJhY2tldF9pZCkpOwoJCQkvL1RPRE8gYW55IGNvbnNlcXVlbnRpYWwgY2hhbmdlcyB0byBtYXRjaGVzIGZvciByZXZlcnRlZC9jaGFuZ2VkIHRlYW1zCgkJfQoJfQoJLy9mYWxsIGludG8gcmVkaXJlY3QgdG8gZGVmYXVsdGFkbWluCn0vL2VuZCBvZiAnY2FuY2VsJyBwcm9jZXNzaW5nCgokdGhpcy0+UmVkaXJlY3QoJGlkLCdkZWZhdWx0YWRtaW4nKTsKPz4K]]></data>
	</file>
	<file>
	  <filename>/action.save_config.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKKi8KCmlmIChpc3NldCgkcGFyYW1zWyd0bXRfY2FuY2VsJ10pIHx8ICEkdGhpcy0+Q2hlY2tBY2Nlc3MoJ21vZGlmeScpKQp7Cgl1bnNldCAoJHBhcmFtcyk7CgkkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJyk7Cn0KCiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdsYXN0X21hdGNoX25hbWUnLCRwYXJhbXNbJ3RtdF9maW5hbCddKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJzJuZGxhc3RfbWF0Y2hfbmFtZScsJHBhcmFtc1sndG10X3NlbWknXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCczcmRsYXN0X21hdGNoX25hbWUnLCRwYXJhbXNbJ3RtdF9xdWFydGVyJ10pOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnNHRobGFzdF9tYXRjaF9uYW1lJywkcGFyYW1zWyd0bXRfZWlnaHRoJ10pOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnb3RoZXJfbWF0Y2hfbmFtZScsJHBhcmFtc1sndG10X3JvdW5kbmFtZSddKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2FnYWluc3RfbmFtZScsJHBhcmFtc1sndG10X3ZlcnN1cyddKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ25vb3BfbmFtZScsJHBhcmFtc1sndG10X2J5ZSddKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2ZvcmZlaXRfbmFtZScsJHBhcmFtc1sndG10X2ZvcmZlaXQnXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdhYmFuZG9uX25hbWUnLCRwYXJhbXNbJ3RtdF9ub21hdGNoJ10pOwppZihpc3NldCgkcGFyYW1zWyd0bXRfcGhvbmVpZCddKSkKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdwaG9uZV9yZWdleCcsdHJpbSgkcGFyYW1zWyd0bXRfcGhvbmVpZCddKSk7IC8vZXhjbHVkZXMgcHJlLSBwb3N0LQokdGhpcy0+U2V0UHJlZmVyZW5jZSgndGltZV96b25lJywkcGFyYW1zWyd0bXRfdGltZXpvbmUnXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCd0aW1lX2Zvcm1hdCcsJHBhcmFtc1sndG10X3RpbWVfZm9ybWF0J10pOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGF0ZV9mb3JtYXQnLCRwYXJhbXNbJ3RtdF9kYXRlX2Zvcm1hdCddKTsKJHN1YmRpciA9IHRyaW0oJHBhcmFtc1sndG10X3VwbG9hZHNfZGlyJ10sIiAvXFxcdFxuXHIiKTsKaWYoISRzdWJkaXIpCgkkc3ViZGlyID0gJHRoaXMtPkdldE5hbWUoKTsKJHVwZGlyID0gJGNvbmZpZ1sndXBsb2Fkc19wYXRoJ107CmlmKCR1cGRpcikKewoJJHVwZGlyIC49IERJUkVDVE9SWV9TRVBBUkFUT1IuJHN1YmRpcjsKCWlmKGlzX2RpcigkdXBkaXIpIHx8IG1rZGlyKCR1cGRpciwwNzU1KSkKCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgndXBsb2Fkc19kaXInLCRzdWJkaXIpOwoJLy9lbHNlIGVycm9yIG1lc3NhZ2UgVE9ETwp9Ci8vZWxzZSBlcnJvciBtZXNzYWdlIFRPRE8KLy8kdGhpcy0+U2V0UHJlZmVyZW5jZSgnZXhwb3J0X2ZpbGUnLCRwYXJhbXNbJ3RtdF9leHBvcnRfZmlsZSddKTsKLy8kdGhpcy0+U2V0UHJlZmVyZW5jZSgnc3RyaXBfb25fZXhwb3J0JywkcGFyYW1zWyd0bXRfc3RyaXBfb25fZXhwb3J0J10pOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZXhwb3J0X2VuY29kaW5nJywkcGFyYW1zWyd0bXRfZXhwb3J0X2VuY29kaW5nJ10pOwoKdW5zZXQoJHBhcmFtcyk7CiR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAnJywKCWFycmF5KCdzaG93dGFiJz0+MiwgJ3RtdF9tZXNzYWdlJz0+JHRoaXMtPlByZXR0eU1lc3NhZ2UoJ3ByZWZzX3VwZGF0ZWQnKSkpOwoKPz4K]]></data>
	</file>
	<file>
	  <filename>/action.schedule.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKKi8KaWYgKCEkdGhpcy0+Q2hlY2tBY2Nlc3MoJ2FkbW9kJykpCgkkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJycsCgkJYXJyYXkoJ3RtdF9tZXNzYWdlJz0+JHRoaXMtPlByZXR0eU1lc3NhZ2UoJ2xhY2twZXJtaXNzaW9uJyxGQUxTRSkpKTsKCiRiaWQgPSAkcGFyYW1zWydicmFja2V0X2lkJ107CiRwcmVmID0gY21zX2RiX3ByZWZpeCgpOwokc3FsID0gJ1NFTEVDVCB0eXBlIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9icmFja2V0cyBXSEVSRSBicmFja2V0X2lkPT8nOwokdHlwZSA9ICRkYi0+R2V0T25lKCRzcWwsYXJyYXkoJGJpZCkpOwppZiAoJHR5cGUgIT09IEZBTFNFKQp7Cgkkc2NoID0gbmV3IHRtdFNjaGVkdWxlKCk7Cglzd2l0Y2ggKGludHZhbCgkdHlwZSkpCgl7CgkgY2FzZSBUb3VybmV5OjpERVRZUEU6CgkJJHJlcyA9ICRzY2gtPkluaXRERU1hdGNoZXMoJHRoaXMsJGJpZCk7CgkJYnJlYWs7CgkgY2FzZSBUb3VybmV5OjpSUlRZUEU6CgkJJHJlcyA9ICRzY2gtPk5leHRSUk1hdGNoZXMoJHRoaXMsJGJpZCk7CgkJYnJlYWs7CgkgZGVmYXVsdDoKCSAvL2Nhc2UgVG91cm5leTo6S09UWVBFOgoJCSRyZXMgPSAkc2NoLT5Jbml0S09NYXRjaGVzKCR0aGlzLCRiaWQpOwoJCWJyZWFrOwoJfQoJdW5zZXQoJHNjaCk7CgkkbmV3cGFybXMgPSAkdGhpcy0+R2V0RWRpdFBhcm1zKCRwYXJhbXMsJ21hdGNoZXN0YWInKTsKCWlmICgkcmVzID09PSBUUlVFKQoJewoJCSRzcWwgPSAnVVBEQVRFICcuJHByZWYuJ21vZHVsZV90bXRfYnJhY2tldHMgU0VUIGNoYXJ0YnVpbGQ9MSBXSEVSRSBicmFja2V0X2lkPT8nOwoJCSRkYi0+RXhlY3V0ZSgkc3FsLGFycmF5KCRiaWQpKTsKCQkkbmV3cGFybXNbJ21hdGNodmlldyddID0gJ3BsYW4nOwoJfQoJZWxzZQoJCSRuZXdwYXJtc1sndG10X21lc3NhZ2UnXSA9ICR0aGlzLT5QcmV0dHlNZXNzYWdlKCRyZXMsRkFMU0UpOwoKCSR0aGlzLT5SZWRpcmVjdCgkaWQsJ2FkZGVkaXRfY29tcCcsJHJldHVybmlkLCRuZXdwYXJtcyk7Cn0KCiR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAnJywKCWFycmF5KCd0bXRfbWVzc2FnZSc9PiR0aGlzLT5QcmV0dHlNZXNzYWdlKCdlcnJfbWlzc2luZycsRkFMU0UpKSk7Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/action.show_comp.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKCkFjdGlvbiB0byBjaGFydCwgbGlzdCwgcHJpbnQgYSB0b3VybmFtZW50IG9uIGEgc2VwYXJhdGUgcGFnZSBpbiBiYWNrZW5kCiovCi8vc2V0dXAgZm9yIGEgZnVsbCBjaGFydCwgb3IgYW4gdW4tbGFiZWxsZWQgb25lLCBvciBhIGxpc3QKaWYgKGlzc2V0KCRwYXJhbXNbJ2NoYXJ0J10pKQp7Cgl1bnNldCgkcGFyYW1zWydjaGFydCddKTsKCSR0aXRsZXMgPSAxOwoJJGxpc3QgPSBGQUxTRTsKfQplbHNlaWYgKGlzc2V0KCRwYXJhbXNbJ2xpc3QnXSkpCnsKCXVuc2V0KCRwYXJhbXNbJ2xpc3QnXSk7CgkkbGlzdCA9IFRSVUU7Cn0KZWxzZWlmIChpc3NldCgkcGFyYW1zWydwcmludCddKSkKewoJdW5zZXQoJHBhcmFtc1sncHJpbnQnXSk7CgkkdGl0bGVzID0gMDsKCSRsaXN0ID0gRkFMU0U7Cn0KZWxzZQp7CgkkbmV3cGFybXMgPSAkdGhpcy0+R2V0RWRpdFBhcm1zKCRwYXJhbXMsJHBhcmFtc1snYWN0aXZlX3RhYiddKTsKCSR0aGlzLT5SZWRpcmVjdCgkaWQsJ2FkZGVkaXRfY29tcCcsJHJldHVybmlkLCRuZXdwYXJtcyk7Cn0KCiRicmFja2V0X2lkID0gJHBhcmFtc1snYnJhY2tldF9pZCddOwokcHJlZiA9IGNtc19kYl9wcmVmaXgoKTsKJHNxbCA9ICdTRUxFQ1QgKiBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfYnJhY2tldHMgV0hFUkUgYnJhY2tldF9pZD0/JzsKJGJkYXRhID0gJGRiLT5HZXRSb3coJHNxbCxhcnJheSgkYnJhY2tldF9pZCkpOwovL3JlZnJlc2ggdGhlIG1hdGNoZXMgdGFibGUsIGlmIG5lY2Vzc2FyeQokc2NoID0gbmV3IHRtdFNjaGVkdWxlKCk7CnN3aXRjaCAoJGJkYXRhWyd0eXBlJ10pCnsKIGNhc2UgVG91cm5leTo6REVUWVBFOgoJJHNjaC0+VXBkYXRlREVNYXRjaGVzICgkdGhpcywkYnJhY2tldF9pZCk7CglicmVhazsKIGNhc2UgVG91cm5leTo6UlJUWVBFOgoJJHNjaC0+TmV4dFJSTWF0Y2hlcygkdGhpcywkYnJhY2tldF9pZCk7CglicmVhazsKIGRlZmF1bHQ6Ci8vIGNhc2UgVG91cm5leTo6S09UWVBFOgoJJHNjaC0+VXBkYXRlS09NYXRjaGVzKCR0aGlzLCRicmFja2V0X2lkKTsKCWJyZWFrOwp9CnVuc2V0KCRzY2gpOwoKJGx5dCA9IG5ldyB0bXRMYXlvdXQoKTsKaWYgKCEkbGlzdCkKewoJJGJkYXRhWydjaGFydGJ1aWxkJ10gPSAxOyAvL3RlbGwgZG93bnN0cmVhbSB0aGF0IHJlYnVpbGQgaXMgbmVlZGVkCglsaXN0KCRjaGFydGZpbGUsJGVycmtleSkgPSAkbHl0LT5HZXRDaGFydCgkdGhpcywkYmRhdGEsRkFMU0UsJHRpdGxlcyk7CglpZiAoJGNoYXJ0ZmlsZSkKCXsKCQkkYmFzZW5hbWUgPSBiYXNlbmFtZSgkY2hhcnRmaWxlKTsKCQlsaXN0KCRoZWlnaHQsJHdpZHRoKSA9ICRseXQtPkdldENoYXJ0U2l6ZSgpOwoJCSRzbWFydHktPmFzc2lnbignaW1hZ2UnLCR0aGlzLT5DcmVhdGVJbWFnZU9iamVjdCgkY29uZmlnWydyb290X3VybCddLicvdG1wLycuJGJhc2VuYW1lLChpbnQpJGhlaWdodCszMCkpOwoJCSR0cGwgPSAnYWRtaW5fY2hhcnQudHBsJzsKCQlpZigkdGl0bGVzID09IDApCgkJCS8vZm9yY2UgcmVmcmVzaCBuZXh0IHRpbWUKCQkJJGRiLT5FeGVjdXRlKAoJCQknVVBEQVRFICcuJHByZWYuJ21vZHVsZV90bXRfYnJhY2tldHMgU0VUIGNoYXJ0YnVpbGQgPSAxIFdIRVJFIGJyYWNrZXRfaWQ9PycsCgkJCWFycmF5KCRicmFja2V0X2lkKSk7Cgl9CgllbHNlCgl7CgkJJG1lc3NhZ2UgPSAkdGhpcy0+UHJldHR5TWVzc2FnZSgnZXJyX2NoYXJ0JyxGQUxTRSk7CgkJaWYoJGVycmtleSkKCQkJJG1lc3NhZ2UgLj0gJzxiciAvPjxiciAvPicuJHRoaXMtPkxhbmcoJGVycmtleSk7CgkJJG5ld3Bhcm1zID0gJHRoaXMtPkdldEVkaXRQYXJtcygkcGFyYW1zLCdjaGFydHRhYicsJG1lc3NhZ2UpOwoJCSR0aGlzLT5SZWRpcmVjdCgkaWQsJ2FkZGVkaXRfY29tcCcsJHJldHVybmlkLCRuZXdwYXJtcyk7Cgl9Cn0KZWxzZQp7CgkkcmVzID0gJGx5dC0+R2V0TGlzdCgkdGhpcywkYmRhdGEsRkFMU0UpOwoJaWYgKGlzX2FycmF5KCRyZXMpKQoJewoJCSRzbWFydHktPmFzc2lnbigncGFnZXRpdGxlJywkYmRhdGFbJ25hbWUnXSk7CgkJaWYgKCFlbXB0eSgkYmRhdGFbJ2Rlc2NyaXB0aW9uJ10pKQoJCQkkc21hcnR5LT5hc3NpZ24oJ3BhZ2VkZXNjJywkYmRhdGFbJ2Rlc2NyaXB0aW9uJ10pOwoJCWVsc2UKCQkJJHNtYXJ0eS0+YXNzaWduKCdwYWdlZGVzYycsbnVsbCk7CgkJJHNtYXJ0eS0+YXNzaWduKCdpdGVtcycsJHJlcyk7CgkJJHRwbCA9ICdhZG1pbl9saXN0LnRwbCc7Cgl9CgllbHNlIC8vJHJlcyAoaWYgYW55KSBpcyBlcnJvci1tZXNzYWdlIGtleQoJewoJCSRtZXNzYWdlID0gJHRoaXMtPkxhbmcoJ2Vycl9saXN0Jyk7CgkJaWYoJHJlcykKCQkJJG1lc3NhZ2UgLj0gJzogJy5zdHJ0b2xvd2VyKCR0aGlzLT5MYW5nKCRyZXMpKTsKCQkkbmV3cGFybXMgPSAkdGhpcy0+R2V0RWRpdFBhcm1zKCRwYXJhbXMsJ2NoYXJ0dGFiJywkbWVzc2FnZSk7CgkJJHRoaXMtPlJlZGlyZWN0KCRpZCwnYWRkZWRpdF9jb21wJywkcmV0dXJuaWQsJG5ld3Bhcm1zKTsKCX0KfQp1bnNldCgkbHl0KTsKCiRzbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwnc2hvd19jb21wJywkcmV0dXJuaWQpKTsKJHNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJHNtYXJ0eS0+YXNzaWduKCdoaWRkZW4nLCR0aGlzLT5HZXRIaWRkZW5QYXJtcygkaWQsJHBhcmFtcykpOwokc21hcnR5LT5hc3NpZ24oJ2Nsb3NlJywkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdjYW5jZWwnLCR0aGlzLT5MYW5nKCdjbG9zZScpKSk7CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJHRwbCk7Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/action.swap_groups.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKKi8KCmlmICghaXNzZXQoJHBhcmFtc1snY2F0ZWdvcnlfaWQnXSkpCgkkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJycsIGFycmF5KCdzaG93dGFiJz0+MSwgJ3RtdF9tZXNzYWdlJz0+JHRoaXMtPlByZXR0eU1lc3NhZ2UoJ2Vycl92YWx1ZScsRkFMU0UpKSk7CgokcHJlZiA9IGNtc19kYl9wcmVmaXgoKTsKJHNxbCA9ICdTRUxFQ1QgZGlzcGxheW9yZGVyIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9ncm91cHMgV0hFUkUgZ3JvdXBfaWQ9Pyc7CiR0aGlzY2F0ID0gYXJyYXkoJHBhcmFtc1snY2F0ZWdvcnlfaWQnXSk7CiRudW0xID0gJGRiLT5HZXRPbmUoJHNxbCwkdGhpc2NhdCk7CmlmICgkbnVtMSA9PT0gRkFMU0UpCgkkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJycsIGFycmF5KCdzaG93dGFiJz0+MSwgJ3RtdF9tZXNzYWdlJz0+JHRoaXMtPlByZXR0eU1lc3NhZ2UoJ2Vycl92YWx1ZScsRkFMU0UpKSk7Cgokb3RoZXJjYXQgPSBhcnJheSgpOwppZiAoaXNzZXQoJHBhcmFtc1snbmV4dF9pZCddKSkKCSRvdGhlcmNhdFtdID0gJHBhcmFtc1snbmV4dF9pZCddOwplbHNlaWYgKGlzc2V0KCRwYXJhbXNbJ3ByZXZfaWQnXSkpCgkkb3RoZXJjYXRbXSA9ICRwYXJhbXNbJ3ByZXZfaWQnXTsKZWxzZQoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICcnLCBhcnJheSgnc2hvd3RhYic9PjEpKTsKCiRudW0yID0gJGRiLT5HZXRPbmUoJHNxbCwkb3RoZXJjYXQpOwppZiAoJG51bTIgPT09IEZBTFNFKQoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICcnLCBhcnJheSgnc2hvd3RhYic9PjEsICd0bXRfbWVzc2FnZSc9PiR0aGlzLT5QcmV0dHlNZXNzYWdlKCdlcnJfdmFsdWUnLEZBTFNFKSkpOwoKJHNxbCA9ICdVUERBVEUgJy4kcHJlZi4nbW9kdWxlX3RtdF9ncm91cHMgU0VUIGRpc3BsYXlvcmRlcj0/IFdIRVJFIGdyb3VwX2lkPT8nOwphcnJheV91bnNoaWZ0KCR0aGlzY2F0LCRudW0yKTsKJGRiLT5FeGVjdXRlKCRzcWwsJHRoaXNjYXQpOwphcnJheV91bnNoaWZ0KCRvdGhlcmNhdCwkbnVtMSk7CiRkYi0+RXhlY3V0ZSgkc3FsLCRvdGhlcmNhdCk7CgokdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywnJyxhcnJheSgnc2hvd3RhYic9PjEpKTsKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/action.twtauth.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKKi8KLyogTk9URTogYWx3YXlzIGNvbWUgaGVyZSBhcyByZWRpcmVjdGlvbiBmcm9tICdkZWZhdWx0JyBhY3Rpb24KCUFmdGVyIGNhbGxiYWNrIGZyb20gVHdpdHRlciwgcmVkaXJlY3Rpb24gaXMgbmVlZGVkIHRvIGFsbG93IHVzZSBvZiBhICRyZXR1cm5pZAogICBTZWUgYWxzbzogYWN0aW9uLmFkZGVkaXRfY29tcC5waHAgOjogcmVhbF9hY3Rpb24gJ2Nvbm5lY3QnCiovCgppZighZW1wdHkoJHBhcmFtc1snYWxpYXMnXSkpCnsKCSRzcWwgPSAnU0VMRUNUIG5hbWUsdHd0ZnJvbSBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdG10X2JyYWNrZXRzIFdIRVJFIGFsaWFzPT8nOwoJJGFsaWFzID0gJHBhcmFtc1snYWxpYXMnXTsKCSRiZGF0YSA9ICRkYi0+R2V0Um93KCRzcWwsYXJyYXkoJGFsaWFzKSk7Cn0KZWxzZQp7CgkkYWxpYXMgPSBGQUxTRTsKCSRiZGF0YSA9IEZBTFNFOwp9CgppZihpc3NldCgkcGFyYW1zWydjb25uZWN0J10pKSAvL2FjdGlvbiBpbml0aWF0ZWQKewoJJHR3dCA9IG5ldyB0bXRUd2VldCgpOwoJbGlzdCgka2V5LCRzZWNyZXQpID0gJHR3dC0+TW9kdWxlQXBwVG9rZW5zKCk7Cgl0cnkKCXsKCQkkY29ubiA9IG5ldyBUd2l0dGVyQ3JlZGVudGlhbCgka2V5LCRzZWNyZXQpOwoJCS8vd2hlbiByZXR1cm5pbmcgZnJvbSB0d2l0dGVyLCBNVVNUIHJlZGlyZWN0IHdpdGggYSB2YWxpZCAkcmV0dXJuaWQsIHNvIHdlIGRvbid0IHJldHVybiBoZXJlIGRpcmVjdGx5CgkJJGJhY2t0byA9ICdkZWZhdWx0JzsKCQkvL3BhcmFtZXRlcnMgaW4gcmV0dXJuLVVSTCBzZW50IHRvIHR3aXR0ZXIKCQkka2VlcHMgPSBhcnJheSgndHdlZXRhdXRoJz0+VFJVRSwncmV0dXJuaWQnPT4kcmV0dXJuaWQpOwoJCWlmKCRhbGlhcykKCQkJJGtlZXBzWydhbGlhcyddID0gJGFsaWFzOwoJCSR1cmwgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsJGJhY2t0byxOVUxMLE5VTEwsJGtlZXBzLE5VTEwsVFJVRSk7CgkJLy9jbGVhbnVwICYgZm9yY2UgYSBzZWN1cmUgcmV0dXJuLWNvbW11bmljYXRpb24gKHdoaWNoIGZyZWFrcyB0aGUgYnJvd3NlciBmaXJzdC10aW1lLAoJCS8vIEFORCBzdHVmZnMgdXAgb24tcGFnZS1pbmNsdWRlLVVSTFMsIHJlcXVpcmluZyBhIGxvY2FsIHJlZGlyZWN0IHRvIGZpeCkKCQkkY2FsbGJhY2sgPSBzdHJfcmVwbGFjZShhcnJheSgkY29uZmlnWydyb290X3VybCddLCdhbXA7JyksYXJyYXkoJGNvbmZpZ1snc3NsX3VybCddLCcnKSwkdXJsKTsKCQkkbmFtZSA9ICgkYmRhdGEgJiYgJGJkYXRhWyd0d3Rmcm9tJ10pID8gc3Vic3RyKCRiZGF0YVsndHd0ZnJvbSddLDEpIDogRkFMU0U7CgkJJG1lc3NhZ2UgPSAkY29ubi0+Z29nZXRUb2tlbigkY2FsbGJhY2ssJG5hbWUpOyAvL3Nob3VsZCByZWRpcmVjdCB0byBnZXQgdG9rZW4KCQkvL2lmIHdlJ3JlIHN0aWxsIGhlcmUsIGFuIGVycm9yIG9jY3VycmVkCgl9CgljYXRjaCAoVHdpdHRlckV4Y2VwdGlvbiAkZSkKCXsKCQkkbWVzc2FnZSA9ICRlLT5nZXRNZXNzYWdlKCk7Cgl9Cn0KZWxzZWlmKGlzc2V0KCRwYXJhbXNbJ29hdXRoX3ZlcmlmaWVyJ10pKSAvL2F1dGhvcmlzYXRpb24gY29tcGxldGVkCnsKCSR0d3QgPSBuZXcgdG10VHdlZXQoKTsKCWxpc3QoJGtleSwkc2VjcmV0KSA9ICR0d3QtPk1vZHVsZUFwcFRva2VucygpOwoJdHJ5Cgl7CgkJJGNvbm4gPSBuZXcgVHdpdHRlckNyZWRlbnRpYWwoJGtleSwkc2VjcmV0LCRwYXJhbXNbJ29hdXRoX3Rva2VuJ10sTlVMTCk7CgkJLy9zZWVrIGVuZHVyaW5nIGNyZWRlbnRpYWxzCgkJJHRva2VuID0gJGNvbm4tPmdldEF1dGhvcml0eSgkcGFyYW1zWydvYXV0aF92ZXJpZmllciddKTsKCQlpZihpc19hcnJheSgkdG9rZW4pKQoJCXsKCQkJJGJyYWNrZXRfaWQgPSAoIWVtcHR5KCRwYXJhbXNbJ2JyYWNrZXRfaWQnXSkpID8gJHBhcmFtc1snYnJhY2tldF9pZCddIDogRkFMU0U7CgkJCWlmKCR0d3QtPlNhdmVUb2tlbnMoJHRva2VuWydvYXV0aF90b2tlbiddLAoJCQkJJHRva2VuWydvYXV0aF90b2tlbl9zZWNyZXQnXSwkdG9rZW5bJ3NjcmVlbl9uYW1lJ10sJGJyYWNrZXRfaWQpKQoJCQkJJG1lc3NhZ2UgPSAkdGhpcy0+TGFuZygnc3RhdHVzX2NvbXBsZXRlJyk7CgkJCWVsc2UKCQkJCSRtZXNzYWdlID0gJHRoaXMtPkxhbmcoJ2Vycl9kYXRhX3R5cGUnLCR0aGlzLT5MYW5nKCdlcnJfdG9rZW4nKSk7CgkJfQoJCWVsc2UKCQkJJG1lc3NhZ2UgPSAkdG9rZW47Cgl9CgljYXRjaCAoVHdpdHRlckV4Y2VwdGlvbiAkZSkKCXsKCQkkbWVzc2FnZSA9ICRlLT5nZXRNZXNzYWdlKCk7Cgl9Cn0KCiRzbWFydHktPmFzc2lnbignc3RhcnRfZm9ybScsJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsJ3R3dGF1dGgnLCRyZXR1cm5pZCkpOwokc21hcnR5LT5hc3NpZ24oJ2VuZF9mb3JtJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKaWYoIWVtcHR5KCRtZXNzYWdlKSkKCSRzbWFydHktPmFzc2lnbignbWVzc2FnZScsJG1lc3NhZ2UpOyAvL3RlbGwgYWJvdXQgc3VjY2VzcyBvciBmYWlsdXJlCiRoaWRkZW4gPSAoJGFsaWFzKSA/ICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ2FsaWFzJywkYWxpYXMpIDogJyc7CiRzbWFydHktPmFzc2lnbignaGlkZGVuJywkaGlkZGVuKTsKJHNtYXJ0eS0+YXNzaWduKCdpY29uJywkdGhpcy0+R2V0TW9kdWxlVVJMUGF0aCgpLicvaW1hZ2VzL3R3dGF1dGguZ2lmJyk7CiRzbWFydHktPmFzc2lnbigndGl0bGUnLCR0aGlzLT5MYW5nKCd0aXRsZV9hdXRoJykpOwppZigkYmRhdGEpCnsKCSRuYW1lID0gKCRiZGF0YVsnbmFtZSddKSA/ICRiZGF0YVsnbmFtZSddIDogJGFsaWFzOwoJJGRlc2MgPSAkdGhpcy0+TGFuZygnaGVscF9hdXRoMScsJG5hbWUpOwoJaWYoJGJkYXRhWyd0d3Rmcm9tJ10pCgkJJGRlc2MgLj0gJzxiciAvPicuJHRoaXMtPkxhbmcoJ2hlbHBfYXV0aDInLCRiZGF0YVsndHd0ZnJvbSddKTsKCSRzbWFydHktPmFzc2lnbignZGVzY3JpcHRpb24nLCRkZXNjKTsKfQokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnY29ubmVjdCcsJHRoaXMtPkxhbmcoJ2Nvbm5lY3QnKSkpOwoKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCd0d2VldF9hdXRoLnRwbCcpOwoKPz4K]]></data>
	</file>
	<file>
	  <filename>/action.upload_css.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKQWN0aW9uIHRvIHVwbG9hZCBhIHNlbGVjdGVkIC5jc3MgZmlsZSBmb3IgYnJhY2tldCBjaGFydChzKQoqLwoKaWYgKGlzc2V0KCRwYXJhbXNbJ3VwY2FuY2VsJ10pKQp7CgkkbmV3cGFybXMgPSAkdGhpcy0+R2V0RWRpdFBhcm1zKCRwYXJhbXMsJ2NoYXJ0dGFiJyk7CgkkdGhpcy0+UmVkaXJlY3QoJGlkLCdhZGRlZGl0X2NvbXAnLCRyZXR1cm5pZCwkbmV3cGFybXMpOwp9CgppZiAoISR0aGlzLT5DaGVja0FjY2VzcygnYWRtb2QnKSkKewoJJG5ld3Bhcm1zID0gJHRoaXMtPkdldEVkaXRQYXJtcygkcGFyYW1zLCdjaGFydHRhYicsJHRoaXMtPlByZXR0eU1lc3NhZ2UoJ2xhY2twZXJtaXNzaW9uJyxGQUxTRSkpOwoJJHRoaXMtPlJlZGlyZWN0KCRpZCwnYWRkZWRpdF9jb21wJywkcmV0dXJuaWQsJG5ld3Bhcm1zKTsKfQoKJGZuID0gJGlkLidjc3NmaWxlJzsKaWYgKGlzc2V0KCRfRklMRVMpICYmIGlzc2V0KCRfRklMRVNbJGZuXSkpCnsKCSRmaWxlX2RhdGEgPSAkX0ZJTEVTWyRmbl07CgkJJHBhcnRzID0gZXhwbG9kZSgnLicsJGZpbGVfZGF0YVsnbmFtZSddKTsKCQkkZXh0ID0gZW5kKCRwYXJ0cyk7CglpZiAoJGZpbGVfZGF0YVsndHlwZSddICE9ICd0ZXh0L2NzcycKCSB8fCAhKCRleHQgPT0gJ2NzcycgfHwgJGV4dCA9PSAnQ1NTJykKCSB8fCAkZmlsZV9kYXRhWydzaXplJ10gPD0gMCB8fCAkZmlsZV9kYXRhWydzaXplJ10gPiAyMDQ4IC8vcGxlbnR5IGJpZyBlbm91Z2ggaW4gdGhpcyBjb250ZXh0CgkgfHwgJGZpbGVfZGF0YVsnZXJyb3InXSAhPSAwKQoJewoJCSRuZXdwYXJtcyA9ICR0aGlzLT5HZXRFZGl0UGFybXMoJHBhcmFtcywnY2hhcnR0YWInLCR0aGlzLT5QcmV0dHlNZXNzYWdlKCdlcnJfZmlsZScsRkFMU0UpKTsKCQkkdGhpcy0+UmVkaXJlY3QoJGlkLCdhZGRlZGl0X2NvbXAnLCRyZXR1cm5pZCwkbmV3cGFybXMpOwoJfQoJJGggPSBmb3BlbigkZmlsZV9kYXRhWyd0bXBfbmFtZSddLCdyJyk7CglpZiAoJGgpCgl7CgkJLy9iYXNpYyB2YWxpZGF0aW9uIG9mIGZpbGUtY29udGVudAoJCSRjb250ZW50ID0gZnJlYWQoJGgsNTEyKTsKCQlmY2xvc2UoJGgpOwoJCWlmICgkY29udGVudCA9PSBGQUxTRSkKCQkJJG1lc3NhZ2UgPSAkdGhpcy0+UHJldHR5TWVzc2FnZSgnbGFja3Blcm1pc3Npb24nLEZBTFNFKTsKCQlpZiAoIXByZWdfbWF0Y2goJy9cLmJyYWNrZXQuKlxcbj97LycsJGNvbnRlbnQpKQoJCQkkbWVzc2FnZSA9ICR0aGlzLT5QcmV0dHlNZXNzYWdlKCdlcnJfZmlsZScsRkFMU0UpOwoJCXVuc2V0KCRjb250ZW50KTsKCX0KCWVsc2UKCQkkbWVzc2FnZSA9ICR0aGlzLT5QcmV0dHlNZXNzYWdlKCdsYWNrcGVybWlzc2lvbicsRkFMU0UpOwoKCWlmIChlbXB0eSgkbWVzc2FnZSkpCgl7CgkJJGNzc3BhdGggPSBjbXNfam9pbl9wYXRoKCRjb25maWdbJ3VwbG9hZHNfcGF0aCddLAoJCQkkdGhpcy0+R2V0UHJlZmVyZW5jZSgndXBsb2Fkc19kaXInKSwkZmlsZV9kYXRhWyduYW1lJ10pOwoJCWlmICghY2htb2QoJGZpbGVfZGF0YVsndG1wX25hbWUnXSwwNjQ0KSB8fAoJCQkhY21zX21vdmVfdXBsb2FkZWRfZmlsZSgkZmlsZV9kYXRhWyd0bXBfbmFtZSddLCAkY3NzcGF0aCkpCgkJCSRtZXNzYWdlID0gJHRoaXMtPlByZXR0eU1lc3NhZ2UoJ3VwbG9hZF9mYWlsZWQnLEZBTFNFKTsKCQllbHNlIC8vYWxsIGdvb2QKCQl7CgkJCSRzcWwgPSAnVVBEQVRFICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdG10X2JyYWNrZXRzIFNFVCBjaGFydGNzcz0/IFdIRVJFIGJyYWNrZXRfaWQ9Pyc7CgkJCSRkYi0+RXhlY3V0ZSgkc3FsLGFycmF5KCRmaWxlX2RhdGFbJ25hbWUnXSwkcGFyYW1zWydicmFja2V0X2lkJ10pKTsKCQl9Cgl9CglpZiAoZW1wdHkoJG1lc3NhZ2UpKQoJCSRtZXNzYWdlID0gRkFMU0U7CgkkbmV3cGFybXMgPSAkdGhpcy0+R2V0RWRpdFBhcm1zKCRwYXJhbXMsJ2NoYXJ0dGFiJywkbWVzc2FnZSk7CgkkdGhpcy0+UmVkaXJlY3QoJGlkLCdhZGRlZGl0X2NvbXAnLCRyZXR1cm5pZCwkbmV3cGFybXMpOwp9Cgokc21hcnR5LT5hc3NpZ24oJ3N0YXJ0X2Zvcm0nLCR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCd1cGxvYWRfY3NzJywkcmV0dXJuaWQsJ3Bvc3QnLCdtdWx0aXBhcnQvZm9ybS1kYXRhJykpOwokc21hcnR5LT5hc3NpZ24oJ2VuZF9mb3JtJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJHNtYXJ0eS0+YXNzaWduKCdoaWRkZW4nLCR0aGlzLT5HZXRIaWRkZW5QYXJtcygkaWQsJHBhcmFtcywnY2hhcnR0YWInKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGUnLCR0aGlzLT5MYW5nKCd0aXRsZV9jc3NmaWxlMicsJHBhcmFtc1sndG10X25hbWUnXSkpOwokc21hcnR5LT5hc3NpZ24oJ2Nob29zZXInLCR0aGlzLT5DcmVhdGVJbnB1dEZpbGUoJGlkLCdjc3NmaWxlJywndGV4dC9jc3MnLDMwKSk7CiRzbWFydHktPmFzc2lnbignYXBwbHknLCR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdERlZmF1bHQoJGlkLCd1cHN0YXJ0JywkdGhpcy0+TGFuZygndXBsb2FkJykpKTsKJHNtYXJ0eS0+YXNzaWduKCdjYW5jZWwnLCR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ3VwY2FuY2VsJywkdGhpcy0+TGFuZygnY2FuY2VsJykpKTsKJHNtYXJ0eS0+YXNzaWduKCdoZWxwJywkdGhpcy0+TGFuZygnaGVscF9jc3N1cGxvYWQnKSk7CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ29uZXBhZ2UudHBsJyk7Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/css/chart.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogRGVmYXVsdHMgZm9yIGNoYXJ0IHN0eWxpbmcuIFNlZSBhbHNvIHRtdFN0eWxlcjo6X19jb25zdHJ1Y3QoKSAqLwouY2hhcnQKewoJcGFkZGluZzoycHg7CglnYXB3aWR0aDoxMHB4OwoJYmFja2dyb3VuZC1jb2xvcjojZmZmN2VkOyAvL29mZi13aGl0ZQoJZm9udC1mYW1pbHk6c2FuczsKCW1pbmhlaWdodDo1MjZwdDsgLy9BNCBsYW5kc2NhcGUsIDEvMi1pbmNoIG1hcmdpbnMKCW1pbndpZHRoOjc3MHB0Owp9Ci5saW5lCnsKCXdpZHRoOjJweDsKCXN0eWxlOmRvdHRlZDsKCWNvbG9yOiMwMDgwMDA7Cn0KLyogbWF0Y2hlcyBkZXNjcmlwdGlvbnMgKi8KLmJveAp7CgltYXJnaW46M3B4IDVweDsKCXBhZGRpbmc6MDsKCWhlaWdodDo0MHB4OyAvKiBhdCBsZWFzdCBmb250LXNpemUqNCAqLwoJd2lkdGg6MTUwcHg7Cglib3JkZXI6MnB4IHNvbGlkICNmMDA7CgliYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Cgljb2xvcjojMDAwOwoJZm9udC1zaXplOjEycHg7IC8vZm9udCBub3JtYWxseSBzZXQgYXMgcHRzCn0KLyogbWF0Y2hlcyB0byBiZSBwbGF5ZWQgYW5kIHdob3NlIHNjaGVkdWxlIGlzIGluZGljYXRpdmUsIHRlbnRhdGl2ZSAuLi4gKi8KLmJveDpub25maXJtCnsKCWJvcmRlci1jb2xvcjojMDBmOwoJYmFja2dyb3VuZC1jb2xvcjojZmZjYjk0OyAvL29yYW5nZQp9Ci8qIG1hdGNoZXMgdG8gYmUgcGxheWVkIGFuZCB3aG9zZSBzY2hlZHVsZSBpcyBmaW5hbGlzZWQsIGNvbmZpcm1lZCAuLi4gKi8KLmJveDpmaXJtCnsKCWJvcmRlci1jb2xvcjojZjAwOwoJYmFja2dyb3VuZC1jb2xvcjojYjdlOGIxOyAvL2dyZWVuCn0KLyogbWF0Y2hlcyBhbHJlYWR5IGZpbmlzaGVkICovCi5ib3g6cGxheWVkCnsKCWJvcmRlci1jb2xvcjojMDAyYzhmOwoJYmFja2dyb3VuZC1jb2xvcjojYmZkNmVjOyAvL2JsdWUKfQouYm94Ondpbm5lcgp7Cglib3JkZXItY29sb3I6IzgwMDA3ZjsKCWJhY2tncm91bmQtY29sb3I6I2U1YjQwMDsgLy9nb2xkCgljb2xvcjojMDAwOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/css/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/css/module.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmRuZGhlbHAgeyBkaXNwbGF5Om5vbmU7IH0gLyogY2hhbmdlZCBhdCBydW50aW1lIGlmIGpzIGlzIGF2YWlsYWJsZSAqLwppbWcudGlwcGVyIHsgZGlzcGxheTpub25lOyB9IC8qIGRpdHRvICovCgp0YWJsZS50YWJsZV9zb3J0IHRoZWFkIHRyIHRoCnsKCW1hcmdpbjogMCAyMHB4OwoJcGFkZGluZzogNXB4IDVweCA1cHggMTBweDsKCWNvbG9yOiAjMDAwOwogCWJhY2tncm91bmQ6ICNFNUI0MDA7IC8qZ29sZCovCgl0ZXh0LWFsaWduOiBsZWZ0OwoJY3Vyc29yOiBkZWZhdWx0Owp9CnRhYmxlLnRhYmxlX3NvcnQgdGhlYWQgdHIgdGgub3JkLCB0YWJsZS50YWJsZV9zb3J0IHRoZWFkIHRyIHRoLlx7c3NzXDpmYWxzZVx9CnsKCW1hcmdpbi1sZWZ0OiAwOwoJcGFkZGluZy1sZWZ0OiAycHg7Cn0KdGFibGUudGFibGVfc29ydCB0aGVhZCB0ciB0aC5jaGVja2JveAp7CgltYXJnaW4tbGVmdDogMjBweDsKCXBhZGRpbmctbGVmdDogMTBweDsKfQoKdGFibGUudGFibGVfc29ydCB0aGVhZCB0ciAuU29ydEFibGUKewoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy9iZ2RhcmsuZ2lmKTsKCWJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CgliYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgbGVmdDsKCWN1cnNvcjogcG9pbnRlcjsKfQoKdGFibGUudGFibGVfc29ydCB0aGVhZCB0ciAuU29ydFVwCnsKCWJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvYXNjZGFyay5naWYpOwoJYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKCWJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBsZWZ0OwoJY3Vyc29yOiBwb2ludGVyOwp9Cgp0YWJsZS50YWJsZV9zb3J0IHRoZWFkIHRyIC5Tb3J0RG93bgp7CgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2Rlc2NkYXJrLmdpZik7CgliYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwoJYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGxlZnQ7CgljdXJzb3I6IHBvaW50ZXI7Cn0KCnRhYmxlLnRhYmxlX3NvcnQgdGJvZHkgdGQucm93MXMgewoJYmFja2dyb3VuZC1jb2xvcjogI0U5RTlFOTsKfQoKdGFibGUudGFibGVfc29ydCB0Ym9keSB0ZC5yb3cycyB7CgliYWNrZ3JvdW5kOiAjRDlEOUQ5Owp9Cgp0aAp7CiAJYmFja2dyb3VuZDogI0FBQTsKCWhlaWdodDogMi41ZW07Cgl0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBjdXJzb3I6IGRlZmF1bHQ7Cn0KCnRoLmRpdmlkZXIsIHRkLmRpdmlkZXIgeyBwYWRkaW5nLWxlZnQ6IDVweDsgYm9yZGVyLWxlZnQ6IDNweCBkb3R0ZWQgI0U1QjQwMDsgfQoKdGV4YXJlYSB7IHdpZHRoOjY1MHB4OyB9CgovKiBmb3IgbWFraW5nIGlucHV0cyBsb29rIGxpa2UgbGlua3MgKi8KaW5wdXQuZmFrZWljb24KewoJbWFyZ2luOjA7CglwYWRkaW5nOjA7Cglib3JkZXI6bWVkaXVtOwoJdmVydGljYWwtYWxpZ246bWlkZGxlOwp9Ci8qIGNvbG9yIGFuZCBzaXplIHdpbGwgYmUgY29uZm9ybWVkIGF0IHJ1bnRpbWUsIGlmIGpzIGlzIGVuYWJsZWQgKi8KaW5wdXQuZmFrZWxpbmsKewoJbWFyZ2luOjA7CglwYWRkaW5nOjA7Cgl0ZXh0LWFsaWduOmxlZnQ7Cgl0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOwoJZm9udC1zaXplOjFlbTsKCWNvbG9yOiMwMDA7CgliYWNrZ3JvdW5kOnVybCgiIik7Cn0KCmlucHV0LmZha2VsaW5rOmhvdmVyCnsKCXRleHQtZGVjb3JhdGlvbjpub25lOwoJYmFja2dyb3VuZDp1cmwoIiIpOwp9Ci8qIGZvciBwb3B1cC1tb2RhbCBjb25maXJtYXRpb24gKi8KZGl2Lm1vZGFsXC1vdmVybGF5CnsKCWRpc3BsYXk6bm9uZTsKCXBvc2l0aW9uOmZpeGVkOwoJdG9wOjA7CglsZWZ0OjA7CgloZWlnaHQ6MTAwJTsKCXdpZHRoOjEwMCU7Cgl6LWluZGV4OjEwMDE7CgliYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjMpOyAvL2NhbiBiZSBzYWZlbHkgaWdub3JlZAp9CmRpdi5jb25maXJtXC1jb250YWluZXIKewoJZGlzcGxheTpub25lOwoJcG9zaXRpb246YWJzb2x1dGU7Cgl0b3A6NTAlOwoJbGVmdDo1MCU7Cglib3JkZXI6MnB4IHNvbGlkICNGREVBRDA7CgktbW96LWJvcmRlci1yYWRpdXM6NXB4IDVweCA1cHggNXB4OwoJLXdlYmtpdC1ib3JkZXItcmFkaXVzOjVweCA1cHggNXB4IDVweDsKCWJvcmRlci1yYWRpdXM6NXB4IDVweCA1cHggNXB4OwoJcGFkZGluZzoxMHB4IDQwcHg7Cgl6LWluZGV4OjEwMDI7CgliYWNrZ3JvdW5kOiNGRUY0RTcgdXJsKC4uL2ltYWdlcy93YXJuaW5nLmdpZikgbm8tcmVwZWF0IDVweCAxMHB4Owp9CmlucHV0I21jX2NvbmYKewoJZm9udC13ZWlnaHQ6Ym9sZDsKCWNvbG9yOiMwMDA7CgliYWNrZ3JvdW5kOiNDNEE2MzY7IC8vOiM2NkQxNjY7Cn0KaW5wdXQjbWNfY29uZjpob3Zlcgp7Cgljb2xvcjojRkZGOwoJYmFja2dyb3VuZDojMDBCMjAwOwp9CmlucHV0I21jX2RlbnkKewoJZm9udC13ZWlnaHQ6Ym9sZDsKCWNvbG9yOiMwMDA7CgliYWNrZ3JvdW5kOiNDNEE2MzY7Cn0KaW5wdXQjbWNfZGVueTpob3Zlcgp7Cgljb2xvcjojRkZGOwoJYmFja2dyb3VuZDojRjAwOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/css/pikaday.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[QGNoYXJzZXQgIlVURi04IjsKCi8qIQogKiBQaWthZGF5CiAqIENvcHlyaWdodCDCqSAyMDE0IERhdmlkIEJ1c2hlbGwgfCBCU0QgJiBNSVQgbGljZW5zZSB8IGh0dHA6Ly9kYnVzaGVsbC5jb20vCiAqLwoKLyoKY2xhc3NlczoKaXMtYm91bmQKaXMtZW1wdHkKaXMtaGlkZGVuCnBpa2EtYnV0dG9uCnBpa2EtY2FsZW5kYXIKcGlrYS1kYXkKcGlrYS1sYWJlbApwaWthLW5leHQKcGlrYS1wcmV2CnBpa2Etc2VsZWN0CnBpa2Etc2VsZWN0LW1vbnRoCnBpa2Etc2VsZWN0LXllYXIKcGlrYS1zaW5nbGUKcGlrYS10YWJsZQpwaWthLXRpdGxlCnBpa2Etd2VlawpsYXlvdXQ6CjxkaXYgY2xhc3M9InBpa2Etc2luZ2xlIGlzLWJvdW5kIiBzdHlsZT0iIj4KIDxkaXYgY2xhc3M9InBpa2EtbGVuZGFyIj4KICA8ZGl2IGNsYXNzPSJwaWthLXRpdGxlIj4KICAgPGRpdiBjbGFzcz0icGlrYS1sYWJlbCI+CiAgICA8c3BhbiBjbGFzcz0icGlrYS1zdWJsYWJlbCI+TW9udGg8L3NwYW4+PHNlbGVjdCBjbGFzcz0icGlrYS1zZWxlY3QgcGlrYS1zZWxlY3QtbW9udGgiPgogICA8L2Rpdj4KICAgPGRpdiBjbGFzcz0icGlrYS1sYWJlbCI+CiAgICAgPHNwYW4gY2xhc3M9InBpa2Etc3VibGFiZWwiPlllYXI8L3NwYW4+PHNlbGVjdCBjbGFzcz0icGlrYS1zZWxlY3QgcGlrYS1zZWxlY3QteWVhciI+CiAgIDwvZGl2PgogICA8YnV0dG9uIGNsYXNzPSJwaWthLXByZXYiIHR5cGU9ImJ1dHRvbiI+UHJldmlvdXMgTW9udGg8L2J1dHRvbj4KICAgPGJ1dHRvbiBjbGFzcz0icGlrYS1uZXh0IiB0eXBlPSJidXR0b24iPk5leHQgTW9udGg8L2J1dHRvbj4KICA8L2Rpdj4gPC0tIHBpa2EtdGl0bGUKICA8dGFibGUgY2xhc3M9InBpa2EtdGFibGUiPgogICA8dGhlYWQ+CiAgICA8dHI+CiAgIDwvdGhlYWQ+CiAgIDx0Ym9keT4KICAgIDx0cj4KICAgIDx0cj4KICAgIDx0cj4KICAgIDx0cj4KICAgIDx0cj4KICAgPC90Ym9keT4KICA8L3RhYmxlPgogPC9kaXY+IDwtLXBpa2EtbGVuZGFyCjwvZGl2PiA8LS1waWthLXNpbmdsZSBpcy1ib3VuZAoqLwoKLnBpa2Etc2luZ2xlIHsKICAgIHotaW5kZXg6IDk5OTk7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGJhY2tncm91bmQ6ICNmZmY7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOwogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2JiYjsKfQoKLyoKY2xlYXIgY2hpbGQgZmxvYXQgKHBpa2EtbGVuZGFyKSwgdXNpbmcgdGhlIGZhbW91cyBtaWNybyBjbGVhcmZpeCBoYWNrCmh0dHA6Ly9uaWNvbGFzZ2FsbGFnaGVyLmNvbS9taWNyby1jbGVhcmZpeC1oYWNrLwoqLwoucGlrYS1zaW5nbGU6YmVmb3JlLAoucGlrYS1zaW5nbGU6YWZ0ZXIgewogICAgY29udGVudDogIiAiOwogICAgZGlzcGxheTogdGFibGU7Cn0KLnBpa2Etc2luZ2xlOmFmdGVyIHsgY2xlYXI6IGJvdGggfQoucGlrYS1zaW5nbGUgeyAqem9vbTogMSB9CgoucGlrYS1zaW5nbGUuaXMtaGlkZGVuIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5waWthLXNpbmdsZS5pcy1ib3VuZCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBib3gtc2hhZG93OiAwIDVweCAxNXB4IC01cHggcmdiYSgwLDAsMCwuNSk7Cn0KCi5waWthLWxlbmRhciB7CiAgICBmbG9hdDogbGVmdDsKICAgIHdpZHRoOiAyMGVtOwogICAgbWFyZ2luOiA4cHg7Cn0KCi5waWthLWxhYmVsIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICpkaXNwbGF5OiBpbmxpbmU7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiA5OTk5OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDAgNXB4IDEwcHggNXB4OwogICAgZm9udC1zaXplOiAxLjFlbTsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKfQoKLnBpa2EtdGl0bGUgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgoucGlrYS10aXRsZSBzZWxlY3QgewogICAgY3Vyc29yOiBwb2ludGVyOwogICAgei1pbmRleDogOTk5ODsKICAgIG1hcmdpbjogMDsKICAgIGZvbnQtc2l6ZTogMWVtOwogICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKfQoKLnBpa2EtcHJldiwKLnBpa2EtbmV4dCB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG91dGxpbmU6IG5vbmU7CiAgICBib3JkZXI6IDA7CiAgICBwYWRkaW5nOiAwOwogICAgd2lkdGg6IDIwcHg7Ci8vICAgIGhlaWdodDogMjBweDsKICAgIC8qIGhpZGUgdGV4dCB1c2luZyB0ZXh0LWluZGVudCB0cmljaywgdXNpbmcgd2lkdGggdmFsdWUgKGl0J3MgZW5vdWdoKSAqLwogICAgdGV4dC1pbmRlbnQ6IDIwcHg7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjsKICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgICBvcGFjaXR5OiAuNTsKICAgICpwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAqdG9wOiAwOwp9CgoucGlrYS1wcmV2OmhvdmVyLAoucGlrYS1uZXh0OmhvdmVyIHsKICAgIG9wYWNpdHk6IDE7Cn0KCi5waWthLXByZXYsCi5pcy1ydGwgLnBpa2EtbmV4dCB7CiAgICBmbG9hdDogbGVmdDsKICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCUUFBQUFlQ0FZQUFBQXNFajVyQUFBQVVrbEVRVlI0MnUzVk1Rb0FJQkFEUWY4UGdqK09EOWhHMkN0T05KQjJ5bVFrS2UwSGJ3QVAweHVjRGlRV0FSSVRJREVCRW5NZ01ROFM4K0FxQklsNmtLZ0hpWHFRcUFlSmVwQm8vejM4Si9VMHVBSGxhQmtCbDlJNEd3QUFBQUJKUlU1RXJrSmdnZz09Jyk7CgkJYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCBjZW50ZXI7CgkJKmxlZnQ6IDA7Cn0KCi5waWthLW5leHQsCi5pcy1ydGwgLnBpa2EtcHJldiB7CiAgICBmbG9hdDogcmlnaHQ7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQlFBQUFBZUNBWUFBQUFzRWo1ckFBQUFVMGxFUVZSNDJ1M1ZPd29BTUFnRTBkd2ZBbk5qVTI2YllrQkNGR3dmaUw5VlZXb08rQko0R2YzZ3RzRUtLb0ZCTlRDb0NBWVZ3YUFpR05RR01VSE1rakdiZ2prMm1JT051WG8wbkM4WG5DZjFKWGdBclZJWkFRaDVUS1lBQUFBQVNVVk9SSzVDWUlJPScpOwoJCWJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgY2VudGVyOwogICAgKnJpZ2h0OiAwOwp9CgoucGlrYS1wcmV2LmlzLWRpc2FibGVkLAoucGlrYS1uZXh0LmlzLWRpc2FibGVkIHsKICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIG9wYWNpdHk6IC4yOwp9CgoucGlrYS1zZWxlY3QgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgKmRpc3BsYXk6IGlubGluZTsKfQoKdGFibGUudGFibGVfc29ydCB0YWJsZS5waWthLXRhYmxlLCAucGlrYS10YWJsZSB7CiAgICB3aWR0aDogMTAwJTsKICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICBib3JkZXItc3BhY2luZzogMDsKICAgIGJvcmRlcjogMDsKfQoKdGFibGUudGFibGVfc29ydCB0YWJsZS5waWthLXRhYmxlIHRoLCAucGlrYS10YWJsZSB0aCwKdGFibGUudGFibGVfc29ydCB0YWJsZS5waWthLXRhYmxlIHRkLCAucGlrYS10YWJsZSB0ZCB7CiAgICB3aWR0aDogMTQuMjglOwogICAgcGFkZGluZzogMDsKICAgIG1hcmdpbjogMDsKICAgIGZvbnQtc2l6ZTogMWVtOwp9Cgp0YWJsZS50YWJsZV9zb3J0IHRhYmxlLnBpa2EtdGFibGUgdGgsIC5waWthLXRhYmxlIHRoIHsKICAgIGNvbG9yOiAjOTk5OwogICAgYmFja2dyb3VuZC1jb2xvcjojZGNkY2RjOwovLyAgICBsaW5lLWhlaWdodDogMmVtOwogICAgaGVpZ2h0OiAyZW07CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLyogc3R5bGluZyBmb3IgYWJiciAqLwoucGlrYS10YWJsZSBhYmJyIHsKICAgIGJvcmRlci1ib3R0b206IG5vbmU7CiAgICBjdXJzb3I6IGhlbHA7Cn0KCi5waWthLWJ1dHRvbiB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICBvdXRsaW5lOiBub25lOwogICAgYm9yZGVyOiAwOwogICAgbWFyZ2luOiAwOwogICAgd2lkdGg6IDEwMCU7CiAgICBwYWRkaW5nOiA1cHggN3B4OwogICAgY29sb3I6ICM2NjY7CiAgICBsaW5lLWhlaWdodDogMS41ZW07CiAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7Cn0KCi5waWthLXdlZWsgewogICAgZm9udC1zaXplOiAwLjllbTsKfQoKLmlzLXRvZGF5IC5waWthLWJ1dHRvbiB7CiAgICBjb2xvcjogIzMzYWFmZjsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgouaXMtc2VsZWN0ZWQgLnBpa2EtYnV0dG9uIHsKICAgIGNvbG9yOiAjZmZmOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBiYWNrZ3JvdW5kOiAjMzNhYWZmOwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggM3B4ICMxNzhmZTU7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7Cn0KCi5pcy1kaXNhYmxlZCAucGlrYS1idXR0b24gewogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICBjb2xvcjogIzk5OTsKICAgIG9wYWNpdHk6IC4zOwp9CgoucGlrYS1idXR0b246aG92ZXIgewogICAgY29sb3I6ICNmZmYgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6ICNmZjgwMDAgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IDNweCAhaW1wb3J0YW50Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/ascdark.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhCAAMAIABAAAAAP///yH5BAEKAAEALAAAAAAIAAwAAAIPjI+JAMmMHjiShfqU3rwXADs=]]></data>
	</file>
	<file>
	  <filename>/images/asclite.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhCAAMAIAAAP///////yH5BAEKAAEALAAAAAAIAAwAAAIPjI+JAMmMHjiShfqU3rwXADs=]]></data>
	</file>
	<file>
	  <filename>/images/bgdark.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhCAAMAIABAAAAAP///yH5BAEKAAEALAAAAAAIAAwAAAIUjI8BkLvnXIjxrBTWoS7wEyULlhQAOw==]]></data>
	</file>
	<file>
	  <filename>/images/bglite.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhCAAMAIAAAP///////yH5BAEKAAEALAAAAAAIAAwAAAIUjI8BkLvnXIjxrBTWoS7wEyULlhQAOw==]]></data>
	</file>
	<file>
	  <filename>/images/descdark.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhCAAMAIABAAAAAP///yH5BAEKAAEALAAAAAAIAAwAAAIPjI+pywgPX4jvRBTTa7wAADs=]]></data>
	</file>
	<file>
	  <filename>/images/desclite.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhCAAMAIAAAP///////yH5BAEKAAEALAAAAAAIAAwAAAIPjI+pywgPX4jvRBTTa7wAADs=]]></data>
	</file>
	<file>
	  <filename>/images/edit.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAOZ/ANfq//r+/ur0/+Xy/9/1/9rs/9bu/nehxf/+/fX///H4/+32/+j0/+P3/+bz/+Hw/3+ny3mgxV2XzViTyXqhxVuXzePx//z9/3eew3CYv/j7//r9//3+///+/9zu//f7//j8/3GZv/T6//b6/9/u/93u/+3+//b7/+Dv/1qTyVeY0HGYv/r8/8jf84etz26Xv1eTyfP4/+v1/uX1+FuY0NHq+q/L5IWhwVCKwG6fyun5/+n6/8DL2dzj6VaRyVqAp+T4//z+//T5//L5+9zt/6Kyxc/b5ODy/+Dn63ifxD9nkUdoj+P//1KKv9/v/52ww/D6/3KawfP6/1ORylGSzGOc0N/w/9fi64ykvJWmvPT9//f+/+Xx/////uH0/42ryf7+//7//1qQw0N1pkx5pYuetleNwFiVzePt8luWz+v7/9PZ41qX0J650MPM29ni6vH3++Lv/97u//b4+VJwllZzlVWTytjr/+Lx/16Bp+31/4Sdt+b4/3adw////////yH5BAEAAH8ALAAAAAAQABAAAAfjgH95BxQUGIeHfRERBz9/fyt+fgiSlX5dkhCPIX5rWZVgF35FPH6af0lIdWWSHEEgfk9LRi6PUQg9c5IXGx8fcG9DOY8ZlWEXLBonIgpQCRPEfh0dQRvKIgsDFiYp0R28GiNSC1x4cWrQf8UcGyAfMTLaKHI66ZwX4QoCDhZOJQVAYDx64YeDED0M5Hko4KGBj0dmAqCRsc+ClYUAWhiw80jMFTpYEjx4UOKOly9KbKR51MSPmz1aSJAgAuDIjTYmpjzC4WfLDBM7+DQgQKCGASZUHpGpwlSC0woVztBgo2LMn0AAOw==]]></data>
	</file>
	<file>
	  <filename>/images/icon.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhMAA8AOf/AHtiAoJoCodsAotvAIpvB41wAIpwFY9yAJF0AZh1AIx2GpR3B5V4AJd5AJF6FZh6DJl7AJp8AJl7Dp1+ApZ/HJ+ABpeAJZiBHqGCAJuCFaGCCpqDIKSEAKSEDqCGDp+GGqeHAZ+HJZ6HLaGIHa+HAKOJEqmJBKuKB6eMBqWLFq2LAKmJIaSLIK+NAK6NDrWNAKmOGrGPAK2RAKqQHKyREaqQJrSRA6+TAbmQBrKRFK2SHruRAK+TFLSSFraTB7eUALeUCbCVF7mVALqWALKWGbmWDbOXGrWYDLKXJbyYALWYHLuYEbmbALeaEL6aAbuYH7eaHribErmcFMCcBLudFsOdAMCcF8KdCLqdIryeF76fCLmdK72fGcWgAMSfDcOeG76gG8ufAL2gJsWgD7+hHMGiDr2gL8iiAMWgHsehEcCiHcKjEMqjAMijFMSlE8ulAtGkAMOlIcqkF9CkBs2mAMamFsioBc+nAM2nB9OmAMumGcanJMioGdSnAM2nGs+oC9GpAM6oHMqqG9epAMyrDdKrANGqD9SsANKrEc6tEtWtANOsE8ysKs2tINusAtauANKsItStFdCvFNivBNWuF8+vItGwF9mwAN+vANSyBNevGdGwJNCwLtqxCdiwG9uyANOyGuGxANuyDNa0CtOyJ92zANWzHNqyHdyzD960AOOzAM61Mdi2D+W0ANuzK+C2AN61E9a1K9i2INW1NNq3Eue2AuK4ANy4Fdq4I+S5BOG4GNq4Lui4Bt26GOa6AOO5G926Juu6AN+7Gua7C967J+y7AOW7Ht+8KeC9Hei9D+O/Deq/AN7AHuG+K+XAEeq/E+bBFOvAFePALd/DLubCJO/DAujDF+7CGuLFMevFG+fEMvDEHenFKOfEO+XHKN7LGvHFH+zHHu/IDPPHDu7IIPfJFe3NEuLPIOfOIe3NJOrQE/LMJfTNF/rNG/bPG/LRG+vSM/jRHvzUI/7WFP3VJfnYJv7bG/7cLPTgKv/eIf7hIv7iMPvlMv/pKv3zMv///yH5BAEKAP8ALAAAAAAwADwAAAj+AP8JNGVKoMGDCBMqXMjwHyRRw4yZakixIkNBfKjU+XVNmMWPHwU1ofAPjKZywECqZEiIh0EkouJxYuiqm7Rus1Yu1GTlIJhh7Awio8aN3Tx9/fwp7WdP3rps1I7p/GfqD0JB2YTJGnZtXLlx5NKh+3bumzpz7Ni1Kycum7GVsn4hZKRJFKxOf7pcCcNmTp5BjgI7OkR4Eqxh0YzJAtkoWxyDe/gEkjPEho0kVdjQGXSolOfPkwblYcPG0Khbphh9zMZMYBwqTVyAUGFDSJIubAANOuQ5VSjPkw4BAsSmipM0iRDtsajpnUAlJzRgANFCiBAnXdgAOuSoVKpWrUL+lZp0aBAgNmGc2ACSps7HbN62oEDQgAOIFjuEOOnCBtChSaWAB55nhwzHRhhOCMGBClaIYdEm5KwRgQANcABCDNY5EQYbgBzi2SutvNJKKKUQBggbXTghBAYNAKHER4vIcQIADXAAQgs4COFEGHkAckgpqbwiZCuhlEJYHmx04YQQGAywxAwgURHJAwVgAEILNghRRRiAEFbKK+AJGUoohwxCWhdJ2AABCGCEoFIdorgAAQcqxCBEF2wAMsgkpbxSSy2tvJJKKYSR1kUSLRQhxwwrbSGJMYvYoAIJQnTBRh6HlJLKK774Ugt4pRAWRhVdpBEJIVTIAYsnmzDykQ7+iDxzDSxsdHFFGHkc4kgrtRRTTC2thFLKIYD8MYkoorBxBRuRnMLKL8P8IkxFHwRRByvXlFPONs8IKeQw1SwzzLjDRHNNNK90ckUSbCCSRhRf1CHJL+NkQ1EIQVABhhya/DJOO/PYY88+/BS8zz30sLONMZE4oQQIbARShAcCrTADGrC0Qw5FMFhRhxxy8MGHIZ78Mkw012wTzTC/eCJHGk4AoUQQIwSRgwMJgfFLPd40xEITYPCRiCWamOLJIn8YAvLSINfhRRFKBAGDAgosVEc0+KzC0AhEgCHHH4lo4okprMACyy2sjOKJKZEEUocXRSjBwwwpbLAQEpq4Aw/+QxfMQEUdfCAiiSaeEESQJ5pokoghctRxBRBB0ADDCA2B8Uw6DcHQBBhyEJKIJJp4QpAnmlgiCSKByLGGFTYEMQMMGTT0hCjjbMLQCESAAbIhi0iSeOKWSILIHyCDsUQMNMxQwgUUIbKNIAyJAAMVYMgRCCKJSKKJJZIksoghgcixhhVFnOACDB9QFAQhw8TREAtKgJGGHIEgskgi+CNiSCByrAEGFUEAAQxSsAGKNMETo6DIBmgQBTDUQQ58MIQhEGGIQARCDnUAAxWUQAMOlGAEFUmDKPhQkRQogQplAFkg+BAIPgRCDnVYAxiiQAQXYMADGaAIFRaBCCxU5AL+NFACFb7ANJDVYQ1goIISaACCCXRgCH9ABGH+IAcizAAJR7iCIRYhho+MIAhNoEIZ0lAHOdRhDWUAAxWUEIQTaKACQ/hDGtYgh0ggKxKL+IMhEMEHK4DEAikIQhOoAAYwpKEMhaRCE4JAAxiMQAN/AMJBevCFOsghDYVEwkouAIMgFIEKVqCCFaxABSUQgQYwSMEHWCAKKqzEIhTQgAtyYIMi2FIJNIBBByYgAQr8QxbsMMMrKyKABlSAAyBIpgYgsAAEIIACBuFDDYZZEQEcAAIRgEADEnCAAwzAAdR8ZQAOAIEIQKABByCAAcJJTQEM4J0EYGc4KwACDkRAAvL+pKYNYMGGGEQgn8O0wS/+8IIGAHQlbPgDLAaxAycc1CJHkMEVnJGNXAiJHKaIwRGO8NCERIEKR2DCLaxBjnjQIx7kcIYdYkAFKkShowIpJBVkIIlbOIMc7pAHO7LhjFswQQZxKGRHyxCHOhxBC6O4hTPI4Q55sCMbzriFJWQABj7UwQsPFRkftGAHU9zCGeRwhzzYkQ1nsMIUWqDCJgTBh4PWoRGb2AQf7GCKWziDHPGQBzuy4QxWWKIOgojrJg7qBFIYdhN2MMUtnEGOeMiDHdlwxi0IIYhYkCIWhIgBQOUgiVh4NhaJGIUzxCGPebAjG8JIxCZ2IYtdyMIO8jSaCB8yYQpg2BYYBBGGNbKBDFmYAhjHCO4xCGGJ2BrEFJkYxTGkEVxpHAMXuDjGNKYhjWlI4xiWGAUhjCuQOtyCFawQBjW0Qd7pYuO82qDGLTLBClNw1yCEYMUt5uuMbJBjHesgRzaoIYxbsOIWpnjvQdJgilHMd77CEMaB5zsKQgg4IWxIhCRGsWBWmCIRhHhwRUCm4Q57+MEBAQA7]]></data>
	</file>
	<file>
	  <filename>/images/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/images/twtauth.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhIAAgAMZ8AAyr9QCw+RGs9gCx+gCz/Bat9xqu+Biw8x2v+S+r8AC4+hyx9QC5+yCw+gC6/B+y9iOx/CKz9wa7/jWv8yW0+Dew9Q28/wi++ie1+QDA/yq2+hK9/w+/+yy3+yi59RTA/Cq69wDG/wDH/y27+ADI/xjC/S+8+TG9+hzD/kK5+DO++x/E/zW//CLF/x/H/CXG/yLI/R7K+DfD+iXJ/kfA9znE+0jB+SjK/yTM+jvG/CrL/0rC+jnI9yfN/EvD+z3H/S3M/zvJ+CrP/SzQ/lDG/lrF9y/R/0LN/UPO/l7I+1TN/mDK/VXO/2rL+FjQ/2HP+lnV/1rW/4TR+nTX/Xjc/43d/5bd/53e/J7f/Zji/6Pj/6/h+6nk/arl/qzn/7Pl/7jl+rnn+7Pp/Lro/MHm/L3q/r/s/8Xu/c/w/9Tx+97y/9/z/9n1/+X1/Ob3/e32/+f4/u73//D4//T5/Pv4/fb7/vj+///9+//9//n///z/+/7//P///////////////yH5BAEKAH8ALAAAAAAgACAAAAf+gH+Cg4SFhoeIiX89Q0M4ipCHQ0ZGQ5GKQkNGgj1CjUI4gkZDQpeCjTo6PT1COj1COkJCPamNprKpuT2pPbmpQkOmMT2+xcU9MZA4ODzGM7kzLiEhM7lBy4czuTMhMDMwMzAwMzAhOkc6LisrvjOGOj/xMzozITPiMCErUGZxaVRIoCBZAeOHDkMz1q3L0gUGihzrUECps6fiHjhqpiicYehPjRUoVqDZ40VHBhQfVpyxaDHOFBQranT8sw4FCi0V1VRRsgFFm4p3LHJZgWKFjI4oVtjcwMSNRTZivMxhWZHJBpsrUBC6gOLDBxYbOGCJQ7WiHTwslUhg8QGF1xP+gjh8YEH3hAUrVO3orXinYpwcDlioYKHigwpBJ1SoOHFChQMUZepYvHOn4h07FbuocKD4hOITgkCcMCHBhGkGRNRQ3WPHIp4nGkzLPuGBEAgJuCVgyAHHIp49dvbgqfhFAoPcEkB0lOCguQMGS8bAqWiHpZodFCQ4BzFTgwYGCigQMJBEzeo1Pyh0YOC9A4OOHTBgoJBCypUwbVaToUFAvn/5HRiiAQUYUIBBEVvQwVIcYDSBQQD/+UeBBob8F0EAGIxgQxJJ+HACBgEMgAEFJEZAgX8UdKQABn9gsEAAAhRQgAECAGDAAhEssEAEPFLwBwYKzETIAg3oaOSRFRxNKaQhFECAAAILIDDBBEY+icCUEFCwJCERNGCAAQgsgMCXEzy5AAJfNhDBloQs0EADgizw5ZcLCLJAAxOwueScCOjp5x8JBJrAn4T+GQgAOw==]]></data>
	</file>
	<file>
	  <filename>/images/view.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAOZyAJrN/9Ls/6jU/5zP/8Dg/9Xr/6WkpI6Ojszm/8fm/8S+vrfT7cbl///HNY2Ojunp6Z6goqqvtLq5ub7j/8bBwb3h/9/x/7fd/5/S//DFT8fGxry9vsLf+//INqmusqnY/92loK+vr6zM66qclbK4vszLyqmop7jc/7O7wqyrqpvK+bW/yI+Pj6DN+c+imuXMirvAxcPDwqfW/7nc/KNmR5mcn6LR/5+susjp/9br/6HR/9DQz7bd/+33//K7QOz3/+rq6s/Ozp6ipL29vLy7u9zx/83MzK3X/6ifnNXi7dLf6tDm97R9Q93d3bTD0dprGrrg/5iXlqKuua3U+7i+xJWXmeWwrJzQ/8W/v7nd/6vX/7i4uMTDw+7z9/D1+NjNzdZjHbjEz7CHgvPHUL3i///FNby9vc/k9M9kIeHh4cvl/7nBypOTkpnO/6y3udfX176+vdeloOzs7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAHIALAAAAAAQABAAAAeXgHKCg4SFhDsSG2ZbJYaDXDBKXV5Ja3BAhkEoHEU/PRYMTiaGISJQagU5CBVTNWmFESpaJwQEWUdXNzGFHi1tOgICNgAYUkOFKQsfAwAAAzIzVW+FRCQJExc8ZDhhLI5RVGcBAUsrbiNWjgYHEEIObGIvPiCOD0YaTXJfTx1jcY6FsIBpkMEFQEIU0JRhcpCQAhpIGjoKBAA7]]></data>
	</file>
	<file>
	  <filename>/images/warning.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhGQAZAOfkAJuIG5yJHJ2KHZ6LJ6CMIKGNIaKOIqOPI6SQJKWRJaORLaaSJ6iUKLCUFq2TKa+UIamVKa6UKrCVIqqWKqqXM7OXGq2YI7GWLbKXJbSYG66ZJLSYJquZPLWZJ7aaKK6bP7ebKbicK7CdQa+dR7mdLKqfR7qeLbKfQ7yfLrahNr2gL7ygN76hML+iMb6iOcCjMsGkM8CkO8KlNcKlPMSmNsWnN72pTcapOMWpQMeqOcaqQcGrSMirOsmsO8CtVr6tXcisSsqtPMCuXsyuPc6vNs2vPsSwU8OwWc6wP8WxVNCxONSvQcOxYc+xQNawOtGyOdWwQsSyYtKzO9iyPMm0V9O0PNmzPcq1WNW1PcK1dtq0PtK1U9q0Rta2PsO2d9y1P9e3P824W9u2R9S3Vd23QN64Qcy6aci6e9+5Q+C6RN+6S868a+G7Rc+9bNm8WeO8RtC+bdq9Wsy+f9O/Z+W+SNPAb9HAddDAe87AgtTBcNHBfNbDctPDftfEc9TFf9XGgN7FdeLGadPHjuDGduPHatjIgtrJfeLIeNrKhdjKi93Lf+TKeujLbtvMjdnMk+XLe9/NgdXNn93NiOnMb9zNjubMfNbOoOjNfd3Rl+rQf+DSkuzRet3SnuvRgNzTpe7Se+nSjuTUju/TfOrTj97VqPDUfeXWlubXl+LYpOParOjboeTbrencourdo+TdteXetuzfpejfsefhuOzhrfDgs/DiqPXhqOXjx+rjuvbiqevkvOzjyOrlw/Hmse/muO7lyvLnsvDnue/my/Pos/HouvXnwPTpte7qx/bqtvPpzvTrvPDq1e7q2/Tq0Pfry/Ls1/Xs0fHt3vnuzfXu2fbv2vfw2/jx3Pnz3fr03/b17Pn15vf27fv36Pj47vz46f366vv68fz78vv9+v7//P///////////////////////////////////////////////////////////////////////////////////////////////////////////////yH5BAEKAP8ALAAAAAAZABkAAAj+AP8JHEgQGbFhwZARXMhQIDBl0rB5E+fNmjNftRou7AXMmzVaowipCTSKljVus2Bp/FfLWThQXNCwefOGTRo0XEKBK6aqISxs0OKAQfNmUq5ctial+YLFTbJqpxa2KpasyZQvaeiIGsf10xs0VqAUSaYrFEFW4MY0wfKFDZ1SXMd9eoPGipQiW8BpGmhKG6UgSqZ8SUNHVNxObNBYkTKERyNrigSeolYjCBIpVtCw2RT3EhorWJQEqUGDmiSBsVbV4DFkCRYraC7FvWQFi5QiPWrQSIXqH6RjhWjU6FFECpYuj+IuwiKlSI8aNFTw4VXHkDUqLWjU6EFEiZNDcQ/+KSHSowaNFiqSUJvTJ5wLFS1o1OARZMiguICC8KhBo4UKFCmAE8Ye1RyBggot0FBDDTz0EdceNdBAQwsqoBCCD9OEMYcueoRAAgoqtCBhHXHVQUMLKqBAQggY3PEKFf9g4gkGHYSAAgoqqABHXG2ogAIJIXSgwQWeICIQHM9cgMEGHYQQAglJOCKlEU52gMEFDizwDBUCXfEMHgtcYAEGG3Rg5pkbYCCBAwsgIEcyOgx0xTYnLLCAAw9IYIMgfNowgZ0IHCDCNjsQBEQiuxxwAAIILBBFXEwwakABBOzChwsL4SDLLh8QUIABQkTzTDRCFECAABzc4ooKDcXAxzY/ZwQggAIU1KpAAACckY0dJKy0wgzCMGOJFyMMUEIWkSzziwohrDQQCS6swYkw3QjDiRkrZOBsQ2Y2sEEFzgYEADs=]]></data>
	</file>
	<file>
	  <filename>/images/xml.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhGAAYAIABAP+iAP///yH5BAEKAAEALAAAAAAYABgAAAJQjI+py+0Po5wR2ICz3twCDoJeGFqZFwBk5gFZ64Vw5mGwBgOal+VYy/FsWphcxrOBaXIBTwYWagU8mNYKAwh4NIDrxuMNecIhD/mMTqvXqwIAOw==]]></data>
	</file>
	<file>
	  <filename>/include/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/include/changelog.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgo8bGk+VmVyc2lvbiAwLjEgLSAzMSBNYXJjaCAyMDE0IEluaXRpYWwgUmVsZWFzZS48L2xpPgo8bGk+VmVyc2lvbiAwLjIuMSAtIDE1IEFwcmlsIDIwMTUKIDx1bD4KICA8bGk+VmFyaW91cyBVSSByZWZpbmVtZW50czwvbGk+CiAgPGxpPkV4dHJhIGJyYWNrZXQtY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzPC9saT4KICA8bGk+UGxhbiB2aWV3IGZvciByb3VuZC1yb2JpbiBicmFja2V0czwvbGk+CiAgPGxpPkdyb3VwaW5nIG9mIGJyYWNrZXRzIGZvciBjb250ZW1wb3JhcnkgcmVzb3VyY2UscGxheWVyIG1hbmFnZW1lbnQ8L2xpPgogIDxsaT5Xb3JrIHdpdGggU01TRyBtb2R1bGUgaWYgYXZhaWxhYmxlLCBmb3Igbm90aWZpY2F0aW9uIGJ5IFNNUzwvbGk+CiAgPGxpPldvcmsgd2l0aCBGcm9udEVuZFVzZXJzIG1vZHVsZSBpZiBhdmFpbGFibGUsIGZvciB1bm1lZGlhdGVkIHJlY29yZGluZyBvZiBtYXRjaCByZXN1bHRzPC9saT4KICA8bGk+QXV0by1zY2hlZHVsaW5nIG9mIG1hdGNoZXMgc3RpbGwgVE9ETzwvbGk+CiA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAwLjIuMiAtIDIwIEFwcmlsIDIwMTUKIDx1bD4KICA8bGk+U3VwcG9ydCBDTVNNUyAxLjEyKzwvbGk+CiA8L3VsPgo8L2xpPgo8L3VsPgo=]]></data>
	</file>
	<file>
	  <filename>/include/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/include/jquery.metadata.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCQpeyQuZXh0ZW5kKHttZXRhZGF0YTp7ZGVmYXVsdHM6e3R5cGU6ImNsYXNzIixuYW1lOiJtZXRhZGF0YSIsY3JlOi8oey4qfSkvLHNpbmdsZToibWV0YWRhdGEifSxzZXRUeXBlOmZ1bmN0aW9uKHR5cGUsbmFtZSl7dGhpcy5kZWZhdWx0cy50eXBlPXR5cGU7dGhpcy5kZWZhdWx0cy5uYW1lPW5hbWV9LGdldDpmdW5jdGlvbihlbGVtLG9wdHMpe3ZhciBzZXR0aW5ncz0kLmV4dGVuZCh7fSx0aGlzLmRlZmF1bHRzLG9wdHMpO2lmKCFzZXR0aW5ncy5zaW5nbGUubGVuZ3RoKXtzZXR0aW5ncy5zaW5nbGU9Im1ldGFkYXRhIn12YXIgZGF0YT0kLmRhdGEoZWxlbSxzZXR0aW5ncy5zaW5nbGUpO2lmKGRhdGEpe3JldHVybiBkYXRhfWRhdGE9Int9IjtpZihzZXR0aW5ncy50eXBlPT0iY2xhc3MiKXt2YXIgbT1zZXR0aW5ncy5jcmUuZXhlYyhlbGVtLmNsYXNzTmFtZSk7aWYobSl7ZGF0YT1tWzFdfX1lbHNle2lmKHNldHRpbmdzLnR5cGU9PSJlbGVtIil7aWYoIWVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUpe3JldHVybiB1bmRlZmluZWR9dmFyIGU9ZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZShzZXR0aW5ncy5uYW1lKTtpZihlLmxlbmd0aCl7ZGF0YT0kLnRyaW0oZVswXS5pbm5lckhUTUwpfX1lbHNle2lmKGVsZW0uZ2V0QXR0cmlidXRlIT11bmRlZmluZWQpe3ZhciBhdHRyPWVsZW0uZ2V0QXR0cmlidXRlKHNldHRpbmdzLm5hbWUpO2lmKGF0dHIpe2RhdGE9YXR0cn19fX1pZihkYXRhLmluZGV4T2YoInsiKTwwKXtkYXRhPSJ7IitkYXRhKyJ9In1kYXRhPWV2YWwoIigiK2RhdGErIikiKTskLmRhdGEoZWxlbSxzZXR0aW5ncy5zaW5nbGUsZGF0YSk7cmV0dXJuIGRhdGF9fX0pOyQuZm4ubWV0YWRhdGE9ZnVuY3Rpb24ob3B0cyl7cmV0dXJuICQubWV0YWRhdGEuZ2V0KHRoaXNbMF0sb3B0cyl9fSkoalF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/include/jquery.modalconfirm.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohCk1vZGFsQ29uZmlybSBwb3B1cCBtb2RhbCBjb25maXJtYXRpb24tZGlhbG9nClZlcnNpb24gMS4xCkNvcHlyaWdodCAoQykgMjAxNC0yMDE1IFRvbSBQaGFuZQpMaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHUEwgbGljZW5zZSB2LjMsIG9yIGF0IHRoZSBkaXN0cmlidXRvcidzIGRpc2NyZXRpb24sIGEgbGF0ZXIgdmVyc2lvbgoqLwooZnVuY3Rpb24oYSl7YS5leHRlbmQoe21vZGFsY29uZmlybTpuZXcgZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRzPXtjb25maXJtQnRuSUQ6Im1jX2NvbmYiLGRlbnlCdG5JRDoibWNfZGVueSIsZG9DaGVjazpudWxsLG9uQ2hlY2tGYWlsOm51bGwsb25Db25maXJtOm51bGwsb25EZW55Om51bGwsb3ZlcmxheUlEOiJtY19vdmVybGF5Iixwb3B1cElEOm51bGwscHJlU2hvdzpudWxsfTt0aGlzLmNvbnN0cnVjdD1mdW5jdGlvbihkKXt2YXIgZT1hLmV4dGVuZCh7fSxhLm1vZGFsY29uZmlybS5kZWZhdWx0cyxkfHx7fSk7dGhpcy5lYWNoKGZ1bmN0aW9uKCl7YSh0aGlzKS5iaW5kKCJjbGljay5tY19jb25maXJtIixlLGIpfSk7cmV0dXJuIHRoaXN9O2Z1bmN0aW9uIGIoaSl7dmFyIGY9aS5kYXRhO3ZhciBlPWkudGFyZ2V0O2lmKCFhLmlzRnVuY3Rpb24oZi5kb0NoZWNrKXx8Zi5kb0NoZWNrLmNhbGwoKSl7aS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtpLnByZXZlbnREZWZhdWx0KCk7dmFyIGg9YSgiIyIrZi5vdmVybGF5SUQpO2guY3NzKHtkaXNwbGF5OiJibG9jayJ9KTt2YXIgZD0oZi5wb3B1cElEKT9hKCIjIitmLnBvcHVwSUQpOmguY2hpbGRyZW4oIjpmaXJzdCIpO2QuZmluZCgiIyIrZi5jb25maXJtQnRuSUQpLmNsaWNrKGZ1bmN0aW9uKG8pe28uc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7YyhoLGQpO3ZhciBuO2lmKGEuaXNGdW5jdGlvbihmLm9uQ29uZmlybSkpe249Zi5vbkNvbmZpcm0uY2FsbChlKX1lbHNle249KGYub25Db25maXJtPT09bnVsbHx8Zi5vbkNvbmZpcm0hPT1mYWxzZSl9aWYobil7YShlKS51bmJpbmQoImNsaWNrLm1jX2NvbmZpcm0iKS50cmlnZ2VyKCJjbGljayIpO2EoZSkuYmluZCgiY2xpY2subWNfY29uZmlybSIsZixiKX19KTtkLmZpbmQoIiMiK2YuZGVueUJ0bklEKS5jbGljayhmdW5jdGlvbihuKXtuLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO24ucHJldmVudERlZmF1bHQoKTtjKGgsZCk7YS5pc0Z1bmN0aW9uKGYub25EZW55KSYmZi5vbkRlbnkuY2FsbChlKX0pO2lmKGEuaXNGdW5jdGlvbihmLnByZVNob3cpKXtmLnByZVNob3cuY2FsbChlLGQpfXZhciBnPWQuaGVpZ2h0KCk7dmFyIGs9ZC53aWR0aCgpO3ZhciBtPS1kLm91dGVySGVpZ2h0KCkvMjt2YXIgaj0tZC5vdXRlcldpZHRoKCkvMjtkLmNzcyh7Im1hcmdpbi10b3AiOm0rInB4IiwibWFyZ2luLWxlZnQiOmorInB4IixoZWlnaHQ6ZysicHgiLHdpZHRoOmsrInB4IixkaXNwbGF5OiJibG9jayJ9KX1lbHNle2lmKGYub25DaGVja0ZhaWwpe3ZhciBsO2lmKGEuaXNGdW5jdGlvbihmLm9uQ2hlY2tGYWlsKSl7bD0hZi5vbkNoZWNrRmFpbC5jYWxsKGUpfWVsc2V7aWYoYS5pc0Z1bmN0aW9uKGYub25Db25maXJtKSl7bD0hZi5vbkNvbmZpcm0uY2FsbChlKX1lbHNle2w9KGYub25Db25maXJtPT09ZmFsc2UpfX1pZihsKXtpLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO2kucHJldmVudERlZmF1bHQoKX19ZWxzZXtpZihhLmlzRnVuY3Rpb24oZi5vbkRlbnkpKXtmLm9uRGVueS5jYWxsKGUpfX19fWZ1bmN0aW9uIGMoZSxkKXtkLmNzcyh7ZGlzcGxheToibm9uZSJ9KTtlLmNzcyh7ZGlzcGxheToibm9uZSJ9KX19fSk7YS5mbi5leHRlbmQoe21vZGFsY29uZmlybTphLm1vZGFsY29uZmlybS5jb25zdHJ1Y3R9KX0pKGpRdWVyeSk7]]></data>
	</file>
	<file>
	  <filename>/include/jquery.pikaday.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohClBpa2FkYXkgalF1ZXJ5IHBsdWdpbgpEZXJpdmVkIGZyb20gY29kZSBjb3B5cmlnaHQgwqkgMjAxMyBEYXZpZCBCdXNoZWxsIGh0dHBzOi8vZ2l0aHViLmNvbS9kYnVzaGVsbC9QaWthZGF5CiovCihmdW5jdGlvbihhKXthLmV4dGVuZCh7UGlrYWRheTpuZXcgZnVuY3Rpb24oKXt0aGlzLmNvbnN0cnVjdD1mdW5jdGlvbihiKXt0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz17ZmllbGQ6dGhpc307YS5leHRlbmQoYyxifHx7fSk7dmFyIGQ9bmV3IFBpa2FkYXkoYyl9KTtyZXR1cm4gdGhpc319fSk7YS5mbi5leHRlbmQoe1Bpa2FkYXk6YS5QaWthZGF5LmNvbnN0cnVjdH0pfSkoalF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/include/jquery.SSsort.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohClNTc29ydCB0YWJsZS1zb3J0ZXIgcGx1Zy1pbiBmb3IgSlF1ZXJ5ClZlcnNpb24gMC4yCkNvcHlyaWdodCAoQykgMjAxNC0yMDE1IFRvbSBQaGFuZQpMaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHUEwgdi4zIG9yLCBhdCB0aGUgZGlzdHJpYnV0b3IncyBkaXNjcmV0aW9uLCBhIGxhdGVyIHZlcnNpb24uClNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMjQUdQTC4KKi8KKGZ1bmN0aW9uKGEpe2EuZXh0ZW5kKHtTU3NvcnQ6bmV3IGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShqKXtqLnBhZ2Vjb3VudD0oKGoucm93cy5sZW5ndGgvai5wYWdlc2l6ZSl8MCkrMX1mdW5jdGlvbiBkKGssail7aWYoai5jdXJyZW50aWQpe2EoIiMiK2ouY3VycmVudGlkKS5odG1sKGouY3VycmVudHBhZ2UpfXZhciBtPWsrcGFyc2VJbnQoai5wYWdlc2l6ZSwxMCk7dmFyIG49ai5yb3dzO2Zvcih2YXIgbD0wO2w8bi5sZW5ndGg7bCsrKXtuW2xdLnN0eWxlLmRpc3BsYXk9KGw+PWsmJmw8bSk/IiI6Im5vbmUifX1mdW5jdGlvbiBmKHMpe3ZhciBtPXMud29ya3Nbcy5zb3J0Y29sXTt2YXIgaj1tLnBhcnNlci5mb3JtYXQ7dmFyIHU9cy5yb3dzO3ZhciBxPXUubGVuZ3RoO3ZhciB0PXMuc29ydGNvbDt2YXIgbz1bXTt2YXIgbjtmb3IodmFyIHI9MDtyPHE7cisrKXtuPXVbcl0uY2VsbHNbdF07b1tyXT1baihjKG4pLG4scykscl19dmFyIGs7aWYobS5wYXJzZXIudHlwZT09InRleHQiKXtrPShzLnNvcnRkZXNjKT9mdW5jdGlvbih2LGwpe3JldHVybihsWzBdLmxvY2FsZUNvbXBhcmUodlswXSkpfTpmdW5jdGlvbih2LGwpe3JldHVybih2WzBdLmxvY2FsZUNvbXBhcmUobFswXSkpfX1lbHNle2s9KHMuc29ydGRlc2MpP2Z1bmN0aW9uKHYsbCl7cmV0dXJuKGxbMF0tdlswXSl9OmZ1bmN0aW9uKHYsbCl7cmV0dXJuKHZbMF0tbFswXSl9fW0uX21hcD1vLnNvcnQoayl9ZnVuY3Rpb24gaShxKXt2YXIgbj1xLmRhdGE7aWYobi5yb3dzLmxlbmd0aDwyKXtyZXR1cm59dmFyIGs9dGhpcy5jZWxsSW5kZXg7dmFyIHY9bi5oZWFkZXIuZmluZCgidHI6Zmlyc3QgPiB0aCIpO3ZhciBqPTA7aWYoaz4wKXtmb3IodmFyIG09MDttPGs7bSsrKXt2YXIgdT12W21dO2lmKHUuaGFzQXR0cmlidXRlKCJjb2xzcGFuIikpe3ZhciB0PXUuZ2V0QXR0cmlidXRlKCJjb2xzcGFuIik7ais9cGFyc2VJbnQodCwxMCl8fDF9ZWxzZXtqKyt9fX12YXIgcj1udWxsO2lmKGo9PW4uc29ydGNvbCl7dmFyIG89KG4uc29ydGRlc2MpP24uZGVzY0NsYXNzOm4uYXNjQ2xhc3M7bi5zb3J0ZGVzYz0hbi5zb3J0ZGVzYzt2YXIgcz0obi5zb3J0ZGVzYyk/bi5kZXNjQ2xhc3M6bi5hc2NDbGFzcztpZihvKXt2LmVxKGopLnJlbW92ZUNsYXNzKG8pfWlmKHMpe3YuZXEoaikuYWRkQ2xhc3Mocyl9YShuLnRhYmxlKS50cmlnZ2VyKCJiZWZvcmV0YWJsZXNvcnQiLHtjb2x1bW46aixkaXJlY3Rpb246bi5zb3J0ZGVzY30pO2lmKG4ud29ya3Nbal0uZGlydHkpe2Yobil9ZWxzZXtuLndvcmtzW2pdLl9tYXAucmV2ZXJzZSgpfX1lbHNle2lmKG4uc29ydGNvbCE9PW51bGwpe3I9bi5zb3J0Y29sO289KG4uc29ydGRlc2MpP24uZGVzY0NsYXNzOm4uYXNjQ2xhc3M7aWYobyl7di5lcShyKS5yZW1vdmVDbGFzcyhvKX1pZihuLnNvcnRDbGFzcyl7di5lcShyKS5hZGRDbGFzcyhuLnNvcnRDbGFzcyl9aWYobi5hc2NDbGFzcyl7di5lcShqKS5hZGRDbGFzcyhuLmFzY0NsYXNzKX1uLnNvcnRkZXNjPWZhbHNlfWVsc2V7aWYobi5zb3J0Q2xhc3Mpe3YuZXEoaikucmVtb3ZlQ2xhc3Mobi5zb3J0Q2xhc3MpfXM9KG4uc29ydGRlc2MpP24uZGVzY0NsYXNzOm4uYXNjQ2xhc3M7aWYocyl7di5lcShqKS5hZGRDbGFzcyhzKX19bi5zb3J0Y29sPWo7YShuLnRhYmxlKS50cmlnZ2VyKCJiZWZvcmV0YWJsZXNvcnQiLHtjb2x1bW46aixkaXJlY3Rpb246bi5zb3J0ZGVzY30pO2Yobil9c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBDPShuLm9kZENsYXNzKT9uZXcgUmVnRXhwKCIoXnxcXHMrKSIrbi5vZGRDbGFzcysiKD8hXFxTKSIpOmZhbHNlO3ZhciBHPShuLmV2ZW5DbGFzcyk/bmV3IFJlZ0V4cCgiKF58XFxzKykiK24uZXZlbkNsYXNzKyIoPyFcXFMpIik6ZmFsc2U7dmFyIEY9KG4ub2RkQ2xhc3MpP25ldyBSZWdFeHAoIihefFxccyspIituLm9kZHNvcnRDbGFzcysiKD8hXFxTKSIpOmZhbHNlO3ZhciB3PShuLmV2ZW5DbGFzcyk/bmV3IFJlZ0V4cCgiKF58XFxzKykiK24uZXZlbnNvcnRDbGFzcysiKD8hXFxTKSIpOmZhbHNlO3ZhciBEPW4uYm9keVswXTt2YXIgSD1ELnBhcmVudE5vZGU7dmFyIEs9RC5uZXh0U2libGluZzt2YXIgSj1uLnJvd3M7dmFyIHk9Si5sZW5ndGg7dmFyIHg9bi53b3Jrc1tqXS5fbWFwO3ZhciBJLEUsQSx6O0gucmVtb3ZlQ2hpbGQoRCk7Zm9yKHZhciBCPTA7Qjx5O0IrKyl7QT14W0JdWzFdO0k9SltBXTt1PUkuY2VsbHNbal07RC5hcHBlbmRDaGlsZChJKTtpZihCJTIpe2lmKEMpe0kuY2xhc3NOYW1lPUkuY2xhc3NOYW1lLnJlcGxhY2UoQywiIil9aWYoRyYmIUkuY2xhc3NOYW1lLm1hdGNoKEcpKXtJLmNsYXNzTmFtZT1JLmNsYXNzTmFtZSsiICIrbi5ldmVuQ2xhc3N9aWYoRil7dS5jbGFzc05hbWU9dS5jbGFzc05hbWUucmVwbGFjZShGLCIiKX1pZih3JiYhdS5jbGFzc05hbWUubWF0Y2godykpe3UuY2xhc3NOYW1lPXUuY2xhc3NOYW1lKyIgIituLmV2ZW5zb3J0Q2xhc3N9fWVsc2V7aWYoRyl7SS5jbGFzc05hbWU9SS5jbGFzc05hbWUucmVwbGFjZShHLCIiKX1pZihDJiYhSS5jbGFzc05hbWUubWF0Y2goQykpe0kuY2xhc3NOYW1lPUkuY2xhc3NOYW1lKyIgIituLm9kZENsYXNzfWlmKHcpe3UuY2xhc3NOYW1lPXUuY2xhc3NOYW1lLnJlcGxhY2UodywiIil9aWYoRiYmIXUuY2xhc3NOYW1lLm1hdGNoKEYpKXt1LmNsYXNzTmFtZT11LmNsYXNzTmFtZSsiICIrbi5vZGRzb3J0Q2xhc3N9fWlmKHIhPT1udWxsKXtFPUkuY2VsbHNbcl07aWYoRil7RS5jbGFzc05hbWU9RS5jbGFzc05hbWUucmVwbGFjZShGLCIiKX1pZih3KXtFLmNsYXNzTmFtZT1FLmNsYXNzTmFtZS5yZXBsYWNlKHcsIiIpfX14W0JdWzFdPUI7Zm9yKHo9QisxO3o8eTt6Kyspe2lmKHhbel1bMV0+QSl7eFt6XVsxXS0tfX19SC5pbnNlcnRCZWZvcmUoRCxLKTtuLmJvZHk9YShuLnRhYmxlKS5jaGlsZHJlbigidGJvZHkiKTtuLnJvd3M9RC5yb3dzO24ud29ya3Nbal0uZGlydHk9KHR5cGVvZihuLndvcmtzW2pdLnBhcnNlci53YXRjaCkhPT0idW5kZWZpbmVkIiYmbi53b3Jrc1tqXS5wYXJzZXIud2F0Y2gpO2lmKG4ucGFnaW5hdGUpe24uY3VycmVudHBhZ2U9MTtlKG4pO2QoMCxuKTtpZihuLmNvdW50aWQpe2EoIiMiK24uY291bnRpZCkuaHRtbChuLnBhZ2Vjb3VudCl9fWEobi50YWJsZSkudHJpZ2dlcigiYWZ0ZXJ0YWJsZXNvcnQiLHtjb2x1bW46aixkaXJlY3Rpb246bi5zb3J0ZGVzY30pO2EuaXNGdW5jdGlvbihuLm9uU29ydGVkKSYmbi5vblNvcnRlZC5jYWxsKG4udGFibGUpfSwyMCl9ZnVuY3Rpb24gYyhrKXt3aGlsZShrLmhhc0NoaWxkTm9kZXMoKSl7az1rLmZpcnN0Q2hpbGR9dmFyIGo9ay5ub2RlVmFsdWU7cmV0dXJuKGopP2o6ZmFsc2V9ZnVuY3Rpb24gYih0LG4pe3ZhciByPWZhbHNlLGosdj1uLnJvd3MscT0wLHU7d2hpbGUocj09PWZhbHNlKXt1PXZbcV07aWYodSl7aj11LmNlbGxzW3RdO3I9YS50cmltKGMoaikpfWVsc2V7YnJlYWt9cSsrfXZhciBzPWEuU1Nzb3J0LnBhcnNlcnM7aWYociE9PWZhbHNlKXt2YXIgbz1hLlNTc29ydC5pcGNvdW50LGs9cy5sZW5ndGg7Zm9yKHZhciBtPW87bTxrO20rKyl7aWYoc1ttXS5pcyhyLGosbikpe3JldHVybiBzW21dfX1mb3IobT0xO208bzttKyspe2lmKHNbbV0uaXMocixqLG4pKXtyZXR1cm4gc1ttXX19fXJldHVybiBzWzBdfWZ1bmN0aW9uIGgobSl7dmFyIG89YS5TU3NvcnQucGFyc2VycyxxPWEuU1Nzb3J0LmlwY291bnQsaj1vLmxlbmd0aCxrPW0udG9Mb3dlckNhc2UoKTtmb3IodmFyIG49cTtuPGo7bisrKXtpZihvW25dLmlkLnRvTG93ZXJDYXNlKCk9PWspe3JldHVybiBvW25dfX1mb3Iobj0wO248cTtuKyspe2lmKG9bbl0uaWQudG9Mb3dlckNhc2UoKT09ayl7cmV0dXJuIG9bbl19fXJldHVybiBmYWxzZX1mdW5jdGlvbiBnKG0sail7dmFyIG49ZmFsc2U7aWYoYS5tZXRhZGF0YSl7dmFyIGw9YShtKS5tZXRhZGF0YSgpLnNzcztpZihsPT09ZmFsc2Upe3JldHVybiBmYWxzZX1lbHNle2lmKGwpe249aChsKX19fWlmKCFuKXt2YXIgaz1tLmNlbGxJbmRleDtuPWIoayxqKX1yZXR1cm4gbn10aGlzLmRlZmF1bHRzPXtzb3J0Q2xhc3M6bnVsbCxhc2NDbGFzczpudWxsLGRlc2NDbGFzczpudWxsLGV2ZW5DbGFzczpudWxsLG9kZENsYXNzOm51bGwsZXZlbnNvcnRDbGFzczpudWxsLG9kZHNvcnRDbGFzczpudWxsLGZpcnN0c29ydDpudWxsLHNvcnRkZXNjOmZhbHNlLHBhZ2luYXRlOmZhbHNlLHBhZ2VzaXplOjIwLGN1cnJlbnRpZDpudWxsLGNvdW50aWQ6bnVsbCxvblNvcnRlZDpudWxsfTt0aGlzLnBhcnNlcnM9W3tpZDoidGV4dCIsaXM6ZnVuY3Rpb24oail7cmV0dXJuIHRydWV9LGZvcm1hdDpmdW5jdGlvbihqKXtyZXR1cm4gYS50cmltKGopfSx0eXBlOiJ0ZXh0In0se2lkOiJudW1iZXIiLGlzOmZ1bmN0aW9uKGope3JldHVybighaXNOYU4ocGFyc2VGbG9hdChqKSkmJmlzRmluaXRlKGopKX0sZm9ybWF0OmZ1bmN0aW9uKGope2lmKGope3ZhciBrPU51bWJlcihqKTtyZXR1cm4oaXNOYU4oaykpP051bWJlci5ORUdBVElWRV9JTkZJTklUWTprfWVsc2V7aWYoKGorIiIpLmxlbmd0aD4wKXtyZXR1cm4gMH1lbHNle3JldHVybiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9fX0sdHlwZToibnVtZXJpYyJ9LHtpZDoiaXNvRGF0ZSIsaXM6ZnVuY3Rpb24oail7cD0vXlsxMl1cZHszfVtcLy1dWzAxXVxkW1wvLV1cWzAtM11cZCQvO3JldHVybiBwLnRlc3Qoail9LGZvcm1hdDpmdW5jdGlvbihqKXtyZXR1cm4gRGF0ZS5wYXJzZShqLnJlcGxhY2UoLy0vZywiLyIpKX0sdHlwZToibnVtZXJpYyJ9XTt0aGlzLmlwY291bnQ9dGhpcy5wYXJzZXJzLmxlbmd0aDt0aGlzLmNvbnN0cnVjdD1mdW5jdGlvbihqKXt2YXIgaz17dGFibGU6bnVsbCxoZWFkZXI6bnVsbCxib2R5Om51bGwscm93czpudWxsLHNvcnRjb2w6bnVsbCxzb3J0ZGF0YTpbXSxjdXJyZW50cGFnZToxLHBhZ2Vjb3VudDoxLHdvcmtzOltdfTt0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbT17fTthLmV4dGVuZChtLGssYS5TU3NvcnQuZGVmYXVsdHMsanx8e30pO2EuZGF0YSh0aGlzLCJTU3NvcnRjZmciLG0pO20udGFibGU9dGhpczt2YXIgcT1hKHRoaXMpO20uaGVhZGVyPXEuY2hpbGRyZW4oInRoZWFkIik7bS5ib2R5PXEuY2hpbGRyZW4oInRib2R5Iik7bS5yb3dzPW0uYm9keVswXS5yb3dzO3ZhciBsPW0uaGVhZGVyLmZpbmQoInRyOmZpcnN0ID4gdGgiKTt2YXIgbz1hLmZuLmpxdWVyeTt2YXIgbj0wO2wuZWFjaChmdW5jdGlvbigpe3ZhciByPWEodGhpcyk7aWYoIXIuaGFzQ2xhc3MoIm5vc29ydCIpKXt2YXIgcz1nKHRoaXMsbSk7aWYocyl7bS53b3Jrc1tuXT17cGFyc2VyOnMsZGlydHk6dHJ1ZSxfbWFwOltdfTtpZihtLnJvd3MubGVuZ3RoPjEmJm0uc29ydENsYXNzKXtyLmFkZENsYXNzKG0uc29ydENsYXNzKX1pZihvPj0iMS43Iil7ci5vbigiY2xpY2suc3NzIixtLGkpfWVsc2V7ci5iaW5kKCJjbGljay5zc3MiLG0saSl9fX1uKyt9KTtpZihtLmZpcnN0c29ydCE9PW51bGwpeyRjZWxsPWwuZXEobS5maXJzdHNvcnQtMSk7aWYoISRjZWxsLmhhc0NsYXNzKCJub3NvcnQiKSl7JGNlbGwudHJpZ2dlcigiY2xpY2siKX1lbHNle20uZmlyc3Rzb3J0PW51bGx9fWlmKG0uZmlyc3Rzb3J0PT09bnVsbCYmbS5wYWdpbmF0ZSl7ZShtKTtkKDAsbSk7aWYobS5jb3VudGlkKXthKCIjIittLmNvdW50aWQpLmh0bWwobS5wYWdlY291bnQpfX19KTtyZXR1cm4gdGhpc307dGhpcy5tb3ZlUGFnZT1mdW5jdGlvbihsLG4sayl7dmFyIGo9YS5kYXRhKGwsIlNTc29ydGNmZyIpO2lmKGope3ZhciBtPShuKT8oKGspP2oucGFnZWNvdW50OmouY3VycmVudHBhZ2UrMSk6KChrKT8xOmouY3VycmVudHBhZ2UtMSk7aWYobT4wJiZtPD1qLnBhZ2Vjb3VudCl7ai5jdXJyZW50cGFnZT1tO2QoKG0tMSkqai5wYWdlc2l6ZSxqKX19fTt0aGlzLm1hcFRhYmxlPWZ1bmN0aW9uKGwpe3ZhciBqPXt9O3ZhciBrPTE7YShsKS5maW5kKCJ0ciIpLmVhY2goZnVuY3Rpb24oKXt2YXIgbT10aGlzLmdldEF0dHJpYnV0ZSgiaWQiKXx8dGhpcy5nZXRBdHRyaWJ1dGUoIm5hbWUiKXx8InJvdyIrazt2YXIgbz17fTt2YXIgbj0xO2EodGhpcykuZWFjaChmdW5jdGlvbigpe3ZhciByPVtdO2EodGhpcykuY2hpbGRyZW4oKS5lYWNoKGZ1bmN0aW9uKCl7cltyLmxlbmd0aF09KHRoaXMuaGFzQXR0cmlidXRlKCJ2YWx1ZSIpKT90aGlzLmdldEF0dHJpYnV0ZSgidmFsdWUiKTphKHRoaXMpLnRleHQoKX0pO3ZhciB0PXRoaXMuYXRnZXRBdHRyaWJ1dGUoImlkIil8fHRoaXMuZ2V0QXR0cmlidXRlKCJuYW1lIil8fCJjb2wiK247c3dpdGNoKHIubGVuZ3RoKXtjYXNlIDA6b1t0XT0iPGVtcHR5PiI7YnJlYWs7Y2FzZSAxOm9bdF09clswXTticmVhaztkZWZhdWx0OnZhciBzPXt9O2Zvcih2YXIgcT0wO3E8ci5sZW5ndGg7KytxKXtzW3FdPXJbcV19b1t0XT1zO2JyZWFrfW4rK30pO2pbbV09bztrKyt9KTtyZXR1cm4gan07dGhpcy5hZGRQYXJzZXI9ZnVuY3Rpb24ocSxvKXt2YXIgbj1xLmlkLnRvTG93ZXJDYXNlKCk7dmFyIG09YS5TU3NvcnQucGFyc2Vyczt2YXIgaj1tLmxlbmd0aDtmb3IodmFyIGs9MDtrPGo7aysrKXtpZihtW2tdLmlkLnRvTG93ZXJDYXNlKCk9PW4pe2lmKG8pe21ba109cX1yZXR1cm59fW1bal09cX07dGhpcy5mb3JtYXRGbG9hdD1mdW5jdGlvbihqKXt2YXIgaz1wYXJzZUZsb2F0KGopO3JldHVybihpc05hTihrKSk/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZOmt9O3RoaXMuZm9ybWF0SW50PWZ1bmN0aW9uKGope3ZhciBrPXBhcnNlSW50KGosMTApO3JldHVybihpc05hTihrKSk/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZOmt9fX0pO2EuZm4uZXh0ZW5kKHtTU3NvcnQ6YS5TU3NvcnQuY29uc3RydWN0fSl9KShqUXVlcnkpOw==]]></data>
	</file>
	<file>
	  <filename>/include/jquery.tablednd.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohClRhYmxlRG5EIHBsdWctaW4gZm9yIEpRdWVyeQpWZXJzaW9uIDAuOApDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBUb20gUGhhbmUKTGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR1BMIHYuMyBvciwgYXQgdGhlIGRpc3RyaWJ1dG9yJ3MgZGlzY3JldGlvbiwgYSBsYXRlciB2ZXJzaW9uLgpTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzI0FHUEwuCiovCihmdW5jdGlvbihhKXthLmV4dGVuZCh7dGFibGVEbkQ6bmV3IGZ1bmN0aW9uKCl7dmFyIG89YS5mbi5qcXVlcnk7dGhpcy5kZWZhdWx0cz17YnV0dG9uU3RhdGU6IiIsY29udGFpbmVySUQ6bnVsbCxkcmFnQ2xhc3M6InREbkRfd2hpbGVEcmFnIixkcmFnSGFuZGxlOm51bGwsZHJhZ1N0eWxlczp7Y29sb3I6InB1cnBsZSIsImZvbnQtc3R5bGUiOiJpdGFsaWMifSxkcm9wU3R5bGVzOm51bGwsb25BbGxvd0Ryb3A6bnVsbCxvbkRyYWdTdGFydDpudWxsLG9uRHJvcDpudWxsLG9uUm93c0NoYW5nZWQ6bnVsbCxmaWx0ZXJSZWdleHA6bnVsbH07dGhpcy5jb25zdHJ1Y3Q9ZnVuY3Rpb24odCl7dmFyIHU9e2N1cnJlbnRUYWJsZTpudWxsLGRyYWdCb2R5Om51bGwsZHJhZ09iamVjdDpudWxsLGJvdW5kOmZhbHNlLHByZXBhcmU6ZmFsc2UsZHJhZ2dpbmc6ZmFsc2UscHRyT2Zmc2V0Om51bGwsZmlyc3RZOjAsb2xkWTowLHVwaWQ6MCxkbmlkOjAsanFnZTE0OmZhbHNlLGpxZ2UxNzpmYWxzZX07dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHg9dGhpcy50Qm9kaWVzO2lmKCF4KXtyZXR1cm59dmFyIEE9MDtmb3IodmFyIHk9MDt5PHgubGVuZ3RoO3krKyl7QSs9eFt5XS5yb3dzLmxlbmd0aDtpZihBPjEpe2JyZWFrfX1pZihBPDIpe3JldHVybn12YXIgdz17fTthLmV4dGVuZCh3LHUsYS50YWJsZURuRC5kZWZhdWx0cyx0fHx7fSk7dy5jdXJyZW50VGFibGU9dGhpczthLmRhdGEodGhpcywidERuRGNvbmZpZyIsdyk7dmFyIHY7aWYody5jb250YWluZXJJRCl7dj1hKCIjIit3LmNvbnRhaW5lcklEKTtpZih2Lmxlbmd0aD4wKXt2YXIgej12LmNzcygib3ZlcmZsb3ciKTtpZighKHo9PSJhdXRvInx8ej09InNjcm9sbCIpKXt3LmNvbnRhaW5lcklEPW51bGx9fX1pZighdy5jb250YWluZXJJRCl7dj1hKHRoaXMpLnBhcmVudCgpO3o9di5jc3MoIm92ZXJmbG93Iik7aWYoKHo9PSJhdXRvInx8ej09InNjcm9sbCIpKXt3LmNvbnRhaW5lcklEPXYuYXR0cigiaWQiKTtpZighdy5jb250YWluZXJJRCl7dy5jb250YWluZXJJRD0idERuRGNvbnRhaW5lcklEIjt2LmF0dHIoImlkIix3LmNvbnRhaW5lcklEKX19fXcuanFnZTE0PShvPj0iMS40Iik7dy5qcWdlMTc9KG8+PSIxLjciKTtpZih3LmpxZ2UxNyl7YSh0aGlzKS5vbigibW91c2VvdmVyLnRkbmQiLCJ0Ym9keSIsdyxuKS5vbigibW91c2VvdXQudGRuZCIsInRib2R5Iix3LGgpfWVsc2V7Zm9yKHk9MDt5PHgubGVuZ3RoO3krKyl7YSh4W3ldKS5iaW5kKCJtb3VzZW92ZXIudGRuZCIsdyxuKS5iaW5kKCJtb3VzZW91dC50ZG5kIix3LGgpfX19KTtyZXR1cm4gdGhpc307dGhpcy5tYXBUYWJsZXM9ZnVuY3Rpb24oKXt2YXIgdD0iIjt0aGlzLmVhY2goZnVuY3Rpb24oKXt0Kz1zKHRoaXMpfSk7cmV0dXJuIHR9O2Z1bmN0aW9uIHModyl7dmFyIHU9YS5kYXRhKHcsInREbkRjb25maWciKTt2YXIgdD17fTt2YXIgdj0xO2EodykuZmluZCgidHIiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHg9dGhpcy5nZXRBdHRyaWJ1dGUoImlkIil8fHRoaXMuZ2V0QXR0cmlidXRlKCJuYW1lIil8fCJyb3ciK3Y7aWYoIXV8fCF1LmZpbHRlclJlZ2V4cHx8eC5tYXRjaCh1LmZpbHRlclJlZ2V4cCkhPT1udWxsKXt2YXIgej17fTt2YXIgeT0xO2EodGhpcykuZWFjaChmdW5jdGlvbigpe3ZhciBCPVtdO2EodGhpcykuY2hpbGRyZW4oKS5lYWNoKGZ1bmN0aW9uKCl7QltCLmxlbmd0aF09KHRoaXMuaGFzQXR0cmlidXRlKCJ2YWx1ZSIpKT90aGlzLmdldEF0dHJpYnV0ZSgidmFsdWUiKTphKHRoaXMpLnRleHQoKX0pO3ZhciBEPXRoaXMuYXRnZXRBdHRyaWJ1dGUoImlkIil8fHRoaXMuZ2V0QXR0cmlidXRlKCJuYW1lIil8fCJjb2wiK3k7c3dpdGNoKEIubGVuZ3RoKXtjYXNlIDA6eltEXT0iPGVtcHR5PiI7YnJlYWs7Y2FzZSAxOnpbRF09QlswXTticmVhaztkZWZhdWx0OnZhciBDPXt9O2Zvcih2YXIgQT0wO0E8Qi5sZW5ndGg7KytBKXtDW0FdPUJbQV19eltEXT1DO2JyZWFrfXkrK30pO3RbeF09en12Kyt9KTtyZXR1cm4gdH1mdW5jdGlvbiBlKHQpe2lmKHQucGFnZVh8fHQucGFnZVkpe3JldHVybnt4OnQucGFnZVgseTp0LnBhZ2VZfX12YXIgdT0oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCE9PW51bGwpP2RvY3VtZW50LmRvY3VtZW50RWxlbWVudDpkb2N1bWVudC5ib2R5O3JldHVybnt4OnQuY2xpZW50WCt1LnNjcm9sbExlZnQseTp0LmNsaWVudFkrdS5zY3JvbGxUb3B9fWZ1bmN0aW9uIGsodyx2KXt2PXZ8fHdpbmRvdy5ldmVudDt2YXIgdT1yKHcpO3ZhciB0PWUodik7cmV0dXJue3g6dC54LXUueCx5OnQueS11Lnl9fWZ1bmN0aW9uIHIodil7dmFyIHU9MDt2YXIgdD0wO2lmKHYub2Zmc2V0SGVpZ2h0PT09MCl7aWYodi5maXJzdENoaWxkKXt2PXYuZmlyc3RDaGlsZH19d2hpbGUodi5vZmZzZXRQYXJlbnQpe3UrPXYub2Zmc2V0TGVmdDt0Kz12Lm9mZnNldFRvcDt2PXYub2Zmc2V0UGFyZW50fXUrPXYub2Zmc2V0TGVmdDt0Kz12Lm9mZnNldFRvcDtyZXR1cm57eDp1LHk6dH19ZnVuY3Rpb24gaigpe3ZhciB1PTA7aWYod2luZG93LnBhZ2VZT2Zmc2V0KXt1PXdpbmRvdy5wYWdlWU9mZnNldH1lbHNle2lmKHdpbmRvdy5zY3JvbGxZKXt1PXdpbmRvdy5zY3JvbGxZfWVsc2V7dmFyIHY7dT0oKCh2PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCl8fCh2PWRvY3VtZW50LmJvZHkucGFyZW50Tm9kZSkpJiZ0eXBlb2Ygdi5TY3JvbGxUb3A9PSJudW1iZXIiKT92LlNjcm9sbFRvcDpkb2N1bWVudC5ib2R5LlNjcm9sbFRvcH19cmV0dXJuIHV9ZnVuY3Rpb24gZCgpe2lmKHdpbmRvdy5pbm5lckhlaWdodCYmd2luZG93LnNjcm9sbE1heFkpe3JldHVybiB3aW5kb3cuc2Nyb2xsTWF4WX12YXIgdD0od2luZG93LmlubmVySGVpZ2h0KT93aW5kb3cuaW5uZXJIZWlnaHQ6ZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQ7aWYoZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQ+ZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQpe3JldHVybiBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodC10fWVsc2V7cmV0dXJuIGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0LXR9fWZ1bmN0aW9uIGcodix6LHksdSl7dmFyIHg7dmFyIEE7aWYoeil7dmFyIEI9aigpO2lmKHkpe2lmKEI+MCl7eD0tMX1lbHNle3UudXBpZD0wO3JldHVybn19ZWxzZXtBPWQoKTtpZihCPEEpe3g9MX1lbHNle3UuZG5pZD0wO3JldHVybn19d2luZG93LnNjcm9sbEJ5KDAseCl9ZWxzZXt4PWEodikuc2Nyb2xsVG9wKCk7aWYoeSl7aWYoeD4wKXt4LT0xfWVsc2V7dS51cGlkPTA7cmV0dXJufX1lbHNle0E9di5zY3JvbGxIZWlnaHQtdi5jbGllbnRIZWlnaHQ7aWYoeDxBKXt4Kz0xfWVsc2V7dS5kbmlkPTA7cmV0dXJufX12LnNjcm9sbFRvcCh4KX12YXIgdz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Zyh2LHoseSx1KX0sMjApO2lmKHkpe3UudXBpZD13fWVsc2V7dS5kbmlkPXd9fWZ1bmN0aW9uIHAodCl7aWYodC51cGlkKXt3aW5kb3cuY2xlYXJUaW1lb3V0KHQudXBpZCk7dC51cGlkPTB9aWYodC5kbmlkKXt3aW5kb3cuY2xlYXJUaW1lb3V0KHQuZG5pZCk7dC5kbmlkPTB9fWZ1bmN0aW9uIGkodyx1KXtpZih1LmRyb3BTdHlsZXMpe3ZhciB0PXt9O2Zvcih2YXIgdiBpbiB1LmRyb3BTdHlsZXMpe3Rbdl09IiJ9YSh3KS5jc3ModCl9aWYodS5kcmFnQ2xhc3Mpe2EodykuYWRkQ2xhc3ModS5kcmFnQ2xhc3MpfWlmKHUuZHJhZ1N0eWxlcyl7YSh3KS5jc3ModS5kcmFnU3R5bGVzKX19ZnVuY3Rpb24gbCh3LHUpe2lmKHUuZHJhZ1N0eWxlcyl7dmFyIHQ9e307Zm9yKHZhciB2IGluIHUuZHJhZ1N0eWxlcyl7dFt2XT0iIn1hKHcpLmNzcyh0KX1pZih1LmRyYWdDbGFzcyl7YSh3KS5yZW1vdmVDbGFzcyh1LmRyYWdDbGFzcyl9fWZ1bmN0aW9uIGMoeil7dmFyIHU9ei5kYXRhO2lmKHUuYnV0dG9uU3RhdGUpe3ZhciB4O2lmKHoud2hpY2g9PT1udWxsKXt4PSh6LmJ1dHRvbjwyKT8iMCI6KCh6LmJ1dHRvbj09PTQpPyIxIjoiMiIpfWVsc2V7eD0oei53aGljaDwyKT8iMCI6KCh6LndoaWNoPT09Mik/IjEiOiIyIil9aWYodS5idXR0b25TdGF0ZS5pbmRleE9mKHgpPT09LTEpe3JldHVybiBmYWxzZX1pZih1LmJ1dHRvblN0YXRlLmluZGV4T2YoInNoaWZ0IikhPT0tMSYmIXouc2hpZnRLZXkpe3JldHVybiBmYWxzZX1pZih1LmJ1dHRvblN0YXRlLmluZGV4T2YoImN0cmwiKSE9PS0xJiYhei5jdHJsS2V5KXtyZXR1cm4gZmFsc2V9aWYodS5idXR0b25TdGF0ZS5pbmRleE9mKCJhbHQiKSE9PS0xJiYhei5hbHRLZXkpe3JldHVybiBmYWxzZX1pZih1LmJ1dHRvblN0YXRlLmluZGV4T2YoIm1ldGEiKSE9PS0xJiYhei5tZXRhS2V5KXtyZXR1cm4gZmFsc2V9fXZhciB5PXoudGFyZ2V0fHx6LnNyY0VsZW1lbnR8fHoub3JpZ2luYWxUYXJnZXQ7dmFyIHc9eS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3N3aXRjaCh3KXtjYXNlInRkIjpjYXNlInRyIjpicmVhaztjYXNlInRib2R5IjpjYXNlImlucHV0IjpjYXNlInNlbGVjdCI6Y2FzZSJhIjpyZXR1cm4gZmFsc2U7ZGVmYXVsdDp5PWEoeSkuY2xvc2VzdCgidGQiKTtpZih5Lmxlbmd0aD09PTApe3JldHVybiBmYWxzZX13PSJ0ZCI7YnJlYWt9dmFyIEE7dmFyIHQ7aWYodS5kcmFnSGFuZGxlKXt2YXIgdj1hKCJ0ZC4iK3UuZHJhZ0hhbmRsZSx5KTtpZih2Lmxlbmd0aD4wKXtBPXZbMF0ucGFyZW50Tm9kZTtpZighYShBKS5oYXNDbGFzcygibm9kcmFnIikpe3Q9YShBKS5wYXJlbnQoInRib2R5IilbMF07aWYodCE9PXVuZGVmaW5lZCl7cmV0dXJue3RiOnQsb2I6QX19fX19ZWxzZXtpZih3PT0idGQiKXtBPWEoeSkucGFyZW50KCJ0ciIpWzBdO2lmKEE9PT11bmRlZmluZWQpe3JldHVybiBmYWxzZX19ZWxzZXtBPXl9aWYoIWEoQSkuaGFzQ2xhc3MoIm5vZHJhZyIpKXt0PWEoQSkucGFyZW50KCJ0Ym9keSIpWzBdO2lmKHQhPT11bmRlZmluZWQpe3JldHVybnt0Yjp0LG9iOkF9fX19cmV0dXJuIGZhbHNlfWZ1bmN0aW9uIG4odSl7dmFyIHQ9dS5kYXRhO2lmKCF0LmRyYXFnZ2luZyl7aWYodC5qcWdlMTcpe2EodGhpcykub24oIm1vdXNlbW92ZS50ZG5kIix0LGYpfWVsc2V7YSh0aGlzKS5iaW5kKCJtb3VzZW1vdmUudGRuZCIsdCxmKX19cmV0dXJuIHRydWV9ZnVuY3Rpb24gaCh1KXt2YXIgdj1hKHRoaXMpO3ZhciB0PXUuZGF0YTtpZighdC5kcmFnZ2luZyl7dC5jdXJyZW50VGFibGUuc3R5bGUuY3Vyc29yPSJkZWZhdWx0IjtpZih0LmpxZ2UxNyl7di5vZmYoIm1vdXNlbW92ZS50ZG5kIixmKX1lbHNle3YudW5iaW5kKCJtb3VzZW1vdmUudGRuZCIsZil9fWlmKHQuYm91bmQpe2lmKHQuanFnZTE3KXt2Lm9mZigibW91c2Vkb3duLnRkbmQiLG0pLm9mZigiZGJsY2xpY2sudGRuZCIscSl9ZWxzZXt2LnVuYmluZCgibW91c2Vkb3duLnRkbmQiLG0pLnVuYmluZCgiZGJsY2xpY2sudGRuZCIscSl9dC5ib3VuZD1mYWxzZX1yZXR1cm4gdHJ1ZX1mdW5jdGlvbiBmKE4pe3ZhciB6PU4uZGF0YTt2YXIgUD1jKE4pO2lmKCF6LnByZXBhcmUpe2lmKFApe2lmKCF6LmJvdW5kKXt6LmN1cnJlbnRUYWJsZS5zdHlsZS5jdXJzb3I9ImNyb3NzaGFpciI7aWYoei5qcWdlMTcpeyR0aGlzLm9uKCJtb3VzZWRvd24udGRuZCIseixtKS5vbigiZGJsY2xpY2sudGRuZCIseixxKX1lbHNle2lmKHouanFnZTE0KXthKHRoaXMpLmJpbmQoIm1vdXNlZG93bi50ZG5kIix6LG0pLmJpbmQoImRibGNsaWNrLnRkbmQiLHoscSl9ZWxzZXthKHRoaXMpLmJpbmQoIm1vdXNlZG93bi50ZG5kIix6LG0pfX16LmJvdW5kPXRydWV9fWVsc2V7aWYoei5ib3VuZCYmIXouZHJhZ2dpbmcpe3ouY3VycmVudFRhYmxlLnN0eWxlLmN1cnNvcj0iZGVmYXVsdCI7aWYoei5qcWdlMTcpe2EodGhpcykub2ZmKCJtb3VzZWRvd24udGRuZCIsbSkub2ZmKCJkYmxjbGljay50ZG5kIixxKX1lbHNle2EodGhpcykudW5iaW5kKCJtb3VzZWRvd24udGRuZCIsbSkudW5iaW5kKCJkYmxjbGljay50ZG5kIixxKX16LmJvdW5kPWZhbHNlfX1yZXR1cm4gdHJ1ZX12YXIgSz1lKE4pO2lmKE1hdGguYWJzKEsueS16LmZpcnN0WSk8PTMpe3JldHVybiBmYWxzZX1pZighei5kcmFnZ2luZyl7aWYoUCl7aWYoei5kcmFnQm9keSl7aWYoei5kcmFnQm9keSE9UC50Yil7YS5lYWNoKHouZHJhZ09iamVjdCxmdW5jdGlvbigpe2wodGhpcyx6KX0pO3ouZHJhZ09iamVjdD1udWxsO3ouZHJhZ0JvZHk9UC50Yn19ZWxzZXt6LmRyYWdCb2R5PVAudGJ9aWYoei5kcmFnT2JqZWN0KXtpZihhLmluQXJyYXkoUC5vYix6LmRyYWdPYmplY3QpPT09LTEpe3ouZHJhZ09iamVjdFt6LmRyYWdPYmplY3QubGVuZ3RoXT1QLm9iO2koUC5vYix6KX19ZWxzZXt6LmRyYWdPYmplY3Q9W1Aub2JdO2koUC5vYix6KX19aWYoei5kcmFnT2JqZWN0PT09bnVsbCl7YihOKTtyZXR1cm4gdHJ1ZX1hLnVuaXF1ZSh6LmRyYWdPYmplY3QpO3ZhciBKPShQKT9QLm9iOnouZHJhZ09iamVjdFswXTt6LnB0ck9mZnNldD1rKEosTik7ei5kcmFnZ2luZz10cnVlO3oub2xkWT16LmZpcnN0WS16LnB0ck9mZnNldC55O2lmKHoub25EcmFnU3RhcnQpe3oub25EcmFnU3RhcnQodGFibGUsei5kcmFnT2JqZWN0KX16LmN1cnJlbnRUYWJsZS5zdHlsZS5jdXJzb3I9InJvdy1yZXNpemUiO3JldHVybiB0cnVlfXZhciB0O3ZhciB2O3ZhciBGPWZhbHNlO2lmKHouY29udGFpbmVySUQpe3ZhciBHPWEoIiMiK3ouY29udGFpbmVySUQpO3Q9Ry5vZmZzZXQoKS50b3A7aWYoSy55PHQrNSl7aWYoei51cGlkPT09MCl7ZyhHWzBdLGZhbHNlLHRydWUseil9Rj10cnVlfWVsc2V7dj10K0cub3V0ZXJIZWlnaHQodHJ1ZSk7aWYoSy55PnYtNSl7aWYoei5kbmlkPT09MCl7ZyhHWzBdLGZhbHNlLGZhbHNlLHopfUY9dHJ1ZX19fWlmKCFGKXt0PWooKTtpZihLLnk8dCs1KXtpZih6LnVwaWQ9PT0wKXtnKHdpbmRvdyx0cnVlLHRydWUseil9Rj10cnVlfWVsc2V7dj10K2Eod2luZG93KS5oZWlnaHQoKTtpZihLLnk+di01KXtpZih6LmRuaWQ9PT0wKXtnKHdpbmRvdyx0cnVlLGZhbHNlLHopfUY9dHJ1ZX19fWlmKCFGKXtwKHopfXZhciBEPUsueS16LnB0ck9mZnNldC55O2lmKEQhPXoub2xkWSl7dmFyIEg9KEQ8ei5vbGRZKTt2YXIgTT1udWxsO3ZhciBJPWEoIj4gdHIiLHouZHJhZ0JvZHkpO3ZhciBMO2ZvcihMPTA7TDxJLmxlbmd0aDtMKyspe3ZhciBDPUlbTF07dmFyIFE7dmFyIHU7aWYoQy5vZmZzZXRIZWlnaHQ+MCl7UT1yKEMpLnk7dT1wYXJzZUludChDLm9mZnNldEhlaWdodCwxMCkvMn1lbHNle1E9cihDLmZpcnN0Q2hpbGQpLnk7dT1wYXJzZUludChDLmZpcnN0Q2hpbGQub2Zmc2V0SGVpZ2h0LDEwKS8yfWlmKChEPihRLXUpKSYmKEQ8KFErdSkpKXtpZihhLmluQXJyYXkoQyx6LmRyYWdPYmplY3QpPT09LTEpe2lmKHoub25BbGxvd0Ryb3Ape2lmKHoub25BbGxvd0Ryb3Aoei5kcmFnT2JqZWN0LEMpKXtNPUN9fWVsc2V7aWYoIWEoQykuaGFzQ2xhc3MoIm5vZHJvcCIpKXtNPUN9fX1icmVha319aWYoTSl7dmFyIHc9W107YS5lYWNoKEksZnVuY3Rpb24oeSl7aWYoYSh0aGlzKS5oYXNDbGFzcygibm9kcm9wIikmJmEuaW5BcnJheSh0aGlzLHouZHJhZ09iamVjdCk9PS0xKXt3W3cubGVuZ3RoXT1beSx0aGlzXX19KTtpZihIKXthLmVhY2goei5kcmFnT2JqZWN0LGZ1bmN0aW9uKCl7aWYodGhpcyE9TSl7YSh0aGlzKS5pbnNlcnRCZWZvcmUoTSl9ZWxzZXt2YXIgeT1hKHRoaXMpLm5leHQoKTtpZih5Lmxlbmd0aCl7TT15WzBdfX19KX1lbHNle2EuZWFjaCh6LmRyYWdPYmplY3QsZnVuY3Rpb24oKXtpZih0aGlzIT1NKXthKHRoaXMpLmluc2VydEFmdGVyKE0pO009dGhpc31lbHNle3ZhciB5PWEodGhpcykucHJldigpO2lmKHkubGVuZ3RoKXtNPXlbMF19fX0pfXZhciBCPWEoIj4gdHIiLHouZHJhZ0JvZHkpLmVxKDApO2EuZWFjaCh3LGZ1bmN0aW9uKCl7aWYodGhpc1sxXSE9QlswXSl7YSh0aGlzWzFdKS5pbnNlcnRCZWZvcmUoQil9fSk7dmFyIEE9MDtmb3IodmFyIE89MDtPPHcubGVuZ3RoO08rKyl7dmFyIHg9d1tPXVswXTtpZih4PkEpe3ZhciBFPWEoIj4gdHIiLHouZHJhZ0JvZHkpO2EoRVtBXSkuaW5zZXJ0QWZ0ZXIoYShFW3hdKSl9ZWxzZXtBKyt9fWlmKHoub25Sb3dzQ2hhbmdlZCl7ei5vblJvd3NDaGFuZ2VkKHRoaXMsei5kcmFnT2JqZWN0LE0pfX16Lm9sZFk9RH1yZXR1cm4gZmFsc2V9ZnVuY3Rpb24gbSh1KXt2YXIgdD11LmRhdGE7dC5wcmVwYXJlPXRydWU7dC5maXJzdFk9ZSh1KS55O2lmKHQuanFnZTE3KXthKGRvY3VtZW50KS5vbigibW91c2V1cC50ZG5kIix0LGIpfWVsc2V7YShkb2N1bWVudCkuYmluZCgibW91c2V1cC50ZG5kIix0LGIpfXJldHVybiBmYWxzZX1mdW5jdGlvbiBiKHUpe3ZhciB0PXUuZGF0YTtpZih0LmpxZ2UxNyl7YShkb2N1bWVudCkub2ZmKCJtb3VzZXVwLnRkbmQiLGIpfWVsc2V7YShkb2N1bWVudCkudW5iaW5kKCJtb3VzZXVwLnRkbmQiLGIpfXQucHJlcGFyZT1mYWxzZTt0LmZpcnN0WT0wO2lmKHQuZHJhZ2dpbmcpe2lmKHQuZHJhZ09iamVjdCl7cCh0KTt0Lm9sZFk9MDthLmVhY2godC5kcmFnT2JqZWN0LGZ1bmN0aW9uKCl7bCh0aGlzLHQpfSk7aWYodC5kcm9wU3R5bGVzKXthLmVhY2godC5kcmFnT2JqZWN0LGZ1bmN0aW9uKCl7YSh0aGlzKS5jc3ModC5kcm9wU3R5bGVzKX0pfXQuY3VycmVudFRhYmxlLnN0eWxlLmN1cnNvcj0iY3Jvc3NoYWlyIjtpZih0Lm9uRHJvcCl7dC5vbkRyb3AodC5jdXJyZW50VGFibGUsdC5kcmFnT2JqZWN0KX10LmRyYWdPYmplY3Q9bnVsbDt0LmRyYWdCb2R5PW51bGx9dC5kcmFnZ2luZz1mYWxzZTtyZXR1cm4gZmFsc2V9fWZ1bmN0aW9uIHEodil7dmFyIHc9Yyh2KTtpZighdyl7cmV0dXJuIHRydWV9dmFyIHU9di5kYXRhO2lmKHUuZHJhZ0JvZHkpe2lmKHUuZHJhZ0JvZHkhPXcudGIpe2EuZWFjaCh1LmRyYWdPYmplY3QsZnVuY3Rpb24oKXtsKHRoaXMsdSl9KTt1LmRyYWdPYmplY3Q9bnVsbDt1LmRyYWdCb2R5PXcudGJ9fWVsc2V7dS5kcmFnQm9keT13LnRifWlmKHUuZHJhZ09iamVjdCl7dmFyIHQ9YS5pbkFycmF5KHcub2IsdS5kcmFnT2JqZWN0KTtpZih0IT09LTEpe2wodS5kcmFnT2JqZWN0W3RdLHUpO2lmKHUuZHJhZ09iamVjdC5sZW5ndGg9PTEpe3UuZHJhZ09iamVjdD1udWxsfWVsc2V7dS5kcmFnT2JqZWN0LnNwbGljZSh0LDEpfX1lbHNle2lmKCFhKHcub2IpLmhhc0NsYXNzKCJub2RyYWciKSl7dS5kcmFnT2JqZWN0W3UuZHJhZ09iamVjdC5sZW5ndGhdPXcub2I7aSh3Lm9iLHUpfX19ZWxzZXtpZighYSh3Lm9iKS5oYXNDbGFzcygibm9kcmFnIikpe3UuZHJhZ09iamVjdD1bdy5vYl07aSh3Lm9iLHUpfX1yZXR1cm4gZmFsc2V9fX0pO2EuZm4uZXh0ZW5kKHt0YWJsZURuRDphLnRhYmxlRG5ELmNvbnN0cnVjdH0pfSkoalF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/include/jquery.tmtfuncs.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[JChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CiAkKCdwLmhlbHAnKS5oaWRlKCk7CiAkKCdpbWcudGlwcGVyJykuY3NzKHsnZGlzcGxheSc6J2lubGluZScsJ3BhZGRpbmctbGVmdCc6JzEwcHgnfSkuY2xpY2soZnVuY3Rpb24oKXsKICAkKHRoaXMpLnBhcmVudCgpLm5leHQoKS5uZXh0KCkuc2xpZGVUb2dnbGUoKTsKIH0pOwogdmFyIGVsZW0gPSAkKCdwLnBhZ2VpbnB1dDpmaXJzdCcpOwogdmFyIGNvbG9yID0gJChlbGVtKS5jc3MoJ2NvbG9yJyk7CiB2YXIgc2l6ZSA9ICQoZWxlbSkuY3NzKCdmb250LXNpemUnKTsKICQoJy5mYWtlaWNvbicpLmNzcyh7J2NvbG9yJzpjb2xvciwnZm9udC1zaXplJzpzaXplfSk7Cn0pOwo=]]></data>
	</file>
	<file>
	  <filename>/include/moment.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohCm1vbWVudC5qcwp2ZXJzaW9uIDogMi45LjAKYXV0aG9ycyA6IFRpbSBXb29kLCBJc2tyZW4gQ2hlcm5ldiwgTW9tZW50LmpzIGNvbnRyaWJ1dG9ycwpsaWNlbnNlIDogTUlUCm1vbWVudGpzLmNvbQoqLwooZnVuY3Rpb24oSCl7dmFyIFYsYUw9IjIuOS4wIixiYz0odHlwZW9mIGdsb2JhbCE9PSJ1bmRlZmluZWQiJiYodHlwZW9mIHdpbmRvdz09PSJ1bmRlZmluZWQifHx3aW5kb3c9PT1nbG9iYWwud2luZG93KSk/Z2xvYmFsOnRoaXMsYXcsYWQ9TWF0aC5yb3VuZCxhUj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGFsLEI9MCxqPTEsYTQ9MixBPTMsYUk9NCx5PTUsWj02LGF1PXt9LGFYPVtdLGF2PSh0eXBlb2YgbW9kdWxlIT09InVuZGVmaW5lZCImJm1vZHVsZSYmbW9kdWxlLmV4cG9ydHMpLGU9L15cLz9EYXRlXCgoXC0/XGQrKS9pLGJnPS8oXC0pPyg/OihcZCopXC4pPyhcZCspXDooXGQrKSg/Olw6KFxkKylcLj8oXGR7M30pPyk/LyxhTj0vXigtKT9QKD86KD86KFswLTksLl0qKVkpPyg/OihbMC05LC5dKilNKT8oPzooWzAtOSwuXSopRCk/KD86VCg/OihbMC05LC5dKilIKT8oPzooWzAtOSwuXSopTSk/KD86KFswLTksLl0qKVMpPyk/fChbMC05LC5dKilXKSQvLGF6PS8oXFtbXlxbXSpcXSl8KFxcKT8oTW98TU0/TT9NP3xEb3xERERvfEREP0Q/RD98ZGRkP2Q/fGRvP3x3W298d10/fFdbb3xXXT98UXxZWVlZWVl8WVlZWVl8WVlZWXxZWXxnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xtbT98c3M/fFN7MSw0fXx4fFh8eno/fFpaP3wuKS9nLGFrPS8oXFtbXlxbXSpcXSl8KFxcKT8oTFRTfExUfExMP0w/TD98bHsxLDR9KS9nLGs9L1xkXGQ/LyxhbT0vXGR7MSwzfS8sST0vXGR7MSw0fS8sYm09L1srXC1dP1xkezEsNn0vLGJhPS9cZCsvLE49L1swLTldKlsnYS16XHUwMEEwLVx1MDVGRlx1MDcwMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0rfFtcdTA2MDAtXHUwNkZGXC9dKyhccyo/W1x1MDYwMC1cdTA2RkZdKyl7MSwyfS9pLHM9L1p8W1wrXC1dXGRcZDo/XGRcZC9naSxvPS9UL2ksdz0vW1wrXC1dP1xkKy8sYVo9L1tcK1wtXT9cZCsoXC5cZHsxLDN9KT8vLGFqPS9cZC8sdj0vXGRcZC8sYmU9L1xkezN9LyxhWT0vXGR7NH0vLGFxPS9bKy1dP1xkezZ9LyxhZz0vWystXT9cZCsvLGFWPS9eXHMqKD86WystXVxkezZ9fFxkezR9KS0oPzooXGRcZC1cZFxkKXwoV1xkXGQkKXwoV1xkXGQtXGQpfChcZFxkXGQpKSgoVHwgKShcZFxkKDpcZFxkKDpcZFxkKFwuXGQrKT8pPyk/KT8oW1wrXC1dXGRcZCg/Ojo/XGRcZCk/fFxzKlopPyk/JC8sYWE9IllZWVktTU0tRERUSEg6bW06c3NaIixiZD1bWyJZWVlZWVktTU0tREQiLC9bKy1dXGR7Nn0tXGR7Mn0tXGR7Mn0vXSxbIllZWVktTU0tREQiLC9cZHs0fS1cZHsyfS1cZHsyfS9dLFsiR0dHRy1bV11XVy1FIiwvXGR7NH0tV1xkezJ9LVxkL10sWyJHR0dHLVtXXVdXIiwvXGR7NH0tV1xkezJ9L10sWyJZWVlZLURERCIsL1xkezR9LVxkezN9L11dLEw9W1siSEg6bW06c3MuU1NTUyIsLyhUfCApXGRcZDpcZFxkOlxkXGRcLlxkKy9dLFsiSEg6bW06c3MiLC8oVHwgKVxkXGQ6XGRcZDpcZFxkL10sWyJISDptbSIsLyhUfCApXGRcZDpcZFxkL10sWyJISCIsLyhUfCApXGRcZC9dXSxhaT0vKFtcK1wtXXxcZFxkKS9naSxhUD0iRGF0ZXxIb3Vyc3xNaW51dGVzfFNlY29uZHN8TWlsbGlzZWNvbmRzIi5zcGxpdCgifCIpLEc9e01pbGxpc2Vjb25kczoxLFNlY29uZHM6MTAwMCxNaW51dGVzOjYwMDAwLEhvdXJzOjM2MDAwMDAsRGF5czo4NjQwMDAwMCxNb250aHM6MjU5MjAwMDAwMCxZZWFyczozMTUzNjAwMDAwMH0sZj17bXM6Im1pbGxpc2Vjb25kIixzOiJzZWNvbmQiLG06Im1pbnV0ZSIsaDoiaG91ciIsZDoiZGF5IixEOiJkYXRlIix3OiJ3ZWVrIixXOiJpc29XZWVrIixNOiJtb250aCIsUToicXVhcnRlciIseToieWVhciIsREREOiJkYXlPZlllYXIiLGU6IndlZWtkYXkiLEU6Imlzb1dlZWtkYXkiLGdnOiJ3ZWVrWWVhciIsR0c6Imlzb1dlZWtZZWFyIn0sYTk9e2RheW9meWVhcjoiZGF5T2ZZZWFyIixpc293ZWVrZGF5OiJpc29XZWVrZGF5Iixpc293ZWVrOiJpc29XZWVrIix3ZWVreWVhcjoid2Vla1llYXIiLGlzb3dlZWt5ZWFyOiJpc29XZWVrWWVhciJ9LGF0PXt9LEM9e3M6NDUsbTo0NSxoOjIyLGQ6MjYsTToxMX0sYTM9IkRERCB3IFcgTSBEIGQiLnNwbGl0KCIgIiksYXg9Ik0gRCBIIGggbSBzIHcgVyIuc3BsaXQoIiAiKSxhNT17TTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vbnRoKCkrMX0sTU1NOmZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHNTaG9ydCh0aGlzLGkpfSxNTU1NOmZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHModGhpcyxpKX0sRDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGUoKX0sREREOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF5T2ZZZWFyKCl9LGQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXkoKX0sZGQ6ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKHRoaXMsaSl9LGRkZDpmdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0aGlzLGkpfSxkZGRkOmZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5cyh0aGlzLGkpfSx3OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2VlaygpfSxXOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNvV2VlaygpfSxZWTpmdW5jdGlvbigpe3JldHVybiBPKHRoaXMueWVhcigpJTEwMCwyKX0sWVlZWTpmdW5jdGlvbigpe3JldHVybiBPKHRoaXMueWVhcigpLDQpfSxZWVlZWTpmdW5jdGlvbigpe3JldHVybiBPKHRoaXMueWVhcigpLDUpfSxZWVlZWVk6ZnVuY3Rpb24oKXt2YXIgYnM9dGhpcy55ZWFyKCksaT1icz49MD8iKyI6Ii0iO3JldHVybiBpK08oTWF0aC5hYnMoYnMpLDYpfSxnZzpmdW5jdGlvbigpe3JldHVybiBPKHRoaXMud2Vla1llYXIoKSUxMDAsMil9LGdnZ2c6ZnVuY3Rpb24oKXtyZXR1cm4gTyh0aGlzLndlZWtZZWFyKCksNCl9LGdnZ2dnOmZ1bmN0aW9uKCl7cmV0dXJuIE8odGhpcy53ZWVrWWVhcigpLDUpfSxHRzpmdW5jdGlvbigpe3JldHVybiBPKHRoaXMuaXNvV2Vla1llYXIoKSUxMDAsMil9LEdHR0c6ZnVuY3Rpb24oKXtyZXR1cm4gTyh0aGlzLmlzb1dlZWtZZWFyKCksNCl9LEdHR0dHOmZ1bmN0aW9uKCl7cmV0dXJuIE8odGhpcy5pc29XZWVrWWVhcigpLDUpfSxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2Vla2RheSgpfSxFOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNvV2Vla2RheSgpfSxhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1lcmlkaWVtKHRoaXMuaG91cnMoKSx0aGlzLm1pbnV0ZXMoKSx0cnVlKX0sQTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tZXJpZGllbSh0aGlzLmhvdXJzKCksdGhpcy5taW51dGVzKCksZmFsc2UpfSxIOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaG91cnMoKX0saDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhvdXJzKCklMTJ8fDEyfSxtOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWludXRlcygpfSxzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2Vjb25kcygpfSxTOmZ1bmN0aW9uKCl7cmV0dXJuIFEodGhpcy5taWxsaXNlY29uZHMoKS8xMDApfSxTUzpmdW5jdGlvbigpe3JldHVybiBPKFEodGhpcy5taWxsaXNlY29uZHMoKS8xMCksMil9LFNTUzpmdW5jdGlvbigpe3JldHVybiBPKHRoaXMubWlsbGlzZWNvbmRzKCksMyl9LFNTU1M6ZnVuY3Rpb24oKXtyZXR1cm4gTyh0aGlzLm1pbGxpc2Vjb25kcygpLDMpfSxaOmZ1bmN0aW9uKCl7dmFyIGJzPXRoaXMudXRjT2Zmc2V0KCksaT0iKyI7aWYoYnM8MCl7YnM9LWJzO2k9Ii0ifXJldHVybiBpK08oUShicy82MCksMikrIjoiK08oUShicyklNjAsMil9LFpaOmZ1bmN0aW9uKCl7dmFyIGJzPXRoaXMudXRjT2Zmc2V0KCksaT0iKyI7aWYoYnM8MCl7YnM9LWJzO2k9Ii0ifXJldHVybiBpK08oUShicy82MCksMikrTyhRKGJzKSU2MCwyKX0sejpmdW5jdGlvbigpe3JldHVybiB0aGlzLnpvbmVBYmJyKCl9LHp6OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuem9uZU5hbWUoKX0seDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlT2YoKX0sWDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVuaXgoKX0sUTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1YXJ0ZXIoKX19LGE9e30sYWI9WyJtb250aHMiLCJtb250aHNTaG9ydCIsIndlZWtkYXlzIiwid2Vla2RheXNTaG9ydCIsIndlZWtkYXlzTWluIl0sYWg9ZmFsc2U7ZnVuY3Rpb24gYTAoYnMsaSxidCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMjpyZXR1cm4gYnMhPW51bGw/YnM6aTtjYXNlIDM6cmV0dXJuIGJzIT1udWxsP2JzOmkhPW51bGw/aTpidDtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW1wbGVtZW50IG1lIil9fWZ1bmN0aW9uIGE2KGJzLGkpe3JldHVybiBhUi5jYWxsKGJzLGkpfWZ1bmN0aW9uIGFvKCl7cmV0dXJue2VtcHR5OmZhbHNlLHVudXNlZFRva2VuczpbXSx1bnVzZWRJbnB1dDpbXSxvdmVyZmxvdzotMixjaGFyc0xlZnRPdmVyOjAsbnVsbElucHV0OmZhbHNlLGludmFsaWRNb250aDpudWxsLGludmFsaWRGb3JtYXQ6ZmFsc2UsdXNlckludmFsaWRhdGVkOmZhbHNlLGlzbzpmYWxzZX19ZnVuY3Rpb24gYnIoaSl7aWYoVi5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3M9PT1mYWxzZSYmdHlwZW9mIGNvbnNvbGUhPT0idW5kZWZpbmVkIiYmY29uc29sZS53YXJuKXtjb25zb2xlLndhcm4oIkRlcHJlY2F0aW9uIHdhcm5pbmc6ICIraSl9fWZ1bmN0aW9uIGJwKGJzLGkpe3ZhciBidD10cnVlO3JldHVybiBhSihmdW5jdGlvbigpe2lmKGJ0KXticihicyk7YnQ9ZmFsc2V9cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxpKX1mdW5jdGlvbiBnKGksYnMpe2lmKCFhW2ldKXticihicyk7YVtpXT10cnVlfX1mdW5jdGlvbiBTKGJzLGkpe3JldHVybiBmdW5jdGlvbihidCl7cmV0dXJuIE8oYnMuY2FsbCh0aGlzLGJ0KSxpKX19ZnVuY3Rpb24gbChpLGJzKXtyZXR1cm4gZnVuY3Rpb24oYnQpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKGkuY2FsbCh0aGlzLGJ0KSxicyl9fWZ1bmN0aW9uIG0oYnMsaSl7dmFyIGJ3PSgoaS55ZWFyKCktYnMueWVhcigpKSoxMikrKGkubW9udGgoKS1icy5tb250aCgpKSxidD1icy5jbG9uZSgpLmFkZChidywibW9udGhzIiksYnUsYnY7aWYoaS1idDwwKXtidT1icy5jbG9uZSgpLmFkZChidy0xLCJtb250aHMiKTtidj0oaS1idCkvKGJ0LWJ1KX1lbHNle2J1PWJzLmNsb25lKCkuYWRkKGJ3KzEsIm1vbnRocyIpO2J2PShpLWJ0KS8oYnUtYnQpfXJldHVybiAtKGJ3K2J2KX13aGlsZShhMy5sZW5ndGgpe2FsPWEzLnBvcCgpO2E1W2FsKyJvIl09bChhNVthbF0sYWwpfXdoaWxlKGF4Lmxlbmd0aCl7YWw9YXgucG9wKCk7YTVbYWwrYWxdPVMoYTVbYWxdLDIpfWE1LkREREQ9UyhhNS5EREQsMyk7ZnVuY3Rpb24gYmYoaSxidCxidSl7dmFyIGJzO2lmKGJ1PT1udWxsKXtyZXR1cm4gYnR9aWYoaS5tZXJpZGllbUhvdXIhPW51bGwpe3JldHVybiBpLm1lcmlkaWVtSG91cihidCxidSl9ZWxzZXtpZihpLmlzUE0hPW51bGwpe2JzPWkuaXNQTShidSk7aWYoYnMmJmJ0PDEyKXtidCs9MTJ9aWYoIWJzJiZidD09PTEyKXtidD0wfXJldHVybiBidH1lbHNle3JldHVybiBidH19fWZ1bmN0aW9uIGFmKCl7fWZ1bmN0aW9uIFAoYnMsaSl7aWYoaSE9PWZhbHNlKXtiaihicyl9YVQodGhpcyxicyk7dGhpcy5fZD1uZXcgRGF0ZSgrYnMuX2QpO2lmKGFoPT09ZmFsc2Upe2FoPXRydWU7Vi51cGRhdGVPZmZzZXQodGhpcyk7YWg9ZmFsc2V9fWZ1bmN0aW9uIGFuKGJ3KXt2YXIgYnk9cChidyksYng9YnkueWVhcnx8MCxicz1ieS5xdWFydGVyfHwwLGJ0PWJ5Lm1vbnRofHwwLGk9Ynkud2Vla3x8MCxiQj1ieS5kYXl8fDAsYno9YnkuaG91cnx8MCxidj1ieS5taW51dGV8fDAsYkE9Ynkuc2Vjb25kfHwwLGJ1PWJ5Lm1pbGxpc2Vjb25kfHwwO3RoaXMuX21pbGxpc2Vjb25kcz0rYnUrYkEqMTAwMCtidio2MDAwMCtieiozNjAwMDAwO3RoaXMuX2RheXM9K2JCK2kqNzt0aGlzLl9tb250aHM9K2J0K2JzKjMrYngqMTI7dGhpcy5fZGF0YT17fTt0aGlzLl9sb2NhbGU9Vi5sb2NhbGVEYXRhKCk7dGhpcy5fYnViYmxlKCl9ZnVuY3Rpb24gYUooYnQsYnMpe2Zvcih2YXIgYnUgaW4gYnMpe2lmKGE2KGJzLGJ1KSl7YnRbYnVdPWJzW2J1XX19aWYoYTYoYnMsInRvU3RyaW5nIikpe2J0LnRvU3RyaW5nPWJzLnRvU3RyaW5nfWlmKGE2KGJzLCJ2YWx1ZU9mIikpe2J0LnZhbHVlT2Y9YnMudmFsdWVPZn1yZXR1cm4gYnR9ZnVuY3Rpb24gYVQoYncsYnYpe3ZhciBicyxidSxidDtpZih0eXBlb2YgYnYuX2lzQU1vbWVudE9iamVjdCE9PSJ1bmRlZmluZWQiKXtidy5faXNBTW9tZW50T2JqZWN0PWJ2Ll9pc0FNb21lbnRPYmplY3R9aWYodHlwZW9mIGJ2Ll9pIT09InVuZGVmaW5lZCIpe2J3Ll9pPWJ2Ll9pfWlmKHR5cGVvZiBidi5fZiE9PSJ1bmRlZmluZWQiKXtidy5fZj1idi5fZn1pZih0eXBlb2YgYnYuX2whPT0idW5kZWZpbmVkIil7YncuX2w9YnYuX2x9aWYodHlwZW9mIGJ2Ll9zdHJpY3QhPT0idW5kZWZpbmVkIil7YncuX3N0cmljdD1idi5fc3RyaWN0fWlmKHR5cGVvZiBidi5fdHptIT09InVuZGVmaW5lZCIpe2J3Ll90em09YnYuX3R6bX1pZih0eXBlb2YgYnYuX2lzVVRDIT09InVuZGVmaW5lZCIpe2J3Ll9pc1VUQz1idi5faXNVVEN9aWYodHlwZW9mIGJ2Ll9vZmZzZXQhPT0idW5kZWZpbmVkIil7YncuX29mZnNldD1idi5fb2Zmc2V0fWlmKHR5cGVvZiBidi5fcGYhPT0idW5kZWZpbmVkIil7YncuX3BmPWJ2Ll9wZn1pZih0eXBlb2YgYnYuX2xvY2FsZSE9PSJ1bmRlZmluZWQiKXtidy5fbG9jYWxlPWJ2Ll9sb2NhbGV9aWYoYVgubGVuZ3RoPjApe2ZvcihicyBpbiBhWCl7YnU9YVhbYnNdO2J0PWJ2W2J1XTtpZih0eXBlb2YgYnQhPT0idW5kZWZpbmVkIil7YndbYnVdPWJ0fX19cmV0dXJuIGJ3fWZ1bmN0aW9uIHEoaSl7aWYoaTwwKXtyZXR1cm4gTWF0aC5jZWlsKGkpfWVsc2V7cmV0dXJuIE1hdGguZmxvb3IoaSl9fWZ1bmN0aW9uIE8oYnYsYnUsYnQpe3ZhciBicz0iIitNYXRoLmFicyhidiksaT1idj49MDt3aGlsZShicy5sZW5ndGg8YnUpe2JzPSIwIitic31yZXR1cm4oaT8oYnQ/IisiOiIiKToiLSIpK2JzfWZ1bmN0aW9uIGQoYnQsaSl7dmFyIGJzPXttaWxsaXNlY29uZHM6MCxtb250aHM6MH07YnMubW9udGhzPWkubW9udGgoKS1idC5tb250aCgpKyhpLnllYXIoKS1idC55ZWFyKCkpKjEyO2lmKGJ0LmNsb25lKCkuYWRkKGJzLm1vbnRocywiTSIpLmlzQWZ0ZXIoaSkpey0tYnMubW9udGhzfWJzLm1pbGxpc2Vjb25kcz0raS0rKGJ0LmNsb25lKCkuYWRkKGJzLm1vbnRocywiTSIpKTtyZXR1cm4gYnN9ZnVuY3Rpb24gYWMoYnQsaSl7dmFyIGJzO2k9RChpLGJ0KTtpZihidC5pc0JlZm9yZShpKSl7YnM9ZChidCxpKX1lbHNle2JzPWQoaSxidCk7YnMubWlsbGlzZWNvbmRzPS1icy5taWxsaXNlY29uZHM7YnMubW9udGhzPS1icy5tb250aHN9cmV0dXJuIGJzfWZ1bmN0aW9uIFcoYnMsaSl7cmV0dXJuIGZ1bmN0aW9uKGJ3LGJ2KXt2YXIgYnUsYnQ7aWYoYnYhPT1udWxsJiYhaXNOYU4oK2J2KSl7ZyhpLCJtb21lbnQoKS4iK2krIihwZXJpb2QsIG51bWJlcikgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS4iK2krIihudW1iZXIsIHBlcmlvZCkuIik7YnQ9Ync7Ync9YnY7YnY9YnR9Ync9dHlwZW9mIGJ3PT09InN0cmluZyI/K2J3OmJ3O2J1PVYuZHVyYXRpb24oYncsYnYpO0sodGhpcyxidSxicyk7cmV0dXJuIHRoaXN9fWZ1bmN0aW9uIEsoYnQsYncsYnYsYnUpe3ZhciBicz1idy5fbWlsbGlzZWNvbmRzLGJ4PWJ3Ll9kYXlzLGk9YncuX21vbnRocztidT1idT09bnVsbD90cnVlOmJ1O2lmKGJzKXtidC5fZC5zZXRUaW1lKCtidC5fZCticypidil9aWYoYngpe2ExKGJ0LCJEYXRlIixicShidCwiRGF0ZSIpK2J4KmJ2KX1pZihpKXtibChidCxicShidCwiTW9udGgiKStpKmJ2KX1pZihidSl7Vi51cGRhdGVPZmZzZXQoYnQsYnh8fGkpfX1mdW5jdGlvbiBiKGkpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaSk9PT0iW29iamVjdCBBcnJheV0ifWZ1bmN0aW9uIGgoaSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKT09PSJbb2JqZWN0IERhdGVdInx8aSBpbnN0YW5jZW9mIERhdGV9ZnVuY3Rpb24gYTIoYngsYncsYnQpe3ZhciBicz1NYXRoLm1pbihieC5sZW5ndGgsYncubGVuZ3RoKSxidT1NYXRoLmFicyhieC5sZW5ndGgtYncubGVuZ3RoKSxieT0wLGJ2O2Zvcihidj0wO2J2PGJzO2J2Kyspe2lmKChidCYmYnhbYnZdIT09YndbYnZdKXx8KCFidCYmUShieFtidl0pIT09UShid1tidl0pKSl7YnkrK319cmV0dXJuIGJ5K2J1fWZ1bmN0aW9uIGE4KGJzKXtpZihicyl7dmFyIGk9YnMudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oLilzJC8sIiQxIik7YnM9Zltic118fGE5W2ldfHxpfXJldHVybiBic31mdW5jdGlvbiBwKGJ0KXt2YXIgYnM9e30saSxidTtmb3IoYnUgaW4gYnQpe2lmKGE2KGJ0LGJ1KSl7aT1hOChidSk7aWYoaSl7YnNbaV09YnRbYnVdfX19cmV0dXJuIGJzfWZ1bmN0aW9uIGFGKGJzKXt2YXIgaSxidDtpZihicy5pbmRleE9mKCJ3ZWVrIik9PT0wKXtpPTc7YnQ9ImRheSJ9ZWxzZXtpZihicy5pbmRleE9mKCJtb250aCIpPT09MCl7aT0xMjtidD0ibW9udGgifWVsc2V7cmV0dXJufX1WW2JzXT1mdW5jdGlvbihieSxidil7dmFyIGJ4LGJ1LGJ6PVYuX2xvY2FsZVtic10sYnc9W107aWYodHlwZW9mIGJ5PT09Im51bWJlciIpe2J2PWJ5O2J5PUh9YnU9ZnVuY3Rpb24oYkIpe3ZhciBiQT1WKCkudXRjKCkuc2V0KGJ0LGJCKTtyZXR1cm4gYnouY2FsbChWLl9sb2NhbGUsYkEsYnl8fCIiKX07aWYoYnYhPW51bGwpe3JldHVybiBidShidil9ZWxzZXtmb3IoYng9MDtieDxpO2J4Kyspe2J3LnB1c2goYnUoYngpKX1yZXR1cm4gYnd9fX1mdW5jdGlvbiBRKGkpe3ZhciBidD0raSxicz0wO2lmKGJ0IT09MCYmaXNGaW5pdGUoYnQpKXtpZihidD49MCl7YnM9TWF0aC5mbG9vcihidCl9ZWxzZXticz1NYXRoLmNlaWwoYnQpfX1yZXR1cm4gYnN9ZnVuY3Rpb24gYmgoaSxicyl7cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGksYnMrMSwwKSkuZ2V0VVRDRGF0ZSgpfWZ1bmN0aW9uIGFPKGksYnQsYnMpe3JldHVybiBGKFYoW2ksMTEsMzErYnQtYnNdKSxidCxicykud2Vla31mdW5jdGlvbiBiYihpKXtyZXR1cm4gYVUoaSk/MzY2OjM2NX1mdW5jdGlvbiBhVShpKXtyZXR1cm4oaSU0PT09MCYmaSUxMDAhPT0wKXx8aSU0MDA9PT0wfWZ1bmN0aW9uIGJqKGkpe3ZhciBicztpZihpLl9hJiZpLl9wZi5vdmVyZmxvdz09PS0yKXticz1pLl9hW2pdPDB8fGkuX2Fbal0+MTE/ajppLl9hW2E0XTwxfHxpLl9hW2E0XT5iaChpLl9hW0JdLGkuX2Fbal0pP2E0OmkuX2FbQV08MHx8aS5fYVtBXT4yNHx8KGkuX2FbQV09PT0yNCYmKGkuX2FbYUldIT09MHx8aS5fYVt5XSE9PTB8fGkuX2FbWl0hPT0wKSk/QTppLl9hW2FJXTwwfHxpLl9hW2FJXT41OT9hSTppLl9hW3ldPDB8fGkuX2FbeV0+NTk/eTppLl9hW1pdPDB8fGkuX2FbWl0+OTk5P1o6LTE7aWYoaS5fcGYuX292ZXJmbG93RGF5T2ZZZWFyJiYoYnM8Qnx8YnM+YTQpKXticz1hNH1pLl9wZi5vdmVyZmxvdz1ic319ZnVuY3Rpb24gYUsoaSl7aWYoaS5faXNWYWxpZD09bnVsbCl7aS5faXNWYWxpZD0haXNOYU4oaS5fZC5nZXRUaW1lKCkpJiZpLl9wZi5vdmVyZmxvdzwwJiYhaS5fcGYuZW1wdHkmJiFpLl9wZi5pbnZhbGlkTW9udGgmJiFpLl9wZi5udWxsSW5wdXQmJiFpLl9wZi5pbnZhbGlkRm9ybWF0JiYhaS5fcGYudXNlckludmFsaWRhdGVkO2lmKGkuX3N0cmljdCl7aS5faXNWYWxpZD1pLl9pc1ZhbGlkJiZpLl9wZi5jaGFyc0xlZnRPdmVyPT09MCYmaS5fcGYudW51c2VkVG9rZW5zLmxlbmd0aD09PTAmJmkuX3BmLmJpZ0hvdXI9PT1IfX1yZXR1cm4gaS5faXNWYWxpZH1mdW5jdGlvbiBhVyhpKXtyZXR1cm4gaT9pLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgiXyIsIi0iKTppfWZ1bmN0aW9uIGFDKGJ4KXt2YXIgYnY9MCxidCxidyxicyxidTt3aGlsZShidjxieC5sZW5ndGgpe2J1PWFXKGJ4W2J2XSkuc3BsaXQoIi0iKTtidD1idS5sZW5ndGg7Ync9YVcoYnhbYnYrMV0pO2J3PWJ3P2J3LnNwbGl0KCItIik6bnVsbDt3aGlsZShidD4wKXticz1jKGJ1LnNsaWNlKDAsYnQpLmpvaW4oIi0iKSk7aWYoYnMpe3JldHVybiBic31pZihidyYmYncubGVuZ3RoPj1idCYmYTIoYnUsYncsdHJ1ZSk+PWJ0LTEpe2JyZWFrfWJ0LS19YnYrK31yZXR1cm4gbnVsbH1mdW5jdGlvbiBjKGkpe3ZhciBidD1udWxsO2lmKCFhdVtpXSYmYXYpe3RyeXtidD1WLmxvY2FsZSgpO3JlcXVpcmUoIi4vbG9jYWxlLyIraSk7Vi5sb2NhbGUoYnQpfWNhdGNoKGJzKXt9fXJldHVybiBhdVtpXX1mdW5jdGlvbiBEKGksYnMpe3ZhciBidCxidTtpZihicy5faXNVVEMpe2J0PWJzLmNsb25lKCk7YnU9KFYuaXNNb21lbnQoaSl8fGgoaSk/K2k6K1YoaSkpLSgrYnQpO2J0Ll9kLnNldFRpbWUoK2J0Ll9kK2J1KTtWLnVwZGF0ZU9mZnNldChidCxmYWxzZSk7cmV0dXJuIGJ0fWVsc2V7cmV0dXJuIFYoaSkubG9jYWwoKX19YUooYWYucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYnMpe3ZhciBidSxidDtmb3IoYnQgaW4gYnMpe2J1PWJzW2J0XTtpZih0eXBlb2YgYnU9PT0iZnVuY3Rpb24iKXt0aGlzW2J0XT1idX1lbHNle3RoaXNbIl8iK2J0XT1idX19dGhpcy5fb3JkaW5hbFBhcnNlTGVuaWVudD1uZXcgUmVnRXhwKHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UrInwiKy9cZHsxLDJ9Ly5zb3VyY2UpfSxfbW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoczpmdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5fbW9udGhzW2kubW9udGgoKV19LF9tb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0W2kubW9udGgoKV19LG1vbnRoc1BhcnNlOmZ1bmN0aW9uKGJ0LGJ4LGJzKXt2YXIgYnUsYncsYnY7aWYoIXRoaXMuX21vbnRoc1BhcnNlKXt0aGlzLl9tb250aHNQYXJzZT1bXTt0aGlzLl9sb25nTW9udGhzUGFyc2U9W107dGhpcy5fc2hvcnRNb250aHNQYXJzZT1bXX1mb3IoYnU9MDtidTwxMjtidSsrKXtidz1WLnV0YyhbMjAwMCxidV0pO2lmKGJzJiYhdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2J1XSl7dGhpcy5fbG9uZ01vbnRoc1BhcnNlW2J1XT1uZXcgUmVnRXhwKCJeIit0aGlzLm1vbnRocyhidywiIikucmVwbGFjZSgiLiIsIiIpKyIkIiwiaSIpO3RoaXMuX3Nob3J0TW9udGhzUGFyc2VbYnVdPW5ldyBSZWdFeHAoIl4iK3RoaXMubW9udGhzU2hvcnQoYncsIiIpLnJlcGxhY2UoIi4iLCIiKSsiJCIsImkiKX1pZighYnMmJiF0aGlzLl9tb250aHNQYXJzZVtidV0pe2J2PSJeIit0aGlzLm1vbnRocyhidywiIikrInxeIit0aGlzLm1vbnRoc1Nob3J0KGJ3LCIiKTt0aGlzLl9tb250aHNQYXJzZVtidV09bmV3IFJlZ0V4cChidi5yZXBsYWNlKCIuIiwiIiksImkiKX1pZihicyYmYng9PT0iTU1NTSImJnRoaXMuX2xvbmdNb250aHNQYXJzZVtidV0udGVzdChidCkpe3JldHVybiBidX1lbHNle2lmKGJzJiZieD09PSJNTU0iJiZ0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2J1XS50ZXN0KGJ0KSl7cmV0dXJuIGJ1fWVsc2V7aWYoIWJzJiZ0aGlzLl9tb250aHNQYXJzZVtidV0udGVzdChidCkpe3JldHVybiBidX19fX19LF93ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXM6ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuX3dlZWtkYXlzW2kuZGF5KCldfSxfd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRbaS5kYXkoKV19LF93ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluW2kuZGF5KCldfSx3ZWVrZGF5c1BhcnNlOmZ1bmN0aW9uKGJ2KXt2YXIgYnMsYnUsYnQ7aWYoIXRoaXMuX3dlZWtkYXlzUGFyc2Upe3RoaXMuX3dlZWtkYXlzUGFyc2U9W119Zm9yKGJzPTA7YnM8NzticysrKXtpZighdGhpcy5fd2Vla2RheXNQYXJzZVtic10pe2J1PVYoWzIwMDAsMV0pLmRheShicyk7YnQ9Il4iK3RoaXMud2Vla2RheXMoYnUsIiIpKyJ8XiIrdGhpcy53ZWVrZGF5c1Nob3J0KGJ1LCIiKSsifF4iK3RoaXMud2Vla2RheXNNaW4oYnUsIiIpO3RoaXMuX3dlZWtkYXlzUGFyc2VbYnNdPW5ldyBSZWdFeHAoYnQucmVwbGFjZSgiLiIsIiIpLCJpIil9aWYodGhpcy5fd2Vla2RheXNQYXJzZVtic10udGVzdChidikpe3JldHVybiBic319fSxfbG9uZ0RhdGVGb3JtYXQ6e0xUUzoiaDptbTpzcyBBIixMVDoiaDptbSBBIixMOiJNTS9ERC9ZWVlZIixMTDoiTU1NTSBELCBZWVlZIixMTEw6Ik1NTU0gRCwgWVlZWSBMVCIsTExMTDoiZGRkZCwgTU1NTSBELCBZWVlZIExUIn0sbG9uZ0RhdGVGb3JtYXQ6ZnVuY3Rpb24oYnMpe3ZhciBpPXRoaXMuX2xvbmdEYXRlRm9ybWF0W2JzXTtpZighaSYmdGhpcy5fbG9uZ0RhdGVGb3JtYXRbYnMudG9VcHBlckNhc2UoKV0pe2k9dGhpcy5fbG9uZ0RhdGVGb3JtYXRbYnMudG9VcHBlckNhc2UoKV0ucmVwbGFjZSgvTU1NTXxNTXxERHxkZGRkL2csZnVuY3Rpb24oYnQpe3JldHVybiBidC5zbGljZSgxKX0pO3RoaXMuX2xvbmdEYXRlRm9ybWF0W2JzXT1pfXJldHVybiBpfSxpc1BNOmZ1bmN0aW9uKGkpe3JldHVybigoaSsiIikudG9Mb3dlckNhc2UoKS5jaGFyQXQoMCk9PT0icCIpfSxfbWVyaWRpZW1QYXJzZTovW2FwXVwuP20/XC4/L2ksbWVyaWRpZW06ZnVuY3Rpb24oaSxicyxidCl7aWYoaT4xMSl7cmV0dXJuIGJ0PyJwbSI6IlBNIn1lbHNle3JldHVybiBidD8iYW0iOiJBTSJ9fSxfY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxjYWxlbmRhcjpmdW5jdGlvbihidCxidSxicyl7dmFyIGk9dGhpcy5fY2FsZW5kYXJbYnRdO3JldHVybiB0eXBlb2YgaT09PSJmdW5jdGlvbiI/aS5hcHBseShidSxbYnNdKTppfSxfcmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0scmVsYXRpdmVUaW1lOmZ1bmN0aW9uKGJ1LGJ0LGJzLGJ2KXt2YXIgaT10aGlzLl9yZWxhdGl2ZVRpbWVbYnNdO3JldHVybih0eXBlb2YgaT09PSJmdW5jdGlvbiIpP2koYnUsYnQsYnMsYnYpOmkucmVwbGFjZSgvJWQvaSxidSl9LHBhc3RGdXR1cmU6ZnVuY3Rpb24oYnQsaSl7dmFyIGJzPXRoaXMuX3JlbGF0aXZlVGltZVtidD4wPyJmdXR1cmUiOiJwYXN0Il07cmV0dXJuIHR5cGVvZiBicz09PSJmdW5jdGlvbiI/YnMoaSk6YnMucmVwbGFjZSgvJXMvaSxpKX0sb3JkaW5hbDpmdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5fb3JkaW5hbC5yZXBsYWNlKCIlZCIsaSl9LF9vcmRpbmFsOiIlZCIsX29yZGluYWxQYXJzZTovXGR7MSwyfS8scHJlcGFyc2U6ZnVuY3Rpb24oaSl7cmV0dXJuIGl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oaSl7cmV0dXJuIGl9LHdlZWs6ZnVuY3Rpb24oaSl7cmV0dXJuIEYoaSx0aGlzLl93ZWVrLmRvdyx0aGlzLl93ZWVrLmRveSkud2Vla30sX3dlZWs6e2RvdzowLGRveTo2fSxmaXJzdERheU9mV2VlazpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93ZWVrLmRvd30sZmlyc3REYXlPZlllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2Vlay5kb3l9LF9pbnZhbGlkRGF0ZToiSW52YWxpZCBkYXRlIixpbnZhbGlkRGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbnZhbGlkRGF0ZX19KTtmdW5jdGlvbiBhcihpKXtpZihpLm1hdGNoKC9cW1tcc1xTXS8pKXtyZXR1cm4gaS5yZXBsYWNlKC9eXFt8XF0kL2csIiIpfXJldHVybiBpLnJlcGxhY2UoL1xcL2csIiIpfWZ1bmN0aW9uIHgoYnUpe3ZhciBidj1idS5tYXRjaChheiksYnMsYnQ7Zm9yKGJzPTAsYnQ9YnYubGVuZ3RoO2JzPGJ0O2JzKyspe2lmKGE1W2J2W2JzXV0pe2J2W2JzXT1hNVtidltic11dfWVsc2V7YnZbYnNdPWFyKGJ2W2JzXSl9fXJldHVybiBmdW5jdGlvbihidyl7dmFyIGk9IiI7Zm9yKGJzPTA7YnM8YnQ7YnMrKyl7aSs9YnZbYnNdIGluc3RhbmNlb2YgRnVuY3Rpb24/YnZbYnNdLmNhbGwoYncsYnUpOmJ2W2JzXX1yZXR1cm4gaX19ZnVuY3Rpb24gYXkoaSxicyl7aWYoIWkuaXNWYWxpZCgpKXtyZXR1cm4gaS5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKX1icz1ibihicyxpLmxvY2FsZURhdGEoKSk7aWYoIWF0W2JzXSl7YXRbYnNdPXgoYnMpfXJldHVybiBhdFtic10oaSl9ZnVuY3Rpb24gYm4oYnYsYnMpe3ZhciBidD01O2Z1bmN0aW9uIGJ1KGkpe3JldHVybiBicy5sb25nRGF0ZUZvcm1hdChpKXx8aX1hay5sYXN0SW5kZXg9MDt3aGlsZShidD49MCYmYWsudGVzdChidikpe2J2PWJ2LnJlcGxhY2UoYWssYnUpO2FrLmxhc3RJbmRleD0wO2J0LT0xfXJldHVybiBidn1mdW5jdGlvbiBhRChidSxidCl7dmFyIGJzLGk9YnQuX3N0cmljdDtzd2l0Y2goYnUpe2Nhc2UiUSI6cmV0dXJuIGFqO2Nhc2UiRERERCI6cmV0dXJuIGJlO2Nhc2UiWVlZWSI6Y2FzZSJHR0dHIjpjYXNlImdnZ2ciOnJldHVybiBpP2FZOkk7Y2FzZSJZIjpjYXNlIkciOmNhc2UiZyI6cmV0dXJuIGFnO2Nhc2UiWVlZWVlZIjpjYXNlIllZWVlZIjpjYXNlIkdHR0dHIjpjYXNlImdnZ2dnIjpyZXR1cm4gaT9hcTpibTtjYXNlIlMiOmlmKGkpe3JldHVybiBhan1jYXNlIlNTIjppZihpKXtyZXR1cm4gdn1jYXNlIlNTUyI6aWYoaSl7cmV0dXJuIGJlfWNhc2UiREREIjpyZXR1cm4gYW07Y2FzZSJNTU0iOmNhc2UiTU1NTSI6Y2FzZSJkZCI6Y2FzZSJkZGQiOmNhc2UiZGRkZCI6cmV0dXJuIE47Y2FzZSJhIjpjYXNlIkEiOnJldHVybiBidC5fbG9jYWxlLl9tZXJpZGllbVBhcnNlO2Nhc2UieCI6cmV0dXJuIHc7Y2FzZSJYIjpyZXR1cm4gYVo7Y2FzZSJaIjpjYXNlIlpaIjpyZXR1cm4gcztjYXNlIlQiOnJldHVybiBvO2Nhc2UiU1NTUyI6cmV0dXJuIGJhO2Nhc2UiTU0iOmNhc2UiREQiOmNhc2UiWVkiOmNhc2UiR0ciOmNhc2UiZ2ciOmNhc2UiSEgiOmNhc2UiaGgiOmNhc2UibW0iOmNhc2Uic3MiOmNhc2Uid3ciOmNhc2UiV1ciOnJldHVybiBpP3Y6aztjYXNlIk0iOmNhc2UiRCI6Y2FzZSJkIjpjYXNlIkgiOmNhc2UiaCI6Y2FzZSJtIjpjYXNlInMiOmNhc2UidyI6Y2FzZSJXIjpjYXNlImUiOmNhc2UiRSI6cmV0dXJuIGs7Y2FzZSJEbyI6cmV0dXJuIGk/YnQuX2xvY2FsZS5fb3JkaW5hbFBhcnNlOmJ0Ll9sb2NhbGUuX29yZGluYWxQYXJzZUxlbmllbnQ7ZGVmYXVsdDpicz1uZXcgUmVnRXhwKGJrKGFIKGJ1LnJlcGxhY2UoIlxcIiwiIikpLCJpIikpO3JldHVybiBic319ZnVuY3Rpb24gYVEoYnMpe2JzPWJzfHwiIjt2YXIgaT0oYnMubWF0Y2gocyl8fFtdKSxidj1pW2kubGVuZ3RoLTFdfHxbXSxidT0oYnYrIiIpLm1hdGNoKGFpKXx8WyItIiwwLDBdLGJ0PSsoYnVbMV0qNjApK1EoYnVbMl0pO3JldHVybiBidVswXT09PSIrIj9idDotYnR9ZnVuY3Rpb24gYUcoYnYsYnQsYnUpe3ZhciBicyxpPWJ1Ll9hO3N3aXRjaChidil7Y2FzZSJRIjppZihidCE9bnVsbCl7aVtqXT0oUShidCktMSkqM31icmVhaztjYXNlIk0iOmNhc2UiTU0iOmlmKGJ0IT1udWxsKXtpW2pdPVEoYnQpLTF9YnJlYWs7Y2FzZSJNTU0iOmNhc2UiTU1NTSI6YnM9YnUuX2xvY2FsZS5tb250aHNQYXJzZShidCxidixidS5fc3RyaWN0KTtpZihicyE9bnVsbCl7aVtqXT1ic31lbHNle2J1Ll9wZi5pbnZhbGlkTW9udGg9YnR9YnJlYWs7Y2FzZSJEIjpjYXNlIkREIjppZihidCE9bnVsbCl7aVthNF09UShidCl9YnJlYWs7Y2FzZSJEbyI6aWYoYnQhPW51bGwpe2lbYTRdPVEocGFyc2VJbnQoYnQubWF0Y2goL1xkezEsMn0vKVswXSwxMCkpfWJyZWFrO2Nhc2UiREREIjpjYXNlIkREREQiOmlmKGJ0IT1udWxsKXtidS5fZGF5T2ZZZWFyPVEoYnQpfWJyZWFrO2Nhc2UiWVkiOmlbQl09Vi5wYXJzZVR3b0RpZ2l0WWVhcihidCk7YnJlYWs7Y2FzZSJZWVlZIjpjYXNlIllZWVlZIjpjYXNlIllZWVlZWSI6aVtCXT1RKGJ0KTticmVhaztjYXNlImEiOmNhc2UiQSI6YnUuX21lcmlkaWVtPWJ0O2JyZWFrO2Nhc2UiaCI6Y2FzZSJoaCI6YnUuX3BmLmJpZ0hvdXI9dHJ1ZTtjYXNlIkgiOmNhc2UiSEgiOmlbQV09UShidCk7YnJlYWs7Y2FzZSJtIjpjYXNlIm1tIjppW2FJXT1RKGJ0KTticmVhaztjYXNlInMiOmNhc2Uic3MiOmlbeV09UShidCk7YnJlYWs7Y2FzZSJTIjpjYXNlIlNTIjpjYXNlIlNTUyI6Y2FzZSJTU1NTIjppW1pdPVEoKCIwLiIrYnQpKjEwMDApO2JyZWFrO2Nhc2UieCI6YnUuX2Q9bmV3IERhdGUoUShidCkpO2JyZWFrO2Nhc2UiWCI6YnUuX2Q9bmV3IERhdGUocGFyc2VGbG9hdChidCkqMTAwMCk7YnJlYWs7Y2FzZSJaIjpjYXNlIlpaIjpidS5fdXNlVVRDPXRydWU7YnUuX3R6bT1hUShidCk7YnJlYWs7Y2FzZSJkZCI6Y2FzZSJkZGQiOmNhc2UiZGRkZCI6YnM9YnUuX2xvY2FsZS53ZWVrZGF5c1BhcnNlKGJ0KTtpZihicyE9bnVsbCl7YnUuX3c9YnUuX3d8fHt9O2J1Ll93LmQ9YnN9ZWxzZXtidS5fcGYuaW52YWxpZFdlZWtkYXk9YnR9YnJlYWs7Y2FzZSJ3IjpjYXNlInd3IjpjYXNlIlciOmNhc2UiV1ciOmNhc2UiZCI6Y2FzZSJlIjpjYXNlIkUiOmJ2PWJ2LnN1YnN0cigwLDEpO2Nhc2UiZ2dnZyI6Y2FzZSJHR0dHIjpjYXNlIkdHR0dHIjpidj1idi5zdWJzdHIoMCwyKTtpZihidCl7YnUuX3c9YnUuX3d8fHt9O2J1Ll93W2J2XT1RKGJ0KX1icmVhaztjYXNlImdnIjpjYXNlIkdHIjpidS5fdz1idS5fd3x8e307YnUuX3dbYnZdPVYucGFyc2VUd29EaWdpdFllYXIoYnQpfX1mdW5jdGlvbiBYKGJ0KXt2YXIgaSxidixidSxidyxieSxieCxicztpPWJ0Ll93O2lmKGkuR0chPW51bGx8fGkuVyE9bnVsbHx8aS5FIT1udWxsKXtieT0xO2J4PTQ7YnY9YTAoaS5HRyxidC5fYVtCXSxGKFYoKSwxLDQpLnllYXIpO2J1PWEwKGkuVywxKTtidz1hMChpLkUsMSl9ZWxzZXtieT1idC5fbG9jYWxlLl93ZWVrLmRvdztieD1idC5fbG9jYWxlLl93ZWVrLmRveTtidj1hMChpLmdnLGJ0Ll9hW0JdLEYoVigpLGJ5LGJ4KS55ZWFyKTtidT1hMChpLncsMSk7aWYoaS5kIT1udWxsKXtidz1pLmQ7aWYoYnc8YnkpeysrYnV9fWVsc2V7aWYoaS5lIT1udWxsKXtidz1pLmUrYnl9ZWxzZXtidz1ieX19fWJzPXooYnYsYnUsYncsYngsYnkpO2J0Ll9hW0JdPWJzLnllYXI7YnQuX2RheU9mWWVhcj1icy5kYXlPZlllYXJ9ZnVuY3Rpb24gYXAoYncpe3ZhciBieCxidixidT1bXSxidCxicztpZihidy5fZCl7cmV0dXJufWJ0PXIoYncpO2lmKGJ3Ll93JiZidy5fYVthNF09PW51bGwmJmJ3Ll9hW2pdPT1udWxsKXtYKGJ3KX1pZihidy5fZGF5T2ZZZWFyKXticz1hMChidy5fYVtCXSxidFtCXSk7aWYoYncuX2RheU9mWWVhcj5iYihicykpe2J3Ll9wZi5fb3ZlcmZsb3dEYXlPZlllYXI9dHJ1ZX1idj1NKGJzLDAsYncuX2RheU9mWWVhcik7YncuX2Fbal09YnYuZ2V0VVRDTW9udGgoKTtidy5fYVthNF09YnYuZ2V0VVRDRGF0ZSgpfWZvcihieD0wO2J4PDMmJmJ3Ll9hW2J4XT09bnVsbDsrK2J4KXtidy5fYVtieF09YnVbYnhdPWJ0W2J4XX1mb3IoO2J4PDc7YngrKyl7YncuX2FbYnhdPWJ1W2J4XT0oYncuX2FbYnhdPT1udWxsKT8oYng9PT0yPzE6MCk6YncuX2FbYnhdfWlmKGJ3Ll9hW0FdPT09MjQmJmJ3Ll9hW2FJXT09PTAmJmJ3Ll9hW3ldPT09MCYmYncuX2FbWl09PT0wKXtidy5fbmV4dERheT10cnVlO2J3Ll9hW0FdPTB9YncuX2Q9KGJ3Ll91c2VVVEM/TTphQSkuYXBwbHkobnVsbCxidSk7aWYoYncuX3R6bSE9bnVsbCl7YncuX2Quc2V0VVRDTWludXRlcyhidy5fZC5nZXRVVENNaW51dGVzKCktYncuX3R6bSl9aWYoYncuX25leHREYXkpe2J3Ll9hW0FdPTI0fX1mdW5jdGlvbiBhTShicyl7dmFyIGk7aWYoYnMuX2Qpe3JldHVybn1pPXAoYnMuX2kpO2JzLl9hPVtpLnllYXIsaS5tb250aCxpLmRheXx8aS5kYXRlLGkuaG91cixpLm1pbnV0ZSxpLnNlY29uZCxpLm1pbGxpc2Vjb25kXTthcChicyl9ZnVuY3Rpb24gcihicyl7dmFyIGk9bmV3IERhdGUoKTtpZihicy5fdXNlVVRDKXtyZXR1cm5baS5nZXRVVENGdWxsWWVhcigpLGkuZ2V0VVRDTW9udGgoKSxpLmdldFVUQ0RhdGUoKV19ZWxzZXtyZXR1cm5baS5nZXRGdWxsWWVhcigpLGkuZ2V0TW9udGgoKSxpLmdldERhdGUoKV19fWZ1bmN0aW9uIFUoYnUpe2lmKGJ1Ll9mPT09Vi5JU09fODYwMSl7YUIoYnUpO3JldHVybn1idS5fYT1bXTtidS5fcGYuZW1wdHk9dHJ1ZTt2YXIgYng9IiIrYnUuX2ksYncsYnQsYkEsYnYsYnosYnM9YngubGVuZ3RoLGJ5PTA7YkE9Ym4oYnUuX2YsYnUuX2xvY2FsZSkubWF0Y2goYXopfHxbXTtmb3IoYnc9MDtidzxiQS5sZW5ndGg7YncrKyl7YnY9YkFbYnddO2J0PShieC5tYXRjaChhRChidixidSkpfHxbXSlbMF07aWYoYnQpe2J6PWJ4LnN1YnN0cigwLGJ4LmluZGV4T2YoYnQpKTtpZihiei5sZW5ndGg+MCl7YnUuX3BmLnVudXNlZElucHV0LnB1c2goYnopfWJ4PWJ4LnNsaWNlKGJ4LmluZGV4T2YoYnQpK2J0Lmxlbmd0aCk7YnkrPWJ0Lmxlbmd0aH1pZihhNVtidl0pe2lmKGJ0KXtidS5fcGYuZW1wdHk9ZmFsc2V9ZWxzZXtidS5fcGYudW51c2VkVG9rZW5zLnB1c2goYnYpfWFHKGJ2LGJ0LGJ1KX1lbHNle2lmKGJ1Ll9zdHJpY3QmJiFidCl7YnUuX3BmLnVudXNlZFRva2Vucy5wdXNoKGJ2KX19fWJ1Ll9wZi5jaGFyc0xlZnRPdmVyPWJzLWJ5O2lmKGJ4Lmxlbmd0aD4wKXtidS5fcGYudW51c2VkSW5wdXQucHVzaChieCl9aWYoYnUuX3BmLmJpZ0hvdXI9PT10cnVlJiZidS5fYVtBXTw9MTIpe2J1Ll9wZi5iaWdIb3VyPUh9YnUuX2FbQV09YmYoYnUuX2xvY2FsZSxidS5fYVtBXSxidS5fbWVyaWRpZW0pO2FwKGJ1KTtiaihidSl9ZnVuY3Rpb24gYUgoaSl7cmV0dXJuIGkucmVwbGFjZSgvXFwoXFspfFxcKFxdKXxcWyhbXlxdXFtdKilcXXxcXCguKS9nLGZ1bmN0aW9uKGJzLGJ3LGJ2LGJ1LGJ0KXtyZXR1cm4gYnd8fGJ2fHxidXx8YnR9KX1mdW5jdGlvbiBiayhpKXtyZXR1cm4gaS5yZXBsYWNlKC9bLVwvXFxeJCorPy4oKXxbXF17fV0vZywiXFwkJiIpfWZ1bmN0aW9uIGE3KGJzKXt2YXIgYncsYnUsYnYsYnQsYng7aWYoYnMuX2YubGVuZ3RoPT09MCl7YnMuX3BmLmludmFsaWRGb3JtYXQ9dHJ1ZTticy5fZD1uZXcgRGF0ZShOYU4pO3JldHVybn1mb3IoYnQ9MDtidDxicy5fZi5sZW5ndGg7YnQrKyl7Yng9MDtidz1hVCh7fSxicyk7aWYoYnMuX3VzZVVUQyE9bnVsbCl7YncuX3VzZVVUQz1icy5fdXNlVVRDfWJ3Ll9wZj1hbygpO2J3Ll9mPWJzLl9mW2J0XTtVKGJ3KTtpZighYUsoYncpKXtjb250aW51ZX1ieCs9YncuX3BmLmNoYXJzTGVmdE92ZXI7YngrPWJ3Ll9wZi51bnVzZWRUb2tlbnMubGVuZ3RoKjEwO2J3Ll9wZi5zY29yZT1ieDtpZihidj09bnVsbHx8Yng8YnYpe2J2PWJ4O2J1PWJ3fX1hSihicyxidXx8YncpfWZ1bmN0aW9uIGFCKGJ2KXt2YXIgYncsYnMsYnU9YnYuX2ksYnQ9YVYuZXhlYyhidSk7aWYoYnQpe2J2Ll9wZi5pc289dHJ1ZTtmb3IoYnc9MCxicz1iZC5sZW5ndGg7Ync8YnM7YncrKyl7aWYoYmRbYnddWzFdLmV4ZWMoYnUpKXtidi5fZj1iZFtid11bMF0rKGJ0WzZdfHwiICIpO2JyZWFrfX1mb3IoYnc9MCxicz1MLmxlbmd0aDtidzxicztidysrKXtpZihMW2J3XVsxXS5leGVjKGJ1KSl7YnYuX2YrPUxbYnddWzBdO2JyZWFrfX1pZihidS5tYXRjaChzKSl7YnYuX2YrPSJaIn1VKGJ2KX1lbHNle2J2Ll9pc1ZhbGlkPWZhbHNlfX1mdW5jdGlvbiBuKGkpe2FCKGkpO2lmKGkuX2lzVmFsaWQ9PT1mYWxzZSl7ZGVsZXRlIGkuX2lzVmFsaWQ7Vi5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhpKX19ZnVuY3Rpb24gSihicyxidil7dmFyIGJ1PVtdLGJ0O2ZvcihidD0wO2J0PGJzLmxlbmd0aDsrK2J0KXtidS5wdXNoKGJ2KGJzW2J0XSxidCkpfXJldHVybiBidX1mdW5jdGlvbiBUKGJ0KXt2YXIgYnM9YnQuX2ksaTtpZihicz09PUgpe2J0Ll9kPW5ldyBEYXRlKCl9ZWxzZXtpZihoKGJzKSl7YnQuX2Q9bmV3IERhdGUoK2JzKX1lbHNle2lmKChpPWUuZXhlYyhicykpIT09bnVsbCl7YnQuX2Q9bmV3IERhdGUoK2lbMV0pfWVsc2V7aWYodHlwZW9mIGJzPT09InN0cmluZyIpe24oYnQpfWVsc2V7aWYoYihicykpe2J0Ll9hPUooYnMuc2xpY2UoMCksZnVuY3Rpb24oYnUpe3JldHVybiBwYXJzZUludChidSwxMCl9KTthcChidCl9ZWxzZXtpZih0eXBlb2YoYnMpPT09Im9iamVjdCIpe2FNKGJ0KX1lbHNle2lmKHR5cGVvZihicyk9PT0ibnVtYmVyIil7YnQuX2Q9bmV3IERhdGUoYnMpfWVsc2V7Vi5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhidCl9fX19fX19fWZ1bmN0aW9uIGFBKGJ5LGksYncsYnYsYngsYnUsYnQpe3ZhciBicz1uZXcgRGF0ZShieSxpLGJ3LGJ2LGJ4LGJ1LGJ0KTtpZihieTwxOTcwKXticy5zZXRGdWxsWWVhcihieSl9cmV0dXJuIGJzfWZ1bmN0aW9uIE0oYnMpe3ZhciBpPW5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsYXJndW1lbnRzKSk7aWYoYnM8MTk3MCl7aS5zZXRVVENGdWxsWWVhcihicyl9cmV0dXJuIGl9ZnVuY3Rpb24gYmkoYnMsaSl7aWYodHlwZW9mIGJzPT09InN0cmluZyIpe2lmKCFpc05hTihicykpe2JzPXBhcnNlSW50KGJzLDEwKX1lbHNle2JzPWkud2Vla2RheXNQYXJzZShicyk7aWYodHlwZW9mIGJzIT09Im51bWJlciIpe3JldHVybiBudWxsfX19cmV0dXJuIGJzfWZ1bmN0aW9uIGFTKGJzLGJ1LGJ0LGJ2LGkpe3JldHVybiBpLnJlbGF0aXZlVGltZShidXx8MSwhIWJ0LGJzLGJ2KX1mdW5jdGlvbiBFKGJ2LGJzLGJ6KXt2YXIgYnQ9Vi5kdXJhdGlvbihidikuYWJzKCksYkE9YWQoYnQuYXMoInMiKSksYnU9YWQoYnQuYXMoIm0iKSksYnk9YWQoYnQuYXMoImgiKSksYkI9YWQoYnQuYXMoImQiKSksaT1hZChidC5hcygiTSIpKSxidz1hZChidC5hcygieSIpKSxieD1iQTxDLnMmJlsicyIsYkFdfHxidT09PTEmJlsibSJdfHxidTxDLm0mJlsibW0iLGJ1XXx8Ynk9PT0xJiZbImgiXXx8Ynk8Qy5oJiZbImhoIixieV18fGJCPT09MSYmWyJkIl18fGJCPEMuZCYmWyJkZCIsYkJdfHxpPT09MSYmWyJNIl18fGk8Qy5NJiZbIk1NIixpXXx8Ync9PT0xJiZbInkiXXx8WyJ5eSIsYnddO2J4WzJdPWJzO2J4WzNdPStidj4wO2J4WzRdPWJ6O3JldHVybiBhUy5hcHBseSh7fSxieCl9ZnVuY3Rpb24gRihidixidCxidyl7dmFyIGJzPWJ3LWJ0LGk9YnctYnYuZGF5KCksYnU7aWYoaT5icyl7aS09N31pZihpPGJzLTcpe2krPTd9YnU9VihidikuYWRkKGksImQiKTtyZXR1cm57d2VlazpNYXRoLmNlaWwoYnUuZGF5T2ZZZWFyKCkvNykseWVhcjpidS55ZWFyKCl9fWZ1bmN0aW9uIHooYnYsYnUsYncsYnksaSl7dmFyIGJ4PU0oYnYsMCwxKS5nZXRVVENEYXkoKSxidCxicztieD1ieD09PTA/NzpieDtidz1idyE9bnVsbD9idzppO2J0PWktYngrKGJ4PmJ5Pzc6MCktKGJ4PGk/NzowKTticz03KihidS0xKSsoYnctaSkrYnQrMTtyZXR1cm57eWVhcjpicz4wP2J2OmJ2LTEsZGF5T2ZZZWFyOmJzPjA/YnM6YmIoYnYtMSkrYnN9fWZ1bmN0aW9uIFIoYnMpe3ZhciBpPWJzLl9pLGJ1PWJzLl9mLGJ0O2JzLl9sb2NhbGU9YnMuX2xvY2FsZXx8Vi5sb2NhbGVEYXRhKGJzLl9sKTtpZihpPT09bnVsbHx8KGJ1PT09SCYmaT09PSIiKSl7cmV0dXJuIFYuaW52YWxpZCh7bnVsbElucHV0OnRydWV9KX1pZih0eXBlb2YgaT09PSJzdHJpbmciKXticy5faT1pPWJzLl9sb2NhbGUucHJlcGFyc2UoaSl9aWYoVi5pc01vbWVudChpKSl7cmV0dXJuIG5ldyBQKGksdHJ1ZSl9ZWxzZXtpZihidSl7aWYoYihidSkpe2E3KGJzKX1lbHNle1UoYnMpfX1lbHNle1QoYnMpfX1idD1uZXcgUChicyk7aWYoYnQuX25leHREYXkpe2J0LmFkZCgxLCJkIik7YnQuX25leHREYXk9SH1yZXR1cm4gYnR9Vj1mdW5jdGlvbihidCxidSxpLGJzKXt2YXIgYnY7aWYodHlwZW9mKGkpPT09ImJvb2xlYW4iKXticz1pO2k9SH1idj17fTtidi5faXNBTW9tZW50T2JqZWN0PXRydWU7YnYuX2k9YnQ7YnYuX2Y9YnU7YnYuX2w9aTtidi5fc3RyaWN0PWJzO2J2Ll9pc1VUQz1mYWxzZTtidi5fcGY9YW8oKTtyZXR1cm4gUihidil9O1Yuc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzPWZhbHNlO1YuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2s9YnAoIm1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlLiBUaGlzIGlzIGRpc2NvdXJhZ2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdXBjb21pbmcgbWFqb3IgcmVsZWFzZS4gUGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8xNDA3IGZvciBtb3JlIGluZm8uIixmdW5jdGlvbihpKXtpLl9kPW5ldyBEYXRlKGkuX2krKGkuX3VzZVVUQz8iIFVUQyI6IiIpKX0pO2Z1bmN0aW9uIGFFKGJ1LGJ2KXt2YXIgYnQsYnM7aWYoYnYubGVuZ3RoPT09MSYmYihidlswXSkpe2J2PWJ2WzBdfWlmKCFidi5sZW5ndGgpe3JldHVybiBWKCl9YnQ9YnZbMF07Zm9yKGJzPTE7YnM8YnYubGVuZ3RoOysrYnMpe2lmKGJ2W2JzXVtidV0oYnQpKXtidD1idltic119fXJldHVybiBidH1WLm1pbj1mdW5jdGlvbigpe3ZhciBpPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiBhRSgiaXNCZWZvcmUiLGkpfTtWLm1heD1mdW5jdGlvbigpe3ZhciBpPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiBhRSgiaXNBZnRlciIsaSl9O1YudXRjPWZ1bmN0aW9uKGJ0LGJ1LGksYnMpe3ZhciBidjtpZih0eXBlb2YoaSk9PT0iYm9vbGVhbiIpe2JzPWk7aT1IfWJ2PXt9O2J2Ll9pc0FNb21lbnRPYmplY3Q9dHJ1ZTtidi5fdXNlVVRDPXRydWU7YnYuX2lzVVRDPXRydWU7YnYuX2w9aTtidi5faT1idDtidi5fZj1idTtidi5fc3RyaWN0PWJzO2J2Ll9wZj1hbygpO3JldHVybiBSKGJ2KS51dGMoKX07Vi51bml4PWZ1bmN0aW9uKGkpe3JldHVybiBWKGkqMTAwMCl9O1YuZHVyYXRpb249ZnVuY3Rpb24oYnQsYngpe3ZhciBieT1idCxidz1udWxsLGJzLGJ2LGJ1LGk7aWYoVi5pc0R1cmF0aW9uKGJ0KSl7Ynk9e21zOmJ0Ll9taWxsaXNlY29uZHMsZDpidC5fZGF5cyxNOmJ0Ll9tb250aHN9fWVsc2V7aWYodHlwZW9mIGJ0PT09Im51bWJlciIpe2J5PXt9O2lmKGJ4KXtieVtieF09YnR9ZWxzZXtieS5taWxsaXNlY29uZHM9YnR9fWVsc2V7aWYoISEoYnc9YmcuZXhlYyhidCkpKXticz0oYndbMV09PT0iLSIpPy0xOjE7Ynk9e3k6MCxkOlEoYndbYTRdKSpicyxoOlEoYndbQV0pKmJzLG06UShid1thSV0pKmJzLHM6UShid1t5XSkqYnMsbXM6UShid1taXSkqYnN9fWVsc2V7aWYoISEoYnc9YU4uZXhlYyhidCkpKXticz0oYndbMV09PT0iLSIpPy0xOjE7YnU9ZnVuY3Rpb24oYkEpe3ZhciBiej1iQSYmcGFyc2VGbG9hdChiQS5yZXBsYWNlKCIsIiwiLiIpKTtyZXR1cm4oaXNOYU4oYnopPzA6YnopKmJzfTtieT17eTpidShid1syXSksTTpidShid1szXSksZDpidShid1s0XSksaDpidShid1s1XSksbTpidShid1s2XSksczpidShid1s3XSksdzpidShid1s4XSl9fWVsc2V7aWYoYnk9PW51bGwpe2J5PXt9fWVsc2V7aWYodHlwZW9mIGJ5PT09Im9iamVjdCImJigiZnJvbSIgaW4gYnl8fCJ0byIgaW4gYnkpKXtpPWFjKFYoYnkuZnJvbSksVihieS50bykpO2J5PXt9O2J5Lm1zPWkubWlsbGlzZWNvbmRzO2J5Lk09aS5tb250aHN9fX19fX1idj1uZXcgYW4oYnkpO2lmKFYuaXNEdXJhdGlvbihidCkmJmE2KGJ0LCJfbG9jYWxlIikpe2J2Ll9sb2NhbGU9YnQuX2xvY2FsZX1yZXR1cm4gYnZ9O1YudmVyc2lvbj1hTDtWLmRlZmF1bHRGb3JtYXQ9YWE7Vi5JU09fODYwMT1mdW5jdGlvbigpe307Vi5tb21lbnRQcm9wZXJ0aWVzPWFYO1YudXBkYXRlT2Zmc2V0PWZ1bmN0aW9uKCl7fTtWLnJlbGF0aXZlVGltZVRocmVzaG9sZD1mdW5jdGlvbihpLGJzKXtpZihDW2ldPT09SCl7cmV0dXJuIGZhbHNlfWlmKGJzPT09SCl7cmV0dXJuIENbaV19Q1tpXT1icztyZXR1cm4gdHJ1ZX07Vi5sYW5nPWJwKCJtb21lbnQubGFuZyBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZSBpbnN0ZWFkLiIsZnVuY3Rpb24oaSxicyl7cmV0dXJuIFYubG9jYWxlKGksYnMpfSk7Vi5sb2NhbGU9ZnVuY3Rpb24oYnMsaSl7dmFyIGJ0O2lmKGJzKXtpZih0eXBlb2YoaSkhPT0idW5kZWZpbmVkIil7YnQ9Vi5kZWZpbmVMb2NhbGUoYnMsaSl9ZWxzZXtidD1WLmxvY2FsZURhdGEoYnMpfWlmKGJ0KXtWLmR1cmF0aW9uLl9sb2NhbGU9Vi5fbG9jYWxlPWJ0fX1yZXR1cm4gVi5fbG9jYWxlLl9hYmJyfTtWLmRlZmluZUxvY2FsZT1mdW5jdGlvbihicyxpKXtpZihpIT09bnVsbCl7aS5hYmJyPWJzO2lmKCFhdVtic10pe2F1W2JzXT1uZXcgYWYoKX1hdVtic10uc2V0KGkpO1YubG9jYWxlKGJzKTtyZXR1cm4gYXVbYnNdfWVsc2V7ZGVsZXRlIGF1W2JzXTtyZXR1cm4gbnVsbH19O1YubGFuZ0RhdGE9YnAoIm1vbWVudC5sYW5nRGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZURhdGEgaW5zdGVhZC4iLGZ1bmN0aW9uKGkpe3JldHVybiBWLmxvY2FsZURhdGEoaSl9KTtWLmxvY2FsZURhdGE9ZnVuY3Rpb24oYnMpe3ZhciBpO2lmKGJzJiZicy5fbG9jYWxlJiZicy5fbG9jYWxlLl9hYmJyKXticz1icy5fbG9jYWxlLl9hYmJyfWlmKCFicyl7cmV0dXJuIFYuX2xvY2FsZX1pZighYihicykpe2k9Yyhicyk7aWYoaSl7cmV0dXJuIGl9YnM9W2JzXX1yZXR1cm4gYUMoYnMpfTtWLmlzTW9tZW50PWZ1bmN0aW9uKGkpe3JldHVybiBpIGluc3RhbmNlb2YgUHx8KGkhPW51bGwmJmE2KGksIl9pc0FNb21lbnRPYmplY3QiKSl9O1YuaXNEdXJhdGlvbj1mdW5jdGlvbihpKXtyZXR1cm4gaSBpbnN0YW5jZW9mIGFufTtmb3IoYWw9YWIubGVuZ3RoLTE7YWw+PTA7LS1hbCl7YUYoYWJbYWxdKX1WLm5vcm1hbGl6ZVVuaXRzPWZ1bmN0aW9uKGkpe3JldHVybiBhOChpKX07Vi5pbnZhbGlkPWZ1bmN0aW9uKGJzKXt2YXIgaT1WLnV0YyhOYU4pO2lmKGJzIT1udWxsKXthSihpLl9wZixicyl9ZWxzZXtpLl9wZi51c2VySW52YWxpZGF0ZWQ9dHJ1ZX1yZXR1cm4gaX07Vi5wYXJzZVpvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gVi5hcHBseShudWxsLGFyZ3VtZW50cykucGFyc2Vab25lKCl9O1YucGFyc2VUd29EaWdpdFllYXI9ZnVuY3Rpb24oaSl7cmV0dXJuIFEoaSkrKFEoaSk+Njg/MTkwMDoyMDAwKX07Vi5pc0RhdGU9aDthSihWLmZuPVAucHJvdG90eXBlLHtjbG9uZTpmdW5jdGlvbigpe3JldHVybiBWKHRoaXMpfSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuICt0aGlzLl9kLSgodGhpcy5fb2Zmc2V0fHwwKSo2MDAwMCl9LHVuaXg6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcigrdGhpcy8xMDAwKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmxvY2FsZSgiZW4iKS5mb3JtYXQoImRkZCBNTU0gREQgWVlZWSBISDptbTpzcyBbR01UXVpaIil9LHRvRGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vZmZzZXQ/bmV3IERhdGUoK3RoaXMpOnRoaXMuX2R9LHRvSVNPU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGk9Vih0aGlzKS51dGMoKTtpZigwPGkueWVhcigpJiZpLnllYXIoKTw9OTk5OSl7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyl7cmV0dXJuIHRoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKX1lbHNle3JldHVybiBheShpLCJZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdIil9fWVsc2V7cmV0dXJuIGF5KGksIllZWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXSIpfX0sdG9BcnJheTpmdW5jdGlvbigpe3ZhciBpPXRoaXM7cmV0dXJuW2kueWVhcigpLGkubW9udGgoKSxpLmRhdGUoKSxpLmhvdXJzKCksaS5taW51dGVzKCksaS5zZWNvbmRzKCksaS5taWxsaXNlY29uZHMoKV19LGlzVmFsaWQ6ZnVuY3Rpb24oKXtyZXR1cm4gYUsodGhpcyl9LGlzRFNUU2hpZnRlZDpmdW5jdGlvbigpe2lmKHRoaXMuX2Epe3JldHVybiB0aGlzLmlzVmFsaWQoKSYmYTIodGhpcy5fYSwodGhpcy5faXNVVEM/Vi51dGModGhpcy5fYSk6Vih0aGlzLl9hKSkudG9BcnJheSgpKT4wfXJldHVybiBmYWxzZX0scGFyc2luZ0ZsYWdzOmZ1bmN0aW9uKCl7cmV0dXJuIGFKKHt9LHRoaXMuX3BmKX0saW52YWxpZEF0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BmLm92ZXJmbG93fSx1dGM6ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMudXRjT2Zmc2V0KDAsaSl9LGxvY2FsOmZ1bmN0aW9uKGkpe2lmKHRoaXMuX2lzVVRDKXt0aGlzLnV0Y09mZnNldCgwLGkpO3RoaXMuX2lzVVRDPWZhbHNlO2lmKGkpe3RoaXMuc3VidHJhY3QodGhpcy5fZGF0ZVV0Y09mZnNldCgpLCJtIil9fXJldHVybiB0aGlzfSxmb3JtYXQ6ZnVuY3Rpb24oYnMpe3ZhciBpPWF5KHRoaXMsYnN8fFYuZGVmYXVsdEZvcm1hdCk7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLnBvc3Rmb3JtYXQoaSl9LGFkZDpXKDEsImFkZCIpLHN1YnRyYWN0OlcoLTEsInN1YnRyYWN0IiksZGlmZjpmdW5jdGlvbihieCxidyxieil7dmFyIGJ2PUQoYngsdGhpcyksYnQ9KGJ2LnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpKjYwMDAwLGJzLGJ5LGksYnU7Ync9YTgoYncpO2lmKGJ3PT09InllYXIifHxidz09PSJtb250aCJ8fGJ3PT09InF1YXJ0ZXIiKXtpPW0odGhpcyxidik7aWYoYnc9PT0icXVhcnRlciIpe2k9aS8zfWVsc2V7aWYoYnc9PT0ieWVhciIpe2k9aS8xMn19fWVsc2V7Ynk9dGhpcy1idjtpPWJ3PT09InNlY29uZCI/YnkvMTAwMDpidz09PSJtaW51dGUiP2J5LzYwMDAwOmJ3PT09ImhvdXIiP2J5LzM2MDAwMDA6Ync9PT0iZGF5Ij8oYnktYnQpLzg2NDAwMDAwOmJ3PT09IndlZWsiPyhieS1idCkvNjA0ODAwMDAwOmJ5fXJldHVybiBiej9pOnEoaSl9LGZyb206ZnVuY3Rpb24oYnMsaSl7cmV0dXJuIFYuZHVyYXRpb24oe3RvOnRoaXMsZnJvbTpic30pLmxvY2FsZSh0aGlzLmxvY2FsZSgpKS5odW1hbml6ZSghaSl9LGZyb21Ob3c6ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuZnJvbShWKCksaSl9LGNhbGVuZGFyOmZ1bmN0aW9uKGJ2KXt2YXIgYnM9YnZ8fFYoKSxpPUQoYnMsdGhpcykuc3RhcnRPZigiZGF5IiksYnU9dGhpcy5kaWZmKGksImRheXMiLHRydWUpLGJ0PWJ1PC02PyJzYW1lRWxzZSI6YnU8LTE/Imxhc3RXZWVrIjpidTwwPyJsYXN0RGF5IjpidTwxPyJzYW1lRGF5IjpidTwyPyJuZXh0RGF5IjpidTw3PyJuZXh0V2VlayI6InNhbWVFbHNlIjtyZXR1cm4gdGhpcy5mb3JtYXQodGhpcy5sb2NhbGVEYXRhKCkuY2FsZW5kYXIoYnQsdGhpcyxWKGJzKSkpfSxpc0xlYXBZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIGFVKHRoaXMueWVhcigpKX0saXNEU1Q6ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy51dGNPZmZzZXQoKT50aGlzLmNsb25lKCkubW9udGgoMCkudXRjT2Zmc2V0KCl8fHRoaXMudXRjT2Zmc2V0KCk+dGhpcy5jbG9uZSgpLm1vbnRoKDUpLnV0Y09mZnNldCgpKX0sZGF5OmZ1bmN0aW9uKGJzKXt2YXIgaT10aGlzLl9pc1VUQz90aGlzLl9kLmdldFVUQ0RheSgpOnRoaXMuX2QuZ2V0RGF5KCk7aWYoYnMhPW51bGwpe2JzPWJpKGJzLHRoaXMubG9jYWxlRGF0YSgpKTtyZXR1cm4gdGhpcy5hZGQoYnMtaSwiZCIpfWVsc2V7cmV0dXJuIGl9fSxtb250aDp1KCJNb250aCIsdHJ1ZSksc3RhcnRPZjpmdW5jdGlvbihpKXtpPWE4KGkpO3N3aXRjaChpKXtjYXNlInllYXIiOnRoaXMubW9udGgoMCk7Y2FzZSJxdWFydGVyIjpjYXNlIm1vbnRoIjp0aGlzLmRhdGUoMSk7Y2FzZSJ3ZWVrIjpjYXNlImlzb1dlZWsiOmNhc2UiZGF5Ijp0aGlzLmhvdXJzKDApO2Nhc2UiaG91ciI6dGhpcy5taW51dGVzKDApO2Nhc2UibWludXRlIjp0aGlzLnNlY29uZHMoMCk7Y2FzZSJzZWNvbmQiOnRoaXMubWlsbGlzZWNvbmRzKDApfWlmKGk9PT0id2VlayIpe3RoaXMud2Vla2RheSgwKX1lbHNle2lmKGk9PT0iaXNvV2VlayIpe3RoaXMuaXNvV2Vla2RheSgxKX19aWYoaT09PSJxdWFydGVyIil7dGhpcy5tb250aChNYXRoLmZsb29yKHRoaXMubW9udGgoKS8zKSozKX1yZXR1cm4gdGhpc30sZW5kT2Y6ZnVuY3Rpb24oaSl7aT1hOChpKTtpZihpPT09SHx8aT09PSJtaWxsaXNlY29uZCIpe3JldHVybiB0aGlzfXJldHVybiB0aGlzLnN0YXJ0T2YoaSkuYWRkKDEsKGk9PT0iaXNvV2VlayI/IndlZWsiOmkpKS5zdWJ0cmFjdCgxLCJtcyIpfSxpc0FmdGVyOmZ1bmN0aW9uKGJzLGkpe3ZhciBidDtpPWE4KHR5cGVvZiBpIT09InVuZGVmaW5lZCI/aToibWlsbGlzZWNvbmQiKTtpZihpPT09Im1pbGxpc2Vjb25kIil7YnM9Vi5pc01vbWVudChicyk/YnM6Vihicyk7cmV0dXJuICt0aGlzPitic31lbHNle2J0PVYuaXNNb21lbnQoYnMpPyticzorVihicyk7cmV0dXJuIGJ0PCt0aGlzLmNsb25lKCkuc3RhcnRPZihpKX19LGlzQmVmb3JlOmZ1bmN0aW9uKGJzLGkpe3ZhciBidDtpPWE4KHR5cGVvZiBpIT09InVuZGVmaW5lZCI/aToibWlsbGlzZWNvbmQiKTtpZihpPT09Im1pbGxpc2Vjb25kIil7YnM9Vi5pc01vbWVudChicyk/YnM6Vihicyk7cmV0dXJuICt0aGlzPCtic31lbHNle2J0PVYuaXNNb21lbnQoYnMpPyticzorVihicyk7cmV0dXJuICt0aGlzLmNsb25lKCkuZW5kT2YoaSk8YnR9fSxpc0JldHdlZW46ZnVuY3Rpb24oYnQsYnMsaSl7cmV0dXJuIHRoaXMuaXNBZnRlcihidCxpKSYmdGhpcy5pc0JlZm9yZShicyxpKX0saXNTYW1lOmZ1bmN0aW9uKGJzLGkpe3ZhciBidDtpPWE4KGl8fCJtaWxsaXNlY29uZCIpO2lmKGk9PT0ibWlsbGlzZWNvbmQiKXticz1WLmlzTW9tZW50KGJzKT9iczpWKGJzKTtyZXR1cm4gK3RoaXM9PT0rYnN9ZWxzZXtidD0rVihicyk7cmV0dXJuICsodGhpcy5jbG9uZSgpLnN0YXJ0T2YoaSkpPD1idCYmYnQ8PSsodGhpcy5jbG9uZSgpLmVuZE9mKGkpKX19LG1pbjpicCgibW9tZW50KCkubWluIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWluIGluc3RlYWQuIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8xNTQ4IixmdW5jdGlvbihpKXtpPVYuYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiBpPHRoaXM/dGhpczppfSksbWF4OmJwKCJtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzE1NDgiLGZ1bmN0aW9uKGkpe2k9Vi5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIGk+dGhpcz90aGlzOml9KSx6b25lOmJwKCJtb21lbnQoKS56b25lIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQoKS51dGNPZmZzZXQgaW5zdGVhZC4gaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzE3NzkiLGZ1bmN0aW9uKGksYnMpe2lmKGkhPW51bGwpe2lmKHR5cGVvZiBpIT09InN0cmluZyIpe2k9LWl9dGhpcy51dGNPZmZzZXQoaSxicyk7cmV0dXJuIHRoaXN9ZWxzZXtyZXR1cm4gLXRoaXMudXRjT2Zmc2V0KCl9fSksdXRjT2Zmc2V0OmZ1bmN0aW9uKGksYnUpe3ZhciBidD10aGlzLl9vZmZzZXR8fDAsYnM7aWYoaSE9bnVsbCl7aWYodHlwZW9mIGk9PT0ic3RyaW5nIil7aT1hUShpKX1pZihNYXRoLmFicyhpKTwxNil7aT1pKjYwfWlmKCF0aGlzLl9pc1VUQyYmYnUpe2JzPXRoaXMuX2RhdGVVdGNPZmZzZXQoKX10aGlzLl9vZmZzZXQ9aTt0aGlzLl9pc1VUQz10cnVlO2lmKGJzIT1udWxsKXt0aGlzLmFkZChicywibSIpfWlmKGJ0IT09aSl7aWYoIWJ1fHx0aGlzLl9jaGFuZ2VJblByb2dyZXNzKXtLKHRoaXMsVi5kdXJhdGlvbihpLWJ0LCJtIiksMSxmYWxzZSl9ZWxzZXtpZighdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcyl7dGhpcy5fY2hhbmdlSW5Qcm9ncmVzcz10cnVlO1YudXBkYXRlT2Zmc2V0KHRoaXMsdHJ1ZSk7dGhpcy5fY2hhbmdlSW5Qcm9ncmVzcz1udWxsfX19cmV0dXJuIHRoaXN9ZWxzZXtyZXR1cm4gdGhpcy5faXNVVEM/YnQ6dGhpcy5fZGF0ZVV0Y09mZnNldCgpfX0saXNMb2NhbDpmdW5jdGlvbigpe3JldHVybiAhdGhpcy5faXNVVEN9LGlzVXRjT2Zmc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzVVRDfSxpc1V0YzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1VUQyYmdGhpcy5fb2Zmc2V0PT09MH0sem9uZUFiYnI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNVVEM/IlVUQyI6IiJ9LHpvbmVOYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzVVRDPyJDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZSI6IiJ9LHBhcnNlWm9uZTpmdW5jdGlvbigpe2lmKHRoaXMuX3R6bSl7dGhpcy51dGNPZmZzZXQodGhpcy5fdHptKX1lbHNle2lmKHR5cGVvZiB0aGlzLl9pPT09InN0cmluZyIpe3RoaXMudXRjT2Zmc2V0KGFRKHRoaXMuX2kpKX19cmV0dXJuIHRoaXN9LGhhc0FsaWduZWRIb3VyT2Zmc2V0OmZ1bmN0aW9uKGkpe2lmKCFpKXtpPTB9ZWxzZXtpPVYoaSkudXRjT2Zmc2V0KCl9cmV0dXJuKHRoaXMudXRjT2Zmc2V0KCktaSklNjA9PT0wfSxkYXlzSW5Nb250aDpmdW5jdGlvbigpe3JldHVybiBiaCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCkpfSxkYXlPZlllYXI6ZnVuY3Rpb24oaSl7dmFyIGJzPWFkKChWKHRoaXMpLnN0YXJ0T2YoImRheSIpLVYodGhpcykuc3RhcnRPZigieWVhciIpKS84NjQwMDAwMCkrMTtyZXR1cm4gaT09bnVsbD9iczp0aGlzLmFkZCgoaS1icyksImQiKX0scXVhcnRlcjpmdW5jdGlvbihpKXtyZXR1cm4gaT09bnVsbD9NYXRoLmNlaWwoKHRoaXMubW9udGgoKSsxKS8zKTp0aGlzLm1vbnRoKChpLTEpKjMrdGhpcy5tb250aCgpJTMpfSx3ZWVrWWVhcjpmdW5jdGlvbihpKXt2YXIgYnM9Rih0aGlzLHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyx0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3kpLnllYXI7cmV0dXJuIGk9PW51bGw/YnM6dGhpcy5hZGQoKGktYnMpLCJ5Iil9LGlzb1dlZWtZZWFyOmZ1bmN0aW9uKGkpe3ZhciBicz1GKHRoaXMsMSw0KS55ZWFyO3JldHVybiBpPT1udWxsP2JzOnRoaXMuYWRkKChpLWJzKSwieSIpfSx3ZWVrOmZ1bmN0aW9uKGkpe3ZhciBicz10aGlzLmxvY2FsZURhdGEoKS53ZWVrKHRoaXMpO3JldHVybiBpPT1udWxsP2JzOnRoaXMuYWRkKChpLWJzKSo3LCJkIil9LGlzb1dlZWs6ZnVuY3Rpb24oaSl7dmFyIGJzPUYodGhpcywxLDQpLndlZWs7cmV0dXJuIGk9PW51bGw/YnM6dGhpcy5hZGQoKGktYnMpKjcsImQiKX0sd2Vla2RheTpmdW5jdGlvbihpKXt2YXIgYnM9KHRoaXMuZGF5KCkrNy10aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3cpJTc7cmV0dXJuIGk9PW51bGw/YnM6dGhpcy5hZGQoaS1icywiZCIpfSxpc29XZWVrZGF5OmZ1bmN0aW9uKGkpe3JldHVybiBpPT1udWxsP3RoaXMuZGF5KCl8fDc6dGhpcy5kYXkodGhpcy5kYXkoKSU3P2k6aS03KX0saXNvV2Vla3NJblllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gYU8odGhpcy55ZWFyKCksMSw0KX0sd2Vla3NJblllYXI6ZnVuY3Rpb24oKXt2YXIgaT10aGlzLmxvY2FsZURhdGEoKS5fd2VlaztyZXR1cm4gYU8odGhpcy55ZWFyKCksaS5kb3csaS5kb3kpfSxnZXQ6ZnVuY3Rpb24oaSl7aT1hOChpKTtyZXR1cm4gdGhpc1tpXSgpfSxzZXQ6ZnVuY3Rpb24oaSxidCl7dmFyIGJzO2lmKHR5cGVvZiBpPT09Im9iamVjdCIpe2ZvcihicyBpbiBpKXt0aGlzLnNldChicyxpW2JzXSl9fWVsc2V7aT1hOChpKTtpZih0eXBlb2YgdGhpc1tpXT09PSJmdW5jdGlvbiIpe3RoaXNbaV0oYnQpfX1yZXR1cm4gdGhpc30sbG9jYWxlOmZ1bmN0aW9uKGJzKXt2YXIgaTtpZihicz09PUgpe3JldHVybiB0aGlzLl9sb2NhbGUuX2FiYnJ9ZWxzZXtpPVYubG9jYWxlRGF0YShicyk7aWYoaSE9bnVsbCl7dGhpcy5fbG9jYWxlPWl9cmV0dXJuIHRoaXN9fSxsYW5nOmJwKCJtb21lbnQoKS5sYW5nKCkgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwgdXNlIG1vbWVudCgpLmxvY2FsZURhdGEoKSB0byBnZXQgdGhlIGxhbmd1YWdlIGNvbmZpZ3VyYXRpb24uIFVzZSBtb21lbnQoKS5sb2NhbGUoKSB0byBjaGFuZ2UgbGFuZ3VhZ2VzLiIsZnVuY3Rpb24oaSl7aWYoaT09PUgpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKX1lbHNle3JldHVybiB0aGlzLmxvY2FsZShpKX19KSxsb2NhbGVEYXRhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvY2FsZX0sX2RhdGVVdGNPZmZzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gLU1hdGgucm91bmQodGhpcy5fZC5nZXRUaW1lem9uZU9mZnNldCgpLzE1KSoxNX19KTtmdW5jdGlvbiBibChpLGJzKXt2YXIgYnQ7aWYodHlwZW9mIGJzPT09InN0cmluZyIpe2JzPWkubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKGJzKTtpZih0eXBlb2YgYnMhPT0ibnVtYmVyIil7cmV0dXJuIGl9fWJ0PU1hdGgubWluKGkuZGF0ZSgpLGJoKGkueWVhcigpLGJzKSk7aS5fZFsic2V0IisoaS5faXNVVEM/IlVUQyI6IiIpKyJNb250aCJdKGJzLGJ0KTtyZXR1cm4gaX1mdW5jdGlvbiBicShicyxpKXtyZXR1cm4gYnMuX2RbImdldCIrKGJzLl9pc1VUQz8iVVRDIjoiIikraV0oKX1mdW5jdGlvbiBhMShicyxpLGJ0KXtpZihpPT09Ik1vbnRoIil7cmV0dXJuIGJsKGJzLGJ0KX1lbHNle3JldHVybiBicy5fZFsic2V0IisoYnMuX2lzVVRDPyJVVEMiOiIiKStpXShidCl9fWZ1bmN0aW9uIHUoaSxicyl7cmV0dXJuIGZ1bmN0aW9uKGJ0KXtpZihidCE9bnVsbCl7YTEodGhpcyxpLGJ0KTtWLnVwZGF0ZU9mZnNldCh0aGlzLGJzKTtyZXR1cm4gdGhpc31lbHNle3JldHVybiBicSh0aGlzLGkpfX19Vi5mbi5taWxsaXNlY29uZD1WLmZuLm1pbGxpc2Vjb25kcz11KCJNaWxsaXNlY29uZHMiLGZhbHNlKTtWLmZuLnNlY29uZD1WLmZuLnNlY29uZHM9dSgiU2Vjb25kcyIsZmFsc2UpO1YuZm4ubWludXRlPVYuZm4ubWludXRlcz11KCJNaW51dGVzIixmYWxzZSk7Vi5mbi5ob3VyPVYuZm4uaG91cnM9dSgiSG91cnMiLHRydWUpO1YuZm4uZGF0ZT11KCJEYXRlIix0cnVlKTtWLmZuLmRhdGVzPWJwKCJkYXRlcyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLiIsdSgiRGF0ZSIsdHJ1ZSkpO1YuZm4ueWVhcj11KCJGdWxsWWVhciIsdHJ1ZSk7Vi5mbi55ZWFycz1icCgieWVhcnMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIHllYXIgaW5zdGVhZC4iLHUoIkZ1bGxZZWFyIix0cnVlKSk7Vi5mbi5kYXlzPVYuZm4uZGF5O1YuZm4ubW9udGhzPVYuZm4ubW9udGg7Vi5mbi53ZWVrcz1WLmZuLndlZWs7Vi5mbi5pc29XZWVrcz1WLmZuLmlzb1dlZWs7Vi5mbi5xdWFydGVycz1WLmZuLnF1YXJ0ZXI7Vi5mbi50b0pTT049Vi5mbi50b0lTT1N0cmluZztWLmZuLmlzVVRDPVYuZm4uaXNVdGM7ZnVuY3Rpb24gdChpKXtyZXR1cm4gaSo0MDAvMTQ2MDk3fWZ1bmN0aW9uIGJvKGkpe3JldHVybiBpKjE0NjA5Ny80MDB9YUooVi5kdXJhdGlvbi5mbj1hbi5wcm90b3R5cGUse19idWJibGU6ZnVuY3Rpb24oKXt2YXIgYnQ9dGhpcy5fbWlsbGlzZWNvbmRzLGJ5PXRoaXMuX2RheXMsaT10aGlzLl9tb250aHMsYnc9dGhpcy5fZGF0YSxieCxidixicyxidT0wO2J3Lm1pbGxpc2Vjb25kcz1idCUxMDAwO2J4PXEoYnQvMTAwMCk7Yncuc2Vjb25kcz1ieCU2MDtidj1xKGJ4LzYwKTtidy5taW51dGVzPWJ2JTYwO2JzPXEoYnYvNjApO2J3LmhvdXJzPWJzJTI0O2J5Kz1xKGJzLzI0KTtidT1xKHQoYnkpKTtieS09cShibyhidSkpO2krPXEoYnkvMzApO2J5JT0zMDtidSs9cShpLzEyKTtpJT0xMjtidy5kYXlzPWJ5O2J3Lm1vbnRocz1pO2J3LnllYXJzPWJ1fSxhYnM6ZnVuY3Rpb24oKXt0aGlzLl9taWxsaXNlY29uZHM9TWF0aC5hYnModGhpcy5fbWlsbGlzZWNvbmRzKTt0aGlzLl9kYXlzPU1hdGguYWJzKHRoaXMuX2RheXMpO3RoaXMuX21vbnRocz1NYXRoLmFicyh0aGlzLl9tb250aHMpO3RoaXMuX2RhdGEubWlsbGlzZWNvbmRzPU1hdGguYWJzKHRoaXMuX2RhdGEubWlsbGlzZWNvbmRzKTt0aGlzLl9kYXRhLnNlY29uZHM9TWF0aC5hYnModGhpcy5fZGF0YS5zZWNvbmRzKTt0aGlzLl9kYXRhLm1pbnV0ZXM9TWF0aC5hYnModGhpcy5fZGF0YS5taW51dGVzKTt0aGlzLl9kYXRhLmhvdXJzPU1hdGguYWJzKHRoaXMuX2RhdGEuaG91cnMpO3RoaXMuX2RhdGEubW9udGhzPU1hdGguYWJzKHRoaXMuX2RhdGEubW9udGhzKTt0aGlzLl9kYXRhLnllYXJzPU1hdGguYWJzKHRoaXMuX2RhdGEueWVhcnMpO3JldHVybiB0aGlzfSx3ZWVrczpmdW5jdGlvbigpe3JldHVybiBxKHRoaXMuZGF5cygpLzcpfSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21pbGxpc2Vjb25kcyt0aGlzLl9kYXlzKjg2NDAwMDAwKyh0aGlzLl9tb250aHMlMTIpKjI1OTIwMDAwMDArUSh0aGlzLl9tb250aHMvMTIpKjMxNTM2MDAwMDAwfSxodW1hbml6ZTpmdW5jdGlvbihicyl7dmFyIGk9RSh0aGlzLCFicyx0aGlzLmxvY2FsZURhdGEoKSk7aWYoYnMpe2k9dGhpcy5sb2NhbGVEYXRhKCkucGFzdEZ1dHVyZSgrdGhpcyxpKX1yZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChpKX0sYWRkOmZ1bmN0aW9uKGksYnQpe3ZhciBicz1WLmR1cmF0aW9uKGksYnQpO3RoaXMuX21pbGxpc2Vjb25kcys9YnMuX21pbGxpc2Vjb25kczt0aGlzLl9kYXlzKz1icy5fZGF5czt0aGlzLl9tb250aHMrPWJzLl9tb250aHM7dGhpcy5fYnViYmxlKCk7cmV0dXJuIHRoaXN9LHN1YnRyYWN0OmZ1bmN0aW9uKGksYnQpe3ZhciBicz1WLmR1cmF0aW9uKGksYnQpO3RoaXMuX21pbGxpc2Vjb25kcy09YnMuX21pbGxpc2Vjb25kczt0aGlzLl9kYXlzLT1icy5fZGF5czt0aGlzLl9tb250aHMtPWJzLl9tb250aHM7dGhpcy5fYnViYmxlKCk7cmV0dXJuIHRoaXN9LGdldDpmdW5jdGlvbihpKXtpPWE4KGkpO3JldHVybiB0aGlzW2kudG9Mb3dlckNhc2UoKSsicyJdKCl9LGFzOmZ1bmN0aW9uKGJzKXt2YXIgYnQsaTticz1hOChicyk7aWYoYnM9PT0ibW9udGgifHxicz09PSJ5ZWFyIil7YnQ9dGhpcy5fZGF5cyt0aGlzLl9taWxsaXNlY29uZHMvODY0MDAwMDA7aT10aGlzLl9tb250aHMrdChidCkqMTI7cmV0dXJuIGJzPT09Im1vbnRoIj9pOmkvMTJ9ZWxzZXtidD10aGlzLl9kYXlzK01hdGgucm91bmQoYm8odGhpcy5fbW9udGhzLzEyKSk7c3dpdGNoKGJzKXtjYXNlIndlZWsiOnJldHVybiBidC83K3RoaXMuX21pbGxpc2Vjb25kcy82MDQ4MDAwMDA7Y2FzZSJkYXkiOnJldHVybiBidCt0aGlzLl9taWxsaXNlY29uZHMvODY0MDAwMDA7Y2FzZSJob3VyIjpyZXR1cm4gYnQqMjQrdGhpcy5fbWlsbGlzZWNvbmRzLzM2MDAwMDA7Y2FzZSJtaW51dGUiOnJldHVybiBidCoyNCo2MCt0aGlzLl9taWxsaXNlY29uZHMvNjAwMDA7Y2FzZSJzZWNvbmQiOnJldHVybiBidCoyNCo2MCo2MCt0aGlzLl9taWxsaXNlY29uZHMvMTAwMDtjYXNlIm1pbGxpc2Vjb25kIjpyZXR1cm4gTWF0aC5mbG9vcihidCoyNCo2MCo2MCoxMDAwKSt0aGlzLl9taWxsaXNlY29uZHM7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gdW5pdCAiK2JzKX19fSxsYW5nOlYuZm4ubGFuZyxsb2NhbGU6Vi5mbi5sb2NhbGUsdG9Jc29TdHJpbmc6YnAoInRvSXNvU3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0b0lTT1N0cmluZygpIGluc3RlYWQgKG5vdGljZSB0aGUgY2FwaXRhbHMpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvSVNPU3RyaW5nKCl9KSx0b0lTT1N0cmluZzpmdW5jdGlvbigpe3ZhciBidT1NYXRoLmFicyh0aGlzLnllYXJzKCkpLGk9TWF0aC5hYnModGhpcy5tb250aHMoKSksYnc9TWF0aC5hYnModGhpcy5kYXlzKCkpLGJzPU1hdGguYWJzKHRoaXMuaG91cnMoKSksYnQ9TWF0aC5hYnModGhpcy5taW51dGVzKCkpLGJ2PU1hdGguYWJzKHRoaXMuc2Vjb25kcygpK3RoaXMubWlsbGlzZWNvbmRzKCkvMTAwMCk7aWYoIXRoaXMuYXNTZWNvbmRzKCkpe3JldHVybiJQMEQifXJldHVybih0aGlzLmFzU2Vjb25kcygpPDA/Ii0iOiIiKSsiUCIrKGJ1P2J1KyJZIjoiIikrKGk/aSsiTSI6IiIpKyhidz9idysiRCI6IiIpKygoYnN8fGJ0fHxidik/IlQiOiIiKSsoYnM/YnMrIkgiOiIiKSsoYnQ/YnQrIk0iOiIiKSsoYnY/YnYrIlMiOiIiKX0sbG9jYWxlRGF0YTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sb2NhbGV9LHRvSlNPTjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvSVNPU3RyaW5nKCl9fSk7Vi5kdXJhdGlvbi5mbi50b1N0cmluZz1WLmR1cmF0aW9uLmZuLnRvSVNPU3RyaW5nO2Z1bmN0aW9uIGFlKGkpe1YuZHVyYXRpb24uZm5baV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YVtpXX19Zm9yKGFsIGluIEcpe2lmKGE2KEcsYWwpKXthZShhbC50b0xvd2VyQ2FzZSgpKX19Vi5kdXJhdGlvbi5mbi5hc01pbGxpc2Vjb25kcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFzKCJtcyIpfTtWLmR1cmF0aW9uLmZuLmFzU2Vjb25kcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFzKCJzIil9O1YuZHVyYXRpb24uZm4uYXNNaW51dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXMoIm0iKX07Vi5kdXJhdGlvbi5mbi5hc0hvdXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXMoImgiKX07Vi5kdXJhdGlvbi5mbi5hc0RheXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcygiZCIpfTtWLmR1cmF0aW9uLmZuLmFzV2Vla3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcygid2Vla3MiKX07Vi5kdXJhdGlvbi5mbi5hc01vbnRocz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFzKCJNIil9O1YuZHVyYXRpb24uZm4uYXNZZWFycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFzKCJ5Iil9O1YubG9jYWxlKCJlbiIse29yZGluYWxQYXJzZTovXGR7MSwyfSh0aHxzdHxuZHxyZCkvLG9yZGluYWw6ZnVuY3Rpb24oYnQpe3ZhciBpPWJ0JTEwLGJzPShRKGJ0JTEwMC8xMCk9PT0xKT8idGgiOihpPT09MSk/InN0IjooaT09PTIpPyJuZCI6KGk9PT0zKT8icmQiOiJ0aCI7cmV0dXJuIGJ0K2JzfX0pO2Z1bmN0aW9uIFkoaSl7aWYodHlwZW9mIGVuZGVyIT09InVuZGVmaW5lZCIpe3JldHVybn1hdz1iYy5tb21lbnQ7aWYoaSl7YmMubW9tZW50PWJwKCJBY2Nlc3NpbmcgTW9tZW50IHRocm91Z2ggdGhlIGdsb2JhbCBzY29wZSBpcyBkZXByZWNhdGVkLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGFuIHVwY29taW5nIHJlbGVhc2UuIixWKX1lbHNle2JjLm1vbWVudD1WfX1pZihhdil7bW9kdWxlLmV4cG9ydHM9Vn1lbHNle2lmKHR5cGVvZiBkZWZpbmU9PT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kKXtkZWZpbmUoZnVuY3Rpb24oYnMsaSxidCl7aWYoYnQuY29uZmlnJiZidC5jb25maWcoKSYmYnQuY29uZmlnKCkubm9HbG9iYWw9PT10cnVlKXtiYy5tb21lbnQ9YXd9cmV0dXJuIFZ9KTtZKHRydWUpfWVsc2V7WSgpfX19KS5jYWxsKHRoaXMpOw==]]></data>
	</file>
	<file>
	  <filename>/include/pikaday.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohCiAqIFBpa2FkYXkKICoKICogQ29weXJpZ2h0IMKpIDIwMTQgRGF2aWQgQnVzaGVsbCB8IEJTRCAmIE1JVCBsaWNlbnNlIHwgaHR0cHM6Ly9naXRodWIuY29tL2RidXNoZWxsL1Bpa2FkYXkKICovCihmdW5jdGlvbihhLGIpe3ZhciBkO2lmKHR5cGVvZiBleHBvcnRzPT09Im9iamVjdCIpe3RyeXtkPXJlcXVpcmUoIm1vbWVudCIpfWNhdGNoKGMpe31tb2R1bGUuZXhwb3J0cz1iKGQpfWVsc2V7aWYodHlwZW9mIGRlZmluZT09PSJmdW5jdGlvbiImJmRlZmluZS5hbWQpe2RlZmluZShmdW5jdGlvbihmKXt2YXIgaD0ibW9tZW50Ijt0cnl7ZD1mKGgpfWNhdGNoKGcpe31yZXR1cm4gYihkKX0pfWVsc2V7YS5QaWthZGF5PWIoYS5tb21lbnQpfX19KHRoaXMsZnVuY3Rpb24oQil7dmFyIGo9dHlwZW9mIEI9PT0iZnVuY3Rpb24iLGQ9ISF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcixxPXdpbmRvdy5kb2N1bWVudCx1PXdpbmRvdy5zZXRUaW1lb3V0LHM9ZnVuY3Rpb24oRyxILEksRil7aWYoZCl7Ry5hZGRFdmVudExpc3RlbmVyKEgsSSwhIUYpfWVsc2V7Ry5hdHRhY2hFdmVudCgib24iK0gsSSl9fSx3PWZ1bmN0aW9uKEcsSCxJLEYpe2lmKGQpe0cucmVtb3ZlRXZlbnRMaXN0ZW5lcihILEksISFGKX1lbHNle0cuZGV0YWNoRXZlbnQoIm9uIitILEkpfX0sRT1mdW5jdGlvbihHLEYsSSl7dmFyIEg7aWYocS5jcmVhdGVFdmVudCl7SD1xLmNyZWF0ZUV2ZW50KCJIVE1MRXZlbnRzIik7SC5pbml0RXZlbnQoRix0cnVlLGZhbHNlKTtIPXkoSCxJKTtHLmRpc3BhdGNoRXZlbnQoSCl9ZWxzZXtpZihxLmNyZWF0ZUV2ZW50T2JqZWN0KXtIPXEuY3JlYXRlRXZlbnRPYmplY3QoKTtIPXkoSCxJKTtHLmZpcmVFdmVudCgib24iK0YsSCl9fX0seD1mdW5jdGlvbihGKXtyZXR1cm4gRi50cmltP0YudHJpbSgpOkYucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfSxhPWZ1bmN0aW9uKEYsRyl7cmV0dXJuKCIgIitGLmNsYXNzTmFtZSsiICIpLmluZGV4T2YoIiAiK0crIiAiKSE9PS0xfSxtPWZ1bmN0aW9uKEYsRyl7aWYoIWEoRixHKSl7Ri5jbGFzc05hbWU9KEYuY2xhc3NOYW1lPT09IiIpP0c6Ri5jbGFzc05hbWUrIiAiK0d9fSxuPWZ1bmN0aW9uKEYsRyl7Ri5jbGFzc05hbWU9eCgoIiAiK0YuY2xhc3NOYW1lKyIgIikucmVwbGFjZSgiICIrRysiICIsIiAiKSl9LGw9ZnVuY3Rpb24oRil7cmV0dXJuKC9BcnJheS8pLnRlc3QoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEYpKX0sQz1mdW5jdGlvbihGKXtyZXR1cm4oL0RhdGUvKS50ZXN0KE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChGKSkmJiFpc05hTihGLmdldFRpbWUoKSl9LHA9ZnVuY3Rpb24oRyl7dmFyIEY9Ry5nZXREYXkoKTtyZXR1cm4gRj09PTB8fEY9PT02fSxnPWZ1bmN0aW9uKEYpe3JldHVybiBGJTQ9PT0wJiZGJTEwMCE9PTB8fEYlNDAwPT09MH0sYz1mdW5jdGlvbihGLEcpe3JldHVyblszMSxnKEYpPzI5OjI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXVtHXX0sQT1mdW5jdGlvbihGKXtpZihDKEYpKXtGLnNldEhvdXJzKDAsMCwwLDApfX0scj1mdW5jdGlvbihHLEYpe3JldHVybiBHLmdldFRpbWUoKT09PUYuZ2V0VGltZSgpfSx5PWZ1bmN0aW9uKEosSSxGKXt2YXIgSCxHO2ZvcihIIGluIEkpe0c9SltIXSE9PXVuZGVmaW5lZDtpZihHJiZ0eXBlb2YgSVtIXT09PSJvYmplY3QiJiZJW0hdIT09bnVsbCYmSVtIXS5ub2RlTmFtZT09PXVuZGVmaW5lZCl7aWYoQyhJW0hdKSl7aWYoRil7SltIXT1uZXcgRGF0ZShJW0hdLmdldFRpbWUoKSl9fWVsc2V7aWYobChJW0hdKSl7aWYoRil7SltIXT1JW0hdLnNsaWNlKDApfX1lbHNle0pbSF09eSh7fSxJW0hdLEYpfX19ZWxzZXtpZihGfHwhRyl7SltIXT1JW0hdfX19cmV0dXJuIEp9LGk9ZnVuY3Rpb24oRil7aWYoRi5tb250aDwwKXtGLnllYXItPU1hdGguY2VpbChNYXRoLmFicyhGLm1vbnRoKS8xMik7Ri5tb250aCs9MTJ9aWYoRi5tb250aD4xMSl7Ri55ZWFyKz1NYXRoLmZsb29yKE1hdGguYWJzKEYubW9udGgpLzEyKTtGLm1vbnRoLT0xMn1yZXR1cm4gRn0saz17ZmllbGQ6bnVsbCxib3VuZDp1bmRlZmluZWQscG9zaXRpb246ImJvdHRvbSBsZWZ0IixyZXBvc2l0aW9uOnRydWUsZm9ybWF0OiJZWVlZLU1NLUREIixkZWZhdWx0RGF0ZTpudWxsLHNldERlZmF1bHREYXRlOmZhbHNlLGZpcnN0RGF5OjAsbWluRGF0ZTpudWxsLG1heERhdGU6bnVsbCx5ZWFyUmFuZ2U6MTAsc2hvd1dlZWtOdW1iZXI6ZmFsc2UsbWluWWVhcjowLG1heFllYXI6OTk5OSxtaW5Nb250aDp1bmRlZmluZWQsbWF4TW9udGg6dW5kZWZpbmVkLGlzUlRMOmZhbHNlLHllYXJTdWZmaXg6IiIsc2hvd01vbnRoQWZ0ZXJZZWFyOmZhbHNlLG51bWJlck9mTW9udGhzOjEsbWFpbkNhbGVuZGFyOiJsZWZ0Iixjb250YWluZXI6dW5kZWZpbmVkLGkxOG46e3ByZXZpb3VzTW9udGg6IlByZXZpb3VzIE1vbnRoIixuZXh0TW9udGg6Ik5leHQgTW9udGgiLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sd2Vla2RheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHdlZWtkYXlzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXX0sb25TZWxlY3Q6bnVsbCxvbk9wZW46bnVsbCxvbkNsb3NlOm51bGwsb25EcmF3Om51bGx9LEQ9ZnVuY3Rpb24oSCxGLEcpe0YrPUguZmlyc3REYXk7d2hpbGUoRj49Nyl7Ri09N31yZXR1cm4gRz9ILmkxOG4ud2Vla2RheXNTaG9ydFtGXTpILmkxOG4ud2Vla2RheXNbRl19LHY9ZnVuY3Rpb24oTCxHLE0sSSxKLEgsSyl7aWYoSyl7cmV0dXJuJzx0ZCBjbGFzcz0iaXMtZW1wdHkiPjwvdGQ+J312YXIgRj1bXTtpZihIKXtGLnB1c2goImlzLWRpc2FibGVkIil9aWYoSil7Ri5wdXNoKCJpcy10b2RheSIpfWlmKEkpe0YucHVzaCgiaXMtc2VsZWN0ZWQiKX1yZXR1cm4nPHRkIGRhdGEtZGF5PSInK0wrJyIgY2xhc3M9IicrRi5qb2luKCIgIikrJyI+PGJ1dHRvbiBjbGFzcz0icGlrYS1idXR0b24gcGlrYS1kYXkiIHR5cGU9ImJ1dHRvbiIgZGF0YS1waWthLXllYXI9IicrTSsnIiBkYXRhLXBpa2EtbW9udGg9IicrRysnIiBkYXRhLXBpa2EtZGF5PSInK0wrJyI+JytMKyI8L2J1dHRvbj48L3RkPiJ9LGY9ZnVuY3Rpb24oSSxGLEope3ZhciBIPW5ldyBEYXRlKEosMCwxKSxHPU1hdGguY2VpbCgoKChuZXcgRGF0ZShKLEYsSSktSCkvODY0MDAwMDApK0guZ2V0RGF5KCkrMSkvNyk7cmV0dXJuJzx0ZCBjbGFzcz0icGlrYS13ZWVrIj4nK0crIjwvdGQ+In0sZT1mdW5jdGlvbihHLEYpe3JldHVybiI8dHI+IisoRj9HLnJldmVyc2UoKTpHKS5qb2luKCIiKSsiPC90cj4ifSxiPWZ1bmN0aW9uKEYpe3JldHVybiI8dGJvZHk+IitGLmpvaW4oIiIpKyI8L3Rib2R5PiJ9LHo9ZnVuY3Rpb24oSCl7dmFyIEcsRj1bXTtpZihILnNob3dXZWVrTnVtYmVyKXtGLnB1c2goIjx0aD48L3RoPiIpfWZvcihHPTA7Rzw3O0crKyl7Ri5wdXNoKCc8dGggc2NvcGU9ImNvbCI+PGFiYnIgdGl0bGU9IicrRChILEcpKyciPicrRChILEcsdHJ1ZSkrIjwvYWJicj48L3RoPiIpfXJldHVybiI8dGhlYWQ+IisoSC5pc1JUTD9GLnJldmVyc2UoKTpGKS5qb2luKCIiKSsiPC90aGVhZD4ifSx0PWZ1bmN0aW9uKFQsUSxSLFAsVil7dmFyIEwsSixPLEssRj1ULl9vLEk9Uj09PUYubWluWWVhcixVPVI9PT1GLm1heFllYXIsTj0nPGRpdiBjbGFzcz0icGlrYS10aXRsZSI+JyxILFMsRz10cnVlLE09dHJ1ZTtmb3IoTz1bXSxMPTA7TDwxMjtMKyspe08ucHVzaCgnPG9wdGlvbiB2YWx1ZT0iJysoUj09PVY/TC1ROjEyK0wtUSkrJyInKyhMPT09UD8iIHNlbGVjdGVkIjoiIikrKChJJiZMPEYubWluTW9udGgpfHwoVSYmTD5GLm1heE1vbnRoKT8iZGlzYWJsZWQiOiIiKSsiPiIrRi5pMThuLm1vbnRoc1tMXSsiPC9vcHRpb24+Iil9SD0nPGRpdiBjbGFzcz0icGlrYS1sYWJlbCI+PHNlbGVjdCBjbGFzcz0icGlrYS1zZWxlY3QgcGlrYS1zZWxlY3QtbW9udGgiPicrTy5qb2luKCIiKSsiPC9zZWxlY3Q+PC9kaXY+IjtpZihsKEYueWVhclJhbmdlKSl7TD1GLnllYXJSYW5nZVswXTtKPUYueWVhclJhbmdlWzFdKzF9ZWxzZXtMPVItRi55ZWFyUmFuZ2U7Sj0xK1IrRi55ZWFyUmFuZ2V9Zm9yKE89W107TDxKJiZMPD1GLm1heFllYXI7TCsrKXtpZihMPj1GLm1pblllYXIpe08ucHVzaCgnPG9wdGlvbiB2YWx1ZT0iJytMKyciJysoTD09PVI/IiBzZWxlY3RlZCI6IiIpKyI+IisoTCkrIjwvb3B0aW9uPiIpfX1TPSc8ZGl2IGNsYXNzPSJwaWthLWxhYmVsIj48c2VsZWN0IGNsYXNzPSJwaWthLXNlbGVjdCBwaWthLXNlbGVjdC15ZWFyIj4nK08uam9pbigiIikrIjwvc2VsZWN0PjwvZGl2PiI7aWYoRi5zaG93TW9udGhBZnRlclllYXIpe04rPVMrSH1lbHNle04rPUgrU31pZihJJiYoUD09PTB8fEYubWluTW9udGg+PVApKXtHPWZhbHNlfWlmKFUmJihQPT09MTF8fEYubWF4TW9udGg8PVApKXtNPWZhbHNlfWlmKFE9PT0wKXtLPUYuaTE4bi5wcmV2aW91c01vbnRoO04rPSc8YnV0dG9uIGNsYXNzPSJwaWthLXByZXYnKyhHPyIiOiIgaXMtZGlzYWJsZWQiKSsnIiB0eXBlPSJidXR0b24iIHRpdGxlPSInK0srJyI+JytLKyI8L2J1dHRvbj4ifWlmKFE9PT0oVC5fby5udW1iZXJPZk1vbnRocy0xKSl7Sz1GLmkxOG4ubmV4dE1vbnRoO04rPSc8YnV0dG9uIGNsYXNzPSJwaWthLW5leHQnKyhNPyIiOiIgaXMtZGlzYWJsZWQiKSsnIiB0eXBlPSJidXR0b24iIHRpdGxlPSInK0srJyI+JytLKyI8L2J1dHRvbj4ifXJldHVybiBOKz0iPC9kaXY+In0sbz1mdW5jdGlvbihGLEcpe3JldHVybic8dGFibGUgY2xhc3M9InBpa2EtdGFibGUiPicreihGKStiKEcpKyI8L3RhYmxlPiJ9LGg9ZnVuY3Rpb24oSCl7dmFyIEY9dGhpcyxJPUYuY29uZmlnKEgpO0YuX29uTW91c2VEb3duPWZ1bmN0aW9uKEspe2lmKCFGLl92KXtyZXR1cm59Sz1LfHx3aW5kb3cuZXZlbnQ7dmFyIEo9Sy50YXJnZXR8fEsuc3JjRWxlbWVudDtpZighSil7cmV0dXJufWlmKCFhKEosImlzLWRpc2FibGVkIikpe2lmKGEoSiwicGlrYS1idXR0b24iKSYmIWEoSiwiaXMtZW1wdHkiKSl7Ri5zZXREYXkobmV3IERhdGUoSi5nZXRBdHRyaWJ1dGUoImRhdGEtcGlrYS15ZWFyIiksSi5nZXRBdHRyaWJ1dGUoImRhdGEtcGlrYS1tb250aCIpLEouZ2V0QXR0cmlidXRlKCJkYXRhLXBpa2EtZGF5IikpLGZhbHNlKTtpZihJLmJvdW5kKXt1KGZ1bmN0aW9uKCl7Ri5oaWRlKCk7aWYoSS5maWVsZCl7SS5maWVsZC5ibHVyKCl9fSwxMDApfXJldHVybn1lbHNle2lmKGEoSiwicGlrYS1wcmV2Iikpe0YucHJldk1vbnRoKCl9ZWxzZXtpZihhKEosInBpa2EtbmV4dCIpKXtGLm5leHRNb250aCgpfX19fWlmKCFhKEosInBpa2Etc2VsZWN0Iikpe2lmKEsucHJldmVudERlZmF1bHQpe0sucHJldmVudERlZmF1bHQoKX1lbHNle0sucmV0dXJuVmFsdWU9ZmFsc2U7cmV0dXJuIGZhbHNlfX1lbHNle0YuX2M9dHJ1ZX19O0YuX29uQ2hhbmdlPWZ1bmN0aW9uKEspe0s9S3x8d2luZG93LmV2ZW50O3ZhciBKPUsudGFyZ2V0fHxLLnNyY0VsZW1lbnQ7aWYoIUope3JldHVybn1pZihhKEosInBpa2Etc2VsZWN0LW1vbnRoIikpe0YuZ290b01vbnRoKEoudmFsdWUpfWVsc2V7aWYoYShKLCJwaWthLXNlbGVjdC15ZWFyIikpe0YuZ290b1llYXIoSi52YWx1ZSl9fX07Ri5fb25JbnB1dENoYW5nZT1mdW5jdGlvbihLKXt2YXIgSjtpZihLLmZpcmVkQnk9PT1GKXtyZXR1cm59aWYoail7Sj1CKEkuZmllbGQudmFsdWUsSS5mb3JtYXQpO0o9KEomJkouaXNWYWxpZCgpKT9KLnRvRGF0ZSgpOm51bGx9ZWxzZXtKPW5ldyBEYXRlKERhdGUucGFyc2UoSS5maWVsZC52YWx1ZSkpfUYuc2V0RGF0ZShDKEopP0o6bnVsbCk7aWYoIUYuX3Ype0Yuc2hvdygpfX07Ri5fb25JbnB1dEZvY3VzPWZ1bmN0aW9uKCl7Ri5zaG93KCl9O0YuX29uSW5wdXRDbGljaz1mdW5jdGlvbigpe0Yuc2hvdygpfTtGLl9vbklucHV0Qmx1cj1mdW5jdGlvbigpe3ZhciBKPXEuYWN0aXZlRWxlbWVudDtkb3tpZihhKEosInBpa2Etc2luZ2xlIikpe3JldHVybn19d2hpbGUoKEo9Si5wYXJlbnROb2RlKSk7aWYoIUYuX2Mpe0YuX2I9dShmdW5jdGlvbigpe0YuaGlkZSgpfSw1MCl9Ri5fYz1mYWxzZX07Ri5fb25DbGljaz1mdW5jdGlvbihLKXtLPUt8fHdpbmRvdy5ldmVudDt2YXIgSj1LLnRhcmdldHx8Sy5zcmNFbGVtZW50LEw9SjtpZighSil7cmV0dXJufWlmKCFkJiZhKEosInBpa2Etc2VsZWN0Iikpe2lmKCFKLm9uY2hhbmdlKXtKLnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCJyZXR1cm47Iik7cyhKLCJjaGFuZ2UiLEYuX29uQ2hhbmdlKX19ZG97aWYoYShMLCJwaWthLXNpbmdsZSIpfHxMPT09SS50cmlnZ2VyKXtyZXR1cm59fXdoaWxlKChMPUwucGFyZW50Tm9kZSkpO2lmKEYuX3YmJkohPT1JLnRyaWdnZXImJkwhPT1JLnRyaWdnZXIpe0YuaGlkZSgpfX07Ri5lbD1xLmNyZWF0ZUVsZW1lbnQoImRpdiIpO0YuZWwuY2xhc3NOYW1lPSJwaWthLXNpbmdsZSIrKEkuaXNSVEw/IiBpcy1ydGwiOiIiKTtzKEYuZWwsIm1vdXNlZG93biIsRi5fb25Nb3VzZURvd24sdHJ1ZSk7cyhGLmVsLCJjaGFuZ2UiLEYuX29uQ2hhbmdlKTtpZihJLmZpZWxkKXtpZihJLmNvbnRhaW5lcil7SS5jb250YWluZXIuYXBwZW5kQ2hpbGQoRi5lbCl9ZWxzZXtpZihJLmJvdW5kKXtxLmJvZHkuYXBwZW5kQ2hpbGQoRi5lbCl9ZWxzZXtJLmZpZWxkLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKEYuZWwsSS5maWVsZC5uZXh0U2libGluZyl9fXMoSS5maWVsZCwiY2hhbmdlIixGLl9vbklucHV0Q2hhbmdlKTtpZighSS5kZWZhdWx0RGF0ZSl7aWYoaiYmSS5maWVsZC52YWx1ZSl7SS5kZWZhdWx0RGF0ZT1CKEkuZmllbGQudmFsdWUsSS5mb3JtYXQpLnRvRGF0ZSgpfWVsc2V7SS5kZWZhdWx0RGF0ZT1uZXcgRGF0ZShEYXRlLnBhcnNlKEkuZmllbGQudmFsdWUpKX1JLnNldERlZmF1bHREYXRlPXRydWV9fXZhciBHPUkuZGVmYXVsdERhdGU7aWYoQyhHKSl7aWYoSS5zZXREZWZhdWx0RGF0ZSl7Ri5zZXREYXRlKEcsdHJ1ZSl9ZWxzZXtGLmdvdG9EYXRlKEcpfX1lbHNle0YuZ290b0RhdGUobmV3IERhdGUoKSl9aWYoSS5ib3VuZCl7dGhpcy5oaWRlKCk7Ri5lbC5jbGFzc05hbWUrPSIgaXMtYm91bmQiO3MoSS50cmlnZ2VyLCJjbGljayIsRi5fb25JbnB1dENsaWNrKTtzKEkudHJpZ2dlciwiZm9jdXMiLEYuX29uSW5wdXRGb2N1cyk7cyhJLnRyaWdnZXIsImJsdXIiLEYuX29uSW5wdXRCbHVyKX1lbHNle3RoaXMuc2hvdygpfX07aC5wcm90b3R5cGU9e2NvbmZpZzpmdW5jdGlvbihHKXtpZighdGhpcy5fbyl7dGhpcy5fbz15KHt9LGssdHJ1ZSl9dmFyIEg9eSh0aGlzLl9vLEcsdHJ1ZSk7SC5pc1JUTD0hIUguaXNSVEw7SC5maWVsZD0oSC5maWVsZCYmSC5maWVsZC5ub2RlTmFtZSk/SC5maWVsZDpudWxsO0guYm91bmQ9ISEoSC5ib3VuZCE9PXVuZGVmaW5lZD9ILmZpZWxkJiZILmJvdW5kOkguZmllbGQpO0gudHJpZ2dlcj0oSC50cmlnZ2VyJiZILnRyaWdnZXIubm9kZU5hbWUpP0gudHJpZ2dlcjpILmZpZWxkO0guZGlzYWJsZVdlZWtlbmRzPSEhSC5kaXNhYmxlV2Vla2VuZHM7SC5kaXNhYmxlRGF5Rm49KHR5cGVvZiBILmRpc2FibGVEYXlGbik9PSJmdW5jdGlvbiI/SC5kaXNhYmxlRGF5Rm46bnVsbDt2YXIgRj1wYXJzZUludChILm51bWJlck9mTW9udGhzLDEwKXx8MTtILm51bWJlck9mTW9udGhzPUY+ND80OkY7aWYoIUMoSC5taW5EYXRlKSl7SC5taW5EYXRlPWZhbHNlfWlmKCFDKEgubWF4RGF0ZSkpe0gubWF4RGF0ZT1mYWxzZX1pZigoSC5taW5EYXRlJiZILm1heERhdGUpJiZILm1heERhdGU8SC5taW5EYXRlKXtILm1heERhdGU9SC5taW5EYXRlPWZhbHNlfWlmKEgubWluRGF0ZSl7QShILm1pbkRhdGUpO0gubWluWWVhcj1ILm1pbkRhdGUuZ2V0RnVsbFllYXIoKTtILm1pbk1vbnRoPUgubWluRGF0ZS5nZXRNb250aCgpfWlmKEgubWF4RGF0ZSl7QShILm1heERhdGUpO0gubWF4WWVhcj1ILm1heERhdGUuZ2V0RnVsbFllYXIoKTtILm1heE1vbnRoPUgubWF4RGF0ZS5nZXRNb250aCgpfWlmKGwoSC55ZWFyUmFuZ2UpKXt2YXIgST1uZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCktMTA7SC55ZWFyUmFuZ2VbMF09cGFyc2VJbnQoSC55ZWFyUmFuZ2VbMF0sMTApfHxJO0gueWVhclJhbmdlWzFdPXBhcnNlSW50KEgueWVhclJhbmdlWzFdLDEwKXx8SX1lbHNle0gueWVhclJhbmdlPU1hdGguYWJzKHBhcnNlSW50KEgueWVhclJhbmdlLDEwKSl8fGsueWVhclJhbmdlO2lmKEgueWVhclJhbmdlPjEwMCl7SC55ZWFyUmFuZ2U9MTAwfX1yZXR1cm4gSH0sdG9TdHJpbmc6ZnVuY3Rpb24oRil7cmV0dXJuICFDKHRoaXMuX2QpPyIiOmo/Qih0aGlzLl9kKS5mb3JtYXQoRnx8dGhpcy5fby5mb3JtYXQpOnRoaXMuX2QudG9EYXRlU3RyaW5nKCl9LGdldE1vbWVudDpmdW5jdGlvbigpe3JldHVybiBqP0IodGhpcy5fZCk6bnVsbH0sc2V0TW9tZW50OmZ1bmN0aW9uKEYsRyl7aWYoaiYmQi5pc01vbWVudChGKSl7dGhpcy5zZXREYXRlKEYudG9EYXRlKCksRyl9fSxnZXREYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIEModGhpcy5fZCk/bmV3IERhdGUodGhpcy5fZC5nZXRUaW1lKCkpOm51bGx9LHNldERhdGU6ZnVuY3Rpb24oRyxJKXtpZighRyl7dGhpcy5fZD1udWxsO2lmKHRoaXMuX28uZmllbGQpe3RoaXMuX28uZmllbGQudmFsdWU9IiI7RSh0aGlzLl9vLmZpZWxkLCJjaGFuZ2UiLHtmaXJlZEJ5OnRoaXN9KX1yZXR1cm4gdGhpcy5kcmF3KCl9aWYodHlwZW9mIEc9PT0ic3RyaW5nIil7Rz1uZXcgRGF0ZShEYXRlLnBhcnNlKEcpKX1pZighQyhHKSl7cmV0dXJufXZhciBIPXRoaXMuX28ubWluRGF0ZSxGPXRoaXMuX28ubWF4RGF0ZTtpZihDKEgpJiZHPEgpe0c9SH1lbHNle2lmKEMoRikmJkc+Ril7Rz1GfX12YXIgSj1uZXcgRGF0ZShHLmdldFRpbWUoKSk7QShKKTt0aGlzLmdvdG9EYXRlKEopO3RoaXMuX2Q9bmV3IERhdGUoRy5nZXRUaW1lKCkpO2lmKHRoaXMuX28uZmllbGQpe3RoaXMuX28uZmllbGQudmFsdWU9dGhpcy50b1N0cmluZygpO0UodGhpcy5fby5maWVsZCwiY2hhbmdlIix7ZmlyZWRCeTp0aGlzfSl9aWYoIUkmJnR5cGVvZiB0aGlzLl9vLm9uU2VsZWN0PT09ImZ1bmN0aW9uIil7dGhpcy5fby5vblNlbGVjdC5jYWxsKHRoaXMsdGhpcy5nZXREYXRlKCkpfX0sc2V0RGF5OmZ1bmN0aW9uKEcsSCl7aWYodGhpcy5fZCl7dmFyIEY9Ry5nZXRUaW1lKCktdGhpcy5fZC5nZXRUaW1lem9uZU9mZnNldCgpKjYwMDAwK3RoaXMuX2QuZ2V0VGltZSgpJTg2NDAwMDAwO0cuc2V0VGltZShGKX10aGlzLnNldERhdGUoRyxIKX0sZ290b0RhdGU6ZnVuY3Rpb24oSCl7dmFyIEc9dHJ1ZTtpZighQyhIKSl7cmV0dXJufWlmKHRoaXMuY2FsZW5kYXJzKXt2YXIgSj1uZXcgRGF0ZSh0aGlzLmNhbGVuZGFyc1swXS55ZWFyLHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoLDEpLEY9bmV3IERhdGUodGhpcy5jYWxlbmRhcnNbdGhpcy5jYWxlbmRhcnMubGVuZ3RoLTFdLnllYXIsdGhpcy5jYWxlbmRhcnNbdGhpcy5jYWxlbmRhcnMubGVuZ3RoLTFdLm1vbnRoLDEpLEk9SC5nZXRUaW1lKCk7Ri5zZXRNb250aChGLmdldE1vbnRoKCkrMSk7Ri5zZXREYXRlKEYuZ2V0RGF0ZSgpLTEpO0c9KEk8Si5nZXRUaW1lKCl8fEYuZ2V0VGltZSgpPEkpfWlmKEcpe3RoaXMuY2FsZW5kYXJzPVt7bW9udGg6SC5nZXRNb250aCgpLHllYXI6SC5nZXRGdWxsWWVhcigpfV07aWYodGhpcy5fby5tYWluQ2FsZW5kYXI9PT0icmlnaHQiKXt0aGlzLmNhbGVuZGFyc1swXS5tb250aCs9MS10aGlzLl9vLm51bWJlck9mTW9udGhzfX10aGlzLmFkanVzdENhbGVuZGFycygpfSxhZGp1c3RDYWxlbmRhcnM6ZnVuY3Rpb24oKXt0aGlzLmNhbGVuZGFyc1swXT1pKHRoaXMuY2FsZW5kYXJzWzBdKTtmb3IodmFyIEY9MTtGPHRoaXMuX28ubnVtYmVyT2ZNb250aHM7RisrKXt0aGlzLmNhbGVuZGFyc1tGXT1pKHttb250aDp0aGlzLmNhbGVuZGFyc1swXS5tb250aCtGLHllYXI6dGhpcy5jYWxlbmRhcnNbMF0ueWVhcn0pfXRoaXMuZHJhdygpfSxnb3RvVG9kYXk6ZnVuY3Rpb24oKXt0aGlzLmdvdG9EYXRlKG5ldyBEYXRlKCkpfSxnb3RvTW9udGg6ZnVuY3Rpb24oRil7aWYoIWlzTmFOKEYpKXt0aGlzLmNhbGVuZGFyc1swXS5tb250aD1wYXJzZUludChGLDEwKTt0aGlzLmFkanVzdENhbGVuZGFycygpfX0sbmV4dE1vbnRoOmZ1bmN0aW9uKCl7dGhpcy5jYWxlbmRhcnNbMF0ubW9udGgrKzt0aGlzLmFkanVzdENhbGVuZGFycygpfSxwcmV2TW9udGg6ZnVuY3Rpb24oKXt0aGlzLmNhbGVuZGFyc1swXS5tb250aC0tO3RoaXMuYWRqdXN0Q2FsZW5kYXJzKCl9LGdvdG9ZZWFyOmZ1bmN0aW9uKEYpe2lmKCFpc05hTihGKSl7dGhpcy5jYWxlbmRhcnNbMF0ueWVhcj1wYXJzZUludChGLDEwKTt0aGlzLmFkanVzdENhbGVuZGFycygpfX0sc2V0TWluRGF0ZTpmdW5jdGlvbihGKXt0aGlzLl9vLm1pbkRhdGU9Rn0sc2V0TWF4RGF0ZTpmdW5jdGlvbihGKXt0aGlzLl9vLm1heERhdGU9Rn0sZHJhdzpmdW5jdGlvbihHKXtpZighdGhpcy5fdiYmIUcpe3JldHVybn12YXIgRj10aGlzLl9vLE09Ri5taW5ZZWFyLEo9Ri5tYXhZZWFyLEs9Ri5taW5Nb250aCxIPUYubWF4TW9udGgsST0iIjtpZih0aGlzLl95PD1NKXt0aGlzLl95PU07aWYoIWlzTmFOKEspJiZ0aGlzLl9tPEspe3RoaXMuX209S319aWYodGhpcy5feT49Sil7dGhpcy5feT1KO2lmKCFpc05hTihIKSYmdGhpcy5fbT5IKXt0aGlzLl9tPUh9fWZvcih2YXIgTD0wO0w8Ri5udW1iZXJPZk1vbnRocztMKyspe0krPSc8ZGl2IGNsYXNzPSJwaWthLWxlbmRhciI+Jyt0KHRoaXMsTCx0aGlzLmNhbGVuZGFyc1tMXS55ZWFyLHRoaXMuY2FsZW5kYXJzW0xdLm1vbnRoLHRoaXMuY2FsZW5kYXJzWzBdLnllYXIpK3RoaXMucmVuZGVyKHRoaXMuY2FsZW5kYXJzW0xdLnllYXIsdGhpcy5jYWxlbmRhcnNbTF0ubW9udGgpKyI8L2Rpdj4ifXRoaXMuZWwuaW5uZXJIVE1MPUk7aWYoRi5ib3VuZCl7aWYoRi5maWVsZC50eXBlIT09ImhpZGRlbiIpe3UoZnVuY3Rpb24oKXtGLnRyaWdnZXIuZm9jdXMoKX0sMSl9fWlmKHR5cGVvZiB0aGlzLl9vLm9uRHJhdz09PSJmdW5jdGlvbiIpe3ZhciBOPXRoaXM7dShmdW5jdGlvbigpe04uX28ub25EcmF3LmNhbGwoTil9LDApfX0sYWRqdXN0UG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzLl9vLmNvbnRhaW5lcil7cmV0dXJufXZhciBOPXRoaXMuX28udHJpZ2dlcixMPU4sRz10aGlzLmVsLm9mZnNldFdpZHRoLE89dGhpcy5lbC5vZmZzZXRIZWlnaHQsSz13aW5kb3cuaW5uZXJXaWR0aHx8cS5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsSj13aW5kb3cuaW5uZXJIZWlnaHR8fHEuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCxIPXdpbmRvdy5wYWdlWU9mZnNldHx8cS5ib2R5LnNjcm9sbFRvcHx8cS5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wLEksTSxGO2lmKHR5cGVvZiBOLmdldEJvdW5kaW5nQ2xpZW50UmVjdD09PSJmdW5jdGlvbiIpe0Y9Ti5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtJPUYubGVmdCt3aW5kb3cucGFnZVhPZmZzZXQ7TT1GLmJvdHRvbSt3aW5kb3cucGFnZVlPZmZzZXR9ZWxzZXtJPUwub2Zmc2V0TGVmdDtNPUwub2Zmc2V0VG9wK0wub2Zmc2V0SGVpZ2h0O3doaWxlKChMPUwub2Zmc2V0UGFyZW50KSl7SSs9TC5vZmZzZXRMZWZ0O00rPUwub2Zmc2V0VG9wfX1pZigodGhpcy5fby5yZXBvc2l0aW9uJiZJK0c+Syl8fCh0aGlzLl9vLnBvc2l0aW9uLmluZGV4T2YoInJpZ2h0Iik+LTEmJkktRytOLm9mZnNldFdpZHRoPjApKXtJPUktRytOLm9mZnNldFdpZHRofWlmKCh0aGlzLl9vLnJlcG9zaXRpb24mJk0rTz5KK0gpfHwodGhpcy5fby5wb3NpdGlvbi5pbmRleE9mKCJ0b3AiKT4tMSYmTS1PLU4ub2Zmc2V0SGVpZ2h0PjApKXtNPU0tTy1OLm9mZnNldEhlaWdodH10aGlzLmVsLnN0eWxlLmNzc1RleHQ9WyJwb3NpdGlvbjogYWJzb2x1dGUiLCJsZWZ0OiAiK0krInB4IiwidG9wOiAiK00rInB4Il0uam9pbigiOyIpfSxyZW5kZXI6ZnVuY3Rpb24oUCxPKXt2YXIgRz10aGlzLl9vLEo9bmV3IERhdGUoKSxUPWMoUCxPKSxSPW5ldyBEYXRlKFAsTywxKS5nZXREYXkoKSxNPVtdLFY9W107QShKKTtpZihHLmZpcnN0RGF5PjApe1ItPUcuZmlyc3REYXk7aWYoUjwwKXtSKz03fX12YXIgVT1UK1IsSD1VO3doaWxlKEg+Nyl7SC09N31VKz03LUg7Zm9yKHZhciBMPTAsRj0wO0w8VTtMKyspe3ZhciBRPW5ldyBEYXRlKFAsTywxKyhMLVIpKSxJPUModGhpcy5fZCk/cihRLHRoaXMuX2QpOmZhbHNlLE49cihRLEopLEs9TDxSfHxMPj0oVCtSKSxTPShHLm1pbkRhdGUmJlE8Ry5taW5EYXRlKXx8KEcubWF4RGF0ZSYmUT5HLm1heERhdGUpfHwoRy5kaXNhYmxlV2Vla2VuZHMmJnAoUSkpfHwoRy5kaXNhYmxlRGF5Rm4mJkcuZGlzYWJsZURheUZuKFEpKTtWLnB1c2godigxKyhMLVIpLE8sUCxJLE4sUyxLKSk7aWYoKytGPT09Nyl7aWYoRy5zaG93V2Vla051bWJlcil7Vi51bnNoaWZ0KGYoTC1SLE8sUCkpfU0ucHVzaChlKFYsRy5pc1JUTCkpO1Y9W107Rj0wfX1yZXR1cm4gbyhHLE0pfSxpc1Zpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdn0sc2hvdzpmdW5jdGlvbigpe2lmKCF0aGlzLl92KXtuKHRoaXMuZWwsImlzLWhpZGRlbiIpO3RoaXMuX3Y9dHJ1ZTt0aGlzLmRyYXcoKTtpZih0aGlzLl9vLmJvdW5kKXtzKHEsImNsaWNrIix0aGlzLl9vbkNsaWNrKTt0aGlzLmFkanVzdFBvc2l0aW9uKCl9aWYodHlwZW9mIHRoaXMuX28ub25PcGVuPT09ImZ1bmN0aW9uIil7dGhpcy5fby5vbk9wZW4uY2FsbCh0aGlzKX19fSxoaWRlOmZ1bmN0aW9uKCl7dmFyIEY9dGhpcy5fdjtpZihGIT09ZmFsc2Upe2lmKHRoaXMuX28uYm91bmQpe3cocSwiY2xpY2siLHRoaXMuX29uQ2xpY2spfXRoaXMuZWwuc3R5bGUuY3NzVGV4dD0iIjttKHRoaXMuZWwsImlzLWhpZGRlbiIpO3RoaXMuX3Y9ZmFsc2U7aWYoRiE9PXVuZGVmaW5lZCYmdHlwZW9mIHRoaXMuX28ub25DbG9zZT09PSJmdW5jdGlvbiIpe3RoaXMuX28ub25DbG9zZS5jYWxsKHRoaXMpfX19LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmhpZGUoKTt3KHRoaXMuZWwsIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZURvd24sdHJ1ZSk7dyh0aGlzLmVsLCJjaGFuZ2UiLHRoaXMuX29uQ2hhbmdlKTtpZih0aGlzLl9vLmZpZWxkKXt3KHRoaXMuX28uZmllbGQsImNoYW5nZSIsdGhpcy5fb25JbnB1dENoYW5nZSk7aWYodGhpcy5fby5ib3VuZCl7dyh0aGlzLl9vLnRyaWdnZXIsImNsaWNrIix0aGlzLl9vbklucHV0Q2xpY2spO3codGhpcy5fby50cmlnZ2VyLCJmb2N1cyIsdGhpcy5fb25JbnB1dEZvY3VzKTt3KHRoaXMuX28udHJpZ2dlciwiYmx1ciIsdGhpcy5fb25JbnB1dEJsdXIpfX1pZih0aGlzLmVsLnBhcmVudE5vZGUpe3RoaXMuZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmVsKX19fTtyZXR1cm4gaH0pKTs=]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddPSdUb3VybmFtZW50cyc7CiRsYW5nWydwb3N0aW5zdGFsbCddPSdUb3VybmFtZW50IG1vZHVsZSBoYXMgYmVlbiBpbnN0YWxsZWQuIFJlbWVtYmVyIHRvIGFwcGx5IHJlbGV2YW50IHBlcm1pc3Npb25zLic7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ109J1RvdXJuYW1lbnQgbW9kdWxlIGhhcyBiZWVuIHVuaW5zdGFsbGVkLic7CiRsYW5nWydjb25maXJtX3VuaW5zdGFsbCddPSdZb3VcJ3JlIHN1cmUgeW91IHdhbnQgdG8gdW5pbnN0YWxsIHRoZSBUb3VybmFtZW50IG1vZHVsZT8nOwokbGFuZ1sndW5pbnN0YWxsZWQnXT0nTW9kdWxlIHVuaW5zdGFsbGVkLic7CiRsYW5nWydpbnN0YWxsZWQnXT0nTW9kdWxlIHZlcnNpb24gJXMgaW5zdGFsbGVkLic7CiRsYW5nWyd1cGdyYWRlZCddPSdNb2R1bGUgdXBncmFkZWQgdG8gdmVyc2lvbiAlcy4nOwokbGFuZ1snZXJyX3VwZ3JhZGUnXT0nTW9kdWxlIHVwZ3JhZGUgYWJvcnRlZCwgZXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRvICVzJzsKCiRsYW5nWydwZXJtX2FkbWluJ109J01vZGlmeSBUb3VybmFtZW50LW1vZHVsZSBTZXR0aW5ncyc7CiRsYW5nWydwZXJtX21vZCddPSdNb2RpZnkgVG91cm5hbWVudCBCcmFja2V0cyc7CiRsYW5nWydwZXJtX3Njb3JlJ109J01vZGlmeSBUb3VybmFtZW50LUJyYWNrZXQgUmVzdWx0cyc7CiRsYW5nWydwZXJtX3ZpZXcnXT0nVmlldyBUb3VybmFtZW50IEJyYWNrZXRzJzsKCiRsYW5nWydhZG1pbmRlc2NyaXB0aW9uJ109J0FkbWluaXN0ZXIsIGVkaXQsIGNvbmZpZ3VyZSB0b3VybmFtZW50cyc7CiRsYW5nWydsYWNrcGVybWlzc2lvbiddPSdZb3UgYXJlIG5vdCBhdXRob3Jpc2VkIHRvIGRvIHRoYXQuJzsKCiRsYW5nWyd0ZWxsYWRtaW4nXSA9ICdQbGVhc2UgYWR2aXNlIHlvdXIgc2l0ZSBhZG1pbmlzdHJhdG9yLic7CgokbGFuZ1snZXJyX2FqYXgnXT0nU2VydmVyIENvbW11bmljYXRpb24gRXJyb3InOwokbGFuZ1snZXJyX2NoYXJ0J109J0NoYXJ0IGNyZWF0aW9uIGZhaWxlZCc7Ci8vJGxhbmdbJ2Vycl9kYXRhJ109J0RhdGEgcHJvY2Vzc2luZyBlcnJvcic7CiRsYW5nWydlcnJfZGF0YV90eXBlJ109J0RhdGEgcHJvY2Vzc2luZyBlcnJvcjogJXMnOwokbGFuZ1snZXJyX2V4cG9ydCddPSdBIHByb2JsZW0gb2NjdXJyZWQgZHVyaW5nIHRoZSBleHBvcnQgcHJvY2Vzcyc7IC8vdG9vIHZhZ3VlIQokbGFuZ1snZXJyX2xpc3QnXT0nTGlzdCBjcmVhdGlvbiBmYWlsZWQnOwokbGFuZ1snZXJyX21hdGNoJ109J3RlYW0vbWF0Y2ggZGF0YSBlcnJvcic7CiRsYW5nWydlcnJfbWlzc2luZyddPSdDYW5ub3QgZmluZCBhIHJlcXVlc3RlZCB0b3VybmFtZW50JzsKJGxhbmdbJ2Vycl9ub3RpY2UnXT0nQSBwcm9ibGVtIG9jY3VycmVkIGR1cmluZyB0aGUgY29tbXVuaWNhdGlvbiBwcm9jZXNzJzsKJGxhbmdbJ2Vycl9zdHlsZXMnXT0nQ2Fubm90IGZpbmQgc3BlY2lmaWVkIHN0eWxpbmcgZmlsZSc7CiRsYW5nWydlcnJfc3lzdGVtJ109J1N5c3RlbSBlcnJvciEnOwokbGFuZ1snZXJyX3RhZyddPSdJbnZhbGlkIHBhZ2UgZGVmaW5pdGlvbic7CiRsYW5nWydlcnJfdG9rZW4nXT0nZmFpbGVkIHRvIHNhdmUgdG9rZW4nOwokbGFuZ1snZXJyX3RlbXBsYXRlJ109J0Rpc3BsYXktdGVtcGxhdGUgZXJyb3InOwokbGFuZ1snZXJyX3RleHQnXT0nSW52YWxpZCBTTVMgY29udGVudCc7CiRsYW5nWydlcnJfdmFsdWUnXT0nSW52YWxpZCBwYXJhbWV0ZXIgdmFsdWUnOyAKJGxhbmdbJ25vbmFtZSddPSduYW1lIG1pc3NpbmcnOwoKJGxhbmdbJ3RhYl9jb25maWcnXT0nU2V0dGluZ3MnOwokbGFuZ1sndGFiX2dyb3VwcyddPSdHcm91cHMnOwokbGFuZ1sndGFiX2l0ZW1zJ109J1RvdXJuYW1lbnRzJzsKCiRsYW5nWyd0aXRsZV9uYW1lJ109J05hbWUnOwokbGFuZ1sndGl0bGVfdGFnJ109J1BhZ2UgVGFnJzsKJGxhbmdbJ3RpdGxlX3N0YXR1cyddPSdTdGF0dXMnOwokbGFuZ1snc3RhdHVzX25vdHlldCddPSdOb3Qgc3RhcnRlZCc7Ci8vJGxhbmdbJ3N0YXR1c19zdGFydGVkJ109J0luIHByb2dyZXNzJzsKLy9pbiB0aGUgZm9sbG93aW5nLCAlcyB3aWxsIGJlIHJlcGxhY2VkIGJ5ICdtYXRjaCcgb3IgJ21hdGNoZXMnCiRsYW5nWydzdGF0dXNfZ29pbmcnXT0nJWQgJXMgY29tcGxldGUsICVkIHBlbmRpbmcnOwokbGFuZ1snc3RhdHVzX2VuZGVkJ109J0ZpbmlzaGVkJzsKJGxhbmdbJ3N0YXR1c19jb21wbGV0ZSddPSdDb21wbGV0ZWQnOwokbGFuZ1snbm9fdG91cm5leSddID0gJ05vIHRvdXJuYW1lbnQgaXMgcmVjb3JkZWQuJzsKCiRsYW5nWydub19ncm91cHMnXT0nTm90IEFsbG93ZWQnOwokbGFuZ1snYWxsX2dyb3VwcyddPSdBbGwgR3JvdXBzJzsKJGxhbmdbJ2hlbHBfbG9naW4nXT0nQW55IGxvZ2dlZC1pbiB1c2VyIGluIHRoaXMgZ3JvdXAgbWF5IHJlY29yZCBtYXRjaCByZXN1bHRzJzsKCi8vJGxhbmdbJ2FkbWluaXN0ZXInXT0nQWRtaW5pc3Rlcic7CiRsYW5nWydjbG9uZSddPSdDbG9uZSc7CiRsYW5nWydjb3B5J109J0NvcHknOwokbGFuZ1snZGVsZXRlJ109J0RlbGV0ZSc7CiRsYW5nWydleHBvcnQnXT0nRXhwb3J0JzsKJGxhbmdbJ2V4cG9ydHhtbCddPSdFeHBvcnQgWE1MJzsKJGxhbmdbJ2NoYXJ0J109J0NoYXJ0JzsKJGxhbmdbJ3N1Ym1pdCddPSdTdWJtaXQnOwokbGFuZ1snc3VibWl0MiddPSdTdWJtaXQgUmVzdWx0JzsKJGxhbmdbJ2xpc3QnXT0nTGlzdCc7CiRsYW5nWydwcmludCddPSdQcmludCc7CiRsYW5nWydwcmludF90aXAnXT0ncHJlcGFyZSBjaGFydCB3aXRob3V0IG1hdGNoLWxhYmVscyc7CiRsYW5nWydwbGFuJ109J1BsYW4nOwokbGFuZ1sncGxhbl90aXAnXT0nc2hvdyBhbGwgbWF0Y2hlcyc7CiRsYW5nWydhY3R1YWwnXT0nQWN0dWFsJzsKJGxhbmdbJ2FjdHVhbF90aXAnXT0nc2hvdyBwZW5kaW5nIG1hdGNoZXMnOwoKJGxhbmdbJ2NvbmZpcm1fZGVsZXRlJ109J0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgJXM/JzsKJGxhbmdbJ2NvbmZpcm1fZGVsZXRldGhpcyddPSdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgJXM/JzsKLy90aGVzZSBhcmUgZm9yIGluY2x1c2lvbiBpbiB0aGUgYWJvdmUgdGVtcGxhdGUgdG8gY3JlYXRlIGRlbGV0ZS1jb25maXJtYXRpb24gcHJvbXB0cwokbGFuZ1snbWF0Y2hfZGF0YSddPSdhbGwgbWF0Y2ggZGF0YSc7CiRsYW5nWydzZWxfcGxheWVycyddPSdzZWxlY3RlZCBwbGF5ZXJzJzsKJGxhbmdbJ3NlbF90ZWFtcyddPSdzZWxlY3RlZCB0ZWFtcyc7CiRsYW5nWydzZWxfaXRlbXMnXT0nc2VsZWN0ZWQgdG91cm5hbWVudHMnOwokbGFuZ1snc2VsX2dyb3VwcyddPSdzZWxlY3RlZCBncm91cHMnOwoKJGxhbmdbJ2RlbGV0ZWQyJ109J0RlbGV0ZWQgJXMuJzsKLy9mb3IgcmVwbGFjZW1lbnQgc2NvcmUtc3RyaW5nCiRsYW5nWyd0ZWFtZ29uZSddPSdXaXRoZHJldyc7CiRsYW5nWydlZGl0J109J0VkaXQnOwokbGFuZ1snaW1wb3J0J109J0ltcG9ydCc7CiRsYW5nWyd1cGxvYWQnXT0nVXBsb2FkJzsKJGxhbmdbJ3VwZGF0ZSddPSdVcGRhdGUnOwovLyRsYW5nWydleHBvcnRfc2VsZWN0ZWRfcmVjb3JkcyddPSdleHBvcnQgc2VsZWN0ZWQgcmVjb3Jkcyc7CiRsYW5nWydleHBvcnRfdGlwJ109J2V4cG9ydCBkYXRhIGZvciBzZWxlY3RlZCBjb21wZXRpdG9ycyB0byAuY3N2IGZpbGUnOwokbGFuZ1snaW1wb3J0X3RpcCddPSdpbXBvcnQgY29tcGV0aXRvcnMgZGF0YSBmcm9tIHNlbGVjdGVkIC5jc3YgZmlsZSc7CiRsYW5nWydkZWxldGVfdGlwJ109J2RlbGV0ZSBzZWxlY3RlZCBjb21wZXRpdG9ycyc7CiRsYW5nWyd1cGxvYWRfdGlwJ109J3VwbG9hZCBzZWxlY3RlZCBmaWxlIHRvIHdlYnNpdGUgaG9zdCc7CiRsYW5nWyd1cGRhdGVfdGlwJ109J3NhdmUgZGF0YSBmb3Igc2VsZWN0ZWQgcm93cyc7CiRsYW5nWydzdWJtaXRfdGlwJ109J3NlbmQgcmVzdWx0IHRvIHRvdXJuYW1lbnQgbWFuYWdlcic7CiRsYW5nWydlcnJfc2F2ZSddPSdFcnJvciBkdXJpbmcgZGF0YSBzYXZlLic7CgokbGFuZ1sncHJpbnRzZWxfdGlwJ109J2NyZWF0ZSBwbGFpbiBjaGFydCBmb3IgZWFjaCBzZWxlY3RlZCB0b3VybmFtZW50JzsKJGxhbmdbJ25vdGlmeXNlbF90aXAnXT0nc2VuZCBub3RpY2VzIGFib3V0IHNjaGVkdWxlZCBtYXRjaGVzIHRvIHBhcnRpY2lwYW50cyBpbiBzZWxlY3RlZCB0b3VybmFtZW50cyc7CiRsYW5nWydncm91cHNlbF90aXAnXT0ncHV0IHNlbGVjdGVkIHRvdXJuYW1lbnRzIGludG8gYSBncm91cCc7CiRsYW5nWydjbG9uZXNlbF90aXAnXT0nY2xvbmUgc2VsZWN0ZWQgdG91cm5hbWVudHMnOwokbGFuZ1snZGVsZXRlc2VsX3RpcCddPSdkZWxldGUgc2VsZWN0ZWQgdG91cm5hbWVudHMnOwokbGFuZ1snZXhwb3J0c2VsX3RpcCddPSdleHBvcnQgc2VsZWN0ZWQgdG91cm5hbWVudHMnOwoKJGxhbmdbJ3RlYW0nXT0ndGVhbSc7CiRsYW5nWydwbGF5ZXInXT0nY29tcGV0aXRvcic7CgokbGFuZ1sndGl0bGVzY29yZWQnXT0nTWF0Y2hlcyB0byBiZSBzY29yZWQnOwokbGFuZ1sndGl0bGV3aGVuJ109J0NvbXBsZXRlZCBhdCc7CiRsYW5nWyd0aXRsZXNlbmRlciddPSdZb3VyIG5hbWUnOwokbGFuZ1sndGl0bGVjb21tZW50J109J0NvbW1lbnQnOwokbGFuZ1sndGl0bGVjYXB0Y2hhJ109J1RoZSBjaGFyYWN0ZXJzIHNob3duIGluIHRoZSBpbWFnZSBhYm92ZSc7CiRsYW5nWydtaXNzaW5nJ109J25vdCBwcm92aWRlZCc7CiRsYW5nWydyZXBvcnRlciddPSdTdWJtaXR0ZWQgYnkgJXMnOwokbGFuZ1snY2hvb3Nlb25lJ109J0Nob29zZSBvbmUnOwokbGFuZ1snc2VudG9rJ109J01lc3NhZ2VzIHN1Y2Nlc3NmdWxseSBzZW50JzsKJGxhbmdbJ25vdHNlbnQnXT0nRXJyb3IgZHVyaW5nIG1lc3NhZ2UgdHJhbnNtaXNzaW9uJzsKCiRsYW5nWydlcnJfY2FwdGNoYSddPSdJbmNvcnJlY3QgdmFsaWRhdGlvbiB0ZXh0JzsKJGxhbmdbJ2Vycl9ub2NhcHRjaGEnXT0nTm8gdmFsaWRhdGlvbiB0ZXh0JzsKJGxhbmdbJ2Vycl9maWxlJ109J1Vuc3VpdGFibGUgZmlsZSBjb250ZW50JzsKJGxhbmdbJ2Vycl9ub21hdGNoJ109J05vIG1hdGNoIHNlbGVjdGVkJzsKJGxhbmdbJ2Vycl9ub3Jlc3VsdCddPSdObyByZXN1bHQgc2VsZWN0ZWQnOwokbGFuZ1snZXJyX25vcmVzdWx0MiddPSdObyByZXN1bHQgcHJvdmlkZWQnOwokbGFuZ1snZXJyX25vc2VuZGVyJ109J1lvdSBtdXN0IGdpdmUgeW91ciBuYW1lJzsKJGxhbmdbJ2Vycl9ub3RpbWUnXT0nWW91IG11c3QgcmVwb3J0IGZpbmlzaCB0aW1lLCBvciBkYXRlIGFuZCB0aW1lLCBmb3IgY29tcGxldGVkIG1hdGNoZXMnOwoKLy8kbGFuZ1snd29uJ109J1dvbic7Ci8vJGxhbmdbJ2ZvcmZlaXRlZCddPSdGb3JmZWl0ZWQnOwokbGFuZ1snbm90eWV0J109J05vdCB5ZXQnOwokbGFuZ1snbm9uZSddPSdub25lJzsKCi8vdGVtcGxhdGVzIGZvciBkaXNwbGF5aW5nIG1hdGNoIHJlc3VsdHMuICVzKCdzKSBiZWNvbWUocykgdGVhbW5hbWUocyksICVyIGJlY29tZXMgYSBicmFja2V0LXNwZWNpZmljIHJlbGF0aW9uIGxpa2UgJ2RlZmVhdGVkJwovL2FueSAnICcgb3IgJywnIGluIHRoZSBmb2xsb3dpbmcgd2lsbCBiZSByZXBsYWNlZCBieSAnXG4nIGZvciBpbi1ib3ggd3JhcHBpbmcgaW4gYnJhY2tldGNoYXJ0cwokbGFuZ1sndmVyc3VzX2ZtdCddPSclcyAlciAlcyc7CiRsYW5nWyd3b25fZm10J109JyVzIHdvbic7CiRsYW5nWydvcl9mbXQnXT0nJXMgb3IgJXMnOwokbGFuZ1snZGVmZWF0ZWRfZm10J109JyVzICVyICVzJzsKJGxhbmdbJ2ZvcmZlaXRlZF9mbXQnXT0nJXMgJXInOwokbGFuZ1sndGllZF9mbXQnXT0nJXMsJXMgJXInOwokbGFuZ1snYWJhbmRvbmVkX2ZtdCddPSclcywlcyAlcic7Ci8vZm9yIG51bWJlcmVkLXJvdW5kLW5hbWluZywgYWdhaW4gJXIgYmVjb21lcyAnUm91bmQnIG9yIHdoYXRldmVyLCAlZCBiZWNvbWVzIG51bWJlcgokbGFuZ1sncm91bmRfZm10J109JyVyICVkJzsKCi8vZGVmYXVsdHMgZm9yIG1hdGNoIHJlc3VsdHMKLy8kbGFuZ1snd29uJ109J3dvbic7CiRsYW5nWydkZWZlYXRlZCddPSdkZWZlYXRlZCc7CiRsYW5nWydmb3JmZWl0ZWQnXT0nRm9yZmVpdGVkJzsKJGxhbmdbJ2FiYW5kb25lZCddPSdBYmFuZG9uZWQnOwokbGFuZ1sndGllZCddPSdUaWVkJzsKJGxhbmdbJ2J5ZSddPSdCeWUnOwoKJGxhbmdbJ25vbWF0Y2gnXT0nTm8gbWF0Y2gnOwokbGFuZ1snbWF0Y2gnXT0nbWF0Y2gnOwokbGFuZ1snbWF0Y2hlcyddPSdtYXRjaGVzJzsKJGxhbmdbJ21hdGNobnVtJ109J01hdGNoICVkJzsKJGxhbmdbJ2Fub25hbm9uJ109J01hdGNoJzsgLy9pbmZvcm1hdGl2ZSBOT1QhCiRsYW5nWydudW1vdGhlciddPSclcyBjb21wZXRpdG9yJzsKJGxhbmdbJ2Fub25vdGhlciddPSdBbm90aGVyIGNvbXBldGl0b3InOwokbGFuZ1snbnVtbG9zZXInXT0nJXMgbG9zZXInOwokbGFuZ1snYW5vbmxvc2VyJ109J1ByaW9yIG1hdGNoIGxvc2VyJzsKJGxhbmdbJ251bXdpbm5lciddPSclcyB3aW5uZXInOwokbGFuZ1snYW5vbndpbm5lciddPSdQcmlvciBtYXRjaCB3aW5uZXInOwoKJGxhbmdbJ2FkZCddPSdBZGQnOwokbGFuZ1sndGl0bGVfYWRkX3RvdXJuJ109J0FkZCBuZXcgdG91cm5hbWVudCc7CiRsYW5nWydhZGRlZCddPSdBZGRlZCc7CiRsYW5nWyd0b3VybmFtZW50J109J1RvdXJuYW1lbnQnOwoKJGxhbmdbJ3llcyddPSdZZXMnOwokbGFuZ1snbm8nXT0nTm8nOwokbGFuZ1snb25lJ109J09uZSc7Ci8vJGxhbmdbJ2FueSddPSdBbnknOwokbGFuZ1snYWxsJ109J0FsbCc7CiRsYW5nWydjYW5jZWxsZWQnXT0nQ2FuY2VsbGVkJzsKJGxhbmdbJ25vdCddPSdOb3QnOwovL2ZvciB1c2UgaW4gc21hcnR5IHRlbXBsYXRlcywgJXMgcmVwbGFjZWQgYnkgdGVtcGxhdGUgY29kZQokbGFuZ1sndHBsX3R3ZWV0cmVzdWx0J109J1NlbmQgcmVzdWx0IHRvICVzJzsgLy90d2VldC9TTVMKJGxhbmdbJ3RwbF9tYWlscmVzdWx0J109J1BsZWFzZSBzZW5kIHRoZSBtYXRjaCByZXN1bHQgdG8gJXMnOyAvL2VtYWlsCiRsYW5nWydvcmdhbmlzZXJzJ109J3RoZSBvcmdhbmlzZXJzJzsKCiRsYW5nWyd0aXRsZV9pbXBvcnQnXT0nSW1wb3J0IHRvdXJuYW1lbnQgZnJvbSBYTUwgZmlsZSc7CiRsYW5nWydlcnJfaW1wb3J0X2ZhaWxlZCddPSdUb3VybmFtZW50IGltcG9ydCBmYWlsZWQuJzsKJGxhbmdbJ3N1Y2Nlc3NfaW1wb3J0J109J1RvdXJuYW1lbnQgaW1wb3J0ZWQgc3VjY2Vzc2Z1bGx5Lic7CgokbGFuZ1sndGl0bGVfdGVhbWltcG9ydCddPSdJbXBvcnQgdGVhbSBkYXRhIGZvciB0b3VybmFtZW50IFwnJXNcJyBmcm9tIENTViBmaWxlJzsKJGxhbmdbJ3RlYW1faW1wb3J0X2ZhaWxlZCddPSdUZWFtIGRhdGEgaW1wb3J0IGZhaWxlZC4nOwokbGFuZ1sndGVhbV9pbXBvcnRlZCddPSdUZWFtIGRhdGEgaW1wb3J0ZWQgc3VjY2Vzc2Z1bGx5Lic7CiRsYW5nWydoZWxwX3RlYW1pbXBvcnQnXT08PDwgRU9TCjxoMz5GaWxlIEZvcm1hdCBJbmZvcm1hdGlvbjwvaDM+CjxwPlRoZSBpbnB1dCBmaWxlIG11c3QgYmUgaW4gQVNDSUkgZm9ybWF0IHdpdGggZGF0YSBmaWVsZHMgc2VwYXJhdGVkIGJ5IGNvbW1hcy4KQW55IGFjdHVhbCBjb21tYSBpbiBhIGZpZWxkIHNob3VsZCBiZSByZXByZXNlbnRlZCBieSAnJmFtcDsjNDQ7Jy4KRWFjaCBsaW5lIGluIHRoZSBmaWxlIChleGNlcHQgdGhlIGhlYWRlciBsaW5lLCBkaXNjdXNzZWQgYmVsb3cpIHJlcHJlc2VudHMgb25lIHRlYW0uPC9wPgo8aDQ+SGVhZGVyIExpbmU8L2g0Pgo8cD5UaGUgZmlyc3QgbGluZSBvZiB0aGUgZmlsZSBuYW1lcyB0aGUgZmllbGRzIGluIHRoZSBmaWxlLiBGaXJzdCwgdGhlcmUgbWF5IGJlIHVwIHRvIHRocmVlCm9wdGlvbmFsIGZpZWxkcywgbmFtZWQgJyNUZWFtbmFtZScgYW5kL29yICcjU2VlZGVkJyBhbmQvb3IgJyNUZWxsYWxsJyAobm8gcXVvdGVzLCBhbnkgb3JkZXIpLgpGdXJ0aGVyIGZpZWxkbmFtZXMsIGlmIHRoZXkgZXhpc3QsIGNhbiBoYXZlIGFueSBuYW1lcyBidXQgbXVzdCBiZSBpbiBwYWlycyAtIHRoZSBmaXJzdCBvZiBlYWNoCnRvIGhvbGQgYSBwbGF5ZXIgbmFtZSwgdGhlIHNlY29uZCB0byBob2xkIGNvbnRhY3QgaW5mb3JtYXRpb24gZm9yIHRoYXQgcGxheWVyLgpUaGVyZSBtYXkgYmUgYW55IG51bWJlciBvZiBzdWNoIHBhaXJzLiBGb3IgZXhhbXBsZTo8YnIgLz4KPGNvZGU+I1NlZWRlZCxQbGF5ZXIsQ29udGFjdDwvY29kZT4gb3I8YnIgLz4KPGNvZGU+I1NlZWRlZCwjVGVhbW5hbWUsI1RlbGxhbGwsQ2FwdGFpbixDb250YWN0MSxQbGF5ZXIyLENvbnRhY3QyPC9jb2RlPjwvcD4KPGg0Pk90aGVyIExpbmVzPC9oND4KPHA+VGhlIGRhdGEgaW4gZWFjaCBsaW5lIG11c3QgY29uZm9ybSB0byB0aGUgaGVhZGVyIGNvbHVtbnMsIG9mIGNvdXJzZS4gQW55IGZpZWxkLCBvciBlbnRpcmUgbGluZSwgbWF5IGJlIGVtcHR5LgpUaGUgdGVsbGFsbCBmaWVsZCB3aWxsIGJlIHRyZWF0ZWQgYXMgVFJVRSBpZiBpdCBjb250YWlucyBzb21ldGhpbmcgb3RoZXIgdGhhbiAnMCcgb3IgJ25vJyBvciAnTk8nIChubyBxdW90ZXMsIHVudHJhbnNsYXRlZCkuPC9wPgo8aDM+UHJvYmxlbXM8L2gzPgo8cD5UaGUgaW1wb3J0IHByb2Nlc3Mgd2lsbCBmYWlsIGlmOjx1bD4KPGxpPnRoZSBmaXJzdCBvbmUsIHR3byBvciB0aHJlZSAnIyctcHJlZml4ZWQgZmllbGQgbmFtZXMgYXJlIGFyZSBub3QgYXMgZXhwZWN0ZWQ8L2xpPgo8bGk+dGhlIG51bWJlciBvZiBwbGF5ZXItc3BlY2lmaWMgZmllbGRzIGlzIGFuIG9kZCBudW1iZXI8L2xpPgo8bGk+dGhlcmUgYXJlIGZld2VyIGZpZWxkcyBpbiBhbnkgbGluZSBvZiBkYXRhIHRoYW4gdGhlcmUgYXJlIGZpZWxkbmFtZXMgaW4gdGhlIGhlYWRlciBsaW5lPC9saT4KPC91bD48L3A+CjxoMz5Zb3UgRGVjaWRlIFdoYXQgdG8gS2VlcDwvaDM+CjxwPkltcG9ydGVkIGRhdGEgYXJlIDxzdHJvbmc+bm90IGF1dG9tYXRpY2FsbHkgc3RvcmVkPC9zdHJvbmc+IGluIHRoZSBkYXRhYmFzZS4KQWZ0ZXIgcmV2aWV3IGFuZCBhbnkgbW9kaWZpY2F0aW9uLCB5b3Ugc2hvdWxkIHNhdmUgdGhlIHRvdXJuYW1lbnQgZGF0YSBpbiB0aGUgbm9ybWFsIG1hbm5lci47CkVPUzsKCi8vdG91cm5hbWVudC1ncm91cHMKCiRsYW5nWydhY3RpdmF0ZSddPSdBY3RpdmF0ZSc7CiRsYW5nWydhY3RpdmVzZWxncnAnXT0ndG9nZ2xlIGFjdGl2YXRpb24gb2Ygc2VsZWN0ZWQgZ3JvdXBzJzsKJGxhbmdbJ2FkZGdyb3VwJ109J0FkZCBuZXcgZ3JvdXAnOwokbGFuZ1snZGVsZXRlc2VsZ3JwJ109J2RlbGV0ZSBzZWxlY3RlZCBncm91cHMnOwokbGFuZ1snZ3JvdXBkZWZhdWx0J109J1VuZ3JvdXBlZCc7CiRsYW5nWydpbmFjdGl2ZSddPSdpbmFjdGl2ZSc7CiRsYW5nWydub19ncm91cHMnXT0nTm8gZ3JvdXAgaXMgcmVjb3JkZWQuJzsKJGxhbmdbJ3RpdGxlX2FjdGl2ZSddPSdBY3RpdmUnOwokbGFuZ1snc29ydCddPSdTb3J0JzsKLy8kbGFuZ1snc29ydHNlbGdycCddPSdzb3J0IHNlbGVjdGVkIGdyb3VwcyBieSBuYW1lJzsKJGxhbmdbJ3VwZGF0ZXNlbGdycCddPSd1cGRhdGUgc2VsZWN0ZWQgZ3JvdXBzJzsKJGxhbmdbJ3RpdGxlX2JyYWNrZXRzZ3JvdXAnXT0nR3JvdXAgZm9yIHNlbGVjdGVkIHRvdXJuYW1lbnRzJzsKLy8kbGFuZ1snaGVscF9icmFja2V0c2dyb3VwJ109Jyc7CgovL3NldHRpbmdzCgokbGFuZ1snc2VsZWN0X29uZSddPSdTZWxlY3QgT25lJzsKJGxhbmdbJ3RpdGxlX2JyYWNrZXRfc2luZ2xlJ109J0tub2Nrb3V0IFRvdXJuYW1lbnQnOwokbGFuZ1sndGl0bGVfYnJhY2tldF9kb3VibGUnXT0nRG91YmxlIEVsaW1pbmF0aW9uIFRvdXJuYW1lbnQnOwokbGFuZ1sndGl0bGVfYnJhY2tldF9yb3VuZCddPSdSb3VuZC1Sb2JpbiBUb3VybmFtZW50JzsKCiRsYW5nWyd0aXRsZV9uYW1lc19maWVsZHNldCddPSdEZWZhdWx0IE5hbWVzJzsKJGxhbmdbJ3RpdGxlX21pc2NfZmllbGRzZXQnXT0nTWlzY2VsbGFuZW91cyc7CgokbGFuZ1sndGl0bGVfY3NzZmlsZSddPSdGaWxlIGNvbnRhaW5pbmcgc3R5bGUtcGFyYW1ldGVycyc7CiRsYW5nWydoZWxwX2Nzc2ZpbGUnXT0nTWF5IGJlIGVtcHR5IHRvIHVzZSBkZWZhdWx0IHN0eWxlcy4gT3RoZXJ3aXNlLCBtb2R1bGUgaGVscCBpbmNsdWRlcyBkZXRhaWxzIG9mIGZpbGUgY29udGVudCBhbmQgbG9jYXRpb24nOwokbGFuZ1sndGl0bGVfY3NzZmlsZTInXT0nRmlsZSBjb250YWluaW5nIHN0eWxlLXBhcmFtZXRlcnMgZm9yICVzIHRvdXJuYW1lbnQnOwokbGFuZ1snaGVscF9jc3N1cGxvYWQnXT0KJzxoMz5GaWxlIEZvcm1hdCBJbmZvcm1hdGlvbjwvaDM+CjxwPlRoZSBmaWxlIG11c3QgYmUgaW4gQVNDSUkgc3R5bGVzaGVldCBmb3JtYXQuIE1vZHVsZSBoZWxwIGluY2x1ZGVzIGRldGFpbHMgb2YgZmlsZSBjb250ZW50LjwvcD4KPGgzPlByb2JsZW1zPC9oMz4KPHA+VGhlIHVwbG9hZCBwcm9jZXNzIHdpbGwgZmFpbCBpZjo8dWw+CjxsaT50aGUgZmlsZSBkb2VzIG5vdCBsb29rIGxpa2UgYSByZWxldmFudCBzdHlsZXNoZWV0PC9saT4KPGxpPnRoZSBmaWxlLXNpemUgaXMgYmlnZ2VyIHRoYW4gYWJvdXQgMiBrQjwvbGk+CjxsaT5maWxlc3lzdGVtIHBlcm1pc3Npb25zIGFyZSBpbnN1ZmZpY2llbnQ8L2xpPgo8L3VsPjwvcD4KJzsKCiRsYW5nWydzaG93aGVscCddPSdjbGljayB0byB0b2dnbGUgZGlzcGxheSBvZiBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHBhcmFtZXRlcic7CgokbGFuZ1sndGl0bGVfem9uZSddPSdUaW1lIHpvbmUnOwokbGFuZ1snaGVscF96b25lJ109J0RlZmF1bHQgc2V0dGluZyBmb3IgbG9jYWwvdG91cm5hbWVudCB0aW1lJzsKJGxhbmdbJ2hlbHBfem9uZTInXT0nRm9yIGxvY2FsL3RvdXJuYW1lbnQgdGltZSc7CiRsYW5nWyd0aXRsZV9kYXRlX2Zvcm1hdCddPSdEYXRlIGZvcm1hdCc7CiRsYW5nWydoZWxwX2RhdGVfZm9ybWF0J109J0Egc3RyaW5nIGluY2x1ZGluZyBmb3JtYXQgY2hhcmFjdGVycyByZWNvZ25pc2VkIGJ5IFBIUFwncyBkYXRlKCkgZnVuY3Rpb24uIEZvciByZWZlcmVuY2UsIHBsZWFzZSBjaGVjayB0aGUgPGEgaHJlZj0iaHR0cDovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRhdGUucGhwIj5waHAgbWFudWFsPC9hPi4gUmVtZW1iZXIgdG8gZXNjYXBlIGFueSBjaGFyYWN0ZXJzIHlvdSBkb25cJ3Qgd2FudCBpbnRlcnByZXRlZCBhcyBkYXRlIGZvcm1hdCBjb2RlcyEnOwokbGFuZ1sndGl0bGVfdGltZV9mb3JtYXQnXT0nVGltZSBmb3JtYXQnOwokbGFuZ1snaGVscF90aW1lX2Zvcm1hdCddPSdTZWUgaW5mb3JtYXRpb24gYWJvdmUgYWJvdXQgZGF0ZSBmb3JtYXQnOwokbGFuZ1sndGl0bGVfbGF0aXR1ZGUnXT0nTGF0aXR1ZGUnOwokbGFuZ1snaGVscF9sYXRpdHVkZSddPSdOZWVkZWQgb25seSBmb3Igc3VucmlzZS9zdW5zZXQgY2FsY3VsYXRpb25zIGZvciBhdmFpbGFibGUgdGltZXMuIEFjY3VyYWN5IHVwIHRvIDMgZGVjaW1hbCBwbGFjZXMuJzsKJGxhbmdbJ3RpdGxlX2xvbmdpdHVkZSddPSdMb25naXR1ZGUnOwokbGFuZ1snaGVscF9sb25naXR1ZGUnXT0nU2VlIGFkdmljZSBmb3IgbGF0aXR1ZGUuJzsKJGxhbmdbJ3RpdGxlX3Bob25lX3JlZ2V4J109J1ZhbGlkYXRvciBmb3IgcGhvbmUgbnVtYmVycyBzdWl0YWJsZSBmb3IgcmVjZWl2aW5nIFNNUyc7CiRsYW5nWydoZWxwX3Bob25lX3JlZ2V4J109J1JlZ3VsYXItZXhwcmVzc2lvbiAtIHNlZSA8YSBocmVmPSJodHRwOi8vd3d3LnJlZ2V4bGliLm5ldC9TZWFyY2guYXNweD9rPXBob25lIj50aGlzIGRvY3VtZW50YXRpb248L2E+LCBmb3IgZXhhbXBsZSc7CiRsYW5nWyd0aXRsZV91cGxvYWRzX2RpciddPSdTdWItZGlyZWN0b3J5IGZvciBtb2R1bGUtc3BlY2lmaWMgZmlsZSB1cGxvYWRzJzsKJGxhbmdbJ2hlbHBfdXBsb2Fkc19kaXInXT0nRmlsZXN5c3RlbSBwYXRoIHJlbGF0aXZlIHRvIHdlYnNpdGUtaG9zdCB1cGxvYWRzIGRpcmVjdG9yeS4gTm8gbGVhZGluZyBvciB0cmFpbGluZyBwYXRoLXNlcGFyYXRvciwgYW5kIGFueSBpbnRlcm1lZGlhdGUgcGF0aC1zZXBhcmF0b3IgbXVzdCBiZSBob3N0LXN5c3RlbS1zcGVjaWZpYyBlLmcuIFwnXFxcJyBvbiBXaW5kb3dzLiBJZiBsZWZ0IGJsYW5rLCB0aGUgZGVmYXVsdCB3aWxsIGJlIHVzZWQuIERpcmVjdG9yeSBjb3VsZCBjb250YWluIC5jc3MgYW5kL29yIC50dGYgZmlsZXMgZm9yIGNoYXJ0cywgYW1vbmcgb3RoZXJzLic7Ci8vJGxhbmdbJ3RpdGxlX2Nzc19jbGFzcyddPSdDU1MgQ2xhc3MnOwovLyRsYW5nWydoZWxwX2Nzc19jbGFzcyddID0gJ09wdGlvbmFsIG5hbWUgb2YgY2xhc3MsIG9yIHNwYWNlLXNlcGFyYXRlZCBzZXJpZXMgb2YgY2xhc3MgbmFtZXMsIGFwcGxpZWQgdG8gbGlzdCB2aWV3cyc7CiRsYW5nWyd0aXRsZV9zdHJpcF9vbl9leHBvcnQnXT0nU3RyaXAgSFRNTCB0YWdzIG9uIGV4cG9ydCc7CiRsYW5nWydoZWxwX3N0cmlwX29uX2V4cG9ydCddPSdSZW1vdmUgYWxsIEhUTUwgdGFncyBmcm9tIHJlY29yZHMgd2hlbiBleHBvcnRlZCB0byAuY3N2JzsKJGxhbmdbJ3RpdGxlX2V4cG9ydF9maWxlJ109J0V4cG9ydCB0byBob3N0JzsKJGxhbmdbJ2hlbHBfZXhwb3J0X2ZpbGUnXT0nVGhpcyBvcHRpb24gcHJvZ3Jlc3NpdmVseSBjcmVhdGVzIGEgLmNzdiBmaWxlIGluIHRoZSBzaXRlXCdzIDxpPnVwbG9hZHM8L2k+IGRpcmVjdG9yeSByYXRoZXIgdGhhbiBwcm9jZXNzaW5nIHRoZSBleHBvcnQgaW4gbWVtb3J5LiBUaGlzIGlzIGdvb2QgaWYgdGhlcmUgaXMgYSBsb3Qgb2YgZGF0YSB0byBleHBvcnQuIFRoZSBkb3duc2lkZSBpcyB0aGF0IHNvbWVvbmUgbmVlZHMgdG8gZ2V0IHRoYXQgZmlsZSBhbmQgKHVzdWFsbHkpIHRoZW4gZGVsZXRlIGl0Lic7CiRsYW5nWyd0aXRsZV9leHBvcnRfZmlsZV9lbmNvZGluZyddPSdDaGFyYWN0ZXItZW5jb2Rpbmcgb2YgZXhwb3J0ZWQgY29udGVudCc7CgokbGFuZ1sndGl0bGVfZmluYWwnXT0nVGl0bGUgb2YgZmluYWwgbWF0Y2ggaW4gdGhlIHRvdXJuYW1lbnQnOwokbGFuZ1sndGl0bGVfc2VtaSddPSdUaXRsZSBvZiBtYXRjaCBpbiBzZWNvbmQtbGFzdCByb3VuZCc7CiRsYW5nWyd0aXRsZV9xdWFydGVyJ109J1RpdGxlIG9mIG1hdGNoIGluIHRoaXJkLWxhc3Qgcm91bmQnOwokbGFuZ1sndGl0bGVfZWlnaHRoJ109J1RpdGxlIG9mIG1hdGNoIGluIGZvdXJ0aC1sYXN0IHJvdW5kJzsKJGxhbmdbJ3RpdGxlX3JvdW5kbmFtZSddPSdUaXRsZSBvZiBvdGhlciBtYXRjaGVzICh3aWxsIGhhdmUgbnVtYmVyIGFwcGVuZGVkKSc7CiRsYW5nWydoZWxwX21hdGNoX25hbWVzJ109J0lmIHRoZSB0aXRsZSBvZiBhbnkgb2YgZmluYWwuLi5mb3VydGgtbGFzdCBtYXRjaGVzIGlzIGxlZnQgYmxhbmssIHRoaXMgbmFtZSB3aWxsIGJlIHVzZWQgdGhlcmUsIHRvbyc7CiRsYW5nWyduYW1lX2xhc3RfbWF0Y2gnXT0nRmluYWwnOwokbGFuZ1snbmFtZV8ybmRsYXN0X21hdGNoJ109J1NlbWkgRmluYWwnOwokbGFuZ1snbmFtZV8zcmRsYXN0X21hdGNoJ109J1F1YXJ0ZXIgRmluYWwnOwokbGFuZ1snbmFtZV80dGhsYXN0X21hdGNoJ109J1JvdW5kIG9mIDE2JzsKJGxhbmdbJ25hbWVfb3RoZXJfbWF0Y2gnXT0nUm91bmQnOwoKJGxhbmdbJ3RpdGxlX2FnYWluc3QnXT0nVGV4dCBmb3Igc2VwYXJhdGluZyBvcHBvbmVudHMnOwokbGFuZ1sndGl0bGVfZGVmZWF0ZWQnXT0nVGV4dCBmb3IgZGVmZWF0ZWQgb3Bwb25lbnQnOwokbGFuZ1sndGl0bGVfY2FudGllJ109J01hdGNoZXMgbWF5IGJlIHRpZWQnOwokbGFuZ1snbm90aWVzJ109J01hdGNoZXMgbWF5IDxzdHJvbmc+bm90PC9zdHJvbmc+IGJlIHRpZWQnOwokbGFuZ1sneWVzdGllcyddPSdNYXRjaGVzIG1heSBiZSB0aWVkJzsgLy9jLmYuIGFib3ZlCiRsYW5nWyd0aXRsZV90aWVkJ109J1RleHQgZm9yIHRpZWQgbWF0Y2gnOwokbGFuZ1sndGl0bGVfbm9vcCddPSdOYW1lIG9mIG5vbi1leGlzdGVudCBvcHBvbmVudCc7CiRsYW5nWyd0aXRsZV9mb3JmZWl0J109J1Jlc3VsdCBmb3IgbWF0Y2ggd29uIGJlY2F1c2Ugb3Bwb25lbnQgY291bGQgbm90IHN0YXJ0IG9yIGZpbmlzaCc7CiRsYW5nWyd0aXRsZV9hYmFuZG9uZWQnXT0nUmVzdWx0IGZvciBhYmFuZG9uZWQgbWF0Y2ggKHdoaWNoIGhhcyBubyB3aW5uZXIpJzsKJGxhbmdbJ25hbWVfYWdhaW5zdCddPSd2cyc7CiRsYW5nWyduYW1lX2RlZmVhdGVkJ109J2RlZmVhdGVkJzsKJGxhbmdbJ25hbWVfdGllZCddPSd0aWVkIHdpdGgnOwokbGFuZ1snbmFtZV9ub19vcHBvbmVudCddPSdCeWUnOwokbGFuZ1snbmFtZV9mb3JmZWl0J109J0ZvcmZlaXQnOwokbGFuZ1snbmFtZV9hYmFuZG9uZWQnXT0nQWJhbmRvbmVkJzsKCi8vJGxhbmdbJ3RhYl91c2VyX29wdGlvbnMnXT0nRnJvbnRlbmQgT3B0aW9ucyc7Ci8vJGxhbmdbJ3RhYl9hZG1pbl9vcHRpb25zJ109J0FkbWluIE9wdGlvbnMnOwovLyRsYW5nWyd0YWJfdXNlcl9jb21wJ109J0Zyb250ZW5kIFZpZXcnOwovLyRsYW5nWyd0YWJfYWRtaW5fY29tcCddPSdBZG1pbiBWaWV3JzsKCiRsYW5nWydzdW5yaXNlJ109J3N1bnJpc2UnOwokbGFuZ1snc3Vuc2V0J109J3N1bnNldCc7CiRsYW5nWyd3ZWVrJ109J3dlZWsnOyAvL3NvIHdlIGNhbiBza2lwIHBhcnNpbmcgWydwZXJpb2RzJ10gc29tZXRpbWVzCi8vdGltZSBpbnRlcnZhbCBuYW1lcyAtIHNpbmd1bGFyICYgcGx1cmFsCi8vbmFtZXMgYXJlIGV4cGVjdGVkIHRvIGJlIGFsbCBsb3dlci1jYXNlLCB3aWxsIGJlIGNhcGl0YWxpc2VkIG9uIGRlbWFuZCwKLy9tdXN0IGJlIG9yZGVyZWQgc2hvcnRlc3QuLmxvbmdlc3QsIGNvbW1hLXNlcGFyYXRlZCwgbm8gd2hpdGVzcGFjZQokbGFuZ1sncGVyaW9kcyddPSdtaW51dGUsaG91cixkYXksd2Vlayxtb250aCx5ZWFyJzsKJGxhbmdbJ211bHRpcGVyaW9kcyddPSdtaW51dGVzLGhvdXJzLGRheXMsd2Vla3MsbW9udGhzLHllYXJzJzsKCi8vcG9wdXAgY2FsZW5kYXIgdGl0bGVzCi8vJGxhbmdbJ3RpdGxlX21vbnRoJ109J01vbnRoJzsKJGxhbmdbJ25leHRtJ109J05leHQgTW9udGgnOwokbGFuZ1sncHJldm0nXT0nUHJldmlvdXMgTW9udGgnOwovLyRsYW5nWyd0aXRsZV95ZWFyJ109J1llYXInOwovL2xvbmdmb3JtIGRheW5hbWVzIC0gbXVzdCBiZSBTdW5kYXkgZmlyc3QsIGNvbW1hLXNlcGFyYXRlZCwgbm8gd2hpdGVzcGFjZQokbGFuZ1snbG9uZ2RheXMnXT0nU3VuZGF5LE1vbmRheSxUdWVzZGF5LFdlZG5lc2RheSxUaHVyc2RheSxGcmlkYXksU2F0dXJkYXknOwovL3Nob3J0Zm9ybSBkYXluYW1lcyAtIG11c3QgYmUgU3VuZGF5IGZpcnN0LCBjb21tYS1zZXBhcmF0ZWQsIG5vIHdoaXRlc3BhY2UgCiRsYW5nWydzaG9ydGRheXMnXT0nU3VuLE1vbixUdWUsV2VkLFRodSxGcmksU2F0JzsKLy9sb25nZm9ybSBtb250aG5hbWVzIC0gbXVzdCBiZSBKYW51YXJ5IGZpcnN0LCBjb21tYS1zZXBhcmF0ZWQsIG5vIHdoaXRlc3BhY2UKJGxhbmdbJ2xvbmdtb250aHMnXT0nSmFudWFyeSxGZWJydWFyeSxNYXJjaCxBcHJpbCxNYXksSnVuZSxKdWx5LEF1Z3VzdCxTZXB0ZW1iZXIsT2N0b2JlcixOb3ZlbWJlcixEZWNlbWJlcic7Ci8vc2hvcnRmb3JtIG1vbnRobmFtZXMgLSBtdXN0IGJlIEphbnVhcnkgZmlyc3QsIGNvbW1hLXNlcGFyYXRlZCwgbm8gd2hpdGVzcGFjZQokbGFuZ1snc2hvcnRtb250aHMnXT0nSmFuLEZlYixNYXIsQXByLE1heSxKdW4sSnVsLEF1ZyxTZXAsT2N0LE5vdixEZWMnOwoKLy9zcGVjaWZpYyB0b3VybmFtZW50CgokbGFuZ1sndGFiX21haW4nXT0nVG91cm5hbWVudCc7CiRsYW5nWyd0YWJfYWR2YW5jZWQnXT0nQWR2YW5jZWQnOwokbGFuZ1sndGFiX3NjaGVkdWxlJ109J1NjaGVkdWxlJzsKJGxhbmdbJ3RhYl9jaGFydCddPSdDaGFydCc7CiRsYW5nWyd0YWJfcGxheWVycyddPSdDb21wZXRpdG9ycyc7CiRsYW5nWyd0YWJfbWF0Y2hlcyddPSdNYXRjaGVzJzsKJGxhbmdbJ3RhYl9yZXN1bHRzJ109J1Jlc3VsdHMnOwoKJGxhbmdbJ3RpdGxlX3RpdGxlJ109J0Rpc3BsYXllZCB0aXRsZSc7CiRsYW5nWyd0aXRsZV9hbGlhcyddPSdBbGlhcyBuYW1lJzsKJGxhbmdbJ2hlbHBfYWxpYXMnXT0nRm9yIHVzZSBpbiB3ZWItcGFnZSBzbWFydHkgdGFncyB0aGF0IGRpc3BsYXkgdGhpcyB0b3VybmFtZW50LiBJZiBsZWZ0IGJsYW5rLCBhIGRlZmF1bHQgd2lsbCBiZSBhcHBsaWVkLic7CiRsYW5nWyd0aXRsZV9kZXNjJ109J0Rlc2NyaXB0aW9uJzsKJGxhbmdbJ3RpdGxlX2dyb3VwJ109J0dyb3VwJzsKJGxhbmdbJ2hlbHBfZ3JvdXAnXT0nVG91cm5hbWVudHMgY2FuIGJlIGdyb3VwZWQgdG8gZmFjaWxpdGF0ZSBhbGxvY2F0aW9uIG9mIHBsYXllcnMgYW5kIHBsYWNlcyBhY3Jvc3MgbXVsdGlwbGUgZXZlbnRzJzsKJGxhbmdbJ3RpdGxlX3R5cGUnXT0nVHlwZSc7CiRsYW5nWyd0aXRsZV90ZWFtc2l6ZSddPSdQbGF5ZXJzIHBlciB0ZWFtJzsKCiRsYW5nWyd0aXRsZV9vd25lciddPSdSZXNwb25zaWJsZSBwZXJzb24nOwokbGFuZ1sndGl0bGVfY29udGFjdCddPSdDb250YWN0IGRldGFpbHMgZm9yIHJlc3BvbnNpYmxlIHBlcnNvbic7CiRsYW5nWyd0aXRsZV9zbXNmcm9tJ109J1NNUyB0byB0b3VybmFtZW50IHBhcnRpY2lwYW50cyBmcm9tJzsKJGxhbmdbJ2hlbHBfc21zZnJvbSddPSdUaGlzIHdpbGwgYmUgZGlzcGxheWVkIGlmIHRoZSBTTVMtcHJvdmlkZXIgYWxsb3dzLiBJbmNsdWRlIHJlbGV2YW50IGNvdW50cnktcHJlZml4Lic7CiRsYW5nWyd0aXRsZV9zbXNwcmVmaXgnXT0nQ291bnRyeS1wcmVmaXggZm9yIHBob25lIG51bWJlcnMgdG8gcmVjZWl2ZSBTTVMgbWVzc2FnZXMnOwokbGFuZ1snaGVscF9zbXNwcmVmaXgnXT0nT25lIHRvIGZvdXIgbnVtYmVycyBlLmcuIDEgZm9yIFVTQS4gPGEgaHJlZj0iaHR0cDovL2NvdW50cnljb2RlLm9yZyI+U2VhcmNoPC9hPi4gSW5jbHVkZSBhIGxlYWRpbmcgXCcrXCcgaWYgdGhlIFNNUyBnYXRld2F5IHJlcXVpcmVzIHRoYXQuJzsKCiRsYW5nWyd0aXRsZV90d3Rmcm9tJ109J1R3ZWV0cyBhYm91dCB0aGUgdG91cm5hbWVudCBzZW50IGZyb20nOwovLyRsYW5nWyd0aXRsZV9hZG1pbl9lZHMnXT0nQWRtaW4gdXNlcnMgZ3JvdXAgd2hvc2UgbWVtYmVycyBjYW4gZWRpdCB0b3VybmFtZW50IHJlc3VsdHMnOwokbGFuZ1sndGl0bGVfZmV1X2VkcyddPSdGRVUgZ3JvdXAgd2hvc2UgbWVtYmVycyBjYW4gZWRpdCB0b3VybmFtZW50IHJlc3VsdHMnOwokbGFuZ1snaGVscF9vd25lciddPSdUaGUgcGVyc29uIHJlc3BvbnNpYmxlIGZvciB0aGUgaW50ZWdyaXR5IG9mIHRvdXJuYW1lbnQgZGF0YSc7CiRsYW5nWydoZWxwX2VkaXRvcnMnXT0nTGVhdmUgYmxhbmsgZm9yIG5vIHJlc3RyaWN0aW9uJzsKJGxhbmdbJ2hlbHBfY29udGFjdCddPSdQaG9uZSBvciBlbWFpbCBvciBoYW5kbGUgb2YgcmVzcG9uc2libGUgcGVyc29uJzsKJGxhbmdbJ2hlbHBfdHd0MSddPTw8PEVPUwpUd2l0dGVyIGFjY291bnQgaGFuZGxlLiBJZiBsZWZ0IGJsYW5rLCBAQ01TTVNUb3VybmV5IHdpbGwgYmUgdXNlZC4KQW55dGhpbmcgZWxzZSB3aWxsIHJlcXVpcmUgYXV0aG9yaXNhdGlvbiBieSB0aGUgYWNjb3VudCBvd25lciwgYmVmb3JlIGZpcnN0IHVzZS4KTW9kdWxlIGhlbHAgaGFzIG1vcmUgZGV0YWlscy4KRU9TOwokbGFuZ1snaGVscF90d3QyJ109J1lvdSBjYW4gcmVmcmVzaCB0aGUgY3VycmVudCBhdXRob3Jpc2F0aW9uIGZvciA8c3Ryb25nPiVzPC9zdHJvbmc+LCBvciBpbml0aWF0ZSBhIGNoYW5nZSwgYnkgY2xpY2tpbmcgdGhlIFwnVmlzaXRcJyBidXR0b24uJzsKJGxhbmdbJ2hlbHBfdHd0MyddPSdZb3UgY2FuIGluaXRpYXRlIGF1dGhvcmlzYXRpb24gYnkgY2xpY2tpbmcgdGhlIFwnVmlzaXRcJyBidXR0b24uJzsKJGxhbmdbJ2hlbHBfdHd0NCddPSc8c3Ryb25nPkVuc3VyZSBhbGwgd2FudGVkIGRhdGEgYXJlIHNhdmVkPC9zdHJvbmc+LCBiZWZvcmUgZGVwYXJ0aW5nLic7CgokbGFuZ1sndGl0bGVfYXRmb3JtYXQnXT0nRm9ybWF0IG9mIGRpc3BsYXllZCBkYXRlICYgdGltZSc7CiRsYW5nWyd0aXRsZV9jaHR0ZW1wbGF0ZSddPSdGcm9udC1lbmQgY2hhcnQgZGlzcGxheSB0ZW1wbGF0ZSc7CiRsYW5nWyd0aXRsZV9lbWFpbGh0bWwnXT0nR2VuZXJhdGUgSFRNTCBlbWFpbCc7CiRsYW5nWyd0aXRsZV9lbWFpbGNvZGluZyddPSdFbWFpbCBjaGFyYWN0ZXItZW5jb2RpbmcnOwokbGFuZ1sndGl0bGVfbWFpbG91dHRlbXBsYXRlJ109J01hdGNoLWFubm91bmNlbWVudCBlbWFpbCB0ZW1wbGF0ZSc7CiRsYW5nWyd0aXRsZV90d2VldG91dHRlbXBsYXRlJ109J01hdGNoLWFubm91bmNlbWVudCB0ZXh0L3R3ZWV0IHRlbXBsYXRlJzsKJGxhbmdbJ3RpdGxlX21haWxjYW5jZWx0ZW1wbGF0ZSddPSdNYXRjaC1jYW5jZWxsYXRpb24gZW1haWwgdGVtcGxhdGUnOwokbGFuZ1sndGl0bGVfdHdlZXRjYW5jZWx0ZW1wbGF0ZSddPSdNYXRjaC1jYW5jZWxsYXRpb24gdGV4dC90d2VldCB0ZW1wbGF0ZSc7CiRsYW5nWyd0aXRsZV9tYWlscmVxdWVzdHRlbXBsYXRlJ109J01hdGNoLXJlc3VsdC1yZXF1ZXN0IGVtYWlsIHRlbXBsYXRlJzsKJGxhbmdbJ3RpdGxlX3R3ZWV0cmVxdWVzdHRlbXBsYXRlJ109J01hdGNoLXJlc3VsdC1yZXF1ZXN0IHRleHQvdHdlZXQgdGVtcGxhdGUnOwokbGFuZ1sndGl0bGVfbWFpbGludGVtcGxhdGUnXT0nTWF0Y2gtcmVzdWx0LXJlcG9ydCBlbWFpbCB0ZW1wbGF0ZSc7CiRsYW5nWyd0aXRsZV90d2VldGludGVtcGxhdGUnXT0nTWF0Y2gtcmVzdWx0LXJlcG9ydCB0ZXh0L3R3ZWV0IHRlbXBsYXRlJzsKCiRsYW5nWyd0aXRsZV9sb2dpYyddPSdSZXN1bHQgdmFsaWRhdGlvbic7CgokbGFuZ1snaGVscF90ZW1wbGF0ZSddPSdUaGUgZm9sbG93aW5nIHNtYXJ0eSB2YXJpYWJsZXMgYXJlIGF2YWlsYWJsZSBmb3IgdXNlIGluIHRoZSB0ZW1wbGF0ZS4nOwokbGFuZ1snaGVscF9jaHR0ZW1wbGF0ZSddPSdBdCBhIG1pbmltbXVtLCBpbmNsdWRlIHskaW1hZ2V9JzsKJGxhbmdbJ3NlZWFib3ZlJ109J1NlZSBjb3JyZXNwb25kaW5nIGluZm9ybWF0aW9uIGFib3V0IGFubm91bmNlbWVudC10ZW1wbGF0ZSwgYWJvdmUnOwoKJGxhbmdbJ2Rlc2NfdGl0bGUnXT0ndGhlIHRpdGxlIGFzIHNwZWNpZmllZCBvbiB0aGUgVG91cm5hbWVudCB0YWInOwokbGFuZ1snZGVzY19kZXNjcmlwdGlvbiddPSd0aGUgZGVzY3JpcHRpb24gYXMgc3BlY2lmaWVkIG9uIHRoZSBUb3VybmFtZW50IHRhYic7CiRsYW5nWydkZXNjX293bmVyJ109J3RoZSByZXNwb25zaWJsZSBwZXJzb24gYXMgc3BlY2lmaWVkIG9uIHRoZSBUb3VybmFtZW50IHRhYic7CiRsYW5nWydkZXNjX2NvbnRhY3QnXT0nY29udGFjdCBpbmZvcm1hdGlvbiBmb3IgdGhlIHJlc3BvbnNpYmxlIHBlcnNvbiBhcyBzcGVjaWZpZWQgb24gdGhlIFRvdXJuYW1lbnQgdGFiJzsKJGxhbmdbJ2Rlc2Nfc21zZnJvbSddPSdwaG9uZSBudW1iZXIgaWRlbnRpZmllZCBhcyBzb3VyY2Ugb2YgU01TIG1lc3NhZ2VzLCBpZiBhbGxvd2VkIGJ5IGdhdGV3YXknOwokbGFuZ1snZGVzY19pbWFnZSddPSdhbiBYSFRNTCBzdHJpbmcgc3BlY2lmeWluZyB0aGUgaW1hZ2UgZmlsZSB0byBiZSBkaXNwbGF5ZWQnOwokbGFuZ1snZGVzY19pbWdkYXRlJ109J2Zvcm1hdHRlZCBkYXRlL3RpbWUgd2hlbiB0aGUgaW1hZ2UgZmlsZSB3YXMgY3JlYXRlZCBvciBsYXN0IGNoYW5nZWQnOwokbGFuZ1snZGVzY19pbWdoZWlnaHQnXT0naGVpZ2h0IG9mIHRoZSBkaXNwbGF5ZWQgaW1hZ2UnOwokbGFuZ1snZGVzY19pbWd3aWR0aCddPSd3aWR0aCBvZiB0aGUgZGlzcGxheWVkIGltYWdlJzsKCiRsYW5nWydkZWZhdWx0X2VtYWlsJ109J1lvdXIgbmV4dCBtYXRjaDogJXMgc3RhcnRpbmcgYXQgJXMnOwokbGFuZ1snY2FuY2VsbGVkX2VtYWlsJ109J1lvdXIgbWF0Y2ggdGhhdCB3YXMgdG8gc3RhcnQgYXQgJXMgaGFzIGJlZW4gY2FuY2VsbGVkJzsKJGxhbmdbJ2Rlc2Nfd2hlcmUnXT0ndGhlIHZlbnVlIGZvciB0aGUgbWF0Y2gnOwokbGFuZ1snZGVzY193aGVuJ109J3RoZSBzY2hlZHVsZWQgZGF0ZSBhbmQgc3RhcnQtdGltZSBmb3IgdGhlIG1hdGNoJzsKJGxhbmdbJ2Rlc2NfZGF0ZSddPSd0aGUgZGF0ZSBjb21wb25lbnQgb2YgJHdoZW4nOwokbGFuZ1snZGVzY190aW1lJ109J3RoZSB0aW1lIGNvbXBvbmVudCBvZiAkd2hlbic7CiRsYW5nWydkZXNjX29wcG9uZW50J109J25hbWUgb2Ygb3Bwb25lbnQgKGJsYW5rL2VtcHR5IGlmIHVua25vd24pJzsKJGxhbmdbJ2Rlc2NfdGVhbXMnXT0nbmFtZXMgb2YgcGFydGljaXBhbnRzJzsKJGxhbmdbJ2Rlc2NfcmVjaXBpZW50J109J3RoZSBwZXJzb24gdG8gcmVjZWl2ZSB0aGUgbWVzc2FnZSc7CiRsYW5nWydkZXNjX3RvYWxsJ109J3doZXRoZXIgdGhlIG1lc3NhZ2Ugd2lsbCBiZSBzZW50IHRvIGFsbCB0ZWFtIG1lbWJlcnMgaW5kaXZpZHVhbGx5JzsKJGxhbmdbJ2Rlc2NfcmVwb3J0J109J3RoZSByZXBvcnRlZCBpbmZvcm1hdGlvbic7CgokbGFuZ1snaGVscF91c2Vfc21hcnR5J10gPSAnUGx1Z2lucyBhbmQgc21hcnR5IHZhcmlhYmxlcyBhcmUgdmFsaWQgaW4gdGhpcyBmaWVsZC4nOwokbGFuZ1snaGVscF9tYWlsb3V0X3RlbXBsYXRlJ109J0lmIGxlZnQgYmxhbmssIHRoZSBkZWZhdWx0IHRlbXBsYXRlIHdpbGwgYmUgdXNlZC4nOwokbGFuZ1snaGVscF9tYWlsaW5fdGVtcGxhdGUnXT0nQXQgYSBtaW5pbXVtLCBpbmNsdWRlIHskcmVwb3J0fS48YnIgLz5PciBpZiBsZWZ0IGJsYW5rLCB0aGUgZGVmYXVsdCB0ZW1wbGF0ZSB3aWxsIGJlIHVzZWQuJzsKJGxhbmdbJ2hlbHBfdHdlZXRvdXRfdGVtcGxhdGUnXT0nSWYgbGVmdCBibGFuaywgdGhlIGRlZmF1bHQgdGVtcGxhdGUgd2lsbCBiZSB1c2VkLic7CiRsYW5nWydoZWxwX3R3ZWV0aW5fdGVtcGxhdGUnXT0nQXQgYSBtaW5pbXVtLCBpbmNsdWRlIHskcmVwb3J0fS48YnIgLz5PciBpZiBsZWZ0IGJsYW5rLCB0aGUgZGVmYXVsdCB0ZW1wbGF0ZSB3aWxsIGJlIHVzZWQuJzsKJGxhbmdbJ2hlbHBfbG9naWMnXT0nSmF2YXNjcmlwdC9qcXVlcnkgdG8gYmUgZXhlY3V0ZWQgYmVmb3JlIHN1Ym1pdHRpbmcgYSBtYXRjaCByZXN1bHQuPGJyIC8+ClRoaXMgY29kZSBpcyBlbWJlZGRlZCBpbiBhIGpzIGZ1bmN0aW9uLCBhbmQgbXVzdCByZXR1cm4gZmFsc2UgaWYgdmFsaWRhdGlvbiBmYWlscyc7CgokbGFuZ1sndGl0bGVfc3RhcnRfZGF0ZSddPSdQcmVmZXJyZWQgc3RhcnQgZGF0ZSc7CiRsYW5nWyd0aXRsZV9lbmRfZGF0ZSddPSdQcmVmZXJyZWQgZmluaXNoIGRhdGUnOwokbGFuZ1snaGVscF9kYXRlJ109J0VudGVyIGRhdGUgaW4gYSBmb3JtYXQgdGhhdCBwaHBcJ3Mgc3RydG90aW1lKCkgd2lsbCByZWNvZ25pc2UuIFNlZSA8YSBocmVmPSJodHRwOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2RhdGV0aW1lLmZvcm1hdHMuZGF0ZS5waHAiPnRoZSBwaHAgZG9jdW1lbnRhdGlvbjwvYT4uPGJyIC8+Tm90ZSBhc3N1bXB0aW9uIGFib3V0IHNlcGFyYXRvcnMgaW4gYWJicmV2aWF0ZWQgZGF0ZXM6IG0vZC95IG9yIGQtbS15IG9yIGQubS55JzsKJGxhbmdbJ3RpdGxlX3BsYXlfZ2FwJ109J01pbmltdW0gcGVyaW9kIGJldHdlZW4gbWF0Y2hlcyc7CiRsYW5nWydoZWxwX3BsYXlfZ2FwJ109J1JlY292ZXJ5IHRpbWUgZm9yIGNvbXBldGl0b3JzLiBUaGUgbnVtYmVyIG5lZWQgbm90IGJlIHdob2xlLic7CgokbGFuZ1sndGl0bGVfbG9jYWxlJ109J0xvY2FsZSBpZGVudGlmaWVyIGZvciBsb2NhbGlzaW5nIGFkbWluaXN0cmF0aXZlIGRhdGUvdGltZSBwYXJhbWV0ZXJzJzsKJGxhbmdbJ2hlbHBfbG9jYWxlJ109JwpBICJsb2NhbGUiIGlzIGFuIGlkZW50aWZpZXIgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZ2V0IGxhbmd1YWdlLXNwZWNpZmljIHRlcm1zLiBFeGFtcGxlcyBhcmUgImVuX1VTIiBhbmQgImNzX0NaLlVURi04IiBhbmQgInpoX0hhbnRfVFciLgpSZWZlciB0byA8YSBocmVmPSJodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dldHRleHQvbWFudWFsL2h0bWxfbm9kZS9Mb2NhbGUtTmFtZXMuaHRtbCI+dGhpcyByZWZlcmVuY2U8L2E+IGZvciBtb3JlIGRldGFpbHMuCkJsYW5rIG1lYW5zIHVzZSBkZWZhdWx0Lic7CiRsYW5nWyd0aXRsZV9zYW1lX3RpbWUnXT0nTWF4aW11bSBudW1iZXIgb2YgY29udGVtcG9yYXJ5IG1hdGNoZXMnOwokbGFuZ1sndGl0bGVfaG91cnMnXT0nSG91cihzKSc7CiRsYW5nWyd0aXRsZV9kYXlzJ109J0RheShzKSc7CiRsYW5nWyd0aXRsZV93ZWVrcyddPSdXZWVrKHMpJzsKJGxhbmdbJ3RpdGxlX2NhbGVuZGFyJ109J0NhbGVuZGFyIGlkZW50aWZpZXInOwokbGFuZ1snaGVscF9jYWxlbmRhciddPSdTY2hlZHVsZSBtYXRjaGVzIGluIGFjY29yZGFuY2Ugd2l0aCByZXNlcnZhdGlvbnMgdW5kZXIgdGhpcyBuYW1lLCBhbmQgaWYgbmVjZXNzYXJ5LCByZXZlcnQgdG8gZGF5cy90aW1lcyBzcGVjaWZpZWQgYmVsb3cuJzsKJGxhbmdbJ3RpdGxlX2F2YWlsYWJsZSddPSdNYXRjaCBzY2hlZHVsaW5nIGNvbmRpdGlvbnMnOwokbGFuZ1snaGVscF9hdmFpbGFibGUnXSA9IDw8PCBFT1MKT25lIG9yIG1vcmUgKGluIHdoaWNoIGNhc2UsIGNvbW1hLXNlcGFyYXRlZCkgY29uZGl0aW9ucyBsaWtlICdQQFQnLCB3aGVyZTxiciAvPgomIzgyMjY7IChvcHRpb25hbCkgJ1AnIHJlcHJlc2VudHMgYSBwZXJpb2QtZGVzY3JpcHRvcjxiciAvPgomIzgyMjY7IChvcHRpb25hbCkgJ1QnIHJlcHJlc2VudHMgYSB0aW1lLWRlc2NyaXB0b3IgZm9yIHBlcmlvZCBQPGJyIC8+CiYjODIyNjsgc2VwYXJhdG9yICdAJyBpcyBuZWVkZWQgb25seSBpZiBib3RoIFAgYW5kIFQgYXJlIHByZXNlbnQ8YnIgLz4KSWYgVCBpcyBub3QgcHJlc2VudCBmb3IgYSBQLCBhbGwgdGltZXMgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIGRheXMgd2hpY2ggbWF0Y2ggUC48YnIgLz4KSWYgUCBpcyBub3QgcHJlc2VudCBmb3IgYSBULCB0aGUgdGltZXMgYXBwbHkgdG8gYWxsIGRheXMuPGJyIC8+CkFueSBQIG9yIFQgY2FuIGJlPGJyIC8+CiYjODIyNjsgYSBzaW5nbGUgdmFsdWU8YnIgLz4KJiM4MjI2OyBhIGJyYWNrZXQtZW5jbG9zZWQgYW5kIGNvbW1hLXNlcGFyYXRlZCBzZXF1ZW5jZSBvZiB2YWx1ZXMgKGluIGFueSBvcmRlcik8YnIgLz4KJiM4MjI2OyBhICcuLicgc2VwYXJhdGVkIHJhbmdlIG9mIHNlcXVlbnRpYWwgdmFsdWVzPGJyIC8+CkZvciBkYXRlcywgbW9udGggYW5kIGRheSwgb3IganVzdCBkYXksIGFyZSBvcHRpb25hbC4gVGltZXMgYXJlIDI0LWhvdXIsIG1pbnV0ZXMgYXJlIG9wdGlvbmFsLCAKdGhlIG1pbnV0ZS1zZXBhcmF0b3IgbXVzdCBiZSAnOicuIEluIHNvbWUgY29udGV4dHMsIGV4cHJlc3NpbmcgYSB0aW1lIGxpa2UgSDowMCBtYXkKYmUgbmVlZGVkIHRvIGRpc2NyaW1pbmF0ZSBiZXR3ZWVuIGhvdXJzLW9mLWRheSBhbmQgZGF5cy1vZi1tb250aC4gTm9uLXJhbmdlZCB0aW1lcwplYWNoIHJlcHJlc2VudCBvbmUgaG91ci4gT3RoZXIgbnVtZXJpYyB2YWx1ZXMgbWF5IGJlIDwgMCwgbWVhbmluZyBjb3VudCBiYWNrd2FyZHMuPGJyIC8+CkV4YW1wbGVzOjxiciAvPgomIzgyMjY7IDIwMDAgb3IgMjAwMC4uMjAwNSBvciAyMDAwLTYgb3IgMjAwMC0xMC4uMjAwMS0zIG9yIDIwMDAtOS0xIG9yIDIwMDAtMTAtMS4uMjAwMC0xMi0zMTxiciAvPgomIzgyMjY7IEphbnVhcnkgb3IgTm92ZW1iZXIuLkRlY2VtYmVyPGJyIC8+CiYjODIyNjsgZm9yIHdlZWsocyktb2YtYW55LW1vbnRoIChzb21lIG9mIHdoaWNoIG1heSBub3QgYmUgNy1kYXlzKTogMih3ZWVrKSBvciAtMSh3ZWVrKSBvciAyLi4zKHdlZWspPGJyIC8+CiYjODIyNjsgZm9yIHdlZWsocyktb2YtbmFtZWQtbW9udGg6IDIod2VlayhNYXJjaCkpIG9yIG9yIDEuLjMod2VlayhKdWx5LEF1Z3VzdCkpIG9yICgtMiwtMSkod2VlayhBcHJpbC4uSnVseSkpPGJyIC8+CiYjODIyNjsgZm9yIGRheShzKS1vZi1tb250aDogMSBvciAtMiBvciBvciAxLi4xMCBvciAyLi4tMSBvciAtMy4uLTE8YnIgLz4KJiM4MjI2OyBmb3IgZGF5KHMpLW9mLW1vbnRoOiAxKFN1bmRheSkgb3IgLTEoV2VkbmVzZGF5Li5GcmlkYXkpIG9yIDEuLjMoRnJpZGF5LFNhdHVyZGF5KTxiciAvPgomIzgyMjY7IGZvciBkYXlzKHMpLW9mLW5hbWVkLW1vbnRoOiAyKE1hcmNoKSBvciBvciAxLi4zKEp1bHksQXVndXN0KSBvciAoLTIsLTEpKEFwcmlsLi5KdWx5KSBvciAyKFN1bmRheShKdWx5Li5TZXB0ZW1iZXIpKTxiciAvPgomIzgyMjY7IGZvciBkYXkocyktb2Ytd2VlazogTW9uZGF5IG9yIFdlZG5lc2RheS4uRnJpZGF5PGJyIC8+CiYjODIyNjsgZm9yIHRpbWVzOiA5IG9yIDEyLi4yMyBvciA2OjMwLi4xNTozMCBvciBzdW5yaXNlLi4xNiBvciA5Li5zdW5zZXQtMzozMDxiciAvPgp7JGxhbmdbJ2hlbHBfdXNlX3NtYXJ0eSddfQpFT1M7CgokbGFuZ1snaGVscF9zYW1lX3RpbWUnXT0nQmxhbmsgbWVhbnMgbm8gbGltaXQnOwokbGFuZ1snaGVscF9zZWxlY3Rpb24nXT0nTm8gc2VsZWN0aW9uIG1lYW5zIG5vIHJlc3RyaWN0aW9uJzsKCiRsYW5nWyd0aXRsZV9wbGFjZV9nYXAnXT0nRXhwZWN0ZWQgbWF0Y2ggZHVyYXRpb24nOwokbGFuZ1snaGVscF9wbGFjZV9nYXAnXT0nTWluaW11bSBpbnRlcnZhbCBiZXR3ZWVuIG1hdGNoZXMgYXQgdGhlIHNhbWUgdmVudWUuIFRoZSBudW1iZXIgbmVlZCBub3QgYmUgd2hvbGUuJzsKCiRsYW5nWyd0aXRsZV9zZWVkdHlwZSddPSdBcnJhbmdlbWVudCBvZiBzZWVkZWQgY29tcGV0aXRvcnMnOwokbGFuZ1snc2VlZF9ub25lJ109J1JhbmRvbSc7CiRsYW5nWydzZWVkX3RvcG9ubHknXT0nUmFuZG9tIGV4Y2VwdCAxLDInOwokbGFuZ1snc2VlZF9iYWxhbmNlZCddPSdNb3JlLWVxdWFsIG1hdGNoZXMgZWcgMXYzJzsKJGxhbmdbJ3NlZWRfdW5iYWxhbmNlZCddPSdMZXNzLWVxdWFsIG1hdGNoZXMgZWcgMXY0JzsKJGxhbmdbJ3NlZWRfcmFuZGJhbGFuY2UnXT0nUmFuZG9tIG1vcmUtIG9yIGxlc3MtZXF1YWwnOwokbGFuZ1snaGVscF9zZWVkdHlwZSddPSdEZXRlcm1pbmVzIGhvdyBzZWVkcyBhcmUgYWxsb2NhdGVkIGFtb25nIGluaXRpYWwgbWF0Y2hlcyc7CgokbGFuZ1sndGl0bGVfZml4dHlwZSddPSdBcnJhbmdlbWVudCBvZiBvdGhlciBzZWxlY3RlZCBjb21wZXRpdG9ycyc7CiRsYW5nWydmaXhfbm9uZSddPSdOb25lJzsKJGxhbmdbJ2ZpeF9hZGphY2VudCddPSdNb3N0LWVxdWFsIG1hdGNoZXMgZS5nLi0xdi0yJzsKJGxhbmdbJ2ZpeF9iYWxhbmNlZCddPSdNb3JlLWVxdWFsIG1hdGNoZXMgZWcgLTF2LTMnOwokbGFuZ1snZml4X3VuYmFsYW5jZWQnXT0nTGVzcy1lcXVhbCBtYXRjaGVzIGVnIC0xdi00JzsKJGxhbmdbJ2hlbHBfZml4dHlwZSddPSdEZXRlcm1pbmVzIGhvdyBwbGF5ZXJzIHNlZWRlZCA8IDAgYXJlIGFzc2lnbmVkIHRvIGZpcnN0LXJvdW5kIG1hdGNoZXMnOwoKJGxhbmdbJ3RpdGxlX29yZGVyJ109J09yZGVyJzsKJGxhbmdbJ3RpdGxlX3BsYXllciddPSdQbGF5ZXInOwokbGFuZ1sndGl0bGVfdGVhbSddPSdUZWFtJzsKJGxhbmdbJ3RpdGxlX3RlYW1zJ109J1RlYW1zJzsKJGxhbmdbJ3RpdGxlX3NlZWQnXT0nU2VlZGVkJzsKJGxhbmdbJ3RpdGxlX2NvbnRhY3QnXT0nQ29udGFjdCBkZXRhaWxzJzsKJGxhbmdbJ3RpdGxlX21vdmUnXT0nUmUtb3JkZXInOwokbGFuZ1snaW5mb19ub3RlYW0nXT0nTm8gY29tcGV0aXRvciBpcyByZWNvcmRlZC4nOwokbGFuZ1sndGl0bGVfYWRkJ109J0FkZCBuZXcgJXMnOwokbGFuZ1sndGl0bGVfYWRkX2xvbmcnXT0nQUREIE5FVyAlcyBUTyAlcyc7CiRsYW5nWyd0aXRsZV9lZGl0X2xvbmcnXT0nVVBEQVRFICVzIElOICVzJzsKCiRsYW5nWyd1cCddPSdNb3ZlIHVwJzsKJGxhbmdbJ2Rvd24nXT0nTW92ZSBkb3duJzsKCiRsYW5nWydzY2hlZHVsZSddPSdTY2hlZHVsZSc7CiRsYW5nWydyZXNldCddPSdSZXNldCc7CiRsYW5nWydyZXNldF90aXAnXT0nY2xlYXIgYW5kIHJlbmV3IGFsbCBtYXRjaCBkYXRhJzsKJGxhbmdbJ2hpc3RvcnknXT0nSGlzdG9yeSc7CiRsYW5nWydoaXN0b3J5X3RpcCddPSdzaG93IGNvbXBsZXRlZCBtYXRjaGVzJzsKJGxhbmdbJ2Z1dHVyZSddPSdQZW5kaW5nJzsKJGxhbmdbJ2Z1dHVyZV90aXAnXT0nc2hvdyBtYXRjaGVzIG5vdCB5ZXQgY29tcGxldGVkJzsKJGxhbmdbJ2dldHNjb3JlJ109J1JlcXVlc3QnOwokbGFuZ1snZ2V0c2NvcmVfdGlwJ109J3NlbmQgc2NvcmUtcmVwb3J0IHJlcXVlc3QgdG8gdGVhbXMgZm9yIHNlbGVjdGVkIHJvd3MnOwoKJGxhbmdbJ25vdGlmeSddPSdOb3RpZnknOwokbGFuZ1snbm90aWZ5X3RpcCddPSdzZW5kIG1hdGNoLXRpbWUgbWVzc2FnZSB0byB0ZWFtcyBmb3Igc2VsZWN0ZWQgcm93cyc7CiRsYW5nWydhYmFuZG9uJ109J0FiYW5kb24nOwokbGFuZ1snYWJhbmRvbl90aXAnXT0nc2VuZCBjYW5jZWxsZWQtbWF0Y2ggbWVzc2FnZSB0byB0ZWFtcyBmb3Igc2VsZWN0ZWQgcm93cyc7CgokbGFuZ1snY2hhbmdlcyddPSdDaGFuZ2Vsb2cnOwokbGFuZ1snY2hhbmdlc190aXAnXT0nc2hvdyBsb2cgb2YgY2hhbmdlcyB0byBtYXRjaCByZXN1bHRzJzsKJGxhbmdbJ3RpdGxlX2NoYW5nZWxvZyddPSdMb2dnZWQgcmVzdWx0LWNoYW5nZXMgZm9yIFwnJXNcJyB0b3VybmFtZW50JzsKJGxhbmdbJ25vY2hhbmdlcyddPSdUaGVyZSBpcyBubyByZWNvcmRlZCBjaGFuZ2UuJzsKJGxhbmdbJ3RpdGxlX2NoYW5nZXInXT0nQ2hhbmdlcic7CiRsYW5nWyd0aXRsZV9jaGFuZ2V3aGVuJ109J1doZW4nOwokbGFuZ1sndGl0bGVfb2xkZGF0YSddPSdCZWZvcmUgQ2hhbmdlJzsKJGxhbmdbJ3RpdGxlX25ld2RhdGEnXT0nQWZ0ZXIgQ2hhbmdlJzsKCiRsYW5nWydzY2hlZHVsZWQnXT0nU2NoZWR1bGVkJzsKJGxhbmdbJ3BsYXllZCddPSdQbGF5ZWQnOwokbGFuZ1snc2NvcmUnXT0nU2NvcmUnOwoKJGxhbmdbJ2hlbHBfZG5kJ109J1lvdSBjYW4gY2hhbmdlIHRoZSBvcmRlciBieSBkcmFnZ2luZyBhbnkgcm93LCBvciBkb3VibGUtY2xpY2sgb24gYW55IG51bWJlciBvZiByb3dzIHByaW9yIHRvIGRyYWdnaW5nIHRoZW0gYWxsLic7CgokbGFuZ1snaW5mb19ub21hdGNoJ109J05vIG1hdGNoIGlzIHJlY29yZGVkLic7CiRsYW5nWydpbmZvX25vbWF0Y2gyJ109J0FsbCBtYXRjaGVzIGFyZSBjb21wbGV0ZS4nOwokbGFuZ1snaW5mb19ub3Jlc3VsdCddPSdObyByZXN1bHQgaXMgcmVjb3JkZWQuJzsKJGxhbmdbJ2luZm9fbm9yZXN1bHQyJ109J0FsbCByZXN1bHRzIGFyZSBjb21wbGV0ZS4nOwoKJGxhbmdbJ3RpdGxlX21pZCddPSdNYXRjaCc7CiRsYW5nWyd0aXRsZV92ZW51ZSddPSdWZW51ZSc7CiRsYW5nWydwb3NzaWJsZSddPSdNYXliZSc7CiRsYW5nWydhc2tlZCddPSdSZXF1ZXN0ZWQnOwokbGFuZ1snY29uZmlybWVkJ109J0NvbmZpcm1lZCc7CiRsYW5nWydub3RpZmllZCddPSdOb3RpZmllZCc7CiRsYW5nWyd0aXRsZV9yZXN1bHQnXT0nUmVzdWx0JzsKCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09CgokbGFuZ1sndGl0bGVfdGVhbW5hbWUnXT0nVGVhbSBuYW1lJzsKJGxhbmdbJ2hlbHBfdGVhbW5hbWUnXT0nSWYgYmxhbmssIHRoZSBuYW1lIG9mIHRoZSBmaXJzdC1saXN0ZWQgcGxheWVyIHdpbGwgYmUgdXNlZCc7CiRsYW5nWyd0aXRsZV9vcmRlcm51bSddPSdPcmRlciBudW1iZXInOwovLyRsYW5nWyd0aXRsZV9zZWVkbnVtJ109OyBzZWUgdGl0bGVfc2VlZAokbGFuZ1snaGVscF9zZWVkbnVtJ109PDw8RU9TCk9wdGlvbmFsIG51bWJlciwgMSAuLiB3aGF0ZXZlciBvciAtMSAuLiAtd2hhdGV2ZXIuCldoZW4gZGV0ZXJtaW5pbmcgZmlyc3QtbWF0Y2ggb3Bwb25lbnRzLCBjb21wZXRpdG9ycyBhc3NpZ25lZCBhIHNlZWQgPCAwCmFyZSBjb2xsZWN0aXZlbHkgdHJlYXRlZCBhcyBhbiBpbmRlcGVuZGVudCBzdWItc2VjdGlvbiBvZiB0aGUgdG91cm5hbWVudCwKYW5kIGluIGFjY29yZCB3aXRoIGl0cyAnb3RoZXIgc2VsZWN0ZWQgY29tcGV0aXRvcnMnIHNldHRpbmcuCkVPUzsKJGxhbmdbJ2hlbHBfb3JkZXInXT08PDxFT1MKQ29tcGV0aXRvcnMgYXJlIG9yZGVyZWQgYnkgdGhpcyBudW1iZXIsIG9uIHRoZSB0b3VybmFtZW50J3MgY29tcGV0aXRvcnMgdGFiLgpZb3UgbWF5IGVudGVyIC0xIHRvIHBsYWNlIHRoaXMgY29tcGV0aXRvciBmaXJzdCwgbGVhdmUgYmxhbmsgdG8gcGxhY2UgaXQgbGFzdC4KVGhlIGRpc3BsYXllZCBvcmRlciBoYXMgbm8gZWZmZWN0IG9uIG9wcG9uZW50IGRldGVybWluYXRpb24sIGJ1dCBtYXkgZWZmZWN0IHNjaGVkdWxpbmcuCkVPUzsKJGxhbmdbJ3RpdGxlX3NlbmR0byddPSdHaXZlIG1hdGNoLXJlbGF0ZWQgbm90aWNlcyB0byc7CiRsYW5nWydoZWxwX3NlbmR0byddPSdJZiBcJ29uZVwnLCB0aGV5IHNob3VsZCBnbyB0byB0aGUgZmlyc3QtbGlzdGVkIHBsYXllciBoYXZpbmcgdXNhYmxlIGNvbnRhY3QtZGV0YWlscyc7CiRsYW5nWydkZWxldGVwbGF5ZXInXT0nUmVtb3ZlIHRoaXMgcGxheWVyIGZyb20gdGhlIHRlYW0nOwoKLy89PT09PSBoaXN0b3J5ID09PT09CiRsYW5nWydtYXRjaF9hZGRlZCddPSdNYXRjaCAlZCByZXN1bHQgYWRkZWQnOwokbGFuZ1sncHJvY2Vzc2VkJ109J1RoaXMgbWF0Y2ggcmVzdWx0IGhhcyBiZWVuIHByb2Nlc3NlZC4nOwoKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy9pbiB0aGUgZm9sbG93aW5nLCB0ZXh0IGJldHdlZW4gPj4gYW5kIDw8IGlzIHVzZWQgZm9yIGEgbGluawokbGFuZ1snY2hhcnRfbm9zaG93J109J1RoaXMgYnJvd3NlciBjYW5cJ3QgZGlzcGxheSB0aGUgdG91cm5hbWVudCBjaGFydC4gWW91IGNhbiBnZXQgdGhlIGNoYXJ0IGZyb20gPj5oZXJlPDwsIGFuZCByZXZpZXcgaXQgdXNpbmcgc29tZSBvdGhlciBhcHBsaWNhdGlvbi4nOwoKJGxhbmdbJ2NvbXBfdGVtcGxhdGVfbmFtZSddID0gJ2Zyb20gJXMnOwokbGFuZ1sndGl0bGVfdG5tdF9vbGRuYW1lJ109J0Nsb25lZCBUb3VybmFtZW50JzsKLy8kbGFuZ1snYWxpYXMnXT0nQWxpYXMnOwovLyRsYW5nWyd0eXBlJ109J1R5cGUnOwoKJGxhbmdbJ3NhdmUnXT0nU3VibWl0JzsKJGxhbmdbJ3NhdmVkJ109J1NhdmVkJzsKCi8vYW55ICcgaW4gdGhlc2UgcHJvbXB0cyBtdXN0IGJlIGRvdWJsZS1lc2NhcGVkIGZvciBqcyBpbmNsdXNpb24KJGxhbmdbJ2FsbHNhdmVkJ109J0FyZSBhbGwgbWF0Y2hlc1xcXCcgZGF0YSBzYXZlZCA/JzsKJGxhbmdbJ2FsbGFiYW5kb24nXT0nQWJhbmRvbiBjaGFuZ2VzID8nOwoKJGxhbmdbJ3RpdGxlX2F1dGgnXT0nQXV0aG9yaXNlIHRvdXJuYW1lbnQtcmVsYXRlZCB0d2VldHMgZnJvbSBhIHNwZWNpZmljIHR3aXR0ZXIgYWNjb3VudCc7CiRsYW5nWydoZWxwX2F1dGgxJ109J1RvdXJuYW1lbnQ6ICVzJzsKJGxhbmdbJ2hlbHBfYXV0aDInXT0nTm9taW5hdGVkIGFjY291bnQ6ICVzJzsKJGxhbmdbJ2Nvbm5lY3QnXT0nVmlzaXQgVHdpdHRlcic7CgokbGFuZ1snY29tcF9kZWxldGVkJ109J1RvdXJuYW1lbnQgZGVsZXRlZC4nOwoKLy8kbGFuZ1sndXBkYXRlJ109J1VwZGF0ZSBUb3VybmFtZW50JzsKJGxhbmdbJ3VwZGF0ZWQnXSA9ICdVcGRhdGVkLic7CiRsYW5nWyd1cGRhdGVkMiddID0gJ1VwZGF0ZWQgJXMuJzsKJGxhbmdbJ3ZpZXcnXT0nVmlldyc7CiRsYW5nWydjYW5jZWwnXT0nQ2FuY2VsJzsKJGxhbmdbJ2Nsb3NlJ109J0Nsb3NlJzsKJGxhbmdbJ3ByZWZzX3VwZGF0ZWQnXT0nU2V0dGluZ3MgdXBkYXRlZC4nOwovLyRsYW5nWydicm93c2VyJ109J0Jyb3dzZXIgJXMnOwokbGFuZ1snYXBwbHknXT0nQXBwbHknOwokbGFuZ1snYXBwbHlfdGlwJ109J3NhdmUgYW5kIGNvbnRpbnVlIGVkaXRpbmcnOwoKJGxhbmdbJ3BhcmFtc190bXRfYWxpYXMnXT0nVG91cm5hbWVudCBhbGlhcy4nOwokbGFuZ1sncGFyYW1zX3ZpZXdfdHlwZSddPSdUb3VybmFtZW50IGRpc3BsYXkgdHlwZTogXCdjaGFydFwnIG9yIFwnbGlzdFwnLic7CiRsYW5nWydwYXJhbXNfY2hhcnRfY3NzJ109J05hbWUgb2YgdXBsb2FkZWQgLmNzcyBmaWxlIHdpdGggY2hhcnQtc3R5bGluZyBkZXRhaWxzLic7CiRsYW5nWydwYXJhbXNfdHdlZXRfYXV0aCddPSdTaG93IG9ubHkgYSB0d2l0dGVyLWFjY291bnQgYXV0aG9yaXNhdGlvbiBidXR0b24uJzsKCi8qCiRsYW5nWydldmVudF9pbmZvX1Jlc3VsdEFkZCddPSdFdmVudCB0cmlnZ2VyZWQgYWZ0ZXIgYSBtYXRjaCByZWNvcmQgaXMgZmlyc3QgcG9wdWxhdGVkJzsKJGxhbmdbJ2V2ZW50X2hlbHBfUmVzdWx0QWRkJ109JzxwPkV2ZW50IHRyaWdnZXJlZCBhZnRlciBhIG1hdGNoIHJlY29yZCBpcyBmaXJzdCBwb3B1bGF0ZWQ8L3A+CjxoND5QYXJhbWV0ZXJzPC9oND4KPHVsPgo8bGk+PGVtPmFsaWFzPC9lbT4gLSBUaGUgdG91cm5hbWVudCBhbGlhcyAoc3RyaW5nKTwvbGk+CjxsaT48ZW0+cmVjb3JkX2lkPC9lbT4gLSBUaGUgaW50ZXJuYWwgcmVzcG9uc2UgaWQgKGludCk8L2xpPgo8bGk+PGVtPnNpZGU8L2VtPiAtIFdoZXJlIHRoZSBlZGl0IHdhcyBpbml0aWF0ZWQgKCJhZG1pbiIgb3IgInVzZXIiKTwvbGk+CjwvdWw+JzsKCiRsYW5nWydldmVudF9pbmZvX01hdGNoQ2hhbmdlJ109J0V2ZW50IHRyaWdnZXJlZCBiZWZvcmUgYSBtYXRjaCByZWNvcmQgaXMgc2F2ZWQnOwokbGFuZ1snZXZlbnRfaGVscF9PblRvdXJuZXlNYXRjaENoYW5nZSddPSc8cD5FdmVudCB0cmlnZ2VyZWQgYmVmb3JlIGEgbWF0Y2ggcmVjb3JkIGlzIHNhdmVkPC9wPgo8aDQ+UGFyYW1ldGVyczwvaDQ+Cjx1bD4KPGxpPjxlbT5hbGlhczwvZW0+IC0gVGhlIHRvdXJuYW1lbnQgYWxpYXMgKHN0cmluZyk8L2xpPgo8bGk+PGVtPnNpZGU8L2VtPiAtIFdoZXJlIHRoZSBhZGRpdGlvbiB3YXMgaW5pdGlhdGVkICgiYWRtaW4iIG9yICJ1c2VyIik8L2xpPgo8L3VsPic7CiovCgovL3dpdGggcGFyYW1ldGVyIHJlcGxhY2VtZW50LCBhbnkgbGl0ZXJhbCAnJScgY2hhciBtdXN0IGJlIGRvdWJsZWQKJGxhbmdbJ2hlbHAnXT08PDxFT1MKPGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlRoaXMgbW9kdWxlIGFsbG93cyB5b3UgdG8gbWFuYWdlIGNvbXBldGl0aW9ucyBvZiBzZXZlcmFsIHNvcnRzLCBieSBzY2hlZHVsaW5nIG1hdGNoZXMsIHJlY29yZGluZyByZXN1bHRzLCBhbmQgZW5hYmxpbmcgcGFydGljaXBhbnRzIGFuZCBvdGhlcnMgdG8ga2VlcCBhYnJlYXN0IG9mIHByb2dyZXNzLjwvcD4KPGgzPkhvdyBEbyBJIFVzZSBJdD88L2gzPgo8cD5JbiB0aGUgQ01TTVMgYWRtaW4gQ29udGVudCBNZW51LCB5b3Ugc2hvdWxkIHNlZSBhIG1lbnUgaXRlbSBjYWxsZWQgJ1RvdXJuYW1lbnRzJy4KQ2xpY2sgb24gdGhhdC4gT24gdGhlIGRpc3BsYXllZCBwYWdlLCB0aGVyZSBhcmUgKHRvIHRoZSBleHRlbnQgdGhhdCB5b3UncmUgc3VpdGFibHkgYXV0aG9yaXNlZCkKbGlua3MgYW5kIGlucHV0cyBieSB3aGljaCB5b3UgY2FuIGFkZCBvciBjaGFuZ2UgYSB0b3VybmFtZW50LCBvciBjaGFuZ2UgbW9kdWxlIHNldHRpbmdzLjwvcD4KPGgzPkFkZGluZyBhIFRvdXJuYW1lbnQgdG8gYSBQYWdlPC9oMz4KPHA+U3VpdGFibHkgYXV0aG9yaXNlZCB1c2VycyB3aWxsIHNlZSwgb24gdGhlIG1vZHVsZSdzIGFkbWluIHBhZ2UsIHRoZSB0YWcgdXNlZCB0byBkaXNwbGF5IGVhY2ggdG91cm5hbWVudC4KRWFjaCB0YWcgbG9va3Mgc29tZXRoaW5nIGxpa2UgPHByZT57Y21zX21vZHVsZSBtb2R1bGU9J1RvdXJuZXknIGFsaWFzPSdzYW1wbGVfY29tcCd9PC9wcmU+PC9wPgo8cD5QdXQgc3VjaCBhIHRhZyBpbnRvIHRoZSBjb250ZW50IG9mIGEgcGFnZSBvciBpbnRvIGEgdGVtcGxhdGUsIG9wdGlvbmFsbHkgd2l0aCBleHRyYSBwYXJhbWV0ZXJzIGFzIGRlc2NyaWJlZCBiZWxvdy4KPGgzPlRvdXJuYW1lbnQgQ2hhcnRzPC9oMz4KPHA+VGhlc2UgYXJlIFBERiBmaWxlcywgY3JlYXRlZCB1c2luZyBhIFVURi04LWNhcGFibGUgPGEgaHJlZj0iaHR0cDovL3d3dy5mcGRmLm9yZy9lbi9zY3JpcHQvc2NyaXB0OTIucGhwIj52YXJpYW50PC9hPiBvZiB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5mcGRmLm9yZyI+RlBERjwvYT4gbGlicmFyeS4KVGhlIFBIUCBleHRlbnNpb24gJ21ic3RyaW5nJyBtdXN0IGJlIGF2YWlsYWJsZSBpZiBVVEYtOC1lbmNvZGVkIHRleHQgaXMgdG8gYmUgZGlzcGxheWVkLjwvcD4KPGgzPkNoYXJ0IFN0eWxpbmc8L2gzPgo8cD5TdHlsaW5nIGlzIG1hbmFnZWQgdXNpbmcgY3NzLWxpa2UgaW5mb3JtYXRpb24uIFJlY29nbmlzZWQgY2xhc3NlcyBhcmU8dWw+CjxsaT4uY2hhcnQ8L2xpPgo8bGk+LmJveCwgYW5kIHJlbGF0ZWQgcHNldWRvLWNsYXNzZXMgJzpub25maXJtJywgJzpmaXJtJywgJzpwbGF5ZWQnIGFuZCAnOndpbm5lcic8L2xpPgo8bGk+LmxpbmU8L2xpPgo8L3VsPjwvcD4KPHA+U3R5bGluZyBpcyBhcHBsaWVkIGF0IHRoZSBzZXJ2ZXIgZW5kLCB1c2luZyBhIHZlcnktYmFzaWMgbWVjaGFuaXNtLgpCb3gtc2lkZS1zcGVjaWZpYyBzdHlsaW5nIGlzIG5vdCBzdXBwb3J0ZWQsIGFwYXJ0IGZyb20gaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgbWFyZ2lucy4KQ2hhcnQgY2FuIGhhdmUgcHNldWRvLXByb3BlcnRpZXMgJ2dhcHdpZHRoJywgcmVwcmVzZW50aW5nIGV4dHJhIGhvcml6b250YWwgZGlzdGFuY2UgYmV0d2VlbiBib3hlcycgbWFyZ2lucywKYW5kICdtaW5oZWlnaHQnLCAnbWlud2lkdGgnLCByZXByZXNlbnRpbmcgYSBtaW5pbXVtIHBhZ2Ugc2l6ZSBmb3IgcHJpbnRlZC9wbGFpbiBjaGFydHMuCkJhY2tncm91bmQgaW1hZ2VzIGFuZCByYXJlIHByb3BlcnRpZXMgbGlrZSAnbGV0dGVyLXNwYWNpbmcnIGFyZSBub3Qgc3VwcG9ydGVkLgpSZWxhdGl2ZSB2YWx1ZXMgbGlrZSAnc21hbGwnLCAnJSUnIG9yICdlbScgaGF2ZSBubyBtZWFuaW5nLjwvcD4KPHA+Rm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgcmVwcmVzZW50cyB0aGUgZGVmYXVsdCBzZXR0aW5nczoKPHByZT4lczwvcHJlPjxiciAvPgpZb3UgY2FuIHNwZWNpZnkgdGhlIG5hbWUgb2YgYSBzdHlsZXNoZWV0IGZpbGUgYXMgb25lIG9mIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgdG91cm5hbWVudCwgZWl0aGVyIGluIHRoZSB0b3VybmFtZW50IHNldHRpbmdzIG9yIHRoZSByZWxldmFudCBwYWdlIHRhZy4gVGhlIGZpbGUgaXMgZXhwZWN0ZWQgdG8gYmUgbG9jYXRlZCBpbiB0aGUgd2Vic2l0ZSdzIHVwbG9hZHMgZGlyZWN0b3J5IG9yLCBkZXBlbmRpbmcgb24gdGhlIHJlbGV2YW50IG1vZHVsZSBwcmVmZXJlbmNlLCBhIGRlc2NlbmRhbnQgb2YgdGhhdCBkaXJlY3RvcnkuClRoZSBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdW5pcXVlIHRvIGEgc3BlY2lmaWMgdG91cm5hbWVudC4gQWJzZW50IHN1Y2ggZmlsZSwgdGhlIGRlZmF1bHRzIGFyZSBhcHBsaWVkLjwvcD4KPHA+VGhlIG1vZHVsZSBzaGlwcyB3aXRoIHZhcmlvdXMgVHlwZTEgZm9udHMsIHdoaWNoIGNhbiBiZSBzZWVuIGluIHRoZSAuLi4vbGliL2ZvbnQgZm9sZGVyLiBFeHRyYSBmb250cyBjYW4gYmUgPGEgaHJlZj0iaHR0cDovL3d3dy5mcGRmLm9yZy9lbi90dXRvcmlhbC90dXRvNy5odG0iPm1hbnVhbGx5IGluc3RhbGxlZDwvYT4uPGJyIC8+ClRydWV0eXBlIGZvbnRzIGNhbiBiZSB1c2VkLCBhbmQgd291bGQgdHlwaWNhbGx5IHJlc3VsdCBpbiBzbWFsbGVyLXNpemVkIGNoYXJ0IGZpbGVzLCBhcyBvbmx5IHRoZSB1c2VkLWNoYXJhY3RlcnMgYXJlIGVtYmVkZGVkIGluIHRoZSBmaWxlLiBUaGUgbW9kdWxlIHNoaXBzIHdpdGggc2VyaWYsIHNhbnMsIGNvbmRlbnNlZCBhbmQgbW9ubyBmb250LWZhbWlsaWVzICh0aGFua3MgdG8gVVJXKS4gT3RoZXIgLnR0ZiBmaWxlcyBtYXkgYmUgaW5zdGFsbGVkIGFzLWlzIGluIHRoZSB1cGxvYWRzIHN1Yi1kaXJlY3Rvcnkgc3BlY2lmaWVkIGluIHRoZSBtb2R1bGUgc2V0dGluZ3MsIG9yIGluIHRoZSBtb2R1bGUgc3ViLWRpcmVjdG9yeSAiLi4uL2xpYi9mb250L3R0ZiIuIFNldmVyYWwgJ3N0YW5kYXJkJyB0cnVldHlwZSBmb250cyAoY291cmllciBldGMpIGFyZSBzaW11bGF0ZWQuIFRoZXNlIGNhbiBiZSBzZWVuIGluICIuLi4vbGliL2ZvbnQvdW5pZm9udCIuPC9wPgo8aDM+Q29tbXVuaWNhdGlvbiBieSBUd2VldDwvaDM+CjxwPkEgdHdpdHRlciBhcHBsaWNhdGlvbiAnQ01TTVMgVG91cm5leU1vZHVsZScgaXMgdXNlZCB0byBjaGFubmVsIHR3ZWV0cyB0byBwYXJ0aWNpcGFudHMgYW5kL29yIHRoZSByZXNwb25zaWJsZSBwZXJzb24sIHdoZXJlIHRob3NlIHBlcnNvbnMnIGNvbnRhY3QgaXMgYSB0d2l0dGVyIGhhbmRsZS48L3A+CjxwPk9uZSB0d2l0dGVyIGFjY291bnQgKEBDTVNNU1RvdXJuZXkpIGhhcyBhdXRob3Jpc2VkIHRoYXQgYXBwLCBhbmQgYW55IG90aGVyIGFjY291bnQgbWF5IGxpa2V3aXNlIGRvIHNvLiBUbyBzZW5kIGZyb20gYSBkaWZmZXJlbnQgYWNjb3VudCwgZWl0aGVyPHVsPgo8bGk+YSBtb2R1bGUgdXNlciBuZWVkcyB0byBhdXRob3Jpc2UgaS5lLiBzdXBwbHkgdGhlIGFjY291bnQgcGFzc3dvcmQsIG9yPC9saT4KPGxpPnRoZSB3ZWJzaXRlIG5lZWRzIGEgbWVjaGFuaXNtIHdoaWNoIGVuYWJsZXMgdGhlIGFjY291bnQgaG9sZGVyIHRvIGluZGVwZW5kZW50bHkgYXV0aG9yaXNlPC9saT4KPC91bD4KYmVmb3JlIHRoZSBhY2NvdW50IGlzIHVzZWQuPC9wPgo8cD5Gb3IgdGhlIGxhdHRlciwgeW91IGNhbiBjcmVhdGUsIGFuZCBhdCBsZWFzdCB0ZW1wb3JhcmlseSBlbmFibGUsIGEgcGFnZSB3aXRoIHRhZyBsaWtlPHByZT57Y21zX21vZHVsZSBtb2R1bGU9J1RvdXJuZXknIGFsaWFzPSdzYW1wbGVfY29tcCcgdHdlZXRhdXRoPTF9PC9wcmU+b3IganVzdDxiciAvPntjbXNfbW9kdWxlIG1vZHVsZT0nVG91cm5leScgdHdlZXRhdXRoPTF9PC9wcmU+PGJyIC8+PGJyIC8+YW5kIHJlZmVyIHRoZSBhY2NvdW50IGhvbGRlciB0aGVyZS48L3A+CjxoMz5TdXBwb3J0PC9oMz4KPHA+VGhpcyBtb2R1bGUgaXMgcHJvdmlkZWQgYXMtaXMuIFBsZWFzZSByZWFkIHRoZSB0ZXh0IG9mIHRoZSBsaWNlbnNlIGZvciB0aGUgZnVsbCBkaXNjbGFpbWVyLjwvcD4KPHA+Rm9yIGhlbHA6PHVsPgo8bGk+ZGlzY3Vzc2lvbiBtYXkgYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZyI+Q01TIE1hZGUgU2ltcGxlIEZvcnVtczwvYT47IG9yPC9saT4KPGxpPnlvdSBtYXkgaGF2ZSBzb21lIHN1Y2Nlc3MgZW1haWxpbmcgdGhlIGF1dGhvciBkaXJlY3RseS48L2xpPgo8L3VsPjwvcD4KPHA+Rm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgbW9kdWxlLCBvciB0byByZXBvcnQgYSBidWcsIHZpc2l0IHRoZSBtb2R1bGUncyA8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkiPmZvcmdlLXBhZ2U8L2E+LjwvcD4KPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+CjxwPkNvcHlyaWdodCAmY29weTsgMjAxNC0yMDE1IFRvbSBQaGFuZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC48L3A+CjxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbGVhc2VkIHVuZGVyIHZlcnNpb24gMyBvZiB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwuaHRtbCI+R05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlPC9hPiwgYW5kIG1heSBiZSB1c2VkIG9ubHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGF0IGxpY2VuY2UsIG9yIGFueSBsYXRlciB2ZXJzaW9uIG9mIHRoYXQgbGljZW5zZSB3aGljaCBpcyBhcHBsaWVkIHRvIHRoZSBtb2R1bGUuPGJyIC8+ClRoZSBpbmNsdWRlZCBmb250cyBoYXZlIGJlZW4gbGljZW5zZWQgYnkgPGEgaHJlZj0iaHR0cDovL3d3dy51cndwcC5kZS9lbmdsaXNoL2hvbWUuaHRtbCI+VVJXPC9hPiB1bmRlciB0aGUgR1BMLjwvcD4KRU9TOwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lang/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.Calendar.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIGEgY2xhc3MgZm9yIENNUyBNYWRlIFNpbXBsZSAoVE0pLgpDb3B5cmlnaHQoQykgMjAxNC0yMDE1IFRvbSBQaGFuZSA8dHBnd3dAb25lcG9zdC5uZXQ+CgpUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgp0aGUgdGVybXMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQphbnkgbGF0ZXIgdmVyc2lvbi4KClRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCkdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiBJZiB5b3UgZG9uJ3QgaGF2ZSBhIGNvcHkKb2YgdGhhdCBsaWNlbnNlLCByZWFkIGl0IG9ubGluZSBhdDogd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNBR1BMCgpDbGFzczogQ2FsZW5kYXIKKi8KLyoqCkNhbGVuZGFyIEF2YWlsYWJpbGl0eSBMYW5ndWFnZQoKQXZhaWxhYmlsaXR5IGNvbnN0cmFpbnRzIGFyZSBzcGVjaWZpZWQgaW4gYSBzdHJpbmcgb2YgdGhlIGZvcm0KIGNvbmRpdGlvblssY29uZGl0aW9uMi4uLl0KV2hpdGVzcGFjZSBhbmQgbmV3bGluZXMgaW4gdGhlIHN0cmluZyBhcmUgaWdub3JlZC4gSWYgbW9yZSB0aGFuIG9uZSBjb25kaXRpb24gaXMKc3BlY2lmaWVkLCB0aGVpciBvcmRlciBpcyBpcnJlbGV2YW50LiAKCkVhY2ggY29uZGl0aW9uIGluIHRoZSBzdHJpbmcgaXMgb2YgdGhlIGZvcm0KIFtQRVJJT0RdW0BdW1RJTUVdClRoZSBzZXBhcmF0b3IgJ0AnIGlzIG1hbmRhdG9yeSBpZiBib3RoIFBFUklPRCBhbmQgVElNRSBhcmUgc3BlY2lmaWVkLiBJdCBtYXkKb3RoZXJ3aXNlIGJlIHVzZWQgaS5lLiBQRVJJT0RAIG9yIEBUSU1FLCB0byBjbGFyaWZ5IGFtYmlndW91cyBkYXRhLiAgRm9yIG5vdyBhdApsZWFzdCwgdGhlIGludGVycHJldGVyIHN1cHBvcnRzIExUUiBsYW5ndWFnZXMgb25seS4KClBFUklPRCBhbmQvb3IgVElNRSBtYXkgYmUKIGEgJ3NpbmdsZXRvbicgdmFsdWU7IG9yCiAoWCxZWywuLi5dKSB3aGljaCBzcGVjaWZpZXMgYSBzZXF1ZW5jZSBvZiBpbmRpdmlkdWFsIHZhbHVlcywgaW4gYW55IG9yZGVyLCBhbGwKIG9mIHdoaWNoIGFyZSB2YWxpZDsgb3IKIFguLlkgd2hpY2ggc3BlY2lmaWVzIGFuIGluY2x1c2l2ZSByYW5nZSBvZiBzZXF1ZW50aWFsIHZhbHVlcywgYWxsIG9mIHdoaWNoIGFyZQogdmFsaWQsIGFuZCBub3JtYWxseSBZIHNob3VsZCBiZSBjaHJvbm9sb2dpY2FsbHkgYWZ0ZXIgWCAoZXhjZXB0IHdoZW4gc3Bhbm5pbmcgYQogdGltZS1wZXJpb2QtZW5kIGUuZy4gMjM6MzAuLjI6MzAgb3IgRnJpZGF5Li5TdW5kYXkgb3IgRGVjZW1iZXIuLkZlYnJ1YXJ5KS4KCk9yZGluYXJ5IG51bWVyaWMgc2VxdWVuY2VzIGFuZCByYW5nZXMgYXJlIHN1cHBvcnRlZCwgYW5kIGZvciBzdWNoIHJhbmdlcywgWSBtdXN0CmJlIGdyZWF0ZXIgdGhhbiBYLCBhbmQgWCBhbmQvb3IgWSBtYXkgYmUgbmVnYXRpdmUuCgpBbnkgdmFsdWUsIGJyYWNrZXRlZC1zZXF1ZW5jZSBvciByYW5nZSBtYXkgaXRlbGYgYmUgYnJhY2tldGVkIGFuZCBwcmVjZWRlZCBieSBhCnF1YWxpZmllciwgYmVpbmcgYSBzaW5nbGUgdmFsdWUsIG9yIHNjb3BlLWV4cGFuZGVyIG9mIGFueSBvZiB0aGUgYWJvdmUgdHlwZXMuClN1Y2ggcXVhbGlmaWNhdGlvbiBtYXkgYmUgbmVzdGVkL3JlY3Vyc2VkLgoKQSB2YWx1ZSB3aGljaCBpcyBhIGRhdGUgaXMgZXhwZWN0ZWQgdG8gYmUgZm9ybWF0dGVkIGFzIHl5eXlbLVttXW1bLVtkXWRdXSBpLmUuCm1vbnRoIGFuZCBkYXkgYXJlIG9wdGlvbmFsLCBhbmQgbGVhZGluZyAwIGlzIG5vdCBuZWVkZWQgZm9yIG1vbnRoIG9yIGRheSB2YWx1ZS4KCkEgdmFsdWUgd2hpY2ggaXMgYSBtb250aC0gb3IgZGF5LW5hbWUgaXMgZXhwZWN0ZWQgdG8gYmUgaW4gYWNjb3JkIHdpdGggdGhlIGRlZmF1bHQsCm9yIGEgc3BlY2lmaWVkLCBsb2NhbGUuIE1vbnRoLSBhbmQvb3IgZGF5LW5hbWVzIG1heSBiZSBhYmJyZXZpYXRlZC4gVGhlIHRlcm0KJ3dlZWsnIGlzbid0IHN5c3RlbS1wb2xsYWJsZSwgYW5kIG11c3QgYmUgdHJhbnNsYXRlZCBtYW51YWxseS4gV2Vla3MgYWx3YXlzIHN0YXJ0Cm9uIFN1bmRheSAoYW5kIHNvICd3ZWVrJyBjYW4gYmUgY29uc2lkZXJlZCBlcXVpdmFsZW50IHRvICdTdW5kYXkuLlNhdHVyZGF5JykuCgpBIHZhbHVlIHdoaWNoIGlzIGEgdGltZSBpcyBleHBlY3RlZCB0byBiZSBmb3JtYXR0ZWQgYXMgW2hdaFs6W21dbV0gaS5lLiAyNC1ob3VyCmZvcm1hdCwgbGVhZGluZyAnMCcgb3B0aW9uYWwsIG1pbnV0ZXMgb3B0aW9uYWwgYnV0IGlmIHByZXNlbnQsIHRoZSBzZXBhcmF0b3IgaXMKJzonLiBJbiBzb21lIGNvbnRleHRzLCBbaF1oOjAwIG1heSBiZSBuZWVkZWQgaW5zdGVhZCBvZiBqdXN0IFtoXWgsIHRvIHJlbGlhYmx5CmRpc3Rpbmd1aXNoIGJldHdlZW4gaG91cnMtb2YtZGF5IGFuZCBkYXlzLW9mLW1vbnRoLiBTdW5yaXNlL3N1bnNldCB0aW1lcyBhcmUKc3VwcG9ydGVkLCBpZiByZWxldmFudCBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlIGRhdGEgYXJlIHByb3ZpZGVkLiBUaW1lcyBsaWtlCnN1bnJpc2Uvc3Vuc2V0ICsvLSBpbnRlcnZhbCBhcmUgYWxzbyBzdXBwb3J0ZWQuICBBIHRpbWUtdmFsdWUgd2hpY2ggaXMgbm90IGEKcmFuZ2UgaXMgYXNzdW1lZCB0byByZXByZXNlbnQgYSByYW5nZSBvZiAxLWhvdXIgbGVzcyAxLXNlY29uZC4KCk5lZ2F0aXZlLXZhbHVlIHBhcmFtZXRlcnMgY291bnQgYmFja3dhcmRzIGZyb20gbmV4dC1sb25nZXN0LWludGVydmFsLWVuZC4KCklmIG11bHRpcGxlIGNvbmRpdGlvbnMgYXJlIHNwZWNpZmllZCwgYW5kIGFueSBvZiB0aGVtIG92ZXJsYXAsIHRoZW4gbGVzcy1leHBsaWNpdC8KbW9yZS1saWJlcmFsIGNvbmRpdGlvbnMgcHJldmFpbCBvdmVyIG1vcmUtZXhwbGljaXQvbGVzcy1saWJlcmFsIG9uZXMuIFRoaXMgbWVhbnMKdGhhdCwgZm9yIGFueSBwYXJ0aWN1bGFyIGRhdGUvdGltZSwgaXQgd2lsbCBiZSBzdWZmaWNpZW50IGZvciBhbnkgY29tYmluYXRpb24gb2YKY29uZGl0aW9ucyB0byBiZSBzYXRpc2ZpZWQuCgpJZiBubyBjb25kaXRpb24gaXMgc3BlY2lmaWVkLCBubyBjb25zdHJhaW50IGFwcGxpZXMuCgpFeGFtcGxlczoKRGF0ZSBkZXNjcmlwdG9ycwogMjAwMCBvciAoMjAyMCwyMDI0KSBvciAyMDAwLi4yMDA1IG9yIDIwMDAtNiBvciAyMDAwLTEwLi4yMDAxLTMgb3IgMjAwMC05LTEKICAgb3IgMjAwMC0xMC0xLi4yMDAwLTEyLTMxCiBmb3IgbW9udGgocyktb2YtYW55LXllYXI6IEphbnVhcnkgb3IgKE1hcmNoLFNlcHRlbWJlcikgb3IgSnVseS4uRGVjZW1iZXIKIGZvciBtb250aChzKS1vZi1zcGVjZmljLXllYXI6IEphbnVhcnkoMjAwMCkgKG90aGVyd2lzZSBhcyAyMDAwLTEpCiAgIG9yIChNYXJjaCxTZXB0ZW1iZXIpKDIwMDApIG9yIEp1bHkuLkRlY2VtYmVyKDIwMDApCldlZWsgZGVzY3JpcHRvcnMKIGZvciB3ZWVrKHMpLW9mLWFueS1tb250aCAoc29tZSBvZiB3aGljaCBtYXkgbm90IGJlIDctZGF5cyk6IDIod2Vlaykgb3IgLTEod2VlaykKICAgb3IgMi4uMyh3ZWVrKQogZm9yIHdlZWsocyktb2YtbmFtZWQtbW9udGg6IDIod2VlayhNYXJjaCkpIG9yIG9yIDEuLjMod2VlayhKdWx5LEF1Z3VzdCkpCiAgIG9yICgtMiwtMSkod2VlayhBcHJpbC4uSnVseSkpCkRheSBkZXNjcmlwdG9ycwogZm9yIGRheShzKS1vZi1hbnktbW9udGg6IDEgb3IgLTIgb3IgKDE1LDE4LC0xKSBvciAxLi4xMCBvciAyLi4tMSBvciAtMy4uLTEgb3IKICAgIDEoU3VuZGF5KSBvciAtMShXZWRuZXNkYXkuLkZyaWRheSkgb3IgMS4uMyhGcmlkYXksU2F0dXJkYXkpCiBmb3IgZGF5KHMpLW9mLXNwZWNpZmljLXdlZWsocyk6IFN1bmRheSgyKHdlZWspKSBvcgogICAoU2F0dXJkYXksV2VkbmVzZGF5KSgtMy4uLTEod2VlayhKdWx5KSkpIG9yCiAgIE1vbmRheS4uRnJpZGF5KCgtMiwtMSkod2VlayhBcHJpbC4uSnVseSkpKQogZm9yIGRheShzKS1vZi1hbnktd2VlazogTW9uZGF5IG9yIChNb25kYXksV2VkbmVzZGF5LEZyaWRheSkgb3IgV2VkbmVzZGF5Li5GcmlkYXkKVGltZSBkZXNjcmlwdG9ycwogOSBvciAyOjMwIG9yICg5LDEyLDE1OjE1KSBvciAxMi4uMjMgb3IgNi4uMTU6MzAgb3Igc3VucmlzZS4uMTYgb3IgOS4uc3Vuc2V0LTM6MzAKKi8KCmNsYXNzIENhbGVuZGFyCnsKCXByb3RlY3RlZCAkbW9kOyAvL3JlZmVyZW5jZSB0byBjdXJyZW50IG1vZHVsZS1vYmplY3QKCS8qCglFYWNoIG1lbWJlciBvZiAkY29uZHMgaXMgYW4gYXJyYXkgKAoJMCA9PiAnZm9jdXMnLWxldmVsIChhcyBiZWxvdykgdG8gYXNzaXN0IGludGVycGV0aW5nIFBFUklPRCB2YWx1ZQoJCTEgbm8gcGVyaW9kICh0aW1lLW9ubHkpCgkJMiB1bnF1YWxpZmllZCB5ZWFyCgkJMyB1bnF1YWxpZmllZCBtb250aAoJCTQgdW5xdWFsaWZpZWQgd2VlawoJCTUgdW5xdWFsaWZpZWQgZGF5CgkJNiBxdWFsaWZpZWQgbW9udGgKCQk3IHF1YWxpZmllZCB3ZWVrCgkJOCBxdWFsaWZpZWQgbW9udGgKCQk5IHF1YWxpZmllZCBtb250aAoJCTEwIHNwZWNmaWMgZGF5CgkxID0+IEZBTFNFIG9yIFBFUklPRCA9IHN0cnVjdHVyZSBvZiBhcnJheXMgYW5kIHN0cmluZ3MgcmVwcmVzZW50aW5nIHBlcmlvZC12YWx1ZXMgYW5kL29yCgkJcGVyaW9kLXZhbHVlLXJhbmdlcwoJMiA9PiBGQUxTRSBvciBUSU1FID0gYXJyYXkgb2Ygc3RyaW5ncyByZXByZXNlbnRpbmcgdGltZS12YWx1ZXMgYW5kL29yIHRpbWUtdmFsdWUtcmFuZ2VzLAoJCXdpdGggc3VuLXJlbGF0ZWQgb25lcyBmaXJzdCwgYWxsIG9yZGVyZWQgYnkgaW5jcmVhc2luZyB2YWx1ZS9yYW5nZS1zdGFydAoJKTsKCSRjb25kcyB3aWxsIGJlIHNvcnRlZCwgZmlyc3Qgb24gWzBdIGFzY2VuZGluZywgdGhlbiBvbiBbMV0gVE9ETywgdGhlbiBvbgoJWzJdWz9dWzBdIGFzY2VuZGluZy4gTmVnYXRpdmUgdmFsdWVzIGluIFsxXSBhcmUgc29ydGVkIGFmdGVyIHBvc2l0aXZlcywgYnV0IG5vdAoJaW50ZXJwcmV0ZWQgdG8gY29ycmVzcG9uZGluZyBhY3R1YWwgdmFsdWVzLgoJVGltZXMgaW4gWzJdIGFyZSBub3QgaW50ZXJwcmV0ZWQuIE90aGVyIHRoYW4gc3VuLXJlbGF0ZWQgdmFsdWVzLCB0aGV5IGNhbiBiZQoJY29udmVydGVkIHRvIG1pZG5pZ2h0LXJlbGF0aXZlIHNlY29uZHMsIGFuZCBhbnkgb3ZlcmxhcHMgJ2NvYWxlc2NlZCcuIFN1bi1yZWxhdGVkCgl2YWx1ZXMgbXVzdCBvZiBjb3Vyc2UgYmUgaW50ZXJwcmV0ZWQgZm9yIGVhY2ggc3BlY2lmaWMgZGF5IGV2YWx1YXRlZC4KCSovCglwcm90ZWN0ZWQgJGNvbmRzOwovL3ByaXZhdGUgJG9iOyAvLycoJyBmb3IgbHRyLCAnKScgZm9yIHJ0bAovL3ByaXZhdGUgJGNiOyAvLycpJyBmb3IgbHRyLCAnKCcgZm9yIHJ0bAoJZnVuY3Rpb24gX19jb25zdHJ1Y3QoJiRtb2QpCgl7CgkJJHRoaXMtPm1vZCA9ICRtb2Q7CgkJJHRoaXMtPmNvbmRzID0gRkFMU0U7Cgl9CgoJLy8kb2Zmc2V0IHBvaW50cyB0byBvcGVuaW5nIGJyYWNrZXQgaW4gJHN0cgoJcHJpdmF0ZSBmdW5jdGlvbiBfTWF0Y2hCcmFja2V0KCRzdHIsJG9mZnNldCkKCXsKCQkkcCA9ICRvZmZzZXQ7CgkJJGQgPSAwOwoJCSRsID0gc3RybGVuKCRzdHIpOwoJCVdoaWxlICgkcCA8ICRsKQoJCXsKCQkJJGMgPSAkc3RyWyRwKytdOwoJCQlpZigkYyA9PSAnKCcpCgkJCQkkZCsrOyAvL3Nob3VsZCBnbyB0byAxIGltbWVkaWF0ZWx5CgkJCWVsc2VpZigkYyA9PSAnKScpCgkJCXsKCQkJCWlmKC0tJGQgPT0gMCkKCQkJCQlyZXR1cm4gJHAtMTsKCQkJCWVsc2VpZigkZCA8IDApCgkJCQkJcmV0dXJuIC0xOwoJCQl9CgkJfQoJCXJldHVybiAtMTsKCX0KCgkvLyRvZmZzZXQgcG9pbnRzIHRvIGluaXRpYWwgJy4nIGluICRzdHIKCXByaXZhdGUgZnVuY3Rpb24gX1N0YXJ0UmFuZ2UoJHN0ciwkb2Zmc2V0KQoJewoJCSRkID0gMDsKCQkkcCA9ICRvZmZzZXQ7CgkJV2hpbGUgKCRwID49IDApCgkJewoJCQkkYyA9ICRzdHJbJHAtLV07CgkJCXN3aXRjaCgkYykKCQkJewoJCQkgY2FzZSAnLic6CgkJCQlpZigrKyRkID4gMikJLy9zaG91bGQgbmV2ZXIgaGFwcGVuCgkJCQkJcmV0dXJuIC0xOwoJCQkJYnJlYWs7CgkJCSBjYXNlICcpJzoKCQkJIGNhc2UgJygnOgoJCQkgY2FzZSAnLCc6CgkJCQlyZXR1cm4gJHArMjsKCQkJfQoJCX0KCQlyZXR1cm4gMDsKCX0KCgkvLyRvZmZzZXQgcG9pbnRzIHRvIGluaXRpYWwgJy4nIGluICRzdHIKCXByaXZhdGUgZnVuY3Rpb24gX0VuZFJhbmdlKCRzdHIsJG9mZnNldCkKCXsKCQkkZCA9IDA7CgkJJHAgPSAkb2Zmc2V0OwoJCSRsID0gc3RybGVuKCRzdHIpOwoJCVdoaWxlICgkcCA8ICRsKQoJCXsKCQkJJGMgPSAkc3RyWyRwKytdOwoJCQlzd2l0Y2goJGMpCgkJCXsKCQkJIGNhc2UgJy4nOgoJCQkJaWYoKyskZCA+IDIpCgkJCQkJcmV0dXJuIC0xOwoJCQkJYnJlYWs7CgkJCSBjYXNlICcpJzsKCQkJIGNhc2UgJygnOwoJCQkgY2FzZSAnLCc7CgkJCSBjYXNlICdAJzsKCQkJCXJldHVybiAkcC0yOwoJCQl9CgkJfQoJCXJldHVybiAkbC0xOyAvL29mZnNldCBvZiBlbmQKCX0KCgkvKioKCV9QYXJzZVJhbmdlOgoKCVRoaXMgaXMgZm9yIHBlcmlvZC1pZGVudGlmaWVycywgbm8gdGltZXMgYXJlIGhhbmRsZWQuCgkoVE9ETyB2LjIgc3VwcG9ydCBlLmcuIFN1bmRheUAxMC4uTW9uZGF5QDE1OjMwID8pCglEZXBlbmRpbmcgb24gQGdldHN0ciwgdGhpcyBtYXkgcmV0dXJuIGEgMy1tZW1iZXIgYXJyYXkoTCwnLicsSCkgb3IgYSBzdHJpbmcKCXJlcHJlc2VuYXRpb24gb2YgdGhhdCBhcnJheSAnTC4uSCcuIEluIGVpdGhlciBjYXNlLCB0aGUgcmV0dXJuIG1heSBiZSBhCglzaW5nbGUgdmFsdWUgTCg9PUgpIG9yIEZBTFNFIHVwb24gZXJyb3IuCglUaGUgc2Vjb25kL21pZGRsZSBhcnJheSB2YWx1ZSAnLicJaXMgZmxhZywgZm9yIGZ1cnRoZXIgcHJvY2Vzc29ycywgdGhhdCB0aGUKCWFycmF5IHJlcHJlc2VudHMgYSByYW5nZS4gTCBhbmQvb3IgSCBhcmUgbm90IGludGVycHJldGVkIGluIGFueSB3YXksIGV4Y2VwdCB0aGF0CglpbmNvbXBsZXRlIGRhdGUtdmFsdWVzIHdpbGwgYmUgcG9wdWxhdGVkLgoKCUBzdHI6IHN0cmluZyB0byBiZSBwYXJzZWQsIGNvbnRhaW5pbmcgJy4uJyAoYW5kIG5vIHN1cnJvdW5kaW5nIGJyYWNrZXRzLCBvZiBjb3Vyc2UpCglAZ2V0c3RyOiBvcHRpb25hbCwgd2hldGhlciB0byByZXR1cm4gcmUtY29uc3RpdHV0ZWQgc3RyaW5nLCBkZWZhdWx0IFRSVUUKCSovCi8vCXByaXZhdGUKCWZ1bmN0aW9uIF9QYXJzZVJhbmdlKCRzdHIsJGdldHN0cj1UUlVFKQoJewoJCSRwYXJ0cyA9IGV4cGxvZGUoJy4uJywkc3RyLDIpOwoJCXdoaWxlKCRwYXJ0c1sxXVswXSA9PSAnLicpCgkJCSRwYXJ0c1sxXSA9IHN1YnN0cigkcGFydHNbMV0sMSk7CgkJaWYoJHBhcnRzWzBdID09PSAnJyB8fCAkcGFydHNbMV0gPT09ICcnKQoJCQlyZXR1cm4gRkFMU0U7CgkJaWYoJHBhcnRzWzBdID09ICRwYXJ0c1sxXSkKCQkJcmV0dXJuICRwYXJ0c1swXTsKCQkvL29yZGVyIHRoZSBwYWlyCgkJJHN3YXAgPSBGQUxTRTsKCQkkZGF0ZXB0biA9ICcvXihbMTJdWzAtOV17M30pKC0oMVswLTJdfDA/WzEtOV0pKC0oM1swMV18MD9bMS05XXxbMTJdWzAtOV0pKT8pPyQvJzsKLyogJHBhdHRlcm4gbWF0Y2hlcwonMjAwMS0xMC0xMicgPj4gYXJyYXkKICAwID0+IHN0cmluZyAnMjAwMS0xMC0xMicKCTEgPT4gc3RyaW5nICcyMDAxJwoJMiA9PiBzdHJpbmcgJy0xMC0xMicKICAzID0+IHN0cmluZyAnMTAnCiAgNCA9PiBzdHJpbmcgJy0xMicKICA1ID0+IHN0cmluZyAnMTInCicyMDAxLTEwJyA+PiBhcnJheQogIDAgPT4gc3RyaW5nICcyMDAxLTEwJwoJMSA9PiBzdHJpbmcgJzIwMDEnCgkyID0+IHN0cmluZyAnLTEwJwogIDMgPT4gc3RyaW5nICcxMCcKJzIwMDEnID4+IGFycmF5CgkwID0+IHN0cmluZyAnMjAwMScKCTEgPT4gc3RyaW5nICcyMDAxJwoqLwoJCWlmKHByZWdfbWF0Y2goJGRhdGVwdG4sJHBhcnRzWzBdLCRsb3BhcnRzKSAmJiBwcmVnX21hdGNoKCRkYXRlcHRuLCRwYXJ0c1sxXSwkaGlwYXJ0cykpCgkJewoJCQkkc3dhcCA9ICgkaGlwYXJ0c1sxXSA8ICRsb3BhcnRzWzFdKTsKCQkJaWYoJHN3YXApCgkJCXsKCQkJCWlmKCFpc3NldCgkaGlwYXJ0c1szXSkgJiYgaXNzZXQoJGxvcGFydHNbM10pKQoJCQkJCSRoaXBhcnRzWzNdID0gJzEnOwoJCQkJaWYoIWlzc2V0KCRoaXBhcnRzWzVdKSAmJiBpc3NldCgkbG9wYXJ0c1s1XSkpCgkJCQkJJGhpcGFydHNbNV0gPSAnMSc7CgkJCQlpZighaXNzZXQoJGxvcGFydHNbM10pICYmIGlzc2V0KCRoaXBhcnRzWzNdKSkKCQkJCQkkbG9wYXJ0c1szXSA9ICcxMic7CgkJCQlpZighaXNzZXQoJGxvcGFydHNbNV0pICYmIGlzc2V0KCRoaXBhcnRzWzVdKSkKCQkJCXsKCQkJCQkkc3RhbXAgPSBta3RpbWUoMCwwLDAsKGludCkkbG9wYXJ0c1szXSwxNSwoaW50KSRsb3BhcnRzWzFdKTsJCQkJCgkJCQkJJGxvcGFydHNbNV0gPSBkYXRlKCd0Jywkc3RhbXApOyAvL2xhc3QgZGF5IG9mIHNwZWNpZmllZCBtb250aAoJCQkJfQoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJHN3YXAgPSAoJGhpcGFydHNbMV0gPT0gJGxvcGFydHNbMV0pICYmICghaXNzZXQoJGhpcGFydHNbM10pIHx8CgkJCQkJKGlzc2V0KCRsb3BhcnRzWzNdKSAmJiAkaGlwYXJ0c1szXSA8ICRsb3BhcnRzWzNdKSk7CgkJCQlpZigkc3dhcCkKCQkJCXsKCQkJCQlpZighaXNzZXQoJGhpcGFydHNbM10pICYmIGlzc2V0KCRsb3BhcnRzWzNdKSkKCQkJCQkJJGhpcGFydHNbM10gPSAnMSc7CgkJCQkJaWYoIWlzc2V0KCRoaXBhcnRzWzVdKSAmJiBpc3NldCgkbG9wYXJ0c1s1XSkpCgkJCQkJCSRoaXBhcnRzWzVdID0gJzEnOwoJCQkJCWlmKCFpc3NldCgkbG9wYXJ0c1szXSkgJiYgaXNzZXQoJGhpcGFydHNbM10pKQoJCQkJCQkkbG9wYXJ0c1szXSA9ICcxMic7CgkJCQkJaWYoIWlzc2V0KCRsb3BhcnRzWzVdKSAmJiBpc3NldCgkaGlwYXJ0c1s1XSkpCgkJCQkJewoJCQkJCQkkc3RhbXAgPSBta3RpbWUoMCwwLDAsKGludCkkbG9wYXJ0c1szXSwxNSwoaW50KSRsb3BhcnRzWzFdKTsJCQkJCgkJCQkJCSRsb3BhcnRzWzVdID0gZGF0ZSgndCcsJHN0YW1wKTsgLy9sYXN0CgkJCQkJfQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCWlmKCFpc3NldCgkbG9wYXJ0c1s1XSkgJiYgaXNzZXQoJGhpcGFydHNbNV0pKQoJCQkJCXsKCQkJCQkJaWYoJGhpcGFydHNbNV0gIT0gJzEnKQoJCQkJCQkJJGxvcGFydHNbNV0gPSAnMSc7CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJJHN0YW1wID0gbWt0aW1lKDAsMCwwLChpbnQpJGhpcGFydHNbM10sMTUsKGludCkkaGlwYXJ0c1sxXSk7CQkJCQoJCQkJCQkJJGxvcGFydHNbNV0gPSBkYXRlKCd0Jywkc3RhbXApOyAvL2xhc3QKCQkJCQkJfQoJCQkJCX0KCQkJCQlpZighaXNzZXQoJGhpcGFydHNbNV0pICYmIGlzc2V0KCRsb3BhcnRzWzVdKSkKCQkJCQl7CgkJCQkJCSRzdGFtcCA9IG1rdGltZSgwLDAsMCwoaW50KSRoaXBhcnRzWzNdLDE1LChpbnQpJGhpcGFydHNbMV0pOwoJCQkJCQkkdG1wID0gZGF0ZSgndCcsJHN0YW1wKTsgLy9sYXN0CgkJCQkJCWlmKCRsb3BhcnRzWzVdICE9IHRtcCkKCQkJCQkJCSRoaXBhcnRzWzVdID0gJHRtcDsKCQkJCQkJZWxzZQoJCQkJCQkJJGhpcGFydHNbNV0gPSAnMSc7CgkJCQkJfQoJCQkJCWlmKCRoaXBhcnRzWzVdIDwgJGxvcGFydHNbNV0pCgkJCQkJCSRzd2FwID0gVFJVRTsKCQkJCX0KCQkJfQoJCQkkcGFydHNbMF0gPSAkbG9wYXJ0c1sxXTsKCQkJaWYoaXNzZXQoJGxvcGFydHNbM10pKQoJCQkJJHBhcnRzWzBdIC49ICctJy4kbG9wYXJ0c1szXTsKCQkJaWYoaXNzZXQoJGxvcGFydHNbNV0pKQoJCQkJJHBhcnRzWzBdIC49ICctJy4kbG9wYXJ0c1s1XTsKCQkJJHBhcnRzWzFdID0gJGhpcGFydHNbMV07CgkJCWlmKGlzc2V0KCRoaXBhcnRzWzNdKSkKCQkJCSRwYXJ0c1sxXSAuPSAnLScuJGhpcGFydHNbM107CgkJCWlmKGlzc2V0KCRoaXBhcnRzWzVdKSkKCQkJCSRwYXJ0c1sxXSAuPSAnLScuJGhpcGFydHNbNV07CgkJfQoJCWVsc2VpZihpc19udW1lcmljKCRwYXJ0c1swXSkgJiYgaXNfbnVtZXJpYygkcGFydHNbMV0pKQoJCXsKCQkJJHMgPSAoaW50KSRwYXJ0c1swXTsKCQkJJGUgPSAoaW50KSRwYXJ0c1sxXTsKCQkJaWYoKCRzID4gMCAmJiAkZSA+IDApfHwoJHMgPCAwICYmICRlIDwgMCkpCgkJCQkkc3dhcCA9ICgkcyA+ICRlKTsKCQkJZWxzZQoJCQkJJHN3YXAgPSAoJHMgPCAkZSk7CgkJfQoJCWVsc2UKCQl7CgkJCS8vYm90aCBzaG91bGQgYmUgRCogb3IgTSoKCQkJaWYoJHBhcnRzWzBdWzBdICE9ICRwYXJ0c1sxXVswXSkKCQkJCXJldHVybiBGQUxTRTsKCQkJJHMgPSAoaW50KXN1YnN0cigkcGFydHNbMF0sMSk7CgkJCSRlID0gKGludClzdWJzdHIoJHBhcnRzWzFdLDEpOwoJCQlpZigoJHMgPiAwICYmICRlID4gMCl8fCgkcyA8IDAgJiYgJGUgPCAwKSkKCQkJCSRzd2FwID0gKCRzID4gJGUpOwoJCQllbHNlCgkJCQkkc3dhcCA9ICgkcyA8ICRlKTsKCQl9CgkJaWYoJHN3YXApCgkJewoJCQkkdCA9ICRwYXJ0c1swXTsKCQkJJHBhcnRzWzBdID0gJHBhcnRzWzFdOwoJCQkkcGFydHNbMV0gPSAkdDsKCQl9CgkJaWYoJGdldHN0cikKCQkJcmV0dXJuICRwYXJ0c1swXS4nLi4nLiRwYXJ0c1sxXTsKCQllbHNlCgkJCXJldHVybiBhcnJheSgkcGFydHNbMF0sJy4nLCRwYXJ0c1sxXSk7Cgl9CgoJLy9Db21wYXJlIG51bWJlcnMgc3VjaCB0aGF0IC12ZSdzIGxhc3QKCXByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIF9jbXBfbnVtYmVycygkYSwkYikKCXsKCQlpZigoJGEgPj0gMCAmJiAkYiA8IDApIHx8ICgkYSA8IDAgJiYgJGIgPj0gMCkpIAoJCQlyZXR1cm4gKCRiLSRhKTsKCQlyZXR1cm4gKCRhLSRiKTsKCX0KCgkvL0NvbXBhcmUgc3RyaW5ncyBsaWtlIEQqIG9yIE0qCglwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBfY21wX25hbWVkKCRhLCRiKQoJewoJCSRzYSA9ICRhWzBdOwoJCSRzYiA9ICRiWzBdOwoJCWlmKCRzYSAhPSAkc2IpCgkJCXJldHVybiAoJHNhIC0gJHNiKTsgLy9zaG91bGQgbmV2ZXIgaGFwcGVuCgkJJHNhID0gKGludClzdWJzdHIoJGEsMSk7CgkJJHNiID0gKGludClzdWJzdHIoJGIsMSk7CgkJcmV0dXJuICgkc2EgLSAkc2IpOwoJfQoKCS8vQ29tcGFyZSBkYXRlLXN0cmluZ3MgbGlrZSBZWVlZWy1bTV1NWy1bRF1EXV0KCXByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIF9jbXBfZGF0ZXMoJGEsJGIpCgl7CgkJLy9iYXJlIHllYXJzIGRvbid0IHdvcmsgY29ycmVjdGx5CgkJJHMgPSAoc3RycG9zKCRhLCctJykhPUZBTFNFKSA/ICRhOiRhLictMS0xJzsKCQkkc3RBID0gc3RydG90aW1lKCRzKTsKCQkkcyA9IChzdHJwb3MoJGIsJy0nKSE9RkFMU0UpID8gJGI6JGIuJy0xLTEnOwoJCSRzdEIgPSBzdHJ0b3RpbWUoJHMpOwoJCXJldHVybiAoJHN0QS0kc3RCKTsKCX0KCQoJLyoqCglfUGFyc2VTZXF1ZW5jZToKCglUaGlzIGlzIGZvciBwZXJpb2QtaWRlbnRpZmllcnMsIG5vIHRpbWVzIGFyZSBoYW5kbGVkLgoJRXhwZWN0cyBhbGwgdmFsdWVzIGFyZSB0aGUgc2FtZSB0eXBlIGFzIHRoZSAxc3QgaW4gQHN0ciwgb3RoZXJ3aXNlIGVycm9yLgoJRGVwZW5kaW5nIG9uIEBnZXRzdHIsIHRoaXMgbWF5IHJldHVybiBhIE4tbWVtYmVyLCBhc2NlbmRpbmctc29ydGVkLCBuby1kdXBsaWNhdGVzLAoJY29udGlndW91cy1rZXllZCBhcnJheShMLC4uLixIKSwgb3IgYSBicmFja2V0LWVuY2xvc2VkLCBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nCglyZXByZXNlbmF0aW9uIG9mIHRoYXQgYXJyYXkuIEluIGVpdGhlciBjYXNlLCB0aGlzIG1heSBhbHNvIHJldHVybiBhIHNpbmdsZSB2YWx1ZQoJTCg9PWFsbCBvdGhlcnMpIG9yIEZBTFNFIHVwb24gZXJyb3IuCgoJQHN0cjogc3RyaW5nIHRvIGJlIHBhcnNlZCwgY29udGFpbmluZyAwIG9yIG1vcmUgJywncyBhbmQgbm8gc3Vycm91bmRpbmcgYnJhY2tldHMKCUBnZXRzdHI6IG9wdGlvbmFsLCB3aGV0aGVyIHRvIHJldHVybiByZS1jb25zdGl0dXRlZCBzdHJpbmcsIGRlZmF1bHQgVFJVRQoJKi8KCXByaXZhdGUgZnVuY3Rpb24gX1BhcnNlU2VxdWVuY2UoJHN0ciwkZ2V0c3RyPVRSVUUpCgl7CgkJJHBhcnRzID0gZXhwbG9kZSgnLCcsJHN0cik7CgkJaWYoY291bnQoJHBhcnRzKSA9PSAxKQoJCXsKCQkJaWYoc3RycG9zKCRzdHIsJy4uJykgPT09IEZBTFNFKQoJCQkJcmV0dXJuICRzdHI7CgkJCXJldHVybiBzZWxmOjpfUGFyc2VSYW5nZSgkc3RyLCRnZXRzdHIpOwoJCX0KCQkkZGF0ZXB0biA9ICcvXihbMTJdXGR7M30pKC0oMVswLTJdfDA/WzEtOV0pKC0oM1swMV18MD9bMS05XXxbMTJdXGQpKT8pPyQvJzsKCQkkdmFsID0gJHBhcnRzWzBdOwoJCWlmKHByZWdfbWF0Y2goJGRhdGVwdG4sJHZhbCkpCgkJewoJCQkkdHlwZSA9IDM7CgkJCSRjbXAgPSAnX2NtcF9kYXRlcyc7CgkJfQoJCWVsc2VpZihpc19udW1lcmljKCR2YWwpKQoJCXsKCQkJJHR5cGUgPSAxOwoJCQkkY21wID0gJ19jbXBfbnVtYmVycyc7CgkJfQoJCWVsc2UKCQl7CgkJCSR0eXBlID0gMjsKCQkgCSRjbXAgPSAnX2NtcF9uYW1lZCc7CgkJfQoKCQlmb3JlYWNoKCRwYXJ0cyBhcyAmJHZhbCkKCQl7CgkJCXN3aXRjaCAoJHR5cGUpCgkJCXsKCQkJIGNhc2UgMToKCQkJCWlmKGlzX251bWVyaWMoJHZhbCkpCgkJCQl7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQllbHNlaWYoc3RycG9zKCR2YWwsJy4uJykgIT09IEZBTFNFKQoJCQkJewoJCQkJCSRyID0gc2VsZjo6X1BhcnNlUmFuZ2UoJHZhbCxGQUxTRSk7CgkJCQkJaWYoaXNfYXJyYXkoJHIpICYmIGlzX251bWVyaWMoJHJbMF0pKQoJCQkJCQkkdmFsID0gJHJbMF0uJy4uJy4kclsyXTsgLy9ubyBzdWItYXJyYXkgaGVyZSwgcHJpb3IgdG8gZmxpcC9kZS1kdXAKCQkJCQllbHNlaWYoJHIgJiYgaXNfbnVtZXJpYygkcikpCgkJCQkJCSR2YWwgPSAkcjsKCQkJCQllbHNlCgkJCQkJewoJCQkJCQkkcGFydHMgPSBGQUxTRTsKCQkJCQkJYnJlYWsgMjsKCQkJCQl9CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJHBhcnRzID0gRkFMU0U7CgkJCQkJYnJlYWsgMjsKCQkJCX0KCQkJIGNhc2UgMjoKCQkJCWlmKHN0cnBvcygkdmFsLCcuLicpICE9PSBGQUxTRSkKCQkJCXsKCQkJCQkkciA9IHNlbGY6Ol9QYXJzZVJhbmdlKCR2YWwsRkFMU0UpOwoJCQkJCWlmKGlzX2FycmF5KCRyKSkgLy9UT0RPICYmIHNhbWUgdHlwZSBvZiBub24tbnVtZXJpYwoJCQkJCQkkdmFsID0gJHJbMF0uJy4uJy4kclsyXTsgLy9ubyBzdWItYXJyYXkgaGVyZQoJCQkJCWVsc2VpZigkcikgLy9UT0RPICYmIHNhbWUgdHlwZSBvZiBub24tbnVtZXJpYwoJCQkJCQkkdmFsID0gJHI7CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJJHBhcnRzID0gRkFMU0U7CgkJCQkJCWJyZWFrIDI7CgkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJZWxzZWlmKDEpIC8vVE9ETyBzYW1lIHR5cGUgb2Ygbm9uLW51bWVyaWMKCQkJCXsKCQkJCQlicmVhazsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkcGFydHMgPSBGQUxTRTsKCQkJCQlicmVhayAyOwoJCQkJfQoJCQkgY2FzZSAzOgoJCQkJaWYoc3RycG9zKCR2YWwsJy4uJykgIT09IEZBTFNFKQoJCQkJewoJCQkJCSRyID0gc2VsZjo6X1BhcnNlUmFuZ2UoJHZhbCxGQUxTRSk7CgkJCQkJaWYoaXNfYXJyYXkoJHIpICYmIHByZWdfbWF0Y2goJGRhdGVwdG4sJHJbMF0pKQoJCQkJCQkkdmFsID0gJHJbMF0uJy4uJy4kclsyXTsgLy9ubyBzdWItYXJyYXkgaGVyZQoJCQkJCWVsc2VpZigkciAmJiBwcmVnX21hdGNoKCRkYXRlcHRuLCRyKSkKCQkJCQkJJHZhbCA9ICRyOwoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCSRwYXJ0cyA9IEZBTFNFOwoJCQkJCQlicmVhayAyOwoJCQkJCX0KCQkJCQlicmVhazsKCQkJCX0KCQkJCWVsc2VpZihwcmVnX21hdGNoKCRkYXRlcHRuLCR2YWwpKQoJCQkJewoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCSRwYXJ0cyA9IEZBTFNFOwoJCQkJCWJyZWFrIDI7CgkJCQl9CgkJCX0KCQl9CgkJdW5zZXQoJHZhbCk7CgkJaWYoJHBhcnRzID09IEZBTFNFKQoJCQlyZXR1cm4gJyc7CgkJLy9yZW1vdmUgZHVwJ3Mgd2l0aG91dCBzb3J0aW5nIAoJCSRwYXJ0cyA9IGFycmF5X2ZsaXAoJHBhcnRzKTsKCQlpZihjb3VudCgkcGFydHMpID4gMSkKCQl7CgkJCSRwYXJ0cyA9IGFycmF5X2ZsaXAoJHBhcnRzKTsKCQkJdXNvcnQoJHBhcnRzLGFycmF5KCdDYWxlbmRhcicsJGNtcCkpOyAvL2tleXMgbm93IGNvbnRpZ3VvdXMKCQkJaWYoJGdldHN0cikKCQkJCXJldHVybiAnKCcuaW1wbG9kZSgnLCcsJHBhcnRzKS4nKSc7CgkJCWVsc2UKCQkJCXJldHVybiAkcGFydHM7CgkJfQoJCWVsc2UKCQkJcmV0dXJuIGtleSgkcGFydHMpOwoJfQoKCXByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIF9jbXBfcGVyaW9kcygkYSwkYikKCXsKCQkkc2EgPSAkYVsnZm9jdXMnXTsKCQkkc2IgPSAkYlsnZm9jdXMnXTsKLy8JCWlmKCRzYSAhPSAkc2IpCgkJCXJldHVybiAoJHNhLSRzYik7CgkJLy9UT0RPCi8vCQlyZXR1cm4gMDsKCX0KCgkvKioKCUBzdHIgaXMgUEVSSU9EIGNvbXBvbmVudCBvZiBhIGNvbmRpdGlvbgoJRGVwZW5kaW5nIG9uIEByZXBvcnQsIHJldHVybnMgc2FuaXRpc2VkIHZhcmlhbnQgb2YgQHN0ciBvciBhcnJheSwgb3IgaW4gZWl0aGVyCgljYXNlIEZBTFNFIHVwb24gZXJyb3I7CgkqLwovLwlwcml2YXRlIAoJZnVuY3Rpb24gX1BlcmlvZENsZWFuKCRzdHIsJHJlcG9ydCkKCXsKCQkkcGFydHMgPSBhcnJheSgpOwoJCSRvbmUgPSAnJzsKCQkkcyA9IDA7ICRlID0gMDsgJGQgPSAwOyAkbCA9IHN0cmxlbigkc3RyKTsKCQlmb3IoJHAgPSAwOyAkcCA8ICRsOyAkcCsrKQoJCXsKCQkJJGMgPSAkc3RyWyRwXTsKCQkJc3dpdGNoICgkYykKCQkJewoJCQkgY2FzZSAnKCc6CgkJCSAJaWYoKyskZCA9PSAxKSAvL0NIRUNLTUUgbm8gbmVzdGluZy1zdXBwb3J0PwoJCQkJewoJCQkJCSRlID0gc2VsZjo6X01hdGNoQnJhY2tldCgkc3RyLCRwKTsgLy9tYXRjaGluZyBicmFjZSAoaW4gY2FzZSBuZXN0ZWQpCgkJCQkJaWYoJGUgIT0gLTEpCgkJCQkJewoJCQkJCQlpZigwKQoJCQkJCQl7CgkJCQkJCQkvL1RPRE8gaGFuZGxlICdvZicgYnJhY2tldHMKCQkJCQkJCS8vVE9ETyAkb25lWydvZiddID0gCgkJCQkJCX0KCQkJCQkJZWxzZQoJCQkJCQl7CgkJCQkJCQkvL1RPRE8gJG9uZVsnb2YnXSA9IAoJCQkJCQkJJHMgPSAkcCsxOwoJCQkJCQkJJHQgPSBzZWxmOjpfUGFyc2VTZXF1ZW5jZShzdWJzdHIoJHN0ciwkcywkZS0kcyksRkFMU0UpOyAvL25vIG5lc3Rpbmcgc3VwcG9ydGVkCgkJCQkJCQlpZihpc19hcnJheSgkdCkpCgkJCQkJCQkJJHBhcnRzID0gYXJyYXlfbWVyZ2UoJHBhcnRzLCR0KTsKCQkJCQkJCWVsc2VpZigkdCAhPT0gRkFMU0UpCgkJCQkJCQkJJHBhcnRzW10gPSAkdDsKCQkJCQkJCWVsc2UKCQkJCQkJCQlyZXR1cm4gRkFMU0U7CgkJCQkJCQkkZCA9IDA7CgkJCQkJCQkkb25lID0gJyc7CgkJCQkJCX0KCQkJCQkJJHAgPSAkZTsgLy9yZXN1bWUgYWZ0ZXIgY2xvc2luZyBicmFja2V0CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQlyZXR1cm4gRkFMU0U7CgkJCQl9CgkJCQlicmVhazsKIAkJCSBjYXNlICcpJzogLy9uZXN0ZWQgKSBzaG91bGQgbmV2ZXIgaGFwcGVuIGluIHRoaXMgY29udGV4dAoJCQkgCWlmKC0tJGQgPCAwKQoJCQkJCXJldHVybiBGQUxTRTsKCQkJCWJyZWFrOwoJCQkgY2FzZSAnLic6CgkJCQkkcyA9IHNlbGY6Ol9TdGFydFJhbmdlKCRzdHIsJHApOwoJCQkJJGUgPSBzZWxmOjpfRW5kUmFuZ2UoJHN0ciwkcCk7CgkJCQlpZigkcyAhPSAtMSAmJiAkZSAhPSAtMSkKCQkJCXsKCQkJCQkvL2Nhbid0IHNhZmVseSBjcmVhdGUgcmFuZ2Ugc3ViLWFycmF5IGJlZm9yZSAkcGFydHNbXSBzb3J0IGFuZCBkZS1kdXAgCgkJCQkJJHQgPSBzZWxmOjpfUGFyc2VSYW5nZShzdWJzdHIoJHN0ciwkcywkZS0kcysxKSxUUlVFKTsKCQkJCQlpZigkdCAhPT0gRkFMU0UpCgkJCQkJewoJCQkJCQkkcGFydHNbXSA9ICR0OwoJCQkJCQkkb25lID0gJyc7CgkJCQkJCSRwID0gJGU7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJCXJldHVybiBGQUxTRTsKCQkgIGRlZmF1bHQ6CgkJCQlpZiAoJGMgIT0gJywnKQoJCQkJCSRvbmUgLj0gJGM7CgkJCQllbHNlaWYoJG9uZSkKCQkJCXsKCQkJCQkkcGFydHNbXSA9ICRvbmU7CgkJCQkJJG9uZSA9ICcnOwoJCQkJfQoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJaWYoJG9uZSkKCQl7Ci8vCQkJJG9uZVsnb2YnXSA9IDsgVE9ETwoJCQkkcGFydHNbXSA9ICRvbmU7IC8vbGFzdCBvbmUKCQl9CgkJZWxzZWlmKCRwYXJ0cyA9PSBGQUxTRSkKCQkJcmV0dXJuICcnOwoJCS8vVE9ETyByZW1vdmUgZHVwJ3MKCQlpZihjb3VudCgkcGFydHMpID4gMSkKCQl7Ci8vCQl1c29ydCgkcGFydHMsYXJyYXkoJ0NhbGVuZGFyJywnX2NtcF9wZXJpb2RzJykpOyAvL2tleXMgbm93IGNvbnRpZ3VvdXMKCQkJaWYoJHJlcG9ydCkKCQkJewoJCQkJcmV0dXJuICRzdHI7IC8vVE9ETyByZWNvbnN0cnVjdCBmcm9tICRwYXJ0cwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJLy9DSEVDS01FIGNvbnZlcnQgcmFuZ2VzIHRvIGFycmF5cyAoTCwuLEgpCgkJCQlyZXR1cm4gJHBhcnRzOwoJCQl9CgkJfQoJCWVsc2UKCQkJcmV0dXJuICRwYXJ0czsKCX0KCgkvL0NvbXBhcmUgdGltZS1zdHJpbmdzIGxpa2UgW3N1bipbKy1dXVtoXWhbOlttXW1dXSB3aXRob3V0IGV4cGVuc2l2ZQoJLy90aW1lLWNvbnZlcnNpb25zIGFuZCB3aXRoIGFsbCBzdW4qIGJlZm9yZSBhbGwgb3RoZXJzCglwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBfY21wX3RpbWVzKCRhLCRiKQoJewoJCSRzYSA9IHN0cnBvcygkYSwnLi4nKTsKCQlpZigkc2EgIT09IEZBTFNFKQoJCQkkYSA9IHN1YnN0cigkYSwwLCRzYSk7CQkKCQkkc2IgPSBzdHJwb3MoJGIsJy4uJyk7CgkJaWYoJHNiICE9PSBGQUxTRSkKCQkJJGIgPSBzdWJzdHIoJGIsMCwkc2IpOwoJCSRyYSA9IHN0cnBvcygkYSwnUicpOwoJCSRyYiA9IHN0cnBvcygkYiwnUicpOwoJCWlmKCRyYSAhPT0gRkFMU0UpCgkJewoJCQlpZigkcmIgPT09IEZBTFNFKQoJCQl7CgkJCQlyZXR1cm4gLTE7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkbWEgPSAoc3RybGVuKCRhKSA+ICRyYSsxKTsKCQkJCWlmKCRtYSkgJG5hID0gJGFbJHJhKzFdOwoJCQkJJG1iID0gKHN0cmxlbigkYikgPiAkcmIrMSk7CgkJCQlpZigkbWIpICRuYiA9ICRiWyRyYisxXTsKCQkJCWlmKCRtYSAmJiAkbWIpCgkJCQl7CgkJCQkJaWYoJG5hICE9ICRuYikKCQkJCQkJcmV0dXJuIChvcmQoJG5iKS1vcmQoJG5hKSk7IC8vJysnIDwgJy0nIHNvIHJldmVyc2UKCQkJCQllbHNlaWYoJG5hID09ICcrJykKCQkJCQl7CgkJCQkJCSRhID0gc3Vic3RyKCRhLCRyYSsyKTsKCQkJCQkJJGIgPSBzdWJzdHIoJGIsJHJiKzIpOwoJCQkJCQlnb3RvIHBsYWludGltZXM7CgkJCQkJfQoJCQkJCWVsc2VpZigkbmEgPT0gJy0nKQoJCQkJCXsKCQkJCQkJJHQgPSBzdWJzdHIoJGIsJHJiKzIpOyAvL3N3YXAKCQkJCQkJJGIgPSBzdWJzdHIoJGEsJHJhKzIpOwoJCQkJCQkkYSA9ICR0OwoJCQkJCQlnb3RvIHBsYWludGltZXM7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQkJcmV0dXJuIEZBTFNFOwoJCQkJfQoJCQkJZWxzZWlmKCRtYSAmJiAhJG1iKQoJCQkJewoJCQkJCXJldHVybiAoJG5hPT0nKycpID8gMTotMTsKCQkJCX0KCQkJCWVsc2VpZigkbWIgJiYgISRtYSkKCQkJCXsKCQkJCQlyZXR1cm4gKCRuYj09JysnKSA/IC0xOjE7CgkJCQl9CgkJCQlyZXR1cm4gMDsKCQkJfQoJCX0KCQkkc2EgPSBzdHJwb3MoJGEsJ1MnKTsKCQkkc2IgPSBzdHJwb3MoJGIsJ1MnKTsKCQlpZigkc2EgIT09IEZBTFNFKQoJCXsKCQkJaWYoJHNiID09PSBGQUxTRSkKCQkJewoJCQkJLy93YW50IHN1bnNldCBhZnRlciBzdW5yaXNlLCBiZWZvcmUgb3RoZXJzCgkJCQlpZigkcmIgIT09IEZBTFNFKSAvLyRiIGluY2x1ZGVzIFIKCQkJCQlyZXR1cm4gKCRyYT09PUZBTFNFKSA/IDE6LTE7CgkJCQllbHNlIC8vbm8gUiBhdCBhbGwKCQkJCQlyZXR1cm4gKCRyYT09PUZBTFNFKSA/IC0xOjE7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkbWEgPSAoc3RybGVuKCRhKSA+ICRzYSsxKTsKCQkJCWlmKCRtYSkgJG5hID0gJGFbJHNhKzFdOwoJCQkJJG1iID0gKHN0cmxlbigkYikgPiAkc2IrMSk7CgkJCQlpZigkbWIpICRuYiA9ICRiWyRzYisxXTsKCQkJCWlmKCRtYSAmJiAkbWIpCgkJCQl7CgkJCQkJaWYoJG5hICE9ICRuYikKCQkJCQkJcmV0dXJuIChvcmQoJG5iKS1vcmQoJG5hKSk7IC8vJysnIDwgJy0nIHNvIHJldmVyc2UKCQkJCQllbHNlaWYoJG5hID09ICcrJykKCQkJCQl7CgkJCQkJCSRhID0gc3Vic3RyKCRhLCRzYSsyKTsKCQkJCQkJJGIgPSBzdWJzdHIoJGIsJHNiKzIpOwoJCQkJCQkvL2ZhbGwgdGhyb3VnaCB0byBjb21wYXJlICRhLCRiCgkJCQkJfQoJCQkJCWVsc2VpZigkbmEgPT0gJy0nKQoJCQkJCXsKCQkJCQkJJHQgPSBzdWJzdHIoJGIsJHNiKzIpOyAvL3N3YXAKCQkJCQkJJGIgPSBzdWJzdHIoJGEsJHNhKzIpOwoJCQkJCQkkYSA9ICR0OwoJCQkJCQkvL2ZhbGwgdGhyb3VnaCB0byBjb21wYXJlICRhLCRiCgkJCQkJfQoJCQkJCWVsc2UKCQkJCQkJcmV0dXJuIEZBTFNFOwoJCQkJfQoJCQkJZWxzZWlmKCRtYSAmJiAhJG1iKQoJCQkJCXJldHVybiAoJG5hPT0nKycpID8gMTotMTsKCQkJCWVsc2VpZigkbWIgJiYgISRtYSkKCQkJCQlyZXR1cm4gKCRuYj09JysnKSA/IC0xOjE7CgkJCQlyZXR1cm4gMDsKCQkJfQoJCX0KCQllbHNlaWYoJHJiICE9PSBGQUxTRSkKCQkJcmV0dXJuICgkc2EgIT09IEZBTFNFKSA/IC0xIDogMTsgLy9zdW5zZXQgYWZ0ZXIgc3VucmlzZSwgYmVmb3JlIG90aGVycwoJCWVsc2VpZigkc2IgIT09IEZBTFNFKQoJCQlyZXR1cm4gKCRyYSAhPT0gRkFMU0UpID8gLTEgOiAxOyAvL2RpdHRvCgkJLy9ub3cganVzdCB0aW1lLXZhbHVlcwpwbGFpbnRpbWVzOgoJCSRzYSA9IHN0cnBvcygkYSwnOicpOwoJCSRzYiA9IHN0cnBvcygkYiwnOicpOwoJCWlmKCRzYSA9PT0gRkFMU0UpCgkJewoJCQlpZigkc2IgPT09IEZBTFNFKQoJCQkJcmV0dXJuICgkYS0kYik7CgkJCWVsc2UgLy8kYiBoYXMgbWludXRlcwoJCQl7CgkJCQkkaCA9IHN1YnN0cigkYiwwLCRzYikgKyAwOwoJCQkJcmV0dXJuICgkYSAhPSAkaCkgPyAoJGEtJGgpIDogLTE7CS8vJGIgbGF0ZXIgZm9yIHNhbWUgaG91cgoJCQl9CgkJfQoJCWVsc2VpZigkc2IgPT09IEZBTFNFKSAvL2FuZCAkYSBoYXMgbWludXRlcwoJCXsKCQkJJGggPSBzdWJzdHIoJGEsMCwkc2EpICsgMDsKCQkJcmV0dXJuICgkaCAhPSAkYikgPyAoJGgtJGIpIDogMTsgLy8kYSBsYXRlciBmb3Igc2FtZSBob3VyCgkJfQoJCWVsc2UKCQl7CgkJCSRoID0gc3Vic3RyKCRhLDAsJHNhKSArIDA7CgkJCSRoMiA9IHN1YnN0cigkYiwwLCRzYikgKyAwOwoJCQlpZigkaCA9PSAkaDIpCgkJCXsKCQkJCSRoID0gc3Vic3RyKCRhLCRzYSsxKSArIDA7CgkJCQkkaDIgPSBzdWJzdHIoJGIsJHNiKzEpICsgMDsKCQkJfQoJCQlyZXR1cm4gKCRoLSRoMik7CgkJfQoJfQoKCS8qKgoJQHN0ciBpcyBUSU1FIGNvbXBvbmVudCBvZiBhIGNvbmRpdGlvbgoJRGVwZW5kaW5nIG9uIEByZXBvcnQsIHJldHVybnMgc2FuaXRpc2VkIHZhcmlhbnQgb2YgQHN0ciBvciBhcnJheSBvZiB0aW1ldmFsdWVzLAoJd2l0aCBzdW4tcmVsYXRlZCB2YWx1ZXMgZmlyc3QsIHJlc3Qgc29ydGVkIGFzY2VuZGluZyBieSB2YWx1ZSBvciBzdGFydCBvZiByYW5nZQoJd2hlcmUgcmVsZXZhbnQsIG9yIGluIGVpdGhlciBjYXNlIEZBTFNFIHVwb24gZXJyb3IKCSovCglwcml2YXRlIGZ1bmN0aW9uIF9UaW1lQ2xlYW4oJHN0ciwkcmVwb3J0KQoJewoJCSRwYXJ0cyA9IGFycmF5KCk7CgkJJG9uZSA9ICcnOwoJCSRzID0gMDsgJGUgPSAwOyAkZCA9IDA7ICRsID0gc3RybGVuKCRzdHIpOwoJCWZvcigkcCA9IDA7ICRwIDwgJGw7ICRwKyspCgkJewoJCQkkYyA9ICRzdHJbJHBdOwoJCQlzd2l0Y2ggKCRjKQoJCQl7CgkJCSBjYXNlICcoJzoKCQkJIAlpZigrKyRkID09IDEpCgkJCQl7CgkJCQkJJGUgPSBzZWxmOjpfTWF0Y2hCcmFja2V0KCRzdHIsJHApOyAvL21hdGNoaW5nIGJyYWNlIChpbiBjYXNlIG5lc3RlZCkKCQkJCQlpZigkZSAhPSAtMSkKCQkJCQl7CgkJCQkJCSRzID0gJHArMTsKCQkJCQkJJHQgPSBzZWxmOjpfVGltZUNsZWFuKHN1YnN0cigkc3RyLCRzLCRlLSRzKSxGQUxTRSk7IC8vcmVjdXJzZQoJCQkJCQlpZihpc19hcnJheSgkdCkpCgkJCQkJCQkkcGFydHMgPSBhcnJheV9tZXJnZSgkcGFydHMsJHQpOwoJCQkJCQllbHNlaWYoJHQgIT09IEZBTFNFKQoJCQkJCQkJJHBhcnRzW10gPSAkdDsKCQkJCQkJZWxzZQoJCQkJCQkJcmV0dXJuIEZBTFNFOwoJCQkJCQkkZCA9IDA7CgkJCQkJCSRvbmUgPSAnJzsKCQkJCQkJJHAgPSAkZTsgLy9yZXN1bWUgYWZ0ZXIgY2xvc2luZyBicmFja2V0CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQlyZXR1cm4gRkFMU0U7CgkJCQl9CgkJCQlicmVhazsKIAkJCSBjYXNlICcpJzogLy9uZXN0ZWQgKSBzaG91bGQgbmV2ZXIgaGFwcGVuIGluIHRoaXMgY29udGV4dAoJCQkgCWlmKC0tJGQgPCAwKQoJCQkJCXJldHVybiBGQUxTRTsKCQkJCWJyZWFrOwoJCQkgY2FzZSAnLic6CgkJCQkkcyA9IHNlbGY6Ol9TdGFydFJhbmdlKCRzdHIsJHApOwoJCQkJJGUgPSBzZWxmOjpfRW5kUmFuZ2UoJHN0ciwkcCk7CgkJCQlpZigkcyAhPSAtMSAmJiAkZSAhPSAtMSkKCQkJCXsKCQkJCQkvL2Nhbm5vdCBzYWZlbHkgY3JlYXRlIHJhbmdlLWFycmF5IGJlZm9yZSAkcGFydHNbXSBzb3J0IGFuZCBkZS1kdXAgCgkJCQkJJHQgPSBzZWxmOjpfUGFyc2VSYW5nZShzdWJzdHIoJHN0ciwkcywkZS0kcysxKSxUUlVFKTsKCQkJCQlpZigkdCAhPT0gRkFMU0UpCgkJCQkJewoJCQkJCQkkcGFydHNbXSA9ICR0OwoJCQkJCQkkb25lID0gJyc7CgkJCQkJCSRwID0gJGU7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJCXJldHVybiBGQUxTRTsKCQkJIGNhc2UgJzonOgogCQkJICBpZigkcCA+ICRlKQoJCQkJewoJCQkJCSRjID0gJHN0clskcC0xXTsKCQkJCQlpZigkYzwnMCcgfHwgJGM+JzknKQoJCQkJCQkkb25lIC49ICcwJzsKCQkJCX0KCQkJICBpZigkcCA8ICRsLTEpCgkJCQl7CgkJCQkJJGMgPSAkc3RyWyRwKzFdOwoJCQkJCWlmKCRjPCcwJyB8fCAkYz4nOScpCgkJCQkJCSRvbmUgLj0gJzowJzsKCQkJCQllbHNlCgkJCQkJCSRvbmUgLj0gJzonOwoJCQkJfQoJCQkJZWxzZQoJCQkJCSRvbmUgLj0gJzowJzsKCQkJCWJyZWFrOwoJCSAgZGVmYXVsdDoKCQkJCWlmICgkYyAhPSAnLCcpCgkJCQkJJG9uZSAuPSAkYzsKCQkJCWVsc2VpZigkb25lKQoJCQkJewoJCQkJCSRwYXJ0c1tdID0gJG9uZTsKCQkJCQkkb25lID0gJyc7CgkJCQl9CgkJCQlicmVhazsKCQkJfQoJCX0KCQlpZigkb25lKQoJCQkkcGFydHNbXSA9ICRvbmU7IC8vbGFzdCBvbmUKCQllbHNlaWYoJHBhcnRzID09IEZBTFNFKQoJCQlyZXR1cm4gJyc7CgkJLy9yZW1vdmUgZHVwJ3Mgd2l0aG91dCBzb3J0aW5nCgkJJHBhcnRzID0gYXJyYXlfZmxpcCgkcGFydHMpOwoJCWlmKGNvdW50KCRwYXJ0cykgPiAxKQoJCXsKCQkJJHBhcnRzID0gYXJyYXlfZmxpcCgkcGFydHMpOwoJCQl1c29ydCgkcGFydHMsYXJyYXkoJ0NhbGVuZGFyJywnX2NtcF90aW1lcycpKTsgLy9rZXlzIG5vdyBjb250aWd1b3VzCgkJCWlmKCRyZXBvcnQpCgkJCQlyZXR1cm4gJygnLmltcGxvZGUoJywnLCRwYXJ0cykuJyknOwoJCQllbHNlCgkJCXsKCQkJCS8vQ0hFQ0tNRSBjb252ZXJ0IHJhbmdlcyB0byBhcnJheXMgKEwsLixIKQoJCQkJcmV0dXJuICRwYXJ0czsKCQkJfQoJCX0KCQllbHNlCgkJCXJldHVybiBrZXkoJHBhcnRzKTsKCX0KCgkvKioKCV9DcmVhdGVDb25kaXRpb25zOgoKCVByb2Nlc3MgY29uZGl0aW9uKHMpIGZyb20gQGF2YWlsIGludG8gJHRoaXMtPmNvbmRzLCBhbmQgaWYgQHJlcG9ydCBpcyBUUlVFLAoJY29uc3RydWN0IGEgJ3Nhbml0aXNlZCcgdmFyaWFudCBvZiBAYXZhaWwuCglEZXBlbmRpbmcgb24gQHJlcG9ydCwgcmV0dXJucyBUUlVFIG9yIHRoZSBjbGVhbmVkIHZhcmlhbnQsIG9yIGluIGVpdGhlciBjYXNlCglGQUxTRSB1cG9uIGVycm9yLgoJVW4tbmVjZXNzYXJ5IGJyYWNrZXRzIGFyZSBleGNpc2VkLiBAYXZhaWwgc3BsaXQgb24gb3V0c2lkZS1icmFja2V0IGNvbW1hcy4KCUFsbCBkYXktbmFtZXMgYWxpYXNlZCB0byBEMS4uRDcsIGFsbCBtb250aC1uYW1lcyBhbGlhc2VkIHRvIE0xLi5NMTIsCgknc3VucmlzZScgdG8gUiwgJ3N1bnNldCcgdG8gUywgJ3dlZWsnIHRvIFcsIHdoaXRlc3BhY2UgJiBuZXdsaW5lcyBnb25lLgoKCUBhdmFpbGFibGU6IGF2YWlsYWJpbGl0eS1jb25kaXRpb24gc3RyaW5nCglAbG9jYWxlOiBsb2NhbGUgaWRlbnRpZmllciBzdHJpbmcsIGZvciBsb2NhbGlzaW5nIGRheS9tb250aCBuYW1lcwoJICBwb3NzaWJseSBwcmVzZW50IGluIEBhdmFpbGFibGUKCUByZXBvcnQ6IG9wdGlvbmFsLCB3aGV0aGVyIHRvIGNvbnN0cnVjdCBhIGNsZWFuZWQgdmFyaWFudCBvZiBAYXZhaWwgYWZ0ZXIgcGFyc2luZywKCQlkZWZhdWx0IEZBTFNFCgkqLwovLwlwcml2YXRlIAoJZnVuY3Rpb24gX0NyZWF0ZUNvbmRpdGlvbnMoJGF2YWlsLCRsb2NhbGUsJHJlcG9ydD1GQUxTRSkKCXsKCQkkdGhpcy0+Y29uZHMgPSBGQUxTRTsKCQoJCSRnZXRzID0gcmFuZ2UoMSw3KTsKCQkkb2xkbG9jID0gRkFMU0U7CgkJaWYoJGxvY2FsZSkKCQl7CgkJCSRvbGRsb2MgPSBzZXRsb2NhbGUoTENfVElNRSwiMCIpOwoJCQlpZighc2V0bG9jYWxlKExDX1RJTUUsJGxvY2FsZSkpCgkJCQkkb2xkbG9jID0gRkFMU0U7CgkJfQoJCS8vTkIgc29tZSBvZiB0aGVzZSBtYXkgYmUgd3JvbmcsIGR1ZSB0byByYWNlIG9uIHRocmVhZGVkIHdlYi1zZXJ2ZXIKCQkkbG9uZ2RheXMgPSBzZWxmOjpBZG1pbkRheU5hbWVzKCRnZXRzKTsKCQkkc2hvcnRkYXlzID0gc2VsZjo6QWRtaW5EYXlOYW1lcygkZ2V0cyxGQUxTRSk7CgkJJGdldHMgPSByYW5nZSgxLDEyKTsKCQkkbG9uZ21vbnRocyA9IHNlbGY6OkFkbWluTW9udGhOYW1lcygkZ2V0cyk7CgkJJHNob3J0bW9udGhzID0gc2VsZjo6QWRtaW5Nb250aE5hbWVzKCRnZXRzLEZBTFNFKTsKCQlpZigkb2xkbG9jKQoJCQlzZXRsb2NhbGUoTENfVElNRSwkb2xkbG9jKTsKCQl1bnNldCgkZ2V0cyk7CgoJCSRkYXljb2RlcyA9IGFycmF5KCk7CgkJZm9yKCRpID0gMTsgJGkgPCA4OyAkaSsrKQoJCQkkZGF5Y29kZXNbXSA9ICdEJy4kaTsKCQkkbW9udGhjb2RlcyA9IGFycmF5KCk7CgkJZm9yKCRpID0gMTsgJGkgPCAxMzsgJGkrKykKCQkJJG1vbnRoY29kZXNbXSA9ICdNJy4kaTsKCQkvL05CIGxvbmcgYmVmb3JlIHNob3J0CgkJJHJpc2UgPSAkdGhpcy0+bW9kLT5MYW5nKCdzdW5yaXNlJyk7CgkJJHNldCA9ICR0aGlzLT5tb2QtPkxhbmcoJ3N1bnNldCcpOwoJCSR3ZWVrID0gJHRoaXMtPm1vZC0+TGFuZygnd2VlaycpOwoJCSRmaW5kcyA9IGFycmF5X21lcmdlKCRsb25nZGF5cywkc2hvcnRkYXlzLCRsb25nbW9udGhzLCRzaG9ydG1vbnRocywKCQkJYXJyYXkoJHJpc2UsJHNldCwkd2VlaywnICcsIlxuIikpOwoJCSRyZXBscyA9IGFycmF5X21lcmdlKCRkYXljb2RlcywkZGF5Y29kZXMsJG1vbnRoY29kZXMsJG1vbnRoY29kZXMsCgkJCWFycmF5KCdSJywnUycsJ1cnLCcnLCcnKSk7CgkJJGNsZWFuID0gc3RyX3JlcGxhY2UoJGZpbmRzLCRyZXBscywkYXZhaWwpOwoJCWlmKHByZWdfbWF0Y2goJy9bXlxkRE1SU1dAOistLiwoKV0vJywkY2xlYW4pKQoJCQlyZXR1cm4gRkFMU0U7CgkJJGwgPSBzdHJsZW4oJGNsZWFuKTsKCQkkcGFydHMgPSBhcnJheSgpOwoJCSRkID0gMDsKCQkkcyA9IDA7CgkJJGIgPSAtMTsKCQkkeGNsZWFuID0gRkFMU0U7CgkJZm9yKCRwPTA7ICRwPCRsOyAkcCsrKQoJCXsKCQkJc3dpdGNoICgkY2xlYW5bJHBdKQoJCQl7CgkJCSBjYXNlICcoJzoKCQkJCWlmKCsrJGQgPT0gMSkKCQkJCQkkYiA9ICRwOwoJCQkJYnJlYWs7CgkJCSBjYXNlICcpJzoKCQkJCWlmKC0tJGQgPCAwKQoJCQkJCXJldHVybiBGQUxTRTsKCQkJCS8vc3RyaXAgaW5hcHByb3ByaWF0ZSBicmFja2V0cwoJCQkJaWYoJGQgPT0gMCkKCQkJCXsKCQkJCQlpZigkcCA8ICRsLTEpIC8vYmVmb3JlIGVuZCwgd2FudCBwcmUtIG9yIHBvc3QtcXVhbGlmaWVyCgkJCQkJewoJCQkJCQkvL2NoZWNrIHBvc3QtCgkJCQkJCSRuID0gJGNsZWFuWyRwKzFdOwoJCQkJCQlpZigkbiA9PSAnQCcpIC8vICcpJyBOL0EgZm9yIGQgPSAwID8KCQkJCQkJewoJCQkJCQkJJGIgPSAtMTsKCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJfQoJCQkJCS8vYXQgZW5kLCBvciBubyBwb3N0LXF1YWxpZmllciwgd2FudCBwcmUtcXVhbGlmaWVyCgkJCQkJaWYoJGIgPiAkcykKCQkJCQl7CgkJCQkJCSRuID0gJGNsZWFuWyRiLTFdOwoJCQkJCQlpZigkbiA9PSAnKScgfHwgKCRuID49JzAnICYmICRuIDw9ICc5JykpIC8vICcoJyBOL0EgZm9yIGQgPSAwID8KCQkJCQkJewoJCQkJCQkJJGIgPSAtMTsKCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWlmKCRiID49ICRzKQoJCQkJCXsKCQkJCQkJJGNsZWFuWyRwXSA9ICcgJzsKCQkJCQkJJGNsZWFuWyRiXSA9ICcgJzsKCQkJCQkJJGIgPSAtMTsKCQkJCQkJJHhjbGVhbiA9IFRSVUU7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQkJcmV0dXJuIEZBTFNFOwoJCQkJfQoJCQkJYnJlYWs7CgkJCSBjYXNlICcsJzoKCQkJCWlmKCRkID09IDApCgkJCQl7CgkJCQkJaWYoJHAgPiAkcyAmJiAkY2xlYW5bJHAtMV0gIT0gJywnKQoJCQkJCXsKCQkJCQkJJHRtcCA9IHN1YnN0cigkY2xlYW4sJHMsJHAtJHMpOwoJCQkJCQlpZiAoJHhjbGVhbikKCQkJCQkJewoJCQkJCQkJJHBhcnRzW10gPSBzdHJfcmVwbGFjZSgnICcsJycsJHRtcCk7CgkJCQkJCQkkeGNsZWFuID0gRkFMU0U7CgkJCQkJCX0KCQkJCQkJZWxzZQoJCQkJCQkJJHBhcnRzW10gPSAkdG1wOwoJCQkJCX0KCQkJCQkkcyA9ICRwKzE7CgkJCQl9CgkJCSBkZWZhdWx0OgoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJaWYoJHAgPiAkcykKCQl7CgkJCSR0bXAgPSBzdWJzdHIoJGNsZWFuLCRzLCRwLSRzKTsgLy9sYXN0IChvciBlbnRpcmUpIHBhcnQKCQkJaWYgKCR4Y2xlYW4pCgkJCQkkcGFydHNbXSA9IHN0cl9yZXBsYWNlKCcgJywnJywkdG1wKTsKCQkJZWxzZQoJCQkJJHBhcnRzW10gPSAkdG1wOwoJCX0KCgkJJHJlcGVhdCA9IEZBTFNFOwoJCWZvcmVhY2goJHBhcnRzIGFzICYkb25lKQoJCXsKCQkJJHBhcnNlZCA9IGFycmF5KCk7CgkJCSRwID0gc3RycG9zKCRvbmUsJ0AnKTsgLy9QRVJJT0QtVElNRSBzZXBhcmF0b3IgcHJlc2VudD8KCQkJaWYoJHAgIT09IEZBTFNFKQoJCQl7CgkJCQkkZSA9IChzdHJsZW4oJG9uZSkgPT0gKCRwKzEpKTsgLy90cmFpbGluZyAnQCcKCQkJCWlmKCRwID09IDAgJiYgISRlKQoJCQkJewoJCQkJCSRwYXJzZWRbMF0gPSAxOyAvL2VudW0gZm9yIG9ubHktdGltZS1zcGVjaWZpZWQKCQkJCQkkcGFyc2VkWzFdID0gRkFMU0U7CgkJCQkJJHBhcnNlZFsyXSA9IHNlbGY6Ol9UaW1lQ2xlYW4oJG9uZSwkcmVwb3J0KTsKCQkJCX0KCQkJCWVsc2UgLy8kcCA+IDAgfHwgJGUKCQkJCQlpZigkcCA+IDAgJiYgJGUpCgkJCQl7CgkJCQkJJHBhcnNlZFsxXSA9IHNlbGY6Ol9QZXJpb2RDbGVhbigkb25lLCRyZXBvcnQpOwoJCQkJCWlmKCEkcmVwb3J0KQoJCQkJCQkkcGFyc2VkWzBdID0gJHBhcnNlZFsxXVsnZm9jdXMnXTsKCQkJCQkkcGFyc2VkWzJdID0gRkFMU0U7CgkJCQl9CgkJCQllbHNlaWYoJHAgPiAwKQoJCQkJewoJCQkJCSRwYXJzZWRbMV0gPSBzZWxmOjpfUGVyaW9kQ2xlYW4oc3Vic3RyKCRvbmUsMCwkcCksJHJlcG9ydCk7CgkJCQkJaWYoISRyZXBvcnQpCgkJCQkJCSRwYXJzZWRbMF0gPSAkcGFyc2VkWzFdWydmb2N1cyddOwoJCQkJCSRwYXJzZWRbMl0gPSBzZWxmOjpfVGltZUNsZWFuKHN1YnN0cigkb25lLCRwKzEpLCRyZXBvcnQpOwoJCQkJfQoJCQl9CgkJCWVsc2UgLy9QRVJJT0QgT1IgVElNRQoJCQl7CgkJCQlpZihwcmVnX21hdGNoKCd+W0RNV11+Jywkb25lKSkKCQkJCQkkY29uZHR5cGUgPSAyOyAvLz1wZXJpb2QKCQkJCS8vY2hlY2sgc3VucmlzZS9zZXQgYmVmb3JlIG51bWJlcnMsIGluIGNhc2UgaGF2ZSBzdW4qLUg6TQoJCQkJZWxzZWlmKHByZWdfbWF0Y2goJ35bU1JdficsJG9uZSkpCgkJCQkJJGNvbmR0eXBlID0gMTsgLy89dGltZQoJCQkJZWxzZQoJCQkJewoJCQkJCSRjb25kdHlwZSA9IDA7IC8vPXVuZGVjaWRlZAoJCQkJCS8vY2F0Y2ggbWFueSBkYXRlcyBhbmQgbnVtYmVycyAoPDAoaW5jbC4gZGF0ZS1zZXBhcmF0b3IpLCA+MjQpCgkJCQkJJG4gPSBwcmVnX21hdGNoX2FsbCgnflstOl0/XGQrficsJG9uZSwkbWF0Y2hlcyk7CgkJCQkJaWYoJG4pCgkJCQkJewoJCQkJCQlmb3JlYWNoKCRtYXRjaGVzWzBdIGFzICRuKQoJCQkJCQl7CgkJCQkJCQlpZigkblswXSA9PSAnOicgfHwgJG4gPT0gMCkgLy9oYXZlIG1pbnV0ZXMsIGRheS1vZi1tb250aCBuZXZlciAwCgkJCQkJCQl7CgkJCQkJCQkJJGNvbmR0eXBlID0gMTsKCQkJCQkJCQlicmVhazsKCQkJCQkJCX0KCQkJCQkJCWVsc2VpZigkbiA+IDI0IHx8ICRuIDwgMCkKCQkJCQkJCXsKCQkJCQkJCQkkY29uZHR5cGUgPSAyOwoJCQkJCQkJCWJyZWFrOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQkJLy9lbmQgb2YgYW5hbHlzaXMsIGZvciBub3cKCQkJCWlmICgkY29uZHR5cGUgPT0gMSkgLy90aW1lCgkJCQl7CgkJCQkJJHBhcnNlZFswXSA9IDE7CgkJCQkJJHBhcnNlZFsxXSA9IEZBTFNFOwoJCQkJCSRwYXJzZWRbMl0gPSBzZWxmOjpfVGltZUNsZWFuKCRvbmUsJHJlcG9ydCk7CgkJCQl9CgkJCQllbHNlaWYoJGNvbmR0eXBlID09IDIpIC8vcGVyaW9kCgkJCQl7CgkJCQkJJHBhcnNlZFsxXSA9IHNlbGY6Ol9QZXJpb2RDbGVhbigkb25lLCRyZXBvcnQpOwoJCQkJCWlmKCEkcmVwb3J0KQoJCQkJCQkkcGFyc2VkWzBdID0gJHBhcnNlZFsxXVsnZm9jdXMnXTsKCQkJCQkkcGFyc2VkWzJdID0gRkFMU0U7CgkJCQl9CgkJCQllbHNlIC8vY291bGQgYmUgZWl0aGVyIC0gcmUtY29uc2lkZXIsIGFmdGVyIGFsbCBhcmUga25vd24KCQkJCXsKCQkJCQkkcmVwZWF0ID0gVFJVRTsKCQkJCQkvL3BhcmsgYXMgYSB0aW1lLXZhbHVlLCB1bnNldCBwYXJzZWRbMF0gc2lnbmFscyByZWNvbnNpZGVyYXRpb24gbmVlZGVkCgkJCQkJJHBhcnNlZFsxXSA9IEZBTFNFOwoJCQkJCSRwYXJzZWRbMl0gPSAkb25lOwoJCQkJfQoJCQl9CgkJCSR0aGlzLT5jb25kc1tdID0gJHBhcnNlZDsKCQl9CgkJdW5zZXQoJG9uZSk7Ci8vCgkJaWYoJHJlcGVhdCkKCQl7CgkJCS8vc21hbGwgbnVtYmVyKHMpIGxvZ2dlZCwgbWF5IGJlIGZvciBob3VyKHMpIG9yIGRheShzKQoJCQkkdXNlZGF5ID0gRkFMU0U7CgkJCS8vaWYgYW55IFBFUklPRCByZWNvcmRlZCwgYXNzdW1lIGFsbCAnYmFyZScgbnVtYmVycyBhcmUgZGF5cy1vZi1tb250aAoJCQlmb3JlYWNoKCR0aGlzLT5jb25kcyBhcyAmJG9uZSkKCQkJewoJCQkJaWYoJG9uZVsxXSkKCQkJCXsKCQkJCQkkdXNlZGF5ID0gVFJVRTsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCQl1bnNldCgkb25lKTsKCQkJLy9pZiBzdGlsbCBub3Qgc3VyZSwgaW50ZXJwcmV0IHZhbHVlcyBpbiAkcGFydHNbXQoJCQlpZighJHVzZWRheSkKCQkJewoJCQkJLy9jYWxjIG1pbi4gbm9uLXplcm8gZGlmZmVyZW5jZSBiZXR3ZWVuIHNtYWxsIG51bWVyaWMgdmFsdWVzCgkJCQkkb25lID0gaW1wbG9kZSgnICcsJHBhcnRzKTsgLy8naGlnaGVyLXF1YWxpdHknIHRoYW4gJGNsZWFuCgkJCQkkbiA9IHByZWdfbWF0Y2hfYWxsKCd+KD88IVstOihcZF0pWzAtMl0/XGQoPyFbXGQoKV0pficsJG9uZSwkbWF0Y2hlcyk7CgkJCQlpZigkbiA+IDEpCgkJCQl7CgkJCQkJJG1pbmRpZmYgPSAyNS4wOyAvLz4gMjQgaG91cnMKCQkJCQkkbi0tOyAvL2ZvciAwLWJhc2UgY29tcGFyZXMKCQkJCQlzb3J0KCRtYXRjaGVzWzBdLFNPUlRfTlVNRVJJQyk7CgkJCQkJZm9yZWFjaCgkbWF0Y2hlc1swXSBhcyAkaz0+JG9uZSkKCQkJCQl7CgkJCQkJCWlmKCRrIDwgJG4pCgkJCQkJCXsKCQkJCQkJCSRkaWZmID0gKGZsb2F0KSgkbWF0Y2hlc1swXVskaysxXSAtICRvbmUpOwoJCQkJCQkJaWYgKCRkaWZmID4gLTAuMDAxICYmICRkaWZmIDwgMC4wMDEpCgkJCQkJCQl7CgkJCQkJCQkJJHVzZWRheSA9IFRSVUU7IC8vbnVtYmVycyByZXBlYXRlZCBvbmx5IGluIFBFUklPRC1kZXNjcmlwdG9ycwoJCQkJCQkJCWJyZWFrOwoJCQkJCQkJfQoJCQkJCQkJZWxzZWlmKCRkaWZmIDwgJG1pbmRpZmYpCgkJCQkJCQkJJG1pbmRpZmYgPSAkZGlmZjsKCQkJCQkJfQoJCQkJCX0KCQkJCQlpZiAoISR1c2VkYXkgJiYgJG1pbmRpZmYgPCAkc2xvdGhvdXJzKQoJCQkJCQkkdXNlZGF5ID0gVFJVRTsKCQkJCX0KCQkJCWVsc2VpZigkbikKCQkJCXsKCQkJCQkkbiA9ICRtYXRjaGVzWzBdWzBdOwoJCQkJCWlmKCRzbG90aG91cnMgPj0gMS4wKQoJCQkJCQkkdXNlZGF5ID0gKCRuIDwgJHNsb3Rob3Vycyk7CgkJCQkJZWxzZQoJCQkJCQkkdXNlZGF5ID0gKCRuIDwgNyB8fCAkbiA+IDE5KTsgLy9hcmJpdHJhcnkgY2hvaWNlIGZvciBhIHNpbmdsZSBudW1iZXIKCQkJCX0KCQkJCWVsc2UKCQkJCQkkdXNlZGF5ID0gVFJVRTsgLy9zaG91bGQgbmV2ZXIgZ2V0IGhlcmUKCQkJfQoJCQkvL25vdyBjbGVhbnVwIHRoZSBsb2dnZWQgdmFsdWVzCgkJCWZvcmVhY2goJHRoaXMtPmNvbmRzIGFzICYkb25lKQoJCQl7CgkJCQlpZiAoIWlzc2V0KCRvbmVbMF0pKQoJCQkJewoJCQkJCWlmKCR1c2VkYXkpCgkJCQkJewoJCQkJCQkvL3RyZWF0IHRoaXMgYXMgYSBkYXktdmFsdWUKCQkJCQkJJG9uZVswXSA9IDU7CgkJCQkJCSRvbmVbMV0gPSAkb25lWzJdOwoJCQkJCQkkb25lWzJdID0gRkFMU0U7CgkJCQkJfQoJCQkJCWVsc2UgLy90aW1lLW9ubHkKCQkJCQl7CgkJCQkJCSRvbmVbMF0gPSAxOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQl1bnNldCgkb25lKTsKCQl9CgoJCWlmKCRyZXBvcnQpCgkJewoJCQkvL3JlLW1lcmdlIHBhcnNlZCBhcnJheQoJCQkkcCA9IDA7CgkJCSRzID0gJyc7CgkJCWZvcmVhY2goJHRoaXMtPmNvbmRzIGFzICYkb25lKQoJCQl7CgkJCQlpZigkcCA9PT0gMCkKCQkJCQkkcCA9IDE7CgkJCQllbHNlCgkJCQkJJHMgLj0gJywnOwoJCQkJaWYoJG9uZVsxXSkKCQkJCXsKCQkJCQkkcyAuPSAkb25lWzFdOwoJCQkJCWlmKCRvbmVbMl0pCgkJCQkJCSRzIC49ICdAJy4kb25lWzJdOwoJCQkJfQoJCQkJZWxzZWlmKCRvbmVbMl0pCgkJCQkJJHMgLj0gJG9uZVsyXTsKCQkJfQoJCQl1bnNldCgkb25lKTsKCQkJJGZpbmRzID0gYXJyYXlfbWVyZ2UoJGRheWNvZGVzLCRtb250aGNvZGVzLGFycmF5KCdSJywnUycsJ1cnKSk7CgkJCSRyZXBscyA9IGFycmF5X21lcmdlKCRzaG9ydGRheXMsJHNob3J0bW9udGhzLGFycmF5KCRyaXNlLCRzZXQsJHdlZWspKTsKCQkJcmV0dXJuIHN0cl9yZXBsYWNlKCRmaW5kcywkcmVwbHMsJHMpOwoJCX0KCQllbHNlCgkJCXJldHVybiBUUlVFOwoJfQoKCS8vPT09PT09PT09PSBQVUJMSUMgRlVOQ1MgPT09PT09PT09PT0KIAoJLyoqCglBZG1pbk1vbnRoTmFtZXM6CgoJR2V0IG9uZSwgb3IgYXJyYXkgb2YsIGxvY2FsaXNlZCBtb250aC1uYW1lKHMpLgoJVGhpcyBpcyBmb3IgYWRtaW4gdXNlLCB0aGUgZnJvbnRlbmQgbG9jYWxlIG1heSBub3QgYmUgdGhlIHNhbWUgYW5kL29yIHN1cHBvcnRlZAoJYnkgdGhlIHNlcnZlci4KCglAd2hpY2g6IDEgKGZvciBKYW51YXJ5KSAuLiAxMiAoZm9yIERlY2VtYmVyKSwgb3IgYXJyYXkgb2Ygc3VjaCBpbmRpY2VzCglAZnVsbDogb3B0aW9uYWwsIHdoZXRoZXIgdG8gZ2V0IGxvbmctZm9ybSBuYW1lLCBkZWZhdWx0IFRSVUUKCSovCglmdW5jdGlvbiBBZG1pbk1vbnRoTmFtZXMoJHdoaWNoLCRmdWxsPVRSVUUpCgl7CgkJJHJldCA9IGFycmF5KCk7CgkJJHN0YW1wID0gdGltZSgpOwoJCSR0aGlzbSA9IGRhdGUoJ24nLCRzdGFtcCk7IC8vMSB0byAxMiByZXByZXNlbnRpbmcgSmFudWFyeSAuLiBEZWNlbWJlcgoJCWlmICghaXNfYXJyYXkoJHdoaWNoKSkKCQkJJHdoaWNoID0gYXJyYXkoJHdoaWNoKTsKCQkkZiA9ICgkZnVsbCkgPyAnRicgOiAnTSc7CgkJZm9yZWFjaCgkd2hpY2ggYXMgJG1vbnRoKQoJCXsKCQkJJG9mZnMgPSAkbW9udGgtJHRoaXNtOwoJCQlpZiAoJG9mZnMgPCAwKQoJCQkJJHJldFtdID0gZGF0ZSgkZixzdHJ0b3RpbWUoJG9mZnMuJyBtb250aHMnLCRzdGFtcCkpOwoJCQllbHNlaWYgKCRvZmZzID4gMCkKCQkJCSRyZXRbXSA9IGRhdGUoJGYsc3RydG90aW1lKCcrJy4kb2Zmcy4nIG1vbnRocycsJHN0YW1wKSk7CgkJCWVsc2UKCQkJCSRyZXRbXSA9IGRhdGUoJGYsJHN0YW1wKTsKCQl9CgkJaWYgKGNvdW50KCR3aGljaCkgPiAxKQoJCQlyZXR1cm4gJHJldDsKCQlyZXR1cm4ocmVzZXQoJHJldCkpOwoJfQoKCS8qKgoJQWRtaW5EYXlOYW1lczoKCglHZXQgb25lLCBvciBhcnJheSBvZiwgbG9jYWxpc2VkIGRheS1uYW1lKHMpLgoJVGhpcyBpcyBmb3IgYWRtaW4gdXNlLCB0aGUgZnJvbnRlbmQgbG9jYWxlIG1heSBub3QgYmUgdGhlIHNhbWUgYW5kL29yIHN1cHBvcnRlZAoJYnkgdGhlIHNlcnZlci4KCglAd2hpY2g6IDEgKGZvciBTdW5kYXkpIC4uIDcgKGZvciBTYXR1cmRheSksIG9yIGFycmF5IG9mIHN1Y2ggaW5kaWNlcwoJQGZ1bGw6IG9wdGlvbmFsIHdoZXRoZXIgdG8gZ2V0IGxvbmctZm9ybSBuYW1lIGRlZmF1bHQgVFJVRQoJKi8KCWZ1bmN0aW9uIEFkbWluRGF5TmFtZXMoJHdoaWNoLCRmdWxsPVRSVUUpCgl7CgkJJHJldCA9IGFycmF5KCk7CgkJJHN0YW1wID0gdGltZSgpOwoJCSR0b2RheSA9IGRhdGUoJ3cnLCRzdGFtcCk7IC8vMCB0byA2IHJlcHJlc2VudGluZyB0aGUgZGF5IG9mIHRoZSB3ZWVrIFN1bmRheSA9IDAgLi4gU2F0dXJkYXkgPSA2CgkJaWYgKCFpc19hcnJheSgkd2hpY2gpKQoJCQkkd2hpY2ggPSBhcnJheSgkd2hpY2gpOwoJCSRmID0gKCRmdWxsKSA/ICdsJyA6ICdEJzsKCQlmb3JlYWNoKCR3aGljaCBhcyAkZGF5KQoJCXsKCQkJJG9mZnMgPSAkZGF5LSR0b2RheS0xOwoJCQlpZiAoJG9mZnMgPCAwKQoJCQkJJHJldFtdID0gZGF0ZSgkZixzdHJ0b3RpbWUoJG9mZnMuJyBkYXlzJywkc3RhbXApKTsKCQkJZWxzZWlmICgkb2ZmcyA+IDApCgkJCQkkcmV0W10gPSBkYXRlKCRmLHN0cnRvdGltZSgnKycuJG9mZnMuJyBkYXlzJywkc3RhbXApKTsKCQkJZWxzZQoJCQkJJHJldFtdID0gZGF0ZSgkZiwkc3RhbXApOwoJCX0KCQlpZiAoY291bnQoJHdoaWNoKSA+IDEpCgkJCXJldHVybiAkcmV0OwoJCXJldHVybihyZXNldCgkcmV0KSk7Cgl9CgoJLyoqCglQYXJzZUNvbmRpdGlvbjoKCglQYXJzZSBjYWxlbmRhci1jb25zdHJhaW50IEBhdmFpbGFibGUgYW5kIHN0b3JlIHJlc3VsdCBpbiAkdGhpcy0+Y29uZHMuCglSZXR1cm5zIFRSVUUgdXBvbiBzdWNjZXNzLCBvciBpZiBubyBjb25zdHJhaW50IGFwcGxpZXMsIG90aGVyd2lzZSBGQUxTRS4KCVRoaXMgKG9yIENoZWNrQ29uZGl0aW9uKCkpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgcG9sbCBmb3IgYSBzdWl0YWJsZSBwZXJpb2QsCglvciBjaGVjayBmb3IgYSBtYXRjaGluZyBwZXJpb2QuCgoJQGF2YWlsYWJsZTogYXZhaWxhYmlsaXR5LWNvbmRpdGlvbiBzdHJpbmcKCUBsb2NhbGU6IG9wdGlvbmFsLCBsb2NhbGUgaWRlbnRpZmllciBzdHJpbmcgZm9yIGxvY2FsaXNpbmcgZGF5L21vbnRoIG5hbWVzCgkgIHBvc3NpYmx5IHByZXNlbnQgaW4gQGF2YWlsYWJsZSwgZGVmYXVsdCAnJwoJKi8KCWZ1bmN0aW9uIFBhcnNlQ29uZGl0aW9uKCRhdmFpbGFibGUsJGxvY2FsZT0nJykKCXsKCQlpZighJGF2YWlsYWJsZSkKCQl7CgkJCSR0aGlzLT5jb25kcyA9IEZBTFNFOwoJCQlyZXR1cm4gVFJVRTsKCQl9Ci8vCXJldHVybiBzZWxmOjpfQ3JlYXRlQ29uZGl0aW9ucygkYXZhaWxhYmxlLCRsb2NhbGUpOwoJCXJldHVybiBUUlVFOwoJfQoKCS8qKgoJQ2hlY2tDb25kaXRpb246CgoJRGV0ZXJtaW5lIHdoZXRoZXIgY2FsZW5kYXItY29uc3RyYWludCBAYXZhaWxhYmxlIGhhcyBjb3JyZWN0IHN5bnRheC4KCVJldHVybnMgJycgaWYgQGF2YWlsYWJsZSBpcyBGQUxTRSAobm8gY29uc3RyYWludCBhcHBsaWVzKSwgb3IgYSBjbGVhbmVkLXVwCgl2YXJpYW50IG9mIEBhdmFpbGFibGUsIG9yIEZBTFNFIGlmIEBhdmFpbGFibGUgaXMgYmFkLgoJQWxzbyBzdG9yZXMgdGhlIHBhcnNlZCBAYXZhaWxhYmxlIGluICR0aGlzLT5jb25kcy4gVGhpcyAob3IgUGFyc2VDb25kaXRpb24oKSkKCW11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgcG9sbCBmb3IgYSBzdWl0YWJsZSBwZXJpb2QsIG9yIGNoZWNrIGZvciBhIG1hdGNoaW5nCglwZXJpb2QuCgoJQGF2YWlsYWJsZTogYXZhaWxhYmlsaXR5LWNvbmRpdGlvbiBzdHJpbmcKCUBsb2NhbGU6IG9wdGlvbmFsLCBsb2NhbGUgaWRlbnRpZmllciBzdHJpbmcgZm9yIGxvY2FsaXNpbmcgZGF5L21vbnRoIG5hbWVzCgkgIHBvc3NpYmx5IHByZXNlbnQgaW4gQGF2YWlsYWJsZSwgZGVmYXVsdCAnJwoJKi8KCWZ1bmN0aW9uIENoZWNrQ29uZGl0aW9uKCRhdmFpbGFibGUsJGxvY2FsZT0nJykKCXsKCQlpZighJGF2YWlsYWJsZSkKCQl7CgkJCSR0aGlzLT5jb25kcyA9IEZBTFNFOwoJCQlyZXR1cm4gJyc7CgkJfQovLwkJcmV0dXJuIHNlbGY6Ol9DcmVhdGVDb25kaXRpb25zKCRhdmFpbGFibGUsJGxvY2FsZSxUUlVFKTsKCQlyZXR1cm4gdHJpbSgkYXZhaWxhYmxlKTsKCX0KCn0KCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.cssparser.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKQ2xhc3M6IGNzc3BhcnNlci4KQ29weXJpZ2h0IChDKSAyMDAzIFRob21hcyBCasO2cmsKVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKYW55IGxhdGVyIHZlcnNpb24uCgpUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CldJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQpHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gSWYgeW91IGRvbid0IGhhdmUgYSBjb3B5IG9mCnRoYXQgbGljZW5zZSwgcmVhZCBpdCBvbmxpbmUgYXQ6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0xHUEwKCkh0bWwtcmVsYXRlZCBmdW5jdGlvbmFsaXR5IG9taXR0ZWQuIFJlZHVuZGFudCB1bnNldHRpbmcgb21pdHRlZC4gQnVncyBmaXhlZC4KKi8KY2xhc3MgY3NzcGFyc2VyIHsKICB2YXIgJGNzczsKCiAgZnVuY3Rpb24gY3NzcGFyc2VyKCkgewogICAgJHRoaXMtPmNzcyA9IGFycmF5ICgpOwogIH0KCiAgZnVuY3Rpb24gQ2xlYXIoKSB7CiAgICB1bnNldCgkdGhpcy0+Y3NzKTsKICAgICR0aGlzLT5jc3MgPSBhcnJheSgpOwogIH0KCiAgZnVuY3Rpb24gQWRkKCRrZXksICRjb2Rlc3RyKSB7CiAgICAka2V5ID0gc3RydG9sb3dlcigka2V5KTsKICAgIGlmKCFpc3NldCgkdGhpcy0+Y3NzWyRrZXldKSkgewogICAgICAkdGhpcy0+Y3NzWyRrZXldID0gYXJyYXkoKTsKICAgIH0KICAgICRjb2RlcyA9IGV4cGxvZGUoJzsnLCRjb2Rlc3RyKTsKICAgIGlmKCRjb2RlcykgewogICAgICBmb3JlYWNoKCRjb2RlcyBhcyAkY29kZSkgewogICAgICAgICRjb2RlID0gdHJpbSgkY29kZSk7CiAgICAgICAgaWYgKCRjb2RlKSB7CiAgICAgICAgICBsaXN0KCRjb2Rla2V5LCAkY29kZXZhbHVlKSA9IGV4cGxvZGUoJzonLCRjb2RlLDIpICsgYXJyYXkobnVsbCxudWxsKTsKICAgICAgICAgIGlmKCRjb2Rla2V5KSB7CiAgICAgICAgICAgICRjb2Rla2V5ID0gc3RydG9sb3dlcihydHJpbSgkY29kZWtleSkpOwogICAgICAgICAgICAkbGN2ID0gc3RydG9sb3dlcihsdHJpbSgkY29kZXZhbHVlKSk7CiAgICAgICAgICAgIGlmICgkbGN2KSB7CiAgICAgICAgICAgICAgJHRoaXMtPmNzc1ska2V5XVskY29kZWtleV0gPSAoc3Vic3RyKCRsY3YsMCwzKSAhPSAndXJsJykgPwogICAgICAgICAgICAgICAgJGxjdiA6ICd1cmwnLnJ0cmltKHN1YnN0cigkY29kZXZhbHVlLDMpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgZnVuY3Rpb24gR2V0KCRrZXksICRwcm9wZXJ0eSkgewogICAgJGtleSA9IHN0cnRvbG93ZXIoJGtleSk7CiAgICAkcHJvcGVydHkgPSBzdHJ0b2xvd2VyKCRwcm9wZXJ0eSk7CgogICAgbGlzdCgkdGFnLCAkc3VidGFnKSA9IGV4cGxvZGUoJzonLCRrZXkpICsgYXJyYXkobnVsbCxudWxsKTsKICAgIGxpc3QoJHRhZywgJGNsYXNzKSA9IGV4cGxvZGUoJy4nLCR0YWcpICsgYXJyYXkobnVsbCxudWxsKTsKICAgIGxpc3QoJHRhZywgJGlkKSA9IGV4cGxvZGUoJyMnLCR0YWcpICsgYXJyYXkobnVsbCxudWxsKTsKICAgICRyZXN1bHQgPSAnJzsKICAgIGZvcmVhY2goJHRoaXMtPmNzcyBhcyAkX3RhZyA9PiAkdmFsdWUpIHsKICAgICAgbGlzdCgkX3RhZywgJF9zdWJ0YWcpID0gZXhwbG9kZSgnOicsJF90YWcpICsgYXJyYXkobnVsbCxudWxsKTsKICAgICAgbGlzdCgkX3RhZywgJF9jbGFzcykgPSBleHBsb2RlKCcuJywkX3RhZykgKyBhcnJheShudWxsLG51bGwpOwogICAgICBsaXN0KCRfdGFnLCAkX2lkKSA9IGV4cGxvZGUoJyMnLCRfdGFnKSArIGFycmF5KG51bGwsbnVsbCk7CgogICAgICAkdGFnbWF0Y2ggPSAoc3RyY21wKCR0YWcsICRfdGFnKSA9PSAwKSB8IChzdHJsZW4oJF90YWcpID09IDApOwogICAgICAkc3VidGFnbWF0Y2ggPSAoc3RyY21wKCRzdWJ0YWcsICRfc3VidGFnKSA9PSAwKSB8IChzdHJsZW4oJF9zdWJ0YWcpID09IDApOwogICAgICAkY2xhc3NtYXRjaCA9IChzdHJjbXAoJGNsYXNzLCAkX2NsYXNzKSA9PSAwKSB8IChzdHJsZW4oJF9jbGFzcykgPT0gMCk7CiAgICAgICRpZG1hdGNoID0gKHN0cmNtcCgkaWQsICRfaWQpID09IDApOwoKICAgICAgaWYoJHRhZ21hdGNoICYgJHN1YnRhZ21hdGNoICYgJGNsYXNzbWF0Y2ggJiAkaWRtYXRjaCkgewogICAgICAgICR0ZW1wID0gJF90YWc7CiAgICAgICAgaWYoKHN0cmxlbigkdGVtcCkgPiAwKSAmIChzdHJsZW4oJF9jbGFzcykgPiAwKSkgewogICAgICAgICAgJHRlbXAgLj0gJy4nLiRfY2xhc3M7CiAgICAgICAgfSBlbHNlaWYoc3RybGVuKCR0ZW1wKSA9PSAwKSB7CiAgICAgICAgICAkdGVtcCA9ICcuJy4kX2NsYXNzOwogICAgICAgIH0KICAgICAgICBpZigoc3RybGVuKCR0ZW1wKSA+IDApICYgKHN0cmxlbigkX3N1YnRhZykgPiAwKSkgewogICAgICAgICAgJHRlbXAgLj0gJzonLiRfc3VidGFnOwogICAgICAgIH0gZWxzZWlmKHN0cmxlbigkdGVtcCkgPT0gMCkgewogICAgICAgICAgJHRlbXAgPSAnOicuJF9zdWJ0YWc7CiAgICAgICAgfQogICAgICAgIGlmKGlzc2V0KCR0aGlzLT5jc3NbJHRlbXBdWyRwcm9wZXJ0eV0pKSB7CiAgICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPmNzc1skdGVtcF1bJHByb3BlcnR5XTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAkcmVzdWx0OwogIH0KCiAgZnVuY3Rpb24gR2V0U2VjdGlvbigka2V5KSB7CiAgICAka2V5ID0gc3RydG9sb3dlcigka2V5KTsKCiAgICBsaXN0KCR0YWcsICRzdWJ0YWcpID0gZXhwbG9kZSgnOicsJGtleSkgKyBhcnJheShudWxsLG51bGwpOwogICAgbGlzdCgkdGFnLCAkY2xhc3MpID0gZXhwbG9kZSgnLicsJHRhZykgKyBhcnJheShudWxsLG51bGwpOwogICAgbGlzdCgkdGFnLCAkaWQpID0gZXhwbG9kZSgnIycsJHRhZykgKyBhcnJheShudWxsLG51bGwpOwogICAgJHJlc3VsdCA9IGFycmF5KCk7CiAgICBmb3JlYWNoKCR0aGlzLT5jc3MgYXMgJF90YWcgPT4gJHZhbHVlKSB7CiAgICAgIGxpc3QoJF90YWcsICRfc3VidGFnKSA9IGV4cGxvZGUoJzonLCRfdGFnKSArIGFycmF5KG51bGwsbnVsbCk7CiAgICAgIGxpc3QoJF90YWcsICRfY2xhc3MpID0gZXhwbG9kZSgnLicsJF90YWcpICsgYXJyYXkobnVsbCxudWxsKTsKICAgICAgbGlzdCgkX3RhZywgJF9pZCkgPSBleHBsb2RlKCcjJywkX3RhZykgKyBhcnJheShudWxsLG51bGwpOwoKICAgICAgJHRhZ21hdGNoID0gKHN0cmNtcCgkdGFnLCAkX3RhZykgPT0gMCkgfCAoc3RybGVuKCRfdGFnKSA9PSAwKTsKICAgICAgJHN1YnRhZ21hdGNoID0gKHN0cmNtcCgkc3VidGFnLCAkX3N1YnRhZykgPT0gMCkgfCAoc3RybGVuKCRfc3VidGFnKSA9PSAwKTsKICAgICAgJGNsYXNzbWF0Y2ggPSAoc3RyY21wKCRjbGFzcywgJF9jbGFzcykgPT0gMCkgfCAoc3RybGVuKCRfY2xhc3MpID09IDApOwogICAgICAkaWRtYXRjaCA9IChzdHJjbXAoJGlkLCAkX2lkKSA9PSAwKTsKCiAgICAgIGlmKCR0YWdtYXRjaCAmICRzdWJ0YWdtYXRjaCAmICRjbGFzc21hdGNoICYgJGlkbWF0Y2gpIHsKICAgICAgICAkdGVtcCA9ICRfdGFnOwogICAgICAgIGlmKChzdHJsZW4oJHRlbXApID4gMCkgJiAoc3RybGVuKCRfY2xhc3MpID4gMCkpIHsKICAgICAgICAgICR0ZW1wIC49ICcuJy4kX2NsYXNzOwogICAgICAgIH0gZWxzZWlmKHN0cmxlbigkdGVtcCkgPT0gMCkgewogICAgICAgICAgJHRlbXAgPSAnLicuJF9jbGFzczsKICAgICAgICB9CiAgICAgICAgaWYoKHN0cmxlbigkdGVtcCkgPiAwKSAmIChzdHJsZW4oJF9zdWJ0YWcpID4gMCkpIHsKICAgICAgICAgICR0ZW1wIC49ICc6Jy4kX3N1YnRhZzsKICAgICAgICB9IGVsc2VpZihzdHJsZW4oJHRlbXApID09IDApIHsKICAgICAgICAgICR0ZW1wID0gJzonLiRfc3VidGFnOwogICAgICAgIH0KICAgICAgICBmb3JlYWNoKCR0aGlzLT5jc3NbJHRlbXBdIGFzICRwcm9wZXJ0eSA9PiAkdmFsdWUpIHsKICAgICAgICAgICRyZXN1bHRbJHByb3BlcnR5XSA9ICR2YWx1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAkcmVzdWx0OwogIH0KCiAgZnVuY3Rpb24gUGFyc2VTdHIoJHN0cikgewogICAgJHRoaXMtPkNsZWFyKCk7CiAgICAvLyBSZW1vdmUgY29tbWVudHMKICAgICRzdHIgPSBwcmVnX3JlcGxhY2UoYXJyYXkoJ34vXCooLiopP1wqL35Vc20nLCd+XHM/Ly8uKiR+bScpLGFycmF5KCcnLCcnKSwkc3RyKTsKICAgIC8vIFBhcnNlIHRoaXMgZGFtbiBjc3Njb2RlCiAgICAkcGFydHMgPSBleHBsb2RlKCd9Jywkc3RyKTsKICAgIGlmKCRwYXJ0cykgewogICAgICBmb3JlYWNoKCRwYXJ0cyBhcyAkcGFydCkgewogICAgICAgIGlmICgkcGFydCkgewogICAgICAgICAgbGlzdCgka2V5c3RyLCRjb2Rlc3RyKSA9IGV4cGxvZGUoJ3snLCRwYXJ0KSArIGFycmF5KG51bGwsbnVsbCk7CiAgICAgICAgICAka2V5cyA9IGV4cGxvZGUoJywnLHRyaW0oJGtleXN0cikpOwogICAgICAgICAgaWYoJGtleXMpIHsKICAgICAgICAgICAgZm9yZWFjaCgka2V5cyBhcyAka2V5KSB7CiAgICAgICAgICAgICAgaWYoc3RybGVuKCRrZXkpID4gMCkgewogICAgICAgICAgICAgICAgJGtleSA9IHN0cl9yZXBsYWNlKCJcbiIsJycsJGtleSk7CiAgICAgICAgICAgICAgICAka2V5ID0gc3RyX3JlcGxhY2UoJ1xcJywnJywka2V5KTsKICAgICAgICAgICAgICAgICR0aGlzLT5BZGQoJGtleSwgdHJpbSgkY29kZXN0cikpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIChjb3VudCgkdGhpcy0+Y3NzKSA+IDApOwogIH0KCiAgZnVuY3Rpb24gUGFyc2UoJGZpbGVuYW1lKSB7CiAgICAkdGhpcy0+Q2xlYXIoKTsKICAgIGlmKGZpbGVfZXhpc3RzKCRmaWxlbmFtZSkpIHsKICAgICAgcmV0dXJuICR0aGlzLT5QYXJzZVN0cihmaWxlX2dldF9jb250ZW50cygkZmlsZW5hbWUpKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBGQUxTRTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIEdldENTUygpIHsKICAgICRyZXN1bHQgPSAnJzsKICAgIGZvcmVhY2goJHRoaXMtPmNzcyBhcyAka2V5ID0+ICR2YWx1ZXMpIHsKICAgICAgJHJlc3VsdCAuPSAka2V5LiIge1xuIjsKICAgICAgZm9yZWFjaCgkdmFsdWVzIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgJHJlc3VsdCAuPSAiICAka2V5OiAkdmFsdWU7XG4iOwogICAgICB9CiAgICAgICRyZXN1bHQgLj0gIn1cblxuIjsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0OwogIH0KfQo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.tFPDF.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiB0RlBERiB2YXJpYW50IChiYXNlZCBvbiBGUERGIDEuNywgdEZQREYgMS4yNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKiBWZXJzaW9uOiAgMS4yNEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKiBEYXRlOiAgICAgMjAxMS0wOS0yNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKiBBdXRob3I6ICAgSWFuIEJhY2sgPGlhbmJAYnBtMS5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKiBMaWNlbnNlOiAgTEdQTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmRlZmluZSgndEZQREZfVkVSU0lPTicsJzEuMjRBJyk7CgpjbGFzcyB0RlBERgp7Cgp2YXIgJHBhZ2U7ICAgICAgICAgICAgIC8vIGN1cnJlbnQgcGFnZSBudW1iZXIKdmFyICRuOyAgICAgICAgICAgICAgICAvLyBjdXJyZW50IG9iamVjdCBudW1iZXIKdmFyICRvZmZzZXRzOyAgICAgICAgICAvLyBhcnJheSBvZiBvYmplY3Qgb2Zmc2V0cwp2YXIgJGJ1ZmZlcjsgICAgICAgICAgIC8vIGJ1ZmZlciBob2xkaW5nIGluLW1lbW9yeSBQREYKdmFyICRwYWdlczsgICAgICAgICAgICAvLyBhcnJheSBjb250YWluaW5nIHBhZ2VzCnZhciAkc3RhdGU7ICAgICAgICAgICAgLy8gY3VycmVudCBkb2N1bWVudCBzdGF0ZQp2YXIgJGNvbXByZXNzOyAgICAgICAgIC8vIGNvbXByZXNzaW9uIGZsYWcKdmFyICRrOyAgICAgICAgICAgICAgICAvLyBzY2FsZSBmYWN0b3IgKG51bWJlciBvZiBwb2ludHMgaW4gdXNlciB1bml0KQp2YXIgJERlZk9yaWVudGF0aW9uOyAgIC8vIGRlZmF1bHQgb3JpZW50YXRpb24KdmFyICRDdXJPcmllbnRhdGlvbjsgICAvLyBjdXJyZW50IG9yaWVudGF0aW9uCnZhciAkU3RkUGFnZVNpemVzOyAgICAgLy8gc3RhbmRhcmQgcGFnZSBzaXplcwp2YXIgJERlZlBhZ2VTaXplOyAgICAgIC8vIGRlZmF1bHQgcGFnZSBzaXplCnZhciAkQ3VyUGFnZVNpemU7ICAgICAgLy8gY3VycmVudCBwYWdlIHNpemUKdmFyICRQYWdlU2l6ZXM7ICAgICAgICAvLyB1c2VkIGZvciBwYWdlcyB3aXRoIG5vbiBkZWZhdWx0IHNpemVzIG9yIG9yaWVudGF0aW9ucwp2YXIgJHdQdCwgJGhQdDsgICAgICAgIC8vIGRpbWVuc2lvbnMgb2YgY3VycmVudCBwYWdlIGluIHBvaW50cwp2YXIgJHcsICRoOyAgICAgICAgICAgIC8vIGRpbWVuc2lvbnMgb2YgY3VycmVudCBwYWdlIGluIHVzZXIgdW5pdAp2YXIgJGxNYXJnaW47ICAgICAgICAgIC8vIGxlZnQgbWFyZ2luCnZhciAkdE1hcmdpbjsgICAgICAgICAgLy8gdG9wIG1hcmdpbgp2YXIgJHJNYXJnaW47ICAgICAgICAgIC8vIHJpZ2h0IG1hcmdpbgp2YXIgJGJNYXJnaW47ICAgICAgICAgIC8vIHBhZ2UgYnJlYWsgbWFyZ2luCnZhciAkY01hcmdpbjsgICAgICAgICAgLy8gY2VsbCBtYXJnaW4KdmFyICR4LCAkeTsgICAgICAgICAgICAvLyBjdXJyZW50IHBvc2l0aW9uIGluIHVzZXIgdW5pdAp2YXIgJGxhc3RoOyAgICAgICAgICAgIC8vIGhlaWdodCBvZiBsYXN0IHByaW50ZWQgY2VsbAp2YXIgJExpbmVXaWR0aDsgICAgICAgIC8vIGxpbmUgd2lkdGggaW4gdXNlciB1bml0CnZhciAkZm9udHBhdGg7ICAgICAgICAgLy8gcGF0aCBjb250YWluaW5nIGZvbnRzLCBubyB0cmFpbGluZyBzZXBhcmF0b3IKdmFyICR1bmlmb250cGF0aDsgICAgICAvLyBsb2NhbCBmb250cyBzdWJkaXIKdmFyICR0dGZwYXRoOyAgICAgICAgICAvLyBwYXRoLCBvciAnOictc2VwYXJhdGVkIHNlcXVlbmNlIG9mIHBhdGhzLCBjb250YWluaW5nIC50dGYgZmlsZXMsIG5vIHRyYWlsaW5nIHNlcGFyYXRvcihzKQp2YXIgJGlzVHRmOyAgICAgICAgICAgIC8vIHdoZXRoZXIgdXNpbmcgYSB0dGYgZm9udAp2YXIgJGNhblR0ZjsgICAgICAgICAgIC8vIHdoZXRoZXIgbWJzdHJpbmcgaXMgYXZhaWxhYmxlCnZhciAkQ29yZUZvbnRzOyAgICAgICAgLy8gYXJyYXkgb2YgY29yZSBmb250IG5hbWVzCnZhciAkZm9udHM7ICAgICAgICAgICAgLy8gYXJyYXkgb2YgdXNlZCBmb250cwp2YXIgJEZvbnRGaWxlczsgICAgICAgIC8vIGFycmF5IG9mIGZvbnQgZmlsZXMKdmFyICRkaWZmczsgICAgICAgICAgICAvLyBhcnJheSBvZiBlbmNvZGluZyBkaWZmZXJlbmNlcwp2YXIgJEZvbnRGYW1pbHk7ICAgICAgIC8vIGN1cnJlbnQgZm9udCBmYW1pbHkKdmFyICRGb250U3R5bGU7ICAgICAgICAvLyBjdXJyZW50IGZvbnQgc3R5bGUKdmFyICR1bmRlcmxpbmU7ICAgICAgICAvLyB1bmRlcmxpbmluZyBmbGFnCnZhciAkQ3VycmVudEZvbnQ7ICAgICAgLy8gY3VycmVudCBmb250IGluZm8KdmFyICRGb250U2l6ZVB0OyAgICAgICAvLyBjdXJyZW50IGZvbnQgc2l6ZSBpbiBwb2ludHMKdmFyICRGb250U2l6ZTsgICAgICAgICAvLyBjdXJyZW50IGZvbnQgc2l6ZSBpbiB1c2VyIHVuaXQKdmFyICREcmF3Q29sb3I7ICAgICAgICAvLyBjb21tYW5kcyBmb3IgZHJhd2luZyBjb2xvcgp2YXIgJEZpbGxDb2xvcjsgICAgICAgIC8vIGNvbW1hbmRzIGZvciBmaWxsaW5nIGNvbG9yCnZhciAkVGV4dENvbG9yOyAgICAgICAgLy8gY29tbWFuZHMgZm9yIHRleHQgY29sb3IKdmFyICRDb2xvckZsYWc7ICAgICAgICAvLyBpbmRpY2F0ZXMgd2hldGhlciBmaWxsIGFuZCB0ZXh0IGNvbG9ycyBhcmUgZGlmZmVyZW50CnZhciAkd3M7ICAgICAgICAgICAgICAgLy8gd29yZCBzcGFjaW5nCnZhciAkaW1hZ2VzOyAgICAgICAgICAgLy8gYXJyYXkgb2YgdXNlZCBpbWFnZXMKdmFyICRQYWdlTGlua3M7ICAgICAgICAvLyBhcnJheSBvZiBsaW5rcyBpbiBwYWdlcwp2YXIgJGxpbmtzOyAgICAgICAgICAgIC8vIGFycmF5IG9mIGludGVybmFsIGxpbmtzCnZhciAkQXV0b1BhZ2VCcmVhazsgICAgLy8gYXV0b21hdGljIHBhZ2UgYnJlYWtpbmcKdmFyICRQYWdlQnJlYWtUcmlnZ2VyOyAvLyB0aHJlc2hvbGQgdXNlZCB0byB0cmlnZ2VyIHBhZ2UgYnJlYWtzCnZhciAkSW5IZWFkZXI7ICAgICAgICAgLy8gZmxhZyBzZXQgd2hlbiBwcm9jZXNzaW5nIGhlYWRlcgp2YXIgJEluRm9vdGVyOyAgICAgICAgIC8vIGZsYWcgc2V0IHdoZW4gcHJvY2Vzc2luZyBmb290ZXIKdmFyICRab29tTW9kZTsgICAgICAgICAvLyB6b29tIGRpc3BsYXkgbW9kZQp2YXIgJExheW91dE1vZGU7ICAgICAgIC8vIGxheW91dCBkaXNwbGF5IG1vZGUKdmFyICR0aXRsZTsgICAgICAgICAgICAvLyB0aXRsZQp2YXIgJHN1YmplY3Q7ICAgICAgICAgIC8vIHN1YmplY3QKdmFyICRhdXRob3I7ICAgICAgICAgICAvLyBhdXRob3IKdmFyICRrZXl3b3JkczsgICAgICAgICAvLyBrZXl3b3Jkcwp2YXIgJGNyZWF0b3I7ICAgICAgICAgIC8vIGNyZWF0b3IKdmFyICRBbGlhc05iUGFnZXM7ICAgICAvLyBhbGlhcyBmb3IgdG90YWwgbnVtYmVyIG9mIHBhZ2VzCnZhciAkUERGVmVyc2lvbjsgICAgICAgLy8gUERGIHZlcnNpb24gbnVtYmVyCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpYyBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpmdW5jdGlvbiB0RlBERigkb3JpZW50YXRpb249J1AnLCAkdW5pdD0nbW0nLCAkc2l6ZT0nQTQnKQp7CgkvLyBTb21lIGNoZWNrcwoJJHRoaXMtPl9kb2NoZWNrcygpOwoJLy8gSW5pdGlhbGl6YXRpb24gb2YgcHJvcGVydGllcwoJJHRoaXMtPnBhZ2UgPSAwOwoJJHRoaXMtPm4gPSAyOwoJJHRoaXMtPmJ1ZmZlciA9ICcnOwoJJHRoaXMtPnBhZ2VzID0gYXJyYXkoKTsKCSR0aGlzLT5QYWdlU2l6ZXMgPSBhcnJheSgpOwoJJHRoaXMtPnN0YXRlID0gMDsKCSR0aGlzLT5mb250cyA9IGFycmF5KCk7CgkkdGhpcy0+Rm9udEZpbGVzID0gYXJyYXkoKTsKCSR0aGlzLT5kaWZmcyA9IGFycmF5KCk7CgkkdGhpcy0+aW1hZ2VzID0gYXJyYXkoKTsKCSR0aGlzLT5saW5rcyA9IGFycmF5KCk7CgkkdGhpcy0+SW5IZWFkZXIgPSBmYWxzZTsKCSR0aGlzLT5JbkZvb3RlciA9IGZhbHNlOwoJJHRoaXMtPmxhc3RoID0gMDsKCSR0aGlzLT5Gb250RmFtaWx5ID0gJyc7CgkkdGhpcy0+Rm9udFN0eWxlID0gJyc7CgkkdGhpcy0+Rm9udFNpemVQdCA9IDEyOwoJJHRoaXMtPnVuZGVybGluZSA9IGZhbHNlOwoJJHRoaXMtPkRyYXdDb2xvciA9ICcwIEcnOwoJJHRoaXMtPkZpbGxDb2xvciA9ICcwIGcnOwoJJHRoaXMtPlRleHRDb2xvciA9ICcwIGcnOwoJJHRoaXMtPkNvbG9yRmxhZyA9IGZhbHNlOwoJJHRoaXMtPndzID0gMDsKCS8vIEZvbnQgcGF0aHMKCSR0aGlzLT5mb250cGF0aCA9IChkZWZpbmVkKCdGUERGX0ZPTlRQQVRIJykpID8gcnRyaW0oRlBERl9GT05UUEFUSCwiIC9cXFx0XG4iKTonJzsKCWlmKCR0aGlzLT5mb250cGF0aCAmJiAhaXNfZGlyKCR0aGlzLT5mb250cGF0aCkpCgkJJHRoaXMtPmZvbnRwYXRoID0gJyc7CgkkZm9udGRpciA9IGRpcm5hbWUoX19GSUxFX18pLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ2ZvbnQnOwoJJHJlYWwgPSBpc19kaXIoJGZvbnRkaXIpOwoJaWYoJHJlYWwgJiYgISR0aGlzLT5mb250cGF0aCkKCQkkdGhpcy0+Zm9udHBhdGggPSAkZm9udGRpcjsKCSR0aGlzLT51bmlmb250cGF0aCA9ICgkcmVhbCkgPyAkZm9udGRpci5ESVJFQ1RPUllfU0VQQVJBVE9SLid1bmlmb250JzonJzsgLy9jYWNoZSBsb2NhbCBzdWJkaXIgcGF0aAoKCSR0aGlzLT50dGZwYXRoID0gKGRlZmluZWQoJ19TWVNURU1fVFRGT05UUycpKSA/IHJ0cmltKF9TWVNURU1fVFRGT05UUywiIC9cXFx0XG4iKTonJzsKCSRmb250ZGlyIC49IERJUkVDVE9SWV9TRVBBUkFUT1IuJ3R0Zic7CglpZihpc19kaXIoJGZvbnRkaXIpKQoJewoJCWlmKCR0aGlzLT50dGZwYXRoKQoJCQkkdGhpcy0+dHRmcGF0aCAuPSAnOic7CgkJJHRoaXMtPnR0ZnBhdGggLj0gJGZvbnRkaXI7Cgl9CgkvLyBDb3JlIGZvbnRzCgkkdGhpcy0+Q29yZUZvbnRzID0gYXJyYXkoJ2NvdXJpZXInLCAnaGVsdmV0aWNhJywgJ3RpbWVzJywgJ3N5bWJvbCcsICd6YXBmZGluZ2JhdHMnKTsKCS8vIFNjYWxlIGZhY3RvcgoJc3dpdGNoICgkdW5pdCkKCXsKCSBjYXNlICdwdCc6CgkJJHRoaXMtPmsgPSAxOwoJCWJyZWFrOwoJIGNhc2UgJ3B4JzoKCQkkdGhpcy0+ayA9IDcyLzk2OyAvL3R5cGljYWwvYXNzdW1lZCBEUEkKCQlicmVhazsKCSBjYXNlICdtbSc6CgkJJHRoaXMtPmsgPSA3Mi8yNS40OwoJCWJyZWFrOwoJIGNhc2UgJ2NtJzoKCQkkdGhpcy0+ayA9IDcyLzIuNTQ7CgkJYnJlYWs7CgkgY2FzZSAnaW4nOgoJCSR0aGlzLT5rID0gNzI7CgkJYnJlYWs7CgkgZGVmYXVsdDoKCQkkdGhpcy0+RXJyb3IoJ0luY29ycmVjdCB1bml0OiAnLiR1bml0KTsKCX0KCS8vIFBhZ2Ugc2l6ZXMKCSR0aGlzLT5TdGRQYWdlU2l6ZXMgPSBhcnJheSgnYTMnPT5hcnJheSg4NDEuODksMTE5MC41NSksICdhNCc9PmFycmF5KDU5NS4yOCw4NDEuODkpLCAnYTUnPT5hcnJheSg0MjAuOTQsNTk1LjI4KSwKCQknbGV0dGVyJz0+YXJyYXkoNjEyLDc5MiksICdsZWdhbCc9PmFycmF5KDYxMiwxMDA4KSk7Cgkkc2l6ZSA9ICR0aGlzLT5fZ2V0cGFnZXNpemUoJHNpemUpOwoJJHRoaXMtPkRlZlBhZ2VTaXplID0gJHNpemU7CgkkdGhpcy0+Q3VyUGFnZVNpemUgPSAkc2l6ZTsKCS8vIFBhZ2Ugb3JpZW50YXRpb24KCSRvcmllbnRhdGlvbiA9IHN0cnRvbG93ZXIoJG9yaWVudGF0aW9uKTsKCWlmKCRvcmllbnRhdGlvbj09J3AnIHx8ICRvcmllbnRhdGlvbj09J3BvcnRyYWl0JykKCXsKCQkkdGhpcy0+RGVmT3JpZW50YXRpb24gPSAnUCc7CgkJJHRoaXMtPncgPSAkc2l6ZVswXTsKCQkkdGhpcy0+aCA9ICRzaXplWzFdOwoJfQoJZWxzZWlmKCRvcmllbnRhdGlvbj09J2wnIHx8ICRvcmllbnRhdGlvbj09J2xhbmRzY2FwZScpCgl7CgkJJHRoaXMtPkRlZk9yaWVudGF0aW9uID0gJ0wnOwoJCSR0aGlzLT53ID0gJHNpemVbMV07CgkJJHRoaXMtPmggPSAkc2l6ZVswXTsKCX0KCWVsc2UKCQkkdGhpcy0+RXJyb3IoJ0luY29ycmVjdCBvcmllbnRhdGlvbjogJy4kb3JpZW50YXRpb24pOwoJJHRoaXMtPkN1ck9yaWVudGF0aW9uID0gJHRoaXMtPkRlZk9yaWVudGF0aW9uOwoJJHRoaXMtPndQdCA9ICR0aGlzLT53KiR0aGlzLT5rOwoJJHRoaXMtPmhQdCA9ICR0aGlzLT5oKiR0aGlzLT5rOwoJLy8gUGFnZSBtYXJnaW5zICgxIGNtKQoJJG1hcmdpbiA9IDI4LjM1LyR0aGlzLT5rOwoJJHRoaXMtPlNldE1hcmdpbnMoJG1hcmdpbiwkbWFyZ2luKTsKCS8vIEludGVyaW9yIGNlbGwgbWFyZ2luICgxIG1tKSBuZXZlciBjaGFuZ2VkCgkkdGhpcy0+Y01hcmdpbiA9ICRtYXJnaW4vMTA7CgkvLyBMaW5lIHdpZHRoICgwLjIgbW0pCgkkdGhpcy0+TGluZVdpZHRoID0gLjU2Ny8kdGhpcy0+azsKCS8vIEF1dG9tYXRpYyBwYWdlIGJyZWFrCgkkdGhpcy0+U2V0QXV0b1BhZ2VCcmVhayh0cnVlLDIqJG1hcmdpbik7CgkvLyBEZWZhdWx0IGRpc3BsYXkgbW9kZQoJJHRoaXMtPlNldERpc3BsYXlNb2RlKCdkZWZhdWx0Jyk7CgkvLyBFbmFibGUgY29tcHJlc3Npb24KCSR0aGlzLT5TZXRDb21wcmVzc2lvbih0cnVlKTsKCS8vIFNldCBkZWZhdWx0IFBERiB2ZXJzaW9uIG51bWJlcgoJJHRoaXMtPlBERlZlcnNpb24gPSAnMS4zJzsKfQoKZnVuY3Rpb24gU2V0TWFyZ2lucygkbGVmdCwgJHRvcCwgJHJpZ2h0PW51bGwpCnsKCS8vIFNldCBsZWZ0LCB0b3AgYW5kIHJpZ2h0IG1hcmdpbnMKCSR0aGlzLT5sTWFyZ2luID0gJGxlZnQ7CgkkdGhpcy0+dE1hcmdpbiA9ICR0b3A7CglpZigkcmlnaHQ9PT1udWxsKQoJCSRyaWdodCA9ICRsZWZ0OwoJJHRoaXMtPnJNYXJnaW4gPSAkcmlnaHQ7Cn0KCmZ1bmN0aW9uIFNldExlZnRNYXJnaW4oJG1hcmdpbikKewoJLy8gU2V0IGxlZnQgbWFyZ2luCgkkdGhpcy0+bE1hcmdpbiA9ICRtYXJnaW47CglpZigkdGhpcy0+cGFnZT4wICYmICR0aGlzLT54PCRtYXJnaW4pCgkJJHRoaXMtPnggPSAkbWFyZ2luOwp9CgpmdW5jdGlvbiBTZXRUb3BNYXJnaW4oJG1hcmdpbikKewoJLy8gU2V0IHRvcCBtYXJnaW4KCSR0aGlzLT50TWFyZ2luID0gJG1hcmdpbjsKfQoKZnVuY3Rpb24gU2V0UmlnaHRNYXJnaW4oJG1hcmdpbikKewoJLy8gU2V0IHJpZ2h0IG1hcmdpbgoJJHRoaXMtPnJNYXJnaW4gPSAkbWFyZ2luOwp9CgpmdW5jdGlvbiBTZXRBdXRvUGFnZUJyZWFrKCRhdXRvLCAkbWFyZ2luPTApCnsKCS8vIFNldCBhdXRvIHBhZ2UgYnJlYWsgbW9kZSBhbmQgdHJpZ2dlcmluZyBtYXJnaW4KCSR0aGlzLT5BdXRvUGFnZUJyZWFrID0gJGF1dG87CgkkdGhpcy0+Yk1hcmdpbiA9ICRtYXJnaW47CgkkdGhpcy0+UGFnZUJyZWFrVHJpZ2dlciA9ICR0aGlzLT5oLSRtYXJnaW47Cn0KCmZ1bmN0aW9uIFNldERpc3BsYXlNb2RlKCR6b29tLCAkbGF5b3V0PSdkZWZhdWx0JykKewoJLy8gU2V0IGRpc3BsYXkgbW9kZSBpbiB2aWV3ZXIKCWlmKCR6b29tPT0nZnVsbHBhZ2UnIHx8ICR6b29tPT0nZnVsbHdpZHRoJyB8fCAkem9vbT09J3JlYWwnIHx8ICR6b29tPT0nZGVmYXVsdCcgfHwgIWlzX3N0cmluZygkem9vbSkpCgkJJHRoaXMtPlpvb21Nb2RlID0gJHpvb207CgllbHNlCgkJJHRoaXMtPkVycm9yKCdJbmNvcnJlY3Qgem9vbSBkaXNwbGF5IG1vZGU6ICcuJHpvb20pOwoJaWYoJGxheW91dD09J3NpbmdsZScgfHwgJGxheW91dD09J2NvbnRpbnVvdXMnIHx8ICRsYXlvdXQ9PSd0d28nIHx8ICRsYXlvdXQ9PSdkZWZhdWx0JykKCQkkdGhpcy0+TGF5b3V0TW9kZSA9ICRsYXlvdXQ7CgllbHNlCgkJJHRoaXMtPkVycm9yKCdJbmNvcnJlY3QgbGF5b3V0IGRpc3BsYXkgbW9kZTogJy4kbGF5b3V0KTsKfQoKZnVuY3Rpb24gU2V0Q29tcHJlc3Npb24oJGNvbXByZXNzKQp7CgkvLyBTZXQgcGFnZSBjb21wcmVzc2lvbgoJaWYoZnVuY3Rpb25fZXhpc3RzKCdnemNvbXByZXNzJykpCgkJJHRoaXMtPmNvbXByZXNzID0gJGNvbXByZXNzOwoJZWxzZQoJCSR0aGlzLT5jb21wcmVzcyA9IGZhbHNlOwp9CgpmdW5jdGlvbiBTZXRUaXRsZSgkdGl0bGUsICRkZXByZWM9ZmFsc2UpCnsKCS8vIFRpdGxlIG9mIGRvY3VtZW50CgkkdGhpcy0+dGl0bGUgPSAkdGl0bGU7Cn0KCmZ1bmN0aW9uIFNldFN1YmplY3QoJHN1YmplY3QsICRkZXByZWM9ZmFsc2UpCnsKCS8vIFN1YmplY3Qgb2YgZG9jdW1lbnQKCSR0aGlzLT5zdWJqZWN0ID0gJHN1YmplY3Q7Cn0KCmZ1bmN0aW9uIFNldEF1dGhvcigkYXV0aG9yLCAkZGVwcmVjPWZhbHNlKQp7CgkvLyBBdXRob3Igb2YgZG9jdW1lbnQKCSR0aGlzLT5hdXRob3IgPSAkYXV0aG9yOwp9CgpmdW5jdGlvbiBTZXRLZXl3b3Jkcygka2V5d29yZHMsICRkZXByZWM9ZmFsc2UpCnsKCS8vIEtleXdvcmRzIG9mIGRvY3VtZW50CgkkdGhpcy0+a2V5d29yZHMgPSAka2V5d29yZHM7Cn0KCmZ1bmN0aW9uIFNldENyZWF0b3IoJGNyZWF0b3IsICRkZXByZWM9ZmFsc2UpCnsKCS8vIENyZWF0b3Igb2YgZG9jdW1lbnQKCSR0aGlzLT5jcmVhdG9yID0gJGNyZWF0b3I7Cn0KCmZ1bmN0aW9uIEFsaWFzTmJQYWdlcygkYWxpYXM9J3tuYn0nKQp7CgkvLyBEZWZpbmUgYW4gYWxpYXMgZm9yIHRvdGFsIG51bWJlciBvZiBwYWdlcwoJJHRoaXMtPkFsaWFzTmJQYWdlcyA9ICRhbGlhczsKfQoKZnVuY3Rpb24gRXJyb3IoJG1zZykKewoJLy8gRmF0YWwgZXJyb3IKCWRpZSgnPHN0cm9uZz50RlBERiBlcnJvcjo8L3N0cm9uZz4gJy4kbXNnKTsKfQoKZnVuY3Rpb24gV2FybigkbXNnKQp7CgkvLyBOb24tZmF0YWwgZXJyb3IKCWVjaG8oJzxzdHJvbmc+dEZQREYgZXJyb3I6PC9zdHJvbmc+ICcuJG1zZyk7Cn0KCmZ1bmN0aW9uIE9wZW4oKQp7CgkvLyBCZWdpbiBkb2N1bWVudAoJJHRoaXMtPnN0YXRlID0gMTsKfQoKZnVuY3Rpb24gQ2xvc2UoKQp7CgkvLyBUZXJtaW5hdGUgZG9jdW1lbnQKCWlmKCR0aGlzLT5zdGF0ZT09MykKCQlyZXR1cm47CglpZigkdGhpcy0+cGFnZT09MCkKCQkkdGhpcy0+QWRkUGFnZSgpOwoJLy8gUGFnZSBmb290ZXIKCSR0aGlzLT5JbkZvb3RlciA9IHRydWU7CgkkdGhpcy0+Rm9vdGVyKCk7CgkkdGhpcy0+SW5Gb290ZXIgPSBmYWxzZTsKCS8vIENsb3NlIHBhZ2UKCSR0aGlzLT5fZW5kcGFnZSgpOwoJLy8gQ2xvc2UgZG9jdW1lbnQKCSR0aGlzLT5fZW5kZG9jKCk7Cn0KCmZ1bmN0aW9uIEFkZFBhZ2UoJG9yaWVudGF0aW9uPScnLCAkc2l6ZT0nJykKewoJLy8gU3RhcnQgYSBuZXcgcGFnZQoJaWYoJHRoaXMtPnN0YXRlPT0wKQoJCSR0aGlzLT5PcGVuKCk7CgkkZmFtaWx5ID0gJHRoaXMtPkZvbnRGYW1pbHk7Cgkkc3R5bGUgPSAkdGhpcy0+Rm9udFN0eWxlLigkdGhpcy0+dW5kZXJsaW5lID8gJ3UnIDogJycpOwoJJGZvbnRzaXplID0gJHRoaXMtPkZvbnRTaXplUHQ7CgkkbHcgPSAkdGhpcy0+TGluZVdpZHRoOwoJJGRjID0gJHRoaXMtPkRyYXdDb2xvcjsKCSRmYyA9ICR0aGlzLT5GaWxsQ29sb3I7CgkkdGMgPSAkdGhpcy0+VGV4dENvbG9yOwoJJGNmID0gJHRoaXMtPkNvbG9yRmxhZzsKCWlmKCR0aGlzLT5wYWdlPjApCgl7CgkJLy8gUGFnZSBmb290ZXIKCQkkdGhpcy0+SW5Gb290ZXIgPSB0cnVlOwoJCSR0aGlzLT5Gb290ZXIoKTsKCQkkdGhpcy0+SW5Gb290ZXIgPSBmYWxzZTsKCQkvLyBDbG9zZSBwYWdlCgkJJHRoaXMtPl9lbmRwYWdlKCk7Cgl9CgkvLyBTdGFydCBuZXcgcGFnZQoJJHRoaXMtPl9iZWdpbnBhZ2UoJG9yaWVudGF0aW9uLCRzaXplKTsKCS8vIFNldCBsaW5lIGNhcCBzdHlsZSB0byBzcXVhcmUKCSR0aGlzLT5fb3V0KCcyIEonKTsKCS8vIFNldCBsaW5lIHdpZHRoCgkkdGhpcy0+TGluZVdpZHRoID0gJGx3OwoJJHRoaXMtPl9vdXQoc3ByaW50ZignJS4yRiB3JywkbHcqJHRoaXMtPmspKTsKCS8vIFNldCBmb250CglpZigkZmFtaWx5KQoJCSR0aGlzLT5TZXRGb250KCRmYW1pbHksJHN0eWxlLCRmb250c2l6ZSk7CgkvLyBTZXQgY29sb3JzCgkkdGhpcy0+RHJhd0NvbG9yID0gJGRjOwoJaWYoJGRjIT0nMCBHJykKCQkkdGhpcy0+X291dCgkZGMpOwoJJHRoaXMtPkZpbGxDb2xvciA9ICRmYzsKCWlmKCRmYyE9JzAgZycpCgkJJHRoaXMtPl9vdXQoJGZjKTsKCSR0aGlzLT5UZXh0Q29sb3IgPSAkdGM7CgkkdGhpcy0+Q29sb3JGbGFnID0gJGNmOwoJLy8gUGFnZSBoZWFkZXIKCSR0aGlzLT5JbkhlYWRlciA9IHRydWU7CgkkdGhpcy0+SGVhZGVyKCk7CgkkdGhpcy0+SW5IZWFkZXIgPSBmYWxzZTsKCS8vIFJlc3RvcmUgbGluZSB3aWR0aAoJaWYoJHRoaXMtPkxpbmVXaWR0aCE9JGx3KQoJewoJCSR0aGlzLT5MaW5lV2lkdGggPSAkbHc7CgkJJHRoaXMtPl9vdXQoc3ByaW50ZignJS4yRiB3JywkbHcqJHRoaXMtPmspKTsKCX0KCS8vIFJlc3RvcmUgZm9udAoJaWYoJGZhbWlseSkKCQkkdGhpcy0+U2V0Rm9udCgkZmFtaWx5LCRzdHlsZSwkZm9udHNpemUpOwoJLy8gUmVzdG9yZSBjb2xvcnMKCWlmKCR0aGlzLT5EcmF3Q29sb3IhPSRkYykKCXsKCQkkdGhpcy0+RHJhd0NvbG9yID0gJGRjOwoJCSR0aGlzLT5fb3V0KCRkYyk7Cgl9CglpZigkdGhpcy0+RmlsbENvbG9yIT0kZmMpCgl7CgkJJHRoaXMtPkZpbGxDb2xvciA9ICRmYzsKCQkkdGhpcy0+X291dCgkZmMpOwoJfQoJJHRoaXMtPlRleHRDb2xvciA9ICR0YzsKCSR0aGlzLT5Db2xvckZsYWcgPSAkY2Y7Cn0KCmZ1bmN0aW9uIEhlYWRlcigpCnsKCS8vIFRvIGJlIGltcGxlbWVudGVkIGluIHlvdXIgb3duIGluaGVyaXRlZCBjbGFzcwp9CgpmdW5jdGlvbiBGb290ZXIoKQp7CgkvLyBUbyBiZSBpbXBsZW1lbnRlZCBpbiB5b3VyIG93biBpbmhlcml0ZWQgY2xhc3MKfQoKZnVuY3Rpb24gUGFnZU5vKCkKewoJLy8gR2V0IGN1cnJlbnQgcGFnZSBudW1iZXIKCXJldHVybiAkdGhpcy0+cGFnZTsKfQoKZnVuY3Rpb24gU2V0RHJhd0NvbG9yKCRyLCAkZz1udWxsLCAkYj1udWxsKQp7CgkvLyBTZXQgY29sb3IgZm9yIGFsbCBzdHJva2luZyBvcGVyYXRpb25zCglpZigoJHI9PTAgJiYgJGc9PTAgJiYgJGI9PTApIHx8ICRnPT09bnVsbCkKCQkkdGhpcy0+RHJhd0NvbG9yID0gc3ByaW50ZignJS4zRiBHJywkci8yNTUpOwoJZWxzZQoJCSR0aGlzLT5EcmF3Q29sb3IgPSBzcHJpbnRmKCclLjNGICUuM0YgJS4zRiBSRycsJHIvMjU1LCRnLzI1NSwkYi8yNTUpOwoJaWYoJHRoaXMtPnBhZ2U+MCkKCQkkdGhpcy0+X291dCgkdGhpcy0+RHJhd0NvbG9yKTsKfQoKZnVuY3Rpb24gU2V0RmlsbENvbG9yKCRyLCAkZz1udWxsLCAkYj1udWxsKQp7CgkvLyBTZXQgY29sb3IgZm9yIGFsbCBmaWxsaW5nIG9wZXJhdGlvbnMKCWlmKCgkcj09MCAmJiAkZz09MCAmJiAkYj09MCkgfHwgJGc9PT1udWxsKQoJCSR0aGlzLT5GaWxsQ29sb3IgPSBzcHJpbnRmKCclLjNGIGcnLCRyLzI1NSk7CgllbHNlCgkJJHRoaXMtPkZpbGxDb2xvciA9IHNwcmludGYoJyUuM0YgJS4zRiAlLjNGIHJnJywkci8yNTUsJGcvMjU1LCRiLzI1NSk7CgkkdGhpcy0+Q29sb3JGbGFnID0gKCR0aGlzLT5GaWxsQ29sb3IhPSR0aGlzLT5UZXh0Q29sb3IpOwoJaWYoJHRoaXMtPnBhZ2U+MCkKCQkkdGhpcy0+X291dCgkdGhpcy0+RmlsbENvbG9yKTsKfQoKZnVuY3Rpb24gU2V0VGV4dENvbG9yKCRyLCAkZz1udWxsLCAkYj1udWxsKQp7CgkvLyBTZXQgY29sb3IgZm9yIHRleHQKCWlmKCgkcj09MCAmJiAkZz09MCAmJiAkYj09MCkgfHwgJGc9PT1udWxsKQoJCSR0aGlzLT5UZXh0Q29sb3IgPSBzcHJpbnRmKCclLjNGIGcnLCRyLzI1NSk7CgllbHNlCgkJJHRoaXMtPlRleHRDb2xvciA9IHNwcmludGYoJyUuM0YgJS4zRiAlLjNGIHJnJywkci8yNTUsJGcvMjU1LCRiLzI1NSk7CgkkdGhpcy0+Q29sb3JGbGFnID0gKCR0aGlzLT5GaWxsQ29sb3IhPSR0aGlzLT5UZXh0Q29sb3IpOwp9CgpmdW5jdGlvbiBHZXRTdHJpbmdXaWR0aCgkcykKewoJLy8gR2V0IHdpZHRoIG9mIGEgc3RyaW5nIGluIHRoZSBjdXJyZW50IGZvbnQKCSRzID0gKHN0cmluZykkczsKCSRjdyA9ICYkdGhpcy0+Q3VycmVudEZvbnRbJ2N3J107Cgkkdz0wOwoJaWYgKCR0aGlzLT5pc1R0ZikgewoJCSR1bmljb2RlID0gJHRoaXMtPlVURjhTdHJpbmdUb0FycmF5KCRzKTsKCQlmb3JlYWNoKCR1bmljb2RlIGFzICRjaGFyKSB7CgkJCWlmIChpc3NldCgkY3dbJGNoYXJdKSkgeyAkdyArPSAob3JkKCRjd1syKiRjaGFyXSk8PDgpICsgb3JkKCRjd1syKiRjaGFyKzFdKTsgfQoJCQllbHNlIGlmKCRjaGFyPjAgJiYgJGNoYXI8MTI4ICYmIGlzc2V0KCRjd1tjaHIoJGNoYXIpXSkpIHsgJHcgKz0gJGN3W2NocigkY2hhcildOyB9CgkJCWVsc2UgaWYoaXNzZXQoJHRoaXMtPkN1cnJlbnRGb250WydkZXNjJ11bJ01pc3NpbmdXaWR0aCddKSkgeyAkdyArPSAkdGhpcy0+Q3VycmVudEZvbnRbJ2Rlc2MnXVsnTWlzc2luZ1dpZHRoJ107IH0KCQkJZWxzZSBpZihpc3NldCgkdGhpcy0+Q3VycmVudEZvbnRbJ01pc3NpbmdXaWR0aCddKSkgeyAkdyArPSAkdGhpcy0+Q3VycmVudEZvbnRbJ01pc3NpbmdXaWR0aCddOyB9CgkJCWVsc2UgeyAkdyArPSA1MDA7IH0KCQl9Cgl9IGVsc2UgewoJCSRsID0gc3RybGVuKCRzKTsKCQlmb3IoJGk9MDskaTwkbDskaSsrKQoJCQkkdyArPSAkY3dbJHNbJGldXTsKCX0KCXJldHVybiAkdyokdGhpcy0+Rm9udFNpemUvMTAwMDsKfQoKZnVuY3Rpb24gU2V0TGluZVdpZHRoKCR3aWR0aCkKewoJLy8gU2V0IGxpbmUgd2lkdGgKCSR0aGlzLT5MaW5lV2lkdGggPSAkd2lkdGg7CglpZigkdGhpcy0+cGFnZT4wKQoJCSR0aGlzLT5fb3V0KHNwcmludGYoJyUuMkYgdycsJHdpZHRoKiR0aGlzLT5rKSk7Cn0KCmZ1bmN0aW9uIFNldExpbmVEYXNoKCRsZW5ndGhzLCAkcGhhc2U9MCwgJHJvdW5kPUZBTFNFKQp7CgkvLyBTZXQvY2xlYXIgbGluZSBkYXNoIHBhdHRlcm4gKCRsZW5ndGhzID0gRkFMU0UgcmVzdG9yZXMgc29saWQgbGluZSkKCWlmKCRsZW5ndGhzKSB7CgkJJHMgPSAoJHJvdW5kKSA/ICcxIEogWyc6JzAgSiBbJzsKCQlpZighaXNfYXJyYXkoJGxlbmd0aHMpKQoJCQkkbGVuZ3RocyA9IGFycmF5KCRsZW5ndGhzKTsKCQlmb3JlYWNoKCRsZW5ndGhzIGFzICRpPT4kZCkgewoJCQkkcCA9ICgkaSkgPyAnICUuMkYnOiclLjJGJzsKCQkJJHMgLj0gc3ByaW50ZigkcCwkZCokdGhpcy0+ayk7CgkJfQoJCSRzIC49IHNwcmludGYoJ10gJS4yRiBkICcsJHBoYXNlKiR0aGlzLT5rKTsKCQkkdGhpcy0+X291dCgkcyk7Cgl9IGVsc2UgewoJCSR0aGlzLT5fb3V0KCdbXSAwIGQnKTsKCX0KfQoKZnVuY3Rpb24gTGluZSgkeDEsICR5MSwgJHgyLCAkeTIpCnsKCS8vIERyYXcgYSBsaW5lCgkkdGhpcy0+X291dChzcHJpbnRmKCclLjJGICUuMkYgbSAlLjJGICUuMkYgbCBTJywkeDEqJHRoaXMtPmssKCR0aGlzLT5oLSR5MSkqJHRoaXMtPmssJHgyKiR0aGlzLT5rLCgkdGhpcy0+aC0keTIpKiR0aGlzLT5rKSk7Cn0KCmZ1bmN0aW9uIFJlY3QoJHgsICR5LCAkdywgJGgsICRzdHlsZT0nJykKewoJLy8gRHJhdyBhIHJlY3RhbmdsZQoJc3dpdGNoKCRzdHlsZSkgewoJIGNhc2UgJ0ZEJzoKCSBjYXNlICdERic6CgkJJHN0eWxlID0gJ0InOyAvL2ZpbGwgKyBib3JkZXIKCQlicmVhazsKCSBjYXNlICdGJzoKCQkkc3R5bGUgPSAnZic7IC8vZmlsbCwgbm8gYm9yZGVyCgkJYnJlYWs7CgkgY2FzZSAnJzoKCQkkc3R5bGUgPSAnUyc7IC8vYm9yZGVyLCBubyBmaWxsCgkgZGVmYXVsdDogLy9ub3RlOiAnRCcgPSBubyBmaWxsIG9yIGJvcmRlcgoJCWJyZWFrOwoJfQoJJHRoaXMtPl9vdXQoc3ByaW50ZignJS4yRiAlLjJGICUuMkYgJS4yRicsJHgqJHRoaXMtPmssKCR0aGlzLT5oLSR5KSokdGhpcy0+aywkdyokdGhpcy0+aywtJGgqJHRoaXMtPmspLicgcmUgJy4kc3R5bGUpOwp9CgpmdW5jdGlvbiBBZGRGb250KCRmYW1pbHksICRzdHlsZT0nJywgJGZpbGU9JycsICRkZXByZWM9ZmFsc2UpCnsKCS8vIEFkZCBhIFRydWVUeXBlLCBPcGVuVHlwZSBvciBUeXBlMSBmb250CgkkZmFtaWx5ID0gc3RydG9sb3dlcigkZmFtaWx5KTsKCSRzdHlsZSA9IHN0cnRvbG93ZXIoJHN0eWxlKTsKCWlmKHN0cnBvcygkc3R5bGUsJ3UnKSE9PWZhbHNlKQoJCSRzdHlsZSA9IHN0cl9yZXBsYWNlKCd1JywnJywkc3R5bGUpOwoJaWYoJHN0eWxlPT0naWInKQoJCSRzdHlsZT0nYmknOwoJJGZvbnRrZXkgPSBzdHJfcmVwbGFjZSgnICcsJycsJGZhbWlseSkuJHN0eWxlOwoJaWYoaXNzZXQoJHRoaXMtPmZvbnRzWyRmb250a2V5XSkpCgkJcmV0dXJuOwoJaWYgKCRmaWxlKQoJCSRmaWxlID0gdHJpbSgkZmlsZSk7CglpZigkZmlsZT09JycpIHsKCQkkdHRmID0gJHRoaXMtPkZpbmRUdGZGaWxlKCRmb250a2V5LCRzdHlsZSk7CgkJaWYgKCR0dGYpIHsKCQkJJGZpbGUgPSAkZm9udGtleS4nLnR0Zic7CgkJfSBlbHNlIHsKCQkJJGZpbGUgPSAkdGhpcy0+dW5pZm9udHBhdGguRElSRUNUT1JZX1NFUEFSQVRPUi4kZm9udGtleS4nLnBocCc7CgkJCWlmICghZmlsZV9leGlzdHMoJGZpbGUpKSB7CgkJCQkkZmlsZSA9ICR0aGlzLT5mb250cGF0aC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRmb250a2V5LicucGhwJzsKCQkJCWlmKCFmaWxlX2V4aXN0cygkZmlsZSkpIHsKCQkJCQkkdGhpcy0+V2FybigiJGZhbWlseSBmb250IGZpbGUgbm90IGZvdW5kIik7CgkJCQkJJGZpbGUgPSAkdGhpcy0+dW5pZm9udHBhdGguRElSRUNUT1JZX1NFUEFSQVRPUi4naGVsdmV0aWNhLnBocCc7CgkJCQl9CgkJCX0KCQl9Cgl9IGVsc2UgewoJCSR0dGYgPSAkdGhpcy0+RmluZFR0ZkZpbGUoJGZpbGUpOwoJCWlmICghJHR0ZikgewoJCQkkZmlsZSA9ICR0aGlzLT51bmlmb250cGF0aC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRmaWxlLicucGhwJzsKCQkJaWYgKCFmaWxlX2V4aXN0cygkZmlsZSkpIHsKCQkJCSRmaWxlID0gJHRoaXMtPmZvbnRwYXRoLkRJUkVDVE9SWV9TRVBBUkFUT1IuJGZpbGUuJy5waHAnOwoJCQkJaWYoIWZpbGVfZXhpc3RzKCRmaWxlKSkgewoJCQkJCSR0aGlzLT5XYXJuKCIkZmlsZSBmb250IGZpbGUgbm90IGZvdW5kIik7CgkJCQkJJGZpbGUgPSAkdGhpcy0+dW5pZm9udHBhdGguRElSRUNUT1JZX1NFUEFSQVRPUi4naGVsdmV0aWNhLnBocCc7CgkJCQl9CgkJCX0KCQl9Cgl9CgoJaWYgKCR0dGYpIHsKCQlpZiAoISR0aGlzLT5jYW5UdGYpCgkJCSR0aGlzLT5FcnJvcigiUEhQJ3MgbWJzdHJpbmcgZXh0ZW5zaW9uIG5lZWRlZCBmb3IgVFRGIGZvbnRzIik7CgkJJHVuaWZpbGVuYW1lID0gJHRoaXMtPnVuaWZvbnRwYXRoLkRJUkVDVE9SWV9TRVBBUkFUT1Iuc3RydG9sb3dlcihzdWJzdHIoJGZpbGUsMCwoc3RycG9zKCRmaWxlLCcuJykpKSk7CgkJJG5hbWUgPSAnJzsKCQkkb3JpZ2luYWxzaXplID0gMDsKCQkkdHRmc3RhdCA9IHN0YXQoJHR0Zik7CgkJaWYgKGZpbGVfZXhpc3RzKCR1bmlmaWxlbmFtZS4nLm10eC5waHAnKSkgewoJCQlpbmNsdWRlKCR1bmlmaWxlbmFtZS4nLm10eC5waHAnKTsKCQl9CgkJaWYgKCFpc3NldCgkdHlwZSkgfHwgICFpc3NldCgkbmFtZSkgfHwgJG9yaWdpbmFsc2l6ZSAhPSAkdHRmc3RhdFsnc2l6ZSddKSB7CgkJCSR0dGZmaWxlID0gJHR0ZjsKCQkJcmVxdWlyZV9vbmNlKCR0aGlzLT51bmlmb250cGF0aC5ESVJFQ1RPUllfU0VQQVJBVE9SLid0dGZvbnRzLnBocCcpOwoJCQkkdHRmID0gbmV3IFRURm9udEZpbGUoKTsKCQkJJHR0Zi0+Z2V0TWV0cmljcygkdHRmZmlsZSk7CgkJCSRjdyA9ICR0dGYtPmNoYXJXaWR0aHM7CgkJCSRuYW1lID0gcHJlZ19yZXBsYWNlKCcvWyAoKV0vJywnJywkdHRmLT5mdWxsTmFtZSk7CgoJCQkkZGVzYz0gYXJyYXkoJ0FzY2VudCc9PnJvdW5kKCR0dGYtPmFzY2VudCksCgkJCSdEZXNjZW50Jz0+cm91bmQoJHR0Zi0+ZGVzY2VudCksCgkJCSdDYXBIZWlnaHQnPT5yb3VuZCgkdHRmLT5jYXBIZWlnaHQpLAoJCQknRmxhZ3MnPT4kdHRmLT5mbGFncywKCQkJJ0ZvbnRCQm94Jz0+J1snLnJvdW5kKCR0dGYtPmJib3hbMF0pLicgJy5yb3VuZCgkdHRmLT5iYm94WzFdKS4nICcucm91bmQoJHR0Zi0+YmJveFsyXSkuJyAnLnJvdW5kKCR0dGYtPmJib3hbM10pLiddJywKCQkJJ0l0YWxpY0FuZ2xlJz0+JHR0Zi0+aXRhbGljQW5nbGUsCgkJCSdTdGVtVic9PnJvdW5kKCR0dGYtPnN0ZW1WKSwKCQkJJ01pc3NpbmdXaWR0aCc9PnJvdW5kKCR0dGYtPmRlZmF1bHRXaWR0aCkpOwoJCQkkdXAgPSByb3VuZCgkdHRmLT51bmRlcmxpbmVQb3NpdGlvbik7CgkJCSR1dCA9IHJvdW5kKCR0dGYtPnVuZGVybGluZVRoaWNrbmVzcyk7CgkJCSRvcmlnaW5hbHNpemUgPSAkdHRmc3RhdFsnc2l6ZSddKzA7CgkJCSR0eXBlID0gJ1RURic7CgkJCWlmIChpc193cml0YWJsZSgkdGhpcy0+dW5pZm9udHBhdGgpKSB7CgkJCQkvLyBHZW5lcmF0ZSBtZXRyaWNzIC5waHAgZmlsZQoJCQkJJGxpbmVzID0gYXJyYXkoCgkJCQknPD9waHAnLAoJCQkJJyRuYW1lPVwnJy4kbmFtZS4nXCc7JywKCQkJCSckdHlwZT1cJycuJHR5cGUuJ1wnOycsCgkJCQknJGRlc2M9Jy52YXJfZXhwb3J0KCRkZXNjLHRydWUpLic7JywKCQkJCSckdXA9Jy4kdXAuJzsnLAoJCQkJJyR1dD0nLiR1dC4nOycsCgkJCQknJHR0ZmZpbGU9XCcnLiR0dGZmaWxlLidcJzsnLAoJCQkJJyRvcmlnaW5hbHNpemU9Jy4kb3JpZ2luYWxzaXplLic7JywKCQkJCSckZm9udGtleT1cJycuJGZvbnRrZXkuJ1wnOycsCgkJCQknPz4nKTsKCQkJCSRzID0gaW1wbG9kZSgiXG4iLCRsaW5lcyk7CgkJCQkkZmggPSBmb3BlbigkdW5pZmlsZW5hbWUuJy5tdHgucGhwJywndycpOwoJCQkJZndyaXRlKCRmaCwkcyxzdHJsZW4oJHMpKTsKCQkJCWZjbG9zZSgkZmgpOwoJCQkJJGZoID0gZm9wZW4oJHVuaWZpbGVuYW1lLicuY3cuZGF0Jywnd2InKTsKCQkJCWZ3cml0ZSgkZmgsJGN3LHN0cmxlbigkY3cpKTsKCQkJCWZjbG9zZSgkZmgpOwoJCQkJQHVubGluaygkdW5pZmlsZW5hbWUuJy5jdzEyNy5waHAnKTsKCQkJfQoJCQl1bnNldCgkdHRmKTsKCQl9IGVsc2UgewoJCQkkY3cgPSBAZmlsZV9nZXRfY29udGVudHMoJHVuaWZpbGVuYW1lLicuY3cuZGF0Jyk7IAoJCX0KCQkkaSA9IGNvdW50KCR0aGlzLT5mb250cykrMTsKCQlpZighZW1wdHkoJHRoaXMtPkFsaWFzTmJQYWdlcykpCgkJCSRzYmFyciA9IHJhbmdlKDAsNTcpOwoJCWVsc2UKCQkJJHNiYXJyID0gcmFuZ2UoMCwzMik7CgkJJHRoaXMtPmZvbnRzWyRmb250a2V5XSA9IGFycmF5KCdpJz0+JGksICd0eXBlJz0+JHR5cGUsICduYW1lJz0+JG5hbWUsICdkZXNjJz0+JGRlc2MsICd1cCc9PiR1cCwgJ3V0Jz0+JHV0LCAnY3cnPT4kY3csICd0dGZmaWxlJz0+JHR0ZmZpbGUsICdmb250a2V5Jz0+JGZvbnRrZXksICdzdWJzZXQnPT4kc2JhcnIsICd1bmlmaWxlbmFtZSc9PiR1bmlmaWxlbmFtZSk7CgkJJHRoaXMtPkZvbnRGaWxlc1skZm9udGtleV09YXJyYXkoJ2xlbmd0aDEnPT4kb3JpZ2luYWxzaXplLCAndHlwZSc9PidUVEYnLCAndHRmZmlsZSc9PiR0dGZmaWxlKTsKCQkkdGhpcy0+Rm9udEZpbGVzWyRmaWxlXT1hcnJheSgndHlwZSc9PidUVEYnKTsKCQl1bnNldCgkY3cpOwoJfSBlbHNlIHsKCQkkaW5mbyA9ICR0aGlzLT5fbG9hZGZvbnQoJGZpbGUpOwoJCSRpbmZvWydpJ10gPSBjb3VudCgkdGhpcy0+Zm9udHMpKzE7CgkJaWYoIWVtcHR5KCRpbmZvWydkaWZmJ10pKQoJCXsKCQkJLy8gU2VhcmNoIGV4aXN0aW5nIGVuY29kaW5ncwoJCQkkbiA9IGFycmF5X3NlYXJjaCgkaW5mb1snZGlmZiddLCR0aGlzLT5kaWZmcyk7CgkJCWlmKCEkbikKCQkJewoJCQkJJG4gPSBjb3VudCgkdGhpcy0+ZGlmZnMpKzE7CgkJCQkkdGhpcy0+ZGlmZnNbJG5dID0gJGluZm9bJ2RpZmYnXTsKCQkJfQoJCQkkaW5mb1snZGlmZm4nXSA9ICRuOwoJCX0KCQlpZighZW1wdHkoJGluZm9bJ2ZpbGUnXSkpCgkJewoJCQkvLyBFbWJlZGRlZCBmb250CgkJCWlmKCRpbmZvWyd0eXBlJ109PSdUcnVlVHlwZScpCgkJCQkkdGhpcy0+Rm9udEZpbGVzWyRpbmZvWydmaWxlJ11dID0gYXJyYXkoJ2xlbmd0aDEnPT4kaW5mb1snb3JpZ2luYWxzaXplJ10pOwoJCQllbHNlCgkJCQkkdGhpcy0+Rm9udEZpbGVzWyRpbmZvWydmaWxlJ11dID0gYXJyYXkoJ2xlbmd0aDEnPT4kaW5mb1snc2l6ZTEnXSwgJ2xlbmd0aDInPT4kaW5mb1snc2l6ZTInXSk7CgkJfQoJCSR0aGlzLT5mb250c1skZm9udGtleV0gPSAkaW5mbzsKCX0KfQoKZnVuY3Rpb24gU2V0Rm9udCgkZmFtaWx5PScnLCAkc3R5bGU9JycsICRzaXplPTApCnsKCS8vIFNlbGVjdCBhIGZvbnQ7IHNpemUgZ2l2ZW4gaW4gcG9pbnRzCglpZigkZmFtaWx5PT0nJykKCQkkZmFtaWx5ID0gJHRoaXMtPkZvbnRGYW1pbHk7CgllbHNlCgkJJGZhbWlseSA9IHN0cnRvbG93ZXIoJGZhbWlseSk7Cgkkc3R5bGUgPSBzdHJ0b2xvd2VyKCRzdHlsZSk7CglpZihzdHJwb3MoJHN0eWxlLCd1JykhPT1mYWxzZSkgewoJCSR0aGlzLT51bmRlcmxpbmUgPSB0cnVlOwoJCSRzdHlsZSA9IHN0cl9yZXBsYWNlKCd1JywnJywkc3R5bGUpOwoJfQoJZWxzZQoJCSR0aGlzLT51bmRlcmxpbmUgPSBmYWxzZTsKCWlmKCRzdHlsZT09J2liJykKCQkkc3R5bGUgPSAnYmknOwoJaWYoJHNpemU9PTApCgkJJHNpemUgPSAkdGhpcy0+Rm9udFNpemVQdDsKCS8vIFRlc3QgaWYgZm9udCBpcyBhbHJlYWR5IHNlbGVjdGVkCglpZigkdGhpcy0+Rm9udEZhbWlseT09JGZhbWlseSAmJiAkdGhpcy0+Rm9udFN0eWxlPT0kc3R5bGUgJiYgJHRoaXMtPkZvbnRTaXplUHQ9PSRzaXplKQoJCXJldHVybjsKCS8vIFRlc3QgaWYgZm9udCBpcyBhbHJlYWR5IGxvYWRlZAoJJGZvbnRrZXkgPSAkZmFtaWx5LiRzdHlsZTsKCWlmKCFpc3NldCgkdGhpcy0+Zm9udHNbJGZvbnRrZXldKSkgewoJCS8vIFRlc3QgaWYgb25lIG9mIHRoZSBjb3JlIGZvbnRzCgkJaWYoJGZhbWlseT09J2FyaWFsJykKCQkJJGZhbWlseSA9ICdoZWx2ZXRpY2EnOwoJCWlmKGluX2FycmF5KCRmYW1pbHksJHRoaXMtPkNvcmVGb250cykpCgkJewoJCQlpZigkZmFtaWx5PT0nc3ltYm9sJyB8fCAkZmFtaWx5PT0nemFwZmRpbmdiYXRzJykKCQkJCSRzdHlsZSA9ICcnOwoJCQkkZm9udGtleSA9ICRmYW1pbHkuJHN0eWxlOwoJCQlpZighaXNzZXQoJHRoaXMtPmZvbnRzWyRmb250a2V5XSkpCgkJCQkkdGhpcy0+QWRkRm9udCgkZmFtaWx5LCRzdHlsZSk7CgkJfSBlbHNlIHsKCQkJJHRoaXMtPkVycm9yKCdVbmRlZmluZWQgZm9udDogJy4kZmFtaWx5LicgJy4kc3R5bGUpOwoJCX0KCX0KCS8vIFNlbGVjdCBpdAoJJHRoaXMtPkZvbnRGYW1pbHkgPSAkZmFtaWx5OwoJJHRoaXMtPkZvbnRTdHlsZSA9ICRzdHlsZTsKCSR0aGlzLT5Gb250U2l6ZVB0ID0gJHNpemU7CgkkdGhpcy0+Rm9udFNpemUgPSAkc2l6ZS8kdGhpcy0+azsKCSR0aGlzLT5DdXJyZW50Rm9udCA9ICYkdGhpcy0+Zm9udHNbJGZvbnRrZXldOwoJJHRoaXMtPmlzVHRmID0gKCR0aGlzLT5mb250c1skZm9udGtleV1bJ3R5cGUnXT09J1RURicpOwoJaWYoJHRoaXMtPnBhZ2U+MCkKCQkkdGhpcy0+X291dChzcHJpbnRmKCdCVCAvRiVkICUuMkYgVGYgRVQnLCR0aGlzLT5DdXJyZW50Rm9udFsnaSddLCRzaXplKSk7Cn0KCmZ1bmN0aW9uIFNldEZvbnRTaXplKCRzaXplKQp7CgkvLyBTZXQgZm9udCBzaXplIGluIHBvaW50cwoJaWYoJHRoaXMtPkZvbnRTaXplUHQ9PSRzaXplKQoJCXJldHVybjsKCSR0aGlzLT5Gb250U2l6ZVB0ID0gJHNpemU7CgkkdGhpcy0+Rm9udFNpemUgPSAkc2l6ZS8kdGhpcy0+azsKCWlmKCR0aGlzLT5wYWdlPjApCgkJJHRoaXMtPl9vdXQoc3ByaW50ZignQlQgL0YlZCAlLjJGIFRmIEVUJywkdGhpcy0+Q3VycmVudEZvbnRbJ2knXSwkdGhpcy0+Rm9udFNpemVQdCkpOwp9CgpmdW5jdGlvbiBBZGRMaW5rKCkKewoJLy8gQ3JlYXRlIGEgbmV3IGludGVybmFsIGxpbmsKCSRuID0gY291bnQoJHRoaXMtPmxpbmtzKSsxOwoJJHRoaXMtPmxpbmtzWyRuXSA9IGFycmF5KDAsIDApOwoJcmV0dXJuICRuOwp9CgpmdW5jdGlvbiBTZXRMaW5rKCRsaW5rLCAkeT0wLCAkcGFnZT0tMSkKewoJLy8gU2V0IGRlc3RpbmF0aW9uIG9mIGludGVybmFsIGxpbmsKCWlmKCR5PT0tMSkKCQkkeSA9ICR0aGlzLT55OwoJaWYoJHBhZ2U9PS0xKQoJCSRwYWdlID0gJHRoaXMtPnBhZ2U7CgkkdGhpcy0+bGlua3NbJGxpbmtdID0gYXJyYXkoJHBhZ2UsICR5KTsKfQoKZnVuY3Rpb24gTGluaygkeCwgJHksICR3LCAkaCwgJGxpbmspCnsKCS8vIFB1dCBhIGxpbmsgb24gdGhlIHBhZ2UKCSR0aGlzLT5QYWdlTGlua3NbJHRoaXMtPnBhZ2VdW10gPSBhcnJheSgkeCokdGhpcy0+aywgJHRoaXMtPmhQdC0keSokdGhpcy0+aywgJHcqJHRoaXMtPmssICRoKiR0aGlzLT5rLCAkbGluayk7Cn0KCmZ1bmN0aW9uIFRleHQoJHgsICR5LCAkdHh0KQp7CgkvLyBPdXRwdXQgYSBzdHJpbmcKCWlmICgkdGhpcy0+aXNUdGYpIHsKCQkkdHh0MiA9ICcoJy4kdGhpcy0+X2VzY2FwZSgkdGhpcy0+X1VURjh0b1VURjE2KCR0eHQsZmFsc2UpKS4nKSc7CgkJZm9yZWFjaCgkdGhpcy0+VVRGOFN0cmluZ1RvQXJyYXkoJHR4dCkgYXMgJHVuaSkKCQkJJHRoaXMtPkN1cnJlbnRGb250WydzdWJzZXQnXVskdW5pXSA9ICR1bmk7Cgl9IGVsc2UgewoJCSR0eHQyID0gJygnLiR0aGlzLT5fZXNjYXBlKCR0eHQpLicpJzsKCX0KCSRzID0gc3ByaW50ZignQlQgJS4yRiAlLjJGIFRkICVzIFRqIEVUJywkeCokdGhpcy0+aywoJHRoaXMtPmgtJHkpKiR0aGlzLT5rLCR0eHQyKTsKCWlmKCR0aGlzLT51bmRlcmxpbmUgJiYgJHR4dCE9JycpCgkJJHMgLj0gJyAnLiR0aGlzLT5fZG91bmRlcmxpbmUoJHgsJHksJHR4dCk7CglpZigkdGhpcy0+Q29sb3JGbGFnKQoJCSRzID0gJ3EgJy4kdGhpcy0+VGV4dENvbG9yLicgJy4kcy4nIFEnOwoJJHRoaXMtPl9vdXQoJHMpOwp9CgpmdW5jdGlvbiBBY2NlcHRQYWdlQnJlYWsoKQp7CgkvLyBBY2NlcHQgYXV0b21hdGljIHBhZ2UgYnJlYWsgb3Igbm90CglyZXR1cm4gJHRoaXMtPkF1dG9QYWdlQnJlYWs7Cn0KCmZ1bmN0aW9uIENlbGwoJHcsICRoPTAsICR0eHQ9JycsICRib3JkZXI9MCwgJGxuPTAsICRhbGlnbj0nJywgJGZpbGw9ZmFsc2UsICRsaW5rPScnKQp7CgkvLyBPdXRwdXQgYSBjZWxsCgkkayA9ICR0aGlzLT5rOwoJaWYoJHRoaXMtPnkrJGg+JHRoaXMtPlBhZ2VCcmVha1RyaWdnZXIgJiYgISR0aGlzLT5JbkhlYWRlciAmJiAhJHRoaXMtPkluRm9vdGVyICYmICR0aGlzLT5BY2NlcHRQYWdlQnJlYWsoKSkKCXsKCQkvLyBBdXRvbWF0aWMgcGFnZSBicmVhawoJCSR4ID0gJHRoaXMtPng7CgkJJHdzID0gJHRoaXMtPndzOwoJCWlmKCR3cz4wKQoJCXsKCQkJJHRoaXMtPndzID0gMDsKCQkJJHRoaXMtPl9vdXQoJzAgVHcnKTsKCQl9CgkJJHRoaXMtPkFkZFBhZ2UoJHRoaXMtPkN1ck9yaWVudGF0aW9uLCR0aGlzLT5DdXJQYWdlU2l6ZSk7CgkJJHRoaXMtPnggPSAkeDsKCQlpZigkd3M+MCkKCQl7CgkJCSR0aGlzLT53cyA9ICR3czsKCQkJJHRoaXMtPl9vdXQoc3ByaW50ZignJS4zRiBUdycsJHdzKiRrKSk7CgkJfQoJfQoJaWYoJHc9PTApCgkJJHcgPSAkdGhpcy0+dy0kdGhpcy0+ck1hcmdpbi0kdGhpcy0+eDsKCSRzID0gJyc7CglpZigkZmlsbCB8fCAkYm9yZGVyPT0xKQoJewoJCWlmKCRmaWxsKQoJCQkkb3AgPSAoJGJvcmRlcj09MSkgPyAnQicgOiAnZic7CgkJZWxzZQoJCQkkb3AgPSAnUyc7CgkJJHMgPSBzcHJpbnRmKCclLjJGICUuMkYgJS4yRiAlLjJGIHJlICVzICcsJHRoaXMtPngqJGssKCR0aGlzLT5oLSR0aGlzLT55KSokaywkdyokaywtJGgqJGssJG9wKTsKCX0KCWlmKGlzX3N0cmluZygkYm9yZGVyKSkKCXsKCQkkeCA9ICR0aGlzLT54OwoJCSR5ID0gJHRoaXMtPnk7CgkJaWYoc3RycG9zKCRib3JkZXIsJ0wnKSE9PWZhbHNlKQoJCQkkcyAuPSBzcHJpbnRmKCclLjJGICUuMkYgbSAlLjJGICUuMkYgbCBTICcsJHgqJGssKCR0aGlzLT5oLSR5KSokaywkeCokaywoJHRoaXMtPmgtKCR5KyRoKSkqJGspOwoJCWlmKHN0cnBvcygkYm9yZGVyLCdUJykhPT1mYWxzZSkKCQkJJHMgLj0gc3ByaW50ZignJS4yRiAlLjJGIG0gJS4yRiAlLjJGIGwgUyAnLCR4KiRrLCgkdGhpcy0+aC0keSkqJGssKCR4KyR3KSokaywoJHRoaXMtPmgtJHkpKiRrKTsKCQlpZihzdHJwb3MoJGJvcmRlciwnUicpIT09ZmFsc2UpCgkJCSRzIC49IHNwcmludGYoJyUuMkYgJS4yRiBtICUuMkYgJS4yRiBsIFMgJywoJHgrJHcpKiRrLCgkdGhpcy0+aC0keSkqJGssKCR4KyR3KSokaywoJHRoaXMtPmgtKCR5KyRoKSkqJGspOwoJCWlmKHN0cnBvcygkYm9yZGVyLCdCJykhPT1mYWxzZSkKCQkJJHMgLj0gc3ByaW50ZignJS4yRiAlLjJGIG0gJS4yRiAlLjJGIGwgUyAnLCR4KiRrLCgkdGhpcy0+aC0oJHkrJGgpKSokaywoJHgrJHcpKiRrLCgkdGhpcy0+aC0oJHkrJGgpKSokayk7Cgl9CglpZigkdHh0IT09JycpCgl7CgkJaWYoJGFsaWduPT0nUicpCgkJCSRkeCA9ICR3LSR0aGlzLT5jTWFyZ2luLSR0aGlzLT5HZXRTdHJpbmdXaWR0aCgkdHh0KTsKCQllbHNlaWYoJGFsaWduPT0nQycpCgkJCSRkeCA9ICgkdy0kdGhpcy0+R2V0U3RyaW5nV2lkdGgoJHR4dCkpLzI7CgkJZWxzZQoJCQkkZHggPSAkdGhpcy0+Y01hcmdpbjsKCQlpZigkdGhpcy0+Q29sb3JGbGFnKQoJCQkkcyAuPSAncSAnLiR0aGlzLT5UZXh0Q29sb3IuJyAnOwoKCQkvLyBJZiBtdWx0aWJ5dGUsIFR3IGhhcyBubyBlZmZlY3QgLSBkbyB3b3JkIHNwYWNpbmcgdXNpbmcgYW4gYWRqdXN0bWVudCBiZWZvcmUgZWFjaCBzcGFjZQoJCWlmICgkdGhpcy0+d3MgJiYgJHRoaXMtPmlzVHRmKSB7CgkJCWZvcmVhY2goJHRoaXMtPlVURjhTdHJpbmdUb0FycmF5KCR0eHQpIGFzICR1bmkpCgkJCQkkdGhpcy0+Q3VycmVudEZvbnRbJ3N1YnNldCddWyR1bmldID0gJHVuaTsKCQkJJHNwYWNlID0gJHRoaXMtPl9lc2NhcGUoJHRoaXMtPl9VVEY4dG9VVEYxNignICcsZmFsc2UpKTsKCQkJJHMgLj0gc3ByaW50ZignQlQgMCBUdyAlLjJGICUuMkYgVGQgWycsKCR0aGlzLT54KyRkeCkqJGssKCR0aGlzLT5oLSgkdGhpcy0+eSsuNSokaCsuMyokdGhpcy0+Rm9udFNpemUpKSokayk7CgkJCSR0ID0gcHJlZ19zcGxpdCgnL1xzKy8nLCR0eHQsLTEsUFJFR19TUExJVF9ERUxJTV9DQVBUVVJFKTsKCQkJJG51bXQgPSBjb3VudCgkdCk7CgkJCWZvcigkaT0wOyRpPCRudW10OyRpKyspIHsKCQkJCSRzIC49ICcoJy4kdGhpcy0+X2VzY2FwZSgkdGhpcy0+X1VURjh0b1VURjE2KCR0WyRpXSxmYWxzZSkpLicpICc7CgkJCQlpZiAoKCRpKzEpPCRudW10KSB7CgkJCQkJJGFkaiA9IC0oJHRoaXMtPndzKiR0aGlzLT5rKSoxMDAwLyR0aGlzLT5Gb250U2l6ZVB0OwoJCQkJCSRzIC49IHNwcmludGYoJyVkKCVzKSAnLCRhZGosJHNwYWNlKTsKCQkJCX0KCQkJfQoJCQkkcyA9IHJ0cmltKCRzLCcgJykuJ10gVEogRVQnOwoJCX0gZWxzZSB7CgkJCWlmICgkdGhpcy0+aXNUdGYpIHsKCQkJCSR0eHQyID0gJygnLiR0aGlzLT5fZXNjYXBlKCR0aGlzLT5fVVRGOHRvVVRGMTYoJHR4dCxmYWxzZSkpLicpJzsKCQkJCWZvcmVhY2goJHRoaXMtPlVURjhTdHJpbmdUb0FycmF5KCR0eHQpIGFzICR1bmkpCgkJCQkJJHRoaXMtPkN1cnJlbnRGb250WydzdWJzZXQnXVskdW5pXSA9ICR1bmk7CgkJCX0gZWxzZSB7CgkJCQkkdHh0MiA9ICcoJy4kdGhpcy0+X2VzY2FwZSgkdHh0KS4nKSc7CgkJCX0KCQkJJHMgLj0gc3ByaW50ZignQlQgJS4yRiAlLjJGIFRkICVzIFRqIEVUJywoJHRoaXMtPngrJGR4KSokaywoJHRoaXMtPmgtKCR0aGlzLT55Ky41KiRoKy4zKiR0aGlzLT5Gb250U2l6ZSkpKiRrLCR0eHQyKTsKCQl9CgkJaWYoJHRoaXMtPnVuZGVybGluZSkKCQkJJHMgLj0gJyAnLiR0aGlzLT5fZG91bmRlcmxpbmUoJHRoaXMtPngrJGR4LCR0aGlzLT55Ky41KiRoKy4zKiR0aGlzLT5Gb250U2l6ZSwkdHh0KTsKCQlpZigkdGhpcy0+Q29sb3JGbGFnKQoJCQkkcyAuPSAnIFEnOwoJCWlmKCRsaW5rKQoJCQkkdGhpcy0+TGluaygkdGhpcy0+eCskZHgsJHRoaXMtPnkrLjUqJGgtLjUqJHRoaXMtPkZvbnRTaXplLCR0aGlzLT5HZXRTdHJpbmdXaWR0aCgkdHh0KSwkdGhpcy0+Rm9udFNpemUsJGxpbmspOwoJfQoJaWYoJHMpCgkJJHRoaXMtPl9vdXQoJHMpOwoJJHRoaXMtPmxhc3RoID0gJGg7CglpZigkbG4+MCkKCXsKCQkvLyBHbyB0byBuZXh0IGxpbmUKCQkkdGhpcy0+eSArPSAkaDsKCQlpZigkbG49PTEpCgkJCSR0aGlzLT54ID0gJHRoaXMtPmxNYXJnaW47Cgl9CgllbHNlCgkJJHRoaXMtPnggKz0gJHc7Cn0KCmZ1bmN0aW9uIE11bHRpQ2VsbCgkdywgJGgsICR0eHQsICRib3JkZXI9MCwgJGFsaWduPSdKJywgJGZpbGw9ZmFsc2UpCnsKCS8vIE91dHB1dCB0ZXh0IHdpdGggYXV0b21hdGljIG9yIGV4cGxpY2l0IGxpbmUgYnJlYWtzCgkkY3cgPSAmJHRoaXMtPkN1cnJlbnRGb250WydjdyddOwoJaWYoJHc9PTApCgkJJHcgPSAkdGhpcy0+dy0kdGhpcy0+ck1hcmdpbi0kdGhpcy0+eDsKCSR3bWF4ID0gKCR3LTIqJHRoaXMtPmNNYXJnaW4pOwoJJHMgPSBzdHJfcmVwbGFjZSgiXHIiLCcnLCR0eHQpOwoJaWYgKCR0aGlzLT5pc1R0ZikgewoJCSRuYiA9IG1iX3N0cmxlbigkcywnVVRGLTgnKTsKCQl3aGlsZSgkbmI+MCAmJiBtYl9zdWJzdHIoJHMsJG5iLTEsMSwnVVRGLTgnKT09IlxuIikJJG5iLS07Cgl9IGVsc2UgewoJCSRuYiA9IHN0cmxlbigkcyk7CgkJaWYoJG5iPjAgJiYgJHNbJG5iLTFdPT0iXG4iKQoJCQkkbmItLTsKCX0KCSRiID0gMDsKCWlmKCRib3JkZXIpCgl7CgkJaWYoJGJvcmRlcj09MSkKCQl7CgkJCSRib3JkZXIgPSAnTFRSQic7CgkJCSRiID0gJ0xSVCc7CgkJCSRiMiA9ICdMUic7CgkJfQoJCWVsc2UKCQl7CgkJCSRiMiA9ICcnOwoJCQlpZihzdHJwb3MoJGJvcmRlciwnTCcpIT09ZmFsc2UpCgkJCQkkYjIgLj0gJ0wnOwoJCQlpZihzdHJwb3MoJGJvcmRlciwnUicpIT09ZmFsc2UpCgkJCQkkYjIgLj0gJ1InOwoJCQkkYiA9IChzdHJwb3MoJGJvcmRlciwnVCcpIT09ZmFsc2UpID8gJGIyLidUJyA6ICRiMjsKCQl9Cgl9Cgkkc2VwID0gLTE7CgkkaSA9IDA7CgkkaiA9IDA7CgkkbCA9IDA7CgkkbnMgPSAwOwoJJG5sID0gMTsKCXdoaWxlKCRpPCRuYikKCXsKCQkvLyBHZXQgbmV4dCBjaGFyYWN0ZXIKCQlpZiAoJHRoaXMtPmlzVHRmKSB7CgkJCSRjID0gbWJfc3Vic3RyKCRzLCRpLDEsJ1VURi04Jyk7CgkJfSBlbHNlIHsKCQkJJGM9JHNbJGldOwoJCX0KCQlpZigkYz09IlxuIikKCQl7CgkJCS8vIEV4cGxpY2l0IGxpbmUgYnJlYWsKCQkJaWYoJHRoaXMtPndzPjApCgkJCXsKCQkJCSR0aGlzLT53cyA9IDA7CgkJCQkkdGhpcy0+X291dCgnMCBUdycpOwoJCQl9CgkJCWlmICgkdGhpcy0+aXNUdGYpIHsKCQkJCSR0aGlzLT5DZWxsKCR3LCRoLG1iX3N1YnN0cigkcywkaiwkaS0kaiwnVVRGLTgnKSwkYiwyLCRhbGlnbiwkZmlsbCk7CgkJCX0gZWxzZSB7CgkJCQkkdGhpcy0+Q2VsbCgkdywkaCxzdWJzdHIoJHMsJGosJGktJGopLCRiLDIsJGFsaWduLCRmaWxsKTsKCQkJfQoJCQkkaSsrOwoJCQkkc2VwID0gLTE7CgkJCSRqID0gJGk7CgkJCSRsID0gMDsKCQkJJG5zID0gMDsKCQkJJG5sKys7CgkJCWlmKCRib3JkZXIgJiYgJG5sPT0yKQoJCQkJJGIgPSAkYjI7CgkJCWNvbnRpbnVlOwoJCX0KCQlpZigkYz09JyAnKQoJCXsKCQkJJHNlcCA9ICRpOwoJCQkkbHMgPSAkbDsKCQkJJG5zKys7CgkJfQoKCQlpZiAoJHRoaXMtPmlzVHRmKSB7CgkJCSRsICs9ICR0aGlzLT5HZXRTdHJpbmdXaWR0aCgkYyk7CgkJfSBlbHNlIHsKCQkJJGwgKz0gJGN3WyRjXSokdGhpcy0+Rm9udFNpemUvMTAwMDsKCQl9CgoJCWlmKCRsPiR3bWF4KQoJCXsKCQkJLy8gQXV0b21hdGljIGxpbmUgYnJlYWsKCQkJaWYoJHNlcD09LTEpCgkJCXsKCQkJCWlmKCRpPT0kaikKCQkJCQkkaSsrOwoJCQkJaWYoJHRoaXMtPndzPjApCgkJCQl7CgkJCQkJJHRoaXMtPndzID0gMDsKCQkJCQkkdGhpcy0+X291dCgnMCBUdycpOwoJCQkJfQoJCQkJaWYgKCR0aGlzLT5pc1R0ZikgewoJCQkJCSR0aGlzLT5DZWxsKCR3LCRoLG1iX3N1YnN0cigkcywkaiwkaS0kaiwnVVRGLTgnKSwkYiwyLCRhbGlnbiwkZmlsbCk7CgkJCQl9IGVsc2UgewoJCQkJCSR0aGlzLT5DZWxsKCR3LCRoLHN1YnN0cigkcywkaiwkaS0kaiksJGIsMiwkYWxpZ24sJGZpbGwpOwoJCQkJfQoJCQl9CgkJCWVsc2UKCQkJewoJCQkJaWYoJGFsaWduPT0nSicpCgkJCQl7CgkJCQkJJHRoaXMtPndzID0gKCRucz4xKSA/ICgkd21heC0kbHMpLygkbnMtMSkgOiAwOwoJCQkJCSR0aGlzLT5fb3V0KHNwcmludGYoJyUuM0YgVHcnLCR0aGlzLT53cyokdGhpcy0+aykpOwoJCQkJfQoJCQkJaWYgKCR0aGlzLT5pc1R0ZikgewoJCQkJCSR0aGlzLT5DZWxsKCR3LCRoLG1iX3N1YnN0cigkcywkaiwkc2VwLSRqLCdVVEYtOCcpLCRiLDIsJGFsaWduLCRmaWxsKTsKCQkJCX0gZWxzZSB7CgkJCQkJJHRoaXMtPkNlbGwoJHcsJGgsc3Vic3RyKCRzLCRqLCRzZXAtJGopLCRiLDIsJGFsaWduLCRmaWxsKTsKCQkJCX0KCQkJCSRpID0gJHNlcCsxOwoJCQl9CgkJCSRzZXAgPSAtMTsKCQkJJGogPSAkaTsKCQkJJGwgPSAwOwoJCQkkbnMgPSAwOwoJCQkkbmwrKzsKCQkJaWYoJGJvcmRlciAmJiAkbmw9PTIpCgkJCQkkYiA9ICRiMjsKCQl9CgkJZWxzZQoJCQkkaSsrOwoJfQoJLy8gTGFzdCBjaHVuawoJaWYoJHRoaXMtPndzPjApCgl7CgkJJHRoaXMtPndzID0gMDsKCQkkdGhpcy0+X291dCgnMCBUdycpOwoJfQoJaWYoJGJvcmRlciAmJiBzdHJwb3MoJGJvcmRlciwnQicpIT09ZmFsc2UpCgkJJGIgLj0gJ0InOwoJaWYgKCR0aGlzLT5pc1R0ZikgewoJCSR0aGlzLT5DZWxsKCR3LCRoLG1iX3N1YnN0cigkcywkaiwkaS0kaiwnVVRGLTgnKSwkYiwyLCRhbGlnbiwkZmlsbCk7Cgl9IGVsc2UgewoJCSR0aGlzLT5DZWxsKCR3LCRoLHN1YnN0cigkcywkaiwkaS0kaiksJGIsMiwkYWxpZ24sJGZpbGwpOwoJfQoJJHRoaXMtPnggPSAkdGhpcy0+bE1hcmdpbjsKfQoKZnVuY3Rpb24gV3JpdGUoJGgsICR0eHQsICRsaW5rPScnKQp7CgkvLyBPdXRwdXQgdGV4dCBpbiBmbG93aW5nIG1vZGUKCSRjdyA9ICYkdGhpcy0+Q3VycmVudEZvbnRbJ2N3J107CgkkdyA9ICR0aGlzLT53LSR0aGlzLT5yTWFyZ2luLSR0aGlzLT54OwoKCSR3bWF4ID0gKCR3LTIqJHRoaXMtPmNNYXJnaW4pOwoJJHMgPSBzdHJfcmVwbGFjZSgiXHIiLCcnLCR0eHQpOwoJaWYgKCR0aGlzLT5pc1R0ZikgewoJCSRuYiA9IG1iX3N0cmxlbigkcywgJ1VURi04Jyk7CgkJaWYoJG5iPT0xICYmICRzPT0iICIpIHsKCQkJJHRoaXMtPnggKz0gJHRoaXMtPkdldFN0cmluZ1dpZHRoKCRzKTsKCQkJcmV0dXJuOwoJCX0KCX0gZWxzZSB7CgkJJG5iID0gc3RybGVuKCRzKTsKCX0KCSRzZXAgPSAtMTsKCSRpID0gMDsKCSRqID0gMDsKCSRsID0gMDsKCSRubCA9IDE7Cgl3aGlsZSgkaTwkbmIpCgl7CgkJLy8gR2V0IG5leHQgY2hhcmFjdGVyCgkJaWYgKCR0aGlzLT5pc1R0ZikgewoJCQkkYyA9IG1iX3N1YnN0cigkcywkaSwxLCdVVEYtOCcpOwoJCX0gZWxzZSB7CgkJCSRjID0gJHNbJGldOwoJCX0KCQlpZigkYz09IlxuIikKCQl7CgkJCS8vIEV4cGxpY2l0IGxpbmUgYnJlYWsKCQkJaWYgKCR0aGlzLT5pc1R0ZikgewoJCQkJJHRoaXMtPkNlbGwoJHcsJGgsbWJfc3Vic3RyKCRzLCRqLCRpLSRqLCdVVEYtOCcpLDAsMiwnJywwLCRsaW5rKTsKCQkJfSBlbHNlIHsKCQkJCSR0aGlzLT5DZWxsKCR3LCRoLHN1YnN0cigkcywkaiwkaS0kaiksMCwyLCcnLDAsJGxpbmspOwoJCQl9CgkJCSRpKys7CgkJCSRzZXAgPSAtMTsKCQkJJGogPSAkaTsKCQkJJGwgPSAwOwoJCQlpZigkbmw9PTEpCgkJCXsKCQkJCSR0aGlzLT54ID0gJHRoaXMtPmxNYXJnaW47CgkJCQkkdyA9ICR0aGlzLT53LSR0aGlzLT5yTWFyZ2luLSR0aGlzLT54OwoJCQkJJHdtYXggPSAoJHctMiokdGhpcy0+Y01hcmdpbik7CgkJCX0KCQkJJG5sKys7CgkJCWNvbnRpbnVlOwoJCX0KCQlpZigkYz09JyAnKQoJCQkkc2VwID0gJGk7CgoJCWlmICgkdGhpcy0+aXNUdGYpIHsKCQkJJGwgKz0gJHRoaXMtPkdldFN0cmluZ1dpZHRoKCRjKTsKCQl9IGVsc2UgewoJCQkkbCArPSAkY3dbJGNdKiR0aGlzLT5Gb250U2l6ZS8xMDAwOwoJCX0KCgkJaWYoJGw+JHdtYXgpCgkJewoJCQkvLyBBdXRvbWF0aWMgbGluZSBicmVhawoJCQlpZigkc2VwPT0tMSkKCQkJewoJCQkJaWYoJHRoaXMtPng+JHRoaXMtPmxNYXJnaW4pCgkJCQl7CgkJCQkJLy8gTW92ZSB0byBuZXh0IGxpbmUKCQkJCQkkdGhpcy0+eCA9ICR0aGlzLT5sTWFyZ2luOwoJCQkJCSR0aGlzLT55ICs9ICRoOwoJCQkJCSR3ID0gJHRoaXMtPnctJHRoaXMtPnJNYXJnaW4tJHRoaXMtPng7CgkJCQkJJHdtYXggPSAoJHctMiokdGhpcy0+Y01hcmdpbik7CgkJCQkJJGkrKzsKCQkJCQkkbmwrKzsKCQkJCQljb250aW51ZTsKCQkJCX0KCQkJCWlmKCRpPT0kaikKCQkJCQkkaSsrOwoJCQkJaWYgKCR0aGlzLT5pc1R0ZikgewoJCQkJCSR0aGlzLT5DZWxsKCR3LCRoLG1iX3N1YnN0cigkcywkaiwkaS0kaiwnVVRGLTgnKSwwLDIsJycsMCwkbGluayk7CgkJCQl9IGVsc2UgewoJCQkJCSR0aGlzLT5DZWxsKCR3LCRoLHN1YnN0cigkcywkaiwkaS0kaiksMCwyLCcnLDAsJGxpbmspOwoJCQkJfQoJCQl9IGVsc2UgewoJCQkJaWYgKCR0aGlzLT5pc1R0ZikgewoJCQkJCSR0aGlzLT5DZWxsKCR3LCRoLG1iX3N1YnN0cigkcywkaiwkc2VwLSRqLCdVVEYtOCcpLDAsMiwnJywwLCRsaW5rKTsKCQkJCX0gZWxzZSB7CgkJCQkJJHRoaXMtPkNlbGwoJHcsJGgsc3Vic3RyKCRzLCRqLCRzZXAtJGopLDAsMiwnJywwLCRsaW5rKTsKCQkJCX0KCQkJCSRpID0gJHNlcCsxOwoJCQl9CgkJCSRzZXAgPSAtMTsKCQkJJGogPSAkaTsKCQkJJGwgPSAwOwoJCQlpZigkbmw9PTEpCgkJCXsKCQkJCSR0aGlzLT54ID0gJHRoaXMtPmxNYXJnaW47CgkJCQkkdyA9ICR0aGlzLT53LSR0aGlzLT5yTWFyZ2luLSR0aGlzLT54OwoJCQkJJHdtYXggPSAoJHctMiokdGhpcy0+Y01hcmdpbik7CgkJCX0KCQkJJG5sKys7CgkJfQoJCWVsc2UKCQkJJGkrKzsKCX0KCS8vIExhc3QgY2h1bmsKCWlmKCRpIT0kaikgewoJCWlmICgkdGhpcy0+aXNUdGYpIHsKCQkJJHRoaXMtPkNlbGwoJGwsJGgsbWJfc3Vic3RyKCRzLCRqLCRpLSRqLCdVVEYtOCcpLDAsMCwnJywwLCRsaW5rKTsKCQl9IGVsc2UgewoJCQkkdGhpcy0+Q2VsbCgkbCwkaCxzdWJzdHIoJHMsJGopLDAsMCwnJywwLCRsaW5rKTsKCQl9Cgl9Cn0KCmZ1bmN0aW9uIExuKCRoPW51bGwpCnsKCS8vIExpbmUgZmVlZDsgZGVmYXVsdCB2YWx1ZSBpcyBsYXN0IGNlbGwgaGVpZ2h0CgkkdGhpcy0+eCA9ICR0aGlzLT5sTWFyZ2luOwoJaWYoJGg9PT1udWxsKQoJCSR0aGlzLT55ICs9ICR0aGlzLT5sYXN0aDsKCWVsc2UKCQkkdGhpcy0+eSArPSAkaDsKfQoKZnVuY3Rpb24gSW1hZ2UoJGZpbGUsICR4PW51bGwsICR5PW51bGwsICR3PTAsICRoPTAsICR0eXBlPScnLCAkbGluaz0nJykKewoJLy8gUHV0IGFuIGltYWdlIG9uIHRoZSBwYWdlCglpZighaXNzZXQoJHRoaXMtPmltYWdlc1skZmlsZV0pKQoJewoJCS8vIEZpcnN0IHVzZSBvZiB0aGlzIGltYWdlLCBnZXQgaW5mbwoJCWlmKCR0eXBlPT0nJykKCQl7CgkJCSRwb3MgPSBzdHJycG9zKCRmaWxlLCcuJyk7CgkJCWlmKCEkcG9zKQoJCQkJJHRoaXMtPkVycm9yKCdJbWFnZSBmaWxlIGhhcyBubyBleHRlbnNpb24gYW5kIG5vIHR5cGUgd2FzIHNwZWNpZmllZDogJy4kZmlsZSk7CgkJCSR0eXBlID0gc3Vic3RyKCRmaWxlLCRwb3MrMSk7CgkJfQoJCSR0eXBlID0gc3RydG9sb3dlcigkdHlwZSk7CgkJaWYoJHR5cGU9PSdqcGVnJykKCQkJJHR5cGUgPSAnanBnJzsKCQkkbXRkID0gJ19wYXJzZScuJHR5cGU7CgkJaWYoIW1ldGhvZF9leGlzdHMoJHRoaXMsJG10ZCkpCgkJCSR0aGlzLT5FcnJvcignVW5zdXBwb3J0ZWQgaW1hZ2UgdHlwZTogJy4kdHlwZSk7CgkJJGluZm8gPSAkdGhpcy0+JG10ZCgkZmlsZSk7CgkJJGluZm9bJ2knXSA9IGNvdW50KCR0aGlzLT5pbWFnZXMpKzE7CgkJJHRoaXMtPmltYWdlc1skZmlsZV0gPSAkaW5mbzsKCX0KCWVsc2UKCQkkaW5mbyA9ICR0aGlzLT5pbWFnZXNbJGZpbGVdOwoKCS8vIEF1dG9tYXRpYyB3aWR0aCBhbmQgaGVpZ2h0IGNhbGN1bGF0aW9uIGlmIG5lZWRlZAoJaWYoJHc9PTAgJiYgJGg9PTApCgl7CgkJLy8gUHV0IGltYWdlIGF0IDk2IGRwaQoJCSR3ID0gLTk2OwoJCSRoID0gLTk2OwoJfQoJaWYoJHc8MCkKCQkkdyA9IC0kaW5mb1sndyddKjcyLyR3LyR0aGlzLT5rOwoJaWYoJGg8MCkKCQkkaCA9IC0kaW5mb1snaCddKjcyLyRoLyR0aGlzLT5rOwoJaWYoJHc9PTApCgkJJHcgPSAkaCokaW5mb1sndyddLyRpbmZvWydoJ107CglpZigkaD09MCkKCQkkaCA9ICR3KiRpbmZvWydoJ10vJGluZm9bJ3cnXTsKCgkvLyBGbG93aW5nIG1vZGUKCWlmKCR5PT09bnVsbCkKCXsKCQlpZigkdGhpcy0+eSskaD4kdGhpcy0+UGFnZUJyZWFrVHJpZ2dlciAmJiAhJHRoaXMtPkluSGVhZGVyICYmICEkdGhpcy0+SW5Gb290ZXIgJiYgJHRoaXMtPkFjY2VwdFBhZ2VCcmVhaygpKQoJCXsKCQkJLy8gQXV0b21hdGljIHBhZ2UgYnJlYWsKCQkJJHgyID0gJHRoaXMtPng7CgkJCSR0aGlzLT5BZGRQYWdlKCR0aGlzLT5DdXJPcmllbnRhdGlvbiwkdGhpcy0+Q3VyUGFnZVNpemUpOwoJCQkkdGhpcy0+eCA9ICR4MjsKCQl9CgkJJHkgPSAkdGhpcy0+eTsKCQkkdGhpcy0+eSArPSAkaDsKCX0KCglpZigkeD09PW51bGwpCgkJJHggPSAkdGhpcy0+eDsKCSR0aGlzLT5fb3V0KHNwcmludGYoJ3EgJS4yRiAwIDAgJS4yRiAlLjJGICUuMkYgY20gL0klZCBEbyBRJywkdyokdGhpcy0+aywkaCokdGhpcy0+aywkeCokdGhpcy0+aywoJHRoaXMtPmgtKCR5KyRoKSkqJHRoaXMtPmssJGluZm9bJ2knXSkpOwoJaWYoJGxpbmspCgkJJHRoaXMtPkxpbmsoJHgsJHksJHcsJGgsJGxpbmspOwp9CgpmdW5jdGlvbiBHZXRYKCkKewoJLy8gR2V0IHggcG9zaXRpb24KCXJldHVybiAkdGhpcy0+eDsKfQoKZnVuY3Rpb24gU2V0WCgkeCkKewoJLy8gU2V0IHggcG9zaXRpb24KCWlmKCR4Pj0wKQoJCSR0aGlzLT54ID0gJHg7CgllbHNlCgkJJHRoaXMtPnggPSAkdGhpcy0+dyskeDsKfQoKZnVuY3Rpb24gR2V0WSgpCnsKCS8vIEdldCB5IHBvc2l0aW9uCglyZXR1cm4gJHRoaXMtPnk7Cn0KCmZ1bmN0aW9uIFNldFkoJHkpCnsKCS8vIFNldCB5IHBvc2l0aW9uIGFuZCByZXNldCB4CgkkdGhpcy0+eCA9ICR0aGlzLT5sTWFyZ2luOwoJaWYoJHk+PTApCgkJJHRoaXMtPnkgPSAkeTsKCWVsc2UKCQkkdGhpcy0+eSA9ICR0aGlzLT5oKyR5Owp9CgpmdW5jdGlvbiBTZXRYWSgkeCwgJHkpCnsKCS8vIFNldCB4IGFuZCB5IHBvc2l0aW9ucwoJJHRoaXMtPlNldFkoJHkpOwoJJHRoaXMtPlNldFgoJHgpOwp9CgpmdW5jdGlvbiBPdXRwdXQoJG5hbWU9JycsICRkZXN0PScnKQp7CgkvLyBPdXRwdXQgUERGIHRvIHNvbWUgZGVzdGluYXRpb24KCWlmKCR0aGlzLT5zdGF0ZTwzKQoJCSR0aGlzLT5DbG9zZSgpOwoJJGRlc3QgPSBzdHJ0b3VwcGVyKCRkZXN0KTsKCWlmKCRkZXN0PT0nJykgewoJCWlmKCRuYW1lPT0nJykgewoJCQkkbmFtZSA9ICdkb2MucGRmJzsKCQkJJGRlc3QgPSAnSSc7CgkJfQoJCWVsc2UKCQkJJGRlc3QgPSAnRic7Cgl9Cglzd2l0Y2goJGRlc3QpCgl7CgkJY2FzZSAnSSc6CgkJCS8vIFNlbmQgdG8gc3RhbmRhcmQgb3V0cHV0CgkJCSR0aGlzLT5fY2hlY2tvdXRwdXQoKTsKCQkJaWYoUEhQX1NBUEkhPSdjbGknKSB7CgkJCQkvLyBXZSBzZW5kIHRvIGEgYnJvd3NlcgoJCQkJaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3BkZicpOwoJCQkJaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSInLiRuYW1lLiciJyk7CgkJCQloZWFkZXIoJ0NhY2hlLUNvbnRyb2w6IHByaXZhdGUsIG1heC1hZ2U9MCwgbXVzdC1yZXZhbGlkYXRlJyk7CgkJCQloZWFkZXIoJ1ByYWdtYTogcHVibGljJyk7CgkJCX0KCQkJZWNobyAkdGhpcy0+YnVmZmVyOwoJCQlicmVhazsKCQljYXNlICdEJzoKCQkJLy8gRG93bmxvYWQgZmlsZQoJCQkkdGhpcy0+X2NoZWNrb3V0cHV0KCk7CgkJCWhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LWRvd25sb2FkJyk7CgkJCWhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IicuJG5hbWUuJyInKTsKCQkJaGVhZGVyKCdDYWNoZS1Db250cm9sOiBwcml2YXRlLCBtYXgtYWdlPTAsIG11c3QtcmV2YWxpZGF0ZScpOwoJCQloZWFkZXIoJ1ByYWdtYTogcHVibGljJyk7CgkJCWVjaG8gJHRoaXMtPmJ1ZmZlcjsKCQkJYnJlYWs7CgkJY2FzZSAnRic6CgkJCS8vIFNhdmUgdG8gbG9jYWwgZmlsZQoJCQkkZiA9IGZvcGVuKCRuYW1lLCd3YicpOwoJCQlpZighJGYpCgkJCQkkdGhpcy0+RXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgb3V0cHV0IGZpbGU6ICcuJG5hbWUpOwoJCQlmd3JpdGUoJGYsJHRoaXMtPmJ1ZmZlcixzdHJsZW4oJHRoaXMtPmJ1ZmZlcikpOwoJCQlmY2xvc2UoJGYpOwoJCQlicmVhazsKCQljYXNlICdTJzoKCQkJLy8gUmV0dXJuIGFzIGEgc3RyaW5nCgkJCXJldHVybiAkdGhpcy0+YnVmZmVyOwoJCWRlZmF1bHQ6CgkJCSR0aGlzLT5FcnJvcignSW5jb3JyZWN0IG91dHB1dCBkZXN0aW5hdGlvbjogJy4kZGVzdCk7Cgl9CglyZXR1cm4gJyc7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm90ZWN0ZWQgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmZ1bmN0aW9uIF9kb2NoZWNrcygpCnsKCS8vIENoZWNrIGF2YWlsYWJpbGl0eSBvZiAlRgoJaWYoc3ByaW50ZignJS4xRicsMS4wKSE9JzEuMCcpCgkJJHRoaXMtPkVycm9yKCdUaGlzIHZlcnNpb24gb2YgUEhQIGlzIG5vdCBzdXBwb3J0ZWQnKTsKCS8vIENoZWNrIGF2YWlsYWJpbGl0eSBvZiBtYnN0cmluZwoJJG1iID0gKGV4dGVuc2lvbl9sb2FkZWQoJ21ic3RyaW5nJykgfHwgKGZ1bmN0aW9uX2V4aXN0cygnZGwnKSAmJiBkbCgnbWJzdHJpbmcuc28nKSkpOwoJLy8gQWJvcnQgaWYgbWJzdHJpbmcgb3ZlcmxvYWRpbmcgKHVuZXhwZWN0ZWQgY3Jhc2hlcykKCWlmKCRtYiAmJiBpbmlfZ2V0KCdtYnN0cmluZy5mdW5jX292ZXJsb2FkJykgJiAyKQoJCSR0aGlzLT5FcnJvcigibWJzdHJpbmcgc3RyaW5nLWZ1bmN0aW9uIG92ZXJsb2FkaW5nIG11c3QgYmUgZGlzYWJsZWQuXG5VcGRhdGUgeW91ciBwaHAuaW5pLCAuaHRhY2Nlc3Mgb3IgaHR0cGQuY29uZiIpOwoJJHRoaXMtPmNhblR0ZiA9ICgkbWIgIT0gZmFsc2UpOwoJLy8gRW5zdXJlIHJ1bnRpbWUgbWFnaWMgcXVvdGVzIGFyZSBkaXNhYmxlZAoJaWYoZ2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKCkpCgkJQHNldF9tYWdpY19xdW90ZXNfcnVudGltZSgwKTsKfQoKZnVuY3Rpb24gX2dldGZvbnRwYXRoKCkKewoJcmV0dXJuICR0aGlzLT5mb250cGF0aDsKfQoKZnVuY3Rpb24gX2NoZWNrb3V0cHV0KCkKewoJaWYoUEhQX1NBUEkhPSdjbGknKQoJewoJCWlmKGhlYWRlcnNfc2VudCgkZmlsZSwkbGluZSkpCgkJCSR0aGlzLT5FcnJvcigiU29tZSBkYXRhIGhhcyBhbHJlYWR5IGJlZW4gb3V0cHV0LCBjYW4ndCBzZW5kIFBERiBmaWxlIChvdXRwdXQgc3RhcnRlZCBhdCAkZmlsZTokbGluZSkiKTsKCX0KCWlmKG9iX2dldF9sZW5ndGgoKSkKCXsKCQkvLyBUaGUgb3V0cHV0IGJ1ZmZlciBpcyBub3QgZW1wdHkKCQlpZihwcmVnX21hdGNoKCcvXihceEVGXHhCQlx4QkYpP1xzKiQvJyxvYl9nZXRfY29udGVudHMoKSkpCgkJewoJCQkvLyBJdCBjb250YWlucyBvbmx5IGEgVVRGLTggQk9NIGFuZC9vciB3aGl0ZXNwYWNlLCBsZXQncyBjbGVhbiBpdAoJCQlvYl9jbGVhbigpOwoJCX0KCQllbHNlCgkJCSR0aGlzLT5FcnJvcigiU29tZSBkYXRhIGhhcyBhbHJlYWR5IGJlZW4gb3V0cHV0LCBjYW4ndCBzZW5kIFBERiBmaWxlIik7Cgl9Cn0KCmZ1bmN0aW9uIF9nZXRwYWdlc2l6ZSgkc2l6ZSkKewoJaWYoaXNfc3RyaW5nKCRzaXplKSkKCXsKCQkkc2l6ZSA9IHN0cnRvbG93ZXIoJHNpemUpOwoJCWlmKCFpc3NldCgkdGhpcy0+U3RkUGFnZVNpemVzWyRzaXplXSkpCgkJCSR0aGlzLT5FcnJvcignVW5rbm93biBwYWdlIHNpemU6ICcuJHNpemUpOwoJCSRhID0gJHRoaXMtPlN0ZFBhZ2VTaXplc1skc2l6ZV07CgkJcmV0dXJuIGFycmF5KCRhWzBdLyR0aGlzLT5rLCAkYVsxXS8kdGhpcy0+ayk7Cgl9CgllbHNlCgl7CgkJaWYoJHNpemVbMF0+JHNpemVbMV0pCgkJCXJldHVybiBhcnJheSgkc2l6ZVsxXSwgJHNpemVbMF0pOwoJCWVsc2UKCQkJcmV0dXJuICRzaXplOwoJfQp9CgpmdW5jdGlvbiBfYmVnaW5wYWdlKCRvcmllbnRhdGlvbiwgJHNpemUpCnsKCSR0aGlzLT5wYWdlKys7CgkkdGhpcy0+cGFnZXNbJHRoaXMtPnBhZ2VdID0gJyc7CgkkdGhpcy0+c3RhdGUgPSAyOwoJJHRoaXMtPnggPSAkdGhpcy0+bE1hcmdpbjsKCSR0aGlzLT55ID0gJHRoaXMtPnRNYXJnaW47CgkkdGhpcy0+Rm9udEZhbWlseSA9ICcnOwoJLy8gQ2hlY2sgcGFnZSBzaXplIGFuZCBvcmllbnRhdGlvbgoJaWYoJG9yaWVudGF0aW9uPT0nJykKCQkkb3JpZW50YXRpb24gPSAkdGhpcy0+RGVmT3JpZW50YXRpb247CgllbHNlCgkJJG9yaWVudGF0aW9uID0gc3RydG91cHBlcigkb3JpZW50YXRpb25bMF0pOwoJaWYoJHNpemU9PScnKQoJCSRzaXplID0gJHRoaXMtPkRlZlBhZ2VTaXplOwoJZWxzZQoJCSRzaXplID0gJHRoaXMtPl9nZXRwYWdlc2l6ZSgkc2l6ZSk7CglpZigkb3JpZW50YXRpb24hPSR0aGlzLT5DdXJPcmllbnRhdGlvbiB8fCAkc2l6ZVswXSE9JHRoaXMtPkN1clBhZ2VTaXplWzBdIHx8ICRzaXplWzFdIT0kdGhpcy0+Q3VyUGFnZVNpemVbMV0pCgl7CgkJLy8gTmV3IHNpemUgb3Igb3JpZW50YXRpb24KCQlpZigkb3JpZW50YXRpb249PSdQJykKCQl7CgkJCSR0aGlzLT53ID0gJHNpemVbMF07CgkJCSR0aGlzLT5oID0gJHNpemVbMV07CgkJfQoJCWVsc2UKCQl7CgkJCSR0aGlzLT53ID0gJHNpemVbMV07CgkJCSR0aGlzLT5oID0gJHNpemVbMF07CgkJfQoJCSR0aGlzLT53UHQgPSAkdGhpcy0+dyokdGhpcy0+azsKCQkkdGhpcy0+aFB0ID0gJHRoaXMtPmgqJHRoaXMtPms7CgkJJHRoaXMtPlBhZ2VCcmVha1RyaWdnZXIgPSAkdGhpcy0+aC0kdGhpcy0+Yk1hcmdpbjsKCQkkdGhpcy0+Q3VyT3JpZW50YXRpb24gPSAkb3JpZW50YXRpb247CgkJJHRoaXMtPkN1clBhZ2VTaXplID0gJHNpemU7Cgl9CglpZigkb3JpZW50YXRpb24hPSR0aGlzLT5EZWZPcmllbnRhdGlvbiB8fCAkc2l6ZVswXSE9JHRoaXMtPkRlZlBhZ2VTaXplWzBdIHx8ICRzaXplWzFdIT0kdGhpcy0+RGVmUGFnZVNpemVbMV0pCgkJJHRoaXMtPlBhZ2VTaXplc1skdGhpcy0+cGFnZV0gPSBhcnJheSgkdGhpcy0+d1B0LCAkdGhpcy0+aFB0KTsKfQoKZnVuY3Rpb24gX2VuZHBhZ2UoKQp7CgkkdGhpcy0+c3RhdGUgPSAxOwp9CgpmdW5jdGlvbiBfbG9hZGZvbnQoJGZvbnRwYXRoKQp7CgkvLyBMb2FkIGEgZm9udCBkZWZpbml0aW9uIGZpbGUgZnJvbSB0aGUgZm9udCBkaXJlY3RvcnkKCWluY2x1ZGUoJGZvbnRwYXRoKTsKCSRhID0gZ2V0X2RlZmluZWRfdmFycygpOwoJaWYoaXNzZXQoJGFbJ25hbWUnXSkpCgkJcmV0dXJuICRhOwoJJHRoaXMtPkVycm9yKCdDb3VsZCBub3QgaW5jbHVkZSBmb250IGRlZmluaXRpb24gZmlsZScpOwp9CgpmdW5jdGlvbiBfZXNjYXBlKCRzKQp7CgkvLyBFc2NhcGUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHN0cmluZ3MKCXJldHVybiBzdHJfcmVwbGFjZShhcnJheSgnXFwnLCcoJywnKScsIlxyIiksIGFycmF5KCdcXFxcJywnXFwoJywnXFwpJywnXFxyJyksJHMpOwp9CgpmdW5jdGlvbiBfdGV4dHN0cmluZygkcykKewoJLy8gRm9ybWF0IGEgdGV4dCBzdHJpbmcKCXJldHVybiAnKCcuJHRoaXMtPl9lc2NhcGUoJHMpLicpJzsKfQoKLy8gQ29udmVydCBVVEYtOCB0byBVVEYtMTZCRSB3aXRoIG9wdGlvbmFsIEJPTQpmdW5jdGlvbiBfVVRGOHRvVVRGMTYoJHMsICR3aXRoQk9NPXRydWUpCnsKCSRyZXMgPSAoJHdpdGhCT00pID8gJ1x4RkVceEZGJyA6ICcnOwoJJG5iID0gc3RybGVuKCRzKTsKCSRpID0gMDsKCXdoaWxlKCRpPCRuYikKCXsKCQkkYzEgPSBvcmQoJHNbJGkrK10pOwoJCWlmKCRjMT49MjI0KQoJCXsKCQkJLy8gMy1ieXRlIGNoYXJhY3RlcgoJCQkkYzIgPSBvcmQoJHNbJGkrK10pOwoJCQkkYzMgPSBvcmQoJHNbJGkrK10pOwoJCQkkcmVzIC49IGNocigoKCRjMSAmIDB4MEYpPDw0KSArICgoJGMyICYgMHgzQyk+PjIpKTsKCQkJJHJlcyAuPSBjaHIoKCgkYzIgJiAweDAzKTw8NikgKyAoJGMzICYgMHgzRikpOwoJCX0KCQllbHNlaWYoJGMxPj0xOTIpCgkJewoJCQkvLyAyLWJ5dGUgY2hhcmFjdGVyCgkJCSRjMiA9IG9yZCgkc1skaSsrXSk7CgkJCSRyZXMgLj0gY2hyKCgkYzEgJiAweDFDKT4+Mik7CgkJCSRyZXMgLj0gY2hyKCgoJGMxICYgMHgwMyk8PDYpICsgKCRjMiAmIDB4M0YpKTsKCQl9CgkJZWxzZQoJCXsKCQkJLy8gU2luZ2xlLWJ5dGUgY2hhcmFjdGVyCgkJCSRyZXMgLj0gIlwwIi5jaHIoJGMxKTsKCQl9Cgl9CglyZXR1cm4gJHJlczsKfQoKZnVuY3Rpb24gX2RvdW5kZXJsaW5lKCR4LCAkeSwgJHR4dCkKewoJLy8gVW5kZXJsaW5lIHRleHQKCSR1cCA9ICR0aGlzLT5DdXJyZW50Rm9udFsndXAnXTsKCSR1dCA9ICR0aGlzLT5DdXJyZW50Rm9udFsndXQnXTsKCSR3ID0gJHRoaXMtPkdldFN0cmluZ1dpZHRoKCR0eHQpKyR0aGlzLT53cypzdWJzdHJfY291bnQoJHR4dCwnICcpOwoJcmV0dXJuIHNwcmludGYoJyUuMkYgJS4yRiAlLjJGICUuMkYgcmUgZicsJHgqJHRoaXMtPmssKCR0aGlzLT5oLSgkeS0kdXAvMTAwMCokdGhpcy0+Rm9udFNpemUpKSokdGhpcy0+aywkdyokdGhpcy0+aywtJHV0LzEwMDAqJHRoaXMtPkZvbnRTaXplUHQpOwp9CgpmdW5jdGlvbiBfcGFyc2VqcGcoJGZpbGUpCnsKCS8vIEV4dHJhY3QgaW5mbyBmcm9tIGEgSlBFRyBmaWxlCgkkYSA9IGdldGltYWdlc2l6ZSgkZmlsZSk7CglpZighJGEpCgkJJHRoaXMtPkVycm9yKCdNaXNzaW5nIG9yIGluY29ycmVjdCBpbWFnZSBmaWxlOiAnLiRmaWxlKTsKCWlmKCRhWzJdIT0yKQoJCSR0aGlzLT5FcnJvcignTm90IGEgSlBFRyBmaWxlOiAnLiRmaWxlKTsKCWlmKCFpc3NldCgkYVsnY2hhbm5lbHMnXSkgfHwgJGFbJ2NoYW5uZWxzJ109PTMpCgkJJGNvbHNwYWNlID0gJ0RldmljZVJHQic7CgllbHNlaWYoJGFbJ2NoYW5uZWxzJ109PTQpCgkJJGNvbHNwYWNlID0gJ0RldmljZUNNWUsnOwoJZWxzZQoJCSRjb2xzcGFjZSA9ICdEZXZpY2VHcmF5JzsKCSRicGMgPSBpc3NldCgkYVsnYml0cyddKSA/ICRhWydiaXRzJ10gOiA4OwoJJGRhdGEgPSBmaWxlX2dldF9jb250ZW50cygkZmlsZSk7CglyZXR1cm4gYXJyYXkoJ3cnPT4kYVswXSwgJ2gnPT4kYVsxXSwgJ2NzJz0+JGNvbHNwYWNlLCAnYnBjJz0+JGJwYywgJ2YnPT4nRENURGVjb2RlJywgJ2RhdGEnPT4kZGF0YSk7Cn0KCmZ1bmN0aW9uIF9wYXJzZXBuZygkZmlsZSkKewoJLy8gRXh0cmFjdCBpbmZvIGZyb20gYSBQTkcgZmlsZQoJJGYgPSBmb3BlbigkZmlsZSwncmInKTsKCWlmKCEkZikKCQkkdGhpcy0+RXJyb3IoJ0NhblwndCBvcGVuIGltYWdlIGZpbGU6ICcuJGZpbGUpOwoJJGluZm8gPSAkdGhpcy0+X3BhcnNlcG5nc3RyZWFtKCRmLCRmaWxlKTsKCWZjbG9zZSgkZik7CglyZXR1cm4gJGluZm87Cn0KCmZ1bmN0aW9uIF9wYXJzZXBuZ3N0cmVhbSgkZiwgJGZpbGUpCnsKCS8vIENoZWNrIHNpZ25hdHVyZQoJaWYoJHRoaXMtPl9yZWFkc3RyZWFtKCRmLDgpIT1jaHIoMTM3KS4nUE5HJy5jaHIoMTMpLmNocigxMCkuY2hyKDI2KS5jaHIoMTApKQoJCSR0aGlzLT5FcnJvcignTm90IGEgUE5HIGZpbGU6ICcuJGZpbGUpOwoKCS8vIFJlYWQgaGVhZGVyIGNodW5rCgkkdGhpcy0+X3JlYWRzdHJlYW0oJGYsNCk7CglpZigkdGhpcy0+X3JlYWRzdHJlYW0oJGYsNCkhPSdJSERSJykKCQkkdGhpcy0+RXJyb3IoJ0luY29ycmVjdCBQTkcgZmlsZTogJy4kZmlsZSk7CgkkdyA9ICR0aGlzLT5fcmVhZGludCgkZik7CgkkaCA9ICR0aGlzLT5fcmVhZGludCgkZik7CgkkYnBjID0gb3JkKCR0aGlzLT5fcmVhZHN0cmVhbSgkZiwxKSk7CglpZigkYnBjPjgpCgkJJHRoaXMtPkVycm9yKCcxNi1iaXQgZGVwdGggbm90IHN1cHBvcnRlZDogJy4kZmlsZSk7CgkkY3QgPSBvcmQoJHRoaXMtPl9yZWFkc3RyZWFtKCRmLDEpKTsKCWlmKCRjdD09MCB8fCAkY3Q9PTQpCgkJJGNvbHNwYWNlID0gJ0RldmljZUdyYXknOwoJZWxzZWlmKCRjdD09MiB8fCAkY3Q9PTYpCgkJJGNvbHNwYWNlID0gJ0RldmljZVJHQic7CgllbHNlaWYoJGN0PT0zKQoJCSRjb2xzcGFjZSA9ICdJbmRleGVkJzsKCWVsc2UKCQkkdGhpcy0+RXJyb3IoJ1Vua25vd24gY29sb3IgdHlwZTogJy4kZmlsZSk7CglpZihvcmQoJHRoaXMtPl9yZWFkc3RyZWFtKCRmLDEpKSE9MCkKCQkkdGhpcy0+RXJyb3IoJ1Vua25vd24gY29tcHJlc3Npb24gbWV0aG9kOiAnLiRmaWxlKTsKCWlmKG9yZCgkdGhpcy0+X3JlYWRzdHJlYW0oJGYsMSkpIT0wKQoJCSR0aGlzLT5FcnJvcignVW5rbm93biBmaWx0ZXIgbWV0aG9kOiAnLiRmaWxlKTsKCWlmKG9yZCgkdGhpcy0+X3JlYWRzdHJlYW0oJGYsMSkpIT0wKQoJCSR0aGlzLT5FcnJvcignSW50ZXJsYWNpbmcgbm90IHN1cHBvcnRlZDogJy4kZmlsZSk7CgkkdGhpcy0+X3JlYWRzdHJlYW0oJGYsNCk7CgkkZHAgPSAnL1ByZWRpY3RvciAxNSAvQ29sb3JzICcuKCRjb2xzcGFjZT09J0RldmljZVJHQicgPyAzIDogMSkuJyAvQml0c1BlckNvbXBvbmVudCAnLiRicGMuJyAvQ29sdW1ucyAnLiR3OwoKCS8vIFNjYW4gY2h1bmtzIGxvb2tpbmcgZm9yIHBhbGV0dGUsIHRyYW5zcGFyZW5jeSBhbmQgaW1hZ2UgZGF0YQoJJHBhbCA9ICcnOwoJJHRybnMgPSAnJzsKCSRkYXRhID0gJyc7CglkbyB7CgkJJG4gPSAkdGhpcy0+X3JlYWRpbnQoJGYpOwoJCSR0eXBlID0gJHRoaXMtPl9yZWFkc3RyZWFtKCRmLDQpOwoJCWlmKCR0eXBlPT0nUExURScpIHsKCQkJLy8gUmVhZCBwYWxldHRlCgkJCSRwYWwgPSAkdGhpcy0+X3JlYWRzdHJlYW0oJGYsJG4pOwoJCQkkdGhpcy0+X3JlYWRzdHJlYW0oJGYsNCk7CgkJfSBlbHNlaWYoJHR5cGU9PSd0Uk5TJykgewoJCQkvLyBSZWFkIHRyYW5zcGFyZW5jeSBpbmZvCgkJCSR0ID0gJHRoaXMtPl9yZWFkc3RyZWFtKCRmLCRuKTsKCQkJaWYoJGN0PT0wKQoJCQkJJHRybnMgPSBhcnJheShvcmQoc3Vic3RyKCR0LDEsMSkpKTsKCQkJZWxzZWlmKCRjdD09MikKCQkJCSR0cm5zID0gYXJyYXkob3JkKHN1YnN0cigkdCwxLDEpKSwgb3JkKHN1YnN0cigkdCwzLDEpKSwgb3JkKHN1YnN0cigkdCw1LDEpKSk7CgkJCWVsc2UKCQkJewoJCQkJJHBvcyA9IHN0cnBvcygkdCxjaHIoMCkpOwoJCQkJaWYoJHBvcyE9PWZhbHNlKQoJCQkJCSR0cm5zID0gYXJyYXkoJHBvcyk7CgkJCX0KCQkJJHRoaXMtPl9yZWFkc3RyZWFtKCRmLDQpOwoJCX0gZWxzZWlmKCR0eXBlPT0nSURBVCcpIHsKCQkJLy8gUmVhZCBpbWFnZSBkYXRhIGJsb2NrCgkJCSRkYXRhIC49ICR0aGlzLT5fcmVhZHN0cmVhbSgkZiwkbik7CgkJCSR0aGlzLT5fcmVhZHN0cmVhbSgkZiw0KTsKCQl9CgkJZWxzZWlmKCR0eXBlPT0nSUVORCcpCgkJCWJyZWFrOwoJCWVsc2UKCQkJJHRoaXMtPl9yZWFkc3RyZWFtKCRmLCRuKzQpOwoJfQoJd2hpbGUoJG4pOwoKCWlmKCRjb2xzcGFjZT09J0luZGV4ZWQnICYmIGVtcHR5KCRwYWwpKQoJCSR0aGlzLT5FcnJvcignTWlzc2luZyBwYWxldHRlIGluICcuJGZpbGUpOwoJJGluZm8gPSBhcnJheSgndyc9PiR3LCAnaCc9PiRoLCAnY3MnPT4kY29sc3BhY2UsICdicGMnPT4kYnBjLCAnZic9PidGbGF0ZURlY29kZScsICdkcCc9PiRkcCwgJ3BhbCc9PiRwYWwsICd0cm5zJz0+JHRybnMpOwoJaWYoJGN0Pj00KSB7CgkJLy8gRXh0cmFjdCBhbHBoYSBjaGFubmVsCgkJaWYoIWZ1bmN0aW9uX2V4aXN0cygnZ3p1bmNvbXByZXNzJykpCgkJCSR0aGlzLT5FcnJvcignWmxpYiBub3QgYXZhaWxhYmxlLCBjYW5cJ3QgaGFuZGxlIGFscGhhIGNoYW5uZWw6ICcuJGZpbGUpOwoJCSRkYXRhID0gZ3p1bmNvbXByZXNzKCRkYXRhKTsKCQkkY29sb3IgPSAnJzsKCQkkYWxwaGEgPSAnJzsKCQlpZigkY3Q9PTQpIHsKCQkJLy8gR3JheSBpbWFnZQoJCQkkbGVuID0gMiokdzsKCQkJZm9yKCRpPTA7JGk8JGg7JGkrKykgewoJCQkJJHBvcyA9ICgxKyRsZW4pKiRpOwoJCQkJJGNvbG9yIC49ICRkYXRhWyRwb3NdOwoJCQkJJGFscGhhIC49ICRkYXRhWyRwb3NdOwoJCQkJJGxpbmUgPSBzdWJzdHIoJGRhdGEsJHBvcysxLCRsZW4pOwoJCQkJJGNvbG9yIC49IHByZWdfcmVwbGFjZSgnLyguKS4vcycsJyQxJywkbGluZSk7CgkJCQkkYWxwaGEgLj0gcHJlZ19yZXBsYWNlKCcvLiguKS9zJywnJDEnLCRsaW5lKTsKCQkJfQoJCX0gZWxzZSB7CgkJCS8vIFJHQiBpbWFnZQoJCQkkbGVuID0gNCokdzsKCQkJZm9yKCRpPTA7JGk8JGg7JGkrKykgewoJCQkJJHBvcyA9ICgxKyRsZW4pKiRpOwoJCQkJJGNvbG9yIC49ICRkYXRhWyRwb3NdOwoJCQkJJGFscGhhIC49ICRkYXRhWyRwb3NdOwoJCQkJJGxpbmUgPSBzdWJzdHIoJGRhdGEsJHBvcysxLCRsZW4pOwoJCQkJJGNvbG9yIC49IHByZWdfcmVwbGFjZSgnLyguezN9KS4vcycsJyQxJywkbGluZSk7CgkJCQkkYWxwaGEgLj0gcHJlZ19yZXBsYWNlKCcvLnszfSguKS9zJywnJDEnLCRsaW5lKTsKCQkJfQoJCX0KCQl1bnNldCgkZGF0YSk7CgkJJGRhdGEgPSBnemNvbXByZXNzKCRjb2xvcik7CgkJJGluZm9bJ3NtYXNrJ10gPSBnemNvbXByZXNzKCRhbHBoYSk7CgkJaWYoJHRoaXMtPlBERlZlcnNpb248JzEuNCcpCgkJCSR0aGlzLT5QREZWZXJzaW9uID0gJzEuNCc7Cgl9CgkkaW5mb1snZGF0YSddID0gJGRhdGE7CglyZXR1cm4gJGluZm87Cn0KCmZ1bmN0aW9uIF9yZWFkc3RyZWFtKCRmLCAkbikKewoJLy8gUmVhZCBuIGJ5dGVzIGZyb20gc3RyZWFtCgkkcmVzID0gJyc7Cgl3aGlsZSgkbj4wICYmICFmZW9mKCRmKSkgewoJCSRzID0gZnJlYWQoJGYsJG4pOwoJCWlmKCRzPT09ZmFsc2UpCgkJCSR0aGlzLT5FcnJvcignRXJyb3Igd2hpbGUgcmVhZGluZyBzdHJlYW0nKTsKCQkkbiAtPSBzdHJsZW4oJHMpOwoJCSRyZXMgLj0gJHM7Cgl9CglpZigkbj4wKQoJCSR0aGlzLT5FcnJvcignVW5leHBlY3RlZCBlbmQgb2Ygc3RyZWFtJyk7CglyZXR1cm4gJHJlczsKfQoKZnVuY3Rpb24gX3JlYWRpbnQoJGYpCnsKCS8vIFJlYWQgYSA0LWJ5dGUgaW50ZWdlciBmcm9tIHN0cmVhbQoJJGEgPSB1bnBhY2soJ05pJywkdGhpcy0+X3JlYWRzdHJlYW0oJGYsNCkpOwoJcmV0dXJuICRhWydpJ107Cn0KCmZ1bmN0aW9uIF9wYXJzZWdpZigkZmlsZSkKewoJLy8gRXh0cmFjdCBpbmZvIGZyb20gYSBHSUYgZmlsZSAodmlhIFBORyBjb252ZXJzaW9uKQoJaWYoIWZ1bmN0aW9uX2V4aXN0cygnaW1hZ2VwbmcnKSkKCQkkdGhpcy0+RXJyb3IoJ0dEIGV4dGVuc2lvbiBpcyByZXF1aXJlZCBmb3IgR0lGIHN1cHBvcnQnKTsKCWlmKCFmdW5jdGlvbl9leGlzdHMoJ2ltYWdlY3JlYXRlZnJvbWdpZicpKQoJCSR0aGlzLT5FcnJvcignR0QgaGFzIG5vIEdJRiByZWFkIHN1cHBvcnQnKTsKCSRpbSA9IGltYWdlY3JlYXRlZnJvbWdpZigkZmlsZSk7CglpZighJGltKQoJCSR0aGlzLT5FcnJvcignTWlzc2luZyBvciBpbmNvcnJlY3QgaW1hZ2UgZmlsZTogJy4kZmlsZSk7CglpbWFnZWludGVybGFjZSgkaW0sMCk7CgkkZiA9IEBmb3BlbigncGhwOi8vdGVtcCcsJ3JiKycpOwoJaWYoJGYpIHsKCQkvLyBQZXJmb3JtIGNvbnZlcnNpb24gaW4gbWVtb3J5CgkJb2Jfc3RhcnQoKTsKCQlpbWFnZXBuZygkaW0pOwoJCSRkYXRhID0gb2JfZ2V0X2NsZWFuKCk7CgkJaW1hZ2VkZXN0cm95KCRpbSk7CgkJZndyaXRlKCRmLCRkYXRhKTsKCQlyZXdpbmQoJGYpOwoJCSRpbmZvID0gJHRoaXMtPl9wYXJzZXBuZ3N0cmVhbSgkZiwkZmlsZSk7CgkJZmNsb3NlKCRmKTsKCX0gZWxzZSB7CgkJLy8gVXNlIHRlbXBvcmFyeSBmaWxlCgkJJHRtcCA9IHRlbXBuYW0oJy4nLCdnaWYnKTsKCQlpZighJHRtcCkKCQkJJHRoaXMtPkVycm9yKCdVbmFibGUgdG8gY3JlYXRlIGEgdGVtcG9yYXJ5IGZpbGUnKTsKCQlpZighaW1hZ2VwbmcoJGltLCR0bXApKQoJCQkkdGhpcy0+RXJyb3IoJ0Vycm9yIHdoaWxlIHNhdmluZyB0byB0ZW1wb3JhcnkgZmlsZScpOwoJCWltYWdlZGVzdHJveSgkaW0pOwoJCSRpbmZvID0gJHRoaXMtPl9wYXJzZXBuZygkdG1wKTsKCQl1bmxpbmsoJHRtcCk7Cgl9CglyZXR1cm4gJGluZm87Cn0KCmZ1bmN0aW9uIF9uZXdvYmooKQp7CgkvLyBCZWdpbiBhIG5ldyBvYmplY3QKCSR0aGlzLT5uKys7CgkkdGhpcy0+b2Zmc2V0c1skdGhpcy0+bl0gPSBzdHJsZW4oJHRoaXMtPmJ1ZmZlcik7CgkkdGhpcy0+X291dCgkdGhpcy0+bi4nIDAgb2JqJyk7Cn0KCmZ1bmN0aW9uIF9wdXRzdHJlYW0oJHMpCnsKCSR0aGlzLT5fb3V0KCdzdHJlYW0nKTsKCSR0aGlzLT5fb3V0KCRzKTsKCSR0aGlzLT5fb3V0KCdlbmRzdHJlYW0nKTsKfQoKZnVuY3Rpb24gX291dCgkcykKewoJLy8gQWRkIGEgbGluZSB0byB0aGUgZG9jdW1lbnQKCWlmKCR0aGlzLT5zdGF0ZT09MikKCQkkdGhpcy0+cGFnZXNbJHRoaXMtPnBhZ2VdIC49ICRzLiJcbiI7CgllbHNlCgkJJHRoaXMtPmJ1ZmZlciAuPSAkcy4iXG4iOwp9CgpmdW5jdGlvbiBfcHV0cGFnZXMoKQp7CgkkbmIgPSAkdGhpcy0+cGFnZTsKCWlmKCFlbXB0eSgkdGhpcy0+QWxpYXNOYlBhZ2VzKSkgewoJCS8vIFJlcGxhY2UgbnVtYmVyIG9mIHBhZ2VzIGluIGZvbnRzIHVzaW5nIHN1YnNldHMKCQkkYWxpYXMgPSAkdGhpcy0+X1VURjh0b1VURjE2KCR0aGlzLT5BbGlhc05iUGFnZXMsZmFsc2UpOwoJCSRyID0gJHRoaXMtPl9VVEY4dG9VVEYxNigiJG5iIixmYWxzZSk7CgkJZm9yKCRuPTE7JG48PSRuYjskbisrKQoJCQkkdGhpcy0+cGFnZXNbJG5dID0gc3RyX3JlcGxhY2UoJGFsaWFzLCRyLCR0aGlzLT5wYWdlc1skbl0pOwoJCS8vIE5vdyByZXBlYXQgZm9yIG5vIHBhZ2VzIGluIG5vbi1zdWJzZXQgZm9udHMKCQlmb3IoJG49MTskbjw9JG5iOyRuKyspCgkJCSR0aGlzLT5wYWdlc1skbl0gPSBzdHJfcmVwbGFjZSgkdGhpcy0+QWxpYXNOYlBhZ2VzLCRuYiwkdGhpcy0+cGFnZXNbJG5dKTsKCX0KCWlmKCR0aGlzLT5EZWZPcmllbnRhdGlvbj09J1AnKSB7CgkJJHdQdCA9ICR0aGlzLT5EZWZQYWdlU2l6ZVswXSokdGhpcy0+azsKCQkkaFB0ID0gJHRoaXMtPkRlZlBhZ2VTaXplWzFdKiR0aGlzLT5rOwoJfSBlbHNlIHsKCQkkd1B0ID0gJHRoaXMtPkRlZlBhZ2VTaXplWzFdKiR0aGlzLT5rOwoJCSRoUHQgPSAkdGhpcy0+RGVmUGFnZVNpemVbMF0qJHRoaXMtPms7Cgl9CgkkZmlsdGVyID0gKCR0aGlzLT5jb21wcmVzcykgPyAnL0ZpbHRlciAvRmxhdGVEZWNvZGUgJyA6ICcnOwoJZm9yKCRuPTE7JG48PSRuYjskbisrKSB7CgkJLy8gUGFnZQoJCSR0aGlzLT5fbmV3b2JqKCk7CgkJJHRoaXMtPl9vdXQoJzw8L1R5cGUgL1BhZ2UnKTsKCQkkdGhpcy0+X291dCgnL1BhcmVudCAxIDAgUicpOwoJCWlmKGlzc2V0KCR0aGlzLT5QYWdlU2l6ZXNbJG5dKSkKCQkJJHRoaXMtPl9vdXQoc3ByaW50ZignL01lZGlhQm94IFswIDAgJS4yRiAlLjJGXScsJHRoaXMtPlBhZ2VTaXplc1skbl1bMF0sJHRoaXMtPlBhZ2VTaXplc1skbl1bMV0pKTsKCQkkdGhpcy0+X291dCgnL1Jlc291cmNlcyAyIDAgUicpOwoJCWlmKGlzc2V0KCR0aGlzLT5QYWdlTGlua3NbJG5dKSkgewoJCQkvLyBMaW5rcwoJCQkkYW5ub3RzID0gJy9Bbm5vdHMgWyc7CgkJCWZvcmVhY2goJHRoaXMtPlBhZ2VMaW5rc1skbl0gYXMgJHBsKQoJCQl7CgkJCQkkcmVjdCA9IHNwcmludGYoJyUuMkYgJS4yRiAlLjJGICUuMkYnLCRwbFswXSwkcGxbMV0sJHBsWzBdKyRwbFsyXSwkcGxbMV0tJHBsWzNdKTsKCQkJCSRhbm5vdHMgLj0gJzw8L1R5cGUgL0Fubm90IC9TdWJ0eXBlIC9MaW5rIC9SZWN0IFsnLiRyZWN0LiddIC9Cb3JkZXIgWzAgMCAwXSAnOwoJCQkJaWYoaXNfc3RyaW5nKCRwbFs0XSkpCgkJCQkJJGFubm90cyAuPSAnL0EgPDwvUyAvVVJJIC9VUkkgJy4kdGhpcy0+X3RleHRzdHJpbmcoJHBsWzRdKS4nPj4+Pic7CgkJCQllbHNlIHsKCQkJCQkkbCA9ICR0aGlzLT5saW5rc1skcGxbNF1dOwoJCQkJCSRoID0gaXNzZXQoJHRoaXMtPlBhZ2VTaXplc1skbFswXV0pID8gJHRoaXMtPlBhZ2VTaXplc1skbFswXV1bMV0gOiAkaFB0OwoJCQkJCSRhbm5vdHMgLj0gc3ByaW50ZignL0Rlc3QgWyVkIDAgUiAvWFlaIDAgJS4yRiBudWxsXT4+JywxKzIqJGxbMF0sJGgtJGxbMV0qJHRoaXMtPmspOwoJCQkJfQoJCQl9CgkJCSR0aGlzLT5fb3V0KCRhbm5vdHMuJ10nKTsKCQl9CgkJaWYoJHRoaXMtPlBERlZlcnNpb24+JzEuMycpCgkJCSR0aGlzLT5fb3V0KCcvR3JvdXAgPDwvVHlwZSAvR3JvdXAgL1MgL1RyYW5zcGFyZW5jeSAvQ1MgL0RldmljZVJHQj4+Jyk7CgkJJHRoaXMtPl9vdXQoJy9Db250ZW50cyAnLigkdGhpcy0+bisxKS4nIDAgUj4+Jyk7CgkJJHRoaXMtPl9vdXQoJ2VuZG9iaicpOwoJCS8vIFBhZ2UgY29udGVudAoJCSRwID0gKCR0aGlzLT5jb21wcmVzcykgPyBnemNvbXByZXNzKCR0aGlzLT5wYWdlc1skbl0pIDogJHRoaXMtPnBhZ2VzWyRuXTsKCQkkdGhpcy0+X25ld29iaigpOwoJCSR0aGlzLT5fb3V0KCc8PCcuJGZpbHRlci4nL0xlbmd0aCAnLnN0cmxlbigkcCkuJz4+Jyk7CgkJJHRoaXMtPl9wdXRzdHJlYW0oJHApOwoJCSR0aGlzLT5fb3V0KCdlbmRvYmonKTsKCX0KCS8vIFBhZ2VzIHJvb3QKCSR0aGlzLT5vZmZzZXRzWzFdID0gc3RybGVuKCR0aGlzLT5idWZmZXIpOwoJJHRoaXMtPl9vdXQoJzEgMCBvYmonKTsKCSR0aGlzLT5fb3V0KCc8PC9UeXBlIC9QYWdlcycpOwoJJGtpZHMgPSAnL0tpZHMgWyc7Cglmb3IoJGk9MDskaTwkbmI7JGkrKykKCQkka2lkcyAuPSAoMysyKiRpKS4nIDAgUiAnOwoJJHRoaXMtPl9vdXQocnRyaW0oJGtpZHMsJyAnKS4nXScpOwoJJHRoaXMtPl9vdXQoJy9Db3VudCAnLiRuYik7CgkkdGhpcy0+X291dChzcHJpbnRmKCcvTWVkaWFCb3ggWzAgMCAlLjJGICUuMkZdJywkd1B0LCRoUHQpKTsKCSR0aGlzLT5fb3V0KCc+PicpOwoJJHRoaXMtPl9vdXQoJ2VuZG9iaicpOwp9CgpmdW5jdGlvbiBfcHV0Zm9udHMoKQp7CgkkbmY9JHRoaXMtPm47Cglmb3JlYWNoKCR0aGlzLT5kaWZmcyBhcyAkZGlmZikgewoJCS8vIEVuY29kaW5ncwoJCSR0aGlzLT5fbmV3b2JqKCk7CgkJJHRoaXMtPl9vdXQoJzw8L1R5cGUgL0VuY29kaW5nIC9CYXNlRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZyAvRGlmZmVyZW5jZXMgWycuJGRpZmYuJ10+PicpOwoJCSR0aGlzLT5fb3V0KCdlbmRvYmonKTsKCX0KCWZvcmVhY2goJHRoaXMtPkZvbnRGaWxlcyBhcyAkZmlsZT0+JGluZm8pIHsKCSAgIGlmICghaXNzZXQoJGluZm9bJ3R5cGUnXSkgfHwgJGluZm9bJ3R5cGUnXSE9J1RURicpIHsKCQkvLyBGb250IGZpbGUgZW1iZWRkaW5nCgkJJHRoaXMtPl9uZXdvYmooKTsKCQkkdGhpcy0+Rm9udEZpbGVzWyRmaWxlXVsnbiddPSR0aGlzLT5uOwoJCSRmb250PScnOwoJCSRmPWZvcGVuKCR0aGlzLT5mb250cGF0aC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRmaWxlLCdyYicsMSk7CgkJaWYoISRmKQoJCQkkdGhpcy0+RXJyb3IoJ0ZvbnQgZmlsZSBub3QgZm91bmQnKTsKCQl3aGlsZSghZmVvZigkZikpCgkJCSRmb250Lj1mcmVhZCgkZiw4MTkyKTsKCQlmY2xvc2UoJGYpOwoJCSRjb21wcmVzc2VkPShzdWJzdHIoJGZpbGUsLTIpPT0nLnonKTsKCQlpZighJGNvbXByZXNzZWQgJiYgaXNzZXQoJGluZm9bJ2xlbmd0aDInXSkpIHsKCQkJJGhlYWRlcj0ob3JkKCRmb250WzBdKT09MTI4KTsKCQkJaWYoJGhlYWRlcikgewoJCQkJLy8gU3RyaXAgZmlyc3QgYmluYXJ5IGhlYWRlcgoJCQkJJGZvbnQ9c3Vic3RyKCRmb250LDYpOwoJCQl9CgkJCWlmKCRoZWFkZXIgJiYgb3JkKCRmb250WyRpbmZvWydsZW5ndGgxJ11dKT09MTI4KSB7CgkJCQkvLyBTdHJpcCBzZWNvbmQgYmluYXJ5IGhlYWRlcgoJCQkJJGZvbnQ9c3Vic3RyKCRmb250LDAsJGluZm9bJ2xlbmd0aDEnXSkuc3Vic3RyKCRmb250LCRpbmZvWydsZW5ndGgxJ10rNik7CgkJCX0KCQl9CgkJJHRoaXMtPl9vdXQoJzw8L0xlbmd0aCAnLnN0cmxlbigkZm9udCkpOwoJCWlmKCRjb21wcmVzc2VkKQoJCQkkdGhpcy0+X291dCgnL0ZpbHRlciAvRmxhdGVEZWNvZGUnKTsKCQkkdGhpcy0+X291dCgnL0xlbmd0aDEgJy4kaW5mb1snbGVuZ3RoMSddKTsKCQlpZihpc3NldCgkaW5mb1snbGVuZ3RoMiddKSkKCQkJJHRoaXMtPl9vdXQoJy9MZW5ndGgyICcuJGluZm9bJ2xlbmd0aDInXS4nIC9MZW5ndGgzIDAnKTsKCQkkdGhpcy0+X291dCgnPj4nKTsKCQkkdGhpcy0+X3B1dHN0cmVhbSgkZm9udCk7CgkJJHRoaXMtPl9vdXQoJ2VuZG9iaicpOwoJICAgfQoJfQoJZm9yZWFjaCgkdGhpcy0+Zm9udHMgYXMgJGs9PiRmb250KSB7CgkJLy8gRm9udCBvYmplY3RzCgkJLy8kdGhpcy0+Zm9udHNbJGtdWyduJ109JHRoaXMtPm4rMTsKCQkkdHlwZSA9ICRmb250Wyd0eXBlJ107CgkJJG5hbWUgPSAkZm9udFsnbmFtZSddOwoJCWlmKCR0eXBlPT0nQ29yZScpIHsKCQkJLy8gU3RhbmRhcmQgZm9udAoJCQkkdGhpcy0+Zm9udHNbJGtdWyduJ109JHRoaXMtPm4rMTsKCQkJJHRoaXMtPl9uZXdvYmooKTsKCQkJJHRoaXMtPl9vdXQoJzw8L1R5cGUgL0ZvbnQnKTsKCQkJJHRoaXMtPl9vdXQoJy9CYXNlRm9udCAvJy4kbmFtZSk7CgkJCSR0aGlzLT5fb3V0KCcvU3VidHlwZSAvVHlwZTEnKTsKCQkJaWYoJG5hbWUhPSdTeW1ib2wnICYmICRuYW1lIT0nWmFwZkRpbmdiYXRzJykKCQkJCSR0aGlzLT5fb3V0KCcvRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZycpOwoJCQkkdGhpcy0+X291dCgnPj4nKTsKCQkJJHRoaXMtPl9vdXQoJ2VuZG9iaicpOwoJCX0gZWxzZWlmKCR0eXBlPT0nVHlwZTEnIHx8ICR0eXBlPT0nVHJ1ZVR5cGUnKSB7CgkJCS8vIEFkZGl0aW9uYWwgVHlwZTEgb3IgVHJ1ZVR5cGUgZm9udAoJCQkkdGhpcy0+Zm9udHNbJGtdWyduJ109JHRoaXMtPm4rMTsKCQkJJHRoaXMtPl9uZXdvYmooKTsKCQkJJHRoaXMtPl9vdXQoJzw8L1R5cGUgL0ZvbnQnKTsKCQkJJHRoaXMtPl9vdXQoJy9CYXNlRm9udCAvJy4kbmFtZSk7CgkJCSR0aGlzLT5fb3V0KCcvU3VidHlwZSAvJy4kdHlwZSk7CgkJCSR0aGlzLT5fb3V0KCcvRmlyc3RDaGFyIDMyIC9MYXN0Q2hhciAyNTUnKTsKCQkJJHRoaXMtPl9vdXQoJy9XaWR0aHMgJy4oJHRoaXMtPm4rMSkuJyAwIFInKTsKCQkJJHRoaXMtPl9vdXQoJy9Gb250RGVzY3JpcHRvciAnLigkdGhpcy0+bisyKS4nIDAgUicpOwoJCQlpZigkZm9udFsnZW5jJ10pIHsKCQkJCWlmKGlzc2V0KCRmb250WydkaWZmJ10pKQoJCQkJCSR0aGlzLT5fb3V0KCcvRW5jb2RpbmcgJy4oJG5mKyRmb250WydkaWZmJ10pLicgMCBSJyk7CgkJCQllbHNlCgkJCQkJJHRoaXMtPl9vdXQoJy9FbmNvZGluZyAvV2luQW5zaUVuY29kaW5nJyk7CgkJCX0KCQkJJHRoaXMtPl9vdXQoJz4+Jyk7CgkJCSR0aGlzLT5fb3V0KCdlbmRvYmonKTsKCQkJLy8gV2lkdGhzCgkJCSR0aGlzLT5fbmV3b2JqKCk7CgkJCSRjdz0mJGZvbnRbJ2N3J107CgkJCSRzPSdbJzsKCQkJZm9yKCRpPTMyOyRpPD0yNTU7JGkrKykKCQkJCSRzLj0kY3dbY2hyKCRpKV0uJyAnOwoJCQkkdGhpcy0+X291dChydHJpbSgkcywnICcpLiddJyk7CgkJCSR0aGlzLT5fb3V0KCdlbmRvYmonKTsKCQkJLy8gRGVzY3JpcHRvcgoJCQkkdGhpcy0+X25ld29iaigpOwoJCQkkcz0nPDwvVHlwZSAvRm9udERlc2NyaXB0b3IgL0ZvbnROYW1lIC8nLiRuYW1lOwoJCQlmb3JlYWNoKCRmb250WydkZXNjJ10gYXMgJGs9PiR2KQoJCQkJJHMuPScgLycuJGsuJyAnLiR2OwoJCQkkZmlsZT0kZm9udFsnZmlsZSddOwoJCQlpZigkZmlsZSkKCQkJCSRzLj0nIC9Gb250RmlsZScuKCR0eXBlPT0nVHlwZTEnID8gJycgOiAnMicpLicgJy4kdGhpcy0+Rm9udEZpbGVzWyRmaWxlXVsnbiddLicgMCBSJzsKCQkJJHRoaXMtPl9vdXQoJHMuJz4+Jyk7CgkJCSR0aGlzLT5fb3V0KCdlbmRvYmonKTsKCQl9IGVsc2UgaWYgKCR0eXBlPT0nVFRGJykgewoJCQkvLyBUcnVlVHlwZSBlbWJlZGRlZCBTVUJTRVRTIG9yIEZVTEwKCQkJJHRoaXMtPmZvbnRzWyRrXVsnbiddPSR0aGlzLT5uKzE7CgkJCXJlcXVpcmVfb25jZSgkdGhpcy0+dW5pZm9udHBhdGguRElSRUNUT1JZX1NFUEFSQVRPUi4ndHRmb250cy5waHAnKTsKCQkJJHR0ZiA9IG5ldyBUVEZvbnRGaWxlKCk7CgkJCSRmb250bmFtZSA9ICdNUERGQUEnLicrJy4kZm9udFsnbmFtZSddOwoJCQkkc3Vic2V0ID0gJGZvbnRbJ3N1YnNldCddOwoJCQl1bnNldCgkc3Vic2V0WzBdKTsKCQkJJHR0Zm9udHN0cmVhbSA9ICR0dGYtPm1ha2VTdWJzZXQoJGZvbnRbJ3R0ZmZpbGUnXSwgJHN1YnNldCk7CgkJCSR0dGZvbnRzaXplID0gc3RybGVuKCR0dGZvbnRzdHJlYW0pOwoJCQkkZm9udHN0cmVhbSA9IGd6Y29tcHJlc3MoJHR0Zm9udHN0cmVhbSk7CgkJCSRjb2RlVG9HbHlwaCA9ICR0dGYtPmNvZGVUb0dseXBoOwoJCQl1bnNldCgkY29kZVRvR2x5cGhbMF0pOwoKCQkJLy8gVHlwZTAgRm9udAoJCQkvLyBBIGNvbXBvc2l0ZSBmb250IC0gYSBmb250IGNvbXBvc2VkIG9mIG90aGVyIGZvbnRzLCBvcmdhbml6ZWQgaGllcmFyY2hpY2FsbHkKCQkJJHRoaXMtPl9uZXdvYmooKTsKCQkJJHRoaXMtPl9vdXQoJzw8L1R5cGUgL0ZvbnQnKTsKCQkJJHRoaXMtPl9vdXQoJy9TdWJ0eXBlIC9UeXBlMCcpOwoJCQkkdGhpcy0+X291dCgnL0Jhc2VGb250IC8nLiRmb250bmFtZSk7CgkJCSR0aGlzLT5fb3V0KCcvRW5jb2RpbmcgL0lkZW50aXR5LUgnKTsgCgkJCSR0aGlzLT5fb3V0KCcvRGVzY2VuZGFudEZvbnRzIFsnLigkdGhpcy0+biArIDEpLicgMCBSXScpOwoJCQkkdGhpcy0+X291dCgnL1RvVW5pY29kZSAnLigkdGhpcy0+biArIDIpLicgMCBSJyk7CgkJCSR0aGlzLT5fb3V0KCc+PicpOwoJCQkkdGhpcy0+X291dCgnZW5kb2JqJyk7CgoJCQkvLyBDSURGb250VHlwZTIKCQkJLy8gQSBDSURGb250IHdob3NlIGdseXBoIGRlc2NyaXB0aW9ucyBhcmUgYmFzZWQgb24gVHJ1ZVR5cGUgZm9udCB0ZWNobm9sb2d5CgkJCSR0aGlzLT5fbmV3b2JqKCk7CgkJCSR0aGlzLT5fb3V0KCc8PC9UeXBlIC9Gb250Jyk7CgkJCSR0aGlzLT5fb3V0KCcvU3VidHlwZSAvQ0lERm9udFR5cGUyJyk7CgkJCSR0aGlzLT5fb3V0KCcvQmFzZUZvbnQgLycuJGZvbnRuYW1lLicnKTsKCQkJJHRoaXMtPl9vdXQoJy9DSURTeXN0ZW1JbmZvICcuKCR0aGlzLT5uICsgMikuJyAwIFInKTsgCgkJCSR0aGlzLT5fb3V0KCcvRm9udERlc2NyaXB0b3IgJy4oJHRoaXMtPm4gKyAzKS4nIDAgUicpOwoJCQlpZiAoaXNzZXQoJGZvbnRbJ2Rlc2MnXVsnTWlzc2luZ1dpZHRoJ10pKXsKCQkJCSR0aGlzLT5fb3V0KCcvRFcgJy4kZm9udFsnZGVzYyddWydNaXNzaW5nV2lkdGgnXS4nJyk7IAoJCQl9CgoJCQkkdGhpcy0+X3B1dFRUZm9udHdpZHRocygkZm9udCwgJHR0Zi0+bWF4VW5pKTsKCgkJCSR0aGlzLT5fb3V0KCcvQ0lEVG9HSURNYXAgJy4oJHRoaXMtPm4gKyA0KS4nIDAgUicpOwoJCQkkdGhpcy0+X291dCgnPj4nKTsKCQkJJHRoaXMtPl9vdXQoJ2VuZG9iaicpOwoKCQkJLy8gVG9Vbmljb2RlCgkJCSR0aGlzLT5fbmV3b2JqKCk7CgkJCSR0b1VuaSA9IDw8PEVPUwovQ0lESW5pdCAvUHJvY1NldCBmaW5kcmVzb3VyY2UgYmVnaW4KMTIgZGljdCBiZWdpbgpiZWdpbmNtYXAKL0NJRFN5c3RlbUluZm8KPDwvUmVnaXN0cnkgKEFkb2JlKQovT3JkZXJpbmcgKFVDUykKL1N1cHBsZW1lbnQgMAo+PiBkZWYKL0NNYXBOYW1lIC9BZG9iZS1JZGVudGl0eS1VQ1MgZGVmCi9DTWFwVHlwZSAyIGRlZgoxIGJlZ2luY29kZXNwYWNlcmFuZ2UKPDAwMDA+IDxGRkZGPgplbmRjb2Rlc3BhY2VyYW5nZQoxIGJlZ2luYmZyYW5nZQo8MDAwMD4gPEZGRkY+IDwwMDAwPgplbmRiZnJhbmdlCmVuZGNtYXAKQ01hcE5hbWUgY3VycmVudGRpY3QgL0NNYXAgZGVmaW5lcmVzb3VyY2UgcG9wCmVuZAplbmQKRU9TOwoJCQkkdGhpcy0+X291dCgnPDwvTGVuZ3RoICcuKHN0cmxlbigkdG9VbmkpKS4nPj4nKTsKCQkJJHRoaXMtPl9wdXRzdHJlYW0oJHRvVW5pKTsKCQkJJHRoaXMtPl9vdXQoJ2VuZG9iaicpOwoKCQkJLy8gQ0lEU3lzdGVtSW5mbyBkaWN0aW9uYXJ5CgkJCSR0aGlzLT5fbmV3b2JqKCk7CgkJCSR0aGlzLT5fb3V0KCc8PC9SZWdpc3RyeSAoQWRvYmUpJyk7IAoJCQkkdGhpcy0+X291dCgnL09yZGVyaW5nIChVQ1MpJyk7CgkJCSR0aGlzLT5fb3V0KCcvU3VwcGxlbWVudCAwJyk7CgkJCSR0aGlzLT5fb3V0KCc+PicpOwoJCQkkdGhpcy0+X291dCgnZW5kb2JqJyk7CgoJCQkvLyBGb250IGRlc2NyaXB0b3IKCQkJJHRoaXMtPl9uZXdvYmooKTsKCQkJJHRoaXMtPl9vdXQoJzw8L1R5cGUgL0ZvbnREZXNjcmlwdG9yJyk7CgkJCSR0aGlzLT5fb3V0KCcvRm9udE5hbWUgLycuJGZvbnRuYW1lKTsKCQkJZm9yZWFjaCgkZm9udFsnZGVzYyddIGFzICRrZD0+JHYpIHsKCQkJCWlmICgka2QgPT0gJ0ZsYWdzJykgeyAkdiA9ICR2IHwgNDsgJHYgPSAkdiAmIH4zMjsgfQkvLyBTWU1CT0xJQyBmb250IGZsYWcKCQkJCSR0aGlzLT5fb3V0KCcgLycuJGtkLicgJy4kdik7CgkJCX0KCQkJJHRoaXMtPl9vdXQoJy9Gb250RmlsZTIgJy4oJHRoaXMtPm4gKyAyKS4nIDAgUicpOwoJCQkkdGhpcy0+X291dCgnPj4nKTsKCQkJJHRoaXMtPl9vdXQoJ2VuZG9iaicpOwoKCQkJLy8gRW1iZWQgQ0lEVG9HSURNYXAKCQkJLy8gQSBzcGVjaWZpY2F0aW9uIG9mIHRoZSBtYXBwaW5nIGZyb20gQ0lEcyB0byBnbHlwaCBpbmRpY2VzCgkJCSRjaWR0b2dpZG1hcCA9ICcnOwoJCQkkY2lkdG9naWRtYXAgPSBzdHJfcGFkKCcnLCAyNTYqMjU2KjIsICJceDAwIik7CgkJCWZvcmVhY2goJGNvZGVUb0dseXBoIGFzICRjYz0+JGdseXBoKSB7CgkJCQkkY2lkdG9naWRtYXBbJGNjKjJdID0gY2hyKCRnbHlwaCA+PiA4KTsKCQkJCSRjaWR0b2dpZG1hcFskY2MqMiArIDFdID0gY2hyKCRnbHlwaCAmIDB4RkYpOwoJCQl9CgkJCSRjaWR0b2dpZG1hcCA9IGd6Y29tcHJlc3MoJGNpZHRvZ2lkbWFwKTsKCQkJJHRoaXMtPl9uZXdvYmooKTsKCQkJJHRoaXMtPl9vdXQoJzw8L0xlbmd0aCAnLnN0cmxlbigkY2lkdG9naWRtYXApLicnKTsKCQkJJHRoaXMtPl9vdXQoJy9GaWx0ZXIgL0ZsYXRlRGVjb2RlJyk7CgkJCSR0aGlzLT5fb3V0KCc+PicpOwoJCQkkdGhpcy0+X3B1dHN0cmVhbSgkY2lkdG9naWRtYXApOwoJCQkkdGhpcy0+X291dCgnZW5kb2JqJyk7CgoJCQkvL0ZvbnQgZmlsZSAKCQkJJHRoaXMtPl9uZXdvYmooKTsKCQkJJHRoaXMtPl9vdXQoJzw8L0xlbmd0aCAnLnN0cmxlbigkZm9udHN0cmVhbSkpOwoJCQkkdGhpcy0+X291dCgnL0ZpbHRlciAvRmxhdGVEZWNvZGUnKTsKCQkJJHRoaXMtPl9vdXQoJy9MZW5ndGgxICcuJHR0Zm9udHNpemUpOwoJCQkkdGhpcy0+X291dCgnPj4nKTsKCQkJJHRoaXMtPl9wdXRzdHJlYW0oJGZvbnRzdHJlYW0pOwoJCQkkdGhpcy0+X291dCgnZW5kb2JqJyk7CgkJCXVuc2V0KCR0dGYpOwoJCX0gZWxzZSB7CgkJCS8vIEFsbG93IGZvciBhZGRpdGlvbmFsIHR5cGVzCgkJCSR0aGlzLT5mb250c1ska11bJ24nXSA9ICR0aGlzLT5uKzE7CgkJCSRtdGQ9J19wdXQnLnN0cnRvbG93ZXIoJHR5cGUpOwoJCQlpZighbWV0aG9kX2V4aXN0cygkdGhpcywkbXRkKSkKCQkJCSR0aGlzLT5FcnJvcignVW5zdXBwb3J0ZWQgZm9udCB0eXBlOiAnLiR0eXBlKTsKCQkJJHRoaXMtPiRtdGQoJGZvbnQpOwoJCX0KCX0KfQoKZnVuY3Rpb24gX3B1dFRUZm9udHdpZHRocygmJGZvbnQsICRtYXhVbmkpCnsKCWlmIChmaWxlX2V4aXN0cygkZm9udFsndW5pZmlsZW5hbWUnXS4nLmN3MTI3LnBocCcpKSB7CgkJaW5jbHVkZSgkZm9udFsndW5pZmlsZW5hbWUnXS4nLmN3MTI3LnBocCcpIDsKCQkkc3RhcnRjaWQgPSAxMjg7Cgl9IGVsc2UgewoJCSRyYW5nZWlkID0gMDsKCQkkcmFuZ2UgPSBhcnJheSgpOwoJCSRwcmV2Y2lkID0gLTI7CgkJJHByZXZ3aWR0aCA9IC0xOwoJCSRpbnRlcnZhbCA9IGZhbHNlOwoJCSRzdGFydGNpZCA9IDE7Cgl9CgkkY3dsZW4gPSAkbWF4VW5pICsgMTsgCgoJLy8gZm9yIGVhY2ggY2hhcmFjdGVyCglmb3IgKCRjaWQ9JHN0YXJ0Y2lkOyAkY2lkPCRjd2xlbjsgJGNpZCsrKSB7CgkJaWYgKCRjaWQ9PTEyOCAmJiAoIWZpbGVfZXhpc3RzKCRmb250Wyd1bmlmaWxlbmFtZSddLicuY3cxMjcucGhwJykpKSB7CgkJCWlmIChpc193cml0YWJsZSgkdGhpcy0+dW5pZm9udHBhdGgpKSB7CgkJCQkkZmggPSBmb3BlbigkZm9udFsndW5pZmlsZW5hbWUnXS4nLmN3MTI3LnBocCcsJ3diJyk7CgkJCQkkY3cxMjc9Jzw/cGhwJy4iXG4iOwoJCQkJJGN3MTI3Lj0nJHJhbmdlaWQ9Jy4kcmFuZ2VpZC4iO1xuIjsKCQkJCSRjdzEyNy49JyRwcmV2Y2lkPScuJHByZXZjaWQuIjtcbiI7CgkJCQkkY3cxMjcuPSckcHJldndpZHRoPScuJHByZXZ3aWR0aC4iO1xuIjsKCQkJCWlmICgkaW50ZXJ2YWwpIHsgJGN3MTI3Lj0nJGludGVydmFsPXRydWUnLiI7XG4iOyB9CgkJCQllbHNlIHsgJGN3MTI3Lj0nJGludGVydmFsPWZhbHNlJy4iO1xuIjsgfQoJCQkJJGN3MTI3Lj0nJHJhbmdlPScudmFyX2V4cG9ydCgkcmFuZ2UsdHJ1ZSkuIjtcbiI7CgkJCQkkY3cxMjcuPSI/PiI7CgkJCQlmd3JpdGUoJGZoLCRjdzEyNyxzdHJsZW4oJGN3MTI3KSk7CgkJCQlmY2xvc2UoJGZoKTsKCQkJfQoJCX0KCQlpZiAoJGZvbnRbJ2N3J11bJGNpZCoyXSA9PSAiXDAwIiAmJiAkZm9udFsnY3cnXVskY2lkKjIrMV0gPT0gIlwwMCIpIHsgY29udGludWU7IH0KCQkkd2lkdGggPSAob3JkKCRmb250WydjdyddWyRjaWQqMl0pIDw8IDgpICsgb3JkKCRmb250WydjdyddWyRjaWQqMisxXSk7CgkJaWYgKCR3aWR0aCA9PSA2NTUzNSkgeyAkd2lkdGggPSAwOyB9CgkJaWYgKCRjaWQgPiAyNTUgJiYgKCFpc3NldCgkZm9udFsnc3Vic2V0J11bJGNpZF0pIHx8ICEkZm9udFsnc3Vic2V0J11bJGNpZF0pKSB7IGNvbnRpbnVlOyB9CgkJaWYgKCFpc3NldCgkZm9udFsnZHcnXSkgfHwgKGlzc2V0KCRmb250WydkdyddKSAmJiAkd2lkdGggIT0gJGZvbnRbJ2R3J10pKSB7CgkJCWlmICgkY2lkID09ICgkcHJldmNpZCArIDEpKSB7CgkJCQlpZiAoJHdpZHRoID09ICRwcmV2d2lkdGgpIHsKCQkJCQlpZiAoJHdpZHRoID09ICRyYW5nZVskcmFuZ2VpZF1bMF0pIHsKCQkJCQkJJHJhbmdlWyRyYW5nZWlkXVtdID0gJHdpZHRoOwoJCQkJCX0gZWxzZSB7CgkJCQkJCWFycmF5X3BvcCgkcmFuZ2VbJHJhbmdlaWRdKTsKCQkJCQkJLy8gbmV3IHJhbmdlCgkJCQkJCSRyYW5nZWlkID0gJHByZXZjaWQ7CgkJCQkJCSRyYW5nZVskcmFuZ2VpZF0gPSBhcnJheSgpOwoJCQkJCQkkcmFuZ2VbJHJhbmdlaWRdW10gPSAkcHJldndpZHRoOwoJCQkJCQkkcmFuZ2VbJHJhbmdlaWRdW10gPSAkd2lkdGg7CgkJCQkJfQoJCQkJCSRpbnRlcnZhbCA9IHRydWU7CgkJCQkJJHJhbmdlWyRyYW5nZWlkXVsnaW50ZXJ2YWwnXSA9IHRydWU7CgkJCQl9IGVsc2UgewoJCQkJCWlmICgkaW50ZXJ2YWwpIHsKCQkJCQkJLy8gbmV3IHJhbmdlCgkJCQkJCSRyYW5nZWlkID0gJGNpZDsKCQkJCQkJJHJhbmdlWyRyYW5nZWlkXSA9IGFycmF5KCk7CgkJCQkJCSRyYW5nZVskcmFuZ2VpZF1bXSA9ICR3aWR0aDsKCQkJCQl9IGVsc2UgewoJCQkJCQkkcmFuZ2VbJHJhbmdlaWRdW10gPSAkd2lkdGg7CgkJCQkJfQoJCQkJCSRpbnRlcnZhbCA9IGZhbHNlOwoJCQkJfQoJCQl9IGVsc2UgewoJCQkJJHJhbmdlaWQgPSAkY2lkOwoJCQkJJHJhbmdlWyRyYW5nZWlkXSA9IGFycmF5KCk7CgkJCQkkcmFuZ2VbJHJhbmdlaWRdW10gPSAkd2lkdGg7CgkJCQkkaW50ZXJ2YWwgPSBmYWxzZTsKCQkJfQoJCQkkcHJldmNpZCA9ICRjaWQ7CgkJCSRwcmV2d2lkdGggPSAkd2lkdGg7CgkJfQoJfQoJJHByZXZrID0gLTE7CgkkbmV4dGsgPSAtMTsKCSRwcmV2aW50ID0gZmFsc2U7Cglmb3JlYWNoICgkcmFuZ2UgYXMgJGsgPT4gJHdzKSB7CgkJJGN3cyA9IGNvdW50KCR3cyk7CgkJaWYgKCgkayA9PSAkbmV4dGspIEFORCAoISRwcmV2aW50KSBBTkQgKCghaXNzZXQoJHdzWydpbnRlcnZhbCddKSkgT1IgKCRjd3MgPCA0KSkpIHsKCQkJaWYgKGlzc2V0KCRyYW5nZVska11bJ2ludGVydmFsJ10pKSB7IHVuc2V0KCRyYW5nZVska11bJ2ludGVydmFsJ10pOyB9CgkJCSRyYW5nZVskcHJldmtdID0gYXJyYXlfbWVyZ2UoJHJhbmdlWyRwcmV2a10sICRyYW5nZVska10pOwoJCQl1bnNldCgkcmFuZ2VbJGtdKTsKCQl9IGVsc2UgewoJCQkkcHJldmsgPSAkazsKCQl9CgkJJG5leHRrID0gJGsgKyAkY3dzOwoJCWlmIChpc3NldCgkd3NbJ2ludGVydmFsJ10pKSB7CgkJCWlmICgkY3dzID4gMykgeyAkcHJldmludCA9IHRydWU7IH0KCQkJZWxzZSB7ICRwcmV2aW50ID0gZmFsc2U7IH0KCQkJdW5zZXQoJHJhbmdlWyRrXVsnaW50ZXJ2YWwnXSk7CgkJCS0tJG5leHRrOwoJCX0KCQllbHNlIHsgJHByZXZpbnQgPSBmYWxzZTsgfQoJfQoJJHcgPSAnJzsKCWZvcmVhY2ggKCRyYW5nZSBhcyAkayA9PiAkd3MpIHsKCQlpZiAoY291bnQoYXJyYXlfY291bnRfdmFsdWVzKCR3cykpID09IDEpIHsgJHcgLj0gJyAnLiRrLicgJy4oJGsgKyBjb3VudCgkd3MpIC0gMSkuJyAnLiR3c1swXTsgfQoJCWVsc2UgeyAkdyAuPSAnICcuJGsuJyBbICcuaW1wbG9kZSgnICcsICR3cykuJyBdJyAuICJcbiI7IH0KCX0KCSR0aGlzLT5fb3V0KCcvVyBbJy4kdy4nIF0nKTsKfQoKZnVuY3Rpb24gX3B1dGltYWdlcygpCnsKCWZvcmVhY2goYXJyYXlfa2V5cygkdGhpcy0+aW1hZ2VzKSBhcyAkZmlsZSkKCXsKCQkkdGhpcy0+X3B1dGltYWdlKCR0aGlzLT5pbWFnZXNbJGZpbGVdKTsKCQl1bnNldCgkdGhpcy0+aW1hZ2VzWyRmaWxlXVsnZGF0YSddKTsKCQl1bnNldCgkdGhpcy0+aW1hZ2VzWyRmaWxlXVsnc21hc2snXSk7Cgl9Cn0KCmZ1bmN0aW9uIF9wdXRpbWFnZSgmJGluZm8pCnsKCSR0aGlzLT5fbmV3b2JqKCk7CgkkaW5mb1snbiddID0gJHRoaXMtPm47CgkkdGhpcy0+X291dCgnPDwvVHlwZSAvWE9iamVjdCcpOwoJJHRoaXMtPl9vdXQoJy9TdWJ0eXBlIC9JbWFnZScpOwoJJHRoaXMtPl9vdXQoJy9XaWR0aCAnLiRpbmZvWyd3J10pOwoJJHRoaXMtPl9vdXQoJy9IZWlnaHQgJy4kaW5mb1snaCddKTsKCWlmKCRpbmZvWydjcyddPT0nSW5kZXhlZCcpCgkJJHRoaXMtPl9vdXQoJy9Db2xvclNwYWNlIFsvSW5kZXhlZCAvRGV2aWNlUkdCICcuKHN0cmxlbigkaW5mb1sncGFsJ10pLzMtMSkuJyAnLigkdGhpcy0+bisxKS4nIDAgUl0nKTsKCWVsc2UKCXsKCQkkdGhpcy0+X291dCgnL0NvbG9yU3BhY2UgLycuJGluZm9bJ2NzJ10pOwoJCWlmKCRpbmZvWydjcyddPT0nRGV2aWNlQ01ZSycpCgkJCSR0aGlzLT5fb3V0KCcvRGVjb2RlIFsxIDAgMSAwIDEgMCAxIDBdJyk7Cgl9CgkkdGhpcy0+X291dCgnL0JpdHNQZXJDb21wb25lbnQgJy4kaW5mb1snYnBjJ10pOwoJaWYoaXNzZXQoJGluZm9bJ2YnXSkpCgkJJHRoaXMtPl9vdXQoJy9GaWx0ZXIgLycuJGluZm9bJ2YnXSk7CglpZihpc3NldCgkaW5mb1snZHAnXSkpCgkJJHRoaXMtPl9vdXQoJy9EZWNvZGVQYXJtcyA8PCcuJGluZm9bJ2RwJ10uJz4+Jyk7CglpZihpc3NldCgkaW5mb1sndHJucyddKSAmJiBpc19hcnJheSgkaW5mb1sndHJucyddKSkKCXsKCQkkdHJucyA9ICcnOwoJCWZvcigkaT0wOyRpPGNvdW50KCRpbmZvWyd0cm5zJ10pOyRpKyspCgkJCSR0cm5zIC49ICRpbmZvWyd0cm5zJ11bJGldLicgJy4kaW5mb1sndHJucyddWyRpXS4nICc7CgkJJHRoaXMtPl9vdXQoJy9NYXNrIFsnLnJ0cmltKCR0cm5zLCcgJykuJ10nKTsKCX0KCWlmKGlzc2V0KCRpbmZvWydzbWFzayddKSkKCQkkdGhpcy0+X291dCgnL1NNYXNrICcuKCR0aGlzLT5uKzEpLicgMCBSJyk7CgkkdGhpcy0+X291dCgnL0xlbmd0aCAnLnN0cmxlbigkaW5mb1snZGF0YSddKS4nPj4nKTsKCSR0aGlzLT5fcHV0c3RyZWFtKCRpbmZvWydkYXRhJ10pOwoJJHRoaXMtPl9vdXQoJ2VuZG9iaicpOwoJLy8gU29mdCBtYXNrCglpZihpc3NldCgkaW5mb1snc21hc2snXSkpCgl7CgkJJGRwID0gJy9QcmVkaWN0b3IgMTUgL0NvbG9ycyAxIC9CaXRzUGVyQ29tcG9uZW50IDggL0NvbHVtbnMgJy4kaW5mb1sndyddOwoJCSRzbWFzayA9IGFycmF5KCd3Jz0+JGluZm9bJ3cnXSwgJ2gnPT4kaW5mb1snaCddLCAnY3MnPT4nRGV2aWNlR3JheScsICdicGMnPT44LCAnZic9PiRpbmZvWydmJ10sICdkcCc9PiRkcCwgJ2RhdGEnPT4kaW5mb1snc21hc2snXSk7CgkJJHRoaXMtPl9wdXRpbWFnZSgkc21hc2spOwoJfQoJLy8gUGFsZXR0ZQoJaWYoJGluZm9bJ2NzJ109PSdJbmRleGVkJykKCXsKCQkkZmlsdGVyID0gKCR0aGlzLT5jb21wcmVzcykgPyAnL0ZpbHRlciAvRmxhdGVEZWNvZGUgJyA6ICcnOwoJCSRwYWwgPSAoJHRoaXMtPmNvbXByZXNzKSA/IGd6Y29tcHJlc3MoJGluZm9bJ3BhbCddKSA6ICRpbmZvWydwYWwnXTsKCQkkdGhpcy0+X25ld29iaigpOwoJCSR0aGlzLT5fb3V0KCc8PCcuJGZpbHRlci4nL0xlbmd0aCAnLnN0cmxlbigkcGFsKS4nPj4nKTsKCQkkdGhpcy0+X3B1dHN0cmVhbSgkcGFsKTsKCQkkdGhpcy0+X291dCgnZW5kb2JqJyk7Cgl9Cn0KCmZ1bmN0aW9uIF9wdXR4b2JqZWN0ZGljdCgpCnsKCWZvcmVhY2goJHRoaXMtPmltYWdlcyBhcyAkaW1hZ2UpCgkJJHRoaXMtPl9vdXQoJy9JJy4kaW1hZ2VbJ2knXS4nICcuJGltYWdlWyduJ10uJyAwIFInKTsKfQoKZnVuY3Rpb24gX3B1dHJlc291cmNlZGljdCgpCnsKCSR0aGlzLT5fb3V0KCcvUHJvY1NldCBbL1BERiAvVGV4dCAvSW1hZ2VCIC9JbWFnZUMgL0ltYWdlSV0nKTsKCSR0aGlzLT5fb3V0KCcvRm9udCA8PCcpOwoJZm9yZWFjaCgkdGhpcy0+Zm9udHMgYXMgJGZvbnQpIHsKCQkkdGhpcy0+X291dCgnL0YnLiRmb250WydpJ10uJyAnLiRmb250WyduJ10uJyAwIFInKTsKCX0KCSR0aGlzLT5fb3V0KCc+PicpOwoJJHRoaXMtPl9vdXQoJy9YT2JqZWN0IDw8Jyk7CgkkdGhpcy0+X3B1dHhvYmplY3RkaWN0KCk7CgkkdGhpcy0+X291dCgnPj4nKTsKfQoKZnVuY3Rpb24gX3B1dHJlc291cmNlcygpCnsKCSR0aGlzLT5fcHV0Zm9udHMoKTsKCSR0aGlzLT5fcHV0aW1hZ2VzKCk7CgkvLyBSZXNvdXJjZSBkaWN0aW9uYXJ5CgkkdGhpcy0+b2Zmc2V0c1syXSA9IHN0cmxlbigkdGhpcy0+YnVmZmVyKTsKCSR0aGlzLT5fb3V0KCcyIDAgb2JqJyk7CgkkdGhpcy0+X291dCgnPDwnKTsKCSR0aGlzLT5fcHV0cmVzb3VyY2VkaWN0KCk7CgkkdGhpcy0+X291dCgnPj4nKTsKCSR0aGlzLT5fb3V0KCdlbmRvYmonKTsKfQoKZnVuY3Rpb24gX3B1dGluZm8oKQp7CgkkdGl0bGUgPSAoIWVtcHR5KCR0aGlzLT50aXRsZSkpID8gJHRoaXMtPnRpdGxlIDogJyc7CgkkYXV0aG9yID0gKCFlbXB0eSgkdGhpcy0+YXV0aG9yKSkgPyAkdGhpcy0+YXV0aG9yIDogJyc7Cgkkc3ViamVjdCA9ICghZW1wdHkoJHRoaXMtPnN1YmplY3QpKSA/ICR0aGlzLT5zdWJqZWN0IDogJyc7Cgkka2V5d29yZHMgPSAoIWVtcHR5KCR0aGlzLT5rZXl3b3JkcykpID8gJHRoaXMtPmtleXdvcmRzIDogJyc7CgkkY3JlYXRvciA9ICghZW1wdHkoJHRoaXMtPmNyZWF0b3IpKSA/ICR0aGlzLT5jcmVhdG9yIDogJyc7CgkkcHJvZHVjZXIgPSBnZXRfY2xhc3MoKS4nICcudEZQREZfVkVSU0lPTjsKCSRkYXRlID0gJ0Q6Jy5AZGF0ZSgnWW1kSGlzJyk7CgoJJHRlc3RlciA9IGFycmF5KCR0aXRsZSwkYXV0aG9yLCRzdWJqZWN0LCRrZXl3b3JkcywkY3JlYXRvcik7CgkkdG1wID0gaW1wbG9kZSgnJywkdGVzdGVyKTsKCWlmICgkdG1wICYmIHByZWdfbWF0Y2goJy9bXHg4MC1ceGZmXS8nLCR0bXApID09IDEpIHsKCQlpZiAoJHRpdGxlKSAkdGl0bGUgPSAkdGhpcy0+X1VURjh0b1VURjE2KCR0aXRsZSk7CgkJaWYgKCRhdXRob3IpICRhdXRob3IgPSAkdGhpcy0+X1VURjh0b1VURjE2KCRhdXRob3IpOwoJCWlmICgkc3ViamVjdCkgJHN1YmplY3QgPSAkdGhpcy0+X1VURjh0b1VURjE2KCRzdWJqZWN0KTsKCQlpZiAoJGtleXdvcmRzKSAka2V5d29yZHMgPSAkdGhpcy0+X1VURjh0b1VURjE2KCRrZXl3b3Jkcyk7CgkJaWYgKCRjcmVhdG9yKSAkY3JlYXRvciA9ICR0aGlzLT5fVVRGOHRvVVRGMTYoJGNyZWF0b3IpOwoJCSRwcm9kdWNlciA9ICR0aGlzLT5fVVRGOHRvVVRGMTYoJHByb2R1Y2VyKTsKCQkkZGF0ZSA9ICR0aGlzLT5fVVRGOHRvVVRGMTYoJGRhdGUpOwoJfQoKCWlmICgkdGl0bGUpICR0aGlzLT5fb3V0KCcvVGl0bGUgJy4kdGhpcy0+X3RleHRzdHJpbmcoJHRoaXMtPnRpdGxlKSk7CglpZiAoJGF1dGhvcikgJHRoaXMtPl9vdXQoJy9BdXRob3IgJy4kdGhpcy0+X3RleHRzdHJpbmcoJHRoaXMtPmF1dGhvcikpOwoJaWYgKCRzdWJqZWN0KSAkdGhpcy0+X291dCgnL1N1YmplY3QgJy4kdGhpcy0+X3RleHRzdHJpbmcoJHRoaXMtPnN1YmplY3QpKTsKCWlmICgka2V5d29yZHMpICR0aGlzLT5fb3V0KCcvS2V5d29yZHMgJy4kdGhpcy0+X3RleHRzdHJpbmcoJHRoaXMtPmtleXdvcmRzKSk7CglpZiAoJGNyZWF0b3IpICR0aGlzLT5fb3V0KCcvQ3JlYXRvciAnLiR0aGlzLT5fdGV4dHN0cmluZygkdGhpcy0+Y3JlYXRvcikpOwoJJHRoaXMtPl9vdXQoJy9Qcm9kdWNlciAnLiR0aGlzLT5fdGV4dHN0cmluZygkcHJvZHVjZXIpKTsKCSR0aGlzLT5fb3V0KCcvQ3JlYXRpb25EYXRlICcuJHRoaXMtPl90ZXh0c3RyaW5nKCRkYXRlKSk7Cn0KCmZ1bmN0aW9uIF9wdXRjYXRhbG9nKCkKewoJJHRoaXMtPl9vdXQoJy9UeXBlIC9DYXRhbG9nJyk7CgkkdGhpcy0+X291dCgnL1BhZ2VzIDEgMCBSJyk7CglpZigkdGhpcy0+Wm9vbU1vZGU9PSdmdWxscGFnZScpCgkJJHRoaXMtPl9vdXQoJy9PcGVuQWN0aW9uIFszIDAgUiAvRml0XScpOwoJZWxzZWlmKCR0aGlzLT5ab29tTW9kZT09J2Z1bGx3aWR0aCcpCgkJJHRoaXMtPl9vdXQoJy9PcGVuQWN0aW9uIFszIDAgUiAvRml0SCBudWxsXScpOwoJZWxzZWlmKCR0aGlzLT5ab29tTW9kZT09J3JlYWwnKQoJCSR0aGlzLT5fb3V0KCcvT3BlbkFjdGlvbiBbMyAwIFIgL1hZWiBudWxsIG51bGwgMV0nKTsKCWVsc2VpZighaXNfc3RyaW5nKCR0aGlzLT5ab29tTW9kZSkpCgkJJHRoaXMtPl9vdXQoJy9PcGVuQWN0aW9uIFszIDAgUiAvWFlaIG51bGwgbnVsbCAnLnNwcmludGYoJyUuMkYnLCR0aGlzLT5ab29tTW9kZS8xMDApLiddJyk7CglpZigkdGhpcy0+TGF5b3V0TW9kZT09J3NpbmdsZScpCgkJJHRoaXMtPl9vdXQoJy9QYWdlTGF5b3V0IC9TaW5nbGVQYWdlJyk7CgllbHNlaWYoJHRoaXMtPkxheW91dE1vZGU9PSdjb250aW51b3VzJykKCQkkdGhpcy0+X291dCgnL1BhZ2VMYXlvdXQgL09uZUNvbHVtbicpOwoJZWxzZWlmKCR0aGlzLT5MYXlvdXRNb2RlPT0ndHdvJykKCQkkdGhpcy0+X291dCgnL1BhZ2VMYXlvdXQgL1R3b0NvbHVtbkxlZnQnKTsKfQoKZnVuY3Rpb24gX3B1dGhlYWRlcigpCnsKCSR0aGlzLT5fb3V0KCclUERGLScuJHRoaXMtPlBERlZlcnNpb24pOwp9CgpmdW5jdGlvbiBfcHV0dHJhaWxlcigpCnsKCSR0aGlzLT5fb3V0KCcvU2l6ZSAnLigkdGhpcy0+bisxKSk7CgkkdGhpcy0+X291dCgnL1Jvb3QgJy4kdGhpcy0+bi4nIDAgUicpOwoJJHRoaXMtPl9vdXQoJy9JbmZvICcuKCR0aGlzLT5uLTEpLicgMCBSJyk7Cn0KCmZ1bmN0aW9uIF9lbmRkb2MoKQp7CgkkdGhpcy0+X3B1dGhlYWRlcigpOwoJJHRoaXMtPl9wdXRwYWdlcygpOwoJJHRoaXMtPl9wdXRyZXNvdXJjZXMoKTsKCS8vIEluZm8KCSR0aGlzLT5fbmV3b2JqKCk7CgkkdGhpcy0+X291dCgnPDwnKTsKCSR0aGlzLT5fcHV0aW5mbygpOwoJJHRoaXMtPl9vdXQoJz4+Jyk7CgkkdGhpcy0+X291dCgnZW5kb2JqJyk7CgkvLyBDYXRhbG9nCgkkdGhpcy0+X25ld29iaigpOwoJJHRoaXMtPl9vdXQoJzw8Jyk7CgkkdGhpcy0+X3B1dGNhdGFsb2coKTsKCSR0aGlzLT5fb3V0KCc+PicpOwoJJHRoaXMtPl9vdXQoJ2VuZG9iaicpOwoJLy8gQ3Jvc3MtcmVmCgkkbyA9IHN0cmxlbigkdGhpcy0+YnVmZmVyKTsKCSR0aGlzLT5fb3V0KCd4cmVmJyk7CgkkdGhpcy0+X291dCgnMCAnLigkdGhpcy0+bisxKSk7CgkkdGhpcy0+X291dCgnMDAwMDAwMDAwMCA2NTUzNSBmICcpOwoJZm9yKCRpPTE7JGk8PSR0aGlzLT5uOyRpKyspCgkJJHRoaXMtPl9vdXQoc3ByaW50ZignJTAxMGQgMDAwMDAgbiAnLCR0aGlzLT5vZmZzZXRzWyRpXSkpOwoJLy8gVHJhaWxlcgoJJHRoaXMtPl9vdXQoJ3RyYWlsZXInKTsKCSR0aGlzLT5fb3V0KCc8PCcpOwoJJHRoaXMtPl9wdXR0cmFpbGVyKCk7CgkkdGhpcy0+X291dCgnPj4nKTsKCSR0aGlzLT5fb3V0KCdzdGFydHhyZWYnKTsKCSR0aGlzLT5fb3V0KCRvKTsKCSR0aGlzLT5fb3V0KCclJUVPRicpOwoJJHRoaXMtPnN0YXRlID0gMzsKfQoKLy8gKioqKioqKioqIE5FVyBGVU5DVElPTlMgKioqKioqKioqCi8vIENvbnZlcnRzIFVURi04IHN0cmluZ3MgdG8gY29kZXBvaW50cyBhcnJheQpmdW5jdGlvbiBVVEY4U3RyaW5nVG9BcnJheSgkc3RyKQp7CiAgICRvdXQgPSBhcnJheSgpOwogICAkbGVuID0gc3RybGVuKCRzdHIpOwogICBmb3IgKCRpID0gMDsgJGkgPCAkbGVuOyAkaSsrKSB7CgkkdW5pID0gLTE7CiAgICAgICRoID0gb3JkKCRzdHJbJGldKTsKICAgICAgaWYgKCAkaCA8PSAweDdGICkKICAgICAgICAgJHVuaSA9ICRoOwogICAgICBlbHNlaWYgKCAkaCA+PSAweEMyICkgewogICAgICAgICBpZiAoICgkaCA8PSAweERGKSAmJiAoJGkgPCAkbGVuIC0xKSApCiAgICAgICAgICAgICR1bmkgPSAoJGggJiAweDFGKSA8PCA2IHwgKG9yZCgkc3RyWysrJGldKSAmIDB4M0YpOwogICAgICAgICBlbHNlaWYgKCAoJGggPD0gMHhFRikgJiYgKCRpIDwgJGxlbiAtMikgKQogICAgICAgICAgICAkdW5pID0gKCRoICYgMHgwRikgPDwgMTIgfCAob3JkKCRzdHJbKyskaV0pICYgMHgzRikgPDwgNgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChvcmQoJHN0clsrKyRpXSkgJiAweDNGKTsKICAgICAgICAgZWxzZWlmICggKCRoIDw9IDB4RjQpICYmICgkaSA8ICRsZW4gLTMpICkKICAgICAgICAgICAgJHVuaSA9ICgkaCAmIDB4MEYpIDw8IDE4IHwgKG9yZCgkc3RyWysrJGldKSAmIDB4M0YpIDw8IDEyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKG9yZCgkc3RyWysrJGldKSAmIDB4M0YpIDw8IDYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAob3JkKCRzdHJbKyskaV0pICYgMHgzRik7CiAgICAgIH0KCWlmICgkdW5pID49IDApIHsKCQkkb3V0W10gPSAkdW5pOwoJfQogICB9CiAgIHJldHVybiAkb3V0Owp9CgpmdW5jdGlvbiBSZW1vdmVGb250KCRmYW1pbHk9JyonKQp7CgkvLyBDbGVhciBjYWNoZWQgdHRmIGRhdGEKCWlmIChpc193cml0YWJsZSgkdGhpcy0+dW5pZm9udHBhdGgpKSB7CgkJJGZuID0gJHRoaXMtPnVuaWZvbnRwYXRoLkRJUkVDVE9SWV9TRVBBUkFUT1IuJGZhbWlseTsKCQl1bmxpbmsoJGZuLicubXR4LnBocCcpOwoJCXVubGluaygkZm4uJy5jdy5kYXQnKTsKCX0KfQoKcHJpdmF0ZSBmdW5jdGlvbiBGaW5kVHRmRmlsZSgkZmluZCwgJHN0eWxlPScnLCAkc3VmZml4PXRydWUpCnsKCS8vIExvb2sgZm9yICRmaW5kLCBhIChwb3NzaWJseS1jb21tYS1zZXBhcmF0ZWQgc2VyaWVzIG9mKSBmYW1pbHktaWRlbnRpZmllcihzKSBvciBhbiBhY3R1YWwgZmlsZW5hbWUKCWlmKCEkdGhpcy0+dHRmcGF0aCkgcmV0dXJuIEZBTFNFOwoJJHBhdGhzID0gKHN0cnBvcygnOicsJHRoaXMtPnR0ZnBhdGgpID09PSBGQUxTRSkgPyBhcnJheSh0cmltKCR0aGlzLT50dGZwYXRoKSkgOiBwcmVnX3NwbGl0KCcvXHM/OlxzPy8nLCR0aGlzLT50dGZwYXRoKTsKCSRmaWxlcyA9IGFycmF5KCk7CgkvLyBHZXQgYWxsLCBjdXogZmlsZW5hbWUgY2hhcnMgbWF5IGJlIHVwcGVyIG9yIGxvd2VyIGNhc2UKCWZvcmVhY2goJHBhdGhzIGFzICRkaXIpIHsKCQlpZigkZGlyKQoJCQkkZmlsZXMgPSBhcnJheV9tZXJnZSgkZmlsZXMsZ2xvYigkZGlyLkRJUkVDVE9SWV9TRVBBUkFUT1IuJyonKSk7Cgl9CgkkZXh0ID0gc3Vic3RyKCRmaW5kLC00KTsKCWlmKCRleHQgJiYgc3RydG9sb3dlcigkZXh0KSA9PSAnLnR0ZicpIHsKCQkkdGFyZ2V0ID0gJ35bL1xcXScuJGZpbmQuJyR+aSc7CgkJZm9yZWFjaCgkZmlsZXMgYXMgJHR0ZikgewoJCQlpZihwcmVnX21hdGNoKCR0YXJnZXQsJHR0ZikpCgkJCQlyZXR1cm4gJHR0ZjsKCQl9CgkJcmV0dXJuIEZBTFNFOwoJfSBlbHNlIHsKCQkkcHRuMSA9ICgkc3VmZml4KSA/ICd+JXMnOid+Wy9cXF0lcyc7CgkJJGJvbGQgPSAoJHN0eWxlICYmIHN0cnBvcygkc3R5bGUsJ2InKSAhPT0gRkFMU0UpOwoJCSRwdG4yID0gKCRib2xkKSA/ICcuP2IofG9sZCknOicnOwoJCSRpdGFsID0gKCRzdHlsZSAmJiBzdHJwb3MoJHN0eWxlLCdpJykgIT09IEZBTFNFKTsKCQkkcHRuMyA9ICgkaXRhbCkgPyAnLj9pKHx0YWxpYyl8b2JsaXF1ZSc6Jyc7CgkJJHB0bjQgPSAnXC50dGYkfmknOwoJCWlmKHN0cnBvcygnLCcsJGZpbmQpID09PSBGQUxTRSkKCQkJJG1hdGNoID0gYXJyYXkodHJpbSgkZmluZCkpOwoJCWVsc2UKCQkJJG1hdGNoID0gcHJlZ19zcGxpdCgnL1xzPyxccz8vJywkZmluZCk7CgkJLy8gUHJlZmVyIG1hdGNoIGZvciAkZmFtaWx5IGFuZCAkU3R5bGUKCQkkcHRuNSA9ICRwdG4yLiRwdG4zLiRwdG40OwoJCWZvcmVhY2goJG1hdGNoIGFzICRmYW1pbHkpIHsKCQkJJHRhcmdldCA9IHNwcmludGYoJHB0bjEsJGZhbWlseSkuJHB0bjU7CgkJCWZvcmVhY2goJGZpbGVzIGFzICR0dGYpIHsKCQkJCWlmKHByZWdfbWF0Y2goJHRhcmdldCwkdHRmKSkKCQkJCQlyZXR1cm4gJHR0ZjsKCQkJfQoJCX0KCQkvLyBGYWxsYmFjayB0byAkZmFtaWx5IGFuZCAkU3R5bGVbcGFydF0KCQkkcHRuNSA9ICgoJHB0bjIpPyRwdG4yOiRwdG4zKS4kcHRuNDsKCQlmb3JlYWNoKCRtYXRjaCBhcyAkZmFtaWx5KSB7CgkJCSR0YXJnZXQgPSBzcHJpbnRmKCRwdG4xLCRmYW1pbHkpLiRwdG41OwoJCQlmb3JlYWNoKCRmaWxlcyBhcyAkdHRmKSB7CgkJCQlpZihwcmVnX21hdGNoKCR0YXJnZXQsJHR0ZikpCgkJCQkJcmV0dXJuICR0dGY7CgkJCX0KCQl9CgkJLy8gRmFsbGJhY2sgdG8gJGZhbWlseSBvbmx5CgkJZm9yZWFjaCgkbWF0Y2ggYXMgJGZhbWlseSkgewoJCQkkdGFyZ2V0ID0gc3ByaW50ZigkcHRuMSwkZmFtaWx5KS4kcHRuNDsKCQkJZm9yZWFjaCgkZmlsZXMgYXMgJHR0ZikgewoJCQkJaWYocHJlZ19tYXRjaCgkdGFyZ2V0LCR0dGYpKQoJCQkJCXJldHVybiAkdHRmOwoJCQl9CgkJfQoJfQoJcmV0dXJuIEZBTFNFOwp9CgovLyBFbmQgb2YgY2xhc3MKfQoKLy8gSGFuZGxlIHNwZWNpYWwgSUUgY29udHlwZSByZXF1ZXN0CmlmKGlzc2V0KCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSkgJiYgJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddPT0nY29udHlwZScpCnsKCWhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9wZGYnKTsKCWV4aXQ7Cn0KCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.tmtCalendar.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0KEMpIDIwMTQtMjAxNSBUb20gUGhhbmUgPHRwZ3d3QG9uZXBvc3QubmV0PgpSZWZlciB0byBsaWNlbmNlIGFuZCBvdGhlciBkZXRhaWxzIGF0IHRoZSB0b3Agb2YgZmlsZSBUb3VybmV5Lm1vZHVsZS5waHAKTW9yZSBpbmZvIGF0IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvdG91cm5leQoKQ2xhc3M6IHRtdENhbGVuZGFyCiovCgpjbGFzcyB0bXRDYWxlbmRhciBleHRlbmRzIENhbGVuZGFyCnsKCWZ1bmN0aW9uIF9fY29uc3RydWN0KCYkbW9kKQoJewoJCXBhcmVudDo6X19jb25zdHJ1Y3QoJG1vZCk7Cgl9CgkKCS8vTm8gY2hlY2tzIGhlcmUgZm9yIHZhbGlkIHBhcmFtZXRlcnMgLSBhc3N1bWVkIGRvbmUgYmVmb3JlCgkvLyRzdGFydCBpcyBicmFja2V0LWxvY2FsIHRpbWVzdGFtcAoJcHJpdmF0ZSBmdW5jdGlvbiBfR2V0U3VuRGF0YSgmJGJkYXRhLCRzdGFydCkKCXsKCQlpZigkYmRhdGFbJ3RpbWV6b25lJ10pCgkJCSR6b25lID0gJGJkYXRhWyd0aW1lem9uZSddOwoJCWVsc2UKCQl7CgkJCSR6b25lID0gJHRoaXMtPm1vZC0+R2V0UHJlZmVyZW5jZSgndGltZV96b25lJywnJyk7CgkJCWlmKCF6b25lKQoJCQkJJHpvbmUgPSAnRXVyb3BlL0xvbmRvbic7IC8vVE9ETyBCRVRURVIgZS5nLiBmdW5jKCRiZGF0YVsnbG9jYWxlJ10pCgkJfQoJCSRsYXQgPSAkYmRhdGFbJ2xhdGl0dWRlJ107IC8vbWF5YmUgMC4wCgkJJGxvbmcgPSAkYmRhdGFbJ2xvbmdpdHVkZSddOyAvL2RpdHRvCgkJJGRheXN0YW1wID0gZmxvb3IoJHN0YXJ0Lzg0NjAwKSo4NDYwMDsgLy9taWRuaWdodAoJCXJldHVybiBhcnJheSAoCgkJICdkYXknPT4kZGF5c3RhbXAsCgkJICdsYXQnPT4kbGF0LAoJCSAnbG9uZyc9PiRsb25nLAoJCSAnem9uZSc9PiR6b25lCgkJKTsKCX0KCgkvL0dldCBuby4gaW4gezAuMC4uMjQuMH0gcmVwcmVzZW50aW5nIHRoZSBhY3R1YWwgb3Igbm90aW9uYWwgc2xvdC1sZW5ndGgKCS8vdG8gYXNzaXN0IGludGVycHJldGF0aW9uIG9mIGFtYmlndW91cyBob3VyLW9mLWRheSBvciBkYXktb2YtbW9udGggdmFsdWVzCglwcml2YXRlIGZ1bmN0aW9uIF9HZXRTbG90SG91cnMoJiRiZGF0YSkKCXsKCQlpZigkYmRhdGFbJ3BsYWNlZ2FwJ10pCgkJewoJCQlzd2l0Y2goJGJkYXRhWydwbGFjZWdhcHR5cGUnXSkKCQkJewoJCQkJY2FzZSAxOiAvL21pbnV0ZQoJCQkJCXJldHVybiBNSU4oJGJkYXRhWydwbGFjZWdhcCddLzYwLDI0LjApOwoJCQkJY2FzZSAyOiAvL2hvdXIKCQkJCQlyZXR1cm4gTUlOKChmbG9hdCkkYmRhdGFbJ3BsYWNlZ2FwJ10sMjQuMCk7CgkJCQljYXNlIDM6IC8vPj0gZGF5CgkJCQljYXNlIDQ6CgkJCQljYXNlIDU6CgkJCQljYXNlIDY6CgkJCQkJcmV0dXJuIDI0LjA7CgkJCQlkZWZhdWx0OgoJCQkJCWJyZWFrOwoJCQl9CgkJfQoJCS8vVE9ETyBpZiAkYmRhdGFbJ3N0YXJ0ZGF0ZSddIHRvICRiZGF0YVsnZW5kZGF0ZSddIHNob3J0LzwgTiBkYXlzIAoJCS8vIGFzc3VtZSBub21pbmF0ZWQgdmFsdWVzIGFyZSBob3VycywgcmV0dXJuIGFwcHJvcHJpYXRlIHZhbHVlCgkJcmV0dXJuIDAuMDsKCX0KCglwcml2YXRlIGZ1bmN0aW9uIF90aW1lY2hlY2soJiR0aW1lcywkc2FtZWRheSkKCXsKCQlmb3JlYWNoKCR0aW1lcyBhcyAmJHJhbmdlKQoJCXsKCQkJLy9UT0RPIGludGVycGV0IGFueSBzdW4tcmVsYXRlZCB0aW1lcwoJCQkkcyA9ICgkc2FtZWRheSkgPyBNQVgoJHJhbmdlWzBdLCR0c3RhcnQpIDogJHJhbmdlWzBdOwoJCQkvL1RPRE8gc3VwcG9ydCByb2xsLW92ZXIgdG8gY29udGlndW91cyBkYXkocykgJiB0aW1lKHMpCgkJCWlmKCRyYW5nZVsxXSA+PSAkcyskbGVuZ3RoKQoJCQl7CgkJCQl1bnNldCgkcmFuZ2UpOwoJCQkJcmV0dXJuICRzOwoJCQl9CgkJfQoJCXVuc2V0KCRyYW5nZSk7CgkJcmV0dXJuIEZBTFNFOwoJfQoKCS8qKgoJTW9udGhOYW1lczoKCglHZXQgb25lLCBvciBhcnJheSBvZiwgdHJhbnNsYXRlZCBtb250aC1uYW1lKHMpCgoJQHdoaWNoOiAxIChmb3IgSmFudWFyeSkgLi4gMTIgKGZvciBEZWNlbWJlciksIG9yIGFycmF5IG9mIHN1Y2ggaW5kaWNlcwoJQHNob3J0OiBvcHRpb25hbCwgd2hldGhlciB0byBnZXQgc2hvcnQtZm9ybSBuYW1lLCBkZWZhdWx0IEZBTFNFCgkqLwoJZnVuY3Rpb24gTW9udGhOYW1lcygkd2hpY2gsJHNob3J0PUZBTFNFKQoJewoJCSRrID0gKCRzaG9ydCkgPyAnc2hvcnRtb250aHMnIDogJ2xvbmdtb250aHMnOwoJCSRhbGwgPSBleHBsb2RlKCcsJywkdGhpcy0+bW9kLT5MYW5nKCRrKSk7CgoJCWlmICghaXNfYXJyYXkoJHdoaWNoKSkKCQl7CgkJCWlmICgkd2hpY2ggPiAwICYmICR3aGljaCA8IDEzKQoJCQkJcmV0dXJuICRhbGxbJHdoaWNoLTFdOwoJCQlyZXR1cm4gJyc7CgkJfQoJCSRyZXQgPSBhcnJheSgpOwoJCWZvcmVhY2ggKCR3aGljaCBhcyAkbW9udGgpCgkJewoJCQlpZiAoJG1vbnRoID4gMCAmJiAkbW9udGggPCAxMykKCQkJCSRyZXRbJG1vbnRoXSA9ICRhbGxbJG1vbnRoLTFdOwoJCX0KCQlyZXR1cm4gJHJldDsKCX0KCgkvKioKCURheU5hbWVzOgoKCUdldCBvbmUsIG9yIGFycmF5IG9mLCB0cmFuc2xhdGVkIGRheS1uYW1lKHMpCgoJQHdoaWNoOiAxIChmb3IgU3VuZGF5KSAuLiA3IChmb3IgU2F0dXJkYXkpLCBvciBhcnJheSBvZiBzdWNoIGluZGljZXMKCUBzaG9ydDogb3B0aW9uYWwsIHdoZXRoZXIgdG8gZ2V0IHNob3J0LWZvcm0gbmFtZSwgZGVmYXVsdCBGQUxTRQoJKi8KCWZ1bmN0aW9uIERheU5hbWVzKCR3aGljaCwkc2hvcnQ9RkFMU0UpCgl7CgkJJGsgPSAoJHNob3J0KSA/ICdzaG9ydGRheXMnIDogJ2xvbmdkYXlzJzsKCQkkYWxsID0gZXhwbG9kZSgnLCcsJHRoaXMtPm1vZC0+TGFuZygkaykpOwoKCQlpZiAoIWlzX2FycmF5KCR3aGljaCkpCgkJewoJCQlpZiAoJHdoaWNoID4gMCAmJiAkd2hpY2ggPCA4KQoJCQkJcmV0dXJuICRhbGxbJHdoaWNoLTFdOwoJCQlyZXR1cm4gJyc7CgkJfQoJCSRyZXQgPSBhcnJheSgpOwoJCWZvcmVhY2ggKCR3aGljaCBhcyAkZGF5KQoJCXsKCQkJaWYgKCRkYXkgPiAwICYmICRkYXkgPCA4KQoJCQkJJHJldFskZGF5XSA9ICRhbGxbJGRheS0xXTsKCQl9CgkJcmV0dXJuICRyZXQ7Cgl9CgoJLyoqCglJbnRlcnZhbE5hbWVzOgoKCUdldCBvbmUsIG9yIGFycmF5IG9mLCB0cmFuc2xhdGVkIHRpbWUtaW50ZXJ2YWwtbmFtZShzKQoKCUB3aGljaDogaW5kZXggMCAoZm9yICdub25lJyksIDEgKGZvciAnbWludXRlJykgLi4gNiAoZm9yICd5ZWFyJyksIG9yIGFycmF5IG9mIHN1Y2ggaW5kaWNlcwoJQHBsdXJhbDogb3B0aW9uYWwsIHdoZXRoZXIgdG8gZ2V0IHBsdXJhbCBmb3JtIG9mIHRoZSBpbnRlcnZhbCBuYW1lKHMpLCBkZWZhdWx0IEZBTFNFCglAY2FwOiBvcHRpb25hbCwgd2hldGhlciB0byBjYXBpdGFsaXNlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIG5hbWUocyksIGRlZmF1bHQgRkFMU0UKCSovCglmdW5jdGlvbiBJbnRlcnZhbE5hbWVzKCR3aGljaCwkcGx1cmFsPUZBTFNFLCRjYXA9RkFMU0UpCgl7CgkJJGsgPSAoJHBsdXJhbCkgPyAnbXVsdGlwZXJpb2RzJyA6ICdwZXJpb2RzJzsKCQkkYWxsID0gZXhwbG9kZSgnLCcsJHRoaXMtPm1vZC0+TGFuZygkaykpOwoJCWFycmF5X3Vuc2hpZnQoJGFsbCwkdGhpcy0+bW9kLT5MYW5nKCdub25lJykpOwoKCQlpZiAoIWlzX2FycmF5KCR3aGljaCkpCgkJewoJCQlpZiAoJHdoaWNoID49IDAgJiYgJHdoaWNoIDwgNykKCQkJCXJldHVybiAkYWxsWyR3aGljaF07CgkJCXJldHVybiAnJzsKCQl9CgkJJHJldCA9IGFycmF5KCk7CgkJZm9yZWFjaCgkd2hpY2ggYXMgJHBlcmlvZCkKCQl7CgkJCWlmICgkcGVyaW9kID49IDAgJiYgJHBlcmlvZCA8IDcpCgkJCXsKCQkJCSRyZXRbJHBlcmlvZF0gPSAoJGNhcCkgPyB1Y2ZpcnN0KCRhbGxbJHBlcmlvZF0pOiAvL2ZvciBjdXJyZW50IGxvY2FsZQoJCQkJCSRhbGxbJHBlcmlvZF07CgkJCX0KCQl9CgkJcmV0dXJuICRyZXQ7Cgl9CgoJLyoqCglTbG90Q29tcGxpZXM6CgoJRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGludGVydmFsIEBzdGFydCB0byBAc3RhcnQgKyBAbGVuZ3RoIHNhdGlzZmllcyBjb25zdHJhaW50cwoJc3BlY2lmaWVkIGluIHJlbGV2YW50IGZpZWxkcyBpbiBAYmRhdGEuIEFsc28gcmV0dXJucyBGQUxTRSBpZiB0aGUKCWF2YWlsYWJpbGl0eS1kZXNjcmlwdG9yIHN0cmluZyBpcyBtYWxmb3JtZWQuCglwYXJlbnQ6OkNoZWNrQ29uZGl0aW9uKCkgb3IgOjpQYXJzZUNvbmRpdGlvbigpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB0aGlzIGZ1bmMuCgoJQGJkYXRhOiByZWZlcmVuY2UgdG8gYXJyYXkgb2YgZGF0YSBmb3IgY3VycmVudCBicmFja2V0IAkKCUBzdGFydDogcHJlZmVycmVkIHN0YXJ0IHRpbWUgKGJyYWNrZXQtbG9jYWwgdGltZXN0YW1wKQoJQGxlbmd0aDogb3B0aW9uYWwgbGVuZ3RoIChzZWNvbmRzKSBvZiB0aW1lIHBlcmlvZCB0byBiZSBjaGVja2VkLCBkZWZhdWx0IDAKCUBsYXRlcmRheXM6IG9wdGlvbmFsLCBuby4gb2YgZXh0cmEgZGF5cyB0byBjaGVjayBhZnRlciB0aGUgb25lIGluY2x1ZGluZyBAc3RhcnQsIGRlZmF1bHQgMzY1CgkqLwoJZnVuY3Rpb24gU2xvdENvbXBsaWVzKCYkYmRhdGEsJHN0YXJ0LCRsZW5ndGg9MCwkbGF0ZXJkYXlzPTM2NSkKCXsKCQlpZigkdGhpcy0+Y29uZHMgPT0gRkFMU0UpCgkJCXJldHVybiBGQUxTRTsKLyoKCQkkc3Vuc3R1ZmYgPSBzZWxmOjpfR2V0U3VuRGF0YSgkYmRhdGEsJHN0YXJ0KTsKCQkkbWF4aG91cnMgPSBzZWxmOjpfR2V0U2xvdEhvdXJzKCRiZGF0YSk7CgkJJGRzdGFydCA9IGZsb29yKCRzdGFydC84NjQwMCk7CgkJJGRlbmQgPSAkZHN0YXJ0ICsgJGxhdGVyZGF5czsKCQkkdHN0YXJ0ID0gJHN0YXJ0IC0gJGRzdGFydDsKCQlmb3JlYWNoKCR0aGlzLT5jb25kcyBhcyAmJGNvbmQpCgkJewoJCQkvL1RPRE8KCQl9CgkJdW5zZXQoJGNvbmQpOwoqLwoJCXJldHVybiBGQUxTRTsKCX0KCgkvKioKCVNsb3RTdGFydDoKCQoJR2V0IHN0YXJ0LXRpbWUgKHRpbWVzdGFtcCkgbWF0Y2hpbmcgY29uc3RyYWludHMgc3BlY2lmaWVkIGluIHJlbGV2YW50IGZpZWxkcyBpbgoJQGJkYXRhLCBhbmQJc3RhcnRpbmcgbm8gc29vbmVyIHRoYW4gQHN0YXJ0LCBvciBBU0FQIHdpdGhpbiBAbGF0ZXIgZGF5cyBhZnRlcgoJdGhlIG9uZSBpbmNsdWRpbmcgQHN0YXJ0LCBhbmQgd2hlcmUgdGhlIGF2YWlsYWJsZSB0aW1lIGlzIGF0IGxlYXN0IEBsZW5ndGguCglSZXR1cm5zIEZBTFNFIGlmIG5vIHN1Y2ggdGltZSBpcyBhdmFpbGFibGUgd2l0aGluIHRoZSBzcGVjaWZpZWQgaW50ZXJ2YWwgKG9yCgl0aGUgYXZhaWxhYmlsaXR5LWRlc2NyaXB0b3Igc3RyaW5nIGlzIG1hbGZvcm1lZCkuCglwYXJlbnQ6OkNoZWNrQ29uZGl0aW9uKCkgb3IgOjpQYXJzZUNvbmRpdGlvbigpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB0aGlzIGZ1bmMuCgoJQGJkYXRhOiByZWZlcmVuY2UgdG8gYXJyYXkgb2YgZGF0YSBmb3IgY3VycmVudCBicmFja2V0CglAc3RhcnQ6IHByZWZlcnJlZC9maXJzdCBzdGFydCB0aW1lIChicmFja2V0LWxvY2FsIHRpbWVzdGFtcCkKCUBsZW5ndGg6IG9wdGlvbmFsIGxlbmd0aCAoc2Vjb25kcykgb2YgdGltZSBwZXJpb2QgdG8gYmUgZGlzY292ZXJlZCwgZGVmYXVsdCAwCglAbGF0ZXJkYXlzOiBvcHRpb25hbCwgbm8uIG9mIGV4dHJhIGRheXMgdG8gY2hlY2sgYWZ0ZXIgdGhlIG9uZSBpbmNsdWRpbmcgQHN0YXJ0LCBkZWZhdWx0IDM2NQoJKi8KCWZ1bmN0aW9uIE5leHRTbG90U3RhcnQoJiRiZGF0YSwkc3RhcnQsJGxlbmd0aD0wLCRsYXRlcmRheXM9MzY1KQoJewoJCWlmKCR0aGlzLT5jb25kcyA9PSBGQUxTRSkKCQkJcmV0dXJuIEZBTFNFOwovKgoJCSRzdW5zdHVmZiA9IHNlbGY6Ol9HZXRTdW5EYXRhKCRiZGF0YSwkc3RhcnQpOwoJCSRtYXhob3VycyA9IHNlbGY6Ol9HZXRTbG90SG91cnMoJGJkYXRhKTsKCQkkZHN0YXJ0ID0gZmxvb3IoJHN0YXJ0Lzg2NDAwKTsKCQkkZGVuZCA9ICRkc3RhcnQgKyAkbGF0ZXJkYXlzOwoJCSR0c3RhcnQgPSAkc3RhcnQgLSAkZHN0YXJ0OwoJCWZvcmVhY2goJHRoaXMtPmNvbmRzIGFzICYkY29uZCkKCQl7CgkJCSR0aW1lcyA9ICRjb25kWzJdOwoJCQlpZighJHRpbWVzKQoJCQkJJHRpbWVzID0gYXJyYXkoMD0+YXJyYXkoMCw4NjM5OSkpOyAvL3dob2xlIGRheSdzIHdvcnRoIG9mIHNlY29uZHMKCQkJaWYoJGNvbmRbMV0gPT0gRkFMU0UpIC8vdGltZShzKSBvbiBhbnkgZGF5CgkJCXsKCQkJCSRYID0gc2VsZjo6X3RpbWVjaGVjaygkdGltZXMsVFJVRSk7CgkJCQlpZigkWCAhPT0gRkFMU0UpCgkJCQl7CgkJCQkJdXNldCgkY29uZCk7CgkJCQkJcmV0dXJuICRYOyAvL1RPRE8gKyAkY29uZFsxXT5kYXktaW5kZXggKiA4NjQwMCArIHpvbmUgb2Zmc2V0IHNlY29uZHMKCQkJCX0KCQkJCWlmKCRsYXRlcmRheXMgPiAwKQoJCQkJewoJCQkJCSRYID0gc2VsZjo6X3RpbWVjaGVjaygkdGltZXMsRkFMU0UpOwoJCQkJCWlmKCRYICE9PSBGQUxTRSkKCQkJCQl7CgkJCQkJCXVzZXQoJGNvbmQpOwoJCQkJCQlyZXR1cm4gJFg7IC8vVE9ETyArICRjb25kWzFdPmRheS1pbmRleCAqIDg2NDAwICsgem9uZSBvZmZzZXQgc2Vjb25kcwoJCQkJCX0KCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCS8qaW50ZXJwcmV0ICRjb25kWzFdCgkJCQkgIGZvcmVhY2ggZGF5IG9mIGludGVycHJldGVkCgkJCQkgICAgZ2V0IGRheS1pbmRleAoJCQkJCQlpZiBJTiAkZHN0YXJ0IHRvICRkZW5kIGluY2x1c2l2ZQoJCQkJCQkJJHNhbWVkYXkgPSAoZGF5LWluZGV4ID09ICRkc3RhcnQpOwoJCQkJCQkJJFggPSBzZWxmOjpfdGltZWNoZWNrKCR0aW1lcywkc2FtZWRheSk7CgkJCQkJCQlpZigkWCAhPT0gRkFMU0UpCgkJCQkJCQl7CgkJCQkJCQkJdXNldCgkY29uZCk7CgkJCQkJCQkJcmV0dXJuICRYOyAvL1RPRE8gKyAkY29uZFsxXT5kYXktaW5kZXggKiA4NjQwMCArIHpvbmUgb2Zmc2V0IHNlY29uZHMKCQkJCQkJCX0KCQkJCSogLwoJCQl9CgkJfQoJCXVuc2V0KCRjb25kKTsKKi8KCQlyZXR1cm4gRkFMU0U7Cgl9Cgp9Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.tmtChartBase.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0KEMpIDIwMTQtMjAxNSBUb20gUGhhbmUgPHRwZ3d3QG9uZXBvc3QubmV0PgpSZWZlciB0byBsaWNlbmNlIGFuZCBvdGhlciBkZXRhaWxzIGF0IHRoZSB0b3Agb2YgZmlsZSBUb3VybmV5Lm1vZHVsZS5waHAKTW9yZSBpbmZvIGF0IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvdG91cm5leQpUaGlzIGNsYXNzIGlzIG5vdCBzdWl0ZWQgZm9yIHN0YXRpYyBtZXRob2QtY2FsbGluZwoqLwphYnN0cmFjdCBjbGFzcyB0bXRDaGFydEJhc2UKewoJcHJvdGVjdGVkICRtb2Q7CglwdWJsaWMgJGxheW91dDsgLyogYm94LCBsZXZlbCBhbmQgY2hhcnQgZGF0YSBmcm9tIDo6TGF5b3V0KCksIGFycmF5IHdpdGgKCQkJCQlrZXlzID0gJ2xldmVsJyBvciAnY29sdW1uJyBpbmRpY2VzLCB2YWx1ZXMgPSBhcnJheXMgbGlrZToKCQkJCQkkbWlkID0+IGJveC1wYXJhbWV0ZXJzICdibCcgPT4gaW50ICdidCcgPT4gaW50ICovCglwcm90ZWN0ZWQgJGxkYXRhOyAvKiBoaWdoLWxldmVsIGRhdGEgZnJvbSA6OkxheW91dCgpLCBhcnJheSBvZiAobm9uLW51bWVyaWMta2V5ZWQpCgkJCQkJCWNoYXJ0IHBhcmFtZXRlcnMsIGxpa2U6ICd3aWR0aCc9PmludCAnaGVpZ2h0Jz0+aW50ICdib3h3aWR0aCc9PmludCAnYm94aGVpZ2h0Jz0+aW50ICovCglwcm90ZWN0ZWQgJGRhc2hlczsgLy9hcnJheSBvZiBzZWdtZW50IGxlbmd0aHMgKHB4KSBmb3IgZGFzaGVkIGxpbmVzCglwcm90ZWN0ZWQgJGRvdHM7IC8vZGl0dG8gZm9yIGRvdHRlZCBsaW5lcwoKLyoJZnVuY3Rpb24gX19kZXN0cnVjdCgpCgl7CgkJdW5zZXQoJHRoaXMtPm1vZCk7CS8vZW5zdXJlIHJlZmVyZW5jZSBpcyBjbGVhcmVkCgl9CiovCgkvKioKCU1ha2VDaGFydDoKCUBtb2Q6IHJlZmVyZW5jZSB0byBtb2R1bGUgb2JqZWN0CglAYmRhdGE6IHJlZmVyZW5jZSB0byBhcnJheSBvZiBicmFja2V0LXRhYmxlIGRhdGEKCUBjaGFydGZpbGU6IHBhdGgvbmFtZSBvZiBmaWxlIHRvIGJlIGNyZWF0ZWQgb3IgcmVwbGFjZWQKCUBzdHlsZWZpbGUgb3B0aW9uYWwgbmFtZSBvZiAuY3NzIGZpbGUgdG8gdXNlIGluc3RlYWQgb2YgbG9nZ2VkIGRhdGEKCUB0aXRsZXMgb3B0aW9uYWwsIG1vZGUgZW51bSBmb3IgdHlwZSBvZiB0aXRsZXMgdG8gaW5jbHVkZSBpbiBib3hlczoKCSAwIGZvcihwcmludGVyLXJlYWR5KSBubyBsYWJlbHMgaW4gdW5wbGF5ZWQgbWF0Y2hlcwogCSAxIGZvciBub3JtYWwgbGFiZWxzIGluIGFsbCBib3hlcyAoZGVmYXVsdCkKCSAyIGZvciBpbmNsdWRpbmcgbWF0Y2ggbnVtYmVycyBpbiAncGxhbicgbW9kZQoJUmV0dXJuczogVFJVRSBvbiBzdWNjZXNzLCBvciBsYW5nLWtleSBmb3IgZXJyb3IgbWVzc2FnZSBpZjogYmFkIG5vLiBvZiB0ZWFtcywgY3NzIHBhcnNpbmcgZmFpbGVkCgkqLwoJcHVibGljIGZ1bmN0aW9uIE1ha2VDaGFydCgmJG1vZCwmJGJkYXRhLCRjaGFydGZpbGUsJHN0eWxlZmlsZT1GQUxTRSwkdGl0bGVzPTEpCgl7CgkJJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCQkkc3FsID0gJ1NFTEVDVCBDT1VOVCgxKSBBUyBjb3VudCBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdG10X3RlYW1zIFdIRVJFIGJyYWNrZXRfaWQ9PyBBTkQgZmxhZ3MhPTInOwoJCSR0ZWFtc2NvdW50ID0gKGludCkkZGItPkdldE9uZSgkc3FsLGFycmF5KCRiZGF0YVsnYnJhY2tldF9pZCddKSk7CgkJaWYoJHRlYW1zY291bnQgPT0gMCkKCQkJcmV0dXJuICdpbmZvX25vbWF0Y2gnOyAvL2lmIG5vIHRlYW0sIHRoZW4gbm8gbWF0Y2gKCQlsaXN0KCRtaW50ZWFtcywkbWF4dGVhbXMpID0gJG1vZC0+R2V0TGltaXRzKCRiZGF0YVsndHlwZSddKTsKCQlpZigkdGVhbXNjb3VudCA+ICRtYXh0ZWFtcyB8fCAkdGVhbXNjb3VudCA8ICRtaW50ZWFtcykKCQkJcmV0dXJuICdlcnJfdmFsdWUnOwoJCSRjc3MgPSBuZXcgdG10U3R5bGVyKCk7CgkJaWYoISRzdHlsZWZpbGUgJiYgJGJkYXRhWydjaGFydGNzcyddKQoJCQkkc3R5bGVmaWxlID0gJGJkYXRhWydjaGFydGNzcyddOwoJCWlmKCRzdHlsZWZpbGUpCgkJewoJCQkkY29uZmlnID0gY21zbXMoKS0+R2V0Q29uZmlnKCk7CgkJCSRjc3NwYXRoID0gY21zX2pvaW5fcGF0aCgkY29uZmlnWyd1cGxvYWRzX3BhdGgnXSwKCQkJCSRtb2QtPkdldFByZWZlcmVuY2UoJ3VwbG9hZHNfZGlyJyksJHN0eWxlZmlsZSk7CgkJCWlmKGZpbGVfZXhpc3RzKCRjc3NwYXRoKSkKCQkJewoJCQkJaWYoISRjc3MtPlBhcnNlKCRjc3NwYXRoKSkKCQkJCQlyZXR1cm4gJ2Vycl9zdHlsZXMnOwoJCQl9CgkJfQoJCSR0aGlzLT5tb2QgPSAkbW9kOwoJCSR0aGlzLT5sYXlvdXQgPSBhcnJheSgpOwoJCSR0aGlzLT5sZGF0YSA9IGFycmF5KCk7CgkJJHRoaXMtPmRhc2hlcyA9IGFycmF5KDMsMyk7CgkJJHRoaXMtPmRvdHMgPSBhcnJheSgwLjIsNCk7CgkJLy9oaWdoLXVzZSB2YXJpYWJsZXMgc2VudCBkb3duc3RyZWFtIGluIGFycmF5LGZvciBleHRyYWN0aW9uIHRoZXJlCgkJJHBhcmFtcyA9IGFycmF5KCk7CgkJJHBhcmFtc1sndGVhbXNjb3VudCddID0gJHRlYW1zY291bnQ7CgkJLy9pbnRlci1ib3ggZ2FwcwoJCSRsdyA9ICRjc3MtPnB4c2l6ZSgkY3NzLT5HZXRXaXRoRGVmYXVsdCgnLmxpbmUnLCd3aWR0aCcsJzJweCcpKTsgLy9saW5lIHdpZHRoCgkJJGJobSA9ICRjc3MtPnB4c2l6ZSgkY3NzLT5HZXRTaWRlKCcuYm94JywnbWFyZ2luJywncmlnaHQnKSk7IC8vaG9yeiBtYXJnaW4KCQkkZ3cgPSAkY3NzLT5weHNpemUoJGNzcy0+R2V0V2l0aERlZmF1bHQoJy5jaGFydCcsJ2dhcHdpZHRoJywnMjBweCcpKTsgLy9nYXAgd2lkdGgKCQkkZ3cgPSBtYXgoJGx3KzQsJGJobSoyICsgJGd3KTsKCQkkcGFyYW1zWydndyddID0gJGd3OyAvL2luY2x1ZGVzIGJveCBtYXJnaW5zLCBpZiBhbnkKCQkkYnZtID0gJGNzcy0+cHhzaXplKCRjc3MtPkdldFNpZGUoJy5ib3gnLCdtYXJnaW4nLCd0b3AnKSk7IC8vdmVydCBtYXJnaW4KCQkkcGFyYW1zWydnaCddID0gbWF4KDIsJGJ2bSoyKTsgLy9pbmNsdWRlcyBib3ggbWFyZ2lucywgaWYgYW55CgkJLy9jaGFydCBtYXJnaW5zCgkJJHRwID0gJGNzcy0+cHhzaXplKCRjc3MtPkdldFNpZGUoJy5jaGFydCcsJ3BhZGRpbmcnLCd0b3AnKSk7CgkJaWYoJHRwIDwgMikgJHRwID0gMjsKCQlpZigkdGl0bGVzID09IDAgJiYgJHRwIDwgNDApICR0cCA9IDQwOwoJCSR0aCA9ICRjc3MtPnB4c2l6ZSgkY3NzLT5HZXRXaXRoRGVmYXVsdCgnLmNoYXJ0JywnZm9udC1zaXplJywnMTJwdCcpKTsgLy9zcGFjZSBmb3IgdGl0bGUgc3RyaW5nCgkJJHBhcmFtc1sndG0nXSA9ICR0cCArICR0aDsgLy90b3AKCQkkcCA9ICRjc3MtPnB4c2l6ZSgkY3NzLT5HZXRTaWRlKCcuY2hhcnQnLCdwYWRkaW5nJywncmlnaHQnKSk7CgkJJHJtID0gKCRiaG0rJHAgPj0gNSkgPyAkcDo1OwoJCWlmKCR0aXRsZXMgPT0gMCAmJiAkcm0gPCA0MCkgJHJtID0gNDA7CgkJJHBhcmFtc1sncm0nXSA9ICRybTsgLy9yaWdodAoJCSRwID0gJGNzcy0+cHhzaXplKCRjc3MtPkdldFNpZGUoJy5jaGFydCcsJ3BhZGRpbmcnLCdib3R0b20nKSk7CgkJJGJtID0gKCRidm0rJHAgPj0gNSkgPyAkcDo1OwoJCWlmKCR0aXRsZXMgPT0gMCAmJiAkYm0gPCA0MCkgJGJtID0gNDA7CgkJJHBhcmFtc1snYm0nXSA9ICRibTsgLy9ib3R0b20KCQkkcCA9ICRjc3MtPnB4c2l6ZSgkY3NzLT5HZXRTaWRlKCcuY2hhcnQnLCdwYWRkaW5nJywnbGVmdCcpKTsKCQkkbG0gPSAoJGJobSskcCA+PSA1KSA/ICRwOjU7CgkJaWYoJHRpdGxlcyA9PSAwICYmICRsbSA8IDQwKSAkbG0gPSA0MDsKCQkkcGFyYW1zWydsbSddID0gJGxtOyAvL2xlZnQKCQkvL2JveCBwYXJhbWV0ZXJzCgkJJGJoID0gJGNzcy0+cHhzaXplKCRjc3MtPkdldFdpdGhEZWZhdWx0KCcuYm94JywnaGVpZ2h0JywnNDBweCcpKTsKCQkkcGFyYW1zWydiaCddID0gJGJoOyAvL2NvbnRlbnQtaGVpZ2h0CgkJJHBhcmFtc1snYncnXSA9ICRjc3MtPnB4c2l6ZSgkY3NzLT5HZXRXaXRoRGVmYXVsdCgnLmJveCcsJ3dpZHRoJywnMTAwcHgnKSk7IC8vY29udGVudC13aWR0aAoJCSRicCA9ICRjc3MtPnB4c2l6ZSgkY3NzLT5HZXRXaXRoRGVmYXVsdCgnLmJveCcsJ3BhZGRpbmcnLCcwJykpOwoJCSRwYXJhbXNbJ2JwJ10gPSAkYnA7IC8vYWxsLXNpZGVzJyBwYWRkaW5nCgkJJGJsdyA9ICRjc3MtPnB4c2l6ZSgkY3NzLT5HZXRXaXRoRGVmYXVsdCgnLmJveCcsJ2JvcmRlci13aWR0aCcsJzFweCcpKTsKCQkkcGFyYW1zWydibHcnXSA9ICRibHc7IC8vYWxsIHNpZGVzJyBib3JkZXItd2lkdGgKCQkkcGFyYW1zWydiaG0nXSA9ICRiaG07IC8vbC9yIG1hcmdpbgoJCSRwYXJhbXNbJ2J2bSddID0gJGJ2bTsgLy90L2IgbWFyZ2luCgkJJHRoaXMtPkxheW91dCgkcGFyYW1zLCRkYiwkYmRhdGFbJ2JyYWNrZXRfaWQnXSk7IC8vc2V0dXAgYm94ZXMnIHNpemUsIHBvc2l0aW9uIGFuZCBjaGFydCBzaXplCgkJJHRoaXMtPkJveGVzKCRiZGF0YSwkZGIsJHRpdGxlcyk7Ly9zZXR1cCBib3hlcycgdGV4dCBhbmQgc3R5bGUKCgkJaWYoJHRpdGxlcyA9PSAwKQoJCXsKCQkJLy9wcmludC1jaGFydCBtaW4gc2l6ZQoJCQkkbWluID0gJGNzcy0+cHhzaXplKCRjc3MtPkdldFdpdGhEZWZhdWx0KCcuY2hhcnQnLCdtaW53aWR0aCcsJzc3MHB0JykpOwoJCQlpZigkdGhpcy0+bGRhdGFbJ3dpZHRoJ10gPCAkbWluKQoJCQkJJHRoaXMtPmxkYXRhWyd3aWR0aCddID0gJG1pbjsKCQkJJG1pbiA9ICRjc3MtPnB4c2l6ZSgkY3NzLT5HZXRXaXRoRGVmYXVsdCgnLmNoYXJ0JywnbWluaGVpZ2h0JywnNTI2cHQnKSk7CgkJCWlmKCR0aGlzLT5sZGF0YVsnaGVpZ2h0J10gPCAkbWluKQoJCQkJJHRoaXMtPmxkYXRhWydoZWlnaHQnXSA9ICRtaW47CgkJfQoJCSRjdyA9ICR0aGlzLT5sZGF0YVsnd2lkdGgnXTsKCQkkY2ggPSAkdGhpcy0+bGRhdGFbJ2hlaWdodCddOwoJCQoJCS8vY2hlY2sgZm9yIGN1c3RvbSAudHRmIGZpbGVzCgkJJGNvbmZpZyA9IGNtc21zKCktPkdldENvbmZpZygpOwoJCSRyZWwgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCd1cGxvYWRzX2RpcicpOwoJCSRjdXN0b20gPSBjbXNfam9pbl9wYXRoKCRjb25maWdbJ3VwbG9hZHNfcGF0aCddLCRyZWwpOwoJCWlmKGlzX2RpcigkY3VzdG9tKSkKCQl7CgkJCSRwYXQgPSBjbXNfam9pbl9wYXRoKCRjdXN0b20sJyoudHRmJyk7IC8vdFBERiByZWNvZ25pc2VzIG9ubHkgbG93ZXItY2FzZSBmaWxlbmFtZXMKCQkJaWYoZ2xvYigkcGF0LEdMT0JfTk9TT1JUKSkKCQkJCWRlZmluZSgnX1NZU1RFTV9UVEZPTlRTJywkdHRmcGF0aCk7CgkJfQoJCSRlbmMgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdleHBvcnRfZW5jb2RpbmcnLCdVVEYtOCcpOwoJCSR1dGYgPSAoc3RyY2FzZWNtcCgkZW5jLCdVVEYtOCcpID09IDApOwoJCSRwZGYgPSBuZXcgdEZQREYoKCRjdyA+ICRjaCkgPyAnTCc6J1AnLCdweCcsYXJyYXkoJGN3LCRjaCksJHV0Zik7CgoJCSRwZGYtPlNldEF1dG9QYWdlQnJlYWsoRkFMU0UpOwoJCSRwZGYtPkFkZFBhZ2UoKTsKCgkJaWYoJHRpdGxlcyA+IDApCgkJewoJCQkkYmFjayA9ICRjc3MtPmhleDJyZ2IoJGNzcy0+R2V0V2l0aERlZmF1bHQoJy5jaGFydCcsJ2JhY2tncm91bmQtY29sb3InLEZBTFNFKSk7CgkJCS8vVE9ETyBzdXBwb3J0IGltYWdlLWJhY2tncm91bmQKCQkJaWYoJGJhY2spCgkJCXsKCQkJCSRwZGYtPlNldEZpbGxDb2xvcigkYmFja1swXSwkYmFja1sxXSwkYmFja1syXSk7CgkJCQkkcGRmLT5SZWN0KDAsMCwkY3csJGNoLCdGJyk7IC8vbm8gY2hhcnQgYm9yZGVyCgkJCX0KCQl9CgkJLy9kaXNwbGF5IHRpdGxlCgkJJGNsYXNzID0gJy5jaGFydCc7CgkJJHRpdGxlID0gKCRiZGF0YVsnbmFtZSddKSA/ICRiZGF0YVsnbmFtZSddIDogJG1vZC0+TWlzc2luZ05hbWUoKTsKCQkkZnQgPSAkY3NzLT5HZXRXaXRoRGVmYXVsdCgkY2xhc3MsJ2ZvbnQtZmFtaWx5Jywnc2FucycpOwoJCSRzdHlsZSA9ICRjc3MtPkdldFdpdGhEZWZhdWx0KCRjbGFzcywnZm9udC13ZWlnaHQnLCdub3JtYWwnKTsKCQkkYXR0ciA9ICgkc3R5bGUgIT0gJ2JvbGQnKSA/ICcnIDogJ2InOwoJCSRzdHlsZSA9ICRjc3MtPkdldFdpdGhEZWZhdWx0KCRjbGFzcywnZm9udC1zdHlsZScsJ25vcm1hbCcpOwoJCWlmKHN0cnBvcygkc3R5bGUsJ2l0YWxpYycpICE9PSBGQUxTRSB8fCBzdHJwb3MoJHN0eWxlLCdvYmxpcXVlJykgIT09IEZBTFNFKQoJCQkkYXR0ciAuPSAnaSc7CgkJJHN0eWxlID0gJGNzcy0+R2V0V2l0aERlZmF1bHQoJGNsYXNzLCd0ZXh0LWRlY29yYXRpb24nLCdub25lJyk7CgkJaWYoc3RycG9zKCRzdHlsZSwndW5kZXJsaW5lJykgIT09IEZBTFNFKQoJCQkkYXR0ciAuPSAndSc7CgkJJHBkZi0+QWRkRm9udCgkZnQsJGF0dHIpOwoJCSRwZGYtPlNldEZvbnQoJGZ0LCRhdHRyLChpbnQpKCR0aCo3Mi85Ni0wLjAxKSsxKTsgLy90RlBERiBuZWVkcyBmb250IHNpemUgYXMgcHRzCgkJaWYoJHRpdGxlcyA+IDApCgkJewoJCQkkYyA9ICRjc3MtPmhleDJyZ2IoJGNzcy0+R2V0V2l0aERlZmF1bHQoJGNsYXNzLCdjb2xvcicsJyMwMDAnKSk7CgkJCSRwZGYtPlNldFRleHRDb2xvcigkY1swXSwkY1sxXSwkY1syXSk7CgkJfQoJCSRwZGYtPlNldFhZKCRsbSwkdHApOwoJCSRwZGYtPkNlbGwoJHRoaXMtPmxkYXRhWyd3aWR0aCddLSRsbS0kcm0sJHRoLCR0aXRsZSwwLDAsJ0MnKTsKCgkJJHBhcmFtcyA9IGFycmF5KCk7CgkJJHBhcmFtc1sncGRmJ10gPSAmJHBkZjsKCQkkcGFyYW1zWydndyddID0gJGd3OwoJCSRwYXJhbXNbJ2x3J10gPSAkbHc7CgkJaWYoJHRpdGxlcyA+IDApCgkJCSRsYyA9ICRjc3MtPmhleDJyZ2IoJGNzcy0+R2V0V2l0aERlZmF1bHQoJy5saW5lJywnY29sb3InLCcjMDAwJykpOwoJCWVsc2UKCQkJJGxjID0gRkFMU0U7CgkJJHBhcmFtc1snbGMnXSA9ICRsYzsKCQkkcGFyYW1zWydscyddID0gJGNzcy0+R2V0V2l0aERlZmF1bHQoJy5saW5lJywnc3R5bGUnLCdzb2xpZCcpOwoJCSRwYXJhbXNbJ2JsdyddID0gJGJsdzsKCQkkcGFyYW1zWydicCddID0gJGJwOwoKCQkkcGFyYW1zWydib3hzdHlsZXMnXSA9IGFycmF5KCk7CgkJZm9yZWFjaChhcnJheSgKCQkgJ2RlZmx0Jz0+JycsCgkJICdub25mJz0+Jzpub25maXJtJywKCQkgJ2Zpcm0nPT4nOmZpcm0nLAoJCSAnZG9uZSc9Pic6cGxheWVkJywKCQkgJ2ZpbmFsJz0+Jzp3aW5uZXInKSBhcyAkdHlwZT0+JHN1ZmZpeCkKCQl7CgkJCSRjbGFzcyA9ICcuYm94Jy4kc3VmZml4OwoJCQkkZnQgPSAkY3NzLT5HZXRXaXRoRGVmYXVsdCgkY2xhc3MsJ2ZvbnQtZmFtaWx5Jywnc2FucycpOwoJCQkkc3R5bGUgPSAkY3NzLT5HZXRXaXRoRGVmYXVsdCgkY2xhc3MsJ2ZvbnQtd2VpZ2h0Jywnbm9ybWFsJyk7CgkJCSRhdHRyID0gKCRzdHlsZSAhPSAnYm9sZCcpID8gJycgOiAnYic7CgkJCSRzdHlsZSA9ICRjc3MtPkdldFdpdGhEZWZhdWx0KCRjbGFzcywnZm9udC1zdHlsZScsJ25vcm1hbCcpOwoJCQlpZihzdHJwb3MoJHN0eWxlLCdpdGFsaWMnKSAhPT0gRkFMU0UgfHwgc3RycG9zKCRzdHlsZSwnb2JsaXF1ZScpICE9PSBGQUxTRSkKCQkJCSRhdHRyIC49ICdpJzsKCQkJJHN0eWxlID0gJGNzcy0+R2V0V2l0aERlZmF1bHQoJGNsYXNzLCd0ZXh0LWRlY29yYXRpb24nLCdub25lJyk7CgkJCWlmKHN0cnBvcygkc3R5bGUsJ3VuZGVybGluZScpICE9PSBGQUxTRSkKCQkJCSRhdHRyIC49ICd1JzsKCQkJJHBkZi0+QWRkRm9udCgkZnQsJGF0dHIpOwoJCQkkc2l6ZSA9ICRjc3MtPnB4c2l6ZSgkY3NzLT5HZXRXaXRoRGVmYXVsdCgkY2xhc3MsJ2ZvbnQtc2l6ZScsJGJoLzQpKTsKCQkJaWYoJHRpdGxlcyA+IDApCgkJCXsKCQkJCSRiYyA9ICRjc3MtPmhleDJyZ2IoJGNzcy0+R2V0V2l0aERlZmF1bHQoJGNsYXNzLCdib3JkZXItY29sb3InLCRsYykpOwoJCQkJJGZjID0gJGNzcy0+aGV4MnJnYigkY3NzLT5HZXRXaXRoRGVmYXVsdCgkY2xhc3MsJ2JhY2tncm91bmQtY29sb3InLCRiYWNrKSk7Ly9UT0RPIHN1cHBvcnQgaW1hZ2UvdXJsCgkJCQkkdGMgPSAkY3NzLT5oZXgycmdiKCRjc3MtPkdldFdpdGhEZWZhdWx0KCRjbGFzcywnY29sb3InLCRsYykpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJGJjID0gRkFMU0U7CgkJCQkkZmMgPSBGQUxTRTsKCQkJCSR0YyA9IEZBTFNFOwoJCQl9CgkJCSRwYXJhbXNbJ2JveHN0eWxlcyddWyR0eXBlXSA9IGFycmF5KAoJCQkgJ2J3Jz0+JGNzcy0+cHhzaXplKCRjc3MtPkdldFdpdGhEZWZhdWx0KCRjbGFzcywnYm9yZGVyLXdpZHRoJywkbHcpKSwKCQkJICdiYyc9PiRiYywKCQkJICdicyc9PiRjc3MtPkdldFdpdGhEZWZhdWx0KCRjbGFzcywnYm9yZGVyLXN0eWxlJywnc29saWQnKSwKCQkJICdmaWxsJz0+JGZjLAoJCQkgJ2ZvbnQnPT4kZnQsCgkJCSAnY29sb3InPT4kdGMsCgkJCSAnc2l6ZSc9PihpbnQpKCRzaXplKjcyLzk2LTAuMDEpKzEsCgkJCSAnYXR0cic9PiRhdHRyCgkJCSApOwoJCX0KCQkkdGhpcy0+RHJhdygkcGFyYW1zKTsKCgkJaWYoJGJkYXRhWyduYW1lJ10pCgkJCSRwZGYtPlNldFRpdGxlKCRiZGF0YVsnbmFtZSddLFRSVUUpOwoJCSRwZGYtPk91dHB1dCgkY2hhcnRmaWxlLCdGJyk7CgkJcmV0dXJuIFRSVUU7Cgl9CgoJLyoqCglDaGFydFNpemU6CglDYWxsIHRoaXMgYWZ0ZXIgc3VjY2Vzc2Z1bCBNYWtlQ2hhcnQoKQoJUmV0dXJuczogYXJyYXkgd2l0aCBjaGFydCBkaW1lbnNpb25zKHB4KSwgb3IgRkFMU0UKCSovCglwdWJsaWMgZnVuY3Rpb24gQ2hhcnRTaXplKCkKCXsKCQlpZihpc19hcnJheSgkdGhpcy0+bGRhdGEpKQoJCQlyZXR1cm4gYXJyYXkoCgkJCSdoZWlnaHQnPT4kdGhpcy0+bGRhdGFbJ2hlaWdodCddLAoJCQknd2lkdGgnPT4kdGhpcy0+bGRhdGFbJ3dpZHRoJ10pOwoJCWVsc2UKCQkJcmV0dXJuIEZBTFNFOwoJfQoKCS8vbWV0aG9kcyB0byBiZSBzdWItY2xhc3NlZCBmb3Igc3BlY2lmaWMgY2hhcnQtdHlwZQoJYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIExheW91dCgmJHBhcmFtcyl7fQoJYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIEJveGVzKCYkYmRhdGEsJiRkYiwkdGl0bGVzPTEpe3JldHVybiBGQUxTRTt9CglhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gRHJhdygmJHBhcmFtcyl7fQp9Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.tmtChartDE.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0KEMpIDIwMTQtMjAxNSBUb20gUGhhbmUgPHRwZ3d3QG9uZXBvc3QubmV0PgpSZWZlciB0byBsaWNlbmNlIGFuZCBvdGhlciBkZXRhaWxzIGF0IHRoZSB0b3Agb2YgZmlsZSBUb3VybmV5Lm1vZHVsZS5waHAKTW9yZSBpbmZvIGF0IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvdG91cm5leQoqLwpjbGFzcyB0bXRDaGFydERFIGV4dGVuZHMgdG10Q2hhcnRCYXNlCnsKCXByaXZhdGUgJHJuZDsKCglmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCgl7CgkJJHRoaXMtPnJuZCA9IG5ldyB0bXRSb3VuZHNERSgpOwoJfQoKCS8qKgoJTGF5b3V0OgoJQHBhcmFtczogcmVmZXJlbmNlIHRvIGFycmF5IG9mIGNoYXJ0IHBhcmFtZXRlcnMgc2V0IGluIHBhcmVudDo6TWFrZUNoYXJ0KCkKCVNldHVwIGJveCBhbmQgY2hhcnQgbGF5b3V0IHBhcmFtZXRlcnMgaW4gcGFyZW50OjpsYXlvdXRbXSBhbmQgcGFyZW50OjpsZGF0YVtdCgkqLwoJZnVuY3Rpb24gTGF5b3V0KCYkcGFyYW1zKQoJewoJCWV4dHJhY3QoJHBhcmFtcyk7Ci8qZ2V0CSR0ZWFtc2NvdW50CgkJJGd3IGluY2x1ZGVzIG1hcmdpbnMKCQkkZ2ggaW5jbHVkZXMgbWFyZ2lucwoJCSR0bSBjaGFydCBtYXJnaW4KCQkkcm0gIgoJCSRibSAiCgkJJGxtICIKCQkkYmggYm94IGNvbnRlbnQKCQkkYncgIgoJCSRicCBib3ggcGFkZGluZwoJCSRibHcgYm94IGJvcmRlciB3aWR0aAoJCSRiaG0gaG9yeiBtYXJnaW4KCQkkYnZtIHZlcnQgbWFyZ2luCiovCgkJJGx2bCA9ICgobG9nKCR0ZWFtc2NvdW50LDIpLTAuMDAwMSl8MCkgKyAxOyAvL3dpbm5lcnMnIGRyYXcgc2VtaS1maW5hbCBiYW5kCgkJJFRDID0gcG93KDIsJGx2bCk7IC8vdGVhbXMrYnllcyBpbiBiYW5kIDEKCQkkbHZsbWlkID0gJGx2bCsxOyAvL2ZpcnN0IGxvc2VycycgZHJhdyBiYW5kCgkJJGJsID0gJGxtICsgJGJobTsgLy9pbnNpZGUgbWFyZ2luCgkJJHRvcCA9ICR0bSArICRidm07IC8vaW5zaWRlIG1hcmdpbgoJCSR4dHJhID0gKCRibHcrJGJwKSoyOwoJCSRkaWZmdiA9ICRiaCArICR4dHJhICsgJGdoOwoJCSRkaWZmaCA9ICRidyArICR4dHJhICsgJGd3OwoJCSRtaWQgPSAxOwoJCS8vd2lubmVycycgZHJhdwoJCWZvcigkbHZsPTE7ICRsdmw8JGx2bG1pZDsgJGx2bCsrKQoJCXsKCQkJJGRhdGEgPSBhcnJheSgpOwoJCQkkc3RhcnQgPSBwb3coMiwkbHZsLTEpOwoJCQkkc3RlcCA9ICRzdGFydCoyOwoJCQlmb3IoJGk9JHN0YXJ0OyAkaTwkVEM7ICRpKz0kc3RlcCkKCQkJewoJCQkJJGJ0ID0gJHRvcCArICRkaWZmdiooJGktMSkvMjsKCQkJCSRkYXRhWyRtaWRdID0gYXJyYXkoJ2JsJz0+JGJsLCdidCc9PiRidCk7IC8vaW5zaWRlIG1hcmdpbnMKCQkJCSRtaWQrKzsKCQkJfQoJCQkkdGhpcy0+bGF5b3V0WyRsdmxdID0gJGRhdGE7CgkJCSRibCArPSAkZGlmZmg7CgkJfQoJCSRzZW1pID0gYXJyYXkoJ2JsJz0+JGJsLSRkaWZmaCwnYnQnPT4kYnQpOyAvL3JlbWVtYmVyIHNlbWkgZm9yIGxhdGVyIHVwZGF0ZQoJCS8vbG9jYXRlIGxvc2VycycgZHJhdyBzbGlnaHRseSBiZWxvdyB0aGUgYm90dG9tIG9mIHRoZSB3aW5uZXJzLCBmcm9tIDJuZCBjb2x1bW4KCQkkaXRlbSA9IGVuZCgkdGhpcy0+bGF5b3V0WzFdKTsKCQkkdG1sID0gJGl0ZW1bJ2J0J10gKyAkZGlmZnY7CgkJJGJsID0gJGxtICsgJGRpZmZoOwoJCSRsdmxtYXggPSAkbHZsbWlkKjMgLSA0OyAvL2ZpbmFsIGJhbmQKCQkkc3RlcCA9IDE7CgkJZm9yKCRsdmw9JGx2bG1pZDsgJGx2bDwkbHZsbWF4OyAkbHZsKyspCgkJewoJCQkkb2RkID0gKCRsdmwtJGx2bG1pZCkgJSAyOyAvL29kZCdzIGhhbHZlIG5leHQtcm91bmQgbWF0Y2hlcywgZXZlbidzIGRvbid0CgkJCWlmKCEkb2RkICYmICRsdmwgPiAkbHZsbWlkKQoJCQl7CgkJCQkvL3VwZGF0ZSB2ZXJ0aWNhbCBwYXJhbWV0ZXJzIGZvciBiYW5kCgkJCQkkaXRlbSA9IHJlc2V0KCR0aGlzLT5sYXlvdXRbJGx2bC0xXSk7CgkJCQkkaSA9ICRpdGVtWydidCddOwoJCQkJJGl0ZW0gPSBuZXh0KCR0aGlzLT5sYXlvdXRbJGx2bC0xXSk7CgkJCQkkaSArPSAkaXRlbVsnYnQnXSArICRiaCArICR4dHJhOwoJCQkJJHRtbCA9ICgkaS0kYmgtJHh0cmEpLzI7CgkJCQkkc3RlcCArPSAkc3RlcDsKCQkJfQoKCQkJJHN0b3AgPSAkVEMvcG93KDIsMisoaW50KSgoJGx2bC0kbHZsbWlkKS8yKSk7CgkJCSRkYXRhID0gYXJyYXkoKTsKCQkJZm9yKCRpPTA7ICRpPCRzdG9wOyAkaSsrKQoJCQl7CgkJCQkkYnQgPSAkdG1sICsgJGkqJHN0ZXAqJGRpZmZ2OwoJCQkJJGRhdGFbJG1pZF0gPSBhcnJheSgnYmwnPT4kYmwsJ2J0Jz0+JGJ0KTsKCQkJCSRtaWQrKzsKCQkJfQoJCQkkdGhpcy0+bGF5b3V0WyRsdmxdID0gJGRhdGE7CgkJCSRibCArPSAkZGlmZmg7CgkJfQoKCQkkdGhpcy0+bGF5b3V0WyRsdmxdWyRtaWRdID0gYXJyYXkoJ2JsJz0+JGJsLSRkaWZmaCwnYnQnPT4kc2VtaVsnYnQnXSk7IC8vcmlnaHQtanVzdGlmeSB0aGUgZmluYWwKCgkJJHRoaXMtPmxkYXRhWydzZW1pJ10gPSAkc2VtaTsKCQkkdGhpcy0+bGRhdGFbJ3dpbm5lcmJhbmRzJ10gPSAkbHZsbWlkLTE7CgkJJHRoaXMtPmxkYXRhWyd0dXJuZXInXSA9ICRsdmxtYXgtMTsgLy9saW5lcyByZXZlcnNlLWRpcmVjdGlvbiBhdCB0aGlzIGxldmVsCgkJJHRoaXMtPmxkYXRhWydmaW5hbGJhbmQnXSA9ICRsdmxtYXg7CgkJJGl0ZW0gPSByZXNldCgkZGF0YSk7CgkJJHRoaXMtPmxkYXRhWyd3aWR0aCddID0gKGludCkoJGl0ZW1bJ2JsJ10gKyAkYncgKyAkeHRyYSArICRiaG0gKyAkZ3cvMiArICRybSk7CgkJJGl0ZW0gPSBlbmQoJHRoaXMtPmxheW91dFskbHZsbWlkXSk7CgkJJHRoaXMtPmxkYXRhWydoZWlnaHQnXSA9IChpbnQpKCRpdGVtWydidCddICsgJGJoICsgJHh0cmEgKyAkYnZtICsgJGJtKTsKCQkkdGhpcy0+bGRhdGFbJ2JveHdpZHRoJ10gPSAkYncgKyAkeHRyYTsgLy9pbmNsdWRlcyBwYWRkaW5nIGFuZCBib3JkZXJzLCBub3QgbWFyZ2lucwoJCSR0aGlzLT5sZGF0YVsnYm94aGVpZ2h0J10gPSAkYmggKyAkeHRyYTsgLy9kaXR0bwoJfQoKCS8qKgoJQm94ZXM6CglAYmRhdGE6IHJlZmVyZW5jZSB0byBhcnJheSBvZiBicmFja2V0LXRhYmxlIGRhdGEKCUBkYjogcmVmZXJlbmNlIHRvIGRhdGFiYXNlIGNvbm5lY3Rpb24gb2JqZWN0CglAdGl0bGVzIG9wdGlvbmFsLCBtb2RlIGVudW0gZm9yIHR5cGUgb2YgdGl0bGVzIHRvIGluY2x1ZGUgaW4gYm94ZXM6CgkgMCBmb3IgKHByaW50ZXItcmVhZHkpIG5vIGxhYmVscyBpbiB1bnBsYXllZCBtYXRjaGVzCiAJIDEgZm9yIG5vcm1hbCBsYWJlbHMgaW4gYWxsIGJveGVzIChkZWZhdWx0KQoJIDIgZm9yIGluY2x1ZGluZyBtYXRjaCBudW1iZXJzIGluICdwbGFuJyBtb2RlCglTZXR1cCBwYXJlbnQ6OmxheW91dFtdIHBhcmFtZXRlcnMgJ3R5cGUnIGFuZCAndGV4dCcgZm9yIGFsbCBjaGFydCBib3hlcwoJUmV0dXJuczogVFJVRSwgb3IgRkFMU0UgdXBvbiBlcnJvcgoJKi8KCWZ1bmN0aW9uIEJveGVzKCYkYmRhdGEsJiRkYiwkdGl0bGVzPTEpCgl7CgkJJGJyYWNrZXRfaWQgPSAoaW50KSRiZGF0YVsnYnJhY2tldF9pZCddOwoJCSRwcmVmID0gY21zX2RiX3ByZWZpeCgpOwoJCS8vZ3JhYiBBTEwgdGVhbSBpZGVudGlmaWVycyAoaW5jbHVkaW5nIGZsYWdnZWQgZGVsZXRpb25zIG1heWJlIG5lZWRlZCBmb3IgcHJpb3ItbWF0Y2ggc3RhdHVzKQoJCSRzcWwgPSAnU0VMRUNUIHRlYW1faWQgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X3RlYW1zIFdIRVJFIGJyYWNrZXRfaWQ9PyBPUkRFUiBCWSB0ZWFtX2lkJzsKCQkkdGVhbXMgPSAkZGItPkdldENvbCgkc3FsLGFycmF5KCRicmFja2V0X2lkKSk7CgkJaWYoISR0ZWFtcykKCQkJcmV0dXJuIEZBTFNFOwoJCSR0YyA9IGNvdW50KCR0ZWFtcyk7CgkJJG5hbWVzID0gYXJyYXkoJy0xJz0+TlVMTCk7IC8vYnllcyB0cmVhdGVkIHNwZWNpYWxseQoJCWZvcmVhY2goJHRlYW1zIGFzICR0aWQpCgkJCSRuYW1lc1skdGlkXSA9ICR0aGlzLT5tb2QtPlRlYW1OYW1lKCR0aWQpOwoJCS8vJHRjIGFzLWlzIG5vdCBzdWl0YWJsZSBmb3IgY2FsY3VsYXRpbmcgbGV2ZWxzCgkJJGx2bG1heCA9ICR0aGlzLT5sZGF0YVsnZmluYWxiYW5kJ107Ly90b3RhbCBsZXZlbHMgaW4gdGhlIGRyYXcKCQkvL2xldmVscyBpbiB0aGUgd2lubmVycycgZHJhdyArIDEgPSBsb3dlc3QgbGV2ZWwgaW4gbG9zZXJzJyBkcmF3CgkJJGx2bG1pZCA9ICR0aGlzLT5sZGF0YVsnd2lubmVyYmFuZHMnXSArIDE7CgkJJGZtdCA9ICRiZGF0YVsnYXRmb3JtYXQnXTsKCQlpZighJGZtdCkKCQkJJGZtdCA9ICR0aGlzLT5tb2QtPkdldFpvbmVEYXRlRm9ybWF0KCRiZGF0YVsndGltZXpvbmUnXSkuJyAnLiR0aGlzLT5tb2QtPkdldFByZWZlcmVuY2UoJ3RpbWVfZm9ybWF0Jyk7CgkJJGR0ID0gbmV3IERhdGVUaW1lKCcxOTAwLTAxLTAxIDAwOjAwOjAwJyxuZXcgRGF0ZVRpbWVab25lKCRiZGF0YVsndGltZXpvbmUnXSkpOwoJCSRyZWxhdGlvbnMgPSAkdGhpcy0+bW9kLT5SZXN1bHRUZW1wbGF0ZXMoJGJyYWNrZXRfaWQpOwoKCQkkc3FsID0gJ1NFTEVDVCAqIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzIFdIRVJFIGJyYWNrZXRfaWQ9PyBBTkQgZmxhZ3M9MCBPUkRFUiBCWSBtYXRjaF9pZCc7CgkJJG1hdGNoZXMgPSAkZGItPkdldEFzc29jKCRzcWwsYXJyYXkoJGJyYWNrZXRfaWQpKTsKCQkvL2Rvbid0IHVzZSAkbWF0Y2hlcyBpbnRlcm5hbCBwb2ludGVyIGZvciBpdGVyYXRpbmcsIGRvd25zdHJlYW0gemFwcyB0aGF0CgkJJGFsbG1pZHMgPSBhcnJheV9rZXlzKCRtYXRjaGVzKTsgLy9kb24ndCBhc3N1bWUgY29udGlndW91cwoJCSRtaWQgPSByZXNldCgkYWxsbWlkcyk7CgkJLy9wcm9jZXNzIGFsbCBib3hlcwoJCWZvcmVhY2goJHRoaXMtPmxheW91dCBhcyAkbHZsPT4mJGNvbHVtbikKCQl7CgkJCWZvcmVhY2goJGNvbHVtbiBhcyAmJHJvdykKCQkJewoJCQkJJG1kYXRhID0gJiRtYXRjaGVzWyRtaWRdOyAvL3JlZmVyZW5jZSwgY29udGVudCBtYXkgYmUgY2hhbmdlZAoJCQkJJHRBID0gJG1kYXRhWyd0ZWFtQSddOwoJCQkJJHRCID0gJG1kYXRhWyd0ZWFtQiddOwoJCQkJaWYoJHRpdGxlcyAhPSAyKSAvL25vdCAncGxhbicgbW9kZQoJCQkJewoJCQkJCWlmKCR0QSAhPSBGQUxTRSAmJiAkdEIgIT0gRkFMU0UpCgkJCQkJewoJCQkJCQkkbmFtZUEgPSAoIWVtcHR5KCRuYW1lc1skdEFdKSkgPyAkbmFtZXNbJHRBXSA6IEZBTFNFOwoJCQkJCQkkbmFtZUIgPSAoIWVtcHR5KCRuYW1lc1skdEJdKSkgPyAkbmFtZXNbJHRCXSA6IEZBTFNFOwoJCQkJCQlpZigkbmFtZUEgJiYgJG5hbWVCKQoJCQkJCQl7CgkJCQkJCQlzd2l0Y2goJG1kYXRhWydzdGF0dXMnXSkKCQkJCQkJCXsKCQkJCQkJCWNhc2UgVG91cm5leTo6U09GVDoKCQkJCQkJCWNhc2UgVG91cm5leTo6QVNPRlQ6CgkJCQkJCQkJJHR5cGUgPSAnbm9uZic7CgkJCQkJCQkJZ290byBmaXJtMTsKCQkJCQkJCQkvL25vIGJyZWFrIGhlcmUKCQkJCQkJCWNhc2UgVG91cm5leTo6RklSTToKCQkJCQkJCWNhc2UgVG91cm5leTo6VE9MRDoKCQkJCQkJCWNhc2UgVG91cm5leTo6QVNLRUQ6CgkJCQkJCQljYXNlIFRvdXJuZXk6OkFGSVJNOgoJCQkJCQkJCSR0eXBlID0gJ2Zpcm0nOwpmaXJtMToKCQkJCQkJCQkkcmVsID0gc3ByaW50ZigkcmVsYXRpb25zWyd2cyddLCRuYW1lQSwkbmFtZUIpOwoJCQkJCQkJCSRhdCA9ICgkbWRhdGFbJ3BsYWNlJ10pID8gJG1kYXRhWydwbGFjZSddIDogJyc7CgkJCQkJCQkJaWYoJG1kYXRhWydwbGF5d2hlbiddKQoJCQkJCQkJCXsKCQkJCQkJCQkJJGR0LT5tb2RpZnkoJG1kYXRhWydwbGF5d2hlbiddKTsKCQkJCQkJCQkJJGF0IC49ICcgJy5kYXRlKCRmbXQsJGR0LT5nZXRUaW1lc3RhbXAoKSk7CgkJCQkJCQkJfQoJCQkJCQkJCSR0ZXh0ID0gJHJlbC4iXG4iLnRyaW0oJGF0KTsKCQkJCQkJCQlicmVhazsKCQkJCQkJCWNhc2UgVG91cm5leTo6Rk9SRkI6CgkJCQkJCQkJaWYoISRtZGF0YVsnc2NvcmUnXSkgLy9ubyByZWFzb24gZ2l2ZW4KCQkJCQkJCQkJJG1kYXRhWydzY29yZSddID0gJGJkYXRhWydmb3JmZWl0J107CgkJCQkJCQljYXNlIFRvdXJuZXk6OldPTkE6CgkJCQkJCQkJJHR5cGUgPSAoJGx2bCA8ICRsdmxtYXgpID8gJ2RvbmUnIDogJ2ZpbmFsJzsKCQkJCQkJCQkkcmVsID0gc3ByaW50ZigkcmVsYXRpb25zWydkZWYnXSwkbmFtZUEsJG5hbWVCKTsKCQkJCQkJCQkkdGV4dCA9ICRyZWwuIlxuIi50cmltKCRtZGF0YVsnc2NvcmUnXSk7CgkJCQkJCQkJYnJlYWs7CgkJCQkJCQljYXNlIFRvdXJuZXk6OkZPUkZBOgoJCQkJCQkJCWlmKCEkbWRhdGFbJ3Njb3JlJ10pCgkJCQkJCQkJCSRtZGF0YVsnc2NvcmUnXSA9ICRiZGF0YVsnZm9yZmVpdCddOwoJCQkJCQkJY2FzZSBUb3VybmV5OjpXT05COgoJCQkJCQkJCSR0eXBlID0gKCRsdmwgPCAkbHZsbWF4KSA/ICdkb25lJyA6ICdmaW5hbCc7CgkJCQkJCQkJJHJlbCA9IHNwcmludGYoJHJlbGF0aW9uc1snZGVmJ10sJG5hbWVCLCRuYW1lQSk7CgkJCQkJCQkJJHRleHQgPSAkcmVsLiJcbiIudHJpbSgkbWRhdGFbJ3Njb3JlJ10pOwoJCQkJCQkJCWJyZWFrOwoJCQkJCQkJY2FzZSBUb3VybmV5OjpOT1dJTjoKCQkJCQkJCQkkdHlwZSA9ICdkb25lJzsKCQkJCQkJCQkkcmVsID0gc3ByaW50ZigkcmVsYXRpb25zWyd2cyddLCRuYW1lQSwkbmFtZUIpOwoJCQkJCQkJCSR0ZXh0ID0gJHJlbC4iXG4iLiRiZGF0YVsnbm9tYXRjaCddOwoJCQkJCQkJCWJyZWFrOwoJCQkJCQkJZGVmYXVsdDoKCQkJCQkJCQkkdHlwZSA9ICdkZWZsdCc7CgkJCQkJCQkJJHJlbCA9IHNwcmludGYoJHJlbGF0aW9uc1sndnMnXSwkbmFtZUEsJG5hbWVCKTsKCQkJCQkJCQkkdGV4dCA9ICRyZWwuIlxuIi50cmltKCRtZGF0YVsnc2NvcmUnXSk7CgkJCQkJCQkJYnJlYWs7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJZWxzZWlmKCRuYW1lQSkKCQkJCQkJewoJCQkJCQkJJHR5cGUgPSAnZG9uZSc7CgkJCQkJCQkkdGV4dCA9ICJcbiIuJG5hbWVBLiJcbiIuJGJkYXRhWydieWUnXTsKCQkJCQkJfQoJCQkJCQllbHNlaWYoJG5hbWVCKQoJCQkJCQl7CgkJCQkJCQkkdHlwZSA9ICdkb25lJzsKCQkJCQkJCSR0ZXh0ID0gIlxuIi4kbmFtZUIuIlxuIi4kYmRhdGFbJ2J5ZSddOwoJCQkJCQl9CgkJCQkJCWVsc2VpZigkdEEgPT0gLTEgJiYgJHRCID09IC0xKQoJCQkJCQkJJHR5cGUgPSAnaGlkZSc7CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJJHR5cGUgPSAnZGVmbHQnOwoJCQkJCQkJJHRleHQgPSAiXG4iLiR0aGlzLT5tb2QtPkxhbmcoJ2Vycl9tYXRjaCcpOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWVsc2UgLy9laXRoZXIgb3IgYm90aCB0ZWFtcyB1bmtub3duCgkJCQkJewoJCQkJCQlzd2l0Y2goJG1kYXRhWydzdGF0dXMnXSkKCQkJCQkJewoJCQkJCQkgY2FzZSBUb3VybmV5OjpTT0ZUOgoJCQkJCQkgY2FzZSBUb3VybmV5OjpBU09GVDoKCQkJCQkJCSR0eXBlID0gJ25vbmYnOwoJCQkJCQkJZ290byBmaXJtMjsKCQkJCQkJCS8vbm8gYnJlYWsgaGVyZQoJCQkJCQkgY2FzZSBUb3VybmV5OjpGSVJNOgoJCQkJCQkgY2FzZSBUb3VybmV5OjpUT0xEOgoJCQkJCQkgY2FzZSBUb3VybmV5OjpBU0tFRDoKCQkJCQkJIGNhc2UgVG91cm5leTo6QUZJUk06CgkJCQkJCQkkdHlwZSA9ICdmaXJtJzsKZmlybTI6CgkJCQkJCQlpZighKCR0QSB8fCAkdEIpIHx8ICR0QSA9PSAnLTEnIHx8ICR0QiA9PSAnLTEnKQoJCQkJCQkJCSRyZWwgPSAoJHRpdGxlcyA9PSAxKT8iXG4iLiR0aGlzLT5ybmQtPkxldmVsTmFtZSgkdGhpcy0+bW9kLCRiZGF0YSwkdGMsJGx2bCk6Jyc7CgkJCQkJCQllbHNlaWYoJHRBKQoJCQkJCQkJewoJCQkJCQkJCSRvdGhlciA9ICR0aGlzLT5ybmQtPkFub25MZXZlbE5hbWUoJHRoaXMtPm1vZCwkYmRhdGEsJHRjLCRsdmwpOwoJCQkJCQkJCSRyZWwgPSBzcHJpbnRmKCRyZWxhdGlvbnNbJ3ZzJ10sJG90aGVyLCRuYW1lc1skdEJdKTsKCQkJCQkJCX0KCQkJCQkJCWJyZWFrOwoJCQkJCQkgZGVmYXVsdDoKCQkJCQkJCSR0eXBlID0gJ2RlZmx0JzsKCQkJCQkJCSRyZWwgPSAoJHRpdGxlcyA9PSAxKT8iXG4iLiR0aGlzLT5ybmQtPkxldmVsTmFtZSgkdGhpcy0+bW9kLCRiZGF0YSwkdGMsJGx2bCk6Jyc7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCQkkYXQgPSAoJG1kYXRhWydwbGFjZSddKSA/ICRtZGF0YVsncGxhY2UnXSA6ICcnOwoJCQkJCQlpZigkbWRhdGFbJ3BsYXl3aGVuJ10pCgkJCQkJCXsKCQkJCQkJCSRkdC0+bW9kaWZ5KCRtZGF0YVsncGxheXdoZW4nXSk7CgkJCQkJCQkkYXQgLj0gJyAnLmRhdGUoJGZtdCwkZHQtPmdldFRpbWVzdGFtcCgpKTsKCQkJCQkJfQoJCQkJCQkkdGV4dCA9ICRyZWwuIlxuIi50cmltKCRhdCk7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZSAvL3BsYW4gbW9kZQoJCQkJewoJCQkJCWlmICgkbWRhdGFbJ3N0YXR1cyddIDwgVG91cm5leTo6TVJFUykKCQkJCQl7CgkJCQkJCXN3aXRjaCgkbWRhdGFbJ3N0YXR1cyddKQoJCQkJCQl7CgkJCQkJCSBjYXNlIFRvdXJuZXk6OlNPRlQ6CgkJCQkJCSBjYXNlIFRvdXJuZXk6OkFTT0ZUOgoJCQkJCQkJJHR5cGUgPSAnbm9uZic7CgkJCQkJCQlicmVhazsKCQkJCQkJIGNhc2UgVG91cm5leTo6RklSTToKCQkJCQkJIGNhc2UgVG91cm5leTo6VE9MRDoKCQkJCQkJIGNhc2UgVG91cm5leTo6QVNLRUQ6CgkJCQkJCSBjYXNlIFRvdXJuZXk6OkFGSVJNOgoJCQkJCQkJJHR5cGUgPSAnZmlybSc7CgkJCQkJCQlicmVhazsKCQkJCQkJIGRlZmF1bHQ6CgkJCQkJCQkkdHlwZSA9ICdkZWZsdCc7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCX0KCQkJCQllbHNlCgkJCQkJCSR0eXBlID0gJ2RvbmUnOwoJCQkJCSRyZWwgPSAkdGhpcy0+bW9kLT5MYW5nKCdtYXRjaG51bScsJG1pZCkuIlxuIjsKCQkJCQkkYW5vbiA9IFRSVUU7CgkJCQkJaWYoJHRBICE9IEZBTFNFICYmICR0QSAhPSAtMSkKCQkJCQl7CgkJCQkJCSRhbm9uID0gRkFMU0U7CgkJCQkJCSRyZWwgLj0gJG5hbWVzWyR0QV0uIlxuIjsKCQkJCQkJaWYoJHRCICE9IEZBTFNFKQoJCQkJCQkJJHJlbCAuPSAoKCR0QiAhPSAtMSk/JG5hbWVzWyR0Ql06JGJkYXRhWydieWUnXSk7CgkJCQkJCWVsc2UKCQkJCQkJCSRyZWwgLj0gJHRoaXMtPnJuZC0+TWF0Y2hUZWFtSURfVGVhbSgkdGhpcy0+bW9kLCRiZGF0YSwkdGMsJG1hdGNoZXMsJG1pZCwkbHZsLCR0QSk7CgkJCQkJfQoJCQkJCWVsc2VpZigkdEIgIT0gRkFMU0UgJiYgJHRCICE9IC0xKQoJCQkJCXsKCQkJCQkJJGFub24gPSBGQUxTRTsKCQkJCQkJaWYgKCR0QSA9PSAtMSkKCQkJCQkJCSRyZWwgLj0gJG5hbWVzWyR0Ql0uIlxuIi4kYmRhdGFbJ2J5ZSddOwoJCQkJCQllbHNlCgkJCQkJCQkkcmVsIC49ICR0aGlzLT5ybmQtPk1hdGNoVGVhbUlEX1RlYW0oJHRoaXMtPm1vZCwkYmRhdGEsJHRjLCRtYXRjaGVzLCRtaWQsJGx2bCwkdEIpLgoJCQkJCQkJIlxuIi4kbmFtZXNbJHRCXTsKCQkJCQl9CgkJCQkJaWYoJGFub24pIC8vYm90aCB0ZWFtcyB1bmtub3duIG9yIGJ5ZQoJCQkJCXsKCQkJCQkJJG9uZSA9ICR0aGlzLT5ybmQtPk1hdGNoVGVhbUlEX01pZCgkdGhpcy0+bW9kLCRiZGF0YSwkdGMsJG1hdGNoZXMsJG1pZCwkbHZsKTsgLy9zZXRzICRtYXRjaGVzIGludGVybmFsIHB0cgoJCQkJCQkkaGVyZSA9IGtleSgkbWF0Y2hlcyk7CgkJCQkJCWlmKCRoZXJlKQoJCQkJCQl7CgkJCQkJCQkkdHdvID0gJHRoaXMtPnJuZC0+TWF0Y2hUZWFtSURfTWlkKCR0aGlzLT5tb2QsJGJkYXRhLCR0YywkbWF0Y2hlcywkbWlkLCRsdmwsJGhlcmUtMSk7CgkJCQkJCQkvL3ByZXZlbnQgZGlzcGxheSBvZiAyIGJ5ZXMKCQkJCQkJCWlmKCRvbmUgIT0gJGJkYXRhWydieWUnXSB8fCAkdHdvICE9ICRvbmUpCgkJCQkJCQkJJHJlbCAuPSAkb25lLiJcbiIuJHR3bzsKCQkJCQkJCWVsc2UKCQkJCQkJCQkkdHlwZSA9ICdoaWRlJzsKCQkJCQkJfQoJCQkJCQllbHNlCgkJCQkJCQkkcmVsIC49ICR0aGlzLT5ybmQtPkxldmVsTmFtZSgkdGhpcy0+bW9kLCRiZGF0YSwkdGMsJGx2bCk7CgkJCQkJfQoJCQkJCSRhdCA9ICgkbWRhdGFbJ3BsYWNlJ10pID8gJG1kYXRhWydwbGFjZSddIDogJyc7CgkJCQkJaWYoJG1kYXRhWydwbGF5d2hlbiddKQoJCQkJCXsKCQkJCQkJJGR0LT5tb2RpZnkoJG1kYXRhWydwbGF5d2hlbiddKTsKCQkJCQkJJGF0IC49ICcgJy5kYXRlKCRmbXQsJGR0LT5nZXRUaW1lc3RhbXAoKSk7CgkJCQkJfQoJCQkJCSR0ZXh0ID0gJHJlbC4iXG4iLnRyaW0oJGF0KTsKCQkJCX0KCQkJCXVuc2V0KCRtZGF0YSk7CgkJCQkkcm93Wyd0eXBlJ10gPSAkdHlwZTsKCQkJCSRyb3dbJ3RleHQnXSA9ICR0ZXh0OwoJCQkJJG1pZCA9IG5leHQoJGFsbG1pZHMpOwoJCQl9CgkJCXVuc2V0KCRyb3cpOwoJCX0KCQl1bnNldCgkY29sdW1uKTsKCQlyZXR1cm4gVFJVRTsKCX0KCgkvKioKCURyYXc6CglAcGFyYW1zOiByZWZlcmVuY2UgdG8gYXJyYXkgb2YgdmFyaWFibGVzIHBhc3NlZCBmcm9tIHBhcmVudDo6TWFrZUNoYXJ0KCksCgkJbWVtYmVycyBhcmUgJ3BkZicsJ2d3JywnbHcnLCdsYycsJ2xzJywnYmx3JywnYnAnLCdib3hzdHlsZXMnCglEcmF3IHRoZSBjaGFydAoJKi8KCWZ1bmN0aW9uIERyYXcoJiRwYXJhbXMpCgl7CgkJZXh0cmFjdCgkcGFyYW1zKTsKCQl1bnNldCgkcGFyYW1zKTsKCQkkYmggPSAkdGhpcy0+bGRhdGFbJ2JveGhlaWdodCddOyAvL2luY2x1ZGVzIHBhZGRpbmcgYW5kIGJvcmRlcnMKCQkkYncgPSAkdGhpcy0+bGRhdGFbJ2JveHdpZHRoJ107IC8vZGl0dG8KCQkkb2ZmcyA9ICRibHcgKyAkYnA7CgkJJHh0cmEgPSAkb2ZmcyAqIDI7CgkJJHRjaCA9IChpbnQpKCgkYmgtJHh0cmEpLzQpOyAvL3RleHQgY2VsbCBoZWlnaHQKCQkkdGN3ID0gJGJ3IC0gJHh0cmE7CgkJJGx2bG1pZCA9ICR0aGlzLT5sZGF0YVsnd2lubmVyYmFuZHMnXSArIDE7CgkJJFIgPSAkdGhpcy0+bGRhdGFbJ3R1cm5lciddOwoJCSRkYXNoam9pbnMgPSBGQUxTRTsKCQkkZG9qb2lucyA9IFRSVUU7CgkJc3dpdGNoKCRscykKCQl7CgkJIGNhc2UgJ2RvdHRlZCc6CgkJIGNhc2UgJ2Rhc2hlZCc6CgkJCSRkYXNoam9pbnMgPSBUUlVFOwoJCQlicmVhazsKCQkgY2FzZSAnbm9uZSc6CgkJIGNhc2UgJ2hpZGRlbic6CgkJCSRkb2pvaW5zID0gRkFMU0U7CgkJIGRlZmF1bHQ6CgkJCWJyZWFrOwoJCX0KCgkJZm9yZWFjaCgkdGhpcy0+bGF5b3V0IGFzICRsdmw9PiYkY29sdW1uKQoJCXsKCQkJJGZpcnN0ID0gcmVzZXQoJGNvbHVtbik7CgkJCSR4ID0gZmxvYXR2YWwoJGZpcnN0WydibCddKTsgLy9pbnNpZGUgbWFyZ2luCgkJCWlmKCRkb2pvaW5zKQoJCQl7CgkJCQkvL2JveCBib3JkZXJzIG1heSBiZSBzdHlsZWQgZm9yIGFueSB3aWR0aCwgc28gZHJhdyB0aGUgam9pbnMgZmlyc3QKCQkJCSRqb2lucyA9IGFycmF5KCk7CgkJCQlmb3JlYWNoKCRjb2x1bW4gYXMgJiRyb3cpCgkJCQl7CgkJCQkJaWYgKGVtcHR5KCRyb3dbJ3R5cGUnXSkgfHwgJHJvd1sndHlwZSddICE9ICdoaWRlJykKCQkJCQkJJGpvaW5zW10gPSBhcnJheSgkeCskYncsZmxvYXR2YWwoJHJvd1snYnQnXSkrJGJoLzIpOyAvL1snYnQnXSBpbnNpZGUgbWFyZ2luCgkJCQl9CgkJCQl1bnNldCgkcm93KTsKCgkJCQkkcGRmLT5TZXRMaW5lV2lkdGgoJGx3KTsKCQkJCWlmKCRsYykKCQkJCQkkcGRmLT5TZXREcmF3Q29sb3IoJGxjWzBdLCRsY1sxXSwkbGNbMl0pOwoJCQkJc3dpdGNoKCRscykKCQkJCXsKCQkJCSBjYXNlICdkb3R0ZWQnOgoJCQkJCSRwZGYtPlNldExpbmVEYXNoKCR0aGlzLT5kb3RzLCRibHcqMyxUUlVFKTsgLy9hc3N1bWUgYWxsIGxpbmVzIHN0YXJ0IGZyb20gYm94IGJvcmRlcgoJCQkJCWJyZWFrOwoJCQkJIGNhc2UgJ2Rhc2hlZCc6CgkJCQkJJHBkZi0+U2V0TGluZURhc2goJHRoaXMtPmRhc2hlcywkYmx3KjMpOwoJCQkJIGRlZmF1bHQ6CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQkkY3YgPSBjb3VudCgkam9pbnMpOwoJCQkJaWYoJGx2bCA8ICRsdmxtaWQpCgkJCQl7CgkJCQkJaWYoJGN2ID4gMSkKCQkJCQl7CgkJCQkJCWZvcigkYz0wOyRjPCRjdi0xOyRjKz0yKQoJCQkJCQl7CgkJCQkJCQkkeDEgPSAkam9pbnNbJGNdWzBdOwoJCQkJCQkJJHkxID0gJGpvaW5zWyRjXVsxXTsKCQkJCQkJCSR5MiA9ICRqb2luc1skYysxXVsxXTsKCQkJCQkJCSR3ID0gJHgxKyRndy8yLSRsdzsKCQkJCQkJCSRwZGYtPkxpbmUoJHgxLCR5MSwkdywkeTEpOwoJCQkJCQkJJHBkZi0+TGluZSgkdywkeTEsJHcsJHkyKTsKCQkJCQkJCSRwZGYtPkxpbmUoJHgxLCR5MiwkdywkeTIpOwoJCQkJCQkJJHkzID0gKCR5MSskeTIpLzI7CgkJCQkJCQkkbnggPSAkeDEgKyAkZ3cgLSAkYmx3KjI7CgkJCQkJCQkkcGRmLT5MaW5lKCRueCwkeTMsJHcsJHkzKTsKCQkJCQkJfQoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQkkeDEgPSAkam9pbnNbMF1bMF07CgkJCQkJCSR5MSA9ICRqb2luc1swXVsxXTsKCQkJCQkJJHgyID0gJHgxICsgJGd3IC0gJGJsdyoyOwoJCQkJCQkkcGRmLT5MaW5lKCR4MSwkeTEsJHgyLCR5MSk7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZSAvL2xvc2VycycgZHJhdyBiYW5kIGFuZCBmaW5hbAoJCQkJewoJCQkJCSRzdG9wID0gMTYvcG93KDIsMisoaW50KSgoJGx2bC0kbHZsbWlkKS8yKSk7CgkJCQkJJG9kZCA9ICgkbHZsLSRsdmxtaWQpICUgMjsgLy9vZGQncyBoYWx2ZSBuZXh0LXJvdW5kIG1hdGNoZXMsIGV2ZW4ncyBkb24ndAoJCQkJCWlmKCRvZGQpCgkJCQkJewoJCQkJCQlpZigkbHZsIDwgJFIpCgkJCQkJCXsKCQkJCQkJCWZvcigkYz0wOyRjPCRjdi0xOyRjKz0yKQoJCQkJCQkJewoJCQkJCQkJCSR4MSA9ICRqb2luc1skY11bMF07CgkJCQkJCQkJJHkxID0gJGpvaW5zWyRjXVsxXTsKCQkJCQkJCQkkeTIgPSAkam9pbnNbJGMrMV1bMV07CgkJCQkJCQkJJHcgPSAkeDErJGd3LzItJGx3OwoJCQkJCQkJCSRwZGYtPkxpbmUoJHgxLCR5MSwkdywkeTEpOwoJCQkJCQkJCSRwZGYtPkxpbmUoJHcsJHkxLCR3LCR5Mik7CgkJCQkJCQkJJHBkZi0+TGluZSgkeDEsJHkyLCR3LCR5Mik7CgkJCQkJCQkJJHkzID0gKCR5MSskeTIpLzI7CgkJCQkJCQkJJG54ID0gJHgxICsgJGd3IC0gJGJsdyoyOwoJCQkJCQkJCSRwZGYtPkxpbmUoJG54LCR5MywkdywkeTMpOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCWVsc2VpZigkbHZsID09ICRSKQoJCQkJCQl7CgkJCQkJCQkkcm93ID0gZW5kKCRjb2x1bW4pOwoJCQkJCQkJJHgxID0gZmxvYXR2YWwoJHJvd1snYmwnXSskYncrKCRndy0kbHcpLzIpOwoJCQkJCQkJJHkxID0gZmxvYXR2YWwoJHJvd1snYnQnXSskYmgvMik7CgkJCQkJCQkkeDIgPSAkeDEtKCRndy0kbHcpLzIgKyAkYmx3OwoJCQkJCQkJJHgzID0gJHRoaXMtPmxkYXRhWydzZW1pJ11bJ2JsJ10gKyAkYncgKyAkYmx3OwoJCQkJCQkJJHkzID0gJHRoaXMtPmxkYXRhWydzZW1pJ11bJ2J0J10gKyAkYmgvMjsKCQkJCQkJCSRwZGYtPkxpbmUoJHgyLCR5MSwkeDEsJHkxKTsKCQkJCQkJCSRwZGYtPkxpbmUoJHgxLCR5MSwkeDEsJHkzKTsKCQkJCQkJCSRwZGYtPkxpbmUoJHgzLCR5MywkeDEsJHkzKTsKCQkJCQkJfQoJCQkJCX0KCQkJCQllbHNlaWYoJGx2bCA8ICRSKSAvL2V2ZW4gJiBub3QgdG93YXJkIGVuZAoJCQkJCXsKCQkJCQkJZm9yKCRjPTA7JGM8JGN2OyRjKyspCgkJCQkJCXsKCQkJCQkJCSR4MSA9ICRqb2luc1skY11bMF07CgkJCQkJCQkkeDIgPSAkeDErJGd3LSRibHcqMjsKCQkJCQkJCSR5MSA9ICRqb2luc1skY11bMV07CgkJCQkJCQkkcGRmLT5MaW5lKCR4MSwkeTEsJHgyLCR5MSk7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQl1bnNldCgkam9pbnMpOwoJCQkJaWYoJGRhc2hqb2lucykKCQkJCQkkcGRmLT5TZXRMaW5lRGFzaChGQUxTRSk7CgkJCX0KCgkJCWZvcmVhY2goJGNvbHVtbiBhcyAmJHJvdykKCQkJewoJCQkJJHR5cGUgPSAoIWVtcHR5KCRyb3dbJ3R5cGUnXSkpID8gJHJvd1sndHlwZSddIDogJ2RlZmx0JzsKCQkJCWlmKCR0eXBlID09ICdoaWRlJykKCQkJCQljb250aW51ZTsKCQkJCSRzdHlsZSA9ICRib3hzdHlsZXNbJHR5cGVdOwoJCQkJJGMgPSAkc3R5bGVbJ2ZpbGwnXTsKCQkJCWlmKCRjKQoJCQkJCSRwZGYtPlNldEZpbGxDb2xvcigkY1swXSwkY1sxXSwkY1syXSk7CgkJCQkvLyRtb2RlIGRlZmF1bHQgPSBib3JkZXIsbm8gZmlsbCBERiA9IGJvcmRlciZmaWxsIEYgPSBubyBib3JkZXIgRCBjb3VsZCBiZSBmb3Igbm8gZmlsbCBvciBib3JkZXI/CgkJCQlzd2l0Y2goJHN0eWxlWydicyddKQoJCQkJewoJCQkJIGNhc2UgJ2RvdHRlZCc6CgkJCQkgCSRkYXNoZWQgPSBUUlVFOwoJCQkJCSRwZGYtPlNldExpbmVEYXNoKCR0aGlzLT5kb3RzLDAsVFJVRSk7CgkJCQkJJG1vZGUgPSAoJGMpID8gJ0RGJzonJzsKCQkJCQlicmVhazsKCQkJCSBjYXNlICdkYXNoZWQnOgoJCQkJIAkkZGFzaGVkID0gVFJVRTsKCQkJCQkkcGRmLT5TZXRMaW5lRGFzaCgkdGhpcy0+ZGFzaGVzKTsKCQkJCQkkbW9kZSA9ICgkYykgPyAnREYnOicnOwoJCQkJCWJyZWFrOwoJCQkJIGNhc2UgJ25vbmUnOgoJCQkJIGNhc2UgJ2hpZGRlbic6CgkJCQkJJGRhc2hlZCA9IEZBTFNFOwoJCQkJIAkkbW9kZSA9ICdGJzsKCQkJCQlicmVhazsKCQkJCSBkZWZhdWx0OgoJCQkJCSRkYXNoZWQgPSBGQUxTRTsKCQkJCQkkbW9kZSA9ICgkYykgPyAnREYnOicnOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJaWYoJG1vZGUgIT0gJ0YnKQoJCQkJewoJCQkJCSRwZGYtPlNldExpbmVXaWR0aCgkYmx3KTsKCQkJCQkkYyA9ICRzdHlsZVsnYmMnXTsKCQkJCQlpZigkYykKCQkJCQkJJHBkZi0+U2V0RHJhd0NvbG9yKCRjWzBdLCRjWzFdLCRjWzJdKTsKCQkJCX0KCQkJCSR5ID0gZmxvYXR2YWwoJHJvd1snYnQnXSk7IC8vaW5zaWRlIG1hcmdpbgoJCQkJJHBkZi0+UmVjdCgkeCwkeSwkYncsJGJoLCRtb2RlKTsKCQkJCWlmKCRkYXNoZWQpCgkJCQkJJHBkZi0+U2V0TGluZURhc2goRkFMU0UpOwoJCQkJaWYoIWVtcHR5KCRyb3dbJ3RleHQnXSkpCgkJCQl7CgkJCQkJJHBkZi0+U2V0Rm9udCgkc3R5bGVbJ2ZvbnQnXSwkc3R5bGVbJ2F0dHInXSwkc3R5bGVbJ3NpemUnXSk7CgkJCQkJJGMgPSAkc3R5bGVbJ2NvbG9yJ107CgkJCQkJaWYoJGMpCgkJCQkJCSRwZGYtPlNldFRleHRDb2xvcigkY1swXSwkY1sxXSwkY1syXSk7CgkJCQkJJHBkZi0+U2V0WFkoJHgrJG9mZnMsJHkrJG9mZnMpOwoJCQkJCSRwZGYtPk11bHRpQ2VsbCgkdGN3LCR0Y2gsJHJvd1sndGV4dCddLDAsJ0MnLEZBTFNFKTsKCQkJCX0KCQkJfQoJCQl1bnNldCgkcm93KTsKCQl9CgkJdW5zZXQoJGNvbHVtbik7Cgl9Cn0KCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.tmtChartKO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0KEMpIDIwMTQtMjAxNSBUb20gUGhhbmUgPHRwZ3d3QG9uZXBvc3QubmV0PgpSZWZlciB0byBsaWNlbmNlIGFuZCBvdGhlciBkZXRhaWxzIGF0IHRoZSB0b3Agb2YgZmlsZSBUb3VybmV5Lm1vZHVsZS5waHAKTW9yZSBpbmZvIGF0IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvdG91cm5leQoqLwpjbGFzcyB0bXRDaGFydEtPIGV4dGVuZHMgdG10Q2hhcnRCYXNlCnsKCXByaXZhdGUgJHJuZDsKCglmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCgl7CgkJJHRoaXMtPnJuZCA9IG5ldyB0bXRSb3VuZHNLTygpOwoJfQoKCS8qKgoJTGF5b3V0OgoJQHBhcmFtczogcmVmZXJlbmNlIHRvIGFycmF5IG9mIGNoYXJ0IHBhcmFtZXRlcnMgc2V0IGluIHBhcmVudDo6TWFrZUNoYXJ0KCkKCVNldHVwIGJveCBhbmQgY2hhcnQgbGF5b3V0IHBhcmFtZXRlcnMgaW4gcGFyZW50OjpsYXlvdXRbXSBhbmQgcGFyZW50OjpsZGF0YVtdCgkqLwoJZnVuY3Rpb24gTGF5b3V0KCYkcGFyYW1zKQoJewoJCWV4dHJhY3QoJHBhcmFtcyk7Ci8qZ2V0CSR0ZWFtc2NvdW50CgkJJGd3IGluY2x1ZGVzIG1hcmdpbnMKCQkkZ2ggaW5jbHVkZXMgbWFyZ2lucwoJCSR0bSBjaGFydCBtYXJnaW4KCQkkcm0gIgoJCSRibSAiCgkJJGxtICIKCQkkYmggYm94IGNvbnRlbnQKCQkkYncgIgoJCSRicCBib3ggcGFkZGluZwoJCSRibHcgYm94IGJvcmRlciB3aWR0aAoJCSRiaG0gaG9yeiBtYXJnaW4KCQkkYnZtIHZlcnQgbWFyZ2luCiovCgkJJEJDID0gKChsb2coJHRlYW1zY291bnQsMiktMC4wMDAxKXwwKSArIDE7IC8vY2VpbC1lcXVpdmFsZW50LCBiYW5kcyBjb3VudAoJCSRSID0gKCRCQyA+IDIpID8gJEJDLTEgOiAkQkM7Ly9yZXZlcnNlLWRpcmVjdGlvbiBhdCB0aGlzIGxldmVsCgkJJFRDID0gcG93KDIsJEJDKTsgLy90ZWFtcytieWVzIGluIGJhbmQgMQoJCSRibCA9ICRsbSArICRiaG07IC8vaW5zaWRlIG1hcmdpbgoJCSR0b3AgPSAkdG0gKyAkYnZtOyAvL2luc2lkZSBtYXJnaW4KCQkkeHRyYSA9ICgkYmx3KyRicCkqMjsKCQkkZGlmZnYgPSAkYmggKyAkeHRyYSArICRnaDsKCQkkZGlmZmggPSAkYncgKyAkeHRyYSArICRndzsKCQkkbWlkID0gMTsKCgkJZm9yKCRsdmw9MTsgJGx2bDw9JEJDOyAkbHZsKyspCgkJewoJCQkkZGF0YSA9IGFycmF5KCk7CgkJCSRzdGFydCA9IHBvdygyLCRsdmwtMSk7CgkJCSRzdGVwID0gJHN0YXJ0KjI7CgkJCWZvcigkaT0kc3RhcnQ7ICRpPCRUQzsgJGkrPSRzdGVwKQoJCQl7CgkJCQkkYnQgPSAkdG9wICsgJGRpZmZ2KigkaS0xKS8yOwoJCQkJJGRhdGFbJG1pZF0gPSBhcnJheSgnYmwnPT4kYmwsJ2J0Jz0+JGJ0KTsgLy9pbnNpZGUgbWFyZ2lucwoJCQkJJG1pZCsrOwoJCQl9CgkJCSR0aGlzLT5sYXlvdXRbJGx2bF0gPSAkZGF0YTsKCQkJaWYoJGx2bCA8ICRSKQoJCQkJJGJsICs9ICRkaWZmaDsKCQkJZWxzZWlmKCRsdmwgPiAkUikKCQkJCSRibCAtPSAkZGlmZmg7CgkJfQoKCQkkdGhpcy0+bGRhdGFbJ3R1cm5lciddID0gJFI7CgkJJHRoaXMtPmxkYXRhWydmaW5hbGJhbmQnXSA9ICRCQzsKCQkkaXRlbSA9IHJlc2V0KCRkYXRhKTsKCQkkd2lkZSA9ICRpdGVtWydibCddICsgJGJ3ICsgJHh0cmEgKyAkYmhtICsgJHJtOwoJCWlmKCRCQyA+IDIpCgkJCSR3aWRlICs9ICRndy8yOwoJCSR0aGlzLT5sZGF0YVsnd2lkdGgnXSA9IChpbnQpJHdpZGU7CgkJJGl0ZW0gPSBlbmQoJHRoaXMtPmxheW91dFsxXSk7CgkJJHRoaXMtPmxkYXRhWydoZWlnaHQnXSA9IChpbnQpKCRpdGVtWydidCddICsgJGJoICsgJHh0cmEgKyAkYnZtICsgJGJtKTsKCQkkdGhpcy0+bGRhdGFbJ2JveHdpZHRoJ10gPSAkYncgKyAkeHRyYTsgLy9pbmNsdWRlcyBwYWRkaW5nIGFuZCBib3JkZXJzLCBub3QgbWFyZ2lucwoJCSR0aGlzLT5sZGF0YVsnYm94aGVpZ2h0J10gPSAkYmggKyAkeHRyYTsgLy9kaXR0bwoJfQoKCS8qKgoJQm94ZXM6CglAYmRhdGE6IHJlZmVyZW5jZSB0byBhcnJheSBvZiBicmFja2V0LXRhYmxlIGRhdGEKCUBkYjogcmVmZXJlbmNlIHRvIGRhdGFiYXNlIGNvbm5lY3Rpb24gb2JqZWN0CglAdGl0bGVzIG9wdGlvbmFsLCBtb2RlIGVudW0gZm9yIHR5cGUgb2YgdGl0bGVzIHRvIGluY2x1ZGUgaW4gYm94ZXM6CgkgMCBmb3IgKHByaW50ZXItcmVhZHkpIG5vIGxhYmVscyBpbiB1bnBsYXllZCBtYXRjaGVzCiAJIDEgZm9yIG5vcm1hbCBsYWJlbHMgaW4gYWxsIGJveGVzIChkZWZhdWx0KQoJIDIgZm9yIGluY2x1ZGluZyBtYXRjaCBudW1iZXJzIGluICdwbGFuJyBtb2RlCglTZXR1cCBwYXJlbnQ6OmxheW91dFtdIHBhcmFtZXRlcnMgJ3R5cGUnIGFuZCAndGV4dCcgZm9yIGFsbCBjaGFydCBib3hlcwoJUmV0dXJuczogVFJVRSwgb3IgRkFMU0UgdXBvbiBlcnJvcgoJKi8KCWZ1bmN0aW9uIEJveGVzKCYkYmRhdGEsJiRkYiwkdGl0bGVzPTEpCgl7CgkJJGJyYWNrZXRfaWQgPSAoaW50KSRiZGF0YVsnYnJhY2tldF9pZCddOwoJCSRwcmVmID0gY21zX2RiX3ByZWZpeCgpOwoJCS8vZ3JhYiBBTEwgdGVhbSBpZGVudGlmaWVycyAoaW5jbHVkaW5nIGZsYWdnZWQgZGVsZXRpb25zIG1heWJlIG5lZWRlZCBmb3IgcHJpb3ItbWF0Y2ggc3RhdHVzKQoJCSRzcWwgPSAnU0VMRUNUIHRlYW1faWQgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X3RlYW1zIFdIRVJFIGJyYWNrZXRfaWQ9PyBPUkRFUiBCWSB0ZWFtX2lkJzsKCQkkdGVhbXMgPSAkZGItPkdldENvbCgkc3FsLGFycmF5KCRicmFja2V0X2lkKSk7CgkJaWYoISR0ZWFtcykKCQkJcmV0dXJuIEZBTFNFOwoJCSR0YyA9IGNvdW50KCR0ZWFtcyk7CgkJJG5hbWVzID0gYXJyYXkoJy0xJz0+TlVMTCk7IC8vYnllcyB0cmVhdGVkIHNwZWNpYWxseQoJCWZvcmVhY2goJHRlYW1zIGFzICR0aWQpCgkJCSRuYW1lc1skdGlkXSA9ICR0aGlzLT5tb2QtPlRlYW1OYW1lKCR0aWQpOwoJCS8vJHRjIGFzLWlzIG5vdCBzdWl0YWJsZSBmb3IgY2FsY3VsYXRpbmcgbGV2ZWxzCgkJJGx2bG1heCA9IGNvdW50KCR0aGlzLT5sYXlvdXQpOyAvL21heGltdW0gbGV2ZWwsIGZvciBuYW1pbmcgcHVycG9zZXMKCQkkZm10ID0gJGJkYXRhWydhdGZvcm1hdCddOwoJCWlmKCEkZm10KQoJCQkkZm10ID0gJHRoaXMtPm1vZC0+R2V0Wm9uZURhdGVGb3JtYXQoJGJkYXRhWyd0aW1lem9uZSddKS4nICcuJHRoaXMtPm1vZC0+R2V0UHJlZmVyZW5jZSgndGltZV9mb3JtYXQnKTsKCQkkZHQgPSBuZXcgRGF0ZVRpbWUoJzE5MDAtMDEtMDEgMDA6MDA6MDAnLG5ldyBEYXRlVGltZVpvbmUoJGJkYXRhWyd0aW1lem9uZSddKSk7CgkJJHJlbGF0aW9ucyA9ICR0aGlzLT5tb2QtPlJlc3VsdFRlbXBsYXRlcygkYnJhY2tldF9pZCk7CgoJCSRzcWwgPSAnU0VMRUNUICogRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X21hdGNoZXMgV0hFUkUgYnJhY2tldF9pZD0/IEFORCBmbGFncz0wIE9SREVSIEJZIG1hdGNoX2lkJzsKCQkkbWF0Y2hlcyA9ICRkYi0+R2V0QXNzb2MoJHNxbCxhcnJheSgkYnJhY2tldF9pZCkpOwoJCS8vZG9uJ3QgdXNlICRtYXRjaGVzIGludGVybmFsIHBvaW50ZXIgZm9yIGl0ZXJhdGluZywgZG93bnN0cmVhbSB6YXBzIHRoYXQKCQkkYWxsbWlkcyA9IGFycmF5X2tleXMoJG1hdGNoZXMpOyAvL2Rvbid0IGFzc3VtZSBjb250aWd1b3VzCgkJJG1pZCA9IHJlc2V0KCRhbGxtaWRzKTsKCQkvL3Byb2Nlc3MgYWxsIGJveGVzCgkJZm9yZWFjaCgkdGhpcy0+bGF5b3V0IGFzICRsdmw9PiYkY29sdW1uKQoJCXsKCQkJZm9yZWFjaCgkY29sdW1uIGFzICYkcm93KQoJCQl7CgkJCQkkbWRhdGEgPSAmJG1hdGNoZXNbJG1pZF07IC8vcmVmZXJlbmNlLCBjb250ZW50IG1heSBiZSBjaGFuZ2VkCgkJCQkkdEEgPSAkbWRhdGFbJ3RlYW1BJ107CgkJCQkkdEIgPSAkbWRhdGFbJ3RlYW1CJ107CgkJCQlpZigkdGl0bGVzICE9IDIpIC8vbm90ICdwbGFuJyBtb2RlCgkJCQl7CgkJCQkJaWYoJHRBICE9IEZBTFNFICYmICR0QiAhPSBGQUxTRSkKCQkJCQl7CgkJCQkJCSRuYW1lQSA9ICghZW1wdHkoJG5hbWVzWyR0QV0pKSA/ICRuYW1lc1skdEFdIDogRkFMU0U7CgkJCQkJCSRuYW1lQiA9ICghZW1wdHkoJG5hbWVzWyR0Ql0pKSA/ICRuYW1lc1skdEJdIDogRkFMU0U7CgkJCQkJCWlmKCRuYW1lQSAmJiAkbmFtZUIpCgkJCQkJCXsKCQkJCQkJCXN3aXRjaCgkbWRhdGFbJ3N0YXR1cyddKQoJCQkJCQkJewoJCQkJCQkJY2FzZSBUb3VybmV5OjpTT0ZUOgoJCQkJCQkJY2FzZSBUb3VybmV5OjpBU09GVDoKCQkJCQkJCQkkdHlwZSA9ICdub25mJzsKCQkJCQkJCQlnb3RvIGZpcm0xOwoJCQkJCQkJCS8vbm8gYnJlYWsgaGVyZQoJCQkJCQkJY2FzZSBUb3VybmV5OjpGSVJNOgoJCQkJCQkJY2FzZSBUb3VybmV5OjpUT0xEOgoJCQkJCQkJY2FzZSBUb3VybmV5OjpBU0tFRDoKCQkJCQkJCWNhc2UgVG91cm5leTo6QUZJUk06CgkJCQkJCQkJJHR5cGUgPSAnZmlybSc7CmZpcm0xOgoJCQkJCQkJCSRyZWwgPSBzcHJpbnRmKCRyZWxhdGlvbnNbJ3ZzJ10sJG5hbWVBLCRuYW1lQik7CgkJCQkJCQkJJGF0ID0gKCRtZGF0YVsncGxhY2UnXSkgPyAkbWRhdGFbJ3BsYWNlJ10gOiAnJzsKCQkJCQkJCQlpZigkbWRhdGFbJ3BsYXl3aGVuJ10pCgkJCQkJCQkJewoJCQkJCQkJCQkkZHQtPm1vZGlmeSgkbWRhdGFbJ3BsYXl3aGVuJ10pOwoJCQkJCQkJCQkkYXQgLj0gJyAnLmRhdGUoJGZtdCwkZHQtPmdldFRpbWVzdGFtcCgpKTsKCQkJCQkJCQl9CgkJCQkJCQkJJHRleHQgPSAkcmVsLiJcbiIudHJpbSgkYXQpOwoJCQkJCQkJCWJyZWFrOwoJCQkJCQkJY2FzZSBUb3VybmV5OjpGT1JGQjoKCQkJCQkJCQlpZighJG1kYXRhWydzY29yZSddKSAvL25vIHJlYXNvbiBnaXZlbgoJCQkJCQkJCQkkbWRhdGFbJ3Njb3JlJ10gPSAkYmRhdGFbJ2ZvcmZlaXQnXTsKCQkJCQkJCWNhc2UgVG91cm5leTo6V09OQToKCQkJCQkJCQkkdHlwZSA9ICgkbHZsIDwgJGx2bG1heCkgPyAnZG9uZScgOiAnZmluYWwnOwoJCQkJCQkJCSRyZWwgPSBzcHJpbnRmKCRyZWxhdGlvbnNbJ2RlZiddLCRuYW1lQSwkbmFtZUIpOwoJCQkJCQkJCSR0ZXh0ID0gJHJlbC4iXG4iLnRyaW0oJG1kYXRhWydzY29yZSddKTsKCQkJCQkJCQlicmVhazsKCQkJCQkJCWNhc2UgVG91cm5leTo6Rk9SRkE6CgkJCQkJCQkJaWYoISRtZGF0YVsnc2NvcmUnXSkKCQkJCQkJCQkJJG1kYXRhWydzY29yZSddID0gJGJkYXRhWydmb3JmZWl0J107CgkJCQkJCQljYXNlIFRvdXJuZXk6OldPTkI6CgkJCQkJCQkJJHR5cGUgPSAoJGx2bCA8ICRsdmxtYXgpID8gJ2RvbmUnIDogJ2ZpbmFsJzsKCQkJCQkJCQkkcmVsID0gc3ByaW50ZigkcmVsYXRpb25zWydkZWYnXSwkbmFtZUIsJG5hbWVBKTsKCQkJCQkJCQkkdGV4dCA9ICRyZWwuIlxuIi50cmltKCRtZGF0YVsnc2NvcmUnXSk7CgkJCQkJCQkJYnJlYWs7CgkJCQkJCQljYXNlIFRvdXJuZXk6Ok5PV0lOOgoJCQkJCQkJCSR0eXBlID0gJ2RvbmUnOwoJCQkJCQkJCSRyZWwgPSBzcHJpbnRmKCRyZWxhdGlvbnNbJ3ZzJ10sJG5hbWVBLCRuYW1lQik7CgkJCQkJCQkJJHRleHQgPSAkcmVsLiJcbiIuJGJkYXRhWydub21hdGNoJ107CgkJCQkJCQkJYnJlYWs7CgkJCQkJCQlkZWZhdWx0OgoJCQkJCQkJCSR0eXBlID0gJ2RlZmx0JzsKCQkJCQkJCQkkcmVsID0gc3ByaW50ZigkcmVsYXRpb25zWyd2cyddLCRuYW1lQSwkbmFtZUIpOwoJCQkJCQkJCSR0ZXh0ID0gJHJlbC4iXG4iLnRyaW0oJG1kYXRhWydzY29yZSddKTsKCQkJCQkJCQlicmVhazsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQllbHNlaWYoJG5hbWVBKQoJCQkJCQl7CgkJCQkJCQkkdHlwZSA9ICdkb25lJzsKCQkJCQkJCSR0ZXh0ID0gIlxuIi4kbmFtZUEuIlxuIi4kYmRhdGFbJ2J5ZSddOwoJCQkJCQl9CgkJCQkJCWVsc2VpZigkbmFtZUIpCgkJCQkJCXsKCQkJCQkJCSR0eXBlID0gJ2RvbmUnOwoJCQkJCQkJJHRleHQgPSAiXG4iLiRuYW1lQi4iXG4iLiRiZGF0YVsnYnllJ107CgkJCQkJCX0KCQkJCQkJZWxzZSAvL25laXRoZXIgdGVhbW5hbWUga25vd24KCQkJCQkJewoJCQkJCQkJJHR5cGUgPSAnZGVmbHQnOwoJCQkJCQkJJHRleHQgPSAiXG4iLiR0aGlzLT5tb2QtPkxhbmcoJ2Vycl9tYXRjaCcpOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWVsc2UgLy9laXRoZXIgb3IgYm90aCB0ZWFtcyB1bmtub3duCgkJCQkJewoJCQkJCQlzd2l0Y2goJG1kYXRhWydzdGF0dXMnXSkKCQkJCQkJewoJCQkJCQkgY2FzZSBUb3VybmV5OjpTT0ZUOgoJCQkJCQkgY2FzZSBUb3VybmV5OjpBU09GVDoKCQkJCQkJCSR0eXBlID0gJ25vbmYnOwoJCQkJCQkJZ290byBmaXJtMjsKCQkJCQkJCS8vbm8gYnJlYWsgaGVyZQoJCQkJCQkgY2FzZSBUb3VybmV5OjpGSVJNOgoJCQkJCQkgY2FzZSBUb3VybmV5OjpUT0xEOgoJCQkJCQkgY2FzZSBUb3VybmV5OjpBU0tFRDoKCQkJCQkJIGNhc2UgVG91cm5leTo6QUZJUk06CgkJCQkJCQkkdHlwZSA9ICdmaXJtJzsKZmlybTI6CgkJCQkJCQlpZighKCR0QSB8fCAkdEIpIHx8ICR0QSA9PSAnLTEnIHx8ICR0QiA9PSAnLTEnKQoJCQkJCQkJCSRyZWwgPSAoJHRpdGxlcyA9PSAxKT8iXG4iLiR0aGlzLT5ybmQtPkxldmVsTmFtZSgkdGhpcy0+bW9kLCRiZGF0YSwkbHZsLCRsdmxtYXgpOicnOwoJCQkJCQkJZWxzZWlmKCR0QSkKCQkJCQkJCXsKCQkJCQkJCQkkcm91bmQgPSAkdGhpcy0+cm5kLT5MZXZlbE5hbWUoJHRoaXMtPm1vZCwkYmRhdGEsJGx2bC0xLCRsdmxtYXgpOwoJCQkJCQkJCSRvdGhlciA9ICR0aGlzLT5tb2QtPkxhbmcoJ251bXdpbm5lcicsJHJvdW5kKTsKCQkJCQkJCQkkcmVsID0gc3ByaW50ZigkcmVsYXRpb25zWyd2cyddLCRuYW1lc1skdEFdLCRvdGhlcik7CgkJCQkJCQl9CgkJCQkJCQllbHNlCgkJCQkJCQl7CgkJCQkJCQkJJHJvdW5kID0gJHRoaXMtPnJuZC0+TGV2ZWxOYW1lKCR0aGlzLT5tb2QsJGJkYXRhLCRsdmwtMSwkbHZsbWF4KTsKCQkJCQkJCQkkb3RoZXIgPSAkdGhpcy0+bW9kLT5MYW5nKCdudW13aW5uZXInLCRyb3VuZCk7CgkJCQkJCQkJJHJlbCA9IHNwcmludGYoJHJlbGF0aW9uc1sndnMnXSwkb3RoZXIsJG5hbWVzWyR0Ql0pOwoJCQkJCQkJfQoJCQkJCQkJYnJlYWs7CgkJCQkJCSBkZWZhdWx0OgoJCQkJCQkJJHR5cGUgPSAnZGVmbHQnOwoJCQkJCQkJJHJlbCA9ICgkdGl0bGVzID09IDEpPyJcbiIuJHRoaXMtPnJuZC0+TGV2ZWxOYW1lKCR0aGlzLT5tb2QsJGJkYXRhLCRsdmwsJGx2bG1heCk6Jyc7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCQkkYXQgPSAoJG1kYXRhWydwbGFjZSddKSA/ICRtZGF0YVsncGxhY2UnXSA6ICcnOwoJCQkJCQlpZigkbWRhdGFbJ3BsYXl3aGVuJ10pCgkJCQkJCXsKCQkJCQkJCSRkdC0+bW9kaWZ5KCRtZGF0YVsncGxheXdoZW4nXSk7CgkJCQkJCQkkYXQgLj0gJyAnLmRhdGUoJGZtdCwkZHQtPmdldFRpbWVzdGFtcCgpKTsKCQkJCQkJfQoJCQkJCQkkdGV4dCA9ICRyZWwuIlxuIi50cmltKCRhdCk7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZSAvL3BsYW4gbW9kZQoJCQkJewoJCQkJCWlmICgkbWRhdGFbJ3N0YXR1cyddIDwgVG91cm5leTo6TVJFUykKCQkJCQl7CgkJCQkJCXN3aXRjaCgkbWRhdGFbJ3N0YXR1cyddKQoJCQkJCQl7CgkJCQkJCSBjYXNlIFRvdXJuZXk6OlNPRlQ6CgkJCQkJCSBjYXNlIFRvdXJuZXk6OkFTT0ZUOgoJCQkJCQkJJHR5cGUgPSAnbm9uZic7CgkJCQkJCQlicmVhazsKCQkJCQkJIGNhc2UgVG91cm5leTo6RklSTToKCQkJCQkJIGNhc2UgVG91cm5leTo6VE9MRDoKCQkJCQkJIGNhc2UgVG91cm5leTo6QVNLRUQ6CgkJCQkJCSBjYXNlIFRvdXJuZXk6OkFGSVJNOgoJCQkJCQkJJHR5cGUgPSAnZmlybSc7CgkJCQkJCQlicmVhazsKCQkJCQkJIGRlZmF1bHQ6CgkJCQkJCQkkdHlwZSA9ICdkZWZsdCc7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCX0KCQkJCQllbHNlCgkJCQkJCSR0eXBlID0gJ2RvbmUnOwoJCQkJCSRyZWwgPSAkdGhpcy0+bW9kLT5MYW5nKCdtYXRjaG51bScsJG1pZCkuIlxuIjsKCQkJCQkkYW5vbiA9IFRSVUU7CgkJCQkJaWYoJHRBICE9IEZBTFNFICYmICR0QSAhPSAtMSkKCQkJCQl7CgkJCQkJCSRhbm9uID0gRkFMU0U7CgkJCQkJCSRyZWwgLj0gJG5hbWVzWyR0QV0uIlxuIjsKCQkJCQkJaWYoJHRCICE9IEZBTFNFKQoJCQkJCQkJJHJlbCAuPSAoKCR0QiAhPSAtMSk/JG5hbWVzWyR0Ql06JGJkYXRhWydieWUnXSk7CgkJCQkJCWVsc2UKCQkJCQkJCSRyZWwgLj0gJHRoaXMtPnJuZC0+TWF0Y2hUZWFtSURfVGVhbSgkdGhpcy0+bW9kLCRtYXRjaGVzLCRtaWQsJHRBKTsKCQkJCQl9CgkJCQkJZWxzZWlmKCR0QiAhPSBGQUxTRSAmJiAkdEIgIT0gLTEpCgkJCQkJewoJCQkJCQkkYW5vbiA9IEZBTFNFOwoJCQkJCQlpZiAoJHRBID09IC0xKQoJCQkJCQkJJHJlbCAuPSAkbmFtZXNbJHRCXS4iXG4iLiRiZGF0YVsnYnllJ107CgkJCQkJCWVsc2UKCQkJCQkJCSRyZWwgLj0gJHRoaXMtPnJuZC0+TWF0Y2hUZWFtSURfVGVhbSgkdGhpcy0+bW9kLCRtYXRjaGVzLCRtaWQsJHRCKS4KCQkJCQkJCSJcbiIuJG5hbWVzWyR0Ql07CgkJCQkJfQoJCQkJCWlmKCRhbm9uKSAvL2JvdGggdGVhbXMgdW5rbm93biBvciBieWUKCQkJCQl7CgkJCQkJCSRvbmUgPSAkdGhpcy0+cm5kLT5NYXRjaFRlYW1JRF9NaWQoJHRoaXMtPm1vZCwkbWF0Y2hlcywkbWlkKTsgLy9zZXRzICRtYXRjaGVzIGludGVybmFsIHB0cgoJCQkJCQkkaGVyZSA9IGtleSgkbWF0Y2hlcyk7CgkJCQkJCWlmKCRoZXJlKQoJCQkJCQkJJHJlbCAuPSAkb25lLiJcbiIuJHRoaXMtPnJuZC0+TWF0Y2hUZWFtSURfTWlkKCR0aGlzLT5tb2QsJG1hdGNoZXMsJG1pZCwkaGVyZS0xKTsKCQkJCQkJZWxzZQoJCQkJCQkJJHJlbCAuPSAkdGhpcy0+cm5kLT5MZXZlbE5hbWUoJHRoaXMtPm1vZCwkYmRhdGEsJGx2bCwkbHZsbWF4KTsKCQkJCQl9CgkJCQkJJGF0ID0gKCRtZGF0YVsncGxhY2UnXSkgPyAkbWRhdGFbJ3BsYWNlJ10gOiAnJzsKCQkJCQlpZigkbWRhdGFbJ3BsYXl3aGVuJ10pCgkJCQkJewoJCQkJCQkkZHQtPm1vZGlmeSgkbWRhdGFbJ3BsYXl3aGVuJ10pOwoJCQkJCQkkYXQgLj0gJyAnLmRhdGUoJGZtdCwkZHQtPmdldFRpbWVzdGFtcCgpKTsKCQkJCQl9CgkJCQkJJHRleHQgPSAkcmVsLiJcbiIudHJpbSgkYXQpOwoJCQkJfQoJCQkJdW5zZXQoJG1kYXRhKTsKCQkJCSRyb3dbJ3R5cGUnXSA9ICR0eXBlOwoJCQkJJHJvd1sndGV4dCddID0gJHRleHQ7CgkJCQkkbWlkID0gbmV4dCgkYWxsbWlkcyk7CgkJCX0KCQkJdW5zZXQoJHJvdyk7CgkJfQoJCXVuc2V0KCRjb2x1bW4pOwoJCXJldHVybiBUUlVFOwoJfQoKCS8qKgoJRHJhdzoKCUBwYXJhbXM6IHJlZmVyZW5jZSB0byBhcnJheSBvZiB2YXJpYWJsZXMgcGFzc2VkIGZyb20gcGFyZW50OjpNYWtlQ2hhcnQoKSwKCQltZW1iZXJzIGFyZSAncGRmJywnZ3cnLCdsdycsJ2xjJywnbHMnLCdibHcnLCdicCcsJ2JveHN0eWxlcycKCURyYXcgdGhlIGNoYXJ0CgkqLwoJZnVuY3Rpb24gRHJhdygmJHBhcmFtcykKCXsKCQlleHRyYWN0KCRwYXJhbXMpOwoJCXVuc2V0KCRwYXJhbXMpOwoJCSRiaCA9ICR0aGlzLT5sZGF0YVsnYm94aGVpZ2h0J107IC8vaW5jbHVkZXMgcGFkZGluZyBhbmQgYm9yZGVycwoJCSRidyA9ICR0aGlzLT5sZGF0YVsnYm94d2lkdGgnXTsgLy9kaXR0bwoJCSRvZmZzID0gJGJsdyArICRicDsKCQkkeHRyYSA9ICRvZmZzICogMjsKCQkkdGNoID0gKGludCkoKCRiaC0keHRyYSkvNCk7IC8vdGV4dCBjZWxsIGhlaWdodAoJCSR0Y3cgPSAkYncgLSAkeHRyYTsKCQkkUiA9ICR0aGlzLT5sZGF0YVsndHVybmVyJ107CgkJJGRhc2hqb2lucyA9IEZBTFNFOwoJCSRkb2pvaW5zID0gVFJVRTsKCQlzd2l0Y2goJGxzKQoJCXsKCQkgY2FzZSAnZG90dGVkJzoKCQkgY2FzZSAnZGFzaGVkJzoKCQkJJGRhc2hqb2lucyA9IFRSVUU7CgkJCWJyZWFrOwoJCSBjYXNlICdub25lJzoKCQkgY2FzZSAnaGlkZGVuJzoKCQkJJGRvam9pbnMgPSBGQUxTRTsKCQkgZGVmYXVsdDoKCQkJYnJlYWs7CgkJfQoKCQlmb3JlYWNoKCR0aGlzLT5sYXlvdXQgYXMgJGx2bD0+JiRjb2x1bW4pCgkJewoJCQkkZmlyc3QgPSByZXNldCgkY29sdW1uKTsKCQkJJHggPSBmbG9hdHZhbCgkZmlyc3RbJ2JsJ10pOyAvL2luc2lkZSBtYXJnaW4KCQkJaWYoJGRvam9pbnMpCgkJCXsKCQkJCS8vZHJhdyBqb2lucyBmaXJzdAoJCQkJJG54ID0gJHggKyAkYncgKyAkYmx3OwoJCQkJJGpvaW5zID0gYXJyYXkoKTsKCQkJCWZvcmVhY2goJGNvbHVtbiBhcyAmJHJvdykKCQkJCXsKCQkJCQlpZiAoZW1wdHkoJHJvd1sndHlwZSddKSB8fCAkcm93Wyd0eXBlJ10gIT0gJ2hpZGUnKQoJCQkJCQkkam9pbnNbXSA9IGFycmF5KCRueCxmbG9hdHZhbCgkcm93WydidCddKSskYmgvMik7IC8vWydidCddIGluc2lkZSBtYXJnaW4KCQkJCX0KCQkJCXVuc2V0KCRyb3cpOwoKCQkJCSRwZGYtPlNldExpbmVXaWR0aCgkbHcpOwoJCQkJaWYoJGxjKQoJCQkJCSRwZGYtPlNldERyYXdDb2xvcigkbGNbMF0sJGxjWzFdLCRsY1syXSk7CgkJCQlzd2l0Y2goJGxzKQoJCQkJewoJCQkJIGNhc2UgJ2RvdHRlZCc6CgkJCQkJJHBkZi0+U2V0TGluZURhc2goJHRoaXMtPmRvdHMsJGJsdyozLFRSVUUpOyAvL2Fzc3VtZSBhbGwgbGluZXMgc3RhcnQgZnJvbSBib3ggYm9yZGVyCgkJCQkJYnJlYWs7CgkJCQkgY2FzZSAnZGFzaGVkJzoKCQkJCQkkcGRmLT5TZXRMaW5lRGFzaCgkdGhpcy0+ZGFzaGVzLCRibHcqMyk7CgkJCQkgZGVmYXVsdDoKCQkJCQlicmVhazsKCQkJCX0KCQkJCWlmKCRsdmwgPCAkUikKCQkJCXsKCQkJCQkkY3YgPSBjb3VudCgkam9pbnMpOwoJCQkJCWZvcigkYz0wOyRjPCRjdi0xOyRjKz0yKQoJCQkJCXsKCQkJCQkJJHgxID0gJGpvaW5zWyRjXVswXTsKCQkJCQkJJHkxID0gJGpvaW5zWyRjXVsxXTsKCQkJCQkJJHkyID0gJGpvaW5zWyRjKzFdWzFdOwoJCQkJCQkkdyA9ICR4MSskZ3cvMi0kbHc7CgkJCQkJCSRwZGYtPkxpbmUoJHgxLCR5MSwkdywkeTEpOwoJCQkJCQkkcGRmLT5MaW5lKCR3LCR5MSwkdywkeTIpOwoJCQkJCQkkcGRmLT5MaW5lKCR4MSwkeTIsJHcsJHkyKTsKCQkJCQkJJHkzID0gKCR5MSskeTIpLzI7CgkJCQkJCSRueCA9ICR4MSArICRndyAtICRibHcqMjsKCQkJCQkJJHBkZi0+TGluZSgkbngsJHkzLCR3LCR5Myk7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZWlmKCRsdmwgPT0gJFIgJiYgJGx2bCA8ICR0aGlzLT5sZGF0YVsnZmluYWxiYW5kJ10pCgkJCQl7CgkJCQkJJHgxID0gZmxvYXR2YWwoJGZpcnN0WydibCddKyRidysoJGd3LSRsdykvMik7CgkJCQkJJHkxID0gZmxvYXR2YWwoJGZpcnN0WydidCddKyRiaC8yKTsKCQkJCQkkbGFzdCA9IGVuZCgkY29sdW1uKTsKCQkJCQkkeTIgPSBmbG9hdHZhbCgkbGFzdFsnYnQnXSskYmgvMik7CgkJCQkJJHgyID0gJHgxLSgkZ3ctJGx3KS8yICsgJGJsdzs7CgkJCQkJJHBkZi0+TGluZSgkeDIsJHkxLCR4MSwkeTEpOwoJCQkJCSRwZGYtPkxpbmUoJHgxLCR5MSwkeDEsJHkyKTsKCQkJCQkkcGRmLT5MaW5lKCR4MiwkeTIsJHgxLCR5Mik7CgkJCQl9CgkJCQllbHNlaWYoJGx2bCA+ICRSKQoJCQkJewoJCQkJCSR4MSA9IGZsb2F0dmFsKCRmaXJzdFsnYmwnXSskYncrKCRndy0kbHcpLzIpOwoJCQkJCSR5MSA9IGZsb2F0dmFsKCRmaXJzdFsnYnQnXSskYmgvMik7CgkJCQkJJHgyID0gJHgxLSgkZ3ctJGx3KS8yICsgJGJsdzsKCQkJCQkkcGRmLT5MaW5lKCR4MiwkeTEsJHgxLCR5MSk7CgkJCQl9CgkJCQl1bnNldCgkam9pbnMpOwoJCQkJaWYoJGRhc2hqb2lucykKCQkJCQkkcGRmLT5TZXRMaW5lRGFzaChGQUxTRSk7CgkJCX0KCgkJCWZvcmVhY2goJGNvbHVtbiBhcyAmJHJvdykKCQkJewoJCQkJJHR5cGUgPSAoIWVtcHR5KCRyb3dbJ3R5cGUnXSkpID8gJHJvd1sndHlwZSddIDogJ2RlZmx0JzsKCQkJCWlmKCR0eXBlID09ICdoaWRlJykKCQkJCQljb250aW51ZTsKCQkJCSRzdHlsZSA9ICRib3hzdHlsZXNbJHR5cGVdOwoJCQkJJGMgPSAkc3R5bGVbJ2ZpbGwnXTsKCQkJCWlmKCRjKQoJCQkJCSRwZGYtPlNldEZpbGxDb2xvcigkY1swXSwkY1sxXSwkY1syXSk7CgkJCQkvLyRtb2RlIGRlZmF1bHQgPSBib3JkZXIsbm8gZmlsbCBERiA9IGJvcmRlciZmaWxsIEYgPSBubyBib3JkZXIgRCBjb3VsZCBiZSBmb3Igbm8gZmlsbCBvciBib3JkZXI/CgkJCQlzd2l0Y2goJHN0eWxlWydicyddKQoJCQkJewoJCQkJIGNhc2UgJ2RvdHRlZCc6CgkJCQkgCSRkYXNoZWQgPSBUUlVFOwoJCQkJCSRwZGYtPlNldExpbmVEYXNoKCR0aGlzLT5kb3RzLDAsVFJVRSk7CgkJCQkJJG1vZGUgPSAoJGMpID8gJ0RGJzonJzsKCQkJCQlicmVhazsKCQkJCSBjYXNlICdkYXNoZWQnOgoJCQkJIAkkZGFzaGVkID0gVFJVRTsKCQkJCQkkcGRmLT5TZXRMaW5lRGFzaCgkdGhpcy0+ZGFzaGVzKTsKCQkJCQkkbW9kZSA9ICgkYykgPyAnREYnOicnOwoJCQkJCWJyZWFrOwoJCQkJIGNhc2UgJ25vbmUnOgoJCQkJIGNhc2UgJ2hpZGRlbic6CgkJCQkJJGRhc2hlZCA9IEZBTFNFOwoJCQkJIAkkbW9kZSA9ICdGJzsKCQkJCQlicmVhazsKCQkJCSBkZWZhdWx0OgoJCQkJCSRkYXNoZWQgPSBGQUxTRTsKCQkJCQkkbW9kZSA9ICgkYykgPyAnREYnOicnOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJaWYoJG1vZGUgIT0gJ0YnKQoJCQkJewoJCQkJCSRwZGYtPlNldExpbmVXaWR0aCgkYmx3KTsKCQkJCQkkYyA9ICRzdHlsZVsnYmMnXTsKCQkJCQlpZigkYykKCQkJCQkJJHBkZi0+U2V0RHJhd0NvbG9yKCRjWzBdLCRjWzFdLCRjWzJdKTsKCQkJCX0KCQkJCSR5ID0gZmxvYXR2YWwoJHJvd1snYnQnXSk7IC8vaW5zaWRlIG1hcmdpbgoJCQkJJHBkZi0+UmVjdCgkeCwkeSwkYncsJGJoLCRtb2RlKTsKCQkJCWlmKCRkYXNoZWQpCgkJCQkJJHBkZi0+U2V0TGluZURhc2goRkFMU0UpOwoJCQkJaWYoIWVtcHR5KCRyb3dbJ3RleHQnXSkpCgkJCQl7CgkJCQkJJHBkZi0+U2V0Rm9udCgkc3R5bGVbJ2ZvbnQnXSwkc3R5bGVbJ2F0dHInXSwkc3R5bGVbJ3NpemUnXSk7CgkJCQkJJGMgPSAkc3R5bGVbJ2NvbG9yJ107CgkJCQkJaWYoJGMpCgkJCQkJCSRwZGYtPlNldFRleHRDb2xvcigkY1swXSwkY1sxXSwkY1syXSk7CgkJCQkJJHBkZi0+U2V0WFkoJHgrJG9mZnMsJHkrJG9mZnMpOwoJCQkJCSRwZGYtPk11bHRpQ2VsbCgkdGN3LCR0Y2gsJHJvd1sndGV4dCddLDAsJ0MnLEZBTFNFKTsKCQkJCX0KCQkJfQoJCQl1bnNldCgkcm93KTsKCQl9CgkJdW5zZXQoJGNvbHVtbik7Cgl9Cn0KCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.tmtChartRR.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0KEMpIDIwMTQtMjAxNSBUb20gUGhhbmUgPHRwZ3d3QG9uZXBvc3QubmV0PgpSZWZlciB0byBsaWNlbmNlIGFuZCBvdGhlciBkZXRhaWxzIGF0IHRoZSB0b3Agb2YgZmlsZSBUb3VybmV5Lm1vZHVsZS5waHAKTW9yZSBpbmZvIGF0IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvdG91cm5leQoqLwpjbGFzcyB0bXRDaGFydFJSIGV4dGVuZHMgdG10Q2hhcnRCYXNlCnsKCS8qKgoJTGF5b3V0OgoJQHBhcmFtczogcmVmZXJlbmNlIHRvIGFycmF5IG9mIGNoYXJ0IHBhcmFtZXRlcnMgc2V0IGluIHBhcmVudDo6TWFrZUNoYXJ0KCkKCVNldHVwIGJveCBhbmQgY2hhcnQgbGF5b3V0IHBhcmFtZXRlcnMgaW4gcGFyZW50OjpsYXlvdXRbXSBhbmQgcGFyZW50OjpsZGF0YVtdCgkqLwoJZnVuY3Rpb24gTGF5b3V0KCYkcGFyYW1zKQoJewoJCWV4dHJhY3QoJHBhcmFtcyk7Ci8qZ2V0CSR0ZWFtc2NvdW50CgkJJGd3IGluY2x1ZGVzIG1hcmdpbnMKCQkkZ2ggaW5jbHVkZXMgbWFyZ2lucwoJCSR0bSBjaGFydCBtYXJnaW4KCQkkcm0gIgoJCSRibSAiCgkJJGxtICIKCQkkYmggYm94IGNvbnRlbnQKCQkkYncgIgoJCSRicCBib3ggcGFkZGluZwoJCSRibHcgYm94IGJvcmRlciB3aWR0aAoJCSRiaG0gaG9yeiBtYXJnaW4KCQkkYnZtIHZlcnQgbWFyZ2luCiovCgkJJExDID0gJHRlYW1zY291bnQtMTsgLy9uby4gb2YgY29sdW1ucyB0byBkaXNwbGF5CgkJJGJsID0gKGludCkoJGxtICsgJGd3LzIgKyAkYmhtKTsgLy9pbnNpZGUgbWFyZ2luCgkJJHRvcCA9ICR0bSArICRidm07IC8vaW5zaWRlIG1hcmdpbgoJCSR4dHJhID0gKCRibHcrJGJwKSoyOwoJCSRkaWZmdiA9ICRiaCArICR4dHJhICsgJGdoOwoJCSRkaWZmaCA9ICRidyArICR4dHJhICsgJGd3OwoKCQlmb3IoJGNvbD0xOyRjb2w8PSRMQzskY29sKyspCgkJewoJCQkkZGF0YSA9IGFycmF5KCk7CgkJCSRzdG9wID0gJHRlYW1zY291bnQtJGNvbCsxOwoJCQlmb3IoJGk9MTsgJGk8JHN0b3A7ICRpKyspCgkJCXsKCQkJCSRidCA9ICR0b3AgKyAkZGlmZnYqKCRpLTEpOwoJCQkJJGRhdGFbJGNvbCskaV0gPSBhcnJheSgnYmwnPT4kYmwsJ2J0Jz0+JGJ0KTsgLy9pbnNpZGUgbWFyZ2lucwoJCQl9CgkJCSR0aGlzLT5sYXlvdXRbJGNvbF0gPSAkZGF0YTsKCQkJJGJsICs9ICRkaWZmaDsKCQl9CgoJCSRpdGVtID0gcmVzZXQoJGRhdGEpOwoJCSR0aGlzLT5sZGF0YVsnd2lkdGgnXSA9IChpbnQpKCRpdGVtWydibCddICsgJGJ3ICsgJHh0cmEgKyAkYmhtICsgJHJtKTsKCQkkaXRlbSA9IGVuZCgkdGhpcy0+bGF5b3V0WzFdKTsKCQkkdGhpcy0+bGRhdGFbJ2hlaWdodCddID0gKGludCkoJGl0ZW1bJ2J0J10gKyAkYmggKyAkeHRyYSArICRidm0gKyAkYm0pOwoJCSR0aGlzLT5sZGF0YVsnYm94d2lkdGgnXSA9ICRidyArICR4dHJhOyAvL2luY2x1ZGVzIHBhZGRpbmcgYW5kIGJvcmRlcnMsIG5vdCBtYXJnaW5zCgkJJHRoaXMtPmxkYXRhWydib3hoZWlnaHQnXSA9ICRiaCArICR4dHJhOyAvL2RpdHRvCgl9CgoJLyoqCglCb3hlczoKCUBiZGF0YTogcmVmZXJlbmNlIHRvIGFycmF5IG9mIGJyYWNrZXQtdGFibGUgZGF0YSBmb3IgdGhlIGJyYWNrZXQgYmVpbmcgcHJvY2Vzc2VkCglAZGI6IHJlZmVyZW5jZSB0byBkYXRhYmFzZSBjb25uZWN0aW9uIG9iamVjdAoJQHRpdGxlcyBvcHRpb25hbCwgbW9kZSBlbnVtIGZvciB0eXBlIG9mIHRpdGxlcyB0byBpbmNsdWRlIGluIGJveGVzOgoJIDAgZm9yIChwcmludGVyLXJlYWR5KSBubyBsYWJlbHMgaW4gdW5wbGF5ZWQgbWF0Y2hlcwogCSAxIGZvciBub3JtYWwgbGFiZWxzIGluIGFsbCBib3hlcyAoZGVmYXVsdCkKCSAyIGZvciBpbmNsdWRpbmcgKHJlYWwgYW5kIGZha2UpIG1hdGNoIG51bWJlcnMgaW4gJ3BsYW4nIG1vZGUKCVNldHVwIHBhcmVudDo6bGF5b3V0W10gcGFyYW1ldGVycyAndHlwZScgYW5kICd0ZXh0JyBmb3IgYWxsIGNoYXJ0IGJveGVzCglSZXR1cm5zOiBUUlVFLG9yIEZBTFNFIGlmIG5vIHRlYW1zIGluIHRoZSBicmFja2V0CgkqLwoJZnVuY3Rpb24gQm94ZXMoJiRiZGF0YSwmJGRiLCR0aXRsZXM9MSkKCXsKCQkkcHJlZiA9IGNtc19kYl9wcmVmaXgoKTsKCQkvL2dyYWIgYWxsIHRlYW0gaWRlbnRpZmllcnMgKGluY2x1ZGluZyBmbGFnZ2VkIGRlbGV0aW9ucyBtYXliZSBuZWVkZWQgZm9yIHByaW9yLW1hdGNoIHN0YXR1cykKCQkkc3FsID0gJ1NFTEVDVCB0ZWFtX2lkIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF90ZWFtcyBXSEVSRSBicmFja2V0X2lkPT8gT1JERVIgQlkgZGlzcGxheW9yZGVyJzsKCQkkdGVhbXMgPSAkZGItPkdldENvbCgkc3FsLGFycmF5KCRiZGF0YVsnYnJhY2tldF9pZCddKSk7CgkJaWYoJHRlYW1zID09IEZBTFNFKQoJCQlyZXR1cm4gRkFMU0U7CgkJJHRjID0gY291bnQoJHRlYW1zKTsKCQkkb3JkZXIgPSAxOwoJCSRuYW1lcyA9IGFycmF5KCk7CgkJZm9yZWFjaCgkdGVhbXMgYXMgJHRpZCkKCQl7CgkJCSRuYW1lc1skb3JkZXJdID0gJHRoaXMtPm1vZC0+VGVhbU5hbWUoJHRpZCk7CgkJCSRvcmRlcisrOwoJCX0KCQkkZm10ID0gJGJkYXRhWydhdGZvcm1hdCddOwoJCWlmKCEkZm10KQoJCQkkZm10ID0gJHRoaXMtPm1vZC0+R2V0Wm9uZURhdGVGb3JtYXQoJGJkYXRhWyd0aW1lem9uZSddKS4nICcuJHRoaXMtPm1vZC0+R2V0UHJlZmVyZW5jZSgndGltZV9mb3JtYXQnKTsKCQkkZHQgPSBuZXcgRGF0ZVRpbWUoJzE5MDAtMDEtMDEgMDA6MDA6MDAnLG5ldyBEYXRlVGltZVpvbmUoJGJkYXRhWyd0aW1lem9uZSddKSk7CgkJJHJlbGF0aW9ucyA9ICR0aGlzLT5tb2QtPlJlc3VsdFRlbXBsYXRlcygkYmRhdGFbJ2JyYWNrZXRfaWQnXSk7CgkJJGFub24gPSAkdGhpcy0+bW9kLT5MYW5nKCdhbm9ub3RoZXInKTsKCQkvL3Byb2Nlc3MgYWxsIHJlY29yZGVkIG1hdGNoZXMKCQkkc3FsID0gJ1NFTEVDVCBNLiosVDEuZGlzcGxheW9yZGVyIEFTIHRBb3JkZXIsVDIuZGlzcGxheW9yZGVyIEFTIHRCb3JkZXIgRlJPTSAnCi4kcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzIE0gSk9JTiAnCi4kcHJlZi4nbW9kdWxlX3RtdF90ZWFtcyBUMSBPTiBNLnRlYW1BID0gVDEudGVhbV9pZCBKT0lOICcKLiRwcmVmLidtb2R1bGVfdG10X3RlYW1zIFQyIE9OIE0udGVhbUIgPSBUMi50ZWFtX2lkCldIRVJFIE0uYnJhY2tldF9pZD0/IEFORCBUMS5mbGFncyE9MiBBTkQgVDIuZmxhZ3MhPTIKT1JERVIgQlkgVDEuZGlzcGxheW9yZGVyJzsKCQkkbWF0Y2hlcyA9ICRkYi0+R2V0QWxsKCRzcWwsYXJyYXkoJGJkYXRhWydicmFja2V0X2lkJ10pKTsKCQlmb3JlYWNoKCRtYXRjaGVzIGFzICYkbWRhdGEpCgkJewoJCQkkT0EgPSAoaW50KSRtZGF0YVsndEFvcmRlciddOwoJCQkkT0IgPSAoaW50KSRtZGF0YVsndEJvcmRlciddOwoJCQlpZiAoJE9BID4gJE9CKQoJCQl7CgkJCQkkdG1wID0gJE9BOwoJCQkJJE9BID0gJE9COwoJCQkJJE9CID0gJHRtcDsKCQkJfQoJCQkkdEEgPSAkbmFtZXNbJE9BXTsKCQkJJHRCID0gJG5hbWVzWyRPQl07CgkJCWlmKCR0aXRsZXMgIT0gMikgLy9ub3QgJ3BsYW4nIG1vZGUKCQkJewoJCQkJc3dpdGNoKCRtZGF0YVsnc3RhdHVzJ10pCgkJCQl7CgkJCQljYXNlIDA6CgkJCQkJJHR5cGUgPSAnZGVmbHQnOwoJCQkJCWdvdG8gZmlybTI7CgkJCQkJLy9ubyBicmVhayBoZXJlCgkJCQljYXNlIFRvdXJuZXk6OlNPRlQ6CgkJCQkJJHR5cGUgPSAnbm9uZic7CgkJCQkJZ290byBmaXJtMjsKCQkJCQkvL25vIGJyZWFrIGhlcmUKCQkJCWNhc2UgVG91cm5leTo6RklSTToKCQkJCWNhc2UgVG91cm5leTo6VE9MRDoKCQkJCWNhc2UgVG91cm5leTo6QVNLRUQ6CgkJCQkJJHR5cGUgPSAnZmlybSc7CmZpcm0yOgoJCQkJCSRyZWwgPSBzcHJpbnRmKCRyZWxhdGlvbnNbJ3ZzJ10sJHRBLCR0Qik7CgkJCQkJJGF0ID0gKCRtZGF0YVsncGxhY2UnXSkgPyAkbWRhdGFbJ3BsYWNlJ10gOiAnJzsKCQkJCQlpZigkbWRhdGFbJ3BsYXl3aGVuJ10pCgkJCQkJewoJCQkJCQkkZHQtPm1vZGlmeSgkbWRhdGFbJ3BsYXl3aGVuJ10pOwoJCQkJCQkkYXQgLj0gJyAnLmRhdGUoJGZtdCwkZHQtPmdldFRpbWVzdGFtcCgpKTsKCQkJCQl9CgkJCQkJJHRleHQgPSAkcmVsLiJcbiIudHJpbSgkYXQpOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSBUb3VybmV5OjpBU09GVDoKCQkJCQkkdHlwZSA9ICdub25mJzsKCQkJCQkvL25vIGJyZWFrIGhlcmUKCQkJCWNhc2UgVG91cm5leTo6QUZJUk06CgkJCQkJaWYoJG1kYXRhWydzdGF0dXMnXSA9PSBUb3VybmV5OjpBRklSTSkKCQkJCQkJJHR5cGUgPSAnZmlybSc7CgkJCQkJaWYoISgkbWRhdGFbJ3RlYW1BJ10gfHwgJG1kYXRhWyd0ZWFtQiddKSkgLy9zaG91bGQgbmV2ZXIgaGFwcGVuIGZvciBwbGFubmVkIFJSIG1hdGNoCgkJCQkJCSRyZWwgPSAoJHRpdGxlcz09MSk/IlxuIi4kdGhpcy0+bW9kLT5MYW5nKCdhbm9uYW5vbicpOicnOyAvL1RPRE8gYmV0dGVyIGRlc2NyaXB0b3IKCQkJCQllbHNlaWYoJG1kYXRhWyd0ZWFtQSddKQoJCQkJCQkkcmVsID0gc3ByaW50ZigkcmVsYXRpb25zWyd2cyddLCR0QSwkYW5vbik7CgkJCQkJZWxzZQoJCQkJCQkkcmVsID0gc3ByaW50ZigkcmVsYXRpb25zWyd2cyddLCRhbm9uLCR0Qik7CgkJCQkJJGF0ID0gKCRtZGF0YVsncGxhY2UnXSkgPyAkbWRhdGFbJ3BsYWNlJ10gOiAnJzsKCQkJCQlpZigkbWRhdGFbJ3BsYXl3aGVuJ10pCgkJCQkJewoJCQkJCQkkZHQtPm1vZGlmeSgkbWRhdGFbJ3BsYXl3aGVuJ10pOwoJCQkJCQkkYXQgLj0gJyAnLmRhdGUoJGZtdCwkZHQtPmdldFRpbWVzdGFtcCgpKTsKCQkJCQl9CgkJCQkJJHRleHQgPSAkcmVsLiJcbiIudHJpbSgkYXQpOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSBUb3VybmV5OjpGT1JGQjoKCQkJCQlpZighJG1kYXRhWydzY29yZSddKSAvL25vIHJlYXNvbiBnaXZlbgoJCQkJCQkkbWRhdGFbJ3Njb3JlJ10gPSAkYmRhdGFbJ2ZvcmZlaXQnXTsKCQkJCWNhc2UgVG91cm5leTo6V09OQToKCQkJCQkkdHlwZSA9ICdkb25lJzsKCQkJCQkkcmVsID0gc3ByaW50ZigkcmVsYXRpb25zWydkZWYnXSwkdEEsJHRCKTsKCQkJCQkkdGV4dCA9ICRyZWwuIlxuIi50cmltKCRtZGF0YVsnc2NvcmUnXSk7CgkJCQkJYnJlYWs7CgkJCQljYXNlIFRvdXJuZXk6OkZPUkZBOgoJCQkJCWlmKCEkbWRhdGFbJ3Njb3JlJ10pCgkJCQkJCSRtZGF0YVsnc2NvcmUnXSA9ICRiZGF0YVsnZm9yZmVpdCddOwoJCQkJY2FzZSBUb3VybmV5OjpXT05COgoJCQkJCSR0eXBlID0gJ2RvbmUnOwoJCQkJCSRyZWwgPSBzcHJpbnRmKCRyZWxhdGlvbnNbJ2RlZiddLCR0QiwkdEEpOwoJCQkJCSR0ZXh0ID0gJHJlbC4iXG4iLnRyaW0oJG1kYXRhWydzY29yZSddKTsKCQkJCQlicmVhazsKCQkJCWNhc2UgVG91cm5leTo6TVRJRUQ6CgkJCQkJJHR5cGUgPSAnZG9uZSc7CgkJCQkJJHJlbCA9IHNwcmludGYoJHJlbGF0aW9uc1sndGllZCddLCR0QSwkdEIpOwoJCQkJCSR0ZXh0ID0gJHJlbC4iXG4iLnRyaW0oJG1kYXRhWydzY29yZSddKTsKCQkJCQlicmVhazsKCQkJCWNhc2UgVG91cm5leTo6Tk9XSU46CgkJCQkJJHR5cGUgPSAnZG9uZSc7CgkJCQkJJHRleHQgPSBzcHJpbnRmKCRyZWxhdGlvbnNbJ25vbWF0Y2gnXSwkdEEsJHRCKTsKCQkJCQkkcmVsID0gc3ByaW50ZigkcmVsYXRpb25zWyd2cyddLCR0QSwkdEIpOwoJCQkJCSR0ZXh0ID0gJHJlbC4iXG4iLiRiZGF0YVsnbm9tYXRjaCddOwoJCQkJCWJyZWFrOwoJCQkJZGVmYXVsdDoKCQkJCQkkdHlwZSA9ICdkZWZsdCc7CgkJCQkJJHJlbCA9IHNwcmludGYoJHJlbGF0aW9uc1sndnMnXSwkdEEsJHRCKTsKCQkJCQkkdGV4dCA9ICRyZWwuIlxuIi50cmltKCRtZGF0YVsnc2NvcmUnXSk7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQkJZWxzZSAvL3BsYW4gbW9kZQoJCQl7CgkJCQlzd2l0Y2goJG1kYXRhWydzdGF0dXMnXSkKCQkJCXsKCQkJCSBjYXNlIDA6CgkJCQkJJHR5cGUgPSAnZGVmbHQnOwoJCQkJCWJyZWFrOwoJCQkJIGNhc2UgVG91cm5leTo6U09GVDoKCQkJCSBjYXNlIFRvdXJuZXk6OkFTT0ZUOgoJCQkJCSR0eXBlID0gJ25vbmYnOwoJCQkJCWJyZWFrOwoJCQkJIGNhc2UgVG91cm5leTo6RklSTToKCQkJCSBjYXNlIFRvdXJuZXk6OlRPTEQ6CgkJCQkgY2FzZSBUb3VybmV5OjpBU0tFRDoKCQkJCSBjYXNlIFRvdXJuZXk6OkFGSVJNOgoJCQkJCSR0eXBlID0gJ2Zpcm0nOwoJCQkJCWJyZWFrOwoJCQkJIGRlZmF1bHQ6CgkJCQkJJHR5cGUgPSAoJHRBICE9IEZBTFNFICYmICR0QiAhPSBGQUxTRSkgPyAnZG9uZSc6J2RlZmx0JzsKCQkJCQlicmVhazsKCQkJCX0KCQkJCSRhdCA9ICgkbWRhdGFbJ3BsYWNlJ10pID8gJG1kYXRhWydwbGFjZSddIDogJyc7CgkJCQlpZigkbWRhdGFbJ3BsYXl3aGVuJ10pCgkJCQl7CgkJCQkJJGR0LT5tb2RpZnkoJG1kYXRhWydwbGF5d2hlbiddKTsKCQkJCQkkYXQgLj0gJyAnLmRhdGUoJGZtdCwkZHQtPmdldFRpbWVzdGFtcCgpKTsKCQkJCX0KCQkJCWlmKCRhdCkKCQkJCXsKCQkJCQkkcmVsID0gJyc7IC8vJHRoaXMtPm1vZC0+TGFuZygnbWF0Y2hudW0nLChpbnQpJG1kYXRhWydtYXRjaF9pZCddKS4iXG4iOwoJCQkJCWlmKCR0QSAhPSBGQUxTRSkKCQkJCQkJJHJlbCAuPSAkdEEuIlxuIjsKCQkJCQlpZigkdEIgIT0gRkFMU0UpCgkJCQkJCSRyZWwgLj0gJHRCLiJcbiI7CgkJCQkJaWYoJHRBID09IEZBTFNFIHx8ICR0QiA9PSBGQUxTRSkKCQkJCQkJJHJlbCAuPSAkYW5vbi4iXG4iOwoJCQkJCSR0ZXh0ID0gJHJlbC50cmltKCRhdCk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJaWYoJHRBID09IEZBTFNFKQoJCQkJCQkkdEEgPSAkYW5vbjsKCQkJCQlpZigkdEIgPT0gRkFMU0UpCgkJCQkJCSR0QiA9ICRhbm9uOwoJCQkJCSR0ZXh0ID0gc3ByaW50ZigkcmVsYXRpb25zWyd2cyddLCR0QSwkdEIpOwoJCQkJfQoJCQl9CgkJCSR0aGlzLT5sYXlvdXRbJE9BXVskT0JdWyd0eXBlJ10gPSAkdHlwZTsKCQkJJHRoaXMtPmxheW91dFskT0FdWyRPQl1bJ3RleHQnXSA9ICR0ZXh0OwoJCX0KCQl1bnNldCgkbWRhdGEpOwoJCS8vcHJvY2VzcyAnbm90LXlldC1jcmVhdGVkJyBtYXRjaGVzCgkJZm9yZWFjaCgkdGhpcy0+bGF5b3V0IGFzICRPQT0+JiRjb2x1bW4pCgkJewoJCQlmb3JlYWNoKCRjb2x1bW4gYXMgJE9CPT4mJHJvdykKCQkJewoJCQkJaWYoIWlzc2V0KCRyb3dbJ3R5cGUnXSkpCgkJCQl7CgkJCQkJJHJvd1sndHlwZSddID0gJ2RlZmx0JzsKCQkJCQkkdEEgPSAkbmFtZXNbJE9BXTsKCQkJCQlpZigkdEEgPT0gRkFMU0UpCgkJCQkJCSR0QSA9ICRhbm9uOwoJCQkJCSR0QiA9ICRuYW1lc1skT0JdOwoJCQkJCWlmKCR0QiA9PSBGQUxTRSkKCQkJCQkJJHRCID0gJGFub247CgkJCQkJJHJvd1sndGV4dCddID0gc3ByaW50ZigkcmVsYXRpb25zWyd2cyddLCR0QSwkdEIpOwoJCQkJfQoJCQl9CgkJCXVuc2V0KCRyb3cpOwoJCX0KCQl1bnNldCgkY29sdW1uKTsKCQlyZXR1cm4gVFJVRTsKCX0KCgkvKioKCURyYXc6CglAcGFyYW1zOiByZWZlcmVuY2UgdG8gYXJyYXkgb2YgdmFyaWFibGVzIHBhc3NlZCBmcm9tIHBhcmVudDo6TWFrZUNoYXJ0KCksCgkJbWVtYmVycyBhcmUgJ3BkZicsJ2d3JywnbHcnLCdsYycsJ2xzJywnYmx3JywnYnAnLCdib3hzdHlsZXMnCglEcmF3IHRoZSBjaGFydAoJKi8KCWZ1bmN0aW9uIERyYXcoJiRwYXJhbXMpCgl7CgkJZXh0cmFjdCgkcGFyYW1zKTsKCQl1bnNldCgkcGFyYW1zKTsKCQkkYmggPSAkdGhpcy0+bGRhdGFbJ2JveGhlaWdodCddOyAvL2luY2x1ZGVzIHBhZGRpbmcgYW5kIGJvcmRlcnMKCQkkYncgPSAkdGhpcy0+bGRhdGFbJ2JveHdpZHRoJ107IC8vZGl0dG8KCQkkb2ZmcyA9ICRibHcgKyAkYnA7CgkJJHh0cmEgPSAkb2ZmcyAqIDI7CgkJJHRjaCA9IChpbnQpKCgkYmgtJHh0cmEpLzQpOyAvL3RleHQgY2VsbCBoZWlnaHQKCQkkdGN3ID0gJGJ3IC0gJHh0cmE7CgkJJGRhc2hqb2lucyA9IEZBTFNFOwoJCSRkb2pvaW5zID0gVFJVRTsKCQlzd2l0Y2goJGxzKQoJCXsKCQkgY2FzZSAnZG90dGVkJzoKCQkgY2FzZSAnZGFzaGVkJzoKCQkJJGRhc2hqb2lucyA9IFRSVUU7CgkJCWJyZWFrOwoJCSBjYXNlICdub25lJzoKCQkgY2FzZSAnaGlkZGVuJzoKCQkJJGRvam9pbnMgPSBGQUxTRTsKCQkgZGVmYXVsdDoKCQkJYnJlYWs7CgkJfQoKCQlmb3JlYWNoKCR0aGlzLT5sYXlvdXQgYXMgJiRjb2x1bW4pCgkJewoJCQkkZmlyc3QgPSByZXNldCgkY29sdW1uKTsKCQkJJHggPSBmbG9hdHZhbCgkZmlyc3RbJ2JsJ10pOyAvL2luc2lkZSBtYXJnaW4KCQkJaWYoY291bnQoJGNvbHVtbikgPiAxICYmICRkb2pvaW5zKQoJCQl7CgkJCQkvL2RyYXcgam9pbnMgZmlyc3QKCQkJCSRwZGYtPlNldExpbmVXaWR0aCgkbHcpOwoJCQkJaWYoJGxjKQoJCQkJCSRwZGYtPlNldERyYXdDb2xvcigkbGNbMF0sJGxjWzFdLCRsY1syXSk7CgkJCQlzd2l0Y2goJGxzKQoJCQkJewoJCQkJIGNhc2UgJ2RvdHRlZCc6CgkJCQkJJHBkZi0+U2V0TGluZURhc2goJHRoaXMtPmRvdHMsJGJsdyozLFRSVUUpOyAvL2Fzc3VtZSBhbGwgbGluZXMgc3RhcnQgZnJvbSBib3ggYm9yZGVyCgkJCQkJYnJlYWs7CgkJCQkgY2FzZSAnZGFzaGVkJzoKCQkJCQkkcGRmLT5TZXRMaW5lRGFzaCgkdGhpcy0+ZGFzaGVzLCRibHcqMyk7CgkJCQkgZGVmYXVsdDoKCQkJCQlicmVhazsKCQkJCX0KCQkJCSR5ID0gZmxvYXR2YWwoJGZpcnN0WydidCddICsgJGJoLzIpOwoJCQkJJGxhc3QgPSBlbmQoJGNvbHVtbik7CgkJCQkkeTIgPSBmbG9hdHZhbCgkbGFzdFsnYnQnXSArICRiaC8yKTsKCQkJCSRtID0gJHggLSAkZ3cvMjsKCQkJCWlmKCR5MiAhPSAkeSkKCQkJCQkkcGRmLT5MaW5lKCRtLCR5LCRtLCR5Mik7CgkJCQlmb3JlYWNoKCRjb2x1bW4gYXMgJiRyb3cpCgkJCQl7CgkJCQkJaWYoZW1wdHkoJHJvd1sndHlwZSddKSB8fCAkcm93Wyd0eXBlJ10gIT0gJ2hpZGUnKQoJCQkJCXsKCQkJCQkJJHkgPSBmbG9hdHZhbCgkcm93WydidCddKSArICRiaC8yOwoJCQkJCQkkcGRmLT5MaW5lKCR4LCR5LCRtLCR5KTsKCQkJCQl9CgkJCQl9CgkJCQl1bnNldCgkcm93KTsKCQkJCWlmKCRkYXNoam9pbnMpCgkJCQkJJHBkZi0+U2V0TGluZURhc2goRkFMU0UpOwoJCQl9CgoJCQlmb3JlYWNoKCRjb2x1bW4gYXMgJiRyb3cpCgkJCXsKCQkJCSR0eXBlID0gKCFlbXB0eSgkcm93Wyd0eXBlJ10pKSA/ICRyb3dbJ3R5cGUnXSA6ICdkZWZsdCc7CgkJCQlpZigkdHlwZSA9PSAnaGlkZScpCgkJCQkJY29udGludWU7CgkJCQkkc3R5bGUgPSAkYm94c3R5bGVzWyR0eXBlXTsKCQkJCSRjID0gJHN0eWxlWydmaWxsJ107CgkJCQlpZigkYykKCQkJCQkkcGRmLT5TZXRGaWxsQ29sb3IoJGNbMF0sJGNbMV0sJGNbMl0pOwoJCQkJLy8kbW9kZSBkZWZhdWx0ID0gYm9yZGVyLG5vIGZpbGwgREYgPSBib3JkZXImZmlsbCBGID0gbm8gYm9yZGVyIEQgY291bGQgYmUgZm9yIG5vIGZpbGwgb3IgYm9yZGVyPwoJCQkJc3dpdGNoKCRzdHlsZVsnYnMnXSkKCQkJCXsKCQkJCSBjYXNlICdkb3R0ZWQnOgoJCQkJIAkkZGFzaGVkID0gVFJVRTsKCQkJCQkkcGRmLT5TZXRMaW5lRGFzaCgkdGhpcy0+ZG90cywwLFRSVUUpOwoJCQkJCSRtb2RlID0gKCRjKSA/ICdERic6Jyc7CgkJCQkJYnJlYWs7CgkJCQkgY2FzZSAnZGFzaGVkJzoKCQkJCSAJJGRhc2hlZCA9IFRSVUU7CgkJCQkJJHBkZi0+U2V0TGluZURhc2goJHRoaXMtPmRhc2hlcyk7CgkJCQkJJG1vZGUgPSAoJGMpID8gJ0RGJzonJzsKCQkJCQlicmVhazsKCQkJCSBjYXNlICdub25lJzoKCQkJCSBjYXNlICdoaWRkZW4nOgoJCQkJCSRkYXNoZWQgPSBGQUxTRTsKCQkJCSAJJG1vZGUgPSAnRic7CgkJCQkJYnJlYWs7CgkJCQkgZGVmYXVsdDoKCQkJCQkkZGFzaGVkID0gRkFMU0U7CgkJCQkJJG1vZGUgPSAoJGMpID8gJ0RGJzonJzsKCQkJCQlicmVhazsKCQkJCX0KCQkJCWlmKCRtb2RlICE9ICdGJykKCQkJCXsKCQkJCQkkcGRmLT5TZXRMaW5lV2lkdGgoJGJsdyk7CgkJCQkJJGMgPSAkc3R5bGVbJ2JjJ107CgkJCQkJaWYoJGMpCgkJCQkJCSRwZGYtPlNldERyYXdDb2xvcigkY1swXSwkY1sxXSwkY1syXSk7CgkJCQl9CgkJCQkkeSA9IGZsb2F0dmFsKCRyb3dbJ2J0J10pOyAvL2luc2lkZSBtYXJnaW4KCQkJCSRwZGYtPlJlY3QoJHgsJHksJGJ3LCRiaCwkbW9kZSk7CgkJCQlpZigkZGFzaGVkKQoJCQkJCSRwZGYtPlNldExpbmVEYXNoKEZBTFNFKTsKCQkJCWlmKCFlbXB0eSgkcm93Wyd0ZXh0J10pKQoJCQkJewoJCQkJCSRwZGYtPlNldEZvbnQoJHN0eWxlWydmb250J10sJHN0eWxlWydhdHRyJ10sJHN0eWxlWydzaXplJ10pOwoJCQkJCSRjID0gJHN0eWxlWydjb2xvciddOwoJCQkJCWlmKCRjKQoJCQkJCQkkcGRmLT5TZXRUZXh0Q29sb3IoJGNbMF0sJGNbMV0sJGNbMl0pOwoJCQkJCSRwZGYtPlNldFhZKCR4KyRvZmZzLCR5KyRvZmZzKTsKCQkJCQkkcGRmLT5NdWx0aUNlbGwoJHRjdywkdGNoLCRyb3dbJ3RleHQnXSwwLCdDJyxGQUxTRSk7CgkJCQl9CgkJCX0KCQkJdW5zZXQoJHJvdyk7CgkJfQoJCXVuc2V0KCRjb2x1bW4pOwoJfQp9Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.tmtClone.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0KEMpIDIwMTQtMjAxNSBUb20gUGhhbmUgPHRwZ3d3QG9uZXBvc3QubmV0PgpSZWZlciB0byBsaWNlbmNlIGFuZCBvdGhlciBkZXRhaWxzIGF0IHRoZSB0b3Agb2YgZmlsZSBUb3VybmV5Lm1vZHVsZS5waHAKTW9yZSBpbmZvIGF0IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvdG91cm5leQpGdW5jdGlvbnMgaW52b2x2ZWQgd2l0aCBYTUwgb3V0cHV0CiovCgpjbGFzcyB0bXRDbG9uZQp7CgkvKioKCUNsb25lQnJhY2tldDoKCU5vIG1hdGNoZXMgYXJlIGNsb25lZCwgb2YgY291cnNlLgoJQG1vZDogcmVmZXJlbmNlIHRvIFRvdXJuZXkgbW9kdWxlIG9iamVjdAoJQGJyYWNrZXRfaWQ6IHNpbmdsZSBicmFja2V0IGlkZW50aWZpZXIsIG9yIGFycmF5IG9mIHRoZW0KCUB3aXRodGVhbXM6IG9wdGlvbmFsLCB3aGV0aGVyIHRvIGNsb25lIHRlYW0gZGF0YSBhcyB3ZWxsLCBkZWZhdWx0IEZBTFNFCglSZXR1cm5zIFRSVUUgb3IgTGFuZy1rZXkgZm9yIGVycm9yIG1lc3NhZ2UKCSovCglmdW5jdGlvbiBDbG9uZUJyYWNrZXQoJiRtb2QsJGJyYWNrZXRfaWQsJHdpdGh0ZWFtcz1GQUxTRSkKCXsKCQkkZ0NtcyA9IGNtc21zKCk7CgkJJGNvbmZpZyA9ICRnQ21zLT5HZXRDb25maWcoKTsKCQkkZGIgPSAkZ0Ntcy0+R2V0RGIoKTsKCQkkcHJlZiA9IGNtc19kYl9wcmVmaXgoKTsKCQkkdXBkaXIgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCd1cGxvYWRzX2RpcicpOwoJCSRjbCA9ICRtb2QtPkxhbmcoJ2Nsb25lJyk7CgoJCWlmKCFpc19hcnJheSgkYnJhY2tldF9pZCkpCgkJCSRicmFja2V0X2lkID0gYXJyYXkoJGJyYWNrZXRfaWQpOwoJCWZvcmVhY2goJGJyYWNrZXRfaWQgYXMgJHNpZCkKCQl7CgkJCSRzcWwgPSAnU0VMRUNUICogRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X2JyYWNrZXRzIFdIRVJFIGJyYWNrZXRfaWQ9Pyc7CgkJCSRiZGF0YSA9ICRkYi0+R2V0Um93KCRzcWwsYXJyYXkoJHNpZCkpOwoJCQlpZiAoJGJkYXRhID09IEZBTFNFKQoJCQkJcmV0dXJuICdlcnJfbWlzc2luZyc7CgkJCSRkaWQgPSAkZGItPkdlbklEKCRwcmVmLidtb2R1bGVfdG10X2JyYWNrZXRzX3NlcScpOwoJCQkkYmRhdGFbJ2JyYWNrZXRfaWQnXSA9ICRkaWQ7CgkJCSRiZGF0YVsnbmFtZSddIC49ICcgJy4kY2w7CgkJCWlmKCRiZGF0YVsnYWxpYXMnXSkKCQkJCSRiZGF0YVsnYWxpYXMnXSAuPSAnXycuc3RydG9sb3dlcigkY2wpOwoJCQkvL2NoZWNrIGZvciBkYXRlKHMpID4gbG9jYWwgY3VycmVudCBkYXRlCgkJCSR0eiA9IG5ldyBEYXRlVGltZVpvbmUoJGJkYXRhWyd0aW1lem9uZSddKTsKCQkJJGR0ID0gbmV3IERhdGVUaW1lICgnbm93JywkdHopOwoJCQkkc3RhbXAgPSAkZHQtPmdldFRpbWVzdGFtcCgpOwoJCQkkc2R0ID0gbmV3IERhdGVUaW1lICgkYmRhdGFbJ3N0YXJ0ZGF0ZSddLCR0eik7CgkJCSRzc3RhbXAgPSAkc2R0LT5nZXRUaW1lc3RhbXAoKTsKCQkJaWYgKCRzdGFtcCA+PSAkc3N0YW1wKQoJCQkJJGJkYXRhWydzdGFydGRhdGUnXSA9IG51bGw7CgkJCSRzZHQgPSBuZXcgRGF0ZVRpbWUgKCRiZGF0YVsnZW5kZGF0ZSddLCR0eik7CgkJCSRzc3RhbXAgPSAkc2R0LT5nZXRUaW1lc3RhbXAoKTsKCQkJaWYgKCRzdGFtcCA+PSAkc3N0YW1wKQoJCQkJJGJkYXRhWydlbmRkYXRlJ10gPSBudWxsOwoJCQlpZigkYmRhdGFbJ2NoYXJ0Y3NzJ10pCgkJCXsKCQkJCWlmICgkdXBkaXIpCgkJCQkJJGNzc3BhdGggPSBjbXNfam9pbl9wYXRoKCRjb25maWdbJ3VwbG9hZHNfcGF0aCddLCR1cGRpciwkYmRhdGFbJ2NoYXJ0Y3NzJ10pOwoJCQkJZWxzZQoJCQkJCSRjc3NwYXRoID0gY21zX2pvaW5fcGF0aCgkY29uZmlnWyd1cGxvYWRzX3BhdGgnXSwkYmRhdGFbJ2NoYXJ0Y3NzJ10pOwoJCQkJaWYoIWZpbGVfZXhpc3RzKCRjc3NwYXRoKSkKCQkJCQkkYmRhdGFbJ2NoYXJ0Y3NzJ10gPSAnJzsKCQkJfQoJCQkkYmRhdGFbJ2NoYXJ0YnVpbGQnXSA9IDE7CgoJCQkkdmFsdWVzID0gYXJyYXlfdmFsdWVzKCRiZGF0YSk7CgkJCSRmYyA9IGNvdW50KCR2YWx1ZXMpOwoJCQkkZmlsbGVycyA9IHN0cl9yZXBlYXQoJz8sJywkZmMtMSk7CgkJCSRzcWwgPSAnSU5TRVJUIElOVE8gJy4kcHJlZi4ibW9kdWxlX3RtdF9icmFja2V0cyBWQUxVRVMgKCRmaWxsZXJzPykiOwoJCQkkZGItPkV4ZWN1dGUoJHNxbCwkdmFsdWVzKTsKCgkJCSR0cGwgPSAkbW9kLT5HZXRUZW1wbGF0ZSgnbWFpbG91dF8nLiRzaWQuJ190ZW1wbGF0ZScpOwoJCQlpZiAoJHRwbCkKCQkJCSRtb2QtPlNldFRlbXBsYXRlKCdtYWlsb3V0XycuJGRpZC4nX3RlbXBsYXRlJywkdHBsKTsKCQkJJHRwbCA9ICRtb2QtPkdldFRlbXBsYXRlKCdtYWlsY2FuY2VsXycuJHNpZC4nX3RlbXBsYXRlJyk7CgkJCWlmICgkdHBsKQoJCQkJJG1vZC0+U2V0VGVtcGxhdGUoJ21haWxjYW5jZWxfJy4kZGlkLidfdGVtcGxhdGUnLCR0cGwpOwoJCQkkdHBsID0gJG1vZC0+R2V0VGVtcGxhdGUoJ21haWxyZXF1ZXN0XycuJHNpZC4nX3RlbXBsYXRlJyk7CgkJCWlmICgkdHBsKQoJCQkJJG1vZC0+U2V0VGVtcGxhdGUoJ21haWxyZXF1ZXN0XycuJGRpZC4nX3RlbXBsYXRlJywkdHBsKTsKCQkJJHRwbCA9ICRtb2QtPkdldFRlbXBsYXRlKCdtYWlsaW5fJy4kc2lkLidfdGVtcGxhdGUnKTsKCQkJaWYgKCR0cGwpCgkJCQkkbW9kLT5TZXRUZW1wbGF0ZSgnbWFpbGluXycuJGRpZC4nX3RlbXBsYXRlJywkdHBsKTsKCQkJJHRwbCA9ICRtb2QtPkdldFRlbXBsYXRlKCd0d2VldG91dF8nLiRzaWQuJ190ZW1wbGF0ZScpOwoJCQlpZiAoJHRwbCkKCQkJCSRtb2QtPlNldFRlbXBsYXRlKCd0d2VldG91dF8nLiRkaWQuJ190ZW1wbGF0ZScsJHRwbCk7CgkJCSR0cGwgPSAkbW9kLT5HZXRUZW1wbGF0ZSgndHdlZXRjYW5jZWxfJy4kc2lkLidfdGVtcGxhdGUnKTsKCQkJaWYgKCR0cGwpCgkJCQkkbW9kLT5TZXRUZW1wbGF0ZSgndHdlZXRjYW5jZWxfJy4kZGlkLidfdGVtcGxhdGUnLCR0cGwpOwoJCQkkdHBsID0gJG1vZC0+R2V0VGVtcGxhdGUoJ3R3ZWV0cmVxdWVzdF8nLiRzaWQuJ190ZW1wbGF0ZScpOwoJCQlpZiAoJHRwbCkKCQkJCSRtb2QtPlNldFRlbXBsYXRlKCd0d2VldHJlcXVlc3RfXycuJGRpZC4nX3RlbXBsYXRlJywkdHBsKTsKCQkJJHRwbCA9ICRtb2QtPkdldFRlbXBsYXRlKCd0d2VldGluXycuJHNpZC4nX3RlbXBsYXRlJyk7CgkJCWlmICgkdHBsKQoJCQkJJG1vZC0+U2V0VGVtcGxhdGUoJ3R3ZWV0aW5fJy4kZGlkLidfdGVtcGxhdGUnLCR0cGwpOwoJCQkkdHBsID0gJG1vZC0+R2V0VGVtcGxhdGUoJ2NoYXJ0XycuJHNpZC4nX3RlbXBsYXRlJyk7CgkJCWlmICgkdHBsKQoJCQkJJG1vZC0+U2V0VGVtcGxhdGUoJ2NoYXJ0XycuJGRpZC4nX3RlbXBsYXRlJywkdHBsKTsKCgkJCWlmKCR3aXRodGVhbXMpCgkJCXsKCQkJCSRzcWwgPSAnU0VMRUNUICogRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X3RlYW1zIFdIRVJFIGJyYWNrZXRfaWQ9PyBBTkQgZmxhZ3MhPTInOwoJCQkJJHRlYW1zID0gJGRiLT5HZXRBbGwoJHNxbCxhcnJheSgkc2lkKSk7CgkJCQlpZiAoJHRlYW1zKQoJCQkJewoJCQkJCSRzd2FwcyA9IGFycmF5KCk7CgkJCQkJJGZjID0gY291bnQoJHRlYW1zWzBdKTsKCQkJCQkkZmlsbGVycyA9IHN0cl9yZXBlYXQoJz8sJywkZmMtMSk7CgkJCQkJJHNxbCA9ICdJTlNFUlQgSU5UTyAnLiRwcmVmLiJtb2R1bGVfdG10X3RlYW1zIFZBTFVFUyAoJGZpbGxlcnM/KSI7CgkJCQkJZm9yZWFjaCgkdGVhbXMgYXMgJiRtb2R0ZWFtKQoJCQkJCXsKCQkJCQkJJHRpZCA9ICRkYi0+R2VuSUQoJHByZWYuJ21vZHVsZV90bXRfdGVhbXNfc2VxJyk7CgkJCQkJCSRzd2Fwc1tdID0gYXJyYXkoJG1vZHRlYW1bJ3RlYW1faWQnXSwkdGlkKTsKCQkJCQkJJG1vZHRlYW1bJ3RlYW1faWQnXSA9ICR0aWQ7CgkJCQkJCSRtb2R0ZWFtWydicmFja2V0X2lkJ10gPSAkZGlkOwoJCQkJCQkkbW9kdGVhbVsnZmxhZ3MnXSA9IDA7CgkJCQkJCSR2YWx1ZXMgPSBhcnJheV92YWx1ZXMoJG1vZHRlYW0pOwoJCQkJCQkkZGItPkV4ZWN1dGUoJHNxbCwkdmFsdWVzKTsKCQkJCQl9CgkJCQkJdW5zZXQoJG1vZHRlYW0pOwoJCQkJCSRzcWwgPSAnU0VMRUNUICogRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X3Blb3BsZSBXSEVSRSBpZD0/IEFORCBmbGFncyE9Mic7CgkJCQkJJHNxbDIgPSAnSU5TRVJUIElOVE8gJy4kcHJlZi4nbW9kdWxlX3RtdF9wZW9wbGUgVkFMVUVTICg/LD8sPyw/LD8pJzsKCQkJCQlmb3JlYWNoKCRzd2FwcyBhcyAmJG1vZHRlYW0pCgkJCQkJewoJCQkJCQkkcGVvcGxlID0gJGRiLT5HZXRBbGwoJHNxbCxhcnJheSgkbW9kdGVhbVswXSkpOwoJCQkJCQlpZiAoJHBlb3BsZSkKCQkJCQkJewoJCQkJCQkJZm9yZWFjaCAoJHBlb3BsZSBhcyAmJHBlcnNvbikKCQkJCQkJCXsKCQkJCQkJCQkkcGVyc29uWydpZCddID0gJG1vZHRlYW1bMV07CgkJCQkJCQkJJHBlcnNvblsnZmxhZ3MnXSA9IDA7CgkJCQkJCQkJJGRiLT5FeGVjdXRlKCRzcWwyLGFycmF5X3ZhbHVlcygkcGVyc29uKSk7CgkJCQkJCQl9CgkJCQkJCQl1bnNldCgkcGVyc29uKTsKCQkJCQkJfQoJCQkJCX0KCQkJCQl1bnNldCgkbW9kdGVhbSk7CgkJCQl9CgkJCX0KCQl9CgkJcmV0dXJuIFRSVUU7Cgl9Cn0KCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.tmtComm.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0KEMpIDIwMTQtMjAxNSBUb20gUGhhbmUgPHRwZ3d3QG9uZXBvc3QubmV0PgpSZWZlciB0byBsaWNlbmNlIGFuZCBvdGhlciBkZXRhaWxzIGF0IHRoZSB0b3Agb2YgZmlsZSBUb3VybmV5Lm1vZHVsZS5waHAKTW9yZSBpbmZvIGF0IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvdG91cm5leQoKRnVuY3Rpb25zIGludm9sdmVkIHdpdGggY29tbXVuaWNhdGlvbnMKKi8KY2xhc3MgdG10Q29tbQp7CgkvL3JlZmVyZW5jZSB0byBjdXJyZW50IG1vZHVsZSBvYmplY3QKCXByb3RlY3RlZCAkbW9kOwoJLy9jaGFubmVsLW9iamVjdHMgZm9yIHBvbGxpbmcKCXByb3RlY3RlZCAkdGV4dDsKCXByb3RlY3RlZCAkbWFpbDsKCXByb3RlY3RlZCAkdHdlZXQ7CgoJZnVuY3Rpb24gX19jb25zdHJ1Y3QoJiRtb2QpCgl7CgkJJHRoaXMtPm1vZCA9ICRtb2Q7CgkJaWYoY2xhc3NfZXhpc3RzKCdTTVNHJyxGQUxTRSkpCgkJCSR0aGlzLT50ZXh0ID0gbmV3IHRtdFNNUygpOwoJCWVsc2UKCQkJJHRoaXMtPnRleHQgPSBGQUxTRTsKCQlpZihjbGFzc19leGlzdHMoJ0NNU01haWxlcicsRkFMU0UpKQoJCQkkdGhpcy0+bWFpbCA9IG5ldyB0bXRNYWlsKCRtb2QpOwoJCWVsc2UKCQkJJHRoaXMtPm1haWwgPSBGQUxTRTsKCQkkdGhpcy0+dHdlZXQgPSBuZXcgdG10VHdlZXQoKTsKCX0KCgkvKioKCVZhbGlkYXRlQWRkcmVzczoKCUNoZWNrIHRoYXQgQGFkZHJlc3MgaXMgc3VpdGFibGUgZm9yIHNlbmRpbmcgbWVzc2FnZSB2aWEgYSBzdXBwb3J0ZWQgY2hhbm5lbAoJQGFkZHJlc3M6IFRoZSBwaG9uZS9hZGRyZXNzL2hhbmRsZSB0byBjaGVjawoJQHByZWZpeDogZGVmYXVsdCBjb3VudHJ5LWNvZGUgZm9yIHBob25lLW51bWJlcnMgdG8gcmVjZWl2ZSB0ZXh0CglAcGF0dGVybjogcmVnZXggZm9yIG1hdGNoaW5nIGFjY2VwdGFibGUgcGhvbmUgbm9zLCBkZWZhdWx0cyB0byBtb2R1bGUgcHJlZmVyZW5jZQoJUmV0dXJuczogVFJVRSBpZiB2YWxpZAoJKi8KCXB1YmxpYyBmdW5jdGlvbiBWYWxpZGF0ZUFkZHJlc3MoJGFkZHJlc3MsJHByZWZpeCwkcGF0dGVybikKCXsKCQlpZigkdGhpcy0+dGV4dCAmJiAkdGhpcy0+dGV4dC0+VmFsaWRhdGVBZGRyZXNzKCRhZGRyZXNzLCRwcmVmaXgsJHBhdHRlcm4pKQoJCQlyZXR1cm4gVFJVRTsKCQlpZigkdGhpcy0+bWFpbCAmJiAkdGhpcy0+bWFpbC0+VmFsaWRhdGVBZGRyZXNzKCRhZGRyZXNzKSkKCQkJcmV0dXJuIFRSVUU7CgkJaWYoJHRoaXMtPnR3ZWV0LT5WYWxpZGF0ZUFkZHJlc3MoJGFkZHJlc3MpKQoJCQlyZXR1cm4gVFJVRTsKCQlyZXR1cm4gRkFMU0U7Cgl9CgoJLyoqCglTZXRUcGxWYXJzOgoJU2V0IGdlbmVyaWMgdmFycyBmb3IgdXNlIGluIHRlbXBsYXRlcwoJQG1vZDogcmVmZXJlbmNlIHRvIGN1cnJlbnQgbW9kdWxlIG9iamVjdAoJQGJkYXRhOiByZWZlcmVuY2UgdG8gYXJyYXkgb2YgYnJhY2tldC10YWJsZSBkYXRhCglAbWRhdGE6IHJlZmVyZW5jZSB0byBhcnJheSBvZiBtYXRjaCBkYXRhIChmcm9tIHdoaWNoIHdlIG5lZWQgJ3RlYW1BJywgJ3RlYW1CJykKCUBzbWFydHk6IHJlZmVyZW5jZSB0byBDTVNNUyBzbWFydHkgb2JqZWN0CgkqLwoJcHJpdmF0ZSBmdW5jdGlvbiBTZXRUcGxWYXJzKCYkbW9kLCYkYmRhdGEsJiRtZGF0YSwmJHNtYXJ0eSkKCXsKCQkkc21hcnR5LT5hc3NpZ24oJ3RpdGxlJywkYmRhdGFbJ25hbWUnXSk7CgkJJHNtYXJ0eS0+YXNzaWduKCdkZXNjcmlwdGlvbicsJGJkYXRhWydkZXNjcmlwdGlvbiddKTsKCQkkc21hcnR5LT5hc3NpZ24oJ293bmVyJywkYmRhdGFbJ293bmVyJ10pOwoJCSRzbWFydHktPmFzc2lnbignY29udGFjdCcsJGJkYXRhWydjb250YWN0J10pOwoJCSRzbWFydHktPmFzc2lnbignc21zZnJvbScsJGJkYXRhWydzbXNmcm9tJ10pOwoJCSRzbWFydHktPmFzc2lnbignd2hlcmUnLCRtZGF0YVsncGxhY2UnXSk7CgkJJHRmbXQgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCd0aW1lX2Zvcm1hdCcpOwoJCSRkZm10ID0gJG1vZC0+R2V0Wm9uZURhdGVGb3JtYXQoJGJkYXRhWyd0aW1lem9uZSddKTsKCQkkZHQgPSBuZXcgRGF0ZVRpbWUoJG1kYXRhWydwbGF5d2hlbiddLG5ldyBEYXRlVGltZVpvbmUoJGJkYXRhWyd0aW1lem9uZSddKSk7CgkJJHN0YW1wID0gJGR0LT5HZXRUaW1lc3RhbXAoKTsKCQkkc21hcnR5LT5hc3NpZ24oJ3RpbWUnLGRhdGUoJHRmbXQsJHN0YW1wKSk7CgkJJHNtYXJ0eS0+YXNzaWduKCdkYXRlJyxkYXRlKCRkZm10LCRzdGFtcCkpOwoJCS8vdGltZSBiZWZvcmUgZGF0ZSwgY2FuJ3QgcmVseSBvbiAkYmRhdGFbJ2F0Zm9ybWF0J10KCQkkc21hcnR5LT5hc3NpZ24oJ3doZW4nLGRhdGUoJHRmbXQuJywgJy4kZGZtdCwkc3RhbXApKTsKCQkkdGlkID0gKGludCkkbWRhdGFbJ3RlYW1BJ107CgkJJHRBID0gKCR0aWQgPiAwKSA/ICRtb2QtPlRlYW1OYW1lKCRtZGF0YVsndGVhbUEnXSkgOiAnJzsKCQkkdGlkID0gKGludCkkbWRhdGFbJ3RlYW1CJ107CgkJJHRCID0gKCR0aWQgPiAwKSA/ICRtb2QtPlRlYW1OYW1lKCRtZGF0YVsndGVhbUInXSkgOiAnJzsKCQlpZigkdEEgJiYgJHRCKQoJCQkkc21hcnR5LT5hc3NpZ24oJ3RlYW1zJywkdEEuJywgJy4kdEIpOwoJCWVsc2UKCQl7CgkJCXN3aXRjaCgkYmRhdGFbJ3R5cGUnXSkKCQkJewoJCQkgY2FzZSBUb3VybmV5OjpLT1RZUEU6CgkJCQkkb3AgPSAkbW9kLT5MYW5nKCdhbm9ud2lubmVyJyk7CgkJCQlicmVhazsKCQkJIGRlZmF1bHQ6CgkJCQkkb3AgPSAkbW9kLT5MYW5nKCdhbm9ub3RoZXInKTsKCQkJCWJyZWFrOwoJCQl9CgkJCSRzbWFydHktPmFzc2lnbigndGVhbXMnLCR0QS4kdEIuJywgJy4kb3ApOwoJCX0KCX0KCgkvKioKCVRlbGxPd25lcjoKCVNlbmRzIG1lc3NhZ2UgdmlhIHJlbGV2YW50IGNoYW5uZWwocykgdG8gdG91cm5hbWVudCBvd25lciwgYW5kIHRvIG9uZSBtZW1iZXIgb2YgYm90aCB0ZWFtcyBpbiB0aGUgbWF0Y2gKCUBicmFja2V0X2lkOiBpbmRleCBvZiBjb21wZXRpdGlvbiB0byBiZSBwcm9jZXNzZWQKCUBtYXRjaF9pZDogaW5kZXggb2YgbWF0Y2ggdG8gYmUgcHJvY2Vzc2VkCglAYm9keTogYXJyYXkgb2YgbGluZXMgZm9yIG1lc3NhZ2UgYm9keQoJUmV0dXJuczogYXJyYXkgd2l0aCB0d28gbWVtYmVyczogMXN0IFRSVUV8RkFMU0UgcmVwcmVzZW50aW5nIHN1Y2Nlc3MsIDJuZCBzcGVjaWZpYyBwcm9ibGVtIG1lc3NhZ2Ugb3IgRkFMU0UKCSovCglwdWJsaWMgZnVuY3Rpb24gVGVsbE93bmVyKCRicmFja2V0X2lkLCRtYXRjaF9pZCwkYm9keSkKCXsKCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOwoJCSRwcmVmID0gY21zX2RiX3ByZWZpeCgpOwoJCSRzcWwgPSAnU0VMRUNUIHRlYW1BLHRlYW1CLHBsYWNlLHBsYXl3aGVuIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzIFdIRVJFIG1hdGNoX2lkPT8gQU5EIGZsYWdzPTAnOwoJCSRtZGF0YSA9ICRkYi0+R2V0Um93KCRzcWwsYXJyYXkoJG1hdGNoX2lkKSk7CgkJaWYoJG1kYXRhKQoJCXsKCQkJJHNxbCA9ICdTRUxFQ1QgKiBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfYnJhY2tldHMgV0hFUkUgYnJhY2tldF9pZD0/JzsKCQkJJGJkYXRhID0gJGRiLT5HZXRSb3coJHNxbCxhcnJheSgkYnJhY2tldF9pZCkpOwoJCQkkc21hcnR5ID0gY21zbXMoKS0+R2V0U21hcnR5KCk7CgkJCS8vZ2VuZXJhbCB2YXJzIGZvciB0ZW1wbGF0ZQoJCQkkdGhpcy0+U2V0VHBsVmFycygkdGhpcy0+bW9kLCRiZGF0YSwkbWRhdGEsJHNtYXJ0eSk7CgkJCS8vY2hhbm5lbC1zcGVjaWZpYyB2YXIgcmVwb3J0IHNldCBkb3duc3RyZWFtCgkJCSRtc2dzID0gYXJyYXkoKTsKCQkJaWYoJHRoaXMtPnRleHQpCgkJCXsKCQkJCWxpc3QoJG9rLCRtc2cxKSA9ICR0aGlzLT50ZXh0LT5UZWxsT3duZXIoJHRoaXMtPm1vZCwkc21hcnR5LCRiZGF0YSwkbWRhdGEsJGJvZHkpOwoJCQkJaWYoISRvayAmJiAkbXNnMSkKCQkJCQkkbXNnc1tdID0gJG1zZzE7CgkJCX0KCQkJaWYoJHRoaXMtPm1haWwpCgkJCXsKCQkJCWxpc3QoJG9rLCRtc2cxKSA9ICR0aGlzLT5tYWlsLT5UZWxsT3duZXIoJHRoaXMtPm1vZCwkc21hcnR5LCRiZGF0YSwkbWRhdGEsJGJvZHkpOwoJCQkJaWYoISRvayAmJiAkbXNnMSkKCQkJCQkkbXNnc1tdID0gJG1zZzE7CgkJCX0KCQkJbGlzdCgkb2ssJG1zZzEpID0gJHRoaXMtPnR3ZWV0LT5UZWxsT3duZXIoJHRoaXMtPm1vZCwkc21hcnR5LCRiZGF0YSwkbWRhdGEsJGJvZHkpOwoJCQlpZighJG9rICYmICRtc2cxKQoJCQkJJG1zZ3NbXSA9ICRtc2cxOwoKCQkJaWYoJG1zZ3MpCgkJCQlyZXR1cm4gYXJyYXkoRkFMU0UsaW1wbG9kZSgnPGJyIC8+JywkbXNncykpOwoJCQlyZXR1cm4gYXJyYXkoVFJVRSwnJyk7CgkJfQoJCXJldHVybiBhcnJheShGQUxTRSwkbW9kLT5MYW5nKCdlcnJfbWF0Y2gnKSk7Cgl9CgoJLyoqCglUZWxsVGVhbXM6CglTZW5kcyBtZXNzYWdlIHZpYSByZWxldmFudCBjaGFubmVsKHMpIHRvIG9uZSBvciBhbGwgbWVtYmVycyBvZiBib3RoIHRlYW1zIGluIHRoZSBtYXRjaAoJQGJyYWNrZXRfaWQ6IGluZGV4IG9mIGNvbXBldGl0aW9uIHRvIGJlIHByb2Nlc3NlZAoJQG1hdGNoX2lkOiBpbmRleCBvZiBtYXRjaCB0byBiZSBwcm9jZXNzZWQKCUB0cGw6IGVudW0gZm9yIHR5cGUgb2YgbWVzc2FnZTogMSA9IGFubm91bmNlbWVudCwgMiA9IGNhbmNlbGxhdGlvbiwgMyA9IHNjb3JlLXJlcXVlc3QKCUBmaXJzdDogVFJVRSB0byBzZW5kIG9ubHkgdG8gZmlyc3QgcmVjb2duaXNlZCBhZGRyZXNzLCBGQUxTRSB0byBzZW5kIHBlcgoJCXRoZSB0ZWFtcycgcmVzcGVjdGl2ZSBjb250YWN0YWxsIHNldHRpbmdzLCBvcHRpb25hbCwgZGVmYXVsdCBGQUxTRQoJUmV0dXJuczogYXJyYXkgd2l0aCB0d28gbWVtYmVyczogMXN0IFRSVUV8RkFMU0UgcmVwcmVzZW50aW5nIHN1Y2Nlc3Mgb3Igbm90aGluZyB0byBkbywKCQkybmQgYSBzcGVjaWZpYyBwcm9ibGVtIG1lc3NhZ2Ugb3IgRkFMU0UKCSovCglwdWJsaWMgZnVuY3Rpb24gVGVsbFRlYW1zKCRicmFja2V0X2lkLCRtYXRjaF9pZCwkdHBsLCRmaXJzdD1GQUxTRSkKCXsKCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOwoJCSRwcmVmID0gY21zX2RiX3ByZWZpeCgpOwoJCSRzcWwgPSAnU0VMRUNUIHRlYW1BLHRlYW1CLHBsYWNlLHBsYXl3aGVuIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzIFdIRVJFIG1hdGNoX2lkPT8gQU5EIGZsYWdzPTAnOwoJCSRtZGF0YSA9ICRkYi0+R2V0Um93KCRzcWwsYXJyYXkoJG1hdGNoX2lkKSk7CgkJaWYoJG1kYXRhKQoJCXsKCQkgLy9uZWVkIGF0IGxlYXN0IDEgbm9uLWJ5ZSwga25vd24tdGVhbSwgdG8gdGVsbAoJCQkkdEEgPSAoaW50KSRtZGF0YVsndGVhbUEnXTsKCQkJJHRCID0gKGludCkkbWRhdGFbJ3RlYW1CJ107CgkJCWlmKCR0QSA+IDAgfHwgJHRCID4gMCkKCQkJewoJCQkJJHNxbCA9ICdTRUxFQ1QgKiBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfYnJhY2tldHMgV0hFUkUgYnJhY2tldF9pZD0/JzsKCQkJCSRiZGF0YSA9ICRkYi0+R2V0Um93KCRzcWwsYXJyYXkoJGJyYWNrZXRfaWQpKTsKCQkJCSRzbWFydHkgPSBjbXNtcygpLT5HZXRTbWFydHkoKTsKCQkJCS8vZ2VuZXJhbCB2YXJzIGZvciB0ZW1wbGF0ZQoJCQkJJHRoaXMtPlNldFRwbFZhcnMoJHRoaXMtPm1vZCwkYmRhdGEsJG1kYXRhLCRzbWFydHkpOwoJCQkJLy90ZWFtLXNwZWNpZmljIHZhcnMgcmVjaXBpZW50KGZvciBlbWFpbCksdG9hbGwsb3Bwb25lbnQgc2V0IGRvd25zdHJlYW0KCQkJCSRtc2dzID0gYXJyYXkoKTsKCQkJCWlmKCR0aGlzLT50ZXh0KQoJCQkJewoJCQkJCWxpc3QoJG9rLCRtc2cxKSA9ICR0aGlzLT50ZXh0LT5UZWxsVGVhbXMoJHRoaXMtPm1vZCwkc21hcnR5LCRiZGF0YSwkbWRhdGEsJHRwbCwkZmlyc3QpOwoJCQkJCWlmKCEkb2sgJiYgJG1zZzEpCgkJCQkJCSRtc2dzW10gPSAkbXNnMTsKCQkJCX0KCQkJCWlmKCR0aGlzLT5tYWlsKQoJCQkJewoJCQkJCWxpc3QoJG9rLCRtc2cxKSA9ICR0aGlzLT5tYWlsLT5UZWxsVGVhbXMoJHRoaXMtPm1vZCwkc21hcnR5LCRiZGF0YSwkbWRhdGEsJHRwbCwkZmlyc3QpOwoJCQkJCWlmKCEkb2sgJiYgJG1zZzEpCgkJCQkJCSRtc2dzW10gPSAkbXNnMTsKCQkJCX0KCQkJCWxpc3QoJG9rLCRtc2cxKSA9ICR0aGlzLT50d2VldC0+VGVsbFRlYW1zKCR0aGlzLT5tb2QsJHNtYXJ0eSwkYmRhdGEsJG1kYXRhLCR0cGwsJGZpcnN0KTsKCQkJCWlmKCEkb2sgJiYgJG1zZzEpCgkJCQkJJG1zZ3NbXSA9ICRtc2cxOwoKCQkJCWlmKCRtc2dzKQoJCQkJCXJldHVybiBhcnJheShGQUxTRSxpbXBsb2RlKCc8YnIgLz4nLCRtc2dzKSk7CgkJCX0KCQkJcmV0dXJuIGFycmF5KFRSVUUsJycpOwoJCX0KCQlyZXR1cm4gYXJyYXkoRkFMU0UsJHRoaXMtPm1vZC0+TGFuZygnZXJyX21hdGNoJykpOwoJfQp9Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.tmtCSV.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0KEMpIDIwMTQtMjAxNSBUb20gUGhhbmUgPHRwZ3d3QG9uZXBvc3QubmV0PgpSZWZlciB0byBsaWNlbmNlIGFuZCBvdGhlciBkZXRhaWxzIGF0IHRoZSB0b3Agb2YgZmlsZSBUb3VybmV5Lm1vZHVsZS5waHAKTW9yZSBpbmZvIGF0IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvdG91cm5leQpGdW5jdGlvbnMgaW52b2x2ZWQgd2l0aCBDU1Ygb3V0cHV0CiovCgpjbGFzcyB0bXRDU1YKewoJLyoqCglTYXZlOgoJQG1vZDogcmVmZXJlbmNlIHRvIFRvdXJuZXkgbW9kdWxlCglAYmRhdGE6IHJlZmVyZW5jZSB0byBhcnJheSBvZiBicmFja2V0cy10YWJsZSBkYXRhCglAY2hhcnNldDogY2hhcmFjdGVyLWVuY29kaW5nIGZvciBAY29udGVudAoJQGNvbnRlbnQ6IHN0cmluZyB0byBiZSBzYXZlZAoJKi8KCXByaXZhdGUgZnVuY3Rpb24gU2F2ZSgmJG1vZCwmJGJkYXRhLCRjaGFyc2V0LCRjb250ZW50KQoJewoJCSRkZXRhaWwgPSAoJGJkYXRhWydhbGlhcyddKSA/IHByZWdfcmVwbGFjZSgnL1xXLycsJ18nLCRiZGF0YVsnYWxpYXMnXSkgOiAkYmRhdGFbJ2JyYWNrZXRfaWQnXTsKCQkkZHQgPSBuZXcgRGF0ZVRpbWUoJ25vdycsbmV3IERhdGVUaW1lWm9uZSgkYmRhdGFbJ3RpbWV6b25lJ10pKTsKCQkkZm4gPSAkbW9kLT5MYW5nKCd0aXRsZV90ZWFtcycpLictJy4kZGV0YWlsLictJy4kZHQtPmZvcm1hdCgnWS1tLWQtRy1pJyk7CgkJaGVhZGVyKCdQcmFnbWE6IHB1YmxpYycpOwoJCWhlYWRlcignRXhwaXJlczogMCcpOwoJCWhlYWRlcignQ2FjaGUtQ29udHJvbDogbXVzdC1yZXZhbGlkYXRlLCBwb3N0LWNoZWNrPTAsIHByZS1jaGVjaz0wJyk7CgkJaGVhZGVyKCdDYWNoZS1Db250cm9sOiBwcml2YXRlJyxGQUxTRSk7CgkJaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpOwoJCWhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IicuJGZuLicuY3N2IicpOwoJCWhlYWRlcignQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmluYXJ5Jyk7IAoKCQllY2hvICRjb250ZW50OwoJfQoKCS8qKgoJVGVhbVRpdGxlc0ZvckNTVjoKCUBjb3VudDogbm8uIG9mIHBsYXllcnMgaW4gZWFjaCB0ZWFtCglSZXR1cm5zOiBhcnJheSBvZiBzdHJpbmdzIHRvIHJlcHJlc2VudCBjb2x1bW5zIGluIDFzdCBsaW5lIG9mIHRlYW0ocykgLmNzdiBmaWxlLAoJICBlbXB0eSBpZiAkY291bnQgPT0gRkFMU0UKCSovCglwcml2YXRlIGZ1bmN0aW9uIFRlYW1UaXRsZXMoJGNvdW50KQoJewoJCWlmKCRjb3VudCkKCQl7CgkJCSRyZXQgPSBhcnJheSgnI1RlYW1uYW1lJywnI1NlZWRlZCcpOwoJCQlpZigkY291bnQgPiAxKQoJCQkJJHJldFtdID0gJyNUZWxsYWxsJzsKCQkJZm9yKCRpID0gMTsgJGkgPD0gJGNvdW50OyAkaSsrKQoJCQkJYXJyYXlfcHVzaCgkcmV0LCdQbGF5ZXInLiRpLCdDb250YWN0Jy4kaSk7CgkJCXJldHVybiAkcmV0OwoJCX0KCQlyZXR1cm4gYXJyYXkoKTsKCX0KCgkvKioKCVRlYW1zVG9DU1Y6CglDb25zdHJ1Y3RzIGEgQ1NWIHN0cmluZyBmb3Igc3BlY2lmaWVkL2FsbCB0ZWFtcyBiZWxvbmdpbmcgdG8gYnJhY2tldCBAYnJhY2tldF9pZCwgYW5kIGV4cG9ydHMgaXQKCW9yIHdyaXRlcyBpdCBwcm9ncmVzc2l2ZWx5IHRvIHRoZSBmaWxlIGFzc29jaWF0ZWQgd2l0aCBAZnAgKHdoaWNoIG11c3QgYmUgb3BlbmVkIGFuZCBjbG9zZWQgdXBzdHJlYW0pCglUbyBhdm9pZCBmaWVsZC1jb3JydXB0aW9uLGV4aXN0aW5nIHNlcGFyYXRvcnMgaW4gaGVhZGluZ3Mgb3IgZGF0YSBhcmUgY29udmVydGVkIHRvIHNvbWV0aGluZyBlbHNlLAoJZ2VuZXJhbGx5IGxpa2UgJiMuLi47KGV4Y2VwdCB3aGVuIHRoZSBzZXBhcmF0b3IgaXMgJyYnLCcjJyBvciAnOycsdGhvc2UgYmVjb21lICUuLi4lKQoJUGFyYW1ldGVyczoKCUBtb2QgcmVmZXJlbmNlIHRvIGN1cnJlbnQgVG91cm5leSBtb2R1bGUgb2JqZWN0CglAYnJhY2tldF9pZCBpbmRleCBvZiBjb21wZXRpdGlvbiB0byBiZSBwcm9jZXNzZWQKCUB0ZWFtX2lkIG9wdGlvbmFsIGluZGV4IG9mIGEgc2luZ2xlIHRlYW0gdG8gcHJvY2Vzcywgb3IgYXJyYXkgb2Ygc3VjaCBpbmRpY2VzLAoJIG9yIEZBTFNFIHRvIHByb2Nlc3MgdGhlIHdob2xlIGJyYWNrZXQsIGRlZmF1bHQ9RkFMU0UKCUBtZW1iZXJzOiBvcHRpb25hbCBhcnJheSBvZiBwZXJzb25zIGluIEB0ZWFtX2lkIHRvIHByb2Nlc3MsIGVhY2ggbWVtYmVyCiAJIG9mIHRoZSBhcnJheSBiZWluZyBhbiBhcnJheSgnbmFtZSc9PiwnY29udGFjdCc9PikgZGVmYXVsdCBGQUxTRQoJQGZwIG9wdGlvbmFsIGhhbmRsZSBvZiBvcGVuIGZpbGUsIGlmIHdyaXRpbmcgZGF0YSB0byBkaXNrLCBvciBGQUxTRQoJIGlmIHNhdmluZyBkaXJlY3RseSwgZGVmYXVsdCA9IEZBTFNFCglAc2VwIG9wdGlvbmFsIGZpZWxkLXNlcGFyYXRvciBpbiBvdXRwdXQgZGF0YSwgYXNzdW1lZCBzaW5nbGUtYnl0ZSBBU0NJSSwgZGVmYXVsdCA9ICcsJwoJUmV0dXJuczogVFJVRSwgb3IgRkFMU0Ugb24gZXJyb3IKCSovCglwdWJsaWMgZnVuY3Rpb24gVGVhbXNUb0NTVigmJG1vZCwkYnJhY2tldF9pZCwkdGVhbV9pZD1GQUxTRSwkbWVtYmVycz1GQUxTRSwkZnA9RkFMU0UsJHNlcD0nLCcpCgl7CgkJJGNvbmZpZyA9IGNtc21zKCktPkdldENvbmZpZygpOwoJCWlmKCFlbXB0eSgkY29uZmlnWydkZWZhdWx0X2VuY29kaW5nJ10pKQoJCQkkZGVmY2hhcnMgPSB0cmltKCRjb25maWdbJ2RlZmF1bHRfZW5jb2RpbmcnXSk7CgkJZWxzZQoJCQkkZGVmY2hhcnMgPSAnVVRGLTgnOwoJCWlmKGluaV9nZXQoJ21ic3RyaW5nLmludGVybmFsX2VuY29kaW5nJykgIT09IEZBTFNFKSAvL2NvbnZlcnNpb24gaXMgcG9zc2libGUKCQl7CgkJCSRleHBjaGFycyA9ICRtb2QtPkdldFByZWZlcmVuY2UoJ2V4cG9ydF9lbmNvZGluZycsJ1VURi04Jyk7CgkJCSRjb252ZXJ0ID0gKHN0cmNhc2VjbXAoJGV4cGNoYXJzLCRkZWZjaGFycykgIT0gMCk7CgkJfQoJCWVsc2UKCQkJJGNvbnZlcnQgPSBGQUxTRTsKCgkJJHNlcDIgPSAoJHNlcCAhPSAnICcpPycgJzonLCc7CgkJc3dpdGNoKCRzZXApCgkJewoJCSBjYXNlICcmJzoKCQkJJHIgPSAnJTM4JSc7CgkJCWJyZWFrOwoJCSBjYXNlICcjJzoKCQkJJHIgPSAnJTM1JSc7CgkJCWJyZWFrOwoJCSBjYXNlICc7JzoKCQkJJHIgPSAnJTU5JSc7CgkJCWJyZWFrOwoJCSBkZWZhdWx0OgoJCQkkciA9ICcmIycub3JkKCRzZXApLic7JzsKCQkJYnJlYWs7CgkJfQoKCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOwoJCSRwcmVmID0gY21zX2RiX3ByZWZpeCgpOwoJCSRzcWwgPSAnU0VMRUNUICogRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X2JyYWNrZXRzIFdIRVJFIGJyYWNrZXRfaWQ9Pyc7CgkJJGJkYXRhID0gJGRiLT5HZXRSb3coJHNxbCxhcnJheSgkYnJhY2tldF9pZCkpOwoJCWlmKCRiZGF0YVsndGVhbXNpemUnXSkKCQkJJGNvdW50ID0gKGludCkkYmRhdGFbJ3RlYW1zaXplJ107CgkJZWxzZQoJCQkkY291bnQgPSAxOwoJCS8vaGVhZGluZyBsaW5lCgkJJG5hbWVzID0gc2VsZjo6VGVhbVRpdGxlcygkY291bnQpOwoJCWlmKCRuYW1lcykKCQkJJG91dHN0ciA9IGltcGxvZGUoJHNlcCwkbmFtZXMpLiJcbiI7CgkJZWxzZQoJCQkkb3V0c3RyID0gJyc7CgoJCWlmKCFpc19hcnJheSgkdGVhbV9pZCkpCgkJCSR2YWxzID0gYXJyYXkoJHRlYW1faWQpOwoJCWVsc2VpZigkdGVhbV9pZCA9PT0gRkFMU0UpCgkJewoJCQkkc3FsID0gJ1NFTEVDVCB0ZWFtX2lkIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF90ZWFtcyBXSEVSRSBicmFja2V0X2lkPT8gQU5EIGZsYWdzIT0yIE9SREVSIEJZIGRpc3BsYXlvcmRlcic7CgkJCSR2YWxzID0gJGRiLT5HZXRDb2woJHNxbCxhcnJheSgkYnJhY2tldF9pZCkpOwoJCX0KCQllbHNlCgkJCSR2YWxzID0gJHRlYW1faWQ7CgoJCSRzcWwgPSAnU0VMRUNUIG5hbWUsc2VlZGluZyxjb250YWN0YWxsIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF90ZWFtcyBXSEVSRSB0ZWFtX2lkPT8nOwoJCWlmKCRtZW1iZXJzID09PSBGQUxTRSkKCQkJJHNxbDIgPSAnU0VMRUNUCW5hbWUsY29udGFjdCBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfcGVvcGxlIFdIRVJFIGlkPT8gQU5EIGZsYWdzIT0yIE9SREVSIEJZIGRpc3BsYXlvcmRlcic7CgkJLy9kYXRhIGxpbmUocykKCQlmb3JlYWNoKCR2YWxzIGFzICR0aGlzdmFsKQoJCXsKCQkJJHRkYXRhID0gJGRiLT5HZXRSb3coJHNxbCxhcnJheSgkdGhpc3ZhbCkpOwoJCQkkb3V0c3RyIC49IHN0cl9yZXBsYWNlKCRzZXAsJHIsJHRkYXRhWyduYW1lJ10pOwoJCQkkb3V0c3RyIC49ICRzZXA7CgkJCWlmKCR0ZGF0YVsnc2VlZGluZyddKQoJCQkJJG91dHN0ciAuPSAoaW50KSR0ZGF0YVsnc2VlZGluZyddOwoJCQlpZigkY291bnQgPiAxKQoJCQl7CgkJCQlpZigkdGRhdGFbJ2NvbnRhY3RhbGwnXSkKCQkJCQkkb3V0c3RyIC49ICRzZXAuJ3llcyc7CgkJCQllbHNlCgkJCQkJJG91dHN0ciAuPSAkc2VwLidubyc7CgkJCX0KCQkJaWYoJG1lbWJlcnMgPT09IEZBTFNFKQoJCQkJJG1lbWJlcnMgPSAkZGItPkdldEFsbCgkc3FsMixhcnJheSgkdGhpc3ZhbCkpOwoJCQkvL2RvZXNuJ3QgbWF0dGVyIGlmIG5vIG9mIHJlY29yZGVkIHBlb3BsZSAhPSBleHBlY3RlZCB0ZWFtc2l6ZQoJCQlmb3JlYWNoKCRtZW1iZXJzIGFzICRwZXJzKQoJCQkJJG91dHN0ciAuPSAkc2VwLnN0cl9yZXBsYWNlKCRzZXAsJHIsdHJpbSgkcGVyc1snbmFtZSddKSkKCQkJCS4kc2VwLnN0cl9yZXBsYWNlKCRzZXAsJHIsdHJpbSgkcGVyc1snY29udGFjdCddKSk7CgkJCSRvdXRzdHIgLj0gIlxuIjsKCQkJaWYoJGZwKQoJCQl7CgkJCQlpZigkY29udmVydCkKCQkJCXsKCQkJCQkkY29udiA9IG1iX2NvbnZlcnRfZW5jb2RpbmcoJG91dHN0ciwkZXhwY2hhcnMsJGRlZmNoYXJzKTsKCQkJCQlmd3JpdGUoJGZwLCRjb252KTsKCQkJCQl1bnNldCgkY29udik7CgkJCQl9CgkJCQllbHNlCgkJCQkJZndyaXRlKCRmcCwkb3V0c3RyKTsKCQkJCSRvdXRzdHIgPSAnJzsKCQkJfQoJCX0KCgkJaWYoISRmcCkKCQl7CgkJCWlmKCRjb252ZXJ0KQoJCQl7CgkJCQkkY29udiA9IG1iX2NvbnZlcnRfZW5jb2RpbmcoJG91dHN0ciwkZXhwY2hhcnMsJGRlZmNoYXJzKTsKCQkJCXNlbGY6OlNhdmUoJG1vZCwkYmRhdGEsJGV4cGNoYXJzLCRjb252KTsKCQkJCXVuc2V0KCRjb252KTsKCQkJfQoJCQllbHNlCgkJCQlzZWxmOjpTYXZlKCRtb2QsJGJkYXRhLCRkZWZjaGFycywkb3V0c3RyKTsKCQl9CgkJcmV0dXJuIFRSVUU7Cgl9Cgp9Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.tmtData.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKCkZ1bmN0aW9ucyBpbnZvbHZlZCB3aXRoIHRvdXJuYW1lbnQgZGF0YSBjb252ZXJzaW9uCiovCmNsYXNzIHRtdERhdGEKewoJcHJpdmF0ZSBmdW5jdGlvbiBHZXRJbnRlZ2VyRm9yKCR2YWwsJHBvc2l0aXZlPVRSVUUpCgl7CgkJJHJldCA9IChpbnQpJHZhbDsKCQlpZiAoJHBvc2l0aXZlICYmICRyZXQgPCAwKSAkcmV0ID0gMDsKCQlyZXR1cm4gJHJldDsKCX0KCglwcml2YXRlIGZ1bmN0aW9uIEdldEZsb2F0Rm9yKCR2YWwsJHBvc2l0aXZlPVRSVUUpCgl7CgkJJHJldCA9IChmbG9hdCkoJHZhbCswKTsgLy9zdHJpcCB0cmFpbGluZyAwJ3MKCQlpZiAoJHBvc2l0aXZlICYmICRyZXQgPCAwKSAkcmV0ID0gMC4wOwoJCXJldHVybiAkcmV0OwoJfQoKCS8qKgoJR2V0VmFsaWREYXRhOgoJQG1vZCByZWZlcmVuY2UgdG8gbW9kdWxlIG9iamVjdAoJQHBhcmFtcyByZWZlcmVuY2UgdG8gcGFyYW1ldGVycyBhcnJheSBzdXBwbGllZCB0byBhY3Rpb24gd2hpY2ggY2FsbGVkIGhlcmUKCglSZXR1cm5zOiBzdGRDbGFzcyBvYmplY3Qgd2l0aCBtZW1iZXJzIGNvcnJlc3BvbmRpbmcgdG8gZGF0YSByZWFkeSB0byBiZSBzYXZlZCwKCQlvciBlbHNlIGFuIG9iamVjdCB3aXRoIG1lbWJlciAtPmVycm9yIGFuZCBwb3NzaWJseSBhbHNvIC0+ZXJybXNnCgkJSWYgaXQgaXMgYXZhaWxhYmxlLCBtZW1iZXIgLT5icmFja2V0X2lkIGlzIGluY2x1ZGVkIGluIHRoZSBvYmplY3QKCSovCglmdW5jdGlvbiAmR2V0VmFsaWREYXRhKCYkbW9kLCYkcGFyYW1zKQoJewoJCSRwcmVmID0gY21zX2RiX3ByZWZpeCgpOwoJCSRkYiA9IGNtc21zKCktPkdldERiKCk7CgkJJGRhdGEgPSBuZXcgc3RkQ2xhc3MoKTsKCQkvL2VhY2ggaWRlbnRpZmllciBpbiB0aGUgZGF0YSBvYmplY3QgbXVzdCBtYXRjaCB0aGUgcmVsZXZhbnQgZGF0YWJhc2UtZmllbGRuYW1lCgkJLy9pZGVudGlmaWVycyBhcmUgY3JlYXRlZCBoZXJlIGluIG1vcmUtb3ItbGVzcyB0aGUgZmllbGQtb3JkZXIgb2YgdGhlIGRhdGFiYXNlIHRhYmxlCgkJaWYgKCFlbXB0eSgkcGFyYW1zWydicmFja2V0X2lkJ10pKQoJCXsKCQkJJGRhdGEtPmJyYWNrZXRfaWQgPSAoaW50KSRwYXJhbXNbJ2JyYWNrZXRfaWQnXTsKCQkJJGRhdGEtPmdyb3VwaWQgPSAoaW50KSRwYXJhbXNbJ3RtdF9ncm91cGlkJ107CgkJfQoJCWlmKCFlbXB0eSgkcGFyYW1zWyduZXdicmFja2V0J10pKQoJCXsKCQkJJGRhdGEtPmdyb3VwaWQgPSAwOyAvL3VuZ3JvdXBlZAoJCQkkZGF0YS0+YWRkZWQgPSAxOwoJCX0KCQlpZiAoIWVtcHR5KCRwYXJhbXNbJ3RtdF90eXBlJ10pKQoJCQkkZGF0YS0+dHlwZSA9IChpbnQpJHBhcmFtc1sndG10X3R5cGUnXTsKCQllbHNlCgkJCSRkYXRhLT50eXBlID0gVG91cm5leTo6S09UWVBFOyAvL2RlZmF1bHQgdG8ga25vY2tvdXQKCQlpZiAoIWVtcHR5KCRwYXJhbXNbJ3RtdF9uYW1lJ10pKQoJCQkkZGF0YS0+bmFtZSA9IHRyaW0oJHBhcmFtc1sndG10X25hbWUnXSk7CgkJZWxzZQoJCXsKCQkJc3dpdGNoICgkZGF0YS0+dHlwZSkKCQkJewoJCQkgY2FzZSBUb3VybmV5OjpLT1RZUEU6CgkJCQkka2V5ID0gJ3RpdGxlX2JyYWNrZXRfc2luZ2xlJzsKCQkJIAlicmVhazsKCQkJIGNhc2UgVG91cm5leTo6REVUWVBFOgoJCQkJJGtleSA9ICd0aXRsZV9icmFja2V0X2RvdWJsZSc7CgkJCSAJYnJlYWs7CgkJCSBjYXNlIFRvdXJuZXk6OlJSVFlQRToKCQkJCSRrZXkgPSAndGl0bGVfYnJhY2tldF9yb3VuZCc7CgkJCSAJYnJlYWs7CgkJCSBkZWZhdWx0OgoJCQkJJGtleSA9ICcnOwoJCQkgCWJyZWFrOwoJCQl9CgkJCSRkYXRhLT5uYW1lID0gKCRrZXkpID8gJG1vZC0+TGFuZygka2V5KSA6ICcnOwoJCX0KCQkkdG1wID0gKGVtcHR5KCRwYXJhbXNbJ3RtdF9hbGlhcyddKSkgPyAkZGF0YS0+bmFtZSA6ICRwYXJhbXNbJ3RtdF9hbGlhcyddOwoJCSR0bXAgPSBzdHJ0b2xvd2VyKHByZWdfcmVwbGFjZShhcnJheSgnL1xzKy8nLCcvX18rLycpLGFycmF5KCdfJywnXycpLCR0bXApKTsKCQkkZGF0YS0+YWxpYXMgPSBzdWJzdHIoJHRtcCwwLDI0KTsgLy9ubyBhdXRvLWNoZWNrIGZvciBhbGlhcyBkdXBsaWNhdGlvbgoKCQkkZGF0YS0+ZGVzY3JpcHRpb24gPSAkcGFyYW1zWyd0bXRfZGVzY3JpcHRpb24nXTsKCQkkZGF0YS0+b3duZXIgPSAkcGFyYW1zWyd0bXRfb3duZXInXTsKCQkkZGF0YS0+Y29udGFjdCA9ICRwYXJhbXNbJ3RtdF9jb250YWN0J107CgkJJGRhdGEtPmxvY2FsZSA9IHRyaW0oJHBhcmFtc1sndG10X2xvY2FsZSddKTsKCQkkZGF0YS0+dHd0ZnJvbSA9ICRwYXJhbXNbJ3RtdF90d3Rmcm9tJ107CgkJaWYoaXNzZXQgKCRwYXJhbXNbJ3RtdF9zbXNwYXR0ZXJuJ10pKQkvL3JlbGV2YW50IFNNUyBtb2R1bGUgcHJlc2VudAoJCXsKCQkJJHRtcCA9IHRyaW0oJHBhcmFtc1sndG10X3Ntc3BhdHRlcm4nXSk7CgkJCSRkYXRhLT5zbXNwYXR0ZXJuID0gJHRtcDsKCQkJaWYgKCR0bXAgJiYgcHJlZ19tYXRjaCgnficuJHRtcC4nficsJHBhcmFtc1sndG10X3Ntc2Zyb20nXSkpCgkJCQkkZGF0YS0+c21zZnJvbSA9ICRwYXJhbXNbJ3RtdF9zbXNmcm9tJ107CgkJCWVsc2UKCQkJCSRkYXRhLT5zbXNmcm9tID0gJyc7CgkJCSRkYXRhLT5zbXNwcmVmaXggPSAkcGFyYW1zWyd0bXRfc21zcHJlZml4J107CgkJfQoJCWlmIChpc3NldCAoJHBhcmFtc1sndG10X2ZldV9lZGl0Z3JvdXAnXSkpCgkJCSRkYXRhLT5mZXVfZWRpdGdyb3VwID0gJHBhcmFtc1sndG10X2ZldV9lZGl0Z3JvdXAnXTsKCQkkZGF0YS0+c2VlZHR5cGUgPSBpbnR2YWwoJHBhcmFtc1sndG10X3NlZWR0eXBlJ10pOwoJCSRkYXRhLT5maXh0eXBlID0gaW50dmFsKCRwYXJhbXNbJ3RtdF9maXh0eXBlJ10pOwoJCSRkYXRhLT50ZWFtc2l6ZSA9IHNlbGY6OkdldEludGVnZXJGb3IoJHBhcmFtc1sndG10X3RlYW1zaXplJ10pOwoJCWlmICgkZGF0YS0+dGVhbXNpemUgPT0gMCkKCQkJJGRhdGEtPnRlYW1zaXplID0gMTsKCQkkZGF0YS0+c2FtZXRpbWUgPSBzZWxmOjpHZXRJbnRlZ2VyRm9yKCRwYXJhbXNbJ3RtdF9zYW1ldGltZSddKTsKCQlpZiAoJGRhdGEtPnNhbWV0aW1lID09IDApCgkJCSRkYXRhLT5zYW1ldGltZSA9IG51bGw7CgkJaWYoaXNzZXQgKCRwYXJhbXNbJ3RtdF9jYWxlbmRhcmlkJ10pKSAvL3JlbGV2YW50IGJvb2tpbmdzIG1vZHVsZSBwcmVzZW50CgkJCSRkYXRhLT5jYWxlbmRhcmlkID0gJHBhcmFtc1sndG10X2NhbGVuZGFyaWQnXTsKCQkkdG1wID0gJHBhcmFtc1sndG10X3BsYXlnYXB0eXBlJ107CgkJc3dpdGNoICgkdG1wKQoJCXsKCQkgY2FzZSAwOiAvL25vbmUKCQkJJGRhdGEtPnBsYXlnYXAgPSBudWxsOwoJCQlicmVhazsKCQkgY2FzZSAyOiAvL2hvdXJzCgkJIGNhc2UgMzogLy9kYXlzCgkJCSRkYXRhLT5wbGF5Z2FwID0gc2VsZjo6R2V0RmxvYXRGb3IoJHBhcmFtc1sndG10X3BsYXlnYXAnXSk7CgkJCWJyZWFrOwoJCSBkZWZhdWx0OgoJCQkkZGF0YS0+cGxheWdhcCA9IHNlbGY6OkdldEludGVnZXJGb3IoJHBhcmFtc1sndG10X3BsYXlnYXAnXSk7CgkJCWJyZWFrOwoJCX0KCQkkZGF0YS0+cGxheWdhcHR5cGUgPSAkdG1wOwoJCSR0bXAgPSB0cmltKCRwYXJhbXNbJ3RtdF9hdmFpbGFibGUnXSk7CgkJaWYoJHRtcCA9PSBGQUxTRSkKCQkJJGRhdGEtPmF2YWlsYWJsZSA9IE5VTEw7CgkJZWxzZQoJCXsKCQkJJGNhbCA9IG5ldyBDYWxlbmRhcigkbW9kKTsKCQkJJGNsZWFuID0gJGNhbC0+Q2hlY2tDb25kaXRpb24oJHRtcCwkZGF0YS0+bG9jYWxlKTsKCQkJdW5zZXQoJGNhbCk7CgkJCWlmKCRjbGVhbikKCQkJCSRkYXRhLT5hdmFpbGFibGUgPSAkY2xlYW47CgkJCWVsc2UKCQkJewoJCQkJJG1zZyA9ICRtb2QtPkxhbmcoJ2Vycl92YWx1ZScpOwoJCQkJaWYoc3RycG9zKCR0bXAsJG1zZyk9PT1GQUxTRSkKCQkJCQkkZGF0YS0+YXZhaWxhYmxlID0gJG1zZy4nID4+ICcuJHRtcDsKCQkJCWVsc2UKCQkJCQkkZGF0YS0+YXZhaWxhYmxlID0gJHRtcDsKCQkJfQoJCQl1bnNldCgkY2FsKTsKCQl9CgkJJHRtcCA9ICRwYXJhbXNbJ3RtdF9sYXRpdHVkZSddICsgMDsgLy9zdHJpcCB0cmFpbGluZyAwCgkJaWYoJHRtcCA9PSBGQUxTRSkKCQkJJHRtcCA9IE5VTEw7CgkJJGRhdGEtPmxhdGl0dWRlID0gJHRtcDsKCQkkdG1wID0gJHBhcmFtc1sndG10X2xvbmdpdHVkZSddICsgMDsKCQlpZigkdG1wID09IEZBTFNFKQoJCQkkdG1wID0gTlVMTDsKCQkkZGF0YS0+bG9uZ2l0dWRlID0gJHRtcDsKCgkJJHRtcCA9ICRwYXJhbXNbJ3RtdF9wbGFjZWdhcHR5cGUnXSArIDA7CgkJc3dpdGNoICgkdG1wKQoJCXsKCQkgY2FzZSAwOiAvL25vbmUKCQkJJGRhdGEtPnBsYWNlZ2FwID0gbnVsbDsKCQkJYnJlYWs7CgkJIGNhc2UgMjogLy9ob3VycwoJCSBjYXNlIDM6IC8vZGF5cwoJCQkkZGF0YS0+cGxhY2VnYXAgPSBzZWxmOjpHZXRGbG9hdEZvcigkcGFyYW1zWyd0bXRfcGxhY2VnYXAnXSk7CgkJCWJyZWFrOwoJCSBkZWZhdWx0OgoJCQkkZGF0YS0+cGxhY2VnYXAgPSBzZWxmOjpHZXRJbnRlZ2VyRm9yKCRwYXJhbXNbJ3RtdF9wbGFjZWdhcCddKTsKCQkJYnJlYWs7CgkJfQoJCSRkYXRhLT5wbGFjZWdhcHR5cGUgPSAkdG1wOwoKCQlpZiAoZW1wdHkoJHBhcmFtc1sndG10X3N0YXJ0ZGF0ZSddKSkKCQkJJGRhdGEtPnN0YXJ0ZGF0ZSA9IG51bGw7CgkJZWxzZQoJCXsKCQkJJGR0ID0gc3RydG90aW1lKCRwYXJhbXNbJ3RtdF9zdGFydGRhdGUnXSk7CgkJCSRkYXRhLT5zdGFydGRhdGUgPSAoJGR0ICE9IEZBTFNFKSA/IGRhdGUoJ1ktbS1kJywkZHQpLicgMDA6MDA6MDAnIDogbnVsbDsKCQl9CgkJaWYgKGVtcHR5KCRwYXJhbXNbJ3RtdF9lbmRkYXRlJ10pKQoJCQkkZGF0YS0+ZW5kZGF0ZSA9IG51bGw7CgkJZWxzZQoJCXsKCQkJJGR0ID0gc3RydG90aW1lKCRwYXJhbXNbJ3RtdF9lbmRkYXRlJ10pOwoJCQkkZGF0YS0+ZW5kZGF0ZSA9ICgkZHQgIT0gRkFMU0UpID8gZGF0ZSgnWS1tLWQnLCRkdCkuJyAyMzo1OTo1OScgOiBudWxsOwoJCX0KCgkJJGRhdGEtPnRpbWV6b25lID0gJHBhcmFtc1sndG10X3RpbWV6b25lJ107CgkJLy9lbWFpbCBhbmQvb3IgdHdpdHRlciBwYXJhbWV0ZXJzIG1heSBub3QgYmUgYXZhaWxhYmxlCgkJaWYoaXNzZXQoJHBhcmFtc1sndG10X2h0bWwnXSkpCgkJCSRkYXRhLT5odG1sID0gKGludCkkcGFyYW1zWyd0bXRfaHRtbCddOwoJCWVsc2UKCQkJJGRhdGEtPmh0bWwgPSBOVUxMOwoJCWlmKGlzc2V0KCRwYXJhbXNbJ3RtdF9tb3RlbXBsYXRlJ10pKQoJCXsKCQkJaWYoJHBhcmFtc1sndG10X21vdGVtcGxhdGUnXSkKCQkJCSRkYXRhLT5tb3RlbXBsYXRlID0gJHBhcmFtc1sndG10X21vdGVtcGxhdGUnXTsKCQkJZWxzZQoJCQkJJGRhdGEtPm1vdGVtcGxhdGUgPSAkbW9kLT5HZXRUZW1wbGF0ZSgnbWFpbG91dF9kZWZhdWx0X3RlbXBsYXRlJyk7CgkJfQoJCWVsc2UKCQkJJGRhdGEtPm1vdGVtcGxhdGUgPSBOVUxMOwoJCWlmKGlzc2V0KCRwYXJhbXNbJ3RtdF9tY2FuY3RlbXBsYXRlJ10pKQoJCXsKCQkJaWYoJHBhcmFtc1sndG10X21jYW5jdGVtcGxhdGUnXSkKCQkJCSRkYXRhLT5tY2FuY3RlbXBsYXRlID0gJHBhcmFtc1sndG10X21jYW5jdGVtcGxhdGUnXTsKCQkJZWxzZQoJCQkJJGRhdGEtPm1jYW5jdGVtcGxhdGUgPSAkbW9kLT5HZXRUZW1wbGF0ZSgnbWFpbGNhbmNlbF9kZWZhdWx0X3RlbXBsYXRlJyk7CgkJfQoJCWVsc2UKCQkJJGRhdGEtPm1jYW5jdGVtcGxhdGUgPSBOVUxMOwoJCWlmKGlzc2V0KCRwYXJhbXNbJ3RtdF9tcmVxdGVtcGxhdGUnXSkpCgkJewoJCQlpZigkcGFyYW1zWyd0bXRfbXJlcXRlbXBsYXRlJ10pCgkJCQkkZGF0YS0+bXJlcXRlbXBsYXRlID0gJHBhcmFtc1sndG10X21yZXF0ZW1wbGF0ZSddOwoJCQllbHNlCgkJCQkkZGF0YS0+bXJlcXRlbXBsYXRlID0gJG1vZC0+R2V0VGVtcGxhdGUoJ21haWxyZXF1ZXN0X2RlZmF1bHRfdGVtcGxhdGUnKTsKCQl9CgkJZWxzZQoJCQkkZGF0YS0+bXJlcXRlbXBsYXRlID0gTlVMTDsKCQlpZihpc3NldCgkcGFyYW1zWyd0bXRfbWl0ZW1wbGF0ZSddKSkKCQl7CgkJCWlmKCRwYXJhbXNbJ3RtdF9taXRlbXBsYXRlJ10pCgkJCQkkZGF0YS0+bWl0ZW1wbGF0ZSA9ICRwYXJhbXNbJ3RtdF9taXRlbXBsYXRlJ107CgkJCWVsc2UKCQkJCSRkYXRhLT5taXRlbXBsYXRlID0gJG1vZC0+R2V0VGVtcGxhdGUoJ21haWxpbl9kZWZhdWx0X3RlbXBsYXRlJyk7CgkJfQoJCWVsc2UKCQkJJGRhdGEtPm1pdGVtcGxhdGUgPSBOVUxMOwoKCQlpZihpc3NldCgkcGFyYW1zWyd0bXRfdG90ZW1wbGF0ZSddKSkKCQl7CgkJCWlmKCRwYXJhbXNbJ3RtdF90b3RlbXBsYXRlJ10pCgkJCQkkZGF0YS0+dG90ZW1wbGF0ZSA9ICRwYXJhbXNbJ3RtdF90b3RlbXBsYXRlJ107CgkJCWVsc2UKCQkJCSRkYXRhLT50b3RlbXBsYXRlID0gJG1vZC0+R2V0VGVtcGxhdGUoJ3R3ZWV0b3V0X2RlZmF1bHRfdGVtcGxhdGUnKTsKCQl9CgkJZWxzZQoJCQkkZGF0YS0+dG90ZW1wbGF0ZSA9IE5VTEw7CgkJaWYoaXNzZXQoJHBhcmFtc1sndG10X3RjYW5jdGVtcGxhdGUnXSkpCgkJewoJCQlpZigkcGFyYW1zWyd0bXRfdGNhbmN0ZW1wbGF0ZSddKQoJCQkJJGRhdGEtPnRjYW5jdGVtcGxhdGUgPSAkcGFyYW1zWyd0bXRfdGNhbmN0ZW1wbGF0ZSddOwoJCQllbHNlCgkJCQkkZGF0YS0+dGNhbmN0ZW1wbGF0ZSA9ICRtb2QtPkdldFRlbXBsYXRlKCd0d2VldGNhbmNlbF9kZWZhdWx0X3RlbXBsYXRlJyk7CgkJfQoJCWVsc2UKCQkJJGRhdGEtPnRjYW5jdGVtcGxhdGUgPSBOVUxMOwoJCWlmKGlzc2V0KCRwYXJhbXNbJ3RtdF90cmVxdGVtcGxhdGUnXSkpCgkJewoJCQlpZigkcGFyYW1zWyd0bXRfdHJlcXRlbXBsYXRlJ10pCgkJCQkkZGF0YS0+dHJlcXRlbXBsYXRlID0gJHBhcmFtc1sndG10X3RyZXF0ZW1wbGF0ZSddOwoJCQllbHNlCgkJCQkkZGF0YS0+dHJlcXRlbXBsYXRlID0gJG1vZC0+R2V0VGVtcGxhdGUoJ3R3ZWV0cmVxdWVzdF9kZWZhdWx0X3RlbXBsYXRlJyk7CgkJfQoJCWVsc2UKCQkJJGRhdGEtPnRyZXF0ZW1wbGF0ZSA9IE5VTEw7CgkJaWYoaXNzZXQoJHBhcmFtc1sndG10X3RpdGVtcGxhdGUnXSkpCgkJewoJCQlpZigkcGFyYW1zWyd0bXRfdGl0ZW1wbGF0ZSddKQoJCQkJJGRhdGEtPnRpdGVtcGxhdGUgPSAkcGFyYW1zWyd0bXRfdGl0ZW1wbGF0ZSddOwoJCQllbHNlCgkJCQkkZGF0YS0+dGl0ZW1wbGF0ZSA9ICRtb2QtPkdldFRlbXBsYXRlKCd0d2VldGluX2RlZmF1bHRfdGVtcGxhdGUnKTsKCQl9CgkJZWxzZQoJCQkkZGF0YS0+dGl0ZW1wbGF0ZSA9IE5VTEw7CgkJJGRhdGEtPmxvZ2ljID0gJHBhcmFtc1sndG10X2xvZ2ljJ107CgoJCWlmKCRwYXJhbXNbJ3RtdF9jaHR0ZW1wbGF0ZSddKQoJCQkkZGF0YS0+Y2h0dGVtcGxhdGUgPSAkcGFyYW1zWyd0bXRfY2h0dGVtcGxhdGUnXTsKCQllbHNlCgkJCSRkYXRhLT5jaHR0ZW1wbGF0ZSA9ICRtb2QtPkdldFRlbXBsYXRlKCdjaGFydF9kZWZhdWx0X3RlbXBsYXRlJyk7CgkJJGRhdGEtPmNoYXJ0Y3NzID0gJHBhcmFtc1sndG10X2NoYXJ0Y3NzJ107CgkJaWYgKGlzc2V0KCRwYXJhbXNbJ2Nzc2ZpbGUnXSkpCgkJCSRkYXRhLT5jc3NmaWxlID0gJHBhcmFtc1snY3NzZmlsZSddOwoJCWVsc2UKCQkJJGRhdGEtPmNzc2ZpbGUgPSBOVUxMOwoJCSRkYXRhLT5hdGZvcm1hdCA9ICRwYXJhbXNbJ3RtdF9hdGZvcm1hdCddOwoJCSRkYXRhLT5maW5hbCA9ICRwYXJhbXNbJ3RtdF9maW5hbCddOwoJCSRkYXRhLT5zZW1pID0gJHBhcmFtc1sndG10X3NlbWknXTsKCQkkZGF0YS0+cXVhcnRlciA9ICRwYXJhbXNbJ3RtdF9xdWFydGVyJ107CgkJJGRhdGEtPmVpZ2h0aCA9ICRwYXJhbXNbJ3RtdF9laWdodGgnXTsKCQkkZGF0YS0+cm91bmRuYW1lID0gJHBhcmFtc1sndG10X3JvdW5kbmFtZSddOwoJCSRkYXRhLT52ZXJzdXMgPSAkcGFyYW1zWyd0bXRfdmVyc3VzJ107CgkJJGRhdGEtPmRlZmVhdGVkID0gJHBhcmFtc1sndG10X2RlZmVhdGVkJ107CgkJaWYgKGVtcHR5KCRwYXJhbXNbJ3RtdF9jYW50aWUnXSkpIC8vY2hlY2tib3ggRkFMU0UgdmFsdWUgbWF5IG5vdCBiZSBwcmVzZW50CgkJewoJCQkkcGFyYW1zWyd0bXRfY2FudGllJ10gPSAwOwoJCQkkZGF0YS0+Y2FudGllID0gMDsKCQl9CgkJZWxzZQoJCQkkZGF0YS0+Y2FudGllID0gMTsKCQkkZGF0YS0+dGllZCA9ICRwYXJhbXNbJ3RtdF90aWVkJ107CgkJJGRhdGEtPmJ5ZSA9ICRwYXJhbXNbJ3RtdF9ieWUnXTsKCQkkZGF0YS0+Zm9yZmVpdCA9ICRwYXJhbXNbJ3RtdF9mb3JmZWl0J107CgkJJGRhdGEtPm5vbWF0Y2ggPSAkcGFyYW1zWyd0bXRfbm9tYXRjaCddOwoKCQkkaXRlbXMgPSBhcnJheSgpOwoJCWlmICghZW1wdHkoJHBhcmFtc1sndGVtX3RlYW1pZCddKSkKCQl7CgkJCWZvcmVhY2ggKCRwYXJhbXNbJ3RlbV90ZWFtaWQnXSBhcyAkaW5keD0+JHRpZCkKCQkJewoJCQkJJG5hbWUgPSAkcGFyYW1zWyd0ZW1fbmFtZSddWyRpbmR4XTsKCQkJCSRjb250YWN0ID0gJHBhcmFtc1sndGVtX2NvbnRhY3QnXVskaW5keF07CgkJCQkkdG9hbGwgPSAkcGFyYW1zWyd0ZW1fY29udGFjdGFsbCddWyRpbmR4XTsKCQkJCSRzZWVkID0gJHBhcmFtc1sndGVtX3NlZWQnXVskaW5keF07CgoJCQkJJG5hbWUgPSAoJG5hbWUgPT0gRkFMU0UpID8gbnVsbCA6IHRyaW0oJG5hbWUpOwoJCQkJJGNvbnRhY3QgPSAoJGNvbnRhY3QgPT0gRkFMU0UpID8gbnVsbCA6IHRyaW0oJGNvbnRhY3QpOwoJCQkJJHNlZWQgPSAoJHNlZWQgPT0gRkFMU0UpID8gbnVsbCA6IGludHZhbCgkc2VlZCk7CgoJCQkJJGl0ZW1zWyR0aWRdID0gYXJyYXkoJ25hbWUnPT4kbmFtZSwnc2VlZGluZyc9PiRzZWVkLAoJCQkJICdjb250YWN0YWxsJz0+JHRvYWxsLCdjb250YWN0Jz0+JGNvbnRhY3QsCgkJCQkgJ2Rpc3BsYXlvcmRlcic9PiRpbmR4KzEpOwoJCQl9CgkJfQoJCSRkYXRhLT50ZWFtcyA9ICRpdGVtczsKCgkJJGl0ZW1zID0gYXJyYXkoKTsKCQlpZiAoIWVtcHR5KCRwYXJhbXNbJ21hdF9wbGF5d2hlbiddKSkKCQl7CgkJCSRpZHMgPSBhcnJheV9rZXlzKCRwYXJhbXNbJ21hdF9zdGF0dXMnXSk7CgkJCWZvcmVhY2ggKCRwYXJhbXNbJ21hdF9wbGF5d2hlbiddIGFzICRpbmR4PT4kd2hlbikKCQkJewoJCQkJJG9uID0gc2VsZjo6R2V0Rm9ybWF0dGVkRGF0ZSgkd2hlbik7CgkJCQkkYXQgPSB0cmltKCRwYXJhbXNbJ21hdF9wbGF5d2hlcmUnXVskaW5keF0pOwoKCQkJCWlmICgkb24gPT0gRkFMU0UpICRvbiA9IG51bGw7CgkJCQlpZiAoJGF0ID09IEZBTFNFKSAkYXQgPSBudWxsOwoKCQkJCSRpZCA9ICRpZHNbJGluZHhdOwoJCQkJJGl0ZW1zWyRpZF0gPSBhcnJheSgncGxheXdoZW4nPT4kb24sJ3BsYWNlJz0+JGF0LAoJCQkJJ3N0YXR1cyc9PiRwYXJhbXNbJ21hdF9zdGF0dXMnXVskaWRdKTsKCQkJfQoJCX0KCQkkZGF0YS0+bWF0Y2hlcyA9ICRpdGVtczsKCQkkZGF0YS0+bWF0Y2h2aWV3ID0gJHBhcmFtc1snbWF0Y2h2aWV3J107CgoJCSRpdGVtcyA9IGFycmF5KCk7CgkJaWYgKCFlbXB0eSgkcGFyYW1zWydyZXNfcGxheXdoZW4nXSkpCgkJewoJCQkkaWRzID0gYXJyYXlfa2V5cygkcGFyYW1zWydyZXNfc3RhdHVzJ10pOwoJCQlmb3JlYWNoICgkcGFyYW1zWydyZXNfcGxheXdoZW4nXSBhcyAkaW5keD0+JHdoZW4pCgkJCXsKCQkJCSRvbiA9IHNlbGY6OkdldEZvcm1hdHRlZERhdGUoJHdoZW4pOwoJCQkJaWYgKCRvbiA9PSBGQUxTRSkgJG9uID0gbnVsbDsKCgkJCQkkaWQgPSAkaWRzWyRpbmR4XTsKCQkJCSRpdGVtc1skaWRdID0gYXJyYXkoCgkJCQkncGxheXdoZW4nPT4kb24sJ3N0YXR1cyc9PiRwYXJhbXNbJ3Jlc19zdGF0dXMnXVskaWRdLAoJCQkJJ3Njb3JlJz0+JHBhcmFtc1sncmVzX3Njb3JlJ11bJGluZHhdKTsKCQkJfQoJCX0KCQkkZGF0YS0+cmVzdWx0cyA9ICRpdGVtczsKCQkkZGF0YS0+cmVzdWx0dmlldyA9ICRwYXJhbXNbJ3Jlc3VsdHZpZXcnXTsKCgkJcmV0dXJuICRkYXRhOwoJfQoKCS8qKgoJR2V0QnJhY2tldERhdGE6CglAbW9kOiByZWZlcmVuY2UgdG8gY3VycmVudCBtb2R1bGUgb2JqZWN0CglAb3A6ICdyZWFsLWFjdGlvbicgc3RyaW5nIHNpZ25hbGxpbmcgd2hhdCBzb3J0IG9mIGRhdGEgdG8gcmV0dXJuCglAaWQ6IGlkIHBhcmFtZXRlciBzdXBwbGllZCB0byBhY3Rpb24gd2hpY2ggY2FsbGVkIGhlcmUKCUBicmFja2V0X2lkIG9wdGlvbmFsLCBicmFja2V0IGlkZW50aWZpZXIsIGRlZmF1bHQgRkFMU0UKCUBwYXJhbXMgb3B0aW9uYWwsIHBhcmFtZXRlcnMgYXJyYXkgc3VwcGxpZWQgdG8gYWN0aW9uIHdoaWNoIGNhbGxlZCBoZXJlLCBkZWZhdWx0IEZBTFNFCglSZXR1cm5zOiBzdGRDbGFzcyBvYmplY3QsIG9yIEZBTFNFIGlmIG5vIHRhYmxlZCBicmFja2V0LWRhdGEgZm9yIHNldmVyYWwgdHlwZXMgb2YgJG9wCgkqLwoJZnVuY3Rpb24gJkdldEJyYWNrZXREYXRhKCYkbW9kLCRvcCwkaWQsJGJyYWNrZXRfaWQ9RkFMU0UsJHBhcmFtcz1GQUxTRSkKCXsKCQkkZGF0YSA9IEZBTFNFOwoJCXN3aXRjaCAoJG9wKQoJCXsKCQkgY2FzZSAnYWRkJzoKCQkJJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCQkJJGRhdGEgPSBuZXcgc3RkQ2xhc3MoKTsKCQkJJGRhdGEtPmJyYWNrZXRfaWQgPSAkZGItPkdlbklEKGNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3RtdF9icmFja2V0c19zZXEnKTsKCQkJJGRhdGEtPmdyb3VwaWQgPSAwOyAvL3VuZ3JvdXBlZAoJCQkkZGF0YS0+dHlwZSA9ICcnOyAvL3NlbGVjdCB0aGUgJ2Nob29zZSBvbmUnIGl0ZW0gaW4gbGlzdAoJCQkkZGF0YS0+bmFtZSA9ICcnOwoJCQkkZGF0YS0+ZGVzY3JpcHRpb24gPSAnJzsKCQkJJGRhdGEtPmFsaWFzID0gJyc7CgkJCSRkYXRhLT5zZWVkdHlwZSA9IDA7IC8vcmFuZG9tIGFsbG9jYXRpb24gb2Ygc2VlZC1tYXRjaGVzCgkJCSRkYXRhLT5maXh0eXBlID0gMDsgLy9ubyBzcGVjaWFsLWNhc2UgYWxsb2NhdGlvbgoJCQkkZGF0YS0+dGVhbXNpemUgPSAxOwoJCQkkZGF0YS0+b3duZXIgPSAnJzsKCQkJJGRhdGEtPmNvbnRhY3QgPSAnJzsKCQkJJGRhdGEtPmxvY2FsZSA9ICcnOwoJCQkkZGF0YS0+dHd0ZnJvbSA9ICcnOwoJCQkkZGF0YS0+c21zZnJvbSA9ICcnOwoJCQkkZGF0YS0+c21zcHJlZml4ID0gJyc7CgkJCSRkYXRhLT5zbXNwYXR0ZXJuID0gJG1vZC0+R2V0UHJlZmVyZW5jZSgncGhvbmVfcmVnZXgnKTsKCQkJJGRhdGEtPmZldV9lZGl0Z3JvdXAgPSAnbm9uZSc7CgoJCQkkZGF0YS0+bW90ZW1wbGF0ZSA9ICRtb2QtPkdldFRlbXBsYXRlKCdtYWlsb3V0X2RlZmF1bHRfdGVtcGxhdGUnKTsKCQkJJGRhdGEtPm1jYW5jdGVtcGxhdGUgPSAkbW9kLT5HZXRUZW1wbGF0ZSgnbWFpbGNhbmNlbF9kZWZhdWx0X3RlbXBsYXRlJyk7CgkJCSRkYXRhLT5tcmVxdGVtcGxhdGUgPSAkbW9kLT5HZXRUZW1wbGF0ZSgnbWFpbHJlcXVlc3RfZGVmYXVsdF90ZW1wbGF0ZScpOwoJCQkkZGF0YS0+bWl0ZW1wbGF0ZSA9ICRtb2QtPkdldFRlbXBsYXRlKCdtYWlsaW5fZGVmYXVsdF90ZW1wbGF0ZScpOwoJCQkkZGF0YS0+dG90ZW1wbGF0ZSA9ICRtb2QtPkdldFRlbXBsYXRlKCd0d2VldG91dF9kZWZhdWx0X3RlbXBsYXRlJyk7CgkJCSRkYXRhLT50Y2FuY3RlbXBsYXRlID0gJG1vZC0+R2V0VGVtcGxhdGUoJ3R3ZWV0Y2FuY2VsX2RlZmF1bHRfdGVtcGxhdGUnKTsKCQkJJGRhdGEtPnRyZXF0ZW1wbGF0ZSA9ICRtb2QtPkdldFRlbXBsYXRlKCd0d2VldHJlcXVlc3RfZGVmYXVsdF90ZW1wbGF0ZScpOwoJCQkkZGF0YS0+dGl0ZW1wbGF0ZSA9ICRtb2QtPkdldFRlbXBsYXRlKCd0d2VldGluX2RlZmF1bHRfdGVtcGxhdGUnKTsKCQkJJGRhdGEtPmh0bWwgPSAwOwoJCQkkZGF0YS0+bG9naWMgPSAnJzsKCgkJCSRkYXRhLT5jaHR0ZW1wbGF0ZSA9ICRtb2QtPkdldFRlbXBsYXRlKCdjaGFydF9kZWZhdWx0X3RlbXBsYXRlJyk7CgkJCSRkYXRhLT5jaGFydGNzcyA9ICcnOwoJCQkkZGF0YS0+YXRmb3JtYXQgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdkYXRlX2Zvcm1hdCcpLicgJy4kbW9kLT5HZXRQcmVmZXJlbmNlKCd0aW1lX2Zvcm1hdCcpOwoJCQkkZGF0YS0+ZmluYWwgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdsYXN0X21hdGNoX25hbWUnKTsKCQkJJGRhdGEtPnNlbWkgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCcybmRsYXN0X21hdGNoX25hbWUnKTsKCQkJJGRhdGEtPnF1YXJ0ZXIgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCczcmRsYXN0X21hdGNoX25hbWUnKTsKCQkJJGRhdGEtPmVpZ2h0aCA9ICRtb2QtPkdldFByZWZlcmVuY2UoJzR0aGxhc3RfbWF0Y2hfbmFtZScpOwoJCQkkZGF0YS0+cm91bmRuYW1lID0gJG1vZC0+R2V0UHJlZmVyZW5jZSgnb3RoZXJfbWF0Y2hfbmFtZScpOwoJCQkkZGF0YS0+dmVyc3VzID0gJG1vZC0+R2V0UHJlZmVyZW5jZSgnYWdhaW5zdF9uYW1lJyk7CgkJCSRkYXRhLT5kZWZlYXRlZCA9ICRtb2QtPkdldFByZWZlcmVuY2UoJ2RlZl9uYW1lJyk7CgkJCSRkYXRhLT5jYW50aWUgPSAwOwoJCQkkZGF0YS0+dGllZCA9ICRtb2QtPkdldFByZWZlcmVuY2UoJ3RpZWRfbmFtZScpOwoJCQkkZGF0YS0+YnllID0gJG1vZC0+R2V0UHJlZmVyZW5jZSgnbm9vcF9uYW1lJyk7CgkJCSRkYXRhLT5mb3JmZWl0ID0gJG1vZC0+R2V0UHJlZmVyZW5jZSgnZm9yZmVpdF9uYW1lJyk7CgkJCSRkYXRhLT5ub21hdGNoID0gJG1vZC0+R2V0UHJlZmVyZW5jZSgnYWJhbmRvbl9uYW1lJyk7CgoJCQkkZGF0YS0+dGltZXpvbmUgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCd0aW1lX3pvbmUnKTsKCQkJJGRhdGEtPnN0YXJ0ZGF0ZSA9ICcnOwoJCQkkZGF0YS0+ZW5kZGF0ZSA9ICcnOwoJCQkkZGF0YS0+c2FtZXRpbWUgPSAnJzsKCQkJJGRhdGEtPmNhbGVuZGFyaWQgPSAnJzsKCQkJJGRhdGEtPnBsYXlnYXAgPSAxOwoJCQkkZGF0YS0+cGxheWdhcHR5cGUgPSAyOwoJCQkkZGF0YS0+YXZhaWxhYmxlID0gJyc7CgkJCSRkYXRhLT5sYXRpdHVkZSA9ICcnOwoJCQkkZGF0YS0+bG9uZ2l0dWRlID0gJyc7CgkJCSRkYXRhLT5wbGFjZWdhcCA9IDE7CgkJCSRkYXRhLT5wbGFjZWdhcHR5cGUgPSAyOwoJCQkvL3RoZSByZXN0IGFyZSBub3QgaW4gYnJhY2tldHMtdGFibGUgZGF0YQoJCQkkZGF0YS0+YWRkZWQgPSAxOyAvL3NpZ25hbCB0aGlzIGlzIGEgbmV3IGFkZGl0aW9uCgkJCSRkYXRhLT5jc3NmaWxlID0gJyc7CgkJCSRkYXRhLT50ZWFtcyA9IGFycmF5KCk7CgkJCSRkYXRhLT5tYXRjaGVzID0gYXJyYXkoKTsKCQkJJGRhdGEtPm1hdGNodmlldyA9ICdhY3R1YWwnOwoJCQkkZGF0YS0+cmVzdWx0cyA9IGFycmF5KCk7CgkJCSRkYXRhLT5yZXN1bHR2aWV3ID0gJ2Z1dHVyZSc7CgkJCWJyZWFrOwoKCQkgY2FzZSAndmlldyc6CgkJIGNhc2UgJ2FwcGx5JzoKCQkgY2FzZSAnZWRpdCc6CgkJIGNhc2UgJ3Jlc3VsdF92aWV3JzoKCQkgY2FzZSAnbWF0Y2hfdmlldyc6CgkJCSRwcmVmID0gY21zX2RiX3ByZWZpeCgpOwoJCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOwoJCQkkc3FsID0gJ1NFTEVDVCAqIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9icmFja2V0cyBXSEVSRSBicmFja2V0X2lkPT8nOwoJCQkkcm93ID0gJGRiLT5HZXRSb3coJHNxbCxhcnJheSgkYnJhY2tldF9pZCkpOwoJCQlpZiAoJHJvdyA9PSBGQUxTRSkKCQkJCWJyZWFrOwoJCQkkZGF0YSA9IG5ldyBzdGRDbGFzcygpOwoKCQkJJGRhdGEtPmJyYWNrZXRfaWQgPSAkYnJhY2tldF9pZDsKCQkJJGRhdGEtPmdyb3VwaWQgPSAoaW50KSRyb3dbJ2dyb3VwaWQnXTsKLy9UT0RPIGFsc28gYWxsb3cgcGlja2VyIGZvciBjb3B5LCBhbGxvdyBlZGl0IE9OTFkgYmVmb3JlIGNvbXAgc3RhcnRzCgkJCSRkYXRhLT50eXBlID0gKGludCkkcm93Wyd0eXBlJ107Ci8vCQkkZGF0YS0+dGVhbWNvdW50ID0gJHJvd1sndGVhbWNvdW50J107CgkJCSRkYXRhLT5uYW1lID0gJHJvd1snbmFtZSddOwoJCQkkZGF0YS0+ZGVzY3JpcHRpb24gPSAkcm93WydkZXNjcmlwdGlvbiddOwoJCQkkZGF0YS0+YWxpYXMgPSAkcm93WydhbGlhcyddOwoJCQkkZGF0YS0+c2VlZHR5cGUgPSBpbnR2YWwoJHJvd1snc2VlZHR5cGUnXSk7CgkJCSRkYXRhLT5maXh0eXBlID0gaW50dmFsKCRyb3dbJ2ZpeHR5cGUnXSk7CgkJCSRkYXRhLT50ZWFtc2l6ZSA9IGludHZhbCgkcm93Wyd0ZWFtc2l6ZSddKTsKCQkJJGRhdGEtPm93bmVyID0gJHJvd1snb3duZXInXTsKCQkJJGRhdGEtPmNvbnRhY3QgPSAkcm93Wydjb250YWN0J107CgkJCSRkYXRhLT5sb2NhbGUgPSAkcm93Wydsb2NhbGUnXTsKCQkJJGRhdGEtPnR3dGZyb20gPSAkcm93Wyd0d3Rmcm9tJ107CgkJCSRkYXRhLT5zbXNmcm9tID0gJHJvd1snc21zZnJvbSddOwoJCQkkZGF0YS0+c21zcHJlZml4ID0gJHJvd1snc21zcHJlZml4J107CgkJCSRkYXRhLT5zbXNwYXR0ZXJuID0gJHJvd1snc21zcGF0dGVybiddOwoJCQkkZGF0YS0+ZmV1X2VkaXRncm91cCA9ICRyb3dbJ2ZldV9lZGl0Z3JvdXAnXTsKCgkJCSRkYXRhLT5tb3RlbXBsYXRlID0gJG1vZC0+R2V0VGVtcGxhdGUoJ21haWxvdXRfJy4kcm93WydicmFja2V0X2lkJ10uJ190ZW1wbGF0ZScpOwoJCQkkZGF0YS0+bWNhbmN0ZW1wbGF0ZSA9ICRtb2QtPkdldFRlbXBsYXRlKCdtYWlsY2FuY2VsXycuJHJvd1snYnJhY2tldF9pZCddLidfdGVtcGxhdGUnKTsKCQkJJGRhdGEtPm1yZXF0ZW1wbGF0ZSA9ICRtb2QtPkdldFRlbXBsYXRlKCdtYWlscmVxdWVzdF8nLiRyb3dbJ2JyYWNrZXRfaWQnXS4nX3RlbXBsYXRlJyk7CgkJCSRkYXRhLT5taXRlbXBsYXRlID0gJG1vZC0+R2V0VGVtcGxhdGUoJ21haWxpbl8nLiRyb3dbJ2JyYWNrZXRfaWQnXS4nX3RlbXBsYXRlJyk7CgkJCSRkYXRhLT50b3RlbXBsYXRlID0gJG1vZC0+R2V0VGVtcGxhdGUoJ3R3ZWV0b3V0XycuJHJvd1snYnJhY2tldF9pZCddLidfdGVtcGxhdGUnKTsKCQkJJGRhdGEtPnRjYW5jdGVtcGxhdGUgPSAkbW9kLT5HZXRUZW1wbGF0ZSgndHdlZXRjYW5jZWxfJy4kcm93WydicmFja2V0X2lkJ10uJ190ZW1wbGF0ZScpOwoJCQkkZGF0YS0+dHJlcXRlbXBsYXRlID0gJG1vZC0+R2V0VGVtcGxhdGUoJ3R3ZWV0cmVxdWVzdF8nLiRyb3dbJ2JyYWNrZXRfaWQnXS4nX3RlbXBsYXRlJyk7CgkJCSRkYXRhLT50aXRlbXBsYXRlID0gJG1vZC0+R2V0VGVtcGxhdGUoJ3R3ZWV0aW5fJy4kcm93WydicmFja2V0X2lkJ10uJ190ZW1wbGF0ZScpOwoJCQkkZGF0YS0+aHRtbCA9IChpbnQpJHJvd1snaHRtbCddOwoJCQkkZGF0YS0+bG9naWMgPSAkcm93Wydsb2dpYyddOwoKCQkJJGRhdGEtPmNodHRlbXBsYXRlID0gJG1vZC0+R2V0VGVtcGxhdGUoJ2NoYXJ0XycuJHJvd1snYnJhY2tldF9pZCddLidfdGVtcGxhdGUnKTsKCQkJJGRhdGEtPmNoYXJ0Y3NzID0gJHJvd1snY2hhcnRjc3MnXTsKCQkJJGRhdGEtPmF0Zm9ybWF0ID0gJHJvd1snYXRmb3JtYXQnXTsKCQkJJGRhdGEtPmZpbmFsID0gJHJvd1snZmluYWwnXTsKCQkJJGRhdGEtPnNlbWkgPSAkcm93WydzZW1pJ107CgkJCSRkYXRhLT5xdWFydGVyID0gJHJvd1sncXVhcnRlciddOwoJCQkkZGF0YS0+ZWlnaHRoID0gJHJvd1snZWlnaHRoJ107CgkJCSRkYXRhLT5yb3VuZG5hbWUgPSAkcm93Wydyb3VuZG5hbWUnXTsKCQkJJGRhdGEtPnZlcnN1cyA9ICRyb3dbJ3ZlcnN1cyddOwoJCQkkZGF0YS0+ZGVmZWF0ZWQgPSAkcm93WydkZWZlYXRlZCddOwoJCQkkZGF0YS0+Y2FudGllID0gJHJvd1snY2FudGllJ107CgkJCSRkYXRhLT50aWVkID0gJHJvd1sndGllZCddOwoJCQkkZGF0YS0+YnllID0gJHJvd1snYnllJ107CgkJCSRkYXRhLT5mb3JmZWl0ID0gJHJvd1snZm9yZmVpdCddOwoJCQkkZGF0YS0+bm9tYXRjaCA9ICRyb3dbJ25vbWF0Y2gnXTsKCgkJCSRkYXRhLT50aW1lem9uZSA9ICRyb3dbJ3RpbWV6b25lJ107CgkJCSRkYXRhLT5zdGFydGRhdGUgPSBzZWxmOjpHZXRGb3JtYXR0ZWREYXRlKCRyb3dbJ3N0YXJ0ZGF0ZSddLFRSVUUpOwoJCQkkZGF0YS0+ZW5kZGF0ZSA9IHNlbGY6OkdldEZvcm1hdHRlZERhdGUoJHJvd1snZW5kZGF0ZSddLFRSVUUpOwoJCQkkZGF0YS0+c2FtZXRpbWUgPSAkcm93WydzYW1ldGltZSddOwoJCQkkZGF0YS0+Y2FsZW5kYXJpZCA9ICRyb3dbJ2NhbGVuZGFyaWQnXTsKCQkJJGRhdGEtPnBsYXlnYXAgPSAkcm93WydwbGF5Z2FwJ107CgkJCSRkYXRhLT5wbGF5Z2FwdHlwZSA9ICRyb3dbJ3BsYXlnYXB0eXBlJ107CgkJCSRkYXRhLT5hdmFpbGFibGUgPSAkcm93WydhdmFpbGFibGUnXTsKCQkJJGRhdGEtPmxhdGl0dWRlID0gJHJvd1snbGF0aXR1ZGUnXTsKCQkJJGRhdGEtPmxvbmdpdHVkZSA9ICRyb3dbJ2xvbmdpdHVkZSddOwoJCQkkZGF0YS0+cGxhY2VnYXAgPSAkcm93WydwbGFjZWdhcCddOwoJCQkkZGF0YS0+cGxhY2VnYXB0eXBlID0gJHJvd1sncGxhY2VnYXB0eXBlJ107CgoJCQkvL3RoZSByZXN0IGFyZSBub3QgaW4gYnJhY2tldHMtdGFibGUgZGF0YQoJCQlpZihpc3NldCgkcGFyYW1zWyduZXdicmFja2V0J10pKQoJCQkJJGRhdGEtPmFkZGVkID0gMTsKCQkJJGRhdGEtPmNzc2ZpbGUgPSAnJzsKCgkJCSRzcWwgPSAnU0VMRUNUIHRlYW1faWQsbmFtZSxzZWVkaW5nLGNvbnRhY3RhbGwsZGlzcGxheW9yZGVyIEZST00gJy4KCQkJCSRwcmVmLidtb2R1bGVfdG10X3RlYW1zIFdIRVJFIGJyYWNrZXRfaWQ9PyBBTkQgZmxhZ3MhPTIgT1JERVIgQlkgZGlzcGxheW9yZGVyJzsKCQkJJGRhdGEtPnRlYW1zID0gJGRiLT5HZXRBc3NvYygkc3FsLGFycmF5KCRicmFja2V0X2lkKSk7CgkJCWlmICgkZGF0YS0+dGVhbXMpCgkJCXsKCQkJCS8vc3VwcGxlbWVudCB3aXRoIHJlbGF0ZWQgZGF0YSBmcm9tIHBlb3BsZSB0YWJsZQoJCQkJZm9yZWFjaCAoJGRhdGEtPnRlYW1zIGFzICR0aWQ9PiYkcm93KQoJCQkJewoJCQkJCWxpc3QoJG5hbWUsJGNvbnRhY3QpID0gc2VsZjo6R2V0Zm9yRmlyc3RQbGF5ZXIoJHRpZCk7CgkJCQkJaWYgKCRyb3dbJ25hbWUnXSA9PSAnJykKCQkJCQkJJHJvd1snbmFtZSddID0gJG5hbWU7CgkJCQkJJHJvd1snY29udGFjdCddID0gJGNvbnRhY3Q7CgkJCQl9CgkJCQl1bnNldCgkcm93KTsKCQkJfQoJCQkkZGF0YS0+bWF0Y2h2aWV3ID0gKCRwYXJhbXMgJiYgIWVtcHR5KCRwYXJhbXNbJ21hdGNodmlldyddKSk/JHBhcmFtc1snbWF0Y2h2aWV3J106J2FjdHVhbCc7CgkJCWlmKCRkYXRhLT5tYXRjaHZpZXcgPT0gJ2FjdHVhbCcpCgkJCQkvL3NvcnQgY3V6IG1hdGNoZXMgbWF5IGJlIGluIGRhdGFiYXNlIGluIHJldmVyc2Ugb3JkZXIKCQkJCSRzcWwgPSAnU0VMRUNUIG1hdGNoX2lkLHRlYW1BLHRlYW1CLHBsYXl3aGVuLHBsYWNlLHN0YXR1cyxzY29yZSBGUk9NICcuCgkJCQkJJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlcyBXSEVSRSBicmFja2V0X2lkPT8gQU5EIHN0YXR1czwnLlRvdXJuZXk6OkFOT04uCgkJCQkJJyBBTkQgdGVhbUEgSVMgTk9UIE5VTEwgQU5EIHRlYW1CIElTIE5PVCBOVUxMIE9SREVSIEJZIG1hdGNoX2lkJzsKCQkJZWxzZQoJCQkJJHNxbCA9ICdTRUxFQ1QgbWF0Y2hfaWQsbmV4dG0sbmV4dGxtLHRlYW1BLHRlYW1CLHBsYXl3aGVuLHBsYWNlLHN0YXR1cyxzY29yZSBGUk9NICcuCgkJCQkJJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlcyBXSEVSRSBicmFja2V0X2lkPT8gT1JERVIgQlkgbWF0Y2hfaWQnOwoJCQkkZGF0YS0+bWF0Y2hlcyA9ICRkYi0+R2V0QXNzb2MoJHNxbCxhcnJheSgkYnJhY2tldF9pZCkpOwoJCQlpZiAoJGRhdGEtPm1hdGNoZXMpCgkJCXsKCQkJCWZvcmVhY2ggKCRkYXRhLT5tYXRjaGVzIGFzICRrPT4mJG1kYXRhKQoJCQkJewoJCQkJCS8vc3RyaXAgc2Vjb25kcyBmcm9tIHRoZSB0aW1lCgkJCQkJJG1kYXRhWydwbGF5d2hlbiddID0gc3Vic3RyKCRtZGF0YVsncGxheXdoZW4nXSwwLC0zKTsKCQkJCX0KCQkJCXVuc2V0KCRtZGF0YSk7CgkJCX0KCQkJaWYoJGRhdGEtPnR5cGUgPT0gVG91cm5leTo6UlJUWVBFICYmICRkYXRhLT5tYXRjaHZpZXcgPT0gJ3BsYW4nKQoJCQl7CgkJCQkkc3FsID0gJ1NFTEVDVCB0ZWFtX2lkIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF90ZWFtcyBXSEVSRSBicmFja2V0X2lkPT8gT1JERVIgQlkgZGlzcGxheW9yZGVyJzsKCQkJCSRhbGx0ZWFtcyA9ICRkYi0+R2V0Q29sKCRzcWwsYXJyYXkoJGJyYWNrZXRfaWQpKTsKCQkJCWlmICgkYWxsdGVhbXMpCgkJCQl7CgkJCQkJLy9wb3B1bGF0ZSBkYXRhLT5tYXRjaGVzIHdpdGggZmFrZSAnbm90LXlldC1jb25zdHJ1Y3RlZCcgbWF0Y2hlcyAobWF0Y2ggaWQgPCAwKQoJCQkJCSRmYWtlcyA9IGFycmF5KCk7CgkJCQkJaWYgKCRkYXRhLT5tYXRjaGVzKQoJCQkJCXsKCQkJCQkJZW5kKCRkYXRhLT5tYXRjaGVzKTsKCQkJCQkJJGsgPSAta2V5KCRkYXRhLT5tYXRjaGVzKS0xOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJCSRrID0gLTE7CgkJCQkJZm9yZWFjaCAoJGFsbHRlYW1zIGFzICR0aWRBKQoJCQkJCXsKCQkJCQkJJG90aGVydGVhbXMgPSBhcnJheV9kaWZmICgkYWxsdGVhbXMsIGFycmF5KCR0aWRBKSk7CgkJCQkJCWlmICgkb3RoZXJ0ZWFtcykKCQkJCQkJewoJCQkJCQkJZm9yZWFjaCAoJG90aGVydGVhbXMgYXMgJHRpZEIpCgkJCQkJCQl7CgkJCQkJCQkJJG0gPSBGQUxTRTsKCQkJCQkJCQlmb3JlYWNoICgkZGF0YS0+bWF0Y2hlcyBhcyAmJG1kYXRhKQoJCQkJCQkJCXsKCQkJCQkJCQkJaWYgKCRtZGF0YVsndGVhbUEnXSA9PSAkdGlkQSkKCQkJCQkJCQkJewoJCQkJCQkJCQkJaWYgKCRtZGF0YVsndGVhbUInXSA9PSAkdGlkQikKCQkJCQkJCQkJCXsKCQkJCQkJCQkJCQkkbSA9IFRSVUU7CgkJCQkJCQkJCQkJYnJlYWs7CgkJCQkJCQkJCQl9CgkJCQkJCQkJCX0KCQkJCQkJCQkJZWxzZWlmKCRtZGF0YVsndGVhbUInXSA9PSAkdGlkQSkKCQkJCQkJCQkJewoJCQkJCQkJCQkJaWYgKCRtZGF0YVsndGVhbUEnXSA9PSAkdGlkQikKCQkJCQkJCQkJCXsKCQkJCQkJCQkJCQkkbSA9IFRSVUU7CgkJCQkJCQkJCQkJYnJlYWs7CgkJCQkJCQkJCQl9CgkJCQkJCQkJCX0KCQkJCQkJCQl9CgkJCQkJCQkJdW5zZXQgKCRtZGF0YSk7CgkJCQkJCQkJaWYgKCEkbSkgLy9tYXRjaCBub3QgcmVjb3JkZWQgYWxyZWFkeQoJCQkJCQkJCXsKCQkJCQkJCQkJJGZha2VzWyRrLS1dID0gYXJyYXkgKAovLwkJCQkJCQkJCSAnbmV4dG0nID0+IG51bGwsCi8vCQkJCQkJCQkJICduZXh0bG0nID0+IG51bGwsCgkJCQkJCQkJCSAndGVhbUEnID0+ICR0aWRBLAoJCQkJCQkJCQkgJ3RlYW1CJyA9PiAkdGlkQiwKCQkJCQkJCQkJICdwbGF5d2hlbicgPT4gbnVsbCwKCQkJCQkJCQkJICdwbGFjZScgPT4gbnVsbCwKCQkJCQkJCQkJICdzdGF0dXMnID0+IDAsCgkJCQkJCQkJCSAnc2NvcmUnID0+IG51bGwKCQkJCQkJCQkJKTsKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCQkkYWxsdGVhbXMgPSAkb3RoZXJ0ZWFtczsKCQkJCQkJfQoJCQkJCX0KCQkJCQkkZGF0YS0+bWF0Y2hlcyA9ICRkYXRhLT5tYXRjaGVzICsgJGZha2VzOwoJCQkJfQoJCQl9CgkJCSRkYXRhLT5yZXN1bHR2aWV3ID0gKCRwYXJhbXMgJiYgIWVtcHR5KCRwYXJhbXNbJ3Jlc3VsdHZpZXcnXSkpPyRwYXJhbXNbJ3Jlc3VsdHZpZXcnXTonZnV0dXJlJzsKCQkJaWYgKCRkYXRhLT5yZXN1bHR2aWV3ID09ICdmdXR1cmUnKQoJCQkJJGNvbmQgPSAnPCcuVG91cm5leTo6QU5PTjsgLy9vciBNUkVTIGlmID8/CgkJCWVsc2UKCQkJCSRjb25kID0gJz49Jy5Ub3VybmV5OjpNUkVTOyAvL29yIEFOT04gaWYgPz8KCQkJJHNxbCA9ICdTRUxFQ1QgbWF0Y2hfaWQsIHRlYW1BLHRlYW1CLHBsYXl3aGVuLHBsYWNlLHN0YXR1cyxzY29yZSBGUk9NICcuCgkJCQkkcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzIFdIRVJFIGJyYWNrZXRfaWQ9PyBBTkQgc3RhdHVzJy4kY29uZC4nIEFORCB0ZWFtQSBJUyBOT1QgTlVMTCBBTkQgdGVhbUIgSVMgTk9UIE5VTEwgT1JERVIgQlkgbWF0Y2hfaWQnOwoJCQkkZGF0YS0+cmVzdWx0cyA9ICRkYi0+R2V0QXNzb2MoJHNxbCxhcnJheSgkYnJhY2tldF9pZCkpOwoJCQlpZiAoJGRhdGEtPnJlc3VsdHMpCgkJCXsKCQkJCWZvcmVhY2ggKCRkYXRhLT5yZXN1bHRzIGFzICYkbWRhdGEpCgkJCQl7CgkJCQkJaWYgKGludHZhbCgkbWRhdGFbJ3N0YXR1cyddKSA8IFRvdXJuZXk6Ok1SRVMpICRtZGF0YVsnc3RhdHVzJ10gPSBUb3VybmV5OjpOT1RZRVQ7CgkJCQkJLy9zdHJpcCBzZWNvbmRzIGZyb20gdGhlIHRpbWUKCQkJCQkkbWRhdGFbJ3BsYXl3aGVuJ10gPSBzdWJzdHIoJG1kYXRhWydwbGF5d2hlbiddLDAsLTMpOwoJCQkJfQoJCQkJdW5zZXQoJG1kYXRhKTsKCQkJfQoJCQlicmVhazsKCQl9CgkJcmV0dXJuICRkYXRhOwoJfQoKCS8qKgoJR2V0VHlwZU5hbWVzOgoJQG1vZDogcmVmZXJlbmNlIHRvIGN1cnJlbnQgbW9kdWxlIG9iamVjdAoJUmV0dXJuczogYXJyYXkgd2l0aCBrZXlzID0gZHJvcGRvd24tb2JqZWN0IGxhYmVscywgdmFsdWVzID0gYnJhY2tldC10eXBlIGVudW0gdmFsdWVzCgkqLwoJZnVuY3Rpb24gR2V0VHlwZU5hbWVzKCYkbW9kKQoJewoJCXJldHVybiBhcnJheSgKCQkgJG1vZC0+TGFuZygnc2VsZWN0X29uZScpPT4nJywKCQkgJG1vZC0+TGFuZygndGl0bGVfYnJhY2tldF9zaW5nbGUnKT0+VG91cm5leTo6S09UWVBFLAoJCSAkbW9kLT5MYW5nKCd0aXRsZV9icmFja2V0X2RvdWJsZScpPT5Ub3VybmV5OjpERVRZUEUsCgkJICRtb2QtPkxhbmcoJ3RpdGxlX2JyYWNrZXRfcm91bmQnKT0+VG91cm5leTo6UlJUWVBFCgkJKTsKCX0KCgkvKioKCUdldGZvckZpcnN0UGxheWVyOgoJQHRpZDogdGVhbSBpZGVudGlmaWVyCglSZXR1cm5zOiBhcnJheSB3aXRoIG5hbWUgYW5kIGNvbnRhY3QgZGF0YSBmb3IgZmlyc3Qtb3JkZXJlZCBtZW1iZXIgb2YgdGVhbSBAdGlkLgoJICBOYW1lIGFuZCBjb250YWN0IGFyZSBib3RoIGVtcHR5IGlmIG5vIHN1Y2ggbWVtYmVyIGNhbiBiZSBmb3VuZC4KCSovCglmdW5jdGlvbiBHZXRmb3JGaXJzdFBsYXllcigkdGlkKQoJewoJCSRuYW1lID0gJyc7CgkJJGNvbnRhY3QgPSAnJzsKCQkkZGIgPSBjbXNtcygpLT5HZXREQigpOwoJCSRzcWwgPSAnU0VMRUNUIG5hbWUsY29udGFjdCBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdG10X3Blb3BsZSBXSEVSRSBpZD0/IEFORCBmbGFncyE9MiBPUkRFUiBCWSBkaXNwbGF5b3JkZXInOwoJCSRycyA9ICRkYi0+U2VsZWN0TGltaXQoJHNxbCwxLC0xLGFycmF5KCR0aWQpKTsKCQlpZiAoJHJzKQoJCXsKCQkJaWYgKCEkcnMtPkVPRikKCQkJCWV4dHJhY3QoJHJzLT5GZXRjaFJvdygpKTsKCQkJJHJzLT5DbG9zZSgpOwoJCX0KCQlyZXR1cm4gYXJyYXkoJG5hbWUsJGNvbnRhY3QpOwoJfQoKCS8qKgoJVXBkYXRlRmlyc3RQbGF5ZXI6CglAdGlkOiB0ZWFtIGlkZW50aWZpZXIKCUBuYW1lOiBvcHRpb25hbCwgc3RyaW5nIHRvIGJlIHNhdmVkIGFzIHBsYXllcidzIG5hbWUsIGRlZmF1bHQgRkFMU0UKCUBjb250YWN0OiBvcHRpb25hbCwgc3RyaW5nIHRvIGJlIHNhdmVkIGFzIHBsYXllcidzIGNvbnRhY3QsIGRlZmF1bHQgRkFMU0UKCUluc2VydCBvciB1cGRhdGUgdGhlIG5hbWUgYW5kL29yIGNvbnRhY3Qgb2YgdGhlIGZpcnN0LW9yZGVyZWQgbWVtYmVyIG9mIHRlYW0gQHRpZC4KCUF0IGxlYXN0IG9uZSBvZiBAbmFtZSwgQGNvbnRhY3QgbXVzdCBiZSBzdXBwbGllZC4gVGhleSBtYXkgYmUgZW1wdHkgc3RyaW5ncy4KCSovCglmdW5jdGlvbiBVcGRhdGVGaXJzdFBsYXllcigkdGlkLCRuYW1lPUZBTFNFLCRjb250YWN0PUZBTFNFKQoJewoJCWlmICgkbmFtZSA9PT0gRkFMU0UgJiYgJGNvbnRhY3QgPT09IEZBTFNFKSByZXR1cm47CgkJJHByZWYgPSBjbXNfZGJfcHJlZml4KCk7CgkJJGRiID0gY21zbXMoKS0+R2V0REIoKTsKCQkkZmxhZ3MgPSAzOyAvL2RlZmF1bHQgY2hhbmdlLWZsYWcKCQkkYXJncyA9IGFycmF5KCk7CgkJJHNxbCA9ICdTRUxFQ1QgZGlzcGxheW9yZGVyIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9wZW9wbGUgV0hFUkUgaWQ9PyBBTkQgZmxhZ3MhPTIgT1JERVIgQlkgZGlzcGxheW9yZGVyJzsKCQkkcnMgPSAkZGItPlNlbGVjdExpbWl0KCRzcWwsMSwtMSxhcnJheSgkdGlkKSk7CgkJaWYgKCRycykKCQl7CgkJCWlmICghJHJzLT5FT0YpCgkJCXsKCQkJCWV4dHJhY3QoJHJzLT5GZXRjaFJvdygpKTsKCQkJCSRycy0+Q2xvc2UoKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRycy0+Q2xvc2UoKTsKCQkJCSRzcWwgPSAnSU5TRVJUIElOVE8gJy4kcHJlZi4nbW9kdWxlX3RtdF9wZW9wbGUgVkFMVUVTICg/LG51bGwsbnVsbCwxLDApJzsKCQkJCSRkYi0+RXhlY3V0ZSgkc3FsLGFycmF5KCR0aWQpKTsKCQkJCSRmbGFncyA9IDE7IC8vYWRkZWQtZmxhZyBzZXQgaW5zdGVhZAoJCQkJJGRpc3BsYXlvcmRlciA9IDE7CgkJCX0KCQl9CgkJJHNxbCA9ICdVUERBVEUgJy4kcHJlZi4nbW9kdWxlX3RtdF9wZW9wbGUgU0VUICc7CgkJaWYgKCRuYW1lICE9PSBGQUxTRSkKCQl7CgkJCWlmICgkbmFtZSkKCQkJewoJCQkJJHNxbCAuPSAnbmFtZT0/JzsKCQkJCSRhcmdzW10gPSAkbmFtZTsKCQkJfQoJCQllbHNlCgkJCQkkc3FsIC49ICduYW1lPU5VTEwnOwoJCX0KCQlpZiAoJGNvbnRhY3QgIT09IEZBTFNFKQoJCXsKCQkJaWYgKCRuYW1lICE9PSBGQUxTRSkKCQkJCSRzcWwgLj0gJywnOwoJCQlpZiAoJGNvbnRhY3QpCgkJCXsKCQkJCSRzcWwgLj0gJ2NvbnRhY3Q9Pyc7CgkJCQkkYXJnc1tdID0gJGNvbnRhY3Q7CgkJCX0KCQkJZWxzZQoJCQkJJHNxbCAuPSAnY29udGFjdD1OVUxMJzsKCQl9CgkJJHNxbCAuPSAnLGZsYWdzPT8gV0hFUkUgaWQ9PyBBTkQgZmxhZ3MhPTIgQU5EIGRpc3BsYXlvcmRlcj0/JzsKCQlhcnJheV9wdXNoICgkYXJncywkZmxhZ3MsJHRpZCwkZGlzcGxheW9yZGVyKTsKCQkkZGItPkV4ZWN1dGUoJHNxbCwkYXJncyk7Cgl9CgoJLyoqCglHZXRGb3JtYXR0ZWREYXRlOgoJQGR0c3RyIHN0cmluZyB0byBiZSBwcm9jZXNzZWQgd2l0aCBzdHJ0b3RpbWUoKQoJQGRhdGVvbmx5IFRSVUUgaWYgd2FudCBmb3JtYXR0ZWQgZGF0ZSB3aXRob3V0IHRpbWUsIGRlZmF1bHQgRkFMU0UKCUBzZWNvbmRzIFRSVUUgaWYgd2FudCB0aW1lIHRvIGluY2x1ZGUgc2Vjb25kcywgZGVmYXVsdCBGQUxTRQogICAgQ29udmVydCBAZHRzdHIgdG8gYSB0aW1lc3RhbXAtbGlrZSBmb3JtYXQuCglSZXR1cm5zOiBzdHJpbmcsIG1heWJlICcnCgkqLwoJZnVuY3Rpb24gR2V0Rm9ybWF0dGVkRGF0ZSgkZHRzdHIsJGRhdGVvbmx5PUZBTFNFLCRzZWNvbmRzPUZBTFNFKQoJewoJCWlmICgkZHRzdHIpCgkJewoJCQlpZiAoJGRhdGVvbmx5KQoJCQkJJGZtdCA9ICclRic7CgkJCWVsc2VpZiAoJHNlY29uZHMpCgkJCQkkZm10ID0gJyVGICVUJzsKCQkJZWxzZQoJCQkJJGZtdCA9ICclRiAlUic7CgkJCQoJCQlyZXR1cm4gc3RyZnRpbWUgKCRmbXQsc3RydG90aW1lKCRkdHN0cikpOwoJCX0KCQllbHNlCgkJCXJldHVybiAnJzsKCX0KfQo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.tmtDelete.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0KEMpIDIwMTQtMjAxNSBUb20gUGhhbmUgPHRwZ3d3QG9uZXBvc3QubmV0PgpSZWZlciB0byBsaWNlbmNlIGFuZCBvdGhlciBkZXRhaWxzIGF0IHRoZSB0b3Agb2YgZmlsZSBUb3VybmV5Lm1vZHVsZS5waHAKTW9yZSBpbmZvIGF0IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvdG91cm5leQpGdW5jdGlvbnMgaW52b2x2ZWQgd2l0aCBYTUwgb3V0cHV0CiovCgpjbGFzcyB0bXREZWxldGUKewoJLyoqCglEZWxldGVCcmFja2V0OgoJQG1vZDogcmVmZXJlbmNlIHRvIFRvdXJuZXkgbW9kdWxlIG9iamVjdAoJQGJyYWNrZXRfaWQ6IHNpbmdsZSBicmFja2V0IGlkZW50aWZpZXIsIG9yIGFycmF5IG9mIHRoZW0KCSovCglmdW5jdGlvbiBEZWxldGVCcmFja2V0KCYkbW9kLCRicmFja2V0X2lkKQoJewoJCSRkYiA9IGNtc21zKCktPkdldERiKCk7CgkJJHByZWYgPSBjbXNfZGJfcHJlZml4KCk7CgkJaWYoIWlzX2FycmF5KCRicmFja2V0X2lkKSkKCQkJJGJyYWNrZXRfaWQgPSBhcnJheSgkYnJhY2tldF9pZCk7CgkJZm9yZWFjaCgkYnJhY2tldF9pZCBhcyAkYmlkKQoJCXsKCQkJJHNxbCA9ICdTRUxFQ1QgY2hhcnRjc3MgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X2JyYWNrZXRzIFdIRVJFIGJyYWNrZXRfaWQ9Pyc7CgkJCSRmaWxlID0gJGRiLT5HZXRPbmUoJHNxbCxhcnJheSgkYmlkKSk7CgkJCWlmICgkZmlsZSkKCQkJewoJCQkJJHNxbCA9ICdTRUxFQ1QgQ09VTlQoKikgQVMgc2hhcmVycyBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfYnJhY2tldHMgV0hFUkUgY2hhcnRjc3M9Pyc7CgkJCQkkbnVtID0gJGRiLT5HZXRPbmUoJHNxbCxhcnJheSgkZmlsZSkpOwoJCQkJaWYgKCRudW0gPCAyKQoJCQkJewoJCQkJCWlmKCRtb2QtPkdldFByZWZlcmVuY2UoJ3VwbG9hZHNfZGlyJykpCgkJCQkJCSRwYXRoID0gY21zX2pvaW5fcGF0aCgkY29uZmlnWyd1cGxvYWRzX3BhdGgnXSwKCQkJCQkJCSRtb2QtPkdldFByZWZlcmVuY2UoJ3VwbG9hZHNfZGlyJyksJGZpbGUpOwoJCQkJCWVsc2UKCQkJCQkJJHBhdGggPSBjbXNfam9pbl9wYXRoKCRjb25maWdbJ3VwbG9hZHNfcGF0aCddLCRmaWxlKTsKCQkJCQlpZihpc19maWxlKCRwYXRoKSkKCQkJCQkJdW5saW5rKCRwYXRoKTsKCQkJCX0KCQkJfQoJCQkkZmlsZSA9ICRtb2QtPkNoYXJ0SW1hZ2VGaWxlKCRiaWQpOwoJCQlpZiAoJGZpbGUpCgkJCQl1bmxpbmsoJGZpbGUpOwoKCQkJJHNxbCA9ICdERUxFVEUgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X3R3ZWV0IFdIRVJFIGJyYWNrZXRfaWQ9Pyc7CgkJCSRkYi0+RXhlY3V0ZSgkc3FsLGFycmF5KCRiaWQpKTsKCQkJJHNxbCA9ICdERUxFVEUgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X3Blb3BsZSBXSEVSRSBpZCBJTgoJCQkgKFNFTEVDVCB0ZWFtX2lkIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF90ZWFtcyBXSEVSRSBicmFja2V0X2lkPT8pJzsKCQkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJGJpZCkpOwoJCQkkc3FsID0gJ0RFTEVURSBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfdGVhbXMgV0hFUkUgYnJhY2tldF9pZD0/JzsKCQkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJGJpZCkpOwoJCQkkc3FsID0gJ0RFTEVURSBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlcyBXSEVSRSBicmFja2V0X2lkPT8nOwoJCQkkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkYmlkKSk7CgkJCSRzcWwgPSAnREVMRVRFIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9icmFja2V0cyBXSEVSRSBicmFja2V0X2lkPT8nOwoJCQkkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkYmlkKSk7CgoJCQkkYmlkID0gJHBhcmFtc1snYnJhY2tldF9pZCddOwoJCQkkbW9kLT5EZWxldGVUZW1wbGF0ZSgnbWFpbG91dF8nLiRiaWQuJ190ZW1wbGF0ZScpOwoJCQkkbW9kLT5EZWxldGVUZW1wbGF0ZSgnbWFpbGNhbmNlbF8nLiRiaWQuJ190ZW1wbGF0ZScpOwoJCQkkbW9kLT5EZWxldGVUZW1wbGF0ZSgnbWFpbHJlcXVlc3RfJy4kYmlkLidfdGVtcGxhdGUnKTsKCQkJJG1vZC0+RGVsZXRlVGVtcGxhdGUoJ21haWxpbl8nLiRiaWQuJ190ZW1wbGF0ZScpOwoJCQkkbW9kLT5EZWxldGVUZW1wbGF0ZSgndHdlZXRvdXRfJy4kYmlkLidfdGVtcGxhdGUnKTsKCQkJJG1vZC0+RGVsZXRlVGVtcGxhdGUoJ3R3ZWV0Y2FuY2VsXycuJGJpZC4nX3RlbXBsYXRlJyk7CgkJCSRtb2QtPkRlbGV0ZVRlbXBsYXRlKCd0d2VldHJlcXVlc3RfJy4kYmlkLidfdGVtcGxhdGUnKTsKCQkJJG1vZC0+RGVsZXRlVGVtcGxhdGUoJ3R3ZWV0aW5fJy4kYmlkLidfdGVtcGxhdGUnKTsKCQkJJG1vZC0+RGVsZXRlVGVtcGxhdGUoJ2NoYXJ0XycuJGJpZC4nX3RlbXBsYXRlJyk7CgkJfQoJfQp9Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.tmtEditSetup.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKVGhpcyBjbGFzcyBpcyBub3Qgc3VpdGFibGUgZm9yIHN0YXRpYyBjYWxsaW5nLgoqLwoKY2xhc3MgdG10RWRpdFNldHVwCnsKCXByaXZhdGUgJGFueTsKCXByaXZhdGUgJGNvbW1pdHRlZDsKCXByaXZhdGUgJHNwYXJlOwoKCS8qKgoJR2V0TWF0Y2hFeGlzdHM6CglAYnJhY2tldF9pZDogYnJhY2tldCBiZWluZyBwcm9jZXNzZWQKCUNoZWNrIGZvciBleGlzdGVuY2Ugb2YgYW55IG1hdGNoIGZvciB0aGUgYnJhY2tldCwgYW5kIGFueSAnbG9ja2VkIGluJyBtYXRjaAoJU2V0cyBzZWxmOjphbnksIHNlbGY6OmNvbW1pdHRlZAoJU2VlIGFsc286IHRtdFNjaGVkdWxlOjpNYXRjaENvbW1pdHRlZCgpIHdoaWNoIGlzIHNpbWlsYXIgdG8gdGhpcyBmdW5jdGlvbgoJUmV0dXJuczogTm90aGluZwoJKi8KCWZ1bmN0aW9uIE1hdGNoRXhpc3RzKCRicmFja2V0X2lkKQoJewoJCSR0aGlzLT5hbnkgPSBGQUxTRTsKCQkkdGhpcy0+Y29tbWl0dGVkID0gRkFMU0U7CgkJJHByZWYgPSBjbXNfZGJfcHJlZml4KCk7CgkJJHNxbCA9ICdTRUxFQ1QgMSBBUyB5ZXMgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X21hdGNoZXMgV0hFUkUgYnJhY2tldF9pZD0/IEFORCBmbGFncz0wJzsKCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOwoJCSRycyA9ICRkYi0+U2VsZWN0TGltaXQoJHNxbCwxLC0xLGFycmF5KCRicmFja2V0X2lkKSk7CgkJaWYoJHJzICYmICEkcnMtPkVPRikgLy9hbnkgbWF0Y2ggZXhpc3RzCgkJewoJCQkkcnMtPkNsb3NlKCk7CgkJCSR0aGlzLT5hbnkgPSBUUlVFOwoJCQkkc3FsID0gJ1NFTEVDVCAxIEFTIHllcyBGUk9NICcuJHByZWYuCgkJCSdtb2R1bGVfdG10X21hdGNoZXMgV0hFUkUgYnJhY2tldF9pZD0/IEFORCBzdGF0dXM+PScuVG91cm5leTo6TVJFUy4KCQkJJyBBTkQgdGVhbUEgSVMgTk9UIE5VTEwgQU5EIHRlYW1BIT0tMSBBTkQgdGVhbUIgSVMgTk9UIE5VTEwgQU5EIHRlYW1CIT0tMSc7CgkJCSRycyA9ICRkYi0+U2VsZWN0TGltaXQoJHNxbCwxLC0xLGFycmF5KCRicmFja2V0X2lkKSk7CgkJCWlmKCRycyAmJiAhJHJzLT5FT0YpIC8vbWF0Y2goZXMpIG90aGVyIHRoYW4gYnllcyByZWNvcmRlZAoJCQkJJHRoaXMtPmNvbW1pdHRlZCA9IFRSVUU7CgkJCWVsc2UKCQkJewoJCQkJaWYoJHJzKSAkcnMtPkNsb3NlKCk7CgkJCQkkc3FsID0gJ1NFTEVDVCB0aW1lem9uZSBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfYnJhY2tldHMgV0hFUkUgYnJhY2tldF9pZD0/JzsKCQkJCSR6b25lID0gJGRiLT5HZXRPbmUoJHNxbCxhcnJheSgkYnJhY2tldF9pZCkpOwoJCQkJJGR0ID0gbmV3IERhdGVUaW1lKCcrJy5Ub3VybmV5OjpMRUFESE9VUlMuJyBob3VycycsbmV3IERhdGVUaW1lWm9uZSgkem9uZSkpOwoJCQkJJHNxbCA9ICdTRUxFQ1QgMSBBUyB5ZXMgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X21hdGNoZXMgV0hFUkUgYnJhY2tldF9pZD0/IEFORCBmbGFncz0wIEFORCBzdGF0dXMgSU4oJy5Ub3VybmV5OjpGSVJNLicsJy5Ub3VybmV5OjpUT0xELicsJy5Ub3VybmV5OjpBU0tFRC4KCQkJCScpIEFORCBwbGF5d2hlbiBJUyBOT1QgTlVMTCBBTkQgcGxheXdoZW4gPCAnLiRkdC0+Zm9ybWF0KCdZLW0tZCBHOmk6cycpLgoJCQkJJyBBTkQgdGVhbUEgSVMgTk9UIE5VTEwgQU5EIHRlYW1BICE9IC0xIEFORCB0ZWFtQiBJUyBOT1QgTlVMTCBBTkQgdGVhbUIgIT0gLTEnOwoJCQkJJHJzID0gJGRiLT5TZWxlY3RMaW1pdCgkc3FsLDEsLTEsYXJyYXkoJGJyYWNrZXRfaWQpKTsKCQkJCWlmKCRycyAmJiAhJHJzLT5FT0YpIC8vRklSTS9UT0xEL0FTS0VEIG1hdGNoKGVzKSBzY2hlZHVsZWQgYmVmb3JlIG1pbi4gbGVhZHRpbWUgZnJvbSBub3cKCQkJCQkkdGhpcy0+Y29tbWl0dGVkID0gVFJVRTsKCQkJfQoJCX0KCQlpZigkcnMpCgkJCSRycy0+Q2xvc2UoKTsKCX0KCgkvKioKCVNwYXJlU2xvdDoKCUBicmFja2V0X2lkOgoJJGVsaW06IGJvb2xlYW4gVFJVRSBmb3IgS08vREUgbWF0Y2hlcywgRkFMU0UgZm9yIFJSLCBkZWZhdWx0IFRSVUUKCUNoZWNrIHdoZXRoZXIgYSBzdWl0YWJsZSBwbGFjZSBpcyBhdmFpbGFibGUgZm9yIGEgdGVhbSB0byBiZSBhZGRlZCB0byB0aGUgYnJhY2tldAoJKi8KCWZ1bmN0aW9uIFNwYXJlU2xvdCgkYnJhY2tldF9pZCwkZWxpbT1UUlVFKQoJewoJCSR0aGlzLT5zcGFyZSA9IEZBTFNFOwoJCSRwcmVmID0gY21zX2RiX3ByZWZpeCgpOwoJCSRkYiA9IGNtc21zKCktPkdldERiKCk7CgkJaWYoJGVsaW0pCgkJewoJCQkvL2ZvciBLTy9ERSBicmFja2V0IC0gMXN0LXJvdW5kIG1hdGNoZXMgd2l0aCBhIGJ5ZSBhbmQgY29ycmVzcG9uZGluZyAybmQgcm91bmQgbWF0Y2ggbm90IGNvbW1pdHRlZAoJCQkkc3FsID0gJ1NFTEVDVCBDT1VOVCgxKSBBUyBudW0gRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X21hdGNoZXMgV0hFUkUgYnJhY2tldF9pZD0/IEFORCBmbGFncz0wIEFORCBzdGF0dXMgPj0gJy5Ub3VybmV5OjpGSVJNLicgQU5EIE5PVCAodGVhbUEgPSAtMSBPUiB0ZWFtQiA9IC0xKSc7CgkJCSRmYyA9ICRkYi0+R2V0T25lKCRzcWwsYXJyYXkoJGJyYWNrZXRfaWQpKTsKCQkJaWYoISRmYykKCQkJewoJCQkJJHRoaXMtPnNwYXJlID0gVFJVRTsKCQkJCXJldHVybjsKCQkJfQoJCQkkc3FsID0gJ1NFTEVDVCBtYXRjaF9pZCxuZXh0bSBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlcyBXSEVSRSBicmFja2V0X2lkPT8gQU5EIGZsYWdzPTAKQU5EICh0ZWFtQSA9IC0xIE9SIHRlYW1CID0gLTEpCkFORCBtYXRjaF9pZCBOT1QgSU4gKFNFTEVDVCBESVNUSU5DVCBuZXh0bSBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlcyBXSEVSRSBicmFja2V0X2lkPT8gQU5EIGZsYWdzPTAgQU5EIG5leHRtIElTIE5PVCBOVUxMKSc7CgkJCSRtYXliZSA9ICRkYi0+R2V0QXNzb2MoJHNxbCxhcnJheSgkYnJhY2tldF9pZCwkYnJhY2tldF9pZCkpOwoJCQlpZigkbWF5YmUpCgkJCXsKCQkJCSRzcWwgPSAnU0VMRUNUIHN0YXR1cyBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlcyBXSEVSRSBtYXRjaF9pZD0/IEFORCBmbGFncz0wJzsKCQkJCWZvcmVhY2goJG1heWJlIGFzICRuZXh0KQoJCQkJewoJCQkJCSRuc3RhdCA9ICRkYi0+R2V0T25lKCRzcWwsYXJyYXkoJG5leHQpKTsKCQkJCQlpZigkbnN0YXQgIT09IEZBTFNFICYmICRuc3RhdCA8IFRvdXJuZXk6OkZJUk0pCgkJCQkJewoJCQkJCQkkdGhpcy0+c3BhcmUgPSBUUlVFOwoJCQkJCQlyZXR1cm47CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJCWVsc2UKCQl7CgkJCS8vZm9yIFJSIGJyYWNrZXQgLSByZWxhdGl2ZWx5IGZldyBtYXRjaGVzIHBsYXllZAoJCQkkc3FsID0gJ1NFTEVDVCBDT1VOVCgxKSBBUyBudW0gRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X3RlYW1zIFdIRVJFIGJyYWNrZXRfaWQ9PyBBTkQgZmxhZ3MhPTInOwoJCQkkdGMgPSAkZGItPkdldE9uZSgkc3FsLGFycmF5KCRicmFja2V0X2lkKSk7CgkJCSRzcWwgPSAnU0VMRUNUIENPVU5UKDEpIEFTIG51bSBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlcyBXSEVSRSBicmFja2V0X2lkPT8gQU5EIGZsYWdzPTAgQU5EIHN0YXR1cyA+PSAnLlRvdXJuZXk6OkZJUk07CgkJCSRtYyA9ICRkYi0+R2V0T25lKCRzcWwsYXJyYXkoJGJyYWNrZXRfaWQpKTsKCQkJJHRoaXMtPnNwYXJlID0gKCR0YyA8PSA1KT8oJHRjID49ICRtYykgOigkdGMgPj0gJG1jICogMik7CgkJfQoJfQoKCWZ1bmN0aW9uIFNldHVwKCYkbW9kLCYkc21hcnR5LCYkZGF0YSwkaWQsJHJldHVybmlkLCRhY3RpdmV0YWI9JycsJG1lc3NhZ2U9JycpCgl7CgkJJGdDbXMgPSBjbXNtcygpOwoJCSRjb25maWcgPSAkZ0Ntcy0+R2V0Q29uZmlnKCk7CgoJCWlmIChpc3NldCgkZGF0YS0+cmVhZG9ubHkpKQoJCXsKCQkJdW5zZXQoJGRhdGEtPnJlYWRvbmx5KTsKCQkJJHBtb2QgPSBGQUxTRTsKCQkJJHBzY29yZSA9IEZBTFNFOwoJCX0KCQllbHNlCgkJewoJCQkkcG1vZCA9ICRtb2QtPkNoZWNrQWNjZXNzKCdhZG1vZCcpOwoJCQkkcHNjb3JlID0gJHBtb2QgfHwgJG1vZC0+Q2hlY2tBY2Nlc3MoJ3Njb3JlJyk7CgkJfQoKCQkkc21hcnR5LT5hc3NpZ24oJ2Nhbm1vZCcsJHBtb2QgPyAxOjApOwovLwkJJHNtYXJ0eS0+YXNzaWduKCdjYW5zY29yZScsJHBzY29yZSA/IDE6MCk7CgoJCWlmKCFlbXB0eSgkbWVzc2FnZSkpICRzbWFydHktPmFzc2lnbignbWVzc2FnZScsJG1lc3NhZ2UpOwoKCQkkc21hcnR5LT5hc3NpZ24oJ2Zvcm1fc3RhcnQnLCRtb2QtPkNyZWF0ZUZvcm1TdGFydCgkaWQsJ2FkZGVkaXRfY29tcCcsJHJldHVybmlkKSk7CgkJJHNtYXJ0eS0+YXNzaWduKCdmb3JtX2VuZCcsJG1vZC0+Q3JlYXRlRm9ybUVuZCgpKTsKCgkJaWYoJGFjdGl2ZXRhYiA9PSBGQUxTRSkKCQkJJGFjdGl2ZXRhYiA9ICdtYWludGFiJzsKCQkkc21hcnR5LT5hc3NpZ24oJ3RhYnNfc3RhcnQnLCRtb2QtPlN0YXJ0VGFiSGVhZGVycygpLgoJCQkkbW9kLT5TZXRUYWJIZWFkZXIoJ21haW50YWInLCRtb2QtPkxhbmcoJ3RhYl9tYWluJyksKCRhY3RpdmV0YWIgPT0gJ21haW50YWInKSkuCgkJCSRtb2QtPlNldFRhYkhlYWRlcignc2NoZWR1bGV0YWInLCRtb2QtPkxhbmcoJ3RhYl9zY2hlZHVsZScpLCgkYWN0aXZldGFiID09ICdzY2hlZHVsZXRhYicpKS4KCQkJJG1vZC0+U2V0VGFiSGVhZGVyKCdhZHZhbmNlZHRhYicsJG1vZC0+TGFuZygndGFiX2FkdmFuY2VkJyksKCRhY3RpdmV0YWIgPT0gJ2FkdmFuY2VkdGFiJykpLgoJCQkkbW9kLT5TZXRUYWJIZWFkZXIoJ2NoYXJ0dGFiJywkbW9kLT5MYW5nKCd0YWJfY2hhcnQnKSwoJGFjdGl2ZXRhYiA9PSAnY2hhcnR0YWInKSkuCgkJCSRtb2QtPlNldFRhYkhlYWRlcigncGxheWVyc3RhYicsJG1vZC0+TGFuZygndGFiX3BsYXllcnMnKSwoJGFjdGl2ZXRhYiA9PSdwbGF5ZXJzdGFiJykpLgoJCQkkbW9kLT5TZXRUYWJIZWFkZXIoJ21hdGNoZXN0YWInLCRtb2QtPkxhbmcoJ3RhYl9tYXRjaGVzJyksKCRhY3RpdmV0YWIgPT0nbWF0Y2hlc3RhYicpKS4KCQkJJG1vZC0+U2V0VGFiSGVhZGVyKCdyZXN1bHRzdGFiJywkbW9kLT5MYW5nKCd0YWJfcmVzdWx0cycpLCgkYWN0aXZldGFiID09J3Jlc3VsdHN0YWInKSkuCi8vCQkJJG1vZC0+U2V0VGFiSGVhZGVyKCdoaXN0b3J5dGFiJywkbW9kLT5MYW5nKCd0YWJfaGlzdG9yeScpLCgkYWN0aXZldGFiID09J2hpc3Rvcnl0YWInKSkuCgkJCSRtb2QtPkVuZFRhYkhlYWRlcnMoKSAuICRtb2QtPlN0YXJ0VGFiQ29udGVudCgpKTsKCQkkc21hcnR5LT5hc3NpZ24oJ3RhYnNfZW5kJywkbW9kLT5FbmRUYWJDb250ZW50KCkpOwoKCQkkc21hcnR5LT5hc3NpZ24oJ21haW50YWJfc3RhcnQnLCRtb2QtPlN0YXJ0VGFiKCdtYWludGFiJykpOwoJCSRzbWFydHktPmFzc2lnbignc2NoZWR1bGV0YWJfc3RhcnQnLCRtb2QtPlN0YXJ0VGFiKCdzY2hlZHVsZXRhYicpKTsKCQkkc21hcnR5LT5hc3NpZ24oJ2FkdmFuY2VkdGFiX3N0YXJ0JywkbW9kLT5TdGFydFRhYignYWR2YW5jZWR0YWInKSk7CgkJJHNtYXJ0eS0+YXNzaWduKCdjaGFydHRhYl9zdGFydCcsJG1vZC0+U3RhcnRUYWIoJ2NoYXJ0dGFiJykpOwoJCSRzbWFydHktPmFzc2lnbigncGxheWVydGFiX3N0YXJ0JywkbW9kLT5TdGFydFRhYigncGxheWVyc3RhYicpKTsKCQkkc21hcnR5LT5hc3NpZ24oJ21hdGNodGFiX3N0YXJ0JywkbW9kLT5TdGFydFRhYignbWF0Y2hlc3RhYicpKTsKCQkkc21hcnR5LT5hc3NpZ24oJ3Jlc3VsdHN0YWJfc3RhcnQnLCRtb2QtPlN0YXJ0VGFiKCdyZXN1bHRzdGFiJykpOwovLwkJJHNtYXJ0eS0+YXNzaWduKCdoaXN0b3J5dGFiX3N0YXJ0JywkbW9kLT5TdGFydFRhYignaGlzdG9yeXRhYicpKTsKCgkJJHNtYXJ0eS0+YXNzaWduKCd0YWJfZW5kJywkbW9kLT5FbmRUYWIoKSk7CgoJCS8vYWNjdW11bGF0b3IgZm9yIGhpZGRlbiBpdGVtcyx0byBiZSBwYXJrZWQgb24gcGFnZQoJCSRoaWRkZW4gPSAkbW9kLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ2JyYWNrZXRfaWQnLCRkYXRhLT5icmFja2V0X2lkKTsKCQlpZighZW1wdHkoJGRhdGEtPmFkZGVkKSkKCQkJJGhpZGRlbiAuPSAkbW9kLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ25ld2JyYWNrZXQnLCRkYXRhLT5icmFja2V0X2lkKTsKCQkkaGlkZGVuIC49ICRtb2QtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwnYWN0aXZlX3RhYicpLgoJCQkkbW9kLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ3JlYWxfYWN0aW9uJyk7CgkJLy9hY2N1bXVsYXRvcnMgZm9yIHNjcmlwdCBmdW5jcyx0byBiZSBwYXJrZWQgYXQgZW5kIG9mIHRoZSBwYWdlCgkJJGpzZnVuY3MgPSBhcnJheSgpOwoJCSRqc2xvYWRzID0gYXJyYXkoKTsKCgkJJHNtYXJ0eS0+YXNzaWduKCdpbmNwYXRoJywkbW9kLT5HZXRNb2R1bGVVUkxQYXRoKCkuJy9pbmNsdWRlLycpOwoJCWlmKCRwbW9kKQoJCXsKCQkJLy9zZXR1cCBzb21lIGFqYXgtcGFyYW1ldGVycyAtIHBhcnRpYWwgZGF0YSBmb3IgdGFibGVEbkQ6Om9uRHJvcAoJCQkkdXJsID0gJG1vZC0+Q3JlYXRlTGluaygkaWQsJ21vdmVfdGVhbScsTlVMTCxOVUxMLGFycmF5KCdicmFja2V0X2lkJz0+JGRhdGEtPmJyYWNrZXRfaWQsJ25ld29yZGVycyc9PicnKSxOVUxMLFRSVUUpOwoJCQkkb2ZmcyA9IHN0cnBvcygkdXJsLCc/bWFjdD0nKTsKCQkJJGFqZmlyc3QgPSBzdHJfcmVwbGFjZSgnYW1wOycsJycsc3Vic3RyKCR1cmwsJG9mZnMrMSkpOwoJCQkkanNmdW5jc1tdID0gPDw8IEVPUwpmdW5jdGlvbiBhamF4RGF0YShkcm9wcm93LGRyb3Bjb3VudCkgewogdmFyIG9yZGVycyA9IFtdOwogJChkcm9wcm93LnBhcmVudE5vZGUpLmZpbmQoJ3RyIHRkLm9yZCcpLmVhY2goZnVuY3Rpb24oKXsKICBvcmRlcnNbb3JkZXJzLmxlbmd0aF0gPSB0aGlzLmlubmVySFRNTDsKIH0pOwogdmFyIGFqYXhkYXRhID0gJyRhamZpcnN0JytvcmRlcnMuam9pbigpOwogcmV0dXJuIGFqYXhkYXRhOwp9CmZ1bmN0aW9uIGRyb3ByZXNwb25zZShkYXRhLHN0YXR1cykgewogaWYoc3RhdHVzID09ICdzdWNjZXNzJyAmJiBkYXRhKSB7CiAgdmFyIGkgPSAxOwogICQoJyN0bXRfcGxheWVycycpLmZpbmQoJy5vcmQnKS5lYWNoKGZ1bmN0aW9uKCl7XCQodGhpcykuaHRtbChpKyspO30pOwogIHZhciBuYW1lOwogIHZhciBvZGRjbGFzcyA9ICdyb3cxJzsKICB2YXIgZXZlbmNsYXNzID0gJ3JvdzInOwogIGkgPSB0cnVlOwogICQoJyN0bXRfcGxheWVycycpLnRyaWdnZXIoJ3VwZGF0ZScpLmZpbmQoJ3Rib2R5IHRyJykuZWFjaChmdW5jdGlvbigpIHsKCW5hbWUgPSBpID8gb2RkY2xhc3MgOiBldmVuY2xhc3M7CglcJCh0aGlzKS5yZW1vdmVDbGFzcygpLmFkZENsYXNzKG5hbWUpOwoJaSA9ICFpOwogIH0pOwogfSBlbHNlIHsKICAkKCcjcGFnZV90YWJzJykucHJlcGVuZCgnPHAgc3R5bGU9ImZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6cmVkOyI+eyRtb2QtPkxhbmcoJ2Vycl9hamF4Jyl9ITwvcD48YnIgLz4nKTsKIH0KfQoKRU9TOwoJCQkkb25zb3J0ID0gPDw8IEVPUwpmdW5jdGlvbiAoKSB7CiB2YXIgb3JkZXJzID0gW107CiAkKHRoaXMpLmZpbmQoJ3Rib2R5IHRyIHRkLm9yZCcpLmVhY2goZnVuY3Rpb24oKXsKICBvcmRlcnNbb3JkZXJzLmxlbmd0aF0gPSB0aGlzLmlubmVySFRNTDsKIH0pOwogdmFyIGFqYXhkYXRhID0gJyRhamZpcnN0JytvcmRlcnMuam9pbigpOwogJC5hamF4KHsKICB1cmw6ICdtb2R1bGVpbnRlcmZhY2UucGhwJywKICB0eXBlOiAnUE9TVCcsCiAgZGF0YTogYWpheGRhdGEsCiAgZGF0YVR5cGU6ICd0ZXh0JywKICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSxzdGF0dXMpIHsKICAgaWYoc3RhdHVzID09ICdzdWNjZXNzJyAmJiBkYXRhKSB7CiAgICAgdmFyIGkgPSAxOwogICAgICQoJyN0bXRfcGxheWVycycpLmZpbmQoJy5vcmQnKS5lYWNoKGZ1bmN0aW9uKCl7CgkgXCQodGhpcykuaHRtbChpKyspOwoJIH0pOwogICB9IGVsc2UgewogICAgJCgnI3BhZ2VfdGFicycpLnByZXBlbmQoJzxwIHN0eWxlPSJmb250LXdlaWdodDpib2xkO2NvbG9yOnJlZDsiPnskbW9kLT5MYW5nKCdlcnJfYWpheCcpfSE8L3A+PGJyIC8+Jyk7CiAgIH0KICB9CiB9KTsKfQpFT1M7CgkJfQoJCWVsc2UKCQkJJG9uc29ydCA9ICdudWxsJzsgLy9ubyBzb3J0LXByb2Nlc3NpbmcgaWYgbm8gbW9kcyBhbGxvd2VkCgoJCSRqc2xvYWRzW10gPSA8PDwgRU9TCiAkLlNTc29ydC5hZGRQYXJzZXIoewogIGlkOiAnbmVnbGFzdGlucHV0JywKICBpczogZnVuY3Rpb24ocyxub2RlKSB7CiAgIHZhciBuID0gbm9kZS5jaGlsZE5vZGVzWzBdOwogICBpZihuICYmIG4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PSAnaW5wdXQnICYmIG4udHlwZS50b0xvd2VyQ2FzZSgpID09ICd0ZXh0JykgewogICAgIHZhciB2ID0gbi52YWx1ZTsKICAgICByZXR1cm4gKCFpc05hTihwYXJzZUZsb2F0KHYpKSAmJiBpc0Zpbml0ZSh2KSk7CiAgIH0gZWxzZSB7CiAgICByZXR1cm4gZmFsc2U7CiAgIH0KICB9LAogIGZvcm1hdDogZnVuY3Rpb24ocyxub2RlKSB7CiAgIHZhciB2ID0gbm9kZS5jaGlsZE5vZGVzWzBdLnZhbHVlOwogICBpZiAodikgewogICAgdmFyIG4gPSBOdW1iZXIodik7CiAgICBpZiAoaXNOYU4obikgfHwgbj09MCkge3JldHVybiAwO30KICAgIHJldHVybiAobj4wKSA/IG46bisxMDAwMDsKICAgfSBlbHNlIGlmICgodisnJykubGVuZ3RoID4gMCkgewogICAgcmV0dXJuIDA7CiAgIH0gZWxzZSB7CiAgICByZXR1cm4gOTAwMDsKICAgfQogIH0sCiAgd2F0Y2g6IHRydWUsCiAgdHlwZTogJ251bWVyaWMnCiB9KTsKICQuU1Nzb3J0LmFkZFBhcnNlcih7CiAgaWQ6ICdpc29pbnB1dCcsCiAgaXM6IGZ1bmN0aW9uKHMsbm9kZSkgewogICB2YXIgbiA9IG5vZGUuY2hpbGROb2Rlc1swXTsKICAgaWYobiAmJiBuLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ2lucHV0JyAmJiBuLnR5cGUudG9Mb3dlckNhc2UoKSA9PSAndGV4dCcpIHsKICAgIHAgPSAvXlsxMl1cZHszfVtcLy1dWzAxXVxkW1wvLV1cWzAtM11cZCArKFswMV1cZHwyWzAtM10pKCAqOiAqWzAtNV1cZCl7MSwyfS87CiAgICByZXR1cm4gcC50ZXN0KCQudHJpbShuLnZhbHVlKSk7CiAgIH0gZWxzZSB7CiAgICByZXR1cm4gZmFsc2U7CiAgIH0KICB9LAogIGZvcm1hdDogZnVuY3Rpb24ocyxub2RlKSB7CiAgIHJldHVybiBEYXRlLnBhcnNlKG5vZGUuY2hpbGROb2Rlc1swXS52YWx1ZSk7CiAgfSwKICB3YXRjaDogdHJ1ZSwKICB0eXBlOiAnbnVtZXJpYycKIH0pOwogJC5TU3NvcnQuYWRkUGFyc2VyKHsKICBpZDogJ3RleHRpbnB1dCcsCiAgaXM6IGZ1bmN0aW9uKHMsbm9kZSkgewogICB2YXIgbiA9IG5vZGUuY2hpbGROb2Rlc1swXTsKICAgcmV0dXJuIChuICYmIG4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PSAnaW5wdXQnICYmIG4udHlwZS50b0xvd2VyQ2FzZSgpID09ICd0ZXh0Jyk7CiAgfSwKICBmb3JtYXQ6IGZ1bmN0aW9uKHMsbm9kZSkgewogICB2YXIgdCA9IG5vZGUuY2hpbGROb2Rlc1swXS52YWx1ZTsKICAgcmV0dXJuICQudHJpbSh0KTsKICB9LAogIHdhdGNoOiB0cnVlLAogIHR5cGU6ICd0ZXh0JwogfSk7CgogdmFyIG9wdHMgPSB7CiAgc29ydENsYXNzOiAnU29ydEFibGUnLAogIGFzY0NsYXNzOiAnU29ydFVwJywKICBkZXNjQ2xhc3M6ICdTb3J0RG93bicsCiAgb2RkQ2xhc3M6ICdyb3cxJywKICBldmVuQ2xhc3M6ICdyb3cyJywKICBvZGRzb3J0Q2xhc3M6ICdyb3cxcycsCiAgZXZlbnNvcnRDbGFzczogJ3JvdzJzJywKICBvblNvcnRlZDogeyRvbnNvcnR9CiB9OwogJCgnI3RtdF9wbGF5ZXJzJykuYWRkQ2xhc3MoJ3RhYmxlX3NvcnQnKS5TU3NvcnQob3B0cyk7CiBkZWxldGUgb3B0cy5vblNvcnRlZDsKICQoJyN0bXRfbWF0Y2hlcycpLmFkZENsYXNzKCd0YWJsZV9zb3J0JykuU1Nzb3J0KG9wdHMpOwogJCgnI3RtdF9yZXN1bHRzJykuYWRkQ2xhc3MoJ3RhYmxlX3NvcnQnKS5TU3NvcnQob3B0cyk7CiAkKCcudGVtX25hbWUsLnRlbV9zZWVkLC5tYXRfcGxheXdoZW4sLm1hdF9wbGF5d2hlcmUsLnJlc19wbGF5d2hlbicpLmJsdXIoZnVuY3Rpb24gKGV2KSB7CiAgXCQodGhpcykuY2xvc2VzdCgndGFibGUnKS50cmlnZ2VyKCd1cGRhdGUnKTsKIH0pOwoKRU9TOwoJJGpzZnVuY3NbXSA9IDw8PCBFT1MKZnVuY3Rpb24gZXZlbnRDYW5jZWwoZXYpIHsKIGlmKCFldikgewogIGlmKHdpbmRvdy5ldmVudCkgZXYgPSB3aW5kb3cuZXZlbnQ7CiAgZWxzZSByZXR1cm47CiB9CiBpZihldi5jYW5jZWxCdWJibGUgIT09IG51bGwpIGV2LmNhbmNlbEJ1YmJsZSA9IHRydWU7CiBpZihldi5zdG9wUHJvcGFnYXRpb24pIGV2LnN0b3BQcm9wYWdhdGlvbigpOwogaWYoZXYucHJldmVudERlZmF1bHQpIGV2LnByZXZlbnREZWZhdWx0KCk7CiBpZih3aW5kb3cuZXZlbnQpIGV2LnJldHVyblZhbHVlID0gZmFsc2U7CiBpZihldi5jYW5jZWwgIT09IG51bGwpIGV2LmNhbmNlbCA9IHRydWU7Cn0KZnVuY3Rpb24gc2V0X2FjdGlvbihidG4pIHsKICQoJyN7JGlkfXJlYWxfYWN0aW9uJykudmFsKGJ0bi5uYW1lKTsKfQpmdW5jdGlvbiBzZXRfdGFiKCkgewogdmFyIGFjdGl2ZSA9ICQoJyNwYWdlX3RhYnMgPiAuYWN0aXZlJyk7CiAkKCcjeyRpZH1hY3RpdmVfdGFiJykudmFsKGFjdGl2ZS5hdHRyKCdpZCcpKTsKfQpmdW5jdGlvbiBzZXRfcGFyYW1zKGJ0bikgewogc2V0X2FjdGlvbihidG4pOwogc2V0X3RhYigpOwp9CgpFT1M7CgoJCSR0aGlzLT5NYXRjaEV4aXN0cygkZGF0YS0+YnJhY2tldF9pZCk7CgkJJGZ1bmNzID0gbmV3IHRtdERhdGEoKTsKCgkJJHRoZW1lID0gY21zbXMoKS0+Z2V0X3ZhcmlhYmxlKCdhZG1pbnRoZW1lJyk7CgkJJGljb25pbmZvID0gJHRoZW1lLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9pbmZvLmdpZicsJG1vZC0+TGFuZygnc2hvd2hlbHAnKSwnJywnJywnc3lzdGVtaWNvbiB0aXBwZXInKTsKCQkkc21hcnR5LT5hc3NpZ24oJ3Nob3d0aXAnLCRpY29uaW5mbyk7CgovLz09PT09PT09PSBNQUlOIE9QVElPTlMgPT09PT09PT09PQoJCSRtYWluID0gYXJyYXkoKTsKCQkkbWFpbltdID0gYXJyYXkoCgkJCSRtb2QtPkxhbmcoJ3RpdGxlX3RpdGxlJyksCgkJCSgkcG1vZCkgPwoJCQkkbW9kLT5DcmVhdGVJbnB1dFRleHQoJGlkLCd0bXRfbmFtZScsJGRhdGEtPm5hbWUsNTApIDogJGRhdGEtPm5hbWUKCQkpOwoJCSRtYWluW10gPSBhcnJheSgKCQkJJG1vZC0+TGFuZygndGl0bGVfZGVzYycpLAoJCQkoJHBtb2QpID8KCQkJJG1vZC0+Q3JlYXRlVGV4dEFyZWEoVFJVRSwkaWQsJGRhdGEtPmRlc2NyaXB0aW9uLCd0bXRfZGVzY3JpcHRpb24nLCcnLCcnLCcnLCcnLDY1LDEwLCcnLCcnLCdzdHlsZT0iaGVpZ2h0OjhlbTsiJykgOgoJCQkkZGF0YS0+ZGVzY3JpcHRpb24KCQkpOwoJCSRtYWluW10gPSBhcnJheSgKCQkJJG1vZC0+TGFuZygndGl0bGVfYWxpYXMnKSwKCQkJKCRwbW9kKSA/CgkJCSRtb2QtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ3RtdF9hbGlhcycsJGRhdGEtPmFsaWFzLDMwKSA6ICRkYXRhLT5hbGlhcywKCQkJJG1vZC0+TGFuZygnaGVscF9hbGlhcycpCgkJKTsKCQkkb3B0aW9ucyA9ICRtb2QtPkdldEdyb3VwcygpOwoJCWlmKCRvcHRpb25zKQoJCXsKCQkJZm9yZWFjaCgkb3B0aW9ucyBhcyAmJHJvdykKCQkJCSRyb3cgPSAkcm93WyduYW1lJ107CgkJCXVuc2V0KCRyb3cpOwoJCQkkb3B0aW9ucyA9IGFycmF5X2ZsaXAoJG9wdGlvbnMpOwoJCX0KCQllbHNlCgkJCSRvcHRpb25zID0gYXJyYXkoJG1vZC0+TGFuZygnZ3JvdXBkZWZhdWx0Jyk9PjApOyAvL2Vuc3VyZSBzb21ldGhpbmcgZXhpc3RzCgkJJG1haW5bXSA9IGFycmF5KAoJCQkkbW9kLT5MYW5nKCd0aXRsZV9ncm91cCcpLAoJCQkoJHBtb2QgJiYgISR0aGlzLT5jb21taXR0ZWQpID8KCQkJJG1vZC0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsJ3RtdF9ncm91cGlkJywkb3B0aW9ucywnJywkZGF0YS0+Z3JvdXBpZCkgOgoJCQlhcnJheV9zZWFyY2goJGRhdGEtPmdyb3VwaWQsJG9wdGlvbnMsVFJVRSkuKCgkcG1vZCk/JG1vZC0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCd0bXRfZ3JvdXBpZCcsJGRhdGEtPmdyb3VwaWQpOicnKSwKCQkJJG1vZC0+TGFuZygnaGVscF9ncm91cCcpCgkJKTsKCQkkb3B0aW9ucyA9ICRmdW5jcy0+R2V0VHlwZU5hbWVzKCRtb2QpOwoJCSRtYWluW10gPSBhcnJheSgKCQkJJG1vZC0+TGFuZygndGl0bGVfdHlwZScpLAoJCQkoJHBtb2QgJiYgISR0aGlzLT5jb21taXR0ZWQpID8KCQkJJG1vZC0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsJ3RtdF90eXBlJywkb3B0aW9ucywnJywkZGF0YS0+dHlwZSkgOgoJCQlhcnJheV9zZWFyY2goJGRhdGEtPnR5cGUsJG9wdGlvbnMsVFJVRSkuKCgkcG1vZCk/JG1vZC0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCd0bXRfdHlwZScsJGRhdGEtPnR5cGUpOicnKQoJCSk7CgkJJG1haW5bXSA9IGFycmF5KAoJCQkkbW9kLT5MYW5nKCd0aXRsZV96b25lJyksCgkJCSgkcG1vZCAmJiAhJHRoaXMtPmNvbW1pdHRlZCkgPwoJCQkkbW9kLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwndG10X3RpbWV6b25lJywkbW9kLT5HZXRUaW1lWm9uZXMoKSwnJywkZGF0YS0+dGltZXpvbmUpIDoKCQkJJGRhdGEtPnRpbWV6b25lLigoJHBtb2QpPyRtb2QtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwndG10X3RpbWV6b25lJywkZGF0YS0+dGltZXpvbmUpOicnKSwKCQkJJG1vZC0+TGFuZygnaGVscF96b25lMicpCgkJKTsKCQkkbWFpbltdID0gYXJyYXkoCgkJCSRtb2QtPkxhbmcoJ3RpdGxlX3RlYW1zaXplJyksCgkJCSgkcG1vZCkgPwoJCQkkbW9kLT5DcmVhdGVJbnB1dFRleHQoJGlkLCd0bXRfdGVhbXNpemUnLCRkYXRhLT50ZWFtc2l6ZSwyLDIpIDogJGRhdGEtPnRlYW1zaXplCgkJKTsKCQkkb3B0aW9ucyA9IGFycmF5KAoJCQkkbW9kLT5MYW5nKCdzZWVkX25vbmUnKT0+MCwKCQkJJG1vZC0+TGFuZygnc2VlZF90b3Bvbmx5Jyk9PjEsCgkJCSRtb2QtPkxhbmcoJ3NlZWRfYmFsYW5jZWQnKT0+MiwKCQkJJG1vZC0+TGFuZygnc2VlZF91bmJhbGFuY2VkJyk9PjMsCgkJCSRtb2QtPkxhbmcoJ3NlZWRfcmFuZGJhbGFuY2UnKT0+NAoJCSk7CgkJJG1haW5bXSA9IGFycmF5KAoJCQkkbW9kLT5MYW5nKCd0aXRsZV9zZWVkdHlwZScpLAoJCQkoJHBtb2QgJiYgISR0aGlzLT5jb21taXR0ZWQpID8KCQkJJG1vZC0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsJ3RtdF9zZWVkdHlwZScsJG9wdGlvbnMsJycsJGRhdGEtPnNlZWR0eXBlKToKCQkJYXJyYXlfc2VhcmNoKCRkYXRhLT5zZWVkdHlwZSwkb3B0aW9ucykuKCgkcG1vZCk/JG1vZC0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCd0bXRfc2VlZHR5cGUnLCRkYXRhLT5zZWVkdHlwZSk6JycpLAoJCQkkbW9kLT5MYW5nKCdoZWxwX3NlZWR0eXBlJykKCQkpOwoJCSRvcHRpb25zID0gYXJyYXkoCgkJCSRtb2QtPkxhbmcoJ2ZpeF9ub25lJyk9PjAsCgkJCSRtb2QtPkxhbmcoJ2ZpeF9hZGphY2VudCcpPT4xLAoJCQkkbW9kLT5MYW5nKCdmaXhfYmFsYW5jZWQnKT0+MiwKCQkJJG1vZC0+TGFuZygnZml4X3VuYmFsYW5jZWQnKT0+MwoJCSk7CgkJJG1haW5bXSA9IGFycmF5KAoJCQkkbW9kLT5MYW5nKCd0aXRsZV9maXh0eXBlJyksCgkJCSgkcG1vZCAmJiAhJHRoaXMtPmNvbW1pdHRlZCkgPwoJCQkkbW9kLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwndG10X2ZpeHR5cGUnLCRvcHRpb25zLCcnLCRkYXRhLT5maXh0eXBlKToKCQkJYXJyYXlfc2VhcmNoKCRkYXRhLT5maXh0eXBlLCRvcHRpb25zKS4oKCRwbW9kKT8kbW9kLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ3RtdF9maXh0eXBlJywkZGF0YS0+Zml4dHlwZSk6JycpLAoJCQkkbW9kLT5MYW5nKCdoZWxwX2ZpeHR5cGUnKQoJCSk7CgkJJG1haW5bXSA9IGFycmF5KAoJCQkkbW9kLT5MYW5nKCd0aXRsZV9vd25lcicpLAoJCQkoJHBtb2QpID8KCQkJJG1vZC0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwndG10X293bmVyJywkZGF0YS0+b3duZXIsNTApIDogJGRhdGEtPm93bmVyLAoJCQkkbW9kLT5MYW5nKCdoZWxwX293bmVyJykKCQkpOwoJCSRtYWluW10gPSBhcnJheSgKCQkJJG1vZC0+TGFuZygndGl0bGVfY29udGFjdCcpLAoJCQkoJHBtb2QpID8KCQkJJG1vZC0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwndG10X2NvbnRhY3QnLCRkYXRhLT5jb250YWN0LDUwKSA6ICRkYXRhLT5jb250YWN0LAoJCQkkbW9kLT5MYW5nKCdoZWxwX2NvbnRhY3QnKQoJCSk7CgkJJGhlbHAgPSAkbW9kLT5MYW5nKCdoZWxwX3R3dDEnKTsKCQlpZigkcG1vZCkKCQl7CgkJCSR0d3QgPSBuZXcgdG10VHdlZXQoKTsKCQkJaWYoJHR3dC0+R2V0VG9rZW5zKCRkYXRhLT5icmFja2V0X2lkLFRSVUUsVFJVRSkpCgkJCQkkaGVscCAuPSAkbW9kLT5MYW5nKCdoZWxwX3R3dDInLCRkYXRhLT50d3Rmcm9tKTsKCQkJZWxzZQoJCQkJJGhlbHAgLj0gJG1vZC0+TGFuZygnaGVscF90d3QzJyk7CgkJCSRoZWxwIC49ICcgJy4kbW9kLT5MYW5nKCdoZWxwX3R3dDQnKTsKCQl9CgkJJG1haW5bXSA9IGFycmF5KAoJCQkkbW9kLT5MYW5nKCd0aXRsZV90d3Rmcm9tJyksCgkJCSgkcG1vZCkgPwoJCQkkbW9kLT5DcmVhdGVJbnB1dFRleHQoJGlkLCd0bXRfdHd0ZnJvbScsJGRhdGEtPnR3dGZyb20sMTYpLicgJy4KCQkJJG1vZC0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdjb25uZWN0JywkbW9kLT5MYW5nKCdjb25uZWN0JyksCgkJCQkndGl0bGU9IicuJG1vZC0+TGFuZygndGl0bGVfYXV0aCcpLiciIG9uY2xpY2s9InNldF9wYXJhbXModGhpcyk7IicpOgoJCQkkZGF0YS0+dHd0ZnJvbSwKCQkJJGhlbHAKCQkpOwoJCSRzbXMgPSBjbGFzc19leGlzdHMoJ1NNU0cnLEZBTFNFKTsKCQlpZigkc21zKQoJCXsKCQkJJG1haW5bXSA9IGFycmF5KAoJCQkJJG1vZC0+TGFuZygndGl0bGVfc21zZnJvbScpLAoJCQkJKCRwbW9kKSA/CgkJCQkkbW9kLT5DcmVhdGVJbnB1dFRleHQoJGlkLCd0bXRfc21zZnJvbScsJGRhdGEtPnNtc2Zyb20sMTYpOgoJCQkJJGRhdGEtPnNtc2Zyb20sCgkJCQkkbW9kLT5MYW5nKCdoZWxwX3Ntc2Zyb20nKQoJCQkpOwoJCQkkbWFpbltdID0gYXJyYXkoCgkJCQkkbW9kLT5MYW5nKCd0aXRsZV9zbXNwcmVmaXgnKSwKCQkJCSgkcG1vZCkgPwoJCQkJJG1vZC0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwndG10X3Ntc3ByZWZpeCcsJGRhdGEtPnNtc3ByZWZpeCw0KToKCQkJCSRkYXRhLT5zbXNwcmVmaXgsCgkJCQkkbW9kLT5MYW5nKCdoZWxwX3Ntc3ByZWZpeCcpCgkJCSk7CgkJfQoJCSRvYiA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnRnJvbnRFbmRVc2VycycpOwoJCWlmKCRvYikKCQl7CgkJCS8vVE9ETyBpZiBwb3NzaWJsZSBmb3IgZmV1LCBmaWx0ZXIgb24gcGVybWl0dGVkIGdyb3VwcyBvbmx5IGMuZi4gTUJWRmFxCgkJCWlmKCRwbW9kKQoJCQkJJGdycG5hbWVzID0gJG9iLT5HZXRHcm91cExpc3QoKTsKCQkJdW5zZXQoJG9iKTsKCQkJJG1haW5bXSA9IGFycmF5KAoJCQkJJG1vZC0+TGFuZygndGl0bGVfZmV1X2VkcycpLAoJCQkJKCRwbW9kKSA/CgkJCQkkbW9kLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwndG10X2ZldV9lZGl0Z3JvdXAnLGFycmF5KAoJCQkJCSRtb2QtPkxhbmcoJ25vX2dyb3VwcycpPT4nbm9uZScsCgkJCQkJJG1vZC0+TGFuZygnYWxsX2dyb3VwcycpPT4nYW55JykrJGdycG5hbWVzLCcnLCRkYXRhLT5mZXVfZWRpdGdyb3VwKSA6ICRkYXRhLT5mZXVfZWRpdGdyb3VwLAoJCQkJJG1vZC0+TGFuZygnaGVscF9sb2dpbicpCgkJCSk7CgkJfQoKCQkkc21hcnR5LT5hc3NpZ24oJ21haW4nLCRtYWluKTsKCi8vPT09PT09PT09IEFEVkFOQ0VEIE9QVElPTlMgPT09PT09PT09PQoKCQkkYWR2ID0gYXJyYXkoKTsKCQkkYWR2W10gPSBhcnJheSgKCQkJJG1vZC0+TGFuZygndGl0bGVfbG9jYWxlJyksCgkJCSgkcG1vZCkgPwoJCQkkbW9kLT5DcmVhdGVJbnB1dFRleHQoJGlkLCd0bXRfbG9jYWxlJywkZGF0YS0+bG9jYWxlLDgsMTIpIDogJGRhdGEtPmxvY2FsZSwKCQkJJG1vZC0+TGFuZygnaGVscF9sb2NhbGUnKQoJCSk7CgkJaWYoJHNtcykKCQl7CgkJCSRhZHZbXSA9IGFycmF5KAoJCQkJJG1vZC0+TGFuZygndGl0bGVfcGhvbmVfcmVnZXgnKSwKCQkJCSgkcG1vZCkgPwoJCQkJJG1vZC0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwndG10X3Ntc3BhdHRlcm4nLCRkYXRhLT5zbXNwYXR0ZXJuLDMwLDMyKToKCQkJCSRkYXRhLT5zbXNwYXR0ZXJuLAoJCQkJJG1vZC0+TGFuZygnaGVscF9waG9uZV9yZWdleCcpCgkJCSk7CgkJfQoJCSRtYWlsID0gY2xhc3NfZXhpc3RzKCdDTVNNYWlsZXInLEZBTFNFKTsKCQkkdHBsaGVscCA9IGFycmF5KCk7CgkJJHRwbGhlbHBbXSA9ICRtb2QtPkxhbmcoJ2hlbHBfdGVtcGxhdGUnKTsKCQlmb3JlYWNoKGFycmF5KAoJCSd0aXRsZScsCgkJJ2Rlc2NyaXB0aW9uJywKCQknb3duZXInLAoJCSdjb250YWN0JywKCQknc21zZnJvbScsCgkJJ3doZXJlJywKCQknd2hlbicsCgkJJ2RhdGUnLAoJCSd0aW1lJywKCQknb3Bwb25lbnQnLAoJCSd0ZWFtcycsCgkJJ3JlY2lwaWVudCcsCgkJJ3RvYWxsJwoJCSkgYXMgJHZhcm5hbWUpICR0cGxoZWxwW10gPSAnJm5ic3A7JCcuJHZhcm5hbWUuJzogJy4kbW9kLT5MYW5nKCdkZXNjXycuJHZhcm5hbWUpOwoJCSR0cGxoZWxwW10gPSAkbW9kLT5MYW5nKCdoZWxwX21haWxvdXRfdGVtcGxhdGUnKTsKCQkkaGVscCA9IGltcGxvZGUoJzxiciAvPicsJHRwbGhlbHApOwoJCSRoZWxwYWJvdmUgPSAkbW9kLT5MYW5nKCdzZWVhYm92ZScpOwoKCQlpZigkbWFpbCkKCQl7CgkJCWlmKCRwbW9kKQoJCQkJJGhpZGRlbiAuPSAkbW9kLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ3RtdF9odG1sJywwKTsKCQkJJGFkdltdID0gYXJyYXkoCgkJCQkkbW9kLT5MYW5nKCd0aXRsZV9lbWFpbGh0bWwnKSwKCQkJCSgkcG1vZCkgPwoJCQkJJG1vZC0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsJ3RtdF9odG1sJywnMScsJGRhdGEtPmh0bWwpIDoKCQkJCSgoJGRhdGEtPmh0bWwpID8gICRtb2QtPkxhbmcoJ3llcycpIDogJG1vZC0+TGFuZygnbm8nKSkKCQkJKTsKCgkJCSRhZHZbXSA9IGFycmF5KAoJCQkJJG1vZC0+TGFuZygndGl0bGVfbWFpbG91dHRlbXBsYXRlJyksCgkJCQkoJHBtb2QpID8KCQkJCSRtb2QtPkNyZWF0ZVRleHRBcmVhKEZBTFNFLCRpZCwkZGF0YS0+bW90ZW1wbGF0ZSwndG10X21vdGVtcGxhdGUnLCcnLCcnLCcnLCcnLDY1LDEwLCcnLCcnLCdzdHlsZT0iaGVpZ2h0OjhlbSInKSA6CgkJCQkkZGF0YS0+bW90ZW1wbGF0ZSwKCQkJCSRoZWxwCgkJCSk7CgkJfQoJCSRhZHZbXSA9IGFycmF5KAoJCQkkbW9kLT5MYW5nKCd0aXRsZV90d2VldG91dHRlbXBsYXRlJyksCgkJCSgkcG1vZCkgPwoJCQkkbW9kLT5DcmVhdGVUZXh0QXJlYShGQUxTRSwkaWQsJGRhdGEtPnRvdGVtcGxhdGUsJ3RtdF90b3RlbXBsYXRlJywnJywnJywnJywnJyw2NSwzLCcnLCcnLCdzdHlsZT0iaGVpZ2h0OjNlbSInKSA6CgkJCSRkYXRhLT50b3RlbXBsYXRlLAoJCQkoKCRtYWlsKT8kaGVscGFib3ZlOiRoZWxwKQoJCSk7ICAvL1RPRE8gbWF5YmUgc3BlY2lmaWMgJHRwbGhlbHBbXQoJCWlmKCRtYWlsKQoJCXsKCQkJJGFkdltdID0gYXJyYXkoCgkJCQkkbW9kLT5MYW5nKCd0aXRsZV9tYWlsY2FuY2VsdGVtcGxhdGUnKSwKCQkJCSgkcG1vZCkgPwoJCQkJJG1vZC0+Q3JlYXRlVGV4dEFyZWEoRkFMU0UsJGlkLCRkYXRhLT5tY2FuY3RlbXBsYXRlLCd0bXRfbWNhbmN0ZW1wbGF0ZScsJycsJycsJycsJycsNjUsMTAsJycsJycsJ3N0eWxlPSJoZWlnaHQ6OGVtIicpIDoKCQkJCSRkYXRhLT5tY2FuY3RlbXBsYXRlLAoJCQkJJGhlbHBhYm92ZQoJCQkpOwoJCX0KCQkkYWR2W10gPSBhcnJheSgKCQkJJG1vZC0+TGFuZygndGl0bGVfdHdlZXRjYW5jZWx0ZW1wbGF0ZScpLAoJCQkoJHBtb2QpID8KCQkJJG1vZC0+Q3JlYXRlVGV4dEFyZWEoRkFMU0UsJGlkLCRkYXRhLT50Y2FuY3RlbXBsYXRlLCd0bXRfdGNhbmN0ZW1wbGF0ZScsJycsJycsJycsJycsNjUsMywnJywnJywnc3R5bGU9ImhlaWdodDozZW0iJykgOgoJCQkkZGF0YS0+dGNhbmN0ZW1wbGF0ZSwKCQkJJGhlbHBhYm92ZQoJCSk7ICAvL1RPRE8gbWF5YmUgc3BlY2lmaWMgJHRwbGhlbHBbXQoJCWlmKCRtYWlsKQoJCXsKCQkJJGFkdltdID0gYXJyYXkoCgkJCQkkbW9kLT5MYW5nKCd0aXRsZV9tYWlscmVxdWVzdHRlbXBsYXRlJyksCgkJCQkoJHBtb2QpID8KCQkJCSRtb2QtPkNyZWF0ZVRleHRBcmVhKEZBTFNFLCRpZCwkZGF0YS0+bXJlcXRlbXBsYXRlLCd0bXRfbXJlcXRlbXBsYXRlJywnJywnJywnJywnJyw2NSwxMCwnJywnJywnc3R5bGU9ImhlaWdodDo4ZW0iJykgOgoJCQkJJGRhdGEtPm1yZXF0ZW1wbGF0ZSwKCQkJCSRoZWxwYWJvdmUKCQkJKTsKCQl9CgkJJGFkdltdID0gYXJyYXkoCgkJCSRtb2QtPkxhbmcoJ3RpdGxlX3R3ZWV0cmVxdWVzdHRlbXBsYXRlJyksCgkJCSgkcG1vZCkgPwoJCQkkbW9kLT5DcmVhdGVUZXh0QXJlYShGQUxTRSwkaWQsJGRhdGEtPnRyZXF0ZW1wbGF0ZSwndG10X3RyZXF0ZW1wbGF0ZScsJycsJycsJycsJycsNjUsMywnJywnJywnc3R5bGU9ImhlaWdodDozZW0iJykgOgoJCQkkZGF0YS0+dG90ZW1wbGF0ZSwKCQkJJGhlbHBhYm92ZQoJCSk7ICAvL1RPRE8gbWF5YmUgc3BlY2lmaWMgJHRwbGhlbHBbXQoJCgkJJHRwbGhlbHAgPSBhcnJheSgpOwoJCSR0cGxoZWxwW10gPSAkbW9kLT5MYW5nKCdoZWxwX3RlbXBsYXRlJyk7CgkJZm9yZWFjaChhcnJheSgKCQkndGl0bGUnLAoJCSdkZXNjcmlwdGlvbicsCgkJJ3doZXJlJywKCQknd2hlbicsCgkJJ2RhdGUnLAoJCSd0aW1lJywKCQkncmVwb3J0JwoJCSkgYXMgJHZhcm5hbWUpICR0cGxoZWxwW10gPSAnJm5ic3A7JCcuJHZhcm5hbWUuJzogJy4kbW9kLT5MYW5nKCdkZXNjXycuJHZhcm5hbWUpOwoJCSR0cGxoZWxwW10gPSAkbW9kLT5MYW5nKCdoZWxwX21haWxpbl90ZW1wbGF0ZScpOwoJCSRoZWxwID0gaW1wbG9kZSgnPGJyIC8+JywkdHBsaGVscCk7CgoJCWlmKCRtYWlsKQoJCXsKCQkJJGFkdltdID0gYXJyYXkoCgkJCQkkbW9kLT5MYW5nKCd0aXRsZV9tYWlsaW50ZW1wbGF0ZScpLAoJCQkJKCRwbW9kKSA/CgkJCQkkbW9kLT5DcmVhdGVUZXh0QXJlYShGQUxTRSwkaWQsJGRhdGEtPm1pdGVtcGxhdGUsJ3RtdF9taXRlbXBsYXRlJywnJywnJywnJywnJyw2NSwxMCwnJywnJywnc3R5bGU9ImhlaWdodDo4ZW0iJykgOgoJCQkJJGRhdGEtPm1pdGVtcGxhdGUsCgkJCQkkaGVscAoJCQkpOwoJCX0KCQkkYWR2W10gPSBhcnJheSgKCQkJJG1vZC0+TGFuZygndGl0bGVfdHdlZXRpbnRlbXBsYXRlJyksCgkJCSgkcG1vZCkgPwoJCQkkbW9kLT5DcmVhdGVUZXh0QXJlYShGQUxTRSwkaWQsJGRhdGEtPnRpdGVtcGxhdGUsJ3RtdF90aXRlbXBsYXRlJywnJywnJywnJywnJyw2NSwzLCcnLCcnLCdzdHlsZT0iaGVpZ2h0OjNlbSInKSA6CgkJCSRkYXRhLT50aXRlbXBsYXRlLAoJCQkoKCRtYWlsKT8kaGVscGFib3ZlOiRoZWxwKQoJCSk7ICAvL1RPRE8gbWF5YmUgc3BlY2lmaWMgJHRwbGhlbHBbXQoKCQkkYWR2W10gPSBhcnJheSgKCQkJJG1vZC0+TGFuZygndGl0bGVfbG9naWMnKSwKCQkJKCRwbW9kKSA/CgkJCSRtb2QtPkNyZWF0ZVRleHRBcmVhKEZBTFNFLCRpZCwkZGF0YS0+bG9naWMsJ3RtdF9sb2dpYycsJycsJycsJycsJycsNjUsMTUsJycsJycsJ3N0eWxlPSJoZWlnaHQ6OGVtIicpIDoKCQkJJGRhdGEtPmxvZ2ljLAoJCQkkbW9kLT5MYW5nKCdoZWxwX2xvZ2ljJykKCQkpOwoKCQkkc21hcnR5LT5hc3NpZ24oJ2FkdmFuY2VkJywkYWR2KTsKCi8vPT09PT09PT09IFNDSEVEVUxFID09PT09PT09PT0KCgkJJHNjaGVkID0gYXJyYXkoKTsKCQlpZigkcG1vZCkKCQl7CgkJCWlmKCEkdGhpcy0+Y29tbWl0dGVkKQoJCQl7CgkJCQkkaSA9ICRtb2QtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ3RtdF9zdGFydGRhdGUnLCRkYXRhLT5zdGFydGRhdGUsMTUsMjApOwoJCQkJJGkgPSBzdHJfcmVwbGFjZSgnY2xhc3M9IicsJ2NsYXNzPSJwaWNrZGF0ZSAnLCRpKTsKCQkJfQoJCQllbHNlaWYgKCRkYXRhLT5zdGFydGRhdGUpCgkJCQkkaSA9ICRkYXRhLT5zdGFydGRhdGUuJG1vZC0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCd0bXRfc3RhcnRkYXRlJywkZGF0YS0+c3RhcnRkYXRlKTsKCQkJZWxzZQoJCQkJJGkgPSAnJm5ic3AnLiRtb2QtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwndG10X3N0YXJ0ZGF0ZScsJycpOwoJCX0KCQllbHNlaWYoJGRhdGEtPnN0YXJ0ZGF0ZSkKCQkJJGkgPSAkZGF0YS0+c3RhcnRkYXRlOwoJCWVsc2UKCQkJJGkgPSAnJm5ic3AnOwoJCSRzY2hlZFtdID0gYXJyYXkoCgkJCSRtb2QtPkxhbmcoJ3RpdGxlX3N0YXJ0X2RhdGUnKSwKCQkJJGksCgkJCSRtb2QtPkxhbmcoJ2hlbHBfZGF0ZScpCgkJKTsKCQlpZigkcG1vZCkKCQl7CgkJCSRpID0gJG1vZC0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwndG10X2VuZGRhdGUnLCRkYXRhLT5lbmRkYXRlLDE1LDIwKTsKCQkJJGkgPSBzdHJfcmVwbGFjZSgnY2xhc3M9IicsJ2NsYXNzPSJwaWNrZGF0ZSAnLCRpKTsKCQl9CgkJZWxzZQoJCQkkaSA9ICgkZGF0YS0+ZW5kZGF0ZSkgPyAkZGF0YS0+ZW5kZGF0ZSA6ICcmbmJzcCc7CgkJJHNjaGVkW10gPSBhcnJheSgKCQkJJG1vZC0+TGFuZygndGl0bGVfZW5kX2RhdGUnKSwKCQkJJGksCgkJCSRtb2QtPkxhbmcoJ2hlbHBfZGF0ZScpCgkJKTsKCgkJaWYoJHBtb2QpCgkJewoJCQkvL2ZvciBwb3B1cCBjYWxlbmRhcnMKCQkJJG5leHRtID0gJG1vZC0+TGFuZygnbmV4dG0nKTsKCQkJJHByZXZtID0gJG1vZC0+TGFuZygncHJldm0nKTsKCQkJLy9qcyB3YW50cyBxdW90ZWQgcGVyaW9kLW5hbWVzCgkJCSR0ID0gJG1vZC0+TGFuZygnbG9uZ21vbnRocycpOwoJCQkkbW5hbWVzID0gIiciLnN0cl9yZXBsYWNlKCIsIiwiJywnIiwkdCkuIiciOwoJCQkkdCA9ICRtb2QtPkxhbmcoJ2xvbmdkYXlzJyk7CgkJCSRkbmFtZXMgPSAiJyIuc3RyX3JlcGxhY2UoIiwiLCInLCciLCR0KS4iJyI7CgkJCSR0ID0gJG1vZC0+TGFuZygnc2hvcnRkYXlzJyk7CgkJCSRzZG5hbWVzID0gIiciLnN0cl9yZXBsYWNlKCIsIiwiJywnIiwkdCkuIiciOwoJCQkkanNsb2Fkc1tdID0gPDw8IEVPUwogJCgnLnBpY2tkYXRlJykuZWFjaChmdW5jdGlvbigpIHsKICAgJCh0aGlzKS5QaWthZGF5KHsKICAgIGNvbnRhaW5lcjogdGhpcy5wYXJlbnROb2RlLAogICAgZm9ybWF0OiAnWVlZWS1NTS1ERCcsCiAgICBpMThuOiB7CiAgICAgcHJldmlvdXNNb250aDogJ3skcHJldm19JywKICAgICBuZXh0TW9udGg6ICd7JG5leHRtfScsCiAgICAgbW9udGhzOiBbeyRtbmFtZXN9XSwKICAgICB3ZWVrZGF5czogW3skZG5hbWVzfV0sCiAgICAgd2Vla2RheXNTaG9ydDogW3skc2RuYW1lc31dCiAgICB9CiAgIH0pOwogfSk7CgpFT1M7CgkJfQoJCWlmKGNsYXNzX2V4aXN0cygnQm9va2VyJyxGQUxTRSkpCgkJewoJCQkkc2NoZWRbXSA9IGFycmF5KAoJCQkJJG1vZC0+TGFuZygndGl0bGVfY2FsZW5kYXInKS4nIChOT1QgWUVUIFdPUktJTkcpJywKCQkJCSgkcG1vZCkgPwoJCQkJJG1vZC0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwndG10X2NhbGVuZGFyaWQnLCRkYXRhLT5jYWxlbmRhcmlkLDE1LDIwKSA6ICRkYXRhLT5jYWxlbmRhcmlkLAoJCQkJJG1vZC0+TGFuZygnaGVscF9jYWxlbmRhcicpCgkJCSk7CgkJfQoJCSRzY2hlZFtdID0gYXJyYXkoCgkJCSRtb2QtPkxhbmcoJ3RpdGxlX2F2YWlsYWJsZScpLicgKE5PVCBZRVQgV09SS0lORyknLAoJCQkoJHBtb2QpID8KCQkJJG1vZC0+Q3JlYXRlVGV4dEFyZWEoRkFMU0UsJGlkLCRkYXRhLT5hdmFpbGFibGUsJ3RtdF9hdmFpbGFibGUnLCcnLCcnLCcnLCcnLDQwLDMsJycsJycsJ3N0eWxlPSJoZWlnaHQ6M2VtIicpIDoKCQkJJGRhdGEtPmF2YWlsYWJsZSwKCQkJJG1vZC0+TGFuZygnaGVscF9hdmFpbGFibGUnKQoJCSk7CgkJJHNjaGVkW10gPSBhcnJheSgKCQkJJG1vZC0+TGFuZygndGl0bGVfbGF0aXR1ZGUnKSwKCQkJKCRwbW9kKSA/CgkJCSRtb2QtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICd0bXRfbGF0aXR1ZGUnLCAkZGF0YS0+bGF0aXR1ZGUsOCkgOiAkZGF0YS0+bGF0aXR1ZGUsCgkJCSRtb2QtPkxhbmcoJ2hlbHBfbGF0aXR1ZGUnKQoJCSk7CgkJJHNjaGVkW10gPSBhcnJheSgKCQkJJG1vZC0+TGFuZygndGl0bGVfbG9uZ2l0dWRlJyksCgkJCSgkcG1vZCkgPwoJCQkkbW9kLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAndG10X2xvbmdpdHVkZScsICRkYXRhLT5sb25naXR1ZGUsOCkgOiAkZGF0YS0+bG9uZ2l0dWRlLAoJCQkkbW9kLT5MYW5nKCdoZWxwX2xvbmdpdHVkZScpCgkJKTsKCQkkc2NoZWRbXSA9IGFycmF5KAoJCQkkbW9kLT5MYW5nKCd0aXRsZV9zYW1lX3RpbWUnKSwKCQkJKCRwbW9kKSA/CgkJCSRtb2QtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ3RtdF9zYW1ldGltZScsJGRhdGEtPnNhbWV0aW1lLDMpIDogJGRhdGEtPnNhbWV0aW1lLAoJCQkkbW9kLT5MYW5nKCdoZWxwX3NhbWVfdGltZScpLAoJCSk7CgoJCSRjYWwgPSBuZXcgdG10Q2FsZW5kYXIoJG1vZCk7CgkJJG9wdHMgPSAkY2FsLT5JbnRlcnZhbE5hbWVzKGFycmF5KDAsMSwyLDMsNCksVFJVRSk7IC8vcGx1cmFsIGNob2ljZXMgdXAgdG8gd2Vla3MKCQl1bnNldCgkY2FsKTsKCQlpZigkcG1vZCkKCQkJJG9wdHMgPSBhcnJheV9mbGlwKCRvcHRzKTsgLy9zZWxlY3RvciBuZWVkcyBvdGhlciBmb3JtIG9mIGFycmF5CgoJCSRzY2hlZFtdID0gYXJyYXkoCgkJCSRtb2QtPkxhbmcoJ3RpdGxlX3BsYWNlX2dhcCcpLAoJCQkoJHBtb2QpID8KCQkJJG1vZC0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwndG10X3BsYWNlZ2FwJywkZGF0YS0+cGxhY2VnYXAsMyw1KS4KCQkJCScmbmJzcCcuCgkJCQkkbW9kLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwndG10X3BsYWNlZ2FwdHlwZScsJG9wdHMsLTEsJGRhdGEtPnBsYWNlZ2FwdHlwZSk6CgkJCSRkYXRhLT5wbGFjZWdhcC4nICcuJG9wdHNbJGRhdGEtPnBsYWNlZ2FwdHlwZV0sCgkJCSRtb2QtPkxhbmcoJ2hlbHBfcGxhY2VfZ2FwJykKCQkJKTsKCgkJJHNjaGVkW10gPSBhcnJheSgKCQkJJG1vZC0+TGFuZygndGl0bGVfcGxheV9nYXAnKSwKCQkJKCRwbW9kKSA/CgkJCSRtb2QtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ3RtdF9wbGF5Z2FwJywkZGF0YS0+cGxheWdhcCwzLDUpLgoJCQkJJyZuYnNwOycuCgkJCQkkbW9kLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwndG10X3BsYXlnYXB0eXBlJywkb3B0cywtMSwkZGF0YS0+cGxheWdhcHR5cGUpOgoJCQkkZGF0YS0+cGxheWdhcC4nICcuJG9wdHNbJGRhdGEtPnBsYXlnYXB0eXBlXSwKCQkJJG1vZC0+TGFuZygnaGVscF9wbGF5X2dhcCcpCgkJKTsKCgkJJHNtYXJ0eS0+YXNzaWduKCdzY2hlZHVsZXJzJywkc2NoZWQpOwoKLy89PT09PT09PT0gQ0hBUlQgPT09PT09PT09PQoKCQkkbmFtZXMgPSBhcnJheSgpOwoKCQkkbmFtZXNbXSA9IGFycmF5KAoJCQkkbW9kLT5MYW5nKCd0aXRsZV9maW5hbCcpLAoJCQkoJHBtb2QpID8KCQkJJG1vZC0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwndG10X2ZpbmFsJywkZGF0YS0+ZmluYWwsMzApIDogJGRhdGEtPmZpbmFsCgkJKTsKCQkkbmFtZXNbXSA9IGFycmF5KAoJCQkkbW9kLT5MYW5nKCd0aXRsZV9zZW1pJyksCgkJCSgkcG1vZCkgPwoJCQkkbW9kLT5DcmVhdGVJbnB1dFRleHQoJGlkLCd0bXRfc2VtaScsJGRhdGEtPnNlbWksMzApIDogJGRhdGEtPnNlbWkKCQkpOwoJCSRuYW1lc1tdID0gYXJyYXkoCgkJCSRtb2QtPkxhbmcoJ3RpdGxlX3F1YXJ0ZXInKSwKCQkJKCRwbW9kKSA/CgkJCSRtb2QtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ3RtdF9xdWFydGVyJywkZGF0YS0+cXVhcnRlciwzMCkgOiAkZGF0YS0+cXVhcnRlcgoJCSk7CgkJJG5hbWVzW10gPSBhcnJheSgKCQkJJG1vZC0+TGFuZygndGl0bGVfZWlnaHRoJyksCgkJCSgkcG1vZCkgPwoJCQkkbW9kLT5DcmVhdGVJbnB1dFRleHQoJGlkLCd0bXRfZWlnaHRoJywkZGF0YS0+ZWlnaHRoLDMwKSA6ICRkYXRhLT5laWdodGgKCQkpOwoJCSRuYW1lc1tdID0gYXJyYXkoCgkJCSRtb2QtPkxhbmcoJ3RpdGxlX3JvdW5kbmFtZScpLAoJCQkoJHBtb2QpID8KCQkJJG1vZC0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwndG10X3JvdW5kbmFtZScsJGRhdGEtPnJvdW5kbmFtZSwzMCkgOiAkZGF0YS0+cm91bmRuYW1lLAoJCQkkbW9kLT5MYW5nKCdoZWxwX21hdGNoX25hbWVzJykKCQkpOwoJCSRuYW1lc1tdID0gYXJyYXkoCgkJCSRtb2QtPkxhbmcoJ3RpdGxlX2FnYWluc3QnKSwKCQkJKCRwbW9kKSA/CgkJCSRtb2QtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ3RtdF92ZXJzdXMnLCRkYXRhLT52ZXJzdXMsMzApIDogJGRhdGEtPnZlcnN1cwoJCSk7CgkJJG5hbWVzW10gPSBhcnJheSgKCQkJJG1vZC0+TGFuZygndGl0bGVfZGVmZWF0ZWQnKSwKCQkJKCRwbW9kKSA/CgkJCSRtb2QtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ3RtdF9kZWZlYXRlZCcsJGRhdGEtPmRlZmVhdGVkLDMwKSA6ICRkYXRhLT5kZWZlYXRlZAoJCSk7CgkJJG5hbWVzW10gPSBhcnJheSgKCQkJJG1vZC0+TGFuZygndGl0bGVfY2FudGllJyksCgkJCSgkcG1vZCkgPwoJCQkkbW9kLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwndG10X2NhbnRpZScsMSwkZGF0YS0+Y2FudGllKSA6CgkJCQkoJGRhdGEtPmNhbnRpZT8kbW9kLT5MYW5nKCd5ZXN0aWVzJyk6JG1vZC0+TGFuZygnbm90aWVzJykpCgkJKTsKCQkkbmFtZXNbXSA9IGFycmF5KAoJCQkkbW9kLT5MYW5nKCd0aXRsZV90aWVkJyksCgkJCSgkcG1vZCkgPwoJCQkkbW9kLT5DcmVhdGVJbnB1dFRleHQoJGlkLCd0bXRfdGllZCcsJGRhdGEtPnRpZWQsMzApIDogJGRhdGEtPnRpZWQKCQkpOwoJCSRuYW1lc1tdID0gYXJyYXkoCgkJCSRtb2QtPkxhbmcoJ3RpdGxlX25vb3AnKSwKCQkJKCRwbW9kKSA/CgkJCSRtb2QtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ3RtdF9ieWUnLCRkYXRhLT5ieWUsMzApIDogJGRhdGEtPmJ5ZQoJCSk7CgkJJG5hbWVzW10gPSBhcnJheSgKCQkJJG1vZC0+TGFuZygndGl0bGVfZm9yZmVpdCcpLAoJCQkoJHBtb2QpID8KCQkJJG1vZC0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwndG10X2ZvcmZlaXQnLCRkYXRhLT5mb3JmZWl0LDMwKSA6ICRkYXRhLT5mb3JmZWl0CgkJKTsKCQkkbmFtZXNbXSA9IGFycmF5KAoJCQkkbW9kLT5MYW5nKCd0aXRsZV9hYmFuZG9uZWQnKSwKCQkJKCRwbW9kKSA/CgkJCSRtb2QtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ3RtdF9ub21hdGNoJywkZGF0YS0+bm9tYXRjaCwzMCkgOiAkZGF0YS0+bm9tYXRjaAoJCSk7CgkJJG5hbWVzW10gPSBhcnJheSgKCQkJJG1vZC0+TGFuZygndGl0bGVfYXRmb3JtYXQnKSwKCQkJKCRwbW9kKSA/CgkJCSRtb2QtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ3RtdF9hdGZvcm1hdCcsJGRhdGEtPmF0Zm9ybWF0LDE2KTogJGRhdGEtPmF0Zm9ybWF0LAoJCQkkbW9kLT5MYW5nKCdoZWxwX2RhdGVfZm9ybWF0JykKCQkpOwoJCSRuYW1lc1tdID0gYXJyYXkoCgkJCSRtb2QtPkxhbmcoJ3RpdGxlX2Nzc2ZpbGUnKSwKCQkJKCRwbW9kKSA/CgkJCSRtb2QtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ3RtdF9jaGFydGNzcycsJGRhdGEtPmNoYXJ0Y3NzLDIwLDEyOCkuCgkJCScgJy4kbW9kLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ3VwbG9hZF9jc3MnLCRtb2QtPkxhbmcoJ3VwbG9hZCcpLAoJCQkJJ3RpdGxlPSInLiRtb2QtPkxhbmcoJ3VwbG9hZF90aXAnKS4nIiBvbmNsaWNrPSJzZXRfcGFyYW1zKHRoaXMpOyInKSA6CgkJCSRkYXRhLT5jaGFydGNzcywKCQkJJG1vZC0+TGFuZygnaGVscF9jc3NmaWxlJykKCQkpOwoJCSR0cGxoZWxwID0gYXJyYXkoKTsKCQkkdHBsaGVscFtdID0gJG1vZC0+TGFuZygnaGVscF90ZW1wbGF0ZScpOwoJCWZvcmVhY2goYXJyYXkoCgkJJ3RpdGxlJywKCQknZGVzY3JpcHRpb24nLAoJCSdvd25lcicsCgkJJ2NvbnRhY3QnLAoJCSdpbWFnZScsCgkJJ2ltZ2RhdGUnLAoJCSdpbWdoZWlnaHQnLAoJCSdpbWd3aWR0aCcsCgkJKSBhcyAkdmFybmFtZSkgJHRwbGhlbHBbXSA9ICcmbmJzcDskJy4kdmFybmFtZS4nOiAnLiRtb2QtPkxhbmcoJ2Rlc2NfJy4kdmFybmFtZSk7CgkJJHRwbGhlbHBbXSA9ICRtb2QtPkxhbmcoJ2hlbHBfY2h0dGVtcGxhdGUnKTsKCQkkaGVscCA9IGltcGxvZGUoJzxiciAvPicsJHRwbGhlbHApOwoKCQkkbmFtZXNbXSA9IGFycmF5KAoJCQkkbW9kLT5MYW5nKCd0aXRsZV9jaHR0ZW1wbGF0ZScpLAoJCQkoJHBtb2QpID8KCQkJJG1vZC0+Q3JlYXRlVGV4dEFyZWEoRkFMU0UsJGlkLCRkYXRhLT5jaHR0ZW1wbGF0ZSwndG10X2NodHRlbXBsYXRlJywnJywnJywnJywnJyw2NSwyMCwnJywnJywnc3R5bGU9ImhlaWdodDoxMGVtIicpIDoKCQkJJGRhdGEtPmNodHRlbXBsYXRlLAoJCQkkaGVscAoJCSk7CgoJCSRzbWFydHktPmFzc2lnbignbmFtZXMnLCRuYW1lcyk7CgoJCSRzbWFydHktPmFzc2lnbigncHJpbnQnLCRtb2QtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwncHJpbnQnLCRtb2QtPkxhbmcoJ3ByaW50JyksCgkJCSd0aXRsZT0iJy4kbW9kLT5MYW5nKCdwcmludF90aXAnKS4nIiBvbmNsaWNrPSJzZXRfcGFyYW1zKHRoaXMpOyInKSk7CgovLz09PT09PT09PSBURUFNUyA9PT09PT09PT09CgoJCSRzbWFydHktPmFzc2lnbignb3JkZXJ0aXRsZScsJG1vZC0+TGFuZygndGl0bGVfb3JkZXInKSk7CgkJJHNtYXJ0eS0+YXNzaWduKCdzZWVkdGl0bGUnLCRtb2QtPkxhbmcoJ3RpdGxlX3NlZWQnKSk7CgkJJHNtYXJ0eS0+YXNzaWduKCdjb250YWN0dGl0bGUnLCRtb2QtPkxhbmcoJ3RpdGxlX2NvbnRhY3QnKSk7CgkJJHNtYXJ0eS0+YXNzaWduKCdtb3ZldGl0bGUnLCRtb2QtPkxhbmcoJ3RpdGxlX21vdmUnKSk7CgkJJGlzdGVhbSA9ICgoaW50KSRkYXRhLT50ZWFtc2l6ZSA+IDEpOyAKCQkkdGVhbXRpdGxlID0gKCRpc3RlYW0pID8gJG1vZC0+TGFuZygndGl0bGVfdGVhbScpIDogJG1vZC0+TGFuZygndGl0bGVfcGxheWVyJyk7CgkJJHNtYXJ0eS0+YXNzaWduKCd0ZWFtdGl0bGUnLCR0ZWFtdGl0bGUpOwoJCSRmaW5kcyA9IGFycmF5KCcvY2xhc3M9IiguKikiLycsJy9pZD0uKlxbXF0iIC8nKTsgLy9mb3IgeGh0bWwgc3RyaW5nIGNsZWFudXAKCgkJaWYoJGRhdGEtPnRlYW1zKQoJCXsKCQkJJHRjb3VudCA9IGNvdW50KCRkYXRhLT50ZWFtcyk7CgkJCSR0ZWFtcyA9IGFycmF5KCk7CgkJCSRpbmR4ID0gMTsKCQkJJHJvd2NsYXNzID0gJ3JvdzEnOyAvL3VzZWQgdG8gYWx0ZXJuYXRlIHJvdyBjb2xvcnMKCQkJJHRoZW1lID0gJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddOwoJCQlpZigkcG1vZCkKCQkJewoJCQkJJGRvd250ZXh0ID0gJG1vZC0+TGFuZygnZG93bicpOwoJCQkJJHVwdGV4dCA9ICRtb2QtPkxhbmcoJ3VwJyk7CgkJCQkkdG1wID0gKCRpc3RlYW0pID8gJG1vZC0+TGFuZygndGVhbScpIDogJG1vZC0+TGFuZygncGxheWVyJyk7CgkJCX0KCgkJCWZvcmVhY2goJGRhdGEtPnRlYW1zIGFzICR0aWQ9PiR0ZGF0YSkKCQkJewoJCQkJJG9uZSA9IG5ldyBzdGRDbGFzcygpOwoJCQkJJG9uZS0+cm93Y2xhc3MgPSAkcm93Y2xhc3M7CgkJCQlpZigkcG1vZCkKCQkJCXsKCQkJCQkkb25lLT5oaWRkZW4gPSAkbW9kLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ3RlbV90ZWFtaWRbXScsJHRpZCkuCgkJCQkJCSRtb2QtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwndGVtX2NvbnRhY3RhbGxbXScsJHRkYXRhWydjb250YWN0YWxsJ10pOwoJCQkJCSRvbmUtPm9yZGVyID0gJHRkYXRhWydkaXNwbGF5b3JkZXInXTsKCQkJCQkkdG1wID0gJG1vZC0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwndGVtX25hbWVbXScsJHRkYXRhWyduYW1lJ10sMjAsNjQpOwoJCQkJCSRvbmUtPm5hbWUgPSBwcmVnX3JlcGxhY2UoJGZpbmRzLGFycmF5KCdjbGFzcz0idGVtX25hbWUgJDEiJywnJyksJHRtcCk7Ly9mYWlscyBpZiBiYWNrcmVmIGZpcnN0IQoJCQkJCSR0bXAgPSAkbW9kLT5DcmVhdGVJbnB1dFRleHQoJGlkLCd0ZW1fc2VlZFtdJywkdGRhdGFbJ3NlZWRpbmcnXSwzLDMpOwoJCQkJCSRvbmUtPnNlZWQgPSBwcmVnX3JlcGxhY2UoJGZpbmRzLGFycmF5KCdjbGFzcz0idGVtX3NlZWQgJDEiJywnJyksJHRtcCk7CgkJCQkJJHRtcCA9ICRtb2QtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ3RlbV9jb250YWN0W10nLCR0ZGF0YVsnY29udGFjdCddLDMwLDY0KTsKCQkJCQkkb25lLT5jb250YWN0ID0gcHJlZ19yZXBsYWNlKCRmaW5kcyxhcnJheSgnY2xhc3M9InRlbV9jb250YWN0ICQxIicsJycpLCR0bXApOwoJCQkJCS8vbmVlZCBpbnB1dC1vYmplY3RzIHRoYXQgbG9vayBsaWtlIHBhZ2UtbGluaywgdG8gZ2V0IGFsbCBmb3JtIHBhcmFtZXRlcnMgdXBvbiBhY3RpdmF0aW9uCgkJCQkJaWYoJGluZHggPiAxKQoJCQkJCQkkb25lLT51cGxpbmsgPSAkbW9kLT5DcmVhdGVJbnB1dExpbmtzKCRpZCwnbW92ZXVwWycuJHRpZC4nXScsJ2Fycm93LXUuZ2lmJyxGQUxTRSwKCQkJCQkJCSR1cHRleHQsJ29uY2xpY2s9InNldF9wYXJhbXModGhpcyk7IicpOwoJCQkJCWVsc2UKCQkJCQkJJG9uZS0+dXBsaW5rID0gJyc7CgkJCQkJaWYoJGluZHggPCAkdGNvdW50KQoJCQkJCQkkb25lLT5kb3dubGluayA9ICRtb2QtPkNyZWF0ZUlucHV0TGlua3MoJGlkLCdtb3ZlZG93blsnLiR0aWQuJ10nLCdhcnJvdy1kLmdpZicsRkFMU0UsCgkJCQkJCQkkZG93bnRleHQsJ29uY2xpY2s9InNldF9wYXJhbXModGhpcyk7IicpOwoJCQkJCWVsc2UKCQkJCQkJJG9uZS0+ZG93bmxpbmsgPSAnJzsKCQkJCQkkaW5keCsrOwoJCQkJCSRvbmUtPmVkaXRsaW5rID0gJG1vZC0+Q3JlYXRlSW5wdXRMaW5rcygkaWQsJ2VkaXRbJy4kdGlkLiddJywnZWRpdC5naWYnLEZBTFNFLAoJCQkJCQkkbW9kLT5MYW5nKCdlZGl0JyksJ29uY2xpY2s9InNldF9wYXJhbXModGhpcyk7IicpOwoJCQkJCSRvbmUtPmRlbGV0ZWxpbmsgPSAkbW9kLT5DcmVhdGVJbnB1dExpbmtzKCRpZCwnZGVsZXRlX3RlYW1bJy4kdGlkLiddJywnZGVsZXRlLmdpZicsRkFMU0UsCgkJCQkJCSRtb2QtPkxhbmcoJ2RlbGV0ZScpKTsgLy9jb25maXJtYXRpb24gdmlhIG1vZGFsIGRpYWxvZwoJCQkJCSRvbmUtPnNlbGVjdGVkID0gJG1vZC0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsJ3RzZWxbXScsJHRpZCwtMSk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJG9uZS0+b3JkZXIgPSAkdGRhdGFbJ2Rpc3BsYXlvcmRlciddOwoJCQkJCSRvbmUtPm5hbWUgPSAkdGRhdGFbJ25hbWUnXTsKCQkJCQkkb25lLT5zZWVkID0gJHRkYXRhWydzZWVkaW5nJ107CgkJCQkJJG9uZS0+Y29udGFjdCA9ICR0ZGF0YVsnY29udGFjdCddOwoJCQkJfQoKCQkJCSR0ZWFtc1tdID0gJG9uZTsKCQkJCSgkcm93Y2xhc3M9PSdyb3cxJz8kcm93Y2xhc3M9J3JvdzInOiRyb3djbGFzcz0ncm93MScpOwoJCQl9CgkJCSRzbWFydHktPmFzc2lnbigndGVhbXMnLCR0ZWFtcyk7CgoJCQlpZigkcG1vZCkKCQkJewoJCQkJaWYoJHRjb3VudD4xKQoJCQkJewoJCQkJCSRqc2xvYWRzW10gPSA8PDwgRU9TCiAkKCcjdG10X3BsYXllcnMnKS5hZGRDbGFzcygndGFibGVfZHJhZycpLnRhYmxlRG5EKHsKCWRyYWdDbGFzczogJ3JvdzFob3ZlcicsCglvbkRyb3A6IGZ1bmN0aW9uKHRhYmxlLCBkcm9wcm93cykgewoJCXZhciBvZGQgPSB0cnVlOwoJCXZhciBvZGRjbGFzcyA9ICdyb3cxJzsKCQl2YXIgZXZlbmNsYXNzID0gJ3JvdzInOwoJCXZhciBkcm9wcm93ID0gJChkcm9wcm93cylbMF07CgkJJCh0YWJsZSkuZmluZCgndGJvZHkgdHInKS5lYWNoKGZ1bmN0aW9uKCkgewoJCQl2YXIgbmFtZSA9IG9kZCA/IG9kZGNsYXNzIDogZXZlbmNsYXNzOwoJCQlpZiAodGhpcyA9PT0gZHJvcHJvdykgewoJCQkJbmFtZSA9IG5hbWUrJ2hvdmVyJzsKCQkJfQoJCQkkKHRoaXMpLnJlbW92ZUNsYXNzKCkuYWRkQ2xhc3MobmFtZSk7CgkJCW9kZCA9ICFvZGQ7CgkJfSk7CgkJaWYgKHR5cGVvZiBhamF4RGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgJC5pc0Z1bmN0aW9uKGFqYXhEYXRhKSkgewkJCgkJCXZhciBhamF4ZGF0YSA9IGFqYXhEYXRhKGRyb3Byb3csZHJvcHJvd3MubGVuZ3RoKTsKCQkJaWYgKGFqYXhkYXRhKSB7CgkJCQkkLmFqYXgoewoJCQkJIHVybDogJ21vZHVsZWludGVyZmFjZS5waHAnLAoJCQkJIHR5cGU6ICdQT1NUJywKCQkJCSBkYXRhOiBhamF4ZGF0YSwKCQkJCSBkYXRhVHlwZTogJ3RleHQnLAoJCQkJIHN1Y2Nlc3M6IGRyb3ByZXNwb25zZQoJCQkJfSk7CgkJCX0KCQl9CgkgfQogIH0pLmZpbmQoJ3Rib2R5IHRyJykucmVtb3ZlQXR0cignb25tb3VzZW92ZXInKS5yZW1vdmVBdHRyKCdvbm1vdXNlb3V0JykubW91c2VvdmVyKGZ1bmN0aW9uKCkgewoJCXZhciBub3cgPSAkKHRoaXMpLmF0dHIoJ2NsYXNzJyk7CgkJJCh0aGlzKS5hdHRyKCdjbGFzcycsIG5vdysnaG92ZXInKTsKICB9KS5tb3VzZW91dChmdW5jdGlvbigpIHsKCQl2YXIgbm93ID0gJCh0aGlzKS5hdHRyKCdjbGFzcycpOwoJCXZhciB0byA9IG5vdy5pbmRleE9mKCdob3ZlcicpOwoJCSQodGhpcykuYXR0cignY2xhc3MnLCBub3cuc3Vic3RyaW5nKDAsdG8pKTsKICB9KTsKICQoJy51cGRvd24nKS5oaWRlKCk7CiAkKCcuZG5kaGVscCcpLmNzcygnZGlzcGxheScsJ2Jsb2NrJyk7CgpFT1M7CgkJCQl9CgkJCQkkanNsb2Fkc1tdID0gPDw8IEVPUwogJCgnI3RtdF9wbGF5ZXJzJykuZmluZCgnLnRlbV9kZWxldGUnKS5jaGlsZHJlbigpLm1vZGFsY29uZmlybSh7CiAgb3ZlcmxheUlEOiAnY29uZmlybScsCiAgcHJlU2hvdzogZnVuY3Rpb24oZCl7CgkgdmFyIHRlYW1uYW1lID0gXCQodGhpcykuY2xvc2VzdCgndHInKS5maW5kKCcudGVtX25hbWUnKS5hdHRyKCd2YWx1ZScpOwoJIHZhciBwYXJhID0gZC5jaGlsZHJlbigncDpmaXJzdCcpWzBdOwoJIHBhcmEuaW5uZXJIVE1MID0gJ3skbW9kLT5MYW5nKCdjb25maXJtX2RlbGV0ZScsJyVzJyl9Jy5yZXBsYWNlKCclcycsdGVhbW5hbWUpOwogIH0sCiAgb25Db25maXJtOiBmdW5jdGlvbigpewoJIHNldF90YWIoKTsKCSAkKCcjeyRpZH1yZWFsX2FjdGlvbicpLnZhbCh0aGlzLm5hbWUpOwoJIHJldHVybiB0cnVlOwogIH0KIH0pOwoKRU9TOwoJCQl9CgkJfQoJCWVsc2UgLy9ubyB0ZWFtLWRhdGEKCQl7CgkJCSR0Y291bnQgPSAwOwoJCQkkc21hcnR5LT5hc3NpZ24oJ25vdGVhbXMnLCRtb2QtPkxhbmcoJ2luZm9fbm90ZWFtJykpOwoJCX0KCQkkc21hcnR5LT5hc3NpZ24oJ3RlYW1jb3VudCcsJHRjb3VudCk7CgoJCSR0ID0gJyc7CgkJaWYoJHBtb2QpCgkJewoJCQkkdGhpcy0+U3BhcmVTbG90KCRkYXRhLT5icmFja2V0X2lkLCgkZGF0YS0+dHlwZSAhPSBUb3VybmV5OjpSUlRZUEUpKTsKCQkJaWYoJHRoaXMtPnNwYXJlKQoJCQl7CgkJCQkkbGlua3RleHQgPSAkbW9kLT5MYW5nKCd0aXRsZV9hZGQnLHN0cnRvbG93ZXIoJHRlYW10aXRsZSkpOwoJCQkJLy9uZWVkIGlucHV0LW9iamVjdCB0aGF0IGxvb2tzIGxpa2UgcGFnZS1saW5rLCB0byBnZXQgYWxsIGZvcm0gcGFyYW1ldGVycyB1cG9uIGFjdGl2YXRpb24KCQkJCSR0ID0gJG1vZC0+Q3JlYXRlSW5wdXRMaW5rcygkaWQsJ2FkZHRlYW0nLCduZXdvYmplY3QuZ2lmJyxUUlVFLAoJCQkJCSRsaW5rdGV4dCwnb25jbGljaz0ic2V0X3BhcmFtcyh0aGlzKTsiJyk7CgkJCX0KCQl9CgkJJHNtYXJ0eS0+YXNzaWduKCdhZGR0ZWFtJywkdCk7CgoJCWlmKCR0Y291bnQpCgkJewoJCQlpZigkdGNvdW50ID4gMSkKCQkJewoJCQkJJGpzZnVuY3NbXSA9IDw8PCBFT1MKZnVuY3Rpb24gc2VsZWN0X2FsbF90ZWFtcygpIHsKIHZhciBzdCA9ICQoJyN0ZWFtc2VsJykuYXR0cignY2hlY2tlZCcpOwogaWYoIXN0KSBzdCA9IGZhbHNlOwogJCgnI3RtdF9wbGF5ZXJzID4gdGJvZHknKS5maW5kKCdpbnB1dFt0eXBlPSJjaGVja2JveCJdJykuYXR0cignY2hlY2tlZCcsc3QpOwp9CgpFT1M7CgkJCQkkc21hcnR5LT5hc3NpZ24oJ3NlbHRlYW1zJywkbW9kLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwndCcsRkFMU0UsLTEsCgkJCQkJJ2lkPSJ0ZWFtc2VsIiBvbmNsaWNrPSJzZWxlY3RfYWxsX3RlYW1zKCk7IicpKTsKCQkJfQoJCQllbHNlCgkJCQkkc21hcnR5LT5hc3NpZ24oJ3NlbHRlYW1zJywnJyk7CgoJCQkkanNmdW5jc1tdID0gPDw8IEVPUwpmdW5jdGlvbiB0ZWFtX2NvdW50KCkgewogdmFyIGNiID0gJCgnI3RtdF9wbGF5ZXJzID4gdGJvZHknKS5maW5kKCdpbnB1dDpjaGVja2VkJyk7CiByZXR1cm4gY2IubGVuZ3RoOwp9CmZ1bmN0aW9uIHRlYW1zX3NlbGVjdGVkKGV2LGJ0bikgewogaWYodGVhbV9jb3VudCgpID4gMCkgewogIHNldF9wYXJhbXMoYnRuKTsKICByZXR1cm4gdHJ1ZTsKIH0gZWxzZSB7CiAgZXZlbnRDYW5jZWwoZXYpOwogIHJldHVybiBmYWxzZTsKIH0KfQoKRU9TOwoKCQkJaWYoJHBtb2QpCgkJCXsKCQkJCWlmKCRkYXRhLT5tYXRjaGVzIHx8ICEkdGhpcy0+YW55KSAvL25vdCBmaW5pc2hlZAoJCQkJewoJCQkJCSRzbWFydHktPmFzc2lnbignZG5kaGVscCcsJG1vZC0+TGFuZygnaGVscF9kbmQnKSk7CgkJCQkJJHNtYXJ0eS0+YXNzaWduKCd1cGRhdGUxJywkbW9kLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ3VwZGF0ZVsnLiRpZC4ndGVhbXNdJywkbW9kLT5MYW5nKCd1cGRhdGUnKSwKCQkJCQkJJ3RpdGxlPSInLiRtb2QtPkxhbmcoJ3VwZGF0ZV90aXAnKS4nIiBvbmNsaWNrPSJyZXR1cm4gdGVhbXNfc2VsZWN0ZWQoZXZlbnQsdGhpcyk7IicpKTsKCQkJCQkkc21hcnR5LT5hc3NpZ24oJ2RlbGV0ZScsJG1vZC0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdkZWx0ZWFtcycsJG1vZC0+TGFuZygnZGVsZXRlJyksCgkJCQkJCSd0aXRsZT0iJy4kbW9kLT5MYW5nKCdkZWxldGVfdGlwJykuJyInKSk7CgkJCQkJJHQgPSAoJGlzdGVhbSkgPyAkbW9kLT5MYW5nKCdzZWxfdGVhbXMnKSA6ICRtb2QtPkxhbmcoJ3NlbF9wbGF5ZXJzJyk7CgkJCQkJJHQgPSAkbW9kLT5MYW5nKCdjb25maXJtX2RlbGV0ZScsJHQpOwoJCQkJCSRqc2xvYWRzW10gPSA8PDwgRU9TCiAkKCcjeyRpZH1kZWx0ZWFtcycpLm1vZGFsY29uZmlybSh7CiAgb3ZlcmxheUlEOiAnY29uZmlybScsCiAgZG9DaGVjazogZnVuY3Rpb24oKXsKCSByZXR1cm4gKHRlYW1fY291bnQoKSA+IDApOwogIH0sCiAgcHJlU2hvdzogZnVuY3Rpb24oZCl7CgkgdmFyIHBhcmEgPSBkLmNoaWxkcmVuKCdwOmZpcnN0JylbMF07CgkgcGFyYS5pbm5lckhUTUwgPSAneyR0fSc7CiAgfSwKICBvbkNvbmZpcm06IGZ1bmN0aW9uKCl7Cgkgc2V0X3RhYigpOwoJICQoJyN7JGlkfXJlYWxfYWN0aW9uJykudmFsKHRoaXMubmFtZSk7CgkgcmV0dXJuIHRydWU7CiAgfQogfSk7CgpFT1M7CgkJCQl9CgkJCQllbHNlIC8vZmluaXNoZWQKCQkJCXsKCQkJCQkkc21hcnR5LT5hc3NpZ24oJ2RuZGhlbHAnLCcnKTsKCQkJCQkkc21hcnR5LT5hc3NpZ24oJ3VwZGF0ZTEnLCcnKTsKCQkJCQkkc21hcnR5LT5hc3NpZ24oJ2RlbGV0ZScsJycpOwoJCQkJfQoJCQl9CgkJCSRzbWFydHktPmFzc2lnbignZXhwb3J0JywkbW9kLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ2V4cG9ydCcsJG1vZC0+TGFuZygnZXhwb3J0JyksCgkJCQkndGl0bGU9IicuJG1vZC0+TGFuZygnZXhwb3J0X3RpcCcpLiciIG9uY2xpY2s9InJldHVybiB0ZWFtc19zZWxlY3RlZChldmVudCx0aGlzKTsiJykpOwoJCX0KCQlpZigkcG1vZCAmJiAoJGRhdGEtPm1hdGNoZXMgfHwgISR0aGlzLT5hbnkpKSAvL25vdCBmaW5pc2hlZAoJCQkkdCA9ICRtb2QtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnaW1wb3J0X3RlYW0nLCRtb2QtPkxhbmcoJ2ltcG9ydCcpLAoJCQkJJ3RpdGxlPSInLiRtb2QtPkxhbmcoJ2ltcG9ydF90aXAnKS4nIiBvbmNsaWNrPSJzZXRfcGFyYW1zKHRoaXMpOyInKTsKCQllbHNlCgkJCSR0ID0gJyc7CgkJJHNtYXJ0eS0+YXNzaWduKCdpbXBvcnQnLCR0KTsKCi8vPT09PT09PT09PSBNQVRDSEVTID09PT09PT09PT09CgoJCWlmKGVtcHR5KCRkYXRhLT5tYXRjaHZpZXcpKQoJCQkkZGF0YS0+bWF0Y2h2aWV3ID0gJ2FjdHVhbCc7CgkJJHBsYW4gPSAoJGRhdGEtPm1hdGNodmlldyAhPSAnYWN0dWFsJyk7CgkJLy90aGVzZSBsYWJlbHMgYXJlIHNoYXJlZCB3aXRoIHJlc3VsdHMgdGFiLCBhbmQgbWF5IGJlIHVzZWQgZm9yIGhpc3RvcnktdmlldyB3aGVuIGFsbCBtYXRjaGVzIGZpbmlzaGVkIGkuZS4gbm9uZSBkaXNwbGF5ZWQgbm93CgkJJHNtYXJ0eS0+YXNzaWduKCdzY2hlZHVsZWR0aXRsZScsJG1vZC0+TGFuZygnc2NoZWR1bGVkJykpOwoJCSRzbWFydHktPmFzc2lnbigncGxhY2V0aXRsZScsJG1vZC0+TGFuZygndGl0bGVfdmVudWUnKSk7CgkJJHNtYXJ0eS0+YXNzaWduKCdzdGF0dXN0aXRsZScsJG1vZC0+TGFuZygndGl0bGVfc3RhdHVzJykpOwoKCQlpZigkZGF0YS0+bWF0Y2hlcykKCQl7CgkJCWlmKCRwbGFuKQoJCQl7CgkJCQlzd2l0Y2ggKCRkYXRhLT50eXBlKQoJCQkJewoJCQkJIGNhc2UgVG91cm5leTo6UlJUWVBFOgoJCQkJCSRhbm9uID0gJG1vZC0+TGFuZygnYW5vbm90aGVyJyk7CgkJCQkJYnJlYWs7CgkJCQkgY2FzZSBUb3VybmV5OjpERVRZUEU6CgkJCQkgCSRybmQgPSBuZXcgdG10Um91bmRzREUoKTsKCQkJCQkvL3BhcnRpYWwgYnJhY2tldCBkYXRhIGZvciBkb3duc3RyZWFtIHRvIHVzZSB3aGVuIG5hbWluZwoJCQkJCSRiZGF0YSA9IGFycmF5KAoJCQkJCSAnZmluYWwnPT4kZGF0YS0+ZmluYWwsCgkJCQkJICdzZW1pJz0+JGRhdGEtPnNlbWksCgkJCQkJICdxdWFydGVyJz0+JGRhdGEtPnF1YXJ0ZXIsCgkJCQkJICdlaWdodGgnPT4kZGF0YS0+ZWlnaHRoLAoJCQkJCSAncm91bmRuYW1lJz0+JGRhdGEtPnJvdW5kbmFtZSwKCQkJCQkgJ2J5ZSc9PiRkYXRhLT5ieWUKCQkJCQkpOwoJCQkJIAkkdGMgPSBjb3VudCgkZGF0YS0+dGVhbXMpOwoJCQkJIAlicmVhazsKCQkJCSBkZWZhdWx0OgoJCQkJIAkkcm5kID0gbmV3IHRtdFJvdW5kc0tPKCk7CgkJCQkgCWJyZWFrOwoJCQkJfQoJCQl9CgkJCWlmKCRwbW9kKQoJCQl7CgkJCQkkZmlybWVkID0gJG1vZC0+TGFuZygnY29uZmlybWVkJyk7CgkJCQkkdG9sZCA9ICRtb2QtPkxhbmcoJ25vdGlmaWVkJyk7CgkJCQkkYXNrZWQgPSAkbW9kLT5MYW5nKCdhc2tlZCcpOwoJCQkJJGl0ZW1zID0gYXJyYXkoCgkJCQkJJG1vZC0+TGFuZygnbm90eWV0Jyk9PlRvdXJuZXk6Ok5PVFlFVCwKCQkJCQkkbW9kLT5MYW5nKCdwb3NzaWJsZScpPT5Ub3VybmV5OjpTT0ZULAoJCQkJCSRmaXJtZWQ9PlRvdXJuZXk6OkZJUk0pOwoJCQkJJGdyb3VwID0gJG1vZC0+Q3JlYXRlSW5wdXRSYWRpb0dyb3VwKCRpZCwnbWF0X3N0YXR1cycsJGl0ZW1zLCcnLCcnLCd8Jyk7CgkJCQkkY2hvaWNlcyA9IGV4cGxvZGUoJ3wnLCRncm91cCk7CgkJCX0KCgkJCSRyb3djbGFzcyA9ICdyb3cxJzsKCQkJJG1hdGNoZXMgPSBhcnJheSgpOwoJCQlmb3JlYWNoKCRkYXRhLT5tYXRjaGVzIGFzICRtaWQ9PiRtZGF0YSkKCQkJewoJCQkJJG9uZSA9IG5ldyBzdGRDbGFzcygpOwoJCQkJJG9uZS0+cm93Y2xhc3MgPSAkcm93Y2xhc3M7CgkJCQlpZigkcGxhbikKCQkJCXsKCQkJCQkkb25lLT5taWQgPSAkbWlkOwoJCQkJCSRwcmV2ID0gRkFMU0U7CgkJCQkJaWYoJG1kYXRhWyd0ZWFtQSddICE9IE5VTEwpCgkJCQkJewoJCQkJCQkkb25lLT50ZWFtQSA9ICRtb2QtPlRlYW1OYW1lKCRtZGF0YVsndGVhbUEnXSxGQUxTRSk7CgkJCQkJCWlmKCEkb25lLT50ZWFtQSkKCQkJCQkJCSRvbmUtPnRlYW1BID0gJGRhdGEtPmJ5ZTsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJc3dpdGNoICgkZGF0YS0+dHlwZSkKCQkJCQkJewoJCQkJCQkgY2FzZSBUb3VybmV5OjpSUlRZUEU6CgkJCQkJCQkkb25lLT50ZWFtQSA9ICRhbm9uOwoJCQkJCQkJYnJlYWs7CgkJCQkJCSBjYXNlIFRvdXJuZXk6OkRFVFlQRToKCQkJCQkJCSRsZXZlbCA9ICRybmQtPk1hdGNoTGV2ZWwoJHRjLCRkYXRhLT5tYXRjaGVzLCRtaWQpOwoJCQkJCQkJJG9uZS0+dGVhbUEgPSAkcm5kLT5NYXRjaFRlYW1JRF9UZWFtKCRtb2QsJGJkYXRhLCR0YywkZGF0YS0+bWF0Y2hlcywkbWlkLCRsZXZlbCwkbWRhdGFbJ3RlYW1CJ10pOyAvL3RlYW0gaWQgbWF5IGJlIE5VTEwgb3IgLTEKCQkJCQkJIAlicmVhazsKCQkJCQkJIGRlZmF1bHQ6CgkJCQkJCQkkb25lLT50ZWFtQSA9ICRybmQtPk1hdGNoVGVhbUlEX01pZCgkbW9kLCRkYXRhLT5tYXRjaGVzLCRtaWQpOwoJCQkJCQkgCWJyZWFrOwoJCQkJCQl9CgkJCQkJfQoKCQkJCQlpZigkbWRhdGFbJ3RlYW1CJ10gIT0gTlVMTCkKCQkJCQl7CgkJCQkJCSRvbmUtPnRlYW1CID0gJG1vZC0+VGVhbU5hbWUoJG1kYXRhWyd0ZWFtQiddLEZBTFNFKTsKCQkJCQkJaWYoISRvbmUtPnRlYW1CKQoJCQkJCQl7CgkJCQkJCQlpZigkb25lLT50ZWFtQSAhPSAkZGF0YS0+YnllKQoJCQkJCQkJCSRvbmUtPnRlYW1CID0gJGRhdGEtPmJ5ZTsKCQkJCQkJCWVsc2UKCQkJCQkJCXsKCQkJCQkJCQkkb25lLT50ZWFtQSA9ICRtb2QtPkxhbmcoJ25vbWF0Y2gnKTsKCQkJCQkJCQkkb25lLT50ZWFtQiA9ICcnOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCXN3aXRjaCAoJGRhdGEtPnR5cGUpCgkJCQkJCXsKCQkJCQkJIGNhc2UgVG91cm5leTo6UlJUWVBFOgoJCQkJCQkJJG9uZS0+dGVhbUIgPSAkYW5vbjsKCQkJCQkJCWJyZWFrOwoJCQkJCQkgY2FzZSBUb3VybmV5OjpERVRZUEU6CgkJCQkJCQkkbGV2ZWwgPSAkcm5kLT5NYXRjaExldmVsKCR0YywkZGF0YS0+bWF0Y2hlcywkbWlkKTsKCQkJCQkJCWlmKCRtZGF0YVsndGVhbUEnXSkKCQkJCQkJCQkkbmFtZSA9ICRybmQtPk1hdGNoVGVhbUlEX1RlYW0oJG1vZCwkYmRhdGEsJHRjLCRkYXRhLT5tYXRjaGVzLCRtaWQsJGxldmVsLCRtZGF0YVsndGVhbUEnXSk7CgkJCQkJCQllbHNlCgkJCQkJCQl7CgkJCQkJCQkJJGV4Y2wgPSBrZXkoJGRhdGEtPm1hdGNoZXMpOwoJCQkJCQkJCWlmKCRleGNsKQoJCQkJCQkJCQkkZXhjbC0tOwoJCQkJCQkJCSRuYW1lID0gJHJuZC0+TWF0Y2hUZWFtSURfTWlkKCRtb2QsJGJkYXRhLCR0YywkZGF0YS0+bWF0Y2hlcywkbWlkLCRsZXZlbCwkZXhjbCk7CgkJCQkJCQl9CgkJCQkJCQlpZigkbmFtZSAhPSAkZGF0YS0+YnllIHx8ICRvbmUtPnRlYW1BICE9ICRkYXRhLT5ieWUpCgkJCQkJCQkJJG9uZS0+dGVhbUIgPSAkbmFtZTsKCQkJCQkJCWVsc2UgLy9kb24ndCBkaXNwbGF5IDIgYnllcwoJCQkJCQkJewoJCQkJCQkJCSRvbmUtPnRlYW1BID0gJG1vZC0+TGFuZygnbm9tYXRjaCcpOwoJCQkJCQkJCSRvbmUtPnRlYW1CID0gJyc7CgkJCQkJCQl9CgkJCQkJCSAJYnJlYWs7CgkJCQkJCSBkZWZhdWx0OgoJCQkJCQkgCSRleGNsID0gKCRtZGF0YVsndGVhbUEnXSkgPyAoaW50KSgkbWRhdGFbJ3RlYW1BJ10pIDoga2V5KCRkYXRhLT5tYXRjaGVzKS0xOwoJCQkJCQkJJG9uZS0+dGVhbUIgPSAkcm5kLT5NYXRjaFRlYW1JRF9NaWQoJG1vZCwkZGF0YS0+bWF0Y2hlcywkbWlkLCRleGNsKTsKCQkJCQkJIAlicmVhazsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkb25lLT50ZWFtQSA9ICRtb2QtPlRlYW1OYW1lKCRtZGF0YVsndGVhbUEnXSk7CgkJCQkJJG9uZS0+dGVhbUIgPSAkbW9kLT5UZWFtTmFtZSgkbWRhdGFbJ3RlYW1CJ10pOwoJCQkJfQoKCQkJCWlmKCRwbW9kKQoJCQkJewoJCQkJCSR0bXAgPSAkbW9kLT5DcmVhdGVJbnB1dFRleHQoJGlkLCdtYXRfcGxheXdoZW5bXScsJG1kYXRhWydwbGF5d2hlbiddLDIwLDQ4KTsKCQkJCQkkcmVwbHMgPSBhcnJheSgnY2xhc3M9Im1hdF9wbGF5d2hlbiAkMSInLCcnKTsKCQkJCQkkb25lLT5zY2hlZHVsZSA9IHByZWdfcmVwbGFjZSgkZmluZHMsJHJlcGxzLCR0bXApOwoJCQkJCSR0bXAgPSAkbW9kLT5DcmVhdGVJbnB1dFRleHQoJGlkLCdtYXRfcGxheXdoZXJlW10nLCRtZGF0YVsncGxhY2UnXSwyMCw2NCk7CgkJCQkJJHJlcGxzID0gYXJyYXkoJ2NsYXNzPSJtYXRfcGxheXdoZXJlICQxIicsJycpOwoJCQkJCSRvbmUtPnBsYWNlID0gcHJlZ19yZXBsYWNlKCRmaW5kcywkcmVwbHMsJHRtcCk7CgkJCQkJJG9uZS0+aGlkZGVuID0gJG1vZC0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCdtYXRfdGVhbUFbXScsJG1kYXRhWyd0ZWFtQSddKS4KCQkJCQkJJG1vZC0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCdtYXRfdGVhbUJbXScsJG1kYXRhWyd0ZWFtQiddKTsKCQkJCQlpZigkbWRhdGFbJ3N0YXR1cyddID49IFRvdXJuZXk6Ok1SRVMpCgkJCQkJewoJCQkJCQkvL2NvbXBsZXRlZCwgbm8gZ29pbmcgYmFjawoJCQkJCQkkb25lLT5oaWRkZW4gLj0gJG1vZC0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCdtYXRfc3RhdHVzWycuJG1pZC4nXScsJG1kYXRhWydzdGF0dXMnXSk7CgkJCQkJCWlmKCRtZGF0YVsndGVhbUEnXSA9PSAtMSB8fCAkbWRhdGFbJ3RlYW1CJ10gPT0gLTEpCgkJCQkJCQkkb25lLT5idG4xID0gJyc7CgkJCQkJCWVsc2UKCQkJCQkJCSRvbmUtPmJ0bjEgPSAkbW9kLT5MYW5nKCdzdGF0dXNfY29tcGxldGUnKTsKCQkJCQkJJG9uZS0+YnRuMiA9ICcnOwoJCQkJCQkkb25lLT5idG4zID0gJyc7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCSRyID0gJ21hdF9zdGF0dXNbJy4kbWlkLiddIic7IC8vdW5pcXVlIG5hbWUgZm9yIGVhY2ggcmFkaW8tZ3JvdXAsYWxzbyByZXR1cm5zIG1hdGNoLWlkCgkJCQkJCSRvbmUtPmJ0bjEgPSBzdHJfcmVwbGFjZSgnbWF0X3N0YXR1cyInLCRyLCRjaG9pY2VzWzBdKTsKCQkJCQkJJG9uZS0+YnRuMiA9IHN0cl9yZXBsYWNlKCdtYXRfc3RhdHVzIicsJHIsJGNob2ljZXNbMV0pOwoJCQkJCQkkb25lLT5idG4zID0gc3RyX3JlcGxhY2UoJ21hdF9zdGF0dXMiJywkciwkY2hvaWNlc1syXSk7CgkJCQkJCS8vdGFpbG9yIGNvbnRlbnQKCQkJCQkJc3dpdGNoICgoaW50KSRtZGF0YVsnc3RhdHVzJ10pCgkJCQkJCXsKCQkJCQkJIGNhc2UgVG91cm5leTo6VE9MRDoKCQkJCQkJCSRvbmUtPmJ0bjMgPSBzdHJfcmVwbGFjZShhcnJheSgkZmlybWVkLCd2YWx1ZT0iJy5Ub3VybmV5OjpGSVJNLiciJyksYXJyYXkoJHRvbGQsJ3ZhbHVlPSInLlRvdXJuZXk6OlRPTEQuJyInKSwkb25lLT5idG4zKTsKCQkJCQkJCWJyZWFrOwoJCQkJCQkgY2FzZSBUb3VybmV5OjpBU0tFRDoKCQkJCQkJCSRvbmUtPmJ0bjMgPSBzdHJfcmVwbGFjZShhcnJheSgkZmlybWVkLCd2YWx1ZT0iJy5Ub3VybmV5OjpGSVJNLiciJyksYXJyYXkoJGFza2VkLCd2YWx1ZT0iJy5Ub3VybmV5OjpBU0tFRC4nIicpLCRvbmUtPmJ0bjMpOwoJCQkJCQkJYnJlYWs7CgkJCQkJCSBjYXNlIFRvdXJuZXk6OkFTT0ZUOgoJCQkJCQkgY2FzZSBUb3VybmV5OjpBRklSTToKCQkJCQkJCSRvbmUtPmJ0bjIgPSBzdHJfcmVwbGFjZSgndmFsdWU9IicuVG91cm5leTo6U09GVCwndmFsdWU9IicuVG91cm5leTo6QVNPRlQsJG9uZS0+YnRuMik7CgkJCQkJCQkkb25lLT5idG4zID0gc3RyX3JlcGxhY2UoJ3ZhbHVlPSInLlRvdXJuZXk6OkZJUk0sJ3ZhbHVlPSInLlRvdXJuZXk6OkFGSVJNLCRvbmUtPmJ0bjMpOwoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQkJLy9zZWxlY3QgcmVsZXZhbnQgcmFkaW8gaXRlbQoJCQkJCQlzd2l0Y2goKGludCkkbWRhdGFbJ3N0YXR1cyddKQoJCQkJCQl7CgkJCQkJCSBjYXNlIFRvdXJuZXk6OlNPRlQ6CgkJCQkJCSBjYXNlIFRvdXJuZXk6OkFTT0ZUOgoJCQkJCQkJJG9uZS0+YnRuMiA9IHN0cl9yZXBsYWNlKCcgLz4nLCcgY2hlY2tlZD0iY2hlY2tlZCIgLz4nLCRvbmUtPmJ0bjIpOwoJCQkJCQkJYnJlYWs7CgkJCQkJCSBjYXNlIFRvdXJuZXk6OkZJUk06CgkJCQkJCSBjYXNlIFRvdXJuZXk6OlRPTEQ6CgkgCQkJCQkgY2FzZSBUb3VybmV5OjpBU0tFRDoKCQkJCQkJIGNhc2UgVG91cm5leTo6QUZJUk06CgkJCQkJCQkkb25lLT5idG4zID0gc3RyX3JlcGxhY2UoJyAvPicsJyBjaGVja2VkPSJjaGVja2VkIiAvPicsJG9uZS0+YnRuMyk7CgkJCQkJCQlicmVhazsKCQkJCQkJIGRlZmF1bHQ6CgkJCQkJCQkkb25lLT5idG4xID0gc3RyX3JlcGxhY2UoJyAvPicsJyBjaGVja2VkPSJjaGVja2VkIiAvPicsJG9uZS0+YnRuMSk7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCX0KCQkJCQkkb25lLT5zZWxlY3RlZCA9ICRtb2QtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCdtc2VsW10nLCRtaWQsLTEpOwoJCQkJfQoJCQkJZWxzZSAvL25vIGNoYW5nZSBhbGxvd2VkCgkJCQl7CgkJCQkJJG9uZS0+c2NoZWR1bGUgPSAkbWRhdGFbJ3BsYXl3aGVuJ107CgkJCQkJJG9uZS0+cGxhY2UgPSAkbWRhdGFbJ3BsYWNlJ107CgkJCQkJJG9uZS0+YnRuMSA9ICcnOwoJCQkJCSRvbmUtPmJ0bjIgPSAnJzsKCQkJCQlzd2l0Y2goaW50dmFsKCRtZGF0YVsnc3RhdHVzJ10pKQoJCQkJCXsKCQkJCQkgY2FzZSBUb3VybmV5OjpTT0ZUOgoJCQkJCSBjYXNlIFRvdXJuZXk6OkFTT0ZUOgoJCQkJCQkkb25lLT5idG4zID0gJG1vZC0+TGFuZygncG9zc2libGUnKTsKCQkJCQkJYnJlYWs7CgkJCQkJIGNhc2UgVG91cm5leTo6RklSTToKCQkJCQkgY2FzZSBUb3VybmV5OjpBRklSTToKCQkJCQkJJG9uZS0+YnRuMyA9ICRtb2QtPkxhbmcoJ2NvbmZpcm1lZCcpOwoJCQkJCQlicmVhazsKIAkJCQkJIGNhc2UgVG91cm5leTo6VE9MRDoKCQkJCQkJJG9uZS0+YnRuMyA9ICRtb2QtPkxhbmcoJ25vdGlmaWVkJyk7CgkJCQkJCWJyZWFrOwoJCQkJCSBjYXNlIFRvdXJuZXk6OkFTS0VEOgoJCQkJCQkkb25lLT5idG4zID0gJG1vZC0+TGFuZygnYXNrZWQnKTsKCQkJCQkJYnJlYWs7CgkJCQkJIGRlZmF1bHQ6CgkJCQkJCSRvbmUtPmJ0bjMgPSAkbW9kLT5MYW5nKCdub3R5ZXQnKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCSRvbmUtPnNlbGVjdGVkID0gJyc7CgkJCQl9CgoJCQkJJG1hdGNoZXNbXSA9ICRvbmU7CgkJCQkoJHJvd2NsYXNzPT0ncm93MSc/JHJvd2NsYXNzPSdyb3cyJzokcm93Y2xhc3M9J3JvdzEnKTsKCQkJfQoJCQkkc21hcnR5LT5hc3NpZ24oJ21hdGNoZXMnLCRtYXRjaGVzKTsKCQkJaWYoJHBtb2QgJiYgJG1hdGNoZXMpCgkJCXsKCQkJCS8vZW1iZWRkZWQgdmFycyBoZXJlIHdlcmUgZGVmaW5lZCBmb3Igc3RhcnQvZW5kLWRhdGUgY2FsZW5kYXJzCgkJCQkkanNsb2Fkc1tdID0gPDw8IEVPUwogJCgnLm1hdF9wbGF5d2hlbicpLmVhY2goZnVuY3Rpb24oKSB7CiAgICQodGhpcykuUGlrYWRheSh7CiAgICBjb250YWluZXI6IHRoaXMucGFyZW50Tm9kZSwKICAgIGZvcm1hdDogJ1lZWVktTU0tREQgSEg6bW0nLAogICAgaTE4bjogewogICAgIHByZXZpb3VzTW9udGg6ICd7JHByZXZtfScsCiAgICAgbmV4dE1vbnRoOiAneyRuZXh0bX0nLAogICAgIG1vbnRoczogW3skbW5hbWVzfV0sCiAgICAgd2Vla2RheXM6IFt7JGRuYW1lc31dLAogICAgIHdlZWtkYXlzU2hvcnQ6IFt7JHNkbmFtZXN9XQogICAgfQogICB9KTsKIH0pOwoKRU9TOwoJCQl9CgoJCQlpZigkcG1vZCAmJiBjb3VudCgkbWF0Y2hlcykgPiAxKQoJCQl7CgkJCQkkanNmdW5jc1tdID0gPDw8IEVPUwpmdW5jdGlvbiBzZWxlY3RfYWxsX21hdGNoZXMoKSB7CiB2YXIgc3QgPSAkKCcjbWF0Y2hzZWwnKS5hdHRyKCdjaGVja2VkJyk7CiBpZighc3QpIHN0ID0gZmFsc2U7CiAkKCcjdG10X21hdGNoZXMgPiB0Ym9keScpLmZpbmQoJ2lucHV0W3R5cGU9ImNoZWNrYm94Il0nKS5hdHRyKCdjaGVja2VkJyxzdCk7Cn0KCkVPUzsKCQkJCSRzbWFydHktPmFzc2lnbignc2VsbWF0Y2hlcycsJG1vZC0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsJ20nLEZBTFNFLC0xLAoJCQkJCSdpZD0ibWF0Y2hzZWwiIG9uY2xpY2s9InNlbGVjdF9hbGxfbWF0Y2hlcygpOyInKSk7CgkJCX0KCQkJZWxzZQoJCQkJJHNtYXJ0eS0+YXNzaWduKCdzZWxtYXRjaGVzJywnJyk7CgoJCQkkanNmdW5jc1tdID0gPDw8IEVPUwpmdW5jdGlvbiBtYXRjaF9jb3VudCgpIHsKIHZhciBjYiA9ICQoJyN0bXRfbWF0Y2hlcyA+IHRib2R5JykuZmluZCgnaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCcpOwogcmV0dXJuIGNiLmxlbmd0aDsKfQpmdW5jdGlvbiBtYXRjaGVzX3NlbGVjdGVkKGV2LGJ0bikgewogaWYobWF0Y2hfY291bnQoKSA+IDApIHsKICBzZXRfcGFyYW1zKGJ0bik7CiAgcmV0dXJuIHRydWU7CiB9IGVsc2UgewogIGV2ZW50Q2FuY2VsKGV2KTsKICByZXR1cm4gZmFsc2U7CiB9Cn0KCkVPUzsKCQkJaWYoJHBtb2QpCgkJCXsKCQkJCSRzbWFydHktPmFzc2lnbigndXBkYXRlMicsJG1vZC0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCd1cGRhdGVbJy4kaWQuJ21hdGNoZXNdJywkbW9kLT5MYW5nKCd1cGRhdGUnKSwKCQkJCQkndGl0bGU9IicuJG1vZC0+TGFuZygndXBkYXRlX3RpcCcpLiciIG9uY2xpY2s9InJldHVybiBtYXRjaGVzX3NlbGVjdGVkKGV2ZW50LHRoaXMpOyInKSk7CgkJCQlpZighJHRoaXMtPmNvbW1pdHRlZCkJLy9ubyBtYXRjaCBhY3R1YWxseSAnbG9ja2VkIGluJwoJCQkJewoJCQkJCSRzbWFydHktPmFzc2lnbigncmVzZXQnLCRtb2QtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwncmVzZXQnLCRtb2QtPkxhbmcoJ3Jlc2V0JyksCgkJCQkJCSd0aXRsZT0iJy4kbW9kLT5MYW5nKCdyZXNldF90aXAnKS4nIicpKTsKCQkJCQkkanNsb2Fkc1tdID0gPDw8IEVPUwogJCgnI3skaWR9cmVzZXQnKS5tb2RhbGNvbmZpcm0oewogIG92ZXJsYXlJRDogJ2NvbmZpcm0nLAogIHByZVNob3c6IGZ1bmN0aW9uKGQpewoJIHZhciBwYXJhID0gZC5jaGlsZHJlbigncDpmaXJzdCcpWzBdOwoJIHBhcmEuaW5uZXJIVE1MID0gJ3skbW9kLT5MYW5nKCdjb25maXJtX2RlbGV0ZScsJG1vZC0+TGFuZygnbWF0Y2hfZGF0YScpKX0nOwogIH0sCiAgb25Db25maXJtOiBmdW5jdGlvbigpewoJIHNldF90YWIoKTsKCSAkKCcjeyRpZH1yZWFsX2FjdGlvbicpLnZhbCh0aGlzLm5hbWUpOwoJIHJldHVybiB0cnVlOwogIH0KIH0pOwoKRU9TOwoJCQkJfQoJCQl9CgoJCQkkanNsb2Fkc1tdID0gPDw8IEVPUwogJCgnI3skaWR9bm90aWZ5LCN7JGlkfWFiYW5kb24nKS5tb2RhbGNvbmZpcm0oewogIG92ZXJsYXlJRDogJ2NvbmZpcm0nLAogIGRvQ2hlY2s6IGZ1bmN0aW9uKCl7CgkgcmV0dXJuIChtYXRjaF9jb3VudCgpID4gMCk7CiAgfSwKICBwcmVTaG93OiBmdW5jdGlvbihkKXsKCSB2YXIgcGFyYSA9IGQuY2hpbGRyZW4oJ3A6Zmlyc3QnKVswXTsKCSBwYXJhLmlubmVySFRNTCA9ICd7JG1vZC0+TGFuZygnYWxsc2F2ZWQnKX0nOwogIH0sCiAgb25Db25maXJtOiBmdW5jdGlvbigpewoJIHNldF90YWIoKTsKCSAkKCcjeyRpZH1yZWFsX2FjdGlvbicpLnZhbCh0aGlzLm5hbWUpOwoJIHJldHVybiB0cnVlOwogIH0KIH0pOwoKRU9TOwoJCQkkc21hcnR5LT5hc3NpZ24oJ25vdGlmeScsJG1vZC0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdub3RpZnknLCRtb2QtPkxhbmcoJ25vdGlmeScpLAoJCQkJJ3RpdGxlPSInLiRtb2QtPkxhbmcoJ25vdGlmeV90aXAnKS4nIicpKTsgLy9tb2RhbCBjb25maXJtIGZvciB0aGlzCgkJCSRzbWFydHktPmFzc2lnbignYWJhbmRvbicsJG1vZC0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdhYmFuZG9uJywkbW9kLT5MYW5nKCdhYmFuZG9uJyksCgkJCQkndGl0bGU9IicuJG1vZC0+TGFuZygnYWJhbmRvbl90aXAnKS4nIicpKTsgLy9tb2RhbCBjb25maXJtIGZvciB0aGlzCgkJCWlmKCRwbGFuKQoJCQl7CgkJCQkkYmRhdGEgPSBhcnJheSgKCQkJCSAnYnJhY2tldF9pZCc9PiRkYXRhLT5icmFja2V0X2lkLAoJCQkJICduYW1lJz0+JGRhdGEtPm5hbWUsCgkJCQkgJ2Rlc2NyaXB0aW9uJz0+JycsCgkJCQkgJ3R5cGUnPT4kZGF0YS0+dHlwZSwKCQkJCSAnY2hhcnRjc3MnPT4kZGF0YS0+Y2hhcnRjc3MsCgkJCQkgJ3RpbWV6b25lJz0+JGRhdGEtPnRpbWV6b25lLAoJCQkJICdhdGZvcm1hdCc9PiRkYXRhLT5hdGZvcm1hdCwKCQkJCSAnZmluYWwnPT4kZGF0YS0+ZmluYWwsCgkJCQkgJ3NlbWknPT4kZGF0YS0+c2VtaSwKCQkJCSAncXVhcnRlcic9PiRkYXRhLT5xdWFydGVyLAoJCQkJICdlaWdodGgnPT4kZGF0YS0+ZWlnaHRoLAoJCQkJICdyb3VuZG5hbWUnPT4kZGF0YS0+cm91bmRuYW1lLAoJCQkJICd2ZXJzdXMnPT4kZGF0YS0+dmVyc3VzLAoJCQkJICdkZWZlYXRlZCc9PiRkYXRhLT5kZWZlYXRlZCwKCQkJCSAndGllZCc9PiRkYXRhLT50aWVkLAoJCQkJICdieWUnPT4kZGF0YS0+YnllLAoJCQkJICdmb3JmZWl0Jz0+JGRhdGEtPmZvcmZlaXQsCgkJCQkgJ25vbWF0Y2gnPT4kZGF0YS0+bm9tYXRjaCwKCQkJCSAnY2hhcnRidWlsZCc9PlRSVUUKCQkJCSk7CgkJCQkkbHl0ID0gbmV3IHRtdExheW91dCgpOwoJCQkJbGlzdCgkY2hhcnRmaWxlLCRlcnJrZXkpID0gJGx5dC0+R2V0Q2hhcnQoJG1vZCwkYmRhdGEsJGRhdGEtPmNoYXJ0Y3NzLDIpOwoJCQkJaWYgKCRjaGFydGZpbGUpCgkJCQl7CgkJCQkJLy9ub2JvZHkgZWxzZSBzaG91bGQgc2VlIHRoaXMgY2hhcnQKCQkJCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOwoJCSAJCQkkc3FsID0gJ1VQREFURSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3RtdF9icmFja2V0cyBTRVQgY2hhcnRidWlsZD0xIFdIRVJFIGJyYWNrZXRfaWQ9Pyc7CgkJCQkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJGRhdGEtPmJyYWNrZXRfaWQpKTsKCQkJCQkkYmFzZW5hbWUgPSBiYXNlbmFtZSgkY2hhcnRmaWxlKTsKCQkJCQlsaXN0KCRoZWlnaHQsJHdpZHRoKSA9ICRseXQtPkdldENoYXJ0U2l6ZSgpOwoJCQkJCSRzbWFydHktPmFzc2lnbignaW1hZ2UnLCRtb2QtPkNyZWF0ZUltYWdlT2JqZWN0KCRjb25maWdbJ3Jvb3RfdXJsJ10uJy90bXAvJy4kYmFzZW5hbWUsKGludCkkaGVpZ2h0KzMwKSk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJG1lc3NhZ2UgPSAkbW9kLT5MYW5nKCdlcnJfY2hhcnQnKTsKCQkJCQkJaWYoJGVycmtleSkKCQkJCQkJCSRtZXNzYWdlIC49ICc8YnIgLz48YnIgLz4nLiRtb2QtPkxhbmcoJGVycmtleSk7CgkJCQkJJHNtYXJ0eS0+YXNzaWduKCdpbWFnZScsJG1lc3NhZ2UpOwoJCQkJfQoJCQl9CgkJCSRzbWFydHktPmFzc2lnbignbWFsbGRvbmUnLDApOwoJCX0KCQllbHNlaWYoJHRoaXMtPmFueSkgLy9tYXRjaChlcykgZXhpc3QKCQl7CgkJCSRzbWFydHktPmFzc2lnbignbWFsbGRvbmUnLDEpOwoJCQkkc21hcnR5LT5hc3NpZ24oJ25vbWF0Y2hlcycsJG1vZC0+TGFuZygnaW5mb19ub21hdGNoMicpKTsKCQl9CgkJZWxzZSAvL25vIG1hdGNoZXMgYXQgYWxsCgkJewoJCQkkc21hcnR5LT5hc3NpZ24oJ21hbGxkb25lJywwKTsKCQkJJHNtYXJ0eS0+YXNzaWduKCdub21hdGNoZXMnLCRtb2QtPkxhbmcoJ2luZm9fbm9tYXRjaCcpKTsKCQkJaWYoJHBtb2QgJiYgJHRjb3VudCA+IDEpCgkJCQkkc21hcnR5LT5hc3NpZ24oJ3NjaGVkdWxlJywkbW9kLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ3NjaGVkdWxlJywkbW9kLT5MYW5nKCdzY2hlZHVsZScpLAoJCQkJCSdvbmNsaWNrPSJzZXRfcGFyYW1zKHRoaXMpOyInKSk7CgkJfQoKCQkkaGlkZGVuIC49ICRtb2QtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwnbWF0Y2h2aWV3JywkZGF0YS0+bWF0Y2h2aWV3KTsKCgkJJGpzZnVuY3NbXSA9IDw8PCBFT1MKZnVuY3Rpb24gbWF0Y2hlc192aWV3KGJ0bikgewogc2V0X3RhYigpOwogJCgnI3skaWR9cmVhbF9hY3Rpb24nKS52YWwoJ21hdGNoX3ZpZXcnKTsKIHZhciBuZXdtb2RlID0gKGJ0bi5uYW1lPT0neyRpZH1hY3R1YWwnKT8nYWN0dWFsJzoncGxhbic7CiAkKCcjeyRpZH1tYXRjaHZpZXcnKS52YWwobmV3bW9kZSk7Cn0KCkVPUzsKCQlpZigkcGxhbikKCQl7CgkJCSRzbWFydHktPmFzc2lnbigncGxhbicsMSk7CgkJCSRzbWFydHktPmFzc2lnbignaWR0aXRsZScsJG1vZC0+TGFuZygndGl0bGVfbWlkJykpOwoJCQkkc21hcnR5LT5hc3NpZ24oJ2FsdG12aWV3JywkbW9kLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ2FjdHVhbCcsJG1vZC0+TGFuZygnYWN0dWFsJyksCgkJCQkndGl0bGU9IicuJG1vZC0+TGFuZygnYWN0dWFsX3RpcCcpLiciIG9uY2xpY2s9Im1hdGNoZXNfdmlldyh0aGlzKTsiJykpOwoJCX0KCQllbHNlCgkJewoJCQkkc21hcnR5LT5hc3NpZ24oJ3BsYW4nLDApOwoJCQkkc21hcnR5LT5hc3NpZ24oJ2FsdG12aWV3JywkbW9kLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ3BsYW4nLCRtb2QtPkxhbmcoJ3BsYW4nKSwKCQkJCSd0aXRsZT0iJy4kbW9kLT5MYW5nKCdwbGFuX3RpcCcpLiciIG9uY2xpY2s9Im1hdGNoZXNfdmlldyh0aGlzKTsiJykpOwoJCX0KCQkvL3RoZXNlIG1heSBiZSB1c2VkIG9uIHJlc3VsdHMgdGFiIGFzIHdlbGwgb3IgaW5zdGVhZAoJCSRzbWFydHktPmFzc2lnbignY2hhcnQnLCRtb2QtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnY2hhcnQnLCRtb2QtPkxhbmcoJ2NoYXJ0JyksCgkJCSdvbmNsaWNrPSJzZXRfcGFyYW1zKHRoaXMpOyInKSk7CgkJJHNtYXJ0eS0+YXNzaWduKCdsaXN0JywkbW9kLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ2xpc3QnLCRtb2QtPkxhbmcoJ2xpc3QnKSwKCQkJJ29uY2xpY2s9InNldF9wYXJhbXModGhpcyk7IicpKTsKCi8vPT09PT09PT09IFJFU1VMVFMgPT09PT09PT09PQoKCQlpZihlbXB0eSgkZGF0YS0+cmVzdWx0dmlldykpCgkJCSRkYXRhLT5yZXN1bHR2aWV3ID0gJ2Z1dHVyZSc7CgkJJGZ1dHVyZSA9ICgkZGF0YS0+cmVzdWx0dmlldyA9PSAnZnV0dXJlJyk7CgoJCWlmKCRkYXRhLT5yZXN1bHRzKSAvL21hdGNoaW5nIHJlc3VsdHMgaW4gdGhlIGRhdGFiYXNlCgkJewoJCQlpZigkcG1vZCkKCQkJewoJCQkJJGV4dHJhcyA9ICgkZnV0dXJlKSA/CgkJCQkgYXJyYXkoJG1vZC0+TGFuZygnY2hvb3Nlb25lJyk9Pi0xKToKCQkJCSBhcnJheSgkbW9kLT5MYW5nKCdub3R5ZXQnKT0+VG91cm5leTo6Tk9UWUVULAoJCQkJCQkkbW9kLT5MYW5nKCdwb3NzaWJsZScpPT5Ub3VybmV5OjpTT0ZULAoJCQkJCQkkbW9kLT5MYW5nKCdjb25maXJtZWQnKT0+VG91cm5leTo6RklSTSk7CgkJCX0KCQkJJHJlbGF0aW9ucyA9ICRtb2QtPlJlc3VsdFRlbXBsYXRlcygkZGF0YS0+YnJhY2tldF9pZCxGQUxTRSk7CgkJCSRyZXN1bHRzID0gYXJyYXkoKTsKCQkJJHJvd2NsYXNzID0gJ3JvdzEnOwoJCQkvL3BvcHVsYXRlIGFycmF5IGV4Y2x1ZGluZyBieWVzCgkJCWZvcmVhY2goJGRhdGEtPnJlc3VsdHMgYXMgJG1pZD0+JG1kYXRhKQoJCQl7CgkJCQlpZighKCRtZGF0YVsndGVhbUEnXT09Jy0xJ3x8ICRtZGF0YVsndGVhbUInXT09Jy0xJykpCgkJCQl7CgkJCQkJJG9uZSA9IG5ldyBzdGRDbGFzcygpOwoJCQkJCSRvbmUtPnJvd2NsYXNzID0gJHJvd2NsYXNzOwoJCQkJCSRvbmUtPnNjaGVkdWxlID0gJG1kYXRhWydwbGF5d2hlbiddOwoJCQkJCWlmKCRwbW9kKQoJCQkJCXsKCQkJCQkJJG9uZS0+aGlkZGVuID0gJG1vZC0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCdyZXNfbWF0Y2hpZFtdJywkbWlkKS4KCQkJCQkJCSRtb2QtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwncmVzX3RlYW1BW10nLCRtZGF0YVsndGVhbUEnXSkuCgkJCQkJCQkkbW9kLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ3Jlc190ZWFtQltdJywkbWRhdGFbJ3RlYW1CJ10pOwoJCQkJCQkkdG1wID0gJG1vZC0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwncmVzX3BsYXl3aGVuW10nLCRvbmUtPnNjaGVkdWxlLDE1LDMwKTsKCQkJCQkJJHJlcGxzID0gYXJyYXkoJ2NsYXNzPSJyZXNfcGxheXdoZW4gJDEiJywnJyk7CgkJCQkJCSRvbmUtPmFjdHVhbCA9IHByZWdfcmVwbGFjZSgkZmluZHMsJHJlcGxzLCR0bXApOwoJCQkJCQkkb25lLT50ZWFtQSA9ICRtb2QtPlRlYW1OYW1lKCRtZGF0YVsndGVhbUEnXSk7CgkJCQkJCSRvbmUtPnRlYW1CID0gJG1vZC0+VGVhbU5hbWUoJG1kYXRhWyd0ZWFtQiddKTsKCQkJCQkJJGNob2ljZXMgPSAkZXh0cmFzICsgYXJyYXkoCgkJCQkJCQlzdHJfcmVwbGFjZSgnJXMnLCRvbmUtPnRlYW1BLCRyZWxhdGlvbnNbJ3dvbiddKT0+VG91cm5leTo6V09OQSwKCQkJCQkJCXN0cl9yZXBsYWNlKCclcycsJG9uZS0+dGVhbUIsJHJlbGF0aW9uc1snd29uJ10pPT5Ub3VybmV5OjpXT05CLAoJCQkJCQkJc3RyX3JlcGxhY2UoJyVzJywkb25lLT50ZWFtQSwkcmVsYXRpb25zWydmb3JmJ10pPT5Ub3VybmV5OjpGT1JGQSwKCQkJCQkJCXN0cl9yZXBsYWNlKCclcycsJG9uZS0+dGVhbUIsJHJlbGF0aW9uc1snZm9yZiddKT0+VG91cm5leTo6Rk9SRkIKCQkJCQkJKTsKCQkJCQkJaWYoJGRhdGEtPmNhbnRpZSkKCQkJCQkJCSRjaG9pY2VzWyRkYXRhLT50aWVkXSA9IFRvdXJuZXk6Ok1USUVEOwoJCQkJCQkkY2hvaWNlc1skZGF0YS0+bm9tYXRjaF0gPSBUb3VybmV5OjpOT1dJTjsKCQkJCQkJJHNlbCA9ICgkZnV0dXJlKSA/IC0xIDogKGludCkkbWRhdGFbJ3N0YXR1cyddOwoJCQkJCQkkb25lLT5yZXN1bHQgPSAkbW9kLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwncmVzX3N0YXR1c1snLiRtaWQuJ10nLCRjaG9pY2VzLCcnLCRzZWwpOwoJCQkJCQkkdG1wID0gJG1vZC0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwncmVzX3Njb3JlW10nLCRtZGF0YVsnc2NvcmUnXSwxNSwzMCk7CgkJCQkJCSRyZXBscyA9IGFycmF5KCdjbGFzcz0icmVzX3Njb3JlICQxIicsJycpOwoJCQkJCQkkb25lLT5zY29yZSA9IHByZWdfcmVwbGFjZSgkZmluZHMsJHJlcGxzLCR0bXApOwoJCQkJCQkkb25lLT5zZWxlY3RlZCA9ICRtb2QtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCdyc2VsW10nLCRtaWQsLTEpOwoJCQkJCX0KCQkJCQllbHNlIC8vbm8gY2hhbmdlcwoJCQkJCXsKCQkJCQkJJG9uZS0+YWN0dWFsID0gc3Vic3RyKCRtZGF0YVsncGxheXdoZW4nXSwwLC0zKTsgLy93aXRob3V0IGFueSBzZWNvbmRzIGRpc3BsYXkKCQkJCQkJJG9uZS0+dGVhbUEgPSAnJzsKCQkJCQkJJG9uZS0+dGVhbUIgPSAnJzsKCQkJCQkJJHRBID0gJG1vZC0+VGVhbU5hbWUoJG1kYXRhWyd0ZWFtQSddKTsKCQkJCQkJJHRCID0gJG1vZC0+VGVhbU5hbWUoJG1kYXRhWyd0ZWFtQiddKTsKCQkJCQkJc3dpdGNoKGludHZhbCgkbWRhdGFbJ3N0YXR1cyddKSkKCQkJCQkJewoJCQkJCQkgY2FzZSBUb3VybmV5OjpXT05BOgoJCQkJCQkJJG9uZS0+cmVzdWx0ID0gc3RyX3JlcGxhY2UoJyVzJywkdEEsJHJlbGF0aW9uc1snd29uJ10pOwoJCQkJCQkJYnJlYWs7CgkJCQkJCSBjYXNlIFRvdXJuZXk6OldPTkI6CgkJCQkJCQkkb25lLT5yZXN1bHQgPSBzdHJfcmVwbGFjZSgnJXMnLCR0QiwkcmVsYXRpb25zWyd3b24nXSk7CgkJCQkJCQlicmVhazsKCQkJCQkJIGNhc2UgVG91cm5leTo6Rk9SRkE6CgkJCQkJCQkkb25lLT5yZXN1bHQgPSBzdHJfcmVwbGFjZSgnJXMnLCR0QSwkcmVsYXRpb25zWydmb3JmJ10pOwoJCQkJCQkJYnJlYWs7CgkJCQkJCSBjYXNlIFRvdXJuZXk6OkZPUkZCOgoJCQkJCQkJJG9uZS0+cmVzdWx0ID0gc3RyX3JlcGxhY2UoJyVzJywkdEIsJHJlbGF0aW9uc1snZm9yZiddKTsKCQkJCQkJCWJyZWFrOwoJCQkJCQkgY2FzZSBUb3VybmV5OjpNVElFRDoKCQkJCQkJCSRvbmUtPnJlc3VsdCA9IHNwcmludGYoJHJlbGF0aW9uc1sndGllZCddLCR0QSwkdEIpOwoJCQkJCQkJYnJlYWs7CgkJCQkJCSBjYXNlIFRvdXJuZXk6Ok5PV0lOOgoJCQkJCQkJJG9uZS0+cmVzdWx0ID0gJG1vZC0+TGFuZygnbmFtZV9hYmFuZG9uZWQnKTsKCQkJCQkJCWJyZWFrOwoJCQkJCQkgZGVmYXVsdDoKCQkJCQkJCSRvbmUtPnJlc3VsdCA9ICRtb2QtPkxhbmcoJ25vdHlldCcpOwoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQkJJG9uZS0+c2NvcmUgPSAkbWRhdGFbJ3Njb3JlJ107CgkJCQkJfQoJCQkJCSRyZXN1bHRzW10gPSAkb25lOwoJCQkJCSgkcm93Y2xhc3M9PSdyb3cxJz8kcm93Y2xhc3M9J3JvdzInOiRyb3djbGFzcz0ncm93MScpOwoJCQkJfQoJCQl9CgkJCWlmKCRyZXN1bHRzKSAvL3RoZXJlJ3Mgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBieWUKCQkJewoJCQkJJHNtYXJ0eS0+YXNzaWduKCdyZXN1bHRzJywkcmVzdWx0cyk7CgkJCQlpZigkcG1vZCkKCQkJCXsKCQkJCQkvL2VtYmVkZGVkIHZhcnMgaGVyZSB3ZXJlIGRlZmluZWQgZm9yIHN0YXJ0L2VuZC1kYXRlIGNhbGVuZGFycwoJCQkJCSRqc2xvYWRzW10gPSA8PDwgRU9TCiAkKCcucmVzX3BsYXl3aGVuJykuZWFjaChmdW5jdGlvbigpIHsKICAgJCh0aGlzKS5QaWthZGF5KHsKICAgIGNvbnRhaW5lcjogdGhpcy5wYXJlbnROb2RlLAogICAgZm9ybWF0OiAnWVlZWS1NTS1ERCBISDptbScsCiAgICBpMThuOiB7CiAgICAgcHJldmlvdXNNb250aDogJ3skcHJldm19JywKICAgICBuZXh0TW9udGg6ICd7JG5leHRtfScsCiAgICAgbW9udGhzOiBbeyRtbmFtZXN9XSwKICAgICB3ZWVrZGF5czogW3skZG5hbWVzfV0sCiAgICAgd2Vla2RheXNTaG9ydDogW3skc2RuYW1lc31dCiAgICB9CiAgIH0pOwogfSk7CgpFT1M7CgkJCQl9CgkJCQlpZihjb3VudCgkcmVzdWx0cykgPiAxKQoJCQkJewoJCQkJCSRqc2Z1bmNzW10gPSA8PDwgRU9TCmZ1bmN0aW9uIHNlbGVjdF9hbGxfcmVzdWx0cygpIHsKIHZhciBzdCA9ICQoJyNyZXN1bHRzZWwnKS5hdHRyKCdjaGVja2VkJyk7CiBpZighc3QpIHN0ID0gZmFsc2U7CiAkKCcjdG10X3Jlc3VsdHMgPiB0Ym9keScpLmZpbmQoJ2lucHV0W3R5cGU9ImNoZWNrYm94Il0nKS5hdHRyKCdjaGVja2VkJyxzdCk7Cn0KCkVPUzsKCQkJCQkkc21hcnR5LT5hc3NpZ24oJ3NlbHJlc3VsdHMnLCRtb2QtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCdyJyxGQUxTRSwtMSwKCQkJCQkJJ2lkPSJyZXN1bHRzZWwiIG9uY2xpY2s9InNlbGVjdF9hbGxfcmVzdWx0cygpOyInKSk7CgkJCQl9CgkJCQllbHNlCgkJCQkJJHNtYXJ0eS0+YXNzaWduKCdzZWxyZXN1bHRzJywnJyk7CgoJCQkJJHNtYXJ0eS0+YXNzaWduKCdwbGF5ZWR0aXRsZScsJG1vZC0+TGFuZygncGxheWVkJykpOwoJCQkJJHNtYXJ0eS0+YXNzaWduKCdyZXN1bHR0aXRsZScsJG1vZC0+TGFuZygndGl0bGVfcmVzdWx0JykpOwoJCQkJJHNtYXJ0eS0+YXNzaWduKCdzY29yZXRpdGxlJywkbW9kLT5MYW5nKCdzY29yZScpKTsKCgkJCQkkanNmdW5jc1tdID0gPDw8IEVPUwpmdW5jdGlvbiByZXN1bHRfY291bnQoKSB7CiB2YXIgY2IgPSAkKCcjdG10X3Jlc3VsdHMgPiB0Ym9keScpLmZpbmQoJ2lucHV0OmNoZWNrZWQnKTsKIHJldHVybiBjYi5sZW5ndGg7Cn0KZnVuY3Rpb24gcmVzdWx0c19zZWxlY3RlZChldixidG4pIHsKIGlmKHJlc3VsdF9jb3VudCgpID4gMCkgewogIHNldF9wYXJhbXMoYnRuKTsKICByZXR1cm4gdHJ1ZTsKIH0gZWxzZSB7CiAgZXZlbnRDYW5jZWwoZXYpOwogIHJldHVybiBmYWxzZTsKIH0KfQoKRU9TOwoJCQkJJHNtYXJ0eS0+YXNzaWduKCd1cGRhdGUzJywkbW9kLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ3VwZGF0ZVsnLiRpZC4ncmVzdWx0c10nLCRtb2QtPkxhbmcoJ3VwZGF0ZScpLAoJCQkJCSd0aXRsZT0iJy4kbW9kLT5MYW5nKCd1cGRhdGVfdGlwJykuJyIgb25jbGljaz0icmV0dXJuIHJlc3VsdHNfc2VsZWN0ZWQoZXZlbnQsdGhpcyk7IicpKTsKCQkJfQoJCQllbHNlIC8vbm8gcmVsZXZhbnQgcmVzdWx0CgkJCXsKCQkJCSRzbWFydHktPmFzc2lnbigncmFsbGRvbmUnLDApOwoJCQkJJHNtYXJ0eS0+YXNzaWduKCdub3Jlc3VsdHMnLCRtb2QtPkxhbmcoJ2luZm9fbm9yZXN1bHQnKSk7CgkJCX0KCQl9CgkJZWxzZWlmKCR0aGlzLT5hbnkpIC8vYW55IG1hdGNoIGluIHRoZSBkYXRhYmFzZQoJCXsKCQkJJHNtYXJ0eS0+YXNzaWduKCdyYWxsZG9uZScsMSk7CgkJCSRrZXkgPSAoJHRoaXMtPmNvbW1pdHRlZCkgPyAnaW5mb19ub3Jlc3VsdDInOidpbmZvX25vcmVzdWx0JzsKCQkJJHNtYXJ0eS0+YXNzaWduKCdub3Jlc3VsdHMnLCRtb2QtPkxhbmcoJGtleSkpOwoJCX0KCQllbHNlIC8vbm90aGluZyBhdCBhbGwKCQl7CgkJCSRzbWFydHktPmFzc2lnbigncmFsbGRvbmUnLDApOwoJCQkkc21hcnR5LT5hc3NpZ24oJ25vcmVzdWx0cycsJG1vZC0+TGFuZygnaW5mb19ub3Jlc3VsdCcpKTsKCQl9CgoJCSRoaWRkZW4gLj0gJG1vZC0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCdyZXN1bHR2aWV3JywkZGF0YS0+cmVzdWx0dmlldyk7CgoJCSRqc2Z1bmNzW10gPSA8PDwgRU9TCmZ1bmN0aW9uIHJlc3VsdHNfdmlldyhidG4pIHsKIHNldF90YWIoKTsKICQoJyN7JGlkfXJlYWxfYWN0aW9uJykudmFsKCdyZXN1bHRfdmlldycpOwogdmFyIG5ld21vZGUgPSAoYnRuLm5hbWU9PSd7JGlkfWZ1dHVyZScpPydmdXR1cmUnOidwYXN0JzsKICQoJyN7JGlkfXJlc3VsdHZpZXcnKS52YWwobmV3bW9kZSk7Cn0KCkVPUzsKCQlpZigkZnV0dXJlKQoJCQkkc21hcnR5LT5hc3NpZ24oJ2FsdHJ2aWV3JywkbW9kLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ3Bhc3QnLCRtb2QtPkxhbmcoJ2hpc3RvcnknKSwKCQkJCSd0aXRsZT0iJy4kbW9kLT5MYW5nKCdoaXN0b3J5X3RpcCcpLiciIG9uY2xpY2s9InJlc3VsdHNfdmlldyh0aGlzKTsiJykpOwoJCWVsc2UKCQkJJHNtYXJ0eS0+YXNzaWduKCdhbHRydmlldycsJG1vZC0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdmdXR1cmUnLCRtb2QtPkxhbmcoJ2Z1dHVyZScpLAoJCQkJJ3RpdGxlPSInLiRtb2QtPkxhbmcoJ2Z1dHVyZV90aXAnKS4nIiBvbmNsaWNrPSJyZXN1bHRzX3ZpZXcodGhpcyk7IicpKTsKCQkkc21hcnR5LT5hc3NpZ24oJ2NoYW5nZXMnLCRtb2QtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnY2hhbmdlbG9nJywkbW9kLT5MYW5nKCdjaGFuZ2VzJyksCgkJCSd0aXRsZT0iJy4kbW9kLT5MYW5nKCdjaGFuZ2VzX3RpcCcpLiciIG9uY2xpY2s9InNldF9hY3Rpb24odGhpcyk7IicpKTsKCQkkc21hcnR5LT5hc3NpZ24oJ2dldHNjb3JlJywkbW9kLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ2dldHNjb3JlJywkbW9kLT5MYW5nKCdnZXRzY29yZScpLAoJCQkndGl0bGU9IicuJG1vZC0+TGFuZygnZ2V0c2NvcmVfdGlwJykuJyIgb25jbGljaz0icmV0dXJuIHJlc3VsdHNfc2VsZWN0ZWQoZXZlbnQsdGhpcyk7IicpKTsKCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKCQkkc21hcnR5LT5hc3NpZ24oJ3NhdmUnLCRtb2QtPkNyZWF0ZUlucHV0U3VibWl0RGVmYXVsdCgkaWQsJ3N1Ym1pdCcsJG1vZC0+TGFuZygnc2F2ZScpLAoJCQknb25jbGljaz0ic2V0X2FjdGlvbih0aGlzKTsiJykpOwoJCSRzbWFydHktPmFzc2lnbignYXBwbHknLCRtb2QtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnYXBwbHknLCRtb2QtPkxhbmcoJ2FwcGx5JyksCgkJCSd0aXRsZSA9ICInLiRtb2QtPkxhbmcoJ2FwcGx5X3RpcCcpLiciIG9uY2xpY2s9InNldF9wYXJhbXModGhpcyk7IicpKTsKCQkvL3NldHVwIGNhbmNlbC1jb25maXJtYXRpb24gcG9wdXAKCQlpZighZW1wdHkoJGRhdGEtPmFkZGVkKSkgLy9hbGx3YXlzIGNoZWNrIGNhbmNlbGxhdGlvbiBmb3IgbmV3IGJyYWNrZXQKCQkJJHRlc3QgPSAnbnVsbCc7CgkJZWxzZSAvL2NoZWNrIGlmICdkaXJ0eScgcmVwb3J0ZWQgdmlhIGFqYXgKCQl7CgkJCSR1cmwgPSAkbW9kLT5DcmVhdGVMaW5rKCRpZCwnY2hlY2tfZGF0YScsTlVMTCxOVUxMLGFycmF5KCdicmFja2V0X2lkJz0+JGRhdGEtPmJyYWNrZXRfaWQpLE5VTEwsVFJVRSk7CgkJCSRvZmZzID0gc3RycG9zKCR1cmwsJz9tYWN0PScpOwoJCQkkYWpheGRhdGEgPSBzdHJfcmVwbGFjZSgnYW1wOycsJycsc3Vic3RyKCR1cmwsJG9mZnMrMSkpOwoJCQkkdGVzdCA9IDw8PCBFT1MKZnVuY3Rpb24oKXsKCSB2YXIgY2hlY2sgPSBmYWxzZTsKCSAkLmFqYXgoewoJCXVybDogJ21vZHVsZWludGVyZmFjZS5waHAnLAoJCWFzeW5jOiBmYWxzZSwKCQl0eXBlOiAnUE9TVCcsCgkJZGF0YTogJyRhamF4ZGF0YScsCgkJZGF0YVR5cGU6ICd0ZXh0JywKCQlzdWNjZXNzOiBmdW5jdGlvbihkYXRhLHN0YXR1cykgewoJCQlpZihzdGF0dXM9PSdzdWNjZXNzJykgY2hlY2sgPSAoZGF0YT09JzEnKTsKCQl9CgkgfSkuZmFpbChmdW5jdGlvbigpIHsKCQlhbGVydCgneyRtb2QtPkxhbmcoJ2Vycl9hamF4Jyl9Jyk7CgkgfSk7CgkgcmV0dXJuIGNoZWNrOwoJfQpFT1M7CgkJfQoKCQkkc21hcnR5LT5hc3NpZ24oJ2NhbmNlbCcsJG1vZC0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdjYW5jZWwnLCRtb2QtPkxhbmcoJ2NhbmNlbCcpKSk7CgkJLy9mb3IgcG9wdXAgY29uZmlybWF0aW9uCgkJJHNtYXJ0eS0+YXNzaWduKCdubycsJG1vZC0+TGFuZygnbm8nKSk7CgkJJHNtYXJ0eS0+YXNzaWduKCd5ZXMnLCRtb2QtPkxhbmcoJ3llcycpKTsKCQkvL29uQ2hlY2tGYWlsOiB0cnVlIG1lYW5zIG9uQ29uZmlybSgpIGlmIG5vIGNoZWNrIG5lZWRlZAoJCSRqc2xvYWRzW10gPSA8PDwgRU9TCiAkKCcjeyRpZH1jYW5jZWwnKS5tb2RhbGNvbmZpcm0oewogIG92ZXJsYXlJRDogJ2NvbmZpcm0nLAogIGRvQ2hlY2s6IHskdGVzdH0sCiAgcHJlU2hvdzogZnVuY3Rpb24oZCl7CgkgdmFyIHBhcmEgPSBkLmNoaWxkcmVuKCdwOmZpcnN0JylbMF07CgkgcGFyYS5pbm5lckhUTUwgPSAneyRtb2QtPkxhbmcoJ2FsbGFiYW5kb24nKX0nOwogIH0sCiAgb25DaGVja0ZhaWw6IHRydWUsCiAgb25Db25maXJtOiBmdW5jdGlvbigpewoJICQoJyN7JGlkfXJlYWxfYWN0aW9uJykudmFsKHRoaXMubmFtZSk7CgkgcmV0dXJuIHRydWU7CiAgfQogfSk7CgpFT1M7CgkJLy9wcmV2ZW50IGltbWVkaWF0ZSBhY3RpdmF0aW9uIGJ5IHRleHRpbnB1dCA8RW50ZXI+IHByZXNzCgkJJGpzbG9hZHNbXSA9IDw8PCBFT1MKICQoJ2Zvcm0gaW5wdXRbdHlwZT10ZXh0XScpLmtleXByZXNzKGZ1bmN0aW9uKGUpewogIGlmIChlLndoaWNoID09IDEzKSB7Ci8vICQoJ2lucHV0W3R5cGU9c3VibWl0XS5kZWZhdWx0JykuZm9jdXMoKTsKICAgcmV0dXJuIGZhbHNlOwogIH0KIH0pOwoKRU9TOwoJCSRzbWFydHktPmFzc2lnbignaGlkZGVuJywkaGlkZGVuKTsKCgkJaWYoJGpzbG9hZHMpCgkJewoJCQkkanNmdW5jc1tdID0gJwokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKJzsKCQkJJGpzZnVuY3MgPSBhcnJheV9tZXJnZSgkanNmdW5jcywkanNsb2Fkcyk7CgkJCSRqc2Z1bmNzW10gPSAnfSk7Cic7CgkJfQoJCSRzbWFydHktPmFzc2lnbignanNmdW5jcycsJGpzZnVuY3MpOwoJfQp9Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.tmtLayout.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKTk9URSB0aGlzIGNsYXNzIGlzIG5vdCBzdWl0ZWQgZm9yIHN0YXRpYyBtZXRob2QtY2FsbGluZwoqLwoKY2xhc3MgdG10TGF5b3V0CnsKCXByaXZhdGUgJGNoYXJ0c2l6ZSA9IEZBTFNFOwkvL2FycmF5IG9yIEZBTFNFCgoJLyoqCglHZXRDaGFydDoKCUBtb2QgcmVmZXJlbmNlIHRvIG1vZHVsZSBvYmplY3QKCUBiZGF0YSByZWZlcmVuY2UgdG8gYXJyYXkgb2YgYnJhY2tldHMtdGFibGUgZGF0YQoJQHN0eWxlZmlsZSBuYW1lIG9mIC5jc3MgZmlsZSB0byB1c2UgaW5zdGVhZCBvZiBsb2dnZWQgZGF0YSAob3B0aW9uYWwsIGRlZmF1bHQgRkFMU0UpCglAdGl0bGVzIG9wdGlvbmFsLCBtb2RlIGVudW0gZm9yIHR5cGUgb2YgdGl0bGVzIHRvIGluY2x1ZGUgaW4gYm94ZXM6CgkgMCBmb3IgKHByaW50ZXItcmVhZHkpIG5vIGxhYmVscyBpbiB1bnBsYXllZCBtYXRjaGVzCiAJIDEgZm9yIG5vcm1hbCBsYWJlbHMgaW4gYWxsIGJveGVzIChkZWZhdWx0KQoJIDIgZm9yIGluY2x1ZGluZyBtYXRjaCBudW1iZXJzIGluICdwbGFuJyBtb2RlCglDb25zdHJ1Y3QgYnJhY2tldCBtYXRjaCBzdGF0dXMgZGF0YSBpbiBjaGFydCBmb3JtYXQuCglJZiBuZWVkZWQsIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIGJyYWNrZXQgY2hhcnQgaXMgY3JlYXRlZCBvciByZWZyZXNoZWQsIGFuZCBzYXZlZAoJUmV0dXJuczogYXJyYXkgKHBhdGggb2YgY2hhcnQgZmlsZSwnJykgb3IgYXJyYXkoRkFMU0UsbGFuZyBrZXkgZm9yIGVycm9yIG1lc3NhZ2UpCgkqLwoJZnVuY3Rpb24gR2V0Q2hhcnQoJiRtb2QsJiRiZGF0YSwkc3R5bGVmaWxlPUZBTFNFLCR0aXRsZXM9MSkKCXsKCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOwoJCSRwcmVmID0gY21zX2RiX3ByZWZpeCgpOwoJCSRjaGFydGZpbGUgPSAkbW9kLT5DaGFydEltYWdlRmlsZSgkYmRhdGFbJ2JyYWNrZXRfaWQnXSxGQUxTRSk7CgkJaWYgKCRiZGF0YVsnY2hhcnRidWlsZCddIHx8ICFmaWxlX2V4aXN0cygkY2hhcnRmaWxlKSkKCQl7CgkJCS8vY2hhcnQgbmVlZHMgdG8gYmUgcmVjb25zdHJ1Y3RlZAoJCQlzd2l0Y2ggKCRiZGF0YVsndHlwZSddKQoJCQl7CgkJCSBjYXNlIFRvdXJuZXk6OkRFVFlQRToKCQkJCSRjaHQgPSBuZXcgdG10Q2hhcnRERSgpOwoJCQkJYnJlYWs7CgkJCSBjYXNlIFRvdXJuZXk6OlJSVFlQRToKCQkJCSRjaHQgPSBuZXcgdG10Q2hhcnRSUigpOwoJCQkJYnJlYWs7CgkJCSBkZWZhdWx0OgovLwkJCSBjYXNlIFRvdXJuZXk6OktPVFlQRToKCQkJCSRjaHQgPSBuZXcgdG10Q2hhcnRLTygpOwoJCQkJYnJlYWs7CgkJCX0KCgkJCSRyZXMgPSAkY2h0LT5NYWtlQ2hhcnQoJG1vZCwkYmRhdGEsJGNoYXJ0ZmlsZSwkc3R5bGVmaWxlLCR0aXRsZXMpOwoJCQlpZigkcmVzID09PSBUUlVFKQoJCQl7CgkJCQkvL3JlY29yZCBzaXplcyBmb3IgdXBzdHJlYW0gdXNhZ2UKCQkJCSR0aGlzLT5jaGFydHNpemUgPSAkY2h0LT5DaGFydFNpemUoKTsKCQkJCS8vbm8gcmVidWlsZHMgdW50aWwgZnVydGhlciBub3RpY2UKCQkJCSRzcWwgPSAnVVBEQVRFICcuJHByZWYuJ21vZHVsZV90bXRfYnJhY2tldHMgU0VUIGNoYXJ0YnVpbGQ9MCBXSEVSRSBicmFja2V0X2lkPT8nOwoJCQkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJGJkYXRhWydicmFja2V0X2lkJ10pKTsKCQkJCSRiZGF0YVsnY2hhcnRidWlsZCddID0gMDsKCQkJfQoJCQllbHNlCgkJCQlyZXR1cm4gYXJyYXkoRkFMU0UsJHJlcyk7IC8vc2VuZCBiYWNrIHRoZSBlcnJvci1rZXkKCQl9CgkJZWxzZQoJCXsKCQkJLy9yb3VnaCBhcHByb3hpbWF0aW9uCgkJIAkkc3FsID0gJ1NFTEVDVCBDT1VOVCgxKSBBUyBudW0gRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X3RlYW1zIFdIRVJFIGJyYWNrZXRfaWQ9PyBBTkQgZmxhZ3MhPTInOwoJCQkkbnVtID0gJGRiLT5HZXRPbmUoJHNxbCxhcnJheSgkYmRhdGFbJ2JyYWNrZXRfaWQnXSkpOwoJCQlzd2l0Y2ggKCRiZGF0YVsndHlwZSddKQoJCQl7CgkJCSBjYXNlIFRvdXJuZXk6OlJSVFlQRToKCQkJCSRodCA9ICRudW0gKiA1MDsKCQkJCSR3ZCA9ICgkbnVtLTEpICogMTMwOwoJCQkJYnJlYWs7CgkJCSBjYXNlIFRvdXJuZXk6OkRFVFlQRToKCQkJIAkkQkMgPSAoKGxvZygkbnVtLDIpLTAuMDAwMSl8MCkgKyAxOyAvL2xhc3QgYmFuZCBpbiBsb3NlcnMnIGRyYXcKCQkJCSRodCA9IHBvdygyLCRCQykgKiAxLjUgKiA1MDsKCQkJCSR3ZCA9ICgkQkMqMiAtIDEpICogMTMwOyAvL2NvbHMgbm8uID0gQkYtKEJDKzEpKzEsIEJGID0gM0JDLTEKCQkJIAlicmVhazsKCQkJIGRlZmF1bHQ6CgkJCSAJJEJDID0gKChsb2coJG51bSwyKS0wLjAwMDEpfDApICsgMTsgLy9maW5hbCBiYW5kCgkJCQkkaHQgPSBwb3coMiwkQkMpICogNTA7CgkJCQkkd2QgPSAkQkMgKiAxMzA7CgkJCSAJYnJlYWs7CgkJCX0KCQkJLy9UT0RPIGdldCBhY3R1YWwgZGltZW5zaW9ucyBvZiBzYXZlZCAkY2hhcnRmaWxlCgkJCSR0aGlzLT5jaGFydHNpemUgPSBhcnJheSgnaGVpZ2h0Jz0+JGh0KzMwLCd3aWR0aCc9PiR3ZCszMCk7CgkJfQoJCXJldHVybiBhcnJheSgkY2hhcnRmaWxlLCcnKTsKCX0KCgkvKioKCUdldENoYXJ0U2l6ZToKCUdldCBicmFja2V0Y2hhcnQgZGltZW5zaW9ucyAoaW4gcG9pbnRzLCBub3QgcGl4ZWxzKQoJUmV0dXJuczogYXJyYXkgLSBoZWlnaHQsd2lkdGggb3IgMCwwCgkqLwoJZnVuY3Rpb24gR2V0Q2hhcnRTaXplKCkKCXsKCQlpZiAoJHRoaXMtPmNoYXJ0c2l6ZSAhPT0gRkFMU0UpCgkJCXJldHVybiBhcnJheSgkdGhpcy0+Y2hhcnRzaXplWydoZWlnaHQnXSwkdGhpcy0+Y2hhcnRzaXplWyd3aWR0aCddKTsKCQllbHNlCgkJCXJldHVybiBhcnJheSgwLDApOwoJfQoKCS8qKgoJR2V0TGlzdDoKCUBtb2Q6IHJlZmVyZW5jZSB0byBtb2R1bGUgb2JqZWN0CglAYmRhdGE6IHJlZmVyZW5jZSB0byBhcnJheSBvZiBicmFja2V0cy10YWJsZSBkYXRhCglAZnJvbnQ6IG9wdGlvbmFsLCB3aGV0aGVyIGxpc3QgaXMgZm9yIGZyb250ZW5kIGRpc3BsYXksIGRlZmF1bHQgVFJVRQoJR2V0IGJyYWNrZXQgbWF0Y2ggc3RhdHVzIGRhdGEgaW4gbGlzdCBmb3JtYXQKCVJldHVybnM6IGFycmF5IG9mIG1hdGNoIGRlc2NyaXB0b3Igc3RyaW5ncywgb3IgbWVzc2FnZS1zdHJpbmcga2V5CgkJaWYgbm90aGluZyB0byByZXBvcnQgb3IgZXJyb3IgaGFwcGVucwoJKi8KCWZ1bmN0aW9uIEdldExpc3QoJiRtb2QsJiRiZGF0YSwkZnJvbnQ9VFJVRSkKCXsKCQkkYnJhY2tldF9pZCA9IChpbnQpJGJkYXRhWydicmFja2V0X2lkJ107CgkJJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCQkkcHJlZiA9IGNtc19kYl9wcmVmaXgoKTsKCQkvL2dldCBhbGwgbWF0Y2hlcywgcmVnYXJkbGVzcyBvZiBzdGF0dXMKCQkkc3FsID0gJ1NFTEVDVCAqIEZST00gJy4kcHJlZi4KCQkJJ21vZHVsZV90bXRfbWF0Y2hlcyBXSEVSRSBicmFja2V0X2lkPT8gT1JERVIgQlkgbWF0Y2hfaWQnOwoJCSRtYXRjaGVzID0gJGRiLT5HZXRBc3NvYygkc3FsLGFycmF5KCRicmFja2V0X2lkKSk7CgkJaWYgKCRtYXRjaGVzID09IEZBTFNFKQoJCQlyZXR1cm4gJ25vbWF0Y2gnOwoJCWlmKCRiZGF0YVsndHlwZSddICE9IFRvdXJuZXk6OlJSVFlQRSkKCQl7CgkJCSRzcWwgPSAnU0VMRUNUIENPVU5UKDEpIEFTIG51bSBGUk9NICcuJHByZWYuCgkJCQknbW9kdWxlX3RtdF90ZWFtcyBXSEVSRSBicmFja2V0X2lkPT8gQU5EIGZsYWdzICE9IDInOwoJCQkkdGMgPSAkZGItPkdldE9uZSgkc3FsLGFycmF5KCRicmFja2V0X2lkKSk7CgkJfQoJCXN3aXRjaCgkYmRhdGFbJ3R5cGUnXSkKCQl7CgkJIGNhc2UgVG91cm5leTo6UlJUWVBFOgoJCQkkYW5vbiA9ICRtb2QtPkxhbmcoJ2Fub25vdGhlcicpOwoJCSAJYnJlYWs7CgkJIGNhc2UgVG91cm5leTo6REVUWVBFOgoJCQlpZiAoJHRjIDwgVG91cm5leTo6REVNSU4gfHwgJHRjID4gVG91cm5leTo6REVNQVgpCgkJCQlyZXR1cm4gJ2Vycl92YWx1ZSc7CgkJCSRybmQgPSBuZXcgdG10Um91bmRzREUoKTsKCQkJYnJlYWs7CgkJIGRlZmF1bHQ6CgkJCWlmICgkdGMgPCBUb3VybmV5OjpLT01JTiB8fCAkdGMgPiBUb3VybmV5OjpLT01BWCkKCQkJCXJldHVybiAnZXJyX3ZhbHVlJzsKCQkJJHJuZCA9IG5ldyB0bXRSb3VuZHNLTygpOwoJCQkkbGV2ZWxtYXggPSAkcm5kLT5MZXZlbE1heCgkdGMpOwoJCSAJYnJlYWs7CgkJfQoJCSRmbXQgPSAkYmRhdGFbJ2F0Zm9ybWF0J107CgkJaWYoISRmbXQpCgkJCSRmbXQgPSAkbW9kLT5HZXRab25lRGF0ZUZvcm1hdCgkYmRhdGFbJ3RpbWV6b25lJ10pLicgJy4kbW9kLT5HZXRQcmVmZXJlbmNlKCd0aW1lX2Zvcm1hdCcpOwoJCSRkdCA9IG5ldyBEYXRlVGltZSgnMTkwMC0wMS0wMSAwMDowMDowMCcsbmV3IERhdGVUaW1lWm9uZSgkYmRhdGFbJ3RpbWV6b25lJ10pKTsKCQkkcmVsYXRpb25zID0gJG1vZC0+UmVzdWx0VGVtcGxhdGVzKCRiZGF0YVsnYnJhY2tldF9pZCddLEZBTFNFKTsKCQkkc2hvd3Jvd3MgPSBhcnJheSgpOwoJCWZvcmVhY2goJG1hdGNoZXMgYXMgJG1pZD0+JG1kYXRhKQoJCXsKCQkJaWYoJG1kYXRhWydzdGF0dXMnXSA9PSAwKQoJCQkJY29udGludWU7IC8vZmlsdGVyIG91dCB0aGUgbWF0Y2hlcyBvZiBubyBpbnRlcmVzdCBoZXJlCgkJCS8vYnllKHMpPwovKgkJaWYgKCRtZGF0YVsndGVhbUEnXSA9PSAtMSkKCQkJewoJCQkJaWYgKCEoJGZyb250IHx8ICRtZGF0YVsndGVhbUInXSA9PSAtMSkpCgkJCQkJJHNob3dyb3dzW10gPSAkbW9kLT5UZWFtTmFtZSgkbWRhdGFbJ3RlYW1CJ10pLicgJy4kYmRhdGFbJ2J5ZSddOwoJCQl9CgkJCWVsc2UgaWYgKCRtZGF0YVsndGVhbUInXSA9PSAtMSkKCQkJewoJCQkJaWYgKCEkZnJvbnQpCgkJCQkJJHNob3dyb3dzW10gPSAkbW9kLT5UZWFtTmFtZSgkbWRhdGFbJ3RlYW1BJ10pLicgJy4kYmRhdGFbJ2J5ZSddOwoJCQl9CgkJCWVsc2UKKi8KCQkJaWYgKCRtZGF0YVsndGVhbUEnXSAhPSAtMSAmJiAkbWRhdGFbJ3RlYW1CJ10gIT0gLTEpCgkJCXsKCQkJCSR0QSA9ICgkbWRhdGFbJ3RlYW1BJ10pID8gJG1vZC0+VGVhbU5hbWUoJG1kYXRhWyd0ZWFtQSddKSA6IEZBTFNFOwoJCQkJJHRCID0gKCRtZGF0YVsndGVhbUInXSkgPyAkbW9kLT5UZWFtTmFtZSgkbWRhdGFbJ3RlYW1CJ10pIDogRkFMU0U7CgkJCQlpZiAoJG1kYXRhWydzdGF0dXMnXSA8IFRvdXJuZXk6Ok1SRVMpCgkJCQl7CgkJCQkJaWYgKCRtZGF0YVsncGxheXdoZW4nXSkKCQkJCQl7CgkJCQkJCSRkdC0+bW9kaWZ5KCRtZGF0YVsncGxheXdoZW4nXSk7CgkJCQkJCSRhdCA9ICcsICcuZGF0ZSgkZm10LCRkdC0+Z2V0VGltZXN0YW1wKCkpOwoJCQkJCQlpZiAoJG1kYXRhWydwbGFjZSddICE9IE5VTEwpCgkJCQkJCQkkYXQgLj0gJywgJy4kbWRhdGFbJ3BsYWNlJ107CgkJCQkJfQoJCQkJCWVsc2VpZiAoJG1kYXRhWydwbGFjZSddKQoJCQkJCQkkYXQgPSAkbWRhdGFbJ3BsYWNlJ107CgkJCQkJZWxzZQoJCQkJCQkkYXQgPSAnJzsKCQkJCX0KCgkJCQlzd2l0Y2ggKCRtZGF0YVsnc3RhdHVzJ10pCgkJCQl7CgkJCQkgY2FzZSBUb3VybmV5OjpOT1RZRVQ6CgkJCQkgY2FzZSBUb3VybmV5OjpTT0ZUOgoJCQkJIGNhc2UgVG91cm5leTo6RklSTToKCQkJCSBjYXNlIFRvdXJuZXk6OlRPTEQ6CgkJCQkgY2FzZSBUb3VybmV5OjpBU0tFRDoKCQkJCSAJaWYoJHRBICYmICR0QikKCQkJCQl7CgkJCQkJCSRzdHIgPSBzcHJpbnRmKCRyZWxhdGlvbnNbJ3ZzJ10sJHRBLCR0QikuJGF0OwoJCQkJCQkkc2hvd3Jvd3NbXSA9ICRzdHI7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCSAvL25vIGJyZWFrIGhlcmUKCQkJCSBjYXNlIFRvdXJuZXk6OkFTT0ZUOgoJCQkJIGNhc2UgVG91cm5leTo6QUZJUk06CgkJCQkgCWlmKCEoJHRBIHx8ICR0QiB8fCAkbWRhdGFbJ3BsYXl3aGVuJ10pKQoJCQkJCQlicmVhazsKLy8JCQkJCQkkc3RyID0gJG1vZC0+TGFuZygnYW5vbmFub24nKTsgLy9UT0RPIEFvckIgdnMgQ29yRCwgb3IgcmVsZXZhbnQgcm91bmRuYW1lCi8vCQkJCQllbHNlCi8vCQkJCQl7CgkJCQkJCXN3aXRjaCgkYmRhdGFbJ3R5cGUnXSkKCQkJCQkJewoJCQkJCQkgY2FzZSBUb3VybmV5OjpLT1RZUEU6CgkJCQkJCQlpZigkdEEpCgkJCQkJCQl7CgkJCQkJCQkJaWYoJHRCKQoJCQkJCQkJCQkkcHJldiA9ICR0QjsKCQkJCQkJCQllbHNlCgkJCQkJCQkJewoJCQkJCQkJCQkkcHJldiA9ICRybmQtPk5hbWVkVGVhbXMoJG1vZCwkbWF0Y2hlcywkbWlkLCRtZGF0YVsndGVhbUEnXSk7CgkJCQkJCQkJCWlmKCEkcHJldikKCQkJCQkJCQkJewoJCQkJCQkJCQkgCSRsZXZlbCA9ICRybmQtPk1hdGNoTGV2ZWwoJHRjLCRtYXRjaGVzLCRtaWQpOwoJCQkJCQkJCQkJJHByZXYgPSAkbW9kLT5MYW5nKCdudW13aW5uZXInLCRybmQtPkxldmVsTmFtZSgkbW9kLCRiZGF0YSwkbGV2ZWwtMSwkbGV2ZWxtYXgpKTsKCQkJCQkJCQkJfQoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJCWVsc2VpZigkdEIpCgkJCQkJCQl7CgkJCQkJCQkJJHByZXYgPSAkcm5kLT5OYW1lZFRlYW1zKCRtb2QsJG1hdGNoZXMsJG1pZCwkbWRhdGFbJ3RlYW1CJ10pOwoJCQkJCQkJCWlmKCEkcHJldikKCQkJCQkJCQl7CgkJCQkJCQkJIAkkbGV2ZWwgPSAkcm5kLT5NYXRjaExldmVsKCR0YywkbWF0Y2hlcywkbWlkKTsKCQkJCQkJCQkJJHByZXYgPSAkbW9kLT5MYW5nKCdudW13aW5uZXInLCRybmQtPkxldmVsTmFtZSgkbW9kLCRiZGF0YSwkbGV2ZWwtMSwkbGV2ZWxtYXgpKTsKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCQllbHNlCgkJCQkJCQl7CgkJCQkJCQkgCSRsZXZlbCA9ICRybmQtPk1hdGNoTGV2ZWwoJHRjLCRtYXRjaGVzLCRtaWQpOwoJCQkJCQkJCSRuYW1lID0gJHJuZC0+TGV2ZWxOYW1lKCRtb2QsJGJkYXRhLCRsZXZlbC0xLCRsZXZlbG1heCk7CgkJCQkJCQl9CgkJCQkJCSAJYnJlYWs7CgkJCQkJCSBjYXNlIFRvdXJuZXk6OkRFVFlQRToKCQkJCQkJCWlmKCR0QSkKCQkJCQkJCXsKCQkJCQkJCQlpZigkdEIpCgkJCQkJCQkJCSRwcmV2ID0gJHRCOwoJCQkJCQkJCWVsc2UKCQkJCQkJCQl7CgkJCQkJCQkJIAkkbGV2ZWwgPSAkcm5kLT5NYXRjaExldmVsKCR0YywkbWF0Y2hlcywkbWlkKTsKCQkJCQkJCQkJJHByZXYgPSAkcm5kLT5OYW1lZFRlYW1zKCRtb2QsJHRjLCRtYXRjaGVzLCRtaWQsJGxldmVsLCRtZGF0YVsndGVhbUEnXSk7CgkJCQkJCQkJCWlmKCEkcHJldikKCQkJCQkJCQkJCSRwcmV2ID0gJHJuZC0+QW5vbkxldmVsTmFtZSgkbW9kLCRiZGF0YSwkdGMsJGxldmVsKTsKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCQllbHNlaWYoJHRCKQoJCQkJCQkJewoJCQkJCQkJIAkkbGV2ZWwgPSAkcm5kLT5NYXRjaExldmVsKCR0YywkbWF0Y2hlcywkbWlkKTsKCQkJCQkJCQkkcHJldiA9ICRybmQtPk5hbWVkVGVhbXMoJG1vZCwkdGMsJG1hdGNoZXMsJG1pZCwkbGV2ZWwsJG1kYXRhWyd0ZWFtQiddKTsKCQkJCQkJCQlpZighJHByZXYpCgkJCQkJCQkJCSRwcmV2ID0gJHJuZC0+QW5vbkxldmVsTmFtZSgkbW9kLCRiZGF0YSwkdGMsJGxldmVsKTsKCQkJCQkJCX0KCQkJCQkJIAllbHNlCgkJCQkJCQl7CgkJCQkJCQkgCSRsZXZlbCA9ICRybmQtPk1hdGNoTGV2ZWwoJHRjLCRtYXRjaGVzLCRtaWQpOwoJCQkJCQkJCSRuYW1lID0gJHJuZC0+QW5vbkxldmVsTmFtZSgkbW9kLCRiZGF0YSwkdGMsJGxldmVsKTsKCQkJCQkJCX0KCQkJCQkJCWJyZWFrOwoJCQkJCQkgY2FzZSBUb3VybmV5OjpSUlRZUEU6CgkJCQkJCQkkcHJldiA9ICRhbm9uOwoJCQkJCQkJJG5hbWUgPSAnJzsKCQkJCQkJCWJyZWFrOwoJCQkJCQkgZGVmYXVsdDoKCQkJCQkJCXJldHVybiAnZXJyX3ZhbHVlJzsKCQkJCQkJfQoJCQkJCQlpZigkdEEpCgkJCQkJCQkkc3RyID0gc3ByaW50ZigkcmVsYXRpb25zWyd2cyddLCR0QSwkcHJldik7CgkJCQkJCWVsc2VpZigkdEIpCgkJCQkJCQkkc3RyID0gc3ByaW50ZigkcmVsYXRpb25zWyd2cyddLCRwcmV2LCR0Qik7CgkJCQkJCWVsc2UKCQkJCQkJCSRzdHIgPSAkbmFtZTsKLy8JCQkJCX0KCQkJCQkkc3RyIC49ICRhdDsKCQkJCQkkc2hvd3Jvd3NbXSA9ICRzdHI7CgkJCQkgCWJyZWFrOwoJCQkJIGNhc2UgVG91cm5leTo6V09OQToKCQkJCQkkc2hvd3Jvd3NbXSA9IHNwcmludGYoJHJlbGF0aW9uc1snZGVmJ10sJHRBLCR0QikuJyAnLiRtZGF0YVsnc2NvcmUnXTsKCQkJCQlicmVhazsKCQkJCSBjYXNlIFRvdXJuZXk6OldPTkI6CgkJCQkJJHNob3dyb3dzW10gPSBzcHJpbnRmKCRyZWxhdGlvbnNbJ2RlZiddLCR0QiwkdEEpLicgJy4kbWRhdGFbJ3Njb3JlJ107CgkJCQkJYnJlYWs7CgkJCQkgY2FzZSBUb3VybmV5OjpGT1JGQToKCQkJCSAJJHN0ciA9ICgkbWRhdGFbJ3Njb3JlJ10pID8gJG1kYXRhWydzY29yZSddIDogJGJkYXRhWydmb3JmZWl0J107IC8vbWF5YmUgYSByZWFzb24KCQkJCQkkc2hvd3Jvd3NbXSA9IHNwcmludGYoJHJlbGF0aW9uc1snZGVmJ10sJHRCLCR0QSkuJyAnLiRzdHI7CgkJCQkJYnJlYWs7CgkJCQkgY2FzZSBUb3VybmV5OjpGT1JGQjoKCQkJCSAJJHN0ciA9ICgkbWRhdGFbJ3Njb3JlJ10pID8gJG1kYXRhWydzY29yZSddIDogJGJkYXRhWydmb3JmZWl0J107IAoJCQkJCSRzaG93cm93c1tdID0gc3ByaW50ZigkcmVsYXRpb25zWydkZWYnXSwkdEEsJHRCKS4nICcuJHN0cjsKCQkJCQlicmVhazsKCQkJCSBjYXNlIFRvdXJuZXk6Ok1USUVEOgoJCQkJCSRzaG93cm93c1tdID0gc3ByaW50ZigkcmVsYXRpb25zWyd0aWVkJ10sJHRBLCR0QikuJyAnLiRtZGF0YVsnc2NvcmUnXTsKCQkJCQlicmVhazsKCQkJCSBjYXNlIFRvdXJuZXk6Ok5PV0lOOgoJCQkJCSRzaG93cm93c1tdID0gc3ByaW50ZigkcmVsYXRpb25zWydub21hdGNoJ10sJHRBLCR0Qik7CgkJCQkJYnJlYWs7CgkJCQkgZGVmYXVsdDoKCQkJCQkkc2hvd3Jvd3NbXSA9IHNwcmludGYoJHJlbGF0aW9uc1sndnMnXSwkdEEsJHRCKS4nICcuJG1kYXRhWydzY29yZSddOwoJCQkJfQoJCQl9CgkJfQoJCWlmKCRzaG93cm93cykKCQkJcmV0dXJuICRzaG93cm93czsKCQlyZXR1cm4gJ25vbWF0Y2gnOwoJfQp9Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.tmtMail.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0KEMpIDIwMTQtMjAxNSBUb20gUGhhbmUgPHRwZ3d3QG9uZXBvc3QubmV0PgpSZWZlciB0byBsaWNlbmNlIGFuZCBvdGhlciBkZXRhaWxzIGF0IHRoZSB0b3Agb2YgZmlsZSBUb3VybmV5Lm1vZHVsZS5waHAKTW9yZSBpbmZvIGF0IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvdG91cm5leQoKRnVuY3Rpb25zIGludm9sdmVkIHdpdGggZW1haWwgY29tbXVuaWNhdGlvbnMKVGhpcyBjbGFzcyBpcyBub3Qgc3VpdGFibGUgZm9yIHN0YXRpYyBtZXRob2QtY2FsbGluZwoqLwpjbGFzcyB0bXRNYWlsCnsKCXByaXZhdGUgJG1scjsKCXByaXZhdGUgJGxvYWRlZDsKCglmdW5jdGlvbiBfX2NvbnN0cnVjdCgmJG1vZCkKCXsKCQkJJHRoaXMtPm1sciA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnQ01TTWFpbGVyJyk7IC8vbmV2ZXIgRkFMU0UsIGN1eiBjbGFzcyBjcmVhdGVkIGFmdGVyIGNoZWNrCgkJCSR0aGlzLT5sb2FkZWQgPSBGQUxTRTsKCX0KCgkvKioKCURvU2VuZDoKCVNlbmRzIGVtYWlsIG5vdGljZShzKSBhYm91dCBhIG1hdGNoCglAbW9kOiByZWZlcmVuY2UgdG8gY3VycmVudCBtb2R1bGUgb2JqZWN0CglAYmRhdGE6IHJlZmVyZW5jZSB0byBhcnJheSBvZiBicmFja2V0LXRhYmxlIGRhdGEKCUB0bzogYXJyYXkgb2YgJ1RvJyBkZXN0aW5hdGlvbnMuIEtleSA9IHJlY2lwaWVudCBuYW1lLCB2YWx1ZSA9IHZhbGlkYXRlZCBlbWFpbCBhZGRyZXNzCglAY2M6IGFycmF5IG9mICdDQycgZGVzdGluYXRpb25zLCBvciBGQUxTRS4gQXJyYXkga2V5ID0gcmVjaXBpZW50IG5hbWUsIHZhbHVlID0gdmFsaWRhdGVkIGVtYWlsIGFkZHJlc3MKCUB0cGw6IHNtYXJ0eSB0ZW1wbGF0ZSB0byB1c2UgZm9yIG1lc3NhZ2UgYm9keSAKCVJldHVybnM6IDItbWVtYmVyIGFycmF5IC0KCSBbMF0gRkFMU0UgaWYgbm8gYWRkcmVzc2VlIG9yIG5vIG1sciBtb2R1bGUsIG90aGVyd2lzZSBib29sZWFuIHJlc3VsdCBvZiBtbHItPlNlbmQoKQoJIFsxXSAnJyBvciBlcnJvciBtZXNzYWdlIGUuZy4gZnJvbSBtbHItPlNlbmQoKQoJKi8KCXByaXZhdGUgZnVuY3Rpb24gRG9TZW5kKCYkbW9kLCYkYmRhdGEsJHRvLCRjYywkdHBsKQoJewoJCWlmKCEoJHRvIHx8ICRjYykpCgkJCXJldHVybiBhcnJheShGQUxTRSwnJyk7CgkJaWYoISR0aGlzLT5tbHIpCgkJCXJldHVybiBhcnJheShGQUxTRSwkbW9kLT5MYW5nKCdlcnJfc3lzdGVtJykpOwoJCWlmKCEkdGhpcy0+bG9hZGVkKQoJCXsKCQkJJHRoaXMtPm1sci0+X2xvYWQoKTsKCQkJJHRoaXMtPmxvYWRlZCA9IFRSVUU7CgkJfQoKCQkkc3ViamVjdCA9ICRtb2QtPkxhbmcoJ3RvdXJuYW1lbnQnKS4nIC0gJy4kYmRhdGFbJ25hbWUnXTsKCQkkaHRtbCA9ICgkYmRhdGFbJ2h0bWwnXSA9PSAnMScpOwoKCQkkYm9keSA9ICRtb2QtPlByb2Nlc3NEYXRhVGVtcGxhdGUoJHRwbCk7CgkJaWYoJGh0bWwpCgkJewoJCQkvL1BIUCBpcyBiYWQgYXQgc2V0dGluZyBzdWl0YWJsZSBsaW5lLWJyZWFrczsKCQkJJGJvZHkyID0gc3RyX3JlcGxhY2UoYXJyYXkoJzxiciAvPjxiciAvPicsJzxiciAvPicsJzxicj48YnI+JywnPGJyPicpLAoJCQkJYXJyYXkoJycsJycsJycsJycpLCRib2R5KTsKCQkJJGJvZHkyID0gc3RyaXBfdGFncyhodG1sX2VudGl0eV9kZWNvZGUoJGJvZHkyKSk7CgkJfQovL1RPRE8JY29uZm9ybSBtZXNzYWdlIGVuY29kaW5nIHRvICRtbHItPkNoYXJTZXQKCgkJJG0gPSAkdGhpcy0+bWxyOwoJCSRtLT5yZXNldCgpOwoJCWlmKCR0bykKCQl7CgkJCWZvcmVhY2goJHRvIGFzICRuYW1lPT4kYWRkcmVzcykKCQkJCSRtLT5BZGRBZGRyZXNzKCRhZGRyZXNzLCRuYW1lKTsKCQkJaWYoJGNjKQoJCQkJZm9yZWFjaCgkY2MgYXMgJG5hbWU9PiRhZGRyZXNzKQoJCQkJCSRtLT5BZGRDQygkYWRkcmVzcywkbmFtZSk7CgkJCWlmKCFhcnJheV9rZXlfZXhpc3RzKCRiZGF0YVsnb3duZXInXSwkdG8pKQoJCQkJJG0tPlNldEZyb21OYW1lKCRiZGF0YVsnb3duZXInXSk7CgkJfQoJCWVsc2VpZigkY2MpCgkJCWZvcmVhY2goJGNjIGFzICRuYW1lPT4kYWRkcmVzcykKCQkJCSRtLT5BZGRBZGRyZXNzKCRhZGRyZXNzLCRuYW1lKTsKLy9pZiBkZWZhdWx0IHNlbmRlciBpc24ndCB3YW50ZWQgJG0tPlNldEZyb20oKTsKCQkkbS0+U2V0U3ViamVjdCgkc3ViamVjdCk7CgkJJG0tPklzSFRNTCgkaHRtbCk7CgkJaWYoJGh0bWwpCgkJewoJCQkkbS0+U2V0Qm9keSgkYm9keSk7CgkJCSRtLT5TZXRBbHRCb2R5KCRib2R5Mik7CgkJfQoJCWVsc2UKCQl7CgkJCSRtLT5TZXRCb2R5KGh0bWxfZW50aXR5X2RlY29kZSgkYm9keSkpOwoJCX0KCQkkcmVzID0gJG0tPlNlbmQoKTsKCQkkZXJyID0gKCRyZXMpID8gJycgOiAkbS0+R2V0RXJyb3JJbmZvKCk7CgkJJG0tPnJlc2V0KCk7CgkJcmV0dXJuIGFycmF5KCRyZXMsJGVycik7Cgl9CgoJLyoqCglHZXRUZWFtQ29udGFjdHM6CglAdGVhbV9pZDogZW51bWVyYXRvciBvZiB0ZWFtIGJlaW5nIHByb2Nlc3NlZAoJQGZpcnN0OiB3aGV0aGVyIHRvIG9ubHkgdHJ5IGZvciB0aGUgZmlyc3QgcmVsZXZhbnQgZW1haWwgYWRkcmVzcywgb3B0aW9uYWwsIGRlZmF1bHQgPSBGQUxTRQoJUmV0dXJuczogYXJyYXksIG9yIEZBTFNFLiBBcnJheSBtZW1iZXJzJyBrZXkgPSBjb250YWN0IG5hbWUsIHZhbHVlID0gdmFsaWRhdGVkIGVtYWlsIGFkZHJlc3MKCSovCglwcml2YXRlIGZ1bmN0aW9uIEdldFRlYW1Db250YWN0cygkdGVhbV9pZCwkZmlyc3Q9RkFMU0UpCgl7CgkJJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCQkkcHJlZiA9IGNtc19kYl9wcmVmaXgoKTsKCQkkc3FsID0gJ1NFTEVDVCBuYW1lLGNvbnRhY3QgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X3Blb3BsZSBXSEVSRSBpZD0/IEFORCBmbGFncyE9MiBPUkRFUiBCWSBkaXNwbGF5b3JkZXInOwoJCSRtZW1iZXJzID0gJGRiLT5HZXRBbGwoJHNxbCxhcnJheSgkdGVhbV9pZCkpOwoJCWlmKCRtZW1iZXJzKQoJCXsKCQkJaWYoISRmaXJzdCkKCQkJewoJCQkJJHNxbCA9ICdTRUxFQ1QgY29udGFjdGFsbCBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfdGVhbXMgV0hFUkUgdGVhbV9pZD0/JzsKCQkJCSRhbGwgPSAkZGItPkdldE9uZSgkc3FsLGFycmF5KCR0ZWFtX2lkKSk7CgkJCQlpZighJGFsbCkKCQkJCQkkZmlyc3QgPSBUUlVFOwoJCQl9CgkJCSRzZW5kcyA9IGFycmF5KCk7CgkJCWZvcmVhY2goJG1lbWJlcnMgYXMgJG9uZSkKCQkJewoJCQkJJGNsZWFuID0gc2VsZjo6VmFsaWRhdGVBZGRyZXNzKCRvbmVbJ2NvbnRhY3QnXSk7CgkJCQlpZigkY2xlYW4pCgkJCQl7CgkJCQkJJHNlbmRzWyRvbmVbJ25hbWUnXV0gPSAkY2xlYW47CgkJCQkJaWYoJGZpcnN0KQoJCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCQlyZXR1cm4gJHNlbmRzOwoJCX0KCQlyZXR1cm4gRkFMU0U7Cgl9CgoJLyoqCglWYWxpZGF0ZUFkZHJlc3M6CglDaGVjayB0aGF0IEBhZGRyZXNzIGxvb2tzIHJvdWdobHkgbGlrZSBhIHZhbGlkIGVtYWlsIGFkZHJlc3MKCVRyaWVzIHRvIHVzZSBQSFAoNS4yKykgYnVpbHQtaW4gdmFsaWRhdG9yLCByZXZlcnRzIHRvIGEgcmVhc29uYWJseSBjb21wZXRlbnQKCXJlZ2V4IHZhbGlkYXRvci4gQ29uZm9ybXMgYXBwcm94aW1hdGVseSB0byBSRkMyODIyLgoJU291cmNlZCBmcm9tIENNU01haWxlciBtb2R1bGUuCglAYWRkcmVzczogb25lLCBvciBhIGNvbW1hLXNlcGFyYXRlZCBzZXJpZXMgb2YsIGFkZHJlc3MoZXMpIHRvIGNoZWNrCglSZXR1cm5zOiBhIHRyaW1tZWQgdmFsaWQgZW1haWwgYWRkcmVzcywgb3IgYXJyYXkgb2YgdGhlbSwgb3IgRkFMU0UKCSovCglwdWJsaWMgZnVuY3Rpb24gVmFsaWRhdGVBZGRyZXNzKCRhZGRyZXNzKQoJewoJCSRpbnRlcm5hbCA9IGZ1bmN0aW9uX2V4aXN0cygnZmlsdGVyX3ZhcicpOyAvL1BIUCA1LjIrCgkJaWYoISRpbnRlcm5hbCkKCQkJJHBhdHRlcm4gPSAnL14oPzpbXHdcIVwjXCRcJVwmXCdcKlwrXC1cL1w9XD9cXlxgXHtcfFx9XH5dK1wuKSpbXHdcIVwjXCRcJVwmXCdcKlwrXC1cL1w9XD9cXlxgXHtcfFx9XH5dK0AoPzooPzooPzpbYS16QS1aMC05X10oPzpbYS16QS1aMC05X1wtXSg/IVwuKSl7MCw2MX1bYS16QS1aMC05Xy1dP1wuKStbYS16QS1aMC05X10oPzpbYS16QS1aMC05X1wtXSg/ISQpKXswLDYxfVthLXpBLVowLTlfXT8pfCg/OlxbKD86KD86WzAxXT9cZHsxLDJ9fDJbMC00XVxkfDI1WzAtNV0pXC4pezN9KD86WzAxXT9cZHsxLDJ9fDJbMC00XVxkfDI1WzAtNV0pXF0pKSQvJzsKCQlpZihzdHJwb3MoJGFkZHJlc3MsJywnKSA9PT0gRkFMU0UpCgkJewoJCQkkYWRkcmVzcyA9IHRyaW0oJGFkZHJlc3MpOwoJCQlpZigkaW50ZXJuYWwpCgkJCXsKCQkJCWlmKGZpbHRlcl92YXIoJGFkZHJlc3MsRklMVEVSX1ZBTElEQVRFX0VNQUlMKSAhPT0gRkFMU0UpCgkJCQkJcmV0dXJuICRhZGRyZXNzOwoJCQl9CgkJCWVsc2VpZihwcmVnX21hdGNoKCRwYXR0ZXJuLCRhZGRyZXNzKSkKCQkJCXJldHVybiAkYWRkcmVzczsKCQl9CgkJZWxzZQoJCXsKCQkJJHBhcnRzID0gZXhwbG9kZSgnLCcsJGFkZHJlc3MpOwoJCQkkYWRkcmVzcyA9IGFycmF5KCk7CgkJCWZvcmVhY2goJHBhcnRzIGFzICRvbmUpCgkJCXsKCQkJCSRvbmUgPSB0cmltKCRvbmUpOwoJCQkJaWYoJGludGVybmFsKQoJCQkJewoJCQkJCWlmKGZpbHRlcl92YXIoJG9uZSxGSUxURVJfVkFMSURBVEVfRU1BSUwpICE9PSBGQUxTRSkKCQkJCQkJJGFkZHJlc3NbXSA9ICRvbmU7CgkJCQl9CgkJCQllbHNlaWYocHJlZ19tYXRjaCgkcGF0dGVybiwkb25lKSkKCQkJCQkkYWRkcmVzc1tdID0gJG9uZTsKCQkJfQoJCQlpZigkYWRkcmVzcykKCQkJCXJldHVybiAkYWRkcmVzczsKCQl9CgkJcmV0dXJuIEZBTFNFOwoJfQoKCS8qKgoJVGVsbE93bmVyOgoJU2VuZHMgZW1haWwgdG8gdG91cm5hbWVudCBvd25lciBpZiBwb3NzaWJsZSwgYW5kIHRoZW4gd2l0aCBjYyB0byBvbmUgbWVtYmVyIG9mIGJvdGggdGVhbXMgaW4gdGhlIG1hdGNoCglAbW9kOiByZWZlcmVuY2UgdG8gY3VycmVudCBtb2R1bGUgb2JqZWN0CglAc21hcnR5OiByZWZlcmVuY2UgdG8gQ01TTVMgc21hcnR5IG9iamVjdAoJQGJkYXRhOiByZWZlcmVuY2UgdG8gYXJyYXkgb2YgYnJhY2tldC10YWJsZSBkYXRhCglAbWRhdGE6IHJlZmVyZW5jZSB0byBhcnJheSBvZiBtYXRjaCBkYXRhIChmcm9tIHdoaWNoIHdlIG5lZWQgJ3RlYW1BJywgJ3RlYW1CJykKCUBsaW5lczogYXJyYXkgb2YgbGluZXMgZm9yIG1lc3NhZ2UgYm9keQoJUmV0dXJuczogMi1tZW1iZXIgYXJyYXkgLQoJIFswXSBUUlVFfEZBTFNFIHJlcHJlc2VudGluZyBzdWNjZXNzCgkgWzFdICcnIG9yIHNwZWNpZmljIGZhaWx1cmUgbWVzc2FnZQoJKi8KCXB1YmxpYyBmdW5jdGlvbiBUZWxsT3duZXIoJiRtb2QsJiRzbWFydHksJiRiZGF0YSwmJG1kYXRhLCRsaW5lcykKCXsKCQkvL293bmVyCgkJJGNsZWFuID0gc2VsZjo6VmFsaWRhdGVBZGRyZXNzKCRiZGF0YVsnY29udGFjdCddKTsKCQlpZigkY2xlYW4pCgkJCSR0b1skYmRhdGFbJ293bmVyJ11dID0gJGNsZWFuOwoJCWVsc2UKCQkJcmV0dXJuIGFycmF5KEZBTFNFLCcnKTsgLy9zaWxlbnQsIHRyeSBhbm90aGVyIGNoYW5uZWwKCQkvL3RlYW1zCgkJJGNjID0gYXJyYXkoKTsKCQkkdGlkID0gKGludCkkbWRhdGFbJ3RlYW1BJ107CgkJaWYoJHRpZCA+IDApCgkJewoJCQkkbW9yZSA9IHNlbGY6OkdldFRlYW1Db250YWN0cygkdGlkLFRSVUUpOwoJCQlpZigkbW9yZSkKCQkJCSRjYyA9ICRjYyArICRtb3JlOwoJCX0KCQkkdGlkID0gKGludCkkbWRhdGFbJ3RlYW1CJ107CgkJaWYoJHRpZCA+IDApCgkJewoJCQkkbW9yZSA9IHNlbGY6OkdldFRlYW1Db250YWN0cygkdGlkLFRSVUUpOwoJCQlpZigkbW9yZSkKCQkJCSRjYyA9ICRjYyArICRtb3JlOwoJCX0KCQkvL3N1Ym1pdHRlZCBkYXRhCgkJJHNlcCA9ICgkYmRhdGFbJ2h0bWwnXSkgPyAnPGJyPicgOiAiXG4iOwoJCSRzbWFydHktPmFzc2lnbigncmVwb3J0JyxpbXBsb2RlKCRzZXAsJGxpbmVzKSk7CgoJCSR0cGwgPSAkbW9kLT5HZXRUZW1wbGF0ZSgnbWFpbGluXycuJGJkYXRhWydicmFja2V0X2lkJ10uJ190ZW1wbGF0ZScpOwoJCWlmKCR0cGwgPT0gRkFMU0UpCgkJCSR0cGwgPSAkbW9kLT5HZXRUZW1wbGF0ZSgnbWFpbGluX2RlZmF1bHRfdGVtcGxhdGUnKTsKCQlyZXR1cm4gc2VsZjo6RG9TZW5kKCRtb2QsJGJkYXRhLCR0bywkY2MsJHRwbCk7Cgl9CgoJLyoqCglUZWxsVGVhbXM6CglTZW5kcyBlbWFpbCB0byBvbmUgb3IgYWxsIG1lbWJlcnMgb2YgYm90aCB0ZWFtcyBpbiB0aGUgbWF0Y2gsIHdpdGggY2MgdG8gdGhlIG93bmVyCglAbW9kOiByZWZlcmVuY2UgdG8gY3VycmVudCBtb2R1bGUgb2JqZWN0CglAc21hcnR5OiByZWZlcmVuY2UgdG8gQ01TTVMgc21hcnR5IG9iamVjdAoJQGJkYXRhOiByZWZlcmVuY2UgdG8gYXJyYXkgb2YgYnJhY2tldC10YWJsZSBkYXRhCglAbWRhdGE6IHJlZmVyZW5jZSB0byBhcnJheSBvZiBtYXRjaCBkYXRhIChmcm9tIHdoaWNoIHdlIG5lZWQgJ3RlYW1BJywgJ3RlYW1CJykKCUB0cGw6IGVudW0gZm9yIHR5cGUgb2YgbWVzc2FnZTogMSA9IGFubm91bmNlbWVudCwgMiA9IGNhbmNlbGxhdGlvbiwgMyA9IHNjb3JlLXJlcXVlc3QKCUBmaXJzdDogVFJVRSB0byBzZW5kIG9ubHkgdG8gZmlyc3QgcmVjb2duaXNlZCBhZGRyZXNzLCBGQUxTRSB0byBzZW5kIHBlcgoJCXRoZSB0ZWFtcycgcmVzcGVjdGl2ZSBjb250YWN0YWxsIHNldHRpbmdzLCBvcHRpb25hbCwgZGVmYXVsdCBGQUxTRQoJUmV0dXJuczogMi1tZW1iZXIgYXJyYXkgLQoJIFswXSBUUlVFfEZBTFNFIHJlcHJlc2VudGluZyBzdWNjZXNzLCBvciBUUlVFIGlmIG5vYm9keSB0byBzZW5kIHRvCgkgWzFdICcnIG9yIHNwZWNpZmljIGZhaWx1cmUgbWVzc2FnZQoJKi8KCXB1YmxpYyBmdW5jdGlvbiBUZWxsVGVhbXMoJiRtb2QsJiRzbWFydHksJiRiZGF0YSwmJG1kYXRhLCR0cGwsJGZpcnN0PUZBTFNFKQoJewoJCXN3aXRjaCgkdHBsKQoJCXsKCQkgY2FzZSAxOgoJCQkkdHBsID0gJG1vZC0+R2V0VGVtcGxhdGUoJ21haWxvdXRfJy4kYmRhdGFbJ2JyYWNrZXRfaWQnXS4nX3RlbXBsYXRlJyk7CgkJCWlmKCR0cGwgPT0gRkFMU0UpCgkJCQkkdHBsID0gJG1vZC0+R2V0VGVtcGxhdGUoJ21haWxvdXRfZGVmYXVsdF90ZW1wbGF0ZScpOwoJCQlicmVhazsKCQkgY2FzZSAyOgoJCQkkdHBsID0gJG1vZC0+R2V0VGVtcGxhdGUoJ21haWxjYW5jZWxfJy4kYmRhdGFbJ2JyYWNrZXRfaWQnXS4nX3RlbXBsYXRlJyk7CgkJCWlmKCR0cGwgPT0gRkFMU0UpCgkJCQkkdHBsID0gJG1vZC0+R2V0VGVtcGxhdGUoJ21haWxjYW5jZWxfZGVmYXVsdF90ZW1wbGF0ZScpOwoJCQlicmVhazsKCQkgY2FzZSAzOgoJCQkkdHBsID0gJG1vZC0+R2V0VGVtcGxhdGUoJ21haWxyZXF1ZXN0XycuJGJkYXRhWydicmFja2V0X2lkJ10uJ190ZW1wbGF0ZScpOwoJCQlpZigkdHBsID09IEZBTFNFKQoJCQkJJHRwbCA9ICRtb2QtPkdldFRlbXBsYXRlKCdtYWlscmVxdWVzdF9kZWZhdWx0X3RlbXBsYXRlJyk7CgkJCWJyZWFrOwoJCX0KCgkJJGNsZWFuID0gc2VsZjo6VmFsaWRhdGVBZGRyZXNzKCRiZGF0YVsnY29udGFjdCddKTsKCQkkY2MgPSAoJGNsZWFuKSA/IGFycmF5KCRiZGF0YVsnb3duZXInXT0+JGNsZWFuKSA6IEZBTFNFOwoJCSRlcnIgPSAnJzsKCQkkcmVzQSA9IFRSVUU7IC8vd2UncmUgb2sgaWYgbm90aGluZyBzZW50CgkJJHRpZCA9IChpbnQpJG1kYXRhWyd0ZWFtQSddOwoJCWlmKCR0aWQgPiAwKQoJCXsKCQkJJHRvID0gc2VsZjo6R2V0VGVhbUNvbnRhY3RzKCR0aWQsJGZpcnN0KTsKCQkJaWYoJHRvKQoJCQl7CgkJCQlyZXNldCgkdG8pOwoJCQkJJHNtYXJ0eS0+YXNzaWduKCdyZWNpcGllbnQnLGtleSgkdG8pKTsKCQkJCSR0YyA9IGNvdW50KCR0byk7CgkJCQkkdG9hbGwgPSAoKCRiZGF0YVsndGVhbXNpemUnXSA8IDIgJiYgJHRjID4gMCkgfHwgJHRjID4gMSk7CgkJCQkkc21hcnR5LT5hc3NpZ24oJ3RvYWxsJywkdG9hbGwpOwoJCQkJaWYgKChpbnQpJG1kYXRhWyd0ZWFtQiddID4gMCkKCQkJCQkkb3AgPSAkbW9kLT5UZWFtTmFtZSgkbWRhdGFbJ3RlYW1CJ10pOwoJCQkJZWxzZQoJCQkJewovKgkJCQlzd2l0Y2goJGJkYXRhWyd0eXBlJ10pCgkJCQkJewoJCQkJCSBjYXNlIFRvdXJuZXk6OktPVFlQRToKCQkJCQkJJG9wID0gJG1vZC0+TGFuZygnYW5vbndpbm5lcicpOwoJCQkJCQlicmVhazsKCQkJCQkgZGVmYXVsdDoKCQkJCQkJJG9wID0gJG1vZC0+TGFuZygnYW5vbm90aGVyJyk7CgkJCQkJICBicmVhazsKCQkJCQl9CiovCgkJCQkJJG9wID0gJyc7CgkJCQl9CgkJCQkkc21hcnR5LT5hc3NpZ24oJ29wcG9uZW50Jywkb3ApOwoJCQkJbGlzdCgkcmVzQSwkbXNnKSA9IHNlbGY6OkRvU2VuZCgkbW9kLCRiZGF0YSwkdG8sJGNjLCR0cGwpOwoJCQkJaWYoISRyZXNBKQoJCQkJewoJCQkJCWlmKCEkbXNnKQoJCQkJCQkkbXNnID0gJG1vZC0+TGFuZygnZXJyX25vdGljZScpOwoJCQkJCSRlcnIgLj0gJG1vZC0+VGVhbU5hbWUoJHRpZCkuJzogJy4kbXNnOwoJCQkJfQoJCQl9CgkJfQoJCQoJCSRyZXNCID0gVFJVRTsKCQkkdGlkID0gKGludCkkbWRhdGFbJ3RlYW1CJ107CgkJaWYoJHRpZCA+IDApCgkJewoJCQkkdG8gPSBzZWxmOjpHZXRUZWFtQ29udGFjdHMoJHRpZCwkZmlyc3QpOwoJCQlpZigkdG8pCgkJCXsKCQkJCXJlc2V0KCR0byk7CgkJCQkkc21hcnR5LT5hc3NpZ24oJ3JlY2lwaWVudCcsa2V5KCR0bykpOwoJCQkJJHRjID0gY291bnQoJHRvKTsKCQkJCSR0b2FsbCA9ICgoJGJkYXRhWyd0ZWFtc2l6ZSddIDwgMiAmJiAkdGMgPiAwKSB8fCAkdGMgPiAxKTsKCQkJCSRzbWFydHktPmFzc2lnbigndG9hbGwnLCR0b2FsbCk7CgkJCQlpZiAoKGludCkkbWRhdGFbJ3RlYW1BJ10gPiAwKQoJCQkJCSRvcCA9ICRtb2QtPlRlYW1OYW1lKCRtZGF0YVsndGVhbUEnXSk7CgkJCQllbHNlCgkJCQl7Ci8qCQkJCXN3aXRjaCgkYmRhdGFbJ3R5cGUnXSkKCQkJCQl7CgkJCQkJIGNhc2UgVG91cm5leTo6S09UWVBFOgoJCQkJCQkkb3AgPSAkbW9kLT5MYW5nKCdhbm9ud2lubmVyJyk7CgkJCQkJCWJyZWFrOwoJCQkJCSBkZWZhdWx0OgoJCQkJCQkkb3AgPSAkbW9kLT5MYW5nKCdhbm9ub3RoZXInKTsKCQkJCQkgIGJyZWFrOwoJCQkJCX0KKi8KCQkJCQkkb3AgPSAnJzsKCQkJCX0KCQkJCSRzbWFydHktPmFzc2lnbignb3Bwb25lbnQnLCRvcCk7CgkJCQlsaXN0KCRyZXNCLCRtc2cpID0gc2VsZjo6RG9TZW5kKCRtb2QsJGJkYXRhLCR0bywkY2MsJHRwbCk7CgkJCQlpZighJHJlc0IpCgkJCQl7CgkJCQkJaWYoJGVycikgJGVyciAuPSAnPGJyIC8+JzsKCQkJCQlpZighJG1zZykKCQkJCQkJJG1zZyA9ICRtb2QtPkxhbmcoJ2Vycl9ub3RpY2UnKTsKCQkJCQkkZXJyIC49ICRtb2QtPlRlYW1OYW1lKCR0aWQpLic6ICcuJG1zZzsKCQkJCX0KCQkJfQoJCX0KCQlpZigkcmVzQSAmJiAkcmVzQikKCQkJcmV0dXJuIGFycmF5KFRSVUUsJycpOwoJCXJldHVybiBhcnJheShGQUxTRSwkZXJyKTsKCX0KfQoKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/class.tmtRoundsDE.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0KEMpIDIwMTQtMjAxNSBUb20gUGhhbmUgPHRwZ3d3QG9uZXBvc3QubmV0PgpSZWZlciB0byBsaWNlbmNlIGFuZCBvdGhlciBkZXRhaWxzIGF0IHRoZSB0b3Agb2YgZmlsZSBUb3VybmV5Lm1vZHVsZS5waHAKTW9yZSBpbmZvIGF0IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvdG91cm5leQoqLwpjbGFzcyB0bXRSb3VuZHNERQp7CgkvKiAqCglMZXZlbFZhbHM6CglAdGVhbXNjb3VudDogTm8uIG9mIHRlYW1zIGluIHRoZSBicmFja2V0CglNaWQgaXMgZmlyc3QgYmFuZCBvZiBsb3NlcnMnIGRyYXcsIG1heCBpZCBiYW5kIG9mIGZpbmFsLgoJUmV0dXJuczogYXJyYXkgd2l0aCBtaWQsbWF4IGJhbmQgdmFsdWVzIGZvciBERSBjb21wIHdpdGggQHRlYW1zY291bnQgcGFydGljaXBhbnRzLgoJKi8KLyoJZnVuY3Rpb24gTGV2ZWxWYWxzKCR0ZWFtc2NvdW50KQoJewoJCS8vbm8uIG9mIGxldmVscyBpbiB0aGUgd2lubmVycycgZHJhdyBpbmNsLiBzZW1pLWZpbmFsCgkJJGkgPSAoKGxvZygkdGVhbXNjb3VudCwyKS0wLjAwMDEpfDApICsgMTsgLy9jZWlsLWVxdWl2YWxlbnQKCQlyZXR1cm4gYXJyYXkoJGkgKyAxLCAkaSozIC0gMSk7IC8vbWlkPWkrMSwgbWF4PTNpLTEKCX0KKi8KCS8qKgoJTWF0Y2hMZXZlbDoKCUB0ZWFtc2NvdW50OiBOby4gb2YgdGVhbXMgaW4gdGhlIGJyYWNrZXQKCUBtYXRjaGVzOiBhcnJheSBvZiBhbGwgbWF0Y2hlcycgZGF0YSBmb3IgYSBicmFja2V0LAoJIHNvcnRlZCBieSBtYXRjaF9pZCBoZW5jZSBpbmNyZWFzaW5nIGxldmVsLW9yZGVyCglAbWlkOiBpZGVudGlmaWVyIG9mIG1hdGNoIGJlaW5nIHByb2Nlc3NlZCwgYSBrZXkgaW4gQG1hdGNoZXMKCSovCglmdW5jdGlvbiBNYXRjaExldmVsKCR0ZWFtc2NvdW50LCRtYXRjaGVzLCRtaWQpCgl7CgkJJGlkcyA9IGFycmF5X2tleXMoJG1hdGNoZXMpOwoJCSRvZmZzZXQgPSBhcnJheV9zZWFyY2goJG1pZCwkaWRzKTsKCQkvL25vLiBvZiBsZXZlbHMgaW4gdGhlIHdpbm5lcnMnIGRyYXcgaW5jbC4gc2VtaS1maW5hbAoJCSRpID0gKChsb2coJHRlYW1zY291bnQsMiktMC4wMDAxKXwwKSArIDE7IC8vY2VpbC1lcXVpdmFsZW50CgkJJGJjID0gcG93KDIsJGkpOyAvL3dpbm5lcnMnIGRyYXcgbWF0Y2hlcyBjb3VudCArIDEKCQlpZiAoJG9mZnNldCA8ICRiYykKCQl7CgkJCS8vd2lubmVycycgZHJhdyB0byBzZW1pLWZpbmFsCgkJCSRiYyAvPSAyOyAvLzFzdCByb3VuZCBtYXRjaGVzIGNvdW50CgkJCSRtY291bnQgPSAkYmMgLSAxOyAvL2xhc3QgbWF0Y2ggaW4gMXN0IHJvdW5kCgkJCSRsdmwgPSAxOwoJCQl3aGlsZSgkbWNvdW50IDwgJG9mZnNldCkKCQkJewoJCQkJJGJjIC89IDI7CgkJCQkkbWNvdW50ICs9ICRiYzsKCQkJCSRsdmwrKzsKCQkJfQoJCQlyZXR1cm4gJGx2bDsKCQl9CgkJJG1jb3VudCA9ICRiYyAtIDE7IC8vb2Zmc2V0IG9mIDFzdCBtYXRjaCBpbiAxc3QgbG9zZXJzJyBkcmF3IHJvdW5kCgkJJGJjIC89IDI7IC8vMXN0ICsgMm5kIGxvc2VycycgZHJhdyBtYXRjaGVzIGNvdW50CgkJJG1jb3VudCArPSAkYmMgLSAxOyAvL2xhc3QgbWF0Y2ggaW4gMm5kIGxvc2VycycgZHJhdyByb3VuZAoJCSRsdmwgPSAkaSArIDE7IC8vMXN0IGxvc2VycycgZHJhdyByb3VuZAoJCXdoaWxlKCRtY291bnQgPCAkb2Zmc2V0KQoJCXsKCQkJJGJjIC89IDI7CgkJCSRtY291bnQgKz0gJGJjOwoJCQkkbHZsICs9IDI7CgkJfQoJCWlmICgkYmMgPiAxICYmICRtY291bnQgPCAoJG9mZnNldCArICRiYy8yKSkKCQkJJGx2bCsrOwoJCXJldHVybiAkbHZsOwoJfQoKCS8qKgoJTWF0Y2hUZWFtSURfVGVhbToKCUBtb2Q6IHJlZmVyZW5jZSB0byBjdXJyZW50IFRvdXJuZXkgbW9kdWxlCglAYmRhdGE6IHJlZmVyZW5jZSB0byBhcnJheSBvZiBicmFja2V0cy10YWJsZSBkYXRhCglAdGVhbXNjb3VudDogbm8uIG9mIHRlYW1zIGluIHRoZSBicmFja2V0CglAbWF0Y2hlczogcmVmZXJlbmNlIHRvIGFycmF5IG9mIGFsbCBtYXRjaGVzJyBkYXRhIGZyb20gdGFibGUgcXVlcnkgKHNvIHdlIHphcCBpbnRlcm5hbCBwb2ludGVyIGZvciB1cHN0cmVhbSBhcnJheSkKCUBtaWQ6IGlkZW50aWZpZXIgb2YgbWF0Y2ggYmVpbmcgcHJvY2Vzc2VkCglAbGV2ZWw6IGJyYWNrZXQgJ2xldmVsJyBjLmYuIHJvdW5kIDEsIHJvdW5kIDIgLi4uCglAbm90OiBvcHRpb25hbCwgZW51bWVyYXRvciBvZiB0ZWFtIHdoaWNoIGlzIGFscmVhZHkga25vd24gKG9yIE5VTEwpIHNvIGRvbid0IGZpbmQgdGhpcwoJUmV0dXJuczogdGVhbSBpZGVudGlmaWVyIHN0cmluZywgaW5jbHVkaW5nIG1hdGNoIG51bWJlciBpZiBwb3NzaWJsZSwgb3RoZXJ3aXNlIGdlbmVyaWMKCSovCglmdW5jdGlvbiBNYXRjaFRlYW1JRF9UZWFtKCYkbW9kLCYkYmRhdGEsJHRlYW1zY291bnQsJiRtYXRjaGVzLCRtaWQsJGxldmVsLCRub3Q9RkFMU0UpCgl7CgkJJGkgPSAoKGxvZygkdGVhbXNjb3VudCwyKS0wLjAwMDEpfDApICsgMTsgLy9jZWlsLWVxdWl2YWxlbnQKCQkkQk0gPSAkaSArIDE7CgkJJEJGID0gJGkqMyAtIDE7CgkJaWYoJGxldmVsID09ICRCTSkgLy9maXJzdCBsb3NlcnMtZHJhdyBiYW5kCgkJewoJCQkvL2xvb2sgZm9yIHByZXZpb3VzIGxvc2VyCgkJCWZvcmVhY2goJG1hdGNoZXMgYXMgJGlkPT4kbWRhdGEpCgkJCXsKCQkJCWlmKCRtZGF0YVsnbmV4dGxtJ10gPT0gJG1pZCAmJiAhKCRub3QgJiYgKCRtZGF0YVsndGVhbUEnXSA9PSAkbm90IHx8ICRtZGF0YVsndGVhbUInXSA9PSAkbm90KSkpCgkJCQl7CgkJCQkJaWYoJG1kYXRhWyd0ZWFtQSddICE9IC0xICYmICRtZGF0YVsndGVhbUInXSAhPSAtMSkKCQkJCQkJcmV0dXJuICRtb2QtPkxhbmcoJ251bWxvc2VyJywkbW9kLT5MYW5nKCdtYXRjaG51bScsJGlkKSk7CgkJCQkJcmV0dXJuICRiZGF0YVsnYnllJ107CgkJCQl9CgkJCX0KCQkJcmV0dXJuICRtb2QtPkxhbmcoJ2Fub25sb3NlcicpOwoJCX0KCQllbHNlaWYoJGxldmVsIDwgJEJNIHx8ICRsZXZlbCA9PSAkQkYgfHwgKCRsZXZlbC0kQk0pJTI9PTApCgkJewoJCS8qCXdpbm5lcnMtZHJhdyBiYW5kLCBpbmNsdWRpbmcgc2VtaS1maW5hbAoJCQlsb3NlcnMtZHJhdyBiYW5kIHdoZXJlIG1hdGNoKGVzKSBoYXZlIG9ubHkgcHJldmlvdXMgd2lubmVycyBmcm9tIGxvc2VycyBkcmF3CgkJCWZpbmFsICovCgkJCS8vbG9vayBmb3IgcHJldmlvdXMgd2lubmVyCgkJCWZvcmVhY2goJG1hdGNoZXMgYXMgJGlkPT4kbWRhdGEpCgkJCXsKCQkJCWlmKCRtZGF0YVsnbmV4dG0nXSA9PSAkbWlkICYmICEoJG5vdCAmJiAoJG1kYXRhWyd0ZWFtQSddID09ICRub3QgfHwgJG1kYXRhWyd0ZWFtQiddID09ICRub3QpKSkKCQkJCQlyZXR1cm4gJG1vZC0+TGFuZygnbnVtd2lubmVyJywkbW9kLT5MYW5nKCdtYXRjaG51bScsJGlkKSk7CgkJCX0KCQkJcmV0dXJuICRtb2QtPkxhbmcoJ2Fub253aW5uZXInKTsKCQl9CgkJZWxzZSAvL2xvc2Vycy1kcmF3IGJhbmQgd2hlcmUgbWF0Y2goZXMpIGhhdmUgcHJldmlvdXMgbG9zZXIgYW5kIHByZXZpb3VzIHdpbm5lcgoJCXsKCQkJLy9sb29rIGZvciBwcmV2aW91cyBsb3NlciBvciB3aW5uZXIKCQkJZm9yZWFjaCgkbWF0Y2hlcyBhcyAkaWQ9PiRtZGF0YSkKCQkJewoJCQkJaWYoJG1kYXRhWyduZXh0bG0nXSA9PSAkbWlkICYmICEoJG5vdCAmJiAoJG1kYXRhWyd0ZWFtQSddID09ICRub3QgfHwgJG1kYXRhWyd0ZWFtQiddID09ICRub3QpKSkKCQkJCXsKCQkJCQlpZighKCRtZGF0YVsndGVhbUEnXSA9PSAtMSB8fCAkbWRhdGFbJ3RlYW1CJ10gPT0gLTEpKQoJCQkJCQlyZXR1cm4gJG1vZC0+TGFuZygnbnVtbG9zZXInLCRtb2QtPkxhbmcoJ21hdGNobnVtJywkaWQpKTsKCQkJCQlyZXR1cm4gJGJkYXRhWydieWUnXTsKCQkJCX0KCQkJCWlmKCRtZGF0YVsnbmV4dG0nXSA9PSAkbWlkICYmICEoJG5vdCAmJiAoJG1kYXRhWyd0ZWFtQSddID09ICRub3QgfHwgJG1kYXRhWyd0ZWFtQiddID09ICRub3QpKSkKCQkJCQlyZXR1cm4gJG1vZC0+TGFuZygnbnVtd2lubmVyJywkbW9kLT5MYW5nKCdtYXRjaG51bScsJGlkKSk7CgkJCX0KCQkJcmV0dXJuICRtb2QtPkxhbmcoJ2Fub25vdGhlcicpOwoJCX0KCX0KCgkvKioKCU1hdGNoVGVhbUlEX01pZDoKCUBtb2Q6IHJlZmVyZW5jZSB0byBjdXJyZW50IFRvdXJuZXkgbW9kdWxlCglAYmRhdGE6IHJlZmVyZW5jZSB0byBhcnJheSBvZiBicmFja2V0cy10YWJsZSBkYXRhCglAdGVhbXNjb3VudDogbm8uIG9mIHRlYW1zIGluIHRoZSBicmFja2V0CglAbWF0Y2hlczogcmVmZXJlbmNlIHRvIGFycmF5IG9mIGFsbCBtYXRjaGVzJyBkYXRhIGZyb20gdGFibGUgcXVlcnkKCUBtaWQ6IGlkZW50aWZpZXIgb2YgbWF0Y2ggYmVpbmcgcHJvY2Vzc2VkCglAbGV2ZWw6IGJyYWNrZXQgJ2xldmVsJyBjLmYuIHJvdW5kIDEsIHJvdW5kIDIgLi4uCglAbm90OiBvcHRpb25hbCwgZW51bWVyYXRvciBvZiBtYXRjaCB3aGljaCBpcyBhbHJlYWR5IGtub3duLCBzbyBkb24ndCBmaW5kIHRoaXMKCVJldHVybnM6IHRlYW0gaWRlbnRpZmllciBzdHJpbmcsIGluY2x1ZGluZyBtYXRjaCBudW1iZXIgaWYgcG9zc2libGUsIG90aGVyd2lzZSBnZW5lcmljCgkqLwoJZnVuY3Rpb24gTWF0Y2hUZWFtSURfTWlkKCYkbW9kLCYkYmRhdGEsJHRlYW1zY291bnQsJiRtYXRjaGVzLCRtaWQsJGxldmVsLCRub3Q9RkFMU0UpCgl7CgkJJGkgPSAoKGxvZygkdGVhbXNjb3VudCwyKS0wLjAwMDEpfDApICsgMTsgLy9jZWlsLWVxdWl2YWxlbnQKCQkkQk0gPSAkaSArIDE7CgkJJEJGID0gJGkqMyAtIDE7CgkJaWYoJGxldmVsID09ICRCTSkgLy9maXJzdCBsb3NlcnMtZHJhdyBiYW5kCgkJewoJCQlmb3JlYWNoKCRtYXRjaGVzIGFzICRpZD0+JG1kYXRhKQoJCQl7CgkJCQlpZigkbWRhdGFbJ25leHRsbSddID09ICRtaWQgJiYgKCEkbm90IHx8ICRpZCAhPSAkbm90KSkKCQkJCXsKCQkJCQlpZighKCRtZGF0YVsndGVhbUEnXSA9PSAtMSB8fCAkbWRhdGFbJ3RlYW1CJ10gPT0gLTEpKQoJCQkJCQlyZXR1cm4gJG1vZC0+TGFuZygnbnVtbG9zZXInLCRtb2QtPkxhbmcoJ21hdGNobnVtJywkaWQpKTsKCQkJCQlyZXR1cm4gJGJkYXRhWydieWUnXTsKCQkJCX0KCQkJfQoJCQlyZXR1cm4gJG1vZC0+TGFuZygnYW5vbmxvc2VyJyk7CgkJfQoJCWVsc2VpZigkbGV2ZWwgPCAkQk0gfHwgJGxldmVsID09ICRCRiB8fCAoJGxldmVsLSRCTSklMj09MCkKCQl7CgkJCS8vbG9vayBmb3IgcHJldmlvdXMgd2lubmVyCgkJCWZvcmVhY2goJG1hdGNoZXMgYXMgJGlkPT4kbWRhdGEpCgkJCXsKCQkJCWlmKCRtZGF0YVsnbmV4dG0nXSA9PSAkbWlkICYmICghJG5vdCB8fCAkaWQgIT0gJG5vdCkpCgkJCQkJcmV0dXJuICRtb2QtPkxhbmcoJ251bXdpbm5lcicsJG1vZC0+TGFuZygnbWF0Y2hudW0nLCRpZCkpOwoJCQl9CgkJCXJldHVybiAkbW9kLT5MYW5nKCdhbm9ud2lubmVyJyk7CgkJfQoJCWVsc2UgLy9sb3NlcnMtZHJhdyBiYW5kIHdoZXJlIG1hdGNoKGVzKSBoYXZlIHByZXZpb3VzIGxvc2VyIGFuZCBwcmV2aW91cyB3aW5uZXIKCQl7CgkJCWZvcmVhY2goJG1hdGNoZXMgYXMgJGlkPT4kbWRhdGEpCgkJCXsKCQkJCWlmKCRtZGF0YVsnbmV4dGxtJ10gPT0gJG1pZCAmJiAoISRub3QgfHwgJGlkICE9ICRub3QpKQoJCQkJewoJCQkJCWlmKCRtZGF0YVsndGVhbUEnXSAhPSAtMSB8fCAkbWRhdGFbJ3RlYW1CJ10gIT0gLTEpCgkJCQkJCXJldHVybiAkbW9kLT5MYW5nKCdudW1sb3NlcicsJG1vZC0+TGFuZygnbWF0Y2hudW0nLCRpZCkpOwoJCQkJCXJldHVybiAkYmRhdGFbJ2J5ZSddOwoJCQkJfQoJCQkJaWYoJG1kYXRhWyduZXh0bSddID09ICRtaWQgJiYgKCEkbm90IHx8ICRpZCAhPSAkbm90KSkKCQkJCXsKCQkJCQlpZigkbWRhdGFbJ3RlYW1BJ10gIT0gLTEgfHwgJG1kYXRhWyd0ZWFtQiddICE9IC0xKQoJCQkJCQlyZXR1cm4gJG1vZC0+TGFuZygnbnVtd2lubmVyJywkbW9kLT5MYW5nKCdtYXRjaG51bScsJGlkKSk7CgkJCQkJcmV0dXJuICRiZGF0YVsnYnllJ107CgkJCQl9CgkJCX0KCQkJcmV0dXJuICRtb2QtPkxhbmcoJ2Fub25vdGhlcicpOwoJCX0KCX0KCgkvKioKCU5hbWVkVGVhbXM6CglAbW9kOiByZWZlcmVuY2UgdG8gY3VycmVudCBUb3VybmV5IG1vZHVsZQoJQHRlYW1zY291bnQ6IG5vLiBvZiB0ZWFtcyBpbiB0aGUgYnJhY2tldAoJQG1hdGNoZXM6IHJlZmVyZW5jZSB0byBhcnJheSBvZiBhbGwgbWF0Y2hlcycgZGF0YSBmcm9tIGRhdGFiYXNlIHF1ZXJ5CglAbWlkOiBpZGVudGlmaWVyIG9mIG1hdGNoIGJlaW5nIHByb2Nlc3NlZAoJQGxldmVsOiBicmFja2V0ICdsZXZlbCcgYy5mLiByb3VuZCAxLCByb3VuZCAyIC4uLgoJQG5vdDogb3B0aW9uYWwgZW51bWVyYXRvciBvZiB0ZWFtIHdoaWNoIGlzIGFscmVhZHkga25vd24gKG9yIE5VTEwpLCBzbyBkb24ndCBmaW5kIHRoaXMKCUdldCBpZGVudGlmaWVyIGZvciBvbmUgb3IgYm90aCBwYXJ0aWNpcGFudHMgaW4gbWF0Y2ggQG1pZCwgZXhjbHVkaW5nIHRlYW0gQG5vdCAoaWYgYW55KQoJUmV0dXJuczogaWRlbnRpZmllciBzdHJpbmcgd2l0aCBvbmUgb3IgdHdvIHRlYW1uYW1lcywgb3IgRkFMU0UKCSovCglmdW5jdGlvbiBOYW1lZFRlYW1zKCYkbW9kLCR0ZWFtc2NvdW50LCYkbWF0Y2hlcywkbWlkLCRsZXZlbCwkbm90PUZBTFNFKQoJewoJCSRpID0gKChsb2coJHRlYW1zY291bnQsMiktMC4wMDAxKXwwKSArIDE7IC8vY2VpbC1lcXVpdmFsZW50CgkJJEJNID0gJGkgKyAxOwoJCSRCRiA9ICRpKjMgLSAxOwoJCWlmKCRsZXZlbCA9PSAkQk0pIC8vZmlyc3QgbG9zZXJzLWRyYXcgYmFuZAoJCXsKCQkJZm9yZWFjaCgkbWF0Y2hlcyBhcyAkbWRhdGEpCgkJCXsKCQkJCWlmKCRtZGF0YVsnbmV4dGxtJ10gPT0gJG1pZCAmJiAhKCRub3QgJiYgKCRtZGF0YVsndGVhbUEnXSA9PSAkbm90IHx8ICRtZGF0YVsndGVhbUInXSA9PSAkbm90KSkpCgkJCQl7CgkJCQkJaWYoJG1kYXRhWyd0ZWFtQSddICYmICgkbWRhdGFbJ3RlYW1CJ10gPT0gLTEgfHwgJG1kYXRhWyd0ZWFtQiddID09IEZBTFNFKSkKCQkJCQkJcmV0dXJuICRtb2QtPlRlYW1OYW1lKCRtZGF0YVsndGVhbUEnXSk7CgkJCQkJaWYoJG1kYXRhWyd0ZWFtQiddICYmICgkbWRhdGFbJ3RlYW1BJ10gPT0gLTEgfHwgJG1kYXRhWyd0ZWFtQSddID09IEZBTFNFKSkKCQkJCQkJcmV0dXJuICRtb2QtPlRlYW1OYW1lKCRtZGF0YVsndGVhbUInXSk7CgkJCQkJaWYoJG1kYXRhWyd0ZWFtQSddICYmICRtZGF0YVsndGVhbUInXSkKCQkJCQkJcmV0dXJuIHNwcmludGYoJG1vZC0+TGFuZygnb3JfZm10JywkbW9kLT5UZWFtTmFtZSgkbWRhdGFbJ3RlYW1BJ10pLCRtb2QtPlRlYW1OYW1lKCRtZGF0YVsndGVhbUInXSkpKTsKCQkJCQllbHNlCgkJCQkJCWJyZWFrOyAvL3JldHVybiAkbW9kLT5MYW5nKCdhbm9ud2lubmVyJyk7CgkJCQl9CgkJCX0KCQl9CgkJZWxzZWlmKCRsZXZlbCA8ICRCTSB8fCAkbGV2ZWwgPT0gJEJGIHx8ICgkbGV2ZWwtJEJNKSUyPT0wKQoJCXsKCQkJLy9sb29rIGZvciBwcmV2aW91cyB3aW5uZXIKCQkJZm9yZWFjaCgkbWF0Y2hlcyBhcyAkbWRhdGEpCgkJCXsKCQkJCWlmKCRtZGF0YVsnbmV4dG0nXSA9PSAkbWlkICYmICEoJG5vdCAmJiAoJG1kYXRhWyd0ZWFtQSddID09ICRub3QgfHwgJG1kYXRhWyd0ZWFtQiddID09ICRub3QpKSkKCQkJCXsKCQkJCQlpZigkbWRhdGFbJ3RlYW1BJ10gJiYgKCRtZGF0YVsndGVhbUInXSA9PSAtMSB8fCAkbWRhdGFbJ3RlYW1CJ10gPT0gRkFMU0UpKQoJCQkJCQlyZXR1cm4gJG1vZC0+VGVhbU5hbWUoJG1kYXRhWyd0ZWFtQSddKTsKCQkJCQlpZigkbWRhdGFbJ3RlYW1CJ10gJiYgKCRtZGF0YVsndGVhbUEnXSA9PSAtMSB8fCAkbWRhdGFbJ3RlYW1BJ10gPT0gRkFMU0UpKQoJCQkJCQlyZXR1cm4gJG1vZC0+VGVhbU5hbWUoJG1kYXRhWyd0ZWFtQiddKTsKCQkJCQlpZigkbWRhdGFbJ3RlYW1BJ10gJiYgJG1kYXRhWyd0ZWFtQiddKQoJCQkJCQlyZXR1cm4gc3ByaW50ZigkbW9kLT5MYW5nKCdvcl9mbXQnLCRtb2QtPlRlYW1OYW1lKCRtZGF0YVsndGVhbUEnXSksJG1vZC0+VGVhbU5hbWUoJG1kYXRhWyd0ZWFtQiddKSkpOwoJCQkJCWVsc2UKCQkJCQkJYnJlYWs7IC8vcmV0dXJuICRtb2QtPkxhbmcoJ2Fub253aW5uZXInKTsKCQkJCX0KCQkJfQoJCX0KCQllbHNlIC8vbG9zZXJzLWRyYXcgYmFuZCB3aGVyZSBtYXRjaChlcykgaGF2ZSBwcmV2aW91cyBsb3NlciBhbmQgcHJldmlvdXMgd2lubmVyCgkJewoJCQlmb3JlYWNoKCRtYXRjaGVzIGFzICRtZGF0YSkKCQkJewoJCQkJaWYoJG1kYXRhWyduZXh0bG0nXSA9PSAkbWlkIHx8ICRtZGF0YVsnbmV4dG0nXSA9PSAkbWlkKQoJCQkJewoJCQkJCWlmKCEoJG5vdCAmJiAoJG1kYXRhWyd0ZWFtQSddID09ICRub3QgfHwgJG1kYXRhWyd0ZWFtQiddID09ICRub3QpKSkKCQkJCQl7CgkJCQkJCWlmKCRtZGF0YVsndGVhbUEnXSAmJiAoJG1kYXRhWyd0ZWFtQiddID09IC0xIHx8ICRtZGF0YVsndGVhbUInXSA9PSBGQUxTRSkpCgkJCQkJCQlyZXR1cm4gJG1vZC0+VGVhbU5hbWUoJG1kYXRhWyd0ZWFtQSddKTsKCQkJCQkJaWYoJG1kYXRhWyd0ZWFtQiddICYmICgkbWRhdGFbJ3RlYW1BJ10gPT0gLTEgfHwgJG1kYXRhWyd0ZWFtQSddID09IEZBTFNFKSkKCQkJCQkJCXJldHVybiAkbW9kLT5UZWFtTmFtZSgkbWRhdGFbJ3RlYW1CJ10pOwoJCQkJCQlpZigkbWRhdGFbJ3RlYW1BJ10gJiYgJG1kYXRhWyd0ZWFtQiddKQoJCQkJCQkJcmV0dXJuIHNwcmludGYoJG1vZC0+TGFuZygnb3JfZm10JywkbW9kLT5UZWFtTmFtZSgkbWRhdGFbJ3RlYW1BJ10pLCRtb2QtPlRlYW1OYW1lKCRtZGF0YVsndGVhbUInXSkpKTsKCQkJCQkJZWxzZQoJCQkJCQkJYnJlYWs7IC8vcmV0dXJuICRtb2QtPkxhbmcoJ2Fub253aW5uZXInKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJcmV0dXJuIEZBTFNFOwoJfQoKCS8qKgoJQW5vbkxldmVsTmFtZToKCUBtb2Q6IHJlZmVyZW5jZSB0byBjdXJyZW50IFRvdXJuZXkgbW9kdWxlCglAYmRhdGE6IHJlZmVyZW5jZSB0byBhcnJheSBvZiBicmFja2V0LXRhYmxlIGRhdGEKCUB0ZWFtc2NvdW50OiBuby4gb2YgdGVhbXMgaW4gdGhlIGJyYWNrZXQKCUBsZXZlbDogYnJhY2tldCAnbGV2ZWwnIGMuZi4gcm91bmQgMSwgcm91bmQgMiAuLi4KCVJldHVybnM6IHRlYW0gaWRlbnRpZmllciBzdHJpbmcgbGlrZSAnUm91bmQgTiB3aW5uZXInIHdoZXJlICdSb3VuZCBOJyByZXByZXNlbnRzIEBsZXZlbCAtIDEKCSovCglwcml2YXRlIGZ1bmN0aW9uIEFub25MZXZlbE5hbWUoJiRtb2QsJiRiZGF0YSwkdGVhbXNjb3VudCwkbGV2ZWwpCgl7CgkJJGkgPSAoKGxvZygkdGVhbXNjb3VudCwyKS0wLjAwMDEpfDApICsgMTsgLy9jZWlsLWVxdWl2YWxlbnQKCQkkQk0gPSAkaSArIDE7CgkJJEJGID0gJGkqMyAtIDE7CgkJJHByZXYgPSAoJGxldmVsID09ICRCTSkgPyAxOiRsZXZlbC0xOwoJCSRuYW1lID0gJHRoaXMtPkxldmVsTmFtZSgkbW9kLCRiZGF0YSwkdGVhbXNjb3VudCwkcHJldik7CgkJaWYoJGxldmVsID09ICRCTSkgLy9maXJzdCBsb3NlcnMnLWRyYXcgYmFuZAoJCQkka2V5ID0gJ251bWxvc2VyJzsKCQllbHNlaWYoJGxldmVsIDwgJEJNIHx8ICRsZXZlbCA9PSAkQkYgfHwgKCRsZXZlbC0kQk0pJTI9PTApCgkJCSRrZXkgPSAnbnVtd2lubmVyJzsKCQllbHNlIC8vbG9zZXJzJy1kcmF3IGJhbmQgd2hlcmUgbWF0Y2goZXMpIGhhdmUgcHJldmlvdXMgbG9zZXIgYW5kIHByZXZpb3VzIHdpbm5lcgoJCQkka2V5ID0gJ251bW90aGVyJzsKCgkJcmV0dXJuICRtb2QtPkxhbmcoJGtleSwkbmFtZSk7Cgl9CgoJLyoqCglMZXZlbE5hbWU6CglAbW9kOiByZWZlcmVuY2UgdG8gY3VycmVudCBUb3VybmV5IG1vZHVsZQoJQGJkYXRhOiByZWZlcmVuY2UgdG8gYXJyYXkgb2YgYnJhY2tldC10YWJsZSBkYXRhCglAdGVhbXNjb3VudDogbm8uIG9mIHRlYW1zIGluIHRoZSBicmFja2V0CglAbGV2ZWw6IGJyYWNrZXQgJ2xldmVsJyBjLmYuIHJvdW5kIDEsIHJvdW5kIDIgLi4uCglSZXR1cm5zOiByb3VuZCBpZGVudGlmaWVyIHN0cmluZyAocG9zc2libHkgZW1wdHkpIG9yIEZBTFNFCgkqLwoJZnVuY3Rpb24gTGV2ZWxOYW1lKCYkbW9kLCYkYmRhdGEsJHRlYW1zY291bnQsJGxldmVsKQoJewoJCSRpID0gKChsb2coJHRlYW1zY291bnQsMiktMC4wMDAxKXwwKSArIDE7IC8vY2VpbC1lcXVpdmFsZW50CgkJJEJNID0gJGkgKyAxOwoJCSRyZXQgPSBGQUxTRTsKCQlpZigkbGV2ZWwgPCAkQk0pIC8vaW4gd2lubmVycyBkcmF3CgkJewoJCQkkZGlmZiA9ICRCTSAtICRsZXZlbDsKCQkJaWYoJGRpZmYgPT0gMSkKCQkJCSRyZXQgPSB0cmltKCRiZGF0YVsnc2VtaSddKTsKCQl9CgkJZWxzZQoJCXsKCQkJJGRpZmYgPSAkaSozIC0gMSAtICRsZXZlbDsgLy9vZmZzZXQgZnJvbSBmaW5hbAoJCQlpZigkZGlmZiA8IDIgJiYgJGRpZmYgPj0gMCkKCQkJewoJCQkJJGZpZWxkcyA9IGFycmF5KCdmaW5hbCcsJ3NlbWknKTsgLy9sb3dlci1yb3VuZCBzcGVjaWZpYyBuYW1lcyBub25zZW5zZSBmb3IgREUgY29tcAoJCQkJJHJldCA9IHRyaW0oJGJkYXRhWyRmaWVsZHNbJGRpZmZdXSk7CgkJCX0KLy8JCQkkbGV2ZWwgPSAkbGV2ZWwgLSAkQk0gKyAyOwoJCX0KCQlpZighJHJldCAmJiAkYmRhdGFbJ3JvdW5kbmFtZSddKQoJCXsKCQkJJG5hbWUgPSB0cmltKCRiZGF0YVsncm91bmRuYW1lJ10pOwoJCQlpZigkbmFtZSkKCQkJewoJCQkJJGZtdCA9IHN0cl9yZXBsYWNlKCclcicsJG5hbWUsJG1vZC0+TGFuZygncm91bmRfZm10JykpOwoJCQkJJHJldCA9IHNwcmludGYoJGZtdCwkbGV2ZWwpOwoJCQl9CgkJfQoJCXJldHVybiAkcmV0OwoJfQp9Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.tmtRoundsKO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0KEMpIDIwMTQtMjAxNSBUb20gUGhhbmUgPHRwZ3d3QG9uZXBvc3QubmV0PgpSZWZlciB0byBsaWNlbmNlIGFuZCBvdGhlciBkZXRhaWxzIGF0IHRoZSB0b3Agb2YgZmlsZSBUb3VybmV5Lm1vZHVsZS5waHAKTW9yZSBpbmZvIGF0IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvdG91cm5leQoqLwpjbGFzcyB0bXRSb3VuZHNLTwp7CgkvKioKCUxldmVsTWF4OgoJQHRlYW1zY291bnQ6IE5vLiBvZiB0ZWFtcyBpbiB0aGUgYnJhY2tldCAoYXNzdW1lZCBLT01JTi4uS09NQVggaW5jbHVzaXZlKQoJUmV0dXJuczogbWF4IGJhbmQgdmFsdWUgZm9yIEtPIGNvbXAgd2l0aCBAdGVhbXNjb3VudCBwYXJ0aWNpcGFudHMKCSovCglmdW5jdGlvbiBMZXZlbE1heCgkdGVhbXNjb3VudCkKCXsKCQlyZXR1cm4gKChsb2coJHRlYW1zY291bnQsMiktMC4wMDAxKXwwKSsxOyAvL2NlaWwtZXF1aXZhbGVudAoJfQoKCS8qKgoJTWF0Y2hMZXZlbDoKCUBtYXRjaGVzOiBhcnJheSBvZiBBTEwgbWF0Y2hlcycgZGF0YSBmb3IgYSBicmFja2V0LCBzb3J0ZWQgYnkgbWF0Y2hfaWQKCUBtaWQ6IGlkZW50aWZpZXIgb2YgbWF0Y2ggYmVpbmcgcHJvY2Vzc2VkLCBhIGtleSBpbiBAbWF0Y2hlcwoJKi8KCWZ1bmN0aW9uIE1hdGNoTGV2ZWwoJHRlYW1zY291bnQsJG1hdGNoZXMsJG1pZCkKCXsKCQkkbWlkcyA9IGFycmF5X2tleXMoJG1hdGNoZXMpOwoJCSRvZmZzZXQgPSBhcnJheV9zZWFyY2goJG1pZCwkbWlkcyk7IC8vMC1iYXNlZCBkaWZmZXJlbmNlIGJldHdlZW4gJG1pZCBhbmQgc3RhcnQgb2YgbWF0Y2hlcwoJCSRpID0gKChsb2coJHRlYW1zY291bnQsMiktMC4wMDAxKXwwKSArIDE7IC8vY2VpbCA9IG5vLiBvZiBsZXZlbHMgaW4gdGhlIGNvbXAKCQkkYmMgPSBwb3coMiwkaS0xKTsgLy9maXJzdCByb3VuZCBtYXRjaGVzIGNvdW50CgkJJG1jb3VudCA9ICRiYyAtIDE7IC8vbGFzdCByb3VuZC0xIG1hdGNoCgkJJGx2bCA9IDE7CgkJd2hpbGUgKCRtY291bnQgPCAkb2Zmc2V0KQoJCXsKCQkJJGJjIC89IDI7CgkJCSRtY291bnQgKz0gJGJjOwoJCQkkbHZsKys7CgkJfQoJCXJldHVybiAkbHZsOwoJfQoKCS8qKgoJTWF0Y2hUZWFtSURfVGVhbToKCUBtb2Q6IHJlZmVyZW5jZSB0byBjdXJyZW50IFRvdXJuZXkgbW9kdWxlCglAbWF0Y2hlczogcmVmZXJlbmNlIHRvIGFycmF5IG9mIGFsbCBtYXRjaGVzJyBkYXRhIGZyb20gdGFibGUgcXVlcnkgKHNvIHdpbGwgemFwIGludGVybmFsIHBvaW50ZXIgZm9yIHVwc3RyZWFtIHVzZSkKCUBtaWQ6IGlkZW50aWZpZXIgb2YgbWF0Y2ggYmVpbmcgcHJvY2Vzc2VkCglAbm90OiBvcHRpb25hbCBlbnVtZXJhdG9yIG9mIHRlYW0gd2hpY2ggaXMgYWxyZWFkeSBrbm93biwgc28gZG9uJ3QgZmluZCB0aGlzCglHZXQgaWRlbnRpZmllciBmb3IgYSBwYXJ0aWNpcGFudCBpbiBtYXRjaCBAbWlkLCBleGNsdWRpbmcgdGVhbSBAbm90IChpZiBhbnkpCglSZXR1cm5zOiBpZGVudGlmaWVyIHN0cmluZywgaW5jbHVkaW5nIHByaW9yIG1hdGNoIG5vLiBpZiBwb3NzaWJsZQoJKi8KCWZ1bmN0aW9uIE1hdGNoVGVhbUlEX1RlYW0oJiRtb2QsJiRtYXRjaGVzLCRtaWQsJG5vdD1GQUxTRSkKCXsKCQlmb3JlYWNoKCRtYXRjaGVzIGFzICRpZD0+JG1kYXRhKQoJCXsKCQkJaWYoJG1kYXRhWyduZXh0bSddID09ICRtaWQgJiYgISgkbm90ICYmICgkbWRhdGFbJ3RlYW1BJ10gPT0gJG5vdCB8fCAkbWRhdGFbJ3RlYW1CJ10gPT0gJG5vdCkpKQoJCQkJcmV0dXJuICRtb2QtPkxhbmcoJ251bXdpbm5lcicsJG1vZC0+TGFuZygnbWF0Y2hudW0nLCRpZCkpOwoJCX0KCQlyZXR1cm4gJG1vZC0+TGFuZygnYW5vbndpbm5lcicpOwoJfQoKCS8qKgoJTWF0Y2hUZWFtSURfTWlkOgoJQG1vZDogcmVmZXJlbmNlIHRvIGN1cnJlbnQgVG91cm5leSBtb2R1bGUKCUBtYXRjaGVzOiByZWZlcmVuY2UgdG8gYXJyYXkgb2YgYWxsIG1hdGNoZXMnIGRhdGEgZnJvbSBkYXRhYmFzZSBxdWVyeQoJQG1pZDogaWRlbnRpZmllciBvZiBtYXRjaCBiZWluZyBwcm9jZXNzZWQKCUBub3Q6IG9wdGlvbmFsIGVudW1lcmF0b3Igb2YgbWF0Y2ggd2hpY2ggaXMgYWxyZWFkeSBrbm93biwgc28gZG9uJ3QgZmluZCB0aGlzCglHZXQgaWRlbnRpZmllciBmb3IgYSBwYXJ0aWNpcGFudCBpbiBtYXRjaCBAbWlkLCBleGNsdWRpbmcgbWF0Y2ggQG5vdCAoaWYgYW55KQoJUmV0dXJuczogaWRlbnRpZmllciBzdHJpbmcsIGluY2x1ZGluZyBwcmlvciBtYXRjaCBuby4gaWYgcG9zc2libGUKCSovCglmdW5jdGlvbiBNYXRjaFRlYW1JRF9NaWQoJiRtb2QsJiRtYXRjaGVzLCRtaWQsJG5vdD1GQUxTRSkKCXsKCQlmb3JlYWNoKCRtYXRjaGVzIGFzICRpZD0+JG1kYXRhKQoJCXsKCQkJaWYoJG1kYXRhWyduZXh0bSddID09ICRtaWQgJiYgISgkbm90ICYmICRpZCA9PSAkbm90KSkKCQkJCXJldHVybiAkbW9kLT5MYW5nKCdudW13aW5uZXInLCRtb2QtPkxhbmcoJ21hdGNobnVtJywkaWQpKTsKCQl9CgkJcmV0dXJuICRtb2QtPkxhbmcoJ2Fub253aW5uZXInKTsKCX0KCgkvKioKCU5hbWVkVGVhbXM6CglAbW9kOiByZWZlcmVuY2UgdG8gY3VycmVudCBUb3VybmV5IG1vZHVsZQoJQG1hdGNoZXM6IHJlZmVyZW5jZSB0byBhcnJheSBvZiBhbGwgbWF0Y2hlcycgZGF0YSBmcm9tIGRhdGFiYXNlIHF1ZXJ5CglAbWlkOiBpZGVudGlmaWVyIG9mIG1hdGNoIGJlaW5nIHByb2Nlc3NlZAoJQG5vdDogb3B0aW9uYWwgZW51bWVyYXRvciBvZiB0ZWFtIHdoaWNoIGlzIGFscmVhZHkga25vd24sIHNvIGRvbid0IGZpbmQgdGhpcwoJR2V0IGlkZW50aWZpZXIgZm9yIG9uZSBvciBib3RoIHBhcnRpY2lwYW50cyBpbiBtYXRjaCBAbWlkLCBleGNsdWRpbmcgdGVhbSBAbm90IChpZiBhbnkpCglSZXR1cm5zOiBpZGVudGlmaWVyIHN0cmluZyB3aXRoIG9uZSBvciB0d28gdGVhbW5hbWVzLCBvciBGQUxTRQoJKi8KCWZ1bmN0aW9uIE5hbWVkVGVhbXMoJiRtb2QsJiRtYXRjaGVzLCRtaWQsJG5vdD1GQUxTRSkKCXsKCQlmb3JlYWNoKCRtYXRjaGVzIGFzICRpZD0+JG1kYXRhKQoJCXsKCQkJaWYoJG1kYXRhWyduZXh0bSddID09ICRtaWQgJiYgISgkbm90ICYmICgkbWRhdGFbJ3RlYW1BJ10gPT0gJG5vdCB8fCAkbWRhdGFbJ3RlYW1CJ10gPT0gJG5vdCkpKQoJCQl7CgkJCQlpZigkbWRhdGFbJ3RlYW1BJ10gPT0gLTEgJiYgJG1kYXRhWyd0ZWFtQiddKQoJCQkJCXJldHVybiAkbW9kLT5UZWFtTmFtZSgkbWRhdGFbJ3RlYW1CJ10pOwoJCQkJaWYoJG1kYXRhWyd0ZWFtQiddID09IC0xICYmICRtZGF0YVsndGVhbUEnXSkKCQkJCQlyZXR1cm4gJG1kYXRhWyd0ZWFtQSddOwoJCQkJaWYoJG1kYXRhWyd0ZWFtQSddICYmICRtZGF0YVsndGVhbUInXSkKCQkJCQlyZXR1cm4gc3ByaW50ZigkbW9kLT5MYW5nKCdvcl9mbXQnLCRtb2QtPlRlYW1OYW1lKCRtZGF0YVsndGVhbUEnXSksJG1vZC0+VGVhbU5hbWUoJG1kYXRhWyd0ZWFtQiddKSkpOwoJCQkJZWxzZQoJCQkJCWJyZWFrOwoJCQl9CgkJfQoJCXJldHVybiBGQUxTRTsgLy8kbW9kLT5MYW5nKCdhbm9ud2lubmVyJyk7Cgl9CgoJLyoqCglMZXZlbE5hbWU6CglAbW9kOiByZWZlcmVuY2UgdG8gY3VycmVudCBUb3VybmV5IG1vZHVsZQoJQGJkYXRhOiByZWZlcmVuY2UgdG8gYXJyYXkgb2YgYnJhY2tldC10YWJsZSBkYXRhCglAbGV2ZWw6IGVudW1lcmF0b3Igb2YgY29tcGV0aXRpb24gJ3JvdW5kJyBjLmYuIHJvdW5kIDEsIHJvdW5kIDIgLi4uCglAbGV2ZWxtYXg6IGVudW1lcmF0b3Igb2YgdGhlICdmaW5hbCcgcm91bmQgaW4gdGhlIGNvbXBldGl0aW9uCglSZXR1cm5zOiBzdHJpbmcgKHBvc3NpYmx5IGVtcHR5KSBvciBGQUxTRQoJKi8KCWZ1bmN0aW9uIExldmVsTmFtZSgmJG1vZCwmJGJkYXRhLCRsZXZlbCwkbGV2ZWxtYXgpCgl7CgkJJGRpZmYgPSAkbGV2ZWxtYXggLSAkbGV2ZWw7CgkJaWYoJGRpZmYgPCA0ICYmICRkaWZmID49IDApCgkJewoJCQkkZmllbGRzID0gYXJyYXkoJ2ZpbmFsJywnc2VtaScsJ3F1YXJ0ZXInLCdlaWdodGgnKTsKCQkJJHJldCA9IHRyaW0oJGJkYXRhWyRmaWVsZHNbJGRpZmZdXSk7CgkJfQoJCWVsc2UKCQkJJHJldCA9IEZBTFNFOwoJCWlmKCEkcmV0ICYmICRiZGF0YVsncm91bmRuYW1lJ10pCgkJewoJCQkkbmFtZSA9IHRyaW0oJGJkYXRhWydyb3VuZG5hbWUnXSk7CgkJCWlmKCRuYW1lKQoJCQl7CgkJCQkkZm10ID0gc3RyX3JlcGxhY2UoJyVyJywkbmFtZSwkbW9kLT5MYW5nKCdyb3VuZF9mbXQnKSk7CgkJCQkkcmV0ID0gc3ByaW50ZigkZm10LCRsZXZlbCk7CgkJCX0KCQl9CgkJcmV0dXJuICRyZXQ7Cgl9Cn0KPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/class.tmtSchedule.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0KEMpIDIwMTQtMjAxNSBUb20gUGhhbmUgPHRwZ3d3QG9uZXBvc3QubmV0PgpSZWZlciB0byBsaWNlbmNlIGFuZCBvdGhlciBkZXRhaWxzIGF0IHRoZSB0b3Agb2YgZmlsZSBUb3VybmV5Lm1vZHVsZS5waHAKTW9yZSBpbmZvIGF0IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvdG91cm5leQoKQ2xhc3M6IHRtdFNjaGVkdWxlLiBGdW5jdGlvbnMgaW52b2x2ZWQgd2l0aCB0b3VybmFtZW50IG1hdGNoIHNjaGVkdWxpbmcKTk9URSB0aGlzIGNsYXNzIGRvZXMgbm90IHN1cHBvcnQgc3RhdGljIG1ldGhvZC1jYWxsaW5nCiovCmNsYXNzIHRtdFNjaGVkdWxlCnsKCS8qKgoJUmVzZXJ2ZU1hdGNoZXM6CglAZGI6IHJlZmVyZW5jZSB0byBkYXRhYmFzZSBjb25uZWN0aW9uCglAcHJlZjogZGF0YWJhc2UgdGFibGUgcHJlZml4IHN0cmluZwoJQGNvdW50OiBuby4gb2YgbWF0Y2hlcyB0byByZXNlcnZlLCA+PSAxCglTYWZlbHkgcmVzZXJ2ZSBhIGJsb2NrIG9mIG1hdGNoIGlkJ3MgaW4gdGhlIG1hdGNoZXMgdGFibGUKCVJldHVybnM6IGluZGV4IG9mIGZpcnN0IHJlc2VydmVkIG1hdGNoCgkqLwoJZnVuY3Rpb24gUmVzZXJ2ZU1hdGNoZXMoJiRkYiwkcHJlZiwkY291bnQpCgl7CgkJaWYoJGNvdW50IDwgMSkKCQkJcmV0dXJuIEZBTFNFOwoJCSRpZDEgPSAkZGItPkdlbklEKCRwcmVmLidtb2R1bGVfdG10X21hdGNoZXNfc2VxJyk7CgkJaWYoJGNvdW50ID09IDEpCgkJCXJldHVybiAkaWQxOwoJCSRsYXN0ID0gJGNvdW50IC0gMjsKCQlkbyB7CgkJCWlmKCRsYXN0ID4gMCkKCQkJewoJCQkJJHNxbCA9ICdVUERBVEUgJy4kcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzX3NlcSBTRVQgaWQ9aWQrJy4kbGFzdDsKCQkJCSRkYi0+RXhlY3V0ZSgkc3FsKTsKCQkJfQoJCQkkaWQyID0gJGRiLT5HZW5JRCgkcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzX3NlcScpOwoJCQlpZigkaWQyID09ICRpZDEgKyAkY291bnQgLSAxKQoJCQkJcmV0dXJuICRpZDE7CgkJCSRpZDEgPSAkaWQyOyAvL3JhY2Ugb2NjdXJyZWQsdHJ5IGFnYWluCgkJfSB3aGlsZSgxKTsKCX0KCgkvKioKCU9yZGVyTWF0Y2hlczoKCUB0ZWFtY291bnQ6IHRoZSBhY3R1YWwgbm8uIG9mIHN0YXJ0aW5nIGNvbXBldGl0b3JzIGkuZS4gZXhjbHVkZSBieWVzCglAc2VlZGNvdW50OiBuby4gKDw9IEB0ZWFtY291bnQpIG9mIGNvbXBldGl0b3JzIHRvIGJlICdzcGVjaWFsbHkgYXNzaWduZWQnIHBlciBAc2VlZHR5cGUKCUBzZWVkdHlwZTogZW51bQoJIDAgbm8gc3BlY2lhbCB0cmVhdG1lbnQgb2Ygc2VlZHMKCSAxIHNlZWRzIDEgJiAyIGluIG9wcG9zaXRlIGhhbHZlcyBvZiBkcmF3IChpbiB3aGljaCBjYXNlIEBzZWVkY291bnQgPj0gMikKCSAyIGFsbCBzZWVkcyBhbHRlcm5hdGUsIHdpdGggcmF0aW5ncyBjbG9zZXIgdGhhbiBmb3Igb3B0aW9uIDMKCSAzIGFsbCBzZWVkcyBhbHRlcm5hdGUsIHdpdGggcmF0aW5ncyBhcyBkaXZlcmdlbnQgYXMgcG9zc2libGUKCSA0IChyYW5kb20gMiBvciAzKSBidXQgbm90IHNlZW4gaGVyZSBkdWUgdG8gdXBzdHJlYW0gc3Vic2l0aXR1dGlvbgoJQGZpeGNvdW50OiAwIG9yIGV2ZW4gbm8uICg8PSBAdGVhbWNvdW50KSBvZiBjb21wZXRpdG9ycyB0byBiZSBleGNsdWRlZCBmcm9tIHJhbmRvbSBhc3NpZ25tZW50CglSZXR1cm5zOiBBcnJheSBvZiB0ZWFtIGluZGljZXMgaW4gbWF0Y2gtb3JkZXIuCglUaGUgYXJyYXkga2V5cyBhcmUgYXNjZW5kaW5nLCAxIHRvIDAuNSAqIGEgcG93ZXIgb2YgMiB3aGljaCBpcyBlcXVhbCB0bwoJIEB0ZWFtY291bnQsIG9yIGVsc2UgdGhlIG5leHQgaGlnaGVzdCBwb3dlciBvZiAyID4gQHRlYW1jb3VudC4KCVRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcyBhcmUgdGVhbSBpbmRpY2VzIGluIHRoZSBzYW1lIHJhbmdlLCBleGNlcHQgZm9yIEBmaXhjb3VudAoJcGxhY2Vob2xkZXIgdmFsdWVzICgtMSkuIEFueSByYW5kb21pc2luZyBvZiBhY3R1YWwgdGVhbSBudW1iZXJzIGFzc29jaWF0ZWQgd2l0aAoJdGhlIGluZGljZXMgbXVzdCBiZSBkb25lIHVwc3RyZWFtLgoJKi8KCXByaXZhdGUgZnVuY3Rpb24gT3JkZXJNYXRjaGVzKCR0ZWFtY291bnQsJHNlZWRjb3VudCwkc2VlZHR5cGUsJGZpeGNvdW50KQoJewoJCSRpID0gMjsKCQl3aGlsZSgkaSA8ICR0ZWFtY291bnQpICRpICo9IDI7CgkJJGZ1bGwgPSAkaTsKCQkkaGFsZiA9ICRpIC8gMjsKCQkkb3JkZXIgPSBhcnJheSgpOwoJCS8vZmlyc3QsdGhlIHNlZWRzIGlmIGFueQoJCSR0b3V0ID0gRkFMU0U7CgkJJGJvdXQgPSBGQUxTRTsKCQkvL2luaXRpYWwgYXJyYXkgaW5kaWNlcwoJCSR0byA9IDE7CgkJJHRpID0gJGhhbGY7CgkJJGJpID0gJGhhbGYgKyAxOwoJCSRibyA9ICRmdWxsOwoJCWZvcigkaSA9IDE7ICRpIDw9ICRzZWVkY291bnQ7ICRpKyspCgkJewoJCQkvL3doaWNoIGhhbGYgb2YgZHJhdz8KCQkJJHRvcCA9ICgkc2VlZHR5cGUgIT0gMykgPyAoJGkgJSAyICE9IDApIDogKGludHZhbCgkaS8yKSAlIDIgPT0gMCk7CgkJCWlmKCR0b3ApCgkJCXsKCQkJCSR0b3V0ID0gISR0b3V0OyAvL3RvZ2dsZSBiZXR3ZWVuICdlbmRzJyBvZiB0aGUgaGFsZi1kcmF3CgkJCQkkaW5keCA9ICgkdG91dCkgPyAkdG8rKyA6ICR0aS0tOwoJCQkJJG9yZGVyWyRpbmR4XSA9ICRpOwoJCQkJJHZzID0gJGZ1bGwgKyAxIC0gJGk7CgkJCQlpZigkdnMgPiAkc2VlZGNvdW50KQoJCQkJewoJCQkJCSRpbmR4ID0gKCR0b3V0KSA/ICR0bysrIDogJHRpLS07CgkJCQkJJG9yZGVyWyRpbmR4XSA9ICR2czsKCQkJCX0KCQkJCWVsc2UgaWYoJHRvdXQpIC8vbGVhdmUgZ2FwIGZvciBzZWVkZWQgb3Bwb25lbnQKCQkJCQkkdG8rKzsKCQkJCWVsc2UKCQkJCQkkdGktLTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRib3V0ID0gISRib3V0OyAvL3RvZ2dsZSBiZXR3ZWVuICdlbmRzJyBvZiB0aGUgaGFsZi1kcmF3CgkJCQkkaW5keCA9ICgkYm91dCkgPyAkYm8tLSA6ICRiaSsrOwoJCQkJJG9yZGVyWyRpbmR4XSA9ICRpOwoJCQkJJHZzID0gJGZ1bGwgKyAxIC0gJGk7CgkJCQlpZigkdnMgPiAkc2VlZGNvdW50KQoJCQkJewoJCQkJCSRpbmR4ID0gKCRib3V0KSA/ICRiby0tIDogJGJpKys7CgkJCQkJJG9yZGVyWyRpbmR4XSA9ICR2czsKCQkJCX0KCQkJCWVsc2UgaWYoJGJvdXQpCgkJCQkJJGJvLS07IC8vbGVhdmUgZ2FwIGZvciBzZWVkZWQgb3Bwb25lbnQKCQkJCWVsc2UKCQkJCQkkYmkrKzsKCQkJfQoJCX0KCQkkciA9ICRmdWxsIC0gJHNlZWRjb3VudDsKCQkvL25leHQsIHBhaXJzIG9mIHNsb3RzIGZvciBmaXhlcnMsIGlmIGFueQoJCSRmcCA9IDE7IC8vcGxhY2VtZW50IGVudW0KCQkkZjEgPSAkZml4Y291bnQ7IC8vQ0hFQ0tNRSBmdWRnZS1mYWN0b3IgPz8KCQkkZjIgPSAkZjEgKyAxOwoJCXdoaWxlKCRmaXhjb3VudCkKCQl7CgkJCS8vdHJ5IHRvIGJpYXMgZml4ZXJzJyBwb3NpdGlvbnMgdG93YXJkIGNlbnRyZSBvZiBicmFja2V0IChtYXliZSBsb3dlci1yYW5rZWQgdmljaW5pdHkpCgkJCWZvcigkaSA9ICRmdWxsOyAkaSA+IDA7ICRpLS0pCgkJCXsKCQkJCXN3aXRjaCgkZnApCgkJCQl7CgkJCQkgY2FzZSAxOgoJCQkJIGNhc2UgMzoKCQkJCQkkdnMgPSAkaSAtICRmcCAtICRmMjsgLy9DSEVDS01FIGZ1ZGdlLWZhY3RvcgoJCQkJCWlmKCRpID4gKCRmcC0kZjIpICYmICRpIDwgKCRmdWxsKyRmcCskZjIpICYmICFpc3NldCgkb3JkZXJbJHZzXSkgJiYgIWlzc2V0KCRvcmRlclskdnMtMV0pKQoJCQkJCXsKCQkJCQkJJG9yZGVyWyR2c10gPSAtNTsgLy9hbnl0aGluZyA8IDAgd2lsbCBkbwoJCQkJCQkkb3JkZXJbJHZzLTFdID0gLTU7CgkJCQkJCSRyIC09IDI7CgkJCQkJCSRmaXhjb3VudCAtPSAyOwoJCQkJCQlpZigkZml4Y291bnQgPT0gMCkgYnJlYWsgMjsKCQkJCQkJJGktLTsKCQkJCQkJaWYoKyskZnAgPiA0KSAkZnAgPSAxOwoJCQkJCX0KCQkJCQlicmVhazsKCQkJCSBjYXNlIDI6CgkJCQkgY2FzZSA0OgoJCQkJCSR2cyA9ICRmdWxsIC0gJGkgLSAkZnAgKyAkZjI7IC8vJGZwLTEgezEsM30gQ0hFQ0tNRSBmdWRnZS1mYWN0b3IKCQkJCQlpZigkaSA+ICgkZjEtJGZwKSAmJiAkaSA8ICgkZnVsbC0kZnArJGYxKSAmJiAhaXNzZXQoJG9yZGVyWyR2c10pICYmICFpc3NldCgkb3JkZXJbJHZzLTFdKSkKCQkJCQl7CgkJCQkJCSRvcmRlclskdnNdID0gLTEwOwoJCQkJCQkkb3JkZXJbJHZzLTFdID0gLTEwOwoJCQkJCQkkciAtPSAyOwoJCQkJCQkkZml4Y291bnQgLT0gMjsKCQkJCQkJaWYoJGZpeGNvdW50ID09IDApIGJyZWFrIDI7CgkJCQkJCSRpLS07CgkJCQkJCWlmKCsrJGZwID4gNCkgJGZwID0gMTsKCQkJCQl9CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQkJaWYoKyskZnAgPiA0KQoJCQkJYnJlYWs7CS8vYWJvcnQgYWZ0ZXIgYSBmZXcgdG90YWwgZmFpbHMKCQl9CgkJLy9uZXh0LCB0aGUgcmVzdAoJCWZvcigkaSA9IDE7ICRpIDw9ICRmdWxsOyAkaSsrKQoJCXsKCQkJLy9zcGxpdCBudW1iZXJzIGJldHdlZW4gaGFsdmVzLHRvIHNwcmVhZCBhbnkgZnVydGhlciBieWVzCgkJCWlmKCRpICUgMiA9PSAxKQoJCQl7CgkJCQlpZighaXNzZXQoJG9yZGVyWyRpXSkpCgkJCQkJJG9yZGVyWyRpXSA9ICRyLS07CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkdnMgPSAkZnVsbCAtICRpOwoJCQkJaWYoJHZzID4gMCAmJiAhaXNzZXQoJG9yZGVyWyR2c10pKQoJCQkJCSRvcmRlclskdnNdID0gJHItLTsKCQkJfQoJCX0KCQlmb3IoJGkgPSAkZnVsbDsgJGkgPiAwOyAkaS0tKQoJCXsKCQkJaWYoIWlzc2V0KCRvcmRlclskaV0pKQoJCQkJJG9yZGVyWyRpXSA9ICRyLS07CgkJfQoJCWtzb3J0KCRvcmRlcik7CgkJcmV0dXJuICRvcmRlcjsKCX0KCgkvKioKCVJhbmRvbU9yZGVyOgoJQHN0YXJ0OiBmaXJzdCB0ZWFtIGlkIGluIHRoZSBzZXJpZXMgdG8gYmUgcmFuZG9taXNlZAoJQGNvdW50OiBuby4gb2YgdGVhbSBpZCdzIGluIHRoZSBzZXJpZXMKCVJldHVybnM6IEFycmF5IG9mIHJhbmRvbSB0ZWFtIGlkcy4gQXJyYXkga2V5cyBhbmQgdmFsdWVzIGFyZSBpbnRlZ2VycyBpbiB0aGUKCXJhbmdlIEBzdGFydCB0byBAc3RhcnQrQGNvdW50LTEuIFRoZSBrZXlzIGFyZSBpbiBhc2NlbmRpbmcgb3JkZXIsIHRoZQoJY29ycmVzcG9uZGluZyB2YWx1ZXMgYXJlIGluIHJhbmRvbSBvcmRlci4KCSovCglwcml2YXRlIGZ1bmN0aW9uIFJhbmRvbU9yZGVyKCRzdGFydCwkY291bnQpCgl7CgkJJGxhc3QgPSAkc3RhcnQgKyAkY291bnQgLSAxOwoJCWlmKCRsYXN0ID4gJHN0YXJ0KQoJCXsKCQkJJGtleXMgPSByYW5nZSgkc3RhcnQsJGxhc3QpOwoJCQkkdmFscyA9ICRrZXlzOwoJCQlzaHVmZmxlKCR2YWxzKTsKCQkJcmV0dXJuIGFycmF5X2NvbWJpbmUoJGtleXMsJHZhbHMpOwoJCX0KCQlyZXR1cm4gYXJyYXkoJHN0YXJ0PT4kc3RhcnQpOwoJfQoKCS8qKgoJUmFuZG9tQWRkOgoJQGJyYWNrZXRfaWQ6CglAdGlkOiBpZCBvZiB0ZWFtIHRvIGJlIGFkZGVkCglGb3IgS08sREUgYnJhY2tldCxzdWJzdGl0dXRlIEB0aWQgZm9yIGEgYnllIGluIHRoZSAxc3Qgcm91bmQuCglBc3N1bWVzIHByaW9yIGNoZWNrIGZvciBwZXJtaXNzaW9uIHRvIGRvIHRoaXMgKHNlZSB0bXRFZGl0U2V0dXA6OlNwYXJlU2xvdCgpKQoJUmV0dXJuczogVFJVRSB1cG9uIHN1Y2Nlc3MKCSovCglmdW5jdGlvbiBSYW5kb21BZGQoJGJyYWNrZXRfaWQsJHRpZCkKCXsKCQkkcHJlZiA9IGNtc19kYl9wcmVmaXgoKTsKCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOwoJCSRzcWwgPSAnU0VMRUNUIG1hdGNoX2lkLHRlYW1BLHRlYW1CLG5leHRtIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzIFdIRVJFIGJyYWNrZXRfaWQ9PyBBTkQgZmxhZ3M9MApBTkQgKHRlYW1BID0gLTEgT1IgdGVhbUIgPSAtMSkKQU5EIG1hdGNoX2lkIE5PVCBJTiAoU0VMRUNUIERJU1RJTkNUIG5leHRtIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzIFdIRVJFIGJyYWNrZXRfaWQ9PyBBTkQgZmxhZ3M9MCBBTkQgbmV4dG0gSVMgTk9UIE5VTEwpJzsKCQkkYnllcyA9ICRkYi0+R2V0QXNzb2MoJHNxbCxhcnJheSgkYnJhY2tldF9pZCwkYnJhY2tldF9pZCkpOwoJCWlmKCRieWVzKQoJCXsKCQkJJG1pZHMgPSBhcnJheV9rZXlzKCRieWVzKTsKCQkJJGkgPSBjb3VudCgkbWlkcyk7CgkJCWlmKCRpID4gMSkKCQkJCSRpID0gcmFuZCgwLCRpLTEpOwoJCQllbHNlCgkJCQkkaSA9IDA7CgkJCSRtaWQgPSAkbWlkc1skaV07CgkJCSRtZGF0YSA9ICRieWVzWyRtaWRdOwoJCQlpZigoaW50KSRtZGF0YVsndGVhbUEnXSA9PSAtMSkKCQkJewoJCQkJJHdpbm5lciA9IChpbnQpJG1kYXRhWyd0ZWFtQiddOwoJCQkJJGFyZ3MgPSBhcnJheSgkdGlkLCR3aW5uZXIsJG1pZCk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkd2lubmVyID0gKGludCkkbWRhdGFbJ3RlYW1BJ107CgkJCQkkYXJncyA9IGFycmF5KCR3aW5uZXIsJHRpZCwkbWlkKTsKCQkJfQoJCQkkc3FsID0gJ1VQREFURSAnLiRwcmVmLidtb2R1bGVfdG10X21hdGNoZXMgU0VUIHRlYW1BPT8sdGVhbUI9PyxzdGF0dXM9Jy5Ub3VybmV5OjpOT1RZRVQuJyBXSEVSRSBtYXRjaF9pZD0/JzsKCQkJJGRiLT5FeGVjdXRlKCRzcWwsJGFyZ3MpOwoJCQkkc3FsID0gJ1VQREFURSAnLiRwcmVmLidtb2R1bGVfdG10X21hdGNoZXMgU0VUIHRlYW1BPU5VTEwscGxheXdoZW49TlVMTCBXSEVSRSBtYXRjaF9pZD0/IEFORCB0ZWFtQT0/JzsKCQkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJG1kYXRhWyduZXh0bSddLCR3aW5uZXIpKTsKCQkJJHNxbCA9ICdVUERBVEUgJy4kcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzIFNFVCB0ZWFtQj1OVUxMLHBsYXl3aGVuPU5VTEwgV0hFUkUgbWF0Y2hfaWQ9PyBBTkQgdGVhbUI9Pyc7CgkJCSRyczIgPSAkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkbWRhdGFbJ25leHRtJ10sJHdpbm5lcikpOwoJCQlyZXR1cm4gVFJVRTsKCQl9CgkJcmV0dXJuIEZBTFNFOwoJfQoKCS8qKgoJSW5pdEJ5ZXM6CglAYnJhY2tldF9pZDogaWRlbnRpZmllciBvZiBicmFja2V0IGJlaW5nIHByb2Nlc3NlZAoJQGRiOiByZWZlcmVuY2UgdG8gZGF0YWJhc2UgY29ubmVjdGlvbgoJQHByZWY6IGRhdGFiYXNlIHRhYmxlLXByZWZpeCBzdHJpbmcKCVN0b3JlIHN0YXR1cyBmb3IgYW55IG1hdGNoKGVzKSB3aXRoIGEgYnllCgkqLwoJcHJpdmF0ZSBmdW5jdGlvbiBJbml0QnllcygkYnJhY2tldF9pZCwmJGRiLCRwcmVmKQoJewoJCSRzcWwgPSAnU0VMRUNUIG1hdGNoX2lkLHRlYW1BLHRlYW1CIEZST00gJy4kcHJlZgoJCS4nbW9kdWxlX3RtdF9tYXRjaGVzIFdIRVJFIGJyYWNrZXRfaWQ9PyBBTkQgKHRlYW1BPS0xIE9SIHRlYW1CPS0xKSBPUkRFUiBCWSBtYXRjaF9pZCc7CgkJJGJ5ZXMgPSAkZGItPkdldEFzc29jKCRzcWwsYXJyYXkoJGJyYWNrZXRfaWQpKTsKCQlpZigkYnllcykKCQl7CgkJCSRzcWwgPSAnVVBEQVRFICcuJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlcyBTRVQgc3RhdHVzPT8gV0hFUkUgbWF0Y2hfaWQ9Pyc7CgkJCWZvcmVhY2goJGJ5ZXMgYXMgJGluZHg9PiRtZGF0YSkKCQkJewoJCQkJaWYoJG1kYXRhWyd0ZWFtQSddID09ICctMScpCgkJCQkJJHN0YXR1cyA9ICgkbWRhdGFbJ3RlYW1CJ10gIT0gJy0xJykgPyBUb3VybmV5OjpXT05CIDogVG91cm5leTo6Tk9XSU47CgkJCQllbHNlIC8vJG1kYXRhWyd0ZWFtQiddID09ICctMScKCQkJCQkkc3RhdHVzID0gKCRtZGF0YVsndGVhbUEnXSAhPSAnLTEnKSA/IFRvdXJuZXk6OldPTkEgOiBUb3VybmV5OjpOT1dJTjsKCQkJCSRkYi0+RXhlY3V0ZSgkc3FsLGFycmF5KCRzdGF0dXMsJGluZHgpKTsKCQkJfQoJCX0KCX0KCgkvKioKCVNldFRlYW06CglAdGlkOiBpZCBvZiB0ZWFtIChvciAtMSBmb3IgYnllKSB0byBiZSBwcm9ncmVzc2VkCglAbWlkOiBpZCBvZiBtYXRjaCB0byBiZSB1cGRhdGVkCglAcHJldm06IGlkIG9mIG1hdGNoIHdob3NlIHJlc3VsdCBpcyBiZWluZyByZXBvcnRlZAoJQGRiOiByZWZlcmVuY2UgdG8gZGF0YWJhc2UgY29ubmVjdGlvbgoJQHByZWY6IGRhdGFiYXNlIHRhYmxlLXByZWZpeCBzdHJpbmcKCUBsb3Nlcjogb3B0aW9uYWwsIHdoZXRoZXIgcHJvY2Vzc2luZyB0aGUgbG9zZXJzLWRyYXcgaW4gYSBERSBicmFja2V0LCBkZWZhdWx0ID0gRkFMU0UKCUZvciBtYXRjaCB3aG9zZSBpZCBpcyBAbWlkLHNldCB0ZWFtQSBvciB0ZWFtQiB0byBAdGlkLgoJSWYgYm90aCB0ZWFtcyBhcmUgdGhlbiBrbm93biwgQG1pZCdzIHN0YXR1cyBpcyB1cGRhdGVkIGluIHNvbWUgY2FzZXMuCgkqLwoJcHJpdmF0ZSBmdW5jdGlvbiBTZXRUZWFtKCR0aWQsJG1pZCwkcHJldm0sJiRkYiwkcHJlZiwkbG9zZXI9RkFMU0UpCgl7CgkJJHN0YXR1cyA9IDA7CgkJJGZpZWxkID0gKCRsb3NlcikgPyAnbmV4dGxtJzonbmV4dG0nOwoJCSRzcWwgPSAnU0VMRUNUIG1hdGNoX2lkIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzIFdIRVJFICcuJGZpZWxkLic9PyBBTkQgbWF0Y2hfaWQhPT8gQU5EIGZsYWdzPTAgQU5EIHN0YXR1cz49Jy5Ub3VybmV5OjpBTk9OOwoJCSRwcmV2byA9ICRkYi0+R2V0T25lKCRzcWwsYXJyYXkoJG1pZCwkcHJldm0pKTsKCQlpZigkcHJldm8gPT0gRkFMU0UpIC8vdGhpcyBpcyB0aGUgMXN0IHJlcG9ydCBmb3IgdGhpcyBtYXRjaAoJCQkkdmFscyA9IGFycmF5KCR0aWQsTlVMTCk7IC8vc3RvcmUgdGhpcyB3aW5uZXIgYXMgdGVhbUEgKGV2ZW4gaWYgYSBieWUpCgkJZWxzZQoJCXsKCQkJLy9zdG9yZSB3aW5uZXJzIGluIG1hdGNoLW9yZGVyIHNvIHRoZXkgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gc2FtZSBvcmRlciBhcyBwcmV2aW91cyBtYXRjaGVzCgkJCSRzcWwgPSAnU0VMRUNUIHRlYW1BLHN0YXR1cyBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlcyBXSEVSRSBtYXRjaF9pZD0/IEFORCBmbGFncz0wJzsKCQkJJG1kYXRhID0gJGRiLT5HZXRSb3coJHNxbCxhcnJheSgkbWlkKSk7CgkJCSRvaWQgPSAoJG1kYXRhWyd0ZWFtQSddKSA/IChpbnQpJG1kYXRhWyd0ZWFtQSddIDogTlVMTDsgLy9kb24ndCBjb252ZXJ0IE5VTEwgdG8gMAoJCQlpZigkcHJldm8gPCAkcHJldm0pIC8vcHJldmlvdXMgcmVwb3J0IGZyb20gbG93ZXItbnVtYmVyZWQgbWF0Y2gKCQkJewoJCQkJJHZhbHMgPSBhcnJheSgkb2lkLCR0aWQpOyAvL3N0b3JlIHRoaXMgd2lubmVyIGFzIHRlYW1CCgkJCQlpZigkb2lkID09IC0xKSAvL2J5ZQoJCQkJCSRzdGF0dXMgPSBUb3VybmV5OjpXT05COwoJCQkJZWxzZWlmKCR0aWQgPT0gLTEpCgkJCQkJJHN0YXR1cyA9IFRvdXJuZXk6OldPTkE7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkdmFscyA9IGFycmF5KCR0aWQsJG9pZCk7IC8vc3RvcmUgYXMgdGVhbUEKCQkJCWlmKCRvaWQgPT0gLTEpCgkJCQkJJHN0YXR1cyA9IFRvdXJuZXk6OldPTkE7CgkJCQllbHNlaWYoJHRpZCA9PSAtMSkKCQkJCQkkc3RhdHVzID0gVG91cm5leTo6V09OQjsKCQkJfQoJCQlpZigkc3RhdHVzID09IDApCgkJCXsKCQkJCXN3aXRjaCgkbWRhdGFbJ3N0YXR1cyddKQoJCQkJewoJCQkJIGNhc2UgVG91cm5leTo6QVNPRlQ6CgkJCQkJJHN0YXR1cyA9IFRvdXJuZXk6OlNPRlQ7CgkJCQkJYnJlYWs7CgkJCQkgY2FzZSBUb3VybmV5OjpBRklSTToKCQkJCSBjYXNlIFRvdXJuZXk6OlRPTEQ6CgkJCQkgY2FzZSBUb3VybmV5OjpBU0tFRDoKCQkJCQkkc3RhdHVzID0gVG91cm5leTo6RklSTTsgLy9yZXZlcnQgdG8gdGhpcwoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJfQoJCSRzcWwgPSAnVVBEQVRFICcuJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlcyBTRVQgdGVhbUE9Pyx0ZWFtQj0/JzsKCQlpZigkc3RhdHVzKQoJCQkkc3FsIC49ICcsc3RhdHVzPScuJHN0YXR1czsKCQkkc3FsIC49ICcgV0hFUkUgbWF0Y2hfaWQ9Pyc7CgkJJHZhbHNbXSA9ICRtaWQ7CgkJJGRiLT5FeGVjdXRlKCRzcWwsJHZhbHMpOwoJfQoKCS8qKgoJU2NoZWR1bGVNYXRjaGVzOgoJQG1vZDogcmVmZXJlbmNlIHRvIG1vZHVsZSBvYmplY3QKCUBicmFja2V0X2lkOiB0aGUgYnJhY2tldCBpZGVudGlmaWVyCglTZXR1cCBkYXRlcy90aW1lcyBmb3IgbWF0Y2hlcyB3aG9zZSBwYXJ0aWNpcGFudHMgYXJlIGtub3duLgoJVGhlIG1hdGNoZXMgdGFibGUgaXMgdXBkYXRlZCBhY2NvcmRpbmdseS4KCVJldHVybnM6IEZBTFNFIHVwb24gZXJyb3Igb3Igbm90aGluZyB0byBwcm9jZXNzIG9yCgkgbm8gc3RhcnRkYXRlIG9yIHRpbWV6b25lIGZvciB0aGUgYnJhY2tldAoJKi8KCWZ1bmN0aW9uIFNjaGVkdWxlTWF0Y2hlcygmJG1vZCwkYnJhY2tldF9pZCkKCXsKCQkkcHJlZiA9IGNtc19kYl9wcmVmaXgoKTsKCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOwoJCSRzcWwgPSAnU0VMRUNUICogRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X2JyYWNrZXRzIFdIRVJFIGJyYWNrZXRfaWQ9Pyc7CgkJJGJkYXRhID0gJGRiLT5HZXRSb3coJHNxbCxhcnJheSgkYnJhY2tldF9pZCkpOwoJCWlmKCRiZGF0YSA9PSBGQUxTRSkKCQkJcmV0dXJuIEZBTFNFOwoJCWlmKGVtcHR5KCRiZGF0YVsnc3RhcnRkYXRlJ10pIHx8IGVtcHR5KCRiZGF0YVsndGltZXpvbmUnXSkpCgkJCXJldHVybiBGQUxTRTsKCQkkY2FsID0gbmV3IHRtdENhbGVuZGFyKCRtb2QpOwoJCWlmKCEkY2FsLT5QYXJzZUNvbmRpdGlvbigkYmRhdGFbJ2F2YWlsYWJsZSddLCRiZGF0YVsnbG9jYWxlJ10pKQoJCQlyZXR1cm4gRkFMU0U7CgkJJHR6ID0gbmV3IERhdGVUaW1lWm9uZSgkYmRhdGFbJ3RpbWV6b25lJ10pOwoJCSRzZHQgPSBuZXcgRGF0ZVRpbWUoJGJkYXRhWydzdGFydGRhdGUnXSwkdHopOwoJCSRzc3RhbXAgPSAkc2R0LT5nZXRUaW1lc3RhbXAoKTsgLy93aGVuIHRoZSB0b3VybmFtZW50IHN0YXJ0e3N8ZWR9CgkJLy9hbGxvdyBtaW5pbXVtIGxlYWR0aW1lIGJlZm9yZSB0aGUgbmV4dCBtYXRjaAoJCSRkdCA9IG5ldyBEYXRlVGltZSgnKycuVG91cm5leTo6TEVBREhPVVJTLicgaG91cnMnLCR0eik7CgkJJHN0YW1wID0gJGR0LT5nZXRUaW1lc3RhbXAoKTsKIAkJaWYoJHN0YW1wIDwgJHNzdGFtcCkKCQkJJHN0YW1wID0gJHNzdGFtcDsKCgkJJGF0ID0gc2VsZjo6R2V0TmV4dFNsb3QoJGNhbCwkYmRhdGEsJHN0YW1wLEZBTFNFKTsgLy9maW5kIDFzdCBzbG90CgkJaWYoJGF0ID09IEZBTFNFKQoJCQlyZXR1cm4gRkFMU0U7CgkJCgkJLy9tYXRjaGVzIGluIERFU0Mgb3JkZXIgc28gbmV4dCBmb3JlYWNoIG92ZXJ3cml0ZXMgbmV3ZXIgb25lcyBpbiAkYWxsdGVhbXMgYXJyYXkKCQkvL0NIRUNLTUUgYWxzbyBnZXQgU09GVCBtYXRjaGVzIGJlZm9yZSBub3c/CgkJJHNxbCA9ICdTRUxFQ1QgbWF0Y2hfaWQsdGVhbUEsdGVhbUIgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X21hdGNoZXMgV0hFUkUgYnJhY2tldF9pZD0/IEFORCBmbGFncz0wIEFORCBzdGF0dXM8Jy4KCQkgVG91cm5leTo6QU5PTi4nIEFORCBwbGF5d2hlbiBJUyBOVUxMIEFORCB0ZWFtQSBJUyBOT1QgTlVMTCBBTkQgdGVhbUIgSVMgTk9UIE5VTEwgT1JERVIgQlkgbWF0Y2hfaWQgREVTQyc7CgkJJG1kYXRhID0gJGRiLT5HZXRBc3NvYygkc3FsLGFycmF5KCRicmFja2V0X2lkKSk7CgkJaWYoJG1kYXRhID09IEZBTFNFKQoJCQlyZXR1cm4gRkFMU0U7CgkJJHR6ID0gbmV3IERhdGVUaW1lWm9uZSgkYmRhdGFbJ3RpbWV6b25lJ10pOwoJCSRwbGF5b3JkZXIgPSBhcnJheSgpOwoJCSRhbGx0ZWFtcyA9IGFycmF5KCk7IAoJCSRzcWwxID0gJ1NFTEVDVCBNQVgocGxheXdoZW4pIEFTIGxhc3QgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X21hdGNoZXMgV0hFUkUgKHRlYW1BPT8gT1IgdGVhbUE9PykgQU5EIGZsYWdzPTAnOwoJCSRzcWwyID0gJ1NFTEVDVCBNQVgocGxheXdoZW4pIEFTIGxhc3QgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X21hdGNoZXMgV0hFUkUgKHRlYW1CPT8gT1IgdGVhbUI9PykgQU5EIGZsYWdzPTAnOwoJCWZvcmVhY2goJG1kYXRhIGFzICRtaWQ9PiRtdGVhbXMpCgkJewoJCQkkdCA9ICRkYi0+R2V0T25lKCRzcWwxLGFycmF5KCRtdGVhbXNbJ3RlYW1BJ10sJG10ZWFtc1sndGVhbUInXSkpOwoJCQkkZHQgPSAoJHQgIT0gbnVsbCkgPyBuZXcgRGF0ZVRpbWUoJHQsJHR6KSA6ICRzZHQ7CgkJCSRwbGF5b3JkZXJbJG10ZWFtc1sndGVhbUEnXV0gPSAkZHQtPmdldFRpbWVzdGFtcCgpOwoJCQkkYWxsdGVhbXNbJG10ZWFtc1sndGVhbUEnXV0gPSAkbWlkOwoJCQkkdCA9ICRkYi0+R2V0T25lKCRzcWwyLGFycmF5KCRtdGVhbXNbJ3RlYW1BJ10sJG10ZWFtc1sndGVhbUInXSkpOwoJCQkkZHQgPSAoJHQgIT0gbnVsbCkgPyBuZXcgRGF0ZVRpbWUoJHQsJHR6KSA6ICRzZHQ7CgkJCSRwbGF5b3JkZXJbJG10ZWFtc1sndGVhbUInXV0gPSAkZHQtPmdldFRpbWVzdGFtcCgpOwoJCQkkYWxsdGVhbXNbJG10ZWFtc1sndGVhbUInXV0gPSAkbWlkOwoJCX0KCQlhc29ydCgkcGxheW9yZGVyLFNPUlRfTlVNRVJJQyk7IC8vVE9ETyBmb3IgUlI/CgoJCSRzYXZlID0gc3RyZnRpbWUoJyVGICVSJywkYXQpOwoJCSRkaWZmID0gc2VsZjo6R2FwU2Vjb25kcygkYmRhdGFbJ3BsYXlnYXB0eXBlJ10sJGJkYXRhWydwbGF5Z2FwJ10pOwoJCS8vaW5pdGlhbCB0aHJlc2hvbGQKIAkJaWYoJHN0YW1wID09ICRzc3RhbXApCgkJCSR0aHJlc2hvbGQgPSAkc3N0YW1wOwoJCWVsc2UKCQkJJHRocmVzaG9sZCA9ICRhdCAtICRkaWZmOwoJCSRzbG90Y291bnQgPSAkYmRhdGFbJ3NhbWV0aW1lJ107IC8vbWF5YmUgbnVsbAoJCSRzcWwgPSAnVVBEQVRFICcuJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlcyBTRVQgcGxheXdoZW49PyxzdGF0dXM9PyBXSEVSRSBtYXRjaF9pZD0/JzsKCQlmb3JlYWNoKCRwbGF5b3JkZXIgYXMgJHRpZD0+JGxhc3QpCgkJewoJCQlpZigkbGFzdCA8PSAkdGhyZXNob2xkKQoJCQl7CgkJCQkkbWlkID0gJGFsbHRlYW1zWyR0aWRdOwoJCQkJJHBhaXIgPSAkbWRhdGFbJG1pZF07CgkJCQkkb2lkID0gKCR0aWQgPT0gJHBhaXJbJ3RlYW1BJ10pID8oaW50KSRwYWlyWyd0ZWFtQiddIDooaW50KSRwYWlyWyd0ZWFtQSddOwoJCQkJaWYoJG9pZCAhPSAtMSAmJiAkcGxheW9yZGVyWyRvaWRdIDw9ICR0aHJlc2hvbGQpIC8vdGVhbXMgJHRpZCAmICRvaWQgYm90aCBsYXN0LXBsYXllZCBiZWZvcmUgJHRocmVzaG9sZAoJCQkJewoJCQkJCSRkYi0+RXhlY3V0ZSgkc3FsLGFycmF5KCRzYXZlLFRvdXJuZXk6OlNPRlQsJG1pZCkpOwoJCQkJCWlmKCFlbXB0eSgkc2xvdGNvdW50KSkKCQkJCQl7CgkJCQkJCWlmKC0tJHNsb3Rjb3VudCA9PSAwKQoJCQkJCQl7CgkJCQkJCQkkYXQgPSBzZWxmOjpHZXROZXh0U2xvdCgkY2FsLCRiZGF0YSwkYXQsVFJVRSk7CgkJCQkJCQlpZigkYXQgPT0gRkFMU0UpCgkJCQkJCQkJcmV0dXJuIEZBTFNFOwoJCQkJCQkJJHNhdmUgPSBzdHJmdGltZSgnJUYgJVInLCRhdCk7CgkJCQkJCQkkdGhyZXNob2xkID0gJGF0IC0gJGRpZmY7CgkJCQkJCQkkc2xvdGNvdW50ID0gJGJkYXRhWydzYW1ldGltZSddOwoJCQkJCQl9CgkJCQkJfQoJCQkJCXVuc2V0KCRwbGF5b3JkZXJbJG9pZF0pOyAvL25vIG5lZWQgdG8gcHJvY2VzcyB0aGF0IG9uZSBhZ2FpbgoJCQkJfQoJCQl9CgkJfQoJCXJldHVybiBUUlVFOwoJfQoKCS8qKgoJR2FwU2Vjb25kczoKCUdldCBuby4gb2Ygc2Vjb25kcyBmb3IgYSBnYXAKCUB0eXBlOiBnYXAtdHlwZSBlbnVtIDAgPSBub25lLCAxID0gc2Vjb25kIC4uIDUgPSBtb250aAoJQGNvdW50OiBuby4gb2YgQHR5cGUgaW4gdGhlIGdhcAoJKi8KCXByaXZhdGUgZnVuY3Rpb24gR2FwU2Vjb25kcygkdHlwZSwkY291bnQpCgl7CgkJc3dpdGNoKCR0eXBlKQoJCXsKCQkgY2FzZSAxOgoJCQkkZiA9IDYwOwoJCQlicmVhazsKCQkgY2FzZSAyOgoJCSAJJGYgPSAzNjAwOwoJCQlicmVhazsKCQkgY2FzZSAzOgoJCSAJJGYgPSA4NjQwMDsgLy8zNjAwKjI0CgkJCWJyZWFrOwoJCSBjYXNlIDQ6CgkJIAkkZiA9IDYwNDgwMDsgLy8zNjAwKjI0KjcKCQkJYnJlYWs7CgkJIGNhc2UgNToKCQkJJGYgPSAxODE0NDAwMDsgLy8zNjAwKjI0KjcqMzAgVE9ETyBzcGVjaWFsIGhhbmRsaW5nIGZvciBtb250aHMKCQkJYnJlYWs7CgkJIGRlZmF1bHQ6IC8vbm9uZQoJCQkkZiA9IDA7CgkJCWJyZWFrOwoJCX0KCQlpZihlbXB0eSgkY291bnQpKQoJCQlyZXR1cm4gJGY7CgkJZWxzZQoJCQlyZXR1cm4gJGYgKiAkY291bnQ7Cgl9CgoJLyoqCglHZXROZXh0U2xvdDoKCUBjYWw6IHJlZmVyZW5jZSB0byB0bXRDYWxlbmRhciBvYmplY3QgaW5jbHVkaW5nIHBhcnNlZCBhdmFpbGFiaWxpdHktY29uZGl0aW9ucwoJQGJkYXRhOiByZWZlcmVuY2UgdG8gYXJyYXkgb2YgYnJhY2tldCBkYXRhCglAc3RhbXA6IHRpbWVzdGFtcCBleHByZXNzZWQgZm9yIGJyYWNrZXQgdGltZXpvbmUKCUB3aXRoZ2FwOiBvcHRpb25hbCwgd2hldGhlciB0byBhcHBlbmQgYnJhY2tldCdzIHBsYWNlZ2FwIHRvIEBzdGFtcCwgZGVmYXVsdCBGQUxTRQoJQGxhdGVyOiBvcHRpb25hbCwgbm8uIG9mIGRheXMtYWhlYWQgdG8gc2NhbiBmb3IgdGhlIHNsb3QsIGRlZmF1bHQgMTQKCVJldHVybnM6IHRpbWVzdGFtcCBvciAwCgkqLwoJcHJpdmF0ZSBmdW5jdGlvbiBHZXROZXh0U2xvdCgmJGNhbCwmJGJkYXRhLCRzdGFtcCwkd2l0aGdhcD1GQUxTRSwkbGF0ZXI9MTQpCgl7CgkJaWYoJHdpdGhnYXApCgkJewoJCQkvL1RPRE8gZmluZCByZWxldmFudCByZXNvdXJjZSwgaXRzIGxhc3QgZW5kLXRpbWUsIGdhcCBmcm9tIHRoZW4KCQkJJHN0YW1wICs9IHNlbGY6OkdhcFNlY29uZHMoJGJkYXRhWydwbGFjZWdhcHR5cGUnXSwkYmRhdGFbJ3BsYWNlZ2FwJ10pOwoJCX0KCQkkc2xvdGxlbiA9IHNlbGY6OkdhcFNlY29uZHMoJGJkYXRhWydwbGF5Z2FwdHlwZSddLCRiZGF0YVsncGxheWdhcCddKTsKCgkJJGF0ID0gJGNhbC0+TmV4dFNsb3RTdGFydCgkYmRhdGEsJHN0YW1wLCRzbG90bGVuLCRsYXRlcik7CgkJaWYoJGF0KQoJCQkkYXQgPSBmbG9vcigkYXQvNjApKjYwOyAvL2Vuc3VyZSAwIHNlYwoJCXJldHVybiAkYXQ7Cgl9CgoJLyoqCglJbml0S09NYXRjaGVzOgoJQG1vZDogcmVmZXJlbmNlIHRvIG1vZHVsZSBvYmplY3QKCUBicmFja2V0X2lkOiB0aGUgYnJhY2tldCBpZGVudGlmaWVyCglDcmVhdGUgYSBzZXQgb2YgbWF0Y2ggcmVjb3JkcywgaW4gdGhlIG1hdGNoZXMgdGFibGUsIGZvciB0aGUgYnJhY2tldAoJQ2xlYXJzIGFueSBleGlzdGluZyBtYXRjaGVzIGZvciB0aGUgYnJhY2tldAoJU3RvcmVzIHN0YXR1cyBmb3IgbWF0Y2hlcyB3aGljaCBoYXZlIGEgYnllCglSZXR1cm5zOiBUUlVFIG9uIHN1Y2Nlc3MsIG9yIGxhbmcta2V5IGZvciBlcnJvciBtZXNzYWdlIGlmIGJhZCBuby4gb2YgdGVhbXMgaW4gdGhlIGJyYWNrZXQKCSovCglmdW5jdGlvbiBJbml0S09NYXRjaGVzKCYkbW9kLCRicmFja2V0X2lkKQoJewoJCSRwcmVmID0gY21zX2RiX3ByZWZpeCgpOwoJCSRkYiA9IGNtc21zKCktPkdldERiKCk7CgkJJHNxbCA9ICdTRUxFQ1QgdGVhbV9pZCxzZWVkaW5nIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF90ZWFtcwpXSEVSRSBicmFja2V0X2lkPT8gQU5EIGZsYWdzIT0yIE9SREVSIEJZIChDQVNFIFdIRU4gc2VlZGluZyBJUyBOVUxMIFRIRU4gMSBFTFNFIDAgRU5EKSxzZWVkaW5nJzsKCQkkYWxsdGVhbXMgPSAkZGItPkdldEFzc29jKCRzcWwsYXJyYXkoJGJyYWNrZXRfaWQpKTsKCQlpZigkYWxsdGVhbXMgPT0gRkFMU0UpCgkJCXJldHVybiAnaW5mb19ub21hdGNoJzsgLy9ubyB0ZWFtcyBtZWFucyBubyBtYXRjaGVzCgkJJG51bXRlYW1zID0gY291bnQoJGFsbHRlYW1zKTsKCQlsaXN0KCRtaW4sJG1heCkgPSAkbW9kLT5HZXRMaW1pdHMoVG91cm5leTo6S09UWVBFKTsKCQlpZigkbnVtdGVhbXMgPiAkbWF4IHx8ICRudW10ZWFtcyA8ICRtaW4pCgkJCXJldHVybiAnZXJyX3ZhbHVlJzsKCQkkbnVtc2VlZHMgPSBjb3VudChhcnJheV9maWx0ZXIoJGFsbHRlYW1zKSk7CgkJaWYoJG51bXNlZWRzID4gMSkKCQl7CgkJCSRzcWwgPSAnU0VMRUNUIHNlZWR0eXBlLGZpeHR5cGUgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X2JyYWNrZXRzIFdIRVJFIGJyYWNrZXRfaWQ9Pyc7CgkJCSRyb3cgPSAkZGItPkdldFJvdygkc3FsLGFycmF5KCRicmFja2V0X2lkKSk7CgkJCSRzdHlwZSA9IChpbnQpJHJvd1snc2VlZHR5cGUnXTsKCQkJJGZ0eXBlID0gKGludCkkcm93WydmaXh0eXBlJ107IC8qZW51bQoJCQkJMCBhbnkgc2VlZCA8IDAgaXMgaWdub3JlZAoJIAkJCTEgY2xvc2VzdCBzZWVkcyA8IDAgcGxheSBlYWNoIG90aGVyCgkgCQkJMiB0cmVhdCBzZWVkcyA8IDAgbGlrZSBzZWVkdHlwZSAyCgkJCQkzIHRyZWF0IHNlZWRzIDwgMCBsaWtlIHNlZWR0eXBlIDMKKi8KCQl9CgkJZWxzZQoJCXsKCQkJJHN0eXBlID0gMDsgLy9kZWZhdWx0IHRvIHJhbmRvbQoJCQkkZnR5cGUgPSAwOyAvL2FuZCBubyBzcGVjaWFsLWNhc2UgaGFuZGxpbmcKCQl9CgkJLy9leHRyYWN0IGFueSBzZWVkbnVtcyA8IDAKCQkkZml4dGVhbXMgPSBhcnJheSgpOwoJCSRudW1maXggPSAwOwoJCWZvcmVhY2goJGFsbHRlYW1zIGFzICRzZWVkKQoJCXsKCQkJaWYoJHNlZWQgPCAwKQoJCQkJJG51bWZpeCsrOwoJCQllbHNlCgkJCQlicmVhazsKCQl9CgkJJG51bXNlZWRzIC09ICRudW1maXg7IC8vPSAncmVhbCcgc2VlZHMKCQlpZigkbnVtZml4ID4gMCkKCQl7CgkJCWlmKCRmdHlwZSA9PSAwKSAvL2lnbm9yZSB0aGVtIGFsbAoJCQkJJG1jID0gJG51bWZpeDsKCQkJZWxzZWlmKCRudW10ZWFtcyAtICRudW1maXggPCAkbnVtc2VlZHMqMikgLy9uZWVkIGF0IGxlYXN0IGFzIG1hbnkgbm9uLWZpeGVycyBhcyBzZWVkcwoJCQkJJG1jID0gJG51bXNlZWRzKjIgLSAkbnVtdGVhbXMgKyAkbnVtZml4OwoJCQllbHNlCgkJCQkkbWMgPSAwOwoJCQkkbnVtZml4IC09ICRtYzsKCQkJaWYoJG51bWZpeCAlIDIpCS8vbmVlZCBldmVuIG5vLiBvZiBmaXhlcnMKCQkJewoJCQkJJG1jKys7CgkJCQkkbnVtZml4LS07CgkJCX0KCQkJd2hpbGUoJG1jID4gMCkKCQkJewoJCQkJLy9taWdyYXRlIGN1cnJlbnQgMXN0IG1lbWJlciBvZiAkYWxsdGVhbXMgdG8gZW5kLCBhcyB1bnNlZWRlZAoJCQkJcmVzZXQoJGFsbHRlYW1zKTsKCQkJCSR0aWQgPSBrZXkoJGFsbHRlYW1zKTsKCQkJCXVuc2V0KCRhbGx0ZWFtc1skdGlkXSk7CgkJCQkkYWxsdGVhbXNbJHRpZF0gPSAnJzsKCQkJCSRtYy0tOwoJCQl9CgkJCWlmKCRudW1maXgpCgkJCXsKCQkJCS8vbWlncmF0ZSBmaXhlcnMgdG8gc2VwYXJhdGUgYXJyYXkKCQkJCWZvcigkaT0wOyAkaTwkbnVtZml4OyAkaSsrKQoJCQkJewoJCQkJCXJlc2V0KCRhbGx0ZWFtcyk7CgkJCQkJJHRpZCA9IGtleSgkYWxsdGVhbXMpOwoJCQkJCXVuc2V0KCRhbGx0ZWFtc1skdGlkXSk7CgkJCQkJJGZpeHRlYW1zW10gPSAkdGlkOwoJCQkJfQoJCQkJLy8kYWxsdGVhbXMgbGVmdCB3aXRoIGZsb2F0ZXJzIG9ubHkKCQkJfQoJCX0KCgkJJG51bXRlYW1zIC09ICRudW1maXg7IC8vbm8uIG9mIGZsb2F0aW5nIHRlYW1zCgkJJHJzID0gRkFMU0U7CgkJc3dpdGNoKCRzdHlwZSkKCQl7CgkJIGNhc2UgMDogLy9yYW5kb21pc2UgYWxsIHNlZWRzCgkJCWlmKCRudW1zZWVkcyA+IDEpCgkJCQkkcnMgPSAxOyAvL3N0YXJ0IHJhbmRvbWlzaW5nIGZyb20gYmVnaW5uaW5nCgkJCWJyZWFrOwoJCSBjYXNlIDE6IC8vcmFuZG9taXNlIHNlZWRzIDMgLi4uKGlmIHRoZXJlIGFyZSBlbm91Z2ggdG8gd29yayB3aXRoKQoJCQlpZigkbnVtc2VlZHMgPiAzICYmICRudW10ZWFtcyA+IDMpCgkJCQkkcnMgPSAzOwoJCQllbHNlCgkJCQkkcnMgPSAxOwoJCQlicmVhazsKCQkgY2FzZSA0OiAvL3JhbmRvbSBjaG9pY2UgMiBvciAzCgkJICAkc3R5cGUgPSByYW5kKDIsMyk7CgkJIGNhc2UgMzogLy9ubyBzZWVkIHJhbmRvbWlzaW5nCgkJIGNhc2UgMjoKCQkgCWJyZWFrOwoJCSBkZWZhdWx0OiAvL2lnbm9yZSBzZWVkcyxzaG91bGQgbmV2ZXIgaGFwcGVuCgkJCSRudW1zZWVkcyA9IDA7IC8vZG9uJ3QgdXNlICRhbGx0ZWFtcyBhdCBhbGwKCQkJYnJlYWs7CgkJfQoJCgkJaWYoJHJzKQoJCXsKCQkJJGV4c2VlZHMgPSBzZWxmOjpSYW5kb21PcmRlcigkcnMsJG51bXNlZWRzIC0gJHJzKTsKCQkJZm9yZWFjaCgkZXhzZWVkcyBhcyAkb2xkPT4kbmV3KQoJCQl7CgkJCQkkdG1wID0gJGFsbHRlYW1zWyRvbGRdOwoJCQkJJGFsbHRlYW1zWyRvbGRdID0gJGFsbHRlYW1zWyRuZXddOwoJCQkJJGFsbHRlYW1zWyRuZXddID0gJHRtcDsKCQkJfQoJCX0KCgkJLy9zaHVmZmxlICRmaXh0ZWFtcyBwZXIgJGZ0eXBlCgkJLy8wOiBhbHJlYWR5IGhhbmRsZWQsIDE6IHRlYW1zIGFscmVhZHkgaW4gbWF0Y2gtcGFpciBvcmRlcgoJCS8vMjogb3IgMzogaGFuZGxlZCBoZXJlCgkJaWYoJG51bWZpeCA+IDIgJiYgJGZ0eXBlID4gMSkKCQl7CgkJCSRoID0gJG51bWZpeC8yOwoJCQkkbCA9ICRudW1maXgtMTsgLy8wLWJhc2VkIGNvdW50IGZvciAkZnR5cGUgMwoJCQlmb3IoJGk9MDsgJGk8JGg7ICRpKz0yKQoJCQl7CgkJCQkkcyA9ICgkZnR5cGUgPT0gMikgPyAkaSskaCA6ICRsLSRpOwoJCQkJJHRtcCA9ICRmaXh0ZWFtc1skaSsxXTsKCQkJCSRmaXh0ZWFtc1skaSsxXSA9ICRmaXh0ZWFtc1skc107CgkJCQkkZml4dGVhbXNbJHNdID0gJHRtcDsKCQkJfSAJCQkJCQkJCgkJfQoJCSRmID0gMDsgLy9zdGFydCB3aXRoIGZpcnN0IChpZiBhbnkpIG1lbWJlciBvZiAkZml4dGVhbXNbXQoKCQlpZigkbnVtdGVhbXMgPiAkbnVtc2VlZHMpCgkJCSRyYW5kb21zID0gc2VsZjo6UmFuZG9tT3JkZXIoJG51bXNlZWRzKzEsJG51bXRlYW1zLSRudW1zZWVkcyk7CgkJJGFsbHRlYW1zID0gYXJyYXlfa2V5cygkYWxsdGVhbXMpOyAvL3RlYW0taWQncyBub3cgdmFsdWVzCgkJJG9yZGVyID0gc2VsZjo6T3JkZXJNYXRjaGVzKCRudW10ZWFtcyskbnVtZml4LCRudW1zZWVkcywkc3R5cGUsJG51bWZpeCk7CgkJZm9yZWFjaCgkb3JkZXIgYXMgJGk9PiR0aWQpCgkJewoJCQlpZigkdGlkIDwgMCkKCQkJCSRvcmRlclskaV0gPSAkZml4dGVhbXNbJGYrK107CgkJCWVsc2VpZigkdGlkIDw9ICRudW1zZWVkcykKCQkJCSRvcmRlclskaV0gPSAkYWxsdGVhbXNbJHRpZC0xXTsKCQkJZWxzZWlmKCR0aWQgPD0gJG51bXRlYW1zKQoJCQkJJG9yZGVyWyRpXSA9ICRhbGx0ZWFtc1skcmFuZG9tc1skdGlkXS0xXTsKCQkJZWxzZQoJCQkJJG9yZGVyWyRpXSA9IC0xOyAvL2J5ZQoJCX0KCQkkbnVtdGVhbXMgPSBjb3VudCgkb3JkZXIpOyAvL25vdGlvbmFsIGkuZS4gdGVhbXMgKyBieWVzIChwb3dlciBvZiAyKQoJCSRMQyA9ICgobG9nKCRudW10ZWFtcywyKS0wLjAwMDEpfDApICsgMTsgLy9uby4gb2YgbGV2ZWxzCgkJJHNxbCA9ICdERUxFVEUgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X21hdGNoZXMgV0hFUkUgYnJhY2tldF9pZD0/JzsKCQkkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkYnJhY2tldF9pZCkpOwoKCQkvL3NhZmVseSAncmVzZXJ2ZScgZW5vdWdoIG1hdGNoX2lkJ3MgLSBmb3Iga25vY2tvdXRzLE4gdGVhbXMgbWVhbnMgTi0xIHRvdGFsIG1hdGNoZXMKCQkkaWQxID0gc2VsZjo6UmVzZXJ2ZU1hdGNoZXMoJGRiLCRwcmVmLCRudW10ZWFtcy0xKTsKCQkkc3FsID0gJ0lOU0VSVCBJTlRPICcuJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlcyAobWF0Y2hfaWQsYnJhY2tldF9pZCxuZXh0bSx0ZWFtQSx0ZWFtQikgVkFMVUVTICg/LD8sPyw/LD8pJzsKCQlpZigkTEMgPiAxKSAvLz4gMiB0ZWFtcyBpbiB0aGUgY29tcAoJCXsKCQkJLy93b3JrIGJhY2t3YXJkcyBmcm9tIHRoZSBmaW5hbAoJCQkkaWRGID0gJGlkMSArICRudW10ZWFtcyAtIDI7CgkJCSRzcWwyID0gJ0lOU0VSVCBJTlRPICcuJHByZWYuIm1vZHVsZV90bXRfbWF0Y2hlcyAobWF0Y2hfaWQsYnJhY2tldF9pZCkgVkFMVUVTICgkaWRGLCRicmFja2V0X2lkKSI7IC8vZmluYWwgaGFzIG5vIHBhcmVudAoJCQkkZGItPkV4ZWN1dGUoJHNxbDIpOwoJCQkkc3FsMiA9ICdJTlNFUlQgSU5UTyAnLiRwcmVmLidtb2R1bGVfdG10X21hdGNoZXMgKG1hdGNoX2lkLGJyYWNrZXRfaWQsbmV4dG0pIFZBTFVFUyAoPyw/LD8pJzsKCQkJZm9yKCRMPTI7ICRMPD0kTEM7ICRMKyspCgkJCXsKCQkJCSRzdG9wID0gcG93KDIsJEwtMSk7CgkJCQkkbW9mZiA9ICRpZDEgKyAkbnVtdGVhbXMgLSAkc3RvcDsKCQkJCSRwb2ZmID0gJGlkMSArICRudW10ZWFtcyAtIDEgLSAkc3RvcC8yOwoJCQkJZm9yKCRpPTE7ICRpPD0kc3RvcDsgJGkrKykKCQkJCXsKCQkJCQkkcGFyZW50ID0gJHBvZmYgLSBpbnR2YWwoKCRpLTEpLzIpOwoJCQkJCWlmKCRMIDwgJExDKQoJCQkJCQkkZGItPkV4ZWN1dGUoJHNxbDIsYXJyYXkoJG1vZmYtJGksJGJyYWNrZXRfaWQsJHBhcmVudCkpOwoJCQkJCWVsc2UgLy9hbHNvIHByb2Nlc3MgdGhlIG9yZGVyIGFycmF5IGluIHJldmVyc2UKCQkJCQl7CgkJCQkJCSRpMiA9ICgkc3RvcCsxLSRpKSoyOwoJCQkJCQkkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkbW9mZi0kaSwkYnJhY2tldF9pZCwkcGFyZW50LCRvcmRlclskaTItMV0sJG9yZGVyWyRpMl0pKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJLy9zdG9yZSBzdGF0dXMgZm9yIG1hdGNoZXMgd2l0aCBhIGJ5ZQoJCQlzZWxmOjpJbml0QnllcygkYnJhY2tldF9pZCwkZGIsJHByZWYpOwoJCQkvL2NoYWluIHVwCgkJCXNlbGY6OlVwZGF0ZUtPTWF0Y2hlcygkbW9kLCRicmFja2V0X2lkKTsKCQl9CgkJZWxzZQoJCQkkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkaWQxLCRicmFja2V0X2lkLG51bGwsJGFsbHRlYW1zWzBdLCRhbGx0ZWFtc1sxXSkpOyAvL29uZSBtYXRjaCx0aGUgZmluYWwKCgkJcmV0dXJuIFRSVUU7Cgl9CgoJLyoqCglVcGRhdGVLT01hdGNoZXMoKQoJQG1vZDogcmVmZXJlbmNlIHRvIG1vZHVsZSBvYmplY3QKCUBicmFja2V0X2lkOiB0aGUgYnJhY2tldCBpZGVudGlmaWVyCglNaWdyYXRlIG1hdGNoIHdpbm5lcnMgdG8gY29ycmVzcG9uZGluZyBuZXh0IG1hdGNoZXMuIEJ5ZXMgYXJlIHByb3BhZ2F0ZWQuCglSZXR1cm5zOiBUUlVFIGlmIHVwZGF0ZSBkb25lLCBGQUxTRSBpZiBub3QKCSovCglmdW5jdGlvbiBVcGRhdGVLT01hdGNoZXMoJiRtb2QsJGJyYWNrZXRfaWQpCgl7CgkJJHByZWYgPSBjbXNfZGJfcHJlZml4KCk7CgkJJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCQkkc3FsMSA9ICdTRUxFQ1QgTS4qLE4udGVhbUEgQVMgbmV4dHRBLE4udGVhbUIgQVMgbmV4dHRCCkZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzIE0gSk9JTiAnLiRwcmVmLidtb2R1bGVfdG10X21hdGNoZXMgTiBPTiBNLm5leHRtPU4ubWF0Y2hfaWQKV0hFUkUgTS5icmFja2V0X2lkPT8gQU5EIE0uc3RhdHVzPj0nLlRvdXJuZXk6OkFOT04uJyBBTkQgKE4udGVhbUEgSVMgTlVMTCBPUiBOLnRlYW1CIElTIE5VTEwpJzsKCQkkc28gPSAnIE9SREVSIEJZIE0ubWF0Y2hfaWQnOwoJCSRkb25lID0gRkFMU0U7CgkJJHNraXBzID0gYXJyYXkoKTsKCQkkdXBkYXRlcyA9ICRkYi0+R2V0QWxsKCRzcWwxLiRzbyxhcnJheSgkYnJhY2tldF9pZCkpOwoJCXdoaWxlKCR1cGRhdGVzKQoJCXsKCQkJJG1vcmUgPSBGQUxTRTsKCQkJZm9yZWFjaCgkdXBkYXRlcyBhcyAmJG1kYXRhKQoJCQl7CgkJCQlzd2l0Y2goJG1kYXRhWydzdGF0dXMnXSkKCQkJCXsKCQkJCWNhc2UgVG91cm5leTo6V09OQToKCQkJCWNhc2UgVG91cm5leTo6Rk9SRkI6CgkJCQkJJHdpbm5lciA9ICRtZGF0YVsndGVhbUEnXTsKCQkJCQlicmVhazsKCQkJCWNhc2UgVG91cm5leTo6V09OQjoKCQkJCWNhc2UgVG91cm5leTo6Rk9SRkE6CgkJCQkJJHdpbm5lciA9ICRtZGF0YVsndGVhbUInXTsKCQkJCQlicmVhazsKCQkJCWNhc2UgVG91cm5leTo6Tk9XSU46CgkJCQkJJHdpbm5lciA9IC0xOyAvL3Byb3BhZ2F0ZSBhIGJ5ZQoJCQkJCWJyZWFrOwoJCQkJZGVmYXVsdDoKCQkJCQkkd2lubmVyID0gbnVsbDsgLy9kbyBub3RoaW5nCgkJCQkJYnJlYWs7CgkJCQl9CgkJCQkkbWlkID0gKGludCkkbWRhdGFbJ21hdGNoX2lkJ107CgkJCQlpZighKCR3aW5uZXIgPT0gJG1kYXRhWyduZXh0dEEnXSB8fCAkd2lubmVyID09ICRtZGF0YVsnbmV4dHRCJ10KCQkJCSAgIHx8ICR3aW5uZXIgPT0gLTEgfHwgJHdpbm5lciA9PSBudWxsKSkKCQkJCXsKCQkJCQlzZWxmOjpTZXRUZWFtKChpbnQpJHdpbm5lciwoaW50KSRtZGF0YVsnbmV4dG0nXSwkbWlkLCRkYiwkcHJlZik7CgkJCQkJJG1vcmUgPSBUUlVFOwoJCQkJfQoJCQkJZWxzZWlmKCR3aW5uZXIgPT0gLTEgJiYoJG1kYXRhWyduZXh0dEEnXSA9PSBGQUxTRSB8fCAkbWRhdGFbJ25leHR0QiddID09IEZBTFNFKSkKCQkJCXsKCQkJCQlzZWxmOjpTZXRUZWFtKChpbnQpJHdpbm5lciwoaW50KSRtZGF0YVsnbmV4dG0nXSwkbWlkLCRkYiwkcHJlZik7CgkJCQkJJG1vcmUgPSBUUlVFOwoJCQkJfQoJCQkJJHNraXBzW10gPSAkbWlkOwoJCQl9CgkJCXVuc2V0KCRtZGF0YSk7CgkJCWlmKCRtb3JlKQoJCQl7CgkJCQkkZG9uZSA9IFRSVUU7CgkJCQkkc3FsID0gJHNxbDEuJyBBTkQgTS5tYXRjaF9pZCBOT1QgSU4gKCcuaW1wbG9kZSgnLCcsJHNraXBzKS4nKScuJHNvOwoJCQkJJHVwZGF0ZXMgPSAkZGItPkdldEFsbCgkc3FsLGFycmF5KCRicmFja2V0X2lkKSk7CgkJCX0KCQkJZWxzZQoJCQkJYnJlYWs7CgkJfQoJCXNlbGY6OlNjaGVkdWxlTWF0Y2hlcygkbW9kLCRicmFja2V0X2lkKTsKCQlyZXR1cm4gJGRvbmU7Cgl9CgoJLyoqCglJbml0REVNYXRjaGVzKCkKCUBtb2Q6IHJlZmVyZW5jZSB0byBtb2R1bGUgb2JqZWN0CglAYnJhY2tldF9pZDogdGhlIGJyYWNrZXQgaWRlbnRpZmllcgoJQ3JlYXRlIGEgc2V0IG9mIG1hdGNoIHJlY29yZHMsIGluIHRoZSBtYXRjaGVzIHRhYmxlLCBmb3IgdGhlIGJyYWNrZXQKCUNsZWFycyBhbnkgZXhpc3RpbmcgbWF0Y2hlcyBmb3IgdGhlIGJyYWNrZXQKCVN0b3JlcyBzdGF0dXMgZm9yIG1hdGNoZXMgd2hpY2ggaGF2ZSBhIGJ5ZQoJUmV0dXJuczogVFJVRSBvbiBzdWNjZXNzLCBvciBsYW5nLWtleSBmb3IgZXJyb3IgbWVzc2FnZSBpZiBiYWQgbm8uIG9mIHRlYW1zIGluIHRoZSBicmFja2V0CgkqLwoJZnVuY3Rpb24gSW5pdERFTWF0Y2hlcygmJG1vZCwkYnJhY2tldF9pZCkKCXsKCQkkcHJlZiA9IGNtc19kYl9wcmVmaXgoKTsKCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOwoJCSRzcWwgPSAnU0VMRUNUIHRlYW1faWQsc2VlZGluZyBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfdGVhbXMKV0hFUkUgYnJhY2tldF9pZD0/IEFORCBmbGFncyE9MiBPUkRFUiBCWSAoQ0FTRSBXSEVOIHNlZWRpbmcgSVMgTlVMTCBUSEVOIDEgRUxTRSAwIEVORCksc2VlZGluZyc7CgkJJGFsbHRlYW1zID0gJGRiLT5HZXRBc3NvYygkc3FsLGFycmF5KCRicmFja2V0X2lkKSk7CgkJaWYoJGFsbHRlYW1zID09IEZBTFNFKQoJCQlyZXR1cm4gJ2luZm9fbm9tYXRjaCc7CgkJJG51bXRlYW1zID0gY291bnQoJGFsbHRlYW1zKTsKCQlsaXN0KCRtaW4sJG1heCkgPSAkbW9kLT5HZXRMaW1pdHMoVG91cm5leTo6REVUWVBFKTsKCQlpZigkbnVtdGVhbXMgPCAkbWluIHx8ICRudW10ZWFtcyA+ICRtYXgpCgkJCXJldHVybiAnZXJyX3ZhbHVlJzsKCQkkbnVtc2VlZHMgPSBjb3VudChhcnJheV9maWx0ZXIoJGFsbHRlYW1zKSk7CgkJaWYoJG51bXNlZWRzID4gMSkKCQl7CgkJCSRzcWwgPSAnU0VMRUNUIHNlZWR0eXBlLGZpeHR5cGUgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X2JyYWNrZXRzIFdIRVJFIGJyYWNrZXRfaWQ9Pyc7CgkJCSRyb3cgPSAkZGItPkdldFJvdygkc3FsLGFycmF5KCRicmFja2V0X2lkKSk7CgkJCSRzdHlwZSA9IChpbnQpJHJvd1snc2VlZHR5cGUnXTsKCQkJJGZ0eXBlID0gKGludCkkcm93WydmaXh0eXBlJ107IC8vc2VlIGV4cGxhbmF0aW9uIGluIEluaXRLT01hdGNoZXMoKQoJCX0KCQllbHNlCgkJewoJCQkkc3R5cGUgPSAwOyAvL2RlZmF1bHQgdG8gcmFuZG9tCgkJCSRmdHlwZSA9IDA7IC8vYW5kIG5vIHNwZWNpYWwtY2FzZSBoYW5kbGluZwoJCX0KCQkvL2V4dHJhY3QgYW55IHNlZWRudW1zIDwgMAoJCSRmaXh0ZWFtcyA9IGFycmF5KCk7CgkJJG51bWZpeCA9IDA7CgkJZm9yZWFjaCgkYWxsdGVhbXMgYXMgJHNlZWQpCgkJewoJCQlpZigkc2VlZCA8IDApCgkJCQkkbnVtZml4Kys7CgkJCWVsc2UKCQkJCWJyZWFrOwoJCX0KCQkkbnVtc2VlZHMgLT0gJG51bWZpeDsgLy89ICdyZWFsJyBzZWVkcwoJCWlmKCRudW1maXggPiAwKQoJCXsKCQkJaWYoJGZ0eXBlID09IDApIC8vaWdub3JlIHRoZW0gYWxsCgkJCQkkbWMgPSAkbnVtZml4OwoJCQllbHNlaWYoJG51bXRlYW1zIC0gJG51bWZpeCA8ICRudW1zZWVkcyoyKSAvL25lZWQgYXQgbGVhc3QgYXMgbWFueSBub24tZml4ZXJzIGFzIHNlZWRzCgkJCQkkbWMgPSAkbnVtc2VlZHMqMiAtICRudW10ZWFtcyArICRudW1maXg7CgkJCWVsc2UKCQkJCSRtYyA9IDA7CgkJCSRudW1maXggLT0gJG1jOwoJCQlpZigkbnVtZml4ICUgMikJLy9uZWVkIGV2ZW4gbm8uIG9mIGZpeGVycwoJCQl7CgkJCQkkbWMrKzsKCQkJCSRudW1maXgtLTsKCQkJfQoJCQl3aGlsZSgkbWMgPiAwKQoJCQl7CgkJCQkvL21pZ3JhdGUgY3VycmVudCAxc3QgbWVtYmVyIG9mICRhbGx0ZWFtcyB0byBlbmQsIGFzIHVuc2VlZGVkCgkJCQlyZXNldCgkYWxsdGVhbXMpOwoJCQkJJHRpZCA9IGtleSgkYWxsdGVhbXMpOwoJCQkJdW5zZXQoJGFsbHRlYW1zWyR0aWRdKTsKCQkJCSRhbGx0ZWFtc1skdGlkXSA9ICcnOwoJCQkJJG1jLS07CgkJCX0KCQkJaWYoJG51bWZpeCkKCQkJewoJCQkJLy9taWdyYXRlIGZpeGVycyB0byBzZXBhcmF0ZSBhcnJheQoJCQkJZm9yKCRpPTA7ICRpPCRudW1maXg7ICRpKyspCgkJCQl7CgkJCQkJcmVzZXQoJGFsbHRlYW1zKTsKCQkJCQkkdGlkID0ga2V5KCRhbGx0ZWFtcyk7CgkJCQkJdW5zZXQoJGFsbHRlYW1zWyR0aWRdKTsKCQkJCQkkZml4dGVhbXNbXSA9ICR0aWQ7CgkJCQl9CgkJCQkvLyRhbGx0ZWFtcyBsZWZ0IHdpdGggZmxvYXRlcnMgb25seQoJCQl9CgkJfQoJCgkJJG51bXRlYW1zIC09ICRudW1maXg7IC8vbm8uIG9mIGZsb2F0aW5nIHRlYW1zCgkJJHJzID0gRkFMU0U7CgkJc3dpdGNoKCRzdHlwZSkKCQl7CgkJIGNhc2UgMDogLy9yYW5kb21pc2UgYWxsIHNlZWRzCgkJCWlmKCRudW1zZWVkcyA+IDEpCgkJCQkkcnMgPSAxOyAvL3N0YXJ0IHJhbmRvbWlzaW5nIGZyb20gYmVnaW5uaW5nCgkJCWJyZWFrOwoJCSBjYXNlIDE6IC8vcmFuZG9taXNlIHNlZWRzIDMgLi4uKGlmIHRoZXJlIGFyZSBlbm91Z2ggdG8gd29yayB3aXRoKQoJCQlpZigkbnVtc2VlZHMgPiAzICYmICRudW10ZWFtcyA+IDMpCgkJCQkkcnMgPSAzOwoJCQllbHNlCgkJCQkkcnMgPSAxOwoJCQlicmVhazsKCQkgY2FzZSA0OiAvL3JhbmRvbSBjaG9pY2UgMiBvciAzCgkJICAkc3R5cGUgPSByYW5kKDIsMyk7CgkJIGNhc2UgMzogLy9ubyBzZWVkIHJhbmRvbWlzaW5nCgkJIGNhc2UgMjoKCQkgCWJyZWFrOwoJCSBkZWZhdWx0OiAvL2lnbm9yZSBzZWVkcyxzaG91bGQgbmV2ZXIgaGFwcGVuCgkJCSRudW1zZWVkcyA9IDA7IC8vZG9uJ3QgdXNlICRhbGx0ZWFtcyBhdCBhbGwKCQkJYnJlYWs7CgkJfQoKCQlpZigkcnMpCgkJewoJCQkkZXhzZWVkcyA9IHNlbGY6OlJhbmRvbU9yZGVyKCRycywkbnVtc2VlZHMgLSAkcnMpOwoJCQlmb3JlYWNoKCRleHNlZWRzIGFzICRvbGQ9PiRuZXcpCgkJCXsKCQkJCSR0bXAgPSAkYWxsdGVhbXNbJG9sZF07CgkJCQkkYWxsdGVhbXNbJG9sZF0gPSAkYWxsdGVhbXNbJG5ld107CgkJCQkkYWxsdGVhbXNbJG5ld10gPSAkdG1wOwoJCQl9CgkJfQoKCQkvL3NodWZmbGUgJGZpeHRlYW1zIHBlciAkZnR5cGUKCQkvLzA6IGFscmVhZHkgaGFuZGxlZCwgMTogdGVhbXMgYWxyZWFkeSBpbiBtYXRjaC1wYWlyIG9yZGVyCgkJLy8yOiBvciAzOiBoYW5kbGVkIGhlcmUKCQlpZigkbnVtZml4ID4gMiAmJiAkZnR5cGUgPiAxKQoJCXsKCQkJJGggPSAkbnVtZml4LzI7CgkJCSRsID0gJG51bWZpeC0xOyAvLzAtYmFzZWQgY291bnQgZm9yICRmdHlwZSAzCgkJCWZvcigkaT0wOyAkaTwkaDsgJGkrPTIpCgkJCXsKCQkJCSRzID0gKCRmdHlwZSA9PSAyKSA/ICRpKyRoIDogJGwtJGk7CgkJCQkkdG1wID0gJGZpeHRlYW1zWyRpKzFdOwoJCQkJJGZpeHRlYW1zWyRpKzFdID0gJGZpeHRlYW1zWyRzXTsKCQkJCSRmaXh0ZWFtc1skc10gPSAkdG1wOwoJCQl9IAkJCQkJCQkKCQl9CgkJJGYgPSAwOyAvL3N0YXJ0IHdpdGggZmlyc3QgKGlmIGFueSkgbWVtYmVyIG9mICRmaXh0ZWFtc1tdCgoJCWlmKCRudW10ZWFtcyA+ICRudW1zZWVkcykKCQkJJHJhbmRvbXMgPSBzZWxmOjpSYW5kb21PcmRlcigkbnVtc2VlZHMrMSwkbnVtdGVhbXMtJG51bXNlZWRzKTsKCQkkYWxsdGVhbXMgPSBhcnJheV9rZXlzKCRhbGx0ZWFtcyk7IC8vdGVhbS1pZCdzIG5vdyB2YWx1ZXMKCQkkb3JkZXIgPSBzZWxmOjpPcmRlck1hdGNoZXMoJG51bXRlYW1zKyRudW1maXgsJG51bXNlZWRzLCRzdHlwZSwkbnVtZml4KTsKCQlmb3JlYWNoKCRvcmRlciBhcyAkaT0+JHRpZCkKCQl7CgkJCWlmKCR0aWQgPCAwKQoJCQkJJG9yZGVyWyRpXSA9ICRmaXh0ZWFtc1skZisrXTsKCQkJZWxzZWlmKCR0aWQgPD0gJG51bXNlZWRzKQoJCQkJJG9yZGVyWyRpXSA9ICRhbGx0ZWFtc1skdGlkLTFdOwoJCQllbHNlaWYoJHRpZCA8PSAkbnVtdGVhbXMpCgkJCQkkb3JkZXJbJGldID0gJGFsbHRlYW1zWyRyYW5kb21zWyR0aWRdLTFdOwoJCQllbHNlCgkJCQkkb3JkZXJbJGldID0gLTE7IC8vYnllCgkJfQoJCSRudW10ZWFtcyA9IGNvdW50KCRvcmRlcik7IC8vbm90aW9uYWwgaS5lLiB0ZWFtcyArIGJ5ZXMgKHBvd2VyIG9mIDIpCgoJCSRzcWwgPSAnREVMRVRFIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzIFdIRVJFIGJyYWNrZXRfaWQ9Pyc7CgkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJGJyYWNrZXRfaWQpKTsKCQkvL3NhZmVseSAncmVzZXJ2ZScgZW5vdWdoIG1hdGNoX2lkJ3MgOiBOIHRlYW1zIG1lYW5zIDJOLTIgbWF0Y2hlcwoJCSRpZFcxID0gc2VsZjo6UmVzZXJ2ZU1hdGNoZXMoJGRiLCRwcmVmLCRudW10ZWFtcyoyLTIpOyAvLzFzdCB3aW5uZXJzJyBkcmF3IG1hdGNoIG5vLgoJCSRpZEwxID0gJGlkVzEgKyAkbnVtdGVhbXMgLSAxOyAvLzFzdCBsb3NlcnMnIGRyYXcgbWF0Y2ggbm8uIChoYWxmIG1hdGNoZXMgaW4gZWFjaCBkcmF3KQoJCS8vc2V0dXAgd2lubmVycycgZHJhdyBiYW5kcywgdGhlIGxhc3Qgb2Ygd2hpY2ggaXMgYSBzZW1pLWZpbmFsIGkuZS4gb25lIG1hdGNoCgkJJHNxbCA9ICdJTlNFUlQgSU5UTyAnLiRwcmVmLidtb2R1bGVfdG10X21hdGNoZXMgKG1hdGNoX2lkLGJyYWNrZXRfaWQsbmV4dG0sbmV4dGxtLHRlYW1BLHRlYW1CKSBWQUxVRVMgKD8sPyw/LD8sPyw/KSc7CgkJJHdiYXNlID0gJGlkVzE7CgkJJHN0b3AgPSAkbnVtdGVhbXMvMjsKCQlmb3IoJGk9MDsgJGk8JHN0b3A7ICRpKyspCgkJewoJCQkkb2ZmID0gKGludCkoJGkvMik7CgkJCSRuZXh0bSA9ICR3YmFzZSArICRzdG9wICsgJG9mZjsKCQkJJG5leHRsbSA9ICRpZEwxICsgJG9mZjsKCQkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJHdiYXNlKyRpLCRicmFja2V0X2lkLCRuZXh0bSwkbmV4dGxtLCRvcmRlclskaSoyKzFdLCRvcmRlclskaSoyKzJdKSk7CgkJfQoJCSRzcWwgPSAnSU5TRVJUIElOVE8gJy4kcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzIChtYXRjaF9pZCxicmFja2V0X2lkLG5leHRtLG5leHRsbSkgVkFMVUVTICg/LD8sPyw/KSc7CgkJJEJDID0gKChsb2coJG51bXRlYW1zLDIpLTAuMDAwMSl8MCkgKyAxOyAvL3dpbm5lcnMnIHNlbWkgYmFuZAoJCSR3YmFzZSArPSAkaTsKCQlmb3IoJEI9MjsgJEI8JEJDOyAkQisrKQoJCXsKCQkJJHN0b3AgLz0gMjsKCQkJJGxiYXNlID0gJGlkTDEgKyAkd2Jhc2UgLSAkaWRXMSAtICRzdG9wOwoJCQkkbG9zZXJzID0gYXJyYXkoKTsKCQkJZm9yKCRpPTA7ICRpPCRzdG9wOyAkaSsrKQoJCQkJJGxvc2Vyc1tdID0gJGxiYXNlKyRpOwoJCQlpZigkc3RvcCA+IDEpCgkJCXsKCQkJCS8vcmVkdWNlIGNoYW5jZSBvZiByZS1wbGF5aW5nIHBhc3Qgb3Bwb25lbnRzCgkJCQlpZigkQiA9PSAyKQoJCQkJCSRsb3NlcnMgPSBhcnJheV9yZXZlcnNlKCRsb3NlcnMpOwoJCQkJZWxzZQoJCQkJCXNodWZmbGUoJGxvc2Vycyk7CgkJCX0KCQkJZm9yKCRpPTA7ICRpPCRzdG9wOyAkaSsrKQoJCQl7CgkJCQkkb2ZmID0gKGludCkoJGkvMik7CgkJCQkkbmV4dG0gPSAkd2Jhc2UgKyAkc3RvcCArICRvZmY7CgkJCQkkbmV4dGxtID0gJGxvc2Vyc1skaV07CgkJCQkkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkd2Jhc2UrJGksJGJyYWNrZXRfaWQsJG5leHRtLCRuZXh0bG0pKTsKCQkJfQoJCQkkd2Jhc2UgKz0gJGk7CgkJfQoJCS8vd2lubmVycycgc2VtaQoJCSRuZXh0bSA9ICRpZFcxICsgJG51bXRlYW1zKjIgLSAzOyAvL2ZpbmFsCgkJJG5leHRsbSA9ICRuZXh0bSAtIDE7IC8vbG9zZXJzJyBzZW1pCgkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJHdiYXNlLCRicmFja2V0X2lkLCRuZXh0bSwkbmV4dGxtKSk7CgoJCSRCRiA9ICRCQyozIC0gMTsgLy90aGUgZmluYWwgYmFuZAoJCS8vbG9zZXJzJyBiYW5kcwoJCSRCTSA9ICRCQyArIDE7IC8vdGhlIGZpcnN0IG9uZQoJCSR3YmFzZSsrOyAvL25vdyAkaWRMMQoJCSRzcWwgPSAnSU5TRVJUIElOVE8gJy4kcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzIChtYXRjaF9pZCxicmFja2V0X2lkLG5leHRtKSBWQUxVRVMgKD8sPyw/KSc7CgkJZm9yKCRCPSRCTTsgJEI8JEJGLTE7ICRCKyspCgkJewoJCQkkb2RkID0gKCRCLSRCTSkgJSAyOyAvL29kZCdzIGhhbHZlIG5leHQtcm91bmQgbWF0Y2hlcywgZXZlbidzIGRvbid0CgkJCSRzdG9wID0gJG51bXRlYW1zL3BvdygyLDIrKGludCkoKCRCLSRCTSkvMikpOwoJCQlmb3IoJGk9MDsgJGk8JHN0b3A7ICRpKyspCgkJCXsKCQkJCSRvZmYgPSAoJG9kZCkgPyAoaW50KSgkaS8yKSA6ICRpOwoJCQkJJG5leHRtID0gJHdiYXNlICsgJHN0b3AgKyAkb2ZmOwoJCQkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJHdiYXNlKyRpLCRicmFja2V0X2lkLCRuZXh0bSkpOwoJCQl9CgkJCSR3YmFzZSArPSAkaTsKCQl9CgkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJHdiYXNlLCRicmFja2V0X2lkLCR3YmFzZSsxKSk7IC8vc2VtaSBmaW5hbAoJCSRkYi0+RXhlY3V0ZSgkc3FsLGFycmF5KCR3YmFzZSsxLCRicmFja2V0X2lkLE5VTEwpKTsgLy9maW5hbAoJCS8vc3RvcmUgc3RhdHVzIGZvciBiYW5kLTEgbWF0Y2hlcyB3aXRoIGEgYnllCgkJc2VsZjo6SW5pdEJ5ZXMoJGJyYWNrZXRfaWQsJGRiLCRwcmVmKTsKCQkvL2NoYWluIHVwLGluY2x1ZGluZyBsb3Nlci1iYW5kIGJ5ZXMKCQlzZWxmOjpVcGRhdGVERU1hdGNoZXMoJG1vZCwkYnJhY2tldF9pZCk7CgkJcmV0dXJuIFRSVUU7Cgl9CgoJLyoqCglVcGRhdGVERU1hdGNoZXM6CglAbW9kOiByZWZlcmVuY2UgdG8gbW9kdWxlIG9iamVjdAoJQGJyYWNrZXRfaWQ6IHRoZSBicmFja2V0IGlkZW50aWZpZXIKCU1pZ3JhdGUgbWF0Y2ggd2lubmVycyBhbmQgbG9zZXJzIHRvIGNvcnJlc3BvbmRpbmcgbmV4dCBtYXRjaGVzLiBCeWVzIGFyZSBwcm9wYWdhdGVkLgoJUmV0dXJuczogVFJVRSBpZiB1cGRhdGUgZG9uZSwgRkFMU0UgaWYgbm90CgkqLwoJZnVuY3Rpb24gVXBkYXRlREVNYXRjaGVzKCRtb2QsJGJyYWNrZXRfaWQpCgl7CgkJJHByZWYgPSBjbXNfZGJfcHJlZml4KCk7CgkJJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCQkkc3FsMSA9ICdTRUxFQ1QgTS4qLE4udGVhbUEgQVMgbmV4dHRBLE4udGVhbUIgYXMgbmV4dHRCCkZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzIE0gSk9JTiAnLiRwcmVmLidtb2R1bGVfdG10X21hdGNoZXMgTiBPTiBNLm5leHRtPU4ubWF0Y2hfaWQKV0hFUkUgTS5icmFja2V0X2lkPT8gQU5EIE0uc3RhdHVzPj0nLlRvdXJuZXk6Ok1SRVMuJyBBTkQgKE4udGVhbUEgSVMgTlVMTCBPUiBOLnRlYW1CIElTIE5VTEwpJzsKCQkkc28gPSAnIE9SREVSIEJZIE0ubWF0Y2hfaWQnOwoJCSRkb25lID0gRkFMU0U7CgkJJHNraXBzID0gYXJyYXkoKTsKCQkkdXBkYXRlcyA9ICRkYi0+R2V0QWxsKCRzcWwxLiRzbyxhcnJheSgkYnJhY2tldF9pZCkpOwoJCXdoaWxlKCR1cGRhdGVzKQoJCXsKCQkJJG1vcmUgPSBGQUxTRTsKCQkJZm9yZWFjaCgkdXBkYXRlcyBhcyAmJG1kYXRhKQoJCQl7CgkJCQlzd2l0Y2goJG1kYXRhWydzdGF0dXMnXSkKCQkJCXsKCQkJCWNhc2UgVG91cm5leTo6V09OQToKCQkJCWNhc2UgVG91cm5leTo6Rk9SRkI6CgkJCQkJJHdpbm5lciA9ICRtZGF0YVsndGVhbUEnXTsKCQkJCQkkbG9zZXIgPSAkbWRhdGFbJ3RlYW1CJ107CgkJCQkJYnJlYWs7CgkJCQljYXNlIFRvdXJuZXk6OldPTkI6CgkJCQljYXNlIFRvdXJuZXk6OkZPUkZBOgoJCQkJCSR3aW5uZXIgPSAkbWRhdGFbJ3RlYW1CJ107CgkJCQkJJGxvc2VyID0gJG1kYXRhWyd0ZWFtQSddOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSBUb3VybmV5OjpOT1dJTjoKCQkJCQkkd2lubmVyID0gLTE7IC8vcHJvcGFnYXRlIGEgYnllCgkJCQkJJGxvc2VyID0gLTE7CgkJCQkJYnJlYWs7CgkJCQlkZWZhdWx0OgoJCQkJCSR3aW5uZXIgPSBOVUxMOyAvL2RvIG5vdGhpbmcKCQkJCQkkbG9zZXIgPSBOVUxMOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJJG1pZCA9IChpbnQpJG1kYXRhWydtYXRjaF9pZCddOwoJCQkJaWYoISgkd2lubmVyID09ICRtZGF0YVsnbmV4dHRBJ10gfHwgJHdpbm5lciA9PSAkbWRhdGFbJ25leHR0QiddCgkJCQkgICB8fCAkd2lubmVyID09IC0xIHx8ICR3aW5uZXIgPT0gTlVMTCkpCgkJCQl7CgkJCQkJc2VsZjo6U2V0VGVhbSgoaW50KSR3aW5uZXIsKGludCkkbWRhdGFbJ25leHRtJ10sJG1pZCwkZGIsJHByZWYpOwoJCQkJCWlmKCRtZGF0YVsnbmV4dGxtJ10gJiYgJGxvc2VyICE9IE5VTEwpCgkJCQkJCXNlbGY6OlNldFRlYW0oKGludCkkbG9zZXIsKGludCkkbWRhdGFbJ25leHRsbSddLCRtaWQsJGRiLCRwcmVmLFRSVUUpOwoJCQkJCSRtb3JlID0gVFJVRTsKCQkJCX0KCQkJCWVsc2VpZigkd2lubmVyID09IC0xICYmKCRtZGF0YVsnbmV4dHRBJ10gPT0gRkFMU0UgfHwgJG1kYXRhWyduZXh0dEInXSA9PSBGQUxTRSkpCgkJCQl7CgkJCQkJc2VsZjo6U2V0VGVhbSgoaW50KSR3aW5uZXIsKGludCkkbWRhdGFbJ25leHRtJ10sJG1pZCwkZGIsJHByZWYpOwoJCQkJCWlmKCRtZGF0YVsnbmV4dGxtJ10gJiYgJGxvc2VyICE9IE5VTEwpCgkJCQkJCXNlbGY6OlNldFRlYW0oKGludCkkbG9zZXIsKGludCkkbWRhdGFbJ25leHRsbSddLCRtaWQsJGRiLCRwcmVmLFRSVUUpOwoJCQkJCSRtb3JlID0gVFJVRTsKCQkJCX0KCQkJCSRza2lwc1tdID0gJG1pZDsKCQkJfQoJCQl1bnNldCgkbWRhdGEpOwoJCQlpZigkbW9yZSkKCQkJewoJCQkJJGRvbmUgPSBUUlVFOwoJCQkJJHNxbCA9ICRzcWwxLicgQU5EIE0ubWF0Y2hfaWQgTk9UIElOICgnLmltcGxvZGUoJywnLCRza2lwcykuJyknLiRzbzsKCQkJCSR1cGRhdGVzID0gJGRiLT5HZXRBbGwoJHNxbCxhcnJheSgkYnJhY2tldF9pZCkpOwoJCQl9CgkJCWVsc2UKCQkJCWJyZWFrOwoJCX0KCQlzZWxmOjpTY2hlZHVsZU1hdGNoZXMoJG1vZCwkYnJhY2tldF9pZCk7CgkJcmV0dXJuICRkb25lOwoJfQoKCS8qKgoJTmV4dFJSTWF0Y2hlczoKCUBtb2Q6IHJlZmVyZW5jZSB0byBtb2R1bGUgb2JqZWN0CglAYnJhY2tldF9pZDogdGhlIGJyYWNrZXQgaWRlbnRpZmllcgoJU2V0dXAgbWF0Y2ggZW50cmllcyBmb3IgdGhlIGZpcnN0IG9yIG5leHQgc2VyaWVzIG9mIG1hdGNoZXMsIGlmIGFueS4KCVRoZSBtYXRjaGVzIHRhYmxlIGlzIHVwZGF0ZWQgYWNjb3JkaW5nbHkuCglSZXR1cm5zOiBUUlVFIG9uIHN1Y2Nlc3MsIG9yIGxhbmcta2V5IGZvciBlcnJvciBtZXNzYWdlIGlmIGJhZCBuby4gb2YgdGVhbXMKCSBpbiB0aGUgYnJhY2tldCwgb3IgdXBkYXRlIG5vdCBkb25lCgkqLwoJZnVuY3Rpb24gTmV4dFJSTWF0Y2hlcygmJG1vZCwkYnJhY2tldF9pZCkKCXsKCQkkcHJlZiA9IGNtc19kYl9wcmVmaXgoKTsKCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOwoJCSRzcWwgPSAnU0VMRUNUIHRlYW1faWQgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X3RlYW1zIFdIRVJFIGJyYWNrZXRfaWQ9PyBBTkQgZmxhZ3MhPTIgT1JERVIgQlkgZGlzcGxheW9yZGVyJzsKCQkkYWxsdGVhbXMgPSAkZGItPkdldENvbCgkc3FsLGFycmF5KCRicmFja2V0X2lkKSk7CgkJaWYoJGFsbHRlYW1zID09IEZBTFNFKQoJCQlyZXR1cm4gJ2luZm9fbm9tYXRjaCc7CgkJJG51bXRlYW1zID0gY291bnQoJGFsbHRlYW1zKTsKCQlsaXN0KCRtaW4sJG1heCkgPSAkbW9kLT5HZXRMaW1pdHMoVG91cm5leTo6UlJUWVBFKTsKCQlpZigkbnVtdGVhbXMgPiAkbWF4IHx8ICRudW10ZWFtcyA8ICRtaW4pCgkJCXJldHVybiAnZXJyX3ZhbHVlJzsKCQlzaHVmZmxlKCRhbGx0ZWFtcyk7CgkJJHBsYXllZCA9IGFycmF5KCk7CgkJZm9yZWFjaCgkYWxsdGVhbXMgYXMgJG1kYXRhKQoJCQkkcGxheWVkWydUJy4kbWRhdGFdID0gYXJyYXkoKTsgLy9tdXN0IGJlIHRleHQga2V5LHRvIHByZXNlcnZlIGluIGFycmF5X211bHRpc29ydCgpCgkJdW5zZXQoJGFsbHRlYW1zKTsKCgkJJHNxbCA9ICdTRUxFQ1QgKiBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlcyBXSEVSRSBicmFja2V0X2lkPT8gQU5EIGZsYWdzPTAnOwoJCSRzdG9yZWQgPSAkZGItPkdldEFsbCgkc3FsLGFycmF5KCRicmFja2V0X2lkKSk7CgkJaWYoJHN0b3JlZCkKCQl7CgkJCWZvcmVhY2goJHN0b3JlZCBhcyAmJG1kYXRhKQoJCQl7CgkJCQlpZigkbWRhdGFbJ3N0YXR1cyddID4gMCkgLy9UT0RPIHZhbGlkYXRlIHRoaXMgdGVzdAoJCQkJewoJCQkJCSRwbGF5ZWRbJ1QnLiRtZGF0YVsndGVhbUEnXV1bXSA9ICRtZGF0YVsndGVhbUInXTsKCQkJCQkkcGxheWVkWydUJy4kbWRhdGFbJ3RlYW1CJ11dW10gPSAkbWRhdGFbJ3RlYW1BJ107CgkJCQkJdW5zZXQoJG1kYXRhKTsgLy9ubyBtb3JlIHVzZSBmb3IgdGhlIHNjaGVkdWxlZC9maW5pc2hlZCBvbmVzCgkJCQl9CgkJCX0KCQkJdW5zZXQoJG1kYXRhKTsKCQkJJGNvdW50cyA9IGFycmF5X21hcCgnY291bnQnLCRwbGF5ZWQpOwoJCQlhcnJheV9tdWx0aXNvcnQoJGNvdW50cyxTT1JUX0FTQyxTT1JUX05VTUVSSUMsJHBsYXllZCk7CgkJCXVuc2V0KCRjb3VudHMpOwoJCX0KCgkJJHBsYXkyID0gJHBsYXllZDsKCQkkbWF0Y2hlcyA9IGFycmF5KCk7CgkJZm9yZWFjaCgkcGxheWVkIGFzICR0aWQ9PiYkc2VsZm9wcykKCQl7CgkJCWZvcmVhY2goJHBsYXkyIGFzICR2aWQ9PiYkdGhpc29wcykKCQkJewoJCQkJaWYoJHRpZCAhPSAkdmlkKSAvL2lnbm9yZSBzZWxmCgkJCQl7CgkJCQkJJGlkID0gaW50dmFsKHN1YnN0cigkdGlkLDEpKTsgLy9vbWl0IHRoZSBUCgkJCQkJaWYoIWluX2FycmF5KCRpZCwkdGhpc29wcykpCgkJCQkJewoJCQkJCQkkdnMgPSBpbnR2YWwoc3Vic3RyKCR2aWQsMSkpOwoJCQkJCQkkbG9nID0gVFJVRTsKCQkJCQkJaWYoJHN0b3JlZCkgLy91bnBsYXllZCBtYXRjaFtlc10gaW4gdGhlIHRhYmxlCgkJCQkJCXsKCQkJCQkJCWZvcmVhY2goJHN0b3JlZCBhcyAmJG1kYXRhKQoJCQkJCQkJewoJCQkJCQkJCWlmKCRtZGF0YVsndGVhbUEnXSA9PSAkaWQgfHwgJG1kYXRhWyd0ZWFtQSddID09ICR2cwoJCQkJCQkJCSB8fCAkbWRhdGFbJ3RlYW1CJ10gPT0gJGlkIHx8ICRtZGF0YVsndGVhbUInXSA9PSAkdnMpCgkJCQkJCQkJewoJCQkJCQkJCQkkbG9nID0gRkFMU0U7CgkJCQkJCQkJCWJyZWFrOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJCXVuc2V0KCRtZGF0YSk7CgkJCQkJCX0KCQkJCQkJaWYoJGxvZykKCQkJCQkJewoJCQkJCQkJLy9sb2cgdGhlc2Ugb3Bwb25lbnRzCgkJCQkJCQlpZigkaWQgPCAkdnMpCgkJCQkJCQkJJG1hdGNoZXNbJGlkXSA9ICR2czsKCQkJCQkJCWVsc2UKCQkJCQkJCQkkbWF0Y2hlc1skdnNdID0gJGlkOwoJCQkJCQl9CgkJCQkJCS8vcHJldmVudCB0aG9zZSBmcm9tIGZ1cnRoZXIgY29uc2lkZXJhdGlvbgoJCQkJCQl1bnNldCgkcGxheTJbJHRpZF0pOwoJCQkJCQl1bnNldCgkcGxheTJbJHZpZF0pOwoJCQkJCQl1bnNldCgkcGxheWVkWyR0aWRdKTsKCQkJCQkJdW5zZXQoJHBsYXllZFskdmlkXSk7CgkJCQkJCXJlc2V0KCRwbGF5ZWQpOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQl9CgkJCQl1bnNldCgkdmlkKTsKCQkJfQoJCQl1bnNldCgkdGhpc29wcyk7CgkJCXVuc2V0KCR0aWQpOwoJCX0KCQl1bnNldCgkc2VsZm9wcyk7CgoJCSRjID0gY291bnQoJG1hdGNoZXMpOwoJCWlmKCRjID4gMCkKCQl7CgkJCWlmKCRjID4gMSkKCQkJCWtzb3J0KCRtYXRjaGVzLFNPUlRfTlVNRVJJQyk7CgkJCS8vc2FmZWx5ICdyZXNlcnZlJyBlbm91Z2ggbWF0Y2hfaWQncwoJCQkkbWlkID0gc2VsZjo6UmVzZXJ2ZU1hdGNoZXMoJGRiLCRwcmVmLCRjKTsKCQkJJHNxbCA9ICdJTlNFUlQgSU5UTyAnLiRwcmVmLidtb2R1bGVfdG10X21hdGNoZXMgKG1hdGNoX2lkLGJyYWNrZXRfaWQsdGVhbUEsdGVhbUIpIFZBTFVFUyAoPyw/LD8sPyknOwoJCQlmb3JlYWNoKCRtYXRjaGVzIGFzICRBPT4kQikKCQkJewoJCQkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJG1pZCwkYnJhY2tldF9pZCwkQSwkQikpOwoJCQkJJG1pZCsrOwoJCQl9CgkJCXJldHVybiBUUlVFOwoJCX0KCQlzZWxmOjpTY2hlZHVsZU1hdGNoZXMoJG1vZCwkYnJhY2tldF9pZCk7CgkJcmV0dXJuICdpbmZvX25vbWF0Y2gnOwoJfQoKCS8qKgoJTWF0Y2hDb21taXR0ZWQ6CglAZGI6IHJlZmVyZW5jZSB0byBkYXRhYmFzZSBjb25uZWN0aW9uIG9iamVjdAoJQHByZWY6IGRhdGFiYXNlIHRhYmxlcyBwcmVmaXgKCUBicmFja2V0X2lkOiB0aGUgYnJhY2tldCBpZGVudGlmaWVyCglAem9uZTogYnJhY2tldCB0aW1lem9uZSwgb3B0aW9uYWwsIGRlZmF1bHQgRkFMU0UKCVNlZSBhbHNvOiB0bXRFZGl0U2V0dXA6Ok1hdGNoRXhpc3RzKCkgd2hpY2ggaXMgc2ltaWxhciB0byB0aGlzIChleGNlcHQgdGVzdHMgTVJFUykKCVJldHVybnM6IFRSVUUgaWYgYW55IG1hdGNoIGluIGJyYWNrZXQgQGJyYWNrZXRfaWQgaXMgJ2xvY2tlZCBpbicKCSovCglwcml2YXRlIGZ1bmN0aW9uIE1hdGNoQ29tbWl0dGVkKCYkZGIsJHByZWYsJGJyYWNrZXRfaWQsJHpvbmU9RkFMU0UpCgl7CgkJJHNxbCA9ICdTRUxFQ1QgMSBBUyB5ZXMgRlJPTSAnLiRwcmVmLgoJCSdtb2R1bGVfdG10X21hdGNoZXMgV0hFUkUgYnJhY2tldF9pZD0/IEFORCBzdGF0dXM+PScuVG91cm5leTo6RklSTS4nIEFORCBzdGF0dXMhPScuVG91cm5leTo6QVNPRlQuCgkJJyBBTkQgKCh0ZWFtQSBJUyBOT1QgTlVMTCBBTkQgdGVhbUEhPS0xKSBPUiAodGVhbUIgSVMgTk9UIE5VTEwgQU5EIHRlYW1CIT0tMSkpJzsKCQkkcnMgPSAkZGItPlNlbGVjdExpbWl0KCRzcWwsMSwtMSxhcnJheSgkYnJhY2tldF9pZCkpOwoJCWlmKCRycyAmJiAhJHJzLT5FT0YpIC8vbWF0Y2goZXMpIG90aGVyIHRoYW4gYnllcyByZWNvcmRlZAoJCXsKCQkJJHJzLT5DbG9zZSgpOwoJCQlyZXR1cm4gVFJVRTsKCQl9CgkJZWxzZQoJCXsKCQkJaWYoJHJzKSAkcnMtPkNsb3NlKCk7CgkJCWlmKCEkem9uZSkKCQkJewoJCQkJJHNxbCA9ICdTRUxFQ1QgdGltZXpvbmUgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X2JyYWNrZXRzIFdIRVJFIGJyYWNrZXRfaWQ9Pyc7CgkJCQkkem9uZSA9ICRkYi0+R2V0T25lKCRzcWwsYXJyYXkoJGJyYWNrZXRfaWQpKTsKCQkJfQkJCQoJCQkkZHQgPSBuZXcgRGF0ZVRpbWUoJysnLlRvdXJuZXk6OkxFQURIT1VSUy4nIGhvdXJzJyxuZXcgRGF0ZVRpbWVab25lKCR6b25lKSk7CgkJCSRzcWwgPSAnU0VMRUNUIDEgQVMgeWVzIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzIFdIRVJFIGJyYWNrZXRfaWQ9PyBBTkQgZmxhZ3M9MCBBTkQgc3RhdHVzIElOICgnLlRvdXJuZXk6OkZJUk0uJywnLlRvdXJuZXk6OlRPTEQuJywnLlRvdXJuZXk6OkFTS0VELicsJy5Ub3VybmV5OjpBRklSTS4KCQkJJykgQU5EIHBsYXl3aGVuIElTIE5PVCBOVUxMIEFORCBwbGF5d2hlbiA8ICcuJGR0LT5mb3JtYXQoJ1ktbS1kIEc6aTpzJykuCgkJCScgQU5EICgodGVhbUEgSVMgTk9UIE5VTEwgQU5EIHRlYW1BICE9IC0xKSBPUiAodGVhbUIgSVMgTk9UIE5VTEwgQU5EIHRlYW1CICE9IC0xKSknOwoJCQkkcnMgPSAkZGItPlNlbGVjdExpbWl0KCRzcWwsMSwtMSxhcnJheSgkYnJhY2tldF9pZCkpOwoJCQlpZigkcnMgJiYgISRycy0+RU9GKSAvL0ZJUk0vVE9MRC9BU0tFRCBtYXRjaChlcykgc2NoZWR1bGVkIGJlZm9yZSBtaW4uIGxlYWR0aW1lIGZyb20gbm93CgkJCXsKCQkJCSRycy0+Q2xvc2UoKTsKCQkJCXJldHVybiBUUlVFOwoJCQl9CgkJfQoJCWlmKCRycykKCQkJJHJzLT5DbG9zZSgpOwoJCXJldHVybiBGQUxTRTsKCX0KCgkvKioKCUNvbmZvcm1OZXd0ZWFtczoKCUBtb2Q6IHJlZmVyZW5jZSB0byBtb2R1bGUgb2JqZWN0CglAYnJhY2tldF9pZDogdGhlIGJyYWNrZXQgaWRlbnRpZmllcgoJQHR5cGU6IGVudW1lcmF0b3Igb2YgYnJhY2tldCB0eXBlLCBLT1RZUEUgZXRjCglAem9uZTogYnJhY2tldCB0aW1lem9uZQoJQHRpZDogdGVhbSBpZCwgb3IgYXJyYXkgb2YgdGVhbSBpZCdzIHRvIGJlIHByb2Nlc3NlZAoJQWRqdXN0IG1hdGNoZXMgdG8gcmVmbGVjdCBhZGRpdGlvbiBvZiB0ZWFtKHMpIGlkZW50aWZpZWQgYnkgQHRpZC4KCVJldHVybnM6IFRSVUUgaWYgY29tcGxldGVkIHN1Y2Nlc3NmdWxseQoJKi8KCWZ1bmN0aW9uIENvbmZvcm1OZXd0ZWFtcygmJG1vZCwkYnJhY2tldF9pZCwkdHlwZSwkem9uZSwkdGlkKQoJewoJCSRkYiA9IGNtc21zKCktPkdldERiKCk7CgkJJHByZWYgPSBjbXNfZGJfcHJlZml4KCk7CgoJCWlmKHNlbGY6Ok1hdGNoQ29tbWl0dGVkKCRkYiwkcHJlZiwkYnJhY2tldF9pZCwkem9uZSkpCgkJewoJCQlpZigkdHlwZSAhPSBUb3VybmV5OjpSUlRZUEUpCgkJCXsKCQkJCWlmKCFpc19hcnJheSgkdGlkKSkKCQkJCQkkdGlkID0gYXJyYXkoJHRpZCk7CgkJCQlmb3JlYWNoKCR0aWQgYXMgJG9uZSkKCQkJCXsKCQkJCQlpZighc2VsZjo6UmFuZG9tQWRkKCRicmFja2V0X2lkLCR0aWQpKQoJCQkJCQlyZXR1cm4gRkFMU0U7CgkJCQl9CgkJCX0KCQkJZWxzZWlmKHNlbGY6Ok5leHRSUk1hdGNoZXMoJG1vZCwkYnJhY2tldF9pZCkgIT09IFRSVUUpIC8vVE9ETyBhZGQgJiBzY2hlZHVsZSBhIG1hdGNoIGZvciAkdGVhbV9pZAoJCQkJcmV0dXJuIEZBTFNFOwoJCX0KCQlyZXR1cm4gVFJVRTsKCX0KCgkvKioKCUNvbmZvcm1Hb25ldGVhbXM6CglAbW9kOiByZWZlcmVuY2UgdG8gbW9kdWxlIG9iamVjdAoJQGJyYWNrZXRfaWQ6IHRoZSBicmFja2V0IGlkZW50aWZpZXIKCUB0eXBlOiBlbnVtZXJhdG9yIG9mIGJyYWNrZXQgdHlwZSwgS09UWVBFIGV0YwoJQHpvbmU6IGJyYWNrZXQgdGltZXpvbmUKCUB0aWQ6IHRlYW0gaWQsIG9yIGFycmF5IG9mIHRlYW0gaWQncyB0byBiZSBwcm9jZXNzZWQKCUFkanVzdCBtYXRjaGVzIHRvIHJlZmxlY3QgcmVtb3ZhbCBvZiB0ZWFtKHMpIGlkZW50aWZpZWQgYnkgQHRpZC4KCVJlbGV2YW50IG1hdGNoZXMgYXJlIG1hcmtlZCBhcyBmb3JmZWl0ZWQsIG9yIGFsbCBtYXRjaGVzIGFyZSByZS1zY2hlZHVsZWQuCglSZXR1cm5zOiBUUlVFLCBvciByZXN1bHQgb2YgbWF0Y2hlcy1yZWNyZWF0aW9uIGZ1bmMKCSovCglmdW5jdGlvbiBDb25mb3JtR29uZXRlYW1zKCYkbW9kLCRicmFja2V0X2lkLCR0eXBlLCR6b25lLCR0aWQpCgl7CgkJJHByZWYgPSBjbXNfZGJfcHJlZml4KCk7CgkJJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCQoJCWlmKHNlbGY6Ok1hdGNoQ29tbWl0dGVkKCRkYiwkcHJlZiwkYnJhY2tldF9pZCwkem9uZSkpCgkJewoJCQkkYXJncyA9IGFycmF5KCRicmFja2V0X2lkKTsKCQkJaWYoaXNfYXJyYXkoJHRpZCkpCgkJCXsKCQkJCSRmaWxsZXJzID0gc3RyX3JlcGVhdCgnPywnLGNvdW50KCR0aWQpLTEpLic/JzsKCQkJCSR0ZXN0ID0gJyBJTiAoJy4kZmlsbGVycy4nKSc7CgkJCQkkYXJncyA9IGFycmF5X21lcmdlKCRhcmdzLCR0aWQpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJHRlc3QgPSAnPT8nOwoJCQkJJGFyZ3NbXSA9ICR0aWQ7CgkJCX0KCgkJCWlmKCR0eXBlID09IFRvdXJuZXk6OlJSVFlQRSkKCQkJewoJCQkJJHNxbCA9ICdERUxFVEUgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X21hdGNoZXMgV0hFUkUgYnJhY2tldF9pZD0/IEFORCBzdGF0dXM8Jy5Ub3VybmV5OjpNUkVTLicgQU5EIHRlYW1BJy4kdGVzdDsKCQkJCSRkYi0+RXhlY3V0ZSgkc3FsLGFycmF5KCRhcmdzKSk7CgkJCQkkc3FsID0gJ0RFTEVURSBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlcyBXSEVSRSBicmFja2V0X2lkPT8gQU5EIHN0YXR1czwnLlRvdXJuZXk6Ok1SRVMuJyBBTkQgdGVhbUInLiR0ZXN0OwoJCQkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJGFyZ3MpKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRhcmdzMiA9ICRhcmdzOwoJCQkJYXJyYXlfdW5zaGlmdCgkYXJnczIsJG1vZC0+TGFuZygndGVhbWdvbmUnKSk7CgkJCQkkc3FsID0gJ1VQREFURSAnLiRwcmVmLidtb2R1bGVfdG10X21hdGNoZXMgU0VUIHRlYW1BPS0xLHBsYXl3aGVuPU5VTEwgV0hFUkUgYnJhY2tldF9pZD0/IEFORCB0ZWFtQiBJUyBOVUxMIEFORCB0ZWFtQScuJHRlc3Q7CgkJCQkkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkYXJncykpOwoJCQkJJHNxbCA9ICdVUERBVEUgJy4kcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzIFNFVCBwbGF5d2hlbj1OVUxMLHN0YXR1cz0nLlRvdXJuZXk6Ok5PV0lOLicsc2NvcmU9PyBXSEVSRSBicmFja2V0X2lkPT8gQU5EIHN0YXR1czwnLlRvdXJuZXk6Ok1SRVMuJyBBTkQgdGVhbUI9LTEgQU5EIHRlYW1BJy4kdGVzdDsKCQkJCSRkYi0+RXhlY3V0ZSgkc3FsLGFycmF5KCRhcmdzMikpOwoJCQkJJHNxbCA9ICdVUERBVEUgJy4kcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzIFNFVCBwbGF5d2hlbj1OVUxMLHN0YXR1cz0nLlRvdXJuZXk6OkZPUkZBLicsc2NvcmU9PyBXSEVSRSBicmFja2V0X2lkPT8gQU5EIHN0YXR1czwnLlRvdXJuZXk6Ok1SRVMuJyBBTkQgdGVhbUEnLiR0ZXN0OwoKCQkJCSRkYi0+RXhlY3V0ZSgkc3FsLGFycmF5KCRhcmdzMikpOwoJCQkJJHNxbCA9ICdVUERBVEUgJy4kcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzIFNFVCB0ZWFtQj0tMSxwbGF5d2hlbj1OVUxMIFdIRVJFIGJyYWNrZXRfaWQ9PyBBTkQgdGVhbUEgSVMgTlVMTCBBTkQgdGVhbUInLiR0ZXN0OwoJCQkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJGFyZ3MpKTsKCQkJCSRzcWwgPSAnVVBEQVRFICcuJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlcyBTRVQgcGxheXdoZW49TlVMTCxzdGF0dXM9Jy5Ub3VybmV5OjpOT1dJTi4nLHNjb3JlPT8gV0hFUkUgYnJhY2tldF9pZD0/IEFORCBzdGF0dXM8Jy5Ub3VybmV5OjpNUkVTLicgQU5EIHRlYW1BPS0xIEFORCB0ZWFtQicuJHRlc3Q7CgkJCQkkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkYXJnczIpKTsKCQkJCSRzcWwgPSAnVVBEQVRFICcuJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlcyBTRVQgcGxheXdoZW49TlVMTCxzdGF0dXM9Jy5Ub3VybmV5OjpGT1JGQi4nLHNjb3JlPT8gV0hFUkUgYnJhY2tldF9pZD0/IEFORCBzdGF0dXM8Jy5Ub3VybmV5OjpNUkVTLicgQU5EIHRlYW1CJy4kdGVzdDsKCQkJCSRkYi0+RXhlY3V0ZSgkc3FsLGFycmF5KCRhcmdzMikpOwoJCQl9CgkJCXJldHVybiBUUlVFOwoJCX0KCQllbHNlIC8vZnJlc2ggc3RhcnQKCQl7CgkJCSRzcWwgPSAnREVMRVRFIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzIFdIRVJFIGJyYWNrZXRfaWQ9Pyc7CgkJCSRkYi0+RXhlY3V0ZSgkc3FsLGFycmF5KCRicmFja2V0X2lkKSk7CgkJCXN3aXRjaCgkdHlwZSkKCQkJewoJCQkgY2FzZSBUb3VybmV5OjpERVRZUEU6CgkJCQlyZXR1cm4gKHNlbGY6OkluaXRERU1hdGNoZXMoJG1vZCwkYnJhY2tldF9pZCkgPT09IFRSVUUpOwoJCQkgY2FzZSBUb3VybmV5OjpSUlRZUEU6CgkJCQlyZXR1cm4gKHNlbGY6Ok5leHRSUk1hdGNoZXMoJG1vZCwkYnJhY2tldF9pZCkgPT09IFRSVUUpOwoJCQkgZGVmYXVsdDoKCQkJIC8vY2FzZSBUb3VybmV5OjpLT1RZUEU6CgkJCQlyZXR1cm4gKHNlbGY6OkluaXRLT01hdGNoZXMoJG1vZCwkYnJhY2tldF9pZCkgPT09IFRSVUUpOwoJCQl9CgkJfQoJfQoKCS8qKgoJQ29uZm9ybU5ld1Jlc3VsdHM6CglAYnJhY2tldF9pZDogdGhlIGJyYWNrZXQgaWRlbnRpZmllcgoJQHR5cGU6IGVudW1lcmF0b3Igb2YgYnJhY2tldCB0eXBlLCBLT1RZUEUgZXRjCglAbWlkOiBtYXRjaCBpZCwgb3IgYXJyYXkgb2YgbWF0Y2ggaWQncywgdG8gYmUgcHJvY2Vzc2VkCglAc3RhdHVzOiBtYXRjaCBzdGF0dXMgY29ycmVzcG9uZGluZyB0byBub24tYXJyYXkgQG1pZCwgb3IgYXJyYXkgb2YgbWF0Y2ggc3RhdHVzZXMgKGVhY2ggbWVtYmVyIGxpa2UgJG1pZD0+JHN0YXR1cykKCUZvciAncGxhbicgb3IgJ2hpc3RvcnknIHZpZXcgbWF0Y2ggcmVzdWx0cyBwcm9jZXNzaW5nLgoJQWRqdXN0IG1hdGNoZXMgdG8gcmVmbGVjdCByZXN1bHQgb2YgZWFjaCBtYXRjaCBpZGVudGlmaWVkIGJ5IEBtaWQuCglJZiBhIHN0YXR1cyA+PSBNUkVTIGlzIGNoYW5nZWQgdG8gYW5vdGhlciBvbmUsIHRoZSB3aW5uZXIgKGFuZCBsb3NlcgoJaWYgcmVsZXZhbnQpIGFyZSB1c2VkIHRvIHVwZGF0ZSB0aGUgdGVhbXMgaW4gc3Vic2VxdWVudCBtYXRjaChlcykuCglPciBpZiBhIHN0YXR1cyA+PSBNUkVTIGlzIGNoYW5nZWQgdG8gPCBNUkVTLCB0aGUgd2lubmVyIChhbmQgbG9zZXIKCWlmIHJlbGV2YW50KSBhcmUgdXNlZCB0byBOVUxMIHJlbGV2YW50IHRlYW1zIGluIHN1YnNlcXVlbnQgbWF0Y2goZXMpLgoJUmVjb3JkZWQgbWF0Y2ggc3RhdHVzLHNjb3JlLHZlbnVlIGV0YyBhcmUgbm90IGNoYW5nZWQgaGVyZS4KCSovCglmdW5jdGlvbiBDb25mb3JtTmV3UmVzdWx0cygkYnJhY2tldF9pZCwkdHlwZSwkbWlkLCRzdGF0dXMpCgl7CgkJJHByZWYgPSBjbXNfZGJfcHJlZml4KCk7CgkJJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCQkkc3FsID0gJ1NFTEVDVCBtYXRjaF9pZCxuZXh0bSxuZXh0bG0sdGVhbUEsdGVhbUIsc3RhdHVzIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzIFdIRVJFIG1hdGNoX2lkJzsKCQlpZihpc19hcnJheSgkbWlkKSkKCQl7CgkJCSRmaWxsZXJzID0gc3RyX3JlcGVhdCgnPywnLGNvdW50KCRtaWQpLTEpLic/JzsKCQkJJHNxbCAuPSAnIElOICgnLiRmaWxsZXJzLicpIEFORCBmbGFncz0wIE9SREVSIEJZIG1hdGNoX2lkJzsKCQkJJGFyZ3MgPSAkbWlkOwoJCX0KCQllbHNlCgkJewoJCQkkc3FsIC49ICc9PyBBTkQgZmxhZ3M9MCc7CgkJCSRhcmdzID0gYXJyYXkoJG1pZCk7CgkJCSRzdGF0dXMgPSBhcnJheSgkbWlkPT4kc3RhdHVzKTsKCQl9CgkJJG1hdGNoZXMgPSAkZGItPkdldEFzc29jKCRzcWwsJGFyZ3MpOwoJCSRzcWwgPSAnVVBEQVRFICcuJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlcyBTRVQgdGVhbUE9PyBXSEVSRSBicmFja2V0X2lkPT8gQU5EIG1hdGNoX2lkPj0/IEFORCB0ZWFtQT0/JzsKCQkkc3FsMiA9ICdVUERBVEUgJy4kcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzIFNFVCB0ZWFtQj0/IFdIRVJFIGJyYWNrZXRfaWQ9PyBBTkQgbWF0Y2hfaWQ+PT8gQU5EIHRlYW1CPT8nOwoJCWZvcmVhY2goJG1hdGNoZXMgYXMgJGlkPT4kbWRhdGEpCgkJewoJCQlpZigkbWRhdGFbJ3N0YXR1cyddICE9ICRzdGF0dXNbJGlkXSkKCQkJewoJCQkJJG5ld3N0YXQgPSAoaW50KSRzdGF0dXNbJGlkXTsKCQkJCWlmKCRuZXdzdGF0ID49IFRvdXJuZXk6Ok1SRVMpCgkJCQl7CgkJCQkJc3dpdGNoKCRuZXdzdGF0KQoJCQkJCXsKCQkJCQkgY2FzZSBUb3VybmV5OjpXT05BOgoJCQkJCSBjYXNlIFRvdXJuZXk6OkZPUkZCOgoJCQkJCQkvL2Vuc3VyZSB0ZWFtQSBpcyBvbmUgb2YgdGVhbXMgaW4gbmV4dG0gJiBiZXlvbmQKCQkJCQkJJGFyZ3MgPSBhcnJheSgkbWRhdGFbJ3RlYW1BJ10sJGJyYWNrZXRfaWQsKGludCkkbWRhdGFbJ25leHRtJ10sJG1kYXRhWyd0ZWFtQiddKTsKCQkJCQkJJGRiLT5FeGVjdXRlKCRzcWwsJGFyZ3MpOwoJCQkJCQkkZGItPkV4ZWN1dGUoJHNxbDIsJGFyZ3MpOwoJCQkJCQlpZigkdHlwZSA9PSBUb3VybmV5OjpERVRZUEUpCgkJCQkJCXsKCQkJCQkJCS8vZW5zdXJlIHRlYW1CIGlzIG9uZSBvZiB0ZWFtcyBpbiBuZXh0bG0gJiBiZXlvbmQKCQkJCQkJCSRhcmdzID0gYXJyYXkoJG1kYXRhWyd0ZWFtQiddLCRicmFja2V0X2lkLChpbnQpJG1kYXRhWyduZXh0bG0nXSwkbWRhdGFbJ3RlYW1BJ10pOwoJCQkJCQkJJGRiLT5FeGVjdXRlKCRzcWwsJGFyZ3MpOwoJCQkJCQkJJGRiLT5FeGVjdXRlKCRzcWwyLCRhcmdzKTsKCQkJCQkJfQoJCQkJCQlicmVhazsKCQkJCQkgY2FzZSBUb3VybmV5OjpXT05COgoJCQkJCSBjYXNlIFRvdXJuZXk6OkZPUkZBOgoJCQkJCQkvL2Vuc3VyZSB0ZWFtQiBpcyBvbmUgb2YgdGVhbXMgaW4gbmV4dG0gJiBiZXlvbmQKCQkJCQkJJGFyZ3MgPSBhcnJheSgkbWRhdGFbJ3RlYW1CJ10sJGJyYWNrZXRfaWQsKGludCkkbWRhdGFbJ25leHRtJ10sJG1kYXRhWyd0ZWFtQSddKTsKCQkJCQkJJGRiLT5FeGVjdXRlKCRzcWwsJGFyZ3MpOwoJCQkJCQkkZGItPkV4ZWN1dGUoJHNxbDIsJGFyZ3MpOwoJCQkJCQlpZigkdHlwZSA9PSBUb3VybmV5OjpERVRZUEUpCgkJCQkJCXsKCQkJCQkJCS8vZW5zdXJlIHRlYW1BIGlzIG9uZSBvZiB0ZWFtcyBpbiBuZXh0bG0gJiBiZXlvbmQKCQkJCQkJCSRhcmdzID0gYXJyYXkoJG1kYXRhWyd0ZWFtQSddLCRicmFja2V0X2lkLChpbnQpJG1kYXRhWyduZXh0bG0nXSwkbWRhdGFbJ3RlYW1CJ10pOwoJCQkJCQkJJGRiLT5FeGVjdXRlKCRzcWwsJGFyZ3MpOwoJCQkJCQkJJGRiLT5FeGVjdXRlKCRzcWwyLCRhcmdzKTsKCQkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJIGRlZmF1bHQ6CgkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZWlmKChpbnQpJG1kYXRhWydzdGF0dXMnXSA+PSBUb3VybmV5OjpNUkVTKQoJCQkJewoJCQkJCS8vZW5zdXJlIG5laXRoZXIgdGVhbUEgb3IgdGVhbUIgaXMgaW4gbmV4dG0gJiBiZXlvbmQKCQkJCQkkYXJncyA9IGFycmF5KE5VTEwsJGJyYWNrZXRfaWQsKGludCkkbWRhdGFbJ25leHRtJ10sJG1kYXRhWyd0ZWFtQSddKTsKCQkJCQkkZGItPkV4ZWN1dGUoJHNxbCwkYXJncyk7CgkJCQkJJGFyZ3MgPSBhcnJheShOVUxMLCRicmFja2V0X2lkLChpbnQpJG1kYXRhWyduZXh0bSddLCRtZGF0YVsndGVhbUInXSk7CgkJCQkJJGRiLT5FeGVjdXRlKCRzcWwyLCRhcmdzKTsKCQkJCQlpZigkdHlwZSA9PSBUb3VybmV5OjpERVRZUEUpCgkJCQkJewoJCQkJCQkkYXJncyA9IGFycmF5KE5VTEwsJGJyYWNrZXRfaWQsKGludCkkbWRhdGFbJ25leHRsbSddLCRtZGF0YVsndGVhbUEnXSk7CgkJCQkJCSRkYi0+RXhlY3V0ZSgkc3FsLCRhcmdzKTsKCQkJCQkJJGFyZ3MgPSBhcnJheShOVUxMLCRicmFja2V0X2lkLChpbnQpJG1kYXRhWyduZXh0bG0nXSwkbWRhdGFbJ3RlYW1CJ10pOwoJCQkJCQkkZGItPkV4ZWN1dGUoJHNxbDIsJGFyZ3MpOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KIAl9CgoJLyoqCglVblJlY29yZGVkOgoJQGJyYWNrZXRfaWQ6IHRoZSBicmFja2V0IGlkZW50aWZpZXIKCVJldHVybnM6IENvdW50IG9mIG1hdGNoKGVzKSByZWFkeSBmb3IgdGhlaXIgc3RhdHVzIHRvIGJlIHJlY29yZGVkLCBGQUxTRSB1cG9uIGVycm9yCgkqLwoJZnVuY3Rpb24gVW5SZWNvcmRlZCgkYnJhY2tldF9pZCkKCXsKCQkkcHJlZiA9IGNtc19kYl9wcmVmaXgoKTsKCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOwoJCSRzcWwgPSAnU0VMRUNUIENPVU5UKG1hdGNoX2lkKSBBUyBudW0gRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X21hdGNoZXMgV0hFUkUgYnJhY2tldF9pZD0/IEFORCBmbGFncz0wIEFORCBzdGF0dXM8JwoJCSAuVG91cm5leTo6QU5PTi4nIEFORCB0ZWFtQSBJUyBOT1QgTlVMTCBBTkQgdGVhbUIgSVMgTk9UIE5VTEwnOwoJCXJldHVybiAkZGItPkdldE9uZSgkc3FsLGFycmF5KCRicmFja2V0X2lkKSk7Cgl9Cgp9Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.tmtSMS.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0KEMpIDIwMTQtMjAxNSBUb20gUGhhbmUgPHRwZ3d3QG9uZXBvc3QubmV0PgpSZWZlciB0byBsaWNlbmNlIGFuZCBvdGhlciBkZXRhaWxzIGF0IHRoZSB0b3Agb2YgZmlsZSBUb3VybmV5Lm1vZHVsZS5waHAKTW9yZSBpbmZvIGF0IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvdG91cm5leQoKRnVuY3Rpb25zIGludm9sdmVkIHdpdGggU01TIGNvbW11bmljYXRpb25zClRoaXMgY2xhc3MgaXMgbm90IHN1aXRhYmxlIGZvciBzdGF0aWMgbWV0aG9kLWNhbGxpbmcKKi8KY2xhc3MgdG10U01TCnsKCXByaXZhdGUgJHV0aWxzOwoJcHJpdmF0ZSAkZ2F0ZXdheTsKCXByaXZhdGUgJGNjbXNnOwoJcHJpdmF0ZSAkZnJvbW51bTsgLy93aGV0aGVyIGdhdGV3YXkgc3VwcG9ydHMgYSBzcGVjaWZpYyBzZW5kZXItbnVtYmVyCglwcml2YXRlICRhZGRwcmVmaXg7IC8vd2hldGhlciBnYXRld2F5IHJlcXVpcmVzIGNvdW50cnktcHJlZml4IGZvciBlYWNoIHBob25lIG5vLiBvciBlbHNlIHN1cHBvcnRzIHBob25lIG5vLiBhcy1pcwoJcHJpdmF0ZSAkYWRkcGx1czsgLy93aGV0aGVyIGdhdGV3YXkgcmVxdWlyZXMgYSBsZWFkaW5nICcrJyBpbiB0aGUgY291bnRyeS1wcmVmaXgsIGlmIGFueQoKCWZ1bmN0aW9uIF9fY29uc3RydWN0KCkKCXsKCQkkdGhpcy0+dXRpbHMgPSBuZXcgY2dzbXNfdXRpbHMoKTsgLy9uZXZlciBGQUxTRSwgY3V6IGNsYXNzIGNyZWF0ZWQgYWZ0ZXIgY2hlY2sKCQkkdGhpcy0+Z2F0ZXdheSA9ICR0aGlzLT51dGlscy0+Z2V0X2dhdGV3YXkoKTsgLy9tYXliZSBGQUxTRQoJCSR0aGlzLT5jY21zZyA9IEZBTFNFOwoJCSR0aGlzLT5mcm9tbnVtID0gRkFMU0U7CgkJJHRoaXMtPmFkZHByZWZpeCA9IFRSVUU7CgkJJHRoaXMtPmFkZHBsdXMgPSBGQUxTRTsKCQlpZigkdGhpcy0+Z2F0ZXdheSkKCQl7CgkJCWlmKG1ldGhvZF9leGlzdHMoJHRoaXMtPmdhdGV3YXksJ3N1cHBvcnRfY3VzdG9tX3NlbmRlcicpKQoJCQkJJHRoaXMtPmZyb21udW0gPSAkdGhpcy0+Z2F0ZXdheS0+c3VwcG9ydF9jdXN0b21fc2VuZGVyKCk7CgkJCWlmKG1ldGhvZF9leGlzdHMoJHRoaXMtPmdhdGV3YXksJ3JlcXVpcmVfY291bnRyeV9wcmVmaXgnKSkKCQkJewoJCQkJJHRoaXMtPmFkZHByZWZpeCA9ICR0aGlzLT5nYXRld2F5LT5yZXF1aXJlX2NvdW50cnlfcHJlZml4KCk7CgkJCQlpZigkdGhpcy0+YWRkcHJlZml4ICYmIG1ldGhvZF9leGlzdHMoJHRoaXMtPmdhdGV3YXksJ3JlcXVpcmVfcGx1c19wcmVmaXgnKSkKCQkJCQkkdGhpcy0+YWRkcGx1cyA9ICR0aGlzLT5nYXRld2F5LT5yZXF1aXJlX3BsdXNfcHJlZml4KCk7CgkJCX0KCQl9Cgl9CgoJLyoqCglEb1NlbmQ6CglTZW5kcyBTTVMocykgYWJvdXQgYSBtYXRjaAoJQG1vZDogcmVmZXJlbmNlIHRvIGN1cnJlbnQgbW9kdWxlIG9iamVjdAoJQGNvZGVzOiBhc3NvY2lhdGl2ZSBhcnJheSBvZiA0IFR3aXR0ZXIgYWNjZXNzLWNvZGVzCglAdG86IGFycmF5IG9mIHZhbGlkYXRlZCBwaG9uZS1ubyhzKSBmb3IgcmVjaXBpZW50KHMpCglAY2M6IGFycmF5IG9mIHZhbGlkYXRlZCBwaG9uZS1ubyhzKSBmb3IgYnJhY2tldCBvd25lcihzKSwgb3IgRkFMU0UKCUBmcm9tOiB2YWxpZGF0ZWQgcGhvbmUtbm8gdG8gYmUgdXNlZCAoaWYgcG9zc2libGUpIGFzIHNlbmRlciwgb3IgRkFMU0UKCUB0cGw6IHNtYXJ0eSB0ZW1wbGF0ZSB0byB1c2UgZm9yIG1lc3NhZ2UgYm9keQoJUmV0dXJuczogMi1tZW1iZXIgYXJyYXkgLQoJIFswXSBGQUxTRSBpZiBubyBhZGRyZXNzZWUgb3Igbm8gU01TRy1tb2R1bGUgZ2F0ZXdheSwgb3RoZXJ3aXNlIGJvb2xlYW4gY3VtdWxhdGl2ZSByZXN1bHQgb2YgZ2F0ZXdheS0+c2VuZCgpCgkgWzFdICcnIG9yIGVycm9yIG1lc3NhZ2UgZS5nLiBmcm9tIGdhdGV3YXktPnNlbmQoKSB0byAkdG8gKCRjYyBlcnJvcnMgaWdub3JlZCkKCSovCglwcml2YXRlIGZ1bmN0aW9uIERvU2VuZCgmJG1vZCwkdG8sJGNjLCRmcm9tLCR0cGwpCgl7CgkJaWYoISgkdG8gfHwgJGNjKSkKCQkJcmV0dXJuIGFycmF5KEZBTFNFLCcnKTsKCQlpZighJHRoaXMtPmdhdGV3YXkpCgkJCXJldHVybiBhcnJheShGQUxTRSwkbW9kLT5MYW5nKCdlcnJfc3lzdGVtJykpOwoJCSRib2R5ID0gJG1vZC0+UHJvY2Vzc0RhdGFUZW1wbGF0ZSgkdHBsKTsKCQlpZighJGJvZHkgfHwgISR0aGlzLT51dGlscy0+dGV4dF9pc192YWxpZCgkYm9keSkpCgkJCXJldHVybiBhcnJheShGQUxTRSwkbW9kLT5MYW5nKCdlcnJfdGV4dCcpLicgXCcnLiRib2R5LidcJycpOwoJCWlmKCRmcm9tICYmICR0aGlzLT5mcm9tbnVtKQoJCQkkdGhpcy0+Z2F0ZXdheS0+c2V0X2Zyb20oJGZyb20pOwoJCSR0aGlzLT5nYXRld2F5LT5zZXRfbXNnKCRib2R5KTsKCQkkZXJyID0gJyc7CgkJLy9hc3N1bWUgZ2F0ZXdheSBkb2Vzbid0IHN1cHBvcnQgYmF0Y2hpbmcKCQlmb3JlYWNoKCR0byBhcyAkbnVtKQoJCXsKCQkJJHRoaXMtPmdhdGV3YXktPnNldF9udW0oJG51bSk7CgkJCWlmKCEkdGhpcy0+Z2F0ZXdheS0+c2VuZCgpKQoJCQl7CgkJCQlpZigkZXJyKSAkZXJyIC49ICc8YnIgLz4nOwoJCQkJJGVyciAuPSAkbnVtLic6ICcuJHRoaXMtPmdhdGV3YXktPmdldF9zdGF0dXNtc2coKTsKCQkJfQoJCX0KCQlpZigkY2MgJiYgKCRib2R5ICE9ICR0aGlzLT5jY21zZykpCgkJewoJCQkkdGhpcy0+Y2Ntc2cgPSAkYm9keTsgLy9mb3Jlc3RhbGwgZHVwbGljYXRpb24KCQkJZm9yZWFjaCgkY2MgYXMgJG51bSkKCQkJewoJCQkJJHRoaXMtPmdhdGV3YXktPnNldF9udW0oJG51bSk7CgkJCQlpZigkZnJvbSAmJiAkdGhpcy0+ZnJvbW51bSkKCQkJCXsKCQkJCQlpZigkbnVtID09ICRmcm9tKQoJCQkJCQkkdGhpcy0+Z2F0ZXdheS0+c2V0X2Zyb20oRkFMU0UpOwoJCQkJCWVsc2UKCQkJCQkJJHRoaXMtPmdhdGV3YXktPnNldF9mcm9tKCRmcm9tKTsKCQkJCX0KCQkJCSR0aGlzLT5nYXRld2F5LT5zZW5kKCk7IC8vaWdub3JlIGFueSBlcnJvciB0byBjYwoJCQl9CgkJfQoJCXJldHVybiBhcnJheSgoJGVycj09JycpLCRlcnIpOwoJfQoKCS8qKgoJR2V0VGVhbUNvbnRhY3RzOgoJQHRlYW1faWQ6IGVudW1lcmF0b3Igb2YgdGVhbSBiZWluZyBwcm9jZXNzZWQKCUBwcmVmaXg6IGRlZmF1bHQgY291bnRyeS1jb2RlIGZvciBwaG9uZS1udW1iZXJzIHRvIHJlY2VpdmUgdGV4dAoJQHBhdHRlcm46IHJlZ2V4IGZvciBtYXRjaGluZyBhY2NlcHRhYmxlIHBob25lIG5vcywgZGVmYXVsdHMgdG8gbW9kdWxlIHByZWZlcmVuY2UKCUBmaXJzdDogd2hldGhlciB0byBvbmx5IHRyeSBmb3IgdGhlIGZpcnN0IHJlbGV2YW50IHRhZywgb3B0aW9uYWwsIGRlZmF1bHQgPSBGQUxTRQoJUmV0dXJuczogYXJyYXkgb2YgdmFsaWRhdGVkIHBob25lIG5vcyAobWF5YmUgZW1wdHkpLCBvciBGQUxTRS4KCSovCglwcml2YXRlIGZ1bmN0aW9uIEdldFRlYW1Db250YWN0cygkdGVhbV9pZCwkcHJlZml4LCRwYXR0ZXJuLCRmaXJzdD1GQUxTRSkKCXsKCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOwoJCSRwcmVmID0gY21zX2RiX3ByZWZpeCgpOwoJCSRzcWwgPSAnU0VMRUNUIG5hbWUsY29udGFjdCBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfcGVvcGxlIFdIRVJFIGlkPT8gQU5EIGZsYWdzIT0yIE9SREVSIEJZIGRpc3BsYXlvcmRlcic7CgkJJG1lbWJlcnMgPSAkZGItPkdldEFsbCgkc3FsLGFycmF5KCR0ZWFtX2lkKSk7CgkJaWYoJG1lbWJlcnMpCgkJewoJCQlpZighJGZpcnN0KQoJCQl7CgkJCQkkc3FsID0gJ1NFTEVDVCBjb250YWN0YWxsIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF90ZWFtcyBXSEVSRSB0ZWFtX2lkPT8nOwoJCQkJJGFsbCA9ICRkYi0+R2V0T25lKCRzcWwsYXJyYXkoJHRlYW1faWQpKTsKCQkJCWlmKCEkYWxsKQoJCQkJCSRmaXJzdCA9IFRSVUU7CgkJCX0KCQkJJHNlbmRzID0gYXJyYXkoKTsKCQkJZm9yZWFjaCgkbWVtYmVycyBhcyAkb25lKQoJCQl7CgkJCQkkY2xlYW4gPSBzZWxmOjpWYWxpZGF0ZUFkZHJlc3MoJG9uZVsnY29udGFjdCddLCRwcmVmaXgsJHBhdHRlcm4pOwoJCQkJaWYoJGNsZWFuKQoJCQkJewoJCQkJCSRzZW5kc1tdID0gJGNsZWFuOwoJCQkJCWlmKCRmaXJzdCkKCQkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQkJcmV0dXJuICRzZW5kczsKCQl9CgkJcmV0dXJuIEZBTFNFOwoJfQoKCS8vJHBhdHRlcm4gaXMgZm9yIG1hdGNoaW5nICRudW1iZXIgQUZURVIgd2hpdGVzcGFjZSBnb25lLCBCRUZPUkUgYW55IHByZWZpeC1hZGp1c3RtZW50LAoJLy9hbHJlYWR5IGhhcyBzdXJycm91bmRpbmcgZGVsaW1pdGVyLWNoYXJzCglwcml2YXRlIGZ1bmN0aW9uIEFkanVzdFBob25lKCRudW1iZXIsJGNvdW50cnksJHBhdHRlcm4pCgl7CgkJJG4gPSBzdHJfcmVwbGFjZSgnICcsJycsJG51bWJlcik7CgkJaWYoIXByZWdfbWF0Y2goJHBhdHRlcm4sJG4pKQoJCQlyZXR1cm4gRkFMU0U7CgkJaWYoISR0aGlzLT5hZGRwcmVmaXgpCgkJCXJldHVybiAkbjsKCQkkcCA9IHN0cl9yZXBsYWNlKCcgJywnJywkY291bnRyeSk7CgkJJHBsdXMgPSAoJHBbMF0gPT0gJysnKTsKCQlpZigkcGx1cykKCQkJJHAgPSBzdWJzdHIoJHAsMSk7CgkJJGwgPSBzdHJsZW4oJHApOwoJCWlmKCRsID4gMCkKCQl7CgkJCWlmKHN1YnN0cigkbiwwLCRsKSAhPSAkcCkKCQkJewoJCQkJaWYoJG5bMF0gPT09ICcwJykKCQkJCQkkbiA9ICRwLnN1YnN0cigkbiwxKTsKCQkJfQoJCX0KCQlpZigkdGhpcy0+YWRkcGx1cyAmJiAkblswXSAhPSAnKycpCgkJCSRuID0gJysnLiRuOwoJCWVsc2VpZighJHRoaXMtPmFkZHBsdXMgJiYgJG5bMF0gPT0gJysnKQoJCQkkbiA9IHN1YnN0cigkbiwxKTsgLy9hc3N1bWUgaXQncyBhbHJlYWR5IGEgZnVsbCBudW1iZXIgaS5lLiArY291bnRyeWxvY2FsCgkJcmV0dXJuICRuOwoJfQoKCS8qKgoJVmFsaWRhdGVBZGRyZXNzOgoJQ2hlY2sgd2hldGhlciBAYWRkcmVzcyBpcyBhIHZhbGlkIHBob25lIG5vLgoJQG51bWJlcjogb25lLCBvciBhIGNvbW1hLXNlcGFyYXRlZCBzZXJpZXMgb2YsIG51bWJlcihzKSB0byBjaGVjawoJQHByZWZpeDogZGVmYXVsdCBjb3VudHJ5LWNvZGUgZm9yIHBob25lLW51bWJlcnMgdG8gcmVjZWl2ZSB0ZXh0CglAcGF0dGVybjogcmVnZXggZm9yIG1hdGNoaW5nIGFjY2VwdGFibGUgcGhvbmUgbm9zCglSZXR1cm5zOiBhIHRyaW1tZWQgdmFsaWQgcGhvbmUgbm8uLCBvciBhcnJheSBvZiB0aGVtLCBvciBGQUxTRQoJKi8KCXB1YmxpYyBmdW5jdGlvbiBWYWxpZGF0ZUFkZHJlc3MoJG51bWJlciwkcHJlZml4LCRwYXR0ZXJuKQoJewoJCWlmKCEkcGF0dGVybikKCQkJcmV0dXJuIEZBTFNFOwoJCSRwYXR0ZXJuID0gJ34nLiRwYXR0ZXJuLid+JzsKCQlpZihzdHJwb3MoJG51bWJlciwnLCcpID09PSBGQUxTRSkKCQl7CgkJCXJldHVybiBzZWxmOjpBZGp1c3RQaG9uZSgkbnVtYmVyLCRwcmVmaXgsJHBhdHRlcm4pOwoJCX0KCQllbHNlCgkJewoJCQkkcGFydHMgPSBleHBsb2RlKCcsJywkbnVtYmVyKTsKCQkJJG51bWJlciA9IGFycmF5KCk7CgkJCWZvcmVhY2goJHBhcnRzIGFzICRvbmUpCgkJCXsKCQkJCSR0byA9IHNlbGY6OkFkanVzdFBob25lKCRvbmUsJHByZWZpeCwkcGF0dGVybik7CgkJCQlpZigkdG8pCgkJCQkJJG51bWJlcltdID0gJHRvOwoJCQl9CgkJCWlmKCRudW1iZXIpCgkJCQlyZXR1cm4gJG51bWJlcjsKCQl9CgkJcmV0dXJuIEZBTFNFOwoJfQoKCS8qKgoJVGVsbE93bmVyOgoJU2VuZHMgU01TIHRvIHRvdXJuYW1lbnQgb3duZXIgaWYgcG9zc2libGUsIGFuZCB0aGVuIHRvIG9uZSBtZW1iZXIgb2YgYm90aCB0ZWFtcwoJaW4gdGhlIG1hdGNoLCB1c2luZyBzYW1lIHRlbXBsYXRlIGFzIGZvciB0d2VldHMKCUBtb2Q6IHJlZmVyZW5jZSB0byBjdXJyZW50IG1vZHVsZSBvYmplY3QKCUBzbWFydHk6IHJlZmVyZW5jZSB0byBDTVNNUyBzbWFydHkgb2JqZWN0CglAYmRhdGE6IHJlZmVyZW5jZSB0byBhcnJheSBvZiBicmFja2V0LXRhYmxlIGRhdGEKCUBtZGF0YTogcmVmZXJlbmNlIHRvIGFycmF5IG9mIG1hdGNoIGRhdGEgKGZyb20gd2hpY2ggd2UgbmVlZCAndGVhbUEnLCAndGVhbUInKQoJQGxpbmVzOiBhcnJheSBvZiBsaW5lcyBmb3IgbWVzc2FnZSBib2R5CglSZXR1cm5zOiAyLW1lbWJlciBhcnJheSAtCgkgWzBdIFRSVUV8RkFMU0UgcmVwcmVzZW50aW5nIHN1Y2Nlc3MKCSBbMV0gJycgb3Igc3BlY2lmaWMgZmFpbHVyZSBtZXNzYWdlCgkqLwoJcHVibGljIGZ1bmN0aW9uIFRlbGxPd25lcigmJG1vZCwmJHNtYXJ0eSwmJGJkYXRhLCYkbWRhdGEsJGxpbmVzKQoJewoJCS8vb3duZXIocykKCQkkdG8gPSBzZWxmOjpWYWxpZGF0ZUFkZHJlc3MoJGJkYXRhWydjb250YWN0J10sJGJkYXRhWydzbXNwcmVmaXgnXSwkYmRhdGFbJ3Ntc3BhdHRlcm4nXSk7CgkJaWYoJHRvKQoJCXsKCQkJaWYoIWlzX2FycmF5KCR0bykpCgkJCQkkdG8gPSBhcnJheSgkdG8pOwoJCX0KCQllbHNlCgkJCXJldHVybiBhcnJheShGQUxTRSwnJyk7IC8vc2lsZW50LCB0cnkgYW5vdGhlciBjaGFubmVsCgkJLy90ZWFtcwoJCSR0aWQgPSAoaW50KSRtZGF0YVsndGVhbUEnXTsKCQlpZigkdGlkID4gMCkKCQl7CgkJCSRtb3JlID0gc2VsZjo6R2V0VGVhbUNvbnRhY3RzKCR0aWQsJGJkYXRhWydzbXNwcmVmaXgnXSwkYmRhdGFbJ3Ntc3BhdHRlcm4nXSxUUlVFKTsKCQkJaWYoJG1vcmUpCgkJCQkkdG8gPSBhcnJheV9tZXJnZSgkdG8sJG1vcmUpOwoJCX0KCQkkdGlkID0gKGludCkkbWRhdGFbJ3RlYW1CJ107CgkJaWYoJHRpZCA+IDApCgkJewoJCQkkbW9yZSA9IHNlbGY6OkdldFRlYW1Db250YWN0cygkdGlkLCRiZGF0YVsnc21zcHJlZml4J10sJGJkYXRhWydzbXNwYXR0ZXJuJ10sVFJVRSk7CgkJCWlmKCRtb3JlKQoJCQkJJHRvID0gYXJyYXlfbWVyZ2UoJHRvLCRtb3JlKTsKCQl9CgkJLy9tYXliZSA+MSBvd25lcgoJCSRmcm9tID0gc2VsZjo6VmFsaWRhdGVBZGRyZXNzKCRiZGF0YVsnc21zZnJvbSddLCRiZGF0YVsnc21zcHJlZml4J10sJGJkYXRhWydzbXNwYXR0ZXJuJ10pOwoJCWlmKGlzX2FycmF5KCRmcm9tKSkKCQkJJGZyb20gPSByZXNldCgkZnJvbSk7CgoJCS8vc3VibWl0dGVkIGRhdGEKCQkkc21hcnR5LT5hc3NpZ24oJ3JlcG9ydCcsaW1wbG9kZSgnICcsJGxpbmVzKSk7CgoJCSR0cGwgPSAkbW9kLT5HZXRUZW1wbGF0ZSgndHdlZXRpbl8nLiRiZGF0YVsnYnJhY2tldF9pZCddLidfdGVtcGxhdGUnKTsKCQlpZigkdHBsID09IEZBTFNFKQoJCQkkdHBsID0gJG1vZC0+R2V0VGVtcGxhdGUoJ3R3ZWV0aW5fZGVmYXVsdF90ZW1wbGF0ZScpOwoJCXJldHVybiBzZWxmOjpEb1NlbmQoJG1vZCwkdG8sRkFMU0UsJGZyb20sJHRwbCk7Cgl9CgkKCS8qKgoJVGVsbFRlYW1zOgoJU2VuZHMgU01TIHRvIG9uZSBvciBhbGwgbWVtYmVycyBvZiBib3RoIHRlYW1zIGluIHRoZSBtYXRjaCwgcGx1cyB0aGUgb3duZXIsCgl1c2luZyBzYW1lIHRlbXBsYXRlIGFzIGZvciB0d2VldHMKCUBtb2Q6IHJlZmVyZW5jZSB0byBjdXJyZW50IG1vZHVsZSBvYmplY3QKCUBzbWFydHk6IHJlZmVyZW5jZSB0byBDTVNNUyBzbWFydHkgb2JqZWN0CglAYmRhdGE6IHJlZmVyZW5jZSB0byBhcnJheSBvZiBicmFja2V0LXRhYmxlIGRhdGEKCUBtZGF0YTogcmVmZXJlbmNlIHRvIGFycmF5IG9mIG1hdGNoIGRhdGEgKGZyb20gd2hpY2ggd2UgbmVlZCAndGVhbUEnLCAndGVhbUInKQoJQHRwbDogZW51bSBmb3IgdHlwZSBvZiBtZXNzYWdlOiAxID0gYW5ub3VuY2VtZW50LCAyID0gY2FuY2VsbGF0aW9uLCAzID0gc2NvcmUtcmVxdWVzdAoJQGZpcnN0OiBUUlVFIHRvIHNlbmQgb25seSB0byBmaXJzdCByZWNvZ25pc2VkIGFkZHJlc3MsIEZBTFNFIHRvIHNlbmQgcGVyCgkJdGhlIHRlYW1zJyByZXNwZWN0aXZlIGNvbnRhY3RhbGwgc2V0dGluZ3MsIG9wdGlvbmFsLCBkZWZhdWx0IEZBTFNFCglSZXR1cm5zOiAyLW1lbWJlciBhcnJheSAtCgkgWzBdIFRSVUV8RkFMU0UgcmVwcmVzZW50aW5nIHN1Y2Nlc3MsIG9yIFRSVUUgaWYgbm9ib2R5IHRvIHNlbmQgdG8KCSBbMV0gJycgb3Igc3BlY2lmaWMgZmFpbHVyZSBtZXNzYWdlCgkqLwoJcHVibGljIGZ1bmN0aW9uIFRlbGxUZWFtcygmJG1vZCwmJHNtYXJ0eSwmJGJkYXRhLCYkbWRhdGEsJHRwbCwkZmlyc3Q9RkFMU0UpCgl7CgkJc3dpdGNoKCR0cGwpCgkJewoJCSBjYXNlIDE6CgkJCSR0cGwgPSAkbW9kLT5HZXRUZW1wbGF0ZSgndHdlZXRvdXRfJy4kYmRhdGFbJ2JyYWNrZXRfaWQnXS4nX3RlbXBsYXRlJyk7CgkJCWlmKCR0cGwgPT0gRkFMU0UpCgkJCQkkdHBsID0gJG1vZC0+R2V0VGVtcGxhdGUoJ3R3ZWV0b3V0X2RlZmF1bHRfdGVtcGxhdGUnKTsKCQkJYnJlYWs7CgkJIGNhc2UgMjoKCQkJJHRwbCA9ICRtb2QtPkdldFRlbXBsYXRlKCd0d2VldGNhbmNlbF8nLiRiZGF0YVsnYnJhY2tldF9pZCddLidfdGVtcGxhdGUnKTsKCQkJaWYoJHRwbCA9PSBGQUxTRSkKCQkJCSR0cGwgPSAkbW9kLT5HZXRUZW1wbGF0ZSgndHdlZXRjYW5jZWxfZGVmYXVsdF90ZW1wbGF0ZScpOwoJCQlicmVhazsKCQkgY2FzZSAzOgoJCQkkdHBsID0gJG1vZC0+R2V0VGVtcGxhdGUoJ3R3ZWV0cmVxdWVzdF8nLiRiZGF0YVsnYnJhY2tldF9pZCddLidfdGVtcGxhdGUnKTsKCQkJaWYoJHRwbCA9PSBGQUxTRSkKCQkJCSR0cGwgPSAkbW9kLT5HZXRUZW1wbGF0ZSgndHdlZXRyZXF1ZXN0X2RlZmF1bHRfdGVtcGxhdGUnKTsKCQkJYnJlYWs7CgkJfQoKCQkkdGhpcy0+Y2Ntc2cgPSBGQUxTRTsKCQkkZnJvbSA9IHNlbGY6OlZhbGlkYXRlQWRkcmVzcygkYmRhdGFbJ3Ntc2Zyb20nXSwkYmRhdGFbJ3Ntc3ByZWZpeCddLCRiZGF0YVsnc21zcGF0dGVybiddKTsKCQkkb3duZXIgPSBzZWxmOjpWYWxpZGF0ZUFkZHJlc3MoJGJkYXRhWydjb250YWN0J10sJGJkYXRhWydzbXNwcmVmaXgnXSwkYmRhdGFbJ3Ntc3BhdHRlcm4nXSk7CgkJaWYoJG93bmVyKQoJCXsKCQkJaWYoIWlzX2FycmF5KCRvd25lcikpCgkJCQkkb3duZXIgPSBhcnJheSgkb3duZXIpOwoJCQlpZighJGZyb20pCgkJCQkkZnJvbSA9IHJlc2V0KCRvd25lcik7CgkJfQoJCSRlcnIgPSAnJzsKCQkkcmVzQSA9IFRSVUU7IC8vd2UncmUgb2sgaWYgbm90aGluZyBzZW50CgkJJHRpZCA9IChpbnQpJG1kYXRhWyd0ZWFtQSddOwoJCWlmKCR0aWQgPiAwKQoJCQkkdG8gPSBzZWxmOjpHZXRUZWFtQ29udGFjdHMoJHRpZCwkYmRhdGFbJ3Ntc3ByZWZpeCddLCRiZGF0YVsnc21zcGF0dGVybiddLCRmaXJzdCk7CgkJZWxzZQoJCQkkdG8gPSBGQUxTRTsKCQlpZigkdG8gfHwgJG93bmVyKQoJCXsKCQkJaWYoJHRvKQoJCQl7CgkJCQlyZXNldCgkdG8pOwoJCQkJJHNtYXJ0eS0+YXNzaWduKCdyZWNpcGllbnQnLGtleSgkdG8pKTsKCQkJCSR0YyA9IGNvdW50KCR0byk7CgkJCQkkdG9hbGwgPSAoKCRiZGF0YVsndGVhbXNpemUnXSA8IDIgJiYgJHRjID4gMCkgfHwgJHRjID4gMSk7CgkJCQkkc21hcnR5LT5hc3NpZ24oJ3RvYWxsJywkdG9hbGwpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJHNtYXJ0eS0+YXNzaWduKCdyZWNpcGllbnQnLCcnKTsKCQkJCSRzbWFydHktPmFzc2lnbigndG9hbGwnLEZBTFNFKTsKCQkJfQoJCQkkb3AgPSAoKGludCkkbWRhdGFbJ3RlYW1CJ10gPiAwKSA/ICRtb2QtPlRlYW1OYW1lKCRtZGF0YVsndGVhbUInXSkgOiAnJzsKCQkJJHNtYXJ0eS0+YXNzaWduKCdvcHBvbmVudCcsJG9wKTsKCQkJbGlzdCgkcmVzQSwkbXNnKSA9IHNlbGY6OkRvU2VuZCgkbW9kLCR0bywkb3duZXIsJGZyb20sJHRwbCk7CgkJCWlmKCEkcmVzQSkKCQkJewoJCQkJaWYoISRtc2cpCgkJCQkJJG1zZyA9ICRtb2QtPkxhbmcoJ2Vycl9ub3RpY2UnKTsKCQkJCSRlcnIgLj0gJG1vZC0+VGVhbU5hbWUoJHRpZCkuJzogJy4kbXNnOwoJCQl9CgkJfQoKCQkkcmVzQiA9IFRSVUU7CgkJJHRpZCA9IChpbnQpJG1kYXRhWyd0ZWFtQiddOwoJCWlmKCR0aWQgPiAwKQoJCQkkdG8gPSBzZWxmOjpHZXRUZWFtQ29udGFjdHMoJHRpZCwkYmRhdGFbJ3Ntc3ByZWZpeCddLCRiZGF0YVsnc21zcGF0dGVybiddLCRmaXJzdCk7CgkJZWxzZQoJCQkkdG8gPSBGQUxTRTsKCQlpZigkdG8gfHwgJG93bmVyKQoJCXsKCQkJaWYoJHRvKQoJCQl7CgkJCQlyZXNldCgkdG8pOwoJCQkJJHNtYXJ0eS0+YXNzaWduKCdyZWNpcGllbnQnLGtleSgkdG8pKTsKCQkJCSR0YyA9IGNvdW50KCR0byk7CgkJCQkkdG9hbGwgPSAoKCRiZGF0YVsndGVhbXNpemUnXSA8IDIgJiYgJHRjID4gMCkgfHwgJHRjID4gMSk7CgkJCQkkc21hcnR5LT5hc3NpZ24oJ3RvYWxsJywkdG9hbGwpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJHNtYXJ0eS0+YXNzaWduKCdyZWNpcGllbnQnLCcnKTsKCQkJCSRzbWFydHktPmFzc2lnbigndG9hbGwnLEZBTFNFKTsKCQkJfQoJCQkkb3AgPSAoKGludCkkbWRhdGFbJ3RlYW1BJ10gPiAwKSA/ICRtb2QtPlRlYW1OYW1lKCRtZGF0YVsndGVhbUEnXSkgOiAnJzsKCQkJJHNtYXJ0eS0+YXNzaWduKCdvcHBvbmVudCcsJG9wKTsKCQkJbGlzdCgkcmVzQiwkbXNnKSA9IHNlbGY6OkRvU2VuZCgkbW9kLCR0bywkb3duZXIsJGZyb20sJHRwbCk7CgkJCWlmKCEkcmVzQikKCQkJewoJCQkJaWYoJGVycikgJGVyciAuPSAnPGJyIC8+JzsgCgkJCQlpZighJG1zZykKCQkJCQkkbXNnID0gJG1vZC0+TGFuZygnZXJyX25vdGljZScpOwoJCQkJJGVyciAuPSAkbW9kLT5UZWFtTmFtZSgkdGlkKS4nOiAnLiRtc2c7CgkJCX0KCQl9CgoJCWlmKCRyZXNBICYmICRyZXNCKQoJCQlyZXR1cm4gYXJyYXkoVFJVRSwnJyk7CgkJcmV0dXJuIGFycmF5KEZBTFNFLCRlcnIpOwoJfQp9Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.tmtStyler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0KEMpIDIwMTQtMjAxNSBUb20gUGhhbmUgPHRwZ3d3QG9uZXBvc3QubmV0PgpSZWZlciB0byBsaWNlbmNlIGFuZCBvdGhlciBkZXRhaWxzIGF0IHRoZSB0b3Agb2YgZmlsZSBUb3VybmV5Lm1vZHVsZS5waHAKTW9yZSBpbmZvIGF0IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvdG91cm5leQoKQ2xhc3M6IHRtdFN0eWxlci4gRGF0YSBhbmQgZnVuY3Rpb25zIGludm9sdmVkIHdpdGggdG91cm5hbWVudCBjaGFydCBjb25zdHJ1Y3Rpb24gYW5kIHN0eWxpbmcKTk9URSB0aGlzIGNsYXNzIGRvZXMgbm90IHN1cHBvcnQgc3RhdGljIG1ldGhvZC1jYWxsaW5nCiovCmNsYXNzIHRtdFN0eWxlciBleHRlbmRzIGNzc3BhcnNlciB7Cglwcml2YXRlICRjb2xvcnM7CgoJZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7CgkvL2NvbG9yLW5hbWVzIHN1cHBvcnRlZCBieSBtb2Rlcm4gYnJvd3NlcnMoZnJvbSBodHRwOi8vd3d3Lnczc2Nob29scy5jb20vaHRtbC9odG1sX2NvbG9ybmFtZXMuYXNwKQoJJHRoaXMtPmNvbG9ycyA9IGFycmF5KAoJJ2FsaWNlYmx1ZSc9PicjZjBmOGZmJywKCSdhbnRpcXVld2hpdGUnPT4nI2ZhZWJkNycsCgknYXF1YSc9PicjMDBmZmZmJywKCSdhcXVhbWFyaW5lJz0+JyM3ZmZmZDQnLAoJJ2F6dXJlJz0+JyNmMGZmZmYnLAoJJ2JlaWdlJz0+JyNmNWY1ZGMnLAoJJ2Jpc3F1ZSc9PicjZmZlNGM0JywKCSdibGFjayc9PicjMDAwMDAwJywKCSdibGFuY2hlZGFsbW9uZCc9PicjZmZlYmNkJywKCSdibHVlJz0+JyMwMDAwZmYnLAoJJ2JsdWV2aW9sZXQnPT4nIzhhMmJlMicsCgknYnJvd24nPT4nI2E1MmEyYScsCgknYnVybHl3b29kJz0+JyNkZWI4ODcnLAoJJ2NhZGV0Ymx1ZSc9PicjNWY5ZWEwJywKCSdjaGFydHJldXNlJz0+JyM3ZmZmMDAnLAoJJ2Nob2NvbGF0ZSc9PicjZDI2OTFlJywKCSdjb3JhbCc9PicjZmY3ZjUwJywKCSdjb3JuZmxvd2VyYmx1ZSc9PicjNjQ5NWVkJywKCSdjb3Juc2lsayc9PicjZmZmOGRjJywKCSdjcmltc29uJz0+JyNkYzE0M2MnLAoJJ2N5YW4nPT4nIzAwZmZmZicsCgknZGFya2JsdWUnPT4nIzAwMDA4YicsCgknZGFya2N5YW4nPT4nIzAwOGI4YicsCgknZGFya2dvbGRlbnJvZCc9PicjYjg4NjBiJywKCSdkYXJrZ3JheSc9PicjYTlhOWE5JywKCSdkYXJrZ3JleSc9PicjYTlhOWE5JywKCSdkYXJrZ3JlZW4nPT4nIzAwNjQwMCcsCgknZGFya2toYWtpJz0+JyNiZGI3NmInLAoJJ2RhcmttYWdlbnRhJz0+JyM4YjAwOGInLAoJJ2RhcmtvbGl2ZWdyZWVuJz0+JyM1NTZiMmYnLAoJJ2RhcmtvcmFuZ2UnPT4nI2ZmOGMwMCcsCgknZGFya29yY2hpZCc9PicjOTkzMmNjJywKCSdkYXJrcmVkJz0+JyM4YjAwMDAnLAoJJ2RhcmtzYWxtb24nPT4nI2U5OTY3YScsCgknZGFya3NlYWdyZWVuJz0+JyM4ZmJjOGYnLAoJJ2RhcmtzbGF0ZWJsdWUnPT4nIzQ4M2Q4YicsCgknZGFya3NsYXRlZ3JheSc9PicjMmY0ZjRmJywKCSdkYXJrc2xhdGVncmV5Jz0+JyMyZjRmNGYnLAoJJ2Rhcmt0dXJxdW9pc2UnPT4nIzAwY2VkMScsCgknZGFya3Zpb2xldCc9PicjOTQwMGQzJywKCSdkZWVwcGluayc9PicjZmYxNDkzJywKCSdkZWVwc2t5Ymx1ZSc9PicjMDBiZmZmJywKCSdkaW1ncmF5Jz0+JyM2OTY5NjknLAoJJ2RpbWdyZXknPT4nIzY5Njk2OScsCgknZG9kZ2VyYmx1ZSc9PicjMWU5MGZmJywKCSdmaXJlYnJpY2snPT4nI2IyMjIyMicsCgknZmxvcmFsd2hpdGUnPT4nI2ZmZmFmMCcsCgknZm9yZXN0Z3JlZW4nPT4nIzIyOGIyMicsCgknZnVjaHNpYSc9PicjZmYwMGZmJywKCSdnYWluc2Jvcm8nPT4nI2RjZGNkYycsCgknZ2hvc3R3aGl0ZSc9PicjZjhmOGZmJywKCSdnb2xkJz0+JyNmZmQ3MDAnLAoJJ2dvbGRlbnJvZCc9PicjZGFhNTIwJywKCSdncmF5Jz0+JyM4MDgwODAnLAoJJ2dyZXknPT4nIzgwODA4MCcsCgknZ3JlZW4nPT4nIzAwODAwMCcsCgknZ3JlZW55ZWxsb3cnPT4nI2FkZmYyZicsCgknaG9uZXlkZXcnPT4nI2YwZmZmMCcsCgknaG90cGluayc9PicjZmY2OWI0JywKCSdpbmRpYW5yZWQnPT4nI2NkNWM1YycsCgknaW5kaWdvJz0+JyM0YjAwODInLAoJJ2l2b3J5Jz0+JyNmZmZmZjAnLAoJJ2toYWtpJz0+JyNmMGU2OGMnLAoJJ2xhdmVuZGVyJz0+JyNlNmU2ZmEnLAoJJ2xhdmVuZGVyYmx1c2gnPT4nI2ZmZjBmNScsCgknbGF3bmdyZWVuJz0+JyM3Y2ZjMDAnLAoJJ2xlbW9uY2hpZmZvbic9PicjZmZmYWNkJywKCSdsaWdodGJsdWUnPT4nI2FkZDhlNicsCgknbGlnaHRjb3JhbCc9PicjZjA4MDgwJywKCSdsaWdodGN5YW4nPT4nI2UwZmZmZicsCgknbGlnaHRnb2xkZW5yb2R5ZWxsb3cnPT4nI2ZhZmFkMicsCgknbGlnaHRncmF5Jz0+JyNkM2QzZDMnLAoJJ2xpZ2h0Z3JleSc9PicjZDNkM2QzJywKCSdsaWdodGdyZWVuJz0+JyM5MGVlOTAnLAoJJ2xpZ2h0cGluayc9PicjZmZiNmMxJywKCSdsaWdodHNhbG1vbic9PicjZmZhMDdhJywKCSdsaWdodHNlYWdyZWVuJz0+JyMyMGIyYWEnLAoJJ2xpZ2h0c2t5Ymx1ZSc9PicjODdjZWZhJywKCSdsaWdodHNsYXRlZ3JheSc9PicjNzc4ODk5JywKCSdsaWdodHNsYXRlZ3JleSc9PicjNzc4ODk5JywKCSdsaWdodHN0ZWVsYmx1ZSc9PicjYjBjNGRlJywKCSdsaWdodHllbGxvdyc9PicjZmZmZmUwJywKCSdsaW1lJz0+JyMwMGZmMDAnLAoJJ2xpbWVncmVlbic9PicjMzJjZDMyJywKCSdsaW5lbic9PicjZmFmMGU2JywKCSdtYWdlbnRhJz0+JyNmZjAwZmYnLAoJJ21hcm9vbic9PicjODAwMDAwJywKCSdtZWRpdW1hcXVhbWFyaW5lJz0+JyM2NmNkYWEnLAoJJ21lZGl1bWJsdWUnPT4nIzAwMDBjZCcsCgknbWVkaXVtb3JjaGlkJz0+JyNiYTU1ZDMnLAoJJ21lZGl1bXB1cnBsZSc9PicjOTM3MGQ4JywKCSdtZWRpdW1zZWFncmVlbic9PicjM2NiMzcxJywKCSdtZWRpdW1zbGF0ZWJsdWUnPT4nIzdiNjhlZScsCgknbWVkaXVtc3ByaW5nZ3JlZW4nPT4nIzAwZmE5YScsCgknbWVkaXVtdHVycXVvaXNlJz0+JyM0OGQxY2MnLAoJJ21lZGl1bXZpb2xldHJlZCc9PicjYzcxNTg1JywKCSdtaWRuaWdodGJsdWUnPT4nIzE5MTk3MCcsCgknbWludGNyZWFtJz0+JyNmNWZmZmEnLAoJJ21pc3R5cm9zZSc9PicjZmZlNGUxJywKCSdtb2NjYXNpbic9PicjZmZlNGI1JywKCSduYXZham93aGl0ZSc9PicjZmZkZWFkJywKCSduYXZ5Jz0+JyMwMDAwODAnLAoJJ29sZGxhY2UnPT4nI2ZkZjVlNicsCgknb2xpdmUnPT4nIzgwODAwMCcsCgknb2xpdmVkcmFiJz0+JyM2YjhlMjMnLAoJJ29yYW5nZSc9PicjZmZhNTAwJywKCSdvcmFuZ2VyZWQnPT4nI2ZmNDUwMCcsCgknb3JjaGlkJz0+JyNkYTcwZDYnLAoJJ3BhbGVnb2xkZW5yb2QnPT4nI2VlZThhYScsCgkncGFsZWdyZWVuJz0+JyM5OGZiOTgnLAoJJ3BhbGV0dXJxdW9pc2UnPT4nI2FmZWVlZScsCgkncGFsZXZpb2xldHJlZCc9PicjZDg3MDkzJywKCSdwYXBheWF3aGlwJz0+JyNmZmVmZDUnLAoJJ3BlYWNocHVmZic9PicjZmZkYWI5JywKCSdwZXJ1Jz0+JyNjZDg1M2YnLAoJJ3BpbmsnPT4nI2ZmYzBjYicsCgkncGx1bSc9PicjZGRhMGRkJywKCSdwb3dkZXJibHVlJz0+JyNiMGUwZTYnLAoJJ3B1cnBsZSc9PicjODAwMDgwJywKCSdyZWQnPT4nI2ZmMDAwMCcsCgkncm9zeWJyb3duJz0+JyNiYzhmOGYnLAoJJ3JveWFsYmx1ZSc9PicjNDE2OWUxJywKCSdzYWRkbGVicm93bic9PicjOGI0NTEzJywKCSdzYWxtb24nPT4nI2ZhODA3MicsCgknc2FuZHlicm93bic9PicjZjRhNDYwJywKCSdzZWFncmVlbic9PicjMmU4YjU3JywKCSdzZWFzaGVsbCc9PicjZmZmNWVlJywKCSdzaWVubmEnPT4nI2EwNTIyZCcsCgknc2lsdmVyJz0+JyNjMGMwYzAnLAoJJ3NreWJsdWUnPT4nIzg3Y2VlYicsCgknc2xhdGVibHVlJz0+JyM2YTVhY2QnLAoJJ3NsYXRlZ3JheSc9PicjNzA4MDkwJywKCSdzbGF0ZWdyZXknPT4nIzcwODA5MCcsCgknc25vdyc9PicjZmZmYWZhJywKCSdzcHJpbmdncmVlbic9PicjMDBmZjdmJywKCSdzdGVlbGJsdWUnPT4nIzQ2ODJiNCcsCgkndGFuJz0+JyNkMmI0OGMnLAoJJ3RlYWwnPT4nIzAwODA4MCcsCgkndGhpc3RsZSc9PicjZDhiZmQ4JywKCSd0b21hdG8nPT4nI2ZmNjM0NycsCgkndHVycXVvaXNlJz0+JyM0MGUwZDAnLAoJJ3Zpb2xldCc9PicjZWU4MmVlJywKCSd3aGVhdCc9PicjZjVkZWIzJywKCSd3aGl0ZSc9PicjZmZmZmZmJywKCSd3aGl0ZXNtb2tlJz0+JyNmNWY1ZjUnLAoJJ3llbGxvdyc9PicjZmZmZjAwJywKCSd5ZWxsb3dncmVlbic9PicjOWFjZDMyJwoJKTsKCS8vc29tZSBoYXJkLWNvZGVkIGRlZmF1bHQgc3R5bGVzCgkkdGhpcy0+Y3NzID0gYXJyYXkoCgknLmJveCc9PmFycmF5KAoJCSdoZWlnaHQnPT4nNDBweCcsCgkJJ3dpZHRoJz0+JzEyMHB4JywKCQknbWFyZ2luJz0+JzNweCA1cHgnLAoJCSdwYWRkaW5nJz0+JzJweCcsCgkJJ2JhY2tncm91bmQtY29sb3InPT4nI2ZmZicsCgkJJ2JvcmRlci13aWR0aCc9PicycHgnLAoJCSdib3JkZXItY29sb3InPT4nI2YwMCcsCgkJJ2NvbG9yJz0+JyMwMDAnLAoJCSdmb250LXNpemUnPT4nOXB4JyksCgknLmJveDpub25maXJtJz0+YXJyYXkoCgkJJ2JvcmRlci1jb2xvcic9PicjMDBmJywKCQknYmFja2dyb3VuZC1jb2xvcic9PicjZmZjYjk0JyksLy9kdWxsIG9yYW5nZQoJJy5ib3g6ZmlybSc9PmFycmF5KAoJCSdib3JkZXItY29sb3InPT4nI2YwMCcsCgkJJ2JhY2tncm91bmQtY29sb3InPT4nI2I3ZThiMScpLC8vZ3JlZW4KCScuYm94OnBsYXllZCc9PmFycmF5KAoJCSdib3JkZXItY29sb3InPT4nIzAwMmM4ZicsCgkJJ2JhY2tncm91bmQtY29sb3InPT4nI2JmZDZlYycpLC8vYmx1ZQoJJy5ib3g6d2lubmVyJz0+YXJyYXkoCgkJJ2JvcmRlci1jb2xvcic9PicjODAwMDdmJywKCQknYmFja2dyb3VuZC1jb2xvcic9PicjZTViNDAwJywvL2dvbGQKCQknY29sb3InPT4nIzAwMCcpLAoJJy5jaGFydCc9PmFycmF5KAoJCSdwYWRkaW5nJz0+JzEwcHgnLAoJCSdnYXB3aWR0aCc9PicxMHB4JywKCQknYmFja2dyb3VuZC1jb2xvcic9PicjZmZmN2VkJywvL29mZi13aGl0ZQoJCSdmb250LWZhbWlseSc9PidzYW5zJywKCQknbWluaGVpZ2h0Jz0+JzUyNnB0JywgLy9BNCBsYW5kc2NhcGUKCQknbWlud2lkdGgnPT4nNzcwcHQnKSwKCScubGluZSc9PmFycmF5KAoJCSd3aWR0aCc9PicycHgnLAoJCSdjb2xvcic9PicjMDA4MDAwJykKCSk7CgkvL3JlcGxhY2UgZGVmYXVsdHMgZnJvbSBmaWxlLCBpZiBwb3NzaWJsZQoJJGNzc3BhdGggPSBjbXNfam9pbl9wYXRoKGRpcm5hbWUoZGlybmFtZShfX0ZJTEVfXykpLCdjc3MnLCdjaGFydC5jc3MnKTsKCWlmKGZpbGVfZXhpc3RzKCRjc3NwYXRoKSkKCQlzZWxmOjpQYXJzZSgkY3NzcGF0aCk7Cgl9CgoJZnVuY3Rpb24gQWRkKCRrZXksJGNvZGVzdHIpIHsKCQlwYXJlbnQ6OkFkZCgka2V5LCRjb2Rlc3RyKTsKCQkkbGMgPSBzdHJ0b2xvd2VyKCRjb2Rlc3RyKTsKCQlmb3JlYWNoKGFycmF5KCdjb2xvcicsJ2JhY2tncm91bmQtY29sb3InLCdib3JkZXItY29sb3InLCdvdXRsaW5lLWNvbG9yJykgYXMgJG5hbWUpIHsKCQkJaWYoc3RycG9zKCRjb2Rlc3RyLCRuYW1lKSE9PUZBTFNFKSB7CgkJCQkkdmFsID0gJHRoaXMtPkdldCgka2V5LCRuYW1lKTsKCQkJCWlmKCR2YWwgJiYgb3JkKCR2YWwpICE9IDM1ICYmIGlzc2V0KCR0aGlzLT5jb2xvcnNbJHZhbF0pKSB7CgkJCQkJJGhleCA9ICR0aGlzLT5jb2xvcnNbJHZhbF07CgkJCQkJaWYoJGhleCkgcGFyZW50OjpBZGQoJGtleSwkbmFtZS4nOicuJGhleCk7CgkJCQl9CgkJCX0KCQl9Cgl9CgoJZnVuY3Rpb24gUGFyc2VTdHIoJHN0ciwkY2xlYXI9RkFMU0UpIHsKCQlpZighJGNsZWFyKSAkc2F2ZSA9ICR0aGlzLT5jc3M7CgkJJHJldCA9IHBhcmVudDo6UGFyc2VTdHIoJHN0cik7CgkJaWYoISgkcmV0IHx8ICRjbGVhcikpCgkJCSR0aGlzLT5jc3MgPSAkc2F2ZTsKCQlyZXR1cm4gJHJldDsKCX0KCglmdW5jdGlvbiBQYXJzZSgkZmlsZW5hbWUsJGNsZWFyPUZBTFNFKSB7CgkJaWYoISRjbGVhcikgJHNhdmUgPSAkdGhpcy0+Y3NzOwoJCSRyZXQgPSBwYXJlbnQ6OlBhcnNlKCRmaWxlbmFtZSk7CgkJaWYoISgkcmV0IHx8ICRjbGVhcikpCgkJCSR0aGlzLT5jc3MgPSAkc2F2ZTsKCQlyZXR1cm4gJHJldDsKCX0KCglmdW5jdGlvbiBHZXRXaXRoRGVmYXVsdCgka2V5LCRwcm9wZXJ0eSwkZGVmYXVsdCkgewoJCSRrZXkgPSBzdHJfcmVwbGFjZSgnICcsJycsJGtleSk7CgkJJHJlc3VsdCA9ICR0aGlzLT5HZXQoJGtleSwkcHJvcGVydHkpOwoJCWlmKCRyZXN1bHQpCgkJCXJldHVybiAkcmVzdWx0OwoJCS8vc3BlY2lhbCBjYXNlcwoJCWlmKHN1YnN0cigkcHJvcGVydHksMCw1KSA9PSAnZm9udC0nKSB7CgkJCSRyZXN1bHQgPSAkdGhpcy0+cGFyc2Vmb250KCRrZXksJHByb3BlcnR5KTsKCQkJaWYoJHJlc3VsdCkKCQkJCXJldHVybiAkcmVzdWx0OwoJCX0KCQllbHNlaWYoc3Vic3RyKCRwcm9wZXJ0eSwwLDcpID09ICdib3JkZXItJykgewoJCQkkcmVzdWx0ID0gJHRoaXMtPnBhcnNlYm9yZGVyKCRrZXksJHByb3BlcnR5KTsKCQkJaWYoJHJlc3VsdCkKCQkJCXJldHVybiAkcmVzdWx0OwoJCX0KCQlzd2l0Y2goJGtleSkgewoJCSBjYXNlICcuYm94Om5vbmZpcm0nOgoJCSBjYXNlICcuYm94OmZpcm0nOgoJCSBjYXNlICcuYm94OnBsYXllZCc6CgkJIGNhc2UgJy5ib3g6d2lubmVyJzoKCQkJJHJlc3VsdCA9ICR0aGlzLT5HZXQoJy5ib3gnLCRwcm9wZXJ0eSk7CgkJCWlmKCRyZXN1bHQpCgkJCQlyZXR1cm4gJHJlc3VsdDsKCQkJaWYoc3Vic3RyKCRwcm9wZXJ0eSwwLDUpID09ICdmb250LScpIHsKCQkJCSRyZXN1bHQgPSAkdGhpcy0+cGFyc2Vmb250KCcuYm94JywkcHJvcGVydHkpOwoJCQkJaWYoJHJlc3VsdCkKCQkJCQlyZXR1cm4gJHJlc3VsdDsKCQkJfQoJCQllbHNlaWYoc3Vic3RyKCRwcm9wZXJ0eSwwLDcpID09ICdib3JkZXItJykgewoJCQkJJHJlc3VsdCA9ICR0aGlzLT5wYXJzZWJvcmRlcignLmJveCcsJHByb3BlcnR5KTsKCQkJCWlmKCRyZXN1bHQpCgkJCQkJcmV0dXJuICRyZXN1bHQ7CgkJCX0KCQl9CgkJJHJlc3VsdCA9ICR0aGlzLT5HZXQoJy5jaGFydCcsJHByb3BlcnR5KTsKCQlpZigkcmVzdWx0KQoJCQlyZXR1cm4gJHJlc3VsdDsKCQlpZihzdWJzdHIoJHByb3BlcnR5LDAsNSkgPT0gJ2ZvbnQtJykgewoJCQkkcmVzdWx0ID0gJHRoaXMtPnBhcnNlZm9udCgnLmNoYXJ0JywkcHJvcGVydHkpOwoJCQlpZigkcmVzdWx0KQoJCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJCS8vbm8gYm9yZGVyIHByb3BlcnRpZXMgZm9yIC5jaGFydAoJCXJldHVybiAkZGVmYXVsdDsKCX0KCglmdW5jdGlvbiBHZXRTaWRlKCRrZXksJHR5cGUsJHNpZGUpIHsKCQkkc3ogPSAkdGhpcy0+R2V0KCRrZXksJHR5cGUuJy0nLiRzaWRlKTsKCQlpZigkc3ogIT0gJycpCgkJCSRzeiA9ICR0aGlzLT5weHNpemUoJHN6KTsKCQllbHNlIHsKCQkJJHN6ID0gJHRoaXMtPkdldCgka2V5LCR0eXBlKTsKCQkJaWYoJHN6ICE9ICcnKSB7CgkJCQkkc2lkZXMgPSBwcmVnX3NwbGl0KCcvXHMrLycsJHN6KTsKCQkJCXN3aXRjaChjb3VudCgkc2lkZXMpKSB7CgkJCQkgY2FzZSAxOgoJCQkJCSRzeiA9ICR0aGlzLT5weHNpemUoJHN6KTsKCQkJCSAJYnJlYWs7CgkJCQkgY2FzZSAyOgoJCQkJCXN3aXRjaCgkc2lkZSkgewoJCQkJCSBjYXNlICdib3R0b20nOgoJCQkJCSBjYXNlICd0b3AnOgoJCQkJCQkkc3ogPSAkdGhpcy0+cHhzaXplKCRzaWRlc1swXSk7CgkJCQkJCWJyZWFrOwoJCQkJCSBjYXNlICdsZWZ0JzoKCQkJCQkgY2FzZSAncmlnaHQnOgoJCQkJCQkkc3ogPSAkdGhpcy0+cHhzaXplKCRzaWRlc1sxXSk7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQlicmVhazsKCQkJCSBjYXNlIDQ6CgkJCQkJc3dpdGNoKCRzaWRlKSB7CgkJCQkJIGNhc2UgJ3RvcCc6CgkJCQkJCSRzeiA9ICR0aGlzLT5weHNpemUoJHNpZGVzWzBdKTsKCQkJCQkJYnJlYWs7CgkJCQkJIGNhc2UgJ3JpZ2h0JzoKCQkJCQkJJHN6ID0gJHRoaXMtPnB4c2l6ZSgkc2lkZXNbMV0pOwoJCQkJCQlicmVhazsKCQkJCQkgY2FzZSAnYm90dG9tJzoKCQkJCQkJJHN6ID0gJHRoaXMtPnB4c2l6ZSgkc2lkZXNbMl0pOwoJCQkJCQlicmVhazsKCQkJCQkgY2FzZSAnbGVmdCc6CgkJCQkJCSRzeiA9ICR0aGlzLT5weHNpemUoJHNpZGVzWzNdKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJIGRlZmF1bHQ6CgkJCQkJJHN6ID0gMDsKCQkJCX0KCQkJfQoJCQllbHNlCgkJCQkkc3ogPSAwOwoJCX0KCQlyZXR1cm4gJHN6OwoJfQoKCWZ1bmN0aW9uIHB4c2l6ZSgkc2l6ZXN0cikgewoJCWlmKCRzaXplc3RyKSB7CgkJCS8vdmFyaW91cyBoYWNrcwoJCQlpZihzdHJpc3RyKCRzaXplc3RyLCdzbWFsbCcpIT09RkFMU0UpCgkJCQlyZXR1cm4gODsKCQkJaWYoc3RyaXN0cigkc2l6ZXN0ciwnbGFyZ2UnKSE9PUZBTFNFKQoJCQkJcmV0dXJuIDIwOwoJCQkkbnVtID0gcHJlZ19yZXBsYWNlKCcvW15cZC5dLycsJycsJHNpemVzdHIpOwoJCQlpZihzdHJpc3RyKCRzaXplc3RyLCdwdCcpIT09RkFMU0UpCgkJCQlyZXR1cm4gJG51bSAqIDk2LzcyOwoJCQllbHNlaWYoc3RyaXN0cigkc2l6ZXN0ciwnZW0nKSE9PUZBTFNFKQoJCQkJcmV0dXJuICRudW0gKiAxNjsKCQkJcmV0dXJuICRudW07CgkJfQoJCXJldHVybiAwOwoJfQoKCWZ1bmN0aW9uIGhleDJyZ2IoJGhleCkgewoJCWlmKCRoZXggPT09IEZBTFNFKSByZXR1cm4gRkFMU0U7CgkJaWYoaXNfYXJyYXkoJGhleCkpIHJldHVybiAkaGV4OwoJCSRjb2xvciA9IHRyaW0oc3RyX3JlcGxhY2UoJyMnLCcnLCRoZXgpKTsKCQlzd2l0Y2goc3RybGVuKCRjb2xvcikpIHsKCQkgY2FzZSAxOgoJCSAgICRyID0gaGV4ZGVjKCRjb2xvci4kY29sb3IpOwoJCSAgICRyZ2IgPSBhcnJheSgkciwkciwkcik7CgkJICAgYnJlYWs7CgkJIGNhc2UgMzoKCQkgICAkciA9IHN1YnN0cigkY29sb3IsMCwxKTsKCQkgICAkZyA9IHN1YnN0cigkY29sb3IsMSwxKTsKCQkgICAkYiA9IHN1YnN0cigkY29sb3IsMiwxKTsKCQkgICAkcmdiID0gYXJyYXkoaGV4ZGVjKCRyLiRyKSxoZXhkZWMoJGcuJGcpLGhleGRlYygkYi4kYikpOwoJCSAgIGJyZWFrOwoJCSBjYXNlIDY6CgkJICAkcmdiID0gYXJyYXkoCgkJICAgaGV4ZGVjKHN1YnN0cigkY29sb3IsMCwyKSksCgkJICAgaGV4ZGVjKHN1YnN0cigkY29sb3IsMiwyKSksCgkJICAgaGV4ZGVjKHN1YnN0cigkY29sb3IsNCwyKSkpOwoJCSAgIGJyZWFrOwoJCSBjYXNlIDEyOgoJCSAgJHJnYiA9IGFycmF5KAoJCSAgIGhleGRlYyhzdWJzdHIoJGNvbG9yLDAsNCkpLzI1NiwKCQkgICBoZXhkZWMoc3Vic3RyKCRjb2xvciw0LDQpKS8yNTYsCgkJICAgaGV4ZGVjKHN1YnN0cigkY29sb3IsOCw0KSkvMjU2KTsKCQkgICBicmVhazsKCQkgZGVmYXVsdDoKCQkgICRyZ2IgPSBhcnJheSgwLDAsMCk7CgkJfQoJCXJldHVybiAkcmdiOwoJfQoJCglmdW5jdGlvbiBwYXJzZWZvbnQoJGtleSwkcHJvcGVydHkpCgl7CgkJJHJlc3VsdCA9ICR0aGlzLT5HZXQoJGtleSwnZm9udCcpOwoJCWlmKCRyZXN1bHQpIHsKCQkJJHBhcnRzID0gcHJlZ19zcGxpdCgnL1xzKy8nLCRyZXN1bHQsNSk7CgkJCXN3aXRjaChzdHJ0b2xvd2VyKHN1YnN0cigkcHJvcGVydHksNSkpKSB7CgkJCSBjYXNlICdzdHlsZSc6CgkJCSAJJGkgPSAwOwoJCQkgCWJyZWFrOwoJCQkgY2FzZSAndmFyaWFudCc6CgkJCSAJJGkgPSAxOwoJCQkgCWJyZWFrOwoJCQkgY2FzZSAnd2VpZ2h0JzoKCQkJIAkkaSA9IDI7CgkJCSAJYnJlYWs7CgkJCSBjYXNlICdzaXplJzoKCQkJIAkkaSA9IDM7CgkJCSAJYnJlYWs7CgkJCSBjYXNlICdmYW1pbHknOgoJCQkgCSRpID0gNDsKCQkJIAlicmVhazsKCQkJIGRlZmF1bHQ6CgkJCSAJcmV0dXJuICcnOwoJCQl9CgkJCWlmKCFlbXB0eSgkcGFydHNbJGldKSkKCQkJCXJldHVybiAkcGFydHNbJGldOwoJCX0KCQlyZXR1cm4gJyc7Cgl9CgkKCWZ1bmN0aW9uIHBhcnNlYm9yZGVyKCRrZXksJHByb3BlcnR5KQoJewoJCSRyZXN1bHQgPSAkdGhpcy0+R2V0KCRrZXksJ2JvcmRlcicpOwoJCWlmKCRyZXN1bHQpIHsKCQkJJHBhcnRzID0gcHJlZ19zcGxpdCgnL1xzKy8nLCRyZXN1bHQsMyk7CgkJCXN3aXRjaChzdHJ0b2xvd2VyKHN1YnN0cigkcHJvcGVydHksNykpKSB7CgkJCS8vVE9ETyBjYXNlICdbc2lkZV0tW2NvbG9yfHN0eWxlfHdpZHRoXSc6CgkJCSBjYXNlICd3aWR0aCc6CgkJCQlmb3JlYWNoKCRwYXJ0cyBhcyAkdmFsKSB7CgkJCQkJaWYgKHByZWdfbWF0Y2goCgknLygoWystXT9cZCpcLj9cZCtccyoocHh8ZW18ZXh8cHR8cGN8bW18Y218aW4pPyl8dGhpbnxtZWRpdW18dGhpY2spL2knLAoJCQkJCSR2YWwpKQoJCQkJCQlyZXR1cm4gJHZhbDsKCQkJCX0KCQkJIAlicmVhazsKCQkJIGNhc2UgJ3N0eWxlJzoKCQkJIAkkdmFsaWQgPSBhcnJheSgnc29saWQnLCdkb3R0ZWQnLCdkYXNoZWQnLCdkb3VibGUnLCdncm9vdmUnLCdyaWRnZScsJ2luc2V0Jywnb3V0c2V0Jywnbm9uZScsJ2hpZGRlbicpOwoJCQkJZm9yZWFjaCgkcGFydHMgYXMgJHZhbCkgewoJCQkJCWlmKGluX2FycmF5KCR2YWwsJHZhbGlkKSkKCQkJCQkJcmV0dXJuICR2YWw7CgkJCQl9CgkJCSAJYnJlYWs7CgkJCSBjYXNlICdjb2xvcic6CgkJCQlmb3JlYWNoKCRwYXJ0cyBhcyAkdmFsKSB7CgkJCQkgCWlmKG9yZCgkdmFsKSA9PSAzNSB8fCBpc3NldCgkdGhpcy0+Y29sb3JzWyR2YWxdKSkKCQkJCQkJcmV0dXJuICR2YWw7CgkJCQl9CgkJCSBkZWZhdWx0OgoJCQkgCXJldHVybiAnJzsKCQkJfQoJCX0KCQlyZXR1cm4gJyc7Cgl9Cn0KPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/class.tmtTweet.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0KEMpIDIwMTQtMjAxNSBUb20gUGhhbmUgPHRwZ3d3QG9uZXBvc3QubmV0PgpSZWZlciB0byBsaWNlbmNlIGFuZCBvdGhlciBkZXRhaWxzIGF0IHRoZSB0b3Agb2YgZmlsZSBUb3VybmV5Lm1vZHVsZS5waHAKTW9yZSBpbmZvIGF0IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvdG91cm5leQoKRnVuY3Rpb25zIGludm9sdmVkIHdpdGggdHdpdHRlciBjb21tdW5pY2F0aW9ucwpUaGlzIGNsYXNzIGlzIG5vdCBzdWl0YWJsZSBmb3Igc3RhdGljIG1ldGhvZC1jYWxsaW5nCiovCmNsYXNzIHRtdFR3ZWV0CnsKCXByaXZhdGUgJHR3dDsKCS8vZGV0YWlscyBmb3IgZGVmYXVsdCB0d2l0dGVyIGFwcGxpY2F0aW9uOiBDTVNNUyBUb3VybmV5TW9kdWxlLCBvd25lZCBieSBAQ01TTVNUb3VybmV5Cglwcml2YXRlICRhcGlfa2V5ID0gJ0puVUw5QVUxUnhPVzh4SWpyQlhlWmZUbnInOwoJcHJpdmF0ZSAkYXBpX3NlY3JldCA9ICdNVVZRTVVKNlpHWldNR2MxVEdoWWFVOVhia2swYTJ0WGFrSmlPVGhGVTJoek9GRlJNVzVDYTNKWVZGSnJXVVZFUlZVPSc7IAoJcHJpdmF0ZSAkYWNjZXNzX3Rva2VuID0gJzI0MjYyNTk0MzQtNjRBRGZrY0VLZ3lVcjFCTDYzSElQTE9kQ2JnbWtNNlpqZHQ1NXRwJzsKCXByaXZhdGUgJGFjY2Vzc19zZWNyZXQgPSAnYkVGNVIzQnFRekJPUTJsVWFuVjNRVkJ0UVVKVE9XTlRTak5OV25ZeFdETjJVa0ZTZURkSFZETnVTRmRTJzsKCglmdW5jdGlvbiBNb2R1bGVBcHBUb2tlbnMoKQoJewoJCXJldHVybiBhcnJheSgkdGhpcy0+YXBpX2tleSxiYXNlNjRfZGVjb2RlKCR0aGlzLT5hcGlfc2VjcmV0KSk7Cgl9CgoJLyoqCglHZXRUb2tlbnM6CglAYnJhY2tldF9pZDogYnJhY2tldCBpZGVudGlmaWVyCglAZXhhY3Q6IGJvb2xlYW4sIHdoZXRoZXIgdG8gcmV2ZXJ0IHRvIGNvZGVzIGZvciBDTVNNU1RvdXJuZXksIG9wdGlvbmFsCglAdGVzdDogYm9vbGVhbiwgd2hldGhlciB0byByZXR1cm4gVFJVRSBvciBhcnJheSBvZiBjb2Rlcywgb3B0aW9uYWwKCVJldHVybnM6IGFzc29jaWF0aXZlIGFycmF5IG9mIFR3aXR0ZXIgYWNjZXNzIGNvZGVzLCBvciBGQUxTRQoJKi8KCWZ1bmN0aW9uIEdldFRva2VucygkYnJhY2tldF9pZCwkZXhhY3Q9RkFMU0UsJHRlc3Q9RkFMU0UpCgl7CgkJJHByZWYgPSBjbXNfZGJfcHJlZml4KCk7CgkJJGRiID0gY21zbXMoKS0+R2V0REIoKTsKCQkkc3FsID0gJ1NFTEVDVCB0d3Rmcm9tIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9icmFja2V0cyBXSEVSRSBicmFja2V0X2lkPT8nOwoJCSRoYW5kbGUgPSAkZGItPkdldE9uZSgkc3FsLGFycmF5KCRicmFja2V0X2lkKSk7CgkJaWYoJGhhbmRsZSkKCQl7CgkJCWlmKCRoYW5kbGVbMF0gIT0gJ0AnKQoJCQkJJGhhbmRsZSA9ICdAJy4kaGFuZGxlOwoJCQlpZighc2VsZjo6VmFsaWRhdGVBZGRyZXNzKCRoYW5kbGUpKQoJCQkJcmV0dXJuIEZBTFNFOwoJCQlpZigkaGFuZGxlICE9ICdAQ01TTVNUb3VybmV5JykKCQkJewoJCQkJJHNxbCA9ICdTRUxFQ1QgRElTVElOQ1QgYnJhY2tldF9pZCxwdWJ0b2tlbixwcml2dG9rZW4gRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X3R3ZWV0IFdIRVJFIGhhbmRsZT0/IEFORCBicmFja2V0X2lkIElOICg/LDApJzsKCQkJCSRjaG9pY2VzID0gJGRiLT5HZXRBc3NvYygkc3FsLGFycmF5KCRoYW5kbGUsJGJyYWNrZXRfaWQpKTsKCQkJCWlmKCEkY2hvaWNlcykKCQkJCQlyZXR1cm4gRkFMU0U7CgkJCQlpZigkdGVzdCkKCQkJCQlyZXR1cm4gVFJVRTsKCQkJCWlmKCFpc3NldCgkY2hvaWNlc1skYnJhY2tldF9pZF0pKQoJCQkJCSRicmFja2V0X2lkID0gMDsKCQkJCSRhcHViID0gJGNob2ljZXNbJGJyYWNrZXRfaWRdWydwdWJ0b2tlbiddOwoJCQkJJGFwcml2ID0gYmFzZTY0X2RlY29kZSgkY2hvaWNlc1skYnJhY2tldF9pZF1bJ3ByaXZ0b2tlbiddKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCWlmKCR0ZXN0KQoJCQkJCXJldHVybiBUUlVFOwoJCQkJJGFwdWIgPSAkdGhpcy0+YWNjZXNzX3Rva2VuOwoJCQkJJGFwcml2ID0gYmFzZTY0X2RlY29kZSgkdGhpcy0+YWNjZXNzX3NlY3JldCk7CgkJCX0KCQl9CgkJZWxzZWlmKCEkZXhhY3QpCgkJewoJCQlpZigkdGVzdCkKCQkJCXJldHVybiBUUlVFOwoJCQkkYXB1YiA9ICR0aGlzLT5hY2Nlc3NfdG9rZW47CgkJCSRhcHJpdiA9IGJhc2U2NF9kZWNvZGUoJHRoaXMtPmFjY2Vzc19zZWNyZXQpOwoJCX0KCQllbHNlCgkJCXJldHVybiBGQUxTRTsKCgkJJHB1YiA9ICR0aGlzLT5hcGlfa2V5OwoJCSRwcml2ID0gYmFzZTY0X2RlY29kZSgkdGhpcy0+YXBpX3NlY3JldCk7CgoJCXJldHVybiBhcnJheSAoJ2FwaV9rZXknPT4kcHViLCdhcGlfc2VjcmV0Jz0+JHByaXYsCgkJCSdhY2Nlc3NfdG9rZW4nPT4kYXB1YiwnYWNjZXNzX3NlY3JldCc9PiRhcHJpdik7Cgl9CgoJLyoqCglTYXZlVG9rZW5zOgoJU2F2ZSBUd2l0dGVyIGtleXMuCglBdCBsZWFzdCBvbmUgb2YgJGhhbmRsZSBvciBAYnJhY2tldF9pZCBtdXN0IGJlIHByb3ZpZGVkCglAcHViOiBwdWJsaWMta2V5IHRvIGJlIHNhdmVkCglAcHJpdjogcHJpdmF0ZS1rZXkgdG8gYmUgc2F2ZWQKCUBoYW5kbGU6IHR3aXR0ZXIgaGFuZGxlIChtYXliZSB3aXRob3V0IGxlYWRpbmcgJ0AnKSwgb3B0aW9uYWwKCUBicmFja2V0X2lkOiBicmFja2V0IGlkZW50aWZpZXIsIG9wdGlvbmFsCglSZXR1cm5zOiBib29sZWFuIC0gd2hldGhlciB0aGUgc2F2ZSBzdWNjZWVkZWQKCSovCglmdW5jdGlvbiBTYXZlVG9rZW5zKCRwdWIsJHByaXYsJGhhbmRsZT1GQUxTRSwkYnJhY2tldF9pZD0wKQoJewoJCWlmKCEoJGhhbmRsZSB8fCAkYnJhY2tldF9pZCkpCgkJCXJldHVybiBGQUxTRTsKCQkkcHJlZiA9IGNtc19kYl9wcmVmaXgoKTsKCQkkZGIgPSBjbXNtcygpLT5HZXREQigpOwoJCWlmKCEkaGFuZGxlKQoJCXsKCQkJJHNxbCA9ICdTRUxFQ1QgdHd0ZnJvbSBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfYnJhY2tldHMgV0hFUkUgYnJhY2tldF9pZD0/JzsKCQkJJGhhbmRsZSA9ICRkYi0+R2V0T25lKCRzcWwsYXJyYXkoJGJyYWNrZXRfaWQpKTsKCQkJaWYoISRoYW5kbGUpCgkJCQlyZXR1cm4gRkFMU0U7CgkJfQoJCWlmKCRoYW5kbGVbMF0gIT0gJ0AnKQoJCQkkaGFuZGxlID0gJ0AnLiRoYW5kbGU7CgkJaWYoIXNlbGY6OlZhbGlkYXRlQWRkcmVzcygkaGFuZGxlKSkKCQkJcmV0dXJuIEZBTFNFOwoJCSRwcml2ID0gYmFzZTY0X2VuY29kZSgkcHJpdik7IC8vbm8gcG9pbnQgaW4gbW9yZSBzb3BoaXN0aWNhdGlvbiBlLmcuIGVuY3J5cHRpb24KCQkkc3FsID0gJ1VQREFURSAnLiRwcmVmLidtb2R1bGVfdG10X3R3ZWV0IFNFVCBwdWJ0b2tlbj0/LHByaXZ0b2tlbj0/IFdIRVJFIGJyYWNrZXRfaWQ9PyBBTkQgaGFuZGxlPT8nOwoJCSRzcWwyID0gJ0lOU0VSVCBJTlRPICcuJHByZWYuJ21vZHVsZV90bXRfdHdlZXQgKGJyYWNrZXRfaWQsaGFuZGxlLHB1YnRva2VuLHByaXZ0b2tlbikKU0VMRUNUIERJU1RJTkNUID8sPyw/LD8gRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X3R3ZWV0IFdIRVJFIE5PVCBFWElTVFMKKFNFTEVDVCAxIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF90d2VldCBXSEVSRSBicmFja2V0X2lkPT8gQU5EIGhhbmRsZT0/KSc7CgkJLy9taW5pbWFsIHJhY2UtY2hhbmNlIGhlcmUKCQkkZGItPkV4ZWN1dGUoJ0JFR0lOIFRSQU5TQUNUSU9OJyk7CgkJJGRiLT5FeGVjdXRlKCRzcWwsYXJyYXkoJHB1YiwkcHJpdiwkYnJhY2tldF9pZCwkaGFuZGxlKSk7CgkJJGRiLT5FeGVjdXRlKCRzcWwyLGFycmF5KCRicmFja2V0X2lkLCRoYW5kbGUsJHB1YiwkcHJpdiwkYnJhY2tldF9pZCwkaGFuZGxlKSk7CgkJJGRiLT5FeGVjdXRlKCdDT01NSVQnKTsKCQlpZigkYnJhY2tldF9pZCkKCQl7CgkJCS8vZW5zdXJlIHNlbmRlciBpcyBjdXJyZW50CgkJCSRzcWwgPSAnVVBEQVRFICcuJHByZWYuJ21vZHVsZV90bXRfYnJhY2tldHMgU0VUIHR3dGZyb209PyBXSEVSRSBicmFja2V0X2lkPT8nOwoJCQkkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkaGFuZGxlLCRicmFja2V0X2lkKSk7CgkJfQoJCXJldHVybiBUUlVFOwoJfQoKCS8qKgoJRG9TZW5kOgoJU2VuZHMgdHdlZXQocykgYWJvdXQgYSBtYXRjaAoJQG1vZDogcmVmZXJlbmNlIHRvIGN1cnJlbnQgbW9kdWxlIG9iamVjdAoJQGNvZGVzOiBhc3NvY2lhdGl2ZSBhcnJheSBvZiA0IFR3aXR0ZXIgYWNjZXNzLWNvZGVzCglAdG86IGFycmF5IG9mIHZhbGlkYXRlZCBoYXNodGFnKHMpIGZvciByZWNpcGllbnQocykKCUB0cGw6IHNtYXJ0eSB0ZW1wbGF0ZSB0byB1c2UgZm9yIG1lc3NhZ2UgYm9keQoJUmV0dXJuczogMi1tZW1iZXIgYXJyYXkgLQoJIFswXSBGQUxTRSBpZiBubyBhZGRyZXNzZWUgb3Igbm8gdHdpdHRlciBtb2R1bGUsIG90aGVyd2lzZSBib29sZWFuIGN1bXVsYXRpdmUgcmVzdWx0IG9mIHR3dC0+U2VuZCgpCgkgWzFdICcnIG9yIGVycm9yIG1lc3NhZ2UgZS5nLiBmcm9tIHR3dC0+c2VuZCgpCgkqLwoJcHJpdmF0ZSBmdW5jdGlvbiBEb1NlbmQoJiRtb2QsJGNvZGVzLCR0bywkdHBsKQoJewoJCWlmKCEkdG8pCgkJCXJldHVybiBhcnJheShGQUxTRSwnJyk7CgkJaWYoISR0aGlzLT50d3QpCgkJewoJCQkkdGhpcy0+dHd0ID0gbmV3IFRUd2l0dGVyKCRjb2Rlc1snYXBpX2tleSddLCRjb2Rlc1snYXBpX3NlY3JldCddLAoJCQkJJGNvZGVzWydhY2Nlc3NfdG9rZW4nXSwkY29kZXNbJ2FjY2Vzc19zZWNyZXQnXSk7CgkJCWlmKCEkdGhpcy0+dHd0KQoJCQkJcmV0dXJuIGFycmF5KEZBTFNFLCRtb2QtPkxhbmcoJ2Vycl9zeXN0ZW0nKSk7CgkJIH0KCgkJJGVyciA9ICcnOwoJCSRib2R5ID0gJG1vZC0+UHJvY2Vzc0RhdGFUZW1wbGF0ZSgkdHBsKTsKCQkkbGIgPSBzdHJsZW4oJGJvZHkpOwoJCQoJCWZvcmVhY2goJHRvIGFzICRoYXNoKQoJCXsKCQkJJGxoID0gc3RybGVuKCRoYXNoKTsKCQkJaWYoJGxiKyRsaCA8PSAxMzkpCgkJCQkkbWFpbiA9ICRib2R5OwoJCQllbHNlCgkJCQkkbWFpbiA9IHN1YnN0cigkYm9keSwwLDEzOS0kbGgpOwoJCQl0cnkKCQkJewoJCQkJJHRoaXMtPnR3dC0+c2VuZCgkbWFpbi4nICcuJGhhc2gpOwoJCQl9CgkJCWNhdGNoIChUd2l0dGVyRXhjZXB0aW9uICRlKQoJCQl7CgkJCQlpZigkZXJyKSAkZXJyIC49ICc8YnIgLz4nOwoJCQkJJGVyciAuPSAkaGFzaC4nOiAnLiRlLT5nZXRNZXNzYWdlKCk7CgkJCX0KCQl9CgkJcmV0dXJuIGFycmF5KCgkZXJyPT0nJyksJGVycik7Cgl9CgoJLyoqCglHZXRUZWFtQ29udGFjdHM6CglAdGVhbV9pZDogZW51bWVyYXRvciBvZiB0ZWFtIGJlaW5nIHByb2Nlc3NlZAoJQGZpcnN0OiB3aGV0aGVyIHRvIG9ubHkgdHJ5IGZvciB0aGUgZmlyc3QgcmVsZXZhbnQgdGFnLCBvcHRpb25hbCwgZGVmYXVsdCA9IEZBTFNFCglSZXR1cm5zOiBhcnJheSBvZiB2YWxpZGF0ZWQgaGFzaHRhZ3MgKG1heWJlIGVtcHR5KSwgb3IgRkFMU0UuCgkqLwoJcHJpdmF0ZSBmdW5jdGlvbiBHZXRUZWFtQ29udGFjdHMoJHRlYW1faWQsJGZpcnN0PUZBTFNFKQoJewoJCSRkYiA9IGNtc21zKCktPkdldERiKCk7CgkJJHByZWYgPSBjbXNfZGJfcHJlZml4KCk7CgkJJHNxbCA9ICdTRUxFQ1QgbmFtZSxjb250YWN0IEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9wZW9wbGUgV0hFUkUgaWQ9PyBBTkQgZmxhZ3MhPTIgT1JERVIgQlkgZGlzcGxheW9yZGVyJzsKCQkkbWVtYmVycyA9ICRkYi0+R2V0QWxsKCRzcWwsYXJyYXkoJHRlYW1faWQpKTsKCQlpZigkbWVtYmVycykKCQl7CgkJCWlmKCEkZmlyc3QpCgkJCXsKCQkJCSRzcWwgPSAnU0VMRUNUIGNvbnRhY3RhbGwgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X3RlYW1zIFdIRVJFIHRlYW1faWQ9Pyc7CgkJCQkkYWxsID0gJGRiLT5HZXRPbmUoJHNxbCxhcnJheSgkdGVhbV9pZCkpOwoJCQkJaWYoISRhbGwpCgkJCQkJJGZpcnN0ID0gVFJVRTsKCQkJfQoJCQkkc2VuZHMgPSBhcnJheSgpOwoJCQlmb3JlYWNoKCRtZW1iZXJzIGFzICRvbmUpCgkJCXsKCQkJCSRjbGVhbiA9IHNlbGY6OlZhbGlkYXRlQWRkcmVzcygkb25lWydjb250YWN0J10pOwoJCQkJaWYoJGNsZWFuKQoJCQkJewoJCQkJCSRjbGVhblswXSA9ICcjJzsKCQkJCQkkc2VuZHNbXSA9ICRjbGVhbjsKCQkJCQlpZigkZmlyc3QpCgkJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJCXJldHVybiAkc2VuZHM7CgkJfQoJCXJldHVybiBGQUxTRTsKCX0KCgkvKioKCVZhbGlkYXRlQWRkcmVzczoKCUNoZWNrIHdoZXRoZXIgQGFkZHJlc3MgaXMgYSB2YWxpZCB0d2l0dGVyIGhhbmRsZQoJQGFkZHJlc3M6IG9uZSwgb3IgYSBjb21tYS1zZXBhcmF0ZWQgc2VyaWVzIG9mLCBhZGRyZXNzKGVzKSB0byBjaGVjawoJUmV0dXJuczogYSB0cmltbWVkIHZhbGlkIHR3aXR0ZXIgaGFuZGxlLCBvciBhcnJheSBvZiB0aGVtLCBvciBGQUxTRQoJKi8KCXB1YmxpYyBmdW5jdGlvbiBWYWxpZGF0ZUFkZHJlc3MoJGFkZHJlc3MpCgl7CgkJJHBhdHRlcm4gPSAnL15AXHd7MSwxNX0kLyc7CgkJaWYoc3RycG9zKCRhZGRyZXNzLCcsJykgPT09IEZBTFNFKQoJCXsKCQkJJGFkZHJlc3MgPSB0cmltKCRhZGRyZXNzKTsKCQkJaWYocHJlZ19tYXRjaCgkcGF0dGVybiwkYWRkcmVzcykpCgkJCQlyZXR1cm4gJGFkZHJlc3M7CgkJfQoJCWVsc2UKCQl7CgkJCSRwYXJ0cyA9IGV4cGxvZGUoJywnLCRhZGRyZXNzKTsKCQkJJGFkZHJlc3MgPSBhcnJheSgpOwoJCQlmb3JlYWNoKCRwYXJ0cyBhcyAkb25lKQoJCQl7CgkJCQkkb25lID0gdHJpbSgkb25lKTsKCQkJCWlmKHByZWdfbWF0Y2goJHBhdHRlcm4sJG9uZSkpCgkJCQkJJGFkZHJlc3NbXSA9ICRvbmU7CgkJCX0KCQkJaWYoJGFkZHJlc3MpCgkJCQlyZXR1cm4gJGFkZHJlc3M7CgkJfQoJCXJldHVybiBGQUxTRTsKCX0KCgkvKioKCU5lZWRBdXRoOgoJQGJyYWNrZXRfaWQ6IGlkZW50aWZpZXIgb2YgdGhlIGJyYWNrZXQgYmVpbmcgcHJvY2Vzc2VkCglAbWlkOiBtYXRjaCBpZGVudGlmaWVyLCBvciBhcnJheSBvZiB0aGVtCglSZXR1cm5zOiBUUlVFIGlmIHRlbXBvcmFyeSBzZW5kLWF1dGhvcml0eSBpcyBuZWVkZWQgZnJvbSBUd2l0dGVyCgkqLwoJcHVibGljIGZ1bmN0aW9uIE5lZWRBdXRoKCRicmFja2V0X2lkLCRtaWQpCgl7CgkJJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCQkkcHJlZiA9IGNtc19kYl9wcmVmaXgoKTsKCQkkc3FsID0gJ1NFTEVDVCB0d3Rmcm9tIEZST00gJy4kcHJlZi4ndG10X21vZHVsZV9icmFja2V0cyBXSEVSRSBicmFja2V0X2lkPT8nOwoJCSRzb3VyY2UgPSAkZGItPkdldE9uZSgkc3FsLGFycmF5KCRicmFja2V0X2lkKSk7CgkJaWYoISRzb3VyY2UgfHwgIXNlbGY6OlZhbGlkYXRlQWRkcmVzcygkc291cmNlKSkKCQkJcmV0dXJuIEZBTFNFOwoJCSRzcWwgPSAnU0VMRUNUIHRlYW1BLHRlYW1CIEZST00gJy4kcHJlZi4ndG10X21vZHVsZV9tYXRjaGVzIFdIRVJFIG1hdGNoX2lkJzsKCQlpZighaXNfYXJyYXkoJG1pZCkpCgkJewoJCQkkbWlkID0gYXJyYXkoJG1pZCk7CgkJCSRzcWwgLj0gJz0/JzsKCQl9CgkJZWxzZQoJCQkkc3FsIC49ICcgSU4gKCcuc3RyX3JlcGVhdCgnPywnLGNvdW50KCRtaWRzKS0xKS4nPyknOwoJCSR0ZWFtcyA9ICRkYi0+R2V0QWxsKCRzcWwsJG1pZCk7CgkJZm9yZWFjaCgkdGVhbXMgYXMgJG10ZWFtKQoJCXsKCQkJJHRpZCA9IChpbnQpJG10ZWFtWyd0ZWFtQSddOwoJCQlpZigkdGlkID4gMCAmJiBzZWxmOjpHZXRUZWFtQ29udGFjdHMoJHRpZCkpCgkJCQlyZXR1cm4gVFJVRTsKCQkJJHRpZCA9IChpbnQpJG10ZWFtWyd0ZWFtQiddOwoJCQlpZigkdGlkID4gMCAmJiBzZWxmOjpHZXRUZWFtQ29udGFjdHMoJHRpZCkpCgkJCQlyZXR1cm4gVFJVRTsKCQl9CgkJcmV0dXJuIEZBTFNFOwoJfQoKCS8qKgoJVGVsbE93bmVyOgoJU2VuZHMgdHdlZXQgdG8gdG91cm5hbWVudCBvd25lciBpZiBwb3NzaWJsZSwgYW5kIHRoZW4gdG8gb25lIG1lbWJlciBvZiBib3RoIHRlYW1zIGluIHRoZSBtYXRjaAoJQG1vZDogcmVmZXJlbmNlIHRvIGN1cnJlbnQgbW9kdWxlIG9iamVjdAoJQHNtYXJ0eTogcmVmZXJlbmNlIHRvIENNU01TIHNtYXJ0eSBvYmplY3QKCUBiZGF0YTogcmVmZXJlbmNlIHRvIGFycmF5IG9mIGJyYWNrZXQtdGFibGUgZGF0YQoJQG1kYXRhOiByZWZlcmVuY2UgdG8gYXJyYXkgb2YgbWF0Y2ggZGF0YSAoZnJvbSB3aGljaCB3ZSBuZWVkICd0ZWFtQScsICd0ZWFtQicpCglAbGluZXM6IGFycmF5IG9mIGxpbmVzIGZvciBtZXNzYWdlIGJvZHkKCVJldHVybnM6IDItbWVtYmVyIGFycmF5IC0KCSBbMF0gVFJVRXxGQUxTRSByZXByZXNlbnRpbmcgc3VjY2VzcwoJIFsxXSAnJyBvciBzcGVjaWZpYyBmYWlsdXJlIG1lc3NhZ2UKCSovCglwdWJsaWMgZnVuY3Rpb24gVGVsbE93bmVyKCYkbW9kLCYkc21hcnR5LCYkYmRhdGEsJiRtZGF0YSwkbGluZXMpCgl7CgkJLy9vd25lcgoJCSRjbGVhbiA9IHNlbGY6OlZhbGlkYXRlQWRkcmVzcygkYmRhdGFbJ2NvbnRhY3QnXSk7CgkJaWYoJGNsZWFuKQoJCXsKCQkJJGNsZWFuWzBdID0gJyMnOwoJCQkkdG8gPSBhcnJheSgkY2xlYW4pOwoJCX0KCQllbHNlCgkJCXJldHVybiBhcnJheShGQUxTRSwnJyk7IC8vc2lsZW50LCB0cnkgYW5vdGhlciBjaGFubmVsCgkJJHRva2VucyA9IHNlbGY6OkdldFRva2VucygkYmRhdGFbJ2JyYWNrZXRfaWQnXSk7CgkJaWYoISR0b2tlbnMpCgkJCXJldHVybiBhcnJheShGQUxTRSwkbW9kLT5MYW5nKCdsYWNrcGVybWlzc2lvbicpKTsKCQkvL3RlYW1zCgkJJHRpZCA9IChpbnQpJG1kYXRhWyd0ZWFtQSddOwoJCWlmKCR0aWQgPiAwKQoJCXsKCQkJJG1vcmUgPSBzZWxmOjpHZXRUZWFtQ29udGFjdHMoJHRpZCxUUlVFKTsKCQkJaWYoJG1vcmUpCgkJCQkkdG8gPSBhcnJheV9tZXJnZSgkdG8sJG1vcmUpOwoJCX0KCQkkdGlkID0gKGludCkkbWRhdGFbJ3RlYW1CJ107CgkJaWYoJHRpZCA+IDApCgkJewoJCQkkbW9yZSA9IHNlbGY6OkdldFRlYW1Db250YWN0cygkdGlkLFRSVUUpOwoJCQlpZigkbW9yZSkKCQkJCSR0byA9IGFycmF5X21lcmdlKCR0bywkbW9yZSk7CgkJfQoJCS8vc3VibWl0dGVkIGRhdGEKCQkkc21hcnR5LT5hc3NpZ24oJ3JlcG9ydCcsaW1wbG9kZSgnICcsJGxpbmVzKSk7CgoJCSR0cGwgPSAkbW9kLT5HZXRUZW1wbGF0ZSgndHdlZXRpbl8nLiRiZGF0YVsnYnJhY2tldF9pZCddLidfdGVtcGxhdGUnKTsKCQlpZigkdHBsID09IEZBTFNFKQoJCQkkdHBsID0gJG1vZC0+R2V0VGVtcGxhdGUoJ3R3ZWV0aW5fZGVmYXVsdF90ZW1wbGF0ZScpOwoJCXJldHVybiBzZWxmOjpEb1NlbmQoJG1vZCwkdG9rZW5zLCR0bywkdHBsKTsKCX0KCQoJLyoqCglUZWxsVGVhbXM6CglTZW5kcyB0d2VldCB0byBvbmUgb3IgYWxsIG1lbWJlcnMgb2YgYm90aCB0ZWFtcyBpbiB0aGUgbWF0Y2gsIHBsdXMgdGhlIG93bmVyCglAbW9kOiByZWZlcmVuY2UgdG8gY3VycmVudCBtb2R1bGUgb2JqZWN0CglAc21hcnR5OiByZWZlcmVuY2UgdG8gQ01TTVMgc21hcnR5IG9iamVjdAoJQGJkYXRhOiByZWZlcmVuY2UgdG8gYXJyYXkgb2YgYnJhY2tldC10YWJsZSBkYXRhCglAbWRhdGE6IHJlZmVyZW5jZSB0byBhcnJheSBvZiBtYXRjaCBkYXRhIChmcm9tIHdoaWNoIHdlIG5lZWQgJ3RlYW1BJywgJ3RlYW1CJykKCUB0cGw6IGVudW0gZm9yIHR5cGUgb2YgbWVzc2FnZTogMSA9IGFubm91bmNlbWVudCwgMiA9IGNhbmNlbGxhdGlvbiwgMyA9IHNjb3JlLXJlcXVlc3QKCUBmaXJzdDogVFJVRSB0byBzZW5kIG9ubHkgdG8gZmlyc3QgcmVjb2duaXNlZCBhZGRyZXNzLCBGQUxTRSB0byBzZW5kIHBlcgoJCXRoZSB0ZWFtcycgcmVzcGVjdGl2ZSBjb250YWN0YWxsIHNldHRpbmdzLCBvcHRpb25hbCwgZGVmYXVsdCBGQUxTRQoJUmV0dXJuczogMi1tZW1iZXIgYXJyYXkgLQoJIFswXSBUUlVFfEZBTFNFIHJlcHJlc2VudGluZyBzdWNjZXNzLCBvciBUUlVFIGlmIG5vYm9keSB0byBzZW5kIHRvCgkgWzFdICcnIG9yIHNwZWNpZmljIGZhaWx1cmUgbWVzc2FnZQoJKi8KCXB1YmxpYyBmdW5jdGlvbiBUZWxsVGVhbXMoJiRtb2QsJiRzbWFydHksJiRiZGF0YSwmJG1kYXRhLCR0cGwsJGZpcnN0PUZBTFNFKQoJewoJCXN3aXRjaCgkdHBsKQoJCXsKCQkgY2FzZSAxOgoJCQkkdHBsID0gJG1vZC0+R2V0VGVtcGxhdGUoJ3R3ZWV0b3V0XycuJGJkYXRhWydicmFja2V0X2lkJ10uJ190ZW1wbGF0ZScpOwoJCQlpZigkdHBsID09IEZBTFNFKQoJCQkJJHRwbCA9ICRtb2QtPkdldFRlbXBsYXRlKCd0d2VldG91dF9kZWZhdWx0X3RlbXBsYXRlJyk7CgkJCWJyZWFrOwoJCSBjYXNlIDI6CgkJCSR0cGwgPSAkbW9kLT5HZXRUZW1wbGF0ZSgndHdlZXRjYW5jZWxfJy4kYmRhdGFbJ2JyYWNrZXRfaWQnXS4nX3RlbXBsYXRlJyk7CgkJCWlmKCR0cGwgPT0gRkFMU0UpCgkJCQkkdHBsID0gJG1vZC0+R2V0VGVtcGxhdGUoJ3R3ZWV0Y2FuY2VsX2RlZmF1bHRfdGVtcGxhdGUnKTsKCQkJYnJlYWs7CgkJIGNhc2UgMzoKCQkJJHRwbCA9ICRtb2QtPkdldFRlbXBsYXRlKCd0d2VldHJlcXVlc3RfJy4kYmRhdGFbJ2JyYWNrZXRfaWQnXS4nX3RlbXBsYXRlJyk7CgkJCWlmKCR0cGwgPT0gRkFMU0UpCgkJCQkkdHBsID0gJG1vZC0+R2V0VGVtcGxhdGUoJ3R3ZWV0cmVxdWVzdF9kZWZhdWx0X3RlbXBsYXRlJyk7CgkJCWJyZWFrOwoJCX0KCgkJJG93bmVyID0gc2VsZjo6VmFsaWRhdGVBZGRyZXNzKCRiZGF0YVsnY29udGFjdCddKTsKCQlpZigkb3duZXIpCgkJCSRvd25lclswXSA9ICcjJzsKCQkkdG9rZW5zID0gc2VsZjo6R2V0VG9rZW5zKCRiZGF0YVsnYnJhY2tldF9pZCddKTsKCQkkZXJyID0gJyc7CgkJJHJlc0EgPSBUUlVFOyAvL3dlJ3JlIG9rIGlmIG5vdGhpbmcgc2VudAoJCSR0aWQgPSAoaW50KSRtZGF0YVsndGVhbUEnXTsKCQlpZigkdGlkID4gMCkKCQl7CgkJCSR0byA9IHNlbGY6OkdldFRlYW1Db250YWN0cygkdGlkLCRmaXJzdCk7CgkJCWlmKCR0bykKCQkJewoJCQkJaWYoJHRva2VucykKCQkJCXsKCQkJCQlyZXNldCgkdG8pOwoJCQkJCSRzbWFydHktPmFzc2lnbigncmVjaXBpZW50JyxrZXkoJHRvKSk7CgkJCQkJJHRjID0gY291bnQoJHRvKTsKCQkJCQkkdG9hbGwgPSAoKCRiZGF0YVsndGVhbXNpemUnXSA8IDIgJiYgJHRjID4gMCkgfHwgJHRjID4gMSk7CgkJCQkJJHNtYXJ0eS0+YXNzaWduKCd0b2FsbCcsJHRvYWxsKTsKCQkJCQlpZiAoKGludCkkbWRhdGFbJ3RlYW1CJ10gPiAwKQoJCQkJCQkkb3AgPSAkbW9kLT5UZWFtTmFtZSgkbWRhdGFbJ3RlYW1CJ10pOwoJCQkJCWVsc2UKCQkJCQl7Ci8qCQkJCQlzd2l0Y2goJGJkYXRhWyd0eXBlJ10pCgkJCQkJCXsKCQkJCQkJIGNhc2UgVG91cm5leTo6S09UWVBFOgoJCQkJCQkJJG9wID0gJG1vZC0+TGFuZygnYW5vbndpbm5lcicpOwoJCQkJCQkJYnJlYWs7CgkJCQkJCSBkZWZhdWx0OgoJCQkJCQkJJG9wID0gJG1vZC0+TGFuZygnYW5vbm90aGVyJyk7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoqLwoJCQkJCQkkb3AgPSAnJzsKCQkJCQl9CgkJCQkJJHNtYXJ0eS0+YXNzaWduKCdvcHBvbmVudCcsJG9wKTsKCQkJCQlpZigkb3duZXIpCgkJCQkJCSR0b1tdID0gJG93bmVyOwoJCQkJCWxpc3QoJHJlc0EsJG1zZykgPSBzZWxmOjpEb1NlbmQoJG1vZCwkdG9rZW5zLCR0bywkdHBsKTsKCQkJCQlpZighJHJlc0EpCgkJCQkJewoJCQkJCQlpZighJG1zZykKCQkJCQkJCSRtc2cgPSAkbW9kLT5MYW5nKCdlcnJfbm90aWNlJyk7CgkJCQkJCSRlcnIgLj0gJG1vZC0+VGVhbU5hbWUoJHRpZCkuJzogJy4kbXNnOwoJCQkJCX0KCQkJCX0KCQkJCWVsc2UKCQkJCQkkZXJyID0gJG1vZC0+VGVhbU5hbWUoJHRpZCkuJzogJy4kbW9kLT5MYW5nKCdsYWNrcGVybWlzc2lvbicpOwoJCQl9CgkJfQoKCQkkcmVzQiA9IFRSVUU7CgkJJHRpZCA9IChpbnQpJG1kYXRhWyd0ZWFtQiddOwoJCWlmKCR0aWQgPiAwKQoJCXsKCQkJJHRvID0gc2VsZjo6R2V0VGVhbUNvbnRhY3RzKCR0aWQsJGZpcnN0KTsKCQkJaWYoJHRvKQoJCQl7CgkJCQlpZigkdG9rZW5zKQoJCQkJewoJCQkJCXJlc2V0KCR0byk7CgkJCQkJJHNtYXJ0eS0+YXNzaWduKCdyZWNpcGllbnQnLGtleSgkdG8pKTsKCQkJCQkkdGMgPSBjb3VudCgkdG8pOwoJCQkJCSR0b2FsbCA9ICgoJGJkYXRhWyd0ZWFtc2l6ZSddIDwgMiAmJiAkdGMgPiAwKSB8fCAkdGMgPiAxKTsKCQkJCQkkc21hcnR5LT5hc3NpZ24oJ3RvYWxsJywkdG9hbGwpOwoJCQkJCWlmICgoaW50KSRtZGF0YVsndGVhbUEnXSA+IDApCgkJCQkJCSRvcCA9ICRtb2QtPlRlYW1OYW1lKCRtZGF0YVsndGVhbUEnXSk7CgkJCQkJZWxzZQoJCQkJCXsKLyoJCQkJCXN3aXRjaCgkYmRhdGFbJ3R5cGUnXSkKCQkJCQkJewoJCQkJCQkgY2FzZSBUb3VybmV5OjpLT1RZUEU6CgkJCQkJCQkkb3AgPSAkbW9kLT5MYW5nKCdhbm9ud2lubmVyJyk7CgkJCQkJCQlicmVhazsKCQkJCQkJIGRlZmF1bHQ6CgkJCQkJCQkkb3AgPSAkbW9kLT5MYW5nKCdhbm9ub3RoZXInKTsKCQkJCQkJCWJyZWFrOwoJCQkJCQl9CiovCgkJCQkJCSRvcCA9ICcnOwoJCQkJCX0KCQkJCQkkc21hcnR5LT5hc3NpZ24oJ29wcG9uZW50Jywkb3ApOwoJCQkJCWlmKCRvd25lcikKCQkJCQkJJHRvW10gPSAkb3duZXI7CgkJCQkJbGlzdCgkcmVzQiwkbXNnKSA9IHNlbGY6OkRvU2VuZCgkbW9kLCR0b2tlbnMsJHRvLCR0cGwpOwoJCQkJCWlmKCEkcmVzQikKCQkJCQl7CgkJCQkJCWlmKCRlcnIpICRlcnIgLj0gJzxiciAvPic7IAoJCQkJCQlpZighJG1zZykKCQkJCQkJCSRtc2cgPSAkbW9kLT5MYW5nKCdlcnJfbm90aWNlJyk7CgkJCQkJCSRlcnIgLj0gJG1vZC0+VGVhbU5hbWUoJHRpZCkuJzogJy4kbXNnOwoJCQkJCX0KCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlpZigkZXJyKSAkZXJyIC49ICc8YnIgLz4nOwoJCQkJCSRlcnIgLj0gJG1vZC0+VGVhbU5hbWUoJHRpZCkuJzogJy4kbW9kLT5MYW5nKCdsYWNrcGVybWlzc2lvbicpOwoJCQkJfQoJCQl9CgkJfQoJCWlmKCRyZXNBICYmICRyZXNCKQoJCQlyZXR1cm4gYXJyYXkoVFJVRSwnJyk7CgkJcmV0dXJuIGFycmF5KEZBTFNFLCRlcnIpOwoJfQp9Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.tmtXML.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0KEMpIDIwMTQtMjAxNSBUb20gUGhhbmUgPHRwZ3d3QG9uZXBvc3QubmV0PgpSZWZlciB0byBsaWNlbmNlIGFuZCBvdGhlciBkZXRhaWxzIGF0IHRoZSB0b3Agb2YgZmlsZSBUb3VybmV5Lm1vZHVsZS5waHAKTW9yZSBpbmZvIGF0IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvdG91cm5leQpGdW5jdGlvbnMgaW52b2x2ZWQgd2l0aCBYTUwgb3V0cHV0CiovCgpjbGFzcyB0bXRYTUwKewoJLyoqCglTYXZlWE1MOgoJQG1vZDogcmVmZXJlbmNlIHRvIFRvdXJuZXkgbW9kdWxlCglAZGV0YWlsOiBpZGVudGlmaWVyLWRldGFpbCBmb3IgaW5jbHVzaW9uIGluIG5hbWUgb2Ygc2F2ZWQgZmlsZQoJQGRhdGU6IGZvciBpbmNsdXNpb24gaW4gbmFtZSBvZiBzYXZlZCBmaWxlCglAY2hhcnNldDogY2hhcmFjdGVyLWVuY29kaW5nIGZvciBAY29udGVudAoJQGNvbnRlbnQ6IHN0cmluZyB0byBiZSBzYXZlZAoJKi8KCXByaXZhdGUgZnVuY3Rpb24gU2F2ZVhNTCgmJG1vZCwkZGV0YWlsLCRkYXRlLCRjaGFyc2V0LCRjb250ZW50KQoJewoJCSRmbiA9ICRtb2QtPkxhbmcoJ3RvdXJuYW1lbnQnKS4nLScuJGRldGFpbC4nLScuJGRhdGU7CgkJQG9iX2NsZWFuKCk7CgkJaGVhZGVyKCdQcmFnbWE6IHB1YmxpYycpOwoJCWhlYWRlcignRXhwaXJlczogMCcpOwoJCWhlYWRlcignQ2FjaGUtQ29udHJvbDogbXVzdC1yZXZhbGlkYXRlLHBvc3QtY2hlY2s9MCxwcmUtY2hlY2s9MCcpOwoJCWhlYWRlcignQ2FjaGUtQ29udHJvbDogcHJpdmF0ZScsRkFMU0UpOwoJCWhlYWRlcignQ29udGVudC1EZXNjcmlwdGlvbjogRmlsZSBUcmFuc2ZlcicpOwoJCS8vbm90ZTogc29tZSBvbGRlciBIVFRQLzEuMCBjbGllbnRzIGRpZCBub3QgZGVhbCBwcm9wZXJseSB3aXRoIGFuIGV4cGxpY2l0IGNoYXJzZXQgcGFyYW1ldGVyCgkJaGVhZGVyKCdDb250ZW50LVR5cGU6IHRleHQveG1sJy4kY2hhcnNldCk7CgkJaGVhZGVyKCdDb250ZW50LUxlbmd0aDogJy5zdHJsZW4oJGNvbnRlbnQpKTsKCQloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSInLiRmbi4nLnhtbCInKTsKCQkKCQllY2hvICRjb250ZW50OwoJfQoKCS8qKgoJQ3JlYXRlWE1MOgoJQG1vZDogcmVmZXJlbmNlIHRvIFRvdXJuZXkgbW9kdWxlCglAYnJhY2tldF9pZDogc2luZ2xlIGJyYWNrZXQgaWRlbnRpZmllciwgb3IgYXJyYXkgb2YgdGhlbQoJQGRhdGU6IGRhdGUgc3RyaW5nIGZvciBpbmNsdXNpb24gaW4gdGhlIGNvbnRlbnQKCUBjaGFyc2V0OiBvcHRpb25hbCwgbmFtZSBvZiBjb250ZW50IGVuY29kaW5nLCBkZWZhdWx0ID0gRkFMU0UKCSovCglwcml2YXRlIGZ1bmN0aW9uIENyZWF0ZVhNTCgmJG1vZCwkYnJhY2tldF9pZCwkZGF0ZSwkY2hhcnNldCA9IEZBTFNFKQoJewoJCSRwcmVmID0gY21zX2RiX3ByZWZpeCgpOwoJCSRkYiA9IGNtc21zKCktPkdldERiKCk7CgkJJHNxbCA9ICdTRUxFQ1QgKiBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfYnJhY2tldHMgV0hFUkUgYnJhY2tldF9pZD0/JzsKCQlpZiAoIWlzX2FycmF5KCRicmFja2V0X2lkKSkKCQl7CgkJCSRwcm9wZXJ0aWVzID0gJGRiLT5HZXRSb3coJHNxbCxhcnJheSgkYnJhY2tldF9pZCkpOwoJCQkkYnJhY2tldF9pZCA9IGFycmF5KCRicmFja2V0X2lkKTsKCQl9CgkJZWxzZQoJCXsKCQkJLy91c2UgYnJhY2tldC1kYXRhIGZyb20gZmlyc3QtZm91bmQKCQkJZm9yZWFjaCAoJGJyYWNrZXRfaWQgYXMgJHRoaXNpZCkKCQkJewoJCQkJJHByb3BlcnRpZXMgPSAkZGItPkdldFJvdygkc3FsLGFycmF5KCR0aGlzaWQpKTsKCQkJCWlmKCRwcm9wZXJ0aWVzICE9IEZBTFNFKQoJCQkJCWJyZWFrOwoJCQl9CgkJfQoJCWlmKCRwcm9wZXJ0aWVzID09IEZBTFNFKQoJCQlyZXR1cm4gRkFMU0U7CgoJCSRoZWFkZXIgPSBUUlVFOyAvL29uZXRpbWUgZmxhZyBmb3IgaGVhZGVyIGNvbnN0cnVjdGlvbgoJCSR4bWwgPSBhcnJheSgpOwoJCSRzcWwgPSAnU0VMRUNUICogRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X3RlYW1zIFdIRVJFIGJyYWNrZXRfaWQ9PyBBTkQgZmxhZ3MhPTIgT1JERVIgQlkgdGVhbV9pZCc7CgkJJHNxbDIgPSAnU0VMRUNUIFAuKiBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfcGVvcGxlIFAgSk9JTiAnLiRwcmVmLgoJCQknbW9kdWxlX3RtdF90ZWFtcyBUIE9OIFAuaWQgPSBULnRlYW1faWQgV0hFUkUgVC5icmFja2V0X2lkPT8gQU5EIFQuZmxhZ3MhPTIgQU5EIFAuZmxhZ3MhPTIgT1JERVIgQlkgUC5pZCxQLmRpc3BsYXlvcmRlcic7CgkJJHNxbDMgPSAnU0VMRUNUICogRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X21hdGNoZXMgV0hFUkUgYnJhY2tldF9pZD0/IEFORCBmbGFncz0wIE9SREVSIEJZIG1hdGNoX2lkJzsKCgkJZm9yZWFjaCgkYnJhY2tldF9pZCBhcyAkdGhpc2lkKQoJCXsKCQkJJHRlYW1zID0gJGRiLT5HZXRBbGwoJHNxbCxhcnJheSgkdGhpc2lkKSk7CgkJCWlmKCR0ZWFtcykKCQkJewoJCQkJJHBlb3BsZSA9ICRkYi0+R2V0QWxsKCRzcWwyLGFycmF5KCR0aGlzaWQpKTsKCQkJCSRtYXRjaGVzID0gJGRiLT5HZXRBbGwoJHNxbDMsYXJyYXkoJHRoaXNpZCkpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJHBlb3BsZSA9IEZBTFNFOwoJCQkJJG1hdGNoZXMgPSBGQUxTRTsKCQkJfQoKCQkJaWYoJGhlYWRlcikKCQkJewoJCQkJaWYoJGNoYXJzZXQpCgkJCQkJJHhtbFtdID0gJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Iicuc3RydG91cHBlcigkY2hhcnNldCkuJyI/Pic7CgkJCQllbHNlCgkJCQkJJHhtbFtdID0gJzw/eG1sIHZlcnNpb249IjEuMCI/Pic7CgkJCQkkeG1sW10gPSAnPCFET0NUWVBFIHRvdXJuZXkgWyc7CgkJCQkkeG1sW10gPSAnPCFFTEVNRU5UIHRvdXJuZXkgKHZlcnNpb24sZGF0ZSxjb3VudCxicmFja2V0KT4nOwoJCQkJJHhtbFtdID0gJzwhRUxFTUVOVCB2ZXJzaW9uICgjUENEQVRBKT4nOwoJCQkJJHhtbFtdID0gJzwhRUxFTUVOVCBkYXRlICgjUENEQVRBKT4nOwoJCQkJJHhtbFtdID0gJzwhRUxFTUVOVCBjb3VudCAoI1BDREFUQSk+JzsKCQkJCSR4bWxbXSA9ICc8IUVMRU1FTlQgYnJhY2tldCAocHJvcGVydGllcyx0ZWFtcyxwZW9wbGUsbWF0Y2hlcyk+JzsKCQkJCSRmaWVsZHMxID0gYXJyYXlfa2V5cygkcHJvcGVydGllcyk7CgkJCQkkeG1sW10gPSAnPCFFTEVNRU5UIHByb3BlcnRpZXMgKCcuaW1wbG9kZSgnLCcsJGZpZWxkczEpLicpPic7CgkJCQlmb3JlYWNoKCRmaWVsZHMxIGFzICR0aGlzZmllbGQpCgkJCQkJJHhtbFtdID0gIjwhRUxFTUVOVCAkdGhpc2ZpZWxkICgjUENEQVRBKT4iOwoJCQkJaWYoJHRlYW1zKQoJCQkJewoJCQkJCSRmaWVsZHMyID0gYXJyYXlfa2V5cygkdGVhbXNbMF0pOwoJCQkJCSR4bWxbXSA9ICc8IUVMRU1FTlQgdGVhbXMgKHRlYW0pPic7CgkJCQkJJHhtbFtdID0gJzwhRUxFTUVOVCB0ZWFtICgnLmltcGxvZGUoJywnLCRmaWVsZHMyKS4nKT4nOwoJCQkJCWZvcmVhY2goJGZpZWxkczIgYXMgJHRoaXNmaWVsZCkKCQkJCQkJJHhtbFtdID0gIjwhRUxFTUVOVCAkdGhpc2ZpZWxkICgjUENEQVRBKT4iOwoJCQkJCWlmKCRwZW9wbGUpCgkJCQkJewoJCQkJCQkkZmllbGRzMyA9IGFycmF5X2tleXMoJHBlb3BsZVswXSk7CgkJCQkJCSR4bWxbXSA9ICc8IUVMRU1FTlQgcGVvcGxlIChwZXJzb24pPic7CgkJCQkJCSR4bWxbXSA9ICc8IUVMRU1FTlQgcGVyc29uICgnLmltcGxvZGUoJywnLCRmaWVsZHMzKS4nKT4nOwoJCQkJCQlmb3JlYWNoKCRmaWVsZHMzIGFzICR0aGlzZmllbGQpCgkJCQkJCQkkeG1sW10gPSAiPCFFTEVNRU5UICR0aGlzZmllbGQgKCNQQ0RBVEEpPiI7CgkJCQkJfQoJCQkJCWlmKCRtYXRjaGVzKQoJCQkJCXsKCQkJCQkJJGZpZWxkczQgPSBhcnJheV9rZXlzKCRtYXRjaGVzWzBdKTsKCQkJCQkJJHhtbFtdID0gJzwhRUxFTUVOVCBtYXRjaGVzIChtYXRjaCk+JzsKCQkJCQkJJHhtbFtdID0gJzwhRUxFTUVOVCBtYXRjaCAoJy5pbXBsb2RlKCcsJywkZmllbGRzNCkuJyk+JzsKCQkJCQkJZm9yZWFjaCgkZmllbGRzNCBhcyAkdGhpc2ZpZWxkKQoJCQkJCQkJJHhtbFtdID0gIjwhRUxFTUVOVCAkdGhpc2ZpZWxkICgjUENEQVRBKT4iOwoJCQkJCX0KCQkJCX0KCQkJCSR4bWxbXSA9ICddPic7CgkJCQkkeG1sW10gPSAnPHRvdXJuZXk+JzsKCQkJCSR4bWxbXSA9ICJcdDx2ZXJzaW9uPiIuJG1vZC0+R2V0VmVyc2lvbigpLic8L3ZlcnNpb24+JzsKCQkJCSR4bWxbXSA9ICJcdDxkYXRlPiIuJGRhdGUuJzwvZGF0ZT4nOwoJCQkJJHhtbFtdID0gIlx0PGNvdW50PiIuY291bnQoJGJyYWNrZXRfaWQpLic8L2NvdW50Pic7CgkJCQkkaGVhZGVyID0gRkFMU0U7CgkJCX0KCgkJCSR4bWxbXSA9ICJcdDxicmFja2V0PiI7CgkJCS8vbWFpbi10YWJsZSBmaWVsZG5hbWVzIGFyZSBub3QgbmFtZXNwYWNlZAoJCQkkeG1sW10gPSAiXHRcdDxwcm9wZXJ0aWVzPiI7CgkJCWZvcmVhY2goJGZpZWxkczEgYXMgJHRoaXNmaWVsZCkKCQkJCSR4bWxbXSA9ICJcdFx0XHQ8JHRoaXNmaWVsZD4iLiRwcm9wZXJ0aWVzWyR0aGlzZmllbGRdLiI8LyR0aGlzZmllbGQ+IjsKCQkJJHhtbFtdID0gIlx0XHQ8L3Byb3BlcnRpZXM+IjsKCgkJCS8vdG8gYXZvaWQgY29uZmxpY3RzLCBvdGhlci10YWJsZSBmaWVsZG5hbWVzIGFyZSBuYW1lc3BhY2VkCgkJCSR4bWxbXSA9ICJcdFx0PHQ6dGVhbXMgeG1sbnM6dD1cImZpbGU6Ly8vdGVhbXNcIj4iOwoJCQlpZigkdGVhbXMpCgkJCXsKCQkJCWZvcmVhY2goJHRlYW1zIGFzICR0aGlzdGVhbSkKCQkJCXsKCQkJCQkkeG1sW10gPSAiXHRcdFx0PHRlYW0+IjsKCQkJCQkJZm9yZWFjaCgkZmllbGRzMiBhcyAkdGhpc2ZpZWxkKQoJCQkJCQkJJHhtbFtdID0gIlx0XHRcdFx0PHQ6JHRoaXNmaWVsZD4iLiR0aGlzdGVhbVskdGhpc2ZpZWxkXS4iPC90OiR0aGlzZmllbGQ+IjsKCQkJCQkkeG1sW10gPSAiXHRcdFx0PC90ZWFtPiI7CgkJCQl9CgkJCX0KCQkJJHhtbFtdID0gIlx0XHQ8L3Q6dGVhbXM+IjsKCQkJJHhtbFtdID0gIlx0XHQ8aDpwZW9wbGUgeG1sbnM6aD1cImZpbGU6Ly8vaHVtYW5zXCI+IjsKCQkJaWYoJHBlb3BsZSkKCQkJewoJCQkJZm9yZWFjaCgkcGVvcGxlIGFzICR0aGlzb25lKQoJCQkJewoJCQkJCSR4bWxbXSA9ICJcdFx0XHQ8cGVyc29uPiI7CgkJCQkJCWZvcmVhY2goJGZpZWxkczMgYXMgJHRoaXNmaWVsZCkKCQkJCQkJCSR4bWxbXSA9ICJcdFx0XHRcdDxoOiR0aGlzZmllbGQ+Ii4kdGhpc29uZVskdGhpc2ZpZWxkXS4iPC9oOiR0aGlzZmllbGQ+IjsKCQkJCQkkeG1sW10gPSAiXHRcdFx0PC9wZXJzb24+IjsKCQkJCX0KCQkJfQoJCQkkeG1sW10gPSAiXHRcdDwvaDpwZW9wbGU+IjsKCQkJJHhtbFtdID0gIlx0XHQ8bTptYXRjaGVzIHhtbG5zOm09XCJmaWxlOi8vL21hdGNoZXNcIj4iOwoJCQlpZigkbWF0Y2hlcykKCQkJewoJCQkJZm9yZWFjaCgkbWF0Y2hlcyBhcyAkdGhpc21hdGNoKQoJCQkJewoJCQkJCSR4bWxbXSA9ICJcdFx0XHQ8bWF0Y2g+IjsKCQkJCQkJZm9yZWFjaCgkZmllbGRzNCBhcyAkdGhpc2ZpZWxkKQoJCQkJCQkJJHhtbFtdID0gIlx0XHRcdFx0PG06JHRoaXNmaWVsZD4iLiR0aGlzbWF0Y2hbJHRoaXNmaWVsZF0uIjwvbTokdGhpc2ZpZWxkPiI7CgkJCQkJJHhtbFtdID0gIlx0XHRcdDwvbWF0Y2g+IjsKCQkJCX0KCQkJfQoJCQkkeG1sW10gPSAiXHRcdDwvbTptYXRjaGVzPiI7CgkJCSR4bWxbXSA9ICJcdDwvYnJhY2tldD4iOwoJCX0KCQkkeG1sW10gPSAnPC90b3VybmV5Pic7CgoJCXJldHVybiBpbXBsb2RlKCJcbiIsJHhtbCk7Cgl9CgoJLyoqCglFeHBvcnRYTUw6CglAbW9kOiByZWZlcmVuY2UgdG8gVG91cm5leSBtb2R1bGUKCUBicmFja2V0X2lkOiBzaW5nbGUgYnJhY2tldCBpZGVudGlmaWVyLCBvciBhcnJheSBvZiB0aGVtCglSZXR1cm5zIFRSVUUgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIGEgTGFuZy1rZXkgcmVsYXRlZCB0byB0aGUgZXJyb3IKCSovCglmdW5jdGlvbiBFeHBvcnRYTUwoJiRtb2QsJGJyYWNrZXRfaWQpCgl7CgkJJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCQkkcHJlZiA9IGNtc19kYl9wcmVmaXgoKTsKCQkkc3FsID0gJ1NFTEVDVCBhbGlhcyx0aW1lem9uZSBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfYnJhY2tldHMgV0hFUkUgYnJhY2tldF9pZD0/JzsKCQlpZiAoIWlzX2FycmF5KCRicmFja2V0X2lkKSkKCQl7CgkJCSRiZGF0YSA9ICRkYi0+R2V0Um93KCRzcWwsYXJyYXkoJGJyYWNrZXRfaWQpKTsKCQl9CgkJZWxzZQoJCXsKCQkJLy91c2UgZGF0YSBmcm9tIGZpcnN0LWZvdW5kCgkJCWZvcmVhY2ggKCRicmFja2V0X2lkIGFzICR0aGlzaWQpCgkJCXsKCQkJCSRiZGF0YSA9ICRkYi0+R2V0Um93KCRzcWwsYXJyYXkoJHRoaXNpZCkpOwoJCQkJaWYoJGJkYXRhICE9IEZBTFNFKQoJCQkJCWJyZWFrOwoJCQl9CgkJfQoJCWlmKCRiZGF0YSA9PSBGQUxTRSkKCQkJcmV0dXJuICdlcnJfbWlzc2luZyc7CgkJLy9pZiBuZWNlc3NhcnkgYW5kIHBvc3NpYmxlLCB3ZSB3aWxsIGNvbnZlcnQgZXhwb3J0ZWQgZGF0YSBmcm9tIHNpdGUtZW5jb2RpbmcKCQkvL3RvIFVURi04LCBjdXogcGhwJ3MgeG1sLXBhcnNlciBkb2Vzbid0IHN1cHBvcnQgbWFueSBjb2RpbmdzCgkJJGNvbmZpZyA9IGNtc21zKCktPkdldENvbmZpZygpOwoJCWlmKCFlbXB0eSgkY29uZmlnWydkZWZhdWx0X2VuY29kaW5nJ10pKQoJCXsKCQkJJGRlZmNoYXJzID0gdHJpbSgkY29uZmlnWydkZWZhdWx0X2VuY29kaW5nJ10pOwoJCQkkY29udmVydCA9ICgkZGVmY2hhcnMgJiYgc3RyY2FzZWNtcCgkZGVmY2hhcnMsJ1VURi04JykgIT0gMCk7CgkJfQoJCWVsc2UKCQl7CgkJCSRkZWZjaGFycyA9IEZBTFNFOyAvL3dlIHdpbGwgYXNzdW1lIHRoaXMgbWVhbnMgVVRGLTgKCQkJJGNvbnZlcnQgPSBGQUxTRTsKCQl9CgkJaWYoJGNvbnZlcnQgJiYgaW5pX2dldCgnbWJzdHJpbmcuaW50ZXJuYWxfZW5jb2RpbmcnKSA9PT0gRkFMU0UpIC8vY29udmVyc2lvbiBub3QgcG9zc2libGUKCQl7CgkJCWlmKCRkZWZjaGFycykKCQkJCSRkZWZjaGFycyA9IEZBTFNFOwoJCQkkY29udmVydCA9IEZBTFNFOwoJCX0KCgkJJGR0ID0gbmV3IERhdGVUaW1lKCdub3cnLG5ldyBEYXRlVGltZVpvbmUoJGJkYXRhWyd0aW1lem9uZSddKSk7CgkJJHhtbHN0ciA9IHNlbGY6OkNyZWF0ZVhNTCgkbW9kLCRicmFja2V0X2lkLCRkdC0+Zm9ybWF0KCdZLW0tZCcpLCRkZWZjaGFycyk7CgoJCWlmKCR4bWxzdHIpCgkJewoJCQlpZiAoIWlzX2FycmF5KCRicmFja2V0X2lkKSB8fCBjb3VudCgkYnJhY2tldF9pZCkgPT0gMSkKCQkJCSRkZXRhaWwgPSAoJGJkYXRhWydhbGlhcyddKSA/IHByZWdfcmVwbGFjZSgnL1xXLycsJ18nLCRiZGF0YVsnYWxpYXMnXSkgOiAkYnJhY2tldF9pZDsKCQkJZWxzZQoJCQkJJGRldGFpbCA9ICdicmFja2V0c34nLmltcGxvZGUoJ34nLCRicmFja2V0X2lkKTsKCgkJCWlmKCRjb252ZXJ0KQoJCQl7CgkJCQlpbmlfc2V0KCdtYnN0cmluZy5zdWJzdGl0dXRlX2NoYXJhY3RlcicsJ25vbmUnKTsgLy9zdHJpcCBpbGxlZ2FsIGNoYXJzCgkJCQkkeG1sc3RyID0gbWJfY29udmVydF9lbmNvZGluZygkeG1sc3RyLCdVVEYtOCcsJGRlZmNoYXJzKTsKCQkJCSRkZWZjaGFycyA9ICc7IGNoYXJzZXQ9dXRmLTgnOwoJCQl9CgkJCWVsc2UgaWYoISRkZWZjaGFycykKCQkJCSRkZWZjaGFycyA9ICc7IGNoYXJzZXQ9dXRmLTgnOwoJCQllbHNlCgkJCQkkZGVmY2hhcnMgPSAnJzsKCgkJCXNlbGY6OlNhdmVYTUwoJG1vZCwkZGV0YWlsLCRkdC0+Zm9ybWF0KCdZLW0tZC1HLWknKSwkZGVmY2hhcnMsJHhtbHN0cik7CgkJCXJldHVybiBUUlVFOwoJCX0KCQllbHNlCgkJCXJldHVybiAnZXJyX2V4cG9ydCc7Cgl9CgoJcHJpdmF0ZSBmdW5jdGlvbiBDbGVhclRhZ3MoJiRhcnJheSkKCXsKCQlmb3JlYWNoKCRhcnJheSBhcyAkaW5keD0+JiR2YWwpCgkJewoJCQlpZiAoaXNfYXJyYXkoJHZhbCkpCgkJCXsKCQkJCWlmIChpc19udW1lcmljKCRpbmR4KSkKCQkJCXsKCQkJCQkka2V5ID0ga2V5KGFycmF5X3NsaWNlKCR2YWwsMCwxLFRSVUUpKTsKCQkJCQlhcnJheV9zaGlmdCgkdmFsKTsKCQkJCQkkYXJyYXlbJGtleV0gPSAkdmFsOwoJCQkJCXVuc2V0KCRhcnJheVskaW5keF0pOwoJCQkJfQoJCQkJc2VsZjo6Q2xlYXJUYWdzKCR2YWwpOyAvL3JlY3Vyc2UKCQkJfQoJCX0KCQl1bnNldCgkdmFsKTsKCSB9CgoJcHJpdmF0ZSBmdW5jdGlvbiBDbGVhclNwYWNlcygmJGFycmF5KQoJewoJCWZvcmVhY2goJGFycmF5IGFzICRpbmR4PT4mJHZhbCkKCQl7CgkJCWlmIChpc19hcnJheSgkdmFsKSkKCQkJCXNlbGY6OkNsZWFyU3BhY2VzKCR2YWwpOyAvL3JlY3Vyc2UKCQkJJGRvbmUgPSAwOwoJCQkkdG1wID0gcHJlZ19yZXBsYWNlKCd+XmZpbGU6Ly8vW1s6YWxudW06XV0rOn4nLCcnLCRpbmR4LDEwLCRkb25lKTsgLy8kZG9uZS1jb3VudGVyIGlzIGZvciBQSFA1LjErICEKCQkJaWYgKCR0bXAgIT0gbnVsbCAmJiAkZG9uZSA9PSAxKQoJCQl7CgkJCQkkYXJyYXlbJHRtcF0gPSAkdmFsOwoJCQkJdW5zZXQoJGFycmF5WyRpbmR4XSk7CgkJCX0KCQl9CgkJdW5zZXQoJHZhbCk7Cgl9CgoJLyoqCgkgSW1wb3J0WE1MOgoJIEB4bWxmaWxlOiBmaWxlcGF0aCBvZiB4bWwgZmlsZSB0byBiZSBwcm9jZXNzZWQKCSBSZWFkLCBwYXJzZSBhbmQgY2hlY2sgaGlnaC1sZXZlbCBzdHJ1Y3R1cmUgb2YgeG1sIGZpbGUgd2hvc2UgcGF0aCBpcyBAeG1sZmlsZQoJIFJldHVybnM6IHhtbCdpc2ggdHJlZS1zaGFwZWQgYXJyYXkgKHdpdGggdGV4dCBlbmNvZGVkIGFzIFVURi04KSwgb3IgRkFMU0UKCSBicmFja2V0LWRhdGEgYXJlIGluIHN1Yi1hcnJheShzKSBrZXllZCBhcyAnYnJhY2tldDEnLCAuLi4gJ2JyYWNrZXR7YXJyYXlbJ2NvdW50J119JwoJKi8KCWZ1bmN0aW9uIEltcG9ydFhNTCgkeG1sZmlsZSkKCXsKCQkvL3htbC1uYW1lc3BhY2luZyBydWxlcyBvdXQgc29tZSBzaW1wbGVyLCBuZWF0ZXIgYXBwcm9hY2hlcyBoZXJlCgkJJHBhcnNlciA9IHhtbF9wYXJzZXJfY3JlYXRlX25zKCdVVEYtOCcsJzonKTsKCQl4bWxfcGFyc2VyX3NldF9vcHRpb24oJHBhcnNlciwgWE1MX09QVElPTl9DQVNFX0ZPTERJTkcsIDApOwoJCXhtbF9wYXJzZXJfc2V0X29wdGlvbigkcGFyc2VyLCBYTUxfT1BUSU9OX1NLSVBfV0hJVEUsIDEpOwoJCXhtbF9wYXJzZXJfc2V0X29wdGlvbigkcGFyc2VyLCBYTUxfT1BUSU9OX1RBUkdFVF9FTkNPRElORywgJ1VURi04JykuCgkJJHJlcyA9IHhtbF9wYXJzZV9pbnRvX3N0cnVjdCgkcGFyc2VyLCBmaWxlX2dldF9jb250ZW50cygkeG1sZmlsZSksICR4bWxhcnJheSk7CgkJeG1sX3BhcnNlcl9mcmVlKCRwYXJzZXIpOwoJCWlmICgkcmVzID09PSAwKQoJCQlyZXR1cm4gRkFMU0U7CgkJaWYgKGVtcHR5KCR4bWxhcnJheVswXSkgfHwgZW1wdHkoJHhtbGFycmF5WzBdWyd0YWcnXSkgfHwgJHhtbGFycmF5WzBdWyd0YWcnXSAhPSAndG91cm5leScpCgkJCXJldHVybiBGQUxTRTsKCgkJYXJyYXlfc2hpZnQoJHhtbGFycmF5KTsgLy9pZ25vcmUgJ3RvdXJuZXknIHRhZwoJCSRhcnJzaXplID0gY291bnQoJHhtbGFycmF5KTsKCQkvL21pZ3JhdGUgJHhtbGFycmF5IHRvIGNvbmRlbnNlZCBmb3JtYXQKCQkkb3BlbmVkID0gYXJyYXkoKTsKCQkkb3BlbmVkWzFdID0gMDsKCQlmb3IoJGogPSAwOyAkaiA8ICRhcnJzaXplOyAkaisrKQoJCXsKCQkJJHZhbCA9ICR4bWxhcnJheVskal07CgkJCXN3aXRjaCgkdmFsWyd0eXBlJ10pCgkJCXsKCQkJCWNhc2UgJ29wZW4nOiAvL3N0YXJ0IG9mIGEgbmV3IGxldmVsCgkJCQkJJG9wZW5lZFskdmFsWydsZXZlbCddXT0wOwoJCQkJY2FzZSAnY29tcGxldGUnOiAvL2Egc2luZ2xlIHZhbHVlCgkJCQkJJGx2bCA9ICR2YWxbJ2xldmVsJ107CgkJCQkJJGluZGV4ID0gJyc7CgkJCQkJZm9yKCRpID0gMTsgJGkgPCAkbHZsOyAkaSsrKQoJCQkJCQkkaW5kZXggLj0gJ1snLiRvcGVuZWRbJGldLiddJzsKCQkJCQkkcGF0aCA9IGV4cGxvZGUoJ11bJywgc3Vic3RyKCRpbmRleCwgMSwgLTEpKTsKCQkJCQlpZigkdmFsWyd0eXBlJ10gPT0gJ2NvbXBsZXRlJykKCQkJCQkJYXJyYXlfcG9wKCRwYXRoKTsKCQkJCQkkdmFsdWUgPSAmJGFycmF5OwoJCQkJCWZvcmVhY2goJHBhdGggYXMgJHNlZ21lbnQpCgkJCQkJCSR2YWx1ZSA9ICYkdmFsdWVbJHNlZ21lbnRdOwoJCQkJCSR2ID0gKCFlbXB0eSgkdmFsWyd2YWx1ZSddKSkgPyAkdmFsWyd2YWx1ZSddIDogbnVsbDsgLy9kZWZhdWx0IHZhbHVlIGlzIG51bGwKCQkJCQkkdmFsdWVbJHZhbFsndGFnJ11dID0gJHY7CgkJCQkJaWYoJHZhbFsndHlwZSddID09ICdjb21wbGV0ZScgJiYgJGx2bCA+IDEpCgkJCQkJCSRvcGVuZWRbJGx2bC0xXSsrOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAnY2xvc2UnOiAvL2VuZCBvZiBhIGxldmVsCgkJCQkJaWYgKCR2YWxbJ2xldmVsJ10gPiAxKQoJCQkJCQkkb3BlbmVkWyR2YWxbJ2xldmVsJ10tMV0rKzsKCQkJCQl1bnNldCgkb3BlbmVkWyR2YWxbJ2xldmVsJ11dKTsKCQkJCQlicmVhazsKCQkJfQoJCX0KCQl1bnNldCgkdmFsdWUpOwoJCS8vY2xlYXIgdG9wLWxldmVsIG51bWVyaWMga2V5cyBhbmQgcmVsYXRlZCB0YWdzCgkJJGkgPSAxOwoJCWZvcmVhY2goJGFycmF5IGFzICRpbmR4PT4mJHZhbHVlKQoJCXsKCQkJaWYgKGlzX251bWVyaWMoJGluZHgpKQoJCQl7CgkJCQkka2V5ID0ga2V5KGFycmF5X3NsaWNlKCR2YWx1ZSwwLDEsVFJVRSkpOwoJCQkJaWYoJGtleSA9PSAnYnJhY2tldCcpCgkJCQkJJGtleSAuPSAkaSsrOwoJCQkJYXJyYXlfc2hpZnQoJHZhbHVlKTsKCQkJCSRhcnJheVska2V5XSA9ICR2YWx1ZTsKCQkJCXVuc2V0KCRhcnJheVskaW5keF0pOwoJCQl9CgkJfQoJCXVuc2V0KCR2YWx1ZSk7CgkJLy9hbmQgbG93ZXItbGV2ZWwgdGFncwoJCXNlbGY6OkNsZWFyVGFncygkYXJyYXkpOwoJCS8vYW5kIG5hbWVzcGFjZSBwcmVmaXhlcwoJCXNlbGY6OkNsZWFyU3BhY2VzKCRhcnJheSk7CgoJCSRleHBlY3RlZCA9IGFycmF5KCd2ZXJzaW9uJywnZGF0ZScsJ2NvdW50JywnYnJhY2tldDEnKTsKCQlmb3JlYWNoICgkYXJyYXkgYXMgJGluZHg9PiYkY2hlY2spCgkJewoJCQlpZiAoIWluX2FycmF5KCRpbmR4LCRleHBlY3RlZCkpCgkJCXsKCQkJCXVuc2V0KCRjaGVjayk7CgkJCQlyZXR1cm4gRkFMU0U7CgkJCX0KCQl9CgkJdW5zZXQoJGNoZWNrKTsKCQlmb3JlYWNoICgkZXhwZWN0ZWQgYXMgJiRjaGVjaykKCQl7CgkJCWlmICghYXJyYXlfa2V5X2V4aXN0cygkY2hlY2ssICRhcnJheSkpCgkJCXsKCQkJCXVuc2V0KCRjaGVjayk7CgkJCQlyZXR1cm4gRkFMU0U7CgkJCX0KCQl9CgkJdW5zZXQoJGNoZWNrKTsKCQkkZXhwZWN0ZWQgPSBhcnJheSgncHJvcGVydGllcycsJ3RlYW1zJywncGVvcGxlJywnbWF0Y2hlcycpOwkKCQlmb3JlYWNoICgkYXJyYXlbJ2JyYWNrZXQxJ10gYXMgJGluZHg9PiYkY2hlY2spCgkJewoJCQlpZiAoIWluX2FycmF5KCRpbmR4LCRleHBlY3RlZCkpCgkJCXsKCQkJCXVuc2V0KCRjaGVjayk7CgkJCQlyZXR1cm4gRkFMU0U7CgkJCX0KCQl9CgkJdW5zZXQoJGNoZWNrKTsKCQlmb3JlYWNoICgkZXhwZWN0ZWQgYXMgJiRjaGVjaykKCQl7CgkJCWlmICghYXJyYXlfa2V5X2V4aXN0cygkY2hlY2ssICRhcnJheVsnYnJhY2tldDEnXSkpCgkJCXsKCQkJCXVuc2V0KCRjaGVjayk7CgkJCQlyZXR1cm4gRkFMU0U7CgkJCX0KCQl9CgkJdW5zZXQoJGNoZWNrKTsKCQlyZXR1cm4gJGFycmF5OwoJfQoKfQoKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/class.TTwitter.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCnJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvT0F1dGgucGhwJzsKCi8qKgogKiBUd2l0dGVyIGZvciBQSFAgLSBsaWJyYXJ5IGZvciBzZW5kaW5nIG1lc3NhZ2VzIHRvIFR3aXR0ZXIgYW5kIHJlY2VpdmluZyBzdGF0dXMgdXBkYXRlcy4KICoKICogQGF1dGhvciAgICAgRGF2aWQgR3J1ZGwKICogQGNvcHlyaWdodCAgQ29weXJpZ2h0IChjKSAyMDA4IERhdmlkIEdydWRsCiAqIEBsaWNlbnNlICAgIE5ldyBCU0QgTGljZW5zZQogKiBAbGluayAgICAgICBodHRwOi8vcGhwZmFzaGlvbi5jb20vCiAqIEBzZWUgICAgICAgIGh0dHA6Ly9kZXYudHdpdHRlci5jb20vZG9jCiAqIEB2ZXJzaW9uICAgIDMuMwogKi8KY2xhc3MgVFR3aXR0ZXIgLy9yZW5hbWVkIHRvIGF2b2lkIG5hbWVzcGFjZSBjb25mbGljdAp7Cgljb25zdCBBUElfVVJMID0gJ2h0dHBzOi8vYXBpLnR3aXR0ZXIuY29tLzEuMS8nOwoKCS8qKiNAKyBUaW1lbGluZSB7QGxpbmsgVHdpdHRlcjo6bG9hZCgpfSAqLwoJY29uc3QgTUUgPSAxOwoJY29uc3QgTUVfQU5EX0ZSSUVORFMgPSAyOwoJY29uc3QgUkVQTElFUyA9IDM7Cgljb25zdCBSRVRXRUVUUyA9IDEyODsgLy8gaW5jbHVkZSByZXR3ZWV0cz8KCS8qKiNALSovCgoJLyoqIEB2YXIgaW50ICovCglwdWJsaWMgc3RhdGljICRjYWNoZUV4cGlyZSA9IDE4MDA7IC8vIDMwIG1pbgoKCS8qKiBAdmFyIHN0cmluZyAqLwoJcHVibGljIHN0YXRpYyAkY2FjaGVEaXI7CgoJLyoqIEB2YXIgYXJyYXkgKi8KCXB1YmxpYyAkaHR0cE9wdGlvbnMgPSBhcnJheSgKCQlDVVJMT1BUX1RJTUVPVVQgPT4gMjAsCgkJQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiA9PiAwLAoJCUNVUkxPUFRfSFRUUEhFQURFUiA9PiBhcnJheSgnRXhwZWN0OicpLAoJCUNVUkxPUFRfVVNFUkFHRU5UID0+ICdUd2l0dGVyIGZvciBQSFAnLAoJKTsKCgkvKiogQHZhciBUd2l0dGVyX09BdXRoU2lnbmF0dXJlTWV0aG9kICovCglwcm90ZWN0ZWQgJHNpZ25hdHVyZU1ldGhvZDsKCgkvKiogQHZhciBUd2l0dGVyX09BdXRoQ29uc3VtZXIgKi8KCXByb3RlY3RlZCAkY29uc3VtZXI7CgoJLyoqIEB2YXIgVHdpdHRlcl9PQXV0aENvbnN1bWVyICovCglwcm90ZWN0ZWQgJHRva2VuOwoKCS8qKgoJICogQ3JlYXRlcyBvYmplY3QgdXNpbmcgY29uc3VtZXIgYW5kIGFjY2VzcyBrZXlzLgoJICogQHBhcmFtICBzdHJpbmcgIGNvbnN1bWVyIGtleQoJICogQHBhcmFtICBzdHJpbmcgIGFwcCBzZWNyZXQKCSAqIEBwYXJhbSAgc3RyaW5nICBvcHRpb25hbCBhY2Nlc3MgdG9rZW4KCSAqIEBwYXJhbSAgc3RyaW5nICBvcHRpbmFsIGFjY2VzcyB0b2tlbiBzZWNyZXQKCSAqIEB0aHJvd3MgVHdpdHRlckV4Y2VwdGlvbiB3aGVuIENVUkwgZXh0ZW5zaW9uIGlzIG5vdCBsb2FkZWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRjb25zdW1lcktleSwgJGNvbnN1bWVyU2VjcmV0LCAkYWNjZXNzVG9rZW4gPSBOVUxMLCAkYWNjZXNzVG9rZW5TZWNyZXQgPSBOVUxMKQoJewoJCWlmICghZXh0ZW5zaW9uX2xvYWRlZCgnY3VybCcpKSB7CgkJCXRocm93IG5ldyBUd2l0dGVyRXhjZXB0aW9uKCdQSFAgZXh0ZW5zaW9uIENVUkwgaXMgbm90IGxvYWRlZC4nKTsKCQl9CgoJCSR0aGlzLT5zaWduYXR1cmVNZXRob2QgPSBuZXcgVHdpdHRlcl9PQXV0aFNpZ25hdHVyZU1ldGhvZF9ITUFDX1NIQTEoKTsKCQkkdGhpcy0+Y29uc3VtZXIgPSBuZXcgVHdpdHRlcl9PQXV0aENvbnN1bWVyKCRjb25zdW1lcktleSwgJGNvbnN1bWVyU2VjcmV0KTsKCQkkdGhpcy0+dG9rZW4gPSBuZXcgVHdpdHRlcl9PQXV0aENvbnN1bWVyKCRhY2Nlc3NUb2tlbiwgJGFjY2Vzc1Rva2VuU2VjcmV0KTsKCX0KCgoJLyoqCgkgKiBUZXN0cyBpZiB1c2VyIGNyZWRlbnRpYWxzIGFyZSB2YWxpZC4KCSAqIEByZXR1cm4gYm9vbGVhbgoJICogQHRocm93cyBUd2l0dGVyRXhjZXB0aW9uCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBhdXRoZW50aWNhdGUoKQoJewoJCXRyeSB7CgkJCSRyZXMgPSAkdGhpcy0+cmVxdWVzdCgnYWNjb3VudC92ZXJpZnlfY3JlZGVudGlhbHMnLCAnR0VUJyk7CgkJCXJldHVybiAhZW1wdHkoJHJlcy0+aWQpOwoKCQl9IGNhdGNoIChUd2l0dGVyRXhjZXB0aW9uICRlKSB7CgkJCWlmICgkZS0+Z2V0Q29kZSgpID09PSA0MDEpIHsKCQkJCXJldHVybiBGQUxTRTsKCQkJfQoJCQl0aHJvdyAkZTsKCQl9Cgl9CgoKCS8qKgoJICogU2VuZHMgbWVzc2FnZSB0byB0aGUgVHdpdHRlci4KCSAqIEBwYXJhbSBzdHJpbmcgICBtZXNzYWdlIGVuY29kZWQgaW4gVVRGLTgKCSAqIEByZXR1cm4gb2JqZWN0CgkgKiBAdGhyb3dzIFR3aXR0ZXJFeGNlcHRpb24KCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNlbmQoJG1lc3NhZ2UsICRtZWRpYSA9IE5VTEwpCgl7CgkJcmV0dXJuICR0aGlzLT5yZXF1ZXN0KAoJCQkkbWVkaWEgPyAnc3RhdHVzZXMvdXBkYXRlX3dpdGhfbWVkaWEnIDogJ3N0YXR1c2VzL3VwZGF0ZScsCgkJCSdQT1NUJywKCQkJYXJyYXkoJ3N0YXR1cycgPT4gJG1lc3NhZ2UpLAoJCQkkbWVkaWEgPyBhcnJheSgnbWVkaWFbXScgPT4gJG1lZGlhKSA6IE5VTEwKCQkpOwoJfQoKCgkvKioKCSAqIEZvbGxvd3MgYSB1c2VyIG9uIFR3aXR0ZXIuCgkgKiBAcGFyYW0gIHN0cmluZyAgdXNlciBuYW1lCgkgKiBAcmV0dXJuIG9iamVjdAoJICogQHRocm93cyBUd2l0dGVyRXhjZXB0aW9uCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBmb2xsb3coJHVzZXJuYW1lKQoJewoJCXJldHVybiAkdGhpcy0+cmVxdWVzdCgnZnJpZW5kc2hpcHMvY3JlYXRlJywgJ1BPU1QnLCBhcnJheSgnc2NyZWVuX25hbWUnID0+ICR1c2VybmFtZSkpOwoJfQoKCgkvKioKCSAqIFJldHVybnMgdGhlIG1vc3QgcmVjZW50IHN0YXR1c2VzLgoJICogQHBhcmFtICBpbnQgICAgdGltZWxpbmUgKE1FIHwgTUVfQU5EX0ZSSUVORFMgfCBSRVBMSUVTKSBhbmQgb3B0aW9uYWwgKFJFVFdFRVRTKQoJICogQHBhcmFtICBpbnQgICAgbnVtYmVyIG9mIHN0YXR1c2VzIHRvIHJldHJpZXZlCgkgKiBAcGFyYW0gIGludCAgICBwYWdlIG9mIHJlc3VsdHMgdG8gcmV0cmlldmUKCSAqIEByZXR1cm4gbWl4ZWQKCSAqIEB0aHJvd3MgVHdpdHRlckV4Y2VwdGlvbgoJICovCglwdWJsaWMgZnVuY3Rpb24gbG9hZCgkZmxhZ3MgPSBzZWxmOjpNRSwgJGNvdW50ID0gMjAsIGFycmF5ICRkYXRhID0gTlVMTCkKCXsKCQlzdGF0aWMgJHRpbWVsaW5lcyA9IGFycmF5KHNlbGY6Ok1FID0+ICd1c2VyX3RpbWVsaW5lJywgc2VsZjo6TUVfQU5EX0ZSSUVORFMgPT4gJ2hvbWVfdGltZWxpbmUnLCBzZWxmOjpSRVBMSUVTID0+ICdtZW50aW9uc190aW1lbGluZScpOwoJCWlmICghaXNzZXQoJHRpbWVsaW5lc1skZmxhZ3MgJiAzXSkpIHsKCQkJdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKCQl9CgoJCXJldHVybiAkdGhpcy0+Y2FjaGVkUmVxdWVzdCgnc3RhdHVzZXMvJyAuICR0aW1lbGluZXNbJGZsYWdzICYgM10sIChhcnJheSkgJGRhdGEgKyBhcnJheSgKCQkJJ2NvdW50JyA9PiAkY291bnQsCgkJCSdpbmNsdWRlX3J0cycgPT4gJGZsYWdzICYgc2VsZjo6UkVUV0VFVFMgPyAxIDogMCwKCQkpKTsKCX0KCgoJLyoqCgkgKiBSZXR1cm5zIGluZm9ybWF0aW9uIG9mIGEgZ2l2ZW4gdXNlci4KCSAqIEBwYXJhbSAgc3RyaW5nIG5hbWUKCSAqIEByZXR1cm4gbWl4ZWQKCSAqIEB0aHJvd3MgVHdpdHRlckV4Y2VwdGlvbgoJICovCglwdWJsaWMgZnVuY3Rpb24gbG9hZFVzZXJJbmZvKCR1c2VyKQoJewoJCXJldHVybiAkdGhpcy0+Y2FjaGVkUmVxdWVzdCgndXNlcnMvc2hvdycsIGFycmF5KCdzY3JlZW5fbmFtZScgPT4gJHVzZXIpKTsKCX0KCgoJLyoqCgkgKiBSZXR1cm5zIGluZm9ybWF0aW9uIG9mIGEgZ2l2ZW4gdXNlciBieSBpZC4KCSAqIEBwYXJhbSAgc3RyaW5nIG5hbWUKCSAqIEByZXR1cm4gbWl4ZWQKCSAqIEB0aHJvd3MgVHdpdHRlckV4Y2VwdGlvbgoJICovCglwdWJsaWMgZnVuY3Rpb24gbG9hZFVzZXJJbmZvQnlJZCgkaWQpCgl7CgkJcmV0dXJuICR0aGlzLT5jYWNoZWRSZXF1ZXN0KCd1c2Vycy9zaG93JywgYXJyYXkoJ3VzZXJfaWQnID0+ICRpZCkpOwoJfQoKCgkvKioKCSAqIFJldHVybnMgZm9sbG93ZXJzIG9mIGEgZ2l2ZW4gdXNlci4KCSAqIEBwYXJhbSAgc3RyaW5nIG5hbWUKCSAqIEByZXR1cm4gbWl4ZWQKCSAqIEB0aHJvd3MgVHdpdHRlckV4Y2VwdGlvbgoJICovCglwdWJsaWMgZnVuY3Rpb24gbG9hZFVzZXJGb2xsb3dlcnMoJHVzZXIsICRjb3VudCA9IDUwMDAsICRjdXJzb3IgPSAtMSwgJGNhY2hlRXhwaXJ5ID0gbnVsbCkKCXsKCQlyZXR1cm4gJHRoaXMtPmNhY2hlZFJlcXVlc3QoJ2ZvbGxvd2Vycy9pZHMnLCBhcnJheSgnc2NyZWVuX25hbWUnID0+ICR1c2VyLCAnY291bnQnID0+ICRjb3VudCwgJ2N1cnNvcicgPT4gJGN1cnNvciksICRjYWNoZUV4cGlyeSk7Cgl9CgoKCS8qKgoJICogRGVzdHJveXMgc3RhdHVzLgoJICogQHBhcmFtICBpbnQgICAgaWQgb2Ygc3RhdHVzIHRvIGJlIGRlc3Ryb3llZAoJICogQHJldHVybiBtaXhlZAoJICogQHRocm93cyBUd2l0dGVyRXhjZXB0aW9uCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBkZXN0cm95KCRpZCkKCXsKCQkkcmVzID0gJHRoaXMtPnJlcXVlc3QoInN0YXR1c2VzL2Rlc3Ryb3kvJGlkIiwgJ1BPU1QnKTsKCQlyZXR1cm4gJHJlcy0+aWQgPyAkcmVzLT5pZCA6IEZBTFNFOwoJfQoKCgkvKioKCSAqIFJldHVybnMgdHdlZXRzIHRoYXQgbWF0Y2ggYSBzcGVjaWZpZWQgcXVlcnkuCgkgKiBAcGFyYW0gIHN0cmluZ3xhcnJheSAgIHF1ZXJ5CgkgKiBAcGFyYW0gIGJvb2wgIHJldHVybiBjb21wbGV0ZSByZXNwb25zZT8KCSAqIEByZXR1cm4gbWl4ZWQKCSAqIEB0aHJvd3MgVHdpdHRlckV4Y2VwdGlvbgoJICovCglwdWJsaWMgZnVuY3Rpb24gc2VhcmNoKCRxdWVyeSwgJGZ1bGwgPSBGQUxTRSkKCXsKCQkkcmVzID0gJHRoaXMtPnJlcXVlc3QoJ3NlYXJjaC90d2VldHMnLCAnR0VUJywgaXNfYXJyYXkoJHF1ZXJ5KSA/ICRxdWVyeSA6IGFycmF5KCdxJyA9PiAkcXVlcnkpKTsKCQlyZXR1cm4gJGZ1bGwgPyAkcmVzIDogJHJlcy0+c3RhdHVzZXM7Cgl9CgoKCS8qKgoJICogUHJvY2VzcyBIVFRQIHJlcXVlc3QuCgkgKiBAcGFyYW0gIHN0cmluZyAgVVJMIG9yIHR3aXR0ZXIgY29tbWFuZAoJICogQHBhcmFtICBzdHJpbmcgIEhUVFAgbWV0aG9kIEdFVCBvciBQT1NUCgkgKiBAcGFyYW0gIGFycmF5ICAgZGF0YQoJICogQHBhcmFtICBhcnJheSAgIHVwbG9hZGVkIGZpbGVzCgkgKiBAcmV0dXJuIG1peGVkCgkgKiBAdGhyb3dzIFR3aXR0ZXJFeGNlcHRpb24KCSAqLwoJcHVibGljIGZ1bmN0aW9uIHJlcXVlc3QoJHJlc291cmNlLCAkbWV0aG9kLCBhcnJheSAkZGF0YSA9IE5VTEwsIGFycmF5ICRmaWxlcyA9IE5VTEwpCgl7CgkJaWYgKCFzdHJwb3MoJHJlc291cmNlLCAnOi8vJykpIHsKCQkJaWYgKCFzdHJwb3MoJHJlc291cmNlLCAnLicpKSB7CgkJCQkkcmVzb3VyY2UgLj0gJy5qc29uJzsKCQkJfQoJCQkkcmVzb3VyY2UgPSBzZWxmOjpBUElfVVJMIC4gJHJlc291cmNlOwoJCX0KCgkJZm9yZWFjaCAoYXJyYXlfa2V5cygoYXJyYXkpICRkYXRhLCBOVUxMLCBUUlVFKSBhcyAka2V5KSB7CgkJCXVuc2V0KCRkYXRhWyRrZXldKTsKCQl9CgoJCWZvcmVhY2ggKChhcnJheSkgJGZpbGVzIGFzICRrZXkgPT4gJGZpbGUpIHsKCQkJJGRhdGFbJGtleV0gPSAnQCcgLiAkZmlsZTsKCQl9CgoJCSRyZXF1ZXN0ID0gVHdpdHRlcl9PQXV0aFJlcXVlc3Q6OmZyb21fY29uc3VtZXJfYW5kX3Rva2VuKCR0aGlzLT5jb25zdW1lciwgJHRoaXMtPnRva2VuLCAkbWV0aG9kLCAkcmVzb3VyY2UsICRmaWxlcyA/IGFycmF5KCkgOiAkZGF0YSk7CgkJJHJlcXVlc3QtPnNpZ25fcmVxdWVzdCgkdGhpcy0+c2lnbmF0dXJlTWV0aG9kLCAkdGhpcy0+Y29uc3VtZXIsICR0aGlzLT50b2tlbik7CgoJCSRvcHRpb25zID0gYXJyYXkoCgkJCUNVUkxPUFRfSEVBREVSID0+IEZBTFNFLAoJCQlDVVJMT1BUX1JFVFVSTlRSQU5TRkVSID0+IFRSVUUsCgkJKSArICgkbWV0aG9kID09PSAnUE9TVCcgPyBhcnJheSgKCQkJQ1VSTE9QVF9QT1NUID0+IFRSVUUsCgkJCUNVUkxPUFRfUE9TVEZJRUxEUyA9PiAkZmlsZXMgPyAkZGF0YSA6ICRyZXF1ZXN0LT50b19wb3N0ZGF0YSgpLAoJCQlDVVJMT1BUX1VSTCA9PiAkZmlsZXMgPyAkcmVxdWVzdC0+dG9fdXJsKCkgOiAkcmVxdWVzdC0+Z2V0X25vcm1hbGl6ZWRfaHR0cF91cmwoKSwKCQkpIDogYXJyYXkoCgkJCUNVUkxPUFRfVVJMID0+ICRyZXF1ZXN0LT50b191cmwoKSwKCQkpKSArICR0aGlzLT5odHRwT3B0aW9uczsKCgkJJGN1cmwgPSBjdXJsX2luaXQoKTsKCQljdXJsX3NldG9wdF9hcnJheSgkY3VybCwgJG9wdGlvbnMpOwoJCSRyZXN1bHQgPSBjdXJsX2V4ZWMoJGN1cmwpOwoJCWlmIChjdXJsX2Vycm5vKCRjdXJsKSkgewoJCQl0aHJvdyBuZXcgVHdpdHRlckV4Y2VwdGlvbignU2VydmVyIGVycm9yOiAnIC4gY3VybF9lcnJvcigkY3VybCkpOwoJCX0KCgkJJGV4dCA9IHN1YnN0cigkcmVzb3VyY2UsLTUpOwoJCWlmKCRleHQgJiYgc3RydG9sb3dlcigkZXh0KSA9PSAnLmpzb24nKSB7CgkJCSRwYXlsb2FkID0gdmVyc2lvbl9jb21wYXJlKFBIUF9WRVJTSU9OLCAnNS40LjAnKSA+PSAwID8KCQkJCUBqc29uX2RlY29kZSgkcmVzdWx0LCBGQUxTRSwgMTI4LCBKU09OX0JJR0lOVF9BU19TVFJJTkcpIDogQGpzb25fZGVjb2RlKCRyZXN1bHQpOyAvLyBpbnRlbnRpb25hbGx5IEAKCQkJaWYgKCRwYXlsb2FkID09PSBOVUxMKSB7CgkJCQl0aHJvdyBuZXcgVHdpdHRlckV4Y2VwdGlvbignSW52YWxpZCBzZXJ2ZXIgcmVzcG9uc2UnKTsKCQkJfQoJCX0gZWxzZQoJCQkkcGF5bG9hZCA9ICRyZXN1bHQ7CgoJCSRjb2RlID0gY3VybF9nZXRpbmZvKCRjdXJsLCBDVVJMSU5GT19IVFRQX0NPREUpOwoJCWlmICgkY29kZSA+PSA0MDApIHsKCQkJdGhyb3cgbmV3IFR3aXR0ZXJFeGNlcHRpb24oaXNzZXQoJHBheWxvYWQtPmVycm9yc1swXS0+bWVzc2FnZSkgPyAkcGF5bG9hZC0+ZXJyb3JzWzBdLT5tZXNzYWdlIDogIlNlcnZlciBlcnJvciAjJGNvZGUiLCAkY29kZSk7CgkJfQoKCQlyZXR1cm4gJHBheWxvYWQ7Cgl9CgoKCS8qKgoJICogQ2FjaGVkIEhUVFAgcmVxdWVzdC4KCSAqIEBwYXJhbSAgc3RyaW5nICBVUkwgb3IgdHdpdHRlciBjb21tYW5kCgkgKiBAcGFyYW0gIGFycmF5CgkgKiBAcGFyYW0gIGludAoJICogQHJldHVybiBtaXhlZAoJICovCglwdWJsaWMgZnVuY3Rpb24gY2FjaGVkUmVxdWVzdCgkcmVzb3VyY2UsIGFycmF5ICRkYXRhID0gTlVMTCwgJGNhY2hlRXhwaXJlID0gTlVMTCkKCXsKCQlpZiAoIXNlbGY6OiRjYWNoZURpcikgewoJCQlyZXR1cm4gJHRoaXMtPnJlcXVlc3QoJHJlc291cmNlLCAnR0VUJywgJGRhdGEpOwoJCX0KCQlpZiAoJGNhY2hlRXhwaXJlID09PSBOVUxMKSB7CgkJCSRjYWNoZUV4cGlyZSA9IHNlbGY6OiRjYWNoZUV4cGlyZTsKCQl9CgoJCSRjYWNoZUZpbGUgPSBzZWxmOjokY2FjaGVEaXIgLiAnL3R3aXR0ZXIuJyAuIG1kNSgkcmVzb3VyY2UgLiBqc29uX2VuY29kZSgkZGF0YSkgLiBzZXJpYWxpemUoYXJyYXkoJHRoaXMtPmNvbnN1bWVyLCAkdGhpcy0+dG9rZW4pKSk7CgkJJGNhY2hlID0gQGpzb25fZGVjb2RlKEBmaWxlX2dldF9jb250ZW50cygkY2FjaGVGaWxlKSk7IC8vIGludGVudGlvbmFsbHkgQAoJCWlmICgkY2FjaGUgJiYgQGZpbGVtdGltZSgkY2FjaGVGaWxlKSArICRjYWNoZUV4cGlyZSA+IHRpbWUoKSkgeyAvLyBpbnRlbnRpb25hbGx5IEAKCQkJcmV0dXJuICRjYWNoZTsKCQl9CgoJCXRyeSB7CgkJCSRwYXlsb2FkID0gJHRoaXMtPnJlcXVlc3QoJHJlc291cmNlLCAnR0VUJywgJGRhdGEpOwoJCQlmaWxlX3B1dF9jb250ZW50cygkY2FjaGVGaWxlLCBqc29uX2VuY29kZSgkcGF5bG9hZCkpOwoJCQlyZXR1cm4gJHBheWxvYWQ7CgoJCX0gY2F0Y2ggKFR3aXR0ZXJFeGNlcHRpb24gJGUpIHsKCQkJaWYgKCRjYWNoZSkgewoJCQkJcmV0dXJuICRjYWNoZTsKCQkJfQoJCQl0aHJvdyAkZTsKCQl9Cgl9CgoKCS8qKgoJICogTWFrZXMgdHdpdHRlciBsaW5rcywgQHVzZXJuYW1lcyBhbmQgI2hhc2h0YWdzIGNsaWNrYWJsZS4KCSAqIEBwYXJhbSAgc3RkQ2xhc3N8c3RyaW5nIHN0YXR1cwoJICogQHJldHVybiBzdHJpbmcKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjbGlja2FibGUoJHN0YXR1cykKCXsKCQlpZiAoIWlzX29iamVjdCgkc3RhdHVzKSkgeyAvLyBiYWNrIGNvbXBhdGliaWxpdHkKCQkJdHJpZ2dlcl9lcnJvcihfX01FVEhPRF9fIC4gJygpIGhhcyBiZWVuIGNoYW5nZWQ7IHBhc3MgYXMgcGFyYW1ldGVyIHN0YXR1cyBvYmplY3QsIG5vdCBqdXN0IHRleHQuJywgRV9VU0VSX1dBUk5JTkcpOwoJCQlyZXR1cm4gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKAoJCQkJJ34oPzwhXHcpKGh0dHBzPzovL1xTK1x3fHd3d1wuXFMrXHd8QFx3K3wjXHcrKXxbPD4mXX51JywKCQkJCWFycmF5KF9fQ0xBU1NfXywgJ2NsaWNrYWJsZUNhbGxiYWNrJyksCgkJCQlodG1sX2VudGl0eV9kZWNvZGUoJHN0YXR1cywgRU5UX1FVT1RFUywgJ1VURi04JykKCQkJKTsKCQl9CgoJCSRhbGwgPSBhcnJheSgpOwoJCWZvcmVhY2ggKCRzdGF0dXMtPmVudGl0aWVzLT5oYXNodGFncyBhcyAkaXRlbSkgewoJCQkkYWxsWyRpdGVtLT5pbmRpY2VzWzBdXSA9IGFycmF5KCJodHRwOi8vdHdpdHRlci5jb20vc2VhcmNoP3E9JTIzJGl0ZW0tPnRleHQiLCAiIyRpdGVtLT50ZXh0IiwgJGl0ZW0tPmluZGljZXNbMV0pOwoJCX0KCQlmb3JlYWNoICgkc3RhdHVzLT5lbnRpdGllcy0+dXJscyBhcyAkaXRlbSkgewoJCQlpZiAoIWlzc2V0KCRpdGVtLT5leHBhbmRlZF91cmwpKSB7CgkJCQkkYWxsWyRpdGVtLT5pbmRpY2VzWzBdXSA9IGFycmF5KCRpdGVtLT51cmwsICRpdGVtLT51cmwsICRpdGVtLT5pbmRpY2VzWzFdKTsKCQkJfSBlbHNlIHsKCQkJCSRhbGxbJGl0ZW0tPmluZGljZXNbMF1dID0gYXJyYXkoJGl0ZW0tPmV4cGFuZGVkX3VybCwgJGl0ZW0tPmRpc3BsYXlfdXJsLCAkaXRlbS0+aW5kaWNlc1sxXSk7CgkJCX0KCQl9CgkJZm9yZWFjaCAoJHN0YXR1cy0+ZW50aXRpZXMtPnVzZXJfbWVudGlvbnMgYXMgJGl0ZW0pIHsKCQkJJGFsbFskaXRlbS0+aW5kaWNlc1swXV0gPSBhcnJheSgiaHR0cDovL3R3aXR0ZXIuY29tLyRpdGVtLT5zY3JlZW5fbmFtZSIsICJAJGl0ZW0tPnNjcmVlbl9uYW1lIiwgJGl0ZW0tPmluZGljZXNbMV0pOwoJCX0KCQlpZiAoaXNzZXQoJHN0YXR1cy0+ZW50aXRpZXMtPm1lZGlhKSkgewoJCQlmb3JlYWNoICgkc3RhdHVzLT5lbnRpdGllcy0+bWVkaWEgYXMgJGl0ZW0pIHsKCQkJCSRhbGxbJGl0ZW0tPmluZGljZXNbMF1dID0gYXJyYXkoJGl0ZW0tPnVybCwgJGl0ZW0tPmRpc3BsYXlfdXJsLCAkaXRlbS0+aW5kaWNlc1sxXSk7CgkJCX0KCQl9CgoJCWtyc29ydCgkYWxsKTsKCQkkcyA9ICRzdGF0dXMtPnRleHQ7CgkJZm9yZWFjaCAoJGFsbCBhcyAkcG9zID0+ICRpdGVtKSB7CgkJCSRzID0gaWNvbnZfc3Vic3RyKCRzLCAwLCAkcG9zLCAnVVRGLTgnKQoJCQkJLiAnPGEgaHJlZj0iJyAuIGh0bWxzcGVjaWFsY2hhcnMoJGl0ZW1bMF0pIC4gJyI+JyAuIGh0bWxzcGVjaWFsY2hhcnMoJGl0ZW1bMV0pIC4gJzwvYT4nCgkJCQkuIGljb252X3N1YnN0cigkcywgJGl0ZW1bMl0sIGljb252X3N0cmxlbigkcywgJ1VURi04JyksICdVVEYtOCcpOwoJCX0KCQlyZXR1cm4gJHM7Cgl9CgoKCXByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGNsaWNrYWJsZUNhbGxiYWNrKCRtKQoJewoJCSRtID0gaHRtbHNwZWNpYWxjaGFycygkbVswXSk7CgkJaWYgKCRtWzBdID09PSAnIycpIHsKCQkJJG0gPSBzdWJzdHIoJG0sIDEpOwoJCQlyZXR1cm4gIjxhIGhyZWY9J2h0dHA6Ly90d2l0dGVyLmNvbS9zZWFyY2g/cT0lMjMkbSc+IyRtPC9hPiI7CgkJfSBlbHNlaWYgKCRtWzBdID09PSAnQCcpIHsKCQkJJG0gPSBzdWJzdHIoJG0sIDEpOwoJCQlyZXR1cm4gIkA8YSBocmVmPSdodHRwOi8vdHdpdHRlci5jb20vJG0nPiRtPC9hPiI7CgkJfSBlbHNlaWYgKCRtWzBdID09PSAndycpIHsKCQkJcmV0dXJuICI8YSBocmVmPSdodHRwOi8vJG0nPiRtPC9hPiI7CgkJfSBlbHNlaWYgKCRtWzBdID09PSAnaCcpIHsKCQkJcmV0dXJuICI8YSBocmVmPSckbSc+JG08L2E+IjsKCQl9IGVsc2UgewoJCQlyZXR1cm4gJG07CgkJfQoJfQoKfQoKCi8qKgogKiBBbiBleGNlcHRpb24gZ2VuZXJhdGVkIGJ5IFR3aXR0ZXIuCiAqLwpjbGFzcyBUd2l0dGVyRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uCnsKfQoKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/class.TwitterCredential.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmNsYXNzIFR3aXR0ZXJDcmVkZW50aWFsIGV4dGVuZHMgVFR3aXR0ZXIKewoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRjb25zdW1lcktleSwgJGNvbnN1bWVyU2VjcmV0LCAkYWNjZXNzVG9rZW4gPSBOVUxMLCAkYWNjZXNzVG9rZW5TZWNyZXQgPSBOVUxMKSB7CgkJcGFyZW50OjpfX2NvbnN0cnVjdCgkY29uc3VtZXJLZXksICRjb25zdW1lclNlY3JldCwgJGFjY2Vzc1Rva2VuLCAkYWNjZXNzVG9rZW5TZWNyZXQpOwoJfQoKCS8qKgoJICogUmVkaXJlY3QgdG8gVHdpdHRlciB0byBnZXQgdGVtcG9yYXJ5IGFjY2VzcyB0b2tlbgoJICogQHBhcmFtIHN0cmluZywgZnVsbHkgcXVhbGlmaWVkIFVSTCB0byByZXR1cm4gdG8gZnJvbSBUd2l0dGVyLCBiZXN0IGlmIGh0dHBzOi8vLi4uLgoJICogQHBhcmFtIG9wdGlvbmFsIHN0cmluZywgYWNjb3VudCBuYW1lIGZvciBpbmNsdXNpb24gaW4gVHdpdHRlciBzaWduLWluIGZvcm0KCSAqIEByZXR1cm4gZXJyb3IgbWVzc2FnZSBzdHJpbmcgaWYgcmVkaXJlY3Rpb24gaW1wb3NzaWJsZQoJICovCglwdWJsaWMgZnVuY3Rpb24gZ29nZXRUb2tlbigkY2FsbGJhY2ssJG5hbWU9RkFMU0UpIHsKCQl0cnkgewoJCQkkcmVzdWx0cyA9ICR0aGlzLT5yZXF1ZXN0KAoJCQkJJ2h0dHBzOi8vYXBpLnR3aXR0ZXIuY29tL29hdXRoL3JlcXVlc3RfdG9rZW4nLCAvL292ZXJyaWRlIHBhcmVudCdzIFVSTC1jb25zdHJ1Y3RvcgoJCQkJJ1BPU1QnLCBhcnJheSgnb2F1dGhfY2FsbGJhY2snPT4kY2FsbGJhY2spKTsKCQl9IGNhdGNoIChUd2l0dGVyRXhjZXB0aW9uICRlKSB7CgkJCXJldHVybiAkZS0+Z2V0TWVzc2FnZSgpOwoJCX0KCQlpZigkcmVzdWx0cykgewoJCQkkdG9rZW4gPSBUd2l0dGVyX09BdXRoVXRpbDo6cGFyc2VfcGFyYW1ldGVycygkcmVzdWx0cyk7CgkJCWlmIChpc19hcnJheSgkdG9rZW4pICYmIGlzc2V0KCR0b2tlblsnb2F1dGhfY2FsbGJhY2tfY29uZmlybWVkJ10pCgkJCQkJJiYgJHRva2VuWydvYXV0aF9jYWxsYmFja19jb25maXJtZWQnXSA9PSAndHJ1ZScpIHsKCQkJCSR1cmwgPSAnaHR0cHM6Ly9hcGkudHdpdHRlci5jb20vb2F1dGgvYXV0aGVudGljYXRlJy4KCQkJCQknP29hdXRoX2NvbnN1bWVyX2tleT0nLiR0aGlzLT5jb25zdW1lci0+a2V5LgoJCQkJCScmb2F1dGhfdG9rZW49Jy4kdG9rZW5bJ29hdXRoX3Rva2VuJ10uCgkJCQkJJyZvYXV0aF90b2tlbl9zZWNyZXQ9Jy4kdG9rZW5bJ29hdXRoX3Rva2VuX3NlY3JldCddLgoJCQkJCScmZm9yY2VfbG9naW49MSc7CgkJCQlpZigkbmFtZSkKCQkJCQkkdXJsIC49ICcmc2NyZWVuX25hbWU9Jy4kbmFtZTsKCQkJCWhlYWRlcignTG9jYXRpb246ICcuJHVybCk7CgkJCQlleGl0OwoJCQl9CgkJfQoJCXJldHVybiAnVHdpdHRlciBhdXRob3JpdHktcmVxdWVzdCBmYWlsZWQnOwoJfQoKCS8qKgoJICogR2V0ICdlbmR1cmluZycgYWNjZXNzIHRva2VuIGFuZCBzZWNyZXQKCSAqIEBwYXJhbSBzdHJpbmcsIHRva2VuIHJldHVybmVkIGJ5IFR3aXR0ZXIKCSAqIEByZXR1cm4gYXNzb2NpYXRpdmUgYXJyYXkgd2l0aCBrZXlzOiBvYXV0aF90b2tlbiwgb2F1dGhfdG9rZW5fc2VjcmV0LCBzY3JlZW5fbmFtZQoJICogICBvciBlcnJvciBtZXNzYWdlIHN0cmluZwoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0QXV0aG9yaXR5KCR2ZXJpZmllcikgewoJCXRyeSB7CgkJCSRyZXN1bHRzID0gJHRoaXMtPnJlcXVlc3QoCgkJCQknaHR0cHM6Ly9hcGkudHdpdHRlci5jb20vb2F1dGgvYWNjZXNzX3Rva2VuJywgLy9vdmVycmlkZSBwYXJlbnQncyBVUkwtY29uc3RydWN0b3IKCQkJCSdQT1NUJywgYXJyYXkoJ29hdXRoX3ZlcmlmaWVyJyA9PiAkdmVyaWZpZXIpKTsKCQl9IGNhdGNoIChUd2l0dGVyRXhjZXB0aW9uICRlKSB7CgkJCXJldHVybiAkZS0+Z2V0TWVzc2FnZSgpOwoJCX0KCQlpZigkcmVzdWx0cykgewoJCQkkdG9rZW4gPSBUd2l0dGVyX09BdXRoVXRpbDo6cGFyc2VfcGFyYW1ldGVycygkcmVzdWx0cyk7CgkJCWlmIChpc19hcnJheSgkdG9rZW4pICYmIGlzc2V0KCR0b2tlblsnb2F1dGhfdG9rZW4nXSkpIHsKCQkJCXVuc2V0KCR0b2tlblsndXNlcl9pZCddKTsKCQkJCXJldHVybiAkdG9rZW47CgkJCX0KCQl9CgkJcmV0dXJuICdUd2l0dGVyIGF1dGhvcml0eS1yZXF1ZXN0IGZhaWxlZCc7Cgl9Cn0KCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lib/OAuth.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qClRoZSBNSVQgTGljZW5zZQoKQ29weXJpZ2h0IChjKSAyMDA3IEFuZHkgU21pdGgKClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgpUSEUgU09GVFdBUkUuCiovCgovKiBHZW5lcmljIGV4Y2VwdGlvbiBjbGFzcwogKi8KY2xhc3MgVHdpdHRlcl9PQXV0aEV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbgp7CgkvLyBwYXNzCn0KCmNsYXNzIFR3aXR0ZXJfT0F1dGhDb25zdW1lcgp7CglwdWJsaWMgJGtleTsKCXB1YmxpYyAkc2VjcmV0OwoJcHVibGljICRjYWxsYmFja191cmw7CgoJZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGtleSwgJHNlY3JldCwgJGNhbGxiYWNrX3VybD1OVUxMKSB7CgkJJHRoaXMtPmtleSA9ICRrZXk7CgkJJHRoaXMtPnNlY3JldCA9ICRzZWNyZXQ7CgkJJHRoaXMtPmNhbGxiYWNrX3VybCA9ICRjYWxsYmFja191cmw7Cgl9CgoKCWZ1bmN0aW9uIF9fdG9TdHJpbmcoKSB7CgkJcmV0dXJuICJPQXV0aENvbnN1bWVyW2tleT0kdGhpcy0+a2V5LHNlY3JldD0kdGhpcy0+c2VjcmV0XSI7Cgl9Cn0KCmNsYXNzIFR3aXR0ZXJfT0F1dGhUb2tlbgp7CgkvLyBhY2Nlc3MgdG9rZW5zIGFuZCByZXF1ZXN0IHRva2VucwoJcHVibGljICRrZXk7CglwdWJsaWMgJHNlY3JldDsKCgkvKioKCSAqIGtleSA9IHRoZSB0b2tlbgoJICogc2VjcmV0ID0gdGhlIHRva2VuIHNlY3JldAoJICovCglmdW5jdGlvbiBfX2NvbnN0cnVjdCgka2V5LCAkc2VjcmV0KSB7CgkJJHRoaXMtPmtleSA9ICRrZXk7CgkJJHRoaXMtPnNlY3JldCA9ICRzZWNyZXQ7Cgl9CgoKCS8qKgoJICogZ2VuZXJhdGVzIHRoZSBiYXNpYyBzdHJpbmcgc2VyaWFsaXphdGlvbiBvZiBhIHRva2VuIHRoYXQgYSBzZXJ2ZXIKCSAqIHdvdWxkIHJlc3BvbmQgdG8gcmVxdWVzdF90b2tlbiBhbmQgYWNjZXNzX3Rva2VuIGNhbGxzIHdpdGgKCSAqLwoJZnVuY3Rpb24gdG9fc3RyaW5nKCkgewoJCXJldHVybiAib2F1dGhfdG9rZW49IiAuCgkJCQlUd2l0dGVyX09BdXRoVXRpbDo6dXJsZW5jb2RlX3JmYzM5ODYoJHRoaXMtPmtleSkgLgoJCQkJIiZvYXV0aF90b2tlbl9zZWNyZXQ9IiAuCgkJCQlUd2l0dGVyX09BdXRoVXRpbDo6dXJsZW5jb2RlX3JmYzM5ODYoJHRoaXMtPnNlY3JldCk7Cgl9CgoKCWZ1bmN0aW9uIF9fdG9TdHJpbmcoKSB7CgkJcmV0dXJuICR0aGlzLT50b19zdHJpbmcoKTsKCX0KfQoKLyoqCiAqIEEgY2xhc3MgZm9yIGltcGxlbWVudGluZyBhIFNpZ25hdHVyZSBNZXRob2QKICogU2VlIHNlY3Rpb24gOSAoIlNpZ25pbmcgUmVxdWVzdHMiKSBpbiB0aGUgc3BlYwogKi8KYWJzdHJhY3QgY2xhc3MgVHdpdHRlcl9PQXV0aFNpZ25hdHVyZU1ldGhvZAp7CgkvKioKCSAqIE5lZWRzIHRvIHJldHVybiB0aGUgbmFtZSBvZiB0aGUgU2lnbmF0dXJlIE1ldGhvZCAoaWUgSE1BQy1TSEExKQoJICogQHJldHVybiBzdHJpbmcKCSAqLwoJYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGdldF9uYW1lKCk7CgoJLyoqCgkgKiBCdWlsZCB1cCB0aGUgc2lnbmF0dXJlCgkgKiBOT1RFOiBUaGUgb3V0cHV0IG9mIHRoaXMgZnVuY3Rpb24gTVVTVCBOT1QgYmUgdXJsZW5jb2RlZC4KCSAqIHRoZSBlbmNvZGluZyBpcyBoYW5kbGVkIGluIE9BdXRoUmVxdWVzdCB3aGVuIHRoZSBmaW5hbAoJICogcmVxdWVzdCBpcyBzZXJpYWxpemVkCgkgKiBAcGFyYW0gVHdpdHRlcl9PQXV0aFJlcXVlc3QgJHJlcXVlc3QKCSAqIEBwYXJhbSBUd2l0dGVyX09BdXRoQ29uc3VtZXIgJGNvbnN1bWVyCgkgKiBAcGFyYW0gVHdpdHRlcl9PQXV0aFRva2VuICR0b2tlbgoJICogQHJldHVybiBzdHJpbmcKCSAqLwoJYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGJ1aWxkX3NpZ25hdHVyZSgkcmVxdWVzdCwgJGNvbnN1bWVyLCAkdG9rZW4pOwoKCS8qKgoJICogVmVyaWZpZXMgdGhhdCBhIGdpdmVuIHNpZ25hdHVyZSBpcyBjb3JyZWN0CgkgKiBAcGFyYW0gVHdpdHRlcl9PQXV0aFJlcXVlc3QgJHJlcXVlc3QKCSAqIEBwYXJhbSBUd2l0dGVyX09BdXRoQ29uc3VtZXIgJGNvbnN1bWVyCgkgKiBAcGFyYW0gVHdpdHRlcl9PQXV0aFRva2VuICR0b2tlbgoJICogQHBhcmFtIHN0cmluZyAkc2lnbmF0dXJlCgkgKiBAcmV0dXJuIGJvb2wKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGNoZWNrX3NpZ25hdHVyZSgkcmVxdWVzdCwgJGNvbnN1bWVyLCAkdG9rZW4sICRzaWduYXR1cmUpIHsKCQkkYnVpbHQgPSAkdGhpcy0+YnVpbGRfc2lnbmF0dXJlKCRyZXF1ZXN0LCAkY29uc3VtZXIsICR0b2tlbik7CgkJcmV0dXJuICRidWlsdCA9PSAkc2lnbmF0dXJlOwoJfQp9CgovKioKICogVGhlIEhNQUMtU0hBMSBzaWduYXR1cmUgbWV0aG9kIHVzZXMgdGhlIEhNQUMtU0hBMSBzaWduYXR1cmUgYWxnb3JpdGhtIGFzIGRlZmluZWQgaW4gW1JGQzIxMDRdCiAqIHdoZXJlIHRoZSBTaWduYXR1cmUgQmFzZSBTdHJpbmcgaXMgdGhlIHRleHQgYW5kIHRoZSBrZXkgaXMgdGhlIGNvbmNhdGVuYXRlZCB2YWx1ZXMgKGVhY2ggZmlyc3QKICogZW5jb2RlZCBwZXIgUGFyYW1ldGVyIEVuY29kaW5nKSBvZiB0aGUgQ29uc3VtZXIgU2VjcmV0IGFuZCBUb2tlbiBTZWNyZXQsIHNlcGFyYXRlZCBieSBhbiAnJicKICogY2hhcmFjdGVyIChBU0NJSSBjb2RlIDM4KSBldmVuIGlmIGVtcHR5LgogKiAgIC0gQ2hhcHRlciA5LjIgKCJITUFDLVNIQTEiKQogKi8KY2xhc3MgVHdpdHRlcl9PQXV0aFNpZ25hdHVyZU1ldGhvZF9ITUFDX1NIQTEgZXh0ZW5kcyBUd2l0dGVyX09BdXRoU2lnbmF0dXJlTWV0aG9kCnsKCWZ1bmN0aW9uIGdldF9uYW1lKCkgewoJCXJldHVybiAiSE1BQy1TSEExIjsKCX0KCgoJcHVibGljIGZ1bmN0aW9uIGJ1aWxkX3NpZ25hdHVyZSgkcmVxdWVzdCwgJGNvbnN1bWVyLCAkdG9rZW4pIHsKCQkkYmFzZV9zdHJpbmcgPSAkcmVxdWVzdC0+Z2V0X3NpZ25hdHVyZV9iYXNlX3N0cmluZygpOwoJCSRyZXF1ZXN0LT5iYXNlX3N0cmluZyA9ICRiYXNlX3N0cmluZzsKCgkJJGtleV9wYXJ0cyA9IGFycmF5KAoJCQkkY29uc3VtZXItPnNlY3JldCwKCQkJKCR0b2tlbikgPyAkdG9rZW4tPnNlY3JldCA6ICIiCgkJKTsKCgkJJGtleV9wYXJ0cyA9IFR3aXR0ZXJfT0F1dGhVdGlsOjp1cmxlbmNvZGVfcmZjMzk4Nigka2V5X3BhcnRzKTsKCQkka2V5ID0gaW1wbG9kZSgnJicsICRrZXlfcGFydHMpOwoKCQlyZXR1cm4gYmFzZTY0X2VuY29kZShoYXNoX2htYWMoJ3NoYTEnLCAkYmFzZV9zdHJpbmcsICRrZXksIHRydWUpKTsKCX0KfQoKLyoqCiAqIFRoZSBQTEFJTlRFWFQgbWV0aG9kIGRvZXMgbm90IHByb3ZpZGUgYW55IHNlY3VyaXR5IHByb3RlY3Rpb24gYW5kIFNIT1VMRCBvbmx5IGJlIHVzZWQKICogb3ZlciBhIHNlY3VyZSBjaGFubmVsIHN1Y2ggYXMgSFRUUFMuIEl0IGRvZXMgbm90IHVzZSB0aGUgU2lnbmF0dXJlIEJhc2UgU3RyaW5nLgogKiAgIC0gQ2hhcHRlciA5LjQgKCJQTEFJTlRFWFQiKQogKi8KY2xhc3MgVHdpdHRlcl9PQXV0aFNpZ25hdHVyZU1ldGhvZF9QTEFJTlRFWFQgZXh0ZW5kcyBUd2l0dGVyX09BdXRoU2lnbmF0dXJlTWV0aG9kCnsKCXB1YmxpYyBmdW5jdGlvbiBnZXRfbmFtZSgpIHsKCQlyZXR1cm4gIlBMQUlOVEVYVCI7Cgl9CgoKCS8qKgoJICogb2F1dGhfc2lnbmF0dXJlIGlzIHNldCB0byB0aGUgY29uY2F0ZW5hdGVkIGVuY29kZWQgdmFsdWVzIG9mIHRoZSBDb25zdW1lciBTZWNyZXQgYW5kCgkgKiBUb2tlbiBTZWNyZXQsIHNlcGFyYXRlZCBieSBhICcmJyBjaGFyYWN0ZXIgKEFTQ0lJIGNvZGUgMzgpLCBldmVuIGlmIGVpdGhlciBzZWNyZXQgaXMKCSAqIGVtcHR5LiBUaGUgcmVzdWx0IE1VU1QgYmUgZW5jb2RlZCBhZ2Fpbi4KCSAqICAgLSBDaGFwdGVyIDkuNC4xICgiR2VuZXJhdGluZyBTaWduYXR1cmVzIikKCSAqCgkgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBzZWNvbmQgZW5jb2RpbmcgTVVTVCBOT1QgaGFwcGVuIGluIHRoZSBTaWduYXR1cmVNZXRob2QsIGFzCgkgKiBPQXV0aFJlcXVlc3QgaGFuZGxlcyB0aGlzIQoJICovCglwdWJsaWMgZnVuY3Rpb24gYnVpbGRfc2lnbmF0dXJlKCRyZXF1ZXN0LCAkY29uc3VtZXIsICR0b2tlbikgewoJCSRrZXlfcGFydHMgPSBhcnJheSgKCQkJJGNvbnN1bWVyLT5zZWNyZXQsCgkJCSgkdG9rZW4pID8gJHRva2VuLT5zZWNyZXQgOiAiIgoJCSk7CgoJCSRrZXlfcGFydHMgPSBUd2l0dGVyX09BdXRoVXRpbDo6dXJsZW5jb2RlX3JmYzM5ODYoJGtleV9wYXJ0cyk7CgkJJGtleSA9IGltcGxvZGUoJyYnLCAka2V5X3BhcnRzKTsKCQkkcmVxdWVzdC0+YmFzZV9zdHJpbmcgPSAka2V5OwoKCQlyZXR1cm4gJGtleTsKCX0KfQoKLyoqCiAqIFRoZSBSU0EtU0hBMSBzaWduYXR1cmUgbWV0aG9kIHVzZXMgdGhlIFJTQVNTQS1QS0NTMS12MV81IHNpZ25hdHVyZSBhbGdvcml0aG0gYXMgZGVmaW5lZCBpbgogKiBbUkZDMzQ0N10gc2VjdGlvbiA4LjIgKG1vcmUgc2ltcGx5IGtub3duIGFzIFBLQ1MjMSksIHVzaW5nIFNIQS0xIGFzIHRoZSBoYXNoIGZ1bmN0aW9uIGZvcgogKiBFTVNBLVBLQ1MxLXYxXzUuIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgQ29uc3VtZXIgaGFzIHByb3ZpZGVkIGl0cyBSU0EgcHVibGljIGtleSBpbiBhCiAqIHZlcmlmaWVkIHdheSB0byB0aGUgU2VydmljZSBQcm92aWRlciwgaW4gYSBtYW5uZXIgd2hpY2ggaXMgYmV5b25kIHRoZSBzY29wZSBvZiB0aGlzCiAqIHNwZWNpZmljYXRpb24uCiAqICAgLSBDaGFwdGVyIDkuMyAoIlJTQS1TSEExIikKICovCmFic3RyYWN0IGNsYXNzIFR3aXR0ZXJfT0F1dGhTaWduYXR1cmVNZXRob2RfUlNBX1NIQTEgZXh0ZW5kcyBUd2l0dGVyX09BdXRoU2lnbmF0dXJlTWV0aG9kCnsKCXB1YmxpYyBmdW5jdGlvbiBnZXRfbmFtZSgpIHsKCQlyZXR1cm4gIlJTQS1TSEExIjsKCX0KCgkvLyBVcCB0byB0aGUgU1AgdG8gaW1wbGVtZW50IHRoaXMgbG9va3VwIG9mIGtleXMuIFBvc3NpYmxlIGlkZWFzIGFyZToKCS8vICgxKSBkbyBhIGxvb2t1cCBpbiBhIHRhYmxlIG9mIHRydXN0ZWQgY2VydHMga2V5ZWQgb2ZmIG9mIGNvbnN1bWVyCgkvLyAoMikgZmV0Y2ggdmlhIGh0dHAgdXNpbmcgYSB1cmwgcHJvdmlkZWQgYnkgdGhlIHJlcXVlc3RlcgoJLy8gKDMpIHNvbWUgc29ydCBvZiBzcGVjaWZpYyBkaXNjb3ZlcnkgY29kZSBiYXNlZCBvbiByZXF1ZXN0CgkvLwoJLy8gRWl0aGVyIHdheSBzaG91bGQgcmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjZXJ0aWZpY2F0ZQoJcHJvdGVjdGVkIGFic3RyYWN0IGZ1bmN0aW9uIGZldGNoX3B1YmxpY19jZXJ0KCYkcmVxdWVzdCk7CgoJLy8gVXAgdG8gdGhlIFNQIHRvIGltcGxlbWVudCB0aGlzIGxvb2t1cCBvZiBrZXlzLiBQb3NzaWJsZSBpZGVhcyBhcmU6CgkvLyAoMSkgZG8gYSBsb29rdXAgaW4gYSB0YWJsZSBvZiB0cnVzdGVkIGNlcnRzIGtleWVkIG9mZiBvZiBjb25zdW1lcgoJLy8KCS8vIEVpdGhlciB3YXkgc2hvdWxkIHJldHVybiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY2VydGlmaWNhdGUKCXByb3RlY3RlZCBhYnN0cmFjdCBmdW5jdGlvbiBmZXRjaF9wcml2YXRlX2NlcnQoJiRyZXF1ZXN0KTsKCglwdWJsaWMgZnVuY3Rpb24gYnVpbGRfc2lnbmF0dXJlKCRyZXF1ZXN0LCAkY29uc3VtZXIsICR0b2tlbikgewoJCSRiYXNlX3N0cmluZyA9ICRyZXF1ZXN0LT5nZXRfc2lnbmF0dXJlX2Jhc2Vfc3RyaW5nKCk7CgkJJHJlcXVlc3QtPmJhc2Vfc3RyaW5nID0gJGJhc2Vfc3RyaW5nOwoKCQkvLyBGZXRjaCB0aGUgcHJpdmF0ZSBrZXkgY2VydCBiYXNlZCBvbiB0aGUgcmVxdWVzdAoJCSRjZXJ0ID0gJHRoaXMtPmZldGNoX3ByaXZhdGVfY2VydCgkcmVxdWVzdCk7CgoJCS8vIFB1bGwgdGhlIHByaXZhdGUga2V5IElEIGZyb20gdGhlIGNlcnRpZmljYXRlCgkJJHByaXZhdGVrZXlpZCA9IG9wZW5zc2xfZ2V0X3ByaXZhdGVrZXkoJGNlcnQpOwoKCQkvLyBTaWduIHVzaW5nIHRoZSBrZXkKCQkkb2sgPSBvcGVuc3NsX3NpZ24oJGJhc2Vfc3RyaW5nLCAkc2lnbmF0dXJlLCAkcHJpdmF0ZWtleWlkKTsKCgkJLy8gUmVsZWFzZSB0aGUga2V5IHJlc291cmNlCgkJb3BlbnNzbF9mcmVlX2tleSgkcHJpdmF0ZWtleWlkKTsKCgkJcmV0dXJuIGJhc2U2NF9lbmNvZGUoJHNpZ25hdHVyZSk7Cgl9CgoKCXB1YmxpYyBmdW5jdGlvbiBjaGVja19zaWduYXR1cmUoJHJlcXVlc3QsICRjb25zdW1lciwgJHRva2VuLCAkc2lnbmF0dXJlKSB7CgkJJGRlY29kZWRfc2lnID0gYmFzZTY0X2RlY29kZSgkc2lnbmF0dXJlKTsKCgkJJGJhc2Vfc3RyaW5nID0gJHJlcXVlc3QtPmdldF9zaWduYXR1cmVfYmFzZV9zdHJpbmcoKTsKCgkJLy8gRmV0Y2ggdGhlIHB1YmxpYyBrZXkgY2VydCBiYXNlZCBvbiB0aGUgcmVxdWVzdAoJCSRjZXJ0ID0gJHRoaXMtPmZldGNoX3B1YmxpY19jZXJ0KCRyZXF1ZXN0KTsKCgkJLy8gUHVsbCB0aGUgcHVibGljIGtleSBJRCBmcm9tIHRoZSBjZXJ0aWZpY2F0ZQoJCSRwdWJsaWNrZXlpZCA9IG9wZW5zc2xfZ2V0X3B1YmxpY2tleSgkY2VydCk7CgoJCS8vIENoZWNrIHRoZSBjb21wdXRlZCBzaWduYXR1cmUgYWdhaW5zdCB0aGUgb25lIHBhc3NlZCBpbiB0aGUgcXVlcnkKCQkkb2sgPSBvcGVuc3NsX3ZlcmlmeSgkYmFzZV9zdHJpbmcsICRkZWNvZGVkX3NpZywgJHB1YmxpY2tleWlkKTsKCgkJLy8gUmVsZWFzZSB0aGUga2V5IHJlc291cmNlCgkJb3BlbnNzbF9mcmVlX2tleSgkcHVibGlja2V5aWQpOwoKCQlyZXR1cm4gJG9rID09IDE7Cgl9Cn0KCmNsYXNzIFR3aXR0ZXJfT0F1dGhSZXF1ZXN0CnsKCXByb3RlY3RlZCAkcGFyYW1ldGVyczsKCXByb3RlY3RlZCAkaHR0cF9tZXRob2Q7Cglwcm90ZWN0ZWQgJGh0dHBfdXJsOwoJLy8gZm9yIGRlYnVnIHB1cnBvc2VzCglwdWJsaWMgJGJhc2Vfc3RyaW5nOwoJcHVibGljIHN0YXRpYyAkdmVyc2lvbiA9ICcxLjAnOwoJcHVibGljIHN0YXRpYyAkUE9TVF9JTlBVVCA9ICdwaHA6Ly9pbnB1dCc7CgoJZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGh0dHBfbWV0aG9kLCAkaHR0cF91cmwsICRwYXJhbWV0ZXJzPU5VTEwpIHsKCQkkcGFyYW1ldGVycyA9ICgkcGFyYW1ldGVycykgPyAkcGFyYW1ldGVycyA6IGFycmF5KCk7CgkJJHBhcmFtZXRlcnMgPSBhcnJheV9tZXJnZSggVHdpdHRlcl9PQXV0aFV0aWw6OnBhcnNlX3BhcmFtZXRlcnMocGFyc2VfdXJsKCRodHRwX3VybCwgUEhQX1VSTF9RVUVSWSkpLCAkcGFyYW1ldGVycyk7CgkJJHRoaXMtPnBhcmFtZXRlcnMgPSAkcGFyYW1ldGVyczsKCQkkdGhpcy0+aHR0cF9tZXRob2QgPSAkaHR0cF9tZXRob2Q7CgkJJHRoaXMtPmh0dHBfdXJsID0gJGh0dHBfdXJsOwoJfQoKCgkvKioKCSAqIGF0dGVtcHQgdG8gYnVpbGQgdXAgYSByZXF1ZXN0IGZyb20gd2hhdCB3YXMgcGFzc2VkIHRvIHRoZSBzZXJ2ZXIKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tX3JlcXVlc3QoJGh0dHBfbWV0aG9kPU5VTEwsICRodHRwX3VybD1OVUxMLCAkcGFyYW1ldGVycz1OVUxMKSB7CgkJJHNjaGVtZSA9ICghaXNzZXQoJF9TRVJWRVJbJ0hUVFBTJ10pIHx8ICRfU0VSVkVSWydIVFRQUyddICE9ICJvbiIpCgkJCQkJPyAnaHR0cCcKCQkJCQk6ICdodHRwcyc7CgkJJGh0dHBfdXJsID0gKCRodHRwX3VybCkgPyAkaHR0cF91cmwgOiAkc2NoZW1lIC4KCQkJCQknOi8vJyAuICRfU0VSVkVSWydIVFRQX0hPU1QnXSAuCgkJCQkJJzonIC4KCQkJCQkkX1NFUlZFUlsnU0VSVkVSX1BPUlQnXSAuCgkJCQkJJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ107CgkJJGh0dHBfbWV0aG9kID0gKCRodHRwX21ldGhvZCkgPyAkaHR0cF9tZXRob2QgOiAkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXTsKCgkJLy8gV2Ugd2VyZW4ndCBoYW5kZWQgYW55IHBhcmFtZXRlcnMsIHNvIGxldCdzIGZpbmQgdGhlIG9uZXMgcmVsZXZhbnQgdG8KCQkvLyB0aGlzIHJlcXVlc3QuCgkJLy8gSWYgeW91IHJ1biBYTUwtUlBDIG9yIHNpbWlsYXIgeW91IHNob3VsZCB1c2UgdGhpcyB0byBwcm92aWRlIHlvdXIgb3duCgkJLy8gcGFyc2VkIHBhcmFtZXRlci1saXN0CgkJaWYgKCEkcGFyYW1ldGVycykgewoJCQkvLyBGaW5kIHJlcXVlc3QgaGVhZGVycwoJCQkkcmVxdWVzdF9oZWFkZXJzID0gVHdpdHRlcl9PQXV0aFV0aWw6OmdldF9oZWFkZXJzKCk7CgoJCQkvLyBQYXJzZSB0aGUgcXVlcnktc3RyaW5nIHRvIGZpbmQgR0VUIHBhcmFtZXRlcnMKCQkJJHBhcmFtZXRlcnMgPSBUd2l0dGVyX09BdXRoVXRpbDo6cGFyc2VfcGFyYW1ldGVycygkX1NFUlZFUlsnUVVFUllfU1RSSU5HJ10pOwoKCQkJLy8gSXQncyBhIFBPU1QgcmVxdWVzdCBvZiB0aGUgcHJvcGVyIGNvbnRlbnQtdHlwZSwgc28gcGFyc2UgUE9TVAoJCQkvLyBwYXJhbWV0ZXJzIGFuZCBhZGQgdGhvc2Ugb3ZlcnJpZGluZyBhbnkgZHVwbGljYXRlcyBmcm9tIEdFVAoJCQlpZiAoJGh0dHBfbWV0aG9kID09ICJQT1NUIgoJCQkJCSYmICBpc3NldCgkcmVxdWVzdF9oZWFkZXJzWydDb250ZW50LVR5cGUnXSkKCQkJCQkmJiBzdHJzdHIoJHJlcXVlc3RfaGVhZGVyc1snQ29udGVudC1UeXBlJ10sCgkJCQkJCQknYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykKCQkJCQkpIHsKCQkJCSRwb3N0X2RhdGEgPSBUd2l0dGVyX09BdXRoVXRpbDo6cGFyc2VfcGFyYW1ldGVycygKCQkJCQlmaWxlX2dldF9jb250ZW50cyhzZWxmOjokUE9TVF9JTlBVVCkKCQkJCSk7CgkJCQkkcGFyYW1ldGVycyA9IGFycmF5X21lcmdlKCRwYXJhbWV0ZXJzLCAkcG9zdF9kYXRhKTsKCQkJfQoKCQkJLy8gV2UgaGF2ZSBhIEF1dGhvcml6YXRpb24taGVhZGVyIHdpdGggT0F1dGggZGF0YS4gUGFyc2UgdGhlIGhlYWRlcgoJCQkvLyBhbmQgYWRkIHRob3NlIG92ZXJyaWRpbmcgYW55IGR1cGxpY2F0ZXMgZnJvbSBHRVQgb3IgUE9TVAoJCQlpZiAoaXNzZXQoJHJlcXVlc3RfaGVhZGVyc1snQXV0aG9yaXphdGlvbiddKSAmJiBzdWJzdHIoJHJlcXVlc3RfaGVhZGVyc1snQXV0aG9yaXphdGlvbiddLCAwLCA2KSA9PSAnT0F1dGggJykgewoJCQkJJGhlYWRlcl9wYXJhbWV0ZXJzID0gVHdpdHRlcl9PQXV0aFV0aWw6OnNwbGl0X2hlYWRlcigKCQkJCQkkcmVxdWVzdF9oZWFkZXJzWydBdXRob3JpemF0aW9uJ10KCQkJCSk7CgkJCQkkcGFyYW1ldGVycyA9IGFycmF5X21lcmdlKCRwYXJhbWV0ZXJzLCAkaGVhZGVyX3BhcmFtZXRlcnMpOwoJCQl9CgoJCX0KCgkJcmV0dXJuIG5ldyBUd2l0dGVyX09BdXRoUmVxdWVzdCgkaHR0cF9tZXRob2QsICRodHRwX3VybCwgJHBhcmFtZXRlcnMpOwoJfQoKCgkvKioKCSAqIHByZXR0eSBtdWNoIGEgaGVscGVyIGZ1bmN0aW9uIHRvIHNldCB1cCB0aGUgcmVxdWVzdAoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21fY29uc3VtZXJfYW5kX3Rva2VuKCRjb25zdW1lciwgJHRva2VuLCAkaHR0cF9tZXRob2QsICRodHRwX3VybCwgJHBhcmFtZXRlcnM9TlVMTCkgewoJCSRkZWZhdWx0cyA9IGFycmF5KAoJCQknb2F1dGhfdmVyc2lvbicgPT4gVHdpdHRlcl9PQXV0aFJlcXVlc3Q6OiR2ZXJzaW9uLAoJCQknb2F1dGhfbm9uY2UnID0+IFR3aXR0ZXJfT0F1dGhSZXF1ZXN0OjpnZW5lcmF0ZV9ub25jZSgpLAoJCQknb2F1dGhfdGltZXN0YW1wJyA9PiBUd2l0dGVyX09BdXRoUmVxdWVzdDo6Z2VuZXJhdGVfdGltZXN0YW1wKCksCgkJCSdvYXV0aF9jb25zdW1lcl9rZXknID0+ICRjb25zdW1lci0+a2V5KTsKCQlpZiAoJHRva2VuKQoJCQkkZGVmYXVsdHNbJ29hdXRoX3Rva2VuJ10gPSAkdG9rZW4tPmtleTsKCgkJaWYgKGlzX2FycmF5KCRwYXJhbWV0ZXJzKSkKCQkJJGRlZmF1bHRzICs9ICRwYXJhbWV0ZXJzOwoKCQlyZXR1cm4gbmV3IFR3aXR0ZXJfT0F1dGhSZXF1ZXN0KCRodHRwX21ldGhvZCwgJGh0dHBfdXJsLCAkZGVmYXVsdHMpOwoJfQoKCglwdWJsaWMgZnVuY3Rpb24gc2V0X3BhcmFtZXRlcigkbmFtZSwgJHZhbHVlLCAkYWxsb3dfZHVwbGljYXRlcyA9IHRydWUpIHsKCQlpZiAoJGFsbG93X2R1cGxpY2F0ZXMgJiYgaXNzZXQoJHRoaXMtPnBhcmFtZXRlcnNbJG5hbWVdKSkgewoJCQkvLyBXZSBoYXZlIGFscmVhZHkgYWRkZWQgcGFyYW1ldGVyKHMpIHdpdGggdGhpcyBuYW1lLCBzbyBhZGQgdG8gdGhlIGxpc3QKCQkJaWYgKGlzX3NjYWxhcigkdGhpcy0+cGFyYW1ldGVyc1skbmFtZV0pKSB7CgkJCQkvLyBUaGlzIGlzIHRoZSBmaXJzdCBkdXBsaWNhdGUsIHNvIHRyYW5zZm9ybSBzY2FsYXIgKHN0cmluZykKCQkJCS8vIGludG8gYW4gYXJyYXkgc28gd2UgY2FuIGFkZCB0aGUgZHVwbGljYXRlcwoJCQkJJHRoaXMtPnBhcmFtZXRlcnNbJG5hbWVdID0gYXJyYXkoJHRoaXMtPnBhcmFtZXRlcnNbJG5hbWVdKTsKCQkJfQoKCQkJJHRoaXMtPnBhcmFtZXRlcnNbJG5hbWVdW10gPSAkdmFsdWU7CgkJfSBlbHNlIHsKCQkJJHRoaXMtPnBhcmFtZXRlcnNbJG5hbWVdID0gJHZhbHVlOwoJCX0KCX0KCgoJcHVibGljIGZ1bmN0aW9uIGdldF9wYXJhbWV0ZXIoJG5hbWUpIHsKCQlyZXR1cm4gaXNzZXQoJHRoaXMtPnBhcmFtZXRlcnNbJG5hbWVdKSA/ICR0aGlzLT5wYXJhbWV0ZXJzWyRuYW1lXSA6IG51bGw7Cgl9CgoKCXB1YmxpYyBmdW5jdGlvbiBnZXRfcGFyYW1ldGVycygpIHsKCQlyZXR1cm4gJHRoaXMtPnBhcmFtZXRlcnM7Cgl9CgoKCXB1YmxpYyBmdW5jdGlvbiB1bnNldF9wYXJhbWV0ZXIoJG5hbWUpIHsKCQl1bnNldCgkdGhpcy0+cGFyYW1ldGVyc1skbmFtZV0pOwoJfQoKCgkvKioKCSAqIFRoZSByZXF1ZXN0IHBhcmFtZXRlcnMsIHNvcnRlZCBhbmQgY29uY2F0ZW5hdGVkIGludG8gYSBub3JtYWxpemVkIHN0cmluZy4KCSAqIEByZXR1cm4gc3RyaW5nCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfc2lnbmFibGVfcGFyYW1ldGVycygpIHsKCQkvLyBHcmFiIGFsbCBwYXJhbWV0ZXJzCgkJJHBhcmFtcyA9ICR0aGlzLT5wYXJhbWV0ZXJzOwoKCQkvLyBSZW1vdmUgb2F1dGhfc2lnbmF0dXJlIGlmIHByZXNlbnQKCQkvLyBSZWY6IFNwZWM6IDkuMS4xICgiVGhlIG9hdXRoX3NpZ25hdHVyZSBwYXJhbWV0ZXIgTVVTVCBiZSBleGNsdWRlZC4iKQoJCWlmIChpc3NldCgkcGFyYW1zWydvYXV0aF9zaWduYXR1cmUnXSkpIHsKCQkJdW5zZXQoJHBhcmFtc1snb2F1dGhfc2lnbmF0dXJlJ10pOwoJCX0KCgkJcmV0dXJuIFR3aXR0ZXJfT0F1dGhVdGlsOjpidWlsZF9odHRwX3F1ZXJ5KCRwYXJhbXMpOwoJfQoKCgkvKioKCSAqIFJldHVybnMgdGhlIGJhc2Ugc3RyaW5nIG9mIHRoaXMgcmVxdWVzdAoJICoKCSAqIFRoZSBiYXNlIHN0cmluZyBkZWZpbmVkIGFzIHRoZSBtZXRob2QsIHRoZSB1cmwKCSAqIGFuZCB0aGUgcGFyYW1ldGVycyAobm9ybWFsaXplZCksIGVhY2ggdXJsZW5jb2RlZAoJICogYW5kIHRoZSBjb25jYXRlZCB3aXRoICYuCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfc2lnbmF0dXJlX2Jhc2Vfc3RyaW5nKCkgewoJCSRwYXJ0cyA9IGFycmF5KAoJCQkkdGhpcy0+Z2V0X25vcm1hbGl6ZWRfaHR0cF9tZXRob2QoKSwKCQkJJHRoaXMtPmdldF9ub3JtYWxpemVkX2h0dHBfdXJsKCksCgkJCSR0aGlzLT5nZXRfc2lnbmFibGVfcGFyYW1ldGVycygpCgkJKTsKCgkJJHBhcnRzID0gVHdpdHRlcl9PQXV0aFV0aWw6OnVybGVuY29kZV9yZmMzOTg2KCRwYXJ0cyk7CgoJCXJldHVybiBpbXBsb2RlKCcmJywgJHBhcnRzKTsKCX0KCgoJLyoqCgkgKiBqdXN0IHVwcGVyY2FzZXMgdGhlIGh0dHAgbWV0aG9kCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfbm9ybWFsaXplZF9odHRwX21ldGhvZCgpIHsKCQlyZXR1cm4gc3RydG91cHBlcigkdGhpcy0+aHR0cF9tZXRob2QpOwoJfQoKCgkvKioKCSAqIHBhcnNlcyB0aGUgdXJsIGFuZCByZWJ1aWxkcyBpdCB0byBiZQoJICogc2NoZW1lOi8vaG9zdC9wYXRoCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfbm9ybWFsaXplZF9odHRwX3VybCgpIHsKCQkkcGFydHMgPSBwYXJzZV91cmwoJHRoaXMtPmh0dHBfdXJsKTsKCgkJJHNjaGVtZSA9IChpc3NldCgkcGFydHNbJ3NjaGVtZSddKSkgPyAkcGFydHNbJ3NjaGVtZSddIDogJ2h0dHAnOwoJCSRwb3J0ID0gKGlzc2V0KCRwYXJ0c1sncG9ydCddKSkgPyAkcGFydHNbJ3BvcnQnXSA6ICgoJHNjaGVtZSA9PSAnaHR0cHMnKSA/ICc0NDMnIDogJzgwJyk7CgkJJGhvc3QgPSAoaXNzZXQoJHBhcnRzWydob3N0J10pKSA/ICRwYXJ0c1snaG9zdCddIDogJyc7CgkJJHBhdGggPSAoaXNzZXQoJHBhcnRzWydwYXRoJ10pKSA/ICRwYXJ0c1sncGF0aCddIDogJyc7CgoJCWlmICgoJHNjaGVtZSA9PSAnaHR0cHMnICYmICRwb3J0ICE9ICc0NDMnKQoJCQkJfHwgKCRzY2hlbWUgPT0gJ2h0dHAnICYmICRwb3J0ICE9ICc4MCcpKSB7CgkJCSRob3N0ID0gIiRob3N0OiRwb3J0IjsKCQl9CgkJcmV0dXJuICIkc2NoZW1lOi8vJGhvc3QkcGF0aCI7Cgl9CgoKCS8qKgoJICogYnVpbGRzIGEgdXJsIHVzYWJsZSBmb3IgYSBHRVQgcmVxdWVzdAoJICovCglwdWJsaWMgZnVuY3Rpb24gdG9fdXJsKCkgewoJCSRwb3N0X2RhdGEgPSAkdGhpcy0+dG9fcG9zdGRhdGEoKTsKCQkkb3V0ID0gJHRoaXMtPmdldF9ub3JtYWxpemVkX2h0dHBfdXJsKCk7CgkJaWYgKCRwb3N0X2RhdGEpIHsKCQkJJG91dCAuPSAnPycuJHBvc3RfZGF0YTsKCQl9CgkJcmV0dXJuICRvdXQ7Cgl9CgoKCS8qKgoJICogYnVpbGRzIHRoZSBkYXRhIG9uZSB3b3VsZCBzZW5kIGluIGEgUE9TVCByZXF1ZXN0CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB0b19wb3N0ZGF0YSgpIHsKCQlyZXR1cm4gVHdpdHRlcl9PQXV0aFV0aWw6OmJ1aWxkX2h0dHBfcXVlcnkoJHRoaXMtPnBhcmFtZXRlcnMpOwoJfQoKCgkvKioKCSAqIGJ1aWxkcyB0aGUgQXV0aG9yaXphdGlvbjogaGVhZGVyCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB0b19oZWFkZXIoJHJlYWxtPW51bGwpIHsKCQkkZmlyc3QgPSB0cnVlOwoJCWlmKCRyZWFsbSkgewoJCQkkb3V0ID0gJ0F1dGhvcml6YXRpb246IE9BdXRoIHJlYWxtPSInIC4gVHdpdHRlcl9PQXV0aFV0aWw6OnVybGVuY29kZV9yZmMzOTg2KCRyZWFsbSkgLiAnIic7CgkJCSRmaXJzdCA9IGZhbHNlOwoJCX0gZWxzZQoJCQkkb3V0ID0gJ0F1dGhvcml6YXRpb246IE9BdXRoJzsKCgkJJHRvdGFsID0gYXJyYXkoKTsKCQlmb3JlYWNoICgkdGhpcy0+cGFyYW1ldGVycyBhcyAkayA9PiAkdikgewoJCQlpZiAoc3Vic3RyKCRrLCAwLCA1KSAhPSAib2F1dGgiKSBjb250aW51ZTsKCQkJaWYgKGlzX2FycmF5KCR2KSkgewoJCQkJdGhyb3cgbmV3IFR3aXR0ZXJfT0F1dGhFeGNlcHRpb24oJ0FycmF5cyBub3Qgc3VwcG9ydGVkIGluIGhlYWRlcnMnKTsKCQkJfQoJCQkkb3V0IC49ICgkZmlyc3QpID8gJyAnIDogJywnOwoJCQkkb3V0IC49IFR3aXR0ZXJfT0F1dGhVdGlsOjp1cmxlbmNvZGVfcmZjMzk4NigkaykgLgoJCQkJCSc9IicgLgoJCQkJCVR3aXR0ZXJfT0F1dGhVdGlsOjp1cmxlbmNvZGVfcmZjMzk4NigkdikgLgoJCQkJCSciJzsKCQkJJGZpcnN0ID0gZmFsc2U7CgkJfQoJCXJldHVybiAkb3V0OwoJfQoKCglwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpIHsKCQlyZXR1cm4gJHRoaXMtPnRvX3VybCgpOwoJfQoKCglwdWJsaWMgZnVuY3Rpb24gc2lnbl9yZXF1ZXN0KCRzaWduYXR1cmVfbWV0aG9kLCAkY29uc3VtZXIsICR0b2tlbikgewoJCSR0aGlzLT5zZXRfcGFyYW1ldGVyKAoJCQkib2F1dGhfc2lnbmF0dXJlX21ldGhvZCIsCgkJCSRzaWduYXR1cmVfbWV0aG9kLT5nZXRfbmFtZSgpLAoJCQlmYWxzZQoJCSk7CgkJJHNpZ25hdHVyZSA9ICR0aGlzLT5idWlsZF9zaWduYXR1cmUoJHNpZ25hdHVyZV9tZXRob2QsICRjb25zdW1lciwgJHRva2VuKTsKCQkkdGhpcy0+c2V0X3BhcmFtZXRlcigib2F1dGhfc2lnbmF0dXJlIiwgJHNpZ25hdHVyZSwgZmFsc2UpOwoJfQoKCglwdWJsaWMgZnVuY3Rpb24gYnVpbGRfc2lnbmF0dXJlKCRzaWduYXR1cmVfbWV0aG9kLCAkY29uc3VtZXIsICR0b2tlbikgewoJCSRzaWduYXR1cmUgPSAkc2lnbmF0dXJlX21ldGhvZC0+YnVpbGRfc2lnbmF0dXJlKCR0aGlzLCAkY29uc3VtZXIsICR0b2tlbik7CgkJcmV0dXJuICRzaWduYXR1cmU7Cgl9CgoKCS8qKgoJICogdXRpbCBmdW5jdGlvbjogY3VycmVudCB0aW1lc3RhbXAKCSAqLwoJcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZ2VuZXJhdGVfdGltZXN0YW1wKCkgewoJCXJldHVybiB0aW1lKCk7Cgl9CgoKCS8qKgoJICogdXRpbCBmdW5jdGlvbjogY3VycmVudCBub25jZQoJICovCglwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBnZW5lcmF0ZV9ub25jZSgpIHsKCQkkbXQgPSBtaWNyb3RpbWUoKTsKCQkkcmFuZCA9IG10X3JhbmQoKTsKCgkJcmV0dXJuIG1kNSgkbXQgLiAkcmFuZCk7IC8vIG1kNXMgbG9vayBuaWNlciB0aGFuIG51bWJlcnMKCX0KfQoKY2xhc3MgVHdpdHRlcl9PQXV0aFNlcnZlcgp7Cglwcm90ZWN0ZWQgJHRpbWVzdGFtcF90aHJlc2hvbGQgPSAzMDA7IC8vIGluIHNlY29uZHMsIGZpdmUgbWludXRlcwoJcHJvdGVjdGVkICR2ZXJzaW9uID0gJzEuMCc7ICAgICAgICAgICAgIC8vIGhpIGJsYWluZQoJcHJvdGVjdGVkICRzaWduYXR1cmVfbWV0aG9kcyA9IGFycmF5KCk7CgoJcHJvdGVjdGVkICRkYXRhX3N0b3JlOwoKCWZ1bmN0aW9uIF9fY29uc3RydWN0KCRkYXRhX3N0b3JlKSB7CgkJJHRoaXMtPmRhdGFfc3RvcmUgPSAkZGF0YV9zdG9yZTsKCX0KCgoJcHVibGljIGZ1bmN0aW9uIGFkZF9zaWduYXR1cmVfbWV0aG9kKCRzaWduYXR1cmVfbWV0aG9kKSB7CgkJJHRoaXMtPnNpZ25hdHVyZV9tZXRob2RzWyRzaWduYXR1cmVfbWV0aG9kLT5nZXRfbmFtZSgpXSA9CgkJCSRzaWduYXR1cmVfbWV0aG9kOwoJfQoKCS8vIGhpZ2ggbGV2ZWwgZnVuY3Rpb25zCgoJLyoqCgkgKiBwcm9jZXNzIGEgcmVxdWVzdF90b2tlbiByZXF1ZXN0CgkgKiByZXR1cm5zIHRoZSByZXF1ZXN0IHRva2VuIG9uIHN1Y2Nlc3MKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGZldGNoX3JlcXVlc3RfdG9rZW4oJiRyZXF1ZXN0KSB7CgkJJHRoaXMtPmdldF92ZXJzaW9uKCRyZXF1ZXN0KTsKCgkJJGNvbnN1bWVyID0gJHRoaXMtPmdldF9jb25zdW1lcigkcmVxdWVzdCk7CgoJCS8vIG5vIHRva2VuIHJlcXVpcmVkIGZvciB0aGUgaW5pdGlhbCB0b2tlbiByZXF1ZXN0CgkJJHRva2VuID0gTlVMTDsKCgkJJHRoaXMtPmNoZWNrX3NpZ25hdHVyZSgkcmVxdWVzdCwgJGNvbnN1bWVyLCAkdG9rZW4pOwoKCQkvLyBSZXYgQSBjaGFuZ2UKCQkkY2FsbGJhY2sgPSAkcmVxdWVzdC0+Z2V0X3BhcmFtZXRlcignb2F1dGhfY2FsbGJhY2snKTsKCQkkbmV3X3Rva2VuID0gJHRoaXMtPmRhdGFfc3RvcmUtPm5ld19yZXF1ZXN0X3Rva2VuKCRjb25zdW1lciwgJGNhbGxiYWNrKTsKCgkJcmV0dXJuICRuZXdfdG9rZW47Cgl9CgoKCS8qKgoJICogcHJvY2VzcyBhbiBhY2Nlc3NfdG9rZW4gcmVxdWVzdAoJICogcmV0dXJucyB0aGUgYWNjZXNzIHRva2VuIG9uIHN1Y2Nlc3MKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGZldGNoX2FjY2Vzc190b2tlbigmJHJlcXVlc3QpIHsKCQkkdGhpcy0+Z2V0X3ZlcnNpb24oJHJlcXVlc3QpOwoKCQkkY29uc3VtZXIgPSAkdGhpcy0+Z2V0X2NvbnN1bWVyKCRyZXF1ZXN0KTsKCgkJLy8gcmVxdWlyZXMgYXV0aG9yaXplZCByZXF1ZXN0IHRva2VuCgkJJHRva2VuID0gJHRoaXMtPmdldF90b2tlbigkcmVxdWVzdCwgJGNvbnN1bWVyLCAicmVxdWVzdCIpOwoKCQkkdGhpcy0+Y2hlY2tfc2lnbmF0dXJlKCRyZXF1ZXN0LCAkY29uc3VtZXIsICR0b2tlbik7CgoJCS8vIFJldiBBIGNoYW5nZQoJCSR2ZXJpZmllciA9ICRyZXF1ZXN0LT5nZXRfcGFyYW1ldGVyKCdvYXV0aF92ZXJpZmllcicpOwoJCSRuZXdfdG9rZW4gPSAkdGhpcy0+ZGF0YV9zdG9yZS0+bmV3X2FjY2Vzc190b2tlbigkdG9rZW4sICRjb25zdW1lciwgJHZlcmlmaWVyKTsKCgkJcmV0dXJuICRuZXdfdG9rZW47Cgl9CgoKCS8qKgoJICogdmVyaWZ5IGFuIGFwaSBjYWxsLCBjaGVja3MgYWxsIHRoZSBwYXJhbWV0ZXJzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB2ZXJpZnlfcmVxdWVzdCgmJHJlcXVlc3QpIHsKCQkkdGhpcy0+Z2V0X3ZlcnNpb24oJHJlcXVlc3QpOwoJCSRjb25zdW1lciA9ICR0aGlzLT5nZXRfY29uc3VtZXIoJHJlcXVlc3QpOwoJCSR0b2tlbiA9ICR0aGlzLT5nZXRfdG9rZW4oJHJlcXVlc3QsICRjb25zdW1lciwgImFjY2VzcyIpOwoJCSR0aGlzLT5jaGVja19zaWduYXR1cmUoJHJlcXVlc3QsICRjb25zdW1lciwgJHRva2VuKTsKCQlyZXR1cm4gYXJyYXkoJGNvbnN1bWVyLCAkdG9rZW4pOwoJfQoKCS8vIEludGVybmFscyBmcm9tIGhlcmUKCS8qKgoJICogdmVyc2lvbiAxCgkgKi8KCXByaXZhdGUgZnVuY3Rpb24gZ2V0X3ZlcnNpb24oJiRyZXF1ZXN0KSB7CgkJJHZlcnNpb24gPSAkcmVxdWVzdC0+Z2V0X3BhcmFtZXRlcigib2F1dGhfdmVyc2lvbiIpOwoJCWlmICghJHZlcnNpb24pIHsKCQkJLy8gU2VydmljZSBQcm92aWRlcnMgTVVTVCBhc3N1bWUgdGhlIHByb3RvY29sIHZlcnNpb24gdG8gYmUgMS4wIGlmIHRoaXMgcGFyYW1ldGVyIGlzIG5vdCBwcmVzZW50LgoJCQkvLyBDaGFwdGVyIDcuMCAoIkFjY2Vzc2luZyBQcm90ZWN0ZWQgUmVzc291cmNlcyIpCgkJCSR2ZXJzaW9uID0gJzEuMCc7CgkJfQoJCWlmICgkdmVyc2lvbiAhPT0gJHRoaXMtPnZlcnNpb24pIHsKCQkJdGhyb3cgbmV3IFR3aXR0ZXJfT0F1dGhFeGNlcHRpb24oIk9BdXRoIHZlcnNpb24gJyR2ZXJzaW9uJyBub3Qgc3VwcG9ydGVkIik7CgkJfQoJCXJldHVybiAkdmVyc2lvbjsKCX0KCgoJLyoqCgkgKiBmaWd1cmUgb3V0IHRoZSBzaWduYXR1cmUgd2l0aCBzb21lIGRlZmF1bHRzCgkgKi8KCXByaXZhdGUgZnVuY3Rpb24gZ2V0X3NpZ25hdHVyZV9tZXRob2QoJHJlcXVlc3QpIHsKCQkkc2lnbmF0dXJlX21ldGhvZCA9ICRyZXF1ZXN0IGluc3RhbmNlb2YgVHdpdHRlcl9PQXV0aFJlcXVlc3QKCQkJCT8gJHJlcXVlc3QtPmdldF9wYXJhbWV0ZXIoIm9hdXRoX3NpZ25hdHVyZV9tZXRob2QiKQoJCQkJOiBOVUxMOwoKCQlpZiAoISRzaWduYXR1cmVfbWV0aG9kKSB7CgkJCS8vIEFjY29yZGluZyB0byBjaGFwdGVyIDcgKCJBY2Nlc3NpbmcgUHJvdGVjdGVkIFJlc3NvdXJjZXMiKSB0aGUgc2lnbmF0dXJlLW1ldGhvZAoJCQkvLyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQsIGFuZCB3ZSBjYW4ndCBqdXN0IGZhbGxiYWNrIHRvIFBMQUlOVEVYVAoJCQl0aHJvdyBuZXcgVHdpdHRlcl9PQXV0aEV4Y2VwdGlvbignTm8gc2lnbmF0dXJlIG1ldGhvZCBwYXJhbWV0ZXIuIFRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkJyk7CgkJfQoKCQlpZiAoIWluX2FycmF5KCRzaWduYXR1cmVfbWV0aG9kLAoJCQkJCQkJCQlhcnJheV9rZXlzKCR0aGlzLT5zaWduYXR1cmVfbWV0aG9kcykpKSB7CgkJCXRocm93IG5ldyBUd2l0dGVyX09BdXRoRXhjZXB0aW9uKAoJCQkJIlNpZ25hdHVyZSBtZXRob2QgJyRzaWduYXR1cmVfbWV0aG9kJyBub3Qgc3VwcG9ydGVkICIgLgoJCQkJInRyeSBvbmUgb2YgdGhlIGZvbGxvd2luZzogIiAuCgkJCQlpbXBsb2RlKCIsICIsIGFycmF5X2tleXMoJHRoaXMtPnNpZ25hdHVyZV9tZXRob2RzKSkKCQkJKTsKCQl9CgkJcmV0dXJuICR0aGlzLT5zaWduYXR1cmVfbWV0aG9kc1skc2lnbmF0dXJlX21ldGhvZF07Cgl9CgoKCS8qKgoJICogdHJ5IHRvIGZpbmQgdGhlIGNvbnN1bWVyIGZvciB0aGUgcHJvdmlkZWQgcmVxdWVzdCdzIGNvbnN1bWVyIGtleQoJICovCglwcml2YXRlIGZ1bmN0aW9uIGdldF9jb25zdW1lcigkcmVxdWVzdCkgewoJCSRjb25zdW1lcl9rZXkgPSAkcmVxdWVzdCBpbnN0YW5jZW9mIFR3aXR0ZXJfT0F1dGhSZXF1ZXN0CgkJCQk/ICRyZXF1ZXN0LT5nZXRfcGFyYW1ldGVyKCJvYXV0aF9jb25zdW1lcl9rZXkiKQoJCQkJOiBOVUxMOwoKCQlpZiAoISRjb25zdW1lcl9rZXkpIHsKCQkJdGhyb3cgbmV3IFR3aXR0ZXJfT0F1dGhFeGNlcHRpb24oIkludmFsaWQgY29uc3VtZXIga2V5Iik7CgkJfQoKCQkkY29uc3VtZXIgPSAkdGhpcy0+ZGF0YV9zdG9yZS0+bG9va3VwX2NvbnN1bWVyKCRjb25zdW1lcl9rZXkpOwoJCWlmICghJGNvbnN1bWVyKSB7CgkJCXRocm93IG5ldyBUd2l0dGVyX09BdXRoRXhjZXB0aW9uKCJJbnZhbGlkIGNvbnN1bWVyIik7CgkJfQoKCQlyZXR1cm4gJGNvbnN1bWVyOwoJfQoKCgkvKioKCSAqIHRyeSB0byBmaW5kIHRoZSB0b2tlbiBmb3IgdGhlIHByb3ZpZGVkIHJlcXVlc3QncyB0b2tlbiBrZXkKCSAqLwoJcHJpdmF0ZSBmdW5jdGlvbiBnZXRfdG9rZW4oJHJlcXVlc3QsICRjb25zdW1lciwgJHRva2VuX3R5cGU9ImFjY2VzcyIpIHsKCQkkdG9rZW5fZmllbGQgPSAkcmVxdWVzdCBpbnN0YW5jZW9mIFR3aXR0ZXJfT0F1dGhSZXF1ZXN0CgkJCQk/ICRyZXF1ZXN0LT5nZXRfcGFyYW1ldGVyKCdvYXV0aF90b2tlbicpCgkJCQk6IE5VTEw7CgoJCSR0b2tlbiA9ICR0aGlzLT5kYXRhX3N0b3JlLT5sb29rdXBfdG9rZW4oCgkJCSRjb25zdW1lciwgJHRva2VuX3R5cGUsICR0b2tlbl9maWVsZAoJCSk7CgkJaWYgKCEkdG9rZW4pIHsKCQkJdGhyb3cgbmV3IFR3aXR0ZXJfT0F1dGhFeGNlcHRpb24oIkludmFsaWQgJHRva2VuX3R5cGUgdG9rZW46ICR0b2tlbl9maWVsZCIpOwoJCX0KCQlyZXR1cm4gJHRva2VuOwoJfQoKCgkvKioKCSAqIGFsbC1pbi1vbmUgZnVuY3Rpb24gdG8gY2hlY2sgdGhlIHNpZ25hdHVyZSBvbiBhIHJlcXVlc3QKCSAqIHNob3VsZCBndWVzcyB0aGUgc2lnbmF0dXJlIG1ldGhvZCBhcHByb3ByaWF0ZWx5CgkgKi8KCXByaXZhdGUgZnVuY3Rpb24gY2hlY2tfc2lnbmF0dXJlKCRyZXF1ZXN0LCAkY29uc3VtZXIsICR0b2tlbikgewoJCS8vIHRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIGluIGEgZGlmZmVyZW50IG1ldGhvZAoJCSR0aW1lc3RhbXAgPSAkcmVxdWVzdCBpbnN0YW5jZW9mIFR3aXR0ZXJfT0F1dGhSZXF1ZXN0CgkJCQk/ICRyZXF1ZXN0LT5nZXRfcGFyYW1ldGVyKCdvYXV0aF90aW1lc3RhbXAnKQoJCQkJOiBOVUxMOwoJCSRub25jZSA9ICRyZXF1ZXN0IGluc3RhbmNlb2YgVHdpdHRlcl9PQXV0aFJlcXVlc3QKCQkJCT8gJHJlcXVlc3QtPmdldF9wYXJhbWV0ZXIoJ29hdXRoX25vbmNlJykKCQkJCTogTlVMTDsKCgkJJHRoaXMtPmNoZWNrX3RpbWVzdGFtcCgkdGltZXN0YW1wKTsKCQkkdGhpcy0+Y2hlY2tfbm9uY2UoJGNvbnN1bWVyLCAkdG9rZW4sICRub25jZSwgJHRpbWVzdGFtcCk7CgoJCSRzaWduYXR1cmVfbWV0aG9kID0gJHRoaXMtPmdldF9zaWduYXR1cmVfbWV0aG9kKCRyZXF1ZXN0KTsKCgkJJHNpZ25hdHVyZSA9ICRyZXF1ZXN0LT5nZXRfcGFyYW1ldGVyKCdvYXV0aF9zaWduYXR1cmUnKTsKCQkkdmFsaWRfc2lnID0gJHNpZ25hdHVyZV9tZXRob2QtPmNoZWNrX3NpZ25hdHVyZSgKCQkJJHJlcXVlc3QsCgkJCSRjb25zdW1lciwKCQkJJHRva2VuLAoJCQkkc2lnbmF0dXJlCgkJKTsKCgkJaWYgKCEkdmFsaWRfc2lnKSB7CgkJCXRocm93IG5ldyBUd2l0dGVyX09BdXRoRXhjZXB0aW9uKCJJbnZhbGlkIHNpZ25hdHVyZSIpOwoJCX0KCX0KCgoJLyoqCgkgKiBjaGVjayB0aGF0IHRoZSB0aW1lc3RhbXAgaXMgbmV3IGVub3VnaAoJICovCglwcml2YXRlIGZ1bmN0aW9uIGNoZWNrX3RpbWVzdGFtcCgkdGltZXN0YW1wKSB7CgkJaWYoICEgJHRpbWVzdGFtcCApCgkJCXRocm93IG5ldyBUd2l0dGVyX09BdXRoRXhjZXB0aW9uKAoJCQkJJ01pc3NpbmcgdGltZXN0YW1wIHBhcmFtZXRlci4gVGhlIHBhcmFtZXRlciBpcyByZXF1aXJlZCcKCQkJKTsKCgkJLy8gdmVyaWZ5IHRoYXQgdGltZXN0YW1wIGlzIHJlY2VudGlzaAoJCSRub3cgPSB0aW1lKCk7CgkJaWYgKGFicygkbm93IC0gJHRpbWVzdGFtcCkgPiAkdGhpcy0+dGltZXN0YW1wX3RocmVzaG9sZCkgewoJCQl0aHJvdyBuZXcgVHdpdHRlcl9PQXV0aEV4Y2VwdGlvbigKCQkJCSJFeHBpcmVkIHRpbWVzdGFtcCwgeW91cnMgJHRpbWVzdGFtcCwgb3VycyAkbm93IgoJCQkpOwoJCX0KCX0KCgoJLyoqCgkgKiBjaGVjayB0aGF0IHRoZSBub25jZSBpcyBub3QgcmVwZWF0ZWQKCSAqLwoJcHJpdmF0ZSBmdW5jdGlvbiBjaGVja19ub25jZSgkY29uc3VtZXIsICR0b2tlbiwgJG5vbmNlLCAkdGltZXN0YW1wKSB7CgkJaWYoICEgJG5vbmNlICkKCQkJdGhyb3cgbmV3IFR3aXR0ZXJfT0F1dGhFeGNlcHRpb24oCgkJCQknTWlzc2luZyBub25jZSBwYXJhbWV0ZXIuIFRoZSBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQnCgkJCSk7CgoJCS8vIHZlcmlmeSB0aGF0IHRoZSBub25jZSBpcyB1bmlxdWVpc2gKCQkkZm91bmQgPSAkdGhpcy0+ZGF0YV9zdG9yZS0+bG9va3VwX25vbmNlKAoJCQkkY29uc3VtZXIsCgkJCSR0b2tlbiwKCQkJJG5vbmNlLAoJCQkkdGltZXN0YW1wCgkJKTsKCQlpZiAoJGZvdW5kKSB7CgkJCXRocm93IG5ldyBUd2l0dGVyX09BdXRoRXhjZXB0aW9uKCJOb25jZSBhbHJlYWR5IHVzZWQ6ICRub25jZSIpOwoJCX0KCX0KCn0KCmNsYXNzIFR3aXR0ZXJfT0F1dGhEYXRhU3RvcmUKewoJZnVuY3Rpb24gbG9va3VwX2NvbnN1bWVyKCRjb25zdW1lcl9rZXkpIHsKCQkvLyBpbXBsZW1lbnQgbWUKCX0KCgoJZnVuY3Rpb24gbG9va3VwX3Rva2VuKCRjb25zdW1lciwgJHRva2VuX3R5cGUsICR0b2tlbikgewoJCS8vIGltcGxlbWVudCBtZQoJfQoKCglmdW5jdGlvbiBsb29rdXBfbm9uY2UoJGNvbnN1bWVyLCAkdG9rZW4sICRub25jZSwgJHRpbWVzdGFtcCkgewoJCS8vIGltcGxlbWVudCBtZQoJfQoKCglmdW5jdGlvbiBuZXdfcmVxdWVzdF90b2tlbigkY29uc3VtZXIsICRjYWxsYmFjayA9IG51bGwpIHsKCQkvLyByZXR1cm4gYSBuZXcgdG9rZW4gYXR0YWNoZWQgdG8gdGhpcyBjb25zdW1lcgoJfQoKCglmdW5jdGlvbiBuZXdfYWNjZXNzX3Rva2VuKCR0b2tlbiwgJGNvbnN1bWVyLCAkdmVyaWZpZXIgPSBudWxsKSB7CgkJLy8gcmV0dXJuIGEgbmV3IGFjY2VzcyB0b2tlbiBhdHRhY2hlZCB0byB0aGlzIGNvbnN1bWVyCgkJLy8gZm9yIHRoZSB1c2VyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRva2VuIGlmIHRoZSByZXF1ZXN0IHRva2VuCgkJLy8gaXMgYXV0aG9yaXplZAoJCS8vIHNob3VsZCBhbHNvIGludmFsaWRhdGUgdGhlIHJlcXVlc3QgdG9rZW4KCX0KCn0KCmNsYXNzIFR3aXR0ZXJfT0F1dGhVdGlsCnsKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXJsZW5jb2RlX3JmYzM5ODYoJGlucHV0KSB7CgkJaWYgKGlzX2FycmF5KCRpbnB1dCkpIHsKCQkJcmV0dXJuIGFycmF5X21hcChhcnJheSgnVHdpdHRlcl9PQXV0aFV0aWwnLCAndXJsZW5jb2RlX3JmYzM5ODYnKSwgJGlucHV0KTsKCQl9IGVsc2UgaWYgKGlzX3NjYWxhcigkaW5wdXQpKSB7CgkJCXJldHVybiBzdHJfcmVwbGFjZSgKCQkJCScrJywKCQkJCScgJywKCQkJCXN0cl9yZXBsYWNlKCclN0UnLCAnficsIHJhd3VybGVuY29kZSgkaW5wdXQpKQoJCQkpOwoJCX0gZWxzZSB7CgkJCXJldHVybiAnJzsKCQl9Cgl9CgoKCS8vIFRoaXMgZGVjb2RlIGZ1bmN0aW9uIGlzbid0IHRha2luZyBpbnRvIGNvbnNpZGVyYXRpb24gdGhlIGFib3ZlCgkvLyBtb2RpZmljYXRpb25zIHRvIHRoZSBlbmNvZGluZyBwcm9jZXNzLiBIb3dldmVyLCB0aGlzIG1ldGhvZCBkb2Vzbid0CgkvLyBzZWVtIHRvIGJlIHVzZWQgYW55d2hlcmUgc28gbGVhdmluZyBpdCBhcyBpcy4KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXJsZGVjb2RlX3JmYzM5ODYoJHN0cmluZykgewoJCXJldHVybiB1cmxkZWNvZGUoJHN0cmluZyk7Cgl9CgoJLy8gVXRpbGl0eSBmdW5jdGlvbiBmb3IgdHVybmluZyB0aGUgQXV0aG9yaXphdGlvbjogaGVhZGVyIGludG8KCS8vIHBhcmFtZXRlcnMsIGhhcyB0byBkbyBzb21lIHVuZXNjYXBpbmcKCS8vIENhbiBmaWx0ZXIgb3V0IGFueSBub24tb2F1dGggcGFyYW1ldGVycyBpZiBuZWVkZWQgKGRlZmF1bHQgYmVoYXZpb3VyKQoJLy8gTWF5IDI4dGgsIDIwMTAgLSBtZXRob2QgdXBkYXRlZCB0byB0amVyay5tZWVzdGVycyBmb3IgYSBzcGVlZCBpbXByb3ZlbWVudC4KCS8vICAgICAgICAgICAgICAgICAgc2VlIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9vYXV0aC9pc3N1ZXMvZGV0YWlsP2lkPTE2MwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzcGxpdF9oZWFkZXIoJGhlYWRlciwgJG9ubHlfYWxsb3dfb2F1dGhfcGFyYW1ldGVycyA9IHRydWUpIHsKCQkkcGFyYW1zID0gYXJyYXkoKTsKCQlpZiAocHJlZ19tYXRjaF9hbGwoJy8oJy4oJG9ubHlfYWxsb3dfb2F1dGhfcGFyYW1ldGVycyA/ICdvYXV0aF8nIDogJycpLidbYS16Xy1dKik9KDo/IihbXiJdKikifChbXixdKikpLycsICRoZWFkZXIsICRtYXRjaGVzKSkgewoJCQlmb3JlYWNoICgkbWF0Y2hlc1sxXSBhcyAkaSA9PiAkaCkgewoJCQkJJHBhcmFtc1skaF0gPSBUd2l0dGVyX09BdXRoVXRpbDo6dXJsZGVjb2RlX3JmYzM5ODYoZW1wdHkoJG1hdGNoZXNbM11bJGldKSA/ICRtYXRjaGVzWzRdWyRpXSA6ICRtYXRjaGVzWzNdWyRpXSk7CgkJCX0KCQkJaWYgKGlzc2V0KCRwYXJhbXNbJ3JlYWxtJ10pKSB7CgkJCQl1bnNldCgkcGFyYW1zWydyZWFsbSddKTsKCQkJfQoJCX0KCQlyZXR1cm4gJHBhcmFtczsKCX0KCgkvLyBoZWxwZXIgdG8gdHJ5IHRvIHNvcnQgb3V0IGhlYWRlcnMgZm9yIHBlb3BsZSB3aG8gYXJlbid0IHJ1bm5pbmcgYXBhY2hlCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9oZWFkZXJzKCkgewoJCWlmIChmdW5jdGlvbl9leGlzdHMoJ2FwYWNoZV9yZXF1ZXN0X2hlYWRlcnMnKSkgewoJCQkvLyB3ZSBuZWVkIHRoaXMgdG8gZ2V0IHRoZSBhY3R1YWwgQXV0aG9yaXphdGlvbjogaGVhZGVyCgkJCS8vIGJlY2F1c2UgYXBhY2hlIHRlbmRzIHRvIHRlbGwgdXMgaXQgZG9lc24ndCBleGlzdAoJCQkkaGVhZGVycyA9IGFwYWNoZV9yZXF1ZXN0X2hlYWRlcnMoKTsKCgkJCS8vIHNhbml0aXplIHRoZSBvdXRwdXQgb2YgYXBhY2hlX3JlcXVlc3RfaGVhZGVycyBiZWNhdXNlCgkJCS8vIHdlIGFsd2F5cyB3YW50IHRoZSBrZXlzIHRvIGJlIENhc2VkLUxpa2UtVGhpcyBhbmQgYXJoKCkKCQkJLy8gcmV0dXJucyB0aGUgaGVhZGVycyBpbiB0aGUgc2FtZSBjYXNlIGFzIHRoZXkgYXJlIGluIHRoZQoJCQkvLyByZXF1ZXN0CgkJCSRvdXQgPSBhcnJheSgpOwoJCQlmb3JlYWNoICgkaGVhZGVycyBBUyAka2V5ID0+ICR2YWx1ZSkgewoJCQkJJGtleSA9IHN0cl9yZXBsYWNlKAoJCQkJCQkiICIsCgkJCQkJCSItIiwKCQkJCQkJdWN3b3JkcyhzdHJ0b2xvd2VyKHN0cl9yZXBsYWNlKCItIiwgIiAiLCAka2V5KSkpCgkJCQkJKTsKCQkJCSRvdXRbJGtleV0gPSAkdmFsdWU7CgkJCX0KCQl9IGVsc2UgewoJCQkvLyBvdGhlcndpc2Ugd2UgZG9uJ3QgaGF2ZSBhcGFjaGUgYW5kIGFyZSBqdXN0IGdvaW5nIHRvIGhhdmUgdG8gaG9wZQoJCQkvLyB0aGF0ICRfU0VSVkVSIGFjdHVhbGx5IGNvbnRhaW5zIHdoYXQgd2UgbmVlZAoJCQkkb3V0ID0gYXJyYXkoKTsKCQkJaWYoIGlzc2V0KCRfU0VSVkVSWydDT05URU5UX1RZUEUnXSkgKQoJCQkJJG91dFsnQ29udGVudC1UeXBlJ10gPSAkX1NFUlZFUlsnQ09OVEVOVF9UWVBFJ107CgkJCWlmKCBpc3NldCgkX0VOVlsnQ09OVEVOVF9UWVBFJ10pICkKCQkJCSRvdXRbJ0NvbnRlbnQtVHlwZSddID0gJF9FTlZbJ0NPTlRFTlRfVFlQRSddOwoKCQkJZm9yZWFjaCAoJF9TRVJWRVIgYXMgJGtleSA9PiAkdmFsdWUpIHsKCQkJCWlmIChzdWJzdHIoJGtleSwgMCwgNSkgPT0gIkhUVFBfIikgewoJCQkJCS8vIHRoaXMgaXMgY2hhb3MsIGJhc2ljYWxseSBpdCBpcyBqdXN0IHRoZXJlIHRvIGNhcGl0YWxpemUgdGhlIGZpcnN0CgkJCQkJLy8gbGV0dGVyIG9mIGV2ZXJ5IHdvcmQgdGhhdCBpcyBub3QgYW4gaW5pdGlhbCBIVFRQIGFuZCBzdHJpcCBIVFRQCgkJCQkJLy8gY29kZSBmcm9tIHByemVtZWsKCQkJCQkka2V5ID0gc3RyX3JlcGxhY2UoCgkJCQkJCSIgIiwKCQkJCQkJIi0iLAoJCQkJCQl1Y3dvcmRzKHN0cnRvbG93ZXIoc3RyX3JlcGxhY2UoIl8iLCAiICIsIHN1YnN0cigka2V5LCA1KSkpKQoJCQkJCSk7CgkJCQkJJG91dFska2V5XSA9ICR2YWx1ZTsKCQkJCX0KCQkJfQoJCX0KCQlyZXR1cm4gJG91dDsKCX0KCgkvLyBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgaW5wdXQgbGlrZSBhPWImYT1jJmQ9ZSBhbmQgcmV0dXJucyB0aGUgcGFyc2VkCgkvLyBwYXJhbWV0ZXJzIGxpa2UgdGhpcwoJLy8gYXJyYXkoJ2EnID0+IGFycmF5KCdiJywnYycpLCAnZCcgPT4gJ2UnKQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZV9wYXJhbWV0ZXJzKCAkaW5wdXQgKSB7CgkJaWYgKCFpc3NldCgkaW5wdXQpIHx8ICEkaW5wdXQpIHJldHVybiBhcnJheSgpOwoKCQkkcGFpcnMgPSBleHBsb2RlKCcmJywgJGlucHV0KTsKCgkJJHBhcnNlZF9wYXJhbWV0ZXJzID0gYXJyYXkoKTsKCQlmb3JlYWNoICgkcGFpcnMgYXMgJHBhaXIpIHsKCQkJJHNwbGl0ID0gZXhwbG9kZSgnPScsICRwYWlyLCAyKTsKCQkJJHBhcmFtZXRlciA9IFR3aXR0ZXJfT0F1dGhVdGlsOjp1cmxkZWNvZGVfcmZjMzk4Nigkc3BsaXRbMF0pOwoJCQkkdmFsdWUgPSBpc3NldCgkc3BsaXRbMV0pID8gVHdpdHRlcl9PQXV0aFV0aWw6OnVybGRlY29kZV9yZmMzOTg2KCRzcGxpdFsxXSkgOiAnJzsKCgkJCWlmIChpc3NldCgkcGFyc2VkX3BhcmFtZXRlcnNbJHBhcmFtZXRlcl0pKSB7CgkJCQkvLyBXZSBoYXZlIGFscmVhZHkgcmVjaWV2ZWQgcGFyYW1ldGVyKHMpIHdpdGggdGhpcyBuYW1lLCBzbyBhZGQgdG8gdGhlIGxpc3QKCQkJCS8vIG9mIHBhcmFtZXRlcnMgd2l0aCB0aGlzIG5hbWUKCgkJCQlpZiAoaXNfc2NhbGFyKCRwYXJzZWRfcGFyYW1ldGVyc1skcGFyYW1ldGVyXSkpIHsKCQkJCQkvLyBUaGlzIGlzIHRoZSBmaXJzdCBkdXBsaWNhdGUsIHNvIHRyYW5zZm9ybSBzY2FsYXIgKHN0cmluZykgaW50byBhbiBhcnJheQoJCQkJCS8vIHNvIHdlIGNhbiBhZGQgdGhlIGR1cGxpY2F0ZXMKCQkJCQkkcGFyc2VkX3BhcmFtZXRlcnNbJHBhcmFtZXRlcl0gPSBhcnJheSgkcGFyc2VkX3BhcmFtZXRlcnNbJHBhcmFtZXRlcl0pOwoJCQkJfQoKCQkJCSRwYXJzZWRfcGFyYW1ldGVyc1skcGFyYW1ldGVyXVtdID0gJHZhbHVlOwoJCQl9IGVsc2UgewoJCQkJJHBhcnNlZF9wYXJhbWV0ZXJzWyRwYXJhbWV0ZXJdID0gJHZhbHVlOwoJCQl9CgkJfQoJCXJldHVybiAkcGFyc2VkX3BhcmFtZXRlcnM7Cgl9CgoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYnVpbGRfaHR0cF9xdWVyeSgkcGFyYW1zKSB7CgkJaWYgKCEkcGFyYW1zKSByZXR1cm4gJyc7CgoJCS8vIFVybGVuY29kZSBib3RoIGtleXMgYW5kIHZhbHVlcwoJCSRrZXlzID0gVHdpdHRlcl9PQXV0aFV0aWw6OnVybGVuY29kZV9yZmMzOTg2KGFycmF5X2tleXMoJHBhcmFtcykpOwoJCSR2YWx1ZXMgPSBUd2l0dGVyX09BdXRoVXRpbDo6dXJsZW5jb2RlX3JmYzM5ODYoYXJyYXlfdmFsdWVzKCRwYXJhbXMpKTsKCQkkcGFyYW1zID0gYXJyYXlfY29tYmluZSgka2V5cywgJHZhbHVlcyk7CgoJCS8vIFBhcmFtZXRlcnMgYXJlIHNvcnRlZCBieSBuYW1lLCB1c2luZyBsZXhpY29ncmFwaGljYWwgYnl0ZSB2YWx1ZSBvcmRlcmluZy4KCQkvLyBSZWY6IFNwZWM6IDkuMS4xICgxKQoJCXVrc29ydCgkcGFyYW1zLCAnc3RyY21wJyk7CgoJCSRwYWlycyA9IGFycmF5KCk7CgkJZm9yZWFjaCAoJHBhcmFtcyBhcyAkcGFyYW1ldGVyID0+ICR2YWx1ZSkgewoJCQlpZiAoaXNfYXJyYXkoJHZhbHVlKSkgewoJCQkJLy8gSWYgdHdvIG9yIG1vcmUgcGFyYW1ldGVycyBzaGFyZSB0aGUgc2FtZSBuYW1lLCB0aGV5IGFyZSBzb3J0ZWQgYnkgdGhlaXIgdmFsdWUKCQkJCS8vIFJlZjogU3BlYzogOS4xLjEgKDEpCgkJCQkvLyBKdW5lIDEydGgsIDIwMTAgLSBjaGFuZ2VkIHRvIHNvcnQgYmVjYXVzZSBvZiBpc3N1ZSAxNjQgYnkgaGlkZXRha2EKCQkJCXNvcnQoJHZhbHVlLCBTT1JUX1NUUklORyk7CgkJCQlmb3JlYWNoICgkdmFsdWUgYXMgJGR1cGxpY2F0ZV92YWx1ZSkgewoJCQkJCSRwYWlyc1tdID0gJHBhcmFtZXRlciAuICc9JyAuICRkdXBsaWNhdGVfdmFsdWU7CgkJCQl9CgkJCX0gZWxzZSB7CgkJCQkkcGFpcnNbXSA9ICRwYXJhbWV0ZXIgLiAnPScgLiAkdmFsdWU7CgkJCX0KCQl9CgkJLy8gRm9yIGVhY2ggcGFyYW1ldGVyLCB0aGUgbmFtZSBpcyBzZXBhcmF0ZWQgZnJvbSB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBieSBhbiAnPScgY2hhcmFjdGVyIChBU0NJSSBjb2RlIDYxKQoJCS8vIEVhY2ggbmFtZS12YWx1ZSBwYWlyIGlzIHNlcGFyYXRlZCBieSBhbiAnJicgY2hhcmFjdGVyIChBU0NJSSBjb2RlIDM4KQoJCXJldHVybiBpbXBsb2RlKCcmJywgJHBhaXJzKTsKCX0KfQo=]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKKi8KCmlmICghICR0aGlzLT5DaGVja0FjY2VzcygnYWRtaW4nKSkgcmV0dXJuOwoKJHRhYm9wdGFycmF5ID0gYXJyYXkoJ215c3FsJyA9PiAnRU5HSU5FIE15SVNBTSBDSEFSQUNURVIgU0VUIHV0ZjggQ09MTEFURSB1dGY4X2dlbmVyYWxfY2knLAogJ215c3FsaScgPT4gJ0VOR0lORSBNeUlTQU0gQ0hBUkFDVEVSIFNFVCB1dGY4IENPTExBVEUgdXRmOF9nZW5lcmFsX2NpJyk7CiRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKJHByZWYgPSBjbXNfZGJfcHJlZml4KCk7CgokZmxkcyA9ICIKCWJyYWNrZXRfaWQgSSBLRVksCglncm91cGlkIEkoMikgREVGQVVMVCAwLAoJdHlwZSBJKDEpIERFRkFVTFQgIi5Ub3VybmV5OjpLT1RZUEUuIiwKCW5hbWUgQygxMjgpLAoJYWxpYXMgQygyNCksCglkZXNjcmlwdGlvbiBYLAoJb3duZXIgQyg2NCksCgljb250YWN0IEMoODApLAoJbG9jYWxlIEMoMTIpLAoJdHd0ZnJvbSBDKDE4KSwKCXNtc2Zyb20gQygxOCksCglzbXNwcmVmaXggQyg2KSwKCXNtc3BhdHRlcm4gQygzMiksCglmZXVfZWRpdGdyb3VwIEMoNDgpLAoJc2VlZHR5cGUgSSgxKSwKCWZpeHR5cGUgSSgxKSBERUZBVUxUIDAsCgl0ZWFtc2l6ZSBJKDEpIERFRkFVTFQgMSwKCXNhbWV0aW1lIEkoMSkgREVGQVVMVCAwLAoJcGxheWdhcCBOKDYuMiksCglwbGF5Z2FwdHlwZSBJKDEpIERFRkFVTFQgMiwKCWF2YWlsYWJsZSBDKDI1NiksCgljYWxlbmRhcmlkIEMoMjQpLAoJbGF0aXR1ZGUgTig4LjMpLAoJbG9uZ2l0dWRlIE4oOC4zKSwKCXBsYWNlZ2FwIE4oNi4yKSwKCXBsYWNlZ2FwdHlwZSBJKDEpIERFRkFVTFQgMiwKCXN0YXJ0ZGF0ZSAiLkNNU19BRE9EQl9EVC4iLAoJZW5kZGF0ZSAiLkNNU19BRE9EQl9EVC4iLAoJaHRtbCBJKDEpIERFRkFVTFQgMCwKCXRpbWV6b25lIEMoMzIpLAoJbG9naWMgWCwKCWNhbnRpZSBJKDEpIERFRkFVTFQgMCwKCWNoYXJ0YnVpbGQgSSgxKSBERUZBVUxUIDAsCgljaGFydGNzcyBDKDEyOCksCglhdGZvcm1hdCBDKDE2KSwKCWZpbmFsIEMoNDgpLAoJc2VtaSBDKDQ4KSwKCXF1YXJ0ZXIgQyg0OCksCgllaWdodGggQyg0OCksCglyb3VuZG5hbWUgQyg0OCksCgl2ZXJzdXMgQyg0OCksCglieWUgQyg0OCksCglkZWZlYXRlZCBDKDQ4KSwKCXRpZWQgQyg0OCksCglmb3JmZWl0IEMoNDgpLAoJbm9tYXRjaCBDKDQ4KQoiOwoKJHNxbCA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTCgkcHJlZi4nbW9kdWxlX3RtdF9icmFja2V0cycsICRmbGRzLCAkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWwpOwokZGItPkNyZWF0ZVNlcXVlbmNlKCRwcmVmLidtb2R1bGVfdG10X2JyYWNrZXRzX3NlcScpOwoKLy9mbGFncyBmaWVsZCB0byBiZSB1c2VkIGZvciB1bmRvLXByb2Nlc3Npbmc6IDE9PmFkZGVkLCAyPT5kZWxldGVkLCAzPT5jaGFuZ2VkCiRmbGRzID0gIgoJdGVhbV9pZCBJIEtFWSwKCWJyYWNrZXRfaWQgSSwKCW5hbWUgQyg2NCksCglzZWVkaW5nIEkoMiksCgljb250YWN0YWxsIEkoMSkgREVGQVVMVCAwLAoJZGlzcGxheW9yZGVyIEkoMSksCglmbGFncyBJKDEpIERFRkFVTFQgMAoiOwokc3FsID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKCRwcmVmLidtb2R1bGVfdG10X3RlYW1zJywgJGZsZHMsICR0YWJvcHRhcnJheSk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCk7CiRkYi0+Q3JlYXRlU2VxdWVuY2UoJHByZWYuJ21vZHVsZV90bXRfdGVhbXNfc2VxJyk7CgovL2ZsYWdzIGZpZWxkIHRvIGJlIHVzZWQgZm9yIHVuZG8tcHJvY2Vzc2luZzogMT0+YWRkZWQsIDI9PmRlbGV0ZWQsIDM9PmNoYW5nZWQKJGZsZHMgPSAiCglpZCBJLAoJbmFtZSBDKDY0KSwKCWNvbnRhY3QgQyg4MCksCglkaXNwbGF5b3JkZXIgSSgxKSwKCWZsYWdzIEkoMSkgREVGQVVMVCAwCiI7CiRzcWwgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoJHByZWYuJ21vZHVsZV90bXRfcGVvcGxlJywgJGZsZHMsICR0YWJvcHRhcnJheSk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCk7Ci8vbm8gc2VxdWVuY2UgZm9yIHRoaXMgdGFibGUsIGJ1dCBhbiBpbmRleCBpbnN0ZWFkCiRzcWwgPSAkZGljdC0+Q3JlYXRlSW5kZXhTUUwoJ2lkeF9wZW9wbGUnLCAkcHJlZi4nbW9kdWxlX3RtdF9wZW9wbGUnLCAnaWQnKTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsKTsKCiRmbGRzID0gIgoJbWF0Y2hfaWQgSSBLRVksCglicmFja2V0X2lkIEksCgluZXh0bSBJLAoJbmV4dGxtIEksCgl0ZWFtQSBJLAoJdGVhbUIgSSwKCXBsYXl3aGVuICIuQ01TX0FET0RCX0RULiIsCglwbGFjZSBDKDY0KSwKCXNjb3JlIEMoNjQpLAoJc3RhdHVzIEkoMSkgREVGQVVMVCAwLAoJZmxhZ3MgSSgxKSBERUZBVUxUIDAKIjsKJHNxbCA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTCgkcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzJywgJGZsZHMsICR0YWJvcHRhcnJheSk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCk7CiRkYi0+Q3JlYXRlU2VxdWVuY2UoJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlc19zZXEnKTsKCiRmaWVsZHMgPSAiCglncm91cF9pZCBJKDIpIEtFWSwKCW5hbWUgQygxMjgpLAoJZGlzcGxheW9yZGVyIEkoMiksCglmbGFncyBJKDEpIERFRkFVTFQgMQoiOwokc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoJHByZWYuJ21vZHVsZV90bXRfZ3JvdXBzJywgJGZpZWxkcywgJHRhYm9wdGFycmF5KTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwokZGItPkNyZWF0ZVNlcXVlbmNlKCRwcmVmLidtb2R1bGVfdG10X2dyb3Vwc19zZXEnKTsKLy8gYWRkIGRlZmF1bHQgZ3JvdXAgMAokc3FsID0gJ0lOU0VSVCBJTlRPICcuJHByZWYuJ21vZHVsZV90bXRfZ3JvdXBzIChncm91cF9pZCxuYW1lLGRpc3BsYXlvcmRlcikgVkFMVUVTICgwLD8sMSknOwokZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkdGhpcy0+TGFuZygnZ3JvdXBkZWZhdWx0JykpKTsKCiRmbGRzID0gIgoJYnJhY2tldF9pZCBJIE5PVE5VTEwgREVGQVVMVCAwLAoJaGFuZGxlIEMoMjQpLAoJcHVidG9rZW4gQyg2NCksCglwcml2dG9rZW4gQyg4MCkKIjsKJHNxbCA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTCgkcHJlZi4nbW9kdWxlX3RtdF90d2VldCcsICRmbGRzLCAkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWwpOwovL25vIHNlcXVlbmNlIGZvciB0aGlzIHRhYmxlIChtdWx0aXBsZS0wJ3MgYWxsb3dlZCkKJHNxbCA9ICRkaWN0LT5DcmVhdGVJbmRleFNRTCgnaWR4X3R3ZWV0aWQnLCAkcHJlZi4nbW9kdWxlX3RtdF90d2VldCcsICdicmFja2V0X2lkJyk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCk7Ci8vdGFibGUgYWx3YXlzIG5lZWRzIGNvbnRlbnQKJHNxbCA9ICdJTlNFUlQgSU5UTycuJHByZWYuJ21vZHVsZV90bXRfdHdlZXQgKGJyYWNrZXRfaWQsaGFuZGxlKSBWQUxVRVMgKDAsXCdmaXJzdHJvd1wnKSc7CiRkYi0+RXhlY3V0ZSgkc3FsKTsKCiRmbGRzID0gIgoJaGlzdG9yeV9pZCBJIEtFWSwKCWJyYWNrZXRfaWQgSSwKCWNoYW5nZXIgQygxMjgpLAoJY2hhbmdld2hlbiAiLkNNU19BRE9EQl9EVC4iLAoJb2xkZGF0YSBDKDEyOCksCgluZXdkYXRhIEMoMTI4KSwKCWNvbW1lbnQgWAoiOwokc3FsID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKCRwcmVmLidtb2R1bGVfdG10X2hpc3RvcnknLCAkZmxkcywgJHRhYm9wdGFycmF5KTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsKTsKJGRiLT5DcmVhdGVTZXF1ZW5jZSgkcHJlZi4nbW9kdWxlX3RtdF9oaXN0b3J5X3NlcScpOwoKJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oJHRoaXMtPlBlcm1BZG1pbk5hbWUsJHRoaXMtPkxhbmcoJ3Blcm1fYWRtaW4nKSk7CiR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKCR0aGlzLT5QZXJtTW9kTmFtZSwkdGhpcy0+TGFuZygncGVybV9tb2QnKSk7CiR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKCR0aGlzLT5QZXJtU2NvcmVOYW1lLCR0aGlzLT5MYW5nKCdwZXJtX3Njb3JlJykpOwokdGhpcy0+Q3JlYXRlUGVybWlzc2lvbigkdGhpcy0+UGVybVNlZU5hbWUsJHRoaXMtPkxhbmcoJ3Blcm1fdmlldycpKTsKCiR0aGlzLT5TZXRQcmVmZXJlbmNlKCd0aW1lX3pvbmUnLCAnRXVyb3BlL0xvbmRvbicpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgndGltZV9mb3JtYXQnLCAnZzppYScpOwovL3VzZSBzeXN0ZW0gc2V0dGluZyBmb3IgZGVmYXVsdCBkYXRlIGZvcm1hdCBNQVlCRSBUSElTIFNIT1VMRCBCRSBJTiBVVElMUyBDTEFTUwokZm9ybWF0ID0gZ2V0X3NpdGVfcHJlZmVyZW5jZSgnZGVmYXVsdGRhdGVmb3JtYXQnKTsKaWYgKCRmb3JtYXQpCgl7Cgkkc3RyZnRva2VucyA9IGFycmF5KAoJLy8gRGF5IC0gbm8gc3RyZiBlcSA6IFMKCSdhJyA9PiAnRCcsICdBJyA9PiAnbCcsICdkJyA9PiAnZCcsICdlJyA9PiAnaicsICdqJyA9PiAneicsICd1JyA9PiAnTicsICd3JyA9PiAndycsCgkvLyBXZWVrIC0gbm8gZGF0ZSBlcSA6ICVVLCAlVwoJJ1YnID0+ICdXJywKCS8vIE1vbnRoIC0gbm8gc3RyZiBlcSA6IG4sIHQKCSdiJyA9PiAnTScsICdCJyA9PiAnRicsICdtJyA9PiAnbScsCgkvLyBZZWFyIC0gbm8gc3RyZiBlcSA6IEw7IG5vIGRhdGUgZXEgOiAlQywgJWcKCSdHJyA9PiAnbycsICd5JyA9PiAneScsICdZJyA9PiAnWScsCgkvLyBGdWxsIERhdGUgLyBUaW1lIC0gbm8gc3RyZiBlcSA6IGMsIHI7IG5vIGRhdGUgZXEgOiAlYwoJJ3MnID0+ICdVJywgJ0QnID0+ICdqL24veScsICdGJyA9PiAnWS1tLWQnLCAneCcgPT4gJ2ogRiBZJwogCSk7CgkkZm9ybWF0ID0gc3RyX3JlcGxhY2UoJyUnLCcnLCRmb3JtYXQpOwoJJHBhcnRzID0gZXhwbG9kZSgnICcsJGZvcm1hdCk7Cglmb3JlYWNoICgkcGFydHMgYXMgJGkgPT4gJGZtdCkKCQl7CgkJaWYoYXJyYXlfa2V5X2V4aXN0cygkZm10LCAkc3RyZnRva2VucykpCgkJCSRwYXJ0c1skaV0gPSAkc3RyZnRva2Vuc1skZm10XTsKCQllbHNlCgkJCXVuc2V0KCRwYXJ0c1skaV0pOwoJCX0KCSRmb3JtYXQgPSBpbXBsb2RlKCcgJywgJHBhcnRzKTsKCX0KZWxzZQoJJGZvcm1hdCA9ICdkIEYgeSc7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkYXRlX2Zvcm1hdCcsJGZvcm1hdCk7CiRuYW1lID0gJHRoaXMtPkdldE5hbWUoKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ3VwbG9hZHNfZGlyJywkbmFtZSk7IC8vcGF0aCByZWxhdGl2ZSB0byBob3N0IHVwbG9hZHMgZGlyCiRjb25maWcgPSBjbXNtcygpLT5HZXRDb25maWcoKTsKJHVwZGlyID0gJGNvbmZpZ1sndXBsb2Fkc19wYXRoJ107CmlmKCR1cGRpcikKewoJJHVwZGlyID0gY21zX2pvaW5fcGF0aCgkdXBkaXIsJG5hbWUpOwoJaWYoIWlzX2RpcigkdXBkaXIpKQoJCW1rZGlyKCR1cGRpciwwNzU1KTsKfQovLyR0aGlzLT5TZXRQcmVmZXJlbmNlKCdleHBvcnRfZmlsZScsMCk7Ci8vJHRoaXMtPlNldFByZWZlcmVuY2UoJ3N0cmlwX29uX2V4cG9ydCcsMCk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdleHBvcnRfZW5jb2RpbmcnLCdVVEYtOCcpOwoKJHRoaXMtPlNldFByZWZlcmVuY2UoJ290aGVyX21hdGNoX25hbWUnLCR0aGlzLT5MYW5nKCduYW1lX290aGVyX21hdGNoJykpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnNHRobGFzdF9tYXRjaF9uYW1lJywkdGhpcy0+TGFuZygnbmFtZV80dGhsYXN0X21hdGNoJykpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnM3JkbGFzdF9tYXRjaF9uYW1lJywkdGhpcy0+TGFuZygnbmFtZV8zcmRsYXN0X21hdGNoJykpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnMm5kbGFzdF9tYXRjaF9uYW1lJywkdGhpcy0+TGFuZygnbmFtZV8ybmRsYXN0X21hdGNoJykpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnbGFzdF9tYXRjaF9uYW1lJywkdGhpcy0+TGFuZygnbmFtZV9sYXN0X21hdGNoJykpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnYWdhaW5zdF9uYW1lJywkdGhpcy0+TGFuZygnbmFtZV9hZ2FpbnN0JykpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGVmX25hbWUnLCR0aGlzLT5MYW5nKCduYW1lX2RlZmVhdGVkJykpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgndGllZF9uYW1lJywkdGhpcy0+TGFuZygnbmFtZV90aWVkJykpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnbm9vcF9uYW1lJywkdGhpcy0+TGFuZygnbmFtZV9ub19vcHBvbmVudCcpKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2ZvcmZlaXRfbmFtZScsJHRoaXMtPkxhbmcoJ25hbWVfZm9yZmVpdCcpKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2FiYW5kb25fbmFtZScsJHRoaXMtPkxhbmcoJ25hbWVfYWJhbmRvbmVkJykpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgncGhvbmVfcmVnZXgnLCdeKFwrfFxkKVswLTldezcsMTZ9JCcpOyAvL2ZvciBTTVMgbWVzc2FnZXMgdG8gY2VsbC9tb2JpbGUgbnVtYmVycwoKJGZuID0gY21zX2pvaW5fcGF0aChkaXJuYW1lKF9fRklMRV9fKSwndGVtcGxhdGVzJywnY2hhcnRfY3VzdG9tLnRwbCcpOwokcyA9IEBmaWxlX2dldF9jb250ZW50cygkZm4pOwppZiAoJHMgPT0gRkFMU0UpCgkkcyA9ICc8ZGl2IGlkPSJicmFja2V0Y2hhcnQiIHN0eWxlPSJvdmVyZmxvdzphdXRvOyI+eyRpbWFnZX08L2Rpdj4nOwokdGhpcy0+U2V0VGVtcGxhdGUoJ2NoYXJ0X2RlZmF1bHRfdGVtcGxhdGUnLCRzKTsKJGZuID0gY21zX2pvaW5fcGF0aChkaXJuYW1lKF9fRklMRV9fKSwndGVtcGxhdGVzJywnZW1haWxfb3V0LnRwbCcpOwokcyA9IEBmaWxlX2dldF9jb250ZW50cygkZm4pOwppZiAoJHMgPT0gRkFMU0UpCgkkcyA9ICd7JHRpdGxlfScuIlxuXG4iLiR0aGlzLT5MYW5nKCdkZWZhdWx0X2VtYWlsJywneyR3aGVyZX0nLCd7JHdoZW59JykuIlxuIjsKJHRoaXMtPlNldFRlbXBsYXRlKCdtYWlsb3V0X2RlZmF1bHRfdGVtcGxhdGUnLCRzKTsKJGZuID0gY21zX2pvaW5fcGF0aChkaXJuYW1lKF9fRklMRV9fKSwndGVtcGxhdGVzJywnZW1haWxfY2FuY2VsbGVkLnRwbCcpOwokcyA9IEBmaWxlX2dldF9jb250ZW50cygkZm4pOwppZiAoJHMgPT0gRkFMU0UpCgkkcyA9ICd7JHRpdGxlfScuIlxuXG4iLiR0aGlzLT5MYW5nKCdjYW5jZWxsZWRfZW1haWwnLCd7JHdoZW59Jyk7CiR0aGlzLT5TZXRUZW1wbGF0ZSgnbWFpbGNhbmNlbF9kZWZhdWx0X3RlbXBsYXRlJywkcyk7CgokZm4gPSBjbXNfam9pbl9wYXRoKGRpcm5hbWUoX19GSUxFX18pLCd0ZW1wbGF0ZXMnLCdlbWFpbF9yZXF1ZXN0LnRwbCcpOwokcyA9IEBmaWxlX2dldF9jb250ZW50cygkZm4pOwppZiAoJHMgPT0gRkFMU0UpCgkkcyA9ICd7JHRpdGxlfScuIlxuXG4iLgoJJHRoaXMtPkxhbmcoJ3RpdGxlX21pZCcpLid7aWYgJHdoZXJlfSB7JHdoZXJlfXsvaWZ9e2lmICR3aGVufSB7JHdoZW59ey9pZn0geyR0ZWFtc30nLiJcblxuIi4KCSR0aGlzLT5MYW5nKCd0cGxfbWFpbHJlc3VsdCcsJ3tpZiAkY29udGFjdH17JGNvbnRhY3R9e2Vsc2VpZiAkc21zZnJvbX17JHNtc2Zyb219e2Vsc2VpZiAkb3duZXJ9eyRvd25lcn17ZWxzZX0nLiR0aGlzLT5MYW5nKCdvcmdhbmlzZXJzJykuJ3svaWZ9Jyk7CiR0aGlzLT5TZXRUZW1wbGF0ZSgnbWFpbHJlcXVlc3RfZGVmYXVsdF90ZW1wbGF0ZScsJHMpOwokZm4gPSBjbXNfam9pbl9wYXRoKGRpcm5hbWUoX19GSUxFX18pLCd0ZW1wbGF0ZXMnLCdlbWFpbF9pbi50cGwnKTsKJHMgPSBAZmlsZV9nZXRfY29udGVudHMoJGZuKTsKaWYgKCRzID09IEZBTFNFKQoJJHMgPSAneyRyZXBvcnR9JzsKJHRoaXMtPlNldFRlbXBsYXRlKCdtYWlsaW5fZGVmYXVsdF90ZW1wbGF0ZScsJHMpOwoKJGZuID0gY21zX2pvaW5fcGF0aChkaXJuYW1lKF9fRklMRV9fKSwndGVtcGxhdGVzJywndHdlZXRfb3V0LnRwbCcpOwokcyA9IEBmaWxlX2dldF9jb250ZW50cygkZm4pOwppZiAoJHMgPT0gRkFMU0UpCgkkcyA9ICd7JHRpdGxlfSAnLm1iX3N0cnRvbG93ZXIoJHRoaXMtPkxhbmcoJ3RpdGxlX21pZCcpKS4nIHskd2hlcmV9IHskd2hlbn0geyR0ZWFtc30nOwokdGhpcy0+U2V0VGVtcGxhdGUoJ3R3ZWV0b3V0X2RlZmF1bHRfdGVtcGxhdGUnLCRzKTsKJGZuID0gY21zX2pvaW5fcGF0aChkaXJuYW1lKF9fRklMRV9fKSwndGVtcGxhdGVzJywndHdlZXRfY2FuY2VsbGVkLnRwbCcpOwokcyA9IEBmaWxlX2dldF9jb250ZW50cygkZm4pOwppZiAoJHMgPT0gRkFMU0UpCgkkcyA9ICd7JHRpdGxlfSAnLm1iX3N0cnRvbG93ZXIoJHRoaXMtPkxhbmcoJ3RpdGxlX21pZCcpKS4nICcuCgkgbWJfc3RydG91cHBlcigkdGhpcy0+TGFuZygnY2FuY2VsbGVkJykpLid7aWYgJHdoZW59LCAnLm1iX3N0cnRvdXBwZXIoJHRoaXMtPkxhbmcoJ25vdCcpKS4nIHskd2hlbn17ZWxzZWlmICRvcHBvbmVudH0sJy4kdGhpcy0+TGFuZygnbmFtZV9hZ2FpbnN0JykuJyB7JG9wcG9uZW50fXsvaWZ9JzsKJHRoaXMtPlNldFRlbXBsYXRlKCd0d2VldGNhbmNlbF9kZWZhdWx0X3RlbXBsYXRlJywkcyk7CgokZm4gPSBjbXNfam9pbl9wYXRoKGRpcm5hbWUoX19GSUxFX18pLCd0ZW1wbGF0ZXMnLCd0d2VldF9yZXF1ZXN0LnRwbCcpOwokcyA9IEBmaWxlX2dldF9jb250ZW50cygkZm4pOwppZiAoJHMgPT0gRkFMU0UpCgkkcyA9ICd7JHRpdGxlfSAnLm1iX3N0cnRvbG93ZXIoJHRoaXMtPkxhbmcoJ3RpdGxlX21pZCcpKS4nIHskd2hlcmV9IHskd2hlbn0geyR0ZWFtc30gJy4KCSAkdGhpcy0+TGFuZygndHBsX3R3ZWV0cmVzdWx0Jywne2lmICRzbXNmcm9tfXskc21zZnJvbX17ZWxzZWlmICRjb250YWN0fXskY29udGFjdH17ZWxzZWlmICRvd25lcn17JG93bmVyfXtlbHNlfScuJHRoaXMtPkxhbmcoJ29yZ2FuaXNlcnMnKS4ney9pZn0nKTsKJHRoaXMtPlNldFRlbXBsYXRlKCd0d2VldHJlcXVlc3RfZGVmYXVsdF90ZW1wbGF0ZScsJHMpOwokZm4gPSBjbXNfam9pbl9wYXRoKGRpcm5hbWUoX19GSUxFX18pLCd0ZW1wbGF0ZXMnLCd0d2VldF9pbi50cGwnKTsKJHMgPSBAZmlsZV9nZXRfY29udGVudHMoJGZuKTsKaWYgKCRzID09IEZBTFNFKQoJJHMgPSAneyRyZXBvcnR9JzsKJHRoaXMtPlNldFRlbXBsYXRlKCd0d2VldGluX2RlZmF1bHRfdGVtcGxhdGUnLCRzKTsKCi8vJHRoaXMtPkNyZWF0ZUV2ZW50KCdSZXN1bHRBZGQnKTsKLy8kdGhpcy0+Q3JlYXRlRXZlbnQoJ01hdGNoQ2hhbmdlJyk7Ci8vJHRoaXMtPkFkZEV2ZW50SGFuZGxlcignVG91cm5leScsJz8nKTsKLy9ldmVudHMgdG8gdHJpZ2dlciBjbGVhbnVwIG9mIGNoYXJ0IGZpbGVzCiR0aGlzLT5BZGRFdmVudEhhbmRsZXIoJ0NvcmUnLCdMb2dpblBvc3QnKTsKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKKi8KCi8vTkIgY2FsbGVyIG11c3QgYmUgdmVyeSBjYXJlZnVsIHRoYXQgdG9wLWxldmVsIGRpciBpcyB2YWxpZCEKZnVuY3Rpb24gZGVsVHJlZSgkZGlyKQp7CgkkZmlsZXMgPSBhcnJheV9kaWZmKHNjYW5kaXIoJGRpciksYXJyYXkoJy4nLCcuLicpKTsKCWlmKCRmaWxlcykKCXsKCQlmb3JlYWNoKCRmaWxlcyBhcyAkZmlsZSkKCQl7CgkJCSRmcCA9IGNtc19qb2luX3BhdGgoJGRpciwkZmlsZSk7CgkJCWlmKGlzX2RpcigkZnApKQoJCQl7CgkJCSAJaWYoIWRlbFRyZWUoJGZwKSkKCQkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCQkJZWxzZQoJCQkJdW5saW5rKCRmcCk7CgkJfQoJCXVuc2V0KCRmaWxlcyk7Cgl9CglyZXR1cm4gcm1kaXIoJGRpcik7Cn0KCmlmICghICR0aGlzLT5DaGVja0FjY2VzcygnYWRtaW4nKSkgcmV0dXJuOwoKJHByZWYgPSBjbXNfZGJfcHJlZml4KCk7CiRkYiA9IGNtc21zKCktPkdldERiKCk7Ci8vIHVwbG9hZGVkIGZpbGVzCgokZnAgPSAkY29uZmlnWyd1cGxvYWRzX3BhdGgnXTsKaWYoJGZwICYmIGlzX2RpcigkZnApKQp7CgkkdWQgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgndXBsb2Fkc19kaXInLCcnKTsKCWlmKCR1ZCkKCXsKCQkkZnAgPSBjbXNfam9pbl9wYXRoKCRmcCwkdWQpOwoJCWlmKCRmcCAmJiBpc19kaXIoJGZwKSkKCQkJZGVsVHJlZSgkZnApOwoJfQoJZWxzZQoJewoJCSRmaWxlcyA9ICRkYi0+R2V0Q29sKCJTRUxFQ1QgRElTVElOQ1QgY2hhcnRjc3MgRlJPTSAiLiRwcmVmLiJtb2R1bGVfdG10X2JyYWNrZXRzCldIRVJFIGNoYXJ0Y3NzIElTIE5PVCBOVUxMIEFORCBjaGFydGNzczw+JyciKTsKCQlpZigkZmlsZXMpCgkJewoJCQlmb3JlYWNoKCRmaWxlcyBhcyAkZm4pCgkJCXsKCQkJCSRmbiA9IGNtc19qb2luX3BhdGgoJGZwLCRmbik7CgkJCQlpZihpc19maWxlKCRmbikpCgkJCQkJdW5saW5rKCRmbik7CgkJCX0KCQl9Cgl9Cn0KCiRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCiRzcWwgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCRwcmVmLidtb2R1bGVfdG10X2JyYWNrZXRzJyk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCk7CiRzcWwgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCRwcmVmLidtb2R1bGVfdG10X3RlYW1zJyk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCk7CiRzcWwgPSAkZGljdC0+RHJvcEluZGV4U1FMKCdpZHhfcGVvcGxlJywgJHByZWYuJ21vZHVsZV90bXRfcGVvcGxlJyk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCk7CiRzcWwgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCRwcmVmLidtb2R1bGVfdG10X3Blb3BsZScpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWwpOwokc3FsID0gJGRpY3QtPkRyb3BUYWJsZVNRTCgkcHJlZi4nbW9kdWxlX3RtdF9tYXRjaGVzJyk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCk7CiRzcWwgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCRwcmVmLidtb2R1bGVfdG10X2dyb3VwcycpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWwpOwokc3FsID0gJGRpY3QtPkRyb3BJbmRleFNRTCgnaWR4X3R3ZWV0aWQnLCAkcHJlZi4nbW9kdWxlX3RtdF90d2VldCcpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWwpOwokc3FsID0gJGRpY3QtPkRyb3BUYWJsZVNRTCgkcHJlZi4nbW9kdWxlX3RtdF90d2VldCcpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWwpOwokc3FsID0gJGRpY3QtPkRyb3BUYWJsZVNRTCgkcHJlZi4nbW9kdWxlX3RtdF9oaXN0b3J5Jyk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCk7CgokZGItPkRyb3BTZXF1ZW5jZSgkcHJlZi4nbW9kdWxlX3RtdF9icmFja2V0c19zZXEnKTsKJGRiLT5Ecm9wU2VxdWVuY2UoJHByZWYuJ21vZHVsZV90bXRfdGVhbXNfc2VxJyk7Ci8vbm8gc2VxdWVuY2UgZm9yIHBlb3BsZSx0d2VldCB0YWJsZXMKJGRiLT5Ecm9wU2VxdWVuY2UoJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlc19zZXEnKTsKJGRiLT5Ecm9wU2VxdWVuY2UoJHByZWYuJ21vZHVsZV90bXRfZ3JvdXBzX3NlcScpOwokZGItPkRyb3BTZXF1ZW5jZSgkcHJlZi4nbW9kdWxlX3RtdF9oaXN0b3J5X3NlcScpOwoKLy8gcGVybWlzc2lvbnMKJHRoaXMtPlJlbW92ZVBlcm1pc3Npb24oJHRoaXMtPlBlcm1BZG1pbk5hbWUpOwokdGhpcy0+UmVtb3ZlUGVybWlzc2lvbigkdGhpcy0+UGVybU1vZE5hbWUpOwokdGhpcy0+UmVtb3ZlUGVybWlzc2lvbigkdGhpcy0+UGVybVNjb3JlTmFtZSk7CiR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCR0aGlzLT5QZXJtU2VlTmFtZSk7CgovLyBwcmVmZXJlbmNlcwokdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgpOwoKLy8gdGVtcGxhdGVzCiR0aGlzLT5EZWxldGVUZW1wbGF0ZSgpOwoKLy8gZXZlbnRzCi8vJHRoaXMtPlJlbW92ZUV2ZW50KCdSZXN1bHRBZGQnKTsKLy8kdGhpcy0+UmVtb3ZlRXZlbnQoJ01hdGNoQ2hhbmdlJyk7Ci8vJHRoaXMtPlJlbW92ZUV2ZW50SGFuZGxlcignVG91cm5leScsJz8nKTsKJHRoaXMtPlJlbW92ZUV2ZW50SGFuZGxlcignQ29yZScsJ0xvZ2luUG9zdCcpOwoKPz4KCg==]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZTogVG91cm5leS4KQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVG9tIFBoYW5lIDx0cGd3d0BvbmVwb3N0Lm5ldD4KUmVmZXIgdG8gbGljZW5jZSBhbmQgb3RoZXIgZGV0YWlscyBhdCB0aGUgdG9wIG9mIGZpbGUgVG91cm5leS5tb2R1bGUucGhwCk1vcmUgaW5mbyBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3RvdXJuZXkKKi8KCmlmICghICR0aGlzLT5DaGVja0FjY2VzcygnYWRtaW4nKSkKCXJldHVybiAkdGhpcy0+TGFuZygnbGFja3Blcm1pc3Npb24nKTsKCiRwcmVmID0gY21zX2RiX3ByZWZpeCgpOwokdGFib3B0YXJyYXkgPSBhcnJheSgnbXlzcWwnID0+ICdFTkdJTkUgTXlJU0FNIENIQVJBQ1RFUiBTRVQgdXRmOCBDT0xMQVRFIHV0ZjhfZ2VuZXJhbF9jaScsCiAnbXlzcWxpJyA9PiAnRU5HSU5FIE15SVNBTSBDSEFSQUNURVIgU0VUIHV0ZjggQ09MTEFURSB1dGY4X2dlbmVyYWxfY2knKTsKJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwpzd2l0Y2ggKCRvbGR2ZXJzaW9uKQp7CiBjYXNlICcwLjEuMCc6CiBjYXNlICcwLjEuMSc6CgkkcmVsID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3VwbG9hZHNfZGlyJyk7CglpZighJHJlbCkKCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgndXBsb2Fkc19kaXInLCR0aGlzLT5HZXROYW1lKCkpOwoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ3Bob25lX3JlZ2V4JywnXihcK3xcZClbMC05XXs3LDE2fSQnKTsKCgkkZmxkcyA9ICIKCXR5cGUgSSgxKSBERUZBVUxUICIuVG91cm5leTo6S09UWVBFLiIsCgltYXRjaF9kYXlzIEMoMjU2KSwKCXBsYXlnYXAgTig2LjIpLAoJcGxheWdhcHR5cGUgSSgxKSBERUZBVUxUIDIsCglwbGFjZWdhcCBOKDYuMiksCglwbGFjZWdhcHR5cGUgSSgxKSBERUZBVUxUIDIKIjsKCSRzcWwgPSAkZGljdC0+QWx0ZXJDb2x1bW5TUUwoJHByZWYuJ21vZHVsZV90bXRfYnJhY2tldHMnLCRmbGRzKTsKCWlmKCEkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWwpKQoJewoJCSRtc2cgPSAkdGhpcy0+TGFuZygnZXJyX3VwZ3JhZGUnLCdjaGFuZ2UgZmllbGRzJyk7CgkJJHRoaXMtPkF1ZGl0KDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgJG1zZyk7CgkJcmV0dXJuICRtc2c7Cgl9CgoJJGZsZHMgPSAiCglhZG1pbl9lZGl0Z3JvdXAsCgltYXRjaF9ob3VycywKIjsKCSRzcWwgPSAkZGljdC0+RHJvcENvbHVtblNRTCgkcHJlZi4nbW9kdWxlX3RtdF9icmFja2V0cycsJGZsZHMpOwoJaWYoISRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCkpCgl7CgkJJG1zZyA9ICR0aGlzLT5MYW5nKCdlcnJfdXBncmFkZScsJ2RlbGV0ZSBmaWVsZCBcJ2FkbWluX2VkaXRncm91cFwnJyk7CgkJJHRoaXMtPkF1ZGl0KDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgJG1zZyk7CgkJcmV0dXJuICRtc2c7Cgl9CgkkZmxkcyA9ICIKCWdyb3VwaWQgSSgyKSBERUZBVUxUIDAsCglmaXh0eXBlIEkoMSkgREVGQVVMVCAwLAoJbG9jYWxlIEMoMTIpLAoJdHd0ZnJvbSBDKDE4KSwKCXNtc2Zyb20gQygxOCksCglzbXNwcmVmaXggQyg2KSwKCXNtc3BhdHRlcm4gQygzMiksCgljYWxlbmRhcmlkIEMoMjQpLAoJbGF0aXR1ZGUgTig4LjMpLAoJbG9uZ2l0dWRlIE4oOC4zKSwKCWF0Zm9ybWF0IEMoMTYpCiI7Cgkkc3FsID0gJGRpY3QtPkFkZENvbHVtblNRTCgkcHJlZi4nbW9kdWxlX3RtdF9icmFja2V0cycsJGZsZHMpOwoJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsLEZBTFNFKTsKCgkkc3FsID0gJGRpY3QtPlJlbmFtZUNvbHVtblNRTCgkcHJlZi4nbW9kdWxlX3RtdF9icmFja2V0cycsJ21hdGNoX2RheXMnLCdhdmFpbGFibGUnKTsKCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCxGQUxTRSk7CgoJJHNxbCA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoJHByZWYuJ21vZHVsZV90bXRfbWF0Y2hlcycsJ2ZsYWdzIEkoMSkgREVGQVVMVCAwJyk7CgkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWwsRkFMU0UpOwoKCSRzcWwgPSAkZGljdC0+QWx0ZXJDb2x1bW5TUUwoJHByZWYuJ21vZHVsZV90bXRfaGlzdG9yeScsJ2JyYWNrZXRfaWQgSScpOwoJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsLEZBTFNFKTsKCSRzcWwgPSAkZGljdC0+QWRkQ29sdW1uU1FMKCRwcmVmLidtb2R1bGVfdG10X2hpc3RvcnknLCdoaXN0b3J5X2lkIEkgS0VZJyk7CgkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWwsRkFMU0UpOwoKCSRmbGRzID0gIgoJYnJhY2tldF9pZCBJIE5PVE5VTEwgREVGQVVMVCAwLAoJaGFuZGxlIEMoMjQpLAoJcHVidG9rZW4gQyg2NCksCglwcml2dG9rZW4gQyg4MCkKIjsKCSRzcWwgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoJHByZWYuJ21vZHVsZV90bXRfdHdlZXQnLCAkZmxkcywgJHRhYm9wdGFycmF5KTsKCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCk7Cgkkc3FsID0gJGRpY3QtPkNyZWF0ZUluZGV4U1FMKCdpZHhfdHdlZXRpZCcsICRwcmVmLidtb2R1bGVfdG10X3R3ZWV0JywgJ2JyYWNrZXRfaWQnKTsKCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCk7Cgkkc3FsID0gJ0lOU0VSVCBJTlRPJy4kcHJlZi4nbW9kdWxlX3RtdF90d2VldCAoYnJhY2tldF9pZCxoYW5kbGUpIFZBTFVFUyAoMCxcJ2ZpcnN0cm93XCcpJzsKCSRkYi0+RXhlY3V0ZSgkc3FsKTsKCiBjYXNlICcwLjEuMic6CgkkZm4gPSBjbXNfam9pbl9wYXRoKGRpcm5hbWUoX19GSUxFX18pLCd0ZW1wbGF0ZXMnLCdlbWFpbF9jYW5jZWxsZWQudHBsJyk7CgkkcyA9IEBmaWxlX2dldF9jb250ZW50cygkZm4pOwoJaWYgKCRzID09IEZBTFNFKQoJCSRzID0gJ3skdGl0bGV9Jy4iXG5cbiIuJHRoaXMtPkxhbmcoJ2NhbmNlbGxlZF9lbWFpbCcsJ3skd2hlbn0nKTsKCSR0aGlzLT5TZXRUZW1wbGF0ZSgnbWFpbGNhbmNlbF9kZWZhdWx0X3RlbXBsYXRlJywkcyk7CgoJJGZuID0gY21zX2pvaW5fcGF0aChkaXJuYW1lKF9fRklMRV9fKSwndGVtcGxhdGVzJywnZW1haWxfcmVxdWVzdC50cGwnKTsKCSRzID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRmbik7CglpZiAoJHMgPT0gRkFMU0UpCgkJJHMgPSAneyR0aXRsZX0nLiJcblxuIi4KCQkkdGhpcy0+TGFuZygndGl0bGVfbWlkJykuJ3tpZiAkd2hlcmV9IHskd2hlcmV9ey9pZn17aWYgJHdoZW59IHskd2hlbn17L2lmfSB7JHRlYW1zfScuIlxuXG4iLgoJCSR0aGlzLT5MYW5nKCd0cGxfbWFpbHJlc3VsdCcsJ3tpZiAkY29udGFjdH17JGNvbnRhY3R9e2Vsc2VpZiAkc21zZnJvbX17JHNtc2Zyb219e2Vsc2VpZiAkb3duZXJ9eyRvd25lcn17ZWxzZX0nLiR0aGlzLT5MYW5nKCdvcmdhbmlzZXJzJykuJ3svaWZ9Jyk7CgkkdGhpcy0+U2V0VGVtcGxhdGUoJ21haWxyZXF1ZXN0X2RlZmF1bHRfdGVtcGxhdGUnLCRzKTsKCgkkZm4gPSBjbXNfam9pbl9wYXRoKGRpcm5hbWUoX19GSUxFX18pLCd0ZW1wbGF0ZXMnLCd0d2VldF9jYW5jZWxsZWQudHBsJyk7CgkkcyA9IEBmaWxlX2dldF9jb250ZW50cygkZm4pOwoJaWYgKCRzID09IEZBTFNFKQoJCSRzID0gJ3skdGl0bGV9ICcubWJfc3RydG9sb3dlcigkdGhpcy0+TGFuZygndGl0bGVfbWlkJykpLicgJy4KCQkgbWJfc3RydG91cHBlcigkdGhpcy0+TGFuZygnY2FuY2VsbGVkJykpLid7aWYgJHdoZW59LCAnLm1iX3N0cnRvdXBwZXIoJHRoaXMtPkxhbmcoJ25vdCcpKS4nIHskd2hlbn17ZWxzZWlmICRvcHBvbmVudH0sJy4kdGhpcy0+TGFuZygnbmFtZV9hZ2FpbnN0JykuJyB7JG9wcG9uZW50fXsvaWZ9JzsKCSR0aGlzLT5TZXRUZW1wbGF0ZSgndHdlZXRjYW5jZWxfZGVmYXVsdF90ZW1wbGF0ZScsJHMpOwoKCSRmbiA9IGNtc19qb2luX3BhdGgoZGlybmFtZShfX0ZJTEVfXyksJ3RlbXBsYXRlcycsJ3R3ZWV0X3JlcXVlc3QudHBsJyk7CgkkcyA9IEBmaWxlX2dldF9jb250ZW50cygkZm4pOwoJaWYgKCRzID09IEZBTFNFKQoJCSRzID0gJ3skdGl0bGV9ICcubWJfc3RydG9sb3dlcigkdGhpcy0+TGFuZygndGl0bGVfbWlkJykpLicgeyR3aGVyZX0geyR3aGVufSB7JHRlYW1zfSAnLgoJCSAkdGhpcy0+TGFuZygndHBsX3R3ZWV0cmVzdWx0Jywne2lmICRzbXNmcm9tfXskc21zZnJvbX17ZWxzZWlmICRjb250YWN0fXskY29udGFjdH17ZWxzZWlmICRvd25lcn17JG93bmVyfXtlbHNlfScuJHRoaXMtPkxhbmcoJ29yZ2FuaXNlcnMnKS4ney9pZn0nKTsKCSR0aGlzLT5TZXRUZW1wbGF0ZSgndHdlZXRyZXF1ZXN0X2RlZmF1bHRfdGVtcGxhdGUnLCRzKTsKCgkkZmllbGRzID0gIgoJCWdyb3VwX2lkIEkoMikgS0VZLAoJCW5hbWUgQygxMjgpLAoJCWRpc3BsYXlvcmRlciBJKDIpLAoJCWZsYWdzIEkoMSkgREVGQVVMVCAxCgkiOwoJJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKCRwcmVmLidtb2R1bGVfdG10X2dyb3VwcycsICRmaWVsZHMsICR0YWJvcHRhcnJheSk7CgkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkkZGItPkNyZWF0ZVNlcXVlbmNlKCRwcmVmLidtb2R1bGVfdG10X2dyb3Vwc19zZXEnKTsKCS8vIGFkZCBkZWZhdWx0IGdyb3VwIDAKCSRzcWwgPSAnSU5TRVJUIElOVE8gJy4kcHJlZi4nbW9kdWxlX3RtdF9ncm91cHMgKGdyb3VwX2lkLG5hbWUsZGlzcGxheW9yZGVyKSBWQUxVRVMgKDAsPywxKSc7CgkkZGItPkV4ZWN1dGUoJHNxbCxhcnJheSgkdGhpcy0+TGFuZygnZ3JvdXBkZWZhdWx0JykpKTsKCglicmVhazsKfQoKPz4K]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/addedit_comp.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICFlbXB0eSgkbWVzc2FnZSl9PHAgY2xhc3M9InBhZ2VtZXNzYWdlIj57JG1lc3NhZ2V9PC9wPnsvaWZ9CnskZm9ybV9zdGFydH0KeyRoaWRkZW59CnskdGFic19zdGFydH0KCnskbWFpbnRhYl9zdGFydH0KIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+Cntmb3JlYWNoIGZyb209JG1haW4gaXRlbT1lbnRyeX0Ke2lmICFlbXB0eSgkZW50cnlbMF0pfTxwIGNsYXNzPSJwYWdldGV4dCI+eyRlbnRyeVswXX06e2lmICFlbXB0eSgkZW50cnlbMl0pfSB7JHNob3d0aXB9ey9pZn08L3A+ey9pZn0Ke2lmIGlzc2V0KCRlbnRyeVsxXSl9PGRpdiBjbGFzcz0icGFnZWlucHV0Ij57JGVudHJ5WzFdfTwvZGl2PnsvaWZ9CntpZiAhZW1wdHkoJGVudHJ5WzJdKX08cCBjbGFzcz0icGFnZWlucHV0IGhlbHAiPnskZW50cnlbMl19PC9wPnsvaWZ9CnsvZm9yZWFjaH0KPC9kaXY+CnskdGFiX2VuZH0KCnskc2NoZWR1bGV0YWJfc3RhcnR9CiA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgp7Zm9yZWFjaCBmcm9tPSRzY2hlZHVsZXJzIGl0ZW09ZW50cnl9CntpZiAhZW1wdHkoJGVudHJ5WzBdKX08cCBjbGFzcz0icGFnZXRleHQiPnskZW50cnlbMF19OntpZiAhZW1wdHkoJGVudHJ5WzJdKX0geyRzaG93dGlwfXsvaWZ9PC9wPnsvaWZ9CntpZiBpc3NldCgkZW50cnlbMV0pfTxkaXYgY2xhc3M9InBhZ2VpbnB1dCI+eyRlbnRyeVsxXX08L2Rpdj57L2lmfQp7aWYgIWVtcHR5KCRlbnRyeVsyXSl9PHAgY2xhc3M9InBhZ2VpbnB1dCBoZWxwIj57JGVudHJ5WzJdfTwvcD57L2lmfQp7L2ZvcmVhY2h9CjwvZGl2Pgp7JHRhYl9lbmR9Cgp7JGFkdmFuY2VkdGFiX3N0YXJ0fQogPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4Ke2ZvcmVhY2ggZnJvbT0kYWR2YW5jZWQgaXRlbT1lbnRyeX0Ke2lmICFlbXB0eSgkZW50cnlbMF0pfTxwIGNsYXNzPSJwYWdldGV4dCI+eyRlbnRyeVswXX06e2lmICFlbXB0eSgkZW50cnlbMl0pfSB7JHNob3d0aXB9ey9pZn08L3A+ey9pZn0Ke2lmIGlzc2V0KCRlbnRyeVsxXSl9PGRpdiBjbGFzcz0icGFnZWlucHV0Ij57JGVudHJ5WzFdfTwvZGl2PnsvaWZ9CntpZiAhZW1wdHkoJGVudHJ5WzJdKX08cCBjbGFzcz0icGFnZWlucHV0IGhlbHAiPnskZW50cnlbMl19PC9wPnsvaWZ9CnsvZm9yZWFjaH0KPC9kaXY+CnskdGFiX2VuZH0KCnskY2hhcnR0YWJfc3RhcnR9CiA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgp7Zm9yZWFjaCBmcm9tPSRuYW1lcyBpdGVtPWVudHJ5fQp7aWYgIWVtcHR5KCRlbnRyeVswXSl9PHAgY2xhc3M9InBhZ2V0ZXh0Ij57JGVudHJ5WzBdfTp7aWYgIWVtcHR5KCRlbnRyeVsyXSl9IHskc2hvd3RpcH17L2lmfTwvcD57L2lmfQp7aWYgaXNzZXQoJGVudHJ5WzFdKX08ZGl2IGNsYXNzPSJwYWdlaW5wdXQiPnskZW50cnlbMV19PC9kaXY+ey9pZn0Ke2lmICFlbXB0eSgkZW50cnlbMl0pfTxwIGNsYXNzPSJwYWdlaW5wdXQgaGVscCI+eyRlbnRyeVsyXX08L3A+ey9pZn0Key9mb3JlYWNofQp7aWYgaXNzZXQoJG1hdGNoZXMpfTxiciAvPjxwIGNsYXNzPSJwYWdlaW5wdXQiPnskY2hhcnR9Jm5ic3A7eyRsaXN0fSZuYnNwO3skcHJpbnR9PC9wPnsvaWZ9CjwvZGl2Pgp7JHRhYl9lbmR9Cgp7JHBsYXllcnRhYl9zdGFydH0Ke2lmICR0ZWFtY291bnQgPiAwfQoJPGRpdiBzdHlsZT0icGFkZGluZy1yaWdodDoxMHB4OyBwYWRkaW5nLWJvdHRvbToxMHB4OyBvdmVyZmxvdzphdXRvOyI+Cgk8dGFibGUgaWQ9InRtdF9wbGF5ZXJzIiBzdHlsZT0ibWFyZ2luOjAgYXV0bzsgYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlIj4KCSA8dGhlYWQ+PHRyPgoJICA8dGggY2xhc3M9IntpZiAkY2FubW9kfXtsZGVsaW19c3NzOmZhbHNle3JkZWxpbX17ZWxzZX1vcmR7L2lmfSI+eyRvcmRlcnRpdGxlfTwvdGg+CgkgIDx0aCBjbGFzcz0ie2xkZWxpbX1zc3M6J3RleHRpbnB1dCd7cmRlbGltfSI+eyR0ZWFtdGl0bGV9PC90aD4KCSAgPHRoIGNsYXNzPSJ7bGRlbGltfXNzczonbmVnbGFzdGlucHV0J3tyZGVsaW19Ij57JHNlZWR0aXRsZX08L3RoPgoJICA8dGggY2xhc3M9IntsZGVsaW19c3NzOid0ZXh0aW5wdXQne3JkZWxpbX0iPnskY29udGFjdHRpdGxlfTwvdGg+CntpZiAkY2FubW9kfTx0aCBjbGFzcz0idXBkb3duIHtsZGVsaW19c3NzOmZhbHNle3JkZWxpbX0iPnskbW92ZXRpdGxlfTwvdGg+CgkgIDx0aCBjbGFzcz0icGFnZWljb24ge2xkZWxpbX1zc3M6ZmFsc2V7cmRlbGltfSI+Jm5ic3A7PC90aD4KCSAgPHRoIGNsYXNzPSJwYWdlaWNvbiB7bGRlbGltfXNzczpmYWxzZXtyZGVsaW19Ij4mbmJzcDs8L3RoPnsvaWZ9CgkgIDx0aCBjbGFzcz0iY2hlY2tib3gge2xkZWxpbX1zc3M6ZmFsc2V7cmRlbGltfSIgc3R5bGU9IndpZHRoOjIwcHg7Ij57JHNlbHRlYW1zfTwvdGg+CgkgPC90cj48L3RoZWFkPgoJIDx0Ym9keT4KCSB7Zm9yZWFjaCBmcm9tPSR0ZWFtcyBpdGVtPWVudHJ5fQoJIDx0ciBjbGFzcz0ieyRlbnRyeS0+cm93Y2xhc3N9IiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9J3skZW50cnktPnJvd2NsYXNzfWhvdmVyJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPSd7JGVudHJ5LT5yb3djbGFzc30nOyI+CgkgPHRkIGNsYXNzPSJvcmQiPnskZW50cnktPm9yZGVyfTwvdGQ+CgkgPHRkPnskZW50cnktPm5hbWV9PC90ZD4KCSA8dGQ+eyRlbnRyeS0+c2VlZH08L3RkPgoJIDx0ZD57JGVudHJ5LT5jb250YWN0fTwvdGQ+CntpZiAkY2FubW9kfTx0ZCBjbGFzcz0idXBkb3duIj57JGVudHJ5LT5kb3dubGlua317JGVudHJ5LT51cGxpbmt9PC90ZD4KCSA8dGQ+eyRlbnRyeS0+ZWRpdGxpbmt9PC90ZD4KCSA8dGQgY2xhc3M9InRlbV9kZWxldGUiPnskZW50cnktPmRlbGV0ZWxpbmt9PC90ZD57L2lmfQoJIDx0ZCBjbGFzcz0iY2hlY2tib3giPnskZW50cnktPnNlbGVjdGVkfXskZW50cnktPmhpZGRlbn08L3RkPgoJIDwvdHI+Cgkgey9mb3JlYWNofQoJIDwvdGJvZHk+Cgk8L3RhYmxlPgoJe2lmICRjYW5tb2QgPiAwfTxwIGNsYXNzPSJkbmRoZWxwIHBhZ2VpbnB1dCI+eyRkbmRoZWxwfTwvcD57L2lmfQoJPC9kaXY+CntlbHNlfQoJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRub3RlYW1zfTwvcD4Key9pZn0KPGRpdiBjbGFzcz0icGFnZWlucHV0IiBzdHlsZT0ibWFyZ2luOjFlbSAyMCUgMCAyMCU7Ij4Ke2lmICRjYW5tb2R9eyRhZGR0ZWFtfSZuYnNwOyZuYnNwO3skaW1wb3J0fSZuYnNwO3svaWZ9CntpZiAkdGVhbWNvdW50ID4gMH0KIHskZXhwb3J0fXtpZiAkY2FubW9kfSZuYnNwO3skZGVsZXRlfSZuYnNwO3skdXBkYXRlMX17L2lmfQp7L2lmfQo8L2Rpdj4KeyR0YWJfZW5kfQoKeyRtYXRjaHRhYl9zdGFydH0Ke2lmIGlzc2V0KCRtYXRjaGVzKX0KPGRpdiBzdHlsZT0icGFkZGluZy1yaWdodDoxMHB4OyBwYWRkaW5nLWJvdHRvbToxMHB4OyBvdmVyZmxvdzphdXRvOyI+CjxkaXYgaWQ9Im1hdGNoY2FsZW5kYXIiIHN0eWxlPSJtYXJnaW46MCBhdXRvIDEwcHggMjAlOyI+PC9kaXY+Cjx0YWJsZSBpZD0idG10X21hdGNoZXMiIHN0eWxlPSJtYXJnaW46MCBhdXRvOyBib3JkZXItY29sbGFwc2U6Y29sbGFwc2UiPgogPHRoZWFkPjx0cj4Ke2lmICRwbGFufTx0aD57JGlkdGl0bGV9PC90aD57L2lmfQogIDx0aCBjbGFzcz0ie2xkZWxpbX1zc3M6J2lzb2lucHV0J3tyZGVsaW19Ij57JHNjaGVkdWxlZHRpdGxlfTwvdGg+CiAgPHRoPnskcGxhY2V0aXRsZX08L3RoPgogIDx0aD57JHRlYW10aXRsZX08L3RoPgogIDx0aD57JHRlYW10aXRsZX08L3RoPgogIDx0aCBjbGFzcz0ie2xkZWxpbX1zc3M6ZmFsc2V7cmRlbGltfSI+eyRzdGF0dXN0aXRsZX08L3RoPgogIDx0aCBjbGFzcz0iY2hlY2tib3gge2xkZWxpbX1zc3M6ZmFsc2V7cmRlbGltfSIgc3R5bGU9IndpZHRoOjIwcHg7Ij57JHNlbG1hdGNoZXN9PC90aD4KIDwvdHI+PC90aGVhZD4KIDx0Ym9keT4KIHtmb3JlYWNoIGZyb209JG1hdGNoZXMgaXRlbT1lbnRyeX0KIDx0ciBjbGFzcz0ieyRlbnRyeS0+cm93Y2xhc3N9IiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9J3skZW50cnktPnJvd2NsYXNzfWhvdmVyJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPSd7JGVudHJ5LT5yb3djbGFzc30nOyI+CntpZiAkcGxhbn08dGQ+e2lmICgkZW50cnktPm1pZCA8IDApfTxzcGFuIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij57JGVudHJ5LT5taWR9PC9zcGFuPntlbHNlfXskZW50cnktPm1pZH17L2lmfTwvdGQ+ey9pZn0KIDx0ZD57JGVudHJ5LT5zY2hlZHVsZX08L3RkPgogPHRkPnskZW50cnktPnBsYWNlfTwvdGQ+CiA8dGQ+eyRlbnRyeS0+dGVhbUF9PC90ZD4KIDx0ZD57JGVudHJ5LT50ZWFtQn08L3RkPgogPHRkPnskZW50cnktPmJ0bjF9Jm5ic3A7eyRlbnRyeS0+YnRuMn0mbmJzcDt7JGVudHJ5LT5idG4zfTwvdGQ+CiA8dGQgY2xhc3M9ImNoZWNrYm94Ij57JGVudHJ5LT5zZWxlY3RlZH17JGVudHJ5LT5oaWRkZW59PC90ZD4KIDwvdHI+CiB7L2ZvcmVhY2h9CiA8L3Rib2R5Pgo8L3RhYmxlPjxiciAvPgo8cCBjbGFzcz0icGFnZWlucHV0Ij57aWYgaXNzZXQoJHJlc2V0KX17JHJlc2V0fSZuYnNwO3svaWZ9eyRhbHRtdmlld317aWYgISRwbGFufSZuYnNwO3skY2hhcnR9Jm5ic3A7eyRsaXN0fSZuYnNwO3skcHJpbnR9ey9pZn0mbmJzcDt7JG5vdGlmeX17aWYgJGNhbm1vZH0mbmJzcDt7JGFiYW5kb259Jm5ic3A7eyR1cGRhdGUyfXsvaWZ9PC9wPgo8L2Rpdj4Ke2lmICRwbGFufTxkaXYgc3R5bGU9Im92ZXJmbG93OmF1dG87Ij48YnIgLz57JGltYWdlfTwvZGl2PnsvaWZ9CntlbHNlfQo8cCBjbGFzcz0icGFnZWlucHV0Ij57JG5vbWF0Y2hlc30Ke2lmICRtYWxsZG9uZX08YnIgLz48YnIgLz57JGNoYXJ0fSZuYnNwO3skbGlzdH17ZWxzZWlmIGlzc2V0KCRzY2hlZHVsZSl9PGJyIC8+PGJyIC8+eyRzY2hlZHVsZX17L2lmfTwvcD4Key9pZn0KeyR0YWJfZW5kfQoKeyRyZXN1bHRzdGFiX3N0YXJ0fQp7aWYgaXNzZXQoJHJlc3VsdHMpfQo8ZGl2IHN0eWxlPSJwYWRkaW5nLXJpZ2h0OjEwcHg7IHBhZGRpbmctYm90dG9tOjEwcHg7IG92ZXJmbG93OmF1dG87Ij4KPHRhYmxlIGlkPSJ0bXRfcmVzdWx0cyIgc3R5bGU9Im1hcmdpbjowIGF1dG87IGJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZSI+CiA8dGhlYWQ+PHRyPgogIDx0aCBjbGFzcz0ie2xkZWxpbX1zc3M6ZmFsc2V7cmRlbGltfSI+eyRzY2hlZHVsZWR0aXRsZX08L3RoPgogIDx0aCBjbGFzcz0ie2xkZWxpbX1zc3M6J2lzb2lucHV0J3tyZGVsaW19Ij57JHBsYXllZHRpdGxlfTwvdGg+CiAgPHRoPnskdGVhbXRpdGxlfTwvdGg+CiAgPHRoPnskdGVhbXRpdGxlfTwvdGg+CiAgPHRoIGNsYXNzPSJ7bGRlbGltfXNzczpmYWxzZXtyZGVsaW19Ij57JHJlc3VsdHRpdGxlfTwvdGg+CiAgPHRoIGNsYXNzPSJ7bGRlbGltfXNzczpmYWxzZXtyZGVsaW19Ij57JHNjb3JldGl0bGV9PC90aD4KICA8dGggY2xhc3M9ImNoZWNrYm94IHtsZGVsaW19c3NzOmZhbHNle3JkZWxpbX0iIHN0eWxlPSJ3aWR0aDoyMHB4OyI+eyRzZWxyZXN1bHRzfTwvdGg+CiA8L3RyPjwvdGhlYWQ+CiA8dGJvZHk+CiB7Zm9yZWFjaCBmcm9tPSRyZXN1bHRzIGl0ZW09ZW50cnl9CiA8dHIgY2xhc3M9InskZW50cnktPnJvd2NsYXNzfSIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPSd7JGVudHJ5LT5yb3djbGFzc31ob3Zlcic7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT0neyRlbnRyeS0+cm93Y2xhc3N9JzsiPgogPHRkPnskZW50cnktPmhpZGRlbn17JGVudHJ5LT5zY2hlZHVsZX08L3RkPgogPHRkPnskZW50cnktPmFjdHVhbH08L3RkPgogPHRkPnskZW50cnktPnRlYW1BfTwvdGQ+CiA8dGQ+eyRlbnRyeS0+dGVhbUJ9PC90ZD4KIDx0ZD57JGVudHJ5LT5yZXN1bHR9PC90ZD4KIDx0ZD57JGVudHJ5LT5zY29yZX08L3RkPgogPHRkIGNsYXNzPSJjaGVja2JveCI+eyRlbnRyeS0+c2VsZWN0ZWR9PC90ZD4KIDwvdHI+CiB7L2ZvcmVhY2h9CiA8L3Rib2R5Pgo8L3RhYmxlPjxiciAvPgo8cCBjbGFzcz0icGFnZWlucHV0Ij57JGNoYXJ0fSZuYnNwO3skbGlzdH0mbmJzcDt7JGFsdHJ2aWV3fSZuYnNwO3skY2hhbmdlc30mbmJzcDt7JGdldHNjb3JlfXtpZiAkY2FubW9kfSZuYnNwO3skdXBkYXRlM317L2lmfTwvcD4KPC9kaXY+CntlbHNlfQo8cCBjbGFzcz0icGFnZWlucHV0Ij57JG5vcmVzdWx0c30Ke2lmICRyYWxsZG9uZX08YnIgLz48YnIgLz57JGNoYXJ0fSZuYnNwO3skbGlzdH0mbmJzcDt7JGFsdHJ2aWV3fSZuYnNwO3skY2hhbmdlc317L2lmfTwvcD4Key9pZn0KeyR0YWJfZW5kfQoKeyR0YWJzX2VuZH0Ke2lmICRjYW5tb2QgPiAwfQo8YnIgLz4KPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzYXZlfSZuYnNwO3skY2FuY2VsfSZuYnNwO3skYXBwbHl9PC9wPgp7L2lmfQo8ZGl2IGlkPSJjb25maXJtIiBjbGFzcz0ibW9kYWwtb3ZlcmxheSI+CjxkaXYgY2xhc3M9ImNvbmZpcm0tY29udGFpbmVyIj4KPHAgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO2ZvbnQtd2VpZ2h0OmJvbGQ7Ij48L3A+CjxiciAvPgo8cCBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7Ij48aW5wdXQgaWQ9Im1jX2NvbmYiIGNsYXNzPSJjbXNfc3VibWl0IHBvcF9idG4iIHR5cGU9InN1Ym1pdCIgdmFsdWU9InskeWVzfSIgLz4KJm5ic3A7Jm5ic3A7PGlucHV0IGlkPSJtY19kZW55IiBjbGFzcz0iY21zX3N1Ym1pdCBwb3BfYnRuIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJ7JG5vfSIgLz48L3A+CjwvZGl2Pgo8L2Rpdj4KeyRmb3JtX2VuZH0KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InskaW5jcGF0aH1qcXVlcnkudG10ZnVuY3MuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ7JGluY3BhdGh9anF1ZXJ5Lm1ldGFkYXRhLm1pbi5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InskaW5jcGF0aH1qcXVlcnkuU1Nzb3J0Lm1pbi5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InskaW5jcGF0aH1qcXVlcnkudGFibGVkbmQubWluLmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ieyRpbmNwYXRofW1vbWVudC5taW4uanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ7JGluY3BhdGh9cGlrYWRheS5taW4uanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ7JGluY3BhdGh9anF1ZXJ5LnBpa2FkYXkubWluLmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ieyRpbmNwYXRofWpxdWVyeS5tb2RhbGNvbmZpcm0ubWluLmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovLzwhW0NEQVRBWwp7Zm9yZWFjaCBmcm9tPSRqc2Z1bmNzIGl0ZW09ZnVuY317JGZ1bmN9ey9mb3JlYWNofQovL11dPgo8L3NjcmlwdD4K]]></data>
	</file>
	<file>
	  <filename>/templates/addedit_team.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGg0IGNsYXNzPSJwYWdldGV4dCI+eyRwYWdldGl0bGV9PC9oND4KeyRmb3JtX3N0YXJ0fXskaGlkZGVufQp7Zm9yZWFjaCBmcm9tPSRvcHRzIGl0ZW09ZW50cnl9CntpZiAhZW1wdHkoJGVudHJ5WzBdKX08cCBjbGFzcz0icGFnZXRleHQiPnskZW50cnlbMF19OntpZiAhZW1wdHkoJGVudHJ5WzJdKX0geyRzaG93dGlwfXsvaWZ9PC9wPnsvaWZ9CntpZiBpc3NldCgkZW50cnlbMV0pfTxkaXYgY2xhc3M9InBhZ2VpbnB1dCI+eyRlbnRyeVsxXX08L2Rpdj57L2lmfQp7aWYgIWVtcHR5KCRlbnRyeVsyXSl9PHAgY2xhc3M9InBhZ2VpbnB1dCBoZWxwIj57JGVudHJ5WzJdfTwvcD57L2lmfQp7L2ZvcmVhY2h9CjxiciAvPgp7aWYgJHBjID4gMH0KCTxkaXYgY2xhc3M9InBhZ2VpbnB1dCI+Cgk8dGFibGUgaWQ9InRlYW0iIGNsYXNzPSJ0YWJsZV9zb3J0IiBzdHlsZT0ibWFyZ2luOjAgYXV0byAwIDA7IGJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZSI+CgkgPHRoZWFkPjx0cj4KCSAgPHRoIGNsYXNzPSJ7bGRlbGltfXNzczondGV4dGlucHV0J3tyZGVsaW19Ij57JG5hbWV0ZXh0fTwvdGg+CgkgIDx0aCBjbGFzcz0ie2xkZWxpbX1zc3M6J3RleHRpbnB1dCd7cmRlbGltfSI+eyRjb250YWN0dGV4dH08L3RoPgp7aWYgJGNhbm1vZH17aWYgJHBjID4gMX08dGggY2xhc3M9InVwZG93biB7bGRlbGltfXNzczpmYWxzZXtyZGVsaW19Ij57JG1vdmV0ZXh0fTwvdGg+ey9pZn0KCSAgPHRoIGNsYXNzPSJwYWdlaWNvbiB7bGRlbGltfXNzczpmYWxzZXtyZGVsaW19Ij4mbmJzcDs8L3RoPnsvaWZ9CgkgIDx0aCBjbGFzcz0iY2hlY2tib3gge2xkZWxpbX1zc3M6ZmFsc2V7cmRlbGltfSIgc3R5bGU9IndpZHRoOjIwcHg7Ij57JHNlbGVjdGFsbH08L3RoPgoJIDwvdHI+PC90aGVhZD4KCSA8dGJvZHk+CiB7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWVudHJ5fQoJICA8dHIgY2xhc3M9InskZW50cnktPnJvd2NsYXNzfSIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPSd7JGVudHJ5LT5yb3djbGFzc31ob3Zlcic7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT0neyRlbnRyeS0+cm93Y2xhc3N9JzsiPgoJCTx0ZD57JGVudHJ5LT5pbnB1dF9uYW1lfTwvdGQ+CgkJPHRkPnskZW50cnktPmlucHV0X2NvbnRhY3R9PC90ZD4Ke2lmICRjYW5tb2R9e2lmICRwYyA+IDF9PHRkIGNsYXNzPSJ1cGRvd24iPnskZW50cnktPmRvd25saW5rfXskZW50cnktPnVwbGlua308L3RkPnsvaWZ9CgkJPHRkIGNsYXNzPSJwbHJfZGVsZXRlIj57JGVudHJ5LT5kZWxldGVsaW5rfTwvdGQ+ey9pZn0KCQk8dGQgY2xhc3M9ImNoZWNrYm94Ij57JGVudHJ5LT5zZWxlY3RlZH17JGVudHJ5LT5oaWRkZW59PC90ZD4KCSAgPC90cj4KIHsvZm9yZWFjaH0KCSA8L3Rib2R5PgoJPC90YWJsZT4Ke2lmICRjYW5tb2QgJiYgJHBjID4gMX08cCBjbGFzcz0iZG5kaGVscCI+eyRkbmRoZWxwfTwvcD57L2lmfQoJPC9kaXY+Cgk8YnIgLz4Key9pZn0KCTxkaXYgY2xhc3M9InBhZ2VpbnB1dCI+e2lmICRjYW5tb2R9e2lmIGlzc2V0KCRhZGQpfXskYWRkfSB7L2lmfXskc3VibWl0fSB7L2lmfXskZXhwb3J0fXtpZiAkY2FubW9kfSB7JGRlbGV0ZX17L2lmfSB7JGNhbmNlbH08L2Rpdj4KPGRpdiBpZD0iY29uZmlybSIgY2xhc3M9Im1vZGFsLW92ZXJsYXkiPgo8ZGl2IGNsYXNzPSJjb25maXJtLWNvbnRhaW5lciI+CjxwIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtmb250LXdlaWdodDpib2xkOyI+PC9wPgo8YnIgLz4KPHAgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyOyI+PGlucHV0IGlkPSJtY19jb25mIiBjbGFzcz0iY21zX3N1Ym1pdCBwb3BfYnRuIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJ7JHllc30iIC8+CiZuYnNwOyZuYnNwOzxpbnB1dCBpZD0ibWNfZGVueSIgY2xhc3M9ImNtc19zdWJtaXQgcG9wX2J0biIgdHlwZT0ic3VibWl0IiB2YWx1ZT0ieyRub30iIC8+PC9wPgo8L2Rpdj4KPC9kaXY+CnskZm9ybV9lbmR9Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ7JGluY3BhdGh9anF1ZXJ5LnRtdGZ1bmNzLmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ieyRpbmNwYXRofWpxdWVyeS5tZXRhZGF0YS5taW4uanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ7JGluY3BhdGh9anF1ZXJ5LlNTc29ydC5taW4uanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ7JGluY3BhdGh9anF1ZXJ5LnRhYmxlZG5kLm1pbi5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InskaW5jcGF0aH1qcXVlcnkubW9kYWxjb25maXJtLm1pbi5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLy88IVtDREFUQVsKe2ZvcmVhY2ggZnJvbT0kanNmdW5jcyBpdGVtPWZ1bmN9eyRmdW5jfXsvZm9yZWFjaH0KLy9dXT4KPC9zY3JpcHQ+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/adminpanel.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICFlbXB0eSgkbWVzc2FnZSl9PHAgY2xhc3M9InBhZ2VtZXNzYWdlIj57JG1lc3NhZ2V9PC9wPnsvaWZ9Cgp7JHRhYl9oZWFkZXJzfQoKeyRzdGFydF9pdGVtc190YWJ9Cnskc3RhcnRfaXRlbXNmb3JtfQp7aWYgJGljb3VudH0KPGRpdiBzdHlsZT0ib3ZlcmZsb3c6YXV0bzsiPgogPHRhYmxlIGlkPSJpdGVtcyIgY2xhc3M9InBhZ2V0YWJsZSIgc3R5bGU9ImJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTsiPgogIDx0aGVhZD48dHI+CiAgPHRoPnskdGl0bGVfbmFtZX08L3RoPgp7aWYgJGNhbmRldn0KICA8dGg+eyR0aXRsZV90YWd9PC90aD4Key9pZn0KICA8dGg+eyR0aXRsZV9ncm91cH08L3RoPgogIDx0aD57JHRpdGxlX3N0YXR1c308L3RoPgogIDx0aCBjbGFzcz0icGFnZWljb24iPjwvdGg+CiAgPHRoIGNsYXNzPSJwYWdlaWNvbiI+PC90aD4Ke2lmICRjYW5tb2R9CiAgPHRoIGNsYXNzPSJwYWdlaWNvbiI+PC90aD4KICA8dGggY2xhc3M9InBhZ2VpY29uIj48L3RoPgp7L2lmfQogIDx0aCBjbGFzcz0icGFnZWljb24iPjwvdGg+CiAgPHRoIGNsYXNzPSJjaGVja2JveCIgc3R5bGU9IndpZHRoOjIwcHg7Ij57JHNlbGVjdGFsbF9pdGVtc308L3RoPgogPC90cj48L3RoZWFkPgogPHRib2R5Pgp7Zm9yZWFjaCBmcm9tPSRjb21wcyBpdGVtPWVudHJ5fSB7Y3ljbGUgdmFsdWVzPSdyb3cxLHJvdzInIG5hbWU9J2MxJyBhc3NpZ249J3Jvd2NsYXNzJ30KIDx0ciBjbGFzcz0ieyRyb3djbGFzc30iIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT0neyRyb3djbGFzc31ob3Zlcic7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT0neyRyb3djbGFzc30nOyI+CiAgPHRkPnskZW50cnktPm5hbWV9PC90ZD4Ke2lmICRjYW5kZXZ9CiAgPHRkPntsZGVsaW19eyRtb2RuYW1lfSBhbGlhcz0neyRlbnRyeS0+YWxpYXN9J3tyZGVsaW19PC90ZD4Key9pZn0KICA8dGQ+eyRlbnRyeS0+Z3JvdXB9PC90ZD4KICA8dGQ+eyRlbnRyeS0+c3RhdHVzfTwvdGQ+CiAgPHRkPnskZW50cnktPnZpZXdsaW5rfTwvdGQ+CiAgPHRkPnskZW50cnktPmVkaXRsaW5rfTwvdGQ+CntpZiAkY2FubW9kfQogIDx0ZD57JGVudHJ5LT5jb3B5bGlua308L3RkPgogIDx0ZD57JGVudHJ5LT5kZWxldGVsaW5rfTwvdGQ+CnsvaWZ9CiAgPHRkPnskZW50cnktPmV4cG9ydGxpbmt9PC90ZD4KICA8dGQgY2xhc3M9ImNoZWNrYm94Ij57JGVudHJ5LT5zZWxlY3RlZH08L3RkPgogPC90cj4Key9mb3JlYWNofQogPC90Ym9keT4KIDwvdGFibGU+CjwvZGl2Pgp7ZWxzZX0KPHA+eyRub3RvdXJufTwvcD4Key9pZn0KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPgp7aWYgJGNhbm1vZH17JGFkZGxpbmt9Jm5ic3A7eyRhZGRsaW5rMn17L2lmfQp7aWYgJGljb3VudH0KPGRpdiBzdHlsZT0ibWFyZ2luOjA7ZmxvYXQ6cmlnaHQ7dGV4dC1hbGlnbjpyaWdodCI+CnskcHJpbnRidG59e2lmICRjYW5tb2R9IHskbm90aWZ5YnRufSB7JGdyb3VwYnRufSB7JGNsb25lYnRufSB7JGRlbGV0ZWJ0bn17L2lmfSB7JGV4cG9ydGJ0bn0KPC9kaXY+CjxkaXYgY2xhc3M9ImNsZWFyYiI+PC9kaXY+CnsvaWZ9CntpZiAkY2FubW9kfQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX2ltcG9ydH06PC9wPgogPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9pbXBvcnR9Jm5ic3A7Jm5ic3A7eyRzdWJtaXR4bWx9PC9wPgo8L2Rpdj4Key9pZn0KPC9kaXY+CnskZW5kX2Zvcm19CnskZW5kX3RhYn0KCnskc3RhcnRfZ3Jwc190YWJ9Cnskc3RhcnRfZ3JvdXBzZm9ybX0Ke2lmICRnY291bnR9CjxkaXYgc3R5bGU9Im92ZXJmbG93OmF1dG87Ij4KIDx0YWJsZSBpZD0iZ3JvdXBzIiBjbGFzcz0icGFnZXRhYmxlIiBzdHlsZT0iYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlIj4KICA8dGhlYWQ+PHRyPgogICA8dGggc3R5bGU9ImRpc3BsYXk6bm9uZTsiPjwvdGg+CiAgIDx0aD57JHRpdGxlX2duYW1lfTwvdGg+CiAgIDx0aD57JHRpdGxlX2FjdGl2ZX08L3RoPgp7aWYgJGNhbm1vZH0KICAgPHRoIGNsYXNzPSJ1cGRvd24iPnskdGl0bGVfbW92ZX08L3RoPgogICA8dGggY2xhc3M9InBhZ2VpY29uIj48L3RoPgp7L2lmfQogICA8dGggY2xhc3M9ImNoZWNrYm94IiBzdHlsZT0id2lkdGg6MjBweDsiPnskc2VsZWN0YWxsX2dyb3Vwc308L3RoPgogIDwvdHI+PC90aGVhZD4KICA8dGJvZHk+CiB7Zm9yZWFjaCBmcm9tPSRncm91cHMgaXRlbT1lbnRyeX0ge2N5Y2xlIHZhbHVlcz0ncm93MSxyb3cyJyBuYW1lPSdjMicgYXNzaWduPSdyb3djbGFzcyd9CiAgPHRyIGNsYXNzPSJ7JHJvd2NsYXNzfSIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPSd7JHJvd2NsYXNzfWhvdmVyJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPSd7JHJvd2NsYXNzfSc7Ij4KICAgPHRkIGNsYXNzPSJvcmQiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij57JGVudHJ5LT5vcmRlcn08L3RkPgogICA8dGQ+eyRlbnRyeS0+bmFtZX08L3RkPgogICA8dGQ+eyRlbnRyeS0+YWN0aXZlfTwvdGQ+CntpZiAkY2FubW9kfQogICA8dGQgY2xhc3M9InVwZG93biI+eyRlbnRyeS0+ZG93bmxpbmt9eyRlbnRyeS0+dXBsaW5rfTwvdGQ+CiAgIDx0ZD57JGVudHJ5LT5kZWxldGVsaW5rfTwvdGQ+CnsvaWZ9CiAgIDx0ZCBjbGFzcz0iY2hlY2tib3giPnskZW50cnktPnNlbGVjdGVkfTwvdGQ+CiAgPC90cj4KIHsvZm9yZWFjaH0KICA8L3Rib2R5PgogPC90YWJsZT4Ke2lmICRjYW5tb2QgJiYgJGdjb3VudCA+IDF9PHAgY2xhc3M9ImRuZGhlbHAiPnskZG5kaGVscH08L3A+ey9pZn0KPC9kaXY+CntlbHNlfQogPHAgY2xhc3M9InBhZ2VpbnB1dCIgc3R5bGU9Im1hcmdpbjoyMHB4OyI+eyRub2dyb3Vwc308L3A+CnsvaWZ9CjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj4Ke2lmICRjYW5tb2R9eyRhZGRncnBsaW5rfQp7aWYgJGdjb3VudH0KPGRpdiBzdHlsZT0ibWFyZ2luOjA7ZmxvYXQ6cmlnaHQ7dGV4dC1hbGlnbjpyaWdodCI+CnskY2FuY2VsYnRuMn0geyRhY3RpdmVidG4yfSB7JHNvcnRidG4yfSB7JGRlbGV0ZWJ0bjJ9IHskc3VibWl0YnRuMn0KPC9kaXY+CjxkaXYgY2xhc3M9ImNsZWFyYiI+PC9kaXY+CnsvaWZ9CnsvaWZ9CjwvZGl2Pgp7JGVuZF9mb3JtfQp7JGVuZF90YWJ9Cgp7aWYgJGNvbmZpZ30KeyRzdGFydF9jb25maWdfdGFifQp7JHN0YXJ0X2NvbmZpZ2Zvcm19CiA8ZGl2IGNsYXNzPSJtb2R1bGVfZmJyX292ZXJmbG93Ij4KIDxmaWVsZHNldD48bGVnZW5kPnskdGl0bGVfbmFtZXNfZmllbGRzZXR9PC9sZWdlbmQ+Cntmb3JlYWNoIGZyb209JG5hbWVzIGl0ZW09ZW50cnl9CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JGVudHJ5WzBdfTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRlbnRyeVsxXX17aWYgaXNzZXQoJGVudHJ5WzJdKX08YnIgLz57JGVudHJ5WzJdfXsvaWZ9PC9wPgp7L2ZvcmVhY2h9CiA8L2ZpZWxkc2V0PgogPGZpZWxkc2V0PjxsZWdlbmQ+eyR0aXRsZV9taXNjX2ZpZWxkc2V0fTwvbGVnZW5kPgp7Zm9yZWFjaCBmcm9tPSRtaXNjIGl0ZW09ZW50cnl9CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JGVudHJ5WzBdfTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRlbnRyeVsxXX17aWYgaXNzZXQoJGVudHJ5WzJdKX08YnIgLz57JGVudHJ5WzJdfXsvaWZ9PC9wPgp7L2ZvcmVhY2h9CiA8L2ZpZWxkc2V0Pgp7aWYgaXNzZXQoJGhpZGRlbil9eyRoaWRkZW59ey9pZn0KPGRpdiBzdHlsZT0ibWFyZ2luOjEwcHggMCAwIDA7ZmxvYXQ6cmlnaHQ7dGV4dC1hbGlnbjpyaWdodCI+CnskY2FuY2VsfSB7JHNhdmV9CjwvZGl2Pgo8ZGl2IGNsYXNzPSJjbGVhcmIiPjwvZGl2Pgp7JGVuZF9mb3JtfQp7JGVuZF90YWJ9CnsvaWZ9Cgp7JHRhYl9mb290ZXJzfQoKe2lmICRjYW5tb2R9CjxkaXYgaWQ9ImNvbmZpcm0iIGNsYXNzPSJtb2RhbC1vdmVybGF5Ij4KPGRpdiBjbGFzcz0iY29uZmlybS1jb250YWluZXIiPgo8cCBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6Ym9sZDsiPjwvcD4KPGJyIC8+CjxwIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsiPjxpbnB1dCBpZD0ibWNfY29uZiIgY2xhc3M9ImNtc19zdWJtaXQgcG9wX2J0biIgdHlwZT0ic3VibWl0IiB2YWx1ZT0ieyR5ZXN9IiAvPgombmJzcDsmbmJzcDs8aW5wdXQgaWQ9Im1jX2RlbnkiIGNsYXNzPSJjbXNfc3VibWl0IHBvcF9idG4iIHR5cGU9InN1Ym1pdCIgdmFsdWU9Inskbm99IiAvPjwvcD4KPC9kaXY+CjwvZGl2Pgp7L2lmfQoKe2lmIGlzc2V0KCRqc2Z1bmNzKX0Ke2ZvcmVhY2ggZnJvbT0kanNpbmNzIGl0ZW09ZmlsZX17JGZpbGV9CnsvZm9yZWFjaH0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovLzwhW0NEQVRBWwp7Zm9yZWFjaCBmcm9tPSRqc2Z1bmNzIGl0ZW09ZnVuY317JGZ1bmN9CnsvZm9yZWFjaH0KLy9dXT4KPC9zY3JpcHQ+CnsvaWZ9Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/admin_chart.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRzdGFydGZvcm19CnskaGlkZGVufQo8ZGl2IHN0eWxlPSJvdmVyZmxvdzphdXRvOyI+CjxkaXYgaWQ9ImJyYWNrZXRjaGFydCI+CnskaW1hZ2V9CjwvZGl2Pgo8YnIgLz4KPGRpdiBjbGFzcz0icGFnZWlucHV0Ij4KeyRjbG9zZX0KPC9kaXY+CjwvZGl2Pgp7JGVuZGZvcm19Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/admin_list.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRzdGFydGZvcm19CnskaGlkZGVufQo8aDQgY2xhc3M9InBhZ2V0ZXh0Ij57JHBhZ2V0aXRsZX08L2g0Pgp7aWYgaXNzZXQoJHBhZ2VkZXNjKX08YnIgLz48cD57JHBhZ2VkZXNjfTwvcD48YnIgLz57L2lmfQo8ZGl2IHN0eWxlPSJvdmVyZmxvdzphdXRvOyI+Cntmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZW50cnl9PHA+eyRlbnRyeX08L3A+ey9mb3JlYWNofQo8YnIgLz4KPGRpdiBjbGFzcz0icGFnZWlucHV0Ij57JGNsb3NlfTwvZGl2Pgo8L2Rpdj4KeyRlbmRmb3JtfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/changelog.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGg0IGNsYXNzPSJwYWdlaW5wdXQiPnskdGl0bGV9PC9oND4KeyRzdGFydF9mb3JtfQp7JGhpZGRlbn0Ke2lmIGlzc2V0KCRjaGFuZ2VzKX0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KIDx0YWJsZSBjbGFzcz0icGFnZXRhYmxlIiBzdHlsZT0iYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlOyI+CiAgPHRoZWFkPjx0cj4KICA8dGg+eyRjaGFuZ2VyfTwvdGg+CiAgPHRoPnskY2hhbmdld2hlbn08L3RoPgogIDx0aD57JG5ld2RhdGF9PC90aD4KICA8dGg+eyRvbGRkYXRhfTwvdGg+CiA8L3RyPjwvdGhlYWQ+CiA8dGJvZHk+Cntmb3JlYWNoIGZyb209JGNoYW5nZXMgaXRlbT1lbnRyeX0KIDx0ciBjbGFzcz0ieyRlbnRyeS0+cm93Y2xhc3N9IiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9J3skZW50cnktPnJvd2NsYXNzfWhvdmVyJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPSd7JGVudHJ5LT5yb3djbGFzc30nOyI+CiAgPHRkPnskZW50cnktPndob308L3RkPgogIDx0ZD57JGVudHJ5LT53aGVufTwvdGQ+CiAgPHRkPnskZW50cnktPnRvfTwvdGQ+CiAgPHRkPnskZW50cnktPmZyb219PC90ZD4KIDwvdHI+CnsvZm9yZWFjaH0KIDwvdGJvZHk+CiA8L3RhYmxlPgo8ZGl2Pgp7ZWxzZX0KPGJyIC8+CjxwIGNsYXNzPSJwYWdlaW5wdXQiPnskbm9jaGFuZ2VzfTwvcD4Key9pZn08YnIgLz48YnIgLz4KPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRjbG9zZX08L3A+CnskZW5kX2Zvcm19Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/chart.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICFlbXB0eSgkbWVzc2FnZSl9PHAgc3R5bGU9ImNvbG9yOnJlZDsiPnskbWVzc2FnZX08L3A+ey9pZn0KeyRzdGFydF9mb3JtfQp7JGhpZGRlbn0KPGg0PnskdGl0bGV9PC9oND4Ke2lmIGlzc2V0KCRkZXNjc3JpcHRpb24pfTxiciAvPjxwPnskZGVzY3JpcHRpb259PC9wPjxiciAvPnsvaWZ9CnxDVVNUT018CjxiciAvPjxwPnskbGlzdH17aWYgJHN1Ym1pdH0mbmJzcDt7JHN1Ym1pdH17L2lmfTwvcD4KeyRlbmRfZm9ybX0K]]></data>
	</file>
	<file>
	  <filename>/templates/chart_custom.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBpZD0iYnJhY2tldGNoYXJ0IiBzdHlsZT0ib3ZlcmZsb3c6YXV0bzsiPnskaW1hZ2V9PC9kaXY+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/email_in.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyR0aXRsZX0gbWF0Y2g8YnIgLz48YnIgLz4KeyRyZXBvcnR9Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/email_out.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[WW91ciBuZXh0IG1hdGNoIGluIHRoZSAneyR0aXRsZX0nIHRvdXJuYW1lbnQgaXMgbm93IHNjaGVkdWxlZC4gUGxlYXNlIGJlIHJlYWR5IHRvIHN0YXJ0IGF0IDxiPnskd2hlbn08L2I+Lgo8YnIgLz48YnIgLz4Ke2lmIGlzc2V0KCR3aGVyZSl9VGhlIHZlbnVlIGZvciB0aGUgbWF0Y2ggaXMgeyR3aGVyZX0uPGJyIC8+PGJyIC8+ey9pZn0KSWYgeW91IGhhdmUgYW55IGNvbW1lbnQgb3IgcXVlcnksIHBsZWFzZSBzZW5kIGEgbWVzc2FnZSB0byB7JGNvbnRhY3R9Lgo8YnIgLz48YnIgLz4KRnJvbSB0aGUgb3JnYW5pc2Vycy4=]]></data>
	</file>
	<file>
	  <filename>/templates/error.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICFlbXB0eSgkdGl0bGUpfTxoMyBzdHlsZT0iY29sb3I6I0YwMCI+eyR0aXRsZX08L2gzPnsvaWZ9CntpZiAhZW1wdHkoJG5hbWUpfTxwIHN0eWxlPSJjb2xvcjojRjAwIj57JG5hbWV9PC9wPnsvaWZ9CjxwIHN0eWxlPSJjb2xvcjojRjAwIj57JG1lc3NhZ2V9PC9wPgo=]]></data>
	</file>
	<file>
	  <filename>/templates/import_comp.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRuYXZ9Cnskc3RhcnRmb3JtfQp7JGhlbHB9CnskaW5wdXR9CnskZW5kZm9ybX0K]]></data>
	</file>
	<file>
	  <filename>/templates/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/templates/list.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICFlbXB0eSgkbWVzc2FnZSl9PHAgc3R5bGU9ImNvbG9yOnJlZDsiPnskbWVzc2FnZX08L3A+ey9pZn0KeyRzdGFydF9mb3JtfQp7JGhpZGRlbn0KPGg0PnskdGl0bGV9PC9oND4Ke2lmIGlzc2V0KCRkZXNjc3JpcHRpb24pfTxiciAvPjxwPnskZGVzY3JpcHRpb259PC9wPjxiciAvPnsvaWZ9CjxkaXYgc3R5bGU9Im92ZXJmbG93OmF1dG87Ij4Ke2ZvcmVhY2ggZnJvbT0kaXRlbXMgaXRlbT1lbnRyeX08cD57JGVudHJ5fTwvcD57L2ZvcmVhY2h9CjwvZGl2Pgo8YnIgLz48cCBjbGFzcz0icGFnZWlucHV0Ij57JGNoYXJ0fXtpZiAkc3VibWl0fSZuYnNwO3skc3VibWl0fXsvaWZ9PC9wPgp7JGVuZF9mb3JtfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/onepage.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KPGg0IGNsYXNzPSJwYWdlaW5wdXQiPnskdGl0bGV9OjwvaDQ+PGJyIC8+Cnskc3RhcnRfZm9ybX17JGhpZGRlbn0KPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRjaG9vc2VyfTxiciAvPjxiciAvPgp7JGFwcGx5fSB7JGNhbmNlbH08L3A+CnskZW5kX2Zvcm19PGJyIC8+CjxkaXYgY2xhc3M9InBhZ2VpbnB1dCI+eyRoZWxwfTwvZGl2Pgo8ZGl2Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/result_report.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRzdGFydF9mb3JtfQp7JGhpZGRlbn0KPGg0PnskdGl0bGV9PC9oND4KPHA+eyRkZXNjcmlwdGlvbn08L3A+PGJyIC8+CntpZiBpc3NldCgkbWF0Y2hlcyl9CjxkaXYgc3R5bGU9Im92ZXJmbG93OmF1dG87Ij4Ke2ZvcmVhY2ggZnJvbT0kbWF0Y2hlcyBpdGVtPWVudHJ5fQo8ZGl2PnskZW50cnktPmJ1dHRvbn08L2Rpdj4KPGRpdiBjbGFzcz0ic2VlYmxvY2siPip7JHRpdGxlcmVzdWx0fTogeyRlbnRyeS0+Y2hvb3Nlcn0geyR0aXRsZXNjb3JlfTogeyRlbnRyeS0+c2NvcmV9ICp7JHRpdGxld2hlbn06IHskZW50cnktPndoZW59PC9kaXY+CnsvZm9yZWFjaH0KPC9kaXY+CjxiciAvPgoqeyR0aXRsZXNlbmRlcn06IHskaW5wdXRzZW5kZXJ9CjxiciAvPjxiciAvPgp7JHRpdGxlY29tbWVudH06PGJyIC8+eyRpbnB1dGNvbW1lbnR9CntpZiAkY2FwdGNoYX0KPGJyIC8+PGJyIC8+CnskY2FwdGNoYX08YnIgLz4KKnskdGl0bGVjYXB0Y2hhfTogeyRpbnB1dGNhcHRjaGF9CnsvaWZ9CntlbHNlfQo8cD57JG5vbWF0Y2hlc308L3A+CnsvaWZ9CjxiciAvPgp7aWYgIWVtcHR5KCRtZXNzYWdlKX08cCBpZD0ic3lzZXJyIiBzdHlsZT0iY29sb3I6cmVkOyI+eyRtZXNzYWdlfTwvcD57L2lmfQo8cCBpZD0ibG9jYWxlcnIiIHN0eWxlPSJjb2xvcjpyZWQ7ZGlzcGxheTpub25lOyI+PC9wPgo8YnIgLz4Ke2lmIGlzc2V0KCRtYXRjaGVzKX17JHNlbmR9Jm5ic3A7Jm5ic3A7ey9pZn17JGNhbmNlbH0KeyRlbmRfZm9ybX0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovLzwhW0NEQVRBWwp7Zm9yZWFjaCBmcm9tPSRqc2Z1bmNzIGl0ZW09ZnVuY317JGZ1bmN9ey9mb3JlYWNofQovL11dPgo8L3NjcmlwdD4K]]></data>
	</file>
	<file>
	  <filename>/templates/tweet_auth.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICFlbXB0eSgkbWVzc2FnZSl9PHAgc3R5bGU9ImNvbG9yOnJlZDsiPnskbWVzc2FnZX08L3A+ey9pZn0KeyRzdGFydF9mb3JtfQp7JGhpZGRlbn0KPGg0IHN0eWxlPSJsaW5lLWhlaWdodDozMnB4OyI+PGltZyBzdHlsZT0ibWFyZ2luOjA7dmVydGljYWwtYWxpZ246bWlkZGxlOyIgc3JjPSJ7JGljb259Ii8+IHskdGl0bGV9PC9oND4Ke2lmICFlbXB0eSgkZGVzY3JpcHRpb24pfTxwPnskZGVzY3JpcHRpb259PC9wPnsvaWZ9CjxiciAvPnskc3VibWl0fQp7JGVuZF9mb3JtfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/tweet_in.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyR0aXRsZX0gbWF0Y2ggeyR3aGVufSB7JHJlc3VsdH0geyRzY29yZX0K]]></data>
	</file>
	<file>
	  <filename>/templates/tweet_out.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyR0aXRsZX0gbWF0Y2ggeyR3aGVufXtpZiAkd2hlcmV9IHskd2hlcmV9ey9pZn17aWYgJHRlYW1zfSB7JHRlYW1zfXsvaWZ9Cg==]]></data>
	</file>
	<file>
	  <filename>/Tourney.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgTWFkZSBTaW1wbGUgbW9kdWxlOiBUb3VybmV5LgojIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IFRvbSBQaGFuZSA8dHBnd3dAb25lcG9zdC5uZXQ+CiMgVmVyc2lvbjogMC4yLjIKIyBNb3JlIGluZm8gYXQgaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy90b3VybmV5CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBtb2R1bGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAojIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKIyBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgbW9kdWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAojIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuIElmIHlvdSBkb24ndCBoYXZlIGEgY29weQojIG9mIHRoYXQgbGljZW5zZSwgcmVhZCBpdCBvbmxpbmUgYXQ6IHd3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjQUdQTAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKY2xhc3MgVG91cm5leSBleHRlbmRzIENNU01vZHVsZQp7Cgljb25zdCBLT1RZUEUgPSAwOwoJY29uc3QgREVUWVBFID0gMTsKCWNvbnN0IFJSVFlQRSA9IDI7Cgljb25zdCBLT01JTiA9IDI7Cgljb25zdCBLT01BWCA9IDI1NjsKCWNvbnN0IERFTUlOID0gMzsKCWNvbnN0IERFTUFYID0gMTI4OwoJY29uc3QgUlJNSU4gPSAyOwoJY29uc3QgUlJNQVggPSAyMDsKCS8vdGltZSBpbnRlcnZhbCAoaG91cnMpIGJlZm9yZSB3aGljaCBuZXcgbWF0Y2hlcyBhcmVuJ3Qgc2NoZWR1bGVkIGFuZCB3aXRoaW4gd2hpY2ggRklSTSBtYXRjaGVzIGFyZSBjb25zaWRlcmVkICdjb21taXR0ZWQnCgljb25zdCBMRUFESE9VUlMgPSA0ODsKCS8vbWF0Y2gtc3RhdHVzIGVudW0gdmFsdWVzCgkvLyBzY2hlZHVsZWQgKDxNUkVTLCE9MCkKCWNvbnN0IE5PVFlFVCA9IC0xOyAvL3J1bnRpbWUgZGF0YSBzb21ldGltZXMsIG5vdCBzdG9yZWQKCWNvbnN0IFNPRlQgPSAxOwoJY29uc3QgRklSTSA9IDI7Cgljb25zdCBUT0xEID0gMzsJLy9ub3RpZmljYXRpb24gc2VudCAoaW5jbHVkaW5nIGNhbmNlbGxhdGlvbikKCWNvbnN0IEFTS0VEID0gNDsgLy9tYXRjaC1yZXN1bHQgcmVxdWVzdCBzZW50CgkvLyB0aHJlc2hvbGQgZm9yIHNjaGVkdWxlZCBtYXRjaGVzIHdpdGggTlVMTCB0ZWFtQSBhbmQvb3IgdGVhbUIsIG5vdCBzdG9yZWQKCWNvbnN0IEFOT04gPSA3OwoJLy8gc2NoZWR1bGVkIG1hdGNoZXMgd2l0aCB1bmtub3duIHBhcnRpY2lwYW50KHMpID49IEFOT04gPCBNUkVTCgljb25zdCBBU09GVCA9IDc7Cgljb25zdCBBRklSTSA9IDg7CgkvLyB0aHJlc2hvbGQgYmV0d2VlbiBzY2hlZHVsZXMgYW5kIHJlc3VsdHMsIG5vdCBzdG9yZWQKCWNvbnN0IE1SRVMgPSAxMTsKCS8vIG1hdGNoIHJlc3VsdCAoPj1NUkVTKQoJY29uc3QgV09OQSA9IDExOwoJY29uc3QgV09OQiA9IDEyOwoJY29uc3QgRk9SRkEgPSAxMzsKCWNvbnN0IEZPUkZCID0gMTQ7Cgljb25zdCBNVElFRCA9IDE1OwoJY29uc3QgTk9XSU4gPSAxNjsKCglwcm90ZWN0ZWQgJFBlcm1BZG1pbk5hbWUgPSAnTW9kaWZ5IFRvdXJuZXlNb2R1bGUgU2V0dGluZ3MnOwoJcHJvdGVjdGVkICRQZXJtTW9kTmFtZSA9ICdNb2RpZnkgQnJhY2tldHMnOwoJcHJvdGVjdGVkICRQZXJtU2NvcmVOYW1lID0gJ01vZGlmeSBCcmFja2V0RGF0YSc7Cglwcm90ZWN0ZWQgJFBlcm1TZWVOYW1lID0gJ1NlZSBCcmFja2V0cyc7CgoJZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQoJewoJCXBhcmVudDo6X19jb25zdHJ1Y3QoKTsKCQkkdGhpcy0+UmVnaXN0ZXJNb2R1bGVQbHVnaW4oKTsKCX0KCglmdW5jdGlvbiBBbGxvd0F1dG9JbnN0YWxsKCkKCXsKCQlyZXR1cm4gRkFMU0U7Cgl9CgoJZnVuY3Rpb24gQWxsb3dBdXRvVXBncmFkZSgpCgl7CgkJcmV0dXJuIEZBTFNFOwoJfQoKCWZ1bmN0aW9uIEdldE5hbWUoKQoJewoJCXJldHVybiAnVG91cm5leSc7Cgl9CgoJZnVuY3Rpb24gR2V0RnJpZW5kbHlOYW1lKCkKCXsKCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpOwoJfQoKCWZ1bmN0aW9uIEdldFZlcnNpb24oKQoJewoJCXJldHVybiAnMC4yLjInOwoJfQoKCWZ1bmN0aW9uIEdldEhlbHAoKQoJewoJCSRmbiA9IGNtc19qb2luX3BhdGgoZGlybmFtZShfX0ZJTEVfXyksJ2NzcycsJ2NoYXJ0LmNzcycpOwoJCSRjb250ID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRmbik7CgkJaWYgKCRjb250KQoJCXsKCQkJJGV4YW1wbGUgPSBwcmVnX3JlcGxhY2UoYXJyYXkoJ35ccz8vXCooLiopP1wqL35Vc20nLCd+XHM/Ly8uKiR+bScpLGFycmF5KCcnLCcnKSwkY29udCk7CgkJCSRleGFtcGxlID0gc3RyX3JlcGxhY2UoYXJyYXkoIlxuXG4iLCJcbiIsIlx0IiksYXJyYXkoJzxiciAvPicsJzxiciAvPicsJyAnKSx0cmltKCRleGFtcGxlKSk7CgkJfQoJCWVsc2UKCQkJJGV4YW1wbGUgPSAkdGhpcy0+TGFuZygnbWlzc2luZycpOwoJCXJldHVybiAkdGhpcy0+TGFuZygnaGVscCcsJGV4YW1wbGUpOwoJfQoKCWZ1bmN0aW9uIEdldEF1dGhvcigpCgl7CgkJcmV0dXJuICd0b21waGFudG9vJzsKCX0KCglmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpCgl7CgkJcmV0dXJuICd0cGd3d0BvbmVwb3N0Lm5ldCc7Cgl9CgoJZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkKCXsKCQkkZm4gPSBjbXNfam9pbl9wYXRoKGRpcm5hbWUoX19GSUxFX18pLCdpbmNsdWRlJywnY2hhbmdlbG9nLmluYycpOwoJCXJldHVybiBAZmlsZV9nZXRfY29udGVudHMoJGZuKTsKCX0KCglmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpCgl7CgkJcmV0dXJuIFRSVUU7Cgl9CgoJZnVuY3Rpb24gSGFzQWRtaW4oKQoJewoJCXJldHVybiBUUlVFOwoJfQoKCWZ1bmN0aW9uIExhenlMb2FkQWRtaW4oKQoJewoJCXJldHVybiBGQUxTRTsgLy9uZWVkIGltbWVkaWF0ZSBsb2FkIGZvciBtZW51IGNyZWF0aW9uCgl9CgoJZnVuY3Rpb24gR2V0QWRtaW5TZWN0aW9uKCkKCXsKCQlyZXR1cm4gJ2NvbnRlbnQnOwoJfQoKCWZ1bmN0aW9uIEdldEFkbWluRGVzY3JpcHRpb24oKQoJewoJCXJldHVybiAkdGhpcy0+TGFuZygnYWRtaW5kZXNjcmlwdGlvbicpOwoJfQoKCWZ1bmN0aW9uIFZpc2libGVUb0FkbWluVXNlcigpCgl7CgkJcmV0dXJuICR0aGlzLT5DaGVja0FjY2VzcygpOwoJfQoKCWZ1bmN0aW9uIEFkbWluU3R5bGUoKQoJewoJfQoKCWZ1bmN0aW9uIEdldEhlYWRlckhUTUwoKQoJewoJCSR1cmwgPSAkdGhpcy0+R2V0TW9kdWxlVVJMUGF0aCgpOwoJCXJldHVybiAnPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJy4kdXJsLicvY3NzL3Bpa2FkYXkuY3NzIiAvPgo8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSInLiR1cmwuIi9jc3MvbW9kdWxlLmNzc1wiIC8+XG4iOwoJfQoKCWZ1bmN0aW9uIFN1cHByZXNzQWRtaW5PdXRwdXQoJiRyZXF1ZXN0KQoJewoJCS8vaXMgdGhpcyBnZW5lcmFsIGVub3VnaD8gc3RyaW5nICdtYWN0JyBhbmQgJ20xXycgYXJlIGhhcmRjb2RlZCBpbnRvIENNU01TIGZvciBiYWNrZW5kIGFjdGlvbnMKCQlpZiAoaXNzZXQoJHJlcXVlc3RbJ21hY3QnXSkpCgkJewoJCQlpZiAoc3RycG9zKCRyZXF1ZXN0WydtYWN0J10sJyxjaGVja19kYXRhJykpCgkJCQlyZXR1cm4gVFJVRTsKCQkJaWYgKHN0cnBvcygkcmVxdWVzdFsnbWFjdCddLCcsbW92ZV90ZWFtJykpCgkJCQlyZXR1cm4gVFJVRTsKCQkJaWYgKHN0cnBvcygkcmVxdWVzdFsnbWFjdCddLCcsb3JkZXJfdGVhbScpKQoJCQkJcmV0dXJuIFRSVUU7CgkJCWlmIChzdHJwb3MoJHJlcXVlc3RbJ21hY3QnXSwnLG9yZGVyX2dyb3VwcycpKQoJCQkJcmV0dXJuIFRSVUU7CgkJCWlmIChzdHJwb3MoJHJlcXVlc3RbJ21hY3QnXSwnLGV4cG9ydF9jb21wJykpCgkJCQlyZXR1cm4gVFJVRTsKCQkJaWYgKHN0cnBvcygkcmVxdWVzdFsnbWFjdCddLCcsYWRkZWRpdF9jb21wLCcpCgkJCQkmJiBpc3NldCgkcmVxdWVzdFsnbTFfcmVhbF9hY3Rpb24nXSkKCQkJCSYmICRyZXF1ZXN0WydtMV9yZWFsX2FjdGlvbiddID09ICdtMV9leHBvcnQnKQoJCQkJcmV0dXJuIFRSVUU7IC8vZXhwb3J0IHNlbGVjdGVkIHRlYW0ocykKCQkJaWYgKHN0cnBvcygkcmVxdWVzdFsnbWFjdCddLCcsYWRkZWRpdF90ZWFtLCcpCgkJCQkmJiBpc3NldCgkcmVxdWVzdFsnbTFfZXhwb3J0J10pKQoJCQkJCXJldHVybiBUUlVFOyAvL2V4cG9ydCBzZWxlY3RlZCB0ZWFtLW1lbWJlcihzKQoJCQlpZiAoc3RycG9zKCRyZXF1ZXN0WydtYWN0J10sJyxwcm9jZXNzX2l0ZW1zLCcpCgkJCQkmJiAoaXNzZXQoJHJlcXVlc3RbJ20xX3ByaW50J10pIHx8IGlzc2V0KCRyZXF1ZXN0WydtMV9leHBvcnQnXSkpKQoJCQkJCXJldHVybiBUUlVFOyAvL2V4cG9ydCBzZWxlY3RlZCBicmFja2V0KHMpCgkJfQoJCXJldHVybiBGQUxTRTsKCX0KCglmdW5jdGlvbiBHZXREZXBlbmRlbmNpZXMoKQoJewoJCXJldHVybiBhcnJheSgpOwoJfQoJLy9mb3IgMS4xMSsKCWZ1bmN0aW9uIEFsbG93U21hcnR5Q2FjaGluZygpCgl7CgkJcmV0dXJuIEZBTFNFOwoJfQoJZnVuY3Rpb24gTGF6eUxvYWRGcm9udGVuZCgpCgl7CgkJcmV0dXJuIFRSVUU7Cgl9CgoJZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKQoJewoJCXJldHVybiAnMS45JzsKCX0KCglmdW5jdGlvbiBNYXhpbXVtQ01TVmVyc2lvbigpCgl7CgkJcmV0dXJuICcxLjE5Ljk5JzsKCX0KCglmdW5jdGlvbiBJbnN0YWxsUG9zdE1lc3NhZ2UoKQoJewoJCXJldHVybiAkdGhpcy0+TGFuZygncG9zdGluc3RhbGwnKTsKCX0KCglmdW5jdGlvbiBVbmluc3RhbGxQcmVNZXNzYWdlKCkKCXsKCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ2NvbmZpcm1fdW5pbnN0YWxsJyk7Cgl9CgoJZnVuY3Rpb24gVW5pbnN0YWxsUG9zdE1lc3NhZ2UoKQoJewoJCXJldHVybiAkdGhpcy0+TGFuZygncG9zdHVuaW5zdGFsbCcpOwoJfQoKCS8vc2V0dXAgZm9yIHByZS0xLjEwCglmdW5jdGlvbiBTZXRQYXJhbWV0ZXJzKCkKCXsKCQkkdGhpcy0+SW5pdGlhbGl6ZUFkbWluKCk7CgkJJHRoaXMtPkluaXRpYWxpemVGcm9udGVuZCgpOwoJfQoKCS8vcGFydGlhbCBzZXR1cCBmb3IgcHJlLTEuMTAsIGJhY2tlbmQgc2V0dXAgZm9yIDEuMTArCglmdW5jdGlvbiBJbml0aWFsaXplRnJvbnRlbmQoKQoJewoJCSR0aGlzLT5SZXN0cmljdFVua25vd25QYXJhbXMoKTsKCQkvL2J1dHRvbiBhY3Rpb25zCgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2NoYXJ0JyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdsaXN0JyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdub3NlbmQnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3JlYWxfYWN0aW9uJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdyZXN1bHQnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3NlbmQnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2Nvbm5lY3QnLENMRUFOX1NUUklORyk7CgkJLy9oaWRkZW4gZGF0YQoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdicmFja2V0X2lkJyxDTEVBTl9JTlQpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdjYXB0Y2hhJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdjb21tZW50JyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdtYXRjaCcsQ0xFQU5fSU5UKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnbWVzc2FnZScsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnc2NvcmUnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3NlbmRlcicsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnd2hlbicsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnc2hvd24nLENMRUFOX1NUUklORyk7CgkJLy90d2l0dGVyIGF1dGhvcmlzYXRpb24KCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnb2F1dGhfdG9rZW4nLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ29hdXRoX3ZlcmlmaWVyJyxDTEVBTl9TVFJJTkcpOwoJCS8vcGFnZS10YWcgdmFyaWFibGVzCgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2FsaWFzJyxDTEVBTl9TVFJJTkcpOyAvL2FsaWFzIHN0cmluZwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCd2aWV3JyxDTEVBTl9TVFJJTkcpOyAvL2xpc3Qgb3IgY2hhcnQKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnY3NzZmlsZScsQ0xFQU5fU1RSSU5HKTsgLy9hYnNvbHV0ZSBvciB1cGxvYWRzLXJlbGF0aXZlIHBhdGggb2YgY2hhcnQtY3NzIGZpbGUKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgndHdlZXRhdXRoJyxDTEVBTl9JTlQpOwoJCS8vdGhlIHJlc3QgYXJlIGZvciBpbnRlcm5hbCB1c2Ugb25seQovLwkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoQ0xFQU5fUkVHRVhQLicvdG10Xy4qLycsQ0xFQU5fU1RSSU5HKTsKCX0KCgkvL3BhcnRpYWwgc2V0dXAgZm9yIHByZS0xLjEwLCBiYWNrZW5kIHNldHVwIGZvciAxLjEwKwoJZnVuY3Rpb24gSW5pdGlhbGl6ZUFkbWluKCkKCXsKCQkvL2RvY3VtZW50IG9ubHkgdGhlIHBhcmFtZXRlcnMgcmVsZXZhbnQgZm9yIGV4dGVybmFsIChwYWdlLXRhZykgdXNhZ2UKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdhbGlhcycsJycsJHRoaXMtPkxhbmcoJ3BhcmFtc190bXRfYWxpYXMnKSxGQUxTRSk7CgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcigndmlldycsJ2NoYXJ0JywkdGhpcy0+TGFuZygncGFyYW1zX3ZpZXdfdHlwZScpKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdjc3NmaWxlJywnJywkdGhpcy0+TGFuZygncGFyYW1zX2NoYXJ0X2NzcycpKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCd0d2VldGF1dGgnLCcnLCR0aGlzLT5MYW5nKCdwYXJhbXNfdHdlZXRfYXV0aCcpKTsKCX0KCglmdW5jdGlvbiBHZXRBY3RpdmVUYWIoJiRwYXJhbXMpCgl7CgkJaWYgKGVtcHR5KCRwYXJhbXNbJ2FjdGl2ZV90YWInXSkpCgkJCXJldHVybiAnbWFpbnRhYic7CgkJZWxzZQoJCQlyZXR1cm4gJHBhcmFtc1snYWN0aXZlX3RhYiddOwoJfQoKCS8vY29uc3RydWN0IG9yZGVyZWQgYXJyYXkgb2YgZ3JvdXBzIGRhdGEgOiBrZXkgPSBncm91cF9pZCwgdmFsdWUgPSBvdGhlciByb3cgZGF0YSBhcnJheQoJLy9pZiAkYWN0aXZlLCBvbmx5IHRoZSBhY3RpdmUgZ3JvdXBzIGFyZSByZXR1cm5lZCAtIG90aGVyd2lzZSBhbGwKCWZ1bmN0aW9uIEdldEdyb3VwcygkYWN0aXZlPUZBTFNFKQoJewoJCSRwcmVmID0gY21zX2RiX3ByZWZpeCgpOwoJCSRkYiA9IGNtc21zKCktPkdldERCKCk7CgkJJHNxbCA9ICdTRUxFQ1QgKiBGUk9NICcuJHByZWYuJ21vZHVsZV90bXRfZ3JvdXBzIE9SREVSIEJZIGRpc3BsYXlvcmRlcic7CgkJJGdyb3VwcyA9ICRkYi0+R2V0QXNzb2MoJHNxbCk7CgkJaWYoJGdyb3VwcyAmJiAkYWN0aXZlKQoJCXsKCQkJZm9yZWFjaCAoJGdyb3VwcyBhcyAmJGRhdGEpCgkJCXsKCQkJCWlmICgoKGludCkkZGF0YVsnZmxhZ3MnXSAmIDEpID09IDApCgkJCQkJJGRhdGEgPSBOVUxMOwoJCQl9CgkJCXVuc2V0KCRkYXRhKTsKCQkJJGdyb3VwcyA9IGFycmF5X2RpZmYoJGdyb3VwcyxhcnJheShOVUxMKSk7CgkJfQoJCXJldHVybiAkZ3JvdXBzOwoJfQoJCgkvL2NvbnN0cnVjdCBzZXJpZXMgb2YgaGlkZGVuIG9iamVjdHMgdG8gc3VwcG9ydCBwYWdlLXJlY3JlYXRpb24gd2hlbiBlZGl0aW5nIGNvbXAKCWZ1bmN0aW9uIEdldEhpZGRlblBhcm1zKCRpZCwmJHBhcmFtcywkdGFibmFtZT1GQUxTRSkKCXsKCQkkaGlkZGVuID0gJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwnYnJhY2tldF9pZCcsJHBhcmFtc1snYnJhY2tldF9pZCddKTsKCQlpZihpc3NldCgkcGFyYW1zWyduZXdicmFja2V0J10pKQoJCQkkaGlkZGVuIC49ICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ25ld2JyYWNrZXQnLCRwYXJhbXNbJ25ld2JyYWNrZXQnXSk7CgkJJHZhbCA9IChpc3NldCgkcGFyYW1zWydtYXRjaHZpZXcnXSkpPyRwYXJhbXNbJ21hdGNodmlldyddOidhY3R1YWwnOwoJCSRoaWRkZW4gLj0gJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwnbWF0Y2h2aWV3JywkdmFsKTsKCQkkdmFsID0gKGlzc2V0KCRwYXJhbXNbJ3Jlc3VsdHZpZXcnXSkpPyRwYXJhbXNbJ3Jlc3VsdHZpZXcnXTonZnV0dXJlJzsKCQkkaGlkZGVuIC49ICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ3Jlc3VsdHZpZXcnLCR2YWwpOwoJCWlmKCEkdGFibmFtZSkKCQkJJHRhYm5hbWUgPSAkdGhpcy0+R2V0QWN0aXZlVGFiKCRwYXJhbXMpOwoJCSRoaWRkZW4gLj0gJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwnYWN0aXZlX3RhYicsJHRhYm5hbWUpOwoJCXJldHVybiAkaGlkZGVuOwoJfQoKCS8vY29uc3RydWN0IGFycmF5IG9mIHBhcmFtZXRlcnMgZm9yIHJlZGlyZWN0aW9uIHRvIGEgc3BlY2lmaWMgdGFiLCB3aGVuIGVkaXRpbmcgY29tcAoJZnVuY3Rpb24gR2V0RWRpdFBhcm1zKCYkcGFyYW1zLCR0YWJuYW1lPUZBTFNFLCRtZXNzYWdlPUZBTFNFKQoJewoJCSRuZXdwID0gYXJyYXkoJ2JyYWNrZXRfaWQnPT4kcGFyYW1zWydicmFja2V0X2lkJ10sJ3JlYWxfYWN0aW9uJz0+J2VkaXQnKTsKCQlpZihpc3NldCgkcGFyYW1zWyduZXdicmFja2V0J10pKQoJCQkkbmV3cFsnbmV3YnJhY2tldCddID0gJHBhcmFtc1snbmV3YnJhY2tldCddOwoJCWlmKGlzc2V0KCRwYXJhbXNbJ2FjdGl2ZV90YWInXSkpCgkJCSRuZXdwWydhY3RpdmVfdGFiJ10gPSAkcGFyYW1zWydhY3RpdmVfdGFiJ107CgkJZWxzZWlmKCR0YWJuYW1lKQoJCQkkbmV3cFsnYWN0aXZlX3RhYiddID0gJHRhYm5hbWU7CgkJaWYoaXNzZXQoJHBhcmFtc1snbWF0Y2h2aWV3J10pKQoJCQkkbmV3cFsnbWF0Y2h2aWV3J10gPSAkcGFyYW1zWydtYXRjaHZpZXcnXTsKCQllbHNlCgkJCSRuZXdwWydtYXRjaHZpZXcnXSA9ICdhY3R1YWwnOwoJCWlmKGlzc2V0KCRwYXJhbXNbJ3Jlc3VsdHZpZXcnXSkpCgkJCSRuZXdwWydyZXN1bHR2aWV3J10gPSAkcGFyYW1zWydyZXN1bHR2aWV3J107CgkJZWxzZQoJCQkkbmV3cFsncmVzdWx0dmlldyddID0gJ2Z1dHVyZSc7CgkJaWYgKCRtZXNzYWdlKQoJCQkkbmV3cFsndG10X21lc3NhZ2UnXSA9ICRtZXNzYWdlOwoJCXJldHVybiAkbmV3cDsKCX0KCglmdW5jdGlvbiBUZWFtTmFtZSgkdGVhbV9pZCwgJG1pc3Npbmc9VFJVRSkKCXsKCQkkcHJlZiA9IGNtc19kYl9wcmVmaXgoKTsKCQkkZGIgPSBjbXNtcygpLT5HZXREQigpOwoJCSRzcWwgPSAnU0VMRUNUIG5hbWUgRlJPTSAnLiRwcmVmLidtb2R1bGVfdG10X3RlYW1zIFdIRVJFIHRlYW1faWQ9Pyc7CgkJJG5hbWUgPSAkZGItPkdldE9uZSgkc3FsLGFycmF5KCR0ZWFtX2lkKSk7CgkJaWYgKCRuYW1lKQoJCXsKCQkJJG5hbWUgPSB0cmltKCRuYW1lKTsKCQkJaWYgKCRuYW1lKQoJCQkJcmV0dXJuICRuYW1lOwoJCX0KCQkkc3FsID0gJ1NFTEVDVCBuYW1lIEZST00gJy4kcHJlZi4nbW9kdWxlX3RtdF9wZW9wbGUgV0hFUkUgaWQ9PyBBTkQgZmxhZ3MhPTIgT1JERVIgQlkgZGlzcGxheW9yZGVyJzsKCQkkcnMgPSAkZGItPlNlbGVjdExpbWl0KCRzcWwsMSwtMSxhcnJheSgkdGVhbV9pZCkpOwoJCWlmICgkcnMpCgkJewoJCQlpZiAoISRycy0+RU9GKQoJCQl7CgkJCQlleHRyYWN0KCRycy0+RmV0Y2hSb3coKSk7CgkJCQkkbmFtZSA9IHRyaW0oJG5hbWUpOwoJCQl9CgkJCSRycy0+Q2xvc2UoKTsKCQl9CgkJaWYgKCRuYW1lKQoJCXsKCQkJJG5hbWUgPSB0cmltKCRuYW1lKTsKCQkJaWYgKCRuYW1lKQoJCQkJcmV0dXJuICRuYW1lOwoJCX0KCQlyZXR1cm4gKCRtaXNzaW5nKSA/ICR0aGlzLT5NaXNzaW5nTmFtZSgpIDogJyc7Cgl9CgoJZnVuY3Rpb24gTWlzc2luZ05hbWUoKQoJewoJCXJldHVybiAnPCcuJHRoaXMtPkxhbmcoJ25vbmFtZScpLic+JzsKCX0KCglmdW5jdGlvbiBHZXRMaW1pdHMoJHR5cGU9VG91cm5leTo6S09UWVBFKQoJewoJCXN3aXRjaCAoJHR5cGUpCgkJewoJCWNhc2UgVG91cm5leTo6S09UWVBFOgoJCSByZXR1cm4gYXJyYXkgKFRvdXJuZXk6OktPTUlOLFRvdXJuZXk6OktPTUFYKTsKCQljYXNlIFRvdXJuZXk6OkRFVFlQRToKCQkgcmV0dXJuIGFycmF5IChUb3VybmV5OjpERU1JTixUb3VybmV5OjpERU1BWCk7CgkJY2FzZSBUb3VybmV5OjpSUlRZUEU6CgkJIHJldHVybiBhcnJheSAoVG91cm5leTo6UlJNSU4sVG91cm5leTo6UlJNQVgpOwoJCWRlZmF1bHQ6CgkJIHJldHVybiBhcnJheSAoMCwwKTsKCQl9Cgl9CgoJZnVuY3Rpb24gR2V0VGltZVpvbmVzKCkKCXsKCQlzdGF0aWMgJHJlZ2lvbnMgPSBhcnJheSgKCQkJRGF0ZVRpbWVab25lOjpBRlJJQ0EsCgkJCURhdGVUaW1lWm9uZTo6QU1FUklDQSwKCQkJRGF0ZVRpbWVab25lOjpBTlRBUkNUSUNBLAoJCQlEYXRlVGltZVpvbmU6OkFTSUEsCgkJCURhdGVUaW1lWm9uZTo6QVRMQU5USUMsCgkJCURhdGVUaW1lWm9uZTo6QVVTVFJBTElBLAoJCQlEYXRlVGltZVpvbmU6OkVVUk9QRSwKCQkJRGF0ZVRpbWVab25lOjpJTkRJQU4sCgkJCURhdGVUaW1lWm9uZTo6UEFDSUZJQywKCQkpOwoKCQkkdGltZXpvbmVzID0gYXJyYXkoKTsKCQlmb3JlYWNoKCRyZWdpb25zIGFzICRyZWdpb24pCgkJCSR0aW1lem9uZXMgPSBhcnJheV9tZXJnZSgkdGltZXpvbmVzLCBEYXRlVGltZVpvbmU6Omxpc3RJZGVudGlmaWVycygkcmVnaW9uKSk7CgoJCWtzb3J0KCR0aW1lem9uZXMpOwoKCQkkY3VycmVudCA9IG5ldyBEYXRlVGltZSgpOwoJCSR0aW1lem9uZV9vZmZzZXRzID0gYXJyYXkoKTsKCQlmb3JlYWNoKCR0aW1lem9uZXMgYXMgJG9uZXpvbmUpCgkJewoJCQkkdHogPSBuZXcgRGF0ZVRpbWVab25lKCRvbmV6b25lKTsKCQkJJHRpbWV6b25lX29mZnNldHNbJG9uZXpvbmVdID0gJHR6LT5nZXRPZmZzZXQoJGN1cnJlbnQpOwoJCX0KCgkJJHRpbWV6b25lX2xpc3QgPSBhcnJheSgpOwoJCWZvcmVhY2goJHRpbWV6b25lX29mZnNldHMgYXMgJG9uZXpvbmUgPT4gJG9mZnNldCkKCQl7CgkJCSRvZmZzZXRfcHJlZml4ID0gJG9mZnNldCA8IDAgPyAnLScgOiAnKyc7CgkJCSRvZmZzZXRfZm9ybWF0dGVkID0gZ21kYXRlKCdHOmknLCBhYnMoJG9mZnNldCkpOwoJCQkkcHJldHR5X29mZnNldCA9ICJVVEMke29mZnNldF9wcmVmaXh9JHtvZmZzZXRfZm9ybWF0dGVkfSI7CgkJCSR0aW1lem9uZV9saXN0WyIkb25lem9uZSAoJHtwcmV0dHlfb2Zmc2V0fSkiXSA9ICRvbmV6b25lOwoJCX0KCgkJcmV0dXJuICR0aW1lem9uZV9saXN0OwoJfQoKCS8qKgoJR2V0Wm9uZURhdGVUeXBlOgoJQHpvbmU6IGJyYWNrZXQgdGltZXpvbmUgc3RyaW5nCglSZXR1cm5zOiBpbmRpY2F0b3Igb2YgZGF0ZS1zdHJpbmcgZm9ybWF0IGZvciBAem9uZSAndXMnIG9yICd1aycgb3IgJ3ltZCcKCSovCglmdW5jdGlvbiBHZXRab25lRGF0ZVR5cGUoJHpvbmUpCgl7CgkJaWYoISR6b25lKQoJCQlyZXR1cm4gJ3VrJzsgLy9kZWZhdWx0IFVLIGZvcm1hdAoJCS8vVVMgZGF0ZSBmb3JtYXQgPwoJCWlmKHN0cnBvcygKJ0FmcmljYS9Kb2hhbm5lc2J1cmcKQW1lcmljYS9BZGFrCkFtZXJpY2EvQW5jaG9yYWdlCkFtZXJpY2EvQmVsaXplCkFtZXJpY2EvQm9pc2UKQW1lcmljYS9DaGljYWdvCkFtZXJpY2EvRGVudmVyCkFtZXJpY2EvRGV0cm9pdApBbWVyaWNhL0p1bmVhdQpBbWVyaWNhL0xvc19BbmdlbGVzCkFtZXJpY2EvTWVub21pbmVlCkFtZXJpY2EvTWV0bGFrYXRsYQpBbWVyaWNhL05ld19Zb3JrCkFtZXJpY2EvTm9tZQpBbWVyaWNhL1Bob2VuaXgKQW1lcmljYS9TaGlwcm9jCkFtZXJpY2EvU2l0a2EKQW1lcmljYS9ZYWt1dGF0CkFzaWEvS2F0aG1hbmR1CkV1cm9wZS9Db3BlbmhhZ2VuCkV1cm9wZS9TdG9ja2hvbG0KUGFjaWZpYy9Ib25vbHVsdScKCQkJLCR6b25lKSAhPT0gRkFMU0UpCgkJCXJldHVybiAndXMnOwoJCS8vVVMgZGF0ZSBmb3JtYXQgZm9ybWF0IGZvciBzdWJ6b25lcwoJCWlmIChzdWJzdHIoJHpvbmUsMCw3KSA9PSAnQW1lcmljYScpCgkJewoJCQlmb3JlYWNoKGFycmF5KCdJbmRpYW5hJyA9PiA3LCdLZW50dWNreScgPT4gOCwnTm9ydGhfRGFrb3RhJyA9PiAxMikgYXMgJG5hbWU9PiRsZW4pCgkJCXsKCQkJCWlmKHN1YnN0cl9jb21wYXJlKCR6b25lLCRuYW1lLDksJGxlbikgPT09IDApCgkJCQkJcmV0dXJuICd1cyc7CgkJCX0KCQl9CgkJLy9ZTUQgZGF0ZSBmb3JtYXQgPwoJCWlmKHN0cnBvcygKJ0FtZXJpY2EvQXRpa29rYW4KQW1lcmljYS9CbGFuYy1TYWJsb24KQW1lcmljYS9DYW1icmlkZ2VfQmF5CkFtZXJpY2EvQ3Jlc3RvbgpBbWVyaWNhL0Rhd3NvbgpBbWVyaWNhL0Rhd3Nvbl9DcmVlawpBbWVyaWNhL0VkbW9udG9uCkFtZXJpY2EvR2xhY2VfQmF5CkFtZXJpY2EvR29vc2VfQmF5CkFtZXJpY2EvSGFsaWZheApBbWVyaWNhL0ludXZpawpBbWVyaWNhL0lxYWx1aXQKQW1lcmljYS9Nb25jdG9uCkFtZXJpY2EvTW9udHJlYWwKQW1lcmljYS9OaXBpZ29uCkFtZXJpY2EvUGFuZ25pcnR1bmcKQW1lcmljYS9SYWlueV9SaXZlcgpBbWVyaWNhL1Jhbmtpbl9JbmxldApBbWVyaWNhL1JlZ2luYQpBbWVyaWNhL1Jlc29sdXRlCkFtZXJpY2EvU3RfSm9obnMKQW1lcmljYS9Td2lmdF9DdXJyZW50CkFtZXJpY2EvVGh1bmRlcl9CYXkKQW1lcmljYS9Ub3JvbnRvCkFtZXJpY2EvVmFuY291dmVyCkFtZXJpY2EvV2hpdGVob3JzZQpBbWVyaWNhL1dpbm5pcGVnCkFtZXJpY2EvWWVsbG93a25pZmUKQXNpYS9DaG9pYmFsc2FuCkFzaWEvQ2hvbmdxaW5nCkFzaWEvSGFyYmluCkFzaWEvSG92ZApBc2lhL0thc2hnYXIKQXNpYS9QeW9uZ3lhbmcKQXNpYS9TZW91bApBc2lhL1NoYW5naGFpCkFzaWEvVGVocmFuCkFzaWEvVG9reW8KQXNpYS9VbGFhbmJhYXRhcgpBc2lhL1VydW1xaQpFdXJvcGUvQnVkYXBlc3QKRXVyb3BlL1ZpbG5pdXMnCgkJLCR6b25lKSAhPT0gRkFMU0UpCgkJCXJldHVybiAneW1kJzsKCgkJcmV0dXJuICd1ayc7Cgl9CgoJLyoqCglHZXRab25lRGF0ZUZvcm1hdDoKCUB6b25lOiBicmFja2V0IHRpbWV6b25lIHN0cmluZwoJR2V0IGRhdGUgZm9ybWF0IHN0cmluZyB3aXRoIHN1YnN0cmluZ3MgaW4gdGltZXpvbmUtc3BlY2lmaWMgb3JkZXIuCgkwLi4zIHN1YnN0cmluZ3MgbWF5IGhhdmUgdmFyaW91cyB2YWx1ZXMsIGFuZCBiZSBpbiBhbnkgb3JkZXIsIGluIHRoZSBvcmlnaW5hbC4KCVJldHVybnM6IGRhdGUgZm9ybWF0IHN0cmluZyBkZXJpdmVkIGZyb20gc3RvcmVkIHByZWZlcmVuY2UKCSovCglmdW5jdGlvbiBHZXRab25lRGF0ZUZvcm1hdCgkem9uZSkKCXsKCQkkcmV0ID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2RhdGVfZm9ybWF0Jyk7CgkJJG9mZnMgPSBhcnJheSgpOwoJCSRkYXkgPSBwcmVnX21hdGNoX2FsbCgnL14oW2RqbF1TPyl8W15cXFxcXShbZGpsXVM/KS8nLCRyZXQsJG1tLFBSRUdfT0ZGU0VUX0NBUFRVUkUpOwoJCWlmKCRkYXkgPiAwKQoJCXsKCQkJaWYoJGRheSA+IDEpLy9zb21lIGVycm9yIGluIHRoZSBmb3JtYXQKCQkJCXJldHVybiAkcmV0OwoJCQkkYSA9IChpc3NldCgkbW1bMV1bMF1bMV0pICYmICRtbVsxXVswXVsxXSAhPSAtMSkgPyAxOjI7CgkJCSRzMSA9ICRtbVskYV1bMF1bMF07IC8vbWF0Y2hlZCBzdHJpbmcKCQkJJG9mZnNbMV0gPSAkbW1bJGFdWzBdWzFdOyAvL2l0cyBvZmZzZXQgaW50byAkcHJlZgoJCX0KCQkkbXRoID0gcHJlZ19tYXRjaF9hbGwoJy9eKFtGTW1uXSl8W15cXFxcXShbRk1tbl0pLycsJHJldCwkbW0sUFJFR19PRkZTRVRfQ0FQVFVSRSk7CgkJaWYoJG10aCA+IDApCgkJewoJCQlpZigkbXRoID4gMSkKCQkJCXJldHVybiAkcmV0OwoJCQkkYSA9IChpc3NldCgkbW1bMV1bMF1bMV0pICYmICRtbVsxXVswXVsxXSAhPSAtMSkgPyAxOjI7CgkJCSRzMiA9ICRtbVskYV1bMF1bMF07CgkJCSRvZmZzWzJdID0gJG1tWyRhXVswXVsxXTsKCQl9CgkJJHlyID0gcHJlZ19tYXRjaF9hbGwoJy9eKFtZb3ldKXxbXlxcXFxdKFtZb3ldKS8nLCRyZXQsJG1tLFBSRUdfT0ZGU0VUX0NBUFRVUkUpOwoJCWlmKCR5ciA+IDApCgkJewoJCQlpZigkeXIgPiAxKQoJCQkJcmV0dXJuICRyZXQ7CgkJCSRhID0gKGlzc2V0KCRtbVsxXVswXVsxXSkgJiYgJG1tWzFdWzBdWzFdICE9IC0xKSA/IDE6MjsKCQkJJHMzID0gJG1tWyRhXVswXVswXTsKCQkJJG9mZnNbM10gPSAkbW1bJGFdWzBdWzFdOwoJCX0KCQl1bnNldCgkbW0pOwoJCWFzb3J0KCRvZmZzKTsgLy9yZXBsYWNlbWVudHMgaW4gb3JkZXIgb2YgaW5jcmVhc2luZyBvZmZzZXQKCQlyZXNldCgkb2Zmcyk7CgoJCWlmKCR6b25lKQoJCXsKCQkJc3dpdGNoKCR0aGlzLT5HZXRab25lRGF0ZVR5cGUoJHpvbmUpKQoJCQl7CgkJCSBjYXNlICd1cyc6CgkJCQkkcmVwbCA9IGFycmF5KCcyJywnMScsJzMnKTsgLy9pbmRpY2VzIGZvciBNRFkKCQkJCWJyZWFrOwoJCQkgY2FzZSAneW1kJzoKCQkJCSRyZXBsID0gYXJyYXkoJzMnLCcyJywnMScpOyAvL2luZGljZXMgZm9yIFlNRAoJCQkJYnJlYWs7CgkJCSBkZWZhdWx0OgoJCQkJJHJlcGwgPSBhcnJheSgnMScsJzInLCczJyk7IC8vaW5kaWNlcyBmb3IgRE1ZCgkJCQlicmVhazsKCQkJfQoJCX0KCQllbHNlCgkJCSRyZXBsID0gYXJyYXkoJzEnLCcyJywnMycpOwoJCQoJCWZvcmVhY2goJHJlcGwgYXMgJGluZHgpCgkJewoJCQlpZihpc3NldCgkeyJzJGluZHgifSkpCgkJCXsKCQkJCSRrID0ga2V5KCRvZmZzKTsKCQkJCSRyZXQgPSBzdWJzdHJfcmVwbGFjZSgkcmV0LCR7InMkaW5keCJ9LGN1cnJlbnQoJG9mZnMpLHN0cmxlbigkeyJzJGsifSkpOwoJCQkJbmV4dCgkb2Zmcyk7CgkJCX0KCQl9CgkJcmV0dXJuICRyZXQ7Cgl9CgoJLyoqCglSZXN1bHRUZW1wbGF0ZXM6CglAYnJhY2tldF9pZDogZW51bWVyYXRvciBvZiBicmFja2V0IGJlaW5nIHByb2Nlc3NlZAoJQGNoYXJ0bW9kZTogd2hldGhlciB0ZW1wbGF0ZXMgYXJlIHRvIGJlIHVzZWQgZm9yIGJyYWNrZXRjaGFydCBjb250ZW50LCBkZWZhdWx0IFRSVUUKCUdldCBpbnRlcm5hdGlvbmFsaXNlZCB0ZW1wbGF0ZXMgZm9yIGV4cHJlc3NpbmcgbWF0Y2ggc3RhdHVzIChtYWlubHksIHJlc3VsdCkgZm9yIEBicmFja2V0X2lkLgoJJyVzJyBpbiBhIHRlbXBsYXRlIHRvIGJlIHJlcGxhY2VkIHVwc3RyZWFtIGJ5IGFwcHJvcHJpYXRlIHRlYW1uYW1lKHMpLgoJT3RoZXIgdGV4dCBpcyBsb3dlcmNhc2UsIGJyYWNrZXQtc3BlY2lmaWMgaWYgYXZhaWxhYmxlIG9yIGVsc2UgZ2VuZXJpYy4KCVJldHVybnM6IGFzc29jaWF0aXZlIGFycmF5IG9mIHRlbXBsYXRlcywga2V5cyBiZWluZyAnd29uJywnZGVmJywKCSAnZm9yZicsJ25vbWF0Y2gnLChpZiByZWxldmFudCB0byB0aGUgYnJhY2tldCkndGllZCcsIGFuZCAndnMnCgkqLwoJZnVuY3Rpb24gUmVzdWx0VGVtcGxhdGVzKCRicmFja2V0X2lkLCRjaGFydG1vZGU9VFJVRSkKCXsKCQlpZiAoJGJyYWNrZXRfaWQgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKCQkkc3FsID0gJ1NFTEVDVCBjYW50aWUsdmVyc3VzLGRlZmVhdGVkLHRpZWQsZm9yZmVpdCxub21hdGNoIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV90bXRfYnJhY2tldHMgV0hFUkUgYnJhY2tldF9pZD0/JzsKCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOwoJCSRyb3cgPSAkZGItPkdldFJvdygkc3FsLCBhcnJheSgkYnJhY2tldF9pZCkpOwoJCSRyZXN1bHRzID0gYXJyYXkoKTsKCQkkcmVsID0gJHRoaXMtPkxhbmcoJ3dvbl9mbXQnKTsvL25vdCBpbiBicmFja2V0IGRhdGEKCQkkcmVzdWx0c1snd29uJ10gPSBzdHJ0b2xvd2VyKCRyZWwpOwoJCSRyZWwgPSAkdGhpcy0+TGFuZygnb3JfZm10Jyk7Ly9ub3QgaW4gYnJhY2tldCBkYXRhCgkJJHJlc3VsdHNbJ29yJ10gPSBzdHJ0b2xvd2VyKCRyZWwpOwoKCQkkcmVsID0gJHJvd1sndmVyc3VzJ107IC8vcHJlZmVyIGJyYWNrZXQtc3BlY2lmaWMgbGFuZ3VhZ2UKCQlpZiAoISRyZWwpCgkJCSRyZWwgPSAkdGhpcy0+TGFuZygndnMnKTsgLy9vciBlbHNlIGdlbmVyaWMKCQkkcmVsID0gc3RyX3JlcGxhY2UoJyVyJyxzdHJ0b2xvd2VyKCRyZWwpLCR0aGlzLT5MYW5nKCd2ZXJzdXNfZm10JykpOwoJCSRyZXN1bHRzWyd2cyddID0gJHJlbDsKCgkJJHJlbCA9ICRyb3dbJ2RlZmVhdGVkJ107CgkJaWYgKCEkcmVsKQoJCQkkcmVsID0gJHRoaXMtPkxhbmcoJ2RlZmVhdGVkJyk7CgkJJHJlbCA9IHN0cl9yZXBsYWNlKCclcicsc3RydG9sb3dlcigkcmVsKSwkdGhpcy0+TGFuZygnZGVmZWF0ZWRfZm10JykpOwoJCSAkcmVzdWx0c1snZGVmJ10gPSAkcmVsOwoKCQkkcmVsID0gJHJvd1snZm9yZmVpdCddOwoJCWlmICghJHJlbCkKCQkJJHJlbCA9ICR0aGlzLT5MYW5nKCdmb3JmZWl0ZWQnKTsKCQkkcmVsID0gc3RyX3JlcGxhY2UoJyVyJyxzdHJ0b2xvd2VyKCRyZWwpLCR0aGlzLT5MYW5nKCdmb3JmZWl0ZWRfZm10JykpOwoJCSRyZXN1bHRzWydmb3JmJ10gPSAkcmVsOwoKCQkkcmVsID0gJHJvd1snbm9tYXRjaCddOwoJCWlmICghJHJlbCkKCQkJJHJlbCA9ICR0aGlzLT5MYW5nKCdhYmFuZG9uZWQnKTsKCQkkcmVsID0gc3RyX3JlcGxhY2UoJyVyJyxzdHJ0b2xvd2VyKCRyZWwpLCR0aGlzLT5MYW5nKCdhYmFuZG9uZWRfZm10JykpOwoJCSRyZXN1bHRzWydub21hdGNoJ10gPSAkcmVsOwoKCQlpZiAoJHJvd1snY2FudGllJ10pCgkJewoJCQkkcmVsID0gJHJvd1sndGllZCddOwoJCQlpZiAoISRyZWwpCgkJCQkkcmVsID0gJHRoaXMtPkxhbmcoJ3RpZWQnKTsKCQkJJHJlbCA9IHN0cl9yZXBsYWNlKCclcicsc3RydG9sb3dlcigkcmVsKSwkdGhpcy0+TGFuZygndGllZF9mbXQnKSk7CgkJCSRyZXN1bHRzWyd0aWVkJ10gPSAkcmVsOwoJCX0KCgkJaWYgKCRjaGFydG1vZGUpCgkJewoJCQkvL3dyYXBwaW5nIGZvciBjaGFydCBpbi1ib3ggcHJlc2VudGF0aW9uCgkJCWZvcmVhY2goJHJlc3VsdHMgYXMgJiRyZWwpCgkJCQkkcmVsID0gc3RyX3JlcGxhY2UoYXJyYXkoJyAnLCcsJyksYXJyYXkoIlxuIiwiXG4iKSwkcmVsKTsKCQkJdW5zZXQoJHJlbCk7CgkJfQoJCXJldHVybiAkcmVzdWx0czsKCX0KCi8qCWZ1bmN0aW9uIENoYXJ0Q3NzRmlsZSgkYnJhY2tldF9pZCwgJGV4aXN0cz1UUlVFKQoJewoJCWlmICgkYnJhY2tldF9pZCA9PSBGQUxTRSkgcmV0dXJuIEZBTFNFOwoJCSRzcWwgPSAnU0VMRUNUIGNoYXJ0Y3NzIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV90bXRfYnJhY2tldHMgV0hFUkUgYnJhY2tldF9pZD0/JzsKCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOwoJCSRjc3NmaWxlID0gJGRiLT5HZXRPbmUoJHNxbCwgYXJyYXkoJGJyYWNrZXRfaWQpKTsKCQlpZiAoJGNzc2ZpbGUpCgkJewoJCQkkY29uZmlnID0gY21zbXMoKS0+R2V0Q29uZmlnKCk7CgkJCSRjc3NwYXRoID0gY21zX2pvaW5fcGF0aCgkY29uZmlnWyd1cGxvYWRzX3BhdGgnXSwKCQkJCSR0aGlzLT5HZXRQcmVmZXJlbmNlKCd1cGxvYWRzX2RpcicpLCRjc3NmaWxlKTsKCQkJaWYgKCEkZXhpc3RzIHx8IGZpbGVfZXhpc3RzKCRjc3NwYXRoKSkKCQkJCXJldHVybiAkY3NzcGF0aDsKCQl9CgkJcmV0dXJuIEZBTFNFOwoJfQoqLwoJZnVuY3Rpb24gQ2hhcnRJbWFnZUZpbGUoJGJyYWNrZXRfaWQsICRleGlzdHM9VFJVRSkKCXsKCQkkY29uZmlnID0gY21zbXMoKS0+R2V0Q29uZmlnKCk7CgkJJGNoYXJ0ZmlsZSA9IGNtc19qb2luX3BhdGgoJGNvbmZpZ1sncm9vdF9wYXRoJ10sJ3RtcCcsJ2JyYWNrZXQtJy4kYnJhY2tldF9pZC4nLWNoYXJ0LnBkZicpOwoJCWlmICghJGV4aXN0cyB8fCBmaWxlX2V4aXN0cygkY2hhcnRmaWxlKSkKCQkJcmV0dXJuICRjaGFydGZpbGU7CgkJcmV0dXJuIEZBTFNFOwoJfQoKCWZ1bmN0aW9uIENyZWF0ZUltYWdlT2JqZWN0KCRpbWd1cmwsICRoZWlnaHQ9NDAwKQoJewoJCSRmYWlsdGV4dCA9ICR0aGlzLT5MYW5nKCdjaGFydF9ub3Nob3cnKTsKCQkkdHhsdCA9IHN0cnBvcygkZmFpbHRleHQsJz4+Jyk7CgkJaWYgKCR0eGx0ICE9PSBGQUxTRSkKCQl7CgkJCSR0eHJ0ID0gc3RycnBvcygkZmFpbHRleHQsJzw8Jyk7CgkJCWlmICgkdHhydCA+ICR0eGx0KQoJCQl7CgkJCQkkZmFpbHRleHQgPSBzdWJzdHIoJGZhaWx0ZXh0LDAsJHR4cnQpLic8L2E+Jy5zdWJzdHIoJGZhaWx0ZXh0LCR0eHJ0KzIpOwoJCQkJJGZhaWx0ZXh0ID0gc3Vic3RyKCRmYWlsdGV4dCwwLCR0eGx0KS4nPGEgaHJlZj0iJy4kaW1ndXJsLiciPicuc3Vic3RyKCRmYWlsdGV4dCwkdHhsdCsyKTsKCQkJfQoJCX0KCQkvL2FyYml0cmFyeSBsaW1pdCBvbiB2aXNpYmxlIGhlaWdodAoJCWlmICgkaGVpZ2h0ID4gODAwKQoJCQkkaGVpZ2h0ID0gODAwOwoJCSRyZXQgPSAnPG9iamVjdCB0eXBlPSJhcHBsaWNhdGlvbi9wZGYiIGRhdGE9IicuJGltZ3VybC4nIiBoZWlnaHQ9IicuJGhlaWdodC4nIiB3aWR0aD0iMTAwJSI+Jy4iXG4iLiRmYWlsdGV4dC4iXG4iLic8L29iamVjdD4nLiJcbiI7CgkJcmV0dXJuICRyZXQ7Cgl9CgoJLyoqCglDcmVhdGVJbnB1dExpbmtzOgoJQGlkOiBzeXN0ZW0taWQgdG8gYmUgcGFzc2VkIHRvIHRoZSBtb2R1bGUKCUBuYW1lOiBuYW1lIG9mIGFjdGlvbiB0byBiZSBwZXJmb3JtZWQgd2hlbiAoZWl0aGVyIG9mKSB0aGUgb2JqZWN0KHMpIGlzIGNsaWNrZWQKCUBpY29uZmlsZTogb3B0aW9uYWwgbmFtZSBvZiB0aGVtZSBpY29uLCBvciBtb2R1bGUtcmVsYXRpdmUgb3IgYWJzb2x1dGUgVVJMCgkgIG9mIHNvbWUgb3RoZXIgaWNvbiBmb3IgaW1hZ2UgaW5wdXQsIGRlZmF1bHQgRkFMU0UgaS5lLiBubyBpbWFnZQoJQGxpbms6IG9wdGlvbmFsIHdoZXRoZXIgdG8gKGFsc28pIGNyZWF0ZSBhIHN1Ym1pdCBpbnB1dCwgZGVmYXVsdCBGQUxTRQoJQHRleHQ6IG9wdGlvbmFsIHRpdGxlIGFuZCB0aXAgZm9yIGFuIGltYWdlLCBvciBtYW5kYXRvcnkgZGlzcGxheWVkIHRleHQgZm9yIGEgbGluaywgZGVmYXVsdCAnJwoJQGV4dHJhOiBvcHRpb25hbCBhZGRpdGlvbmFsIHRleHQgdGhhdCBzaG91bGQgYmUgYWRkZWQgaW50byB0aGUgb2JqZWN0LCBkZWZhdWx0ICcnCglHZW5lcmF0ZSB4aHRtbCBmb3IgaW1hZ2UgYW5kL29yIHN1Ym1pdCBpbnB1dChzKSB3aGljaCBjYW4gYmUgc3R5bGVkIGxpa2UgYW4gaWNvbgoJYW5kL29yIGxpbmssIHVzaW5nIGNsYXNzICJmYWtlaWNvbiIgZm9yIGFuIGltYWdlLCAiZmFrZWxpbmsiIGZvciBhIHN0YW5kYXJkIGxpbmsKCglTdWNoIG9iamVjdChzKSBpcyhhcmUpIG5lZWRlZCB3aGVyZSB0aGUgaGFuZGxlci9hY3Rpb24gcmVxdWlyZXMgYWxsIGZvcm0gZGF0YSwKCWluc3RlYWQgb2YganVzdCB0aGUgZGF0YSBmb3IgdGhlIG9qZWN0IGl0c2VsZiAod2hpY2ggaGFwcGVucyBmb3IgYSBub3JtYWwgbGluaykKCSovCglmdW5jdGlvbiBDcmVhdGVJbnB1dExpbmtzKCRpZCwgJG5hbWUsICRpY29uZmlsZT1GQUxTRSwgJGxpbms9RkFMU0UsICR0ZXh0PScnLCAkZXh0cmE9JycpCgl7CgkJaWYgKCRpY29uZmlsZSkKCQl7CgkJCSRwID0gc3RycG9zKCRpY29uZmlsZSwnLycpOyAKCQkJaWYgKCRwID09PSBGQUxTRSkKCQkJewoJCQkJJHRoZW1lID0gY21zbXMoKS0+Z2V0X3ZhcmlhYmxlKCdhZG1pbnRoZW1lJyk7CgkJCQkkaW1nc3RyID0gJHRoZW1lLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS8nLiRpY29uZmlsZSwkdGV4dCwnJywnJywnZmFrZWljb24gc3lzdGVtaWNvbicpOwoJCQkJLy90cmltIHN0cmluZyBsaWtlIDxpbWcgc3JjPSIuLi4iIGNsYXNzPSJmYWtlaWNvbiBzeXN0ZW1pY29uIiBhbHQ9IiR0ZXh0IiB0aXRsZT0iJHRleHQiIC8+CgkJCQkkaW1nc3RyID0gc3RyX3JlcGxhY2UoYXJyYXkoJzxpbWcnLCcvPicpLGFycmF5KCcnLCcnKSwkaW1nc3RyKTsKCQkJfQoJCQllbHNlaWYgKCRwID09IDApCgkJCQkkaW1nc3RyID0gJHRoaXMtPkdldE1vZHVsZVVSTFBhdGgoKS4kaWNvbmZpbGU7CgkJCWVsc2VpZiAoc3RycG9zKCRpY29uZmlsZSwnOi8vJywkcC0xKSA9PT0gJHAtMSkKCQkJCSRpbWdzdHIgPSAkaWNvbmZpbGU7CgkJCWVsc2UKCQkJCSRpbWdzdHIgPSAkdGhpcy0+R2V0TW9kdWxlVVJMUGF0aCgpLicvJy4kaWNvbmZpbGU7CgkJCSRyZXQgPSAnPGlucHV0IHR5cGU9ImltYWdlIiAnLiRpbWdzdHIuJyBuYW1lPSInLiRpZC4kbmFtZS4nIic7IC8vY29uc2VydmF0aXZlIGFzc3VtcHRpb24gYWJvdXQgc3BhY2VzCgkJCWlmICgkZXh0cmEpCgkJCQkkcmV0IC49ICcgJy4kZXh0cmE7CgkJCSRyZXQgLj0gJyAvPic7CgkJfQoJCWVsc2UKCQkJJHJldCA9ICcnOwoJCWlmICgkbGluayAmJiAkdGV4dCkKCQl7CgkJCSRyZXQgLj0nPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IicuJHRleHQuJyIgbmFtZT0iJy4kaWQuJG5hbWUuJyIgY2xhc3M9ImZha2VsaW5rIic7CgkJCWlmICgkZXh0cmEpCgkJCQkkcmV0IC49ICcgJy4kZXh0cmE7CgkJCSRyZXQgLj0gJyAvPic7CgkJfQoJCXJldHVybiAkcmV0OwoJfQoJLyoqCglDcmVhdGVJbnB1dFN1Ym1pdERlZmF1bHQ6CglHZW5lcmF0ZSB4aHRtbCBsaWtlIENyZWF0ZUlucHV0U3VibWl0LCBidXQgd2l0aCBleHRyYSBjbGFzcyAiZGVmYXVsdCIKCSovCglmdW5jdGlvbiBDcmVhdGVJbnB1dFN1Ym1pdERlZmF1bHQoJGlkLCAkbmFtZSwgJHZhbHVlID0gJycsICRhZGR0dGV4dCA9ICcnLCAkaW1hZ2UgPSAnJywgJGNvbmZpcm10ZXh0ID0gJycpCgl7CgkJJHMgPSAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCRuYW1lLCR2YWx1ZSwkYWRkdHRleHQsJGltYWdlLCRjb25maXJtdGV4dCk7CgkJcmV0dXJuIHN0cl9yZXBsYWNlKCdjbGFzcz0iJywnY2xhc3M9ImRlZmF1bHQgJywkcyk7Cgl9CgoJLy9mb3IgYWRtaW4tZGlzcGxheSBvbmx5CglmdW5jdGlvbiBQcmV0dHlNZXNzYWdlKCR0ZXh0LCAkc3VjY2Vzcz1UUlVFLCAkZmFpbGxpbms9RkFMU0UsICRrZXkgPSBUUlVFKQoJewoJCSRiYXNlID0gKCRrZXkpID8gJHRoaXMtPkxhbmcoJHRleHQpIDogJHRleHQ7CgkJaWYgKCRzdWNjZXNzKQoJCQlyZXR1cm4gJHRoaXMtPlNob3dNZXNzYWdlKCRiYXNlKTsKCQllbHNlCgkJewoJCQkkbXNnID0gJHRoaXMtPlNob3dFcnJvcnMoJGJhc2UpOwoJCQlpZiAoJGZhaWxsaW5rID09IEZBTFNFKQoJCQl7CgkJCQkvL3N0cmlwIHRoZSBsaW5rCgkJCQkkcG9zID0gc3RycG9zKCRtc2csJzxhIGhyZWY9Jyk7CgkJCQkkcGFydDEgPSAoJHBvcyAhPT0gRkFMU0UpID8gc3Vic3RyKCRtc2csMCwkcG9zKSA6ICcnOwoJCQkJJHBvcyA9IHN0cnBvcygkbXNnLCc8L2E+JywkcG9zKTsKCQkJCSRwYXJ0MiA9ICgkcG9zICE9PSBGQUxTRSkgPyBzdWJzdHIoJG1zZywkcG9zKzQpIDogJG1zZzsKCQkJCSRtc2cgPSAkcGFydDEuJHBhcnQyOwoJCQl9CgkJCXJldHVybiAkbXNnOwoJCX0KCX0KCglmdW5jdGlvbiBQcm9jZXNzRGF0YVRlbXBsYXRlKCRkYXRhLCAkZGlzcGxheT1GQUxTRSkKCXsKCQkkcmVzdWx0ID0gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZWZyb21EYXRhKCRkYXRhKTsKCQlpZighJGRpc3BsYXkpCgkJCXJldHVybiAkcmVzdWx0OwoJCWVjaG8gKCRyZXN1bHQgIT09IEZBTFNFKSA/ICRyZXN1bHQ6JHRoaXMtPkxhbmcoJ2Vycl90ZW1wbGF0ZScpOwoJfQoKCWZ1bmN0aW9uIENoZWNrQWNjZXNzKCRvcGVyYXRpb249RkFMU0UpCgl7CgkJJGFsbG93ID0gRkFMU0U7CgkJc3dpdGNoKCRvcGVyYXRpb24pCgkJewoJCWNhc2UgRkFMU0U6ICAvLyBhbnkgbW9kdWxlLXJlbGF0ZWQgcGVybWlzc2lvbgoJCQkkYWxsb3cgPSAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCR0aGlzLT5QZXJtU2VlTmFtZSk7CgkJCWlmICghJGFsbG93KSAkYWxsb3cgPSAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCR0aGlzLT5QZXJtU2NvcmVOYW1lKTsKCQkJaWYgKCEkYWxsb3cpICRhbGxvdyA9ICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJHRoaXMtPlBlcm1Nb2ROYW1lKTsKCQkJaWYgKCEkYWxsb3cpICRhbGxvdyA9ICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJHRoaXMtPlBlcm1BZG1pbk5hbWUpOwoJCQlicmVhazsKCQljYXNlICdhZG1vZCc6CgkJCSRhbGxvdyA9ICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJHRoaXMtPlBlcm1Nb2ROYW1lKTsKCQkJaWYgKCEkYWxsb3cpICRhbGxvdyA9ICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJHRoaXMtPlBlcm1BZG1pbk5hbWUpOwoJCQlicmVhazsKCQljYXNlICdhZHZpZXcnOgoJCQkkYWxsb3cgPSAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCR0aGlzLT5QZXJtU2VlTmFtZSk7CgkJCWlmICghJGFsbG93KSAkYWxsb3cgPSAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCR0aGlzLT5QZXJtQWRtaW5OYW1lKTsKCQkJYnJlYWs7CgkJY2FzZSAnYWRtaW4nOgoJCQkkYWxsb3cgPSAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCR0aGlzLT5QZXJtQWRtaW5OYW1lKTsKCQkJYnJlYWs7CgkJY2FzZSAnbW9kaWZ5JzoKCQkJJGFsbG93ID0gJHRoaXMtPkNoZWNrUGVybWlzc2lvbigkdGhpcy0+UGVybU1vZE5hbWUpOwoJCQlicmVhazsKCQljYXNlICdzY29yZSc6CgkJCSRhbGxvdyA9ICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJHRoaXMtPlBlcm1TY29yZU5hbWUpOwoJCQlicmVhazsKCQljYXNlICd2aWV3JzoKCQkJJGFsbG93ID0gJHRoaXMtPkNoZWNrUGVybWlzc2lvbigkdGhpcy0+UGVybVNlZU5hbWUpOwoJCQlicmVhazsKCQl9CgkJcmV0dXJuICRhbGxvdzsKCX0KCi8qCS8vZm9yIG1vZHVsZS1zcGVjaWZpYyBldmVudHMKCWZ1bmN0aW9uIEdldEV2ZW50RGVzY3JpcHRpb24oJGV2ZW50bmFtZSkKCXsKCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ2V2ZW50X2luZm9fJy4kZXZlbnRuYW1lKTsKCX0KCglmdW5jdGlvbiBHZXRFdmVudEhlbHAoJGV2ZW50bmFtZSkKCXsKCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ2V2ZW50X2hlbHBfJy4kZXZlbnRuYW1lKTsKCX0KKi8KCWZ1bmN0aW9uIEhhbmRsZXNFdmVudHMoKQoJewoJCXJldHVybiBUUlVFOwoJfQoKCWZ1bmN0aW9uIERvRXZlbnQoJG9yaWdpbmF0b3IsJGV2ZW50bmFtZSwmJHBhcmFtcykKCXsKCQlpZiAoJG9yaWdpbmF0b3IgPT0gJ0NvcmUnKQoJICAgIHsKCQkJc3dpdGNoICgkZXZlbnRuYW1lKQoJCQl7CgkJCWNhc2UgJ0xvZ2luUG9zdCc6CgkJCQkvL2NsZWFyIGNoYXJ0IGZpbGVzIG9sZGVyIHRoYW4gMjQgaHJzCgkJCQkkc3RhbXAgPSB0aW1lKCktODY0MDA7IC8vMjQqNjAqNjAKCQkJCSRsaW1pdCA9IGdtZGF0ZSgiWS1tLWQgSDppOnMiLCRzdGFtcCk7CgkJCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOwoJCQkJaWYoZW1wdHkoJGNvbmZpZykpCgkJCQkJJGNvbmZpZyA9IGNtc21zKCktPkdldENvbmZpZygpOwoJCQkJJGNoYXJ0cyA9IGNtc19qb2luX3BhdGgoJGNvbmZpZ1sncm9vdF9wYXRoJ10sJ3RtcCcsJ2JyYWNrZXQtKi1jaGFydC5wZGYnKTsKCQkJCWZvcmVhY2ggKGdsb2IoJGNoYXJ0cykgYXMgJGZuKQoJCQkJewoJCQkJCWlmIChmaWxlbXRpbWUoJGZuKSA8ICRzdGFtcCkKCQkJCQkJdW5saW5rKCRmbik7CgkJCQl9CgkJCQlicmVhazsKCQkJfQoJCX0KCX0KCglmdW5jdGlvbiBEb0FjdGlvbigkbmFtZSwgJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQ9JycpCgl7CgkJLy9kaXZlcnNpb25zCgkJc3dpdGNoICgkbmFtZSkKCQl7CgkJIGNhc2UgJ2FkZGVkaXRfY29tcCc6CgkJCWlmICghZW1wdHkoJHBhcmFtc1sncmVhbF9hY3Rpb24nXSkpCgkJCXsKCQkJCS8vJ3JlYWxfYWN0aW9uJyB3aWxsIGJlIGNvcnJlY3RseSBzZXQgb25seSBpZiBqcyBpcyBlbmFibGVkCgkJCQkkdGFzayA9IHN1YnN0cigkcGFyYW1zWydyZWFsX2FjdGlvbiddLCBzdHJsZW4oJGlkKSk7CgkJCQlzd2l0Y2ggKCR0YXNrKQoJCQkJewoJCQkJIGNhc2UgJ2FwcGx5JzoKCQkJCSBjYXNlICdjYW5jZWwnOgoJCQkJIGNhc2UgJ3N1Ym1pdCc6CgkJCQkJJG5hbWUgPSAnc2F2ZV9jb21wJzsKCQkJCQlicmVhazsKCQkJCSBjYXNlICdhZGR0ZWFtJzoKCQkJCQkkbmFtZSA9ICdhZGRlZGl0X3RlYW0nOwoJCQkJCWJyZWFrOwoJCQkJIGNhc2UgJ2RlbHRlYW1zJzoKCQkJCQkkbmFtZSA9ICdkZWxldGVfdGVhbSc7CgkJCQkJYnJlYWs7CgkJCQkgY2FzZSAnbm90aWZ5JzoKCQkJCSBjYXNlICdhYmFuZG9uJzoKCQkJCSBjYXNlICdnZXRzY29yZSc6CgkJCQkgY2FzZSAnZXhwb3J0JzoKCQkJCQkkbmFtZSA9ICdtdWx0aV90YXNrJzsKCQkJCQlicmVhazsKCQkJCSBjYXNlICdjaGFydCc6CgkJCQkgY2FzZSAnbGlzdCc6CgkJCQkgY2FzZSAncHJpbnQnOgoJCQkJCSRuYW1lID0gJ3Nob3dfY29tcCc7CgkJCQkJYnJlYWs7CgkJCQkgY2FzZSAncmVzZXQnOgoJCQkJCSRuYW1lID0gJ3NjaGVkdWxlJzsKCQkJCQlicmVhazsKCQkJCSBjYXNlICdjb25uZWN0JzoKCQkJCQkkcGFyYW1zWydyZWFsX2FjdGlvbiddID0gJHRhc2s7CgkJCQkJYnJlYWs7CgkJCQkgY2FzZSAnaW1wb3J0X3RlYW0nOgoJCQkJIGNhc2UgJ3NjaGVkdWxlJzoKCQkJCSBjYXNlICd1cGxvYWRfY3NzJzoKCQkJCSBjYXNlICdjaGFuZ2Vsb2cnOgoJCQkJCSRuYW1lID0gJHRhc2s7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQlpZihzdWJzdHIoJHRhc2ssMCw0KSA9PSAnZWRpdCcpCgkJCQkJJG5hbWUgPSAnYWRkZWRpdF90ZWFtJzsKCQkJCWVsc2VpZihzdWJzdHIoJHRhc2ssMCw2KSA9PSAndXBkYXRlJykKCQkJCQkkbmFtZSA9ICdzYXZlX2NvbXAnOwoJCQkJZWxzZWlmKHN1YnN0cigkdGFzaywwLDExKSA9PSAnZGVsZXRlX3RlYW0nKQoJCQkJCSRuYW1lID0gJ2RlbGV0ZV90ZWFtJzsKCQkJCWVsc2VpZihzdWJzdHIoJHRhc2ssMCw4KSA9PSAnbW92ZWRvd24nKQoJCQkJCSRwYXJhbXNbJ3JlYWxfYWN0aW9uJ10gPSAkdGFzazsKCQkJCWVsc2VpZihzdWJzdHIoJHRhc2ssMCw2KSA9PSAnbW92ZXVwJykKCQkJCQkkcGFyYW1zWydyZWFsX2FjdGlvbiddID0gJHRhc2s7CgkJCX0KCQkJYnJlYWs7CgkJIGNhc2UgJ3Byb2Nlc3NfaXRlbXMnOgoJCQlpZiAoIWVtcHR5KCRwYXJhbXNbJ2ltcG9ydCddKSkKCQkJCSRuYW1lID0gJ2ltcG9ydF9jb21wJzsKCQkJYnJlYWs7CgkJIGNhc2UgJ2RlZmF1bHQnOgoJCSAJaWYgKCFlbXB0eSgkcGFyYW1zWydyZXN1bHQnXSkpCgkJCQkkbmFtZSA9ICdyZXN1bHQnOwoJCQlicmVhazsKCQkgY2FzZSAncmVzdWx0JzoKCQkJaWYgKGVtcHR5KCRwYXJhbXNbJ3NlbmQnXSkpCgkJCQkkbmFtZSA9ICdkZWZhdWx0JzsKCQkJYnJlYWs7CgkJIGNhc2UgJ2FkZGdyb3VwJzoKCQkJJG5hbWUgPSAnZGVmYXVsdGFkbWluJzsKCQkJJHBhcmFtcyA9IGFycmF5KCdzaG93dGFiJyA9PiAxLCdhZGRncm91cCcgPT4gVFJVRSk7CgkJCWJyZWFrOwoJCX0KCQlwYXJlbnQ6OkRvQWN0aW9uKCRuYW1lLCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCk7Cgl9Cn0KCj8+Cg==]]></data>
	</file>
</module>
