  <dtdversion>1.2</dtdversion>
  <name>ModuleRepository</name>
  <version>1.0</version>
  <help>PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPk5vdGhpbmcuIEl0J3MgZGVzaWduZWQgdG8gYmUgYSBzdGFydGluZyBwb2ludCBmb3IgeW91IHRvIGRldmVsb3AgeW91ciBvd24gbW9kdWxlcy48L3A+CjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPgo8cD5XZWxsLCB5b3UgY291bGQgYWN0dWFsbHkgaW5zdGFsbCBpdCBieSBwbGFjaW5nIHRoZSBtb2R1bGUgaW4gYSBwYWdlIG9yIHRlbXBsYXRlIHVzaW5nIHRoZSBzbWFydHkgdGFnICYjMTIzO2Ntc19tb2R1bGUgbW9kdWxlPSdTa2VsZXRvbid9PC9wPgo8cD5Zb3Ugd291bGQgYmUgd2lzZXIsIGhvd2V2ZXIsIHRvIHVzZSB0aGUgbW9kdWxlIGFzIGEgc3RhcnRpbmcgcG9pbnQsIGFuZCBlZGl0aW5nIHRoZSBjb2RlIHRvIGRvIHdoYXRldmVyIGl0IGlzIHlvdSBhcmUgd2FudGluZyB0byBkby48L3A+CjxoMz5TdXBwb3J0PC9oMz4KPHA+VGhpcyBtb2R1bGUgZG9lcyBub3QgaW5jbHVkZSBjb21tZXJjaWFsIHN1cHBvcnQuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PC9wPgo8dWw+CjxsaT5Gb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlLCBGQVFzLCBvciB0byBmaWxlIGEgQnVnIFJlcG9ydCBvciBidXkgY29tbWVyY2lhbCBzdXBwb3J0LCBwbGVhc2UgdmlzaXQgU2pHJ3MKbW9kdWxlIGhvbWVwYWdlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuY21zbW9kdWxlcy5jb20iPkNNU01vZHVsZXMuY29tPC9hPi48L2xpPgo8bGk+QWRkaXRpb25hbCBkaXNjdXNzaW9uIG9mIHRoaXMgbW9kdWxlIG1heSBhbHNvIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmciPkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LjwvbGk+CjxsaT5UaGUgYXV0aG9yLCBTakcsIGNhbiBvZnRlbiBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaXJjOi8vaXJjLmZyZWVub2RlLm5ldC8jY21zIj5DTVMgSVJDIENoYW5uZWw8L2E+LjwvbGk+CjxsaT5MYXN0bHksIHlvdSBtYXkgaGF2ZSBzb21lIHN1Y2Nlc3MgZW1haWxpbmcgdGhlIGF1dGhvciBkaXJlY3RseS48L2xpPiAgCjwvdWw+CjxwPkFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dApvZiB0aGUgbGljZW5zZSBmb3IgdGhlIGZ1bGwgZGlzY2xhaW1lci48L3A+Cgo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDA1LCBTYW11ZWwgR29sZHN0ZWluIDxhIGhyZWY9Im1haWx0bzpzamdAY21zbW9kdWxlcy5jb20iPiZsdDtzamdAY21zbW9kdWxlcy5jb20mZ3Q7PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPgo8aDM+RGVwZW5kZW5jaWVzPC9oMz48dWw+PGxpPm51U09BUCA9Jmd0OyAxLjA8L2xpPjwvdWw+PGgzPlBhcmFtZXRlcnM8L2gzPjx1bD48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsYW5nPSJlbl9VUyIgLSBQYXJhbWV0ZXIgaXMgdXNlZCB0byBzcGVjaWZ5IHdoYXQgbGFuZ3VhZ2UgdG8gdXNlIGZvciBkaXNwbGF5IG9uIHRoZSBmcm9udGVuZC4gTm90IGFsbCBtb2R1bGVzIHN1cHBvcnQgb3IgbmVlZCB0aGlzLjwvbGk+PC91bD4=</help>
  <about>PGJyIC8+QXV0aG9yOiBDYWxndXkxMDAwICZsdDtjYWxndXkxMDAwQGhvdG1haWwuY29tJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuMDxiciAvPjxiciAvPkNoYW5nZSBIaXN0b3J5OjxiciAvPjx1bD48bGk+VmVyc2lvbiAxLjEuIDExIFNlcHRlbWJlciAyMDA1LiBDbGVhbmVkIHVwIHJlZmVyZW5jZXMgdGhhdCBjYXVzZWQgcHJvYmxlbXMgZm9yIFBIUCA0LjQueCBvciA1LjAuNS48L2xpPgo8bGk+VmVyc2lvbiAxLjAuIDYgQXVndXN0IDIwMDUuIEluaXRpYWwgUmVsZWFzZS48L2xpPjwvdWw+PGJyIC8+</about>
  <description>This module is a module designed to allow serving xml module files to other cms users!.</description>
  <requires>
    <requiredname>nuSOAP</requiredname>
    <requiredversion>1.0</requiredversion>
  </requires>
  <file>
    <filename>/</filename>
    <isdir>1</isdir>
  </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[PD9waHAKJGxhbmdbJ3VwZGF0ZWRjaGFjaGUnXSA9ICdUaGUgbW9kdWxlIHJlcG9zaXRvcnkgY2FjaGUgd2FzIHJlZ2VuZXJhdGVkJzsKJGxhbmdbJ3Byb21wdF9yZXNldGNhY2hlJ10gPSAnUmVzZXQgbW9kdWxlIGNhY2hlJzsKJGxhbmdbJ3Jlc2V0Y2FjaGUnXSA9ICdSZXNldCc7CiRsYW5nWydub2hlbHBpbmZvJ10gPSAnVGhlcmUgaXMgbm8gaGVscCBpbmZvcm1hdGlvbiBpbiB0aGlzIHhtbCBmaWxlJzsKJGxhbmdbJ25vYWJvdXRpbmZvJ10gPSAnVGhlcmUgaXMgbm8gYWJvdXQgaW5mb3JtYXRpb24gaW4gdGhpcyB4bWwgZmlsZSc7CiRsYW5nWydzaXplJ10gPSAnU2l6ZSAoa2IpJzsKJGxhbmdbJ2xpbmsnXSA9ICdMaW5rJzsKJGxhbmdbJ2RlZmF1bHQnXSA9ICdEZWZhdWx0JzsKJGxhbmdbJ3ByZWZlcmVuY2VzJ10gPSAnUHJlZmVyZW5jZXMnOwokbGFuZ1sndGVtcGxhdGUnXSA9ICdUZW1wbGF0ZSc7CiRsYW5nWydpdGVtc2ZvdW5kJ10gPSAnSXRlbXMgZm91bmQnOwokbGFuZ1snbmFtZSddID0gJ05hbWUnOwokbGFuZ1sndmVyc2lvbiddID0gJ1ZlcnNpb24nOwokbGFuZ1snZGVwZW5kZW5jaWVzJ10gPSAnRGVwZW5kZW5jaWVzJzsKJGxhbmdbJ2hlbHB0ZXh0J10gPSAnSGVscCc7CiRsYW5nWydhYm91dHRleHQnXSA9ICdBYm91dCc7CiRsYW5nWyd5ZXMnXSA9ICdZZXMnOwokbGFuZ1snbm8nXSA9ICdObyc7CiRsYW5nWydwcm9tcHRfaGVscGFuZGFib3V0J10gPSAnT3V0cHV0IEhlbHAgYW5kIGFib3V0IGluZm9ybWF0aW9uIHRvIGZyb250IGVuZD8nOwokbGFuZ1snaW5mb19oZWxwYW5kYWJvdXQnXSA9ICdJZiB5b3VyIHRlbXBsYXRlIGRvZXMgbm90IG5lZWQgdGhlIGVudGlyZSBoZWxwIG9yIGFib3V0IGluZm9ybWF0aW9uLCB5b3Ugc2hvdWxkIGxlYXZlIHRoaXMgdW5jaGVja2VkIHRvIGluY3JlYXNlIHBlcmZvcm1hbmNlJzsKJGxhbmdbJ3N1Ym1pdCddID0gJ1N1Ym1pdCc7CiRsYW5nWydwcm9tcHRfbW9kdWxlcGF0aCddID0gJ01vZHVsZSBQYXRoJzsKJGxhbmdbJ3Byb21wdF9jcmVhdGVwYXRoJ10gPSAnQ3JlYXRlIHRoaXMgZGlyZWN0b3J5IGlmIGl0IGRvZXMgbm90IGV4aXN0JzsKJGxhbmdbJ2luZm9fbW9kdWxlcGF0aCddID0gJ1RoZSBkaXJlY3RvcnkgKHJlbGF0aXZlIHRvIHRoZSB1cGxvYWRzIGRpcmVjdG9yeSkgd2hlcmUgdGhlIG1vZHVsZSB4bWwgZmlsZXMgdGhhdCB5b3UgYXJlIHNlcnZpbmcgY2FuIGJlIGZvdW5kJzsKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1RoZSBNb2R1bGUgUmVwb3NpdG9yeSc7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0JlIHN1cmUgdG8gc2V0ICJNYW5hZ2UgTW9kdWxlUmVwb3NpdG9yeSIgcGVybWlzc2lvbnMgdG8gdXNlIHRoaXMgbW9kdWxlISc7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnVGhhbmsgeW91IGZvciB2aXNpdGluZyEnOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bGUgVW5pbnN0YWxsZWQuJzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ01vZHVsZSB2ZXJzaW9uICVzIGluc3RhbGxlZC4nOwokbGFuZ1sncHJlZnN1cGRhdGVkJ10gPSAnTW9kdWxlIHByZWZlcmVuY2VzIHVwZGF0ZWQuJzsKJGxhbmdbJ2FjY2Vzc2RlbmllZCddID0gJ0FjY2VzcyBEZW5pZWQuIFBsZWFzZSBjaGVjayB5b3VyIHBlcm1pc3Npb25zLic7CiRsYW5nWydlcnJvciddID0gJ0Vycm9yISc7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsZSB1cGdyYWRlZCB0byB2ZXJzaW9uICVzLic7CiRsYW5nWyd0aXRsZV9tb2RfcHJlZnMnXSA9ICdNb2R1bGUgUHJlZmVyZW5jZXMnOwokbGFuZ1sndGl0bGVfbW9kX2FkbWluJ10gPSAnTW9kdWxlIEFkbWluIFBhbmVsJzsKJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnVGhpcyBtb2R1bGUgaXMgYSBtb2R1bGUgZGVzaWduZWQgdG8gYWxsb3cgc2VydmluZyB4bWwgbW9kdWxlIGZpbGVzIHRvIG90aGVyIGNtcyB1c2VycyEuJzsKJGxhbmdbJ2NoYW5nZWxvZyddID0gJzx1bD48bGk+VmVyc2lvbiAxLjEuIDExIFNlcHRlbWJlciAyMDA1LiBDbGVhbmVkIHVwIHJlZmVyZW5jZXMgdGhhdCBjYXVzZWQgcHJvYmxlbXMgZm9yIFBIUCA0LjQueCBvciA1LjAuNS48L2xpPgo8bGk+VmVyc2lvbiAxLjAuIDYgQXVndXN0IDIwMDUuIEluaXRpYWwgUmVsZWFzZS48L2xpPjwvdWw+JzsKJGxhbmdbJ2hlbHAnXSA9ICc8aDM+V2hhdCBEb2VzIFRoaXMgRG8/PC9oMz4KPHA+Tm90aGluZy4gSXRcJ3MgZGVzaWduZWQgdG8gYmUgYSBzdGFydGluZyBwb2ludCBmb3IgeW91IHRvIGRldmVsb3AgeW91ciBvd24gbW9kdWxlcy48L3A+CjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPgo8cD5XZWxsLCB5b3UgY291bGQgYWN0dWFsbHkgaW5zdGFsbCBpdCBieSBwbGFjaW5nIHRoZSBtb2R1bGUgaW4gYSBwYWdlIG9yIHRlbXBsYXRlIHVzaW5nIHRoZSBzbWFydHkgdGFnICYjMTIzO2Ntc19tb2R1bGUgbW9kdWxlPVwnU2tlbGV0b25cJ308L3A+CjxwPllvdSB3b3VsZCBiZSB3aXNlciwgaG93ZXZlciwgdG8gdXNlIHRoZSBtb2R1bGUgYXMgYSBzdGFydGluZyBwb2ludCwgYW5kIGVkaXRpbmcgdGhlIGNvZGUgdG8gZG8gd2hhdGV2ZXIgaXQgaXMgeW91IGFyZSB3YW50aW5nIHRvIGRvLjwvcD4KPGgzPlN1cHBvcnQ8L2gzPgo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+Cjx1bD4KPGxpPkZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBtb2R1bGUsIEZBUXMsIG9yIHRvIGZpbGUgYSBCdWcgUmVwb3J0IG9yIGJ1eSBjb21tZXJjaWFsIHN1cHBvcnQsIHBsZWFzZSB2aXNpdCBTakdcJ3MKbW9kdWxlIGhvbWVwYWdlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuY21zbW9kdWxlcy5jb20iPkNNU01vZHVsZXMuY29tPC9hPi48L2xpPgo8bGk+QWRkaXRpb25hbCBkaXNjdXNzaW9uIG9mIHRoaXMgbW9kdWxlIG1heSBhbHNvIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmciPkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LjwvbGk+CjxsaT5UaGUgYXV0aG9yLCBTakcsIGNhbiBvZnRlbiBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaXJjOi8vaXJjLmZyZWVub2RlLm5ldC8jY21zIj5DTVMgSVJDIENoYW5uZWw8L2E+LjwvbGk+CjxsaT5MYXN0bHksIHlvdSBtYXkgaGF2ZSBzb21lIHN1Y2Nlc3MgZW1haWxpbmcgdGhlIGF1dGhvciBkaXJlY3RseS48L2xpPiAgCjwvdWw+CjxwPkFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dApvZiB0aGUgbGljZW5zZSBmb3IgdGhlIGZ1bGwgZGlzY2xhaW1lci48L3A+Cgo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDA1LCBTYW11ZWwgR29sZHN0ZWluIDxhIGhyZWY9Im1haWx0bzpzamdAY21zbW9kdWxlcy5jb20iPiZsdDtzamdAY21zbW9kdWxlcy5jb20mZ3Q7PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPgonOwo/Pgo=]]></data>
  </file>
  <file>
    <filename>/ModuleRepository.module.php</filename>
    <isdir>0</isdir>
    <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IE1vZHVsZVJlcG9zaXRvcnkgLSBhIHBlZGFudGljICJzdGFydGluZyBwb2ludCIgbW9kdWxlCiMgVmVyc2lvbjogMS4xLCBDYWxndXkxMDAwCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8qIFlvdXIgaW5pdGlhbCBDbGFzcyBkZWNsYXJhdGlvbi4gVGhpcyBmaWxlJ3MgbmFtZSBtdXN0CiAgIGJlICJbY2xhc3MncyBuYW1lXS5tb2R1bGUucGhwIiwgb3IsIGluIHRoaXMgY2FzZSwKICAgTW9kdWxlUmVwb3NpdG9yeS5tb2R1bGUucGhwCiovIApjbGFzcyBNb2R1bGVSZXBvc2l0b3J5IGV4dGVuZHMgQ01TTW9kdWxlCnsKICB2YXIgJGRmbHR1c2VydGVtcGxhdGUgPSAnCjwhLS0gRnJvbnQgRW5kIHRlbXBsYXRlIC0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0ibGliL2hlbHBhcmVhLmpzIj48L3NjcmlwdD4KeyRpdGVtY291bnR9Jm5ic3A7eyRpdGVtc2ZvdW5kfTxici8+CntpZiAkaXRlbWNvdW50ID4gMH0KPHRhYmxlIHdpZHRoPSI3NSUiIGFsaWduPSJjZW50ZXIiPgo8dHI+CiAgIDx0aCBhbGlnbj0ibGVmdCI+eyRuYW1ldGV4dH08L3RoPgogICA8dGggYWxpZ249ImxlZnQiPnskbGlua3RleHR9PC90aD4KICAgPHRoIGFsaWduPSJyaWdodCI+eyRzaXpldGV4dH08L3RoPgogICA8dGggYWxpZ249InJpZ2h0IiA+eyR2ZXJzaW9udGV4dH08L3RoPgogICA8dGggYWxpZ249ImNlbnRlciI+eyRkZXBlbmRzdGV4dH08L3RoPgogICA8dGg+eyRoZWxwdGV4dH08L3RoPgogICA8dGg+eyRhYm91dHRleHR9PC90aD4KPC90cj4Ke2ZvcmVhY2ggZnJvbT0kaXRlbXMgaXRlbT1lbnRyeX0KICA8dHIgY2xhc3M9InskZW50cnktPnJvd2NsYXNzfSI+CiAgICAgPHRkPnskZW50cnktPm5hbWV9PC90ZD4KICAgICA8dGQ+eyRlbnRyeS0+dXJsfTwvdGQ+CiAgICAgPHRkIGFsaWduPSJyaWdodCI+eyRlbnRyeS0+c2l6ZX08L3RkPgogICAgIDx0ZCBhbGlnbj0icmlnaHQiPnskZW50cnktPnZlcnNpb259PC90ZD4KICAgIHtpZiAkZW50cnktPmhhc2RlcGVuZHN9CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIj57JHllc3RleHR9PC90ZD4KICAgIHtlbHNlfQogICAgICA8dGQgYWxpZ249ImNlbnRlciI+eyRub3RleHR9PC90ZD4KICAgIHsvaWZ9CiAgICAgPHRkPnskZW50cnktPmhlbHBsaW5rfTwvdGQ+CiAgICAgPHRkPnskZW50cnktPmFib3V0bGlua308L3RkPgogIDwvdHI+CnsvZm9yZWFjaH0KPC90YWJsZT4Key9pZn0KPCEtLSBFbmQgRnJvbnQgRW5kIHRlbXBsYXRlIC0tPgonOwogIHZhciAkc29hcHNlcnZlcjsKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0TmFtZSgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0TmFtZSgpCiAgewogICAgcmV0dXJuICdNb2R1bGVSZXBvc2l0b3J5JzsKICB9CgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEZyaWVuZGx5TmFtZSgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0RnJpZW5kbHlOYW1lKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpOwogIH0KCgkKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRWZXJzaW9uKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRWZXJzaW9uKCkKICB7CiAgICByZXR1cm4gJzEuMCc7CiAgfQoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRIZWxwKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRIZWxwKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2hlbHAnKTsKICB9CgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEF1dGhvcigpCiAgIFRoaXMgcmV0dXJucyBhIHN0cmluZyB0aGF0IGlzIHByZXNlbnRlZCBpbiB0aGUgTW9kdWxlCiAgIEFkbWluIGlmIHlvdSBjbGljayBvbiB0aGUgIkFib3V0IiBsaW5rLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldEF1dGhvcigpCiAgewogICAgcmV0dXJuICdDYWxndXkxMDAwJzsKICB9CgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEF1dGhvckVtYWlsKCkKICAgVGhpcyByZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcHJlc2VudGVkIGluIHRoZSBNb2R1bGUKICAgQWRtaW4gaWYgeW91IGNsaWNrIG9uIHRoZSAiQWJvdXQiIGxpbmsuIEl0IGhlbHBzIHVzZXJzCiAgIG9mIHlvdXIgbW9kdWxlIGdldCBpbiB0b3VjaCB3aXRoIHlvdSB0byBzZW5kIGJ1ZyByZXBvcnRzLAogICBxdWVzdGlvbnMsIGNhc2VzIG9mIGJlZXIsIGFuZC9vciBsYXJnZSBzdW1zIG9mIG1vbmV5LgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkKICB7CiAgICByZXR1cm4gJ2NhbGd1eTEwMDBAaG90bWFpbC5jb20nOwogIH0KCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0Q2hhbmdlTG9nKCkKICAgVGhpcyByZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcHJlc2VudGVkIGluIHRoZSBtb2R1bGUKICAgQWRtaW4gaWYgeW91IGNsaWNrIG9uIHRoZSBBYm91dCBsaW5rLiBJdCBoZWxwcyB1c2VycwogICBmaWd1cmUgb3V0IHdoYXQncyBjaGFuZ2VkIGJldHdlZW4gcmVsZWFzZXMuCiAgIFNlZSB0aGUgbm90ZSBvbiBsb2NhbGl6YXRpb24gYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2NoYW5nZWxvZycpOwogIH0KCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgSXNQbHVnaW5Nb2R1bGUoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIElzUGx1Z2luTW9kdWxlKCkKICB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIElzU29hcE1vZHVsZSgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gSXNTb2FwTW9kdWxlKCkKICB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEhhc0FkbWluKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBIYXNBZG1pbigpCiAgewogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRBZG1pblNlY3Rpb24oKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldEFkbWluU2VjdGlvbigpCiAgewogICAgcmV0dXJuICdleHRlbnNpb25zJzsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRBZG1pbkRlc2NyaXB0aW9uKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ21vZGRlc2NyaXB0aW9uJyk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgVmlzaWJsZVRvQWRtaW5Vc2VyKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKQogIHsKICAgIHJldHVybiAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNYW5hZ2UgTW9kdWxlUmVwb3NpdG9yeScpIHx8CiAgICAgICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBUZW1wbGF0ZXMnKSB8fAogICAgICAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpOwogIH0KCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0RGVwZW5kZW5jaWVzKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXREZXBlbmRlbmNpZXMoKQogIHsKICAgIHJldHVybiBhcnJheSgnbnVTT0FQJyA9PiAnMS4wJyApOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEluc3RhbGwoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEluc3RhbGwoKQogIHsKICAgIGdsb2JhbCAkZ0NtczsKICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwogICAgJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoKICAgICR0YWJvcHRhcnJheSA9IGFycmF5KCdteXNxbCcgPT4gJ1RZUEU9TXlJU0FNJyk7CgogICAgLy8gY3JlYXRlIGEgY2FjaGUgdGFibGUKICAgICRmbGRzID0gIgogICAgICAgICAgICAgaWQgSSBLRVksCiAgICAgICAgICAgICBmaWxlbmFtZSBDKDI1NSkgTk9UIE5VTEwsCiAgICAgICAgICAgICBtZDVzdW0gICBDKDI1NSkgTk9UIE5VTEwsCiAgICAgICAgICAgICBmc2l6ZSAgICBJLAogICAgICAgICAgICAgbmFtZSAgICAgQyg1MCkgTk9UIE5VTEwsCiAgICAgICAgICAgICBmdmVyc2lvbiBDKDQwKSBOT1QgTlVMTCwKICAgICAgICAgICAgIGluZm8gICAgIEMoMjU1KSBOT1QgTlVMTCwKICAgICAgICAgICAgIGZkYXRlICAgIFQKICAgICAgICAgICAgIjsKICAgICRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9tb2R1bGVyZXBvc2l0b3J5X2NhY2hlIiwKCQkJCSAgICAgICRmbGRzLCAkdGFib3B0YXJyYXkgKTsKICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoICRzcWxhcnJheSApOwogICAgJGRiLT5DcmVhdGVTZXF1ZW5jZSggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfbW9kdWxlcmVwb3NpdG9yeV9jYWNoZV9zZXEiICk7CgogICAgLy8gY3JlYXRlIGEgcGVybWlzc2lvbgogICAgJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oJ01hbmFnZSBNb2R1bGVSZXBvc2l0b3J5JywgJ01hbmFnZSBNb2R1bGVSZXBvc2l0b3J5Jyk7CiAgICAgICAgCiAgICAvLyBjcmVhdGUgYSBwcmVmZXJlbmNlIG9yIHR3bwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoIm1vZHVsZV9kaXJlY3RvcnkiLCAnbW9kdWxlcycpOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoIm91dHB1dF9oZWxwX2FuZF9hYm91dCIsIDApOwoKICAgIC8vIGFuZCBhIHRlbXBsYXRlCiAgICAkdGhpcy0+U2V0VGVtcGxhdGUoJ2Zyb250ZW5kX3RlbXBsYXRlJywgJHRoaXMtPmRmbHR1c2VydGVtcGxhdGUgKTsKCiAgICAvLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cKICAgICR0aGlzLT5BdWRpdCggMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAkdGhpcy0+TGFuZygnaW5zdGFsbGVkJywkdGhpcy0+R2V0VmVyc2lvbigpKSk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgSW5zdGFsbFBvc3RNZXNzYWdlKCkKICAgQWZ0ZXIgaW5zdGFsbGF0aW9uLCB0aGVyZSBtYXkgYmUgdGhpbmdzIHlvdSB3YW50IHRvCiAgIGNvbW11bmljYXRlIHRvIHlvdXIgYWRtaW4uIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhCiAgIHN0cmluZyB3aGljaCB3aWxsIGJlIGRpc3BsYXllZC4KCSAgIAogICBTZWUgdGhlIG5vdGUgb24gbG9jYWxpemF0aW9uIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEluc3RhbGxQb3N0TWVzc2FnZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0aW5zdGFsbCcpOwogIH0KCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgVW5pbnN0YWxsUG9zdE1lc3NhZ2UoKQogICBBZnRlciByZW1vdmluZyBhIG1vZHVsZSwgdGhlcmUgbWF5IGJlIHRoaW5ncyB5b3Ugd2FudCB0bwogICBjb21tdW5pY2F0ZSB0byB5b3VyIGFkbWluLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYQogICBzdHJpbmcgd2hpY2ggd2lsbCBiZSBkaXNwbGF5ZWQuCgkgICAKICAgU2VlIHRoZSBub3RlIG9uIGxvY2FsaXphdGlvbiBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBVbmluc3RhbGxQb3N0TWVzc2FnZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0dW5pbnN0YWxsJyk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgVXBncmFkZSgpCiAgIElmIHlvdXIgbW9kdWxlIHZlcnNpb24gbnVtYmVyIGRvZXMgbm90IG1hdGNoIHRoZSB2ZXJzaW9uCiAgIG51bWJlciBvZiB0aGUgaW5zdGFsbGVkIG1vZHVsZSwgdGhlIENNUyBBZG1pbiB3aWxsIGdpdmUKICAgeW91IGEgY2hhbmNlIHRvIHVwZ3JhZGUgdGhlIG1vZHVsZS4gVGhpcyBpcyB0aGUgZnVuY3Rpb24KICAgdGhhdCBhY3R1YWxseSBoYW5kbGVzIHRoZSB1cGdyYWRlLgogICBJZGVhbGx5LCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBoYW5kbGUgdXBncmFkZXMgaW5jcmVtZW50YWxseSwKICAgc28geW91IGNvdWxkIHVwZ3JhZGUgZnJvbSB2ZXJzaW9uIDAuMC4xIHRvIDEwLjUuNyB3aXRoCiAgIGEgc2luZ2xlIGNhbGwuIEZvciBhIGdyZWF0IGV4YW1wbGUgb2YgdGhpcywgc2VlIHRoZSBOZXdzCiAgIG1vZHVsZSBpbiB0aGUgc3RhbmRhcmQgQ01TIGluc3RhbGwuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gVXBncmFkZSgkb2xkdmVyc2lvbiwgJG5ld3ZlcnNpb24pCiAgewogICAgJGN1cnJlbnRfdmVyc2lvbiA9ICRvbGR2ZXJzaW9uOwogICAgc3dpdGNoKCRjdXJyZW50X3ZlcnNpb24pCiAgICAgIHsKICAgICAgY2FzZSAiMS4wIjoKCWJyZWFrOwogICAgICBjYXNlICIxLjEiOgoJYnJlYWs7CiAgICAgIH0KCQkKICAgIC8vIHB1dCBtZW50aW9uIGludG8gdGhlIGFkbWluIGxvZwogICAgJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCd1cGdyYWRlZCcsJHRoaXMtPkdldFZlcnNpb24oKSkpOwogIH0KCQoJCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgVW5pbnN0YWxsKCkKICAgU29tZXRpbWVzLCBhbiBleGNlcHRpb25hbGx5IHVuZW5saWdodGVuZWQgb3IgaWdub3JhbnQKICAgYWRtaW4gd2lsbCB3aXNoIHRvIHVuaW5zdGFsbCB5b3VyIG1vZHVsZS4gV2hpbGUgaXQKICAgd291bGQgYmUgYmVzdCB0byBsYXkgaW50byB0aGVzZSBpZGlvdHMgd2l0aCBhIGNsdWVzdGljaywKICAgd2Ugd2lsbCBkbyB0aGUgbWFnbmFuaW1vdXMgdGhpbmcgYW5kIHJlbW92ZSB0aGUgbW9kdWxlCiAgIGFuZCBjbGVhbiB1cCB0aGUgZGF0YWJhc2UsIHBlcm1pc3Npb25zLCBhbmQgcHJlZmVyZW5jZXMKICAgdGhhdCBhcmUgc3BlY2lmaWMgdG8gaXQuCiAgIFRoaXMgaXMgdGhlIG1ldGhvZCB3aGVyZSB3ZSBkbyB0aGlzLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIFVuaW5zdGFsbCgpCiAgewogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAvLyByZW1vdmUgdGhlIHRhYmxlKHMpCiAgICAkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCAkZGIgKTsKICAgICRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX21vZHVsZXJlcG9zaXRvcnlfY2FjaGUiICk7CiAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiAgICAkZGItPkRyb3BTZXF1ZW5jZSggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfbW9kdWxlcmVwb3NpdG9yeV9jYWNoZV9zZXEiICk7CgogICAgLy8gcmVtb3ZlIHRoZSBwZXJtaXNzaW9ucwogICAgJHRoaXMtPlJlbW92ZVBlcm1pc3Npb24oJ01hbmFnZSBNb2R1bGVSZXBvc2l0b3J5Jyk7CgkJCiAgICAvLyByZW1vdmUgdGhlIHByZWZlcmVuY2UKICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCJtb2R1bGVfZGlyZWN0b3J5Iik7CiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgib3V0cHV0X2hlbHBfYW5kX2Fib3V0Iik7CgogICAgLy8gcmVtb3ZlIHRoZSB0ZW1wbGF0ZQogICAgJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCdmcm9udGVuZF90ZW1wbGF0ZScpOwoJCQogICAgLy8gcHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nCiAgICAkdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgJHRoaXMtPkxhbmcoJ3VuaW5zdGFsbGVkJykpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIERvQWN0aW9uKCRhY3Rpb24sICRpZCwgJHBhcmFtcywgJHJldHVybl9pZCkKICAgVGhpcyBpcyB0aGUgbWFpbiBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGlmIHlvdXIgbW9kdWxlCiAgIGlzIGEgcGx1Zy1pbiB0eXBlIG1vZHVsZS4KCSAgIAogICBJbiBnZW5lcmFsLCB5b3UnbGwgd2FudCB0byBjYWxsIHZhcmlvdXMgZGlmZmVyZW50CiAgIG1ldGhvZHMsIGRlcGVuZGluZyB1cG9uIHRoZSByZXF1ZXN0ZWQgImFjdGlvbi4iCgkgICAKICAgVGhlcmUgYXJlIHR3byBidWlsdC1pbiBhY3Rpb25zOiAiZGVmYXVsdCIgd2hpY2ggZ2V0cwogICBjYWxsZWQgaWYgdGhlIG1vZHVsZSBpcyBhY2Nlc3NlZCBmcm9tIGEgcGFnZSBvciB0ZW1wbGF0ZSwKICAgYW5kICJkZWZhdWx0YWRtaW4iIHdoaWNoIGdldHMgY2FsbGVkIGZyb20gdGhlIEFkbWluCiAgIHBhbmVsLgoJICAgCiAgIFRoZSBBY3Rpb24gY2FuIGJlIG92ZXJyaWRkZW4gYnkgcGFzc2luZyBhIGRpZmZlcmVudAogICBhY3Rpb24gZWl0aGVyIGluIHlvdXIgdGFnLCBlLmcuLAogICB7Y21zX21vZHVsZSBtb2R1bGU9J01vZHVsZVJlcG9zaXRvcnknIGFjdGlvbj0nc29tZXRoaW5nJ30KICAgb3IgYnkgcGFzc2luZyBpdCBpbiBhIGxpbmsgY3JlYXRlIGJ5IHRoZSBDcmVhdGVMaW5rCiAgIG1ldGhvZC4gTW9yZSBvbiB0aGF0IGNhbiBiZSBzZWVuIGJlbG93IGluIHRoZQogICBEaXNwbGF5QWRtaW5OYXYgbWV0aG9kLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIERvQWN0aW9uKCRhY3Rpb24sICRpZCwgJHBhcmFtcywgJHJldHVybl9pZD0tMSkKICB7CiAgICBzd2l0Y2ggKCRhY3Rpb24pCiAgICAgIHsKICAgICAgY2FzZSAnZGVmYXVsdCc6Cgl7CgkgICR0aGlzLT5fRGlzcGxheU1vZHVsZU91dHB1dCgkaWQsICRwYXJhbXMsICRyZXR1cm5faWQpOwoJICBicmVhazsKCX0KICAgICAgY2FzZSAnZGVmYXVsdGFkbWluJzoKCXsKCSAgLy8gb25seSBsZXQgcGVvcGxlIGFjY2VzcyBtb2R1bGUgcHJlZmVyZW5jZXMgaWYgdGhleSBoYXZlIHBlcm1pc3Npb24KCSAgJHRoaXMtPl9EaXNwbGF5QWRtaW5QYW5lbCgkaWQsICRwYXJhbXMsICRyZXR1cm5faWQpOwoJICBicmVhazsKCX0KICAgICAgY2FzZSAnZG93bmxvYWQnOgoJewoJICAkdGhpcy0+X1NlbmRYTUxGaWxlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5faWQgKTsKCSAgYnJlYWs7Cgl9CiAgICAgIGNhc2UgJ3NldHByZWZzJzoKCXsKCSAgaWYgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJykpCgkgICAgewoJICAgICAgJHRoaXMtPl9TYXZlQWRtaW5QcmVmcygkaWQsICRwYXJhbXMsICRyZXR1cm5faWQpOwoJICAgIH0KCSAgYnJlYWs7Cgl9CiAgICAgIGNhc2UgJ3NldF9mcm9udGVuZHRlbXBsYXRlJzoKCXsKCSAgaWYgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBUZW1wbGF0ZXMnKSkKCSAgICB7CgkgICAgICAkdGhpcy0+X1NldEZyb250ZW5kVGVtcGxhdGUoJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkKTsKCSAgICB9CgkgIGJyZWFrOwoJfQogICAgICBjYXNlICdyZXNldGNhY2hlJzoKCXsKCSAgJHRoaXMtPl9SZXNldE1vZHVsZUNhY2hlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5faWQgKTsKCSAgYnJlYWs7Cgl9CiAgICAgIGNhc2UgJ3Nob3dhYm91dCc6Cgl7CgkgICR0aGlzLT5fRGlzcGxheUFib3V0UGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkICk7CgkgIGJyZWFrOwoJfQogICAgICBjYXNlICdzaG93aGVscCc6Cgl7CgkgICR0aGlzLT5fRGlzcGxheUhlbHBQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5faWQgKTsKCSAgYnJlYWs7Cgl9CiAgICAgIGNhc2UgJ3NvYXAnOgoJewoJICB3aGlsZShAb2JfZW5kX2NsZWFuKCkpOwoJICAkdGhpcy0+X1NldHVwU29hcCgkaWQsJHBhcmFtcywkcmV0dXJuX2lkKTsKCSAgYnJlYWs7Cgl9CiAgICAgIH0KCiAgfQoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBfRGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5faWQsICRtZXNzYWdlKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQoKICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgc2ltcGxlIG1ldGhvZCB0byBkaXNwbGF5CiAgIGVycm9yIGluZm9ybWF0aW9uIG9uIHRoZSBhZG1pbiBzaWRlLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCwgJG1lc3NhZ2U9JycpCiAgewogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9lcnJvcicsICR0aGlzLT5MYW5nKCdlcnJvcicpKTsKICAgIGlmICgkbWVzc2FnZSAhPSAnJykKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduX2J5X3JlZignbWVzc2FnZScsICRtZXNzYWdlKTsKICAgICAgfQoKICAgIC8vIERpc3BsYXkgdGhlIHBvcHVsYXRlZCB0ZW1wbGF0ZQogICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdlcnJvci50cGwnKTsKICB9CgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIF9EaXNwbGF5QWJvdXRQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybl9pZCwgJG1lc3NhZ2UpCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX0Rpc3BsYXlBYm91dFBhZ2UoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkLCAkbWVzc2FnZT0nJykKICB7CiAgICAkcmVzdWx0cyA9ICR0aGlzLT5fR2V0WE1MQWJvdXQoICRwYXJhbXNbJ3htbGZpbGUnXSApOwogICAgaWYoICRyZXN1bHRzWzBdID09IGZhbHNlICkKICAgICAgewoJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJHJlc3VsdHNbMV0gKTsKICAgICAgfQogICAgZWxzZQogICAgICB7CgllY2hvICRyZXN1bHRzWzFdOwogICAgICB9CiAgfQoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBfRGlzcGxheUFkbWluUGFuZWwoJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkLCAkbWVzc2FnZSkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfRGlzcGxheUFkbWluUGFuZWwoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkLCAkbWVzc2FnZT0nJykKICB7CiAgICBlY2hvICR0aGlzLT5TdGFydFRhYkhlYWRlcnMoKTsKICAgIGlmKCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpICkKICAgICAgewoJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdwcmVmZXJlbmNlcycsJHRoaXMtPkxhbmcoJ3ByZWZlcmVuY2VzJykpOwogICAgICB9CiAgICBpZiggJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFRlbXBsYXRlcycpICkKICAgICAgewoJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCd0ZW1wbGF0ZScsJHRoaXMtPkxhbmcoJ3RlbXBsYXRlJykpOwogICAgICB9CiAgICBlY2hvICR0aGlzLT5FbmRUYWJIZWFkZXJzKCk7CgogICAgZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7CiAgICBpZiggJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSApCiAgICAgIHsKCWVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdwcmVmZXJlbmNlcycpOwoJJHRoaXMtPl9EaXNwbGF5UHJlZmVyZW5jZXNUYWIoJGlkLCRwYXJhbXMsJHJldHVybmlkKTsKCWVjaG8gJHRoaXMtPkVuZFRhYigpOwogICAgICB9CiAgICBpZiggJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFRlbXBsYXRlcycpICkKICAgICAgewoJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ3RlbXBsYXRlJyk7CgkkdGhpcy0+X0Rpc3BsYXlUZW1wbGF0ZVRhYiggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCWVjaG8gJHRoaXMtPkVuZFRhYigpOwogICAgICB9CiAgICBlY2hvICR0aGlzLT5FbmRUYWJDb250ZW50KCk7CiAgICByZXR1cm47CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgX0Rpc3BsYXlIZWxwUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5faWQsICRtZXNzYWdlKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9EaXNwbGF5SGVscFBhZ2UoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkLCAkbWVzc2FnZT0nJykKICB7CiAgICAkcmVzdWx0cyA9ICR0aGlzLT5fR2V0WE1MSGVscCggJHBhcmFtc1sneG1sZmlsZSddICk7CiAgICBpZiggJHJlc3VsdHNbMF0gPT0gZmFsc2UgKQogICAgICB7CgkkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkcmVzdWx0c1sxXSApOwogICAgICB9CiAgICBlbHNlCiAgICAgIHsKCWVjaG8gJHJlc3VsdHNbMV07CiAgICAgIH0KICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBfRGlzcGxheUFkbWluUGFuZWwoJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkLCAkbWVzc2FnZSkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfRGlzcGxheU1vZHVsZU91dHB1dCgkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQsICRtZXNzYWdlPScnKQogIHsKICAgIC8vIGdldCBhIGxpc3Qgb2YgdGhlIHhtbCBmaWxlcyBpbiB0aGUgbW9kdWxlIGRpcmVjdG9yeQogICAgLy8gYW5kIGNyZWF0ZSBhIHRhYmxlIGNvbnRhaW5pbmcgbmFtZSwgdmVyc2lvbiwgYXV0aG9yLCBkYXRlLCBoZWxwIGFuZCBhYm91dCBsaW5rcwogICAgJHhtbGZpbGVzID0gJHRoaXMtPkdldFhNTExpc3QoIHRydWUgKTsKICAgICRyb3dhcnJheSA9IGFycmF5KCk7CiAgICAkcm93Y2xhc3MgPSAncm93MSc7CiAgICBmb3JlYWNoKCAkeG1sZmlsZXMgYXMgJG9uZWZpbGUgKQogICAgICB7CgkvLyBwYXJzZSB0aGUgeG1sIGZpbGUgYnJpZWZseQoJLy8gYW5kIGFkZCB2ZXJzaW9uIGFuZCBkZXBlbmRzIGluZm9ybWF0aW9uCgkvLyBhbmQgaGVscCBhbmQgYWJvdXQKCSR4bWwgPSBmaWxlX2dldF9jb250ZW50cyggJG9uZWZpbGUgKTsKCSR4bWxkZXRhaWxzID0gJHRoaXMtPkV4cGFuZFhNTFBhY2thZ2UoICR4bWwsIDAsIDEgKTsKCWlmKCAhJHhtbGRldGFpbHMgKQoJICB7CgkgICAgJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJHRoaXMtPkdldExhc3RFcnJvcigpICk7CgkgICAgcmV0dXJuOwoJICB9CgoJJG9uZXJvdyA9IG5ldyBTdGRDbGFzczsKCSRvbmVyb3ctPm5hbWUgPSAkeG1sZGV0YWlsc1snbmFtZSddOwoJJG9uZXJvdy0+dmVyc2lvbiA9ICR4bWxkZXRhaWxzWyd2ZXJzaW9uJ107CglpZiggJHRoaXMtPkdldFByZWZlcmVuY2UoJ291dHB1dF9oZWxwX2FuZF9hYm91dCcpID09IDEgKQoJICB7CgkgICAgJG9uZXJvdy0+YWJvdXQgPSAkeG1sZGV0YWlsc1snYWJvdXQnXTsKCSAgICAkb25lcm93LT5oZWxwID0gJHhtbGRldGFpbHNbJ2hlbHAnXTsKCSAgfQoJJG9uZXJvdy0+dXJsID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkb3dubG9hZCcsJHJldHVybmlkLGJhc2VuYW1lKCRvbmVmaWxlKSwKCQkJCQkgICBhcnJheSgneG1sZmlsZSc9PiRvbmVmaWxlKSk7Cgkkb25lcm93LT5zaXplID0gc3ByaW50ZigiJTUuMWYiLCAkeG1sZGV0YWlsc1snc2l6ZSddIC8gMTAyNCk7Cgkkb25lcm93LT5hYm91dGxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ3Nob3dhYm91dCcsJHJldHVybmlkLCR0aGlzLT5MYW5nKCdhYm91dHRleHQnKSwKCQkJCQkgICAgICAgYXJyYXkoJ3htbGZpbGUnPT5iYXNlbmFtZSgkb25lZmlsZSkpKTsKCSRvbmVyb3ctPmhlbHBsaW5rID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdzaG93aGVscCcsJHJldHVybmlkLCR0aGlzLT5MYW5nKCdoZWxwdGV4dCcpLAoJCQkJCSAgICAgIGFycmF5KCd4bWxmaWxlJz0+YmFzZW5hbWUoJG9uZWZpbGUpKSk7CgoJJGRlcGVuZHMgPSBhcnJheSgpOwoJZm9yZWFjaCggJHhtbGRldGFpbHNbJ3JlcXVpcmVzJ10gYXMgJGRlcCApCgkgIHsKCSAgICAkcmVxID0gbmV3IFN0ZENsYXNzOwoJICAgICRyZXEtPm5hbWUgPSAkZGVwWyduYW1lJ107CgkgICAgJHJlcS0+dmVyc2lvbiA9ICRkZXBbJ3ZlcnNpb24nXTsKCSAgICAkZGVwZW5kc1tdID0gJHJlcTsKCSAgfQoJJG9uZXJvdy0+ZGVwZW5kcyA9ICRkZXBlbmRzOwoJJG9uZXJvdy0+aGFzZGVwZW5kcyA9IChjb3VudCgkZGVwZW5kcykgPiAwKSA/IGZhbHNlIDogdHJ1ZTsKCSRvbmVyb3ctPnJvd2NsYXNzID0gJHJvd2NsYXNzOwoJKCRyb3djbGFzcyA9PSAicm93MSIgPyAkcm93Y2xhc3MgPSAicm93MiIgOiAkcm93Y2xhc3MgPSAicm93MSIpOwoJCglhcnJheV9wdXNoKCAkcm93YXJyYXksICRvbmVyb3cgKTsKICAgICAgfQoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiggJ2l0ZW1zZm91bmQnLCAkdGhpcy0+TGFuZygnaXRlbXNmb3VuZCcpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiggJ25hbWV0ZXh0JywgJHRoaXMtPkxhbmcoJ25hbWUnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oICdsaW5rdGV4dCcsICR0aGlzLT5MYW5nKCdsaW5rJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCAnc2l6ZXRleHQnLCAkdGhpcy0+TGFuZygnc2l6ZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiggJ3ZlcnNpb250ZXh0JywgJHRoaXMtPkxhbmcoJ3ZlcnNpb24nKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oICdkZXBlbmRzdGV4dCcsICR0aGlzLT5MYW5nKCdkZXBlbmRlbmNpZXMnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oICdoZWxwdGV4dCcsICR0aGlzLT5MYW5nKCdoZWxwdGV4dCcpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiggJ2Fib3V0dGV4dCcsICR0aGlzLT5MYW5nKCdhYm91dHRleHQnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oICd5ZXN0ZXh0JywgJHRoaXMtPkxhbmcoJ3llcycpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiggJ25vdGV4dCcsICR0aGlzLT5MYW5nKCdubycpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiggJ2l0ZW1jb3VudCcsIGNvdW50KCAkcm93YXJyYXkgKSApOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduX2J5X3JlZiggJ2l0ZW1zJywgJHJvd2FycmF5ICk7CiAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoICdmcm9udGVuZF90ZW1wbGF0ZScgKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBfRGlzcGxheVByZWZlcmVuY2VzVGFiKCRpZCwgJHBhcmFtcywgJHJldHVybl9pZCwgJG1lc3NhZ2UpCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX0Rpc3BsYXlQcmVmZXJlbmNlc1RhYigkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywKCQkJICAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwnc2V0cHJlZnMnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2VuZGZvcm0nLAoJCQkgICR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCggJGlkLCAnc3VibWl0JywKCQkJCQkJICAgICR0aGlzLT5MYW5nKCdzdWJtaXQnKSkpOwoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X21vZHVsZXBhdGgnLAoJCQkgICR0aGlzLT5MYW5nKCdwcm9tcHRfbW9kdWxlcGF0aCcpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfbW9kdWxlcGF0aCcsCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCggJGlkLCAnaW5wdXRfbW9kdWxlcGF0aCcsCgkJCQkJCSAgJHRoaXMtPkdldFByZWZlcmVuY2UoJ21vZHVsZV9kaXJlY3RvcnknLCIiKSw1MCwyNTUpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5mb19tb2R1bGVwYXRoJywKCQkJICAkdGhpcy0+TGFuZygnaW5mb19tb2R1bGVwYXRoJykpOwoKCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF9oZWxwYW5kYWJvdXQnLAoJCQkgICR0aGlzLT5MYW5nKCdwcm9tcHRfaGVscGFuZGFib3V0JykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9oZWxwYW5kYWJvdXQnLAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCAkaWQsICdpbnB1dF9oZWxwYW5kYWJvdXQnLDEsCgkJCQkJCSAgICAgICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdvdXRwdXRfaGVscF9hbmRfYWJvdXQnLDApKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2luZm9faGVscGFuZGFib3V0JywKCQkJICAkdGhpcy0+TGFuZygnaW5mb19oZWxwYW5kYWJvdXQnKSk7CgogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfcmVzZXRjYWNoZScsCgkJCSAgJHRoaXMtPkxhbmcoJ3Byb21wdF9yZXNldGNhY2hlJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9yZXNldGNhY2hlJywKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoICRpZCwgJ3Jlc2V0Y2FjaGUnLCAkdGhpcy0+TGFuZygncmVzZXRjYWNoZScpKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF9jcmVhdGVwYXRoJywKCQkJICAkdGhpcy0+TGFuZygncHJvbXB0X2NyZWF0ZXBhdGgnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X2NyZWF0ZXBhdGgnLAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwnaW5wdXRfY3JlYXRlcGF0aCcsMSwwKSk7CgogICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbnByZWZzLnRwbCcpOwogIH0KCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgX0Rpc3BsYXlUZW1wbGF0ZVRhYigkaWQsICRwYXJhbXMsICRyZXR1cm5faWQsICRtZXNzYWdlKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9EaXNwbGF5VGVtcGxhdGVUYWIoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICBlY2hvICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQgKCRpZCwgJ3NldF9mcm9udGVuZHRlbXBsYXRlJyk7CiAgICBlY2hvICc8YnIvPjxwPicuJHRoaXMtPkNyZWF0ZVRleHRBcmVhIChmYWxzZSwgJGlkLAoJCQkJCSAgICR0aGlzLT4KCQkJCQkgICBHZXRUZW1wbGF0ZSAoJ2Zyb250ZW5kX3RlbXBsYXRlJyksCgkJCQkJICAgJ3RlbXBsYXRlY29udGVudCcsICcnKS4nPC9wPic7CiAgICBlY2hvICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnc3VibWl0YnV0dG9uJywKCQkJCSAgICR0aGlzLT5MYW5nICgnc3VibWl0JykpOwogICAgZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ2RlZmF1bHRidXR0b24nLAoJCQkJICAgJHRoaXMtPkxhbmcgKCdkZWZhdWx0JykpOwogICAgZWNobyAkdGhpcy0+Q3JlYXRlRm9ybUVuZCAoKTsKICB9CgoKICBmdW5jdGlvbiBfR2V0WE1MQWJvdXQoJHhtbGZpbGUpCiAgewogICAgJHhtbCA9ICR0aGlzLT5fR2V0WE1MRmlsZSggJHhtbGZpbGUgKTsKICAgICR4bWxkZXRhaWxzID0gJHRoaXMtPkV4cGFuZFhNTFBhY2thZ2UoICR4bWwsIDAsIDEgKTsKICAgIGlmKCAhJHhtbGRldGFpbHMgKQogICAgICB7CglyZXR1cm4gYXJyYXkoIGZhbHNlLCAkdGhpcy0+R2V0TGFzdEVycm9yKCkgKTsKICAgICAgfQogICAgaWYoICFpc3NldCggJHhtbGRldGFpbHNbJ2Fib3V0J10gKSApCiAgICAgIHsKCXJldHVybiBhcnJheSggZmFsc2UsICR0aGlzLT5MYW5nKCdub2Fib3V0aW5mbycpKTsKICAgICAgfQogICAgcmV0dXJuIGFycmF5KHRydWUsJHhtbGRldGFpbHNbJ2Fib3V0J10pOwogIH0KCgogIGZ1bmN0aW9uIF9HZXRYTUxGaWxlKCR4bWxmaWxlKQogIHsKICAgIGdsb2JhbCAkZ0NtczsKICAgICRmbiAgPSAkZ0Ntcy0+Y29uZmlnWyd1cGxvYWRzX3BhdGgnXS5ESVJFQ1RPUllfU0VQQVJBVE9SOwogICAgJGZuIC49ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtb2R1bGVfZGlyZWN0b3J5JykuRElSRUNUT1JZX1NFUEFSQVRPUi4keG1sZmlsZTsKICAgICR4bWwgPSBmaWxlX2dldF9jb250ZW50cyggJGZuICk7CiAgICByZXR1cm4gJHhtbDsKICB9ICAKCgogIGZ1bmN0aW9uIF9HZXRYTUxIZWxwKCR4bWxmaWxlKQogIHsKICAgIGdsb2JhbCAkZ0NtczsKICAgICR4bWwgPSAkdGhpcy0+X0dldFhNTEZpbGUoICR4bWxmaWxlICk7CiAgICAkeG1sZGV0YWlscyA9ICR0aGlzLT5FeHBhbmRYTUxQYWNrYWdlKCAkeG1sLCAwLCAxICk7CgogICAgaWYoICEkeG1sZGV0YWlscyApCiAgICAgIHsKCXJldHVybiBhcnJheSggZmFsc2UsICR0aGlzLT5HZXRMYXN0RXJyb3IoKSApOwogICAgICB9CiAgICBpZiggIWlzc2V0KCAkeG1sZGV0YWlsc1snaGVscCddICkgKQogICAgICB7CglyZXR1cm4gYXJyYXkoIGZhbHNlLCAkdGhpcy0+TGFuZygnbm9oZWxwaW5mbycpICk7CiAgICAgIH0KICAgIHJldHVybiBhcnJheSggdHJ1ZSwgJHhtbGRldGFpbHNbJ2hlbHAnXSApOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIFJlc2V0TW9kdWxlQ2FjaGUoJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkLCAkbWVzc2FnZSkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKCiAgIHJlYWRzIGFsbCBvZiB0aGUgeG1sIGZpbGVzIGZyb20gdGhlIGRpcmVjdG9yeSwgY2FsY3VsYXRlcyB0aGVpciBtZDUgc3VtCiAgIGFuZCBjYWNoZXMgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgdGFibGUKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfUmVzZXRNb2R1bGVDYWNoZSgkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQpCiAgewogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAKICAgIC8vIGdldCB0aGUgeG1sIGxpc3QKICAgICR4bWxmaWxlcyA9ICR0aGlzLT5HZXRYTUxMaXN0KHRydWUpOwogICAgCiAgICAvLyBjbGVhciBhbGwgb2YgdGhlIHJvd3MgZnJvbSB0aGUgY2FjaGUgdGFibGUKICAgICRxID0gIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfbW9kdWxlcmVwb3NpdG9yeV9jYWNoZSI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxICk7CgogICAgLy8gYW5kIG5vdyB3ZSBkbyB0aGUgaGFyZCB3b3JrCiAgICBmb3JlYWNoKCAkeG1sZmlsZXMgYXMgJGZpbGUgKQogICAgICB7CgkkY29udGVudHMgPSBmaWxlX2dldF9jb250ZW50cyggJGZpbGUgKTsKICAgICAgICBpZiggJGNvbnRlbnRzID09IEZBTFNFICkgY29udGludWU7Cgkkc3RhdCA9IHN0YXQoICRmaWxlICk7CgkkbWQ1c3VtID0gbWQ1KCRjb250ZW50cyk7CgkkeG1sZGV0YWlscyA9ICR0aGlzLT5FeHBhbmRYTUxQYWNrYWdlKCAkY29udGVudHMsIDAsIDEgKTsKCSRkZXNjcmlwdGlvbiA9ICcnOwoJaWYoIGlzc2V0KCAkeG1sZGV0YWlsc1snZGVzY3JpcHRpb24nXSApICkKCSAgewoJICAgICRkZXNjcmlwdGlvbiA9ICR4bWxkZXRhaWxzWydkZXNjcmlwdGlvbiddOwoJICB9CgkkbmFtZSA9ICR4bWxkZXRhaWxzWyduYW1lJ107CgkkdmVyc2lvbiA9ICR4bWxkZXRhaWxzWyd2ZXJzaW9uJ107Cgkkc2l6ZSA9IHN0cmxlbiggJGNvbnRlbnRzICk7CgkkZGF0ZSA9ICRzdGF0WydjdGltZSddOwoKCSRpZCA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfbW9kdWxlcmVwb3NpdG9yeV9jYWNoZV9zZXEiKTsKCSRibiA9IGJhc2VuYW1lKCAkZmlsZSApOwoJJHEgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9tb2R1bGVyZXBvc2l0b3J5X2NhY2hlIFZBTFVFUyAoPyw/LD8sPyw/LD8sPyw/KSI7CgkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJGlkLCAkYm4sICRtZDVzdW0sICRzaXplLCAkbmFtZSwgJHZlcnNpb24sICRkZXNjcmlwdGlvbiwgCgkJCQkJICAgICAkZGItPkRCVGltZVN0YW1wKCRkYXRlKSApICk7CiAgICAgIH0KCiAgICAvLyBpdCdzIGRvbmUKICAgICR0aGlzLT5BdWRpdCggMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAkdGhpcy0+TGFuZygndXBkYXRlZGNhY2hlJykpOwoKICAgIGlmKCBpc3NldCgkcGFyYW1zWydpbnRlcmFjdGl2ZSddKSApCiAgICAgIHsKCSR0aGlzLT5SZWRpcmVjdCgkaWQsJ2RlZmF1bHRhZG1pbicpOwogICAgICB9CiAgfQoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBTYXZlQWRtaW5QcmVmcygkaWQsICRwYXJhbXMsICRyZXR1cm5faWQsICRtZXNzYWdlKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9TYXZlQWRtaW5QcmVmcygkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQpCiAgewogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydyZXNldGNhY2hlJ10gKSApCiAgICAgIHsKCSRwYXJhbXNbJ2ludGVyYWN0aXZlJ10gPSAxOwoJJHRoaXMtPlJlZGlyZWN0KCRpZCwncmVzZXRjYWNoZScsJHJldHVybmlkLCRwYXJhbXMpOwoJcmV0dXJuOwogICAgICB9CgogICAgaWYoICFpc3NldCggJHBhcmFtc1snaW5wdXRfbW9kdWxlcGF0aCddICkgKQogICAgICB7CglyZXR1cm47CiAgICAgIH0KCiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnbW9kdWxlX2RpcmVjdG9yeScsdHJpbSgkcGFyYW1zWydpbnB1dF9tb2R1bGVwYXRoJ10pKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdvdXRwdXRfaGVscF9hbmRfYWJvdXQnLCRwYXJhbXNbJ2lucHV0X2hlbHBhbmRhYm91dCddKTsKICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsJ2RlZmF1bHRhZG1pbicpOwogIH0KCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgU2VuZFhNTEZpbGUoJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkLCAkbWVzc2FnZSkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfU2VuZFhNTEZpbGUoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkKQogIHsKICAgIGlmKCAhaXNzZXQoICRwYXJhbXNbJ3htbGZpbGUnXSApICkKICAgICAgewoJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKCQkJCSAkdGhpcy0+TGFuZygnZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJykpOwoJcmV0dXJuOwogICAgICB9CgogICAgZ2xvYmFsICRnQ21zOwogICAgJGZuICA9ICRnQ21zLT5jb25maWdbJ3VwbG9hZHNfcGF0aCddLkRJUkVDVE9SWV9TRVBBUkFUT1I7CiAgICAkZm4gLj0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ21vZHVsZV9kaXJlY3RvcnknKS5ESVJFQ1RPUllfU0VQQVJBVE9SLiRwYXJhbXNbJ3htbGZpbGUnXTsKICAgICR4bWwgPSBmaWxlX2dldF9jb250ZW50cyggJGZuICk7CgogICAgLy8gYW5kIHNlbmQgdGhlIGZpbGUKICAgIHdoaWxlKEBvYl9lbmRfY2xlYW4oKSk7CiAgICBoZWFkZXIoJ0NvbnRlbnQtRGVzY3JpcHRpb246IEZpbGUgVHJhbnNmZXInKTsKICAgIGhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9mb3JjZS1kb3dubG9hZCcpOwogICAgaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0nLmJhc2VuYW1lKCRwYXJhbXNbJ3htbGZpbGUnXSkpOwogICAgZWNobyAkeG1sdHh0OwogICAgZXhpdCgpOwogICAgCiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgU2V0RnJvbnRlbmRUZW1wbGF0ZSgkaWQsICRwYXJhbXMsICRyZXR1cm5faWQsICRtZXNzYWdlKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9TZXRGcm9udGVuZFRlbXBsYXRlKCRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCkKICB7CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2RlZmF1bHRidXR0b24nXSApICkKICAgICAgewoJJHRoaXMtPlNldFRlbXBsYXRlKCdmcm9udGVuZF90ZW1wbGF0ZScsJHRoaXMtPmRmbHR1c2VydGVtcGxhdGUpOwogICAgICB9CiAgICBlbHNlCiAgICAgIHsKCSR0aGlzLT5TZXRUZW1wbGF0ZSgnZnJvbnRlbmRfdGVtcGxhdGUnLCRwYXJhbXNbJ3RlbXBsYXRlY29udGVudCddKTsKICAgICAgfQogICAgJHRoaXMtPlJlZGlyZWN0KCRpZCwnZGVmYXVsdGFkbWluJyk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgX1NldHVwU09BUCgkaWQsICRwYXJhbXMsICRyZXR1cm5faWQsICRtZXNzYWdlKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9TZXR1cFNvYXAoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewovLyAgICAgaWYgKCFpc3NldCgkSFRUUF9SQVdfUE9TVF9EQVRBKSkKLy8gICAgICAgewovLyAgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdIVFRQX1JBV19QT1NUX0RBVEEnLCAkX1NFUlZFUikpCi8vIAkgIHsKLy8gCSAgICAkSFRUUF9SQVdfUE9TVF9EQVRBID0gJF9TRVJWRVJbJ0hUVFBfUkFXX1BPU1RfREFUQSddOwovLyAJICB9Ci8vIAllbHNlaWYgKCBpc19hcnJheSgkX0dMT0JBTCApICkKLy8gCSAgewovLyAJICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdIVFRQX1JBV19QT1NUX0RBVEEnLCAkX0dMT0JBTFMpKQovLyAJICAgICAgewovLyAJCSRIVFRQX1JBV19QT1NUX0RBVEEgPSAkX0dMT0JBTFNbJ0hUVFBfUkFXX1BPU1RfREFUQSddOwovLyAJICAgICAgfQovLyAJICB9Ci8vICAgICAgICAgZWxzZQovLyAJICB7Ci8vIAkgICAgcHJpbnQgIk5vIGRhdGEgcGFzc2VkIHRvIHNjcmlwdDogbm90aGluZyB0byBwYXJzZSFcbiI7Ci8vIAkgICAgZXhpdDsKLy8gCSAgfQovLyAgICAgICB9CgogICAgJHRoaXMtPnNvYXBzZXJ2ZXIgPSBuZXcgc29hcF9zZXJ2ZXI7CiAgICAkdGhpcy0+c29hcHNlcnZlci0+cmVnaXN0ZXIoICJNb2R1bGVSZXBvc2l0b3J5LnNvYXBfdmVyc2lvbiIgKTsKICAgICR0aGlzLT5zb2Fwc2VydmVyLT5yZWdpc3RlciggIk1vZHVsZVJlcG9zaXRvcnkuc29hcF9saXN0bW9kdWxlcyIgKTsKICAgICR0aGlzLT5zb2Fwc2VydmVyLT5yZWdpc3RlciggIk1vZHVsZVJlcG9zaXRvcnkuc29hcF9tb2R1bGVtZDVzdW0iICk7CiAgICAkdGhpcy0+c29hcHNlcnZlci0+cmVnaXN0ZXIoICJNb2R1bGVSZXBvc2l0b3J5LnNvYXBfbW9kdWxlaGVscCIgKTsKICAgICR0aGlzLT5zb2Fwc2VydmVyLT5yZWdpc3RlciggIk1vZHVsZVJlcG9zaXRvcnkuc29hcF9tb2R1bGVhYm91dCIgKTsKICAgICR0aGlzLT5zb2Fwc2VydmVyLT5yZWdpc3RlciggIk1vZHVsZVJlcG9zaXRvcnkuc29hcF9tb2R1bGV4bWwiICk7CiAgICAkdGhpcy0+c29hcHNlcnZlci0+cmVnaXN0ZXIoICJNb2R1bGVSZXBvc2l0b3J5LnNvYXBfbW9kdWxlZGV0YWlscyIgKTsKICAgICR0aGlzLT5zb2Fwc2VydmVyLT5zZXJ2aWNlKCRwYXJhbXNbJ0hUVFBfUkFXX1BPU1RfREFUQSddKTsKICB9CgoKICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgLy8gQVBJIE1FVEhPRFMKICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldFhNTExpc3QoKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldFhNTExpc3QoICRmdWxscGF0aCA9IGZhbHNlICkKICB7CiAgICBnbG9iYWwgJGdDbXM7CgogICAgJHJlc3VsdCA9IGFycmF5KCk7CiAgICAkZGlyMSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtb2R1bGVfZGlyZWN0b3J5JywiIik7CiAgICBpZiggJGRpcjEgPT0gJycgKQogICAgICB7CglyZXR1cm4gJHJlc3VsdDsKICAgICAgfQoKICAgICRwYXRoID0gJGdDbXMtPmNvbmZpZ1sndXBsb2Fkc19wYXRoJ10uRElSRUNUT1JZX1NFUEFSQVRPUi4kZGlyMTsKICAgIGlmICggc3Vic3RyICggJHBhdGggLCBzdHJsZW4gKCAkcGF0aCApIC0gMSApICE9ICcvJyApIHsgJHBhdGggLj0gJy8nIDsgfSAgICAgCiAgICBpZiggJGhhbmRsZSA9IG9wZW5kaXIoICRwYXRoICkgKQogICAgICB7Cgl3aGlsZSggZmFsc2UgIT09ICggJGZpbGUgPSByZWFkZGlyKCAkaGFuZGxlICkgKSApCgkgIHsKCSAgICBpZiggJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicgJiYgIWlzX2RpciggJGZpbGUgKSkKCSAgICAgIHsKCQlpZiggcHJlZ19tYXRjaCggJy94bWwkL2knLCAkZmlsZSApICkKCQkgIHsKCQkgICAgaWYoICRmdWxscGF0aCA9PSBmYWxzZSApCgkJICAgICAgewoJCQkkcmVzdWx0W10gPSAkZmlsZTsKCQkgICAgICB9CgkJICAgIGVsc2UKCQkgICAgICB7CgkJCSRyZXN1bHRbXSA9ICRwYXRoLkRJUkVDVE9SWV9TRVBBUkFUT1IuJGZpbGU7CgkJICAgICAgfQoJCSAgfQoJICAgICAgfQoJICB9CgljbG9zZWRpciggJGhhbmRsZSApOwogICAgICB9CgogICAgcmV0dXJuICRyZXN1bHQ7CiAgfQoKICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgLy8gU09BUCBNRVRPRFMKICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIHNvYXBfbGlzdG1vZHVsZXMoKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQoKICAgU09BUCBtZXRob2QgdG8gcmV0dXJuIGFuIGFycmF5IG9mIG1vZHVsZXMgY29udGFpbmVkIHdpdGhpbgogICB0aGUgcmVwb3NpdG9yeS4gIGl0IHNpbXBseSByZWFkcyB0aGUgZGlyZWN0b3J5IGFuZCByZXR1cm5zCiAgIGEgbGlzdCBvZiB0aGUgeG1sIGZpbGVzCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gc29hcF9saXN0bW9kdWxlcygpCiAgewogICAgLy8gdGhpcyBpcyB0aGUgc29hcCBtZXRob2QKICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwogICAgJHEgPSAiU0VMRUNUIGZpbGVuYW1lIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9tb2R1bGVyZXBvc2l0b3J5X2NhY2hlIjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEgKTsKICAgICRyZXN1bHQgPSBhcnJheSgpOwogICAgaWYoICEkZGJyZXN1bHQgKSByZXR1cm4gJHJlc3VsdDsKICAgIHdoaWxlKCAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpICkKICAgICAgewoJJHJlc3VsdFtdID0gJHJvd1snZmlsZW5hbWUnXTsKICAgICAgfQogICAgcmV0dXJuICRyZXN1bHQ7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgc29hcF9tb2R1bGVhYm91dCgpCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCgogICBTT0FQIG1ldGhvZCB0byByZXR1cm4gdGhlIGFib3V0IHBvcnRpb24gb2YgYW4geG1sIGZpbGUKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBzb2FwX21vZHVsZWFib3V0KCAkbmFtZSApCiAgewogICAgcmV0dXJuICR0aGlzLT5fR2V0WE1MQWJvdXQoICRuYW1lICk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgc29hcF9tb2R1bGVkZXRhaWxzKCkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKCiAgIFNPQVAgbWV0aG9kIHRvIHJldHVybiBzb21lIGRldGFpbHMgYWJvdXQgYW4geG1sIGZpbGUKICAgaXQgcmV0dXJucyBhIGhhc2ggd2l0aCB0aGUgZm9sbG93aW5nIGtleXMKICAgICAgJ25hbWUnIC0gdGhlIG5hbWUgb2YgdGhlIG1vZHVsZQogICAgICAnbWQ1c3VtJyAtIGNoZWNrc3VtCiAgICAgICdkYXRlJyAgLSBEYXRlIG9mIHRoZSB4bWwgZmlsZSAvLyB0b2RvCiAgICAgICdzaXplJyAgLSBzaXplIG9mIHRoZSB4bWwgZmlsZSAoaW4gYnl0ZXMpCiAgICAgICd2ZXJzaW9uJyAtIE1vZHVsZSB2ZXJzaW9uCiAgICAgICdkZXNjcmlwdGlvbicgLSBNb2R1bGUgZGVzY3JpcHRpb24KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBzb2FwX21vZHVsZWRldGFpbHMoICRuYW1lICkKICB7CiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKICAgICRxID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9tb2R1bGVyZXBvc2l0b3J5X2NhY2hlIFdIRVJFIGZpbGVuYW1lID0gPyI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJG5hbWUgKSApOwogICAgaWYoICEkZGJyZXN1bHQgKQogICAgICB7CglyZXR1cm4gYXJyYXkoIGZhbHNlLCAkdGhpcy0+TGFuZygnZXJyb3JfZGJlcnJvcicpICk7CiAgICAgIH0KICAgICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7CiAgICBpZiggIWNvdW50KCAkcm93ICkgKQogICAgICB7CglyZXR1cm4gYXJyYXkoIGZhbHNlLCAkdGhpcy0+TGFuZygnZXJyb3Jfbm9kYXRhJykgKTsKICAgICAgfQogICAgJHJlc3VsdHMgPSBhcnJheSgpOwogICAgJHJlc3VsdHNbJ25hbWUnXSA9ICRyb3dbJ25hbWUnXTsKICAgICRyZXN1bHRzWydtZDVzdW0nXSA9ICRyb3dbJ21kNXN1bSddOwogICAgJHJlc3VsdHNbJ3ZlcnNpb24nXSA9ICRyb3dbJ2Z2ZXJzaW9uJ107CiAgICAkcmVzdWx0c1snZGVzY3JpcHRpb24nXSA9ICRyb3dbJ2luZm8nXTsKICAgICRyZXN1bHRzWydkYXRlJ10gPSAkcm93WydmZGF0ZSddOwogICAgJHJlc3VsdHNbJ3NpemUnXSA9ICRyb3dbJ2ZzaXplJ107CiAgICByZXR1cm4gYXJyYXkoIHRydWUsICRyZXN1bHRzICk7CiAgfQoKICAKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBzb2FwX21vZHVsZWhlbHAoKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQoKICAgU09BUCBtZXRob2QgdG8gcmV0dXJuIHRoZSBoZWxwIHBvcnRpb24gb2YgYW4geG1sIGZpbGUKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBzb2FwX21vZHVsZWhlbHAoICRuYW1lICkKICB7CiAgICAvL3JldHVybiAiSEVMTE8gVEhFUkUiOwogICAgcmV0dXJuICR0aGlzLT5fR2V0WE1MSGVscCggJG5hbWUgKTsKICB9CgogIAogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIHNvYXBfbW9kdWxlbWQ1c3VtKCkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKCiAgIFNPQVAgbWV0aG9kIHRvIHJldHVybiB0aGUgbWQ1c3VtIGZvciBhIHBhcnRpY3VsYXIgeG1sIGZpbGUKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBzb2FwX21vZHVsZW1kNXN1bSggJG5hbWUgKQogIHsKICAgIC8vIHRoaXMgaXMgdGhlIHNvYXAgbWV0aG9kCiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKCiAgICAkcSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfbW9kdWxlcmVwb3NpdG9yeV9jYWNoZSBXSEVSRSBmaWxlbmFtZSA9ID8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICRuYW1lICkgKTsKICAgIGlmKCAhJGRicmVzdWx0ICkKICAgICAgewoJcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICBlbHNlCiAgICAgIHsKCSRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7CglyZXR1cm4gJHJvd1snbWQ1c3VtJ107CiAgICAgIH0KICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBzb2FwX21vZHVsZXhtbCgpCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCgogICBTT0FQIG1ldGhvZCB0byByZXR1cm4gdGhlIGVudGlyZSB4bWwgZmlsZQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIHNvYXBfbW9kdWxleG1sKCAkbmFtZSApCiAgewogICAgcmV0dXJuICR0aGlzLT5fR2V0WE1MRmlsZSggJG5hbWUgKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBzb2FwX3ZlcnNpb24oKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQoKICAgU09BUCBtZXRob2QgdG8gcmV0dXJuIHRoZSBtb2R1bGUgcmVwb3NpdG9yeSB2ZXJzaW9uCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gc29hcF92ZXJzaW9uKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkdldFZlcnNpb24oKTsKICB9Cgp9IC8vIGNsYXNzCgo/Pgo=]]></data>
  </file>
  <file>
    <filename>/templates/</filename>
    <isdir>1</isdir>
  </file>
  <file>
    <filename>/templates/adminpanel.tpl</filename>
    <isdir>0</isdir>
    <data><![CDATA[PGgzPnskdGl0bGVfc2VjdGlvbn08L2gzPgo8cD57JGFkbWluX25hdn08L3A+Cnskd2VsY29tZV90ZXh0fQ==]]></data>
  </file>
  <file>
    <filename>/templates/adminprefs.tpl</filename>
    <isdir>0</isdir>
    <data><![CDATA[e2lmICRtZXNzYWdlIT0nJ308cD57JG1lc3NhZ2V9PC9wPnsvaWZ9Cnskc3RhcnRmb3JtfQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X21vZHVsZXBhdGh9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X21vZHVsZXBhdGh9Jm5ic3A7eyRpbmZvX21vZHVsZXBhdGh9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfcmVzZXRjYWNoZX06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfcmVzZXRjYWNoZX0mbmJzcDt7JGluZm9fcmVzZXRjYWNoZX08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9oZWxwYW5kYWJvdXR9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2hlbHBhbmRhYm91dH0mbmJzcDt7JGluZm9faGVscGFuZGFib3V0fTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2NyZWF0ZXBhdGh9Jm5ic3A7eyRwcm9tcHRfY3JlYXRlcGF0aH08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzdWJtaXR9PC9wPgoJPC9kaXY+CnskZW5kZm9ybX0K]]></data>
  </file>
  <file>
    <filename>/templates/error.tpl</filename>
    <isdir>0</isdir>
    <data><![CDATA[PGgzPnskdGl0bGVfZXJyb3J9PC9oMz4KPHA+eyRhZG1pbl9uYXZ9PC9wPgp7aWYgJG1lc3NhZ2UhPScnfTxwPnskbWVzc2FnZX08L3A+ey9pZn0=]]></data>
  </file>
  <file>
    <filename>/templates/plugin.tpl</filename>
    <isdir>0</isdir>
    <data><![CDATA[PGgzPnskbG91ZG5lc3N9PC9oMz4=]]></data>
  </file>
  <file>
    <filename>/testserver.php</filename>
    <isdir>0</isdir>
    <data><![CDATA[PD9waHAKcmVxdWlyZV9vbmNlKCcuLi9udVNPQVAvY2xhc3Nlcy9udXNvYXAucGhwJyk7Cgokc2VydmVyID0gbmV3IHNvYXBfc2VydmVyOwoKJHNlcnZlci0+cmVnaXN0ZXIoJ2hlbGxvJyk7CgpmdW5jdGlvbiBoZWxsbyAoJG5hbWUpewpyZXR1cm4gIkhpIHRoZXJlICRuYW1lLiI7Cn0KCiRzZXJ2ZXItPnNlcnZpY2UoJEhUVFBfUkFXX1BPU1RfREFUQSk7Cj8+]]></data>
  </file>
</module>
